diff --git a/.gitignore b/.gitignore index e458ed5..40b010c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .worktrees/ +node_modules/ diff --git a/skills/flight-finder/node_modules/.bin/esbuild b/skills/flight-finder/node_modules/.bin/esbuild deleted file mode 120000 index c83ac07..0000000 --- a/skills/flight-finder/node_modules/.bin/esbuild +++ /dev/null @@ -1 +0,0 @@ -../esbuild/bin/esbuild \ No newline at end of file diff --git a/skills/flight-finder/node_modules/.bin/tsc b/skills/flight-finder/node_modules/.bin/tsc deleted file mode 120000 index 0863208..0000000 --- a/skills/flight-finder/node_modules/.bin/tsc +++ /dev/null @@ -1 +0,0 @@ -../typescript/bin/tsc \ No newline at end of file diff --git a/skills/flight-finder/node_modules/.bin/tsserver b/skills/flight-finder/node_modules/.bin/tsserver deleted file mode 120000 index f8f8f1a..0000000 --- a/skills/flight-finder/node_modules/.bin/tsserver +++ /dev/null @@ -1 +0,0 @@ -../typescript/bin/tsserver \ No newline at end of file diff --git a/skills/flight-finder/node_modules/.bin/tsx b/skills/flight-finder/node_modules/.bin/tsx deleted file mode 120000 index f7282dd..0000000 --- a/skills/flight-finder/node_modules/.bin/tsx +++ /dev/null @@ -1 +0,0 @@ -../tsx/dist/cli.mjs \ No newline at end of file diff --git a/skills/flight-finder/node_modules/.package-lock.json b/skills/flight-finder/node_modules/.package-lock.json deleted file mode 100644 index 2bdb7e4..0000000 --- a/skills/flight-finder/node_modules/.package-lock.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "name": "flight-finder-scripts", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", - "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.20.tgz", - "integrity": "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/pdfkit": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.17.5.tgz", - "integrity": "sha512-T3ZHnvF91HsEco5ClhBCOuBwobZfPcI2jaiSHybkkKYq4KhVIIurod94JVKvDIG0JXT6o3KiERC0X0//m8dyrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "license": "MIT" - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.27.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", - "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.4", - "@esbuild/android-arm": "0.27.4", - "@esbuild/android-arm64": "0.27.4", - "@esbuild/android-x64": "0.27.4", - "@esbuild/darwin-arm64": "0.27.4", - "@esbuild/darwin-x64": "0.27.4", - "@esbuild/freebsd-arm64": "0.27.4", - "@esbuild/freebsd-x64": "0.27.4", - "@esbuild/linux-arm": "0.27.4", - "@esbuild/linux-arm64": "0.27.4", - "@esbuild/linux-ia32": "0.27.4", - "@esbuild/linux-loong64": "0.27.4", - "@esbuild/linux-mips64el": "0.27.4", - "@esbuild/linux-ppc64": "0.27.4", - "@esbuild/linux-riscv64": "0.27.4", - "@esbuild/linux-s390x": "0.27.4", - "@esbuild/linux-x64": "0.27.4", - "@esbuild/netbsd-arm64": "0.27.4", - "@esbuild/netbsd-x64": "0.27.4", - "@esbuild/openbsd-arm64": "0.27.4", - "@esbuild/openbsd-x64": "0.27.4", - "@esbuild/openharmony-arm64": "0.27.4", - "@esbuild/sunos-x64": "0.27.4", - "@esbuild/win32-arm64": "0.27.4", - "@esbuild/win32-ia32": "0.27.4", - "@esbuild/win32-x64": "0.27.4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", - "license": "MIT", - "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.7", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", - "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/jpeg-exif": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", - "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT" - }, - "node_modules/linebreak": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz", - "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==", - "license": "MIT", - "dependencies": { - "base64-js": "0.0.8", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/linebreak/node_modules/base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "license": "MIT" - }, - "node_modules/pdfkit": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.17.2.tgz", - "integrity": "sha512-UnwF5fXy08f0dnp4jchFYAROKMNTaPqb/xgR8GtCzIcqoTnbOqtp3bwKvO4688oHI6vzEEs8Q6vqqEnC5IUELw==", - "license": "MIT", - "dependencies": { - "crypto-js": "^4.2.0", - "fontkit": "^2.0.4", - "jpeg-exif": "^1.1.4", - "linebreak": "^1.1.0", - "png-js": "^1.0.0" - } - }, - "node_modules/png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restructure": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "license": "MIT" - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "license": "MIT" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - } - } -} diff --git a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/README.md b/skills/flight-finder/node_modules/@esbuild/darwin-arm64/README.md deleted file mode 100644 index c2c0398..0000000 --- a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# esbuild - -This is the macOS ARM 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details. diff --git a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/bin/esbuild b/skills/flight-finder/node_modules/@esbuild/darwin-arm64/bin/esbuild deleted file mode 100755 index 073f4e8..0000000 Binary files a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/bin/esbuild and /dev/null differ diff --git a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/package.json b/skills/flight-finder/node_modules/@esbuild/darwin-arm64/package.json deleted file mode 100644 index dc46944..0000000 --- a/skills/flight-finder/node_modules/@esbuild/darwin-arm64/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@esbuild/darwin-arm64", - "version": "0.27.4", - "description": "The macOS ARM 64-bit binary for esbuild, a JavaScript bundler.", - "repository": { - "type": "git", - "url": "git+https://github.com/evanw/esbuild.git" - }, - "license": "MIT", - "preferUnplugged": true, - "engines": { - "node": ">=18" - }, - "os": [ - "darwin" - ], - "cpu": [ - "arm64" - ] -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/LICENSE b/skills/flight-finder/node_modules/@swc/helpers/LICENSE deleted file mode 100644 index 6a08504..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2024 SWC contributors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. \ No newline at end of file diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json deleted file mode 100644 index 7d6b954..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_apply_decorated_descriptor.cjs", - "module": "../../esm/_apply_decorated_descriptor.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json deleted file mode 100644 index 80f208c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_apply_decs_2203_r.cjs", - "module": "../../esm/_apply_decs_2203_r.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2311/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2311/package.json deleted file mode 100644 index 5ee5086..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_apply_decs_2311/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_apply_decs_2311.cjs", - "module": "../../esm/_apply_decs_2311.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_array_like_to_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_array_like_to_array/package.json deleted file mode 100644 index 37bd07f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_array_like_to_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_array_like_to_array.cjs", - "module": "../../esm/_array_like_to_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_array_with_holes/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_array_with_holes/package.json deleted file mode 100644 index 7f602bc..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_array_with_holes/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_array_with_holes.cjs", - "module": "../../esm/_array_with_holes.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_array_without_holes/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_array_without_holes/package.json deleted file mode 100644 index aeefbfc..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_array_without_holes/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_array_without_holes.cjs", - "module": "../../esm/_array_without_holes.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_assert_this_initialized/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_assert_this_initialized/package.json deleted file mode 100644 index fab7d97..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_assert_this_initialized/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_assert_this_initialized.cjs", - "module": "../../esm/_assert_this_initialized.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator/package.json deleted file mode 100644 index 6c36740..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_async_generator.cjs", - "module": "../../esm/_async_generator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator_delegate/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator_delegate/package.json deleted file mode 100644 index aa24505..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_async_generator_delegate/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_async_generator_delegate.cjs", - "module": "../../esm/_async_generator_delegate.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_async_iterator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_async_iterator/package.json deleted file mode 100644 index b87fa5c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_async_iterator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_async_iterator.cjs", - "module": "../../esm/_async_iterator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_async_to_generator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_async_to_generator/package.json deleted file mode 100644 index 1bfa415..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_async_to_generator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_async_to_generator.cjs", - "module": "../../esm/_async_to_generator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_await_async_generator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_await_async_generator/package.json deleted file mode 100644 index 62d48a7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_await_async_generator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_await_async_generator.cjs", - "module": "../../esm/_await_async_generator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_await_value/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_await_value/package.json deleted file mode 100644 index a0fe68d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_await_value/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_await_value.cjs", - "module": "../../esm/_await_value.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_call_super/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_call_super/package.json deleted file mode 100644 index 46cf64d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_call_super/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_call_super.cjs", - "module": "../../esm/_call_super.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json deleted file mode 100644 index 4d8c7cf..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_check_private_redeclaration.cjs", - "module": "../../esm/_check_private_redeclaration.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json deleted file mode 100644 index 8322bad..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_apply_descriptor_destructure.cjs", - "module": "../../esm/_class_apply_descriptor_destructure.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json deleted file mode 100644 index eb0c92d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_apply_descriptor_get.cjs", - "module": "../../esm/_class_apply_descriptor_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json deleted file mode 100644 index 68de755..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_apply_descriptor_set.cjs", - "module": "../../esm/_class_apply_descriptor_set.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json deleted file mode 100644 index 8b8a5c9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_apply_descriptor_update.cjs", - "module": "../../esm/_class_apply_descriptor_update.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_call_check/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_call_check/package.json deleted file mode 100644 index 69345d4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_call_check/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_call_check.cjs", - "module": "../../esm/_class_call_check.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json deleted file mode 100644 index d69f9f5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_check_private_static_access.cjs", - "module": "../../esm/_class_check_private_static_access.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json deleted file mode 100644 index 8dd77c2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_check_private_static_field_descriptor.cjs", - "module": "../../esm/_class_check_private_static_field_descriptor.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json deleted file mode 100644 index 7c3965f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_extract_field_descriptor.cjs", - "module": "../../esm/_class_extract_field_descriptor.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json deleted file mode 100644 index 8ac4b51..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_name_tdz_error.cjs", - "module": "../../esm/_class_name_tdz_error.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json deleted file mode 100644 index 044346e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_destructure.cjs", - "module": "../../esm/_class_private_field_destructure.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_get/package.json deleted file mode 100644 index 4650d80..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_get.cjs", - "module": "../../esm/_class_private_field_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_init/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_init/package.json deleted file mode 100644 index 8c57a74..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_init/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_init.cjs", - "module": "../../esm/_class_private_field_init.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json deleted file mode 100644 index 07df6d8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_loose_base.cjs", - "module": "../../esm/_class_private_field_loose_base.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json deleted file mode 100644 index abd7481..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_loose_key.cjs", - "module": "../../esm/_class_private_field_loose_key.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_set/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_set/package.json deleted file mode 100644 index 477326e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_set/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_set.cjs", - "module": "../../esm/_class_private_field_set.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_update/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_update/package.json deleted file mode 100644 index ecb502f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_field_update/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_field_update.cjs", - "module": "../../esm/_class_private_field_update.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_get/package.json deleted file mode 100644 index 4d01b2e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_method_get.cjs", - "module": "../../esm/_class_private_method_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_init/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_init/package.json deleted file mode 100644 index 7c9e406..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_init/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_method_init.cjs", - "module": "../../esm/_class_private_method_init.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_set/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_set/package.json deleted file mode 100644 index bc84229..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_private_method_set/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_private_method_set.cjs", - "module": "../../esm/_class_private_method_set.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json deleted file mode 100644 index 7cc7dc6..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_static_private_field_destructure.cjs", - "module": "../../esm/_class_static_private_field_destructure.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json deleted file mode 100644 index d626f6f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_static_private_field_spec_get.cjs", - "module": "../../esm/_class_static_private_field_spec_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json deleted file mode 100644 index 7a4d089..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_static_private_field_spec_set.cjs", - "module": "../../esm/_class_static_private_field_spec_set.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json deleted file mode 100644 index c10abd0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_static_private_field_update.cjs", - "module": "../../esm/_class_static_private_field_update.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json deleted file mode 100644 index 1f4f139..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_class_static_private_method_get.cjs", - "module": "../../esm/_class_static_private_method_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_construct/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_construct/package.json deleted file mode 100644 index 0eea254..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_construct/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_construct.cjs", - "module": "../../esm/_construct.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_create_class/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_create_class/package.json deleted file mode 100644 index 191f7ed..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_create_class/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_create_class.cjs", - "module": "../../esm/_create_class.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json deleted file mode 100644 index 6825786..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_create_for_of_iterator_helper_loose.cjs", - "module": "../../esm/_create_for_of_iterator_helper_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_create_super/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_create_super/package.json deleted file mode 100644 index 3442b58..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_create_super/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_create_super.cjs", - "module": "../../esm/_create_super.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_decorate/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_decorate/package.json deleted file mode 100644 index d33cc5b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_decorate/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_decorate.cjs", - "module": "../../esm/_decorate.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_defaults/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_defaults/package.json deleted file mode 100644 index e44774f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_defaults/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_defaults.cjs", - "module": "../../esm/_defaults.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json deleted file mode 100644 index 63c488e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_define_enumerable_properties.cjs", - "module": "../../esm/_define_enumerable_properties.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_define_property/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_define_property/package.json deleted file mode 100644 index ac05789..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_define_property/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_define_property.cjs", - "module": "../../esm/_define_property.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_dispose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_dispose/package.json deleted file mode 100644 index a6e5f50..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_dispose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_dispose.cjs", - "module": "../../esm/_dispose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_export_star/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_export_star/package.json deleted file mode 100644 index c47d22b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_export_star/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_export_star.cjs", - "module": "../../esm/_export_star.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_extends/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_extends/package.json deleted file mode 100644 index 40fc9ac..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_extends/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_extends.cjs", - "module": "../../esm/_extends.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_get/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_get/package.json deleted file mode 100644 index f6cb810..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_get/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_get.cjs", - "module": "../../esm/_get.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_get_prototype_of/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_get_prototype_of/package.json deleted file mode 100644 index 7c4ca8e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_get_prototype_of/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_get_prototype_of.cjs", - "module": "../../esm/_get_prototype_of.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_identity/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_identity/package.json deleted file mode 100644 index 3b45f4c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_identity/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_identity.cjs", - "module": "../../esm/_identity.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_inherits/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_inherits/package.json deleted file mode 100644 index 425da86..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_inherits/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_inherits.cjs", - "module": "../../esm/_inherits.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_inherits_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_inherits_loose/package.json deleted file mode 100644 index ffa67dc..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_inherits_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_inherits_loose.cjs", - "module": "../../esm/_inherits_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_define_property/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_define_property/package.json deleted file mode 100644 index b65ad3b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_define_property/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_initializer_define_property.cjs", - "module": "../../esm/_initializer_define_property.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json deleted file mode 100644 index 94653a8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_initializer_warning_helper.cjs", - "module": "../../esm/_initializer_warning_helper.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_instanceof/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_instanceof/package.json deleted file mode 100644 index 523c344..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_instanceof/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_instanceof.cjs", - "module": "../../esm/_instanceof.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_default/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_default/package.json deleted file mode 100644 index 70d438f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_default/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_interop_require_default.cjs", - "module": "../../esm/_interop_require_default.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json deleted file mode 100644 index b3469a5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_interop_require_wildcard.cjs", - "module": "../../esm/_interop_require_wildcard.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_function/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_function/package.json deleted file mode 100644 index 6380c81..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_function/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_is_native_function.cjs", - "module": "../../esm/_is_native_function.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json deleted file mode 100644 index 9aa84b0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_is_native_reflect_construct.cjs", - "module": "../../esm/_is_native_reflect_construct.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array/package.json deleted file mode 100644 index 7754bd4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_iterable_to_array.cjs", - "module": "../../esm/_iterable_to_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json deleted file mode 100644 index a69c45e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_iterable_to_array_limit.cjs", - "module": "../../esm/_iterable_to_array_limit.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json deleted file mode 100644 index a4a392e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_iterable_to_array_limit_loose.cjs", - "module": "../../esm/_iterable_to_array_limit_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_jsx/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_jsx/package.json deleted file mode 100644 index be88614..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_jsx/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_jsx.cjs", - "module": "../../esm/_jsx.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_new_arrow_check/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_new_arrow_check/package.json deleted file mode 100644 index df1d9eb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_new_arrow_check/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_new_arrow_check.cjs", - "module": "../../esm/_new_arrow_check.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_rest/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_rest/package.json deleted file mode 100644 index 43d3d3a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_rest/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_non_iterable_rest.cjs", - "module": "../../esm/_non_iterable_rest.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_spread/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_spread/package.json deleted file mode 100644 index 0df885d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_non_iterable_spread/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_non_iterable_spread.cjs", - "module": "../../esm/_non_iterable_spread.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json deleted file mode 100644 index b9e7f60..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_object_destructuring_empty.cjs", - "module": "../../esm/_object_destructuring_empty.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread/package.json deleted file mode 100644 index 79c030a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_object_spread.cjs", - "module": "../../esm/_object_spread.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread_props/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread_props/package.json deleted file mode 100644 index 1fa988b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_object_spread_props/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_object_spread_props.cjs", - "module": "../../esm/_object_spread_props.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties/package.json deleted file mode 100644 index 5553145..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_object_without_properties.cjs", - "module": "../../esm/_object_without_properties.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json deleted file mode 100644 index 8f08da9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_object_without_properties_loose.cjs", - "module": "../../esm/_object_without_properties_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_overload_yield/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_overload_yield/package.json deleted file mode 100644 index 3b09c3f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_overload_yield/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_overload_yield.cjs", - "module": "../../esm/_overload_yield.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_possible_constructor_return/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_possible_constructor_return/package.json deleted file mode 100644 index 06256ff..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_possible_constructor_return/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_possible_constructor_return.cjs", - "module": "../../esm/_possible_constructor_return.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_read_only_error/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_read_only_error/package.json deleted file mode 100644 index c724d5e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_read_only_error/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_read_only_error.cjs", - "module": "../../esm/_read_only_error.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_set/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_set/package.json deleted file mode 100644 index c90145b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_set/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_set.cjs", - "module": "../../esm/_set.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_set_prototype_of/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_set_prototype_of/package.json deleted file mode 100644 index d08cf84..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_set_prototype_of/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_set_prototype_of.cjs", - "module": "../../esm/_set_prototype_of.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json deleted file mode 100644 index cc34934..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_skip_first_generator_next.cjs", - "module": "../../esm/_skip_first_generator_next.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array/package.json deleted file mode 100644 index 52b4fbb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_sliced_to_array.cjs", - "module": "../../esm/_sliced_to_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json deleted file mode 100644 index ca2c35b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_sliced_to_array_loose.cjs", - "module": "../../esm/_sliced_to_array_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_super_prop_base/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_super_prop_base/package.json deleted file mode 100644 index f6557ef..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_super_prop_base/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_super_prop_base.cjs", - "module": "../../esm/_super_prop_base.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal/package.json deleted file mode 100644 index 63d2a40..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_tagged_template_literal.cjs", - "module": "../../esm/_tagged_template_literal.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json deleted file mode 100644 index 6a45bd3..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_tagged_template_literal_loose.cjs", - "module": "../../esm/_tagged_template_literal_loose.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_throw/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_throw/package.json deleted file mode 100644 index 1418ff4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_throw/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_throw.cjs", - "module": "../../esm/_throw.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_to_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_to_array/package.json deleted file mode 100644 index 2c5ce50..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_to_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_to_array.cjs", - "module": "../../esm/_to_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_to_consumable_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_to_consumable_array/package.json deleted file mode 100644 index 6424d11..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_to_consumable_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_to_consumable_array.cjs", - "module": "../../esm/_to_consumable_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_to_primitive/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_to_primitive/package.json deleted file mode 100644 index 1ee625a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_to_primitive/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_to_primitive.cjs", - "module": "../../esm/_to_primitive.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_to_property_key/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_to_property_key/package.json deleted file mode 100644 index 6f2e9a2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_to_property_key/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_to_property_key.cjs", - "module": "../../esm/_to_property_key.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json deleted file mode 100644 index 8b20dac..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_add_disposable_resource.cjs", - "module": "../../esm/_ts_add_disposable_resource.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_decorate/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_decorate/package.json deleted file mode 100644 index 02279e9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_decorate/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_decorate.cjs", - "module": "../../esm/_ts_decorate.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json deleted file mode 100644 index 47841c0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_dispose_resources.cjs", - "module": "../../esm/_ts_dispose_resources.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_generator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_generator/package.json deleted file mode 100644 index 0dc9588..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_generator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_generator.cjs", - "module": "../../esm/_ts_generator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_metadata/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_metadata/package.json deleted file mode 100644 index d7c1f1c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_metadata/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_metadata.cjs", - "module": "../../esm/_ts_metadata.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_param/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_param/package.json deleted file mode 100644 index 18af822..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_param/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_param.cjs", - "module": "../../esm/_ts_param.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_rewrite_relative_import_extension/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_rewrite_relative_import_extension/package.json deleted file mode 100644 index cacd37a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_rewrite_relative_import_extension/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_rewrite_relative_import_extension.cjs", - "module": "../../esm/_ts_rewrite_relative_import_extension.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_values/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_ts_values/package.json deleted file mode 100644 index 5fe6a46..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_ts_values/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_ts_values.cjs", - "module": "../../esm/_ts_values.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_type_of/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_type_of/package.json deleted file mode 100644 index 620eed9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_type_of/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_type_of.cjs", - "module": "../../esm/_type_of.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json deleted file mode 100644 index 54549be..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_unsupported_iterable_to_array.cjs", - "module": "../../esm/_unsupported_iterable_to_array.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_update/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_update/package.json deleted file mode 100644 index f166b0c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_update/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_update.cjs", - "module": "../../esm/_update.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_using/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_using/package.json deleted file mode 100644 index 444f980..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_using/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_using.cjs", - "module": "../../esm/_using.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_using_ctx/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_using_ctx/package.json deleted file mode 100644 index b1aaebc..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_using_ctx/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_using_ctx.cjs", - "module": "../../esm/_using_ctx.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_async_generator/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_async_generator/package.json deleted file mode 100644 index 774dcc1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_async_generator/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_wrap_async_generator.cjs", - "module": "../../esm/_wrap_async_generator.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_native_super/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_native_super/package.json deleted file mode 100644 index ce55933..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_native_super/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_wrap_native_super.cjs", - "module": "../../esm/_wrap_native_super.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_reg_exp/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_reg_exp/package.json deleted file mode 100644 index ab61397..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_wrap_reg_exp/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_wrap_reg_exp.cjs", - "module": "../../esm/_wrap_reg_exp.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/_write_only_error/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/_write_only_error/package.json deleted file mode 100644 index 1767535..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/_write_only_error/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/_write_only_error.cjs", - "module": "../../esm/_write_only_error.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/_/index/package.json b/skills/flight-finder/node_modules/@swc/helpers/_/index/package.json deleted file mode 100644 index b855fe7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/_/index/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "main": "../../cjs/index.cjs", - "module": "../../esm/index.js" -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs deleted file mode 100644 index edd1186..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -function _apply_decorated_descriptor(target, property, decorators, descriptor, context) { - var desc = {}; - - Object["ke" + "ys"](descriptor).forEach(function(key) { - desc[key] = descriptor[key]; - }); - desc.enumerable = !!desc.enumerable; - desc.configurable = !!desc.configurable; - - if ("value" in desc || desc.initializer) desc.writable = true; - desc = decorators.slice().reverse().reduce(function(desc, decorator) { - return decorator ? decorator(target, property, desc) || desc : desc; - }, desc); - - var hasAccessor = Object.prototype.hasOwnProperty.call(desc, "get") || Object.prototype.hasOwnProperty.call(desc, "set"); - - if (context && desc.initializer !== void 0 && !hasAccessor) { - desc.value = desc.initializer ? desc.initializer.call(context) : void 0; - desc.initializer = undefined; - } - if (hasAccessor) { - delete desc.writable; - delete desc.initializer; - delete desc.value; - } - if (desc.initializer === void 0) { - Object["define" + "Property"](target, property, desc); - desc = null; - } - - return desc; -} -exports._ = _apply_decorated_descriptor; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs deleted file mode 100644 index 6dc4b81..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs +++ /dev/null @@ -1,574 +0,0 @@ -"use strict"; - -/* @minVersion 7.20.0 */ - -/** - Enums are used in this file, but not assigned to vars to avoid non-hoistable values - - CONSTRUCTOR = 0; - PUBLIC = 1; - PRIVATE = 2; - - FIELD = 0; - ACCESSOR = 1; - METHOD = 2; - GETTER = 3; - SETTER = 4; - - STATIC = 5; - - CLASS = 10; // only used in assertValidReturnValue -*/ - -function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) { - function createAddInitializerMethod(initializers, decoratorFinishedRef) { - return function addInitializer(initializer) { - assertNotFinished(decoratorFinishedRef, "addInitializer"); - assertCallable(initializer, "An initializer"); - initializers.push(initializer); - }; - } - - function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) { - var kindStr; - - switch (kind) { - case 1 /* ACCESSOR */: - kindStr = "accessor"; - break; - case 2 /* METHOD */: - kindStr = "method"; - break; - case 3 /* GETTER */: - kindStr = "getter"; - break; - case 4 /* SETTER */: - kindStr = "setter"; - break; - default: - kindStr = "field"; - } - - var ctx = { kind: kindStr, name: isPrivate ? "#" + name : name, static: isStatic, private: isPrivate, metadata: metadata }; - - var decoratorFinishedRef = { v: false }; - - ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef); - - var get, set; - if (kind === 0 /* FIELD */) { - if (isPrivate) { - get = desc.get; - set = desc.set; - } else { - get = function() { - return this[name]; - }; - set = function(v) { - this[name] = v; - }; - } - } else if (kind === 2 /* METHOD */) { - get = function() { - return desc.value; - }; - } else { - // replace with values that will go through the final getter and setter - if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) { - get = function() { - return desc.get.call(this); - }; - } - - if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) { - set = function(v) { - desc.set.call(this, v); - }; - } - } - - if (get) { - var originalGet = get; - get = function(target) { - if (arguments.length === 0) { - target = this; - } - return originalGet.call(target); - }; - } - - if (set) { - var originalSet = set; - set = function(target, value) { - if (arguments.length === 1) { - value = target; - target = this; - } - return originalSet.call(target, value); - }; - } - - if (isPrivate) { - ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set }; - } else { - var has = function(target) { - return name in target; - }; - ctx.access = get && set ? { has: has, get: get, set: set } : get ? { has: has, get: get } : { has: has, set: set }; - } - - var newValue = dec(value, ctx); - decoratorFinishedRef.v = true; - return newValue; - } - - function assertNotFinished(decoratorFinishedRef, fnName) { - if (decoratorFinishedRef.v) { - throw new Error("attempted to call " + fnName + " after decoration was finished"); - } - } - - function assertCallable(fn, hint) { - if (typeof fn !== "function") { - throw new TypeError(hint + " must be a function"); - } - } - - function assertValidReturnValue(kind, value) { - var type = typeof value; - - if (kind === 1 /* ACCESSOR */) { - if (type !== "object" || value === null) { - throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); - } - if (value.get !== undefined) { - assertCallable(value.get, "accessor.get"); - } - if (value.set !== undefined) { - assertCallable(value.set, "accessor.set"); - } - if (value.init !== undefined) { - assertCallable(value.init, "accessor.init"); - } - } else if (type !== "function") { - var hint; - if (kind === 0 /* FIELD */) { - hint = "field"; - } else if (kind === 10 /* CLASS */) { - hint = "class"; - } else { - hint = "method"; - } - throw new TypeError(hint + " decorators must return a function or void 0"); - } - } - - function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) { - var decs = decInfo[0]; - - var desc, init, value; - - if (isPrivate) { - if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) { - desc = { get: decInfo[3], set: decInfo[4] }; - } else if (kind === 3 /* GETTER */) { - desc = { get: decInfo[3] }; - } else if (kind === 4 /* SETTER */) { - desc = { set: decInfo[3] }; - } else { - desc = { value: decInfo[3] }; - } - } else if (kind !== 0 /* FIELD */) { - desc = Object.getOwnPropertyDescriptor(base, name); - } - - if (kind === 1 /* ACCESSOR */) { - value = { get: desc.get, set: desc.set }; - } else if (kind === 2 /* METHOD */) { - value = desc.value; - } else if (kind === 3 /* GETTER */) { - value = desc.get; - } else if (kind === 4 /* SETTER */) { - value = desc.set; - } - - var newValue, get, set; - - if (typeof decs === "function") { - newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value); - - if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); - - if (kind === 0 /* FIELD */) { - init = newValue; - } else if (kind === 1 /* ACCESSOR */) { - init = newValue.init; - get = newValue.get || value.get; - set = newValue.set || value.set; - - value = { get: get, set: set }; - } else { - value = newValue; - } - } - } else { - for (var i = decs.length - 1; i >= 0; i--) { - var dec = decs[i]; - - newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value); - - if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); - var newInit; - - if (kind === 0 /* FIELD */) { - newInit = newValue; - } else if (kind === 1 /* ACCESSOR */) { - newInit = newValue.init; - get = newValue.get || value.get; - set = newValue.set || value.set; - - value = { get: get, set: set }; - } else { - value = newValue; - } - - if (newInit !== void 0) { - if (init === void 0) { - init = newInit; - } else if (typeof init === "function") { - init = [init, newInit]; - } else { - init.push(newInit); - } - } - } - } - } - - if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) { - if (init === void 0) { - // If the initializer was void 0, sub in a dummy initializer - init = function(instance, init) { - return init; - }; - } else if (typeof init !== "function") { - var ownInitializers = init; - - init = function(instance, init) { - var value = init; - - for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value); - - return value; - }; - } else { - var originalInitializer = init; - - init = function(instance, init) { - return originalInitializer.call(instance, init); - }; - } - - ret.push(init); - } - - if (kind !== 0 /* FIELD */) { - if (kind === 1 /* ACCESSOR */) { - desc.get = value.get; - desc.set = value.set; - } else if (kind === 2 /* METHOD */) { - desc.value = value; - } else if (kind === 3 /* GETTER */) { - desc.get = value; - } else if (kind === 4 /* SETTER */) { - desc.set = value; - } - - if (isPrivate) { - if (kind === 1 /* ACCESSOR */) { - ret.push(function(instance, args) { - return value.get.call(instance, args); - }); - ret.push(function(instance, args) { - return value.set.call(instance, args); - }); - } else if (kind === 2 /* METHOD */) { - ret.push(value); - } else { - ret.push(function(instance, args) { - return value.call(instance, args); - }); - } - } else { - Object.defineProperty(base, name, desc); - } - } - } - - function applyMemberDecs(Class, decInfos, metadata) { - var ret = []; - var protoInitializers; - var staticInitializers; - - var existingProtoNonFields = new Map(); - var existingStaticNonFields = new Map(); - - for (var i = 0; i < decInfos.length; i++) { - var decInfo = decInfos[i]; - - // skip computed property names - if (!Array.isArray(decInfo)) continue; - - var kind = decInfo[1]; - var name = decInfo[2]; - var isPrivate = decInfo.length > 3; - - var isStatic = kind >= 5; /* STATIC */ - var base; - var initializers; - - if (isStatic) { - base = Class; - kind = kind - 5 /* STATIC */; - // initialize staticInitializers when we see a non-field static member - staticInitializers = staticInitializers || []; - initializers = staticInitializers; - } else { - base = Class.prototype; - // initialize protoInitializers when we see a non-field member - protoInitializers = protoInitializers || []; - initializers = protoInitializers; - } - - if (kind !== 0 /* FIELD */ && !isPrivate) { - var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields; - - var existingKind = existingNonFields.get(name) || 0; - - if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) { - throw new Error( - "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " - + name - ); - } else if (!existingKind && kind > 2 /* METHOD */) { - existingNonFields.set(name, kind); - } else { - existingNonFields.set(name, true); - } - } - - applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata); - } - - pushInitializers(ret, protoInitializers); - pushInitializers(ret, staticInitializers); - return ret; - } - - function pushInitializers(ret, initializers) { - if (initializers) { - ret.push(function(instance) { - for (var i = 0; i < initializers.length; i++) initializers[i].call(instance); - return instance; - }); - } - } - - function applyClassDecs(targetClass, classDecs, metadata) { - if (classDecs.length > 0) { - var initializers = []; - var newClass = targetClass; - var name = targetClass.name; - - for (var i = classDecs.length - 1; i >= 0; i--) { - var decoratorFinishedRef = { v: false }; - - var nextNewClass = classDecs[i](newClass, { kind: "class", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata }); - decoratorFinishedRef.v = true; - - if (nextNewClass !== undefined) { - assertValidReturnValue(10, /* CLASS */ nextNewClass); - newClass = nextNewClass; - } - } - - return [defineMetadata(newClass, metadata), function() { - for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass); - }]; - } - // The transformer will not emit assignment when there are no class decorators, - // so we don't have to return an empty array here. - } - - function defineMetadata(Class, metadata) { - return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: true, enumerable: true, value: metadata }); - } - - /** - Basic usage: - - applyDecs( - Class, - [ - // member decorators - [ - dec, // dec or array of decs - 0, // kind of value being decorated - 'prop', // name of public prop on class containing the value being decorated, - '#p', // the name of the private property (if is private, void 0 otherwise), - ] - ], - [ - // class decorators - dec1, dec2 - ] - ) - ``` - - Fully transpiled example: - - ```js - @dec - class Class { - @dec - a = 123; - - @dec - #a = 123; - - @dec - @dec2 - accessor b = 123; - - @dec - accessor #b = 123; - - @dec - c() { console.log('c'); } - - @dec - #c() { console.log('privC'); } - - @dec - get d() { console.log('d'); } - - @dec - get #d() { console.log('privD'); } - - @dec - set e(v) { console.log('e'); } - - @dec - set #e(v) { console.log('privE'); } - } - - - // becomes - let initializeInstance; - let initializeClass; - - let initA; - let initPrivA; - - let initB; - let initPrivB, getPrivB, setPrivB; - - let privC; - let privD; - let privE; - - let Class; - class _Class { - static { - let ret = applyDecs( - this, - [ - [dec, 0, 'a'], - [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v], - [[dec, dec2], 1, 'b'], - [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v], - [dec, 2, 'c'], - [dec, 2, 'c', () => console.log('privC')], - [dec, 3, 'd'], - [dec, 3, 'd', () => console.log('privD')], - [dec, 4, 'e'], - [dec, 4, 'e', () => console.log('privE')], - ], - [ - dec - ] - ) - - initA = ret[0]; - - initPrivA = ret[1]; - - initB = ret[2]; - - initPrivB = ret[3]; - getPrivB = ret[4]; - setPrivB = ret[5]; - - privC = ret[6]; - - privD = ret[7]; - - privE = ret[8]; - - initializeInstance = ret[9]; - - Class = ret[10] - - initializeClass = ret[11]; - } - - a = (initializeInstance(this), initA(this, 123)); - - #a = initPrivA(this, 123); - - #bData = initB(this, 123); - get b() { return this.#bData } - set b(v) { this.#bData = v } - - #privBData = initPrivB(this, 123); - get #b() { return getPrivB(this); } - set #b(v) { setPrivB(this, v); } - - c() { console.log('c'); } - - #c(...args) { return privC(this, ...args) } - - get d() { console.log('d'); } - - get #d() { return privD(this); } - - set e(v) { console.log('e'); } - - set #e(v) { privE(this, v); } - } - - initializeClass(Class); - */ - - exports._ = _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) { - if (parentClass !== void 0) { - var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")]; - } - var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata); - var e = applyMemberDecs(targetClass, memberDecs, metadata); - if (!classDecs.length) defineMetadata(targetClass, metadata); - return { - e: e, - // Lazily apply class decorations so that member init locals can be properly bound. - get c() { - return applyClassDecs(targetClass, classDecs, metadata); - } - }; - }; - - return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass); -} - -exports._ = _apply_decs_2203_r; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2311.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2311.cjs deleted file mode 100644 index e1713e0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_apply_decs_2311.cjs +++ /dev/null @@ -1,346 +0,0 @@ -"use strict"; - -/* @minVersion 7.24.0 */ - -function toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) { - return input; - } - - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") { - return res; - } - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); -} - -function toPropertyKey(arg) { - var key = toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); -} - -function checkInRHS(value) { - if (Object(value) !== value) { - throw TypeError("right-hand side of 'in' should be an object, got " + (value !== null ? typeof value : "null")); - } - - return value; -} - -function setFunctionName(fn, name, prefix) { - if (typeof name === "symbol") { - name = name.description; - name = name ? "[" + name + "]" : ""; - } - - try { - Object.defineProperty(fn, "name", { configurable: true, value: prefix ? prefix + " " + name : name }); - } catch (_) {} - - return fn; -} - -/** - kind bit layout - - FIELD = 0 - ACCESSOR = 1 - METHOD = 2 - GETTER = 3 - SETTER = 4 - CLASS = 5 - - STATIC = 8 - DECORATORS_HAVE_THIS = 16 -*/ -function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis, instanceBrand, parentClass) { - var symbolMetadata = Symbol.metadata || Symbol.for("Symbol.metadata"); - var defineProperty = Object.defineProperty; - var create = Object.create; - var metadata; - var existingNonFields = [create(null), create(null)]; - var hasClassDecs = classDecs.length; - var _; - - function createRunInitializers(initializers, useStaticThis, hasValue) { - return function(thisArg, value) { - if (useStaticThis) { - value = thisArg; - thisArg = targetClass; - } - - for (var i = 0; i < initializers.length; i++) value = initializers[i].apply(thisArg, hasValue ? [value] : []); - - return hasValue ? value : thisArg; - }; - } - - function assertCallable(fn, hint1, hint2, throwUndefined) { - if (typeof fn !== "function") { - if (throwUndefined || fn !== void 0) { - throw new TypeError(hint1 + " must " + (hint2 || "be") + " a function" + (throwUndefined ? "" : " or undefined")); - } - } - - return fn; - } - - function applyDec(Class, decInfo, decoratorsHaveThis, name, kind, initializers, ret, isStatic, isPrivate, isField, hasPrivateBrand) { - function assertInstanceIfPrivate(target) { - if (!hasPrivateBrand(target)) { - throw new TypeError("Attempted to access private element on non-instance"); - } - } - - var decs = [].concat(decInfo[0]); - var decVal = decInfo[3]; - var isClass = !ret; - - var isAccessor = kind === 1; - var isGetter = kind === 3; - var isSetter = kind === 4; - var isMethod = kind === 2; - - function bindPropCall(name, useStaticThis, before) { - return function(_this, value) { - if (useStaticThis) { - value = _this; - _this = Class; - } - - if (before) { - before(_this); - } - - return desc[name].call(_this, value); - }; - } - - var desc = {}; - var init = []; - var key = isGetter ? "get" : isSetter || isAccessor ? "set" : "value"; - - if (!isClass) { - if (isPrivate) { - if (isField || isAccessor) { - desc = { - get: setFunctionName( - function() { - return decVal(this); - }, - name, - "get" - ), - set: function(value) { - decInfo[4](this, value); - } - }; - } else { - desc[key] = decVal; - } - - if (!isField) { - setFunctionName(desc[key], name, isMethod ? "" : key); - } - } else if (!isField) { - desc = Object.getOwnPropertyDescriptor(Class, name); - } - - if (!isField && !isPrivate) { - _ = existingNonFields[+isStatic][name]; - if (_ && (_ ^ kind) !== 7) { - throw new Error("Decorating two elements with the same name (" + desc[key].name + ") is not supported yet"); - } - - existingNonFields[+isStatic][name] = kind < 3 ? 1 : kind; - } - } - - var newValue = Class; - - for (var i = decs.length - 1; i >= 0; i -= decoratorsHaveThis ? 2 : 1) { - var dec = assertCallable(decs[i], "A decorator", "be", true); - var decThis = decoratorsHaveThis ? decs[i - 1] : void 0; - - var decoratorFinishedRef = {}; - var ctx = { - kind: ["field", "accessor", "method", "getter", "setter", "class"][kind], - name: name, - metadata: metadata, - addInitializer: function(decoratorFinishedRef, initializer) { - if (decoratorFinishedRef.v) { - throw new TypeError("attempted to call addInitializer after decoration was finished"); - } - assertCallable(initializer, "An initializer", "be", true); - initializers.push(initializer); - } - .bind(null, decoratorFinishedRef) - }; - - if (isClass) { - _ = dec.call(decThis, newValue, ctx); - decoratorFinishedRef.v = 1; - - if (assertCallable(_, "class decorators", "return")) { - newValue = _; - } - continue; - } - - ctx.static = isStatic; - ctx.private = isPrivate; - _ = ctx.access = { - has: isPrivate ? hasPrivateBrand.bind() : function(target) { - return name in target; - } - }; - - if (!isSetter) { - _.get = isPrivate - ? isMethod - ? function(_this) { - assertInstanceIfPrivate(_this); - return desc.value; - } - : bindPropCall("get", 0, assertInstanceIfPrivate) - : function(target) { - return target[name]; - }; - } - - if (!isMethod && !isGetter) { - _.set = isPrivate ? bindPropCall("set", 0, assertInstanceIfPrivate) : function(target, value) { - target[name] = value; - }; - } - - newValue = dec.call(decThis, isAccessor ? { get: desc.get, set: desc.set } : desc[key], ctx); - - decoratorFinishedRef.v = 1; - - if (isAccessor) { - if (typeof newValue === "object" && newValue) { - if ((_ = assertCallable(newValue.get, "accessor.get"))) { - desc.get = _; - } - if ((_ = assertCallable(newValue.set, "accessor.set"))) { - desc.set = _; - } - if ((_ = assertCallable(newValue.init, "accessor.init"))) { - init.unshift(_); - } - } else if (newValue !== void 0) { - throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined"); - } - } else if (assertCallable(newValue, (isField ? "field" : "method") + " decorators", "return")) { - if (isField) { - init.unshift(newValue); - } else { - desc[key] = newValue; - } - } - } - - if (kind < 2) { - ret.push(createRunInitializers(init, isStatic, 1), createRunInitializers(initializers, isStatic, 0)); - } - - if (!isField && !isClass) { - if (isPrivate) { - if (isAccessor) { - ret.splice(-1, 0, bindPropCall("get", isStatic), bindPropCall("set", isStatic)); - } else { - ret.push(isMethod ? desc[key] : assertCallable.call.bind(desc[key])); - } - } else { - defineProperty(Class, name, desc); - } - } - - return newValue; - } - - function applyMemberDecs() { - var ret = []; - var protoInitializers; - var staticInitializers; - - var pushInitializers = function(initializers) { - if (initializers) { - ret.push(createRunInitializers(initializers)); - } - }; - - var applyMemberDecsOfKind = function(isStatic, isField) { - for (var i = 0; i < memberDecs.length; i++) { - var decInfo = memberDecs[i]; - var kind = decInfo[1]; - var kindOnly = kind & 7; - - if ((kind & 8) == isStatic && !kindOnly == isField) { - var name = decInfo[2]; - var isPrivate = !!decInfo[3]; - var decoratorsHaveThis = kind & 16; - - applyDec( - isStatic ? targetClass : targetClass.prototype, - decInfo, - decoratorsHaveThis, - isPrivate ? "#" + name : toPropertyKey(name), - kindOnly, - kindOnly < 2 ? [] : isStatic ? (staticInitializers = staticInitializers || []) : (protoInitializers = protoInitializers || []), - ret, - !!isStatic, - isPrivate, - isField, - isStatic && isPrivate - ? function(_) { - return checkInRHS(_) === targetClass; - } - : instanceBrand - ); - } - } - }; - - applyMemberDecsOfKind(8, 0); - applyMemberDecsOfKind(0, 0); - applyMemberDecsOfKind(8, 1); - applyMemberDecsOfKind(0, 1); - - pushInitializers(protoInitializers); - pushInitializers(staticInitializers); - - return ret; - } - - function defineMetadata(Class) { - return defineProperty(Class, symbolMetadata, { configurable: true, enumerable: true, value: metadata }); - } - - if (parentClass !== undefined) { - metadata = parentClass[symbolMetadata]; - } - metadata = create(metadata == null ? null : metadata); - - _ = applyMemberDecs(); - - if (!hasClassDecs) { - defineMetadata(targetClass); - } - - return { - e: _, - get c() { - var initializers = []; - return (hasClassDecs && [defineMetadata(targetClass = applyDec(targetClass, [classDecs], classDecsHaveThis, targetClass.name, 5, initializers)), createRunInitializers(initializers, 1)]); - } - }; -} - -exports._ = _apply_decs_2311; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs deleted file mode 100644 index 0f7d69d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _array_like_to_array(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} -exports._ = _array_like_to_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_with_holes.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_with_holes.cjs deleted file mode 100644 index 42f4e1b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_with_holes.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _array_with_holes(arr) { - if (Array.isArray(arr)) return arr; -} -exports._ = _array_with_holes; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_without_holes.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_without_holes.cjs deleted file mode 100644 index 7b3f623..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_array_without_holes.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -var _array_like_to_array = require("./_array_like_to_array.cjs"); - -function _array_without_holes(arr) { - if (Array.isArray(arr)) return _array_like_to_array._(arr); -} -exports._ = _array_without_holes; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs deleted file mode 100644 index e7e220c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _assert_this_initialized(self) { - if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - - return self; -} -exports._ = _assert_this_initialized; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator.cjs deleted file mode 100644 index fa82617..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator.cjs +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -var _overload_yield = require("./_overload_yield.cjs"); - -function _async_generator(gen) { - var front, back; - - function send(key, arg) { - return new Promise(function(resolve, reject) { - var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; - if (back) back = back.next = request; - else { - front = back = request; - resume(key, arg); - } - }); - } - - function resume(key, arg) { - try { - var result = gen[key](arg); - var value = result.value; - var overloaded = value instanceof _overload_yield._; - Promise.resolve(overloaded ? value.v : value).then(function(arg) { - if (overloaded) { - var nextKey = key === "return" ? "return" : "next"; - if (!value.k || arg.done) return resume(nextKey, arg); - else arg = gen[nextKey](arg).value; - } - settle(result.done ? "return" : "normal", arg); - }, function(err) { - resume("throw", err); - }); - } catch (err) { - settle("throw", err); - } - } - - function settle(type, value) { - switch (type) { - case "return": - front.resolve({ value: value, done: true }); - break; - case "throw": - front.reject(value); - break; - default: - front.resolve({ value: value, done: false }); - break; - } - front = front.next; - if (front) resume(front.key, front.arg); - else back = null; - } - - this._invoke = send; - - if (typeof gen.return !== "function") this.return = undefined; -} - -_async_generator.prototype[(typeof Symbol === "function" && Symbol.asyncIterator) || "@@asyncIterator"] = function() { - return this; -}; - -_async_generator.prototype.next = function(arg) { - return this._invoke("next", arg); -}; - -_async_generator.prototype.throw = function(arg) { - return this._invoke("throw", arg); -}; - -_async_generator.prototype.return = function(arg) { - return this._invoke("return", arg); -}; -exports._ = _async_generator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs deleted file mode 100644 index 1010df0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; - -var _overload_yield = require("./_overload_yield.cjs"); - -function _async_generator_delegate(inner) { - var iter = {}, waiting = false; - - function pump(key, value) { - waiting = true; - value = new Promise(function(resolve) { - resolve(inner[key](value)); - }); - - return { done: false, value: new _overload_yield._(value, /* kind: delegate */ 1) }; - } - - iter[(typeof Symbol !== "undefined" && Symbol.iterator) || "@@iterator"] = function() { - return this; - }; - - iter.next = function(value) { - if (waiting) { - waiting = false; - - return value; - } - - return pump("next", value); - }; - - if (typeof inner.throw === "function") { - iter.throw = function(value) { - if (waiting) { - waiting = false; - throw value; - } - - return pump("throw", value); - }; - } - if (typeof inner.return === "function") { - iter.return = function(value) { - if (waiting) { - waiting = false; - return value; - } - return pump("return", value); - }; - } - - return iter; -} -exports._ = _async_generator_delegate; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_iterator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_iterator.cjs deleted file mode 100644 index aef7253..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_iterator.cjs +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; - -function _async_iterator(iterable) { - var method, async, sync, retry = 2; - for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { - if (async && null != (method = iterable[async])) return method.call(iterable); - if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); - async = "@@asyncIterator", sync = "@@iterator"; - } - throw new TypeError("Object is not async iterable"); -} -function AsyncFromSyncIterator(s) { - function AsyncFromSyncIteratorContinuation(r) { - if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); - - var done = r.done; - - return Promise.resolve(r.value).then(function(value) { - return { value: value, done: done }; - }); - } - - return AsyncFromSyncIterator = function(s) { - this.s = s, this.n = s.next; - }, - AsyncFromSyncIterator.prototype = { - s: null, - n: null, - - next: function() { - return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); - }, - return: function(value) { - var ret = this.s.return; - - return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); - }, - throw: function(value) { - var thr = this.s.return; - - return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); - } - }, - new AsyncFromSyncIterator(s); -} -exports._ = _async_iterator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_to_generator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_to_generator.cjs deleted file mode 100644 index b838d47..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_async_to_generator.cjs +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - if (info.done) resolve(value); - else Promise.resolve(value).then(_next, _throw); -} -function _async_to_generator(fn) { - return function() { - var self = this, args = arguments; - - return new Promise(function(resolve, reject) { - var gen = fn.apply(self, args); - - function _next(value) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); - } - - function _throw(err) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); - } - - _next(undefined); - }); - }; -} -exports._ = _async_to_generator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_async_generator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_async_generator.cjs deleted file mode 100644 index aa1dc72..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_async_generator.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -var _overload_yield = require("./_overload_yield.cjs"); - -function _await_async_generator(value) { - return new _overload_yield._(value, /* kind: await */ 0); -} -exports._ = _await_async_generator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_value.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_value.cjs deleted file mode 100644 index f82ebcd..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_await_value.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _await_value(value) { - this.wrapped = value; -} -exports._ = _await_value; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_call_super.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_call_super.cjs deleted file mode 100644 index c4e7733..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_call_super.cjs +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -var _get_prototype_of = require("./_get_prototype_of.cjs"); -var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs"); -var _possible_constructor_return = require("./_possible_constructor_return.cjs"); - -function _call_super(_this, derived, args) { - // Super - derived = _get_prototype_of._(derived); - return _possible_constructor_return._( - _this, - _is_native_reflect_construct._() - // NOTE: This doesn't work if this.__proto__.constructor has been modified. - ? Reflect.construct(derived, args || [], _get_prototype_of._(_this).constructor) - : derived.apply(_this, args) - ); -} - -exports._ = _call_super; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs deleted file mode 100644 index 40390b8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _check_private_redeclaration(obj, privateCollection) { - if (privateCollection.has(obj)) { - throw new TypeError("Cannot initialize the same private elements twice on an object"); - } -} -exports._ = _check_private_redeclaration; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs deleted file mode 100644 index 874289f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -function _class_apply_descriptor_destructure(receiver, descriptor) { - if (descriptor.set) { - if (!("__destrObj" in descriptor)) { - descriptor.__destrObj = { - set value(v) { - descriptor.set.call(receiver, v); - } - }; - } - - return descriptor.__destrObj; - } else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - - return descriptor; - } -} -exports._ = _class_apply_descriptor_destructure; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs deleted file mode 100644 index b9a3f78..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _class_apply_descriptor_get(receiver, descriptor) { - if (descriptor.get) return descriptor.get.call(receiver); - - return descriptor.value; -} -exports._ = _class_apply_descriptor_get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs deleted file mode 100644 index bcd2c75..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -function _class_apply_descriptor_set(receiver, descriptor, value) { - if (descriptor.set) descriptor.set.call(receiver, value); - else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - descriptor.value = value; - } -} -exports._ = _class_apply_descriptor_set; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs deleted file mode 100644 index 2c3e40f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -function _class_apply_descriptor_update(receiver, descriptor) { - if (descriptor.set) { - if (!descriptor.get) throw new TypeError("attempted to read set only private field"); - - if (!("__destrWrapper" in descriptor)) { - descriptor.__destrWrapper = { - set value(v) { - descriptor.set.call(receiver, v); - }, - get value() { - return descriptor.get.call(receiver); - } - }; - } - - return descriptor.__destrWrapper; - } else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - - return descriptor; - } -} -exports._ = _class_apply_descriptor_update; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_call_check.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_call_check.cjs deleted file mode 100644 index 7d41f0d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_call_check.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _class_call_check(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); -} -exports._ = _class_call_check; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs deleted file mode 100644 index 9adf4d4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _class_check_private_static_access(receiver, classConstructor) { - if (receiver !== classConstructor) throw new TypeError("Private static access of wrong provenance"); -} -exports._ = _class_check_private_static_access; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs deleted file mode 100644 index e73dce1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _class_check_private_static_field_descriptor(descriptor, action) { - if (descriptor === undefined) { - throw new TypeError("attempted to " + action + " private static field before its declaration"); - } -} -exports._ = _class_check_private_static_field_descriptor; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs deleted file mode 100644 index 16e5106..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _class_extract_field_descriptor(receiver, privateMap, action) { - if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance"); - - return privateMap.get(receiver); -} -exports._ = _class_extract_field_descriptor; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs deleted file mode 100644 index 0bdcdd4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _class_name_tdz_error(name) { - throw new ReferenceError("Class \"" + name + "\" cannot be referenced in computed property keys."); -} -exports._ = _class_name_tdz_error; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs deleted file mode 100644 index 21a35f7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_destructure = require("./_class_apply_descriptor_destructure.cjs"); -var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs"); - -function _class_private_field_destructure(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "set"); - return _class_apply_descriptor_destructure._(receiver, descriptor); -} -exports._ = _class_private_field_destructure; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs deleted file mode 100644 index 8a23b34..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_get = require("./_class_apply_descriptor_get.cjs"); -var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs"); - -function _class_private_field_get(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "get"); - return _class_apply_descriptor_get._(receiver, descriptor); -} -exports._ = _class_private_field_get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs deleted file mode 100644 index 0b208a0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -var _check_private_redeclaration = require("./_check_private_redeclaration.cjs"); - -function _class_private_field_init(obj, privateMap, value) { - _check_private_redeclaration._(obj, privateMap); - privateMap.set(obj, value); -} -exports._ = _class_private_field_init; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs deleted file mode 100644 index cb0ba06..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _class_private_field_loose_base(receiver, privateKey) { - if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { - throw new TypeError("attempted to use private field on non-instance"); - } - - return receiver; -} -exports._ = _class_private_field_loose_base; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs deleted file mode 100644 index 8301830..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -var id = 0; - -function _class_private_field_loose_key(name) { - return "__private_" + id++ + "_" + name; -} -exports._ = _class_private_field_loose_key; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs deleted file mode 100644 index 317e878..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_set = require("./_class_apply_descriptor_set.cjs"); -var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs"); - -function _class_private_field_set(receiver, privateMap, value) { - var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "set"); - _class_apply_descriptor_set._(receiver, descriptor, value); - return value; -} -exports._ = _class_private_field_set; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs deleted file mode 100644 index 2e713fa..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_update = require("./_class_apply_descriptor_update.cjs"); -var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs"); - -function _class_private_field_update(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "update"); - return _class_apply_descriptor_update._(receiver, descriptor); -} -exports._ = _class_private_field_update; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs deleted file mode 100644 index b5ee8b4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _class_private_method_get(receiver, privateSet, fn) { - if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance"); - - return fn; -} -exports._ = _class_private_method_get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs deleted file mode 100644 index 1d84b51..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -var _check_private_redeclaration = require("./_check_private_redeclaration.cjs"); - -function _class_private_method_init(obj, privateSet) { - _check_private_redeclaration._(obj, privateSet); - privateSet.add(obj); -} -exports._ = _class_private_method_init; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs deleted file mode 100644 index db06178..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _class_private_method_set() { - throw new TypeError("attempted to reassign private method"); -} -exports._ = _class_private_method_set; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs deleted file mode 100644 index 512a2e3..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_destructure = require("./_class_apply_descriptor_destructure.cjs"); -var _class_check_private_static_access = require("./_class_check_private_static_access.cjs"); -var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs"); - -function _class_static_private_field_destructure(receiver, classConstructor, descriptor) { - _class_check_private_static_access._(receiver, classConstructor); - _class_check_private_static_field_descriptor._(descriptor, "set"); - - return _class_apply_descriptor_destructure._(receiver, descriptor); -} -exports._ = _class_static_private_field_destructure; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs deleted file mode 100644 index 43a1f0d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_get = require("./_class_apply_descriptor_get.cjs"); -var _class_check_private_static_access = require("./_class_check_private_static_access.cjs"); -var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs"); - -function _class_static_private_field_spec_get(receiver, classConstructor, descriptor) { - _class_check_private_static_access._(receiver, classConstructor); - _class_check_private_static_field_descriptor._(descriptor, "get"); - - return _class_apply_descriptor_get._(receiver, descriptor); -} -exports._ = _class_static_private_field_spec_get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs deleted file mode 100644 index 93a6982..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_set = require("./_class_apply_descriptor_set.cjs"); -var _class_check_private_static_access = require("./_class_check_private_static_access.cjs"); -var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs"); - -function _class_static_private_field_spec_set(receiver, classConstructor, descriptor, value) { - _class_check_private_static_access._(receiver, classConstructor); - _class_check_private_static_field_descriptor._(descriptor, "set"); - _class_apply_descriptor_set._(receiver, descriptor, value); - - return value; -} -exports._ = _class_static_private_field_spec_set; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs deleted file mode 100644 index c8ae667..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var _class_apply_descriptor_update = require("./_class_apply_descriptor_update.cjs"); -var _class_check_private_static_access = require("./_class_check_private_static_access.cjs"); -var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs"); - -function _class_static_private_field_update(receiver, classConstructor, descriptor) { - _class_check_private_static_access._(receiver, classConstructor); - _class_check_private_static_field_descriptor._(descriptor, "update"); - - return _class_apply_descriptor_update._(receiver, descriptor); -} -exports._ = _class_static_private_field_update; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs deleted file mode 100644 index 3c1506f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -var _class_check_private_static_access = require("./_class_check_private_static_access.cjs"); - -function _class_static_private_method_get(receiver, classConstructor, method) { - _class_check_private_static_access._(receiver, classConstructor); - - return method; -} -exports._ = _class_static_private_method_get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_construct.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_construct.cjs deleted file mode 100644 index cfd7277..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_construct.cjs +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs"); -var _set_prototype_of = require("./_set_prototype_of.cjs"); -function _construct(Parent, args, Class) { - if (_is_native_reflect_construct._()) exports._ = _construct = Reflect.construct; - else { - exports._ = _construct = function construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - - if (Class) _set_prototype_of._(instance, Class.prototype); - - return instance; - }; - } - - return _construct.apply(null, arguments); -} -exports._ = _construct; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_class.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_class.cjs deleted file mode 100644 index 1c3fe74..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_class.cjs +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - - if ("value" in descriptor) descriptor.writable = true; - - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _create_class(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - - return Constructor; -} -exports._ = _create_class; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs deleted file mode 100644 index 9a5042d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs"); - -function _create_for_of_iterator_helper_loose(o, allowArrayLike) { - var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; - - if (it) return (it = it.call(o)).next.bind(it); - // Fallback for engines without symbol support - if (Array.isArray(o) || (it = _unsupported_iterable_to_array._(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - - var i = 0; - - return function() { - if (i >= o.length) return { done: true }; - - return { done: false, value: o[i++] }; - }; - } - - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -exports._ = _create_for_of_iterator_helper_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_super.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_super.cjs deleted file mode 100644 index dc7f3cb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_create_super.cjs +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -var _get_prototype_of = require("./_get_prototype_of.cjs"); -var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs"); -var _possible_constructor_return = require("./_possible_constructor_return.cjs"); - -function _create_super(Derived) { - var hasNativeReflectConstruct = _is_native_reflect_construct._(); - - return function _createSuperInternal() { - var Super = _get_prototype_of._(Derived), result; - - if (hasNativeReflectConstruct) { - var NewTarget = _get_prototype_of._(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possible_constructor_return._(this, result); - }; -} -exports._ = _create_super; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_decorate.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_decorate.cjs deleted file mode 100644 index 13b171d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_decorate.cjs +++ /dev/null @@ -1,270 +0,0 @@ -"use strict"; - -var _to_array = require("./_to_array.cjs"); -var _to_property_key = require("./_to_property_key.cjs"); -var _type_of = require("./_type_of.cjs"); - -function _decorate(decorators, factory, superClass) { - var r = factory(function initialize(O) { - _initializeInstanceElements(O, decorated.elements); - }, superClass); - var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators); - _initializeClassElements(r.F, decorated.elements); - - return _runClassFinishers(r.F, decorated.finishers); -} - -function _createElementDescriptor(def) { - var key = _to_property_key._(def.key); - var descriptor; - - if (def.kind === "method") { - descriptor = { value: def.value, writable: true, configurable: true, enumerable: false }; - Object.defineProperty(def.value, "name", { value: _type_of._(key) === "symbol" ? "" : key, configurable: true }); - } else if (def.kind === "get") descriptor = { get: def.value, configurable: true, enumerable: false }; - else if (def.kind === "set") descriptor = { set: def.value, configurable: true, enumerable: false }; - else if (def.kind === "field") descriptor = { configurable: true, writable: true, enumerable: true }; - - var element = { kind: def.kind === "field" ? "field" : "method", key: key, placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype", descriptor: descriptor }; - - if (def.decorators) element.decorators = def.decorators; - - if (def.kind === "field") element.initializer = def.value; - - return element; -} -function _coalesceGetterSetter(element, other) { - if (element.descriptor.get !== undefined) other.descriptor.get = element.descriptor.get; - else other.descriptor.set = element.descriptor.set; -} -function _coalesceClassElements(elements) { - var newElements = []; - var isSameElement = function isSameElement(other) { - return other.kind === "method" && other.key === element.key && other.placement === element.placement; - }; - - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - var other; - - if (element.kind === "method" && (other = newElements.find(isSameElement))) { - if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) { - if (_hasDecorators(element) || _hasDecorators(other)) { - throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated."); - } - other.descriptor = element.descriptor; - } else { - if (_hasDecorators(element)) { - if (_hasDecorators(other)) { - throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ")."); - } - other.decorators = element.decorators; - } - _coalesceGetterSetter(element, other); - } - } else { - newElements.push(element); - } - } - - return newElements; -} -function _hasDecorators(element) { - return element.decorators && element.decorators.length; -} -function _isDataDescriptor(desc) { - return desc !== undefined && !(desc.value === undefined && desc.writable === undefined); -} -function _initializeClassElements(F, elements) { - var proto = F.prototype; - ["method", "field"].forEach(function(kind) { - elements.forEach(function(element) { - var placement = element.placement; - if (element.kind === kind && (placement === "static" || placement === "prototype")) { - var receiver = placement === "static" ? F : proto; - _defineClassElement(receiver, element); - } - }); - }); -} -function _initializeInstanceElements(O, elements) { - ["method", "field"].forEach(function(kind) { - elements.forEach(function(element) { - if (element.kind === kind && element.placement === "own") _defineClassElement(O, element); - }); - }); -} -function _defineClassElement(receiver, element) { - var descriptor = element.descriptor; - if (element.kind === "field") { - var initializer = element.initializer; - descriptor = { enumerable: descriptor.enumerable, writable: descriptor.writable, configurable: descriptor.configurable, value: initializer === void 0 ? void 0 : initializer.call(receiver) }; - } - Object.defineProperty(receiver, element.key, descriptor); -} -function _decorateClass(elements, decorators) { - var newElements = []; - var finishers = []; - var placements = { static: [], prototype: [], own: [] }; - elements.forEach(function(element) { - _addElementPlacement(element, placements); - }); - elements.forEach(function(element) { - if (!_hasDecorators(element)) return newElements.push(element); - var elementFinishersExtras = _decorateElement(element, placements); - newElements.push(elementFinishersExtras.element); - newElements.push.apply(newElements, elementFinishersExtras.extras); - finishers.push.apply(finishers, elementFinishersExtras.finishers); - }); - if (!decorators) return { elements: newElements, finishers: finishers }; - var result = _decorateConstructor(newElements, decorators); - finishers.push.apply(finishers, result.finishers); - result.finishers = finishers; - - return result; -} -function _addElementPlacement(element, placements, silent) { - var keys = placements[element.placement]; - if (!silent && keys.indexOf(element.key) !== -1) throw new TypeError("Duplicated element (" + element.key + ")"); - keys.push(element.key); -} -function _decorateElement(element, placements) { - var extras = []; - var finishers = []; - for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) { - var keys = placements[element.placement]; - keys.splice(keys.indexOf(element.key), 1); - var elementObject = _fromElementDescriptor(element); - var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject); - element = elementFinisherExtras.element; - _addElementPlacement(element, placements); - if (elementFinisherExtras.finisher) finishers.push(elementFinisherExtras.finisher); - var newExtras = elementFinisherExtras.extras; - if (newExtras) { - for (var j = 0; j < newExtras.length; j++) _addElementPlacement(newExtras[j], placements); - extras.push.apply(extras, newExtras); - } - } - - return { element: element, finishers: finishers, extras: extras }; -} -function _decorateConstructor(elements, decorators) { - var finishers = []; - for (var i = decorators.length - 1; i >= 0; i--) { - var obj = _fromClassDescriptor(elements); - var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj); - if (elementsAndFinisher.finisher !== undefined) finishers.push(elementsAndFinisher.finisher); - if (elementsAndFinisher.elements !== undefined) { - elements = elementsAndFinisher.elements; - for (var j = 0; j < elements.length - 1; j++) { - for (var k = j + 1; k < elements.length; k++) { - if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) { - throw new TypeError("Duplicated element (" + elements[j].key + ")"); - } - } - } - } - } - - return { elements: elements, finishers: finishers }; -} -function _fromElementDescriptor(element) { - var obj = { kind: element.kind, key: element.key, placement: element.placement, descriptor: element.descriptor }; - var desc = { value: "Descriptor", configurable: true }; - Object.defineProperty(obj, Symbol.toStringTag, desc); - if (element.kind === "field") obj.initializer = element.initializer; - - return obj; -} -function _toElementDescriptors(elementObjects) { - if (elementObjects === undefined) return; - - return _to_array._(elementObjects).map(function(elementObject) { - var element = _toElementDescriptor(elementObject); - _disallowProperty(elementObject, "finisher", "An element descriptor"); - _disallowProperty(elementObject, "extras", "An element descriptor"); - - return element; - }); -} -function _toElementDescriptor(elementObject) { - var kind = String(elementObject.kind); - if (kind !== "method" && kind !== "field") { - throw new TypeError("An element descriptor's .kind property must be either \"method\" or" + " \"field\", but a decorator created an element descriptor with" + " .kind \"" + kind + "\""); - } - var key = _to_property_key._(elementObject.key); - var placement = String(elementObject.placement); - if (placement !== "static" && placement !== "prototype" && placement !== "own") { - throw new TypeError( - "An element descriptor's .placement property must be one of \"static\"," - + " \"prototype\" or \"own\", but a decorator created an element descriptor" - + " with .placement \"" - + placement - + "\"" - ); - } - var descriptor = elementObject.descriptor; - _disallowProperty(elementObject, "elements", "An element descriptor"); - var element = { kind: kind, key: key, placement: placement, descriptor: Object.assign({}, descriptor) }; - if (kind !== "field") _disallowProperty(elementObject, "initializer", "A method descriptor"); - else { - _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor"); - _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor"); - _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor"); - element.initializer = elementObject.initializer; - } - - return element; -} -function _toElementFinisherExtras(elementObject) { - var element = _toElementDescriptor(elementObject); - var finisher = _optionalCallableProperty(elementObject, "finisher"); - var extras = _toElementDescriptors(elementObject.extras); - - return { element: element, finisher: finisher, extras: extras }; -} -function _fromClassDescriptor(elements) { - var obj = { kind: "class", elements: elements.map(_fromElementDescriptor) }; - var desc = { value: "Descriptor", configurable: true }; - Object.defineProperty(obj, Symbol.toStringTag, desc); - - return obj; -} -function _toClassDescriptor(obj) { - var kind = String(obj.kind); - if (kind !== "class") { - throw new TypeError("A class descriptor's .kind property must be \"class\", but a decorator" + " created a class descriptor with .kind \"" + kind + "\""); - } - _disallowProperty(obj, "key", "A class descriptor"); - _disallowProperty(obj, "placement", "A class descriptor"); - _disallowProperty(obj, "descriptor", "A class descriptor"); - _disallowProperty(obj, "initializer", "A class descriptor"); - _disallowProperty(obj, "extras", "A class descriptor"); - var finisher = _optionalCallableProperty(obj, "finisher"); - var elements = _toElementDescriptors(obj.elements); - - return { elements: elements, finisher: finisher }; -} -function _disallowProperty(obj, name, objectType) { - if (obj[name] !== undefined) throw new TypeError(objectType + " can't have a ." + name + " property."); -} -function _optionalCallableProperty(obj, name) { - var value = obj[name]; - if (value !== undefined && typeof value !== "function") { - throw new TypeError("Expected '" + name + "' to be a function"); - } - - return value; -} -function _runClassFinishers(constructor, finishers) { - for (var i = 0; i < finishers.length; i++) { - var newConstructor = (0, finishers[i])(constructor); - if (newConstructor !== undefined) { - if (typeof newConstructor !== "function") throw new TypeError("Finishers must return a constructor."); - constructor = newConstructor; - } - } - - return constructor; -} -exports._ = _decorate; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_defaults.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_defaults.cjs deleted file mode 100644 index eb832e9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_defaults.cjs +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -function _defaults(obj, defaults) { - var keys = Object.getOwnPropertyNames(defaults); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = Object.getOwnPropertyDescriptor(defaults, key); - - if (value && value.configurable && obj[key] === undefined) Object.defineProperty(obj, key, value); - } - - return obj; -} -exports._ = _defaults; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs deleted file mode 100644 index 6c4c334..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; - -function _define_enumerable_properties(obj, descs) { - for (var key in descs) { - var desc = descs[key]; - desc.configurable = desc.enumerable = true; - - if ("value" in desc) desc.writable = true; - - Object.defineProperty(obj, key, desc); - } - - if (Object.getOwnPropertySymbols) { - var objectSymbols = Object.getOwnPropertySymbols(descs); - for (var i = 0; i < objectSymbols.length; i++) { - var sym = objectSymbols[i]; - var desc = descs[sym]; - desc.configurable = desc.enumerable = true; - if ("value" in desc) desc.writable = true; - Object.defineProperty(obj, sym, desc); - } - } - - return obj; -} -exports._ = _define_enumerable_properties; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_property.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_property.cjs deleted file mode 100644 index 9063d6e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_define_property.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _define_property(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); - } else obj[key] = value; - - return obj; -} -exports._ = _define_property; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_dispose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_dispose.cjs deleted file mode 100644 index 84ec384..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_dispose.cjs +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; - -/* @minVersion 7.22.0 */ -function dispose_SuppressedError(error, suppressed) { - if (typeof SuppressedError !== "undefined") { - // eslint-disable-next-line no-undef - dispose_SuppressedError = SuppressedError; - } else { - dispose_SuppressedError = function SuppressedError(error, suppressed) { - this.suppressed = suppressed; - this.error = error; - this.stack = new Error().stack; - }; - dispose_SuppressedError.prototype = Object.create(Error.prototype, { constructor: { value: dispose_SuppressedError, writable: true, configurable: true } }); - } - return new dispose_SuppressedError(error, suppressed); -} - -function _dispose(stack, error, hasError) { - function next() { - while (stack.length > 0) { - try { - var r = stack.pop(); - var p = r.d.call(r.v); - if (r.a) return Promise.resolve(p).then(next, err); - } catch (e) { - return err(e); - } - } - if (hasError) throw error; - } - - function err(e) { - error = hasError ? new dispose_SuppressedError(e, error) : e; - hasError = true; - - return next(); - } - - return next(); -} - -exports._ = _dispose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_export_star.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_export_star.cjs deleted file mode 100644 index 51af20b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_export_star.cjs +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -function _export_star(from, to) { - Object.keys(from).forEach(function(k) { - if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { - Object.defineProperty(to, k, { - enumerable: true, - get: function() { - return from[k]; - } - }); - } - }); - - return from; -} -exports._ = _export_star; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_extends.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_extends.cjs deleted file mode 100644 index 2bb1592..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_extends.cjs +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -function _extends() { - exports._ = _extends = Object.assign || function assign(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key]; - } - - return target; - }; - - return _extends.apply(this, arguments); -} -exports._ = _extends; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_get.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_get.cjs deleted file mode 100644 index 1c5bfcd..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_get.cjs +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -var _super_prop_base = require("./_super_prop_base.cjs"); - -function _get(target, property, receiver) { - if (typeof Reflect !== "undefined" && Reflect.get) exports._ = _get = Reflect.get; - else { - exports._ = _get = function get(target, property, receiver) { - var base = _super_prop_base._(target, property); - - if (!base) return; - - var desc = Object.getOwnPropertyDescriptor(base, property); - - if (desc.get) return desc.get.call(receiver || target); - - return desc.value; - }; - } - - return _get(target, property, receiver || target); -} -exports._ = _get; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs deleted file mode 100644 index 6ef956a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _get_prototype_of(o) { - exports._ = _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - - return _get_prototype_of(o); -} -exports._ = _get_prototype_of; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_identity.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_identity.cjs deleted file mode 100644 index aab1b0d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_identity.cjs +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -function _identity(x) { - return x; -} - -exports._ = _identity; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits.cjs deleted file mode 100644 index c803df5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits.cjs +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -var _set_prototype_of = require("./_set_prototype_of.cjs"); - -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); - - if (superClass) _set_prototype_of._(subClass, superClass); -} -exports._ = _inherits; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits_loose.cjs deleted file mode 100644 index 30f3541..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_inherits_loose.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _inherits_loose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} -exports._ = _inherits_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs deleted file mode 100644 index ac28e5d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -function _initializer_define_property(target, property, descriptor, context) { - if (!descriptor) return; - - Object.defineProperty(target, property, { - enumerable: descriptor.enumerable, - configurable: descriptor.configurable, - writable: descriptor.writable, - value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 - }); -} -exports._ = _initializer_define_property; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs deleted file mode 100644 index 2c333db..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -function _initializer_warning_helper(descriptor, context) { - throw new Error( - "Decorating class property failed. Please ensure that " - + "proposal-class-properties is enabled and set to use loose mode. " - + "To use proposal-class-properties in spec mode with decorators, wait for " - + "the next major version of decorators in stage 2." - ); -} -exports._ = _initializer_warning_helper; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_instanceof.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_instanceof.cjs deleted file mode 100644 index d213ddf..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_instanceof.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _instanceof(left, right) { - "@swc/helpers - instanceof"; - - if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { - return !!right[Symbol.hasInstance](left); - } else return left instanceof right; -} -exports._ = _instanceof; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_default.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_default.cjs deleted file mode 100644 index c9e5240..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _interop_require_default(obj) { - return obj && obj.__esModule ? obj : { default: obj }; -} -exports._ = _interop_require_default; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs deleted file mode 100644 index 9c2abcd..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; - -function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") return null; - - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - - return (_getRequireWildcardCache = function(nodeInterop) { - return nodeInterop ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); -} -function _interop_require_wildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) return obj; - if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj }; - - var cache = _getRequireWildcardCache(nodeInterop); - - if (cache && cache.has(obj)) return cache.get(obj); - - var newObj = { __proto__: null }; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc); - else newObj[key] = obj[key]; - } - } - - newObj.default = obj; - - if (cache) cache.set(obj, newObj); - - return newObj; -} -exports._ = _interop_require_wildcard; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_function.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_function.cjs deleted file mode 100644 index 9203711..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_function.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _is_native_function(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; -} -exports._ = _is_native_function; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs deleted file mode 100644 index 42ea82f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; - -function _is_native_reflect_construct() { - // Since Reflect.construct can't be properly polyfilled, some - // implementations (e.g. core-js@2) don't set the correct internal slots. - // Those polyfills don't allow us to subclass built-ins, so we need to - // use our fallback implementation. - try { - // If the internal slots aren't set, this throws an error similar to - // TypeError: this is not a Boolean object. - var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})); - } catch (_) {} - return (exports._ = _is_native_reflect_construct = function() { - return !!result; - })(); -} - -exports._ = _is_native_reflect_construct; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs deleted file mode 100644 index cc73cf5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _iterable_to_array(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) { - return Array.from(iter); - } -} -exports._ = _iterable_to_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs deleted file mode 100644 index 634876b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -function _iterable_to_array_limit(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - - if (_i == null) return; - - var _arr = []; - var _n = true; - var _d = false; - var _s, _e; - - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; -} -exports._ = _iterable_to_array_limit; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs deleted file mode 100644 index 78ddf90..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -function _iterable_to_array_limit_loose(arr, i) { - var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); - - if (_i == null) return; - - var _arr = []; - - for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) { - _arr.push(_step.value); - if (i && _arr.length === i) break; - } - - return _arr; -} -exports._ = _iterable_to_array_limit_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_jsx.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_jsx.cjs deleted file mode 100644 index bf1a20b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_jsx.cjs +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -var REACT_ELEMENT_TYPE; -function _jsx(type, props, key, children) { - if (!REACT_ELEMENT_TYPE) { - REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; - } - - var defaultProps = type && type.defaultProps; - var childrenLength = arguments.length - 3; - - if (!props && childrenLength !== 0) props = { children: void 0 }; - if (props && defaultProps) { - for (var propName in defaultProps) { - if (props[propName] === void 0) props[propName] = defaultProps[propName]; - else if (!props) props = defaultProps || {}; - } - } - if (childrenLength === 1) props.children = children; - else if (childrenLength > 1) { - var childArray = new Array(childrenLength); - for (var i = 0; i < childrenLength; i++) childArray[i] = arguments[i + 3]; - props.children = childArray; - } - - return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : "" + key, ref: null, props: props, _owner: null }; -} -exports._ = _jsx; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs deleted file mode 100644 index 2df59f9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _new_arrow_check(innerThis, boundThis) { - if (innerThis !== boundThis) throw new TypeError("Cannot instantiate an arrow function"); -} -exports._ = _new_arrow_check; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs deleted file mode 100644 index 3baab4b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _non_iterable_rest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -exports._ = _non_iterable_rest; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs deleted file mode 100644 index c213de5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _non_iterable_spread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -exports._ = _non_iterable_spread; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs deleted file mode 100644 index c84fb66..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _object_destructuring_empty(o) { - if (o === null || o === void 0) throw new TypeError("Cannot destructure " + o); - - return o; -} -exports._ = _object_destructuring_empty; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread.cjs deleted file mode 100644 index 45cec71..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread.cjs +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -var _define_property = require("./_define_property.cjs"); - -function _object_spread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === "function") { - ownKeys = ownKeys.concat( - Object.getOwnPropertySymbols(source).filter(function(sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - }) - ); - } - - ownKeys.forEach(function(key) { - _define_property._(target, key, source[key]); - }); - } - - return target; -} -exports._ = _object_spread; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread_props.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread_props.cjs deleted file mode 100644 index 1c27f1c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_spread_props.cjs +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) { - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - keys.push.apply(keys, symbols); - } - - return keys; -} -function _object_spread_props(target, source) { - source = source != null ? source : {}; - - if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - else { - ownKeys(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - - return target; -} -exports._ = _object_spread_props; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties.cjs deleted file mode 100644 index 6a801fd..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties.cjs +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -var _object_without_properties_loose = require("./_object_without_properties_loose.cjs"); - -function _object_without_properties(source, excluded) { - if (source == null) return {}; - - var target = {}, sourceKeys, key, i; - if (typeof Reflect !== "undefined" && Reflect.ownKeys) { - sourceKeys = Reflect.ownKeys(Object(source)); - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - - return target; - } - - target = _object_without_properties_loose._(source, excluded); - if (Object.getOwnPropertySymbols) { - sourceKeys = Object.getOwnPropertySymbols(source); - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -exports._ = _object_without_properties; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs deleted file mode 100644 index 71ae352..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -function _object_without_properties_loose(source, excluded) { - if (source == null) return {}; - - var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i; - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - - return target; -} -exports._ = _object_without_properties_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_overload_yield.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_overload_yield.cjs deleted file mode 100644 index 13ed17e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_overload_yield.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _overload_yield(value, /** 0: await 1: delegate */ kind) { - this.v = value; - this.k = kind; -} - -exports._ = _overload_yield; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs deleted file mode 100644 index fa04018..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _assert_this_initialized = require("./_assert_this_initialized.cjs"); -var _type_of = require("./_type_of.cjs"); - -function _possible_constructor_return(self, call) { - if (call && (_type_of._(call) === "object" || typeof call === "function")) return call; - - return _assert_this_initialized._(self); -} -exports._ = _possible_constructor_return; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_read_only_error.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_read_only_error.cjs deleted file mode 100644 index 302cf5c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_read_only_error.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _read_only_error(name) { - throw new TypeError("\"" + name + "\" is read-only"); -} -exports._ = _read_only_error; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_set.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_set.cjs deleted file mode 100644 index adbf484..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_set.cjs +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; - -var _define_property = require("./_define_property.cjs"); -var _super_prop_base = require("./_super_prop_base.cjs"); - -function set(target, property, value, receiver) { - if (typeof Reflect !== "undefined" && Reflect.set) set = Reflect.set; - else { - set = function set(target, property, value, receiver) { - var base = _super_prop_base._(target, property); - var desc; - if (base) { - desc = Object.getOwnPropertyDescriptor(base, property); - if (desc.set) { - desc.set.call(receiver, value); - - return true; - } else if (!desc.writable) { - return false; - } - } - desc = Object.getOwnPropertyDescriptor(receiver, property); - if (desc) { - if (!desc.writable) return false; - desc.value = value; - Object.defineProperty(receiver, property, desc); - } else { - _define_property._(receiver, property, value); - } - - return true; - }; - } - - return set(target, property, value, receiver); -} - -function _set(target, property, value, receiver, isStrict) { - var s = set(target, property, value, receiver || target); - if (!s && isStrict) throw new Error("failed to set property"); - - return value; -} -exports._ = _set; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs deleted file mode 100644 index acf501d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -function _set_prototype_of(o, p) { - exports._ = _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) { - o.__proto__ = p; - - return o; - }; - - return _set_prototype_of(o, p); -} -exports._ = _set_prototype_of; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs deleted file mode 100644 index e4c4254..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -function _skip_first_generator_next(fn) { - return function() { - var it = fn.apply(this, arguments); - it.next(); - - return it; - }; -} -exports._ = _skip_first_generator_next; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs deleted file mode 100644 index e9fe47e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _array_with_holes = require("./_array_with_holes.cjs"); -var _iterable_to_array_limit = require("./_iterable_to_array_limit.cjs"); -var _non_iterable_rest = require("./_non_iterable_rest.cjs"); -var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs"); - -function _sliced_to_array(arr, i) { - return _array_with_holes._(arr) || _iterable_to_array_limit._(arr, i) || _unsupported_iterable_to_array._(arr, i) || _non_iterable_rest._(); -} -exports._ = _sliced_to_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs deleted file mode 100644 index 562dcaf..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _array_with_holes = require("./_array_with_holes.cjs"); -var _iterable_to_array_limit_loose = require("./_iterable_to_array_limit_loose.cjs"); -var _non_iterable_rest = require("./_non_iterable_rest.cjs"); -var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs"); - -function _sliced_to_array_loose(arr, i) { - return _array_with_holes._(arr) || _iterable_to_array_limit_loose._(arr, i) || _unsupported_iterable_to_array._(arr, i) || _non_iterable_rest._(); -} -exports._ = _sliced_to_array_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_super_prop_base.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_super_prop_base.cjs deleted file mode 100644 index eaf3199..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_super_prop_base.cjs +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -var _get_prototype_of = require("./_get_prototype_of.cjs"); - -function _super_prop_base(object, property) { - while (!Object.prototype.hasOwnProperty.call(object, property)) { - object = _get_prototype_of._(object); - if (object === null) break; - } - - return object; -} -exports._ = _super_prop_base; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs deleted file mode 100644 index 89a579d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _tagged_template_literal(strings, raw) { - if (!raw) raw = strings.slice(0); - - return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); -} -exports._ = _tagged_template_literal; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs deleted file mode 100644 index 48db14d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -function _tagged_template_literal_loose(strings, raw) { - if (!raw) raw = strings.slice(0); - - strings.raw = raw; - - return strings; -} -exports._ = _tagged_template_literal_loose; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_throw.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_throw.cjs deleted file mode 100644 index 26f2e2b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_throw.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _throw(e) { - throw e; -} -exports._ = _throw; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_array.cjs deleted file mode 100644 index 0887dd4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_array.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _array_with_holes = require("./_array_with_holes.cjs"); -var _iterable_to_array = require("./_iterable_to_array.cjs"); -var _non_iterable_rest = require("./_non_iterable_rest.cjs"); -var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs"); - -function _to_array(arr) { - return _array_with_holes._(arr) || _iterable_to_array._(arr) || _unsupported_iterable_to_array._(arr) || _non_iterable_rest._(); -} -exports._ = _to_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs deleted file mode 100644 index 85d1912..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _array_without_holes = require("./_array_without_holes.cjs"); -var _iterable_to_array = require("./_iterable_to_array.cjs"); -var _non_iterable_spread = require("./_non_iterable_spread.cjs"); -var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs"); - -function _to_consumable_array(arr) { - return _array_without_holes._(arr) || _iterable_to_array._(arr) || _unsupported_iterable_to_array._(arr) || _non_iterable_spread._(); -} -exports._ = _to_consumable_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_primitive.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_primitive.cjs deleted file mode 100644 index da35794..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_primitive.cjs +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; - -var _type_of = require("./_type_of.cjs"); - -function _to_primitive(input, hint) { - if (_type_of._(input) !== "object" || input === null) return input; - - var prim = input[Symbol.toPrimitive]; - - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (_type_of._(res) !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); -} -exports._ = _to_primitive; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_property_key.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_property_key.cjs deleted file mode 100644 index 86075ac..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_to_property_key.cjs +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -var _to_primitive = require("./_to_primitive.cjs"); -var _type_of = require("./_type_of.cjs"); - -function _to_property_key(arg) { - var key = _to_primitive._(arg, "string"); - - return _type_of._(key) === "symbol" ? key : String(key); -} -exports._ = _to_property_key; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs deleted file mode 100644 index 24848ca..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__addDisposableResource; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_decorate.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_decorate.cjs deleted file mode 100644 index 9abfbda..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_decorate.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__decorate; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs deleted file mode 100644 index 4ad32f1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__disposeResources; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_generator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_generator.cjs deleted file mode 100644 index ee376ab..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_generator.cjs +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -function _ts_generator(thisArg, body) { - var f, y, t, _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty; - return d(g, "next", { value: verb(0) }), d(g, "throw", { value: verb(1) }), d(g, "return", { value: verb(2) }), typeof Symbol === "function" && d(g, Symbol.iterator, { value: function () { return this; } }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -exports._ = _ts_generator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_metadata.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_metadata.cjs deleted file mode 100644 index d39e6e4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_metadata.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__metadata; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_param.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_param.cjs deleted file mode 100644 index 6e2dca6..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_param.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__param; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_rewrite_relative_import_extension.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_rewrite_relative_import_extension.cjs deleted file mode 100644 index ce42e88..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_rewrite_relative_import_extension.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__rewriteRelativeImportExtension; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_values.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_values.cjs deleted file mode 100644 index 0696a1f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_ts_values.cjs +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -exports._ = require("tslib").__values; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_type_of.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_type_of.cjs deleted file mode 100644 index 2749e8e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_type_of.cjs +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function _type_of(obj) { - "@swc/helpers - typeof"; - - return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; -} -exports._ = _type_of; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs deleted file mode 100644 index a1765e1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -var _array_like_to_array = require("./_array_like_to_array.cjs"); - -function _unsupported_iterable_to_array(o, minLen) { - if (!o) return; - if (typeof o === "string") return _array_like_to_array._(o, minLen); - - var n = Object.prototype.toString.call(o).slice(8, -1); - - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(n); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array._(o, minLen); -} -exports._ = _unsupported_iterable_to_array; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_update.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_update.cjs deleted file mode 100644 index abb90f3..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_update.cjs +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -var _get = require("./_get.cjs"); -var _set = require("./_set.cjs"); - -function _update(target, property, receiver, isStrict) { - return { - get _() { - return _get._(target, property, receiver); - }, - set _(value) { - _set._(target, property, value, receiver, isStrict); - } - }; -} -exports._ = _update; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_using.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_using.cjs deleted file mode 100644 index 903837e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_using.cjs +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -/* @minVersion 7.22.0 */ - -function _using(stack, value, isAwait) { - if (value === null || value === void 0) return value; - if (Object(value) !== value) { - throw new TypeError("using declarations can only be used with objects, functions, null, or undefined."); - } - // core-js-pure uses Symbol.for for polyfilling well-known symbols - if (isAwait) { - var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]; - } - if (dispose === null || dispose === void 0) { - dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")]; - } - if (typeof dispose !== "function") { - throw new TypeError(`Property [Symbol.dispose] is not a function.`); - } - stack.push({ v: value, d: dispose, a: isAwait }); - return value; -} - -exports._ = _using; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_using_ctx.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_using_ctx.cjs deleted file mode 100644 index 9c8d3fb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_using_ctx.cjs +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; - -function _using_ctx() { - var _disposeSuppressedError = typeof SuppressedError === "function" - // eslint-disable-next-line no-undef - ? SuppressedError - : (function(error, suppressed) { - var err = new Error(); - err.name = "SuppressedError"; - err.suppressed = suppressed; - err.error = error; - return err; - }), - empty = {}, - stack = []; - function using(isAwait, value) { - if (value != null) { - if (Object(value) !== value) { - throw new TypeError("using declarations can only be used with objects, functions, null, or undefined."); - } - // core-js-pure uses Symbol.for for polyfilling well-known symbols - if (isAwait) { - var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]; - } - if (dispose == null) { - dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")]; - } - if (typeof dispose !== "function") { - throw new TypeError(`Property [Symbol.dispose] is not a function.`); - } - stack.push({ v: value, d: dispose, a: isAwait }); - } else if (isAwait) { - // provide the nullish `value` as `d` for minification gain - stack.push({ d: value, a: isAwait }); - } - return value; - } - return { - // error - e: empty, - // using - u: using.bind(null, false), - // await using - a: using.bind(null, true), - // dispose - d: function() { - var error = this.e; - - function next() { - // eslint-disable-next-line @typescript-eslint/no-use-before-define - while ((resource = stack.pop())) { - try { - var resource, disposalResult = resource.d && resource.d.call(resource.v); - if (resource.a) { - return Promise.resolve(disposalResult).then(next, err); - } - } catch (e) { - return err(e); - } - } - if (error !== empty) throw error; - } - - function err(e) { - error = error !== empty ? new _disposeSuppressedError(e, error) : e; - - return next(); - } - - return next(); - } - }; -} - -exports._ = _using_ctx; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs deleted file mode 100644 index 09adf25..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -var _async_generator = require("./_async_generator.cjs"); - -function _wrap_async_generator(fn) { - return function() { - return new _async_generator._(fn.apply(this, arguments)); - }; -} -exports._ = _wrap_async_generator; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs deleted file mode 100644 index 6babaef..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -var _construct = require("./_construct.cjs"); -var _get_prototype_of = require("./_get_prototype_of.cjs"); -var _is_native_function = require("./_is_native_function.cjs"); -var _set_prototype_of = require("./_set_prototype_of.cjs"); - -function _wrap_native_super(Class) { - var _cache = typeof Map === "function" ? new Map() : undefined; - exports._ = _wrap_native_super = function(Class) { - if (Class === null || !_is_native_function._(Class)) return Class; - if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function"); - if (typeof _cache !== "undefined") { - if (_cache.has(Class)) return _cache.get(Class); - _cache.set(Class, Wrapper); - } - - function Wrapper() { - return _construct._(Class, arguments, _get_prototype_of._(this).constructor); - } - Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); - - return _set_prototype_of._(Wrapper, Class); - }; - - return _wrap_native_super(Class); -} -exports._ = _wrap_native_super; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_reg_exp.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_reg_exp.cjs deleted file mode 100644 index d50941b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_wrap_reg_exp.cjs +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; - -var _inherits = require("./_inherits.cjs"); -var _set_prototype_of = require("./_set_prototype_of.cjs"); - -function _wrap_reg_exp(re, groups) { - exports._ = _wrap_reg_exp = function(re, groups) { - return new WrappedRegExp(re, undefined, groups); - }; - var _super = RegExp.prototype; - var _groups = new WeakMap(); - function WrappedRegExp(re, flags, groups) { - var _re = new RegExp(re, flags); - _groups.set(_re, groups || _groups.get(re)); - return _set_prototype_of._(_re, WrappedRegExp.prototype); - } - _inherits._(WrappedRegExp, RegExp); - WrappedRegExp.prototype.exec = function(str) { - var result = _super.exec.call(this, str); - if (result) { - result.groups = buildGroups(result, this); - var indices = result.indices; - if (indices) indices.groups = buildGroups(indices, this); - } - return result; - }; - WrappedRegExp.prototype[Symbol.replace] = function(str, substitution) { - if (typeof substitution === "string") { - var groups = _groups.get(this); - return _super[Symbol.replace].call( - this, - str, - substitution.replace(/\$<([^>]+)>/g, function(_, name) { - var group = groups ? groups[name] : undefined; - if (group === undefined) return ""; - return "$" + (Array.isArray(group) ? group.join("$") : group); - }) - ); - } - if (typeof substitution === "function") { - var _this = this; - return _super[Symbol.replace].call(this, str, function() { - var args = arguments; - if (typeof args[args.length - 1] !== "object") { - args = [].slice.call(args); - args.push(buildGroups(args, _this)); - } - return substitution.apply(this, args); - }); - } - return _super[Symbol.replace].call(this, str, substitution); - }; - function buildGroups(result, re) { - var g = _groups.get(re); - return Object.keys(g).reduce(function(groups, name) { - var i = g[name]; - if (typeof i === "number") groups[name] = result[i]; - else { - var k = 0; - while (result[i[k]] === undefined && k + 1 < i.length) k++; - groups[name] = result[i[k]]; - } - return groups; - }, Object.create(null)); - } - return _wrap_reg_exp.apply(this, arguments); -} -exports._ = _wrap_reg_exp; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/_write_only_error.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/_write_only_error.cjs deleted file mode 100644 index 799fc3a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/_write_only_error.cjs +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -function _write_only_error(name) { - throw new TypeError("\"" + name + "\" is write-only"); -} -exports._ = _write_only_error; diff --git a/skills/flight-finder/node_modules/@swc/helpers/cjs/index.cjs b/skills/flight-finder/node_modules/@swc/helpers/cjs/index.cjs deleted file mode 100644 index f4dde29..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/cjs/index.cjs +++ /dev/null @@ -1,439 +0,0 @@ -"use strict"; - -/* This file is automatically generated and should not be manually edited. */ -/* To modify this file, please run the `npm run build` command instead. */ - -0 && (module.exports = { - /* @Annotate_start: the CommonJS named exports for ESM import in node */ - _apply_decorated_descriptor: null, - _apply_decs_2203_r: null, - _apply_decs_2311: null, - _array_like_to_array: null, - _array_with_holes: null, - _array_without_holes: null, - _assert_this_initialized: null, - _async_generator: null, - _async_generator_delegate: null, - _async_iterator: null, - _async_to_generator: null, - _await_async_generator: null, - _await_value: null, - _call_super: null, - _check_private_redeclaration: null, - _class_apply_descriptor_destructure: null, - _class_apply_descriptor_get: null, - _class_apply_descriptor_set: null, - _class_apply_descriptor_update: null, - _class_call_check: null, - _class_check_private_static_access: null, - _class_check_private_static_field_descriptor: null, - _class_extract_field_descriptor: null, - _class_name_tdz_error: null, - _class_private_field_destructure: null, - _class_private_field_get: null, - _class_private_field_init: null, - _class_private_field_loose_base: null, - _class_private_field_loose_key: null, - _class_private_field_set: null, - _class_private_field_update: null, - _class_private_method_get: null, - _class_private_method_init: null, - _class_private_method_set: null, - _class_static_private_field_destructure: null, - _class_static_private_field_spec_get: null, - _class_static_private_field_spec_set: null, - _class_static_private_field_update: null, - _class_static_private_method_get: null, - _construct: null, - _create_class: null, - _create_for_of_iterator_helper_loose: null, - _create_super: null, - _decorate: null, - _defaults: null, - _define_enumerable_properties: null, - _define_property: null, - _dispose: null, - _export_star: null, - _extends: null, - _get: null, - _get_prototype_of: null, - _identity: null, - _inherits: null, - _inherits_loose: null, - _initializer_define_property: null, - _initializer_warning_helper: null, - _instanceof: null, - _interop_require_default: null, - _interop_require_wildcard: null, - _is_native_function: null, - _is_native_reflect_construct: null, - _iterable_to_array: null, - _iterable_to_array_limit: null, - _iterable_to_array_limit_loose: null, - _jsx: null, - _new_arrow_check: null, - _non_iterable_rest: null, - _non_iterable_spread: null, - _object_destructuring_empty: null, - _object_spread: null, - _object_spread_props: null, - _object_without_properties: null, - _object_without_properties_loose: null, - _overload_yield: null, - _possible_constructor_return: null, - _read_only_error: null, - _set: null, - _set_prototype_of: null, - _skip_first_generator_next: null, - _sliced_to_array: null, - _sliced_to_array_loose: null, - _super_prop_base: null, - _tagged_template_literal: null, - _tagged_template_literal_loose: null, - _throw: null, - _to_array: null, - _to_consumable_array: null, - _to_primitive: null, - _to_property_key: null, - _ts_add_disposable_resource: null, - _ts_decorate: null, - _ts_dispose_resources: null, - _ts_generator: null, - _ts_metadata: null, - _ts_param: null, - _ts_rewrite_relative_import_extension: null, - _ts_values: null, - _type_of: null, - _unsupported_iterable_to_array: null, - _update: null, - _using: null, - _using_ctx: null, - _wrap_async_generator: null, - _wrap_native_super: null, - _wrap_reg_exp: null, - _write_only_error: null - /* @Annotate_end */ -}); -module.exports = { - get _apply_decorated_descriptor() { - return require("./_apply_decorated_descriptor.cjs")._; - }, - get _apply_decs_2203_r() { - return require("./_apply_decs_2203_r.cjs")._; - }, - get _apply_decs_2311() { - return require("./_apply_decs_2311.cjs")._; - }, - get _array_like_to_array() { - return require("./_array_like_to_array.cjs")._; - }, - get _array_with_holes() { - return require("./_array_with_holes.cjs")._; - }, - get _array_without_holes() { - return require("./_array_without_holes.cjs")._; - }, - get _assert_this_initialized() { - return require("./_assert_this_initialized.cjs")._; - }, - get _async_generator() { - return require("./_async_generator.cjs")._; - }, - get _async_generator_delegate() { - return require("./_async_generator_delegate.cjs")._; - }, - get _async_iterator() { - return require("./_async_iterator.cjs")._; - }, - get _async_to_generator() { - return require("./_async_to_generator.cjs")._; - }, - get _await_async_generator() { - return require("./_await_async_generator.cjs")._; - }, - get _await_value() { - return require("./_await_value.cjs")._; - }, - get _call_super() { - return require("./_call_super.cjs")._; - }, - get _check_private_redeclaration() { - return require("./_check_private_redeclaration.cjs")._; - }, - get _class_apply_descriptor_destructure() { - return require("./_class_apply_descriptor_destructure.cjs")._; - }, - get _class_apply_descriptor_get() { - return require("./_class_apply_descriptor_get.cjs")._; - }, - get _class_apply_descriptor_set() { - return require("./_class_apply_descriptor_set.cjs")._; - }, - get _class_apply_descriptor_update() { - return require("./_class_apply_descriptor_update.cjs")._; - }, - get _class_call_check() { - return require("./_class_call_check.cjs")._; - }, - get _class_check_private_static_access() { - return require("./_class_check_private_static_access.cjs")._; - }, - get _class_check_private_static_field_descriptor() { - return require("./_class_check_private_static_field_descriptor.cjs")._; - }, - get _class_extract_field_descriptor() { - return require("./_class_extract_field_descriptor.cjs")._; - }, - get _class_name_tdz_error() { - return require("./_class_name_tdz_error.cjs")._; - }, - get _class_private_field_destructure() { - return require("./_class_private_field_destructure.cjs")._; - }, - get _class_private_field_get() { - return require("./_class_private_field_get.cjs")._; - }, - get _class_private_field_init() { - return require("./_class_private_field_init.cjs")._; - }, - get _class_private_field_loose_base() { - return require("./_class_private_field_loose_base.cjs")._; - }, - get _class_private_field_loose_key() { - return require("./_class_private_field_loose_key.cjs")._; - }, - get _class_private_field_set() { - return require("./_class_private_field_set.cjs")._; - }, - get _class_private_field_update() { - return require("./_class_private_field_update.cjs")._; - }, - get _class_private_method_get() { - return require("./_class_private_method_get.cjs")._; - }, - get _class_private_method_init() { - return require("./_class_private_method_init.cjs")._; - }, - get _class_private_method_set() { - return require("./_class_private_method_set.cjs")._; - }, - get _class_static_private_field_destructure() { - return require("./_class_static_private_field_destructure.cjs")._; - }, - get _class_static_private_field_spec_get() { - return require("./_class_static_private_field_spec_get.cjs")._; - }, - get _class_static_private_field_spec_set() { - return require("./_class_static_private_field_spec_set.cjs")._; - }, - get _class_static_private_field_update() { - return require("./_class_static_private_field_update.cjs")._; - }, - get _class_static_private_method_get() { - return require("./_class_static_private_method_get.cjs")._; - }, - get _construct() { - return require("./_construct.cjs")._; - }, - get _create_class() { - return require("./_create_class.cjs")._; - }, - get _create_for_of_iterator_helper_loose() { - return require("./_create_for_of_iterator_helper_loose.cjs")._; - }, - get _create_super() { - return require("./_create_super.cjs")._; - }, - get _decorate() { - return require("./_decorate.cjs")._; - }, - get _defaults() { - return require("./_defaults.cjs")._; - }, - get _define_enumerable_properties() { - return require("./_define_enumerable_properties.cjs")._; - }, - get _define_property() { - return require("./_define_property.cjs")._; - }, - get _dispose() { - return require("./_dispose.cjs")._; - }, - get _export_star() { - return require("./_export_star.cjs")._; - }, - get _extends() { - return require("./_extends.cjs")._; - }, - get _get() { - return require("./_get.cjs")._; - }, - get _get_prototype_of() { - return require("./_get_prototype_of.cjs")._; - }, - get _identity() { - return require("./_identity.cjs")._; - }, - get _inherits() { - return require("./_inherits.cjs")._; - }, - get _inherits_loose() { - return require("./_inherits_loose.cjs")._; - }, - get _initializer_define_property() { - return require("./_initializer_define_property.cjs")._; - }, - get _initializer_warning_helper() { - return require("./_initializer_warning_helper.cjs")._; - }, - get _instanceof() { - return require("./_instanceof.cjs")._; - }, - get _interop_require_default() { - return require("./_interop_require_default.cjs")._; - }, - get _interop_require_wildcard() { - return require("./_interop_require_wildcard.cjs")._; - }, - get _is_native_function() { - return require("./_is_native_function.cjs")._; - }, - get _is_native_reflect_construct() { - return require("./_is_native_reflect_construct.cjs")._; - }, - get _iterable_to_array() { - return require("./_iterable_to_array.cjs")._; - }, - get _iterable_to_array_limit() { - return require("./_iterable_to_array_limit.cjs")._; - }, - get _iterable_to_array_limit_loose() { - return require("./_iterable_to_array_limit_loose.cjs")._; - }, - get _jsx() { - return require("./_jsx.cjs")._; - }, - get _new_arrow_check() { - return require("./_new_arrow_check.cjs")._; - }, - get _non_iterable_rest() { - return require("./_non_iterable_rest.cjs")._; - }, - get _non_iterable_spread() { - return require("./_non_iterable_spread.cjs")._; - }, - get _object_destructuring_empty() { - return require("./_object_destructuring_empty.cjs")._; - }, - get _object_spread() { - return require("./_object_spread.cjs")._; - }, - get _object_spread_props() { - return require("./_object_spread_props.cjs")._; - }, - get _object_without_properties() { - return require("./_object_without_properties.cjs")._; - }, - get _object_without_properties_loose() { - return require("./_object_without_properties_loose.cjs")._; - }, - get _overload_yield() { - return require("./_overload_yield.cjs")._; - }, - get _possible_constructor_return() { - return require("./_possible_constructor_return.cjs")._; - }, - get _read_only_error() { - return require("./_read_only_error.cjs")._; - }, - get _set() { - return require("./_set.cjs")._; - }, - get _set_prototype_of() { - return require("./_set_prototype_of.cjs")._; - }, - get _skip_first_generator_next() { - return require("./_skip_first_generator_next.cjs")._; - }, - get _sliced_to_array() { - return require("./_sliced_to_array.cjs")._; - }, - get _sliced_to_array_loose() { - return require("./_sliced_to_array_loose.cjs")._; - }, - get _super_prop_base() { - return require("./_super_prop_base.cjs")._; - }, - get _tagged_template_literal() { - return require("./_tagged_template_literal.cjs")._; - }, - get _tagged_template_literal_loose() { - return require("./_tagged_template_literal_loose.cjs")._; - }, - get _throw() { - return require("./_throw.cjs")._; - }, - get _to_array() { - return require("./_to_array.cjs")._; - }, - get _to_consumable_array() { - return require("./_to_consumable_array.cjs")._; - }, - get _to_primitive() { - return require("./_to_primitive.cjs")._; - }, - get _to_property_key() { - return require("./_to_property_key.cjs")._; - }, - get _ts_add_disposable_resource() { - return require("./_ts_add_disposable_resource.cjs")._; - }, - get _ts_decorate() { - return require("./_ts_decorate.cjs")._; - }, - get _ts_dispose_resources() { - return require("./_ts_dispose_resources.cjs")._; - }, - get _ts_generator() { - return require("./_ts_generator.cjs")._; - }, - get _ts_metadata() { - return require("./_ts_metadata.cjs")._; - }, - get _ts_param() { - return require("./_ts_param.cjs")._; - }, - get _ts_rewrite_relative_import_extension() { - return require("./_ts_rewrite_relative_import_extension.cjs")._; - }, - get _ts_values() { - return require("./_ts_values.cjs")._; - }, - get _type_of() { - return require("./_type_of.cjs")._; - }, - get _unsupported_iterable_to_array() { - return require("./_unsupported_iterable_to_array.cjs")._; - }, - get _update() { - return require("./_update.cjs")._; - }, - get _using() { - return require("./_using.cjs")._; - }, - get _using_ctx() { - return require("./_using_ctx.cjs")._; - }, - get _wrap_async_generator() { - return require("./_wrap_async_generator.cjs")._; - }, - get _wrap_native_super() { - return require("./_wrap_native_super.cjs")._; - }, - get _wrap_reg_exp() { - return require("./_wrap_reg_exp.cjs")._; - }, - get _write_only_error() { - return require("./_write_only_error.cjs")._; - } -}; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js deleted file mode 100644 index 671db1f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js +++ /dev/null @@ -1,33 +0,0 @@ -function _apply_decorated_descriptor(target, property, decorators, descriptor, context) { - var desc = {}; - - Object["ke" + "ys"](descriptor).forEach(function(key) { - desc[key] = descriptor[key]; - }); - desc.enumerable = !!desc.enumerable; - desc.configurable = !!desc.configurable; - - if ("value" in desc || desc.initializer) desc.writable = true; - desc = decorators.slice().reverse().reduce(function(desc, decorator) { - return decorator ? decorator(target, property, desc) || desc : desc; - }, desc); - - var hasAccessor = Object.prototype.hasOwnProperty.call(desc, "get") || Object.prototype.hasOwnProperty.call(desc, "set"); - - if (context && desc.initializer !== void 0 && !hasAccessor) { - desc.value = desc.initializer ? desc.initializer.call(context) : void 0; - desc.initializer = undefined; - } - if (hasAccessor) { - delete desc.writable; - delete desc.initializer; - delete desc.value; - } - if (desc.initializer === void 0) { - Object["define" + "Property"](target, property, desc); - desc = null; - } - - return desc; -} -export { _apply_decorated_descriptor as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js deleted file mode 100644 index 6b64002..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js +++ /dev/null @@ -1,572 +0,0 @@ -/* @minVersion 7.20.0 */ - -/** - Enums are used in this file, but not assigned to vars to avoid non-hoistable values - - CONSTRUCTOR = 0; - PUBLIC = 1; - PRIVATE = 2; - - FIELD = 0; - ACCESSOR = 1; - METHOD = 2; - GETTER = 3; - SETTER = 4; - - STATIC = 5; - - CLASS = 10; // only used in assertValidReturnValue -*/ - -function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) { - function createAddInitializerMethod(initializers, decoratorFinishedRef) { - return function addInitializer(initializer) { - assertNotFinished(decoratorFinishedRef, "addInitializer"); - assertCallable(initializer, "An initializer"); - initializers.push(initializer); - }; - } - - function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) { - var kindStr; - - switch (kind) { - case 1 /* ACCESSOR */: - kindStr = "accessor"; - break; - case 2 /* METHOD */: - kindStr = "method"; - break; - case 3 /* GETTER */: - kindStr = "getter"; - break; - case 4 /* SETTER */: - kindStr = "setter"; - break; - default: - kindStr = "field"; - } - - var ctx = { kind: kindStr, name: isPrivate ? "#" + name : name, static: isStatic, private: isPrivate, metadata: metadata }; - - var decoratorFinishedRef = { v: false }; - - ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef); - - var get, set; - if (kind === 0 /* FIELD */) { - if (isPrivate) { - get = desc.get; - set = desc.set; - } else { - get = function() { - return this[name]; - }; - set = function(v) { - this[name] = v; - }; - } - } else if (kind === 2 /* METHOD */) { - get = function() { - return desc.value; - }; - } else { - // replace with values that will go through the final getter and setter - if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) { - get = function() { - return desc.get.call(this); - }; - } - - if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) { - set = function(v) { - desc.set.call(this, v); - }; - } - } - - if (get) { - var originalGet = get; - get = function(target) { - if (arguments.length === 0) { - target = this; - } - return originalGet.call(target); - }; - } - - if (set) { - var originalSet = set; - set = function(target, value) { - if (arguments.length === 1) { - value = target; - target = this; - } - return originalSet.call(target, value); - }; - } - - if (isPrivate) { - ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set }; - } else { - var has = function(target) { - return name in target; - }; - ctx.access = get && set ? { has: has, get: get, set: set } : get ? { has: has, get: get } : { has: has, set: set }; - } - - var newValue = dec(value, ctx); - decoratorFinishedRef.v = true; - return newValue; - } - - function assertNotFinished(decoratorFinishedRef, fnName) { - if (decoratorFinishedRef.v) { - throw new Error("attempted to call " + fnName + " after decoration was finished"); - } - } - - function assertCallable(fn, hint) { - if (typeof fn !== "function") { - throw new TypeError(hint + " must be a function"); - } - } - - function assertValidReturnValue(kind, value) { - var type = typeof value; - - if (kind === 1 /* ACCESSOR */) { - if (type !== "object" || value === null) { - throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); - } - if (value.get !== undefined) { - assertCallable(value.get, "accessor.get"); - } - if (value.set !== undefined) { - assertCallable(value.set, "accessor.set"); - } - if (value.init !== undefined) { - assertCallable(value.init, "accessor.init"); - } - } else if (type !== "function") { - var hint; - if (kind === 0 /* FIELD */) { - hint = "field"; - } else if (kind === 10 /* CLASS */) { - hint = "class"; - } else { - hint = "method"; - } - throw new TypeError(hint + " decorators must return a function or void 0"); - } - } - - function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) { - var decs = decInfo[0]; - - var desc, init, value; - - if (isPrivate) { - if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) { - desc = { get: decInfo[3], set: decInfo[4] }; - } else if (kind === 3 /* GETTER */) { - desc = { get: decInfo[3] }; - } else if (kind === 4 /* SETTER */) { - desc = { set: decInfo[3] }; - } else { - desc = { value: decInfo[3] }; - } - } else if (kind !== 0 /* FIELD */) { - desc = Object.getOwnPropertyDescriptor(base, name); - } - - if (kind === 1 /* ACCESSOR */) { - value = { get: desc.get, set: desc.set }; - } else if (kind === 2 /* METHOD */) { - value = desc.value; - } else if (kind === 3 /* GETTER */) { - value = desc.get; - } else if (kind === 4 /* SETTER */) { - value = desc.set; - } - - var newValue, get, set; - - if (typeof decs === "function") { - newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value); - - if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); - - if (kind === 0 /* FIELD */) { - init = newValue; - } else if (kind === 1 /* ACCESSOR */) { - init = newValue.init; - get = newValue.get || value.get; - set = newValue.set || value.set; - - value = { get: get, set: set }; - } else { - value = newValue; - } - } - } else { - for (var i = decs.length - 1; i >= 0; i--) { - var dec = decs[i]; - - newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value); - - if (newValue !== void 0) { - assertValidReturnValue(kind, newValue); - var newInit; - - if (kind === 0 /* FIELD */) { - newInit = newValue; - } else if (kind === 1 /* ACCESSOR */) { - newInit = newValue.init; - get = newValue.get || value.get; - set = newValue.set || value.set; - - value = { get: get, set: set }; - } else { - value = newValue; - } - - if (newInit !== void 0) { - if (init === void 0) { - init = newInit; - } else if (typeof init === "function") { - init = [init, newInit]; - } else { - init.push(newInit); - } - } - } - } - } - - if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) { - if (init === void 0) { - // If the initializer was void 0, sub in a dummy initializer - init = function(instance, init) { - return init; - }; - } else if (typeof init !== "function") { - var ownInitializers = init; - - init = function(instance, init) { - var value = init; - - for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value); - - return value; - }; - } else { - var originalInitializer = init; - - init = function(instance, init) { - return originalInitializer.call(instance, init); - }; - } - - ret.push(init); - } - - if (kind !== 0 /* FIELD */) { - if (kind === 1 /* ACCESSOR */) { - desc.get = value.get; - desc.set = value.set; - } else if (kind === 2 /* METHOD */) { - desc.value = value; - } else if (kind === 3 /* GETTER */) { - desc.get = value; - } else if (kind === 4 /* SETTER */) { - desc.set = value; - } - - if (isPrivate) { - if (kind === 1 /* ACCESSOR */) { - ret.push(function(instance, args) { - return value.get.call(instance, args); - }); - ret.push(function(instance, args) { - return value.set.call(instance, args); - }); - } else if (kind === 2 /* METHOD */) { - ret.push(value); - } else { - ret.push(function(instance, args) { - return value.call(instance, args); - }); - } - } else { - Object.defineProperty(base, name, desc); - } - } - } - - function applyMemberDecs(Class, decInfos, metadata) { - var ret = []; - var protoInitializers; - var staticInitializers; - - var existingProtoNonFields = new Map(); - var existingStaticNonFields = new Map(); - - for (var i = 0; i < decInfos.length; i++) { - var decInfo = decInfos[i]; - - // skip computed property names - if (!Array.isArray(decInfo)) continue; - - var kind = decInfo[1]; - var name = decInfo[2]; - var isPrivate = decInfo.length > 3; - - var isStatic = kind >= 5; /* STATIC */ - var base; - var initializers; - - if (isStatic) { - base = Class; - kind = kind - 5 /* STATIC */; - // initialize staticInitializers when we see a non-field static member - staticInitializers = staticInitializers || []; - initializers = staticInitializers; - } else { - base = Class.prototype; - // initialize protoInitializers when we see a non-field member - protoInitializers = protoInitializers || []; - initializers = protoInitializers; - } - - if (kind !== 0 /* FIELD */ && !isPrivate) { - var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields; - - var existingKind = existingNonFields.get(name) || 0; - - if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) { - throw new Error( - "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " - + name - ); - } else if (!existingKind && kind > 2 /* METHOD */) { - existingNonFields.set(name, kind); - } else { - existingNonFields.set(name, true); - } - } - - applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata); - } - - pushInitializers(ret, protoInitializers); - pushInitializers(ret, staticInitializers); - return ret; - } - - function pushInitializers(ret, initializers) { - if (initializers) { - ret.push(function(instance) { - for (var i = 0; i < initializers.length; i++) initializers[i].call(instance); - return instance; - }); - } - } - - function applyClassDecs(targetClass, classDecs, metadata) { - if (classDecs.length > 0) { - var initializers = []; - var newClass = targetClass; - var name = targetClass.name; - - for (var i = classDecs.length - 1; i >= 0; i--) { - var decoratorFinishedRef = { v: false }; - - var nextNewClass = classDecs[i](newClass, { kind: "class", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata }); - decoratorFinishedRef.v = true; - - if (nextNewClass !== undefined) { - assertValidReturnValue(10, /* CLASS */ nextNewClass); - newClass = nextNewClass; - } - } - - return [defineMetadata(newClass, metadata), function() { - for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass); - }]; - } - // The transformer will not emit assignment when there are no class decorators, - // so we don't have to return an empty array here. - } - - function defineMetadata(Class, metadata) { - return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: true, enumerable: true, value: metadata }); - } - - /** - Basic usage: - - applyDecs( - Class, - [ - // member decorators - [ - dec, // dec or array of decs - 0, // kind of value being decorated - 'prop', // name of public prop on class containing the value being decorated, - '#p', // the name of the private property (if is private, void 0 otherwise), - ] - ], - [ - // class decorators - dec1, dec2 - ] - ) - ``` - - Fully transpiled example: - - ```js - @dec - class Class { - @dec - a = 123; - - @dec - #a = 123; - - @dec - @dec2 - accessor b = 123; - - @dec - accessor #b = 123; - - @dec - c() { console.log('c'); } - - @dec - #c() { console.log('privC'); } - - @dec - get d() { console.log('d'); } - - @dec - get #d() { console.log('privD'); } - - @dec - set e(v) { console.log('e'); } - - @dec - set #e(v) { console.log('privE'); } - } - - - // becomes - let initializeInstance; - let initializeClass; - - let initA; - let initPrivA; - - let initB; - let initPrivB, getPrivB, setPrivB; - - let privC; - let privD; - let privE; - - let Class; - class _Class { - static { - let ret = applyDecs( - this, - [ - [dec, 0, 'a'], - [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v], - [[dec, dec2], 1, 'b'], - [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v], - [dec, 2, 'c'], - [dec, 2, 'c', () => console.log('privC')], - [dec, 3, 'd'], - [dec, 3, 'd', () => console.log('privD')], - [dec, 4, 'e'], - [dec, 4, 'e', () => console.log('privE')], - ], - [ - dec - ] - ) - - initA = ret[0]; - - initPrivA = ret[1]; - - initB = ret[2]; - - initPrivB = ret[3]; - getPrivB = ret[4]; - setPrivB = ret[5]; - - privC = ret[6]; - - privD = ret[7]; - - privE = ret[8]; - - initializeInstance = ret[9]; - - Class = ret[10] - - initializeClass = ret[11]; - } - - a = (initializeInstance(this), initA(this, 123)); - - #a = initPrivA(this, 123); - - #bData = initB(this, 123); - get b() { return this.#bData } - set b(v) { this.#bData = v } - - #privBData = initPrivB(this, 123); - get #b() { return getPrivB(this); } - set #b(v) { setPrivB(this, v); } - - c() { console.log('c'); } - - #c(...args) { return privC(this, ...args) } - - get d() { console.log('d'); } - - get #d() { return privD(this); } - - set e(v) { console.log('e'); } - - set #e(v) { privE(this, v); } - } - - initializeClass(Class); - */ - - _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) { - if (parentClass !== void 0) { - var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")]; - } - var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata); - var e = applyMemberDecs(targetClass, memberDecs, metadata); - if (!classDecs.length) defineMetadata(targetClass, metadata); - return { - e: e, - // Lazily apply class decorations so that member init locals can be properly bound. - get c() { - return applyClassDecs(targetClass, classDecs, metadata); - } - }; - }; - - return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass); -} - -export { _apply_decs_2203_r as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2311.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2311.js deleted file mode 100644 index d1b0c80..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_apply_decs_2311.js +++ /dev/null @@ -1,344 +0,0 @@ -/* @minVersion 7.24.0 */ - -function toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) { - return input; - } - - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") { - return res; - } - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); -} - -function toPropertyKey(arg) { - var key = toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); -} - -function checkInRHS(value) { - if (Object(value) !== value) { - throw TypeError("right-hand side of 'in' should be an object, got " + (value !== null ? typeof value : "null")); - } - - return value; -} - -function setFunctionName(fn, name, prefix) { - if (typeof name === "symbol") { - name = name.description; - name = name ? "[" + name + "]" : ""; - } - - try { - Object.defineProperty(fn, "name", { configurable: true, value: prefix ? prefix + " " + name : name }); - } catch (_) {} - - return fn; -} - -/** - kind bit layout - - FIELD = 0 - ACCESSOR = 1 - METHOD = 2 - GETTER = 3 - SETTER = 4 - CLASS = 5 - - STATIC = 8 - DECORATORS_HAVE_THIS = 16 -*/ -function _apply_decs_2311(targetClass, classDecs, memberDecs, classDecsHaveThis, instanceBrand, parentClass) { - var symbolMetadata = Symbol.metadata || Symbol.for("Symbol.metadata"); - var defineProperty = Object.defineProperty; - var create = Object.create; - var metadata; - var existingNonFields = [create(null), create(null)]; - var hasClassDecs = classDecs.length; - var _; - - function createRunInitializers(initializers, useStaticThis, hasValue) { - return function(thisArg, value) { - if (useStaticThis) { - value = thisArg; - thisArg = targetClass; - } - - for (var i = 0; i < initializers.length; i++) value = initializers[i].apply(thisArg, hasValue ? [value] : []); - - return hasValue ? value : thisArg; - }; - } - - function assertCallable(fn, hint1, hint2, throwUndefined) { - if (typeof fn !== "function") { - if (throwUndefined || fn !== void 0) { - throw new TypeError(hint1 + " must " + (hint2 || "be") + " a function" + (throwUndefined ? "" : " or undefined")); - } - } - - return fn; - } - - function applyDec(Class, decInfo, decoratorsHaveThis, name, kind, initializers, ret, isStatic, isPrivate, isField, hasPrivateBrand) { - function assertInstanceIfPrivate(target) { - if (!hasPrivateBrand(target)) { - throw new TypeError("Attempted to access private element on non-instance"); - } - } - - var decs = [].concat(decInfo[0]); - var decVal = decInfo[3]; - var isClass = !ret; - - var isAccessor = kind === 1; - var isGetter = kind === 3; - var isSetter = kind === 4; - var isMethod = kind === 2; - - function bindPropCall(name, useStaticThis, before) { - return function(_this, value) { - if (useStaticThis) { - value = _this; - _this = Class; - } - - if (before) { - before(_this); - } - - return desc[name].call(_this, value); - }; - } - - var desc = {}; - var init = []; - var key = isGetter ? "get" : isSetter || isAccessor ? "set" : "value"; - - if (!isClass) { - if (isPrivate) { - if (isField || isAccessor) { - desc = { - get: setFunctionName( - function() { - return decVal(this); - }, - name, - "get" - ), - set: function(value) { - decInfo[4](this, value); - } - }; - } else { - desc[key] = decVal; - } - - if (!isField) { - setFunctionName(desc[key], name, isMethod ? "" : key); - } - } else if (!isField) { - desc = Object.getOwnPropertyDescriptor(Class, name); - } - - if (!isField && !isPrivate) { - _ = existingNonFields[+isStatic][name]; - if (_ && (_ ^ kind) !== 7) { - throw new Error("Decorating two elements with the same name (" + desc[key].name + ") is not supported yet"); - } - - existingNonFields[+isStatic][name] = kind < 3 ? 1 : kind; - } - } - - var newValue = Class; - - for (var i = decs.length - 1; i >= 0; i -= decoratorsHaveThis ? 2 : 1) { - var dec = assertCallable(decs[i], "A decorator", "be", true); - var decThis = decoratorsHaveThis ? decs[i - 1] : void 0; - - var decoratorFinishedRef = {}; - var ctx = { - kind: ["field", "accessor", "method", "getter", "setter", "class"][kind], - name: name, - metadata: metadata, - addInitializer: function(decoratorFinishedRef, initializer) { - if (decoratorFinishedRef.v) { - throw new TypeError("attempted to call addInitializer after decoration was finished"); - } - assertCallable(initializer, "An initializer", "be", true); - initializers.push(initializer); - } - .bind(null, decoratorFinishedRef) - }; - - if (isClass) { - _ = dec.call(decThis, newValue, ctx); - decoratorFinishedRef.v = 1; - - if (assertCallable(_, "class decorators", "return")) { - newValue = _; - } - continue; - } - - ctx.static = isStatic; - ctx.private = isPrivate; - _ = ctx.access = { - has: isPrivate ? hasPrivateBrand.bind() : function(target) { - return name in target; - } - }; - - if (!isSetter) { - _.get = isPrivate - ? isMethod - ? function(_this) { - assertInstanceIfPrivate(_this); - return desc.value; - } - : bindPropCall("get", 0, assertInstanceIfPrivate) - : function(target) { - return target[name]; - }; - } - - if (!isMethod && !isGetter) { - _.set = isPrivate ? bindPropCall("set", 0, assertInstanceIfPrivate) : function(target, value) { - target[name] = value; - }; - } - - newValue = dec.call(decThis, isAccessor ? { get: desc.get, set: desc.set } : desc[key], ctx); - - decoratorFinishedRef.v = 1; - - if (isAccessor) { - if (typeof newValue === "object" && newValue) { - if ((_ = assertCallable(newValue.get, "accessor.get"))) { - desc.get = _; - } - if ((_ = assertCallable(newValue.set, "accessor.set"))) { - desc.set = _; - } - if ((_ = assertCallable(newValue.init, "accessor.init"))) { - init.unshift(_); - } - } else if (newValue !== void 0) { - throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined"); - } - } else if (assertCallable(newValue, (isField ? "field" : "method") + " decorators", "return")) { - if (isField) { - init.unshift(newValue); - } else { - desc[key] = newValue; - } - } - } - - if (kind < 2) { - ret.push(createRunInitializers(init, isStatic, 1), createRunInitializers(initializers, isStatic, 0)); - } - - if (!isField && !isClass) { - if (isPrivate) { - if (isAccessor) { - ret.splice(-1, 0, bindPropCall("get", isStatic), bindPropCall("set", isStatic)); - } else { - ret.push(isMethod ? desc[key] : assertCallable.call.bind(desc[key])); - } - } else { - defineProperty(Class, name, desc); - } - } - - return newValue; - } - - function applyMemberDecs() { - var ret = []; - var protoInitializers; - var staticInitializers; - - var pushInitializers = function(initializers) { - if (initializers) { - ret.push(createRunInitializers(initializers)); - } - }; - - var applyMemberDecsOfKind = function(isStatic, isField) { - for (var i = 0; i < memberDecs.length; i++) { - var decInfo = memberDecs[i]; - var kind = decInfo[1]; - var kindOnly = kind & 7; - - if ((kind & 8) == isStatic && !kindOnly == isField) { - var name = decInfo[2]; - var isPrivate = !!decInfo[3]; - var decoratorsHaveThis = kind & 16; - - applyDec( - isStatic ? targetClass : targetClass.prototype, - decInfo, - decoratorsHaveThis, - isPrivate ? "#" + name : toPropertyKey(name), - kindOnly, - kindOnly < 2 ? [] : isStatic ? (staticInitializers = staticInitializers || []) : (protoInitializers = protoInitializers || []), - ret, - !!isStatic, - isPrivate, - isField, - isStatic && isPrivate - ? function(_) { - return checkInRHS(_) === targetClass; - } - : instanceBrand - ); - } - } - }; - - applyMemberDecsOfKind(8, 0); - applyMemberDecsOfKind(0, 0); - applyMemberDecsOfKind(8, 1); - applyMemberDecsOfKind(0, 1); - - pushInitializers(protoInitializers); - pushInitializers(staticInitializers); - - return ret; - } - - function defineMetadata(Class) { - return defineProperty(Class, symbolMetadata, { configurable: true, enumerable: true, value: metadata }); - } - - if (parentClass !== undefined) { - metadata = parentClass[symbolMetadata]; - } - metadata = create(metadata == null ? null : metadata); - - _ = applyMemberDecs(); - - if (!hasClassDecs) { - defineMetadata(targetClass); - } - - return { - e: _, - get c() { - var initializers = []; - return (hasClassDecs && [defineMetadata(targetClass = applyDec(targetClass, [classDecs], classDecsHaveThis, targetClass.name, 5, initializers)), createRunInitializers(initializers, 1)]); - } - }; -} - -export { _apply_decs_2311 as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_like_to_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_array_like_to_array.js deleted file mode 100644 index eb80534..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_like_to_array.js +++ /dev/null @@ -1,8 +0,0 @@ -function _array_like_to_array(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} -export { _array_like_to_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_with_holes.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_array_with_holes.js deleted file mode 100644 index 2532c92..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_with_holes.js +++ /dev/null @@ -1,4 +0,0 @@ -function _array_with_holes(arr) { - if (Array.isArray(arr)) return arr; -} -export { _array_with_holes as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_without_holes.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_array_without_holes.js deleted file mode 100644 index cbdbc32..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_array_without_holes.js +++ /dev/null @@ -1,6 +0,0 @@ -import { _ as _array_like_to_array } from "./_array_like_to_array.js"; - -function _array_without_holes(arr) { - if (Array.isArray(arr)) return _array_like_to_array(arr); -} -export { _array_without_holes as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_assert_this_initialized.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_assert_this_initialized.js deleted file mode 100644 index 0e2830a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_assert_this_initialized.js +++ /dev/null @@ -1,6 +0,0 @@ -function _assert_this_initialized(self) { - if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - - return self; -} -export { _assert_this_initialized as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator.js deleted file mode 100644 index 6e90a55..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator.js +++ /dev/null @@ -1,74 +0,0 @@ -import { _ as _overload_yield } from "./_overload_yield.js"; - -function _async_generator(gen) { - var front, back; - - function send(key, arg) { - return new Promise(function(resolve, reject) { - var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null }; - if (back) back = back.next = request; - else { - front = back = request; - resume(key, arg); - } - }); - } - - function resume(key, arg) { - try { - var result = gen[key](arg); - var value = result.value; - var overloaded = value instanceof _overload_yield; - Promise.resolve(overloaded ? value.v : value).then(function(arg) { - if (overloaded) { - var nextKey = key === "return" ? "return" : "next"; - if (!value.k || arg.done) return resume(nextKey, arg); - else arg = gen[nextKey](arg).value; - } - settle(result.done ? "return" : "normal", arg); - }, function(err) { - resume("throw", err); - }); - } catch (err) { - settle("throw", err); - } - } - - function settle(type, value) { - switch (type) { - case "return": - front.resolve({ value: value, done: true }); - break; - case "throw": - front.reject(value); - break; - default: - front.resolve({ value: value, done: false }); - break; - } - front = front.next; - if (front) resume(front.key, front.arg); - else back = null; - } - - this._invoke = send; - - if (typeof gen.return !== "function") this.return = undefined; -} - -_async_generator.prototype[(typeof Symbol === "function" && Symbol.asyncIterator) || "@@asyncIterator"] = function() { - return this; -}; - -_async_generator.prototype.next = function(arg) { - return this._invoke("next", arg); -}; - -_async_generator.prototype.throw = function(arg) { - return this._invoke("throw", arg); -}; - -_async_generator.prototype.return = function(arg) { - return this._invoke("return", arg); -}; -export { _async_generator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator_delegate.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator_delegate.js deleted file mode 100644 index eb19f88..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_generator_delegate.js +++ /dev/null @@ -1,51 +0,0 @@ -import { _ as _overload_yield } from "./_overload_yield.js"; - -function _async_generator_delegate(inner) { - var iter = {}, waiting = false; - - function pump(key, value) { - waiting = true; - value = new Promise(function(resolve) { - resolve(inner[key](value)); - }); - - return { done: false, value: new _overload_yield(value, /* kind: delegate */ 1) }; - } - - iter[(typeof Symbol !== "undefined" && Symbol.iterator) || "@@iterator"] = function() { - return this; - }; - - iter.next = function(value) { - if (waiting) { - waiting = false; - - return value; - } - - return pump("next", value); - }; - - if (typeof inner.throw === "function") { - iter.throw = function(value) { - if (waiting) { - waiting = false; - throw value; - } - - return pump("throw", value); - }; - } - if (typeof inner.return === "function") { - iter.return = function(value) { - if (waiting) { - waiting = false; - return value; - } - return pump("return", value); - }; - } - - return iter; -} -export { _async_generator_delegate as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_iterator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_async_iterator.js deleted file mode 100644 index b7ffe4c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_iterator.js +++ /dev/null @@ -1,44 +0,0 @@ -function _async_iterator(iterable) { - var method, async, sync, retry = 2; - for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { - if (async && null != (method = iterable[async])) return method.call(iterable); - if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); - async = "@@asyncIterator", sync = "@@iterator"; - } - throw new TypeError("Object is not async iterable"); -} -function AsyncFromSyncIterator(s) { - function AsyncFromSyncIteratorContinuation(r) { - if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); - - var done = r.done; - - return Promise.resolve(r.value).then(function(value) { - return { value: value, done: done }; - }); - } - - return AsyncFromSyncIterator = function(s) { - this.s = s, this.n = s.next; - }, - AsyncFromSyncIterator.prototype = { - s: null, - n: null, - - next: function() { - return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); - }, - return: function(value) { - var ret = this.s.return; - - return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); - }, - throw: function(value) { - var thr = this.s.return; - - return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); - } - }, - new AsyncFromSyncIterator(s); -} -export { _async_iterator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_to_generator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_async_to_generator.js deleted file mode 100644 index 2fcf6ee..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_async_to_generator.js +++ /dev/null @@ -1,31 +0,0 @@ -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - if (info.done) resolve(value); - else Promise.resolve(value).then(_next, _throw); -} -function _async_to_generator(fn) { - return function() { - var self = this, args = arguments; - - return new Promise(function(resolve, reject) { - var gen = fn.apply(self, args); - - function _next(value) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); - } - - function _throw(err) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); - } - - _next(undefined); - }); - }; -} -export { _async_to_generator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_await_async_generator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_await_async_generator.js deleted file mode 100644 index b72716c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_await_async_generator.js +++ /dev/null @@ -1,6 +0,0 @@ -import { _ as _overload_yield } from "./_overload_yield.js"; - -function _await_async_generator(value) { - return new _overload_yield(value, /* kind: await */ 0); -} -export { _await_async_generator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_await_value.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_await_value.js deleted file mode 100644 index 33a0912..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_await_value.js +++ /dev/null @@ -1,4 +0,0 @@ -function _await_value(value) { - this.wrapped = value; -} -export { _await_value as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_call_super.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_call_super.js deleted file mode 100644 index f569d62..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_call_super.js +++ /dev/null @@ -1,17 +0,0 @@ -import { _ as _get_prototype_of } from "./_get_prototype_of.js"; -import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js"; -import { _ as _possible_constructor_return } from "./_possible_constructor_return.js"; - -function _call_super(_this, derived, args) { - // Super - derived = _get_prototype_of(derived); - return _possible_constructor_return( - _this, - _is_native_reflect_construct() - // NOTE: This doesn't work if this.__proto__.constructor has been modified. - ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) - : derived.apply(_this, args) - ); -} - -export { _call_super as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_check_private_redeclaration.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_check_private_redeclaration.js deleted file mode 100644 index 21e96da..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_check_private_redeclaration.js +++ /dev/null @@ -1,6 +0,0 @@ -function _check_private_redeclaration(obj, privateCollection) { - if (privateCollection.has(obj)) { - throw new TypeError("Cannot initialize the same private elements twice on an object"); - } -} -export { _check_private_redeclaration as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js deleted file mode 100644 index 9bf79ee..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js +++ /dev/null @@ -1,23 +0,0 @@ -function _class_apply_descriptor_destructure(receiver, descriptor) { - if (descriptor.set) { - if (!("__destrObj" in descriptor)) { - descriptor.__destrObj = { - set value(v) { - descriptor.set.call(receiver, v); - } - }; - } - - return descriptor.__destrObj; - } else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - - return descriptor; - } -} -export { _class_apply_descriptor_destructure as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js deleted file mode 100644 index 15c6f23..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js +++ /dev/null @@ -1,6 +0,0 @@ -function _class_apply_descriptor_get(receiver, descriptor) { - if (descriptor.get) return descriptor.get.call(receiver); - - return descriptor.value; -} -export { _class_apply_descriptor_get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js deleted file mode 100644 index 75091e1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js +++ /dev/null @@ -1,13 +0,0 @@ -function _class_apply_descriptor_set(receiver, descriptor, value) { - if (descriptor.set) descriptor.set.call(receiver, value); - else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - descriptor.value = value; - } -} -export { _class_apply_descriptor_set as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js deleted file mode 100644 index adf62fb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js +++ /dev/null @@ -1,28 +0,0 @@ -function _class_apply_descriptor_update(receiver, descriptor) { - if (descriptor.set) { - if (!descriptor.get) throw new TypeError("attempted to read set only private field"); - - if (!("__destrWrapper" in descriptor)) { - descriptor.__destrWrapper = { - set value(v) { - descriptor.set.call(receiver, v); - }, - get value() { - return descriptor.get.call(receiver); - } - }; - } - - return descriptor.__destrWrapper; - } else { - if (!descriptor.writable) { - // This should only throw in strict mode, but class bodies are - // always strict and private fields can only be used inside - // class bodies. - throw new TypeError("attempted to set read only private field"); - } - - return descriptor; - } -} -export { _class_apply_descriptor_update as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_call_check.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_call_check.js deleted file mode 100644 index f0caf9e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_call_check.js +++ /dev/null @@ -1,4 +0,0 @@ -function _class_call_check(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); -} -export { _class_call_check as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_access.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_access.js deleted file mode 100644 index 380f1d9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_access.js +++ /dev/null @@ -1,4 +0,0 @@ -function _class_check_private_static_access(receiver, classConstructor) { - if (receiver !== classConstructor) throw new TypeError("Private static access of wrong provenance"); -} -export { _class_check_private_static_access as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js deleted file mode 100644 index a6a0a7f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js +++ /dev/null @@ -1,6 +0,0 @@ -function _class_check_private_static_field_descriptor(descriptor, action) { - if (descriptor === undefined) { - throw new TypeError("attempted to " + action + " private static field before its declaration"); - } -} -export { _class_check_private_static_field_descriptor as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js deleted file mode 100644 index 44ca9e7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js +++ /dev/null @@ -1,6 +0,0 @@ -function _class_extract_field_descriptor(receiver, privateMap, action) { - if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance"); - - return privateMap.get(receiver); -} -export { _class_extract_field_descriptor as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_name_tdz_error.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_name_tdz_error.js deleted file mode 100644 index 7014c58..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_name_tdz_error.js +++ /dev/null @@ -1,4 +0,0 @@ -function _class_name_tdz_error(name) { - throw new ReferenceError("Class \"" + name + "\" cannot be referenced in computed property keys."); -} -export { _class_name_tdz_error as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_destructure.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_destructure.js deleted file mode 100644 index 5c62433..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_destructure.js +++ /dev/null @@ -1,8 +0,0 @@ -import { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js"; -import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js"; - -function _class_private_field_destructure(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set"); - return _class_apply_descriptor_destructure(receiver, descriptor); -} -export { _class_private_field_destructure as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_get.js deleted file mode 100644 index 078d320..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_get.js +++ /dev/null @@ -1,8 +0,0 @@ -import { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js"; -import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js"; - -function _class_private_field_get(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get"); - return _class_apply_descriptor_get(receiver, descriptor); -} -export { _class_private_field_get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_init.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_init.js deleted file mode 100644 index 3daa81a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_init.js +++ /dev/null @@ -1,7 +0,0 @@ -import { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js"; - -function _class_private_field_init(obj, privateMap, value) { - _check_private_redeclaration(obj, privateMap); - privateMap.set(obj, value); -} -export { _class_private_field_init as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js deleted file mode 100644 index 92f4c07..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js +++ /dev/null @@ -1,8 +0,0 @@ -function _class_private_field_loose_base(receiver, privateKey) { - if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { - throw new TypeError("attempted to use private field on non-instance"); - } - - return receiver; -} -export { _class_private_field_loose_base as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js deleted file mode 100644 index 83e89e7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js +++ /dev/null @@ -1,6 +0,0 @@ -var id = 0; - -function _class_private_field_loose_key(name) { - return "__private_" + id++ + "_" + name; -} -export { _class_private_field_loose_key as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_set.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_set.js deleted file mode 100644 index 7640b8e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_set.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js"; -import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js"; - -function _class_private_field_set(receiver, privateMap, value) { - var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set"); - _class_apply_descriptor_set(receiver, descriptor, value); - return value; -} -export { _class_private_field_set as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_update.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_update.js deleted file mode 100644 index d758a17..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_field_update.js +++ /dev/null @@ -1,8 +0,0 @@ -import { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js"; -import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js"; - -function _class_private_field_update(receiver, privateMap) { - var descriptor = _class_extract_field_descriptor(receiver, privateMap, "update"); - return _class_apply_descriptor_update(receiver, descriptor); -} -export { _class_private_field_update as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_get.js deleted file mode 100644 index c9d6946..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_get.js +++ /dev/null @@ -1,6 +0,0 @@ -function _class_private_method_get(receiver, privateSet, fn) { - if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance"); - - return fn; -} -export { _class_private_method_get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_init.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_init.js deleted file mode 100644 index f2f4eda..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_init.js +++ /dev/null @@ -1,7 +0,0 @@ -import { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js"; - -function _class_private_method_init(obj, privateSet) { - _check_private_redeclaration(obj, privateSet); - privateSet.add(obj); -} -export { _class_private_method_init as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_set.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_set.js deleted file mode 100644 index 98e3be1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_private_method_set.js +++ /dev/null @@ -1,4 +0,0 @@ -function _class_private_method_set() { - throw new TypeError("attempted to reassign private method"); -} -export { _class_private_method_set as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js deleted file mode 100644 index 1aea463..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js +++ /dev/null @@ -1,11 +0,0 @@ -import { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js"; -import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; -import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js"; - -function _class_static_private_field_destructure(receiver, classConstructor, descriptor) { - _class_check_private_static_access(receiver, classConstructor); - _class_check_private_static_field_descriptor(descriptor, "set"); - - return _class_apply_descriptor_destructure(receiver, descriptor); -} -export { _class_static_private_field_destructure as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js deleted file mode 100644 index 128476c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js +++ /dev/null @@ -1,11 +0,0 @@ -import { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js"; -import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; -import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js"; - -function _class_static_private_field_spec_get(receiver, classConstructor, descriptor) { - _class_check_private_static_access(receiver, classConstructor); - _class_check_private_static_field_descriptor(descriptor, "get"); - - return _class_apply_descriptor_get(receiver, descriptor); -} -export { _class_static_private_field_spec_get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js deleted file mode 100644 index 0137ff7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js +++ /dev/null @@ -1,12 +0,0 @@ -import { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js"; -import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; -import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js"; - -function _class_static_private_field_spec_set(receiver, classConstructor, descriptor, value) { - _class_check_private_static_access(receiver, classConstructor); - _class_check_private_static_field_descriptor(descriptor, "set"); - _class_apply_descriptor_set(receiver, descriptor, value); - - return value; -} -export { _class_static_private_field_spec_set as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_update.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_update.js deleted file mode 100644 index d53d66a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_field_update.js +++ /dev/null @@ -1,11 +0,0 @@ -import { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js"; -import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; -import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js"; - -function _class_static_private_field_update(receiver, classConstructor, descriptor) { - _class_check_private_static_access(receiver, classConstructor); - _class_check_private_static_field_descriptor(descriptor, "update"); - - return _class_apply_descriptor_update(receiver, descriptor); -} -export { _class_static_private_field_update as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_method_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_method_get.js deleted file mode 100644 index d9309f4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_class_static_private_method_get.js +++ /dev/null @@ -1,8 +0,0 @@ -import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; - -function _class_static_private_method_get(receiver, classConstructor, method) { - _class_check_private_static_access(receiver, classConstructor); - - return method; -} -export { _class_static_private_method_get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_construct.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_construct.js deleted file mode 100644 index affce78..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_construct.js +++ /dev/null @@ -1,20 +0,0 @@ -import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js"; -import { _ as _set_prototype_of } from "./_set_prototype_of.js"; -function _construct(Parent, args, Class) { - if (_is_native_reflect_construct()) _construct = Reflect.construct; - else { - _construct = function construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - - if (Class) _set_prototype_of(instance, Class.prototype); - - return instance; - }; - } - - return _construct.apply(null, arguments); -} -export { _construct as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_class.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_create_class.js deleted file mode 100644 index f251d98..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_class.js +++ /dev/null @@ -1,18 +0,0 @@ -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - - if ("value" in descriptor) descriptor.writable = true; - - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _create_class(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - - return Constructor; -} -export { _create_class as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js deleted file mode 100644 index d848f09..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js +++ /dev/null @@ -1,22 +0,0 @@ -import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; - -function _create_for_of_iterator_helper_loose(o, allowArrayLike) { - var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; - - if (it) return (it = it.call(o)).next.bind(it); - // Fallback for engines without symbol support - if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - - var i = 0; - - return function() { - if (i >= o.length) return { done: true }; - - return { done: false, value: o[i++] }; - }; - } - - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -export { _create_for_of_iterator_helper_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_super.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_create_super.js deleted file mode 100644 index 09b3ec0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_create_super.js +++ /dev/null @@ -1,21 +0,0 @@ -import { _ as _get_prototype_of } from "./_get_prototype_of.js"; -import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js"; -import { _ as _possible_constructor_return } from "./_possible_constructor_return.js"; - -function _create_super(Derived) { - var hasNativeReflectConstruct = _is_native_reflect_construct(); - - return function _createSuperInternal() { - var Super = _get_prototype_of(Derived), result; - - if (hasNativeReflectConstruct) { - var NewTarget = _get_prototype_of(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possible_constructor_return(this, result); - }; -} -export { _create_super as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_decorate.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_decorate.js deleted file mode 100644 index 7131a6d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_decorate.js +++ /dev/null @@ -1,268 +0,0 @@ -import { _ as _to_array } from "./_to_array.js"; -import { _ as _to_property_key } from "./_to_property_key.js"; -import { _ as _type_of } from "./_type_of.js"; - -function _decorate(decorators, factory, superClass) { - var r = factory(function initialize(O) { - _initializeInstanceElements(O, decorated.elements); - }, superClass); - var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators); - _initializeClassElements(r.F, decorated.elements); - - return _runClassFinishers(r.F, decorated.finishers); -} - -function _createElementDescriptor(def) { - var key = _to_property_key(def.key); - var descriptor; - - if (def.kind === "method") { - descriptor = { value: def.value, writable: true, configurable: true, enumerable: false }; - Object.defineProperty(def.value, "name", { value: _type_of(key) === "symbol" ? "" : key, configurable: true }); - } else if (def.kind === "get") descriptor = { get: def.value, configurable: true, enumerable: false }; - else if (def.kind === "set") descriptor = { set: def.value, configurable: true, enumerable: false }; - else if (def.kind === "field") descriptor = { configurable: true, writable: true, enumerable: true }; - - var element = { kind: def.kind === "field" ? "field" : "method", key: key, placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype", descriptor: descriptor }; - - if (def.decorators) element.decorators = def.decorators; - - if (def.kind === "field") element.initializer = def.value; - - return element; -} -function _coalesceGetterSetter(element, other) { - if (element.descriptor.get !== undefined) other.descriptor.get = element.descriptor.get; - else other.descriptor.set = element.descriptor.set; -} -function _coalesceClassElements(elements) { - var newElements = []; - var isSameElement = function isSameElement(other) { - return other.kind === "method" && other.key === element.key && other.placement === element.placement; - }; - - for (var i = 0; i < elements.length; i++) { - var element = elements[i]; - var other; - - if (element.kind === "method" && (other = newElements.find(isSameElement))) { - if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) { - if (_hasDecorators(element) || _hasDecorators(other)) { - throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated."); - } - other.descriptor = element.descriptor; - } else { - if (_hasDecorators(element)) { - if (_hasDecorators(other)) { - throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ")."); - } - other.decorators = element.decorators; - } - _coalesceGetterSetter(element, other); - } - } else { - newElements.push(element); - } - } - - return newElements; -} -function _hasDecorators(element) { - return element.decorators && element.decorators.length; -} -function _isDataDescriptor(desc) { - return desc !== undefined && !(desc.value === undefined && desc.writable === undefined); -} -function _initializeClassElements(F, elements) { - var proto = F.prototype; - ["method", "field"].forEach(function(kind) { - elements.forEach(function(element) { - var placement = element.placement; - if (element.kind === kind && (placement === "static" || placement === "prototype")) { - var receiver = placement === "static" ? F : proto; - _defineClassElement(receiver, element); - } - }); - }); -} -function _initializeInstanceElements(O, elements) { - ["method", "field"].forEach(function(kind) { - elements.forEach(function(element) { - if (element.kind === kind && element.placement === "own") _defineClassElement(O, element); - }); - }); -} -function _defineClassElement(receiver, element) { - var descriptor = element.descriptor; - if (element.kind === "field") { - var initializer = element.initializer; - descriptor = { enumerable: descriptor.enumerable, writable: descriptor.writable, configurable: descriptor.configurable, value: initializer === void 0 ? void 0 : initializer.call(receiver) }; - } - Object.defineProperty(receiver, element.key, descriptor); -} -function _decorateClass(elements, decorators) { - var newElements = []; - var finishers = []; - var placements = { static: [], prototype: [], own: [] }; - elements.forEach(function(element) { - _addElementPlacement(element, placements); - }); - elements.forEach(function(element) { - if (!_hasDecorators(element)) return newElements.push(element); - var elementFinishersExtras = _decorateElement(element, placements); - newElements.push(elementFinishersExtras.element); - newElements.push.apply(newElements, elementFinishersExtras.extras); - finishers.push.apply(finishers, elementFinishersExtras.finishers); - }); - if (!decorators) return { elements: newElements, finishers: finishers }; - var result = _decorateConstructor(newElements, decorators); - finishers.push.apply(finishers, result.finishers); - result.finishers = finishers; - - return result; -} -function _addElementPlacement(element, placements, silent) { - var keys = placements[element.placement]; - if (!silent && keys.indexOf(element.key) !== -1) throw new TypeError("Duplicated element (" + element.key + ")"); - keys.push(element.key); -} -function _decorateElement(element, placements) { - var extras = []; - var finishers = []; - for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) { - var keys = placements[element.placement]; - keys.splice(keys.indexOf(element.key), 1); - var elementObject = _fromElementDescriptor(element); - var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject); - element = elementFinisherExtras.element; - _addElementPlacement(element, placements); - if (elementFinisherExtras.finisher) finishers.push(elementFinisherExtras.finisher); - var newExtras = elementFinisherExtras.extras; - if (newExtras) { - for (var j = 0; j < newExtras.length; j++) _addElementPlacement(newExtras[j], placements); - extras.push.apply(extras, newExtras); - } - } - - return { element: element, finishers: finishers, extras: extras }; -} -function _decorateConstructor(elements, decorators) { - var finishers = []; - for (var i = decorators.length - 1; i >= 0; i--) { - var obj = _fromClassDescriptor(elements); - var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj); - if (elementsAndFinisher.finisher !== undefined) finishers.push(elementsAndFinisher.finisher); - if (elementsAndFinisher.elements !== undefined) { - elements = elementsAndFinisher.elements; - for (var j = 0; j < elements.length - 1; j++) { - for (var k = j + 1; k < elements.length; k++) { - if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) { - throw new TypeError("Duplicated element (" + elements[j].key + ")"); - } - } - } - } - } - - return { elements: elements, finishers: finishers }; -} -function _fromElementDescriptor(element) { - var obj = { kind: element.kind, key: element.key, placement: element.placement, descriptor: element.descriptor }; - var desc = { value: "Descriptor", configurable: true }; - Object.defineProperty(obj, Symbol.toStringTag, desc); - if (element.kind === "field") obj.initializer = element.initializer; - - return obj; -} -function _toElementDescriptors(elementObjects) { - if (elementObjects === undefined) return; - - return _to_array(elementObjects).map(function(elementObject) { - var element = _toElementDescriptor(elementObject); - _disallowProperty(elementObject, "finisher", "An element descriptor"); - _disallowProperty(elementObject, "extras", "An element descriptor"); - - return element; - }); -} -function _toElementDescriptor(elementObject) { - var kind = String(elementObject.kind); - if (kind !== "method" && kind !== "field") { - throw new TypeError("An element descriptor's .kind property must be either \"method\" or" + " \"field\", but a decorator created an element descriptor with" + " .kind \"" + kind + "\""); - } - var key = _to_property_key(elementObject.key); - var placement = String(elementObject.placement); - if (placement !== "static" && placement !== "prototype" && placement !== "own") { - throw new TypeError( - "An element descriptor's .placement property must be one of \"static\"," - + " \"prototype\" or \"own\", but a decorator created an element descriptor" - + " with .placement \"" - + placement - + "\"" - ); - } - var descriptor = elementObject.descriptor; - _disallowProperty(elementObject, "elements", "An element descriptor"); - var element = { kind: kind, key: key, placement: placement, descriptor: Object.assign({}, descriptor) }; - if (kind !== "field") _disallowProperty(elementObject, "initializer", "A method descriptor"); - else { - _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor"); - _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor"); - _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor"); - element.initializer = elementObject.initializer; - } - - return element; -} -function _toElementFinisherExtras(elementObject) { - var element = _toElementDescriptor(elementObject); - var finisher = _optionalCallableProperty(elementObject, "finisher"); - var extras = _toElementDescriptors(elementObject.extras); - - return { element: element, finisher: finisher, extras: extras }; -} -function _fromClassDescriptor(elements) { - var obj = { kind: "class", elements: elements.map(_fromElementDescriptor) }; - var desc = { value: "Descriptor", configurable: true }; - Object.defineProperty(obj, Symbol.toStringTag, desc); - - return obj; -} -function _toClassDescriptor(obj) { - var kind = String(obj.kind); - if (kind !== "class") { - throw new TypeError("A class descriptor's .kind property must be \"class\", but a decorator" + " created a class descriptor with .kind \"" + kind + "\""); - } - _disallowProperty(obj, "key", "A class descriptor"); - _disallowProperty(obj, "placement", "A class descriptor"); - _disallowProperty(obj, "descriptor", "A class descriptor"); - _disallowProperty(obj, "initializer", "A class descriptor"); - _disallowProperty(obj, "extras", "A class descriptor"); - var finisher = _optionalCallableProperty(obj, "finisher"); - var elements = _toElementDescriptors(obj.elements); - - return { elements: elements, finisher: finisher }; -} -function _disallowProperty(obj, name, objectType) { - if (obj[name] !== undefined) throw new TypeError(objectType + " can't have a ." + name + " property."); -} -function _optionalCallableProperty(obj, name) { - var value = obj[name]; - if (value !== undefined && typeof value !== "function") { - throw new TypeError("Expected '" + name + "' to be a function"); - } - - return value; -} -function _runClassFinishers(constructor, finishers) { - for (var i = 0; i < finishers.length; i++) { - var newConstructor = (0, finishers[i])(constructor); - if (newConstructor !== undefined) { - if (typeof newConstructor !== "function") throw new TypeError("Finishers must return a constructor."); - constructor = newConstructor; - } - } - - return constructor; -} -export { _decorate as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_defaults.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_defaults.js deleted file mode 100644 index de0bc0c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_defaults.js +++ /dev/null @@ -1,13 +0,0 @@ -function _defaults(obj, defaults) { - var keys = Object.getOwnPropertyNames(defaults); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = Object.getOwnPropertyDescriptor(defaults, key); - - if (value && value.configurable && obj[key] === undefined) Object.defineProperty(obj, key, value); - } - - return obj; -} -export { _defaults as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_define_enumerable_properties.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_define_enumerable_properties.js deleted file mode 100644 index 7e184ef..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_define_enumerable_properties.js +++ /dev/null @@ -1,24 +0,0 @@ -function _define_enumerable_properties(obj, descs) { - for (var key in descs) { - var desc = descs[key]; - desc.configurable = desc.enumerable = true; - - if ("value" in desc) desc.writable = true; - - Object.defineProperty(obj, key, desc); - } - - if (Object.getOwnPropertySymbols) { - var objectSymbols = Object.getOwnPropertySymbols(descs); - for (var i = 0; i < objectSymbols.length; i++) { - var sym = objectSymbols[i]; - var desc = descs[sym]; - desc.configurable = desc.enumerable = true; - if ("value" in desc) desc.writable = true; - Object.defineProperty(obj, sym, desc); - } - } - - return obj; -} -export { _define_enumerable_properties as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_define_property.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_define_property.js deleted file mode 100644 index fe259f2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_define_property.js +++ /dev/null @@ -1,8 +0,0 @@ -function _define_property(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); - } else obj[key] = value; - - return obj; -} -export { _define_property as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_dispose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_dispose.js deleted file mode 100644 index 97b8162..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_dispose.js +++ /dev/null @@ -1,41 +0,0 @@ -/* @minVersion 7.22.0 */ -function dispose_SuppressedError(error, suppressed) { - if (typeof SuppressedError !== "undefined") { - // eslint-disable-next-line no-undef - dispose_SuppressedError = SuppressedError; - } else { - dispose_SuppressedError = function SuppressedError(error, suppressed) { - this.suppressed = suppressed; - this.error = error; - this.stack = new Error().stack; - }; - dispose_SuppressedError.prototype = Object.create(Error.prototype, { constructor: { value: dispose_SuppressedError, writable: true, configurable: true } }); - } - return new dispose_SuppressedError(error, suppressed); -} - -function _dispose(stack, error, hasError) { - function next() { - while (stack.length > 0) { - try { - var r = stack.pop(); - var p = r.d.call(r.v); - if (r.a) return Promise.resolve(p).then(next, err); - } catch (e) { - return err(e); - } - } - if (hasError) throw error; - } - - function err(e) { - error = hasError ? new dispose_SuppressedError(e, error) : e; - hasError = true; - - return next(); - } - - return next(); -} - -export { _dispose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_export_star.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_export_star.js deleted file mode 100644 index 98789f7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_export_star.js +++ /dev/null @@ -1,15 +0,0 @@ -function _export_star(from, to) { - Object.keys(from).forEach(function(k) { - if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { - Object.defineProperty(to, k, { - enumerable: true, - get: function() { - return from[k]; - } - }); - } - }); - - return from; -} -export { _export_star as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_extends.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_extends.js deleted file mode 100644 index 7baa58e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_extends.js +++ /dev/null @@ -1,13 +0,0 @@ -function _extends() { - _extends = Object.assign || function assign(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key]; - } - - return target; - }; - - return _extends.apply(this, arguments); -} -export { _extends as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_get.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_get.js deleted file mode 100644 index 0d5fd28..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_get.js +++ /dev/null @@ -1,21 +0,0 @@ -import { _ as _super_prop_base } from "./_super_prop_base.js"; - -function _get(target, property, receiver) { - if (typeof Reflect !== "undefined" && Reflect.get) _get = Reflect.get; - else { - _get = function get(target, property, receiver) { - var base = _super_prop_base(target, property); - - if (!base) return; - - var desc = Object.getOwnPropertyDescriptor(base, property); - - if (desc.get) return desc.get.call(receiver || target); - - return desc.value; - }; - } - - return _get(target, property, receiver || target); -} -export { _get as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_get_prototype_of.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_get_prototype_of.js deleted file mode 100644 index 951dd01..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_get_prototype_of.js +++ /dev/null @@ -1,8 +0,0 @@ -function _get_prototype_of(o) { - _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - - return _get_prototype_of(o); -} -export { _get_prototype_of as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_identity.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_identity.js deleted file mode 100644 index 9af2010..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_identity.js +++ /dev/null @@ -1,5 +0,0 @@ -function _identity(x) { - return x; -} - -export { _identity as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits.js deleted file mode 100644 index 563d0d2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits.js +++ /dev/null @@ -1,12 +0,0 @@ -import { _ as _set_prototype_of } from "./_set_prototype_of.js"; - -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); - - if (superClass) _set_prototype_of(subClass, superClass); -} -export { _inherits as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits_loose.js deleted file mode 100644 index d222f69..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_inherits_loose.js +++ /dev/null @@ -1,6 +0,0 @@ -function _inherits_loose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} -export { _inherits_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_define_property.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_define_property.js deleted file mode 100644 index 3969460..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_define_property.js +++ /dev/null @@ -1,11 +0,0 @@ -function _initializer_define_property(target, property, descriptor, context) { - if (!descriptor) return; - - Object.defineProperty(target, property, { - enumerable: descriptor.enumerable, - configurable: descriptor.configurable, - writable: descriptor.writable, - value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 - }); -} -export { _initializer_define_property as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_warning_helper.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_warning_helper.js deleted file mode 100644 index 2590876..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_initializer_warning_helper.js +++ /dev/null @@ -1,9 +0,0 @@ -function _initializer_warning_helper(descriptor, context) { - throw new Error( - "Decorating class property failed. Please ensure that " - + "proposal-class-properties is enabled and set to use loose mode. " - + "To use proposal-class-properties in spec mode with decorators, wait for " - + "the next major version of decorators in stage 2." - ); -} -export { _initializer_warning_helper as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_instanceof.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_instanceof.js deleted file mode 100644 index 153d076..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_instanceof.js +++ /dev/null @@ -1,8 +0,0 @@ -function _instanceof(left, right) { - "@swc/helpers - instanceof"; - - if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { - return !!right[Symbol.hasInstance](left); - } else return left instanceof right; -} -export { _instanceof as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_default.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_default.js deleted file mode 100644 index 1245892..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_default.js +++ /dev/null @@ -1,4 +0,0 @@ -function _interop_require_default(obj) { - return obj && obj.__esModule ? obj : { default: obj }; -} -export { _interop_require_default as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_wildcard.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_wildcard.js deleted file mode 100644 index fd78233..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_interop_require_wildcard.js +++ /dev/null @@ -1,36 +0,0 @@ -function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") return null; - - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - - return (_getRequireWildcardCache = function(nodeInterop) { - return nodeInterop ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); -} -function _interop_require_wildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) return obj; - if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj }; - - var cache = _getRequireWildcardCache(nodeInterop); - - if (cache && cache.has(obj)) return cache.get(obj); - - var newObj = { __proto__: null }; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc); - else newObj[key] = obj[key]; - } - } - - newObj.default = obj; - - if (cache) cache.set(obj, newObj); - - return newObj; -} -export { _interop_require_wildcard as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_function.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_function.js deleted file mode 100644 index c7cf198..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_function.js +++ /dev/null @@ -1,4 +0,0 @@ -function _is_native_function(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; -} -export { _is_native_function as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js deleted file mode 100644 index af04603..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js +++ /dev/null @@ -1,16 +0,0 @@ -function _is_native_reflect_construct() { - // Since Reflect.construct can't be properly polyfilled, some - // implementations (e.g. core-js@2) don't set the correct internal slots. - // Those polyfills don't allow us to subclass built-ins, so we need to - // use our fallback implementation. - try { - // If the internal slots aren't set, this throws an error similar to - // TypeError: this is not a Boolean object. - var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})); - } catch (_) {} - return (_is_native_reflect_construct = function() { - return !!result; - })(); -} - -export { _is_native_reflect_construct as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array.js deleted file mode 100644 index e44dfb0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array.js +++ /dev/null @@ -1,6 +0,0 @@ -function _iterable_to_array(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) { - return Array.from(iter); - } -} -export { _iterable_to_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js deleted file mode 100644 index 1ce2bc9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js +++ /dev/null @@ -1,29 +0,0 @@ -function _iterable_to_array_limit(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - - if (_i == null) return; - - var _arr = []; - var _n = true; - var _d = false; - var _s, _e; - - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; -} -export { _iterable_to_array_limit as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js deleted file mode 100644 index 2369e8b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js +++ /dev/null @@ -1,15 +0,0 @@ -function _iterable_to_array_limit_loose(arr, i) { - var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); - - if (_i == null) return; - - var _arr = []; - - for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) { - _arr.push(_step.value); - if (i && _arr.length === i) break; - } - - return _arr; -} -export { _iterable_to_array_limit_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_jsx.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_jsx.js deleted file mode 100644 index 0695535..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_jsx.js +++ /dev/null @@ -1,26 +0,0 @@ -var REACT_ELEMENT_TYPE; -function _jsx(type, props, key, children) { - if (!REACT_ELEMENT_TYPE) { - REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; - } - - var defaultProps = type && type.defaultProps; - var childrenLength = arguments.length - 3; - - if (!props && childrenLength !== 0) props = { children: void 0 }; - if (props && defaultProps) { - for (var propName in defaultProps) { - if (props[propName] === void 0) props[propName] = defaultProps[propName]; - else if (!props) props = defaultProps || {}; - } - } - if (childrenLength === 1) props.children = children; - else if (childrenLength > 1) { - var childArray = new Array(childrenLength); - for (var i = 0; i < childrenLength; i++) childArray[i] = arguments[i + 3]; - props.children = childArray; - } - - return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : "" + key, ref: null, props: props, _owner: null }; -} -export { _jsx as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_new_arrow_check.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_new_arrow_check.js deleted file mode 100644 index 0651b3c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_new_arrow_check.js +++ /dev/null @@ -1,4 +0,0 @@ -function _new_arrow_check(innerThis, boundThis) { - if (innerThis !== boundThis) throw new TypeError("Cannot instantiate an arrow function"); -} -export { _new_arrow_check as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_rest.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_rest.js deleted file mode 100644 index b41d9c2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_rest.js +++ /dev/null @@ -1,4 +0,0 @@ -function _non_iterable_rest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -export { _non_iterable_rest as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_spread.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_spread.js deleted file mode 100644 index fd7b50e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_non_iterable_spread.js +++ /dev/null @@ -1,4 +0,0 @@ -function _non_iterable_spread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -export { _non_iterable_spread as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_destructuring_empty.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_object_destructuring_empty.js deleted file mode 100644 index 97a6dd7..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_destructuring_empty.js +++ /dev/null @@ -1,6 +0,0 @@ -function _object_destructuring_empty(o) { - if (o === null || o === void 0) throw new TypeError("Cannot destructure " + o); - - return o; -} -export { _object_destructuring_empty as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread.js deleted file mode 100644 index a71c747..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread.js +++ /dev/null @@ -1,23 +0,0 @@ -import { _ as _define_property } from "./_define_property.js"; - -function _object_spread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === "function") { - ownKeys = ownKeys.concat( - Object.getOwnPropertySymbols(source).filter(function(sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - }) - ); - } - - ownKeys.forEach(function(key) { - _define_property(target, key, source[key]); - }); - } - - return target; -} -export { _object_spread as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread_props.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread_props.js deleted file mode 100644 index 88593ee..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_spread_props.js +++ /dev/null @@ -1,28 +0,0 @@ -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) { - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - keys.push.apply(keys, symbols); - } - - return keys; -} -function _object_spread_props(target, source) { - source = source != null ? source : {}; - - if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - else { - ownKeys(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - - return target; -} -export { _object_spread_props as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties.js deleted file mode 100644 index 0f22b51..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties.js +++ /dev/null @@ -1,33 +0,0 @@ -import { _ as _object_without_properties_loose } from "./_object_without_properties_loose.js"; - -function _object_without_properties(source, excluded) { - if (source == null) return {}; - - var target = {}, sourceKeys, key, i; - if (typeof Reflect !== "undefined" && Reflect.ownKeys) { - sourceKeys = Reflect.ownKeys(Object(source)); - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - - return target; - } - - target = _object_without_properties_loose(source, excluded); - if (Object.getOwnPropertySymbols) { - sourceKeys = Object.getOwnPropertySymbols(source); - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -export { _object_without_properties as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties_loose.js deleted file mode 100644 index 1cf6071..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_object_without_properties_loose.js +++ /dev/null @@ -1,14 +0,0 @@ -function _object_without_properties_loose(source, excluded) { - if (source == null) return {}; - - var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i; - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - - return target; -} -export { _object_without_properties_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_overload_yield.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_overload_yield.js deleted file mode 100644 index 17260d1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_overload_yield.js +++ /dev/null @@ -1,6 +0,0 @@ -function _overload_yield(value, /** 0: await 1: delegate */ kind) { - this.v = value; - this.k = kind; -} - -export { _overload_yield as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_possible_constructor_return.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_possible_constructor_return.js deleted file mode 100644 index b07f390..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_possible_constructor_return.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _assert_this_initialized } from "./_assert_this_initialized.js"; -import { _ as _type_of } from "./_type_of.js"; - -function _possible_constructor_return(self, call) { - if (call && (_type_of(call) === "object" || typeof call === "function")) return call; - - return _assert_this_initialized(self); -} -export { _possible_constructor_return as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_read_only_error.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_read_only_error.js deleted file mode 100644 index 4b63ee3..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_read_only_error.js +++ /dev/null @@ -1,4 +0,0 @@ -function _read_only_error(name) { - throw new TypeError("\"" + name + "\" is read-only"); -} -export { _read_only_error as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_set.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_set.js deleted file mode 100644 index 15dc2f1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_set.js +++ /dev/null @@ -1,42 +0,0 @@ -import { _ as _define_property } from "./_define_property.js"; -import { _ as _super_prop_base } from "./_super_prop_base.js"; - -function set(target, property, value, receiver) { - if (typeof Reflect !== "undefined" && Reflect.set) set = Reflect.set; - else { - set = function set(target, property, value, receiver) { - var base = _super_prop_base(target, property); - var desc; - if (base) { - desc = Object.getOwnPropertyDescriptor(base, property); - if (desc.set) { - desc.set.call(receiver, value); - - return true; - } else if (!desc.writable) { - return false; - } - } - desc = Object.getOwnPropertyDescriptor(receiver, property); - if (desc) { - if (!desc.writable) return false; - desc.value = value; - Object.defineProperty(receiver, property, desc); - } else { - _define_property(receiver, property, value); - } - - return true; - }; - } - - return set(target, property, value, receiver); -} - -function _set(target, property, value, receiver, isStrict) { - var s = set(target, property, value, receiver || target); - if (!s && isStrict) throw new Error("failed to set property"); - - return value; -} -export { _set as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_set_prototype_of.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_set_prototype_of.js deleted file mode 100644 index 6a1f4df..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_set_prototype_of.js +++ /dev/null @@ -1,10 +0,0 @@ -function _set_prototype_of(o, p) { - _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) { - o.__proto__ = p; - - return o; - }; - - return _set_prototype_of(o, p); -} -export { _set_prototype_of as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_skip_first_generator_next.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_skip_first_generator_next.js deleted file mode 100644 index 1ccf489..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_skip_first_generator_next.js +++ /dev/null @@ -1,9 +0,0 @@ -function _skip_first_generator_next(fn) { - return function() { - var it = fn.apply(this, arguments); - it.next(); - - return it; - }; -} -export { _skip_first_generator_next as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array.js deleted file mode 100644 index 750c301..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _array_with_holes } from "./_array_with_holes.js"; -import { _ as _iterable_to_array_limit } from "./_iterable_to_array_limit.js"; -import { _ as _non_iterable_rest } from "./_non_iterable_rest.js"; -import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; - -function _sliced_to_array(arr, i) { - return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); -} -export { _sliced_to_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js deleted file mode 100644 index 859de45..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _array_with_holes } from "./_array_with_holes.js"; -import { _ as _iterable_to_array_limit_loose } from "./_iterable_to_array_limit_loose.js"; -import { _ as _non_iterable_rest } from "./_non_iterable_rest.js"; -import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; - -function _sliced_to_array_loose(arr, i) { - return _array_with_holes(arr) || _iterable_to_array_limit_loose(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); -} -export { _sliced_to_array_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_super_prop_base.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_super_prop_base.js deleted file mode 100644 index 47dec41..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_super_prop_base.js +++ /dev/null @@ -1,11 +0,0 @@ -import { _ as _get_prototype_of } from "./_get_prototype_of.js"; - -function _super_prop_base(object, property) { - while (!Object.prototype.hasOwnProperty.call(object, property)) { - object = _get_prototype_of(object); - if (object === null) break; - } - - return object; -} -export { _super_prop_base as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal.js deleted file mode 100644 index 429cc77..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal.js +++ /dev/null @@ -1,6 +0,0 @@ -function _tagged_template_literal(strings, raw) { - if (!raw) raw = strings.slice(0); - - return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); -} -export { _tagged_template_literal as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js deleted file mode 100644 index 1fbb61e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js +++ /dev/null @@ -1,8 +0,0 @@ -function _tagged_template_literal_loose(strings, raw) { - if (!raw) raw = strings.slice(0); - - strings.raw = raw; - - return strings; -} -export { _tagged_template_literal_loose as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_throw.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_throw.js deleted file mode 100644 index 5de41f1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_throw.js +++ /dev/null @@ -1,4 +0,0 @@ -function _throw(e) { - throw e; -} -export { _throw as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_to_array.js deleted file mode 100644 index 7451fb2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_array.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _array_with_holes } from "./_array_with_holes.js"; -import { _ as _iterable_to_array } from "./_iterable_to_array.js"; -import { _ as _non_iterable_rest } from "./_non_iterable_rest.js"; -import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; - -function _to_array(arr) { - return _array_with_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_rest(); -} -export { _to_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_consumable_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_to_consumable_array.js deleted file mode 100644 index 048ad6e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_consumable_array.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _array_without_holes } from "./_array_without_holes.js"; -import { _ as _iterable_to_array } from "./_iterable_to_array.js"; -import { _ as _non_iterable_spread } from "./_non_iterable_spread.js"; -import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; - -function _to_consumable_array(arr) { - return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); -} -export { _to_consumable_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_primitive.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_to_primitive.js deleted file mode 100644 index 7c8e425..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_primitive.js +++ /dev/null @@ -1,16 +0,0 @@ -import { _ as _type_of } from "./_type_of.js"; - -function _to_primitive(input, hint) { - if (_type_of(input) !== "object" || input === null) return input; - - var prim = input[Symbol.toPrimitive]; - - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (_type_of(res) !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); -} -export { _to_primitive as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_property_key.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_to_property_key.js deleted file mode 100644 index b6f8d38..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_to_property_key.js +++ /dev/null @@ -1,9 +0,0 @@ -import { _ as _to_primitive } from "./_to_primitive.js"; -import { _ as _type_of } from "./_type_of.js"; - -function _to_property_key(arg) { - var key = _to_primitive(arg, "string"); - - return _type_of(key) === "symbol" ? key : String(key); -} -export { _to_property_key as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js deleted file mode 100644 index 62fd1cb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js +++ /dev/null @@ -1 +0,0 @@ -export { __addDisposableResource as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_decorate.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_decorate.js deleted file mode 100644 index 8e0e46e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_decorate.js +++ /dev/null @@ -1 +0,0 @@ -export { __decorate as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_dispose_resources.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_dispose_resources.js deleted file mode 100644 index 5d06d4a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_dispose_resources.js +++ /dev/null @@ -1 +0,0 @@ -export { __disposeResources as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_generator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_generator.js deleted file mode 100644 index 6b77412..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_generator.js +++ /dev/null @@ -1,29 +0,0 @@ -function _ts_generator(thisArg, body) { - var f, y, t, _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty; - return d(g, "next", { value: verb(0) }), d(g, "throw", { value: verb(1) }), d(g, "return", { value: verb(2) }), typeof Symbol === "function" && d(g, Symbol.iterator, { value: function () { return this; } }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -export { _ts_generator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_metadata.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_metadata.js deleted file mode 100644 index 0aa522e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_metadata.js +++ /dev/null @@ -1 +0,0 @@ -export { __metadata as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_param.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_param.js deleted file mode 100644 index f332a40..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_param.js +++ /dev/null @@ -1 +0,0 @@ -export { __param as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_rewrite_relative_import_extension.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_rewrite_relative_import_extension.js deleted file mode 100644 index 0c7c5b8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_rewrite_relative_import_extension.js +++ /dev/null @@ -1 +0,0 @@ -export { __rewriteRelativeImportExtension as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_values.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_values.js deleted file mode 100644 index 298fd4b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_ts_values.js +++ /dev/null @@ -1 +0,0 @@ -export { __values as _ } from "tslib"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_type_of.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_type_of.js deleted file mode 100644 index dc7b859..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_type_of.js +++ /dev/null @@ -1,6 +0,0 @@ -function _type_of(obj) { - "@swc/helpers - typeof"; - - return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; -} -export { _type_of as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js deleted file mode 100644 index 47ce858..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js +++ /dev/null @@ -1,13 +0,0 @@ -import { _ as _array_like_to_array } from "./_array_like_to_array.js"; - -function _unsupported_iterable_to_array(o, minLen) { - if (!o) return; - if (typeof o === "string") return _array_like_to_array(o, minLen); - - var n = Object.prototype.toString.call(o).slice(8, -1); - - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(n); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); -} -export { _unsupported_iterable_to_array as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_update.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_update.js deleted file mode 100644 index 86a7d68..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_update.js +++ /dev/null @@ -1,14 +0,0 @@ -import { _ as _get } from "./_get.js"; -import { _ as _set } from "./_set.js"; - -function _update(target, property, receiver, isStrict) { - return { - get _() { - return _get(target, property, receiver); - }, - set _(value) { - _set(target, property, value, receiver, isStrict); - } - }; -} -export { _update as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_using.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_using.js deleted file mode 100644 index b46fe69..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_using.js +++ /dev/null @@ -1,22 +0,0 @@ -/* @minVersion 7.22.0 */ - -function _using(stack, value, isAwait) { - if (value === null || value === void 0) return value; - if (Object(value) !== value) { - throw new TypeError("using declarations can only be used with objects, functions, null, or undefined."); - } - // core-js-pure uses Symbol.for for polyfilling well-known symbols - if (isAwait) { - var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]; - } - if (dispose === null || dispose === void 0) { - dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")]; - } - if (typeof dispose !== "function") { - throw new TypeError(`Property [Symbol.dispose] is not a function.`); - } - stack.push({ v: value, d: dispose, a: isAwait }); - return value; -} - -export { _using as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_using_ctx.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_using_ctx.js deleted file mode 100644 index 23c0d76..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_using_ctx.js +++ /dev/null @@ -1,73 +0,0 @@ -function _using_ctx() { - var _disposeSuppressedError = typeof SuppressedError === "function" - // eslint-disable-next-line no-undef - ? SuppressedError - : (function(error, suppressed) { - var err = new Error(); - err.name = "SuppressedError"; - err.suppressed = suppressed; - err.error = error; - return err; - }), - empty = {}, - stack = []; - function using(isAwait, value) { - if (value != null) { - if (Object(value) !== value) { - throw new TypeError("using declarations can only be used with objects, functions, null, or undefined."); - } - // core-js-pure uses Symbol.for for polyfilling well-known symbols - if (isAwait) { - var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]; - } - if (dispose == null) { - dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")]; - } - if (typeof dispose !== "function") { - throw new TypeError(`Property [Symbol.dispose] is not a function.`); - } - stack.push({ v: value, d: dispose, a: isAwait }); - } else if (isAwait) { - // provide the nullish `value` as `d` for minification gain - stack.push({ d: value, a: isAwait }); - } - return value; - } - return { - // error - e: empty, - // using - u: using.bind(null, false), - // await using - a: using.bind(null, true), - // dispose - d: function() { - var error = this.e; - - function next() { - // eslint-disable-next-line @typescript-eslint/no-use-before-define - while ((resource = stack.pop())) { - try { - var resource, disposalResult = resource.d && resource.d.call(resource.v); - if (resource.a) { - return Promise.resolve(disposalResult).then(next, err); - } - } catch (e) { - return err(e); - } - } - if (error !== empty) throw error; - } - - function err(e) { - error = error !== empty ? new _disposeSuppressedError(e, error) : e; - - return next(); - } - - return next(); - } - }; -} - -export { _using_ctx as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_async_generator.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_async_generator.js deleted file mode 100644 index b955740..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_async_generator.js +++ /dev/null @@ -1,8 +0,0 @@ -import { _ as _async_generator } from "./_async_generator.js"; - -function _wrap_async_generator(fn) { - return function() { - return new _async_generator(fn.apply(this, arguments)); - }; -} -export { _wrap_async_generator as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_native_super.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_native_super.js deleted file mode 100644 index e942eb5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_native_super.js +++ /dev/null @@ -1,26 +0,0 @@ -import { _ as _construct } from "./_construct.js"; -import { _ as _get_prototype_of } from "./_get_prototype_of.js"; -import { _ as _is_native_function } from "./_is_native_function.js"; -import { _ as _set_prototype_of } from "./_set_prototype_of.js"; - -function _wrap_native_super(Class) { - var _cache = typeof Map === "function" ? new Map() : undefined; - _wrap_native_super = function(Class) { - if (Class === null || !_is_native_function(Class)) return Class; - if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function"); - if (typeof _cache !== "undefined") { - if (_cache.has(Class)) return _cache.get(Class); - _cache.set(Class, Wrapper); - } - - function Wrapper() { - return _construct(Class, arguments, _get_prototype_of(this).constructor); - } - Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); - - return _set_prototype_of(Wrapper, Class); - }; - - return _wrap_native_super(Class); -} -export { _wrap_native_super as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_reg_exp.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_reg_exp.js deleted file mode 100644 index 785831f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_wrap_reg_exp.js +++ /dev/null @@ -1,66 +0,0 @@ -import { _ as _inherits } from "./_inherits.js"; -import { _ as _set_prototype_of } from "./_set_prototype_of.js"; - -function _wrap_reg_exp(re, groups) { - _wrap_reg_exp = function(re, groups) { - return new WrappedRegExp(re, undefined, groups); - }; - var _super = RegExp.prototype; - var _groups = new WeakMap(); - function WrappedRegExp(re, flags, groups) { - var _re = new RegExp(re, flags); - _groups.set(_re, groups || _groups.get(re)); - return _set_prototype_of(_re, WrappedRegExp.prototype); - } - _inherits(WrappedRegExp, RegExp); - WrappedRegExp.prototype.exec = function(str) { - var result = _super.exec.call(this, str); - if (result) { - result.groups = buildGroups(result, this); - var indices = result.indices; - if (indices) indices.groups = buildGroups(indices, this); - } - return result; - }; - WrappedRegExp.prototype[Symbol.replace] = function(str, substitution) { - if (typeof substitution === "string") { - var groups = _groups.get(this); - return _super[Symbol.replace].call( - this, - str, - substitution.replace(/\$<([^>]+)>/g, function(_, name) { - var group = groups ? groups[name] : undefined; - if (group === undefined) return ""; - return "$" + (Array.isArray(group) ? group.join("$") : group); - }) - ); - } - if (typeof substitution === "function") { - var _this = this; - return _super[Symbol.replace].call(this, str, function() { - var args = arguments; - if (typeof args[args.length - 1] !== "object") { - args = [].slice.call(args); - args.push(buildGroups(args, _this)); - } - return substitution.apply(this, args); - }); - } - return _super[Symbol.replace].call(this, str, substitution); - }; - function buildGroups(result, re) { - var g = _groups.get(re); - return Object.keys(g).reduce(function(groups, name) { - var i = g[name]; - if (typeof i === "number") groups[name] = result[i]; - else { - var k = 0; - while (result[i[k]] === undefined && k + 1 < i.length) k++; - groups[name] = result[i[k]]; - } - return groups; - }, Object.create(null)); - } - return _wrap_reg_exp.apply(this, arguments); -} -export { _wrap_reg_exp as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/_write_only_error.js b/skills/flight-finder/node_modules/@swc/helpers/esm/_write_only_error.js deleted file mode 100644 index 87c24aa..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/_write_only_error.js +++ /dev/null @@ -1,4 +0,0 @@ -function _write_only_error(name) { - throw new TypeError("\"" + name + "\" is write-only"); -} -export { _write_only_error as _ }; diff --git a/skills/flight-finder/node_modules/@swc/helpers/esm/index.js b/skills/flight-finder/node_modules/@swc/helpers/esm/index.js deleted file mode 100644 index 426a6fd..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/esm/index.js +++ /dev/null @@ -1,110 +0,0 @@ -/* This file is automatically generated and should not be manually edited. */ -/* To modify this file, please run the `npm run build` command instead. */ - -export { _ as _apply_decorated_descriptor } from "./_apply_decorated_descriptor.js"; -export { _ as _apply_decs_2203_r } from "./_apply_decs_2203_r.js"; -export { _ as _apply_decs_2311 } from "./_apply_decs_2311.js"; -export { _ as _array_like_to_array } from "./_array_like_to_array.js"; -export { _ as _array_with_holes } from "./_array_with_holes.js"; -export { _ as _array_without_holes } from "./_array_without_holes.js"; -export { _ as _assert_this_initialized } from "./_assert_this_initialized.js"; -export { _ as _async_generator } from "./_async_generator.js"; -export { _ as _async_generator_delegate } from "./_async_generator_delegate.js"; -export { _ as _async_iterator } from "./_async_iterator.js"; -export { _ as _async_to_generator } from "./_async_to_generator.js"; -export { _ as _await_async_generator } from "./_await_async_generator.js"; -export { _ as _await_value } from "./_await_value.js"; -export { _ as _call_super } from "./_call_super.js"; -export { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js"; -export { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js"; -export { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js"; -export { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js"; -export { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js"; -export { _ as _class_call_check } from "./_class_call_check.js"; -export { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js"; -export { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js"; -export { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js"; -export { _ as _class_name_tdz_error } from "./_class_name_tdz_error.js"; -export { _ as _class_private_field_destructure } from "./_class_private_field_destructure.js"; -export { _ as _class_private_field_get } from "./_class_private_field_get.js"; -export { _ as _class_private_field_init } from "./_class_private_field_init.js"; -export { _ as _class_private_field_loose_base } from "./_class_private_field_loose_base.js"; -export { _ as _class_private_field_loose_key } from "./_class_private_field_loose_key.js"; -export { _ as _class_private_field_set } from "./_class_private_field_set.js"; -export { _ as _class_private_field_update } from "./_class_private_field_update.js"; -export { _ as _class_private_method_get } from "./_class_private_method_get.js"; -export { _ as _class_private_method_init } from "./_class_private_method_init.js"; -export { _ as _class_private_method_set } from "./_class_private_method_set.js"; -export { _ as _class_static_private_field_destructure } from "./_class_static_private_field_destructure.js"; -export { _ as _class_static_private_field_spec_get } from "./_class_static_private_field_spec_get.js"; -export { _ as _class_static_private_field_spec_set } from "./_class_static_private_field_spec_set.js"; -export { _ as _class_static_private_field_update } from "./_class_static_private_field_update.js"; -export { _ as _class_static_private_method_get } from "./_class_static_private_method_get.js"; -export { _ as _construct } from "./_construct.js"; -export { _ as _create_class } from "./_create_class.js"; -export { _ as _create_for_of_iterator_helper_loose } from "./_create_for_of_iterator_helper_loose.js"; -export { _ as _create_super } from "./_create_super.js"; -export { _ as _decorate } from "./_decorate.js"; -export { _ as _defaults } from "./_defaults.js"; -export { _ as _define_enumerable_properties } from "./_define_enumerable_properties.js"; -export { _ as _define_property } from "./_define_property.js"; -export { _ as _dispose } from "./_dispose.js"; -export { _ as _export_star } from "./_export_star.js"; -export { _ as _extends } from "./_extends.js"; -export { _ as _get } from "./_get.js"; -export { _ as _get_prototype_of } from "./_get_prototype_of.js"; -export { _ as _identity } from "./_identity.js"; -export { _ as _inherits } from "./_inherits.js"; -export { _ as _inherits_loose } from "./_inherits_loose.js"; -export { _ as _initializer_define_property } from "./_initializer_define_property.js"; -export { _ as _initializer_warning_helper } from "./_initializer_warning_helper.js"; -export { _ as _instanceof } from "./_instanceof.js"; -export { _ as _interop_require_default } from "./_interop_require_default.js"; -export { _ as _interop_require_wildcard } from "./_interop_require_wildcard.js"; -export { _ as _is_native_function } from "./_is_native_function.js"; -export { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js"; -export { _ as _iterable_to_array } from "./_iterable_to_array.js"; -export { _ as _iterable_to_array_limit } from "./_iterable_to_array_limit.js"; -export { _ as _iterable_to_array_limit_loose } from "./_iterable_to_array_limit_loose.js"; -export { _ as _jsx } from "./_jsx.js"; -export { _ as _new_arrow_check } from "./_new_arrow_check.js"; -export { _ as _non_iterable_rest } from "./_non_iterable_rest.js"; -export { _ as _non_iterable_spread } from "./_non_iterable_spread.js"; -export { _ as _object_destructuring_empty } from "./_object_destructuring_empty.js"; -export { _ as _object_spread } from "./_object_spread.js"; -export { _ as _object_spread_props } from "./_object_spread_props.js"; -export { _ as _object_without_properties } from "./_object_without_properties.js"; -export { _ as _object_without_properties_loose } from "./_object_without_properties_loose.js"; -export { _ as _overload_yield } from "./_overload_yield.js"; -export { _ as _possible_constructor_return } from "./_possible_constructor_return.js"; -export { _ as _read_only_error } from "./_read_only_error.js"; -export { _ as _set } from "./_set.js"; -export { _ as _set_prototype_of } from "./_set_prototype_of.js"; -export { _ as _skip_first_generator_next } from "./_skip_first_generator_next.js"; -export { _ as _sliced_to_array } from "./_sliced_to_array.js"; -export { _ as _sliced_to_array_loose } from "./_sliced_to_array_loose.js"; -export { _ as _super_prop_base } from "./_super_prop_base.js"; -export { _ as _tagged_template_literal } from "./_tagged_template_literal.js"; -export { _ as _tagged_template_literal_loose } from "./_tagged_template_literal_loose.js"; -export { _ as _throw } from "./_throw.js"; -export { _ as _to_array } from "./_to_array.js"; -export { _ as _to_consumable_array } from "./_to_consumable_array.js"; -export { _ as _to_primitive } from "./_to_primitive.js"; -export { _ as _to_property_key } from "./_to_property_key.js"; -export { _ as _ts_add_disposable_resource } from "./_ts_add_disposable_resource.js"; -export { _ as _ts_decorate } from "./_ts_decorate.js"; -export { _ as _ts_dispose_resources } from "./_ts_dispose_resources.js"; -export { _ as _ts_generator } from "./_ts_generator.js"; -export { _ as _ts_metadata } from "./_ts_metadata.js"; -export { _ as _ts_param } from "./_ts_param.js"; -export { _ as _ts_rewrite_relative_import_extension } from "./_ts_rewrite_relative_import_extension.js"; -export { _ as _ts_values } from "./_ts_values.js"; -export { _ as _type_of } from "./_type_of.js"; -export { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js"; -export { _ as _update } from "./_update.js"; -export { _ as _using } from "./_using.js"; -export { _ as _using_ctx } from "./_using_ctx.js"; -export { _ as _wrap_async_generator } from "./_wrap_async_generator.js"; -export { _ as _wrap_native_super } from "./_wrap_native_super.js"; -export { _ as _wrap_reg_exp } from "./_wrap_reg_exp.js"; -export { _ as _write_only_error } from "./_write_only_error.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/package.json b/skills/flight-finder/node_modules/@swc/helpers/package.json deleted file mode 100644 index d8927ce..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/package.json +++ /dev/null @@ -1,706 +0,0 @@ -{ - "name": "@swc/helpers", - "version": "0.5.20", - "description": "External helpers for the swc project.", - "module": "esm/index.js", - "main": "cjs/index.cjs", - "sideEffects": false, - "scripts": { - "build": "zx ./scripts/build.js", - "prepack": "zx ./scripts/build.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/swc-project/swc.git", - "directory": "packages/helpers" - }, - "publishConfig": { - "registry": "https://registry.npmjs.org/", - "access": "public" - }, - "keywords": [ - "swc", - "helpers" - ], - "author": "강동윤 ", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/swc-project/swc/issues" - }, - "homepage": "https://swc.rs", - "type": "module", - "devDependencies": { - "@ast-grep/napi": "^0.40.3", - "dprint": "^0.35.3", - "zx": "^7.2.1" - }, - "dependencies": { - "tslib": "^2.8.0" - }, - "exports": { - "./package.json": "./package.json", - "./esm/*": "./esm/*", - "./cjs/*": "./cjs/*", - "./src/*": "./src/*", - ".": { - "module-sync": "./esm/index.js", - "webpack": "./esm/index.js", - "import": "./esm/index.js", - "default": "./cjs/index.cjs" - }, - "./_": { - "module-sync": "./esm/index.js", - "webpack": "./esm/index.js", - "import": "./esm/index.js", - "default": "./cjs/index.cjs" - }, - "./_/_apply_decorated_descriptor": { - "module-sync": "./esm/_apply_decorated_descriptor.js", - "webpack": "./esm/_apply_decorated_descriptor.js", - "import": "./esm/_apply_decorated_descriptor.js", - "default": "./cjs/_apply_decorated_descriptor.cjs" - }, - "./_/_apply_decs_2203_r": { - "module-sync": "./esm/_apply_decs_2203_r.js", - "webpack": "./esm/_apply_decs_2203_r.js", - "import": "./esm/_apply_decs_2203_r.js", - "default": "./cjs/_apply_decs_2203_r.cjs" - }, - "./_/_apply_decs_2311": { - "module-sync": "./esm/_apply_decs_2311.js", - "webpack": "./esm/_apply_decs_2311.js", - "import": "./esm/_apply_decs_2311.js", - "default": "./cjs/_apply_decs_2311.cjs" - }, - "./_/_array_like_to_array": { - "module-sync": "./esm/_array_like_to_array.js", - "webpack": "./esm/_array_like_to_array.js", - "import": "./esm/_array_like_to_array.js", - "default": "./cjs/_array_like_to_array.cjs" - }, - "./_/_array_with_holes": { - "module-sync": "./esm/_array_with_holes.js", - "webpack": "./esm/_array_with_holes.js", - "import": "./esm/_array_with_holes.js", - "default": "./cjs/_array_with_holes.cjs" - }, - "./_/_array_without_holes": { - "module-sync": "./esm/_array_without_holes.js", - "webpack": "./esm/_array_without_holes.js", - "import": "./esm/_array_without_holes.js", - "default": "./cjs/_array_without_holes.cjs" - }, - "./_/_assert_this_initialized": { - "module-sync": "./esm/_assert_this_initialized.js", - "webpack": "./esm/_assert_this_initialized.js", - "import": "./esm/_assert_this_initialized.js", - "default": "./cjs/_assert_this_initialized.cjs" - }, - "./_/_async_generator": { - "module-sync": "./esm/_async_generator.js", - "webpack": "./esm/_async_generator.js", - "import": "./esm/_async_generator.js", - "default": "./cjs/_async_generator.cjs" - }, - "./_/_async_generator_delegate": { - "module-sync": "./esm/_async_generator_delegate.js", - "webpack": "./esm/_async_generator_delegate.js", - "import": "./esm/_async_generator_delegate.js", - "default": "./cjs/_async_generator_delegate.cjs" - }, - "./_/_async_iterator": { - "module-sync": "./esm/_async_iterator.js", - "webpack": "./esm/_async_iterator.js", - "import": "./esm/_async_iterator.js", - "default": "./cjs/_async_iterator.cjs" - }, - "./_/_async_to_generator": { - "module-sync": "./esm/_async_to_generator.js", - "webpack": "./esm/_async_to_generator.js", - "import": "./esm/_async_to_generator.js", - "default": "./cjs/_async_to_generator.cjs" - }, - "./_/_await_async_generator": { - "module-sync": "./esm/_await_async_generator.js", - "webpack": "./esm/_await_async_generator.js", - "import": "./esm/_await_async_generator.js", - "default": "./cjs/_await_async_generator.cjs" - }, - "./_/_await_value": { - "module-sync": "./esm/_await_value.js", - "webpack": "./esm/_await_value.js", - "import": "./esm/_await_value.js", - "default": "./cjs/_await_value.cjs" - }, - "./_/_call_super": { - "module-sync": "./esm/_call_super.js", - "webpack": "./esm/_call_super.js", - "import": "./esm/_call_super.js", - "default": "./cjs/_call_super.cjs" - }, - "./_/_check_private_redeclaration": { - "module-sync": "./esm/_check_private_redeclaration.js", - "webpack": "./esm/_check_private_redeclaration.js", - "import": "./esm/_check_private_redeclaration.js", - "default": "./cjs/_check_private_redeclaration.cjs" - }, - "./_/_class_apply_descriptor_destructure": { - "module-sync": "./esm/_class_apply_descriptor_destructure.js", - "webpack": "./esm/_class_apply_descriptor_destructure.js", - "import": "./esm/_class_apply_descriptor_destructure.js", - "default": "./cjs/_class_apply_descriptor_destructure.cjs" - }, - "./_/_class_apply_descriptor_get": { - "module-sync": "./esm/_class_apply_descriptor_get.js", - "webpack": "./esm/_class_apply_descriptor_get.js", - "import": "./esm/_class_apply_descriptor_get.js", - "default": "./cjs/_class_apply_descriptor_get.cjs" - }, - "./_/_class_apply_descriptor_set": { - "module-sync": "./esm/_class_apply_descriptor_set.js", - "webpack": "./esm/_class_apply_descriptor_set.js", - "import": "./esm/_class_apply_descriptor_set.js", - "default": "./cjs/_class_apply_descriptor_set.cjs" - }, - "./_/_class_apply_descriptor_update": { - "module-sync": "./esm/_class_apply_descriptor_update.js", - "webpack": "./esm/_class_apply_descriptor_update.js", - "import": "./esm/_class_apply_descriptor_update.js", - "default": "./cjs/_class_apply_descriptor_update.cjs" - }, - "./_/_class_call_check": { - "module-sync": "./esm/_class_call_check.js", - "webpack": "./esm/_class_call_check.js", - "import": "./esm/_class_call_check.js", - "default": "./cjs/_class_call_check.cjs" - }, - "./_/_class_check_private_static_access": { - "module-sync": "./esm/_class_check_private_static_access.js", - "webpack": "./esm/_class_check_private_static_access.js", - "import": "./esm/_class_check_private_static_access.js", - "default": "./cjs/_class_check_private_static_access.cjs" - }, - "./_/_class_check_private_static_field_descriptor": { - "module-sync": "./esm/_class_check_private_static_field_descriptor.js", - "webpack": "./esm/_class_check_private_static_field_descriptor.js", - "import": "./esm/_class_check_private_static_field_descriptor.js", - "default": "./cjs/_class_check_private_static_field_descriptor.cjs" - }, - "./_/_class_extract_field_descriptor": { - "module-sync": "./esm/_class_extract_field_descriptor.js", - "webpack": "./esm/_class_extract_field_descriptor.js", - "import": "./esm/_class_extract_field_descriptor.js", - "default": "./cjs/_class_extract_field_descriptor.cjs" - }, - "./_/_class_name_tdz_error": { - "module-sync": "./esm/_class_name_tdz_error.js", - "webpack": "./esm/_class_name_tdz_error.js", - "import": "./esm/_class_name_tdz_error.js", - "default": "./cjs/_class_name_tdz_error.cjs" - }, - "./_/_class_private_field_destructure": { - "module-sync": "./esm/_class_private_field_destructure.js", - "webpack": "./esm/_class_private_field_destructure.js", - "import": "./esm/_class_private_field_destructure.js", - "default": "./cjs/_class_private_field_destructure.cjs" - }, - "./_/_class_private_field_get": { - "module-sync": "./esm/_class_private_field_get.js", - "webpack": "./esm/_class_private_field_get.js", - "import": "./esm/_class_private_field_get.js", - "default": "./cjs/_class_private_field_get.cjs" - }, - "./_/_class_private_field_init": { - "module-sync": "./esm/_class_private_field_init.js", - "webpack": "./esm/_class_private_field_init.js", - "import": "./esm/_class_private_field_init.js", - "default": "./cjs/_class_private_field_init.cjs" - }, - "./_/_class_private_field_loose_base": { - "module-sync": "./esm/_class_private_field_loose_base.js", - "webpack": "./esm/_class_private_field_loose_base.js", - "import": "./esm/_class_private_field_loose_base.js", - "default": "./cjs/_class_private_field_loose_base.cjs" - }, - "./_/_class_private_field_loose_key": { - "module-sync": "./esm/_class_private_field_loose_key.js", - "webpack": "./esm/_class_private_field_loose_key.js", - "import": "./esm/_class_private_field_loose_key.js", - "default": "./cjs/_class_private_field_loose_key.cjs" - }, - "./_/_class_private_field_set": { - "module-sync": "./esm/_class_private_field_set.js", - "webpack": "./esm/_class_private_field_set.js", - "import": "./esm/_class_private_field_set.js", - "default": "./cjs/_class_private_field_set.cjs" - }, - "./_/_class_private_field_update": { - "module-sync": "./esm/_class_private_field_update.js", - "webpack": "./esm/_class_private_field_update.js", - "import": "./esm/_class_private_field_update.js", - "default": "./cjs/_class_private_field_update.cjs" - }, - "./_/_class_private_method_get": { - "module-sync": "./esm/_class_private_method_get.js", - "webpack": "./esm/_class_private_method_get.js", - "import": "./esm/_class_private_method_get.js", - "default": "./cjs/_class_private_method_get.cjs" - }, - "./_/_class_private_method_init": { - "module-sync": "./esm/_class_private_method_init.js", - "webpack": "./esm/_class_private_method_init.js", - "import": "./esm/_class_private_method_init.js", - "default": "./cjs/_class_private_method_init.cjs" - }, - "./_/_class_private_method_set": { - "module-sync": "./esm/_class_private_method_set.js", - "webpack": "./esm/_class_private_method_set.js", - "import": "./esm/_class_private_method_set.js", - "default": "./cjs/_class_private_method_set.cjs" - }, - "./_/_class_static_private_field_destructure": { - "module-sync": "./esm/_class_static_private_field_destructure.js", - "webpack": "./esm/_class_static_private_field_destructure.js", - "import": "./esm/_class_static_private_field_destructure.js", - "default": "./cjs/_class_static_private_field_destructure.cjs" - }, - "./_/_class_static_private_field_spec_get": { - "module-sync": "./esm/_class_static_private_field_spec_get.js", - "webpack": "./esm/_class_static_private_field_spec_get.js", - "import": "./esm/_class_static_private_field_spec_get.js", - "default": "./cjs/_class_static_private_field_spec_get.cjs" - }, - "./_/_class_static_private_field_spec_set": { - "module-sync": "./esm/_class_static_private_field_spec_set.js", - "webpack": "./esm/_class_static_private_field_spec_set.js", - "import": "./esm/_class_static_private_field_spec_set.js", - "default": "./cjs/_class_static_private_field_spec_set.cjs" - }, - "./_/_class_static_private_field_update": { - "module-sync": "./esm/_class_static_private_field_update.js", - "webpack": "./esm/_class_static_private_field_update.js", - "import": "./esm/_class_static_private_field_update.js", - "default": "./cjs/_class_static_private_field_update.cjs" - }, - "./_/_class_static_private_method_get": { - "module-sync": "./esm/_class_static_private_method_get.js", - "webpack": "./esm/_class_static_private_method_get.js", - "import": "./esm/_class_static_private_method_get.js", - "default": "./cjs/_class_static_private_method_get.cjs" - }, - "./_/_construct": { - "module-sync": "./esm/_construct.js", - "webpack": "./esm/_construct.js", - "import": "./esm/_construct.js", - "default": "./cjs/_construct.cjs" - }, - "./_/_create_class": { - "module-sync": "./esm/_create_class.js", - "webpack": "./esm/_create_class.js", - "import": "./esm/_create_class.js", - "default": "./cjs/_create_class.cjs" - }, - "./_/_create_for_of_iterator_helper_loose": { - "module-sync": "./esm/_create_for_of_iterator_helper_loose.js", - "webpack": "./esm/_create_for_of_iterator_helper_loose.js", - "import": "./esm/_create_for_of_iterator_helper_loose.js", - "default": "./cjs/_create_for_of_iterator_helper_loose.cjs" - }, - "./_/_create_super": { - "module-sync": "./esm/_create_super.js", - "webpack": "./esm/_create_super.js", - "import": "./esm/_create_super.js", - "default": "./cjs/_create_super.cjs" - }, - "./_/_decorate": { - "module-sync": "./esm/_decorate.js", - "webpack": "./esm/_decorate.js", - "import": "./esm/_decorate.js", - "default": "./cjs/_decorate.cjs" - }, - "./_/_defaults": { - "module-sync": "./esm/_defaults.js", - "webpack": "./esm/_defaults.js", - "import": "./esm/_defaults.js", - "default": "./cjs/_defaults.cjs" - }, - "./_/_define_enumerable_properties": { - "module-sync": "./esm/_define_enumerable_properties.js", - "webpack": "./esm/_define_enumerable_properties.js", - "import": "./esm/_define_enumerable_properties.js", - "default": "./cjs/_define_enumerable_properties.cjs" - }, - "./_/_define_property": { - "module-sync": "./esm/_define_property.js", - "webpack": "./esm/_define_property.js", - "import": "./esm/_define_property.js", - "default": "./cjs/_define_property.cjs" - }, - "./_/_dispose": { - "module-sync": "./esm/_dispose.js", - "webpack": "./esm/_dispose.js", - "import": "./esm/_dispose.js", - "default": "./cjs/_dispose.cjs" - }, - "./_/_export_star": { - "module-sync": "./esm/_export_star.js", - "webpack": "./esm/_export_star.js", - "import": "./esm/_export_star.js", - "default": "./cjs/_export_star.cjs" - }, - "./_/_extends": { - "module-sync": "./esm/_extends.js", - "webpack": "./esm/_extends.js", - "import": "./esm/_extends.js", - "default": "./cjs/_extends.cjs" - }, - "./_/_get": { - "module-sync": "./esm/_get.js", - "webpack": "./esm/_get.js", - "import": "./esm/_get.js", - "default": "./cjs/_get.cjs" - }, - "./_/_get_prototype_of": { - "module-sync": "./esm/_get_prototype_of.js", - "webpack": "./esm/_get_prototype_of.js", - "import": "./esm/_get_prototype_of.js", - "default": "./cjs/_get_prototype_of.cjs" - }, - "./_/_identity": { - "module-sync": "./esm/_identity.js", - "webpack": "./esm/_identity.js", - "import": "./esm/_identity.js", - "default": "./cjs/_identity.cjs" - }, - "./_/_inherits": { - "module-sync": "./esm/_inherits.js", - "webpack": "./esm/_inherits.js", - "import": "./esm/_inherits.js", - "default": "./cjs/_inherits.cjs" - }, - "./_/_inherits_loose": { - "module-sync": "./esm/_inherits_loose.js", - "webpack": "./esm/_inherits_loose.js", - "import": "./esm/_inherits_loose.js", - "default": "./cjs/_inherits_loose.cjs" - }, - "./_/_initializer_define_property": { - "module-sync": "./esm/_initializer_define_property.js", - "webpack": "./esm/_initializer_define_property.js", - "import": "./esm/_initializer_define_property.js", - "default": "./cjs/_initializer_define_property.cjs" - }, - "./_/_initializer_warning_helper": { - "module-sync": "./esm/_initializer_warning_helper.js", - "webpack": "./esm/_initializer_warning_helper.js", - "import": "./esm/_initializer_warning_helper.js", - "default": "./cjs/_initializer_warning_helper.cjs" - }, - "./_/_instanceof": { - "module-sync": "./esm/_instanceof.js", - "webpack": "./esm/_instanceof.js", - "import": "./esm/_instanceof.js", - "default": "./cjs/_instanceof.cjs" - }, - "./_/_interop_require_default": { - "module-sync": "./esm/_interop_require_default.js", - "webpack": "./esm/_interop_require_default.js", - "import": "./esm/_interop_require_default.js", - "default": "./cjs/_interop_require_default.cjs" - }, - "./_/_interop_require_wildcard": { - "module-sync": "./esm/_interop_require_wildcard.js", - "webpack": "./esm/_interop_require_wildcard.js", - "import": "./esm/_interop_require_wildcard.js", - "default": "./cjs/_interop_require_wildcard.cjs" - }, - "./_/_is_native_function": { - "module-sync": "./esm/_is_native_function.js", - "webpack": "./esm/_is_native_function.js", - "import": "./esm/_is_native_function.js", - "default": "./cjs/_is_native_function.cjs" - }, - "./_/_is_native_reflect_construct": { - "module-sync": "./esm/_is_native_reflect_construct.js", - "webpack": "./esm/_is_native_reflect_construct.js", - "import": "./esm/_is_native_reflect_construct.js", - "default": "./cjs/_is_native_reflect_construct.cjs" - }, - "./_/_iterable_to_array": { - "module-sync": "./esm/_iterable_to_array.js", - "webpack": "./esm/_iterable_to_array.js", - "import": "./esm/_iterable_to_array.js", - "default": "./cjs/_iterable_to_array.cjs" - }, - "./_/_iterable_to_array_limit": { - "module-sync": "./esm/_iterable_to_array_limit.js", - "webpack": "./esm/_iterable_to_array_limit.js", - "import": "./esm/_iterable_to_array_limit.js", - "default": "./cjs/_iterable_to_array_limit.cjs" - }, - "./_/_iterable_to_array_limit_loose": { - "module-sync": "./esm/_iterable_to_array_limit_loose.js", - "webpack": "./esm/_iterable_to_array_limit_loose.js", - "import": "./esm/_iterable_to_array_limit_loose.js", - "default": "./cjs/_iterable_to_array_limit_loose.cjs" - }, - "./_/_jsx": { - "module-sync": "./esm/_jsx.js", - "webpack": "./esm/_jsx.js", - "import": "./esm/_jsx.js", - "default": "./cjs/_jsx.cjs" - }, - "./_/_new_arrow_check": { - "module-sync": "./esm/_new_arrow_check.js", - "webpack": "./esm/_new_arrow_check.js", - "import": "./esm/_new_arrow_check.js", - "default": "./cjs/_new_arrow_check.cjs" - }, - "./_/_non_iterable_rest": { - "module-sync": "./esm/_non_iterable_rest.js", - "webpack": "./esm/_non_iterable_rest.js", - "import": "./esm/_non_iterable_rest.js", - "default": "./cjs/_non_iterable_rest.cjs" - }, - "./_/_non_iterable_spread": { - "module-sync": "./esm/_non_iterable_spread.js", - "webpack": "./esm/_non_iterable_spread.js", - "import": "./esm/_non_iterable_spread.js", - "default": "./cjs/_non_iterable_spread.cjs" - }, - "./_/_object_destructuring_empty": { - "module-sync": "./esm/_object_destructuring_empty.js", - "webpack": "./esm/_object_destructuring_empty.js", - "import": "./esm/_object_destructuring_empty.js", - "default": "./cjs/_object_destructuring_empty.cjs" - }, - "./_/_object_spread": { - "module-sync": "./esm/_object_spread.js", - "webpack": "./esm/_object_spread.js", - "import": "./esm/_object_spread.js", - "default": "./cjs/_object_spread.cjs" - }, - "./_/_object_spread_props": { - "module-sync": "./esm/_object_spread_props.js", - "webpack": "./esm/_object_spread_props.js", - "import": "./esm/_object_spread_props.js", - "default": "./cjs/_object_spread_props.cjs" - }, - "./_/_object_without_properties": { - "module-sync": "./esm/_object_without_properties.js", - "webpack": "./esm/_object_without_properties.js", - "import": "./esm/_object_without_properties.js", - "default": "./cjs/_object_without_properties.cjs" - }, - "./_/_object_without_properties_loose": { - "module-sync": "./esm/_object_without_properties_loose.js", - "webpack": "./esm/_object_without_properties_loose.js", - "import": "./esm/_object_without_properties_loose.js", - "default": "./cjs/_object_without_properties_loose.cjs" - }, - "./_/_overload_yield": { - "module-sync": "./esm/_overload_yield.js", - "webpack": "./esm/_overload_yield.js", - "import": "./esm/_overload_yield.js", - "default": "./cjs/_overload_yield.cjs" - }, - "./_/_possible_constructor_return": { - "module-sync": "./esm/_possible_constructor_return.js", - "webpack": "./esm/_possible_constructor_return.js", - "import": "./esm/_possible_constructor_return.js", - "default": "./cjs/_possible_constructor_return.cjs" - }, - "./_/_read_only_error": { - "module-sync": "./esm/_read_only_error.js", - "webpack": "./esm/_read_only_error.js", - "import": "./esm/_read_only_error.js", - "default": "./cjs/_read_only_error.cjs" - }, - "./_/_set": { - "module-sync": "./esm/_set.js", - "webpack": "./esm/_set.js", - "import": "./esm/_set.js", - "default": "./cjs/_set.cjs" - }, - "./_/_set_prototype_of": { - "module-sync": "./esm/_set_prototype_of.js", - "webpack": "./esm/_set_prototype_of.js", - "import": "./esm/_set_prototype_of.js", - "default": "./cjs/_set_prototype_of.cjs" - }, - "./_/_skip_first_generator_next": { - "module-sync": "./esm/_skip_first_generator_next.js", - "webpack": "./esm/_skip_first_generator_next.js", - "import": "./esm/_skip_first_generator_next.js", - "default": "./cjs/_skip_first_generator_next.cjs" - }, - "./_/_sliced_to_array": { - "module-sync": "./esm/_sliced_to_array.js", - "webpack": "./esm/_sliced_to_array.js", - "import": "./esm/_sliced_to_array.js", - "default": "./cjs/_sliced_to_array.cjs" - }, - "./_/_sliced_to_array_loose": { - "module-sync": "./esm/_sliced_to_array_loose.js", - "webpack": "./esm/_sliced_to_array_loose.js", - "import": "./esm/_sliced_to_array_loose.js", - "default": "./cjs/_sliced_to_array_loose.cjs" - }, - "./_/_super_prop_base": { - "module-sync": "./esm/_super_prop_base.js", - "webpack": "./esm/_super_prop_base.js", - "import": "./esm/_super_prop_base.js", - "default": "./cjs/_super_prop_base.cjs" - }, - "./_/_tagged_template_literal": { - "module-sync": "./esm/_tagged_template_literal.js", - "webpack": "./esm/_tagged_template_literal.js", - "import": "./esm/_tagged_template_literal.js", - "default": "./cjs/_tagged_template_literal.cjs" - }, - "./_/_tagged_template_literal_loose": { - "module-sync": "./esm/_tagged_template_literal_loose.js", - "webpack": "./esm/_tagged_template_literal_loose.js", - "import": "./esm/_tagged_template_literal_loose.js", - "default": "./cjs/_tagged_template_literal_loose.cjs" - }, - "./_/_throw": { - "module-sync": "./esm/_throw.js", - "webpack": "./esm/_throw.js", - "import": "./esm/_throw.js", - "default": "./cjs/_throw.cjs" - }, - "./_/_to_array": { - "module-sync": "./esm/_to_array.js", - "webpack": "./esm/_to_array.js", - "import": "./esm/_to_array.js", - "default": "./cjs/_to_array.cjs" - }, - "./_/_to_consumable_array": { - "module-sync": "./esm/_to_consumable_array.js", - "webpack": "./esm/_to_consumable_array.js", - "import": "./esm/_to_consumable_array.js", - "default": "./cjs/_to_consumable_array.cjs" - }, - "./_/_to_primitive": { - "module-sync": "./esm/_to_primitive.js", - "webpack": "./esm/_to_primitive.js", - "import": "./esm/_to_primitive.js", - "default": "./cjs/_to_primitive.cjs" - }, - "./_/_to_property_key": { - "module-sync": "./esm/_to_property_key.js", - "webpack": "./esm/_to_property_key.js", - "import": "./esm/_to_property_key.js", - "default": "./cjs/_to_property_key.cjs" - }, - "./_/_ts_add_disposable_resource": { - "module-sync": "./esm/_ts_add_disposable_resource.js", - "webpack": "./esm/_ts_add_disposable_resource.js", - "import": "./esm/_ts_add_disposable_resource.js", - "default": "./cjs/_ts_add_disposable_resource.cjs" - }, - "./_/_ts_decorate": { - "module-sync": "./esm/_ts_decorate.js", - "webpack": "./esm/_ts_decorate.js", - "import": "./esm/_ts_decorate.js", - "default": "./cjs/_ts_decorate.cjs" - }, - "./_/_ts_dispose_resources": { - "module-sync": "./esm/_ts_dispose_resources.js", - "webpack": "./esm/_ts_dispose_resources.js", - "import": "./esm/_ts_dispose_resources.js", - "default": "./cjs/_ts_dispose_resources.cjs" - }, - "./_/_ts_generator": { - "module-sync": "./esm/_ts_generator.js", - "webpack": "./esm/_ts_generator.js", - "import": "./esm/_ts_generator.js", - "default": "./cjs/_ts_generator.cjs" - }, - "./_/_ts_metadata": { - "module-sync": "./esm/_ts_metadata.js", - "webpack": "./esm/_ts_metadata.js", - "import": "./esm/_ts_metadata.js", - "default": "./cjs/_ts_metadata.cjs" - }, - "./_/_ts_param": { - "module-sync": "./esm/_ts_param.js", - "webpack": "./esm/_ts_param.js", - "import": "./esm/_ts_param.js", - "default": "./cjs/_ts_param.cjs" - }, - "./_/_ts_rewrite_relative_import_extension": { - "module-sync": "./esm/_ts_rewrite_relative_import_extension.js", - "webpack": "./esm/_ts_rewrite_relative_import_extension.js", - "import": "./esm/_ts_rewrite_relative_import_extension.js", - "default": "./cjs/_ts_rewrite_relative_import_extension.cjs" - }, - "./_/_ts_values": { - "module-sync": "./esm/_ts_values.js", - "webpack": "./esm/_ts_values.js", - "import": "./esm/_ts_values.js", - "default": "./cjs/_ts_values.cjs" - }, - "./_/_type_of": { - "module-sync": "./esm/_type_of.js", - "webpack": "./esm/_type_of.js", - "import": "./esm/_type_of.js", - "default": "./cjs/_type_of.cjs" - }, - "./_/_unsupported_iterable_to_array": { - "module-sync": "./esm/_unsupported_iterable_to_array.js", - "webpack": "./esm/_unsupported_iterable_to_array.js", - "import": "./esm/_unsupported_iterable_to_array.js", - "default": "./cjs/_unsupported_iterable_to_array.cjs" - }, - "./_/_update": { - "module-sync": "./esm/_update.js", - "webpack": "./esm/_update.js", - "import": "./esm/_update.js", - "default": "./cjs/_update.cjs" - }, - "./_/_using": { - "module-sync": "./esm/_using.js", - "webpack": "./esm/_using.js", - "import": "./esm/_using.js", - "default": "./cjs/_using.cjs" - }, - "./_/_using_ctx": { - "module-sync": "./esm/_using_ctx.js", - "webpack": "./esm/_using_ctx.js", - "import": "./esm/_using_ctx.js", - "default": "./cjs/_using_ctx.cjs" - }, - "./_/_wrap_async_generator": { - "module-sync": "./esm/_wrap_async_generator.js", - "webpack": "./esm/_wrap_async_generator.js", - "import": "./esm/_wrap_async_generator.js", - "default": "./cjs/_wrap_async_generator.cjs" - }, - "./_/_wrap_native_super": { - "module-sync": "./esm/_wrap_native_super.js", - "webpack": "./esm/_wrap_native_super.js", - "import": "./esm/_wrap_native_super.js", - "default": "./cjs/_wrap_native_super.cjs" - }, - "./_/_wrap_reg_exp": { - "module-sync": "./esm/_wrap_reg_exp.js", - "webpack": "./esm/_wrap_reg_exp.js", - "import": "./esm/_wrap_reg_exp.js", - "default": "./cjs/_wrap_reg_exp.cjs" - }, - "./_/_write_only_error": { - "module-sync": "./esm/_write_only_error.js", - "webpack": "./esm/_write_only_error.js", - "import": "./esm/_write_only_error.js", - "default": "./cjs/_write_only_error.cjs" - }, - "./_/index": { - "module-sync": "./esm/index.js", - "webpack": "./esm/index.js", - "import": "./esm/index.js", - "default": "./cjs/index.cjs" - } - } -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/scripts/ast_grep.js b/skills/flight-finder/node_modules/@swc/helpers/scripts/ast_grep.js deleted file mode 100644 index a7fea0a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/scripts/ast_grep.js +++ /dev/null @@ -1,218 +0,0 @@ -import { parseFiles } from "@ast-grep/napi"; -import { chalk, fs, path } from "zx"; -import { errors } from "./errors.js"; -import { root } from "./utils.js"; - -/** - * @typedef {import("@ast-grep/napi").SgNode} SgNode - */ - -/** - * Prepend text to a node - * @param {SgNode} node - * @param {string} text - * @returns {import("@ast-grep/napi").Edit} - */ -function prepend(node, text) { - const index = node.range().start.index; - return { - startPos: index, - endPos: index, - insertedText: text, - }; -} - -export function ast_grep() { - const task_queue = []; - - const task = parseFiles([root("esm")], (err, tree) => { - const filename = path.basename(tree.filename(), ".js"); - if (filename === "index") { - return; - } - - const root_node = tree.root(); - const edits = []; - - edits.push(prepend(root_node, `"use strict";\n\n`)); - - // We have forked _ts_generator from tslib - if (filename.startsWith("_ts") && filename !== "_ts_generator") { - const match = root_node.find(`export { $NAME as _ } from "tslib"`); - if (match) { - const name = match.getMatch("NAME").text(); - edits.push( - match.replace(`exports._ = require("tslib").${name};`), - ); - task_queue.push( - fs.writeFile(root("cjs", `${filename}.cjs`), root_node.commitEdits(edits), { - encoding: "utf-8", - }), - ); - } else { - report_noexport(tree.filename()); - } - return; - } - - // rewrite export named function - const match = root_node.find({ - rule: { - kind: "export_statement", - pattern: "export { $FUNC as _ }", - }, - }); - - if (match) { - const func = match.getMatch("FUNC"); - const func_name = func.text(); - if (func_name !== filename) { - report_export_mismatch(tree.filename(), match); - } - - edits.push( - match.replace(`exports._ = ${func_name};`), - ); - - // since we match the { export x as _ } pattern, - // we need to find the assignment expression from the root - root_node - .findAll({ - rule: { - pattern: func_name, - kind: "identifier", - inside: { kind: "assignment_expression", field: "left" }, - }, - }) - .forEach((node) => { - edits.push( - prepend(node, `exports._ = `), - ); - }); - } else { - report_noexport(tree.filename()); - } - - // rewrite import - root_node - .findAll({ rule: { pattern: `import { _ as $BINDING } from "$SOURCE"` } }) - .forEach((match) => { - const import_binding = match.getMatch("BINDING").text(); - const import_source = match.getMatch("SOURCE").text(); - - const import_basename = path.basename(import_source, ".js"); - - if (import_binding !== import_basename) { - report_import_mismatch(tree.filename(), match); - } - - edits.push( - match.replace(`var ${import_binding} = require("./${import_binding}.cjs");`), - ); - - root_node - .findAll({ - rule: { - pattern: import_binding, - kind: "identifier", - inside: { - not: { - kind: "import_specifier", - }, - }, - }, - }) - .forEach((node) => { - edits.push( - node.replace(`${node.text()}._`), - ); - }); - }); - - task_queue.push( - fs.writeFile(root("cjs", `${filename}.cjs`), root_node.commitEdits(edits), { - encoding: "utf-8", - }), - ); - }); - - task_queue.push(task); - - return task_queue; -} - -/** - * @param {string} filename - * @param {SgNode} match - */ -function report_export_mismatch(filename, match) { - const func = match.getMatch("FUNC"); - const func_range = func.range(); - - const text = match.text().split("\n"); - const offset = func_range.start.line - match.range().start.line; - - text.splice( - offset + 1, - text.length, - chalk.red( - [ - " ".repeat(func_range.start.column), - "^".repeat(func_range.end.column - func_range.start.column), - ] - .join(""), - ), - ); - - errors.push( - [ - `${chalk.bold.red("error")}: mismatch exported function name.`, - "", - `${chalk.blue("-->")} ${filename}:${func_range.start.line + 1}:${func_range.start.column + 1}`, - "", - ...text, - "", - `${chalk.bold("note:")} The exported name should be the same as the filename.`, - "", - ] - .join("\n"), - ); -} - -/** - * @param {string} filename - * @param {SgNode} match - */ -function report_import_mismatch(filename, match) { - const binding_range = match.getMatch("BINDING").range(); - const source_range = match.getMatch("SOURCE").range(); - - errors.push( - [ - `${chalk.bold.red("error")}: mismatch imported binding name.`, - "", - `${chalk.blue("-->")} ${filename}:${match.range().start.line + 1}`, - "", - match.text(), - [ - " ".repeat(binding_range.start.column), - chalk.red("^".repeat(binding_range.end.column - binding_range.start.column)), - " ".repeat(source_range.start.column - binding_range.end.column), - chalk.blue("-".repeat(source_range.end.column - source_range.start.column)), - ] - .join(""), - `${chalk.bold("note:")} The imported binding name should be the same as the import source basename.`, - "", - ] - .join("\n"), - ); -} - -/** - * @param {string} filename - */ -function report_noexport(filename) { - errors.push( - [`${chalk.bold.red("error")}: exported name not found`, `${chalk.blue("-->")} ${filename}`].join("\n"), - ); -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/scripts/build.js b/skills/flight-finder/node_modules/@swc/helpers/scripts/build.js deleted file mode 100644 index 32005a8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/scripts/build.js +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env zx - -import { $, fs, glob } from "zx"; -import { ast_grep } from "./ast_grep.js"; -import { errors } from "./errors.js"; -import { root } from "./utils.js"; - -// clear generated content -await Promise.all([ - fs.remove(root("cjs")), - fs.remove(root("_")), - fs.remove(root("src")), -]); - -let modules = await glob("*.js", { cwd: root("esm") }); - -const task_queue = []; - -const NO_MODIFY = [ - "/* This file is automatically generated and should not be manually edited. */", - "/* To modify this file, please run the `npm run build` command instead. */", -]; - -// generate index.js -const indexESM = [...NO_MODIFY, ""]; - -const indexCJS = [`"use strict";`, "", ...NO_MODIFY, ""]; - -const cjs_export_list = []; -const cjs_module_lexer = []; - -const main_package_json = fs.readJSONSync(root("package.json")); - -main_package_json.exports = { - "./package.json": "./package.json", - "./esm/*": "./esm/*", - "./cjs/*": "./cjs/*", - "./src/*": "./src/*", - ".": { - "module-sync": "./esm/index.js", - webpack: "./esm/index.js", - import: "./esm/index.js", - default: "./cjs/index.cjs", - }, - "./_": { - "module-sync": "./esm/index.js", - webpack: "./esm/index.js", - import: "./esm/index.js", - default: "./cjs/index.cjs", - }, -}; - -modules.forEach((p) => { - const importBinding = p.slice(0, -3); - - main_package_json.exports[`./_/${importBinding}`] = { - "module-sync": `./esm/${importBinding}.js`, - webpack: `./esm/${importBinding}.js`, - import: `./esm/${importBinding}.js`, - default: `./cjs/${importBinding}.cjs`, - }; - - const alias_package = { - main: `../../cjs/${importBinding}.cjs`, - module: `../../esm/${importBinding}.js`, - }; - task_queue.push( - fs.outputJSON(root("_", importBinding, "package.json"), alias_package, { - encoding: "utf-8", - spaces: 4, - }), - ); - - if (importBinding === "index") { - return; - } - - task_queue.push( - fs.outputFile(root("src", `${importBinding}.mjs`), re_export_esm(importBinding), { - encoding: "utf-8", - }), - ); - - indexESM.push(`export { _ as ${importBinding} } from "./${importBinding}.js";`); - - cjs_module_lexer.push(`${importBinding}: null,`); - cjs_export_list.push(`get ${importBinding}() { - return require("./${importBinding}.cjs")._; - },`); -}); - -indexCJS.push( - `0 && (module.exports = {`, - "/* @Annotate_start: the CommonJS named exports for ESM import in node */", - ...cjs_module_lexer, - "/* @Annotate_end */", - `});`, - `module.exports = {`, - ...cjs_export_list, - `};`, -); - -task_queue.push( - fs.outputJSON(root("package.json"), main_package_json, { spaces: 4 }), - fs.outputFile(root("esm", "index.js"), indexESM.join("\n") + "\n", { - encoding: "utf-8", - }), - fs.outputFile(root("cjs", "index.cjs"), indexCJS.join("\n") + "\n", { - encoding: "utf-8", - }), - fs.outputFile(root("src", "index.mjs"), `export * from "../esm/index.js"`, { - encoding: "utf-8", - }), -); - -task_queue.push(...ast_grep()); - -await Promise.all(task_queue); - -if (errors.length > 0) { - errors.forEach((e) => { - console.error(e); - }); - process.exitCode = 1; -} else { - $.cwd = root("."); - await $`dprint fmt`; - await $`dprint fmt "scripts/*.js" -c scripts/.dprint.json`; -} - -function re_export_esm(importBinding) { - return `export { _ as default } from "../esm/${importBinding}.js"`; -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/scripts/errors.js b/skills/flight-finder/node_modules/@swc/helpers/scripts/errors.js deleted file mode 100644 index b5b3c15..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/scripts/errors.js +++ /dev/null @@ -1 +0,0 @@ -export const errors = []; diff --git a/skills/flight-finder/node_modules/@swc/helpers/scripts/utils.js b/skills/flight-finder/node_modules/@swc/helpers/scripts/utils.js deleted file mode 100644 index 479b100..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/scripts/utils.js +++ /dev/null @@ -1,3 +0,0 @@ -export function root(...p) { - return path.resolve(__dirname, "..", ...p); -} diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs deleted file mode 100644 index e4839a1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_apply_decorated_descriptor.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs deleted file mode 100644 index c10cb56..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_apply_decs_2203_r.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2311.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2311.mjs deleted file mode 100644 index b9aec56..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_apply_decs_2311.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_apply_decs_2311.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_array_like_to_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_array_like_to_array.mjs deleted file mode 100644 index 7691b32..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_array_like_to_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_array_like_to_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_array_with_holes.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_array_with_holes.mjs deleted file mode 100644 index 1a62299..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_array_with_holes.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_array_with_holes.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_array_without_holes.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_array_without_holes.mjs deleted file mode 100644 index ee2f265..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_array_without_holes.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_array_without_holes.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_assert_this_initialized.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_assert_this_initialized.mjs deleted file mode 100644 index 3677253..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_assert_this_initialized.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_assert_this_initialized.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator.mjs deleted file mode 100644 index b3ced53..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_async_generator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator_delegate.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator_delegate.mjs deleted file mode 100644 index 29dd8b2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_async_generator_delegate.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_async_generator_delegate.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_async_iterator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_async_iterator.mjs deleted file mode 100644 index d130032..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_async_iterator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_async_iterator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_async_to_generator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_async_to_generator.mjs deleted file mode 100644 index 18adef5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_async_to_generator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_async_to_generator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_await_async_generator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_await_async_generator.mjs deleted file mode 100644 index da13a9f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_await_async_generator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_await_async_generator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_await_value.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_await_value.mjs deleted file mode 100644 index 3c24161..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_await_value.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_await_value.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_call_super.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_call_super.mjs deleted file mode 100644 index da60716..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_call_super.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_call_super.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs deleted file mode 100644 index 7d78cfe..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_check_private_redeclaration.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs deleted file mode 100644 index b606b53..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_apply_descriptor_destructure.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs deleted file mode 100644 index f888b6b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_apply_descriptor_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs deleted file mode 100644 index fb00679..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_apply_descriptor_set.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs deleted file mode 100644 index e7a9915..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_apply_descriptor_update.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_call_check.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_call_check.mjs deleted file mode 100644 index 220c3c8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_call_check.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_call_check.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs deleted file mode 100644 index a52a4d8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_check_private_static_access.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs deleted file mode 100644 index cb8a623..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_check_private_static_field_descriptor.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs deleted file mode 100644 index 7586ce8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_extract_field_descriptor.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs deleted file mode 100644 index c211d7f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_name_tdz_error.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs deleted file mode 100644 index b06b763..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_destructure.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_get.mjs deleted file mode 100644 index 1f8854a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_init.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_init.mjs deleted file mode 100644 index 48d4d17..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_init.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_init.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs deleted file mode 100644 index a10b033..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_loose_base.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs deleted file mode 100644 index 6e80fd9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_loose_key.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_set.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_set.mjs deleted file mode 100644 index cb54a1b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_set.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_set.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_update.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_update.mjs deleted file mode 100644 index c5f0c63..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_field_update.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_field_update.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_get.mjs deleted file mode 100644 index 9f5248a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_method_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_init.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_init.mjs deleted file mode 100644 index afce453..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_init.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_method_init.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_set.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_set.mjs deleted file mode 100644 index 327252d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_private_method_set.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_private_method_set.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs deleted file mode 100644 index c35376d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_static_private_field_destructure.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs deleted file mode 100644 index 0cc7854..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_static_private_field_spec_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs deleted file mode 100644 index 208cf97..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_static_private_field_spec_set.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs deleted file mode 100644 index 87e0438..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_static_private_field_update.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs deleted file mode 100644 index 2241a1a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_class_static_private_method_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_construct.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_construct.mjs deleted file mode 100644 index 54acb64..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_construct.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_construct.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_create_class.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_create_class.mjs deleted file mode 100644 index 78c2af2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_create_class.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_create_class.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs deleted file mode 100644 index 303e056..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_create_for_of_iterator_helper_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_create_super.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_create_super.mjs deleted file mode 100644 index 44a06bf..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_create_super.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_create_super.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_decorate.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_decorate.mjs deleted file mode 100644 index 0878991..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_decorate.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_decorate.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_defaults.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_defaults.mjs deleted file mode 100644 index 624e684..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_defaults.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_defaults.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs deleted file mode 100644 index b6a87fc..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_define_enumerable_properties.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_define_property.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_define_property.mjs deleted file mode 100644 index b60b2c8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_define_property.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_define_property.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_dispose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_dispose.mjs deleted file mode 100644 index 2f217e8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_dispose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_dispose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_export_star.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_export_star.mjs deleted file mode 100644 index c7011c2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_export_star.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_export_star.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_extends.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_extends.mjs deleted file mode 100644 index 804a28b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_extends.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_extends.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_get.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_get.mjs deleted file mode 100644 index fae4b22..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_get.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_get.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_get_prototype_of.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_get_prototype_of.mjs deleted file mode 100644 index 57e820c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_get_prototype_of.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_get_prototype_of.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_identity.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_identity.mjs deleted file mode 100644 index 5ab4a08..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_identity.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_identity.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_inherits.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_inherits.mjs deleted file mode 100644 index d5e3767..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_inherits.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_inherits.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_inherits_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_inherits_loose.mjs deleted file mode 100644 index 4f5187d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_inherits_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_inherits_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_define_property.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_define_property.mjs deleted file mode 100644 index fa0a3b8..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_define_property.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_initializer_define_property.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs deleted file mode 100644 index f9251ab..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_initializer_warning_helper.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_instanceof.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_instanceof.mjs deleted file mode 100644 index 609f786..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_instanceof.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_instanceof.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_default.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_default.mjs deleted file mode 100644 index 454ce71..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_default.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_interop_require_default.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs deleted file mode 100644 index 07f7a7e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_interop_require_wildcard.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_function.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_function.mjs deleted file mode 100644 index 8bacb3a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_function.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_is_native_function.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs deleted file mode 100644 index 7c0394d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_is_native_reflect_construct.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array.mjs deleted file mode 100644 index 4baf94a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_iterable_to_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs deleted file mode 100644 index 45f70f5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_iterable_to_array_limit.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs deleted file mode 100644 index 400a9e0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_iterable_to_array_limit_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_jsx.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_jsx.mjs deleted file mode 100644 index 8b0646a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_jsx.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_jsx.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_new_arrow_check.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_new_arrow_check.mjs deleted file mode 100644 index e694d15..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_new_arrow_check.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_new_arrow_check.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_rest.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_rest.mjs deleted file mode 100644 index 8321807..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_rest.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_non_iterable_rest.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_spread.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_spread.mjs deleted file mode 100644 index 12993f1..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_non_iterable_spread.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_non_iterable_spread.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs deleted file mode 100644 index b8aed9c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_object_destructuring_empty.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread.mjs deleted file mode 100644 index 9b536f5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_object_spread.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread_props.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread_props.mjs deleted file mode 100644 index 799de3f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_object_spread_props.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_object_spread_props.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties.mjs deleted file mode 100644 index f0ce12c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_object_without_properties.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs deleted file mode 100644 index f6f2669..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_object_without_properties_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_overload_yield.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_overload_yield.mjs deleted file mode 100644 index d854c35..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_overload_yield.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_overload_yield.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_possible_constructor_return.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_possible_constructor_return.mjs deleted file mode 100644 index ee9657d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_possible_constructor_return.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_possible_constructor_return.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_read_only_error.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_read_only_error.mjs deleted file mode 100644 index 3e95329..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_read_only_error.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_read_only_error.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_set.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_set.mjs deleted file mode 100644 index 5cc0337..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_set.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_set.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_set_prototype_of.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_set_prototype_of.mjs deleted file mode 100644 index f244856..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_set_prototype_of.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_set_prototype_of.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs deleted file mode 100644 index f437b3c..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_skip_first_generator_next.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array.mjs deleted file mode 100644 index 34f9723..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_sliced_to_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs deleted file mode 100644 index 116211b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_sliced_to_array_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_super_prop_base.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_super_prop_base.mjs deleted file mode 100644 index 25a1b4b..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_super_prop_base.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_super_prop_base.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal.mjs deleted file mode 100644 index ea78872..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_tagged_template_literal.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs deleted file mode 100644 index f65c3bb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_tagged_template_literal_loose.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_throw.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_throw.mjs deleted file mode 100644 index a0b50e0..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_throw.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_throw.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_to_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_to_array.mjs deleted file mode 100644 index d42cba5..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_to_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_to_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_to_consumable_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_to_consumable_array.mjs deleted file mode 100644 index e23f2eb..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_to_consumable_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_to_consumable_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_to_primitive.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_to_primitive.mjs deleted file mode 100644 index 0d4a248..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_to_primitive.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_to_primitive.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_to_property_key.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_to_property_key.mjs deleted file mode 100644 index 7b76707..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_to_property_key.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_to_property_key.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs deleted file mode 100644 index b059656..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_add_disposable_resource.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_decorate.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_decorate.mjs deleted file mode 100644 index 2d7763f..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_decorate.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_decorate.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs deleted file mode 100644 index ba5ec13..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_dispose_resources.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_generator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_generator.mjs deleted file mode 100644 index f595f6d..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_generator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_generator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_metadata.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_metadata.mjs deleted file mode 100644 index 424457e..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_metadata.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_metadata.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_param.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_param.mjs deleted file mode 100644 index 1806317..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_param.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_param.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_rewrite_relative_import_extension.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_rewrite_relative_import_extension.mjs deleted file mode 100644 index d135817..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_rewrite_relative_import_extension.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_rewrite_relative_import_extension.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_values.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_ts_values.mjs deleted file mode 100644 index 126c783..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_ts_values.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_ts_values.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_type_of.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_type_of.mjs deleted file mode 100644 index 4f8a936..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_type_of.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_type_of.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs deleted file mode 100644 index 9e42222..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_unsupported_iterable_to_array.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_update.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_update.mjs deleted file mode 100644 index 6adb4a4..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_update.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_update.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_using.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_using.mjs deleted file mode 100644 index f716815..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_using.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_using.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_using_ctx.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_using_ctx.mjs deleted file mode 100644 index 87e8097..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_using_ctx.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_using_ctx.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_async_generator.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_async_generator.mjs deleted file mode 100644 index 44acb1a..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_async_generator.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_wrap_async_generator.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_native_super.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_native_super.mjs deleted file mode 100644 index 266f5d3..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_native_super.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_wrap_native_super.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_reg_exp.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_reg_exp.mjs deleted file mode 100644 index 772afe9..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_wrap_reg_exp.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_wrap_reg_exp.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/_write_only_error.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/_write_only_error.mjs deleted file mode 100644 index 68c8af2..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/_write_only_error.mjs +++ /dev/null @@ -1 +0,0 @@ -export { _ as default } from "../esm/_write_only_error.js"; diff --git a/skills/flight-finder/node_modules/@swc/helpers/src/index.mjs b/skills/flight-finder/node_modules/@swc/helpers/src/index.mjs deleted file mode 100644 index d0d0812..0000000 --- a/skills/flight-finder/node_modules/@swc/helpers/src/index.mjs +++ /dev/null @@ -1 +0,0 @@ -export * from "../esm/index.js"; diff --git a/skills/flight-finder/node_modules/@types/node/LICENSE b/skills/flight-finder/node_modules/@types/node/LICENSE deleted file mode 100644 index 9e841e7..0000000 --- a/skills/flight-finder/node_modules/@types/node/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - MIT License - - Copyright (c) Microsoft Corporation. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE diff --git a/skills/flight-finder/node_modules/@types/node/README.md b/skills/flight-finder/node_modules/@types/node/README.md deleted file mode 100644 index 4e06870..0000000 --- a/skills/flight-finder/node_modules/@types/node/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Installation -> `npm install --save @types/node` - -# Summary -This package contains type definitions for node (https://nodejs.org/). - -# Details -Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node. - -### Additional Details - * Last updated: Thu, 12 Mar 2026 15:47:58 GMT - * Dependencies: [undici-types](https://npmjs.com/package/undici-types) - -# Credits -These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), [Dmitry Semigradsky](https://github.com/Semigradsky), [René](https://github.com/Renegade334), and [Yagiz Nizipli](https://github.com/anonrig). diff --git a/skills/flight-finder/node_modules/@types/node/assert.d.ts b/skills/flight-finder/node_modules/@types/node/assert.d.ts deleted file mode 100644 index 9b7144e..0000000 --- a/skills/flight-finder/node_modules/@types/node/assert.d.ts +++ /dev/null @@ -1,955 +0,0 @@ -/** - * The `node:assert` module provides a set of assertion functions for verifying - * invariants. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/assert.js) - */ -declare module "node:assert" { - import strict = require("node:assert/strict"); - /** - * An alias of {@link assert.ok}. - * @since v0.5.9 - * @param value The input that is checked for being truthy. - */ - function assert(value: unknown, message?: string | Error): asserts value; - const kOptions: unique symbol; - namespace assert { - type AssertMethodNames = - | "deepEqual" - | "deepStrictEqual" - | "doesNotMatch" - | "doesNotReject" - | "doesNotThrow" - | "equal" - | "fail" - | "ifError" - | "match" - | "notDeepEqual" - | "notDeepStrictEqual" - | "notEqual" - | "notStrictEqual" - | "ok" - | "partialDeepStrictEqual" - | "rejects" - | "strictEqual" - | "throws"; - interface AssertOptions { - /** - * If set to `'full'`, shows the full diff in assertion errors. - * @default 'simple' - */ - diff?: "simple" | "full" | undefined; - /** - * If set to `true`, non-strict methods behave like their - * corresponding strict methods. - * @default true - */ - strict?: boolean | undefined; - /** - * If set to `true`, skips prototype and constructor - * comparison in deep equality checks. - * @since v24.9.0 - * @default false - */ - skipPrototype?: boolean | undefined; - } - interface Assert extends Pick { - readonly [kOptions]: AssertOptions & { strict: false }; - } - interface AssertStrict extends Pick { - readonly [kOptions]: AssertOptions & { strict: true }; - } - /** - * The `Assert` class allows creating independent assertion instances with custom options. - * @since v24.6.0 - */ - var Assert: { - /** - * Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages. - * - * ```js - * const { Assert } = require('node:assert'); - * const assertInstance = new Assert({ diff: 'full' }); - * assertInstance.deepStrictEqual({ a: 1 }, { a: 2 }); - * // Shows a full diff in the error message. - * ``` - * - * **Important**: When destructuring assertion methods from an `Assert` instance, - * the methods lose their connection to the instance's configuration options (such - * as `diff`, `strict`, and `skipPrototype` settings). - * The destructured methods will fall back to default behavior instead. - * - * ```js - * const myAssert = new Assert({ diff: 'full' }); - * - * // This works as expected - uses 'full' diff - * myAssert.strictEqual({ a: 1 }, { b: { c: 1 } }); - * - * // This loses the 'full' diff setting - falls back to default 'simple' diff - * const { strictEqual } = myAssert; - * strictEqual({ a: 1 }, { b: { c: 1 } }); - * ``` - * - * The `skipPrototype` option affects all deep equality methods: - * - * ```js - * class Foo { - * constructor(a) { - * this.a = a; - * } - * } - * - * class Bar { - * constructor(a) { - * this.a = a; - * } - * } - * - * const foo = new Foo(1); - * const bar = new Bar(1); - * - * // Default behavior - fails due to different constructors - * const assert1 = new Assert(); - * assert1.deepStrictEqual(foo, bar); // AssertionError - * - * // Skip prototype comparison - passes if properties are equal - * const assert2 = new Assert({ skipPrototype: true }); - * assert2.deepStrictEqual(foo, bar); // OK - * ``` - * - * When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior - * (diff: 'simple', non-strict mode). - * To maintain custom options when using destructured methods, avoid - * destructuring and call methods directly on the instance. - * @since v24.6.0 - */ - new( - options?: AssertOptions & { strict?: true | undefined }, - ): AssertStrict; - new( - options: AssertOptions, - ): Assert; - }; - interface AssertionErrorOptions { - /** - * If provided, the error message is set to this value. - */ - message?: string | undefined; - /** - * The `actual` property on the error instance. - */ - actual?: unknown; - /** - * The `expected` property on the error instance. - */ - expected?: unknown; - /** - * The `operator` property on the error instance. - */ - operator?: string | undefined; - /** - * If provided, the generated stack trace omits frames before this function. - */ - stackStartFn?: Function | undefined; - /** - * If set to `'full'`, shows the full diff in assertion errors. - * @default 'simple' - */ - diff?: "simple" | "full" | undefined; - } - /** - * Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class. - */ - class AssertionError extends Error { - constructor(options: AssertionErrorOptions); - /** - * Set to the `actual` argument for methods such as {@link assert.strictEqual()}. - */ - actual: unknown; - /** - * Set to the `expected` argument for methods such as {@link assert.strictEqual()}. - */ - expected: unknown; - /** - * Indicates if the message was auto-generated (`true`) or not. - */ - generatedMessage: boolean; - /** - * Value is always `ERR_ASSERTION` to show that the error is an assertion error. - */ - code: "ERR_ASSERTION"; - /** - * Set to the passed in operator value. - */ - operator: string; - } - type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error; - /** - * Throws an `AssertionError` with the provided error message or a default - * error message. If the `message` parameter is an instance of an `Error` then - * it will be thrown instead of the `AssertionError`. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.fail(); - * // AssertionError [ERR_ASSERTION]: Failed - * - * assert.fail('boom'); - * // AssertionError [ERR_ASSERTION]: boom - * - * assert.fail(new TypeError('need array')); - * // TypeError: need array - * ``` - * @since v0.1.21 - * @param [message='Failed'] - */ - function fail(message?: string | Error): never; - /** - * Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`. - * - * If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default - * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`. - * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``. - * - * Be aware that in the `repl` the error message will be different to the one - * thrown in a file! See below for further details. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.ok(true); - * // OK - * assert.ok(1); - * // OK - * - * assert.ok(); - * // AssertionError: No value argument passed to `assert.ok()` - * - * assert.ok(false, 'it\'s false'); - * // AssertionError: it's false - * - * // In the repl: - * assert.ok(typeof 123 === 'string'); - * // AssertionError: false == true - * - * // In a file (e.g. test.js): - * assert.ok(typeof 123 === 'string'); - * // AssertionError: The expression evaluated to a falsy value: - * // - * // assert.ok(typeof 123 === 'string') - * - * assert.ok(false); - * // AssertionError: The expression evaluated to a falsy value: - * // - * // assert.ok(false) - * - * assert.ok(0); - * // AssertionError: The expression evaluated to a falsy value: - * // - * // assert.ok(0) - * ``` - * - * ```js - * import assert from 'node:assert/strict'; - * - * // Using `assert()` works the same: - * assert(2 + 2 > 5);; - * // AssertionError: The expression evaluated to a falsy value: - * // - * // assert(2 + 2 > 5) - * ``` - * @since v0.1.21 - */ - function ok(value: unknown, message?: string | Error): asserts value; - /** - * **Strict assertion mode** - * - * An alias of {@link strictEqual}. - * - * **Legacy assertion mode** - * - * > Stability: 3 - Legacy: Use {@link strictEqual} instead. - * - * Tests shallow, coercive equality between the `actual` and `expected` parameters - * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled - * and treated as being identical if both sides are `NaN`. - * - * ```js - * import assert from 'node:assert'; - * - * assert.equal(1, 1); - * // OK, 1 == 1 - * assert.equal(1, '1'); - * // OK, 1 == '1' - * assert.equal(NaN, NaN); - * // OK - * - * assert.equal(1, 2); - * // AssertionError: 1 == 2 - * assert.equal({ a: { b: 1 } }, { a: { b: 1 } }); - * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } } - * ``` - * - * If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default - * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`. - * @since v0.1.21 - */ - function equal(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * **Strict assertion mode** - * - * An alias of {@link notStrictEqual}. - * - * **Legacy assertion mode** - * - * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead. - * - * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is - * specially handled and treated as being identical if both sides are `NaN`. - * - * ```js - * import assert from 'node:assert'; - * - * assert.notEqual(1, 2); - * // OK - * - * assert.notEqual(1, 1); - * // AssertionError: 1 != 1 - * - * assert.notEqual(1, '1'); - * // AssertionError: 1 != '1' - * ``` - * - * If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error - * message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`. - * @since v0.1.21 - */ - function notEqual(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * **Strict assertion mode** - * - * An alias of {@link deepStrictEqual}. - * - * **Legacy assertion mode** - * - * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead. - * - * Tests for deep equality between the `actual` and `expected` parameters. Consider - * using {@link deepStrictEqual} instead. {@link deepEqual} can have - * surprising results. - * - * _Deep equality_ means that the enumerable "own" properties of child objects - * are also recursively evaluated by the following rules. - * @since v0.1.21 - */ - function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * **Strict assertion mode** - * - * An alias of {@link notDeepStrictEqual}. - * - * **Legacy assertion mode** - * - * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead. - * - * Tests for any deep inequality. Opposite of {@link deepEqual}. - * - * ```js - * import assert from 'node:assert'; - * - * const obj1 = { - * a: { - * b: 1, - * }, - * }; - * const obj2 = { - * a: { - * b: 2, - * }, - * }; - * const obj3 = { - * a: { - * b: 1, - * }, - * }; - * const obj4 = { __proto__: obj1 }; - * - * assert.notDeepEqual(obj1, obj1); - * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } - * - * assert.notDeepEqual(obj1, obj2); - * // OK - * - * assert.notDeepEqual(obj1, obj3); - * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } - * - * assert.notDeepEqual(obj1, obj4); - * // OK - * ``` - * - * If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default - * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown - * instead of the `AssertionError`. - * @since v0.1.21 - */ - function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * Tests strict equality between the `actual` and `expected` parameters as - * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.strictEqual(1, 2); - * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: - * // - * // 1 !== 2 - * - * assert.strictEqual(1, 1); - * // OK - * - * assert.strictEqual('Hello foobar', 'Hello World!'); - * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal: - * // + actual - expected - * // - * // + 'Hello foobar' - * // - 'Hello World!' - * // ^ - * - * const apples = 1; - * const oranges = 2; - * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`); - * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2 - * - * assert.strictEqual(1, '1', new TypeError('Inputs are not identical')); - * // TypeError: Inputs are not identical - * ``` - * - * If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a - * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown - * instead of the `AssertionError`. - * @since v0.1.21 - */ - function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; - /** - * Tests strict inequality between the `actual` and `expected` parameters as - * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.notStrictEqual(1, 2); - * // OK - * - * assert.notStrictEqual(1, 1); - * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to: - * // - * // 1 - * - * assert.notStrictEqual(1, '1'); - * // OK - * ``` - * - * If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a - * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown - * instead of the `AssertionError`. - * @since v0.1.21 - */ - function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * Tests for deep equality between the `actual` and `expected` parameters. - * "Deep" equality means that the enumerable "own" properties of child objects - * are recursively evaluated also by the following rules. - * @since v1.2.0 - */ - function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T; - /** - * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.notDeepStrictEqual({ a: 1 }, { a: '1' }); - * // OK - * ``` - * - * If the values are deeply and strictly equal, an `AssertionError` is thrown - * with a `message` property set equal to the value of the `message` parameter. If - * the `message` parameter is undefined, a default error message is assigned. If - * the `message` parameter is an instance of an `Error` then it will be thrown - * instead of the `AssertionError`. - * @since v1.2.0 - */ - function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; - /** - * Expects the function `fn` to throw an error. - * - * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), - * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, - * a validation object where each property will be tested for strict deep equality, - * or an instance of error where each property will be tested for strict deep - * equality including the non-enumerable `message` and `name` properties. When - * using an object, it is also possible to use a regular expression, when - * validating against a string property. See below for examples. - * - * If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation - * fails. - * - * Custom validation object/error instance: - * - * ```js - * import assert from 'node:assert/strict'; - * - * const err = new TypeError('Wrong value'); - * err.code = 404; - * err.foo = 'bar'; - * err.info = { - * nested: true, - * baz: 'text', - * }; - * err.reg = /abc/i; - * - * assert.throws( - * () => { - * throw err; - * }, - * { - * name: 'TypeError', - * message: 'Wrong value', - * info: { - * nested: true, - * baz: 'text', - * }, - * // Only properties on the validation object will be tested for. - * // Using nested objects requires all properties to be present. Otherwise - * // the validation is going to fail. - * }, - * ); - * - * // Using regular expressions to validate error properties: - * assert.throws( - * () => { - * throw err; - * }, - * { - * // The `name` and `message` properties are strings and using regular - * // expressions on those will match against the string. If they fail, an - * // error is thrown. - * name: /^TypeError$/, - * message: /Wrong/, - * foo: 'bar', - * info: { - * nested: true, - * // It is not possible to use regular expressions for nested properties! - * baz: 'text', - * }, - * // The `reg` property contains a regular expression and only if the - * // validation object contains an identical regular expression, it is going - * // to pass. - * reg: /abc/i, - * }, - * ); - * - * // Fails due to the different `message` and `name` properties: - * assert.throws( - * () => { - * const otherErr = new Error('Not found'); - * // Copy all enumerable properties from `err` to `otherErr`. - * for (const [key, value] of Object.entries(err)) { - * otherErr[key] = value; - * } - * throw otherErr; - * }, - * // The error's `message` and `name` properties will also be checked when using - * // an error as validation object. - * err, - * ); - * ``` - * - * Validate instanceof using constructor: - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.throws( - * () => { - * throw new Error('Wrong value'); - * }, - * Error, - * ); - * ``` - * - * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): - * - * Using a regular expression runs `.toString` on the error object, and will - * therefore also include the error name. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.throws( - * () => { - * throw new Error('Wrong value'); - * }, - * /^Error: Wrong value$/, - * ); - * ``` - * - * Custom error validation: - * - * The function must return `true` to indicate all internal validations passed. - * It will otherwise fail with an `AssertionError`. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.throws( - * () => { - * throw new Error('Wrong value'); - * }, - * (err) => { - * assert(err instanceof Error); - * assert(/value/.test(err)); - * // Avoid returning anything from validation functions besides `true`. - * // Otherwise, it's not clear what part of the validation failed. Instead, - * // throw an error about the specific validation that failed (as done in this - * // example) and add as much helpful debugging information to that error as - * // possible. - * return true; - * }, - * 'unexpected error', - * ); - * ``` - * - * `error` cannot be a string. If a string is provided as the second - * argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same - * message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using - * a string as the second argument gets considered: - * - * ```js - * import assert from 'node:assert/strict'; - * - * function throwingFirst() { - * throw new Error('First'); - * } - * - * function throwingSecond() { - * throw new Error('Second'); - * } - * - * function notThrowing() {} - * - * // The second argument is a string and the input function threw an Error. - * // The first case will not throw as it does not match for the error message - * // thrown by the input function! - * assert.throws(throwingFirst, 'Second'); - * // In the next example the message has no benefit over the message from the - * // error and since it is not clear if the user intended to actually match - * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error. - * assert.throws(throwingSecond, 'Second'); - * // TypeError [ERR_AMBIGUOUS_ARGUMENT] - * - * // The string is only used (as message) in case the function does not throw: - * assert.throws(notThrowing, 'Second'); - * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second - * - * // If it was intended to match for the error message do this instead: - * // It does not throw because the error messages match. - * assert.throws(throwingSecond, /Second$/); - * - * // If the error message does not match, an AssertionError is thrown. - * assert.throws(throwingFirst, /Second$/); - * // AssertionError [ERR_ASSERTION] - * ``` - * - * Due to the confusing error-prone notation, avoid a string as the second - * argument. - * @since v0.1.21 - */ - function throws(block: () => unknown, message?: string | Error): void; - function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void; - /** - * Asserts that the function `fn` does not throw an error. - * - * Using `assert.doesNotThrow()` is actually not useful because there - * is no benefit in catching an error and then rethrowing it. Instead, consider - * adding a comment next to the specific code path that should not throw and keep - * error messages as expressive as possible. - * - * When `assert.doesNotThrow()` is called, it will immediately call the `fn` function. - * - * If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a - * different type, or if the `error` parameter is undefined, the error is - * propagated back to the caller. - * - * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), - * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation - * function. See {@link throws} for more details. - * - * The following, for instance, will throw the `TypeError` because there is no - * matching error type in the assertion: - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.doesNotThrow( - * () => { - * throw new TypeError('Wrong value'); - * }, - * SyntaxError, - * ); - * ``` - * - * However, the following will result in an `AssertionError` with the message - * 'Got unwanted exception...': - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.doesNotThrow( - * () => { - * throw new TypeError('Wrong value'); - * }, - * TypeError, - * ); - * ``` - * - * If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message: - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.doesNotThrow( - * () => { - * throw new TypeError('Wrong value'); - * }, - * /Wrong value/, - * 'Whoops', - * ); - * // Throws: AssertionError: Got unwanted exception: Whoops - * ``` - * @since v0.1.21 - */ - function doesNotThrow(block: () => unknown, message?: string | Error): void; - function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void; - /** - * Throws `value` if `value` is not `undefined` or `null`. This is useful when - * testing the `error` argument in callbacks. The stack trace contains all frames - * from the error passed to `ifError()` including the potential new frames for `ifError()` itself. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.ifError(null); - * // OK - * assert.ifError(0); - * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0 - * assert.ifError('error'); - * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error' - * assert.ifError(new Error()); - * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error - * - * // Create some random error frames. - * let err; - * (function errorFrame() { - * err = new Error('test error'); - * })(); - * - * (function ifErrorFrame() { - * assert.ifError(err); - * })(); - * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error - * // at ifErrorFrame - * // at errorFrame - * ``` - * @since v0.1.97 - */ - function ifError(value: unknown): asserts value is null | undefined; - /** - * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately - * calls the function and awaits the returned promise to complete. It will then - * check that the promise is rejected. - * - * If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the - * function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value) - * error. In both cases the error handler is skipped. - * - * Besides the async nature to await the completion behaves identically to {@link throws}. - * - * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), - * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function, - * an object where each property will be tested for, or an instance of error where - * each property will be tested for including the non-enumerable `message` and `name` properties. - * - * If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject. - * - * ```js - * import assert from 'node:assert/strict'; - * - * await assert.rejects( - * async () => { - * throw new TypeError('Wrong value'); - * }, - * { - * name: 'TypeError', - * message: 'Wrong value', - * }, - * ); - * ``` - * - * ```js - * import assert from 'node:assert/strict'; - * - * await assert.rejects( - * async () => { - * throw new TypeError('Wrong value'); - * }, - * (err) => { - * assert.strictEqual(err.name, 'TypeError'); - * assert.strictEqual(err.message, 'Wrong value'); - * return true; - * }, - * ); - * ``` - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.rejects( - * Promise.reject(new Error('Wrong value')), - * Error, - * ).then(() => { - * // ... - * }); - * ``` - * - * `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to - * be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the - * example in {@link throws} carefully if using a string as the second argument gets considered. - * @since v10.0.0 - */ - function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise; - function rejects( - block: (() => Promise) | Promise, - error: AssertPredicate, - message?: string | Error, - ): Promise; - /** - * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately - * calls the function and awaits the returned promise to complete. It will then - * check that the promise is not rejected. - * - * If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If - * the function does not return a promise, `assert.doesNotReject()` will return a - * rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v25.x/api/errors.html#err_invalid_return_value) error. In both cases - * the error handler is skipped. - * - * Using `assert.doesNotReject()` is actually not useful because there is little - * benefit in catching a rejection and then rejecting it again. Instead, consider - * adding a comment next to the specific code path that should not reject and keep - * error messages as expressive as possible. - * - * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes), - * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation - * function. See {@link throws} for more details. - * - * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}. - * - * ```js - * import assert from 'node:assert/strict'; - * - * await assert.doesNotReject( - * async () => { - * throw new TypeError('Wrong value'); - * }, - * SyntaxError, - * ); - * ``` - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.doesNotReject(Promise.reject(new TypeError('Wrong value'))) - * .then(() => { - * // ... - * }); - * ``` - * @since v10.0.0 - */ - function doesNotReject( - block: (() => Promise) | Promise, - message?: string | Error, - ): Promise; - function doesNotReject( - block: (() => Promise) | Promise, - error: AssertPredicate, - message?: string | Error, - ): Promise; - /** - * Expects the `string` input to match the regular expression. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.match('I will fail', /pass/); - * // AssertionError [ERR_ASSERTION]: The input did not match the regular ... - * - * assert.match(123, /pass/); - * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. - * - * assert.match('I will pass', /pass/); - * // OK - * ``` - * - * If the values do not match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal - * to the value of the `message` parameter. If the `message` parameter is - * undefined, a default error message is assigned. If the `message` parameter is an - * instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`. - * @since v13.6.0, v12.16.0 - */ - function match(value: string, regExp: RegExp, message?: string | Error): void; - /** - * Expects the `string` input not to match the regular expression. - * - * ```js - * import assert from 'node:assert/strict'; - * - * assert.doesNotMatch('I will fail', /fail/); - * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ... - * - * assert.doesNotMatch(123, /pass/); - * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string. - * - * assert.doesNotMatch('I will pass', /different/); - * // OK - * ``` - * - * If the values do match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal - * to the value of the `message` parameter. If the `message` parameter is - * undefined, a default error message is assigned. If the `message` parameter is an - * instance of an [Error](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`. - * @since v13.6.0, v12.16.0 - */ - function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void; - /** - * Tests for partial deep equality between the `actual` and `expected` parameters. - * "Deep" equality means that the enumerable "own" properties of child objects - * are recursively evaluated also by the following rules. "Partial" equality means - * that only properties that exist on the `expected` parameter are going to be - * compared. - * - * This method always passes the same test cases as `assert.deepStrictEqual()`, - * behaving as a super set of it. - * @since v22.13.0 - */ - function partialDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void; - } - namespace assert { - export { strict }; - } - export = assert; -} -declare module "assert" { - import assert = require("node:assert"); - export = assert; -} diff --git a/skills/flight-finder/node_modules/@types/node/assert/strict.d.ts b/skills/flight-finder/node_modules/@types/node/assert/strict.d.ts deleted file mode 100644 index 51bb352..0000000 --- a/skills/flight-finder/node_modules/@types/node/assert/strict.d.ts +++ /dev/null @@ -1,105 +0,0 @@ -/** - * In strict assertion mode, non-strict methods behave like their corresponding - * strict methods. For example, `assert.deepEqual()` will behave like - * `assert.deepStrictEqual()`. - * - * In strict assertion mode, error messages for objects display a diff. In legacy - * assertion mode, error messages for objects display the objects, often truncated. - * - * To use strict assertion mode: - * - * ```js - * import { strict as assert } from 'node:assert'; - * ``` - * - * ```js - * import assert from 'node:assert/strict'; - * ``` - * - * Example error diff: - * - * ```js - * import { strict as assert } from 'node:assert'; - * - * assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]); - * // AssertionError: Expected inputs to be strictly deep-equal: - * // + actual - expected ... Lines skipped - * // - * // [ - * // [ - * // ... - * // 2, - * // + 3 - * // - '3' - * // ], - * // ... - * // 5 - * // ] - * ``` - * - * To deactivate the colors, use the `NO_COLOR` or `NODE_DISABLE_COLORS` - * environment variables. This will also deactivate the colors in the REPL. For - * more on color support in terminal environments, read the tty - * [`getColorDepth()`](https://nodejs.org/docs/latest-v25.x/api/tty.html#writestreamgetcolordepthenv) documentation. - * @since v15.0.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/assert/strict.js) - */ -declare module "node:assert/strict" { - import { - Assert, - AssertionError, - AssertionErrorOptions, - AssertOptions, - AssertPredicate, - AssertStrict, - deepStrictEqual, - doesNotMatch, - doesNotReject, - doesNotThrow, - fail, - ifError, - match, - notDeepStrictEqual, - notStrictEqual, - ok, - partialDeepStrictEqual, - rejects, - strictEqual, - throws, - } from "node:assert"; - function strict(value: unknown, message?: string | Error): asserts value; - namespace strict { - export { - Assert, - AssertionError, - AssertionErrorOptions, - AssertOptions, - AssertPredicate, - AssertStrict, - deepStrictEqual, - deepStrictEqual as deepEqual, - doesNotMatch, - doesNotReject, - doesNotThrow, - fail, - ifError, - match, - notDeepStrictEqual, - notDeepStrictEqual as notDeepEqual, - notStrictEqual, - notStrictEqual as notEqual, - ok, - partialDeepStrictEqual, - rejects, - strict, - strictEqual, - strictEqual as equal, - throws, - }; - } - export = strict; -} -declare module "assert/strict" { - import strict = require("node:assert/strict"); - export = strict; -} diff --git a/skills/flight-finder/node_modules/@types/node/async_hooks.d.ts b/skills/flight-finder/node_modules/@types/node/async_hooks.d.ts deleted file mode 100644 index aa692c1..0000000 --- a/skills/flight-finder/node_modules/@types/node/async_hooks.d.ts +++ /dev/null @@ -1,623 +0,0 @@ -/** - * We strongly discourage the use of the `async_hooks` API. - * Other APIs that can cover most of its use cases include: - * - * * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v25.x/api/async_context.html#class-asynclocalstorage) tracks async context - * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v25.x/api/process.html#processgetactiveresourcesinfo) tracks active resources - * - * The `node:async_hooks` module provides an API to track asynchronous resources. - * It can be accessed using: - * - * ```js - * import async_hooks from 'node:async_hooks'; - * ``` - * @experimental - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/async_hooks.js) - */ -declare module "node:async_hooks" { - /** - * ```js - * import { executionAsyncId } from 'node:async_hooks'; - * import fs from 'node:fs'; - * - * console.log(executionAsyncId()); // 1 - bootstrap - * const path = '.'; - * fs.open(path, 'r', (err, fd) => { - * console.log(executionAsyncId()); // 6 - open() - * }); - * ``` - * - * The ID returned from `executionAsyncId()` is related to execution timing, not - * causality (which is covered by `triggerAsyncId()`): - * - * ```js - * const server = net.createServer((conn) => { - * // Returns the ID of the server, not of the new connection, because the - * // callback runs in the execution scope of the server's MakeCallback(). - * async_hooks.executionAsyncId(); - * - * }).listen(port, () => { - * // Returns the ID of a TickObject (process.nextTick()) because all - * // callbacks passed to .listen() are wrapped in a nextTick(). - * async_hooks.executionAsyncId(); - * }); - * ``` - * - * Promise contexts may not get precise `executionAsyncIds` by default. - * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking). - * @since v8.1.0 - * @return The `asyncId` of the current execution context. Useful to track when something calls. - */ - function executionAsyncId(): number; - /** - * Resource objects returned by `executionAsyncResource()` are most often internal - * Node.js handle objects with undocumented APIs. Using any functions or properties - * on the object is likely to crash your application and should be avoided. - * - * Using `executionAsyncResource()` in the top-level execution context will - * return an empty object as there is no handle or request object to use, - * but having an object representing the top-level can be helpful. - * - * ```js - * import { open } from 'node:fs'; - * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks'; - * - * console.log(executionAsyncId(), executionAsyncResource()); // 1 {} - * open(new URL(import.meta.url), 'r', (err, fd) => { - * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap - * }); - * ``` - * - * This can be used to implement continuation local storage without the - * use of a tracking `Map` to store the metadata: - * - * ```js - * import { createServer } from 'node:http'; - * import { - * executionAsyncId, - * executionAsyncResource, - * createHook, - * } from 'node:async_hooks'; - * const sym = Symbol('state'); // Private symbol to avoid pollution - * - * createHook({ - * init(asyncId, type, triggerAsyncId, resource) { - * const cr = executionAsyncResource(); - * if (cr) { - * resource[sym] = cr[sym]; - * } - * }, - * }).enable(); - * - * const server = createServer((req, res) => { - * executionAsyncResource()[sym] = { state: req.url }; - * setTimeout(function() { - * res.end(JSON.stringify(executionAsyncResource()[sym])); - * }, 100); - * }).listen(3000); - * ``` - * @since v13.9.0, v12.17.0 - * @return The resource representing the current execution. Useful to store data within the resource. - */ - function executionAsyncResource(): object; - /** - * ```js - * const server = net.createServer((conn) => { - * // The resource that caused (or triggered) this callback to be called - * // was that of the new connection. Thus the return value of triggerAsyncId() - * // is the asyncId of "conn". - * async_hooks.triggerAsyncId(); - * - * }).listen(port, () => { - * // Even though all callbacks passed to .listen() are wrapped in a nextTick() - * // the callback itself exists because the call to the server's .listen() - * // was made. So the return value would be the ID of the server. - * async_hooks.triggerAsyncId(); - * }); - * ``` - * - * Promise contexts may not get valid `triggerAsyncId`s by default. See - * the section on [promise execution tracking](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html#promise-execution-tracking). - * @return The ID of the resource responsible for calling the callback that is currently being executed. - */ - function triggerAsyncId(): number; - interface HookCallbacks { - /** - * Called when a class is constructed that has the possibility to emit an asynchronous event. - * @param asyncId A unique ID for the async resource - * @param type The type of the async resource - * @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created - * @param resource Reference to the resource representing the async operation, needs to be released during destroy - */ - init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void; - /** - * When an asynchronous operation is initiated or completes a callback is called to notify the user. - * The before callback is called just before said callback is executed. - * @param asyncId the unique identifier assigned to the resource about to execute the callback. - */ - before?(asyncId: number): void; - /** - * Called immediately after the callback specified in `before` is completed. - * - * If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs. - * @param asyncId the unique identifier assigned to the resource which has executed the callback. - */ - after?(asyncId: number): void; - /** - * Called when a promise has resolve() called. This may not be in the same execution id - * as the promise itself. - * @param asyncId the unique id for the promise that was resolve()d. - */ - promiseResolve?(asyncId: number): void; - /** - * Called after the resource corresponding to asyncId is destroyed - * @param asyncId a unique ID for the async resource - */ - destroy?(asyncId: number): void; - } - interface AsyncHook { - /** - * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop. - */ - enable(): this; - /** - * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled. - */ - disable(): this; - } - /** - * Registers functions to be called for different lifetime events of each async - * operation. - * - * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the - * respective asynchronous event during a resource's lifetime. - * - * All callbacks are optional. For example, if only resource cleanup needs to - * be tracked, then only the `destroy` callback needs to be passed. The - * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section. - * - * ```js - * import { createHook } from 'node:async_hooks'; - * - * const asyncHook = createHook({ - * init(asyncId, type, triggerAsyncId, resource) { }, - * destroy(asyncId) { }, - * }); - * ``` - * - * The callbacks will be inherited via the prototype chain: - * - * ```js - * class MyAsyncCallbacks { - * init(asyncId, type, triggerAsyncId, resource) { } - * destroy(asyncId) {} - * } - * - * class MyAddedCallbacks extends MyAsyncCallbacks { - * before(asyncId) { } - * after(asyncId) { } - * } - * - * const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); - * ``` - * - * Because promises are asynchronous resources whose lifecycle is tracked - * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises. - * @since v8.1.0 - * @param callbacks The `Hook Callbacks` to register - * @return Instance used for disabling and enabling hooks - */ - function createHook(callbacks: HookCallbacks): AsyncHook; - interface AsyncResourceOptions { - /** - * The ID of the execution context that created this async event. - * @default executionAsyncId() - */ - triggerAsyncId?: number | undefined; - /** - * Disables automatic `emitDestroy` when the object is garbage collected. - * This usually does not need to be set (even if `emitDestroy` is called - * manually), unless the resource's `asyncId` is retrieved and the - * sensitive API's `emitDestroy` is called with it. - * @default false - */ - requireManualDestroy?: boolean | undefined; - } - /** - * The class `AsyncResource` is designed to be extended by the embedder's async - * resources. Using this, users can easily trigger the lifetime events of their - * own resources. - * - * The `init` hook will trigger when an `AsyncResource` is instantiated. - * - * The following is an overview of the `AsyncResource` API. - * - * ```js - * import { AsyncResource, executionAsyncId } from 'node:async_hooks'; - * - * // AsyncResource() is meant to be extended. Instantiating a - * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then - * // async_hook.executionAsyncId() is used. - * const asyncResource = new AsyncResource( - * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }, - * ); - * - * // Run a function in the execution context of the resource. This will - * // * establish the context of the resource - * // * trigger the AsyncHooks before callbacks - * // * call the provided function `fn` with the supplied arguments - * // * trigger the AsyncHooks after callbacks - * // * restore the original execution context - * asyncResource.runInAsyncScope(fn, thisArg, ...args); - * - * // Call AsyncHooks destroy callbacks. - * asyncResource.emitDestroy(); - * - * // Return the unique ID assigned to the AsyncResource instance. - * asyncResource.asyncId(); - * - * // Return the trigger ID for the AsyncResource instance. - * asyncResource.triggerAsyncId(); - * ``` - */ - class AsyncResource { - /** - * AsyncResource() is meant to be extended. Instantiating a - * new AsyncResource() also triggers init. If triggerAsyncId is omitted then - * async_hook.executionAsyncId() is used. - * @param type The type of async event. - * @param triggerAsyncId The ID of the execution context that created - * this async event (default: `executionAsyncId()`), or an - * AsyncResourceOptions object (since v9.3.0) - */ - constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions); - /** - * Binds the given function to the current execution context. - * @since v14.8.0, v12.19.0 - * @param fn The function to bind to the current execution context. - * @param type An optional name to associate with the underlying `AsyncResource`. - */ - static bind any, ThisArg>( - fn: Func, - type?: string, - thisArg?: ThisArg, - ): Func; - /** - * Binds the given function to execute to this `AsyncResource`'s scope. - * @since v14.8.0, v12.19.0 - * @param fn The function to bind to the current `AsyncResource`. - */ - bind any>(fn: Func): Func; - /** - * Call the provided function with the provided arguments in the execution context - * of the async resource. This will establish the context, trigger the AsyncHooks - * before callbacks, call the function, trigger the AsyncHooks after callbacks, and - * then restore the original execution context. - * @since v9.6.0 - * @param fn The function to call in the execution context of this async resource. - * @param thisArg The receiver to be used for the function call. - * @param args Optional arguments to pass to the function. - */ - runInAsyncScope( - fn: (this: This, ...args: any[]) => Result, - thisArg?: This, - ...args: any[] - ): Result; - /** - * Call all `destroy` hooks. This should only ever be called once. An error will - * be thrown if it is called more than once. This **must** be manually called. If - * the resource is left to be collected by the GC then the `destroy` hooks will - * never be called. - * @return A reference to `asyncResource`. - */ - emitDestroy(): this; - /** - * @return The unique `asyncId` assigned to the resource. - */ - asyncId(): number; - /** - * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor. - */ - triggerAsyncId(): number; - } - interface AsyncLocalStorageOptions { - /** - * The default value to be used when no store is provided. - */ - defaultValue?: any; - /** - * A name for the `AsyncLocalStorage` value. - */ - name?: string | undefined; - } - /** - * This class creates stores that stay coherent through asynchronous operations. - * - * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory - * safe implementation that involves significant optimizations that are non-obvious - * to implement. - * - * The following example uses `AsyncLocalStorage` to build a simple logger - * that assigns IDs to incoming HTTP requests and includes them in messages - * logged within each request. - * - * ```js - * import http from 'node:http'; - * import { AsyncLocalStorage } from 'node:async_hooks'; - * - * const asyncLocalStorage = new AsyncLocalStorage(); - * - * function logWithId(msg) { - * const id = asyncLocalStorage.getStore(); - * console.log(`${id !== undefined ? id : '-'}:`, msg); - * } - * - * let idSeq = 0; - * http.createServer((req, res) => { - * asyncLocalStorage.run(idSeq++, () => { - * logWithId('start'); - * // Imagine any chain of async operations here - * setImmediate(() => { - * logWithId('finish'); - * res.end(); - * }); - * }); - * }).listen(8080); - * - * http.get('http://localhost:8080'); - * http.get('http://localhost:8080'); - * // Prints: - * // 0: start - * // 0: finish - * // 1: start - * // 1: finish - * ``` - * - * Each instance of `AsyncLocalStorage` maintains an independent storage context. - * Multiple instances can safely exist simultaneously without risk of interfering - * with each other's data. - * @since v13.10.0, v12.17.0 - */ - class AsyncLocalStorage { - /** - * Creates a new instance of `AsyncLocalStorage`. Store is only provided within a - * `run()` call or after an `enterWith()` call. - */ - constructor(options?: AsyncLocalStorageOptions); - /** - * Binds the given function to the current execution context. - * @since v19.8.0 - * @param fn The function to bind to the current execution context. - * @return A new function that calls `fn` within the captured execution context. - */ - static bind any>(fn: Func): Func; - /** - * Captures the current execution context and returns a function that accepts a - * function as an argument. Whenever the returned function is called, it - * calls the function passed to it within the captured context. - * - * ```js - * const asyncLocalStorage = new AsyncLocalStorage(); - * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot()); - * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore())); - * console.log(result); // returns 123 - * ``` - * - * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple - * async context tracking purposes, for example: - * - * ```js - * class Foo { - * #runInAsyncScope = AsyncLocalStorage.snapshot(); - * - * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); } - * } - * - * const foo = asyncLocalStorage.run(123, () => new Foo()); - * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123 - * ``` - * @since v19.8.0 - * @return A new function with the signature `(fn: (...args) : R, ...args) : R`. - */ - static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R; - /** - * Disables the instance of `AsyncLocalStorage`. All subsequent calls - * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again. - * - * When calling `asyncLocalStorage.disable()`, all current contexts linked to the - * instance will be exited. - * - * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores - * provided by the `asyncLocalStorage`, as those objects are garbage collected - * along with the corresponding async resources. - * - * Use this method when the `asyncLocalStorage` is not in use anymore - * in the current process. - * @since v13.10.0, v12.17.0 - * @experimental - */ - disable(): void; - /** - * Returns the current store. - * If called outside of an asynchronous context initialized by - * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it - * returns `undefined`. - * @since v13.10.0, v12.17.0 - */ - getStore(): T | undefined; - /** - * The name of the `AsyncLocalStorage` instance if provided. - * @since v24.0.0 - */ - readonly name: string; - /** - * Runs a function synchronously within a context and returns its - * return value. The store is not accessible outside of the callback function. - * The store is accessible to any asynchronous operations created within the - * callback. - * - * The optional `args` are passed to the callback function. - * - * If the callback function throws an error, the error is thrown by `run()` too. - * The stacktrace is not impacted by this call and the context is exited. - * - * Example: - * - * ```js - * const store = { id: 2 }; - * try { - * asyncLocalStorage.run(store, () => { - * asyncLocalStorage.getStore(); // Returns the store object - * setTimeout(() => { - * asyncLocalStorage.getStore(); // Returns the store object - * }, 200); - * throw new Error(); - * }); - * } catch (e) { - * asyncLocalStorage.getStore(); // Returns undefined - * // The error will be caught here - * } - * ``` - * @since v13.10.0, v12.17.0 - */ - run(store: T, callback: () => R): R; - run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R; - /** - * Runs a function synchronously outside of a context and returns its - * return value. The store is not accessible within the callback function or - * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`. - * - * The optional `args` are passed to the callback function. - * - * If the callback function throws an error, the error is thrown by `exit()` too. - * The stacktrace is not impacted by this call and the context is re-entered. - * - * Example: - * - * ```js - * // Within a call to run - * try { - * asyncLocalStorage.getStore(); // Returns the store object or value - * asyncLocalStorage.exit(() => { - * asyncLocalStorage.getStore(); // Returns undefined - * throw new Error(); - * }); - * } catch (e) { - * asyncLocalStorage.getStore(); // Returns the same object or value - * // The error will be caught here - * } - * ``` - * @since v13.10.0, v12.17.0 - * @experimental - */ - exit(callback: (...args: TArgs) => R, ...args: TArgs): R; - /** - * Transitions into the context for the remainder of the current - * synchronous execution and then persists the store through any following - * asynchronous calls. - * - * Example: - * - * ```js - * const store = { id: 1 }; - * // Replaces previous store with the given store object - * asyncLocalStorage.enterWith(store); - * asyncLocalStorage.getStore(); // Returns the store object - * someAsyncOperation(() => { - * asyncLocalStorage.getStore(); // Returns the same object - * }); - * ``` - * - * This transition will continue for the _entire_ synchronous execution. - * This means that if, for example, the context is entered within an event - * handler subsequent event handlers will also run within that context unless - * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons - * to use the latter method. - * - * ```js - * const store = { id: 1 }; - * - * emitter.on('my-event', () => { - * asyncLocalStorage.enterWith(store); - * }); - * emitter.on('my-event', () => { - * asyncLocalStorage.getStore(); // Returns the same object - * }); - * - * asyncLocalStorage.getStore(); // Returns undefined - * emitter.emit('my-event'); - * asyncLocalStorage.getStore(); // Returns the same object - * ``` - * @since v13.11.0, v12.17.0 - * @experimental - */ - enterWith(store: T): void; - } - /** - * @since v17.2.0, v16.14.0 - * @return A map of provider types to the corresponding numeric id. - * This map contains all the event types that might be emitted by the `async_hooks.init()` event. - */ - namespace asyncWrapProviders { - const NONE: number; - const DIRHANDLE: number; - const DNSCHANNEL: number; - const ELDHISTOGRAM: number; - const FILEHANDLE: number; - const FILEHANDLECLOSEREQ: number; - const FIXEDSIZEBLOBCOPY: number; - const FSEVENTWRAP: number; - const FSREQCALLBACK: number; - const FSREQPROMISE: number; - const GETADDRINFOREQWRAP: number; - const GETNAMEINFOREQWRAP: number; - const HEAPSNAPSHOT: number; - const HTTP2SESSION: number; - const HTTP2STREAM: number; - const HTTP2PING: number; - const HTTP2SETTINGS: number; - const HTTPINCOMINGMESSAGE: number; - const HTTPCLIENTREQUEST: number; - const JSSTREAM: number; - const JSUDPWRAP: number; - const MESSAGEPORT: number; - const PIPECONNECTWRAP: number; - const PIPESERVERWRAP: number; - const PIPEWRAP: number; - const PROCESSWRAP: number; - const PROMISE: number; - const QUERYWRAP: number; - const SHUTDOWNWRAP: number; - const SIGNALWRAP: number; - const STATWATCHER: number; - const STREAMPIPE: number; - const TCPCONNECTWRAP: number; - const TCPSERVERWRAP: number; - const TCPWRAP: number; - const TTYWRAP: number; - const UDPSENDWRAP: number; - const UDPWRAP: number; - const SIGINTWATCHDOG: number; - const WORKER: number; - const WORKERHEAPSNAPSHOT: number; - const WRITEWRAP: number; - const ZLIB: number; - const CHECKPRIMEREQUEST: number; - const PBKDF2REQUEST: number; - const KEYPAIRGENREQUEST: number; - const KEYGENREQUEST: number; - const KEYEXPORTREQUEST: number; - const CIPHERREQUEST: number; - const DERIVEBITSREQUEST: number; - const HASHREQUEST: number; - const RANDOMBYTESREQUEST: number; - const RANDOMPRIMEREQUEST: number; - const SCRYPTREQUEST: number; - const SIGNREQUEST: number; - const TLSWRAP: number; - const VERIFYREQUEST: number; - } -} -declare module "async_hooks" { - export * from "node:async_hooks"; -} diff --git a/skills/flight-finder/node_modules/@types/node/buffer.buffer.d.ts b/skills/flight-finder/node_modules/@types/node/buffer.buffer.d.ts deleted file mode 100644 index a3c2304..0000000 --- a/skills/flight-finder/node_modules/@types/node/buffer.buffer.d.ts +++ /dev/null @@ -1,466 +0,0 @@ -declare module "node:buffer" { - type ImplicitArrayBuffer> = T extends - { valueOf(): infer V extends ArrayBufferLike } ? V : T; - global { - interface BufferConstructor { - // see buffer.d.ts for implementation shared with all TypeScript versions - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. - */ - new(str: string, encoding?: BufferEncoding): Buffer; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). - */ - new(size: number): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. - */ - new(array: ArrayLike): Buffer; - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}/{SharedArrayBuffer}. - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. - */ - new(arrayBuffer: TArrayBuffer): Buffer; - /** - * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. - * Array entries outside that range will be truncated to fit into it. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. - * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); - * ``` - * - * If `array` is an `Array`-like object (that is, one with a `length` property of - * type `number`), it is treated as if it is an array, unless it is a `Buffer` or - * a `Uint8Array`. This means all other `TypedArray` variants get treated as an - * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use - * `Buffer.copyBytesFrom()`. - * - * A `TypeError` will be thrown if `array` is not an `Array` or another type - * appropriate for `Buffer.from()` variants. - * - * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal - * `Buffer` pool like `Buffer.allocUnsafe()` does. - * @since v5.10.0 - */ - from(array: WithImplicitCoercion>): Buffer; - /** - * This creates a view of the `ArrayBuffer` without copying the underlying - * memory. For example, when passed a reference to the `.buffer` property of a - * `TypedArray` instance, the newly created `Buffer` will share the same - * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const arr = new Uint16Array(2); - * - * arr[0] = 5000; - * arr[1] = 4000; - * - * // Shares memory with `arr`. - * const buf = Buffer.from(arr.buffer); - * - * console.log(buf); - * // Prints: - * - * // Changing the original Uint16Array changes the Buffer also. - * arr[1] = 6000; - * - * console.log(buf); - * // Prints: - * ``` - * - * The optional `byteOffset` and `length` arguments specify a memory range within - * the `arrayBuffer` that will be shared by the `Buffer`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const ab = new ArrayBuffer(10); - * const buf = Buffer.from(ab, 0, 2); - * - * console.log(buf.length); - * // Prints: 2 - * ``` - * - * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a - * `SharedArrayBuffer` or another type appropriate for `Buffer.from()` - * variants. - * - * It is important to remember that a backing `ArrayBuffer` can cover a range - * of memory that extends beyond the bounds of a `TypedArray` view. A new - * `Buffer` created using the `buffer` property of a `TypedArray` may extend - * beyond the range of the `TypedArray`: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements - * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements - * console.log(arrA.buffer === arrB.buffer); // true - * - * const buf = Buffer.from(arrB.buffer); - * console.log(buf); - * // Prints: - * ``` - * @since v5.10.0 - * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the - * `.buffer` property of a `TypedArray`. - * @param byteOffset Index of first byte to expose. **Default:** `0`. - * @param length Number of bytes to expose. **Default:** - * `arrayBuffer.byteLength - byteOffset`. - */ - from>( - arrayBuffer: TArrayBuffer, - byteOffset?: number, - length?: number, - ): Buffer>; - /** - * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies - * the character encoding to be used when converting `string` into bytes. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('this is a tést'); - * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); - * - * console.log(buf1.toString()); - * // Prints: this is a tést - * console.log(buf2.toString()); - * // Prints: this is a tést - * console.log(buf1.toString('latin1')); - * // Prints: this is a tést - * ``` - * - * A `TypeError` will be thrown if `string` is not a string or another type - * appropriate for `Buffer.from()` variants. - * - * `Buffer.from(string)` may also use the internal `Buffer` pool like - * `Buffer.allocUnsafe()` does. - * @since v5.10.0 - * @param string A string to encode. - * @param encoding The encoding of `string`. **Default:** `'utf8'`. - */ - from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer; - from(arrayOrString: WithImplicitCoercion | string>): Buffer; - /** - * Creates a new Buffer using the passed {data} - * @param values to create a new Buffer - */ - of(...items: number[]): Buffer; - /** - * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together. - * - * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned. - * - * If `totalLength` is not provided, it is calculated from the `Buffer` instances - * in `list` by adding their lengths. - * - * If `totalLength` is provided, it is coerced to an unsigned integer. If the - * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is - * truncated to `totalLength`. If the combined length of the `Buffer`s in `list` is - * less than `totalLength`, the remaining space is filled with zeros. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create a single `Buffer` from a list of three `Buffer` instances. - * - * const buf1 = Buffer.alloc(10); - * const buf2 = Buffer.alloc(14); - * const buf3 = Buffer.alloc(18); - * const totalLength = buf1.length + buf2.length + buf3.length; - * - * console.log(totalLength); - * // Prints: 42 - * - * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); - * - * console.log(bufA); - * // Prints: - * console.log(bufA.length); - * // Prints: 42 - * ``` - * - * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. - * @since v0.7.11 - * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. - * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. - */ - concat(list: readonly Uint8Array[], totalLength?: number): Buffer; - /** - * Copies the underlying memory of `view` into a new `Buffer`. - * - * ```js - * const u16 = new Uint16Array([0, 0xffff]); - * const buf = Buffer.copyBytesFrom(u16, 1, 1); - * u16[1] = 0; - * console.log(buf.length); // 2 - * console.log(buf[0]); // 255 - * console.log(buf[1]); // 255 - * ``` - * @since v19.8.0 - * @param view The {TypedArray} to copy. - * @param [offset=0] The starting offset within `view`. - * @param [length=view.length - offset] The number of elements from `view` to copy. - */ - copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(5); - * - * console.log(buf); - * // Prints: - * ``` - * - * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. - * - * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(5, 'a'); - * - * console.log(buf); - * // Prints: - * ``` - * - * If both `fill` and `encoding` are specified, the allocated `Buffer` will be - * initialized by calling `buf.fill(fill, encoding)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); - * - * console.log(buf); - * // Prints: - * ``` - * - * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance - * contents will never contain sensitive data from previous allocations, including - * data that might not have been allocated for `Buffer`s. - * - * A `TypeError` will be thrown if `size` is not a number. - * @since v5.10.0 - * @param size The desired length of the new `Buffer`. - * @param [fill=0] A value to pre-fill the new `Buffer` with. - * @param [encoding='utf8'] If `fill` is a string, this is its encoding. - */ - alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. - * - * The underlying memory for `Buffer` instances created in this way is _not_ - * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(10); - * - * console.log(buf); - * // Prints (contents may vary): - * - * buf.fill(0); - * - * console.log(buf); - * // Prints: - * ``` - * - * A `TypeError` will be thrown if `size` is not a number. - * - * The `Buffer` module pre-allocates an internal `Buffer` instance of - * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`, - * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two). - * - * Use of this pre-allocated internal memory pool is a key difference between - * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. - * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less - * than or equal to half `Buffer.poolSize`. The - * difference is subtle but can be important when an application requires the - * additional performance that `Buffer.allocUnsafe()` provides. - * @since v5.10.0 - * @param size The desired length of the new `Buffer`. - */ - allocUnsafe(size: number): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if - * `size` is 0. - * - * The underlying memory for `Buffer` instances created in this way is _not_ - * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize - * such `Buffer` instances with zeroes. - * - * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, - * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This - * allows applications to avoid the garbage collection overhead of creating many - * individually allocated `Buffer` instances. This approach improves both - * performance and memory usage by eliminating the need to track and clean up as - * many individual `ArrayBuffer` objects. - * - * However, in the case where a developer may need to retain a small chunk of - * memory from a pool for an indeterminate amount of time, it may be appropriate - * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and - * then copying out the relevant bits. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Need to keep around a few small chunks of memory. - * const store = []; - * - * socket.on('readable', () => { - * let data; - * while (null !== (data = readable.read())) { - * // Allocate for retained data. - * const sb = Buffer.allocUnsafeSlow(10); - * - * // Copy the data into the new allocation. - * data.copy(sb, 0, 0, 10); - * - * store.push(sb); - * } - * }); - * ``` - * - * A `TypeError` will be thrown if `size` is not a number. - * @since v5.12.0 - * @param size The desired length of the new `Buffer`. - */ - allocUnsafeSlow(size: number): Buffer; - } - interface Buffer extends Uint8Array { - // see buffer.d.ts for implementation shared with all TypeScript versions - - /** - * Returns a new `Buffer` that references the same memory as the original, but - * offset and cropped by the `start` and `end` indices. - * - * This method is not compatible with the `Uint8Array.prototype.slice()`, - * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('buffer'); - * - * const copiedBuf = Uint8Array.prototype.slice.call(buf); - * copiedBuf[0]++; - * console.log(copiedBuf.toString()); - * // Prints: cuffer - * - * console.log(buf.toString()); - * // Prints: buffer - * - * // With buf.slice(), the original buffer is modified. - * const notReallyCopiedBuf = buf.slice(); - * notReallyCopiedBuf[0]++; - * console.log(notReallyCopiedBuf.toString()); - * // Prints: cuffer - * console.log(buf.toString()); - * // Also prints: cuffer (!) - * ``` - * @since v0.3.0 - * @deprecated Use `subarray` instead. - * @param [start=0] Where the new `Buffer` will start. - * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). - */ - slice(start?: number, end?: number): Buffer; - /** - * Returns a new `Buffer` that references the same memory as the original, but - * offset and cropped by the `start` and `end` indices. - * - * Specifying `end` greater than `buf.length` will return the same result as - * that of `end` equal to `buf.length`. - * - * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). - * - * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte - * // from the original `Buffer`. - * - * const buf1 = Buffer.allocUnsafe(26); - * - * for (let i = 0; i < 26; i++) { - * // 97 is the decimal ASCII value for 'a'. - * buf1[i] = i + 97; - * } - * - * const buf2 = buf1.subarray(0, 3); - * - * console.log(buf2.toString('ascii', 0, buf2.length)); - * // Prints: abc - * - * buf1[0] = 33; - * - * console.log(buf2.toString('ascii', 0, buf2.length)); - * // Prints: !bc - * ``` - * - * Specifying negative indexes causes the slice to be generated relative to the - * end of `buf` rather than the beginning. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('buffer'); - * - * console.log(buf.subarray(-6, -1).toString()); - * // Prints: buffe - * // (Equivalent to buf.subarray(0, 5).) - * - * console.log(buf.subarray(-6, -2).toString()); - * // Prints: buff - * // (Equivalent to buf.subarray(0, 4).) - * - * console.log(buf.subarray(-5, -2).toString()); - * // Prints: uff - * // (Equivalent to buf.subarray(1, 4).) - * ``` - * @since v3.0.0 - * @param [start=0] Where the new `Buffer` will start. - * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). - */ - subarray(start?: number, end?: number): Buffer; - } - // TODO: remove globals in future version - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedBuffer = Buffer; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type AllowSharedBuffer = Buffer; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/buffer.d.ts b/skills/flight-finder/node_modules/@types/node/buffer.d.ts deleted file mode 100644 index bb0f004..0000000 --- a/skills/flight-finder/node_modules/@types/node/buffer.d.ts +++ /dev/null @@ -1,1810 +0,0 @@ -/** - * `Buffer` objects are used to represent a fixed-length sequence of bytes. Many - * Node.js APIs support `Buffer`s. - * - * The `Buffer` class is a subclass of JavaScript's [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) class and - * extends it with methods that cover additional use cases. Node.js APIs accept - * plain [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) s wherever `Buffer`s are supported as well. - * - * While the `Buffer` class is available within the global scope, it is still - * recommended to explicitly reference it via an import or require statement. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Creates a zero-filled Buffer of length 10. - * const buf1 = Buffer.alloc(10); - * - * // Creates a Buffer of length 10, - * // filled with bytes which all have the value `1`. - * const buf2 = Buffer.alloc(10, 1); - * - * // Creates an uninitialized buffer of length 10. - * // This is faster than calling Buffer.alloc() but the returned - * // Buffer instance might contain old data that needs to be - * // overwritten using fill(), write(), or other functions that fill the Buffer's - * // contents. - * const buf3 = Buffer.allocUnsafe(10); - * - * // Creates a Buffer containing the bytes [1, 2, 3]. - * const buf4 = Buffer.from([1, 2, 3]); - * - * // Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries - * // are all truncated using `(value & 255)` to fit into the range 0–255. - * const buf5 = Buffer.from([257, 257.5, -255, '1']); - * - * // Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést': - * // [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation) - * // [116, 195, 169, 115, 116] (in decimal notation) - * const buf6 = Buffer.from('tést'); - * - * // Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74]. - * const buf7 = Buffer.from('tést', 'latin1'); - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/buffer.js) - */ -declare module "node:buffer" { - import { ReadableStream } from "node:stream/web"; - /** - * This function returns `true` if `input` contains only valid UTF-8-encoded data, - * including the case in which `input` is empty. - * - * Throws if the `input` is a detached array buffer. - * @since v19.4.0, v18.14.0 - * @param input The input to validate. - */ - export function isUtf8(input: ArrayBuffer | NodeJS.TypedArray): boolean; - /** - * This function returns `true` if `input` contains only valid ASCII-encoded data, - * including the case in which `input` is empty. - * - * Throws if the `input` is a detached array buffer. - * @since v19.6.0, v18.15.0 - * @param input The input to validate. - */ - export function isAscii(input: ArrayBuffer | NodeJS.TypedArray): boolean; - export let INSPECT_MAX_BYTES: number; - export const kMaxLength: number; - export const kStringMaxLength: number; - export const constants: { - MAX_LENGTH: number; - MAX_STRING_LENGTH: number; - }; - export type TranscodeEncoding = - | "ascii" - | "utf8" - | "utf-8" - | "utf16le" - | "utf-16le" - | "ucs2" - | "ucs-2" - | "latin1" - | "binary"; - /** - * Re-encodes the given `Buffer` or `Uint8Array` instance from one character - * encoding to another. Returns a new `Buffer` instance. - * - * Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if - * conversion from `fromEnc` to `toEnc` is not permitted. - * - * Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`, `'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`. - * - * The transcoding process will use substitution characters if a given byte - * sequence cannot be adequately represented in the target encoding. For instance: - * - * ```js - * import { Buffer, transcode } from 'node:buffer'; - * - * const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii'); - * console.log(newBuf.toString('ascii')); - * // Prints: '?' - * ``` - * - * Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced - * with `?` in the transcoded `Buffer`. - * @since v7.1.0 - * @param source A `Buffer` or `Uint8Array` instance. - * @param fromEnc The current encoding. - * @param toEnc To target encoding. - */ - export function transcode( - source: Uint8Array, - fromEnc: TranscodeEncoding, - toEnc: TranscodeEncoding, - ): NonSharedBuffer; - /** - * Resolves a `'blob:nodedata:...'` an associated `Blob` object registered using - * a prior call to `URL.createObjectURL()`. - * @since v16.7.0 - * @param id A `'blob:nodedata:...` URL string returned by a prior call to `URL.createObjectURL()`. - */ - export function resolveObjectURL(id: string): Blob | undefined; - export { type AllowSharedBuffer, Buffer, type NonSharedBuffer }; - /** @deprecated This alias will be removed in a future version. Use the canonical `BlobPropertyBag` instead. */ - // TODO: remove in future major - export interface BlobOptions extends BlobPropertyBag {} - /** @deprecated This alias will be removed in a future version. Use the canonical `FilePropertyBag` instead. */ - export interface FileOptions extends FilePropertyBag {} - export type WithImplicitCoercion = - | T - | { valueOf(): T } - | (T extends string ? { [Symbol.toPrimitive](hint: "string"): T } : never); - global { - namespace NodeJS { - export { BufferEncoding }; - } - // Buffer class - type BufferEncoding = - | "ascii" - | "utf8" - | "utf-8" - | "utf16le" - | "utf-16le" - | "ucs2" - | "ucs-2" - | "base64" - | "base64url" - | "latin1" - | "binary" - | "hex"; - /** - * Raw data is stored in instances of the Buffer class. - * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. - * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'base64url'|'binary'(deprecated)|'hex' - */ - interface BufferConstructor { - // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later - // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier - - /** - * Returns `true` if `obj` is a `Buffer`, `false` otherwise. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * Buffer.isBuffer(Buffer.alloc(10)); // true - * Buffer.isBuffer(Buffer.from('foo')); // true - * Buffer.isBuffer('a string'); // false - * Buffer.isBuffer([]); // false - * Buffer.isBuffer(new Uint8Array(1024)); // false - * ``` - * @since v0.1.101 - */ - isBuffer(obj: any): obj is Buffer; - /** - * Returns `true` if `encoding` is the name of a supported character encoding, - * or `false` otherwise. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * console.log(Buffer.isEncoding('utf8')); - * // Prints: true - * - * console.log(Buffer.isEncoding('hex')); - * // Prints: true - * - * console.log(Buffer.isEncoding('utf/8')); - * // Prints: false - * - * console.log(Buffer.isEncoding('')); - * // Prints: false - * ``` - * @since v0.9.1 - * @param encoding A character encoding name to check. - */ - isEncoding(encoding: string): encoding is BufferEncoding; - /** - * Returns the byte length of a string when encoded using `encoding`. - * This is not the same as [`String.prototype.length`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length), which does not account - * for the encoding that is used to convert the string into bytes. - * - * For `'base64'`, `'base64url'`, and `'hex'`, this function assumes valid input. - * For strings that contain non-base64/hex-encoded data (e.g. whitespace), the - * return value might be greater than the length of a `Buffer` created from the - * string. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const str = '\u00bd + \u00bc = \u00be'; - * - * console.log(`${str}: ${str.length} characters, ` + - * `${Buffer.byteLength(str, 'utf8')} bytes`); - * // Prints: ½ + ¼ = ¾: 9 characters, 12 bytes - * ``` - * - * When `string` is a - * `Buffer`/[`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView)/[`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/- - * Reference/Global_Objects/TypedArray)/[`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)/[`SharedArrayBuffer`](https://develop- - * er.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer), the byte length as reported by `.byteLength`is returned. - * @since v0.1.90 - * @param string A value to calculate the length of. - * @param [encoding='utf8'] If `string` is a string, this is its encoding. - * @return The number of bytes contained within `string`. - */ - byteLength( - string: string | NodeJS.ArrayBufferView | ArrayBufferLike, - encoding?: BufferEncoding, - ): number; - /** - * Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of `Buffer` instances. This is equivalent to calling `buf1.compare(buf2)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('1234'); - * const buf2 = Buffer.from('0123'); - * const arr = [buf1, buf2]; - * - * console.log(arr.sort(Buffer.compare)); - * // Prints: [ , ] - * // (This result is equal to: [buf2, buf1].) - * ``` - * @since v0.11.13 - * @return Either `-1`, `0`, or `1`, depending on the result of the comparison. See `compare` for details. - */ - compare(buf1: Uint8Array, buf2: Uint8Array): -1 | 0 | 1; - /** - * This is the size (in bytes) of pre-allocated internal `Buffer` instances used - * for pooling. This value may be modified. - * @since v0.11.3 - */ - poolSize: number; - } - interface Buffer { - // see buffer.buffer.d.ts for implementation specific to TypeScript 5.7 and later - // see ts5.6/buffer.buffer.d.ts for implementation specific to TypeScript 5.6 and earlier - - /** - * Writes `string` to `buf` at `offset` according to the character encoding in`encoding`. The `length` parameter is the number of bytes to write. If `buf` did - * not contain enough space to fit the entire string, only part of `string` will be - * written. However, partially encoded characters will not be written. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(256); - * - * const len = buf.write('\u00bd + \u00bc = \u00be', 0); - * - * console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`); - * // Prints: 12 bytes: ½ + ¼ = ¾ - * - * const buffer = Buffer.alloc(10); - * - * const length = buffer.write('abcd', 8); - * - * console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`); - * // Prints: 2 bytes : ab - * ``` - * @since v0.1.90 - * @param string String to write to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write `string`. - * @param [length=buf.length - offset] Maximum number of bytes to write (written bytes will not exceed `buf.length - offset`). - * @param [encoding='utf8'] The character encoding of `string`. - * @return Number of bytes written. - */ - write(string: string, encoding?: BufferEncoding): number; - write(string: string, offset: number, encoding?: BufferEncoding): number; - write(string: string, offset: number, length: number, encoding?: BufferEncoding): number; - /** - * Decodes `buf` to a string according to the specified character encoding in`encoding`. `start` and `end` may be passed to decode only a subset of `buf`. - * - * If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8, - * then each invalid byte is replaced with the replacement character `U+FFFD`. - * - * The maximum length of a string instance (in UTF-16 code units) is available - * as {@link constants.MAX_STRING_LENGTH}. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.allocUnsafe(26); - * - * for (let i = 0; i < 26; i++) { - * // 97 is the decimal ASCII value for 'a'. - * buf1[i] = i + 97; - * } - * - * console.log(buf1.toString('utf8')); - * // Prints: abcdefghijklmnopqrstuvwxyz - * console.log(buf1.toString('utf8', 0, 5)); - * // Prints: abcde - * - * const buf2 = Buffer.from('tést'); - * - * console.log(buf2.toString('hex')); - * // Prints: 74c3a97374 - * console.log(buf2.toString('utf8', 0, 3)); - * // Prints: té - * console.log(buf2.toString(undefined, 0, 3)); - * // Prints: té - * ``` - * @since v0.1.90 - * @param [encoding='utf8'] The character encoding to use. - * @param [start=0] The byte offset to start decoding at. - * @param [end=buf.length] The byte offset to stop decoding at (not inclusive). - */ - toString(encoding?: BufferEncoding, start?: number, end?: number): string; - /** - * Returns a JSON representation of `buf`. [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) implicitly calls - * this function when stringifying a `Buffer` instance. - * - * `Buffer.from()` accepts objects in the format returned from this method. - * In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); - * const json = JSON.stringify(buf); - * - * console.log(json); - * // Prints: {"type":"Buffer","data":[1,2,3,4,5]} - * - * const copy = JSON.parse(json, (key, value) => { - * return value && value.type === 'Buffer' ? - * Buffer.from(value) : - * value; - * }); - * - * console.log(copy); - * // Prints: - * ``` - * @since v0.9.2 - */ - toJSON(): { - type: "Buffer"; - data: number[]; - }; - /** - * Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,`false` otherwise. Equivalent to `buf.compare(otherBuffer) === 0`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('ABC'); - * const buf2 = Buffer.from('414243', 'hex'); - * const buf3 = Buffer.from('ABCD'); - * - * console.log(buf1.equals(buf2)); - * // Prints: true - * console.log(buf1.equals(buf3)); - * // Prints: false - * ``` - * @since v0.11.13 - * @param otherBuffer A `Buffer` or {@link Uint8Array} with which to compare `buf`. - */ - equals(otherBuffer: Uint8Array): boolean; - /** - * Compares `buf` with `target` and returns a number indicating whether `buf`comes before, after, or is the same as `target` in sort order. - * Comparison is based on the actual sequence of bytes in each `Buffer`. - * - * * `0` is returned if `target` is the same as `buf` - * * `1` is returned if `target` should come _before_`buf` when sorted. - * * `-1` is returned if `target` should come _after_`buf` when sorted. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('ABC'); - * const buf2 = Buffer.from('BCD'); - * const buf3 = Buffer.from('ABCD'); - * - * console.log(buf1.compare(buf1)); - * // Prints: 0 - * console.log(buf1.compare(buf2)); - * // Prints: -1 - * console.log(buf1.compare(buf3)); - * // Prints: -1 - * console.log(buf2.compare(buf1)); - * // Prints: 1 - * console.log(buf2.compare(buf3)); - * // Prints: 1 - * console.log([buf1, buf2, buf3].sort(Buffer.compare)); - * // Prints: [ , , ] - * // (This result is equal to: [buf1, buf3, buf2].) - * ``` - * - * The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd` arguments can be used to limit the comparison to specific ranges within `target` and `buf` respectively. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]); - * const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]); - * - * console.log(buf1.compare(buf2, 5, 9, 0, 4)); - * // Prints: 0 - * console.log(buf1.compare(buf2, 0, 6, 4)); - * // Prints: -1 - * console.log(buf1.compare(buf2, 5, 6, 5)); - * // Prints: 1 - * ``` - * - * `ERR_OUT_OF_RANGE` is thrown if `targetStart < 0`, `sourceStart < 0`, `targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`. - * @since v0.11.13 - * @param target A `Buffer` or {@link Uint8Array} with which to compare `buf`. - * @param [targetStart=0] The offset within `target` at which to begin comparison. - * @param [targetEnd=target.length] The offset within `target` at which to end comparison (not inclusive). - * @param [sourceStart=0] The offset within `buf` at which to begin comparison. - * @param [sourceEnd=buf.length] The offset within `buf` at which to end comparison (not inclusive). - */ - compare( - target: Uint8Array, - targetStart?: number, - targetEnd?: number, - sourceStart?: number, - sourceEnd?: number, - ): -1 | 0 | 1; - /** - * Copies data from a region of `buf` to a region in `target`, even if the `target`memory region overlaps with `buf`. - * - * [`TypedArray.prototype.set()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set) performs the same operation, and is available - * for all TypedArrays, including Node.js `Buffer`s, although it takes - * different function arguments. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create two `Buffer` instances. - * const buf1 = Buffer.allocUnsafe(26); - * const buf2 = Buffer.allocUnsafe(26).fill('!'); - * - * for (let i = 0; i < 26; i++) { - * // 97 is the decimal ASCII value for 'a'. - * buf1[i] = i + 97; - * } - * - * // Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`. - * buf1.copy(buf2, 8, 16, 20); - * // This is equivalent to: - * // buf2.set(buf1.subarray(16, 20), 8); - * - * console.log(buf2.toString('ascii', 0, 25)); - * // Prints: !!!!!!!!qrst!!!!!!!!!!!!! - * ``` - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create a `Buffer` and copy data from one region to an overlapping region - * // within the same `Buffer`. - * - * const buf = Buffer.allocUnsafe(26); - * - * for (let i = 0; i < 26; i++) { - * // 97 is the decimal ASCII value for 'a'. - * buf[i] = i + 97; - * } - * - * buf.copy(buf, 0, 4, 10); - * - * console.log(buf.toString()); - * // Prints: efghijghijklmnopqrstuvwxyz - * ``` - * @since v0.1.90 - * @param target A `Buffer` or {@link Uint8Array} to copy into. - * @param [targetStart=0] The offset within `target` at which to begin writing. - * @param [sourceStart=0] The offset within `buf` from which to begin copying. - * @param [sourceEnd=buf.length] The offset within `buf` at which to stop copying (not inclusive). - * @return The number of bytes copied. - */ - copy(target: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. - * - * `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeBigInt64BE(0x0102030405060708n, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v12.0.0, v10.20.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeBigInt64BE(value: bigint, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. - * - * `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeBigInt64LE(0x0102030405060708n, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v12.0.0, v10.20.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeBigInt64LE(value: bigint, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. - * - * This function is also available under the `writeBigUint64BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeBigUInt64BE(0xdecafafecacefaden, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v12.0.0, v10.20.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeBigUInt64BE(value: bigint, offset?: number): number; - /** - * @alias Buffer.writeBigUInt64BE - * @since v14.10.0, v12.19.0 - */ - writeBigUint64BE(value: bigint, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeBigUInt64LE(0xdecafafecacefaden, 0); - * - * console.log(buf); - * // Prints: - * ``` - * - * This function is also available under the `writeBigUint64LE` alias. - * @since v12.0.0, v10.20.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy: `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeBigUInt64LE(value: bigint, offset?: number): number; - /** - * @alias Buffer.writeBigUInt64LE - * @since v14.10.0, v12.19.0 - */ - writeBigUint64LE(value: bigint, offset?: number): number; - /** - * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined - * when `value` is anything other than an unsigned integer. - * - * This function is also available under the `writeUintLE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(6); - * - * buf.writeUIntLE(0x1234567890ab, 0, 6); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. - * @return `offset` plus the number of bytes written. - */ - writeUIntLE(value: number, offset: number, byteLength: number): number; - /** - * @alias Buffer.writeUIntLE - * @since v14.9.0, v12.19.0 - */ - writeUintLE(value: number, offset: number, byteLength: number): number; - /** - * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined - * when `value` is anything other than an unsigned integer. - * - * This function is also available under the `writeUintBE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(6); - * - * buf.writeUIntBE(0x1234567890ab, 0, 6); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. - * @return `offset` plus the number of bytes written. - */ - writeUIntBE(value: number, offset: number, byteLength: number): number; - /** - * @alias Buffer.writeUIntBE - * @since v14.9.0, v12.19.0 - */ - writeUintBE(value: number, offset: number, byteLength: number): number; - /** - * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined - * when `value` is anything other than a signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(6); - * - * buf.writeIntLE(0x1234567890ab, 0, 6); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. - * @return `offset` plus the number of bytes written. - */ - writeIntLE(value: number, offset: number, byteLength: number): number; - /** - * Writes `byteLength` bytes of `value` to `buf` at the specified `offset`as big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when`value` is anything other than a - * signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(6); - * - * buf.writeIntBE(0x1234567890ab, 0, 6); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param offset Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to write. Must satisfy `0 < byteLength <= 6`. - * @return `offset` plus the number of bytes written. - */ - writeIntBE(value: number, offset: number, byteLength: number): number; - /** - * Reads an unsigned, big-endian 64-bit integer from `buf` at the specified`offset`. - * - * This function is also available under the `readBigUint64BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); - * - * console.log(buf.readBigUInt64BE(0)); - * // Prints: 4294967295n - * ``` - * @since v12.0.0, v10.20.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. - */ - readBigUInt64BE(offset?: number): bigint; - /** - * @alias Buffer.readBigUInt64BE - * @since v14.10.0, v12.19.0 - */ - readBigUint64BE(offset?: number): bigint; - /** - * Reads an unsigned, little-endian 64-bit integer from `buf` at the specified`offset`. - * - * This function is also available under the `readBigUint64LE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); - * - * console.log(buf.readBigUInt64LE(0)); - * // Prints: 18446744069414584320n - * ``` - * @since v12.0.0, v10.20.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. - */ - readBigUInt64LE(offset?: number): bigint; - /** - * @alias Buffer.readBigUInt64LE - * @since v14.10.0, v12.19.0 - */ - readBigUint64LE(offset?: number): bigint; - /** - * Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed - * values. - * @since v12.0.0, v10.20.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. - */ - readBigInt64BE(offset?: number): bigint; - /** - * Reads a signed, little-endian 64-bit integer from `buf` at the specified`offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed - * values. - * @since v12.0.0, v10.20.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. - */ - readBigInt64LE(offset?: number): bigint; - /** - * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned, little-endian integer supporting - * up to 48 bits of accuracy. - * - * This function is also available under the `readUintLE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); - * - * console.log(buf.readUIntLE(0, 6).toString(16)); - * // Prints: ab9078563412 - * ``` - * @since v0.11.15 - * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. - */ - readUIntLE(offset: number, byteLength: number): number; - /** - * @alias Buffer.readUIntLE - * @since v14.9.0, v12.19.0 - */ - readUintLE(offset: number, byteLength: number): number; - /** - * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as an unsigned big-endian integer supporting - * up to 48 bits of accuracy. - * - * This function is also available under the `readUintBE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); - * - * console.log(buf.readUIntBE(0, 6).toString(16)); - * // Prints: 1234567890ab - * console.log(buf.readUIntBE(1, 6).toString(16)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.11.15 - * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. - */ - readUIntBE(offset: number, byteLength: number): number; - /** - * @alias Buffer.readUIntBE - * @since v14.9.0, v12.19.0 - */ - readUintBE(offset: number, byteLength: number): number; - /** - * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a little-endian, two's complement signed value - * supporting up to 48 bits of accuracy. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); - * - * console.log(buf.readIntLE(0, 6).toString(16)); - * // Prints: -546f87a9cbee - * ``` - * @since v0.11.15 - * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. - */ - readIntLE(offset: number, byteLength: number): number; - /** - * Reads `byteLength` number of bytes from `buf` at the specified `offset` and interprets the result as a big-endian, two's complement signed value - * supporting up to 48 bits of accuracy. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); - * - * console.log(buf.readIntBE(0, 6).toString(16)); - * // Prints: 1234567890ab - * console.log(buf.readIntBE(1, 6).toString(16)); - * // Throws ERR_OUT_OF_RANGE. - * console.log(buf.readIntBE(1, 0).toString(16)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.11.15 - * @param offset Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - byteLength`. - * @param byteLength Number of bytes to read. Must satisfy `0 < byteLength <= 6`. - */ - readIntBE(offset: number, byteLength: number): number; - /** - * Reads an unsigned 8-bit integer from `buf` at the specified `offset`. - * - * This function is also available under the `readUint8` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([1, -2]); - * - * console.log(buf.readUInt8(0)); - * // Prints: 1 - * console.log(buf.readUInt8(1)); - * // Prints: 254 - * console.log(buf.readUInt8(2)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. - */ - readUInt8(offset?: number): number; - /** - * @alias Buffer.readUInt8 - * @since v14.9.0, v12.19.0 - */ - readUint8(offset?: number): number; - /** - * Reads an unsigned, little-endian 16-bit integer from `buf` at the specified `offset`. - * - * This function is also available under the `readUint16LE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56]); - * - * console.log(buf.readUInt16LE(0).toString(16)); - * // Prints: 3412 - * console.log(buf.readUInt16LE(1).toString(16)); - * // Prints: 5634 - * console.log(buf.readUInt16LE(2).toString(16)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. - */ - readUInt16LE(offset?: number): number; - /** - * @alias Buffer.readUInt16LE - * @since v14.9.0, v12.19.0 - */ - readUint16LE(offset?: number): number; - /** - * Reads an unsigned, big-endian 16-bit integer from `buf` at the specified`offset`. - * - * This function is also available under the `readUint16BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56]); - * - * console.log(buf.readUInt16BE(0).toString(16)); - * // Prints: 1234 - * console.log(buf.readUInt16BE(1).toString(16)); - * // Prints: 3456 - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. - */ - readUInt16BE(offset?: number): number; - /** - * @alias Buffer.readUInt16BE - * @since v14.9.0, v12.19.0 - */ - readUint16BE(offset?: number): number; - /** - * Reads an unsigned, little-endian 32-bit integer from `buf` at the specified`offset`. - * - * This function is also available under the `readUint32LE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); - * - * console.log(buf.readUInt32LE(0).toString(16)); - * // Prints: 78563412 - * console.log(buf.readUInt32LE(1).toString(16)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readUInt32LE(offset?: number): number; - /** - * @alias Buffer.readUInt32LE - * @since v14.9.0, v12.19.0 - */ - readUint32LE(offset?: number): number; - /** - * Reads an unsigned, big-endian 32-bit integer from `buf` at the specified`offset`. - * - * This function is also available under the `readUint32BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); - * - * console.log(buf.readUInt32BE(0).toString(16)); - * // Prints: 12345678 - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readUInt32BE(offset?: number): number; - /** - * @alias Buffer.readUInt32BE - * @since v14.9.0, v12.19.0 - */ - readUint32BE(offset?: number): number; - /** - * Reads a signed 8-bit integer from `buf` at the specified `offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed values. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([-1, 5]); - * - * console.log(buf.readInt8(0)); - * // Prints: -1 - * console.log(buf.readInt8(1)); - * // Prints: 5 - * console.log(buf.readInt8(2)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.0 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 1`. - */ - readInt8(offset?: number): number; - /** - * Reads a signed, little-endian 16-bit integer from `buf` at the specified`offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed values. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0, 5]); - * - * console.log(buf.readInt16LE(0)); - * // Prints: 1280 - * console.log(buf.readInt16LE(1)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. - */ - readInt16LE(offset?: number): number; - /** - * Reads a signed, big-endian 16-bit integer from `buf` at the specified `offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed values. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0, 5]); - * - * console.log(buf.readInt16BE(0)); - * // Prints: 5 - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 2`. - */ - readInt16BE(offset?: number): number; - /** - * Reads a signed, little-endian 32-bit integer from `buf` at the specified`offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed values. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0, 0, 0, 5]); - * - * console.log(buf.readInt32LE(0)); - * // Prints: 83886080 - * console.log(buf.readInt32LE(1)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readInt32LE(offset?: number): number; - /** - * Reads a signed, big-endian 32-bit integer from `buf` at the specified `offset`. - * - * Integers read from a `Buffer` are interpreted as two's complement signed values. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([0, 0, 0, 5]); - * - * console.log(buf.readInt32BE(0)); - * // Prints: 5 - * ``` - * @since v0.5.5 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readInt32BE(offset?: number): number; - /** - * Reads a 32-bit, little-endian float from `buf` at the specified `offset`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([1, 2, 3, 4]); - * - * console.log(buf.readFloatLE(0)); - * // Prints: 1.539989614439558e-36 - * console.log(buf.readFloatLE(1)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.11.15 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readFloatLE(offset?: number): number; - /** - * Reads a 32-bit, big-endian float from `buf` at the specified `offset`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([1, 2, 3, 4]); - * - * console.log(buf.readFloatBE(0)); - * // Prints: 2.387939260590663e-38 - * ``` - * @since v0.11.15 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 4`. - */ - readFloatBE(offset?: number): number; - /** - * Reads a 64-bit, little-endian double from `buf` at the specified `offset`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); - * - * console.log(buf.readDoubleLE(0)); - * // Prints: 5.447603722011605e-270 - * console.log(buf.readDoubleLE(1)); - * // Throws ERR_OUT_OF_RANGE. - * ``` - * @since v0.11.15 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. - */ - readDoubleLE(offset?: number): number; - /** - * Reads a 64-bit, big-endian double from `buf` at the specified `offset`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); - * - * console.log(buf.readDoubleBE(0)); - * // Prints: 8.20788039913184e-304 - * ``` - * @since v0.11.15 - * @param [offset=0] Number of bytes to skip before starting to read. Must satisfy `0 <= offset <= buf.length - 8`. - */ - readDoubleBE(offset?: number): number; - reverse(): this; - /** - * Interprets `buf` as an array of unsigned 16-bit integers and swaps the - * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 2. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); - * - * console.log(buf1); - * // Prints: - * - * buf1.swap16(); - * - * console.log(buf1); - * // Prints: - * - * const buf2 = Buffer.from([0x1, 0x2, 0x3]); - * - * buf2.swap16(); - * // Throws ERR_INVALID_BUFFER_SIZE. - * ``` - * - * One convenient use of `buf.swap16()` is to perform a fast in-place conversion - * between UTF-16 little-endian and UTF-16 big-endian: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('This is little-endian UTF-16', 'utf16le'); - * buf.swap16(); // Convert to big-endian UTF-16 text. - * ``` - * @since v5.10.0 - * @return A reference to `buf`. - */ - swap16(): this; - /** - * Interprets `buf` as an array of unsigned 32-bit integers and swaps the - * byte order _in-place_. Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 4. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); - * - * console.log(buf1); - * // Prints: - * - * buf1.swap32(); - * - * console.log(buf1); - * // Prints: - * - * const buf2 = Buffer.from([0x1, 0x2, 0x3]); - * - * buf2.swap32(); - * // Throws ERR_INVALID_BUFFER_SIZE. - * ``` - * @since v5.10.0 - * @return A reference to `buf`. - */ - swap32(): this; - /** - * Interprets `buf` as an array of 64-bit numbers and swaps byte order _in-place_. - * Throws `ERR_INVALID_BUFFER_SIZE` if `buf.length` is not a multiple of 8. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); - * - * console.log(buf1); - * // Prints: - * - * buf1.swap64(); - * - * console.log(buf1); - * // Prints: - * - * const buf2 = Buffer.from([0x1, 0x2, 0x3]); - * - * buf2.swap64(); - * // Throws ERR_INVALID_BUFFER_SIZE. - * ``` - * @since v6.3.0 - * @return A reference to `buf`. - */ - swap64(): this; - /** - * Writes `value` to `buf` at the specified `offset`. `value` must be a - * valid unsigned 8-bit integer. Behavior is undefined when `value` is anything - * other than an unsigned 8-bit integer. - * - * This function is also available under the `writeUint8` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeUInt8(0x3, 0); - * buf.writeUInt8(0x4, 1); - * buf.writeUInt8(0x23, 2); - * buf.writeUInt8(0x42, 3); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. - * @return `offset` plus the number of bytes written. - */ - writeUInt8(value: number, offset?: number): number; - /** - * @alias Buffer.writeUInt8 - * @since v14.9.0, v12.19.0 - */ - writeUint8(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is - * anything other than an unsigned 16-bit integer. - * - * This function is also available under the `writeUint16LE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeUInt16LE(0xdead, 0); - * buf.writeUInt16LE(0xbeef, 2); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. - * @return `offset` plus the number of bytes written. - */ - writeUInt16LE(value: number, offset?: number): number; - /** - * @alias Buffer.writeUInt16LE - * @since v14.9.0, v12.19.0 - */ - writeUint16LE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 16-bit integer. Behavior is undefined when `value`is anything other than an - * unsigned 16-bit integer. - * - * This function is also available under the `writeUint16BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeUInt16BE(0xdead, 0); - * buf.writeUInt16BE(0xbeef, 2); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. - * @return `offset` plus the number of bytes written. - */ - writeUInt16BE(value: number, offset?: number): number; - /** - * @alias Buffer.writeUInt16BE - * @since v14.9.0, v12.19.0 - */ - writeUint16BE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is - * anything other than an unsigned 32-bit integer. - * - * This function is also available under the `writeUint32LE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeUInt32LE(0xfeedface, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeUInt32LE(value: number, offset?: number): number; - /** - * @alias Buffer.writeUInt32LE - * @since v14.9.0, v12.19.0 - */ - writeUint32LE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid unsigned 32-bit integer. Behavior is undefined when `value`is anything other than an - * unsigned 32-bit integer. - * - * This function is also available under the `writeUint32BE` alias. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeUInt32BE(0xfeedface, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeUInt32BE(value: number, offset?: number): number; - /** - * @alias Buffer.writeUInt32BE - * @since v14.9.0, v12.19.0 - */ - writeUint32BE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset`. `value` must be a valid - * signed 8-bit integer. Behavior is undefined when `value` is anything other than - * a signed 8-bit integer. - * - * `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(2); - * - * buf.writeInt8(2, 0); - * buf.writeInt8(-2, 1); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.0 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 1`. - * @return `offset` plus the number of bytes written. - */ - writeInt8(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is - * anything other than a signed 16-bit integer. - * - * The `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(2); - * - * buf.writeInt16LE(0x0304, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. - * @return `offset` plus the number of bytes written. - */ - writeInt16LE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 16-bit integer. Behavior is undefined when `value` is - * anything other than a signed 16-bit integer. - * - * The `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(2); - * - * buf.writeInt16BE(0x0102, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 2`. - * @return `offset` plus the number of bytes written. - */ - writeInt16BE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is - * anything other than a signed 32-bit integer. - * - * The `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeInt32LE(0x05060708, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeInt32LE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a valid signed 32-bit integer. Behavior is undefined when `value` is - * anything other than a signed 32-bit integer. - * - * The `value` is interpreted and written as a two's complement signed integer. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeInt32BE(0x01020304, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.5.5 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeInt32BE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is - * undefined when `value` is anything other than a JavaScript number. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeFloatLE(0xcafebabe, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeFloatLE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. Behavior is - * undefined when `value` is anything other than a JavaScript number. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(4); - * - * buf.writeFloatBE(0xcafebabe, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 4`. - * @return `offset` plus the number of bytes written. - */ - writeFloatBE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as little-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything - * other than a JavaScript number. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeDoubleLE(123.456, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeDoubleLE(value: number, offset?: number): number; - /** - * Writes `value` to `buf` at the specified `offset` as big-endian. The `value` must be a JavaScript number. Behavior is undefined when `value` is anything - * other than a JavaScript number. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(8); - * - * buf.writeDoubleBE(123.456, 0); - * - * console.log(buf); - * // Prints: - * ``` - * @since v0.11.15 - * @param value Number to be written to `buf`. - * @param [offset=0] Number of bytes to skip before starting to write. Must satisfy `0 <= offset <= buf.length - 8`. - * @return `offset` plus the number of bytes written. - */ - writeDoubleBE(value: number, offset?: number): number; - /** - * Fills `buf` with the specified `value`. If the `offset` and `end` are not given, - * the entire `buf` will be filled: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Fill a `Buffer` with the ASCII character 'h'. - * - * const b = Buffer.allocUnsafe(50).fill('h'); - * - * console.log(b.toString()); - * // Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh - * - * // Fill a buffer with empty string - * const c = Buffer.allocUnsafe(5).fill(''); - * - * console.log(c.fill('')); - * // Prints: - * ``` - * - * `value` is coerced to a `uint32` value if it is not a string, `Buffer`, or - * integer. If the resulting integer is greater than `255` (decimal), `buf` will be - * filled with `value & 255`. - * - * If the final write of a `fill()` operation falls on a multi-byte character, - * then only the bytes of that character that fit into `buf` are written: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Fill a `Buffer` with character that takes up two bytes in UTF-8. - * - * console.log(Buffer.allocUnsafe(5).fill('\u0222')); - * // Prints: - * ``` - * - * If `value` contains invalid characters, it is truncated; if no valid - * fill data remains, an exception is thrown: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(5); - * - * console.log(buf.fill('a')); - * // Prints: - * console.log(buf.fill('aazz', 'hex')); - * // Prints: - * console.log(buf.fill('zz', 'hex')); - * // Throws an exception. - * ``` - * @since v0.5.0 - * @param value The value with which to fill `buf`. Empty value (string, Uint8Array, Buffer) is coerced to `0`. - * @param [offset=0] Number of bytes to skip before starting to fill `buf`. - * @param [end=buf.length] Where to stop filling `buf` (not inclusive). - * @param [encoding='utf8'] The encoding for `value` if `value` is a string. - * @return A reference to `buf`. - */ - fill(value: string | Uint8Array | number, offset?: number, end?: number, encoding?: BufferEncoding): this; - fill(value: string | Uint8Array | number, offset: number, encoding: BufferEncoding): this; - fill(value: string | Uint8Array | number, encoding: BufferEncoding): this; - /** - * If `value` is: - * - * * a string, `value` is interpreted according to the character encoding in `encoding`. - * * a `Buffer` or [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), `value` will be used in its entirety. - * To compare a partial `Buffer`, use `buf.subarray`. - * * a number, `value` will be interpreted as an unsigned 8-bit integer - * value between `0` and `255`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('this is a buffer'); - * - * console.log(buf.indexOf('this')); - * // Prints: 0 - * console.log(buf.indexOf('is')); - * // Prints: 2 - * console.log(buf.indexOf(Buffer.from('a buffer'))); - * // Prints: 8 - * console.log(buf.indexOf(97)); - * // Prints: 8 (97 is the decimal ASCII value for 'a') - * console.log(buf.indexOf(Buffer.from('a buffer example'))); - * // Prints: -1 - * console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8))); - * // Prints: 8 - * - * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); - * - * console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le')); - * // Prints: 4 - * console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le')); - * // Prints: 6 - * ``` - * - * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value, - * an integer between 0 and 255. - * - * If `byteOffset` is not a number, it will be coerced to a number. If the result - * of coercion is `NaN` or `0`, then the entire buffer will be searched. This - * behavior matches [`String.prototype.indexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf). - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const b = Buffer.from('abcdef'); - * - * // Passing a value that's a number, but not a valid byte. - * // Prints: 2, equivalent to searching for 99 or 'c'. - * console.log(b.indexOf(99.9)); - * console.log(b.indexOf(256 + 99)); - * - * // Passing a byteOffset that coerces to NaN or 0. - * // Prints: 1, searching the whole buffer. - * console.log(b.indexOf('b', undefined)); - * console.log(b.indexOf('b', {})); - * console.log(b.indexOf('b', null)); - * console.log(b.indexOf('b', [])); - * ``` - * - * If `value` is an empty string or empty `Buffer` and `byteOffset` is less - * than `buf.length`, `byteOffset` will be returned. If `value` is empty and`byteOffset` is at least `buf.length`, `buf.length` will be returned. - * @since v1.5.0 - * @param value What to search for. - * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. - * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. - * @return The index of the first occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. - */ - indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; - indexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number; - /** - * Identical to `buf.indexOf()`, except the last occurrence of `value` is found - * rather than the first occurrence. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('this buffer is a buffer'); - * - * console.log(buf.lastIndexOf('this')); - * // Prints: 0 - * console.log(buf.lastIndexOf('buffer')); - * // Prints: 17 - * console.log(buf.lastIndexOf(Buffer.from('buffer'))); - * // Prints: 17 - * console.log(buf.lastIndexOf(97)); - * // Prints: 15 (97 is the decimal ASCII value for 'a') - * console.log(buf.lastIndexOf(Buffer.from('yolo'))); - * // Prints: -1 - * console.log(buf.lastIndexOf('buffer', 5)); - * // Prints: 5 - * console.log(buf.lastIndexOf('buffer', 4)); - * // Prints: -1 - * - * const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le'); - * - * console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le')); - * // Prints: 6 - * console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le')); - * // Prints: 4 - * ``` - * - * If `value` is not a string, number, or `Buffer`, this method will throw a `TypeError`. If `value` is a number, it will be coerced to a valid byte value, - * an integer between 0 and 255. - * - * If `byteOffset` is not a number, it will be coerced to a number. Any arguments - * that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer. - * This behavior matches [`String.prototype.lastIndexOf()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf). - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const b = Buffer.from('abcdef'); - * - * // Passing a value that's a number, but not a valid byte. - * // Prints: 2, equivalent to searching for 99 or 'c'. - * console.log(b.lastIndexOf(99.9)); - * console.log(b.lastIndexOf(256 + 99)); - * - * // Passing a byteOffset that coerces to NaN. - * // Prints: 1, searching the whole buffer. - * console.log(b.lastIndexOf('b', undefined)); - * console.log(b.lastIndexOf('b', {})); - * - * // Passing a byteOffset that coerces to 0. - * // Prints: -1, equivalent to passing 0. - * console.log(b.lastIndexOf('b', null)); - * console.log(b.lastIndexOf('b', [])); - * ``` - * - * If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned. - * @since v6.0.0 - * @param value What to search for. - * @param [byteOffset=buf.length - 1] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. - * @param [encoding='utf8'] If `value` is a string, this is the encoding used to determine the binary representation of the string that will be searched for in `buf`. - * @return The index of the last occurrence of `value` in `buf`, or `-1` if `buf` does not contain `value`. - */ - lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: BufferEncoding): number; - lastIndexOf(value: string | number | Uint8Array, encoding: BufferEncoding): number; - /** - * Equivalent to `buf.indexOf() !== -1`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('this is a buffer'); - * - * console.log(buf.includes('this')); - * // Prints: true - * console.log(buf.includes('is')); - * // Prints: true - * console.log(buf.includes(Buffer.from('a buffer'))); - * // Prints: true - * console.log(buf.includes(97)); - * // Prints: true (97 is the decimal ASCII value for 'a') - * console.log(buf.includes(Buffer.from('a buffer example'))); - * // Prints: false - * console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8))); - * // Prints: true - * console.log(buf.includes('this', 4)); - * // Prints: false - * ``` - * @since v5.3.0 - * @param value What to search for. - * @param [byteOffset=0] Where to begin searching in `buf`. If negative, then offset is calculated from the end of `buf`. - * @param [encoding='utf8'] If `value` is a string, this is its encoding. - * @return `true` if `value` was found in `buf`, `false` otherwise. - */ - includes(value: string | number | Buffer, byteOffset?: number, encoding?: BufferEncoding): boolean; - includes(value: string | number | Buffer, encoding: BufferEncoding): boolean; - } - var Buffer: BufferConstructor; - } - // #region web types - export type BlobPart = NodeJS.BufferSource | Blob | string; - export interface BlobPropertyBag { - endings?: "native" | "transparent"; - type?: string; - } - export interface FilePropertyBag extends BlobPropertyBag { - lastModified?: number; - } - export interface Blob { - readonly size: number; - readonly type: string; - arrayBuffer(): Promise; - bytes(): Promise; - slice(start?: number, end?: number, contentType?: string): Blob; - stream(): ReadableStream; - text(): Promise; - } - export var Blob: { - prototype: Blob; - new(blobParts?: BlobPart[], options?: BlobPropertyBag): Blob; - }; - export interface File extends Blob { - readonly lastModified: number; - readonly name: string; - readonly webkitRelativePath: string; - } - export var File: { - prototype: File; - new(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File; - }; - export import atob = globalThis.atob; - export import btoa = globalThis.btoa; - // #endregion -} -declare module "buffer" { - export * from "node:buffer"; -} diff --git a/skills/flight-finder/node_modules/@types/node/child_process.d.ts b/skills/flight-finder/node_modules/@types/node/child_process.d.ts deleted file mode 100644 index d71fed1..0000000 --- a/skills/flight-finder/node_modules/@types/node/child_process.d.ts +++ /dev/null @@ -1,1433 +0,0 @@ -/** - * The `node:child_process` module provides the ability to spawn subprocesses in - * a manner that is similar, but not identical, to [`popen(3)`](http://man7.org/linux/man-pages/man3/popen.3.html). This capability - * is primarily provided by the {@link spawn} function: - * - * ```js - * import { spawn } from 'node:child_process'; - * import { once } from 'node:events'; - * const ls = spawn('ls', ['-lh', '/usr']); - * - * ls.stdout.on('data', (data) => { - * console.log(`stdout: ${data}`); - * }); - * - * ls.stderr.on('data', (data) => { - * console.error(`stderr: ${data}`); - * }); - * - * const [code] = await once(ls, 'close'); - * console.log(`child process exited with code ${code}`); - * ``` - * - * By default, pipes for `stdin`, `stdout`, and `stderr` are established between - * the parent Node.js process and the spawned subprocess. These pipes have - * limited (and platform-specific) capacity. If the subprocess writes to - * stdout in excess of that limit without the output being captured, the - * subprocess blocks, waiting for the pipe buffer to accept more data. This is - * identical to the behavior of pipes in the shell. Use the `{ stdio: 'ignore' }` option if the output will not be consumed. - * - * The command lookup is performed using the `options.env.PATH` environment - * variable if `env` is in the `options` object. Otherwise, `process.env.PATH` is - * used. If `options.env` is set without `PATH`, lookup on Unix is performed - * on a default search path search of `/usr/bin:/bin` (see your operating system's - * manual for execvpe/execvp), on Windows the current processes environment - * variable `PATH` is used. - * - * On Windows, environment variables are case-insensitive. Node.js - * lexicographically sorts the `env` keys and uses the first one that - * case-insensitively matches. Only first (in lexicographic order) entry will be - * passed to the subprocess. This might lead to issues on Windows when passing - * objects to the `env` option that have multiple variants of the same key, such as `PATH` and `Path`. - * - * The {@link spawn} method spawns the child process asynchronously, - * without blocking the Node.js event loop. The {@link spawnSync} function provides equivalent functionality in a synchronous manner that blocks - * the event loop until the spawned process either exits or is terminated. - * - * For convenience, the `node:child_process` module provides a handful of - * synchronous and asynchronous alternatives to {@link spawn} and {@link spawnSync}. Each of these alternatives are implemented on - * top of {@link spawn} or {@link spawnSync}. - * - * * {@link exec}: spawns a shell and runs a command within that - * shell, passing the `stdout` and `stderr` to a callback function when - * complete. - * * {@link execFile}: similar to {@link exec} except - * that it spawns the command directly without first spawning a shell by - * default. - * * {@link fork}: spawns a new Node.js process and invokes a - * specified module with an IPC communication channel established that allows - * sending messages between parent and child. - * * {@link execSync}: a synchronous version of {@link exec} that will block the Node.js event loop. - * * {@link execFileSync}: a synchronous version of {@link execFile} that will block the Node.js event loop. - * - * For certain use cases, such as automating shell scripts, the `synchronous counterparts` may be more convenient. In many cases, however, - * the synchronous methods can have significant impact on performance due to - * stalling the event loop while spawned processes complete. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/child_process.js) - */ -declare module "node:child_process" { - import { NonSharedBuffer } from "node:buffer"; - import * as dgram from "node:dgram"; - import { Abortable, EventEmitter, InternalEventEmitter } from "node:events"; - import * as net from "node:net"; - import { Readable, Stream, Writable } from "node:stream"; - import { URL } from "node:url"; - type Serializable = string | object | number | boolean | bigint; - type SendHandle = net.Socket | net.Server | dgram.Socket | undefined; - interface ChildProcessEventMap { - "close": [code: number | null, signal: NodeJS.Signals | null]; - "disconnect": []; - "error": [err: Error]; - "exit": [code: number | null, signal: NodeJS.Signals | null]; - "message": [message: Serializable, sendHandle: SendHandle]; - "spawn": []; - } - /** - * Instances of the `ChildProcess` represent spawned child processes. - * - * Instances of `ChildProcess` are not intended to be created directly. Rather, - * use the {@link spawn}, {@link exec},{@link execFile}, or {@link fork} methods to create - * instances of `ChildProcess`. - * @since v2.2.0 - */ - class ChildProcess implements EventEmitter { - /** - * A `Writable Stream` that represents the child process's `stdin`. - * - * If a child process waits to read all of its input, the child will not continue - * until this stream has been closed via `end()`. - * - * If the child was spawned with `stdio[0]` set to anything other than `'pipe'`, - * then this will be `null`. - * - * `subprocess.stdin` is an alias for `subprocess.stdio[0]`. Both properties will - * refer to the same value. - * - * The `subprocess.stdin` property can be `null` or `undefined` if the child process could not be successfully spawned. - * @since v0.1.90 - */ - stdin: Writable | null; - /** - * A `Readable Stream` that represents the child process's `stdout`. - * - * If the child was spawned with `stdio[1]` set to anything other than `'pipe'`, - * then this will be `null`. - * - * `subprocess.stdout` is an alias for `subprocess.stdio[1]`. Both properties will - * refer to the same value. - * - * ```js - * import { spawn } from 'node:child_process'; - * - * const subprocess = spawn('ls'); - * - * subprocess.stdout.on('data', (data) => { - * console.log(`Received chunk ${data}`); - * }); - * ``` - * - * The `subprocess.stdout` property can be `null` or `undefined` if the child process could not be successfully spawned. - * @since v0.1.90 - */ - stdout: Readable | null; - /** - * A `Readable Stream` that represents the child process's `stderr`. - * - * If the child was spawned with `stdio[2]` set to anything other than `'pipe'`, - * then this will be `null`. - * - * `subprocess.stderr` is an alias for `subprocess.stdio[2]`. Both properties will - * refer to the same value. - * - * The `subprocess.stderr` property can be `null` or `undefined` if the child process could not be successfully spawned. - * @since v0.1.90 - */ - stderr: Readable | null; - /** - * The `subprocess.channel` property is a reference to the child's IPC channel. If - * no IPC channel exists, this property is `undefined`. - * @since v7.1.0 - */ - readonly channel?: Control | null; - /** - * A sparse array of pipes to the child process, corresponding with positions in - * the `stdio` option passed to {@link spawn} that have been set - * to the value `'pipe'`. `subprocess.stdio[0]`, `subprocess.stdio[1]`, and `subprocess.stdio[2]` are also available as `subprocess.stdin`, `subprocess.stdout`, and `subprocess.stderr`, - * respectively. - * - * In the following example, only the child's fd `1` (stdout) is configured as a - * pipe, so only the parent's `subprocess.stdio[1]` is a stream, all other values - * in the array are `null`. - * - * ```js - * import assert from 'node:assert'; - * import fs from 'node:fs'; - * import child_process from 'node:child_process'; - * - * const subprocess = child_process.spawn('ls', { - * stdio: [ - * 0, // Use parent's stdin for child. - * 'pipe', // Pipe child's stdout to parent. - * fs.openSync('err.out', 'w'), // Direct child's stderr to a file. - * ], - * }); - * - * assert.strictEqual(subprocess.stdio[0], null); - * assert.strictEqual(subprocess.stdio[0], subprocess.stdin); - * - * assert(subprocess.stdout); - * assert.strictEqual(subprocess.stdio[1], subprocess.stdout); - * - * assert.strictEqual(subprocess.stdio[2], null); - * assert.strictEqual(subprocess.stdio[2], subprocess.stderr); - * ``` - * - * The `subprocess.stdio` property can be `undefined` if the child process could - * not be successfully spawned. - * @since v0.7.10 - */ - readonly stdio: [ - Writable | null, - // stdin - Readable | null, - // stdout - Readable | null, - // stderr - Readable | Writable | null | undefined, - // extra - Readable | Writable | null | undefined, // extra - ]; - /** - * The `subprocess.killed` property indicates whether the child process - * successfully received a signal from `subprocess.kill()`. The `killed` property - * does not indicate that the child process has been terminated. - * @since v0.5.10 - */ - readonly killed: boolean; - /** - * Returns the process identifier (PID) of the child process. If the child process - * fails to spawn due to errors, then the value is `undefined` and `error` is - * emitted. - * - * ```js - * import { spawn } from 'node:child_process'; - * const grep = spawn('grep', ['ssh']); - * - * console.log(`Spawned child pid: ${grep.pid}`); - * grep.stdin.end(); - * ``` - * @since v0.1.90 - */ - readonly pid?: number | undefined; - /** - * The `subprocess.connected` property indicates whether it is still possible to - * send and receive messages from a child process. When `subprocess.connected` is `false`, it is no longer possible to send or receive messages. - * @since v0.7.2 - */ - readonly connected: boolean; - /** - * The `subprocess.exitCode` property indicates the exit code of the child process. - * If the child process is still running, the field will be `null`. - * - * When the child process is terminated by a signal, `subprocess.exitCode` will be - * `null` and `subprocess.signalCode` will be set. To get the corresponding - * POSIX exit code, use - * `util.convertProcessSignalToExitCode(subprocess.signalCode)`. - */ - readonly exitCode: number | null; - /** - * The `subprocess.signalCode` property indicates the signal received by - * the child process if any, else `null`. - */ - readonly signalCode: NodeJS.Signals | null; - /** - * The `subprocess.spawnargs` property represents the full list of command-line - * arguments the child process was launched with. - */ - readonly spawnargs: string[]; - /** - * The `subprocess.spawnfile` property indicates the executable file name of - * the child process that is launched. - * - * For {@link fork}, its value will be equal to `process.execPath`. - * For {@link spawn}, its value will be the name of - * the executable file. - * For {@link exec}, its value will be the name of the shell - * in which the child process is launched. - */ - readonly spawnfile: string; - /** - * The `subprocess.kill()` method sends a signal to the child process. If no - * argument is given, the process will be sent the `'SIGTERM'` signal. See [`signal(7)`](http://man7.org/linux/man-pages/man7/signal.7.html) for a list of available signals. This function - * returns `true` if [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) succeeds, and `false` otherwise. - * - * ```js - * import { spawn } from 'node:child_process'; - * const grep = spawn('grep', ['ssh']); - * - * grep.on('close', (code, signal) => { - * console.log( - * `child process terminated due to receipt of signal ${signal}`); - * }); - * - * // Send SIGHUP to process. - * grep.kill('SIGHUP'); - * ``` - * - * The `ChildProcess` object may emit an `'error'` event if the signal - * cannot be delivered. Sending a signal to a child process that has already exited - * is not an error but may have unforeseen consequences. Specifically, if the - * process identifier (PID) has been reassigned to another process, the signal will - * be delivered to that process instead which can have unexpected results. - * - * While the function is called `kill`, the signal delivered to the child process - * may not actually terminate the process. - * - * See [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for reference. - * - * On Windows, where POSIX signals do not exist, the `signal` argument will be - * ignored, and the process will be killed forcefully and abruptly (similar to `'SIGKILL'`). - * See `Signal Events` for more details. - * - * On Linux, child processes of child processes will not be terminated - * when attempting to kill their parent. This is likely to happen when running a - * new process in a shell or with the use of the `shell` option of `ChildProcess`: - * - * ```js - * 'use strict'; - * import { spawn } from 'node:child_process'; - * - * const subprocess = spawn( - * 'sh', - * [ - * '-c', - * `node -e "setInterval(() => { - * console.log(process.pid, 'is alive') - * }, 500);"`, - * ], { - * stdio: ['inherit', 'inherit', 'inherit'], - * }, - * ); - * - * setTimeout(() => { - * subprocess.kill(); // Does not terminate the Node.js process in the shell. - * }, 2000); - * ``` - * @since v0.1.90 - */ - kill(signal?: NodeJS.Signals | number): boolean; - /** - * Calls {@link ChildProcess.kill} with `'SIGTERM'`. - * @since v20.5.0 - */ - [Symbol.dispose](): void; - /** - * When an IPC channel has been established between the parent and child ( - * i.e. when using {@link fork}), the `subprocess.send()` method can - * be used to send messages to the child process. When the child process is a - * Node.js instance, these messages can be received via the `'message'` event. - * - * The message goes through serialization and parsing. The resulting - * message might not be the same as what is originally sent. - * - * For example, in the parent script: - * - * ```js - * import cp from 'node:child_process'; - * const n = cp.fork(`${__dirname}/sub.js`); - * - * n.on('message', (m) => { - * console.log('PARENT got message:', m); - * }); - * - * // Causes the child to print: CHILD got message: { hello: 'world' } - * n.send({ hello: 'world' }); - * ``` - * - * And then the child script, `'sub.js'` might look like this: - * - * ```js - * process.on('message', (m) => { - * console.log('CHILD got message:', m); - * }); - * - * // Causes the parent to print: PARENT got message: { foo: 'bar', baz: null } - * process.send({ foo: 'bar', baz: NaN }); - * ``` - * - * Child Node.js processes will have a `process.send()` method of their own - * that allows the child to send messages back to the parent. - * - * There is a special case when sending a `{cmd: 'NODE_foo'}` message. Messages - * containing a `NODE_` prefix in the `cmd` property are reserved for use within - * Node.js core and will not be emitted in the child's `'message'` event. Rather, such messages are emitted using the `'internalMessage'` event and are consumed internally by Node.js. - * Applications should avoid using such messages or listening for `'internalMessage'` events as it is subject to change without notice. - * - * The optional `sendHandle` argument that may be passed to `subprocess.send()` is - * for passing a TCP server or socket object to the child process. The child will - * receive the object as the second argument passed to the callback function - * registered on the `'message'` event. Any data that is received and buffered in - * the socket will not be sent to the child. Sending IPC sockets is not supported on Windows. - * - * The optional `callback` is a function that is invoked after the message is - * sent but before the child may have received it. The function is called with a - * single argument: `null` on success, or an `Error` object on failure. - * - * If no `callback` function is provided and the message cannot be sent, an `'error'` event will be emitted by the `ChildProcess` object. This can - * happen, for instance, when the child process has already exited. - * - * `subprocess.send()` will return `false` if the channel has closed or when the - * backlog of unsent messages exceeds a threshold that makes it unwise to send - * more. Otherwise, the method returns `true`. The `callback` function can be - * used to implement flow control. - * - * #### Example: sending a server object - * - * The `sendHandle` argument can be used, for instance, to pass the handle of - * a TCP server object to the child process as illustrated in the example below: - * - * ```js - * import { createServer } from 'node:net'; - * import { fork } from 'node:child_process'; - * const subprocess = fork('subprocess.js'); - * - * // Open up the server object and send the handle. - * const server = createServer(); - * server.on('connection', (socket) => { - * socket.end('handled by parent'); - * }); - * server.listen(1337, () => { - * subprocess.send('server', server); - * }); - * ``` - * - * The child would then receive the server object as: - * - * ```js - * process.on('message', (m, server) => { - * if (m === 'server') { - * server.on('connection', (socket) => { - * socket.end('handled by child'); - * }); - * } - * }); - * ``` - * - * Once the server is now shared between the parent and child, some connections - * can be handled by the parent and some by the child. - * - * While the example above uses a server created using the `node:net` module, `node:dgram` module servers use exactly the same workflow with the exceptions of - * listening on a `'message'` event instead of `'connection'` and using `server.bind()` instead of `server.listen()`. This is, however, only - * supported on Unix platforms. - * - * #### Example: sending a socket object - * - * Similarly, the `sendHandler` argument can be used to pass the handle of a - * socket to the child process. The example below spawns two children that each - * handle connections with "normal" or "special" priority: - * - * ```js - * import { createServer } from 'node:net'; - * import { fork } from 'node:child_process'; - * const normal = fork('subprocess.js', ['normal']); - * const special = fork('subprocess.js', ['special']); - * - * // Open up the server and send sockets to child. Use pauseOnConnect to prevent - * // the sockets from being read before they are sent to the child process. - * const server = createServer({ pauseOnConnect: true }); - * server.on('connection', (socket) => { - * - * // If this is special priority... - * if (socket.remoteAddress === '74.125.127.100') { - * special.send('socket', socket); - * return; - * } - * // This is normal priority. - * normal.send('socket', socket); - * }); - * server.listen(1337); - * ``` - * - * The `subprocess.js` would receive the socket handle as the second argument - * passed to the event callback function: - * - * ```js - * process.on('message', (m, socket) => { - * if (m === 'socket') { - * if (socket) { - * // Check that the client socket exists. - * // It is possible for the socket to be closed between the time it is - * // sent and the time it is received in the child process. - * socket.end(`Request handled with ${process.argv[2]} priority`); - * } - * } - * }); - * ``` - * - * Do not use `.maxConnections` on a socket that has been passed to a subprocess. - * The parent cannot track when the socket is destroyed. - * - * Any `'message'` handlers in the subprocess should verify that `socket` exists, - * as the connection may have been closed during the time it takes to send the - * connection to the child. - * @since v0.5.9 - * @param sendHandle `undefined`, or a [`net.Socket`](https://nodejs.org/docs/latest-v25.x/api/net.html#class-netsocket), [`net.Server`](https://nodejs.org/docs/latest-v25.x/api/net.html#class-netserver), or [`dgram.Socket`](https://nodejs.org/docs/latest-v25.x/api/dgram.html#class-dgramsocket) object. - * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. `options` supports the following properties: - */ - send(message: Serializable, callback?: (error: Error | null) => void): boolean; - send(message: Serializable, sendHandle?: SendHandle, callback?: (error: Error | null) => void): boolean; - send( - message: Serializable, - sendHandle?: SendHandle, - options?: MessageOptions, - callback?: (error: Error | null) => void, - ): boolean; - /** - * Closes the IPC channel between parent and child, allowing the child to exit - * gracefully once there are no other connections keeping it alive. After calling - * this method the `subprocess.connected` and `process.connected` properties in - * both the parent and child (respectively) will be set to `false`, and it will be - * no longer possible to pass messages between the processes. - * - * The `'disconnect'` event will be emitted when there are no messages in the - * process of being received. This will most often be triggered immediately after - * calling `subprocess.disconnect()`. - * - * When the child process is a Node.js instance (e.g. spawned using {@link fork}), the `process.disconnect()` method can be invoked - * within the child process to close the IPC channel as well. - * @since v0.7.2 - */ - disconnect(): void; - /** - * By default, the parent will wait for the detached child to exit. To prevent the - * parent from waiting for a given `subprocess` to exit, use the `subprocess.unref()` method. Doing so will cause the parent's event loop to not - * include the child in its reference count, allowing the parent to exit - * independently of the child, unless there is an established IPC channel between - * the child and the parent. - * - * ```js - * import { spawn } from 'node:child_process'; - * - * const subprocess = spawn(process.argv[0], ['child_program.js'], { - * detached: true, - * stdio: 'ignore', - * }); - * - * subprocess.unref(); - * ``` - * @since v0.7.10 - */ - unref(): void; - /** - * Calling `subprocess.ref()` after making a call to `subprocess.unref()` will - * restore the removed reference count for the child process, forcing the parent - * to wait for the child to exit before exiting itself. - * - * ```js - * import { spawn } from 'node:child_process'; - * - * const subprocess = spawn(process.argv[0], ['child_program.js'], { - * detached: true, - * stdio: 'ignore', - * }); - * - * subprocess.unref(); - * subprocess.ref(); - * ``` - * @since v0.7.10 - */ - ref(): void; - } - interface ChildProcess extends InternalEventEmitter {} - // return this object when stdio option is undefined or not specified - interface ChildProcessWithoutNullStreams extends ChildProcess { - stdin: Writable; - stdout: Readable; - stderr: Readable; - readonly stdio: [ - Writable, - Readable, - Readable, - // stderr - Readable | Writable | null | undefined, - // extra, no modification - Readable | Writable | null | undefined, // extra, no modification - ]; - } - // return this object when stdio option is a tuple of 3 - interface ChildProcessByStdio - extends ChildProcess - { - stdin: I; - stdout: O; - stderr: E; - readonly stdio: [ - I, - O, - E, - Readable | Writable | null | undefined, - // extra, no modification - Readable | Writable | null | undefined, // extra, no modification - ]; - } - interface Control extends EventEmitter { - ref(): void; - unref(): void; - } - interface MessageOptions { - keepOpen?: boolean | undefined; - } - type IOType = "overlapped" | "pipe" | "ignore" | "inherit"; - type StdioOptions = IOType | Array; - type SerializationType = "json" | "advanced"; - interface MessagingOptions extends Abortable { - /** - * Specify the kind of serialization used for sending messages between processes. - * @default 'json' - */ - serialization?: SerializationType | undefined; - /** - * The signal value to be used when the spawned process will be killed by the abort signal. - * @default 'SIGTERM' - */ - killSignal?: NodeJS.Signals | number | undefined; - /** - * In milliseconds the maximum amount of time the process is allowed to run. - */ - timeout?: number | undefined; - } - interface ProcessEnvOptions { - uid?: number | undefined; - gid?: number | undefined; - cwd?: string | URL | undefined; - env?: NodeJS.ProcessEnv | undefined; - } - interface CommonOptions extends ProcessEnvOptions { - /** - * @default false - */ - windowsHide?: boolean | undefined; - /** - * @default 0 - */ - timeout?: number | undefined; - } - interface CommonSpawnOptions extends CommonOptions, MessagingOptions, Abortable { - argv0?: string | undefined; - /** - * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. - * If passed as an array, the first element is used for `stdin`, the second for - * `stdout`, and the third for `stderr`. A fourth element can be used to - * specify the `stdio` behavior beyond the standard streams. See - * {@link ChildProcess.stdio} for more information. - * - * @default 'pipe' - */ - stdio?: StdioOptions | undefined; - shell?: boolean | string | undefined; - windowsVerbatimArguments?: boolean | undefined; - } - interface SpawnOptions extends CommonSpawnOptions { - detached?: boolean | undefined; - } - interface SpawnOptionsWithoutStdio extends SpawnOptions { - stdio?: StdioPipeNamed | StdioPipe[] | undefined; - } - type StdioNull = "inherit" | "ignore" | Stream; - type StdioPipeNamed = "pipe" | "overlapped"; - type StdioPipe = undefined | null | StdioPipeNamed; - interface SpawnOptionsWithStdioTuple< - Stdin extends StdioNull | StdioPipe, - Stdout extends StdioNull | StdioPipe, - Stderr extends StdioNull | StdioPipe, - > extends SpawnOptions { - stdio: [Stdin, Stdout, Stderr]; - } - /** - * The `child_process.spawn()` method spawns a new process using the given `command`, with command-line arguments in `args`. If omitted, `args` defaults - * to an empty array. - * - * **If the `shell` option is enabled, do not pass unsanitized user input to this** - * **function. Any input containing shell metacharacters may be used to trigger** - * **arbitrary command execution.** - * - * A third argument may be used to specify additional options, with these defaults: - * - * ```js - * const defaults = { - * cwd: undefined, - * env: process.env, - * }; - * ``` - * - * Use `cwd` to specify the working directory from which the process is spawned. - * If not given, the default is to inherit the current working directory. If given, - * but the path does not exist, the child process emits an `ENOENT` error - * and exits immediately. `ENOENT` is also emitted when the command - * does not exist. - * - * Use `env` to specify environment variables that will be visible to the new - * process, the default is `process.env`. - * - * `undefined` values in `env` will be ignored. - * - * Example of running `ls -lh /usr`, capturing `stdout`, `stderr`, and the - * exit code: - * - * ```js - * import { spawn } from 'node:child_process'; - * import { once } from 'node:events'; - * const ls = spawn('ls', ['-lh', '/usr']); - * - * ls.stdout.on('data', (data) => { - * console.log(`stdout: ${data}`); - * }); - * - * ls.stderr.on('data', (data) => { - * console.error(`stderr: ${data}`); - * }); - * - * const [code] = await once(ls, 'close'); - * console.log(`child process exited with code ${code}`); - * ``` - * - * Example: A very elaborate way to run `ps ax | grep ssh` - * - * ```js - * import { spawn } from 'node:child_process'; - * const ps = spawn('ps', ['ax']); - * const grep = spawn('grep', ['ssh']); - * - * ps.stdout.on('data', (data) => { - * grep.stdin.write(data); - * }); - * - * ps.stderr.on('data', (data) => { - * console.error(`ps stderr: ${data}`); - * }); - * - * ps.on('close', (code) => { - * if (code !== 0) { - * console.log(`ps process exited with code ${code}`); - * } - * grep.stdin.end(); - * }); - * - * grep.stdout.on('data', (data) => { - * console.log(data.toString()); - * }); - * - * grep.stderr.on('data', (data) => { - * console.error(`grep stderr: ${data}`); - * }); - * - * grep.on('close', (code) => { - * if (code !== 0) { - * console.log(`grep process exited with code ${code}`); - * } - * }); - * ``` - * - * Example of checking for failed `spawn`: - * - * ```js - * import { spawn } from 'node:child_process'; - * const subprocess = spawn('bad_command'); - * - * subprocess.on('error', (err) => { - * console.error('Failed to start subprocess.'); - * }); - * ``` - * - * Certain platforms (macOS, Linux) will use the value of `argv[0]` for the process - * title while others (Windows, SunOS) will use `command`. - * - * Node.js overwrites `argv[0]` with `process.execPath` on startup, so `process.argv[0]` in a Node.js child process will not match the `argv0` parameter passed to `spawn` from the parent. Retrieve - * it with the `process.argv0` property instead. - * - * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except - * the error passed to the callback will be an `AbortError`: - * - * ```js - * import { spawn } from 'node:child_process'; - * const controller = new AbortController(); - * const { signal } = controller; - * const grep = spawn('grep', ['ssh'], { signal }); - * grep.on('error', (err) => { - * // This will be called with err being an AbortError if the controller aborts - * }); - * controller.abort(); // Stops the child process - * ``` - * @since v0.1.90 - * @param command The command to run. - * @param args List of string arguments. - */ - function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn(command: string, options: SpawnOptions): ChildProcess; - // overloads of spawn with 'args' - function spawn( - command: string, - args?: readonly string[], - options?: SpawnOptionsWithoutStdio, - ): ChildProcessWithoutNullStreams; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn( - command: string, - args: readonly string[], - options: SpawnOptionsWithStdioTuple, - ): ChildProcessByStdio; - function spawn(command: string, args: readonly string[], options: SpawnOptions): ChildProcess; - interface ExecOptions extends CommonOptions { - shell?: string | undefined; - signal?: AbortSignal | undefined; - maxBuffer?: number | undefined; - killSignal?: NodeJS.Signals | number | undefined; - encoding?: string | null | undefined; - } - interface ExecOptionsWithStringEncoding extends ExecOptions { - encoding?: BufferEncoding | undefined; - } - interface ExecOptionsWithBufferEncoding extends ExecOptions { - encoding: "buffer" | null; // specify `null`. - } - // TODO: Just Plain Wrong™ (see also nodejs/node#57392) - interface ExecException extends Error { - cmd?: string; - killed?: boolean; - code?: number; - signal?: NodeJS.Signals; - stdout?: string; - stderr?: string; - } - /** - * Spawns a shell then executes the `command` within that shell, buffering any - * generated output. The `command` string passed to the exec function is processed - * directly by the shell and special characters (vary based on [shell](https://en.wikipedia.org/wiki/List_of_command-line_interpreters)) - * need to be dealt with accordingly: - * - * ```js - * import { exec } from 'node:child_process'; - * - * exec('"/path/to/test file/test.sh" arg1 arg2'); - * // Double quotes are used so that the space in the path is not interpreted as - * // a delimiter of multiple arguments. - * - * exec('echo "The \\$HOME variable is $HOME"'); - * // The $HOME variable is escaped in the first instance, but not in the second. - * ``` - * - * **Never pass unsanitized user input to this function. Any input containing shell** - * **metacharacters may be used to trigger arbitrary command execution.** - * - * If a `callback` function is provided, it is called with the arguments `(error, stdout, stderr)`. On success, `error` will be `null`. On error, `error` will be an instance of `Error`. The - * `error.code` property will be - * the exit code of the process. By convention, any exit code other than `0` indicates an error. `error.signal` will be the signal that terminated the - * process. - * - * The `stdout` and `stderr` arguments passed to the callback will contain the - * stdout and stderr output of the child process. By default, Node.js will decode - * the output as UTF-8 and pass strings to the callback. The `encoding` option - * can be used to specify the character encoding used to decode the stdout and - * stderr output. If `encoding` is `'buffer'`, or an unrecognized character - * encoding, `Buffer` objects will be passed to the callback instead. - * - * ```js - * import { exec } from 'node:child_process'; - * exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => { - * if (error) { - * console.error(`exec error: ${error}`); - * return; - * } - * console.log(`stdout: ${stdout}`); - * console.error(`stderr: ${stderr}`); - * }); - * ``` - * - * If `timeout` is greater than `0`, the parent will send the signal - * identified by the `killSignal` property (the default is `'SIGTERM'`) if the - * child runs longer than `timeout` milliseconds. - * - * Unlike the [`exec(3)`](http://man7.org/linux/man-pages/man3/exec.3.html) POSIX system call, `child_process.exec()` does not replace - * the existing process and uses a shell to execute the command. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In - * case of an error (including any error resulting in an exit code other than 0), a - * rejected promise is returned, with the same `error` object given in the - * callback, but with two additional properties `stdout` and `stderr`. - * - * ```js - * import util from 'node:util'; - * import child_process from 'node:child_process'; - * const exec = util.promisify(child_process.exec); - * - * async function lsExample() { - * const { stdout, stderr } = await exec('ls'); - * console.log('stdout:', stdout); - * console.error('stderr:', stderr); - * } - * lsExample(); - * ``` - * - * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except - * the error passed to the callback will be an `AbortError`: - * - * ```js - * import { exec } from 'node:child_process'; - * const controller = new AbortController(); - * const { signal } = controller; - * const child = exec('grep ssh', { signal }, (error) => { - * console.error(error); // an AbortError - * }); - * controller.abort(); - * ``` - * @since v0.1.90 - * @param command The command to run, with space-separated arguments. - * @param callback called with the output when process terminates. - */ - function exec( - command: string, - callback?: (error: ExecException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. - function exec( - command: string, - options: ExecOptionsWithBufferEncoding, - callback?: (error: ExecException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void, - ): ChildProcess; - // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`. - function exec( - command: string, - options: ExecOptionsWithStringEncoding, - callback?: (error: ExecException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - // fallback if nothing else matches. Worst case is always `string | Buffer`. - function exec( - command: string, - options: ExecOptions | undefined | null, - callback?: ( - error: ExecException | null, - stdout: string | NonSharedBuffer, - stderr: string | NonSharedBuffer, - ) => void, - ): ChildProcess; - interface PromiseWithChild extends Promise { - child: ChildProcess; - } - namespace exec { - function __promisify__(command: string): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - command: string, - options: ExecOptionsWithBufferEncoding, - ): PromiseWithChild<{ - stdout: NonSharedBuffer; - stderr: NonSharedBuffer; - }>; - function __promisify__( - command: string, - options: ExecOptionsWithStringEncoding, - ): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - command: string, - options: ExecOptions | undefined | null, - ): PromiseWithChild<{ - stdout: string | NonSharedBuffer; - stderr: string | NonSharedBuffer; - }>; - } - interface ExecFileOptions extends CommonOptions, Abortable { - maxBuffer?: number | undefined; - killSignal?: NodeJS.Signals | number | undefined; - windowsVerbatimArguments?: boolean | undefined; - shell?: boolean | string | undefined; - signal?: AbortSignal | undefined; - encoding?: string | null | undefined; - } - interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { - encoding?: BufferEncoding | undefined; - } - interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { - encoding: "buffer" | null; - } - /** @deprecated Use `ExecFileOptions` instead. */ - interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {} - // TODO: execFile exceptions can take many forms... this accurately describes none of them - type ExecFileException = - & Omit - & Omit - & { code?: string | number | null }; - /** - * The `child_process.execFile()` function is similar to {@link exec} except that it does not spawn a shell by default. Rather, the specified - * executable `file` is spawned directly as a new process making it slightly more - * efficient than {@link exec}. - * - * The same options as {@link exec} are supported. Since a shell is - * not spawned, behaviors such as I/O redirection and file globbing are not - * supported. - * - * ```js - * import { execFile } from 'node:child_process'; - * const child = execFile('node', ['--version'], (error, stdout, stderr) => { - * if (error) { - * throw error; - * } - * console.log(stdout); - * }); - * ``` - * - * The `stdout` and `stderr` arguments passed to the callback will contain the - * stdout and stderr output of the child process. By default, Node.js will decode - * the output as UTF-8 and pass strings to the callback. The `encoding` option - * can be used to specify the character encoding used to decode the stdout and - * stderr output. If `encoding` is `'buffer'`, or an unrecognized character - * encoding, `Buffer` objects will be passed to the callback instead. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a `Promise` for an `Object` with `stdout` and `stderr` properties. The returned `ChildProcess` instance is attached to the `Promise` as a `child` property. In - * case of an error (including any error resulting in an exit code other than 0), a - * rejected promise is returned, with the same `error` object given in the - * callback, but with two additional properties `stdout` and `stderr`. - * - * ```js - * import util from 'node:util'; - * import child_process from 'node:child_process'; - * const execFile = util.promisify(child_process.execFile); - * async function getVersion() { - * const { stdout } = await execFile('node', ['--version']); - * console.log(stdout); - * } - * getVersion(); - * ``` - * - * **If the `shell` option is enabled, do not pass unsanitized user input to this** - * **function. Any input containing shell metacharacters may be used to trigger** - * **arbitrary command execution.** - * - * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except - * the error passed to the callback will be an `AbortError`: - * - * ```js - * import { execFile } from 'node:child_process'; - * const controller = new AbortController(); - * const { signal } = controller; - * const child = execFile('node', ['--version'], { signal }, (error) => { - * console.error(error); // an AbortError - * }); - * controller.abort(); - * ``` - * @since v0.1.91 - * @param file The name or path of the executable file to run. - * @param args List of string arguments. - * @param callback Called with the output when process terminates. - */ - // no `options` definitely means stdout/stderr are `string`. - function execFile( - file: string, - callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - function execFile( - file: string, - args: readonly string[] | undefined | null, - callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. - function execFile( - file: string, - options: ExecFileOptionsWithBufferEncoding, - callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void, - ): ChildProcess; - function execFile( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptionsWithBufferEncoding, - callback?: (error: ExecFileException | null, stdout: NonSharedBuffer, stderr: NonSharedBuffer) => void, - ): ChildProcess; - // `options` with well-known or absent `encoding` means stdout/stderr are definitely `string`. - function execFile( - file: string, - options: ExecFileOptionsWithStringEncoding, - callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - function execFile( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptionsWithStringEncoding, - callback?: (error: ExecFileException | null, stdout: string, stderr: string) => void, - ): ChildProcess; - // fallback if nothing else matches. Worst case is always `string | Buffer`. - function execFile( - file: string, - options: ExecFileOptions | undefined | null, - callback: - | (( - error: ExecFileException | null, - stdout: string | NonSharedBuffer, - stderr: string | NonSharedBuffer, - ) => void) - | undefined - | null, - ): ChildProcess; - function execFile( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptions | undefined | null, - callback: - | (( - error: ExecFileException | null, - stdout: string | NonSharedBuffer, - stderr: string | NonSharedBuffer, - ) => void) - | undefined - | null, - ): ChildProcess; - namespace execFile { - function __promisify__(file: string): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - file: string, - args: readonly string[] | undefined | null, - ): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - file: string, - options: ExecFileOptionsWithBufferEncoding, - ): PromiseWithChild<{ - stdout: NonSharedBuffer; - stderr: NonSharedBuffer; - }>; - function __promisify__( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptionsWithBufferEncoding, - ): PromiseWithChild<{ - stdout: NonSharedBuffer; - stderr: NonSharedBuffer; - }>; - function __promisify__( - file: string, - options: ExecFileOptionsWithStringEncoding, - ): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptionsWithStringEncoding, - ): PromiseWithChild<{ - stdout: string; - stderr: string; - }>; - function __promisify__( - file: string, - options: ExecFileOptions | undefined | null, - ): PromiseWithChild<{ - stdout: string | NonSharedBuffer; - stderr: string | NonSharedBuffer; - }>; - function __promisify__( - file: string, - args: readonly string[] | undefined | null, - options: ExecFileOptions | undefined | null, - ): PromiseWithChild<{ - stdout: string | NonSharedBuffer; - stderr: string | NonSharedBuffer; - }>; - } - interface ForkOptions extends ProcessEnvOptions, MessagingOptions, Abortable { - execPath?: string | undefined; - execArgv?: string[] | undefined; - silent?: boolean | undefined; - /** - * Can be set to 'pipe', 'inherit', 'overlapped', or 'ignore', or an array of these strings. - * If passed as an array, the first element is used for `stdin`, the second for - * `stdout`, and the third for `stderr`. A fourth element can be used to - * specify the `stdio` behavior beyond the standard streams. See - * {@link ChildProcess.stdio} for more information. - * - * @default 'pipe' - */ - stdio?: StdioOptions | undefined; - detached?: boolean | undefined; - windowsVerbatimArguments?: boolean | undefined; - } - /** - * The `child_process.fork()` method is a special case of {@link spawn} used specifically to spawn new Node.js processes. - * Like {@link spawn}, a `ChildProcess` object is returned. The - * returned `ChildProcess` will have an additional communication channel - * built-in that allows messages to be passed back and forth between the parent and - * child. See `subprocess.send()` for details. - * - * Keep in mind that spawned Node.js child processes are - * independent of the parent with exception of the IPC communication channel - * that is established between the two. Each process has its own memory, with - * their own V8 instances. Because of the additional resource allocations - * required, spawning a large number of child Node.js processes is not - * recommended. - * - * By default, `child_process.fork()` will spawn new Node.js instances using the `process.execPath` of the parent process. The `execPath` property in the `options` object allows for an alternative - * execution path to be used. - * - * Node.js processes launched with a custom `execPath` will communicate with the - * parent process using the file descriptor (fd) identified using the - * environment variable `NODE_CHANNEL_FD` on the child process. - * - * Unlike the [`fork(2)`](http://man7.org/linux/man-pages/man2/fork.2.html) POSIX system call, `child_process.fork()` does not clone the - * current process. - * - * The `shell` option available in {@link spawn} is not supported by `child_process.fork()` and will be ignored if set. - * - * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.kill()` on the child process except - * the error passed to the callback will be an `AbortError`: - * - * ```js - * if (process.argv[2] === 'child') { - * setTimeout(() => { - * console.log(`Hello from ${process.argv[2]}!`); - * }, 1_000); - * } else { - * import { fork } from 'node:child_process'; - * const controller = new AbortController(); - * const { signal } = controller; - * const child = fork(__filename, ['child'], { signal }); - * child.on('error', (err) => { - * // This will be called with err being an AbortError if the controller aborts - * }); - * controller.abort(); // Stops the child process - * } - * ``` - * @since v0.5.0 - * @param modulePath The module to run in the child. - * @param args List of string arguments. - */ - function fork(modulePath: string | URL, options?: ForkOptions): ChildProcess; - function fork(modulePath: string | URL, args?: readonly string[], options?: ForkOptions): ChildProcess; - interface SpawnSyncOptions extends CommonSpawnOptions { - input?: string | NodeJS.ArrayBufferView | undefined; - maxBuffer?: number | undefined; - encoding?: BufferEncoding | "buffer" | null | undefined; - } - interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { - encoding: BufferEncoding; - } - interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { - encoding?: "buffer" | null | undefined; - } - interface SpawnSyncReturns { - pid: number; - output: Array; - stdout: T; - stderr: T; - status: number | null; - signal: NodeJS.Signals | null; - error?: Error; - } - /** - * The `child_process.spawnSync()` method is generally identical to {@link spawn} with the exception that the function will not return - * until the child process has fully closed. When a timeout has been encountered - * and `killSignal` is sent, the method won't return until the process has - * completely exited. If the process intercepts and handles the `SIGTERM` signal - * and doesn't exit, the parent process will wait until the child process has - * exited. - * - * **If the `shell` option is enabled, do not pass unsanitized user input to this** - * **function. Any input containing shell metacharacters may be used to trigger** - * **arbitrary command execution.** - * @since v0.11.12 - * @param command The command to run. - * @param args List of string arguments. - */ - function spawnSync(command: string): SpawnSyncReturns; - function spawnSync(command: string, options: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; - function spawnSync(command: string, options: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; - function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; - function spawnSync(command: string, args: readonly string[]): SpawnSyncReturns; - function spawnSync( - command: string, - args: readonly string[], - options: SpawnSyncOptionsWithStringEncoding, - ): SpawnSyncReturns; - function spawnSync( - command: string, - args: readonly string[], - options: SpawnSyncOptionsWithBufferEncoding, - ): SpawnSyncReturns; - function spawnSync( - command: string, - args?: readonly string[], - options?: SpawnSyncOptions, - ): SpawnSyncReturns; - interface CommonExecOptions extends CommonOptions { - input?: string | NodeJS.ArrayBufferView | undefined; - /** - * Can be set to 'pipe', 'inherit, or 'ignore', or an array of these strings. - * If passed as an array, the first element is used for `stdin`, the second for - * `stdout`, and the third for `stderr`. A fourth element can be used to - * specify the `stdio` behavior beyond the standard streams. See - * {@link ChildProcess.stdio} for more information. - * - * @default 'pipe' - */ - stdio?: StdioOptions | undefined; - killSignal?: NodeJS.Signals | number | undefined; - maxBuffer?: number | undefined; - encoding?: BufferEncoding | "buffer" | null | undefined; - } - interface ExecSyncOptions extends CommonExecOptions { - shell?: string | undefined; - } - interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { - encoding: BufferEncoding; - } - interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { - encoding?: "buffer" | null | undefined; - } - /** - * The `child_process.execSync()` method is generally identical to {@link exec} with the exception that the method will not return - * until the child process has fully closed. When a timeout has been encountered - * and `killSignal` is sent, the method won't return until the process has - * completely exited. If the child process intercepts and handles the `SIGTERM` signal and doesn't exit, the parent process will wait until the child process - * has exited. - * - * If the process times out or has a non-zero exit code, this method will throw. - * The `Error` object will contain the entire result from {@link spawnSync}. - * - * **Never pass unsanitized user input to this function. Any input containing shell** - * **metacharacters may be used to trigger arbitrary command execution.** - * @since v0.11.12 - * @param command The command to run. - * @return The stdout from the command. - */ - function execSync(command: string): NonSharedBuffer; - function execSync(command: string, options: ExecSyncOptionsWithStringEncoding): string; - function execSync(command: string, options: ExecSyncOptionsWithBufferEncoding): NonSharedBuffer; - function execSync(command: string, options?: ExecSyncOptions): string | NonSharedBuffer; - interface ExecFileSyncOptions extends CommonExecOptions { - shell?: boolean | string | undefined; - } - interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { - encoding: BufferEncoding; - } - interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { - encoding?: "buffer" | null | undefined; // specify `null`. - } - /** - * The `child_process.execFileSync()` method is generally identical to {@link execFile} with the exception that the method will not - * return until the child process has fully closed. When a timeout has been - * encountered and `killSignal` is sent, the method won't return until the process - * has completely exited. - * - * If the child process intercepts and handles the `SIGTERM` signal and - * does not exit, the parent process will still wait until the child process has - * exited. - * - * If the process times out or has a non-zero exit code, this method will throw an `Error` that will include the full result of the underlying {@link spawnSync}. - * - * **If the `shell` option is enabled, do not pass unsanitized user input to this** - * **function. Any input containing shell metacharacters may be used to trigger** - * **arbitrary command execution.** - * @since v0.11.12 - * @param file The name or path of the executable file to run. - * @param args List of string arguments. - * @return The stdout from the command. - */ - function execFileSync(file: string): NonSharedBuffer; - function execFileSync(file: string, options: ExecFileSyncOptionsWithStringEncoding): string; - function execFileSync(file: string, options: ExecFileSyncOptionsWithBufferEncoding): NonSharedBuffer; - function execFileSync(file: string, options?: ExecFileSyncOptions): string | NonSharedBuffer; - function execFileSync(file: string, args: readonly string[]): NonSharedBuffer; - function execFileSync( - file: string, - args: readonly string[], - options: ExecFileSyncOptionsWithStringEncoding, - ): string; - function execFileSync( - file: string, - args: readonly string[], - options: ExecFileSyncOptionsWithBufferEncoding, - ): NonSharedBuffer; - function execFileSync( - file: string, - args?: readonly string[], - options?: ExecFileSyncOptions, - ): string | NonSharedBuffer; -} -declare module "child_process" { - export * from "node:child_process"; -} diff --git a/skills/flight-finder/node_modules/@types/node/cluster.d.ts b/skills/flight-finder/node_modules/@types/node/cluster.d.ts deleted file mode 100644 index 4e5efbf..0000000 --- a/skills/flight-finder/node_modules/@types/node/cluster.d.ts +++ /dev/null @@ -1,486 +0,0 @@ -/** - * Clusters of Node.js processes can be used to run multiple instances of Node.js - * that can distribute workloads among their application threads. When process isolation - * is not needed, use the [`worker_threads`](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html) - * module instead, which allows running multiple application threads within a single Node.js instance. - * - * The cluster module allows easy creation of child processes that all share - * server ports. - * - * ```js - * import cluster from 'node:cluster'; - * import http from 'node:http'; - * import { availableParallelism } from 'node:os'; - * import process from 'node:process'; - * - * const numCPUs = availableParallelism(); - * - * if (cluster.isPrimary) { - * console.log(`Primary ${process.pid} is running`); - * - * // Fork workers. - * for (let i = 0; i < numCPUs; i++) { - * cluster.fork(); - * } - * - * cluster.on('exit', (worker, code, signal) => { - * console.log(`worker ${worker.process.pid} died`); - * }); - * } else { - * // Workers can share any TCP connection - * // In this case it is an HTTP server - * http.createServer((req, res) => { - * res.writeHead(200); - * res.end('hello world\n'); - * }).listen(8000); - * - * console.log(`Worker ${process.pid} started`); - * } - * ``` - * - * Running Node.js will now share port 8000 between the workers: - * - * ```console - * $ node server.js - * Primary 3596 is running - * Worker 4324 started - * Worker 4520 started - * Worker 6056 started - * Worker 5644 started - * ``` - * - * On Windows, it is not yet possible to set up a named pipe server in a worker. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/cluster.js) - */ -declare module "node:cluster" { - import * as child_process from "node:child_process"; - import { EventEmitter, InternalEventEmitter } from "node:events"; - class Worker implements EventEmitter { - constructor(options?: cluster.WorkerOptions); - /** - * Each new worker is given its own unique id, this id is stored in the `id`. - * - * While a worker is alive, this is the key that indexes it in `cluster.workers`. - * @since v0.8.0 - */ - id: number; - /** - * All workers are created using [`child_process.fork()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options), the returned object - * from this function is stored as `.process`. In a worker, the global `process` is stored. - * - * See: [Child Process module](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processforkmodulepath-args-options). - * - * Workers will call `process.exit(0)` if the `'disconnect'` event occurs - * on `process` and `.exitedAfterDisconnect` is not `true`. This protects against - * accidental disconnection. - * @since v0.7.0 - */ - process: child_process.ChildProcess; - /** - * Send a message to a worker or primary, optionally with a handle. - * - * In the primary, this sends a message to a specific worker. It is identical to [`ChildProcess.send()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#subprocesssendmessage-sendhandle-options-callback). - * - * In a worker, this sends a message to the primary. It is identical to `process.send()`. - * - * This example will echo back all messages from the primary: - * - * ```js - * if (cluster.isPrimary) { - * const worker = cluster.fork(); - * worker.send('hi there'); - * - * } else if (cluster.isWorker) { - * process.on('message', (msg) => { - * process.send(msg); - * }); - * } - * ``` - * @since v0.7.0 - * @param options The `options` argument, if present, is an object used to parameterize the sending of certain types of handles. - */ - send(message: child_process.Serializable, callback?: (error: Error | null) => void): boolean; - send( - message: child_process.Serializable, - sendHandle: child_process.SendHandle, - callback?: (error: Error | null) => void, - ): boolean; - send( - message: child_process.Serializable, - sendHandle: child_process.SendHandle, - options?: child_process.MessageOptions, - callback?: (error: Error | null) => void, - ): boolean; - /** - * This function will kill the worker. In the primary worker, it does this by - * disconnecting the `worker.process`, and once disconnected, killing with `signal`. In the worker, it does it by killing the process with `signal`. - * - * The `kill()` function kills the worker process without waiting for a graceful - * disconnect, it has the same behavior as `worker.process.kill()`. - * - * This method is aliased as `worker.destroy()` for backwards compatibility. - * - * In a worker, `process.kill()` exists, but it is not this function; - * it is [`kill()`](https://nodejs.org/docs/latest-v25.x/api/process.html#processkillpid-signal). - * @since v0.9.12 - * @param [signal='SIGTERM'] Name of the kill signal to send to the worker process. - */ - kill(signal?: string): void; - destroy(signal?: string): void; - /** - * In a worker, this function will close all servers, wait for the `'close'` event - * on those servers, and then disconnect the IPC channel. - * - * In the primary, an internal message is sent to the worker causing it to call `.disconnect()` on itself. - * - * Causes `.exitedAfterDisconnect` to be set. - * - * After a server is closed, it will no longer accept new connections, - * but connections may be accepted by any other listening worker. Existing - * connections will be allowed to close as usual. When no more connections exist, - * see `server.close()`, the IPC channel to the worker will close allowing it - * to die gracefully. - * - * The above applies _only_ to server connections, client connections are not - * automatically closed by workers, and disconnect does not wait for them to close - * before exiting. - * - * In a worker, `process.disconnect` exists, but it is not this function; - * it is `disconnect()`. - * - * Because long living server connections may block workers from disconnecting, it - * may be useful to send a message, so application specific actions may be taken to - * close them. It also may be useful to implement a timeout, killing a worker if - * the `'disconnect'` event has not been emitted after some time. - * - * ```js - * import net from 'node:net'; - * - * if (cluster.isPrimary) { - * const worker = cluster.fork(); - * let timeout; - * - * worker.on('listening', (address) => { - * worker.send('shutdown'); - * worker.disconnect(); - * timeout = setTimeout(() => { - * worker.kill(); - * }, 2000); - * }); - * - * worker.on('disconnect', () => { - * clearTimeout(timeout); - * }); - * - * } else if (cluster.isWorker) { - * const server = net.createServer((socket) => { - * // Connections never end - * }); - * - * server.listen(8000); - * - * process.on('message', (msg) => { - * if (msg === 'shutdown') { - * // Initiate graceful close of any connections to server - * } - * }); - * } - * ``` - * @since v0.7.7 - * @return A reference to `worker`. - */ - disconnect(): this; - /** - * This function returns `true` if the worker is connected to its primary via its - * IPC channel, `false` otherwise. A worker is connected to its primary after it - * has been created. It is disconnected after the `'disconnect'` event is emitted. - * @since v0.11.14 - */ - isConnected(): boolean; - /** - * This function returns `true` if the worker's process has terminated (either - * because of exiting or being signaled). Otherwise, it returns `false`. - * - * ```js - * import cluster from 'node:cluster'; - * import http from 'node:http'; - * import { availableParallelism } from 'node:os'; - * import process from 'node:process'; - * - * const numCPUs = availableParallelism(); - * - * if (cluster.isPrimary) { - * console.log(`Primary ${process.pid} is running`); - * - * // Fork workers. - * for (let i = 0; i < numCPUs; i++) { - * cluster.fork(); - * } - * - * cluster.on('fork', (worker) => { - * console.log('worker is dead:', worker.isDead()); - * }); - * - * cluster.on('exit', (worker, code, signal) => { - * console.log('worker is dead:', worker.isDead()); - * }); - * } else { - * // Workers can share any TCP connection. In this case, it is an HTTP server. - * http.createServer((req, res) => { - * res.writeHead(200); - * res.end(`Current process\n ${process.pid}`); - * process.kill(process.pid); - * }).listen(8000); - * } - * ``` - * @since v0.11.14 - */ - isDead(): boolean; - /** - * This property is `true` if the worker exited due to `.disconnect()`. - * If the worker exited any other way, it is `false`. If the - * worker has not exited, it is `undefined`. - * - * The boolean `worker.exitedAfterDisconnect` allows distinguishing between - * voluntary and accidental exit, the primary may choose not to respawn a worker - * based on this value. - * - * ```js - * cluster.on('exit', (worker, code, signal) => { - * if (worker.exitedAfterDisconnect === true) { - * console.log('Oh, it was just voluntary – no need to worry'); - * } - * }); - * - * // kill worker - * worker.kill(); - * ``` - * @since v6.0.0 - */ - exitedAfterDisconnect: boolean; - } - interface Worker extends InternalEventEmitter {} - type _Worker = Worker; - namespace cluster { - interface Worker extends _Worker {} - interface WorkerOptions { - id?: number | undefined; - process?: child_process.ChildProcess | undefined; - state?: string | undefined; - } - interface WorkerEventMap { - "disconnect": []; - "error": [error: Error]; - "exit": [code: number, signal: string]; - "listening": [address: Address]; - "message": [message: any, handle: child_process.SendHandle]; - "online": []; - } - interface ClusterSettings { - /** - * List of string arguments passed to the Node.js executable. - * @default process.execArgv - */ - execArgv?: string[] | undefined; - /** - * File path to worker file. - * @default process.argv[1] - */ - exec?: string | undefined; - /** - * String arguments passed to worker. - * @default process.argv.slice(2) - */ - args?: readonly string[] | undefined; - /** - * Whether or not to send output to parent's stdio. - * @default false - */ - silent?: boolean | undefined; - /** - * Configures the stdio of forked processes. Because the cluster module relies on IPC to function, this configuration must - * contain an `'ipc'` entry. When this option is provided, it overrides `silent`. See [`child_prcess.spawn()`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#child_processspawncommand-args-options)'s - * [`stdio`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#optionsstdio). - */ - stdio?: any[] | undefined; - /** - * Sets the user identity of the process. (See [`setuid(2)`](https://man7.org/linux/man-pages/man2/setuid.2.html).) - */ - uid?: number | undefined; - /** - * Sets the group identity of the process. (See [`setgid(2)`](https://man7.org/linux/man-pages/man2/setgid.2.html).) - */ - gid?: number | undefined; - /** - * Sets inspector port of worker. This can be a number, or a function that takes no arguments and returns a number. - * By default each worker gets its own port, incremented from the primary's `process.debugPort`. - */ - inspectPort?: number | (() => number) | undefined; - /** - * Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. - * See [Advanced serialization for `child_process`](https://nodejs.org/docs/latest-v25.x/api/child_process.html#advanced-serialization) for more details. - * @default false - */ - serialization?: "json" | "advanced" | undefined; - /** - * Current working directory of the worker process. - * @default undefined (inherits from parent process) - */ - cwd?: string | undefined; - /** - * Hide the forked processes console window that would normally be created on Windows systems. - * @default false - */ - windowsHide?: boolean | undefined; - } - interface Address { - address: string; - port: number; - /** - * The `addressType` is one of: - * - * * `4` (TCPv4) - * * `6` (TCPv6) - * * `-1` (Unix domain socket) - * * `'udp4'` or `'udp6'` (UDPv4 or UDPv6) - */ - addressType: 4 | 6 | -1 | "udp4" | "udp6"; - } - interface ClusterEventMap { - "disconnect": [worker: Worker]; - "exit": [worker: Worker, code: number, signal: string]; - "fork": [worker: Worker]; - "listening": [worker: Worker, address: Address]; - "message": [worker: Worker, message: any, handle: child_process.SendHandle]; - "online": [worker: Worker]; - "setup": [settings: ClusterSettings]; - } - interface Cluster extends InternalEventEmitter { - /** - * A `Worker` object contains all public information and method about a worker. - * In the primary it can be obtained using `cluster.workers`. In a worker - * it can be obtained using `cluster.worker`. - * @since v0.7.0 - */ - Worker: typeof Worker; - disconnect(callback?: () => void): void; - /** - * Spawn a new worker process. - * - * This can only be called from the primary process. - * @param env Key/value pairs to add to worker process environment. - * @since v0.6.0 - */ - fork(env?: any): Worker; - /** @deprecated since v16.0.0 - use isPrimary. */ - readonly isMaster: boolean; - /** - * True if the process is a primary. This is determined by the `process.env.NODE_UNIQUE_ID`. If `process.env.NODE_UNIQUE_ID` - * is undefined, then `isPrimary` is `true`. - * @since v16.0.0 - */ - readonly isPrimary: boolean; - /** - * True if the process is not a primary (it is the negation of `cluster.isPrimary`). - * @since v0.6.0 - */ - readonly isWorker: boolean; - /** - * The scheduling policy, either `cluster.SCHED_RR` for round-robin or `cluster.SCHED_NONE` to leave it to the operating system. This is a - * global setting and effectively frozen once either the first worker is spawned, or [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings) - * is called, whichever comes first. - * - * `SCHED_RR` is the default on all operating systems except Windows. Windows will change to `SCHED_RR` once libuv is able to effectively distribute - * IOCP handles without incurring a large performance hit. - * - * `cluster.schedulingPolicy` can also be set through the `NODE_CLUSTER_SCHED_POLICY` environment variable. Valid values are `'rr'` and `'none'`. - * @since v0.11.2 - */ - schedulingPolicy: number; - /** - * After calling [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings) - * (or [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv)) this settings object will contain - * the settings, including the default values. - * - * This object is not intended to be changed or set manually. - * @since v0.7.1 - */ - readonly settings: ClusterSettings; - /** @deprecated since v16.0.0 - use [`.setupPrimary()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clustersetupprimarysettings) instead. */ - setupMaster(settings?: ClusterSettings): void; - /** - * `setupPrimary` is used to change the default 'fork' behavior. Once called, the settings will be present in `cluster.settings`. - * - * Any settings changes only affect future calls to [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv) - * and have no effect on workers that are already running. - * - * The only attribute of a worker that cannot be set via `.setupPrimary()` is the `env` passed to - * [`.fork()`](https://nodejs.org/docs/latest-v25.x/api/cluster.html#clusterforkenv). - * - * The defaults above apply to the first call only; the defaults for later calls are the current values at the time of - * `cluster.setupPrimary()` is called. - * - * ```js - * import cluster from 'node:cluster'; - * - * cluster.setupPrimary({ - * exec: 'worker.js', - * args: ['--use', 'https'], - * silent: true, - * }); - * cluster.fork(); // https worker - * cluster.setupPrimary({ - * exec: 'worker.js', - * args: ['--use', 'http'], - * }); - * cluster.fork(); // http worker - * ``` - * - * This can only be called from the primary process. - * @since v16.0.0 - */ - setupPrimary(settings?: ClusterSettings): void; - /** - * A reference to the current worker object. Not available in the primary process. - * - * ```js - * import cluster from 'node:cluster'; - * - * if (cluster.isPrimary) { - * console.log('I am primary'); - * cluster.fork(); - * cluster.fork(); - * } else if (cluster.isWorker) { - * console.log(`I am worker #${cluster.worker.id}`); - * } - * ``` - * @since v0.7.0 - */ - readonly worker?: Worker; - /** - * A hash that stores the active worker objects, keyed by `id` field. This makes it easy to loop through all the workers. It is only available in the primary process. - * - * A worker is removed from `cluster.workers` after the worker has disconnected _and_ exited. The order between these two events cannot be determined in advance. However, it - * is guaranteed that the removal from the `cluster.workers` list happens before the last `'disconnect'` or `'exit'` event is emitted. - * - * ```js - * import cluster from 'node:cluster'; - * - * for (const worker of Object.values(cluster.workers)) { - * worker.send('big announcement to all workers'); - * } - * ``` - * @since v0.7.0 - */ - readonly workers?: NodeJS.Dict; - readonly SCHED_NONE: number; - readonly SCHED_RR: number; - } - } - var cluster: cluster.Cluster; - export = cluster; -} -declare module "cluster" { - import cluster = require("node:cluster"); - export = cluster; -} diff --git a/skills/flight-finder/node_modules/@types/node/compatibility/iterators.d.ts b/skills/flight-finder/node_modules/@types/node/compatibility/iterators.d.ts deleted file mode 100644 index 156e785..0000000 --- a/skills/flight-finder/node_modules/@types/node/compatibility/iterators.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Backwards-compatible iterator interfaces, augmented with iterator helper methods by lib.esnext.iterator in TypeScript 5.6. -// The IterableIterator interface does not contain these methods, which creates assignability issues in places where IteratorObjects -// are expected (eg. DOM-compatible APIs) if lib.esnext.iterator is loaded. -// Also ensures that iterators returned by the Node API, which inherit from Iterator.prototype, correctly expose the iterator helper methods -// if lib.esnext.iterator is loaded. -// TODO: remove once this package no longer supports TS 5.5, and replace NodeJS.BuiltinIteratorReturn with BuiltinIteratorReturn. - -// Placeholders for TS <5.6 -interface IteratorObject {} -interface AsyncIteratorObject {} - -declare namespace NodeJS { - // Populate iterator methods for TS <5.6 - interface Iterator extends globalThis.Iterator {} - interface AsyncIterator extends globalThis.AsyncIterator {} - - // Polyfill for TS 5.6's instrinsic BuiltinIteratorReturn type, required for DOM-compatible iterators - type BuiltinIteratorReturn = ReturnType extends - globalThis.Iterator ? TReturn - : any; -} diff --git a/skills/flight-finder/node_modules/@types/node/console.d.ts b/skills/flight-finder/node_modules/@types/node/console.d.ts deleted file mode 100644 index 3943442..0000000 --- a/skills/flight-finder/node_modules/@types/node/console.d.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * The `node:console` module provides a simple debugging console that is similar to - * the JavaScript console mechanism provided by web browsers. - * - * The module exports two specific components: - * - * * A `Console` class with methods such as `console.log()`, `console.error()`, and `console.warn()` that can be used to write to any Node.js stream. - * * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v25.x/api/process.html#processstdout) and - * [`process.stderr`](https://nodejs.org/docs/latest-v25.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. - * - * _**Warning**_: The global console object's methods are neither consistently - * synchronous like the browser APIs they resemble, nor are they consistently - * asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v25.x/api/process.html#a-note-on-process-io) for - * more information. - * - * Example using the global `console`: - * - * ```js - * console.log('hello world'); - * // Prints: hello world, to stdout - * console.log('hello %s', 'world'); - * // Prints: hello world, to stdout - * console.error(new Error('Whoops, something bad happened')); - * // Prints error message and stack trace to stderr: - * // Error: Whoops, something bad happened - * // at [eval]:5:15 - * // at Script.runInThisContext (node:vm:132:18) - * // at Object.runInThisContext (node:vm:309:38) - * // at node:internal/process/execution:77:19 - * // at [eval]-wrapper:6:22 - * // at evalScript (node:internal/process/execution:76:60) - * // at node:internal/main/eval_string:23:3 - * - * const name = 'Will Robinson'; - * console.warn(`Danger ${name}! Danger!`); - * // Prints: Danger Will Robinson! Danger!, to stderr - * ``` - * - * Example using the `Console` class: - * - * ```js - * const out = getStreamSomehow(); - * const err = getStreamSomehow(); - * const myConsole = new console.Console(out, err); - * - * myConsole.log('hello world'); - * // Prints: hello world, to out - * myConsole.log('hello %s', 'world'); - * // Prints: hello world, to out - * myConsole.error(new Error('Whoops, something bad happened')); - * // Prints: [Error: Whoops, something bad happened], to err - * - * const name = 'Will Robinson'; - * myConsole.warn(`Danger ${name}! Danger!`); - * // Prints: Danger Will Robinson! Danger!, to err - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/console.js) - */ -declare module "node:console" { - import { InspectOptions } from "node:util"; - namespace console { - interface ConsoleOptions { - stdout: NodeJS.WritableStream; - stderr?: NodeJS.WritableStream | undefined; - /** - * Ignore errors when writing to the underlying streams. - * @default true - */ - ignoreErrors?: boolean | undefined; - /** - * Set color support for this `Console` instance. Setting to true enables coloring while inspecting - * values. Setting to `false` disables coloring while inspecting values. Setting to `'auto'` makes color - * support depend on the value of the `isTTY` property and the value returned by `getColorDepth()` on the - * respective stream. This option can not be used, if `inspectOptions.colors` is set as well. - * @default 'auto' - */ - colorMode?: boolean | "auto" | undefined; - /** - * Specifies options that are passed along to - * [`util.inspect()`](https://nodejs.org/docs/latest-v25.x/api/util.html#utilinspectobject-options). - */ - inspectOptions?: InspectOptions | ReadonlyMap | undefined; - /** - * Set group indentation. - * @default 2 - */ - groupIndentation?: number | undefined; - } - interface Console { - readonly Console: { - prototype: Console; - new(stdout: NodeJS.WritableStream, stderr?: NodeJS.WritableStream, ignoreErrors?: boolean): Console; - new(options: ConsoleOptions): Console; - }; - assert(condition?: unknown, ...data: any[]): void; - clear(): void; - count(label?: string): void; - countReset(label?: string): void; - debug(...data: any[]): void; - dir(item?: any, options?: InspectOptions): void; - dirxml(...data: any[]): void; - error(...data: any[]): void; - group(...data: any[]): void; - groupCollapsed(...data: any[]): void; - groupEnd(): void; - info(...data: any[]): void; - log(...data: any[]): void; - table(tabularData?: any, properties?: string[]): void; - time(label?: string): void; - timeEnd(label?: string): void; - timeLog(label?: string, ...data: any[]): void; - trace(...data: any[]): void; - warn(...data: any[]): void; - /** - * This method does not display anything unless used in the inspector. The `console.profile()` - * method starts a JavaScript CPU profile with an optional label until {@link profileEnd} - * is called. The profile is then added to the Profile panel of the inspector. - * - * ```js - * console.profile('MyLabel'); - * // Some code - * console.profileEnd('MyLabel'); - * // Adds the profile 'MyLabel' to the Profiles panel of the inspector. - * ``` - * @since v8.0.0 - */ - profile(label?: string): void; - /** - * This method does not display anything unless used in the inspector. Stops the current - * JavaScript CPU profiling session if one has been started and prints the report to the - * Profiles panel of the inspector. See {@link profile} for an example. - * - * If this method is called without a label, the most recently started profile is stopped. - * @since v8.0.0 - */ - profileEnd(label?: string): void; - /** - * This method does not display anything unless used in the inspector. The `console.timeStamp()` - * method adds an event with the label `'label'` to the Timeline panel of the inspector. - * @since v8.0.0 - */ - timeStamp(label?: string): void; - } - } - var console: console.Console; - export = console; -} -declare module "console" { - import console = require("node:console"); - export = console; -} diff --git a/skills/flight-finder/node_modules/@types/node/constants.d.ts b/skills/flight-finder/node_modules/@types/node/constants.d.ts deleted file mode 100644 index c24ad98..0000000 --- a/skills/flight-finder/node_modules/@types/node/constants.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @deprecated The `node:constants` module is deprecated. When requiring access to constants - * relevant to specific Node.js builtin modules, developers should instead refer - * to the `constants` property exposed by the relevant module. For instance, - * `require('node:fs').constants` and `require('node:os').constants`. - */ -declare module "node:constants" { - const constants: - & typeof import("node:os").constants.dlopen - & typeof import("node:os").constants.errno - & typeof import("node:os").constants.priority - & typeof import("node:os").constants.signals - & typeof import("node:fs").constants - & typeof import("node:crypto").constants; - export = constants; -} -declare module "constants" { - import constants = require("node:constants"); - export = constants; -} diff --git a/skills/flight-finder/node_modules/@types/node/crypto.d.ts b/skills/flight-finder/node_modules/@types/node/crypto.d.ts deleted file mode 100644 index 15b46ce..0000000 --- a/skills/flight-finder/node_modules/@types/node/crypto.d.ts +++ /dev/null @@ -1,4065 +0,0 @@ -/** - * The `node:crypto` module provides cryptographic functionality that includes a - * set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify - * functions. - * - * ```js - * const { createHmac } = await import('node:crypto'); - * - * const secret = 'abcdefg'; - * const hash = createHmac('sha256', secret) - * .update('I love cupcakes') - * .digest('hex'); - * console.log(hash); - * // Prints: - * // c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/crypto.js) - */ -declare module "node:crypto" { - import { NonSharedBuffer } from "node:buffer"; - import * as stream from "node:stream"; - import { PeerCertificate } from "node:tls"; - /** - * SPKAC is a Certificate Signing Request mechanism originally implemented by - * Netscape and was specified formally as part of HTML5's `keygen` element. - * - * `` is deprecated since [HTML 5.2](https://www.w3.org/TR/html52/changes.html#features-removed) and new projects - * should not use this element anymore. - * - * The `node:crypto` module provides the `Certificate` class for working with SPKAC - * data. The most common usage is handling output generated by the HTML5 `` element. Node.js uses [OpenSSL's SPKAC - * implementation](https://www.openssl.org/docs/man3.0/man1/openssl-spkac.html) internally. - * @since v0.11.8 - */ - class Certificate { - /** - * ```js - * const { Certificate } = await import('node:crypto'); - * const spkac = getSpkacSomehow(); - * const challenge = Certificate.exportChallenge(spkac); - * console.log(challenge.toString('utf8')); - * // Prints: the challenge as a UTF8 string - * ``` - * @since v9.0.0 - * @param encoding The `encoding` of the `spkac` string. - * @return The challenge component of the `spkac` data structure, which includes a public key and a challenge. - */ - static exportChallenge(spkac: BinaryLike): NonSharedBuffer; - /** - * ```js - * const { Certificate } = await import('node:crypto'); - * const spkac = getSpkacSomehow(); - * const publicKey = Certificate.exportPublicKey(spkac); - * console.log(publicKey); - * // Prints: the public key as - * ``` - * @since v9.0.0 - * @param encoding The `encoding` of the `spkac` string. - * @return The public key component of the `spkac` data structure, which includes a public key and a challenge. - */ - static exportPublicKey(spkac: BinaryLike, encoding?: string): NonSharedBuffer; - /** - * ```js - * import { Buffer } from 'node:buffer'; - * const { Certificate } = await import('node:crypto'); - * - * const spkac = getSpkacSomehow(); - * console.log(Certificate.verifySpkac(Buffer.from(spkac))); - * // Prints: true or false - * ``` - * @since v9.0.0 - * @param encoding The `encoding` of the `spkac` string. - * @return `true` if the given `spkac` data structure is valid, `false` otherwise. - */ - static verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; - /** - * @deprecated - * @param spkac - * @returns The challenge component of the `spkac` data structure, - * which includes a public key and a challenge. - */ - exportChallenge(spkac: BinaryLike): NonSharedBuffer; - /** - * @deprecated - * @param spkac - * @param encoding The encoding of the spkac string. - * @returns The public key component of the `spkac` data structure, - * which includes a public key and a challenge. - */ - exportPublicKey(spkac: BinaryLike, encoding?: string): NonSharedBuffer; - /** - * @deprecated - * @param spkac - * @returns `true` if the given `spkac` data structure is valid, - * `false` otherwise. - */ - verifySpkac(spkac: NodeJS.ArrayBufferView): boolean; - } - namespace constants { - // https://nodejs.org/dist/latest-v25.x/docs/api/crypto.html#crypto-constants - const OPENSSL_VERSION_NUMBER: number; - /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */ - const SSL_OP_ALL: number; - /** Instructs OpenSSL to allow a non-[EC]DHE-based key exchange mode for TLS v1.3 */ - const SSL_OP_ALLOW_NO_DHE_KEX: number; - /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ - const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number; - /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */ - const SSL_OP_CIPHER_SERVER_PREFERENCE: number; - /** Instructs OpenSSL to use Cisco's version identifier of DTLS_BAD_VER. */ - const SSL_OP_CISCO_ANYCONNECT: number; - /** Instructs OpenSSL to turn on cookie exchange. */ - const SSL_OP_COOKIE_EXCHANGE: number; - /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */ - const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number; - /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */ - const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number; - /** Allows initial connection to servers that do not support RI. */ - const SSL_OP_LEGACY_SERVER_CONNECT: number; - /** Instructs OpenSSL to disable support for SSL/TLS compression. */ - const SSL_OP_NO_COMPRESSION: number; - /** Instructs OpenSSL to disable encrypt-then-MAC. */ - const SSL_OP_NO_ENCRYPT_THEN_MAC: number; - const SSL_OP_NO_QUERY_MTU: number; - /** Instructs OpenSSL to disable renegotiation. */ - const SSL_OP_NO_RENEGOTIATION: number; - /** Instructs OpenSSL to always start a new session when performing renegotiation. */ - const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number; - /** Instructs OpenSSL to turn off SSL v2 */ - const SSL_OP_NO_SSLv2: number; - /** Instructs OpenSSL to turn off SSL v3 */ - const SSL_OP_NO_SSLv3: number; - /** Instructs OpenSSL to disable use of RFC4507bis tickets. */ - const SSL_OP_NO_TICKET: number; - /** Instructs OpenSSL to turn off TLS v1 */ - const SSL_OP_NO_TLSv1: number; - /** Instructs OpenSSL to turn off TLS v1.1 */ - const SSL_OP_NO_TLSv1_1: number; - /** Instructs OpenSSL to turn off TLS v1.2 */ - const SSL_OP_NO_TLSv1_2: number; - /** Instructs OpenSSL to turn off TLS v1.3 */ - const SSL_OP_NO_TLSv1_3: number; - /** Instructs OpenSSL server to prioritize ChaCha20-Poly1305 when the client does. This option has no effect if `SSL_OP_CIPHER_SERVER_PREFERENCE` is not enabled. */ - const SSL_OP_PRIORITIZE_CHACHA: number; - /** Instructs OpenSSL to disable version rollback attack detection. */ - const SSL_OP_TLS_ROLLBACK_BUG: number; - const ENGINE_METHOD_RSA: number; - const ENGINE_METHOD_DSA: number; - const ENGINE_METHOD_DH: number; - const ENGINE_METHOD_RAND: number; - const ENGINE_METHOD_EC: number; - const ENGINE_METHOD_CIPHERS: number; - const ENGINE_METHOD_DIGESTS: number; - const ENGINE_METHOD_PKEY_METHS: number; - const ENGINE_METHOD_PKEY_ASN1_METHS: number; - const ENGINE_METHOD_ALL: number; - const ENGINE_METHOD_NONE: number; - const DH_CHECK_P_NOT_SAFE_PRIME: number; - const DH_CHECK_P_NOT_PRIME: number; - const DH_UNABLE_TO_CHECK_GENERATOR: number; - const DH_NOT_SUITABLE_GENERATOR: number; - const RSA_PKCS1_PADDING: number; - const RSA_SSLV23_PADDING: number; - const RSA_NO_PADDING: number; - const RSA_PKCS1_OAEP_PADDING: number; - const RSA_X931_PADDING: number; - const RSA_PKCS1_PSS_PADDING: number; - /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */ - const RSA_PSS_SALTLEN_DIGEST: number; - /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */ - const RSA_PSS_SALTLEN_MAX_SIGN: number; - /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */ - const RSA_PSS_SALTLEN_AUTO: number; - const POINT_CONVERSION_COMPRESSED: number; - const POINT_CONVERSION_UNCOMPRESSED: number; - const POINT_CONVERSION_HYBRID: number; - /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */ - const defaultCoreCipherList: string; - /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */ - const defaultCipherList: string; - } - interface HashOptions extends stream.TransformOptions { - /** - * For XOF hash functions such as `shake256`, the - * outputLength option can be used to specify the desired output length in bytes. - */ - outputLength?: number | undefined; - } - /** @deprecated since v10.0.0 */ - const fips: boolean; - /** - * Creates and returns a `Hash` object that can be used to generate hash digests - * using the given `algorithm`. Optional `options` argument controls stream - * behavior. For XOF hash functions such as `'shake256'`, the `outputLength` option - * can be used to specify the desired output length in bytes. - * - * The `algorithm` is dependent on the available algorithms supported by the - * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. - * On recent releases of OpenSSL, `openssl list -digest-algorithms` will - * display the available digest algorithms. - * - * Example: generating the sha256 sum of a file - * - * ```js - * import { - * createReadStream, - * } from 'node:fs'; - * import { argv } from 'node:process'; - * const { - * createHash, - * } = await import('node:crypto'); - * - * const filename = argv[2]; - * - * const hash = createHash('sha256'); - * - * const input = createReadStream(filename); - * input.on('readable', () => { - * // Only one element is going to be produced by the - * // hash stream. - * const data = input.read(); - * if (data) - * hash.update(data); - * else { - * console.log(`${hash.digest('hex')} ${filename}`); - * } - * }); - * ``` - * @since v0.1.92 - * @param options `stream.transform` options - */ - function createHash(algorithm: string, options?: HashOptions): Hash; - /** - * Creates and returns an `Hmac` object that uses the given `algorithm` and `key`. - * Optional `options` argument controls stream behavior. - * - * The `algorithm` is dependent on the available algorithms supported by the - * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. - * On recent releases of OpenSSL, `openssl list -digest-algorithms` will - * display the available digest algorithms. - * - * The `key` is the HMAC key used to generate the cryptographic HMAC hash. If it is - * a `KeyObject`, its type must be `secret`. If it is a string, please consider `caveats when using strings as inputs to cryptographic APIs`. If it was - * obtained from a cryptographically secure source of entropy, such as {@link randomBytes} or {@link generateKey}, its length should not - * exceed the block size of `algorithm` (e.g., 512 bits for SHA-256). - * - * Example: generating the sha256 HMAC of a file - * - * ```js - * import { - * createReadStream, - * } from 'node:fs'; - * import { argv } from 'node:process'; - * const { - * createHmac, - * } = await import('node:crypto'); - * - * const filename = argv[2]; - * - * const hmac = createHmac('sha256', 'a secret'); - * - * const input = createReadStream(filename); - * input.on('readable', () => { - * // Only one element is going to be produced by the - * // hash stream. - * const data = input.read(); - * if (data) - * hmac.update(data); - * else { - * console.log(`${hmac.digest('hex')} ${filename}`); - * } - * }); - * ``` - * @since v0.1.94 - * @param options `stream.transform` options - */ - function createHmac(algorithm: string, key: BinaryLike | KeyObject, options?: stream.TransformOptions): Hmac; - // https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings - type BinaryToTextEncoding = "base64" | "base64url" | "hex" | "binary"; - type CharacterEncoding = "utf8" | "utf-8" | "utf16le" | "utf-16le" | "latin1"; - type LegacyCharacterEncoding = "ascii" | "binary" | "ucs2" | "ucs-2"; - type Encoding = BinaryToTextEncoding | CharacterEncoding | LegacyCharacterEncoding; - type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid"; - /** - * The `Hash` class is a utility for creating hash digests of data. It can be - * used in one of two ways: - * - * * As a `stream` that is both readable and writable, where data is written - * to produce a computed hash digest on the readable side, or - * * Using the `hash.update()` and `hash.digest()` methods to produce the - * computed hash. - * - * The {@link createHash} method is used to create `Hash` instances. `Hash`objects are not to be created directly using the `new` keyword. - * - * Example: Using `Hash` objects as streams: - * - * ```js - * const { - * createHash, - * } = await import('node:crypto'); - * - * const hash = createHash('sha256'); - * - * hash.on('readable', () => { - * // Only one element is going to be produced by the - * // hash stream. - * const data = hash.read(); - * if (data) { - * console.log(data.toString('hex')); - * // Prints: - * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 - * } - * }); - * - * hash.write('some data to hash'); - * hash.end(); - * ``` - * - * Example: Using `Hash` and piped streams: - * - * ```js - * import { createReadStream } from 'node:fs'; - * import { stdout } from 'node:process'; - * const { createHash } = await import('node:crypto'); - * - * const hash = createHash('sha256'); - * - * const input = createReadStream('test.js'); - * input.pipe(hash).setEncoding('hex').pipe(stdout); - * ``` - * - * Example: Using the `hash.update()` and `hash.digest()` methods: - * - * ```js - * const { - * createHash, - * } = await import('node:crypto'); - * - * const hash = createHash('sha256'); - * - * hash.update('some data to hash'); - * console.log(hash.digest('hex')); - * // Prints: - * // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 - * ``` - * @since v0.1.92 - */ - class Hash extends stream.Transform { - private constructor(); - /** - * Creates a new `Hash` object that contains a deep copy of the internal state - * of the current `Hash` object. - * - * The optional `options` argument controls stream behavior. For XOF hash - * functions such as `'shake256'`, the `outputLength` option can be used to - * specify the desired output length in bytes. - * - * An error is thrown when an attempt is made to copy the `Hash` object after - * its `hash.digest()` method has been called. - * - * ```js - * // Calculate a rolling hash. - * const { - * createHash, - * } = await import('node:crypto'); - * - * const hash = createHash('sha256'); - * - * hash.update('one'); - * console.log(hash.copy().digest('hex')); - * - * hash.update('two'); - * console.log(hash.copy().digest('hex')); - * - * hash.update('three'); - * console.log(hash.copy().digest('hex')); - * - * // Etc. - * ``` - * @since v13.1.0 - * @param options `stream.transform` options - */ - copy(options?: HashOptions): Hash; - /** - * Updates the hash content with the given `data`, the encoding of which - * is given in `inputEncoding`. - * If `encoding` is not provided, and the `data` is a string, an - * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. - * - * This can be called many times with new data as it is streamed. - * @since v0.1.92 - * @param inputEncoding The `encoding` of the `data` string. - */ - update(data: BinaryLike): Hash; - update(data: string, inputEncoding: Encoding): Hash; - /** - * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method). - * If `encoding` is provided a string will be returned; otherwise - * a `Buffer` is returned. - * - * The `Hash` object can not be used again after `hash.digest()` method has been - * called. Multiple calls will cause an error to be thrown. - * @since v0.1.92 - * @param encoding The `encoding` of the return value. - */ - digest(): NonSharedBuffer; - digest(encoding: BinaryToTextEncoding): string; - } - /** - * The `Hmac` class is a utility for creating cryptographic HMAC digests. It can - * be used in one of two ways: - * - * * As a `stream` that is both readable and writable, where data is written - * to produce a computed HMAC digest on the readable side, or - * * Using the `hmac.update()` and `hmac.digest()` methods to produce the - * computed HMAC digest. - * - * The {@link createHmac} method is used to create `Hmac` instances. `Hmac`objects are not to be created directly using the `new` keyword. - * - * Example: Using `Hmac` objects as streams: - * - * ```js - * const { - * createHmac, - * } = await import('node:crypto'); - * - * const hmac = createHmac('sha256', 'a secret'); - * - * hmac.on('readable', () => { - * // Only one element is going to be produced by the - * // hash stream. - * const data = hmac.read(); - * if (data) { - * console.log(data.toString('hex')); - * // Prints: - * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e - * } - * }); - * - * hmac.write('some data to hash'); - * hmac.end(); - * ``` - * - * Example: Using `Hmac` and piped streams: - * - * ```js - * import { createReadStream } from 'node:fs'; - * import { stdout } from 'node:process'; - * const { - * createHmac, - * } = await import('node:crypto'); - * - * const hmac = createHmac('sha256', 'a secret'); - * - * const input = createReadStream('test.js'); - * input.pipe(hmac).pipe(stdout); - * ``` - * - * Example: Using the `hmac.update()` and `hmac.digest()` methods: - * - * ```js - * const { - * createHmac, - * } = await import('node:crypto'); - * - * const hmac = createHmac('sha256', 'a secret'); - * - * hmac.update('some data to hash'); - * console.log(hmac.digest('hex')); - * // Prints: - * // 7fd04df92f636fd450bc841c9418e5825c17f33ad9c87c518115a45971f7f77e - * ``` - * @since v0.1.94 - */ - class Hmac extends stream.Transform { - private constructor(); - /** - * Updates the `Hmac` content with the given `data`, the encoding of which - * is given in `inputEncoding`. - * If `encoding` is not provided, and the `data` is a string, an - * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. - * - * This can be called many times with new data as it is streamed. - * @since v0.1.94 - * @param inputEncoding The `encoding` of the `data` string. - */ - update(data: BinaryLike): Hmac; - update(data: string, inputEncoding: Encoding): Hmac; - /** - * Calculates the HMAC digest of all of the data passed using `hmac.update()`. - * If `encoding` is - * provided a string is returned; otherwise a `Buffer` is returned; - * - * The `Hmac` object can not be used again after `hmac.digest()` has been - * called. Multiple calls to `hmac.digest()` will result in an error being thrown. - * @since v0.1.94 - * @param encoding The `encoding` of the return value. - */ - digest(): NonSharedBuffer; - digest(encoding: BinaryToTextEncoding): string; - } - type KeyFormat = "pem" | "der" | "jwk"; - type KeyObjectType = "secret" | "public" | "private"; - type PublicKeyExportType = "pkcs1" | "spki"; - type PrivateKeyExportType = "pkcs1" | "pkcs8" | "sec1"; - type KeyExportOptions = - | SymmetricKeyExportOptions - | PublicKeyExportOptions - | PrivateKeyExportOptions - | JwkKeyExportOptions; - interface SymmetricKeyExportOptions { - format?: "buffer" | undefined; - } - interface PublicKeyExportOptions { - type: T; - format: Exclude; - } - interface PrivateKeyExportOptions { - type: T; - format: Exclude; - cipher?: string | undefined; - passphrase?: string | Buffer | undefined; - } - interface JwkKeyExportOptions { - format: "jwk"; - } - interface KeyPairExportOptions< - TPublic extends PublicKeyExportType = PublicKeyExportType, - TPrivate extends PrivateKeyExportType = PrivateKeyExportType, - > { - publicKeyEncoding?: PublicKeyExportOptions | JwkKeyExportOptions | undefined; - privateKeyEncoding?: PrivateKeyExportOptions | JwkKeyExportOptions | undefined; - } - type KeyExportResult = T extends { format: infer F extends KeyFormat } - ? { der: NonSharedBuffer; jwk: webcrypto.JsonWebKey; pem: string }[F] - : Default; - interface KeyPairExportResult { - publicKey: KeyExportResult; - privateKey: KeyExportResult; - } - type KeyPairExportCallback = ( - err: Error | null, - publicKey: KeyExportResult, - privateKey: KeyExportResult, - ) => void; - type MLDSAKeyType = `ml-dsa-${44 | 65 | 87}`; - type MLKEMKeyType = `ml-kem-${1024 | 512 | 768}`; - type SLHDSAKeyType = `slh-dsa-${"sha2" | "shake"}-${128 | 192 | 256}${"f" | "s"}`; - type AsymmetricKeyType = - | "dh" - | "dsa" - | "ec" - | "ed25519" - | "ed448" - | MLDSAKeyType - | MLKEMKeyType - | "rsa-pss" - | "rsa" - | SLHDSAKeyType - | "x25519" - | "x448"; - interface AsymmetricKeyDetails { - /** - * Key size in bits (RSA, DSA). - */ - modulusLength?: number; - /** - * Public exponent (RSA). - */ - publicExponent?: bigint; - /** - * Name of the message digest (RSA-PSS). - */ - hashAlgorithm?: string; - /** - * Name of the message digest used by MGF1 (RSA-PSS). - */ - mgf1HashAlgorithm?: string; - /** - * Minimal salt length in bytes (RSA-PSS). - */ - saltLength?: number; - /** - * Size of q in bits (DSA). - */ - divisorLength?: number; - /** - * Name of the curve (EC). - */ - namedCurve?: string; - } - /** - * Node.js uses a `KeyObject` class to represent a symmetric or asymmetric key, - * and each kind of key exposes different functions. The {@link createSecretKey}, {@link createPublicKey} and {@link createPrivateKey} methods are used to create `KeyObject`instances. `KeyObject` - * objects are not to be created directly using the `new`keyword. - * - * Most applications should consider using the new `KeyObject` API instead of - * passing keys as strings or `Buffer`s due to improved security features. - * - * `KeyObject` instances can be passed to other threads via `postMessage()`. - * The receiver obtains a cloned `KeyObject`, and the `KeyObject` does not need to - * be listed in the `transferList` argument. - * @since v11.6.0 - */ - class KeyObject { - private constructor(); - /** - * Example: Converting a `CryptoKey` instance to a `KeyObject`: - * - * ```js - * const { KeyObject } = await import('node:crypto'); - * const { subtle } = globalThis.crypto; - * - * const key = await subtle.generateKey({ - * name: 'HMAC', - * hash: 'SHA-256', - * length: 256, - * }, true, ['sign', 'verify']); - * - * const keyObject = KeyObject.from(key); - * console.log(keyObject.symmetricKeySize); - * // Prints: 32 (symmetric key size in bytes) - * ``` - * @since v15.0.0 - */ - static from(key: webcrypto.CryptoKey): KeyObject; - /** - * For asymmetric keys, this property represents the type of the key. See the - * supported [asymmetric key types](https://nodejs.org/docs/latest-v25.x/api/crypto.html#asymmetric-key-types). - * - * This property is `undefined` for unrecognized `KeyObject` types and symmetric - * keys. - * @since v11.6.0 - */ - asymmetricKeyType?: AsymmetricKeyType; - /** - * This property exists only on asymmetric keys. Depending on the type of the key, - * this object contains information about the key. None of the information obtained - * through this property can be used to uniquely identify a key or to compromise - * the security of the key. - * - * For RSA-PSS keys, if the key material contains a `RSASSA-PSS-params` sequence, - * the `hashAlgorithm`, `mgf1HashAlgorithm`, and `saltLength` properties will be - * set. - * - * Other key details might be exposed via this API using additional attributes. - * @since v15.7.0 - */ - asymmetricKeyDetails?: AsymmetricKeyDetails; - /** - * For symmetric keys, the following encoding options can be used: - * - * For public keys, the following encoding options can be used: - * - * For private keys, the following encoding options can be used: - * - * The result type depends on the selected encoding format, when PEM the - * result is a string, when DER it will be a buffer containing the data - * encoded as DER, when [JWK](https://tools.ietf.org/html/rfc7517) it will be an object. - * - * When [JWK](https://tools.ietf.org/html/rfc7517) encoding format was selected, all other encoding options are - * ignored. - * - * PKCS#1, SEC1, and PKCS#8 type keys can be encrypted by using a combination of - * the `cipher` and `format` options. The PKCS#8 `type` can be used with any`format` to encrypt any key algorithm (RSA, EC, or DH) by specifying a`cipher`. PKCS#1 and SEC1 can only be - * encrypted by specifying a `cipher`when the PEM `format` is used. For maximum compatibility, use PKCS#8 for - * encrypted private keys. Since PKCS#8 defines its own - * encryption mechanism, PEM-level encryption is not supported when encrypting - * a PKCS#8 key. See [RFC 5208](https://www.rfc-editor.org/rfc/rfc5208.txt) for PKCS#8 encryption and [RFC 1421](https://www.rfc-editor.org/rfc/rfc1421.txt) for - * PKCS#1 and SEC1 encryption. - * @since v11.6.0 - */ - export(options?: T): KeyExportResult; - /** - * Returns `true` or `false` depending on whether the keys have exactly the same - * type, value, and parameters. This method is not [constant time](https://en.wikipedia.org/wiki/Timing_attack). - * @since v17.7.0, v16.15.0 - * @param otherKeyObject A `KeyObject` with which to compare `keyObject`. - */ - equals(otherKeyObject: KeyObject): boolean; - /** - * For secret keys, this property represents the size of the key in bytes. This - * property is `undefined` for asymmetric keys. - * @since v11.6.0 - */ - symmetricKeySize?: number; - /** - * Converts a `KeyObject` instance to a `CryptoKey`. - * @since 22.10.0 - */ - toCryptoKey( - algorithm: - | webcrypto.AlgorithmIdentifier - | webcrypto.RsaHashedImportParams - | webcrypto.EcKeyImportParams - | webcrypto.HmacImportParams, - extractable: boolean, - keyUsages: readonly webcrypto.KeyUsage[], - ): webcrypto.CryptoKey; - /** - * Depending on the type of this `KeyObject`, this property is either`'secret'` for secret (symmetric) keys, `'public'` for public (asymmetric) keys - * or `'private'` for private (asymmetric) keys. - * @since v11.6.0 - */ - type: KeyObjectType; - } - type CipherCCMTypes = "aes-128-ccm" | "aes-192-ccm" | "aes-256-ccm"; - type CipherGCMTypes = "aes-128-gcm" | "aes-192-gcm" | "aes-256-gcm"; - type CipherOCBTypes = "aes-128-ocb" | "aes-192-ocb" | "aes-256-ocb"; - type CipherChaCha20Poly1305Types = "chacha20-poly1305"; - type BinaryLike = string | NodeJS.ArrayBufferView; - type CipherKey = BinaryLike | KeyObject; - interface CipherCCMOptions extends stream.TransformOptions { - authTagLength: number; - } - interface CipherGCMOptions extends stream.TransformOptions { - authTagLength?: number | undefined; - } - interface CipherOCBOptions extends stream.TransformOptions { - authTagLength: number; - } - interface CipherChaCha20Poly1305Options extends stream.TransformOptions { - /** @default 16 */ - authTagLength?: number | undefined; - } - /** - * Creates and returns a `Cipher` object, with the given `algorithm`, `key` and - * initialization vector (`iv`). - * - * The `options` argument controls stream behavior and is optional except when a - * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the`authTagLength` option is required and specifies the length of the - * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength`option is not required but can be used to set the length of the authentication - * tag that will be returned by `getAuthTag()` and defaults to 16 bytes. - * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. - * - * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On - * recent OpenSSL releases, `openssl list -cipher-algorithms` will - * display the available cipher algorithms. - * - * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded - * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be - * a `KeyObject` of type `secret`. If the cipher does not need - * an initialization vector, `iv` may be `null`. - * - * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * Initialization vectors should be unpredictable and unique; ideally, they will be - * cryptographically random. They do not have to be secret: IVs are typically just - * added to ciphertext messages unencrypted. It may sound contradictory that - * something has to be unpredictable and unique, but does not have to be secret; - * remember that an attacker must not be able to predict ahead of time what a - * given IV will be. - * @since v0.1.94 - * @param options `stream.transform` options - */ - function createCipheriv( - algorithm: CipherCCMTypes, - key: CipherKey, - iv: BinaryLike, - options: CipherCCMOptions, - ): CipherCCM; - function createCipheriv( - algorithm: CipherOCBTypes, - key: CipherKey, - iv: BinaryLike, - options: CipherOCBOptions, - ): CipherOCB; - function createCipheriv( - algorithm: CipherGCMTypes, - key: CipherKey, - iv: BinaryLike, - options?: CipherGCMOptions, - ): CipherGCM; - function createCipheriv( - algorithm: CipherChaCha20Poly1305Types, - key: CipherKey, - iv: BinaryLike, - options?: CipherChaCha20Poly1305Options, - ): CipherChaCha20Poly1305; - function createCipheriv( - algorithm: string, - key: CipherKey, - iv: BinaryLike | null, - options?: stream.TransformOptions, - ): Cipheriv; - /** - * Instances of the `Cipheriv` class are used to encrypt data. The class can be - * used in one of two ways: - * - * * As a `stream` that is both readable and writable, where plain unencrypted - * data is written to produce encrypted data on the readable side, or - * * Using the `cipher.update()` and `cipher.final()` methods to produce - * the encrypted data. - * - * The {@link createCipheriv} method is - * used to create `Cipheriv` instances. `Cipheriv` objects are not to be created - * directly using the `new` keyword. - * - * Example: Using `Cipheriv` objects as streams: - * - * ```js - * const { - * scrypt, - * randomFill, - * createCipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * - * // First, we'll generate the key. The key length is dependent on the algorithm. - * // In this case for aes192, it is 24 bytes (192 bits). - * scrypt(password, 'salt', 24, (err, key) => { - * if (err) throw err; - * // Then, we'll generate a random initialization vector - * randomFill(new Uint8Array(16), (err, iv) => { - * if (err) throw err; - * - * // Once we have the key and iv, we can create and use the cipher... - * const cipher = createCipheriv(algorithm, key, iv); - * - * let encrypted = ''; - * cipher.setEncoding('hex'); - * - * cipher.on('data', (chunk) => encrypted += chunk); - * cipher.on('end', () => console.log(encrypted)); - * - * cipher.write('some clear text data'); - * cipher.end(); - * }); - * }); - * ``` - * - * Example: Using `Cipheriv` and piped streams: - * - * ```js - * import { - * createReadStream, - * createWriteStream, - * } from 'node:fs'; - * - * import { - * pipeline, - * } from 'node:stream'; - * - * const { - * scrypt, - * randomFill, - * createCipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * - * // First, we'll generate the key. The key length is dependent on the algorithm. - * // In this case for aes192, it is 24 bytes (192 bits). - * scrypt(password, 'salt', 24, (err, key) => { - * if (err) throw err; - * // Then, we'll generate a random initialization vector - * randomFill(new Uint8Array(16), (err, iv) => { - * if (err) throw err; - * - * const cipher = createCipheriv(algorithm, key, iv); - * - * const input = createReadStream('test.js'); - * const output = createWriteStream('test.enc'); - * - * pipeline(input, cipher, output, (err) => { - * if (err) throw err; - * }); - * }); - * }); - * ``` - * - * Example: Using the `cipher.update()` and `cipher.final()` methods: - * - * ```js - * const { - * scrypt, - * randomFill, - * createCipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * - * // First, we'll generate the key. The key length is dependent on the algorithm. - * // In this case for aes192, it is 24 bytes (192 bits). - * scrypt(password, 'salt', 24, (err, key) => { - * if (err) throw err; - * // Then, we'll generate a random initialization vector - * randomFill(new Uint8Array(16), (err, iv) => { - * if (err) throw err; - * - * const cipher = createCipheriv(algorithm, key, iv); - * - * let encrypted = cipher.update('some clear text data', 'utf8', 'hex'); - * encrypted += cipher.final('hex'); - * console.log(encrypted); - * }); - * }); - * ``` - * @since v0.1.94 - */ - class Cipheriv extends stream.Transform { - private constructor(); - /** - * Updates the cipher with `data`. If the `inputEncoding` argument is given, - * the `data`argument is a string using the specified encoding. If the `inputEncoding`argument is not given, `data` must be a `Buffer`, `TypedArray`, or `DataView`. If `data` is a `Buffer`, - * `TypedArray`, or `DataView`, then `inputEncoding` is ignored. - * - * The `outputEncoding` specifies the output format of the enciphered - * data. If the `outputEncoding`is specified, a string using the specified encoding is returned. If no`outputEncoding` is provided, a `Buffer` is returned. - * - * The `cipher.update()` method can be called multiple times with new data until `cipher.final()` is called. Calling `cipher.update()` after `cipher.final()` will result in an error being - * thrown. - * @since v0.1.94 - * @param inputEncoding The `encoding` of the data. - * @param outputEncoding The `encoding` of the return value. - */ - update(data: BinaryLike): NonSharedBuffer; - update(data: string, inputEncoding: Encoding): NonSharedBuffer; - update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; - update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; - /** - * Once the `cipher.final()` method has been called, the `Cipheriv` object can no - * longer be used to encrypt data. Attempts to call `cipher.final()` more than - * once will result in an error being thrown. - * @since v0.1.94 - * @param outputEncoding The `encoding` of the return value. - * @return Any remaining enciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. - */ - final(): NonSharedBuffer; - final(outputEncoding: BufferEncoding): string; - /** - * When using block encryption algorithms, the `Cipheriv` class will automatically - * add padding to the input data to the appropriate block size. To disable the - * default padding call `cipher.setAutoPadding(false)`. - * - * When `autoPadding` is `false`, the length of the entire input data must be a - * multiple of the cipher's block size or `cipher.final()` will throw an error. - * Disabling automatic padding is useful for non-standard padding, for instance - * using `0x0` instead of PKCS padding. - * - * The `cipher.setAutoPadding()` method must be called before `cipher.final()`. - * @since v0.7.1 - * @param [autoPadding=true] - * @return for method chaining. - */ - setAutoPadding(autoPadding?: boolean): this; - } - interface CipherCCM extends Cipheriv { - setAAD( - buffer: NodeJS.ArrayBufferView, - options: { - plaintextLength: number; - }, - ): this; - getAuthTag(): NonSharedBuffer; - } - interface CipherGCM extends Cipheriv { - setAAD( - buffer: NodeJS.ArrayBufferView, - options?: { - plaintextLength: number; - }, - ): this; - getAuthTag(): NonSharedBuffer; - } - interface CipherOCB extends Cipheriv { - setAAD( - buffer: NodeJS.ArrayBufferView, - options?: { - plaintextLength: number; - }, - ): this; - getAuthTag(): NonSharedBuffer; - } - interface CipherChaCha20Poly1305 extends Cipheriv { - setAAD( - buffer: NodeJS.ArrayBufferView, - options: { - plaintextLength: number; - }, - ): this; - getAuthTag(): NonSharedBuffer; - } - /** - * Creates and returns a `Decipheriv` object that uses the given `algorithm`, `key` and initialization vector (`iv`). - * - * The `options` argument controls stream behavior and is optional except when a - * cipher in CCM or OCB mode (e.g. `'aes-128-ccm'`) is used. In that case, the `authTagLength` option is required and specifies the length of the - * authentication tag in bytes, see `CCM mode`. In GCM mode, the `authTagLength` option is not required but can be used to restrict accepted authentication tags - * to those with the specified length. - * For `chacha20-poly1305`, the `authTagLength` option defaults to 16 bytes. - * - * The `algorithm` is dependent on OpenSSL, examples are `'aes192'`, etc. On - * recent OpenSSL releases, `openssl list -cipher-algorithms` will - * display the available cipher algorithms. - * - * The `key` is the raw key used by the `algorithm` and `iv` is an [initialization vector](https://en.wikipedia.org/wiki/Initialization_vector). Both arguments must be `'utf8'` encoded - * strings,`Buffers`, `TypedArray`, or `DataView`s. The `key` may optionally be - * a `KeyObject` of type `secret`. If the cipher does not need - * an initialization vector, `iv` may be `null`. - * - * When passing strings for `key` or `iv`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * Initialization vectors should be unpredictable and unique; ideally, they will be - * cryptographically random. They do not have to be secret: IVs are typically just - * added to ciphertext messages unencrypted. It may sound contradictory that - * something has to be unpredictable and unique, but does not have to be secret; - * remember that an attacker must not be able to predict ahead of time what a given - * IV will be. - * @since v0.1.94 - * @param options `stream.transform` options - */ - function createDecipheriv( - algorithm: CipherCCMTypes, - key: CipherKey, - iv: BinaryLike, - options: CipherCCMOptions, - ): DecipherCCM; - function createDecipheriv( - algorithm: CipherOCBTypes, - key: CipherKey, - iv: BinaryLike, - options: CipherOCBOptions, - ): DecipherOCB; - function createDecipheriv( - algorithm: CipherGCMTypes, - key: CipherKey, - iv: BinaryLike, - options?: CipherGCMOptions, - ): DecipherGCM; - function createDecipheriv( - algorithm: CipherChaCha20Poly1305Types, - key: CipherKey, - iv: BinaryLike, - options?: CipherChaCha20Poly1305Options, - ): DecipherChaCha20Poly1305; - function createDecipheriv( - algorithm: string, - key: CipherKey, - iv: BinaryLike | null, - options?: stream.TransformOptions, - ): Decipheriv; - /** - * Instances of the `Decipheriv` class are used to decrypt data. The class can be - * used in one of two ways: - * - * * As a `stream` that is both readable and writable, where plain encrypted - * data is written to produce unencrypted data on the readable side, or - * * Using the `decipher.update()` and `decipher.final()` methods to - * produce the unencrypted data. - * - * The {@link createDecipheriv} method is - * used to create `Decipheriv` instances. `Decipheriv` objects are not to be created - * directly using the `new` keyword. - * - * Example: Using `Decipheriv` objects as streams: - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { - * scryptSync, - * createDecipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * // Key length is dependent on the algorithm. In this case for aes192, it is - * // 24 bytes (192 bits). - * // Use the async `crypto.scrypt()` instead. - * const key = scryptSync(password, 'salt', 24); - * // The IV is usually passed along with the ciphertext. - * const iv = Buffer.alloc(16, 0); // Initialization vector. - * - * const decipher = createDecipheriv(algorithm, key, iv); - * - * let decrypted = ''; - * decipher.on('readable', () => { - * let chunk; - * while (null !== (chunk = decipher.read())) { - * decrypted += chunk.toString('utf8'); - * } - * }); - * decipher.on('end', () => { - * console.log(decrypted); - * // Prints: some clear text data - * }); - * - * // Encrypted with same algorithm, key and iv. - * const encrypted = - * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; - * decipher.write(encrypted, 'hex'); - * decipher.end(); - * ``` - * - * Example: Using `Decipheriv` and piped streams: - * - * ```js - * import { - * createReadStream, - * createWriteStream, - * } from 'node:fs'; - * import { Buffer } from 'node:buffer'; - * const { - * scryptSync, - * createDecipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * // Use the async `crypto.scrypt()` instead. - * const key = scryptSync(password, 'salt', 24); - * // The IV is usually passed along with the ciphertext. - * const iv = Buffer.alloc(16, 0); // Initialization vector. - * - * const decipher = createDecipheriv(algorithm, key, iv); - * - * const input = createReadStream('test.enc'); - * const output = createWriteStream('test.js'); - * - * input.pipe(decipher).pipe(output); - * ``` - * - * Example: Using the `decipher.update()` and `decipher.final()` methods: - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { - * scryptSync, - * createDecipheriv, - * } = await import('node:crypto'); - * - * const algorithm = 'aes-192-cbc'; - * const password = 'Password used to generate key'; - * // Use the async `crypto.scrypt()` instead. - * const key = scryptSync(password, 'salt', 24); - * // The IV is usually passed along with the ciphertext. - * const iv = Buffer.alloc(16, 0); // Initialization vector. - * - * const decipher = createDecipheriv(algorithm, key, iv); - * - * // Encrypted using same algorithm, key and iv. - * const encrypted = - * 'e5f79c5915c02171eec6b212d5520d44480993d7d622a7c4c2da32f6efda0ffa'; - * let decrypted = decipher.update(encrypted, 'hex', 'utf8'); - * decrypted += decipher.final('utf8'); - * console.log(decrypted); - * // Prints: some clear text data - * ``` - * @since v0.1.94 - */ - class Decipheriv extends stream.Transform { - private constructor(); - /** - * Updates the decipher with `data`. If the `inputEncoding` argument is given, - * the `data` argument is a string using the specified encoding. If the `inputEncoding` argument is not given, `data` must be a `Buffer`. If `data` is a `Buffer` then `inputEncoding` is - * ignored. - * - * The `outputEncoding` specifies the output format of the enciphered - * data. If the `outputEncoding` is specified, a string using the specified encoding is returned. If no `outputEncoding` is provided, a `Buffer` is returned. - * - * The `decipher.update()` method can be called multiple times with new data until `decipher.final()` is called. Calling `decipher.update()` after `decipher.final()` will result in an error - * being thrown. - * @since v0.1.94 - * @param inputEncoding The `encoding` of the `data` string. - * @param outputEncoding The `encoding` of the return value. - */ - update(data: NodeJS.ArrayBufferView): NonSharedBuffer; - update(data: string, inputEncoding: Encoding): NonSharedBuffer; - update(data: NodeJS.ArrayBufferView, inputEncoding: undefined, outputEncoding: Encoding): string; - update(data: string, inputEncoding: Encoding | undefined, outputEncoding: Encoding): string; - /** - * Once the `decipher.final()` method has been called, the `Decipheriv` object can - * no longer be used to decrypt data. Attempts to call `decipher.final()` more - * than once will result in an error being thrown. - * @since v0.1.94 - * @param outputEncoding The `encoding` of the return value. - * @return Any remaining deciphered contents. If `outputEncoding` is specified, a string is returned. If an `outputEncoding` is not provided, a {@link Buffer} is returned. - */ - final(): NonSharedBuffer; - final(outputEncoding: BufferEncoding): string; - /** - * When data has been encrypted without standard block padding, calling `decipher.setAutoPadding(false)` will disable automatic padding to prevent `decipher.final()` from checking for and - * removing padding. - * - * Turning auto padding off will only work if the input data's length is a - * multiple of the ciphers block size. - * - * The `decipher.setAutoPadding()` method must be called before `decipher.final()`. - * @since v0.7.1 - * @param [autoPadding=true] - * @return for method chaining. - */ - setAutoPadding(auto_padding?: boolean): this; - } - interface DecipherCCM extends Decipheriv { - setAuthTag(buffer: NodeJS.ArrayBufferView): this; - setAAD( - buffer: NodeJS.ArrayBufferView, - options: { - plaintextLength: number; - }, - ): this; - } - interface DecipherGCM extends Decipheriv { - setAuthTag(buffer: NodeJS.ArrayBufferView): this; - setAAD( - buffer: NodeJS.ArrayBufferView, - options?: { - plaintextLength: number; - }, - ): this; - } - interface DecipherOCB extends Decipheriv { - setAuthTag(buffer: NodeJS.ArrayBufferView): this; - setAAD( - buffer: NodeJS.ArrayBufferView, - options?: { - plaintextLength: number; - }, - ): this; - } - interface DecipherChaCha20Poly1305 extends Decipheriv { - setAuthTag(buffer: NodeJS.ArrayBufferView): this; - setAAD( - buffer: NodeJS.ArrayBufferView, - options: { - plaintextLength: number; - }, - ): this; - } - interface PrivateKeyInput { - key: string | Buffer; - format?: KeyFormat | undefined; - type?: PrivateKeyExportType | undefined; - passphrase?: string | Buffer | undefined; - encoding?: string | undefined; - } - interface PublicKeyInput { - key: string | Buffer; - format?: KeyFormat | undefined; - type?: PublicKeyExportType | undefined; - encoding?: string | undefined; - } - /** - * Asynchronously generates a new random secret key of the given `length`. The `type` will determine which validations will be performed on the `length`. - * - * ```js - * const { - * generateKey, - * } = await import('node:crypto'); - * - * generateKey('hmac', { length: 512 }, (err, key) => { - * if (err) throw err; - * console.log(key.export().toString('hex')); // 46e..........620 - * }); - * ``` - * - * The size of a generated HMAC key should not exceed the block size of the - * underlying hash function. See {@link createHmac} for more information. - * @since v15.0.0 - * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. - */ - function generateKey( - type: "hmac" | "aes", - options: { - length: number; - }, - callback: (err: Error | null, key: KeyObject) => void, - ): void; - /** - * Synchronously generates a new random secret key of the given `length`. The `type` will determine which validations will be performed on the `length`. - * - * ```js - * const { - * generateKeySync, - * } = await import('node:crypto'); - * - * const key = generateKeySync('hmac', { length: 512 }); - * console.log(key.export().toString('hex')); // e89..........41e - * ``` - * - * The size of a generated HMAC key should not exceed the block size of the - * underlying hash function. See {@link createHmac} for more information. - * @since v15.0.0 - * @param type The intended use of the generated secret key. Currently accepted values are `'hmac'` and `'aes'`. - */ - function generateKeySync( - type: "hmac" | "aes", - options: { - length: number; - }, - ): KeyObject; - interface JsonWebKeyInput { - key: webcrypto.JsonWebKey; - format: "jwk"; - } - /** - * Creates and returns a new key object containing a private key. If `key` is a - * string or `Buffer`, `format` is assumed to be `'pem'`; otherwise, `key` must be an object with the properties described above. - * - * If the private key is encrypted, a `passphrase` must be specified. The length - * of the passphrase is limited to 1024 bytes. - * @since v11.6.0 - */ - function createPrivateKey(key: PrivateKeyInput | string | Buffer | JsonWebKeyInput): KeyObject; - /** - * Creates and returns a new key object containing a public key. If `key` is a - * string or `Buffer`, `format` is assumed to be `'pem'`; if `key` is a `KeyObject` with type `'private'`, the public key is derived from the given private key; - * otherwise, `key` must be an object with the properties described above. - * - * If the format is `'pem'`, the `'key'` may also be an X.509 certificate. - * - * Because public keys can be derived from private keys, a private key may be - * passed instead of a public key. In that case, this function behaves as if {@link createPrivateKey} had been called, except that the type of the - * returned `KeyObject` will be `'public'` and that the private key cannot be - * extracted from the returned `KeyObject`. Similarly, if a `KeyObject` with type `'private'` is given, a new `KeyObject` with type `'public'` will be returned - * and it will be impossible to extract the private key from the returned object. - * @since v11.6.0 - */ - function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject | JsonWebKeyInput): KeyObject; - /** - * Creates and returns a new key object containing a secret key for symmetric - * encryption or `Hmac`. - * @since v11.6.0 - * @param encoding The string encoding when `key` is a string. - */ - function createSecretKey(key: NodeJS.ArrayBufferView): KeyObject; - function createSecretKey(key: string, encoding: BufferEncoding): KeyObject; - /** - * Creates and returns a `Sign` object that uses the given `algorithm`. Use {@link getHashes} to obtain the names of the available digest algorithms. - * Optional `options` argument controls the `stream.Writable` behavior. - * - * In some cases, a `Sign` instance can be created using the name of a signature - * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use - * the corresponding digest algorithm. This does not work for all signature - * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest - * algorithm names. - * @since v0.1.92 - * @param options `stream.Writable` options - */ - // TODO: signing algorithm type - function createSign(algorithm: string, options?: stream.WritableOptions): Sign; - type DSAEncoding = "der" | "ieee-p1363"; - interface SigningOptions { - /** - * @see crypto.constants.RSA_PKCS1_PADDING - */ - padding?: number | undefined; - saltLength?: number | undefined; - dsaEncoding?: DSAEncoding | undefined; - context?: ArrayBuffer | NodeJS.ArrayBufferView | undefined; - } - interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {} - interface SignKeyObjectInput extends SigningOptions { - key: KeyObject; - } - interface SignJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {} - interface VerifyPublicKeyInput extends PublicKeyInput, SigningOptions {} - interface VerifyKeyObjectInput extends SigningOptions { - key: KeyObject; - } - interface VerifyJsonWebKeyInput extends JsonWebKeyInput, SigningOptions {} - type KeyLike = string | Buffer | KeyObject; - /** - * The `Sign` class is a utility for generating signatures. It can be used in one - * of two ways: - * - * * As a writable `stream`, where data to be signed is written and the `sign.sign()` method is used to generate and return the signature, or - * * Using the `sign.update()` and `sign.sign()` methods to produce the - * signature. - * - * The {@link createSign} method is used to create `Sign` instances. The - * argument is the string name of the hash function to use. `Sign` objects are not - * to be created directly using the `new` keyword. - * - * Example: Using `Sign` and `Verify` objects as streams: - * - * ```js - * const { - * generateKeyPairSync, - * createSign, - * createVerify, - * } = await import('node:crypto'); - * - * const { privateKey, publicKey } = generateKeyPairSync('ec', { - * namedCurve: 'sect239k1', - * }); - * - * const sign = createSign('SHA256'); - * sign.write('some data to sign'); - * sign.end(); - * const signature = sign.sign(privateKey, 'hex'); - * - * const verify = createVerify('SHA256'); - * verify.write('some data to sign'); - * verify.end(); - * console.log(verify.verify(publicKey, signature, 'hex')); - * // Prints: true - * ``` - * - * Example: Using the `sign.update()` and `verify.update()` methods: - * - * ```js - * const { - * generateKeyPairSync, - * createSign, - * createVerify, - * } = await import('node:crypto'); - * - * const { privateKey, publicKey } = generateKeyPairSync('rsa', { - * modulusLength: 2048, - * }); - * - * const sign = createSign('SHA256'); - * sign.update('some data to sign'); - * sign.end(); - * const signature = sign.sign(privateKey); - * - * const verify = createVerify('SHA256'); - * verify.update('some data to sign'); - * verify.end(); - * console.log(verify.verify(publicKey, signature)); - * // Prints: true - * ``` - * @since v0.1.92 - */ - class Sign extends stream.Writable { - private constructor(); - /** - * Updates the `Sign` content with the given `data`, the encoding of which - * is given in `inputEncoding`. - * If `encoding` is not provided, and the `data` is a string, an - * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored. - * - * This can be called many times with new data as it is streamed. - * @since v0.1.92 - * @param inputEncoding The `encoding` of the `data` string. - */ - update(data: BinaryLike): this; - update(data: string, inputEncoding: Encoding): this; - /** - * Calculates the signature on all the data passed through using either `sign.update()` or `sign.write()`. - * - * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an - * object, the following additional properties can be passed: - * - * If `outputEncoding` is provided a string is returned; otherwise a `Buffer` is returned. - * - * The `Sign` object can not be again used after `sign.sign()` method has been - * called. Multiple calls to `sign.sign()` will result in an error being thrown. - * @since v0.1.92 - */ - sign(privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput): NonSharedBuffer; - sign( - privateKey: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput, - outputFormat: BinaryToTextEncoding, - ): string; - } - /** - * Creates and returns a `Verify` object that uses the given algorithm. - * Use {@link getHashes} to obtain an array of names of the available - * signing algorithms. Optional `options` argument controls the `stream.Writable` behavior. - * - * In some cases, a `Verify` instance can be created using the name of a signature - * algorithm, such as `'RSA-SHA256'`, instead of a digest algorithm. This will use - * the corresponding digest algorithm. This does not work for all signature - * algorithms, such as `'ecdsa-with-SHA256'`, so it is best to always use digest - * algorithm names. - * @since v0.1.92 - * @param options `stream.Writable` options - */ - function createVerify(algorithm: string, options?: stream.WritableOptions): Verify; - /** - * The `Verify` class is a utility for verifying signatures. It can be used in one - * of two ways: - * - * * As a writable `stream` where written data is used to validate against the - * supplied signature, or - * * Using the `verify.update()` and `verify.verify()` methods to verify - * the signature. - * - * The {@link createVerify} method is used to create `Verify` instances. `Verify` objects are not to be created directly using the `new` keyword. - * - * See `Sign` for examples. - * @since v0.1.92 - */ - class Verify extends stream.Writable { - private constructor(); - /** - * Updates the `Verify` content with the given `data`, the encoding of which - * is given in `inputEncoding`. - * If `inputEncoding` is not provided, and the `data` is a string, an - * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or `DataView`, then `inputEncoding` is ignored. - * - * This can be called many times with new data as it is streamed. - * @since v0.1.92 - * @param inputEncoding The `encoding` of the `data` string. - */ - update(data: BinaryLike): Verify; - update(data: string, inputEncoding: Encoding): Verify; - /** - * Verifies the provided data using the given `object` and `signature`. - * - * If `object` is not a `KeyObject`, this function behaves as if `object` had been passed to {@link createPublicKey}. If it is an - * object, the following additional properties can be passed: - * - * The `signature` argument is the previously calculated signature for the data, in - * the `signatureEncoding`. - * If a `signatureEncoding` is specified, the `signature` is expected to be a - * string; otherwise `signature` is expected to be a `Buffer`, `TypedArray`, or `DataView`. - * - * The `verify` object can not be used again after `verify.verify()` has been - * called. Multiple calls to `verify.verify()` will result in an error being - * thrown. - * - * Because public keys can be derived from private keys, a private key may - * be passed instead of a public key. - * @since v0.1.92 - */ - verify( - object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, - signature: NodeJS.ArrayBufferView, - ): boolean; - verify( - object: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, - signature: string, - signature_format?: BinaryToTextEncoding, - ): boolean; - } - /** - * Creates a `DiffieHellman` key exchange object using the supplied `prime` and an - * optional specific `generator`. - * - * The `generator` argument can be a number, string, or `Buffer`. If `generator` is not specified, the value `2` is used. - * - * If `primeEncoding` is specified, `prime` is expected to be a string; otherwise - * a `Buffer`, `TypedArray`, or `DataView` is expected. - * - * If `generatorEncoding` is specified, `generator` is expected to be a string; - * otherwise a number, `Buffer`, `TypedArray`, or `DataView` is expected. - * @since v0.11.12 - * @param primeEncoding The `encoding` of the `prime` string. - * @param [generator=2] - * @param generatorEncoding The `encoding` of the `generator` string. - */ - function createDiffieHellman(primeLength: number, generator?: number): DiffieHellman; - function createDiffieHellman( - prime: ArrayBuffer | NodeJS.ArrayBufferView, - generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, - ): DiffieHellman; - function createDiffieHellman( - prime: ArrayBuffer | NodeJS.ArrayBufferView, - generator: string, - generatorEncoding: BinaryToTextEncoding, - ): DiffieHellman; - function createDiffieHellman( - prime: string, - primeEncoding: BinaryToTextEncoding, - generator?: number | ArrayBuffer | NodeJS.ArrayBufferView, - ): DiffieHellman; - function createDiffieHellman( - prime: string, - primeEncoding: BinaryToTextEncoding, - generator: string, - generatorEncoding: BinaryToTextEncoding, - ): DiffieHellman; - /** - * The `DiffieHellman` class is a utility for creating Diffie-Hellman key - * exchanges. - * - * Instances of the `DiffieHellman` class can be created using the {@link createDiffieHellman} function. - * - * ```js - * import assert from 'node:assert'; - * - * const { - * createDiffieHellman, - * } = await import('node:crypto'); - * - * // Generate Alice's keys... - * const alice = createDiffieHellman(2048); - * const aliceKey = alice.generateKeys(); - * - * // Generate Bob's keys... - * const bob = createDiffieHellman(alice.getPrime(), alice.getGenerator()); - * const bobKey = bob.generateKeys(); - * - * // Exchange and generate the secret... - * const aliceSecret = alice.computeSecret(bobKey); - * const bobSecret = bob.computeSecret(aliceKey); - * - * // OK - * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); - * ``` - * @since v0.5.0 - */ - class DiffieHellman { - private constructor(); - /** - * Generates private and public Diffie-Hellman key values unless they have been - * generated or computed already, and returns - * the public key in the specified `encoding`. This key should be - * transferred to the other party. - * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. - * - * This function is a thin wrapper around [`DH_generate_key()`](https://www.openssl.org/docs/man3.0/man3/DH_generate_key.html). In particular, - * once a private key has been generated or set, calling this function only updates - * the public key but does not generate a new private key. - * @since v0.5.0 - * @param encoding The `encoding` of the return value. - */ - generateKeys(): NonSharedBuffer; - generateKeys(encoding: BinaryToTextEncoding): string; - /** - * Computes the shared secret using `otherPublicKey` as the other - * party's public key and returns the computed shared secret. The supplied - * key is interpreted using the specified `inputEncoding`, and secret is - * encoded using specified `outputEncoding`. - * If the `inputEncoding` is not - * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`. - * - * If `outputEncoding` is given a string is returned; otherwise, a `Buffer` is returned. - * @since v0.5.0 - * @param inputEncoding The `encoding` of an `otherPublicKey` string. - * @param outputEncoding The `encoding` of the return value. - */ - computeSecret( - otherPublicKey: NodeJS.ArrayBufferView, - inputEncoding?: null, - outputEncoding?: null, - ): NonSharedBuffer; - computeSecret( - otherPublicKey: string, - inputEncoding: BinaryToTextEncoding, - outputEncoding?: null, - ): NonSharedBuffer; - computeSecret( - otherPublicKey: NodeJS.ArrayBufferView, - inputEncoding: null, - outputEncoding: BinaryToTextEncoding, - ): string; - computeSecret( - otherPublicKey: string, - inputEncoding: BinaryToTextEncoding, - outputEncoding: BinaryToTextEncoding, - ): string; - /** - * Returns the Diffie-Hellman prime in the specified `encoding`. - * If `encoding` is provided a string is - * returned; otherwise a `Buffer` is returned. - * @since v0.5.0 - * @param encoding The `encoding` of the return value. - */ - getPrime(): NonSharedBuffer; - getPrime(encoding: BinaryToTextEncoding): string; - /** - * Returns the Diffie-Hellman generator in the specified `encoding`. - * If `encoding` is provided a string is - * returned; otherwise a `Buffer` is returned. - * @since v0.5.0 - * @param encoding The `encoding` of the return value. - */ - getGenerator(): NonSharedBuffer; - getGenerator(encoding: BinaryToTextEncoding): string; - /** - * Returns the Diffie-Hellman public key in the specified `encoding`. - * If `encoding` is provided a - * string is returned; otherwise a `Buffer` is returned. - * @since v0.5.0 - * @param encoding The `encoding` of the return value. - */ - getPublicKey(): NonSharedBuffer; - getPublicKey(encoding: BinaryToTextEncoding): string; - /** - * Returns the Diffie-Hellman private key in the specified `encoding`. - * If `encoding` is provided a - * string is returned; otherwise a `Buffer` is returned. - * @since v0.5.0 - * @param encoding The `encoding` of the return value. - */ - getPrivateKey(): NonSharedBuffer; - getPrivateKey(encoding: BinaryToTextEncoding): string; - /** - * Sets the Diffie-Hellman public key. If the `encoding` argument is provided, `publicKey` is expected - * to be a string. If no `encoding` is provided, `publicKey` is expected - * to be a `Buffer`, `TypedArray`, or `DataView`. - * @since v0.5.0 - * @param encoding The `encoding` of the `publicKey` string. - */ - setPublicKey(publicKey: NodeJS.ArrayBufferView): void; - setPublicKey(publicKey: string, encoding: BufferEncoding): void; - /** - * Sets the Diffie-Hellman private key. If the `encoding` argument is provided,`privateKey` is expected - * to be a string. If no `encoding` is provided, `privateKey` is expected - * to be a `Buffer`, `TypedArray`, or `DataView`. - * - * This function does not automatically compute the associated public key. Either `diffieHellman.setPublicKey()` or `diffieHellman.generateKeys()` can be - * used to manually provide the public key or to automatically derive it. - * @since v0.5.0 - * @param encoding The `encoding` of the `privateKey` string. - */ - setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; - setPrivateKey(privateKey: string, encoding: BufferEncoding): void; - /** - * A bit field containing any warnings and/or errors resulting from a check - * performed during initialization of the `DiffieHellman` object. - * - * The following values are valid for this property (as defined in `node:constants` module): - * - * * `DH_CHECK_P_NOT_SAFE_PRIME` - * * `DH_CHECK_P_NOT_PRIME` - * * `DH_UNABLE_TO_CHECK_GENERATOR` - * * `DH_NOT_SUITABLE_GENERATOR` - * @since v0.11.12 - */ - verifyError: number; - } - /** - * The `DiffieHellmanGroup` class takes a well-known modp group as its argument. - * It works the same as `DiffieHellman`, except that it does not allow changing its keys after creation. - * In other words, it does not implement `setPublicKey()` or `setPrivateKey()` methods. - * - * ```js - * const { createDiffieHellmanGroup } = await import('node:crypto'); - * const dh = createDiffieHellmanGroup('modp1'); - * ``` - * The name (e.g. `'modp1'`) is taken from [RFC 2412](https://www.rfc-editor.org/rfc/rfc2412.txt) (modp1 and 2) and [RFC 3526](https://www.rfc-editor.org/rfc/rfc3526.txt): - * ```bash - * $ perl -ne 'print "$1\n" if /"(modp\d+)"/' src/node_crypto_groups.h - * modp1 # 768 bits - * modp2 # 1024 bits - * modp5 # 1536 bits - * modp14 # 2048 bits - * modp15 # etc. - * modp16 - * modp17 - * modp18 - * ``` - * @since v0.7.5 - */ - const DiffieHellmanGroup: DiffieHellmanGroupConstructor; - interface DiffieHellmanGroupConstructor { - new(name: string): DiffieHellmanGroup; - (name: string): DiffieHellmanGroup; - readonly prototype: DiffieHellmanGroup; - } - type DiffieHellmanGroup = Omit; - /** - * Creates a predefined `DiffieHellmanGroup` key exchange object. The - * supported groups are listed in the documentation for `DiffieHellmanGroup`. - * - * The returned object mimics the interface of objects created by {@link createDiffieHellman}, but will not allow changing - * the keys (with `diffieHellman.setPublicKey()`, for example). The - * advantage of using this method is that the parties do not have to - * generate nor exchange a group modulus beforehand, saving both processor - * and communication time. - * - * Example (obtaining a shared secret): - * - * ```js - * const { - * getDiffieHellman, - * } = await import('node:crypto'); - * const alice = getDiffieHellman('modp14'); - * const bob = getDiffieHellman('modp14'); - * - * alice.generateKeys(); - * bob.generateKeys(); - * - * const aliceSecret = alice.computeSecret(bob.getPublicKey(), null, 'hex'); - * const bobSecret = bob.computeSecret(alice.getPublicKey(), null, 'hex'); - * - * // aliceSecret and bobSecret should be the same - * console.log(aliceSecret === bobSecret); - * ``` - * @since v0.7.5 - */ - function getDiffieHellman(groupName: string): DiffieHellmanGroup; - /** - * An alias for {@link getDiffieHellman} - * @since v0.9.3 - */ - function createDiffieHellmanGroup(name: string): DiffieHellmanGroup; - /** - * Provides an asynchronous Password-Based Key Derivation Function 2 (PBKDF2) - * implementation. A selected HMAC digest algorithm specified by `digest` is - * applied to derive a key of the requested byte length (`keylen`) from the `password`, `salt` and `iterations`. - * - * The supplied `callback` function is called with two arguments: `err` and `derivedKey`. If an error occurs while deriving the key, `err` will be set; - * otherwise `err` will be `null`. By default, the successfully generated `derivedKey` will be passed to the callback as a `Buffer`. An error will be - * thrown if any of the input arguments specify invalid values or types. - * - * The `iterations` argument must be a number set as high as possible. The - * higher the number of iterations, the more secure the derived key will be, - * but will take a longer amount of time to complete. - * - * The `salt` should be as unique as possible. It is recommended that a salt is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * ```js - * const { - * pbkdf2, - * } = await import('node:crypto'); - * - * pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => { - * if (err) throw err; - * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' - * }); - * ``` - * - * An array of supported digest functions can be retrieved using {@link getHashes}. - * - * This API uses libuv's threadpool, which can have surprising and - * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. - * @since v0.5.5 - */ - function pbkdf2( - password: BinaryLike, - salt: BinaryLike, - iterations: number, - keylen: number, - digest: string, - callback: (err: Error | null, derivedKey: NonSharedBuffer) => void, - ): void; - /** - * Provides a synchronous Password-Based Key Derivation Function 2 (PBKDF2) - * implementation. A selected HMAC digest algorithm specified by `digest` is - * applied to derive a key of the requested byte length (`keylen`) from the `password`, `salt` and `iterations`. - * - * If an error occurs an `Error` will be thrown, otherwise the derived key will be - * returned as a `Buffer`. - * - * The `iterations` argument must be a number set as high as possible. The - * higher the number of iterations, the more secure the derived key will be, - * but will take a longer amount of time to complete. - * - * The `salt` should be as unique as possible. It is recommended that a salt is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * ```js - * const { - * pbkdf2Sync, - * } = await import('node:crypto'); - * - * const key = pbkdf2Sync('secret', 'salt', 100000, 64, 'sha512'); - * console.log(key.toString('hex')); // '3745e48...08d59ae' - * ``` - * - * An array of supported digest functions can be retrieved using {@link getHashes}. - * @since v0.9.3 - */ - function pbkdf2Sync( - password: BinaryLike, - salt: BinaryLike, - iterations: number, - keylen: number, - digest: string, - ): NonSharedBuffer; - /** - * Generates cryptographically strong pseudorandom data. The `size` argument - * is a number indicating the number of bytes to generate. - * - * If a `callback` function is provided, the bytes are generated asynchronously - * and the `callback` function is invoked with two arguments: `err` and `buf`. - * If an error occurs, `err` will be an `Error` object; otherwise it is `null`. The `buf` argument is a `Buffer` containing the generated bytes. - * - * ```js - * // Asynchronous - * const { - * randomBytes, - * } = await import('node:crypto'); - * - * randomBytes(256, (err, buf) => { - * if (err) throw err; - * console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`); - * }); - * ``` - * - * If the `callback` function is not provided, the random bytes are generated - * synchronously and returned as a `Buffer`. An error will be thrown if - * there is a problem generating the bytes. - * - * ```js - * // Synchronous - * const { - * randomBytes, - * } = await import('node:crypto'); - * - * const buf = randomBytes(256); - * console.log( - * `${buf.length} bytes of random data: ${buf.toString('hex')}`); - * ``` - * - * The `crypto.randomBytes()` method will not complete until there is - * sufficient entropy available. - * This should normally never take longer than a few milliseconds. The only time - * when generating the random bytes may conceivably block for a longer period of - * time is right after boot, when the whole system is still low on entropy. - * - * This API uses libuv's threadpool, which can have surprising and - * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. - * - * The asynchronous version of `crypto.randomBytes()` is carried out in a single - * threadpool request. To minimize threadpool task length variation, partition - * large `randomBytes` requests when doing so as part of fulfilling a client - * request. - * @since v0.5.8 - * @param size The number of bytes to generate. The `size` must not be larger than `2**31 - 1`. - * @return if the `callback` function is not provided. - */ - function randomBytes(size: number): NonSharedBuffer; - function randomBytes(size: number, callback: (err: Error | null, buf: NonSharedBuffer) => void): void; - function pseudoRandomBytes(size: number): NonSharedBuffer; - function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: NonSharedBuffer) => void): void; - /** - * Return a random integer `n` such that `min <= n < max`. This - * implementation avoids [modulo bias](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias). - * - * The range (`max - min`) must be less than 2**48. `min` and `max` must - * be [safe integers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger). - * - * If the `callback` function is not provided, the random integer is - * generated synchronously. - * - * ```js - * // Asynchronous - * const { - * randomInt, - * } = await import('node:crypto'); - * - * randomInt(3, (err, n) => { - * if (err) throw err; - * console.log(`Random number chosen from (0, 1, 2): ${n}`); - * }); - * ``` - * - * ```js - * // Synchronous - * const { - * randomInt, - * } = await import('node:crypto'); - * - * const n = randomInt(3); - * console.log(`Random number chosen from (0, 1, 2): ${n}`); - * ``` - * - * ```js - * // With `min` argument - * const { - * randomInt, - * } = await import('node:crypto'); - * - * const n = randomInt(1, 7); - * console.log(`The dice rolled: ${n}`); - * ``` - * @since v14.10.0, v12.19.0 - * @param [min=0] Start of random range (inclusive). - * @param max End of random range (exclusive). - * @param callback `function(err, n) {}`. - */ - function randomInt(max: number): number; - function randomInt(min: number, max: number): number; - function randomInt(max: number, callback: (err: Error | null, value: number) => void): void; - function randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void; - /** - * Synchronous version of {@link randomFill}. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { randomFillSync } = await import('node:crypto'); - * - * const buf = Buffer.alloc(10); - * console.log(randomFillSync(buf).toString('hex')); - * - * randomFillSync(buf, 5); - * console.log(buf.toString('hex')); - * - * // The above is equivalent to the following: - * randomFillSync(buf, 5, 5); - * console.log(buf.toString('hex')); - * ``` - * - * Any `ArrayBuffer`, `TypedArray` or `DataView` instance may be passed as`buffer`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { randomFillSync } = await import('node:crypto'); - * - * const a = new Uint32Array(10); - * console.log(Buffer.from(randomFillSync(a).buffer, - * a.byteOffset, a.byteLength).toString('hex')); - * - * const b = new DataView(new ArrayBuffer(10)); - * console.log(Buffer.from(randomFillSync(b).buffer, - * b.byteOffset, b.byteLength).toString('hex')); - * - * const c = new ArrayBuffer(10); - * console.log(Buffer.from(randomFillSync(c)).toString('hex')); - * ``` - * @since v7.10.0, v6.13.0 - * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. - * @param [offset=0] - * @param [size=buffer.length - offset] - * @return The object passed as `buffer` argument. - */ - function randomFillSync(buffer: T, offset?: number, size?: number): T; - /** - * This function is similar to {@link randomBytes} but requires the first - * argument to be a `Buffer` that will be filled. It also - * requires that a callback is passed in. - * - * If the `callback` function is not provided, an error will be thrown. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { randomFill } = await import('node:crypto'); - * - * const buf = Buffer.alloc(10); - * randomFill(buf, (err, buf) => { - * if (err) throw err; - * console.log(buf.toString('hex')); - * }); - * - * randomFill(buf, 5, (err, buf) => { - * if (err) throw err; - * console.log(buf.toString('hex')); - * }); - * - * // The above is equivalent to the following: - * randomFill(buf, 5, 5, (err, buf) => { - * if (err) throw err; - * console.log(buf.toString('hex')); - * }); - * ``` - * - * Any `ArrayBuffer`, `TypedArray`, or `DataView` instance may be passed as `buffer`. - * - * While this includes instances of `Float32Array` and `Float64Array`, this - * function should not be used to generate random floating-point numbers. The - * result may contain `+Infinity`, `-Infinity`, and `NaN`, and even if the array - * contains finite numbers only, they are not drawn from a uniform random - * distribution and have no meaningful lower or upper bounds. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { randomFill } = await import('node:crypto'); - * - * const a = new Uint32Array(10); - * randomFill(a, (err, buf) => { - * if (err) throw err; - * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) - * .toString('hex')); - * }); - * - * const b = new DataView(new ArrayBuffer(10)); - * randomFill(b, (err, buf) => { - * if (err) throw err; - * console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength) - * .toString('hex')); - * }); - * - * const c = new ArrayBuffer(10); - * randomFill(c, (err, buf) => { - * if (err) throw err; - * console.log(Buffer.from(buf).toString('hex')); - * }); - * ``` - * - * This API uses libuv's threadpool, which can have surprising and - * negative performance implications for some applications; see the `UV_THREADPOOL_SIZE` documentation for more information. - * - * The asynchronous version of `crypto.randomFill()` is carried out in a single - * threadpool request. To minimize threadpool task length variation, partition - * large `randomFill` requests when doing so as part of fulfilling a client - * request. - * @since v7.10.0, v6.13.0 - * @param buffer Must be supplied. The size of the provided `buffer` must not be larger than `2**31 - 1`. - * @param [offset=0] - * @param [size=buffer.length - offset] - * @param callback `function(err, buf) {}`. - */ - function randomFill( - buffer: T, - callback: (err: Error | null, buf: T) => void, - ): void; - function randomFill( - buffer: T, - offset: number, - callback: (err: Error | null, buf: T) => void, - ): void; - function randomFill( - buffer: T, - offset: number, - size: number, - callback: (err: Error | null, buf: T) => void, - ): void; - interface ScryptOptions { - cost?: number | undefined; - blockSize?: number | undefined; - parallelization?: number | undefined; - N?: number | undefined; - r?: number | undefined; - p?: number | undefined; - maxmem?: number | undefined; - } - /** - * Provides an asynchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based - * key derivation function that is designed to be expensive computationally and - * memory-wise in order to make brute-force attacks unrewarding. - * - * The `salt` should be as unique as possible. It is recommended that a salt is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * The `callback` function is called with two arguments: `err` and `derivedKey`. `err` is an exception object when key derivation fails, otherwise `err` is `null`. `derivedKey` is passed to the - * callback as a `Buffer`. - * - * An exception is thrown when any of the input arguments specify invalid values - * or types. - * - * ```js - * const { - * scrypt, - * } = await import('node:crypto'); - * - * // Using the factory defaults. - * scrypt('password', 'salt', 64, (err, derivedKey) => { - * if (err) throw err; - * console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' - * }); - * // Using a custom N parameter. Must be a power of two. - * scrypt('password', 'salt', 64, { N: 1024 }, (err, derivedKey) => { - * if (err) throw err; - * console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' - * }); - * ``` - * @since v10.5.0 - */ - function scrypt( - password: BinaryLike, - salt: BinaryLike, - keylen: number, - callback: (err: Error | null, derivedKey: NonSharedBuffer) => void, - ): void; - function scrypt( - password: BinaryLike, - salt: BinaryLike, - keylen: number, - options: ScryptOptions, - callback: (err: Error | null, derivedKey: NonSharedBuffer) => void, - ): void; - /** - * Provides a synchronous [scrypt](https://en.wikipedia.org/wiki/Scrypt) implementation. Scrypt is a password-based - * key derivation function that is designed to be expensive computationally and - * memory-wise in order to make brute-force attacks unrewarding. - * - * The `salt` should be as unique as possible. It is recommended that a salt is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `password` or `salt`, please consider `caveats when using strings as inputs to cryptographic APIs`. - * - * An exception is thrown when key derivation fails, otherwise the derived key is - * returned as a `Buffer`. - * - * An exception is thrown when any of the input arguments specify invalid values - * or types. - * - * ```js - * const { - * scryptSync, - * } = await import('node:crypto'); - * // Using the factory defaults. - * - * const key1 = scryptSync('password', 'salt', 64); - * console.log(key1.toString('hex')); // '3745e48...08d59ae' - * // Using a custom N parameter. Must be a power of two. - * const key2 = scryptSync('password', 'salt', 64, { N: 1024 }); - * console.log(key2.toString('hex')); // '3745e48...aa39b34' - * ``` - * @since v10.5.0 - */ - function scryptSync( - password: BinaryLike, - salt: BinaryLike, - keylen: number, - options?: ScryptOptions, - ): NonSharedBuffer; - interface RsaPublicKey { - key: KeyLike; - padding?: number | undefined; - } - interface RsaPrivateKey { - key: KeyLike; - passphrase?: string | undefined; - /** - * @default 'sha1' - */ - oaepHash?: string | undefined; - oaepLabel?: NodeJS.TypedArray | undefined; - padding?: number | undefined; - } - /** - * Encrypts the content of `buffer` with `key` and returns a new `Buffer` with encrypted content. The returned data can be decrypted using - * the corresponding private key, for example using {@link privateDecrypt}. - * - * If `key` is not a `KeyObject`, this function behaves as if `key` had been passed to {@link createPublicKey}. If it is an - * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_OAEP_PADDING`. - * - * Because RSA public keys can be derived from private keys, a private key may - * be passed instead of a public key. - * @since v0.11.14 - */ - function publicEncrypt( - key: RsaPublicKey | RsaPrivateKey | KeyLike, - buffer: NodeJS.ArrayBufferView | string, - ): NonSharedBuffer; - /** - * Decrypts `buffer` with `key`.`buffer` was previously encrypted using - * the corresponding private key, for example using {@link privateEncrypt}. - * - * If `key` is not a `KeyObject`, this function behaves as if `key` had been passed to {@link createPublicKey}. If it is an - * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_PADDING`. - * - * Because RSA public keys can be derived from private keys, a private key may - * be passed instead of a public key. - * @since v1.1.0 - */ - function publicDecrypt( - key: RsaPublicKey | RsaPrivateKey | KeyLike, - buffer: NodeJS.ArrayBufferView | string, - ): NonSharedBuffer; - /** - * Decrypts `buffer` with `privateKey`. `buffer` was previously encrypted using - * the corresponding public key, for example using {@link publicEncrypt}. - * - * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an - * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_OAEP_PADDING`. - * @since v0.11.14 - */ - function privateDecrypt( - privateKey: RsaPrivateKey | KeyLike, - buffer: NodeJS.ArrayBufferView | string, - ): NonSharedBuffer; - /** - * Encrypts `buffer` with `privateKey`. The returned data can be decrypted using - * the corresponding public key, for example using {@link publicDecrypt}. - * - * If `privateKey` is not a `KeyObject`, this function behaves as if `privateKey` had been passed to {@link createPrivateKey}. If it is an - * object, the `padding` property can be passed. Otherwise, this function uses `RSA_PKCS1_PADDING`. - * @since v1.1.0 - */ - function privateEncrypt( - privateKey: RsaPrivateKey | KeyLike, - buffer: NodeJS.ArrayBufferView | string, - ): NonSharedBuffer; - /** - * ```js - * const { - * getCiphers, - * } = await import('node:crypto'); - * - * console.log(getCiphers()); // ['aes-128-cbc', 'aes-128-ccm', ...] - * ``` - * @since v0.9.3 - * @return An array with the names of the supported cipher algorithms. - */ - function getCiphers(): string[]; - /** - * ```js - * const { - * getCurves, - * } = await import('node:crypto'); - * - * console.log(getCurves()); // ['Oakley-EC2N-3', 'Oakley-EC2N-4', ...] - * ``` - * @since v2.3.0 - * @return An array with the names of the supported elliptic curves. - */ - function getCurves(): string[]; - /** - * @since v10.0.0 - * @return `1` if and only if a FIPS compliant crypto provider is currently in use, `0` otherwise. A future semver-major release may change the return type of this API to a {boolean}. - */ - function getFips(): 1 | 0; - /** - * Enables the FIPS compliant crypto provider in a FIPS-enabled Node.js build. - * Throws an error if FIPS mode is not available. - * @since v10.0.0 - * @param bool `true` to enable FIPS mode. - */ - function setFips(bool: boolean): void; - /** - * ```js - * const { - * getHashes, - * } = await import('node:crypto'); - * - * console.log(getHashes()); // ['DSA', 'DSA-SHA', 'DSA-SHA1', ...] - * ``` - * @since v0.9.3 - * @return An array of the names of the supported hash algorithms, such as `'RSA-SHA256'`. Hash algorithms are also called "digest" algorithms. - */ - function getHashes(): string[]; - /** - * The `ECDH` class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH) - * key exchanges. - * - * Instances of the `ECDH` class can be created using the {@link createECDH} function. - * - * ```js - * import assert from 'node:assert'; - * - * const { - * createECDH, - * } = await import('node:crypto'); - * - * // Generate Alice's keys... - * const alice = createECDH('secp521r1'); - * const aliceKey = alice.generateKeys(); - * - * // Generate Bob's keys... - * const bob = createECDH('secp521r1'); - * const bobKey = bob.generateKeys(); - * - * // Exchange and generate the secret... - * const aliceSecret = alice.computeSecret(bobKey); - * const bobSecret = bob.computeSecret(aliceKey); - * - * assert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex')); - * // OK - * ``` - * @since v0.11.14 - */ - class ECDH { - private constructor(); - /** - * Converts the EC Diffie-Hellman public key specified by `key` and `curve` to the - * format specified by `format`. The `format` argument specifies point encoding - * and can be `'compressed'`, `'uncompressed'` or `'hybrid'`. The supplied key is - * interpreted using the specified `inputEncoding`, and the returned key is encoded - * using the specified `outputEncoding`. - * - * Use {@link getCurves} to obtain a list of available curve names. - * On recent OpenSSL releases, `openssl ecparam -list_curves` will also display - * the name and description of each available elliptic curve. - * - * If `format` is not specified the point will be returned in `'uncompressed'` format. - * - * If the `inputEncoding` is not provided, `key` is expected to be a `Buffer`, `TypedArray`, or `DataView`. - * - * Example (uncompressing a key): - * - * ```js - * const { - * createECDH, - * ECDH, - * } = await import('node:crypto'); - * - * const ecdh = createECDH('secp256k1'); - * ecdh.generateKeys(); - * - * const compressedKey = ecdh.getPublicKey('hex', 'compressed'); - * - * const uncompressedKey = ECDH.convertKey(compressedKey, - * 'secp256k1', - * 'hex', - * 'hex', - * 'uncompressed'); - * - * // The converted key and the uncompressed public key should be the same - * console.log(uncompressedKey === ecdh.getPublicKey('hex')); - * ``` - * @since v10.0.0 - * @param inputEncoding The `encoding` of the `key` string. - * @param outputEncoding The `encoding` of the return value. - * @param [format='uncompressed'] - */ - static convertKey( - key: BinaryLike, - curve: string, - inputEncoding?: BinaryToTextEncoding, - outputEncoding?: "latin1" | "hex" | "base64" | "base64url", - format?: "uncompressed" | "compressed" | "hybrid", - ): NonSharedBuffer | string; - /** - * Generates private and public EC Diffie-Hellman key values, and returns - * the public key in the specified `format` and `encoding`. This key should be - * transferred to the other party. - * - * The `format` argument specifies point encoding and can be `'compressed'` or `'uncompressed'`. If `format` is not specified, the point will be returned in`'uncompressed'` format. - * - * If `encoding` is provided a string is returned; otherwise a `Buffer` is returned. - * @since v0.11.14 - * @param encoding The `encoding` of the return value. - * @param [format='uncompressed'] - */ - generateKeys(): NonSharedBuffer; - generateKeys(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; - /** - * Computes the shared secret using `otherPublicKey` as the other - * party's public key and returns the computed shared secret. The supplied - * key is interpreted using specified `inputEncoding`, and the returned secret - * is encoded using the specified `outputEncoding`. - * If the `inputEncoding` is not - * provided, `otherPublicKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`. - * - * If `outputEncoding` is given a string will be returned; otherwise a `Buffer` is returned. - * - * `ecdh.computeSecret` will throw an`ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey` lies outside of the elliptic curve. Since `otherPublicKey` is - * usually supplied from a remote user over an insecure network, - * be sure to handle this exception accordingly. - * @since v0.11.14 - * @param inputEncoding The `encoding` of the `otherPublicKey` string. - * @param outputEncoding The `encoding` of the return value. - */ - computeSecret(otherPublicKey: NodeJS.ArrayBufferView): NonSharedBuffer; - computeSecret(otherPublicKey: string, inputEncoding: BinaryToTextEncoding): NonSharedBuffer; - computeSecret(otherPublicKey: NodeJS.ArrayBufferView, outputEncoding: BinaryToTextEncoding): string; - computeSecret( - otherPublicKey: string, - inputEncoding: BinaryToTextEncoding, - outputEncoding: BinaryToTextEncoding, - ): string; - /** - * If `encoding` is specified, a string is returned; otherwise a `Buffer` is - * returned. - * @since v0.11.14 - * @param encoding The `encoding` of the return value. - * @return The EC Diffie-Hellman in the specified `encoding`. - */ - getPrivateKey(): NonSharedBuffer; - getPrivateKey(encoding: BinaryToTextEncoding): string; - /** - * The `format` argument specifies point encoding and can be `'compressed'` or `'uncompressed'`. If `format` is not specified the point will be returned in`'uncompressed'` format. - * - * If `encoding` is specified, a string is returned; otherwise a `Buffer` is - * returned. - * @since v0.11.14 - * @param encoding The `encoding` of the return value. - * @param [format='uncompressed'] - * @return The EC Diffie-Hellman public key in the specified `encoding` and `format`. - */ - getPublicKey(encoding?: null, format?: ECDHKeyFormat): NonSharedBuffer; - getPublicKey(encoding: BinaryToTextEncoding, format?: ECDHKeyFormat): string; - /** - * Sets the EC Diffie-Hellman private key. - * If `encoding` is provided, `privateKey` is expected - * to be a string; otherwise `privateKey` is expected to be a `Buffer`, `TypedArray`, or `DataView`. - * - * If `privateKey` is not valid for the curve specified when the `ECDH` object was - * created, an error is thrown. Upon setting the private key, the associated - * public point (key) is also generated and set in the `ECDH` object. - * @since v0.11.14 - * @param encoding The `encoding` of the `privateKey` string. - */ - setPrivateKey(privateKey: NodeJS.ArrayBufferView): void; - setPrivateKey(privateKey: string, encoding: BinaryToTextEncoding): void; - } - /** - * Creates an Elliptic Curve Diffie-Hellman (`ECDH`) key exchange object using a - * predefined curve specified by the `curveName` string. Use {@link getCurves} to obtain a list of available curve names. On recent - * OpenSSL releases, `openssl ecparam -list_curves` will also display the name - * and description of each available elliptic curve. - * @since v0.11.14 - */ - function createECDH(curveName: string): ECDH; - /** - * This function compares the underlying bytes that represent the given `ArrayBuffer`, `TypedArray`, or `DataView` instances using a constant-time - * algorithm. - * - * This function does not leak timing information that - * would allow an attacker to guess one of the values. This is suitable for - * comparing HMAC digests or secret values like authentication cookies or [capability urls](https://www.w3.org/TR/capability-urls/). - * - * `a` and `b` must both be `Buffer`s, `TypedArray`s, or `DataView`s, and they - * must have the same byte length. An error is thrown if `a` and `b` have - * different byte lengths. - * - * If at least one of `a` and `b` is a `TypedArray` with more than one byte per - * entry, such as `Uint16Array`, the result will be computed using the platform - * byte order. - * - * **When both of the inputs are `Float32Array`s or `Float64Array`s, this function might return unexpected results due to IEEE 754** - * **encoding of floating-point numbers. In particular, neither `x === y` nor `Object.is(x, y)` implies that the byte representations of two floating-point** - * **numbers `x` and `y` are equal.** - * - * Use of `crypto.timingSafeEqual` does not guarantee that the _surrounding_ code - * is timing-safe. Care should be taken to ensure that the surrounding code does - * not introduce timing vulnerabilities. - * @since v6.6.0 - */ - function timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean; - interface DHKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> { - /** - * The prime parameter - */ - prime?: Buffer | undefined; - /** - * Prime length in bits - */ - primeLength?: number | undefined; - /** - * Custom generator - * @default 2 - */ - generator?: number | undefined; - /** - * Diffie-Hellman group name - * @see {@link getDiffieHellman} - */ - groupName?: string | undefined; - } - interface DSAKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> { - /** - * Key size in bits - */ - modulusLength: number; - /** - * Size of q in bits - */ - divisorLength: number; - } - interface ECKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8" | "sec1"> { - /** - * Name of the curve to use - */ - namedCurve: string; - /** - * Must be `'named'` or `'explicit'` - * @default 'named' - */ - paramEncoding?: "explicit" | "named" | undefined; - } - interface ED25519KeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface ED448KeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface MLDSAKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface MLKEMKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface RSAPSSKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> { - /** - * Key size in bits - */ - modulusLength: number; - /** - * Public exponent - * @default 0x10001 - */ - publicExponent?: number | undefined; - /** - * Name of the message digest - */ - hashAlgorithm?: string | undefined; - /** - * Name of the message digest used by MGF1 - */ - mgf1HashAlgorithm?: string | undefined; - /** - * Minimal salt length in bytes - */ - saltLength?: string | undefined; - } - interface RSAKeyPairOptions extends KeyPairExportOptions<"pkcs1" | "spki", "pkcs1" | "pkcs8"> { - /** - * Key size in bits - */ - modulusLength: number; - /** - * Public exponent - * @default 0x10001 - */ - publicExponent?: number | undefined; - } - interface SLHDSAKeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface X25519KeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - interface X448KeyPairOptions extends KeyPairExportOptions<"spki", "pkcs8"> {} - /** - * Generates a new asymmetric key pair of the given `type`. See the - * supported [asymmetric key types](https://nodejs.org/docs/latest-v25.x/api/crypto.html#asymmetric-key-types). - * - * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function - * behaves as if `keyObject.export()` had been called on its result. Otherwise, - * the respective part of the key is returned as a `KeyObject`. - * - * When encoding public keys, it is recommended to use `'spki'`. When encoding - * private keys, it is recommended to use `'pkcs8'` with a strong passphrase, - * and to keep the passphrase confidential. - * - * ```js - * const { - * generateKeyPairSync, - * } = await import('node:crypto'); - * - * const { - * publicKey, - * privateKey, - * } = generateKeyPairSync('rsa', { - * modulusLength: 4096, - * publicKeyEncoding: { - * type: 'spki', - * format: 'pem', - * }, - * privateKeyEncoding: { - * type: 'pkcs8', - * format: 'pem', - * cipher: 'aes-256-cbc', - * passphrase: 'top secret', - * }, - * }); - * ``` - * - * The return value `{ publicKey, privateKey }` represents the generated key pair. - * When PEM encoding was selected, the respective key will be a string, otherwise - * it will be a buffer containing the data encoded as DER. - * @since v10.12.0 - * @param type The asymmetric key type to generate. See the - * supported [asymmetric key types](https://nodejs.org/docs/latest-v25.x/api/crypto.html#asymmetric-key-types). - */ - function generateKeyPairSync( - type: "dh", - options: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "dsa", - options: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "ec", - options: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "ed25519", - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "ed448", - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: MLDSAKeyType, - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: MLKEMKeyType, - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "rsa-pss", - options: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "rsa", - options: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: SLHDSAKeyType, - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "x25519", - options?: T, - ): KeyPairExportResult; - function generateKeyPairSync( - type: "x448", - options?: T, - ): KeyPairExportResult; - /** - * Generates a new asymmetric key pair of the given `type`. See the - * supported [asymmetric key types](https://nodejs.org/docs/latest-v25.x/api/crypto.html#asymmetric-key-types). - * - * If a `publicKeyEncoding` or `privateKeyEncoding` was specified, this function - * behaves as if `keyObject.export()` had been called on its result. Otherwise, - * the respective part of the key is returned as a `KeyObject`. - * - * It is recommended to encode public keys as `'spki'` and private keys as `'pkcs8'` with encryption for long-term storage: - * - * ```js - * const { - * generateKeyPair, - * } = await import('node:crypto'); - * - * generateKeyPair('rsa', { - * modulusLength: 4096, - * publicKeyEncoding: { - * type: 'spki', - * format: 'pem', - * }, - * privateKeyEncoding: { - * type: 'pkcs8', - * format: 'pem', - * cipher: 'aes-256-cbc', - * passphrase: 'top secret', - * }, - * }, (err, publicKey, privateKey) => { - * // Handle errors and use the generated key pair. - * }); - * ``` - * - * On completion, `callback` will be called with `err` set to `undefined` and `publicKey` / `privateKey` representing the generated key pair. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a `Promise` for an `Object` with `publicKey` and `privateKey` properties. - * @since v10.12.0 - * @param type The asymmetric key type to generate. See the - * supported [asymmetric key types](https://nodejs.org/docs/latest-v25.x/api/crypto.html#asymmetric-key-types). - */ - function generateKeyPair( - type: "dh", - options: T, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "dsa", - options: T, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "ec", - options: T, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "ed25519", - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "ed448", - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: MLDSAKeyType, - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: MLKEMKeyType, - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "rsa-pss", - options: T, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "rsa", - options: T, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: SLHDSAKeyType, - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "x25519", - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - function generateKeyPair( - type: "x448", - options: T | undefined, - callback: KeyPairExportCallback, - ): void; - namespace generateKeyPair { - function __promisify__( - type: "dh", - options: T, - ): Promise>; - function __promisify__( - type: "dsa", - options: T, - ): Promise>; - function __promisify__( - type: "ec", - options: T, - ): Promise>; - function __promisify__( - type: "ed25519", - options?: T, - ): Promise>; - function __promisify__( - type: "ed448", - options?: T, - ): Promise>; - function __promisify__( - type: MLDSAKeyType, - options?: T, - ): Promise>; - function __promisify__( - type: MLKEMKeyType, - options?: T, - ): Promise>; - function __promisify__( - type: "rsa-pss", - options: T, - ): Promise>; - function __promisify__( - type: "rsa", - options: T, - ): Promise>; - function __promisify__( - type: SLHDSAKeyType, - options?: T, - ): Promise>; - function __promisify__( - type: "x25519", - options?: T, - ): Promise>; - function __promisify__( - type: "x448", - options?: T, - ): Promise>; - } - /** - * Calculates and returns the signature for `data` using the given private key and - * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is - * dependent upon the key type. - * - * `algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and - * ML-DSA. - * - * If `key` is not a `KeyObject`, this function behaves as if `key` had been - * passed to {@link createPrivateKey}. If it is an object, the following - * additional properties can be passed: - * - * If the `callback` function is provided this function uses libuv's threadpool. - * @since v12.0.0 - */ - function sign( - algorithm: string | null | undefined, - data: NodeJS.ArrayBufferView, - key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput, - ): NonSharedBuffer; - function sign( - algorithm: string | null | undefined, - data: NodeJS.ArrayBufferView, - key: KeyLike | SignKeyObjectInput | SignPrivateKeyInput | SignJsonWebKeyInput, - callback: (error: Error | null, data: NonSharedBuffer) => void, - ): void; - /** - * Verifies the given signature for `data` using the given key and algorithm. If - * `algorithm` is `null` or `undefined`, then the algorithm is dependent upon the - * key type. - * - * `algorithm` is required to be `null` or `undefined` for Ed25519, Ed448, and - * ML-DSA. - * - * If `key` is not a `KeyObject`, this function behaves as if `key` had been - * passed to {@link createPublicKey}. If it is an object, the following - * additional properties can be passed: - * - * The `signature` argument is the previously calculated signature for the `data`. - * - * Because public keys can be derived from private keys, a private key or a public - * key may be passed for `key`. - * - * If the `callback` function is provided this function uses libuv's threadpool. - * @since v12.0.0 - */ - function verify( - algorithm: string | null | undefined, - data: NodeJS.ArrayBufferView, - key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, - signature: NodeJS.ArrayBufferView, - ): boolean; - function verify( - algorithm: string | null | undefined, - data: NodeJS.ArrayBufferView, - key: KeyLike | VerifyKeyObjectInput | VerifyPublicKeyInput | VerifyJsonWebKeyInput, - signature: NodeJS.ArrayBufferView, - callback: (error: Error | null, result: boolean) => void, - ): void; - /** - * Key decapsulation using a KEM algorithm with a private key. - * - * Supported key types and their KEM algorithms are: - * - * * `'rsa'` RSA Secret Value Encapsulation - * * `'ec'` DHKEM(P-256, HKDF-SHA256), DHKEM(P-384, HKDF-SHA256), DHKEM(P-521, HKDF-SHA256) - * * `'x25519'` DHKEM(X25519, HKDF-SHA256) - * * `'x448'` DHKEM(X448, HKDF-SHA512) - * * `'ml-kem-512'` ML-KEM - * * `'ml-kem-768'` ML-KEM - * * `'ml-kem-1024'` ML-KEM - * - * If `key` is not a {@link KeyObject}, this function behaves as if `key` had been - * passed to `crypto.createPrivateKey()`. - * - * If the `callback` function is provided this function uses libuv's threadpool. - * @since v24.7.0 - */ - function decapsulate( - key: KeyLike | PrivateKeyInput | JsonWebKeyInput, - ciphertext: ArrayBuffer | NodeJS.ArrayBufferView, - ): NonSharedBuffer; - function decapsulate( - key: KeyLike | PrivateKeyInput | JsonWebKeyInput, - ciphertext: ArrayBuffer | NodeJS.ArrayBufferView, - callback: (err: Error, sharedKey: NonSharedBuffer) => void, - ): void; - /** - * Computes the Diffie-Hellman shared secret based on a `privateKey` and a `publicKey`. - * Both keys must have the same `asymmetricKeyType` and must support either the DH or - * ECDH operation. - * - * If the `callback` function is provided this function uses libuv's threadpool. - * @since v13.9.0, v12.17.0 - */ - function diffieHellman(options: { privateKey: KeyObject; publicKey: KeyObject }): NonSharedBuffer; - function diffieHellman( - options: { privateKey: KeyObject; publicKey: KeyObject }, - callback: (err: Error | null, secret: NonSharedBuffer) => void, - ): void; - /** - * Key encapsulation using a KEM algorithm with a public key. - * - * Supported key types and their KEM algorithms are: - * - * * `'rsa'` RSA Secret Value Encapsulation - * * `'ec'` DHKEM(P-256, HKDF-SHA256), DHKEM(P-384, HKDF-SHA256), DHKEM(P-521, HKDF-SHA256) - * * `'x25519'` DHKEM(X25519, HKDF-SHA256) - * * `'x448'` DHKEM(X448, HKDF-SHA512) - * * `'ml-kem-512'` ML-KEM - * * `'ml-kem-768'` ML-KEM - * * `'ml-kem-1024'` ML-KEM - * - * If `key` is not a {@link KeyObject}, this function behaves as if `key` had been - * passed to `crypto.createPublicKey()`. - * - * If the `callback` function is provided this function uses libuv's threadpool. - * @since v24.7.0 - */ - function encapsulate( - key: KeyLike | PublicKeyInput | JsonWebKeyInput, - ): { sharedKey: NonSharedBuffer; ciphertext: NonSharedBuffer }; - function encapsulate( - key: KeyLike | PublicKeyInput | JsonWebKeyInput, - callback: (err: Error, result: { sharedKey: NonSharedBuffer; ciphertext: NonSharedBuffer }) => void, - ): void; - interface OneShotDigestOptions { - /** - * Encoding used to encode the returned digest. - * @default 'hex' - */ - outputEncoding?: BinaryToTextEncoding | "buffer" | undefined; - /** - * For XOF hash functions such as 'shake256', the outputLength option - * can be used to specify the desired output length in bytes. - */ - outputLength?: number | undefined; - } - interface OneShotDigestOptionsWithStringEncoding extends OneShotDigestOptions { - outputEncoding?: BinaryToTextEncoding | undefined; - } - interface OneShotDigestOptionsWithBufferEncoding extends OneShotDigestOptions { - outputEncoding: "buffer"; - } - /** - * A utility for creating one-shot hash digests of data. It can be faster than - * the object-based `crypto.createHash()` when hashing a smaller amount of data - * (<= 5MB) that's readily available. If the data can be big or if it is streamed, - * it's still recommended to use `crypto.createHash()` instead. - * - * The `algorithm` is dependent on the available algorithms supported by the - * version of OpenSSL on the platform. Examples are `'sha256'`, `'sha512'`, etc. - * On recent releases of OpenSSL, `openssl list -digest-algorithms` will - * display the available digest algorithms. - * - * If `options` is a string, then it specifies the `outputEncoding`. - * - * Example: - * - * ```js - * import crypto from 'node:crypto'; - * import { Buffer } from 'node:buffer'; - * - * // Hashing a string and return the result as a hex-encoded string. - * const string = 'Node.js'; - * // 10b3493287f831e81a438811a1ffba01f8cec4b7 - * console.log(crypto.hash('sha1', string)); - * - * // Encode a base64-encoded string into a Buffer, hash it and return - * // the result as a buffer. - * const base64 = 'Tm9kZS5qcw=='; - * // - * console.log(crypto.hash('sha1', Buffer.from(base64, 'base64'), 'buffer')); - * ``` - * @since v21.7.0, v20.12.0 - * @param data When `data` is a string, it will be encoded as UTF-8 before being hashed. If a different - * input encoding is desired for a string input, user could encode the string - * into a `TypedArray` using either `TextEncoder` or `Buffer.from()` and passing - * the encoded `TypedArray` into this API instead. - */ - function hash( - algorithm: string, - data: BinaryLike, - options?: OneShotDigestOptionsWithStringEncoding | BinaryToTextEncoding, - ): string; - function hash( - algorithm: string, - data: BinaryLike, - options: OneShotDigestOptionsWithBufferEncoding | "buffer", - ): NonSharedBuffer; - function hash( - algorithm: string, - data: BinaryLike, - options: OneShotDigestOptions | BinaryToTextEncoding | "buffer", - ): string | NonSharedBuffer; - type CipherMode = "cbc" | "ccm" | "cfb" | "ctr" | "ecb" | "gcm" | "ocb" | "ofb" | "stream" | "wrap" | "xts"; - interface CipherInfoOptions { - /** - * A test key length. - */ - keyLength?: number | undefined; - /** - * A test IV length. - */ - ivLength?: number | undefined; - } - interface CipherInfo { - /** - * The name of the cipher. - */ - name: string; - /** - * The nid of the cipher. - */ - nid: number; - /** - * The block size of the cipher in bytes. - * This property is omitted when mode is 'stream'. - */ - blockSize?: number | undefined; - /** - * The expected or default initialization vector length in bytes. - * This property is omitted if the cipher does not use an initialization vector. - */ - ivLength?: number | undefined; - /** - * The expected or default key length in bytes. - */ - keyLength: number; - /** - * The cipher mode. - */ - mode: CipherMode; - } - /** - * Returns information about a given cipher. - * - * Some ciphers accept variable length keys and initialization vectors. By default, - * the `crypto.getCipherInfo()` method will return the default values for these - * ciphers. To test if a given key length or iv length is acceptable for given - * cipher, use the `keyLength` and `ivLength` options. If the given values are - * unacceptable, `undefined` will be returned. - * @since v15.0.0 - * @param nameOrNid The name or nid of the cipher to query. - */ - function getCipherInfo(nameOrNid: string | number, options?: CipherInfoOptions): CipherInfo | undefined; - /** - * HKDF is a simple key derivation function defined in RFC 5869\. The given `ikm`, `salt` and `info` are used with the `digest` to derive a key of `keylen` bytes. - * - * The supplied `callback` function is called with two arguments: `err` and `derivedKey`. If an errors occurs while deriving the key, `err` will be set; - * otherwise `err` will be `null`. The successfully generated `derivedKey` will - * be passed to the callback as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). An error will be thrown if any - * of the input arguments specify invalid values or types. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { - * hkdf, - * } = await import('node:crypto'); - * - * hkdf('sha512', 'key', 'salt', 'info', 64, (err, derivedKey) => { - * if (err) throw err; - * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' - * }); - * ``` - * @since v15.0.0 - * @param digest The digest algorithm to use. - * @param ikm The input keying material. Must be provided but can be zero-length. - * @param salt The salt value. Must be provided but can be zero-length. - * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. - * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` - * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). - */ - function hkdf( - digest: string, - irm: BinaryLike | KeyObject, - salt: BinaryLike, - info: BinaryLike, - keylen: number, - callback: (err: Error | null, derivedKey: ArrayBuffer) => void, - ): void; - /** - * Provides a synchronous HKDF key derivation function as defined in RFC 5869\. The - * given `ikm`, `salt` and `info` are used with the `digest` to derive a key of `keylen` bytes. - * - * The successfully generated `derivedKey` will be returned as an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). - * - * An error will be thrown if any of the input arguments specify invalid values or - * types, or if the derived key cannot be generated. - * - * ```js - * import { Buffer } from 'node:buffer'; - * const { - * hkdfSync, - * } = await import('node:crypto'); - * - * const derivedKey = hkdfSync('sha512', 'key', 'salt', 'info', 64); - * console.log(Buffer.from(derivedKey).toString('hex')); // '24156e2...5391653' - * ``` - * @since v15.0.0 - * @param digest The digest algorithm to use. - * @param ikm The input keying material. Must be provided but can be zero-length. - * @param salt The salt value. Must be provided but can be zero-length. - * @param info Additional info value. Must be provided but can be zero-length, and cannot be more than 1024 bytes. - * @param keylen The length of the key to generate. Must be greater than 0. The maximum allowable value is `255` times the number of bytes produced by the selected digest function (e.g. `sha512` - * generates 64-byte hashes, making the maximum HKDF output 16320 bytes). - */ - function hkdfSync( - digest: string, - ikm: BinaryLike | KeyObject, - salt: BinaryLike, - info: BinaryLike, - keylen: number, - ): ArrayBuffer; - interface SecureHeapUsage { - /** - * The total allocated secure heap size as specified using the `--secure-heap=n` command-line flag. - */ - total: number; - /** - * The minimum allocation from the secure heap as specified using the `--secure-heap-min` command-line flag. - */ - min: number; - /** - * The total number of bytes currently allocated from the secure heap. - */ - used: number; - /** - * The calculated ratio of `used` to `total` allocated bytes. - */ - utilization: number; - } - /** - * @since v15.6.0 - */ - function secureHeapUsed(): SecureHeapUsage; - interface RandomUUIDOptions { - /** - * By default, to improve performance, - * Node.js will pre-emptively generate and persistently cache enough - * random data to generate up to 128 random UUIDs. To generate a UUID - * without using the cache, set `disableEntropyCache` to `true`. - * - * @default `false` - */ - disableEntropyCache?: boolean | undefined; - } - type UUID = `${string}-${string}-${string}-${string}-${string}`; - /** - * Generates a random [RFC 4122](https://www.rfc-editor.org/rfc/rfc4122.txt) version 4 UUID. The UUID is generated using a - * cryptographic pseudorandom number generator. - * @since v15.6.0, v14.17.0 - */ - function randomUUID(options?: RandomUUIDOptions): UUID; - interface X509CheckOptions { - /** - * @default 'always' - */ - subject?: "always" | "default" | "never" | undefined; - /** - * @default true - */ - wildcards?: boolean | undefined; - /** - * @default true - */ - partialWildcards?: boolean | undefined; - /** - * @default false - */ - multiLabelWildcards?: boolean | undefined; - /** - * @default false - */ - singleLabelSubdomains?: boolean | undefined; - } - /** - * Encapsulates an X509 certificate and provides read-only access to - * its information. - * - * ```js - * const { X509Certificate } = await import('node:crypto'); - * - * const x509 = new X509Certificate('{... pem encoded cert ...}'); - * - * console.log(x509.subject); - * ``` - * @since v15.6.0 - */ - class X509Certificate { - /** - * Will be \`true\` if this is a Certificate Authority (CA) certificate. - * @since v15.6.0 - */ - readonly ca: boolean; - /** - * The SHA-1 fingerprint of this certificate. - * - * Because SHA-1 is cryptographically broken and because the security of SHA-1 is - * significantly worse than that of algorithms that are commonly used to sign - * certificates, consider using `x509.fingerprint256` instead. - * @since v15.6.0 - */ - readonly fingerprint: string; - /** - * The SHA-256 fingerprint of this certificate. - * @since v15.6.0 - */ - readonly fingerprint256: string; - /** - * The SHA-512 fingerprint of this certificate. - * - * Because computing the SHA-256 fingerprint is usually faster and because it is - * only half the size of the SHA-512 fingerprint, `x509.fingerprint256` may be - * a better choice. While SHA-512 presumably provides a higher level of security in - * general, the security of SHA-256 matches that of most algorithms that are - * commonly used to sign certificates. - * @since v17.2.0, v16.14.0 - */ - readonly fingerprint512: string; - /** - * The complete subject of this certificate. - * @since v15.6.0 - */ - readonly subject: string; - /** - * The subject alternative name specified for this certificate. - * - * This is a comma-separated list of subject alternative names. Each entry begins - * with a string identifying the kind of the subject alternative name followed by - * a colon and the value associated with the entry. - * - * Earlier versions of Node.js incorrectly assumed that it is safe to split this - * property at the two-character sequence `', '` (see [CVE-2021-44532](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44532)). However, - * both malicious and legitimate certificates can contain subject alternative names - * that include this sequence when represented as a string. - * - * After the prefix denoting the type of the entry, the remainder of each entry - * might be enclosed in quotes to indicate that the value is a JSON string literal. - * For backward compatibility, Node.js only uses JSON string literals within this - * property when necessary to avoid ambiguity. Third-party code should be prepared - * to handle both possible entry formats. - * @since v15.6.0 - */ - readonly subjectAltName: string | undefined; - /** - * A textual representation of the certificate's authority information access - * extension. - * - * This is a line feed separated list of access descriptions. Each line begins with - * the access method and the kind of the access location, followed by a colon and - * the value associated with the access location. - * - * After the prefix denoting the access method and the kind of the access location, - * the remainder of each line might be enclosed in quotes to indicate that the - * value is a JSON string literal. For backward compatibility, Node.js only uses - * JSON string literals within this property when necessary to avoid ambiguity. - * Third-party code should be prepared to handle both possible entry formats. - * @since v15.6.0 - */ - readonly infoAccess: string | undefined; - /** - * An array detailing the key usages for this certificate. - * @since v15.6.0 - */ - readonly keyUsage: string[]; - /** - * The issuer identification included in this certificate. - * @since v15.6.0 - */ - readonly issuer: string; - /** - * The issuer certificate or `undefined` if the issuer certificate is not - * available. - * @since v15.9.0 - */ - readonly issuerCertificate: X509Certificate | undefined; - /** - * The public key `KeyObject` for this certificate. - * @since v15.6.0 - */ - readonly publicKey: KeyObject; - /** - * A `Buffer` containing the DER encoding of this certificate. - * @since v15.6.0 - */ - readonly raw: NonSharedBuffer; - /** - * The serial number of this certificate. - * - * Serial numbers are assigned by certificate authorities and do not uniquely - * identify certificates. Consider using `x509.fingerprint256` as a unique - * identifier instead. - * @since v15.6.0 - */ - readonly serialNumber: string; - /** - * The algorithm used to sign the certificate or `undefined` if the signature algorithm is unknown by OpenSSL. - * @since v24.9.0 - */ - readonly signatureAlgorithm: string | undefined; - /** - * The OID of the algorithm used to sign the certificate. - * @since v24.9.0 - */ - readonly signatureAlgorithmOid: string; - /** - * The date/time from which this certificate is considered valid. - * @since v15.6.0 - */ - readonly validFrom: string; - /** - * The date/time from which this certificate is valid, encapsulated in a `Date` object. - * @since v22.10.0 - */ - readonly validFromDate: Date; - /** - * The date/time until which this certificate is considered valid. - * @since v15.6.0 - */ - readonly validTo: string; - /** - * The date/time until which this certificate is valid, encapsulated in a `Date` object. - * @since v22.10.0 - */ - readonly validToDate: Date; - constructor(buffer: BinaryLike); - /** - * Checks whether the certificate matches the given email address. - * - * If the `'subject'` option is undefined or set to `'default'`, the certificate - * subject is only considered if the subject alternative name extension either does - * not exist or does not contain any email addresses. - * - * If the `'subject'` option is set to `'always'` and if the subject alternative - * name extension either does not exist or does not contain a matching email - * address, the certificate subject is considered. - * - * If the `'subject'` option is set to `'never'`, the certificate subject is never - * considered, even if the certificate contains no subject alternative names. - * @since v15.6.0 - * @return Returns `email` if the certificate matches, `undefined` if it does not. - */ - checkEmail(email: string, options?: Pick): string | undefined; - /** - * Checks whether the certificate matches the given host name. - * - * If the certificate matches the given host name, the matching subject name is - * returned. The returned name might be an exact match (e.g., `foo.example.com`) - * or it might contain wildcards (e.g., `*.example.com`). Because host name - * comparisons are case-insensitive, the returned subject name might also differ - * from the given `name` in capitalization. - * - * If the `'subject'` option is undefined or set to `'default'`, the certificate - * subject is only considered if the subject alternative name extension either does - * not exist or does not contain any DNS names. This behavior is consistent with [RFC 2818](https://www.rfc-editor.org/rfc/rfc2818.txt) ("HTTP Over TLS"). - * - * If the `'subject'` option is set to `'always'` and if the subject alternative - * name extension either does not exist or does not contain a matching DNS name, - * the certificate subject is considered. - * - * If the `'subject'` option is set to `'never'`, the certificate subject is never - * considered, even if the certificate contains no subject alternative names. - * @since v15.6.0 - * @return Returns a subject name that matches `name`, or `undefined` if no subject name matches `name`. - */ - checkHost(name: string, options?: X509CheckOptions): string | undefined; - /** - * Checks whether the certificate matches the given IP address (IPv4 or IPv6). - * - * Only [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280.txt) `iPAddress` subject alternative names are considered, and they - * must match the given `ip` address exactly. Other subject alternative names as - * well as the subject field of the certificate are ignored. - * @since v15.6.0 - * @return Returns `ip` if the certificate matches, `undefined` if it does not. - */ - checkIP(ip: string): string | undefined; - /** - * Checks whether this certificate was potentially issued by the given `otherCert` - * by comparing the certificate metadata. - * - * This is useful for pruning a list of possible issuer certificates which have been - * selected using a more rudimentary filtering routine, i.e. just based on subject - * and issuer names. - * - * Finally, to verify that this certificate's signature was produced by a private key - * corresponding to `otherCert`'s public key use `x509.verify(publicKey)` - * with `otherCert`'s public key represented as a `KeyObject` - * like so - * - * ```js - * if (!x509.verify(otherCert.publicKey)) { - * throw new Error('otherCert did not issue x509'); - * } - * ``` - * @since v15.6.0 - */ - checkIssued(otherCert: X509Certificate): boolean; - /** - * Checks whether the public key for this certificate is consistent with - * the given private key. - * @since v15.6.0 - * @param privateKey A private key. - */ - checkPrivateKey(privateKey: KeyObject): boolean; - /** - * There is no standard JSON encoding for X509 certificates. The`toJSON()` method returns a string containing the PEM encoded - * certificate. - * @since v15.6.0 - */ - toJSON(): string; - /** - * Returns information about this certificate using the legacy `certificate object` encoding. - * @since v15.6.0 - */ - toLegacyObject(): PeerCertificate; - /** - * Returns the PEM-encoded certificate. - * @since v15.6.0 - */ - toString(): string; - /** - * Verifies that this certificate was signed by the given public key. - * Does not perform any other validation checks on the certificate. - * @since v15.6.0 - * @param publicKey A public key. - */ - verify(publicKey: KeyObject): boolean; - } - type LargeNumberLike = NodeJS.ArrayBufferView | SharedArrayBuffer | ArrayBuffer | bigint; - interface GeneratePrimeOptions { - add?: LargeNumberLike | undefined; - rem?: LargeNumberLike | undefined; - /** - * @default false - */ - safe?: boolean | undefined; - bigint?: boolean | undefined; - } - interface GeneratePrimeOptionsBigInt extends GeneratePrimeOptions { - bigint: true; - } - interface GeneratePrimeOptionsArrayBuffer extends GeneratePrimeOptions { - bigint?: false | undefined; - } - /** - * Generates a pseudorandom prime of `size` bits. - * - * If `options.safe` is `true`, the prime will be a safe prime -- that is, `(prime - 1) / 2` will also be a prime. - * - * The `options.add` and `options.rem` parameters can be used to enforce additional - * requirements, e.g., for Diffie-Hellman: - * - * * If `options.add` and `options.rem` are both set, the prime will satisfy the - * condition that `prime % add = rem`. - * * If only `options.add` is set and `options.safe` is not `true`, the prime will - * satisfy the condition that `prime % add = 1`. - * * If only `options.add` is set and `options.safe` is set to `true`, the prime - * will instead satisfy the condition that `prime % add = 3`. This is necessary - * because `prime % add = 1` for `options.add > 2` would contradict the condition - * enforced by `options.safe`. - * * `options.rem` is ignored if `options.add` is not given. - * - * Both `options.add` and `options.rem` must be encoded as big-endian sequences - * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or `DataView`. - * - * By default, the prime is encoded as a big-endian sequence of octets - * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a - * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. - * @since v15.8.0 - * @param size The size (in bits) of the prime to generate. - */ - function generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void; - function generatePrime( - size: number, - options: GeneratePrimeOptionsBigInt, - callback: (err: Error | null, prime: bigint) => void, - ): void; - function generatePrime( - size: number, - options: GeneratePrimeOptionsArrayBuffer, - callback: (err: Error | null, prime: ArrayBuffer) => void, - ): void; - function generatePrime( - size: number, - options: GeneratePrimeOptions, - callback: (err: Error | null, prime: ArrayBuffer | bigint) => void, - ): void; - /** - * Generates a pseudorandom prime of `size` bits. - * - * If `options.safe` is `true`, the prime will be a safe prime -- that is, `(prime - 1) / 2` will also be a prime. - * - * The `options.add` and `options.rem` parameters can be used to enforce additional - * requirements, e.g., for Diffie-Hellman: - * - * * If `options.add` and `options.rem` are both set, the prime will satisfy the - * condition that `prime % add = rem`. - * * If only `options.add` is set and `options.safe` is not `true`, the prime will - * satisfy the condition that `prime % add = 1`. - * * If only `options.add` is set and `options.safe` is set to `true`, the prime - * will instead satisfy the condition that `prime % add = 3`. This is necessary - * because `prime % add = 1` for `options.add > 2` would contradict the condition - * enforced by `options.safe`. - * * `options.rem` is ignored if `options.add` is not given. - * - * Both `options.add` and `options.rem` must be encoded as big-endian sequences - * if given as an `ArrayBuffer`, `SharedArrayBuffer`, `TypedArray`, `Buffer`, or `DataView`. - * - * By default, the prime is encoded as a big-endian sequence of octets - * in an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer). If the `bigint` option is `true`, then a - * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) is provided. - * @since v15.8.0 - * @param size The size (in bits) of the prime to generate. - */ - function generatePrimeSync(size: number): ArrayBuffer; - function generatePrimeSync(size: number, options: GeneratePrimeOptionsBigInt): bigint; - function generatePrimeSync(size: number, options: GeneratePrimeOptionsArrayBuffer): ArrayBuffer; - function generatePrimeSync(size: number, options: GeneratePrimeOptions): ArrayBuffer | bigint; - interface CheckPrimeOptions { - /** - * The number of Miller-Rabin probabilistic primality iterations to perform. - * When the value is 0 (zero), a number of checks is used that yields a false positive rate of at most `2**-64` for random input. - * Care must be used when selecting a number of checks. - * Refer to the OpenSSL documentation for the BN_is_prime_ex function nchecks options for more details. - * - * @default 0 - */ - checks?: number | undefined; - } - /** - * Checks the primality of the `candidate`. - * @since v15.8.0 - * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. - */ - function checkPrime(value: LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void; - function checkPrime( - value: LargeNumberLike, - options: CheckPrimeOptions, - callback: (err: Error | null, result: boolean) => void, - ): void; - /** - * Checks the primality of the `candidate`. - * @since v15.8.0 - * @param candidate A possible prime encoded as a sequence of big endian octets of arbitrary length. - * @return `true` if the candidate is a prime with an error probability less than `0.25 ** options.checks`. - */ - function checkPrimeSync(candidate: LargeNumberLike, options?: CheckPrimeOptions): boolean; - /** - * Load and set the `engine` for some or all OpenSSL functions (selected by flags). - * - * `engine` could be either an id or a path to the engine's shared library. - * - * The optional `flags` argument uses `ENGINE_METHOD_ALL` by default. The `flags` is a bit field taking one of or a mix of the following flags (defined in `crypto.constants`): - * - * * `crypto.constants.ENGINE_METHOD_RSA` - * * `crypto.constants.ENGINE_METHOD_DSA` - * * `crypto.constants.ENGINE_METHOD_DH` - * * `crypto.constants.ENGINE_METHOD_RAND` - * * `crypto.constants.ENGINE_METHOD_EC` - * * `crypto.constants.ENGINE_METHOD_CIPHERS` - * * `crypto.constants.ENGINE_METHOD_DIGESTS` - * * `crypto.constants.ENGINE_METHOD_PKEY_METHS` - * * `crypto.constants.ENGINE_METHOD_PKEY_ASN1_METHS` - * * `crypto.constants.ENGINE_METHOD_ALL` - * * `crypto.constants.ENGINE_METHOD_NONE` - * @since v0.11.11 - * @param flags - */ - function setEngine(engine: string, flags?: number): void; - /** - * A convenient alias for {@link webcrypto.getRandomValues}. This - * implementation is not compliant with the Web Crypto spec, to write - * web-compatible code use {@link webcrypto.getRandomValues} instead. - * @since v17.4.0 - * @return Returns `typedArray`. - */ - function getRandomValues< - T extends Exclude< - NodeJS.NonSharedTypedArray, - NodeJS.NonSharedFloat16Array | NodeJS.NonSharedFloat32Array | NodeJS.NonSharedFloat64Array - >, - >(typedArray: T): T; - type Argon2Algorithm = "argon2d" | "argon2i" | "argon2id"; - interface Argon2Parameters { - /** - * REQUIRED, this is the password for password hashing applications of Argon2. - */ - message: string | ArrayBuffer | NodeJS.ArrayBufferView; - /** - * REQUIRED, must be at least 8 bytes long. This is the salt for password hashing applications of Argon2. - */ - nonce: string | ArrayBuffer | NodeJS.ArrayBufferView; - /** - * REQUIRED, degree of parallelism determines how many computational chains (lanes) - * can be run. Must be greater than 1 and less than `2**24-1`. - */ - parallelism: number; - /** - * REQUIRED, the length of the key to generate. Must be greater than 4 and - * less than `2**32-1`. - */ - tagLength: number; - /** - * REQUIRED, memory cost in 1KiB blocks. Must be greater than - * `8 * parallelism` and less than `2**32-1`. The actual number of blocks is rounded - * down to the nearest multiple of `4 * parallelism`. - */ - memory: number; - /** - * REQUIRED, number of passes (iterations). Must be greater than 1 and less - * than `2**32-1`. - */ - passes: number; - /** - * OPTIONAL, Random additional input, - * similar to the salt, that should **NOT** be stored with the derived key. This is known as pepper in - * password hashing applications. If used, must have a length not greater than `2**32-1` bytes. - */ - secret?: string | ArrayBuffer | NodeJS.ArrayBufferView | undefined; - /** - * OPTIONAL, Additional data to - * be added to the hash, functionally equivalent to salt or secret, but meant for - * non-random data. If used, must have a length not greater than `2**32-1` bytes. - */ - associatedData?: string | ArrayBuffer | NodeJS.ArrayBufferView | undefined; - } - /** - * Provides an asynchronous [Argon2](https://www.rfc-editor.org/rfc/rfc9106.html) implementation. Argon2 is a password-based - * key derivation function that is designed to be expensive computationally and - * memory-wise in order to make brute-force attacks unrewarding. - * - * The `nonce` should be as unique as possible. It is recommended that a nonce is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `message`, `nonce`, `secret` or `associatedData`, please - * consider [caveats when using strings as inputs to cryptographic APIs](https://nodejs.org/docs/latest-v25.x/api/crypto.html#using-strings-as-inputs-to-cryptographic-apis). - * - * The `callback` function is called with two arguments: `err` and `derivedKey`. - * `err` is an exception object when key derivation fails, otherwise `err` is - * `null`. `derivedKey` is passed to the callback as a `Buffer`. - * - * An exception is thrown when any of the input arguments specify invalid values - * or types. - * - * ```js - * const { argon2, randomBytes } = await import('node:crypto'); - * - * const parameters = { - * message: 'password', - * nonce: randomBytes(16), - * parallelism: 4, - * tagLength: 64, - * memory: 65536, - * passes: 3, - * }; - * - * argon2('argon2id', parameters, (err, derivedKey) => { - * if (err) throw err; - * console.log(derivedKey.toString('hex')); // 'af91dad...9520f15' - * }); - * ``` - * @since v24.7.0 - * @param algorithm Variant of Argon2, one of `"argon2d"`, `"argon2i"` or `"argon2id"`. - * @experimental - */ - function argon2( - algorithm: Argon2Algorithm, - parameters: Argon2Parameters, - callback: (err: Error | null, derivedKey: NonSharedBuffer) => void, - ): void; - /** - * Provides a synchronous [Argon2][] implementation. Argon2 is a password-based - * key derivation function that is designed to be expensive computationally and - * memory-wise in order to make brute-force attacks unrewarding. - * - * The `nonce` should be as unique as possible. It is recommended that a nonce is - * random and at least 16 bytes long. See [NIST SP 800-132](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf) for details. - * - * When passing strings for `message`, `nonce`, `secret` or `associatedData`, please - * consider [caveats when using strings as inputs to cryptographic APIs](https://nodejs.org/docs/latest-v25.x/api/crypto.html#using-strings-as-inputs-to-cryptographic-apis). - * - * An exception is thrown when key derivation fails, otherwise the derived key is - * returned as a `Buffer`. - * - * An exception is thrown when any of the input arguments specify invalid values - * or types. - * - * ```js - * const { argon2Sync, randomBytes } = await import('node:crypto'); - * - * const parameters = { - * message: 'password', - * nonce: randomBytes(16), - * parallelism: 4, - * tagLength: 64, - * memory: 65536, - * passes: 3, - * }; - * - * const derivedKey = argon2Sync('argon2id', parameters); - * console.log(derivedKey.toString('hex')); // 'af91dad...9520f15' - * ``` - * @since v24.7.0 - * @experimental - */ - function argon2Sync(algorithm: Argon2Algorithm, parameters: Argon2Parameters): NonSharedBuffer; - /** - * A convenient alias for `crypto.webcrypto.subtle`. - * @since v17.4.0 - */ - const subtle: webcrypto.SubtleCrypto; - /** - * An implementation of the Web Crypto API standard. - * - * See the {@link https://nodejs.org/docs/latest/api/webcrypto.html Web Crypto API documentation} for details. - * @since v15.0.0 - */ - const webcrypto: webcrypto.Crypto; - namespace webcrypto { - type AlgorithmIdentifier = Algorithm | string; - type BigInteger = NodeJS.NonSharedUint8Array; - type KeyFormat = "jwk" | "pkcs8" | "raw" | "raw-public" | "raw-secret" | "raw-seed" | "spki"; - type KeyType = "private" | "public" | "secret"; - type KeyUsage = - | "decapsulateBits" - | "decapsulateKey" - | "decrypt" - | "deriveBits" - | "deriveKey" - | "encapsulateBits" - | "encapsulateKey" - | "encrypt" - | "sign" - | "unwrapKey" - | "verify" - | "wrapKey"; - type HashAlgorithmIdentifier = AlgorithmIdentifier; - type NamedCurve = string; - interface AeadParams extends Algorithm { - additionalData?: NodeJS.BufferSource; - iv: NodeJS.BufferSource; - tagLength: number; - } - interface AesCbcParams extends Algorithm { - iv: NodeJS.BufferSource; - } - interface AesCtrParams extends Algorithm { - counter: NodeJS.BufferSource; - length: number; - } - interface AesDerivedKeyParams extends Algorithm { - length: number; - } - interface AesKeyAlgorithm extends KeyAlgorithm { - length: number; - } - interface AesKeyGenParams extends Algorithm { - length: number; - } - interface Algorithm { - name: string; - } - interface Argon2Params extends Algorithm { - associatedData?: NodeJS.BufferSource; - memory: number; - nonce: NodeJS.BufferSource; - parallelism: number; - passes: number; - secretValue?: NodeJS.BufferSource; - version?: number; - } - interface CShakeParams extends Algorithm { - customization?: NodeJS.BufferSource; - functionName?: NodeJS.BufferSource; - length: number; - } - interface ContextParams extends Algorithm { - context?: NodeJS.BufferSource; - } - interface EcKeyAlgorithm extends KeyAlgorithm { - namedCurve: NamedCurve; - } - interface EcKeyGenParams extends Algorithm { - namedCurve: NamedCurve; - } - interface EcKeyImportParams extends Algorithm { - namedCurve: NamedCurve; - } - interface EcdhKeyDeriveParams extends Algorithm { - public: CryptoKey; - } - interface EcdsaParams extends Algorithm { - hash: HashAlgorithmIdentifier; - } - interface HkdfParams extends Algorithm { - hash: HashAlgorithmIdentifier; - info: NodeJS.BufferSource; - salt: NodeJS.BufferSource; - } - interface HmacImportParams extends Algorithm { - hash: HashAlgorithmIdentifier; - length?: number; - } - interface HmacKeyAlgorithm extends KeyAlgorithm { - hash: KeyAlgorithm; - length: number; - } - interface HmacKeyGenParams extends Algorithm { - hash: HashAlgorithmIdentifier; - length?: number; - } - interface JsonWebKey { - alg?: string; - crv?: string; - d?: string; - dp?: string; - dq?: string; - e?: string; - ext?: boolean; - k?: string; - key_ops?: string[]; - kty?: string; - n?: string; - oth?: RsaOtherPrimesInfo[]; - p?: string; - q?: string; - qi?: string; - use?: string; - x?: string; - y?: string; - } - interface KeyAlgorithm { - name: string; - } - interface KmacImportParams extends Algorithm { - length?: number; - } - interface KmacKeyAlgorithm extends KeyAlgorithm { - length: number; - } - interface KmacKeyGenParams extends Algorithm { - length?: number; - } - interface KmacParams extends Algorithm { - customization?: NodeJS.BufferSource; - length: number; - } - interface Pbkdf2Params extends Algorithm { - hash: HashAlgorithmIdentifier; - iterations: number; - salt: NodeJS.BufferSource; - } - interface RsaHashedImportParams extends Algorithm { - hash: HashAlgorithmIdentifier; - } - interface RsaHashedKeyAlgorithm extends RsaKeyAlgorithm { - hash: KeyAlgorithm; - } - interface RsaHashedKeyGenParams extends RsaKeyGenParams { - hash: HashAlgorithmIdentifier; - } - interface RsaKeyAlgorithm extends KeyAlgorithm { - modulusLength: number; - publicExponent: BigInteger; - } - interface RsaKeyGenParams extends Algorithm { - modulusLength: number; - publicExponent: BigInteger; - } - interface RsaOaepParams extends Algorithm { - label?: NodeJS.BufferSource; - } - interface RsaOtherPrimesInfo { - d?: string; - r?: string; - t?: string; - } - interface RsaPssParams extends Algorithm { - saltLength: number; - } - interface Crypto { - readonly subtle: SubtleCrypto; - getRandomValues< - T extends Exclude< - NodeJS.NonSharedTypedArray, - NodeJS.NonSharedFloat16Array | NodeJS.NonSharedFloat32Array | NodeJS.NonSharedFloat64Array - >, - >( - typedArray: T, - ): T; - randomUUID(): UUID; - } - interface CryptoKey { - readonly algorithm: KeyAlgorithm; - readonly extractable: boolean; - readonly type: KeyType; - readonly usages: KeyUsage[]; - } - interface CryptoKeyPair { - privateKey: CryptoKey; - publicKey: CryptoKey; - } - interface EncapsulatedBits { - sharedKey: ArrayBuffer; - ciphertext: ArrayBuffer; - } - interface EncapsulatedKey { - sharedKey: CryptoKey; - ciphertext: ArrayBuffer; - } - interface SubtleCrypto { - decapsulateBits( - decapsulationAlgorithm: AlgorithmIdentifier, - decapsulationKey: CryptoKey, - ciphertext: NodeJS.BufferSource, - ): Promise; - decapsulateKey( - decapsulationAlgorithm: AlgorithmIdentifier, - decapsulationKey: CryptoKey, - ciphertext: NodeJS.BufferSource, - sharedKeyAlgorithm: AlgorithmIdentifier | HmacImportParams | AesDerivedKeyParams | KmacImportParams, - extractable: boolean, - usages: KeyUsage[], - ): Promise; - decrypt( - algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams, - key: CryptoKey, - data: NodeJS.BufferSource, - ): Promise; - deriveBits( - algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params | Argon2Params, - baseKey: CryptoKey, - length?: number | null, - ): Promise; - deriveKey( - algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params | Argon2Params, - baseKey: CryptoKey, - derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | KmacImportParams, - extractable: boolean, - keyUsages: readonly KeyUsage[], - ): Promise; - digest(algorithm: AlgorithmIdentifier | CShakeParams, data: NodeJS.BufferSource): Promise; - encapsulateBits( - encapsulationAlgorithm: AlgorithmIdentifier, - encapsulationKey: CryptoKey, - ): Promise; - encapsulateKey( - encapsulationAlgorithm: AlgorithmIdentifier, - encapsulationKey: CryptoKey, - sharedKeyAlgorithm: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | KmacImportParams, - extractable: boolean, - usages: KeyUsage[], - ): Promise; - encrypt( - algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams, - key: CryptoKey, - data: NodeJS.BufferSource, - ): Promise; - exportKey(format: "jwk", key: CryptoKey): Promise; - exportKey(format: Exclude, key: CryptoKey): Promise; - exportKey(format: KeyFormat, key: CryptoKey): Promise; - generateKey( - algorithm: RsaHashedKeyGenParams | EcKeyGenParams, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - generateKey( - algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params | KmacKeyGenParams, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - generateKey( - algorithm: AlgorithmIdentifier, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - getPublicKey(key: CryptoKey, keyUsages: KeyUsage[]): Promise; - importKey( - format: "jwk", - keyData: JsonWebKey, - algorithm: - | AlgorithmIdentifier - | RsaHashedImportParams - | EcKeyImportParams - | HmacImportParams - | AesKeyAlgorithm - | KmacImportParams, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - importKey( - format: Exclude, - keyData: NodeJS.BufferSource, - algorithm: - | AlgorithmIdentifier - | RsaHashedImportParams - | EcKeyImportParams - | HmacImportParams - | AesKeyAlgorithm - | KmacImportParams, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - sign( - algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | ContextParams | KmacParams, - key: CryptoKey, - data: NodeJS.BufferSource, - ): Promise; - unwrapKey( - format: KeyFormat, - wrappedKey: NodeJS.BufferSource, - unwrappingKey: CryptoKey, - unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams, - unwrappedKeyAlgorithm: - | AlgorithmIdentifier - | RsaHashedImportParams - | EcKeyImportParams - | HmacImportParams - | AesKeyAlgorithm - | KmacImportParams, - extractable: boolean, - keyUsages: KeyUsage[], - ): Promise; - verify( - algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | ContextParams | KmacParams, - key: CryptoKey, - signature: NodeJS.BufferSource, - data: NodeJS.BufferSource, - ): Promise; - wrapKey( - format: KeyFormat, - key: CryptoKey, - wrappingKey: CryptoKey, - wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AeadParams, - ): Promise; - } - } -} -declare module "crypto" { - export * from "node:crypto"; -} diff --git a/skills/flight-finder/node_modules/@types/node/dgram.d.ts b/skills/flight-finder/node_modules/@types/node/dgram.d.ts deleted file mode 100644 index 3672e08..0000000 --- a/skills/flight-finder/node_modules/@types/node/dgram.d.ts +++ /dev/null @@ -1,564 +0,0 @@ -/** - * The `node:dgram` module provides an implementation of UDP datagram sockets. - * - * ```js - * import dgram from 'node:dgram'; - * - * const server = dgram.createSocket('udp4'); - * - * server.on('error', (err) => { - * console.error(`server error:\n${err.stack}`); - * server.close(); - * }); - * - * server.on('message', (msg, rinfo) => { - * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); - * }); - * - * server.on('listening', () => { - * const address = server.address(); - * console.log(`server listening ${address.address}:${address.port}`); - * }); - * - * server.bind(41234); - * // Prints: server listening 0.0.0.0:41234 - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/dgram.js) - */ -declare module "node:dgram" { - import { NonSharedBuffer } from "node:buffer"; - import * as dns from "node:dns"; - import { Abortable, EventEmitter, InternalEventEmitter } from "node:events"; - import { AddressInfo, BlockList } from "node:net"; - interface RemoteInfo { - address: string; - family: "IPv4" | "IPv6"; - port: number; - size: number; - } - interface BindOptions { - port?: number | undefined; - address?: string | undefined; - exclusive?: boolean | undefined; - fd?: number | undefined; - } - type SocketType = "udp4" | "udp6"; - interface SocketOptions extends Abortable { - type: SocketType; - reuseAddr?: boolean | undefined; - reusePort?: boolean | undefined; - /** - * @default false - */ - ipv6Only?: boolean | undefined; - recvBufferSize?: number | undefined; - sendBufferSize?: number | undefined; - lookup?: - | (( - hostname: string, - options: dns.LookupOneOptions, - callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, - ) => void) - | undefined; - receiveBlockList?: BlockList | undefined; - sendBlockList?: BlockList | undefined; - } - /** - * Creates a `dgram.Socket` object. Once the socket is created, calling `socket.bind()` will instruct the socket to begin listening for datagram - * messages. When `address` and `port` are not passed to `socket.bind()` the - * method will bind the socket to the "all interfaces" address on a random port - * (it does the right thing for both `udp4` and `udp6` sockets). The bound address - * and port can be retrieved using `socket.address().address` and `socket.address().port`. - * - * If the `signal` option is enabled, calling `.abort()` on the corresponding `AbortController` is similar to calling `.close()` on the socket: - * - * ```js - * const controller = new AbortController(); - * const { signal } = controller; - * const server = dgram.createSocket({ type: 'udp4', signal }); - * server.on('message', (msg, rinfo) => { - * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); - * }); - * // Later, when you want to close the server. - * controller.abort(); - * ``` - * @since v0.11.13 - * @param options Available options are: - * @param callback Attached as a listener for `'message'` events. Optional. - */ - function createSocket(type: SocketType, callback?: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): Socket; - function createSocket(options: SocketOptions, callback?: (msg: NonSharedBuffer, rinfo: RemoteInfo) => void): Socket; - interface SocketEventMap { - "close": []; - "connect": []; - "error": [err: Error]; - "listening": []; - "message": [msg: NonSharedBuffer, rinfo: RemoteInfo]; - } - /** - * Encapsulates the datagram functionality. - * - * New instances of `dgram.Socket` are created using {@link createSocket}. - * The `new` keyword is not to be used to create `dgram.Socket` instances. - * @since v0.1.99 - */ - class Socket implements EventEmitter { - /** - * Tells the kernel to join a multicast group at the given `multicastAddress` and `multicastInterface` using the `IP_ADD_MEMBERSHIP` socket option. If the `multicastInterface` argument is not - * specified, the operating system will choose - * one interface and will add membership to it. To add membership to every - * available interface, call `addMembership` multiple times, once per interface. - * - * When called on an unbound socket, this method will implicitly bind to a random - * port, listening on all interfaces. - * - * When sharing a UDP socket across multiple `cluster` workers, the`socket.addMembership()` function must be called only once or an`EADDRINUSE` error will occur: - * - * ```js - * import cluster from 'node:cluster'; - * import dgram from 'node:dgram'; - * - * if (cluster.isPrimary) { - * cluster.fork(); // Works ok. - * cluster.fork(); // Fails with EADDRINUSE. - * } else { - * const s = dgram.createSocket('udp4'); - * s.bind(1234, () => { - * s.addMembership('224.0.0.114'); - * }); - * } - * ``` - * @since v0.6.9 - */ - addMembership(multicastAddress: string, multicastInterface?: string): void; - /** - * Returns an object containing the address information for a socket. - * For UDP sockets, this object will contain `address`, `family`, and `port` properties. - * - * This method throws `EBADF` if called on an unbound socket. - * @since v0.1.99 - */ - address(): AddressInfo; - /** - * For UDP sockets, causes the `dgram.Socket` to listen for datagram - * messages on a named `port` and optional `address`. If `port` is not - * specified or is `0`, the operating system will attempt to bind to a - * random port. If `address` is not specified, the operating system will - * attempt to listen on all addresses. Once binding is complete, a `'listening'` event is emitted and the optional `callback` function is - * called. - * - * Specifying both a `'listening'` event listener and passing a `callback` to the `socket.bind()` method is not harmful but not very - * useful. - * - * A bound datagram socket keeps the Node.js process running to receive - * datagram messages. - * - * If binding fails, an `'error'` event is generated. In rare case (e.g. - * attempting to bind with a closed socket), an `Error` may be thrown. - * - * Example of a UDP server listening on port 41234: - * - * ```js - * import dgram from 'node:dgram'; - * - * const server = dgram.createSocket('udp4'); - * - * server.on('error', (err) => { - * console.error(`server error:\n${err.stack}`); - * server.close(); - * }); - * - * server.on('message', (msg, rinfo) => { - * console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); - * }); - * - * server.on('listening', () => { - * const address = server.address(); - * console.log(`server listening ${address.address}:${address.port}`); - * }); - * - * server.bind(41234); - * // Prints: server listening 0.0.0.0:41234 - * ``` - * @since v0.1.99 - * @param callback with no parameters. Called when binding is complete. - */ - bind(port?: number, address?: string, callback?: () => void): this; - bind(port?: number, callback?: () => void): this; - bind(callback?: () => void): this; - bind(options: BindOptions, callback?: () => void): this; - /** - * Close the underlying socket and stop listening for data on it. If a callback is - * provided, it is added as a listener for the `'close'` event. - * @since v0.1.99 - * @param callback Called when the socket has been closed. - */ - close(callback?: () => void): this; - /** - * Associates the `dgram.Socket` to a remote address and port. Every - * message sent by this handle is automatically sent to that destination. Also, - * the socket will only receive messages from that remote peer. - * Trying to call `connect()` on an already connected socket will result - * in an `ERR_SOCKET_DGRAM_IS_CONNECTED` exception. If `address` is not - * provided, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) - * will be used by default. Once the connection is complete, a `'connect'` event - * is emitted and the optional `callback` function is called. In case of failure, - * the `callback` is called or, failing this, an `'error'` event is emitted. - * @since v12.0.0 - * @param callback Called when the connection is completed or on error. - */ - connect(port: number, address?: string, callback?: () => void): void; - connect(port: number, callback: () => void): void; - /** - * A synchronous function that disassociates a connected `dgram.Socket` from - * its remote address. Trying to call `disconnect()` on an unbound or already - * disconnected socket will result in an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception. - * @since v12.0.0 - */ - disconnect(): void; - /** - * Instructs the kernel to leave a multicast group at `multicastAddress` using the `IP_DROP_MEMBERSHIP` socket option. This method is automatically called by the - * kernel when the socket is closed or the process terminates, so most apps will - * never have reason to call this. - * - * If `multicastInterface` is not specified, the operating system will attempt to - * drop membership on all valid interfaces. - * @since v0.6.9 - */ - dropMembership(multicastAddress: string, multicastInterface?: string): void; - /** - * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. - * @since v8.7.0 - * @return the `SO_RCVBUF` socket receive buffer size in bytes. - */ - getRecvBufferSize(): number; - /** - * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. - * @since v8.7.0 - * @return the `SO_SNDBUF` socket send buffer size in bytes. - */ - getSendBufferSize(): number; - /** - * @since v18.8.0, v16.19.0 - * @return Number of bytes queued for sending. - */ - getSendQueueSize(): number; - /** - * @since v18.8.0, v16.19.0 - * @return Number of send requests currently in the queue awaiting to be processed. - */ - getSendQueueCount(): number; - /** - * By default, binding a socket will cause it to block the Node.js process from - * exiting as long as the socket is open. The `socket.unref()` method can be used - * to exclude the socket from the reference counting that keeps the Node.js - * process active. The `socket.ref()` method adds the socket back to the reference - * counting and restores the default behavior. - * - * Calling `socket.ref()` multiples times will have no additional effect. - * - * The `socket.ref()` method returns a reference to the socket so calls can be - * chained. - * @since v0.9.1 - */ - ref(): this; - /** - * Returns an object containing the `address`, `family`, and `port` of the remote - * endpoint. This method throws an `ERR_SOCKET_DGRAM_NOT_CONNECTED` exception - * if the socket is not connected. - * @since v12.0.0 - */ - remoteAddress(): AddressInfo; - /** - * Broadcasts a datagram on the socket. - * For connectionless sockets, the destination `port` and `address` must be - * specified. Connected sockets, on the other hand, will use their associated - * remote endpoint, so the `port` and `address` arguments must not be set. - * - * The `msg` argument contains the message to be sent. - * Depending on its type, different behavior can apply. If `msg` is a `Buffer`, - * any `TypedArray` or a `DataView`, - * the `offset` and `length` specify the offset within the `Buffer` where the - * message begins and the number of bytes in the message, respectively. - * If `msg` is a `String`, then it is automatically converted to a `Buffer` with `'utf8'` encoding. With messages that - * contain multi-byte characters, `offset` and `length` will be calculated with - * respect to `byte length` and not the character position. - * If `msg` is an array, `offset` and `length` must not be specified. - * - * The `address` argument is a string. If the value of `address` is a host name, - * DNS will be used to resolve the address of the host. If `address` is not - * provided or otherwise nullish, `'127.0.0.1'` (for `udp4` sockets) or `'::1'` (for `udp6` sockets) will be used by default. - * - * If the socket has not been previously bound with a call to `bind`, the socket - * is assigned a random port number and is bound to the "all interfaces" address - * (`'0.0.0.0'` for `udp4` sockets, `'::0'` for `udp6` sockets.) - * - * An optional `callback` function may be specified to as a way of reporting - * DNS errors or for determining when it is safe to reuse the `buf` object. - * DNS lookups delay the time to send for at least one tick of the - * Node.js event loop. - * - * The only way to know for sure that the datagram has been sent is by using a `callback`. If an error occurs and a `callback` is given, the error will be - * passed as the first argument to the `callback`. If a `callback` is not given, - * the error is emitted as an `'error'` event on the `socket` object. - * - * Offset and length are optional but both _must_ be set if either are used. - * They are supported only when the first argument is a `Buffer`, a `TypedArray`, - * or a `DataView`. - * - * This method throws `ERR_SOCKET_BAD_PORT` if called on an unbound socket. - * - * Example of sending a UDP packet to a port on `localhost`; - * - * ```js - * import dgram from 'node:dgram'; - * import { Buffer } from 'node:buffer'; - * - * const message = Buffer.from('Some bytes'); - * const client = dgram.createSocket('udp4'); - * client.send(message, 41234, 'localhost', (err) => { - * client.close(); - * }); - * ``` - * - * Example of sending a UDP packet composed of multiple buffers to a port on`127.0.0.1`; - * - * ```js - * import dgram from 'node:dgram'; - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('Some '); - * const buf2 = Buffer.from('bytes'); - * const client = dgram.createSocket('udp4'); - * client.send([buf1, buf2], 41234, (err) => { - * client.close(); - * }); - * ``` - * - * Sending multiple buffers might be faster or slower depending on the - * application and operating system. Run benchmarks to - * determine the optimal strategy on a case-by-case basis. Generally speaking, - * however, sending multiple buffers is faster. - * - * Example of sending a UDP packet using a socket connected to a port on `localhost`: - * - * ```js - * import dgram from 'node:dgram'; - * import { Buffer } from 'node:buffer'; - * - * const message = Buffer.from('Some bytes'); - * const client = dgram.createSocket('udp4'); - * client.connect(41234, 'localhost', (err) => { - * client.send(message, (err) => { - * client.close(); - * }); - * }); - * ``` - * @since v0.1.99 - * @param msg Message to be sent. - * @param offset Offset in the buffer where the message starts. - * @param length Number of bytes in the message. - * @param port Destination port. - * @param address Destination host name or IP address. - * @param callback Called when the message has been sent. - */ - send( - msg: string | NodeJS.ArrayBufferView | readonly any[], - port?: number, - address?: string, - callback?: (error: Error | null, bytes: number) => void, - ): void; - send( - msg: string | NodeJS.ArrayBufferView | readonly any[], - port?: number, - callback?: (error: Error | null, bytes: number) => void, - ): void; - send( - msg: string | NodeJS.ArrayBufferView | readonly any[], - callback?: (error: Error | null, bytes: number) => void, - ): void; - send( - msg: string | NodeJS.ArrayBufferView, - offset: number, - length: number, - port?: number, - address?: string, - callback?: (error: Error | null, bytes: number) => void, - ): void; - send( - msg: string | NodeJS.ArrayBufferView, - offset: number, - length: number, - port?: number, - callback?: (error: Error | null, bytes: number) => void, - ): void; - send( - msg: string | NodeJS.ArrayBufferView, - offset: number, - length: number, - callback?: (error: Error | null, bytes: number) => void, - ): void; - /** - * Sets or clears the `SO_BROADCAST` socket option. When set to `true`, UDP - * packets may be sent to a local interface's broadcast address. - * - * This method throws `EBADF` if called on an unbound socket. - * @since v0.6.9 - */ - setBroadcast(flag: boolean): void; - /** - * _All references to scope in this section are referring to [IPv6 Zone Indices](https://en.wikipedia.org/wiki/IPv6_address#Scoped_literal_IPv6_addresses), which are defined by [RFC - * 4007](https://tools.ietf.org/html/rfc4007). In string form, an IP_ - * _with a scope index is written as `'IP%scope'` where scope is an interface name_ - * _or interface number._ - * - * Sets the default outgoing multicast interface of the socket to a chosen - * interface or back to system interface selection. The `multicastInterface` must - * be a valid string representation of an IP from the socket's family. - * - * For IPv4 sockets, this should be the IP configured for the desired physical - * interface. All packets sent to multicast on the socket will be sent on the - * interface determined by the most recent successful use of this call. - * - * For IPv6 sockets, `multicastInterface` should include a scope to indicate the - * interface as in the examples that follow. In IPv6, individual `send` calls can - * also use explicit scope in addresses, so only packets sent to a multicast - * address without specifying an explicit scope are affected by the most recent - * successful use of this call. - * - * This method throws `EBADF` if called on an unbound socket. - * - * #### Example: IPv6 outgoing multicast interface - * - * On most systems, where scope format uses the interface name: - * - * ```js - * const socket = dgram.createSocket('udp6'); - * - * socket.bind(1234, () => { - * socket.setMulticastInterface('::%eth1'); - * }); - * ``` - * - * On Windows, where scope format uses an interface number: - * - * ```js - * const socket = dgram.createSocket('udp6'); - * - * socket.bind(1234, () => { - * socket.setMulticastInterface('::%2'); - * }); - * ``` - * - * #### Example: IPv4 outgoing multicast interface - * - * All systems use an IP of the host on the desired physical interface: - * - * ```js - * const socket = dgram.createSocket('udp4'); - * - * socket.bind(1234, () => { - * socket.setMulticastInterface('10.0.0.2'); - * }); - * ``` - * @since v8.6.0 - */ - setMulticastInterface(multicastInterface: string): void; - /** - * Sets or clears the `IP_MULTICAST_LOOP` socket option. When set to `true`, - * multicast packets will also be received on the local interface. - * - * This method throws `EBADF` if called on an unbound socket. - * @since v0.3.8 - */ - setMulticastLoopback(flag: boolean): boolean; - /** - * Sets the `IP_MULTICAST_TTL` socket option. While TTL generally stands for - * "Time to Live", in this context it specifies the number of IP hops that a - * packet is allowed to travel through, specifically for multicast traffic. Each - * router or gateway that forwards a packet decrements the TTL. If the TTL is - * decremented to 0 by a router, it will not be forwarded. - * - * The `ttl` argument may be between 0 and 255\. The default on most systems is `1`. - * - * This method throws `EBADF` if called on an unbound socket. - * @since v0.3.8 - */ - setMulticastTTL(ttl: number): number; - /** - * Sets the `SO_RCVBUF` socket option. Sets the maximum socket receive buffer - * in bytes. - * - * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. - * @since v8.7.0 - */ - setRecvBufferSize(size: number): void; - /** - * Sets the `SO_SNDBUF` socket option. Sets the maximum socket send buffer - * in bytes. - * - * This method throws `ERR_SOCKET_BUFFER_SIZE` if called on an unbound socket. - * @since v8.7.0 - */ - setSendBufferSize(size: number): void; - /** - * Sets the `IP_TTL` socket option. While TTL generally stands for "Time to Live", - * in this context it specifies the number of IP hops that a packet is allowed to - * travel through. Each router or gateway that forwards a packet decrements the - * TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. - * Changing TTL values is typically done for network probes or when multicasting. - * - * The `ttl` argument may be between 1 and 255\. The default on most systems - * is 64. - * - * This method throws `EBADF` if called on an unbound socket. - * @since v0.1.101 - */ - setTTL(ttl: number): number; - /** - * By default, binding a socket will cause it to block the Node.js process from - * exiting as long as the socket is open. The `socket.unref()` method can be used - * to exclude the socket from the reference counting that keeps the Node.js - * process active, allowing the process to exit even if the socket is still - * listening. - * - * Calling `socket.unref()` multiple times will have no additional effect. - * - * The `socket.unref()` method returns a reference to the socket so calls can be - * chained. - * @since v0.9.1 - */ - unref(): this; - /** - * Tells the kernel to join a source-specific multicast channel at the given `sourceAddress` and `groupAddress`, using the `multicastInterface` with the `IP_ADD_SOURCE_MEMBERSHIP` socket - * option. If the `multicastInterface` argument - * is not specified, the operating system will choose one interface and will add - * membership to it. To add membership to every available interface, call `socket.addSourceSpecificMembership()` multiple times, once per interface. - * - * When called on an unbound socket, this method will implicitly bind to a random - * port, listening on all interfaces. - * @since v13.1.0, v12.16.0 - */ - addSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; - /** - * Instructs the kernel to leave a source-specific multicast channel at the given `sourceAddress` and `groupAddress` using the `IP_DROP_SOURCE_MEMBERSHIP` socket option. This method is - * automatically called by the kernel when the - * socket is closed or the process terminates, so most apps will never have - * reason to call this. - * - * If `multicastInterface` is not specified, the operating system will attempt to - * drop membership on all valid interfaces. - * @since v13.1.0, v12.16.0 - */ - dropSourceSpecificMembership(sourceAddress: string, groupAddress: string, multicastInterface?: string): void; - /** - * Calls `socket.close()` and returns a promise that fulfills when the socket has closed. - * @since v20.5.0 - */ - [Symbol.asyncDispose](): Promise; - } - interface Socket extends InternalEventEmitter {} -} -declare module "dgram" { - export * from "node:dgram"; -} diff --git a/skills/flight-finder/node_modules/@types/node/diagnostics_channel.d.ts b/skills/flight-finder/node_modules/@types/node/diagnostics_channel.d.ts deleted file mode 100644 index 206592b..0000000 --- a/skills/flight-finder/node_modules/@types/node/diagnostics_channel.d.ts +++ /dev/null @@ -1,576 +0,0 @@ -/** - * The `node:diagnostics_channel` module provides an API to create named channels - * to report arbitrary message data for diagnostics purposes. - * - * It can be accessed using: - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * ``` - * - * It is intended that a module writer wanting to report diagnostics messages - * will create one or many top-level channels to report messages through. - * Channels may also be acquired at runtime but it is not encouraged - * due to the additional overhead of doing so. Channels may be exported for - * convenience, but as long as the name is known it can be acquired anywhere. - * - * If you intend for your module to produce diagnostics data for others to - * consume it is recommended that you include documentation of what named - * channels are used along with the shape of the message data. Channel names - * should generally include the module name to avoid collisions with data from - * other modules. - * @since v15.1.0, v14.17.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/diagnostics_channel.js) - */ -declare module "node:diagnostics_channel" { - import { AsyncLocalStorage } from "node:async_hooks"; - /** - * Check if there are active subscribers to the named channel. This is helpful if - * the message you want to send might be expensive to prepare. - * - * This API is optional but helpful when trying to publish messages from very - * performance-sensitive code. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * if (diagnostics_channel.hasSubscribers('my-channel')) { - * // There are subscribers, prepare and publish message - * } - * ``` - * @since v15.1.0, v14.17.0 - * @param name The channel name - * @return If there are active subscribers - */ - function hasSubscribers(name: string | symbol): boolean; - /** - * This is the primary entry-point for anyone wanting to publish to a named - * channel. It produces a channel object which is optimized to reduce overhead at - * publish time as much as possible. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channel = diagnostics_channel.channel('my-channel'); - * ``` - * @since v15.1.0, v14.17.0 - * @param name The channel name - * @return The named channel object - */ - function channel(name: string | symbol): Channel; - type ChannelListener = (message: unknown, name: string | symbol) => void; - /** - * Register a message handler to subscribe to this channel. This message handler - * will be run synchronously whenever a message is published to the channel. Any - * errors thrown in the message handler will trigger an `'uncaughtException'`. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * diagnostics_channel.subscribe('my-channel', (message, name) => { - * // Received data - * }); - * ``` - * @since v18.7.0, v16.17.0 - * @param name The channel name - * @param onMessage The handler to receive channel messages - */ - function subscribe(name: string | symbol, onMessage: ChannelListener): void; - /** - * Remove a message handler previously registered to this channel with {@link subscribe}. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * function onMessage(message, name) { - * // Received data - * } - * - * diagnostics_channel.subscribe('my-channel', onMessage); - * - * diagnostics_channel.unsubscribe('my-channel', onMessage); - * ``` - * @since v18.7.0, v16.17.0 - * @param name The channel name - * @param onMessage The previous subscribed handler to remove - * @return `true` if the handler was found, `false` otherwise. - */ - function unsubscribe(name: string | symbol, onMessage: ChannelListener): boolean; - /** - * Creates a `TracingChannel` wrapper for the given `TracingChannel Channels`. If a name is given, the corresponding tracing - * channels will be created in the form of `tracing:${name}:${eventType}` where `eventType` corresponds to the types of `TracingChannel Channels`. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channelsByName = diagnostics_channel.tracingChannel('my-channel'); - * - * // or... - * - * const channelsByCollection = diagnostics_channel.tracingChannel({ - * start: diagnostics_channel.channel('tracing:my-channel:start'), - * end: diagnostics_channel.channel('tracing:my-channel:end'), - * asyncStart: diagnostics_channel.channel('tracing:my-channel:asyncStart'), - * asyncEnd: diagnostics_channel.channel('tracing:my-channel:asyncEnd'), - * error: diagnostics_channel.channel('tracing:my-channel:error'), - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param nameOrChannels Channel name or object containing all the `TracingChannel Channels` - * @return Collection of channels to trace with - */ - function tracingChannel< - StoreType = unknown, - ContextType extends object = StoreType extends object ? StoreType : object, - >( - nameOrChannels: string | TracingChannelCollection, - ): TracingChannel; - /** - * The class `Channel` represents an individual named channel within the data - * pipeline. It is used to track subscribers and to publish messages when there - * are subscribers present. It exists as a separate object to avoid channel - * lookups at publish time, enabling very fast publish speeds and allowing - * for heavy use while incurring very minimal cost. Channels are created with {@link channel}, constructing a channel directly - * with `new Channel(name)` is not supported. - * @since v15.1.0, v14.17.0 - */ - class Channel { - readonly name: string | symbol; - /** - * Check if there are active subscribers to this channel. This is helpful if - * the message you want to send might be expensive to prepare. - * - * This API is optional but helpful when trying to publish messages from very - * performance-sensitive code. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * if (channel.hasSubscribers) { - * // There are subscribers, prepare and publish message - * } - * ``` - * @since v15.1.0, v14.17.0 - */ - readonly hasSubscribers: boolean; - private constructor(name: string | symbol); - /** - * Publish a message to any subscribers to the channel. This will trigger - * message handlers synchronously so they will execute within the same context. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * channel.publish({ - * some: 'message', - * }); - * ``` - * @since v15.1.0, v14.17.0 - * @param message The message to send to the channel subscribers - */ - publish(message: unknown): void; - /** - * Register a message handler to subscribe to this channel. This message handler - * will be run synchronously whenever a message is published to the channel. Any - * errors thrown in the message handler will trigger an `'uncaughtException'`. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * channel.subscribe((message, name) => { - * // Received data - * }); - * ``` - * @since v15.1.0, v14.17.0 - * @param onMessage The handler to receive channel messages - */ - subscribe(onMessage: ChannelListener): void; - /** - * Remove a message handler previously registered to this channel with `channel.subscribe(onMessage)`. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * function onMessage(message, name) { - * // Received data - * } - * - * channel.subscribe(onMessage); - * - * channel.unsubscribe(onMessage); - * ``` - * @since v15.1.0, v14.17.0 - * @param onMessage The previous subscribed handler to remove - * @return `true` if the handler was found, `false` otherwise. - */ - unsubscribe(onMessage: ChannelListener): void; - /** - * When `channel.runStores(context, ...)` is called, the given context data - * will be applied to any store bound to the channel. If the store has already been - * bound the previous `transform` function will be replaced with the new one. - * The `transform` function may be omitted to set the given context data as the - * context directly. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * import { AsyncLocalStorage } from 'node:async_hooks'; - * - * const store = new AsyncLocalStorage(); - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * channel.bindStore(store, (data) => { - * return { data }; - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param store The store to which to bind the context data - * @param transform Transform context data before setting the store context - */ - bindStore(store: AsyncLocalStorage, transform?: (context: ContextType) => StoreType): void; - /** - * Remove a message handler previously registered to this channel with `channel.bindStore(store)`. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * import { AsyncLocalStorage } from 'node:async_hooks'; - * - * const store = new AsyncLocalStorage(); - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * channel.bindStore(store); - * channel.unbindStore(store); - * ``` - * @since v19.9.0 - * @experimental - * @param store The store to unbind from the channel. - * @return `true` if the store was found, `false` otherwise. - */ - unbindStore(store: AsyncLocalStorage): boolean; - /** - * Applies the given data to any AsyncLocalStorage instances bound to the channel - * for the duration of the given function, then publishes to the channel within - * the scope of that data is applied to the stores. - * - * If a transform function was given to `channel.bindStore(store)` it will be - * applied to transform the message data before it becomes the context value for - * the store. The prior storage context is accessible from within the transform - * function in cases where context linking is required. - * - * The context applied to the store should be accessible in any async code which - * continues from execution which began during the given function, however - * there are some situations in which `context loss` may occur. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * import { AsyncLocalStorage } from 'node:async_hooks'; - * - * const store = new AsyncLocalStorage(); - * - * const channel = diagnostics_channel.channel('my-channel'); - * - * channel.bindStore(store, (message) => { - * const parent = store.getStore(); - * return new Span(message, parent); - * }); - * channel.runStores({ some: 'message' }, () => { - * store.getStore(); // Span({ some: 'message' }) - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param context Message to send to subscribers and bind to stores - * @param fn Handler to run within the entered storage context - * @param thisArg The receiver to be used for the function call. - * @param args Optional arguments to pass to the function. - */ - runStores( - context: ContextType, - fn: (this: ThisArg, ...args: Args) => Result, - thisArg?: ThisArg, - ...args: Args - ): Result; - } - interface TracingChannelSubscribers { - start: (message: ContextType) => void; - end: ( - message: ContextType & { - error?: unknown; - result?: unknown; - }, - ) => void; - asyncStart: ( - message: ContextType & { - error?: unknown; - result?: unknown; - }, - ) => void; - asyncEnd: ( - message: ContextType & { - error?: unknown; - result?: unknown; - }, - ) => void; - error: ( - message: ContextType & { - error: unknown; - }, - ) => void; - } - interface TracingChannelCollection { - start: Channel; - end: Channel; - asyncStart: Channel; - asyncEnd: Channel; - error: Channel; - } - /** - * The class `TracingChannel` is a collection of `TracingChannel Channels` which - * together express a single traceable action. It is used to formalize and - * simplify the process of producing events for tracing application flow. {@link tracingChannel} is used to construct a `TracingChannel`. As with `Channel` it is recommended to create and reuse a - * single `TracingChannel` at the top-level of the file rather than creating them - * dynamically. - * @since v19.9.0 - * @experimental - */ - class TracingChannel implements TracingChannelCollection { - start: Channel; - end: Channel; - asyncStart: Channel; - asyncEnd: Channel; - error: Channel; - /** - * Helper to subscribe a collection of functions to the corresponding channels. - * This is the same as calling `channel.subscribe(onMessage)` on each channel - * individually. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * channels.subscribe({ - * start(message) { - * // Handle start message - * }, - * end(message) { - * // Handle end message - * }, - * asyncStart(message) { - * // Handle asyncStart message - * }, - * asyncEnd(message) { - * // Handle asyncEnd message - * }, - * error(message) { - * // Handle error message - * }, - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param subscribers Set of `TracingChannel Channels` subscribers - */ - subscribe(subscribers: TracingChannelSubscribers): void; - /** - * Helper to unsubscribe a collection of functions from the corresponding channels. - * This is the same as calling `channel.unsubscribe(onMessage)` on each channel - * individually. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * channels.unsubscribe({ - * start(message) { - * // Handle start message - * }, - * end(message) { - * // Handle end message - * }, - * asyncStart(message) { - * // Handle asyncStart message - * }, - * asyncEnd(message) { - * // Handle asyncEnd message - * }, - * error(message) { - * // Handle error message - * }, - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param subscribers Set of `TracingChannel Channels` subscribers - * @return `true` if all handlers were successfully unsubscribed, and `false` otherwise. - */ - unsubscribe(subscribers: TracingChannelSubscribers): void; - /** - * Trace a synchronous function call. This will always produce a `start event` and `end event` around the execution and may produce an `error event` if the given function throws an error. - * This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all - * events should have any bound stores set to match this trace context. - * - * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions - * which are added after the trace begins will not receive future events from that trace, only future traces will be seen. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * channels.traceSync(() => { - * // Do something - * }, { - * some: 'thing', - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param fn Function to wrap a trace around - * @param context Shared object to correlate events through - * @param thisArg The receiver to be used for the function call - * @param args Optional arguments to pass to the function - * @return The return value of the given function - */ - traceSync( - fn: (this: ThisArg, ...args: Args) => Result, - context?: ContextType, - thisArg?: ThisArg, - ...args: Args - ): Result; - /** - * Trace a promise-returning function call. This will always produce a `start event` and `end event` around the synchronous portion of the - * function execution, and will produce an `asyncStart event` and `asyncEnd event` when a promise continuation is reached. It may also - * produce an `error event` if the given function throws an error or the - * returned promise rejects. This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all - * events should have any bound stores set to match this trace context. - * - * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions - * which are added after the trace begins will not receive future events from that trace, only future traces will be seen. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * channels.tracePromise(async () => { - * // Do something - * }, { - * some: 'thing', - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param fn Promise-returning function to wrap a trace around - * @param context Shared object to correlate trace events through - * @param thisArg The receiver to be used for the function call - * @param args Optional arguments to pass to the function - * @return Chained from promise returned by the given function - */ - tracePromise( - fn: (this: ThisArg, ...args: Args) => Promise, - context?: ContextType, - thisArg?: ThisArg, - ...args: Args - ): Promise; - /** - * Trace a callback-receiving function call. This will always produce a `start event` and `end event` around the synchronous portion of the - * function execution, and will produce a `asyncStart event` and `asyncEnd event` around the callback execution. It may also produce an `error event` if the given function throws an error or - * the returned - * promise rejects. This will run the given function using `channel.runStores(context, ...)` on the `start` channel which ensures all - * events should have any bound stores set to match this trace context. - * - * The `position` will be -1 by default to indicate the final argument should - * be used as the callback. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * channels.traceCallback((arg1, callback) => { - * // Do something - * callback(null, 'result'); - * }, 1, { - * some: 'thing', - * }, thisArg, arg1, callback); - * ``` - * - * The callback will also be run with `channel.runStores(context, ...)` which - * enables context loss recovery in some cases. - * - * To ensure only correct trace graphs are formed, events will only be published if subscribers are present prior to starting the trace. Subscriptions - * which are added after the trace begins will not receive future events from that trace, only future traces will be seen. - * - * ```js - * import diagnostics_channel from 'node:diagnostics_channel'; - * import { AsyncLocalStorage } from 'node:async_hooks'; - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * const myStore = new AsyncLocalStorage(); - * - * // The start channel sets the initial store data to something - * // and stores that store data value on the trace context object - * channels.start.bindStore(myStore, (data) => { - * const span = new Span(data); - * data.span = span; - * return span; - * }); - * - * // Then asyncStart can restore from that data it stored previously - * channels.asyncStart.bindStore(myStore, (data) => { - * return data.span; - * }); - * ``` - * @since v19.9.0 - * @experimental - * @param fn callback using function to wrap a trace around - * @param position Zero-indexed argument position of expected callback - * @param context Shared object to correlate trace events through - * @param thisArg The receiver to be used for the function call - * @param args Optional arguments to pass to the function - * @return The return value of the given function - */ - traceCallback( - fn: (this: ThisArg, ...args: Args) => Result, - position?: number, - context?: ContextType, - thisArg?: ThisArg, - ...args: Args - ): Result; - /** - * `true` if any of the individual channels has a subscriber, `false` if not. - * - * This is a helper method available on a {@link TracingChannel} instance to check - * if any of the [TracingChannel Channels](https://nodejs.org/api/diagnostics_channel.html#tracingchannel-channels) have subscribers. - * A `true` is returned if any of them have at least one subscriber, a `false` is returned otherwise. - * - * ```js - * const diagnostics_channel = require('node:diagnostics_channel'); - * - * const channels = diagnostics_channel.tracingChannel('my-channel'); - * - * if (channels.hasSubscribers) { - * // Do something - * } - * ``` - * @since v22.0.0, v20.13.0 - */ - readonly hasSubscribers: boolean; - } -} -declare module "diagnostics_channel" { - export * from "node:diagnostics_channel"; -} diff --git a/skills/flight-finder/node_modules/@types/node/dns.d.ts b/skills/flight-finder/node_modules/@types/node/dns.d.ts deleted file mode 100644 index 80a2272..0000000 --- a/skills/flight-finder/node_modules/@types/node/dns.d.ts +++ /dev/null @@ -1,922 +0,0 @@ -/** - * The `node:dns` module enables name resolution. For example, use it to look up IP - * addresses of host names. - * - * Although named for the [Domain Name System (DNS)](https://en.wikipedia.org/wiki/Domain_Name_System), it does not always use the - * DNS protocol for lookups. {@link lookup} uses the operating system - * facilities to perform name resolution. It may not need to perform any network - * communication. To perform name resolution the way other applications on the same - * system do, use {@link lookup}. - * - * ```js - * import dns from 'node:dns'; - * - * dns.lookup('example.org', (err, address, family) => { - * console.log('address: %j family: IPv%s', address, family); - * }); - * // address: "93.184.216.34" family: IPv4 - * ``` - * - * All other functions in the `node:dns` module connect to an actual DNS server to - * perform name resolution. They will always use the network to perform DNS - * queries. These functions do not use the same set of configuration files used by {@link lookup} (e.g. `/etc/hosts`). Use these functions to always perform - * DNS queries, bypassing other name-resolution facilities. - * - * ```js - * import dns from 'node:dns'; - * - * dns.resolve4('archive.org', (err, addresses) => { - * if (err) throw err; - * - * console.log(`addresses: ${JSON.stringify(addresses)}`); - * - * addresses.forEach((a) => { - * dns.reverse(a, (err, hostnames) => { - * if (err) { - * throw err; - * } - * console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`); - * }); - * }); - * }); - * ``` - * - * See the [Implementation considerations section](https://nodejs.org/docs/latest-v25.x/api/dns.html#implementation-considerations) for more information. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/dns.js) - */ -declare module "node:dns" { - // Supported getaddrinfo flags. - /** - * Limits returned address types to the types of non-loopback addresses configured on the system. For example, IPv4 addresses are - * only returned if the current system has at least one IPv4 address configured. - */ - const ADDRCONFIG: number; - /** - * If the IPv6 family was specified, but no IPv6 addresses were found, then return IPv4 mapped IPv6 addresses. It is not supported - * on some operating systems (e.g. FreeBSD 10.1). - */ - const V4MAPPED: number; - /** - * If `dns.V4MAPPED` is specified, return resolved IPv6 addresses as - * well as IPv4 mapped IPv6 addresses. - */ - const ALL: number; - interface LookupOptions { - /** - * The record family. Must be `4`, `6`, or `0`. For backward compatibility reasons, `'IPv4'` and `'IPv6'` are interpreted - * as `4` and `6` respectively. The value 0 indicates that either an IPv4 or IPv6 address is returned. If the value `0` is used - * with `{ all: true } (see below)`, both IPv4 and IPv6 addresses are returned. - * @default 0 - */ - family?: number | "IPv4" | "IPv6" | undefined; - /** - * One or more [supported `getaddrinfo`](https://nodejs.org/docs/latest-v25.x/api/dns.html#supported-getaddrinfo-flags) flags. Multiple flags may be - * passed by bitwise `OR`ing their values. - */ - hints?: number | undefined; - /** - * When `true`, the callback returns all resolved addresses in an array. Otherwise, returns a single address. - * @default false - */ - all?: boolean | undefined; - /** - * When `verbatim`, the resolved addresses are return unsorted. When `ipv4first`, the resolved addresses are sorted - * by placing IPv4 addresses before IPv6 addresses. When `ipv6first`, the resolved addresses are sorted by placing IPv6 - * addresses before IPv4 addresses. Default value is configurable using - * {@link setDefaultResultOrder} or [`--dns-result-order`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--dns-result-orderorder). - * @default `verbatim` (addresses are not reordered) - * @since v22.1.0 - */ - order?: "ipv4first" | "ipv6first" | "verbatim" | undefined; - /** - * When `true`, the callback receives IPv4 and IPv6 addresses in the order the DNS resolver returned them. When `false`, IPv4 - * addresses are placed before IPv6 addresses. This option will be deprecated in favor of `order`. When both are specified, - * `order` has higher precedence. New code should only use `order`. Default value is configurable using {@link setDefaultResultOrder} - * @default true (addresses are not reordered) - * @deprecated Please use `order` option - */ - verbatim?: boolean | undefined; - } - interface LookupOneOptions extends LookupOptions { - all?: false | undefined; - } - interface LookupAllOptions extends LookupOptions { - all: true; - } - interface LookupAddress { - /** - * A string representation of an IPv4 or IPv6 address. - */ - address: string; - /** - * `4` or `6`, denoting the family of `address`, or `0` if the address is not an IPv4 or IPv6 address. `0` is a likely indicator of a - * bug in the name resolution service used by the operating system. - */ - family: number; - } - /** - * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or - * AAAA (IPv6) record. All `option` properties are optional. If `options` is an - * integer, then it must be `4` or `6` – if `options` is `0` or not provided, then - * IPv4 and IPv6 addresses are both returned if found. - * - * With the `all` option set to `true`, the arguments for `callback` change to `(err, addresses)`, with `addresses` being an array of objects with the - * properties `address` and `family`. - * - * On error, `err` is an `Error` object, where `err.code` is the error code. - * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when - * the host name does not exist but also when the lookup fails in other ways - * such as no available file descriptors. - * - * `dns.lookup()` does not necessarily have anything to do with the DNS protocol. - * The implementation uses an operating system facility that can associate names - * with addresses and vice versa. This implementation can have subtle but - * important consequences on the behavior of any Node.js program. Please take some - * time to consult the [Implementation considerations section](https://nodejs.org/docs/latest-v25.x/api/dns.html#implementation-considerations) - * before using `dns.lookup()`. - * - * Example usage: - * - * ```js - * import dns from 'node:dns'; - * const options = { - * family: 6, - * hints: dns.ADDRCONFIG | dns.V4MAPPED, - * }; - * dns.lookup('example.com', options, (err, address, family) => - * console.log('address: %j family: IPv%s', address, family)); - * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 - * - * // When options.all is true, the result will be an Array. - * options.all = true; - * dns.lookup('example.com', options, (err, addresses) => - * console.log('addresses: %j', addresses)); - * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] - * ``` - * - * If this method is invoked as its [util.promisify()](https://nodejs.org/docs/latest-v25.x/api/util.html#utilpromisifyoriginal) ed - * version, and `all` is not set to `true`, it returns a `Promise` for an `Object` with `address` and `family` properties. - * @since v0.1.90 - */ - function lookup( - hostname: string, - family: number, - callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, - ): void; - function lookup( - hostname: string, - options: LookupOneOptions, - callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, - ): void; - function lookup( - hostname: string, - options: LookupAllOptions, - callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void, - ): void; - function lookup( - hostname: string, - options: LookupOptions, - callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void, - ): void; - function lookup( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void, - ): void; - namespace lookup { - function __promisify__(hostname: string, options: LookupAllOptions): Promise; - function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise; - function __promisify__(hostname: string, options: LookupOptions): Promise; - } - /** - * Resolves the given `address` and `port` into a host name and service using - * the operating system's underlying `getnameinfo` implementation. - * - * If `address` is not a valid IP address, a `TypeError` will be thrown. - * The `port` will be coerced to a number. If it is not a legal port, a `TypeError` will be thrown. - * - * On an error, `err` is an [`Error`](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) object, - * where `err.code` is the error code. - * - * ```js - * import dns from 'node:dns'; - * dns.lookupService('127.0.0.1', 22, (err, hostname, service) => { - * console.log(hostname, service); - * // Prints: localhost ssh - * }); - * ``` - * - * If this method is invoked as its [util.promisify()](https://nodejs.org/docs/latest-v25.x/api/util.html#utilpromisifyoriginal) ed - * version, it returns a `Promise` for an `Object` with `hostname` and `service` properties. - * @since v0.11.14 - */ - function lookupService( - address: string, - port: number, - callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void, - ): void; - namespace lookupService { - function __promisify__( - address: string, - port: number, - ): Promise<{ - hostname: string; - service: string; - }>; - } - interface ResolveOptions { - ttl: boolean; - } - interface ResolveWithTtlOptions extends ResolveOptions { - ttl: true; - } - interface RecordWithTtl { - address: string; - ttl: number; - } - interface AnyARecord extends RecordWithTtl { - type: "A"; - } - interface AnyAaaaRecord extends RecordWithTtl { - type: "AAAA"; - } - interface CaaRecord { - critical: number; - issue?: string | undefined; - issuewild?: string | undefined; - iodef?: string | undefined; - contactemail?: string | undefined; - contactphone?: string | undefined; - } - interface AnyCaaRecord extends CaaRecord { - type: "CAA"; - } - interface MxRecord { - priority: number; - exchange: string; - } - interface AnyMxRecord extends MxRecord { - type: "MX"; - } - interface NaptrRecord { - flags: string; - service: string; - regexp: string; - replacement: string; - order: number; - preference: number; - } - interface AnyNaptrRecord extends NaptrRecord { - type: "NAPTR"; - } - interface SoaRecord { - nsname: string; - hostmaster: string; - serial: number; - refresh: number; - retry: number; - expire: number; - minttl: number; - } - interface AnySoaRecord extends SoaRecord { - type: "SOA"; - } - interface SrvRecord { - priority: number; - weight: number; - port: number; - name: string; - } - interface AnySrvRecord extends SrvRecord { - type: "SRV"; - } - interface TlsaRecord { - certUsage: number; - selector: number; - match: number; - data: ArrayBuffer; - } - interface AnyTlsaRecord extends TlsaRecord { - type: "TLSA"; - } - interface AnyTxtRecord { - type: "TXT"; - entries: string[]; - } - interface AnyNsRecord { - type: "NS"; - value: string; - } - interface AnyPtrRecord { - type: "PTR"; - value: string; - } - interface AnyCnameRecord { - type: "CNAME"; - value: string; - } - type AnyRecord = - | AnyARecord - | AnyAaaaRecord - | AnyCaaRecord - | AnyCnameRecord - | AnyMxRecord - | AnyNaptrRecord - | AnyNsRecord - | AnyPtrRecord - | AnySoaRecord - | AnySrvRecord - | AnyTlsaRecord - | AnyTxtRecord; - /** - * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array - * of the resource records. The `callback` function has arguments `(err, records)`. When successful, `records` will be an array of resource - * records. The type and structure of individual results varies based on `rrtype`: - * - * - * - * On error, `err` is an [`Error`](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) object, - * where `err.code` is one of the `DNS error codes`. - * @since v0.1.27 - * @param hostname Host name to resolve. - * @param [rrtype='A'] Resource record type. - */ - function resolve( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR", - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "ANY", - callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "CAA", - callback: (err: NodeJS.ErrnoException | null, address: CaaRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "MX", - callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "NAPTR", - callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "SOA", - callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void, - ): void; - function resolve( - hostname: string, - rrtype: "SRV", - callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "TLSA", - callback: (err: NodeJS.ErrnoException | null, addresses: TlsaRecord[]) => void, - ): void; - function resolve( - hostname: string, - rrtype: "TXT", - callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, - ): void; - function resolve( - hostname: string, - rrtype: string, - callback: ( - err: NodeJS.ErrnoException | null, - addresses: - | string[] - | CaaRecord[] - | MxRecord[] - | NaptrRecord[] - | SoaRecord - | SrvRecord[] - | TlsaRecord[] - | string[][] - | AnyRecord[], - ) => void, - ): void; - namespace resolve { - function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; - function __promisify__(hostname: string, rrtype: "ANY"): Promise; - function __promisify__(hostname: string, rrtype: "CAA"): Promise; - function __promisify__(hostname: string, rrtype: "MX"): Promise; - function __promisify__(hostname: string, rrtype: "NAPTR"): Promise; - function __promisify__(hostname: string, rrtype: "SOA"): Promise; - function __promisify__(hostname: string, rrtype: "SRV"): Promise; - function __promisify__(hostname: string, rrtype: "TLSA"): Promise; - function __promisify__(hostname: string, rrtype: "TXT"): Promise; - function __promisify__( - hostname: string, - rrtype: string, - ): Promise< - | string[] - | CaaRecord[] - | MxRecord[] - | NaptrRecord[] - | SoaRecord - | SrvRecord[] - | TlsaRecord[] - | string[][] - | AnyRecord[] - >; - } - /** - * Uses the DNS protocol to resolve a IPv4 addresses (`A` records) for the `hostname`. The `addresses` argument passed to the `callback` function - * will contain an array of IPv4 addresses (e.g.`['74.125.79.104', '74.125.79.105', '74.125.79.106']`). - * @since v0.1.16 - * @param hostname Host name to resolve. - */ - function resolve4( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - function resolve4( - hostname: string, - options: ResolveWithTtlOptions, - callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, - ): void; - function resolve4( - hostname: string, - options: ResolveOptions, - callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, - ): void; - namespace resolve4 { - function __promisify__(hostname: string): Promise; - function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; - function __promisify__(hostname: string, options?: ResolveOptions): Promise; - } - /** - * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the `hostname`. The `addresses` argument passed to the `callback` function - * will contain an array of IPv6 addresses. - * @since v0.1.16 - * @param hostname Host name to resolve. - */ - function resolve6( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - function resolve6( - hostname: string, - options: ResolveWithTtlOptions, - callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void, - ): void; - function resolve6( - hostname: string, - options: ResolveOptions, - callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void, - ): void; - namespace resolve6 { - function __promisify__(hostname: string): Promise; - function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise; - function __promisify__(hostname: string, options?: ResolveOptions): Promise; - } - /** - * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. The `addresses` argument passed to the `callback` function - * will contain an array of canonical name records available for the `hostname` (e.g. `['bar.example.com']`). - * @since v0.3.2 - */ - function resolveCname( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - namespace resolveCname { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve `CAA` records for the `hostname`. The `addresses` argument passed to the `callback` function - * will contain an array of certification authority authorization records - * available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]`). - * @since v15.0.0, v14.17.0 - */ - function resolveCaa( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, records: CaaRecord[]) => void, - ): void; - namespace resolveCaa { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the `hostname`. The `addresses` argument passed to the `callback` function will - * contain an array of objects containing both a `priority` and `exchange` property (e.g. `[{priority: 10, exchange: 'mx.example.com'}, ...]`). - * @since v0.1.27 - */ - function resolveMx( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void, - ): void; - namespace resolveMx { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve regular expression-based records (`NAPTR` records) for the `hostname`. The `addresses` argument passed to the `callback` function will contain an array of - * objects with the following properties: - * - * * `flags` - * * `service` - * * `regexp` - * * `replacement` - * * `order` - * * `preference` - * - * ```js - * { - * flags: 's', - * service: 'SIP+D2U', - * regexp: '', - * replacement: '_sip._udp.example.com', - * order: 30, - * preference: 100 - * } - * ``` - * @since v0.9.12 - */ - function resolveNaptr( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void, - ): void; - namespace resolveNaptr { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve name server records (`NS` records) for the `hostname`. The `addresses` argument passed to the `callback` function will - * contain an array of name server records available for `hostname` (e.g. `['ns1.example.com', 'ns2.example.com']`). - * @since v0.1.90 - */ - function resolveNs( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - namespace resolveNs { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve pointer records (`PTR` records) for the `hostname`. The `addresses` argument passed to the `callback` function will - * be an array of strings containing the reply records. - * @since v6.0.0 - */ - function resolvePtr( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void, - ): void; - namespace resolvePtr { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for - * the `hostname`. The `address` argument passed to the `callback` function will - * be an object with the following properties: - * - * * `nsname` - * * `hostmaster` - * * `serial` - * * `refresh` - * * `retry` - * * `expire` - * * `minttl` - * - * ```js - * { - * nsname: 'ns.example.com', - * hostmaster: 'root.example.com', - * serial: 2013101809, - * refresh: 10000, - * retry: 2400, - * expire: 604800, - * minttl: 3600 - * } - * ``` - * @since v0.11.10 - */ - function resolveSoa( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void, - ): void; - namespace resolveSoa { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve service records (`SRV` records) for the `hostname`. The `addresses` argument passed to the `callback` function will - * be an array of objects with the following properties: - * - * * `priority` - * * `weight` - * * `port` - * * `name` - * - * ```js - * { - * priority: 10, - * weight: 5, - * port: 21223, - * name: 'service.example.com' - * } - * ``` - * @since v0.1.27 - */ - function resolveSrv( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void, - ): void; - namespace resolveSrv { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve certificate associations (`TLSA` records) for - * the `hostname`. The `records` argument passed to the `callback` function is an - * array of objects with these properties: - * - * * `certUsage` - * * `selector` - * * `match` - * * `data` - * - * ```js - * { - * certUsage: 3, - * selector: 1, - * match: 1, - * data: [ArrayBuffer] - * } - * ``` - * @since v23.9.0, v22.15.0 - */ - function resolveTlsa( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: TlsaRecord[]) => void, - ): void; - namespace resolveTlsa { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve text queries (`TXT` records) for the `hostname`. The `records` argument passed to the `callback` function is a - * two-dimensional array of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of - * one record. Depending on the use case, these could be either joined together or - * treated separately. - * @since v0.1.27 - */ - function resolveTxt( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void, - ): void; - namespace resolveTxt { - function __promisify__(hostname: string): Promise; - } - /** - * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). - * The `ret` argument passed to the `callback` function will be an array containing - * various types of records. Each object has a property `type` that indicates the - * type of the current record. And depending on the `type`, additional properties - * will be present on the object: - * - * - * - * Here is an example of the `ret` object passed to the callback: - * - * ```js - * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, - * { type: 'CNAME', value: 'example.com' }, - * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, - * { type: 'NS', value: 'ns1.example.com' }, - * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, - * { type: 'SOA', - * nsname: 'ns1.example.com', - * hostmaster: 'admin.example.com', - * serial: 156696742, - * refresh: 900, - * retry: 900, - * expire: 1800, - * minttl: 60 } ] - * ``` - * - * DNS server operators may choose not to respond to `ANY` queries. It may be better to call individual methods like {@link resolve4}, {@link resolveMx}, and so on. For more details, see - * [RFC 8482](https://tools.ietf.org/html/rfc8482). - */ - function resolveAny( - hostname: string, - callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void, - ): void; - namespace resolveAny { - function __promisify__(hostname: string): Promise; - } - /** - * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an - * array of host names. - * - * On error, `err` is an [`Error`](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-error) object, where `err.code` is - * one of the [DNS error codes](https://nodejs.org/docs/latest-v25.x/api/dns.html#error-codes). - * @since v0.1.16 - */ - function reverse( - ip: string, - callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void, - ): void; - /** - * Get the default value for `order` in {@link lookup} and [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v25.x/api/dns.html#dnspromiseslookuphostname-options). - * The value could be: - * - * * `ipv4first`: for `order` defaulting to `ipv4first`. - * * `ipv6first`: for `order` defaulting to `ipv6first`. - * * `verbatim`: for `order` defaulting to `verbatim`. - * @since v18.17.0 - */ - function getDefaultResultOrder(): "ipv4first" | "ipv6first" | "verbatim"; - /** - * Sets the IP address and port of servers to be used when performing DNS - * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted - * addresses. If the port is the IANA default DNS port (53) it can be omitted. - * - * ```js - * dns.setServers([ - * '4.4.4.4', - * '[2001:4860:4860::8888]', - * '4.4.4.4:1053', - * '[2001:4860:4860::8888]:1053', - * ]); - * ``` - * - * An error will be thrown if an invalid address is provided. - * - * The `dns.setServers()` method must not be called while a DNS query is in - * progress. - * - * The {@link setServers} method affects only {@link resolve}, `dns.resolve*()` and {@link reverse} (and specifically _not_ {@link lookup}). - * - * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). - * That is, if attempting to resolve with the first server provided results in a `NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with - * subsequent servers provided. Fallback DNS servers will only be used if the - * earlier ones time out or result in some other error. - * @since v0.11.3 - * @param servers array of [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952#section-6) formatted addresses - */ - function setServers(servers: readonly string[]): void; - /** - * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), - * that are currently configured for DNS resolution. A string will include a port - * section if a custom port is used. - * - * ```js - * [ - * '4.4.4.4', - * '2001:4860:4860::8888', - * '4.4.4.4:1053', - * '[2001:4860:4860::8888]:1053', - * ] - * ``` - * @since v0.11.3 - */ - function getServers(): string[]; - /** - * Set the default value of `order` in {@link lookup} and [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v25.x/api/dns.html#dnspromiseslookuphostname-options). - * The value could be: - * - * * `ipv4first`: sets default `order` to `ipv4first`. - * * `ipv6first`: sets default `order` to `ipv6first`. - * * `verbatim`: sets default `order` to `verbatim`. - * - * The default is `verbatim` and {@link setDefaultResultOrder} have higher - * priority than [`--dns-result-order`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--dns-result-orderorder). When using - * [worker threads](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html), {@link setDefaultResultOrder} from the main - * thread won't affect the default dns orders in workers. - * @since v16.4.0, v14.18.0 - * @param order must be `'ipv4first'`, `'ipv6first'` or `'verbatim'`. - */ - function setDefaultResultOrder(order: "ipv4first" | "ipv6first" | "verbatim"): void; - // Error codes - const NODATA: "ENODATA"; - const FORMERR: "EFORMERR"; - const SERVFAIL: "ESERVFAIL"; - const NOTFOUND: "ENOTFOUND"; - const NOTIMP: "ENOTIMP"; - const REFUSED: "EREFUSED"; - const BADQUERY: "EBADQUERY"; - const BADNAME: "EBADNAME"; - const BADFAMILY: "EBADFAMILY"; - const BADRESP: "EBADRESP"; - const CONNREFUSED: "ECONNREFUSED"; - const TIMEOUT: "ETIMEOUT"; - const EOF: "EOF"; - const FILE: "EFILE"; - const NOMEM: "ENOMEM"; - const DESTRUCTION: "EDESTRUCTION"; - const BADSTR: "EBADSTR"; - const BADFLAGS: "EBADFLAGS"; - const NONAME: "ENONAME"; - const BADHINTS: "EBADHINTS"; - const NOTINITIALIZED: "ENOTINITIALIZED"; - const LOADIPHLPAPI: "ELOADIPHLPAPI"; - const ADDRGETNETWORKPARAMS: "EADDRGETNETWORKPARAMS"; - const CANCELLED: "ECANCELLED"; - interface ResolverOptions { - /** - * Query timeout in milliseconds, or `-1` to use the default timeout. - */ - timeout?: number | undefined; - /** - * The number of tries the resolver will try contacting each name server before giving up. - * @default 4 - */ - tries?: number | undefined; - /** - * The max retry timeout, in milliseconds. - * @default 0 - */ - maxTimeout?: number | undefined; - } - /** - * An independent resolver for DNS requests. - * - * Creating a new resolver uses the default server settings. Setting - * the servers used for a resolver using [`resolver.setServers()`](https://nodejs.org/docs/latest-v25.x/api/dns.html#dnssetserversservers) does not affect - * other resolvers: - * - * ```js - * import { Resolver } from 'node:dns'; - * const resolver = new Resolver(); - * resolver.setServers(['4.4.4.4']); - * - * // This request will use the server at 4.4.4.4, independent of global settings. - * resolver.resolve4('example.org', (err, addresses) => { - * // ... - * }); - * ``` - * - * The following methods from the `node:dns` module are available: - * - * * `resolver.getServers()` - * * `resolver.resolve()` - * * `resolver.resolve4()` - * * `resolver.resolve6()` - * * `resolver.resolveAny()` - * * `resolver.resolveCaa()` - * * `resolver.resolveCname()` - * * `resolver.resolveMx()` - * * `resolver.resolveNaptr()` - * * `resolver.resolveNs()` - * * `resolver.resolvePtr()` - * * `resolver.resolveSoa()` - * * `resolver.resolveSrv()` - * * `resolver.resolveTxt()` - * * `resolver.reverse()` - * * `resolver.setServers()` - * @since v8.3.0 - */ - class Resolver { - constructor(options?: ResolverOptions); - /** - * Cancel all outstanding DNS queries made by this resolver. The corresponding - * callbacks will be called with an error with code `ECANCELLED`. - * @since v8.3.0 - */ - cancel(): void; - getServers: typeof getServers; - resolve: typeof resolve; - resolve4: typeof resolve4; - resolve6: typeof resolve6; - resolveAny: typeof resolveAny; - resolveCaa: typeof resolveCaa; - resolveCname: typeof resolveCname; - resolveMx: typeof resolveMx; - resolveNaptr: typeof resolveNaptr; - resolveNs: typeof resolveNs; - resolvePtr: typeof resolvePtr; - resolveSoa: typeof resolveSoa; - resolveSrv: typeof resolveSrv; - resolveTlsa: typeof resolveTlsa; - resolveTxt: typeof resolveTxt; - reverse: typeof reverse; - /** - * The resolver instance will send its requests from the specified IP address. - * This allows programs to specify outbound interfaces when used on multi-homed - * systems. - * - * If a v4 or v6 address is not specified, it is set to the default and the - * operating system will choose a local address automatically. - * - * The resolver will use the v4 local address when making requests to IPv4 DNS - * servers, and the v6 local address when making requests to IPv6 DNS servers. - * The `rrtype` of resolution requests has no impact on the local address used. - * @since v15.1.0, v14.17.0 - * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. - * @param [ipv6='::0'] A string representation of an IPv6 address. - */ - setLocalAddress(ipv4?: string, ipv6?: string): void; - setServers: typeof setServers; - } -} -declare module "node:dns" { - export * as promises from "node:dns/promises"; -} -declare module "dns" { - export * from "node:dns"; -} diff --git a/skills/flight-finder/node_modules/@types/node/dns/promises.d.ts b/skills/flight-finder/node_modules/@types/node/dns/promises.d.ts deleted file mode 100644 index 8d5f989..0000000 --- a/skills/flight-finder/node_modules/@types/node/dns/promises.d.ts +++ /dev/null @@ -1,503 +0,0 @@ -/** - * The `dns.promises` API provides an alternative set of asynchronous DNS methods - * that return `Promise` objects rather than using callbacks. The API is accessible - * via `import { promises as dnsPromises } from 'node:dns'` or `import dnsPromises from 'node:dns/promises'`. - * @since v10.6.0 - */ -declare module "node:dns/promises" { - import { - AnyRecord, - CaaRecord, - LookupAddress, - LookupAllOptions, - LookupOneOptions, - LookupOptions, - MxRecord, - NaptrRecord, - RecordWithTtl, - ResolveOptions, - ResolverOptions, - ResolveWithTtlOptions, - SoaRecord, - SrvRecord, - TlsaRecord, - } from "node:dns"; - /** - * Returns an array of IP address strings, formatted according to [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6), - * that are currently configured for DNS resolution. A string will include a port - * section if a custom port is used. - * - * ```js - * [ - * '4.4.4.4', - * '2001:4860:4860::8888', - * '4.4.4.4:1053', - * '[2001:4860:4860::8888]:1053', - * ] - * ``` - * @since v10.6.0 - */ - function getServers(): string[]; - /** - * Resolves a host name (e.g. `'nodejs.org'`) into the first found A (IPv4) or - * AAAA (IPv6) record. All `option` properties are optional. If `options` is an - * integer, then it must be `4` or `6` – if `options` is not provided, then IPv4 - * and IPv6 addresses are both returned if found. - * - * With the `all` option set to `true`, the `Promise` is resolved with `addresses` being an array of objects with the properties `address` and `family`. - * - * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code. - * Keep in mind that `err.code` will be set to `'ENOTFOUND'` not only when - * the host name does not exist but also when the lookup fails in other ways - * such as no available file descriptors. - * - * [`dnsPromises.lookup()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options) does not necessarily have anything to do with the DNS - * protocol. The implementation uses an operating system facility that can - * associate names with addresses and vice versa. This implementation can have - * subtle but important consequences on the behavior of any Node.js program. Please - * take some time to consult the [Implementation considerations section](https://nodejs.org/docs/latest-v20.x/api/dns.html#implementation-considerations) before - * using `dnsPromises.lookup()`. - * - * Example usage: - * - * ```js - * import dns from 'node:dns'; - * const dnsPromises = dns.promises; - * const options = { - * family: 6, - * hints: dns.ADDRCONFIG | dns.V4MAPPED, - * }; - * - * dnsPromises.lookup('example.com', options).then((result) => { - * console.log('address: %j family: IPv%s', result.address, result.family); - * // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6 - * }); - * - * // When options.all is true, the result will be an Array. - * options.all = true; - * dnsPromises.lookup('example.com', options).then((result) => { - * console.log('addresses: %j', result); - * // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] - * }); - * ``` - * @since v10.6.0 - */ - function lookup(hostname: string, family: number): Promise; - function lookup(hostname: string, options: LookupOneOptions): Promise; - function lookup(hostname: string, options: LookupAllOptions): Promise; - function lookup(hostname: string, options: LookupOptions): Promise; - function lookup(hostname: string): Promise; - /** - * Resolves the given `address` and `port` into a host name and service using - * the operating system's underlying `getnameinfo` implementation. - * - * If `address` is not a valid IP address, a `TypeError` will be thrown. - * The `port` will be coerced to a number. If it is not a legal port, a `TypeError` will be thrown. - * - * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` is the error code. - * - * ```js - * import dnsPromises from 'node:dns'; - * dnsPromises.lookupService('127.0.0.1', 22).then((result) => { - * console.log(result.hostname, result.service); - * // Prints: localhost ssh - * }); - * ``` - * @since v10.6.0 - */ - function lookupService( - address: string, - port: number, - ): Promise<{ - hostname: string; - service: string; - }>; - /** - * Uses the DNS protocol to resolve a host name (e.g. `'nodejs.org'`) into an array - * of the resource records. When successful, the `Promise` is resolved with an - * array of resource records. The type and structure of individual results vary - * based on `rrtype`: - * - * - * - * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` - * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes). - * @since v10.6.0 - * @param hostname Host name to resolve. - * @param [rrtype='A'] Resource record type. - */ - function resolve(hostname: string): Promise; - function resolve(hostname: string, rrtype: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise; - function resolve(hostname: string, rrtype: "ANY"): Promise; - function resolve(hostname: string, rrtype: "CAA"): Promise; - function resolve(hostname: string, rrtype: "MX"): Promise; - function resolve(hostname: string, rrtype: "NAPTR"): Promise; - function resolve(hostname: string, rrtype: "SOA"): Promise; - function resolve(hostname: string, rrtype: "SRV"): Promise; - function resolve(hostname: string, rrtype: "TLSA"): Promise; - function resolve(hostname: string, rrtype: "TXT"): Promise; - function resolve(hostname: string, rrtype: string): Promise< - | string[] - | CaaRecord[] - | MxRecord[] - | NaptrRecord[] - | SoaRecord - | SrvRecord[] - | TlsaRecord[] - | string[][] - | AnyRecord[] - >; - /** - * Uses the DNS protocol to resolve IPv4 addresses (`A` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv4 - * addresses (e.g. `['74.125.79.104', '74.125.79.105', '74.125.79.106']`). - * @since v10.6.0 - * @param hostname Host name to resolve. - */ - function resolve4(hostname: string): Promise; - function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise; - function resolve4(hostname: string, options: ResolveOptions): Promise; - /** - * Uses the DNS protocol to resolve IPv6 addresses (`AAAA` records) for the `hostname`. On success, the `Promise` is resolved with an array of IPv6 - * addresses. - * @since v10.6.0 - * @param hostname Host name to resolve. - */ - function resolve6(hostname: string): Promise; - function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise; - function resolve6(hostname: string, options: ResolveOptions): Promise; - /** - * Uses the DNS protocol to resolve all records (also known as `ANY` or `*` query). - * On success, the `Promise` is resolved with an array containing various types of - * records. Each object has a property `type` that indicates the type of the - * current record. And depending on the `type`, additional properties will be - * present on the object: - * - * - * - * Here is an example of the result object: - * - * ```js - * [ { type: 'A', address: '127.0.0.1', ttl: 299 }, - * { type: 'CNAME', value: 'example.com' }, - * { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 }, - * { type: 'NS', value: 'ns1.example.com' }, - * { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] }, - * { type: 'SOA', - * nsname: 'ns1.example.com', - * hostmaster: 'admin.example.com', - * serial: 156696742, - * refresh: 900, - * retry: 900, - * expire: 1800, - * minttl: 60 } ] - * ``` - * @since v10.6.0 - */ - function resolveAny(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve `CAA` records for the `hostname`. On success, - * the `Promise` is resolved with an array of objects containing available - * certification authority authorization records available for the `hostname` (e.g. `[{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]`). - * @since v15.0.0, v14.17.0 - */ - function resolveCaa(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve `CNAME` records for the `hostname`. On success, - * the `Promise` is resolved with an array of canonical name records available for - * the `hostname` (e.g. `['bar.example.com']`). - * @since v10.6.0 - */ - function resolveCname(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve mail exchange records (`MX` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects - * containing both a `priority` and `exchange` property (e.g.`[{priority: 10, exchange: 'mx.example.com'}, ...]`). - * @since v10.6.0 - */ - function resolveMx(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve regular expression-based records (`NAPTR` records) for the `hostname`. On success, the `Promise` is resolved with an array - * of objects with the following properties: - * - * * `flags` - * * `service` - * * `regexp` - * * `replacement` - * * `order` - * * `preference` - * - * ```js - * { - * flags: 's', - * service: 'SIP+D2U', - * regexp: '', - * replacement: '_sip._udp.example.com', - * order: 30, - * preference: 100 - * } - * ``` - * @since v10.6.0 - */ - function resolveNaptr(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve name server records (`NS` records) for the `hostname`. On success, the `Promise` is resolved with an array of name server - * records available for `hostname` (e.g.`['ns1.example.com', 'ns2.example.com']`). - * @since v10.6.0 - */ - function resolveNs(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve pointer records (`PTR` records) for the `hostname`. On success, the `Promise` is resolved with an array of strings - * containing the reply records. - * @since v10.6.0 - */ - function resolvePtr(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve a start of authority record (`SOA` record) for - * the `hostname`. On success, the `Promise` is resolved with an object with the - * following properties: - * - * * `nsname` - * * `hostmaster` - * * `serial` - * * `refresh` - * * `retry` - * * `expire` - * * `minttl` - * - * ```js - * { - * nsname: 'ns.example.com', - * hostmaster: 'root.example.com', - * serial: 2013101809, - * refresh: 10000, - * retry: 2400, - * expire: 604800, - * minttl: 3600 - * } - * ``` - * @since v10.6.0 - */ - function resolveSoa(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve service records (`SRV` records) for the `hostname`. On success, the `Promise` is resolved with an array of objects with - * the following properties: - * - * * `priority` - * * `weight` - * * `port` - * * `name` - * - * ```js - * { - * priority: 10, - * weight: 5, - * port: 21223, - * name: 'service.example.com' - * } - * ``` - * @since v10.6.0 - */ - function resolveSrv(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve certificate associations (`TLSA` records) for - * the `hostname`. On success, the `Promise` is resolved with an array of objectsAdd commentMore actions - * with these properties: - * - * * `certUsage` - * * `selector` - * * `match` - * * `data` - * - * ```js - * { - * certUsage: 3, - * selector: 1, - * match: 1, - * data: [ArrayBuffer] - * } - * ``` - * @since v23.9.0, v22.15.0 - */ - function resolveTlsa(hostname: string): Promise; - /** - * Uses the DNS protocol to resolve text queries (`TXT` records) for the `hostname`. On success, the `Promise` is resolved with a two-dimensional array - * of the text records available for `hostname` (e.g.`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of - * one record. Depending on the use case, these could be either joined together or - * treated separately. - * @since v10.6.0 - */ - function resolveTxt(hostname: string): Promise; - /** - * Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an - * array of host names. - * - * On error, the `Promise` is rejected with an [`Error`](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) object, where `err.code` - * is one of the [DNS error codes](https://nodejs.org/docs/latest-v20.x/api/dns.html#error-codes). - * @since v10.6.0 - */ - function reverse(ip: string): Promise; - /** - * Get the default value for `verbatim` in {@link lookup} and [dnsPromises.lookup()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromiseslookuphostname-options). - * The value could be: - * - * * `ipv4first`: for `verbatim` defaulting to `false`. - * * `verbatim`: for `verbatim` defaulting to `true`. - * @since v20.1.0 - */ - function getDefaultResultOrder(): "ipv4first" | "verbatim"; - /** - * Sets the IP address and port of servers to be used when performing DNS - * resolution. The `servers` argument is an array of [RFC 5952](https://tools.ietf.org/html/rfc5952#section-6) formatted - * addresses. If the port is the IANA default DNS port (53) it can be omitted. - * - * ```js - * dnsPromises.setServers([ - * '4.4.4.4', - * '[2001:4860:4860::8888]', - * '4.4.4.4:1053', - * '[2001:4860:4860::8888]:1053', - * ]); - * ``` - * - * An error will be thrown if an invalid address is provided. - * - * The `dnsPromises.setServers()` method must not be called while a DNS query is in - * progress. - * - * This method works much like [resolve.conf](https://man7.org/linux/man-pages/man5/resolv.conf.5.html). - * That is, if attempting to resolve with the first server provided results in a `NOTFOUND` error, the `resolve()` method will _not_ attempt to resolve with - * subsequent servers provided. Fallback DNS servers will only be used if the - * earlier ones time out or result in some other error. - * @since v10.6.0 - * @param servers array of `RFC 5952` formatted addresses - */ - function setServers(servers: readonly string[]): void; - /** - * Set the default value of `order` in `dns.lookup()` and `{@link lookup}`. The value could be: - * - * * `ipv4first`: sets default `order` to `ipv4first`. - * * `ipv6first`: sets default `order` to `ipv6first`. - * * `verbatim`: sets default `order` to `verbatim`. - * - * The default is `verbatim` and [dnsPromises.setDefaultResultOrder()](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder) - * have higher priority than [`--dns-result-order`](https://nodejs.org/docs/latest-v20.x/api/cli.html#--dns-result-orderorder). - * When using [worker threads](https://nodejs.org/docs/latest-v20.x/api/worker_threads.html), [`dnsPromises.setDefaultResultOrder()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetdefaultresultorderorder) - * from the main thread won't affect the default dns orders in workers. - * @since v16.4.0, v14.18.0 - * @param order must be `'ipv4first'`, `'ipv6first'` or `'verbatim'`. - */ - function setDefaultResultOrder(order: "ipv4first" | "ipv6first" | "verbatim"): void; - // Error codes - const NODATA: "ENODATA"; - const FORMERR: "EFORMERR"; - const SERVFAIL: "ESERVFAIL"; - const NOTFOUND: "ENOTFOUND"; - const NOTIMP: "ENOTIMP"; - const REFUSED: "EREFUSED"; - const BADQUERY: "EBADQUERY"; - const BADNAME: "EBADNAME"; - const BADFAMILY: "EBADFAMILY"; - const BADRESP: "EBADRESP"; - const CONNREFUSED: "ECONNREFUSED"; - const TIMEOUT: "ETIMEOUT"; - const EOF: "EOF"; - const FILE: "EFILE"; - const NOMEM: "ENOMEM"; - const DESTRUCTION: "EDESTRUCTION"; - const BADSTR: "EBADSTR"; - const BADFLAGS: "EBADFLAGS"; - const NONAME: "ENONAME"; - const BADHINTS: "EBADHINTS"; - const NOTINITIALIZED: "ENOTINITIALIZED"; - const LOADIPHLPAPI: "ELOADIPHLPAPI"; - const ADDRGETNETWORKPARAMS: "EADDRGETNETWORKPARAMS"; - const CANCELLED: "ECANCELLED"; - - /** - * An independent resolver for DNS requests. - * - * Creating a new resolver uses the default server settings. Setting - * the servers used for a resolver using [`resolver.setServers()`](https://nodejs.org/docs/latest-v20.x/api/dns.html#dnspromisessetserversservers) does not affect - * other resolvers: - * - * ```js - * import { promises } from 'node:dns'; - * const resolver = new promises.Resolver(); - * resolver.setServers(['4.4.4.4']); - * - * // This request will use the server at 4.4.4.4, independent of global settings. - * resolver.resolve4('example.org').then((addresses) => { - * // ... - * }); - * - * // Alternatively, the same code can be written using async-await style. - * (async function() { - * const addresses = await resolver.resolve4('example.org'); - * })(); - * ``` - * - * The following methods from the `dnsPromises` API are available: - * - * * `resolver.getServers()` - * * `resolver.resolve()` - * * `resolver.resolve4()` - * * `resolver.resolve6()` - * * `resolver.resolveAny()` - * * `resolver.resolveCaa()` - * * `resolver.resolveCname()` - * * `resolver.resolveMx()` - * * `resolver.resolveNaptr()` - * * `resolver.resolveNs()` - * * `resolver.resolvePtr()` - * * `resolver.resolveSoa()` - * * `resolver.resolveSrv()` - * * `resolver.resolveTxt()` - * * `resolver.reverse()` - * * `resolver.setServers()` - * @since v10.6.0 - */ - class Resolver { - constructor(options?: ResolverOptions); - /** - * Cancel all outstanding DNS queries made by this resolver. The corresponding - * callbacks will be called with an error with code `ECANCELLED`. - * @since v8.3.0 - */ - cancel(): void; - getServers: typeof getServers; - resolve: typeof resolve; - resolve4: typeof resolve4; - resolve6: typeof resolve6; - resolveAny: typeof resolveAny; - resolveCaa: typeof resolveCaa; - resolveCname: typeof resolveCname; - resolveMx: typeof resolveMx; - resolveNaptr: typeof resolveNaptr; - resolveNs: typeof resolveNs; - resolvePtr: typeof resolvePtr; - resolveSoa: typeof resolveSoa; - resolveSrv: typeof resolveSrv; - resolveTlsa: typeof resolveTlsa; - resolveTxt: typeof resolveTxt; - reverse: typeof reverse; - /** - * The resolver instance will send its requests from the specified IP address. - * This allows programs to specify outbound interfaces when used on multi-homed - * systems. - * - * If a v4 or v6 address is not specified, it is set to the default and the - * operating system will choose a local address automatically. - * - * The resolver will use the v4 local address when making requests to IPv4 DNS - * servers, and the v6 local address when making requests to IPv6 DNS servers. - * The `rrtype` of resolution requests has no impact on the local address used. - * @since v15.1.0, v14.17.0 - * @param [ipv4='0.0.0.0'] A string representation of an IPv4 address. - * @param [ipv6='::0'] A string representation of an IPv6 address. - */ - setLocalAddress(ipv4?: string, ipv6?: string): void; - setServers: typeof setServers; - } -} -declare module "dns/promises" { - export * from "node:dns/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/domain.d.ts b/skills/flight-finder/node_modules/@types/node/domain.d.ts deleted file mode 100644 index 24a0981..0000000 --- a/skills/flight-finder/node_modules/@types/node/domain.d.ts +++ /dev/null @@ -1,166 +0,0 @@ -/** - * **This module is pending deprecation.** Once a replacement API has been - * finalized, this module will be fully deprecated. Most developers should - * **not** have cause to use this module. Users who absolutely must have - * the functionality that domains provide may rely on it for the time being - * but should expect to have to migrate to a different solution - * in the future. - * - * Domains provide a way to handle multiple different IO operations as a - * single group. If any of the event emitters or callbacks registered to a - * domain emit an `'error'` event, or throw an error, then the domain object - * will be notified, rather than losing the context of the error in the `process.on('uncaughtException')` handler, or causing the program to - * exit immediately with an error code. - * @deprecated Since v1.4.2 - Deprecated - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/domain.js) - */ -declare module "node:domain" { - import { EventEmitter } from "node:events"; - /** - * The `Domain` class encapsulates the functionality of routing errors and - * uncaught exceptions to the active `Domain` object. - * - * To handle the errors that it catches, listen to its `'error'` event. - */ - class Domain extends EventEmitter { - /** - * An array of event emitters that have been explicitly added to the domain. - */ - members: EventEmitter[]; - /** - * The `enter()` method is plumbing used by the `run()`, `bind()`, and `intercept()` methods to set the active domain. It sets `domain.active` and `process.domain` to the domain, and implicitly - * pushes the domain onto the domain - * stack managed by the domain module (see {@link exit} for details on the - * domain stack). The call to `enter()` delimits the beginning of a chain of - * asynchronous calls and I/O operations bound to a domain. - * - * Calling `enter()` changes only the active domain, and does not alter the domain - * itself. `enter()` and `exit()` can be called an arbitrary number of times on a - * single domain. - */ - enter(): void; - /** - * The `exit()` method exits the current domain, popping it off the domain stack. - * Any time execution is going to switch to the context of a different chain of - * asynchronous calls, it's important to ensure that the current domain is exited. - * The call to `exit()` delimits either the end of or an interruption to the chain - * of asynchronous calls and I/O operations bound to a domain. - * - * If there are multiple, nested domains bound to the current execution context, `exit()` will exit any domains nested within this domain. - * - * Calling `exit()` changes only the active domain, and does not alter the domain - * itself. `enter()` and `exit()` can be called an arbitrary number of times on a - * single domain. - */ - exit(): void; - /** - * Run the supplied function in the context of the domain, implicitly - * binding all event emitters, timers, and low-level requests that are - * created in that context. Optionally, arguments can be passed to - * the function. - * - * This is the most basic way to use a domain. - * - * ```js - * import domain from 'node:domain'; - * import fs from 'node:fs'; - * const d = domain.create(); - * d.on('error', (er) => { - * console.error('Caught error!', er); - * }); - * d.run(() => { - * process.nextTick(() => { - * setTimeout(() => { // Simulating some various async stuff - * fs.open('non-existent file', 'r', (er, fd) => { - * if (er) throw er; - * // proceed... - * }); - * }, 100); - * }); - * }); - * ``` - * - * In this example, the `d.on('error')` handler will be triggered, rather - * than crashing the program. - */ - run(fn: (...args: any[]) => T, ...args: any[]): T; - /** - * Explicitly adds an emitter to the domain. If any event handlers called by - * the emitter throw an error, or if the emitter emits an `'error'` event, it - * will be routed to the domain's `'error'` event, just like with implicit - * binding. - * - * If the `EventEmitter` was already bound to a domain, it is removed from that - * one, and bound to this one instead. - * @param emitter emitter to be added to the domain - */ - add(emitter: EventEmitter): void; - /** - * The opposite of {@link add}. Removes domain handling from the - * specified emitter. - * @param emitter emitter to be removed from the domain - */ - remove(emitter: EventEmitter): void; - /** - * The returned function will be a wrapper around the supplied callback - * function. When the returned function is called, any errors that are - * thrown will be routed to the domain's `'error'` event. - * - * ```js - * const d = domain.create(); - * - * function readSomeFile(filename, cb) { - * fs.readFile(filename, 'utf8', d.bind((er, data) => { - * // If this throws, it will also be passed to the domain. - * return cb(er, data ? JSON.parse(data) : null); - * })); - * } - * - * d.on('error', (er) => { - * // An error occurred somewhere. If we throw it now, it will crash the program - * // with the normal line number and stack message. - * }); - * ``` - * @param callback The callback function - * @return The bound function - */ - bind(callback: T): T; - /** - * This method is almost identical to {@link bind}. However, in - * addition to catching thrown errors, it will also intercept `Error` objects sent as the first argument to the function. - * - * In this way, the common `if (err) return callback(err);` pattern can be replaced - * with a single error handler in a single place. - * - * ```js - * const d = domain.create(); - * - * function readSomeFile(filename, cb) { - * fs.readFile(filename, 'utf8', d.intercept((data) => { - * // Note, the first argument is never passed to the - * // callback since it is assumed to be the 'Error' argument - * // and thus intercepted by the domain. - * - * // If this throws, it will also be passed to the domain - * // so the error-handling logic can be moved to the 'error' - * // event on the domain instead of being repeated throughout - * // the program. - * return cb(null, JSON.parse(data)); - * })); - * } - * - * d.on('error', (er) => { - * // An error occurred somewhere. If we throw it now, it will crash the program - * // with the normal line number and stack message. - * }); - * ``` - * @param callback The callback function - * @return The intercepted function - */ - intercept(callback: T): T; - } - function create(): Domain; -} -declare module "domain" { - export * from "node:domain"; -} diff --git a/skills/flight-finder/node_modules/@types/node/events.d.ts b/skills/flight-finder/node_modules/@types/node/events.d.ts deleted file mode 100644 index 6870cf5..0000000 --- a/skills/flight-finder/node_modules/@types/node/events.d.ts +++ /dev/null @@ -1,1047 +0,0 @@ -/** - * Much of the Node.js core API is built around an idiomatic asynchronous - * event-driven architecture in which certain kinds of objects (called "emitters") - * emit named events that cause `Function` objects ("listeners") to be called. - * - * For instance: a `net.Server` object emits an event each time a peer - * connects to it; a `fs.ReadStream` emits an event when the file is opened; - * a `stream` emits an event whenever data is available to be read. - * - * All objects that emit events are instances of the `EventEmitter` class. These - * objects expose an `eventEmitter.on()` function that allows one or more - * functions to be attached to named events emitted by the object. Typically, - * event names are camel-cased strings but any valid JavaScript property key - * can be used. - * - * When the `EventEmitter` object emits an event, all of the functions attached - * to that specific event are called _synchronously_. Any values returned by the - * called listeners are _ignored_ and discarded. - * - * The following example shows a simple `EventEmitter` instance with a single - * listener. The `eventEmitter.on()` method is used to register listeners, while - * the `eventEmitter.emit()` method is used to trigger the event. - * - * ```js - * import { EventEmitter } from 'node:events'; - * - * class MyEmitter extends EventEmitter {} - * - * const myEmitter = new MyEmitter(); - * myEmitter.on('event', () => { - * console.log('an event occurred!'); - * }); - * myEmitter.emit('event'); - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/events.js) - */ -declare module "node:events" { - import { AsyncResource, AsyncResourceOptions } from "node:async_hooks"; - // #region Event map helpers - type EventMap = Record; - type IfEventMap, True, False> = {} extends Events ? False : True; - type Args, EventName extends string | symbol> = IfEventMap< - Events, - EventName extends keyof Events ? Events[EventName] - : EventName extends keyof EventEmitterEventMap ? EventEmitterEventMap[EventName] - : any[], - any[] - >; - type EventNames, EventName extends string | symbol> = IfEventMap< - Events, - EventName | (keyof Events & (string | symbol)) | keyof EventEmitterEventMap, - string | symbol - >; - type Listener, EventName extends string | symbol> = IfEventMap< - Events, - ( - ...args: EventName extends keyof Events ? Events[EventName] - : EventName extends keyof EventEmitterEventMap ? EventEmitterEventMap[EventName] - : any[] - ) => void, - (...args: any[]) => void - >; - interface EventEmitterEventMap { - newListener: [eventName: string | symbol, listener: (...args: any[]) => void]; - removeListener: [eventName: string | symbol, listener: (...args: any[]) => void]; - } - // #endregion - interface EventEmitterOptions { - /** - * It enables - * [automatic capturing of promise rejection](https://nodejs.org/docs/latest-v25.x/api/events.html#capture-rejections-of-promises). - * @default false - */ - captureRejections?: boolean | undefined; - } - /** - * The `EventEmitter` class is defined and exposed by the `node:events` module: - * - * ```js - * import { EventEmitter } from 'node:events'; - * ``` - * - * All `EventEmitter`s emit the event `'newListener'` when new listeners are - * added and `'removeListener'` when existing listeners are removed. - * - * It supports the following option: - * @since v0.1.26 - */ - class EventEmitter = any> { - constructor(options?: EventEmitterOptions); - } - interface EventEmitter = any> extends NodeJS.EventEmitter {} - global { - namespace NodeJS { - interface EventEmitter = any> { - /** - * The `Symbol.for('nodejs.rejection')` method is called in case a - * promise rejection happens when emitting an event and - * `captureRejections` is enabled on the emitter. - * It is possible to use `events.captureRejectionSymbol` in - * place of `Symbol.for('nodejs.rejection')`. - * - * ```js - * import { EventEmitter, captureRejectionSymbol } from 'node:events'; - * - * class MyClass extends EventEmitter { - * constructor() { - * super({ captureRejections: true }); - * } - * - * [captureRejectionSymbol](err, event, ...args) { - * console.log('rejection happened for', event, 'with', err, ...args); - * this.destroy(err); - * } - * - * destroy(err) { - * // Tear the resource down here. - * } - * } - * ``` - * @since v13.4.0, v12.16.0 - */ - [EventEmitter.captureRejectionSymbol]?(error: Error, event: string | symbol, ...args: any[]): void; - /** - * Alias for `emitter.on(eventName, listener)`. - * @since v0.1.26 - */ - addListener(eventName: EventNames, listener: Listener): this; - /** - * Synchronously calls each of the listeners registered for the event named - * `eventName`, in the order they were registered, passing the supplied arguments - * to each. - * - * Returns `true` if the event had listeners, `false` otherwise. - * - * ```js - * import { EventEmitter } from 'node:events'; - * const myEmitter = new EventEmitter(); - * - * // First listener - * myEmitter.on('event', function firstListener() { - * console.log('Helloooo! first listener'); - * }); - * // Second listener - * myEmitter.on('event', function secondListener(arg1, arg2) { - * console.log(`event with parameters ${arg1}, ${arg2} in second listener`); - * }); - * // Third listener - * myEmitter.on('event', function thirdListener(...args) { - * const parameters = args.join(', '); - * console.log(`event with parameters ${parameters} in third listener`); - * }); - * - * console.log(myEmitter.listeners('event')); - * - * myEmitter.emit('event', 1, 2, 3, 4, 5); - * - * // Prints: - * // [ - * // [Function: firstListener], - * // [Function: secondListener], - * // [Function: thirdListener] - * // ] - * // Helloooo! first listener - * // event with parameters 1, 2 in second listener - * // event with parameters 1, 2, 3, 4, 5 in third listener - * ``` - * @since v0.1.26 - */ - emit(eventName: EventNames, ...args: Args): boolean; - /** - * Returns an array listing the events for which the emitter has registered - * listeners. - * - * ```js - * import { EventEmitter } from 'node:events'; - * - * const myEE = new EventEmitter(); - * myEE.on('foo', () => {}); - * myEE.on('bar', () => {}); - * - * const sym = Symbol('symbol'); - * myEE.on(sym, () => {}); - * - * console.log(myEE.eventNames()); - * // Prints: [ 'foo', 'bar', Symbol(symbol) ] - * ``` - * @since v6.0.0 - */ - eventNames(): (string | symbol)[]; - /** - * Returns the current max listener value for the `EventEmitter` which is either - * set by `emitter.setMaxListeners(n)` or defaults to - * `events.defaultMaxListeners`. - * @since v1.0.0 - */ - getMaxListeners(): number; - /** - * Returns the number of listeners listening for the event named `eventName`. - * If `listener` is provided, it will return how many times the listener is found - * in the list of the listeners of the event. - * @since v3.2.0 - * @param eventName The name of the event being listened for - * @param listener The event handler function - */ - listenerCount( - eventName: EventNames, - listener?: Listener, - ): number; - /** - * Returns a copy of the array of listeners for the event named `eventName`. - * - * ```js - * server.on('connection', (stream) => { - * console.log('someone connected!'); - * }); - * console.log(util.inspect(server.listeners('connection'))); - * // Prints: [ [Function] ] - * ``` - * @since v0.1.26 - */ - listeners(eventName: EventNames): Listener[]; - /** - * Alias for `emitter.removeListener()`. - * @since v10.0.0 - */ - off(eventName: EventNames, listener: Listener): this; - /** - * Adds the `listener` function to the end of the listeners array for the - * event named `eventName`. No checks are made to see if the `listener` has - * already been added. Multiple calls passing the same combination of `eventName` - * and `listener` will result in the `listener` being added, and called, multiple - * times. - * - * ```js - * server.on('connection', (stream) => { - * console.log('someone connected!'); - * }); - * ``` - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * - * By default, event listeners are invoked in the order they are added. The - * `emitter.prependListener()` method can be used as an alternative to add the - * event listener to the beginning of the listeners array. - * - * ```js - * import { EventEmitter } from 'node:events'; - * const myEE = new EventEmitter(); - * myEE.on('foo', () => console.log('a')); - * myEE.prependListener('foo', () => console.log('b')); - * myEE.emit('foo'); - * // Prints: - * // b - * // a - * ``` - * @since v0.1.101 - * @param eventName The name of the event. - * @param listener The callback function - */ - on(eventName: EventNames, listener: Listener): this; - /** - * Adds a **one-time** `listener` function for the event named `eventName`. The - * next time `eventName` is triggered, this listener is removed and then invoked. - * - * ```js - * server.once('connection', (stream) => { - * console.log('Ah, we have our first user!'); - * }); - * ``` - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * - * By default, event listeners are invoked in the order they are added. The - * `emitter.prependOnceListener()` method can be used as an alternative to add the - * event listener to the beginning of the listeners array. - * - * ```js - * import { EventEmitter } from 'node:events'; - * const myEE = new EventEmitter(); - * myEE.once('foo', () => console.log('a')); - * myEE.prependOnceListener('foo', () => console.log('b')); - * myEE.emit('foo'); - * // Prints: - * // b - * // a - * ``` - * @since v0.3.0 - * @param eventName The name of the event. - * @param listener The callback function - */ - once(eventName: EventNames, listener: Listener): this; - /** - * Adds the `listener` function to the _beginning_ of the listeners array for the - * event named `eventName`. No checks are made to see if the `listener` has - * already been added. Multiple calls passing the same combination of `eventName` - * and `listener` will result in the `listener` being added, and called, multiple - * times. - * - * ```js - * server.prependListener('connection', (stream) => { - * console.log('someone connected!'); - * }); - * ``` - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * @since v6.0.0 - * @param eventName The name of the event. - * @param listener The callback function - */ - prependListener(eventName: EventNames, listener: Listener): this; - /** - * Adds a **one-time** `listener` function for the event named `eventName` to the - * _beginning_ of the listeners array. The next time `eventName` is triggered, this - * listener is removed, and then invoked. - * - * ```js - * server.prependOnceListener('connection', (stream) => { - * console.log('Ah, we have our first user!'); - * }); - * ``` - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * @since v6.0.0 - * @param eventName The name of the event. - * @param listener The callback function - */ - prependOnceListener( - eventName: EventNames, - listener: Listener, - ): this; - /** - * Returns a copy of the array of listeners for the event named `eventName`, - * including any wrappers (such as those created by `.once()`). - * - * ```js - * import { EventEmitter } from 'node:events'; - * const emitter = new EventEmitter(); - * emitter.once('log', () => console.log('log once')); - * - * // Returns a new Array with a function `onceWrapper` which has a property - * // `listener` which contains the original listener bound above - * const listeners = emitter.rawListeners('log'); - * const logFnWrapper = listeners[0]; - * - * // Logs "log once" to the console and does not unbind the `once` event - * logFnWrapper.listener(); - * - * // Logs "log once" to the console and removes the listener - * logFnWrapper(); - * - * emitter.on('log', () => console.log('log persistently')); - * // Will return a new Array with a single function bound by `.on()` above - * const newListeners = emitter.rawListeners('log'); - * - * // Logs "log persistently" twice - * newListeners[0](); - * emitter.emit('log'); - * ``` - * @since v9.4.0 - */ - rawListeners(eventName: EventNames): Listener[]; - /** - * Removes all listeners, or those of the specified `eventName`. - * - * It is bad practice to remove listeners added elsewhere in the code, - * particularly when the `EventEmitter` instance was created by some other - * component or module (e.g. sockets or file streams). - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * @since v0.1.26 - */ - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: EventNames): this; - /** - * Removes the specified `listener` from the listener array for the event named - * `eventName`. - * - * ```js - * const callback = (stream) => { - * console.log('someone connected!'); - * }; - * server.on('connection', callback); - * // ... - * server.removeListener('connection', callback); - * ``` - * - * `removeListener()` will remove, at most, one instance of a listener from the - * listener array. If any single listener has been added multiple times to the - * listener array for the specified `eventName`, then `removeListener()` must be - * called multiple times to remove each instance. - * - * Once an event is emitted, all listeners attached to it at the - * time of emitting are called in order. This implies that any - * `removeListener()` or `removeAllListeners()` calls _after_ emitting and - * _before_ the last listener finishes execution will not remove them from - * `emit()` in progress. Subsequent events behave as expected. - * - * ```js - * import { EventEmitter } from 'node:events'; - * class MyEmitter extends EventEmitter {} - * const myEmitter = new MyEmitter(); - * - * const callbackA = () => { - * console.log('A'); - * myEmitter.removeListener('event', callbackB); - * }; - * - * const callbackB = () => { - * console.log('B'); - * }; - * - * myEmitter.on('event', callbackA); - * - * myEmitter.on('event', callbackB); - * - * // callbackA removes listener callbackB but it will still be called. - * // Internal listener array at time of emit [callbackA, callbackB] - * myEmitter.emit('event'); - * // Prints: - * // A - * // B - * - * // callbackB is now removed. - * // Internal listener array [callbackA] - * myEmitter.emit('event'); - * // Prints: - * // A - * ``` - * - * Because listeners are managed using an internal array, calling this will - * change the position indexes of any listener registered _after_ the listener - * being removed. This will not impact the order in which listeners are called, - * but it means that any copies of the listener array as returned by - * the `emitter.listeners()` method will need to be recreated. - * - * When a single function has been added as a handler multiple times for a single - * event (as in the example below), `removeListener()` will remove the most - * recently added instance. In the example the `once('ping')` - * listener is removed: - * - * ```js - * import { EventEmitter } from 'node:events'; - * const ee = new EventEmitter(); - * - * function pong() { - * console.log('pong'); - * } - * - * ee.on('ping', pong); - * ee.once('ping', pong); - * ee.removeListener('ping', pong); - * - * ee.emit('ping'); - * ee.emit('ping'); - * ``` - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * @since v0.1.26 - */ - removeListener(eventName: EventNames, listener: Listener): this; - /** - * By default `EventEmitter`s will print a warning if more than `10` listeners are - * added for a particular event. This is a useful default that helps finding - * memory leaks. The `emitter.setMaxListeners()` method allows the limit to be - * modified for this specific `EventEmitter` instance. The value can be set to - * `Infinity` (or `0`) to indicate an unlimited number of listeners. - * - * Returns a reference to the `EventEmitter`, so that calls can be chained. - * @since v0.3.5 - */ - setMaxListeners(n: number): this; - } - } - } - namespace EventEmitter { - export { EventEmitter, EventEmitterEventMap, EventEmitterOptions }; - } - namespace EventEmitter { - interface Abortable { - signal?: AbortSignal | undefined; - } - /** - * See how to write a custom [rejection handler](https://nodejs.org/docs/latest-v25.x/api/events.html#emittersymbolfornodejsrejectionerr-eventname-args). - * @since v13.4.0, v12.16.0 - */ - const captureRejectionSymbol: unique symbol; - /** - * Change the default `captureRejections` option on all new `EventEmitter` objects. - * @since v13.4.0, v12.16.0 - */ - let captureRejections: boolean; - /** - * By default, a maximum of `10` listeners can be registered for any single - * event. This limit can be changed for individual `EventEmitter` instances - * using the `emitter.setMaxListeners(n)` method. To change the default - * for _all_ `EventEmitter` instances, the `events.defaultMaxListeners` - * property can be used. If this value is not a positive number, a `RangeError` - * is thrown. - * - * Take caution when setting the `events.defaultMaxListeners` because the - * change affects _all_ `EventEmitter` instances, including those created before - * the change is made. However, calling `emitter.setMaxListeners(n)` still has - * precedence over `events.defaultMaxListeners`. - * - * This is not a hard limit. The `EventEmitter` instance will allow - * more listeners to be added but will output a trace warning to stderr indicating - * that a "possible EventEmitter memory leak" has been detected. For any single - * `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` - * methods can be used to temporarily avoid this warning: - * - * `defaultMaxListeners` has no effect on `AbortSignal` instances. While it is - * still possible to use `emitter.setMaxListeners(n)` to set a warning limit - * for individual `AbortSignal` instances, per default `AbortSignal` instances will not warn. - * - * ```js - * import { EventEmitter } from 'node:events'; - * const emitter = new EventEmitter(); - * emitter.setMaxListeners(emitter.getMaxListeners() + 1); - * emitter.once('event', () => { - * // do stuff - * emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); - * }); - * ``` - * - * The `--trace-warnings` command-line flag can be used to display the - * stack trace for such warnings. - * - * The emitted warning can be inspected with `process.on('warning')` and will - * have the additional `emitter`, `type`, and `count` properties, referring to - * the event emitter instance, the event's name and the number of attached - * listeners, respectively. - * Its `name` property is set to `'MaxListenersExceededWarning'`. - * @since v0.11.2 - */ - let defaultMaxListeners: number; - /** - * This symbol shall be used to install a listener for only monitoring `'error'` - * events. Listeners installed using this symbol are called before the regular - * `'error'` listeners are called. - * - * Installing a listener using this symbol does not change the behavior once an - * `'error'` event is emitted. Therefore, the process will still crash if no - * regular `'error'` listener is installed. - * @since v13.6.0, v12.17.0 - */ - const errorMonitor: unique symbol; - /** - * Listens once to the `abort` event on the provided `signal`. - * - * Listening to the `abort` event on abort signals is unsafe and may - * lead to resource leaks since another third party with the signal can - * call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change - * this since it would violate the web standard. Additionally, the original - * API makes it easy to forget to remove listeners. - * - * This API allows safely using `AbortSignal`s in Node.js APIs by solving these - * two issues by listening to the event such that `stopImmediatePropagation` does - * not prevent the listener from running. - * - * Returns a disposable so that it may be unsubscribed from more easily. - * - * ```js - * import { addAbortListener } from 'node:events'; - * - * function example(signal) { - * let disposable; - * try { - * signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); - * disposable = addAbortListener(signal, (e) => { - * // Do something when signal is aborted. - * }); - * } finally { - * disposable?.[Symbol.dispose](); - * } - * } - * ``` - * @since v20.5.0 - * @return Disposable that removes the `abort` listener. - */ - function addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable; - /** - * Returns a copy of the array of listeners for the event named `eventName`. - * - * For `EventEmitter`s this behaves exactly the same as calling `.listeners` on - * the emitter. - * - * For `EventTarget`s this is the only way to get the event listeners for the - * event target. This is useful for debugging and diagnostic purposes. - * - * ```js - * import { getEventListeners, EventEmitter } from 'node:events'; - * - * { - * const ee = new EventEmitter(); - * const listener = () => console.log('Events are fun'); - * ee.on('foo', listener); - * console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] - * } - * { - * const et = new EventTarget(); - * const listener = () => console.log('Events are fun'); - * et.addEventListener('foo', listener); - * console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] - * } - * ``` - * @since v15.2.0, v14.17.0 - */ - function getEventListeners(emitter: EventEmitter, name: string | symbol): ((...args: any[]) => void)[]; - function getEventListeners(emitter: EventTarget, name: string): ((...args: any[]) => void)[]; - /** - * Returns the currently set max amount of listeners. - * - * For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on - * the emitter. - * - * For `EventTarget`s this is the only way to get the max event listeners for the - * event target. If the number of event handlers on a single EventTarget exceeds - * the max set, the EventTarget will print a warning. - * - * ```js - * import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; - * - * { - * const ee = new EventEmitter(); - * console.log(getMaxListeners(ee)); // 10 - * setMaxListeners(11, ee); - * console.log(getMaxListeners(ee)); // 11 - * } - * { - * const et = new EventTarget(); - * console.log(getMaxListeners(et)); // 10 - * setMaxListeners(11, et); - * console.log(getMaxListeners(et)); // 11 - * } - * ``` - * @since v19.9.0 - */ - function getMaxListeners(emitter: EventEmitter | EventTarget): number; - /** - * Returns the number of registered listeners for the event named `eventName`. - * - * For `EventEmitter`s this behaves exactly the same as calling `.listenerCount` - * on the emitter. - * - * For `EventTarget`s this is the only way to obtain the listener count. This can - * be useful for debugging and diagnostic purposes. - * @since v0.9.12 - */ - function listenerCount(emitter: EventEmitter, eventName: string | symbol): number; - function listenerCount(emitter: EventTarget, eventName: string): number; - interface OnOptions extends Abortable { - /** - * Names of events that will end the iteration. - */ - close?: readonly string[] | undefined; - /** - * The high watermark. The emitter is paused every time the size of events - * being buffered is higher than it. Supported only on emitters implementing - * `pause()` and `resume()` methods. - * @default Number.MAX_SAFE_INTEGER - */ - highWaterMark?: number | undefined; - /** - * The low watermark. The emitter is resumed every time the size of events - * being buffered is lower than it. Supported only on emitters implementing - * `pause()` and `resume()` methods. - * @default 1 - */ - lowWaterMark?: number | undefined; - } - /** - * ```js - * import { on, EventEmitter } from 'node:events'; - * import process from 'node:process'; - * - * const ee = new EventEmitter(); - * - * // Emit later on - * process.nextTick(() => { - * ee.emit('foo', 'bar'); - * ee.emit('foo', 42); - * }); - * - * for await (const event of on(ee, 'foo')) { - * // The execution of this inner block is synchronous and it - * // processes one event at a time (even with await). Do not use - * // if concurrent execution is required. - * console.log(event); // prints ['bar'] [42] - * } - * // Unreachable here - * ``` - * - * Returns an `AsyncIterator` that iterates `eventName` events. It will throw - * if the `EventEmitter` emits `'error'`. It removes all listeners when - * exiting the loop. The `value` returned by each iteration is an array - * composed of the emitted event arguments. - * - * An `AbortSignal` can be used to cancel waiting on events: - * - * ```js - * import { on, EventEmitter } from 'node:events'; - * import process from 'node:process'; - * - * const ac = new AbortController(); - * - * (async () => { - * const ee = new EventEmitter(); - * - * // Emit later on - * process.nextTick(() => { - * ee.emit('foo', 'bar'); - * ee.emit('foo', 42); - * }); - * - * for await (const event of on(ee, 'foo', { signal: ac.signal })) { - * // The execution of this inner block is synchronous and it - * // processes one event at a time (even with await). Do not use - * // if concurrent execution is required. - * console.log(event); // prints ['bar'] [42] - * } - * // Unreachable here - * })(); - * - * process.nextTick(() => ac.abort()); - * ``` - * @since v13.6.0, v12.16.0 - * @returns `AsyncIterator` that iterates `eventName` events emitted by the `emitter` - */ - function on( - emitter: EventEmitter, - eventName: string | symbol, - options?: OnOptions, - ): NodeJS.AsyncIterator; - function on( - emitter: EventTarget, - eventName: string, - options?: OnOptions, - ): NodeJS.AsyncIterator; - interface OnceOptions extends Abortable {} - /** - * Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given - * event or that is rejected if the `EventEmitter` emits `'error'` while waiting. - * The `Promise` will resolve with an array of all the arguments emitted to the - * given event. - * - * This method is intentionally generic and works with the web platform - * [EventTarget][WHATWG-EventTarget] interface, which has no special - * `'error'` event semantics and does not listen to the `'error'` event. - * - * ```js - * import { once, EventEmitter } from 'node:events'; - * import process from 'node:process'; - * - * const ee = new EventEmitter(); - * - * process.nextTick(() => { - * ee.emit('myevent', 42); - * }); - * - * const [value] = await once(ee, 'myevent'); - * console.log(value); - * - * const err = new Error('kaboom'); - * process.nextTick(() => { - * ee.emit('error', err); - * }); - * - * try { - * await once(ee, 'myevent'); - * } catch (err) { - * console.error('error happened', err); - * } - * ``` - * - * The special handling of the `'error'` event is only used when `events.once()` - * is used to wait for another event. If `events.once()` is used to wait for the - * '`error'` event itself, then it is treated as any other kind of event without - * special handling: - * - * ```js - * import { EventEmitter, once } from 'node:events'; - * - * const ee = new EventEmitter(); - * - * once(ee, 'error') - * .then(([err]) => console.log('ok', err.message)) - * .catch((err) => console.error('error', err.message)); - * - * ee.emit('error', new Error('boom')); - * - * // Prints: ok boom - * ``` - * - * An `AbortSignal` can be used to cancel waiting for the event: - * - * ```js - * import { EventEmitter, once } from 'node:events'; - * - * const ee = new EventEmitter(); - * const ac = new AbortController(); - * - * async function foo(emitter, event, signal) { - * try { - * await once(emitter, event, { signal }); - * console.log('event emitted!'); - * } catch (error) { - * if (error.name === 'AbortError') { - * console.error('Waiting for the event was canceled!'); - * } else { - * console.error('There was an error', error.message); - * } - * } - * } - * - * foo(ee, 'foo', ac.signal); - * ac.abort(); // Prints: Waiting for the event was canceled! - * ``` - * @since v11.13.0, v10.16.0 - */ - function once( - emitter: EventEmitter, - eventName: string | symbol, - options?: OnceOptions, - ): Promise; - function once(emitter: EventTarget, eventName: string, options?: OnceOptions): Promise; - /** - * ```js - * import { setMaxListeners, EventEmitter } from 'node:events'; - * - * const target = new EventTarget(); - * const emitter = new EventEmitter(); - * - * setMaxListeners(5, target, emitter); - * ``` - * @since v15.4.0 - * @param n A non-negative number. The maximum number of listeners per `EventTarget` event. - * @param eventTargets Zero or more `EventTarget` - * or `EventEmitter` instances. If none are specified, `n` is set as the default - * max for all newly created `EventTarget` and `EventEmitter` objects. - * objects. - */ - function setMaxListeners(n: number, ...eventTargets: ReadonlyArray): void; - /** - * This is the interface from which event-emitting Node.js APIs inherit in the types package. - * **It is not intended for consumer use.** - * - * It provides event-mapped definitions similar to EventEmitter, except that its signatures - * are deliberately permissive: they provide type _hinting_, but not rigid type-checking, - * for compatibility reasons. - * - * Classes that inherit directly from EventEmitter in JavaScript can inherit directly from - * this interface in the type definitions. Classes that are more than one inheritance level - * away from EventEmitter (eg. `net.Socket` > `stream.Duplex` > `EventEmitter`) must instead - * copy these method definitions into the derived class. Search "#region InternalEventEmitter" - * for examples. - * @internal - */ - interface InternalEventEmitter> extends EventEmitter { - addListener(eventName: E, listener: (...args: T[E]) => void): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: T[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount(eventName: E, listener?: (...args: T[E]) => void): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: T[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: T[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: T[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once(eventName: E, listener: (...args: T[E]) => void): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener(eventName: E, listener: (...args: T[E]) => void): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener(eventName: E, listener: (...args: T[E]) => void): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: T[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener(eventName: E, listener: (...args: T[E]) => void): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - } - interface EventEmitterReferencingAsyncResource extends AsyncResource { - readonly eventEmitter: EventEmitterAsyncResource; - } - interface EventEmitterAsyncResourceOptions extends AsyncResourceOptions, EventEmitterOptions { - /** - * The type of async event. - * @default new.target.name - */ - name?: string | undefined; - } - /** - * Integrates `EventEmitter` with `AsyncResource` for `EventEmitter`s that - * require manual async tracking. Specifically, all events emitted by instances - * of `events.EventEmitterAsyncResource` will run within its [async context](https://nodejs.org/docs/latest-v25.x/api/async_context.html). - * - * ```js - * import { EventEmitterAsyncResource, EventEmitter } from 'node:events'; - * import { notStrictEqual, strictEqual } from 'node:assert'; - * import { executionAsyncId, triggerAsyncId } from 'node:async_hooks'; - * - * // Async tracking tooling will identify this as 'Q'. - * const ee1 = new EventEmitterAsyncResource({ name: 'Q' }); - * - * // 'foo' listeners will run in the EventEmitters async context. - * ee1.on('foo', () => { - * strictEqual(executionAsyncId(), ee1.asyncId); - * strictEqual(triggerAsyncId(), ee1.triggerAsyncId); - * }); - * - * const ee2 = new EventEmitter(); - * - * // 'foo' listeners on ordinary EventEmitters that do not track async - * // context, however, run in the same async context as the emit(). - * ee2.on('foo', () => { - * notStrictEqual(executionAsyncId(), ee2.asyncId); - * notStrictEqual(triggerAsyncId(), ee2.triggerAsyncId); - * }); - * - * Promise.resolve().then(() => { - * ee1.emit('foo'); - * ee2.emit('foo'); - * }); - * ``` - * - * The `EventEmitterAsyncResource` class has the same methods and takes the - * same options as `EventEmitter` and `AsyncResource` themselves. - * @since v17.4.0, v16.14.0 - */ - class EventEmitterAsyncResource extends EventEmitter { - constructor(options?: EventEmitterAsyncResourceOptions); - /** - * The unique `asyncId` assigned to the resource. - */ - readonly asyncId: number; - /** - * The returned `AsyncResource` object has an additional `eventEmitter` property - * that provides a reference to this `EventEmitterAsyncResource`. - */ - readonly asyncResource: EventEmitterReferencingAsyncResource; - /** - * Call all `destroy` hooks. This should only ever be called once. An error will - * be thrown if it is called more than once. This **must** be manually called. If - * the resource is left to be collected by the GC then the `destroy` hooks will - * never be called. - */ - emitDestroy(): void; - /** - * The same `triggerAsyncId` that is passed to the - * `AsyncResource` constructor. - */ - readonly triggerAsyncId: number; - } - /** - * The `NodeEventTarget` is a Node.js-specific extension to `EventTarget` - * that emulates a subset of the `EventEmitter` API. - * @since v14.5.0 - */ - interface NodeEventTarget extends EventTarget { - /** - * Node.js-specific extension to the `EventTarget` class that emulates the - * equivalent `EventEmitter` API. The only difference between `addListener()` and - * `addEventListener()` is that `addListener()` will return a reference to the - * `EventTarget`. - * @since v14.5.0 - */ - addListener(type: string, listener: (arg: any) => void): this; - /** - * Node.js-specific extension to the `EventTarget` class that dispatches the - * `arg` to the list of handlers for `type`. - * @since v15.2.0 - * @returns `true` if event listeners registered for the `type` exist, - * otherwise `false`. - */ - emit(type: string, arg: any): boolean; - /** - * Node.js-specific extension to the `EventTarget` class that returns an array - * of event `type` names for which event listeners are registered. - * @since 14.5.0 - */ - eventNames(): string[]; - /** - * Node.js-specific extension to the `EventTarget` class that returns the number - * of event listeners registered for the `type`. - * @since v14.5.0 - */ - listenerCount(type: string): number; - /** - * Node.js-specific extension to the `EventTarget` class that sets the number - * of max event listeners as `n`. - * @since v14.5.0 - */ - setMaxListeners(n: number): void; - /** - * Node.js-specific extension to the `EventTarget` class that returns the number - * of max event listeners. - * @since v14.5.0 - */ - getMaxListeners(): number; - /** - * Node.js-specific alias for `eventTarget.removeEventListener()`. - * @since v14.5.0 - */ - off(type: string, listener: (arg: any) => void, options?: EventListenerOptions): this; - /** - * Node.js-specific alias for `eventTarget.addEventListener()`. - * @since v14.5.0 - */ - on(type: string, listener: (arg: any) => void): this; - /** - * Node.js-specific extension to the `EventTarget` class that adds a `once` - * listener for the given event `type`. This is equivalent to calling `on` - * with the `once` option set to `true`. - * @since v14.5.0 - */ - once(type: string, listener: (arg: any) => void): this; - /** - * Node.js-specific extension to the `EventTarget` class. If `type` is specified, - * removes all registered listeners for `type`, otherwise removes all registered - * listeners. - * @since v14.5.0 - */ - removeAllListeners(type?: string): this; - /** - * Node.js-specific extension to the `EventTarget` class that removes the - * `listener` for the given `type`. The only difference between `removeListener()` - * and `removeEventListener()` is that `removeListener()` will return a reference - * to the `EventTarget`. - * @since v14.5.0 - */ - removeListener(type: string, listener: (arg: any) => void, options?: EventListenerOptions): this; - } - /** @internal */ - type InternalEventTargetEventProperties = { - [K in keyof T & string as `on${K}`]: ((ev: T[K]) => void) | null; - }; - } - export = EventEmitter; -} -declare module "events" { - import events = require("node:events"); - export = events; -} diff --git a/skills/flight-finder/node_modules/@types/node/fs.d.ts b/skills/flight-finder/node_modules/@types/node/fs.d.ts deleted file mode 100644 index 4e16bbc..0000000 --- a/skills/flight-finder/node_modules/@types/node/fs.d.ts +++ /dev/null @@ -1,4678 +0,0 @@ -/** - * The `node:fs` module enables interacting with the file system in a - * way modeled on standard POSIX functions. - * - * To use the promise-based APIs: - * - * ```js - * import * as fs from 'node:fs/promises'; - * ``` - * - * To use the callback and sync APIs: - * - * ```js - * import * as fs from 'node:fs'; - * ``` - * - * All file system operations have synchronous, callback, and promise-based - * forms, and are accessible using both CommonJS syntax and ES6 Modules (ESM). - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/fs.js) - */ -declare module "node:fs" { - import { NonSharedBuffer } from "node:buffer"; - import { Abortable, EventEmitter, InternalEventEmitter } from "node:events"; - import { FileHandle } from "node:fs/promises"; - import * as stream from "node:stream"; - import { URL } from "node:url"; - /** - * Valid types for path values in "fs". - */ - type PathLike = string | Buffer | URL; - type PathOrFileDescriptor = PathLike | number; - type TimeLike = string | number | Date; - type NoParamCallback = (err: NodeJS.ErrnoException | null) => void; - type BufferEncodingOption = - | "buffer" - | { - encoding: "buffer"; - }; - interface ObjectEncodingOptions { - encoding?: BufferEncoding | null | undefined; - } - type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null; - type OpenMode = number | string; - type Mode = number | string; - interface StatsBase { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - dev: T; - ino: T; - mode: T; - nlink: T; - uid: T; - gid: T; - rdev: T; - size: T; - blksize: T; - blocks: T; - atimeMs: T; - mtimeMs: T; - ctimeMs: T; - birthtimeMs: T; - atime: Date; - mtime: Date; - ctime: Date; - birthtime: Date; - } - interface Stats extends StatsBase {} - /** - * A `fs.Stats` object provides information about a file. - * - * Objects returned from {@link stat}, {@link lstat}, {@link fstat}, and - * their synchronous counterparts are of this type. - * If `bigint` in the `options` passed to those methods is true, the numeric values - * will be `bigint` instead of `number`, and the object will contain additional - * nanosecond-precision properties suffixed with `Ns`. `Stat` objects are not to be created directly using the `new` keyword. - * - * ```console - * Stats { - * dev: 2114, - * ino: 48064969, - * mode: 33188, - * nlink: 1, - * uid: 85, - * gid: 100, - * rdev: 0, - * size: 527, - * blksize: 4096, - * blocks: 8, - * atimeMs: 1318289051000.1, - * mtimeMs: 1318289051000.1, - * ctimeMs: 1318289051000.1, - * birthtimeMs: 1318289051000.1, - * atime: Mon, 10 Oct 2011 23:24:11 GMT, - * mtime: Mon, 10 Oct 2011 23:24:11 GMT, - * ctime: Mon, 10 Oct 2011 23:24:11 GMT, - * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } - * ``` - * - * `bigint` version: - * - * ```console - * BigIntStats { - * dev: 2114n, - * ino: 48064969n, - * mode: 33188n, - * nlink: 1n, - * uid: 85n, - * gid: 100n, - * rdev: 0n, - * size: 527n, - * blksize: 4096n, - * blocks: 8n, - * atimeMs: 1318289051000n, - * mtimeMs: 1318289051000n, - * ctimeMs: 1318289051000n, - * birthtimeMs: 1318289051000n, - * atimeNs: 1318289051000000000n, - * mtimeNs: 1318289051000000000n, - * ctimeNs: 1318289051000000000n, - * birthtimeNs: 1318289051000000000n, - * atime: Mon, 10 Oct 2011 23:24:11 GMT, - * mtime: Mon, 10 Oct 2011 23:24:11 GMT, - * ctime: Mon, 10 Oct 2011 23:24:11 GMT, - * birthtime: Mon, 10 Oct 2011 23:24:11 GMT } - * ``` - * @since v0.1.21 - */ - class Stats { - private constructor(); - } - interface StatsFsBase { - /** Type of file system. */ - type: T; - /** Optimal transfer block size. */ - bsize: T; - /** Total data blocks in file system. */ - blocks: T; - /** Free blocks in file system. */ - bfree: T; - /** Available blocks for unprivileged users */ - bavail: T; - /** Total file nodes in file system. */ - files: T; - /** Free file nodes in file system. */ - ffree: T; - } - interface StatsFs extends StatsFsBase {} - /** - * Provides information about a mounted file system. - * - * Objects returned from {@link statfs} and its synchronous counterpart are of - * this type. If `bigint` in the `options` passed to those methods is `true`, the - * numeric values will be `bigint` instead of `number`. - * - * ```console - * StatFs { - * type: 1397114950, - * bsize: 4096, - * blocks: 121938943, - * bfree: 61058895, - * bavail: 61058895, - * files: 999, - * ffree: 1000000 - * } - * ``` - * - * `bigint` version: - * - * ```console - * StatFs { - * type: 1397114950n, - * bsize: 4096n, - * blocks: 121938943n, - * bfree: 61058895n, - * bavail: 61058895n, - * files: 999n, - * ffree: 1000000n - * } - * ``` - * @since v19.6.0, v18.15.0 - */ - class StatsFs {} - interface BigIntStatsFs extends StatsFsBase {} - interface StatFsOptions { - bigint?: boolean | undefined; - } - /** - * A representation of a directory entry, which can be a file or a subdirectory - * within the directory, as returned by reading from an `fs.Dir`. The - * directory entry is a combination of the file name and file type pairs. - * - * Additionally, when {@link readdir} or {@link readdirSync} is called with - * the `withFileTypes` option set to `true`, the resulting array is filled with `fs.Dirent` objects, rather than strings or `Buffer` s. - * @since v10.10.0 - */ - class Dirent { - /** - * Returns `true` if the `fs.Dirent` object describes a regular file. - * @since v10.10.0 - */ - isFile(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a file system - * directory. - * @since v10.10.0 - */ - isDirectory(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a block device. - * @since v10.10.0 - */ - isBlockDevice(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a character device. - * @since v10.10.0 - */ - isCharacterDevice(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a symbolic link. - * @since v10.10.0 - */ - isSymbolicLink(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a first-in-first-out - * (FIFO) pipe. - * @since v10.10.0 - */ - isFIFO(): boolean; - /** - * Returns `true` if the `fs.Dirent` object describes a socket. - * @since v10.10.0 - */ - isSocket(): boolean; - /** - * The file name that this `fs.Dirent` object refers to. The type of this - * value is determined by the `options.encoding` passed to {@link readdir} or {@link readdirSync}. - * @since v10.10.0 - */ - name: Name; - /** - * The path to the parent directory of the file this `fs.Dirent` object refers to. - * @since v20.12.0, v18.20.0 - */ - parentPath: string; - } - /** - * A class representing a directory stream. - * - * Created by {@link opendir}, {@link opendirSync}, or `fsPromises.opendir()`. - * - * ```js - * import { opendir } from 'node:fs/promises'; - * - * try { - * const dir = await opendir('./'); - * for await (const dirent of dir) - * console.log(dirent.name); - * } catch (err) { - * console.error(err); - * } - * ``` - * - * When using the async iterator, the `fs.Dir` object will be automatically - * closed after the iterator exits. - * @since v12.12.0 - */ - class Dir implements AsyncIterable { - /** - * The read-only path of this directory as was provided to {@link opendir},{@link opendirSync}, or `fsPromises.opendir()`. - * @since v12.12.0 - */ - readonly path: string; - /** - * Asynchronously iterates over the directory via `readdir(3)` until all entries have been read. - */ - [Symbol.asyncIterator](): NodeJS.AsyncIterator; - /** - * Asynchronously close the directory's underlying resource handle. - * Subsequent reads will result in errors. - * - * A promise is returned that will be fulfilled after the resource has been - * closed. - * @since v12.12.0 - */ - close(): Promise; - close(cb: NoParamCallback): void; - /** - * Synchronously close the directory's underlying resource handle. - * Subsequent reads will result in errors. - * @since v12.12.0 - */ - closeSync(): void; - /** - * Asynchronously read the next directory entry via [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) as an `fs.Dirent`. - * - * A promise is returned that will be fulfilled with an `fs.Dirent`, or `null` if there are no more directory entries to read. - * - * Directory entries returned by this function are in no particular order as - * provided by the operating system's underlying directory mechanisms. - * Entries added or removed while iterating over the directory might not be - * included in the iteration results. - * @since v12.12.0 - * @return containing {fs.Dirent|null} - */ - read(): Promise; - read(cb: (err: NodeJS.ErrnoException | null, dirEnt: Dirent | null) => void): void; - /** - * Synchronously read the next directory entry as an `fs.Dirent`. See the - * POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more detail. - * - * If there are no more directory entries to read, `null` will be returned. - * - * Directory entries returned by this function are in no particular order as - * provided by the operating system's underlying directory mechanisms. - * Entries added or removed while iterating over the directory might not be - * included in the iteration results. - * @since v12.12.0 - */ - readSync(): Dirent | null; - /** - * Calls `dir.close()` if the directory handle is open, and returns a promise that - * fulfills when disposal is complete. - * @since v24.1.0 - */ - [Symbol.asyncDispose](): Promise; - /** - * Calls `dir.closeSync()` if the directory handle is open, and returns - * `undefined`. - * @since v24.1.0 - */ - [Symbol.dispose](): void; - } - /** - * Class: fs.StatWatcher - * @since v14.3.0, v12.20.0 - * Extends `EventEmitter` - * A successful call to {@link watchFile} method will return a new fs.StatWatcher object. - */ - interface StatWatcher extends EventEmitter { - /** - * When called, requests that the Node.js event loop _not_ exit so long as the `fs.StatWatcher` is active. Calling `watcher.ref()` multiple times will have - * no effect. - * - * By default, all `fs.StatWatcher` objects are "ref'ed", making it normally - * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been - * called previously. - * @since v14.3.0, v12.20.0 - */ - ref(): this; - /** - * When called, the active `fs.StatWatcher` object will not require the Node.js - * event loop to remain active. If there is no other activity keeping the - * event loop running, the process may exit before the `fs.StatWatcher` object's - * callback is invoked. Calling `watcher.unref()` multiple times will have - * no effect. - * @since v14.3.0, v12.20.0 - */ - unref(): this; - } - interface FSWatcherEventMap { - "change": [eventType: string, filename: string | NonSharedBuffer]; - "close": []; - "error": [error: Error]; - } - interface FSWatcher extends InternalEventEmitter { - /** - * Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable. - * @since v0.5.8 - */ - close(): void; - /** - * When called, requests that the Node.js event loop _not_ exit so long as the `fs.FSWatcher` is active. Calling `watcher.ref()` multiple times will have - * no effect. - * - * By default, all `fs.FSWatcher` objects are "ref'ed", making it normally - * unnecessary to call `watcher.ref()` unless `watcher.unref()` had been - * called previously. - * @since v14.3.0, v12.20.0 - */ - ref(): this; - /** - * When called, the active `fs.FSWatcher` object will not require the Node.js - * event loop to remain active. If there is no other activity keeping the - * event loop running, the process may exit before the `fs.FSWatcher` object's - * callback is invoked. Calling `watcher.unref()` multiple times will have - * no effect. - * @since v14.3.0, v12.20.0 - */ - unref(): this; - } - interface ReadStreamEventMap extends stream.ReadableEventMap { - "close": []; - "data": [chunk: string | NonSharedBuffer]; - "open": [fd: number]; - "ready": []; - } - /** - * Instances of `fs.ReadStream` are created and returned using the {@link createReadStream} function. - * @since v0.1.93 - */ - class ReadStream extends stream.Readable { - close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; - /** - * The number of bytes that have been read so far. - * @since v6.4.0 - */ - bytesRead: number; - /** - * The path to the file the stream is reading from as specified in the first - * argument to `fs.createReadStream()`. If `path` is passed as a string, then`readStream.path` will be a string. If `path` is passed as a `Buffer`, then`readStream.path` will be a - * `Buffer`. If `fd` is specified, then`readStream.path` will be `undefined`. - * @since v0.1.93 - */ - path: string | Buffer; - /** - * This property is `true` if the underlying file has not been opened yet, - * i.e. before the `'ready'` event is emitted. - * @since v11.2.0, v10.16.0 - */ - pending: boolean; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ReadStreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ReadStreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ReadStreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: ReadStreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: ReadStreamEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: ReadStreamEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ReadStreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ReadStreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ReadStreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: ReadStreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ReadStreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface Utf8StreamOptions { - /** - * Appends writes to dest file instead of truncating it. - * @default true - */ - append?: boolean | undefined; - /** - * Which type of data you can send to the write - * function, supported values are `'utf8'` or `'buffer'`. - * @default 'utf8' - */ - contentMode?: "utf8" | "buffer" | undefined; - /** - * A path to a file to be written to (mode controlled by the - * append option). - */ - dest?: string | undefined; - /** - * A file descriptor, something that is returned by `fs.open()` - * or `fs.openSync()`. - */ - fd?: number | undefined; - /** - * An object that has the same API as the `fs` module, useful - * for mocking, testing, or customizing the behavior of the stream. - */ - fs?: object | undefined; - /** - * Perform a `fs.fsyncSync()` every time a write is - * completed. - */ - fsync?: boolean | undefined; - /** - * The maximum length of the internal buffer. If a write - * operation would cause the buffer to exceed `maxLength`, the data written is - * dropped and a drop event is emitted with the dropped data - */ - maxLength?: number | undefined; - /** - * The maximum number of bytes that can be written; - * @default 16384 - */ - maxWrite?: number | undefined; - /** - * The minimum length of the internal buffer that is - * required to be full before flushing. - */ - minLength?: number | undefined; - /** - * Ensure directory for `dest` file exists when true. - * @default false - */ - mkdir?: boolean | undefined; - /** - * Specify the creating file mode (see `fs.open()`). - */ - mode?: number | string | undefined; - /** - * Calls flush every `periodicFlush` milliseconds. - */ - periodicFlush?: number | undefined; - /** - * A function that will be called when `write()`, - * `writeSync()`, or `flushSync()` encounters an `EAGAIN` or `EBUSY` error. - * If the return value is `true` the operation will be retried, otherwise it - * will bubble the error. The `err` is the error that caused this function to - * be called, `writeBufferLen` is the length of the buffer that was written, - * and `remainingBufferLen` is the length of the remaining buffer that the - * stream did not try to write. - */ - retryEAGAIN?: ((err: Error | null, writeBufferLen: number, remainingBufferLen: number) => boolean) | undefined; - /** - * Perform writes synchronously. - */ - sync?: boolean | undefined; - } - interface Utf8StreamEventMap { - "close": []; - "drain": []; - "drop": [data: string | Buffer]; - "error": [error: Error]; - "finish": []; - "ready": []; - "write": [n: number]; - } - /** - * An optimized UTF-8 stream writer that allows for flushing all the internal - * buffering on demand. It handles `EAGAIN` errors correctly, allowing for - * customization, for example, by dropping content if the disk is busy. - * @since v24.6.0 - * @experimental - */ - class Utf8Stream implements EventEmitter { - constructor(options: Utf8StreamOptions); - /** - * Whether the stream is appending to the file or truncating it. - */ - readonly append: boolean; - /** - * The type of data that can be written to the stream. Supported - * values are `'utf8'` or `'buffer'`. - * @default 'utf8' - */ - readonly contentMode: "utf8" | "buffer"; - /** - * Close the stream immediately, without flushing the internal buffer. - */ - destroy(): void; - /** - * Close the stream gracefully, flushing the internal buffer before closing. - */ - end(): void; - /** - * The file descriptor that is being written to. - */ - readonly fd: number; - /** - * The file that is being written to. - */ - readonly file: string; - /** - * Writes the current buffer to the file if a write was not in progress. Do - * nothing if `minLength` is zero or if it is already writing. - */ - flush(callback: (err: Error | null) => void): void; - /** - * Flushes the buffered data synchronously. This is a costly operation. - */ - flushSync(): void; - /** - * Whether the stream is performing a `fs.fsyncSync()` after every - * write operation. - */ - readonly fsync: boolean; - /** - * The maximum length of the internal buffer. If a write - * operation would cause the buffer to exceed `maxLength`, the data written is - * dropped and a drop event is emitted with the dropped data. - */ - readonly maxLength: number; - /** - * The minimum length of the internal buffer that is required to be - * full before flushing. - */ - readonly minLength: number; - /** - * Whether the stream should ensure that the directory for the - * `dest` file exists. If `true`, it will create the directory if it does not - * exist. - * @default false - */ - readonly mkdir: boolean; - /** - * The mode of the file that is being written to. - */ - readonly mode: number | string; - /** - * The number of milliseconds between flushes. If set to `0`, no - * periodic flushes will be performed. - */ - readonly periodicFlush: number; - /** - * Reopen the file in place, useful for log rotation. - * @param file A path to a file to be written to (mode - * controlled by the append option). - */ - reopen(file: PathLike): void; - /** - * Whether the stream is writing synchronously or asynchronously. - */ - readonly sync: boolean; - /** - * When the `options.contentMode` is set to `'utf8'` when the stream is created, - * the `data` argument must be a string. If the `contentMode` is set to `'buffer'`, - * the `data` argument must be a `Buffer`. - * @param data The data to write. - */ - write(data: string | Buffer): boolean; - /** - * Whether the stream is currently writing data to the file. - */ - readonly writing: boolean; - /** - * Calls `utf8Stream.destroy()`. - */ - [Symbol.dispose](): void; - } - interface Utf8Stream extends InternalEventEmitter {} - interface WriteStreamEventMap extends stream.WritableEventMap { - "close": []; - "open": [fd: number]; - "ready": []; - } - /** - * Instances of `fs.WriteStream` are created and returned using the {@link createWriteStream} function. - * @since v0.1.93 - */ - class WriteStream extends stream.Writable { - /** - * Closes `writeStream`. Optionally accepts a - * callback that will be executed once the `writeStream`is closed. - * @since v0.9.4 - */ - close(callback?: (err?: NodeJS.ErrnoException | null) => void): void; - /** - * The number of bytes written so far. Does not include data that is still queued - * for writing. - * @since v0.4.7 - */ - bytesWritten: number; - /** - * The path to the file the stream is writing to as specified in the first - * argument to {@link createWriteStream}. If `path` is passed as a string, then`writeStream.path` will be a string. If `path` is passed as a `Buffer`, then`writeStream.path` will be a - * `Buffer`. - * @since v0.1.93 - */ - path: string | Buffer; - /** - * This property is `true` if the underlying file has not been opened yet, - * i.e. before the `'ready'` event is emitted. - * @since v11.2.0 - */ - pending: boolean; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: WriteStreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: WriteStreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: WriteStreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: WriteStreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - /** - * Asynchronously rename file at `oldPath` to the pathname provided - * as `newPath`. In the case that `newPath` already exists, it will - * be overwritten. If there is a directory at `newPath`, an error will - * be raised instead. No arguments other than a possible exception are - * given to the completion callback. - * - * See also: [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html). - * - * ```js - * import { rename } from 'node:fs'; - * - * rename('oldFile.txt', 'newFile.txt', (err) => { - * if (err) throw err; - * console.log('Rename complete!'); - * }); - * ``` - * @since v0.0.2 - */ - function rename(oldPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; - namespace rename { - /** - * Asynchronous rename(2) - Change the name or location of a file or directory. - * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(oldPath: PathLike, newPath: PathLike): Promise; - } - /** - * Renames the file from `oldPath` to `newPath`. Returns `undefined`. - * - * See the POSIX [`rename(2)`](http://man7.org/linux/man-pages/man2/rename.2.html) documentation for more details. - * @since v0.1.21 - */ - function renameSync(oldPath: PathLike, newPath: PathLike): void; - /** - * Truncates the file. No arguments other than a possible exception are - * given to the completion callback. A file descriptor can also be passed as the - * first argument. In this case, `fs.ftruncate()` is called. - * - * ```js - * import { truncate } from 'node:fs'; - * // Assuming that 'path/file.txt' is a regular file. - * truncate('path/file.txt', (err) => { - * if (err) throw err; - * console.log('path/file.txt was truncated'); - * }); - * ``` - * - * Passing a file descriptor is deprecated and may result in an error being thrown - * in the future. - * - * See the POSIX [`truncate(2)`](http://man7.org/linux/man-pages/man2/truncate.2.html) documentation for more details. - * @since v0.8.6 - * @param [len=0] - */ - function truncate(path: PathLike, len: number | undefined, callback: NoParamCallback): void; - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function truncate(path: PathLike, callback: NoParamCallback): void; - namespace truncate { - /** - * Asynchronous truncate(2) - Truncate a file to a specified length. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param len If not specified, defaults to `0`. - */ - function __promisify__(path: PathLike, len?: number): Promise; - } - /** - * Truncates the file. Returns `undefined`. A file descriptor can also be - * passed as the first argument. In this case, `fs.ftruncateSync()` is called. - * - * Passing a file descriptor is deprecated and may result in an error being thrown - * in the future. - * @since v0.8.6 - * @param [len=0] - */ - function truncateSync(path: PathLike, len?: number): void; - /** - * Truncates the file descriptor. No arguments other than a possible exception are - * given to the completion callback. - * - * See the POSIX [`ftruncate(2)`](http://man7.org/linux/man-pages/man2/ftruncate.2.html) documentation for more detail. - * - * If the file referred to by the file descriptor was larger than `len` bytes, only - * the first `len` bytes will be retained in the file. - * - * For example, the following program retains only the first four bytes of the - * file: - * - * ```js - * import { open, close, ftruncate } from 'node:fs'; - * - * function closeFd(fd) { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * - * open('temp.txt', 'r+', (err, fd) => { - * if (err) throw err; - * - * try { - * ftruncate(fd, 4, (err) => { - * closeFd(fd); - * if (err) throw err; - * }); - * } catch (err) { - * closeFd(fd); - * if (err) throw err; - * } - * }); - * ``` - * - * If the file previously was shorter than `len` bytes, it is extended, and the - * extended part is filled with null bytes (`'\0'`): - * - * If `len` is negative then `0` will be used. - * @since v0.8.6 - * @param [len=0] - */ - function ftruncate(fd: number, len: number | undefined, callback: NoParamCallback): void; - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - */ - function ftruncate(fd: number, callback: NoParamCallback): void; - namespace ftruncate { - /** - * Asynchronous ftruncate(2) - Truncate a file to a specified length. - * @param fd A file descriptor. - * @param len If not specified, defaults to `0`. - */ - function __promisify__(fd: number, len?: number): Promise; - } - /** - * Truncates the file descriptor. Returns `undefined`. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link ftruncate}. - * @since v0.8.6 - * @param [len=0] - */ - function ftruncateSync(fd: number, len?: number): void; - /** - * Asynchronously changes owner and group of a file. No arguments other than a - * possible exception are given to the completion callback. - * - * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. - * @since v0.1.97 - */ - function chown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; - namespace chown { - /** - * Asynchronous chown(2) - Change ownership of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike, uid: number, gid: number): Promise; - } - /** - * Synchronously changes owner and group of a file. Returns `undefined`. - * This is the synchronous version of {@link chown}. - * - * See the POSIX [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html) documentation for more detail. - * @since v0.1.97 - */ - function chownSync(path: PathLike, uid: number, gid: number): void; - /** - * Sets the owner of the file. No arguments other than a possible exception are - * given to the completion callback. - * - * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. - * @since v0.4.7 - */ - function fchown(fd: number, uid: number, gid: number, callback: NoParamCallback): void; - namespace fchown { - /** - * Asynchronous fchown(2) - Change ownership of a file. - * @param fd A file descriptor. - */ - function __promisify__(fd: number, uid: number, gid: number): Promise; - } - /** - * Sets the owner of the file. Returns `undefined`. - * - * See the POSIX [`fchown(2)`](http://man7.org/linux/man-pages/man2/fchown.2.html) documentation for more detail. - * @since v0.4.7 - * @param uid The file's new owner's user id. - * @param gid The file's new group's group id. - */ - function fchownSync(fd: number, uid: number, gid: number): void; - /** - * Set the owner of the symbolic link. No arguments other than a possible - * exception are given to the completion callback. - * - * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more detail. - */ - function lchown(path: PathLike, uid: number, gid: number, callback: NoParamCallback): void; - namespace lchown { - /** - * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike, uid: number, gid: number): Promise; - } - /** - * Set the owner for the path. Returns `undefined`. - * - * See the POSIX [`lchown(2)`](http://man7.org/linux/man-pages/man2/lchown.2.html) documentation for more details. - * @param uid The file's new owner's user id. - * @param gid The file's new group's group id. - */ - function lchownSync(path: PathLike, uid: number, gid: number): void; - /** - * Changes the access and modification times of a file in the same way as {@link utimes}, with the difference that if the path refers to a symbolic - * link, then the link is not dereferenced: instead, the timestamps of the - * symbolic link itself are changed. - * - * No arguments other than a possible exception are given to the completion - * callback. - * @since v14.5.0, v12.19.0 - */ - function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; - namespace lutimes { - /** - * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, - * with the difference that if the path refers to a symbolic link, then the link is not - * dereferenced: instead, the timestamps of the symbolic link itself are changed. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; - } - /** - * Change the file system timestamps of the symbolic link referenced by `path`. - * Returns `undefined`, or throws an exception when parameters are incorrect or - * the operation fails. This is the synchronous version of {@link lutimes}. - * @since v14.5.0, v12.19.0 - */ - function lutimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; - /** - * Asynchronously changes the permissions of a file. No arguments other than a - * possible exception are given to the completion callback. - * - * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. - * - * ```js - * import { chmod } from 'node:fs'; - * - * chmod('my_file.txt', 0o775, (err) => { - * if (err) throw err; - * console.log('The permissions for file "my_file.txt" have been changed!'); - * }); - * ``` - * @since v0.1.30 - */ - function chmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; - namespace chmod { - /** - * Asynchronous chmod(2) - Change permissions of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(path: PathLike, mode: Mode): Promise; - } - /** - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link chmod}. - * - * See the POSIX [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html) documentation for more detail. - * @since v0.6.7 - */ - function chmodSync(path: PathLike, mode: Mode): void; - /** - * Sets the permissions on the file. No arguments other than a possible exception - * are given to the completion callback. - * - * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. - * @since v0.4.7 - */ - function fchmod(fd: number, mode: Mode, callback: NoParamCallback): void; - namespace fchmod { - /** - * Asynchronous fchmod(2) - Change permissions of a file. - * @param fd A file descriptor. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(fd: number, mode: Mode): Promise; - } - /** - * Sets the permissions on the file. Returns `undefined`. - * - * See the POSIX [`fchmod(2)`](http://man7.org/linux/man-pages/man2/fchmod.2.html) documentation for more detail. - * @since v0.4.7 - */ - function fchmodSync(fd: number, mode: Mode): void; - /** - * Changes the permissions on a symbolic link. No arguments other than a possible - * exception are given to the completion callback. - * - * This method is only implemented on macOS. - * - * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. - * @deprecated Since v0.4.7 - */ - function lchmod(path: PathLike, mode: Mode, callback: NoParamCallback): void; - /** @deprecated */ - namespace lchmod { - /** - * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. - */ - function __promisify__(path: PathLike, mode: Mode): Promise; - } - /** - * Changes the permissions on a symbolic link. Returns `undefined`. - * - * This method is only implemented on macOS. - * - * See the POSIX [`lchmod(2)`](https://www.freebsd.org/cgi/man.cgi?query=lchmod&sektion=2) documentation for more detail. - * @deprecated Since v0.4.7 - */ - function lchmodSync(path: PathLike, mode: Mode): void; - /** - * Asynchronous [`stat(2)`](http://man7.org/linux/man-pages/man2/stat.2.html). The callback gets two arguments `(err, stats)` where`stats` is an `fs.Stats` object. - * - * In case of an error, the `err.code` will be one of `Common System Errors`. - * - * {@link stat} follows symbolic links. Use {@link lstat} to look at the - * links themselves. - * - * Using `fs.stat()` to check for the existence of a file before calling`fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. - * Instead, user code should open/read/write the file directly and handle the - * error raised if the file is not available. - * - * To check if a file exists without manipulating it afterwards, {@link access} is recommended. - * - * For example, given the following directory structure: - * - * ```text - * - txtDir - * -- file.txt - * - app.js - * ``` - * - * The next program will check for the stats of the given paths: - * - * ```js - * import { stat } from 'node:fs'; - * - * const pathsToCheck = ['./txtDir', './txtDir/file.txt']; - * - * for (let i = 0; i < pathsToCheck.length; i++) { - * stat(pathsToCheck[i], (err, stats) => { - * console.log(stats.isDirectory()); - * console.log(stats); - * }); - * } - * ``` - * - * The resulting output will resemble: - * - * ```console - * true - * Stats { - * dev: 16777220, - * mode: 16877, - * nlink: 3, - * uid: 501, - * gid: 20, - * rdev: 0, - * blksize: 4096, - * ino: 14214262, - * size: 96, - * blocks: 0, - * atimeMs: 1561174653071.963, - * mtimeMs: 1561174614583.3518, - * ctimeMs: 1561174626623.5366, - * birthtimeMs: 1561174126937.2893, - * atime: 2019-06-22T03:37:33.072Z, - * mtime: 2019-06-22T03:36:54.583Z, - * ctime: 2019-06-22T03:37:06.624Z, - * birthtime: 2019-06-22T03:28:46.937Z - * } - * false - * Stats { - * dev: 16777220, - * mode: 33188, - * nlink: 1, - * uid: 501, - * gid: 20, - * rdev: 0, - * blksize: 4096, - * ino: 14214074, - * size: 8, - * blocks: 8, - * atimeMs: 1561174616618.8555, - * mtimeMs: 1561174614584, - * ctimeMs: 1561174614583.8145, - * birthtimeMs: 1561174007710.7478, - * atime: 2019-06-22T03:36:56.619Z, - * mtime: 2019-06-22T03:36:54.584Z, - * ctime: 2019-06-22T03:36:54.584Z, - * birthtime: 2019-06-22T03:26:47.711Z - * } - * ``` - * @since v0.0.2 - */ - function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; - function stat( - path: PathLike, - options: - | (StatOptions & { - bigint?: false | undefined; - }) - | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, - ): void; - function stat( - path: PathLike, - options: StatOptions & { - bigint: true; - }, - callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, - ): void; - function stat( - path: PathLike, - options: StatOptions | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, - ): void; - namespace stat { - /** - * Asynchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__( - path: PathLike, - options?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - function __promisify__( - path: PathLike, - options: StatOptions & { - bigint: true; - }, - ): Promise; - function __promisify__(path: PathLike, options?: StatOptions): Promise; - } - interface StatSyncFn extends Function { - (path: PathLike, options?: undefined): Stats; - ( - path: PathLike, - options?: StatSyncOptions & { - bigint?: false | undefined; - throwIfNoEntry: false; - }, - ): Stats | undefined; - ( - path: PathLike, - options: StatSyncOptions & { - bigint: true; - throwIfNoEntry: false; - }, - ): BigIntStats | undefined; - ( - path: PathLike, - options?: StatSyncOptions & { - bigint?: false | undefined; - }, - ): Stats; - ( - path: PathLike, - options: StatSyncOptions & { - bigint: true; - }, - ): BigIntStats; - ( - path: PathLike, - options: StatSyncOptions & { - bigint: boolean; - throwIfNoEntry?: false | undefined; - }, - ): Stats | BigIntStats; - (path: PathLike, options?: StatSyncOptions): Stats | BigIntStats | undefined; - } - /** - * Synchronous stat(2) - Get file status. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - const statSync: StatSyncFn; - /** - * Invokes the callback with the `fs.Stats` for the file descriptor. - * - * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. - * @since v0.1.95 - */ - function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; - function fstat( - fd: number, - options: - | (StatOptions & { - bigint?: false | undefined; - }) - | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, - ): void; - function fstat( - fd: number, - options: StatOptions & { - bigint: true; - }, - callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, - ): void; - function fstat( - fd: number, - options: StatOptions | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, - ): void; - namespace fstat { - /** - * Asynchronous fstat(2) - Get file status. - * @param fd A file descriptor. - */ - function __promisify__( - fd: number, - options?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - function __promisify__( - fd: number, - options: StatOptions & { - bigint: true; - }, - ): Promise; - function __promisify__(fd: number, options?: StatOptions): Promise; - } - /** - * Retrieves the `fs.Stats` for the file descriptor. - * - * See the POSIX [`fstat(2)`](http://man7.org/linux/man-pages/man2/fstat.2.html) documentation for more detail. - * @since v0.1.95 - */ - function fstatSync( - fd: number, - options?: StatOptions & { - bigint?: false | undefined; - }, - ): Stats; - function fstatSync( - fd: number, - options: StatOptions & { - bigint: true; - }, - ): BigIntStats; - function fstatSync(fd: number, options?: StatOptions): Stats | BigIntStats; - /** - * Retrieves the `fs.Stats` for the symbolic link referred to by the path. - * The callback gets two arguments `(err, stats)` where `stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if `path` is a symbolic - * link, then the link itself is stat-ed, not the file that it refers to. - * - * See the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) documentation for more details. - * @since v0.1.30 - */ - function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void; - function lstat( - path: PathLike, - options: - | (StatOptions & { - bigint?: false | undefined; - }) - | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void, - ): void; - function lstat( - path: PathLike, - options: StatOptions & { - bigint: true; - }, - callback: (err: NodeJS.ErrnoException | null, stats: BigIntStats) => void, - ): void; - function lstat( - path: PathLike, - options: StatOptions | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: Stats | BigIntStats) => void, - ): void; - namespace lstat { - /** - * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__( - path: PathLike, - options?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - function __promisify__( - path: PathLike, - options: StatOptions & { - bigint: true; - }, - ): Promise; - function __promisify__(path: PathLike, options?: StatOptions): Promise; - } - /** - * Asynchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which - * contains `path`. The callback gets two arguments `(err, stats)` where `stats`is an `fs.StatFs` object. - * - * In case of an error, the `err.code` will be one of `Common System Errors`. - * @since v19.6.0, v18.15.0 - * @param path A path to an existing file or directory on the file system to be queried. - */ - function statfs(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void): void; - function statfs( - path: PathLike, - options: - | (StatFsOptions & { - bigint?: false | undefined; - }) - | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: StatsFs) => void, - ): void; - function statfs( - path: PathLike, - options: StatFsOptions & { - bigint: true; - }, - callback: (err: NodeJS.ErrnoException | null, stats: BigIntStatsFs) => void, - ): void; - function statfs( - path: PathLike, - options: StatFsOptions | undefined, - callback: (err: NodeJS.ErrnoException | null, stats: StatsFs | BigIntStatsFs) => void, - ): void; - namespace statfs { - /** - * Asynchronous statfs(2) - Returns information about the mounted file system which contains path. The callback gets two arguments (err, stats) where stats is an object. - * @param path A path to an existing file or directory on the file system to be queried. - */ - function __promisify__( - path: PathLike, - options?: StatFsOptions & { - bigint?: false | undefined; - }, - ): Promise; - function __promisify__( - path: PathLike, - options: StatFsOptions & { - bigint: true; - }, - ): Promise; - function __promisify__(path: PathLike, options?: StatFsOptions): Promise; - } - /** - * Synchronous [`statfs(2)`](http://man7.org/linux/man-pages/man2/statfs.2.html). Returns information about the mounted file system which - * contains `path`. - * - * In case of an error, the `err.code` will be one of `Common System Errors`. - * @since v19.6.0, v18.15.0 - * @param path A path to an existing file or directory on the file system to be queried. - */ - function statfsSync( - path: PathLike, - options?: StatFsOptions & { - bigint?: false | undefined; - }, - ): StatsFs; - function statfsSync( - path: PathLike, - options: StatFsOptions & { - bigint: true; - }, - ): BigIntStatsFs; - function statfsSync(path: PathLike, options?: StatFsOptions): StatsFs | BigIntStatsFs; - /** - * Synchronous lstat(2) - Get file status. Does not dereference symbolic links. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - const lstatSync: StatSyncFn; - /** - * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. No arguments other than - * a possible - * exception are given to the completion callback. - * @since v0.1.31 - */ - function link(existingPath: PathLike, newPath: PathLike, callback: NoParamCallback): void; - namespace link { - /** - * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file. - * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(existingPath: PathLike, newPath: PathLike): Promise; - } - /** - * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. Returns `undefined`. - * @since v0.1.31 - */ - function linkSync(existingPath: PathLike, newPath: PathLike): void; - /** - * Creates the link called `path` pointing to `target`. No arguments other than a - * possible exception are given to the completion callback. - * - * See the POSIX [`symlink(2)`](http://man7.org/linux/man-pages/man2/symlink.2.html) documentation for more details. - * - * The `type` argument is only available on Windows and ignored on other platforms. - * It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is - * not a string, Node.js will autodetect `target` type and use `'file'` or `'dir'`. - * If the `target` does not exist, `'file'` will be used. Windows junction points - * require the destination path to be absolute. When using `'junction'`, the`target` argument will automatically be normalized to absolute path. Junction - * points on NTFS volumes can only point to directories. - * - * Relative targets are relative to the link's parent directory. - * - * ```js - * import { symlink } from 'node:fs'; - * - * symlink('./mew', './mewtwo', callback); - * ``` - * - * The above example creates a symbolic link `mewtwo` which points to `mew` in the - * same directory: - * - * ```bash - * $ tree . - * . - * ├── mew - * └── mewtwo -> ./mew - * ``` - * @since v0.1.31 - * @param [type='null'] - */ - function symlink( - target: PathLike, - path: PathLike, - type: symlink.Type | undefined | null, - callback: NoParamCallback, - ): void; - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - */ - function symlink(target: PathLike, path: PathLike, callback: NoParamCallback): void; - namespace symlink { - /** - * Asynchronous symlink(2) - Create a new symbolic link to an existing file. - * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol. - * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol. - * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms). - * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path. - */ - function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise; - type Type = "dir" | "file" | "junction"; - } - /** - * Returns `undefined`. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link symlink}. - * @since v0.1.31 - * @param [type='null'] - */ - function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void; - /** - * Reads the contents of the symbolic link referred to by `path`. The callback gets - * two arguments `(err, linkString)`. - * - * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the link path passed to the callback. If the `encoding` is set to `'buffer'`, - * the link path returned will be passed as a `Buffer` object. - * @since v0.1.31 - */ - function readlink( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, - ): void; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink( - path: PathLike, - options: BufferEncodingOption, - callback: (err: NodeJS.ErrnoException | null, linkString: NonSharedBuffer) => void, - ): void; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, linkString: string | NonSharedBuffer) => void, - ): void; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function readlink( - path: PathLike, - callback: (err: NodeJS.ErrnoException | null, linkString: string) => void, - ): void; - namespace readlink { - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: EncodingOption): Promise; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: EncodingOption): Promise; - } - /** - * Returns the symbolic link's string value. - * - * See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more details. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the link path returned. If the `encoding` is set to `'buffer'`, - * the link path returned will be passed as a `Buffer` object. - * @since v0.1.31 - */ - function readlinkSync(path: PathLike, options?: EncodingOption): string; - /** - * Synchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlinkSync(path: PathLike, options: BufferEncodingOption): NonSharedBuffer; - /** - * Synchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlinkSync(path: PathLike, options?: EncodingOption): string | NonSharedBuffer; - /** - * Asynchronously computes the canonical pathname by resolving `.`, `..`, and - * symbolic links. - * - * A canonical pathname is not necessarily unique. Hard links and bind mounts can - * expose a file system entity through many pathnames. - * - * This function behaves like [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html), with some exceptions: - * - * 1. No case conversion is performed on case-insensitive file systems. - * 2. The maximum number of symbolic links is platform-independent and generally - * (much) higher than what the native [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html) implementation supports. - * - * The `callback` gets two arguments `(err, resolvedPath)`. May use `process.cwd` to resolve relative paths. - * - * Only paths that can be converted to UTF8 strings are supported. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the path passed to the callback. If the `encoding` is set to `'buffer'`, - * the path returned will be passed as a `Buffer` object. - * - * If `path` resolves to a socket or a pipe, the function will return a system - * dependent name for that object. - * @since v0.1.31 - */ - function realpath( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, - ): void; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath( - path: PathLike, - options: BufferEncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: NonSharedBuffer) => void, - ): void; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | NonSharedBuffer) => void, - ): void; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function realpath( - path: PathLike, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, - ): void; - namespace realpath { - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: EncodingOption): Promise; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options: BufferEncodingOption): Promise; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(path: PathLike, options?: EncodingOption): Promise; - /** - * Asynchronous [`realpath(3)`](http://man7.org/linux/man-pages/man3/realpath.3.html). - * - * The `callback` gets two arguments `(err, resolvedPath)`. - * - * Only paths that can be converted to UTF8 strings are supported. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the path passed to the callback. If the `encoding` is set to `'buffer'`, - * the path returned will be passed as a `Buffer` object. - * - * On Linux, when Node.js is linked against musl libc, the procfs file system must - * be mounted on `/proc` in order for this function to work. Glibc does not have - * this restriction. - * @since v9.2.0 - */ - function native( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, - ): void; - function native( - path: PathLike, - options: BufferEncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: NonSharedBuffer) => void, - ): void; - function native( - path: PathLike, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | NonSharedBuffer) => void, - ): void; - function native( - path: PathLike, - callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void, - ): void; - } - /** - * Returns the resolved pathname. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link realpath}. - * @since v0.1.31 - */ - function realpathSync(path: PathLike, options?: EncodingOption): string; - /** - * Synchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpathSync(path: PathLike, options: BufferEncodingOption): NonSharedBuffer; - /** - * Synchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpathSync(path: PathLike, options?: EncodingOption): string | NonSharedBuffer; - namespace realpathSync { - function native(path: PathLike, options?: EncodingOption): string; - function native(path: PathLike, options: BufferEncodingOption): NonSharedBuffer; - function native(path: PathLike, options?: EncodingOption): string | NonSharedBuffer; - } - /** - * Asynchronously removes a file or symbolic link. No arguments other than a - * possible exception are given to the completion callback. - * - * ```js - * import { unlink } from 'node:fs'; - * // Assuming that 'path/file.txt' is a regular file. - * unlink('path/file.txt', (err) => { - * if (err) throw err; - * console.log('path/file.txt was deleted'); - * }); - * ``` - * - * `fs.unlink()` will not work on a directory, empty or otherwise. To remove a - * directory, use {@link rmdir}. - * - * See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more details. - * @since v0.0.2 - */ - function unlink(path: PathLike, callback: NoParamCallback): void; - namespace unlink { - /** - * Asynchronous unlink(2) - delete a name and possibly the file it refers to. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - /** - * Synchronous [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html). Returns `undefined`. - * @since v0.1.21 - */ - function unlinkSync(path: PathLike): void; - /** @deprecated `rmdir()` no longer provides any options. This interface will be removed in a future version. */ - // TODO: remove in future major - interface RmDirOptions {} - /** - * Asynchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). No arguments other than a possible exception are given - * to the completion callback. - * - * Using `fs.rmdir()` on a file (not a directory) results in an `ENOENT` error on - * Windows and an `ENOTDIR` error on POSIX. - * - * To get a behavior similar to the `rm -rf` Unix command, use {@link rm} with options `{ recursive: true, force: true }`. - * @since v0.0.2 - */ - function rmdir(path: PathLike, callback: NoParamCallback): void; - namespace rmdir { - /** - * Asynchronous rmdir(2) - delete a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function __promisify__(path: PathLike): Promise; - } - /** - * Synchronous [`rmdir(2)`](http://man7.org/linux/man-pages/man2/rmdir.2.html). Returns `undefined`. - * - * Using `fs.rmdirSync()` on a file (not a directory) results in an `ENOENT` error - * on Windows and an `ENOTDIR` error on POSIX. - * - * To get a behavior similar to the `rm -rf` Unix command, use {@link rmSync} with options `{ recursive: true, force: true }`. - * @since v0.1.21 - */ - function rmdirSync(path: PathLike): void; - interface RmOptions { - /** - * When `true`, exceptions will be ignored if `path` does not exist. - * @default false - */ - force?: boolean | undefined; - /** - * If an `EBUSY`, `EMFILE`, `ENFILE`, `ENOTEMPTY`, or - * `EPERM` error is encountered, Node.js will retry the operation with a linear - * backoff wait of `retryDelay` ms longer on each try. This option represents the - * number of retries. This option is ignored if the `recursive` option is not - * `true`. - * @default 0 - */ - maxRetries?: number | undefined; - /** - * If `true`, perform a recursive directory removal. In - * recursive mode, operations are retried on failure. - * @default false - */ - recursive?: boolean | undefined; - /** - * The amount of time in milliseconds to wait between retries. - * This option is ignored if the `recursive` option is not `true`. - * @default 100 - */ - retryDelay?: number | undefined; - } - /** - * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). No arguments other than a possible exception are given to the - * completion callback. - * @since v14.14.0 - */ - function rm(path: PathLike, callback: NoParamCallback): void; - function rm(path: PathLike, options: RmOptions, callback: NoParamCallback): void; - namespace rm { - /** - * Asynchronously removes files and directories (modeled on the standard POSIX `rm` utility). - */ - function __promisify__(path: PathLike, options?: RmOptions): Promise; - } - /** - * Synchronously removes files and directories (modeled on the standard POSIX `rm` utility). Returns `undefined`. - * @since v14.14.0 - */ - function rmSync(path: PathLike, options?: RmOptions): void; - interface MakeDirectoryOptions { - /** - * Indicates whether parent folders should be created. - * If a folder was created, the path to the first created folder will be returned. - * @default false - */ - recursive?: boolean | undefined; - /** - * A file mode. If a string is passed, it is parsed as an octal integer. If not specified - * @default 0o777 - */ - mode?: Mode | undefined; - } - /** - * Asynchronously creates a directory. - * - * The callback is given a possible exception and, if `recursive` is `true`, the - * first directory path created, `(err[, path])`.`path` can still be `undefined` when `recursive` is `true`, if no directory was - * created (for instance, if it was previously created). - * - * The optional `options` argument can be an integer specifying `mode` (permission - * and sticky bits), or an object with a `mode` property and a `recursive` property indicating whether parent directories should be created. Calling `fs.mkdir()` when `path` is a directory that - * exists results in an error only - * when `recursive` is false. If `recursive` is false and the directory exists, - * an `EEXIST` error occurs. - * - * ```js - * import { mkdir } from 'node:fs'; - * - * // Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist. - * mkdir('./tmp/a/apple', { recursive: true }, (err) => { - * if (err) throw err; - * }); - * ``` - * - * On Windows, using `fs.mkdir()` on the root directory even with recursion will - * result in an error: - * - * ```js - * import { mkdir } from 'node:fs'; - * - * mkdir('/', { recursive: true }, (err) => { - * // => [Error: EPERM: operation not permitted, mkdir 'C:\'] - * }); - * ``` - * - * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. - * @since v0.1.8 - */ - function mkdir( - path: PathLike, - options: MakeDirectoryOptions & { - recursive: true; - }, - callback: (err: NodeJS.ErrnoException | null, path?: string) => void, - ): void; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir( - path: PathLike, - options: - | Mode - | (MakeDirectoryOptions & { - recursive?: false | undefined; - }) - | null - | undefined, - callback: NoParamCallback, - ): void; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir( - path: PathLike, - options: Mode | MakeDirectoryOptions | null | undefined, - callback: (err: NodeJS.ErrnoException | null, path?: string) => void, - ): void; - /** - * Asynchronous mkdir(2) - create a directory with a mode of `0o777`. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function mkdir(path: PathLike, callback: NoParamCallback): void; - namespace mkdir { - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function __promisify__( - path: PathLike, - options: MakeDirectoryOptions & { - recursive: true; - }, - ): Promise; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function __promisify__( - path: PathLike, - options?: - | Mode - | (MakeDirectoryOptions & { - recursive?: false | undefined; - }) - | null, - ): Promise; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function __promisify__( - path: PathLike, - options?: Mode | MakeDirectoryOptions | null, - ): Promise; - } - /** - * Synchronously creates a directory. Returns `undefined`, or if `recursive` is `true`, the first directory path created. - * This is the synchronous version of {@link mkdir}. - * - * See the POSIX [`mkdir(2)`](http://man7.org/linux/man-pages/man2/mkdir.2.html) documentation for more details. - * @since v0.1.21 - */ - function mkdirSync( - path: PathLike, - options: MakeDirectoryOptions & { - recursive: true; - }, - ): string | undefined; - /** - * Synchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdirSync( - path: PathLike, - options?: - | Mode - | (MakeDirectoryOptions & { - recursive?: false | undefined; - }) - | null, - ): void; - /** - * Synchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdirSync(path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined; - /** - * Creates a unique temporary directory. - * - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. Due to platform - * inconsistencies, avoid trailing `X` characters in `prefix`. Some platforms, - * notably the BSDs, can return more than six random characters, and replace - * trailing `X` characters in `prefix` with random characters. - * - * The created directory path is passed as a string to the callback's second - * parameter. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use. - * - * ```js - * import { mkdtemp } from 'node:fs'; - * import { join } from 'node:path'; - * import { tmpdir } from 'node:os'; - * - * mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => { - * if (err) throw err; - * console.log(directory); - * // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2 - * }); - * ``` - * - * The `fs.mkdtemp()` method will append the six randomly selected characters - * directly to the `prefix` string. For instance, given a directory `/tmp`, if the - * intention is to create a temporary directory _within_`/tmp`, the `prefix`must end with a trailing platform-specific path separator - * (`import { sep } from 'node:path'`). - * - * ```js - * import { tmpdir } from 'node:os'; - * import { mkdtemp } from 'node:fs'; - * - * // The parent directory for the new temporary directory - * const tmpDir = tmpdir(); - * - * // This method is *INCORRECT*: - * mkdtemp(tmpDir, (err, directory) => { - * if (err) throw err; - * console.log(directory); - * // Will print something similar to `/tmpabc123`. - * // A new temporary directory is created at the file system root - * // rather than *within* the /tmp directory. - * }); - * - * // This method is *CORRECT*: - * import { sep } from 'node:path'; - * mkdtemp(`${tmpDir}${sep}`, (err, directory) => { - * if (err) throw err; - * console.log(directory); - * // Will print something similar to `/tmp/abc123`. - * // A new temporary directory is created within - * // the /tmp directory. - * }); - * ``` - * @since v5.10.0 - */ - function mkdtemp( - prefix: string, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, folder: string) => void, - ): void; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp( - prefix: string, - options: BufferEncodingOption, - callback: (err: NodeJS.ErrnoException | null, folder: NonSharedBuffer) => void, - ): void; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp( - prefix: string, - options: EncodingOption, - callback: (err: NodeJS.ErrnoException | null, folder: string | NonSharedBuffer) => void, - ): void; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - */ - function mkdtemp( - prefix: string, - callback: (err: NodeJS.ErrnoException | null, folder: string) => void, - ): void; - namespace mkdtemp { - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options?: EncodingOption): Promise; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options: BufferEncodingOption): Promise; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__(prefix: string, options?: EncodingOption): Promise; - } - /** - * Returns the created directory path. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link mkdtemp}. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use. - * @since v5.10.0 - */ - function mkdtempSync(prefix: string, options?: EncodingOption): string; - /** - * Synchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtempSync(prefix: string, options: BufferEncodingOption): NonSharedBuffer; - /** - * Synchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required prefix to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtempSync(prefix: string, options?: EncodingOption): string | NonSharedBuffer; - interface DisposableTempDir extends Disposable { - /** - * The path of the created directory. - */ - path: string; - /** - * A function which removes the created directory. - */ - remove(): void; - /** - * The same as `remove`. - */ - [Symbol.dispose](): void; - } - /** - * Returns a disposable object whose `path` property holds the created directory - * path. When the object is disposed, the directory and its contents will be - * removed if it still exists. If the directory cannot be deleted, disposal will - * throw an error. The object has a `remove()` method which will perform the same - * task. - * - * - * - * For detailed information, see the documentation of `fs.mkdtemp()`. - * - * There is no callback-based version of this API because it is designed for use - * with the `using` syntax. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use. - * @since v24.4.0 - */ - function mkdtempDisposableSync(prefix: string, options?: EncodingOption): DisposableTempDir; - /** - * Reads the contents of a directory. The callback gets two arguments `(err, files)` where `files` is an array of the names of the files in the directory excluding `'.'` and `'..'`. - * - * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the filenames passed to the callback. If the `encoding` is set to `'buffer'`, - * the filenames returned will be passed as `Buffer` objects. - * - * If `options.withFileTypes` is set to `true`, the `files` array will contain `fs.Dirent` objects. - * @since v0.1.8 - */ - function readdir( - path: PathLike, - options: - | { - encoding: BufferEncoding | null; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | BufferEncoding - | undefined - | null, - callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, - ): void; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options: - | { - encoding: "buffer"; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | "buffer", - callback: (err: NodeJS.ErrnoException | null, files: NonSharedBuffer[]) => void, - ): void; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options: - | (ObjectEncodingOptions & { - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }) - | BufferEncoding - | undefined - | null, - callback: (err: NodeJS.ErrnoException | null, files: string[] | NonSharedBuffer[]) => void, - ): void; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function readdir( - path: PathLike, - callback: (err: NodeJS.ErrnoException | null, files: string[]) => void, - ): void; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. - */ - function readdir( - path: PathLike, - options: ObjectEncodingOptions & { - withFileTypes: true; - recursive?: boolean | undefined; - }, - callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, - ): void; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`. - */ - function readdir( - path: PathLike, - options: { - encoding: "buffer"; - withFileTypes: true; - recursive?: boolean | undefined; - }, - callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void, - ): void; - namespace readdir { - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__( - path: PathLike, - options?: - | { - encoding: BufferEncoding | null; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__( - path: PathLike, - options: - | "buffer" - | { - encoding: "buffer"; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function __promisify__( - path: PathLike, - options?: - | (ObjectEncodingOptions & { - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }) - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent - */ - function __promisify__( - path: PathLike, - options: ObjectEncodingOptions & { - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`. - */ - function __promisify__( - path: PathLike, - options: { - encoding: "buffer"; - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Promise[]>; - } - /** - * Reads the contents of the directory. - * - * See the POSIX [`readdir(3)`](http://man7.org/linux/man-pages/man3/readdir.3.html) documentation for more details. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the filenames returned. If the `encoding` is set to `'buffer'`, - * the filenames returned will be passed as `Buffer` objects. - * - * If `options.withFileTypes` is set to `true`, the result will contain `fs.Dirent` objects. - * @since v0.1.21 - */ - function readdirSync( - path: PathLike, - options?: - | { - encoding: BufferEncoding | null; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | BufferEncoding - | null, - ): string[]; - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdirSync( - path: PathLike, - options: - | { - encoding: "buffer"; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | "buffer", - ): NonSharedBuffer[]; - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdirSync( - path: PathLike, - options?: - | (ObjectEncodingOptions & { - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }) - | BufferEncoding - | null, - ): string[] | NonSharedBuffer[]; - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. - */ - function readdirSync( - path: PathLike, - options: ObjectEncodingOptions & { - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Dirent[]; - /** - * Synchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`. - */ - function readdirSync( - path: PathLike, - options: { - encoding: "buffer"; - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Dirent[]; - /** - * Closes the file descriptor. No arguments other than a possible exception are - * given to the completion callback. - * - * Calling `fs.close()` on any file descriptor (`fd`) that is currently in use - * through any other `fs` operation may lead to undefined behavior. - * - * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. - * @since v0.0.2 - */ - function close(fd: number, callback?: NoParamCallback): void; - namespace close { - /** - * Asynchronous close(2) - close a file descriptor. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - /** - * Closes the file descriptor. Returns `undefined`. - * - * Calling `fs.closeSync()` on any file descriptor (`fd`) that is currently in use - * through any other `fs` operation may lead to undefined behavior. - * - * See the POSIX [`close(2)`](http://man7.org/linux/man-pages/man2/close.2.html) documentation for more detail. - * @since v0.1.21 - */ - function closeSync(fd: number): void; - /** - * Asynchronous file open. See the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more details. - * - * `mode` sets the file mode (permission and sticky bits), but only if the file was - * created. On Windows, only the write permission can be manipulated; see {@link chmod}. - * - * The callback gets two arguments `(err, fd)`. - * - * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented - * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains - * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). - * - * Functions based on `fs.open()` exhibit this behavior as well:`fs.writeFile()`, `fs.readFile()`, etc. - * @since v0.0.2 - * @param [flags='r'] See `support of file system `flags``. - * @param [mode=0o666] - */ - function open( - path: PathLike, - flags: OpenMode | undefined, - mode: Mode | undefined | null, - callback: (err: NodeJS.ErrnoException | null, fd: number) => void, - ): void; - /** - * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param [flags='r'] See `support of file system `flags``. - */ - function open( - path: PathLike, - flags: OpenMode | undefined, - callback: (err: NodeJS.ErrnoException | null, fd: number) => void, - ): void; - /** - * Asynchronous open(2) - open and possibly create a file. If the file is created, its mode will be `0o666`. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - */ - function open(path: PathLike, callback: (err: NodeJS.ErrnoException | null, fd: number) => void): void; - namespace open { - /** - * Asynchronous open(2) - open and possibly create a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param mode A file mode. If a string is passed, it is parsed as an octal integer. If not supplied, defaults to `0o666`. - */ - function __promisify__(path: PathLike, flags: OpenMode, mode?: Mode | null): Promise; - } - /** - * Returns an integer representing the file descriptor. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link open}. - * @since v0.1.21 - * @param [flags='r'] - * @param [mode=0o666] - */ - function openSync(path: PathLike, flags: OpenMode, mode?: Mode | null): number; - /** - * Change the file system timestamps of the object referenced by `path`. - * - * The `atime` and `mtime` arguments follow these rules: - * - * * Values can be either numbers representing Unix epoch time in seconds, `Date`s, or a numeric string like `'123456789.0'`. - * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or `-Infinity`, an `Error` will be thrown. - * @since v0.4.2 - */ - function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; - namespace utimes { - /** - * Asynchronously change file timestamps of the file referenced by the supplied path. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function __promisify__(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; - } - /** - * Returns `undefined`. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link utimes}. - * @since v0.4.2 - */ - function utimesSync(path: PathLike, atime: TimeLike, mtime: TimeLike): void; - /** - * Change the file system timestamps of the object referenced by the supplied file - * descriptor. See {@link utimes}. - * @since v0.4.2 - */ - function futimes(fd: number, atime: TimeLike, mtime: TimeLike, callback: NoParamCallback): void; - namespace futimes { - /** - * Asynchronously change file timestamps of the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param atime The last access time. If a string is provided, it will be coerced to number. - * @param mtime The last modified time. If a string is provided, it will be coerced to number. - */ - function __promisify__(fd: number, atime: TimeLike, mtime: TimeLike): Promise; - } - /** - * Synchronous version of {@link futimes}. Returns `undefined`. - * @since v0.4.2 - */ - function futimesSync(fd: number, atime: TimeLike, mtime: TimeLike): void; - /** - * Request that all data for the open file descriptor is flushed to the storage - * device. The specific implementation is operating system and device specific. - * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. No arguments other - * than a possible exception are given to the completion callback. - * @since v0.1.96 - */ - function fsync(fd: number, callback: NoParamCallback): void; - namespace fsync { - /** - * Asynchronous fsync(2) - synchronize a file's in-core state with the underlying storage device. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - /** - * Request that all data for the open file descriptor is flushed to the storage - * device. The specific implementation is operating system and device specific. - * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. Returns `undefined`. - * @since v0.1.96 - */ - function fsyncSync(fd: number): void; - interface WriteOptions { - /** - * @default 0 - */ - offset?: number | undefined; - /** - * @default `buffer.byteLength - offset` - */ - length?: number | undefined; - /** - * @default null - */ - position?: number | null | undefined; - } - /** - * Write `buffer` to the file specified by `fd`. - * - * `offset` determines the part of the buffer to be written, and `length` is - * an integer specifying the number of bytes to write. - * - * `position` refers to the offset from the beginning of the file where this data - * should be written. If `typeof position !== 'number'`, the data will be written - * at the current position. See [`pwrite(2)`](http://man7.org/linux/man-pages/man2/pwrite.2.html). - * - * The callback will be given three arguments `(err, bytesWritten, buffer)` where `bytesWritten` specifies how many _bytes_ were written from `buffer`. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a promise for an `Object` with `bytesWritten` and `buffer` properties. - * - * It is unsafe to use `fs.write()` multiple times on the same file without waiting - * for the callback. For this scenario, {@link createWriteStream} is - * recommended. - * - * On Linux, positional writes don't work when the file is opened in append mode. - * The kernel ignores the position argument and always appends the data to - * the end of the file. - * @since v0.0.2 - * @param [offset=0] - * @param [length=buffer.byteLength - offset] - * @param [position='null'] - */ - function write( - fd: number, - buffer: TBuffer, - offset: number | undefined | null, - length: number | undefined | null, - position: number | undefined | null, - callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, - ): void; - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - */ - function write( - fd: number, - buffer: TBuffer, - offset: number | undefined | null, - length: number | undefined | null, - callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, - ): void; - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - */ - function write( - fd: number, - buffer: TBuffer, - offset: number | undefined | null, - callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, - ): void; - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - */ - function write( - fd: number, - buffer: TBuffer, - callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, - ): void; - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param options An object with the following properties: - * * `offset` The part of the buffer to be written. If not supplied, defaults to `0`. - * * `length` The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * * `position` The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function write( - fd: number, - buffer: TBuffer, - options: WriteOptions, - callback: (err: NodeJS.ErrnoException | null, written: number, buffer: TBuffer) => void, - ): void; - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function write( - fd: number, - string: string, - position: number | undefined | null, - encoding: BufferEncoding | undefined | null, - callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, - ): void; - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function write( - fd: number, - string: string, - position: number | undefined | null, - callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, - ): void; - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. - */ - function write( - fd: number, - string: string, - callback: (err: NodeJS.ErrnoException | null, written: number, str: string) => void, - ): void; - namespace write { - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param offset The part of the buffer to be written. If not supplied, defaults to `0`. - * @param length The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function __promisify__( - fd: number, - buffer?: TBuffer, - offset?: number, - length?: number, - position?: number | null, - ): Promise<{ - bytesWritten: number; - buffer: TBuffer; - }>; - /** - * Asynchronously writes `buffer` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param options An object with the following properties: - * * `offset` The part of the buffer to be written. If not supplied, defaults to `0`. - * * `length` The number of bytes to write. If not supplied, defaults to `buffer.length - offset`. - * * `position` The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - */ - function __promisify__( - fd: number, - buffer?: TBuffer, - options?: WriteOptions, - ): Promise<{ - bytesWritten: number; - buffer: TBuffer; - }>; - /** - * Asynchronously writes `string` to the file referenced by the supplied file descriptor. - * @param fd A file descriptor. - * @param string A string to write. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function __promisify__( - fd: number, - string: string, - position?: number | null, - encoding?: BufferEncoding | null, - ): Promise<{ - bytesWritten: number; - buffer: string; - }>; - } - /** - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link write}. - * @since v0.1.21 - * @param [offset=0] - * @param [length=buffer.byteLength - offset] - * @param [position='null'] - * @return The number of bytes written. - */ - function writeSync( - fd: number, - buffer: NodeJS.ArrayBufferView, - offset?: number | null, - length?: number | null, - position?: number | null, - ): number; - /** - * Synchronously writes `string` to the file referenced by the supplied file descriptor, returning the number of bytes written. - * @param fd A file descriptor. - * @param string A string to write. - * @param position The offset from the beginning of the file where this data should be written. If not supplied, defaults to the current position. - * @param encoding The expected string encoding. - */ - function writeSync( - fd: number, - string: string, - position?: number | null, - encoding?: BufferEncoding | null, - ): number; - type ReadPosition = number | bigint; - interface ReadOptions { - /** - * @default 0 - */ - offset?: number | undefined; - /** - * @default `length of buffer` - */ - length?: number | undefined; - /** - * @default null - */ - position?: ReadPosition | null | undefined; - } - interface ReadOptionsWithBuffer extends ReadOptions { - buffer?: T | undefined; - } - /** @deprecated Use `ReadOptions` instead. */ - // TODO: remove in future major - interface ReadSyncOptions extends ReadOptions {} - /** @deprecated Use `ReadOptionsWithBuffer` instead. */ - // TODO: remove in future major - interface ReadAsyncOptions extends ReadOptionsWithBuffer {} - /** - * Read data from the file specified by `fd`. - * - * The callback is given the three arguments, `(err, bytesRead, buffer)`. - * - * If the file is not modified concurrently, the end-of-file is reached when the - * number of bytes read is zero. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a promise for an `Object` with `bytesRead` and `buffer` properties. - * @since v0.0.2 - * @param buffer The buffer that the data will be written to. - * @param offset The position in `buffer` to write the data to. - * @param length The number of bytes to read. - * @param position Specifies where to begin reading from in the file. If `position` is `null` or `-1 `, data will be read from the current file position, and the file position will be updated. If - * `position` is an integer, the file position will be unchanged. - */ - function read( - fd: number, - buffer: TBuffer, - offset: number, - length: number, - position: ReadPosition | null, - callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, - ): void; - /** - * Similar to the above `fs.read` function, this version takes an optional `options` object. - * If not otherwise specified in an `options` object, - * `buffer` defaults to `Buffer.alloc(16384)`, - * `offset` defaults to `0`, - * `length` defaults to `buffer.byteLength`, `- offset` as of Node 17.6.0 - * `position` defaults to `null` - * @since v12.17.0, 13.11.0 - */ - function read( - fd: number, - options: ReadOptionsWithBuffer, - callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, - ): void; - function read( - fd: number, - buffer: TBuffer, - options: ReadOptions, - callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, - ): void; - function read( - fd: number, - buffer: TBuffer, - callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void, - ): void; - function read( - fd: number, - callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NonSharedBuffer) => void, - ): void; - namespace read { - /** - * @param fd A file descriptor. - * @param buffer The buffer that the data will be written to. - * @param offset The offset in the buffer at which to start writing. - * @param length The number of bytes to read. - * @param position The offset from the beginning of the file from which data should be read. If `null`, data will be read from the current position. - */ - function __promisify__( - fd: number, - buffer: TBuffer, - offset: number, - length: number, - position: ReadPosition | null, - ): Promise<{ - bytesRead: number; - buffer: TBuffer; - }>; - function __promisify__( - fd: number, - options: ReadOptionsWithBuffer, - ): Promise<{ - bytesRead: number; - buffer: TBuffer; - }>; - function __promisify__(fd: number): Promise<{ - bytesRead: number; - buffer: NonSharedBuffer; - }>; - } - /** - * Returns the number of `bytesRead`. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link read}. - * @since v0.1.21 - * @param [position='null'] - */ - function readSync( - fd: number, - buffer: NodeJS.ArrayBufferView, - offset: number, - length: number, - position: ReadPosition | null, - ): number; - /** - * Similar to the above `fs.readSync` function, this version takes an optional `options` object. - * If no `options` object is specified, it will default with the above values. - */ - function readSync(fd: number, buffer: NodeJS.ArrayBufferView, opts?: ReadOptions): number; - /** - * Asynchronously reads the entire contents of a file. - * - * ```js - * import { readFile } from 'node:fs'; - * - * readFile('/etc/passwd', (err, data) => { - * if (err) throw err; - * console.log(data); - * }); - * ``` - * - * The callback is passed two arguments `(err, data)`, where `data` is the - * contents of the file. - * - * If no encoding is specified, then the raw buffer is returned. - * - * If `options` is a string, then it specifies the encoding: - * - * ```js - * import { readFile } from 'node:fs'; - * - * readFile('/etc/passwd', 'utf8', callback); - * ``` - * - * When the path is a directory, the behavior of `fs.readFile()` and {@link readFileSync} is platform-specific. On macOS, Linux, and Windows, an - * error will be returned. On FreeBSD, a representation of the directory's contents - * will be returned. - * - * ```js - * import { readFile } from 'node:fs'; - * - * // macOS, Linux, and Windows - * readFile('', (err, data) => { - * // => [Error: EISDIR: illegal operation on a directory, read ] - * }); - * - * // FreeBSD - * readFile('', (err, data) => { - * // => null, - * }); - * ``` - * - * It is possible to abort an ongoing request using an `AbortSignal`. If a - * request is aborted the callback is called with an `AbortError`: - * - * ```js - * import { readFile } from 'node:fs'; - * - * const controller = new AbortController(); - * const signal = controller.signal; - * readFile(fileInfo[0].name, { signal }, (err, buf) => { - * // ... - * }); - * // When you want to abort the request - * controller.abort(); - * ``` - * - * The `fs.readFile()` function buffers the entire file. To minimize memory costs, - * when possible prefer streaming via `fs.createReadStream()`. - * - * Aborting an ongoing request does not abort individual operating - * system requests but rather the internal buffering `fs.readFile` performs. - * @since v0.1.29 - * @param path filename or file descriptor - */ - function readFile( - path: PathOrFileDescriptor, - options: - | ({ - encoding?: null | undefined; - flag?: string | undefined; - } & Abortable) - | undefined - | null, - callback: (err: NodeJS.ErrnoException | null, data: NonSharedBuffer) => void, - ): void; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile( - path: PathOrFileDescriptor, - options: - | ({ - encoding: BufferEncoding; - flag?: string | undefined; - } & Abortable) - | BufferEncoding, - callback: (err: NodeJS.ErrnoException | null, data: string) => void, - ): void; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile( - path: PathOrFileDescriptor, - options: - | (ObjectEncodingOptions & { - flag?: string | undefined; - } & Abortable) - | BufferEncoding - | undefined - | null, - callback: (err: NodeJS.ErrnoException | null, data: string | NonSharedBuffer) => void, - ): void; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - */ - function readFile( - path: PathOrFileDescriptor, - callback: (err: NodeJS.ErrnoException | null, data: NonSharedBuffer) => void, - ): void; - namespace readFile { - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__( - path: PathOrFileDescriptor, - options?: { - encoding?: null | undefined; - flag?: string | undefined; - } | null, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__( - path: PathOrFileDescriptor, - options: - | { - encoding: BufferEncoding; - flag?: string | undefined; - } - | BufferEncoding, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function __promisify__( - path: PathOrFileDescriptor, - options?: - | (ObjectEncodingOptions & { - flag?: string | undefined; - }) - | BufferEncoding - | null, - ): Promise; - } - /** - * Returns the contents of the `path`. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link readFile}. - * - * If the `encoding` option is specified then this function returns a - * string. Otherwise it returns a buffer. - * - * Similar to {@link readFile}, when the path is a directory, the behavior of `fs.readFileSync()` is platform-specific. - * - * ```js - * import { readFileSync } from 'node:fs'; - * - * // macOS, Linux, and Windows - * readFileSync(''); - * // => [Error: EISDIR: illegal operation on a directory, read ] - * - * // FreeBSD - * readFileSync(''); // => - * ``` - * @since v0.1.8 - * @param path filename or file descriptor - */ - function readFileSync( - path: PathOrFileDescriptor, - options?: { - encoding?: null | undefined; - flag?: string | undefined; - } | null, - ): NonSharedBuffer; - /** - * Synchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFileSync( - path: PathOrFileDescriptor, - options: - | { - encoding: BufferEncoding; - flag?: string | undefined; - } - | BufferEncoding, - ): string; - /** - * Synchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param options Either the encoding for the result, or an object that contains the encoding and an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFileSync( - path: PathOrFileDescriptor, - options?: - | (ObjectEncodingOptions & { - flag?: string | undefined; - }) - | BufferEncoding - | null, - ): string | NonSharedBuffer; - type WriteFileOptions = - | ( - & ObjectEncodingOptions - & Abortable - & { - mode?: Mode | undefined; - flag?: string | undefined; - flush?: boolean | undefined; - } - ) - | BufferEncoding - | null; - /** - * When `file` is a filename, asynchronously writes data to the file, replacing the - * file if it already exists. `data` can be a string or a buffer. - * - * When `file` is a file descriptor, the behavior is similar to calling `fs.write()` directly (which is recommended). See the notes below on using - * a file descriptor. - * - * The `encoding` option is ignored if `data` is a buffer. - * - * The `mode` option only affects the newly created file. See {@link open} for more details. - * - * ```js - * import { writeFile } from 'node:fs'; - * import { Buffer } from 'node:buffer'; - * - * const data = new Uint8Array(Buffer.from('Hello Node.js')); - * writeFile('message.txt', data, (err) => { - * if (err) throw err; - * console.log('The file has been saved!'); - * }); - * ``` - * - * If `options` is a string, then it specifies the encoding: - * - * ```js - * import { writeFile } from 'node:fs'; - * - * writeFile('message.txt', 'Hello Node.js', 'utf8', callback); - * ``` - * - * It is unsafe to use `fs.writeFile()` multiple times on the same file without - * waiting for the callback. For this scenario, {@link createWriteStream} is - * recommended. - * - * Similarly to `fs.readFile` \- `fs.writeFile` is a convenience method that - * performs multiple `write` calls internally to write the buffer passed to it. - * For performance sensitive code consider using {@link createWriteStream}. - * - * It is possible to use an `AbortSignal` to cancel an `fs.writeFile()`. - * Cancelation is "best effort", and some amount of data is likely still - * to be written. - * - * ```js - * import { writeFile } from 'node:fs'; - * import { Buffer } from 'node:buffer'; - * - * const controller = new AbortController(); - * const { signal } = controller; - * const data = new Uint8Array(Buffer.from('Hello Node.js')); - * writeFile('message.txt', data, { signal }, (err) => { - * // When a request is aborted - the callback is called with an AbortError - * }); - * // When the request should be aborted - * controller.abort(); - * ``` - * - * Aborting an ongoing request does not abort individual operating - * system requests but rather the internal buffering `fs.writeFile` performs. - * @since v0.1.29 - * @param file filename or file descriptor - */ - function writeFile( - file: PathOrFileDescriptor, - data: string | NodeJS.ArrayBufferView, - options: WriteFileOptions, - callback: NoParamCallback, - ): void; - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - */ - function writeFile( - path: PathOrFileDescriptor, - data: string | NodeJS.ArrayBufferView, - callback: NoParamCallback, - ): void; - namespace writeFile { - /** - * Asynchronously writes data to a file, replacing the file if it already exists. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'w'` is used. - */ - function __promisify__( - path: PathOrFileDescriptor, - data: string | NodeJS.ArrayBufferView, - options?: WriteFileOptions, - ): Promise; - } - /** - * Returns `undefined`. - * - * The `mode` option only affects the newly created file. See {@link open} for more details. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link writeFile}. - * @since v0.1.29 - * @param file filename or file descriptor - */ - function writeFileSync( - file: PathOrFileDescriptor, - data: string | NodeJS.ArrayBufferView, - options?: WriteFileOptions, - ): void; - /** - * Asynchronously append data to a file, creating the file if it does not yet - * exist. `data` can be a string or a `Buffer`. - * - * The `mode` option only affects the newly created file. See {@link open} for more details. - * - * ```js - * import { appendFile } from 'node:fs'; - * - * appendFile('message.txt', 'data to append', (err) => { - * if (err) throw err; - * console.log('The "data to append" was appended to file!'); - * }); - * ``` - * - * If `options` is a string, then it specifies the encoding: - * - * ```js - * import { appendFile } from 'node:fs'; - * - * appendFile('message.txt', 'data to append', 'utf8', callback); - * ``` - * - * The `path` may be specified as a numeric file descriptor that has been opened - * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will - * not be closed automatically. - * - * ```js - * import { open, close, appendFile } from 'node:fs'; - * - * function closeFd(fd) { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * - * open('message.txt', 'a', (err, fd) => { - * if (err) throw err; - * - * try { - * appendFile(fd, 'data to append', 'utf8', (err) => { - * closeFd(fd); - * if (err) throw err; - * }); - * } catch (err) { - * closeFd(fd); - * throw err; - * } - * }); - * ``` - * @since v0.6.7 - * @param path filename or file descriptor - */ - function appendFile( - path: PathOrFileDescriptor, - data: string | Uint8Array, - options: WriteFileOptions, - callback: NoParamCallback, - ): void; - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - */ - function appendFile(file: PathOrFileDescriptor, data: string | Uint8Array, callback: NoParamCallback): void; - namespace appendFile { - /** - * Asynchronously append data to a file, creating the file if it does not exist. - * @param file A path to a file. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - * If a file descriptor is provided, the underlying file will _not_ be closed automatically. - * @param data The data to write. If something other than a Buffer or Uint8Array is provided, the value is coerced to a string. - * @param options Either the encoding for the file, or an object optionally specifying the encoding, file mode, and flag. - * If `encoding` is not supplied, the default of `'utf8'` is used. - * If `mode` is not supplied, the default of `0o666` is used. - * If `mode` is a string, it is parsed as an octal integer. - * If `flag` is not supplied, the default of `'a'` is used. - */ - function __promisify__( - file: PathOrFileDescriptor, - data: string | Uint8Array, - options?: WriteFileOptions, - ): Promise; - } - /** - * Synchronously append data to a file, creating the file if it does not yet - * exist. `data` can be a string or a `Buffer`. - * - * The `mode` option only affects the newly created file. See {@link open} for more details. - * - * ```js - * import { appendFileSync } from 'node:fs'; - * - * try { - * appendFileSync('message.txt', 'data to append'); - * console.log('The "data to append" was appended to file!'); - * } catch (err) { - * // Handle the error - * } - * ``` - * - * If `options` is a string, then it specifies the encoding: - * - * ```js - * import { appendFileSync } from 'node:fs'; - * - * appendFileSync('message.txt', 'data to append', 'utf8'); - * ``` - * - * The `path` may be specified as a numeric file descriptor that has been opened - * for appending (using `fs.open()` or `fs.openSync()`). The file descriptor will - * not be closed automatically. - * - * ```js - * import { openSync, closeSync, appendFileSync } from 'node:fs'; - * - * let fd; - * - * try { - * fd = openSync('message.txt', 'a'); - * appendFileSync(fd, 'data to append', 'utf8'); - * } catch (err) { - * // Handle the error - * } finally { - * if (fd !== undefined) - * closeSync(fd); - * } - * ``` - * @since v0.6.7 - * @param path filename or file descriptor - */ - function appendFileSync( - path: PathOrFileDescriptor, - data: string | Uint8Array, - options?: WriteFileOptions, - ): void; - /** - * Watch for changes on `filename`. The callback `listener` will be called each - * time the file is accessed. - * - * The `options` argument may be omitted. If provided, it should be an object. The `options` object may contain a boolean named `persistent` that indicates - * whether the process should continue to run as long as files are being watched. - * The `options` object may specify an `interval` property indicating how often the - * target should be polled in milliseconds. - * - * The `listener` gets two arguments the current stat object and the previous - * stat object: - * - * ```js - * import { watchFile } from 'node:fs'; - * - * watchFile('message.text', (curr, prev) => { - * console.log(`the current mtime is: ${curr.mtime}`); - * console.log(`the previous mtime was: ${prev.mtime}`); - * }); - * ``` - * - * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, - * the numeric values in these objects are specified as `BigInt`s. - * - * To be notified when the file was modified, not just accessed, it is necessary - * to compare `curr.mtimeMs` and `prev.mtimeMs`. - * - * When an `fs.watchFile` operation results in an `ENOENT` error, it - * will invoke the listener once, with all the fields zeroed (or, for dates, the - * Unix Epoch). If the file is created later on, the listener will be called - * again, with the latest stat objects. This is a change in functionality since - * v0.10. - * - * Using {@link watch} is more efficient than `fs.watchFile` and `fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile` when possible. - * - * When a file being watched by `fs.watchFile()` disappears and reappears, - * then the contents of `previous` in the second callback event (the file's - * reappearance) will be the same as the contents of `previous` in the first - * callback event (its disappearance). - * - * This happens when: - * - * * the file is deleted, followed by a restore - * * the file is renamed and then renamed a second time back to its original name - * @since v0.1.31 - */ - interface WatchFileOptions { - bigint?: boolean | undefined; - persistent?: boolean | undefined; - interval?: number | undefined; - } - /** - * Watch for changes on `filename`. The callback `listener` will be called each - * time the file is accessed. - * - * The `options` argument may be omitted. If provided, it should be an object. The `options` object may contain a boolean named `persistent` that indicates - * whether the process should continue to run as long as files are being watched. - * The `options` object may specify an `interval` property indicating how often the - * target should be polled in milliseconds. - * - * The `listener` gets two arguments the current stat object and the previous - * stat object: - * - * ```js - * import { watchFile } from 'node:fs'; - * - * watchFile('message.text', (curr, prev) => { - * console.log(`the current mtime is: ${curr.mtime}`); - * console.log(`the previous mtime was: ${prev.mtime}`); - * }); - * ``` - * - * These stat objects are instances of `fs.Stat`. If the `bigint` option is `true`, - * the numeric values in these objects are specified as `BigInt`s. - * - * To be notified when the file was modified, not just accessed, it is necessary - * to compare `curr.mtimeMs` and `prev.mtimeMs`. - * - * When an `fs.watchFile` operation results in an `ENOENT` error, it - * will invoke the listener once, with all the fields zeroed (or, for dates, the - * Unix Epoch). If the file is created later on, the listener will be called - * again, with the latest stat objects. This is a change in functionality since - * v0.10. - * - * Using {@link watch} is more efficient than `fs.watchFile` and `fs.unwatchFile`. `fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile` when possible. - * - * When a file being watched by `fs.watchFile()` disappears and reappears, - * then the contents of `previous` in the second callback event (the file's - * reappearance) will be the same as the contents of `previous` in the first - * callback event (its disappearance). - * - * This happens when: - * - * * the file is deleted, followed by a restore - * * the file is renamed and then renamed a second time back to its original name - * @since v0.1.31 - */ - function watchFile( - filename: PathLike, - options: - | (WatchFileOptions & { - bigint?: false | undefined; - }) - | undefined, - listener: StatsListener, - ): StatWatcher; - function watchFile( - filename: PathLike, - options: - | (WatchFileOptions & { - bigint: true; - }) - | undefined, - listener: BigIntStatsListener, - ): StatWatcher; - /** - * Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. - * @param filename A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - */ - function watchFile(filename: PathLike, listener: StatsListener): StatWatcher; - /** - * Stop watching for changes on `filename`. If `listener` is specified, only that - * particular listener is removed. Otherwise, _all_ listeners are removed, - * effectively stopping watching of `filename`. - * - * Calling `fs.unwatchFile()` with a filename that is not being watched is a - * no-op, not an error. - * - * Using {@link watch} is more efficient than `fs.watchFile()` and `fs.unwatchFile()`. `fs.watch()` should be used instead of `fs.watchFile()` and `fs.unwatchFile()` when possible. - * @since v0.1.31 - * @param listener Optional, a listener previously attached using `fs.watchFile()` - */ - function unwatchFile(filename: PathLike, listener?: StatsListener): void; - function unwatchFile(filename: PathLike, listener?: BigIntStatsListener): void; - type WatchIgnorePredicate = string | RegExp | ((filename: string) => boolean); - interface WatchOptions extends Abortable { - encoding?: BufferEncoding | "buffer" | undefined; - persistent?: boolean | undefined; - recursive?: boolean | undefined; - ignore?: WatchIgnorePredicate | readonly WatchIgnorePredicate[] | undefined; - } - interface WatchOptionsWithBufferEncoding extends WatchOptions { - encoding: "buffer"; - } - interface WatchOptionsWithStringEncoding extends WatchOptions { - encoding?: BufferEncoding | undefined; - } - type WatchEventType = "rename" | "change"; - type WatchListener = (event: WatchEventType, filename: T | null) => void; - type StatsListener = (curr: Stats, prev: Stats) => void; - type BigIntStatsListener = (curr: BigIntStats, prev: BigIntStats) => void; - /** - * Watch for changes on `filename`, where `filename` is either a file or a - * directory. - * - * The second argument is optional. If `options` is provided as a string, it - * specifies the `encoding`. Otherwise `options` should be passed as an object. - * - * The listener callback gets two arguments `(eventType, filename)`. `eventType`is either `'rename'` or `'change'`, and `filename` is the name of the file - * which triggered the event. - * - * On most platforms, `'rename'` is emitted whenever a filename appears or - * disappears in the directory. - * - * The listener callback is attached to the `'change'` event fired by `fs.FSWatcher`, but it is not the same thing as the `'change'` value of `eventType`. - * - * If a `signal` is passed, aborting the corresponding AbortController will close - * the returned `fs.FSWatcher`. - * @since v0.5.10 - * @param listener - */ - function watch( - filename: PathLike, - options?: WatchOptionsWithStringEncoding | BufferEncoding | null, - listener?: WatchListener, - ): FSWatcher; - function watch( - filename: PathLike, - options: WatchOptionsWithBufferEncoding | "buffer", - listener: WatchListener, - ): FSWatcher; - function watch( - filename: PathLike, - options: WatchOptions | BufferEncoding | "buffer" | null, - listener: WatchListener, - ): FSWatcher; - function watch(filename: PathLike, listener: WatchListener): FSWatcher; - /** - * Test whether or not the given path exists by checking with the file system. - * Then call the `callback` argument with either true or false: - * - * ```js - * import { exists } from 'node:fs'; - * - * exists('/etc/passwd', (e) => { - * console.log(e ? 'it exists' : 'no passwd!'); - * }); - * ``` - * - * **The parameters for this callback are not consistent with other Node.js** - * **callbacks.** Normally, the first parameter to a Node.js callback is an `err` parameter, optionally followed by other parameters. The `fs.exists()` callback - * has only one boolean parameter. This is one reason `fs.access()` is recommended - * instead of `fs.exists()`. - * - * Using `fs.exists()` to check for the existence of a file before calling `fs.open()`, `fs.readFile()`, or `fs.writeFile()` is not recommended. Doing - * so introduces a race condition, since other processes may change the file's - * state between the two calls. Instead, user code should open/read/write the - * file directly and handle the error raised if the file does not exist. - * - * **write (NOT RECOMMENDED)** - * - * ```js - * import { exists, open, close } from 'node:fs'; - * - * exists('myfile', (e) => { - * if (e) { - * console.error('myfile already exists'); - * } else { - * open('myfile', 'wx', (err, fd) => { - * if (err) throw err; - * - * try { - * writeMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * } - * }); - * ``` - * - * **write (RECOMMENDED)** - * - * ```js - * import { open, close } from 'node:fs'; - * open('myfile', 'wx', (err, fd) => { - * if (err) { - * if (err.code === 'EEXIST') { - * console.error('myfile already exists'); - * return; - * } - * - * throw err; - * } - * - * try { - * writeMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * ``` - * - * **read (NOT RECOMMENDED)** - * - * ```js - * import { open, close, exists } from 'node:fs'; - * - * exists('myfile', (e) => { - * if (e) { - * open('myfile', 'r', (err, fd) => { - * if (err) throw err; - * - * try { - * readMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * } else { - * console.error('myfile does not exist'); - * } - * }); - * ``` - * - * **read (RECOMMENDED)** - * - * ```js - * import { open, close } from 'node:fs'; - * - * open('myfile', 'r', (err, fd) => { - * if (err) { - * if (err.code === 'ENOENT') { - * console.error('myfile does not exist'); - * return; - * } - * - * throw err; - * } - * - * try { - * readMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * ``` - * - * The "not recommended" examples above check for existence and then use the - * file; the "recommended" examples are better because they use the file directly - * and handle the error, if any. - * - * In general, check for the existence of a file only if the file won't be - * used directly, for example when its existence is a signal from another - * process. - * @since v0.0.2 - * @deprecated Since v1.0.0 - Use {@link stat} or {@link access} instead. - */ - function exists(path: PathLike, callback: (exists: boolean) => void): void; - /** @deprecated */ - namespace exists { - /** - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(path: PathLike): Promise; - } - /** - * Returns `true` if the path exists, `false` otherwise. - * - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link exists}. - * - * `fs.exists()` is deprecated, but `fs.existsSync()` is not. The `callback` parameter to `fs.exists()` accepts parameters that are inconsistent with other - * Node.js callbacks. `fs.existsSync()` does not use a callback. - * - * ```js - * import { existsSync } from 'node:fs'; - * - * if (existsSync('/etc/passwd')) - * console.log('The path exists.'); - * ``` - * @since v0.1.21 - */ - function existsSync(path: PathLike): boolean; - namespace constants { - // File Access Constants - /** Constant for fs.access(). File is visible to the calling process. */ - const F_OK: number; - /** Constant for fs.access(). File can be read by the calling process. */ - const R_OK: number; - /** Constant for fs.access(). File can be written by the calling process. */ - const W_OK: number; - /** Constant for fs.access(). File can be executed by the calling process. */ - const X_OK: number; - // File Copy Constants - /** Constant for fs.copyFile. Flag indicating the destination file should not be overwritten if it already exists. */ - const COPYFILE_EXCL: number; - /** - * Constant for fs.copyFile. copy operation will attempt to create a copy-on-write reflink. - * If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used. - */ - const COPYFILE_FICLONE: number; - /** - * Constant for fs.copyFile. Copy operation will attempt to create a copy-on-write reflink. - * If the underlying platform does not support copy-on-write, then the operation will fail with an error. - */ - const COPYFILE_FICLONE_FORCE: number; - // File Open Constants - /** Constant for fs.open(). Flag indicating to open a file for read-only access. */ - const O_RDONLY: number; - /** Constant for fs.open(). Flag indicating to open a file for write-only access. */ - const O_WRONLY: number; - /** Constant for fs.open(). Flag indicating to open a file for read-write access. */ - const O_RDWR: number; - /** Constant for fs.open(). Flag indicating to create the file if it does not already exist. */ - const O_CREAT: number; - /** Constant for fs.open(). Flag indicating that opening a file should fail if the O_CREAT flag is set and the file already exists. */ - const O_EXCL: number; - /** - * Constant for fs.open(). Flag indicating that if path identifies a terminal device, - * opening the path shall not cause that terminal to become the controlling terminal for the process - * (if the process does not already have one). - */ - const O_NOCTTY: number; - /** Constant for fs.open(). Flag indicating that if the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero. */ - const O_TRUNC: number; - /** Constant for fs.open(). Flag indicating that data will be appended to the end of the file. */ - const O_APPEND: number; - /** Constant for fs.open(). Flag indicating that the open should fail if the path is not a directory. */ - const O_DIRECTORY: number; - /** - * constant for fs.open(). - * Flag indicating reading accesses to the file system will no longer result in - * an update to the atime information associated with the file. - * This flag is available on Linux operating systems only. - */ - const O_NOATIME: number; - /** Constant for fs.open(). Flag indicating that the open should fail if the path is a symbolic link. */ - const O_NOFOLLOW: number; - /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O. */ - const O_SYNC: number; - /** Constant for fs.open(). Flag indicating that the file is opened for synchronous I/O with write operations waiting for data integrity. */ - const O_DSYNC: number; - /** Constant for fs.open(). Flag indicating to open the symbolic link itself rather than the resource it is pointing to. */ - const O_SYMLINK: number; - /** Constant for fs.open(). When set, an attempt will be made to minimize caching effects of file I/O. */ - const O_DIRECT: number; - /** Constant for fs.open(). Flag indicating to open the file in nonblocking mode when possible. */ - const O_NONBLOCK: number; - // File Type Constants - /** Constant for fs.Stats mode property for determining a file's type. Bit mask used to extract the file type code. */ - const S_IFMT: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a regular file. */ - const S_IFREG: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a directory. */ - const S_IFDIR: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a character-oriented device file. */ - const S_IFCHR: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a block-oriented device file. */ - const S_IFBLK: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a FIFO/pipe. */ - const S_IFIFO: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a symbolic link. */ - const S_IFLNK: number; - /** Constant for fs.Stats mode property for determining a file's type. File type constant for a socket. */ - const S_IFSOCK: number; - // File Mode Constants - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by owner. */ - const S_IRWXU: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by owner. */ - const S_IRUSR: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by owner. */ - const S_IWUSR: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by owner. */ - const S_IXUSR: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by group. */ - const S_IRWXG: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by group. */ - const S_IRGRP: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by group. */ - const S_IWGRP: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by group. */ - const S_IXGRP: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable, writable and executable by others. */ - const S_IRWXO: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating readable by others. */ - const S_IROTH: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating writable by others. */ - const S_IWOTH: number; - /** Constant for fs.Stats mode property for determining access permissions for a file. File mode indicating executable by others. */ - const S_IXOTH: number; - /** - * When set, a memory file mapping is used to access the file. This flag - * is available on Windows operating systems only. On other operating systems, - * this flag is ignored. - */ - const UV_FS_O_FILEMAP: number; - } - /** - * Tests a user's permissions for the file or directory specified by `path`. - * The `mode` argument is an optional integer that specifies the accessibility - * checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and `fs.constants.X_OK` - * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for - * possible values of `mode`. - * - * The final argument, `callback`, is a callback function that is invoked with - * a possible error argument. If any of the accessibility checks fail, the error - * argument will be an `Error` object. The following examples check if `package.json` exists, and if it is readable or writable. - * - * ```js - * import { access, constants } from 'node:fs'; - * - * const file = 'package.json'; - * - * // Check if the file exists in the current directory. - * access(file, constants.F_OK, (err) => { - * console.log(`${file} ${err ? 'does not exist' : 'exists'}`); - * }); - * - * // Check if the file is readable. - * access(file, constants.R_OK, (err) => { - * console.log(`${file} ${err ? 'is not readable' : 'is readable'}`); - * }); - * - * // Check if the file is writable. - * access(file, constants.W_OK, (err) => { - * console.log(`${file} ${err ? 'is not writable' : 'is writable'}`); - * }); - * - * // Check if the file is readable and writable. - * access(file, constants.R_OK | constants.W_OK, (err) => { - * console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`); - * }); - * ``` - * - * Do not use `fs.access()` to check for the accessibility of a file before calling `fs.open()`, `fs.readFile()`, or `fs.writeFile()`. Doing - * so introduces a race condition, since other processes may change the file's - * state between the two calls. Instead, user code should open/read/write the - * file directly and handle the error raised if the file is not accessible. - * - * **write (NOT RECOMMENDED)** - * - * ```js - * import { access, open, close } from 'node:fs'; - * - * access('myfile', (err) => { - * if (!err) { - * console.error('myfile already exists'); - * return; - * } - * - * open('myfile', 'wx', (err, fd) => { - * if (err) throw err; - * - * try { - * writeMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * }); - * ``` - * - * **write (RECOMMENDED)** - * - * ```js - * import { open, close } from 'node:fs'; - * - * open('myfile', 'wx', (err, fd) => { - * if (err) { - * if (err.code === 'EEXIST') { - * console.error('myfile already exists'); - * return; - * } - * - * throw err; - * } - * - * try { - * writeMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * ``` - * - * **read (NOT RECOMMENDED)** - * - * ```js - * import { access, open, close } from 'node:fs'; - * access('myfile', (err) => { - * if (err) { - * if (err.code === 'ENOENT') { - * console.error('myfile does not exist'); - * return; - * } - * - * throw err; - * } - * - * open('myfile', 'r', (err, fd) => { - * if (err) throw err; - * - * try { - * readMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * }); - * ``` - * - * **read (RECOMMENDED)** - * - * ```js - * import { open, close } from 'node:fs'; - * - * open('myfile', 'r', (err, fd) => { - * if (err) { - * if (err.code === 'ENOENT') { - * console.error('myfile does not exist'); - * return; - * } - * - * throw err; - * } - * - * try { - * readMyData(fd); - * } finally { - * close(fd, (err) => { - * if (err) throw err; - * }); - * } - * }); - * ``` - * - * The "not recommended" examples above check for accessibility and then use the - * file; the "recommended" examples are better because they use the file directly - * and handle the error, if any. - * - * In general, check for the accessibility of a file only if the file will not be - * used directly, for example when its accessibility is a signal from another - * process. - * - * On Windows, access-control policies (ACLs) on a directory may limit access to - * a file or directory. The `fs.access()` function, however, does not check the - * ACL and therefore may report that a path is accessible even if the ACL restricts - * the user from reading or writing to it. - * @since v0.11.15 - * @param [mode=fs.constants.F_OK] - */ - function access(path: PathLike, mode: number | undefined, callback: NoParamCallback): void; - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - */ - function access(path: PathLike, callback: NoParamCallback): void; - namespace access { - /** - * Asynchronously tests a user's permissions for the file specified by path. - * @param path A path to a file or directory. If a URL is provided, it must use the `file:` protocol. - * URL support is _experimental_. - */ - function __promisify__(path: PathLike, mode?: number): Promise; - } - /** - * Synchronously tests a user's permissions for the file or directory specified - * by `path`. The `mode` argument is an optional integer that specifies the - * accessibility checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and - * `fs.constants.X_OK` (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for - * possible values of `mode`. - * - * If any of the accessibility checks fail, an `Error` will be thrown. Otherwise, - * the method will return `undefined`. - * - * ```js - * import { accessSync, constants } from 'node:fs'; - * - * try { - * accessSync('etc/passwd', constants.R_OK | constants.W_OK); - * console.log('can read/write'); - * } catch (err) { - * console.error('no access!'); - * } - * ``` - * @since v0.11.15 - * @param [mode=fs.constants.F_OK] - */ - function accessSync(path: PathLike, mode?: number): void; - interface StreamOptions { - flags?: string | undefined; - encoding?: BufferEncoding | undefined; - fd?: number | FileHandle | undefined; - mode?: number | undefined; - autoClose?: boolean | undefined; - emitClose?: boolean | undefined; - start?: number | undefined; - signal?: AbortSignal | null | undefined; - highWaterMark?: number | undefined; - } - interface FSImplementation { - open?: (...args: any[]) => any; - close?: (...args: any[]) => any; - } - interface CreateReadStreamFSImplementation extends FSImplementation { - read: (...args: any[]) => any; - } - interface CreateWriteStreamFSImplementation extends FSImplementation { - write: (...args: any[]) => any; - writev?: (...args: any[]) => any; - } - interface ReadStreamOptions extends StreamOptions { - fs?: CreateReadStreamFSImplementation | null | undefined; - end?: number | undefined; - } - interface WriteStreamOptions extends StreamOptions { - fs?: CreateWriteStreamFSImplementation | null | undefined; - flush?: boolean | undefined; - } - /** - * `options` can include `start` and `end` values to read a range of bytes from - * the file instead of the entire file. Both `start` and `end` are inclusive and - * start counting at 0, allowed values are in the - * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `fd` is specified and `start` is - * omitted or `undefined`, `fs.createReadStream()` reads sequentially from the - * current file position. The `encoding` can be any one of those accepted by `Buffer`. - * - * If `fd` is specified, `ReadStream` will ignore the `path` argument and will use - * the specified file descriptor. This means that no `'open'` event will be - * emitted. `fd` should be blocking; non-blocking `fd`s should be passed to `net.Socket`. - * - * If `fd` points to a character device that only supports blocking reads - * (such as keyboard or sound card), read operations do not finish until data is - * available. This can prevent the process from exiting and the stream from - * closing naturally. - * - * By default, the stream will emit a `'close'` event after it has been - * destroyed. Set the `emitClose` option to `false` to change this behavior. - * - * By providing the `fs` option, it is possible to override the corresponding `fs` implementations for `open`, `read`, and `close`. When providing the `fs` option, - * an override for `read` is required. If no `fd` is provided, an override for `open` is also required. If `autoClose` is `true`, an override for `close` is - * also required. - * - * ```js - * import { createReadStream } from 'node:fs'; - * - * // Create a stream from some character device. - * const stream = createReadStream('/dev/input/event0'); - * setTimeout(() => { - * stream.close(); // This may not close the stream. - * // Artificially marking end-of-stream, as if the underlying resource had - * // indicated end-of-file by itself, allows the stream to close. - * // This does not cancel pending read operations, and if there is such an - * // operation, the process may still not be able to exit successfully - * // until it finishes. - * stream.push(null); - * stream.read(0); - * }, 100); - * ``` - * - * If `autoClose` is false, then the file descriptor won't be closed, even if - * there's an error. It is the application's responsibility to close it and make - * sure there's no file descriptor leak. If `autoClose` is set to true (default - * behavior), on `'error'` or `'end'` the file descriptor will be closed - * automatically. - * - * `mode` sets the file mode (permission and sticky bits), but only if the - * file was created. - * - * An example to read the last 10 bytes of a file which is 100 bytes long: - * - * ```js - * import { createReadStream } from 'node:fs'; - * - * createReadStream('sample.txt', { start: 90, end: 99 }); - * ``` - * - * If `options` is a string, then it specifies the encoding. - * @since v0.1.31 - */ - function createReadStream(path: PathLike, options?: BufferEncoding | ReadStreamOptions): ReadStream; - /** - * `options` may also include a `start` option to allow writing data at some - * position past the beginning of the file, allowed values are in the - * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than - * replacing it may require the `flags` option to be set to `r+` rather than the - * default `w`. The `encoding` can be any one of those accepted by `Buffer`. - * - * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'` the file descriptor will be closed automatically. If `autoClose` is false, - * then the file descriptor won't be closed, even if there's an error. - * It is the application's responsibility to close it and make sure there's no - * file descriptor leak. - * - * By default, the stream will emit a `'close'` event after it has been - * destroyed. Set the `emitClose` option to `false` to change this behavior. - * - * By providing the `fs` option it is possible to override the corresponding `fs` implementations for `open`, `write`, `writev`, and `close`. Overriding `write()` without `writev()` can reduce - * performance as some optimizations (`_writev()`) - * will be disabled. When providing the `fs` option, overrides for at least one of `write` and `writev` are required. If no `fd` option is supplied, an override - * for `open` is also required. If `autoClose` is `true`, an override for `close` is also required. - * - * Like `fs.ReadStream`, if `fd` is specified, `fs.WriteStream` will ignore the `path` argument and will use the specified file descriptor. This means that no `'open'` event will be - * emitted. `fd` should be blocking; non-blocking `fd`s - * should be passed to `net.Socket`. - * - * If `options` is a string, then it specifies the encoding. - * @since v0.1.31 - */ - function createWriteStream(path: PathLike, options?: BufferEncoding | WriteStreamOptions): WriteStream; - /** - * Forces all currently queued I/O operations associated with the file to the - * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. No arguments other - * than a possible - * exception are given to the completion callback. - * @since v0.1.96 - */ - function fdatasync(fd: number, callback: NoParamCallback): void; - namespace fdatasync { - /** - * Asynchronous fdatasync(2) - synchronize a file's in-core state with storage device. - * @param fd A file descriptor. - */ - function __promisify__(fd: number): Promise; - } - /** - * Forces all currently queued I/O operations associated with the file to the - * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. Returns `undefined`. - * @since v0.1.96 - */ - function fdatasyncSync(fd: number): void; - /** - * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it - * already exists. No arguments other than a possible exception are given to the - * callback function. Node.js makes no guarantees about the atomicity of the copy - * operation. If an error occurs after the destination file has been opened for - * writing, Node.js will attempt to remove the destination. - * - * `mode` is an optional integer that specifies the behavior - * of the copy operation. It is possible to create a mask consisting of the bitwise - * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). - * - * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already - * exists. - * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a - * copy-on-write reflink. If the platform does not support copy-on-write, then a - * fallback copy mechanism is used. - * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to - * create a copy-on-write reflink. If the platform does not support - * copy-on-write, then the operation will fail. - * - * ```js - * import { copyFile, constants } from 'node:fs'; - * - * function callback(err) { - * if (err) throw err; - * console.log('source.txt was copied to destination.txt'); - * } - * - * // destination.txt will be created or overwritten by default. - * copyFile('source.txt', 'destination.txt', callback); - * - * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. - * copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback); - * ``` - * @since v8.5.0 - * @param src source filename to copy - * @param dest destination filename of the copy operation - * @param [mode=0] modifiers for copy operation. - */ - function copyFile(src: PathLike, dest: PathLike, callback: NoParamCallback): void; - function copyFile(src: PathLike, dest: PathLike, mode: number, callback: NoParamCallback): void; - namespace copyFile { - function __promisify__(src: PathLike, dst: PathLike, mode?: number): Promise; - } - /** - * Synchronously copies `src` to `dest`. By default, `dest` is overwritten if it - * already exists. Returns `undefined`. Node.js makes no guarantees about the - * atomicity of the copy operation. If an error occurs after the destination file - * has been opened for writing, Node.js will attempt to remove the destination. - * - * `mode` is an optional integer that specifies the behavior - * of the copy operation. It is possible to create a mask consisting of the bitwise - * OR of two or more values (e.g.`fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`). - * - * * `fs.constants.COPYFILE_EXCL`: The copy operation will fail if `dest` already - * exists. - * * `fs.constants.COPYFILE_FICLONE`: The copy operation will attempt to create a - * copy-on-write reflink. If the platform does not support copy-on-write, then a - * fallback copy mechanism is used. - * * `fs.constants.COPYFILE_FICLONE_FORCE`: The copy operation will attempt to - * create a copy-on-write reflink. If the platform does not support - * copy-on-write, then the operation will fail. - * - * ```js - * import { copyFileSync, constants } from 'node:fs'; - * - * // destination.txt will be created or overwritten by default. - * copyFileSync('source.txt', 'destination.txt'); - * console.log('source.txt was copied to destination.txt'); - * - * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. - * copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL); - * ``` - * @since v8.5.0 - * @param src source filename to copy - * @param dest destination filename of the copy operation - * @param [mode=0] modifiers for copy operation. - */ - function copyFileSync(src: PathLike, dest: PathLike, mode?: number): void; - /** - * Write an array of `ArrayBufferView`s to the file specified by `fd` using `writev()`. - * - * `position` is the offset from the beginning of the file where this data - * should be written. If `typeof position !== 'number'`, the data will be written - * at the current position. - * - * The callback will be given three arguments: `err`, `bytesWritten`, and `buffers`. `bytesWritten` is how many bytes were written from `buffers`. - * - * If this method is `util.promisify()` ed, it returns a promise for an `Object` with `bytesWritten` and `buffers` properties. - * - * It is unsafe to use `fs.writev()` multiple times on the same file without - * waiting for the callback. For this scenario, use {@link createWriteStream}. - * - * On Linux, positional writes don't work when the file is opened in append mode. - * The kernel ignores the position argument and always appends the data to - * the end of the file. - * @since v12.9.0 - * @param [position='null'] - */ - function writev( - fd: number, - buffers: TBuffers, - cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: TBuffers) => void, - ): void; - function writev( - fd: number, - buffers: TBuffers, - position: number | null, - cb: (err: NodeJS.ErrnoException | null, bytesWritten: number, buffers: TBuffers) => void, - ): void; - // Providing a default type parameter doesn't provide true BC for userland consumers, but at least suppresses TS2314 - // TODO: remove default in future major version - interface WriteVResult { - bytesWritten: number; - buffers: T; - } - namespace writev { - function __promisify__( - fd: number, - buffers: TBuffers, - position?: number, - ): Promise>; - } - /** - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link writev}. - * @since v12.9.0 - * @param [position='null'] - * @return The number of bytes written. - */ - function writevSync(fd: number, buffers: readonly NodeJS.ArrayBufferView[], position?: number): number; - /** - * Read from a file specified by `fd` and write to an array of `ArrayBufferView`s - * using `readv()`. - * - * `position` is the offset from the beginning of the file from where data - * should be read. If `typeof position !== 'number'`, the data will be read - * from the current position. - * - * The callback will be given three arguments: `err`, `bytesRead`, and `buffers`. `bytesRead` is how many bytes were read from the file. - * - * If this method is invoked as its `util.promisify()` ed version, it returns - * a promise for an `Object` with `bytesRead` and `buffers` properties. - * @since v13.13.0, v12.17.0 - * @param [position='null'] - */ - function readv( - fd: number, - buffers: TBuffers, - cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: TBuffers) => void, - ): void; - function readv( - fd: number, - buffers: TBuffers, - position: number | null, - cb: (err: NodeJS.ErrnoException | null, bytesRead: number, buffers: TBuffers) => void, - ): void; - // Providing a default type parameter doesn't provide true BC for userland consumers, but at least suppresses TS2314 - // TODO: remove default in future major version - interface ReadVResult { - bytesRead: number; - buffers: T; - } - namespace readv { - function __promisify__( - fd: number, - buffers: TBuffers, - position?: number, - ): Promise>; - } - /** - * For detailed information, see the documentation of the asynchronous version of - * this API: {@link readv}. - * @since v13.13.0, v12.17.0 - * @param [position='null'] - * @return The number of bytes read. - */ - function readvSync(fd: number, buffers: readonly NodeJS.ArrayBufferView[], position?: number): number; - - interface OpenAsBlobOptions { - /** - * An optional mime type for the blob. - * - * @default 'undefined' - */ - type?: string | undefined; - } - - /** - * Returns a `Blob` whose data is backed by the given file. - * - * The file must not be modified after the `Blob` is created. Any modifications - * will cause reading the `Blob` data to fail with a `DOMException` error. - * Synchronous stat operations on the file when the `Blob` is created, and before - * each read in order to detect whether the file data has been modified on disk. - * - * ```js - * import { openAsBlob } from 'node:fs'; - * - * const blob = await openAsBlob('the.file.txt'); - * const ab = await blob.arrayBuffer(); - * blob.stream(); - * ``` - * @since v19.8.0 - */ - function openAsBlob(path: PathLike, options?: OpenAsBlobOptions): Promise; - - interface OpenDirOptions { - /** - * @default 'utf8' - */ - encoding?: BufferEncoding | undefined; - /** - * Number of directory entries that are buffered - * internally when reading from the directory. Higher values lead to better - * performance but higher memory usage. - * @default 32 - */ - bufferSize?: number | undefined; - /** - * @default false - */ - recursive?: boolean | undefined; - } - /** - * Synchronously open a directory. See [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html). - * - * Creates an `fs.Dir`, which contains all further functions for reading from - * and cleaning up the directory. - * - * The `encoding` option sets the encoding for the `path` while opening the - * directory and subsequent read operations. - * @since v12.12.0 - */ - function opendirSync(path: PathLike, options?: OpenDirOptions): Dir; - /** - * Asynchronously open a directory. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for - * more details. - * - * Creates an `fs.Dir`, which contains all further functions for reading from - * and cleaning up the directory. - * - * The `encoding` option sets the encoding for the `path` while opening the - * directory and subsequent read operations. - * @since v12.12.0 - */ - function opendir(path: PathLike, cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void): void; - function opendir( - path: PathLike, - options: OpenDirOptions, - cb: (err: NodeJS.ErrnoException | null, dir: Dir) => void, - ): void; - namespace opendir { - function __promisify__(path: PathLike, options?: OpenDirOptions): Promise; - } - interface BigIntStats extends StatsBase { - atimeNs: bigint; - mtimeNs: bigint; - ctimeNs: bigint; - birthtimeNs: bigint; - } - interface BigIntOptions { - bigint: true; - } - interface StatOptions { - bigint?: boolean | undefined; - } - interface StatSyncOptions extends StatOptions { - throwIfNoEntry?: boolean | undefined; - } - interface CopyOptionsBase { - /** - * Dereference symlinks - * @default false - */ - dereference?: boolean | undefined; - /** - * When `force` is `false`, and the destination - * exists, throw an error. - * @default false - */ - errorOnExist?: boolean | undefined; - /** - * Overwrite existing file or directory. _The copy - * operation will ignore errors if you set this to false and the destination - * exists. Use the `errorOnExist` option to change this behavior. - * @default true - */ - force?: boolean | undefined; - /** - * Modifiers for copy operation. See `mode` flag of {@link copyFileSync()} - */ - mode?: number | undefined; - /** - * When `true` timestamps from `src` will - * be preserved. - * @default false - */ - preserveTimestamps?: boolean | undefined; - /** - * Copy directories recursively. - * @default false - */ - recursive?: boolean | undefined; - /** - * When true, path resolution for symlinks will be skipped - * @default false - */ - verbatimSymlinks?: boolean | undefined; - } - interface CopyOptions extends CopyOptionsBase { - /** - * Function to filter copied files/directories. Return - * `true` to copy the item, `false` to ignore it. - */ - filter?: ((source: string, destination: string) => boolean | Promise) | undefined; - } - interface CopySyncOptions extends CopyOptionsBase { - /** - * Function to filter copied files/directories. Return - * `true` to copy the item, `false` to ignore it. - */ - filter?: ((source: string, destination: string) => boolean) | undefined; - } - /** - * Asynchronously copies the entire directory structure from `src` to `dest`, - * including subdirectories and files. - * - * When copying a directory to another directory, globs are not supported and - * behavior is similar to `cp dir1/ dir2/`. - * @since v16.7.0 - * @experimental - * @param src source path to copy. - * @param dest destination path to copy to. - */ - function cp( - source: string | URL, - destination: string | URL, - callback: (err: NodeJS.ErrnoException | null) => void, - ): void; - function cp( - source: string | URL, - destination: string | URL, - opts: CopyOptions, - callback: (err: NodeJS.ErrnoException | null) => void, - ): void; - /** - * Synchronously copies the entire directory structure from `src` to `dest`, - * including subdirectories and files. - * - * When copying a directory to another directory, globs are not supported and - * behavior is similar to `cp dir1/ dir2/`. - * @since v16.7.0 - * @experimental - * @param src source path to copy. - * @param dest destination path to copy to. - */ - function cpSync(source: string | URL, destination: string | URL, opts?: CopySyncOptions): void; - - // TODO: collapse - interface _GlobOptions { - /** - * Current working directory. - * @default process.cwd() - */ - cwd?: string | URL | undefined; - /** - * `true` if the glob should return paths as `Dirent`s, `false` otherwise. - * @default false - * @since v22.2.0 - */ - withFileTypes?: boolean | undefined; - /** - * Function to filter out files/directories or a - * list of glob patterns to be excluded. If a function is provided, return - * `true` to exclude the item, `false` to include it. - * If a string array is provided, each string should be a glob pattern that - * specifies paths to exclude. Note: Negation patterns (e.g., '!foo.js') are - * not supported. - * @default undefined - */ - exclude?: ((fileName: T) => boolean) | readonly string[] | undefined; - } - interface GlobOptions extends _GlobOptions {} - interface GlobOptionsWithFileTypes extends _GlobOptions { - withFileTypes: true; - } - interface GlobOptionsWithoutFileTypes extends _GlobOptions { - withFileTypes?: false | undefined; - } - - /** - * Retrieves the files matching the specified pattern. - * - * ```js - * import { glob } from 'node:fs'; - * - * glob('*.js', (err, matches) => { - * if (err) throw err; - * console.log(matches); - * }); - * ``` - * @since v22.0.0 - */ - function glob( - pattern: string | readonly string[], - callback: (err: NodeJS.ErrnoException | null, matches: string[]) => void, - ): void; - function glob( - pattern: string | readonly string[], - options: GlobOptionsWithFileTypes, - callback: ( - err: NodeJS.ErrnoException | null, - matches: Dirent[], - ) => void, - ): void; - function glob( - pattern: string | readonly string[], - options: GlobOptionsWithoutFileTypes, - callback: ( - err: NodeJS.ErrnoException | null, - matches: string[], - ) => void, - ): void; - function glob( - pattern: string | readonly string[], - options: GlobOptions, - callback: ( - err: NodeJS.ErrnoException | null, - matches: Dirent[] | string[], - ) => void, - ): void; - /** - * ```js - * import { globSync } from 'node:fs'; - * - * console.log(globSync('*.js')); - * ``` - * @since v22.0.0 - * @returns paths of files that match the pattern. - */ - function globSync(pattern: string | readonly string[]): string[]; - function globSync( - pattern: string | readonly string[], - options: GlobOptionsWithFileTypes, - ): Dirent[]; - function globSync( - pattern: string | readonly string[], - options: GlobOptionsWithoutFileTypes, - ): string[]; - function globSync( - pattern: string | readonly string[], - options: GlobOptions, - ): Dirent[] | string[]; -} -declare module "node:fs" { - export * as promises from "node:fs/promises"; -} -declare module "fs" { - export * from "node:fs"; -} diff --git a/skills/flight-finder/node_modules/@types/node/fs/promises.d.ts b/skills/flight-finder/node_modules/@types/node/fs/promises.d.ts deleted file mode 100644 index e4d249d..0000000 --- a/skills/flight-finder/node_modules/@types/node/fs/promises.d.ts +++ /dev/null @@ -1,1329 +0,0 @@ -/** - * The `fs/promises` API provides asynchronous file system methods that return - * promises. - * - * The promise APIs use the underlying Node.js threadpool to perform file - * system operations off the event loop thread. These operations are not - * synchronized or threadsafe. Care must be taken when performing multiple - * concurrent modifications on the same file or data corruption may occur. - * @since v10.0.0 - */ -declare module "node:fs/promises" { - import { NonSharedBuffer } from "node:buffer"; - import { Abortable } from "node:events"; - import { Interface as ReadlineInterface } from "node:readline"; - import { - BigIntStats, - BigIntStatsFs, - BufferEncodingOption, - constants as fsConstants, - CopyOptions, - Dir, - Dirent, - EncodingOption, - GlobOptions, - GlobOptionsWithFileTypes, - GlobOptionsWithoutFileTypes, - MakeDirectoryOptions, - Mode, - ObjectEncodingOptions, - OpenDirOptions, - OpenMode, - PathLike, - ReadOptions, - ReadOptionsWithBuffer, - ReadPosition, - ReadStream, - ReadVResult, - RmOptions, - StatFsOptions, - StatOptions, - Stats, - StatsFs, - TimeLike, - WatchEventType, - WatchOptions as _WatchOptions, - WriteStream, - WriteVResult, - } from "node:fs"; - import { Stream } from "node:stream"; - import { ReadableStream } from "node:stream/web"; - interface FileChangeInfo { - eventType: WatchEventType; - filename: T | null; - } - interface FlagAndOpenMode { - mode?: Mode | undefined; - flag?: OpenMode | undefined; - } - interface FileReadResult { - bytesRead: number; - buffer: T; - } - /** @deprecated This interface will be removed in a future version. Use `import { ReadOptionsWithBuffer } from "node:fs"` instead. */ - interface FileReadOptions { - /** - * @default `Buffer.alloc(0xffff)` - */ - buffer?: T; - /** - * @default 0 - */ - offset?: number | null; - /** - * @default `buffer.byteLength` - */ - length?: number | null; - position?: ReadPosition | null; - } - interface CreateReadStreamOptions extends Abortable { - encoding?: BufferEncoding | null | undefined; - autoClose?: boolean | undefined; - emitClose?: boolean | undefined; - start?: number | undefined; - end?: number | undefined; - highWaterMark?: number | undefined; - } - interface CreateWriteStreamOptions { - encoding?: BufferEncoding | null | undefined; - autoClose?: boolean | undefined; - emitClose?: boolean | undefined; - start?: number | undefined; - highWaterMark?: number | undefined; - flush?: boolean | undefined; - } - interface ReadableWebStreamOptions { - autoClose?: boolean | undefined; - } - // TODO: Add `EventEmitter` close - interface FileHandle { - /** - * The numeric file descriptor managed by the {FileHandle} object. - * @since v10.0.0 - */ - readonly fd: number; - /** - * Alias of `filehandle.writeFile()`. - * - * When operating on file handles, the mode cannot be changed from what it was set - * to with `fsPromises.open()`. Therefore, this is equivalent to `filehandle.writeFile()`. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - appendFile( - data: string | Uint8Array, - options?: - | (ObjectEncodingOptions & Abortable) - | BufferEncoding - | null, - ): Promise; - /** - * Changes the ownership of the file. A wrapper for [`chown(2)`](http://man7.org/linux/man-pages/man2/chown.2.html). - * @since v10.0.0 - * @param uid The file's new owner's user id. - * @param gid The file's new group's group id. - * @return Fulfills with `undefined` upon success. - */ - chown(uid: number, gid: number): Promise; - /** - * Modifies the permissions on the file. See [`chmod(2)`](http://man7.org/linux/man-pages/man2/chmod.2.html). - * @since v10.0.0 - * @param mode the file mode bit mask. - * @return Fulfills with `undefined` upon success. - */ - chmod(mode: Mode): Promise; - /** - * Unlike the 16 KiB default `highWaterMark` for a `stream.Readable`, the stream - * returned by this method has a default `highWaterMark` of 64 KiB. - * - * `options` can include `start` and `end` values to read a range of bytes from - * the file instead of the entire file. Both `start` and `end` are inclusive and - * start counting at 0, allowed values are in the - * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. If `start` is - * omitted or `undefined`, `filehandle.createReadStream()` reads sequentially from - * the current file position. The `encoding` can be any one of those accepted by `Buffer`. - * - * If the `FileHandle` points to a character device that only supports blocking - * reads (such as keyboard or sound card), read operations do not finish until data - * is available. This can prevent the process from exiting and the stream from - * closing naturally. - * - * By default, the stream will emit a `'close'` event after it has been - * destroyed. Set the `emitClose` option to `false` to change this behavior. - * - * ```js - * import { open } from 'node:fs/promises'; - * - * const fd = await open('/dev/input/event0'); - * // Create a stream from some character device. - * const stream = fd.createReadStream(); - * setTimeout(() => { - * stream.close(); // This may not close the stream. - * // Artificially marking end-of-stream, as if the underlying resource had - * // indicated end-of-file by itself, allows the stream to close. - * // This does not cancel pending read operations, and if there is such an - * // operation, the process may still not be able to exit successfully - * // until it finishes. - * stream.push(null); - * stream.read(0); - * }, 100); - * ``` - * - * If `autoClose` is false, then the file descriptor won't be closed, even if - * there's an error. It is the application's responsibility to close it and make - * sure there's no file descriptor leak. If `autoClose` is set to true (default - * behavior), on `'error'` or `'end'` the file descriptor will be closed - * automatically. - * - * An example to read the last 10 bytes of a file which is 100 bytes long: - * - * ```js - * import { open } from 'node:fs/promises'; - * - * const fd = await open('sample.txt'); - * fd.createReadStream({ start: 90, end: 99 }); - * ``` - * @since v16.11.0 - */ - createReadStream(options?: CreateReadStreamOptions): ReadStream; - /** - * `options` may also include a `start` option to allow writing data at some - * position past the beginning of the file, allowed values are in the - * \[0, [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)\] range. Modifying a file rather than - * replacing it may require the `flags` `open` option to be set to `r+` rather than - * the default `r`. The `encoding` can be any one of those accepted by `Buffer`. - * - * If `autoClose` is set to true (default behavior) on `'error'` or `'finish'` the file descriptor will be closed automatically. If `autoClose` is false, - * then the file descriptor won't be closed, even if there's an error. - * It is the application's responsibility to close it and make sure there's no - * file descriptor leak. - * - * By default, the stream will emit a `'close'` event after it has been - * destroyed. Set the `emitClose` option to `false` to change this behavior. - * @since v16.11.0 - */ - createWriteStream(options?: CreateWriteStreamOptions): WriteStream; - /** - * Forces all currently queued I/O operations associated with the file to the - * operating system's synchronized I/O completion state. Refer to the POSIX [`fdatasync(2)`](http://man7.org/linux/man-pages/man2/fdatasync.2.html) documentation for details. - * - * Unlike `filehandle.sync` this method does not flush modified metadata. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - datasync(): Promise; - /** - * Request that all data for the open file descriptor is flushed to the storage - * device. The specific implementation is operating system and device specific. - * Refer to the POSIX [`fsync(2)`](http://man7.org/linux/man-pages/man2/fsync.2.html) documentation for more detail. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - sync(): Promise; - /** - * Reads data from the file and stores that in the given buffer. - * - * If the file is not modified concurrently, the end-of-file is reached when the - * number of bytes read is zero. - * @since v10.0.0 - * @param buffer A buffer that will be filled with the file data read. - * @param offset The location in the buffer at which to start filling. - * @param length The number of bytes to read. - * @param position The location where to begin reading data from the file. If `null`, data will be read from the current file position, and the position will be updated. If `position` is an - * integer, the current file position will remain unchanged. - * @return Fulfills upon success with an object with two properties: - */ - read( - buffer: T, - offset?: number | null, - length?: number | null, - position?: ReadPosition | null, - ): Promise>; - read( - buffer: T, - options?: ReadOptions, - ): Promise>; - read( - options?: ReadOptionsWithBuffer, - ): Promise>; - /** - * Returns a byte-oriented `ReadableStream` that may be used to read the file's - * contents. - * - * An error will be thrown if this method is called more than once or is called - * after the `FileHandle` is closed or closing. - * - * ```js - * import { - * open, - * } from 'node:fs/promises'; - * - * const file = await open('./some/file/to/read'); - * - * for await (const chunk of file.readableWebStream()) - * console.log(chunk); - * - * await file.close(); - * ``` - * - * While the `ReadableStream` will read the file to completion, it will not - * close the `FileHandle` automatically. User code must still call the`fileHandle.close()` method. - * @since v17.0.0 - */ - readableWebStream(options?: ReadableWebStreamOptions): ReadableStream; - /** - * Asynchronously reads the entire contents of a file. - * - * If `options` is a string, then it specifies the `encoding`. - * - * The `FileHandle` has to support reading. - * - * If one or more `filehandle.read()` calls are made on a file handle and then a `filehandle.readFile()` call is made, the data will be read from the current - * position till the end of the file. It doesn't always read from the beginning - * of the file. - * @since v10.0.0 - * @return Fulfills upon a successful read with the contents of the file. If no encoding is specified (using `options.encoding`), the data is returned as a {Buffer} object. Otherwise, the - * data will be a string. - */ - readFile( - options?: - | ({ encoding?: null | undefined } & Abortable) - | null, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for reading. - */ - readFile( - options: - | ({ encoding: BufferEncoding } & Abortable) - | BufferEncoding, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. The underlying file will _not_ be closed automatically. - * The `FileHandle` must have been opened for reading. - */ - readFile( - options?: - | (ObjectEncodingOptions & Abortable) - | BufferEncoding - | null, - ): Promise; - /** - * Convenience method to create a `readline` interface and stream over the file. - * See `filehandle.createReadStream()` for the options. - * - * ```js - * import { open } from 'node:fs/promises'; - * - * const file = await open('./some/file/to/read'); - * - * for await (const line of file.readLines()) { - * console.log(line); - * } - * ``` - * @since v18.11.0 - */ - readLines(options?: CreateReadStreamOptions): ReadlineInterface; - /** - * @since v10.0.0 - * @return Fulfills with an {fs.Stats} for the file. - */ - stat( - opts?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - stat( - opts: StatOptions & { - bigint: true; - }, - ): Promise; - stat(opts?: StatOptions): Promise; - /** - * Truncates the file. - * - * If the file was larger than `len` bytes, only the first `len` bytes will be - * retained in the file. - * - * The following example retains only the first four bytes of the file: - * - * ```js - * import { open } from 'node:fs/promises'; - * - * let filehandle = null; - * try { - * filehandle = await open('temp.txt', 'r+'); - * await filehandle.truncate(4); - * } finally { - * await filehandle?.close(); - * } - * ``` - * - * If the file previously was shorter than `len` bytes, it is extended, and the - * extended part is filled with null bytes (`'\0'`): - * - * If `len` is negative then `0` will be used. - * @since v10.0.0 - * @param [len=0] - * @return Fulfills with `undefined` upon success. - */ - truncate(len?: number): Promise; - /** - * Change the file system timestamps of the object referenced by the `FileHandle` then fulfills the promise with no arguments upon success. - * @since v10.0.0 - */ - utimes(atime: TimeLike, mtime: TimeLike): Promise; - /** - * Asynchronously writes data to a file, replacing the file if it already exists. `data` can be a string, a buffer, an - * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an - * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. - * The promise is fulfilled with no arguments upon success. - * - * If `options` is a string, then it specifies the `encoding`. - * - * The `FileHandle` has to support writing. - * - * It is unsafe to use `filehandle.writeFile()` multiple times on the same file - * without waiting for the promise to be fulfilled (or rejected). - * - * If one or more `filehandle.write()` calls are made on a file handle and then a`filehandle.writeFile()` call is made, the data will be written from the - * current position till the end of the file. It doesn't always write from the - * beginning of the file. - * @since v10.0.0 - */ - writeFile( - data: string | Uint8Array, - options?: - | (ObjectEncodingOptions & Abortable) - | BufferEncoding - | null, - ): Promise; - /** - * Write `buffer` to the file. - * - * The promise is fulfilled with an object containing two properties: - * - * It is unsafe to use `filehandle.write()` multiple times on the same file - * without waiting for the promise to be fulfilled (or rejected). For this - * scenario, use `filehandle.createWriteStream()`. - * - * On Linux, positional writes do not work when the file is opened in append mode. - * The kernel ignores the position argument and always appends the data to - * the end of the file. - * @since v10.0.0 - * @param offset The start position from within `buffer` where the data to write begins. - * @param [length=buffer.byteLength - offset] The number of bytes from `buffer` to write. - * @param [position='null'] The offset from the beginning of the file where the data from `buffer` should be written. If `position` is not a `number`, the data will be written at the current - * position. See the POSIX pwrite(2) documentation for more detail. - */ - write( - buffer: TBuffer, - offset?: number | null, - length?: number | null, - position?: number | null, - ): Promise<{ - bytesWritten: number; - buffer: TBuffer; - }>; - write( - buffer: TBuffer, - options?: { offset?: number; length?: number; position?: number }, - ): Promise<{ - bytesWritten: number; - buffer: TBuffer; - }>; - write( - data: string, - position?: number | null, - encoding?: BufferEncoding | null, - ): Promise<{ - bytesWritten: number; - buffer: string; - }>; - /** - * Write an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s to the file. - * - * The promise is fulfilled with an object containing a two properties: - * - * It is unsafe to call `writev()` multiple times on the same file without waiting - * for the promise to be fulfilled (or rejected). - * - * On Linux, positional writes don't work when the file is opened in append mode. - * The kernel ignores the position argument and always appends the data to - * the end of the file. - * @since v12.9.0 - * @param [position='null'] The offset from the beginning of the file where the data from `buffers` should be written. If `position` is not a `number`, the data will be written at the current - * position. - */ - writev( - buffers: TBuffers, - position?: number, - ): Promise>; - /** - * Read from a file and write to an array of [ArrayBufferView](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView) s - * @since v13.13.0, v12.17.0 - * @param [position='null'] The offset from the beginning of the file where the data should be read from. If `position` is not a `number`, the data will be read from the current position. - * @return Fulfills upon success an object containing two properties: - */ - readv( - buffers: TBuffers, - position?: number, - ): Promise>; - /** - * Closes the file handle after waiting for any pending operation on the handle to - * complete. - * - * ```js - * import { open } from 'node:fs/promises'; - * - * let filehandle; - * try { - * filehandle = await open('thefile.txt', 'r'); - * } finally { - * await filehandle?.close(); - * } - * ``` - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - close(): Promise; - /** - * Calls `filehandle.close()` and returns a promise that fulfills when the - * filehandle is closed. - * @since v20.4.0, v18.8.0 - */ - [Symbol.asyncDispose](): Promise; - } - const constants: typeof fsConstants; - /** - * Tests a user's permissions for the file or directory specified by `path`. - * The `mode` argument is an optional integer that specifies the accessibility - * checks to be performed. `mode` should be either the value `fs.constants.F_OK` or a mask consisting of the bitwise OR of any of `fs.constants.R_OK`, `fs.constants.W_OK`, and `fs.constants.X_OK` - * (e.g.`fs.constants.W_OK | fs.constants.R_OK`). Check `File access constants` for - * possible values of `mode`. - * - * If the accessibility check is successful, the promise is fulfilled with no - * value. If any of the accessibility checks fail, the promise is rejected - * with an [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object. The following example checks if the file`/etc/passwd` can be read and - * written by the current process. - * - * ```js - * import { access, constants } from 'node:fs/promises'; - * - * try { - * await access('/etc/passwd', constants.R_OK | constants.W_OK); - * console.log('can access'); - * } catch { - * console.error('cannot access'); - * } - * ``` - * - * Using `fsPromises.access()` to check for the accessibility of a file before - * calling `fsPromises.open()` is not recommended. Doing so introduces a race - * condition, since other processes may change the file's state between the two - * calls. Instead, user code should open/read/write the file directly and handle - * the error raised if the file is not accessible. - * @since v10.0.0 - * @param [mode=fs.constants.F_OK] - * @return Fulfills with `undefined` upon success. - */ - function access(path: PathLike, mode?: number): Promise; - /** - * Asynchronously copies `src` to `dest`. By default, `dest` is overwritten if it - * already exists. - * - * No guarantees are made about the atomicity of the copy operation. If an - * error occurs after the destination file has been opened for writing, an attempt - * will be made to remove the destination. - * - * ```js - * import { copyFile, constants } from 'node:fs/promises'; - * - * try { - * await copyFile('source.txt', 'destination.txt'); - * console.log('source.txt was copied to destination.txt'); - * } catch { - * console.error('The file could not be copied'); - * } - * - * // By using COPYFILE_EXCL, the operation will fail if destination.txt exists. - * try { - * await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL); - * console.log('source.txt was copied to destination.txt'); - * } catch { - * console.error('The file could not be copied'); - * } - * ``` - * @since v10.0.0 - * @param src source filename to copy - * @param dest destination filename of the copy operation - * @param [mode=0] Optional modifiers that specify the behavior of the copy operation. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. - * `fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE`) - * @return Fulfills with `undefined` upon success. - */ - function copyFile(src: PathLike, dest: PathLike, mode?: number): Promise; - /** - * Opens a `FileHandle`. - * - * Refer to the POSIX [`open(2)`](http://man7.org/linux/man-pages/man2/open.2.html) documentation for more detail. - * - * Some characters (`< > : " / \ | ? *`) are reserved under Windows as documented - * by [Naming Files, Paths, and Namespaces](https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file). Under NTFS, if the filename contains - * a colon, Node.js will open a file system stream, as described by [this MSDN page](https://docs.microsoft.com/en-us/windows/desktop/FileIO/using-streams). - * @since v10.0.0 - * @param [flags='r'] See `support of file system `flags``. - * @param [mode=0o666] Sets the file mode (permission and sticky bits) if the file is created. - * @return Fulfills with a {FileHandle} object. - */ - function open(path: PathLike, flags?: string | number, mode?: Mode): Promise; - /** - * Renames `oldPath` to `newPath`. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function rename(oldPath: PathLike, newPath: PathLike): Promise; - /** - * Truncates (shortens or extends the length) of the content at `path` to `len` bytes. - * @since v10.0.0 - * @param [len=0] - * @return Fulfills with `undefined` upon success. - */ - function truncate(path: PathLike, len?: number): Promise; - /** - * Removes the directory identified by `path`. - * - * Using `fsPromises.rmdir()` on a file (not a directory) results in the - * promise being rejected with an `ENOENT` error on Windows and an `ENOTDIR` error on POSIX. - * - * To get a behavior similar to the `rm -rf` Unix command, use `fsPromises.rm()` with options `{ recursive: true, force: true }`. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function rmdir(path: PathLike): Promise; - /** - * Removes files and directories (modeled on the standard POSIX `rm` utility). - * @since v14.14.0 - * @return Fulfills with `undefined` upon success. - */ - function rm(path: PathLike, options?: RmOptions): Promise; - /** - * Asynchronously creates a directory. - * - * The optional `options` argument can be an integer specifying `mode` (permission - * and sticky bits), or an object with a `mode` property and a `recursive` property indicating whether parent directories should be created. Calling `fsPromises.mkdir()` when `path` is a directory - * that exists results in a - * rejection only when `recursive` is false. - * - * ```js - * import { mkdir } from 'node:fs/promises'; - * - * try { - * const projectFolder = new URL('./test/project/', import.meta.url); - * const createDir = await mkdir(projectFolder, { recursive: true }); - * - * console.log(`created ${createDir}`); - * } catch (err) { - * console.error(err.message); - * } - * ``` - * @since v10.0.0 - * @return Upon success, fulfills with `undefined` if `recursive` is `false`, or the first directory path created if `recursive` is `true`. - */ - function mkdir( - path: PathLike, - options: MakeDirectoryOptions & { - recursive: true; - }, - ): Promise; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir( - path: PathLike, - options?: - | Mode - | (MakeDirectoryOptions & { - recursive?: false | undefined; - }) - | null, - ): Promise; - /** - * Asynchronous mkdir(2) - create a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options Either the file mode, or an object optionally specifying the file mode and whether parent folders - * should be created. If a string is passed, it is parsed as an octal integer. If not specified, defaults to `0o777`. - */ - function mkdir(path: PathLike, options?: Mode | MakeDirectoryOptions | null): Promise; - /** - * Reads the contents of a directory. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the filenames. If the `encoding` is set to `'buffer'`, the filenames returned - * will be passed as `Buffer` objects. - * - * If `options.withFileTypes` is set to `true`, the returned array will contain `fs.Dirent` objects. - * - * ```js - * import { readdir } from 'node:fs/promises'; - * - * try { - * const files = await readdir(path); - * for (const file of files) - * console.log(file); - * } catch (err) { - * console.error(err); - * } - * ``` - * @since v10.0.0 - * @return Fulfills with an array of the names of the files in the directory excluding `'.'` and `'..'`. - */ - function readdir( - path: PathLike, - options?: - | (ObjectEncodingOptions & { - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }) - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options: - | { - encoding: "buffer"; - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - } - | "buffer", - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readdir( - path: PathLike, - options?: - | (ObjectEncodingOptions & { - withFileTypes?: false | undefined; - recursive?: boolean | undefined; - }) - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options If called with `withFileTypes: true` the result data will be an array of Dirent. - */ - function readdir( - path: PathLike, - options: ObjectEncodingOptions & { - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Promise; - /** - * Asynchronous readdir(3) - read a directory. - * @param path A path to a directory. If a URL is provided, it must use the `file:` protocol. - * @param options Must include `withFileTypes: true` and `encoding: 'buffer'`. - */ - function readdir( - path: PathLike, - options: { - encoding: "buffer"; - withFileTypes: true; - recursive?: boolean | undefined; - }, - ): Promise[]>; - /** - * Reads the contents of the symbolic link referred to by `path`. See the POSIX [`readlink(2)`](http://man7.org/linux/man-pages/man2/readlink.2.html) documentation for more detail. The promise is - * fulfilled with the`linkString` upon success. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the link path returned. If the `encoding` is set to `'buffer'`, the link path - * returned will be passed as a `Buffer` object. - * @since v10.0.0 - * @return Fulfills with the `linkString` upon success. - */ - function readlink(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink(path: PathLike, options: BufferEncodingOption): Promise; - /** - * Asynchronous readlink(2) - read value of a symbolic link. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function readlink( - path: PathLike, - options?: ObjectEncodingOptions | string | null, - ): Promise; - /** - * Creates a symbolic link. - * - * The `type` argument is only used on Windows platforms and can be one of `'dir'`, `'file'`, or `'junction'`. If the `type` argument is not a string, Node.js will - * autodetect `target` type and use `'file'` or `'dir'`. If the `target` does not - * exist, `'file'` will be used. Windows junction points require the destination - * path to be absolute. When using `'junction'`, the `target` argument will - * automatically be normalized to absolute path. Junction points on NTFS volumes - * can only point to directories. - * @since v10.0.0 - * @param [type='null'] - * @return Fulfills with `undefined` upon success. - */ - function symlink(target: PathLike, path: PathLike, type?: string | null): Promise; - /** - * Equivalent to `fsPromises.stat()` unless `path` refers to a symbolic link, - * in which case the link itself is stat-ed, not the file that it refers to. - * Refer to the POSIX [`lstat(2)`](http://man7.org/linux/man-pages/man2/lstat.2.html) document for more detail. - * @since v10.0.0 - * @return Fulfills with the {fs.Stats} object for the given symbolic link `path`. - */ - function lstat( - path: PathLike, - opts?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - function lstat( - path: PathLike, - opts: StatOptions & { - bigint: true; - }, - ): Promise; - function lstat(path: PathLike, opts?: StatOptions): Promise; - /** - * @since v10.0.0 - * @return Fulfills with the {fs.Stats} object for the given `path`. - */ - function stat( - path: PathLike, - opts?: StatOptions & { - bigint?: false | undefined; - }, - ): Promise; - function stat( - path: PathLike, - opts: StatOptions & { - bigint: true; - }, - ): Promise; - function stat(path: PathLike, opts?: StatOptions): Promise; - /** - * @since v19.6.0, v18.15.0 - * @return Fulfills with the {fs.StatFs} object for the given `path`. - */ - function statfs( - path: PathLike, - opts?: StatFsOptions & { - bigint?: false | undefined; - }, - ): Promise; - function statfs( - path: PathLike, - opts: StatFsOptions & { - bigint: true; - }, - ): Promise; - function statfs(path: PathLike, opts?: StatFsOptions): Promise; - /** - * Creates a new link from the `existingPath` to the `newPath`. See the POSIX [`link(2)`](http://man7.org/linux/man-pages/man2/link.2.html) documentation for more detail. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function link(existingPath: PathLike, newPath: PathLike): Promise; - /** - * If `path` refers to a symbolic link, then the link is removed without affecting - * the file or directory to which that link refers. If the `path` refers to a file - * path that is not a symbolic link, the file is deleted. See the POSIX [`unlink(2)`](http://man7.org/linux/man-pages/man2/unlink.2.html) documentation for more detail. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function unlink(path: PathLike): Promise; - /** - * Changes the permissions of a file. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function chmod(path: PathLike, mode: Mode): Promise; - /** - * Changes the permissions on a symbolic link. - * - * This method is only implemented on macOS. - * @deprecated Since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function lchmod(path: PathLike, mode: Mode): Promise; - /** - * Changes the ownership on a symbolic link. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function lchown(path: PathLike, uid: number, gid: number): Promise; - /** - * Changes the access and modification times of a file in the same way as `fsPromises.utimes()`, with the difference that if the path refers to a - * symbolic link, then the link is not dereferenced: instead, the timestamps of - * the symbolic link itself are changed. - * @since v14.5.0, v12.19.0 - * @return Fulfills with `undefined` upon success. - */ - function lutimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; - /** - * Changes the ownership of a file. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function chown(path: PathLike, uid: number, gid: number): Promise; - /** - * Change the file system timestamps of the object referenced by `path`. - * - * The `atime` and `mtime` arguments follow these rules: - * - * * Values can be either numbers representing Unix epoch time, `Date`s, or a - * numeric string like `'123456789.0'`. - * * If the value can not be converted to a number, or is `NaN`, `Infinity`, or `-Infinity`, an `Error` will be thrown. - * @since v10.0.0 - * @return Fulfills with `undefined` upon success. - */ - function utimes(path: PathLike, atime: TimeLike, mtime: TimeLike): Promise; - /** - * Determines the actual location of `path` using the same semantics as the `fs.realpath.native()` function. - * - * Only paths that can be converted to UTF8 strings are supported. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use for - * the path. If the `encoding` is set to `'buffer'`, the path returned will be - * passed as a `Buffer` object. - * - * On Linux, when Node.js is linked against musl libc, the procfs file system must - * be mounted on `/proc` in order for this function to work. Glibc does not have - * this restriction. - * @since v10.0.0 - * @return Fulfills with the resolved path upon success. - */ - function realpath(path: PathLike, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath(path: PathLike, options: BufferEncodingOption): Promise; - /** - * Asynchronous realpath(3) - return the canonicalized absolute pathname. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function realpath( - path: PathLike, - options?: ObjectEncodingOptions | BufferEncoding | null, - ): Promise; - /** - * Creates a unique temporary directory. A unique directory name is generated by - * appending six random characters to the end of the provided `prefix`. Due to - * platform inconsistencies, avoid trailing `X` characters in `prefix`. Some - * platforms, notably the BSDs, can return more than six random characters, and - * replace trailing `X` characters in `prefix` with random characters. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use. - * - * ```js - * import { mkdtemp } from 'node:fs/promises'; - * import { join } from 'node:path'; - * import { tmpdir } from 'node:os'; - * - * try { - * await mkdtemp(join(tmpdir(), 'foo-')); - * } catch (err) { - * console.error(err); - * } - * ``` - * - * The `fsPromises.mkdtemp()` method will append the six randomly selected - * characters directly to the `prefix` string. For instance, given a directory `/tmp`, if the intention is to create a temporary directory _within_ `/tmp`, the `prefix` must end with a trailing - * platform-specific path separator - * (`import { sep } from 'node:path'`). - * @since v10.0.0 - * @return Fulfills with a string containing the file system path of the newly created temporary directory. - */ - function mkdtemp(prefix: string, options?: ObjectEncodingOptions | BufferEncoding | null): Promise; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp(prefix: string, options: BufferEncodingOption): Promise; - /** - * Asynchronously creates a unique temporary directory. - * Generates six random characters to be appended behind a required `prefix` to create a unique temporary directory. - * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used. - */ - function mkdtemp( - prefix: string, - options?: ObjectEncodingOptions | BufferEncoding | null, - ): Promise; - interface DisposableTempDir extends AsyncDisposable { - /** - * The path of the created directory. - */ - path: string; - /** - * A function which removes the created directory. - */ - remove(): Promise; - /** - * The same as `remove`. - */ - [Symbol.asyncDispose](): Promise; - } - /** - * The resulting Promise holds an async-disposable object whose `path` property - * holds the created directory path. When the object is disposed, the directory - * and its contents will be removed asynchronously if it still exists. If the - * directory cannot be deleted, disposal will throw an error. The object has an - * async `remove()` method which will perform the same task. - * - * Both this function and the disposal function on the resulting object are - * async, so it should be used with `await` + `await using` as in - * `await using dir = await fsPromises.mkdtempDisposable('prefix')`. - * - * - * - * For detailed information, see the documentation of `fsPromises.mkdtemp()`. - * - * The optional `options` argument can be a string specifying an encoding, or an - * object with an `encoding` property specifying the character encoding to use. - * @since v24.4.0 - */ - function mkdtempDisposable(prefix: PathLike, options?: EncodingOption): Promise; - /** - * Asynchronously writes data to a file, replacing the file if it already exists. `data` can be a string, a buffer, an - * [AsyncIterable](https://tc39.github.io/ecma262/#sec-asynciterable-interface), or an - * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol) object. - * - * The `encoding` option is ignored if `data` is a buffer. - * - * If `options` is a string, then it specifies the encoding. - * - * The `mode` option only affects the newly created file. See `fs.open()` for more details. - * - * Any specified `FileHandle` has to support writing. - * - * It is unsafe to use `fsPromises.writeFile()` multiple times on the same file - * without waiting for the promise to be settled. - * - * Similarly to `fsPromises.readFile` \- `fsPromises.writeFile` is a convenience - * method that performs multiple `write` calls internally to write the buffer - * passed to it. For performance sensitive code consider using `fs.createWriteStream()` or `filehandle.createWriteStream()`. - * - * It is possible to use an `AbortSignal` to cancel an `fsPromises.writeFile()`. - * Cancelation is "best effort", and some amount of data is likely still - * to be written. - * - * ```js - * import { writeFile } from 'node:fs/promises'; - * import { Buffer } from 'node:buffer'; - * - * try { - * const controller = new AbortController(); - * const { signal } = controller; - * const data = new Uint8Array(Buffer.from('Hello Node.js')); - * const promise = writeFile('message.txt', data, { signal }); - * - * // Abort the request before the promise settles. - * controller.abort(); - * - * await promise; - * } catch (err) { - * // When a request is aborted - err is an AbortError - * console.error(err); - * } - * ``` - * - * Aborting an ongoing request does not abort individual operating - * system requests but rather the internal buffering `fs.writeFile` performs. - * @since v10.0.0 - * @param file filename or `FileHandle` - * @return Fulfills with `undefined` upon success. - */ - function writeFile( - file: PathLike | FileHandle, - data: - | string - | NodeJS.ArrayBufferView - | Iterable - | AsyncIterable - | Stream, - options?: - | (ObjectEncodingOptions & { - mode?: Mode | undefined; - flag?: OpenMode | undefined; - /** - * If all data is successfully written to the file, and `flush` - * is `true`, `filehandle.sync()` is used to flush the data. - * @default false - */ - flush?: boolean | undefined; - } & Abortable) - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronously append data to a file, creating the file if it does not yet - * exist. `data` can be a string or a `Buffer`. - * - * If `options` is a string, then it specifies the `encoding`. - * - * The `mode` option only affects the newly created file. See `fs.open()` for more details. - * - * The `path` may be specified as a `FileHandle` that has been opened - * for appending (using `fsPromises.open()`). - * @since v10.0.0 - * @param path filename or {FileHandle} - * @return Fulfills with `undefined` upon success. - */ - function appendFile( - path: PathLike | FileHandle, - data: string | Uint8Array, - options?: (ObjectEncodingOptions & FlagAndOpenMode & { flush?: boolean | undefined }) | BufferEncoding | null, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. - * - * If no encoding is specified (using `options.encoding`), the data is returned - * as a `Buffer` object. Otherwise, the data will be a string. - * - * If `options` is a string, then it specifies the encoding. - * - * When the `path` is a directory, the behavior of `fsPromises.readFile()` is - * platform-specific. On macOS, Linux, and Windows, the promise will be rejected - * with an error. On FreeBSD, a representation of the directory's contents will be - * returned. - * - * An example of reading a `package.json` file located in the same directory of the - * running code: - * - * ```js - * import { readFile } from 'node:fs/promises'; - * try { - * const filePath = new URL('./package.json', import.meta.url); - * const contents = await readFile(filePath, { encoding: 'utf8' }); - * console.log(contents); - * } catch (err) { - * console.error(err.message); - * } - * ``` - * - * It is possible to abort an ongoing `readFile` using an `AbortSignal`. If a - * request is aborted the promise returned is rejected with an `AbortError`: - * - * ```js - * import { readFile } from 'node:fs/promises'; - * - * try { - * const controller = new AbortController(); - * const { signal } = controller; - * const promise = readFile(fileName, { signal }); - * - * // Abort the request before the promise settles. - * controller.abort(); - * - * await promise; - * } catch (err) { - * // When a request is aborted - err is an AbortError - * console.error(err); - * } - * ``` - * - * Aborting an ongoing request does not abort individual operating - * system requests but rather the internal buffering `fs.readFile` performs. - * - * Any specified `FileHandle` has to support reading. - * @since v10.0.0 - * @param path filename or `FileHandle` - * @return Fulfills with the contents of the file. - */ - function readFile( - path: PathLike | FileHandle, - options?: - | ({ - encoding?: null | undefined; - flag?: OpenMode | undefined; - } & Abortable) - | null, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile( - path: PathLike | FileHandle, - options: - | ({ - encoding: BufferEncoding; - flag?: OpenMode | undefined; - } & Abortable) - | BufferEncoding, - ): Promise; - /** - * Asynchronously reads the entire contents of a file. - * @param path A path to a file. If a URL is provided, it must use the `file:` protocol. - * If a `FileHandle` is provided, the underlying file will _not_ be closed automatically. - * @param options An object that may contain an optional flag. - * If a flag is not provided, it defaults to `'r'`. - */ - function readFile( - path: PathLike | FileHandle, - options?: - | ( - & ObjectEncodingOptions - & Abortable - & { - flag?: OpenMode | undefined; - } - ) - | BufferEncoding - | null, - ): Promise; - /** - * Asynchronously open a directory for iterative scanning. See the POSIX [`opendir(3)`](http://man7.org/linux/man-pages/man3/opendir.3.html) documentation for more detail. - * - * Creates an `fs.Dir`, which contains all further functions for reading from - * and cleaning up the directory. - * - * The `encoding` option sets the encoding for the `path` while opening the - * directory and subsequent read operations. - * - * Example using async iteration: - * - * ```js - * import { opendir } from 'node:fs/promises'; - * - * try { - * const dir = await opendir('./'); - * for await (const dirent of dir) - * console.log(dirent.name); - * } catch (err) { - * console.error(err); - * } - * ``` - * - * When using the async iterator, the `fs.Dir` object will be automatically - * closed after the iterator exits. - * @since v12.12.0 - * @return Fulfills with an {fs.Dir}. - */ - function opendir(path: PathLike, options?: OpenDirOptions): Promise; - interface WatchOptions extends _WatchOptions { - maxQueue?: number | undefined; - overflow?: "ignore" | "throw" | undefined; - } - interface WatchOptionsWithBufferEncoding extends WatchOptions { - encoding: "buffer"; - } - interface WatchOptionsWithStringEncoding extends WatchOptions { - encoding?: BufferEncoding | undefined; - } - /** - * Returns an async iterator that watches for changes on `filename`, where `filename`is either a file or a directory. - * - * ```js - * import { watch } from 'node:fs/promises'; - * - * const ac = new AbortController(); - * const { signal } = ac; - * setTimeout(() => ac.abort(), 10000); - * - * (async () => { - * try { - * const watcher = watch(__filename, { signal }); - * for await (const event of watcher) - * console.log(event); - * } catch (err) { - * if (err.name === 'AbortError') - * return; - * throw err; - * } - * })(); - * ``` - * - * On most platforms, `'rename'` is emitted whenever a filename appears or - * disappears in the directory. - * - * All the `caveats` for `fs.watch()` also apply to `fsPromises.watch()`. - * @since v15.9.0, v14.18.0 - * @return of objects with the properties: - */ - function watch( - filename: PathLike, - options?: WatchOptionsWithStringEncoding | BufferEncoding, - ): NodeJS.AsyncIterator>; - function watch( - filename: PathLike, - options: WatchOptionsWithBufferEncoding | "buffer", - ): NodeJS.AsyncIterator>; - function watch( - filename: PathLike, - options: WatchOptions | BufferEncoding | "buffer", - ): NodeJS.AsyncIterator>; - /** - * Asynchronously copies the entire directory structure from `src` to `dest`, - * including subdirectories and files. - * - * When copying a directory to another directory, globs are not supported and - * behavior is similar to `cp dir1/ dir2/`. - * @since v16.7.0 - * @experimental - * @param src source path to copy. - * @param dest destination path to copy to. - * @return Fulfills with `undefined` upon success. - */ - function cp(source: string | URL, destination: string | URL, opts?: CopyOptions): Promise; - /** - * ```js - * import { glob } from 'node:fs/promises'; - * - * for await (const entry of glob('*.js')) - * console.log(entry); - * ``` - * @since v22.0.0 - * @returns An AsyncIterator that yields the paths of files - * that match the pattern. - */ - function glob(pattern: string | readonly string[]): NodeJS.AsyncIterator; - function glob( - pattern: string | readonly string[], - options: GlobOptionsWithFileTypes, - ): NodeJS.AsyncIterator; - function glob( - pattern: string | readonly string[], - options: GlobOptionsWithoutFileTypes, - ): NodeJS.AsyncIterator; - function glob( - pattern: string | readonly string[], - options: GlobOptions, - ): NodeJS.AsyncIterator; -} -declare module "fs/promises" { - export * from "node:fs/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/globals.d.ts b/skills/flight-finder/node_modules/@types/node/globals.d.ts deleted file mode 100644 index 36e7f90..0000000 --- a/skills/flight-finder/node_modules/@types/node/globals.d.ts +++ /dev/null @@ -1,150 +0,0 @@ -declare var global: typeof globalThis; - -declare var process: NodeJS.Process; - -interface ErrorConstructor { - /** - * Creates a `.stack` property on `targetObject`, which when accessed returns - * a string representing the location in the code at which - * `Error.captureStackTrace()` was called. - * - * ```js - * const myObject = {}; - * Error.captureStackTrace(myObject); - * myObject.stack; // Similar to `new Error().stack` - * ``` - * - * The first line of the trace will be prefixed with - * `${myObject.name}: ${myObject.message}`. - * - * The optional `constructorOpt` argument accepts a function. If given, all frames - * above `constructorOpt`, including `constructorOpt`, will be omitted from the - * generated stack trace. - * - * The `constructorOpt` argument is useful for hiding implementation - * details of error generation from the user. For instance: - * - * ```js - * function a() { - * b(); - * } - * - * function b() { - * c(); - * } - * - * function c() { - * // Create an error without stack trace to avoid calculating the stack trace twice. - * const { stackTraceLimit } = Error; - * Error.stackTraceLimit = 0; - * const error = new Error(); - * Error.stackTraceLimit = stackTraceLimit; - * - * // Capture the stack trace above function b - * Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace - * throw error; - * } - * - * a(); - * ``` - */ - captureStackTrace(targetObject: object, constructorOpt?: Function): void; - /** - * @see https://v8.dev/docs/stack-trace-api#customizing-stack-traces - */ - prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any; - /** - * The `Error.stackTraceLimit` property specifies the number of stack frames - * collected by a stack trace (whether generated by `new Error().stack` or - * `Error.captureStackTrace(obj)`). - * - * The default value is `10` but may be set to any valid JavaScript number. Changes - * will affect any stack trace captured _after_ the value has been changed. - * - * If set to a non-number value, or set to a negative number, stack traces will - * not capture any frames. - */ - stackTraceLimit: number; -} - -/** - * Enable this API with the `--expose-gc` CLI flag. - */ -declare var gc: NodeJS.GCFunction | undefined; - -declare namespace NodeJS { - interface CallSite { - getColumnNumber(): number | null; - getEnclosingColumnNumber(): number | null; - getEnclosingLineNumber(): number | null; - getEvalOrigin(): string | undefined; - getFileName(): string | null; - getFunction(): Function | undefined; - getFunctionName(): string | null; - getLineNumber(): number | null; - getMethodName(): string | null; - getPosition(): number; - getPromiseIndex(): number | null; - getScriptHash(): string; - getScriptNameOrSourceURL(): string | null; - getThis(): unknown; - getTypeName(): string | null; - isAsync(): boolean; - isConstructor(): boolean; - isEval(): boolean; - isNative(): boolean; - isPromiseAll(): boolean; - isToplevel(): boolean; - } - - interface ErrnoException extends Error { - errno?: number | undefined; - code?: string | undefined; - path?: string | undefined; - syscall?: string | undefined; - } - - interface RefCounted { - ref(): this; - unref(): this; - } - - interface Dict { - [key: string]: T | undefined; - } - - interface ReadOnlyDict { - readonly [key: string]: T | undefined; - } - - type PartialOptions = { [K in keyof T]?: T[K] | undefined }; - - interface GCFunction { - (minor?: boolean): void; - (options: NodeJS.GCOptions & { execution: "async" }): Promise; - (options: NodeJS.GCOptions): void; - } - - interface GCOptions { - execution?: "sync" | "async" | undefined; - flavor?: "regular" | "last-resort" | undefined; - type?: "major-snapshot" | "major" | "minor" | undefined; - filename?: string | undefined; - } - - /** An iterable iterator returned by the Node.js API. */ - interface Iterator extends IteratorObject { - [Symbol.iterator](): NodeJS.Iterator; - } - - /** An async iterable iterator returned by the Node.js API. */ - interface AsyncIterator extends AsyncIteratorObject { - [Symbol.asyncIterator](): NodeJS.AsyncIterator; - } - - /** The [`BufferSource`](https://webidl.spec.whatwg.org/#BufferSource) type from the Web IDL specification. */ - type BufferSource = NonSharedArrayBufferView | ArrayBuffer; - - /** The [`AllowSharedBufferSource`](https://webidl.spec.whatwg.org/#AllowSharedBufferSource) type from the Web IDL specification. */ - type AllowSharedBufferSource = ArrayBufferView | ArrayBufferLike; -} diff --git a/skills/flight-finder/node_modules/@types/node/globals.typedarray.d.ts b/skills/flight-finder/node_modules/@types/node/globals.typedarray.d.ts deleted file mode 100644 index e69dd0c..0000000 --- a/skills/flight-finder/node_modules/@types/node/globals.typedarray.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -export {}; // Make this a module - -declare global { - namespace NodeJS { - type TypedArray = - | Uint8Array - | Uint8ClampedArray - | Uint16Array - | Uint32Array - | Int8Array - | Int16Array - | Int32Array - | BigUint64Array - | BigInt64Array - | Float16Array - | Float32Array - | Float64Array; - type ArrayBufferView = - | TypedArray - | DataView; - - // The following aliases are required to allow use of non-shared ArrayBufferViews in @types/node - // while maintaining compatibility with TS <=5.6. - // TODO: remove once @types/node no longer supports TS 5.6, and replace with native types. - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedUint8Array = Uint8Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedUint8ClampedArray = Uint8ClampedArray; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedUint16Array = Uint16Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedUint32Array = Uint32Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedInt8Array = Int8Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedInt16Array = Int16Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedInt32Array = Int32Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedBigUint64Array = BigUint64Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedBigInt64Array = BigInt64Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedFloat16Array = Float16Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedFloat32Array = Float32Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedFloat64Array = Float64Array; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedDataView = DataView; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedTypedArray = TypedArray; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedArrayBufferView = ArrayBufferView; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/http.d.ts b/skills/flight-finder/node_modules/@types/node/http.d.ts deleted file mode 100644 index f88f49f..0000000 --- a/skills/flight-finder/node_modules/@types/node/http.d.ts +++ /dev/null @@ -1,2188 +0,0 @@ -/** - * To use the HTTP server and client one must import the `node:http` module. - * - * The HTTP interfaces in Node.js are designed to support many features - * of the protocol which have been traditionally difficult to use. - * In particular, large, possibly chunk-encoded, messages. The interface is - * careful to never buffer entire requests or responses, so the - * user is able to stream data. - * - * HTTP message headers are represented by an object like this: - * - * ```json - * { "content-length": "123", - * "content-type": "text/plain", - * "connection": "keep-alive", - * "host": "example.com", - * "accept": "*" } - * ``` - * - * Keys are lowercased. Values are not modified. - * - * In order to support the full spectrum of possible HTTP applications, the Node.js - * HTTP API is very low-level. It deals with stream handling and message - * parsing only. It parses a message into headers and body but it does not - * parse the actual headers or the body. - * - * See `message.headers` for details on how duplicate headers are handled. - * - * The raw headers as they were received are retained in the `rawHeaders` property, which is an array of `[key, value, key2, value2, ...]`. For - * example, the previous message header object might have a `rawHeaders` list like the following: - * - * ```js - * [ 'ConTent-Length', '123456', - * 'content-LENGTH', '123', - * 'content-type', 'text/plain', - * 'CONNECTION', 'keep-alive', - * 'Host', 'example.com', - * 'accepT', '*' ] - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/http.js) - */ -declare module "node:http" { - import { NonSharedBuffer } from "node:buffer"; - import { LookupOptions } from "node:dns"; - import { EventEmitter } from "node:events"; - import * as net from "node:net"; - import * as stream from "node:stream"; - import { URL } from "node:url"; - // incoming headers will never contain number - interface IncomingHttpHeaders extends NodeJS.Dict { - accept?: string | undefined; - "accept-encoding"?: string | undefined; - "accept-language"?: string | undefined; - "accept-patch"?: string | undefined; - "accept-ranges"?: string | undefined; - "access-control-allow-credentials"?: string | undefined; - "access-control-allow-headers"?: string | undefined; - "access-control-allow-methods"?: string | undefined; - "access-control-allow-origin"?: string | undefined; - "access-control-expose-headers"?: string | undefined; - "access-control-max-age"?: string | undefined; - "access-control-request-headers"?: string | undefined; - "access-control-request-method"?: string | undefined; - age?: string | undefined; - allow?: string | undefined; - "alt-svc"?: string | undefined; - authorization?: string | undefined; - "cache-control"?: string | undefined; - connection?: string | undefined; - "content-disposition"?: string | undefined; - "content-encoding"?: string | undefined; - "content-language"?: string | undefined; - "content-length"?: string | undefined; - "content-location"?: string | undefined; - "content-range"?: string | undefined; - "content-type"?: string | undefined; - cookie?: string | undefined; - date?: string | undefined; - etag?: string | undefined; - expect?: string | undefined; - expires?: string | undefined; - forwarded?: string | undefined; - from?: string | undefined; - host?: string | undefined; - "if-match"?: string | undefined; - "if-modified-since"?: string | undefined; - "if-none-match"?: string | undefined; - "if-unmodified-since"?: string | undefined; - "last-modified"?: string | undefined; - location?: string | undefined; - origin?: string | undefined; - pragma?: string | undefined; - "proxy-authenticate"?: string | undefined; - "proxy-authorization"?: string | undefined; - "public-key-pins"?: string | undefined; - range?: string | undefined; - referer?: string | undefined; - "retry-after"?: string | undefined; - "sec-fetch-site"?: string | undefined; - "sec-fetch-mode"?: string | undefined; - "sec-fetch-user"?: string | undefined; - "sec-fetch-dest"?: string | undefined; - "sec-websocket-accept"?: string | undefined; - "sec-websocket-extensions"?: string | undefined; - "sec-websocket-key"?: string | undefined; - "sec-websocket-protocol"?: string | undefined; - "sec-websocket-version"?: string | undefined; - "set-cookie"?: string[] | undefined; - "strict-transport-security"?: string | undefined; - tk?: string | undefined; - trailer?: string | undefined; - "transfer-encoding"?: string | undefined; - upgrade?: string | undefined; - "user-agent"?: string | undefined; - vary?: string | undefined; - via?: string | undefined; - warning?: string | undefined; - "www-authenticate"?: string | undefined; - } - // outgoing headers allows numbers (as they are converted internally to strings) - type OutgoingHttpHeader = number | string | string[]; - interface OutgoingHttpHeaders extends NodeJS.Dict { - accept?: string | string[] | undefined; - "accept-charset"?: string | string[] | undefined; - "accept-encoding"?: string | string[] | undefined; - "accept-language"?: string | string[] | undefined; - "accept-ranges"?: string | undefined; - "access-control-allow-credentials"?: string | undefined; - "access-control-allow-headers"?: string | undefined; - "access-control-allow-methods"?: string | undefined; - "access-control-allow-origin"?: string | undefined; - "access-control-expose-headers"?: string | undefined; - "access-control-max-age"?: string | undefined; - "access-control-request-headers"?: string | undefined; - "access-control-request-method"?: string | undefined; - age?: string | undefined; - allow?: string | undefined; - authorization?: string | undefined; - "cache-control"?: string | undefined; - "cdn-cache-control"?: string | undefined; - connection?: string | string[] | undefined; - "content-disposition"?: string | undefined; - "content-encoding"?: string | undefined; - "content-language"?: string | undefined; - "content-length"?: string | number | undefined; - "content-location"?: string | undefined; - "content-range"?: string | undefined; - "content-security-policy"?: string | undefined; - "content-security-policy-report-only"?: string | undefined; - "content-type"?: string | undefined; - cookie?: string | string[] | undefined; - dav?: string | string[] | undefined; - dnt?: string | undefined; - date?: string | undefined; - etag?: string | undefined; - expect?: string | undefined; - expires?: string | undefined; - forwarded?: string | undefined; - from?: string | undefined; - host?: string | undefined; - "if-match"?: string | undefined; - "if-modified-since"?: string | undefined; - "if-none-match"?: string | undefined; - "if-range"?: string | undefined; - "if-unmodified-since"?: string | undefined; - "last-modified"?: string | undefined; - link?: string | string[] | undefined; - location?: string | undefined; - "max-forwards"?: string | undefined; - origin?: string | undefined; - pragma?: string | string[] | undefined; - "proxy-authenticate"?: string | string[] | undefined; - "proxy-authorization"?: string | undefined; - "public-key-pins"?: string | undefined; - "public-key-pins-report-only"?: string | undefined; - range?: string | undefined; - referer?: string | undefined; - "referrer-policy"?: string | undefined; - refresh?: string | undefined; - "retry-after"?: string | undefined; - "sec-websocket-accept"?: string | undefined; - "sec-websocket-extensions"?: string | string[] | undefined; - "sec-websocket-key"?: string | undefined; - "sec-websocket-protocol"?: string | string[] | undefined; - "sec-websocket-version"?: string | undefined; - server?: string | undefined; - "set-cookie"?: string | string[] | undefined; - "strict-transport-security"?: string | undefined; - te?: string | undefined; - trailer?: string | undefined; - "transfer-encoding"?: string | undefined; - "user-agent"?: string | undefined; - upgrade?: string | undefined; - "upgrade-insecure-requests"?: string | undefined; - vary?: string | undefined; - via?: string | string[] | undefined; - warning?: string | undefined; - "www-authenticate"?: string | string[] | undefined; - "x-content-type-options"?: string | undefined; - "x-dns-prefetch-control"?: string | undefined; - "x-frame-options"?: string | undefined; - "x-xss-protection"?: string | undefined; - } - interface ClientRequestArgs extends Pick { - _defaultAgent?: Agent | undefined; - agent?: Agent | boolean | undefined; - auth?: string | null | undefined; - createConnection?: - | (( - options: ClientRequestArgs, - oncreate: (err: Error | null, socket: stream.Duplex) => void, - ) => stream.Duplex | null | undefined) - | undefined; - defaultPort?: number | string | undefined; - family?: number | undefined; - headers?: OutgoingHttpHeaders | readonly string[] | undefined; - host?: string | null | undefined; - hostname?: string | null | undefined; - insecureHTTPParser?: boolean | undefined; - localAddress?: string | undefined; - localPort?: number | undefined; - lookup?: net.LookupFunction | undefined; - /** - * @default 16384 - */ - maxHeaderSize?: number | undefined; - method?: string | undefined; - path?: string | null | undefined; - port?: number | string | null | undefined; - protocol?: string | null | undefined; - setDefaultHeaders?: boolean | undefined; - setHost?: boolean | undefined; - signal?: AbortSignal | undefined; - socketPath?: string | undefined; - timeout?: number | undefined; - uniqueHeaders?: Array | undefined; - joinDuplicateHeaders?: boolean | undefined; - } - interface ServerOptions< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - > { - /** - * Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`. - */ - IncomingMessage?: Request | undefined; - /** - * Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`. - */ - ServerResponse?: Response | undefined; - /** - * Sets the timeout value in milliseconds for receiving the entire request from the client. - * @see Server.requestTimeout for more information. - * @default 300000 - * @since v18.0.0 - */ - requestTimeout?: number | undefined; - /** - * It joins the field line values of multiple headers in a request with `, ` instead of discarding the duplicates. - * @default false - * @since v18.14.0 - */ - joinDuplicateHeaders?: boolean | undefined; - /** - * The number of milliseconds of inactivity a server needs to wait for additional incoming data, - * after it has finished writing the last response, before a socket will be destroyed. - * @see Server.keepAliveTimeout for more information. - * @default 5000 - * @since v18.0.0 - */ - keepAliveTimeout?: number | undefined; - /** - * An additional buffer time added to the - * `server.keepAliveTimeout` to extend the internal socket timeout. - * @since 24.6.0 - * @default 1000 - */ - keepAliveTimeoutBuffer?: number | undefined; - /** - * Sets the interval value in milliseconds to check for request and headers timeout in incomplete requests. - * @default 30000 - */ - connectionsCheckingInterval?: number | undefined; - /** - * Sets the timeout value in milliseconds for receiving the complete HTTP headers from the client. - * See {@link Server.headersTimeout} for more information. - * @default 60000 - * @since 18.0.0 - */ - headersTimeout?: number | undefined; - /** - * Optionally overrides all `socket`s' `readableHighWaterMark` and `writableHighWaterMark`. - * This affects `highWaterMark` property of both `IncomingMessage` and `ServerResponse`. - * Default: @see stream.getDefaultHighWaterMark(). - * @since v20.1.0 - */ - highWaterMark?: number | undefined; - /** - * Use an insecure HTTP parser that accepts invalid HTTP headers when `true`. - * Using the insecure parser should be avoided. - * See --insecure-http-parser for more information. - * @default false - */ - insecureHTTPParser?: boolean | undefined; - /** - * Optionally overrides the value of `--max-http-header-size` for requests received by - * this server, i.e. the maximum length of request headers in bytes. - * @default 16384 - * @since v13.3.0 - */ - maxHeaderSize?: number | undefined; - /** - * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. - * @default true - * @since v16.5.0 - */ - noDelay?: boolean | undefined; - /** - * If set to `true`, it forces the server to respond with a 400 (Bad Request) status code - * to any HTTP/1.1 request message that lacks a Host header (as mandated by the specification). - * @default true - * @since 20.0.0 - */ - requireHostHeader?: boolean | undefined; - /** - * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, - * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. - * @default false - * @since v16.5.0 - */ - keepAlive?: boolean | undefined; - /** - * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. - * @default 0 - * @since v16.5.0 - */ - keepAliveInitialDelay?: number | undefined; - /** - * A list of response headers that should be sent only once. - * If the header's value is an array, the items will be joined using `; `. - */ - uniqueHeaders?: Array | undefined; - /** - * A callback which receives an - * incoming request and returns a boolean, to control which upgrade attempts - * should be accepted. Accepted upgrades will fire an `'upgrade'` event (or - * their sockets will be destroyed, if no listener is registered) while - * rejected upgrades will fire a `'request'` event like any non-upgrade - * request. - * @since v24.9.0 - * @default () => server.listenerCount('upgrade') > 0 - */ - shouldUpgradeCallback?: ((request: InstanceType) => boolean) | undefined; - /** - * If set to `true`, an error is thrown when writing to an HTTP response which does not have a body. - * @default false - * @since v18.17.0, v20.2.0 - */ - rejectNonStandardBodyWrites?: boolean | undefined; - /** - * If set to `true`, requests without `Content-Length` - * or `Transfer-Encoding` headers (indicating no body) will be initialized with an - * already-ended body stream, so they will never emit any stream events - * (like `'data'` or `'end'`). You can use `req.readableEnded` to detect this case. - * @since v25.1.0 - * @default false - */ - optimizeEmptyRequests?: boolean | undefined; - } - type RequestListener< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - > = (request: InstanceType, response: InstanceType & { req: InstanceType }) => void; - interface ServerEventMap< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - > extends net.ServerEventMap { - "checkContinue": Parameters>; - "checkExpectation": Parameters>; - "clientError": [exception: Error, socket: stream.Duplex]; - "connect": [request: InstanceType, socket: stream.Duplex, head: NonSharedBuffer]; - "connection": [socket: net.Socket]; - "dropRequest": [request: InstanceType, socket: stream.Duplex]; - "request": Parameters>; - "upgrade": [req: InstanceType, socket: stream.Duplex, head: NonSharedBuffer]; - } - /** - * @since v0.1.17 - */ - class Server< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - > extends net.Server { - constructor(requestListener?: RequestListener); - constructor(options: ServerOptions, requestListener?: RequestListener); - /** - * Sets the timeout value for sockets, and emits a `'timeout'` event on - * the Server object, passing the socket as an argument, if a timeout - * occurs. - * - * If there is a `'timeout'` event listener on the Server object, then it - * will be called with the timed-out socket as an argument. - * - * By default, the Server does not timeout sockets. However, if a callback - * is assigned to the Server's `'timeout'` event, timeouts must be handled - * explicitly. - * @since v0.9.12 - * @param [msecs=0 (no timeout)] - */ - setTimeout(msecs?: number, callback?: (socket: net.Socket) => void): this; - setTimeout(callback: (socket: net.Socket) => void): this; - /** - * Limits maximum incoming headers count. If set to 0, no limit will be applied. - * @since v0.7.0 - */ - maxHeadersCount: number | null; - /** - * The maximum number of requests socket can handle - * before closing keep alive connection. - * - * A value of `0` will disable the limit. - * - * When the limit is reached it will set the `Connection` header value to `close`, - * but will not actually close the connection, subsequent requests sent - * after the limit is reached will get `503 Service Unavailable` as a response. - * @since v16.10.0 - */ - maxRequestsPerSocket: number | null; - /** - * The number of milliseconds of inactivity before a socket is presumed - * to have timed out. - * - * A value of `0` will disable the timeout behavior on incoming connections. - * - * The socket timeout logic is set up on connection, so changing this - * value only affects new connections to the server, not any existing connections. - * @since v0.9.12 - */ - timeout: number; - /** - * Limit the amount of time the parser will wait to receive the complete HTTP - * headers. - * - * If the timeout expires, the server responds with status 408 without - * forwarding the request to the request listener and then closes the connection. - * - * It must be set to a non-zero value (e.g. 120 seconds) to protect against - * potential Denial-of-Service attacks in case the server is deployed without a - * reverse proxy in front. - * @since v11.3.0, v10.14.0 - */ - headersTimeout: number; - /** - * The number of milliseconds of inactivity a server needs to wait for additional - * incoming data, after it has finished writing the last response, before a socket - * will be destroyed. - * - * This timeout value is combined with the - * `server.keepAliveTimeoutBuffer` option to determine the actual socket - * timeout, calculated as: - * socketTimeout = keepAliveTimeout + keepAliveTimeoutBuffer - * If the server receives new data before the keep-alive timeout has fired, it - * will reset the regular inactivity timeout, i.e., `server.timeout`. - * - * A value of `0` will disable the keep-alive timeout behavior on incoming - * connections. - * A value of `0` makes the HTTP server behave similarly to Node.js versions prior - * to 8.0.0, which did not have a keep-alive timeout. - * - * The socket timeout logic is set up on connection, so changing this value only - * affects new connections to the server, not any existing connections. - * @since v8.0.0 - */ - keepAliveTimeout: number; - /** - * An additional buffer time added to the - * `server.keepAliveTimeout` to extend the internal socket timeout. - * - * This buffer helps reduce connection reset (`ECONNRESET`) errors by increasing - * the socket timeout slightly beyond the advertised keep-alive timeout. - * - * This option applies only to new incoming connections. - * @since v24.6.0 - * @default 1000 - */ - keepAliveTimeoutBuffer: number; - /** - * Sets the timeout value in milliseconds for receiving the entire request from - * the client. - * - * If the timeout expires, the server responds with status 408 without - * forwarding the request to the request listener and then closes the connection. - * - * It must be set to a non-zero value (e.g. 120 seconds) to protect against - * potential Denial-of-Service attacks in case the server is deployed without a - * reverse proxy in front. - * @since v14.11.0 - */ - requestTimeout: number; - /** - * Closes all connections connected to this server. - * @since v18.2.0 - */ - closeAllConnections(): void; - /** - * Closes all connections connected to this server which are not sending a request - * or waiting for a response. - * @since v18.2.0 - */ - closeIdleConnections(): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ServerEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ServerEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: ServerEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: ServerEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface OutgoingMessageEventMap extends stream.WritableEventMap { - "prefinish": []; - } - /** - * This class serves as the parent class of {@link ClientRequest} and {@link ServerResponse}. It is an abstract outgoing message from - * the perspective of the participants of an HTTP transaction. - * @since v0.1.17 - */ - class OutgoingMessage extends stream.Writable { - constructor(); - readonly req: Request; - chunkedEncoding: boolean; - shouldKeepAlive: boolean; - useChunkedEncodingByDefault: boolean; - sendDate: boolean; - /** - * @deprecated Use `writableEnded` instead. - */ - finished: boolean; - /** - * Read-only. `true` if the headers were sent, otherwise `false`. - * @since v0.9.3 - */ - readonly headersSent: boolean; - /** - * Alias of `outgoingMessage.socket`. - * @since v0.3.0 - * @deprecated Since v15.12.0,v14.17.1 - Use `socket` instead. - */ - readonly connection: net.Socket | null; - /** - * Reference to the underlying socket. Usually, users will not want to access - * this property. - * - * After calling `outgoingMessage.end()`, this property will be nulled. - * @since v0.3.0 - */ - readonly socket: net.Socket | null; - /** - * Once a socket is associated with the message and is connected, `socket.setTimeout()` will be called with `msecs` as the first parameter. - * @since v0.9.12 - * @param callback Optional function to be called when a timeout occurs. Same as binding to the `timeout` event. - */ - setTimeout(msecs: number, callback?: () => void): this; - /** - * Sets a single header value. If the header already exists in the to-be-sent - * headers, its value will be replaced. Use an array of strings to send multiple - * headers with the same name. - * @since v0.4.0 - * @param name Header name - * @param value Header value - */ - setHeader(name: string, value: number | string | readonly string[]): this; - /** - * Sets multiple header values for implicit headers. headers must be an instance of - * `Headers` or `Map`, if a header already exists in the to-be-sent headers, its - * value will be replaced. - * - * ```js - * const headers = new Headers({ foo: 'bar' }); - * outgoingMessage.setHeaders(headers); - * ``` - * - * or - * - * ```js - * const headers = new Map([['foo', 'bar']]); - * outgoingMessage.setHeaders(headers); - * ``` - * - * When headers have been set with `outgoingMessage.setHeaders()`, they will be - * merged with any headers passed to `response.writeHead()`, with the headers passed - * to `response.writeHead()` given precedence. - * - * ```js - * // Returns content-type = text/plain - * const server = http.createServer((req, res) => { - * const headers = new Headers({ 'Content-Type': 'text/html' }); - * res.setHeaders(headers); - * res.writeHead(200, { 'Content-Type': 'text/plain' }); - * res.end('ok'); - * }); - * ``` - * - * @since v19.6.0, v18.15.0 - * @param name Header name - * @param value Header value - */ - setHeaders(headers: Headers | Map): this; - /** - * Append a single header value to the header object. - * - * If the value is an array, this is equivalent to calling this method multiple - * times. - * - * If there were no previous values for the header, this is equivalent to calling `outgoingMessage.setHeader(name, value)`. - * - * Depending of the value of `options.uniqueHeaders` when the client request or the - * server were created, this will end up in the header being sent multiple times or - * a single time with values joined using `; `. - * @since v18.3.0, v16.17.0 - * @param name Header name - * @param value Header value - */ - appendHeader(name: string, value: string | readonly string[]): this; - /** - * Gets the value of the HTTP header with the given name. If that header is not - * set, the returned value will be `undefined`. - * @since v0.4.0 - * @param name Name of header - */ - getHeader(name: string): number | string | string[] | undefined; - /** - * Returns a shallow copy of the current outgoing headers. Since a shallow - * copy is used, array values may be mutated without additional calls to - * various header-related HTTP module methods. The keys of the returned - * object are the header names and the values are the respective header - * values. All header names are lowercase. - * - * The object returned by the `outgoingMessage.getHeaders()` method does - * not prototypically inherit from the JavaScript `Object`. This means that - * typical `Object` methods such as `obj.toString()`, `obj.hasOwnProperty()`, - * and others are not defined and will not work. - * - * ```js - * outgoingMessage.setHeader('Foo', 'bar'); - * outgoingMessage.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); - * - * const headers = outgoingMessage.getHeaders(); - * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } - * ``` - * @since v7.7.0 - */ - getHeaders(): OutgoingHttpHeaders; - /** - * Returns an array containing the unique names of the current outgoing headers. - * All names are lowercase. - * @since v7.7.0 - */ - getHeaderNames(): string[]; - /** - * Returns `true` if the header identified by `name` is currently set in the - * outgoing headers. The header name is case-insensitive. - * - * ```js - * const hasContentType = outgoingMessage.hasHeader('content-type'); - * ``` - * @since v7.7.0 - */ - hasHeader(name: string): boolean; - /** - * Removes a header that is queued for implicit sending. - * - * ```js - * outgoingMessage.removeHeader('Content-Encoding'); - * ``` - * @since v0.4.0 - * @param name Header name - */ - removeHeader(name: string): void; - /** - * Adds HTTP trailers (headers but at the end of the message) to the message. - * - * Trailers will **only** be emitted if the message is chunked encoded. If not, - * the trailers will be silently discarded. - * - * HTTP requires the `Trailer` header to be sent to emit trailers, - * with a list of header field names in its value, e.g. - * - * ```js - * message.writeHead(200, { 'Content-Type': 'text/plain', - * 'Trailer': 'Content-MD5' }); - * message.write(fileData); - * message.addTrailers({ 'Content-MD5': '7895bf4b8828b55ceaf47747b4bca667' }); - * message.end(); - * ``` - * - * Attempting to set a header field name or value that contains invalid characters - * will result in a `TypeError` being thrown. - * @since v0.3.0 - */ - addTrailers(headers: OutgoingHttpHeaders | ReadonlyArray<[string, string]>): void; - /** - * Flushes the message headers. - * - * For efficiency reason, Node.js normally buffers the message headers - * until `outgoingMessage.end()` is called or the first chunk of message data - * is written. It then tries to pack the headers and data into a single TCP - * packet. - * - * It is usually desired (it saves a TCP round-trip), but not when the first - * data is not sent until possibly much later. `outgoingMessage.flushHeaders()` bypasses the optimization and kickstarts the message. - * @since v1.6.0 - */ - flushHeaders(): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: OutgoingMessageEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: OutgoingMessageEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: OutgoingMessageEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: OutgoingMessageEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: OutgoingMessageEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - /** - * This object is created internally by an HTTP server, not by the user. It is - * passed as the second parameter to the `'request'` event. - * @since v0.1.17 - */ - class ServerResponse extends OutgoingMessage { - /** - * When using implicit headers (not calling `response.writeHead()` explicitly), - * this property controls the status code that will be sent to the client when - * the headers get flushed. - * - * ```js - * response.statusCode = 404; - * ``` - * - * After response header was sent to the client, this property indicates the - * status code which was sent out. - * @since v0.4.0 - */ - statusCode: number; - /** - * When using implicit headers (not calling `response.writeHead()` explicitly), - * this property controls the status message that will be sent to the client when - * the headers get flushed. If this is left as `undefined` then the standard - * message for the status code will be used. - * - * ```js - * response.statusMessage = 'Not found'; - * ``` - * - * After response header was sent to the client, this property indicates the - * status message which was sent out. - * @since v0.11.8 - */ - statusMessage: string; - /** - * If set to `true`, Node.js will check whether the `Content-Length` header value and the size of the body, in bytes, are equal. - * Mismatching the `Content-Length` header value will result - * in an `Error` being thrown, identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. - * @since v18.10.0, v16.18.0 - */ - strictContentLength: boolean; - constructor(req: Request); - assignSocket(socket: net.Socket): void; - detachSocket(socket: net.Socket): void; - /** - * Sends an HTTP/1.1 100 Continue message to the client, indicating that - * the request body should be sent. See the `'checkContinue'` event on `Server`. - * @since v0.3.0 - */ - writeContinue(callback?: () => void): void; - /** - * Sends an HTTP/1.1 103 Early Hints message to the client with a Link header, - * indicating that the user agent can preload/preconnect the linked resources. - * The `hints` is an object containing the values of headers to be sent with - * early hints message. The optional `callback` argument will be called when - * the response message has been written. - * - * **Example** - * - * ```js - * const earlyHintsLink = '; rel=preload; as=style'; - * response.writeEarlyHints({ - * 'link': earlyHintsLink, - * }); - * - * const earlyHintsLinks = [ - * '; rel=preload; as=style', - * '; rel=preload; as=script', - * ]; - * response.writeEarlyHints({ - * 'link': earlyHintsLinks, - * 'x-trace-id': 'id for diagnostics', - * }); - * - * const earlyHintsCallback = () => console.log('early hints message sent'); - * response.writeEarlyHints({ - * 'link': earlyHintsLinks, - * }, earlyHintsCallback); - * ``` - * @since v18.11.0 - * @param hints An object containing the values of headers - * @param callback Will be called when the response message has been written - */ - writeEarlyHints(hints: Record, callback?: () => void): void; - /** - * Sends a response header to the request. The status code is a 3-digit HTTP - * status code, like `404`. The last argument, `headers`, are the response headers. - * Optionally one can give a human-readable `statusMessage` as the second - * argument. - * - * `headers` may be an `Array` where the keys and values are in the same list. - * It is _not_ a list of tuples. So, the even-numbered offsets are key values, - * and the odd-numbered offsets are the associated values. The array is in the same - * format as `request.rawHeaders`. - * - * Returns a reference to the `ServerResponse`, so that calls can be chained. - * - * ```js - * const body = 'hello world'; - * response - * .writeHead(200, { - * 'Content-Length': Buffer.byteLength(body), - * 'Content-Type': 'text/plain', - * }) - * .end(body); - * ``` - * - * This method must only be called once on a message and it must - * be called before `response.end()` is called. - * - * If `response.write()` or `response.end()` are called before calling - * this, the implicit/mutable headers will be calculated and call this function. - * - * When headers have been set with `response.setHeader()`, they will be merged - * with any headers passed to `response.writeHead()`, with the headers passed - * to `response.writeHead()` given precedence. - * - * If this method is called and `response.setHeader()` has not been called, - * it will directly write the supplied header values onto the network channel - * without caching internally, and the `response.getHeader()` on the header - * will not yield the expected result. If progressive population of headers is - * desired with potential future retrieval and modification, use `response.setHeader()` instead. - * - * ```js - * // Returns content-type = text/plain - * const server = http.createServer((req, res) => { - * res.setHeader('Content-Type', 'text/html'); - * res.setHeader('X-Foo', 'bar'); - * res.writeHead(200, { 'Content-Type': 'text/plain' }); - * res.end('ok'); - * }); - * ``` - * - * `Content-Length` is read in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. Node.js - * will check whether `Content-Length` and the length of the body which has - * been transmitted are equal or not. - * - * Attempting to set a header field name or value that contains invalid characters - * will result in a `Error` being thrown. - * @since v0.1.30 - */ - writeHead( - statusCode: number, - statusMessage?: string, - headers?: OutgoingHttpHeaders | OutgoingHttpHeader[], - ): this; - writeHead(statusCode: number, headers?: OutgoingHttpHeaders | OutgoingHttpHeader[]): this; - /** - * Sends a HTTP/1.1 102 Processing message to the client, indicating that - * the request body should be sent. - * @since v10.0.0 - */ - writeProcessing(callback?: () => void): void; - } - interface InformationEvent { - httpVersion: string; - httpVersionMajor: number; - httpVersionMinor: number; - statusCode: number; - statusMessage: string; - headers: IncomingHttpHeaders; - rawHeaders: string[]; - } - interface ClientRequestEventMap extends stream.WritableEventMap { - /** @deprecated Listen for the `'close'` event instead. */ - "abort": []; - "connect": [response: IncomingMessage, socket: net.Socket, head: NonSharedBuffer]; - "continue": []; - "information": [info: InformationEvent]; - "response": [response: IncomingMessage]; - "socket": [socket: net.Socket]; - "timeout": []; - "upgrade": [response: IncomingMessage, socket: net.Socket, head: NonSharedBuffer]; - } - /** - * This object is created internally and returned from {@link request}. It - * represents an _in-progress_ request whose header has already been queued. The - * header is still mutable using the `setHeader(name, value)`, `getHeader(name)`, `removeHeader(name)` API. The actual header will - * be sent along with the first data chunk or when calling `request.end()`. - * - * To get the response, add a listener for `'response'` to the request object. `'response'` will be emitted from the request object when the response - * headers have been received. The `'response'` event is executed with one - * argument which is an instance of {@link IncomingMessage}. - * - * During the `'response'` event, one can add listeners to the - * response object; particularly to listen for the `'data'` event. - * - * If no `'response'` handler is added, then the response will be - * entirely discarded. However, if a `'response'` event handler is added, - * then the data from the response object **must** be consumed, either by - * calling `response.read()` whenever there is a `'readable'` event, or - * by adding a `'data'` handler, or by calling the `.resume()` method. - * Until the data is consumed, the `'end'` event will not fire. Also, until - * the data is read it will consume memory that can eventually lead to a - * 'process out of memory' error. - * - * For backward compatibility, `res` will only emit `'error'` if there is an `'error'` listener registered. - * - * Set `Content-Length` header to limit the response body size. - * If `response.strictContentLength` is set to `true`, mismatching the `Content-Length` header value will result in an `Error` being thrown, - * identified by `code:``'ERR_HTTP_CONTENT_LENGTH_MISMATCH'`. - * - * `Content-Length` value should be in bytes, not characters. Use `Buffer.byteLength()` to determine the length of the body in bytes. - * @since v0.1.17 - */ - class ClientRequest extends OutgoingMessage { - /** - * The `request.aborted` property will be `true` if the request has - * been aborted. - * @since v0.11.14 - * @deprecated Since v17.0.0, v16.12.0 - Check `destroyed` instead. - */ - aborted: boolean; - /** - * The request host. - * @since v14.5.0, v12.19.0 - */ - host: string; - /** - * The request protocol. - * @since v14.5.0, v12.19.0 - */ - protocol: string; - /** - * When sending request through a keep-alive enabled agent, the underlying socket - * might be reused. But if server closes connection at unfortunate time, client - * may run into a 'ECONNRESET' error. - * - * ```js - * import http from 'node:http'; - * const agent = new http.Agent({ keepAlive: true }); - * - * // Server has a 5 seconds keep-alive timeout by default - * http - * .createServer((req, res) => { - * res.write('hello\n'); - * res.end(); - * }) - * .listen(3000); - * - * setInterval(() => { - * // Adapting a keep-alive agent - * http.get('http://localhost:3000', { agent }, (res) => { - * res.on('data', (data) => { - * // Do nothing - * }); - * }); - * }, 5000); // Sending request on 5s interval so it's easy to hit idle timeout - * ``` - * - * By marking a request whether it reused socket or not, we can do - * automatic error retry base on it. - * - * ```js - * import http from 'node:http'; - * const agent = new http.Agent({ keepAlive: true }); - * - * function retriableRequest() { - * const req = http - * .get('http://localhost:3000', { agent }, (res) => { - * // ... - * }) - * .on('error', (err) => { - * // Check if retry is needed - * if (req.reusedSocket && err.code === 'ECONNRESET') { - * retriableRequest(); - * } - * }); - * } - * - * retriableRequest(); - * ``` - * @since v13.0.0, v12.16.0 - */ - reusedSocket: boolean; - /** - * Limits maximum response headers count. If set to 0, no limit will be applied. - */ - maxHeadersCount: number; - constructor(url: string | URL | ClientRequestArgs, cb?: (res: IncomingMessage) => void); - /** - * The request method. - * @since v0.1.97 - */ - method: string; - /** - * The request path. - * @since v0.4.0 - */ - path: string; - /** - * Marks the request as aborting. Calling this will cause remaining data - * in the response to be dropped and the socket to be destroyed. - * @since v0.3.8 - * @deprecated Since v14.1.0,v13.14.0 - Use `destroy` instead. - */ - abort(): void; - onSocket(socket: net.Socket): void; - /** - * Once a socket is assigned to this request and is connected `socket.setTimeout()` will be called. - * @since v0.5.9 - * @param timeout Milliseconds before a request times out. - * @param callback Optional function to be called when a timeout occurs. Same as binding to the `'timeout'` event. - */ - setTimeout(timeout: number, callback?: () => void): this; - /** - * Once a socket is assigned to this request and is connected `socket.setNoDelay()` will be called. - * @since v0.5.9 - */ - setNoDelay(noDelay?: boolean): void; - /** - * Once a socket is assigned to this request and is connected `socket.setKeepAlive()` will be called. - * @since v0.5.9 - */ - setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; - /** - * Returns an array containing the unique names of the current outgoing raw - * headers. Header names are returned with their exact casing being set. - * - * ```js - * request.setHeader('Foo', 'bar'); - * request.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); - * - * const headerNames = request.getRawHeaderNames(); - * // headerNames === ['Foo', 'Set-Cookie'] - * ``` - * @since v15.13.0, v14.17.0 - */ - getRawHeaderNames(): string[]; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ClientRequestEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ClientRequestEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: ClientRequestEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: ClientRequestEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ClientRequestEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface IncomingMessageEventMap extends stream.ReadableEventMap { - /** @deprecated Listen for `'close'` event instead. */ - "aborted": []; - } - /** - * An `IncomingMessage` object is created by {@link Server} or {@link ClientRequest} and passed as the first argument to the `'request'` and `'response'` event respectively. It may be used to - * access response - * status, headers, and data. - * - * Different from its `socket` value which is a subclass of `stream.Duplex`, the `IncomingMessage` itself extends `stream.Readable` and is created separately to - * parse and emit the incoming HTTP headers and payload, as the underlying socket - * may be reused multiple times in case of keep-alive. - * @since v0.1.17 - */ - class IncomingMessage extends stream.Readable { - constructor(socket: net.Socket); - /** - * The `message.aborted` property will be `true` if the request has - * been aborted. - * @since v10.1.0 - * @deprecated Since v17.0.0,v16.12.0 - Check `message.destroyed` from stream.Readable. - */ - aborted: boolean; - /** - * In case of server request, the HTTP version sent by the client. In the case of - * client response, the HTTP version of the connected-to server. - * Probably either `'1.1'` or `'1.0'`. - * - * Also `message.httpVersionMajor` is the first integer and `message.httpVersionMinor` is the second. - * @since v0.1.1 - */ - httpVersion: string; - httpVersionMajor: number; - httpVersionMinor: number; - /** - * The `message.complete` property will be `true` if a complete HTTP message has - * been received and successfully parsed. - * - * This property is particularly useful as a means of determining if a client or - * server fully transmitted a message before a connection was terminated: - * - * ```js - * const req = http.request({ - * host: '127.0.0.1', - * port: 8080, - * method: 'POST', - * }, (res) => { - * res.resume(); - * res.on('end', () => { - * if (!res.complete) - * console.error( - * 'The connection was terminated while the message was still being sent'); - * }); - * }); - * ``` - * @since v0.3.0 - */ - complete: boolean; - /** - * Alias for `message.socket`. - * @since v0.1.90 - * @deprecated Since v16.0.0 - Use `socket`. - */ - connection: net.Socket; - /** - * The `net.Socket` object associated with the connection. - * - * With HTTPS support, use `request.socket.getPeerCertificate()` to obtain the - * client's authentication details. - * - * This property is guaranteed to be an instance of the `net.Socket` class, - * a subclass of `stream.Duplex`, unless the user specified a socket - * type other than `net.Socket` or internally nulled. - * @since v0.3.0 - */ - socket: net.Socket; - /** - * The request/response headers object. - * - * Key-value pairs of header names and values. Header names are lower-cased. - * - * ```js - * // Prints something like: - * // - * // { 'user-agent': 'curl/7.22.0', - * // host: '127.0.0.1:8000', - * // accept: '*' } - * console.log(request.headers); - * ``` - * - * Duplicates in raw headers are handled in the following ways, depending on the - * header name: - * - * * Duplicates of `age`, `authorization`, `content-length`, `content-type`, `etag`, `expires`, `from`, `host`, `if-modified-since`, `if-unmodified-since`, `last-modified`, `location`, - * `max-forwards`, `proxy-authorization`, `referer`, `retry-after`, `server`, or `user-agent` are discarded. - * To allow duplicate values of the headers listed above to be joined, - * use the option `joinDuplicateHeaders` in {@link request} and {@link createServer}. See RFC 9110 Section 5.3 for more - * information. - * * `set-cookie` is always an array. Duplicates are added to the array. - * * For duplicate `cookie` headers, the values are joined together with `; `. - * * For all other headers, the values are joined together with `, `. - * @since v0.1.5 - */ - headers: IncomingHttpHeaders; - /** - * Similar to `message.headers`, but there is no join logic and the values are - * always arrays of strings, even for headers received just once. - * - * ```js - * // Prints something like: - * // - * // { 'user-agent': ['curl/7.22.0'], - * // host: ['127.0.0.1:8000'], - * // accept: ['*'] } - * console.log(request.headersDistinct); - * ``` - * @since v18.3.0, v16.17.0 - */ - headersDistinct: NodeJS.Dict; - /** - * The raw request/response headers list exactly as they were received. - * - * The keys and values are in the same list. It is _not_ a - * list of tuples. So, the even-numbered offsets are key values, and the - * odd-numbered offsets are the associated values. - * - * Header names are not lowercased, and duplicates are not merged. - * - * ```js - * // Prints something like: - * // - * // [ 'user-agent', - * // 'this is invalid because there can be only one', - * // 'User-Agent', - * // 'curl/7.22.0', - * // 'Host', - * // '127.0.0.1:8000', - * // 'ACCEPT', - * // '*' ] - * console.log(request.rawHeaders); - * ``` - * @since v0.11.6 - */ - rawHeaders: string[]; - /** - * The request/response trailers object. Only populated at the `'end'` event. - * @since v0.3.0 - */ - trailers: NodeJS.Dict; - /** - * Similar to `message.trailers`, but there is no join logic and the values are - * always arrays of strings, even for headers received just once. - * Only populated at the `'end'` event. - * @since v18.3.0, v16.17.0 - */ - trailersDistinct: NodeJS.Dict; - /** - * The raw request/response trailer keys and values exactly as they were - * received. Only populated at the `'end'` event. - * @since v0.11.6 - */ - rawTrailers: string[]; - /** - * Calls `message.socket.setTimeout(msecs, callback)`. - * @since v0.5.9 - */ - setTimeout(msecs: number, callback?: () => void): this; - /** - * **Only valid for request obtained from {@link Server}.** - * - * The request method as a string. Read only. Examples: `'GET'`, `'DELETE'`. - * @since v0.1.1 - */ - method?: string | undefined; - /** - * **Only valid for request obtained from {@link Server}.** - * - * Request URL string. This contains only the URL that is present in the actual - * HTTP request. Take the following request: - * - * ```http - * GET /status?name=ryan HTTP/1.1 - * Accept: text/plain - * ``` - * - * To parse the URL into its parts: - * - * ```js - * new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`); - * ``` - * - * When `request.url` is `'/status?name=ryan'` and `process.env.HOST` is undefined: - * - * ```console - * $ node - * > new URL(`http://${process.env.HOST ?? 'localhost'}${request.url}`); - * URL { - * href: 'http://localhost/status?name=ryan', - * origin: 'http://localhost', - * protocol: 'http:', - * username: '', - * password: '', - * host: 'localhost', - * hostname: 'localhost', - * port: '', - * pathname: '/status', - * search: '?name=ryan', - * searchParams: URLSearchParams { 'name' => 'ryan' }, - * hash: '' - * } - * ``` - * - * Ensure that you set `process.env.HOST` to the server's host name, or consider replacing this part entirely. If using `req.headers.host`, ensure proper - * validation is used, as clients may specify a custom `Host` header. - * @since v0.1.90 - */ - url?: string | undefined; - /** - * **Only valid for response obtained from {@link ClientRequest}.** - * - * The 3-digit HTTP response status code. E.G. `404`. - * @since v0.1.1 - */ - statusCode?: number | undefined; - /** - * **Only valid for response obtained from {@link ClientRequest}.** - * - * The HTTP response status message (reason phrase). E.G. `OK` or `Internal Server Error`. - * @since v0.11.10 - */ - statusMessage?: string | undefined; - /** - * Calls `destroy()` on the socket that received the `IncomingMessage`. If `error` is provided, an `'error'` event is emitted on the socket and `error` is passed - * as an argument to any listeners on the event. - * @since v0.3.0 - */ - destroy(error?: Error): this; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: IncomingMessageEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: IncomingMessageEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: IncomingMessageEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: IncomingMessageEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: IncomingMessageEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface ProxyEnv extends NodeJS.ProcessEnv { - HTTP_PROXY?: string | undefined; - HTTPS_PROXY?: string | undefined; - NO_PROXY?: string | undefined; - http_proxy?: string | undefined; - https_proxy?: string | undefined; - no_proxy?: string | undefined; - } - interface AgentOptions extends NodeJS.PartialOptions { - /** - * Keep sockets around in a pool to be used by other requests in the future. Default = false - */ - keepAlive?: boolean | undefined; - /** - * When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000. - * Only relevant if keepAlive is set to true. - */ - keepAliveMsecs?: number | undefined; - /** - * Milliseconds to subtract from - * the server-provided `keep-alive: timeout=...` hint when determining socket - * expiration time. This buffer helps ensure the agent closes the socket - * slightly before the server does, reducing the chance of sending a request - * on a socket that’s about to be closed by the server. - * @since v24.7.0 - * @default 1000 - */ - agentKeepAliveTimeoutBuffer?: number | undefined; - /** - * Maximum number of sockets to allow per host. Default for Node 0.10 is 5, default for Node 0.12 is Infinity - */ - maxSockets?: number | undefined; - /** - * Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. Default: Infinity. - */ - maxTotalSockets?: number | undefined; - /** - * Maximum number of sockets to leave open in a free state. Only relevant if keepAlive is set to true. Default = 256. - */ - maxFreeSockets?: number | undefined; - /** - * Socket timeout in milliseconds. This will set the timeout after the socket is connected. - */ - timeout?: number | undefined; - /** - * Scheduling strategy to apply when picking the next free socket to use. - * @default `lifo` - */ - scheduling?: "fifo" | "lifo" | undefined; - /** - * Environment variables for proxy configuration. See - * [Built-in Proxy Support](https://nodejs.org/docs/latest-v25.x/api/http.html#built-in-proxy-support) for details. - * @since v24.5.0 - */ - proxyEnv?: ProxyEnv | undefined; - /** - * Default port to use when the port is not specified in requests. - * @since v24.5.0 - */ - defaultPort?: number | undefined; - /** - * The protocol to use for the agent. - * @since v24.5.0 - */ - protocol?: string | undefined; - } - /** - * An `Agent` is responsible for managing connection persistence - * and reuse for HTTP clients. It maintains a queue of pending requests - * for a given host and port, reusing a single socket connection for each - * until the queue is empty, at which time the socket is either destroyed - * or put into a pool where it is kept to be used again for requests to the - * same host and port. Whether it is destroyed or pooled depends on the `keepAlive` `option`. - * - * Pooled connections have TCP Keep-Alive enabled for them, but servers may - * still close idle connections, in which case they will be removed from the - * pool and a new connection will be made when a new HTTP request is made for - * that host and port. Servers may also refuse to allow multiple requests - * over the same connection, in which case the connection will have to be - * remade for every request and cannot be pooled. The `Agent` will still make - * the requests to that server, but each one will occur over a new connection. - * - * When a connection is closed by the client or the server, it is removed - * from the pool. Any unused sockets in the pool will be unrefed so as not - * to keep the Node.js process running when there are no outstanding requests. - * (see `socket.unref()`). - * - * It is good practice, to `destroy()` an `Agent` instance when it is no - * longer in use, because unused sockets consume OS resources. - * - * Sockets are removed from an agent when the socket emits either - * a `'close'` event or an `'agentRemove'` event. When intending to keep one - * HTTP request open for a long time without keeping it in the agent, something - * like the following may be done: - * - * ```js - * http.get(options, (res) => { - * // Do stuff - * }).on('socket', (socket) => { - * socket.emit('agentRemove'); - * }); - * ``` - * - * An agent may also be used for an individual request. By providing `{agent: false}` as an option to the `http.get()` or `http.request()` functions, a one-time use `Agent` with default options - * will be used - * for the client connection. - * - * `agent:false`: - * - * ```js - * http.get({ - * hostname: 'localhost', - * port: 80, - * path: '/', - * agent: false, // Create a new agent just for this one request - * }, (res) => { - * // Do stuff with response - * }); - * ``` - * - * `options` in [`socket.connect()`](https://nodejs.org/docs/latest-v25.x/api/net.html#socketconnectoptions-connectlistener) are also supported. - * - * To configure any of them, a custom {@link Agent} instance must be created. - * - * ```js - * import http from 'node:http'; - * const keepAliveAgent = new http.Agent({ keepAlive: true }); - * options.agent = keepAliveAgent; - * http.request(options, onResponseCallback) - * ``` - * @since v0.3.4 - */ - class Agent extends EventEmitter { - /** - * By default set to 256. For agents with `keepAlive` enabled, this - * sets the maximum number of sockets that will be left open in the free - * state. - * @since v0.11.7 - */ - maxFreeSockets: number; - /** - * By default set to `Infinity`. Determines how many concurrent sockets the agent - * can have open per origin. Origin is the returned value of `agent.getName()`. - * @since v0.3.6 - */ - maxSockets: number; - /** - * By default set to `Infinity`. Determines how many concurrent sockets the agent - * can have open. Unlike `maxSockets`, this parameter applies across all origins. - * @since v14.5.0, v12.19.0 - */ - maxTotalSockets: number; - /** - * An object which contains arrays of sockets currently awaiting use by - * the agent when `keepAlive` is enabled. Do not modify. - * - * Sockets in the `freeSockets` list will be automatically destroyed and - * removed from the array on `'timeout'`. - * @since v0.11.4 - */ - readonly freeSockets: NodeJS.ReadOnlyDict; - /** - * An object which contains arrays of sockets currently in use by the - * agent. Do not modify. - * @since v0.3.6 - */ - readonly sockets: NodeJS.ReadOnlyDict; - /** - * An object which contains queues of requests that have not yet been assigned to - * sockets. Do not modify. - * @since v0.5.9 - */ - readonly requests: NodeJS.ReadOnlyDict; - constructor(opts?: AgentOptions); - /** - * Destroy any sockets that are currently in use by the agent. - * - * It is usually not necessary to do this. However, if using an - * agent with `keepAlive` enabled, then it is best to explicitly shut down - * the agent when it is no longer needed. Otherwise, - * sockets might stay open for quite a long time before the server - * terminates them. - * @since v0.11.4 - */ - destroy(): void; - /** - * Produces a socket/stream to be used for HTTP requests. - * - * By default, this function behaves identically to `net.createConnection()`, - * synchronously returning the created socket. The optional `callback` parameter in the - * signature is **not** used by this default implementation. - * - * However, custom agents may override this method to provide greater flexibility, - * for example, to create sockets asynchronously. When overriding `createConnection`: - * - * 1. **Synchronous socket creation**: The overriding method can return the - * socket/stream directly. - * 2. **Asynchronous socket creation**: The overriding method can accept the `callback` - * and pass the created socket/stream to it (e.g., `callback(null, newSocket)`). - * If an error occurs during socket creation, it should be passed as the first - * argument to the `callback` (e.g., `callback(err)`). - * - * The agent will call the provided `createConnection` function with `options` and - * this internal `callback`. The `callback` provided by the agent has a signature - * of `(err, stream)`. - * @since v0.11.4 - * @param options Options containing connection details. Check - * `net.createConnection` for the format of the options. For custom agents, - * this object is passed to the custom `createConnection` function. - * @param callback (Optional, primarily for custom agents) A function to be - * called by a custom `createConnection` implementation when the socket is - * created, especially for asynchronous operations. - * @returns The created socket. This is returned by the default - * implementation or by a custom synchronous `createConnection` implementation. - * If a custom `createConnection` uses the `callback` for asynchronous - * operation, this return value might not be the primary way to obtain the socket. - */ - createConnection( - options: ClientRequestArgs, - callback?: (err: Error | null, stream: stream.Duplex) => void, - ): stream.Duplex | null | undefined; - /** - * Called when `socket` is detached from a request and could be persisted by the`Agent`. Default behavior is to: - * - * ```js - * socket.setKeepAlive(true, this.keepAliveMsecs); - * socket.unref(); - * return true; - * ``` - * - * This method can be overridden by a particular `Agent` subclass. If this - * method returns a falsy value, the socket will be destroyed instead of persisting - * it for use with the next request. - * - * The `socket` argument can be an instance of `net.Socket`, a subclass of `stream.Duplex`. - * @since v8.1.0 - */ - keepSocketAlive(socket: stream.Duplex): void; - /** - * Called when `socket` is attached to `request` after being persisted because of - * the keep-alive options. Default behavior is to: - * - * ```js - * socket.ref(); - * ``` - * - * This method can be overridden by a particular `Agent` subclass. - * - * The `socket` argument can be an instance of `net.Socket`, a subclass of `stream.Duplex`. - * @since v8.1.0 - */ - reuseSocket(socket: stream.Duplex, request: ClientRequest): void; - /** - * Get a unique name for a set of request options, to determine whether a - * connection can be reused. For an HTTP agent, this returns`host:port:localAddress` or `host:port:localAddress:family`. For an HTTPS agent, - * the name includes the CA, cert, ciphers, and other HTTPS/TLS-specific options - * that determine socket reusability. - * @since v0.11.4 - * @param options A set of options providing information for name generation - */ - getName(options?: ClientRequestArgs): string; - } - const METHODS: string[]; - const STATUS_CODES: { - [errorCode: number]: string | undefined; - [errorCode: string]: string | undefined; - }; - /** - * Returns a new instance of {@link Server}. - * - * The `requestListener` is a function which is automatically - * added to the `'request'` event. - * - * ```js - * import http from 'node:http'; - * - * // Create a local server to receive data from - * const server = http.createServer((req, res) => { - * res.writeHead(200, { 'Content-Type': 'application/json' }); - * res.end(JSON.stringify({ - * data: 'Hello World!', - * })); - * }); - * - * server.listen(8000); - * ``` - * - * ```js - * import http from 'node:http'; - * - * // Create a local server to receive data from - * const server = http.createServer(); - * - * // Listen to the request event - * server.on('request', (request, res) => { - * res.writeHead(200, { 'Content-Type': 'application/json' }); - * res.end(JSON.stringify({ - * data: 'Hello World!', - * })); - * }); - * - * server.listen(8000); - * ``` - * @since v0.1.13 - */ - function createServer< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - >(requestListener?: RequestListener): Server; - function createServer< - Request extends typeof IncomingMessage = typeof IncomingMessage, - Response extends typeof ServerResponse> = typeof ServerResponse, - >( - options: ServerOptions, - requestListener?: RequestListener, - ): Server; - // although RequestOptions are passed as ClientRequestArgs to ClientRequest directly, - // create interface RequestOptions would make the naming more clear to developers - interface RequestOptions extends ClientRequestArgs {} - /** - * `options` in `socket.connect()` are also supported. - * - * Node.js maintains several connections per server to make HTTP requests. - * This function allows one to transparently issue requests. - * - * `url` can be a string or a `URL` object. If `url` is a - * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. - * - * If both `url` and `options` are specified, the objects are merged, with the `options` properties taking precedence. - * - * The optional `callback` parameter will be added as a one-time listener for - * the `'response'` event. - * - * `http.request()` returns an instance of the {@link ClientRequest} class. The `ClientRequest` instance is a writable stream. If one needs to - * upload a file with a POST request, then write to the `ClientRequest` object. - * - * ```js - * import http from 'node:http'; - * import { Buffer } from 'node:buffer'; - * - * const postData = JSON.stringify({ - * 'msg': 'Hello World!', - * }); - * - * const options = { - * hostname: 'www.google.com', - * port: 80, - * path: '/upload', - * method: 'POST', - * headers: { - * 'Content-Type': 'application/json', - * 'Content-Length': Buffer.byteLength(postData), - * }, - * }; - * - * const req = http.request(options, (res) => { - * console.log(`STATUS: ${res.statusCode}`); - * console.log(`HEADERS: ${JSON.stringify(res.headers)}`); - * res.setEncoding('utf8'); - * res.on('data', (chunk) => { - * console.log(`BODY: ${chunk}`); - * }); - * res.on('end', () => { - * console.log('No more data in response.'); - * }); - * }); - * - * req.on('error', (e) => { - * console.error(`problem with request: ${e.message}`); - * }); - * - * // Write data to request body - * req.write(postData); - * req.end(); - * ``` - * - * In the example `req.end()` was called. With `http.request()` one - * must always call `req.end()` to signify the end of the request - - * even if there is no data being written to the request body. - * - * If any error is encountered during the request (be that with DNS resolution, - * TCP level errors, or actual HTTP parse errors) an `'error'` event is emitted - * on the returned request object. As with all `'error'` events, if no listeners - * are registered the error will be thrown. - * - * There are a few special headers that should be noted. - * - * * Sending a 'Connection: keep-alive' will notify Node.js that the connection to - * the server should be persisted until the next request. - * * Sending a 'Content-Length' header will disable the default chunked encoding. - * * Sending an 'Expect' header will immediately send the request headers. - * Usually, when sending 'Expect: 100-continue', both a timeout and a listener - * for the `'continue'` event should be set. See RFC 2616 Section 8.2.3 for more - * information. - * * Sending an Authorization header will override using the `auth` option - * to compute basic authentication. - * - * Example using a `URL` as `options`: - * - * ```js - * const options = new URL('http://abc:xyz@example.com'); - * - * const req = http.request(options, (res) => { - * // ... - * }); - * ``` - * - * In a successful request, the following events will be emitted in the following - * order: - * - * * `'socket'` - * * `'response'` - * * `'data'` any number of times, on the `res` object - * (`'data'` will not be emitted at all if the response body is empty, for - * instance, in most redirects) - * * `'end'` on the `res` object - * * `'close'` - * - * In the case of a connection error, the following events will be emitted: - * - * * `'socket'` - * * `'error'` - * * `'close'` - * - * In the case of a premature connection close before the response is received, - * the following events will be emitted in the following order: - * - * * `'socket'` - * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'` - * * `'close'` - * - * In the case of a premature connection close after the response is received, - * the following events will be emitted in the following order: - * - * * `'socket'` - * * `'response'` - * * `'data'` any number of times, on the `res` object - * * (connection closed here) - * * `'aborted'` on the `res` object - * * `'close'` - * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'` - * * `'close'` on the `res` object - * - * If `req.destroy()` is called before a socket is assigned, the following - * events will be emitted in the following order: - * - * * (`req.destroy()` called here) - * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called - * * `'close'` - * - * If `req.destroy()` is called before the connection succeeds, the following - * events will be emitted in the following order: - * - * * `'socket'` - * * (`req.destroy()` called here) - * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called - * * `'close'` - * - * If `req.destroy()` is called after the response is received, the following - * events will be emitted in the following order: - * - * * `'socket'` - * * `'response'` - * * `'data'` any number of times, on the `res` object - * * (`req.destroy()` called here) - * * `'aborted'` on the `res` object - * * `'close'` - * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'`, or the error with which `req.destroy()` was called - * * `'close'` on the `res` object - * - * If `req.abort()` is called before a socket is assigned, the following - * events will be emitted in the following order: - * - * * (`req.abort()` called here) - * * `'abort'` - * * `'close'` - * - * If `req.abort()` is called before the connection succeeds, the following - * events will be emitted in the following order: - * - * * `'socket'` - * * (`req.abort()` called here) - * * `'abort'` - * * `'error'` with an error with message `'Error: socket hang up'` and code `'ECONNRESET'` - * * `'close'` - * - * If `req.abort()` is called after the response is received, the following - * events will be emitted in the following order: - * - * * `'socket'` - * * `'response'` - * * `'data'` any number of times, on the `res` object - * * (`req.abort()` called here) - * * `'abort'` - * * `'aborted'` on the `res` object - * * `'error'` on the `res` object with an error with message `'Error: aborted'` and code `'ECONNRESET'`. - * * `'close'` - * * `'close'` on the `res` object - * - * Setting the `timeout` option or using the `setTimeout()` function will - * not abort the request or do anything besides add a `'timeout'` event. - * - * Passing an `AbortSignal` and then calling `abort()` on the corresponding `AbortController` will behave the same way as calling `.destroy()` on the - * request. Specifically, the `'error'` event will be emitted with an error with - * the message `'AbortError: The operation was aborted'`, the code `'ABORT_ERR'` and the `cause`, if one was provided. - * @since v0.3.6 - */ - function request(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; - function request( - url: string | URL, - options: RequestOptions, - callback?: (res: IncomingMessage) => void, - ): ClientRequest; - /** - * Since most requests are GET requests without bodies, Node.js provides this - * convenience method. The only difference between this method and {@link request} is that it sets the method to GET by default and calls `req.end()` automatically. The callback must take care to - * consume the response - * data for reasons stated in {@link ClientRequest} section. - * - * The `callback` is invoked with a single argument that is an instance of {@link IncomingMessage}. - * - * JSON fetching example: - * - * ```js - * http.get('http://localhost:8000/', (res) => { - * const { statusCode } = res; - * const contentType = res.headers['content-type']; - * - * let error; - * // Any 2xx status code signals a successful response but - * // here we're only checking for 200. - * if (statusCode !== 200) { - * error = new Error('Request Failed.\n' + - * `Status Code: ${statusCode}`); - * } else if (!/^application\/json/.test(contentType)) { - * error = new Error('Invalid content-type.\n' + - * `Expected application/json but received ${contentType}`); - * } - * if (error) { - * console.error(error.message); - * // Consume response data to free up memory - * res.resume(); - * return; - * } - * - * res.setEncoding('utf8'); - * let rawData = ''; - * res.on('data', (chunk) => { rawData += chunk; }); - * res.on('end', () => { - * try { - * const parsedData = JSON.parse(rawData); - * console.log(parsedData); - * } catch (e) { - * console.error(e.message); - * } - * }); - * }).on('error', (e) => { - * console.error(`Got error: ${e.message}`); - * }); - * - * // Create a local server to receive data from - * const server = http.createServer((req, res) => { - * res.writeHead(200, { 'Content-Type': 'application/json' }); - * res.end(JSON.stringify({ - * data: 'Hello World!', - * })); - * }); - * - * server.listen(8000); - * ``` - * @since v0.3.6 - * @param options Accepts the same `options` as {@link request}, with the method set to GET by default. - */ - function get(options: RequestOptions | string | URL, callback?: (res: IncomingMessage) => void): ClientRequest; - function get(url: string | URL, options: RequestOptions, callback?: (res: IncomingMessage) => void): ClientRequest; - /** - * Performs the low-level validations on the provided `name` that are done when `res.setHeader(name, value)` is called. - * - * Passing illegal value as `name` will result in a `TypeError` being thrown, - * identified by `code: 'ERR_INVALID_HTTP_TOKEN'`. - * - * It is not necessary to use this method before passing headers to an HTTP request - * or response. The HTTP module will automatically validate such headers. - * - * Example: - * - * ```js - * import { validateHeaderName } from 'node:http'; - * - * try { - * validateHeaderName(''); - * } catch (err) { - * console.error(err instanceof TypeError); // --> true - * console.error(err.code); // --> 'ERR_INVALID_HTTP_TOKEN' - * console.error(err.message); // --> 'Header name must be a valid HTTP token [""]' - * } - * ``` - * @since v14.3.0 - * @param [label='Header name'] Label for error message. - */ - function validateHeaderName(name: string): void; - /** - * Performs the low-level validations on the provided `value` that are done when `res.setHeader(name, value)` is called. - * - * Passing illegal value as `value` will result in a `TypeError` being thrown. - * - * * Undefined value error is identified by `code: 'ERR_HTTP_INVALID_HEADER_VALUE'`. - * * Invalid value character error is identified by `code: 'ERR_INVALID_CHAR'`. - * - * It is not necessary to use this method before passing headers to an HTTP request - * or response. The HTTP module will automatically validate such headers. - * - * Examples: - * - * ```js - * import { validateHeaderValue } from 'node:http'; - * - * try { - * validateHeaderValue('x-my-header', undefined); - * } catch (err) { - * console.error(err instanceof TypeError); // --> true - * console.error(err.code === 'ERR_HTTP_INVALID_HEADER_VALUE'); // --> true - * console.error(err.message); // --> 'Invalid value "undefined" for header "x-my-header"' - * } - * - * try { - * validateHeaderValue('x-my-header', 'oʊmɪɡə'); - * } catch (err) { - * console.error(err instanceof TypeError); // --> true - * console.error(err.code === 'ERR_INVALID_CHAR'); // --> true - * console.error(err.message); // --> 'Invalid character in header content ["x-my-header"]' - * } - * ``` - * @since v14.3.0 - * @param name Header name - * @param value Header value - */ - function validateHeaderValue(name: string, value: string): void; - /** - * Set the maximum number of idle HTTP parsers. - * @since v18.8.0, v16.18.0 - * @param [max=1000] - */ - function setMaxIdleHTTPParsers(max: number): void; - /** - * Dynamically resets the global configurations to enable built-in proxy support for - * `fetch()` and `http.request()`/`https.request()` at runtime, as an alternative - * to using the `--use-env-proxy` flag or `NODE_USE_ENV_PROXY` environment variable. - * It can also be used to override settings configured from the environment variables. - * - * As this function resets the global configurations, any previously configured - * `http.globalAgent`, `https.globalAgent` or undici global dispatcher would be - * overridden after this function is invoked. It's recommended to invoke it before any - * requests are made and avoid invoking it in the middle of any requests. - * - * See [Built-in Proxy Support](https://nodejs.org/docs/latest-v25.x/api/http.html#built-in-proxy-support) for details on proxy URL formats and `NO_PROXY` - * syntax. - * @since v25.4.0 - * @param proxyEnv An object containing proxy configuration. This accepts the - * same options as the `proxyEnv` option accepted by {@link Agent}. **Default:** - * `process.env`. - * @returns A function that restores the original agent and dispatcher - * settings to the state before this `http.setGlobalProxyFromEnv()` is invoked. - */ - function setGlobalProxyFromEnv(proxyEnv?: ProxyEnv): () => void; - /** - * Global instance of `Agent` which is used as the default for all HTTP client - * requests. Diverges from a default `Agent` configuration by having `keepAlive` - * enabled and a `timeout` of 5 seconds. - * @since v0.5.9 - */ - let globalAgent: Agent; - /** - * Read-only property specifying the maximum allowed size of HTTP headers in bytes. - * Defaults to 16KB. Configurable using the `--max-http-header-size` CLI option. - */ - const maxHeaderSize: number; - /** - * A browser-compatible implementation of `WebSocket`. - * @since v22.5.0 - */ - const WebSocket: typeof import("undici-types").WebSocket; - /** - * @since v22.5.0 - */ - const CloseEvent: typeof import("undici-types").CloseEvent; - /** - * @since v22.5.0 - */ - const MessageEvent: typeof import("undici-types").MessageEvent; -} -declare module "http" { - export * from "node:http"; -} diff --git a/skills/flight-finder/node_modules/@types/node/http2.d.ts b/skills/flight-finder/node_modules/@types/node/http2.d.ts deleted file mode 100644 index 4130bfe..0000000 --- a/skills/flight-finder/node_modules/@types/node/http2.d.ts +++ /dev/null @@ -1,2480 +0,0 @@ -/** - * The `node:http2` module provides an implementation of the [HTTP/2](https://tools.ietf.org/html/rfc7540) protocol. - * It can be accessed using: - * - * ```js - * import http2 from 'node:http2'; - * ``` - * @since v8.4.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/http2.js) - */ -declare module "node:http2" { - import { NonSharedBuffer } from "node:buffer"; - import { InternalEventEmitter } from "node:events"; - import * as fs from "node:fs"; - import * as net from "node:net"; - import * as stream from "node:stream"; - import * as tls from "node:tls"; - import * as url from "node:url"; - import { - IncomingHttpHeaders as Http1IncomingHttpHeaders, - IncomingMessage, - OutgoingHttpHeaders, - ServerResponse, - } from "node:http"; - interface IncomingHttpStatusHeader { - ":status"?: number | undefined; - } - interface IncomingHttpHeaders extends Http1IncomingHttpHeaders { - ":path"?: string | undefined; - ":method"?: string | undefined; - ":authority"?: string | undefined; - ":scheme"?: string | undefined; - } - // Http2Stream - interface StreamState { - localWindowSize?: number | undefined; - state?: number | undefined; - localClose?: number | undefined; - remoteClose?: number | undefined; - /** @deprecated */ - sumDependencyWeight?: number | undefined; - /** @deprecated */ - weight?: number | undefined; - } - interface ServerStreamResponseOptions { - endStream?: boolean | undefined; - waitForTrailers?: boolean | undefined; - } - interface StatOptions { - offset: number; - length: number; - } - interface ServerStreamFileResponseOptions { - statCheck?: - | ((stats: fs.Stats, headers: OutgoingHttpHeaders, statOptions: StatOptions) => void) - | undefined; - waitForTrailers?: boolean | undefined; - offset?: number | undefined; - length?: number | undefined; - } - interface ServerStreamFileResponseOptionsWithError extends ServerStreamFileResponseOptions { - onError?: ((err: NodeJS.ErrnoException) => void) | undefined; - } - interface Http2StreamEventMap extends stream.DuplexEventMap { - "aborted": []; - "data": [chunk: string | NonSharedBuffer]; - "frameError": [type: number, code: number, id: number]; - "ready": []; - "streamClosed": [code: number]; - "timeout": []; - "trailers": [trailers: IncomingHttpHeaders, flags: number]; - "wantTrailers": []; - } - interface Http2Stream extends stream.Duplex { - /** - * Set to `true` if the `Http2Stream` instance was aborted abnormally. When set, - * the `'aborted'` event will have been emitted. - * @since v8.4.0 - */ - readonly aborted: boolean; - /** - * This property shows the number of characters currently buffered to be written. - * See `net.Socket.bufferSize` for details. - * @since v11.2.0, v10.16.0 - */ - readonly bufferSize: number; - /** - * Set to `true` if the `Http2Stream` instance has been closed. - * @since v9.4.0 - */ - readonly closed: boolean; - /** - * Set to `true` if the `Http2Stream` instance has been destroyed and is no longer - * usable. - * @since v8.4.0 - */ - readonly destroyed: boolean; - /** - * Set to `true` if the `END_STREAM` flag was set in the request or response - * HEADERS frame received, indicating that no additional data should be received - * and the readable side of the `Http2Stream` will be closed. - * @since v10.11.0 - */ - readonly endAfterHeaders: boolean; - /** - * The numeric stream identifier of this `Http2Stream` instance. Set to `undefined` if the stream identifier has not yet been assigned. - * @since v8.4.0 - */ - readonly id?: number | undefined; - /** - * Set to `true` if the `Http2Stream` instance has not yet been assigned a - * numeric stream identifier. - * @since v9.4.0 - */ - readonly pending: boolean; - /** - * Set to the `RST_STREAM` `error code` reported when the `Http2Stream` is - * destroyed after either receiving an `RST_STREAM` frame from the connected peer, - * calling `http2stream.close()`, or `http2stream.destroy()`. Will be `undefined` if the `Http2Stream` has not been closed. - * @since v8.4.0 - */ - readonly rstCode: number; - /** - * An object containing the outbound headers sent for this `Http2Stream`. - * @since v9.5.0 - */ - readonly sentHeaders: OutgoingHttpHeaders; - /** - * An array of objects containing the outbound informational (additional) headers - * sent for this `Http2Stream`. - * @since v9.5.0 - */ - readonly sentInfoHeaders?: OutgoingHttpHeaders[] | undefined; - /** - * An object containing the outbound trailers sent for this `HttpStream`. - * @since v9.5.0 - */ - readonly sentTrailers?: OutgoingHttpHeaders | undefined; - /** - * A reference to the `Http2Session` instance that owns this `Http2Stream`. The - * value will be `undefined` after the `Http2Stream` instance is destroyed. - * @since v8.4.0 - */ - readonly session: Http2Session | undefined; - /** - * Provides miscellaneous information about the current state of the `Http2Stream`. - * - * A current state of this `Http2Stream`. - * @since v8.4.0 - */ - readonly state: StreamState; - /** - * Closes the `Http2Stream` instance by sending an `RST_STREAM` frame to the - * connected HTTP/2 peer. - * @since v8.4.0 - * @param [code=http2.constants.NGHTTP2_NO_ERROR] Unsigned 32-bit integer identifying the error code. - * @param callback An optional function registered to listen for the `'close'` event. - */ - close(code?: number, callback?: () => void): void; - /** - * @deprecated Priority signaling is no longer supported in Node.js. - */ - priority(options: unknown): void; - /** - * ```js - * import http2 from 'node:http2'; - * const client = http2.connect('http://example.org:8000'); - * const { NGHTTP2_CANCEL } = http2.constants; - * const req = client.request({ ':path': '/' }); - * - * // Cancel the stream if there's no activity after 5 seconds - * req.setTimeout(5000, () => req.close(NGHTTP2_CANCEL)); - * ``` - * @since v8.4.0 - */ - setTimeout(msecs: number, callback?: () => void): void; - /** - * Sends a trailing `HEADERS` frame to the connected HTTP/2 peer. This method - * will cause the `Http2Stream` to be immediately closed and must only be - * called after the `'wantTrailers'` event has been emitted. When sending a - * request or sending a response, the `options.waitForTrailers` option must be set - * in order to keep the `Http2Stream` open after the final `DATA` frame so that - * trailers can be sent. - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * stream.respond(undefined, { waitForTrailers: true }); - * stream.on('wantTrailers', () => { - * stream.sendTrailers({ xyz: 'abc' }); - * }); - * stream.end('Hello World'); - * }); - * ``` - * - * The HTTP/1 specification forbids trailers from containing HTTP/2 pseudo-header - * fields (e.g. `':method'`, `':path'`, etc). - * @since v10.0.0 - */ - sendTrailers(headers: OutgoingHttpHeaders): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: Http2StreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: Http2StreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: Http2StreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: Http2StreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: Http2StreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface ClientHttp2StreamEventMap extends Http2StreamEventMap { - "continue": []; - "headers": [headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number, rawHeaders: string[]]; - "push": [headers: IncomingHttpHeaders, flags: number]; - "response": [headers: IncomingHttpHeaders & IncomingHttpStatusHeader, flags: number, rawHeaders: string[]]; - } - interface ClientHttp2Stream extends Http2Stream { - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ClientHttp2StreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ClientHttp2StreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: ClientHttp2StreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: ClientHttp2StreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface ServerHttp2Stream extends Http2Stream { - /** - * True if headers were sent, false otherwise (read-only). - * @since v8.4.0 - */ - readonly headersSent: boolean; - /** - * Read-only property mapped to the `SETTINGS_ENABLE_PUSH` flag of the remote - * client's most recent `SETTINGS` frame. Will be `true` if the remote peer - * accepts push streams, `false` otherwise. Settings are the same for every `Http2Stream` in the same `Http2Session`. - * @since v8.4.0 - */ - readonly pushAllowed: boolean; - /** - * Sends an additional informational `HEADERS` frame to the connected HTTP/2 peer. - * @since v8.4.0 - */ - additionalHeaders(headers: OutgoingHttpHeaders): void; - /** - * Initiates a push stream. The callback is invoked with the new `Http2Stream` instance created for the push stream passed as the second argument, or an `Error` passed as the first argument. - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * stream.respond({ ':status': 200 }); - * stream.pushStream({ ':path': '/' }, (err, pushStream, headers) => { - * if (err) throw err; - * pushStream.respond({ ':status': 200 }); - * pushStream.end('some pushed data'); - * }); - * stream.end('some data'); - * }); - * ``` - * - * Setting the weight of a push stream is not allowed in the `HEADERS` frame. Pass - * a `weight` value to `http2stream.priority` with the `silent` option set to `true` to enable server-side bandwidth balancing between concurrent streams. - * - * Calling `http2stream.pushStream()` from within a pushed stream is not permitted - * and will throw an error. - * @since v8.4.0 - * @param callback Callback that is called once the push stream has been initiated. - */ - pushStream( - headers: OutgoingHttpHeaders, - callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, - ): void; - pushStream( - headers: OutgoingHttpHeaders, - options?: Pick, - callback?: (err: Error | null, pushStream: ServerHttp2Stream, headers: OutgoingHttpHeaders) => void, - ): void; - /** - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * stream.respond({ ':status': 200 }); - * stream.end('some data'); - * }); - * ``` - * - * Initiates a response. When the `options.waitForTrailers` option is set, the `'wantTrailers'` event - * will be emitted immediately after queuing the last chunk of payload data to be sent. - * The `http2stream.sendTrailers()` method can then be used to send trailing header fields to the peer. - * - * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically - * close when the final `DATA` frame is transmitted. User code must call either `http2stream.sendTrailers()` or `http2stream.close()` to close the `Http2Stream`. - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * stream.respond({ ':status': 200 }, { waitForTrailers: true }); - * stream.on('wantTrailers', () => { - * stream.sendTrailers({ ABC: 'some value to send' }); - * }); - * stream.end('some data'); - * }); - * ``` - * @since v8.4.0 - */ - respond(headers?: OutgoingHttpHeaders | readonly string[], options?: ServerStreamResponseOptions): void; - /** - * Initiates a response whose data is read from the given file descriptor. No - * validation is performed on the given file descriptor. If an error occurs while - * attempting to read data using the file descriptor, the `Http2Stream` will be - * closed using an `RST_STREAM` frame using the standard `INTERNAL_ERROR` code. - * - * When used, the `Http2Stream` object's `Duplex` interface will be closed - * automatically. - * - * ```js - * import http2 from 'node:http2'; - * import fs from 'node:fs'; - * - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * const fd = fs.openSync('/some/file', 'r'); - * - * const stat = fs.fstatSync(fd); - * const headers = { - * 'content-length': stat.size, - * 'last-modified': stat.mtime.toUTCString(), - * 'content-type': 'text/plain; charset=utf-8', - * }; - * stream.respondWithFD(fd, headers); - * stream.on('close', () => fs.closeSync(fd)); - * }); - * ``` - * - * The optional `options.statCheck` function may be specified to give user code - * an opportunity to set additional content headers based on the `fs.Stat` details - * of the given fd. If the `statCheck` function is provided, the `http2stream.respondWithFD()` method will - * perform an `fs.fstat()` call to collect details on the provided file descriptor. - * - * The `offset` and `length` options may be used to limit the response to a - * specific range subset. This can be used, for instance, to support HTTP Range - * requests. - * - * The file descriptor or `FileHandle` is not closed when the stream is closed, - * so it will need to be closed manually once it is no longer needed. - * Using the same file descriptor concurrently for multiple streams - * is not supported and may result in data loss. Re-using a file descriptor - * after a stream has finished is supported. - * - * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event - * will be emitted immediately after queuing the last chunk of payload data to be - * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing - * header fields to the peer. - * - * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically - * close when the final `DATA` frame is transmitted. User code _must_ call either `http2stream.sendTrailers()` - * or `http2stream.close()` to close the `Http2Stream`. - * - * ```js - * import http2 from 'node:http2'; - * import fs from 'node:fs'; - * - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * const fd = fs.openSync('/some/file', 'r'); - * - * const stat = fs.fstatSync(fd); - * const headers = { - * 'content-length': stat.size, - * 'last-modified': stat.mtime.toUTCString(), - * 'content-type': 'text/plain; charset=utf-8', - * }; - * stream.respondWithFD(fd, headers, { waitForTrailers: true }); - * stream.on('wantTrailers', () => { - * stream.sendTrailers({ ABC: 'some value to send' }); - * }); - * - * stream.on('close', () => fs.closeSync(fd)); - * }); - * ``` - * @since v8.4.0 - * @param fd A readable file descriptor. - */ - respondWithFD( - fd: number | fs.promises.FileHandle, - headers?: OutgoingHttpHeaders, - options?: ServerStreamFileResponseOptions, - ): void; - /** - * Sends a regular file as the response. The `path` must specify a regular file - * or an `'error'` event will be emitted on the `Http2Stream` object. - * - * When used, the `Http2Stream` object's `Duplex` interface will be closed - * automatically. - * - * The optional `options.statCheck` function may be specified to give user code - * an opportunity to set additional content headers based on the `fs.Stat` details - * of the given file: - * - * If an error occurs while attempting to read the file data, the `Http2Stream` will be closed using an - * `RST_STREAM` frame using the standard `INTERNAL_ERROR` code. - * If the `onError` callback is defined, then it will be called. Otherwise, the stream will be destroyed. - * - * Example using a file path: - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * function statCheck(stat, headers) { - * headers['last-modified'] = stat.mtime.toUTCString(); - * } - * - * function onError(err) { - * // stream.respond() can throw if the stream has been destroyed by - * // the other side. - * try { - * if (err.code === 'ENOENT') { - * stream.respond({ ':status': 404 }); - * } else { - * stream.respond({ ':status': 500 }); - * } - * } catch (err) { - * // Perform actual error handling. - * console.error(err); - * } - * stream.end(); - * } - * - * stream.respondWithFile('/some/file', - * { 'content-type': 'text/plain; charset=utf-8' }, - * { statCheck, onError }); - * }); - * ``` - * - * The `options.statCheck` function may also be used to cancel the send operation - * by returning `false`. For instance, a conditional request may check the stat - * results to determine if the file has been modified to return an appropriate `304` response: - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * function statCheck(stat, headers) { - * // Check the stat here... - * stream.respond({ ':status': 304 }); - * return false; // Cancel the send operation - * } - * stream.respondWithFile('/some/file', - * { 'content-type': 'text/plain; charset=utf-8' }, - * { statCheck }); - * }); - * ``` - * - * The `content-length` header field will be automatically set. - * - * The `offset` and `length` options may be used to limit the response to a - * specific range subset. This can be used, for instance, to support HTTP Range - * requests. - * - * The `options.onError` function may also be used to handle all the errors - * that could happen before the delivery of the file is initiated. The - * default behavior is to destroy the stream. - * - * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event - * will be emitted immediately after queuing the last chunk of payload data to be - * sent. The `http2stream.sendTrailers()` method can then be used to sent trailing - * header fields to the peer. - * - * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically - * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer(); - * server.on('stream', (stream) => { - * stream.respondWithFile('/some/file', - * { 'content-type': 'text/plain; charset=utf-8' }, - * { waitForTrailers: true }); - * stream.on('wantTrailers', () => { - * stream.sendTrailers({ ABC: 'some value to send' }); - * }); - * }); - * ``` - * @since v8.4.0 - */ - respondWithFile( - path: string, - headers?: OutgoingHttpHeaders, - options?: ServerStreamFileResponseOptionsWithError, - ): void; - } - // Http2Session - interface Settings { - headerTableSize?: number | undefined; - enablePush?: boolean | undefined; - initialWindowSize?: number | undefined; - maxFrameSize?: number | undefined; - maxConcurrentStreams?: number | undefined; - maxHeaderListSize?: number | undefined; - enableConnectProtocol?: boolean | undefined; - } - interface ClientSessionRequestOptions { - endStream?: boolean | undefined; - exclusive?: boolean | undefined; - parent?: number | undefined; - waitForTrailers?: boolean | undefined; - signal?: AbortSignal | undefined; - } - interface SessionState { - effectiveLocalWindowSize?: number | undefined; - effectiveRecvDataLength?: number | undefined; - nextStreamID?: number | undefined; - localWindowSize?: number | undefined; - lastProcStreamID?: number | undefined; - remoteWindowSize?: number | undefined; - outboundQueueSize?: number | undefined; - deflateDynamicTableSize?: number | undefined; - inflateDynamicTableSize?: number | undefined; - } - interface Http2SessionEventMap { - "close": []; - "connect": [session: Http2Session, socket: net.Socket | tls.TLSSocket]; - "error": [err: Error]; - "frameError": [type: number, code: number, id: number]; - "goaway": [errorCode: number, lastStreamID: number, opaqueData?: NonSharedBuffer]; - "localSettings": [settings: Settings]; - "ping": [payload: Buffer]; - "remoteSettings": [settings: Settings]; - "stream": [ - stream: Http2Stream, - headers: IncomingHttpHeaders & IncomingHttpStatusHeader, - flags: number, - rawHeaders: string[], - ]; - "timeout": []; - } - interface Http2Session extends InternalEventEmitter { - /** - * Value will be `undefined` if the `Http2Session` is not yet connected to a - * socket, `h2c` if the `Http2Session` is not connected to a `TLSSocket`, or - * will return the value of the connected `TLSSocket`'s own `alpnProtocol` property. - * @since v9.4.0 - */ - readonly alpnProtocol?: string | undefined; - /** - * Will be `true` if this `Http2Session` instance has been closed, otherwise `false`. - * @since v9.4.0 - */ - readonly closed: boolean; - /** - * Will be `true` if this `Http2Session` instance is still connecting, will be set - * to `false` before emitting `connect` event and/or calling the `http2.connect` callback. - * @since v10.0.0 - */ - readonly connecting: boolean; - /** - * Will be `true` if this `Http2Session` instance has been destroyed and must no - * longer be used, otherwise `false`. - * @since v8.4.0 - */ - readonly destroyed: boolean; - /** - * Value is `undefined` if the `Http2Session` session socket has not yet been - * connected, `true` if the `Http2Session` is connected with a `TLSSocket`, - * and `false` if the `Http2Session` is connected to any other kind of socket - * or stream. - * @since v9.4.0 - */ - readonly encrypted?: boolean | undefined; - /** - * A prototype-less object describing the current local settings of this `Http2Session`. - * The local settings are local to _this_`Http2Session` instance. - * @since v8.4.0 - */ - readonly localSettings: Settings; - /** - * If the `Http2Session` is connected to a `TLSSocket`, the `originSet` property - * will return an `Array` of origins for which the `Http2Session` may be - * considered authoritative. - * - * The `originSet` property is only available when using a secure TLS connection. - * @since v9.4.0 - */ - readonly originSet?: string[] | undefined; - /** - * Indicates whether the `Http2Session` is currently waiting for acknowledgment of - * a sent `SETTINGS` frame. Will be `true` after calling the `http2session.settings()` method. - * Will be `false` once all sent `SETTINGS` frames have been acknowledged. - * @since v8.4.0 - */ - readonly pendingSettingsAck: boolean; - /** - * A prototype-less object describing the current remote settings of this`Http2Session`. - * The remote settings are set by the _connected_ HTTP/2 peer. - * @since v8.4.0 - */ - readonly remoteSettings: Settings; - /** - * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but - * limits available methods to ones safe to use with HTTP/2. - * - * `destroy`, `emit`, `end`, `pause`, `read`, `resume`, and `write` will throw - * an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for more information. - * - * `setTimeout` method will be called on this `Http2Session`. - * - * All other interactions will be routed directly to the socket. - * @since v8.4.0 - */ - readonly socket: net.Socket | tls.TLSSocket; - /** - * Provides miscellaneous information about the current state of the`Http2Session`. - * - * An object describing the current status of this `Http2Session`. - * @since v8.4.0 - */ - readonly state: SessionState; - /** - * The `http2session.type` will be equal to `http2.constants.NGHTTP2_SESSION_SERVER` if this `Http2Session` instance is a - * server, and `http2.constants.NGHTTP2_SESSION_CLIENT` if the instance is a - * client. - * @since v8.4.0 - */ - readonly type: number; - /** - * Gracefully closes the `Http2Session`, allowing any existing streams to - * complete on their own and preventing new `Http2Stream` instances from being - * created. Once closed, `http2session.destroy()`_might_ be called if there - * are no open `Http2Stream` instances. - * - * If specified, the `callback` function is registered as a handler for the`'close'` event. - * @since v9.4.0 - */ - close(callback?: () => void): void; - /** - * Immediately terminates the `Http2Session` and the associated `net.Socket` or `tls.TLSSocket`. - * - * Once destroyed, the `Http2Session` will emit the `'close'` event. If `error` is not undefined, an `'error'` event will be emitted immediately before the `'close'` event. - * - * If there are any remaining open `Http2Streams` associated with the `Http2Session`, those will also be destroyed. - * @since v8.4.0 - * @param error An `Error` object if the `Http2Session` is being destroyed due to an error. - * @param code The HTTP/2 error code to send in the final `GOAWAY` frame. If unspecified, and `error` is not undefined, the default is `INTERNAL_ERROR`, otherwise defaults to `NO_ERROR`. - */ - destroy(error?: Error, code?: number): void; - /** - * Transmits a `GOAWAY` frame to the connected peer _without_ shutting down the`Http2Session`. - * @since v9.4.0 - * @param code An HTTP/2 error code - * @param lastStreamID The numeric ID of the last processed `Http2Stream` - * @param opaqueData A `TypedArray` or `DataView` instance containing additional data to be carried within the `GOAWAY` frame. - */ - goaway(code?: number, lastStreamID?: number, opaqueData?: NodeJS.ArrayBufferView): void; - /** - * Sends a `PING` frame to the connected HTTP/2 peer. A `callback` function must - * be provided. The method will return `true` if the `PING` was sent, `false` otherwise. - * - * The maximum number of outstanding (unacknowledged) pings is determined by the `maxOutstandingPings` configuration option. The default maximum is 10. - * - * If provided, the `payload` must be a `Buffer`, `TypedArray`, or `DataView` containing 8 bytes of data that will be transmitted with the `PING` and - * returned with the ping acknowledgment. - * - * The callback will be invoked with three arguments: an error argument that will - * be `null` if the `PING` was successfully acknowledged, a `duration` argument - * that reports the number of milliseconds elapsed since the ping was sent and the - * acknowledgment was received, and a `Buffer` containing the 8-byte `PING` payload. - * - * ```js - * session.ping(Buffer.from('abcdefgh'), (err, duration, payload) => { - * if (!err) { - * console.log(`Ping acknowledged in ${duration} milliseconds`); - * console.log(`With payload '${payload.toString()}'`); - * } - * }); - * ``` - * - * If the `payload` argument is not specified, the default payload will be the - * 64-bit timestamp (little endian) marking the start of the `PING` duration. - * @since v8.9.3 - * @param payload Optional ping payload. - */ - ping(callback: (err: Error | null, duration: number, payload: NonSharedBuffer) => void): boolean; - ping( - payload: NodeJS.ArrayBufferView, - callback: (err: Error | null, duration: number, payload: NonSharedBuffer) => void, - ): boolean; - /** - * Calls `ref()` on this `Http2Session` instance's underlying `net.Socket`. - * @since v9.4.0 - */ - ref(): void; - /** - * Sets the local endpoint's window size. - * The `windowSize` is the total window size to set, not - * the delta. - * - * ```js - * import http2 from 'node:http2'; - * - * const server = http2.createServer(); - * const expectedWindowSize = 2 ** 20; - * server.on('connect', (session) => { - * - * // Set local window size to be 2 ** 20 - * session.setLocalWindowSize(expectedWindowSize); - * }); - * ``` - * @since v15.3.0, v14.18.0 - */ - setLocalWindowSize(windowSize: number): void; - /** - * Used to set a callback function that is called when there is no activity on - * the `Http2Session` after `msecs` milliseconds. The given `callback` is - * registered as a listener on the `'timeout'` event. - * @since v8.4.0 - */ - setTimeout(msecs: number, callback?: () => void): void; - /** - * Updates the current local settings for this `Http2Session` and sends a new `SETTINGS` frame to the connected HTTP/2 peer. - * - * Once called, the `http2session.pendingSettingsAck` property will be `true` while the session is waiting for the remote peer to acknowledge the new - * settings. - * - * The new settings will not become effective until the `SETTINGS` acknowledgment - * is received and the `'localSettings'` event is emitted. It is possible to send - * multiple `SETTINGS` frames while acknowledgment is still pending. - * @since v8.4.0 - * @param callback Callback that is called once the session is connected or right away if the session is already connected. - */ - settings( - settings: Settings, - callback?: (err: Error | null, settings: Settings, duration: number) => void, - ): void; - /** - * Calls `unref()` on this `Http2Session`instance's underlying `net.Socket`. - * @since v9.4.0 - */ - unref(): void; - } - interface ClientHttp2SessionEventMap extends Http2SessionEventMap { - "altsvc": [alt: string, origin: string, streamId: number]; - "connect": [session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket]; - "origin": [origins: string[]]; - "stream": [ - stream: ClientHttp2Stream, - headers: IncomingHttpHeaders & IncomingHttpStatusHeader, - flags: number, - rawHeaders: string[], - ]; - } - interface ClientHttp2Session extends Http2Session { - /** - * For HTTP/2 Client `Http2Session` instances only, the `http2session.request()` creates and returns an `Http2Stream` instance that can be used to send an - * HTTP/2 request to the connected server. - * - * When a `ClientHttp2Session` is first created, the socket may not yet be - * connected. if `clienthttp2session.request()` is called during this time, the - * actual request will be deferred until the socket is ready to go. - * If the `session` is closed before the actual request be executed, an `ERR_HTTP2_GOAWAY_SESSION` is thrown. - * - * This method is only available if `http2session.type` is equal to `http2.constants.NGHTTP2_SESSION_CLIENT`. - * - * ```js - * import http2 from 'node:http2'; - * const clientSession = http2.connect('https://localhost:1234'); - * const { - * HTTP2_HEADER_PATH, - * HTTP2_HEADER_STATUS, - * } = http2.constants; - * - * const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' }); - * req.on('response', (headers) => { - * console.log(headers[HTTP2_HEADER_STATUS]); - * req.on('data', (chunk) => { // .. }); - * req.on('end', () => { // .. }); - * }); - * ``` - * - * When the `options.waitForTrailers` option is set, the `'wantTrailers'` event - * is emitted immediately after queuing the last chunk of payload data to be sent. - * The `http2stream.sendTrailers()` method can then be called to send trailing - * headers to the peer. - * - * When `options.waitForTrailers` is set, the `Http2Stream` will not automatically - * close when the final `DATA` frame is transmitted. User code must call either`http2stream.sendTrailers()` or `http2stream.close()` to close the`Http2Stream`. - * - * When `options.signal` is set with an `AbortSignal` and then `abort` on the - * corresponding `AbortController` is called, the request will emit an `'error'`event with an `AbortError` error. - * - * The `:method` and `:path` pseudo-headers are not specified within `headers`, - * they respectively default to: - * - * * `:method` \= `'GET'` - * * `:path` \= `/` - * @since v8.4.0 - */ - request( - headers?: OutgoingHttpHeaders | readonly string[], - options?: ClientSessionRequestOptions, - ): ClientHttp2Stream; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ClientHttp2StreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ClientHttp2StreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: ClientHttp2StreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: ClientHttp2StreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ClientHttp2StreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface AlternativeServiceOptions { - origin: number | string | url.URL; - } - interface ServerHttp2SessionEventMap< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends Http2SessionEventMap { - "connect": [ - session: ServerHttp2Session, - socket: net.Socket | tls.TLSSocket, - ]; - "stream": [stream: ServerHttp2Stream, headers: IncomingHttpHeaders, flags: number, rawHeaders: string[]]; - } - interface ServerHttp2Session< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends Http2Session { - readonly server: - | Http2Server - | Http2SecureServer; - /** - * Submits an `ALTSVC` frame (as defined by [RFC 7838](https://tools.ietf.org/html/rfc7838)) to the connected client. - * - * ```js - * import http2 from 'node:http2'; - * - * const server = http2.createServer(); - * server.on('session', (session) => { - * // Set altsvc for origin https://example.org:80 - * session.altsvc('h2=":8000"', 'https://example.org:80'); - * }); - * - * server.on('stream', (stream) => { - * // Set altsvc for a specific stream - * stream.session.altsvc('h2=":8000"', stream.id); - * }); - * ``` - * - * Sending an `ALTSVC` frame with a specific stream ID indicates that the alternate - * service is associated with the origin of the given `Http2Stream`. - * - * The `alt` and origin string _must_ contain only ASCII bytes and are - * strictly interpreted as a sequence of ASCII bytes. The special value `'clear'`may be passed to clear any previously set alternative service for a given - * domain. - * - * When a string is passed for the `originOrStream` argument, it will be parsed as - * a URL and the origin will be derived. For instance, the origin for the - * HTTP URL `'https://example.org/foo/bar'` is the ASCII string`'https://example.org'`. An error will be thrown if either the given string - * cannot be parsed as a URL or if a valid origin cannot be derived. - * - * A `URL` object, or any object with an `origin` property, may be passed as`originOrStream`, in which case the value of the `origin` property will be - * used. The value of the `origin` property _must_ be a properly serialized - * ASCII origin. - * @since v9.4.0 - * @param alt A description of the alternative service configuration as defined by `RFC 7838`. - * @param originOrStream Either a URL string specifying the origin (or an `Object` with an `origin` property) or the numeric identifier of an active `Http2Stream` as given by the - * `http2stream.id` property. - */ - altsvc(alt: string, originOrStream: number | string | url.URL | AlternativeServiceOptions): void; - /** - * Submits an `ORIGIN` frame (as defined by [RFC 8336](https://tools.ietf.org/html/rfc8336)) to the connected client - * to advertise the set of origins for which the server is capable of providing - * authoritative responses. - * - * ```js - * import http2 from 'node:http2'; - * const options = getSecureOptionsSomehow(); - * const server = http2.createSecureServer(options); - * server.on('stream', (stream) => { - * stream.respond(); - * stream.end('ok'); - * }); - * server.on('session', (session) => { - * session.origin('https://example.com', 'https://example.org'); - * }); - * ``` - * - * When a string is passed as an `origin`, it will be parsed as a URL and the - * origin will be derived. For instance, the origin for the HTTP URL `'https://example.org/foo/bar'` is the ASCII string` 'https://example.org'`. An error will be thrown if either the given - * string - * cannot be parsed as a URL or if a valid origin cannot be derived. - * - * A `URL` object, or any object with an `origin` property, may be passed as - * an `origin`, in which case the value of the `origin` property will be - * used. The value of the `origin` property _must_ be a properly serialized - * ASCII origin. - * - * Alternatively, the `origins` option may be used when creating a new HTTP/2 - * server using the `http2.createSecureServer()` method: - * - * ```js - * import http2 from 'node:http2'; - * const options = getSecureOptionsSomehow(); - * options.origins = ['https://example.com', 'https://example.org']; - * const server = http2.createSecureServer(options); - * server.on('stream', (stream) => { - * stream.respond(); - * stream.end('ok'); - * }); - * ``` - * @since v10.12.0 - * @param origins One or more URL Strings passed as separate arguments. - */ - origin( - ...origins: Array< - | string - | url.URL - | { - origin: string; - } - > - ): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit( - eventName: E, - ...args: ServerHttp2SessionEventMap[E] - ): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): (( - ...args: ServerHttp2SessionEventMap[E] - ) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): (( - ...args: ServerHttp2SessionEventMap[E] - ) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: ( - ...args: ServerHttp2SessionEventMap[E] - ) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - // Http2Server - interface SessionOptions { - /** - * Sets the maximum dynamic table size for deflating header fields. - * @default 4Kib - */ - maxDeflateDynamicTableSize?: number | undefined; - /** - * Sets the maximum number of settings entries per `SETTINGS` frame. - * The minimum value allowed is `1`. - * @default 32 - */ - maxSettings?: number | undefined; - /** - * Sets the maximum memory that the `Http2Session` is permitted to use. - * The value is expressed in terms of number of megabytes, e.g. `1` equal 1 megabyte. - * The minimum value allowed is `1`. - * This is a credit based limit, existing `Http2Stream`s may cause this limit to be exceeded, - * but new `Http2Stream` instances will be rejected while this limit is exceeded. - * The current number of `Http2Stream` sessions, the current memory use of the header compression tables, - * current data queued to be sent, and unacknowledged `PING` and `SETTINGS` frames are all counted towards the current limit. - * @default 10 - */ - maxSessionMemory?: number | undefined; - /** - * Sets the maximum number of header entries. - * This is similar to `server.maxHeadersCount` or `request.maxHeadersCount` in the `node:http` module. - * The minimum value is `1`. - * @default 128 - */ - maxHeaderListPairs?: number | undefined; - /** - * Sets the maximum number of outstanding, unacknowledged pings. - * @default 10 - */ - maxOutstandingPings?: number | undefined; - /** - * Sets the maximum allowed size for a serialized, compressed block of headers. - * Attempts to send headers that exceed this limit will result in - * a `'frameError'` event being emitted and the stream being closed and destroyed. - */ - maxSendHeaderBlockLength?: number | undefined; - /** - * Strategy used for determining the amount of padding to use for `HEADERS` and `DATA` frames. - * @default http2.constants.PADDING_STRATEGY_NONE - */ - paddingStrategy?: number | undefined; - /** - * Sets the maximum number of concurrent streams for the remote peer as if a `SETTINGS` frame had been received. - * Will be overridden if the remote peer sets its own value for `maxConcurrentStreams`. - * @default 100 - */ - peerMaxConcurrentStreams?: number | undefined; - /** - * The initial settings to send to the remote peer upon connection. - */ - settings?: Settings | undefined; - /** - * The array of integer values determines the settings types, - * which are included in the `CustomSettings`-property of the received remoteSettings. - * Please see the `CustomSettings`-property of the `Http2Settings` object for more information, on the allowed setting types. - */ - remoteCustomSettings?: number[] | undefined; - /** - * Specifies a timeout in milliseconds that - * a server should wait when an [`'unknownProtocol'`][] is emitted. If the - * socket has not been destroyed by that time the server will destroy it. - * @default 100000 - */ - unknownProtocolTimeout?: number | undefined; - /** - * If `true`, it turns on strict leading - * and trailing whitespace validation for HTTP/2 header field names and values - * as per [RFC-9113](https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.1). - * @since v24.2.0 - * @default true - */ - strictFieldWhitespaceValidation?: boolean | undefined; - } - interface ClientSessionOptions extends SessionOptions { - /** - * Sets the maximum number of reserved push streams the client will accept at any given time. - * Once the current number of currently reserved push streams exceeds reaches this limit, - * new push streams sent by the server will be automatically rejected. - * The minimum allowed value is 0. The maximum allowed value is 232-1. - * A negative value sets this option to the maximum allowed value. - * @default 200 - */ - maxReservedRemoteStreams?: number | undefined; - /** - * An optional callback that receives the `URL` instance passed to `connect` and the `options` object, - * and returns any `Duplex` stream that is to be used as the connection for this session. - */ - createConnection?: ((authority: url.URL, option: SessionOptions) => stream.Duplex) | undefined; - /** - * The protocol to connect with, if not set in the `authority`. - * Value may be either `'http:'` or `'https:'`. - * @default 'https:' - */ - protocol?: "http:" | "https:" | undefined; - } - interface ServerSessionOptions< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends SessionOptions { - streamResetBurst?: number | undefined; - streamResetRate?: number | undefined; - Http1IncomingMessage?: Http1Request | undefined; - Http1ServerResponse?: Http1Response | undefined; - Http2ServerRequest?: Http2Request | undefined; - Http2ServerResponse?: Http2Response | undefined; - } - interface SecureClientSessionOptions extends ClientSessionOptions, tls.ConnectionOptions {} - interface SecureServerSessionOptions< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends ServerSessionOptions, tls.TlsOptions {} - interface ServerOptions< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends ServerSessionOptions {} - interface SecureServerOptions< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends SecureServerSessionOptions { - allowHTTP1?: boolean | undefined; - origins?: string[] | undefined; - } - interface Http2ServerCommon { - setTimeout(msec?: number, callback?: () => void): this; - /** - * Throws ERR_HTTP2_INVALID_SETTING_VALUE for invalid settings values. - * Throws ERR_INVALID_ARG_TYPE for invalid settings argument. - */ - updateSettings(settings: Settings): void; - } - interface Http2ServerEventMap< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends net.ServerEventMap, Pick { - "checkContinue": [request: InstanceType, response: InstanceType]; - "request": [request: InstanceType, response: InstanceType]; - "session": [session: ServerHttp2Session]; - "sessionError": [err: Error]; - } - interface Http2Server< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends net.Server, Http2ServerCommon { - // #region InternalEventEmitter - addListener( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit( - eventName: E, - ...args: Http2ServerEventMap[E] - ): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: Http2ServerEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: Http2ServerEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: ( - ...args: Http2ServerEventMap[E] - ) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface Http2SecureServerEventMap< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends tls.ServerEventMap, Http2ServerEventMap { - "unknownProtocol": [socket: tls.TLSSocket]; - } - interface Http2SecureServer< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - > extends tls.Server, Http2ServerCommon { - // #region InternalEventEmitter - addListener( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit( - eventName: E, - ...args: Http2SecureServerEventMap[E] - ): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): (( - ...args: Http2SecureServerEventMap[E] - ) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): (( - ...args: Http2SecureServerEventMap[E] - ) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: ( - ...args: Http2SecureServerEventMap[E] - ) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface Http2ServerRequestEventMap extends stream.ReadableEventMap { - "aborted": [hadError: boolean, code: number]; - "data": [chunk: string | NonSharedBuffer]; - } - /** - * A `Http2ServerRequest` object is created by {@link Server} or {@link SecureServer} and passed as the first argument to the `'request'` event. It may be used to access a request status, - * headers, and - * data. - * @since v8.4.0 - */ - class Http2ServerRequest extends stream.Readable { - constructor( - stream: ServerHttp2Stream, - headers: IncomingHttpHeaders, - options: stream.ReadableOptions, - rawHeaders: readonly string[], - ); - /** - * The `request.aborted` property will be `true` if the request has - * been aborted. - * @since v10.1.0 - */ - readonly aborted: boolean; - /** - * The request authority pseudo header field. Because HTTP/2 allows requests - * to set either `:authority` or `host`, this value is derived from `req.headers[':authority']` if present. Otherwise, it is derived from `req.headers['host']`. - * @since v8.4.0 - */ - readonly authority: string; - /** - * See `request.socket`. - * @since v8.4.0 - * @deprecated Since v13.0.0 - Use `socket`. - */ - readonly connection: net.Socket | tls.TLSSocket; - /** - * The `request.complete` property will be `true` if the request has - * been completed, aborted, or destroyed. - * @since v12.10.0 - */ - readonly complete: boolean; - /** - * The request/response headers object. - * - * Key-value pairs of header names and values. Header names are lower-cased. - * - * ```js - * // Prints something like: - * // - * // { 'user-agent': 'curl/7.22.0', - * // host: '127.0.0.1:8000', - * // accept: '*' } - * console.log(request.headers); - * ``` - * - * See `HTTP/2 Headers Object`. - * - * In HTTP/2, the request path, host name, protocol, and method are represented as - * special headers prefixed with the `:` character (e.g. `':path'`). These special - * headers will be included in the `request.headers` object. Care must be taken not - * to inadvertently modify these special headers or errors may occur. For instance, - * removing all headers from the request will cause errors to occur: - * - * ```js - * removeAllHeaders(request.headers); - * assert(request.url); // Fails because the :path header has been removed - * ``` - * @since v8.4.0 - */ - readonly headers: IncomingHttpHeaders; - /** - * In case of server request, the HTTP version sent by the client. In the case of - * client response, the HTTP version of the connected-to server. Returns `'2.0'`. - * - * Also `message.httpVersionMajor` is the first integer and `message.httpVersionMinor` is the second. - * @since v8.4.0 - */ - readonly httpVersion: string; - readonly httpVersionMinor: number; - readonly httpVersionMajor: number; - /** - * The request method as a string. Read-only. Examples: `'GET'`, `'DELETE'`. - * @since v8.4.0 - */ - readonly method: string; - /** - * The raw request/response headers list exactly as they were received. - * - * The keys and values are in the same list. It is _not_ a - * list of tuples. So, the even-numbered offsets are key values, and the - * odd-numbered offsets are the associated values. - * - * Header names are not lowercased, and duplicates are not merged. - * - * ```js - * // Prints something like: - * // - * // [ 'user-agent', - * // 'this is invalid because there can be only one', - * // 'User-Agent', - * // 'curl/7.22.0', - * // 'Host', - * // '127.0.0.1:8000', - * // 'ACCEPT', - * // '*' ] - * console.log(request.rawHeaders); - * ``` - * @since v8.4.0 - */ - readonly rawHeaders: string[]; - /** - * The raw request/response trailer keys and values exactly as they were - * received. Only populated at the `'end'` event. - * @since v8.4.0 - */ - readonly rawTrailers: string[]; - /** - * The request scheme pseudo header field indicating the scheme - * portion of the target URL. - * @since v8.4.0 - */ - readonly scheme: string; - /** - * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but - * applies getters, setters, and methods based on HTTP/2 logic. - * - * `destroyed`, `readable`, and `writable` properties will be retrieved from and - * set on `request.stream`. - * - * `destroy`, `emit`, `end`, `on` and `once` methods will be called on `request.stream`. - * - * `setTimeout` method will be called on `request.stream.session`. - * - * `pause`, `read`, `resume`, and `write` will throw an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for - * more information. - * - * All other interactions will be routed directly to the socket. With TLS support, - * use `request.socket.getPeerCertificate()` to obtain the client's - * authentication details. - * @since v8.4.0 - */ - readonly socket: net.Socket | tls.TLSSocket; - /** - * The `Http2Stream` object backing the request. - * @since v8.4.0 - */ - readonly stream: ServerHttp2Stream; - /** - * The request/response trailers object. Only populated at the `'end'` event. - * @since v8.4.0 - */ - readonly trailers: IncomingHttpHeaders; - /** - * Request URL string. This contains only the URL that is present in the actual - * HTTP request. If the request is: - * - * ```http - * GET /status?name=ryan HTTP/1.1 - * Accept: text/plain - * ``` - * - * Then `request.url` will be: - * - * ```js - * '/status?name=ryan' - * ``` - * - * To parse the url into its parts, `new URL()` can be used: - * - * ```console - * $ node - * > new URL('/status?name=ryan', 'http://example.com') - * URL { - * href: 'http://example.com/status?name=ryan', - * origin: 'http://example.com', - * protocol: 'http:', - * username: '', - * password: '', - * host: 'example.com', - * hostname: 'example.com', - * port: '', - * pathname: '/status', - * search: '?name=ryan', - * searchParams: URLSearchParams { 'name' => 'ryan' }, - * hash: '' - * } - * ``` - * @since v8.4.0 - */ - url: string; - /** - * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is - * provided, then it is added as a listener on the `'timeout'` event on - * the response object. - * - * If no `'timeout'` listener is added to the request, the response, or - * the server, then `Http2Stream`s are destroyed when they time out. If a - * handler is assigned to the request, the response, or the server's `'timeout'`events, timed out sockets must be handled explicitly. - * @since v8.4.0 - */ - setTimeout(msecs: number, callback?: () => void): void; - read(size?: number): Buffer | string | null; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: Http2ServerRequestEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: Http2ServerRequestEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: Http2ServerRequestEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: Http2ServerRequestEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: Http2ServerRequestEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - /** - * This object is created internally by an HTTP server, not by the user. It is - * passed as the second parameter to the `'request'` event. - * @since v8.4.0 - */ - class Http2ServerResponse extends stream.Writable { - constructor(stream: ServerHttp2Stream); - /** - * See `response.socket`. - * @since v8.4.0 - * @deprecated Since v13.0.0 - Use `socket`. - */ - readonly connection: net.Socket | tls.TLSSocket; - /** - * Append a single header value to the header object. - * - * If the value is an array, this is equivalent to calling this method multiple times. - * - * If there were no previous values for the header, this is equivalent to calling {@link setHeader}. - * - * Attempting to set a header field name or value that contains invalid characters will result in a - * [TypeError](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-typeerror) being thrown. - * - * ```js - * // Returns headers including "set-cookie: a" and "set-cookie: b" - * const server = http2.createServer((req, res) => { - * res.setHeader('set-cookie', 'a'); - * res.appendHeader('set-cookie', 'b'); - * res.writeHead(200); - * res.end('ok'); - * }); - * ``` - * @since v20.12.0 - */ - appendHeader(name: string, value: string | string[]): void; - /** - * Boolean value that indicates whether the response has completed. Starts - * as `false`. After `response.end()` executes, the value will be `true`. - * @since v8.4.0 - * @deprecated Since v13.4.0,v12.16.0 - Use `writableEnded`. - */ - readonly finished: boolean; - /** - * True if headers were sent, false otherwise (read-only). - * @since v8.4.0 - */ - readonly headersSent: boolean; - /** - * A reference to the original HTTP2 `request` object. - * @since v15.7.0 - */ - readonly req: Request; - /** - * Returns a `Proxy` object that acts as a `net.Socket` (or `tls.TLSSocket`) but - * applies getters, setters, and methods based on HTTP/2 logic. - * - * `destroyed`, `readable`, and `writable` properties will be retrieved from and - * set on `response.stream`. - * - * `destroy`, `emit`, `end`, `on` and `once` methods will be called on `response.stream`. - * - * `setTimeout` method will be called on `response.stream.session`. - * - * `pause`, `read`, `resume`, and `write` will throw an error with code `ERR_HTTP2_NO_SOCKET_MANIPULATION`. See `Http2Session and Sockets` for - * more information. - * - * All other interactions will be routed directly to the socket. - * - * ```js - * import http2 from 'node:http2'; - * const server = http2.createServer((req, res) => { - * const ip = req.socket.remoteAddress; - * const port = req.socket.remotePort; - * res.end(`Your IP address is ${ip} and your source port is ${port}.`); - * }).listen(3000); - * ``` - * @since v8.4.0 - */ - readonly socket: net.Socket | tls.TLSSocket; - /** - * The `Http2Stream` object backing the response. - * @since v8.4.0 - */ - readonly stream: ServerHttp2Stream; - /** - * When true, the Date header will be automatically generated and sent in - * the response if it is not already present in the headers. Defaults to true. - * - * This should only be disabled for testing; HTTP requires the Date header - * in responses. - * @since v8.4.0 - */ - sendDate: boolean; - /** - * When using implicit headers (not calling `response.writeHead()` explicitly), - * this property controls the status code that will be sent to the client when - * the headers get flushed. - * - * ```js - * response.statusCode = 404; - * ``` - * - * After response header was sent to the client, this property indicates the - * status code which was sent out. - * @since v8.4.0 - */ - statusCode: number; - /** - * Status message is not supported by HTTP/2 (RFC 7540 8.1.2.4). It returns - * an empty string. - * @since v8.4.0 - */ - statusMessage: ""; - /** - * This method adds HTTP trailing headers (a header but at the end of the - * message) to the response. - * - * Attempting to set a header field name or value that contains invalid characters - * will result in a `TypeError` being thrown. - * @since v8.4.0 - */ - addTrailers(trailers: OutgoingHttpHeaders): void; - /** - * This method signals to the server that all of the response headers and body - * have been sent; that server should consider this message complete. - * The method, `response.end()`, MUST be called on each response. - * - * If `data` is specified, it is equivalent to calling `response.write(data, encoding)` followed by `response.end(callback)`. - * - * If `callback` is specified, it will be called when the response stream - * is finished. - * @since v8.4.0 - */ - end(callback?: () => void): this; - end(data: string | Uint8Array, callback?: () => void): this; - end(data: string | Uint8Array, encoding: BufferEncoding, callback?: () => void): this; - /** - * Reads out a header that has already been queued but not sent to the client. - * The name is case-insensitive. - * - * ```js - * const contentType = response.getHeader('content-type'); - * ``` - * @since v8.4.0 - */ - getHeader(name: string): string; - /** - * Returns an array containing the unique names of the current outgoing headers. - * All header names are lowercase. - * - * ```js - * response.setHeader('Foo', 'bar'); - * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); - * - * const headerNames = response.getHeaderNames(); - * // headerNames === ['foo', 'set-cookie'] - * ``` - * @since v8.4.0 - */ - getHeaderNames(): string[]; - /** - * Returns a shallow copy of the current outgoing headers. Since a shallow copy - * is used, array values may be mutated without additional calls to various - * header-related http module methods. The keys of the returned object are the - * header names and the values are the respective header values. All header names - * are lowercase. - * - * The object returned by the `response.getHeaders()` method _does not_ prototypically inherit from the JavaScript `Object`. This means that typical `Object` methods such as `obj.toString()`, - * `obj.hasOwnProperty()`, and others - * are not defined and _will not work_. - * - * ```js - * response.setHeader('Foo', 'bar'); - * response.setHeader('Set-Cookie', ['foo=bar', 'bar=baz']); - * - * const headers = response.getHeaders(); - * // headers === { foo: 'bar', 'set-cookie': ['foo=bar', 'bar=baz'] } - * ``` - * @since v8.4.0 - */ - getHeaders(): OutgoingHttpHeaders; - /** - * Returns `true` if the header identified by `name` is currently set in the - * outgoing headers. The header name matching is case-insensitive. - * - * ```js - * const hasContentType = response.hasHeader('content-type'); - * ``` - * @since v8.4.0 - */ - hasHeader(name: string): boolean; - /** - * Removes a header that has been queued for implicit sending. - * - * ```js - * response.removeHeader('Content-Encoding'); - * ``` - * @since v8.4.0 - */ - removeHeader(name: string): void; - /** - * Sets a single header value for implicit headers. If this header already exists - * in the to-be-sent headers, its value will be replaced. Use an array of strings - * here to send multiple headers with the same name. - * - * ```js - * response.setHeader('Content-Type', 'text/html; charset=utf-8'); - * ``` - * - * or - * - * ```js - * response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']); - * ``` - * - * Attempting to set a header field name or value that contains invalid characters - * will result in a `TypeError` being thrown. - * - * When headers have been set with `response.setHeader()`, they will be merged - * with any headers passed to `response.writeHead()`, with the headers passed - * to `response.writeHead()` given precedence. - * - * ```js - * // Returns content-type = text/plain - * const server = http2.createServer((req, res) => { - * res.setHeader('Content-Type', 'text/html; charset=utf-8'); - * res.setHeader('X-Foo', 'bar'); - * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); - * res.end('ok'); - * }); - * ``` - * @since v8.4.0 - */ - setHeader(name: string, value: number | string | readonly string[]): void; - /** - * Sets the `Http2Stream`'s timeout value to `msecs`. If a callback is - * provided, then it is added as a listener on the `'timeout'` event on - * the response object. - * - * If no `'timeout'` listener is added to the request, the response, or - * the server, then `Http2Stream` s are destroyed when they time out. If a - * handler is assigned to the request, the response, or the server's `'timeout'` events, timed out sockets must be handled explicitly. - * @since v8.4.0 - */ - setTimeout(msecs: number, callback?: () => void): void; - /** - * If this method is called and `response.writeHead()` has not been called, - * it will switch to implicit header mode and flush the implicit headers. - * - * This sends a chunk of the response body. This method may - * be called multiple times to provide successive parts of the body. - * - * In the `node:http` module, the response body is omitted when the - * request is a HEAD request. Similarly, the `204` and `304` responses _must not_ include a message body. - * - * `chunk` can be a string or a buffer. If `chunk` is a string, - * the second parameter specifies how to encode it into a byte stream. - * By default the `encoding` is `'utf8'`. `callback` will be called when this chunk - * of data is flushed. - * - * This is the raw HTTP body and has nothing to do with higher-level multi-part - * body encodings that may be used. - * - * The first time `response.write()` is called, it will send the buffered - * header information and the first chunk of the body to the client. The second - * time `response.write()` is called, Node.js assumes data will be streamed, - * and sends the new data separately. That is, the response is buffered up to the - * first chunk of the body. - * - * Returns `true` if the entire data was flushed successfully to the kernel - * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is free again. - * @since v8.4.0 - */ - write(chunk: string | Uint8Array, callback?: (err: Error) => void): boolean; - write(chunk: string | Uint8Array, encoding: BufferEncoding, callback?: (err: Error) => void): boolean; - /** - * Sends a status `100 Continue` to the client, indicating that the request body - * should be sent. See the `'checkContinue'` event on `Http2Server` and `Http2SecureServer`. - * @since v8.4.0 - */ - writeContinue(): void; - /** - * Sends a status `103 Early Hints` to the client with a Link header, - * indicating that the user agent can preload/preconnect the linked resources. - * The `hints` is an object containing the values of headers to be sent with - * early hints message. - * - * **Example** - * - * ```js - * const earlyHintsLink = '; rel=preload; as=style'; - * response.writeEarlyHints({ - * 'link': earlyHintsLink, - * }); - * - * const earlyHintsLinks = [ - * '; rel=preload; as=style', - * '; rel=preload; as=script', - * ]; - * response.writeEarlyHints({ - * 'link': earlyHintsLinks, - * }); - * ``` - * @since v18.11.0 - */ - writeEarlyHints(hints: Record): void; - /** - * Sends a response header to the request. The status code is a 3-digit HTTP - * status code, like `404`. The last argument, `headers`, are the response headers. - * - * Returns a reference to the `Http2ServerResponse`, so that calls can be chained. - * - * For compatibility with `HTTP/1`, a human-readable `statusMessage` may be - * passed as the second argument. However, because the `statusMessage` has no - * meaning within HTTP/2, the argument will have no effect and a process warning - * will be emitted. - * - * ```js - * const body = 'hello world'; - * response.writeHead(200, { - * 'Content-Length': Buffer.byteLength(body), - * 'Content-Type': 'text/plain; charset=utf-8', - * }); - * ``` - * - * `Content-Length` is given in bytes not characters. The`Buffer.byteLength()` API may be used to determine the number of bytes in a - * given encoding. On outbound messages, Node.js does not check if Content-Length - * and the length of the body being transmitted are equal or not. However, when - * receiving messages, Node.js will automatically reject messages when the `Content-Length` does not match the actual payload size. - * - * This method may be called at most one time on a message before `response.end()` is called. - * - * If `response.write()` or `response.end()` are called before calling - * this, the implicit/mutable headers will be calculated and call this function. - * - * When headers have been set with `response.setHeader()`, they will be merged - * with any headers passed to `response.writeHead()`, with the headers passed - * to `response.writeHead()` given precedence. - * - * ```js - * // Returns content-type = text/plain - * const server = http2.createServer((req, res) => { - * res.setHeader('Content-Type', 'text/html; charset=utf-8'); - * res.setHeader('X-Foo', 'bar'); - * res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); - * res.end('ok'); - * }); - * ``` - * - * Attempting to set a header field name or value that contains invalid characters - * will result in a `TypeError` being thrown. - * @since v8.4.0 - */ - writeHead(statusCode: number, headers?: OutgoingHttpHeaders | readonly string[]): this; - writeHead(statusCode: number, statusMessage: string, headers?: OutgoingHttpHeaders | readonly string[]): this; - /** - * Call `http2stream.pushStream()` with the given headers, and wrap the - * given `Http2Stream` on a newly created `Http2ServerResponse` as the callback - * parameter if successful. When `Http2ServerRequest` is closed, the callback is - * called with an error `ERR_HTTP2_INVALID_STREAM`. - * @since v8.4.0 - * @param headers An object describing the headers - * @param callback Called once `http2stream.pushStream()` is finished, or either when the attempt to create the pushed `Http2Stream` has failed or has been rejected, or the state of - * `Http2ServerRequest` is closed prior to calling the `http2stream.pushStream()` method - */ - createPushResponse( - headers: OutgoingHttpHeaders, - callback: (err: Error | null, res: Http2ServerResponse) => void, - ): void; - } - namespace constants { - const NGHTTP2_SESSION_SERVER: number; - const NGHTTP2_SESSION_CLIENT: number; - const NGHTTP2_STREAM_STATE_IDLE: number; - const NGHTTP2_STREAM_STATE_OPEN: number; - const NGHTTP2_STREAM_STATE_RESERVED_LOCAL: number; - const NGHTTP2_STREAM_STATE_RESERVED_REMOTE: number; - const NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL: number; - const NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE: number; - const NGHTTP2_STREAM_STATE_CLOSED: number; - const NGHTTP2_NO_ERROR: number; - const NGHTTP2_PROTOCOL_ERROR: number; - const NGHTTP2_INTERNAL_ERROR: number; - const NGHTTP2_FLOW_CONTROL_ERROR: number; - const NGHTTP2_SETTINGS_TIMEOUT: number; - const NGHTTP2_STREAM_CLOSED: number; - const NGHTTP2_FRAME_SIZE_ERROR: number; - const NGHTTP2_REFUSED_STREAM: number; - const NGHTTP2_CANCEL: number; - const NGHTTP2_COMPRESSION_ERROR: number; - const NGHTTP2_CONNECT_ERROR: number; - const NGHTTP2_ENHANCE_YOUR_CALM: number; - const NGHTTP2_INADEQUATE_SECURITY: number; - const NGHTTP2_HTTP_1_1_REQUIRED: number; - const NGHTTP2_ERR_FRAME_SIZE_ERROR: number; - const NGHTTP2_FLAG_NONE: number; - const NGHTTP2_FLAG_END_STREAM: number; - const NGHTTP2_FLAG_END_HEADERS: number; - const NGHTTP2_FLAG_ACK: number; - const NGHTTP2_FLAG_PADDED: number; - const NGHTTP2_FLAG_PRIORITY: number; - const DEFAULT_SETTINGS_HEADER_TABLE_SIZE: number; - const DEFAULT_SETTINGS_ENABLE_PUSH: number; - const DEFAULT_SETTINGS_INITIAL_WINDOW_SIZE: number; - const DEFAULT_SETTINGS_MAX_FRAME_SIZE: number; - const MAX_MAX_FRAME_SIZE: number; - const MIN_MAX_FRAME_SIZE: number; - const MAX_INITIAL_WINDOW_SIZE: number; - const NGHTTP2_DEFAULT_WEIGHT: number; - const NGHTTP2_SETTINGS_HEADER_TABLE_SIZE: number; - const NGHTTP2_SETTINGS_ENABLE_PUSH: number; - const NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS: number; - const NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE: number; - const NGHTTP2_SETTINGS_MAX_FRAME_SIZE: number; - const NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: number; - const PADDING_STRATEGY_NONE: number; - const PADDING_STRATEGY_MAX: number; - const PADDING_STRATEGY_CALLBACK: number; - const HTTP2_HEADER_STATUS: string; - const HTTP2_HEADER_METHOD: string; - const HTTP2_HEADER_AUTHORITY: string; - const HTTP2_HEADER_SCHEME: string; - const HTTP2_HEADER_PATH: string; - const HTTP2_HEADER_ACCEPT_CHARSET: string; - const HTTP2_HEADER_ACCEPT_ENCODING: string; - const HTTP2_HEADER_ACCEPT_LANGUAGE: string; - const HTTP2_HEADER_ACCEPT_RANGES: string; - const HTTP2_HEADER_ACCEPT: string; - const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_CREDENTIALS: string; - const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_HEADERS: string; - const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_METHODS: string; - const HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN: string; - const HTTP2_HEADER_ACCESS_CONTROL_EXPOSE_HEADERS: string; - const HTTP2_HEADER_ACCESS_CONTROL_REQUEST_HEADERS: string; - const HTTP2_HEADER_ACCESS_CONTROL_REQUEST_METHOD: string; - const HTTP2_HEADER_AGE: string; - const HTTP2_HEADER_ALLOW: string; - const HTTP2_HEADER_AUTHORIZATION: string; - const HTTP2_HEADER_CACHE_CONTROL: string; - const HTTP2_HEADER_CONNECTION: string; - const HTTP2_HEADER_CONTENT_DISPOSITION: string; - const HTTP2_HEADER_CONTENT_ENCODING: string; - const HTTP2_HEADER_CONTENT_LANGUAGE: string; - const HTTP2_HEADER_CONTENT_LENGTH: string; - const HTTP2_HEADER_CONTENT_LOCATION: string; - const HTTP2_HEADER_CONTENT_MD5: string; - const HTTP2_HEADER_CONTENT_RANGE: string; - const HTTP2_HEADER_CONTENT_TYPE: string; - const HTTP2_HEADER_COOKIE: string; - const HTTP2_HEADER_DATE: string; - const HTTP2_HEADER_ETAG: string; - const HTTP2_HEADER_EXPECT: string; - const HTTP2_HEADER_EXPIRES: string; - const HTTP2_HEADER_FROM: string; - const HTTP2_HEADER_HOST: string; - const HTTP2_HEADER_IF_MATCH: string; - const HTTP2_HEADER_IF_MODIFIED_SINCE: string; - const HTTP2_HEADER_IF_NONE_MATCH: string; - const HTTP2_HEADER_IF_RANGE: string; - const HTTP2_HEADER_IF_UNMODIFIED_SINCE: string; - const HTTP2_HEADER_LAST_MODIFIED: string; - const HTTP2_HEADER_LINK: string; - const HTTP2_HEADER_LOCATION: string; - const HTTP2_HEADER_MAX_FORWARDS: string; - const HTTP2_HEADER_PREFER: string; - const HTTP2_HEADER_PROXY_AUTHENTICATE: string; - const HTTP2_HEADER_PROXY_AUTHORIZATION: string; - const HTTP2_HEADER_RANGE: string; - const HTTP2_HEADER_REFERER: string; - const HTTP2_HEADER_REFRESH: string; - const HTTP2_HEADER_RETRY_AFTER: string; - const HTTP2_HEADER_SERVER: string; - const HTTP2_HEADER_SET_COOKIE: string; - const HTTP2_HEADER_STRICT_TRANSPORT_SECURITY: string; - const HTTP2_HEADER_TRANSFER_ENCODING: string; - const HTTP2_HEADER_TE: string; - const HTTP2_HEADER_UPGRADE: string; - const HTTP2_HEADER_USER_AGENT: string; - const HTTP2_HEADER_VARY: string; - const HTTP2_HEADER_VIA: string; - const HTTP2_HEADER_WWW_AUTHENTICATE: string; - const HTTP2_HEADER_HTTP2_SETTINGS: string; - const HTTP2_HEADER_KEEP_ALIVE: string; - const HTTP2_HEADER_PROXY_CONNECTION: string; - const HTTP2_METHOD_ACL: string; - const HTTP2_METHOD_BASELINE_CONTROL: string; - const HTTP2_METHOD_BIND: string; - const HTTP2_METHOD_CHECKIN: string; - const HTTP2_METHOD_CHECKOUT: string; - const HTTP2_METHOD_CONNECT: string; - const HTTP2_METHOD_COPY: string; - const HTTP2_METHOD_DELETE: string; - const HTTP2_METHOD_GET: string; - const HTTP2_METHOD_HEAD: string; - const HTTP2_METHOD_LABEL: string; - const HTTP2_METHOD_LINK: string; - const HTTP2_METHOD_LOCK: string; - const HTTP2_METHOD_MERGE: string; - const HTTP2_METHOD_MKACTIVITY: string; - const HTTP2_METHOD_MKCALENDAR: string; - const HTTP2_METHOD_MKCOL: string; - const HTTP2_METHOD_MKREDIRECTREF: string; - const HTTP2_METHOD_MKWORKSPACE: string; - const HTTP2_METHOD_MOVE: string; - const HTTP2_METHOD_OPTIONS: string; - const HTTP2_METHOD_ORDERPATCH: string; - const HTTP2_METHOD_PATCH: string; - const HTTP2_METHOD_POST: string; - const HTTP2_METHOD_PRI: string; - const HTTP2_METHOD_PROPFIND: string; - const HTTP2_METHOD_PROPPATCH: string; - const HTTP2_METHOD_PUT: string; - const HTTP2_METHOD_REBIND: string; - const HTTP2_METHOD_REPORT: string; - const HTTP2_METHOD_SEARCH: string; - const HTTP2_METHOD_TRACE: string; - const HTTP2_METHOD_UNBIND: string; - const HTTP2_METHOD_UNCHECKOUT: string; - const HTTP2_METHOD_UNLINK: string; - const HTTP2_METHOD_UNLOCK: string; - const HTTP2_METHOD_UPDATE: string; - const HTTP2_METHOD_UPDATEREDIRECTREF: string; - const HTTP2_METHOD_VERSION_CONTROL: string; - const HTTP_STATUS_CONTINUE: number; - const HTTP_STATUS_SWITCHING_PROTOCOLS: number; - const HTTP_STATUS_PROCESSING: number; - const HTTP_STATUS_OK: number; - const HTTP_STATUS_CREATED: number; - const HTTP_STATUS_ACCEPTED: number; - const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION: number; - const HTTP_STATUS_NO_CONTENT: number; - const HTTP_STATUS_RESET_CONTENT: number; - const HTTP_STATUS_PARTIAL_CONTENT: number; - const HTTP_STATUS_MULTI_STATUS: number; - const HTTP_STATUS_ALREADY_REPORTED: number; - const HTTP_STATUS_IM_USED: number; - const HTTP_STATUS_MULTIPLE_CHOICES: number; - const HTTP_STATUS_MOVED_PERMANENTLY: number; - const HTTP_STATUS_FOUND: number; - const HTTP_STATUS_SEE_OTHER: number; - const HTTP_STATUS_NOT_MODIFIED: number; - const HTTP_STATUS_USE_PROXY: number; - const HTTP_STATUS_TEMPORARY_REDIRECT: number; - const HTTP_STATUS_PERMANENT_REDIRECT: number; - const HTTP_STATUS_BAD_REQUEST: number; - const HTTP_STATUS_UNAUTHORIZED: number; - const HTTP_STATUS_PAYMENT_REQUIRED: number; - const HTTP_STATUS_FORBIDDEN: number; - const HTTP_STATUS_NOT_FOUND: number; - const HTTP_STATUS_METHOD_NOT_ALLOWED: number; - const HTTP_STATUS_NOT_ACCEPTABLE: number; - const HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED: number; - const HTTP_STATUS_REQUEST_TIMEOUT: number; - const HTTP_STATUS_CONFLICT: number; - const HTTP_STATUS_GONE: number; - const HTTP_STATUS_LENGTH_REQUIRED: number; - const HTTP_STATUS_PRECONDITION_FAILED: number; - const HTTP_STATUS_PAYLOAD_TOO_LARGE: number; - const HTTP_STATUS_URI_TOO_LONG: number; - const HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE: number; - const HTTP_STATUS_RANGE_NOT_SATISFIABLE: number; - const HTTP_STATUS_EXPECTATION_FAILED: number; - const HTTP_STATUS_TEAPOT: number; - const HTTP_STATUS_MISDIRECTED_REQUEST: number; - const HTTP_STATUS_UNPROCESSABLE_ENTITY: number; - const HTTP_STATUS_LOCKED: number; - const HTTP_STATUS_FAILED_DEPENDENCY: number; - const HTTP_STATUS_UNORDERED_COLLECTION: number; - const HTTP_STATUS_UPGRADE_REQUIRED: number; - const HTTP_STATUS_PRECONDITION_REQUIRED: number; - const HTTP_STATUS_TOO_MANY_REQUESTS: number; - const HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE: number; - const HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS: number; - const HTTP_STATUS_INTERNAL_SERVER_ERROR: number; - const HTTP_STATUS_NOT_IMPLEMENTED: number; - const HTTP_STATUS_BAD_GATEWAY: number; - const HTTP_STATUS_SERVICE_UNAVAILABLE: number; - const HTTP_STATUS_GATEWAY_TIMEOUT: number; - const HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED: number; - const HTTP_STATUS_VARIANT_ALSO_NEGOTIATES: number; - const HTTP_STATUS_INSUFFICIENT_STORAGE: number; - const HTTP_STATUS_LOOP_DETECTED: number; - const HTTP_STATUS_BANDWIDTH_LIMIT_EXCEEDED: number; - const HTTP_STATUS_NOT_EXTENDED: number; - const HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED: number; - } - /** - * This symbol can be set as a property on the HTTP/2 headers object with - * an array value in order to provide a list of headers considered sensitive. - */ - const sensitiveHeaders: symbol; - /** - * Returns an object containing the default settings for an `Http2Session` instance. This method returns a new object instance every time it is called - * so instances returned may be safely modified for use. - * @since v8.4.0 - */ - function getDefaultSettings(): Settings; - /** - * Returns a `Buffer` instance containing serialized representation of the given - * HTTP/2 settings as specified in the [HTTP/2](https://tools.ietf.org/html/rfc7540) specification. This is intended - * for use with the `HTTP2-Settings` header field. - * - * ```js - * import http2 from 'node:http2'; - * - * const packed = http2.getPackedSettings({ enablePush: false }); - * - * console.log(packed.toString('base64')); - * // Prints: AAIAAAAA - * ``` - * @since v8.4.0 - */ - function getPackedSettings(settings: Settings): NonSharedBuffer; - /** - * Returns a `HTTP/2 Settings Object` containing the deserialized settings from - * the given `Buffer` as generated by `http2.getPackedSettings()`. - * @since v8.4.0 - * @param buf The packed settings. - */ - function getUnpackedSettings(buf: Uint8Array): Settings; - /** - * Returns a `net.Server` instance that creates and manages `Http2Session` instances. - * - * Since there are no browsers known that support [unencrypted HTTP/2](https://http2.github.io/faq/#does-http2-require-encryption), the use of {@link createSecureServer} is necessary when - * communicating - * with browser clients. - * - * ```js - * import http2 from 'node:http2'; - * - * // Create an unencrypted HTTP/2 server. - * // Since there are no browsers known that support - * // unencrypted HTTP/2, the use of `http2.createSecureServer()` - * // is necessary when communicating with browser clients. - * const server = http2.createServer(); - * - * server.on('stream', (stream, headers) => { - * stream.respond({ - * 'content-type': 'text/html; charset=utf-8', - * ':status': 200, - * }); - * stream.end('

Hello World

'); - * }); - * - * server.listen(8000); - * ``` - * @since v8.4.0 - * @param onRequestHandler See `Compatibility API` - */ - function createServer( - onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, - ): Http2Server; - function createServer< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - >( - options: ServerOptions, - onRequestHandler?: (request: InstanceType, response: InstanceType) => void, - ): Http2Server; - /** - * Returns a `tls.Server` instance that creates and manages `Http2Session` instances. - * - * ```js - * import http2 from 'node:http2'; - * import fs from 'node:fs'; - * - * const options = { - * key: fs.readFileSync('server-key.pem'), - * cert: fs.readFileSync('server-cert.pem'), - * }; - * - * // Create a secure HTTP/2 server - * const server = http2.createSecureServer(options); - * - * server.on('stream', (stream, headers) => { - * stream.respond({ - * 'content-type': 'text/html; charset=utf-8', - * ':status': 200, - * }); - * stream.end('

Hello World

'); - * }); - * - * server.listen(8443); - * ``` - * @since v8.4.0 - * @param onRequestHandler See `Compatibility API` - */ - function createSecureServer( - onRequestHandler?: (request: Http2ServerRequest, response: Http2ServerResponse) => void, - ): Http2SecureServer; - function createSecureServer< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - >( - options: SecureServerOptions, - onRequestHandler?: (request: InstanceType, response: InstanceType) => void, - ): Http2SecureServer; - /** - * Returns a `ClientHttp2Session` instance. - * - * ```js - * import http2 from 'node:http2'; - * const client = http2.connect('https://localhost:1234'); - * - * // Use the client - * - * client.close(); - * ``` - * @since v8.4.0 - * @param authority The remote HTTP/2 server to connect to. This must be in the form of a minimal, valid URL with the `http://` or `https://` prefix, host name, and IP port (if a non-default port - * is used). Userinfo (user ID and password), path, querystring, and fragment details in the URL will be ignored. - * @param listener Will be registered as a one-time listener of the {@link 'connect'} event. - */ - function connect( - authority: string | url.URL, - listener: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, - ): ClientHttp2Session; - function connect( - authority: string | url.URL, - options?: ClientSessionOptions | SecureClientSessionOptions, - listener?: (session: ClientHttp2Session, socket: net.Socket | tls.TLSSocket) => void, - ): ClientHttp2Session; - /** - * Create an HTTP/2 server session from an existing socket. - * @param socket A Duplex Stream - * @param options Any `{@link createServer}` options can be provided. - * @since v20.12.0 - */ - function performServerHandshake< - Http1Request extends typeof IncomingMessage = typeof IncomingMessage, - Http1Response extends typeof ServerResponse> = typeof ServerResponse, - Http2Request extends typeof Http2ServerRequest = typeof Http2ServerRequest, - Http2Response extends typeof Http2ServerResponse> = typeof Http2ServerResponse, - >( - socket: stream.Duplex, - options?: ServerOptions, - ): ServerHttp2Session; -} -declare module "node:http2" { - export { OutgoingHttpHeaders } from "node:http"; -} -declare module "http2" { - export * from "node:http2"; -} diff --git a/skills/flight-finder/node_modules/@types/node/https.d.ts b/skills/flight-finder/node_modules/@types/node/https.d.ts deleted file mode 100644 index 6b02569..0000000 --- a/skills/flight-finder/node_modules/@types/node/https.d.ts +++ /dev/null @@ -1,405 +0,0 @@ -/** - * HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a - * separate module. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/https.js) - */ -declare module "node:https" { - import * as http from "node:http"; - import { Duplex } from "node:stream"; - import * as tls from "node:tls"; - import { URL } from "node:url"; - interface ServerOptions< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - > extends http.ServerOptions, tls.TlsOptions {} - interface RequestOptions extends http.RequestOptions, tls.SecureContextOptions { - checkServerIdentity?: - | ((hostname: string, cert: tls.DetailedPeerCertificate) => Error | undefined) - | undefined; - rejectUnauthorized?: boolean | undefined; // Defaults to true - servername?: string | undefined; // SNI TLS Extension - } - interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions { - maxCachedSessions?: number | undefined; - } - /** - * An `Agent` object for HTTPS similar to `http.Agent`. See {@link request} for more information. - * - * Like `http.Agent`, the `createConnection(options[, callback])` method can be overridden - * to customize how TLS connections are established. - * - * > See `agent.createConnection()` for details on overriding this method, - * > including asynchronous socket creation with a callback. - * @since v0.4.5 - */ - class Agent extends http.Agent { - constructor(options?: AgentOptions); - options: AgentOptions; - createConnection( - options: RequestOptions, - callback?: (err: Error | null, stream: Duplex) => void, - ): Duplex | null | undefined; - getName(options?: RequestOptions): string; - } - interface ServerEventMap< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - > extends http.ServerEventMap, tls.ServerEventMap {} - /** - * See `http.Server` for more information. - * @since v0.3.4 - */ - class Server< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - > extends tls.Server { - constructor(requestListener?: http.RequestListener); - constructor( - options: ServerOptions, - requestListener?: http.RequestListener, - ); - /** - * Closes all connections connected to this server. - * @since v18.2.0 - */ - closeAllConnections(): void; - /** - * Closes all connections connected to this server which are not sending a request or waiting for a response. - * @since v18.2.0 - */ - closeIdleConnections(): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ServerEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ServerEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners( - eventName: E, - ): ((...args: ServerEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: ServerEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface Server< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - > extends http.Server {} - /** - * ```js - * // curl -k https://localhost:8000/ - * import https from 'node:https'; - * import fs from 'node:fs'; - * - * const options = { - * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), - * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), - * }; - * - * https.createServer(options, (req, res) => { - * res.writeHead(200); - * res.end('hello world\n'); - * }).listen(8000); - * ``` - * - * Or - * - * ```js - * import https from 'node:https'; - * import fs from 'node:fs'; - * - * const options = { - * pfx: fs.readFileSync('test/fixtures/test_cert.pfx'), - * passphrase: 'sample', - * }; - * - * https.createServer(options, (req, res) => { - * res.writeHead(200); - * res.end('hello world\n'); - * }).listen(8000); - * ``` - * @since v0.3.4 - * @param options Accepts `options` from `createServer`, `createSecureContext` and `createServer`. - * @param requestListener A listener to be added to the `'request'` event. - */ - function createServer< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - >(requestListener?: http.RequestListener): Server; - function createServer< - Request extends typeof http.IncomingMessage = typeof http.IncomingMessage, - Response extends typeof http.ServerResponse> = typeof http.ServerResponse, - >( - options: ServerOptions, - requestListener?: http.RequestListener, - ): Server; - /** - * Makes a request to a secure web server. - * - * The following additional `options` from `tls.connect()` are also accepted: `ca`, `cert`, `ciphers`, `clientCertEngine`, `crl`, `dhparam`, `ecdhCurve`, `honorCipherOrder`, `key`, `passphrase`, - * `pfx`, `rejectUnauthorized`, `secureOptions`, `secureProtocol`, `servername`, `sessionIdContext`, `highWaterMark`. - * - * `options` can be an object, a string, or a `URL` object. If `options` is a - * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. - * - * `https.request()` returns an instance of the `http.ClientRequest` class. The `ClientRequest` instance is a writable stream. If one needs to - * upload a file with a POST request, then write to the `ClientRequest` object. - * - * ```js - * import https from 'node:https'; - * - * const options = { - * hostname: 'encrypted.google.com', - * port: 443, - * path: '/', - * method: 'GET', - * }; - * - * const req = https.request(options, (res) => { - * console.log('statusCode:', res.statusCode); - * console.log('headers:', res.headers); - * - * res.on('data', (d) => { - * process.stdout.write(d); - * }); - * }); - * - * req.on('error', (e) => { - * console.error(e); - * }); - * req.end(); - * ``` - * - * Example using options from `tls.connect()`: - * - * ```js - * const options = { - * hostname: 'encrypted.google.com', - * port: 443, - * path: '/', - * method: 'GET', - * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), - * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), - * }; - * options.agent = new https.Agent(options); - * - * const req = https.request(options, (res) => { - * // ... - * }); - * ``` - * - * Alternatively, opt out of connection pooling by not using an `Agent`. - * - * ```js - * const options = { - * hostname: 'encrypted.google.com', - * port: 443, - * path: '/', - * method: 'GET', - * key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), - * cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'), - * agent: false, - * }; - * - * const req = https.request(options, (res) => { - * // ... - * }); - * ``` - * - * Example using a `URL` as `options`: - * - * ```js - * const options = new URL('https://abc:xyz@example.com'); - * - * const req = https.request(options, (res) => { - * // ... - * }); - * ``` - * - * Example pinning on certificate fingerprint, or the public key (similar to`pin-sha256`): - * - * ```js - * import tls from 'node:tls'; - * import https from 'node:https'; - * import crypto from 'node:crypto'; - * - * function sha256(s) { - * return crypto.createHash('sha256').update(s).digest('base64'); - * } - * const options = { - * hostname: 'github.com', - * port: 443, - * path: '/', - * method: 'GET', - * checkServerIdentity: function(host, cert) { - * // Make sure the certificate is issued to the host we are connected to - * const err = tls.checkServerIdentity(host, cert); - * if (err) { - * return err; - * } - * - * // Pin the public key, similar to HPKP pin-sha256 pinning - * const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU='; - * if (sha256(cert.pubkey) !== pubkey256) { - * const msg = 'Certificate verification error: ' + - * `The public key of '${cert.subject.CN}' ` + - * 'does not match our pinned fingerprint'; - * return new Error(msg); - * } - * - * // Pin the exact certificate, rather than the pub key - * const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' + - * 'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16'; - * if (cert.fingerprint256 !== cert256) { - * const msg = 'Certificate verification error: ' + - * `The certificate of '${cert.subject.CN}' ` + - * 'does not match our pinned fingerprint'; - * return new Error(msg); - * } - * - * // This loop is informational only. - * // Print the certificate and public key fingerprints of all certs in the - * // chain. Its common to pin the public key of the issuer on the public - * // internet, while pinning the public key of the service in sensitive - * // environments. - * do { - * console.log('Subject Common Name:', cert.subject.CN); - * console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256); - * - * hash = crypto.createHash('sha256'); - * console.log(' Public key ping-sha256:', sha256(cert.pubkey)); - * - * lastprint256 = cert.fingerprint256; - * cert = cert.issuerCertificate; - * } while (cert.fingerprint256 !== lastprint256); - * - * }, - * }; - * - * options.agent = new https.Agent(options); - * const req = https.request(options, (res) => { - * console.log('All OK. Server matched our pinned cert or public key'); - * console.log('statusCode:', res.statusCode); - * // Print the HPKP values - * console.log('headers:', res.headers['public-key-pins']); - * - * res.on('data', (d) => {}); - * }); - * - * req.on('error', (e) => { - * console.error(e.message); - * }); - * req.end(); - * ``` - * - * Outputs for example: - * - * ```text - * Subject Common Name: github.com - * Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16 - * Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU= - * Subject Common Name: DigiCert SHA2 Extended Validation Server CA - * Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A - * Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho= - * Subject Common Name: DigiCert High Assurance EV Root CA - * Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF - * Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18= - * All OK. Server matched our pinned cert or public key - * statusCode: 200 - * headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho="; - * pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4="; - * pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains - * ``` - * @since v0.3.6 - * @param options Accepts all `options` from `request`, with some differences in default values: - */ - function request( - options: RequestOptions | string | URL, - callback?: (res: http.IncomingMessage) => void, - ): http.ClientRequest; - function request( - url: string | URL, - options: RequestOptions, - callback?: (res: http.IncomingMessage) => void, - ): http.ClientRequest; - /** - * Like `http.get()` but for HTTPS. - * - * `options` can be an object, a string, or a `URL` object. If `options` is a - * string, it is automatically parsed with `new URL()`. If it is a `URL` object, it will be automatically converted to an ordinary `options` object. - * - * ```js - * import https from 'node:https'; - * - * https.get('https://encrypted.google.com/', (res) => { - * console.log('statusCode:', res.statusCode); - * console.log('headers:', res.headers); - * - * res.on('data', (d) => { - * process.stdout.write(d); - * }); - * - * }).on('error', (e) => { - * console.error(e); - * }); - * ``` - * @since v0.3.6 - * @param options Accepts the same `options` as {@link request}, with the `method` always set to `GET`. - */ - function get( - options: RequestOptions | string | URL, - callback?: (res: http.IncomingMessage) => void, - ): http.ClientRequest; - function get( - url: string | URL, - options: RequestOptions, - callback?: (res: http.IncomingMessage) => void, - ): http.ClientRequest; - let globalAgent: Agent; -} -declare module "https" { - export * from "node:https"; -} diff --git a/skills/flight-finder/node_modules/@types/node/index.d.ts b/skills/flight-finder/node_modules/@types/node/index.d.ts deleted file mode 100644 index 08ab4f0..0000000 --- a/skills/flight-finder/node_modules/@types/node/index.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -/** - * License for programmatically and manually incorporated - * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc - * - * Copyright Node.js contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -// NOTE: These definitions support Node.js and TypeScript 5.8+. - -// Reference required TypeScript libraries: -/// -/// -/// - -// Iterator definitions required for compatibility with TypeScript <5.6: -/// - -// Definitions for Node.js modules specific to TypeScript 5.7+: -/// -/// - -// Definitions for Node.js modules that are not specific to any version of TypeScript: -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// diff --git a/skills/flight-finder/node_modules/@types/node/inspector.d.ts b/skills/flight-finder/node_modules/@types/node/inspector.d.ts deleted file mode 100644 index 34140df..0000000 --- a/skills/flight-finder/node_modules/@types/node/inspector.d.ts +++ /dev/null @@ -1,269 +0,0 @@ -/** - * The `node:inspector` module provides an API for interacting with the V8 - * inspector. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/inspector.js) - */ -declare module "node:inspector" { - import { EventEmitter } from "node:events"; - /** - * The `inspector.Session` is used for dispatching messages to the V8 inspector - * back-end and receiving message responses and notifications. - */ - class Session extends EventEmitter { - /** - * Create a new instance of the inspector.Session class. - * The inspector session needs to be connected through `session.connect()` before the messages can be dispatched to the inspector backend. - */ - constructor(); - /** - * Connects a session to the inspector back-end. - */ - connect(): void; - /** - * Connects a session to the inspector back-end. - * An exception will be thrown if this API was not called on a Worker thread. - * @since v12.11.0 - */ - connectToMainThread(): void; - /** - * Immediately close the session. All pending message callbacks will be called with an error. - * `session.connect()` will need to be called to be able to send messages again. - * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. - */ - disconnect(): void; - } - /** - * Activate inspector on host and port. Equivalent to `node --inspect=[[host:]port]`, but can be done programmatically after node has - * started. - * - * If wait is `true`, will block until a client has connected to the inspect port - * and flow control has been passed to the debugger client. - * - * See the [security warning](https://nodejs.org/docs/latest-v25.x/api/cli.html#warning-binding-inspector-to-a-public-ipport-combination-is-insecure) - * regarding the `host` parameter usage. - * @param port Port to listen on for inspector connections. Defaults to what was specified on the CLI. - * @param host Host to listen on for inspector connections. Defaults to what was specified on the CLI. - * @param wait Block until a client has connected. Defaults to what was specified on the CLI. - * @returns Disposable that calls `inspector.close()`. - */ - function open(port?: number, host?: string, wait?: boolean): Disposable; - /** - * Deactivate the inspector. Blocks until there are no active connections. - */ - function close(): void; - /** - * Return the URL of the active inspector, or `undefined` if there is none. - * - * ```console - * $ node --inspect -p 'inspector.url()' - * Debugger listening on ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 - * For help, see: https://nodejs.org/en/docs/inspector - * ws://127.0.0.1:9229/166e272e-7a30-4d09-97ce-f1c012b43c34 - * - * $ node --inspect=localhost:3000 -p 'inspector.url()' - * Debugger listening on ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a - * For help, see: https://nodejs.org/en/docs/inspector - * ws://localhost:3000/51cf8d0e-3c36-4c59-8efd-54519839e56a - * - * $ node -p 'inspector.url()' - * undefined - * ``` - */ - function url(): string | undefined; - /** - * Blocks until a client (existing or connected later) has sent `Runtime.runIfWaitingForDebugger` command. - * - * An exception will be thrown if there is no active inspector. - * @since v12.7.0 - */ - function waitForDebugger(): void; - // These methods are exposed by the V8 inspector console API (inspector/v8-console.h). - // The method signatures differ from those of the Node.js console, and are deliberately - // typed permissively. - interface InspectorConsole { - debug(...data: any[]): void; - error(...data: any[]): void; - info(...data: any[]): void; - log(...data: any[]): void; - warn(...data: any[]): void; - dir(...data: any[]): void; - dirxml(...data: any[]): void; - table(...data: any[]): void; - trace(...data: any[]): void; - group(...data: any[]): void; - groupCollapsed(...data: any[]): void; - groupEnd(...data: any[]): void; - clear(...data: any[]): void; - count(label?: any): void; - countReset(label?: any): void; - assert(value?: any, ...data: any[]): void; - profile(label?: any): void; - profileEnd(label?: any): void; - time(label?: any): void; - timeLog(label?: any): void; - timeStamp(label?: any): void; - } - /** - * An object to send messages to the remote inspector console. - * @since v11.0.0 - */ - const console: InspectorConsole; - // DevTools protocol event broadcast methods - namespace Network { - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.requestWillBeSent` event to connected frontends. This event indicates that - * the application is about to send an HTTP request. - * @since v22.6.0 - */ - function requestWillBeSent(params: RequestWillBeSentEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.dataReceived` event to connected frontends, or buffers the data if - * `Network.streamResourceContent` command was not invoked for the given request yet. - * - * Also enables `Network.getResponseBody` command to retrieve the response data. - * @since v24.2.0 - */ - function dataReceived(params: DataReceivedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Enables `Network.getRequestPostData` command to retrieve the request data. - * @since v24.3.0 - */ - function dataSent(params: unknown): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.responseReceived` event to connected frontends. This event indicates that - * HTTP response is available. - * @since v22.6.0 - */ - function responseReceived(params: ResponseReceivedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.loadingFinished` event to connected frontends. This event indicates that - * HTTP request has finished loading. - * @since v22.6.0 - */ - function loadingFinished(params: LoadingFinishedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.loadingFailed` event to connected frontends. This event indicates that - * HTTP request has failed to load. - * @since v22.7.0 - */ - function loadingFailed(params: LoadingFailedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.webSocketCreated` event to connected frontends. This event indicates that - * a WebSocket connection has been initiated. - * @since v24.7.0 - */ - function webSocketCreated(params: WebSocketCreatedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.webSocketHandshakeResponseReceived` event to connected frontends. - * This event indicates that the WebSocket handshake response has been received. - * @since v24.7.0 - */ - function webSocketHandshakeResponseReceived(params: WebSocketHandshakeResponseReceivedEventDataType): void; - /** - * This feature is only available with the `--experimental-network-inspection` flag enabled. - * - * Broadcasts the `Network.webSocketClosed` event to connected frontends. - * This event indicates that a WebSocket connection has been closed. - * @since v24.7.0 - */ - function webSocketClosed(params: WebSocketClosedEventDataType): void; - } - namespace NetworkResources { - /** - * This feature is only available with the `--experimental-inspector-network-resource` flag enabled. - * - * The inspector.NetworkResources.put method is used to provide a response for a loadNetworkResource - * request issued via the Chrome DevTools Protocol (CDP). - * This is typically triggered when a source map is specified by URL, and a DevTools frontend—such as - * Chrome—requests the resource to retrieve the source map. - * - * This method allows developers to predefine the resource content to be served in response to such CDP requests. - * - * ```js - * const inspector = require('node:inspector'); - * // By preemptively calling put to register the resource, a source map can be resolved when - * // a loadNetworkResource request is made from the frontend. - * async function setNetworkResources() { - * const mapUrl = 'http://localhost:3000/dist/app.js.map'; - * const tsUrl = 'http://localhost:3000/src/app.ts'; - * const distAppJsMap = await fetch(mapUrl).then((res) => res.text()); - * const srcAppTs = await fetch(tsUrl).then((res) => res.text()); - * inspector.NetworkResources.put(mapUrl, distAppJsMap); - * inspector.NetworkResources.put(tsUrl, srcAppTs); - * }; - * setNetworkResources().then(() => { - * require('./dist/app'); - * }); - * ``` - * - * For more details, see the official CDP documentation: [Network.loadNetworkResource](https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-loadNetworkResource) - * @since v24.5.0 - * @experimental - */ - function put(url: string, data: string): void; - } - namespace DOMStorage { - /** - * This feature is only available with the - * `--experimental-storage-inspection` flag enabled. - * - * Broadcasts the `DOMStorage.domStorageItemAdded` event to connected frontends. - * This event indicates that a new item has been added to the storage. - * @since v25.5.0 - */ - function domStorageItemAdded(params: DomStorageItemAddedEventDataType): void; - /** - * This feature is only available with the - * `--experimental-storage-inspection` flag enabled. - * - * Broadcasts the `DOMStorage.domStorageItemRemoved` event to connected frontends. - * This event indicates that an item has been removed from the storage. - * @since v25.5.0 - */ - function domStorageItemRemoved(params: DomStorageItemRemovedEventDataType): void; - /** - * This feature is only available with the - * `--experimental-storage-inspection` flag enabled. - - * Broadcasts the `DOMStorage.domStorageItemUpdated` event to connected frontends. - * This event indicates that a storage item has been updated. - * @since v25.5.0 - */ - function domStorageItemUpdated(params: DomStorageItemUpdatedEventDataType): void; - /** - * This feature is only available with the - * `--experimental-storage-inspection` flag enabled. - * - * Broadcasts the `DOMStorage.domStorageItemsCleared` event to connected - * frontends. This event indicates that all items have been cleared from the - * storage. - * @since v25.5.0 - */ - function domStorageItemsCleared(params: DomStorageItemsClearedEventDataType): void; - /** - * This feature is only available with the - * `--experimental-storage-inspection` flag enabled. - * @since v25.5.0 - */ - function registerStorage(params: unknown): void; - } -} -declare module "inspector" { - export * from "node:inspector"; -} diff --git a/skills/flight-finder/node_modules/@types/node/inspector.generated.d.ts b/skills/flight-finder/node_modules/@types/node/inspector.generated.d.ts deleted file mode 100644 index 93ae271..0000000 --- a/skills/flight-finder/node_modules/@types/node/inspector.generated.d.ts +++ /dev/null @@ -1,4401 +0,0 @@ -// These definitions are automatically generated by the generate-inspector script. -// Do not edit this file directly. -// See scripts/generate-inspector/README.md for information on how to update the protocol definitions. -// Changes to the module itself should be added to the generator template (scripts/generate-inspector/inspector.d.ts.template). - -declare module "node:inspector" { - interface InspectorNotification { - method: string; - params: T; - } - namespace Schema { - /** - * Description of the protocol domain. - */ - interface Domain { - /** - * Domain name. - */ - name: string; - /** - * Domain version. - */ - version: string; - } - interface GetDomainsReturnType { - /** - * List of supported domains. - */ - domains: Domain[]; - } - } - namespace Runtime { - /** - * Unique script identifier. - */ - type ScriptId = string; - /** - * Unique object identifier. - */ - type RemoteObjectId = string; - /** - * Primitive value which cannot be JSON-stringified. - */ - type UnserializableValue = string; - /** - * Mirror object referencing original JavaScript object. - */ - interface RemoteObject { - /** - * Object type. - */ - type: string; - /** - * Object subtype hint. Specified for object type values only. - */ - subtype?: string | undefined; - /** - * Object class (constructor) name. Specified for object type values only. - */ - className?: string | undefined; - /** - * Remote object value in case of primitive values or JSON values (if it was requested). - */ - value?: any; - /** - * Primitive value which can not be JSON-stringified does not have value, but gets this property. - */ - unserializableValue?: UnserializableValue | undefined; - /** - * String representation of the object. - */ - description?: string | undefined; - /** - * Unique object identifier (for non-primitive values). - */ - objectId?: RemoteObjectId | undefined; - /** - * Preview containing abbreviated property values. Specified for object type values only. - * @experimental - */ - preview?: ObjectPreview | undefined; - /** - * @experimental - */ - customPreview?: CustomPreview | undefined; - } - /** - * @experimental - */ - interface CustomPreview { - header: string; - hasBody: boolean; - formatterObjectId: RemoteObjectId; - bindRemoteObjectFunctionId: RemoteObjectId; - configObjectId?: RemoteObjectId | undefined; - } - /** - * Object containing abbreviated remote object value. - * @experimental - */ - interface ObjectPreview { - /** - * Object type. - */ - type: string; - /** - * Object subtype hint. Specified for object type values only. - */ - subtype?: string | undefined; - /** - * String representation of the object. - */ - description?: string | undefined; - /** - * True iff some of the properties or entries of the original object did not fit. - */ - overflow: boolean; - /** - * List of the properties. - */ - properties: PropertyPreview[]; - /** - * List of the entries. Specified for map and set subtype values only. - */ - entries?: EntryPreview[] | undefined; - } - /** - * @experimental - */ - interface PropertyPreview { - /** - * Property name. - */ - name: string; - /** - * Object type. Accessor means that the property itself is an accessor property. - */ - type: string; - /** - * User-friendly property value string. - */ - value?: string | undefined; - /** - * Nested value preview. - */ - valuePreview?: ObjectPreview | undefined; - /** - * Object subtype hint. Specified for object type values only. - */ - subtype?: string | undefined; - } - /** - * @experimental - */ - interface EntryPreview { - /** - * Preview of the key. Specified for map-like collection entries. - */ - key?: ObjectPreview | undefined; - /** - * Preview of the value. - */ - value: ObjectPreview; - } - /** - * Object property descriptor. - */ - interface PropertyDescriptor { - /** - * Property name or symbol description. - */ - name: string; - /** - * The value associated with the property. - */ - value?: RemoteObject | undefined; - /** - * True if the value associated with the property may be changed (data descriptors only). - */ - writable?: boolean | undefined; - /** - * A function which serves as a getter for the property, or undefined if there is no getter (accessor descriptors only). - */ - get?: RemoteObject | undefined; - /** - * A function which serves as a setter for the property, or undefined if there is no setter (accessor descriptors only). - */ - set?: RemoteObject | undefined; - /** - * True if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object. - */ - configurable: boolean; - /** - * True if this property shows up during enumeration of the properties on the corresponding object. - */ - enumerable: boolean; - /** - * True if the result was thrown during the evaluation. - */ - wasThrown?: boolean | undefined; - /** - * True if the property is owned for the object. - */ - isOwn?: boolean | undefined; - /** - * Property symbol object, if the property is of the symbol type. - */ - symbol?: RemoteObject | undefined; - } - /** - * Object internal property descriptor. This property isn't normally visible in JavaScript code. - */ - interface InternalPropertyDescriptor { - /** - * Conventional property name. - */ - name: string; - /** - * The value associated with the property. - */ - value?: RemoteObject | undefined; - } - /** - * Represents function call argument. Either remote object id objectId, primitive value, unserializable primitive value or neither of (for undefined) them should be specified. - */ - interface CallArgument { - /** - * Primitive value or serializable javascript object. - */ - value?: any; - /** - * Primitive value which can not be JSON-stringified. - */ - unserializableValue?: UnserializableValue | undefined; - /** - * Remote object handle. - */ - objectId?: RemoteObjectId | undefined; - } - /** - * Id of an execution context. - */ - type ExecutionContextId = number; - /** - * Description of an isolated world. - */ - interface ExecutionContextDescription { - /** - * Unique id of the execution context. It can be used to specify in which execution context script evaluation should be performed. - */ - id: ExecutionContextId; - /** - * Execution context origin. - */ - origin: string; - /** - * Human readable name describing given context. - */ - name: string; - /** - * Embedder-specific auxiliary data. - */ - auxData?: object | undefined; - } - /** - * Detailed information about exception (or error) that was thrown during script compilation or execution. - */ - interface ExceptionDetails { - /** - * Exception id. - */ - exceptionId: number; - /** - * Exception text, which should be used together with exception object when available. - */ - text: string; - /** - * Line number of the exception location (0-based). - */ - lineNumber: number; - /** - * Column number of the exception location (0-based). - */ - columnNumber: number; - /** - * Script ID of the exception location. - */ - scriptId?: ScriptId | undefined; - /** - * URL of the exception location, to be used when the script was not reported. - */ - url?: string | undefined; - /** - * JavaScript stack trace if available. - */ - stackTrace?: StackTrace | undefined; - /** - * Exception object if available. - */ - exception?: RemoteObject | undefined; - /** - * Identifier of the context where exception happened. - */ - executionContextId?: ExecutionContextId | undefined; - } - /** - * Number of milliseconds since epoch. - */ - type Timestamp = number; - /** - * Stack entry for runtime errors and assertions. - */ - interface CallFrame { - /** - * JavaScript function name. - */ - functionName: string; - /** - * JavaScript script id. - */ - scriptId: ScriptId; - /** - * JavaScript script name or url. - */ - url: string; - /** - * JavaScript script line number (0-based). - */ - lineNumber: number; - /** - * JavaScript script column number (0-based). - */ - columnNumber: number; - } - /** - * Call frames for assertions or error messages. - */ - interface StackTrace { - /** - * String label of this stack trace. For async traces this may be a name of the function that initiated the async call. - */ - description?: string | undefined; - /** - * JavaScript function name. - */ - callFrames: CallFrame[]; - /** - * Asynchronous JavaScript stack trace that preceded this stack, if available. - */ - parent?: StackTrace | undefined; - /** - * Asynchronous JavaScript stack trace that preceded this stack, if available. - * @experimental - */ - parentId?: StackTraceId | undefined; - } - /** - * Unique identifier of current debugger. - * @experimental - */ - type UniqueDebuggerId = string; - /** - * If debuggerId is set stack trace comes from another debugger and can be resolved there. This allows to track cross-debugger calls. See Runtime.StackTrace and Debugger.paused for usages. - * @experimental - */ - interface StackTraceId { - id: string; - debuggerId?: UniqueDebuggerId | undefined; - } - interface EvaluateParameterType { - /** - * Expression to evaluate. - */ - expression: string; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string | undefined; - /** - * Determines whether Command Line API should be available during the evaluation. - */ - includeCommandLineAPI?: boolean | undefined; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. - */ - silent?: boolean | undefined; - /** - * Specifies in which execution context to perform evaluation. If the parameter is omitted the evaluation will be performed in the context of the inspected page. - */ - contextId?: ExecutionContextId | undefined; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean | undefined; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean | undefined; - /** - * Whether execution should be treated as initiated by user in the UI. - */ - userGesture?: boolean | undefined; - /** - * Whether execution should await for resulting value and return once awaited promise is resolved. - */ - awaitPromise?: boolean | undefined; - } - interface AwaitPromiseParameterType { - /** - * Identifier of the promise. - */ - promiseObjectId: RemoteObjectId; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean | undefined; - /** - * Whether preview should be generated for the result. - */ - generatePreview?: boolean | undefined; - } - interface CallFunctionOnParameterType { - /** - * Declaration of the function to call. - */ - functionDeclaration: string; - /** - * Identifier of the object to call function on. Either objectId or executionContextId should be specified. - */ - objectId?: RemoteObjectId | undefined; - /** - * Call arguments. All call arguments must belong to the same JavaScript world as the target object. - */ - arguments?: CallArgument[] | undefined; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. - */ - silent?: boolean | undefined; - /** - * Whether the result is expected to be a JSON object which should be sent by value. - */ - returnByValue?: boolean | undefined; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean | undefined; - /** - * Whether execution should be treated as initiated by user in the UI. - */ - userGesture?: boolean | undefined; - /** - * Whether execution should await for resulting value and return once awaited promise is resolved. - */ - awaitPromise?: boolean | undefined; - /** - * Specifies execution context which global object will be used to call function on. Either executionContextId or objectId should be specified. - */ - executionContextId?: ExecutionContextId | undefined; - /** - * Symbolic group name that can be used to release multiple objects. If objectGroup is not specified and objectId is, objectGroup will be inherited from object. - */ - objectGroup?: string | undefined; - } - interface GetPropertiesParameterType { - /** - * Identifier of the object to return properties for. - */ - objectId: RemoteObjectId; - /** - * If true, returns properties belonging only to the element itself, not to its prototype chain. - */ - ownProperties?: boolean | undefined; - /** - * If true, returns accessor properties (with getter/setter) only; internal properties are not returned either. - * @experimental - */ - accessorPropertiesOnly?: boolean | undefined; - /** - * Whether preview should be generated for the results. - * @experimental - */ - generatePreview?: boolean | undefined; - } - interface ReleaseObjectParameterType { - /** - * Identifier of the object to release. - */ - objectId: RemoteObjectId; - } - interface ReleaseObjectGroupParameterType { - /** - * Symbolic object group name. - */ - objectGroup: string; - } - interface SetCustomObjectFormatterEnabledParameterType { - enabled: boolean; - } - interface CompileScriptParameterType { - /** - * Expression to compile. - */ - expression: string; - /** - * Source url to be set for the script. - */ - sourceURL: string; - /** - * Specifies whether the compiled script should be persisted. - */ - persistScript: boolean; - /** - * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. - */ - executionContextId?: ExecutionContextId | undefined; - } - interface RunScriptParameterType { - /** - * Id of the script to run. - */ - scriptId: ScriptId; - /** - * Specifies in which execution context to perform script run. If the parameter is omitted the evaluation will be performed in the context of the inspected page. - */ - executionContextId?: ExecutionContextId | undefined; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string | undefined; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. - */ - silent?: boolean | undefined; - /** - * Determines whether Command Line API should be available during the evaluation. - */ - includeCommandLineAPI?: boolean | undefined; - /** - * Whether the result is expected to be a JSON object which should be sent by value. - */ - returnByValue?: boolean | undefined; - /** - * Whether preview should be generated for the result. - */ - generatePreview?: boolean | undefined; - /** - * Whether execution should await for resulting value and return once awaited promise is resolved. - */ - awaitPromise?: boolean | undefined; - } - interface QueryObjectsParameterType { - /** - * Identifier of the prototype to return objects for. - */ - prototypeObjectId: RemoteObjectId; - } - interface GlobalLexicalScopeNamesParameterType { - /** - * Specifies in which execution context to lookup global scope variables. - */ - executionContextId?: ExecutionContextId | undefined; - } - interface EvaluateReturnType { - /** - * Evaluation result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface AwaitPromiseReturnType { - /** - * Promise result. Will contain rejected value if promise was rejected. - */ - result: RemoteObject; - /** - * Exception details if stack strace is available. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface CallFunctionOnReturnType { - /** - * Call result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface GetPropertiesReturnType { - /** - * Object properties. - */ - result: PropertyDescriptor[]; - /** - * Internal object properties (only of the element itself). - */ - internalProperties?: InternalPropertyDescriptor[] | undefined; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface CompileScriptReturnType { - /** - * Id of the script. - */ - scriptId?: ScriptId | undefined; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface RunScriptReturnType { - /** - * Run result. - */ - result: RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: ExceptionDetails | undefined; - } - interface QueryObjectsReturnType { - /** - * Array with objects. - */ - objects: RemoteObject; - } - interface GlobalLexicalScopeNamesReturnType { - names: string[]; - } - interface ExecutionContextCreatedEventDataType { - /** - * A newly created execution context. - */ - context: ExecutionContextDescription; - } - interface ExecutionContextDestroyedEventDataType { - /** - * Id of the destroyed context - */ - executionContextId: ExecutionContextId; - } - interface ExceptionThrownEventDataType { - /** - * Timestamp of the exception. - */ - timestamp: Timestamp; - exceptionDetails: ExceptionDetails; - } - interface ExceptionRevokedEventDataType { - /** - * Reason describing why exception was revoked. - */ - reason: string; - /** - * The id of revoked exception, as reported in exceptionThrown. - */ - exceptionId: number; - } - interface ConsoleAPICalledEventDataType { - /** - * Type of the call. - */ - type: string; - /** - * Call arguments. - */ - args: RemoteObject[]; - /** - * Identifier of the context where the call was made. - */ - executionContextId: ExecutionContextId; - /** - * Call timestamp. - */ - timestamp: Timestamp; - /** - * Stack trace captured when the call was made. - */ - stackTrace?: StackTrace | undefined; - /** - * Console context descriptor for calls on non-default console context (not console.*): 'anonymous#unique-logger-id' for call on unnamed context, 'name#unique-logger-id' for call on named context. - * @experimental - */ - context?: string | undefined; - } - interface InspectRequestedEventDataType { - object: RemoteObject; - hints: object; - } - } - namespace Debugger { - /** - * Breakpoint identifier. - */ - type BreakpointId = string; - /** - * Call frame identifier. - */ - type CallFrameId = string; - /** - * Location in the source code. - */ - interface Location { - /** - * Script identifier as reported in the Debugger.scriptParsed. - */ - scriptId: Runtime.ScriptId; - /** - * Line number in the script (0-based). - */ - lineNumber: number; - /** - * Column number in the script (0-based). - */ - columnNumber?: number | undefined; - } - /** - * Location in the source code. - * @experimental - */ - interface ScriptPosition { - lineNumber: number; - columnNumber: number; - } - /** - * JavaScript call frame. Array of call frames form the call stack. - */ - interface CallFrame { - /** - * Call frame identifier. This identifier is only valid while the virtual machine is paused. - */ - callFrameId: CallFrameId; - /** - * Name of the JavaScript function called on this call frame. - */ - functionName: string; - /** - * Location in the source code. - */ - functionLocation?: Location | undefined; - /** - * Location in the source code. - */ - location: Location; - /** - * JavaScript script name or url. - */ - url: string; - /** - * Scope chain for this call frame. - */ - scopeChain: Scope[]; - /** - * this object for this call frame. - */ - this: Runtime.RemoteObject; - /** - * The value being returned, if the function is at return point. - */ - returnValue?: Runtime.RemoteObject | undefined; - } - /** - * Scope description. - */ - interface Scope { - /** - * Scope type. - */ - type: string; - /** - * Object representing the scope. For global and with scopes it represents the actual object; for the rest of the scopes, it is artificial transient object enumerating scope variables as its properties. - */ - object: Runtime.RemoteObject; - name?: string | undefined; - /** - * Location in the source code where scope starts - */ - startLocation?: Location | undefined; - /** - * Location in the source code where scope ends - */ - endLocation?: Location | undefined; - } - /** - * Search match for resource. - */ - interface SearchMatch { - /** - * Line number in resource content. - */ - lineNumber: number; - /** - * Line with match content. - */ - lineContent: string; - } - interface BreakLocation { - /** - * Script identifier as reported in the Debugger.scriptParsed. - */ - scriptId: Runtime.ScriptId; - /** - * Line number in the script (0-based). - */ - lineNumber: number; - /** - * Column number in the script (0-based). - */ - columnNumber?: number | undefined; - type?: string | undefined; - } - interface SetBreakpointsActiveParameterType { - /** - * New value for breakpoints active state. - */ - active: boolean; - } - interface SetSkipAllPausesParameterType { - /** - * New value for skip pauses state. - */ - skip: boolean; - } - interface SetBreakpointByUrlParameterType { - /** - * Line number to set breakpoint at. - */ - lineNumber: number; - /** - * URL of the resources to set breakpoint on. - */ - url?: string | undefined; - /** - * Regex pattern for the URLs of the resources to set breakpoints on. Either url or urlRegex must be specified. - */ - urlRegex?: string | undefined; - /** - * Script hash of the resources to set breakpoint on. - */ - scriptHash?: string | undefined; - /** - * Offset in the line to set breakpoint at. - */ - columnNumber?: number | undefined; - /** - * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. - */ - condition?: string | undefined; - } - interface SetBreakpointParameterType { - /** - * Location to set breakpoint in. - */ - location: Location; - /** - * Expression to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this expression evaluates to true. - */ - condition?: string | undefined; - } - interface RemoveBreakpointParameterType { - breakpointId: BreakpointId; - } - interface GetPossibleBreakpointsParameterType { - /** - * Start of range to search possible breakpoint locations in. - */ - start: Location; - /** - * End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. - */ - end?: Location | undefined; - /** - * Only consider locations which are in the same (non-nested) function as start. - */ - restrictToFunction?: boolean | undefined; - } - interface ContinueToLocationParameterType { - /** - * Location to continue to. - */ - location: Location; - targetCallFrames?: string | undefined; - } - interface PauseOnAsyncCallParameterType { - /** - * Debugger will pause when async call with given stack trace is started. - */ - parentStackTraceId: Runtime.StackTraceId; - } - interface StepIntoParameterType { - /** - * Debugger will issue additional Debugger.paused notification if any async task is scheduled before next pause. - * @experimental - */ - breakOnAsyncCall?: boolean | undefined; - } - interface GetStackTraceParameterType { - stackTraceId: Runtime.StackTraceId; - } - interface SearchInContentParameterType { - /** - * Id of the script to search in. - */ - scriptId: Runtime.ScriptId; - /** - * String to search for. - */ - query: string; - /** - * If true, search is case sensitive. - */ - caseSensitive?: boolean | undefined; - /** - * If true, treats string parameter as regex. - */ - isRegex?: boolean | undefined; - } - interface SetScriptSourceParameterType { - /** - * Id of the script to edit. - */ - scriptId: Runtime.ScriptId; - /** - * New content of the script. - */ - scriptSource: string; - /** - * If true the change will not actually be applied. Dry run may be used to get result description without actually modifying the code. - */ - dryRun?: boolean | undefined; - } - interface RestartFrameParameterType { - /** - * Call frame identifier to evaluate on. - */ - callFrameId: CallFrameId; - } - interface GetScriptSourceParameterType { - /** - * Id of the script to get source for. - */ - scriptId: Runtime.ScriptId; - } - interface SetPauseOnExceptionsParameterType { - /** - * Pause on exceptions mode. - */ - state: string; - } - interface EvaluateOnCallFrameParameterType { - /** - * Call frame identifier to evaluate on. - */ - callFrameId: CallFrameId; - /** - * Expression to evaluate. - */ - expression: string; - /** - * String object group name to put result into (allows rapid releasing resulting object handles using releaseObjectGroup). - */ - objectGroup?: string | undefined; - /** - * Specifies whether command line API should be available to the evaluated expression, defaults to false. - */ - includeCommandLineAPI?: boolean | undefined; - /** - * In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides setPauseOnException state. - */ - silent?: boolean | undefined; - /** - * Whether the result is expected to be a JSON object that should be sent by value. - */ - returnByValue?: boolean | undefined; - /** - * Whether preview should be generated for the result. - * @experimental - */ - generatePreview?: boolean | undefined; - /** - * Whether to throw an exception if side effect cannot be ruled out during evaluation. - */ - throwOnSideEffect?: boolean | undefined; - } - interface SetVariableValueParameterType { - /** - * 0-based number of scope as was listed in scope chain. Only 'local', 'closure' and 'catch' scope types are allowed. Other scopes could be manipulated manually. - */ - scopeNumber: number; - /** - * Variable name. - */ - variableName: string; - /** - * New variable value. - */ - newValue: Runtime.CallArgument; - /** - * Id of callframe that holds variable. - */ - callFrameId: CallFrameId; - } - interface SetReturnValueParameterType { - /** - * New return value. - */ - newValue: Runtime.CallArgument; - } - interface SetAsyncCallStackDepthParameterType { - /** - * Maximum depth of async call stacks. Setting to 0 will effectively disable collecting async call stacks (default). - */ - maxDepth: number; - } - interface SetBlackboxPatternsParameterType { - /** - * Array of regexps that will be used to check script url for blackbox state. - */ - patterns: string[]; - } - interface SetBlackboxedRangesParameterType { - /** - * Id of the script. - */ - scriptId: Runtime.ScriptId; - positions: ScriptPosition[]; - } - interface EnableReturnType { - /** - * Unique identifier of the debugger. - * @experimental - */ - debuggerId: Runtime.UniqueDebuggerId; - } - interface SetBreakpointByUrlReturnType { - /** - * Id of the created breakpoint for further reference. - */ - breakpointId: BreakpointId; - /** - * List of the locations this breakpoint resolved into upon addition. - */ - locations: Location[]; - } - interface SetBreakpointReturnType { - /** - * Id of the created breakpoint for further reference. - */ - breakpointId: BreakpointId; - /** - * Location this breakpoint resolved into. - */ - actualLocation: Location; - } - interface GetPossibleBreakpointsReturnType { - /** - * List of the possible breakpoint locations. - */ - locations: BreakLocation[]; - } - interface GetStackTraceReturnType { - stackTrace: Runtime.StackTrace; - } - interface SearchInContentReturnType { - /** - * List of search matches. - */ - result: SearchMatch[]; - } - interface SetScriptSourceReturnType { - /** - * New stack trace in case editing has happened while VM was stopped. - */ - callFrames?: CallFrame[] | undefined; - /** - * Whether current call stack was modified after applying the changes. - */ - stackChanged?: boolean | undefined; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace | undefined; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId | undefined; - /** - * Exception details if any. - */ - exceptionDetails?: Runtime.ExceptionDetails | undefined; - } - interface RestartFrameReturnType { - /** - * New stack trace. - */ - callFrames: CallFrame[]; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace | undefined; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId | undefined; - } - interface GetScriptSourceReturnType { - /** - * Script source. - */ - scriptSource: string; - } - interface EvaluateOnCallFrameReturnType { - /** - * Object wrapper for the evaluation result. - */ - result: Runtime.RemoteObject; - /** - * Exception details. - */ - exceptionDetails?: Runtime.ExceptionDetails | undefined; - } - interface ScriptParsedEventDataType { - /** - * Identifier of the script parsed. - */ - scriptId: Runtime.ScriptId; - /** - * URL or name of the script parsed (if any). - */ - url: string; - /** - * Line offset of the script within the resource with given URL (for script tags). - */ - startLine: number; - /** - * Column offset of the script within the resource with given URL. - */ - startColumn: number; - /** - * Last line of the script. - */ - endLine: number; - /** - * Length of the last line of the script. - */ - endColumn: number; - /** - * Specifies script creation context. - */ - executionContextId: Runtime.ExecutionContextId; - /** - * Content hash of the script. - */ - hash: string; - /** - * Embedder-specific auxiliary data. - */ - executionContextAuxData?: object | undefined; - /** - * True, if this script is generated as a result of the live edit operation. - * @experimental - */ - isLiveEdit?: boolean | undefined; - /** - * URL of source map associated with script (if any). - */ - sourceMapURL?: string | undefined; - /** - * True, if this script has sourceURL. - */ - hasSourceURL?: boolean | undefined; - /** - * True, if this script is ES6 module. - */ - isModule?: boolean | undefined; - /** - * This script length. - */ - length?: number | undefined; - /** - * JavaScript top stack frame of where the script parsed event was triggered if available. - * @experimental - */ - stackTrace?: Runtime.StackTrace | undefined; - } - interface ScriptFailedToParseEventDataType { - /** - * Identifier of the script parsed. - */ - scriptId: Runtime.ScriptId; - /** - * URL or name of the script parsed (if any). - */ - url: string; - /** - * Line offset of the script within the resource with given URL (for script tags). - */ - startLine: number; - /** - * Column offset of the script within the resource with given URL. - */ - startColumn: number; - /** - * Last line of the script. - */ - endLine: number; - /** - * Length of the last line of the script. - */ - endColumn: number; - /** - * Specifies script creation context. - */ - executionContextId: Runtime.ExecutionContextId; - /** - * Content hash of the script. - */ - hash: string; - /** - * Embedder-specific auxiliary data. - */ - executionContextAuxData?: object | undefined; - /** - * URL of source map associated with script (if any). - */ - sourceMapURL?: string | undefined; - /** - * True, if this script has sourceURL. - */ - hasSourceURL?: boolean | undefined; - /** - * True, if this script is ES6 module. - */ - isModule?: boolean | undefined; - /** - * This script length. - */ - length?: number | undefined; - /** - * JavaScript top stack frame of where the script parsed event was triggered if available. - * @experimental - */ - stackTrace?: Runtime.StackTrace | undefined; - } - interface BreakpointResolvedEventDataType { - /** - * Breakpoint unique identifier. - */ - breakpointId: BreakpointId; - /** - * Actual breakpoint location. - */ - location: Location; - } - interface PausedEventDataType { - /** - * Call stack the virtual machine stopped on. - */ - callFrames: CallFrame[]; - /** - * Pause reason. - */ - reason: string; - /** - * Object containing break-specific auxiliary properties. - */ - data?: object | undefined; - /** - * Hit breakpoints IDs - */ - hitBreakpoints?: string[] | undefined; - /** - * Async stack trace, if any. - */ - asyncStackTrace?: Runtime.StackTrace | undefined; - /** - * Async stack trace, if any. - * @experimental - */ - asyncStackTraceId?: Runtime.StackTraceId | undefined; - /** - * Just scheduled async call will have this stack trace as parent stack during async execution. This field is available only after Debugger.stepInto call with breakOnAsynCall flag. - * @experimental - */ - asyncCallStackTraceId?: Runtime.StackTraceId | undefined; - } - } - namespace Console { - /** - * Console message. - */ - interface ConsoleMessage { - /** - * Message source. - */ - source: string; - /** - * Message severity. - */ - level: string; - /** - * Message text. - */ - text: string; - /** - * URL of the message origin. - */ - url?: string | undefined; - /** - * Line number in the resource that generated this message (1-based). - */ - line?: number | undefined; - /** - * Column number in the resource that generated this message (1-based). - */ - column?: number | undefined; - } - interface MessageAddedEventDataType { - /** - * Console message that has been added. - */ - message: ConsoleMessage; - } - } - namespace Profiler { - /** - * Profile node. Holds callsite information, execution statistics and child nodes. - */ - interface ProfileNode { - /** - * Unique id of the node. - */ - id: number; - /** - * Function location. - */ - callFrame: Runtime.CallFrame; - /** - * Number of samples where this node was on top of the call stack. - */ - hitCount?: number | undefined; - /** - * Child node ids. - */ - children?: number[] | undefined; - /** - * The reason of being not optimized. The function may be deoptimized or marked as don't optimize. - */ - deoptReason?: string | undefined; - /** - * An array of source position ticks. - */ - positionTicks?: PositionTickInfo[] | undefined; - } - /** - * Profile. - */ - interface Profile { - /** - * The list of profile nodes. First item is the root node. - */ - nodes: ProfileNode[]; - /** - * Profiling start timestamp in microseconds. - */ - startTime: number; - /** - * Profiling end timestamp in microseconds. - */ - endTime: number; - /** - * Ids of samples top nodes. - */ - samples?: number[] | undefined; - /** - * Time intervals between adjacent samples in microseconds. The first delta is relative to the profile startTime. - */ - timeDeltas?: number[] | undefined; - } - /** - * Specifies a number of samples attributed to a certain source position. - */ - interface PositionTickInfo { - /** - * Source line number (1-based). - */ - line: number; - /** - * Number of samples attributed to the source line. - */ - ticks: number; - } - /** - * Coverage data for a source range. - */ - interface CoverageRange { - /** - * JavaScript script source offset for the range start. - */ - startOffset: number; - /** - * JavaScript script source offset for the range end. - */ - endOffset: number; - /** - * Collected execution count of the source range. - */ - count: number; - } - /** - * Coverage data for a JavaScript function. - */ - interface FunctionCoverage { - /** - * JavaScript function name. - */ - functionName: string; - /** - * Source ranges inside the function with coverage data. - */ - ranges: CoverageRange[]; - /** - * Whether coverage data for this function has block granularity. - */ - isBlockCoverage: boolean; - } - /** - * Coverage data for a JavaScript script. - */ - interface ScriptCoverage { - /** - * JavaScript script id. - */ - scriptId: Runtime.ScriptId; - /** - * JavaScript script name or url. - */ - url: string; - /** - * Functions contained in the script that has coverage data. - */ - functions: FunctionCoverage[]; - } - interface SetSamplingIntervalParameterType { - /** - * New sampling interval in microseconds. - */ - interval: number; - } - interface StartPreciseCoverageParameterType { - /** - * Collect accurate call counts beyond simple 'covered' or 'not covered'. - */ - callCount?: boolean | undefined; - /** - * Collect block-based coverage. - */ - detailed?: boolean | undefined; - } - interface StopReturnType { - /** - * Recorded profile. - */ - profile: Profile; - } - interface TakePreciseCoverageReturnType { - /** - * Coverage data for the current isolate. - */ - result: ScriptCoverage[]; - } - interface GetBestEffortCoverageReturnType { - /** - * Coverage data for the current isolate. - */ - result: ScriptCoverage[]; - } - interface ConsoleProfileStartedEventDataType { - id: string; - /** - * Location of console.profile(). - */ - location: Debugger.Location; - /** - * Profile title passed as an argument to console.profile(). - */ - title?: string | undefined; - } - interface ConsoleProfileFinishedEventDataType { - id: string; - /** - * Location of console.profileEnd(). - */ - location: Debugger.Location; - profile: Profile; - /** - * Profile title passed as an argument to console.profile(). - */ - title?: string | undefined; - } - } - namespace HeapProfiler { - /** - * Heap snapshot object id. - */ - type HeapSnapshotObjectId = string; - /** - * Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes. - */ - interface SamplingHeapProfileNode { - /** - * Function location. - */ - callFrame: Runtime.CallFrame; - /** - * Allocations size in bytes for the node excluding children. - */ - selfSize: number; - /** - * Child nodes. - */ - children: SamplingHeapProfileNode[]; - } - /** - * Profile. - */ - interface SamplingHeapProfile { - head: SamplingHeapProfileNode; - } - interface StartTrackingHeapObjectsParameterType { - trackAllocations?: boolean | undefined; - } - interface StopTrackingHeapObjectsParameterType { - /** - * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped. - */ - reportProgress?: boolean | undefined; - } - interface TakeHeapSnapshotParameterType { - /** - * If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken. - */ - reportProgress?: boolean | undefined; - } - interface GetObjectByHeapObjectIdParameterType { - objectId: HeapSnapshotObjectId; - /** - * Symbolic group name that can be used to release multiple objects. - */ - objectGroup?: string | undefined; - } - interface AddInspectedHeapObjectParameterType { - /** - * Heap snapshot object id to be accessible by means of $x command line API. - */ - heapObjectId: HeapSnapshotObjectId; - } - interface GetHeapObjectIdParameterType { - /** - * Identifier of the object to get heap object id for. - */ - objectId: Runtime.RemoteObjectId; - } - interface StartSamplingParameterType { - /** - * Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes. - */ - samplingInterval?: number | undefined; - } - interface GetObjectByHeapObjectIdReturnType { - /** - * Evaluation result. - */ - result: Runtime.RemoteObject; - } - interface GetHeapObjectIdReturnType { - /** - * Id of the heap snapshot object corresponding to the passed remote object id. - */ - heapSnapshotObjectId: HeapSnapshotObjectId; - } - interface StopSamplingReturnType { - /** - * Recorded sampling heap profile. - */ - profile: SamplingHeapProfile; - } - interface GetSamplingProfileReturnType { - /** - * Return the sampling profile being collected. - */ - profile: SamplingHeapProfile; - } - interface AddHeapSnapshotChunkEventDataType { - chunk: string; - } - interface ReportHeapSnapshotProgressEventDataType { - done: number; - total: number; - finished?: boolean | undefined; - } - interface LastSeenObjectIdEventDataType { - lastSeenObjectId: number; - timestamp: number; - } - interface HeapStatsUpdateEventDataType { - /** - * An array of triplets. Each triplet describes a fragment. The first integer is the fragment index, the second integer is a total count of objects for the fragment, the third integer is a total size of the objects for the fragment. - */ - statsUpdate: number[]; - } - } - namespace IO { - type StreamHandle = string; - interface ReadParameterType { - /** - * Handle of the stream to read. - */ - handle: StreamHandle; - /** - * Seek to the specified offset before reading (if not specified, proceed with offset - * following the last read). Some types of streams may only support sequential reads. - */ - offset?: number | undefined; - /** - * Maximum number of bytes to read (left upon the agent discretion if not specified). - */ - size?: number | undefined; - } - interface CloseParameterType { - /** - * Handle of the stream to close. - */ - handle: StreamHandle; - } - interface ReadReturnType { - /** - * Data that were read. - */ - data: string; - /** - * Set if the end-of-file condition occurred while reading. - */ - eof: boolean; - } - } - namespace Network { - /** - * Resource type as it was perceived by the rendering engine. - */ - type ResourceType = string; - /** - * Unique request identifier. - */ - type RequestId = string; - /** - * UTC time in seconds, counted from January 1, 1970. - */ - type TimeSinceEpoch = number; - /** - * Monotonically increasing time in seconds since an arbitrary point in the past. - */ - type MonotonicTime = number; - /** - * Information about the request initiator. - */ - interface Initiator { - /** - * Type of this initiator. - */ - type: string; - /** - * Initiator JavaScript stack trace, set for Script only. - * Requires the Debugger domain to be enabled. - */ - stack?: Runtime.StackTrace | undefined; - /** - * Initiator URL, set for Parser type or for Script type (when script is importing module) or for SignedExchange type. - */ - url?: string | undefined; - /** - * Initiator line number, set for Parser type or for Script type (when script is importing - * module) (0-based). - */ - lineNumber?: number | undefined; - /** - * Initiator column number, set for Parser type or for Script type (when script is importing - * module) (0-based). - */ - columnNumber?: number | undefined; - /** - * Set if another request triggered this request (e.g. preflight). - */ - requestId?: RequestId | undefined; - } - /** - * HTTP request data. - */ - interface Request { - url: string; - method: string; - headers: Headers; - hasPostData: boolean; - } - /** - * HTTP response data. - */ - interface Response { - url: string; - status: number; - statusText: string; - headers: Headers; - mimeType: string; - charset: string; - } - /** - * Request / response headers as keys / values of JSON object. - */ - interface Headers { - } - interface LoadNetworkResourcePageResult { - success: boolean; - stream?: IO.StreamHandle | undefined; - } - /** - * WebSocket response data. - */ - interface WebSocketResponse { - /** - * HTTP response status code. - */ - status: number; - /** - * HTTP response status text. - */ - statusText: string; - /** - * HTTP response headers. - */ - headers: Headers; - } - interface EnableParameterType { - /** - * Buffer size in bytes to use when preserving network payloads (XHRs, etc). - * @experimental - */ - maxTotalBufferSize?: number | undefined; - /** - * Per-resource buffer size in bytes to use when preserving network payloads (XHRs, etc). - * @experimental - */ - maxResourceBufferSize?: number | undefined; - } - interface GetRequestPostDataParameterType { - /** - * Identifier of the network request to get content for. - */ - requestId: RequestId; - } - interface GetResponseBodyParameterType { - /** - * Identifier of the network request to get content for. - */ - requestId: RequestId; - } - interface StreamResourceContentParameterType { - /** - * Identifier of the request to stream. - */ - requestId: RequestId; - } - interface LoadNetworkResourceParameterType { - /** - * URL of the resource to get content for. - */ - url: string; - } - interface GetRequestPostDataReturnType { - /** - * Request body string, omitting files from multipart requests - */ - postData: string; - } - interface GetResponseBodyReturnType { - /** - * Response body. - */ - body: string; - /** - * True, if content was sent as base64. - */ - base64Encoded: boolean; - } - interface StreamResourceContentReturnType { - /** - * Data that has been buffered until streaming is enabled. - */ - bufferedData: string; - } - interface LoadNetworkResourceReturnType { - resource: LoadNetworkResourcePageResult; - } - interface RequestWillBeSentEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Request data. - */ - request: Request; - /** - * Request initiator. - */ - initiator: Initiator; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - /** - * Timestamp. - */ - wallTime: TimeSinceEpoch; - } - interface ResponseReceivedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - /** - * Resource type. - */ - type: ResourceType; - /** - * Response data. - */ - response: Response; - } - interface LoadingFailedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - /** - * Resource type. - */ - type: ResourceType; - /** - * Error message. - */ - errorText: string; - } - interface LoadingFinishedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - } - interface DataReceivedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - /** - * Data chunk length. - */ - dataLength: number; - /** - * Actual bytes received (might be less than dataLength for compressed encodings). - */ - encodedDataLength: number; - /** - * Data that was received. - * @experimental - */ - data?: string | undefined; - } - interface WebSocketCreatedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * WebSocket request URL. - */ - url: string; - /** - * Request initiator. - */ - initiator: Initiator; - } - interface WebSocketClosedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - } - interface WebSocketHandshakeResponseReceivedEventDataType { - /** - * Request identifier. - */ - requestId: RequestId; - /** - * Timestamp. - */ - timestamp: MonotonicTime; - /** - * WebSocket response data. - */ - response: WebSocketResponse; - } - } - namespace NodeRuntime { - interface NotifyWhenWaitingForDisconnectParameterType { - enabled: boolean; - } - } - namespace NodeTracing { - interface TraceConfig { - /** - * Controls how the trace buffer stores data. - */ - recordMode?: string | undefined; - /** - * Included category filters. - */ - includedCategories: string[]; - } - interface StartParameterType { - traceConfig: TraceConfig; - } - interface GetCategoriesReturnType { - /** - * A list of supported tracing categories. - */ - categories: string[]; - } - interface DataCollectedEventDataType { - value: object[]; - } - } - namespace NodeWorker { - type WorkerID = string; - /** - * Unique identifier of attached debugging session. - */ - type SessionID = string; - interface WorkerInfo { - workerId: WorkerID; - type: string; - title: string; - url: string; - } - interface SendMessageToWorkerParameterType { - message: string; - /** - * Identifier of the session. - */ - sessionId: SessionID; - } - interface EnableParameterType { - /** - * Whether to new workers should be paused until the frontend sends `Runtime.runIfWaitingForDebugger` - * message to run them. - */ - waitForDebuggerOnStart: boolean; - } - interface DetachParameterType { - sessionId: SessionID; - } - interface AttachedToWorkerEventDataType { - /** - * Identifier assigned to the session used to send/receive messages. - */ - sessionId: SessionID; - workerInfo: WorkerInfo; - waitingForDebugger: boolean; - } - interface DetachedFromWorkerEventDataType { - /** - * Detached session identifier. - */ - sessionId: SessionID; - } - interface ReceivedMessageFromWorkerEventDataType { - /** - * Identifier of a session which sends a message. - */ - sessionId: SessionID; - message: string; - } - } - namespace Target { - type SessionID = string; - type TargetID = string; - interface TargetInfo { - targetId: TargetID; - type: string; - title: string; - url: string; - attached: boolean; - canAccessOpener: boolean; - } - interface SetAutoAttachParameterType { - autoAttach: boolean; - waitForDebuggerOnStart: boolean; - } - interface TargetCreatedEventDataType { - targetInfo: TargetInfo; - } - interface AttachedToTargetEventDataType { - sessionId: SessionID; - targetInfo: TargetInfo; - waitingForDebugger: boolean; - } - } - namespace DOMStorage { - type SerializedStorageKey = string; - /** - * DOM Storage identifier. - */ - interface StorageId { - /** - * Security origin for the storage. - */ - securityOrigin?: string | undefined; - /** - * Represents a key by which DOM Storage keys its CachedStorageAreas - */ - storageKey?: SerializedStorageKey | undefined; - /** - * Whether the storage is local storage (not session storage). - */ - isLocalStorage: boolean; - } - /** - * DOM Storage item. - */ - type Item = string[]; - interface ClearParameterType { - storageId: StorageId; - } - interface GetDOMStorageItemsParameterType { - storageId: StorageId; - } - interface RemoveDOMStorageItemParameterType { - storageId: StorageId; - key: string; - } - interface SetDOMStorageItemParameterType { - storageId: StorageId; - key: string; - value: string; - } - interface GetDOMStorageItemsReturnType { - entries: Item[]; - } - interface DomStorageItemAddedEventDataType { - storageId: StorageId; - key: string; - newValue: string; - } - interface DomStorageItemRemovedEventDataType { - storageId: StorageId; - key: string; - } - interface DomStorageItemUpdatedEventDataType { - storageId: StorageId; - key: string; - oldValue: string; - newValue: string; - } - interface DomStorageItemsClearedEventDataType { - storageId: StorageId; - } - } - namespace Storage { - type SerializedStorageKey = string; - interface GetStorageKeyParameterType { - frameId?: string | undefined; - } - interface GetStorageKeyReturnType { - storageKey: SerializedStorageKey; - } - } - interface Session { - /** - * Posts a message to the inspector back-end. `callback` will be notified when - * a response is received. `callback` is a function that accepts two optional - * arguments: error and message-specific result. - * - * ```js - * session.post('Runtime.evaluate', { expression: '2 + 2' }, - * (error, { result }) => console.log(result)); - * // Output: { type: 'number', value: 4, description: '4' } - * ``` - * - * The latest version of the V8 inspector protocol is published on the - * [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). - * - * Node.js inspector supports all the Chrome DevTools Protocol domains declared - * by V8. Chrome DevTools Protocol domain provides an interface for interacting - * with one of the runtime agents used to inspect the application state and listen - * to the run-time events. - */ - post(method: string, callback?: (err: Error | null, params?: object) => void): void; - post(method: string, params?: object, callback?: (err: Error | null, params?: object) => void): void; - /** - * Returns supported domains. - */ - post(method: "Schema.getDomains", callback?: (err: Error | null, params: Schema.GetDomainsReturnType) => void): void; - /** - * Evaluates expression on global object. - */ - post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType, callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; - post(method: "Runtime.evaluate", callback?: (err: Error | null, params: Runtime.EvaluateReturnType) => void): void; - /** - * Add handler to promise with given promise object id. - */ - post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType, callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; - post(method: "Runtime.awaitPromise", callback?: (err: Error | null, params: Runtime.AwaitPromiseReturnType) => void): void; - /** - * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. - */ - post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType, callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; - post(method: "Runtime.callFunctionOn", callback?: (err: Error | null, params: Runtime.CallFunctionOnReturnType) => void): void; - /** - * Returns properties of a given object. Object group of the result is inherited from the target object. - */ - post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType, callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; - post(method: "Runtime.getProperties", callback?: (err: Error | null, params: Runtime.GetPropertiesReturnType) => void): void; - /** - * Releases remote object with given id. - */ - post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.releaseObject", callback?: (err: Error | null) => void): void; - /** - * Releases all remote objects that belong to a given group. - */ - post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.releaseObjectGroup", callback?: (err: Error | null) => void): void; - /** - * Tells inspected instance to run if it was waiting for debugger to attach. - */ - post(method: "Runtime.runIfWaitingForDebugger", callback?: (err: Error | null) => void): void; - /** - * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. - */ - post(method: "Runtime.enable", callback?: (err: Error | null) => void): void; - /** - * Disables reporting of execution contexts creation. - */ - post(method: "Runtime.disable", callback?: (err: Error | null) => void): void; - /** - * Discards collected exceptions and console API calls. - */ - post(method: "Runtime.discardConsoleEntries", callback?: (err: Error | null) => void): void; - /** - * @experimental - */ - post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType, callback?: (err: Error | null) => void): void; - post(method: "Runtime.setCustomObjectFormatterEnabled", callback?: (err: Error | null) => void): void; - /** - * Compiles expression. - */ - post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType, callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; - post(method: "Runtime.compileScript", callback?: (err: Error | null, params: Runtime.CompileScriptReturnType) => void): void; - /** - * Runs script with given id in a given context. - */ - post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType, callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; - post(method: "Runtime.runScript", callback?: (err: Error | null, params: Runtime.RunScriptReturnType) => void): void; - post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType, callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; - post(method: "Runtime.queryObjects", callback?: (err: Error | null, params: Runtime.QueryObjectsReturnType) => void): void; - /** - * Returns all let, const and class variables from global scope. - */ - post( - method: "Runtime.globalLexicalScopeNames", - params?: Runtime.GlobalLexicalScopeNamesParameterType, - callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void - ): void; - post(method: "Runtime.globalLexicalScopeNames", callback?: (err: Error | null, params: Runtime.GlobalLexicalScopeNamesReturnType) => void): void; - /** - * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. - */ - post(method: "Debugger.enable", callback?: (err: Error | null, params: Debugger.EnableReturnType) => void): void; - /** - * Disables debugger for given page. - */ - post(method: "Debugger.disable", callback?: (err: Error | null) => void): void; - /** - * Activates / deactivates all breakpoints on the page. - */ - post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBreakpointsActive", callback?: (err: Error | null) => void): void; - /** - * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). - */ - post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setSkipAllPauses", callback?: (err: Error | null) => void): void; - /** - * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. - */ - post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; - post(method: "Debugger.setBreakpointByUrl", callback?: (err: Error | null, params: Debugger.SetBreakpointByUrlReturnType) => void): void; - /** - * Sets JavaScript breakpoint at a given location. - */ - post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType, callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; - post(method: "Debugger.setBreakpoint", callback?: (err: Error | null, params: Debugger.SetBreakpointReturnType) => void): void; - /** - * Removes JavaScript breakpoint. - */ - post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.removeBreakpoint", callback?: (err: Error | null) => void): void; - /** - * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. - */ - post( - method: "Debugger.getPossibleBreakpoints", - params?: Debugger.GetPossibleBreakpointsParameterType, - callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void - ): void; - post(method: "Debugger.getPossibleBreakpoints", callback?: (err: Error | null, params: Debugger.GetPossibleBreakpointsReturnType) => void): void; - /** - * Continues execution until specific location is reached. - */ - post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.continueToLocation", callback?: (err: Error | null) => void): void; - /** - * @experimental - */ - post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.pauseOnAsyncCall", callback?: (err: Error | null) => void): void; - /** - * Steps over the statement. - */ - post(method: "Debugger.stepOver", callback?: (err: Error | null) => void): void; - /** - * Steps into the function call. - */ - post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.stepInto", callback?: (err: Error | null) => void): void; - /** - * Steps out of the function call. - */ - post(method: "Debugger.stepOut", callback?: (err: Error | null) => void): void; - /** - * Stops on the next JavaScript statement. - */ - post(method: "Debugger.pause", callback?: (err: Error | null) => void): void; - /** - * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. - * @experimental - */ - post(method: "Debugger.scheduleStepIntoAsync", callback?: (err: Error | null) => void): void; - /** - * Resumes JavaScript execution. - */ - post(method: "Debugger.resume", callback?: (err: Error | null) => void): void; - /** - * Returns stack trace with given stackTraceId. - * @experimental - */ - post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType, callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; - post(method: "Debugger.getStackTrace", callback?: (err: Error | null, params: Debugger.GetStackTraceReturnType) => void): void; - /** - * Searches for given string in script content. - */ - post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType, callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; - post(method: "Debugger.searchInContent", callback?: (err: Error | null, params: Debugger.SearchInContentReturnType) => void): void; - /** - * Edits JavaScript source live. - */ - post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; - post(method: "Debugger.setScriptSource", callback?: (err: Error | null, params: Debugger.SetScriptSourceReturnType) => void): void; - /** - * Restarts particular call frame from the beginning. - */ - post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType, callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; - post(method: "Debugger.restartFrame", callback?: (err: Error | null, params: Debugger.RestartFrameReturnType) => void): void; - /** - * Returns source for the script with given id. - */ - post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType, callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; - post(method: "Debugger.getScriptSource", callback?: (err: Error | null, params: Debugger.GetScriptSourceReturnType) => void): void; - /** - * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. - */ - post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setPauseOnExceptions", callback?: (err: Error | null) => void): void; - /** - * Evaluates expression on a given call frame. - */ - post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType, callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; - post(method: "Debugger.evaluateOnCallFrame", callback?: (err: Error | null, params: Debugger.EvaluateOnCallFrameReturnType) => void): void; - /** - * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. - */ - post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setVariableValue", callback?: (err: Error | null) => void): void; - /** - * Changes return value in top frame. Available only at return break position. - * @experimental - */ - post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setReturnValue", callback?: (err: Error | null) => void): void; - /** - * Enables or disables async call stacks tracking. - */ - post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setAsyncCallStackDepth", callback?: (err: Error | null) => void): void; - /** - * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. - * @experimental - */ - post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBlackboxPatterns", callback?: (err: Error | null) => void): void; - /** - * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. - * @experimental - */ - post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType, callback?: (err: Error | null) => void): void; - post(method: "Debugger.setBlackboxedRanges", callback?: (err: Error | null) => void): void; - /** - * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. - */ - post(method: "Console.enable", callback?: (err: Error | null) => void): void; - /** - * Disables console domain, prevents further console messages from being reported to the client. - */ - post(method: "Console.disable", callback?: (err: Error | null) => void): void; - /** - * Does nothing. - */ - post(method: "Console.clearMessages", callback?: (err: Error | null) => void): void; - post(method: "Profiler.enable", callback?: (err: Error | null) => void): void; - post(method: "Profiler.disable", callback?: (err: Error | null) => void): void; - /** - * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. - */ - post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType, callback?: (err: Error | null) => void): void; - post(method: "Profiler.setSamplingInterval", callback?: (err: Error | null) => void): void; - post(method: "Profiler.start", callback?: (err: Error | null) => void): void; - post(method: "Profiler.stop", callback?: (err: Error | null, params: Profiler.StopReturnType) => void): void; - /** - * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. - */ - post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType, callback?: (err: Error | null) => void): void; - post(method: "Profiler.startPreciseCoverage", callback?: (err: Error | null) => void): void; - /** - * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. - */ - post(method: "Profiler.stopPreciseCoverage", callback?: (err: Error | null) => void): void; - /** - * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. - */ - post(method: "Profiler.takePreciseCoverage", callback?: (err: Error | null, params: Profiler.TakePreciseCoverageReturnType) => void): void; - /** - * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. - */ - post(method: "Profiler.getBestEffortCoverage", callback?: (err: Error | null, params: Profiler.GetBestEffortCoverageReturnType) => void): void; - post(method: "HeapProfiler.enable", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.disable", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.startTrackingHeapObjects", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.stopTrackingHeapObjects", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.takeHeapSnapshot", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.collectGarbage", callback?: (err: Error | null) => void): void; - post( - method: "HeapProfiler.getObjectByHeapObjectId", - params?: HeapProfiler.GetObjectByHeapObjectIdParameterType, - callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void - ): void; - post(method: "HeapProfiler.getObjectByHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetObjectByHeapObjectIdReturnType) => void): void; - /** - * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). - */ - post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.addInspectedHeapObject", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType, callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; - post(method: "HeapProfiler.getHeapObjectId", callback?: (err: Error | null, params: HeapProfiler.GetHeapObjectIdReturnType) => void): void; - post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType, callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.startSampling", callback?: (err: Error | null) => void): void; - post(method: "HeapProfiler.stopSampling", callback?: (err: Error | null, params: HeapProfiler.StopSamplingReturnType) => void): void; - post(method: "HeapProfiler.getSamplingProfile", callback?: (err: Error | null, params: HeapProfiler.GetSamplingProfileReturnType) => void): void; - /** - * Read a chunk of the stream - */ - post(method: "IO.read", params?: IO.ReadParameterType, callback?: (err: Error | null, params: IO.ReadReturnType) => void): void; - post(method: "IO.read", callback?: (err: Error | null, params: IO.ReadReturnType) => void): void; - post(method: "IO.close", params?: IO.CloseParameterType, callback?: (err: Error | null) => void): void; - post(method: "IO.close", callback?: (err: Error | null) => void): void; - /** - * Disables network tracking, prevents network events from being sent to the client. - */ - post(method: "Network.disable", callback?: (err: Error | null) => void): void; - /** - * Enables network tracking, network events will now be delivered to the client. - */ - post(method: "Network.enable", params?: Network.EnableParameterType, callback?: (err: Error | null) => void): void; - post(method: "Network.enable", callback?: (err: Error | null) => void): void; - /** - * Returns post data sent with the request. Returns an error when no data was sent with the request. - */ - post(method: "Network.getRequestPostData", params?: Network.GetRequestPostDataParameterType, callback?: (err: Error | null, params: Network.GetRequestPostDataReturnType) => void): void; - post(method: "Network.getRequestPostData", callback?: (err: Error | null, params: Network.GetRequestPostDataReturnType) => void): void; - /** - * Returns content served for the given request. - */ - post(method: "Network.getResponseBody", params?: Network.GetResponseBodyParameterType, callback?: (err: Error | null, params: Network.GetResponseBodyReturnType) => void): void; - post(method: "Network.getResponseBody", callback?: (err: Error | null, params: Network.GetResponseBodyReturnType) => void): void; - /** - * Enables streaming of the response for the given requestId. - * If enabled, the dataReceived event contains the data that was received during streaming. - * @experimental - */ - post( - method: "Network.streamResourceContent", - params?: Network.StreamResourceContentParameterType, - callback?: (err: Error | null, params: Network.StreamResourceContentReturnType) => void - ): void; - post(method: "Network.streamResourceContent", callback?: (err: Error | null, params: Network.StreamResourceContentReturnType) => void): void; - /** - * Fetches the resource and returns the content. - */ - post(method: "Network.loadNetworkResource", params?: Network.LoadNetworkResourceParameterType, callback?: (err: Error | null, params: Network.LoadNetworkResourceReturnType) => void): void; - post(method: "Network.loadNetworkResource", callback?: (err: Error | null, params: Network.LoadNetworkResourceReturnType) => void): void; - /** - * Enable the NodeRuntime events except by `NodeRuntime.waitingForDisconnect`. - */ - post(method: "NodeRuntime.enable", callback?: (err: Error | null) => void): void; - /** - * Disable NodeRuntime events - */ - post(method: "NodeRuntime.disable", callback?: (err: Error | null) => void): void; - /** - * Enable the `NodeRuntime.waitingForDisconnect`. - */ - post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType, callback?: (err: Error | null) => void): void; - post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", callback?: (err: Error | null) => void): void; - /** - * Gets supported tracing categories. - */ - post(method: "NodeTracing.getCategories", callback?: (err: Error | null, params: NodeTracing.GetCategoriesReturnType) => void): void; - /** - * Start trace events collection. - */ - post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType, callback?: (err: Error | null) => void): void; - post(method: "NodeTracing.start", callback?: (err: Error | null) => void): void; - /** - * Stop trace events collection. Remaining collected events will be sent as a sequence of - * dataCollected events followed by tracingComplete event. - */ - post(method: "NodeTracing.stop", callback?: (err: Error | null) => void): void; - /** - * Sends protocol message over session with given id. - */ - post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType, callback?: (err: Error | null) => void): void; - post(method: "NodeWorker.sendMessageToWorker", callback?: (err: Error | null) => void): void; - /** - * Instructs the inspector to attach to running workers. Will also attach to new workers - * as they start - */ - post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType, callback?: (err: Error | null) => void): void; - post(method: "NodeWorker.enable", callback?: (err: Error | null) => void): void; - /** - * Detaches from all running workers and disables attaching to new workers as they are started. - */ - post(method: "NodeWorker.disable", callback?: (err: Error | null) => void): void; - /** - * Detached from the worker with given sessionId. - */ - post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType, callback?: (err: Error | null) => void): void; - post(method: "NodeWorker.detach", callback?: (err: Error | null) => void): void; - post(method: "Target.setAutoAttach", params?: Target.SetAutoAttachParameterType, callback?: (err: Error | null) => void): void; - post(method: "Target.setAutoAttach", callback?: (err: Error | null) => void): void; - post(method: "DOMStorage.clear", params?: DOMStorage.ClearParameterType, callback?: (err: Error | null) => void): void; - post(method: "DOMStorage.clear", callback?: (err: Error | null) => void): void; - /** - * Disables storage tracking, prevents storage events from being sent to the client. - */ - post(method: "DOMStorage.disable", callback?: (err: Error | null) => void): void; - /** - * Enables storage tracking, storage events will now be delivered to the client. - */ - post(method: "DOMStorage.enable", callback?: (err: Error | null) => void): void; - post( - method: "DOMStorage.getDOMStorageItems", - params?: DOMStorage.GetDOMStorageItemsParameterType, - callback?: (err: Error | null, params: DOMStorage.GetDOMStorageItemsReturnType) => void - ): void; - post(method: "DOMStorage.getDOMStorageItems", callback?: (err: Error | null, params: DOMStorage.GetDOMStorageItemsReturnType) => void): void; - post(method: "DOMStorage.removeDOMStorageItem", params?: DOMStorage.RemoveDOMStorageItemParameterType, callback?: (err: Error | null) => void): void; - post(method: "DOMStorage.removeDOMStorageItem", callback?: (err: Error | null) => void): void; - post(method: "DOMStorage.setDOMStorageItem", params?: DOMStorage.SetDOMStorageItemParameterType, callback?: (err: Error | null) => void): void; - post(method: "DOMStorage.setDOMStorageItem", callback?: (err: Error | null) => void): void; - /** - * @experimental - */ - post(method: "Storage.getStorageKey", params?: Storage.GetStorageKeyParameterType, callback?: (err: Error | null, params: Storage.GetStorageKeyReturnType) => void): void; - post(method: "Storage.getStorageKey", callback?: (err: Error | null, params: Storage.GetStorageKeyReturnType) => void): void; - addListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - addListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - addListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - addListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - addListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - addListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - addListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - addListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - addListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - addListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - addListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - addListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - addListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - addListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "inspectorNotification", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextsCleared"): boolean; - emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; - emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; - emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; - emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; - emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; - emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; - emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; - emit(event: "Debugger.paused", message: InspectorNotification): boolean; - emit(event: "Debugger.resumed"): boolean; - emit(event: "Console.messageAdded", message: InspectorNotification): boolean; - emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; - emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.resetProfiles"): boolean; - emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; - emit(event: "Network.requestWillBeSent", message: InspectorNotification): boolean; - emit(event: "Network.responseReceived", message: InspectorNotification): boolean; - emit(event: "Network.loadingFailed", message: InspectorNotification): boolean; - emit(event: "Network.loadingFinished", message: InspectorNotification): boolean; - emit(event: "Network.dataReceived", message: InspectorNotification): boolean; - emit(event: "Network.webSocketCreated", message: InspectorNotification): boolean; - emit(event: "Network.webSocketClosed", message: InspectorNotification): boolean; - emit(event: "Network.webSocketHandshakeResponseReceived", message: InspectorNotification): boolean; - emit(event: "NodeRuntime.waitingForDisconnect"): boolean; - emit(event: "NodeRuntime.waitingForDebugger"): boolean; - emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; - emit(event: "NodeTracing.tracingComplete"): boolean; - emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; - emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; - emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; - emit(event: "Target.targetCreated", message: InspectorNotification): boolean; - emit(event: "Target.attachedToTarget", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemAdded", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemRemoved", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemUpdated", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemsCleared", message: InspectorNotification): boolean; - on(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - on(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - on(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - on(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - on(event: "HeapProfiler.resetProfiles", listener: () => void): this; - on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - on(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - on(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - on(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - on(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - on(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - on(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - on(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - on(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - on(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - on(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - on(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - on(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - once(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - once(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - once(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - once(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - once(event: "HeapProfiler.resetProfiles", listener: () => void): this; - once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - once(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - once(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - once(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - once(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - once(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - once(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - once(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - once(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - once(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - once(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - once(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - once(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - prependListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - prependListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - prependListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - prependListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - prependListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - prependListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - prependListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - prependListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - prependListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - prependOnceListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - prependOnceListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - prependOnceListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - prependOnceListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - prependOnceListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - prependOnceListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - prependOnceListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - prependOnceListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - } -} -declare module "node:inspector/promises" { - export { - Schema, - Runtime, - Debugger, - Console, - Profiler, - HeapProfiler, - IO, - Network, - NodeRuntime, - NodeTracing, - NodeWorker, - Target, - DOMStorage, - Storage, - } from 'inspector'; -} -declare module "node:inspector/promises" { - import { - InspectorNotification, - Schema, - Runtime, - Debugger, - Console, - Profiler, - HeapProfiler, - IO, - Network, - NodeRuntime, - NodeTracing, - NodeWorker, - Target, - DOMStorage, - Storage, - } from "inspector"; - /** - * The `inspector.Session` is used for dispatching messages to the V8 inspector - * back-end and receiving message responses and notifications. - * @since v19.0.0 - */ - interface Session { - /** - * Posts a message to the inspector back-end. - * - * ```js - * import { Session } from 'node:inspector/promises'; - * try { - * const session = new Session(); - * session.connect(); - * const result = await session.post('Runtime.evaluate', { expression: '2 + 2' }); - * console.log(result); - * } catch (error) { - * console.error(error); - * } - * // Output: { result: { type: 'number', value: 4, description: '4' } } - * ``` - * - * The latest version of the V8 inspector protocol is published on the - * [Chrome DevTools Protocol Viewer](https://chromedevtools.github.io/devtools-protocol/v8/). - * - * Node.js inspector supports all the Chrome DevTools Protocol domains declared - * by V8. Chrome DevTools Protocol domain provides an interface for interacting - * with one of the runtime agents used to inspect the application state and listen - * to the run-time events. - */ - post(method: string, params?: object): Promise; - /** - * Returns supported domains. - */ - post(method: "Schema.getDomains"): Promise; - /** - * Evaluates expression on global object. - */ - post(method: "Runtime.evaluate", params?: Runtime.EvaluateParameterType): Promise; - /** - * Add handler to promise with given promise object id. - */ - post(method: "Runtime.awaitPromise", params?: Runtime.AwaitPromiseParameterType): Promise; - /** - * Calls function with given declaration on the given object. Object group of the result is inherited from the target object. - */ - post(method: "Runtime.callFunctionOn", params?: Runtime.CallFunctionOnParameterType): Promise; - /** - * Returns properties of a given object. Object group of the result is inherited from the target object. - */ - post(method: "Runtime.getProperties", params?: Runtime.GetPropertiesParameterType): Promise; - /** - * Releases remote object with given id. - */ - post(method: "Runtime.releaseObject", params?: Runtime.ReleaseObjectParameterType): Promise; - /** - * Releases all remote objects that belong to a given group. - */ - post(method: "Runtime.releaseObjectGroup", params?: Runtime.ReleaseObjectGroupParameterType): Promise; - /** - * Tells inspected instance to run if it was waiting for debugger to attach. - */ - post(method: "Runtime.runIfWaitingForDebugger"): Promise; - /** - * Enables reporting of execution contexts creation by means of executionContextCreated event. When the reporting gets enabled the event will be sent immediately for each existing execution context. - */ - post(method: "Runtime.enable"): Promise; - /** - * Disables reporting of execution contexts creation. - */ - post(method: "Runtime.disable"): Promise; - /** - * Discards collected exceptions and console API calls. - */ - post(method: "Runtime.discardConsoleEntries"): Promise; - /** - * @experimental - */ - post(method: "Runtime.setCustomObjectFormatterEnabled", params?: Runtime.SetCustomObjectFormatterEnabledParameterType): Promise; - /** - * Compiles expression. - */ - post(method: "Runtime.compileScript", params?: Runtime.CompileScriptParameterType): Promise; - /** - * Runs script with given id in a given context. - */ - post(method: "Runtime.runScript", params?: Runtime.RunScriptParameterType): Promise; - post(method: "Runtime.queryObjects", params?: Runtime.QueryObjectsParameterType): Promise; - /** - * Returns all let, const and class variables from global scope. - */ - post(method: "Runtime.globalLexicalScopeNames", params?: Runtime.GlobalLexicalScopeNamesParameterType): Promise; - /** - * Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received. - */ - post(method: "Debugger.enable"): Promise; - /** - * Disables debugger for given page. - */ - post(method: "Debugger.disable"): Promise; - /** - * Activates / deactivates all breakpoints on the page. - */ - post(method: "Debugger.setBreakpointsActive", params?: Debugger.SetBreakpointsActiveParameterType): Promise; - /** - * Makes page not interrupt on any pauses (breakpoint, exception, dom exception etc). - */ - post(method: "Debugger.setSkipAllPauses", params?: Debugger.SetSkipAllPausesParameterType): Promise; - /** - * Sets JavaScript breakpoint at given location specified either by URL or URL regex. Once this command is issued, all existing parsed scripts will have breakpoints resolved and returned in locations property. Further matching script parsing will result in subsequent breakpointResolved events issued. This logical breakpoint will survive page reloads. - */ - post(method: "Debugger.setBreakpointByUrl", params?: Debugger.SetBreakpointByUrlParameterType): Promise; - /** - * Sets JavaScript breakpoint at a given location. - */ - post(method: "Debugger.setBreakpoint", params?: Debugger.SetBreakpointParameterType): Promise; - /** - * Removes JavaScript breakpoint. - */ - post(method: "Debugger.removeBreakpoint", params?: Debugger.RemoveBreakpointParameterType): Promise; - /** - * Returns possible locations for breakpoint. scriptId in start and end range locations should be the same. - */ - post(method: "Debugger.getPossibleBreakpoints", params?: Debugger.GetPossibleBreakpointsParameterType): Promise; - /** - * Continues execution until specific location is reached. - */ - post(method: "Debugger.continueToLocation", params?: Debugger.ContinueToLocationParameterType): Promise; - /** - * @experimental - */ - post(method: "Debugger.pauseOnAsyncCall", params?: Debugger.PauseOnAsyncCallParameterType): Promise; - /** - * Steps over the statement. - */ - post(method: "Debugger.stepOver"): Promise; - /** - * Steps into the function call. - */ - post(method: "Debugger.stepInto", params?: Debugger.StepIntoParameterType): Promise; - /** - * Steps out of the function call. - */ - post(method: "Debugger.stepOut"): Promise; - /** - * Stops on the next JavaScript statement. - */ - post(method: "Debugger.pause"): Promise; - /** - * This method is deprecated - use Debugger.stepInto with breakOnAsyncCall and Debugger.pauseOnAsyncTask instead. Steps into next scheduled async task if any is scheduled before next pause. Returns success when async task is actually scheduled, returns error if no task were scheduled or another scheduleStepIntoAsync was called. - * @experimental - */ - post(method: "Debugger.scheduleStepIntoAsync"): Promise; - /** - * Resumes JavaScript execution. - */ - post(method: "Debugger.resume"): Promise; - /** - * Returns stack trace with given stackTraceId. - * @experimental - */ - post(method: "Debugger.getStackTrace", params?: Debugger.GetStackTraceParameterType): Promise; - /** - * Searches for given string in script content. - */ - post(method: "Debugger.searchInContent", params?: Debugger.SearchInContentParameterType): Promise; - /** - * Edits JavaScript source live. - */ - post(method: "Debugger.setScriptSource", params?: Debugger.SetScriptSourceParameterType): Promise; - /** - * Restarts particular call frame from the beginning. - */ - post(method: "Debugger.restartFrame", params?: Debugger.RestartFrameParameterType): Promise; - /** - * Returns source for the script with given id. - */ - post(method: "Debugger.getScriptSource", params?: Debugger.GetScriptSourceParameterType): Promise; - /** - * Defines pause on exceptions state. Can be set to stop on all exceptions, uncaught exceptions or no exceptions. Initial pause on exceptions state is none. - */ - post(method: "Debugger.setPauseOnExceptions", params?: Debugger.SetPauseOnExceptionsParameterType): Promise; - /** - * Evaluates expression on a given call frame. - */ - post(method: "Debugger.evaluateOnCallFrame", params?: Debugger.EvaluateOnCallFrameParameterType): Promise; - /** - * Changes value of variable in a callframe. Object-based scopes are not supported and must be mutated manually. - */ - post(method: "Debugger.setVariableValue", params?: Debugger.SetVariableValueParameterType): Promise; - /** - * Changes return value in top frame. Available only at return break position. - * @experimental - */ - post(method: "Debugger.setReturnValue", params?: Debugger.SetReturnValueParameterType): Promise; - /** - * Enables or disables async call stacks tracking. - */ - post(method: "Debugger.setAsyncCallStackDepth", params?: Debugger.SetAsyncCallStackDepthParameterType): Promise; - /** - * Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in scripts with url matching one of the patterns. VM will try to leave blackboxed script by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. - * @experimental - */ - post(method: "Debugger.setBlackboxPatterns", params?: Debugger.SetBlackboxPatternsParameterType): Promise; - /** - * Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. Positions array contains positions where blackbox state is changed. First interval isn't blackboxed. Array should be sorted. - * @experimental - */ - post(method: "Debugger.setBlackboxedRanges", params?: Debugger.SetBlackboxedRangesParameterType): Promise; - /** - * Enables console domain, sends the messages collected so far to the client by means of the messageAdded notification. - */ - post(method: "Console.enable"): Promise; - /** - * Disables console domain, prevents further console messages from being reported to the client. - */ - post(method: "Console.disable"): Promise; - /** - * Does nothing. - */ - post(method: "Console.clearMessages"): Promise; - post(method: "Profiler.enable"): Promise; - post(method: "Profiler.disable"): Promise; - /** - * Changes CPU profiler sampling interval. Must be called before CPU profiles recording started. - */ - post(method: "Profiler.setSamplingInterval", params?: Profiler.SetSamplingIntervalParameterType): Promise; - post(method: "Profiler.start"): Promise; - post(method: "Profiler.stop"): Promise; - /** - * Enable precise code coverage. Coverage data for JavaScript executed before enabling precise code coverage may be incomplete. Enabling prevents running optimized code and resets execution counters. - */ - post(method: "Profiler.startPreciseCoverage", params?: Profiler.StartPreciseCoverageParameterType): Promise; - /** - * Disable precise code coverage. Disabling releases unnecessary execution count records and allows executing optimized code. - */ - post(method: "Profiler.stopPreciseCoverage"): Promise; - /** - * Collect coverage data for the current isolate, and resets execution counters. Precise code coverage needs to have started. - */ - post(method: "Profiler.takePreciseCoverage"): Promise; - /** - * Collect coverage data for the current isolate. The coverage data may be incomplete due to garbage collection. - */ - post(method: "Profiler.getBestEffortCoverage"): Promise; - post(method: "HeapProfiler.enable"): Promise; - post(method: "HeapProfiler.disable"): Promise; - post(method: "HeapProfiler.startTrackingHeapObjects", params?: HeapProfiler.StartTrackingHeapObjectsParameterType): Promise; - post(method: "HeapProfiler.stopTrackingHeapObjects", params?: HeapProfiler.StopTrackingHeapObjectsParameterType): Promise; - post(method: "HeapProfiler.takeHeapSnapshot", params?: HeapProfiler.TakeHeapSnapshotParameterType): Promise; - post(method: "HeapProfiler.collectGarbage"): Promise; - post(method: "HeapProfiler.getObjectByHeapObjectId", params?: HeapProfiler.GetObjectByHeapObjectIdParameterType): Promise; - /** - * Enables console to refer to the node with given id via $x (see Command Line API for more details $x functions). - */ - post(method: "HeapProfiler.addInspectedHeapObject", params?: HeapProfiler.AddInspectedHeapObjectParameterType): Promise; - post(method: "HeapProfiler.getHeapObjectId", params?: HeapProfiler.GetHeapObjectIdParameterType): Promise; - post(method: "HeapProfiler.startSampling", params?: HeapProfiler.StartSamplingParameterType): Promise; - post(method: "HeapProfiler.stopSampling"): Promise; - post(method: "HeapProfiler.getSamplingProfile"): Promise; - /** - * Read a chunk of the stream - */ - post(method: "IO.read", params?: IO.ReadParameterType): Promise; - post(method: "IO.close", params?: IO.CloseParameterType): Promise; - /** - * Disables network tracking, prevents network events from being sent to the client. - */ - post(method: "Network.disable"): Promise; - /** - * Enables network tracking, network events will now be delivered to the client. - */ - post(method: "Network.enable", params?: Network.EnableParameterType): Promise; - /** - * Returns post data sent with the request. Returns an error when no data was sent with the request. - */ - post(method: "Network.getRequestPostData", params?: Network.GetRequestPostDataParameterType): Promise; - /** - * Returns content served for the given request. - */ - post(method: "Network.getResponseBody", params?: Network.GetResponseBodyParameterType): Promise; - /** - * Enables streaming of the response for the given requestId. - * If enabled, the dataReceived event contains the data that was received during streaming. - * @experimental - */ - post(method: "Network.streamResourceContent", params?: Network.StreamResourceContentParameterType): Promise; - /** - * Fetches the resource and returns the content. - */ - post(method: "Network.loadNetworkResource", params?: Network.LoadNetworkResourceParameterType): Promise; - /** - * Enable the NodeRuntime events except by `NodeRuntime.waitingForDisconnect`. - */ - post(method: "NodeRuntime.enable"): Promise; - /** - * Disable NodeRuntime events - */ - post(method: "NodeRuntime.disable"): Promise; - /** - * Enable the `NodeRuntime.waitingForDisconnect`. - */ - post(method: "NodeRuntime.notifyWhenWaitingForDisconnect", params?: NodeRuntime.NotifyWhenWaitingForDisconnectParameterType): Promise; - /** - * Gets supported tracing categories. - */ - post(method: "NodeTracing.getCategories"): Promise; - /** - * Start trace events collection. - */ - post(method: "NodeTracing.start", params?: NodeTracing.StartParameterType): Promise; - /** - * Stop trace events collection. Remaining collected events will be sent as a sequence of - * dataCollected events followed by tracingComplete event. - */ - post(method: "NodeTracing.stop"): Promise; - /** - * Sends protocol message over session with given id. - */ - post(method: "NodeWorker.sendMessageToWorker", params?: NodeWorker.SendMessageToWorkerParameterType): Promise; - /** - * Instructs the inspector to attach to running workers. Will also attach to new workers - * as they start - */ - post(method: "NodeWorker.enable", params?: NodeWorker.EnableParameterType): Promise; - /** - * Detaches from all running workers and disables attaching to new workers as they are started. - */ - post(method: "NodeWorker.disable"): Promise; - /** - * Detached from the worker with given sessionId. - */ - post(method: "NodeWorker.detach", params?: NodeWorker.DetachParameterType): Promise; - post(method: "Target.setAutoAttach", params?: Target.SetAutoAttachParameterType): Promise; - post(method: "DOMStorage.clear", params?: DOMStorage.ClearParameterType): Promise; - /** - * Disables storage tracking, prevents storage events from being sent to the client. - */ - post(method: "DOMStorage.disable"): Promise; - /** - * Enables storage tracking, storage events will now be delivered to the client. - */ - post(method: "DOMStorage.enable"): Promise; - post(method: "DOMStorage.getDOMStorageItems", params?: DOMStorage.GetDOMStorageItemsParameterType): Promise; - post(method: "DOMStorage.removeDOMStorageItem", params?: DOMStorage.RemoveDOMStorageItemParameterType): Promise; - post(method: "DOMStorage.setDOMStorageItem", params?: DOMStorage.SetDOMStorageItemParameterType): Promise; - /** - * @experimental - */ - post(method: "Storage.getStorageKey", params?: Storage.GetStorageKeyParameterType): Promise; - addListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - addListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - addListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - addListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - addListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - addListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - addListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - addListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - addListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - addListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - addListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - addListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - addListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - addListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - addListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - addListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - addListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - addListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - addListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - addListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - addListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - addListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - addListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - addListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - addListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - addListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - addListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - addListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - addListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - addListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - addListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - addListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - addListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - addListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - addListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - addListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - addListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - addListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - addListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - addListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - emit(event: string | symbol, ...args: any[]): boolean; - emit(event: "inspectorNotification", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextCreated", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextDestroyed", message: InspectorNotification): boolean; - emit(event: "Runtime.executionContextsCleared"): boolean; - emit(event: "Runtime.exceptionThrown", message: InspectorNotification): boolean; - emit(event: "Runtime.exceptionRevoked", message: InspectorNotification): boolean; - emit(event: "Runtime.consoleAPICalled", message: InspectorNotification): boolean; - emit(event: "Runtime.inspectRequested", message: InspectorNotification): boolean; - emit(event: "Debugger.scriptParsed", message: InspectorNotification): boolean; - emit(event: "Debugger.scriptFailedToParse", message: InspectorNotification): boolean; - emit(event: "Debugger.breakpointResolved", message: InspectorNotification): boolean; - emit(event: "Debugger.paused", message: InspectorNotification): boolean; - emit(event: "Debugger.resumed"): boolean; - emit(event: "Console.messageAdded", message: InspectorNotification): boolean; - emit(event: "Profiler.consoleProfileStarted", message: InspectorNotification): boolean; - emit(event: "Profiler.consoleProfileFinished", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.addHeapSnapshotChunk", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.resetProfiles"): boolean; - emit(event: "HeapProfiler.reportHeapSnapshotProgress", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.lastSeenObjectId", message: InspectorNotification): boolean; - emit(event: "HeapProfiler.heapStatsUpdate", message: InspectorNotification): boolean; - emit(event: "Network.requestWillBeSent", message: InspectorNotification): boolean; - emit(event: "Network.responseReceived", message: InspectorNotification): boolean; - emit(event: "Network.loadingFailed", message: InspectorNotification): boolean; - emit(event: "Network.loadingFinished", message: InspectorNotification): boolean; - emit(event: "Network.dataReceived", message: InspectorNotification): boolean; - emit(event: "Network.webSocketCreated", message: InspectorNotification): boolean; - emit(event: "Network.webSocketClosed", message: InspectorNotification): boolean; - emit(event: "Network.webSocketHandshakeResponseReceived", message: InspectorNotification): boolean; - emit(event: "NodeRuntime.waitingForDisconnect"): boolean; - emit(event: "NodeRuntime.waitingForDebugger"): boolean; - emit(event: "NodeTracing.dataCollected", message: InspectorNotification): boolean; - emit(event: "NodeTracing.tracingComplete"): boolean; - emit(event: "NodeWorker.attachedToWorker", message: InspectorNotification): boolean; - emit(event: "NodeWorker.detachedFromWorker", message: InspectorNotification): boolean; - emit(event: "NodeWorker.receivedMessageFromWorker", message: InspectorNotification): boolean; - emit(event: "Target.targetCreated", message: InspectorNotification): boolean; - emit(event: "Target.attachedToTarget", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemAdded", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemRemoved", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemUpdated", message: InspectorNotification): boolean; - emit(event: "DOMStorage.domStorageItemsCleared", message: InspectorNotification): boolean; - on(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - on(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - on(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - on(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - on(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - on(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - on(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - on(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - on(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - on(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - on(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - on(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - on(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - on(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - on(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - on(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - on(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - on(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - on(event: "HeapProfiler.resetProfiles", listener: () => void): this; - on(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - on(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - on(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - on(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - on(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - on(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - on(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - on(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - on(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - on(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - on(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - on(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - on(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - on(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - on(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - on(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - on(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - on(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - on(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - on(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - on(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - once(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - once(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - once(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - once(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - once(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - once(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - once(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - once(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - once(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - once(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - once(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - once(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - once(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - once(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - once(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - once(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - once(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - once(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - once(event: "HeapProfiler.resetProfiles", listener: () => void): this; - once(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - once(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - once(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - once(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - once(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - once(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - once(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - once(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - once(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - once(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - once(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - once(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - once(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - once(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - once(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - once(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - once(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - once(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - once(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - once(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - once(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - prependListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - prependListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - prependListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - prependListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - prependListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - prependListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - prependListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - prependListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - prependListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - prependListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - prependListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - prependListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - prependListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - prependListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - prependListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - prependListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - prependListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - prependListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - prependListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - prependListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - prependListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - prependListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - prependListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - prependListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - prependListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - prependListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - prependListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - prependListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - prependListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: string, listener: (...args: any[]) => void): this; - /** - * Emitted when any notification from the V8 Inspector is received. - */ - prependOnceListener(event: "inspectorNotification", listener: (message: InspectorNotification) => void): this; - /** - * Issued when new execution context is created. - */ - prependOnceListener(event: "Runtime.executionContextCreated", listener: (message: InspectorNotification) => void): this; - /** - * Issued when execution context is destroyed. - */ - prependOnceListener(event: "Runtime.executionContextDestroyed", listener: (message: InspectorNotification) => void): this; - /** - * Issued when all executionContexts were cleared in browser - */ - prependOnceListener(event: "Runtime.executionContextsCleared", listener: () => void): this; - /** - * Issued when exception was thrown and unhandled. - */ - prependOnceListener(event: "Runtime.exceptionThrown", listener: (message: InspectorNotification) => void): this; - /** - * Issued when unhandled exception was revoked. - */ - prependOnceListener(event: "Runtime.exceptionRevoked", listener: (message: InspectorNotification) => void): this; - /** - * Issued when console API was called. - */ - prependOnceListener(event: "Runtime.consoleAPICalled", listener: (message: InspectorNotification) => void): this; - /** - * Issued when object should be inspected (for example, as a result of inspect() command line API call). - */ - prependOnceListener(event: "Runtime.inspectRequested", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine parses script. This event is also fired for all known and uncollected scripts upon enabling debugger. - */ - prependOnceListener(event: "Debugger.scriptParsed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when virtual machine fails to parse the script. - */ - prependOnceListener(event: "Debugger.scriptFailedToParse", listener: (message: InspectorNotification) => void): this; - /** - * Fired when breakpoint is resolved to an actual script and location. - */ - prependOnceListener(event: "Debugger.breakpointResolved", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine stopped on breakpoint or exception or any other stop criteria. - */ - prependOnceListener(event: "Debugger.paused", listener: (message: InspectorNotification) => void): this; - /** - * Fired when the virtual machine resumed execution. - */ - prependOnceListener(event: "Debugger.resumed", listener: () => void): this; - /** - * Issued when new console message is added. - */ - prependOnceListener(event: "Console.messageAdded", listener: (message: InspectorNotification) => void): this; - /** - * Sent when new profile recording is started using console.profile() call. - */ - prependOnceListener(event: "Profiler.consoleProfileStarted", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Profiler.consoleProfileFinished", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "HeapProfiler.addHeapSnapshotChunk", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "HeapProfiler.resetProfiles", listener: () => void): this; - prependOnceListener(event: "HeapProfiler.reportHeapSnapshotProgress", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend regularly sends a current value for last seen object id and corresponding timestamp. If the were changes in the heap since last event then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event. - */ - prependOnceListener(event: "HeapProfiler.lastSeenObjectId", listener: (message: InspectorNotification) => void): this; - /** - * If heap objects tracking has been started then backend may send update for one or more fragments - */ - prependOnceListener(event: "HeapProfiler.heapStatsUpdate", listener: (message: InspectorNotification) => void): this; - /** - * Fired when page is about to send HTTP request. - */ - prependOnceListener(event: "Network.requestWillBeSent", listener: (message: InspectorNotification) => void): this; - /** - * Fired when HTTP response is available. - */ - prependOnceListener(event: "Network.responseReceived", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Network.loadingFailed", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Network.loadingFinished", listener: (message: InspectorNotification) => void): this; - /** - * Fired when data chunk was received over the network. - */ - prependOnceListener(event: "Network.dataReceived", listener: (message: InspectorNotification) => void): this; - /** - * Fired upon WebSocket creation. - */ - prependOnceListener(event: "Network.webSocketCreated", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket is closed. - */ - prependOnceListener(event: "Network.webSocketClosed", listener: (message: InspectorNotification) => void): this; - /** - * Fired when WebSocket handshake response becomes available. - */ - prependOnceListener(event: "Network.webSocketHandshakeResponseReceived", listener: (message: InspectorNotification) => void): this; - /** - * This event is fired instead of `Runtime.executionContextDestroyed` when - * enabled. - * It is fired when the Node process finished all code execution and is - * waiting for all frontends to disconnect. - */ - prependOnceListener(event: "NodeRuntime.waitingForDisconnect", listener: () => void): this; - /** - * This event is fired when the runtime is waiting for the debugger. For - * example, when inspector.waitingForDebugger is called - */ - prependOnceListener(event: "NodeRuntime.waitingForDebugger", listener: () => void): this; - /** - * Contains an bucket of collected trace events. - */ - prependOnceListener(event: "NodeTracing.dataCollected", listener: (message: InspectorNotification) => void): this; - /** - * Signals that tracing is stopped and there is no trace buffers pending flush, all data were - * delivered via dataCollected events. - */ - prependOnceListener(event: "NodeTracing.tracingComplete", listener: () => void): this; - /** - * Issued when attached to a worker. - */ - prependOnceListener(event: "NodeWorker.attachedToWorker", listener: (message: InspectorNotification) => void): this; - /** - * Issued when detached from the worker. - */ - prependOnceListener(event: "NodeWorker.detachedFromWorker", listener: (message: InspectorNotification) => void): this; - /** - * Notifies about a new protocol message received from the session - * (session ID is provided in attachedToWorker notification). - */ - prependOnceListener(event: "NodeWorker.receivedMessageFromWorker", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Target.targetCreated", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "Target.attachedToTarget", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemAdded", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemRemoved", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemUpdated", listener: (message: InspectorNotification) => void): this; - prependOnceListener(event: "DOMStorage.domStorageItemsCleared", listener: (message: InspectorNotification) => void): this; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/inspector/promises.d.ts b/skills/flight-finder/node_modules/@types/node/inspector/promises.d.ts deleted file mode 100644 index 54e1250..0000000 --- a/skills/flight-finder/node_modules/@types/node/inspector/promises.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/** - * The `node:inspector/promises` module provides an API for interacting with the V8 - * inspector. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/inspector/promises.js) - * @since v19.0.0 - */ -declare module "node:inspector/promises" { - import { EventEmitter } from "node:events"; - export { close, console, NetworkResources, open, url, waitForDebugger } from "node:inspector"; - /** - * The `inspector.Session` is used for dispatching messages to the V8 inspector - * back-end and receiving message responses and notifications. - * @since v19.0.0 - */ - export class Session extends EventEmitter { - /** - * Create a new instance of the inspector.Session class. - * The inspector session needs to be connected through `session.connect()` before the messages can be dispatched to the inspector backend. - */ - constructor(); - /** - * Connects a session to the inspector back-end. - */ - connect(): void; - /** - * Connects a session to the inspector back-end. - * An exception will be thrown if this API was not called on a Worker thread. - * @since v12.11.0 - */ - connectToMainThread(): void; - /** - * Immediately close the session. All pending message callbacks will be called with an error. - * `session.connect()` will need to be called to be able to send messages again. - * Reconnected session will lose all inspector state, such as enabled agents or configured breakpoints. - */ - disconnect(): void; - } -} -declare module "inspector/promises" { - export * from "node:inspector/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/module.d.ts b/skills/flight-finder/node_modules/@types/node/module.d.ts deleted file mode 100644 index 6a8e339..0000000 --- a/skills/flight-finder/node_modules/@types/node/module.d.ts +++ /dev/null @@ -1,757 +0,0 @@ -/** - * @since v0.3.7 - */ -declare module "node:module" { - import { URL } from "node:url"; - class Module { - constructor(id: string, parent?: Module); - } - interface Module extends NodeJS.Module {} - namespace Module { - export { Module }; - } - namespace Module { - /** - * A list of the names of all modules provided by Node.js. Can be used to verify - * if a module is maintained by a third party or not. - * - * Note: the list doesn't contain prefix-only modules like `node:test`. - * @since v9.3.0, v8.10.0, v6.13.0 - */ - const builtinModules: readonly string[]; - /** - * @since v12.2.0 - * @param path Filename to be used to construct the require - * function. Must be a file URL object, file URL string, or absolute path - * string. - */ - function createRequire(path: string | URL): NodeJS.Require; - namespace constants { - /** - * The following constants are returned as the `status` field in the object returned by - * {@link enableCompileCache} to indicate the result of the attempt to enable the - * [module compile cache](https://nodejs.org/docs/latest-v25.x/api/module.html#module-compile-cache). - * @since v22.8.0 - */ - namespace compileCacheStatus { - /** - * Node.js has enabled the compile cache successfully. The directory used to store the - * compile cache will be returned in the `directory` field in the - * returned object. - */ - const ENABLED: number; - /** - * The compile cache has already been enabled before, either by a previous call to - * {@link enableCompileCache}, or by the `NODE_COMPILE_CACHE=dir` - * environment variable. The directory used to store the - * compile cache will be returned in the `directory` field in the - * returned object. - */ - const ALREADY_ENABLED: number; - /** - * Node.js fails to enable the compile cache. This can be caused by the lack of - * permission to use the specified directory, or various kinds of file system errors. - * The detail of the failure will be returned in the `message` field in the - * returned object. - */ - const FAILED: number; - /** - * Node.js cannot enable the compile cache because the environment variable - * `NODE_DISABLE_COMPILE_CACHE=1` has been set. - */ - const DISABLED: number; - } - } - interface EnableCompileCacheOptions { - /** - * Optional. Directory to store the compile cache. If not specified, - * the directory specified by the `NODE_COMPILE_CACHE=dir` environment variable - * will be used if it's set, or `path.join(os.tmpdir(), 'node-compile-cache')` - * otherwise. - * @since v25.0.0 - */ - directory?: string | undefined; - /** - * Optional. If `true`, enables portable compile cache so that - * the cache can be reused even if the project directory is moved. This is a best-effort - * feature. If not specified, it will depend on whether the environment variable - * `NODE_COMPILE_CACHE_PORTABLE=1` is set. - * @since v25.0.0 - */ - portable?: boolean | undefined; - } - interface EnableCompileCacheResult { - /** - * One of the {@link constants.compileCacheStatus} - */ - status: number; - /** - * If Node.js cannot enable the compile cache, this contains - * the error message. Only set if `status` is `module.constants.compileCacheStatus.FAILED`. - */ - message?: string; - /** - * If the compile cache is enabled, this contains the directory - * where the compile cache is stored. Only set if `status` is - * `module.constants.compileCacheStatus.ENABLED` or - * `module.constants.compileCacheStatus.ALREADY_ENABLED`. - */ - directory?: string; - } - /** - * Enable [module compile cache](https://nodejs.org/docs/latest-v25.x/api/module.html#module-compile-cache) - * in the current Node.js instance. - * - * For general use cases, it's recommended to call `module.enableCompileCache()` without - * specifying the `options.directory`, so that the directory can be overridden by the - * `NODE_COMPILE_CACHE` environment variable when necessary. - * - * Since compile cache is supposed to be a optimization that is not mission critical, this - * method is designed to not throw any exception when the compile cache cannot be enabled. - * Instead, it will return an object containing an error message in the `message` field to - * aid debugging. If compile cache is enabled successfully, the `directory` field in the - * returned object contains the path to the directory where the compile cache is stored. The - * `status` field in the returned object would be one of the `module.constants.compileCacheStatus` - * values to indicate the result of the attempt to enable the - * [module compile cache](https://nodejs.org/docs/latest-v25.x/api/module.html#module-compile-cache). - * - * This method only affects the current Node.js instance. To enable it in child worker threads, - * either call this method in child worker threads too, or set the - * `process.env.NODE_COMPILE_CACHE` value to compile cache directory so the behavior can - * be inherited into the child workers. The directory can be obtained either from the - * `directory` field returned by this method, or with {@link getCompileCacheDir}. - * @since v22.8.0 - * @param options Optional. If a string is passed, it is considered to be `options.directory`. - */ - function enableCompileCache(options?: string | EnableCompileCacheOptions): EnableCompileCacheResult; - /** - * Flush the [module compile cache](https://nodejs.org/docs/latest-v25.x/api/module.html#module-compile-cache) - * accumulated from modules already loaded - * in the current Node.js instance to disk. This returns after all the flushing - * file system operations come to an end, no matter they succeed or not. If there - * are any errors, this will fail silently, since compile cache misses should not - * interfere with the actual operation of the application. - * @since v22.10.0 - */ - function flushCompileCache(): void; - /** - * @since v22.8.0 - * @return Path to the [module compile cache](https://nodejs.org/docs/latest-v25.x/api/module.html#module-compile-cache) - * directory if it is enabled, or `undefined` otherwise. - */ - function getCompileCacheDir(): string | undefined; - /** - * ```text - * /path/to/project - * ├ packages/ - * ├ bar/ - * ├ bar.js - * └ package.json // name = '@foo/bar' - * └ qux/ - * ├ node_modules/ - * └ some-package/ - * └ package.json // name = 'some-package' - * ├ qux.js - * └ package.json // name = '@foo/qux' - * ├ main.js - * └ package.json // name = '@foo' - * ``` - * ```js - * // /path/to/project/packages/bar/bar.js - * import { findPackageJSON } from 'node:module'; - * - * findPackageJSON('..', import.meta.url); - * // '/path/to/project/package.json' - * // Same result when passing an absolute specifier instead: - * findPackageJSON(new URL('../', import.meta.url)); - * findPackageJSON(import.meta.resolve('../')); - * - * findPackageJSON('some-package', import.meta.url); - * // '/path/to/project/packages/bar/node_modules/some-package/package.json' - * // When passing an absolute specifier, you might get a different result if the - * // resolved module is inside a subfolder that has nested `package.json`. - * findPackageJSON(import.meta.resolve('some-package')); - * // '/path/to/project/packages/bar/node_modules/some-package/some-subfolder/package.json' - * - * findPackageJSON('@foo/qux', import.meta.url); - * // '/path/to/project/packages/qux/package.json' - * ``` - * @since v22.14.0 - * @param specifier The specifier for the module whose `package.json` to - * retrieve. When passing a _bare specifier_, the `package.json` at the root of - * the package is returned. When passing a _relative specifier_ or an _absolute specifier_, - * the closest parent `package.json` is returned. - * @param base The absolute location (`file:` URL string or FS path) of the - * containing module. For CJS, use `__filename` (not `__dirname`!); for ESM, use - * `import.meta.url`. You do not need to pass it if `specifier` is an _absolute specifier_. - * @returns A path if the `package.json` is found. When `startLocation` - * is a package, the package's root `package.json`; when a relative or unresolved, the closest - * `package.json` to the `startLocation`. - */ - function findPackageJSON(specifier: string | URL, base?: string | URL): string | undefined; - /** - * @since v18.6.0, v16.17.0 - */ - function isBuiltin(moduleName: string): boolean; - interface RegisterOptions { - /** - * If you want to resolve `specifier` relative to a - * base URL, such as `import.meta.url`, you can pass that URL here. This - * property is ignored if the `parentURL` is supplied as the second argument. - * @default 'data:' - */ - parentURL?: string | URL | undefined; - /** - * Any arbitrary, cloneable JavaScript value to pass into the - * {@link initialize} hook. - */ - data?: Data | undefined; - /** - * [Transferable objects](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html#portpostmessagevalue-transferlist) - * to be passed into the `initialize` hook. - */ - transferList?: any[] | undefined; - } - /* eslint-disable @definitelytyped/no-unnecessary-generics */ - /** - * Register a module that exports hooks that customize Node.js module - * resolution and loading behavior. See - * [Customization hooks](https://nodejs.org/docs/latest-v25.x/api/module.html#customization-hooks). - * - * This feature requires `--allow-worker` if used with the - * [Permission Model](https://nodejs.org/docs/latest-v25.x/api/permissions.html#permission-model). - * @since v20.6.0, v18.19.0 - * @param specifier Customization hooks to be registered; this should be - * the same string that would be passed to `import()`, except that if it is - * relative, it is resolved relative to `parentURL`. - * @param parentURL f you want to resolve `specifier` relative to a base - * URL, such as `import.meta.url`, you can pass that URL here. - */ - function register( - specifier: string | URL, - parentURL?: string | URL, - options?: RegisterOptions, - ): void; - function register(specifier: string | URL, options?: RegisterOptions): void; - interface RegisterHooksOptions { - /** - * See [load hook](https://nodejs.org/docs/latest-v25.x/api/module.html#loadurl-context-nextload). - * @default undefined - */ - load?: LoadHookSync | undefined; - /** - * See [resolve hook](https://nodejs.org/docs/latest-v25.x/api/module.html#resolvespecifier-context-nextresolve). - * @default undefined - */ - resolve?: ResolveHookSync | undefined; - } - interface ModuleHooks { - /** - * Deregister the hook instance. - */ - deregister(): void; - } - /** - * Register [hooks](https://nodejs.org/docs/latest-v25.x/api/module.html#customization-hooks) - * that customize Node.js module resolution and loading behavior. - * @since v22.15.0 - * @experimental - */ - function registerHooks(options: RegisterHooksOptions): ModuleHooks; - interface StripTypeScriptTypesOptions { - /** - * Possible values are: - * * `'strip'` Only strip type annotations without performing the transformation of TypeScript features. - * * `'transform'` Strip type annotations and transform TypeScript features to JavaScript. - * @default 'strip' - */ - mode?: "strip" | "transform" | undefined; - /** - * Only when `mode` is `'transform'`, if `true`, a source map - * will be generated for the transformed code. - * @default false - */ - sourceMap?: boolean | undefined; - /** - * Specifies the source url used in the source map. - */ - sourceUrl?: string | undefined; - } - /** - * `module.stripTypeScriptTypes()` removes type annotations from TypeScript code. It - * can be used to strip type annotations from TypeScript code before running it - * with `vm.runInContext()` or `vm.compileFunction()`. - * By default, it will throw an error if the code contains TypeScript features - * that require transformation such as `Enums`, - * see [type-stripping](https://nodejs.org/docs/latest-v25.x/api/typescript.md#type-stripping) for more information. - * When mode is `'transform'`, it also transforms TypeScript features to JavaScript, - * see [transform TypeScript features](https://nodejs.org/docs/latest-v25.x/api/typescript.md#typescript-features) for more information. - * When mode is `'strip'`, source maps are not generated, because locations are preserved. - * If `sourceMap` is provided, when mode is `'strip'`, an error will be thrown. - * - * _WARNING_: The output of this function should not be considered stable across Node.js versions, - * due to changes in the TypeScript parser. - * - * ```js - * import { stripTypeScriptTypes } from 'node:module'; - * const code = 'const a: number = 1;'; - * const strippedCode = stripTypeScriptTypes(code); - * console.log(strippedCode); - * // Prints: const a = 1; - * ``` - * - * If `sourceUrl` is provided, it will be used appended as a comment at the end of the output: - * - * ```js - * import { stripTypeScriptTypes } from 'node:module'; - * const code = 'const a: number = 1;'; - * const strippedCode = stripTypeScriptTypes(code, { mode: 'strip', sourceUrl: 'source.ts' }); - * console.log(strippedCode); - * // Prints: const a = 1\n\n//# sourceURL=source.ts; - * ``` - * - * When `mode` is `'transform'`, the code is transformed to JavaScript: - * - * ```js - * import { stripTypeScriptTypes } from 'node:module'; - * const code = ` - * namespace MathUtil { - * export const add = (a: number, b: number) => a + b; - * }`; - * const strippedCode = stripTypeScriptTypes(code, { mode: 'transform', sourceMap: true }); - * console.log(strippedCode); - * // Prints: - * // var MathUtil; - * // (function(MathUtil) { - * // MathUtil.add = (a, b)=>a + b; - * // })(MathUtil || (MathUtil = {})); - * // # sourceMappingURL=data:application/json;base64, ... - * ``` - * @since v22.13.0 - * @param code The code to strip type annotations from. - * @returns The code with type annotations stripped. - */ - function stripTypeScriptTypes(code: string, options?: StripTypeScriptTypesOptions): string; - /* eslint-enable @definitelytyped/no-unnecessary-generics */ - /** - * The `module.syncBuiltinESMExports()` method updates all the live bindings for - * builtin `ES Modules` to match the properties of the `CommonJS` exports. It - * does not add or remove exported names from the `ES Modules`. - * - * ```js - * import fs from 'node:fs'; - * import assert from 'node:assert'; - * import { syncBuiltinESMExports } from 'node:module'; - * - * fs.readFile = newAPI; - * - * delete fs.readFileSync; - * - * function newAPI() { - * // ... - * } - * - * fs.newAPI = newAPI; - * - * syncBuiltinESMExports(); - * - * import('node:fs').then((esmFS) => { - * // It syncs the existing readFile property with the new value - * assert.strictEqual(esmFS.readFile, newAPI); - * // readFileSync has been deleted from the required fs - * assert.strictEqual('readFileSync' in fs, false); - * // syncBuiltinESMExports() does not remove readFileSync from esmFS - * assert.strictEqual('readFileSync' in esmFS, true); - * // syncBuiltinESMExports() does not add names - * assert.strictEqual(esmFS.newAPI, undefined); - * }); - * ``` - * @since v12.12.0 - */ - function syncBuiltinESMExports(): void; - interface ImportAttributes extends NodeJS.Dict { - type?: string | undefined; - } - type ImportPhase = "source" | "evaluation"; - type ModuleFormat = - | "addon" - | "builtin" - | "commonjs" - | "commonjs-typescript" - | "json" - | "module" - | "module-typescript" - | "wasm"; - type ModuleSource = string | ArrayBuffer | NodeJS.TypedArray; - type InitializeHook = (data: Data) => void | Promise; - interface ResolveHookContext { - conditions: string[]; - importAttributes: ImportAttributes; - parentURL: string | undefined; - } - interface ResolveFnOutput { - format?: string | null | undefined; - importAttributes?: ImportAttributes | undefined; - shortCircuit?: boolean | undefined; - url: string; - } - type ResolveHook = ( - specifier: string, - context: ResolveHookContext, - nextResolve: ( - specifier: string, - context?: Partial, - ) => ResolveFnOutput | Promise, - ) => ResolveFnOutput | Promise; - type ResolveHookSync = ( - specifier: string, - context: ResolveHookContext, - nextResolve: ( - specifier: string, - context?: Partial, - ) => ResolveFnOutput, - ) => ResolveFnOutput; - interface LoadHookContext { - conditions: string[]; - format: string | null | undefined; - importAttributes: ImportAttributes; - } - interface LoadFnOutput { - format: string | null | undefined; - shortCircuit?: boolean | undefined; - source?: ModuleSource | undefined; - } - type LoadHook = ( - url: string, - context: LoadHookContext, - nextLoad: ( - url: string, - context?: Partial, - ) => LoadFnOutput | Promise, - ) => LoadFnOutput | Promise; - type LoadHookSync = ( - url: string, - context: LoadHookContext, - nextLoad: ( - url: string, - context?: Partial, - ) => LoadFnOutput, - ) => LoadFnOutput; - interface SourceMapsSupport { - /** - * If the source maps support is enabled - */ - enabled: boolean; - /** - * If the support is enabled for files in `node_modules`. - */ - nodeModules: boolean; - /** - * If the support is enabled for generated code from `eval` or `new Function`. - */ - generatedCode: boolean; - } - /** - * This method returns whether the [Source Map v3](https://tc39.es/ecma426/) support for stack - * traces is enabled. - * @since v23.7.0, v22.14.0 - */ - function getSourceMapsSupport(): SourceMapsSupport; - /** - * `path` is the resolved path for the file for which a corresponding source map - * should be fetched. - * @since v13.7.0, v12.17.0 - * @return Returns `module.SourceMap` if a source map is found, `undefined` otherwise. - */ - function findSourceMap(path: string): SourceMap | undefined; - interface SetSourceMapsSupportOptions { - /** - * If enabling the support for files in `node_modules`. - * @default false - */ - nodeModules?: boolean | undefined; - /** - * If enabling the support for generated code from `eval` or `new Function`. - * @default false - */ - generatedCode?: boolean | undefined; - } - /** - * This function enables or disables the [Source Map v3](https://tc39.es/ecma426/) support for - * stack traces. - * - * It provides same features as launching Node.js process with commandline options - * `--enable-source-maps`, with additional options to alter the support for files - * in `node_modules` or generated codes. - * - * Only source maps in JavaScript files that are loaded after source maps has been - * enabled will be parsed and loaded. Preferably, use the commandline options - * `--enable-source-maps` to avoid losing track of source maps of modules loaded - * before this API call. - * @since v23.7.0, v22.14.0 - */ - function setSourceMapsSupport(enabled: boolean, options?: SetSourceMapsSupportOptions): void; - interface SourceMapConstructorOptions { - /** - * @since v21.0.0, v20.5.0 - */ - lineLengths?: readonly number[] | undefined; - } - interface SourceMapPayload { - file: string; - version: number; - sources: string[]; - sourcesContent: string[]; - names: string[]; - mappings: string; - sourceRoot: string; - } - interface SourceMapping { - generatedLine: number; - generatedColumn: number; - originalSource: string; - originalLine: number; - originalColumn: number; - } - interface SourceOrigin { - /** - * The name of the range in the source map, if one was provided - */ - name: string | undefined; - /** - * The file name of the original source, as reported in the SourceMap - */ - fileName: string; - /** - * The 1-indexed lineNumber of the corresponding call site in the original source - */ - lineNumber: number; - /** - * The 1-indexed columnNumber of the corresponding call site in the original source - */ - columnNumber: number; - } - /** - * @since v13.7.0, v12.17.0 - */ - class SourceMap { - constructor(payload: SourceMapPayload, options?: SourceMapConstructorOptions); - /** - * Getter for the payload used to construct the `SourceMap` instance. - */ - readonly payload: SourceMapPayload; - /** - * Given a line offset and column offset in the generated source - * file, returns an object representing the SourceMap range in the - * original file if found, or an empty object if not. - * - * The object returned contains the following keys: - * - * The returned value represents the raw range as it appears in the - * SourceMap, based on zero-indexed offsets, _not_ 1-indexed line and - * column numbers as they appear in Error messages and CallSite - * objects. - * - * To get the corresponding 1-indexed line and column numbers from a - * lineNumber and columnNumber as they are reported by Error stacks - * and CallSite objects, use `sourceMap.findOrigin(lineNumber, columnNumber)` - * @param lineOffset The zero-indexed line number offset in the generated source - * @param columnOffset The zero-indexed column number offset in the generated source - */ - findEntry(lineOffset: number, columnOffset: number): SourceMapping | {}; - /** - * Given a 1-indexed `lineNumber` and `columnNumber` from a call site in the generated source, - * find the corresponding call site location in the original source. - * - * If the `lineNumber` and `columnNumber` provided are not found in any source map, - * then an empty object is returned. - * @param lineNumber The 1-indexed line number of the call site in the generated source - * @param columnNumber The 1-indexed column number of the call site in the generated source - */ - findOrigin(lineNumber: number, columnNumber: number): SourceOrigin | {}; - } - function runMain(main?: string): void; - function wrap(script: string): string; - } - global { - namespace NodeJS { - interface Module { - /** - * The module objects required for the first time by this one. - * @since v0.1.16 - */ - children: Module[]; - /** - * The `module.exports` object is created by the `Module` system. Sometimes this is - * not acceptable; many want their module to be an instance of some class. To do - * this, assign the desired export object to `module.exports`. - * @since v0.1.16 - */ - exports: any; - /** - * The fully resolved filename of the module. - * @since v0.1.16 - */ - filename: string; - /** - * The identifier for the module. Typically this is the fully resolved - * filename. - * @since v0.1.16 - */ - id: string; - /** - * `true` if the module is running during the Node.js preload - * phase. - * @since v15.4.0, v14.17.0 - */ - isPreloading: boolean; - /** - * Whether or not the module is done loading, or is in the process of - * loading. - * @since v0.1.16 - */ - loaded: boolean; - /** - * The module that first required this one, or `null` if the current module is the - * entry point of the current process, or `undefined` if the module was loaded by - * something that is not a CommonJS module (e.g. REPL or `import`). - * @since v0.1.16 - * @deprecated Please use `require.main` and `module.children` instead. - */ - parent: Module | null | undefined; - /** - * The directory name of the module. This is usually the same as the - * `path.dirname()` of the `module.id`. - * @since v11.14.0 - */ - path: string; - /** - * The search paths for the module. - * @since v0.4.0 - */ - paths: string[]; - /** - * The `module.require()` method provides a way to load a module as if - * `require()` was called from the original module. - * @since v0.5.1 - */ - require(id: string): any; - } - interface Require { - /** - * Used to import modules, `JSON`, and local files. - * @since v0.1.13 - */ - (id: string): any; - /** - * Modules are cached in this object when they are required. By deleting a key - * value from this object, the next `require` will reload the module. - * This does not apply to - * [native addons](https://nodejs.org/docs/latest-v25.x/api/addons.html), - * for which reloading will result in an error. - * @since v0.3.0 - */ - cache: Dict; - /** - * Instruct `require` on how to handle certain file extensions. - * @since v0.3.0 - * @deprecated - */ - extensions: RequireExtensions; - /** - * The `Module` object representing the entry script loaded when the Node.js - * process launched, or `undefined` if the entry point of the program is not a - * CommonJS module. - * @since v0.1.17 - */ - main: Module | undefined; - /** - * @since v0.3.0 - */ - resolve: RequireResolve; - } - /** @deprecated */ - interface RequireExtensions extends Dict<(module: Module, filename: string) => any> { - ".js": (module: Module, filename: string) => any; - ".json": (module: Module, filename: string) => any; - ".node": (module: Module, filename: string) => any; - } - interface RequireResolveOptions { - /** - * Paths to resolve module location from. If present, these - * paths are used instead of the default resolution paths, with the exception - * of - * [GLOBAL\_FOLDERS](https://nodejs.org/docs/latest-v25.x/api/modules.html#loading-from-the-global-folders) - * like `$HOME/.node_modules`, which are - * always included. Each of these paths is used as a starting point for - * the module resolution algorithm, meaning that the `node_modules` hierarchy - * is checked from this location. - * @since v8.9.0 - */ - paths?: string[] | undefined; - } - interface RequireResolve { - /** - * Use the internal `require()` machinery to look up the location of a module, - * but rather than loading the module, just return the resolved filename. - * - * If the module can not be found, a `MODULE_NOT_FOUND` error is thrown. - * @since v0.3.0 - * @param request The module path to resolve. - */ - (request: string, options?: RequireResolveOptions): string; - /** - * Returns an array containing the paths searched during resolution of `request` or - * `null` if the `request` string references a core module, for example `http` or - * `fs`. - * @since v8.9.0 - * @param request The module path whose lookup paths are being retrieved. - */ - paths(request: string): string[] | null; - } - } - /** - * The directory name of the current module. This is the same as the - * `path.dirname()` of the `__filename`. - * @since v0.1.27 - */ - var __dirname: string; - /** - * The file name of the current module. This is the current module file's absolute - * path with symlinks resolved. - * - * For a main program this is not necessarily the same as the file name used in the - * command line. - * @since v0.0.1 - */ - var __filename: string; - /** - * The `exports` variable is available within a module's file-level scope, and is - * assigned the value of `module.exports` before the module is evaluated. - * @since v0.1.16 - */ - var exports: NodeJS.Module["exports"]; - /** - * A reference to the current module. - * @since v0.1.16 - */ - var module: NodeJS.Module; - /** - * @since v0.1.13 - */ - var require: NodeJS.Require; - // Global-scope aliases for backwards compatibility with @types/node <13.0.x - // TODO: consider removing in a future major version update - /** @deprecated Use `NodeJS.Module` instead. */ - interface NodeModule extends NodeJS.Module {} - /** @deprecated Use `NodeJS.Require` instead. */ - interface NodeRequire extends NodeJS.Require {} - /** @deprecated Use `NodeJS.RequireResolve` instead. */ - interface RequireResolve extends NodeJS.RequireResolve {} - } - export = Module; -} -declare module "module" { - import module = require("node:module"); - export = module; -} diff --git a/skills/flight-finder/node_modules/@types/node/net.d.ts b/skills/flight-finder/node_modules/@types/node/net.d.ts deleted file mode 100644 index 9000542..0000000 --- a/skills/flight-finder/node_modules/@types/node/net.d.ts +++ /dev/null @@ -1,933 +0,0 @@ -/** - * > Stability: 2 - Stable - * - * The `node:net` module provides an asynchronous network API for creating stream-based - * TCP or `IPC` servers ({@link createServer}) and clients - * ({@link createConnection}). - * - * It can be accessed using: - * - * ```js - * import net from 'node:net'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/net.js) - */ -declare module "node:net" { - import { NonSharedBuffer } from "node:buffer"; - import * as dns from "node:dns"; - import { Abortable, EventEmitter, InternalEventEmitter } from "node:events"; - import * as stream from "node:stream"; - type LookupFunction = ( - hostname: string, - options: dns.LookupOptions, - callback: (err: NodeJS.ErrnoException | null, address: string | dns.LookupAddress[], family?: number) => void, - ) => void; - interface AddressInfo { - address: string; - family: string; - port: number; - } - interface SocketConstructorOpts { - fd?: number | undefined; - allowHalfOpen?: boolean | undefined; - onread?: OnReadOpts | undefined; - readable?: boolean | undefined; - writable?: boolean | undefined; - signal?: AbortSignal | undefined; - noDelay?: boolean | undefined; - keepAlive?: boolean | undefined; - keepAliveInitialDelay?: number | undefined; - blockList?: BlockList | undefined; - } - interface OnReadOpts { - buffer: Uint8Array | (() => Uint8Array); - /** - * This function is called for every chunk of incoming data. - * Two arguments are passed to it: the number of bytes written to `buffer` and a reference to `buffer`. - * Return `false` from this function to implicitly `pause()` the socket. - */ - callback(bytesWritten: number, buffer: Uint8Array): boolean; - } - interface TcpSocketConnectOpts { - port: number; - host?: string | undefined; - localAddress?: string | undefined; - localPort?: number | undefined; - hints?: number | undefined; - family?: number | undefined; - lookup?: LookupFunction | undefined; - /** - * @since v18.13.0 - */ - autoSelectFamily?: boolean | undefined; - /** - * @since v18.13.0 - */ - autoSelectFamilyAttemptTimeout?: number | undefined; - } - interface IpcSocketConnectOpts { - path: string; - } - type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; - type SocketReadyState = "opening" | "open" | "readOnly" | "writeOnly" | "closed"; - interface SocketEventMap extends Omit { - "close": [hadError: boolean]; - "connect": []; - "connectionAttempt": [ip: string, port: number, family: number]; - "connectionAttemptFailed": [ip: string, port: number, family: number, error: Error]; - "connectionAttemptTimeout": [ip: string, port: number, family: number]; - "data": [data: string | NonSharedBuffer]; - "lookup": [err: Error | null, address: string, family: number | null, host: string]; - "ready": []; - "timeout": []; - } - /** - * This class is an abstraction of a TCP socket or a streaming `IPC` endpoint - * (uses named pipes on Windows, and Unix domain sockets otherwise). It is also - * an `EventEmitter`. - * - * A `net.Socket` can be created by the user and used directly to interact with - * a server. For example, it is returned by {@link createConnection}, - * so the user can use it to talk to the server. - * - * It can also be created by Node.js and passed to the user when a connection - * is received. For example, it is passed to the listeners of a `'connection'` event emitted on a {@link Server}, so the user can use - * it to interact with the client. - * @since v0.3.4 - */ - class Socket extends stream.Duplex { - constructor(options?: SocketConstructorOpts); - /** - * Destroys the socket after all data is written. If the `finish` event was already emitted the socket is destroyed immediately. - * If the socket is still writable it implicitly calls `socket.end()`. - * @since v0.3.4 - */ - destroySoon(): void; - /** - * Sends data on the socket. The second parameter specifies the encoding in the - * case of a string. It defaults to UTF8 encoding. - * - * Returns `true` if the entire data was flushed successfully to the kernel - * buffer. Returns `false` if all or part of the data was queued in user memory.`'drain'` will be emitted when the buffer is again free. - * - * The optional `callback` parameter will be executed when the data is finally - * written out, which may not be immediately. - * - * See `Writable` stream `write()` method for more - * information. - * @since v0.1.90 - * @param [encoding='utf8'] Only used when data is `string`. - */ - write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; - write(str: Uint8Array | string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; - /** - * Initiate a connection on a given socket. - * - * Possible signatures: - * - * * `socket.connect(options[, connectListener])` - * * `socket.connect(path[, connectListener])` for `IPC` connections. - * * `socket.connect(port[, host][, connectListener])` for TCP connections. - * * Returns: `net.Socket` The socket itself. - * - * This function is asynchronous. When the connection is established, the `'connect'` event will be emitted. If there is a problem connecting, - * instead of a `'connect'` event, an `'error'` event will be emitted with - * the error passed to the `'error'` listener. - * The last parameter `connectListener`, if supplied, will be added as a listener - * for the `'connect'` event **once**. - * - * This function should only be used for reconnecting a socket after`'close'` has been emitted or otherwise it may lead to undefined - * behavior. - */ - connect(options: SocketConnectOpts, connectionListener?: () => void): this; - connect(port: number, host: string, connectionListener?: () => void): this; - connect(port: number, connectionListener?: () => void): this; - connect(path: string, connectionListener?: () => void): this; - /** - * Set the encoding for the socket as a `Readable Stream`. See `readable.setEncoding()` for more information. - * @since v0.1.90 - * @return The socket itself. - */ - setEncoding(encoding?: BufferEncoding): this; - /** - * Pauses the reading of data. That is, `'data'` events will not be emitted. - * Useful to throttle back an upload. - * @return The socket itself. - */ - pause(): this; - /** - * Close the TCP connection by sending an RST packet and destroy the stream. - * If this TCP socket is in connecting status, it will send an RST packet and destroy this TCP socket once it is connected. - * Otherwise, it will call `socket.destroy` with an `ERR_SOCKET_CLOSED` Error. - * If this is not a TCP socket (for example, a pipe), calling this method will immediately throw an `ERR_INVALID_HANDLE_TYPE` Error. - * @since v18.3.0, v16.17.0 - */ - resetAndDestroy(): this; - /** - * Resumes reading after a call to `socket.pause()`. - * @return The socket itself. - */ - resume(): this; - /** - * Sets the socket to timeout after `timeout` milliseconds of inactivity on - * the socket. By default `net.Socket` do not have a timeout. - * - * When an idle timeout is triggered the socket will receive a `'timeout'` event but the connection will not be severed. The user must manually call `socket.end()` or `socket.destroy()` to - * end the connection. - * - * ```js - * socket.setTimeout(3000); - * socket.on('timeout', () => { - * console.log('socket timeout'); - * socket.end(); - * }); - * ``` - * - * If `timeout` is 0, then the existing idle timeout is disabled. - * - * The optional `callback` parameter will be added as a one-time listener for the `'timeout'` event. - * @since v0.1.90 - * @return The socket itself. - */ - setTimeout(timeout: number, callback?: () => void): this; - /** - * Enable/disable the use of Nagle's algorithm. - * - * When a TCP connection is created, it will have Nagle's algorithm enabled. - * - * Nagle's algorithm delays data before it is sent via the network. It attempts - * to optimize throughput at the expense of latency. - * - * Passing `true` for `noDelay` or not passing an argument will disable Nagle's - * algorithm for the socket. Passing `false` for `noDelay` will enable Nagle's - * algorithm. - * @since v0.1.90 - * @param [noDelay=true] - * @return The socket itself. - */ - setNoDelay(noDelay?: boolean): this; - /** - * Enable/disable keep-alive functionality, and optionally set the initial - * delay before the first keepalive probe is sent on an idle socket. - * - * Set `initialDelay` (in milliseconds) to set the delay between the last - * data packet received and the first keepalive probe. Setting `0` for`initialDelay` will leave the value unchanged from the default - * (or previous) setting. - * - * Enabling the keep-alive functionality will set the following socket options: - * - * * `SO_KEEPALIVE=1` - * * `TCP_KEEPIDLE=initialDelay` - * * `TCP_KEEPCNT=10` - * * `TCP_KEEPINTVL=1` - * @since v0.1.92 - * @param [enable=false] - * @param [initialDelay=0] - * @return The socket itself. - */ - setKeepAlive(enable?: boolean, initialDelay?: number): this; - /** - * Returns the bound `address`, the address `family` name and `port` of the - * socket as reported by the operating system:`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }` - * @since v0.1.90 - */ - address(): AddressInfo | {}; - /** - * Calling `unref()` on a socket will allow the program to exit if this is the only - * active socket in the event system. If the socket is already `unref`ed calling`unref()` again will have no effect. - * @since v0.9.1 - * @return The socket itself. - */ - unref(): this; - /** - * Opposite of `unref()`, calling `ref()` on a previously `unref`ed socket will _not_ let the program exit if it's the only socket left (the default behavior). - * If the socket is `ref`ed calling `ref` again will have no effect. - * @since v0.9.1 - * @return The socket itself. - */ - ref(): this; - /** - * This property is only present if the family autoselection algorithm is enabled in `socket.connect(options)` - * and it is an array of the addresses that have been attempted. - * - * Each address is a string in the form of `$IP:$PORT`. - * If the connection was successful, then the last address is the one that the socket is currently connected to. - * @since v19.4.0 - */ - readonly autoSelectFamilyAttemptedAddresses: string[]; - /** - * This property shows the number of characters buffered for writing. The buffer - * may contain strings whose length after encoding is not yet known. So this number - * is only an approximation of the number of bytes in the buffer. - * - * `net.Socket` has the property that `socket.write()` always works. This is to - * help users get up and running quickly. The computer cannot always keep up - * with the amount of data that is written to a socket. The network connection - * simply might be too slow. Node.js will internally queue up the data written to a - * socket and send it out over the wire when it is possible. - * - * The consequence of this internal buffering is that memory may grow. - * Users who experience large or growing `bufferSize` should attempt to - * "throttle" the data flows in their program with `socket.pause()` and `socket.resume()`. - * @since v0.3.8 - * @deprecated Since v14.6.0 - Use `writableLength` instead. - */ - readonly bufferSize: number; - /** - * The amount of received bytes. - * @since v0.5.3 - */ - readonly bytesRead: number; - /** - * The amount of bytes sent. - * @since v0.5.3 - */ - readonly bytesWritten: number; - /** - * If `true`, `socket.connect(options[, connectListener])` was - * called and has not yet finished. It will stay `true` until the socket becomes - * connected, then it is set to `false` and the `'connect'` event is emitted. Note - * that the `socket.connect(options[, connectListener])` callback is a listener for the `'connect'` event. - * @since v6.1.0 - */ - readonly connecting: boolean; - /** - * This is `true` if the socket is not connected yet, either because `.connect()`has not yet been called or because it is still in the process of connecting - * (see `socket.connecting`). - * @since v11.2.0, v10.16.0 - */ - readonly pending: boolean; - /** - * See `writable.destroyed` for further details. - */ - readonly destroyed: boolean; - /** - * The string representation of the local IP address the remote client is - * connecting on. For example, in a server listening on `'0.0.0.0'`, if a client - * connects on `'192.168.1.1'`, the value of `socket.localAddress` would be`'192.168.1.1'`. - * @since v0.9.6 - */ - readonly localAddress?: string; - /** - * The numeric representation of the local port. For example, `80` or `21`. - * @since v0.9.6 - */ - readonly localPort?: number; - /** - * The string representation of the local IP family. `'IPv4'` or `'IPv6'`. - * @since v18.8.0, v16.18.0 - */ - readonly localFamily?: string; - /** - * This property represents the state of the connection as a string. - * - * * If the stream is connecting `socket.readyState` is `opening`. - * * If the stream is readable and writable, it is `open`. - * * If the stream is readable and not writable, it is `readOnly`. - * * If the stream is not readable and writable, it is `writeOnly`. - * @since v0.5.0 - */ - readonly readyState: SocketReadyState; - /** - * The string representation of the remote IP address. For example,`'74.125.127.100'` or `'2001:4860:a005::68'`. Value may be `undefined` if - * the socket is destroyed (for example, if the client disconnected). - * @since v0.5.10 - */ - readonly remoteAddress: string | undefined; - /** - * The string representation of the remote IP family. `'IPv4'` or `'IPv6'`. Value may be `undefined` if - * the socket is destroyed (for example, if the client disconnected). - * @since v0.11.14 - */ - readonly remoteFamily: string | undefined; - /** - * The numeric representation of the remote port. For example, `80` or `21`. Value may be `undefined` if - * the socket is destroyed (for example, if the client disconnected). - * @since v0.5.10 - */ - readonly remotePort: number | undefined; - /** - * The socket timeout in milliseconds as set by `socket.setTimeout()`. - * It is `undefined` if a timeout has not been set. - * @since v10.7.0 - */ - readonly timeout?: number; - /** - * Half-closes the socket. i.e., it sends a FIN packet. It is possible the - * server will still send some data. - * - * See `writable.end()` for further details. - * @since v0.1.90 - * @param [encoding='utf8'] Only used when data is `string`. - * @param callback Optional callback for when the socket is finished. - * @return The socket itself. - */ - end(callback?: () => void): this; - end(buffer: Uint8Array | string, callback?: () => void): this; - end(str: Uint8Array | string, encoding?: BufferEncoding, callback?: () => void): this; - // #region InternalEventEmitter - addListener(eventName: E, listener: (...args: SocketEventMap[E]) => void): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: SocketEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: SocketEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: SocketEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: SocketEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: SocketEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once(eventName: E, listener: (...args: SocketEventMap[E]) => void): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: SocketEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: SocketEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: SocketEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: SocketEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface ListenOptions extends Abortable { - backlog?: number | undefined; - exclusive?: boolean | undefined; - host?: string | undefined; - /** - * @default false - */ - ipv6Only?: boolean | undefined; - reusePort?: boolean | undefined; - path?: string | undefined; - port?: number | undefined; - readableAll?: boolean | undefined; - writableAll?: boolean | undefined; - } - interface ServerOpts { - /** - * Indicates whether half-opened TCP connections are allowed. - * @default false - */ - allowHalfOpen?: boolean | undefined; - /** - * Indicates whether the socket should be paused on incoming connections. - * @default false - */ - pauseOnConnect?: boolean | undefined; - /** - * If set to `true`, it disables the use of Nagle's algorithm immediately after a new incoming connection is received. - * @default false - * @since v16.5.0 - */ - noDelay?: boolean | undefined; - /** - * If set to `true`, it enables keep-alive functionality on the socket immediately after a new incoming connection is received, - * similarly on what is done in `socket.setKeepAlive([enable][, initialDelay])`. - * @default false - * @since v16.5.0 - */ - keepAlive?: boolean | undefined; - /** - * If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket. - * @default 0 - * @since v16.5.0 - */ - keepAliveInitialDelay?: number | undefined; - /** - * Optionally overrides all `net.Socket`s' `readableHighWaterMark` and `writableHighWaterMark`. - * @default See [stream.getDefaultHighWaterMark()](https://nodejs.org/docs/latest-v25.x/api/stream.html#streamgetdefaulthighwatermarkobjectmode). - * @since v18.17.0, v20.1.0 - */ - highWaterMark?: number | undefined; - /** - * `blockList` can be used for disabling inbound - * access to specific IP addresses, IP ranges, or IP subnets. This does not - * work if the server is behind a reverse proxy, NAT, etc. because the address - * checked against the block list is the address of the proxy, or the one - * specified by the NAT. - * @since v22.13.0 - */ - blockList?: BlockList | undefined; - } - interface DropArgument { - localAddress?: string; - localPort?: number; - localFamily?: string; - remoteAddress?: string; - remotePort?: number; - remoteFamily?: string; - } - interface ServerEventMap { - "close": []; - "connection": [socket: Socket]; - "error": [err: Error]; - "listening": []; - "drop": [data?: DropArgument]; - } - /** - * This class is used to create a TCP or `IPC` server. - * @since v0.1.90 - */ - class Server implements EventEmitter { - constructor(connectionListener?: (socket: Socket) => void); - constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void); - /** - * Start a server listening for connections. A `net.Server` can be a TCP or - * an `IPC` server depending on what it listens to. - * - * Possible signatures: - * - * * `server.listen(handle[, backlog][, callback])` - * * `server.listen(options[, callback])` - * * `server.listen(path[, backlog][, callback])` for `IPC` servers - * * `server.listen([port[, host[, backlog]]][, callback])` for TCP servers - * - * This function is asynchronous. When the server starts listening, the `'listening'` event will be emitted. The last parameter `callback`will be added as a listener for the `'listening'` - * event. - * - * All `listen()` methods can take a `backlog` parameter to specify the maximum - * length of the queue of pending connections. The actual length will be determined - * by the OS through sysctl settings such as `tcp_max_syn_backlog` and `somaxconn` on Linux. The default value of this parameter is 511 (not 512). - * - * All {@link Socket} are set to `SO_REUSEADDR` (see [`socket(7)`](https://man7.org/linux/man-pages/man7/socket.7.html) for - * details). - * - * The `server.listen()` method can be called again if and only if there was an - * error during the first `server.listen()` call or `server.close()` has been - * called. Otherwise, an `ERR_SERVER_ALREADY_LISTEN` error will be thrown. - * - * One of the most common errors raised when listening is `EADDRINUSE`. - * This happens when another server is already listening on the requested`port`/`path`/`handle`. One way to handle this would be to retry - * after a certain amount of time: - * - * ```js - * server.on('error', (e) => { - * if (e.code === 'EADDRINUSE') { - * console.error('Address in use, retrying...'); - * setTimeout(() => { - * server.close(); - * server.listen(PORT, HOST); - * }, 1000); - * } - * }); - * ``` - */ - listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this; - listen(port?: number, hostname?: string, listeningListener?: () => void): this; - listen(port?: number, backlog?: number, listeningListener?: () => void): this; - listen(port?: number, listeningListener?: () => void): this; - listen(path: string, backlog?: number, listeningListener?: () => void): this; - listen(path: string, listeningListener?: () => void): this; - listen(options: ListenOptions, listeningListener?: () => void): this; - listen(handle: any, backlog?: number, listeningListener?: () => void): this; - listen(handle: any, listeningListener?: () => void): this; - /** - * Stops the server from accepting new connections and keeps existing - * connections. This function is asynchronous, the server is finally closed - * when all connections are ended and the server emits a `'close'` event. - * The optional `callback` will be called once the `'close'` event occurs. Unlike - * that event, it will be called with an `Error` as its only argument if the server - * was not open when it was closed. - * @since v0.1.90 - * @param callback Called when the server is closed. - */ - close(callback?: (err?: Error) => void): this; - /** - * Returns the bound `address`, the address `family` name, and `port` of the server - * as reported by the operating system if listening on an IP socket - * (useful to find which port was assigned when getting an OS-assigned address):`{ port: 12346, family: 'IPv4', address: '127.0.0.1' }`. - * - * For a server listening on a pipe or Unix domain socket, the name is returned - * as a string. - * - * ```js - * const server = net.createServer((socket) => { - * socket.end('goodbye\n'); - * }).on('error', (err) => { - * // Handle errors here. - * throw err; - * }); - * - * // Grab an arbitrary unused port. - * server.listen(() => { - * console.log('opened server on', server.address()); - * }); - * ``` - * - * `server.address()` returns `null` before the `'listening'` event has been - * emitted or after calling `server.close()`. - * @since v0.1.90 - */ - address(): AddressInfo | string | null; - /** - * Asynchronously get the number of concurrent connections on the server. Works - * when sockets were sent to forks. - * - * Callback should take two arguments `err` and `count`. - * @since v0.9.7 - */ - getConnections(cb: (error: Error | null, count: number) => void): this; - /** - * Opposite of `unref()`, calling `ref()` on a previously `unref`ed server will _not_ let the program exit if it's the only server left (the default behavior). - * If the server is `ref`ed calling `ref()` again will have no effect. - * @since v0.9.1 - */ - ref(): this; - /** - * Calling `unref()` on a server will allow the program to exit if this is the only - * active server in the event system. If the server is already `unref`ed calling`unref()` again will have no effect. - * @since v0.9.1 - */ - unref(): this; - /** - * Set this property to reject connections when the server's connection count gets - * high. - * - * It is not recommended to use this option once a socket has been sent to a child - * with `child_process.fork()`. - * @since v0.2.0 - */ - maxConnections: number; - connections: number; - /** - * Indicates whether or not the server is listening for connections. - * @since v5.7.0 - */ - readonly listening: boolean; - /** - * Calls {@link Server.close()} and returns a promise that fulfills when the server has closed. - * @since v20.5.0 - */ - [Symbol.asyncDispose](): Promise; - } - interface Server extends InternalEventEmitter {} - type IPVersion = "ipv4" | "ipv6"; - /** - * The `BlockList` object can be used with some network APIs to specify rules for - * disabling inbound or outbound access to specific IP addresses, IP ranges, or - * IP subnets. - * @since v15.0.0, v14.18.0 - */ - class BlockList { - /** - * Adds a rule to block the given IP address. - * @since v15.0.0, v14.18.0 - * @param address An IPv4 or IPv6 address. - * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. - */ - addAddress(address: string, type?: IPVersion): void; - addAddress(address: SocketAddress): void; - /** - * Adds a rule to block a range of IP addresses from `start` (inclusive) to`end` (inclusive). - * @since v15.0.0, v14.18.0 - * @param start The starting IPv4 or IPv6 address in the range. - * @param end The ending IPv4 or IPv6 address in the range. - * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. - */ - addRange(start: string, end: string, type?: IPVersion): void; - addRange(start: SocketAddress, end: SocketAddress): void; - /** - * Adds a rule to block a range of IP addresses specified as a subnet mask. - * @since v15.0.0, v14.18.0 - * @param net The network IPv4 or IPv6 address. - * @param prefix The number of CIDR prefix bits. For IPv4, this must be a value between `0` and `32`. For IPv6, this must be between `0` and `128`. - * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. - */ - addSubnet(net: SocketAddress, prefix: number): void; - addSubnet(net: string, prefix: number, type?: IPVersion): void; - /** - * Returns `true` if the given IP address matches any of the rules added to the`BlockList`. - * - * ```js - * const blockList = new net.BlockList(); - * blockList.addAddress('123.123.123.123'); - * blockList.addRange('10.0.0.1', '10.0.0.10'); - * blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6'); - * - * console.log(blockList.check('123.123.123.123')); // Prints: true - * console.log(blockList.check('10.0.0.3')); // Prints: true - * console.log(blockList.check('222.111.111.222')); // Prints: false - * - * // IPv6 notation for IPv4 addresses works: - * console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true - * console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true - * ``` - * @since v15.0.0, v14.18.0 - * @param address The IP address to check - * @param [type='ipv4'] Either `'ipv4'` or `'ipv6'`. - */ - check(address: SocketAddress): boolean; - check(address: string, type?: IPVersion): boolean; - /** - * The list of rules added to the blocklist. - * @since v15.0.0, v14.18.0 - */ - rules: readonly string[]; - /** - * Returns `true` if the `value` is a `net.BlockList`. - * @since v22.13.0 - * @param value Any JS value - */ - static isBlockList(value: unknown): value is BlockList; - /** - * ```js - * const blockList = new net.BlockList(); - * const data = [ - * 'Subnet: IPv4 192.168.1.0/24', - * 'Address: IPv4 10.0.0.5', - * 'Range: IPv4 192.168.2.1-192.168.2.10', - * 'Range: IPv4 10.0.0.1-10.0.0.10', - * ]; - * blockList.fromJSON(data); - * blockList.fromJSON(JSON.stringify(data)); - * ``` - * @since v24.5.0 - * @experimental - */ - fromJSON(data: string | readonly string[]): void; - /** - * @since v24.5.0 - * @experimental - */ - toJSON(): readonly string[]; - } - interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { - timeout?: number | undefined; - } - interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { - timeout?: number | undefined; - } - type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; - /** - * Creates a new TCP or `IPC` server. - * - * If `allowHalfOpen` is set to `true`, when the other end of the socket - * signals the end of transmission, the server will only send back the end of - * transmission when `socket.end()` is explicitly called. For example, in the - * context of TCP, when a FIN packed is received, a FIN packed is sent - * back only when `socket.end()` is explicitly called. Until then the - * connection is half-closed (non-readable but still writable). See `'end'` event and [RFC 1122](https://tools.ietf.org/html/rfc1122) (section 4.2.2.13) for more information. - * - * If `pauseOnConnect` is set to `true`, then the socket associated with each - * incoming connection will be paused, and no data will be read from its handle. - * This allows connections to be passed between processes without any data being - * read by the original process. To begin reading data from a paused socket, call `socket.resume()`. - * - * The server can be a TCP server or an `IPC` server, depending on what it `listen()` to. - * - * Here is an example of a TCP echo server which listens for connections - * on port 8124: - * - * ```js - * import net from 'node:net'; - * const server = net.createServer((c) => { - * // 'connection' listener. - * console.log('client connected'); - * c.on('end', () => { - * console.log('client disconnected'); - * }); - * c.write('hello\r\n'); - * c.pipe(c); - * }); - * server.on('error', (err) => { - * throw err; - * }); - * server.listen(8124, () => { - * console.log('server bound'); - * }); - * ``` - * - * Test this by using `telnet`: - * - * ```bash - * telnet localhost 8124 - * ``` - * - * To listen on the socket `/tmp/echo.sock`: - * - * ```js - * server.listen('/tmp/echo.sock', () => { - * console.log('server bound'); - * }); - * ``` - * - * Use `nc` to connect to a Unix domain socket server: - * - * ```bash - * nc -U /tmp/echo.sock - * ``` - * @since v0.5.0 - * @param connectionListener Automatically set as a listener for the {@link 'connection'} event. - */ - function createServer(connectionListener?: (socket: Socket) => void): Server; - function createServer(options?: ServerOpts, connectionListener?: (socket: Socket) => void): Server; - /** - * Aliases to {@link createConnection}. - * - * Possible signatures: - * - * * {@link connect} - * * {@link connect} for `IPC` connections. - * * {@link connect} for TCP connections. - */ - function connect(options: NetConnectOpts, connectionListener?: () => void): Socket; - function connect(port: number, host?: string, connectionListener?: () => void): Socket; - function connect(path: string, connectionListener?: () => void): Socket; - /** - * A factory function, which creates a new {@link Socket}, - * immediately initiates connection with `socket.connect()`, - * then returns the `net.Socket` that starts the connection. - * - * When the connection is established, a `'connect'` event will be emitted - * on the returned socket. The last parameter `connectListener`, if supplied, - * will be added as a listener for the `'connect'` event **once**. - * - * Possible signatures: - * - * * {@link createConnection} - * * {@link createConnection} for `IPC` connections. - * * {@link createConnection} for TCP connections. - * - * The {@link connect} function is an alias to this function. - */ - function createConnection(options: NetConnectOpts, connectionListener?: () => void): Socket; - function createConnection(port: number, host?: string, connectionListener?: () => void): Socket; - function createConnection(path: string, connectionListener?: () => void): Socket; - /** - * Gets the current default value of the `autoSelectFamily` option of `socket.connect(options)`. - * The initial default value is `true`, unless the command line option`--no-network-family-autoselection` is provided. - * @since v19.4.0 - */ - function getDefaultAutoSelectFamily(): boolean; - /** - * Sets the default value of the `autoSelectFamily` option of `socket.connect(options)`. - * @param value The new default value. - * The initial default value is `true`, unless the command line option - * `--no-network-family-autoselection` is provided. - * @since v19.4.0 - */ - function setDefaultAutoSelectFamily(value: boolean): void; - /** - * Gets the current default value of the `autoSelectFamilyAttemptTimeout` option of `socket.connect(options)`. - * The initial default value is `500` or the value specified via the command line option `--network-family-autoselection-attempt-timeout`. - * @returns The current default value of the `autoSelectFamilyAttemptTimeout` option. - * @since v19.8.0, v18.8.0 - */ - function getDefaultAutoSelectFamilyAttemptTimeout(): number; - /** - * Sets the default value of the `autoSelectFamilyAttemptTimeout` option of `socket.connect(options)`. - * @param value The new default value, which must be a positive number. If the number is less than `10`, the value `10` is used instead. The initial default value is `250` or the value specified via the command line - * option `--network-family-autoselection-attempt-timeout`. - * @since v19.8.0, v18.8.0 - */ - function setDefaultAutoSelectFamilyAttemptTimeout(value: number): void; - /** - * Returns `6` if `input` is an IPv6 address. Returns `4` if `input` is an IPv4 - * address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no leading zeroes. Otherwise, returns`0`. - * - * ```js - * net.isIP('::1'); // returns 6 - * net.isIP('127.0.0.1'); // returns 4 - * net.isIP('127.000.000.001'); // returns 0 - * net.isIP('127.0.0.1/24'); // returns 0 - * net.isIP('fhqwhgads'); // returns 0 - * ``` - * @since v0.3.0 - */ - function isIP(input: string): number; - /** - * Returns `true` if `input` is an IPv4 address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation) with no - * leading zeroes. Otherwise, returns `false`. - * - * ```js - * net.isIPv4('127.0.0.1'); // returns true - * net.isIPv4('127.000.000.001'); // returns false - * net.isIPv4('127.0.0.1/24'); // returns false - * net.isIPv4('fhqwhgads'); // returns false - * ``` - * @since v0.3.0 - */ - function isIPv4(input: string): boolean; - /** - * Returns `true` if `input` is an IPv6 address. Otherwise, returns `false`. - * - * ```js - * net.isIPv6('::1'); // returns true - * net.isIPv6('fhqwhgads'); // returns false - * ``` - * @since v0.3.0 - */ - function isIPv6(input: string): boolean; - interface SocketAddressInitOptions { - /** - * The network address as either an IPv4 or IPv6 string. - * @default 127.0.0.1 - */ - address?: string | undefined; - /** - * @default `'ipv4'` - */ - family?: IPVersion | undefined; - /** - * An IPv6 flow-label used only if `family` is `'ipv6'`. - * @default 0 - */ - flowlabel?: number | undefined; - /** - * An IP port. - * @default 0 - */ - port?: number | undefined; - } - /** - * @since v15.14.0, v14.18.0 - */ - class SocketAddress { - constructor(options: SocketAddressInitOptions); - /** - * Either \`'ipv4'\` or \`'ipv6'\`. - * @since v15.14.0, v14.18.0 - */ - readonly address: string; - /** - * Either \`'ipv4'\` or \`'ipv6'\`. - * @since v15.14.0, v14.18.0 - */ - readonly family: IPVersion; - /** - * @since v15.14.0, v14.18.0 - */ - readonly port: number; - /** - * @since v15.14.0, v14.18.0 - */ - readonly flowlabel: number; - /** - * @since v22.13.0 - * @param input An input string containing an IP address and optional port, - * e.g. `123.1.2.3:1234` or `[1::1]:1234`. - * @returns Returns a `SocketAddress` if parsing was successful. - * Otherwise returns `undefined`. - */ - static parse(input: string): SocketAddress | undefined; - } -} -declare module "net" { - export * from "node:net"; -} diff --git a/skills/flight-finder/node_modules/@types/node/os.d.ts b/skills/flight-finder/node_modules/@types/node/os.d.ts deleted file mode 100644 index db86e9b..0000000 --- a/skills/flight-finder/node_modules/@types/node/os.d.ts +++ /dev/null @@ -1,507 +0,0 @@ -/** - * The `node:os` module provides operating system-related utility methods and - * properties. It can be accessed using: - * - * ```js - * import os from 'node:os'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/os.js) - */ -declare module "node:os" { - import { NonSharedBuffer } from "buffer"; - interface CpuInfo { - model: string; - speed: number; - times: { - /** The number of milliseconds the CPU has spent in user mode. */ - user: number; - /** The number of milliseconds the CPU has spent in nice mode. */ - nice: number; - /** The number of milliseconds the CPU has spent in sys mode. */ - sys: number; - /** The number of milliseconds the CPU has spent in idle mode. */ - idle: number; - /** The number of milliseconds the CPU has spent in irq mode. */ - irq: number; - }; - } - interface NetworkInterfaceBase { - address: string; - netmask: string; - mac: string; - internal: boolean; - cidr: string | null; - scopeid?: number; - } - interface NetworkInterfaceInfoIPv4 extends NetworkInterfaceBase { - family: "IPv4"; - } - interface NetworkInterfaceInfoIPv6 extends NetworkInterfaceBase { - family: "IPv6"; - scopeid: number; - } - interface UserInfo { - username: T; - uid: number; - gid: number; - shell: T | null; - homedir: T; - } - type NetworkInterfaceInfo = NetworkInterfaceInfoIPv4 | NetworkInterfaceInfoIPv6; - /** - * Returns the host name of the operating system as a string. - * @since v0.3.3 - */ - function hostname(): string; - /** - * Returns an array containing the 1, 5, and 15 minute load averages. - * - * The load average is a measure of system activity calculated by the operating - * system and expressed as a fractional number. - * - * The load average is a Unix-specific concept. On Windows, the return value is - * always `[0, 0, 0]`. - * @since v0.3.3 - */ - function loadavg(): number[]; - /** - * Returns the system uptime in number of seconds. - * @since v0.3.3 - */ - function uptime(): number; - /** - * Returns the amount of free system memory in bytes as an integer. - * @since v0.3.3 - */ - function freemem(): number; - /** - * Returns the total amount of system memory in bytes as an integer. - * @since v0.3.3 - */ - function totalmem(): number; - /** - * Returns an array of objects containing information about each logical CPU core. - * The array will be empty if no CPU information is available, such as if the `/proc` file system is unavailable. - * - * The properties included on each object include: - * - * ```js - * [ - * { - * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', - * speed: 2926, - * times: { - * user: 252020, - * nice: 0, - * sys: 30340, - * idle: 1070356870, - * irq: 0, - * }, - * }, - * { - * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', - * speed: 2926, - * times: { - * user: 306960, - * nice: 0, - * sys: 26980, - * idle: 1071569080, - * irq: 0, - * }, - * }, - * { - * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', - * speed: 2926, - * times: { - * user: 248450, - * nice: 0, - * sys: 21750, - * idle: 1070919370, - * irq: 0, - * }, - * }, - * { - * model: 'Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz', - * speed: 2926, - * times: { - * user: 256880, - * nice: 0, - * sys: 19430, - * idle: 1070905480, - * irq: 20, - * }, - * }, - * ] - * ``` - * - * `nice` values are POSIX-only. On Windows, the `nice` values of all processors - * are always 0. - * - * `os.cpus().length` should not be used to calculate the amount of parallelism - * available to an application. Use {@link availableParallelism} for this purpose. - * @since v0.3.3 - */ - function cpus(): CpuInfo[]; - /** - * Returns an estimate of the default amount of parallelism a program should use. - * Always returns a value greater than zero. - * - * This function is a small wrapper about libuv's [`uv_available_parallelism()`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_available_parallelism). - * @since v19.4.0, v18.14.0 - */ - function availableParallelism(): number; - /** - * Returns the operating system name as returned by [`uname(3)`](https://linux.die.net/man/3/uname). For example, it - * returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. - * - * See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for additional information - * about the output of running [`uname(3)`](https://linux.die.net/man/3/uname) on various operating systems. - * @since v0.3.3 - */ - function type(): string; - /** - * Returns the operating system as a string. - * - * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `GetVersionExW()` is used. See - * [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. - * @since v0.3.3 - */ - function release(): string; - /** - * Returns an object containing network interfaces that have been assigned a - * network address. - * - * Each key on the returned object identifies a network interface. The associated - * value is an array of objects that each describe an assigned network address. - * - * The properties available on the assigned network address object include: - * - * ```js - * { - * lo: [ - * { - * address: '127.0.0.1', - * netmask: '255.0.0.0', - * family: 'IPv4', - * mac: '00:00:00:00:00:00', - * internal: true, - * cidr: '127.0.0.1/8' - * }, - * { - * address: '::1', - * netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', - * family: 'IPv6', - * mac: '00:00:00:00:00:00', - * scopeid: 0, - * internal: true, - * cidr: '::1/128' - * } - * ], - * eth0: [ - * { - * address: '192.168.1.108', - * netmask: '255.255.255.0', - * family: 'IPv4', - * mac: '01:02:03:0a:0b:0c', - * internal: false, - * cidr: '192.168.1.108/24' - * }, - * { - * address: 'fe80::a00:27ff:fe4e:66a1', - * netmask: 'ffff:ffff:ffff:ffff::', - * family: 'IPv6', - * mac: '01:02:03:0a:0b:0c', - * scopeid: 1, - * internal: false, - * cidr: 'fe80::a00:27ff:fe4e:66a1/64' - * } - * ] - * } - * ``` - * @since v0.6.0 - */ - function networkInterfaces(): NodeJS.Dict; - /** - * Returns the string path of the current user's home directory. - * - * On POSIX, it uses the `$HOME` environment variable if defined. Otherwise it - * uses the [effective UID](https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID) to look up the user's home directory. - * - * On Windows, it uses the `USERPROFILE` environment variable if defined. - * Otherwise it uses the path to the profile directory of the current user. - * @since v2.3.0 - */ - function homedir(): string; - interface UserInfoOptions { - encoding?: BufferEncoding | "buffer" | undefined; - } - interface UserInfoOptionsWithBufferEncoding extends UserInfoOptions { - encoding: "buffer"; - } - interface UserInfoOptionsWithStringEncoding extends UserInfoOptions { - encoding?: BufferEncoding | undefined; - } - /** - * Returns information about the currently effective user. On POSIX platforms, - * this is typically a subset of the password file. The returned object includes - * the `username`, `uid`, `gid`, `shell`, and `homedir`. On Windows, the `uid` and `gid` fields are `-1`, and `shell` is `null`. - * - * The value of `homedir` returned by `os.userInfo()` is provided by the operating - * system. This differs from the result of `os.homedir()`, which queries - * environment variables for the home directory before falling back to the - * operating system response. - * - * Throws a [`SystemError`](https://nodejs.org/docs/latest-v25.x/api/errors.html#class-systemerror) if a user has no `username` or `homedir`. - * @since v6.0.0 - */ - function userInfo(options?: UserInfoOptionsWithStringEncoding): UserInfo; - function userInfo(options: UserInfoOptionsWithBufferEncoding): UserInfo; - function userInfo(options: UserInfoOptions): UserInfo; - type SignalConstants = { - [key in NodeJS.Signals]: number; - }; - namespace constants { - const UV_UDP_REUSEADDR: number; - namespace signals {} - const signals: SignalConstants; - namespace errno { - const E2BIG: number; - const EACCES: number; - const EADDRINUSE: number; - const EADDRNOTAVAIL: number; - const EAFNOSUPPORT: number; - const EAGAIN: number; - const EALREADY: number; - const EBADF: number; - const EBADMSG: number; - const EBUSY: number; - const ECANCELED: number; - const ECHILD: number; - const ECONNABORTED: number; - const ECONNREFUSED: number; - const ECONNRESET: number; - const EDEADLK: number; - const EDESTADDRREQ: number; - const EDOM: number; - const EDQUOT: number; - const EEXIST: number; - const EFAULT: number; - const EFBIG: number; - const EHOSTUNREACH: number; - const EIDRM: number; - const EILSEQ: number; - const EINPROGRESS: number; - const EINTR: number; - const EINVAL: number; - const EIO: number; - const EISCONN: number; - const EISDIR: number; - const ELOOP: number; - const EMFILE: number; - const EMLINK: number; - const EMSGSIZE: number; - const EMULTIHOP: number; - const ENAMETOOLONG: number; - const ENETDOWN: number; - const ENETRESET: number; - const ENETUNREACH: number; - const ENFILE: number; - const ENOBUFS: number; - const ENODATA: number; - const ENODEV: number; - const ENOENT: number; - const ENOEXEC: number; - const ENOLCK: number; - const ENOLINK: number; - const ENOMEM: number; - const ENOMSG: number; - const ENOPROTOOPT: number; - const ENOSPC: number; - const ENOSR: number; - const ENOSTR: number; - const ENOSYS: number; - const ENOTCONN: number; - const ENOTDIR: number; - const ENOTEMPTY: number; - const ENOTSOCK: number; - const ENOTSUP: number; - const ENOTTY: number; - const ENXIO: number; - const EOPNOTSUPP: number; - const EOVERFLOW: number; - const EPERM: number; - const EPIPE: number; - const EPROTO: number; - const EPROTONOSUPPORT: number; - const EPROTOTYPE: number; - const ERANGE: number; - const EROFS: number; - const ESPIPE: number; - const ESRCH: number; - const ESTALE: number; - const ETIME: number; - const ETIMEDOUT: number; - const ETXTBSY: number; - const EWOULDBLOCK: number; - const EXDEV: number; - const WSAEINTR: number; - const WSAEBADF: number; - const WSAEACCES: number; - const WSAEFAULT: number; - const WSAEINVAL: number; - const WSAEMFILE: number; - const WSAEWOULDBLOCK: number; - const WSAEINPROGRESS: number; - const WSAEALREADY: number; - const WSAENOTSOCK: number; - const WSAEDESTADDRREQ: number; - const WSAEMSGSIZE: number; - const WSAEPROTOTYPE: number; - const WSAENOPROTOOPT: number; - const WSAEPROTONOSUPPORT: number; - const WSAESOCKTNOSUPPORT: number; - const WSAEOPNOTSUPP: number; - const WSAEPFNOSUPPORT: number; - const WSAEAFNOSUPPORT: number; - const WSAEADDRINUSE: number; - const WSAEADDRNOTAVAIL: number; - const WSAENETDOWN: number; - const WSAENETUNREACH: number; - const WSAENETRESET: number; - const WSAECONNABORTED: number; - const WSAECONNRESET: number; - const WSAENOBUFS: number; - const WSAEISCONN: number; - const WSAENOTCONN: number; - const WSAESHUTDOWN: number; - const WSAETOOMANYREFS: number; - const WSAETIMEDOUT: number; - const WSAECONNREFUSED: number; - const WSAELOOP: number; - const WSAENAMETOOLONG: number; - const WSAEHOSTDOWN: number; - const WSAEHOSTUNREACH: number; - const WSAENOTEMPTY: number; - const WSAEPROCLIM: number; - const WSAEUSERS: number; - const WSAEDQUOT: number; - const WSAESTALE: number; - const WSAEREMOTE: number; - const WSASYSNOTREADY: number; - const WSAVERNOTSUPPORTED: number; - const WSANOTINITIALISED: number; - const WSAEDISCON: number; - const WSAENOMORE: number; - const WSAECANCELLED: number; - const WSAEINVALIDPROCTABLE: number; - const WSAEINVALIDPROVIDER: number; - const WSAEPROVIDERFAILEDINIT: number; - const WSASYSCALLFAILURE: number; - const WSASERVICE_NOT_FOUND: number; - const WSATYPE_NOT_FOUND: number; - const WSA_E_NO_MORE: number; - const WSA_E_CANCELLED: number; - const WSAEREFUSED: number; - } - namespace dlopen { - const RTLD_LAZY: number; - const RTLD_NOW: number; - const RTLD_GLOBAL: number; - const RTLD_LOCAL: number; - const RTLD_DEEPBIND: number; - } - namespace priority { - const PRIORITY_LOW: number; - const PRIORITY_BELOW_NORMAL: number; - const PRIORITY_NORMAL: number; - const PRIORITY_ABOVE_NORMAL: number; - const PRIORITY_HIGH: number; - const PRIORITY_HIGHEST: number; - } - } - const devNull: string; - /** - * The operating system-specific end-of-line marker. - * * `\n` on POSIX - * * `\r\n` on Windows - */ - const EOL: string; - /** - * Returns the operating system CPU architecture for which the Node.js binary was - * compiled. Possible values are `'arm'`, `'arm64'`, `'ia32'`, `'loong64'`, - * `'mips'`, `'mipsel'`, `'ppc64'`, `'riscv64'`, `'s390x'`, and `'x64'`. - * - * The return value is equivalent to [process.arch](https://nodejs.org/docs/latest-v25.x/api/process.html#processarch). - * @since v0.5.0 - */ - function arch(): NodeJS.Architecture; - /** - * Returns a string identifying the kernel version. - * - * On POSIX systems, the operating system release is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not - * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. - * @since v13.11.0, v12.17.0 - */ - function version(): string; - /** - * Returns a string identifying the operating system platform for which - * the Node.js binary was compiled. The value is set at compile time. - * Possible values are `'aix'`, `'darwin'`, `'freebsd'`, `'linux'`, `'openbsd'`, `'sunos'`, and `'win32'`. - * - * The return value is equivalent to `process.platform`. - * - * The value `'android'` may also be returned if Node.js is built on the Android - * operating system. [Android support is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). - * @since v0.5.0 - */ - function platform(): NodeJS.Platform; - /** - * Returns the machine type as a string, such as `arm`, `arm64`, `aarch64`, - * `mips`, `mips64`, `ppc64`, `ppc64le`, `s390x`, `i386`, `i686`, `x86_64`. - * - * On POSIX systems, the machine type is determined by calling [`uname(3)`](https://linux.die.net/man/3/uname). On Windows, `RtlGetVersion()` is used, and if it is not - * available, `GetVersionExW()` will be used. See [https://en.wikipedia.org/wiki/Uname#Examples](https://en.wikipedia.org/wiki/Uname#Examples) for more information. - * @since v18.9.0, v16.18.0 - */ - function machine(): string; - /** - * Returns the operating system's default directory for temporary files as a - * string. - * @since v0.9.9 - */ - function tmpdir(): string; - /** - * Returns a string identifying the endianness of the CPU for which the Node.js - * binary was compiled. - * - * Possible values are `'BE'` for big endian and `'LE'` for little endian. - * @since v0.9.4 - */ - function endianness(): "BE" | "LE"; - /** - * Returns the scheduling priority for the process specified by `pid`. If `pid` is - * not provided or is `0`, the priority of the current process is returned. - * @since v10.10.0 - * @param [pid=0] The process ID to retrieve scheduling priority for. - */ - function getPriority(pid?: number): number; - /** - * Attempts to set the scheduling priority for the process specified by `pid`. If `pid` is not provided or is `0`, the process ID of the current process is used. - * - * The `priority` input must be an integer between `-20` (high priority) and `19` (low priority). Due to differences between Unix priority levels and Windows - * priority classes, `priority` is mapped to one of six priority constants in `os.constants.priority`. When retrieving a process priority level, this range - * mapping may cause the return value to be slightly different on Windows. To avoid - * confusion, set `priority` to one of the priority constants. - * - * On Windows, setting priority to `PRIORITY_HIGHEST` requires elevated user - * privileges. Otherwise the set priority will be silently reduced to `PRIORITY_HIGH`. - * @since v10.10.0 - * @param [pid=0] The process ID to set scheduling priority for. - * @param priority The scheduling priority to assign to the process. - */ - function setPriority(priority: number): void; - function setPriority(pid: number, priority: number): void; -} -declare module "os" { - export * from "node:os"; -} diff --git a/skills/flight-finder/node_modules/@types/node/package.json b/skills/flight-finder/node_modules/@types/node/package.json deleted file mode 100644 index b9affa9..0000000 --- a/skills/flight-finder/node_modules/@types/node/package.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "name": "@types/node", - "version": "25.5.0", - "description": "TypeScript definitions for node", - "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node", - "license": "MIT", - "contributors": [ - { - "name": "Microsoft TypeScript", - "githubUsername": "Microsoft", - "url": "https://github.com/Microsoft" - }, - { - "name": "Alberto Schiabel", - "githubUsername": "jkomyno", - "url": "https://github.com/jkomyno" - }, - { - "name": "Andrew Makarov", - "githubUsername": "r3nya", - "url": "https://github.com/r3nya" - }, - { - "name": "Benjamin Toueg", - "githubUsername": "btoueg", - "url": "https://github.com/btoueg" - }, - { - "name": "David Junger", - "githubUsername": "touffy", - "url": "https://github.com/touffy" - }, - { - "name": "Mohsen Azimi", - "githubUsername": "mohsen1", - "url": "https://github.com/mohsen1" - }, - { - "name": "Nikita Galkin", - "githubUsername": "galkin", - "url": "https://github.com/galkin" - }, - { - "name": "Sebastian Silbermann", - "githubUsername": "eps1lon", - "url": "https://github.com/eps1lon" - }, - { - "name": "Wilco Bakker", - "githubUsername": "WilcoBakker", - "url": "https://github.com/WilcoBakker" - }, - { - "name": "Marcin Kopacz", - "githubUsername": "chyzwar", - "url": "https://github.com/chyzwar" - }, - { - "name": "Trivikram Kamat", - "githubUsername": "trivikr", - "url": "https://github.com/trivikr" - }, - { - "name": "Junxiao Shi", - "githubUsername": "yoursunny", - "url": "https://github.com/yoursunny" - }, - { - "name": "Ilia Baryshnikov", - "githubUsername": "qwelias", - "url": "https://github.com/qwelias" - }, - { - "name": "ExE Boss", - "githubUsername": "ExE-Boss", - "url": "https://github.com/ExE-Boss" - }, - { - "name": "Piotr Błażejewicz", - "githubUsername": "peterblazejewicz", - "url": "https://github.com/peterblazejewicz" - }, - { - "name": "Anna Henningsen", - "githubUsername": "addaleax", - "url": "https://github.com/addaleax" - }, - { - "name": "Victor Perin", - "githubUsername": "victorperin", - "url": "https://github.com/victorperin" - }, - { - "name": "NodeJS Contributors", - "githubUsername": "NodeJS", - "url": "https://github.com/NodeJS" - }, - { - "name": "Linus Unnebäck", - "githubUsername": "LinusU", - "url": "https://github.com/LinusU" - }, - { - "name": "wafuwafu13", - "githubUsername": "wafuwafu13", - "url": "https://github.com/wafuwafu13" - }, - { - "name": "Matteo Collina", - "githubUsername": "mcollina", - "url": "https://github.com/mcollina" - }, - { - "name": "Dmitry Semigradsky", - "githubUsername": "Semigradsky", - "url": "https://github.com/Semigradsky" - }, - { - "name": "René", - "githubUsername": "Renegade334", - "url": "https://github.com/Renegade334" - }, - { - "name": "Yagiz Nizipli", - "githubUsername": "anonrig", - "url": "https://github.com/anonrig" - } - ], - "main": "", - "types": "index.d.ts", - "typesVersions": { - "<=5.6": { - "*": [ - "ts5.6/*" - ] - }, - "<=5.7": { - "*": [ - "ts5.7/*" - ] - } - }, - "repository": { - "type": "git", - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", - "directory": "types/node" - }, - "scripts": {}, - "dependencies": { - "undici-types": "~7.18.0" - }, - "peerDependencies": {}, - "typesPublisherContentHash": "4b6968335abe1dc64bd6086fd546d6e9c50f986c37d49de8073f4ed1c900057c", - "typeScriptVersion": "5.2" -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/@types/node/path.d.ts b/skills/flight-finder/node_modules/@types/node/path.d.ts deleted file mode 100644 index c0b22f6..0000000 --- a/skills/flight-finder/node_modules/@types/node/path.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -/** - * The `node:path` module provides utilities for working with file and directory - * paths. It can be accessed using: - * - * ```js - * import path from 'node:path'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/path.js) - */ -declare module "node:path" { - namespace path { - /** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ - interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; - } - interface FormatInputPathObject { - /** - * The root of the path such as '/' or 'c:\' - */ - root?: string | undefined; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir?: string | undefined; - /** - * The file name including extension (if any) such as 'index.html' - */ - base?: string | undefined; - /** - * The file extension (if any) such as '.html' - */ - ext?: string | undefined; - /** - * The file name without extension (if any) such as 'index' - */ - name?: string | undefined; - } - /** - * Normalize a string path, reducing '..' and '.' parts. - * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. If the path is a zero-length string, '.' is returned, representing the current working directory. - * - * @param path string path to normalize. - * @throws {TypeError} if `path` is not a string. - */ - function normalize(path: string): string; - /** - * Join all arguments together and normalize the resulting path. - * - * @param paths paths to join. - * @throws {TypeError} if any of the path segments is not a string. - */ - function join(...paths: string[]): string; - /** - * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. - * - * Starting from leftmost {from} parameter, resolves {to} to an absolute path. - * - * If {to} isn't already absolute, {from} arguments are prepended in right to left order, - * until an absolute path is found. If after using all {from} paths still no absolute path is found, - * the current working directory is used as well. The resulting path is normalized, - * and trailing slashes are removed unless the path gets resolved to the root directory. - * - * @param paths A sequence of paths or path segments. - * @throws {TypeError} if any of the arguments is not a string. - */ - function resolve(...paths: string[]): string; - /** - * The `path.matchesGlob()` method determines if `path` matches the `pattern`. - * @param path The path to glob-match against. - * @param pattern The glob to check the path against. - * @returns Whether or not the `path` matched the `pattern`. - * @throws {TypeError} if `path` or `pattern` are not strings. - * @since v22.5.0 - */ - function matchesGlob(path: string, pattern: string): boolean; - /** - * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. - * - * If the given {path} is a zero-length string, `false` will be returned. - * - * @param path path to test. - * @throws {TypeError} if `path` is not a string. - */ - function isAbsolute(path: string): boolean; - /** - * Solve the relative path from {from} to {to} based on the current working directory. - * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. - * - * @throws {TypeError} if either `from` or `to` is not a string. - */ - function relative(from: string, to: string): string; - /** - * Return the directory name of a path. Similar to the Unix dirname command. - * - * @param path the path to evaluate. - * @throws {TypeError} if `path` is not a string. - */ - function dirname(path: string): string; - /** - * Return the last portion of a path. Similar to the Unix basename command. - * Often used to extract the file name from a fully qualified path. - * - * @param path the path to evaluate. - * @param suffix optionally, an extension to remove from the result. - * @throws {TypeError} if `path` is not a string or if `ext` is given and is not a string. - */ - function basename(path: string, suffix?: string): string; - /** - * Return the extension of the path, from the last '.' to end of string in the last portion of the path. - * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string. - * - * @param path the path to evaluate. - * @throws {TypeError} if `path` is not a string. - */ - function extname(path: string): string; - /** - * The platform-specific file separator. '\\' or '/'. - */ - const sep: "\\" | "/"; - /** - * The platform-specific file delimiter. ';' or ':'. - */ - const delimiter: ";" | ":"; - /** - * Returns an object from a path string - the opposite of format(). - * - * @param path path to evaluate. - * @throws {TypeError} if `path` is not a string. - */ - function parse(path: string): ParsedPath; - /** - * Returns a path string from an object - the opposite of parse(). - * - * @param pathObject path to evaluate. - */ - function format(pathObject: FormatInputPathObject): string; - /** - * On Windows systems only, returns an equivalent namespace-prefixed path for the given path. - * If path is not a string, path will be returned without modifications. - * This method is meaningful only on Windows system. - * On POSIX systems, the method is non-operational and always returns path without modifications. - */ - function toNamespacedPath(path: string): string; - } - namespace path { - export { - /** - * The `path.posix` property provides access to POSIX specific implementations of the `path` methods. - * - * The API is accessible via `require('node:path').posix` or `require('node:path/posix')`. - */ - path as posix, - /** - * The `path.win32` property provides access to Windows-specific implementations of the `path` methods. - * - * The API is accessible via `require('node:path').win32` or `require('node:path/win32')`. - */ - path as win32, - }; - } - export = path; -} -declare module "path" { - import path = require("node:path"); - export = path; -} diff --git a/skills/flight-finder/node_modules/@types/node/path/posix.d.ts b/skills/flight-finder/node_modules/@types/node/path/posix.d.ts deleted file mode 100644 index d60f629..0000000 --- a/skills/flight-finder/node_modules/@types/node/path/posix.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare module "node:path/posix" { - import path = require("node:path"); - export = path.posix; -} -declare module "path/posix" { - import path = require("path"); - export = path.posix; -} diff --git a/skills/flight-finder/node_modules/@types/node/path/win32.d.ts b/skills/flight-finder/node_modules/@types/node/path/win32.d.ts deleted file mode 100644 index e6aa9fa..0000000 --- a/skills/flight-finder/node_modules/@types/node/path/win32.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare module "node:path/win32" { - import path = require("node:path"); - export = path.win32; -} -declare module "path/win32" { - import path = require("path"); - export = path.win32; -} diff --git a/skills/flight-finder/node_modules/@types/node/perf_hooks.d.ts b/skills/flight-finder/node_modules/@types/node/perf_hooks.d.ts deleted file mode 100644 index 4dd0632..0000000 --- a/skills/flight-finder/node_modules/@types/node/perf_hooks.d.ts +++ /dev/null @@ -1,643 +0,0 @@ -/** - * This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for - * Node.js-specific performance measurements. - * - * Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/): - * - * * [High Resolution Time](https://www.w3.org/TR/hr-time-2) - * * [Performance Timeline](https://w3c.github.io/performance-timeline/) - * * [User Timing](https://www.w3.org/TR/user-timing/) - * * [Resource Timing](https://www.w3.org/TR/resource-timing-2/) - * - * ```js - * import { PerformanceObserver, performance } from 'node:perf_hooks'; - * - * const obs = new PerformanceObserver((items) => { - * console.log(items.getEntries()[0].duration); - * performance.clearMarks(); - * }); - * obs.observe({ type: 'measure' }); - * performance.measure('Start to Now'); - * - * performance.mark('A'); - * doSomeLongRunningProcess(() => { - * performance.measure('A to Now', 'A'); - * - * performance.mark('B'); - * performance.measure('A to B', 'A', 'B'); - * }); - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/perf_hooks.js) - */ -declare module "node:perf_hooks" { - import { InternalEventTargetEventProperties } from "node:events"; - // #region web types - type EntryType = - | "dns" // Node.js only - | "function" // Node.js only - | "gc" // Node.js only - | "http2" // Node.js only - | "http" // Node.js only - | "mark" // available on the Web - | "measure" // available on the Web - | "net" // Node.js only - | "node" // Node.js only - | "resource"; // available on the Web - interface ConnectionTimingInfo { - domainLookupStartTime: number; - domainLookupEndTime: number; - connectionStartTime: number; - connectionEndTime: number; - secureConnectionStartTime: number; - ALPNNegotiatedProtocol: string; - } - interface FetchTimingInfo { - startTime: number; - redirectStartTime: number; - redirectEndTime: number; - postRedirectStartTime: number; - finalServiceWorkerStartTime: number; - finalNetworkRequestStartTime: number; - finalNetworkResponseStartTime: number; - endTime: number; - finalConnectionTimingInfo: ConnectionTimingInfo | null; - encodedBodySize: number; - decodedBodySize: number; - } - type PerformanceEntryList = PerformanceEntry[]; - interface PerformanceMarkOptions { - detail?: any; - startTime?: number; - } - interface PerformanceMeasureOptions { - detail?: any; - duration?: number; - end?: string | number; - start?: string | number; - } - interface PerformanceObserverCallback { - (entries: PerformanceObserverEntryList, observer: PerformanceObserver): void; - } - interface PerformanceObserverInit { - buffered?: boolean; - entryTypes?: EntryType[]; - type?: EntryType; - } - // TODO: remove in next major - /** @deprecated Use `TimerifyOptions` instead. */ - interface PerformanceTimerifyOptions extends TimerifyOptions {} - interface PerformanceEventMap { - "resourcetimingbufferfull": Event; - } - interface Performance extends EventTarget, InternalEventTargetEventProperties { - readonly nodeTiming: PerformanceNodeTiming; - readonly timeOrigin: number; - clearMarks(markName?: string): void; - clearMeasures(measureName?: string): void; - clearResourceTimings(resourceTimingName?: string): void; - getEntries(): PerformanceEntryList; - getEntriesByName(name: string, type?: EntryType): PerformanceEntryList; - getEntriesByType(type: EntryType): PerformanceEntryList; - mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark; - markResourceTiming( - timingInfo: FetchTimingInfo, - requestedUrl: string, - initiatorType: string, - global: unknown, - cacheMode: string, - bodyInfo: unknown, - responseStatus: number, - deliveryType?: string, - ): PerformanceResourceTiming; - measure(measureName: string, startMark?: string, endMark?: string): PerformanceMeasure; - measure(measureName: string, options: PerformanceMeasureOptions, endMark?: string): PerformanceMeasure; - now(): number; - setResourceTimingBufferSize(maxSize: number): void; - toJSON(): any; - addEventListener( - type: K, - listener: (ev: PerformanceEventMap[K]) => void, - options?: AddEventListenerOptions | boolean, - ): void; - addEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: AddEventListenerOptions | boolean, - ): void; - removeEventListener( - type: K, - listener: (ev: PerformanceEventMap[K]) => void, - options?: EventListenerOptions | boolean, - ): void; - removeEventListener( - type: string, - listener: EventListener | EventListenerObject, - options?: EventListenerOptions | boolean, - ): void; - /** - * This is an alias of `perf_hooks.eventLoopUtilization()`. - * - * _This property is an extension by Node.js. It is not available in Web browsers._ - * @since v14.10.0, v12.19.0 - * @param utilization1 The result of a previous call to - * `eventLoopUtilization()`. - * @param utilization2 The result of a previous call to - * `eventLoopUtilization()` prior to `utilization1`. - */ - eventLoopUtilization( - utilization1?: EventLoopUtilization, - utilization2?: EventLoopUtilization, - ): EventLoopUtilization; - /** - * This is an alias of `perf_hooks.timerify()`. - * - * _This property is an extension by Node.js. It is not available in Web browsers._ - * @since v8.5.0 - */ - timerify any>(fn: T, options?: TimerifyOptions): T; - } - var Performance: { - prototype: Performance; - new(): Performance; - }; - interface PerformanceEntry { - readonly duration: number; - readonly entryType: EntryType; - readonly name: string; - readonly startTime: number; - toJSON(): any; - } - var PerformanceEntry: { - prototype: PerformanceEntry; - new(): PerformanceEntry; - }; - interface PerformanceMark extends PerformanceEntry { - readonly detail: any; - readonly entryType: "mark"; - } - var PerformanceMark: { - prototype: PerformanceMark; - new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark; - }; - interface PerformanceMeasure extends PerformanceEntry { - readonly detail: any; - readonly entryType: "measure"; - } - var PerformanceMeasure: { - prototype: PerformanceMeasure; - new(): PerformanceMeasure; - }; - interface PerformanceObserver { - disconnect(): void; - observe(options: PerformanceObserverInit): void; - takeRecords(): PerformanceEntryList; - } - var PerformanceObserver: { - prototype: PerformanceObserver; - new(callback: PerformanceObserverCallback): PerformanceObserver; - readonly supportedEntryTypes: readonly EntryType[]; - }; - interface PerformanceObserverEntryList { - getEntries(): PerformanceEntryList; - getEntriesByName(name: string, type?: EntryType): PerformanceEntryList; - getEntriesByType(type: EntryType): PerformanceEntryList; - } - var PerformanceObserverEntryList: { - prototype: PerformanceObserverEntryList; - new(): PerformanceObserverEntryList; - }; - interface PerformanceResourceTiming extends PerformanceEntry { - readonly connectEnd: number; - readonly connectStart: number; - readonly decodedBodySize: number; - readonly domainLookupEnd: number; - readonly domainLookupStart: number; - readonly encodedBodySize: number; - readonly entryType: "resource"; - readonly fetchStart: number; - readonly initiatorType: string; - readonly nextHopProtocol: string; - readonly redirectEnd: number; - readonly redirectStart: number; - readonly requestStart: number; - readonly responseEnd: number; - readonly responseStart: number; - readonly responseStatus: number; - readonly secureConnectionStart: number; - readonly transferSize: number; - readonly workerStart: number; - toJSON(): any; - } - var PerformanceResourceTiming: { - prototype: PerformanceResourceTiming; - new(): PerformanceResourceTiming; - }; - var performance: Performance; - // #endregion - /** - * _This class is an extension by Node.js. It is not available in Web browsers._ - * - * Provides detailed Node.js timing data. - * - * The constructor of this class is not exposed to users directly. - * @since v19.0.0 - */ - class PerformanceNodeEntry extends PerformanceEntry { - /** - * Additional detail specific to the `entryType`. - * @since v16.0.0 - */ - readonly detail: any; - readonly entryType: "dns" | "function" | "gc" | "http2" | "http" | "net" | "node"; - } - interface UVMetrics { - /** - * Number of event loop iterations. - */ - readonly loopCount: number; - /** - * Number of events that have been processed by the event handler. - */ - readonly events: number; - /** - * Number of events that were waiting to be processed when the event provider was called. - */ - readonly eventsWaiting: number; - } - /** - * _This property is an extension by Node.js. It is not available in Web browsers._ - * - * Provides timing details for Node.js itself. The constructor of this class - * is not exposed to users. - * @since v8.5.0 - */ - interface PerformanceNodeTiming extends PerformanceEntry { - /** - * The high resolution millisecond timestamp at which the Node.js process - * completed bootstrapping. If bootstrapping has not yet finished, the property - * has the value of -1. - * @since v8.5.0 - */ - readonly bootstrapComplete: number; - readonly entryType: "node"; - /** - * The high resolution millisecond timestamp at which the Node.js environment was - * initialized. - * @since v8.5.0 - */ - readonly environment: number; - /** - * The high resolution millisecond timestamp of the amount of time the event loop - * has been idle within the event loop's event provider (e.g. `epoll_wait`). This - * does not take CPU usage into consideration. If the event loop has not yet - * started (e.g., in the first tick of the main script), the property has the - * value of 0. - * @since v14.10.0, v12.19.0 - */ - readonly idleTime: number; - /** - * The high resolution millisecond timestamp at which the Node.js event loop - * exited. If the event loop has not yet exited, the property has the value of -1\. - * It can only have a value of not -1 in a handler of the `'exit'` event. - * @since v8.5.0 - */ - readonly loopExit: number; - /** - * The high resolution millisecond timestamp at which the Node.js event loop - * started. If the event loop has not yet started (e.g., in the first tick of the - * main script), the property has the value of -1. - * @since v8.5.0 - */ - readonly loopStart: number; - /** - * The high resolution millisecond timestamp at which the Node.js process was initialized. - * @since v8.5.0 - */ - readonly nodeStart: number; - /** - * This is a wrapper to the `uv_metrics_info` function. - * It returns the current set of event loop metrics. - * - * It is recommended to use this property inside a function whose execution was - * scheduled using `setImmediate` to avoid collecting metrics before finishing all - * operations scheduled during the current loop iteration. - * @since v22.8.0, v20.18.0 - */ - readonly uvMetricsInfo: UVMetrics; - /** - * The high resolution millisecond timestamp at which the V8 platform was - * initialized. - * @since v8.5.0 - */ - readonly v8Start: number; - } - namespace constants { - const NODE_PERFORMANCE_GC_MAJOR: number; - const NODE_PERFORMANCE_GC_MINOR: number; - const NODE_PERFORMANCE_GC_INCREMENTAL: number; - const NODE_PERFORMANCE_GC_WEAKCB: number; - const NODE_PERFORMANCE_GC_FLAGS_NO: number; - const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number; - const NODE_PERFORMANCE_GC_FLAGS_FORCED: number; - const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number; - const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number; - const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number; - const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number; - } - interface EventLoopMonitorOptions { - /** - * The sampling rate in milliseconds. - * Must be greater than zero. - * @default 10 - */ - resolution?: number | undefined; - } - interface Histogram { - /** - * The number of samples recorded by the histogram. - * @since v17.4.0, v16.14.0 - */ - readonly count: number; - /** - * The number of samples recorded by the histogram. - * v17.4.0, v16.14.0 - */ - readonly countBigInt: bigint; - /** - * The number of times the event loop delay exceeded the maximum 1 hour event - * loop delay threshold. - * @since v11.10.0 - */ - readonly exceeds: number; - /** - * The number of times the event loop delay exceeded the maximum 1 hour event loop delay threshold. - * @since v17.4.0, v16.14.0 - */ - readonly exceedsBigInt: bigint; - /** - * The maximum recorded event loop delay. - * @since v11.10.0 - */ - readonly max: number; - /** - * The maximum recorded event loop delay. - * v17.4.0, v16.14.0 - */ - readonly maxBigInt: number; - /** - * The mean of the recorded event loop delays. - * @since v11.10.0 - */ - readonly mean: number; - /** - * The minimum recorded event loop delay. - * @since v11.10.0 - */ - readonly min: number; - /** - * The minimum recorded event loop delay. - * v17.4.0, v16.14.0 - */ - readonly minBigInt: bigint; - /** - * Returns the value at the given percentile. - * @since v11.10.0 - * @param percentile A percentile value in the range (0, 100]. - */ - percentile(percentile: number): number; - /** - * Returns the value at the given percentile. - * @since v17.4.0, v16.14.0 - * @param percentile A percentile value in the range (0, 100]. - */ - percentileBigInt(percentile: number): bigint; - /** - * Returns a `Map` object detailing the accumulated percentile distribution. - * @since v11.10.0 - */ - readonly percentiles: Map; - /** - * Returns a `Map` object detailing the accumulated percentile distribution. - * @since v17.4.0, v16.14.0 - */ - readonly percentilesBigInt: Map; - /** - * Resets the collected histogram data. - * @since v11.10.0 - */ - reset(): void; - /** - * The standard deviation of the recorded event loop delays. - * @since v11.10.0 - */ - readonly stddev: number; - } - interface IntervalHistogram extends Histogram { - /** - * Enables the update interval timer. Returns `true` if the timer was - * started, `false` if it was already started. - * @since v11.10.0 - */ - enable(): boolean; - /** - * Disables the update interval timer. Returns `true` if the timer was - * stopped, `false` if it was already stopped. - * @since v11.10.0 - */ - disable(): boolean; - /** - * Disables the update interval timer when the histogram is disposed. - * - * ```js - * const { monitorEventLoopDelay } = require('node:perf_hooks'); - * { - * using hist = monitorEventLoopDelay({ resolution: 20 }); - * hist.enable(); - * // The histogram will be disabled when the block is exited. - * } - * ``` - * @since v24.2.0 - */ - [Symbol.dispose](): void; - } - interface RecordableHistogram extends Histogram { - /** - * @since v15.9.0, v14.18.0 - * @param val The amount to record in the histogram. - */ - record(val: number | bigint): void; - /** - * Calculates the amount of time (in nanoseconds) that has passed since the - * previous call to `recordDelta()` and records that amount in the histogram. - * @since v15.9.0, v14.18.0 - */ - recordDelta(): void; - /** - * Adds the values from `other` to this histogram. - * @since v17.4.0, v16.14.0 - */ - add(other: RecordableHistogram): void; - } - interface EventLoopUtilization { - idle: number; - active: number; - utilization: number; - } - /** - * The `eventLoopUtilization()` function returns an object that contains the - * cumulative duration of time the event loop has been both idle and active as a - * high resolution milliseconds timer. The `utilization` value is the calculated - * Event Loop Utilization (ELU). - * - * If bootstrapping has not yet finished on the main thread the properties have - * the value of `0`. The ELU is immediately available on [Worker threads](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html#worker-threads) since - * bootstrap happens within the event loop. - * - * Both `utilization1` and `utilization2` are optional parameters. - * - * If `utilization1` is passed, then the delta between the current call's `active` - * and `idle` times, as well as the corresponding `utilization` value are - * calculated and returned (similar to `process.hrtime()`). - * - * If `utilization1` and `utilization2` are both passed, then the delta is - * calculated between the two arguments. This is a convenience option because, - * unlike `process.hrtime()`, calculating the ELU is more complex than a - * single subtraction. - * - * ELU is similar to CPU utilization, except that it only measures event loop - * statistics and not CPU usage. It represents the percentage of time the event - * loop has spent outside the event loop's event provider (e.g. `epoll_wait`). - * No other CPU idle time is taken into consideration. The following is an example - * of how a mostly idle process will have a high ELU. - * - * ```js - * import { eventLoopUtilization } from 'node:perf_hooks'; - * import { spawnSync } from 'node:child_process'; - * - * setImmediate(() => { - * const elu = eventLoopUtilization(); - * spawnSync('sleep', ['5']); - * console.log(eventLoopUtilization(elu).utilization); - * }); - * ``` - * - * Although the CPU is mostly idle while running this script, the value of - * `utilization` is `1`. This is because the call to - * `child_process.spawnSync()` blocks the event loop from proceeding. - * - * Passing in a user-defined object instead of the result of a previous call to - * `eventLoopUtilization()` will lead to undefined behavior. The return values - * are not guaranteed to reflect any correct state of the event loop. - * @since v25.2.0 - * @param utilization1 The result of a previous call to - * `eventLoopUtilization()`. - * @param utilization2 The result of a previous call to - * `eventLoopUtilization()` prior to `utilization1`. - */ - function eventLoopUtilization( - utilization1?: EventLoopUtilization, - utilization2?: EventLoopUtilization, - ): EventLoopUtilization; - /** - * _This property is an extension by Node.js. It is not available in Web browsers._ - * - * Creates an `IntervalHistogram` object that samples and reports the event loop - * delay over time. The delays will be reported in nanoseconds. - * - * Using a timer to detect approximate event loop delay works because the - * execution of timers is tied specifically to the lifecycle of the libuv - * event loop. That is, a delay in the loop will cause a delay in the execution - * of the timer, and those delays are specifically what this API is intended to - * detect. - * - * ```js - * import { monitorEventLoopDelay } from 'node:perf_hooks'; - * const h = monitorEventLoopDelay({ resolution: 20 }); - * h.enable(); - * // Do something. - * h.disable(); - * console.log(h.min); - * console.log(h.max); - * console.log(h.mean); - * console.log(h.stddev); - * console.log(h.percentiles); - * console.log(h.percentile(50)); - * console.log(h.percentile(99)); - * ``` - * @since v11.10.0 - */ - function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram; - interface TimerifyOptions { - /** - * A histogram object created using - * `perf_hooks.createHistogram()` that will record runtime durations in - * nanoseconds. - */ - histogram?: RecordableHistogram | undefined; - } - /** - * _This property is an extension by Node.js. It is not available in Web browsers._ - * - * Wraps a function within a new function that measures the running time of the - * wrapped function. A `PerformanceObserver` must be subscribed to the `'function'` - * event type in order for the timing details to be accessed. - * - * ```js - * import { timerify, performance, PerformanceObserver } from 'node:perf_hooks'; - * - * function someFunction() { - * console.log('hello world'); - * } - * - * const wrapped = timerify(someFunction); - * - * const obs = new PerformanceObserver((list) => { - * console.log(list.getEntries()[0].duration); - * - * performance.clearMarks(); - * performance.clearMeasures(); - * obs.disconnect(); - * }); - * obs.observe({ entryTypes: ['function'] }); - * - * // A performance timeline entry will be created - * wrapped(); - * ``` - * - * If the wrapped function returns a promise, a finally handler will be attached - * to the promise and the duration will be reported once the finally handler is - * invoked. - * @since v25.2.0 - */ - function timerify any>(fn: T, options?: TimerifyOptions): T; - interface CreateHistogramOptions { - /** - * The minimum recordable value. Must be an integer value greater than 0. - * @default 1 - */ - lowest?: number | bigint | undefined; - /** - * The maximum recordable value. Must be an integer value greater than min. - * @default Number.MAX_SAFE_INTEGER - */ - highest?: number | bigint | undefined; - /** - * The number of accuracy digits. Must be a number between 1 and 5. - * @default 3 - */ - figures?: number | undefined; - } - /** - * Returns a `RecordableHistogram`. - * @since v15.9.0, v14.18.0 - */ - function createHistogram(options?: CreateHistogramOptions): RecordableHistogram; - // TODO: remove these in a future major - /** @deprecated Use the canonical `PerformanceMarkOptions` instead. */ - interface MarkOptions extends PerformanceMarkOptions {} - /** @deprecated Use the canonical `PerformanceMeasureOptions` instead. */ - interface MeasureOptions extends PerformanceMeasureOptions {} -} -declare module "perf_hooks" { - export * from "node:perf_hooks"; -} diff --git a/skills/flight-finder/node_modules/@types/node/process.d.ts b/skills/flight-finder/node_modules/@types/node/process.d.ts deleted file mode 100644 index ea50c94..0000000 --- a/skills/flight-finder/node_modules/@types/node/process.d.ts +++ /dev/null @@ -1,2175 +0,0 @@ -declare module "node:process" { - import { Control, MessageOptions, SendHandle } from "node:child_process"; - import { PathLike } from "node:fs"; - import * as tty from "node:tty"; - import { Worker } from "node:worker_threads"; - interface BuiltInModule { - "assert": typeof import("assert"); - "node:assert": typeof import("node:assert"); - "assert/strict": typeof import("assert/strict"); - "node:assert/strict": typeof import("node:assert/strict"); - "async_hooks": typeof import("async_hooks"); - "node:async_hooks": typeof import("node:async_hooks"); - "buffer": typeof import("buffer"); - "node:buffer": typeof import("node:buffer"); - "child_process": typeof import("child_process"); - "node:child_process": typeof import("node:child_process"); - "cluster": typeof import("cluster"); - "node:cluster": typeof import("node:cluster"); - "console": typeof import("console"); - "node:console": typeof import("node:console"); - "constants": typeof import("constants"); - "node:constants": typeof import("node:constants"); - "crypto": typeof import("crypto"); - "node:crypto": typeof import("node:crypto"); - "dgram": typeof import("dgram"); - "node:dgram": typeof import("node:dgram"); - "diagnostics_channel": typeof import("diagnostics_channel"); - "node:diagnostics_channel": typeof import("node:diagnostics_channel"); - "dns": typeof import("dns"); - "node:dns": typeof import("node:dns"); - "dns/promises": typeof import("dns/promises"); - "node:dns/promises": typeof import("node:dns/promises"); - "domain": typeof import("domain"); - "node:domain": typeof import("node:domain"); - "events": typeof import("events"); - "node:events": typeof import("node:events"); - "fs": typeof import("fs"); - "node:fs": typeof import("node:fs"); - "fs/promises": typeof import("fs/promises"); - "node:fs/promises": typeof import("node:fs/promises"); - "http": typeof import("http"); - "node:http": typeof import("node:http"); - "http2": typeof import("http2"); - "node:http2": typeof import("node:http2"); - "https": typeof import("https"); - "node:https": typeof import("node:https"); - "inspector": typeof import("inspector"); - "node:inspector": typeof import("node:inspector"); - "inspector/promises": typeof import("inspector/promises"); - "node:inspector/promises": typeof import("node:inspector/promises"); - "module": typeof import("module"); - "node:module": typeof import("node:module"); - "net": typeof import("net"); - "node:net": typeof import("node:net"); - "os": typeof import("os"); - "node:os": typeof import("node:os"); - "path": typeof import("path"); - "node:path": typeof import("node:path"); - "path/posix": typeof import("path/posix"); - "node:path/posix": typeof import("node:path/posix"); - "path/win32": typeof import("path/win32"); - "node:path/win32": typeof import("node:path/win32"); - "perf_hooks": typeof import("perf_hooks"); - "node:perf_hooks": typeof import("node:perf_hooks"); - "process": typeof import("process"); - "node:process": typeof import("node:process"); - "punycode": typeof import("punycode"); - "node:punycode": typeof import("node:punycode"); - "querystring": typeof import("querystring"); - "node:querystring": typeof import("node:querystring"); - "node:quic": typeof import("node:quic"); - "readline": typeof import("readline"); - "node:readline": typeof import("node:readline"); - "readline/promises": typeof import("readline/promises"); - "node:readline/promises": typeof import("node:readline/promises"); - "repl": typeof import("repl"); - "node:repl": typeof import("node:repl"); - "node:sea": typeof import("node:sea"); - "node:sqlite": typeof import("node:sqlite"); - "stream": typeof import("stream"); - "node:stream": typeof import("node:stream"); - "stream/consumers": typeof import("stream/consumers"); - "node:stream/consumers": typeof import("node:stream/consumers"); - "stream/promises": typeof import("stream/promises"); - "node:stream/promises": typeof import("node:stream/promises"); - "stream/web": typeof import("stream/web"); - "node:stream/web": typeof import("node:stream/web"); - "string_decoder": typeof import("string_decoder"); - "node:string_decoder": typeof import("node:string_decoder"); - "node:test": typeof import("node:test"); - "node:test/reporters": typeof import("node:test/reporters"); - "timers": typeof import("timers"); - "node:timers": typeof import("node:timers"); - "timers/promises": typeof import("timers/promises"); - "node:timers/promises": typeof import("node:timers/promises"); - "tls": typeof import("tls"); - "node:tls": typeof import("node:tls"); - "trace_events": typeof import("trace_events"); - "node:trace_events": typeof import("node:trace_events"); - "tty": typeof import("tty"); - "node:tty": typeof import("node:tty"); - "url": typeof import("url"); - "node:url": typeof import("node:url"); - "util": typeof import("util"); - "node:util": typeof import("node:util"); - "util/types": typeof import("util/types"); - "node:util/types": typeof import("node:util/types"); - "v8": typeof import("v8"); - "node:v8": typeof import("node:v8"); - "vm": typeof import("vm"); - "node:vm": typeof import("node:vm"); - "wasi": typeof import("wasi"); - "node:wasi": typeof import("node:wasi"); - "worker_threads": typeof import("worker_threads"); - "node:worker_threads": typeof import("node:worker_threads"); - "zlib": typeof import("zlib"); - "node:zlib": typeof import("node:zlib"); - } - type SignalsEventMap = { [S in NodeJS.Signals]: [signal: S] }; - interface ProcessEventMap extends SignalsEventMap { - "beforeExit": [code: number]; - "disconnect": []; - "exit": [code: number]; - "message": [ - message: object | boolean | number | string | null, - sendHandle: SendHandle | undefined, - ]; - "rejectionHandled": [promise: Promise]; - "uncaughtException": [error: Error, origin: NodeJS.UncaughtExceptionOrigin]; - "uncaughtExceptionMonitor": [error: Error, origin: NodeJS.UncaughtExceptionOrigin]; - "unhandledRejection": [reason: unknown, promise: Promise]; - "warning": [warning: Error]; - "worker": [worker: Worker]; - "workerMessage": [value: any, source: number]; - } - global { - var process: NodeJS.Process; - namespace process { - export { ProcessEventMap }; - } - namespace NodeJS { - // this namespace merge is here because these are specifically used - // as the type for process.stdin, process.stdout, and process.stderr. - // they can't live in tty.d.ts because we need to disambiguate the imported name. - interface ReadStream extends tty.ReadStream {} - interface WriteStream extends tty.WriteStream {} - interface MemoryUsageFn { - /** - * The `process.memoryUsage()` method iterate over each page to gather informations about memory - * usage which can be slow depending on the program memory allocations. - */ - (): MemoryUsage; - /** - * method returns an integer representing the Resident Set Size (RSS) in bytes. - */ - rss(): number; - } - interface MemoryUsage { - /** - * Resident Set Size, is the amount of space occupied in the main memory device (that is a subset of the total allocated memory) for the - * process, including all C++ and JavaScript objects and code. - */ - rss: number; - /** - * Refers to V8's memory usage. - */ - heapTotal: number; - /** - * Refers to V8's memory usage. - */ - heapUsed: number; - external: number; - /** - * Refers to memory allocated for `ArrayBuffer`s and `SharedArrayBuffer`s, including all Node.js Buffers. This is also included - * in the external value. When Node.js is used as an embedded library, this value may be `0` because allocations for `ArrayBuffer`s - * may not be tracked in that case. - */ - arrayBuffers: number; - } - interface CpuUsage { - user: number; - system: number; - } - interface ProcessRelease { - name: string; - sourceUrl?: string | undefined; - headersUrl?: string | undefined; - libUrl?: string | undefined; - lts?: string | undefined; - } - interface ProcessFeatures { - /** - * A boolean value that is `true` if the current Node.js build is caching builtin modules. - * @since v12.0.0 - */ - readonly cached_builtins: boolean; - /** - * A boolean value that is `true` if the current Node.js build is a debug build. - * @since v0.5.5 - */ - readonly debug: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes the inspector. - * @since v11.10.0 - */ - readonly inspector: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes support for IPv6. - * - * Since all Node.js builds have IPv6 support, this value is always `true`. - * @since v0.5.3 - * @deprecated This property is always true, and any checks based on it are redundant. - */ - readonly ipv6: boolean; - /** - * A boolean value that is `true` if the current Node.js build supports - * [loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v25.x/api/modules.md#loading-ecmascript-modules-using-require). - * @since v22.10.0 - */ - readonly require_module: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes support for TLS. - * @since v0.5.3 - */ - readonly tls: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes support for ALPN in TLS. - * - * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional ALPN support. - * This value is therefore identical to that of `process.features.tls`. - * @since v4.8.0 - * @deprecated Use `process.features.tls` instead. - */ - readonly tls_alpn: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes support for OCSP in TLS. - * - * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional OCSP support. - * This value is therefore identical to that of `process.features.tls`. - * @since v0.11.13 - * @deprecated Use `process.features.tls` instead. - */ - readonly tls_ocsp: boolean; - /** - * A boolean value that is `true` if the current Node.js build includes support for SNI in TLS. - * - * In Node.js 11.0.0 and later versions, the OpenSSL dependencies feature unconditional SNI support. - * This value is therefore identical to that of `process.features.tls`. - * @since v0.5.3 - * @deprecated Use `process.features.tls` instead. - */ - readonly tls_sni: boolean; - /** - * A value that is `"strip"` by default, - * `"transform"` if Node.js is run with `--experimental-transform-types`, and `false` if - * Node.js is run with `--no-strip-types`. - * @since v22.10.0 - */ - readonly typescript: "strip" | "transform" | false; - /** - * A boolean value that is `true` if the current Node.js build includes support for libuv. - * - * Since it's not possible to build Node.js without libuv, this value is always `true`. - * @since v0.5.3 - * @deprecated This property is always true, and any checks based on it are redundant. - */ - readonly uv: boolean; - } - interface ProcessVersions extends Dict { - http_parser: string; - node: string; - v8: string; - ares: string; - uv: string; - zlib: string; - modules: string; - openssl: string; - } - type Platform = - | "aix" - | "android" - | "darwin" - | "freebsd" - | "haiku" - | "linux" - | "openbsd" - | "sunos" - | "win32" - | "cygwin" - | "netbsd"; - type Architecture = - | "arm" - | "arm64" - | "ia32" - | "loong64" - | "mips" - | "mipsel" - | "ppc64" - | "riscv64" - | "s390x" - | "x64"; - type Signals = - | "SIGABRT" - | "SIGALRM" - | "SIGBUS" - | "SIGCHLD" - | "SIGCONT" - | "SIGFPE" - | "SIGHUP" - | "SIGILL" - | "SIGINT" - | "SIGIO" - | "SIGIOT" - | "SIGKILL" - | "SIGPIPE" - | "SIGPOLL" - | "SIGPROF" - | "SIGPWR" - | "SIGQUIT" - | "SIGSEGV" - | "SIGSTKFLT" - | "SIGSTOP" - | "SIGSYS" - | "SIGTERM" - | "SIGTRAP" - | "SIGTSTP" - | "SIGTTIN" - | "SIGTTOU" - | "SIGUNUSED" - | "SIGURG" - | "SIGUSR1" - | "SIGUSR2" - | "SIGVTALRM" - | "SIGWINCH" - | "SIGXCPU" - | "SIGXFSZ" - | "SIGBREAK" - | "SIGLOST" - | "SIGINFO"; - type UncaughtExceptionOrigin = "uncaughtException" | "unhandledRejection"; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['beforeExit']) => { ... }; - * ``` - */ - type BeforeExitListener = (...args: ProcessEventMap["beforeExit"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['disconnect']) => { ... }; - * ``` - */ - type DisconnectListener = (...args: ProcessEventMap["disconnect"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['exit']) => { ... }; - * ``` - */ - type ExitListener = (...args: ProcessEventMap["exit"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['message']) => { ... }; - * ``` - */ - type MessageListener = (...args: ProcessEventMap["message"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['rejectionHandled']) => { ... }; - * ``` - */ - type RejectionHandledListener = (...args: ProcessEventMap["rejectionHandled"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - */ - type SignalsListener = (signal: Signals) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['uncaughtException']) => { ... }; - * ``` - */ - type UncaughtExceptionListener = (...args: ProcessEventMap["uncaughtException"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['unhandledRejection']) => { ... }; - * ``` - */ - type UnhandledRejectionListener = (...args: ProcessEventMap["unhandledRejection"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['warning']) => { ... }; - * ``` - */ - type WarningListener = (...args: ProcessEventMap["warning"]) => void; - /** - * @deprecated Global listener types will be removed in a future version. - * Callbacks passed directly to `process`'s EventEmitter methods - * have their parameter types inferred automatically. - * - * `process` event types are also available via `ProcessEventMap`: - * - * ```ts - * import type { ProcessEventMap } from 'node:process'; - * const listener = (...args: ProcessEventMap['worker']) => { ... }; - * ``` - */ - type WorkerListener = (...args: ProcessEventMap["worker"]) => void; - interface Socket extends ReadWriteStream { - isTTY?: true | undefined; - } - // Alias for compatibility - interface ProcessEnv extends Dict {} - interface HRTime { - /** - * This is the legacy version of {@link process.hrtime.bigint()} - * before bigint was introduced in JavaScript. - * - * The `process.hrtime()` method returns the current high-resolution real time in a `[seconds, nanoseconds]` tuple `Array`, - * where `nanoseconds` is the remaining part of the real time that can't be represented in second precision. - * - * `time` is an optional parameter that must be the result of a previous `process.hrtime()` call to diff with the current time. - * If the parameter passed in is not a tuple `Array`, a TypeError will be thrown. - * Passing in a user-defined array instead of the result of a previous call to `process.hrtime()` will lead to undefined behavior. - * - * These times are relative to an arbitrary time in the past, - * and not related to the time of day and therefore not subject to clock drift. - * The primary use is for measuring performance between intervals: - * ```js - * const { hrtime } = require('node:process'); - * const NS_PER_SEC = 1e9; - * const time = hrtime(); - * // [ 1800216, 25 ] - * - * setTimeout(() => { - * const diff = hrtime(time); - * // [ 1, 552 ] - * - * console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`); - * // Benchmark took 1000000552 nanoseconds - * }, 1000); - * ``` - * @since 0.7.6 - * @legacy Use {@link process.hrtime.bigint()} instead. - * @param time The result of a previous call to `process.hrtime()` - */ - (time?: [number, number]): [number, number]; - /** - * The `bigint` version of the {@link process.hrtime()} method returning the current high-resolution real time in nanoseconds as a `bigint`. - * - * Unlike {@link process.hrtime()}, it does not support an additional time argument since the difference can just be computed directly by subtraction of the two `bigint`s. - * ```js - * import { hrtime } from 'node:process'; - * - * const start = hrtime.bigint(); - * // 191051479007711n - * - * setTimeout(() => { - * const end = hrtime.bigint(); - * // 191052633396993n - * - * console.log(`Benchmark took ${end - start} nanoseconds`); - * // Benchmark took 1154389282 nanoseconds - * }, 1000); - * ``` - * @since v10.7.0 - */ - bigint(): bigint; - } - interface ProcessPermission { - /** - * Verifies that the process is able to access the given scope and reference. - * If no reference is provided, a global scope is assumed, for instance, `process.permission.has('fs.read')` - * will check if the process has ALL file system read permissions. - * - * The reference has a meaning based on the provided scope. For example, the reference when the scope is File System means files and folders. - * - * The available scopes are: - * - * * `fs` - All File System - * * `fs.read` - File System read operations - * * `fs.write` - File System write operations - * * `child` - Child process spawning operations - * * `worker` - Worker thread spawning operation - * - * ```js - * // Check if the process has permission to read the README file - * process.permission.has('fs.read', './README.md'); - * // Check if the process has read permission operations - * process.permission.has('fs.read'); - * ``` - * @since v20.0.0 - */ - has(scope: string, reference?: string): boolean; - } - interface ProcessReport { - /** - * Write reports in a compact format, single-line JSON, more easily consumable by log processing systems - * than the default multi-line format designed for human consumption. - * @since v13.12.0, v12.17.0 - */ - compact: boolean; - /** - * Directory where the report is written. - * The default value is the empty string, indicating that reports are written to the current - * working directory of the Node.js process. - */ - directory: string; - /** - * Filename where the report is written. If set to the empty string, the output filename will be comprised - * of a timestamp, PID, and sequence number. The default value is the empty string. - */ - filename: string; - /** - * Returns a JavaScript Object representation of a diagnostic report for the running process. - * The report's JavaScript stack trace is taken from `err`, if present. - */ - getReport(err?: Error): object; - /** - * If true, a diagnostic report is generated on fatal errors, - * such as out of memory errors or failed C++ assertions. - * @default false - */ - reportOnFatalError: boolean; - /** - * If true, a diagnostic report is generated when the process - * receives the signal specified by process.report.signal. - * @default false - */ - reportOnSignal: boolean; - /** - * If true, a diagnostic report is generated on uncaught exception. - * @default false - */ - reportOnUncaughtException: boolean; - /** - * If true, a diagnostic report is generated without the environment variables. - * @default false - */ - excludeEnv: boolean; - /** - * The signal used to trigger the creation of a diagnostic report. - * @default 'SIGUSR2' - */ - signal: Signals; - /** - * Writes a diagnostic report to a file. If filename is not provided, the default filename - * includes the date, time, PID, and a sequence number. - * The report's JavaScript stack trace is taken from `err`, if present. - * - * If the value of filename is set to `'stdout'` or `'stderr'`, the report is written - * to the stdout or stderr of the process respectively. - * @param fileName Name of the file where the report is written. - * This should be a relative path, that will be appended to the directory specified in - * `process.report.directory`, or the current working directory of the Node.js process, - * if unspecified. - * @param err A custom error used for reporting the JavaScript stack. - * @return Filename of the generated report. - */ - writeReport(fileName?: string, err?: Error): string; - writeReport(err?: Error): string; - } - interface ResourceUsage { - fsRead: number; - fsWrite: number; - involuntaryContextSwitches: number; - ipcReceived: number; - ipcSent: number; - majorPageFault: number; - maxRSS: number; - minorPageFault: number; - sharedMemorySize: number; - signalsCount: number; - swappedOut: number; - systemCPUTime: number; - unsharedDataSize: number; - unsharedStackSize: number; - userCPUTime: number; - voluntaryContextSwitches: number; - } - interface EmitWarningOptions { - /** - * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. - * - * @default 'Warning' - */ - type?: string | undefined; - /** - * A unique identifier for the warning instance being emitted. - */ - code?: string | undefined; - /** - * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. - * - * @default process.emitWarning - */ - ctor?: Function | undefined; - /** - * Additional text to include with the error. - */ - detail?: string | undefined; - } - interface ProcessConfig { - readonly target_defaults: { - readonly cflags: any[]; - readonly default_configuration: string; - readonly defines: string[]; - readonly include_dirs: string[]; - readonly libraries: string[]; - }; - readonly variables: { - readonly clang: number; - readonly host_arch: string; - readonly node_install_npm: boolean; - readonly node_install_waf: boolean; - readonly node_prefix: string; - readonly node_shared_openssl: boolean; - readonly node_shared_v8: boolean; - readonly node_shared_zlib: boolean; - readonly node_use_dtrace: boolean; - readonly node_use_etw: boolean; - readonly node_use_openssl: boolean; - readonly target_arch: string; - readonly v8_no_strict_aliasing: number; - readonly v8_use_snapshot: boolean; - readonly visibility: string; - }; - } - interface Process extends EventEmitter { - /** - * The `process.stdout` property returns a stream connected to`stdout` (fd `1`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `1` refers to a file, in which case it is - * a `Writable` stream. - * - * For example, to copy `process.stdin` to `process.stdout`: - * - * ```js - * import { stdin, stdout } from 'node:process'; - * - * stdin.pipe(stdout); - * ``` - * - * `process.stdout` differs from other Node.js streams in important ways. See `note on process I/O` for more information. - */ - stdout: WriteStream & { - fd: 1; - }; - /** - * The `process.stderr` property returns a stream connected to`stderr` (fd `2`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `2` refers to a file, in which case it is - * a `Writable` stream. - * - * `process.stderr` differs from other Node.js streams in important ways. See `note on process I/O` for more information. - */ - stderr: WriteStream & { - fd: 2; - }; - /** - * The `process.stdin` property returns a stream connected to`stdin` (fd `0`). It is a `net.Socket` (which is a `Duplex` stream) unless fd `0` refers to a file, in which case it is - * a `Readable` stream. - * - * For details of how to read from `stdin` see `readable.read()`. - * - * As a `Duplex` stream, `process.stdin` can also be used in "old" mode that - * is compatible with scripts written for Node.js prior to v0.10\. - * For more information see `Stream compatibility`. - * - * In "old" streams mode the `stdin` stream is paused by default, so one - * must call `process.stdin.resume()` to read from it. Note also that calling `process.stdin.resume()` itself would switch stream to "old" mode. - */ - stdin: ReadStream & { - fd: 0; - }; - /** - * The `process.argv` property returns an array containing the command-line - * arguments passed when the Node.js process was launched. The first element will - * be {@link execPath}. See `process.argv0` if access to the original value - * of `argv[0]` is needed. The second element will be the path to the JavaScript - * file being executed. If a [program entry point](https://nodejs.org/docs/latest-v25.x/api/cli.html#program-entry-point) was provided, the second element - * will be the absolute path to it. The remaining elements are additional command-line - * arguments. - * - * For example, assuming the following script for `process-args.js`: - * - * ```js - * import { argv } from 'node:process'; - * - * // print process.argv - * argv.forEach((val, index) => { - * console.log(`${index}: ${val}`); - * }); - * ``` - * - * Launching the Node.js process as: - * - * ```bash - * node process-args.js one two=three four - * ``` - * - * Would generate the output: - * - * ```text - * 0: /usr/local/bin/node - * 1: /Users/mjr/work/node/process-args.js - * 2: one - * 3: two=three - * 4: four - * ``` - * @since v0.1.27 - */ - argv: string[]; - /** - * The `process.argv0` property stores a read-only copy of the original value of`argv[0]` passed when Node.js starts. - * - * ```console - * $ bash -c 'exec -a customArgv0 ./node' - * > process.argv[0] - * '/Volumes/code/external/node/out/Release/node' - * > process.argv0 - * 'customArgv0' - * ``` - * @since v6.4.0 - */ - argv0: string; - /** - * The `process.execArgv` property returns the set of Node.js-specific command-line - * options passed when the Node.js process was launched. These options do not - * appear in the array returned by the {@link argv} property, and do not - * include the Node.js executable, the name of the script, or any options following - * the script name. These options are useful in order to spawn child processes with - * the same execution environment as the parent. - * - * ```bash - * node --icu-data-dir=./foo --require ./bar.js script.js --version - * ``` - * - * Results in `process.execArgv`: - * - * ```js - * ["--icu-data-dir=./foo", "--require", "./bar.js"] - * ``` - * - * And `process.argv`: - * - * ```js - * ['/usr/local/bin/node', 'script.js', '--version'] - * ``` - * - * Refer to `Worker constructor` for the detailed behavior of worker - * threads with this property. - * @since v0.7.7 - */ - execArgv: string[]; - /** - * The `process.execPath` property returns the absolute pathname of the executable - * that started the Node.js process. Symbolic links, if any, are resolved. - * - * ```js - * '/usr/local/bin/node' - * ``` - * @since v0.1.100 - */ - execPath: string; - /** - * The `process.abort()` method causes the Node.js process to exit immediately and - * generate a core file. - * - * This feature is not available in `Worker` threads. - * @since v0.7.0 - */ - abort(): never; - /** - * The `process.chdir()` method changes the current working directory of the - * Node.js process or throws an exception if doing so fails (for instance, if - * the specified `directory` does not exist). - * - * ```js - * import { chdir, cwd } from 'node:process'; - * - * console.log(`Starting directory: ${cwd()}`); - * try { - * chdir('/tmp'); - * console.log(`New directory: ${cwd()}`); - * } catch (err) { - * console.error(`chdir: ${err}`); - * } - * ``` - * - * This feature is not available in `Worker` threads. - * @since v0.1.17 - */ - chdir(directory: string): void; - /** - * The `process.cwd()` method returns the current working directory of the Node.js - * process. - * - * ```js - * import { cwd } from 'node:process'; - * - * console.log(`Current directory: ${cwd()}`); - * ``` - * @since v0.1.8 - */ - cwd(): string; - /** - * The port used by the Node.js debugger when enabled. - * - * ```js - * import process from 'node:process'; - * - * process.debugPort = 5858; - * ``` - * @since v0.7.2 - */ - debugPort: number; - /** - * The `process.dlopen()` method allows dynamically loading shared objects. It is primarily used by `require()` to load C++ Addons, and - * should not be used directly, except in special cases. In other words, `require()` should be preferred over `process.dlopen()` - * unless there are specific reasons such as custom dlopen flags or loading from ES modules. - * - * The `flags` argument is an integer that allows to specify dlopen behavior. See the `[os.constants.dlopen](https://nodejs.org/docs/latest-v25.x/api/os.html#dlopen-constants)` - * documentation for details. - * - * An important requirement when calling `process.dlopen()` is that the `module` instance must be passed. Functions exported by the C++ Addon - * are then accessible via `module.exports`. - * - * The example below shows how to load a C++ Addon, named `local.node`, that exports a `foo` function. All the symbols are loaded before the call returns, by passing the `RTLD_NOW` constant. - * In this example the constant is assumed to be available. - * - * ```js - * import { dlopen } from 'node:process'; - * import { constants } from 'node:os'; - * import { fileURLToPath } from 'node:url'; - * - * const module = { exports: {} }; - * dlopen(module, fileURLToPath(new URL('local.node', import.meta.url)), - * constants.dlopen.RTLD_NOW); - * module.exports.foo(); - * ``` - */ - dlopen(module: object, filename: string, flags?: number): void; - /** - * The `process.emitWarning()` method can be used to emit custom or application - * specific process warnings. These can be listened for by adding a handler to the `'warning'` event. - * - * ```js - * import { emitWarning } from 'node:process'; - * - * // Emit a warning using a string. - * emitWarning('Something happened!'); - * // Emits: (node: 56338) Warning: Something happened! - * ``` - * - * ```js - * import { emitWarning } from 'node:process'; - * - * // Emit a warning using a string and a type. - * emitWarning('Something Happened!', 'CustomWarning'); - * // Emits: (node:56338) CustomWarning: Something Happened! - * ``` - * - * ```js - * import { emitWarning } from 'node:process'; - * - * emitWarning('Something happened!', 'CustomWarning', 'WARN001'); - * // Emits: (node:56338) [WARN001] CustomWarning: Something happened! - * ```js - * - * In each of the previous examples, an `Error` object is generated internally by `process.emitWarning()` and passed through to the `'warning'` handler. - * - * ```js - * import process from 'node:process'; - * - * process.on('warning', (warning) => { - * console.warn(warning.name); // 'Warning' - * console.warn(warning.message); // 'Something happened!' - * console.warn(warning.code); // 'MY_WARNING' - * console.warn(warning.stack); // Stack trace - * console.warn(warning.detail); // 'This is some additional information' - * }); - * ``` - * - * If `warning` is passed as an `Error` object, it will be passed through to the `'warning'` event handler - * unmodified (and the optional `type`, `code` and `ctor` arguments will be ignored): - * - * ```js - * import { emitWarning } from 'node:process'; - * - * // Emit a warning using an Error object. - * const myWarning = new Error('Something happened!'); - * // Use the Error name property to specify the type name - * myWarning.name = 'CustomWarning'; - * myWarning.code = 'WARN001'; - * - * emitWarning(myWarning); - * // Emits: (node:56338) [WARN001] CustomWarning: Something happened! - * ``` - * - * A `TypeError` is thrown if `warning` is anything other than a string or `Error` object. - * - * While process warnings use `Error` objects, the process warning mechanism is not a replacement for normal error handling mechanisms. - * - * The following additional handling is implemented if the warning `type` is `'DeprecationWarning'`: - * * If the `--throw-deprecation` command-line flag is used, the deprecation warning is thrown as an exception rather than being emitted as an event. - * * If the `--no-deprecation` command-line flag is used, the deprecation warning is suppressed. - * * If the `--trace-deprecation` command-line flag is used, the deprecation warning is printed to `stderr` along with the full stack trace. - * @since v8.0.0 - * @param warning The warning to emit. - */ - emitWarning(warning: string | Error, ctor?: Function): void; - emitWarning(warning: string | Error, type?: string, ctor?: Function): void; - emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; - emitWarning(warning: string | Error, options?: EmitWarningOptions): void; - /** - * The `process.env` property returns an object containing the user environment. - * See [`environ(7)`](http://man7.org/linux/man-pages/man7/environ.7.html). - * - * An example of this object looks like: - * - * ```js - * { - * TERM: 'xterm-256color', - * SHELL: '/usr/local/bin/bash', - * USER: 'maciej', - * PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin', - * PWD: '/Users/maciej', - * EDITOR: 'vim', - * SHLVL: '1', - * HOME: '/Users/maciej', - * LOGNAME: 'maciej', - * _: '/usr/local/bin/node' - * } - * ``` - * - * It is possible to modify this object, but such modifications will not be - * reflected outside the Node.js process, or (unless explicitly requested) - * to other `Worker` threads. - * In other words, the following example would not work: - * - * ```bash - * node -e 'process.env.foo = "bar"' && echo $foo - * ``` - * - * While the following will: - * - * ```js - * import { env } from 'node:process'; - * - * env.foo = 'bar'; - * console.log(env.foo); - * ``` - * - * Assigning a property on `process.env` will implicitly convert the value - * to a string. **This behavior is deprecated.** Future versions of Node.js may - * throw an error when the value is not a string, number, or boolean. - * - * ```js - * import { env } from 'node:process'; - * - * env.test = null; - * console.log(env.test); - * // => 'null' - * env.test = undefined; - * console.log(env.test); - * // => 'undefined' - * ``` - * - * Use `delete` to delete a property from `process.env`. - * - * ```js - * import { env } from 'node:process'; - * - * env.TEST = 1; - * delete env.TEST; - * console.log(env.TEST); - * // => undefined - * ``` - * - * On Windows operating systems, environment variables are case-insensitive. - * - * ```js - * import { env } from 'node:process'; - * - * env.TEST = 1; - * console.log(env.test); - * // => 1 - * ``` - * - * Unless explicitly specified when creating a `Worker` instance, - * each `Worker` thread has its own copy of `process.env`, based on its - * parent thread's `process.env`, or whatever was specified as the `env` option - * to the `Worker` constructor. Changes to `process.env` will not be visible - * across `Worker` threads, and only the main thread can make changes that - * are visible to the operating system or to native add-ons. On Windows, a copy of `process.env` on a `Worker` instance operates in a case-sensitive manner - * unlike the main thread. - * @since v0.1.27 - */ - env: ProcessEnv; - /** - * The `process.exit()` method instructs Node.js to terminate the process - * synchronously with an exit status of `code`. If `code` is omitted, exit uses - * either the 'success' code `0` or the value of `process.exitCode` if it has been - * set. Node.js will not terminate until all the `'exit'` event listeners are - * called. - * - * To exit with a 'failure' code: - * - * ```js - * import { exit } from 'node:process'; - * - * exit(1); - * ``` - * - * The shell that executed Node.js should see the exit code as `1`. - * - * Calling `process.exit()` will force the process to exit as quickly as possible - * even if there are still asynchronous operations pending that have not yet - * completed fully, including I/O operations to `process.stdout` and `process.stderr`. - * - * In most situations, it is not actually necessary to call `process.exit()` explicitly. The Node.js process will exit on its own _if there is no additional_ - * _work pending_ in the event loop. The `process.exitCode` property can be set to - * tell the process which exit code to use when the process exits gracefully. - * - * For instance, the following example illustrates a _misuse_ of the `process.exit()` method that could lead to data printed to stdout being - * truncated and lost: - * - * ```js - * import { exit } from 'node:process'; - * - * // This is an example of what *not* to do: - * if (someConditionNotMet()) { - * printUsageToStdout(); - * exit(1); - * } - * ``` - * - * The reason this is problematic is because writes to `process.stdout` in Node.js - * are sometimes _asynchronous_ and may occur over multiple ticks of the Node.js - * event loop. Calling `process.exit()`, however, forces the process to exit _before_ those additional writes to `stdout` can be performed. - * - * Rather than calling `process.exit()` directly, the code _should_ set the `process.exitCode` and allow the process to exit naturally by avoiding - * scheduling any additional work for the event loop: - * - * ```js - * import process from 'node:process'; - * - * // How to properly set the exit code while letting - * // the process exit gracefully. - * if (someConditionNotMet()) { - * printUsageToStdout(); - * process.exitCode = 1; - * } - * ``` - * - * If it is necessary to terminate the Node.js process due to an error condition, - * throwing an _uncaught_ error and allowing the process to terminate accordingly - * is safer than calling `process.exit()`. - * - * In `Worker` threads, this function stops the current thread rather - * than the current process. - * @since v0.1.13 - * @param [code=0] The exit code. For string type, only integer strings (e.g.,'1') are allowed. - */ - exit(code?: number | string | null): never; - /** - * A number which will be the process exit code, when the process either - * exits gracefully, or is exited via {@link exit} without specifying - * a code. - * - * Specifying a code to {@link exit} will override any - * previous setting of `process.exitCode`. - * @default undefined - * @since v0.11.8 - */ - exitCode: number | string | null | undefined; - finalization: { - /** - * This function registers a callback to be called when the process emits the `exit` event if the `ref` object was not garbage collected. - * If the object `ref` was garbage collected before the `exit` event is emitted, the callback will be removed from the finalization registry, and it will not be called on process exit. - * - * Inside the callback you can release the resources allocated by the `ref` object. - * Be aware that all limitations applied to the `beforeExit` event are also applied to the callback function, - * this means that there is a possibility that the callback will not be called under special circumstances. - * - * The idea of ​​this function is to help you free up resources when the starts process exiting, but also let the object be garbage collected if it is no longer being used. - * @param ref The reference to the resource that is being tracked. - * @param callback The callback function to be called when the resource is finalized. - * @since v22.5.0 - * @experimental - */ - register(ref: T, callback: (ref: T, event: "exit") => void): void; - /** - * This function behaves exactly like the `register`, except that the callback will be called when the process emits the `beforeExit` event if `ref` object was not garbage collected. - * - * Be aware that all limitations applied to the `beforeExit` event are also applied to the callback function, this means that there is a possibility that the callback will not be called under special circumstances. - * @param ref The reference to the resource that is being tracked. - * @param callback The callback function to be called when the resource is finalized. - * @since v22.5.0 - * @experimental - */ - registerBeforeExit(ref: T, callback: (ref: T, event: "beforeExit") => void): void; - /** - * This function remove the register of the object from the finalization registry, so the callback will not be called anymore. - * @param ref The reference to the resource that was registered previously. - * @since v22.5.0 - * @experimental - */ - unregister(ref: object): void; - }; - /** - * The `process.getActiveResourcesInfo()` method returns an array of strings containing - * the types of the active resources that are currently keeping the event loop alive. - * - * ```js - * import { getActiveResourcesInfo } from 'node:process'; - * import { setTimeout } from 'node:timers'; - - * console.log('Before:', getActiveResourcesInfo()); - * setTimeout(() => {}, 1000); - * console.log('After:', getActiveResourcesInfo()); - * // Prints: - * // Before: [ 'TTYWrap', 'TTYWrap', 'TTYWrap' ] - * // After: [ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ] - * ``` - * @since v17.3.0, v16.14.0 - */ - getActiveResourcesInfo(): string[]; - /** - * Provides a way to load built-in modules in a globally available function. - * @param id ID of the built-in module being requested. - */ - getBuiltinModule(id: ID): BuiltInModule[ID]; - getBuiltinModule(id: string): object | undefined; - /** - * The `process.getgid()` method returns the numerical group identity of the - * process. (See [`getgid(2)`](http://man7.org/linux/man-pages/man2/getgid.2.html).) - * - * ```js - * import process from 'node:process'; - * - * if (process.getgid) { - * console.log(`Current gid: ${process.getgid()}`); - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * @since v0.1.31 - */ - getgid?: () => number; - /** - * The `process.setgid()` method sets the group identity of the process. (See [`setgid(2)`](http://man7.org/linux/man-pages/man2/setgid.2.html).) The `id` can be passed as either a - * numeric ID or a group name - * string. If a group name is specified, this method blocks while resolving the - * associated numeric ID. - * - * ```js - * import process from 'node:process'; - * - * if (process.getgid && process.setgid) { - * console.log(`Current gid: ${process.getgid()}`); - * try { - * process.setgid(501); - * console.log(`New gid: ${process.getgid()}`); - * } catch (err) { - * console.log(`Failed to set gid: ${err}`); - * } - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * This feature is not available in `Worker` threads. - * @since v0.1.31 - * @param id The group name or ID - */ - setgid?: (id: number | string) => void; - /** - * The `process.getuid()` method returns the numeric user identity of the process. - * (See [`getuid(2)`](http://man7.org/linux/man-pages/man2/getuid.2.html).) - * - * ```js - * import process from 'node:process'; - * - * if (process.getuid) { - * console.log(`Current uid: ${process.getuid()}`); - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * @since v0.1.28 - */ - getuid?: () => number; - /** - * The `process.setuid(id)` method sets the user identity of the process. (See [`setuid(2)`](http://man7.org/linux/man-pages/man2/setuid.2.html).) The `id` can be passed as either a - * numeric ID or a username string. - * If a username is specified, the method blocks while resolving the associated - * numeric ID. - * - * ```js - * import process from 'node:process'; - * - * if (process.getuid && process.setuid) { - * console.log(`Current uid: ${process.getuid()}`); - * try { - * process.setuid(501); - * console.log(`New uid: ${process.getuid()}`); - * } catch (err) { - * console.log(`Failed to set uid: ${err}`); - * } - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * This feature is not available in `Worker` threads. - * @since v0.1.28 - */ - setuid?: (id: number | string) => void; - /** - * The `process.geteuid()` method returns the numerical effective user identity of - * the process. (See [`geteuid(2)`](http://man7.org/linux/man-pages/man2/geteuid.2.html).) - * - * ```js - * import process from 'node:process'; - * - * if (process.geteuid) { - * console.log(`Current uid: ${process.geteuid()}`); - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * @since v2.0.0 - */ - geteuid?: () => number; - /** - * The `process.seteuid()` method sets the effective user identity of the process. - * (See [`seteuid(2)`](http://man7.org/linux/man-pages/man2/seteuid.2.html).) The `id` can be passed as either a numeric ID or a username - * string. If a username is specified, the method blocks while resolving the - * associated numeric ID. - * - * ```js - * import process from 'node:process'; - * - * if (process.geteuid && process.seteuid) { - * console.log(`Current uid: ${process.geteuid()}`); - * try { - * process.seteuid(501); - * console.log(`New uid: ${process.geteuid()}`); - * } catch (err) { - * console.log(`Failed to set uid: ${err}`); - * } - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * This feature is not available in `Worker` threads. - * @since v2.0.0 - * @param id A user name or ID - */ - seteuid?: (id: number | string) => void; - /** - * The `process.getegid()` method returns the numerical effective group identity - * of the Node.js process. (See [`getegid(2)`](http://man7.org/linux/man-pages/man2/getegid.2.html).) - * - * ```js - * import process from 'node:process'; - * - * if (process.getegid) { - * console.log(`Current gid: ${process.getegid()}`); - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * @since v2.0.0 - */ - getegid?: () => number; - /** - * The `process.setegid()` method sets the effective group identity of the process. - * (See [`setegid(2)`](http://man7.org/linux/man-pages/man2/setegid.2.html).) The `id` can be passed as either a numeric ID or a group - * name string. If a group name is specified, this method blocks while resolving - * the associated a numeric ID. - * - * ```js - * import process from 'node:process'; - * - * if (process.getegid && process.setegid) { - * console.log(`Current gid: ${process.getegid()}`); - * try { - * process.setegid(501); - * console.log(`New gid: ${process.getegid()}`); - * } catch (err) { - * console.log(`Failed to set gid: ${err}`); - * } - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * This feature is not available in `Worker` threads. - * @since v2.0.0 - * @param id A group name or ID - */ - setegid?: (id: number | string) => void; - /** - * The `process.getgroups()` method returns an array with the supplementary group - * IDs. POSIX leaves it unspecified if the effective group ID is included but - * Node.js ensures it always is. - * - * ```js - * import process from 'node:process'; - * - * if (process.getgroups) { - * console.log(process.getgroups()); // [ 16, 21, 297 ] - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * @since v0.9.4 - */ - getgroups?: () => number[]; - /** - * The `process.setgroups()` method sets the supplementary group IDs for the - * Node.js process. This is a privileged operation that requires the Node.js - * process to have `root` or the `CAP_SETGID` capability. - * - * The `groups` array can contain numeric group IDs, group names, or both. - * - * ```js - * import process from 'node:process'; - * - * if (process.getgroups && process.setgroups) { - * try { - * process.setgroups([501]); - * console.log(process.getgroups()); // new groups - * } catch (err) { - * console.log(`Failed to set groups: ${err}`); - * } - * } - * ``` - * - * This function is only available on POSIX platforms (i.e. not Windows or - * Android). - * This feature is not available in `Worker` threads. - * @since v0.9.4 - */ - setgroups?: (groups: ReadonlyArray) => void; - /** - * The `process.setUncaughtExceptionCaptureCallback()` function sets a function - * that will be invoked when an uncaught exception occurs, which will receive the - * exception value itself as its first argument. - * - * If such a function is set, the `'uncaughtException'` event will - * not be emitted. If `--abort-on-uncaught-exception` was passed from the - * command line or set through `v8.setFlagsFromString()`, the process will - * not abort. Actions configured to take place on exceptions such as report - * generations will be affected too - * - * To unset the capture function, `process.setUncaughtExceptionCaptureCallback(null)` may be used. Calling this - * method with a non-`null` argument while another capture function is set will - * throw an error. - * - * Using this function is mutually exclusive with using the deprecated `domain` built-in module. - * @since v9.3.0 - */ - setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; - /** - * Indicates whether a callback has been set using {@link setUncaughtExceptionCaptureCallback}. - * @since v9.3.0 - */ - hasUncaughtExceptionCaptureCallback(): boolean; - /** - * The `process.sourceMapsEnabled` property returns whether the [Source Map v3](https://sourcemaps.info/spec.html) support for stack traces is enabled. - * @since v20.7.0 - * @experimental - */ - readonly sourceMapsEnabled: boolean; - /** - * This function enables or disables the [Source Map v3](https://sourcemaps.info/spec.html) support for - * stack traces. - * - * It provides same features as launching Node.js process with commandline options `--enable-source-maps`. - * - * Only source maps in JavaScript files that are loaded after source maps has been - * enabled will be parsed and loaded. - * @since v16.6.0, v14.18.0 - * @experimental - */ - setSourceMapsEnabled(value: boolean): void; - /** - * The `process.version` property contains the Node.js version string. - * - * ```js - * import { version } from 'node:process'; - * - * console.log(`Version: ${version}`); - * // Version: v14.8.0 - * ``` - * - * To get the version string without the prepended _v_, use`process.versions.node`. - * @since v0.1.3 - */ - readonly version: string; - /** - * The `process.versions` property returns an object listing the version strings of - * Node.js and its dependencies. `process.versions.modules` indicates the current - * ABI version, which is increased whenever a C++ API changes. Node.js will refuse - * to load modules that were compiled against a different module ABI version. - * - * ```js - * import { versions } from 'node:process'; - * - * console.log(versions); - * ``` - * - * Will generate an object similar to: - * - * ```console - * { node: '20.2.0', - * acorn: '8.8.2', - * ada: '2.4.0', - * ares: '1.19.0', - * base64: '0.5.0', - * brotli: '1.0.9', - * cjs_module_lexer: '1.2.2', - * cldr: '43.0', - * icu: '73.1', - * llhttp: '8.1.0', - * modules: '115', - * napi: '8', - * nghttp2: '1.52.0', - * nghttp3: '0.7.0', - * ngtcp2: '0.8.1', - * openssl: '3.0.8+quic', - * simdutf: '3.2.9', - * tz: '2023c', - * undici: '5.22.0', - * unicode: '15.0', - * uv: '1.44.2', - * uvwasi: '0.0.16', - * v8: '11.3.244.8-node.9', - * zlib: '1.2.13' } - * ``` - * @since v0.2.0 - */ - readonly versions: ProcessVersions; - /** - * The `process.config` property returns a frozen `Object` containing the - * JavaScript representation of the configure options used to compile the current - * Node.js executable. This is the same as the `config.gypi` file that was produced - * when running the `./configure` script. - * - * An example of the possible output looks like: - * - * ```js - * { - * target_defaults: - * { cflags: [], - * default_configuration: 'Release', - * defines: [], - * include_dirs: [], - * libraries: [] }, - * variables: - * { - * host_arch: 'x64', - * napi_build_version: 5, - * node_install_npm: 'true', - * node_prefix: '', - * node_shared_cares: 'false', - * node_shared_http_parser: 'false', - * node_shared_libuv: 'false', - * node_shared_zlib: 'false', - * node_use_openssl: 'true', - * node_shared_openssl: 'false', - * strict_aliasing: 'true', - * target_arch: 'x64', - * v8_use_snapshot: 1 - * } - * } - * ``` - * @since v0.7.7 - */ - readonly config: ProcessConfig; - /** - * The `process.kill()` method sends the `signal` to the process identified by`pid`. - * - * Signal names are strings such as `'SIGINT'` or `'SIGHUP'`. See `Signal Events` and [`kill(2)`](http://man7.org/linux/man-pages/man2/kill.2.html) for more information. - * - * This method will throw an error if the target `pid` does not exist. As a special - * case, a signal of `0` can be used to test for the existence of a process. - * Windows platforms will throw an error if the `pid` is used to kill a process - * group. - * - * Even though the name of this function is `process.kill()`, it is really just a - * signal sender, like the `kill` system call. The signal sent may do something - * other than kill the target process. - * - * ```js - * import process, { kill } from 'node:process'; - * - * process.on('SIGHUP', () => { - * console.log('Got SIGHUP signal.'); - * }); - * - * setTimeout(() => { - * console.log('Exiting.'); - * process.exit(0); - * }, 100); - * - * kill(process.pid, 'SIGHUP'); - * ``` - * - * When `SIGUSR1` is received by a Node.js process, Node.js will start the - * debugger. See `Signal Events`. - * @since v0.0.6 - * @param pid A process ID - * @param [signal='SIGTERM'] The signal to send, either as a string or number. - */ - kill(pid: number, signal?: string | number): true; - /** - * Loads the environment configuration from a `.env` file into `process.env`. If - * the file is not found, error will be thrown. - * - * To load a specific .env file by specifying its path, use the following code: - * - * ```js - * import { loadEnvFile } from 'node:process'; - * - * loadEnvFile('./development.env') - * ``` - * @since v20.12.0 - * @param path The path to the .env file - */ - loadEnvFile(path?: PathLike): void; - /** - * The `process.pid` property returns the PID of the process. - * - * ```js - * import { pid } from 'node:process'; - * - * console.log(`This process is pid ${pid}`); - * ``` - * @since v0.1.15 - */ - readonly pid: number; - /** - * The `process.ppid` property returns the PID of the parent of the - * current process. - * - * ```js - * import { ppid } from 'node:process'; - * - * console.log(`The parent process is pid ${ppid}`); - * ``` - * @since v9.2.0, v8.10.0, v6.13.0 - */ - readonly ppid: number; - /** - * The `process.threadCpuUsage()` method returns the user and system CPU time usage of - * the current worker thread, in an object with properties `user` and `system`, whose - * values are microsecond values (millionth of a second). - * - * The result of a previous call to `process.threadCpuUsage()` can be passed as the - * argument to the function, to get a diff reading. - * @since v23.9.0 - * @param previousValue A previous return value from calling - * `process.threadCpuUsage()` - */ - threadCpuUsage(previousValue?: CpuUsage): CpuUsage; - /** - * The `process.title` property returns the current process title (i.e. returns - * the current value of `ps`). Assigning a new value to `process.title` modifies - * the current value of `ps`. - * - * When a new value is assigned, different platforms will impose different maximum - * length restrictions on the title. Usually such restrictions are quite limited. - * For instance, on Linux and macOS, `process.title` is limited to the size of the - * binary name plus the length of the command-line arguments because setting the `process.title` overwrites the `argv` memory of the process. Node.js v0.8 - * allowed for longer process title strings by also overwriting the `environ` memory but that was potentially insecure and confusing in some (rather obscure) - * cases. - * - * Assigning a value to `process.title` might not result in an accurate label - * within process manager applications such as macOS Activity Monitor or Windows - * Services Manager. - * @since v0.1.104 - */ - title: string; - /** - * The operating system CPU architecture for which the Node.js binary was compiled. - * Possible values are: `'arm'`, `'arm64'`, `'ia32'`, `'loong64'`, `'mips'`, - * `'mipsel'`, `'ppc64'`, `'riscv64'`, `'s390x'`, and `'x64'`. - * - * ```js - * import { arch } from 'node:process'; - * - * console.log(`This processor architecture is ${arch}`); - * ``` - * @since v0.5.0 - */ - readonly arch: Architecture; - /** - * The `process.platform` property returns a string identifying the operating - * system platform for which the Node.js binary was compiled. - * - * Currently possible values are: - * - * * `'aix'` - * * `'darwin'` - * * `'freebsd'` - * * `'linux'` - * * `'openbsd'` - * * `'sunos'` - * * `'win32'` - * - * ```js - * import { platform } from 'node:process'; - * - * console.log(`This platform is ${platform}`); - * ``` - * - * The value `'android'` may also be returned if the Node.js is built on the - * Android operating system. However, Android support in Node.js [is experimental](https://github.com/nodejs/node/blob/HEAD/BUILDING.md#androidandroid-based-devices-eg-firefox-os). - * @since v0.1.16 - */ - readonly platform: Platform; - /** - * The `process.mainModule` property provides an alternative way of retrieving `require.main`. The difference is that if the main module changes at - * runtime, `require.main` may still refer to the original main module in - * modules that were required before the change occurred. Generally, it's - * safe to assume that the two refer to the same module. - * - * As with `require.main`, `process.mainModule` will be `undefined` if there - * is no entry script. - * @since v0.1.17 - * @deprecated Since v14.0.0 - Use `main` instead. - */ - mainModule?: Module; - memoryUsage: MemoryUsageFn; - /** - * Gets the amount of memory available to the process (in bytes) based on - * limits imposed by the OS. If there is no such constraint, or the constraint - * is unknown, `0` is returned. - * - * See [`uv_get_constrained_memory`](https://docs.libuv.org/en/v1.x/misc.html#c.uv_get_constrained_memory) for more - * information. - * @since v19.6.0, v18.15.0 - */ - constrainedMemory(): number; - /** - * Gets the amount of free memory that is still available to the process (in bytes). - * See [`uv_get_available_memory`](https://nodejs.org/docs/latest-v25.x/api/process.html#processavailablememory) for more information. - * @since v20.13.0 - */ - availableMemory(): number; - /** - * The `process.cpuUsage()` method returns the user and system CPU time usage of - * the current process, in an object with properties `user` and `system`, whose - * values are microsecond values (millionth of a second). These values measure time - * spent in user and system code respectively, and may end up being greater than - * actual elapsed time if multiple CPU cores are performing work for this process. - * - * The result of a previous call to `process.cpuUsage()` can be passed as the - * argument to the function, to get a diff reading. - * - * ```js - * import { cpuUsage } from 'node:process'; - * - * const startUsage = cpuUsage(); - * // { user: 38579, system: 6986 } - * - * // spin the CPU for 500 milliseconds - * const now = Date.now(); - * while (Date.now() - now < 500); - * - * console.log(cpuUsage(startUsage)); - * // { user: 514883, system: 11226 } - * ``` - * @since v6.1.0 - * @param previousValue A previous return value from calling `process.cpuUsage()` - */ - cpuUsage(previousValue?: CpuUsage): CpuUsage; - /** - * `process.nextTick()` adds `callback` to the "next tick queue". This queue is - * fully drained after the current operation on the JavaScript stack runs to - * completion and before the event loop is allowed to continue. It's possible to - * create an infinite loop if one were to recursively call `process.nextTick()`. - * See the [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick) guide for more background. - * - * ```js - * import { nextTick } from 'node:process'; - * - * console.log('start'); - * nextTick(() => { - * console.log('nextTick callback'); - * }); - * console.log('scheduled'); - * // Output: - * // start - * // scheduled - * // nextTick callback - * ``` - * - * This is important when developing APIs in order to give users the opportunity - * to assign event handlers _after_ an object has been constructed but before any - * I/O has occurred: - * - * ```js - * import { nextTick } from 'node:process'; - * - * function MyThing(options) { - * this.setupOptions(options); - * - * nextTick(() => { - * this.startDoingStuff(); - * }); - * } - * - * const thing = new MyThing(); - * thing.getReadyForStuff(); - * - * // thing.startDoingStuff() gets called now, not before. - * ``` - * - * It is very important for APIs to be either 100% synchronous or 100% - * asynchronous. Consider this example: - * - * ```js - * // WARNING! DO NOT USE! BAD UNSAFE HAZARD! - * function maybeSync(arg, cb) { - * if (arg) { - * cb(); - * return; - * } - * - * fs.stat('file', cb); - * } - * ``` - * - * This API is hazardous because in the following case: - * - * ```js - * const maybeTrue = Math.random() > 0.5; - * - * maybeSync(maybeTrue, () => { - * foo(); - * }); - * - * bar(); - * ``` - * - * It is not clear whether `foo()` or `bar()` will be called first. - * - * The following approach is much better: - * - * ```js - * import { nextTick } from 'node:process'; - * - * function definitelyAsync(arg, cb) { - * if (arg) { - * nextTick(cb); - * return; - * } - * - * fs.stat('file', cb); - * } - * ``` - * @since v0.1.26 - * @param args Additional arguments to pass when invoking the `callback` - */ - nextTick(callback: Function, ...args: any[]): void; - /** - * The process.noDeprecation property indicates whether the --no-deprecation flag is set on the current Node.js process. - * See the documentation for the ['warning' event](https://nodejs.org/docs/latest/api/process.html#event-warning) and the [emitWarning()](https://nodejs.org/docs/latest/api/process.html#processemitwarningwarning-type-code-ctor) method for more information about this flag's behavior. - */ - noDeprecation?: boolean; - /** - * This API is available through the [--permission](https://nodejs.org/api/cli.html#--permission) flag. - * - * `process.permission` is an object whose methods are used to manage permissions for the current process. - * Additional documentation is available in the [Permission Model](https://nodejs.org/api/permissions.html#permission-model). - * @since v20.0.0 - */ - permission: ProcessPermission; - /** - * The `process.release` property returns an `Object` containing metadata related - * to the current release, including URLs for the source tarball and headers-only - * tarball. - * - * `process.release` contains the following properties: - * - * ```js - * { - * name: 'node', - * lts: 'Hydrogen', - * sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz', - * headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz', - * libUrl: 'https://nodejs.org/download/release/v18.12.0/win-x64/node.lib' - * } - * ``` - * - * In custom builds from non-release versions of the source tree, only the `name` property may be present. The additional properties should not be - * relied upon to exist. - * @since v3.0.0 - */ - readonly release: ProcessRelease; - readonly features: ProcessFeatures; - /** - * The `process.traceProcessWarnings` property indicates whether the `--trace-warnings` flag - * is set on the current Node.js process. This property allows programmatic control over the - * tracing of warnings, enabling or disabling stack traces for warnings at runtime. - * - * ```js - * // Enable trace warnings - * process.traceProcessWarnings = true; - * - * // Emit a warning with a stack trace - * process.emitWarning('Warning with stack trace'); - * - * // Disable trace warnings - * process.traceProcessWarnings = false; - * ``` - * @since v6.10.0 - */ - traceProcessWarnings: boolean; - /** - * `process.umask()` returns the Node.js process's file mode creation mask. Child - * processes inherit the mask from the parent process. - * @since v0.1.19 - * @deprecated Calling `process.umask()` with no argument causes the process-wide umask to be written twice. This introduces a race condition between threads, and is a potential - * security vulnerability. There is no safe, cross-platform alternative API. - */ - umask(): number; - /** - * Can only be set if not in worker thread. - */ - umask(mask: string | number): number; - /** - * The `process.uptime()` method returns the number of seconds the current Node.js - * process has been running. - * - * The return value includes fractions of a second. Use `Math.floor()` to get whole - * seconds. - * @since v0.5.0 - */ - uptime(): number; - hrtime: HRTime; - /** - * If the Node.js process was spawned with an IPC channel, the process.channel property is a reference to the IPC channel. - * If no IPC channel exists, this property is undefined. - * @since v7.1.0 - */ - channel?: Control; - /** - * If Node.js is spawned with an IPC channel, the `process.send()` method can be - * used to send messages to the parent process. Messages will be received as a `'message'` event on the parent's `ChildProcess` object. - * - * If Node.js was not spawned with an IPC channel, `process.send` will be `undefined`. - * - * The message goes through serialization and parsing. The resulting message might - * not be the same as what is originally sent. - * @since v0.5.9 - * @param options used to parameterize the sending of certain types of handles. `options` supports the following properties: - */ - send?( - message: any, - sendHandle?: SendHandle, - options?: MessageOptions, - callback?: (error: Error | null) => void, - ): boolean; - send?( - message: any, - sendHandle: SendHandle, - callback?: (error: Error | null) => void, - ): boolean; - send?( - message: any, - callback: (error: Error | null) => void, - ): boolean; - /** - * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.disconnect()` method will close the - * IPC channel to the parent process, allowing the child process to exit gracefully - * once there are no other connections keeping it alive. - * - * The effect of calling `process.disconnect()` is the same as calling `ChildProcess.disconnect()` from the parent process. - * - * If the Node.js process was not spawned with an IPC channel, `process.disconnect()` will be `undefined`. - * @since v0.7.2 - */ - disconnect?(): void; - /** - * If the Node.js process is spawned with an IPC channel (see the `Child Process` and `Cluster` documentation), the `process.connected` property will return `true` so long as the IPC - * channel is connected and will return `false` after `process.disconnect()` is called. - * - * Once `process.connected` is `false`, it is no longer possible to send messages - * over the IPC channel using `process.send()`. - * @since v0.7.2 - */ - connected: boolean; - /** - * The `process.allowedNodeEnvironmentFlags` property is a special, - * read-only `Set` of flags allowable within the `NODE_OPTIONS` environment variable. - * - * `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides `Set.prototype.has` to recognize several different possible flag - * representations. `process.allowedNodeEnvironmentFlags.has()` will - * return `true` in the following cases: - * - * * Flags may omit leading single (`-`) or double (`--`) dashes; e.g., `inspect-brk` for `--inspect-brk`, or `r` for `-r`. - * * Flags passed through to V8 (as listed in `--v8-options`) may replace - * one or more _non-leading_ dashes for an underscore, or vice-versa; - * e.g., `--perf_basic_prof`, `--perf-basic-prof`, `--perf_basic-prof`, - * etc. - * * Flags may contain one or more equals (`=`) characters; all - * characters after and including the first equals will be ignored; - * e.g., `--stack-trace-limit=100`. - * * Flags _must_ be allowable within `NODE_OPTIONS`. - * - * When iterating over `process.allowedNodeEnvironmentFlags`, flags will - * appear only _once_; each will begin with one or more dashes. Flags - * passed through to V8 will contain underscores instead of non-leading - * dashes: - * - * ```js - * import { allowedNodeEnvironmentFlags } from 'node:process'; - * - * allowedNodeEnvironmentFlags.forEach((flag) => { - * // -r - * // --inspect-brk - * // --abort_on_uncaught_exception - * // ... - * }); - * ``` - * - * The methods `add()`, `clear()`, and `delete()` of`process.allowedNodeEnvironmentFlags` do nothing, and will fail - * silently. - * - * If Node.js was compiled _without_ `NODE_OPTIONS` support (shown in {@link config}), `process.allowedNodeEnvironmentFlags` will - * contain what _would have_ been allowable. - * @since v10.10.0 - */ - allowedNodeEnvironmentFlags: ReadonlySet; - /** - * `process.report` is an object whose methods are used to generate diagnostic reports for the current process. - * Additional documentation is available in the [report documentation](https://nodejs.org/docs/latest-v25.x/api/report.html). - * @since v11.8.0 - */ - report: ProcessReport; - /** - * ```js - * import { resourceUsage } from 'node:process'; - * - * console.log(resourceUsage()); - * /* - * Will output: - * { - * userCPUTime: 82872, - * systemCPUTime: 4143, - * maxRSS: 33164, - * sharedMemorySize: 0, - * unsharedDataSize: 0, - * unsharedStackSize: 0, - * minorPageFault: 2469, - * majorPageFault: 0, - * swappedOut: 0, - * fsRead: 0, - * fsWrite: 8, - * ipcSent: 0, - * ipcReceived: 0, - * signalsCount: 0, - * voluntaryContextSwitches: 79, - * involuntaryContextSwitches: 1 - * } - * - * ``` - * @since v12.6.0 - * @return the resource usage for the current process. All of these values come from the `uv_getrusage` call which returns a [`uv_rusage_t` struct][uv_rusage_t]. - */ - resourceUsage(): ResourceUsage; - /** - * The initial value of `process.throwDeprecation` indicates whether the `--throw-deprecation` flag is set on the current Node.js process. `process.throwDeprecation` - * is mutable, so whether or not deprecation warnings result in errors may be altered at runtime. See the documentation for the 'warning' event and the emitWarning() - * method for more information. - * - * ```bash - * $ node --throw-deprecation -p "process.throwDeprecation" - * true - * $ node -p "process.throwDeprecation" - * undefined - * $ node - * > process.emitWarning('test', 'DeprecationWarning'); - * undefined - * > (node:26598) DeprecationWarning: test - * > process.throwDeprecation = true; - * true - * > process.emitWarning('test', 'DeprecationWarning'); - * Thrown: - * [DeprecationWarning: test] { name: 'DeprecationWarning' } - * ``` - * @since v0.9.12 - */ - throwDeprecation: boolean; - /** - * The `process.traceDeprecation` property indicates whether the `--trace-deprecation` flag is set on the current Node.js process. See the - * documentation for the `'warning' event` and the `emitWarning() method` for more information about this - * flag's behavior. - * @since v0.8.0 - */ - traceDeprecation: boolean; - /** - * An object is "refable" if it implements the Node.js "Refable protocol". - * Specifically, this means that the object implements the `Symbol.for('nodejs.ref')` - * and `Symbol.for('nodejs.unref')` methods. "Ref'd" objects will keep the Node.js - * event loop alive, while "unref'd" objects will not. Historically, this was - * implemented by using `ref()` and `unref()` methods directly on the objects. - * This pattern, however, is being deprecated in favor of the "Refable protocol" - * in order to better support Web Platform API types whose APIs cannot be modified - * to add `ref()` and `unref()` methods but still need to support that behavior. - * @since v22.14.0 - * @experimental - * @param maybeRefable An object that may be "refable". - */ - ref(maybeRefable: any): void; - /** - * An object is "unrefable" if it implements the Node.js "Refable protocol". - * Specifically, this means that the object implements the `Symbol.for('nodejs.ref')` - * and `Symbol.for('nodejs.unref')` methods. "Ref'd" objects will keep the Node.js - * event loop alive, while "unref'd" objects will not. Historically, this was - * implemented by using `ref()` and `unref()` methods directly on the objects. - * This pattern, however, is being deprecated in favor of the "Refable protocol" - * in order to better support Web Platform API types whose APIs cannot be modified - * to add `ref()` and `unref()` methods but still need to support that behavior. - * @since v22.14.0 - * @experimental - * @param maybeRefable An object that may be "unref'd". - */ - unref(maybeRefable: any): void; - /** - * Replaces the current process with a new process. - * - * This is achieved by using the `execve` POSIX function and therefore no memory or other - * resources from the current process are preserved, except for the standard input, - * standard output and standard error file descriptor. - * - * All other resources are discarded by the system when the processes are swapped, without triggering - * any exit or close events and without running any cleanup handler. - * - * This function will never return, unless an error occurred. - * - * This function is not available on Windows or IBM i. - * @since v22.15.0 - * @experimental - * @param file The name or path of the executable file to run. - * @param args List of string arguments. No argument can contain a null-byte (`\u0000`). - * @param env Environment key-value pairs. - * No key or value can contain a null-byte (`\u0000`). - * **Default:** `process.env`. - */ - execve?(file: string, args?: readonly string[], env?: ProcessEnv): never; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ProcessEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ProcessEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: ProcessEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: ProcessEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ProcessEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - } - } - export = process; -} -declare module "process" { - import process = require("node:process"); - export = process; -} diff --git a/skills/flight-finder/node_modules/@types/node/punycode.d.ts b/skills/flight-finder/node_modules/@types/node/punycode.d.ts deleted file mode 100644 index d293553..0000000 --- a/skills/flight-finder/node_modules/@types/node/punycode.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * **The version of the punycode module bundled in Node.js is being deprecated. **In a future major version of Node.js this module will be removed. Users - * currently depending on the `punycode` module should switch to using the - * userland-provided [Punycode.js](https://github.com/bestiejs/punycode.js) module instead. For punycode-based URL - * encoding, see `url.domainToASCII` or, more generally, the `WHATWG URL API`. - * - * The `punycode` module is a bundled version of the [Punycode.js](https://github.com/bestiejs/punycode.js) module. It - * can be accessed using: - * - * ```js - * import punycode from 'node:punycode'; - * ``` - * - * [Punycode](https://tools.ietf.org/html/rfc3492) is a character encoding scheme defined by RFC 3492 that is - * primarily intended for use in Internationalized Domain Names. Because host - * names in URLs are limited to ASCII characters only, Domain Names that contain - * non-ASCII characters must be converted into ASCII using the Punycode scheme. - * For instance, the Japanese character that translates into the English word, `'example'` is `'例'`. The Internationalized Domain Name, `'例.com'` (equivalent - * to `'example.com'`) is represented by Punycode as the ASCII string `'xn--fsq.com'`. - * - * The `punycode` module provides a simple implementation of the Punycode standard. - * - * The `punycode` module is a third-party dependency used by Node.js and - * made available to developers as a convenience. Fixes or other modifications to - * the module must be directed to the [Punycode.js](https://github.com/bestiejs/punycode.js) project. - * @deprecated - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/punycode.js) - */ -declare module "node:punycode" { - /** - * The `punycode.decode()` method converts a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only - * characters to the equivalent string of Unicode codepoints. - * - * ```js - * punycode.decode('maana-pta'); // 'mañana' - * punycode.decode('--dqo34k'); // '☃-⌘' - * ``` - * @since v0.5.1 - */ - function decode(string: string): string; - /** - * The `punycode.encode()` method converts a string of Unicode codepoints to a [Punycode](https://tools.ietf.org/html/rfc3492) string of ASCII-only characters. - * - * ```js - * punycode.encode('mañana'); // 'maana-pta' - * punycode.encode('☃-⌘'); // '--dqo34k' - * ``` - * @since v0.5.1 - */ - function encode(string: string): string; - /** - * The `punycode.toUnicode()` method converts a string representing a domain name - * containing [Punycode](https://tools.ietf.org/html/rfc3492) encoded characters into Unicode. Only the [Punycode](https://tools.ietf.org/html/rfc3492) encoded parts of the domain name are be - * converted. - * - * ```js - * // decode domain names - * punycode.toUnicode('xn--maana-pta.com'); // 'mañana.com' - * punycode.toUnicode('xn----dqo34k.com'); // '☃-⌘.com' - * punycode.toUnicode('example.com'); // 'example.com' - * ``` - * @since v0.6.1 - */ - function toUnicode(domain: string): string; - /** - * The `punycode.toASCII()` method converts a Unicode string representing an - * Internationalized Domain Name to [Punycode](https://tools.ietf.org/html/rfc3492). Only the non-ASCII parts of the - * domain name will be converted. Calling `punycode.toASCII()` on a string that - * already only contains ASCII characters will have no effect. - * - * ```js - * // encode domain names - * punycode.toASCII('mañana.com'); // 'xn--maana-pta.com' - * punycode.toASCII('☃-⌘.com'); // 'xn----dqo34k.com' - * punycode.toASCII('example.com'); // 'example.com' - * ``` - * @since v0.6.1 - */ - function toASCII(domain: string): string; - /** - * @deprecated since v7.0.0 - * The version of the punycode module bundled in Node.js is being deprecated. - * In a future major version of Node.js this module will be removed. - * Users currently depending on the punycode module should switch to using - * the userland-provided Punycode.js module instead. - */ - const ucs2: ucs2; - interface ucs2 { - /** - * @deprecated since v7.0.0 - * The version of the punycode module bundled in Node.js is being deprecated. - * In a future major version of Node.js this module will be removed. - * Users currently depending on the punycode module should switch to using - * the userland-provided Punycode.js module instead. - */ - decode(string: string): number[]; - /** - * @deprecated since v7.0.0 - * The version of the punycode module bundled in Node.js is being deprecated. - * In a future major version of Node.js this module will be removed. - * Users currently depending on the punycode module should switch to using - * the userland-provided Punycode.js module instead. - */ - encode(codePoints: readonly number[]): string; - } - /** - * @deprecated since v7.0.0 - * The version of the punycode module bundled in Node.js is being deprecated. - * In a future major version of Node.js this module will be removed. - * Users currently depending on the punycode module should switch to using - * the userland-provided Punycode.js module instead. - */ - const version: string; -} -declare module "punycode" { - export * from "node:punycode"; -} diff --git a/skills/flight-finder/node_modules/@types/node/querystring.d.ts b/skills/flight-finder/node_modules/@types/node/querystring.d.ts deleted file mode 100644 index dc421bc..0000000 --- a/skills/flight-finder/node_modules/@types/node/querystring.d.ts +++ /dev/null @@ -1,152 +0,0 @@ -/** - * The `node:querystring` module provides utilities for parsing and formatting URL - * query strings. It can be accessed using: - * - * ```js - * import querystring from 'node:querystring'; - * ``` - * - * `querystring` is more performant than `URLSearchParams` but is not a - * standardized API. Use `URLSearchParams` when performance is not critical or - * when compatibility with browser code is desirable. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/querystring.js) - */ -declare module "node:querystring" { - interface StringifyOptions { - /** - * The function to use when converting URL-unsafe characters to percent-encoding in the query string. - * @default `querystring.escape()` - */ - encodeURIComponent?: ((str: string) => string) | undefined; - } - interface ParseOptions { - /** - * Specifies the maximum number of keys to parse. Specify `0` to remove key counting limitations. - * @default 1000 - */ - maxKeys?: number | undefined; - /** - * The function to use when decoding percent-encoded characters in the query string. - * @default `querystring.unescape()` - */ - decodeURIComponent?: ((str: string) => string) | undefined; - } - interface ParsedUrlQuery extends NodeJS.Dict {} - interface ParsedUrlQueryInput extends - NodeJS.Dict< - | string - | number - | boolean - | bigint - | ReadonlyArray - | null - > - {} - /** - * The `querystring.stringify()` method produces a URL query string from a - * given `obj` by iterating through the object's "own properties". - * - * It serializes the following types of values passed in `obj`: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | - * [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | - * [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | - * [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) | - * [string\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type) | - * [number\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) | - * [bigint\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) | - * [boolean\[\]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) The numeric values must be finite. Any other input values will be coerced to - * empty strings. - * - * ```js - * querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); - * // Returns 'foo=bar&baz=qux&baz=quux&corge=' - * - * querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); - * // Returns 'foo:bar;baz:qux' - * ``` - * - * By default, characters requiring percent-encoding within the query string will - * be encoded as UTF-8\. If an alternative encoding is required, then an alternative `encodeURIComponent` option will need to be specified: - * - * ```js - * // Assuming gbkEncodeURIComponent function already exists, - * - * querystring.stringify({ w: '中文', foo: 'bar' }, null, null, - * { encodeURIComponent: gbkEncodeURIComponent }); - * ``` - * @since v0.1.25 - * @param obj The object to serialize into a URL query string - * @param [sep='&'] The substring used to delimit key and value pairs in the query string. - * @param [eq='='] . The substring used to delimit keys and values in the query string. - */ - function stringify(obj?: ParsedUrlQueryInput, sep?: string, eq?: string, options?: StringifyOptions): string; - /** - * The `querystring.parse()` method parses a URL query string (`str`) into a - * collection of key and value pairs. - * - * For example, the query string `'foo=bar&abc=xyz&abc=123'` is parsed into: - * - * ```json - * { - * "foo": "bar", - * "abc": ["xyz", "123"] - * } - * ``` - * - * The object returned by the `querystring.parse()` method _does not_ prototypically inherit from the JavaScript `Object`. This means that typical `Object` methods such as `obj.toString()`, - * `obj.hasOwnProperty()`, and others - * are not defined and _will not work_. - * - * By default, percent-encoded characters within the query string will be assumed - * to use UTF-8 encoding. If an alternative character encoding is used, then an - * alternative `decodeURIComponent` option will need to be specified: - * - * ```js - * // Assuming gbkDecodeURIComponent function already exists... - * - * querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, - * { decodeURIComponent: gbkDecodeURIComponent }); - * ``` - * @since v0.1.25 - * @param str The URL query string to parse - * @param [sep='&'] The substring used to delimit key and value pairs in the query string. - * @param [eq='='] The substring used to delimit keys and values in the query string. - */ - function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; - /** - * The querystring.encode() function is an alias for querystring.stringify(). - */ - const encode: typeof stringify; - /** - * The querystring.decode() function is an alias for querystring.parse(). - */ - const decode: typeof parse; - /** - * The `querystring.escape()` method performs URL percent-encoding on the given `str` in a manner that is optimized for the specific requirements of URL - * query strings. - * - * The `querystring.escape()` method is used by `querystring.stringify()` and is - * generally not expected to be used directly. It is exported primarily to allow - * application code to provide a replacement percent-encoding implementation if - * necessary by assigning `querystring.escape` to an alternative function. - * @since v0.1.25 - */ - function escape(str: string): string; - /** - * The `querystring.unescape()` method performs decoding of URL percent-encoded - * characters on the given `str`. - * - * The `querystring.unescape()` method is used by `querystring.parse()` and is - * generally not expected to be used directly. It is exported primarily to allow - * application code to provide a replacement decoding implementation if - * necessary by assigning `querystring.unescape` to an alternative function. - * - * By default, the `querystring.unescape()` method will attempt to use the - * JavaScript built-in `decodeURIComponent()` method to decode. If that fails, - * a safer equivalent that does not throw on malformed URLs will be used. - * @since v0.1.25 - */ - function unescape(str: string): string; -} -declare module "querystring" { - export * from "node:querystring"; -} diff --git a/skills/flight-finder/node_modules/@types/node/quic.d.ts b/skills/flight-finder/node_modules/@types/node/quic.d.ts deleted file mode 100644 index 9a6fd97..0000000 --- a/skills/flight-finder/node_modules/@types/node/quic.d.ts +++ /dev/null @@ -1,910 +0,0 @@ -/** - * The 'node:quic' module provides an implementation of the QUIC protocol. - * To access it, start Node.js with the `--experimental-quic` option and: - * - * ```js - * import quic from 'node:quic'; - * ``` - * - * The module is only available under the `node:` scheme. - * @since v23.8.0 - * @experimental - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/quic.js) - */ -declare module "node:quic" { - import { KeyObject, webcrypto } from "node:crypto"; - import { SocketAddress } from "node:net"; - import { ReadableStream } from "node:stream/web"; - /** - * @since v23.8.0 - */ - type OnSessionCallback = (this: QuicEndpoint, session: QuicSession) => void; - /** - * @since v23.8.0 - */ - type OnStreamCallback = (this: QuicSession, stream: QuicStream) => void; - /** - * @since v23.8.0 - */ - type OnDatagramCallback = (this: QuicSession, datagram: Uint8Array, early: boolean) => void; - /** - * @since v23.8.0 - */ - type OnDatagramStatusCallback = (this: QuicSession, id: bigint, status: "lost" | "acknowledged") => void; - /** - * @since v23.8.0 - */ - type OnPathValidationCallback = ( - this: QuicSession, - result: "success" | "failure" | "aborted", - newLocalAddress: SocketAddress, - newRemoteAddress: SocketAddress, - oldLocalAddress: SocketAddress, - oldRemoteAddress: SocketAddress, - preferredAddress: boolean, - ) => void; - /** - * @since v23.8.0 - */ - type OnSessionTicketCallback = (this: QuicSession, ticket: object) => void; - /** - * @since v23.8.0 - */ - type OnVersionNegotiationCallback = ( - this: QuicSession, - version: number, - requestedVersions: number[], - supportedVersions: number[], - ) => void; - /** - * @since v23.8.0 - */ - type OnHandshakeCallback = ( - this: QuicSession, - sni: string, - alpn: string, - cipher: string, - cipherVersion: string, - validationErrorReason: string, - validationErrorCode: number, - earlyDataAccepted: boolean, - ) => void; - /** - * @since v23.8.0 - */ - type OnBlockedCallback = (this: QuicStream) => void; - /** - * @since v23.8.0 - */ - type OnStreamErrorCallback = (this: QuicStream, error: any) => void; - /** - * @since v23.8.0 - */ - interface TransportParams { - /** - * The preferred IPv4 address to advertise. - * @since v23.8.0 - */ - preferredAddressIpv4?: SocketAddress | undefined; - /** - * The preferred IPv6 address to advertise. - * @since v23.8.0 - */ - preferredAddressIpv6?: SocketAddress | undefined; - /** - * @since v23.8.0 - */ - initialMaxStreamDataBidiLocal?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - initialMaxStreamDataBidiRemote?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - initialMaxStreamDataUni?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - initialMaxData?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - initialMaxStreamsBidi?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - initialMaxStreamsUni?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - maxIdleTimeout?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - activeConnectionIDLimit?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - ackDelayExponent?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - maxAckDelay?: bigint | number | undefined; - /** - * @since v23.8.0 - */ - maxDatagramFrameSize?: bigint | number | undefined; - } - /** - * @since v23.8.0 - */ - interface SessionOptions { - /** - * An endpoint to use. - * @since v23.8.0 - */ - endpoint?: EndpointOptions | QuicEndpoint | undefined; - /** - * The ALPN protocol identifier. - * @since v23.8.0 - */ - alpn?: string | undefined; - /** - * The CA certificates to use for sessions. - * @since v23.8.0 - */ - ca?: ArrayBuffer | NodeJS.ArrayBufferView | ReadonlyArray | undefined; - /** - * Specifies the congestion control algorithm that will be used. - * Must be set to one of either `'reno'`, `'cubic'`, or `'bbr'`. - * - * This is an advanced option that users typically won't have need to specify. - * @since v23.8.0 - */ - cc?: `${constants.cc}` | undefined; - /** - * The TLS certificates to use for sessions. - * @since v23.8.0 - */ - certs?: ArrayBuffer | NodeJS.ArrayBufferView | ReadonlyArray | undefined; - /** - * The list of supported TLS 1.3 cipher algorithms. - * @since v23.8.0 - */ - ciphers?: string | undefined; - /** - * The CRL to use for sessions. - * @since v23.8.0 - */ - crl?: ArrayBuffer | NodeJS.ArrayBufferView | ReadonlyArray | undefined; - /** - * The list of support TLS 1.3 cipher groups. - * @since v23.8.0 - */ - groups?: string | undefined; - /** - * True to enable TLS keylogging output. - * @since v23.8.0 - */ - keylog?: boolean | undefined; - /** - * The TLS crypto keys to use for sessions. - * @since v23.8.0 - */ - keys?: KeyObject | webcrypto.CryptoKey | ReadonlyArray | undefined; - /** - * Specifies the maximum UDP packet payload size. - * @since v23.8.0 - */ - maxPayloadSize?: bigint | number | undefined; - /** - * Specifies the maximum stream flow-control window size. - * @since v23.8.0 - */ - maxStreamWindow?: bigint | number | undefined; - /** - * Specifies the maximum session flow-control window size. - * @since v23.8.0 - */ - maxWindow?: bigint | number | undefined; - /** - * The minimum QUIC version number to allow. This is an advanced option that users - * typically won't have need to specify. - * @since v23.8.0 - */ - minVersion?: number | undefined; - /** - * When the remote peer advertises a preferred address, this option specifies whether - * to use it or ignore it. - * @since v23.8.0 - */ - preferredAddressPolicy?: "use" | "ignore" | "default" | undefined; - /** - * True if qlog output should be enabled. - * @since v23.8.0 - */ - qlog?: boolean | undefined; - /** - * A session ticket to use for 0RTT session resumption. - * @since v23.8.0 - */ - sessionTicket?: NodeJS.ArrayBufferView | undefined; - /** - * Specifies the maximum number of milliseconds a TLS handshake is permitted to take - * to complete before timing out. - * @since v23.8.0 - */ - handshakeTimeout?: bigint | number | undefined; - /** - * The peer server name to target. - * @since v23.8.0 - */ - sni?: string | undefined; - /** - * True to enable TLS tracing output. - * @since v23.8.0 - */ - tlsTrace?: boolean | undefined; - /** - * The QUIC transport parameters to use for the session. - * @since v23.8.0 - */ - transportParams?: TransportParams | undefined; - /** - * Specifies the maximum number of unacknowledged packets a session should allow. - * @since v23.8.0 - */ - unacknowledgedPacketThreshold?: bigint | number | undefined; - /** - * True to require verification of TLS client certificate. - * @since v23.8.0 - */ - verifyClient?: boolean | undefined; - /** - * True to require private key verification. - * @since v23.8.0 - */ - verifyPrivateKey?: boolean | undefined; - /** - * The QUIC version number to use. This is an advanced option that users typically - * won't have need to specify. - * @since v23.8.0 - */ - version?: number | undefined; - } - /** - * Initiate a new client-side session. - * - * ```js - * import { connect } from 'node:quic'; - * import { Buffer } from 'node:buffer'; - * - * const enc = new TextEncoder(); - * const alpn = 'foo'; - * const client = await connect('123.123.123.123:8888', { alpn }); - * await client.createUnidirectionalStream({ - * body: enc.encode('hello world'), - * }); - * ``` - * - * By default, every call to `connect(...)` will create a new local - * `QuicEndpoint` instance bound to a new random local IP port. To - * specify the exact local address to use, or to multiplex multiple - * QUIC sessions over a single local port, pass the `endpoint` option - * with either a `QuicEndpoint` or `EndpointOptions` as the argument. - * - * ```js - * import { QuicEndpoint, connect } from 'node:quic'; - * - * const endpoint = new QuicEndpoint({ - * address: '127.0.0.1:1234', - * }); - * - * const client = await connect('123.123.123.123:8888', { endpoint }); - * ``` - * @since v23.8.0 - */ - function connect(address: string | SocketAddress, options?: SessionOptions): Promise; - /** - * Configures the endpoint to listen as a server. When a new session is initiated by - * a remote peer, the given `onsession` callback will be invoked with the created - * session. - * - * ```js - * import { listen } from 'node:quic'; - * - * const endpoint = await listen((session) => { - * // ... handle the session - * }); - * - * // Closing the endpoint allows any sessions open when close is called - * // to complete naturally while preventing new sessions from being - * // initiated. Once all existing sessions have finished, the endpoint - * // will be destroyed. The call returns a promise that is resolved once - * // the endpoint is destroyed. - * await endpoint.close(); - * ``` - * - * By default, every call to `listen(...)` will create a new local - * `QuicEndpoint` instance bound to a new random local IP port. To - * specify the exact local address to use, or to multiplex multiple - * QUIC sessions over a single local port, pass the `endpoint` option - * with either a `QuicEndpoint` or `EndpointOptions` as the argument. - * - * At most, any single `QuicEndpoint` can only be configured to listen as - * a server once. - * @since v23.8.0 - */ - function listen(onsession: OnSessionCallback, options?: SessionOptions): Promise; - /** - * The endpoint configuration options passed when constructing a new `QuicEndpoint` instance. - * @since v23.8.0 - */ - interface EndpointOptions { - /** - * If not specified the endpoint will bind to IPv4 `localhost` on a random port. - * @since v23.8.0 - */ - address?: SocketAddress | string | undefined; - /** - * The endpoint maintains an internal cache of validated socket addresses as a - * performance optimization. This option sets the maximum number of addresses - * that are cache. This is an advanced option that users typically won't have - * need to specify. - * @since v23.8.0 - */ - addressLRUSize?: bigint | number | undefined; - /** - * When `true`, indicates that the endpoint should bind only to IPv6 addresses. - * @since v23.8.0 - */ - ipv6Only?: boolean | undefined; - /** - * Specifies the maximum number of concurrent sessions allowed per remote peer address. - * @since v23.8.0 - */ - maxConnectionsPerHost?: bigint | number | undefined; - /** - * Specifies the maximum total number of concurrent sessions. - * @since v23.8.0 - */ - maxConnectionsTotal?: bigint | number | undefined; - /** - * Specifies the maximum number of QUIC retry attempts allowed per remote peer address. - * @since v23.8.0 - */ - maxRetries?: bigint | number | undefined; - /** - * Specifies the maximum number of stateless resets that are allowed per remote peer address. - * @since v23.8.0 - */ - maxStatelessResetsPerHost?: bigint | number | undefined; - /** - * Specifies the length of time a QUIC retry token is considered valid. - * @since v23.8.0 - */ - retryTokenExpiration?: bigint | number | undefined; - /** - * Specifies the 16-byte secret used to generate QUIC retry tokens. - * @since v23.8.0 - */ - resetTokenSecret?: NodeJS.ArrayBufferView | undefined; - /** - * Specifies the length of time a QUIC token is considered valid. - * @since v23.8.0 - */ - tokenExpiration?: bigint | number | undefined; - /** - * Specifies the 16-byte secret used to generate QUIC tokens. - * @since v23.8.0 - */ - tokenSecret?: NodeJS.ArrayBufferView | undefined; - /** - * @since v23.8.0 - */ - udpReceiveBufferSize?: number | undefined; - /** - * @since v23.8.0 - */ - udpSendBufferSize?: number | undefined; - /** - * @since v23.8.0 - */ - udpTTL?: number | undefined; - /** - * When `true`, requires that the endpoint validate peer addresses using retry packets - * while establishing a new connection. - * @since v23.8.0 - */ - validateAddress?: boolean | undefined; - } - /** - * A `QuicEndpoint` encapsulates the local UDP-port binding for QUIC. It can be - * used as both a client and a server. - * @since v23.8.0 - */ - class QuicEndpoint implements AsyncDisposable { - constructor(options?: EndpointOptions); - /** - * The local UDP socket address to which the endpoint is bound, if any. - * - * If the endpoint is not currently bound then the value will be `undefined`. Read only. - * @since v23.8.0 - */ - readonly address: SocketAddress | undefined; - /** - * When `endpoint.busy` is set to true, the endpoint will temporarily reject - * new sessions from being created. Read/write. - * - * ```js - * // Mark the endpoint busy. New sessions will be prevented. - * endpoint.busy = true; - * - * // Mark the endpoint free. New session will be allowed. - * endpoint.busy = false; - * ``` - * - * The `busy` property is useful when the endpoint is under heavy load and needs to - * temporarily reject new sessions while it catches up. - * @since v23.8.0 - */ - busy: boolean; - /** - * Gracefully close the endpoint. The endpoint will close and destroy itself when - * all currently open sessions close. Once called, new sessions will be rejected. - * - * Returns a promise that is fulfilled when the endpoint is destroyed. - * @since v23.8.0 - */ - close(): Promise; - /** - * A promise that is fulfilled when the endpoint is destroyed. This will be the same promise that is - * returned by the `endpoint.close()` function. Read only. - * @since v23.8.0 - */ - readonly closed: Promise; - /** - * True if `endpoint.close()` has been called and closing the endpoint has not yet completed. - * Read only. - * @since v23.8.0 - */ - readonly closing: boolean; - /** - * Forcefully closes the endpoint by forcing all open sessions to be immediately - * closed. - * @since v23.8.0 - */ - destroy(error?: any): void; - /** - * True if `endpoint.destroy()` has been called. Read only. - * @since v23.8.0 - */ - readonly destroyed: boolean; - /** - * The statistics collected for an active session. Read only. - * @since v23.8.0 - */ - readonly stats: QuicEndpoint.Stats; - /** - * Calls `endpoint.close()` and returns a promise that fulfills when the - * endpoint has closed. - * @since v23.8.0 - */ - [Symbol.asyncDispose](): Promise; - } - namespace QuicEndpoint { - /** - * A view of the collected statistics for an endpoint. - * @since v23.8.0 - */ - class Stats { - private constructor(); - /** - * A timestamp indicating the moment the endpoint was created. Read only. - * @since v23.8.0 - */ - readonly createdAt: bigint; - /** - * A timestamp indicating the moment the endpoint was destroyed. Read only. - * @since v23.8.0 - */ - readonly destroyedAt: bigint; - /** - * The total number of bytes received by this endpoint. Read only. - * @since v23.8.0 - */ - readonly bytesReceived: bigint; - /** - * The total number of bytes sent by this endpoint. Read only. - * @since v23.8.0 - */ - readonly bytesSent: bigint; - /** - * The total number of QUIC packets successfully received by this endpoint. Read only. - * @since v23.8.0 - */ - readonly packetsReceived: bigint; - /** - * The total number of QUIC packets successfully sent by this endpoint. Read only. - * @since v23.8.0 - */ - readonly packetsSent: bigint; - /** - * The total number of peer-initiated sessions received by this endpoint. Read only. - * @since v23.8.0 - */ - readonly serverSessions: bigint; - /** - * The total number of sessions initiated by this endpoint. Read only. - * @since v23.8.0 - */ - readonly clientSessions: bigint; - /** - * The total number of times an initial packet was rejected due to the - * endpoint being marked busy. Read only. - * @since v23.8.0 - */ - readonly serverBusyCount: bigint; - /** - * The total number of QUIC retry attempts on this endpoint. Read only. - * @since v23.8.0 - */ - readonly retryCount: bigint; - /** - * The total number sessions rejected due to QUIC version mismatch. Read only. - * @since v23.8.0 - */ - readonly versionNegotiationCount: bigint; - /** - * The total number of stateless resets handled by this endpoint. Read only. - * @since v23.8.0 - */ - readonly statelessResetCount: bigint; - /** - * The total number of sessions that were closed before handshake completed. Read only. - * @since v23.8.0 - */ - readonly immediateCloseCount: bigint; - } - } - interface CreateStreamOptions { - body?: ArrayBuffer | NodeJS.ArrayBufferView | Blob | undefined; - sendOrder?: number | undefined; - } - interface SessionPath { - local: SocketAddress; - remote: SocketAddress; - } - /** - * A `QuicSession` represents the local side of a QUIC connection. - * @since v23.8.0 - */ - class QuicSession implements AsyncDisposable { - private constructor(); - /** - * Initiate a graceful close of the session. Existing streams will be allowed - * to complete but no new streams will be opened. Once all streams have closed, - * the session will be destroyed. The returned promise will be fulfilled once - * the session has been destroyed. - * @since v23.8.0 - */ - close(): Promise; - /** - * A promise that is fulfilled once the session is destroyed. - * @since v23.8.0 - */ - readonly closed: Promise; - /** - * Immediately destroy the session. All streams will be destroys and the - * session will be closed. - * @since v23.8.0 - */ - destroy(error?: any): void; - /** - * True if `session.destroy()` has been called. Read only. - * @since v23.8.0 - */ - readonly destroyed: boolean; - /** - * The endpoint that created this session. Read only. - * @since v23.8.0 - */ - readonly endpoint: QuicEndpoint; - /** - * The callback to invoke when a new stream is initiated by a remote peer. Read/write. - * @since v23.8.0 - */ - onstream: OnStreamCallback | undefined; - /** - * The callback to invoke when a new datagram is received from a remote peer. Read/write. - * @since v23.8.0 - */ - ondatagram: OnDatagramCallback | undefined; - /** - * The callback to invoke when the status of a datagram is updated. Read/write. - * @since v23.8.0 - */ - ondatagramstatus: OnDatagramStatusCallback | undefined; - /** - * The callback to invoke when the path validation is updated. Read/write. - * @since v23.8.0 - */ - onpathvalidation: OnPathValidationCallback | undefined; - /** - * The callback to invoke when a new session ticket is received. Read/write. - * @since v23.8.0 - */ - onsessionticket: OnSessionTicketCallback | undefined; - /** - * The callback to invoke when a version negotiation is initiated. Read/write. - * @since v23.8.0 - */ - onversionnegotiation: OnVersionNegotiationCallback | undefined; - /** - * The callback to invoke when the TLS handshake is completed. Read/write. - * @since v23.8.0 - */ - onhandshake: OnHandshakeCallback | undefined; - /** - * Open a new bidirectional stream. If the `body` option is not specified, - * the outgoing stream will be half-closed. - * @since v23.8.0 - */ - createBidirectionalStream(options?: CreateStreamOptions): Promise; - /** - * Open a new unidirectional stream. If the `body` option is not specified, - * the outgoing stream will be closed. - * @since v23.8.0 - */ - createUnidirectionalStream(options?: CreateStreamOptions): Promise; - /** - * The local and remote socket addresses associated with the session. Read only. - * @since v23.8.0 - */ - path: SessionPath | undefined; - /** - * Sends an unreliable datagram to the remote peer, returning the datagram ID. - * If the datagram payload is specified as an `ArrayBufferView`, then ownership of - * that view will be transfered to the underlying stream. - * @since v23.8.0 - */ - sendDatagram(datagram: string | NodeJS.ArrayBufferView): bigint; - /** - * Return the current statistics for the session. Read only. - * @since v23.8.0 - */ - readonly stats: QuicSession.Stats; - /** - * Initiate a key update for the session. - * @since v23.8.0 - */ - updateKey(): void; - /** - * Calls `session.close()` and returns a promise that fulfills when the - * session has closed. - * @since v23.8.0 - */ - [Symbol.asyncDispose](): Promise; - } - namespace QuicSession { - /** - * @since v23.8.0 - */ - class Stats { - private constructor(); - /** - * @since v23.8.0 - */ - readonly createdAt: bigint; - /** - * @since v23.8.0 - */ - readonly closingAt: bigint; - /** - * @since v23.8.0 - */ - readonly handshakeCompletedAt: bigint; - /** - * @since v23.8.0 - */ - readonly handshakeConfirmedAt: bigint; - /** - * @since v23.8.0 - */ - readonly bytesReceived: bigint; - /** - * @since v23.8.0 - */ - readonly bytesSent: bigint; - /** - * @since v23.8.0 - */ - readonly bidiInStreamCount: bigint; - /** - * @since v23.8.0 - */ - readonly bidiOutStreamCount: bigint; - /** - * @since v23.8.0 - */ - readonly uniInStreamCount: bigint; - /** - * @since v23.8.0 - */ - readonly uniOutStreamCount: bigint; - /** - * @since v23.8.0 - */ - readonly maxBytesInFlights: bigint; - /** - * @since v23.8.0 - */ - readonly bytesInFlight: bigint; - /** - * @since v23.8.0 - */ - readonly blockCount: bigint; - /** - * @since v23.8.0 - */ - readonly cwnd: bigint; - /** - * @since v23.8.0 - */ - readonly latestRtt: bigint; - /** - * @since v23.8.0 - */ - readonly minRtt: bigint; - /** - * @since v23.8.0 - */ - readonly rttVar: bigint; - /** - * @since v23.8.0 - */ - readonly smoothedRtt: bigint; - /** - * @since v23.8.0 - */ - readonly ssthresh: bigint; - /** - * @since v23.8.0 - */ - readonly datagramsReceived: bigint; - /** - * @since v23.8.0 - */ - readonly datagramsSent: bigint; - /** - * @since v23.8.0 - */ - readonly datagramsAcknowledged: bigint; - /** - * @since v23.8.0 - */ - readonly datagramsLost: bigint; - } - } - /** - * @since v23.8.0 - */ - class QuicStream { - private constructor(); - /** - * A promise that is fulfilled when the stream is fully closed. - * @since v23.8.0 - */ - readonly closed: Promise; - /** - * Immediately and abruptly destroys the stream. - * @since v23.8.0 - */ - destroy(error?: any): void; - /** - * True if `stream.destroy()` has been called. - * @since v23.8.0 - */ - readonly destroyed: boolean; - /** - * The directionality of the stream. Read only. - * @since v23.8.0 - */ - readonly direction: "bidi" | "uni"; - /** - * The stream ID. Read only. - * @since v23.8.0 - */ - readonly id: bigint; - /** - * The callback to invoke when the stream is blocked. Read/write. - * @since v23.8.0 - */ - onblocked: OnBlockedCallback | undefined; - /** - * The callback to invoke when the stream is reset. Read/write. - * @since v23.8.0 - */ - onreset: OnStreamErrorCallback | undefined; - /** - * @since v23.8.0 - */ - readonly readable: ReadableStream; - /** - * The session that created this stream. Read only. - * @since v23.8.0 - */ - readonly session: QuicSession; - /** - * The current statistics for the stream. Read only. - * @since v23.8.0 - */ - readonly stats: QuicStream.Stats; - } - namespace QuicStream { - /** - * @since v23.8.0 - */ - class Stats { - private constructor(); - /** - * @since v23.8.0 - */ - readonly ackedAt: bigint; - /** - * @since v23.8.0 - */ - readonly bytesReceived: bigint; - /** - * @since v23.8.0 - */ - readonly bytesSent: bigint; - /** - * @since v23.8.0 - */ - readonly createdAt: bigint; - /** - * @since v23.8.0 - */ - readonly destroyedAt: bigint; - /** - * @since v23.8.0 - */ - readonly finalSize: bigint; - /** - * @since v23.8.0 - */ - readonly isConnected: bigint; - /** - * @since v23.8.0 - */ - readonly maxOffset: bigint; - /** - * @since v23.8.0 - */ - readonly maxOffsetAcknowledged: bigint; - /** - * @since v23.8.0 - */ - readonly maxOffsetReceived: bigint; - /** - * @since v23.8.0 - */ - readonly openedAt: bigint; - /** - * @since v23.8.0 - */ - readonly receivedAt: bigint; - } - } - namespace constants { - enum cc { - RENO = "reno", - CUBIC = "cubic", - BBR = "bbr", - } - const DEFAULT_CIPHERS: string; - const DEFAULT_GROUPS: string; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/readline.d.ts b/skills/flight-finder/node_modules/@types/node/readline.d.ts deleted file mode 100644 index 9e3714f..0000000 --- a/skills/flight-finder/node_modules/@types/node/readline.d.ts +++ /dev/null @@ -1,542 +0,0 @@ -/** - * The `node:readline` module provides an interface for reading data from a [Readable](https://nodejs.org/docs/latest-v25.x/api/stream.html#readable-streams) stream - * (such as [`process.stdin`](https://nodejs.org/docs/latest-v25.x/api/process.html#processstdin)) one line at a time. - * - * To use the promise-based APIs: - * - * ```js - * import * as readline from 'node:readline/promises'; - * ``` - * - * To use the callback and sync APIs: - * - * ```js - * import * as readline from 'node:readline'; - * ``` - * - * The following simple example illustrates the basic use of the `node:readline` module. - * - * ```js - * import * as readline from 'node:readline/promises'; - * import { stdin as input, stdout as output } from 'node:process'; - * - * const rl = readline.createInterface({ input, output }); - * - * const answer = await rl.question('What do you think of Node.js? '); - * - * console.log(`Thank you for your valuable feedback: ${answer}`); - * - * rl.close(); - * ``` - * - * Once this code is invoked, the Node.js application will not terminate until the `readline.Interface` is closed because the interface waits for data to be - * received on the `input` stream. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/readline.js) - */ -declare module "node:readline" { - import { Abortable, EventEmitter, InternalEventEmitter } from "node:events"; - interface Key { - sequence?: string | undefined; - name?: string | undefined; - ctrl?: boolean | undefined; - meta?: boolean | undefined; - shift?: boolean | undefined; - } - interface InterfaceEventMap { - "close": []; - "error": [error: Error]; - "history": [history: string[]]; - "line": [input: string]; - "pause": []; - "resume": []; - "SIGCONT": []; - "SIGINT": []; - "SIGTSTP": []; - } - /** - * Instances of the `readline.Interface` class are constructed using the `readline.createInterface()` method. Every instance is associated with a - * single `input` [Readable](https://nodejs.org/docs/latest-v25.x/api/stream.html#readable-streams) stream and a single `output` [Writable](https://nodejs.org/docs/latest-v25.x/api/stream.html#writable-streams) stream. - * The `output` stream is used to print prompts for user input that arrives on, - * and is read from, the `input` stream. - * @since v0.1.104 - */ - class Interface implements EventEmitter, Disposable { - /** - * NOTE: According to the documentation: - * - * > Instances of the `readline.Interface` class are constructed using the - * > `readline.createInterface()` method. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/readline.html#class-interfaceconstructor - */ - protected constructor( - input: NodeJS.ReadableStream, - output?: NodeJS.WritableStream, - completer?: Completer | AsyncCompleter, - terminal?: boolean, - ); - /** - * NOTE: According to the documentation: - * - * > Instances of the `readline.Interface` class are constructed using the - * > `readline.createInterface()` method. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/readline.html#class-interfaceconstructor - */ - protected constructor(options: ReadLineOptions); - readonly terminal: boolean; - /** - * The current input data being processed by node. - * - * This can be used when collecting input from a TTY stream to retrieve the - * current value that has been processed thus far, prior to the `line` event - * being emitted. Once the `line` event has been emitted, this property will - * be an empty string. - * - * Be aware that modifying the value during the instance runtime may have - * unintended consequences if `rl.cursor` is not also controlled. - * - * **If not using a TTY stream for input, use the `'line'` event.** - * - * One possible use case would be as follows: - * - * ```js - * const values = ['lorem ipsum', 'dolor sit amet']; - * const rl = readline.createInterface(process.stdin); - * const showResults = debounce(() => { - * console.log( - * '\n', - * values.filter((val) => val.startsWith(rl.line)).join(' '), - * ); - * }, 300); - * process.stdin.on('keypress', (c, k) => { - * showResults(); - * }); - * ``` - * @since v0.1.98 - */ - readonly line: string; - /** - * The cursor position relative to `rl.line`. - * - * This will track where the current cursor lands in the input string, when - * reading input from a TTY stream. The position of cursor determines the - * portion of the input string that will be modified as input is processed, - * as well as the column where the terminal caret will be rendered. - * @since v0.1.98 - */ - readonly cursor: number; - /** - * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`. - * @since v15.3.0, v14.17.0 - * @return the current prompt string - */ - getPrompt(): string; - /** - * The `rl.setPrompt()` method sets the prompt that will be written to `output` whenever `rl.prompt()` is called. - * @since v0.1.98 - */ - setPrompt(prompt: string): void; - /** - * The `rl.prompt()` method writes the `Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new - * location at which to provide input. - * - * When called, `rl.prompt()` will resume the `input` stream if it has been - * paused. - * - * If the `Interface` was created with `output` set to `null` or `undefined` the prompt is not written. - * @since v0.1.98 - * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`. - */ - prompt(preserveCursor?: boolean): void; - /** - * The `rl.question()` method displays the `query` by writing it to the `output`, - * waits for user input to be provided on `input`, then invokes the `callback` function passing the provided input as the first argument. - * - * When called, `rl.question()` will resume the `input` stream if it has been - * paused. - * - * If the `Interface` was created with `output` set to `null` or `undefined` the `query` is not written. - * - * The `callback` function passed to `rl.question()` does not follow the typical - * pattern of accepting an `Error` object or `null` as the first argument. - * The `callback` is called with the provided answer as the only argument. - * - * An error will be thrown if calling `rl.question()` after `rl.close()`. - * - * Example usage: - * - * ```js - * rl.question('What is your favorite food? ', (answer) => { - * console.log(`Oh, so your favorite food is ${answer}`); - * }); - * ``` - * - * Using an `AbortController` to cancel a question. - * - * ```js - * const ac = new AbortController(); - * const signal = ac.signal; - * - * rl.question('What is your favorite food? ', { signal }, (answer) => { - * console.log(`Oh, so your favorite food is ${answer}`); - * }); - * - * signal.addEventListener('abort', () => { - * console.log('The food question timed out'); - * }, { once: true }); - * - * setTimeout(() => ac.abort(), 10000); - * ``` - * @since v0.3.3 - * @param query A statement or query to write to `output`, prepended to the prompt. - * @param callback A callback function that is invoked with the user's input in response to the `query`. - */ - question(query: string, callback: (answer: string) => void): void; - question(query: string, options: Abortable, callback: (answer: string) => void): void; - /** - * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed - * later if necessary. - * - * Calling `rl.pause()` does not immediately pause other events (including `'line'`) from being emitted by the `Interface` instance. - * @since v0.3.4 - */ - pause(): this; - /** - * The `rl.resume()` method resumes the `input` stream if it has been paused. - * @since v0.3.4 - */ - resume(): this; - /** - * The `rl.close()` method closes the `Interface` instance and - * relinquishes control over the `input` and `output` streams. When called, - * the `'close'` event will be emitted. - * - * Calling `rl.close()` does not immediately stop other events (including `'line'`) - * from being emitted by the `Interface` instance. - * @since v0.1.98 - */ - close(): void; - /** - * Alias for `rl.close()`. - * @since v22.15.0 - */ - [Symbol.dispose](): void; - /** - * The `rl.write()` method will write either `data` or a key sequence identified - * by `key` to the `output`. The `key` argument is supported only if `output` is - * a `TTY` text terminal. See `TTY keybindings` for a list of key - * combinations. - * - * If `key` is specified, `data` is ignored. - * - * When called, `rl.write()` will resume the `input` stream if it has been - * paused. - * - * If the `Interface` was created with `output` set to `null` or `undefined` the `data` and `key` are not written. - * - * ```js - * rl.write('Delete this!'); - * // Simulate Ctrl+U to delete the line written previously - * rl.write(null, { ctrl: true, name: 'u' }); - * ``` - * - * The `rl.write()` method will write the data to the `readline` `Interface`'s `input` _as if it were provided by the user_. - * @since v0.1.98 - */ - write(data: string | Buffer, key?: Key): void; - write(data: undefined | null | string | Buffer, key: Key): void; - /** - * Returns the real position of the cursor in relation to the input - * prompt + string. Long input (wrapping) strings, as well as multiple - * line prompts are included in the calculations. - * @since v13.5.0, v12.16.0 - */ - getCursorPos(): CursorPos; - [Symbol.asyncIterator](): NodeJS.AsyncIterator; - } - interface Interface extends InternalEventEmitter {} - type ReadLine = Interface; // type forwarded for backwards compatibility - type Completer = (line: string) => CompleterResult; - type AsyncCompleter = ( - line: string, - callback: (err?: null | Error, result?: CompleterResult) => void, - ) => void; - type CompleterResult = [string[], string]; - interface ReadLineOptions { - /** - * The [`Readable`](https://nodejs.org/docs/latest-v25.x/api/stream.html#readable-streams) stream to listen to - */ - input: NodeJS.ReadableStream; - /** - * The [`Writable`](https://nodejs.org/docs/latest-v25.x/api/stream.html#writable-streams) stream to write readline data to. - */ - output?: NodeJS.WritableStream | undefined; - /** - * An optional function used for Tab autocompletion. - */ - completer?: Completer | AsyncCompleter | undefined; - /** - * `true` if the `input` and `output` streams should be treated like a TTY, - * and have ANSI/VT100 escape codes written to it. - * Default: checking `isTTY` on the `output` stream upon instantiation. - */ - terminal?: boolean | undefined; - /** - * Initial list of history lines. - * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check, - * otherwise the history caching mechanism is not initialized at all. - * @default [] - */ - history?: string[] | undefined; - /** - * Maximum number of history lines retained. - * To disable the history set this value to `0`. - * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check, - * otherwise the history caching mechanism is not initialized at all. - * @default 30 - */ - historySize?: number | undefined; - /** - * If `true`, when a new input line added to the history list duplicates an older one, - * this removes the older line from the list. - * @default false - */ - removeHistoryDuplicates?: boolean | undefined; - /** - * The prompt string to use. - * @default "> " - */ - prompt?: string | undefined; - /** - * If the delay between `\r` and `\n` exceeds `crlfDelay` milliseconds, - * both `\r` and `\n` will be treated as separate end-of-line input. - * `crlfDelay` will be coerced to a number no less than `100`. - * It can be set to `Infinity`, in which case - * `\r` followed by `\n` will always be considered a single newline - * (which may be reasonable for [reading files](https://nodejs.org/docs/latest-v25.x/api/readline.html#example-read-file-stream-line-by-line) with `\r\n` line delimiter). - * @default 100 - */ - crlfDelay?: number | undefined; - /** - * The duration `readline` will wait for a character - * (when reading an ambiguous key sequence in milliseconds - * one that can both form a complete key sequence using the input read so far - * and can take additional input to complete a longer key sequence). - * @default 500 - */ - escapeCodeTimeout?: number | undefined; - /** - * The number of spaces a tab is equal to (minimum 1). - * @default 8 - */ - tabSize?: number | undefined; - /** - * Allows closing the interface using an AbortSignal. - * Aborting the signal will internally call `close` on the interface. - */ - signal?: AbortSignal | undefined; - } - /** - * The `readline.createInterface()` method creates a new `readline.Interface` instance. - * - * ```js - * import readline from 'node:readline'; - * const rl = readline.createInterface({ - * input: process.stdin, - * output: process.stdout, - * }); - * ``` - * - * Once the `readline.Interface` instance is created, the most common case is to - * listen for the `'line'` event: - * - * ```js - * rl.on('line', (line) => { - * console.log(`Received: ${line}`); - * }); - * ``` - * - * If `terminal` is `true` for this instance then the `output` stream will get - * the best compatibility if it defines an `output.columns` property and emits - * a `'resize'` event on the `output` if or when the columns ever change - * (`process.stdout` does this automatically when it is a TTY). - * - * When creating a `readline.Interface` using `stdin` as input, the program - * will not terminate until it receives an [EOF character](https://en.wikipedia.org/wiki/End-of-file#EOF_character). To exit without - * waiting for user input, call `process.stdin.unref()`. - * @since v0.1.98 - */ - function createInterface( - input: NodeJS.ReadableStream, - output?: NodeJS.WritableStream, - completer?: Completer | AsyncCompleter, - terminal?: boolean, - ): Interface; - function createInterface(options: ReadLineOptions): Interface; - /** - * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input. - * - * Optionally, `interface` specifies a `readline.Interface` instance for which - * autocompletion is disabled when copy-pasted input is detected. - * - * If the `stream` is a `TTY`, then it must be in raw mode. - * - * This is automatically called by any readline instance on its `input` if the `input` is a terminal. Closing the `readline` instance does not stop - * the `input` from emitting `'keypress'` events. - * - * ```js - * readline.emitKeypressEvents(process.stdin); - * if (process.stdin.isTTY) - * process.stdin.setRawMode(true); - * ``` - * - * ## Example: Tiny CLI - * - * The following example illustrates the use of `readline.Interface` class to - * implement a small command-line interface: - * - * ```js - * import readline from 'node:readline'; - * const rl = readline.createInterface({ - * input: process.stdin, - * output: process.stdout, - * prompt: 'OHAI> ', - * }); - * - * rl.prompt(); - * - * rl.on('line', (line) => { - * switch (line.trim()) { - * case 'hello': - * console.log('world!'); - * break; - * default: - * console.log(`Say what? I might have heard '${line.trim()}'`); - * break; - * } - * rl.prompt(); - * }).on('close', () => { - * console.log('Have a great day!'); - * process.exit(0); - * }); - * ``` - * - * ## Example: Read file stream line-by-Line - * - * A common use case for `readline` is to consume an input file one line at a - * time. The easiest way to do so is leveraging the `fs.ReadStream` API as - * well as a `for await...of` loop: - * - * ```js - * import fs from 'node:fs'; - * import readline from 'node:readline'; - * - * async function processLineByLine() { - * const fileStream = fs.createReadStream('input.txt'); - * - * const rl = readline.createInterface({ - * input: fileStream, - * crlfDelay: Infinity, - * }); - * // Note: we use the crlfDelay option to recognize all instances of CR LF - * // ('\r\n') in input.txt as a single line break. - * - * for await (const line of rl) { - * // Each line in input.txt will be successively available here as `line`. - * console.log(`Line from file: ${line}`); - * } - * } - * - * processLineByLine(); - * ``` - * - * Alternatively, one could use the `'line'` event: - * - * ```js - * import fs from 'node:fs'; - * import readline from 'node:readline'; - * - * const rl = readline.createInterface({ - * input: fs.createReadStream('sample.txt'), - * crlfDelay: Infinity, - * }); - * - * rl.on('line', (line) => { - * console.log(`Line from file: ${line}`); - * }); - * ``` - * - * Currently, `for await...of` loop can be a bit slower. If `async` / `await` flow and speed are both essential, a mixed approach can be applied: - * - * ```js - * import { once } from 'node:events'; - * import { createReadStream } from 'node:fs'; - * import { createInterface } from 'node:readline'; - * - * (async function processLineByLine() { - * try { - * const rl = createInterface({ - * input: createReadStream('big-file.txt'), - * crlfDelay: Infinity, - * }); - * - * rl.on('line', (line) => { - * // Process the line. - * }); - * - * await once(rl, 'close'); - * - * console.log('File processed.'); - * } catch (err) { - * console.error(err); - * } - * })(); - * ``` - * @since v0.7.7 - */ - function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; - type Direction = -1 | 0 | 1; - interface CursorPos { - rows: number; - cols: number; - } - /** - * The `readline.clearLine()` method clears current line of given [TTY](https://nodejs.org/docs/latest-v25.x/api/tty.html) stream - * in a specified direction identified by `dir`. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; - /** - * The `readline.clearScreenDown()` method clears the given [TTY](https://nodejs.org/docs/latest-v25.x/api/tty.html) stream from - * the current position of the cursor down. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; - /** - * The `readline.cursorTo()` method moves cursor to the specified position in a - * given [TTY](https://nodejs.org/docs/latest-v25.x/api/tty.html) `stream`. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; - /** - * The `readline.moveCursor()` method moves the cursor _relative_ to its current - * position in a given [TTY](https://nodejs.org/docs/latest-v25.x/api/tty.html) `stream`. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; -} -declare module "node:readline" { - export * as promises from "node:readline/promises"; -} -declare module "readline" { - export * from "node:readline"; -} diff --git a/skills/flight-finder/node_modules/@types/node/readline/promises.d.ts b/skills/flight-finder/node_modules/@types/node/readline/promises.d.ts deleted file mode 100644 index f449e1b..0000000 --- a/skills/flight-finder/node_modules/@types/node/readline/promises.d.ts +++ /dev/null @@ -1,161 +0,0 @@ -/** - * @since v17.0.0 - */ -declare module "node:readline/promises" { - import { Abortable } from "node:events"; - import { - CompleterResult, - Direction, - Interface as _Interface, - ReadLineOptions as _ReadLineOptions, - } from "node:readline"; - /** - * Instances of the `readlinePromises.Interface` class are constructed using the `readlinePromises.createInterface()` method. Every instance is associated with a - * single `input` `Readable` stream and a single `output` `Writable` stream. - * The `output` stream is used to print prompts for user input that arrives on, - * and is read from, the `input` stream. - * @since v17.0.0 - */ - class Interface extends _Interface { - /** - * The `rl.question()` method displays the `query` by writing it to the `output`, - * waits for user input to be provided on `input`, then invokes the `callback` function passing the provided input as the first argument. - * - * When called, `rl.question()` will resume the `input` stream if it has been - * paused. - * - * If the `Interface` was created with `output` set to `null` or `undefined` the `query` is not written. - * - * If the question is called after `rl.close()`, it returns a rejected promise. - * - * Example usage: - * - * ```js - * const answer = await rl.question('What is your favorite food? '); - * console.log(`Oh, so your favorite food is ${answer}`); - * ``` - * - * Using an `AbortSignal` to cancel a question. - * - * ```js - * const signal = AbortSignal.timeout(10_000); - * - * signal.addEventListener('abort', () => { - * console.log('The food question timed out'); - * }, { once: true }); - * - * const answer = await rl.question('What is your favorite food? ', { signal }); - * console.log(`Oh, so your favorite food is ${answer}`); - * ``` - * @since v17.0.0 - * @param query A statement or query to write to `output`, prepended to the prompt. - * @return A promise that is fulfilled with the user's input in response to the `query`. - */ - question(query: string): Promise; - question(query: string, options: Abortable): Promise; - } - /** - * @since v17.0.0 - */ - class Readline { - /** - * @param stream A TTY stream. - */ - constructor( - stream: NodeJS.WritableStream, - options?: { - autoCommit?: boolean | undefined; - }, - ); - /** - * The `rl.clearLine()` method adds to the internal list of pending action an - * action that clears current line of the associated `stream` in a specified - * direction identified by `dir`. - * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. - * @since v17.0.0 - * @return this - */ - clearLine(dir: Direction): this; - /** - * The `rl.clearScreenDown()` method adds to the internal list of pending action an - * action that clears the associated stream from the current position of the - * cursor down. - * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. - * @since v17.0.0 - * @return this - */ - clearScreenDown(): this; - /** - * The `rl.commit()` method sends all the pending actions to the associated `stream` and clears the internal list of pending actions. - * @since v17.0.0 - */ - commit(): Promise; - /** - * The `rl.cursorTo()` method adds to the internal list of pending action an action - * that moves cursor to the specified position in the associated `stream`. - * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. - * @since v17.0.0 - * @return this - */ - cursorTo(x: number, y?: number): this; - /** - * The `rl.moveCursor()` method adds to the internal list of pending action an - * action that moves the cursor _relative_ to its current position in the - * associated `stream`. - * Call `rl.commit()` to see the effect of this method, unless `autoCommit: true` was passed to the constructor. - * @since v17.0.0 - * @return this - */ - moveCursor(dx: number, dy: number): this; - /** - * The `rl.rollback` methods clears the internal list of pending actions without - * sending it to the associated `stream`. - * @since v17.0.0 - * @return this - */ - rollback(): this; - } - type Completer = (line: string) => CompleterResult | Promise; - interface ReadLineOptions extends Omit<_ReadLineOptions, "completer"> { - /** - * An optional function used for Tab autocompletion. - */ - completer?: Completer | undefined; - } - /** - * The `readlinePromises.createInterface()` method creates a new `readlinePromises.Interface` instance. - * - * ```js - * import readlinePromises from 'node:readline/promises'; - * const rl = readlinePromises.createInterface({ - * input: process.stdin, - * output: process.stdout, - * }); - * ``` - * - * Once the `readlinePromises.Interface` instance is created, the most common case - * is to listen for the `'line'` event: - * - * ```js - * rl.on('line', (line) => { - * console.log(`Received: ${line}`); - * }); - * ``` - * - * If `terminal` is `true` for this instance then the `output` stream will get - * the best compatibility if it defines an `output.columns` property and emits - * a `'resize'` event on the `output` if or when the columns ever change - * (`process.stdout` does this automatically when it is a TTY). - * @since v17.0.0 - */ - function createInterface( - input: NodeJS.ReadableStream, - output?: NodeJS.WritableStream, - completer?: Completer, - terminal?: boolean, - ): Interface; - function createInterface(options: ReadLineOptions): Interface; -} -declare module "readline/promises" { - export * from "node:readline/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/repl.d.ts b/skills/flight-finder/node_modules/@types/node/repl.d.ts deleted file mode 100644 index 2d06294..0000000 --- a/skills/flight-finder/node_modules/@types/node/repl.d.ts +++ /dev/null @@ -1,415 +0,0 @@ -/** - * The `node:repl` module provides a Read-Eval-Print-Loop (REPL) implementation - * that is available both as a standalone program or includible in other - * applications. It can be accessed using: - * - * ```js - * import repl from 'node:repl'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/repl.js) - */ -declare module "node:repl" { - import { AsyncCompleter, Completer, Interface, InterfaceEventMap } from "node:readline"; - import { InspectOptions } from "node:util"; - import { Context } from "node:vm"; - interface ReplOptions { - /** - * The input prompt to display. - * @default "> " - */ - prompt?: string | undefined; - /** - * The `Readable` stream from which REPL input will be read. - * @default process.stdin - */ - input?: NodeJS.ReadableStream | undefined; - /** - * The `Writable` stream to which REPL output will be written. - * @default process.stdout - */ - output?: NodeJS.WritableStream | undefined; - /** - * If `true`, specifies that the output should be treated as a TTY terminal, and have - * ANSI/VT100 escape codes written to it. - * Default: checking the value of the `isTTY` property on the output stream upon - * instantiation. - */ - terminal?: boolean | undefined; - /** - * The function to be used when evaluating each given line of input. - * **Default:** an async wrapper for the JavaScript `eval()` function. An `eval` function can - * error with `repl.Recoverable` to indicate the input was incomplete and prompt for - * additional lines. See the [custom evaluation functions](https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#custom-evaluation-functions) - * section for more details. - */ - eval?: REPLEval | undefined; - /** - * Defines if the repl prints output previews or not. - * @default `true` Always `false` in case `terminal` is falsy. - */ - preview?: boolean | undefined; - /** - * If `true`, specifies that the default `writer` function should include ANSI color - * styling to REPL output. If a custom `writer` function is provided then this has no - * effect. - * @default the REPL instance's `terminal` value - */ - useColors?: boolean | undefined; - /** - * If `true`, specifies that the default evaluation function will use the JavaScript - * `global` as the context as opposed to creating a new separate context for the REPL - * instance. The node CLI REPL sets this value to `true`. - * @default false - */ - useGlobal?: boolean | undefined; - /** - * If `true`, specifies that the default writer will not output the return value of a - * command if it evaluates to `undefined`. - * @default false - */ - ignoreUndefined?: boolean | undefined; - /** - * The function to invoke to format the output of each command before writing to `output`. - * @default a wrapper for `util.inspect` - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_customizing_repl_output - */ - writer?: REPLWriter | undefined; - /** - * An optional function used for custom Tab auto completion. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/readline.html#readline_use_of_the_completer_function - */ - completer?: Completer | AsyncCompleter | undefined; - /** - * A flag that specifies whether the default evaluator executes all JavaScript commands in - * strict mode or default (sloppy) mode. - * Accepted values are: - * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. - * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to - * prefacing every repl statement with `'use strict'`. - */ - replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT | undefined; - /** - * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is - * pressed. This cannot be used together with a custom `eval` function. - * @default false - */ - breakEvalOnSigint?: boolean | undefined; - } - type REPLEval = ( - this: REPLServer, - evalCmd: string, - context: Context, - file: string, - cb: (err: Error | null, result: any) => void, - ) => void; - type REPLWriter = (this: REPLServer, obj: any) => string; - /** - * This is the default "writer" value, if none is passed in the REPL options, - * and it can be overridden by custom print functions. - */ - const writer: REPLWriter & { - options: InspectOptions; - }; - type REPLCommandAction = (this: REPLServer, text: string) => void; - interface REPLCommand { - /** - * Help text to be displayed when `.help` is entered. - */ - help?: string | undefined; - /** - * The function to execute, optionally accepting a single string argument. - */ - action: REPLCommandAction; - } - interface REPLServerSetupHistoryOptions { - filePath?: string | undefined; - size?: number | undefined; - removeHistoryDuplicates?: boolean | undefined; - onHistoryFileLoaded?: ((err: Error | null, repl: REPLServer) => void) | undefined; - } - interface REPLServerEventMap extends InterfaceEventMap { - "exit": []; - "reset": [context: Context]; - } - /** - * Instances of `repl.REPLServer` are created using the {@link start} method - * or directly using the JavaScript `new` keyword. - * - * ```js - * import repl from 'node:repl'; - * - * const options = { useColors: true }; - * - * const firstInstance = repl.start(options); - * const secondInstance = new repl.REPLServer(options); - * ``` - * @since v0.1.91 - */ - class REPLServer extends Interface { - /** - * NOTE: According to the documentation: - * - * > Instances of `repl.REPLServer` are created using the `repl.start()` method and - * > _should not_ be created directly using the JavaScript `new` keyword. - * - * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_class_replserver - */ - private constructor(); - /** - * The `vm.Context` provided to the `eval` function to be used for JavaScript - * evaluation. - */ - readonly context: Context; - /** - * @deprecated since v14.3.0 - Use `input` instead. - */ - readonly inputStream: NodeJS.ReadableStream; - /** - * @deprecated since v14.3.0 - Use `output` instead. - */ - readonly outputStream: NodeJS.WritableStream; - /** - * The `Readable` stream from which REPL input will be read. - */ - readonly input: NodeJS.ReadableStream; - /** - * The `Writable` stream to which REPL output will be written. - */ - readonly output: NodeJS.WritableStream; - /** - * The commands registered via `replServer.defineCommand()`. - */ - readonly commands: NodeJS.ReadOnlyDict; - /** - * A value indicating whether the REPL is currently in "editor mode". - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_commands_and_special_keys - */ - readonly editorMode: boolean; - /** - * A value indicating whether the `_` variable has been assigned. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable - */ - readonly underscoreAssigned: boolean; - /** - * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable - */ - readonly last: any; - /** - * A value indicating whether the `_error` variable has been assigned. - * - * @since v9.8.0 - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable - */ - readonly underscoreErrAssigned: boolean; - /** - * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). - * - * @since v9.8.0 - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable - */ - readonly lastError: any; - /** - * Specified in the REPL options, this is the function to be used when evaluating each - * given line of input. If not specified in the REPL options, this is an async wrapper - * for the JavaScript `eval()` function. - */ - readonly eval: REPLEval; - /** - * Specified in the REPL options, this is a value indicating whether the default - * `writer` function should include ANSI color styling to REPL output. - */ - readonly useColors: boolean; - /** - * Specified in the REPL options, this is a value indicating whether the default `eval` - * function will use the JavaScript `global` as the context as opposed to creating a new - * separate context for the REPL instance. - */ - readonly useGlobal: boolean; - /** - * Specified in the REPL options, this is a value indicating whether the default `writer` - * function should output the result of a command if it evaluates to `undefined`. - */ - readonly ignoreUndefined: boolean; - /** - * Specified in the REPL options, this is the function to invoke to format the output of - * each command before writing to `outputStream`. If not specified in the REPL options, - * this will be a wrapper for `util.inspect`. - */ - readonly writer: REPLWriter; - /** - * Specified in the REPL options, this is the function to use for custom Tab auto-completion. - */ - readonly completer: Completer | AsyncCompleter; - /** - * Specified in the REPL options, this is a flag that specifies whether the default `eval` - * function should execute all JavaScript commands in strict mode or default (sloppy) mode. - * Possible values are: - * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. - * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to - * prefacing every repl statement with `'use strict'`. - */ - readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; - /** - * The `replServer.defineCommand()` method is used to add new `.`\-prefixed commands - * to the REPL instance. Such commands are invoked by typing a `.` followed by the `keyword`. The `cmd` is either a `Function` or an `Object` with the following - * properties: - * - * The following example shows two new commands added to the REPL instance: - * - * ```js - * import repl from 'node:repl'; - * - * const replServer = repl.start({ prompt: '> ' }); - * replServer.defineCommand('sayhello', { - * help: 'Say hello', - * action(name) { - * this.clearBufferedCommand(); - * console.log(`Hello, ${name}!`); - * this.displayPrompt(); - * }, - * }); - * replServer.defineCommand('saybye', function saybye() { - * console.log('Goodbye!'); - * this.close(); - * }); - * ``` - * - * The new commands can then be used from within the REPL instance: - * - * ```console - * > .sayhello Node.js User - * Hello, Node.js User! - * > .saybye - * Goodbye! - * ``` - * @since v0.3.0 - * @param keyword The command keyword (_without_ a leading `.` character). - * @param cmd The function to invoke when the command is processed. - */ - defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; - /** - * The `replServer.displayPrompt()` method readies the REPL instance for input - * from the user, printing the configured `prompt` to a new line in the `output` and resuming the `input` to accept new input. - * - * When multi-line input is being entered, a pipe `'|'` is printed rather than the - * 'prompt'. - * - * When `preserveCursor` is `true`, the cursor placement will not be reset to `0`. - * - * The `replServer.displayPrompt` method is primarily intended to be called from - * within the action function for commands registered using the `replServer.defineCommand()` method. - * @since v0.1.91 - */ - displayPrompt(preserveCursor?: boolean): void; - /** - * The `replServer.clearBufferedCommand()` method clears any command that has been - * buffered but not yet executed. This method is primarily intended to be - * called from within the action function for commands registered using the `replServer.defineCommand()` method. - * @since v9.0.0 - */ - clearBufferedCommand(): void; - /** - * Initializes a history log file for the REPL instance. When executing the - * Node.js binary and using the command-line REPL, a history file is initialized - * by default. However, this is not the case when creating a REPL - * programmatically. Use this method to initialize a history log file when working - * with REPL instances programmatically. - * @since v11.10.0 - * @param historyPath the path to the history file - * @param callback called when history writes are ready or upon error - */ - setupHistory(historyPath: string, callback: (err: Error | null, repl: this) => void): void; - setupHistory( - historyConfig?: REPLServerSetupHistoryOptions, - callback?: (err: Error | null, repl: this) => void, - ): void; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: REPLServerEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: REPLServerEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: REPLServerEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: REPLServerEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: REPLServerEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: REPLServerEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: REPLServerEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: REPLServerEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: REPLServerEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: REPLServerEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: REPLServerEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - /** - * A flag passed in the REPL options. Evaluates expressions in sloppy mode. - */ - const REPL_MODE_SLOPPY: unique symbol; - /** - * A flag passed in the REPL options. Evaluates expressions in strict mode. - * This is equivalent to prefacing every repl statement with `'use strict'`. - */ - const REPL_MODE_STRICT: unique symbol; - /** - * The `repl.start()` method creates and starts a {@link REPLServer} instance. - * - * If `options` is a string, then it specifies the input prompt: - * - * ```js - * import repl from 'node:repl'; - * - * // a Unix style prompt - * repl.start('$ '); - * ``` - * @since v0.1.91 - */ - function start(options?: string | ReplOptions): REPLServer; - /** - * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. - * - * @see https://nodejs.org/dist/latest-v25.x/docs/api/repl.html#repl_recoverable_errors - */ - class Recoverable extends SyntaxError { - err: Error; - constructor(err: Error); - } -} -declare module "repl" { - export * from "node:repl"; -} diff --git a/skills/flight-finder/node_modules/@types/node/sea.d.ts b/skills/flight-finder/node_modules/@types/node/sea.d.ts deleted file mode 100644 index 2930c82..0000000 --- a/skills/flight-finder/node_modules/@types/node/sea.d.ts +++ /dev/null @@ -1,162 +0,0 @@ -/** - * This feature allows the distribution of a Node.js application conveniently to a - * system that does not have Node.js installed. - * - * Node.js supports the creation of [single executable applications](https://github.com/nodejs/single-executable) by allowing - * the injection of a blob prepared by Node.js, which can contain a bundled script, - * into the `node` binary. During start up, the program checks if anything has been - * injected. If the blob is found, it executes the script in the blob. Otherwise - * Node.js operates as it normally does. - * - * The single executable application feature currently only supports running a - * single embedded script using the `CommonJS` module system. - * - * Users can create a single executable application from their bundled script - * with the `node` binary itself and any tool which can inject resources into the - * binary. - * - * Here are the steps for creating a single executable application using one such - * tool, [postject](https://github.com/nodejs/postject): - * - * 1. Create a JavaScript file: - * ```bash - * echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js - * ``` - * 2. Create a configuration file building a blob that can be injected into the - * single executable application (see `Generating single executable preparation blobs` for details): - * ```bash - * echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json - * ``` - * 3. Generate the blob to be injected: - * ```bash - * node --experimental-sea-config sea-config.json - * ``` - * 4. Create a copy of the `node` executable and name it according to your needs: - * * On systems other than Windows: - * ```bash - * cp $(command -v node) hello - * ``` - * * On Windows: - * ```text - * node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')" - * ``` - * The `.exe` extension is necessary. - * 5. Remove the signature of the binary (macOS and Windows only): - * * On macOS: - * ```bash - * codesign --remove-signature hello - * ``` - * * On Windows (optional): - * [signtool](https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool) can be used from the installed [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/). - * If this step is - * skipped, ignore any signature-related warning from postject. - * ```powershell - * signtool remove /s hello.exe - * ``` - * 6. Inject the blob into the copied binary by running `postject` with - * the following options: - * * `hello` / `hello.exe` \- The name of the copy of the `node` executable - * created in step 4. - * * `NODE_SEA_BLOB` \- The name of the resource / note / section in the binary - * where the contents of the blob will be stored. - * * `sea-prep.blob` \- The name of the blob created in step 1. - * * `--sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2` \- The [fuse](https://www.electronjs.org/docs/latest/tutorial/fuses) used by the Node.js project to detect if a file has been - * injected. - * * `--macho-segment-name NODE_SEA` (only needed on macOS) - The name of the - * segment in the binary where the contents of the blob will be - * stored. - * To summarize, here is the required command for each platform: - * * On Linux: - * ```bash - * npx postject hello NODE_SEA_BLOB sea-prep.blob \ - * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 - * ``` - * * On Windows - PowerShell: - * ```powershell - * npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ` - * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 - * ``` - * * On Windows - Command Prompt: - * ```text - * npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^ - * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 - * ``` - * * On macOS: - * ```bash - * npx postject hello NODE_SEA_BLOB sea-prep.blob \ - * --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \ - * --macho-segment-name NODE_SEA - * ``` - * 7. Sign the binary (macOS and Windows only): - * * On macOS: - * ```bash - * codesign --sign - hello - * ``` - * * On Windows (optional): - * A certificate needs to be present for this to work. However, the unsigned - * binary would still be runnable. - * ```powershell - * signtool sign /fd SHA256 hello.exe - * ``` - * 8. Run the binary: - * * On systems other than Windows - * ```console - * $ ./hello world - * Hello, world! - * ``` - * * On Windows - * ```console - * $ .\hello.exe world - * Hello, world! - * ``` - * @since v19.7.0, v18.16.0 - * @experimental - * @see [source](https://github.com/nodejs/node/blob/v25.x/src/node_sea.cc) - */ -declare module "node:sea" { - type AssetKey = string; - /** - * @since v20.12.0 - * @return Whether this script is running inside a single-executable application. - */ - function isSea(): boolean; - /** - * This method can be used to retrieve the assets configured to be bundled into the - * single-executable application at build time. - * An error is thrown when no matching asset can be found. - * @since v20.12.0 - */ - function getAsset(key: AssetKey): ArrayBuffer; - function getAsset(key: AssetKey, encoding: string): string; - /** - * Similar to `sea.getAsset()`, but returns the result in a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). - * An error is thrown when no matching asset can be found. - * @since v20.12.0 - */ - function getAssetAsBlob(key: AssetKey, options?: { - type: string; - }): Blob; - /** - * This method can be used to retrieve the assets configured to be bundled into the - * single-executable application at build time. - * An error is thrown when no matching asset can be found. - * - * Unlike `sea.getRawAsset()` or `sea.getAssetAsBlob()`, this method does not - * return a copy. Instead, it returns the raw asset bundled inside the executable. - * - * For now, users should avoid writing to the returned array buffer. If the - * injected section is not marked as writable or not aligned properly, - * writes to the returned array buffer is likely to result in a crash. - * @since v20.12.0 - */ - function getRawAsset(key: AssetKey): ArrayBuffer; - /** - * This method can be used to retrieve an array of all the keys of assets - * embedded into the single-executable application. - * An error is thrown when not running inside a single-executable application. - * @since v24.8.0 - * @returns An array containing all the keys of the assets - * embedded in the executable. If no assets are embedded, returns an empty array. - */ - function getAssetKeys(): string[]; -} diff --git a/skills/flight-finder/node_modules/@types/node/sqlite.d.ts b/skills/flight-finder/node_modules/@types/node/sqlite.d.ts deleted file mode 100644 index 44a9b66..0000000 --- a/skills/flight-finder/node_modules/@types/node/sqlite.d.ts +++ /dev/null @@ -1,1065 +0,0 @@ -/** - * The `node:sqlite` module facilitates working with SQLite databases. - * To access it: - * - * ```js - * import sqlite from 'node:sqlite'; - * ``` - * - * This module is only available under the `node:` scheme. The following will not - * work: - * - * ```js - * import sqlite from 'sqlite'; - * ``` - * - * The following example shows the basic usage of the `node:sqlite` module to open - * an in-memory database, write data to the database, and then read the data back. - * - * ```js - * import { DatabaseSync } from 'node:sqlite'; - * const database = new DatabaseSync(':memory:'); - * - * // Execute SQL statements from strings. - * database.exec(` - * CREATE TABLE data( - * key INTEGER PRIMARY KEY, - * value TEXT - * ) STRICT - * `); - * // Create a prepared statement to insert data into the database. - * const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)'); - * // Execute the prepared statement with bound values. - * insert.run(1, 'hello'); - * insert.run(2, 'world'); - * // Create a prepared statement to read data from the database. - * const query = database.prepare('SELECT * FROM data ORDER BY key'); - * // Execute the prepared statement and log the result set. - * console.log(query.all()); - * // Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ] - * ``` - * @since v22.5.0 - * @experimental - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/sqlite.js) - */ -declare module "node:sqlite" { - import { PathLike } from "node:fs"; - type SQLInputValue = null | number | bigint | string | NodeJS.ArrayBufferView; - type SQLOutputValue = null | number | bigint | string | NodeJS.NonSharedUint8Array; - interface DatabaseSyncOptions { - /** - * If `true`, the database is opened by the constructor. When - * this value is `false`, the database must be opened via the `open()` method. - * @since v22.5.0 - * @default true - */ - open?: boolean | undefined; - /** - * If `true`, foreign key constraints - * are enabled. This is recommended but can be disabled for compatibility with - * legacy database schemas. The enforcement of foreign key constraints can be - * enabled and disabled after opening the database using - * [`PRAGMA foreign_keys`](https://www.sqlite.org/pragma.html#pragma_foreign_keys). - * @since v22.10.0 - * @default true - */ - enableForeignKeyConstraints?: boolean | undefined; - /** - * If `true`, SQLite will accept - * [double-quoted string literals](https://www.sqlite.org/quirks.html#dblquote). - * This is not recommended but can be - * enabled for compatibility with legacy database schemas. - * @since v22.10.0 - * @default false - */ - enableDoubleQuotedStringLiterals?: boolean | undefined; - /** - * If `true`, the database is opened in read-only mode. - * If the database does not exist, opening it will fail. - * @since v22.12.0 - * @default false - */ - readOnly?: boolean | undefined; - /** - * If `true`, the `loadExtension` SQL function - * and the `loadExtension()` method are enabled. - * You can call `enableLoadExtension(false)` later to disable this feature. - * @since v22.13.0 - * @default false - */ - allowExtension?: boolean | undefined; - /** - * The [busy timeout](https://sqlite.org/c3ref/busy_timeout.html) in milliseconds. This is the maximum amount of - * time that SQLite will wait for a database lock to be released before - * returning an error. - * @since v24.0.0 - * @default 0 - */ - timeout?: number | undefined; - /** - * If `true`, integer fields are read as JavaScript `BigInt` values. If `false`, - * integer fields are read as JavaScript numbers. - * @since v24.4.0 - * @default false - */ - readBigInts?: boolean | undefined; - /** - * If `true`, query results are returned as arrays instead of objects. - * @since v24.4.0 - * @default false - */ - returnArrays?: boolean | undefined; - /** - * If `true`, allows binding named parameters without the prefix - * character (e.g., `foo` instead of `:foo`). - * @since v24.4.40 - * @default true - */ - allowBareNamedParameters?: boolean | undefined; - /** - * If `true`, unknown named parameters are ignored when binding. - * If `false`, an exception is thrown for unknown named parameters. - * @since v24.4.40 - * @default false - */ - allowUnknownNamedParameters?: boolean | undefined; - /** - * If `true`, enables the defensive flag. When the defensive flag is enabled, - * language features that allow ordinary SQL to deliberately corrupt the database file are disabled. - * The defensive flag can also be set using `enableDefensive()`. - * @since v25.1.0 - * @default true - */ - defensive?: boolean | undefined; - } - interface CreateSessionOptions { - /** - * A specific table to track changes for. By default, changes to all tables are tracked. - * @since v22.12.0 - */ - table?: string | undefined; - /** - * Name of the database to track. This is useful when multiple databases have been added using - * [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html). - * @since v22.12.0 - * @default 'main' - */ - db?: string | undefined; - } - interface ApplyChangesetOptions { - /** - * Skip changes that, when targeted table name is supplied to this function, return a truthy value. - * By default, all changes are attempted. - * @since v22.12.0 - */ - filter?: ((tableName: string) => boolean) | undefined; - /** - * A function that determines how to handle conflicts. The function receives one argument, - * which can be one of the following values: - * - * * `SQLITE_CHANGESET_DATA`: A `DELETE` or `UPDATE` change does not contain the expected "before" values. - * * `SQLITE_CHANGESET_NOTFOUND`: A row matching the primary key of the `DELETE` or `UPDATE` change does not exist. - * * `SQLITE_CHANGESET_CONFLICT`: An `INSERT` change results in a duplicate primary key. - * * `SQLITE_CHANGESET_FOREIGN_KEY`: Applying a change would result in a foreign key violation. - * * `SQLITE_CHANGESET_CONSTRAINT`: Applying a change results in a `UNIQUE`, `CHECK`, or `NOT NULL` constraint - * violation. - * - * The function should return one of the following values: - * - * * `SQLITE_CHANGESET_OMIT`: Omit conflicting changes. - * * `SQLITE_CHANGESET_REPLACE`: Replace existing values with conflicting changes (only valid with - `SQLITE_CHANGESET_DATA` or `SQLITE_CHANGESET_CONFLICT` conflicts). - * * `SQLITE_CHANGESET_ABORT`: Abort on conflict and roll back the database. - * - * When an error is thrown in the conflict handler or when any other value is returned from the handler, - * applying the changeset is aborted and the database is rolled back. - * - * **Default**: A function that returns `SQLITE_CHANGESET_ABORT`. - * @since v22.12.0 - */ - onConflict?: ((conflictType: number) => number) | undefined; - } - interface FunctionOptions { - /** - * If `true`, the [`SQLITE_DETERMINISTIC`](https://www.sqlite.org/c3ref/c_deterministic.html) flag is - * set on the created function. - * @default false - */ - deterministic?: boolean | undefined; - /** - * If `true`, the [`SQLITE_DIRECTONLY`](https://www.sqlite.org/c3ref/c_directonly.html) flag is set on - * the created function. - * @default false - */ - directOnly?: boolean | undefined; - /** - * If `true`, integer arguments to `function` - * are converted to `BigInt`s. If `false`, integer arguments are passed as - * JavaScript numbers. - * @default false - */ - useBigIntArguments?: boolean | undefined; - /** - * If `true`, `function` may be invoked with any number of - * arguments (between zero and - * [`SQLITE_MAX_FUNCTION_ARG`](https://www.sqlite.org/limits.html#max_function_arg)). If `false`, - * `function` must be invoked with exactly `function.length` arguments. - * @default false - */ - varargs?: boolean | undefined; - } - interface AggregateOptions extends FunctionOptions { - /** - * The identity value for the aggregation function. This value is used when the aggregation - * function is initialized. When a `Function` is passed the identity will be its return value. - */ - start: T | (() => T); - /** - * The function to call for each row in the aggregation. The - * function receives the current state and the row value. The return value of - * this function should be the new state. - */ - step: (accumulator: T, ...args: SQLOutputValue[]) => T; - /** - * The function to call to get the result of the - * aggregation. The function receives the final state and should return the - * result of the aggregation. - */ - result?: ((accumulator: T) => SQLInputValue) | undefined; - /** - * When this function is provided, the `aggregate` method will work as a window function. - * The function receives the current state and the dropped row value. The return value of this function should be the - * new state. - */ - inverse?: ((accumulator: T, ...args: SQLOutputValue[]) => T) | undefined; - } - interface PrepareOptions { - /** - * If `true`, integer fields are read as `BigInt`s. - * @since v25.5.0 - */ - readBigInts?: boolean | undefined; - /** - * If `true`, results are returned as arrays. - * @since v25.5.0 - */ - returnArrays?: boolean | undefined; - /** - * If `true`, allows binding named parameters without the prefix character. - * @since v25.5.0 - */ - allowBareNamedParameters?: boolean | undefined; - /** - * If `true`, unknown named parameters are ignored. - * @since v25.5.0 - */ - allowUnknownNamedParameters?: boolean | undefined; - } - /** - * This class represents a single [connection](https://www.sqlite.org/c3ref/sqlite3.html) to a SQLite database. All APIs - * exposed by this class execute synchronously. - * @since v22.5.0 - */ - class DatabaseSync implements Disposable { - /** - * Constructs a new `DatabaseSync` instance. - * @param path The path of the database. - * A SQLite database can be stored in a file or completely [in memory](https://www.sqlite.org/inmemorydb.html). - * To use a file-backed database, the path should be a file path. - * To use an in-memory database, the path should be the special name `':memory:'`. - * @param options Configuration options for the database connection. - */ - constructor(path: PathLike, options?: DatabaseSyncOptions); - /** - * Registers a new aggregate function with the SQLite database. This method is a wrapper around - * [`sqlite3_create_window_function()`](https://www.sqlite.org/c3ref/create_function.html). - * - * When used as a window function, the `result` function will be called multiple times. - * - * ```js - * import { DatabaseSync } from 'node:sqlite'; - * - * const db = new DatabaseSync(':memory:'); - * db.exec(` - * CREATE TABLE t3(x, y); - * INSERT INTO t3 VALUES ('a', 4), - * ('b', 5), - * ('c', 3), - * ('d', 8), - * ('e', 1); - * `); - * - * db.aggregate('sumint', { - * start: 0, - * step: (acc, value) => acc + value, - * }); - * - * db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 } - * ``` - * @since v24.0.0 - * @param name The name of the SQLite function to create. - * @param options Function configuration settings. - */ - aggregate(name: string, options: AggregateOptions): void; - aggregate(name: string, options: AggregateOptions): void; - /** - * Closes the database connection. An exception is thrown if the database is not - * open. This method is a wrapper around [`sqlite3_close_v2()`](https://www.sqlite.org/c3ref/close.html). - * @since v22.5.0 - */ - close(): void; - /** - * Loads a shared library into the database connection. This method is a wrapper - * around [`sqlite3_load_extension()`](https://www.sqlite.org/c3ref/load_extension.html). It is required to enable the - * `allowExtension` option when constructing the `DatabaseSync` instance. - * @since v22.13.0 - * @param path The path to the shared library to load. - */ - loadExtension(path: string): void; - /** - * Enables or disables the `loadExtension` SQL function, and the `loadExtension()` - * method. When `allowExtension` is `false` when constructing, you cannot enable - * loading extensions for security reasons. - * @since v22.13.0 - * @param allow Whether to allow loading extensions. - */ - enableLoadExtension(allow: boolean): void; - /** - * Enables or disables the defensive flag. When the defensive flag is active, - * language features that allow ordinary SQL to deliberately corrupt the database file are disabled. - * See [`SQLITE_DBCONFIG_DEFENSIVE`](https://www.sqlite.org/c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive) in the SQLite documentation for details. - * @since v25.1.0 - * @param active Whether to set the defensive flag. - */ - enableDefensive(active: boolean): void; - /** - * This method is a wrapper around [`sqlite3_db_filename()`](https://sqlite.org/c3ref/db_filename.html) - * @since v24.0.0 - * @param dbName Name of the database. This can be `'main'` (the default primary database) or any other - * database that has been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) **Default:** `'main'`. - * @returns The location of the database file. When using an in-memory database, - * this method returns null. - */ - location(dbName?: string): string | null; - /** - * This method allows one or more SQL statements to be executed without returning - * any results. This method is useful when executing SQL statements read from a - * file. This method is a wrapper around [`sqlite3_exec()`](https://www.sqlite.org/c3ref/exec.html). - * @since v22.5.0 - * @param sql A SQL string to execute. - */ - exec(sql: string): void; - /** - * This method is used to create SQLite user-defined functions. This method is a - * wrapper around [`sqlite3_create_function_v2()`](https://www.sqlite.org/c3ref/create_function.html). - * @since v22.13.0 - * @param name The name of the SQLite function to create. - * @param options Optional configuration settings for the function. - * @param func The JavaScript function to call when the SQLite - * function is invoked. The return value of this function should be a valid - * SQLite data type: see - * [Type conversion between JavaScript and SQLite](https://nodejs.org/docs/latest-v25.x/api/sqlite.html#type-conversion-between-javascript-and-sqlite). - * The result defaults to `NULL` if the return value is `undefined`. - */ - function( - name: string, - options: FunctionOptions, - func: (...args: SQLOutputValue[]) => SQLInputValue, - ): void; - function(name: string, func: (...args: SQLOutputValue[]) => SQLInputValue): void; - /** - * Sets an authorizer callback that SQLite will invoke whenever it attempts to - * access data or modify the database schema through prepared statements. - * This can be used to implement security policies, audit access, or restrict certain operations. - * This method is a wrapper around [`sqlite3_set_authorizer()`](https://sqlite.org/c3ref/set_authorizer.html). - * - * When invoked, the callback receives five arguments: - * - * * `actionCode` {number} The type of operation being performed (e.g., - * `SQLITE_INSERT`, `SQLITE_UPDATE`, `SQLITE_SELECT`). - * * `arg1` {string|null} The first argument (context-dependent, often a table name). - * * `arg2` {string|null} The second argument (context-dependent, often a column name). - * * `dbName` {string|null} The name of the database. - * * `triggerOrView` {string|null} The name of the trigger or view causing the access. - * - * The callback must return one of the following constants: - * - * * `SQLITE_OK` - Allow the operation. - * * `SQLITE_DENY` - Deny the operation (causes an error). - * * `SQLITE_IGNORE` - Ignore the operation (silently skip). - * - * ```js - * import { DatabaseSync, constants } from 'node:sqlite'; - * const db = new DatabaseSync(':memory:'); - * - * // Set up an authorizer that denies all table creation - * db.setAuthorizer((actionCode) => { - * if (actionCode === constants.SQLITE_CREATE_TABLE) { - * return constants.SQLITE_DENY; - * } - * return constants.SQLITE_OK; - * }); - * - * // This will work - * db.prepare('SELECT 1').get(); - * - * // This will throw an error due to authorization denial - * try { - * db.exec('CREATE TABLE blocked (id INTEGER)'); - * } catch (err) { - * console.log('Operation blocked:', err.message); - * } - * ``` - * @since v24.10.0 - * @param callback The authorizer function to set, or `null` to - * clear the current authorizer. - */ - setAuthorizer( - callback: - | (( - actionCode: number, - arg1: string | null, - arg2: string | null, - dbName: string | null, - triggerOrView: string | null, - ) => number) - | null, - ): void; - /** - * Whether the database is currently open or not. - * @since v22.15.0 - */ - readonly isOpen: boolean; - /** - * Whether the database is currently within a transaction. This method - * is a wrapper around [`sqlite3_get_autocommit()`](https://sqlite.org/c3ref/get_autocommit.html). - * @since v24.0.0 - */ - readonly isTransaction: boolean; - /** - * Opens the database specified in the `path` argument of the `DatabaseSync`constructor. This method should only be used when the database is not opened via - * the constructor. An exception is thrown if the database is already open. - * @since v22.5.0 - */ - open(): void; - /** - * Compiles a SQL statement into a [prepared statement](https://www.sqlite.org/c3ref/stmt.html). This method is a wrapper - * around [`sqlite3_prepare_v2()`](https://www.sqlite.org/c3ref/prepare.html). - * @since v22.5.0 - * @param sql A SQL string to compile to a prepared statement. - * @param options Optional configuration for the prepared statement. - * @return The prepared statement. - */ - prepare(sql: string, options?: PrepareOptions): StatementSync; - /** - * Creates a new {@link SQLTagStore}, which is a Least Recently Used (LRU) cache - * for storing prepared statements. This allows for the efficient reuse of - * prepared statements by tagging them with a unique identifier. - * - * When a tagged SQL literal is executed, the `SQLTagStore` checks if a prepared - * statement for the corresponding SQL query string already exists in the cache. - * If it does, the cached statement is used. If not, a new prepared statement is - * created, executed, and then stored in the cache for future use. This mechanism - * helps to avoid the overhead of repeatedly parsing and preparing the same SQL - * statements. - * - * Tagged statements bind the placeholder values from the template literal as - * parameters to the underlying prepared statement. For example: - * - * ```js - * sqlTagStore.get`SELECT ${value}`; - * ``` - * - * is equivalent to: - * - * ```js - * db.prepare('SELECT ?').get(value); - * ``` - * - * However, in the first example, the tag store will cache the underlying prepared - * statement for future use. - * - * > **Note:** The `${value}` syntax in tagged statements _binds_ a parameter to - * > the prepared statement. This differs from its behavior in _untagged_ template - * > literals, where it performs string interpolation. - * > - * > ```js - * > // This a safe example of binding a parameter to a tagged statement. - * > sqlTagStore.run`INSERT INTO t1 (id) VALUES (${id})`; - * > - * > // This is an *unsafe* example of an untagged template string. - * > // `id` is interpolated into the query text as a string. - * > // This can lead to SQL injection and data corruption. - * > db.run(`INSERT INTO t1 (id) VALUES (${id})`); - * > ``` - * - * The tag store will match a statement from the cache if the query strings - * (including the positions of any bound placeholders) are identical. - * - * ```js - * // The following statements will match in the cache: - * sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`; - * sqlTagStore.get`SELECT * FROM t1 WHERE id = ${12345} AND active = 1`; - * - * // The following statements will not match, as the query strings - * // and bound placeholders differ: - * sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`; - * sqlTagStore.get`SELECT * FROM t1 WHERE id = 12345 AND active = 1`; - * - * // The following statements will not match, as matches are case-sensitive: - * sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`; - * sqlTagStore.get`select * from t1 where id = ${id} and active = 1`; - * ``` - * - * The only way of binding parameters in tagged statements is with the `${value}` - * syntax. Do not add parameter binding placeholders (`?` etc.) to the SQL query - * string itself. - * - * ```js - * import { DatabaseSync } from 'node:sqlite'; - * - * const db = new DatabaseSync(':memory:'); - * const sql = db.createSQLTagStore(); - * - * db.exec('CREATE TABLE users (id INT, name TEXT)'); - * - * // Using the 'run' method to insert data. - * // The tagged literal is used to identify the prepared statement. - * sql.run`INSERT INTO users VALUES (1, 'Alice')`; - * sql.run`INSERT INTO users VALUES (2, 'Bob')`; - * - * // Using the 'get' method to retrieve a single row. - * const name = 'Alice'; - * const user = sql.get`SELECT * FROM users WHERE name = ${name}`; - * console.log(user); // { id: 1, name: 'Alice' } - * - * // Using the 'all' method to retrieve all rows. - * const allUsers = sql.all`SELECT * FROM users ORDER BY id`; - * console.log(allUsers); - * // [ - * // { id: 1, name: 'Alice' }, - * // { id: 2, name: 'Bob' } - * // ] - * ``` - * @since v24.9.0 - * @returns A new SQL tag store for caching prepared statements. - */ - createTagStore(maxSize?: number): SQLTagStore; - /** - * Creates and attaches a session to the database. This method is a wrapper around - * [`sqlite3session_create()`](https://www.sqlite.org/session/sqlite3session_create.html) and - * [`sqlite3session_attach()`](https://www.sqlite.org/session/sqlite3session_attach.html). - * @param options The configuration options for the session. - * @returns A session handle. - * @since v22.12.0 - */ - createSession(options?: CreateSessionOptions): Session; - /** - * An exception is thrown if the database is not - * open. This method is a wrapper around - * [`sqlite3changeset_apply()`](https://www.sqlite.org/session/sqlite3changeset_apply.html). - * - * ```js - * import { DatabaseSync } from 'node:sqlite'; - * - * const sourceDb = new DatabaseSync(':memory:'); - * const targetDb = new DatabaseSync(':memory:'); - * - * sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)'); - * targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)'); - * - * const session = sourceDb.createSession(); - * - * const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)'); - * insert.run(1, 'hello'); - * insert.run(2, 'world'); - * - * const changeset = session.changeset(); - * targetDb.applyChangeset(changeset); - * // Now that the changeset has been applied, targetDb contains the same data as sourceDb. - * ``` - * @param changeset A binary changeset or patchset. - * @param options The configuration options for how the changes will be applied. - * @returns Whether the changeset was applied successfully without being aborted. - * @since v22.12.0 - */ - applyChangeset(changeset: Uint8Array, options?: ApplyChangesetOptions): boolean; - /** - * Closes the database connection. If the database connection is already closed - * then this is a no-op. - * @since v22.15.0 - */ - [Symbol.dispose](): void; - } - /** - * @since v22.12.0 - */ - interface Session { - /** - * Retrieves a changeset containing all changes since the changeset was created. Can be called multiple times. - * An exception is thrown if the database or the session is not open. This method is a wrapper around - * [`sqlite3session_changeset()`](https://www.sqlite.org/session/sqlite3session_changeset.html). - * @returns Binary changeset that can be applied to other databases. - * @since v22.12.0 - */ - changeset(): NodeJS.NonSharedUint8Array; - /** - * Similar to the method above, but generates a more compact patchset. See - * [Changesets and Patchsets](https://www.sqlite.org/sessionintro.html#changesets_and_patchsets) - * in the documentation of SQLite. An exception is thrown if the database or the session is not open. This method is a - * wrapper around - * [`sqlite3session_patchset()`](https://www.sqlite.org/session/sqlite3session_patchset.html). - * @returns Binary patchset that can be applied to other databases. - * @since v22.12.0 - */ - patchset(): NodeJS.NonSharedUint8Array; - /** - * Closes the session. An exception is thrown if the database or the session is not open. This method is a - * wrapper around - * [`sqlite3session_delete()`](https://www.sqlite.org/session/sqlite3session_delete.html). - */ - close(): void; - /** - * Closes the session. If the session is already closed, does nothing. - * @since v24.9.0 - */ - [Symbol.dispose](): void; - } - /** - * This class represents a single LRU (Least Recently Used) cache for storing - * prepared statements. - * - * Instances of this class are created via the `database.createTagStore()` - * method, not by using a constructor. The store caches prepared statements based - * on the provided SQL query string. When the same query is seen again, the store - * retrieves the cached statement and safely applies the new values through - * parameter binding, thereby preventing attacks like SQL injection. - * - * The cache has a maxSize that defaults to 1000 statements, but a custom size can - * be provided (e.g., `database.createTagStore(100)`). All APIs exposed by this - * class execute synchronously. - * @since v24.9.0 - */ - interface SQLTagStore { - /** - * Executes the given SQL query and returns all resulting rows as an array of - * objects. - * - * This function is intended to be used as a template literal tag, not to be - * called directly. - * @since v24.9.0 - * @param stringElements Template literal elements containing the SQL - * query. - * @param boundParameters Parameter values to be bound to placeholders in the template string. - * @returns An array of objects representing the rows returned by the query. - */ - all( - stringElements: TemplateStringsArray, - ...boundParameters: SQLInputValue[] - ): Record[]; - /** - * Executes the given SQL query and returns the first resulting row as an object. - * - * This function is intended to be used as a template literal tag, not to be - * called directly. - * @since v24.9.0 - * @param stringElements Template literal elements containing the SQL - * query. - * @param boundParameters Parameter values to be bound to placeholders in the template string. - * @returns An object representing the first row returned by - * the query, or `undefined` if no rows are returned. - */ - get( - stringElements: TemplateStringsArray, - ...boundParameters: SQLInputValue[] - ): Record | undefined; - /** - * Executes the given SQL query and returns an iterator over the resulting rows. - * - * This function is intended to be used as a template literal tag, not to be - * called directly. - * @since v24.9.0 - * @param stringElements Template literal elements containing the SQL - * query. - * @param boundParameters Parameter values to be bound to placeholders in the template string. - * @returns An iterator that yields objects representing the rows returned by the query. - */ - iterate( - stringElements: TemplateStringsArray, - ...boundParameters: SQLInputValue[] - ): NodeJS.Iterator>; - /** - * Executes the given SQL query, which is expected to not return any rows (e.g., INSERT, UPDATE, DELETE). - * - * This function is intended to be used as a template literal tag, not to be - * called directly. - * @since v24.9.0 - * @param stringElements Template literal elements containing the SQL - * query. - * @param boundParameters Parameter values to be bound to placeholders in the template string. - * @returns An object containing information about the execution, including `changes` and `lastInsertRowid`. - */ - run(stringElements: TemplateStringsArray, ...boundParameters: SQLInputValue[]): StatementResultingChanges; - /** - * A read-only property that returns the number of prepared statements currently in the cache. - * @since v24.9.0 - */ - readonly size: number; - /** - * A read-only property that returns the maximum number of prepared statements the cache can hold. - * @since v24.9.0 - */ - readonly capacity: number; - /** - * A read-only property that returns the `DatabaseSync` object associated with this `SQLTagStore`. - * @since v24.9.0 - */ - readonly db: DatabaseSync; - /** - * Resets the LRU cache, clearing all stored prepared statements. - * @since v24.9.0 - */ - clear(): void; - } - interface StatementColumnMetadata { - /** - * The unaliased name of the column in the origin - * table, or `null` if the column is the result of an expression or subquery. - * This property is the result of [`sqlite3_column_origin_name()`](https://www.sqlite.org/c3ref/column_database_name.html). - */ - column: string | null; - /** - * The unaliased name of the origin database, or - * `null` if the column is the result of an expression or subquery. This - * property is the result of [`sqlite3_column_database_name()`](https://www.sqlite.org/c3ref/column_database_name.html). - */ - database: string | null; - /** - * The name assigned to the column in the result set of a - * `SELECT` statement. This property is the result of - * [`sqlite3_column_name()`](https://www.sqlite.org/c3ref/column_name.html). - */ - name: string; - /** - * The unaliased name of the origin table, or `null` if - * the column is the result of an expression or subquery. This property is the - * result of [`sqlite3_column_table_name()`](https://www.sqlite.org/c3ref/column_database_name.html). - */ - table: string | null; - /** - * The declared data type of the column, or `null` if the - * column is the result of an expression or subquery. This property is the - * result of [`sqlite3_column_decltype()`](https://www.sqlite.org/c3ref/column_decltype.html). - */ - type: string | null; - } - interface StatementResultingChanges { - /** - * The number of rows modified, inserted, or deleted by the most recently completed `INSERT`, `UPDATE`, or `DELETE` statement. - * This field is either a number or a `BigInt` depending on the prepared statement's configuration. - * This property is the result of [`sqlite3_changes64()`](https://www.sqlite.org/c3ref/changes.html). - */ - changes: number | bigint; - /** - * The most recently inserted rowid. - * This field is either a number or a `BigInt` depending on the prepared statement's configuration. - * This property is the result of [`sqlite3_last_insert_rowid()`](https://www.sqlite.org/c3ref/last_insert_rowid.html). - */ - lastInsertRowid: number | bigint; - } - /** - * This class represents a single [prepared statement](https://www.sqlite.org/c3ref/stmt.html). This class cannot be - * instantiated via its constructor. Instead, instances are created via the`database.prepare()` method. All APIs exposed by this class execute - * synchronously. - * - * A prepared statement is an efficient binary representation of the SQL used to - * create it. Prepared statements are parameterizable, and can be invoked multiple - * times with different bound values. Parameters also offer protection against [SQL injection](https://en.wikipedia.org/wiki/SQL_injection) attacks. For these reasons, prepared statements are - * preferred - * over hand-crafted SQL strings when handling user input. - * @since v22.5.0 - */ - class StatementSync { - private constructor(); - /** - * This method executes a prepared statement and returns all results as an array of - * objects. If the prepared statement does not return any results, this method - * returns an empty array. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using - * the values in `namedParameters` and `anonymousParameters`. - * @since v22.5.0 - * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. - * @param anonymousParameters Zero or more values to bind to anonymous parameters. - * @return An array of objects. Each object corresponds to a row returned by executing the prepared statement. The keys and values of each object correspond to the column names and values of - * the row. - */ - all(...anonymousParameters: SQLInputValue[]): Record[]; - all( - namedParameters: Record, - ...anonymousParameters: SQLInputValue[] - ): Record[]; - /** - * This method is used to retrieve information about the columns returned by the - * prepared statement. - * @since v23.11.0 - * @returns An array of objects. Each object corresponds to a column - * in the prepared statement, and contains the following properties: - */ - columns(): StatementColumnMetadata[]; - /** - * The source SQL text of the prepared statement with parameter - * placeholders replaced by the values that were used during the most recent - * execution of this prepared statement. This property is a wrapper around - * [`sqlite3_expanded_sql()`](https://www.sqlite.org/c3ref/expanded_sql.html). - * @since v22.5.0 - */ - readonly expandedSQL: string; - /** - * This method executes a prepared statement and returns the first result as an - * object. If the prepared statement does not return any results, this method - * returns `undefined`. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using the - * values in `namedParameters` and `anonymousParameters`. - * @since v22.5.0 - * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. - * @param anonymousParameters Zero or more values to bind to anonymous parameters. - * @return An object corresponding to the first row returned by executing the prepared statement. The keys and values of the object correspond to the column names and values of the row. If no - * rows were returned from the database then this method returns `undefined`. - */ - get(...anonymousParameters: SQLInputValue[]): Record | undefined; - get( - namedParameters: Record, - ...anonymousParameters: SQLInputValue[] - ): Record | undefined; - /** - * This method executes a prepared statement and returns an iterator of - * objects. If the prepared statement does not return any results, this method - * returns an empty iterator. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using - * the values in `namedParameters` and `anonymousParameters`. - * @since v22.13.0 - * @param namedParameters An optional object used to bind named parameters. - * The keys of this object are used to configure the mapping. - * @param anonymousParameters Zero or more values to bind to anonymous parameters. - * @returns An iterable iterator of objects. Each object corresponds to a row - * returned by executing the prepared statement. The keys and values of each - * object correspond to the column names and values of the row. - */ - iterate(...anonymousParameters: SQLInputValue[]): NodeJS.Iterator>; - iterate( - namedParameters: Record, - ...anonymousParameters: SQLInputValue[] - ): NodeJS.Iterator>; - /** - * This method executes a prepared statement and returns an object summarizing the - * resulting changes. The prepared statement [parameters are bound](https://www.sqlite.org/c3ref/bind_blob.html) using the - * values in `namedParameters` and `anonymousParameters`. - * @since v22.5.0 - * @param namedParameters An optional object used to bind named parameters. The keys of this object are used to configure the mapping. - * @param anonymousParameters Zero or more values to bind to anonymous parameters. - */ - run(...anonymousParameters: SQLInputValue[]): StatementResultingChanges; - run( - namedParameters: Record, - ...anonymousParameters: SQLInputValue[] - ): StatementResultingChanges; - /** - * The names of SQLite parameters begin with a prefix character. By default,`node:sqlite` requires that this prefix character is present when binding - * parameters. However, with the exception of dollar sign character, these - * prefix characters also require extra quoting when used in object keys. - * - * To improve ergonomics, this method can be used to also allow bare named - * parameters, which do not require the prefix character in JavaScript code. There - * are several caveats to be aware of when enabling bare named parameters: - * - * * The prefix character is still required in SQL. - * * The prefix character is still allowed in JavaScript. In fact, prefixed names - * will have slightly better binding performance. - * * Using ambiguous named parameters, such as `$k` and `@k`, in the same prepared - * statement will result in an exception as it cannot be determined how to bind - * a bare name. - * @since v22.5.0 - * @param enabled Enables or disables support for binding named parameters without the prefix character. - */ - setAllowBareNamedParameters(enabled: boolean): void; - /** - * By default, if an unknown name is encountered while binding parameters, an - * exception is thrown. This method allows unknown named parameters to be ignored. - * @since v22.15.0 - * @param enabled Enables or disables support for unknown named parameters. - */ - setAllowUnknownNamedParameters(enabled: boolean): void; - /** - * When enabled, query results returned by the `all()`, `get()`, and `iterate()` methods will be returned as arrays instead - * of objects. - * @since v24.0.0 - * @param enabled Enables or disables the return of query results as arrays. - */ - setReturnArrays(enabled: boolean): void; - /** - * When reading from the database, SQLite `INTEGER`s are mapped to JavaScript - * numbers by default. However, SQLite `INTEGER`s can store values larger than - * JavaScript numbers are capable of representing. In such cases, this method can - * be used to read `INTEGER` data using JavaScript `BigInt`s. This method has no - * impact on database write operations where numbers and `BigInt`s are both - * supported at all times. - * @since v22.5.0 - * @param enabled Enables or disables the use of `BigInt`s when reading `INTEGER` fields from the database. - */ - setReadBigInts(enabled: boolean): void; - /** - * The source SQL text of the prepared statement. This property is a - * wrapper around [`sqlite3_sql()`](https://www.sqlite.org/c3ref/expanded_sql.html). - * @since v22.5.0 - */ - readonly sourceSQL: string; - } - interface BackupOptions { - /** - * Name of the source database. This can be `'main'` (the default primary database) or any other - * database that have been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) - * @default 'main' - */ - source?: string | undefined; - /** - * Name of the target database. This can be `'main'` (the default primary database) or any other - * database that have been added with [`ATTACH DATABASE`](https://www.sqlite.org/lang_attach.html) - * @default 'main' - */ - target?: string | undefined; - /** - * Number of pages to be transmitted in each batch of the backup. - * @default 100 - */ - rate?: number | undefined; - /** - * An optional callback function that will be called after each backup step. The argument passed - * to this callback is an `Object` with `remainingPages` and `totalPages` properties, describing the current progress - * of the backup operation. - */ - progress?: ((progressInfo: BackupProgressInfo) => void) | undefined; - } - interface BackupProgressInfo { - totalPages: number; - remainingPages: number; - } - /** - * This method makes a database backup. This method abstracts the - * [`sqlite3_backup_init()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupinit), - * [`sqlite3_backup_step()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupstep) - * and [`sqlite3_backup_finish()`](https://www.sqlite.org/c3ref/backup_finish.html#sqlite3backupfinish) functions. - * - * The backed-up database can be used normally during the backup process. Mutations coming from the same connection - same - * `DatabaseSync` - object will be reflected in the backup right away. However, mutations from other connections will cause - * the backup process to restart. - * - * ```js - * import { backup, DatabaseSync } from 'node:sqlite'; - * - * const sourceDb = new DatabaseSync('source.db'); - * const totalPagesTransferred = await backup(sourceDb, 'backup.db', { - * rate: 1, // Copy one page at a time. - * progress: ({ totalPages, remainingPages }) => { - * console.log('Backup in progress', { totalPages, remainingPages }); - * }, - * }); - * - * console.log('Backup completed', totalPagesTransferred); - * ``` - * @since v23.8.0 - * @param sourceDb The database to backup. The source database must be open. - * @param path The path where the backup will be created. If the file already exists, - * the contents will be overwritten. - * @param options Optional configuration for the backup. The - * following properties are supported: - * @returns A promise that fulfills with the total number of backed-up pages upon completion, or rejects if an - * error occurs. - */ - function backup(sourceDb: DatabaseSync, path: PathLike, options?: BackupOptions): Promise; - /** - * @since v22.13.0 - */ - namespace constants { - /** - * The conflict handler is invoked with this constant when processing a DELETE or UPDATE change if a row with the required PRIMARY KEY fields is present in the database, but one or more other (non primary-key) fields modified by the update do not contain the expected "before" values. - * @since v22.14.0 - */ - const SQLITE_CHANGESET_DATA: number; - /** - * The conflict handler is invoked with this constant when processing a DELETE or UPDATE change if a row with the required PRIMARY KEY fields is not present in the database. - * @since v22.14.0 - */ - const SQLITE_CHANGESET_NOTFOUND: number; - /** - * This constant is passed to the conflict handler while processing an INSERT change if the operation would result in duplicate primary key values. - * @since v22.14.0 - */ - const SQLITE_CHANGESET_CONFLICT: number; - /** - * If foreign key handling is enabled, and applying a changeset leaves the database in a state containing foreign key violations, the conflict handler is invoked with this constant exactly once before the changeset is committed. If the conflict handler returns `SQLITE_CHANGESET_OMIT`, the changes, including those that caused the foreign key constraint violation, are committed. Or, if it returns `SQLITE_CHANGESET_ABORT`, the changeset is rolled back. - * @since v22.14.0 - */ - const SQLITE_CHANGESET_FOREIGN_KEY: number; - /** - * Conflicting changes are omitted. - * @since v22.12.0 - */ - const SQLITE_CHANGESET_OMIT: number; - /** - * Conflicting changes replace existing values. Note that this value can only be returned when the type of conflict is either `SQLITE_CHANGESET_DATA` or `SQLITE_CHANGESET_CONFLICT`. - * @since v22.12.0 - */ - const SQLITE_CHANGESET_REPLACE: number; - /** - * Abort when a change encounters a conflict and roll back database. - * @since v22.12.0 - */ - const SQLITE_CHANGESET_ABORT: number; - /** - * Deny the operation and cause an error to be returned. - * @since v24.10.0 - */ - const SQLITE_DENY: number; - /** - * Ignore the operation and continue as if it had never been requested. - * @since 24.10.0 - */ - const SQLITE_IGNORE: number; - /** - * Allow the operation to proceed normally. - * @since v24.10.0 - */ - const SQLITE_OK: number; - const SQLITE_CREATE_INDEX: number; - const SQLITE_CREATE_TABLE: number; - const SQLITE_CREATE_TEMP_INDEX: number; - const SQLITE_CREATE_TEMP_TABLE: number; - const SQLITE_CREATE_TEMP_TRIGGER: number; - const SQLITE_CREATE_TEMP_VIEW: number; - const SQLITE_CREATE_TRIGGER: number; - const SQLITE_CREATE_VIEW: number; - const SQLITE_DELETE: number; - const SQLITE_DROP_INDEX: number; - const SQLITE_DROP_TABLE: number; - const SQLITE_DROP_TEMP_INDEX: number; - const SQLITE_DROP_TEMP_TABLE: number; - const SQLITE_DROP_TEMP_TRIGGER: number; - const SQLITE_DROP_TEMP_VIEW: number; - const SQLITE_DROP_TRIGGER: number; - const SQLITE_DROP_VIEW: number; - const SQLITE_INSERT: number; - const SQLITE_PRAGMA: number; - const SQLITE_READ: number; - const SQLITE_SELECT: number; - const SQLITE_TRANSACTION: number; - const SQLITE_UPDATE: number; - const SQLITE_ATTACH: number; - const SQLITE_DETACH: number; - const SQLITE_ALTER_TABLE: number; - const SQLITE_REINDEX: number; - const SQLITE_ANALYZE: number; - const SQLITE_CREATE_VTABLE: number; - const SQLITE_DROP_VTABLE: number; - const SQLITE_FUNCTION: number; - const SQLITE_SAVEPOINT: number; - const SQLITE_COPY: number; - const SQLITE_RECURSIVE: number; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/stream.d.ts b/skills/flight-finder/node_modules/@types/node/stream.d.ts deleted file mode 100644 index 3f046ac..0000000 --- a/skills/flight-finder/node_modules/@types/node/stream.d.ts +++ /dev/null @@ -1,1770 +0,0 @@ -/** - * A stream is an abstract interface for working with streaming data in Node.js. - * The `node:stream` module provides an API for implementing the stream interface. - * - * There are many stream objects provided by Node.js. For instance, a [request to an HTTP server](https://nodejs.org/docs/latest-v25.x/api/http.html#class-httpincomingmessage) - * and [`process.stdout`](https://nodejs.org/docs/latest-v25.x/api/process.html#processstdout) are both stream instances. - * - * Streams can be readable, writable, or both. All streams are instances of [`EventEmitter`](https://nodejs.org/docs/latest-v25.x/api/events.html#class-eventemitter). - * - * To access the `node:stream` module: - * - * ```js - * import stream from 'node:stream'; - * ``` - * - * The `node:stream` module is useful for creating new types of stream instances. - * It is usually not necessary to use the `node:stream` module to consume streams. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/stream.js) - */ -declare module "node:stream" { - import { Blob } from "node:buffer"; - import { Abortable, EventEmitter } from "node:events"; - import * as promises from "node:stream/promises"; - import * as web from "node:stream/web"; - class Stream extends EventEmitter { - /** - * @since v0.9.4 - */ - pipe( - destination: T, - options?: Stream.PipeOptions, - ): T; - } - namespace Stream { - export { promises, Stream }; - } - namespace Stream { - interface PipeOptions { - /** - * End the writer when the reader ends. - * @default true - */ - end?: boolean | undefined; - } - interface StreamOptions extends Abortable { - emitClose?: boolean | undefined; - highWaterMark?: number | undefined; - objectMode?: boolean | undefined; - construct?: ((this: T, callback: (error?: Error | null) => void) => void) | undefined; - destroy?: ((this: T, error: Error | null, callback: (error?: Error | null) => void) => void) | undefined; - autoDestroy?: boolean | undefined; - } - interface ReadableOptions extends StreamOptions { - encoding?: BufferEncoding | undefined; - read?: ((this: T, size: number) => void) | undefined; - } - interface ReadableIteratorOptions { - /** - * When set to `false`, calling `return` on the async iterator, - * or exiting a `for await...of` iteration using a `break`, - * `return`, or `throw` will not destroy the stream. - * @default true - */ - destroyOnReturn?: boolean | undefined; - } - interface ReadableOperatorOptions extends Abortable { - /** - * The maximum concurrent invocations of `fn` to call - * on the stream at once. - * @default 1 - */ - concurrency?: number | undefined; - /** - * How many items to buffer while waiting for user consumption - * of the output. - * @default concurrency * 2 - 1 - */ - highWaterMark?: number | undefined; - } - /** @deprecated Use `ReadableOperatorOptions` instead. */ - interface ArrayOptions extends ReadableOperatorOptions {} - interface ReadableToWebOptions { - strategy?: web.QueuingStrategy | undefined; - type?: web.ReadableStreamType | undefined; - } - interface ReadableEventMap { - "close": []; - "data": [chunk: any]; - "end": []; - "error": [err: Error]; - "pause": []; - "readable": []; - "resume": []; - } - /** - * @since v0.9.4 - */ - class Readable extends Stream implements NodeJS.ReadableStream { - constructor(options?: ReadableOptions); - /** - * A utility method for creating Readable Streams out of iterators. - * @since v12.3.0, v10.17.0 - * @param iterable Object implementing the `Symbol.asyncIterator` or `Symbol.iterator` iterable protocol. Emits an 'error' event if a null value is passed. - * @param options Options provided to `new stream.Readable([options])`. By default, `Readable.from()` will set `options.objectMode` to `true`, unless this is explicitly opted out by setting `options.objectMode` to `false`. - */ - static from(iterable: Iterable | AsyncIterable, options?: ReadableOptions): Readable; - /** - * A utility method for creating a `Readable` from a web `ReadableStream`. - * @since v17.0.0 - */ - static fromWeb( - readableStream: web.ReadableStream, - options?: Pick, - ): Readable; - /** - * A utility method for creating a web `ReadableStream` from a `Readable`. - * @since v17.0.0 - */ - static toWeb( - streamReadable: NodeJS.ReadableStream, - options?: ReadableToWebOptions, - ): web.ReadableStream; - /** - * Returns whether the stream has been read from or cancelled. - * @since v16.8.0 - */ - static isDisturbed(stream: NodeJS.ReadableStream | web.ReadableStream): boolean; - /** - * Returns whether the stream was destroyed or errored before emitting `'end'`. - * @since v16.8.0 - */ - readonly readableAborted: boolean; - /** - * Is `true` if it is safe to call {@link read}, which means - * the stream has not been destroyed or emitted `'error'` or `'end'`. - * @since v11.4.0 - */ - readable: boolean; - /** - * Returns whether `'data'` has been emitted. - * @since v16.7.0, v14.18.0 - */ - readonly readableDidRead: boolean; - /** - * Getter for the property `encoding` of a given `Readable` stream. The `encoding` property can be set using the {@link setEncoding} method. - * @since v12.7.0 - */ - readonly readableEncoding: BufferEncoding | null; - /** - * Becomes `true` when [`'end'`](https://nodejs.org/docs/latest-v25.x/api/stream.html#event-end) event is emitted. - * @since v12.9.0 - */ - readonly readableEnded: boolean; - /** - * This property reflects the current state of a `Readable` stream as described - * in the [Three states](https://nodejs.org/docs/latest-v25.x/api/stream.html#three-states) section. - * @since v9.4.0 - */ - readableFlowing: boolean | null; - /** - * Returns the value of `highWaterMark` passed when creating this `Readable`. - * @since v9.3.0 - */ - readonly readableHighWaterMark: number; - /** - * This property contains the number of bytes (or objects) in the queue - * ready to be read. The value provides introspection data regarding - * the status of the `highWaterMark`. - * @since v9.4.0 - */ - readonly readableLength: number; - /** - * Getter for the property `objectMode` of a given `Readable` stream. - * @since v12.3.0 - */ - readonly readableObjectMode: boolean; - /** - * Is `true` after `readable.destroy()` has been called. - * @since v8.0.0 - */ - destroyed: boolean; - /** - * Is `true` after `'close'` has been emitted. - * @since v18.0.0 - */ - readonly closed: boolean; - /** - * Returns error if the stream has been destroyed with an error. - * @since v18.0.0 - */ - readonly errored: Error | null; - _construct?(callback: (error?: Error | null) => void): void; - _read(size: number): void; - /** - * The `readable.read()` method reads data out of the internal buffer and - * returns it. If no data is available to be read, `null` is returned. By default, - * the data is returned as a `Buffer` object unless an encoding has been - * specified using the `readable.setEncoding()` method or the stream is operating - * in object mode. - * - * The optional `size` argument specifies a specific number of bytes to read. If - * `size` bytes are not available to be read, `null` will be returned _unless_ the - * stream has ended, in which case all of the data remaining in the internal buffer - * will be returned. - * - * If the `size` argument is not specified, all of the data contained in the - * internal buffer will be returned. - * - * The `size` argument must be less than or equal to 1 GiB. - * - * The `readable.read()` method should only be called on `Readable` streams - * operating in paused mode. In flowing mode, `readable.read()` is called - * automatically until the internal buffer is fully drained. - * - * ```js - * const readable = getReadableStreamSomehow(); - * - * // 'readable' may be triggered multiple times as data is buffered in - * readable.on('readable', () => { - * let chunk; - * console.log('Stream is readable (new data received in buffer)'); - * // Use a loop to make sure we read all currently available data - * while (null !== (chunk = readable.read())) { - * console.log(`Read ${chunk.length} bytes of data...`); - * } - * }); - * - * // 'end' will be triggered once when there is no more data available - * readable.on('end', () => { - * console.log('Reached end of stream.'); - * }); - * ``` - * - * Each call to `readable.read()` returns a chunk of data, or `null`. The chunks - * are not concatenated. A `while` loop is necessary to consume all data - * currently in the buffer. When reading a large file `.read()` may return `null`, - * having consumed all buffered content so far, but there is still more data to - * come not yet buffered. In this case a new `'readable'` event will be emitted - * when there is more data in the buffer. Finally the `'end'` event will be - * emitted when there is no more data to come. - * - * Therefore to read a file's whole contents from a `readable`, it is necessary - * to collect chunks across multiple `'readable'` events: - * - * ```js - * const chunks = []; - * - * readable.on('readable', () => { - * let chunk; - * while (null !== (chunk = readable.read())) { - * chunks.push(chunk); - * } - * }); - * - * readable.on('end', () => { - * const content = chunks.join(''); - * }); - * ``` - * - * A `Readable` stream in object mode will always return a single item from - * a call to `readable.read(size)`, regardless of the value of the `size` argument. - * - * If the `readable.read()` method returns a chunk of data, a `'data'` event will - * also be emitted. - * - * Calling {@link read} after the `'end'` event has - * been emitted will return `null`. No runtime error will be raised. - * @since v0.9.4 - * @param size Optional argument to specify how much data to read. - */ - read(size?: number): any; - /** - * The `readable.setEncoding()` method sets the character encoding for - * data read from the `Readable` stream. - * - * By default, no encoding is assigned and stream data will be returned as `Buffer` objects. Setting an encoding causes the stream data - * to be returned as strings of the specified encoding rather than as `Buffer` objects. For instance, calling `readable.setEncoding('utf8')` will cause the - * output data to be interpreted as UTF-8 data, and passed as strings. Calling `readable.setEncoding('hex')` will cause the data to be encoded in hexadecimal - * string format. - * - * The `Readable` stream will properly handle multi-byte characters delivered - * through the stream that would otherwise become improperly decoded if simply - * pulled from the stream as `Buffer` objects. - * - * ```js - * const readable = getReadableStreamSomehow(); - * readable.setEncoding('utf8'); - * readable.on('data', (chunk) => { - * assert.equal(typeof chunk, 'string'); - * console.log('Got %d characters of string data:', chunk.length); - * }); - * ``` - * @since v0.9.4 - * @param encoding The encoding to use. - */ - setEncoding(encoding: BufferEncoding): this; - /** - * The `readable.pause()` method will cause a stream in flowing mode to stop - * emitting `'data'` events, switching out of flowing mode. Any data that - * becomes available will remain in the internal buffer. - * - * ```js - * const readable = getReadableStreamSomehow(); - * readable.on('data', (chunk) => { - * console.log(`Received ${chunk.length} bytes of data.`); - * readable.pause(); - * console.log('There will be no additional data for 1 second.'); - * setTimeout(() => { - * console.log('Now data will start flowing again.'); - * readable.resume(); - * }, 1000); - * }); - * ``` - * - * The `readable.pause()` method has no effect if there is a `'readable'` event listener. - * @since v0.9.4 - */ - pause(): this; - /** - * The `readable.resume()` method causes an explicitly paused `Readable` stream to - * resume emitting `'data'` events, switching the stream into flowing mode. - * - * The `readable.resume()` method can be used to fully consume the data from a - * stream without actually processing any of that data: - * - * ```js - * getReadableStreamSomehow() - * .resume() - * .on('end', () => { - * console.log('Reached the end, but did not read anything.'); - * }); - * ``` - * - * The `readable.resume()` method has no effect if there is a `'readable'` event listener. - * @since v0.9.4 - */ - resume(): this; - /** - * The `readable.isPaused()` method returns the current operating state of the `Readable`. - * This is used primarily by the mechanism that underlies the `readable.pipe()` method. - * In most typical cases, there will be no reason to use this method directly. - * - * ```js - * const readable = new stream.Readable(); - * - * readable.isPaused(); // === false - * readable.pause(); - * readable.isPaused(); // === true - * readable.resume(); - * readable.isPaused(); // === false - * ``` - * @since v0.11.14 - */ - isPaused(): boolean; - /** - * The `readable.unpipe()` method detaches a `Writable` stream previously attached - * using the {@link pipe} method. - * - * If the `destination` is not specified, then _all_ pipes are detached. - * - * If the `destination` is specified, but no pipe is set up for it, then - * the method does nothing. - * - * ```js - * import fs from 'node:fs'; - * const readable = getReadableStreamSomehow(); - * const writable = fs.createWriteStream('file.txt'); - * // All the data from readable goes into 'file.txt', - * // but only for the first second. - * readable.pipe(writable); - * setTimeout(() => { - * console.log('Stop writing to file.txt.'); - * readable.unpipe(writable); - * console.log('Manually close the file stream.'); - * writable.end(); - * }, 1000); - * ``` - * @since v0.9.4 - * @param destination Optional specific stream to unpipe - */ - unpipe(destination?: NodeJS.WritableStream): this; - /** - * Passing `chunk` as `null` signals the end of the stream (EOF) and behaves the - * same as `readable.push(null)`, after which no more data can be written. The EOF - * signal is put at the end of the buffer and any buffered data will still be - * flushed. - * - * The `readable.unshift()` method pushes a chunk of data back into the internal - * buffer. This is useful in certain situations where a stream is being consumed by - * code that needs to "un-consume" some amount of data that it has optimistically - * pulled out of the source, so that the data can be passed on to some other party. - * - * The `stream.unshift(chunk)` method cannot be called after the `'end'` event - * has been emitted or a runtime error will be thrown. - * - * Developers using `stream.unshift()` often should consider switching to - * use of a `Transform` stream instead. See the `API for stream implementers` section for more information. - * - * ```js - * // Pull off a header delimited by \n\n. - * // Use unshift() if we get too much. - * // Call the callback with (error, header, stream). - * import { StringDecoder } from 'node:string_decoder'; - * function parseHeader(stream, callback) { - * stream.on('error', callback); - * stream.on('readable', onReadable); - * const decoder = new StringDecoder('utf8'); - * let header = ''; - * function onReadable() { - * let chunk; - * while (null !== (chunk = stream.read())) { - * const str = decoder.write(chunk); - * if (str.includes('\n\n')) { - * // Found the header boundary. - * const split = str.split(/\n\n/); - * header += split.shift(); - * const remaining = split.join('\n\n'); - * const buf = Buffer.from(remaining, 'utf8'); - * stream.removeListener('error', callback); - * // Remove the 'readable' listener before unshifting. - * stream.removeListener('readable', onReadable); - * if (buf.length) - * stream.unshift(buf); - * // Now the body of the message can be read from the stream. - * callback(null, header, stream); - * return; - * } - * // Still reading the header. - * header += str; - * } - * } - * } - * ``` - * - * Unlike {@link push}, `stream.unshift(chunk)` will not - * end the reading process by resetting the internal reading state of the stream. - * This can cause unexpected results if `readable.unshift()` is called during a - * read (i.e. from within a {@link _read} implementation on a - * custom stream). Following the call to `readable.unshift()` with an immediate {@link push} will reset the reading state appropriately, - * however it is best to simply avoid calling `readable.unshift()` while in the - * process of performing a read. - * @since v0.9.11 - * @param chunk Chunk of data to unshift onto the read queue. For streams not operating in object mode, `chunk` must - * be a {string}, {Buffer}, {TypedArray}, {DataView} or `null`. For object mode streams, `chunk` may be any JavaScript value. - * @param encoding Encoding of string chunks. Must be a valid `Buffer` encoding, such as `'utf8'` or `'ascii'`. - */ - unshift(chunk: any, encoding?: BufferEncoding): void; - /** - * Prior to Node.js 0.10, streams did not implement the entire `node:stream` module API as it is currently defined. (See `Compatibility` for more - * information.) - * - * When using an older Node.js library that emits `'data'` events and has a {@link pause} method that is advisory only, the `readable.wrap()` method can be used to create a `Readable` - * stream that uses - * the old stream as its data source. - * - * It will rarely be necessary to use `readable.wrap()` but the method has been - * provided as a convenience for interacting with older Node.js applications and - * libraries. - * - * ```js - * import { OldReader } from './old-api-module.js'; - * import { Readable } from 'node:stream'; - * const oreader = new OldReader(); - * const myReader = new Readable().wrap(oreader); - * - * myReader.on('readable', () => { - * myReader.read(); // etc. - * }); - * ``` - * @since v0.9.4 - * @param stream An "old style" readable stream - */ - wrap(stream: NodeJS.ReadableStream): this; - push(chunk: any, encoding?: BufferEncoding): boolean; - /** - * ```js - * import { Readable } from 'node:stream'; - * - * async function* splitToWords(source) { - * for await (const chunk of source) { - * const words = String(chunk).split(' '); - * - * for (const word of words) { - * yield word; - * } - * } - * } - * - * const wordsStream = Readable.from(['text passed through', 'composed stream']).compose(splitToWords); - * const words = await wordsStream.toArray(); - * - * console.log(words); // prints ['text', 'passed', 'through', 'composed', 'stream'] - * ``` - * - * `readable.compose(s)` is equivalent to `stream.compose(readable, s)`. - * - * This method also allows for an `AbortSignal` to be provided, which will destroy - * the composed stream when aborted. - * - * See [`stream.compose(...streams)`](https://nodejs.org/docs/latest-v25.x/api/stream.html#streamcomposestreams) for more information. - * @since v19.1.0, v18.13.0 - * @returns a stream composed with the stream `stream`. - */ - compose( - stream: NodeJS.WritableStream | web.WritableStream | web.TransformStream | ((source: any) => void), - options?: Abortable, - ): Duplex; - /** - * The iterator created by this method gives users the option to cancel the destruction - * of the stream if the `for await...of` loop is exited by `return`, `break`, or `throw`, - * or if the iterator should destroy the stream if the stream emitted an error during iteration. - * @since v16.3.0 - */ - iterator(options?: ReadableIteratorOptions): NodeJS.AsyncIterator; - /** - * This method allows mapping over the stream. The *fn* function will be called for every chunk in the stream. - * If the *fn* function returns a promise - that promise will be `await`ed before being passed to the result stream. - * @since v17.4.0, v16.14.0 - * @param fn a function to map over every chunk in the stream. Async or not. - * @returns a stream mapped with the function *fn*. - */ - map(fn: (data: any, options?: Abortable) => any, options?: ReadableOperatorOptions): Readable; - /** - * This method allows filtering the stream. For each chunk in the stream the *fn* function will be called - * and if it returns a truthy value, the chunk will be passed to the result stream. - * If the *fn* function returns a promise - that promise will be `await`ed. - * @since v17.4.0, v16.14.0 - * @param fn a function to filter chunks from the stream. Async or not. - * @returns a stream filtered with the predicate *fn*. - */ - filter( - fn: (data: any, options?: Abortable) => boolean | Promise, - options?: ReadableOperatorOptions, - ): Readable; - /** - * This method allows iterating a stream. For each chunk in the stream the *fn* function will be called. - * If the *fn* function returns a promise - that promise will be `await`ed. - * - * This method is different from `for await...of` loops in that it can optionally process chunks concurrently. - * In addition, a `forEach` iteration can only be stopped by having passed a `signal` option - * and aborting the related AbortController while `for await...of` can be stopped with `break` or `return`. - * In either case the stream will be destroyed. - * - * This method is different from listening to the `'data'` event in that it uses the `readable` event - * in the underlying machinary and can limit the number of concurrent *fn* calls. - * @since v17.5.0 - * @param fn a function to call on each chunk of the stream. Async or not. - * @returns a promise for when the stream has finished. - */ - forEach( - fn: (data: any, options?: Abortable) => void | Promise, - options?: Pick, - ): Promise; - /** - * This method allows easily obtaining the contents of a stream. - * - * As this method reads the entire stream into memory, it negates the benefits of streams. It's intended - * for interoperability and convenience, not as the primary way to consume streams. - * @since v17.5.0 - * @returns a promise containing an array with the contents of the stream. - */ - toArray(options?: Abortable): Promise; - /** - * This method is similar to `Array.prototype.some` and calls *fn* on each chunk in the stream - * until the awaited return value is `true` (or any truthy value). Once an *fn* call on a chunk - * `await`ed return value is truthy, the stream is destroyed and the promise is fulfilled with `true`. - * If none of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `false`. - * @since v17.5.0 - * @param fn a function to call on each chunk of the stream. Async or not. - * @returns a promise evaluating to `true` if *fn* returned a truthy value for at least one of the chunks. - */ - some( - fn: (data: any, options?: Abortable) => boolean | Promise, - options?: Pick, - ): Promise; - /** - * This method is similar to `Array.prototype.find` and calls *fn* on each chunk in the stream - * to find a chunk with a truthy value for *fn*. Once an *fn* call's awaited return value is truthy, - * the stream is destroyed and the promise is fulfilled with value for which *fn* returned a truthy value. - * If all of the *fn* calls on the chunks return a falsy value, the promise is fulfilled with `undefined`. - * @since v17.5.0 - * @param fn a function to call on each chunk of the stream. Async or not. - * @returns a promise evaluating to the first chunk for which *fn* evaluated with a truthy value, - * or `undefined` if no element was found. - */ - find( - fn: (data: any, options?: Abortable) => data is T, - options?: Pick, - ): Promise; - find( - fn: (data: any, options?: Abortable) => boolean | Promise, - options?: Pick, - ): Promise; - /** - * This method is similar to `Array.prototype.every` and calls *fn* on each chunk in the stream - * to check if all awaited return values are truthy value for *fn*. Once an *fn* call on a chunk - * `await`ed return value is falsy, the stream is destroyed and the promise is fulfilled with `false`. - * If all of the *fn* calls on the chunks return a truthy value, the promise is fulfilled with `true`. - * @since v17.5.0 - * @param fn a function to call on each chunk of the stream. Async or not. - * @returns a promise evaluating to `true` if *fn* returned a truthy value for every one of the chunks. - */ - every( - fn: (data: any, options?: Abortable) => boolean | Promise, - options?: Pick, - ): Promise; - /** - * This method returns a new stream by applying the given callback to each chunk of the stream - * and then flattening the result. - * - * It is possible to return a stream or another iterable or async iterable from *fn* and the result streams - * will be merged (flattened) into the returned stream. - * @since v17.5.0 - * @param fn a function to map over every chunk in the stream. May be async. May be a stream or generator. - * @returns a stream flat-mapped with the function *fn*. - */ - flatMap( - fn: (data: any, options?: Abortable) => any, - options?: Pick, - ): Readable; - /** - * This method returns a new stream with the first *limit* chunks dropped from the start. - * @since v17.5.0 - * @param limit the number of chunks to drop from the readable. - * @returns a stream with *limit* chunks dropped from the start. - */ - drop(limit: number, options?: Abortable): Readable; - /** - * This method returns a new stream with the first *limit* chunks. - * @since v17.5.0 - * @param limit the number of chunks to take from the readable. - * @returns a stream with *limit* chunks taken. - */ - take(limit: number, options?: Abortable): Readable; - /** - * This method calls *fn* on each chunk of the stream in order, passing it the result from the calculation - * on the previous element. It returns a promise for the final value of the reduction. - * - * If no *initial* value is supplied the first chunk of the stream is used as the initial value. - * If the stream is empty, the promise is rejected with a `TypeError` with the `ERR_INVALID_ARGS` code property. - * - * The reducer function iterates the stream element-by-element which means that there is no *concurrency* parameter - * or parallelism. To perform a reduce concurrently, you can extract the async function to `readable.map` method. - * @since v17.5.0 - * @param fn a reducer function to call over every chunk in the stream. Async or not. - * @param initial the initial value to use in the reduction. - * @returns a promise for the final value of the reduction. - */ - reduce(fn: (previous: any, data: any, options?: Abortable) => T): Promise; - reduce( - fn: (previous: T, data: any, options?: Abortable) => T, - initial: T, - options?: Abortable, - ): Promise; - _destroy(error: Error | null, callback: (error?: Error | null) => void): void; - /** - * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'` event (unless `emitClose` is set to `false`). After this call, the readable - * stream will release any internal resources and subsequent calls to `push()` will be ignored. - * - * Once `destroy()` has been called any further calls will be a no-op and no - * further errors except from `_destroy()` may be emitted as `'error'`. - * - * Implementors should not override this method, but instead implement `readable._destroy()`. - * @since v8.0.0 - * @param error Error which will be passed as payload in `'error'` event - */ - destroy(error?: Error): this; - /** - * @returns `AsyncIterator` to fully consume the stream. - * @since v10.0.0 - */ - [Symbol.asyncIterator](): NodeJS.AsyncIterator; - /** - * Calls `readable.destroy()` with an `AbortError` and returns - * a promise that fulfills when the stream is finished. - * @since v20.4.0 - */ - [Symbol.asyncDispose](): Promise; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: ReadableEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ReadableEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ReadableEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: ReadableEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: ReadableEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: ReadableEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: ReadableEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ReadableEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ReadableEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: ReadableEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ReadableEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface WritableOptions extends StreamOptions { - decodeStrings?: boolean | undefined; - defaultEncoding?: BufferEncoding | undefined; - write?: - | (( - this: T, - chunk: any, - encoding: BufferEncoding, - callback: (error?: Error | null) => void, - ) => void) - | undefined; - writev?: - | (( - this: T, - chunks: { - chunk: any; - encoding: BufferEncoding; - }[], - callback: (error?: Error | null) => void, - ) => void) - | undefined; - final?: ((this: T, callback: (error?: Error | null) => void) => void) | undefined; - } - interface WritableEventMap { - "close": []; - "drain": []; - "error": [err: Error]; - "finish": []; - "pipe": [src: Readable]; - "unpipe": [src: Readable]; - } - /** - * @since v0.9.4 - */ - class Writable extends Stream implements NodeJS.WritableStream { - constructor(options?: WritableOptions); - /** - * A utility method for creating a `Writable` from a web `WritableStream`. - * @since v17.0.0 - */ - static fromWeb( - writableStream: web.WritableStream, - options?: Pick, - ): Writable; - /** - * A utility method for creating a web `WritableStream` from a `Writable`. - * @since v17.0.0 - */ - static toWeb(streamWritable: NodeJS.WritableStream): web.WritableStream; - /** - * Is `true` if it is safe to call `writable.write()`, which means - * the stream has not been destroyed, errored, or ended. - * @since v11.4.0 - */ - writable: boolean; - /** - * Returns whether the stream was destroyed or errored before emitting `'finish'`. - * @since v18.0.0, v16.17.0 - */ - readonly writableAborted: boolean; - /** - * Is `true` after `writable.end()` has been called. This property - * does not indicate whether the data has been flushed, for this use `writable.writableFinished` instead. - * @since v12.9.0 - */ - readonly writableEnded: boolean; - /** - * Is set to `true` immediately before the `'finish'` event is emitted. - * @since v12.6.0 - */ - readonly writableFinished: boolean; - /** - * Return the value of `highWaterMark` passed when creating this `Writable`. - * @since v9.3.0 - */ - readonly writableHighWaterMark: number; - /** - * This property contains the number of bytes (or objects) in the queue - * ready to be written. The value provides introspection data regarding - * the status of the `highWaterMark`. - * @since v9.4.0 - */ - readonly writableLength: number; - /** - * Getter for the property `objectMode` of a given `Writable` stream. - * @since v12.3.0 - */ - readonly writableObjectMode: boolean; - /** - * Number of times `writable.uncork()` needs to be - * called in order to fully uncork the stream. - * @since v13.2.0, v12.16.0 - */ - readonly writableCorked: number; - /** - * Is `true` after `writable.destroy()` has been called. - * @since v8.0.0 - */ - destroyed: boolean; - /** - * Is `true` after `'close'` has been emitted. - * @since v18.0.0 - */ - readonly closed: boolean; - /** - * Returns error if the stream has been destroyed with an error. - * @since v18.0.0 - */ - readonly errored: Error | null; - /** - * Is `true` if the stream's buffer has been full and stream will emit `'drain'`. - * @since v15.2.0, v14.17.0 - */ - readonly writableNeedDrain: boolean; - _write(chunk: any, encoding: BufferEncoding, callback: (error?: Error | null) => void): void; - _writev?( - chunks: { - chunk: any; - encoding: BufferEncoding; - }[], - callback: (error?: Error | null) => void, - ): void; - _construct?(callback: (error?: Error | null) => void): void; - _destroy(error: Error | null, callback: (error?: Error | null) => void): void; - _final(callback: (error?: Error | null) => void): void; - /** - * The `writable.write()` method writes some data to the stream, and calls the - * supplied `callback` once the data has been fully handled. If an error - * occurs, the `callback` will be called with the error as its - * first argument. The `callback` is called asynchronously and before `'error'` is - * emitted. - * - * The return value is `true` if the internal buffer is less than the `highWaterMark` configured when the stream was created after admitting `chunk`. - * If `false` is returned, further attempts to write data to the stream should - * stop until the `'drain'` event is emitted. - * - * While a stream is not draining, calls to `write()` will buffer `chunk`, and - * return false. Once all currently buffered chunks are drained (accepted for - * delivery by the operating system), the `'drain'` event will be emitted. - * Once `write()` returns false, do not write more chunks - * until the `'drain'` event is emitted. While calling `write()` on a stream that - * is not draining is allowed, Node.js will buffer all written chunks until - * maximum memory usage occurs, at which point it will abort unconditionally. - * Even before it aborts, high memory usage will cause poor garbage collector - * performance and high RSS (which is not typically released back to the system, - * even after the memory is no longer required). Since TCP sockets may never - * drain if the remote peer does not read the data, writing a socket that is - * not draining may lead to a remotely exploitable vulnerability. - * - * Writing data while the stream is not draining is particularly - * problematic for a `Transform`, because the `Transform` streams are paused - * by default until they are piped or a `'data'` or `'readable'` event handler - * is added. - * - * If the data to be written can be generated or fetched on demand, it is - * recommended to encapsulate the logic into a `Readable` and use {@link pipe}. However, if calling `write()` is preferred, it is - * possible to respect backpressure and avoid memory issues using the `'drain'` event: - * - * ```js - * function write(data, cb) { - * if (!stream.write(data)) { - * stream.once('drain', cb); - * } else { - * process.nextTick(cb); - * } - * } - * - * // Wait for cb to be called before doing any other write. - * write('hello', () => { - * console.log('Write completed, do more writes now.'); - * }); - * ``` - * - * A `Writable` stream in object mode will always ignore the `encoding` argument. - * @since v0.9.4 - * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a {string}, {Buffer}, - * {TypedArray} or {DataView}. For object mode streams, `chunk` may be any JavaScript value other than `null`. - * @param [encoding='utf8'] The encoding, if `chunk` is a string. - * @param callback Callback for when this chunk of data is flushed. - * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - write(chunk: any, callback?: (error: Error | null | undefined) => void): boolean; - write(chunk: any, encoding: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean; - /** - * The `writable.setDefaultEncoding()` method sets the default `encoding` for a `Writable` stream. - * @since v0.11.15 - * @param encoding The new default encoding - */ - setDefaultEncoding(encoding: BufferEncoding): this; - /** - * Calling the `writable.end()` method signals that no more data will be written - * to the `Writable`. The optional `chunk` and `encoding` arguments allow one - * final additional chunk of data to be written immediately before closing the - * stream. - * - * Calling the {@link write} method after calling {@link end} will raise an error. - * - * ```js - * // Write 'hello, ' and then end with 'world!'. - * import fs from 'node:fs'; - * const file = fs.createWriteStream('example.txt'); - * file.write('hello, '); - * file.end('world!'); - * // Writing more now is not allowed! - * ``` - * @since v0.9.4 - * @param chunk Optional data to write. For streams not operating in object mode, `chunk` must be a {string}, {Buffer}, - * {TypedArray} or {DataView}. For object mode streams, `chunk` may be any JavaScript value other than `null`. - * @param encoding The encoding if `chunk` is a string - * @param callback Callback for when the stream is finished. - */ - end(cb?: () => void): this; - end(chunk: any, cb?: () => void): this; - end(chunk: any, encoding: BufferEncoding, cb?: () => void): this; - /** - * The `writable.cork()` method forces all written data to be buffered in memory. - * The buffered data will be flushed when either the {@link uncork} or {@link end} methods are called. - * - * The primary intent of `writable.cork()` is to accommodate a situation in which - * several small chunks are written to the stream in rapid succession. Instead of - * immediately forwarding them to the underlying destination, `writable.cork()` buffers all the chunks until `writable.uncork()` is called, which will pass them - * all to `writable._writev()`, if present. This prevents a head-of-line blocking - * situation where data is being buffered while waiting for the first small chunk - * to be processed. However, use of `writable.cork()` without implementing `writable._writev()` may have an adverse effect on throughput. - * - * See also: `writable.uncork()`, `writable._writev()`. - * @since v0.11.2 - */ - cork(): void; - /** - * The `writable.uncork()` method flushes all data buffered since {@link cork} was called. - * - * When using `writable.cork()` and `writable.uncork()` to manage the buffering - * of writes to a stream, defer calls to `writable.uncork()` using `process.nextTick()`. Doing so allows batching of all `writable.write()` calls that occur within a given Node.js event - * loop phase. - * - * ```js - * stream.cork(); - * stream.write('some '); - * stream.write('data '); - * process.nextTick(() => stream.uncork()); - * ``` - * - * If the `writable.cork()` method is called multiple times on a stream, the - * same number of calls to `writable.uncork()` must be called to flush the buffered - * data. - * - * ```js - * stream.cork(); - * stream.write('some '); - * stream.cork(); - * stream.write('data '); - * process.nextTick(() => { - * stream.uncork(); - * // The data will not be flushed until uncork() is called a second time. - * stream.uncork(); - * }); - * ``` - * - * See also: `writable.cork()`. - * @since v0.11.2 - */ - uncork(): void; - /** - * Destroy the stream. Optionally emit an `'error'` event, and emit a `'close'` event (unless `emitClose` is set to `false`). After this call, the writable - * stream has ended and subsequent calls to `write()` or `end()` will result in - * an `ERR_STREAM_DESTROYED` error. - * This is a destructive and immediate way to destroy a stream. Previous calls to `write()` may not have drained, and may trigger an `ERR_STREAM_DESTROYED` error. - * Use `end()` instead of destroy if data should flush before close, or wait for - * the `'drain'` event before destroying the stream. - * - * Once `destroy()` has been called any further calls will be a no-op and no - * further errors except from `_destroy()` may be emitted as `'error'`. - * - * Implementors should not override this method, - * but instead implement `writable._destroy()`. - * @since v8.0.0 - * @param error Optional, an error to emit with `'error'` event. - */ - destroy(error?: Error): this; - /** - * Calls `writable.destroy()` with an `AbortError` and returns - * a promise that fulfills when the stream is finished. - * @since v22.4.0, v20.16.0 - */ - [Symbol.asyncDispose](): Promise; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: WritableEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: WritableEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: WritableEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: WritableEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: WritableEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: WritableEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: WritableEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: WritableEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: WritableEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: WritableEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: WritableEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface DuplexOptions extends ReadableOptions, WritableOptions { - allowHalfOpen?: boolean | undefined; - readableObjectMode?: boolean | undefined; - writableObjectMode?: boolean | undefined; - readableHighWaterMark?: number | undefined; - writableHighWaterMark?: number | undefined; - writableCorked?: number | undefined; - } - interface DuplexToWebOptions { - type?: web.ReadableStreamType | undefined; - } - interface DuplexEventMap extends ReadableEventMap, WritableEventMap {} - /** - * Duplex streams are streams that implement both the `Readable` and `Writable` interfaces. - * - * Examples of `Duplex` streams include: - * - * * `TCP sockets` - * * `zlib streams` - * * `crypto streams` - * @since v0.9.4 - */ - class Duplex extends Stream implements NodeJS.ReadWriteStream { - constructor(options?: DuplexOptions); - /** - * A utility method for creating duplex streams. - * - * - `Stream` converts writable stream into writable `Duplex` and readable stream - * to `Duplex`. - * - `Blob` converts into readable `Duplex`. - * - `string` converts into readable `Duplex`. - * - `ArrayBuffer` converts into readable `Duplex`. - * - `AsyncIterable` converts into a readable `Duplex`. Cannot yield `null`. - * - `AsyncGeneratorFunction` converts into a readable/writable transform - * `Duplex`. Must take a source `AsyncIterable` as first parameter. Cannot yield - * `null`. - * - `AsyncFunction` converts into a writable `Duplex`. Must return - * either `null` or `undefined` - * - `Object ({ writable, readable })` converts `readable` and - * `writable` into `Stream` and then combines them into `Duplex` where the - * `Duplex` will write to the `writable` and read from the `readable`. - * - `Promise` converts into readable `Duplex`. Value `null` is ignored. - * - * @since v16.8.0 - */ - static from( - src: - | NodeJS.ReadableStream - | NodeJS.WritableStream - | Blob - | string - | Iterable - | AsyncIterable - | ((source: AsyncIterable) => AsyncIterable) - | ((source: AsyncIterable) => Promise) - | Promise - | web.ReadableWritablePair - | web.ReadableStream - | web.WritableStream, - ): Duplex; - /** - * A utility method for creating a web `ReadableStream` and `WritableStream` from a `Duplex`. - * @since v17.0.0 - */ - static toWeb(streamDuplex: NodeJS.ReadWriteStream, options?: DuplexToWebOptions): web.ReadableWritablePair; - /** - * A utility method for creating a `Duplex` from a web `ReadableStream` and `WritableStream`. - * @since v17.0.0 - */ - static fromWeb( - duplexStream: web.ReadableWritablePair, - options?: Pick< - DuplexOptions, - "allowHalfOpen" | "decodeStrings" | "encoding" | "highWaterMark" | "objectMode" | "signal" - >, - ): Duplex; - /** - * If `false` then the stream will automatically end the writable side when the - * readable side ends. Set initially by the `allowHalfOpen` constructor option, - * which defaults to `true`. - * - * This can be changed manually to change the half-open behavior of an existing - * `Duplex` stream instance, but must be changed before the `'end'` event is emitted. - * @since v0.9.4 - */ - allowHalfOpen: boolean; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: DuplexEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: DuplexEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: DuplexEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: DuplexEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: DuplexEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: DuplexEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once(eventName: E, listener: (...args: DuplexEventMap[E]) => void): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: DuplexEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: DuplexEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: DuplexEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: DuplexEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface Duplex extends Readable, Writable {} - /** - * The utility function `duplexPair` returns an Array with two items, - * each being a `Duplex` stream connected to the other side: - * - * ```js - * const [ sideA, sideB ] = duplexPair(); - * ``` - * - * Whatever is written to one stream is made readable on the other. It provides - * behavior analogous to a network connection, where the data written by the client - * becomes readable by the server, and vice-versa. - * - * The Duplex streams are symmetrical; one or the other may be used without any - * difference in behavior. - * @param options A value to pass to both {@link Duplex} constructors, - * to set options such as buffering. - * @since v22.6.0 - */ - function duplexPair(options?: DuplexOptions): [Duplex, Duplex]; - type TransformCallback = (error?: Error | null, data?: any) => void; - interface TransformOptions extends DuplexOptions { - transform?: - | ((this: T, chunk: any, encoding: BufferEncoding, callback: TransformCallback) => void) - | undefined; - flush?: ((this: T, callback: TransformCallback) => void) | undefined; - } - /** - * Transform streams are `Duplex` streams where the output is in some way - * related to the input. Like all `Duplex` streams, `Transform` streams - * implement both the `Readable` and `Writable` interfaces. - * - * Examples of `Transform` streams include: - * - * * `zlib streams` - * * `crypto streams` - * @since v0.9.4 - */ - class Transform extends Duplex { - constructor(options?: TransformOptions); - _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void; - _flush(callback: TransformCallback): void; - } - /** - * The `stream.PassThrough` class is a trivial implementation of a `Transform` stream that simply passes the input bytes across to the output. Its purpose is - * primarily for examples and testing, but there are some use cases where `stream.PassThrough` is useful as a building block for novel sorts of streams. - */ - class PassThrough extends Transform {} - /** - * A stream to attach a signal to. - * - * Attaches an AbortSignal to a readable or writeable stream. This lets code - * control stream destruction using an `AbortController`. - * - * Calling `abort` on the `AbortController` corresponding to the passed `AbortSignal` will behave the same way as calling `.destroy(new AbortError())` on the - * stream, and `controller.error(new AbortError())` for webstreams. - * - * ```js - * import fs from 'node:fs'; - * - * const controller = new AbortController(); - * const read = addAbortSignal( - * controller.signal, - * fs.createReadStream(('object.json')), - * ); - * // Later, abort the operation closing the stream - * controller.abort(); - * ``` - * - * Or using an `AbortSignal` with a readable stream as an async iterable: - * - * ```js - * const controller = new AbortController(); - * setTimeout(() => controller.abort(), 10_000); // set a timeout - * const stream = addAbortSignal( - * controller.signal, - * fs.createReadStream(('object.json')), - * ); - * (async () => { - * try { - * for await (const chunk of stream) { - * await process(chunk); - * } - * } catch (e) { - * if (e.name === 'AbortError') { - * // The operation was cancelled - * } else { - * throw e; - * } - * } - * })(); - * ``` - * - * Or using an `AbortSignal` with a ReadableStream: - * - * ```js - * const controller = new AbortController(); - * const rs = new ReadableStream({ - * start(controller) { - * controller.enqueue('hello'); - * controller.enqueue('world'); - * controller.close(); - * }, - * }); - * - * addAbortSignal(controller.signal, rs); - * - * finished(rs, (err) => { - * if (err) { - * if (err.name === 'AbortError') { - * // The operation was cancelled - * } - * } - * }); - * - * const reader = rs.getReader(); - * - * reader.read().then(({ value, done }) => { - * console.log(value); // hello - * console.log(done); // false - * controller.abort(); - * }); - * ``` - * @since v15.4.0 - * @param signal A signal representing possible cancellation - * @param stream A stream to attach a signal to. - */ - function addAbortSignal< - T extends NodeJS.ReadableStream | NodeJS.WritableStream | web.ReadableStream | web.WritableStream, - >(signal: AbortSignal, stream: T): T; - /** - * Returns the default highWaterMark used by streams. - * Defaults to `65536` (64 KiB), or `16` for `objectMode`. - * @since v19.9.0 - */ - function getDefaultHighWaterMark(objectMode: boolean): number; - /** - * Sets the default highWaterMark used by streams. - * @since v19.9.0 - * @param value highWaterMark value - */ - function setDefaultHighWaterMark(objectMode: boolean, value: number): void; - interface FinishedOptions extends Abortable { - error?: boolean | undefined; - readable?: boolean | undefined; - writable?: boolean | undefined; - } - /** - * A readable and/or writable stream/webstream. - * - * A function to get notified when a stream is no longer readable, writable - * or has experienced an error or a premature close event. - * - * ```js - * import { finished } from 'node:stream'; - * import fs from 'node:fs'; - * - * const rs = fs.createReadStream('archive.tar'); - * - * finished(rs, (err) => { - * if (err) { - * console.error('Stream failed.', err); - * } else { - * console.log('Stream is done reading.'); - * } - * }); - * - * rs.resume(); // Drain the stream. - * ``` - * - * Especially useful in error handling scenarios where a stream is destroyed - * prematurely (like an aborted HTTP request), and will not emit `'end'` or `'finish'`. - * - * The `finished` API provides [`promise version`](https://nodejs.org/docs/latest-v25.x/api/stream.html#streamfinishedstream-options). - * - * `stream.finished()` leaves dangling event listeners (in particular `'error'`, `'end'`, `'finish'` and `'close'`) after `callback` has been - * invoked. The reason for this is so that unexpected `'error'` events (due to - * incorrect stream implementations) do not cause unexpected crashes. - * If this is unwanted behavior then the returned cleanup function needs to be - * invoked in the callback: - * - * ```js - * const cleanup = finished(rs, (err) => { - * cleanup(); - * // ... - * }); - * ``` - * @since v10.0.0 - * @param stream A readable and/or writable stream. - * @param callback A callback function that takes an optional error argument. - * @returns A cleanup function which removes all registered listeners. - */ - function finished( - stream: NodeJS.ReadableStream | NodeJS.WritableStream | web.ReadableStream | web.WritableStream, - options: FinishedOptions, - callback: (err?: NodeJS.ErrnoException | null) => void, - ): () => void; - function finished( - stream: NodeJS.ReadableStream | NodeJS.WritableStream | web.ReadableStream | web.WritableStream, - callback: (err?: NodeJS.ErrnoException | null) => void, - ): () => void; - namespace finished { - import __promisify__ = promises.finished; - export { __promisify__ }; - } - type PipelineSourceFunction = (options?: Abortable) => Iterable | AsyncIterable; - type PipelineSource = - | NodeJS.ReadableStream - | web.ReadableStream - | web.TransformStream - | Iterable - | AsyncIterable - | PipelineSourceFunction; - type PipelineSourceArgument = (T extends (...args: any[]) => infer R ? R : T) extends infer S - ? S extends web.TransformStream ? web.ReadableStream : S - : never; - type PipelineTransformGenerator, O> = ( - source: PipelineSourceArgument, - options?: Abortable, - ) => AsyncIterable; - type PipelineTransformStreams = - | NodeJS.ReadWriteStream - | web.TransformStream; - type PipelineTransform, O> = S extends - PipelineSource | PipelineTransformStreams | ((...args: any[]) => infer I) - ? PipelineTransformStreams | PipelineTransformGenerator - : never; - type PipelineTransformSource = PipelineSource | PipelineTransform; - type PipelineDestinationFunction, R> = ( - source: PipelineSourceArgument, - options?: Abortable, - ) => R; - type PipelineDestination, R> = S extends - PipelineSource | PipelineTransform ? - | NodeJS.WritableStream - | web.WritableStream - | web.TransformStream - | PipelineDestinationFunction - : never; - type PipelineCallback> = ( - err: NodeJS.ErrnoException | null, - value: S extends (...args: any[]) => PromiseLike ? R : undefined, - ) => void; - type PipelineResult> = S extends NodeJS.WritableStream ? S : Duplex; - /** - * A module method to pipe between streams and generators forwarding errors and - * properly cleaning up and provide a callback when the pipeline is complete. - * - * ```js - * import { pipeline } from 'node:stream'; - * import fs from 'node:fs'; - * import zlib from 'node:zlib'; - * - * // Use the pipeline API to easily pipe a series of streams - * // together and get notified when the pipeline is fully done. - * - * // A pipeline to gzip a potentially huge tar file efficiently: - * - * pipeline( - * fs.createReadStream('archive.tar'), - * zlib.createGzip(), - * fs.createWriteStream('archive.tar.gz'), - * (err) => { - * if (err) { - * console.error('Pipeline failed.', err); - * } else { - * console.log('Pipeline succeeded.'); - * } - * }, - * ); - * ``` - * - * The `pipeline` API provides a [`promise version`](https://nodejs.org/docs/latest-v25.x/api/stream.html#streampipelinesource-transforms-destination-options). - * - * `stream.pipeline()` will call `stream.destroy(err)` on all streams except: - * - * * `Readable` streams which have emitted `'end'` or `'close'`. - * * `Writable` streams which have emitted `'finish'` or `'close'`. - * - * `stream.pipeline()` leaves dangling event listeners on the streams - * after the `callback` has been invoked. In the case of reuse of streams after - * failure, this can cause event listener leaks and swallowed errors. If the last - * stream is readable, dangling event listeners will be removed so that the last - * stream can be consumed later. - * - * `stream.pipeline()` closes all the streams when an error is raised. - * The `IncomingRequest` usage with `pipeline` could lead to an unexpected behavior - * once it would destroy the socket without sending the expected response. - * See the example below: - * - * ```js - * import fs from 'node:fs'; - * import http from 'node:http'; - * import { pipeline } from 'node:stream'; - * - * const server = http.createServer((req, res) => { - * const fileStream = fs.createReadStream('./fileNotExist.txt'); - * pipeline(fileStream, res, (err) => { - * if (err) { - * console.log(err); // No such file - * // this message can't be sent once `pipeline` already destroyed the socket - * return res.end('error!!!'); - * } - * }); - * }); - * ``` - * @since v10.0.0 - * @param callback Called when the pipeline is fully done. - */ - function pipeline, D extends PipelineDestination>( - source: S, - destination: D, - callback: PipelineCallback, - ): PipelineResult; - function pipeline< - S extends PipelineSource, - T extends PipelineTransform, - D extends PipelineDestination, - >( - source: S, - transform: T, - destination: D, - callback: PipelineCallback, - ): PipelineResult; - function pipeline< - S extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - D extends PipelineDestination, - >( - source: S, - transform1: T1, - transform2: T2, - destination: D, - callback: PipelineCallback, - ): PipelineResult; - function pipeline< - S extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - T3 extends PipelineTransform, - D extends PipelineDestination, - >( - source: S, - transform1: T1, - transform2: T2, - transform3: T3, - destination: D, - callback: PipelineCallback, - ): PipelineResult; - function pipeline< - S extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - T3 extends PipelineTransform, - T4 extends PipelineTransform, - D extends PipelineDestination, - >( - source: S, - transform1: T1, - transform2: T2, - transform3: T3, - transform4: T4, - destination: D, - callback: PipelineCallback, - ): PipelineResult; - function pipeline( - streams: ReadonlyArray | PipelineTransform | PipelineDestination>, - callback: (err: NodeJS.ErrnoException | null) => void, - ): NodeJS.WritableStream; - function pipeline( - ...streams: [ - ...[PipelineSource, ...PipelineTransform[], PipelineDestination], - callback: ((err: NodeJS.ErrnoException | null) => void), - ] - ): NodeJS.WritableStream; - namespace pipeline { - import __promisify__ = promises.pipeline; - export { __promisify__ }; - } - type ComposeSource = - | NodeJS.ReadableStream - | web.ReadableStream - | Iterable - | AsyncIterable - | (() => AsyncIterable); - type ComposeTransformStreams = NodeJS.ReadWriteStream | web.TransformStream; - type ComposeTransformGenerator = (source: AsyncIterable) => AsyncIterable; - type ComposeTransform, O> = S extends - ComposeSource | ComposeTransformStreams | ComposeTransformGenerator - ? ComposeTransformStreams | ComposeTransformGenerator - : never; - type ComposeTransformSource = ComposeSource | ComposeTransform; - type ComposeDestination> = S extends ComposeTransformSource ? - | NodeJS.WritableStream - | web.WritableStream - | web.TransformStream - | ((source: AsyncIterable) => void) - : never; - /** - * Combines two or more streams into a `Duplex` stream that writes to the - * first stream and reads from the last. Each provided stream is piped into - * the next, using `stream.pipeline`. If any of the streams error then all - * are destroyed, including the outer `Duplex` stream. - * - * Because `stream.compose` returns a new stream that in turn can (and - * should) be piped into other streams, it enables composition. In contrast, - * when passing streams to `stream.pipeline`, typically the first stream is - * a readable stream and the last a writable stream, forming a closed - * circuit. - * - * If passed a `Function` it must be a factory method taking a `source` - * `Iterable`. - * - * ```js - * import { compose, Transform } from 'node:stream'; - * - * const removeSpaces = new Transform({ - * transform(chunk, encoding, callback) { - * callback(null, String(chunk).replace(' ', '')); - * }, - * }); - * - * async function* toUpper(source) { - * for await (const chunk of source) { - * yield String(chunk).toUpperCase(); - * } - * } - * - * let res = ''; - * for await (const buf of compose(removeSpaces, toUpper).end('hello world')) { - * res += buf; - * } - * - * console.log(res); // prints 'HELLOWORLD' - * ``` - * - * `stream.compose` can be used to convert async iterables, generators and - * functions into streams. - * - * * `AsyncIterable` converts into a readable `Duplex`. Cannot yield - * `null`. - * * `AsyncGeneratorFunction` converts into a readable/writable transform `Duplex`. - * Must take a source `AsyncIterable` as first parameter. Cannot yield - * `null`. - * * `AsyncFunction` converts into a writable `Duplex`. Must return - * either `null` or `undefined`. - * - * ```js - * import { compose } from 'node:stream'; - * import { finished } from 'node:stream/promises'; - * - * // Convert AsyncIterable into readable Duplex. - * const s1 = compose(async function*() { - * yield 'Hello'; - * yield 'World'; - * }()); - * - * // Convert AsyncGenerator into transform Duplex. - * const s2 = compose(async function*(source) { - * for await (const chunk of source) { - * yield String(chunk).toUpperCase(); - * } - * }); - * - * let res = ''; - * - * // Convert AsyncFunction into writable Duplex. - * const s3 = compose(async function(source) { - * for await (const chunk of source) { - * res += chunk; - * } - * }); - * - * await finished(compose(s1, s2, s3)); - * - * console.log(res); // prints 'HELLOWORLD' - * ``` - * - * For convenience, the `readable.compose(stream)` method is available on - * `Readable` and `Duplex` streams as a wrapper for this function. - * @since v16.9.0 - * @experimental - */ - /* eslint-disable @definitelytyped/no-unnecessary-generics */ - function compose(stream: ComposeSource | ComposeDestination): Duplex; - function compose< - S extends ComposeSource | ComposeTransform, - D extends ComposeTransform | ComposeDestination, - >( - source: S, - destination: D, - ): Duplex; - function compose< - S extends ComposeSource | ComposeTransform, - T extends ComposeTransform, - D extends ComposeTransform | ComposeDestination, - >(source: S, transform: T, destination: D): Duplex; - function compose< - S extends ComposeSource | ComposeTransform, - T1 extends ComposeTransform, - T2 extends ComposeTransform, - D extends ComposeTransform | ComposeDestination, - >(source: S, transform1: T1, transform2: T2, destination: D): Duplex; - function compose< - S extends ComposeSource | ComposeTransform, - T1 extends ComposeTransform, - T2 extends ComposeTransform, - T3 extends ComposeTransform, - D extends ComposeTransform | ComposeDestination, - >(source: S, transform1: T1, transform2: T2, transform3: T3, destination: D): Duplex; - function compose< - S extends ComposeSource | ComposeTransform, - T1 extends ComposeTransform, - T2 extends ComposeTransform, - T3 extends ComposeTransform, - T4 extends ComposeTransform, - D extends ComposeTransform | ComposeDestination, - >(source: S, transform1: T1, transform2: T2, transform3: T3, transform4: T4, destination: D): Duplex; - function compose( - ...streams: [ - ComposeSource, - ...ComposeTransform[], - ComposeDestination, - ] - ): Duplex; - /* eslint-enable @definitelytyped/no-unnecessary-generics */ - /** - * Returns whether the stream has encountered an error. - * @since v17.3.0, v16.14.0 - */ - function isErrored( - stream: NodeJS.ReadableStream | NodeJS.WritableStream | web.ReadableStream | web.WritableStream, - ): boolean; - /** - * Returns whether the stream is readable. - * @since v17.4.0, v16.14.0 - * @returns Only returns `null` if `stream` is not a valid `Readable`, `Duplex` or `ReadableStream`. - */ - function isReadable(stream: NodeJS.ReadableStream | web.ReadableStream): boolean | null; - /** - * Returns whether the stream is writable. - * @since v20.0.0 - * @returns Only returns `null` if `stream` is not a valid `Writable`, `Duplex` or `WritableStream`. - */ - function isWritable(stream: NodeJS.WritableStream | web.WritableStream): boolean | null; - } - global { - namespace NodeJS { - // These interfaces are vestigial, and correspond roughly to the "streams2" interfaces - // from early versions of Node.js, but they are still used widely across the ecosystem. - // Accordingly, they are commonly used as "in-types" for @types/node APIs, so that - // eg. streams returned from older libraries will still be considered valid input to - // functions which accept stream arguments. - // It's not possible to change or remove these without astronomical levels of breakage. - interface ReadableStream extends EventEmitter { - readable: boolean; - read(size?: number): string | Buffer; - setEncoding(encoding: BufferEncoding): this; - pause(): this; - resume(): this; - isPaused(): boolean; - pipe(destination: T, options?: { end?: boolean | undefined }): T; - unpipe(destination?: WritableStream): this; - unshift(chunk: string | Uint8Array, encoding?: BufferEncoding): void; - wrap(oldStream: ReadableStream): this; - [Symbol.asyncIterator](): AsyncIterableIterator; - } - interface WritableStream extends EventEmitter { - writable: boolean; - write(buffer: Uint8Array | string, cb?: (err?: Error | null) => void): boolean; - write(str: string, encoding?: BufferEncoding, cb?: (err?: Error | null) => void): boolean; - end(cb?: () => void): this; - end(data: string | Uint8Array, cb?: () => void): this; - end(str: string, encoding?: BufferEncoding, cb?: () => void): this; - } - interface ReadWriteStream extends ReadableStream, WritableStream {} - } - } - export = Stream; -} -declare module "stream" { - import stream = require("node:stream"); - export = stream; -} diff --git a/skills/flight-finder/node_modules/@types/node/stream/consumers.d.ts b/skills/flight-finder/node_modules/@types/node/stream/consumers.d.ts deleted file mode 100644 index 97f260d..0000000 --- a/skills/flight-finder/node_modules/@types/node/stream/consumers.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -/** - * The utility consumer functions provide common options for consuming - * streams. - * @since v16.7.0 - */ -declare module "node:stream/consumers" { - import { Blob, NonSharedBuffer } from "node:buffer"; - import { ReadableStream } from "node:stream/web"; - /** - * @since v16.7.0 - * @returns Fulfills with an `ArrayBuffer` containing the full contents of the stream. - */ - function arrayBuffer(stream: ReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; - /** - * @since v16.7.0 - * @returns Fulfills with a `Blob` containing the full contents of the stream. - */ - function blob(stream: ReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; - /** - * @since v16.7.0 - * @returns Fulfills with a `Buffer` containing the full contents of the stream. - */ - function buffer(stream: ReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; - /** - * @since v16.7.0 - * @returns Fulfills with the contents of the stream parsed as a - * UTF-8 encoded string that is then passed through `JSON.parse()`. - */ - function json(stream: ReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; - /** - * @since v16.7.0 - * @returns Fulfills with the contents of the stream parsed as a UTF-8 encoded string. - */ - function text(stream: ReadableStream | NodeJS.ReadableStream | AsyncIterable): Promise; -} -declare module "stream/consumers" { - export * from "node:stream/consumers"; -} diff --git a/skills/flight-finder/node_modules/@types/node/stream/promises.d.ts b/skills/flight-finder/node_modules/@types/node/stream/promises.d.ts deleted file mode 100644 index c4bd3ea..0000000 --- a/skills/flight-finder/node_modules/@types/node/stream/promises.d.ts +++ /dev/null @@ -1,211 +0,0 @@ -declare module "node:stream/promises" { - import { Abortable } from "node:events"; - import { - FinishedOptions as _FinishedOptions, - PipelineDestination, - PipelineSource, - PipelineTransform, - } from "node:stream"; - import { ReadableStream, WritableStream } from "node:stream/web"; - interface FinishedOptions extends _FinishedOptions { - /** - * If true, removes the listeners registered by this function before the promise is fulfilled. - * @default false - */ - cleanup?: boolean | undefined; - } - /** - * ```js - * import { finished } from 'node:stream/promises'; - * import { createReadStream } from 'node:fs'; - * - * const rs = createReadStream('archive.tar'); - * - * async function run() { - * await finished(rs); - * console.log('Stream is done reading.'); - * } - * - * run().catch(console.error); - * rs.resume(); // Drain the stream. - * ``` - * - * The `finished` API also provides a [callback version](https://nodejs.org/docs/latest-v25.x/api/stream.html#streamfinishedstream-options-callback). - * - * `stream.finished()` leaves dangling event listeners (in particular - * `'error'`, `'end'`, `'finish'` and `'close'`) after the returned promise is - * resolved or rejected. The reason for this is so that unexpected `'error'` - * events (due to incorrect stream implementations) do not cause unexpected - * crashes. If this is unwanted behavior then `options.cleanup` should be set to - * `true`: - * - * ```js - * await finished(rs, { cleanup: true }); - * ``` - * @since v15.0.0 - * @returns Fulfills when the stream is no longer readable or writable. - */ - function finished( - stream: NodeJS.ReadableStream | NodeJS.WritableStream | ReadableStream | WritableStream, - options?: FinishedOptions, - ): Promise; - interface PipelineOptions extends Abortable { - end?: boolean | undefined; - } - type PipelineResult> = S extends (...args: any[]) => PromiseLike - ? Promise - : Promise; - /** - * ```js - * import { pipeline } from 'node:stream/promises'; - * import { createReadStream, createWriteStream } from 'node:fs'; - * import { createGzip } from 'node:zlib'; - * - * await pipeline( - * createReadStream('archive.tar'), - * createGzip(), - * createWriteStream('archive.tar.gz'), - * ); - * console.log('Pipeline succeeded.'); - * ``` - * - * To use an `AbortSignal`, pass it inside an options object, as the last argument. - * When the signal is aborted, `destroy` will be called on the underlying pipeline, - * with an `AbortError`. - * - * ```js - * import { pipeline } from 'node:stream/promises'; - * import { createReadStream, createWriteStream } from 'node:fs'; - * import { createGzip } from 'node:zlib'; - * - * const ac = new AbortController(); - * const { signal } = ac; - * setImmediate(() => ac.abort()); - * try { - * await pipeline( - * createReadStream('archive.tar'), - * createGzip(), - * createWriteStream('archive.tar.gz'), - * { signal }, - * ); - * } catch (err) { - * console.error(err); // AbortError - * } - * ``` - * - * The `pipeline` API also supports async generators: - * - * ```js - * import { pipeline } from 'node:stream/promises'; - * import { createReadStream, createWriteStream } from 'node:fs'; - * - * await pipeline( - * createReadStream('lowercase.txt'), - * async function* (source, { signal }) { - * source.setEncoding('utf8'); // Work with strings rather than `Buffer`s. - * for await (const chunk of source) { - * yield await processChunk(chunk, { signal }); - * } - * }, - * createWriteStream('uppercase.txt'), - * ); - * console.log('Pipeline succeeded.'); - * ``` - * - * Remember to handle the `signal` argument passed into the async generator. - * Especially in the case where the async generator is the source for the - * pipeline (i.e. first argument) or the pipeline will never complete. - * - * ```js - * import { pipeline } from 'node:stream/promises'; - * import fs from 'node:fs'; - * await pipeline( - * async function* ({ signal }) { - * await someLongRunningfn({ signal }); - * yield 'asd'; - * }, - * fs.createWriteStream('uppercase.txt'), - * ); - * console.log('Pipeline succeeded.'); - * ``` - * - * The `pipeline` API provides [callback version](https://nodejs.org/docs/latest-v25.x/api/stream.html#streampipelinesource-transforms-destination-callback): - * @since v15.0.0 - * @returns Fulfills when the pipeline is complete. - */ - function pipeline, B extends PipelineDestination>( - source: A, - destination: B, - options?: PipelineOptions, - ): PipelineResult; - function pipeline< - A extends PipelineSource, - T1 extends PipelineTransform, - B extends PipelineDestination, - >( - source: A, - transform1: T1, - destination: B, - options?: PipelineOptions, - ): PipelineResult; - function pipeline< - A extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - B extends PipelineDestination, - >( - source: A, - transform1: T1, - transform2: T2, - destination: B, - options?: PipelineOptions, - ): PipelineResult; - function pipeline< - A extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - T3 extends PipelineTransform, - B extends PipelineDestination, - >( - source: A, - transform1: T1, - transform2: T2, - transform3: T3, - destination: B, - options?: PipelineOptions, - ): PipelineResult; - function pipeline< - A extends PipelineSource, - T1 extends PipelineTransform, - T2 extends PipelineTransform, - T3 extends PipelineTransform, - T4 extends PipelineTransform, - B extends PipelineDestination, - >( - source: A, - transform1: T1, - transform2: T2, - transform3: T3, - transform4: T4, - destination: B, - options?: PipelineOptions, - ): PipelineResult; - function pipeline( - streams: readonly [PipelineSource, ...PipelineTransform[], PipelineDestination], - options?: PipelineOptions, - ): Promise; - function pipeline( - ...streams: [PipelineSource, ...PipelineTransform[], PipelineDestination] - ): Promise; - function pipeline( - ...streams: [ - PipelineSource, - ...PipelineTransform[], - PipelineDestination, - options: PipelineOptions, - ] - ): Promise; -} -declare module "stream/promises" { - export * from "node:stream/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/stream/web.d.ts b/skills/flight-finder/node_modules/@types/node/stream/web.d.ts deleted file mode 100644 index 32ce406..0000000 --- a/skills/flight-finder/node_modules/@types/node/stream/web.d.ts +++ /dev/null @@ -1,296 +0,0 @@ -declare module "node:stream/web" { - import { TextDecoderCommon, TextDecoderOptions, TextEncoderCommon } from "node:util"; - type CompressionFormat = "brotli" | "deflate" | "deflate-raw" | "gzip"; - type ReadableStreamController = ReadableStreamDefaultController | ReadableByteStreamController; - type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader; - type ReadableStreamReaderMode = "byob"; - type ReadableStreamReadResult = ReadableStreamReadValueResult | ReadableStreamReadDoneResult; - type ReadableStreamType = "bytes"; - interface GenericTransformStream { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - interface QueuingStrategy { - highWaterMark?: number; - size?: QueuingStrategySize; - } - interface QueuingStrategyInit { - highWaterMark: number; - } - interface QueuingStrategySize { - (chunk: T): number; - } - interface ReadableStreamBYOBReaderReadOptions { - min?: number; - } - interface ReadableStreamGenericReader { - readonly closed: Promise; - cancel(reason?: any): Promise; - } - interface ReadableStreamGetReaderOptions { - mode?: ReadableStreamReaderMode; - } - interface ReadableStreamIteratorOptions { - preventCancel?: boolean; - } - interface ReadableStreamReadDoneResult { - done: true; - value: T | undefined; - } - interface ReadableStreamReadValueResult { - done: false; - value: T; - } - interface ReadableWritablePair { - readable: ReadableStream; - writable: WritableStream; - } - interface StreamPipeOptions { - preventAbort?: boolean; - preventCancel?: boolean; - preventClose?: boolean; - signal?: AbortSignal; - } - interface Transformer { - flush?: TransformerFlushCallback; - readableType?: undefined; - start?: TransformerStartCallback; - transform?: TransformerTransformCallback; - writableType?: undefined; - } - interface TransformerFlushCallback { - (controller: TransformStreamDefaultController): void | PromiseLike; - } - interface TransformerStartCallback { - (controller: TransformStreamDefaultController): any; - } - interface TransformerTransformCallback { - (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; - } - interface UnderlyingByteSource { - autoAllocateChunkSize?: number; - cancel?: UnderlyingSourceCancelCallback; - pull?: (controller: ReadableByteStreamController) => void | PromiseLike; - start?: (controller: ReadableByteStreamController) => any; - type: "bytes"; - } - interface UnderlyingDefaultSource { - cancel?: UnderlyingSourceCancelCallback; - pull?: (controller: ReadableStreamDefaultController) => void | PromiseLike; - start?: (controller: ReadableStreamDefaultController) => any; - type?: undefined; - } - interface UnderlyingSink { - abort?: UnderlyingSinkAbortCallback; - close?: UnderlyingSinkCloseCallback; - start?: UnderlyingSinkStartCallback; - type?: undefined; - write?: UnderlyingSinkWriteCallback; - } - interface UnderlyingSinkAbortCallback { - (reason?: any): void | PromiseLike; - } - interface UnderlyingSinkCloseCallback { - (): void | PromiseLike; - } - interface UnderlyingSinkStartCallback { - (controller: WritableStreamDefaultController): any; - } - interface UnderlyingSinkWriteCallback { - (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; - } - interface UnderlyingSource { - autoAllocateChunkSize?: number; - cancel?: UnderlyingSourceCancelCallback; - pull?: UnderlyingSourcePullCallback; - start?: UnderlyingSourceStartCallback; - type?: ReadableStreamType; - } - interface UnderlyingSourceCancelCallback { - (reason?: any): void | PromiseLike; - } - interface UnderlyingSourcePullCallback { - (controller: ReadableStreamController): void | PromiseLike; - } - interface UnderlyingSourceStartCallback { - (controller: ReadableStreamController): any; - } - interface ByteLengthQueuingStrategy extends QueuingStrategy { - readonly highWaterMark: number; - readonly size: QueuingStrategySize; - } - var ByteLengthQueuingStrategy: { - prototype: ByteLengthQueuingStrategy; - new(init: QueuingStrategyInit): ByteLengthQueuingStrategy; - }; - interface CompressionStream extends GenericTransformStream { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - var CompressionStream: { - prototype: CompressionStream; - new(format: CompressionFormat): CompressionStream; - }; - interface CountQueuingStrategy extends QueuingStrategy { - readonly highWaterMark: number; - readonly size: QueuingStrategySize; - } - var CountQueuingStrategy: { - prototype: CountQueuingStrategy; - new(init: QueuingStrategyInit): CountQueuingStrategy; - }; - interface DecompressionStream extends GenericTransformStream { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - var DecompressionStream: { - prototype: DecompressionStream; - new(format: CompressionFormat): DecompressionStream; - }; - interface ReadableByteStreamController { - readonly byobRequest: ReadableStreamBYOBRequest | null; - readonly desiredSize: number | null; - close(): void; - enqueue(chunk: NodeJS.NonSharedArrayBufferView): void; - error(e?: any): void; - } - var ReadableByteStreamController: { - prototype: ReadableByteStreamController; - new(): ReadableByteStreamController; - }; - interface ReadableStream { - readonly locked: boolean; - cancel(reason?: any): Promise; - getReader(options: { mode: "byob" }): ReadableStreamBYOBReader; - getReader(): ReadableStreamDefaultReader; - getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader; - pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; - pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; - tee(): [ReadableStream, ReadableStream]; - [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; - values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; - } - var ReadableStream: { - prototype: ReadableStream; - new( - underlyingSource: UnderlyingByteSource, - strategy?: { highWaterMark?: number }, - ): ReadableStream; - new(underlyingSource: UnderlyingDefaultSource, strategy?: QueuingStrategy): ReadableStream; - new(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; - from(iterable: Iterable | AsyncIterable): ReadableStream; - }; - interface ReadableStreamAsyncIterator extends NodeJS.AsyncIterator { - [Symbol.asyncIterator](): ReadableStreamAsyncIterator; - } - interface ReadableStreamBYOBReader extends ReadableStreamGenericReader { - read( - view: T, - options?: ReadableStreamBYOBReaderReadOptions, - ): Promise>; - releaseLock(): void; - } - var ReadableStreamBYOBReader: { - prototype: ReadableStreamBYOBReader; - new(stream: ReadableStream): ReadableStreamBYOBReader; - }; - interface ReadableStreamBYOBRequest { - readonly view: NodeJS.NonSharedArrayBufferView | null; - respond(bytesWritten: number): void; - respondWithNewView(view: NodeJS.NonSharedArrayBufferView): void; - } - var ReadableStreamBYOBRequest: { - prototype: ReadableStreamBYOBRequest; - new(): ReadableStreamBYOBRequest; - }; - interface ReadableStreamDefaultController { - readonly desiredSize: number | null; - close(): void; - enqueue(chunk?: R): void; - error(e?: any): void; - } - var ReadableStreamDefaultController: { - prototype: ReadableStreamDefaultController; - new(): ReadableStreamDefaultController; - }; - interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { - read(): Promise>; - releaseLock(): void; - } - var ReadableStreamDefaultReader: { - prototype: ReadableStreamDefaultReader; - new(stream: ReadableStream): ReadableStreamDefaultReader; - }; - interface TextDecoderStream extends GenericTransformStream, TextDecoderCommon { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - var TextDecoderStream: { - prototype: TextDecoderStream; - new(label?: string, options?: TextDecoderOptions): TextDecoderStream; - }; - interface TextEncoderStream extends GenericTransformStream, TextEncoderCommon { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - var TextEncoderStream: { - prototype: TextEncoderStream; - new(): TextEncoderStream; - }; - interface TransformStream { - readonly readable: ReadableStream; - readonly writable: WritableStream; - } - var TransformStream: { - prototype: TransformStream; - new( - transformer?: Transformer, - writableStrategy?: QueuingStrategy, - readableStrategy?: QueuingStrategy, - ): TransformStream; - }; - interface TransformStreamDefaultController { - readonly desiredSize: number | null; - enqueue(chunk?: O): void; - error(reason?: any): void; - terminate(): void; - } - var TransformStreamDefaultController: { - prototype: TransformStreamDefaultController; - new(): TransformStreamDefaultController; - }; - interface WritableStream { - readonly locked: boolean; - abort(reason?: any): Promise; - close(): Promise; - getWriter(): WritableStreamDefaultWriter; - } - var WritableStream: { - prototype: WritableStream; - new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; - }; - interface WritableStreamDefaultController { - readonly signal: AbortSignal; - error(e?: any): void; - } - var WritableStreamDefaultController: { - prototype: WritableStreamDefaultController; - new(): WritableStreamDefaultController; - }; - interface WritableStreamDefaultWriter { - readonly closed: Promise; - readonly desiredSize: number | null; - readonly ready: Promise; - abort(reason?: any): Promise; - close(): Promise; - releaseLock(): void; - write(chunk?: W): Promise; - } - var WritableStreamDefaultWriter: { - prototype: WritableStreamDefaultWriter; - new(stream: WritableStream): WritableStreamDefaultWriter; - }; -} -declare module "stream/web" { - export * from "node:stream/web"; -} diff --git a/skills/flight-finder/node_modules/@types/node/string_decoder.d.ts b/skills/flight-finder/node_modules/@types/node/string_decoder.d.ts deleted file mode 100644 index a72c374..0000000 --- a/skills/flight-finder/node_modules/@types/node/string_decoder.d.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * The `node:string_decoder` module provides an API for decoding `Buffer` objects - * into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 - * characters. It can be accessed using: - * - * ```js - * import { StringDecoder } from 'node:string_decoder'; - * ``` - * - * The following example shows the basic use of the `StringDecoder` class. - * - * ```js - * import { StringDecoder } from 'node:string_decoder'; - * const decoder = new StringDecoder('utf8'); - * - * const cent = Buffer.from([0xC2, 0xA2]); - * console.log(decoder.write(cent)); // Prints: ¢ - * - * const euro = Buffer.from([0xE2, 0x82, 0xAC]); - * console.log(decoder.write(euro)); // Prints: € - * ``` - * - * When a `Buffer` instance is written to the `StringDecoder` instance, an - * internal buffer is used to ensure that the decoded string does not contain - * any incomplete multibyte characters. These are held in the buffer until the - * next call to `stringDecoder.write()` or until `stringDecoder.end()` is called. - * - * In the following example, the three UTF-8 encoded bytes of the European Euro - * symbol (`€`) are written over three separate operations: - * - * ```js - * import { StringDecoder } from 'node:string_decoder'; - * const decoder = new StringDecoder('utf8'); - * - * decoder.write(Buffer.from([0xE2])); - * decoder.write(Buffer.from([0x82])); - * console.log(decoder.end(Buffer.from([0xAC]))); // Prints: € - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/string_decoder.js) - */ -declare module "node:string_decoder" { - class StringDecoder { - constructor(encoding?: BufferEncoding); - /** - * Returns a decoded string, ensuring that any incomplete multibyte characters at - * the end of the `Buffer`, or `TypedArray`, or `DataView` are omitted from the - * returned string and stored in an internal buffer for the next call to `stringDecoder.write()` or `stringDecoder.end()`. - * @since v0.1.99 - * @param buffer The bytes to decode. - */ - write(buffer: string | NodeJS.ArrayBufferView): string; - /** - * Returns any remaining input stored in the internal buffer as a string. Bytes - * representing incomplete UTF-8 and UTF-16 characters will be replaced with - * substitution characters appropriate for the character encoding. - * - * If the `buffer` argument is provided, one final call to `stringDecoder.write()` is performed before returning the remaining input. - * After `end()` is called, the `stringDecoder` object can be reused for new input. - * @since v0.9.3 - * @param buffer The bytes to decode. - */ - end(buffer?: string | NodeJS.ArrayBufferView): string; - } -} -declare module "string_decoder" { - export * from "node:string_decoder"; -} diff --git a/skills/flight-finder/node_modules/@types/node/test.d.ts b/skills/flight-finder/node_modules/@types/node/test.d.ts deleted file mode 100644 index 4207cda..0000000 --- a/skills/flight-finder/node_modules/@types/node/test.d.ts +++ /dev/null @@ -1,2275 +0,0 @@ -/** - * The `node:test` module facilitates the creation of JavaScript tests. - * To access it: - * - * ```js - * import test from 'node:test'; - * ``` - * - * This module is only available under the `node:` scheme. The following will not - * work: - * - * ```js - * import test from 'node:test'; - * ``` - * - * Tests created via the `test` module consist of a single function that is - * processed in one of three ways: - * - * 1. A synchronous function that is considered failing if it throws an exception, - * and is considered passing otherwise. - * 2. A function that returns a `Promise` that is considered failing if the `Promise` rejects, and is considered passing if the `Promise` fulfills. - * 3. A function that receives a callback function. If the callback receives any - * truthy value as its first argument, the test is considered failing. If a - * falsy value is passed as the first argument to the callback, the test is - * considered passing. If the test function receives a callback function and - * also returns a `Promise`, the test will fail. - * - * The following example illustrates how tests are written using the `test` module. - * - * ```js - * test('synchronous passing test', (t) => { - * // This test passes because it does not throw an exception. - * assert.strictEqual(1, 1); - * }); - * - * test('synchronous failing test', (t) => { - * // This test fails because it throws an exception. - * assert.strictEqual(1, 2); - * }); - * - * test('asynchronous passing test', async (t) => { - * // This test passes because the Promise returned by the async - * // function is settled and not rejected. - * assert.strictEqual(1, 1); - * }); - * - * test('asynchronous failing test', async (t) => { - * // This test fails because the Promise returned by the async - * // function is rejected. - * assert.strictEqual(1, 2); - * }); - * - * test('failing test using Promises', (t) => { - * // Promises can be used directly as well. - * return new Promise((resolve, reject) => { - * setImmediate(() => { - * reject(new Error('this will cause the test to fail')); - * }); - * }); - * }); - * - * test('callback passing test', (t, done) => { - * // done() is the callback function. When the setImmediate() runs, it invokes - * // done() with no arguments. - * setImmediate(done); - * }); - * - * test('callback failing test', (t, done) => { - * // When the setImmediate() runs, done() is invoked with an Error object and - * // the test fails. - * setImmediate(() => { - * done(new Error('callback failure')); - * }); - * }); - * ``` - * - * If any tests fail, the process exit code is set to `1`. - * @since v18.0.0, v16.17.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/test.js) - */ -declare module "node:test" { - import { AssertMethodNames } from "node:assert"; - import { Readable, ReadableEventMap } from "node:stream"; - import { TestEvent } from "node:test/reporters"; - import { URL } from "node:url"; - import TestFn = test.TestFn; - import TestOptions = test.TestOptions; - /** - * The `test()` function is the value imported from the `test` module. Each - * invocation of this function results in reporting the test to the `TestsStream`. - * - * The `TestContext` object passed to the `fn` argument can be used to perform - * actions related to the current test. Examples include skipping the test, adding - * additional diagnostic information, or creating subtests. - * - * `test()` returns a `Promise` that fulfills once the test completes. - * if `test()` is called within a suite, it fulfills immediately. - * The return value can usually be discarded for top level tests. - * However, the return value from subtests should be used to prevent the parent - * test from finishing first and cancelling the subtest - * as shown in the following example. - * - * ```js - * test('top level test', async (t) => { - * // The setTimeout() in the following subtest would cause it to outlive its - * // parent test if 'await' is removed on the next line. Once the parent test - * // completes, it will cancel any outstanding subtests. - * await t.test('longer running subtest', async (t) => { - * return new Promise((resolve, reject) => { - * setTimeout(resolve, 1000); - * }); - * }); - * }); - * ``` - * - * The `timeout` option can be used to fail the test if it takes longer than `timeout` milliseconds to complete. However, it is not a reliable mechanism for - * canceling tests because a running test might block the application thread and - * thus prevent the scheduled cancellation. - * @since v18.0.0, v16.17.0 - * @param name The name of the test, which is displayed when reporting test results. - * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. - * @param options Configuration options for the test. - * @param fn The function under test. The first argument to this function is a {@link TestContext} object. - * If the test uses callbacks, the callback function is passed as the second argument. - * @return Fulfilled with `undefined` once the test completes, or immediately if the test runs within a suite. - */ - function test(name?: string, fn?: TestFn): Promise; - function test(name?: string, options?: TestOptions, fn?: TestFn): Promise; - function test(options?: TestOptions, fn?: TestFn): Promise; - function test(fn?: TestFn): Promise; - namespace test { - export { test }; - export { suite as describe, test as it }; - } - namespace test { - /** - * **Note:** `shard` is used to horizontally parallelize test running across - * machines or processes, ideal for large-scale executions across varied - * environments. It's incompatible with `watch` mode, tailored for rapid - * code iteration by automatically rerunning tests on file changes. - * - * ```js - * import { tap } from 'node:test/reporters'; - * import { run } from 'node:test'; - * import process from 'node:process'; - * import path from 'node:path'; - * - * run({ files: [path.resolve('./tests/test.js')] }) - * .compose(tap) - * .pipe(process.stdout); - * ``` - * @since v18.9.0, v16.19.0 - * @param options Configuration options for running tests. - */ - function run(options?: RunOptions): TestsStream; - /** - * The `suite()` function is imported from the `node:test` module. - * @param name The name of the suite, which is displayed when reporting test results. - * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. - * @param options Configuration options for the suite. This supports the same options as {@link test}. - * @param fn The suite function declaring nested tests and suites. The first argument to this function is a {@link SuiteContext} object. - * @return Immediately fulfilled with `undefined`. - * @since v20.13.0 - */ - function suite(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; - function suite(name?: string, fn?: SuiteFn): Promise; - function suite(options?: TestOptions, fn?: SuiteFn): Promise; - function suite(fn?: SuiteFn): Promise; - namespace suite { - /** - * Shorthand for skipping a suite. This is the same as calling {@link suite} with `options.skip` set to `true`. - * @since v20.13.0 - */ - function skip(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; - function skip(name?: string, fn?: SuiteFn): Promise; - function skip(options?: TestOptions, fn?: SuiteFn): Promise; - function skip(fn?: SuiteFn): Promise; - /** - * Shorthand for marking a suite as `TODO`. This is the same as calling {@link suite} with `options.todo` set to `true`. - * @since v20.13.0 - */ - function todo(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; - function todo(name?: string, fn?: SuiteFn): Promise; - function todo(options?: TestOptions, fn?: SuiteFn): Promise; - function todo(fn?: SuiteFn): Promise; - /** - * Shorthand for marking a suite as `only`. This is the same as calling {@link suite} with `options.only` set to `true`. - * @since v20.13.0 - */ - function only(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; - function only(name?: string, fn?: SuiteFn): Promise; - function only(options?: TestOptions, fn?: SuiteFn): Promise; - function only(fn?: SuiteFn): Promise; - // added in v25.5.0, undocumented - function expectFailure(name?: string, options?: TestOptions, fn?: SuiteFn): Promise; - function expectFailure(name?: string, fn?: SuiteFn): Promise; - function expectFailure(options?: TestOptions, fn?: SuiteFn): Promise; - function expectFailure(fn?: SuiteFn): Promise; - } - /** - * Shorthand for skipping a test. This is the same as calling {@link test} with `options.skip` set to `true`. - * @since v20.2.0 - */ - function skip(name?: string, options?: TestOptions, fn?: TestFn): Promise; - function skip(name?: string, fn?: TestFn): Promise; - function skip(options?: TestOptions, fn?: TestFn): Promise; - function skip(fn?: TestFn): Promise; - /** - * Shorthand for marking a test as `TODO`. This is the same as calling {@link test} with `options.todo` set to `true`. - * @since v20.2.0 - */ - function todo(name?: string, options?: TestOptions, fn?: TestFn): Promise; - function todo(name?: string, fn?: TestFn): Promise; - function todo(options?: TestOptions, fn?: TestFn): Promise; - function todo(fn?: TestFn): Promise; - /** - * Shorthand for marking a test as `only`. This is the same as calling {@link test} with `options.only` set to `true`. - * @since v20.2.0 - */ - function only(name?: string, options?: TestOptions, fn?: TestFn): Promise; - function only(name?: string, fn?: TestFn): Promise; - function only(options?: TestOptions, fn?: TestFn): Promise; - function only(fn?: TestFn): Promise; - // added in v25.5.0, undocumented - function expectFailure(name?: string, options?: TestOptions, fn?: TestFn): Promise; - function expectFailure(name?: string, fn?: TestFn): Promise; - function expectFailure(options?: TestOptions, fn?: TestFn): Promise; - function expectFailure(fn?: TestFn): Promise; - /** - * The type of a function passed to {@link test}. The first argument to this function is a {@link TestContext} object. - * If the test uses callbacks, the callback function is passed as the second argument. - */ - type TestFn = (t: TestContext, done: (result?: any) => void) => void | Promise; - /** - * The type of a suite test function. The argument to this function is a {@link SuiteContext} object. - */ - type SuiteFn = (s: SuiteContext) => void | Promise; - interface TestShard { - /** - * A positive integer between 1 and `total` that specifies the index of the shard to run. - */ - index: number; - /** - * A positive integer that specifies the total number of shards to split the test files to. - */ - total: number; - } - interface RunOptions { - /** - * If a number is provided, then that many tests would run asynchronously (they are still managed by the single-threaded event loop). - * If `true`, it would run `os.availableParallelism() - 1` test files in parallel. If `false`, it would only run one test file at a time. - * @default false - */ - concurrency?: number | boolean | undefined; - /** - * Specifies the current working directory to be used by the test runner. - * Serves as the base path for resolving files according to the - * [test runner execution model](https://nodejs.org/docs/latest-v25.x/api/test.html#test-runner-execution-model). - * @since v23.0.0 - * @default process.cwd() - */ - cwd?: string | undefined; - /** - * An array containing the list of files to run. If omitted, files are run according to the - * [test runner execution model](https://nodejs.org/docs/latest-v25.x/api/test.html#test-runner-execution-model). - */ - files?: readonly string[] | undefined; - /** - * Configures the test runner to exit the process once all known - * tests have finished executing even if the event loop would - * otherwise remain active. - * @default false - */ - forceExit?: boolean | undefined; - /** - * An array containing the list of glob patterns to match test files. - * This option cannot be used together with `files`. If omitted, files are run according to the - * [test runner execution model](https://nodejs.org/docs/latest-v25.x/api/test.html#test-runner-execution-model). - * @since v22.6.0 - */ - globPatterns?: readonly string[] | undefined; - /** - * Sets inspector port of test child process. - * This can be a number, or a function that takes no arguments and returns a - * number. If a nullish value is provided, each process gets its own port, - * incremented from the primary's `process.debugPort`. This option is ignored - * if the `isolation` option is set to `'none'` as no child processes are - * spawned. - * @default undefined - */ - inspectPort?: number | (() => number) | undefined; - /** - * Configures the type of test isolation. If set to - * `'process'`, each test file is run in a separate child process. If set to - * `'none'`, all test files run in the current process. - * @default 'process' - * @since v22.8.0 - */ - isolation?: "process" | "none" | undefined; - /** - * If truthy, the test context will only run tests that have the `only` option set - */ - only?: boolean | undefined; - /** - * A function that accepts the `TestsStream` instance and can be used to setup listeners before any tests are run. - * @default undefined - */ - setup?: ((reporter: TestsStream) => void | Promise) | undefined; - /** - * An array of CLI flags to pass to the `node` executable when - * spawning the subprocesses. This option has no effect when `isolation` is `'none`'. - * @since v22.10.0 - * @default [] - */ - execArgv?: readonly string[] | undefined; - /** - * An array of CLI flags to pass to each test file when spawning the - * subprocesses. This option has no effect when `isolation` is `'none'`. - * @since v22.10.0 - * @default [] - */ - argv?: readonly string[] | undefined; - /** - * Allows aborting an in-progress test execution. - */ - signal?: AbortSignal | undefined; - /** - * If provided, only run tests whose name matches the provided pattern. - * Strings are interpreted as JavaScript regular expressions. - * @default undefined - */ - testNamePatterns?: string | RegExp | ReadonlyArray | undefined; - /** - * A String, RegExp or a RegExp Array, that can be used to exclude running tests whose - * name matches the provided pattern. Test name patterns are interpreted as JavaScript - * regular expressions. For each test that is executed, any corresponding test hooks, - * such as `beforeEach()`, are also run. - * @default undefined - * @since v22.1.0 - */ - testSkipPatterns?: string | RegExp | ReadonlyArray | undefined; - /** - * The number of milliseconds after which the test execution will fail. - * If unspecified, subtests inherit this value from their parent. - * @default Infinity - */ - timeout?: number | undefined; - /** - * Whether to run in watch mode or not. - * @default false - */ - watch?: boolean | undefined; - /** - * Running tests in a specific shard. - * @default undefined - */ - shard?: TestShard | undefined; - /** - * A file path where the test runner will - * store the state of the tests to allow rerunning only the failed tests on a next run. - * @since v24.7.0 - * @default undefined - */ - rerunFailuresFilePath?: string | undefined; - /** - * enable [code coverage](https://nodejs.org/docs/latest-v25.x/api/test.html#collecting-code-coverage) collection. - * @since v22.10.0 - * @default false - */ - coverage?: boolean | undefined; - /** - * Excludes specific files from code coverage - * using a glob pattern, which can match both absolute and relative file paths. - * This property is only applicable when `coverage` was set to `true`. - * If both `coverageExcludeGlobs` and `coverageIncludeGlobs` are provided, - * files must meet **both** criteria to be included in the coverage report. - * @since v22.10.0 - * @default undefined - */ - coverageExcludeGlobs?: string | readonly string[] | undefined; - /** - * Includes specific files in code coverage - * using a glob pattern, which can match both absolute and relative file paths. - * This property is only applicable when `coverage` was set to `true`. - * If both `coverageExcludeGlobs` and `coverageIncludeGlobs` are provided, - * files must meet **both** criteria to be included in the coverage report. - * @since v22.10.0 - * @default undefined - */ - coverageIncludeGlobs?: string | readonly string[] | undefined; - /** - * Require a minimum percent of covered lines. If code - * coverage does not reach the threshold specified, the process will exit with code `1`. - * @since v22.10.0 - * @default 0 - */ - lineCoverage?: number | undefined; - /** - * Require a minimum percent of covered branches. If code - * coverage does not reach the threshold specified, the process will exit with code `1`. - * @since v22.10.0 - * @default 0 - */ - branchCoverage?: number | undefined; - /** - * Require a minimum percent of covered functions. If code - * coverage does not reach the threshold specified, the process will exit with code `1`. - * @since v22.10.0 - * @default 0 - */ - functionCoverage?: number | undefined; - } - interface TestsStreamEventMap extends ReadableEventMap { - "data": [data: TestEvent]; - "test:coverage": [data: EventData.TestCoverage]; - "test:complete": [data: EventData.TestComplete]; - "test:dequeue": [data: EventData.TestDequeue]; - "test:diagnostic": [data: EventData.TestDiagnostic]; - "test:enqueue": [data: EventData.TestEnqueue]; - "test:fail": [data: EventData.TestFail]; - "test:pass": [data: EventData.TestPass]; - "test:plan": [data: EventData.TestPlan]; - "test:start": [data: EventData.TestStart]; - "test:stderr": [data: EventData.TestStderr]; - "test:stdout": [data: EventData.TestStdout]; - "test:summary": [data: EventData.TestSummary]; - "test:watch:drained": []; - "test:watch:restarted": []; - } - /** - * A successful call to `run()` will return a new `TestsStream` object, streaming a series of events representing the execution of the tests. - * - * Some of the events are guaranteed to be emitted in the same order as the tests are defined, while others are emitted in the order that the tests execute. - * @since v18.9.0, v16.19.0 - */ - interface TestsStream extends Readable { - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: TestsStreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: TestsStreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: TestsStreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners( - eventName: E, - ): ((...args: TestsStreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: TestsStreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - namespace EventData { - interface Error extends globalThis.Error { - cause: unknown; - } - interface LocationInfo { - /** - * The column number where the test is defined, or - * `undefined` if the test was run through the REPL. - */ - column?: number; - /** - * The path of the test file, `undefined` if test was run through the REPL. - */ - file?: string; - /** - * The line number where the test is defined, or `undefined` if the test was run through the REPL. - */ - line?: number; - } - interface TestDiagnostic extends LocationInfo { - /** - * The diagnostic message. - */ - message: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The severity level of the diagnostic message. - * Possible values are: - * * `'info'`: Informational messages. - * * `'warn'`: Warnings. - * * `'error'`: Errors. - */ - level: "info" | "warn" | "error"; - } - interface TestCoverage { - /** - * An object containing the coverage report. - */ - summary: { - /** - * An array of coverage reports for individual files. - */ - files: Array<{ - /** - * The absolute path of the file. - */ - path: string; - /** - * The total number of lines. - */ - totalLineCount: number; - /** - * The total number of branches. - */ - totalBranchCount: number; - /** - * The total number of functions. - */ - totalFunctionCount: number; - /** - * The number of covered lines. - */ - coveredLineCount: number; - /** - * The number of covered branches. - */ - coveredBranchCount: number; - /** - * The number of covered functions. - */ - coveredFunctionCount: number; - /** - * The percentage of lines covered. - */ - coveredLinePercent: number; - /** - * The percentage of branches covered. - */ - coveredBranchPercent: number; - /** - * The percentage of functions covered. - */ - coveredFunctionPercent: number; - /** - * An array of functions representing function coverage. - */ - functions: Array<{ - /** - * The name of the function. - */ - name: string; - /** - * The line number where the function is defined. - */ - line: number; - /** - * The number of times the function was called. - */ - count: number; - }>; - /** - * An array of branches representing branch coverage. - */ - branches: Array<{ - /** - * The line number where the branch is defined. - */ - line: number; - /** - * The number of times the branch was taken. - */ - count: number; - }>; - /** - * An array of lines representing line numbers and the number of times they were covered. - */ - lines: Array<{ - /** - * The line number. - */ - line: number; - /** - * The number of times the line was covered. - */ - count: number; - }>; - }>; - /** - * An object containing whether or not the coverage for - * each coverage type. - * @since v22.9.0 - */ - thresholds: { - /** - * The function coverage threshold. - */ - function: number; - /** - * The branch coverage threshold. - */ - branch: number; - /** - * The line coverage threshold. - */ - line: number; - }; - /** - * An object containing a summary of coverage for all files. - */ - totals: { - /** - * The total number of lines. - */ - totalLineCount: number; - /** - * The total number of branches. - */ - totalBranchCount: number; - /** - * The total number of functions. - */ - totalFunctionCount: number; - /** - * The number of covered lines. - */ - coveredLineCount: number; - /** - * The number of covered branches. - */ - coveredBranchCount: number; - /** - * The number of covered functions. - */ - coveredFunctionCount: number; - /** - * The percentage of lines covered. - */ - coveredLinePercent: number; - /** - * The percentage of branches covered. - */ - coveredBranchPercent: number; - /** - * The percentage of functions covered. - */ - coveredFunctionPercent: number; - }; - /** - * The working directory when code coverage began. This - * is useful for displaying relative path names in case - * the tests changed the working directory of the Node.js process. - */ - workingDirectory: string; - }; - /** - * The nesting level of the test. - */ - nesting: number; - } - interface TestComplete extends LocationInfo { - /** - * Additional execution metadata. - */ - details: { - /** - * Whether the test passed or not. - */ - passed: boolean; - /** - * The duration of the test in milliseconds. - */ - duration_ms: number; - /** - * An error wrapping the error thrown by the test if it did not pass. - */ - error?: Error; - /** - * The type of the test, used to denote whether this is a suite. - */ - type?: "suite" | "test"; - }; - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The ordinal number of the test. - */ - testNumber: number; - /** - * Present if `context.todo` is called. - */ - todo?: string | boolean; - /** - * Present if `context.skip` is called. - */ - skip?: string | boolean; - } - interface TestDequeue extends LocationInfo { - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The test type. Either `'suite'` or `'test'`. - * @since v22.15.0 - */ - type: "suite" | "test"; - } - interface TestEnqueue extends LocationInfo { - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The test type. Either `'suite'` or `'test'`. - * @since v22.15.0 - */ - type: "suite" | "test"; - } - interface TestFail extends LocationInfo { - /** - * Additional execution metadata. - */ - details: { - /** - * The duration of the test in milliseconds. - */ - duration_ms: number; - /** - * An error wrapping the error thrown by the test. - */ - error: Error; - /** - * The type of the test, used to denote whether this is a suite. - * @since v20.0.0, v19.9.0, v18.17.0 - */ - type?: "suite" | "test"; - /** - * The attempt number of the test run, - * present only when using the `--test-rerun-failures` flag. - * @since v24.7.0 - */ - attempt?: number; - }; - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The ordinal number of the test. - */ - testNumber: number; - /** - * Present if `context.todo` is called. - */ - todo?: string | boolean; - /** - * Present if `context.skip` is called. - */ - skip?: string | boolean; - } - interface TestPass extends LocationInfo { - /** - * Additional execution metadata. - */ - details: { - /** - * The duration of the test in milliseconds. - */ - duration_ms: number; - /** - * The type of the test, used to denote whether this is a suite. - * @since 20.0.0, 19.9.0, 18.17.0 - */ - type?: "suite" | "test"; - /** - * The attempt number of the test run, - * present only when using the `--test-rerun-failures` flag. - * @since v24.7.0 - */ - attempt?: number; - /** - * The attempt number the test passed on, - * present only when using the `--test-rerun-failures` flag. - * @since v24.7.0 - */ - passed_on_attempt?: number; - }; - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The ordinal number of the test. - */ - testNumber: number; - /** - * Present if `context.todo` is called. - */ - todo?: string | boolean; - /** - * Present if `context.skip` is called. - */ - skip?: string | boolean; - } - interface TestPlan extends LocationInfo { - /** - * The nesting level of the test. - */ - nesting: number; - /** - * The number of subtests that have ran. - */ - count: number; - } - interface TestStart extends LocationInfo { - /** - * The test name. - */ - name: string; - /** - * The nesting level of the test. - */ - nesting: number; - } - interface TestStderr { - /** - * The path of the test file. - */ - file: string; - /** - * The message written to `stderr`. - */ - message: string; - } - interface TestStdout { - /** - * The path of the test file. - */ - file: string; - /** - * The message written to `stdout`. - */ - message: string; - } - interface TestSummary { - /** - * An object containing the counts of various test results. - */ - counts: { - /** - * The total number of cancelled tests. - */ - cancelled: number; - /** - * The total number of passed tests. - */ - passed: number; - /** - * The total number of skipped tests. - */ - skipped: number; - /** - * The total number of suites run. - */ - suites: number; - /** - * The total number of tests run, excluding suites. - */ - tests: number; - /** - * The total number of TODO tests. - */ - todo: number; - /** - * The total number of top level tests and suites. - */ - topLevel: number; - }; - /** - * The duration of the test run in milliseconds. - */ - duration_ms: number; - /** - * The path of the test file that generated the - * summary. If the summary corresponds to multiple files, this value is - * `undefined`. - */ - file: string | undefined; - /** - * Indicates whether or not the test run is considered - * successful or not. If any error condition occurs, such as a failing test or - * unmet coverage threshold, this value will be set to `false`. - */ - success: boolean; - } - } - /** - * An instance of `TestContext` is passed to each test function in order to - * interact with the test runner. However, the `TestContext` constructor is not - * exposed as part of the API. - * @since v18.0.0, v16.17.0 - */ - interface TestContext { - /** - * An object containing assertion methods bound to the test context. - * The top-level functions from the `node:assert` module are exposed here for the purpose of creating test plans. - * - * **Note:** Some of the functions from `node:assert` contain type assertions. If these are called via the - * TestContext `assert` object, then the context parameter in the test's function signature **must be explicitly typed** - * (ie. the parameter must have a type annotation), otherwise an error will be raised by the TypeScript compiler: - * ```ts - * import { test, type TestContext } from 'node:test'; - * - * // The test function's context parameter must have a type annotation. - * test('example', (t: TestContext) => { - * t.assert.deepStrictEqual(actual, expected); - * }); - * - * // Omitting the type annotation will result in a compilation error. - * test('example', t => { - * t.assert.deepStrictEqual(actual, expected); // Error: 't' needs an explicit type annotation. - * }); - * ``` - * @since v22.2.0, v20.15.0 - */ - readonly assert: TestContextAssert; - /** - * This function is used to create a hook running before subtest of the current test. - * @param fn The hook function. The first argument to this function is a `TestContext` object. - * If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - * @since v20.1.0, v18.17.0 - */ - before(fn?: TestContextHookFn, options?: HookOptions): void; - /** - * This function is used to create a hook running before each subtest of the current test. - * @param fn The hook function. The first argument to this function is a `TestContext` object. - * If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - * @since v18.8.0 - */ - beforeEach(fn?: TestContextHookFn, options?: HookOptions): void; - /** - * This function is used to create a hook that runs after the current test finishes. - * @param fn The hook function. The first argument to this function is a `TestContext` object. - * If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - * @since v18.13.0 - */ - after(fn?: TestContextHookFn, options?: HookOptions): void; - /** - * This function is used to create a hook running after each subtest of the current test. - * @param fn The hook function. The first argument to this function is a `TestContext` object. - * If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - * @since v18.8.0 - */ - afterEach(fn?: TestContextHookFn, options?: HookOptions): void; - /** - * This function is used to write diagnostics to the output. Any diagnostic - * information is included at the end of the test's results. This function does - * not return a value. - * - * ```js - * test('top level test', (t) => { - * t.diagnostic('A diagnostic message'); - * }); - * ``` - * @since v18.0.0, v16.17.0 - * @param message Message to be reported. - */ - diagnostic(message: string): void; - /** - * The absolute path of the test file that created the current test. If a test file imports - * additional modules that generate tests, the imported tests will return the path of the root test file. - * @since v22.6.0 - */ - readonly filePath: string | undefined; - /** - * The name of the test and each of its ancestors, separated by `>`. - * @since v22.3.0 - */ - readonly fullName: string; - /** - * The name of the test. - * @since v18.8.0, v16.18.0 - */ - readonly name: string; - /** - * Indicated whether the test succeeded. - * @since v21.7.0, v20.12.0 - */ - readonly passed: boolean; - /** - * The failure reason for the test/case; wrapped and available via `context.error.cause`. - * @since v21.7.0, v20.12.0 - */ - readonly error: EventData.Error | null; - /** - * Number of times the test has been attempted. - * @since v21.7.0, v20.12.0 - */ - readonly attempt: number; - /** - * This function is used to set the number of assertions and subtests that are expected to run - * within the test. If the number of assertions and subtests that run does not match the - * expected count, the test will fail. - * - * > Note: To make sure assertions are tracked, `t.assert` must be used instead of `assert` directly. - * - * ```js - * test('top level test', (t) => { - * t.plan(2); - * t.assert.ok('some relevant assertion here'); - * t.test('subtest', () => {}); - * }); - * ``` - * - * When working with asynchronous code, the `plan` function can be used to ensure that the - * correct number of assertions are run: - * - * ```js - * test('planning with streams', (t, done) => { - * function* generate() { - * yield 'a'; - * yield 'b'; - * yield 'c'; - * } - * const expected = ['a', 'b', 'c']; - * t.plan(expected.length); - * const stream = Readable.from(generate()); - * stream.on('data', (chunk) => { - * t.assert.strictEqual(chunk, expected.shift()); - * }); - * - * stream.on('end', () => { - * done(); - * }); - * }); - * ``` - * - * When using the `wait` option, you can control how long the test will wait for the expected assertions. - * For example, setting a maximum wait time ensures that the test will wait for asynchronous assertions - * to complete within the specified timeframe: - * - * ```js - * test('plan with wait: 2000 waits for async assertions', (t) => { - * t.plan(1, { wait: 2000 }); // Waits for up to 2 seconds for the assertion to complete. - * - * const asyncActivity = () => { - * setTimeout(() => { - * * t.assert.ok(true, 'Async assertion completed within the wait time'); - * }, 1000); // Completes after 1 second, within the 2-second wait time. - * }; - * - * asyncActivity(); // The test will pass because the assertion is completed in time. - * }); - * ``` - * - * Note: If a `wait` timeout is specified, it begins counting down only after the test function finishes executing. - * @since v22.2.0 - */ - plan(count: number, options?: TestContextPlanOptions): void; - /** - * If `shouldRunOnlyTests` is truthy, the test context will only run tests that - * have the `only` option set. Otherwise, all tests are run. If Node.js was not - * started with the `--test-only` command-line option, this function is a - * no-op. - * - * ```js - * test('top level test', (t) => { - * // The test context can be set to run subtests with the 'only' option. - * t.runOnly(true); - * return Promise.all([ - * t.test('this subtest is now skipped'), - * t.test('this subtest is run', { only: true }), - * ]); - * }); - * ``` - * @since v18.0.0, v16.17.0 - * @param shouldRunOnlyTests Whether or not to run `only` tests. - */ - runOnly(shouldRunOnlyTests: boolean): void; - /** - * ```js - * test('top level test', async (t) => { - * await fetch('some/uri', { signal: t.signal }); - * }); - * ``` - * @since v18.7.0, v16.17.0 - */ - readonly signal: AbortSignal; - /** - * This function causes the test's output to indicate the test as skipped. If `message` is provided, it is included in the output. Calling `skip()` does - * not terminate execution of the test function. This function does not return a - * value. - * - * ```js - * test('top level test', (t) => { - * // Make sure to return here as well if the test contains additional logic. - * t.skip('this is skipped'); - * }); - * ``` - * @since v18.0.0, v16.17.0 - * @param message Optional skip message. - */ - skip(message?: string): void; - /** - * This function adds a `TODO` directive to the test's output. If `message` is - * provided, it is included in the output. Calling `todo()` does not terminate - * execution of the test function. This function does not return a value. - * - * ```js - * test('top level test', (t) => { - * // This test is marked as `TODO` - * t.todo('this is a todo'); - * }); - * ``` - * @since v18.0.0, v16.17.0 - * @param message Optional `TODO` message. - */ - todo(message?: string): void; - /** - * This function is used to create subtests under the current test. This function behaves in - * the same fashion as the top level {@link test} function. - * @since v18.0.0 - * @param name The name of the test, which is displayed when reporting test results. - * Defaults to the `name` property of `fn`, or `''` if `fn` does not have a name. - * @param options Configuration options for the test. - * @param fn The function under test. This first argument to this function is a {@link TestContext} object. - * If the test uses callbacks, the callback function is passed as the second argument. - * @returns A {@link Promise} resolved with `undefined` once the test completes. - */ - test: typeof test; - /** - * This method polls a `condition` function until that function either returns - * successfully or the operation times out. - * @since v22.14.0 - * @param condition An assertion function that is invoked - * periodically until it completes successfully or the defined polling timeout - * elapses. Successful completion is defined as not throwing or rejecting. This - * function does not accept any arguments, and is allowed to return any value. - * @param options An optional configuration object for the polling operation. - * @returns Fulfilled with the value returned by `condition`. - */ - waitFor(condition: () => T, options?: TestContextWaitForOptions): Promise>; - /** - * Each test provides its own MockTracker instance. - */ - readonly mock: MockTracker; - } - interface TestContextAssert extends Pick { - /** - * This function serializes `value` and writes it to the file specified by `path`. - * - * ```js - * test('snapshot test with default serialization', (t) => { - * t.assert.fileSnapshot({ value1: 1, value2: 2 }, './snapshots/snapshot.json'); - * }); - * ``` - * - * This function differs from `context.assert.snapshot()` in the following ways: - * - * * The snapshot file path is explicitly provided by the user. - * * Each snapshot file is limited to a single snapshot value. - * * No additional escaping is performed by the test runner. - * - * These differences allow snapshot files to better support features such as syntax - * highlighting. - * @since v22.14.0 - * @param value A value to serialize to a string. If Node.js was started with - * the [`--test-update-snapshots`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--test-update-snapshots) - * flag, the serialized value is written to - * `path`. Otherwise, the serialized value is compared to the contents of the - * existing snapshot file. - * @param path The file where the serialized `value` is written. - * @param options Optional configuration options. - */ - fileSnapshot(value: any, path: string, options?: AssertSnapshotOptions): void; - /** - * This function implements assertions for snapshot testing. - * ```js - * test('snapshot test with default serialization', (t) => { - * t.assert.snapshot({ value1: 1, value2: 2 }); - * }); - * - * test('snapshot test with custom serialization', (t) => { - * t.assert.snapshot({ value3: 3, value4: 4 }, { - * serializers: [(value) => JSON.stringify(value)] - * }); - * }); - * ``` - * @since v22.3.0 - * @param value A value to serialize to a string. If Node.js was started with - * the [`--test-update-snapshots`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--test-update-snapshots) - * flag, the serialized value is written to - * the snapshot file. Otherwise, the serialized value is compared to the - * corresponding value in the existing snapshot file. - */ - snapshot(value: any, options?: AssertSnapshotOptions): void; - /** - * A custom assertion function registered with `assert.register()`. - */ - [name: string]: (...args: any[]) => void; - } - interface AssertSnapshotOptions { - /** - * An array of synchronous functions used to serialize `value` into a string. - * `value` is passed as the only argument to the first serializer function. - * The return value of each serializer is passed as input to the next serializer. - * Once all serializers have run, the resulting value is coerced to a string. - * - * If no serializers are provided, the test runner's default serializers are used. - */ - serializers?: ReadonlyArray<(value: any) => any> | undefined; - } - interface TestContextPlanOptions { - /** - * The wait time for the plan: - * * If `true`, the plan waits indefinitely for all assertions and subtests to run. - * * If `false`, the plan performs an immediate check after the test function completes, - * without waiting for any pending assertions or subtests. - * Any assertions or subtests that complete after this check will not be counted towards the plan. - * * If a number, it specifies the maximum wait time in milliseconds - * before timing out while waiting for expected assertions and subtests to be matched. - * If the timeout is reached, the test will fail. - * @default false - */ - wait?: boolean | number | undefined; - } - interface TestContextWaitForOptions { - /** - * The number of milliseconds to wait after an unsuccessful - * invocation of `condition` before trying again. - * @default 50 - */ - interval?: number | undefined; - /** - * The poll timeout in milliseconds. If `condition` has not - * succeeded by the time this elapses, an error occurs. - * @default 1000 - */ - timeout?: number | undefined; - } - /** - * An instance of `SuiteContext` is passed to each suite function in order to - * interact with the test runner. However, the `SuiteContext` constructor is not - * exposed as part of the API. - * @since v18.7.0, v16.17.0 - */ - interface SuiteContext { - /** - * The absolute path of the test file that created the current suite. If a test file imports - * additional modules that generate suites, the imported suites will return the path of the root test file. - * @since v22.6.0 - */ - readonly filePath: string | undefined; - /** - * The name of the suite and each of its ancestors, separated by `>`. - * @since v22.3.0, v20.16.0 - */ - readonly fullName: string; - /** - * The name of the suite. - * @since v18.8.0, v16.18.0 - */ - readonly name: string; - /** - * Can be used to abort test subtasks when the test has been aborted. - * @since v18.7.0, v16.17.0 - */ - readonly signal: AbortSignal; - } - interface TestOptions { - /** - * If a number is provided, then that many tests would run in parallel. - * If truthy, it would run (number of cpu cores - 1) tests in parallel. - * For subtests, it will be `Infinity` tests in parallel. - * If falsy, it would only run one test at a time. - * If unspecified, subtests inherit this value from their parent. - * @default false - */ - concurrency?: number | boolean | undefined; - /** - * If truthy, and the test context is configured to run `only` tests, then this test will be - * run. Otherwise, the test is skipped. - * @default false - */ - only?: boolean | undefined; - /** - * Allows aborting an in-progress test. - * @since v18.8.0 - */ - signal?: AbortSignal | undefined; - /** - * If truthy, the test is skipped. If a string is provided, that string is displayed in the - * test results as the reason for skipping the test. - * @default false - */ - skip?: boolean | string | undefined; - /** - * A number of milliseconds the test will fail after. If unspecified, subtests inherit this - * value from their parent. - * @default Infinity - * @since v18.7.0 - */ - timeout?: number | undefined; - /** - * If truthy, the test marked as `TODO`. If a string is provided, that string is displayed in - * the test results as the reason why the test is `TODO`. - * @default false - */ - todo?: boolean | string | undefined; - /** - * The number of assertions and subtests expected to be run in the test. - * If the number of assertions run in the test does not match the number - * specified in the plan, the test will fail. - * @default undefined - * @since v22.2.0 - */ - plan?: number | undefined; - // added in v25.5.0, undocumented - expectFailure?: boolean | undefined; - } - /** - * This function creates a hook that runs before executing a suite. - * - * ```js - * describe('tests', async () => { - * before(() => console.log('about to run some test')); - * it('is a subtest', () => { - * // Some relevant assertion here - * }); - * }); - * ``` - * @since v18.8.0, v16.18.0 - * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - */ - function before(fn?: HookFn, options?: HookOptions): void; - /** - * This function creates a hook that runs after executing a suite. - * - * ```js - * describe('tests', async () => { - * after(() => console.log('finished running tests')); - * it('is a subtest', () => { - * // Some relevant assertion here - * }); - * }); - * ``` - * @since v18.8.0, v16.18.0 - * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - */ - function after(fn?: HookFn, options?: HookOptions): void; - /** - * This function creates a hook that runs before each test in the current suite. - * - * ```js - * describe('tests', async () => { - * beforeEach(() => console.log('about to run a test')); - * it('is a subtest', () => { - * // Some relevant assertion here - * }); - * }); - * ``` - * @since v18.8.0, v16.18.0 - * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - */ - function beforeEach(fn?: HookFn, options?: HookOptions): void; - /** - * This function creates a hook that runs after each test in the current suite. - * The `afterEach()` hook is run even if the test fails. - * - * ```js - * describe('tests', async () => { - * afterEach(() => console.log('finished running a test')); - * it('is a subtest', () => { - * // Some relevant assertion here - * }); - * }); - * ``` - * @since v18.8.0, v16.18.0 - * @param fn The hook function. If the hook uses callbacks, the callback function is passed as the second argument. - * @param options Configuration options for the hook. - */ - function afterEach(fn?: HookFn, options?: HookOptions): void; - /** - * The hook function. The first argument is the context in which the hook is called. - * If the hook uses callbacks, the callback function is passed as the second argument. - */ - type HookFn = (c: TestContext | SuiteContext, done: (result?: any) => void) => any; - /** - * The hook function. The first argument is a `TestContext` object. - * If the hook uses callbacks, the callback function is passed as the second argument. - */ - type TestContextHookFn = (t: TestContext, done: (result?: any) => void) => any; - /** - * Configuration options for hooks. - * @since v18.8.0 - */ - interface HookOptions { - /** - * Allows aborting an in-progress hook. - */ - signal?: AbortSignal | undefined; - /** - * A number of milliseconds the hook will fail after. If unspecified, subtests inherit this - * value from their parent. - * @default Infinity - */ - timeout?: number | undefined; - } - interface MockFunctionOptions { - /** - * The number of times that the mock will use the behavior of `implementation`. - * Once the mock function has been called `times` times, - * it will automatically restore the behavior of `original`. - * This value must be an integer greater than zero. - * @default Infinity - */ - times?: number | undefined; - } - interface MockMethodOptions extends MockFunctionOptions { - /** - * If `true`, `object[methodName]` is treated as a getter. - * This option cannot be used with the `setter` option. - */ - getter?: boolean | undefined; - /** - * If `true`, `object[methodName]` is treated as a setter. - * This option cannot be used with the `getter` option. - */ - setter?: boolean | undefined; - } - type Mock = F & { - mock: MockFunctionContext; - }; - interface MockModuleOptions { - /** - * If false, each call to `require()` or `import()` generates a new mock module. - * If true, subsequent calls will return the same module mock, and the mock module is inserted into the CommonJS cache. - * @default false - */ - cache?: boolean | undefined; - /** - * The value to use as the mocked module's default export. - * - * If this value is not provided, ESM mocks do not include a default export. - * If the mock is a CommonJS or builtin module, this setting is used as the value of `module.exports`. - * If this value is not provided, CJS and builtin mocks use an empty object as the value of `module.exports`. - */ - defaultExport?: any; - /** - * An object whose keys and values are used to create the named exports of the mock module. - * - * If the mock is a CommonJS or builtin module, these values are copied onto `module.exports`. - * Therefore, if a mock is created with both named exports and a non-object default export, - * the mock will throw an exception when used as a CJS or builtin module. - */ - namedExports?: object | undefined; - } - /** - * The `MockTracker` class is used to manage mocking functionality. The test runner - * module provides a top level `mock` export which is a `MockTracker` instance. - * Each test also provides its own `MockTracker` instance via the test context's `mock` property. - * @since v19.1.0, v18.13.0 - */ - interface MockTracker { - /** - * This function is used to create a mock function. - * - * The following example creates a mock function that increments a counter by one - * on each invocation. The `times` option is used to modify the mock behavior such - * that the first two invocations add two to the counter instead of one. - * - * ```js - * test('mocks a counting function', (t) => { - * let cnt = 0; - * - * function addOne() { - * cnt++; - * return cnt; - * } - * - * function addTwo() { - * cnt += 2; - * return cnt; - * } - * - * const fn = t.mock.fn(addOne, addTwo, { times: 2 }); - * - * assert.strictEqual(fn(), 2); - * assert.strictEqual(fn(), 4); - * assert.strictEqual(fn(), 5); - * assert.strictEqual(fn(), 6); - * }); - * ``` - * @since v19.1.0, v18.13.0 - * @param original An optional function to create a mock on. - * @param implementation An optional function used as the mock implementation for `original`. This is useful for creating mocks that exhibit one behavior for a specified number of calls and - * then restore the behavior of `original`. - * @param options Optional configuration options for the mock function. - * @return The mocked function. The mocked function contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the - * behavior of the mocked function. - */ - fn undefined>( - original?: F, - options?: MockFunctionOptions, - ): Mock; - fn undefined, Implementation extends Function = F>( - original?: F, - implementation?: Implementation, - options?: MockFunctionOptions, - ): Mock; - /** - * This function is used to create a mock on an existing object method. The - * following example demonstrates how a mock is created on an existing object - * method. - * - * ```js - * test('spies on an object method', (t) => { - * const number = { - * value: 5, - * subtract(a) { - * return this.value - a; - * }, - * }; - * - * t.mock.method(number, 'subtract'); - * assert.strictEqual(number.subtract.mock.calls.length, 0); - * assert.strictEqual(number.subtract(3), 2); - * assert.strictEqual(number.subtract.mock.calls.length, 1); - * - * const call = number.subtract.mock.calls[0]; - * - * assert.deepStrictEqual(call.arguments, [3]); - * assert.strictEqual(call.result, 2); - * assert.strictEqual(call.error, undefined); - * assert.strictEqual(call.target, undefined); - * assert.strictEqual(call.this, number); - * }); - * ``` - * @since v19.1.0, v18.13.0 - * @param object The object whose method is being mocked. - * @param methodName The identifier of the method on `object` to mock. If `object[methodName]` is not a function, an error is thrown. - * @param implementation An optional function used as the mock implementation for `object[methodName]`. - * @param options Optional configuration options for the mock method. - * @return The mocked method. The mocked method contains a special `mock` property, which is an instance of {@link MockFunctionContext}, and can be used for inspecting and changing the - * behavior of the mocked method. - */ - method< - MockedObject extends object, - MethodName extends FunctionPropertyNames, - >( - object: MockedObject, - methodName: MethodName, - options?: MockFunctionOptions, - ): MockedObject[MethodName] extends Function ? Mock - : never; - method< - MockedObject extends object, - MethodName extends FunctionPropertyNames, - Implementation extends Function, - >( - object: MockedObject, - methodName: MethodName, - implementation: Implementation, - options?: MockFunctionOptions, - ): MockedObject[MethodName] extends Function ? Mock - : never; - method( - object: MockedObject, - methodName: keyof MockedObject, - options: MockMethodOptions, - ): Mock; - method( - object: MockedObject, - methodName: keyof MockedObject, - implementation: Function, - options: MockMethodOptions, - ): Mock; - /** - * This function is syntax sugar for `MockTracker.method` with `options.getter` set to `true`. - * @since v19.3.0, v18.13.0 - */ - getter< - MockedObject extends object, - MethodName extends keyof MockedObject, - >( - object: MockedObject, - methodName: MethodName, - options?: MockFunctionOptions, - ): Mock<() => MockedObject[MethodName]>; - getter< - MockedObject extends object, - MethodName extends keyof MockedObject, - Implementation extends Function, - >( - object: MockedObject, - methodName: MethodName, - implementation?: Implementation, - options?: MockFunctionOptions, - ): Mock<(() => MockedObject[MethodName]) | Implementation>; - /** - * This function is syntax sugar for `MockTracker.method` with `options.setter` set to `true`. - * @since v19.3.0, v18.13.0 - */ - setter< - MockedObject extends object, - MethodName extends keyof MockedObject, - >( - object: MockedObject, - methodName: MethodName, - options?: MockFunctionOptions, - ): Mock<(value: MockedObject[MethodName]) => void>; - setter< - MockedObject extends object, - MethodName extends keyof MockedObject, - Implementation extends Function, - >( - object: MockedObject, - methodName: MethodName, - implementation?: Implementation, - options?: MockFunctionOptions, - ): Mock<((value: MockedObject[MethodName]) => void) | Implementation>; - /** - * This function is used to mock the exports of ECMAScript modules, CommonJS modules, JSON modules, and - * Node.js builtin modules. Any references to the original module prior to mocking are not impacted. In - * order to enable module mocking, Node.js must be started with the - * [`--experimental-test-module-mocks`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--experimental-test-module-mocks) - * command-line flag. - * - * The following example demonstrates how a mock is created for a module. - * - * ```js - * test('mocks a builtin module in both module systems', async (t) => { - * // Create a mock of 'node:readline' with a named export named 'fn', which - * // does not exist in the original 'node:readline' module. - * const mock = t.mock.module('node:readline', { - * namedExports: { fn() { return 42; } }, - * }); - * - * let esmImpl = await import('node:readline'); - * let cjsImpl = require('node:readline'); - * - * // cursorTo() is an export of the original 'node:readline' module. - * assert.strictEqual(esmImpl.cursorTo, undefined); - * assert.strictEqual(cjsImpl.cursorTo, undefined); - * assert.strictEqual(esmImpl.fn(), 42); - * assert.strictEqual(cjsImpl.fn(), 42); - * - * mock.restore(); - * - * // The mock is restored, so the original builtin module is returned. - * esmImpl = await import('node:readline'); - * cjsImpl = require('node:readline'); - * - * assert.strictEqual(typeof esmImpl.cursorTo, 'function'); - * assert.strictEqual(typeof cjsImpl.cursorTo, 'function'); - * assert.strictEqual(esmImpl.fn, undefined); - * assert.strictEqual(cjsImpl.fn, undefined); - * }); - * ``` - * @since v22.3.0 - * @experimental - * @param specifier A string identifying the module to mock. - * @param options Optional configuration options for the mock module. - */ - module(specifier: string | URL, options?: MockModuleOptions): MockModuleContext; - /** - * Creates a mock for a property value on an object. This allows you to track and control access to a specific property, - * including how many times it is read (getter) or written (setter), and to restore the original value after mocking. - * - * ```js - * test('mocks a property value', (t) => { - * const obj = { foo: 42 }; - * const prop = t.mock.property(obj, 'foo', 100); - * - * assert.strictEqual(obj.foo, 100); - * assert.strictEqual(prop.mock.accessCount(), 1); - * assert.strictEqual(prop.mock.accesses[0].type, 'get'); - * assert.strictEqual(prop.mock.accesses[0].value, 100); - * - * obj.foo = 200; - * assert.strictEqual(prop.mock.accessCount(), 2); - * assert.strictEqual(prop.mock.accesses[1].type, 'set'); - * assert.strictEqual(prop.mock.accesses[1].value, 200); - * - * prop.mock.restore(); - * assert.strictEqual(obj.foo, 42); - * }); - * ``` - * @since v24.3.0 - * @param object The object whose value is being mocked. - * @param propertyName The identifier of the property on `object` to mock. - * @param value An optional value used as the mock value - * for `object[propertyName]`. **Default:** The original property value. - * @returns A proxy to the mocked object. The mocked object contains a - * special `mock` property, which is an instance of [`MockPropertyContext`][], and - * can be used for inspecting and changing the behavior of the mocked property. - */ - property< - MockedObject extends object, - PropertyName extends keyof MockedObject, - >( - object: MockedObject, - property: PropertyName, - value?: MockedObject[PropertyName], - ): MockedObject & { mock: MockPropertyContext }; - /** - * This function restores the default behavior of all mocks that were previously - * created by this `MockTracker` and disassociates the mocks from the `MockTracker` instance. Once disassociated, the mocks can still be used, but the `MockTracker` instance can no longer be - * used to reset their behavior or - * otherwise interact with them. - * - * After each test completes, this function is called on the test context's `MockTracker`. If the global `MockTracker` is used extensively, calling this - * function manually is recommended. - * @since v19.1.0, v18.13.0 - */ - reset(): void; - /** - * This function restores the default behavior of all mocks that were previously - * created by this `MockTracker`. Unlike `mock.reset()`, `mock.restoreAll()` does - * not disassociate the mocks from the `MockTracker` instance. - * @since v19.1.0, v18.13.0 - */ - restoreAll(): void; - readonly timers: MockTimers; - } - const mock: MockTracker; - interface MockFunctionCall< - F extends Function, - ReturnType = F extends (...args: any) => infer T ? T - : F extends abstract new(...args: any) => infer T ? T - : unknown, - Args = F extends (...args: infer Y) => any ? Y - : F extends abstract new(...args: infer Y) => any ? Y - : unknown[], - > { - /** - * An array of the arguments passed to the mock function. - */ - arguments: Args; - /** - * If the mocked function threw then this property contains the thrown value. - */ - error: unknown | undefined; - /** - * The value returned by the mocked function. - * - * If the mocked function threw, it will be `undefined`. - */ - result: ReturnType | undefined; - /** - * An `Error` object whose stack can be used to determine the callsite of the mocked function invocation. - */ - stack: Error; - /** - * If the mocked function is a constructor, this field contains the class being constructed. - * Otherwise this will be `undefined`. - */ - target: F extends abstract new(...args: any) => any ? F : undefined; - /** - * The mocked function's `this` value. - */ - this: unknown; - } - /** - * The `MockFunctionContext` class is used to inspect or manipulate the behavior of - * mocks created via the `MockTracker` APIs. - * @since v19.1.0, v18.13.0 - */ - interface MockFunctionContext { - /** - * A getter that returns a copy of the internal array used to track calls to the - * mock. Each entry in the array is an object with the following properties. - * @since v19.1.0, v18.13.0 - */ - readonly calls: MockFunctionCall[]; - /** - * This function returns the number of times that this mock has been invoked. This - * function is more efficient than checking `ctx.calls.length` because `ctx.calls` is a getter that creates a copy of the internal call tracking array. - * @since v19.1.0, v18.13.0 - * @return The number of times that this mock has been invoked. - */ - callCount(): number; - /** - * This function is used to change the behavior of an existing mock. - * - * The following example creates a mock function using `t.mock.fn()`, calls the - * mock function, and then changes the mock implementation to a different function. - * - * ```js - * test('changes a mock behavior', (t) => { - * let cnt = 0; - * - * function addOne() { - * cnt++; - * return cnt; - * } - * - * function addTwo() { - * cnt += 2; - * return cnt; - * } - * - * const fn = t.mock.fn(addOne); - * - * assert.strictEqual(fn(), 1); - * fn.mock.mockImplementation(addTwo); - * assert.strictEqual(fn(), 3); - * assert.strictEqual(fn(), 5); - * }); - * ``` - * @since v19.1.0, v18.13.0 - * @param implementation The function to be used as the mock's new implementation. - */ - mockImplementation(implementation: F): void; - /** - * This function is used to change the behavior of an existing mock for a single - * invocation. Once invocation `onCall` has occurred, the mock will revert to - * whatever behavior it would have used had `mockImplementationOnce()` not been - * called. - * - * The following example creates a mock function using `t.mock.fn()`, calls the - * mock function, changes the mock implementation to a different function for the - * next invocation, and then resumes its previous behavior. - * - * ```js - * test('changes a mock behavior once', (t) => { - * let cnt = 0; - * - * function addOne() { - * cnt++; - * return cnt; - * } - * - * function addTwo() { - * cnt += 2; - * return cnt; - * } - * - * const fn = t.mock.fn(addOne); - * - * assert.strictEqual(fn(), 1); - * fn.mock.mockImplementationOnce(addTwo); - * assert.strictEqual(fn(), 3); - * assert.strictEqual(fn(), 4); - * }); - * ``` - * @since v19.1.0, v18.13.0 - * @param implementation The function to be used as the mock's implementation for the invocation number specified by `onCall`. - * @param onCall The invocation number that will use `implementation`. If the specified invocation has already occurred then an exception is thrown. - */ - mockImplementationOnce(implementation: F, onCall?: number): void; - /** - * Resets the call history of the mock function. - * @since v19.3.0, v18.13.0 - */ - resetCalls(): void; - /** - * Resets the implementation of the mock function to its original behavior. The - * mock can still be used after calling this function. - * @since v19.1.0, v18.13.0 - */ - restore(): void; - } - /** - * @since v22.3.0 - * @experimental - */ - interface MockModuleContext { - /** - * Resets the implementation of the mock module. - * @since v22.3.0 - */ - restore(): void; - } - /** - * @since v24.3.0 - */ - class MockPropertyContext { - /** - * A getter that returns a copy of the internal array used to track accesses (get/set) to - * the mocked property. Each entry in the array is an object with the following properties: - */ - readonly accesses: Array<{ - type: "get" | "set"; - value: PropertyType; - stack: Error; - }>; - /** - * This function returns the number of times that the property was accessed. - * This function is more efficient than checking `ctx.accesses.length` because - * `ctx.accesses` is a getter that creates a copy of the internal access tracking array. - * @returns The number of times that the property was accessed (read or written). - */ - accessCount(): number; - /** - * This function is used to change the value returned by the mocked property getter. - * @param value The new value to be set as the mocked property value. - */ - mockImplementation(value: PropertyType): void; - /** - * This function is used to change the behavior of an existing mock for a single - * invocation. Once invocation `onAccess` has occurred, the mock will revert to - * whatever behavior it would have used had `mockImplementationOnce()` not been - * called. - * - * The following example creates a mock function using `t.mock.property()`, calls the - * mock property, changes the mock implementation to a different value for the - * next invocation, and then resumes its previous behavior. - * - * ```js - * test('changes a mock behavior once', (t) => { - * const obj = { foo: 1 }; - * - * const prop = t.mock.property(obj, 'foo', 5); - * - * assert.strictEqual(obj.foo, 5); - * prop.mock.mockImplementationOnce(25); - * assert.strictEqual(obj.foo, 25); - * assert.strictEqual(obj.foo, 5); - * }); - * ``` - * @param value The value to be used as the mock's - * implementation for the invocation number specified by `onAccess`. - * @param onAccess The invocation number that will use `value`. If - * the specified invocation has already occurred then an exception is thrown. - * **Default:** The number of the next invocation. - */ - mockImplementationOnce(value: PropertyType, onAccess?: number): void; - /** - * Resets the access history of the mocked property. - */ - resetAccesses(): void; - /** - * Resets the implementation of the mock property to its original behavior. The - * mock can still be used after calling this function. - */ - restore(): void; - } - interface MockTimersOptions { - apis: ReadonlyArray<"setInterval" | "setTimeout" | "setImmediate" | "Date">; - now?: number | Date | undefined; - } - /** - * Mocking timers is a technique commonly used in software testing to simulate and - * control the behavior of timers, such as `setInterval` and `setTimeout`, - * without actually waiting for the specified time intervals. - * - * The MockTimers API also allows for mocking of the `Date` constructor and - * `setImmediate`/`clearImmediate` functions. - * - * The `MockTracker` provides a top-level `timers` export - * which is a `MockTimers` instance. - * @since v20.4.0 - */ - interface MockTimers { - /** - * Enables timer mocking for the specified timers. - * - * **Note:** When you enable mocking for a specific timer, its associated - * clear function will also be implicitly mocked. - * - * **Note:** Mocking `Date` will affect the behavior of the mocked timers - * as they use the same internal clock. - * - * Example usage without setting initial time: - * - * ```js - * import { mock } from 'node:test'; - * mock.timers.enable({ apis: ['setInterval', 'Date'], now: 1234 }); - * ``` - * - * The above example enables mocking for the `Date` constructor, `setInterval` timer and - * implicitly mocks the `clearInterval` function. Only the `Date` constructor from `globalThis`, - * `setInterval` and `clearInterval` functions from `node:timers`, `node:timers/promises`, and `globalThis` will be mocked. - * - * Example usage with initial time set - * - * ```js - * import { mock } from 'node:test'; - * mock.timers.enable({ apis: ['Date'], now: 1000 }); - * ``` - * - * Example usage with initial Date object as time set - * - * ```js - * import { mock } from 'node:test'; - * mock.timers.enable({ apis: ['Date'], now: new Date() }); - * ``` - * - * Alternatively, if you call `mock.timers.enable()` without any parameters: - * - * All timers (`'setInterval'`, `'clearInterval'`, `'Date'`, `'setImmediate'`, `'clearImmediate'`, `'setTimeout'`, and `'clearTimeout'`) - * will be mocked. - * - * The `setInterval`, `clearInterval`, `setTimeout`, and `clearTimeout` functions from `node:timers`, `node:timers/promises`, - * and `globalThis` will be mocked. - * The `Date` constructor from `globalThis` will be mocked. - * - * If there is no initial epoch set, the initial date will be based on 0 in the Unix epoch. This is `January 1st, 1970, 00:00:00 UTC`. You can - * set an initial date by passing a now property to the `.enable()` method. This value will be used as the initial date for the mocked Date - * object. It can either be a positive integer, or another Date object. - * @since v20.4.0 - */ - enable(options?: MockTimersOptions): void; - /** - * Sets the current Unix timestamp that will be used as reference for any mocked - * `Date` objects. - * - * ```js - * import assert from 'node:assert'; - * import { test } from 'node:test'; - * - * test('runAll functions following the given order', (context) => { - * const now = Date.now(); - * const setTime = 1000; - * // Date.now is not mocked - * assert.deepStrictEqual(Date.now(), now); - * - * context.mock.timers.enable({ apis: ['Date'] }); - * context.mock.timers.setTime(setTime); - * // Date.now is now 1000 - * assert.strictEqual(Date.now(), setTime); - * }); - * ``` - * @since v21.2.0, v20.11.0 - */ - setTime(milliseconds: number): void; - /** - * This function restores the default behavior of all mocks that were previously - * created by this `MockTimers` instance and disassociates the mocks - * from the `MockTracker` instance. - * - * **Note:** After each test completes, this function is called on - * the test context's `MockTracker`. - * - * ```js - * import { mock } from 'node:test'; - * mock.timers.reset(); - * ``` - * @since v20.4.0 - */ - reset(): void; - /** - * Advances time for all mocked timers. - * - * **Note:** This diverges from how `setTimeout` in Node.js behaves and accepts - * only positive numbers. In Node.js, `setTimeout` with negative numbers is - * only supported for web compatibility reasons. - * - * The following example mocks a `setTimeout` function and - * by using `.tick` advances in - * time triggering all pending timers. - * - * ```js - * import assert from 'node:assert'; - * import { test } from 'node:test'; - * - * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { - * const fn = context.mock.fn(); - * - * context.mock.timers.enable({ apis: ['setTimeout'] }); - * - * setTimeout(fn, 9999); - * - * assert.strictEqual(fn.mock.callCount(), 0); - * - * // Advance in time - * context.mock.timers.tick(9999); - * - * assert.strictEqual(fn.mock.callCount(), 1); - * }); - * ``` - * - * Alternativelly, the `.tick` function can be called many times - * - * ```js - * import assert from 'node:assert'; - * import { test } from 'node:test'; - * - * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { - * const fn = context.mock.fn(); - * context.mock.timers.enable({ apis: ['setTimeout'] }); - * const nineSecs = 9000; - * setTimeout(fn, nineSecs); - * - * const twoSeconds = 3000; - * context.mock.timers.tick(twoSeconds); - * context.mock.timers.tick(twoSeconds); - * context.mock.timers.tick(twoSeconds); - * - * assert.strictEqual(fn.mock.callCount(), 1); - * }); - * ``` - * - * Advancing time using `.tick` will also advance the time for any `Date` object - * created after the mock was enabled (if `Date` was also set to be mocked). - * - * ```js - * import assert from 'node:assert'; - * import { test } from 'node:test'; - * - * test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => { - * const fn = context.mock.fn(); - * - * context.mock.timers.enable({ apis: ['setTimeout', 'Date'] }); - * setTimeout(fn, 9999); - * - * assert.strictEqual(fn.mock.callCount(), 0); - * assert.strictEqual(Date.now(), 0); - * - * // Advance in time - * context.mock.timers.tick(9999); - * assert.strictEqual(fn.mock.callCount(), 1); - * assert.strictEqual(Date.now(), 9999); - * }); - * ``` - * @since v20.4.0 - */ - tick(milliseconds: number): void; - /** - * Triggers all pending mocked timers immediately. If the `Date` object is also - * mocked, it will also advance the `Date` object to the furthest timer's time. - * - * The example below triggers all pending timers immediately, - * causing them to execute without any delay. - * - * ```js - * import assert from 'node:assert'; - * import { test } from 'node:test'; - * - * test('runAll functions following the given order', (context) => { - * context.mock.timers.enable({ apis: ['setTimeout', 'Date'] }); - * const results = []; - * setTimeout(() => results.push(1), 9999); - * - * // Notice that if both timers have the same timeout, - * // the order of execution is guaranteed - * setTimeout(() => results.push(3), 8888); - * setTimeout(() => results.push(2), 8888); - * - * assert.deepStrictEqual(results, []); - * - * context.mock.timers.runAll(); - * assert.deepStrictEqual(results, [3, 2, 1]); - * // The Date object is also advanced to the furthest timer's time - * assert.strictEqual(Date.now(), 9999); - * }); - * ``` - * - * **Note:** The `runAll()` function is specifically designed for - * triggering timers in the context of timer mocking. - * It does not have any effect on real-time system - * clocks or actual timers outside of the mocking environment. - * @since v20.4.0 - */ - runAll(): void; - /** - * Calls {@link MockTimers.reset()}. - */ - [Symbol.dispose](): void; - } - /** - * An object whose methods are used to configure available assertions on the - * `TestContext` objects in the current process. The methods from `node:assert` - * and snapshot testing functions are available by default. - * - * It is possible to apply the same configuration to all files by placing common - * configuration code in a module - * preloaded with `--require` or `--import`. - * @since v22.14.0 - */ - namespace assert { - /** - * Defines a new assertion function with the provided name and function. If an - * assertion already exists with the same name, it is overwritten. - * @since v22.14.0 - */ - function register(name: string, fn: (this: TestContext, ...args: any[]) => void): void; - } - /** - * @since v22.3.0 - */ - namespace snapshot { - /** - * This function is used to customize the default serialization mechanism used by the test runner. - * - * By default, the test runner performs serialization by calling `JSON.stringify(value, null, 2)` on the provided value. - * `JSON.stringify()` does have limitations regarding circular structures and supported data types. - * If a more robust serialization mechanism is required, this function should be used to specify a list of custom serializers. - * - * Serializers are called in order, with the output of the previous serializer passed as input to the next. - * The final result must be a string value. - * @since v22.3.0 - * @param serializers An array of synchronous functions used as the default serializers for snapshot tests. - */ - function setDefaultSnapshotSerializers(serializers: ReadonlyArray<(value: any) => any>): void; - /** - * This function is used to set a custom resolver for the location of the snapshot file used for snapshot testing. - * By default, the snapshot filename is the same as the entry point filename with `.snapshot` appended. - * @since v22.3.0 - * @param fn A function used to compute the location of the snapshot file. - * The function receives the path of the test file as its only argument. If the - * test is not associated with a file (for example in the REPL), the input is - * undefined. `fn()` must return a string specifying the location of the snapshot file. - */ - function setResolveSnapshotPath(fn: (path: string | undefined) => string): void; - } - } - type FunctionPropertyNames = { - [K in keyof T]: T[K] extends Function ? K : never; - }[keyof T]; - export = test; -} diff --git a/skills/flight-finder/node_modules/@types/node/test/reporters.d.ts b/skills/flight-finder/node_modules/@types/node/test/reporters.d.ts deleted file mode 100644 index 465e80d..0000000 --- a/skills/flight-finder/node_modules/@types/node/test/reporters.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -/** - * The `node:test` module supports passing `--test-reporter` - * flags for the test runner to use a specific reporter. - * - * The following built-reporters are supported: - * - * * `spec` - * The `spec` reporter outputs the test results in a human-readable format. This - * is the default reporter. - * - * * `tap` - * The `tap` reporter outputs the test results in the [TAP](https://testanything.org/) format. - * - * * `dot` - * The `dot` reporter outputs the test results in a compact format, - * where each passing test is represented by a `.`, - * and each failing test is represented by a `X`. - * - * * `junit` - * The junit reporter outputs test results in a jUnit XML format - * - * * `lcov` - * The `lcov` reporter outputs test coverage when used with the - * `--experimental-test-coverage` flag. - * - * The exact output of these reporters is subject to change between versions of - * Node.js, and should not be relied on programmatically. If programmatic access - * to the test runner's output is required, use the events emitted by the - * `TestsStream`. - * - * The reporters are available via the `node:test/reporters` module: - * - * ```js - * import { tap, spec, dot, junit, lcov } from 'node:test/reporters'; - * ``` - * @since v19.9.0, v18.17.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/test/reporters.js) - */ -declare module "node:test/reporters" { - import { Transform, TransformOptions } from "node:stream"; - import { EventData } from "node:test"; - type TestEvent = - | { type: "test:coverage"; data: EventData.TestCoverage } - | { type: "test:complete"; data: EventData.TestComplete } - | { type: "test:dequeue"; data: EventData.TestDequeue } - | { type: "test:diagnostic"; data: EventData.TestDiagnostic } - | { type: "test:enqueue"; data: EventData.TestEnqueue } - | { type: "test:fail"; data: EventData.TestFail } - | { type: "test:pass"; data: EventData.TestPass } - | { type: "test:plan"; data: EventData.TestPlan } - | { type: "test:start"; data: EventData.TestStart } - | { type: "test:stderr"; data: EventData.TestStderr } - | { type: "test:stdout"; data: EventData.TestStdout } - | { type: "test:summary"; data: EventData.TestSummary } - | { type: "test:watch:drained"; data: undefined } - | { type: "test:watch:restarted"; data: undefined }; - interface ReporterConstructorWrapper Transform> { - new(...args: ConstructorParameters): InstanceType; - (...args: ConstructorParameters): InstanceType; - } - /** - * The `dot` reporter outputs the test results in a compact format, - * where each passing test is represented by a `.`, - * and each failing test is represented by a `X`. - * @since v20.0.0 - */ - function dot(source: AsyncIterable): NodeJS.AsyncIterator; - /** - * The `tap` reporter outputs the test results in the [TAP](https://testanything.org/) format. - * @since v20.0.0 - */ - function tap(source: AsyncIterable): NodeJS.AsyncIterator; - class SpecReporter extends Transform { - constructor(); - } - /** - * The `spec` reporter outputs the test results in a human-readable format. - * @since v20.0.0 - */ - const spec: ReporterConstructorWrapper; - /** - * The `junit` reporter outputs test results in a jUnit XML format. - * @since v21.0.0 - */ - function junit(source: AsyncIterable): NodeJS.AsyncIterator; - class LcovReporter extends Transform { - constructor(options?: Omit); - } - /** - * The `lcov` reporter outputs test coverage when used with the - * [`--experimental-test-coverage`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--experimental-test-coverage) flag. - * @since v22.0.0 - */ - const lcov: ReporterConstructorWrapper; - export { dot, junit, lcov, spec, tap, TestEvent }; -} diff --git a/skills/flight-finder/node_modules/@types/node/timers.d.ts b/skills/flight-finder/node_modules/@types/node/timers.d.ts deleted file mode 100644 index 00a8cd0..0000000 --- a/skills/flight-finder/node_modules/@types/node/timers.d.ts +++ /dev/null @@ -1,159 +0,0 @@ -/** - * The `timer` module exposes a global API for scheduling functions to - * be called at some future period of time. Because the timer functions are - * globals, there is no need to import `node:timers` to use the API. - * - * The timer functions within Node.js implement a similar API as the timers API - * provided by Web Browsers but use a different internal implementation that is - * built around the Node.js [Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout). - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/timers.js) - */ -declare module "node:timers" { - import { Abortable } from "node:events"; - import * as promises from "node:timers/promises"; - export interface TimerOptions extends Abortable { - /** - * Set to `false` to indicate that the scheduled `Timeout` - * should not require the Node.js event loop to remain active. - * @default true - */ - ref?: boolean | undefined; - } - global { - namespace NodeJS { - /** - * This object is created internally and is returned from `setImmediate()`. It - * can be passed to `clearImmediate()` in order to cancel the scheduled - * actions. - * - * By default, when an immediate is scheduled, the Node.js event loop will continue - * running as long as the immediate is active. The `Immediate` object returned by - * `setImmediate()` exports both `immediate.ref()` and `immediate.unref()` - * functions that can be used to control this default behavior. - */ - interface Immediate extends RefCounted, Disposable { - /** - * If true, the `Immediate` object will keep the Node.js event loop active. - * @since v11.0.0 - */ - hasRef(): boolean; - /** - * When called, requests that the Node.js event loop _not_ exit so long as the - * `Immediate` is active. Calling `immediate.ref()` multiple times will have no - * effect. - * - * By default, all `Immediate` objects are "ref'ed", making it normally unnecessary - * to call `immediate.ref()` unless `immediate.unref()` had been called previously. - * @since v9.7.0 - * @returns a reference to `immediate` - */ - ref(): this; - /** - * When called, the active `Immediate` object will not require the Node.js event - * loop to remain active. If there is no other activity keeping the event loop - * running, the process may exit before the `Immediate` object's callback is - * invoked. Calling `immediate.unref()` multiple times will have no effect. - * @since v9.7.0 - * @returns a reference to `immediate` - */ - unref(): this; - /** - * Cancels the immediate. This is similar to calling `clearImmediate()`. - * @since v20.5.0, v18.18.0 - */ - [Symbol.dispose](): void; - _onImmediate(...args: any[]): void; - } - // Legacy interface used in Node.js v9 and prior - // TODO: remove in a future major version bump - /** @deprecated Use `NodeJS.Timeout` instead. */ - interface Timer extends RefCounted { - hasRef(): boolean; - refresh(): this; - [Symbol.toPrimitive](): number; - } - /** - * This object is created internally and is returned from `setTimeout()` and - * `setInterval()`. It can be passed to either `clearTimeout()` or - * `clearInterval()` in order to cancel the scheduled actions. - * - * By default, when a timer is scheduled using either `setTimeout()` or - * `setInterval()`, the Node.js event loop will continue running as long as the - * timer is active. Each of the `Timeout` objects returned by these functions - * export both `timeout.ref()` and `timeout.unref()` functions that can be used to - * control this default behavior. - */ - interface Timeout extends RefCounted, Disposable, Timer { - /** - * Cancels the timeout. - * @since v0.9.1 - * @legacy Use `clearTimeout()` instead. - * @returns a reference to `timeout` - */ - close(): this; - /** - * If true, the `Timeout` object will keep the Node.js event loop active. - * @since v11.0.0 - */ - hasRef(): boolean; - /** - * When called, requests that the Node.js event loop _not_ exit so long as the - * `Timeout` is active. Calling `timeout.ref()` multiple times will have no effect. - * - * By default, all `Timeout` objects are "ref'ed", making it normally unnecessary - * to call `timeout.ref()` unless `timeout.unref()` had been called previously. - * @since v0.9.1 - * @returns a reference to `timeout` - */ - ref(): this; - /** - * Sets the timer's start time to the current time, and reschedules the timer to - * call its callback at the previously specified duration adjusted to the current - * time. This is useful for refreshing a timer without allocating a new - * JavaScript object. - * - * Using this on a timer that has already called its callback will reactivate the - * timer. - * @since v10.2.0 - * @returns a reference to `timeout` - */ - refresh(): this; - /** - * When called, the active `Timeout` object will not require the Node.js event loop - * to remain active. If there is no other activity keeping the event loop running, - * the process may exit before the `Timeout` object's callback is invoked. Calling - * `timeout.unref()` multiple times will have no effect. - * @since v0.9.1 - * @returns a reference to `timeout` - */ - unref(): this; - /** - * Coerce a `Timeout` to a primitive. The primitive can be used to - * clear the `Timeout`. The primitive can only be used in the - * same thread where the timeout was created. Therefore, to use it - * across `worker_threads` it must first be passed to the correct - * thread. This allows enhanced compatibility with browser - * `setTimeout()` and `setInterval()` implementations. - * @since v14.9.0, v12.19.0 - */ - [Symbol.toPrimitive](): number; - /** - * Cancels the timeout. - * @since v20.5.0, v18.18.0 - */ - [Symbol.dispose](): void; - _onTimeout(...args: any[]): void; - } - } - } - import clearImmediate = globalThis.clearImmediate; - import clearInterval = globalThis.clearInterval; - import clearTimeout = globalThis.clearTimeout; - import setImmediate = globalThis.setImmediate; - import setInterval = globalThis.setInterval; - import setTimeout = globalThis.setTimeout; - export { clearImmediate, clearInterval, clearTimeout, promises, setImmediate, setInterval, setTimeout }; -} -declare module "timers" { - export * from "node:timers"; -} diff --git a/skills/flight-finder/node_modules/@types/node/timers/promises.d.ts b/skills/flight-finder/node_modules/@types/node/timers/promises.d.ts deleted file mode 100644 index 85bc831..0000000 --- a/skills/flight-finder/node_modules/@types/node/timers/promises.d.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * The `timers/promises` API provides an alternative set of timer functions - * that return `Promise` objects. The API is accessible via - * `require('node:timers/promises')`. - * - * ```js - * import { - * setTimeout, - * setImmediate, - * setInterval, - * } from 'node:timers/promises'; - * ``` - * @since v15.0.0 - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/timers/promises.js) - */ -declare module "node:timers/promises" { - import { TimerOptions } from "node:timers"; - /** - * ```js - * import { - * setTimeout, - * } from 'node:timers/promises'; - * - * const res = await setTimeout(100, 'result'); - * - * console.log(res); // Prints 'result' - * ``` - * @since v15.0.0 - * @param delay The number of milliseconds to wait before fulfilling the - * promise. **Default:** `1`. - * @param value A value with which the promise is fulfilled. - */ - function setTimeout(delay?: number, value?: T, options?: TimerOptions): Promise; - /** - * ```js - * import { - * setImmediate, - * } from 'node:timers/promises'; - * - * const res = await setImmediate('result'); - * - * console.log(res); // Prints 'result' - * ``` - * @since v15.0.0 - * @param value A value with which the promise is fulfilled. - */ - function setImmediate(value?: T, options?: TimerOptions): Promise; - /** - * Returns an async iterator that generates values in an interval of `delay` ms. - * If `ref` is `true`, you need to call `next()` of async iterator explicitly - * or implicitly to keep the event loop alive. - * - * ```js - * import { - * setInterval, - * } from 'node:timers/promises'; - * - * const interval = 100; - * for await (const startTime of setInterval(interval, Date.now())) { - * const now = Date.now(); - * console.log(now); - * if ((now - startTime) > 1000) - * break; - * } - * console.log(Date.now()); - * ``` - * @since v15.9.0 - * @param delay The number of milliseconds to wait between iterations. - * **Default:** `1`. - * @param value A value with which the iterator returns. - */ - function setInterval(delay?: number, value?: T, options?: TimerOptions): NodeJS.AsyncIterator; - interface Scheduler { - /** - * An experimental API defined by the [Scheduling APIs](https://github.com/WICG/scheduling-apis) draft specification - * being developed as a standard Web Platform API. - * - * Calling `timersPromises.scheduler.wait(delay, options)` is roughly equivalent - * to calling `timersPromises.setTimeout(delay, undefined, options)` except that - * the `ref` option is not supported. - * - * ```js - * import { scheduler } from 'node:timers/promises'; - * - * await scheduler.wait(1000); // Wait one second before continuing - * ``` - * @since v17.3.0, v16.14.0 - * @experimental - * @param delay The number of milliseconds to wait before resolving the - * promise. - */ - wait(delay: number, options?: { signal?: AbortSignal }): Promise; - /** - * An experimental API defined by the [Scheduling APIs](https://github.com/WICG/scheduling-apis) draft specification - * being developed as a standard Web Platform API. - * - * Calling `timersPromises.scheduler.yield()` is equivalent to calling - * `timersPromises.setImmediate()` with no arguments. - * @since v17.3.0, v16.14.0 - * @experimental - */ - yield(): Promise; - } - const scheduler: Scheduler; -} -declare module "timers/promises" { - export * from "node:timers/promises"; -} diff --git a/skills/flight-finder/node_modules/@types/node/tls.d.ts b/skills/flight-finder/node_modules/@types/node/tls.d.ts deleted file mode 100644 index a2c29df..0000000 --- a/skills/flight-finder/node_modules/@types/node/tls.d.ts +++ /dev/null @@ -1,1203 +0,0 @@ -/** - * The `node:tls` module provides an implementation of the Transport Layer Security - * (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. - * The module can be accessed using: - * - * ```js - * import tls from 'node:tls'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/tls.js) - */ -declare module "node:tls" { - import { NonSharedBuffer } from "node:buffer"; - import { X509Certificate } from "node:crypto"; - import * as net from "node:net"; - import * as stream from "stream"; - const CLIENT_RENEG_LIMIT: number; - const CLIENT_RENEG_WINDOW: number; - interface Certificate extends NodeJS.Dict { - /** - * Country code. - */ - C?: string | string[]; - /** - * Street. - */ - ST?: string | string[]; - /** - * Locality. - */ - L?: string | string[]; - /** - * Organization. - */ - O?: string | string[]; - /** - * Organizational unit. - */ - OU?: string | string[]; - /** - * Common name. - */ - CN?: string | string[]; - } - interface PeerCertificate { - /** - * `true` if a Certificate Authority (CA), `false` otherwise. - * @since v18.13.0 - */ - ca: boolean; - /** - * The DER encoded X.509 certificate data. - */ - raw: NonSharedBuffer; - /** - * The certificate subject. - */ - subject: Certificate; - /** - * The certificate issuer, described in the same terms as the `subject`. - */ - issuer: Certificate; - /** - * The date-time the certificate is valid from. - */ - valid_from: string; - /** - * The date-time the certificate is valid to. - */ - valid_to: string; - /** - * The certificate serial number, as a hex string. - */ - serialNumber: string; - /** - * The SHA-1 digest of the DER encoded certificate. - * It is returned as a `:` separated hexadecimal string. - */ - fingerprint: string; - /** - * The SHA-256 digest of the DER encoded certificate. - * It is returned as a `:` separated hexadecimal string. - */ - fingerprint256: string; - /** - * The SHA-512 digest of the DER encoded certificate. - * It is returned as a `:` separated hexadecimal string. - */ - fingerprint512: string; - /** - * The extended key usage, a set of OIDs. - */ - ext_key_usage?: string[]; - /** - * A string containing concatenated names for the subject, - * an alternative to the `subject` names. - */ - subjectaltname?: string; - /** - * An array describing the AuthorityInfoAccess, used with OCSP. - */ - infoAccess?: NodeJS.Dict; - /** - * For RSA keys: The RSA bit size. - * - * For EC keys: The key size in bits. - */ - bits?: number; - /** - * The RSA exponent, as a string in hexadecimal number notation. - */ - exponent?: string; - /** - * The RSA modulus, as a hexadecimal string. - */ - modulus?: string; - /** - * The public key. - */ - pubkey?: NonSharedBuffer; - /** - * The ASN.1 name of the OID of the elliptic curve. - * Well-known curves are identified by an OID. - * While it is unusual, it is possible that the curve - * is identified by its mathematical properties, - * in which case it will not have an OID. - */ - asn1Curve?: string; - /** - * The NIST name for the elliptic curve, if it has one - * (not all well-known curves have been assigned names by NIST). - */ - nistCurve?: string; - } - interface DetailedPeerCertificate extends PeerCertificate { - /** - * The issuer certificate object. - * For self-signed certificates, this may be a circular reference. - */ - issuerCertificate: DetailedPeerCertificate; - } - interface CipherNameAndProtocol { - /** - * The cipher name. - */ - name: string; - /** - * SSL/TLS protocol version. - */ - version: string; - /** - * IETF name for the cipher suite. - */ - standardName: string; - } - interface EphemeralKeyInfo { - /** - * The supported types are 'DH' and 'ECDH'. - */ - type: string; - /** - * The name property is available only when type is 'ECDH'. - */ - name?: string | undefined; - /** - * The size of parameter of an ephemeral key exchange. - */ - size: number; - } - interface KeyObject { - /** - * Private keys in PEM format. - */ - pem: string | Buffer; - /** - * Optional passphrase. - */ - passphrase?: string | undefined; - } - interface PxfObject { - /** - * PFX or PKCS12 encoded private key and certificate chain. - */ - buf: string | Buffer; - /** - * Optional passphrase. - */ - passphrase?: string | undefined; - } - interface TLSSocketOptions extends SecureContextOptions, CommonConnectionOptions { - /** - * If true the TLS socket will be instantiated in server-mode. - * Defaults to false. - */ - isServer?: boolean | undefined; - /** - * An optional net.Server instance. - */ - server?: net.Server | undefined; - /** - * An optional Buffer instance containing a TLS session. - */ - session?: Buffer | undefined; - /** - * If true, specifies that the OCSP status request extension will be - * added to the client hello and an 'OCSPResponse' event will be - * emitted on the socket before establishing a secure communication - */ - requestOCSP?: boolean | undefined; - } - interface TLSSocketEventMap extends net.SocketEventMap { - "keylog": [line: NonSharedBuffer]; - "OCSPResponse": [response: NonSharedBuffer]; - "secure": []; - "secureConnect": []; - "session": [session: NonSharedBuffer]; - } - /** - * Performs transparent encryption of written data and all required TLS - * negotiation. - * - * Instances of `tls.TLSSocket` implement the duplex `Stream` interface. - * - * Methods that return TLS connection metadata (e.g.{@link TLSSocket.getPeerCertificate}) will only return data while the - * connection is open. - * @since v0.11.4 - */ - class TLSSocket extends net.Socket { - /** - * Construct a new tls.TLSSocket object from an existing TCP socket. - */ - constructor(socket: net.Socket | stream.Duplex, options?: TLSSocketOptions); - /** - * This property is `true` if the peer certificate was signed by one of the CAs - * specified when creating the `tls.TLSSocket` instance, otherwise `false`. - * @since v0.11.4 - */ - authorized: boolean; - /** - * Returns the reason why the peer's certificate was not been verified. This - * property is set only when `tlsSocket.authorized === false`. - * @since v0.11.4 - */ - authorizationError: Error; - /** - * Always returns `true`. This may be used to distinguish TLS sockets from regular`net.Socket` instances. - * @since v0.11.4 - */ - encrypted: true; - /** - * String containing the selected ALPN protocol. - * Before a handshake has completed, this value is always null. - * When a handshake is completed but not ALPN protocol was selected, tlsSocket.alpnProtocol equals false. - */ - alpnProtocol: string | false | null; - /** - * String containing the server name requested via SNI (Server Name Indication) TLS extension. - */ - servername: string | false | null; - /** - * Returns an object representing the local certificate. The returned object has - * some properties corresponding to the fields of the certificate. - * - * See {@link TLSSocket.getPeerCertificate} for an example of the certificate - * structure. - * - * If there is no local certificate, an empty object will be returned. If the - * socket has been destroyed, `null` will be returned. - * @since v11.2.0 - */ - getCertificate(): PeerCertificate | object | null; - /** - * Returns an object containing information on the negotiated cipher suite. - * - * For example, a TLSv1.2 protocol with AES256-SHA cipher: - * - * ```json - * { - * "name": "AES256-SHA", - * "standardName": "TLS_RSA_WITH_AES_256_CBC_SHA", - * "version": "SSLv3" - * } - * ``` - * - * See [SSL\_CIPHER\_get\_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. - * @since v0.11.4 - */ - getCipher(): CipherNameAndProtocol; - /** - * Returns an object representing the type, name, and size of parameter of - * an ephemeral key exchange in `perfect forward secrecy` on a client - * connection. It returns an empty object when the key exchange is not - * ephemeral. As this is only supported on a client socket; `null` is returned - * if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The `name` property is available only when type is `'ECDH'`. - * - * For example: `{ type: 'ECDH', name: 'prime256v1', size: 256 }`. - * @since v5.0.0 - */ - getEphemeralKeyInfo(): EphemeralKeyInfo | object | null; - /** - * As the `Finished` messages are message digests of the complete handshake - * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can - * be used for external authentication procedures when the authentication - * provided by SSL/TLS is not desired or is not enough. - * - * Corresponds to the `SSL_get_finished` routine in OpenSSL and may be used - * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). - * @since v9.9.0 - * @return The latest `Finished` message that has been sent to the socket as part of a SSL/TLS handshake, or `undefined` if no `Finished` message has been sent yet. - */ - getFinished(): NonSharedBuffer | undefined; - /** - * Returns an object representing the peer's certificate. If the peer does not - * provide a certificate, an empty object will be returned. If the socket has been - * destroyed, `null` will be returned. - * - * If the full certificate chain was requested, each certificate will include an`issuerCertificate` property containing an object representing its issuer's - * certificate. - * @since v0.11.4 - * @param detailed Include the full certificate chain if `true`, otherwise include just the peer's certificate. - * @return A certificate object. - */ - getPeerCertificate(detailed: true): DetailedPeerCertificate; - getPeerCertificate(detailed?: false): PeerCertificate; - getPeerCertificate(detailed?: boolean): PeerCertificate | DetailedPeerCertificate; - /** - * As the `Finished` messages are message digests of the complete handshake - * (with a total of 192 bits for TLS 1.0 and more for SSL 3.0), they can - * be used for external authentication procedures when the authentication - * provided by SSL/TLS is not desired or is not enough. - * - * Corresponds to the `SSL_get_peer_finished` routine in OpenSSL and may be used - * to implement the `tls-unique` channel binding from [RFC 5929](https://tools.ietf.org/html/rfc5929). - * @since v9.9.0 - * @return The latest `Finished` message that is expected or has actually been received from the socket as part of a SSL/TLS handshake, or `undefined` if there is no `Finished` message so - * far. - */ - getPeerFinished(): NonSharedBuffer | undefined; - /** - * Returns a string containing the negotiated SSL/TLS protocol version of the - * current connection. The value `'unknown'` will be returned for connected - * sockets that have not completed the handshaking process. The value `null` will - * be returned for server sockets or disconnected client sockets. - * - * Protocol versions are: - * - * * `'SSLv3'` - * * `'TLSv1'` - * * `'TLSv1.1'` - * * `'TLSv1.2'` - * * `'TLSv1.3'` - * - * See the OpenSSL [`SSL_get_version`](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html) documentation for more information. - * @since v5.7.0 - */ - getProtocol(): string | null; - /** - * Returns the TLS session data or `undefined` if no session was - * negotiated. On the client, the data can be provided to the `session` option of {@link connect} to resume the connection. On the server, it may be useful - * for debugging. - * - * See `Session Resumption` for more information. - * - * Note: `getSession()` works only for TLSv1.2 and below. For TLSv1.3, applications - * must use the `'session'` event (it also works for TLSv1.2 and below). - * @since v0.11.4 - */ - getSession(): NonSharedBuffer | undefined; - /** - * See [SSL\_get\_shared\_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) for more information. - * @since v12.11.0 - * @return List of signature algorithms shared between the server and the client in the order of decreasing preference. - */ - getSharedSigalgs(): string[]; - /** - * For a client, returns the TLS session ticket if one is available, or`undefined`. For a server, always returns `undefined`. - * - * It may be useful for debugging. - * - * See `Session Resumption` for more information. - * @since v0.11.4 - */ - getTLSTicket(): NonSharedBuffer | undefined; - /** - * See `Session Resumption` for more information. - * @since v0.5.6 - * @return `true` if the session was reused, `false` otherwise. - */ - isSessionReused(): boolean; - /** - * The `tlsSocket.renegotiate()` method initiates a TLS renegotiation process. - * Upon completion, the `callback` function will be passed a single argument - * that is either an `Error` (if the request failed) or `null`. - * - * This method can be used to request a peer's certificate after the secure - * connection has been established. - * - * When running as the server, the socket will be destroyed with an error after `handshakeTimeout` timeout. - * - * For TLSv1.3, renegotiation cannot be initiated, it is not supported by the - * protocol. - * @since v0.11.8 - * @param callback If `renegotiate()` returned `true`, callback is attached once to the `'secure'` event. If `renegotiate()` returned `false`, `callback` will be called in the next tick with - * an error, unless the `tlsSocket` has been destroyed, in which case `callback` will not be called at all. - * @return `true` if renegotiation was initiated, `false` otherwise. - */ - renegotiate( - options: { - rejectUnauthorized?: boolean | undefined; - requestCert?: boolean | undefined; - }, - callback: (err: Error | null) => void, - ): undefined | boolean; - /** - * The `tlsSocket.setKeyCert()` method sets the private key and certificate to use for the socket. - * This is mainly useful if you wish to select a server certificate from a TLS server's `ALPNCallback`. - * @since v22.5.0, v20.17.0 - * @param context An object containing at least `key` and `cert` properties from the {@link createSecureContext()} `options`, - * or a TLS context object created with {@link createSecureContext()} itself. - */ - setKeyCert(context: SecureContextOptions | SecureContext): void; - /** - * The `tlsSocket.setMaxSendFragment()` method sets the maximum TLS fragment size. - * Returns `true` if setting the limit succeeded; `false` otherwise. - * - * Smaller fragment sizes decrease the buffering latency on the client: larger - * fragments are buffered by the TLS layer until the entire fragment is received - * and its integrity is verified; large fragments can span multiple roundtrips - * and their processing can be delayed due to packet loss or reordering. However, - * smaller fragments add extra TLS framing bytes and CPU overhead, which may - * decrease overall server throughput. - * @since v0.11.11 - * @param [size=16384] The maximum TLS fragment size. The maximum value is `16384`. - */ - setMaxSendFragment(size: number): boolean; - /** - * Disables TLS renegotiation for this `TLSSocket` instance. Once called, attempts - * to renegotiate will trigger an `'error'` event on the `TLSSocket`. - * @since v8.4.0 - */ - disableRenegotiation(): void; - /** - * When enabled, TLS packet trace information is written to `stderr`. This can be - * used to debug TLS connection problems. - * - * The format of the output is identical to the output of`openssl s_client -trace` or `openssl s_server -trace`. While it is produced by - * OpenSSL's `SSL_trace()` function, the format is undocumented, can change - * without notice, and should not be relied on. - * @since v12.2.0 - */ - enableTrace(): void; - /** - * Returns the peer certificate as an `X509Certificate` object. - * - * If there is no peer certificate, or the socket has been destroyed,`undefined` will be returned. - * @since v15.9.0 - */ - getPeerX509Certificate(): X509Certificate | undefined; - /** - * Returns the local certificate as an `X509Certificate` object. - * - * If there is no local certificate, or the socket has been destroyed,`undefined` will be returned. - * @since v15.9.0 - */ - getX509Certificate(): X509Certificate | undefined; - /** - * Keying material is used for validations to prevent different kind of attacks in - * network protocols, for example in the specifications of IEEE 802.1X. - * - * Example - * - * ```js - * const keyingMaterial = tlsSocket.exportKeyingMaterial( - * 128, - * 'client finished'); - * - * /* - * Example return value of keyingMaterial: - * - * - * ``` - * - * See the OpenSSL [`SSL_export_keying_material`](https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html) documentation for more - * information. - * @since v13.10.0, v12.17.0 - * @param length number of bytes to retrieve from keying material - * @param label an application specific label, typically this will be a value from the [IANA Exporter Label - * Registry](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#exporter-labels). - * @param context Optionally provide a context. - * @return requested bytes of the keying material - */ - exportKeyingMaterial(length: number, label: string, context: Buffer): NonSharedBuffer; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: TLSSocketEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: TLSSocketEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: TLSSocketEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: TLSSocketEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: TLSSocketEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: TLSSocketEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once(eventName: E, listener: (...args: TLSSocketEventMap[E]) => void): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: TLSSocketEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: TLSSocketEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: TLSSocketEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: TLSSocketEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - interface CommonConnectionOptions { - /** - * An optional TLS context object from tls.createSecureContext() - */ - secureContext?: SecureContext | undefined; - /** - * When enabled, TLS packet trace information is written to `stderr`. This can be - * used to debug TLS connection problems. - * @default false - */ - enableTrace?: boolean | undefined; - /** - * If true the server will request a certificate from clients that - * connect and attempt to verify that certificate. Defaults to - * false. - */ - requestCert?: boolean | undefined; - /** - * An array of strings, or a single `Buffer`, `TypedArray`, or `DataView` containing the supported - * ALPN protocols. Buffers should have the format `[len][name][len][name]...` - * e.g. `'\x08http/1.1\x08http/1.0'`, where the `len` byte is the length of the - * next protocol name. Passing an array is usually much simpler, e.g. - * `['http/1.1', 'http/1.0']`. Protocols earlier in the list have higher - * preference than those later. - */ - ALPNProtocols?: readonly string[] | NodeJS.ArrayBufferView | undefined; - /** - * SNICallback(servername, cb) A function that will be - * called if the client supports SNI TLS extension. Two arguments - * will be passed when called: servername and cb. SNICallback should - * invoke cb(null, ctx), where ctx is a SecureContext instance. - * (tls.createSecureContext(...) can be used to get a proper - * SecureContext.) If SNICallback wasn't provided the default callback - * with high-level API will be used (see below). - */ - SNICallback?: ((servername: string, cb: (err: Error | null, ctx?: SecureContext) => void) => void) | undefined; - /** - * If true the server will reject any connection which is not - * authorized with the list of supplied CAs. This option only has an - * effect if requestCert is true. - * @default true - */ - rejectUnauthorized?: boolean | undefined; - } - interface TlsOptions extends SecureContextOptions, CommonConnectionOptions, net.ServerOpts { - /** - * Abort the connection if the SSL/TLS handshake does not finish in the - * specified number of milliseconds. A 'tlsClientError' is emitted on - * the tls.Server object whenever a handshake times out. Default: - * 120000 (120 seconds). - */ - handshakeTimeout?: number | undefined; - /** - * The number of seconds after which a TLS session created by the - * server will no longer be resumable. See Session Resumption for more - * information. Default: 300. - */ - sessionTimeout?: number | undefined; - /** - * 48-bytes of cryptographically strong pseudo-random data. - */ - ticketKeys?: Buffer | undefined; - /** - * @param socket - * @param identity identity parameter sent from the client. - * @return pre-shared key that must either be - * a buffer or `null` to stop the negotiation process. Returned PSK must be - * compatible with the selected cipher's digest. - * - * When negotiating TLS-PSK (pre-shared keys), this function is called - * with the identity provided by the client. - * If the return value is `null` the negotiation process will stop and an - * "unknown_psk_identity" alert message will be sent to the other party. - * If the server wishes to hide the fact that the PSK identity was not known, - * the callback must provide some random data as `psk` to make the connection - * fail with "decrypt_error" before negotiation is finished. - * PSK ciphers are disabled by default, and using TLS-PSK thus - * requires explicitly specifying a cipher suite with the `ciphers` option. - * More information can be found in the RFC 4279. - */ - pskCallback?: ((socket: TLSSocket, identity: string) => NodeJS.ArrayBufferView | null) | undefined; - /** - * hint to send to a client to help - * with selecting the identity during TLS-PSK negotiation. Will be ignored - * in TLS 1.3. Upon failing to set pskIdentityHint `tlsClientError` will be - * emitted with `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` code. - */ - pskIdentityHint?: string | undefined; - } - interface PSKCallbackNegotation { - psk: NodeJS.ArrayBufferView; - identity: string; - } - interface ConnectionOptions extends SecureContextOptions, CommonConnectionOptions { - host?: string | undefined; - port?: number | undefined; - path?: string | undefined; // Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. - socket?: stream.Duplex | undefined; // Establish secure connection on a given socket rather than creating a new socket - checkServerIdentity?: typeof checkServerIdentity | undefined; - servername?: string | undefined; // SNI TLS Extension - session?: Buffer | undefined; - minDHSize?: number | undefined; - lookup?: net.LookupFunction | undefined; - timeout?: number | undefined; - /** - * When negotiating TLS-PSK (pre-shared keys), this function is called - * with optional identity `hint` provided by the server or `null` - * in case of TLS 1.3 where `hint` was removed. - * It will be necessary to provide a custom `tls.checkServerIdentity()` - * for the connection as the default one will try to check hostname/IP - * of the server against the certificate but that's not applicable for PSK - * because there won't be a certificate present. - * More information can be found in the RFC 4279. - * - * @param hint message sent from the server to help client - * decide which identity to use during negotiation. - * Always `null` if TLS 1.3 is used. - * @returns Return `null` to stop the negotiation process. `psk` must be - * compatible with the selected cipher's digest. - * `identity` must use UTF-8 encoding. - */ - pskCallback?: ((hint: string | null) => PSKCallbackNegotation | null) | undefined; - } - interface ServerEventMap extends net.ServerEventMap { - "connection": [socket: net.Socket]; - "keylog": [line: NonSharedBuffer, tlsSocket: TLSSocket]; - "newSession": [sessionId: NonSharedBuffer, sessionData: NonSharedBuffer, callback: () => void]; - "OCSPRequest": [ - certificate: NonSharedBuffer, - issuer: NonSharedBuffer, - callback: (err: Error | null, resp: Buffer | null) => void, - ]; - "resumeSession": [sessionId: Buffer, callback: (err: Error | null, sessionData?: Buffer) => void]; - "secureConnection": [tlsSocket: TLSSocket]; - "tlsClientError": [exception: Error, tlsSocket: TLSSocket]; - } - /** - * Accepts encrypted connections using TLS or SSL. - * @since v0.3.2 - */ - class Server extends net.Server { - constructor(secureConnectionListener?: (socket: TLSSocket) => void); - constructor(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void); - /** - * The `server.addContext()` method adds a secure context that will be used if - * the client request's SNI name matches the supplied `hostname` (or wildcard). - * - * When there are multiple matching contexts, the most recently added one is - * used. - * @since v0.5.3 - * @param hostname A SNI host name or wildcard (e.g. `'*'`) - * @param context An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc), or a TLS context object created - * with {@link createSecureContext} itself. - */ - addContext(hostname: string, context: SecureContextOptions | SecureContext): void; - /** - * Returns the session ticket keys. - * - * See `Session Resumption` for more information. - * @since v3.0.0 - * @return A 48-byte buffer containing the session ticket keys. - */ - getTicketKeys(): NonSharedBuffer; - /** - * The `server.setSecureContext()` method replaces the secure context of an - * existing server. Existing connections to the server are not interrupted. - * @since v11.0.0 - * @param options An object containing any of the possible properties from the {@link createSecureContext} `options` arguments (e.g. `key`, `cert`, `ca`, etc). - */ - setSecureContext(options: SecureContextOptions): void; - /** - * Sets the session ticket keys. - * - * Changes to the ticket keys are effective only for future server connections. - * Existing or currently pending server connections will use the previous keys. - * - * See `Session Resumption` for more information. - * @since v3.0.0 - * @param keys A 48-byte buffer containing the session ticket keys. - */ - setTicketKeys(keys: Buffer): void; - // #region InternalEventEmitter - addListener(eventName: E, listener: (...args: ServerEventMap[E]) => void): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: ServerEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: ServerEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: ServerEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off(eventName: E, listener: (...args: ServerEventMap[E]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: E, listener: (...args: ServerEventMap[E]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once(eventName: E, listener: (...args: ServerEventMap[E]) => void): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: ServerEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: ServerEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } - type SecureVersion = "TLSv1.3" | "TLSv1.2" | "TLSv1.1" | "TLSv1"; - interface SecureContextOptions { - /** - * If set, this will be called when a client opens a connection using the ALPN extension. - * One argument will be passed to the callback: an object containing `servername` and `protocols` fields, - * respectively containing the server name from the SNI extension (if any) and an array of - * ALPN protocol name strings. The callback must return either one of the strings listed in `protocols`, - * which will be returned to the client as the selected ALPN protocol, or `undefined`, - * to reject the connection with a fatal alert. If a string is returned that does not match one of - * the client's ALPN protocols, an error will be thrown. - * This option cannot be used with the `ALPNProtocols` option, and setting both options will throw an error. - */ - ALPNCallback?: ((arg: { servername: string; protocols: string[] }) => string | undefined) | undefined; - /** - * Treat intermediate (non-self-signed) - * certificates in the trust CA certificate list as trusted. - * @since v22.9.0, v20.18.0 - */ - allowPartialTrustChain?: boolean | undefined; - /** - * Optionally override the trusted CA certificates. Default is to trust - * the well-known CAs curated by Mozilla. Mozilla's CAs are completely - * replaced when CAs are explicitly specified using this option. - */ - ca?: string | Buffer | Array | undefined; - /** - * Cert chains in PEM format. One cert chain should be provided per - * private key. Each cert chain should consist of the PEM formatted - * certificate for a provided private key, followed by the PEM - * formatted intermediate certificates (if any), in order, and not - * including the root CA (the root CA must be pre-known to the peer, - * see ca). When providing multiple cert chains, they do not have to - * be in the same order as their private keys in key. If the - * intermediate certificates are not provided, the peer will not be - * able to validate the certificate, and the handshake will fail. - */ - cert?: string | Buffer | Array | undefined; - /** - * Colon-separated list of supported signature algorithms. The list - * can contain digest algorithms (SHA256, MD5 etc.), public key - * algorithms (RSA-PSS, ECDSA etc.), combination of both (e.g - * 'RSA+SHA384') or TLS v1.3 scheme names (e.g. rsa_pss_pss_sha512). - */ - sigalgs?: string | undefined; - /** - * Cipher suite specification, replacing the default. For more - * information, see modifying the default cipher suite. Permitted - * ciphers can be obtained via tls.getCiphers(). Cipher names must be - * uppercased in order for OpenSSL to accept them. - */ - ciphers?: string | undefined; - /** - * Name of an OpenSSL engine which can provide the client certificate. - * @deprecated - */ - clientCertEngine?: string | undefined; - /** - * PEM formatted CRLs (Certificate Revocation Lists). - */ - crl?: string | Buffer | Array | undefined; - /** - * `'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. - * If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. - * ECDHE-based perfect forward secrecy will still be available. - */ - dhparam?: string | Buffer | undefined; - /** - * A string describing a named curve or a colon separated list of curve - * NIDs or names, for example P-521:P-384:P-256, to use for ECDH key - * agreement. Set to auto to select the curve automatically. Use - * crypto.getCurves() to obtain a list of available curve names. On - * recent releases, openssl ecparam -list_curves will also display the - * name and description of each available elliptic curve. Default: - * tls.DEFAULT_ECDH_CURVE. - */ - ecdhCurve?: string | undefined; - /** - * Attempt to use the server's cipher suite preferences instead of the - * client's. When true, causes SSL_OP_CIPHER_SERVER_PREFERENCE to be - * set in secureOptions - */ - honorCipherOrder?: boolean | undefined; - /** - * Private keys in PEM format. PEM allows the option of private keys - * being encrypted. Encrypted keys will be decrypted with - * options.passphrase. Multiple keys using different algorithms can be - * provided either as an array of unencrypted key strings or buffers, - * or an array of objects in the form {pem: [, - * passphrase: ]}. The object form can only occur in an array. - * object.passphrase is optional. Encrypted keys will be decrypted with - * object.passphrase if provided, or options.passphrase if it is not. - */ - key?: string | Buffer | Array | undefined; - /** - * Name of an OpenSSL engine to get private key from. Should be used - * together with privateKeyIdentifier. - * @deprecated - */ - privateKeyEngine?: string | undefined; - /** - * Identifier of a private key managed by an OpenSSL engine. Should be - * used together with privateKeyEngine. Should not be set together with - * key, because both options define a private key in different ways. - * @deprecated - */ - privateKeyIdentifier?: string | undefined; - /** - * Optionally set the maximum TLS version to allow. One - * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the - * `secureProtocol` option, use one or the other. - * **Default:** `'TLSv1.3'`, unless changed using CLI options. Using - * `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using `--tls-max-v1.3` sets the default to - * `'TLSv1.3'`. If multiple of the options are provided, the highest maximum is used. - */ - maxVersion?: SecureVersion | undefined; - /** - * Optionally set the minimum TLS version to allow. One - * of `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. Cannot be specified along with the - * `secureProtocol` option, use one or the other. It is not recommended to use - * less than TLSv1.2, but it may be required for interoperability. - * **Default:** `'TLSv1.2'`, unless changed using CLI options. Using - * `--tls-v1.0` sets the default to `'TLSv1'`. Using `--tls-v1.1` sets the default to - * `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to - * 'TLSv1.3'. If multiple of the options are provided, the lowest minimum is used. - */ - minVersion?: SecureVersion | undefined; - /** - * Shared passphrase used for a single private key and/or a PFX. - */ - passphrase?: string | undefined; - /** - * PFX or PKCS12 encoded private key and certificate chain. pfx is an - * alternative to providing key and cert individually. PFX is usually - * encrypted, if it is, passphrase will be used to decrypt it. Multiple - * PFX can be provided either as an array of unencrypted PFX buffers, - * or an array of objects in the form {buf: [, - * passphrase: ]}. The object form can only occur in an array. - * object.passphrase is optional. Encrypted PFX will be decrypted with - * object.passphrase if provided, or options.passphrase if it is not. - */ - pfx?: string | Buffer | Array | undefined; - /** - * Optionally affect the OpenSSL protocol behavior, which is not - * usually necessary. This should be used carefully if at all! Value is - * a numeric bitmask of the SSL_OP_* options from OpenSSL Options - */ - secureOptions?: number | undefined; // Value is a numeric bitmask of the `SSL_OP_*` options - /** - * Legacy mechanism to select the TLS protocol version to use, it does - * not support independent control of the minimum and maximum version, - * and does not support limiting the protocol to TLSv1.3. Use - * minVersion and maxVersion instead. The possible values are listed as - * SSL_METHODS, use the function names as strings. For example, use - * 'TLSv1_1_method' to force TLS version 1.1, or 'TLS_method' to allow - * any TLS protocol version up to TLSv1.3. It is not recommended to use - * TLS versions less than 1.2, but it may be required for - * interoperability. Default: none, see minVersion. - */ - secureProtocol?: string | undefined; - /** - * Opaque identifier used by servers to ensure session state is not - * shared between applications. Unused by clients. - */ - sessionIdContext?: string | undefined; - /** - * 48-bytes of cryptographically strong pseudo-random data. - * See Session Resumption for more information. - */ - ticketKeys?: Buffer | undefined; - /** - * The number of seconds after which a TLS session created by the - * server will no longer be resumable. See Session Resumption for more - * information. Default: 300. - */ - sessionTimeout?: number | undefined; - } - interface SecureContext { - context: any; - } - /** - * Verifies the certificate `cert` is issued to `hostname`. - * - * Returns [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object, populating it with `reason`, `host`, and `cert` on - * failure. On success, returns [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type). - * - * This function is intended to be used in combination with the`checkServerIdentity` option that can be passed to {@link connect} and as - * such operates on a `certificate object`. For other purposes, consider using `x509.checkHost()` instead. - * - * This function can be overwritten by providing an alternative function as the `options.checkServerIdentity` option that is passed to `tls.connect()`. The - * overwriting function can call `tls.checkServerIdentity()` of course, to augment - * the checks done with additional verification. - * - * This function is only called if the certificate passed all other checks, such as - * being issued by trusted CA (`options.ca`). - * - * Earlier versions of Node.js incorrectly accepted certificates for a given`hostname` if a matching `uniformResourceIdentifier` subject alternative name - * was present (see [CVE-2021-44531](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531)). Applications that wish to accept`uniformResourceIdentifier` subject alternative names can use - * a custom `options.checkServerIdentity` function that implements the desired behavior. - * @since v0.8.4 - * @param hostname The host name or IP address to verify the certificate against. - * @param cert A `certificate object` representing the peer's certificate. - */ - function checkServerIdentity(hostname: string, cert: PeerCertificate): Error | undefined; - /** - * Creates a new {@link Server}. The `secureConnectionListener`, if provided, is - * automatically set as a listener for the `'secureConnection'` event. - * - * The `ticketKeys` options is automatically shared between `node:cluster` module - * workers. - * - * The following illustrates a simple echo server: - * - * ```js - * import tls from 'node:tls'; - * import fs from 'node:fs'; - * - * const options = { - * key: fs.readFileSync('server-key.pem'), - * cert: fs.readFileSync('server-cert.pem'), - * - * // This is necessary only if using client certificate authentication. - * requestCert: true, - * - * // This is necessary only if the client uses a self-signed certificate. - * ca: [ fs.readFileSync('client-cert.pem') ], - * }; - * - * const server = tls.createServer(options, (socket) => { - * console.log('server connected', - * socket.authorized ? 'authorized' : 'unauthorized'); - * socket.write('welcome!\n'); - * socket.setEncoding('utf8'); - * socket.pipe(socket); - * }); - * server.listen(8000, () => { - * console.log('server bound'); - * }); - * ``` - * - * The server can be tested by connecting to it using the example client from {@link connect}. - * @since v0.3.2 - */ - function createServer(secureConnectionListener?: (socket: TLSSocket) => void): Server; - function createServer(options: TlsOptions, secureConnectionListener?: (socket: TLSSocket) => void): Server; - /** - * The `callback` function, if specified, will be added as a listener for the `'secureConnect'` event. - * - * `tls.connect()` returns a {@link TLSSocket} object. - * - * Unlike the `https` API, `tls.connect()` does not enable the - * SNI (Server Name Indication) extension by default, which may cause some - * servers to return an incorrect certificate or reject the connection - * altogether. To enable SNI, set the `servername` option in addition - * to `host`. - * - * The following illustrates a client for the echo server example from {@link createServer}: - * - * ```js - * // Assumes an echo server that is listening on port 8000. - * import tls from 'node:tls'; - * import fs from 'node:fs'; - * - * const options = { - * // Necessary only if the server requires client certificate authentication. - * key: fs.readFileSync('client-key.pem'), - * cert: fs.readFileSync('client-cert.pem'), - * - * // Necessary only if the server uses a self-signed certificate. - * ca: [ fs.readFileSync('server-cert.pem') ], - * - * // Necessary only if the server's cert isn't for "localhost". - * checkServerIdentity: () => { return null; }, - * }; - * - * const socket = tls.connect(8000, options, () => { - * console.log('client connected', - * socket.authorized ? 'authorized' : 'unauthorized'); - * process.stdin.pipe(socket); - * process.stdin.resume(); - * }); - * socket.setEncoding('utf8'); - * socket.on('data', (data) => { - * console.log(data); - * }); - * socket.on('end', () => { - * console.log('server ends connection'); - * }); - * ``` - * @since v0.11.3 - */ - function connect(options: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; - function connect( - port: number, - host?: string, - options?: ConnectionOptions, - secureConnectListener?: () => void, - ): TLSSocket; - function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () => void): TLSSocket; - /** - * `{@link createServer}` sets the default value of the `honorCipherOrder` option - * to `true`, other APIs that create secure contexts leave it unset. - * - * `{@link createServer}` uses a 128 bit truncated SHA1 hash value generated - * from `process.argv` as the default value of the `sessionIdContext` option, other - * APIs that create secure contexts have no default value. - * - * The `tls.createSecureContext()` method creates a `SecureContext` object. It is - * usable as an argument to several `tls` APIs, such as `server.addContext()`, - * but has no public methods. The {@link Server} constructor and the {@link createServer} method do not support the `secureContext` option. - * - * A key is _required_ for ciphers that use certificates. Either `key` or `pfx` can be used to provide it. - * - * If the `ca` option is not given, then Node.js will default to using [Mozilla's publicly trusted list of - * CAs](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt). - * - * Custom DHE parameters are discouraged in favor of the new `dhparam: 'auto' `option. When set to `'auto'`, well-known DHE parameters of sufficient strength - * will be selected automatically. Otherwise, if necessary, `openssl dhparam` can - * be used to create custom parameters. The key length must be greater than or - * equal to 1024 bits or else an error will be thrown. Although 1024 bits is - * permissible, use 2048 bits or larger for stronger security. - * @since v0.11.13 - */ - function createSecureContext(options?: SecureContextOptions): SecureContext; - /** - * Returns an array containing the CA certificates from various sources, depending on `type`: - * - * * `"default"`: return the CA certificates that will be used by the Node.js TLS clients by default. - * * When `--use-bundled-ca` is enabled (default), or `--use-openssl-ca` is not enabled, - * this would include CA certificates from the bundled Mozilla CA store. - * * When `--use-system-ca` is enabled, this would also include certificates from the system's - * trusted store. - * * When `NODE_EXTRA_CA_CERTS` is used, this would also include certificates loaded from the specified - * file. - * * `"system"`: return the CA certificates that are loaded from the system's trusted store, according - * to rules set by `--use-system-ca`. This can be used to get the certificates from the system - * when `--use-system-ca` is not enabled. - * * `"bundled"`: return the CA certificates from the bundled Mozilla CA store. This would be the same - * as `tls.rootCertificates`. - * * `"extra"`: return the CA certificates loaded from `NODE_EXTRA_CA_CERTS`. It's an empty array if - * `NODE_EXTRA_CA_CERTS` is not set. - * @since v22.15.0 - * @param type The type of CA certificates that will be returned. Valid values - * are `"default"`, `"system"`, `"bundled"` and `"extra"`. - * **Default:** `"default"`. - * @returns An array of PEM-encoded certificates. The array may contain duplicates - * if the same certificate is repeatedly stored in multiple sources. - */ - function getCACertificates(type?: "default" | "system" | "bundled" | "extra"): string[]; - /** - * Returns an array with the names of the supported TLS ciphers. The names are - * lower-case for historical reasons, but must be uppercased to be used in - * the `ciphers` option of `{@link createSecureContext}`. - * - * Not all supported ciphers are enabled by default. See - * [Modifying the default TLS cipher suite](https://nodejs.org/docs/latest-v25.x/api/tls.html#modifying-the-default-tls-cipher-suite). - * - * Cipher names that start with `'tls_'` are for TLSv1.3, all the others are for - * TLSv1.2 and below. - * - * ```js - * console.log(tls.getCiphers()); // ['aes128-gcm-sha256', 'aes128-sha', ...] - * ``` - * @since v0.10.2 - */ - function getCiphers(): string[]; - /** - * Sets the default CA certificates used by Node.js TLS clients. If the provided - * certificates are parsed successfully, they will become the default CA - * certificate list returned by {@link getCACertificates} and used - * by subsequent TLS connections that don't specify their own CA certificates. - * The certificates will be deduplicated before being set as the default. - * - * This function only affects the current Node.js thread. Previous - * sessions cached by the HTTPS agent won't be affected by this change, so - * this method should be called before any unwanted cachable TLS connections are - * made. - * - * To use system CA certificates as the default: - * - * ```js - * import tls from 'node:tls'; - * tls.setDefaultCACertificates(tls.getCACertificates('system')); - * ``` - * - * This function completely replaces the default CA certificate list. To add additional - * certificates to the existing defaults, get the current certificates and append to them: - * - * ```js - * import tls from 'node:tls'; - * const currentCerts = tls.getCACertificates('default'); - * const additionalCerts = ['-----BEGIN CERTIFICATE-----\n...']; - * tls.setDefaultCACertificates([...currentCerts, ...additionalCerts]); - * ``` - * @since v24.5.0 - * @param certs An array of CA certificates in PEM format. - */ - function setDefaultCACertificates(certs: ReadonlyArray): void; - /** - * The default curve name to use for ECDH key agreement in a tls server. - * The default value is `'auto'`. See `{@link createSecureContext()}` for further - * information. - * @since v0.11.13 - */ - let DEFAULT_ECDH_CURVE: string; - /** - * The default value of the `maxVersion` option of `{@link createSecureContext()}`. - * It can be assigned any of the supported TLS protocol versions, - * `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. **Default:** `'TLSv1.3'`, unless - * changed using CLI options. Using `--tls-max-v1.2` sets the default to `'TLSv1.2'`. Using - * `--tls-max-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options - * are provided, the highest maximum is used. - * @since v11.4.0 - */ - let DEFAULT_MAX_VERSION: SecureVersion; - /** - * The default value of the `minVersion` option of `{@link createSecureContext()}`. - * It can be assigned any of the supported TLS protocol versions, - * `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`. **Default:** `'TLSv1.2'`, unless - * changed using CLI options. Using `--tls-min-v1.0` sets the default to - * `'TLSv1'`. Using `--tls-min-v1.1` sets the default to `'TLSv1.1'`. Using - * `--tls-min-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options - * are provided, the lowest minimum is used. - * @since v11.4.0 - */ - let DEFAULT_MIN_VERSION: SecureVersion; - /** - * The default value of the `ciphers` option of `{@link createSecureContext()}`. - * It can be assigned any of the supported OpenSSL ciphers. - * Defaults to the content of `crypto.constants.defaultCoreCipherList`, unless - * changed using CLI options using `--tls-default-ciphers`. - * @since v19.8.0 - */ - let DEFAULT_CIPHERS: string; - /** - * An immutable array of strings representing the root certificates (in PEM format) - * from the bundled Mozilla CA store as supplied by the current Node.js version. - * - * The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store - * that is fixed at release time. It is identical on all supported platforms. - * @since v12.3.0 - */ - const rootCertificates: readonly string[]; -} -declare module "tls" { - export * from "node:tls"; -} diff --git a/skills/flight-finder/node_modules/@types/node/trace_events.d.ts b/skills/flight-finder/node_modules/@types/node/trace_events.d.ts deleted file mode 100644 index b2c6b32..0000000 --- a/skills/flight-finder/node_modules/@types/node/trace_events.d.ts +++ /dev/null @@ -1,197 +0,0 @@ -/** - * The `node:trace_events` module provides a mechanism to centralize tracing information - * generated by V8, Node.js core, and userspace code. - * - * Tracing can be enabled with the `--trace-event-categories` command-line flag - * or by using the `trace_events` module. The `--trace-event-categories` flag - * accepts a list of comma-separated category names. - * - * The available categories are: - * - * * `node`: An empty placeholder. - * * `node.async_hooks`: Enables capture of detailed [`async_hooks`](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html) trace data. - * The [`async_hooks`](https://nodejs.org/docs/latest-v25.x/api/async_hooks.html) events have a unique `asyncId` and a special `triggerId` `triggerAsyncId` property. - * * `node.bootstrap`: Enables capture of Node.js bootstrap milestones. - * * `node.console`: Enables capture of `console.time()` and `console.count()` output. - * * `node.threadpoolwork.sync`: Enables capture of trace data for threadpool synchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. - * * `node.threadpoolwork.async`: Enables capture of trace data for threadpool asynchronous operations, such as `blob`, `zlib`, `crypto` and `node_api`. - * * `node.dns.native`: Enables capture of trace data for DNS queries. - * * `node.net.native`: Enables capture of trace data for network. - * * `node.environment`: Enables capture of Node.js Environment milestones. - * * `node.fs.sync`: Enables capture of trace data for file system sync methods. - * * `node.fs_dir.sync`: Enables capture of trace data for file system sync directory methods. - * * `node.fs.async`: Enables capture of trace data for file system async methods. - * * `node.fs_dir.async`: Enables capture of trace data for file system async directory methods. - * * `node.perf`: Enables capture of [Performance API](https://nodejs.org/docs/latest-v25.x/api/perf_hooks.html) measurements. - * * `node.perf.usertiming`: Enables capture of only Performance API User Timing - * measures and marks. - * * `node.perf.timerify`: Enables capture of only Performance API timerify - * measurements. - * * `node.promises.rejections`: Enables capture of trace data tracking the number - * of unhandled Promise rejections and handled-after-rejections. - * * `node.vm.script`: Enables capture of trace data for the `node:vm` module's `runInNewContext()`, `runInContext()`, and `runInThisContext()` methods. - * * `v8`: The [V8](https://nodejs.org/docs/latest-v25.x/api/v8.html) events are GC, compiling, and execution related. - * * `node.http`: Enables capture of trace data for http request / response. - * - * By default the `node`, `node.async_hooks`, and `v8` categories are enabled. - * - * ```bash - * node --trace-event-categories v8,node,node.async_hooks server.js - * ``` - * - * Prior versions of Node.js required the use of the `--trace-events-enabled` flag to enable trace events. This requirement has been removed. However, the `--trace-events-enabled` flag _may_ still be - * used and will enable the `node`, `node.async_hooks`, and `v8` trace event categories by default. - * - * ```bash - * node --trace-events-enabled - * - * # is equivalent to - * - * node --trace-event-categories v8,node,node.async_hooks - * ``` - * - * Alternatively, trace events may be enabled using the `node:trace_events` module: - * - * ```js - * import trace_events from 'node:trace_events'; - * const tracing = trace_events.createTracing({ categories: ['node.perf'] }); - * tracing.enable(); // Enable trace event capture for the 'node.perf' category - * - * // do work - * - * tracing.disable(); // Disable trace event capture for the 'node.perf' category - * ``` - * - * Running Node.js with tracing enabled will produce log files that can be opened - * in the [`chrome://tracing`](https://www.chromium.org/developers/how-tos/trace-event-profiling-tool) tab of Chrome. - * - * The logging file is by default called `node_trace.${rotation}.log`, where `${rotation}` is an incrementing log-rotation id. The filepath pattern can - * be specified with `--trace-event-file-pattern` that accepts a template - * string that supports `${rotation}` and `${pid}`: - * - * ```bash - * node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js - * ``` - * - * To guarantee that the log file is properly generated after signal events like `SIGINT`, `SIGTERM`, or `SIGBREAK`, make sure to have the appropriate handlers - * in your code, such as: - * - * ```js - * process.on('SIGINT', function onSigint() { - * console.info('Received SIGINT.'); - * process.exit(130); // Or applicable exit code depending on OS and signal - * }); - * ``` - * - * The tracing system uses the same time source - * as the one used by `process.hrtime()`. - * However the trace-event timestamps are expressed in microseconds, - * unlike `process.hrtime()` which returns nanoseconds. - * - * The features from this module are not available in [`Worker`](https://nodejs.org/docs/latest-v25.x/api/worker_threads.html#class-worker) threads. - * @experimental - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/trace_events.js) - */ -declare module "node:trace_events" { - /** - * The `Tracing` object is used to enable or disable tracing for sets of - * categories. Instances are created using the - * `trace_events.createTracing()` method. - * - * When created, the `Tracing` object is disabled. Calling the - * `tracing.enable()` method adds the categories to the set of enabled trace - * event categories. Calling `tracing.disable()` will remove the categories - * from the set of enabled trace event categories. - */ - interface Tracing { - /** - * A comma-separated list of the trace event categories covered by this - * `Tracing` object. - * @since v10.0.0 - */ - readonly categories: string; - /** - * Disables this `Tracing` object. - * - * Only trace event categories _not_ covered by other enabled `Tracing` - * objects and _not_ specified by the `--trace-event-categories` flag - * will be disabled. - * - * ```js - * import trace_events from 'node:trace_events'; - * const t1 = trace_events.createTracing({ categories: ['node', 'v8'] }); - * const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] }); - * t1.enable(); - * t2.enable(); - * - * // Prints 'node,node.perf,v8' - * console.log(trace_events.getEnabledCategories()); - * - * t2.disable(); // Will only disable emission of the 'node.perf' category - * - * // Prints 'node,v8' - * console.log(trace_events.getEnabledCategories()); - * ``` - * @since v10.0.0 - */ - disable(): void; - /** - * Enables this `Tracing` object for the set of categories covered by - * the `Tracing` object. - * @since v10.0.0 - */ - enable(): void; - /** - * `true` only if the `Tracing` object has been enabled. - * @since v10.0.0 - */ - readonly enabled: boolean; - } - interface CreateTracingOptions { - /** - * An array of trace category names. Values included in the array are - * coerced to a string when possible. An error will be thrown if the - * value cannot be coerced. - */ - categories: string[]; - } - /** - * Creates and returns a `Tracing` object for the given set of `categories`. - * - * ```js - * import trace_events from 'node:trace_events'; - * const categories = ['node.perf', 'node.async_hooks']; - * const tracing = trace_events.createTracing({ categories }); - * tracing.enable(); - * // do stuff - * tracing.disable(); - * ``` - * @since v10.0.0 - */ - function createTracing(options: CreateTracingOptions): Tracing; - /** - * Returns a comma-separated list of all currently-enabled trace event - * categories. The current set of enabled trace event categories is determined - * by the _union_ of all currently-enabled `Tracing` objects and any categories - * enabled using the `--trace-event-categories` flag. - * - * Given the file `test.js` below, the command `node --trace-event-categories node.perf test.js` will print `'node.async_hooks,node.perf'` to the console. - * - * ```js - * import trace_events from 'node:trace_events'; - * const t1 = trace_events.createTracing({ categories: ['node.async_hooks'] }); - * const t2 = trace_events.createTracing({ categories: ['node.perf'] }); - * const t3 = trace_events.createTracing({ categories: ['v8'] }); - * - * t1.enable(); - * t2.enable(); - * - * console.log(trace_events.getEnabledCategories()); - * ``` - * @since v10.0.0 - */ - function getEnabledCategories(): string | undefined; -} -declare module "trace_events" { - export * from "node:trace_events"; -} diff --git a/skills/flight-finder/node_modules/@types/node/ts5.6/buffer.buffer.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.6/buffer.buffer.d.ts deleted file mode 100644 index bd32dc6..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +++ /dev/null @@ -1,462 +0,0 @@ -declare module "node:buffer" { - global { - interface BufferConstructor { - // see ../buffer.d.ts for implementation shared with all TypeScript versions - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. - */ - new(str: string, encoding?: BufferEncoding): Buffer; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). - */ - new(size: number): Buffer; - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. - */ - new(array: ArrayLike): Buffer; - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}/{SharedArrayBuffer}. - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. - */ - new(arrayBuffer: ArrayBufferLike): Buffer; - /** - * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`. - * Array entries outside that range will be truncated to fit into it. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. - * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); - * ``` - * - * If `array` is an `Array`-like object (that is, one with a `length` property of - * type `number`), it is treated as if it is an array, unless it is a `Buffer` or - * a `Uint8Array`. This means all other `TypedArray` variants get treated as an - * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use - * `Buffer.copyBytesFrom()`. - * - * A `TypeError` will be thrown if `array` is not an `Array` or another type - * appropriate for `Buffer.from()` variants. - * - * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal - * `Buffer` pool like `Buffer.allocUnsafe()` does. - * @since v5.10.0 - */ - from(array: WithImplicitCoercion>): Buffer; - /** - * This creates a view of the `ArrayBuffer` without copying the underlying - * memory. For example, when passed a reference to the `.buffer` property of a - * `TypedArray` instance, the newly created `Buffer` will share the same - * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const arr = new Uint16Array(2); - * - * arr[0] = 5000; - * arr[1] = 4000; - * - * // Shares memory with `arr`. - * const buf = Buffer.from(arr.buffer); - * - * console.log(buf); - * // Prints: - * - * // Changing the original Uint16Array changes the Buffer also. - * arr[1] = 6000; - * - * console.log(buf); - * // Prints: - * ``` - * - * The optional `byteOffset` and `length` arguments specify a memory range within - * the `arrayBuffer` that will be shared by the `Buffer`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const ab = new ArrayBuffer(10); - * const buf = Buffer.from(ab, 0, 2); - * - * console.log(buf.length); - * // Prints: 2 - * ``` - * - * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a - * `SharedArrayBuffer` or another type appropriate for `Buffer.from()` - * variants. - * - * It is important to remember that a backing `ArrayBuffer` can cover a range - * of memory that extends beyond the bounds of a `TypedArray` view. A new - * `Buffer` created using the `buffer` property of a `TypedArray` may extend - * beyond the range of the `TypedArray`: - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements - * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements - * console.log(arrA.buffer === arrB.buffer); // true - * - * const buf = Buffer.from(arrB.buffer); - * console.log(buf); - * // Prints: - * ``` - * @since v5.10.0 - * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the - * `.buffer` property of a `TypedArray`. - * @param byteOffset Index of first byte to expose. **Default:** `0`. - * @param length Number of bytes to expose. **Default:** - * `arrayBuffer.byteLength - byteOffset`. - */ - from( - arrayBuffer: WithImplicitCoercion, - byteOffset?: number, - length?: number, - ): Buffer; - /** - * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies - * the character encoding to be used when converting `string` into bytes. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf1 = Buffer.from('this is a tést'); - * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); - * - * console.log(buf1.toString()); - * // Prints: this is a tést - * console.log(buf2.toString()); - * // Prints: this is a tést - * console.log(buf1.toString('latin1')); - * // Prints: this is a tést - * ``` - * - * A `TypeError` will be thrown if `string` is not a string or another type - * appropriate for `Buffer.from()` variants. - * - * `Buffer.from(string)` may also use the internal `Buffer` pool like - * `Buffer.allocUnsafe()` does. - * @since v5.10.0 - * @param string A string to encode. - * @param encoding The encoding of `string`. **Default:** `'utf8'`. - */ - from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer; - from(arrayOrString: WithImplicitCoercion | string>): Buffer; - /** - * Creates a new Buffer using the passed {data} - * @param values to create a new Buffer - */ - of(...items: number[]): Buffer; - /** - * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together. - * - * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned. - * - * If `totalLength` is not provided, it is calculated from the `Buffer` instances - * in `list` by adding their lengths. - * - * If `totalLength` is provided, it is coerced to an unsigned integer. If the - * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is - * truncated to `totalLength`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create a single `Buffer` from a list of three `Buffer` instances. - * - * const buf1 = Buffer.alloc(10); - * const buf2 = Buffer.alloc(14); - * const buf3 = Buffer.alloc(18); - * const totalLength = buf1.length + buf2.length + buf3.length; - * - * console.log(totalLength); - * // Prints: 42 - * - * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength); - * - * console.log(bufA); - * // Prints: - * console.log(bufA.length); - * // Prints: 42 - * ``` - * - * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does. - * @since v0.7.11 - * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate. - * @param totalLength Total length of the `Buffer` instances in `list` when concatenated. - */ - concat(list: readonly Uint8Array[], totalLength?: number): Buffer; - /** - * Copies the underlying memory of `view` into a new `Buffer`. - * - * ```js - * const u16 = new Uint16Array([0, 0xffff]); - * const buf = Buffer.copyBytesFrom(u16, 1, 1); - * u16[1] = 0; - * console.log(buf.length); // 2 - * console.log(buf[0]); // 255 - * console.log(buf[1]); // 255 - * ``` - * @since v19.8.0 - * @param view The {TypedArray} to copy. - * @param [offset=0] The starting offset within `view`. - * @param [length=view.length - offset] The number of elements from `view` to copy. - */ - copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(5); - * - * console.log(buf); - * // Prints: - * ``` - * - * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. - * - * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(5, 'a'); - * - * console.log(buf); - * // Prints: - * ``` - * - * If both `fill` and `encoding` are specified, the allocated `Buffer` will be - * initialized by calling `buf.fill(fill, encoding)`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); - * - * console.log(buf); - * // Prints: - * ``` - * - * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance - * contents will never contain sensitive data from previous allocations, including - * data that might not have been allocated for `Buffer`s. - * - * A `TypeError` will be thrown if `size` is not a number. - * @since v5.10.0 - * @param size The desired length of the new `Buffer`. - * @param [fill=0] A value to pre-fill the new `Buffer` with. - * @param [encoding='utf8'] If `fill` is a string, this is its encoding. - */ - alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. - * - * The underlying memory for `Buffer` instances created in this way is _not_ - * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.allocUnsafe(10); - * - * console.log(buf); - * // Prints (contents may vary): - * - * buf.fill(0); - * - * console.log(buf); - * // Prints: - * ``` - * - * A `TypeError` will be thrown if `size` is not a number. - * - * The `Buffer` module pre-allocates an internal `Buffer` instance of - * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`, - * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two). - * - * Use of this pre-allocated internal memory pool is a key difference between - * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. - * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less - * than or equal to half `Buffer.poolSize`. The - * difference is subtle but can be important when an application requires the - * additional performance that `Buffer.allocUnsafe()` provides. - * @since v5.10.0 - * @param size The desired length of the new `Buffer`. - */ - allocUnsafe(size: number): Buffer; - /** - * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if - * `size` is 0. - * - * The underlying memory for `Buffer` instances created in this way is _not_ - * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize - * such `Buffer` instances with zeroes. - * - * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, - * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This - * allows applications to avoid the garbage collection overhead of creating many - * individually allocated `Buffer` instances. This approach improves both - * performance and memory usage by eliminating the need to track and clean up as - * many individual `ArrayBuffer` objects. - * - * However, in the case where a developer may need to retain a small chunk of - * memory from a pool for an indeterminate amount of time, it may be appropriate - * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and - * then copying out the relevant bits. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Need to keep around a few small chunks of memory. - * const store = []; - * - * socket.on('readable', () => { - * let data; - * while (null !== (data = readable.read())) { - * // Allocate for retained data. - * const sb = Buffer.allocUnsafeSlow(10); - * - * // Copy the data into the new allocation. - * data.copy(sb, 0, 0, 10); - * - * store.push(sb); - * } - * }); - * ``` - * - * A `TypeError` will be thrown if `size` is not a number. - * @since v5.12.0 - * @param size The desired length of the new `Buffer`. - */ - allocUnsafeSlow(size: number): Buffer; - } - interface Buffer extends Uint8Array { - // see ../buffer.d.ts for implementation shared with all TypeScript versions - - /** - * Returns a new `Buffer` that references the same memory as the original, but - * offset and cropped by the `start` and `end` indices. - * - * This method is not compatible with the `Uint8Array.prototype.slice()`, - * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('buffer'); - * - * const copiedBuf = Uint8Array.prototype.slice.call(buf); - * copiedBuf[0]++; - * console.log(copiedBuf.toString()); - * // Prints: cuffer - * - * console.log(buf.toString()); - * // Prints: buffer - * - * // With buf.slice(), the original buffer is modified. - * const notReallyCopiedBuf = buf.slice(); - * notReallyCopiedBuf[0]++; - * console.log(notReallyCopiedBuf.toString()); - * // Prints: cuffer - * console.log(buf.toString()); - * // Also prints: cuffer (!) - * ``` - * @since v0.3.0 - * @deprecated Use `subarray` instead. - * @param [start=0] Where the new `Buffer` will start. - * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). - */ - slice(start?: number, end?: number): Buffer; - /** - * Returns a new `Buffer` that references the same memory as the original, but - * offset and cropped by the `start` and `end` indices. - * - * Specifying `end` greater than `buf.length` will return the same result as - * that of `end` equal to `buf.length`. - * - * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray). - * - * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte - * // from the original `Buffer`. - * - * const buf1 = Buffer.allocUnsafe(26); - * - * for (let i = 0; i < 26; i++) { - * // 97 is the decimal ASCII value for 'a'. - * buf1[i] = i + 97; - * } - * - * const buf2 = buf1.subarray(0, 3); - * - * console.log(buf2.toString('ascii', 0, buf2.length)); - * // Prints: abc - * - * buf1[0] = 33; - * - * console.log(buf2.toString('ascii', 0, buf2.length)); - * // Prints: !bc - * ``` - * - * Specifying negative indexes causes the slice to be generated relative to the - * end of `buf` rather than the beginning. - * - * ```js - * import { Buffer } from 'node:buffer'; - * - * const buf = Buffer.from('buffer'); - * - * console.log(buf.subarray(-6, -1).toString()); - * // Prints: buffe - * // (Equivalent to buf.subarray(0, 5).) - * - * console.log(buf.subarray(-6, -2).toString()); - * // Prints: buff - * // (Equivalent to buf.subarray(0, 4).) - * - * console.log(buf.subarray(-5, -2).toString()); - * // Prints: uff - * // (Equivalent to buf.subarray(1, 4).) - * ``` - * @since v3.0.0 - * @param [start=0] Where the new `Buffer` will start. - * @param [end=buf.length] Where the new `Buffer` will end (not inclusive). - */ - subarray(start?: number, end?: number): Buffer; - } - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type NonSharedBuffer = Buffer; - /** - * @deprecated This is intended for internal use, and will be removed once `@types/node` no longer supports - * TypeScript versions earlier than 5.7. - */ - type AllowSharedBuffer = Buffer; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts deleted file mode 100644 index f148cc4..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -// Interface declaration for Float16Array, required in @types/node v24+. -// These definitions are specific to TS <=5.6. - -// This needs all of the "common" properties/methods of the TypedArrays, -// otherwise the type unions `TypedArray` and `ArrayBufferView` will be -// empty objects. -interface Float16Array extends Pick { - readonly BYTES_PER_ELEMENT: number; - readonly buffer: ArrayBufferLike; - readonly byteLength: number; - readonly byteOffset: number; - readonly length: number; - readonly [Symbol.toStringTag]: "Float16Array"; - at(index: number): number | undefined; - copyWithin(target: number, start: number, end?: number): this; - every(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): boolean; - fill(value: number, start?: number, end?: number): this; - filter(predicate: (value: number, index: number, array: Float16Array) => any, thisArg?: any): Float16Array; - find(predicate: (value: number, index: number, obj: Float16Array) => boolean, thisArg?: any): number | undefined; - findIndex(predicate: (value: number, index: number, obj: Float16Array) => boolean, thisArg?: any): number; - findLast( - predicate: (value: number, index: number, array: Float16Array) => value is S, - thisArg?: any, - ): S | undefined; - findLast( - predicate: (value: number, index: number, array: Float16Array) => unknown, - thisArg?: any, - ): number | undefined; - findLastIndex(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): number; - forEach(callbackfn: (value: number, index: number, array: Float16Array) => void, thisArg?: any): void; - includes(searchElement: number, fromIndex?: number): boolean; - indexOf(searchElement: number, fromIndex?: number): number; - join(separator?: string): string; - lastIndexOf(searchElement: number, fromIndex?: number): number; - map(callbackfn: (value: number, index: number, array: Float16Array) => number, thisArg?: any): Float16Array; - reduce( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, - ): number; - reduce( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, - initialValue: number, - ): number; - reduce( - callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float16Array) => U, - initialValue: U, - ): U; - reduceRight( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, - ): number; - reduceRight( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float16Array) => number, - initialValue: number, - ): number; - reduceRight( - callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float16Array) => U, - initialValue: U, - ): U; - reverse(): Float16Array; - set(array: ArrayLike, offset?: number): void; - slice(start?: number, end?: number): Float16Array; - some(predicate: (value: number, index: number, array: Float16Array) => unknown, thisArg?: any): boolean; - sort(compareFn?: (a: number, b: number) => number): this; - subarray(begin?: number, end?: number): Float16Array; - toLocaleString(locales: string | string[], options?: Intl.NumberFormatOptions): string; - toReversed(): Float16Array; - toSorted(compareFn?: (a: number, b: number) => number): Float16Array; - toString(): string; - valueOf(): Float16Array; - with(index: number, value: number): Float16Array; - [index: number]: number; -} diff --git a/skills/flight-finder/node_modules/@types/node/ts5.6/globals.typedarray.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.6/globals.typedarray.d.ts deleted file mode 100644 index 57a1ab4..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -export {}; // Make this a module - -declare global { - namespace NodeJS { - type TypedArray = - | Uint8Array - | Uint8ClampedArray - | Uint16Array - | Uint32Array - | Int8Array - | Int16Array - | Int32Array - | BigUint64Array - | BigInt64Array - | Float16Array - | Float32Array - | Float64Array; - type ArrayBufferView = TypedArray | DataView; - - type NonSharedUint8Array = Uint8Array; - type NonSharedUint8ClampedArray = Uint8ClampedArray; - type NonSharedUint16Array = Uint16Array; - type NonSharedUint32Array = Uint32Array; - type NonSharedInt8Array = Int8Array; - type NonSharedInt16Array = Int16Array; - type NonSharedInt32Array = Int32Array; - type NonSharedBigUint64Array = BigUint64Array; - type NonSharedBigInt64Array = BigInt64Array; - type NonSharedFloat16Array = Float16Array; - type NonSharedFloat32Array = Float32Array; - type NonSharedFloat64Array = Float64Array; - type NonSharedDataView = DataView; - type NonSharedTypedArray = TypedArray; - type NonSharedArrayBufferView = ArrayBufferView; - } -} diff --git a/skills/flight-finder/node_modules/@types/node/ts5.6/index.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.6/index.d.ts deleted file mode 100644 index a157660..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.6/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * License for programmatically and manually incorporated - * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc - * - * Copyright Node.js contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -// NOTE: These definitions support Node.js and TypeScript 5.2 through 5.6. - -// Reference required TypeScript libraries: -/// -/// - -// TypeScript library polyfills required for TypeScript <=5.6: -/// - -// Iterator definitions required for compatibility with TypeScript <5.6: -/// - -// Definitions for Node.js modules specific to TypeScript <=5.6: -/// -/// - -// Definitions for Node.js modules that are not specific to any version of TypeScript: -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// diff --git a/skills/flight-finder/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts deleted file mode 100644 index 110b1eb..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -// Interface declaration for Float16Array, required in @types/node v24+. -// These definitions are specific to TS 5.7. - -// This needs all of the "common" properties/methods of the TypedArrays, -// otherwise the type unions `TypedArray` and `ArrayBufferView` will be -// empty objects. -interface Float16Array { - readonly BYTES_PER_ELEMENT: number; - readonly buffer: TArrayBuffer; - readonly byteLength: number; - readonly byteOffset: number; - readonly length: number; - readonly [Symbol.toStringTag]: "Float16Array"; - at(index: number): number | undefined; - copyWithin(target: number, start: number, end?: number): this; - entries(): ArrayIterator<[number, number]>; - every(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; - fill(value: number, start?: number, end?: number): this; - filter(predicate: (value: number, index: number, array: this) => any, thisArg?: any): Float16Array; - find(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number | undefined; - findIndex(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number; - findLast( - predicate: (value: number, index: number, array: this) => value is S, - thisArg?: any, - ): S | undefined; - findLast(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): number | undefined; - findLastIndex(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): number; - forEach(callbackfn: (value: number, index: number, array: this) => void, thisArg?: any): void; - includes(searchElement: number, fromIndex?: number): boolean; - indexOf(searchElement: number, fromIndex?: number): number; - join(separator?: string): string; - keys(): ArrayIterator; - lastIndexOf(searchElement: number, fromIndex?: number): number; - map(callbackfn: (value: number, index: number, array: this) => number, thisArg?: any): Float16Array; - reduce( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, - ): number; - reduce( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, - initialValue: number, - ): number; - reduce( - callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, - initialValue: U, - ): U; - reduceRight( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, - ): number; - reduceRight( - callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, - initialValue: number, - ): number; - reduceRight( - callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, - initialValue: U, - ): U; - reverse(): this; - set(array: ArrayLike, offset?: number): void; - slice(start?: number, end?: number): Float16Array; - some(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; - sort(compareFn?: (a: number, b: number) => number): this; - subarray(begin?: number, end?: number): Float16Array; - toLocaleString(locales: string | string[], options?: Intl.NumberFormatOptions): string; - toReversed(): Float16Array; - toSorted(compareFn?: (a: number, b: number) => number): Float16Array; - toString(): string; - valueOf(): this; - values(): ArrayIterator; - with(index: number, value: number): Float16Array; - [Symbol.iterator](): ArrayIterator; - [index: number]: number; -} diff --git a/skills/flight-finder/node_modules/@types/node/ts5.7/index.d.ts b/skills/flight-finder/node_modules/@types/node/ts5.7/index.d.ts deleted file mode 100644 index 32c541b..0000000 --- a/skills/flight-finder/node_modules/@types/node/ts5.7/index.d.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * License for programmatically and manually incorporated - * documentation aka. `JSDoc` from https://github.com/nodejs/node/tree/master/doc - * - * Copyright Node.js contributors. All rights reserved. - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -// NOTE: These definitions support Node.js and TypeScript 5.7. - -// Reference required TypeScript libraries: -/// -/// - -// TypeScript library polyfills required for TypeScript 5.7: -/// - -// Iterator definitions required for compatibility with TypeScript <5.6: -/// - -// Definitions for Node.js modules specific to TypeScript 5.7+: -/// -/// - -// Definitions for Node.js modules that are not specific to any version of TypeScript: -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// -/// diff --git a/skills/flight-finder/node_modules/@types/node/tty.d.ts b/skills/flight-finder/node_modules/@types/node/tty.d.ts deleted file mode 100644 index 9b97a1e..0000000 --- a/skills/flight-finder/node_modules/@types/node/tty.d.ts +++ /dev/null @@ -1,250 +0,0 @@ -/** - * The `node:tty` module provides the `tty.ReadStream` and `tty.WriteStream` classes. In most cases, it will not be necessary or possible to use this module - * directly. However, it can be accessed using: - * - * ```js - * import tty from 'node:tty'; - * ``` - * - * When Node.js detects that it is being run with a text terminal ("TTY") - * attached, `process.stdin` will, by default, be initialized as an instance of `tty.ReadStream` and both `process.stdout` and `process.stderr` will, by - * default, be instances of `tty.WriteStream`. The preferred method of determining - * whether Node.js is being run within a TTY context is to check that the value of - * the `process.stdout.isTTY` property is `true`: - * - * ```console - * $ node -p -e "Boolean(process.stdout.isTTY)" - * true - * $ node -p -e "Boolean(process.stdout.isTTY)" | cat - * false - * ``` - * - * In most cases, there should be little to no reason for an application to - * manually create instances of the `tty.ReadStream` and `tty.WriteStream` classes. - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/tty.js) - */ -declare module "node:tty" { - import * as net from "node:net"; - /** - * The `tty.isatty()` method returns `true` if the given `fd` is associated with - * a TTY and `false` if it is not, including whenever `fd` is not a non-negative - * integer. - * @since v0.5.8 - * @param fd A numeric file descriptor - */ - function isatty(fd: number): boolean; - /** - * Represents the readable side of a TTY. In normal circumstances `process.stdin` will be the only `tty.ReadStream` instance in a Node.js - * process and there should be no reason to create additional instances. - * @since v0.5.8 - */ - class ReadStream extends net.Socket { - constructor(fd: number, options?: net.SocketConstructorOpts); - /** - * A `boolean` that is `true` if the TTY is currently configured to operate as a - * raw device. - * - * This flag is always `false` when a process starts, even if the terminal is - * operating in raw mode. Its value will change with subsequent calls to `setRawMode`. - * @since v0.7.7 - */ - isRaw: boolean; - /** - * Allows configuration of `tty.ReadStream` so that it operates as a raw device. - * - * When in raw mode, input is always available character-by-character, not - * including modifiers. Additionally, all special processing of characters by the - * terminal is disabled, including echoing input - * characters. Ctrl+C will no longer cause a `SIGINT` when - * in this mode. - * @since v0.7.7 - * @param mode If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` - * property will be set to the resulting mode. - * @return The read stream instance. - */ - setRawMode(mode: boolean): this; - /** - * A `boolean` that is always `true` for `tty.ReadStream` instances. - * @since v0.5.8 - */ - isTTY: boolean; - } - /** - * -1 - to the left from cursor - * 0 - the entire line - * 1 - to the right from cursor - */ - type Direction = -1 | 0 | 1; - interface WriteStreamEventMap extends net.SocketEventMap { - "resize": []; - } - /** - * Represents the writable side of a TTY. In normal circumstances, `process.stdout` and `process.stderr` will be the only`tty.WriteStream` instances created for a Node.js process and there - * should be no reason to create additional instances. - * @since v0.5.8 - */ - class WriteStream extends net.Socket { - constructor(fd: number); - /** - * `writeStream.clearLine()` clears the current line of this `WriteStream` in a - * direction identified by `dir`. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - clearLine(dir: Direction, callback?: () => void): boolean; - /** - * `writeStream.clearScreenDown()` clears this `WriteStream` from the current - * cursor down. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - clearScreenDown(callback?: () => void): boolean; - /** - * `writeStream.cursorTo()` moves this `WriteStream`'s cursor to the specified - * position. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - cursorTo(x: number, y?: number, callback?: () => void): boolean; - cursorTo(x: number, callback: () => void): boolean; - /** - * `writeStream.moveCursor()` moves this `WriteStream`'s cursor _relative_ to its - * current position. - * @since v0.7.7 - * @param callback Invoked once the operation completes. - * @return `false` if the stream wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`. - */ - moveCursor(dx: number, dy: number, callback?: () => void): boolean; - /** - * Returns: - * - * * `1` for 2, - * * `4` for 16, - * * `8` for 256, - * * `24` for 16,777,216 colors supported. - * - * Use this to determine what colors the terminal supports. Due to the nature of - * colors in terminals it is possible to either have false positives or false - * negatives. It depends on process information and the environment variables that - * may lie about what terminal is used. - * It is possible to pass in an `env` object to simulate the usage of a specific - * terminal. This can be useful to check how specific environment settings behave. - * - * To enforce a specific color support, use one of the below environment settings. - * - * * 2 colors: `FORCE_COLOR = 0` (Disables colors) - * * 16 colors: `FORCE_COLOR = 1` - * * 256 colors: `FORCE_COLOR = 2` - * * 16,777,216 colors: `FORCE_COLOR = 3` - * - * Disabling color support is also possible by using the `NO_COLOR` and `NODE_DISABLE_COLORS` environment variables. - * @since v9.9.0 - * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. - */ - getColorDepth(env?: object): number; - /** - * Returns `true` if the `writeStream` supports at least as many colors as provided - * in `count`. Minimum support is 2 (black and white). - * - * This has the same false positives and negatives as described in `writeStream.getColorDepth()`. - * - * ```js - * process.stdout.hasColors(); - * // Returns true or false depending on if `stdout` supports at least 16 colors. - * process.stdout.hasColors(256); - * // Returns true or false depending on if `stdout` supports at least 256 colors. - * process.stdout.hasColors({ TMUX: '1' }); - * // Returns true. - * process.stdout.hasColors(2 ** 24, { TMUX: '1' }); - * // Returns false (the environment setting pretends to support 2 ** 8 colors). - * ``` - * @since v11.13.0, v10.16.0 - * @param [count=16] The number of colors that are requested (minimum 2). - * @param [env=process.env] An object containing the environment variables to check. This enables simulating the usage of a specific terminal. - */ - hasColors(count?: number): boolean; - hasColors(env?: object): boolean; - hasColors(count: number, env?: object): boolean; - /** - * `writeStream.getWindowSize()` returns the size of the TTY - * corresponding to this `WriteStream`. The array is of the type `[numColumns, numRows]` where `numColumns` and `numRows` represent the number - * of columns and rows in the corresponding TTY. - * @since v0.7.7 - */ - getWindowSize(): [number, number]; - /** - * A `number` specifying the number of columns the TTY currently has. This property - * is updated whenever the `'resize'` event is emitted. - * @since v0.7.7 - */ - columns: number; - /** - * A `number` specifying the number of rows the TTY currently has. This property - * is updated whenever the `'resize'` event is emitted. - * @since v0.7.7 - */ - rows: number; - /** - * A `boolean` that is always `true`. - * @since v0.5.8 - */ - isTTY: boolean; - // #region InternalEventEmitter - addListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - addListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - emit(eventName: E, ...args: WriteStreamEventMap[E]): boolean; - emit(eventName: string | symbol, ...args: any[]): boolean; - listenerCount( - eventName: E, - listener?: (...args: WriteStreamEventMap[E]) => void, - ): number; - listenerCount(eventName: string | symbol, listener?: (...args: any[]) => void): number; - listeners(eventName: E): ((...args: WriteStreamEventMap[E]) => void)[]; - listeners(eventName: string | symbol): ((...args: any[]) => void)[]; - off( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - on( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - once( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - prependOnceListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - rawListeners(eventName: E): ((...args: WriteStreamEventMap[E]) => void)[]; - rawListeners(eventName: string | symbol): ((...args: any[]) => void)[]; - // eslint-disable-next-line @definitelytyped/no-unnecessary-generics - removeAllListeners(eventName?: E): this; - removeAllListeners(eventName?: string | symbol): this; - removeListener( - eventName: E, - listener: (...args: WriteStreamEventMap[E]) => void, - ): this; - removeListener(eventName: string | symbol, listener: (...args: any[]) => void): this; - // #endregion - } -} -declare module "tty" { - export * from "node:tty"; -} diff --git a/skills/flight-finder/node_modules/@types/node/url.d.ts b/skills/flight-finder/node_modules/@types/node/url.d.ts deleted file mode 100644 index b0a8ed0..0000000 --- a/skills/flight-finder/node_modules/@types/node/url.d.ts +++ /dev/null @@ -1,541 +0,0 @@ -/** - * The `node:url` module provides utilities for URL resolution and parsing. It can - * be accessed using: - * - * ```js - * import url from 'node:url'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/url.js) - */ -declare module "node:url" { - import { Blob, NonSharedBuffer } from "node:buffer"; - import { ClientRequestArgs } from "node:http"; - import { ParsedUrlQuery, ParsedUrlQueryInput } from "node:querystring"; - // Input to `url.format` - interface UrlObject { - auth?: string | null | undefined; - hash?: string | null | undefined; - host?: string | null | undefined; - hostname?: string | null | undefined; - href?: string | null | undefined; - pathname?: string | null | undefined; - protocol?: string | null | undefined; - search?: string | null | undefined; - slashes?: boolean | null | undefined; - port?: string | number | null | undefined; - query?: string | null | ParsedUrlQueryInput | undefined; - } - // Output of `url.parse` - interface Url { - auth: string | null; - hash: string | null; - host: string | null; - hostname: string | null; - href: string; - path: string | null; - pathname: string | null; - protocol: string | null; - search: string | null; - slashes: boolean | null; - port: string | null; - query: string | null | ParsedUrlQuery; - } - interface UrlWithParsedQuery extends Url { - query: ParsedUrlQuery; - } - interface UrlWithStringQuery extends Url { - query: string | null; - } - interface FileUrlToPathOptions { - /** - * `true` if the `path` should be return as a windows filepath, `false` for posix, and `undefined` for the system default. - * @default undefined - * @since v22.1.0 - */ - windows?: boolean | undefined; - } - interface PathToFileUrlOptions { - /** - * `true` if the `path` should be return as a windows filepath, `false` for posix, and `undefined` for the system default. - * @default undefined - * @since v22.1.0 - */ - windows?: boolean | undefined; - } - /** - * The `url.parse()` method takes a URL string, parses it, and returns a URL - * object. - * - * A `TypeError` is thrown if `urlString` is not a string. - * - * A `URIError` is thrown if the `auth` property is present but cannot be decoded. - * - * `url.parse()` uses a lenient, non-standard algorithm for parsing URL - * strings. It is prone to security issues such as [host name spoofing](https://hackerone.com/reports/678487) - * and incorrect handling of usernames and passwords. Do not use with untrusted - * input. CVEs are not issued for `url.parse()` vulnerabilities. Use the - * [WHATWG URL](https://nodejs.org/docs/latest-v25.x/api/url.html#the-whatwg-url-api) API instead, for example: - * - * ```js - * function getURL(req) { - * const proto = req.headers['x-forwarded-proto'] || 'https'; - * const host = req.headers['x-forwarded-host'] || req.headers.host || 'example.com'; - * return new URL(req.url || '/', `${proto}://${host}`); - * } - * ``` - * - * The example above assumes well-formed headers are forwarded from a reverse - * proxy to your Node.js server. If you are not using a reverse proxy, you should - * use the example below: - * - * ```js - * function getURL(req) { - * return new URL(req.url || '/', 'https://example.com'); - * } - * ``` - * @since v0.1.25 - * @deprecated Use the WHATWG URL API instead. - * @param urlString The URL string to parse. - * @param parseQueryString If `true`, the `query` property will always - * be set to an object returned by the [`querystring`](https://nodejs.org/docs/latest-v25.x/api/querystring.html) module's `parse()` - * method. If `false`, the `query` property on the returned URL object will be an - * unparsed, undecoded string. **Default:** `false`. - * @param slashesDenoteHost If `true`, the first token after the literal - * string `//` and preceding the next `/` will be interpreted as the `host`. - * For instance, given `//foo/bar`, the result would be - * `{host: 'foo', pathname: '/bar'}` rather than `{pathname: '//foo/bar'}`. - * **Default:** `false`. - */ - function parse( - urlString: string, - parseQueryString?: false, - slashesDenoteHost?: boolean, - ): UrlWithStringQuery; - function parse(urlString: string, parseQueryString: true, slashesDenoteHost?: boolean): UrlWithParsedQuery; - function parse(urlString: string, parseQueryString: boolean, slashesDenoteHost?: boolean): Url; - /** - * The `url.format()` method returns a formatted URL string derived from `urlObject`. - * - * ```js - * import url from 'node:url'; - * url.format({ - * protocol: 'https', - * hostname: 'example.com', - * pathname: '/some/path', - * query: { - * page: 1, - * format: 'json', - * }, - * }); - * - * // => 'https://example.com/some/path?page=1&format=json' - * ``` - * - * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. - * - * The formatting process operates as follows: - * - * * A new empty string `result` is created. - * * If `urlObject.protocol` is a string, it is appended as-is to `result`. - * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. - * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII - * colon (`:`) character, the literal string `:` will be appended to `result`. - * * If either of the following conditions is true, then the literal string `//` will be appended to `result`: - * * `urlObject.slashes` property is true; - * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or `file`; - * * If the value of the `urlObject.auth` property is truthy, and either `urlObject.host` or `urlObject.hostname` are not `undefined`, the value of `urlObject.auth` will be coerced into a string - * and appended to `result` followed by the literal string `@`. - * * If the `urlObject.host` property is `undefined` then: - * * If the `urlObject.hostname` is a string, it is appended to `result`. - * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, - * an `Error` is thrown. - * * If the `urlObject.port` property value is truthy, and `urlObject.hostname` is not `undefined`: - * * The literal string `:` is appended to `result`, and - * * The value of `urlObject.port` is coerced to a string and appended to `result`. - * * Otherwise, if the `urlObject.host` property value is truthy, the value of `urlObject.host` is coerced to a string and appended to `result`. - * * If the `urlObject.pathname` property is a string that is not an empty string: - * * If the `urlObject.pathname` _does not start_ with an ASCII forward slash - * (`/`), then the literal string `'/'` is appended to `result`. - * * The value of `urlObject.pathname` is appended to `result`. - * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. - * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result` followed by the output of calling the - * `querystring` module's `stringify()` method passing the value of `urlObject.query`. - * * Otherwise, if `urlObject.search` is a string: - * * If the value of `urlObject.search` _does not start_ with the ASCII question - * mark (`?`) character, the literal string `?` is appended to `result`. - * * The value of `urlObject.search` is appended to `result`. - * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. - * * If the `urlObject.hash` property is a string: - * * If the value of `urlObject.hash` _does not start_ with the ASCII hash (`#`) - * character, the literal string `#` is appended to `result`. - * * The value of `urlObject.hash` is appended to `result`. - * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a - * string, an `Error` is thrown. - * * `result` is returned. - * @since v0.1.25 - * @legacy Use the WHATWG URL API instead. - * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. - */ - function format(urlObject: URL, options?: URLFormatOptions): string; - /** - * The `url.format()` method returns a formatted URL string derived from `urlObject`. - * - * ```js - * import url from 'node:url'; - * url.format({ - * protocol: 'https', - * hostname: 'example.com', - * pathname: '/some/path', - * query: { - * page: 1, - * format: 'json', - * }, - * }); - * - * // => 'https://example.com/some/path?page=1&format=json' - * ``` - * - * If `urlObject` is not an object or a string, `url.format()` will throw a `TypeError`. - * - * The formatting process operates as follows: - * - * * A new empty string `result` is created. - * * If `urlObject.protocol` is a string, it is appended as-is to `result`. - * * Otherwise, if `urlObject.protocol` is not `undefined` and is not a string, an `Error` is thrown. - * * For all string values of `urlObject.protocol` that _do not end_ with an ASCII - * colon (`:`) character, the literal string `:` will be appended to `result`. - * * If either of the following conditions is true, then the literal string `//` will be appended to `result`: - * * `urlObject.slashes` property is true; - * * `urlObject.protocol` begins with `http`, `https`, `ftp`, `gopher`, or `file`; - * * If the value of the `urlObject.auth` property is truthy, and either `urlObject.host` or `urlObject.hostname` are not `undefined`, the value of `urlObject.auth` will be coerced into a string - * and appended to `result` followed by the literal string `@`. - * * If the `urlObject.host` property is `undefined` then: - * * If the `urlObject.hostname` is a string, it is appended to `result`. - * * Otherwise, if `urlObject.hostname` is not `undefined` and is not a string, - * an `Error` is thrown. - * * If the `urlObject.port` property value is truthy, and `urlObject.hostname` is not `undefined`: - * * The literal string `:` is appended to `result`, and - * * The value of `urlObject.port` is coerced to a string and appended to `result`. - * * Otherwise, if the `urlObject.host` property value is truthy, the value of `urlObject.host` is coerced to a string and appended to `result`. - * * If the `urlObject.pathname` property is a string that is not an empty string: - * * If the `urlObject.pathname` _does not start_ with an ASCII forward slash - * (`/`), then the literal string `'/'` is appended to `result`. - * * The value of `urlObject.pathname` is appended to `result`. - * * Otherwise, if `urlObject.pathname` is not `undefined` and is not a string, an `Error` is thrown. - * * If the `urlObject.search` property is `undefined` and if the `urlObject.query`property is an `Object`, the literal string `?` is appended to `result` followed by the output of calling the - * `querystring` module's `stringify()` method passing the value of `urlObject.query`. - * * Otherwise, if `urlObject.search` is a string: - * * If the value of `urlObject.search` _does not start_ with the ASCII question - * mark (`?`) character, the literal string `?` is appended to `result`. - * * The value of `urlObject.search` is appended to `result`. - * * Otherwise, if `urlObject.search` is not `undefined` and is not a string, an `Error` is thrown. - * * If the `urlObject.hash` property is a string: - * * If the value of `urlObject.hash` _does not start_ with the ASCII hash (`#`) - * character, the literal string `#` is appended to `result`. - * * The value of `urlObject.hash` is appended to `result`. - * * Otherwise, if the `urlObject.hash` property is not `undefined` and is not a - * string, an `Error` is thrown. - * * `result` is returned. - * @since v0.1.25 - * @legacy Use the WHATWG URL API instead. - * @param urlObject A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. - */ - function format(urlObject: UrlObject | string): string; - /** - * The `url.resolve()` method resolves a target URL relative to a base URL in a - * manner similar to that of a web browser resolving an anchor tag. - * - * ```js - * import url from 'node:url'; - * url.resolve('/one/two/three', 'four'); // '/one/two/four' - * url.resolve('http://example.com/', '/one'); // 'http://example.com/one' - * url.resolve('http://example.com/one', '/two'); // 'http://example.com/two' - * ``` - * - * To achieve the same result using the WHATWG URL API: - * - * ```js - * function resolve(from, to) { - * const resolvedUrl = new URL(to, new URL(from, 'resolve://')); - * if (resolvedUrl.protocol === 'resolve:') { - * // `from` is a relative URL. - * const { pathname, search, hash } = resolvedUrl; - * return pathname + search + hash; - * } - * return resolvedUrl.toString(); - * } - * - * resolve('/one/two/three', 'four'); // '/one/two/four' - * resolve('http://example.com/', '/one'); // 'http://example.com/one' - * resolve('http://example.com/one', '/two'); // 'http://example.com/two' - * ``` - * @since v0.1.25 - * @legacy Use the WHATWG URL API instead. - * @param from The base URL to use if `to` is a relative URL. - * @param to The target URL to resolve. - */ - function resolve(from: string, to: string): string; - /** - * Returns the [Punycode](https://tools.ietf.org/html/rfc5891#section-4.4) ASCII serialization of the `domain`. If `domain` is an - * invalid domain, the empty string is returned. - * - * It performs the inverse operation to {@link domainToUnicode}. - * - * ```js - * import url from 'node:url'; - * - * console.log(url.domainToASCII('español.com')); - * // Prints xn--espaol-zwa.com - * console.log(url.domainToASCII('中文.com')); - * // Prints xn--fiq228c.com - * console.log(url.domainToASCII('xn--iñvalid.com')); - * // Prints an empty string - * ``` - * @since v7.4.0, v6.13.0 - */ - function domainToASCII(domain: string): string; - /** - * Returns the Unicode serialization of the `domain`. If `domain` is an invalid - * domain, the empty string is returned. - * - * It performs the inverse operation to {@link domainToASCII}. - * - * ```js - * import url from 'node:url'; - * - * console.log(url.domainToUnicode('xn--espaol-zwa.com')); - * // Prints español.com - * console.log(url.domainToUnicode('xn--fiq228c.com')); - * // Prints 中文.com - * console.log(url.domainToUnicode('xn--iñvalid.com')); - * // Prints an empty string - * ``` - * @since v7.4.0, v6.13.0 - */ - function domainToUnicode(domain: string): string; - /** - * This function ensures the correct decodings of percent-encoded characters as - * well as ensuring a cross-platform valid absolute path string. - * - * ```js - * import { fileURLToPath } from 'node:url'; - * - * const __filename = fileURLToPath(import.meta.url); - * - * new URL('file:///C:/path/').pathname; // Incorrect: /C:/path/ - * fileURLToPath('file:///C:/path/'); // Correct: C:\path\ (Windows) - * - * new URL('file://nas/foo.txt').pathname; // Incorrect: /foo.txt - * fileURLToPath('file://nas/foo.txt'); // Correct: \\nas\foo.txt (Windows) - * - * new URL('file:///你好.txt').pathname; // Incorrect: /%E4%BD%A0%E5%A5%BD.txt - * fileURLToPath('file:///你好.txt'); // Correct: /你好.txt (POSIX) - * - * new URL('file:///hello world').pathname; // Incorrect: /hello%20world - * fileURLToPath('file:///hello world'); // Correct: /hello world (POSIX) - * ``` - * - * **Security Considerations:** - * - * This function decodes percent-encoded characters, including encoded dot-segments - * (`%2e` as `.` and `%2e%2e` as `..`), and then normalizes the resulting path. - * This means that encoded directory traversal sequences (such as `%2e%2e`) are - * decoded and processed as actual path traversal, even though encoded slashes - * (`%2F`, `%5C`) are correctly rejected. - * - * **Applications must not rely on `fileURLToPath()` alone to prevent directory - * traversal attacks.** Always perform explicit path validation and security checks - * on the returned path value to ensure it remains within expected boundaries - * before using it for file system operations. - * @since v10.12.0 - * @param url The file URL string or URL object to convert to a path. - * @return The fully-resolved platform-specific Node.js file path. - */ - function fileURLToPath(url: string | URL, options?: FileUrlToPathOptions): string; - /** - * Like `url.fileURLToPath(...)` except that instead of returning a string - * representation of the path, a `Buffer` is returned. This conversion is - * helpful when the input URL contains percent-encoded segments that are - * not valid UTF-8 / Unicode sequences. - * - * **Security Considerations:** - * - * This function has the same security considerations as `url.fileURLToPath()`. - * It decodes percent-encoded characters, including encoded dot-segments - * (`%2e` as `.` and `%2e%2e` as `..`), and normalizes the path. **Applications - * must not rely on this function alone to prevent directory traversal attacks.** - * Always perform explicit path validation on the returned buffer value before - * using it for file system operations. - * @since v24.3.0 - * @param url The file URL string or URL object to convert to a path. - * @returns The fully-resolved platform-specific Node.js file path - * as a `Buffer`. - */ - function fileURLToPathBuffer(url: string | URL, options?: FileUrlToPathOptions): NonSharedBuffer; - /** - * This function ensures that `path` is resolved absolutely, and that the URL - * control characters are correctly encoded when converting into a File URL. - * - * ```js - * import { pathToFileURL } from 'node:url'; - * - * new URL('/foo#1', 'file:'); // Incorrect: file:///foo#1 - * pathToFileURL('/foo#1'); // Correct: file:///foo%231 (POSIX) - * - * new URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c - * pathToFileURL('/some/path%.c'); // Correct: file:///some/path%25.c (POSIX) - * ``` - * @since v10.12.0 - * @param path The path to convert to a File URL. - * @return The file URL object. - */ - function pathToFileURL(path: string, options?: PathToFileUrlOptions): URL; - /** - * This utility function converts a URL object into an ordinary options object as - * expected by the `http.request()` and `https.request()` APIs. - * - * ```js - * import { urlToHttpOptions } from 'node:url'; - * const myURL = new URL('https://a:b@測試?abc#foo'); - * - * console.log(urlToHttpOptions(myURL)); - * /* - * { - * protocol: 'https:', - * hostname: 'xn--g6w251d', - * hash: '#foo', - * search: '?abc', - * pathname: '/', - * path: '/?abc', - * href: 'https://a:b@xn--g6w251d/?abc#foo', - * auth: 'a:b' - * } - * - * ``` - * @since v15.7.0, v14.18.0 - * @param url The `WHATWG URL` object to convert to an options object. - * @return Options object - */ - function urlToHttpOptions(url: URL): ClientRequestArgs; - interface URLFormatOptions { - /** - * `true` if the serialized URL string should include the username and password, `false` otherwise. - * @default true - */ - auth?: boolean | undefined; - /** - * `true` if the serialized URL string should include the fragment, `false` otherwise. - * @default true - */ - fragment?: boolean | undefined; - /** - * `true` if the serialized URL string should include the search query, `false` otherwise. - * @default true - */ - search?: boolean | undefined; - /** - * `true` if Unicode characters appearing in the host component of the URL string should be encoded directly as opposed to - * being Punycode encoded. - * @default false - */ - unicode?: boolean | undefined; - } - // #region web types - type URLPatternInput = string | URLPatternInit; - interface URLPatternComponentResult { - input: string; - groups: Record; - } - interface URLPatternInit { - protocol?: string; - username?: string; - password?: string; - hostname?: string; - port?: string; - pathname?: string; - search?: string; - hash?: string; - baseURL?: string; - } - interface URLPatternOptions { - ignoreCase?: boolean; - } - interface URLPatternResult { - inputs: URLPatternInput[]; - protocol: URLPatternComponentResult; - username: URLPatternComponentResult; - password: URLPatternComponentResult; - hostname: URLPatternComponentResult; - port: URLPatternComponentResult; - pathname: URLPatternComponentResult; - search: URLPatternComponentResult; - hash: URLPatternComponentResult; - } - interface URL { - hash: string; - host: string; - hostname: string; - href: string; - readonly origin: string; - password: string; - pathname: string; - port: string; - protocol: string; - search: string; - readonly searchParams: URLSearchParams; - username: string; - toJSON(): string; - } - var URL: { - prototype: URL; - new(url: string | URL, base?: string | URL): URL; - canParse(input: string | URL, base?: string | URL): boolean; - createObjectURL(blob: Blob): string; - parse(input: string | URL, base?: string | URL): URL | null; - revokeObjectURL(id: string): void; - }; - interface URLPattern { - readonly hasRegExpGroups: boolean; - readonly hash: string; - readonly hostname: string; - readonly password: string; - readonly pathname: string; - readonly port: string; - readonly protocol: string; - readonly search: string; - readonly username: string; - exec(input?: URLPatternInput, baseURL?: string | URL): URLPatternResult | null; - test(input?: URLPatternInput, baseURL?: string | URL): boolean; - } - var URLPattern: { - prototype: URLPattern; - new(input: URLPatternInput, baseURL: string | URL, options?: URLPatternOptions): URLPattern; - new(input?: URLPatternInput, options?: URLPatternOptions): URLPattern; - }; - interface URLSearchParams { - readonly size: number; - append(name: string, value: string): void; - delete(name: string, value?: string): void; - get(name: string): string | null; - getAll(name: string): string[]; - has(name: string, value?: string): boolean; - set(name: string, value: string): void; - sort(): void; - forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any): void; - [Symbol.iterator](): URLSearchParamsIterator<[string, string]>; - entries(): URLSearchParamsIterator<[string, string]>; - keys(): URLSearchParamsIterator; - values(): URLSearchParamsIterator; - } - var URLSearchParams: { - prototype: URLSearchParams; - new(init?: string[][] | Record | string | URLSearchParams): URLSearchParams; - }; - interface URLSearchParamsIterator extends NodeJS.Iterator { - [Symbol.iterator](): URLSearchParamsIterator; - } - // #endregion -} -declare module "url" { - export * from "node:url"; -} diff --git a/skills/flight-finder/node_modules/@types/node/util.d.ts b/skills/flight-finder/node_modules/@types/node/util.d.ts deleted file mode 100644 index 10062f6..0000000 --- a/skills/flight-finder/node_modules/@types/node/util.d.ts +++ /dev/null @@ -1,1687 +0,0 @@ -/** - * The `node:util` module supports the needs of Node.js internal APIs. Many of the - * utilities are useful for application and module developers as well. To access - * it: - * - * ```js - * import util from 'node:util'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/util.js) - */ -declare module "node:util" { - export * as types from "node:util/types"; - export type InspectStyle = - | "special" - | "number" - | "bigint" - | "boolean" - | "undefined" - | "null" - | "string" - | "symbol" - | "date" - | "name" - | "regexp" - | "module"; - export interface InspectStyles extends Record string)> { - regexp: { - (value: string): string; - colors: InspectColor[]; - }; - } - export type InspectColorModifier = - | "reset" - | "bold" - | "dim" - | "italic" - | "underline" - | "blink" - | "inverse" - | "hidden" - | "strikethrough" - | "doubleunderline"; - export type InspectColorForeground = - | "black" - | "red" - | "green" - | "yellow" - | "blue" - | "magenta" - | "cyan" - | "white" - | "gray" - | "redBright" - | "greenBright" - | "yellowBright" - | "blueBright" - | "magentaBright" - | "cyanBright" - | "whiteBright"; - export type InspectColorBackground = `bg${Capitalize}`; - export type InspectColor = InspectColorModifier | InspectColorForeground | InspectColorBackground; - export interface InspectColors extends Record {} - export interface InspectOptions { - /** - * If `true`, object's non-enumerable symbols and properties are included in the formatted result. - * `WeakMap` and `WeakSet` entries are also included as well as user defined prototype properties (excluding method properties). - * @default false - */ - showHidden?: boolean | undefined; - /** - * Specifies the number of times to recurse while formatting object. - * This is useful for inspecting large objects. - * To recurse up to the maximum call stack size pass `Infinity` or `null`. - * @default 2 - */ - depth?: number | null | undefined; - /** - * If `true`, the output is styled with ANSI color codes. Colors are customizable. - */ - colors?: boolean | undefined; - /** - * If `false`, `[util.inspect.custom](depth, opts, inspect)` functions are not invoked. - * @default true - */ - customInspect?: boolean | undefined; - /** - * If `true`, `Proxy` inspection includes the target and handler objects. - * @default false - */ - showProxy?: boolean | undefined; - /** - * Specifies the maximum number of `Array`, `TypedArray`, `WeakMap`, and `WeakSet` elements - * to include when formatting. Set to `null` or `Infinity` to show all elements. - * Set to `0` or negative to show no elements. - * @default 100 - */ - maxArrayLength?: number | null | undefined; - /** - * Specifies the maximum number of characters to - * include when formatting. Set to `null` or `Infinity` to show all elements. - * Set to `0` or negative to show no characters. - * @default 10000 - */ - maxStringLength?: number | null | undefined; - /** - * The length at which input values are split across multiple lines. - * Set to `Infinity` to format the input as a single line - * (in combination with `compact` set to `true` or any number >= `1`). - * @default 80 - */ - breakLength?: number | undefined; - /** - * Setting this to `false` causes each object key - * to be displayed on a new line. It will also add new lines to text that is - * longer than `breakLength`. If set to a number, the most `n` inner elements - * are united on a single line as long as all properties fit into - * `breakLength`. Short array elements are also grouped together. Note that no - * text will be reduced below 16 characters, no matter the `breakLength` size. - * For more information, see the example below. - * @default true - */ - compact?: boolean | number | undefined; - /** - * If set to `true` or a function, all properties of an object, and `Set` and `Map` - * entries are sorted in the resulting string. - * If set to `true` the default sort is used. - * If set to a function, it is used as a compare function. - */ - sorted?: boolean | ((a: string, b: string) => number) | undefined; - /** - * If set to `true`, getters are going to be - * inspected as well. If set to `'get'` only getters without setter are going - * to be inspected. If set to `'set'` only getters having a corresponding - * setter are going to be inspected. This might cause side effects depending on - * the getter function. - * @default false - */ - getters?: "get" | "set" | boolean | undefined; - /** - * If set to `true`, an underscore is used to separate every three digits in all bigints and numbers. - * @default false - */ - numericSeparator?: boolean | undefined; - } - export interface InspectContext extends Required { - stylize(text: string, styleType: InspectStyle): string; - } - import _inspect = inspect; - export interface Inspectable { - [inspect.custom](depth: number, options: InspectContext, inspect: typeof _inspect): any; - } - // TODO: Remove these in a future major - /** @deprecated Use `InspectStyle` instead. */ - export type Style = Exclude; - /** @deprecated Use the `Inspectable` interface instead. */ - export type CustomInspectFunction = (depth: number, options: InspectContext) => any; - /** @deprecated Use `InspectContext` instead. */ - export interface InspectOptionsStylized extends InspectContext {} - /** @deprecated Use `InspectColorModifier` instead. */ - export type Modifiers = InspectColorModifier; - /** @deprecated Use `InspectColorForeground` instead. */ - export type ForegroundColors = InspectColorForeground; - /** @deprecated Use `InspectColorBackground` instead. */ - export type BackgroundColors = InspectColorBackground; - export interface CallSiteObject { - /** - * Returns the name of the function associated with this call site. - */ - functionName: string; - /** - * Returns the name of the resource that contains the script for the - * function for this call site. - */ - scriptName: string; - /** - * Returns the unique id of the script, as in Chrome DevTools protocol - * [`Runtime.ScriptId`](https://chromedevtools.github.io/devtools-protocol/1-3/Runtime/#type-ScriptId). - * @since v22.14.0 - */ - scriptId: string; - /** - * Returns the number, 1-based, of the line for the associate function call. - */ - lineNumber: number; - /** - * Returns the 1-based column offset on the line for the associated function call. - */ - columnNumber: number; - } - export type DiffEntry = [operation: -1 | 0 | 1, value: string]; - /** - * `util.diff()` compares two string or array values and returns an array of difference entries. - * It uses the Myers diff algorithm to compute minimal differences, which is the same algorithm - * used internally by assertion error messages. - * - * If the values are equal, an empty array is returned. - * - * ```js - * const { diff } = require('node:util'); - * - * // Comparing strings - * const actualString = '12345678'; - * const expectedString = '12!!5!7!'; - * console.log(diff(actualString, expectedString)); - * // [ - * // [0, '1'], - * // [0, '2'], - * // [1, '3'], - * // [1, '4'], - * // [-1, '!'], - * // [-1, '!'], - * // [0, '5'], - * // [1, '6'], - * // [-1, '!'], - * // [0, '7'], - * // [1, '8'], - * // [-1, '!'], - * // ] - * // Comparing arrays - * const actualArray = ['1', '2', '3']; - * const expectedArray = ['1', '3', '4']; - * console.log(diff(actualArray, expectedArray)); - * // [ - * // [0, '1'], - * // [1, '2'], - * // [0, '3'], - * // [-1, '4'], - * // ] - * // Equal values return empty array - * console.log(diff('same', 'same')); - * // [] - * ``` - * @since v22.15.0 - * @experimental - * @param actual The first value to compare - * @param expected The second value to compare - * @returns An array of difference entries. Each entry is an array with two elements: - * * Index 0: `number` Operation code: `-1` for delete, `0` for no-op/unchanged, `1` for insert - * * Index 1: `string` The value associated with the operation - */ - export function diff(actual: string | readonly string[], expected: string | readonly string[]): DiffEntry[]; - /** - * The `util.format()` method returns a formatted string using the first argument - * as a `printf`-like format string which can contain zero or more format - * specifiers. Each specifier is replaced with the converted value from the - * corresponding argument. Supported specifiers are: - * - * If a specifier does not have a corresponding argument, it is not replaced: - * - * ```js - * util.format('%s:%s', 'foo'); - * // Returns: 'foo:%s' - * ``` - * - * Values that are not part of the format string are formatted using `util.inspect()` if their type is not `string`. - * - * If there are more arguments passed to the `util.format()` method than the - * number of specifiers, the extra arguments are concatenated to the returned - * string, separated by spaces: - * - * ```js - * util.format('%s:%s', 'foo', 'bar', 'baz'); - * // Returns: 'foo:bar baz' - * ``` - * - * If the first argument does not contain a valid format specifier, `util.format()` returns a string that is the concatenation of all arguments separated by spaces: - * - * ```js - * util.format(1, 2, 3); - * // Returns: '1 2 3' - * ``` - * - * If only one argument is passed to `util.format()`, it is returned as it is - * without any formatting: - * - * ```js - * util.format('%% %s'); - * // Returns: '%% %s' - * ``` - * - * `util.format()` is a synchronous method that is intended as a debugging tool. - * Some input values can have a significant performance overhead that can block the - * event loop. Use this function with care and never in a hot code path. - * @since v0.5.3 - * @param format A `printf`-like format string. - */ - export function format(format?: any, ...param: any[]): string; - /** - * This function is identical to {@link format}, except in that it takes - * an `inspectOptions` argument which specifies options that are passed along to {@link inspect}. - * - * ```js - * util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 }); - * // Returns 'See object { foo: 42 }', where `42` is colored as a number - * // when printed to a terminal. - * ``` - * @since v10.0.0 - */ - export function formatWithOptions(inspectOptions: InspectOptions, format?: any, ...param: any[]): string; - export interface GetCallSitesOptions { - /** - * Reconstruct the original location in the stacktrace from the source-map. - * Enabled by default with the flag `--enable-source-maps`. - */ - sourceMap?: boolean | undefined; - } - /** - * Returns an array of call site objects containing the stack of - * the caller function. - * - * Unlike accessing an `error.stack`, the result returned from this API is not - * interfered with `Error.prepareStackTrace`. - * - * ```js - * import { getCallSites } from 'node:util'; - * - * function exampleFunction() { - * const callSites = getCallSites(); - * - * console.log('Call Sites:'); - * callSites.forEach((callSite, index) => { - * console.log(`CallSite ${index + 1}:`); - * console.log(`Function Name: ${callSite.functionName}`); - * console.log(`Script Name: ${callSite.scriptName}`); - * console.log(`Line Number: ${callSite.lineNumber}`); - * console.log(`Column Number: ${callSite.columnNumber}`); - * }); - * // CallSite 1: - * // Function Name: exampleFunction - * // Script Name: /home/example.js - * // Line Number: 5 - * // Column Number: 26 - * - * // CallSite 2: - * // Function Name: anotherFunction - * // Script Name: /home/example.js - * // Line Number: 22 - * // Column Number: 3 - * - * // ... - * } - * - * // A function to simulate another stack layer - * function anotherFunction() { - * exampleFunction(); - * } - * - * anotherFunction(); - * ``` - * - * It is possible to reconstruct the original locations by setting the option `sourceMap` to `true`. - * If the source map is not available, the original location will be the same as the current location. - * When the `--enable-source-maps` flag is enabled, for example when using `--experimental-transform-types`, - * `sourceMap` will be true by default. - * - * ```ts - * import { getCallSites } from 'node:util'; - * - * interface Foo { - * foo: string; - * } - * - * const callSites = getCallSites({ sourceMap: true }); - * - * // With sourceMap: - * // Function Name: '' - * // Script Name: example.js - * // Line Number: 7 - * // Column Number: 26 - * - * // Without sourceMap: - * // Function Name: '' - * // Script Name: example.js - * // Line Number: 2 - * // Column Number: 26 - * ``` - * @param frameCount Number of frames to capture as call site objects. - * **Default:** `10`. Allowable range is between 1 and 200. - * @return An array of call site objects - * @since v22.9.0 - */ - export function getCallSites(frameCount?: number, options?: GetCallSitesOptions): CallSiteObject[]; - export function getCallSites(options: GetCallSitesOptions): CallSiteObject[]; - /** - * Returns the string name for a numeric error code that comes from a Node.js API. - * The mapping between error codes and error names is platform-dependent. - * See `Common System Errors` for the names of common errors. - * - * ```js - * fs.access('file/that/does/not/exist', (err) => { - * const name = util.getSystemErrorName(err.errno); - * console.error(name); // ENOENT - * }); - * ``` - * @since v9.7.0 - */ - export function getSystemErrorName(err: number): string; - /** - * Enable or disable printing a stack trace on `SIGINT`. The API is only available on the main thread. - * @since 24.6.0 - */ - export function setTraceSigInt(enable: boolean): void; - /** - * Returns a Map of all system error codes available from the Node.js API. - * The mapping between error codes and error names is platform-dependent. - * See `Common System Errors` for the names of common errors. - * - * ```js - * fs.access('file/that/does/not/exist', (err) => { - * const errorMap = util.getSystemErrorMap(); - * const name = errorMap.get(err.errno); - * console.error(name); // ENOENT - * }); - * ``` - * @since v16.0.0, v14.17.0 - */ - export function getSystemErrorMap(): Map; - /** - * Returns the string message for a numeric error code that comes from a Node.js - * API. - * The mapping between error codes and string messages is platform-dependent. - * - * ```js - * fs.access('file/that/does/not/exist', (err) => { - * const message = util.getSystemErrorMessage(err.errno); - * console.error(message); // no such file or directory - * }); - * ``` - * @since v22.12.0 - */ - export function getSystemErrorMessage(err: number): string; - /** - * Returns the `string` after replacing any surrogate code points - * (or equivalently, any unpaired surrogate code units) with the - * Unicode "replacement character" U+FFFD. - * @since v16.8.0, v14.18.0 - */ - export function toUSVString(string: string): string; - /** - * Creates and returns an `AbortController` instance whose `AbortSignal` is marked - * as transferable and can be used with `structuredClone()` or `postMessage()`. - * @since v18.11.0 - * @returns A transferable AbortController - */ - export function transferableAbortController(): AbortController; - /** - * Marks the given `AbortSignal` as transferable so that it can be used with`structuredClone()` and `postMessage()`. - * - * ```js - * const signal = transferableAbortSignal(AbortSignal.timeout(100)); - * const channel = new MessageChannel(); - * channel.port2.postMessage(signal, [signal]); - * ``` - * @since v18.11.0 - * @param signal The AbortSignal - * @returns The same AbortSignal - */ - export function transferableAbortSignal(signal: AbortSignal): AbortSignal; - /** - * Listens to abort event on the provided `signal` and returns a promise that resolves when the `signal` is aborted. - * If `resource` is provided, it weakly references the operation's associated object, - * so if `resource` is garbage collected before the `signal` aborts, - * then returned promise shall remain pending. - * This prevents memory leaks in long-running or non-cancelable operations. - * - * ```js - * import { aborted } from 'node:util'; - * - * // Obtain an object with an abortable signal, like a custom resource or operation. - * const dependent = obtainSomethingAbortable(); - * - * // Pass `dependent` as the resource, indicating the promise should only resolve - * // if `dependent` is still in memory when the signal is aborted. - * aborted(dependent.signal, dependent).then(() => { - * // This code runs when `dependent` is aborted. - * console.log('Dependent resource was aborted.'); - * }); - * - * // Simulate an event that triggers the abort. - * dependent.on('event', () => { - * dependent.abort(); // This will cause the `aborted` promise to resolve. - * }); - * ``` - * @since v19.7.0 - * @param resource Any non-null object tied to the abortable operation and held weakly. - * If `resource` is garbage collected before the `signal` aborts, the promise remains pending, - * allowing Node.js to stop tracking it. - * This helps prevent memory leaks in long-running or non-cancelable operations. - */ - export function aborted(signal: AbortSignal, resource: any): Promise; - /** - * The `util.inspect()` method returns a string representation of `object` that is - * intended for debugging. The output of `util.inspect` may change at any time - * and should not be depended upon programmatically. Additional `options` may be - * passed that alter the result. - * `util.inspect()` will use the constructor's name and/or `Symbol.toStringTag` - * property to make an identifiable tag for an inspected value. - * - * ```js - * class Foo { - * get [Symbol.toStringTag]() { - * return 'bar'; - * } - * } - * - * class Bar {} - * - * const baz = Object.create(null, { [Symbol.toStringTag]: { value: 'foo' } }); - * - * util.inspect(new Foo()); // 'Foo [bar] {}' - * util.inspect(new Bar()); // 'Bar {}' - * util.inspect(baz); // '[foo] {}' - * ``` - * - * Circular references point to their anchor by using a reference index: - * - * ```js - * import { inspect } from 'node:util'; - * - * const obj = {}; - * obj.a = [obj]; - * obj.b = {}; - * obj.b.inner = obj.b; - * obj.b.obj = obj; - * - * console.log(inspect(obj)); - * // { - * // a: [ [Circular *1] ], - * // b: { inner: [Circular *2], obj: [Circular *1] } - * // } - * ``` - * - * The following example inspects all properties of the `util` object: - * - * ```js - * import util from 'node:util'; - * - * console.log(util.inspect(util, { showHidden: true, depth: null })); - * ``` - * - * The following example highlights the effect of the `compact` option: - * - * ```js - * import { inspect } from 'node:util'; - * - * const o = { - * a: [1, 2, [[ - * 'Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit, sed do ' + - * 'eiusmod \ntempor incididunt ut labore et dolore magna aliqua.', - * 'test', - * 'foo']], 4], - * b: new Map([['za', 1], ['zb', 'test']]), - * }; - * console.log(inspect(o, { compact: true, depth: 5, breakLength: 80 })); - * - * // { a: - * // [ 1, - * // 2, - * // [ [ 'Lorem ipsum dolor sit amet,\nconsectetur [...]', // A long line - * // 'test', - * // 'foo' ] ], - * // 4 ], - * // b: Map(2) { 'za' => 1, 'zb' => 'test' } } - * - * // Setting `compact` to false or an integer creates more reader friendly output. - * console.log(inspect(o, { compact: false, depth: 5, breakLength: 80 })); - * - * // { - * // a: [ - * // 1, - * // 2, - * // [ - * // [ - * // 'Lorem ipsum dolor sit amet,\n' + - * // 'consectetur adipiscing elit, sed do eiusmod \n' + - * // 'tempor incididunt ut labore et dolore magna aliqua.', - * // 'test', - * // 'foo' - * // ] - * // ], - * // 4 - * // ], - * // b: Map(2) { - * // 'za' => 1, - * // 'zb' => 'test' - * // } - * // } - * - * // Setting `breakLength` to e.g. 150 will print the "Lorem ipsum" text in a - * // single line. - * ``` - * - * The `showHidden` option allows `WeakMap` and `WeakSet` entries to be - * inspected. If there are more entries than `maxArrayLength`, there is no - * guarantee which entries are displayed. That means retrieving the same - * `WeakSet` entries twice may result in different output. Furthermore, entries - * with no remaining strong references may be garbage collected at any time. - * - * ```js - * import { inspect } from 'node:util'; - * - * const obj = { a: 1 }; - * const obj2 = { b: 2 }; - * const weakSet = new WeakSet([obj, obj2]); - * - * console.log(inspect(weakSet, { showHidden: true })); - * // WeakSet { { a: 1 }, { b: 2 } } - * ``` - * - * The `sorted` option ensures that an object's property insertion order does not - * impact the result of `util.inspect()`. - * - * ```js - * import { inspect } from 'node:util'; - * import assert from 'node:assert'; - * - * const o1 = { - * b: [2, 3, 1], - * a: '`a` comes before `b`', - * c: new Set([2, 3, 1]), - * }; - * console.log(inspect(o1, { sorted: true })); - * // { a: '`a` comes before `b`', b: [ 2, 3, 1 ], c: Set(3) { 1, 2, 3 } } - * console.log(inspect(o1, { sorted: (a, b) => b.localeCompare(a) })); - * // { c: Set(3) { 3, 2, 1 }, b: [ 2, 3, 1 ], a: '`a` comes before `b`' } - * - * const o2 = { - * c: new Set([2, 1, 3]), - * a: '`a` comes before `b`', - * b: [2, 3, 1], - * }; - * assert.strict.equal( - * inspect(o1, { sorted: true }), - * inspect(o2, { sorted: true }), - * ); - * ``` - * - * The `numericSeparator` option adds an underscore every three digits to all - * numbers. - * - * ```js - * import { inspect } from 'node:util'; - * - * const thousand = 1000; - * const million = 1000000; - * const bigNumber = 123456789n; - * const bigDecimal = 1234.12345; - * - * console.log(inspect(thousand, { numericSeparator: true })); - * // 1_000 - * console.log(inspect(million, { numericSeparator: true })); - * // 1_000_000 - * console.log(inspect(bigNumber, { numericSeparator: true })); - * // 123_456_789n - * console.log(inspect(bigDecimal, { numericSeparator: true })); - * // 1_234.123_45 - * ``` - * - * `util.inspect()` is a synchronous method intended for debugging. Its maximum - * output length is approximately 128 MiB. Inputs that result in longer output will - * be truncated. - * @since v0.3.0 - * @param object Any JavaScript primitive or `Object`. - * @return The representation of `object`. - */ - export function inspect(object: any, showHidden?: boolean, depth?: number | null, color?: boolean): string; - export function inspect(object: any, options?: InspectOptions): string; - export namespace inspect { - const custom: unique symbol; - let colors: InspectColors; - let styles: InspectStyles; - let defaultOptions: InspectOptions; - let replDefaults: InspectOptions; - } - /** - * Alias for [`Array.isArray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray). - * - * Returns `true` if the given `object` is an `Array`. Otherwise, returns `false`. - * - * ```js - * import util from 'node:util'; - * - * util.isArray([]); - * // Returns: true - * util.isArray(new Array()); - * // Returns: true - * util.isArray({}); - * // Returns: false - * ``` - * @since v0.6.0 - * @deprecated Since v4.0.0 - Use `isArray` instead. - */ - export function isArray(object: unknown): object is unknown[]; - /** - * Usage of `util.inherits()` is discouraged. Please use the ES6 `class` and - * `extends` keywords to get language level inheritance support. Also note - * that the two styles are [semantically incompatible](https://github.com/nodejs/node/issues/4179). - * - * Inherit the prototype methods from one - * [constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor) into another. The - * prototype of `constructor` will be set to a new object created from - * `superConstructor`. - * - * This mainly adds some input validation on top of - * `Object.setPrototypeOf(constructor.prototype, superConstructor.prototype)`. - * As an additional convenience, `superConstructor` will be accessible - * through the `constructor.super_` property. - * - * ```js - * const util = require('node:util'); - * const EventEmitter = require('node:events'); - * - * function MyStream() { - * EventEmitter.call(this); - * } - * - * util.inherits(MyStream, EventEmitter); - * - * MyStream.prototype.write = function(data) { - * this.emit('data', data); - * }; - * - * const stream = new MyStream(); - * - * console.log(stream instanceof EventEmitter); // true - * console.log(MyStream.super_ === EventEmitter); // true - * - * stream.on('data', (data) => { - * console.log(`Received data: "${data}"`); - * }); - * stream.write('It works!'); // Received data: "It works!" - * ``` - * - * ES6 example using `class` and `extends`: - * - * ```js - * import EventEmitter from 'node:events'; - * - * class MyStream extends EventEmitter { - * write(data) { - * this.emit('data', data); - * } - * } - * - * const stream = new MyStream(); - * - * stream.on('data', (data) => { - * console.log(`Received data: "${data}"`); - * }); - * stream.write('With ES6'); - * ``` - * @since v0.3.0 - * @legacy Use ES2015 class syntax and `extends` keyword instead. - */ - export function inherits(constructor: unknown, superConstructor: unknown): void; - /** - * The `util.convertProcessSignalToExitCode()` method converts a signal name to its - * corresponding POSIX exit code. Following the POSIX standard, the exit code - * for a process terminated by a signal is calculated as `128 + signal number`. - * - * If `signal` is not a valid signal name, then an error will be thrown. See - * [`signal(7)`](https://man7.org/linux/man-pages/man7/signal.7.html) for a list of valid signals. - * - * ```js - * import { convertProcessSignalToExitCode } from 'node:util'; - * - * console.log(convertProcessSignalToExitCode('SIGTERM')); // 143 (128 + 15) - * console.log(convertProcessSignalToExitCode('SIGKILL')); // 137 (128 + 9) - * ``` - * - * This is particularly useful when working with processes to determine - * the exit code based on the signal that terminated the process. - * @since v25.4.0 - * @param signal A signal name (e.g. `'SIGTERM'`) - * @returns The exit code corresponding to `signal` - */ - export function convertProcessSignalToExitCode(signal: NodeJS.Signals): number; - export type DebugLoggerFunction = (msg: string, ...param: unknown[]) => void; - export interface DebugLogger extends DebugLoggerFunction { - /** - * The `util.debuglog().enabled` getter is used to create a test that can be used - * in conditionals based on the existence of the `NODE_DEBUG` environment variable. - * If the `section` name appears within the value of that environment variable, - * then the returned value will be `true`. If not, then the returned value will be - * `false`. - * - * ```js - * import { debuglog } from 'node:util'; - * const enabled = debuglog('foo').enabled; - * if (enabled) { - * console.log('hello from foo [%d]', 123); - * } - * ``` - * - * If this program is run with `NODE_DEBUG=foo` in the environment, then it will - * output something like: - * - * ```console - * hello from foo [123] - * ``` - */ - enabled: boolean; - } - /** - * The `util.debuglog()` method is used to create a function that conditionally - * writes debug messages to `stderr` based on the existence of the `NODE_DEBUG` - * environment variable. If the `section` name appears within the value of that - * environment variable, then the returned function operates similar to - * `console.error()`. If not, then the returned function is a no-op. - * - * ```js - * import { debuglog } from 'node:util'; - * const log = debuglog('foo'); - * - * log('hello from foo [%d]', 123); - * ``` - * - * If this program is run with `NODE_DEBUG=foo` in the environment, then - * it will output something like: - * - * ```console - * FOO 3245: hello from foo [123] - * ``` - * - * where `3245` is the process id. If it is not run with that - * environment variable set, then it will not print anything. - * - * The `section` supports wildcard also: - * - * ```js - * import { debuglog } from 'node:util'; - * const log = debuglog('foo-bar'); - * - * log('hi there, it\'s foo-bar [%d]', 2333); - * ``` - * - * if it is run with `NODE_DEBUG=foo*` in the environment, then it will output - * something like: - * - * ```console - * FOO-BAR 3257: hi there, it's foo-bar [2333] - * ``` - * - * Multiple comma-separated `section` names may be specified in the `NODE_DEBUG` - * environment variable: `NODE_DEBUG=fs,net,tls`. - * - * The optional `callback` argument can be used to replace the logging function - * with a different function that doesn't have any initialization or - * unnecessary wrapping. - * - * ```js - * import { debuglog } from 'node:util'; - * let log = debuglog('internals', (debug) => { - * // Replace with a logging function that optimizes out - * // testing if the section is enabled - * log = debug; - * }); - * ``` - * @since v0.11.3 - * @param section A string identifying the portion of the application for which the `debuglog` function is being created. - * @param callback A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function. - * @return The logging function - */ - export function debuglog(section: string, callback?: (fn: DebugLoggerFunction) => void): DebugLogger; - export { debuglog as debug }; - export interface DeprecateOptions { - /** - * When false do not change the prototype of object - * while emitting the deprecation warning. - * @since v25.2.0 - * @default true - */ - modifyPrototype?: boolean | undefined; - } - /** - * The `util.deprecate()` method wraps `fn` (which may be a function or class) in - * such a way that it is marked as deprecated. - * - * ```js - * import { deprecate } from 'node:util'; - * - * export const obsoleteFunction = deprecate(() => { - * // Do something here. - * }, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.'); - * ``` - * - * When called, `util.deprecate()` will return a function that will emit a - * `DeprecationWarning` using the `'warning'` event. The warning will - * be emitted and printed to `stderr` the first time the returned function is - * called. After the warning is emitted, the wrapped function is called without - * emitting a warning. - * - * If the same optional `code` is supplied in multiple calls to `util.deprecate()`, - * the warning will be emitted only once for that `code`. - * - * ```js - * import { deprecate } from 'node:util'; - * - * const fn1 = deprecate( - * () => 'a value', - * 'deprecation message', - * 'DEP0001', - * ); - * const fn2 = deprecate( - * () => 'a different value', - * 'other dep message', - * 'DEP0001', - * ); - * fn1(); // Emits a deprecation warning with code DEP0001 - * fn2(); // Does not emit a deprecation warning because it has the same code - * ``` - * - * If either the `--no-deprecation` or `--no-warnings` command-line flags are - * used, or if the `process.noDeprecation` property is set to `true` _prior_ to - * the first deprecation warning, the `util.deprecate()` method does nothing. - * - * If the `--trace-deprecation` or `--trace-warnings` command-line flags are set, - * or the `process.traceDeprecation` property is set to `true`, a warning and a - * stack trace are printed to `stderr` the first time the deprecated function is - * called. - * - * If the `--throw-deprecation` command-line flag is set, or the - * `process.throwDeprecation` property is set to `true`, then an exception will be - * thrown when the deprecated function is called. - * - * The `--throw-deprecation` command-line flag and `process.throwDeprecation` - * property take precedence over `--trace-deprecation` and - * `process.traceDeprecation`. - * @since v0.8.0 - * @param fn The function that is being deprecated. - * @param msg A warning message to display when the deprecated function is invoked. - * @param code A deprecation code. See the `list of deprecated APIs` for a list of codes. - * @return The deprecated function wrapped to emit a warning. - */ - export function deprecate(fn: T, msg: string, code?: string, options?: DeprecateOptions): T; - export interface IsDeepStrictEqualOptions { - /** - * If `true`, prototype and constructor - * comparison is skipped during deep strict equality check. - * @since v24.9.0 - * @default false - */ - skipPrototype?: boolean | undefined; - } - /** - * Returns `true` if there is deep strict equality between `val1` and `val2`. - * Otherwise, returns `false`. - * - * See `assert.deepStrictEqual()` for more information about deep strict - * equality. - * @since v9.0.0 - */ - export function isDeepStrictEqual(val1: unknown, val2: unknown, options?: IsDeepStrictEqualOptions): boolean; - /** - * Returns `str` with any ANSI escape codes removed. - * - * ```js - * console.log(util.stripVTControlCharacters('\u001B[4mvalue\u001B[0m')); - * // Prints "value" - * ``` - * @since v16.11.0 - */ - export function stripVTControlCharacters(str: string): string; - /** - * Takes an `async` function (or a function that returns a `Promise`) and returns a - * function following the error-first callback style, i.e. taking - * an `(err, value) => ...` callback as the last argument. In the callback, the - * first argument will be the rejection reason (or `null` if the `Promise` - * resolved), and the second argument will be the resolved value. - * - * ```js - * import { callbackify } from 'node:util'; - * - * async function fn() { - * return 'hello world'; - * } - * const callbackFunction = callbackify(fn); - * - * callbackFunction((err, ret) => { - * if (err) throw err; - * console.log(ret); - * }); - * ``` - * - * Will print: - * - * ```text - * hello world - * ``` - * - * The callback is executed asynchronously, and will have a limited stack trace. - * If the callback throws, the process will emit an `'uncaughtException'` - * event, and if not handled will exit. - * - * Since `null` has a special meaning as the first argument to a callback, if a - * wrapped function rejects a `Promise` with a falsy value as a reason, the value - * is wrapped in an `Error` with the original value stored in a field named - * `reason`. - * - * ```js - * function fn() { - * return Promise.reject(null); - * } - * const callbackFunction = util.callbackify(fn); - * - * callbackFunction((err, ret) => { - * // When the Promise was rejected with `null` it is wrapped with an Error and - * // the original value is stored in `reason`. - * err && Object.hasOwn(err, 'reason') && err.reason === null; // true - * }); - * ``` - * @since v8.2.0 - * @param fn An `async` function - * @return a callback style function - */ - export function callbackify(fn: () => Promise): (callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: () => Promise, - ): (callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - export function callbackify( - fn: (arg1: T1) => Promise, - ): (arg1: T1, callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: (arg1: T1) => Promise, - ): (arg1: T1, callback: (err: NodeJS.ErrnoException, result: TResult) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2) => Promise, - ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2) => Promise, - ): (arg1: T1, arg2: T2, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, callback: (err: NodeJS.ErrnoException | null, result: TResult) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise, - ): ( - arg1: T1, - arg2: T2, - arg3: T3, - arg4: T4, - callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, - ) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: NodeJS.ErrnoException) => void) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise, - ): ( - arg1: T1, - arg2: T2, - arg3: T3, - arg4: T4, - arg5: T5, - callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, - ) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, - ): ( - arg1: T1, - arg2: T2, - arg3: T3, - arg4: T4, - arg5: T5, - arg6: T6, - callback: (err: NodeJS.ErrnoException) => void, - ) => void; - export function callbackify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Promise, - ): ( - arg1: T1, - arg2: T2, - arg3: T3, - arg4: T4, - arg5: T5, - arg6: T6, - callback: (err: NodeJS.ErrnoException | null, result: TResult) => void, - ) => void; - export interface CustomPromisifyLegacy extends Function { - __promisify__: TCustom; - } - export interface CustomPromisifySymbol extends Function { - [promisify.custom]: TCustom; - } - export type CustomPromisify = - | CustomPromisifySymbol - | CustomPromisifyLegacy; - /** - * Takes a function following the common error-first callback style, i.e. taking - * an `(err, value) => ...` callback as the last argument, and returns a version - * that returns promises. - * - * ```js - * import { promisify } from 'node:util'; - * import { stat } from 'node:fs'; - * - * const promisifiedStat = promisify(stat); - * promisifiedStat('.').then((stats) => { - * // Do something with `stats` - * }).catch((error) => { - * // Handle the error. - * }); - * ``` - * - * Or, equivalently using `async function`s: - * - * ```js - * import { promisify } from 'node:util'; - * import { stat } from 'node:fs'; - * - * const promisifiedStat = promisify(stat); - * - * async function callStat() { - * const stats = await promisifiedStat('.'); - * console.log(`This directory is owned by ${stats.uid}`); - * } - * - * callStat(); - * ``` - * - * If there is an `original[util.promisify.custom]` property present, `promisify` - * will return its value, see [Custom promisified functions](https://nodejs.org/docs/latest-v25.x/api/util.html#custom-promisified-functions). - * - * `promisify()` assumes that `original` is a function taking a callback as its - * final argument in all cases. If `original` is not a function, `promisify()` - * will throw an error. If `original` is a function but its last argument is not - * an error-first callback, it will still be passed an error-first - * callback as its last argument. - * - * Using `promisify()` on class methods or other methods that use `this` may not - * work as expected unless handled specially: - * - * ```js - * import { promisify } from 'node:util'; - * - * class Foo { - * constructor() { - * this.a = 42; - * } - * - * bar(callback) { - * callback(null, this.a); - * } - * } - * - * const foo = new Foo(); - * - * const naiveBar = promisify(foo.bar); - * // TypeError: Cannot read properties of undefined (reading 'a') - * // naiveBar().then(a => console.log(a)); - * - * naiveBar.call(foo).then((a) => console.log(a)); // '42' - * - * const bindBar = naiveBar.bind(foo); - * bindBar().then((a) => console.log(a)); // '42' - * ``` - * @since v8.0.0 - */ - export function promisify(fn: CustomPromisify): TCustom; - export function promisify( - fn: (callback: (err: any, result: TResult) => void) => void, - ): () => Promise; - export function promisify(fn: (callback: (err?: any) => void) => void): () => Promise; - export function promisify( - fn: (arg1: T1, callback: (err: any, result: TResult) => void) => void, - ): (arg1: T1) => Promise; - export function promisify(fn: (arg1: T1, callback: (err?: any) => void) => void): (arg1: T1) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, callback: (err?: any) => void) => void, - ): (arg1: T1, arg2: T2) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, callback: (err?: any) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err?: any) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; - export function promisify( - fn: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err?: any) => void) => void, - ): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Promise; - export function promisify(fn: Function): Function; - export namespace promisify { - /** - * That can be used to declare custom promisified variants of functions. - */ - const custom: unique symbol; - } - /** - * Stability: 1.1 - Active development - * Given an example `.env` file: - * - * ```js - * import { parseEnv } from 'node:util'; - * - * parseEnv('HELLO=world\nHELLO=oh my\n'); - * // Returns: { HELLO: 'oh my' } - * ``` - * @param content The raw contents of a `.env` file. - * @since v20.12.0 - */ - export function parseEnv(content: string): NodeJS.Dict; - export interface StyleTextOptions { - /** - * When true, `stream` is checked to see if it can handle colors. - * @default true - */ - validateStream?: boolean | undefined; - /** - * A stream that will be validated if it can be colored. - * @default process.stdout - */ - stream?: NodeJS.WritableStream | undefined; - } - /** - * This function returns a formatted text considering the `format` passed - * for printing in a terminal. It is aware of the terminal's capabilities - * and acts according to the configuration set via `NO_COLOR`, - * `NODE_DISABLE_COLORS` and `FORCE_COLOR` environment variables. - * - * ```js - * import { styleText } from 'node:util'; - * import { stderr } from 'node:process'; - * - * const successMessage = styleText('green', 'Success!'); - * console.log(successMessage); - * - * const errorMessage = styleText( - * 'red', - * 'Error! Error!', - * // Validate if process.stderr has TTY - * { stream: stderr }, - * ); - * console.error(errorMessage); - * ``` - * - * `util.inspect.colors` also provides text formats such as `italic`, and - * `underline` and you can combine both: - * - * ```js - * console.log( - * util.styleText(['underline', 'italic'], 'My italic underlined message'), - * ); - * ``` - * - * When passing an array of formats, the order of the format applied - * is left to right so the following style might overwrite the previous one. - * - * ```js - * console.log( - * util.styleText(['red', 'green'], 'text'), // green - * ); - * ``` - * - * The special format value `none` applies no additional styling to the text. - * - * The full list of formats can be found in [modifiers](https://nodejs.org/docs/latest-v25.x/api/util.html#modifiers). - * @param format A text format or an Array of text formats defined in `util.inspect.colors`. - * @param text The text to to be formatted. - * @since v20.12.0 - */ - export function styleText( - format: InspectColor | readonly InspectColor[], - text: string, - options?: StyleTextOptions, - ): string; - /** @deprecated This alias will be removed in a future version. Use the canonical `TextEncoderEncodeIntoResult` instead. */ - // TODO: remove in future major - export interface EncodeIntoResult extends TextEncoderEncodeIntoResult {} - //// parseArgs - /** - * Provides a higher level API for command-line argument parsing than interacting - * with `process.argv` directly. Takes a specification for the expected arguments - * and returns a structured object with the parsed options and positionals. - * - * ```js - * import { parseArgs } from 'node:util'; - * const args = ['-f', '--bar', 'b']; - * const options = { - * foo: { - * type: 'boolean', - * short: 'f', - * }, - * bar: { - * type: 'string', - * }, - * }; - * const { - * values, - * positionals, - * } = parseArgs({ args, options }); - * console.log(values, positionals); - * // Prints: [Object: null prototype] { foo: true, bar: 'b' } [] - * ``` - * @since v18.3.0, v16.17.0 - * @param config Used to provide arguments for parsing and to configure the parser. `config` supports the following properties: - * @return The parsed command line arguments: - */ - export function parseArgs(config?: T): ParsedResults; - /** - * Type of argument used in {@link parseArgs}. - */ - export type ParseArgsOptionsType = "boolean" | "string"; - export interface ParseArgsOptionDescriptor { - /** - * Type of argument. - */ - type: ParseArgsOptionsType; - /** - * Whether this option can be provided multiple times. - * If `true`, all values will be collected in an array. - * If `false`, values for the option are last-wins. - * @default false. - */ - multiple?: boolean | undefined; - /** - * A single character alias for the option. - */ - short?: string | undefined; - /** - * The value to assign to - * the option if it does not appear in the arguments to be parsed. The value - * must match the type specified by the `type` property. If `multiple` is - * `true`, it must be an array. No default value is applied when the option - * does appear in the arguments to be parsed, even if the provided value - * is falsy. - * @since v18.11.0 - */ - default?: string | boolean | string[] | boolean[] | undefined; - } - export interface ParseArgsOptionsConfig { - [longOption: string]: ParseArgsOptionDescriptor; - } - export interface ParseArgsConfig { - /** - * Array of argument strings. - */ - args?: readonly string[] | undefined; - /** - * Used to describe arguments known to the parser. - */ - options?: ParseArgsOptionsConfig | undefined; - /** - * Should an error be thrown when unknown arguments are encountered, - * or when arguments are passed that do not match the `type` configured in `options`. - * @default true - */ - strict?: boolean | undefined; - /** - * Whether this command accepts positional arguments. - */ - allowPositionals?: boolean | undefined; - /** - * If `true`, allows explicitly setting boolean options to `false` by prefixing the option name with `--no-`. - * @default false - * @since v22.4.0 - */ - allowNegative?: boolean | undefined; - /** - * Return the parsed tokens. This is useful for extending the built-in behavior, - * from adding additional checks through to reprocessing the tokens in different ways. - * @default false - */ - tokens?: boolean | undefined; - } - /* - IfDefaultsTrue and IfDefaultsFalse are helpers to handle default values for missing boolean properties. - TypeScript does not have exact types for objects: https://github.com/microsoft/TypeScript/issues/12936 - This means it is impossible to distinguish between "field X is definitely not present" and "field X may or may not be present". - But we expect users to generally provide their config inline or `as const`, which means TS will always know whether a given field is present. - So this helper treats "not definitely present" (i.e., not `extends boolean`) as being "definitely not present", i.e. it should have its default value. - This is technically incorrect but is a much nicer UX for the common case. - The IfDefaultsTrue version is for things which default to true; the IfDefaultsFalse version is for things which default to false. - */ - type IfDefaultsTrue = T extends true ? IfTrue - : T extends false ? IfFalse - : IfTrue; - // we put the `extends false` condition first here because `undefined` compares like `any` when `strictNullChecks: false` - type IfDefaultsFalse = T extends false ? IfFalse - : T extends true ? IfTrue - : IfFalse; - type ExtractOptionValue = IfDefaultsTrue< - T["strict"], - O["type"] extends "string" ? string : O["type"] extends "boolean" ? boolean : string | boolean, - string | boolean - >; - type ApplyOptionalModifiers> = ( - & { -readonly [LongOption in keyof O]?: V[LongOption] } - & { [LongOption in keyof O as O[LongOption]["default"] extends {} ? LongOption : never]: V[LongOption] } - ) extends infer P ? { [K in keyof P]: P[K] } : never; // resolve intersection to object - type ParsedValues = - & IfDefaultsTrue - & (T["options"] extends ParseArgsOptionsConfig ? ApplyOptionalModifiers< - T["options"], - { - [LongOption in keyof T["options"]]: IfDefaultsFalse< - T["options"][LongOption]["multiple"], - Array>, - ExtractOptionValue - >; - } - > - : {}); - type ParsedPositionals = IfDefaultsTrue< - T["strict"], - IfDefaultsFalse, - IfDefaultsTrue - >; - type PreciseTokenForOptions< - K extends string, - O extends ParseArgsOptionDescriptor, - > = O["type"] extends "string" ? { - kind: "option"; - index: number; - name: K; - rawName: string; - value: string; - inlineValue: boolean; - } - : O["type"] extends "boolean" ? { - kind: "option"; - index: number; - name: K; - rawName: string; - value: undefined; - inlineValue: undefined; - } - : OptionToken & { name: K }; - type TokenForOptions< - T extends ParseArgsConfig, - K extends keyof T["options"] = keyof T["options"], - > = K extends unknown - ? T["options"] extends ParseArgsOptionsConfig ? PreciseTokenForOptions - : OptionToken - : never; - type ParsedOptionToken = IfDefaultsTrue, OptionToken>; - type ParsedPositionalToken = IfDefaultsTrue< - T["strict"], - IfDefaultsFalse, - IfDefaultsTrue - >; - type ParsedTokens = Array< - ParsedOptionToken | ParsedPositionalToken | { kind: "option-terminator"; index: number } - >; - type PreciseParsedResults = IfDefaultsFalse< - T["tokens"], - { - values: ParsedValues; - positionals: ParsedPositionals; - tokens: ParsedTokens; - }, - { - values: ParsedValues; - positionals: ParsedPositionals; - } - >; - type OptionToken = - | { kind: "option"; index: number; name: string; rawName: string; value: string; inlineValue: boolean } - | { - kind: "option"; - index: number; - name: string; - rawName: string; - value: undefined; - inlineValue: undefined; - }; - type Token = - | OptionToken - | { kind: "positional"; index: number; value: string } - | { kind: "option-terminator"; index: number }; - // If ParseArgsConfig extends T, then the user passed config constructed elsewhere. - // So we can't rely on the `"not definitely present" implies "definitely not present"` assumption mentioned above. - type ParsedResults = ParseArgsConfig extends T ? { - values: { - [longOption: string]: undefined | string | boolean | Array; - }; - positionals: string[]; - tokens?: Token[]; - } - : PreciseParsedResults; - /** - * An implementation of [the MIMEType class](https://bmeck.github.io/node-proposal-mime-api/). - * - * In accordance with browser conventions, all properties of `MIMEType` objects - * are implemented as getters and setters on the class prototype, rather than as - * data properties on the object itself. - * - * A MIME string is a structured string containing multiple meaningful - * components. When parsed, a `MIMEType` object is returned containing - * properties for each of these components. - * @since v19.1.0, v18.13.0 - */ - export class MIMEType { - /** - * Creates a new MIMEType object by parsing the input. - * - * A `TypeError` will be thrown if the `input` is not a valid MIME. - * Note that an effort will be made to coerce the given values into strings. - * @param input The input MIME to parse. - */ - constructor(input: string | { toString: () => string }); - /** - * Gets and sets the type portion of the MIME. - * - * ```js - * import { MIMEType } from 'node:util'; - * - * const myMIME = new MIMEType('text/javascript'); - * console.log(myMIME.type); - * // Prints: text - * myMIME.type = 'application'; - * console.log(myMIME.type); - * // Prints: application - * console.log(String(myMIME)); - * // Prints: application/javascript - * ``` - */ - type: string; - /** - * Gets and sets the subtype portion of the MIME. - * - * ```js - * import { MIMEType } from 'node:util'; - * - * const myMIME = new MIMEType('text/ecmascript'); - * console.log(myMIME.subtype); - * // Prints: ecmascript - * myMIME.subtype = 'javascript'; - * console.log(myMIME.subtype); - * // Prints: javascript - * console.log(String(myMIME)); - * // Prints: text/javascript - * ``` - */ - subtype: string; - /** - * Gets the essence of the MIME. This property is read only. - * Use `mime.type` or `mime.subtype` to alter the MIME. - * - * ```js - * import { MIMEType } from 'node:util'; - * - * const myMIME = new MIMEType('text/javascript;key=value'); - * console.log(myMIME.essence); - * // Prints: text/javascript - * myMIME.type = 'application'; - * console.log(myMIME.essence); - * // Prints: application/javascript - * console.log(String(myMIME)); - * // Prints: application/javascript;key=value - * ``` - */ - readonly essence: string; - /** - * Gets the `MIMEParams` object representing the - * parameters of the MIME. This property is read-only. See `MIMEParams` documentation for details. - */ - readonly params: MIMEParams; - /** - * The `toString()` method on the `MIMEType` object returns the serialized MIME. - * - * Because of the need for standard compliance, this method does not allow users - * to customize the serialization process of the MIME. - */ - toString(): string; - } - /** - * The `MIMEParams` API provides read and write access to the parameters of a `MIMEType`. - * @since v19.1.0, v18.13.0 - */ - export class MIMEParams { - /** - * Remove all name-value pairs whose name is `name`. - */ - delete(name: string): void; - /** - * Returns an iterator over each of the name-value pairs in the parameters. - * Each item of the iterator is a JavaScript `Array`. The first item of the array - * is the `name`, the second item of the array is the `value`. - */ - entries(): NodeJS.Iterator<[name: string, value: string]>; - /** - * Returns the value of the first name-value pair whose name is `name`. If there - * are no such pairs, `null` is returned. - * @return or `null` if there is no name-value pair with the given `name`. - */ - get(name: string): string | null; - /** - * Returns `true` if there is at least one name-value pair whose name is `name`. - */ - has(name: string): boolean; - /** - * Returns an iterator over the names of each name-value pair. - * - * ```js - * import { MIMEType } from 'node:util'; - * - * const { params } = new MIMEType('text/plain;foo=0;bar=1'); - * for (const name of params.keys()) { - * console.log(name); - * } - * // Prints: - * // foo - * // bar - * ``` - */ - keys(): NodeJS.Iterator; - /** - * Sets the value in the `MIMEParams` object associated with `name` to `value`. If there are any pre-existing name-value pairs whose names are `name`, - * set the first such pair's value to `value`. - * - * ```js - * import { MIMEType } from 'node:util'; - * - * const { params } = new MIMEType('text/plain;foo=0;bar=1'); - * params.set('foo', 'def'); - * params.set('baz', 'xyz'); - * console.log(params.toString()); - * // Prints: foo=def;bar=1;baz=xyz - * ``` - */ - set(name: string, value: string): void; - /** - * Returns an iterator over the values of each name-value pair. - */ - values(): NodeJS.Iterator; - /** - * Returns an iterator over each of the name-value pairs in the parameters. - */ - [Symbol.iterator](): NodeJS.Iterator<[name: string, value: string]>; - } - // #region web types - export interface TextDecodeOptions { - stream?: boolean; - } - export interface TextDecoderCommon { - readonly encoding: string; - readonly fatal: boolean; - readonly ignoreBOM: boolean; - } - export interface TextDecoderOptions { - fatal?: boolean; - ignoreBOM?: boolean; - } - export interface TextEncoderCommon { - readonly encoding: string; - } - export interface TextEncoderEncodeIntoResult { - read: number; - written: number; - } - export interface TextDecoder extends TextDecoderCommon { - decode(input?: NodeJS.AllowSharedBufferSource, options?: TextDecodeOptions): string; - } - export var TextDecoder: { - prototype: TextDecoder; - new(label?: string, options?: TextDecoderOptions): TextDecoder; - }; - export interface TextEncoder extends TextEncoderCommon { - encode(input?: string): NodeJS.NonSharedUint8Array; - encodeInto(source: string, destination: Uint8Array): TextEncoderEncodeIntoResult; - } - export var TextEncoder: { - prototype: TextEncoder; - new(): TextEncoder; - }; - // #endregion -} -declare module "util" { - export * from "node:util"; -} diff --git a/skills/flight-finder/node_modules/@types/node/util/types.d.ts b/skills/flight-finder/node_modules/@types/node/util/types.d.ts deleted file mode 100644 index 818825b..0000000 --- a/skills/flight-finder/node_modules/@types/node/util/types.d.ts +++ /dev/null @@ -1,558 +0,0 @@ -declare module "node:util/types" { - import { KeyObject, webcrypto } from "node:crypto"; - /** - * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) or - * [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. - * - * See also `util.types.isArrayBuffer()` and `util.types.isSharedArrayBuffer()`. - * - * ```js - * util.types.isAnyArrayBuffer(new ArrayBuffer()); // Returns true - * util.types.isAnyArrayBuffer(new SharedArrayBuffer()); // Returns true - * ``` - * @since v10.0.0 - */ - function isAnyArrayBuffer(object: unknown): object is ArrayBufferLike; - /** - * Returns `true` if the value is an `arguments` object. - * - * ```js - * function foo() { - * util.types.isArgumentsObject(arguments); // Returns true - * } - * ``` - * @since v10.0.0 - */ - function isArgumentsObject(object: unknown): object is IArguments; - /** - * Returns `true` if the value is a built-in [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instance. - * This does _not_ include [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instances. Usually, it is - * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. - * - * ```js - * util.types.isArrayBuffer(new ArrayBuffer()); // Returns true - * util.types.isArrayBuffer(new SharedArrayBuffer()); // Returns false - * ``` - * @since v10.0.0 - */ - function isArrayBuffer(object: unknown): object is ArrayBuffer; - /** - * Returns `true` if the value is an instance of one of the [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) views, such as typed - * array objects or [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView). Equivalent to - * [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). - * - * ```js - * util.types.isArrayBufferView(new Int8Array()); // true - * util.types.isArrayBufferView(Buffer.from('hello world')); // true - * util.types.isArrayBufferView(new DataView(new ArrayBuffer(16))); // true - * util.types.isArrayBufferView(new ArrayBuffer()); // false - * ``` - * @since v10.0.0 - */ - function isArrayBufferView(object: unknown): object is NodeJS.ArrayBufferView; - /** - * Returns `true` if the value is an [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function). - * This only reports back what the JavaScript engine is seeing; - * in particular, the return value may not match the original source code if - * a transpilation tool was used. - * - * ```js - * util.types.isAsyncFunction(function foo() {}); // Returns false - * util.types.isAsyncFunction(async function foo() {}); // Returns true - * ``` - * @since v10.0.0 - */ - function isAsyncFunction(object: unknown): boolean; - /** - * Returns `true` if the value is a `BigInt64Array` instance. - * - * ```js - * util.types.isBigInt64Array(new BigInt64Array()); // Returns true - * util.types.isBigInt64Array(new BigUint64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isBigInt64Array(value: unknown): value is BigInt64Array; - /** - * Returns `true` if the value is a BigInt object, e.g. created - * by `Object(BigInt(123))`. - * - * ```js - * util.types.isBigIntObject(Object(BigInt(123))); // Returns true - * util.types.isBigIntObject(BigInt(123)); // Returns false - * util.types.isBigIntObject(123); // Returns false - * ``` - * @since v10.4.0 - */ - function isBigIntObject(object: unknown): object is BigInt; - /** - * Returns `true` if the value is a `BigUint64Array` instance. - * - * ```js - * util.types.isBigUint64Array(new BigInt64Array()); // Returns false - * util.types.isBigUint64Array(new BigUint64Array()); // Returns true - * ``` - * @since v10.0.0 - */ - function isBigUint64Array(value: unknown): value is BigUint64Array; - /** - * Returns `true` if the value is a boolean object, e.g. created - * by `new Boolean()`. - * - * ```js - * util.types.isBooleanObject(false); // Returns false - * util.types.isBooleanObject(true); // Returns false - * util.types.isBooleanObject(new Boolean(false)); // Returns true - * util.types.isBooleanObject(new Boolean(true)); // Returns true - * util.types.isBooleanObject(Boolean(false)); // Returns false - * util.types.isBooleanObject(Boolean(true)); // Returns false - * ``` - * @since v10.0.0 - */ - function isBooleanObject(object: unknown): object is Boolean; - /** - * Returns `true` if the value is any boxed primitive object, e.g. created - * by `new Boolean()`, `new String()` or `Object(Symbol())`. - * - * For example: - * - * ```js - * util.types.isBoxedPrimitive(false); // Returns false - * util.types.isBoxedPrimitive(new Boolean(false)); // Returns true - * util.types.isBoxedPrimitive(Symbol('foo')); // Returns false - * util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true - * util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true - * ``` - * @since v10.11.0 - */ - function isBoxedPrimitive(object: unknown): object is String | Number | BigInt | Boolean | Symbol; - /** - * Returns `true` if the value is a built-in [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) instance. - * - * ```js - * const ab = new ArrayBuffer(20); - * util.types.isDataView(new DataView(ab)); // Returns true - * util.types.isDataView(new Float64Array()); // Returns false - * ``` - * - * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). - * @since v10.0.0 - */ - function isDataView(object: unknown): object is DataView; - /** - * Returns `true` if the value is a built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) instance. - * - * ```js - * util.types.isDate(new Date()); // Returns true - * ``` - * @since v10.0.0 - */ - function isDate(object: unknown): object is Date; - /** - * Returns `true` if the value is a native `External` value. - * - * A native `External` value is a special type of object that contains a - * raw C++ pointer (`void*`) for access from native code, and has no other - * properties. Such objects are created either by Node.js internals or native - * addons. In JavaScript, they are - * [frozen](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) objects with a - * `null` prototype. - * - * ```c - * #include - * #include - * napi_value result; - * static napi_value MyNapi(napi_env env, napi_callback_info info) { - * int* raw = (int*) malloc(1024); - * napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result); - * if (status != napi_ok) { - * napi_throw_error(env, NULL, "napi_create_external failed"); - * return NULL; - * } - * return result; - * } - * ... - * DECLARE_NAPI_PROPERTY("myNapi", MyNapi) - * ... - * ``` - * - * ```js - * import native from 'napi_addon.node'; - * import { types } from 'node:util'; - * - * const data = native.myNapi(); - * types.isExternal(data); // returns true - * types.isExternal(0); // returns false - * types.isExternal(new String('foo')); // returns false - * ``` - * - * For further information on `napi_create_external`, refer to - * [`napi_create_external()`](https://nodejs.org/docs/latest-v25.x/api/n-api.html#napi_create_external). - * @since v10.0.0 - */ - function isExternal(object: unknown): boolean; - /** - * Returns `true` if the value is a built-in [`Float16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float16Array) instance. - * - * ```js - * util.types.isFloat16Array(new ArrayBuffer()); // Returns false - * util.types.isFloat16Array(new Float16Array()); // Returns true - * util.types.isFloat16Array(new Float32Array()); // Returns false - * ``` - * @since v24.0.0 - */ - function isFloat16Array(object: unknown): object is Float16Array; - /** - * Returns `true` if the value is a built-in [`Float32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array) instance. - * - * ```js - * util.types.isFloat32Array(new ArrayBuffer()); // Returns false - * util.types.isFloat32Array(new Float32Array()); // Returns true - * util.types.isFloat32Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isFloat32Array(object: unknown): object is Float32Array; - /** - * Returns `true` if the value is a built-in [`Float64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array) instance. - * - * ```js - * util.types.isFloat64Array(new ArrayBuffer()); // Returns false - * util.types.isFloat64Array(new Uint8Array()); // Returns false - * util.types.isFloat64Array(new Float64Array()); // Returns true - * ``` - * @since v10.0.0 - */ - function isFloat64Array(object: unknown): object is Float64Array; - /** - * Returns `true` if the value is a generator function. - * This only reports back what the JavaScript engine is seeing; - * in particular, the return value may not match the original source code if - * a transpilation tool was used. - * - * ```js - * util.types.isGeneratorFunction(function foo() {}); // Returns false - * util.types.isGeneratorFunction(function* foo() {}); // Returns true - * ``` - * @since v10.0.0 - */ - function isGeneratorFunction(object: unknown): object is GeneratorFunction; - /** - * Returns `true` if the value is a generator object as returned from a - * built-in generator function. - * This only reports back what the JavaScript engine is seeing; - * in particular, the return value may not match the original source code if - * a transpilation tool was used. - * - * ```js - * function* foo() {} - * const generator = foo(); - * util.types.isGeneratorObject(generator); // Returns true - * ``` - * @since v10.0.0 - */ - function isGeneratorObject(object: unknown): object is Generator; - /** - * Returns `true` if the value is a built-in [`Int8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array) instance. - * - * ```js - * util.types.isInt8Array(new ArrayBuffer()); // Returns false - * util.types.isInt8Array(new Int8Array()); // Returns true - * util.types.isInt8Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isInt8Array(object: unknown): object is Int8Array; - /** - * Returns `true` if the value is a built-in [`Int16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array) instance. - * - * ```js - * util.types.isInt16Array(new ArrayBuffer()); // Returns false - * util.types.isInt16Array(new Int16Array()); // Returns true - * util.types.isInt16Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isInt16Array(object: unknown): object is Int16Array; - /** - * Returns `true` if the value is a built-in [`Int32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array) instance. - * - * ```js - * util.types.isInt32Array(new ArrayBuffer()); // Returns false - * util.types.isInt32Array(new Int32Array()); // Returns true - * util.types.isInt32Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isInt32Array(object: unknown): object is Int32Array; - /** - * Returns `true` if the value is a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. - * - * ```js - * util.types.isMap(new Map()); // Returns true - * ``` - * @since v10.0.0 - */ - function isMap( - object: T | {}, - ): object is T extends ReadonlyMap ? (unknown extends T ? never : ReadonlyMap) - : Map; - /** - * Returns `true` if the value is an iterator returned for a built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) instance. - * - * ```js - * const map = new Map(); - * util.types.isMapIterator(map.keys()); // Returns true - * util.types.isMapIterator(map.values()); // Returns true - * util.types.isMapIterator(map.entries()); // Returns true - * util.types.isMapIterator(map[Symbol.iterator]()); // Returns true - * ``` - * @since v10.0.0 - */ - function isMapIterator(object: unknown): boolean; - /** - * Returns `true` if the value is an instance of a [Module Namespace Object](https://tc39.github.io/ecma262/#sec-module-namespace-exotic-objects). - * - * ```js - * import * as ns from './a.js'; - * - * util.types.isModuleNamespaceObject(ns); // Returns true - * ``` - * @since v10.0.0 - */ - function isModuleNamespaceObject(value: unknown): boolean; - /** - * Returns `true` if the value was returned by the constructor of a - * [built-in `Error` type](https://tc39.es/ecma262/#sec-error-objects). - * - * ```js - * console.log(util.types.isNativeError(new Error())); // true - * console.log(util.types.isNativeError(new TypeError())); // true - * console.log(util.types.isNativeError(new RangeError())); // true - * ``` - * - * Subclasses of the native error types are also native errors: - * - * ```js - * class MyError extends Error {} - * console.log(util.types.isNativeError(new MyError())); // true - * ``` - * - * A value being `instanceof` a native error class is not equivalent to `isNativeError()` - * returning `true` for that value. `isNativeError()` returns `true` for errors - * which come from a different [realm](https://tc39.es/ecma262/#realm) while `instanceof Error` returns `false` - * for these errors: - * - * ```js - * import { createContext, runInContext } from 'node:vm'; - * import { types } from 'node:util'; - * - * const context = createContext({}); - * const myError = runInContext('new Error()', context); - * console.log(types.isNativeError(myError)); // true - * console.log(myError instanceof Error); // false - * ``` - * - * Conversely, `isNativeError()` returns `false` for all objects which were not - * returned by the constructor of a native error. That includes values - * which are `instanceof` native errors: - * - * ```js - * const myError = { __proto__: Error.prototype }; - * console.log(util.types.isNativeError(myError)); // false - * console.log(myError instanceof Error); // true - * ``` - * @since v10.0.0 - * @deprecated The `util.types.isNativeError` API is deprecated. Please use `Error.isError` instead. - */ - function isNativeError(object: unknown): object is Error; - /** - * Returns `true` if the value is a number object, e.g. created - * by `new Number()`. - * - * ```js - * util.types.isNumberObject(0); // Returns false - * util.types.isNumberObject(new Number(0)); // Returns true - * ``` - * @since v10.0.0 - */ - function isNumberObject(object: unknown): object is Number; - /** - * Returns `true` if the value is a built-in [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). - * - * ```js - * util.types.isPromise(Promise.resolve(42)); // Returns true - * ``` - * @since v10.0.0 - */ - function isPromise(object: unknown): object is Promise; - /** - * Returns `true` if the value is a [`Proxy`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) instance. - * - * ```js - * const target = {}; - * const proxy = new Proxy(target, {}); - * util.types.isProxy(target); // Returns false - * util.types.isProxy(proxy); // Returns true - * ``` - * @since v10.0.0 - */ - function isProxy(object: unknown): boolean; - /** - * Returns `true` if the value is a regular expression object. - * - * ```js - * util.types.isRegExp(/abc/); // Returns true - * util.types.isRegExp(new RegExp('abc')); // Returns true - * ``` - * @since v10.0.0 - */ - function isRegExp(object: unknown): object is RegExp; - /** - * Returns `true` if the value is a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. - * - * ```js - * util.types.isSet(new Set()); // Returns true - * ``` - * @since v10.0.0 - */ - function isSet( - object: T | {}, - ): object is T extends ReadonlySet ? (unknown extends T ? never : ReadonlySet) : Set; - /** - * Returns `true` if the value is an iterator returned for a built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) instance. - * - * ```js - * const set = new Set(); - * util.types.isSetIterator(set.keys()); // Returns true - * util.types.isSetIterator(set.values()); // Returns true - * util.types.isSetIterator(set.entries()); // Returns true - * util.types.isSetIterator(set[Symbol.iterator]()); // Returns true - * ``` - * @since v10.0.0 - */ - function isSetIterator(object: unknown): boolean; - /** - * Returns `true` if the value is a built-in [`SharedArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer) instance. - * This does _not_ include [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) instances. Usually, it is - * desirable to test for both; See `util.types.isAnyArrayBuffer()` for that. - * - * ```js - * util.types.isSharedArrayBuffer(new ArrayBuffer()); // Returns false - * util.types.isSharedArrayBuffer(new SharedArrayBuffer()); // Returns true - * ``` - * @since v10.0.0 - */ - function isSharedArrayBuffer(object: unknown): object is SharedArrayBuffer; - /** - * Returns `true` if the value is a string object, e.g. created - * by `new String()`. - * - * ```js - * util.types.isStringObject('foo'); // Returns false - * util.types.isStringObject(new String('foo')); // Returns true - * ``` - * @since v10.0.0 - */ - function isStringObject(object: unknown): object is String; - /** - * Returns `true` if the value is a symbol object, created - * by calling `Object()` on a `Symbol` primitive. - * - * ```js - * const symbol = Symbol('foo'); - * util.types.isSymbolObject(symbol); // Returns false - * util.types.isSymbolObject(Object(symbol)); // Returns true - * ``` - * @since v10.0.0 - */ - function isSymbolObject(object: unknown): object is Symbol; - /** - * Returns `true` if the value is a built-in [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) instance. - * - * ```js - * util.types.isTypedArray(new ArrayBuffer()); // Returns false - * util.types.isTypedArray(new Uint8Array()); // Returns true - * util.types.isTypedArray(new Float64Array()); // Returns true - * ``` - * - * See also [`ArrayBuffer.isView()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView). - * @since v10.0.0 - */ - function isTypedArray(object: unknown): object is NodeJS.TypedArray; - /** - * Returns `true` if the value is a built-in [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instance. - * - * ```js - * util.types.isUint8Array(new ArrayBuffer()); // Returns false - * util.types.isUint8Array(new Uint8Array()); // Returns true - * util.types.isUint8Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isUint8Array(object: unknown): object is Uint8Array; - /** - * Returns `true` if the value is a built-in [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray) instance. - * - * ```js - * util.types.isUint8ClampedArray(new ArrayBuffer()); // Returns false - * util.types.isUint8ClampedArray(new Uint8ClampedArray()); // Returns true - * util.types.isUint8ClampedArray(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isUint8ClampedArray(object: unknown): object is Uint8ClampedArray; - /** - * Returns `true` if the value is a built-in [`Uint16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array) instance. - * - * ```js - * util.types.isUint16Array(new ArrayBuffer()); // Returns false - * util.types.isUint16Array(new Uint16Array()); // Returns true - * util.types.isUint16Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isUint16Array(object: unknown): object is Uint16Array; - /** - * Returns `true` if the value is a built-in [`Uint32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array) instance. - * - * ```js - * util.types.isUint32Array(new ArrayBuffer()); // Returns false - * util.types.isUint32Array(new Uint32Array()); // Returns true - * util.types.isUint32Array(new Float64Array()); // Returns false - * ``` - * @since v10.0.0 - */ - function isUint32Array(object: unknown): object is Uint32Array; - /** - * Returns `true` if the value is a built-in [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) instance. - * - * ```js - * util.types.isWeakMap(new WeakMap()); // Returns true - * ``` - * @since v10.0.0 - */ - function isWeakMap(object: unknown): object is WeakMap; - /** - * Returns `true` if the value is a built-in [`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) instance. - * - * ```js - * util.types.isWeakSet(new WeakSet()); // Returns true - * ``` - * @since v10.0.0 - */ - function isWeakSet(object: unknown): object is WeakSet; - /** - * Returns `true` if `value` is a `KeyObject`, `false` otherwise. - * @since v16.2.0 - */ - function isKeyObject(object: unknown): object is KeyObject; - /** - * Returns `true` if `value` is a `CryptoKey`, `false` otherwise. - * @since v16.2.0 - */ - function isCryptoKey(object: unknown): object is webcrypto.CryptoKey; -} -declare module "util/types" { - export * from "node:util/types"; -} diff --git a/skills/flight-finder/node_modules/@types/node/v8.d.ts b/skills/flight-finder/node_modules/@types/node/v8.d.ts deleted file mode 100644 index 3c3eff2..0000000 --- a/skills/flight-finder/node_modules/@types/node/v8.d.ts +++ /dev/null @@ -1,988 +0,0 @@ -/** - * The `node:v8` module exposes APIs that are specific to the version of [V8](https://developers.google.com/v8/) built into the Node.js binary. It can be accessed using: - * - * ```js - * import v8 from 'node:v8'; - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/v8.js) - */ -declare module "node:v8" { - import { NonSharedBuffer } from "node:buffer"; - import { Readable } from "node:stream"; - interface HeapSpaceInfo { - space_name: string; - space_size: number; - space_used_size: number; - space_available_size: number; - physical_space_size: number; - } - // ** Signifies if the --zap_code_space option is enabled or not. 1 == enabled, 0 == disabled. */ - type DoesZapCodeSpaceFlag = 0 | 1; - interface HeapInfo { - total_heap_size: number; - total_heap_size_executable: number; - total_physical_size: number; - total_available_size: number; - used_heap_size: number; - heap_size_limit: number; - malloced_memory: number; - peak_malloced_memory: number; - does_zap_garbage: DoesZapCodeSpaceFlag; - number_of_native_contexts: number; - number_of_detached_contexts: number; - total_global_handles_size: number; - used_global_handles_size: number; - external_memory: number; - total_allocated_bytes: number; - } - interface HeapCodeStatistics { - code_and_metadata_size: number; - bytecode_and_metadata_size: number; - external_script_source_size: number; - } - interface HeapSnapshotOptions { - /** - * If true, expose internals in the heap snapshot. - * @default false - */ - exposeInternals?: boolean | undefined; - /** - * If true, expose numeric values in artificial fields. - * @default false - */ - exposeNumericValues?: boolean | undefined; - } - /** - * Returns an integer representing a version tag derived from the V8 version, - * command-line flags, and detected CPU features. This is useful for determining - * whether a `vm.Script` `cachedData` buffer is compatible with this instance - * of V8. - * - * ```js - * console.log(v8.cachedDataVersionTag()); // 3947234607 - * // The value returned by v8.cachedDataVersionTag() is derived from the V8 - * // version, command-line flags, and detected CPU features. Test that the value - * // does indeed update when flags are toggled. - * v8.setFlagsFromString('--allow_natives_syntax'); - * console.log(v8.cachedDataVersionTag()); // 183726201 - * ``` - * @since v8.0.0 - */ - function cachedDataVersionTag(): number; - /** - * Returns an object with the following properties: - * - * `does_zap_garbage` is a 0/1 boolean, which signifies whether the `--zap_code_space` option is enabled or not. This makes V8 overwrite heap - * garbage with a bit pattern. The RSS footprint (resident set size) gets bigger - * because it continuously touches all heap pages and that makes them less likely - * to get swapped out by the operating system. - * - * `number_of_native_contexts` The value of native\_context is the number of the - * top-level contexts currently active. Increase of this number over time indicates - * a memory leak. - * - * `number_of_detached_contexts` The value of detached\_context is the number - * of contexts that were detached and not yet garbage collected. This number - * being non-zero indicates a potential memory leak. - * - * `total_global_handles_size` The value of total\_global\_handles\_size is the - * total memory size of V8 global handles. - * - * `used_global_handles_size` The value of used\_global\_handles\_size is the - * used memory size of V8 global handles. - * - * `external_memory` The value of external\_memory is the memory size of array - * buffers and external strings. - * - * `total_allocated_bytes` The value of total allocated bytes since the Isolate - * creation. - * - * ```js - * { - * total_heap_size: 7326976, - * total_heap_size_executable: 4194304, - * total_physical_size: 7326976, - * total_available_size: 1152656, - * used_heap_size: 3476208, - * heap_size_limit: 1535115264, - * malloced_memory: 16384, - * peak_malloced_memory: 1127496, - * does_zap_garbage: 0, - * number_of_native_contexts: 1, - * number_of_detached_contexts: 0, - * total_global_handles_size: 8192, - * used_global_handles_size: 3296, - * external_memory: 318824, - * total_allocated_bytes: 45224088 - * } - * ``` - * @since v1.0.0 - */ - function getHeapStatistics(): HeapInfo; - /** - * It returns an object with a structure similar to the - * [`cppgc::HeapStatistics`](https://v8docs.nodesource.com/node-22.4/d7/d51/heap-statistics_8h_source.html) - * object. See the [V8 documentation](https://v8docs.nodesource.com/node-22.4/df/d2f/structcppgc_1_1_heap_statistics.html) - * for more information about the properties of the object. - * - * ```js - * // Detailed - * ({ - * committed_size_bytes: 131072, - * resident_size_bytes: 131072, - * used_size_bytes: 152, - * space_statistics: [ - * { - * name: 'NormalPageSpace0', - * committed_size_bytes: 0, - * resident_size_bytes: 0, - * used_size_bytes: 0, - * page_stats: [{}], - * free_list_stats: {}, - * }, - * { - * name: 'NormalPageSpace1', - * committed_size_bytes: 131072, - * resident_size_bytes: 131072, - * used_size_bytes: 152, - * page_stats: [{}], - * free_list_stats: {}, - * }, - * { - * name: 'NormalPageSpace2', - * committed_size_bytes: 0, - * resident_size_bytes: 0, - * used_size_bytes: 0, - * page_stats: [{}], - * free_list_stats: {}, - * }, - * { - * name: 'NormalPageSpace3', - * committed_size_bytes: 0, - * resident_size_bytes: 0, - * used_size_bytes: 0, - * page_stats: [{}], - * free_list_stats: {}, - * }, - * { - * name: 'LargePageSpace', - * committed_size_bytes: 0, - * resident_size_bytes: 0, - * used_size_bytes: 0, - * page_stats: [{}], - * free_list_stats: {}, - * }, - * ], - * type_names: [], - * detail_level: 'detailed', - * }); - * ``` - * - * ```js - * // Brief - * ({ - * committed_size_bytes: 131072, - * resident_size_bytes: 131072, - * used_size_bytes: 128864, - * space_statistics: [], - * type_names: [], - * detail_level: 'brief', - * }); - * ``` - * @since v22.15.0 - * @param detailLevel **Default:** `'detailed'`. Specifies the level of detail in the returned statistics. - * Accepted values are: - * * `'brief'`: Brief statistics contain only the top-level - * allocated and used - * memory statistics for the entire heap. - * * `'detailed'`: Detailed statistics also contain a break - * down per space and page, as well as freelist statistics - * and object type histograms. - */ - function getCppHeapStatistics(detailLevel?: "brief" | "detailed"): object; - /** - * Returns statistics about the V8 heap spaces, i.e. the segments which make up - * the V8 heap. Neither the ordering of heap spaces, nor the availability of a - * heap space can be guaranteed as the statistics are provided via the - * V8 [`GetHeapSpaceStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#ac673576f24fdc7a33378f8f57e1d13a4) function and may change from one V8 version to the - * next. - * - * The value returned is an array of objects containing the following properties: - * - * ```json - * [ - * { - * "space_name": "new_space", - * "space_size": 2063872, - * "space_used_size": 951112, - * "space_available_size": 80824, - * "physical_space_size": 2063872 - * }, - * { - * "space_name": "old_space", - * "space_size": 3090560, - * "space_used_size": 2493792, - * "space_available_size": 0, - * "physical_space_size": 3090560 - * }, - * { - * "space_name": "code_space", - * "space_size": 1260160, - * "space_used_size": 644256, - * "space_available_size": 960, - * "physical_space_size": 1260160 - * }, - * { - * "space_name": "map_space", - * "space_size": 1094160, - * "space_used_size": 201608, - * "space_available_size": 0, - * "physical_space_size": 1094160 - * }, - * { - * "space_name": "large_object_space", - * "space_size": 0, - * "space_used_size": 0, - * "space_available_size": 1490980608, - * "physical_space_size": 0 - * } - * ] - * ``` - * @since v6.0.0 - */ - function getHeapSpaceStatistics(): HeapSpaceInfo[]; - /** - * The `v8.setFlagsFromString()` method can be used to programmatically set - * V8 command-line flags. This method should be used with care. Changing settings - * after the VM has started may result in unpredictable behavior, including - * crashes and data loss; or it may simply do nothing. - * - * The V8 options available for a version of Node.js may be determined by running `node --v8-options`. - * - * Usage: - * - * ```js - * // Print GC events to stdout for one minute. - * import v8 from 'node:v8'; - * v8.setFlagsFromString('--trace_gc'); - * setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); - * ``` - * @since v1.0.0 - */ - function setFlagsFromString(flags: string): void; - /** - * This is similar to the [`queryObjects()` console API](https://developer.chrome.com/docs/devtools/console/utilities#queryObjects-function) - * provided by the Chromium DevTools console. It can be used to search for objects that have the matching constructor on its prototype chain - * in the heap after a full garbage collection, which can be useful for memory leak regression tests. To avoid surprising results, users should - * avoid using this API on constructors whose implementation they don't control, or on constructors that can be invoked by other parties in the - * application. - * - * To avoid accidental leaks, this API does not return raw references to the objects found. By default, it returns the count of the objects - * found. If `options.format` is `'summary'`, it returns an array containing brief string representations for each object. The visibility provided - * in this API is similar to what the heap snapshot provides, while users can save the cost of serialization and parsing and directly filter the - * target objects during the search. - * - * Only objects created in the current execution context are included in the results. - * - * ```js - * import { queryObjects } from 'node:v8'; - * class A { foo = 'bar'; } - * console.log(queryObjects(A)); // 0 - * const a = new A(); - * console.log(queryObjects(A)); // 1 - * // [ "A { foo: 'bar' }" ] - * console.log(queryObjects(A, { format: 'summary' })); - * - * class B extends A { bar = 'qux'; } - * const b = new B(); - * console.log(queryObjects(B)); // 1 - * // [ "B { foo: 'bar', bar: 'qux' }" ] - * console.log(queryObjects(B, { format: 'summary' })); - * - * // Note that, when there are child classes inheriting from a constructor, - * // the constructor also shows up in the prototype chain of the child - * // classes's prototoype, so the child classes's prototoype would also be - * // included in the result. - * console.log(queryObjects(A)); // 3 - * // [ "B { foo: 'bar', bar: 'qux' }", 'A {}', "A { foo: 'bar' }" ] - * console.log(queryObjects(A, { format: 'summary' })); - * ``` - * @param ctor The constructor that can be used to search on the prototype chain in order to filter target objects in the heap. - * @since v20.13.0 - */ - function queryObjects(ctor: Function): number | string[]; - function queryObjects(ctor: Function, options: { format: "count" }): number; - function queryObjects(ctor: Function, options: { format: "summary" }): string[]; - /** - * Generates a snapshot of the current V8 heap and returns a Readable - * Stream that may be used to read the JSON serialized representation. - * This JSON stream format is intended to be used with tools such as - * Chrome DevTools. The JSON schema is undocumented and specific to the - * V8 engine. Therefore, the schema may change from one version of V8 to the next. - * - * Creating a heap snapshot requires memory about twice the size of the heap at - * the time the snapshot is created. This results in the risk of OOM killers - * terminating the process. - * - * Generating a snapshot is a synchronous operation which blocks the event loop - * for a duration depending on the heap size. - * - * ```js - * // Print heap snapshot to the console - * import v8 from 'node:v8'; - * const stream = v8.getHeapSnapshot(); - * stream.pipe(process.stdout); - * ``` - * @since v11.13.0 - * @return A Readable containing the V8 heap snapshot. - */ - function getHeapSnapshot(options?: HeapSnapshotOptions): Readable; - /** - * Generates a snapshot of the current V8 heap and writes it to a JSON - * file. This file is intended to be used with tools such as Chrome - * DevTools. The JSON schema is undocumented and specific to the V8 - * engine, and may change from one version of V8 to the next. - * - * A heap snapshot is specific to a single V8 isolate. When using `worker threads`, a heap snapshot generated from the main thread will - * not contain any information about the workers, and vice versa. - * - * Creating a heap snapshot requires memory about twice the size of the heap at - * the time the snapshot is created. This results in the risk of OOM killers - * terminating the process. - * - * Generating a snapshot is a synchronous operation which blocks the event loop - * for a duration depending on the heap size. - * - * ```js - * import { writeHeapSnapshot } from 'node:v8'; - * import { - * Worker, - * isMainThread, - * parentPort, - * } from 'node:worker_threads'; - * - * if (isMainThread) { - * const worker = new Worker(__filename); - * - * worker.once('message', (filename) => { - * console.log(`worker heapdump: ${filename}`); - * // Now get a heapdump for the main thread. - * console.log(`main thread heapdump: ${writeHeapSnapshot()}`); - * }); - * - * // Tell the worker to create a heapdump. - * worker.postMessage('heapdump'); - * } else { - * parentPort.once('message', (message) => { - * if (message === 'heapdump') { - * // Generate a heapdump for the worker - * // and return the filename to the parent. - * parentPort.postMessage(writeHeapSnapshot()); - * } - * }); - * } - * ``` - * @since v11.13.0 - * @param filename The file path where the V8 heap snapshot is to be saved. If not specified, a file name with the pattern `'Heap-${yyyymmdd}-${hhmmss}-${pid}-${thread_id}.heapsnapshot'` will be - * generated, where `{pid}` will be the PID of the Node.js process, `{thread_id}` will be `0` when `writeHeapSnapshot()` is called from the main Node.js thread or the id of a - * worker thread. - * @return The filename where the snapshot was saved. - */ - function writeHeapSnapshot(filename?: string, options?: HeapSnapshotOptions): string; - /** - * Get statistics about code and its metadata in the heap, see - * V8 [`GetHeapCodeAndMetadataStatistics`](https://v8docs.nodesource.com/node-13.2/d5/dda/classv8_1_1_isolate.html#a6079122af17612ef54ef3348ce170866) API. Returns an object with the - * following properties: - * - * ```js - * { - * code_and_metadata_size: 212208, - * bytecode_and_metadata_size: 161368, - * external_script_source_size: 1410794, - * cpu_profiler_metadata_size: 0, - * } - * ``` - * @since v12.8.0 - */ - function getHeapCodeStatistics(): HeapCodeStatistics; - /** - * @since v25.0.0 - */ - interface SyncCPUProfileHandle { - /** - * Stopping collecting the profile and return the profile data. - * @since v25.0.0 - */ - stop(): string; - /** - * Stopping collecting the profile and the profile will be discarded. - * @since v25.0.0 - */ - [Symbol.dispose](): void; - } - /** - * @since v24.8.0 - */ - interface CPUProfileHandle { - /** - * Stopping collecting the profile, then return a Promise that fulfills with an error or the - * profile data. - * @since v24.8.0 - */ - stop(): Promise; - /** - * Stopping collecting the profile and the profile will be discarded. - * @since v24.8.0 - */ - [Symbol.asyncDispose](): Promise; - } - /** - * @since v24.9.0 - */ - interface HeapProfileHandle { - /** - * Stopping collecting the profile, then return a Promise that fulfills with an error or the - * profile data. - * @since v24.9.0 - */ - stop(): Promise; - /** - * Stopping collecting the profile and the profile will be discarded. - * @since v24.9.0 - */ - [Symbol.asyncDispose](): Promise; - } - /** - * Starting a CPU profile then return a `SyncCPUProfileHandle` object. - * This API supports `using` syntax. - * - * ```js - * const handle = v8.startCpuProfile(); - * const profile = handle.stop(); - * console.log(profile); - * ``` - * @since v25.0.0 - */ - function startCpuProfile(): SyncCPUProfileHandle; - /** - * V8 only supports `Latin-1/ISO-8859-1` and `UTF16` as the underlying representation of a string. - * If the `content` uses `Latin-1/ISO-8859-1` as the underlying representation, this function will return true; - * otherwise, it returns false. - * - * If this method returns false, that does not mean that the string contains some characters not in `Latin-1/ISO-8859-1`. - * Sometimes a `Latin-1` string may also be represented as `UTF16`. - * - * ```js - * const { isStringOneByteRepresentation } = require('node:v8'); - * - * const Encoding = { - * latin1: 1, - * utf16le: 2, - * }; - * const buffer = Buffer.alloc(100); - * function writeString(input) { - * if (isStringOneByteRepresentation(input)) { - * buffer.writeUint8(Encoding.latin1); - * buffer.writeUint32LE(input.length, 1); - * buffer.write(input, 5, 'latin1'); - * } else { - * buffer.writeUint8(Encoding.utf16le); - * buffer.writeUint32LE(input.length * 2, 1); - * buffer.write(input, 5, 'utf16le'); - * } - * } - * writeString('hello'); - * writeString('你好'); - * ``` - * @since v23.10.0, v22.15.0 - */ - function isStringOneByteRepresentation(content: string): boolean; - /** - * @since v8.0.0 - */ - class Serializer { - /** - * Writes out a header, which includes the serialization format version. - */ - writeHeader(): void; - /** - * Serializes a JavaScript value and adds the serialized representation to the - * internal buffer. - * - * This throws an error if `value` cannot be serialized. - */ - writeValue(val: any): boolean; - /** - * Returns the stored internal buffer. This serializer should not be used once - * the buffer is released. Calling this method results in undefined behavior - * if a previous write has failed. - */ - releaseBuffer(): NonSharedBuffer; - /** - * Marks an `ArrayBuffer` as having its contents transferred out of band. - * Pass the corresponding `ArrayBuffer` in the deserializing context to `deserializer.transferArrayBuffer()`. - * @param id A 32-bit unsigned integer. - * @param arrayBuffer An `ArrayBuffer` instance. - */ - transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; - /** - * Write a raw 32-bit unsigned integer. - * For use inside of a custom `serializer._writeHostObject()`. - */ - writeUint32(value: number): void; - /** - * Write a raw 64-bit unsigned integer, split into high and low 32-bit parts. - * For use inside of a custom `serializer._writeHostObject()`. - */ - writeUint64(hi: number, lo: number): void; - /** - * Write a JS `number` value. - * For use inside of a custom `serializer._writeHostObject()`. - */ - writeDouble(value: number): void; - /** - * Write raw bytes into the serializer's internal buffer. The deserializer - * will require a way to compute the length of the buffer. - * For use inside of a custom `serializer._writeHostObject()`. - */ - writeRawBytes(buffer: NodeJS.ArrayBufferView): void; - } - /** - * A subclass of `Serializer` that serializes `TypedArray`(in particular `Buffer`) and `DataView` objects as host objects, and only - * stores the part of their underlying `ArrayBuffer`s that they are referring to. - * @since v8.0.0 - */ - class DefaultSerializer extends Serializer {} - /** - * @since v8.0.0 - */ - class Deserializer { - constructor(data: NodeJS.TypedArray); - /** - * Reads and validates a header (including the format version). - * May, for example, reject an invalid or unsupported wire format. In that case, - * an `Error` is thrown. - */ - readHeader(): boolean; - /** - * Deserializes a JavaScript value from the buffer and returns it. - */ - readValue(): any; - /** - * Marks an `ArrayBuffer` as having its contents transferred out of band. - * Pass the corresponding `ArrayBuffer` in the serializing context to `serializer.transferArrayBuffer()` (or return the `id` from `serializer._getSharedArrayBufferId()` in the case of - * `SharedArrayBuffer`s). - * @param id A 32-bit unsigned integer. - * @param arrayBuffer An `ArrayBuffer` instance. - */ - transferArrayBuffer(id: number, arrayBuffer: ArrayBuffer): void; - /** - * Reads the underlying wire format version. Likely mostly to be useful to - * legacy code reading old wire format versions. May not be called before `.readHeader()`. - */ - getWireFormatVersion(): number; - /** - * Read a raw 32-bit unsigned integer and return it. - * For use inside of a custom `deserializer._readHostObject()`. - */ - readUint32(): number; - /** - * Read a raw 64-bit unsigned integer and return it as an array `[hi, lo]` with two 32-bit unsigned integer entries. - * For use inside of a custom `deserializer._readHostObject()`. - */ - readUint64(): [number, number]; - /** - * Read a JS `number` value. - * For use inside of a custom `deserializer._readHostObject()`. - */ - readDouble(): number; - /** - * Read raw bytes from the deserializer's internal buffer. The `length` parameter - * must correspond to the length of the buffer that was passed to `serializer.writeRawBytes()`. - * For use inside of a custom `deserializer._readHostObject()`. - */ - readRawBytes(length: number): Buffer; - } - /** - * A subclass of `Deserializer` corresponding to the format written by `DefaultSerializer`. - * @since v8.0.0 - */ - class DefaultDeserializer extends Deserializer {} - /** - * Uses a `DefaultSerializer` to serialize `value` into a buffer. - * - * `ERR_BUFFER_TOO_LARGE` will be thrown when trying to - * serialize a huge object which requires buffer - * larger than `buffer.constants.MAX_LENGTH`. - * @since v8.0.0 - */ - function serialize(value: any): NonSharedBuffer; - /** - * Uses a `DefaultDeserializer` with default options to read a JS value - * from a buffer. - * @since v8.0.0 - * @param buffer A buffer returned by {@link serialize}. - */ - function deserialize(buffer: NodeJS.ArrayBufferView): any; - /** - * The `v8.takeCoverage()` method allows the user to write the coverage started by `NODE_V8_COVERAGE` to disk on demand. This method can be invoked multiple - * times during the lifetime of the process. Each time the execution counter will - * be reset and a new coverage report will be written to the directory specified - * by `NODE_V8_COVERAGE`. - * - * When the process is about to exit, one last coverage will still be written to - * disk unless {@link stopCoverage} is invoked before the process exits. - * @since v15.1.0, v14.18.0, v12.22.0 - */ - function takeCoverage(): void; - /** - * The `v8.stopCoverage()` method allows the user to stop the coverage collection - * started by `NODE_V8_COVERAGE`, so that V8 can release the execution count - * records and optimize code. This can be used in conjunction with {@link takeCoverage} if the user wants to collect the coverage on demand. - * @since v15.1.0, v14.18.0, v12.22.0 - */ - function stopCoverage(): void; - /** - * The API is a no-op if `--heapsnapshot-near-heap-limit` is already set from the command line or the API is called more than once. - * `limit` must be a positive integer. See [`--heapsnapshot-near-heap-limit`](https://nodejs.org/docs/latest-v25.x/api/cli.html#--heapsnapshot-near-heap-limitmax_count) for more information. - * @since v18.10.0, v16.18.0 - */ - function setHeapSnapshotNearHeapLimit(limit: number): void; - /** - * This API collects GC data in current thread. - * @since v19.6.0, v18.15.0 - */ - class GCProfiler { - /** - * Start collecting GC data. - * @since v19.6.0, v18.15.0 - */ - start(): void; - /** - * Stop collecting GC data and return an object. The content of object - * is as follows. - * - * ```json - * { - * "version": 1, - * "startTime": 1674059033862, - * "statistics": [ - * { - * "gcType": "Scavenge", - * "beforeGC": { - * "heapStatistics": { - * "totalHeapSize": 5005312, - * "totalHeapSizeExecutable": 524288, - * "totalPhysicalSize": 5226496, - * "totalAvailableSize": 4341325216, - * "totalGlobalHandlesSize": 8192, - * "usedGlobalHandlesSize": 2112, - * "usedHeapSize": 4883840, - * "heapSizeLimit": 4345298944, - * "mallocedMemory": 254128, - * "externalMemory": 225138, - * "peakMallocedMemory": 181760 - * }, - * "heapSpaceStatistics": [ - * { - * "spaceName": "read_only_space", - * "spaceSize": 0, - * "spaceUsedSize": 0, - * "spaceAvailableSize": 0, - * "physicalSpaceSize": 0 - * } - * ] - * }, - * "cost": 1574.14, - * "afterGC": { - * "heapStatistics": { - * "totalHeapSize": 6053888, - * "totalHeapSizeExecutable": 524288, - * "totalPhysicalSize": 5500928, - * "totalAvailableSize": 4341101384, - * "totalGlobalHandlesSize": 8192, - * "usedGlobalHandlesSize": 2112, - * "usedHeapSize": 4059096, - * "heapSizeLimit": 4345298944, - * "mallocedMemory": 254128, - * "externalMemory": 225138, - * "peakMallocedMemory": 181760 - * }, - * "heapSpaceStatistics": [ - * { - * "spaceName": "read_only_space", - * "spaceSize": 0, - * "spaceUsedSize": 0, - * "spaceAvailableSize": 0, - * "physicalSpaceSize": 0 - * } - * ] - * } - * } - * ], - * "endTime": 1674059036865 - * } - * ``` - * - * Here's an example. - * - * ```js - * import { GCProfiler } from 'node:v8'; - * const profiler = new GCProfiler(); - * profiler.start(); - * setTimeout(() => { - * console.log(profiler.stop()); - * }, 1000); - * ``` - * @since v19.6.0, v18.15.0 - */ - stop(): GCProfilerResult; - /** - * Stop collecting GC data, and discard the profile. - * @since v25.5.0 - */ - [Symbol.dispose](): void; - } - interface GCProfilerResult { - version: number; - startTime: number; - endTime: number; - statistics: Array<{ - gcType: string; - cost: number; - beforeGC: { - heapStatistics: HeapStatistics; - heapSpaceStatistics: HeapSpaceStatistics[]; - }; - afterGC: { - heapStatistics: HeapStatistics; - heapSpaceStatistics: HeapSpaceStatistics[]; - }; - }>; - } - interface HeapStatistics { - totalHeapSize: number; - totalHeapSizeExecutable: number; - totalPhysicalSize: number; - totalAvailableSize: number; - totalGlobalHandlesSize: number; - usedGlobalHandlesSize: number; - usedHeapSize: number; - heapSizeLimit: number; - mallocedMemory: number; - externalMemory: number; - peakMallocedMemory: number; - } - interface HeapSpaceStatistics { - spaceName: string; - spaceSize: number; - spaceUsedSize: number; - spaceAvailableSize: number; - physicalSpaceSize: number; - } - /** - * Called when a promise is constructed. This does not mean that corresponding before/after events will occur, only that the possibility exists. This will - * happen if a promise is created without ever getting a continuation. - * @since v17.1.0, v16.14.0 - * @param promise The promise being created. - * @param parent The promise continued from, if applicable. - */ - interface Init { - (promise: Promise, parent: Promise): void; - } - /** - * Called before a promise continuation executes. This can be in the form of `then()`, `catch()`, or `finally()` handlers or an await resuming. - * - * The before callback will be called 0 to N times. The before callback will typically be called 0 times if no continuation was ever made for the promise. - * The before callback may be called many times in the case where many continuations have been made from the same promise. - * @since v17.1.0, v16.14.0 - */ - interface Before { - (promise: Promise): void; - } - /** - * Called immediately after a promise continuation executes. This may be after a `then()`, `catch()`, or `finally()` handler or before an await after another await. - * @since v17.1.0, v16.14.0 - */ - interface After { - (promise: Promise): void; - } - /** - * Called when the promise receives a resolution or rejection value. This may occur synchronously in the case of {@link Promise.resolve()} or - * {@link Promise.reject()}. - * @since v17.1.0, v16.14.0 - */ - interface Settled { - (promise: Promise): void; - } - /** - * Key events in the lifetime of a promise have been categorized into four areas: creation of a promise, before/after a continuation handler is called or - * around an await, and when the promise resolves or rejects. - * - * Because promises are asynchronous resources whose lifecycle is tracked via the promise hooks mechanism, the `init()`, `before()`, `after()`, and - * `settled()` callbacks must not be async functions as they create more promises which would produce an infinite loop. - * @since v17.1.0, v16.14.0 - */ - interface HookCallbacks { - init?: Init; - before?: Before; - after?: After; - settled?: Settled; - } - interface PromiseHooks { - /** - * The `init` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. - * @since v17.1.0, v16.14.0 - * @param init The {@link Init | `init` callback} to call when a promise is created. - * @return Call to stop the hook. - */ - onInit: (init: Init) => Function; - /** - * The `settled` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. - * @since v17.1.0, v16.14.0 - * @param settled The {@link Settled | `settled` callback} to call when a promise is created. - * @return Call to stop the hook. - */ - onSettled: (settled: Settled) => Function; - /** - * The `before` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. - * @since v17.1.0, v16.14.0 - * @param before The {@link Before | `before` callback} to call before a promise continuation executes. - * @return Call to stop the hook. - */ - onBefore: (before: Before) => Function; - /** - * The `after` hook must be a plain function. Providing an async function will throw as it would produce an infinite microtask loop. - * @since v17.1.0, v16.14.0 - * @param after The {@link After | `after` callback} to call after a promise continuation executes. - * @return Call to stop the hook. - */ - onAfter: (after: After) => Function; - /** - * Registers functions to be called for different lifetime events of each promise. - * The callbacks `init()`/`before()`/`after()`/`settled()` are called for the respective events during a promise's lifetime. - * All callbacks are optional. For example, if only promise creation needs to be tracked, then only the init callback needs to be passed. - * The hook callbacks must be plain functions. Providing async functions will throw as it would produce an infinite microtask loop. - * @since v17.1.0, v16.14.0 - * @param callbacks The {@link HookCallbacks | Hook Callbacks} to register - * @return Used for disabling hooks - */ - createHook: (callbacks: HookCallbacks) => Function; - } - /** - * The `promiseHooks` interface can be used to track promise lifecycle events. - * @since v17.1.0, v16.14.0 - */ - const promiseHooks: PromiseHooks; - type StartupSnapshotCallbackFn = (args: any) => any; - /** - * The `v8.startupSnapshot` interface can be used to add serialization and deserialization hooks for custom startup snapshots. - * - * ```bash - * $ node --snapshot-blob snapshot.blob --build-snapshot entry.js - * # This launches a process with the snapshot - * $ node --snapshot-blob snapshot.blob - * ``` - * - * In the example above, `entry.js` can use methods from the `v8.startupSnapshot` interface to specify how to save information for custom objects - * in the snapshot during serialization and how the information can be used to synchronize these objects during deserialization of the snapshot. - * For example, if the `entry.js` contains the following script: - * - * ```js - * 'use strict'; - * - * import fs from 'node:fs'; - * import zlib from 'node:zlib'; - * import path from 'node:path'; - * import assert from 'node:assert'; - * - * import v8 from 'node:v8'; - * - * class BookShelf { - * storage = new Map(); - * - * // Reading a series of files from directory and store them into storage. - * constructor(directory, books) { - * for (const book of books) { - * this.storage.set(book, fs.readFileSync(path.join(directory, book))); - * } - * } - * - * static compressAll(shelf) { - * for (const [ book, content ] of shelf.storage) { - * shelf.storage.set(book, zlib.gzipSync(content)); - * } - * } - * - * static decompressAll(shelf) { - * for (const [ book, content ] of shelf.storage) { - * shelf.storage.set(book, zlib.gunzipSync(content)); - * } - * } - * } - * - * // __dirname here is where the snapshot script is placed - * // during snapshot building time. - * const shelf = new BookShelf(__dirname, [ - * 'book1.en_US.txt', - * 'book1.es_ES.txt', - * 'book2.zh_CN.txt', - * ]); - * - * assert(v8.startupSnapshot.isBuildingSnapshot()); - * // On snapshot serialization, compress the books to reduce size. - * v8.startupSnapshot.addSerializeCallback(BookShelf.compressAll, shelf); - * // On snapshot deserialization, decompress the books. - * v8.startupSnapshot.addDeserializeCallback(BookShelf.decompressAll, shelf); - * v8.startupSnapshot.setDeserializeMainFunction((shelf) => { - * // process.env and process.argv are refreshed during snapshot - * // deserialization. - * const lang = process.env.BOOK_LANG || 'en_US'; - * const book = process.argv[1]; - * const name = `${book}.${lang}.txt`; - * console.log(shelf.storage.get(name)); - * }, shelf); - * ``` - * - * The resulted binary will get print the data deserialized from the snapshot during start up, using the refreshed `process.env` and `process.argv` of the launched process: - * - * ```bash - * $ BOOK_LANG=es_ES node --snapshot-blob snapshot.blob book1 - * # Prints content of book1.es_ES.txt deserialized from the snapshot. - * ``` - * - * Currently the application deserialized from a user-land snapshot cannot be snapshotted again, so these APIs are only available to applications that are not deserialized from a user-land snapshot. - * - * @since v18.6.0, v16.17.0 - */ - namespace startupSnapshot { - /** - * Add a callback that will be called when the Node.js instance is about to get serialized into a snapshot and exit. - * This can be used to release resources that should not or cannot be serialized or to convert user data into a form more suitable for serialization. - * @since v18.6.0, v16.17.0 - */ - function addSerializeCallback(callback: StartupSnapshotCallbackFn, data?: any): void; - /** - * Add a callback that will be called when the Node.js instance is deserialized from a snapshot. - * The `callback` and the `data` (if provided) will be serialized into the snapshot, they can be used to re-initialize the state of the application or - * to re-acquire resources that the application needs when the application is restarted from the snapshot. - * @since v18.6.0, v16.17.0 - */ - function addDeserializeCallback(callback: StartupSnapshotCallbackFn, data?: any): void; - /** - * This sets the entry point of the Node.js application when it is deserialized from a snapshot. This can be called only once in the snapshot building script. - * If called, the deserialized application no longer needs an additional entry point script to start up and will simply invoke the callback along with the deserialized - * data (if provided), otherwise an entry point script still needs to be provided to the deserialized application. - * @since v18.6.0, v16.17.0 - */ - function setDeserializeMainFunction(callback: StartupSnapshotCallbackFn, data?: any): void; - /** - * Returns true if the Node.js instance is run to build a snapshot. - * @since v18.6.0, v16.17.0 - */ - function isBuildingSnapshot(): boolean; - } -} -declare module "v8" { - export * from "node:v8"; -} diff --git a/skills/flight-finder/node_modules/@types/node/vm.d.ts b/skills/flight-finder/node_modules/@types/node/vm.d.ts deleted file mode 100644 index d5e437e..0000000 --- a/skills/flight-finder/node_modules/@types/node/vm.d.ts +++ /dev/null @@ -1,1208 +0,0 @@ -/** - * The `node:vm` module enables compiling and running code within V8 Virtual - * Machine contexts. - * - * **The `node:vm` module is not a security** - * **mechanism. Do not use it to run untrusted code.** - * - * JavaScript code can be compiled and run immediately or - * compiled, saved, and run later. - * - * A common use case is to run the code in a different V8 Context. This means - * invoked code has a different global object than the invoking code. - * - * One can provide the context by `contextifying` an - * object. The invoked code treats any property in the context like a - * global variable. Any changes to global variables caused by the invoked - * code are reflected in the context object. - * - * ```js - * import vm from 'node:vm'; - * - * const x = 1; - * - * const context = { x: 2 }; - * vm.createContext(context); // Contextify the object. - * - * const code = 'x += 40; var y = 17;'; - * // `x` and `y` are global variables in the context. - * // Initially, x has the value 2 because that is the value of context.x. - * vm.runInContext(code, context); - * - * console.log(context.x); // 42 - * console.log(context.y); // 17 - * - * console.log(x); // 1; y is not defined. - * ``` - * @see [source](https://github.com/nodejs/node/blob/v25.x/lib/vm.js) - */ -declare module "node:vm" { - import { NonSharedBuffer } from "node:buffer"; - import { ImportAttributes, ImportPhase } from "node:module"; - interface Context extends NodeJS.Dict {} - interface BaseOptions { - /** - * Specifies the filename used in stack traces produced by this script. - * @default '' - */ - filename?: string | undefined; - /** - * Specifies the line number offset that is displayed in stack traces produced by this script. - * @default 0 - */ - lineOffset?: number | undefined; - /** - * Specifies the column number offset that is displayed in stack traces produced by this script. - * @default 0 - */ - columnOffset?: number | undefined; - } - type DynamicModuleLoader = ( - specifier: string, - referrer: T, - importAttributes: ImportAttributes, - phase: ImportPhase, - ) => Module | Promise; - interface ScriptOptions extends BaseOptions { - /** - * Provides an optional data with V8's code cache data for the supplied source. - */ - cachedData?: NodeJS.ArrayBufferView | undefined; - /** @deprecated in favor of `script.createCachedData()` */ - produceCachedData?: boolean | undefined; - /** - * Used to specify how the modules should be loaded during the evaluation of this script when `import()` is called. This option is - * part of the experimental modules API. We do not recommend using it in a production environment. For detailed information, see - * [Support of dynamic `import()` in compilation APIs](https://nodejs.org/docs/latest-v25.x/api/vm.html#support-of-dynamic-import-in-compilation-apis). - * @experimental - */ - importModuleDynamically?: - | DynamicModuleLoader` - -[Get supported base64-js with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-base64-js?utm_source=npm-base64-js&utm_medium=referral&utm_campaign=readme) - -## methods - -`base64js` has three exposed functions, `byteLength`, `toByteArray` and `fromByteArray`, which both take a single argument. - -* `byteLength` - Takes a base64 string and returns length of byte array -* `toByteArray` - Takes a base64 string and returns a byte array -* `fromByteArray` - Takes a byte array and returns a base64 string - -## license - -MIT diff --git a/skills/flight-finder/node_modules/base64-js/base64js.min.js b/skills/flight-finder/node_modules/base64-js/base64js.min.js deleted file mode 100644 index 908ac83..0000000 --- a/skills/flight-finder/node_modules/base64-js/base64js.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;fj?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} diff --git a/skills/flight-finder/node_modules/base64-js/package.json b/skills/flight-finder/node_modules/base64-js/package.json deleted file mode 100644 index c3972e3..0000000 --- a/skills/flight-finder/node_modules/base64-js/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "base64-js", - "description": "Base64 encoding/decoding in pure JS", - "version": "1.5.1", - "author": "T. Jameson Little ", - "typings": "index.d.ts", - "bugs": { - "url": "https://github.com/beatgammit/base64-js/issues" - }, - "devDependencies": { - "babel-minify": "^0.5.1", - "benchmark": "^2.1.4", - "browserify": "^16.3.0", - "standard": "*", - "tape": "4.x" - }, - "homepage": "https://github.com/beatgammit/base64-js", - "keywords": [ - "base64" - ], - "license": "MIT", - "main": "index.js", - "repository": { - "type": "git", - "url": "git://github.com/beatgammit/base64-js.git" - }, - "scripts": { - "build": "browserify -s base64js -r ./ | minify > base64js.min.js", - "lint": "standard", - "test": "npm run lint && npm run unit", - "unit": "tape test/*.js" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] -} diff --git a/skills/flight-finder/node_modules/brotli/build/encode.js b/skills/flight-finder/node_modules/brotli/build/encode.js deleted file mode 100644 index ff35302..0000000 --- a/skills/flight-finder/node_modules/brotli/build/encode.js +++ /dev/null @@ -1,57 +0,0 @@ -var b={},aa=require("../decompress"),ba=require("base64-js");b.readBinary=function(){var a=ba.toByteArray(require("../build/mem.js"));return aa(a)};b||(b=eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));var g={},m;for(m in b)b.hasOwnProperty(m)&&(g[m]=b[m]);var t="object"===typeof window,u="function"===typeof importScripts,v="object"===typeof process&&"function"===typeof require&&!t&&!u,x=!t&&!v&&!u; -if(v){b.print||(b.print=function(a){process.stdout.write(a+"\n")});b.printErr||(b.printErr=function(a){process.stderr.write(a+"\n")});var ca=require("fs"),da=require("path");b.read=function(a,c){a=da.normalize(a);var d=ca.readFileSync(a);d||a==da.resolve(a)||(a=path.join(__dirname,"..","src",a),d=ca.readFileSync(a));d&&!c&&(d=d.toString());return d};b.readBinary=function(a){a=b.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};b.load=function(a){ea(read(a))};b.thisProgram||(b.thisProgram= -1 0) var gc = undefined");else if(t||u)b.read=function(a){var c=new XMLHttpRequest;c.open("GET",a,!1);c.send(null);return c.responseText},"undefined"!=typeof arguments&&(b.arguments=arguments),"undefined"!== -typeof console?(b.print||(b.print=function(a){console.log(a)}),b.printErr||(b.printErr=function(a){console.log(a)})):b.print||(b.print=function(){}),u&&(b.load=importScripts),"undefined"===typeof b.setWindowTitle&&(b.setWindowTitle=function(a){document.title=a});else throw"Unknown runtime environment. Where are we?";function ea(a){eval.call(null,a)}!b.load&&b.read&&(b.load=function(a){ea(b.read(a))});b.print||(b.print=function(){});b.printErr||(b.printErr=b.print);b.arguments||(b.arguments=[]); -b.thisProgram||(b.thisProgram="./this.program");b.print=b.print;b.A=b.printErr;b.preRun=[];b.postRun=[];for(m in g)g.hasOwnProperty(m)&&(b[m]=g[m]); -var A={P:function(a){fa=a},N:function(){return fa},G:function(){return z},F:function(a){z=a},D:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;default:return"*"===a[a.length-1]?A.o:"i"===a[0]?(a=parseInt(a.substr(1)),assert(0===a%8),a/8):0}},M:function(a){return Math.max(A.D(a),A.o)},R:16,ea:function(a,c){"double"===c||"i64"===c?a&7&&(assert(4===(a&7)),a+=4):assert(0===(a&3));return a},Y:function(a, -c,d){return d||"i64"!=a&&"double"!=a?a?Math.min(c||(a?A.M(a):0),A.o):Math.min(c,8):8},r:function(a,c,d){return d&&d.length?(d.splice||(d=Array.prototype.slice.call(d)),d.splice(0,0,c),b["dynCall_"+a].apply(null,d)):b["dynCall_"+a].call(null,c)},k:[],H:function(a){for(var c=0;c=D)E("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+ -D+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 "),a=!0;return a?(C=c,0):c},p:function(a,c){return Math.ceil(a/(c?c:16))*(c?c:16)},da:function(a,c,d){return d?+(a>>>0)+4294967296*+(c>>>0):+(a>>>0)+4294967296*+(c|0)},C:8,o:4,S:0};A.addFunction=A.H; -A.removeFunction=A.O;var F=!1,G,H,fa;function assert(a,c){a||E("Assertion failed: "+c)}(function(){var a={stackSave:function(){A.G()},stackRestore:function(){A.F()},arrayToC:function(a){for(var c=A.n(a.length),d=c,k=0;k>0]=a[k];return c},stringToC:function(a){var c=0;null!==a&&void 0!==a&&0!==a&&(c=A.n((a.length<<2)+1),ga(a,c));return c}},c=/^function\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/,d;for(d in a)a.hasOwnProperty(d)&&a[d].toString().match(c).slice(1)})(); -function ha(a){var c;c="i32";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":return I[a>>0];case "i8":return I[a>>0];case "i16":return J[a>>1];case "i32":return K[a>>2];case "i64":return K[a>>2];case "float":return L[a>>2];case "double":return N[a>>3];default:E("invalid type for setValue: "+c)}return null} -function O(a,c,d){var e,h,l;"number"===typeof a?(h=!0,l=a):(h=!1,l=a.length);var k="string"===typeof c?c:null;d=4==d?e:[ia,A.n,A.Q,A.g][void 0===d?2:d](Math.max(l,k?1:c.length));if(h){e=d;assert(0==(d&3));for(a=d+(l&-4);e>2]=0;for(a=d+l;e>0]=0;return d}if("i8"===k)return a.subarray||a.slice?P.set(a,d):P.set(new Uint8Array(a),d),d;e=0;for(var f,M;e>0]=r;break;case "i8":I[w>>0]=r;break;case "i16":J[w>>1]=r;break;case "i32":K[w>>2]=r;break;case "i64":H=[r>>>0,(G=r,1<=+ja(G)?0>>0:~~+ma((G-+(~~G>>>0))/4294967296)>>>0:0)];K[w>>2]=H[0];K[w+4>>2]=H[1];break;case "float":L[w>>2]=r;break;case "double":N[w>>3]=r;break;default:E("invalid type for setValue: "+q)}M!==h&&(f=A.D(h),M=h);e+=f}}return d} -function Q(a){var c;if(0===c||!a)return"";for(var d=0,e,h=0;;){e=P[a+h>>0];d|=e;if(0==e&&!c)break;h++;if(c&&h==c)break}c||(c=h);e="";if(128>d){for(;0"):l=p;a:for(;fR?2*R:R+16777216;R!==D&&(D=R); -assert("undefined"!==typeof Int32Array&&"undefined"!==typeof Float64Array&&!!(new Int32Array(1)).subarray&&!!(new Int32Array(1)).set,"JS engine does not provide full typed array support");var buffer;buffer=new ArrayBuffer(D);I=new Int8Array(buffer);J=new Int16Array(buffer);K=new Int32Array(buffer);P=new Uint8Array(buffer);ta=new Uint16Array(buffer);ua=new Uint32Array(buffer);L=new Float32Array(buffer);N=new Float64Array(buffer);K[0]=255;assert(255===P[0]&&0===P[3],"Typed arrays 2 must be run on a little-endian system"); -b.HEAP=void 0;b.buffer=buffer;b.HEAP8=I;b.HEAP16=J;b.HEAP32=K;b.HEAPU8=P;b.HEAPU16=ta;b.HEAPU32=ua;b.HEAPF32=L;b.HEAPF64=N;function S(a){for(;0=h&&(h=65536+((h&1023)<<10)|a.charCodeAt(++e)&1023);127>=h?++d:d=2047>=h?d+2:65535>=h?d+3:2097151>=h?d+4:67108863>=h?d+5:d+6}d=Array(d+1);var l=d.length,e=0;if(0=f&&(f=65536+((f&1023)<<10)|a.charCodeAt(++k)&1023);if(127>=f){if(e>=l)break;d[e++]=f}else{if(2047>=f){if(e+1>=l)break;d[e++]=192|f>>6}else{if(65535>=f){if(e+2>=l)break;d[e++]= -224|f>>12}else{if(2097151>=f){if(e+3>=l)break;d[e++]=240|f>>18}else{if(67108863>=f){if(e+4>=l)break;d[e++]=248|f>>24}else{if(e+5>=l)break;d[e++]=252|f>>30;d[e++]=128|f>>24&63}d[e++]=128|f>>18&63}d[e++]=128|f>>12&63}d[e++]=128|f>>6&63}d[e++]=128|f&63}}d[e]=0;e=e-h}else e=0;c&&(d.length=e);return d}function ga(a,c){for(var d=Ga(a,void 0),e=0;e>0]=d[e],e+=1} -Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,c){var d=a&65535,e=c&65535;return d*e+((a>>>16)*e+d*(c>>>16)<<16)|0});Math.ba=Math.imul;Math.clz32||(Math.clz32=function(a){a=a>>>0;for(var c=0;32>c;c++)if(a&1<<31-c)return c;return 32});Math.V=Math.clz32;var ja=Math.abs,ma=Math.ceil,la=Math.floor,ka=Math.min,U=0,Ha=null,V=null;b.preloadedImages={};b.preloadedAudios={};var W=null,va=8,B=va+407936;Ba.push();var W="encode.js.mem",Ia=A.p(O(12,"i8",2),8);assert(0==Ia%8);b._i64Subtract=Ja; -function Ka(a){b.___errno_location&&(K[b.___errno_location()>>2]=a);return a}b._memset=La;b._bitshift64Lshr=Ma;b._bitshift64Shl=Na;b._memcpy=Oa;b._i64Add=Pa;function X(a){X.L||(C=sa(),X.L=!0,assert(A.g),X.K=A.g,A.g=function(){E("cannot dynamically allocate, sbrk now has control")});var c=C;return 0==a||X.K(a)?c:4294967295}b._memmove=Qa;function Ra(a){b.exit(a)}wa=z=A.p(B);xa=wa+za;ya=C=A.p(xa);assert(ya>2]=c);return c},_emscripten_memcpy_big:function(a,c,d){P.set(P.subarray(c,c+d),a);return a},_llvm_trap:function(){E("trap!")},_exit:function(a){Ra(a)},___assert_fail:function(a,c,d,e){F=!0;throw"Assertion failed: "+Q(a)+", at: "+[c?Q(c):"unknown filename",d,e?Q(e):"unknown function"]+" at "+qa();},STACKTOP:z,STACK_MAX:xa,tempDoublePtr:Ia,ABORT:F,cttz_i8:Sa};// EMSCRIPTEN_START_ASM - -var Y=(function(global,env,buffer) { -"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;var C=0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=global.Math.floor;var N=global.Math.abs;var O=global.Math.sqrt;var P=global.Math.pow;var Q=global.Math.cos;var R=global.Math.sin;var S=global.Math.tan;var T=global.Math.acos;var U=global.Math.asin;var V=global.Math.atan;var W=global.Math.atan2;var X=global.Math.exp;var Y=global.Math.log;var Z=global.Math.ceil;var _=global.Math.imul;var $=global.Math.min;var aa=global.Math.clz32;var ba=env.abort;var ca=env.assert;var da=env.invoke_vii;var ea=env.invoke_iii;var fa=env.__exit;var ga=env._pthread_self;var ha=env._abort;var ia=env.___setErrNo;var ja=env._sysconf;var ka=env._sbrk;var la=env._time;var ma=env._emscripten_memcpy_big;var na=env._llvm_trap;var oa=env._exit;var pa=env.___assert_fail;var qa=0.0; -// EMSCRIPTEN_START_FUNCS -function $a(e,f,g,h,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;G=i;i=i+16|0;F=G;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;E=0;D=0;while(1){if(!g)break;n=c[f+(D<<2)>>2]|0;if(!n)o=E;else{if(E>>>0<4)c[F+(E<<2)>>2]=D;o=E+1|0;g=g-n|0}E=o;D=D+1|0}if(E>>>0<2){n=c[l>>2]|0;p=m+(n>>>3)|0;g=d[p>>0]|0;n=cc(1,0,n&7|0)|0;o=C;n=g|n;g=p;a[g>>0]=n;a[g+1>>0]=n>>8;a[g+2>>0]=n>>16;a[g+3>>0]=n>>24;p=p+4|0;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;p=(c[l>>2]|0)+4|0;c[l>>2]=p;o=c[F>>2]|0;g=m+(p>>>3)|0;n=d[g>>0]|0;m=bc(o|0,0,h|0)|0;if(!((m|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(h>>>0>=57)pa(406267,406218,55,406251);D=cc(o|0,0,p&7|0)|0;F=C;D=n|D;m=g;E=m;a[E>>0]=D;a[E+1>>0]=D>>8;a[E+2>>0]=D>>16;a[E+3>>0]=D>>24;m=m+4|0;a[m>>0]=F;a[m+1>>0]=F>>8;a[m+2>>0]=F>>16;a[m+3>>0]=F>>24;c[l>>2]=(c[l>>2]|0)+h;a[j+o>>0]=0;b[k+(o<<1)>>1]=0;i=G;return}ac(j|0,0,D|0)|0;y=e+8|0;z=sa[c[e>>2]&1](c[y>>2]|0,D<<4|8)|0;A=z;if(!z)oa(1);B=1;while(1){g=D;n=A;a:while(1){do{if(!g)break a;g=g+-1|0;o=c[f+(g<<2)>>2]|0}while((o|0)==0);p=g&65535;if(o>>>0>>0){c[n>>2]=B;b[n+4>>1]=-1;b[n+6>>1]=p}else{c[n>>2]=o;b[n+4>>1]=-1;b[n+6>>1]=p}n=n+8|0}x=n-A|0;w=x>>3;v=w+1|0;b:do if(w>>>0<13){s=1;while(1){if(s>>>0>=w>>>0)break b;r=z+(s<<3)|0;q=c[r>>2]|0;r=c[r+4>>2]|0;p=s;while(1){g=p;p=p+-1|0;o=z+(p<<3)|0;if(!(cb(q,c[o>>2]|0)|0))break;t=c[o+4>>2]|0;u=z+(g<<3)|0;c[u>>2]=c[o>>2];c[u+4>>2]=t;if(!p){g=0;break}}u=z+(g<<3)|0;c[u>>2]=q;c[u+4>>2]=r;s=s+1|0}}else{t=w>>>0<57?2:0;while(1){if((t|0)>=6)break b;g=c[19428+(t<<2)>>2]|0;u=g;while(1){if(u>>>0>=w>>>0)break;p=z+(u<<3)|0;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u;while(1){if(s>>>0>>0)break;q=s-g|0;r=z+(q<<3)|0;if(!(cb(o,c[r>>2]|0)|0))break;I=r;H=c[I+4>>2]|0;r=z+(s<<3)|0;c[r>>2]=c[I>>2];c[r+4>>2]=H;s=q}I=z+(s<<3)|0;c[I>>2]=o;c[I+4>>2]=p;u=u+1|0}t=t+1|0}}while(0);u=n;o=n;c[o>>2]=-1;c[o+4>>2]=-1;o=u+8|0;c[o>>2]=-1;c[o+4>>2]=-1;o=0;p=v;u=u+16|0;t=w;while(1){if((t|0)<=1)break;n=c[z+(o<<3)>>2]|0;g=c[z+(p<<3)>>2]|0;if(n>>>0>g>>>0){s=p+1|0;g=c[z+(s<<3)>>2]|0;r=o;q=p}else{r=o+1|0;n=c[z+(r<<3)>>2]|0;s=p;q=o}if(n>>>0>g>>>0){o=r;p=s+1|0;n=s}else{g=n;o=r+1|0;p=s;n=r}c[u+-8>>2]=(c[z+(q<<3)>>2]|0)+g;b[u+-4>>1]=q;b[u+-2>>1]=n;I=u;c[I>>2]=-1;c[I+4>>2]=-1;u=u+8|0;t=t+-1|0}if(Gb((x>>2)+-1|0,z,j,14)|0)break;B=B<<1}ra[c[e+4>>2]&1](c[y>>2]|0,z);Jb(j,D,k);x=c[l>>2]|0;v=m+(x>>>3)|0;w=d[v>>0]|0;x=x&7;if(E>>>0>=5){I=cc(1431655764,255,x|0)|0;n=C;I=w|I;g=v;t=g;a[t>>0]=I;a[t+1>>0]=I>>8;a[t+2>>0]=I>>16;a[t+3>>0]=I>>24;g=g+4|0;a[g>>0]=n;a[g+1>>0]=n>>8;a[g+2>>0]=n>>16;a[g+3>>0]=n>>24;g=(c[l>>2]|0)+40|0;c[l>>2]=g;n=0;t=8;c:while(1){while(1){if(n>>>0>=D>>>0){g=114;break c}u=a[j+n>>0]|0;s=1;o=n;while(1){o=o+1|0;if(o>>>0>=D>>>0)break;if((a[j+o>>0]|0)!=u<<24>>24)break;s=s+1|0}n=n+s|0;if(u<<24>>24)break;r=c[11564+(s<<2)>>2]|0;p=8+(s<<3)|0;o=c[p>>2]|0;p=c[p+4>>2]|0;q=m+(g>>>3)|0;I=bc(o|0,p|0,r|0)|0;if(!((I|0)==0&(C|0)==0)){g=99;break c}I=d[q>>0]|0;e=cc(o|0,p|0,g&7|0)|0;H=C;e=I|e;I=q;k=I;a[k>>0]=e;a[k+1>>0]=e>>8;a[k+2>>0]=e>>16;a[k+3>>0]=e>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;I=(c[l>>2]|0)+r|0;c[l>>2]=I;g=I}if(t<<24>>24==u<<24>>24)o=s;else{p=u&255;o=a[404394+p>>0]|0;p=c[14380+(p<<2)>>2]|0;q=m+(g>>>3)|0;I=bc(p|0,0,o&255|0)|0;if(!((I|0)==0&(C|0)==0)){g=103;break}H=d[q>>0]|0;k=cc(p|0,0,g&7|0)|0;I=C;k=H|k;g=q;H=g;a[H>>0]=k;a[H+1>>0]=k>>8;a[H+2>>0]=k>>16;a[H+3>>0]=k>>24;g=g+4|0;a[g>>0]=I;a[g+1>>0]=I>>8;a[g+2>>0]=I>>16;a[g+3>>0]=I>>24;g=(c[l>>2]|0)+(o&255)|0;c[l>>2]=g;o=s+-1|0}if(o>>>0>=3){q=o+-3|0;o=c[14452+(q<<2)>>2]|0;q=5640+(q<<3)|0;p=c[q>>2]|0;q=c[q+4>>2]|0;r=m+(g>>>3)|0;I=bc(p|0,q|0,o|0)|0;if(!((I|0)==0&(C|0)==0)){g=112;break}I=d[r>>0]|0;H=cc(p|0,q|0,g&7|0)|0;t=C;H=I|H;g=r;I=g;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;g=g+4|0;a[g>>0]=t;a[g+1>>0]=t>>8;a[g+2>>0]=t>>16;a[g+3>>0]=t>>24;g=(c[l>>2]|0)+o|0;c[l>>2]=g;t=u;continue}t=u&255;s=404394+t|0;t=14380+(t<<2)|0;while(1){if(!o){t=u;continue c}p=a[s>>0]|0;q=c[t>>2]|0;r=m+(g>>>3)|0;I=bc(q|0,0,p&255|0)|0;if(!((I|0)==0&(C|0)==0)){g=109;break c}I=d[r>>0]|0;e=cc(q|0,0,g&7|0)|0;H=C;e=I|e;I=r;k=I;a[k>>0]=e;a[k+1>>0]=e>>8;a[k+2>>0]=e>>16;a[k+3>>0]=e>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;I=(c[l>>2]|0)+(p&255)|0;c[l>>2]=I;g=I;o=o+-1|0}}if((g|0)==99)pa(406196,406218,54,406251);else if((g|0)==103)pa(406196,406218,54,406251);else if((g|0)==109)pa(406196,406218,54,406251);else if((g|0)==112)pa(406196,406218,54,406251);else if((g|0)==114){i=G;return}}I=cc(1,0,x|0)|0;n=C;I=w|I;g=v;o=g;a[o>>0]=I;a[o+1>>0]=I>>8;a[o+2>>0]=I>>16;a[o+3>>0]=I>>24;g=g+4|0;a[g>>0]=n;a[g+1>>0]=n>>8;a[g+2>>0]=n>>16;a[g+3>>0]=n>>24;g=(c[l>>2]|0)+2|0;c[l>>2]=g;n=E+-1|0;o=m+(g>>>3)|0;if(!((n&-4|0)==0&0==0))pa(406196,406218,54,406251);t=d[o>>0]|0;I=cc(n|0,0,g&7|0)|0;p=C;I=t|I;t=o;r=t;a[r>>0]=I;a[r+1>>0]=I>>8;a[r+2>>0]=I>>16;a[r+3>>0]=I>>24;t=t+4|0;a[t>>0]=p;a[t+1>>0]=p>>8;a[t+2>>0]=p>>16;a[t+3>>0]=p>>24;t=(c[l>>2]|0)+2|0;c[l>>2]=t;p=E+-1|0;r=0;while(1){if((r|0)==(E|0))break;q=F+(r<<2)|0;g=r;while(1){s=g+1|0;if((g|0)==(p|0))break;g=F+(s<<2)|0;n=c[g>>2]|0;o=c[q>>2]|0;if((d[j+n>>0]|0)>=(d[j+o>>0]|0)){g=s;continue}c[g>>2]=o;c[q>>2]=n;g=s}r=r+1|0}switch(E|0){case 2:{g=c[F>>2]|0;n=m+(t>>>3)|0;o=d[n>>0]|0;if(!((bc(g|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(h>>>0>=57)pa(406267,406218,55,406251);I=cc(g|0,0,t&7|0)|0;g=C;I=o|I;o=n;n=o;a[n>>0]=I;a[n+1>>0]=I>>8;a[n+2>>0]=I>>16;a[n+3>>0]=I>>24;o=o+4|0;a[o>>0]=g;a[o+1>>0]=g>>8;a[o+2>>0]=g>>16;a[o+3>>0]=g>>24;o=(c[l>>2]|0)+h|0;c[l>>2]=o;n=c[F+4>>2]|0;g=m+(o>>>3)|0;if(!((bc(n|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);I=d[g>>0]|0;F=cc(n|0,0,o&7|0)|0;H=C;F=I|F;I=g;m=I;a[m>>0]=F;a[m+1>>0]=F>>8;a[m+2>>0]=F>>16;a[m+3>>0]=F>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;c[l>>2]=(c[l>>2]|0)+h;i=G;return}case 3:{g=c[F>>2]|0;n=m+(t>>>3)|0;o=d[n>>0]|0;if(!((bc(g|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(h>>>0>=57)pa(406267,406218,55,406251);g=cc(g|0,0,t&7|0)|0;I=C;o=o|g;g=n;n=g;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;g=g+4|0;a[g>>0]=I;a[g+1>>0]=I>>8;a[g+2>>0]=I>>16;a[g+3>>0]=I>>24;g=(c[l>>2]|0)+h|0;c[l>>2]=g;n=c[F+4>>2]|0;o=m+(g>>>3)|0;if(!((bc(n|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);H=d[o>>0]|0;I=cc(n|0,0,g&7|0)|0;n=C;I=H|I;g=o;a[g>>0]=I;a[g+1>>0]=I>>8;a[g+2>>0]=I>>16;a[g+3>>0]=I>>24;o=o+4|0;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;o=(c[l>>2]|0)+h|0;c[l>>2]=o;n=c[F+8>>2]|0;g=m+(o>>>3)|0;if(!((bc(n|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);I=d[g>>0]|0;F=cc(n|0,0,o&7|0)|0;H=C;F=I|F;I=g;m=I;a[m>>0]=F;a[m+1>>0]=F>>8;a[m+2>>0]=F>>16;a[m+3>>0]=F>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;c[l>>2]=(c[l>>2]|0)+h;i=G;return}default:{p=c[F>>2]|0;g=m+(t>>>3)|0;n=d[g>>0]|0;if(!((bc(p|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(h>>>0>=57)pa(406267,406218,55,406251);I=cc(p|0,0,t&7|0)|0;o=C;I=n|I;n=g;a[n>>0]=I;a[n+1>>0]=I>>8;a[n+2>>0]=I>>16;a[n+3>>0]=I>>24;g=g+4|0;a[g>>0]=o;a[g+1>>0]=o>>8;a[g+2>>0]=o>>16;a[g+3>>0]=o>>24;g=(c[l>>2]|0)+h|0;c[l>>2]=g;n=c[F+4>>2]|0;o=m+(g>>>3)|0;if(!((bc(n|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);H=d[o>>0]|0;I=cc(n|0,0,g&7|0)|0;n=C;I=H|I;g=o;o=g;a[o>>0]=I;a[o+1>>0]=I>>8;a[o+2>>0]=I>>16;a[o+3>>0]=I>>24;g=g+4|0;a[g>>0]=n;a[g+1>>0]=n>>8;a[g+2>>0]=n>>16;a[g+3>>0]=n>>24;g=(c[l>>2]|0)+h|0;c[l>>2]=g;n=c[F+8>>2]|0;o=m+(g>>>3)|0;if(!((bc(n|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);H=d[o>>0]|0;I=cc(n|0,0,g&7|0)|0;g=C;I=H|I;n=o;a[n>>0]=I;a[n+1>>0]=I>>8;a[n+2>>0]=I>>16;a[n+3>>0]=I>>24;o=o+4|0;a[o>>0]=g;a[o+1>>0]=g>>8;a[o+2>>0]=g>>16;a[o+3>>0]=g>>24;o=(c[l>>2]|0)+h|0;c[l>>2]=o;g=c[F+12>>2]|0;n=m+(o>>>3)|0;if(!((bc(g|0,0,h|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);H=d[n>>0]|0;E=cc(g|0,0,o&7|0)|0;I=C;E=H|E;H=n;F=H;a[F>>0]=E;a[F+1>>0]=E>>8;a[F+2>>0]=E>>16;a[F+3>>0]=E>>24;H=H+4|0;a[H>>0]=I;a[H+1>>0]=I>>8;a[H+2>>0]=I>>16;a[H+3>>0]=I>>24;H=(c[l>>2]|0)+h|0;c[l>>2]=H;I=m+(H>>>3)|0;h=d[I>>0]|0;m=cc((a[j+p>>0]|0)==1|0,0,H&7|0)|0;H=C;m=h|m;h=I;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;c[l>>2]=(c[l>>2]|0)+1;i=G;return}}}function ab(b,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;T=i;i=i+2704|0;S=T+1800|0;Q=T+900|0;R=T;db(l,g,s,t);P=b+8|0;y=sa[c[b>>2]&1](c[P>>2]|0,11272)|0;if(!y)oa(1);M=c[r>>2]|0;N=c[r+8>>2]|0;g=c[r+12>>2]|0;O=c[r+4>>2]|0;c[S>>2]=256;c[S+4>>2]=M;c[S+8>>2]=N;c[S+12>>2]=g;c[S+16>>2]=O;c[S+20>>2]=1;c[S+24>>2]=0;c[S+880>>2]=0;if(!O)g=0;else g=c[g>>2]|0;c[S+884>>2]=g;c[S+888>>2]=0;N=S+892|0;c[N>>2]=0;O=S+896|0;c[O>>2]=0;K=c[r+24>>2]|0;L=c[r+32>>2]|0;g=c[r+36>>2]|0;M=c[r+28>>2]|0;c[Q>>2]=704;c[Q+4>>2]=K;c[Q+8>>2]=L;c[Q+12>>2]=g;c[Q+16>>2]=M;c[Q+20>>2]=1;c[Q+24>>2]=0;c[Q+880>>2]=0;if(!M)g=0;else g=c[g>>2]|0;c[Q+884>>2]=g;c[Q+888>>2]=0;L=Q+892|0;c[L>>2]=0;M=Q+896|0;c[M>>2]=0;I=c[r+48>>2]|0;J=c[r+56>>2]|0;g=c[r+60>>2]|0;K=c[r+52>>2]|0;c[R>>2]=m+16+(48<>2]=I;c[R+8>>2]=J;c[R+12>>2]=g;c[R+16>>2]=K;c[R+20>>2]=1;c[R+24>>2]=0;c[R+880>>2]=0;if(!K)g=0;else g=c[g>>2]|0;c[R+884>>2]=g;c[R+888>>2]=0;J=R+892|0;c[J>>2]=0;K=R+896|0;c[K>>2]=0;eb(S,y,s,t);eb(Q,y,s,t);eb(R,y,s,t);g=c[s>>2]|0;u=t+(g>>>3)|0;v=d[u>>0]|0;if(!((n&-4|0)==0&0==0))pa(406196,406218,54,406251);w=cc(n|0,0,g&7|0)|0;g=C;v=v|w;w=u;u=w;a[u>>0]=v;a[u+1>>0]=v>>8;a[u+2>>0]=v>>16;a[u+3>>0]=v>>24;w=w+4|0;a[w>>0]=g;a[w+1>>0]=g>>8;a[w+2>>0]=g>>16;a[w+3>>0]=g>>24;w=(c[s>>2]|0)+2|0;c[s>>2]=w;g=m>>>n;u=t+(w>>>3)|0;v=d[u>>0]|0;if(!((g&-16|0)==0&0==0))pa(406196,406218,54,406251);I=cc(g|0,0,w&7|0)|0;g=C;I=v|I;n=u;a[n>>0]=I;a[n+1>>0]=I>>8;a[n+2>>0]=I>>16;a[n+3>>0]=I>>24;u=u+4|0;a[u>>0]=g;a[u+1>>0]=g>>8;a[u+2>>0]=g>>16;a[u+3>>0]=g>>24;u=(c[s>>2]|0)+4|0;c[s>>2]=u;g=(o&-4|0)==0&0==0;n=0;while(1){if(n>>>0>=(c[r>>2]|0)>>>0)break;v=t+(u>>>3)|0;w=d[v>>0]|0;if(!g){x=16;break}F=cc(o|0,0,u&7|0)|0;H=C;F=w|F;I=v;G=I;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;I=I+4|0;a[I>>0]=H;a[I+1>>0]=H>>8;a[I+2>>0]=H>>16;a[I+3>>0]=H>>24;I=(c[s>>2]|0)+2|0;c[s>>2]=I;u=I;n=n+1|0}if((x|0)==16)pa(406196,406218,54,406251);I=r+76|0;g=c[I>>2]|0;v=r+92|0;u=c[v>>2]|0;if(!g)fb(u,6,y,s,t);else gb(b,c[r+72>>2]|0,g,u,y,s,t);H=r+84|0;g=c[H>>2]|0;m=r+108|0;u=c[m>>2]|0;if(!g)fb(u,2,y,s,t);else gb(b,c[r+80>>2]|0,g,u,y,s,t);w=c[r+88>>2]|0;v=c[v>>2]|0;n=c[S>>2]|0;g=_(v,n)|0;u=sa[c[b>>2]&1](c[P>>2]|0,g)|0;if(!u)oa(1);c[N>>2]=u;g=sa[c[b>>2]&1](c[P>>2]|0,g<<1)|0;if(!g)oa(1);c[O>>2]=g;g=w;u=0;while(1){if((u|0)==(v|0))break;G=_(u,n)|0;kb(g+(u*1040|0)|0,n,y,(c[N>>2]|0)+G|0,(c[O>>2]|0)+(G<<1)|0,s,t);u=u+1|0}v=c[r+96>>2]|0;w=c[r+100>>2]|0;n=c[Q>>2]|0;g=_(w,n)|0;u=sa[c[b>>2]&1](c[P>>2]|0,g)|0;if(!u)oa(1);c[L>>2]=u;g=sa[c[b>>2]&1](c[P>>2]|0,g<<1)|0;if(!g)oa(1);c[M>>2]=g;g=v;u=0;while(1){if((u|0)==(w|0))break;G=_(u,n)|0;kb(g+(u*2832|0)|0,n,y,(c[L>>2]|0)+G|0,(c[M>>2]|0)+(G<<1)|0,s,t);u=u+1|0}v=c[r+104>>2]|0;w=c[m>>2]|0;n=c[R>>2]|0;g=_(w,n)|0;u=sa[c[b>>2]&1](c[P>>2]|0,g)|0;if(!u)oa(1);c[J>>2]=u;g=sa[c[b>>2]&1](c[P>>2]|0,g<<1)|0;if(!g)oa(1);c[K>>2]=g;g=v;u=0;while(1){if((u|0)==(w|0))break;G=_(u,n)|0;kb(g+(u*2096|0)|0,n,y,(c[J>>2]|0)+G|0,(c[K>>2]|0)+(G<<1)|0,s,t);u=u+1|0}G=b+4|0;ra[c[G>>2]&1](c[P>>2]|0,y);F=r+80|0;E=r+72|0;u=j;g=k;D=0;a:while(1){if(D>>>0>=q>>>0){x=87;break}b=c[p+(D<<4)>>2]|0;n=c[p+(D<<4)+4>>2]|0;B=c[p+(D<<4)+8>>2]|0;k=c[p+(D<<4)+12>>2]|0;j=k&65535;A=k>>>16;z=k&65535;hb(Q,z,s,t);r=n&16777215;n=r^n>>>24;do if(b>>>0<6)w=b;else{if(b>>>0<130){y=b+-2|0;w=((aa(y|0)|0)^31)+-1|0;w=(w<<1)+(y>>>w)+2|0;break}if(b>>>0<2114){w=((aa(b+-66|0)|0)^31)+10|0;break}if(b>>>0<6210){w=21;break}w=b>>>0<22594?22:23}while(0);do if(n>>>0<10)v=n+65534|0;else{if(n>>>0<134){y=n+-6|0;v=((aa(y|0)|0)^31)+-1|0;v=(v<<1)+(y>>>v)+4|0;break}if(n>>>0>=2118){v=23;break}v=((aa(n+-70|0)|0)^31)+12|0}while(0);w=w&65535;x=c[17268+(w<<2)>>2]|0;w=b-(c[18788+(w<<2)>>2]|0)|0;m=v&65535;n=cc(n-(c[17364+(m<<2)>>2]|0)|0,0,x|0)|0;v=C;w=n|w;n=x+(c[17460+(m<<2)>>2]|0)|0;m=c[s>>2]|0;x=t+(m>>>3)|0;y=d[x>>0]|0;U=bc(w|0,v|0,n|0)|0;if(!((U|0)==0&(C|0)==0)){x=61;break}if(n>>>0>=57){x=63;break}w=cc(w|0,v|0,m&7|0)|0;m=C;w=y|w;U=x;y=U;a[y>>0]=w;a[y+1>>0]=w>>8;a[y+2>>0]=w>>16;a[y+3>>0]=w>>24;U=U+4|0;a[U>>0]=m;a[U+1>>0]=m>>8;a[U+2>>0]=m>>16;a[U+3>>0]=m>>24;c[s>>2]=(c[s>>2]|0)+n;b:do if(!(c[I>>2]|0)){v=f;w=b;while(1){if(!w)break b;hb(S,d[e+(v&h)>>0]|0,s,t);v=v+1|0;w=w+-1|0}}else{v=f;w=b;while(1){if(!w)break b;switch(o|0){case 0:{g=u&63;break}case 1:{g=(u&255)>>>2;break}case 2:{g=a[406969+(u&255)>>0]|a[406969+(g&255|256)>>0];break}case 3:{g=((d[407481+(u&255)>>0]|0)<<3)+(d[407481+(g&255)>>0]|0)&255;break}default:g=0}U=a[e+(v&h)>>0]|0;ib(S,U&255,g&255,c[E>>2]|0,s,t,6);g=u;u=U;v=v+1|0;w=w+-1|0}}while(0);y=f+b+r|0;do if(r){g=a[e+(y+-2&h)>>0]|0;u=a[e+(y+-1&h)>>0]|0;if((j&65535)<=127)break;m=B>>>24;x=B&16777215;if(!(c[H>>2]|0))hb(R,A,s,t);else{v=k&7;switch(z>>>6|0){case 7:case 4:case 2:case 0:{v=v>>>0<3?v:3;break}default:v=3}ib(R,A,v,c[F>>2]|0,s,t,2)}v=c[s>>2]|0;w=t+(v>>>3)|0;n=d[w>>0]|0;U=bc(x|0,0,m|0)|0;if(!((U|0)==0&(C|0)==0)){x=82;break a}if(B>>>0>=956301312){x=84;break a}z=cc(x|0,0,v&7|0)|0;B=C;z=n|z;U=w;A=U;a[A>>0]=z;a[A+1>>0]=z>>8;a[A+2>>0]=z>>16;a[A+3>>0]=z>>24;U=U+4|0;a[U>>0]=B;a[U+1>>0]=B>>8;a[U+2>>0]=B>>16;a[U+3>>0]=B>>24;c[s>>2]=(c[s>>2]|0)+m}while(0);f=y;D=D+1|0}if((x|0)==61)pa(406196,406218,54,406251);else if((x|0)==63)pa(406267,406218,55,406251);else if((x|0)==82)pa(406196,406218,54,406251);else if((x|0)==84)pa(406267,406218,55,406251);else if((x|0)==87){ra[c[G>>2]&1](c[P>>2]|0,c[J>>2]|0);c[J>>2]=0;ra[c[G>>2]&1](c[P>>2]|0,c[K>>2]|0);c[K>>2]=0;ra[c[G>>2]&1](c[P>>2]|0,c[L>>2]|0);c[L>>2]=0;ra[c[G>>2]&1](c[P>>2]|0,c[M>>2]|0);c[M>>2]=0;ra[c[G>>2]&1](c[P>>2]|0,c[N>>2]|0);c[N>>2]=0;ra[c[G>>2]&1](c[P>>2]|0,c[O>>2]|0);c[O>>2]=0;if(!l){i=T;return}U=(c[s>>2]|0)+7|0;c[s>>2]=U&-8;a[t+(U>>>3)>>0]=0;i=T;return}}function bb(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+32|0;r=t+8|0;q=t+16|0;l=t;s=f&g;f=k+((c[j>>2]|0)>>>3)|0;n=d[f>>0]|0;m=f;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;f=f+4|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;c[j>>2]=(c[j>>2]|0)+1;mb(h,r,q,l);f=c[l>>2]|0;l=c[l+4>>2]|0;m=c[j>>2]|0;n=k+(m>>>3)|0;o=d[n>>0]|0;if(!(l>>>0<0|(l|0)==0&f>>>0<4))pa(406196,406218,54,406251);f=cc(f|0,l|0,m&7|0)|0;l=C;f=o|f;p=n;o=p;a[o>>0]=f;a[o+1>>0]=f>>8;a[o+2>>0]=f>>16;a[o+3>>0]=f>>24;p=p+4|0;a[p>>0]=l;a[p+1>>0]=l>>8;a[p+2>>0]=l>>16;a[p+3>>0]=l>>24;p=(c[j>>2]|0)+2|0;c[j>>2]=p;o=c[q>>2]|0;l=r;f=c[l>>2]|0;l=c[l+4>>2]|0;m=k+(p>>>3)|0;n=d[m>>0]|0;r=bc(f|0,l|0,o|0)|0;if(!((r|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(o>>>0>=57)pa(406267,406218,55,406251);r=cc(f|0,l|0,p&7|0)|0;f=C;r=n|r;p=m;q=p;a[q>>0]=r;a[q+1>>0]=r>>8;a[q+2>>0]=r>>16;a[q+3>>0]=r>>24;p=p+4|0;a[p>>0]=f;a[p+1>>0]=f>>8;a[p+2>>0]=f>>16;a[p+3>>0]=f>>24;p=(c[j>>2]|0)+o|0;c[j>>2]=p;f=k+(p>>>3)|0;q=d[f>>0]|0;p=cc(1,0,p&7|0)|0;r=C;p=q|p;q=f;a[q>>0]=p;a[q+1>>0]=p>>8;a[q+2>>0]=p>>16;a[q+3>>0]=p>>24;f=f+4|0;a[f>>0]=r;a[f+1>>0]=r>>8;a[f+2>>0]=r>>16;a[f+3>>0]=r>>24;c[j>>2]=(c[j>>2]|0)+1;f=(c[j>>2]|0)+7|0;c[j>>2]=f&-8;a[k+(f>>>3)>>0]=0;f=g+1|0;if((s+h|0)>>>0>f>>>0){f=f-s|0;dc(k+((c[j>>2]|0)>>>3)|0,e+s|0,f|0)|0;l=(c[j>>2]|0)+(f<<3)|0;c[j>>2]=l;h=h-f|0;f=0}else{l=c[j>>2]|0;f=s}dc(k+(l>>>3)|0,e+f|0,h|0)|0;f=(c[j>>2]|0)+(h<<3)|0;c[j>>2]=f;if(f&7)pa(405180,406218,82,405195);a[k+(f>>>3)>>0]=0;if(!b){i=t;return}e=c[j>>2]|0;g=k+(e>>>3)|0;s=d[g>>0]|0;e=cc(1,0,e&7|0)|0;b=C;e=s|e;s=g;a[s>>0]=e;a[s+1>>0]=e>>8;a[s+2>>0]=e>>16;a[s+3>>0]=e>>24;g=g+4|0;a[g>>0]=b;a[g+1>>0]=b>>8;a[g+2>>0]=b>>16;a[g+3>>0]=b>>24;g=(c[j>>2]|0)+1|0;c[j>>2]=g;b=k+(g>>>3)|0;s=d[b>>0]|0;g=cc(1,0,g&7|0)|0;e=C;g=s|g;s=b;a[s>>0]=g;a[s+1>>0]=g>>8;a[s+2>>0]=g>>16;a[s+3>>0]=g>>24;b=b+4|0;a[b>>0]=e;a[b+1>>0]=e>>8;a[b+2>>0]=e>>16;a[b+3>>0]=e>>24;b=(c[j>>2]|0)+8|0;c[j>>2]=b&-8;a[k+(b>>>3)>>0]=0;i=t;return}function cb(a,b){a=a|0;b=b|0;return a>>>0>>0|0}function db(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;o=p+8|0;n=p+16|0;j=p;h=g+((c[f>>2]|0)>>>3)|0;l=d[h>>0]|0;k=cc(b&1|0,0,c[f>>2]&7|0)|0;m=C;k=l|k;l=h;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;h=h+4|0;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;h=(c[f>>2]|0)+1|0;c[f>>2]=h;if(b){m=g+(h>>>3)|0;k=d[m>>0]|0;l=m;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;c[f>>2]=(c[f>>2]|0)+1}mb(e,o,n,j);e=j;h=c[e>>2]|0;e=c[e+4>>2]|0;j=c[f>>2]|0;k=g+(j>>>3)|0;l=d[k>>0]|0;if(!(e>>>0<0|(e|0)==0&h>>>0<4))pa(406196,406218,54,406251);h=cc(h|0,e|0,j&7|0)|0;e=C;h=l|h;m=k;l=m;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;m=m+4|0;a[m>>0]=e;a[m+1>>0]=e>>8;a[m+2>>0]=e>>16;a[m+3>>0]=e>>24;m=(c[f>>2]|0)+2|0;c[f>>2]=m;l=c[n>>2]|0;e=o;h=c[e>>2]|0;e=c[e+4>>2]|0;j=g+(m>>>3)|0;k=d[j>>0]|0;o=bc(h|0,e|0,l|0)|0;if(!((o|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(l>>>0>=57)pa(406267,406218,55,406251);m=cc(h|0,e|0,m&7|0)|0;o=C;m=k|m;h=j;n=h;a[n>>0]=m;a[n+1>>0]=m>>8;a[n+2>>0]=m>>16;a[n+3>>0]=m>>24;h=h+4|0;a[h>>0]=o;a[h+1>>0]=o>>8;a[h+2>>0]=o>>16;a[h+3>>0]=o>>24;h=(c[f>>2]|0)+l|0;c[f>>2]=h;if(b){i=p;return}g=g+(h>>>3)|0;o=d[g>>0]|0;b=g;a[b>>0]=o;a[b+1>>0]=o>>8;a[b+2>>0]=o>>16;a[b+3>>0]=o>>24;g=g+4|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;c[f>>2]=(c[f>>2]|0)+1;i=p;return}function eb(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+1136|0;u=v+104|0;t=v;j=c[b+8>>2]|0;m=c[b+12>>2]|0;r=c[b+16>>2]|0;s=c[b+4>>2]|0;ac(u|0,0,(s<<2)+8|0)|0;k=t;l=k+104|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));p=0;q=1;k=0;while(1){if((p|0)==(r|0))break;o=d[j+p>>0]|0;if((o|0)==(q+1|0))k=1;else k=(o|0)==(k|0)?0:o+2|0;if(p){n=u+(k<<2)|0;c[n>>2]=(c[n>>2]|0)+1}k=c[m+(p<<2)>>2]|0;if(k>>>0>176)n=k>>>0>752?20:14;else n=k>>>0>40?7:0;while(1){if(n>>>0>=25)break;l=n+1|0;if(k>>>0<(c[17556+(l<<3)>>2]|0)>>>0)break;else n=l}k=t+(n<<2)|0;c[k>>2]=(c[k>>2]|0)+1;k=q;p=p+1|0;q=o}nb(s+-1|0,g,h);if(s>>>0<=1){i=v;return}r=b+20|0;kb(u,s+2|0,f,b+28|0,b+286|0,g,h);kb(t,26,f,b+802|0,b+828|0,g,h);k=c[m>>2]|0;u=d[j>>0]|0;c[b+24>>2]=c[r>>2];c[r>>2]=u;if(k>>>0>176)l=k>>>0>752?20:14;else l=k>>>0>40?7:0;while(1){if(l>>>0>=25)break;j=l+1|0;if(k>>>0<(c[17556+(j<<3)>>2]|0)>>>0)break;else l=j}p=c[17556+(l<<3)+4>>2]|0;o=k-(c[17556+(l<<3)>>2]|0)|0;n=a[b+802+l>>0]|0;j=e[b+828+(l<<1)>>1]|0;k=c[g>>2]|0;l=h+(k>>>3)|0;m=d[l>>0]|0;b=bc(j|0,0,n&255|0)|0;if(!((b|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((n&255)>=57)pa(406267,406218,55,406251);b=cc(j|0,0,k&7|0)|0;j=C;b=m|b;k=l;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;l=l+4|0;a[l>>0]=j;a[l+1>>0]=j>>8;a[l+2>>0]=j>>16;a[l+3>>0]=j>>24;l=(c[g>>2]|0)+(n&255)|0;c[g>>2]=l;j=h+(l>>>3)|0;k=d[j>>0]|0;h=bc(o|0,0,p|0)|0;if(!((h|0)==0&(C|0)==0))pa(406196,406218,54,406251);f=cc(o|0,0,l&7|0)|0;b=C;f=k|f;h=j;u=h;a[u>>0]=f;a[u+1>>0]=f>>8;a[u+2>>0]=f>>16;a[u+3>>0]=f>>24;h=h+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;c[g>>2]=(c[g>>2]|0)+p;i=v;return}function fb(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=i;i=i+1904|0;p=x;w=x+1632|0;v=x+1088|0;nb(b+-1|0,h,j);if(b>>>0<=1){i=x;return}t=f+-1|0;u=(1<>2]|0;k=j+(n>>>3)|0;m=d[k>>0]|0;n=cc(1,0,n&7|0)|0;l=C;n=m|n;m=k;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;k=k+4|0;a[k>>0]=l;a[k+1>>0]=l>>8;a[k+2>>0]=l>>16;a[k+3>>0]=l>>24;k=(c[h>>2]|0)+1|0;c[h>>2]=k;l=f+-2|0;m=j+(k>>>3)|0;n=d[m>>0]|0;if(!((l&-16|0)==0&0==0))pa(406196,406218,54,406251);q=cc(l|0,0,k&7|0)|0;s=C;q=n|q;k=m;r=k;a[r>>0]=q;a[r+1>>0]=q>>8;a[r+2>>0]=q>>16;a[r+3>>0]=q>>24;k=k+4|0;a[k>>0]=s;a[k+1>>0]=s>>8;a[k+2>>0]=s>>16;a[k+3>>0]=s>>24;c[h>>2]=(c[h>>2]|0)+4;c[p+(t<<2)>>2]=b;c[p>>2]=1;k=f;while(1){if(k>>>0>=o>>>0)break;c[p+(k<<2)>>2]=1;k=k+1|0}kb(p,o,g,w,v,h,j);p=w+t|0;g=v+(t<<1)|0;q=bc(u|0,0,t|0)|0;q=(q|0)==0&(C|0)==0;r=t>>>0<57;s=0;while(1){if(s>>>0>=b>>>0){k=22;break}l=(s|0)==0?0:s+f+-1|0;k=a[w+l>>0]|0;l=e[v+(l<<1)>>1]|0;m=c[h>>2]|0;n=j+(m>>>3)|0;o=d[n>>0]|0;y=bc(l|0,0,k&255|0)|0;if(!((y|0)==0&(C|0)==0)){k=10;break}if((k&255)>=57){k=12;break}l=cc(l|0,0,m&7|0)|0;m=C;o=o|l;l=n;n=l;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;l=l+4|0;a[l>>0]=m;a[l+1>>0]=m>>8;a[l+2>>0]=m>>16;a[l+3>>0]=m>>24;k=(c[h>>2]|0)+(k&255)|0;c[h>>2]=k;l=a[p>>0]|0;m=e[g>>1]|0;n=j+(k>>>3)|0;o=d[n>>0]|0;y=bc(m|0,0,l&255|0)|0;if(!((y|0)==0&(C|0)==0)){k=14;break}if((l&255)>=57){k=16;break}k=cc(m|0,0,k&7|0)|0;m=C;o=o|k;k=n;y=k;a[y>>0]=o;a[y+1>>0]=o>>8;a[y+2>>0]=o>>16;a[y+3>>0]=o>>24;k=k+4|0;a[k>>0]=m;a[k+1>>0]=m>>8;a[k+2>>0]=m>>16;a[k+3>>0]=m>>24;k=(c[h>>2]|0)+(l&255)|0;c[h>>2]=k;l=j+(k>>>3)|0;m=d[l>>0]|0;if(!q){k=18;break}if(!r){k=20;break}y=cc(u|0,0,k&7|0)|0;o=C;m=m|y;y=l;n=y;a[n>>0]=m;a[n+1>>0]=m>>8;a[n+2>>0]=m>>16;a[n+3>>0]=m>>24;y=y+4|0;a[y>>0]=o;a[y+1>>0]=o>>8;a[y+2>>0]=o>>16;a[y+3>>0]=o>>24;c[h>>2]=(c[h>>2]|0)+t;s=s+1|0}if((k|0)==10)pa(406196,406218,54,406251);else if((k|0)==12)pa(406267,406218,55,406251);else if((k|0)==14)pa(406196,406218,54,406251);else if((k|0)==16)pa(406267,406218,55,406251);else if((k|0)==18)pa(406196,406218,54,406251);else if((k|0)==20)pa(406267,406218,55,406251);else if((k|0)==22){w=c[h>>2]|0;y=j+(w>>>3)|0;b=d[y>>0]|0;w=cc(1,0,w&7|0)|0;j=C;w=b|w;b=y;a[b>>0]=w;a[b+1>>0]=w>>8;a[b+2>>0]=w>>16;a[b+3>>0]=w>>24;y=y+4|0;a[y>>0]=j;a[y+1>>0]=j>>8;a[y+2>>0]=j>>16;a[y+3>>0]=j>>24;c[h>>2]=(c[h>>2]|0)+1;i=x;return}}function gb(b,f,g,h,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+2160|0;r=B+1088|0;v=B;A=B+1888|0;z=B+1344|0;nb(h+-1|0,k,l);if((h|0)==1){i=B;return}x=b+8|0;y=sa[c[b>>2]&1](c[x>>2]|0,g<<2)|0;if(!y)oa(1);a:do if(!g)w=y;else{m=c[f>>2]|0;n=1;while(1){if((n|0)==(g|0))break;u=c[f+(n<<2)>>2]|0;m=u>>>0>m>>>0?u:m;n=n+1|0}if(m>>>0<256)o=0;else pa(405316,404333,616,405333);while(1){if(o>>>0>m>>>0)break;a[r+o>>0]=o;o=o+1|0}p=m+1|0;q=0;b:while(1){if(q>>>0>=g>>>0){w=y;break a}m=c[f+(q<<2)>>2]&255;o=0;while(1){if(o>>>0>=p>>>0)break b;if((a[r+o>>0]|0)==m<<24>>24)break;o=o+1|0}c[y+(q<<2)>>2]=o;n=a[r+o>>0]|0;m=o;while(1){if(!m)break;u=m+-1|0;a[r+m>>0]=a[r+u>>0]|0;m=u}a[r>>0]=n;q=q+1|0}pa(405354,404333,624,405333)}while(0);c[r>>2]=0;m=0;o=0;while(1){if(m>>>0>=g>>>0)break;while(1){if(m>>>0>=g>>>0){n=0;break}if(!(c[w+(m<<2)>>2]|0)){n=0;break}u=m+1|0;c[r>>2]=u;m=u}while(1){if(m>>>0>=g>>>0)break;if(c[w+(m<<2)>>2]|0)break;u=m+1|0;c[r>>2]=u;m=u;n=n+1|0}o=n>>>0>o>>>0?n:o}if(!o)u=0;else{u=(aa(o|0)|0)^31;u=u>>>0<6?u:6}c[r>>2]=0;p=2<>>0>=g>>>0)break;if(s>>>0>o>>>0){t=38;break}m=c[w+(o<<2)>>2]|0;c:do if(!m){m=o;n=1;while(1){m=m+1|0;if(m>>>0>=g>>>0)break;if(c[w+(m<<2)>>2]|0)break;n=n+1|0}c[r>>2]=o+n;m=s;while(1){if(!n)break c;if(n>>>0

>>0)break;c[w+(m<<2)>>2]=q;m=m+1|0;n=n-f|0}s=(aa(n|0)|0)^31;c[w+(m<<2)>>2]=s|n-(1<>2]=m+u;c[r>>2]=(c[r>>2]|0)+1;m=s+1|0}while(0);o=c[r>>2]|0;s=m}if((t|0)==38)pa(405282,404333,656,405297);ac(v|0,0,1088)|0;m=0;while(1){if((m|0)==(s|0))break;t=v+((c[w+(m<<2)>>2]&511)<<2)|0;c[t>>2]=(c[t>>2]|0)+1;m=m+1|0}t=(u|0)!=0;f=c[k>>2]|0;m=l+(f>>>3)|0;g=d[m>>0]|0;f=cc(t&1|0,0,f&7|0)|0;r=C;f=g|f;g=m;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;m=m+4|0;a[m>>0]=r;a[m+1>>0]=r>>8;a[m+2>>0]=r>>16;a[m+3>>0]=r>>24;m=(c[k>>2]|0)+1|0;c[k>>2]=m;do if(t){n=u+-1|0;o=l+(m>>>3)|0;p=d[o>>0]|0;if((n&-16|0)==0&0==0){f=cc(n|0,0,m&7|0)|0;r=C;f=p|f;t=o;g=t;a[g>>0]=f;a[g+1>>0]=f>>8;a[g+2>>0]=f>>16;a[g+3>>0]=f>>24;t=t+4|0;a[t>>0]=r;a[t+1>>0]=r>>8;a[t+2>>0]=r>>16;a[t+3>>0]=r>>24;c[k>>2]=(c[k>>2]|0)+4;break}else pa(406196,406218,54,406251)}while(0);kb(v,u+h|0,j,A,z,k,l);r=0;while(1){if(r>>>0>=s>>>0){t=70;break}g=c[w+(r<<2)>>2]|0;f=g&511;g=g>>>9;m=a[A+f>>0]|0;n=e[z+(f<<1)>>1]|0;o=c[k>>2]|0;p=l+(o>>>3)|0;q=d[p>>0]|0;j=bc(n|0,0,m&255|0)|0;if(!((j|0)==0&(C|0)==0)){t=60;break}if((m&255)>=57){t=62;break}t=cc(n|0,0,o&7|0)|0;h=C;t=q|t;j=p;v=j;a[v>>0]=t;a[v+1>>0]=t>>8;a[v+2>>0]=t>>16;a[v+3>>0]=t>>24;j=j+4|0;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;m=(c[k>>2]|0)+(m&255)|0;c[k>>2]=m;if(!((f|0)==0|f>>>0>u>>>0)){n=l+(m>>>3)|0;o=d[n>>0]|0;j=bc(g|0,0,f|0)|0;if(!((j|0)==0&(C|0)==0)){t=65;break}if(f>>>0>=57){t=67;break}t=cc(g|0,0,m&7|0)|0;h=C;t=o|t;j=n;v=j;a[v>>0]=t;a[v+1>>0]=t>>8;a[v+2>>0]=t>>16;a[v+3>>0]=t>>24;j=j+4|0;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;c[k>>2]=(c[k>>2]|0)+f}r=r+1|0}if((t|0)==60)pa(406196,406218,54,406251);else if((t|0)==62)pa(406267,406218,55,406251);else if((t|0)==65)pa(406196,406218,54,406251);else if((t|0)==67)pa(406267,406218,55,406251);else if((t|0)==70){w=c[k>>2]|0;l=l+(w>>>3)|0;z=d[l>>0]|0;w=cc(1,0,w&7|0)|0;A=C;w=z|w;z=l;a[z>>0]=w;a[z+1>>0]=w>>8;a[z+2>>0]=w>>16;a[z+3>>0]=w>>24;l=l+4|0;a[l>>0]=A;a[l+1>>0]=A>>8;a[l+2>>0]=A>>16;a[l+3>>0]=A>>24;c[k>>2]=(c[k>>2]|0)+1;ra[c[b+4>>2]&1](c[x>>2]|0,y);i=B;return}}function hb(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=b+884|0;i=c[s>>2]|0;do if(!i){p=b+880|0;j=(c[p>>2]|0)+1|0;c[p>>2]=j;p=c[(c[b+12>>2]|0)+(j<<2)>>2]|0;j=a[(c[b+8>>2]|0)+j>>0]|0;c[s>>2]=p;j=j&255;q=b+888|0;c[q>>2]=_(j,c[b>>2]|0)|0;k=b+20|0;l=c[k>>2]|0;i=b+24|0;if((j|0)==(l+1|0))m=1;else m=(j|0)==(c[i>>2]|0)?0:j+2|0;c[i>>2]=l;c[k>>2]=j;n=a[b+28+m>>0]|0;i=e[b+286+(m<<1)>>1]|0;j=c[g>>2]|0;k=h+(j>>>3)|0;l=d[k>>0]|0;o=bc(i|0,0,n&255|0)|0;if(!((o|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((n&255)>=57)pa(406267,406218,55,406251);j=cc(i|0,0,j&7|0)|0;m=C;j=l|j;o=k;l=o;a[l>>0]=j;a[l+1>>0]=j>>8;a[l+2>>0]=j>>16;a[l+3>>0]=j>>24;o=o+4|0;a[o>>0]=m;a[o+1>>0]=m>>8;a[o+2>>0]=m>>16;a[o+3>>0]=m>>24;c[g>>2]=(c[g>>2]|0)+(n&255);if(p>>>0>176)j=p>>>0>752?20:14;else j=p>>>0>40?7:0;while(1){if(j>>>0>=25)break;i=j+1|0;if(p>>>0<(c[17556+(i<<3)>>2]|0)>>>0)break;else j=i}o=c[17556+(j<<3)+4>>2]|0;n=p-(c[17556+(j<<3)>>2]|0)|0;m=a[b+802+j>>0]|0;i=e[b+828+(j<<1)>>1]|0;j=c[g>>2]|0;k=h+(j>>>3)|0;l=d[k>>0]|0;p=bc(i|0,0,m&255|0)|0;if(!((p|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((m&255)>=57)pa(406267,406218,55,406251);p=cc(i|0,0,j&7|0)|0;i=C;p=l|p;j=k;k=j;a[k>>0]=p;a[k+1>>0]=p>>8;a[k+2>>0]=p>>16;a[k+3>>0]=p>>24;j=j+4|0;a[j>>0]=i;a[j+1>>0]=i>>8;a[j+2>>0]=i>>16;a[j+3>>0]=i>>24;j=(c[g>>2]|0)+(m&255)|0;c[g>>2]=j;k=h+(j>>>3)|0;i=d[k>>0]|0;p=bc(n|0,0,o|0)|0;if((p|0)==0&(C|0)==0){n=cc(n|0,0,j&7|0)|0;t=C;n=i|n;r=k;p=r;a[p>>0]=n;a[p+1>>0]=n>>8;a[p+2>>0]=n>>16;a[p+3>>0]=n>>24;r=r+4|0;a[r>>0]=t;a[r+1>>0]=t>>8;a[r+2>>0]=t>>16;a[r+3>>0]=t>>24;c[g>>2]=(c[g>>2]|0)+o;r=q;t=c[s>>2]|0;break}else pa(406196,406218,54,406251)}else{r=b+888|0;t=i}while(0);c[s>>2]=t+-1;k=(c[r>>2]|0)+f|0;m=a[(c[b+892>>2]|0)+k>>0]|0;k=e[(c[b+896>>2]|0)+(k<<1)>>1]|0;l=c[g>>2]|0;i=h+(l>>>3)|0;j=d[i>>0]|0;h=bc(k|0,0,m&255|0)|0;if(!((h|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((m&255)<57){t=cc(k|0,0,l&7|0)|0;b=C;t=j|t;h=i;f=h;a[f>>0]=t;a[f+1>>0]=t>>8;a[f+2>>0]=t>>16;a[f+3>>0]=t>>24;h=h+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;c[g>>2]=(c[g>>2]|0)+(m&255);return}else pa(406267,406218,55,406251)}function ib(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=b+884|0;l=c[u>>2]|0;do if(!l){r=b+880|0;n=(c[r>>2]|0)+1|0;c[r>>2]=n;r=c[(c[b+12>>2]|0)+(n<<2)>>2]|0;n=a[(c[b+8>>2]|0)+n>>0]|0;c[u>>2]=r;n=n&255;s=b+888|0;c[s>>2]=n<>2]|0;l=b+24|0;if((n|0)==(m+1|0))o=1;else o=(n|0)==(c[l>>2]|0)?0:n+2|0;c[l>>2]=m;c[k>>2]=n;p=a[b+28+o>>0]|0;l=e[b+286+(o<<1)>>1]|0;k=c[i>>2]|0;m=j+(k>>>3)|0;n=d[m>>0]|0;q=bc(l|0,0,p&255|0)|0;if(!((q|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((p&255)>=57)pa(406267,406218,55,406251);k=cc(l|0,0,k&7|0)|0;o=C;k=n|k;q=m;n=q;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;q=q+4|0;a[q>>0]=o;a[q+1>>0]=o>>8;a[q+2>>0]=o>>16;a[q+3>>0]=o>>24;c[i>>2]=(c[i>>2]|0)+(p&255);if(r>>>0>176)k=r>>>0>752?20:14;else k=r>>>0>40?7:0;while(1){if(k>>>0>=25)break;l=k+1|0;if(r>>>0<(c[17556+(l<<3)>>2]|0)>>>0)break;else k=l}q=c[17556+(k<<3)+4>>2]|0;p=r-(c[17556+(k<<3)>>2]|0)|0;o=a[b+802+k>>0]|0;l=e[b+828+(k<<1)>>1]|0;k=c[i>>2]|0;m=j+(k>>>3)|0;n=d[m>>0]|0;r=bc(l|0,0,o&255|0)|0;if(!((r|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((o&255)>=57)pa(406267,406218,55,406251);r=cc(l|0,0,k&7|0)|0;k=C;r=n|r;l=m;m=l;a[m>>0]=r;a[m+1>>0]=r>>8;a[m+2>>0]=r>>16;a[m+3>>0]=r>>24;l=l+4|0;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;l=(c[i>>2]|0)+(o&255)|0;c[i>>2]=l;k=j+(l>>>3)|0;m=d[k>>0]|0;r=bc(p|0,0,q|0)|0;if((r|0)==0&(C|0)==0){p=cc(p|0,0,l&7|0)|0;v=C;p=m|p;t=k;r=t;a[r>>0]=p;a[r+1>>0]=p>>8;a[r+2>>0]=p>>16;a[r+3>>0]=p>>24;t=t+4|0;a[t>>0]=v;a[t+1>>0]=v>>8;a[t+2>>0]=v>>16;a[t+3>>0]=v>>24;c[i>>2]=(c[i>>2]|0)+q;t=s;v=c[u>>2]|0;break}else pa(406196,406218,54,406251)}else{t=b+888|0;v=l}while(0);c[u>>2]=v+-1;m=(_(c[h+((c[t>>2]|0)+g<<2)>>2]|0,c[b>>2]|0)|0)+f|0;o=a[(c[b+892>>2]|0)+m>>0]|0;m=e[(c[b+896>>2]|0)+(m<<1)>>1]|0;n=c[i>>2]|0;l=j+(n>>>3)|0;k=d[l>>0]|0;j=bc(m|0,0,o&255|0)|0;if(!((j|0)==0&(C|0)==0))pa(406196,406218,54,406251);if((o&255)<57){h=cc(m|0,0,n&7|0)|0;b=C;h=k|h;j=l;f=j;a[f>>0]=h;a[f+1>>0]=h>>8;a[f+2>>0]=h>>16;a[f+3>>0]=h>>24;j=j+4|0;a[j>>0]=b;a[j+1>>0]=b>>8;a[j+2>>0]=b>>16;a[j+3>>0]=b>>24;c[i>>2]=(c[i>>2]|0)+(o&255);return}else pa(406267,406218,55,406251)}function jb(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;r=i+2816|0;s=h+1024|0;t=j+2080|0;q=0;while(1){if((q|0)==(g|0))break;o=c[f+(q<<4)>>2]|0;k=c[f+(q<<4)+4>>2]|0;l=c[f+(q<<4)+12>>2]|0;p=l&65535;n=l>>>16;l=i+((l&65535)<<2)|0;c[l>>2]=(c[l>>2]|0)+1;c[r>>2]=(c[r>>2]|0)+1;l=b;m=o;while(1){if(!m)break;u=h+((d[a+(l&e)>>0]|0)<<2)|0;c[u>>2]=(c[u>>2]|0)+1;c[s>>2]=(c[s>>2]|0)+1;l=l+1|0;m=m+-1|0}k=k&16777215;if((k|0)!=0&(p&65535)>127){u=j+(n<<2)|0;c[u>>2]=(c[u>>2]|0)+1;c[t>>2]=(c[t>>2]|0)+1}b=b+o+k|0;q=q+1|0}return}function kb(e,f,g,h,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+16|0;q=s;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;p=0;n=0;while(1){if(n>>>0>=f>>>0)break;if(!(c[e+(n<<2)>>2]|0))m=p;else{if(p>>>0>=4){if(p>>>0>4)break}else c[q+(p<<2)>>2]=n;m=p+1|0}p=m;n=n+1|0}r=0;m=f+-1|0;while(1){if(!m)break;r=r+1|0;m=m>>>1}if(p>>>0<2){n=c[k>>2]|0;e=l+(n>>>3)|0;m=d[e>>0]|0;n=cc(1,0,n&7|0)|0;f=C;n=m|n;m=e;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;e=e+4|0;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;e=(c[k>>2]|0)+4|0;c[k>>2]=e;f=c[q>>2]|0;m=l+(e>>>3)|0;n=d[m>>0]|0;l=bc(f|0,0,r|0)|0;if(!((l|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(r>>>0>=57)pa(406267,406218,55,406251);g=cc(f|0,0,e&7|0)|0;p=C;g=n|g;l=m;o=l;a[o>>0]=g;a[o+1>>0]=g>>8;a[o+2>>0]=g>>16;a[o+3>>0]=g>>24;l=l+4|0;a[l>>0]=p;a[l+1>>0]=p>>8;a[l+2>>0]=p>>16;a[l+3>>0]=p>>24;c[k>>2]=(c[k>>2]|0)+r;a[h+(c[q>>2]|0)>>0]=0;b[j+(c[q>>2]<<1)>>1]=0;i=s;return}ac(h|0,0,f|0)|0;Hb(e,f,15,g,h);Jb(h,f,j);if(p>>>0>=5){_a(h,f,g,k,l);i=s;return}m=l+((c[k>>2]|0)>>>3)|0;e=d[m>>0]|0;f=cc(1,0,c[k>>2]&7|0)|0;n=C;f=e|f;e=m;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=(c[k>>2]|0)+2|0;c[k>>2]=m;n=p+-1|0;e=l+(m>>>3)|0;f=d[e>>0]|0;if(!((n&-4|0)==0&0==0))pa(406196,406218,54,406251);g=cc(n|0,0,m&7|0)|0;j=C;g=f|g;f=e;o=f;a[o>>0]=g;a[o+1>>0]=g>>8;a[o+2>>0]=g>>16;a[o+3>>0]=g>>24;f=f+4|0;a[f>>0]=j;a[f+1>>0]=j>>8;a[f+2>>0]=j>>16;a[f+3>>0]=j>>24;c[k>>2]=(c[k>>2]|0)+2;f=p+-1|0;j=0;while(1){if((j|0)==(p|0))break;g=q+(j<<2)|0;m=j;while(1){o=m+1|0;if((m|0)==(f|0))break;m=q+(o<<2)|0;n=c[m>>2]|0;e=c[g>>2]|0;if((d[h+n>>0]|0)>=(d[h+e>>0]|0)){m=o;continue}c[m>>2]=e;c[g>>2]=n;m=o}j=j+1|0}switch(p|0){case 2:{m=c[q>>2]|0;n=c[k>>2]|0;e=l+(n>>>3)|0;f=d[e>>0]|0;if(!((bc(m|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(r>>>0>=57)pa(406267,406218,55,406251);n=cc(m|0,0,n&7|0)|0;m=C;n=f|n;f=e;e=f;a[e>>0]=n;a[e+1>>0]=n>>8;a[e+2>>0]=n>>16;a[e+3>>0]=n>>24;f=f+4|0;a[f>>0]=m;a[f+1>>0]=m>>8;a[f+2>>0]=m>>16;a[f+3>>0]=m>>24;f=(c[k>>2]|0)+r|0;c[k>>2]=f;e=c[q+4>>2]|0;m=l+(f>>>3)|0;n=d[m>>0]|0;if(!((bc(e|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);p=cc(e|0,0,f&7|0)|0;q=C;p=n|p;l=m;h=l;a[h>>0]=p;a[h+1>>0]=p>>8;a[h+2>>0]=p>>16;a[h+3>>0]=p>>24;l=l+4|0;a[l>>0]=q;a[l+1>>0]=q>>8;a[l+2>>0]=q>>16;a[l+3>>0]=q>>24;c[k>>2]=(c[k>>2]|0)+r;i=s;return}case 3:{m=c[q>>2]|0;n=c[k>>2]|0;e=l+(n>>>3)|0;f=d[e>>0]|0;if(!((bc(m|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(r>>>0>=57)pa(406267,406218,55,406251);m=cc(m|0,0,n&7|0)|0;n=C;f=f|m;m=e;e=m;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=(c[k>>2]|0)+r|0;c[k>>2]=m;n=c[q+4>>2]|0;e=l+(m>>>3)|0;f=d[e>>0]|0;if(!((bc(n|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);n=cc(n|0,0,m&7|0)|0;m=C;n=f|n;f=e;e=f;a[e>>0]=n;a[e+1>>0]=n>>8;a[e+2>>0]=n>>16;a[e+3>>0]=n>>24;f=f+4|0;a[f>>0]=m;a[f+1>>0]=m>>8;a[f+2>>0]=m>>16;a[f+3>>0]=m>>24;f=(c[k>>2]|0)+r|0;c[k>>2]=f;e=c[q+8>>2]|0;m=l+(f>>>3)|0;n=d[m>>0]|0;if(!((bc(e|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);p=cc(e|0,0,f&7|0)|0;q=C;p=n|p;l=m;h=l;a[h>>0]=p;a[h+1>>0]=p>>8;a[h+2>>0]=p>>16;a[h+3>>0]=p>>24;l=l+4|0;a[l>>0]=q;a[l+1>>0]=q>>8;a[l+2>>0]=q>>16;a[l+3>>0]=q>>24;c[k>>2]=(c[k>>2]|0)+r;i=s;return}default:{m=c[q>>2]|0;n=c[k>>2]|0;e=l+(n>>>3)|0;f=d[e>>0]|0;if(!((bc(m|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(r>>>0>=57)pa(406267,406218,55,406251);m=cc(m|0,0,n&7|0)|0;n=C;f=f|m;m=e;e=m;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=(c[k>>2]|0)+r|0;c[k>>2]=m;n=c[q+4>>2]|0;e=l+(m>>>3)|0;f=d[e>>0]|0;if(!((bc(n|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);m=cc(n|0,0,m&7|0)|0;n=C;f=f|m;m=e;e=m;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=(c[k>>2]|0)+r|0;c[k>>2]=m;n=c[q+8>>2]|0;e=l+(m>>>3)|0;f=d[e>>0]|0;if(!((bc(n|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);m=cc(n|0,0,m&7|0)|0;n=C;f=f|m;m=e;e=m;a[e>>0]=f;a[e+1>>0]=f>>8;a[e+2>>0]=f>>16;a[e+3>>0]=f>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=(c[k>>2]|0)+r|0;c[k>>2]=m;n=c[q+12>>2]|0;e=l+(m>>>3)|0;f=d[e>>0]|0;if(!((bc(n|0,0,r|0)|0)==0&(C|0)==0))pa(406196,406218,54,406251);g=cc(n|0,0,m&7|0)|0;p=C;g=f|g;o=e;j=o;a[j>>0]=g;a[j+1>>0]=g>>8;a[j+2>>0]=g>>16;a[j+3>>0]=g>>24;o=o+4|0;a[o>>0]=p;a[o+1>>0]=p>>8;a[o+2>>0]=p>>16;a[o+3>>0]=p>>24;o=(c[k>>2]|0)+r|0;c[k>>2]=o;r=l+(o>>>3)|0;p=d[r>>0]|0;h=cc((a[h+(c[q>>2]|0)>>0]|0)==1|0,0,o&7|0)|0;l=C;h=p|h;q=r;a[q>>0]=h;a[q+1>>0]=h>>8;a[q+2>>0]=h>>16;a[q+3>>0]=h>>24;r=r+4|0;a[r>>0]=l;a[r+1>>0]=l>>8;a[r+2>>0]=l>>16;a[r+3>>0]=l>>24;c[k>>2]=(c[k>>2]|0)+1;i=s;return}}}function lb(b,f,g,h,i,j,k,l,m,n,o,p,q){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0;E=0;a:while(1){if(E>>>0>=i>>>0){f=42;break}y=c[h+(E<<4)>>2]|0;w=c[h+(E<<4)+4>>2]|0;D=c[h+(E<<4)+8>>2]|0;s=c[h+(E<<4)+12>>2]|0;A=s&65535;B=s>>>16;s=s&65535;r=a[l+s>>0]|0;s=e[m+(s<<1)>>1]|0;t=c[p>>2]|0;u=q+(t>>>3)|0;v=d[u>>0]|0;z=bc(s|0,0,r&255|0)|0;if(!((z|0)==0&(C|0)==0)){f=4;break}if((r&255)>=57){f=6;break}x=cc(s|0,0,t&7|0)|0;z=C;v=v|x;x=u;t=x;a[t>>0]=v;a[t+1>>0]=v>>8;a[t+2>>0]=v>>16;a[t+3>>0]=v>>24;x=x+4|0;a[x>>0]=z;a[x+1>>0]=z>>8;a[x+2>>0]=z>>16;a[x+3>>0]=z>>24;x=(c[p>>2]|0)+(r&255)|0;c[p>>2]=x;z=w&16777215;t=z^w>>>24;do if(y>>>0>=6){if(y>>>0<130){w=y+-2|0;s=((aa(w|0)|0)^31)+-1|0;s=(s<<1)+(w>>>s)+2|0;break}if(y>>>0<2114){s=((aa(y+-66|0)|0)^31)+10|0;break}if(y>>>0<6210)s=21;else s=y>>>0<22594?22:23}else s=y;while(0);do if(t>>>0>=10){if(t>>>0<134){w=t+-6|0;r=((aa(w|0)|0)^31)+-1|0;r=(r<<1)+(w>>>r)+4|0;break}if(t>>>0<2118)r=((aa(t+-70|0)|0)^31)+12|0;else r=23}else r=t+65534|0;while(0);s=s&65535;v=c[17268+(s<<2)>>2]|0;s=y-(c[18788+(s<<2)>>2]|0)|0;u=r&65535;t=cc(t-(c[17364+(u<<2)>>2]|0)|0,0,v|0)|0;r=C;s=t|s;t=v+(c[17460+(u<<2)>>2]|0)|0;u=q+(x>>>3)|0;v=d[u>>0]|0;w=bc(s|0,r|0,t|0)|0;if(!((w|0)==0&(C|0)==0)){f=21;break}if(t>>>0>=57){f=23;break}s=cc(s|0,r|0,x&7|0)|0;w=C;s=v|s;x=u;v=x;a[v>>0]=s;a[v+1>>0]=s>>8;a[v+2>>0]=s>>16;a[v+3>>0]=s>>24;x=x+4|0;a[x>>0]=w;a[x+1>>0]=w>>8;a[x+2>>0]=w>>16;a[x+3>>0]=w>>24;x=(c[p>>2]|0)+t|0;c[p>>2]=x;v=y;while(1){if(!v)break;s=d[b+(f&g)>>0]|0;r=a[j+s>>0]|0;s=e[k+(s<<1)>>1]|0;t=q+(x>>>3)|0;u=d[t>>0]|0;y=bc(s|0,0,r&255|0)|0;if(!((y|0)==0&(C|0)==0)){f=27;break a}if((r&255)>=57){f=29;break a}s=cc(s|0,0,x&7|0)|0;w=C;s=u|s;y=t;u=y;a[u>>0]=s;a[u+1>>0]=s>>8;a[u+2>>0]=s>>16;a[u+3>>0]=s>>24;y=y+4|0;a[y>>0]=w;a[y+1>>0]=w>>8;a[y+2>>0]=w>>16;a[y+3>>0]=w>>24;y=(c[p>>2]|0)+(r&255)|0;c[p>>2]=y;x=y;f=f+1|0;v=v+-1|0}f=f+z|0;if((z|0)!=0&(A&65535)>127){v=D>>>24;w=D&16777215;u=a[n+B>>0]|0;r=e[o+(B<<1)>>1]|0;s=q+(x>>>3)|0;t=d[s>>0]|0;B=bc(r|0,0,u&255|0)|0;if(!((B|0)==0&(C|0)==0)){f=33;break}if((u&255)>=57){f=35;break}r=cc(r|0,0,x&7|0)|0;B=C;t=t|r;r=s;s=r;a[s>>0]=t;a[s+1>>0]=t>>8;a[s+2>>0]=t>>16;a[s+3>>0]=t>>24;r=r+4|0;a[r>>0]=B;a[r+1>>0]=B>>8;a[r+2>>0]=B>>16;a[r+3>>0]=B>>24;r=(c[p>>2]|0)+(u&255)|0;c[p>>2]=r;s=q+(r>>>3)|0;t=d[s>>0]|0;B=bc(w|0,0,v|0)|0;if(!((B|0)==0&(C|0)==0)){f=37;break}if(D>>>0>=956301312){f=39;break}z=cc(w|0,0,r&7|0)|0;B=C;z=t|z;D=s;A=D;a[A>>0]=z;a[A+1>>0]=z>>8;a[A+2>>0]=z>>16;a[A+3>>0]=z>>24;D=D+4|0;a[D>>0]=B;a[D+1>>0]=B>>8;a[D+2>>0]=B>>16;a[D+3>>0]=B>>24;c[p>>2]=(c[p>>2]|0)+v}E=E+1|0}switch(f|0){case 4:{pa(406196,406218,54,406251);break}case 6:{pa(406267,406218,55,406251);break}case 21:{pa(406196,406218,54,406251);break}case 23:{pa(406267,406218,55,406251);break}case 27:{pa(406196,406218,54,406251);break}case 29:{pa(406267,406218,55,406251);break}case 33:{pa(406196,406218,54,406251);break}case 35:{pa(406267,406218,55,406251);break}case 37:{pa(406196,406218,54,406251);break}case 39:{pa(406267,406218,55,406251);break}case 42:return}}function mb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((a|0)!=1){i=(aa(a+-1|0)|0)^31;j=i+1|0;if(!a)pa(405225,404333,86,405236);else{g=j>>>0<16?4:(i+4|0)>>>2;k=j}if(a>>>0<16777217){h=g;l=k}else pa(405253,404333,87,405236);if(l>>>0<25)f=h;else pa(405273,404333,88,405236)}else f=4;c[e>>2]=f+-4;c[e+4>>2]=0;c[d>>2]=f<<2;d=b;c[d>>2]=a+-1;c[d+4>>2]=0;return}function nb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(!b){k=f+((c[e>>2]|0)>>>3)|0;b=d[k>>0]|0;f=k;a[f>>0]=b;a[f+1>>0]=b>>8;a[f+2>>0]=b>>16;a[f+3>>0]=b>>24;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;k=(c[e>>2]|0)+1|0;c[e>>2]=k;return}k=(aa(b|0)|0)^31;j=c[e>>2]|0;g=f+(j>>>3)|0;i=d[g>>0]|0;j=cc(1,0,j&7|0)|0;h=C;j=i|j;i=g;a[i>>0]=j;a[i+1>>0]=j>>8;a[i+2>>0]=j>>16;a[i+3>>0]=j>>24;g=g+4|0;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;g=(c[e>>2]|0)+1|0;c[e>>2]=g;h=f+(g>>>3)|0;i=d[h>>0]|0;if(!((k&56|0)==0&0==0))pa(406196,406218,54,406251);l=cc(k|0,0,g&7|0)|0;g=C;l=i|l;j=h;i=j;a[i>>0]=l;a[i+1>>0]=l>>8;a[i+2>>0]=l>>16;a[i+3>>0]=l>>24;j=j+4|0;a[j>>0]=g;a[j+1>>0]=g>>8;a[j+2>>0]=g>>16;a[j+3>>0]=g>>24;j=(c[e>>2]|0)+3|0;c[e>>2]=j;i=b-(1<>>3)|0;h=d[g>>0]|0;f=bc(i|0,0,k|0)|0;if(!((f|0)==0&(C|0)==0))pa(406196,406218,54,406251);if(k>>>0>=57)pa(406267,406218,55,406251);j=cc(i|0,0,j&7|0)|0;f=C;j=h|j;l=g;b=l;a[b>>0]=j;a[b+1>>0]=j>>8;a[b+2>>0]=j>>16;a[b+3>>0]=j>>24;l=l+4|0;a[l>>0]=f;a[l+1>>0]=f>>8;a[l+2>>0]=f>>16;a[l+3>>0]=f>>24;l=(c[e>>2]|0)+k|0;c[e>>2]=l;return}function ob(a,b,d,e,f,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0;w=i;i=i+1040|0;t=w;if((d|0)==(e|0)){i=w;return}u=e>>>0>>0;v=u?d:e;u=u?e:d;d=c[b+(u<<2)>>2]|0;e=c[b+(v<<2)>>2]|0;b=d+e|0;s=+(d>>>0);if(d>>>0<256)r=+g[19516+(d<<2)>>2];else r=+Xb(s);q=+(e>>>0);if(e>>>0<256)p=+g[19516+(e<<2)>>2];else p=+Xb(q);n=+(b>>>0);if(b>>>0<256)m=+g[19516+(b<<2)>>2];else m=+Xb(n);l=+h[a+(u*1040|0)+1032>>3];o=+h[a+(v*1040|0)+1032>>3];n=(s*r+q*p-n*m)*.5-l-o;if(c[a+(u*1040|0)+1024>>2]|0){d=c[a+(v*1040|0)+1024>>2]|0;if(d){if(c[k>>2]|0){l=+h[j+16>>3];if(l<0.0)m=0.0;else m=l}else m=1.e+99;dc(t|0,a+(u*1040|0)|0,1040)|0;b=t+1024|0;c[b>>2]=(c[b>>2]|0)+d;d=0;while(1){if((d|0)==256)break;b=t+(d<<2)|0;c[b>>2]=(c[b>>2]|0)+(c[a+(v*1040|0)+(d<<2)>>2]|0);d=d+1|0}l=+Wa(t);if(!(l>2]|0;do if(d){n=+h[j+16>>3];if(n!=m){if(!(n>m))break}else if(((c[j+4>>2]|0)-(c[j>>2]|0)|0)>>>0<=(v-u|0)>>>0)break;if(d>>>0>>0){f=j+(d*24|0)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];c[f+16>>2]=c[j+16>>2];c[f+20>>2]=c[j+20>>2];c[k>>2]=(c[k>>2]|0)+1}c[j>>2]=u;c[j+4>>2]=v;h[j+8>>3]=l;h[j+16>>3]=m;i=w;return}while(0);if(d>>>0>=f>>>0){i=w;return}c[j+(d*24|0)>>2]=u;c[j+(d*24|0)+4>>2]=v;h[j+(d*24|0)+8>>3]=l;h[j+(d*24|0)+16>>3]=m;c[k>>2]=(c[k>>2]|0)+1;i=w;return}function pb(a,b,d,e,f,g,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=i;i=i+32|0;E=F+24|0;D=F;c[E>>2]=0;m=g+-1|0;o=0;while(1){if((o|0)==(g|0))break;n=e+(o<<2)|0;q=o;while(1){p=q+1|0;if((q|0)==(m|0))break;ob(a,b,c[n>>2]|0,c[e+(p<<2)>>2]|0,l,f,E);q=p}o=o+1|0}x=f+16|0;y=f+4|0;z=f+8|0;m=g;v=0.0;w=1;a:while(1){u=m;while(1){m=m+-1|0;if(u>>>0<=w>>>0)break a;if(+h[x>>3]>=v){m=u;v=1.e+99;w=k;continue a}t=c[f>>2]|0;g=c[y>>2]|0;n=a+(t*1040|0)+1024|0;c[n>>2]=(c[n>>2]|0)+(c[a+(g*1040|0)+1024>>2]|0);n=0;while(1){if((n|0)==256)break;q=a+(t*1040|0)+(n<<2)|0;c[q>>2]=(c[q>>2]|0)+(c[a+(g*1040|0)+(n<<2)>>2]|0);n=n+1|0}h[a+(t*1040|0)+1032>>3]=+h[z>>3];o=b+(t<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[b+(g<<2)>>2]|0);o=0;while(1){if((o|0)==(j|0)){o=0;break}n=d+(o<<2)|0;if((c[n>>2]|0)==(g|0))c[n>>2]=t;o=o+1|0}while(1){if(u>>>0<=o>>>0)break;n=e+(o<<2)|0;if((c[n>>2]|0)==(g|0)){A=22;break}o=o+1|0}if((A|0)==22){A=0;fc(n|0,e+(o+1<<2)|0,(u-o<<2)+-4|0)|0}p=c[E>>2]|0;n=0;q=0;while(1){if((q|0)==(p|0))break;o=f+(q*24|0)|0;if(((c[o>>2]|0)!=(t|0)?(B=c[f+(q*24|0)+4>>2]|0,(B|0)!=(t|0)):0)?(C=c[o>>2]|0,!((C|0)==(g|0)|(B|0)==(g|0))):0){r=+h[x>>3];s=+h[f+(q*24|0)+16>>3];if(r!=s)if(r>s)A=32;else A=33;else if(((c[y>>2]|0)-(c[f>>2]|0)|0)>>>0>(B-C|0)>>>0)A=32;else A=33;if((A|0)==32){A=0;c[D>>2]=c[f>>2];c[D+4>>2]=c[f+4>>2];c[D+8>>2]=c[f+8>>2];c[D+12>>2]=c[f+12>>2];c[D+16>>2]=c[f+16>>2];c[D+20>>2]=c[f+20>>2];c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];o=f+(n*24|0)|0;c[o>>2]=c[D>>2];c[o+4>>2]=c[D+4>>2];c[o+8>>2]=c[D+8>>2];c[o+12>>2]=c[D+12>>2];c[o+16>>2]=c[D+16>>2];c[o+20>>2]=c[D+20>>2]}else if((A|0)==33){A=0;G=f+(n*24|0)|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];c[G+16>>2]=c[o+16>>2];c[G+20>>2]=c[o+20>>2]}n=n+1|0}q=q+1|0}c[E>>2]=n;n=0;while(1){if((n|0)==(m|0))break;ob(a,b,t,c[e+(n<<2)>>2]|0,l,f,E);n=n+1|0}u=u+-1|0}}i=F;return u|0}function qb(a,b,d,e,f,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0;w=i;i=i+2832|0;t=w;if((d|0)==(e|0)){i=w;return}u=e>>>0>>0;v=u?d:e;u=u?e:d;d=c[b+(u<<2)>>2]|0;e=c[b+(v<<2)>>2]|0;b=d+e|0;s=+(d>>>0);if(d>>>0<256)r=+g[19516+(d<<2)>>2];else r=+Xb(s);q=+(e>>>0);if(e>>>0<256)p=+g[19516+(e<<2)>>2];else p=+Xb(q);n=+(b>>>0);if(b>>>0<256)m=+g[19516+(b<<2)>>2];else m=+Xb(n);l=+h[a+(u*2832|0)+2824>>3];o=+h[a+(v*2832|0)+2824>>3];n=(s*r+q*p-n*m)*.5-l-o;if(c[a+(u*2832|0)+2816>>2]|0){d=c[a+(v*2832|0)+2816>>2]|0;if(d){if(c[k>>2]|0){l=+h[j+16>>3];if(l<0.0)m=0.0;else m=l}else m=1.e+99;dc(t|0,a+(u*2832|0)|0,2832)|0;b=t+2816|0;c[b>>2]=(c[b>>2]|0)+d;d=0;while(1){if((d|0)==704)break;b=t+(d<<2)|0;c[b>>2]=(c[b>>2]|0)+(c[a+(v*2832|0)+(d<<2)>>2]|0);d=d+1|0}l=+Xa(t);if(!(l>2]|0;do if(d){n=+h[j+16>>3];if(n!=m){if(!(n>m))break}else if(((c[j+4>>2]|0)-(c[j>>2]|0)|0)>>>0<=(v-u|0)>>>0)break;if(d>>>0>>0){f=j+(d*24|0)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];c[f+16>>2]=c[j+16>>2];c[f+20>>2]=c[j+20>>2];c[k>>2]=(c[k>>2]|0)+1}c[j>>2]=u;c[j+4>>2]=v;h[j+8>>3]=l;h[j+16>>3]=m;i=w;return}while(0);if(d>>>0>=f>>>0){i=w;return}c[j+(d*24|0)>>2]=u;c[j+(d*24|0)+4>>2]=v;h[j+(d*24|0)+8>>3]=l;h[j+(d*24|0)+16>>3]=m;c[k>>2]=(c[k>>2]|0)+1;i=w;return}function rb(a,b,d,e,f,g,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=i;i=i+32|0;E=F+24|0;D=F;c[E>>2]=0;m=g+-1|0;o=0;while(1){if((o|0)==(g|0))break;n=e+(o<<2)|0;q=o;while(1){p=q+1|0;if((q|0)==(m|0))break;qb(a,b,c[n>>2]|0,c[e+(p<<2)>>2]|0,l,f,E);q=p}o=o+1|0}x=f+16|0;y=f+4|0;z=f+8|0;m=g;v=0.0;w=1;a:while(1){u=m;while(1){m=m+-1|0;if(u>>>0<=w>>>0)break a;if(+h[x>>3]>=v){m=u;v=1.e+99;w=k;continue a}t=c[f>>2]|0;g=c[y>>2]|0;n=a+(t*2832|0)+2816|0;c[n>>2]=(c[n>>2]|0)+(c[a+(g*2832|0)+2816>>2]|0);n=0;while(1){if((n|0)==704)break;q=a+(t*2832|0)+(n<<2)|0;c[q>>2]=(c[q>>2]|0)+(c[a+(g*2832|0)+(n<<2)>>2]|0);n=n+1|0}h[a+(t*2832|0)+2824>>3]=+h[z>>3];o=b+(t<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[b+(g<<2)>>2]|0);o=0;while(1){if((o|0)==(j|0)){o=0;break}n=d+(o<<2)|0;if((c[n>>2]|0)==(g|0))c[n>>2]=t;o=o+1|0}while(1){if(u>>>0<=o>>>0)break;n=e+(o<<2)|0;if((c[n>>2]|0)==(g|0)){A=22;break}o=o+1|0}if((A|0)==22){A=0;fc(n|0,e+(o+1<<2)|0,(u-o<<2)+-4|0)|0}p=c[E>>2]|0;n=0;q=0;while(1){if((q|0)==(p|0))break;o=f+(q*24|0)|0;if(((c[o>>2]|0)!=(t|0)?(B=c[f+(q*24|0)+4>>2]|0,(B|0)!=(t|0)):0)?(C=c[o>>2]|0,!((C|0)==(g|0)|(B|0)==(g|0))):0){r=+h[x>>3];s=+h[f+(q*24|0)+16>>3];if(r!=s)if(r>s)A=32;else A=33;else if(((c[y>>2]|0)-(c[f>>2]|0)|0)>>>0>(B-C|0)>>>0)A=32;else A=33;if((A|0)==32){A=0;c[D>>2]=c[f>>2];c[D+4>>2]=c[f+4>>2];c[D+8>>2]=c[f+8>>2];c[D+12>>2]=c[f+12>>2];c[D+16>>2]=c[f+16>>2];c[D+20>>2]=c[f+20>>2];c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];o=f+(n*24|0)|0;c[o>>2]=c[D>>2];c[o+4>>2]=c[D+4>>2];c[o+8>>2]=c[D+8>>2];c[o+12>>2]=c[D+12>>2];c[o+16>>2]=c[D+16>>2];c[o+20>>2]=c[D+20>>2]}else if((A|0)==33){A=0;G=f+(n*24|0)|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];c[G+16>>2]=c[o+16>>2];c[G+20>>2]=c[o+20>>2]}n=n+1|0}q=q+1|0}c[E>>2]=n;n=0;while(1){if((n|0)==(m|0))break;qb(a,b,t,c[e+(n<<2)>>2]|0,l,f,E);n=n+1|0}u=u+-1|0}}i=F;return u|0}function sb(a,b,d,e,f,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0;w=i;i=i+2096|0;t=w;if((d|0)==(e|0)){i=w;return}u=e>>>0>>0;v=u?d:e;u=u?e:d;d=c[b+(u<<2)>>2]|0;e=c[b+(v<<2)>>2]|0;b=d+e|0;s=+(d>>>0);if(d>>>0<256)r=+g[19516+(d<<2)>>2];else r=+Xb(s);q=+(e>>>0);if(e>>>0<256)p=+g[19516+(e<<2)>>2];else p=+Xb(q);n=+(b>>>0);if(b>>>0<256)m=+g[19516+(b<<2)>>2];else m=+Xb(n);l=+h[a+(u*2096|0)+2088>>3];o=+h[a+(v*2096|0)+2088>>3];n=(s*r+q*p-n*m)*.5-l-o;if(c[a+(u*2096|0)+2080>>2]|0){d=c[a+(v*2096|0)+2080>>2]|0;if(d){if(c[k>>2]|0){l=+h[j+16>>3];if(l<0.0)m=0.0;else m=l}else m=1.e+99;dc(t|0,a+(u*2096|0)|0,2096)|0;b=t+2080|0;c[b>>2]=(c[b>>2]|0)+d;d=0;while(1){if((d|0)==520)break;b=t+(d<<2)|0;c[b>>2]=(c[b>>2]|0)+(c[a+(v*2096|0)+(d<<2)>>2]|0);d=d+1|0}l=+Ya(t);if(!(l>2]|0;do if(d){n=+h[j+16>>3];if(n!=m){if(!(n>m))break}else if(((c[j+4>>2]|0)-(c[j>>2]|0)|0)>>>0<=(v-u|0)>>>0)break;if(d>>>0>>0){f=j+(d*24|0)|0;c[f>>2]=c[j>>2];c[f+4>>2]=c[j+4>>2];c[f+8>>2]=c[j+8>>2];c[f+12>>2]=c[j+12>>2];c[f+16>>2]=c[j+16>>2];c[f+20>>2]=c[j+20>>2];c[k>>2]=(c[k>>2]|0)+1}c[j>>2]=u;c[j+4>>2]=v;h[j+8>>3]=l;h[j+16>>3]=m;i=w;return}while(0);if(d>>>0>=f>>>0){i=w;return}c[j+(d*24|0)>>2]=u;c[j+(d*24|0)+4>>2]=v;h[j+(d*24|0)+8>>3]=l;h[j+(d*24|0)+16>>3]=m;c[k>>2]=(c[k>>2]|0)+1;i=w;return}function tb(a,b,d,e,f,g,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=i;i=i+32|0;E=F+24|0;D=F;c[E>>2]=0;m=g+-1|0;o=0;while(1){if((o|0)==(g|0))break;n=e+(o<<2)|0;q=o;while(1){p=q+1|0;if((q|0)==(m|0))break;sb(a,b,c[n>>2]|0,c[e+(p<<2)>>2]|0,l,f,E);q=p}o=o+1|0}x=f+16|0;y=f+4|0;z=f+8|0;m=g;v=0.0;w=1;a:while(1){u=m;while(1){m=m+-1|0;if(u>>>0<=w>>>0)break a;if(+h[x>>3]>=v){m=u;v=1.e+99;w=k;continue a}t=c[f>>2]|0;g=c[y>>2]|0;n=a+(t*2096|0)+2080|0;c[n>>2]=(c[n>>2]|0)+(c[a+(g*2096|0)+2080>>2]|0);n=0;while(1){if((n|0)==520)break;q=a+(t*2096|0)+(n<<2)|0;c[q>>2]=(c[q>>2]|0)+(c[a+(g*2096|0)+(n<<2)>>2]|0);n=n+1|0}h[a+(t*2096|0)+2088>>3]=+h[z>>3];o=b+(t<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[b+(g<<2)>>2]|0);o=0;while(1){if((o|0)==(j|0)){o=0;break}n=d+(o<<2)|0;if((c[n>>2]|0)==(g|0))c[n>>2]=t;o=o+1|0}while(1){if(u>>>0<=o>>>0)break;n=e+(o<<2)|0;if((c[n>>2]|0)==(g|0)){A=22;break}o=o+1|0}if((A|0)==22){A=0;fc(n|0,e+(o+1<<2)|0,(u-o<<2)+-4|0)|0}p=c[E>>2]|0;n=0;q=0;while(1){if((q|0)==(p|0))break;o=f+(q*24|0)|0;if(((c[o>>2]|0)!=(t|0)?(B=c[f+(q*24|0)+4>>2]|0,(B|0)!=(t|0)):0)?(C=c[o>>2]|0,!((C|0)==(g|0)|(B|0)==(g|0))):0){r=+h[x>>3];s=+h[f+(q*24|0)+16>>3];if(r!=s)if(r>s)A=32;else A=33;else if(((c[y>>2]|0)-(c[f>>2]|0)|0)>>>0>(B-C|0)>>>0)A=32;else A=33;if((A|0)==32){A=0;c[D>>2]=c[f>>2];c[D+4>>2]=c[f+4>>2];c[D+8>>2]=c[f+8>>2];c[D+12>>2]=c[f+12>>2];c[D+16>>2]=c[f+16>>2];c[D+20>>2]=c[f+20>>2];c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];c[f+20>>2]=c[o+20>>2];o=f+(n*24|0)|0;c[o>>2]=c[D>>2];c[o+4>>2]=c[D+4>>2];c[o+8>>2]=c[D+8>>2];c[o+12>>2]=c[D+12>>2];c[o+16>>2]=c[D+16>>2];c[o+20>>2]=c[D+20>>2]}else if((A|0)==33){A=0;G=f+(n*24|0)|0;c[G>>2]=c[o>>2];c[G+4>>2]=c[o+4>>2];c[G+8>>2]=c[o+8>>2];c[G+12>>2]=c[o+12>>2];c[G+16>>2]=c[o+16>>2];c[G+20>>2]=c[o+20>>2]}n=n+1|0}q=q+1|0}c[E>>2]=n;n=0;while(1){if((n|0)==(m|0))break;sb(a,b,t,c[e+(n<<2)>>2]|0,l,f,E);n=n+1|0}u=u+-1|0}}i=F;return u|0}function ub(b,f,h,j,k,l,m,n,o,p,q,r){b=b|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;xa=i;i=i+2304|0;ta=xa+512|0;sa=xa;va=xa+2048|0;ua=xa+1536|0;w=f;A=h>>>0<98304?h:98304;B=c[q>>2]|0;ra=64-((aa(l|0)|0)^31)|0;if(!l)pa(405532,405401,464,405439);if(l>>>0>=2147483649)pa(405605,405401,465,405439);s=l+-1|0;if(s&l)pa(405630,405401,467,405439);qa=bc(16777215,-1,ra|0)|0;if((s|0)!=(qa|0))pa(405667,405401,469,405439);if(!h){if(!j)pa(405466,405401,472,405439);b=r+(B>>>3)|0;k=d[b>>0]|0;va=cc(1,0,B&7|0)|0;wa=C;va=k|va;k=b;a[k>>0]=va;a[k+1>>0]=va>>8;a[k+2>>0]=va>>16;a[k+3>>0]=va>>24;b=b+4|0;a[b>>0]=wa;a[b+1>>0]=wa>>8;a[b+2>>0]=wa>>16;a[b+3>>0]=wa>>24;b=(c[q>>2]|0)+1|0;c[q>>2]=b;wa=r+(b>>>3)|0;r=d[wa>>0]|0;b=cc(1,0,b&7|0)|0;k=C;b=r|b;r=wa;a[r>>0]=b;a[r+1>>0]=b>>8;a[r+2>>0]=b>>16;a[r+3>>0]=b>>24;wa=wa+4|0;a[wa>>0]=k;a[wa+1>>0]=k>>8;a[wa+2>>0]=k>>16;a[wa+3>>0]=k>>24;c[q>>2]=(c[q>>2]|0)+8&-8;i=xa;return}vb(A,0,q,r);x=r+((c[q>>2]|0)>>>3)|0;qa=d[x>>0]|0;s=x;a[s>>0]=qa;a[s+1>>0]=qa>>8;a[s+2>>0]=qa>>16;a[s+3>>0]=qa>>24;x=x+4|0;a[x>>0]=0;a[x+1>>0]=0;a[x+2>>0]=0;a[x+3>>0]=0;c[q>>2]=(c[q>>2]|0)+13;x=wb(b,f,A,va,ua,q,r)|0;s=0;while(1){l=c[o>>2]|0;if((s|7)>>>0>=l>>>0)break;ma=c[q>>2]|0;qa=r+(ma>>>3)|0;na=d[qa>>0]|0;ma=cc(d[p+(s>>>3)>>0]|0,0,ma&7|0)|0;oa=C;ma=na|ma;na=qa;a[na>>0]=ma;a[na+1>>0]=ma>>8;a[na+2>>0]=ma>>16;a[na+3>>0]=ma>>24;qa=qa+4|0;a[qa>>0]=oa;a[qa+1>>0]=oa>>8;a[qa+2>>0]=oa>>16;a[qa+3>>0]=oa>>24;c[q>>2]=(c[q>>2]|0)+8;s=s+8|0}v=l&7;s=d[p+(l>>>3)>>0]|0;l=c[q>>2]|0;t=r+(l>>>3)|0;u=d[t>>0]|0;qa=bc(s|0,0,v|0)|0;if(!((qa|0)==0&(C|0)==0))pa(406196,406218,54,406251);ca=cc(s|0,0,l&7|0)|0;$=C;ca=u|ca;_=t;ba=_;a[ba>>0]=ca;a[ba+1>>0]=ca>>8;a[ba+2>>0]=ca>>16;a[ba+3>>0]=ca>>24;_=_+4|0;a[_>>0]=$;a[_+1>>0]=$>>8;a[_+2>>0]=$>>16;a[_+3>>0]=$>>24;c[q>>2]=(c[q>>2]|0)+v;_=f;$=m+61|0;ba=n+122|0;ca=sa+84|0;da=m+64|0;ea=n+128|0;fa=sa+256|0;ga=m+39|0;ha=n+78|0;ia=sa+188|0;ja=sa+256|0;ka=m+62|0;la=n+124|0;ma=sa+88|0;na=m+63|0;oa=n+126|0;qa=sa+92|0;l=h;s=w;u=A;t=x;a:while(1){X=B+3|0;Y=t>>>0>980;T=s;V=u;v=s;W=u;b:while(1){dc(sa|0,17764,512)|0;U=T;t=U+V|0;Z=t;c:do if(V>>>0>15){w=V+-5|0;S=l+-16|0;S=U+(w>>>0>>0?w:S)|0;w=U+1|0;h=w;u=h;h=h+4|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;M=-1;while(1){u=lc(u|0,h|0,-1124073472,1979815)|0;u=bc(u|0,C|0,ra|0)|0;K=v;if(K>>>0>=w>>>0){wa=24;break a}G=0-M|0;Q=w;F=32;while(1){H=Q;h=F;F=F+1|0;R=Q;P=R;R=R+4|0;R=lc(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0,d[R>>0]|d[R+1>>0]<<8|d[R+2>>0]<<16|d[R+3>>0]<<24|0,-1124073472,1979815)|0;R=bc(R|0,C|0,ra|0)|0;if((u|0)!=(R|0)){wa=26;break a}x=Q+(h>>>5)|0;if(x>>>0>S>>>0)break c;A=x;h=A;A=A+4|0;A=lc(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0,d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0,-1124073472,1979815)|0;A=bc(A|0,C|0,ra|0)|0;h=Q+G|0;if((d[Q>>0]|d[Q+1>>0]<<8|d[Q+2>>0]<<16|d[Q+3>>0]<<24|0)==(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)?((G|0)<0?(a[Q+4>>0]|0)==(a[Q+(4-M)>>0]|0):0):0){wa=30;break}u=k+(u<<2)|0;w=c[u>>2]|0;h=f+w|0;if((w|0)<0){wa=32;break a}if(h>>>0>=Q>>>0){wa=34;break a}c[u>>2]=H-_;if((d[Q>>0]|d[Q+1>>0]<<8|d[Q+2>>0]<<16|d[Q+3>>0]<<24|0)!=(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)){u=A;Q=x;continue}if((a[Q+4>>0]|0)==(a[f+(w+4)>>0]|0))break;else{u=A;Q=x}}if((wa|0)==30){wa=0;c[k+(u<<2)>>2]=H-_}x=h;R=U+(V+-4)|0;u=0;w=Q+5|0;while(1){if(w>>>0>R>>>0){P=u;u=w;break}P=h+(u+5)|0;if((d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24|0)!=(d[P>>0]|d[P+1>>0]<<8|d[P+2>>0]<<16|d[P+3>>0]<<24|0)){P=u;u=w;break}u=u+4|0;w=w+4|0}while(1){if(u>>>0>=t>>>0)break;if((a[h+(P+5)>>0]|0)!=(a[u>>0]|0))break;P=P+1|0;u=u+1|0}L=P+5|0;I=H-x|0;J=H-v|0;N=Q+L|0;O=N;d:do if(L){x=L;A=Q;while(1){u=a[A>>0]|0;w=a[h>>0]|0;if(u<<24>>24!=w<<24>>24)break;x=x+-1|0;if(!x)break d;else{A=A+1|0;h=h+1|0}}if(u<<24>>24!=w<<24>>24){wa=48;break a}}while(0);do if(J>>>0>=6210){if(!(((v-s|0)*50|0)>>>0>J>>>0|Y^1)){wa=84;break b}if(J>>>0<22594){u=a[ka>>0]|0;v=e[la>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;H=bc(v|0,0,u&255|0)|0;if(!((H|0)==0&(C|0)==0)){wa=87;break a}if((u&255)>=57){wa=89;break a}H=cc(v|0,0,h&7|0)|0;h=C;H=x|H;v=w;w=v;a[w>>0]=H;a[w+1>>0]=H>>8;a[w+2>>0]=H>>16;a[w+3>>0]=H>>24;v=v+4|0;a[v>>0]=h;a[v+1>>0]=h>>8;a[v+2>>0]=h>>16;a[v+3>>0]=h>>24;u=(c[q>>2]|0)+(u&255)|0;c[q>>2]=u;v=J+-6210|0;h=r+(u>>>3)|0;w=d[h>>0]|0;if(!((v&-16384|0)==0&0==0)){wa=91;break a}F=cc(v|0,0,u&7|0)|0;H=C;F=w|F;A=h;G=A;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;A=A+4|0;a[A>>0]=H;a[A+1>>0]=H>>8;a[A+2>>0]=H>>16;a[A+3>>0]=H>>24;c[q>>2]=(c[q>>2]|0)+14;c[ma>>2]=(c[ma>>2]|0)+1;A=0;break}else{u=a[na>>0]|0;v=e[oa>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;H=bc(v|0,0,u&255|0)|0;if(!((H|0)==0&(C|0)==0)){wa=94;break a}if((u&255)>=57){wa=96;break a}H=cc(v|0,0,h&7|0)|0;h=C;H=x|H;v=w;w=v;a[w>>0]=H;a[w+1>>0]=H>>8;a[w+2>>0]=H>>16;a[w+3>>0]=H>>24;v=v+4|0;a[v>>0]=h;a[v+1>>0]=h>>8;a[v+2>>0]=h>>16;a[v+3>>0]=h>>24;u=(c[q>>2]|0)+(u&255)|0;c[q>>2]=u;v=J+-22594|0;h=r+(u>>>3)|0;w=d[h>>0]|0;if(!((v&-16777216|0)==0&0==0)){wa=98;break a}F=cc(v|0,0,u&7|0)|0;H=C;F=w|F;A=h;G=A;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;A=A+4|0;a[A>>0]=H;a[A+1>>0]=H>>8;a[A+2>>0]=H>>16;a[A+3>>0]=H>>24;c[q>>2]=(c[q>>2]|0)+24;c[qa>>2]=(c[qa>>2]|0)+1;A=0;break}}else{if(J>>>0<6){u=J+40|0;v=a[m+u>>0]|0;h=e[n+(u<<1)>>1]|0;w=c[q>>2]|0;x=r+(w>>>3)|0;A=d[x>>0]|0;H=bc(h|0,0,v&255|0)|0;if(!((H|0)==0&(C|0)==0)){wa=52;break a}if((v&255)>=57){wa=54;break a}F=cc(h|0,0,w&7|0)|0;H=C;F=A|F;A=x;G=A;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;A=A+4|0;a[A>>0]=H;a[A+1>>0]=H>>8;a[A+2>>0]=H>>16;a[A+3>>0]=H>>24;c[q>>2]=(c[q>>2]|0)+(v&255);A=sa+(u<<2)|0;c[A>>2]=(c[A>>2]|0)+1;A=0;break}if(J>>>0<130){A=J+-2|0;G=((aa(A|0)|0)^31)+-1|0;F=A>>>G;H=(G<<1)+F+42|0;u=a[m+H>>0]|0;v=e[n+(H<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=58;break a}if((u&255)>=57){wa=60;break a}ya=cc(v|0,0,h&7|0)|0;v=C;ya=x|ya;h=w;a[h>>0]=ya;a[h+1>>0]=ya>>8;a[h+2>>0]=ya>>16;a[h+3>>0]=ya>>24;w=w+4|0;a[w>>0]=v;a[w+1>>0]=v>>8;a[w+2>>0]=v>>16;a[w+3>>0]=v>>24;w=(c[q>>2]|0)+(u&255)|0;c[q>>2]=w;u=A-(F<>>3)|0;h=d[v>>0]|0;ya=bc(u|0,0,G|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=62;break a}if(G>>>0>=57){wa=64;break a}x=cc(u|0,0,w&7|0)|0;ya=C;x=h|x;A=v;F=A;a[F>>0]=x;a[F+1>>0]=x>>8;a[F+2>>0]=x>>16;a[F+3>>0]=x>>24;A=A+4|0;a[A>>0]=ya;a[A+1>>0]=ya>>8;a[A+2>>0]=ya>>16;a[A+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+G;A=sa+(H<<2)|0;c[A>>2]=(c[A>>2]|0)+1;A=0;break}if(J>>>0>=2114){u=a[$>>0]|0;v=e[ba>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=77;break a}if((u&255)>=57){wa=79;break a}ya=cc(v|0,0,h&7|0)|0;h=C;ya=x|ya;v=w;w=v;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;v=v+4|0;a[v>>0]=h;a[v+1>>0]=h>>8;a[v+2>>0]=h>>16;a[v+3>>0]=h>>24;u=(c[q>>2]|0)+(u&255)|0;c[q>>2]=u;v=J+-2114|0;h=r+(u>>>3)|0;w=d[h>>0]|0;if(!((v&-4096|0)==0&0==0)){wa=81;break a}G=cc(v|0,0,u&7|0)|0;ya=C;G=w|G;A=h;H=A;a[H>>0]=G;a[H+1>>0]=G>>8;a[H+2>>0]=G>>16;a[H+3>>0]=G>>24;A=A+4|0;a[A>>0]=ya;a[A+1>>0]=ya>>8;a[A+2>>0]=ya>>16;a[A+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+12;c[ca>>2]=(c[ca>>2]|0)+1;A=0;break}A=J+-66|0;F=(aa(A|0)|0)^31;G=F+50|0;u=a[m+G>>0]|0;v=e[n+(G<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=68;break a}if((u&255)>=57){wa=70;break a}ya=cc(v|0,0,h&7|0)|0;v=C;ya=x|ya;h=w;a[h>>0]=ya;a[h+1>>0]=ya>>8;a[h+2>>0]=ya>>16;a[h+3>>0]=ya>>24;w=w+4|0;a[w>>0]=v;a[w+1>>0]=v>>8;a[w+2>>0]=v>>16;a[w+3>>0]=v>>24;w=(c[q>>2]|0)+(u&255)|0;c[q>>2]=w;u=A-(1<>>3)|0;h=d[v>>0]|0;ya=bc(u|0,0,F|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=72;break a}if(F>>>0>=57){wa=74;break a}x=cc(u|0,0,w&7|0)|0;ya=C;x=h|x;A=v;H=A;a[H>>0]=x;a[H+1>>0]=x>>8;a[H+2>>0]=x>>16;a[H+3>>0]=x>>24;A=A+4|0;a[A>>0]=ya;a[A+1>>0]=ya>>8;a[A+2>>0]=ya>>16;a[A+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+F;A=sa+(G<<2)|0;c[A>>2]=(c[A>>2]|0)+1;A=0}while(0);while(1){if(A>>>0>=J>>>0)break;v=d[K+A>>0]|0;u=a[va+v>>0]|0;v=e[ua+(v<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=102;break a}if((u&255)>=57){wa=104;break a}F=cc(v|0,0,h&7|0)|0;H=C;F=x|F;ya=w;G=ya;a[G>>0]=F;a[G+1>>0]=F>>8;a[G+2>>0]=F>>16;a[G+3>>0]=F>>24;ya=ya+4|0;a[ya>>0]=H;a[ya+1>>0]=H>>8;a[ya+2>>0]=H>>16;a[ya+3>>0]=H>>24;c[q>>2]=(c[q>>2]|0)+(u&255);A=A+1|0}if((I|0)==(M|0)){u=a[da>>0]|0;v=e[ea>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=108;break a}if((u&255)>=57){wa=110;break a}J=cc(v|0,0,h&7|0)|0;ya=C;J=x|J;I=w;K=I;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;I=I+4|0;a[I>>0]=ya;a[I+1>>0]=ya>>8;a[I+2>>0]=ya>>16;a[I+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+(u&255);c[fa>>2]=(c[fa>>2]|0)+1;I=M}else{A=I+3|0;G=((aa(A|0)|0)^31)+-1|0;F=A>>>G&1;H=((G<<1)+-2|F)+80|0;u=a[m+H>>0]|0;v=e[n+(H<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=113;break a}if((u&255)>=57){wa=115;break a}ya=cc(v|0,0,h&7|0)|0;v=C;ya=x|ya;h=w;a[h>>0]=ya;a[h+1>>0]=ya>>8;a[h+2>>0]=ya>>16;a[h+3>>0]=ya>>24;w=w+4|0;a[w>>0]=v;a[w+1>>0]=v>>8;a[w+2>>0]=v>>16;a[w+3>>0]=v>>24;w=(c[q>>2]|0)+(u&255)|0;c[q>>2]=w;u=A-((F|2)<>>3)|0;h=d[v>>0]|0;ya=bc(u|0,0,G|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=117;break a}if(G>>>0>=57){wa=119;break a}J=cc(u|0,0,w&7|0)|0;M=C;J=h|J;ya=v;K=ya;a[K>>0]=J;a[K+1>>0]=J>>8;a[K+2>>0]=J>>16;a[K+3>>0]=J>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+G;ya=sa+(H<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1}do if(L>>>0<12){u=P+1|0;v=a[m+u>>0]|0;h=e[n+(u<<1)>>1]|0;w=c[q>>2]|0;x=r+(w>>>3)|0;A=d[x>>0]|0;ya=bc(h|0,0,v&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=123;break a}if((v&255)>=57){wa=125;break a}K=cc(h|0,0,w&7|0)|0;M=C;K=A|K;ya=x;L=ya;a[L>>0]=K;a[L+1>>0]=K>>8;a[L+2>>0]=K>>16;a[L+3>>0]=K>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+(v&255);ya=sa+(u<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1}else{if(L>>>0<72){A=P+-3|0;G=((aa(A|0)|0)^31)+-1|0;F=A>>>G;H=(G<<1)+F+4|0;u=a[m+H>>0]|0;v=e[n+(H<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=129;break a}if((u&255)>=57){wa=131;break a}ya=cc(v|0,0,h&7|0)|0;v=C;ya=x|ya;h=w;a[h>>0]=ya;a[h+1>>0]=ya>>8;a[h+2>>0]=ya>>16;a[h+3>>0]=ya>>24;w=w+4|0;a[w>>0]=v;a[w+1>>0]=v>>8;a[w+2>>0]=v>>16;a[w+3>>0]=v>>24;w=(c[q>>2]|0)+(u&255)|0;c[q>>2]=w;u=A-(F<>>3)|0;h=d[v>>0]|0;ya=bc(u|0,0,G|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=133;break a}if(G>>>0>=57){wa=135;break a}K=cc(u|0,0,w&7|0)|0;M=C;K=h|K;ya=v;L=ya;a[L>>0]=K;a[L+1>>0]=K>>8;a[L+2>>0]=K>>16;a[L+3>>0]=K>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+G;ya=sa+(H<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;break}if(L>>>0<136){u=P+-3|0;F=(u>>>5)+30|0;v=a[m+F>>0]|0;h=e[n+(F<<1)>>1]|0;w=c[q>>2]|0;x=r+(w>>>3)|0;A=d[x>>0]|0;ya=bc(h|0,0,v&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=139;break a}if((v&255)>=57){wa=141;break a}ya=cc(h|0,0,w&7|0)|0;h=C;ya=A|ya;w=x;x=w;a[x>>0]=ya;a[x+1>>0]=ya>>8;a[x+2>>0]=ya>>16;a[x+3>>0]=ya>>24;w=w+4|0;a[w>>0]=h;a[w+1>>0]=h>>8;a[w+2>>0]=h>>16;a[w+3>>0]=h>>24;w=(c[q>>2]|0)+(v&255)|0;c[q>>2]=w;h=r+(w>>>3)|0;x=d[h>>0]|0;w=cc(u&31|0,0,w&7|0)|0;v=C;w=x|w;u=h;h=u;a[h>>0]=w;a[h+1>>0]=w>>8;a[h+2>>0]=w>>16;a[h+3>>0]=w>>24;u=u+4|0;a[u>>0]=v;a[u+1>>0]=v>>8;a[u+2>>0]=v>>16;a[u+3>>0]=v>>24;u=(c[q>>2]|0)+5|0;c[q>>2]=u;v=a[da>>0]|0;h=e[ea>>1]|0;w=r+(u>>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,v&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=143;break a}if((v&255)>=57){wa=145;break a}K=cc(h|0,0,u&7|0)|0;M=C;K=x|K;ya=w;L=ya;a[L>>0]=K;a[L+1>>0]=K>>8;a[L+2>>0]=K>>16;a[L+3>>0]=K>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+(v&255);ya=sa+(F<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;c[ja>>2]=(c[ja>>2]|0)+1;break}if(L>>>0>=2120){u=a[ga>>0]|0;v=e[ha>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=162;break a}if((u&255)>=57){wa=164;break a}ya=cc(v|0,0,h&7|0)|0;h=C;ya=x|ya;v=w;w=v;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;v=v+4|0;a[v>>0]=h;a[v+1>>0]=h>>8;a[v+2>>0]=h>>16;a[v+3>>0]=h>>24;u=(c[q>>2]|0)+(u&255)|0;c[q>>2]=u;v=P+-2115|0;h=r+(u>>>3)|0;w=d[h>>0]|0;if(!((v&-16777216|0)==0&0==0)){wa=166;break a}u=cc(v|0,0,u&7|0)|0;v=C;w=w|u;u=h;h=u;a[h>>0]=w;a[h+1>>0]=w>>8;a[h+2>>0]=w>>16;a[h+3>>0]=w>>24;u=u+4|0;a[u>>0]=v;a[u+1>>0]=v>>8;a[u+2>>0]=v>>16;a[u+3>>0]=v>>24;u=(c[q>>2]|0)+24|0;c[q>>2]=u;v=a[da>>0]|0;h=e[ea>>1]|0;w=r+(u>>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,v&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=168;break a}if((v&255)>=57){wa=170;break a}K=cc(h|0,0,u&7|0)|0;M=C;K=x|K;ya=w;L=ya;a[L>>0]=K;a[L+1>>0]=K>>8;a[L+2>>0]=K>>16;a[L+3>>0]=K>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+(v&255);c[ia>>2]=(c[ia>>2]|0)+1;c[ja>>2]=(c[ja>>2]|0)+1;break}A=P+-67|0;F=(aa(A|0)|0)^31;G=F+28|0;u=a[m+G>>0]|0;v=e[n+(G<<1)>>1]|0;h=c[q>>2]|0;w=r+(h>>>3)|0;x=d[w>>0]|0;ya=bc(v|0,0,u&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=149;break a}if((u&255)>=57){wa=151;break a}ya=cc(v|0,0,h&7|0)|0;v=C;ya=x|ya;h=w;a[h>>0]=ya;a[h+1>>0]=ya>>8;a[h+2>>0]=ya>>16;a[h+3>>0]=ya>>24;w=w+4|0;a[w>>0]=v;a[w+1>>0]=v>>8;a[w+2>>0]=v>>16;a[w+3>>0]=v>>24;w=(c[q>>2]|0)+(u&255)|0;c[q>>2]=w;u=A-(1<>>3)|0;h=d[v>>0]|0;ya=bc(u|0,0,F|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=153;break a}if(F>>>0>=57){wa=155;break a}u=cc(u|0,0,w&7|0)|0;w=C;h=h|u;u=v;v=u;a[v>>0]=h;a[v+1>>0]=h>>8;a[v+2>>0]=h>>16;a[v+3>>0]=h>>24;u=u+4|0;a[u>>0]=w;a[u+1>>0]=w>>8;a[u+2>>0]=w>>16;a[u+3>>0]=w>>24;u=(c[q>>2]|0)+F|0;c[q>>2]=u;v=a[da>>0]|0;h=e[ea>>1]|0;w=r+(u>>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,v&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=157;break a}if((v&255)>=57){wa=159;break a}K=cc(h|0,0,u&7|0)|0;M=C;K=x|K;ya=w;L=ya;a[L>>0]=K;a[L+1>>0]=K>>8;a[L+2>>0]=K>>16;a[L+3>>0]=K>>24;ya=ya+4|0;a[ya>>0]=M;a[ya+1>>0]=M>>8;a[ya+2>>0]=M>>16;a[ya+3>>0]=M>>24;c[q>>2]=(c[q>>2]|0)+(v&255);ya=sa+(G<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;c[ja>>2]=(c[ja>>2]|0)+1}while(0);if(N>>>0>=S>>>0){v=O;break c}v=Q+(P+2)|0;ya=v;ya=d[ya>>0]|d[ya+1>>0]<<8|d[ya+2>>0]<<16|d[ya+3>>0]<<24;v=v+4|0;v=d[v>>0]|d[v+1>>0]<<8|d[v+2>>0]<<16|d[v+3>>0]<<24;Q=lc(ya|0,v|0,-1124073472,1979815)|0;Q=bc(Q|0,C|0,ra|0)|0;x=bc(ya|0,v|0,24)|0;x=lc(x|0,C|0,-1124073472,1979815)|0;x=bc(x|0,C|0,ra|0)|0;A=N-_|0;c[k+(Q<<2)>>2]=A+-3;Q=bc(ya|0,v|0,8)|0;Q=lc(Q|0,C|0,-1124073472,1979815)|0;Q=bc(Q|0,C|0,ra|0)|0;c[k+(Q<<2)>>2]=A+-2;v=bc(ya|0,v|0,16)|0;v=lc(v|0,C|0,-1124073472,1979815)|0;v=bc(v|0,C|0,ra|0)|0;c[k+(v<<2)>>2]=A+-1;x=k+(x<<2)|0;v=c[x>>2]|0;c[x>>2]=A;x=I;A=O;while(1){H=f+v|0;ya=A;u=A;if((d[ya>>0]|d[ya+1>>0]<<8|d[ya+2>>0]<<16|d[ya+3>>0]<<24|0)!=(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24|0))break;if((a[u+4>>0]|0)!=(a[f+(v+4)>>0]|0))break;w=v+5|0;v=0;h=u+5|0;while(1){if(h>>>0>R>>>0)break;ya=f+(w+v)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[ya>>0]|d[ya+1>>0]<<8|d[ya+2>>0]<<16|d[ya+3>>0]<<24|0))break;v=v+4|0;h=h+4|0}while(1){if(h>>>0>=t>>>0)break;if((a[f+(w+v)>>0]|0)!=(a[h>>0]|0))break;v=v+1|0;h=h+1|0}G=v+5|0;K=u+G|0;M=K;L=A-H|0;do if(!G)wa=189;else{A=G;F=u;x=H;while(1){h=a[F>>0]|0;w=a[x>>0]|0;if(h<<24>>24!=w<<24>>24){wa=186;break}A=A+-1|0;if(!A)break;else{F=F+1|0;x=x+1|0}}if((wa|0)==186?(wa=0,h<<24>>24!=w<<24>>24):0){wa=187;break a}if(G>>>0<10){wa=189;break}if(G>>>0<134){G=v+-1|0;I=((aa(G|0)|0)^31)+-1|0;H=G>>>I;J=(I<<1)+H+20|0;h=a[m+J>>0]|0;w=e[n+(J<<1)>>1]|0;x=c[q>>2]|0;A=r+(x>>>3)|0;F=d[A>>0]|0;ya=bc(w|0,0,h&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=196;break a}if((h&255)>=57){wa=198;break a}ya=cc(w|0,0,x&7|0)|0;w=C;ya=F|ya;x=A;a[x>>0]=ya;a[x+1>>0]=ya>>8;a[x+2>>0]=ya>>16;a[x+3>>0]=ya>>24;A=A+4|0;a[A>>0]=w;a[A+1>>0]=w>>8;a[A+2>>0]=w>>16;a[A+3>>0]=w>>24;A=(c[q>>2]|0)+(h&255)|0;c[q>>2]=A;h=G-(H<>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,I|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=200;break a}if(I>>>0>=57){wa=202;break a}O=cc(h|0,0,A&7|0)|0;Q=C;O=x|O;ya=w;P=ya;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;ya=ya+4|0;a[ya>>0]=Q;a[ya+1>>0]=Q>>8;a[ya+2>>0]=Q>>16;a[ya+3>>0]=Q>>24;c[q>>2]=(c[q>>2]|0)+I;ya=sa+(J<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;break}if(G>>>0>=2118){h=a[ga>>0]|0;w=e[ha>>1]|0;x=c[q>>2]|0;A=r+(x>>>3)|0;F=d[A>>0]|0;ya=bc(w|0,0,h&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=215;break a}if((h&255)>=57){wa=217;break a}ya=cc(w|0,0,x&7|0)|0;x=C;ya=F|ya;w=A;A=w;a[A>>0]=ya;a[A+1>>0]=ya>>8;a[A+2>>0]=ya>>16;a[A+3>>0]=ya>>24;w=w+4|0;a[w>>0]=x;a[w+1>>0]=x>>8;a[w+2>>0]=x>>16;a[w+3>>0]=x>>24;h=(c[q>>2]|0)+(h&255)|0;c[q>>2]=h;w=v+-2113|0;x=r+(h>>>3)|0;A=d[x>>0]|0;if(!((w&-16777216|0)==0&0==0)){wa=219;break a}O=cc(w|0,0,h&7|0)|0;Q=C;O=A|O;ya=x;P=ya;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;ya=ya+4|0;a[ya>>0]=Q;a[ya+1>>0]=Q>>8;a[ya+2>>0]=Q>>16;a[ya+3>>0]=Q>>24;c[q>>2]=(c[q>>2]|0)+24;c[ia>>2]=(c[ia>>2]|0)+1;break}G=v+-65|0;H=(aa(G|0)|0)^31;I=H+28|0;h=a[m+I>>0]|0;w=e[n+(I<<1)>>1]|0;x=c[q>>2]|0;A=r+(x>>>3)|0;F=d[A>>0]|0;ya=bc(w|0,0,h&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=206;break a}if((h&255)>=57){wa=208;break a}ya=cc(w|0,0,x&7|0)|0;w=C;ya=F|ya;x=A;a[x>>0]=ya;a[x+1>>0]=ya>>8;a[x+2>>0]=ya>>16;a[x+3>>0]=ya>>24;A=A+4|0;a[A>>0]=w;a[A+1>>0]=w>>8;a[A+2>>0]=w>>16;a[A+3>>0]=w>>24;A=(c[q>>2]|0)+(h&255)|0;c[q>>2]=A;h=G-(1<>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,H|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=210;break a}if(H>>>0>=57){wa=212;break a}O=cc(h|0,0,A&7|0)|0;Q=C;O=x|O;ya=w;P=ya;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;ya=ya+4|0;a[ya>>0]=Q;a[ya+1>>0]=Q>>8;a[ya+2>>0]=Q>>16;a[ya+3>>0]=Q>>24;c[q>>2]=(c[q>>2]|0)+H;ya=sa+(I<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1}while(0);if((wa|0)==189){wa=0;h=v+19|0;w=a[m+h>>0]|0;x=e[n+(h<<1)>>1]|0;A=c[q>>2]|0;F=r+(A>>>3)|0;G=d[F>>0]|0;ya=bc(x|0,0,w&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=190;break a}if((w&255)>=57){wa=192;break a}O=cc(x|0,0,A&7|0)|0;Q=C;O=G|O;ya=F;P=ya;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;ya=ya+4|0;a[ya>>0]=Q;a[ya+1>>0]=Q>>8;a[ya+2>>0]=Q>>16;a[ya+3>>0]=Q>>24;c[q>>2]=(c[q>>2]|0)+(w&255);ya=sa+(h<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1}G=L+3|0;I=((aa(G|0)|0)^31)+-1|0;H=G>>>I&1;J=((I<<1)+-2|H)+80|0;h=a[m+J>>0]|0;w=e[n+(J<<1)>>1]|0;x=c[q>>2]|0;A=r+(x>>>3)|0;F=d[A>>0]|0;ya=bc(w|0,0,h&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=222;break a}if((h&255)>=57){wa=224;break a}ya=cc(w|0,0,x&7|0)|0;w=C;ya=F|ya;x=A;a[x>>0]=ya;a[x+1>>0]=ya>>8;a[x+2>>0]=ya>>16;a[x+3>>0]=ya>>24;A=A+4|0;a[A>>0]=w;a[A+1>>0]=w>>8;a[A+2>>0]=w>>16;a[A+3>>0]=w>>24;A=(c[q>>2]|0)+(h&255)|0;c[q>>2]=A;h=G-((H|2)<>>3)|0;x=d[w>>0]|0;ya=bc(h|0,0,I|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=226;break a}if(I>>>0>=57){wa=228;break a}O=cc(h|0,0,A&7|0)|0;Q=C;O=x|O;ya=w;P=ya;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24;ya=ya+4|0;a[ya>>0]=Q;a[ya+1>>0]=Q>>8;a[ya+2>>0]=Q>>16;a[ya+3>>0]=Q>>24;c[q>>2]=(c[q>>2]|0)+I;ya=sa+(J<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;if(K>>>0>=S>>>0){v=M;break c}v=u+(v+2)|0;ya=v;ya=d[ya>>0]|d[ya+1>>0]<<8|d[ya+2>>0]<<16|d[ya+3>>0]<<24;v=v+4|0;v=d[v>>0]|d[v+1>>0]<<8|d[v+2>>0]<<16|d[v+3>>0]<<24;Q=lc(ya|0,v|0,-1124073472,1979815)|0;Q=bc(Q|0,C|0,ra|0)|0;x=bc(ya|0,v|0,24)|0;x=lc(x|0,C|0,-1124073472,1979815)|0;x=bc(x|0,C|0,ra|0)|0;A=K-_|0;c[k+(Q<<2)>>2]=A+-3;Q=bc(ya|0,v|0,8)|0;Q=lc(Q|0,C|0,-1124073472,1979815)|0;Q=bc(Q|0,C|0,ra|0)|0;c[k+(Q<<2)>>2]=A+-2;v=bc(ya|0,v|0,16)|0;v=lc(v|0,C|0,-1124073472,1979815)|0;v=bc(v|0,C|0,ra|0)|0;c[k+(v<<2)>>2]=A+-1;x=k+(x<<2)|0;v=c[x>>2]|0;c[x>>2]=A;x=L;A=M}w=u+1|0;h=w;u=h;h=h+4|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;M=x;v=A}}while(0);G=v;if(G>>>0>t>>>0){wa=233;break a}h=l-V|0;w=h>>>0<65536?h:65536;if((l|0)==(V|0)){l=0;wa=254;break}x=W+w|0;if(x>>>0>=1048577){l=h;wa=254;break}ac(ta|0,0,1024)|0;l=0;while(1){if(l>>>0>=w>>>0)break;ya=ta+(d[U+(V+l)>>0]<<2)|0;c[ya>>2]=(c[ya>>2]|0)+1;l=l+43|0}ya=w+42|0;l=(ya>>>0)/43|0;if(ya>>>0<11008){z=+(l>>>0);y=+g[19516+(l<<2)>>2]}else{y=+(l>>>0);z=y;y=+Xb(y)}E=(y+.5)*z+200.0;u=0;while(1){if((u|0)==256)break;l=c[ta+(u<<2)>>2]|0;z=+(l>>>0);D=+(d[va+u>>0]|0);if(l>>>0<256)y=+g[19516+(l<<2)>>2];else y=+Xb(z);E=E-z*(D+y);u=u+1|0}if(!(E>=0.0)){l=h;wa=254;break}if(W>>>0<=65536){wa=250;break a}l=20;t=x+-1|0;u=X;while(1){if(!l){l=h;T=Z;V=w;W=x;continue b}V=u&7;ya=8-V|0;ya=l>>>0>>0?l:ya;W=r+(u>>>3)|0;a[W>>0]=(t&(1<>0]&(-1<>>ya;u=u+ya|0}}e:do if((wa|0)==84){wa=0;ya=H-s|0;Z=r+(B>>>3)|0;a[Z>>0]=d[Z>>0]&(1<<(B&7))+255;c[q>>2]=B;vb(ya,1,q,r);Z=(c[q>>2]|0)+7|0;c[q>>2]=Z&-8;dc(r+(Z>>>3)|0,s|0,ya|0)|0;s=(c[q>>2]|0)+(ya<<3)|0;c[q>>2]=s;a[r+(s>>>3)>>0]=0;l=l+(T-H)|0;s=H}else if((wa|0)==254){wa=0;if(G>>>0>>0){F=t-v|0;if(F>>>0>=6210){if(!(((v-s|0)*50|0)>>>0>F>>>0|Y^1)){ya=t-s|0;Y=r+(B>>>3)|0;a[Y>>0]=d[Y>>0]&(1<<(B&7))+255;c[q>>2]=B;vb(ya,1,q,r);Y=(c[q>>2]|0)+7|0;c[q>>2]=Y&-8;dc(r+(Y>>>3)|0,s|0,ya|0)|0;s=(c[q>>2]|0)+(ya<<3)|0;c[q>>2]=s;a[r+(s>>>3)>>0]=0;s=Z;break}if(F>>>0<22594){s=a[ka>>0]|0;t=e[la>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=299;break a}if((s&255)>=57){wa=301;break a}ya=cc(t|0,0,u&7|0)|0;u=C;ya=h|ya;t=v;v=t;a[v>>0]=ya;a[v+1>>0]=ya>>8;a[v+2>>0]=ya>>16;a[v+3>>0]=ya>>24;t=t+4|0;a[t>>0]=u;a[t+1>>0]=u>>8;a[t+2>>0]=u>>16;a[t+3>>0]=u>>24;s=(c[q>>2]|0)+(s&255)|0;c[q>>2]=s;t=F+-6210|0;u=r+(s>>>3)|0;v=d[u>>0]|0;if(!((t&-16384|0)==0&0==0)){wa=303;break a}X=cc(t|0,0,s&7|0)|0;ya=C;X=v|X;w=u;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+14;c[ma>>2]=(c[ma>>2]|0)+1;w=0}else{s=a[na>>0]|0;t=e[oa>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=306;break a}if((s&255)>=57){wa=308;break a}ya=cc(t|0,0,u&7|0)|0;u=C;ya=h|ya;t=v;v=t;a[v>>0]=ya;a[v+1>>0]=ya>>8;a[v+2>>0]=ya>>16;a[v+3>>0]=ya>>24;t=t+4|0;a[t>>0]=u;a[t+1>>0]=u>>8;a[t+2>>0]=u>>16;a[t+3>>0]=u>>24;s=(c[q>>2]|0)+(s&255)|0;c[q>>2]=s;t=F+-22594|0;u=r+(s>>>3)|0;v=d[u>>0]|0;if(!((t&-16777216|0)==0&0==0)){wa=310;break a}X=cc(t|0,0,s&7|0)|0;ya=C;X=v|X;w=u;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+24;c[qa>>2]=(c[qa>>2]|0)+1;w=0}while(1){if(w>>>0>=F>>>0){s=Z;break e}t=d[G+w>>0]|0;s=a[va+t>>0]|0;t=e[ua+(t<<1)>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=314;break a}if((s&255)>=57){wa=316;break a}W=cc(t|0,0,u&7|0)|0;Y=C;W=h|W;ya=v;X=ya;a[X>>0]=W;a[X+1>>0]=W>>8;a[X+2>>0]=W>>16;a[X+3>>0]=W>>24;ya=ya+4|0;a[ya>>0]=Y;a[ya+1>>0]=Y>>8;a[ya+2>>0]=Y>>16;a[ya+3>>0]=Y>>24;c[q>>2]=(c[q>>2]|0)+(s&255);w=w+1|0}}do if(F>>>0<6){s=F+40|0;t=a[m+s>>0]|0;u=e[n+(s<<1)>>1]|0;v=c[q>>2]|0;h=r+(v>>>3)|0;w=d[h>>0]|0;ya=bc(u|0,0,t&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=258;break a}if((t&255)>=57){wa=260;break a}X=cc(u|0,0,v&7|0)|0;ya=C;X=w|X;w=h;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+(t&255);w=sa+(s<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=0}else{if(F>>>0<130){w=F+-2|0;A=((aa(w|0)|0)^31)+-1|0;x=w>>>A;B=(A<<1)+x+42|0;s=a[m+B>>0]|0;t=e[n+(B<<1)>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=264;break a}if((s&255)>=57){wa=266;break a}ya=cc(t|0,0,u&7|0)|0;t=C;ya=h|ya;u=v;a[u>>0]=ya;a[u+1>>0]=ya>>8;a[u+2>>0]=ya>>16;a[u+3>>0]=ya>>24;v=v+4|0;a[v>>0]=t;a[v+1>>0]=t>>8;a[v+2>>0]=t>>16;a[v+3>>0]=t>>24;v=(c[q>>2]|0)+(s&255)|0;c[q>>2]=v;s=w-(x<>>3)|0;u=d[t>>0]|0;ya=bc(s|0,0,A|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=268;break a}if(A>>>0>=57){wa=270;break a}X=cc(s|0,0,v&7|0)|0;ya=C;X=u|X;w=t;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+A;w=sa+(B<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=0;break}if(F>>>0>=2114){s=a[$>>0]|0;t=e[ba>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=283;break a}if((s&255)>=57){wa=285;break a}ya=cc(t|0,0,u&7|0)|0;u=C;ya=h|ya;t=v;v=t;a[v>>0]=ya;a[v+1>>0]=ya>>8;a[v+2>>0]=ya>>16;a[v+3>>0]=ya>>24;t=t+4|0;a[t>>0]=u;a[t+1>>0]=u>>8;a[t+2>>0]=u>>16;a[t+3>>0]=u>>24;s=(c[q>>2]|0)+(s&255)|0;c[q>>2]=s;t=F+-2114|0;u=r+(s>>>3)|0;v=d[u>>0]|0;if(!((t&-4096|0)==0&0==0)){wa=287;break a}X=cc(t|0,0,s&7|0)|0;ya=C;X=v|X;w=u;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+12;c[ca>>2]=(c[ca>>2]|0)+1;w=0;break}w=F+-66|0;x=(aa(w|0)|0)^31;A=x+50|0;s=a[m+A>>0]|0;t=e[n+(A<<1)>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=274;break a}if((s&255)>=57){wa=276;break a}ya=cc(t|0,0,u&7|0)|0;t=C;ya=h|ya;u=v;a[u>>0]=ya;a[u+1>>0]=ya>>8;a[u+2>>0]=ya>>16;a[u+3>>0]=ya>>24;v=v+4|0;a[v>>0]=t;a[v+1>>0]=t>>8;a[v+2>>0]=t>>16;a[v+3>>0]=t>>24;v=(c[q>>2]|0)+(s&255)|0;c[q>>2]=v;s=w-(1<>>3)|0;u=d[t>>0]|0;ya=bc(s|0,0,x|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=278;break a}if(x>>>0>=57){wa=280;break a}X=cc(s|0,0,v&7|0)|0;ya=C;X=u|X;w=t;Y=w;a[Y>>0]=X;a[Y+1>>0]=X>>8;a[Y+2>>0]=X>>16;a[Y+3>>0]=X>>24;w=w+4|0;a[w>>0]=ya;a[w+1>>0]=ya>>8;a[w+2>>0]=ya>>16;a[w+3>>0]=ya>>24;c[q>>2]=(c[q>>2]|0)+x;w=sa+(A<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=0}while(0);while(1){if(w>>>0>=F>>>0){s=Z;break e}t=d[G+w>>0]|0;s=a[va+t>>0]|0;t=e[ua+(t<<1)>>1]|0;u=c[q>>2]|0;v=r+(u>>>3)|0;h=d[v>>0]|0;ya=bc(t|0,0,s&255|0)|0;if(!((ya|0)==0&(C|0)==0)){wa=291;break a}if((s&255)>=57){wa=293;break a}W=cc(t|0,0,u&7|0)|0;Y=C;W=h|W;ya=v;X=ya;a[X>>0]=W;a[X+1>>0]=W>>8;a[X+2>>0]=W>>16;a[X+3>>0]=W>>24;ya=ya+4|0;a[ya>>0]=Y;a[ya+1>>0]=Y>>8;a[ya+2>>0]=Y>>16;a[ya+3>>0]=Y>>24;c[q>>2]=(c[q>>2]|0)+(s&255);w=w+1|0}}else s=Z}while(0);if(!l){wa=320;break}u=l>>>0<98304?l:98304;B=c[q>>2]|0;vb(u,0,q,r);t=r+((c[q>>2]|0)>>>3)|0;Z=d[t>>0]|0;ya=t;a[ya>>0]=Z;a[ya+1>>0]=Z>>8;a[ya+2>>0]=Z>>16;a[ya+3>>0]=Z>>24;t=t+4|0;a[t>>0]=0;a[t+1>>0]=0;a[t+2>>0]=0;a[t+3>>0]=0;c[q>>2]=(c[q>>2]|0)+13;t=wb(b,s,u,va,ua,q,r)|0;xb(sa,m,n,q,r)}switch(wa|0){case 24:{pa(405740,405401,539,405439);break}case 26:{pa(405474,405401,544,405439);break}case 32:{pa(405779,405401,559,405439);break}case 34:{pa(405800,405401,560,405439);break}case 48:{pa(405815,405401,579,405439);break}case 52:{pa(406196,406218,54,406251);break}case 54:{pa(406267,406218,55,406251);break}case 58:{pa(406196,406218,54,406251);break}case 60:{pa(406267,406218,55,406251);break}case 62:{pa(406196,406218,54,406251);break}case 64:{pa(406267,406218,55,406251);break}case 68:{pa(406196,406218,54,406251);break}case 70:{pa(406267,406218,55,406251);break}case 72:{pa(406196,406218,54,406251);break}case 74:{pa(406267,406218,55,406251);break}case 77:{pa(406196,406218,54,406251);break}case 79:{pa(406267,406218,55,406251);break}case 81:{pa(406196,406218,54,406251);break}case 87:{pa(406196,406218,54,406251);break}case 89:{pa(406267,406218,55,406251);break}case 91:{pa(406196,406218,54,406251);break}case 94:{pa(406196,406218,54,406251);break}case 96:{pa(406267,406218,55,406251);break}case 98:{pa(406196,406218,54,406251);break}case 102:{pa(406196,406218,54,406251);break}case 104:{pa(406267,406218,55,406251);break}case 108:{pa(406196,406218,54,406251);break}case 110:{pa(406267,406218,55,406251);break}case 113:{pa(406196,406218,54,406251);break}case 115:{pa(406267,406218,55,406251);break}case 117:{pa(406196,406218,54,406251);break}case 119:{pa(406267,406218,55,406251);break}case 123:{pa(406196,406218,54,406251);break}case 125:{pa(406267,406218,55,406251);break}case 129:{pa(406196,406218,54,406251);break}case 131:{pa(406267,406218,55,406251);break}case 133:{pa(406196,406218,54,406251);break}case 135:{pa(406267,406218,55,406251);break}case 139:{pa(406196,406218,54,406251);break}case 141:{pa(406267,406218,55,406251);break}case 143:{pa(406196,406218,54,406251);break}case 145:{pa(406267,406218,55,406251);break}case 149:{pa(406196,406218,54,406251);break}case 151:{pa(406267,406218,55,406251);break}case 153:{pa(406196,406218,54,406251);break}case 155:{pa(406267,406218,55,406251);break}case 157:{pa(406196,406218,54,406251);break}case 159:{pa(406267,406218,55,406251);break}case 162:{pa(406196,406218,54,406251);break}case 164:{pa(406267,406218,55,406251);break}case 166:{pa(406196,406218,54,406251);break}case 168:{pa(406196,406218,54,406251);break}case 170:{pa(406267,406218,55,406251);break}case 187:{pa(405815,405401,638,405439);break}case 190:{pa(406196,406218,54,406251);break}case 192:{pa(406267,406218,55,406251);break}case 196:{pa(406196,406218,54,406251);break}case 198:{pa(406267,406218,55,406251);break}case 200:{pa(406196,406218,54,406251);break}case 202:{pa(406267,406218,55,406251);break}case 206:{pa(406196,406218,54,406251);break}case 208:{pa(406267,406218,55,406251);break}case 210:{pa(406196,406218,54,406251);break}case 212:{pa(406267,406218,55,406251);break}case 215:{pa(406196,406218,54,406251);break}case 217:{pa(406267,406218,55,406251);break}case 219:{pa(406196,406218,54,406251);break}case 222:{pa(406196,406218,54,406251);break}case 224:{pa(406267,406218,55,406251);break}case 226:{pa(406196,406218,54,406251);break}case 228:{pa(406267,406218,55,406251);break}case 233:{pa(405853,405401,671,405439);break}case 250:{pa(405503,405401,681,405439);break}case 258:{pa(406196,406218,54,406251);break}case 260:{pa(406267,406218,55,406251);break}case 264:{pa(406196,406218,54,406251);break}case 266:{pa(406267,406218,55,406251);break}case 268:{pa(406196,406218,54,406251);break}case 270:{pa(406267,406218,55,406251);break}case 274:{pa(406196,406218,54,406251);break}case 276:{pa(406267,406218,55,406251);break}case 278:{pa(406196,406218,54,406251);break}case 280:{pa(406267,406218,55,406251);break}case 283:{pa(406196,406218,54,406251);break}case 285:{pa(406267,406218,55,406251);break}case 287:{pa(406196,406218,54,406251);break}case 291:{pa(406196,406218,54,406251);break}case 293:{pa(406267,406218,55,406251);break}case 299:{pa(406196,406218,54,406251);break}case 301:{pa(406267,406218,55,406251);break}case 303:{pa(406196,406218,54,406251);break}case 306:{pa(406196,406218,54,406251);break}case 308:{pa(406267,406218,55,406251);break}case 310:{pa(406196,406218,54,406251);break}case 314:{pa(406196,406218,54,406251);break}case 316:{pa(406267,406218,55,406251);break}case 320:if(j){b=c[q>>2]|0;wa=r+(b>>>3)|0;k=d[wa>>0]|0;b=cc(1,0,b&7|0)|0;ya=C;b=k|b;k=wa;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;wa=wa+4|0;a[wa>>0]=ya;a[wa+1>>0]=ya>>8;a[wa+2>>0]=ya>>16;a[wa+3>>0]=ya>>24;wa=(c[q>>2]|0)+1|0;c[q>>2]=wa;ya=r+(wa>>>3)|0;k=d[ya>>0]|0;r=cc(1,0,wa&7|0)|0;wa=C;r=k|r;k=ya;a[k>>0]=r;a[k+1>>0]=r>>8;a[k+2>>0]=r>>16;a[k+3>>0]=r>>24;ya=ya+4|0;a[ya>>0]=wa;a[ya+1>>0]=wa>>8;a[ya+2>>0]=wa>>16;a[ya+3>>0]=wa>>24;c[q>>2]=(c[q>>2]|0)+8&-8;i=xa;return}else{a[p>>0]=0;c[o>>2]=0;xb(sa,m,n,o,p);i=xa;return}}}function vb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=g+((c[f>>2]|0)>>>3)|0;j=d[h>>0]|0;i=h;a[i>>0]=j;a[i+1>>0]=j>>8;a[i+2>>0]=j>>16;a[i+3>>0]=j>>24;h=h+4|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;i=g+(h>>>3)|0;j=d[i>>0]|0;if(b>>>0<65537){k=i;h=k;a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;k=(c[f>>2]|0)+2|0;c[f>>2]=k;h=b+-1|0;i=g+(k>>>3)|0;j=d[i>>0]|0;if(!((h&-65536|0)==0&0==0))pa(406196,406218,54,406251);h=cc(h|0,0,k&7|0)|0;b=C;h=j|h;k=i;j=k;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;k=k+4|0;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;k=(c[f>>2]|0)+16|0;c[f>>2]=k;e=e&1;b=k>>>3;g=g+b|0;b=a[g>>0]|0;b=b&255;k=k&7;k=cc(e|0,0,k|0)|0;e=C;k=b|k;b=g;a[b>>0]=k;a[b+1>>0]=k>>8;a[b+2>>0]=k>>16;a[b+3>>0]=k>>24;g=g+4|0;a[g>>0]=e;a[g+1>>0]=e>>8;a[g+2>>0]=e>>16;a[g+3>>0]=e>>24;g=c[f>>2]|0;g=g+1|0;c[f>>2]=g;return}else{k=cc(1,0,h&7|0)|0;h=C;j=j|k;k=i;i=k;a[i>>0]=j;a[i+1>>0]=j>>8;a[i+2>>0]=j>>16;a[i+3>>0]=j>>24;k=k+4|0;a[k>>0]=h;a[k+1>>0]=h>>8;a[k+2>>0]=h>>16;a[k+3>>0]=h>>24;k=(c[f>>2]|0)+2|0;c[f>>2]=k;h=b+-1|0;i=g+(k>>>3)|0;j=d[i>>0]|0;if(!((h&-1048576|0)==0&0==0))pa(406196,406218,54,406251);h=cc(h|0,0,k&7|0)|0;b=C;h=j|h;k=i;j=k;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;k=k+4|0;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;k=(c[f>>2]|0)+20|0;c[f>>2]=k;e=e&1;b=k>>>3;g=g+b|0;b=a[g>>0]|0;b=b&255;k=k&7;k=cc(e|0,0,k|0)|0;e=C;k=b|k;b=g;a[b>>0]=k;a[b+1>>0]=k>>8;a[b+2>>0]=k>>16;a[b+3>>0]=k>>24;g=g+4|0;a[g>>0]=e;a[g+1>>0]=e>>8;a[g+2>>0]=e>>16;a[g+3>>0]=e>>24;g=c[f>>2]|0;g=g+1|0;c[f>>2]=g;return}}function wb(a,b,e,f,g,h,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;n=i;i=i+1024|0;m=n;ac(m|0,0,1024)|0;a:do if(e>>>0<32768){k=0;while(1){if((k|0)==(e|0)){k=0;break}l=m+((d[b+k>>0]|0)<<2)|0;c[l>>2]=(c[l>>2]|0)+1;k=k+1|0}while(1){if((k|0)==256){l=e;break a}b=m+(k<<2)|0;o=c[b>>2]|0;l=(o>>>0<11?o:11)<<1;c[b>>2]=o+l;e=e+l|0;k=k+1|0}}else{k=0;while(1){if(k>>>0>=e>>>0)break;o=m+((d[b+k>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;k=k+29|0}e=((e+28|0)>>>0)/29|0;k=0;while(1){if((k|0)==256){l=e;break a}l=m+(k<<2)|0;b=c[l>>2]|0;o=(b>>>0<11?b:11)<<1|1;c[l>>2]=b+o;e=e+o|0;k=k+1|0}}while(0);$a(a,m,l,8,f,g,h,j);e=0;b=0;while(1){if((b|0)==256)break;k=c[m+(b<<2)>>2]|0;if(k)e=e+(_(k,d[f+b>>0]|0)|0)|0;b=b+1|0}i=n;return ((e*125|0)>>>0)/(l>>>0)|0|0}function xb(e,f,g,h,j){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+1872|0;r=s+704|0;q=s;o=s+1736|0;ac(q|0,0,704)|0;Hb(e,64,15,r,f);p=f+64|0;Hb(e+256|0,64,14,r,p);l=q;m=f;n=l+24|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));l=f+40|0;k=l;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;e=q+24|0;c[e>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[e+4>>2]=l;e=f+24|0;l=e;k=l;l=l+4|0;l=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;n=q+32|0;c[n>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[n+4>>2]=l;n=f+48|0;l=n;n=n+4|0;n=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;k=q+40|0;c[k>>2]=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;c[k+4>>2]=n;k=f+32|0;n=k;l=n;n=n+4|0;n=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;m=q+48|0;c[m>>2]=d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24;c[m+4>>2]=n;m=f+56|0;n=m;m=m+4|0;m=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;l=q+56|0;c[l>>2]=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;c[l+4>>2]=m;Jb(q,64,o);l=g;m=o;n=l+48|0;do{b[l>>1]=b[m>>1]|0;l=l+2|0;m=m+2|0}while((l|0)<(n|0));l=g+48|0;n=o+64|0;b[l>>1]=b[n>>1]|0;b[l+2>>1]=b[n+2>>1]|0;b[l+4>>1]=b[n+4>>1]|0;b[l+6>>1]=b[n+6>>1]|0;b[l+8>>1]=b[n+8>>1]|0;b[l+10>>1]=b[n+10>>1]|0;b[l+12>>1]=b[n+12>>1]|0;b[l+14>>1]=b[n+14>>1]|0;l=g+64|0;n=o+96|0;b[l>>1]=b[n>>1]|0;b[l+2>>1]=b[n+2>>1]|0;b[l+4>>1]=b[n+4>>1]|0;b[l+6>>1]=b[n+6>>1]|0;b[l+8>>1]=b[n+8>>1]|0;b[l+10>>1]=b[n+10>>1]|0;b[l+12>>1]=b[n+12>>1]|0;b[l+14>>1]=b[n+14>>1]|0;l=g+80|0;n=o+48|0;b[l>>1]=b[n>>1]|0;b[l+2>>1]=b[n+2>>1]|0;b[l+4>>1]=b[n+4>>1]|0;b[l+6>>1]=b[n+6>>1]|0;b[l+8>>1]=b[n+8>>1]|0;b[l+10>>1]=b[n+10>>1]|0;b[l+12>>1]=b[n+12>>1]|0;b[l+14>>1]=b[n+14>>1]|0;l=g+96|0;n=o+80|0;b[l>>1]=b[n>>1]|0;b[l+2>>1]=b[n+2>>1]|0;b[l+4>>1]=b[n+4>>1]|0;b[l+6>>1]=b[n+6>>1]|0;b[l+8>>1]=b[n+8>>1]|0;b[l+10>>1]=b[n+10>>1]|0;b[l+12>>1]=b[n+12>>1]|0;b[l+14>>1]=b[n+14>>1]|0;l=g+112|0;n=o+112|0;b[l>>1]=b[n>>1]|0;b[l+2>>1]=b[n+2>>1]|0;b[l+4>>1]=b[n+4>>1]|0;b[l+6>>1]=b[n+6>>1]|0;b[l+8>>1]=b[n+8>>1]|0;b[l+10>>1]=b[n+10>>1]|0;b[l+12>>1]=b[n+12>>1]|0;b[l+14>>1]=b[n+14>>1]|0;Jb(p,64,g+128|0);l=q;n=l+64|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));g=f;o=g;g=g+4|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;n=q;c[n>>2]=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;c[n+4>>2]=g;n=f+8|0;g=n;n=n+4|0;n=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;o=q+64|0;c[o>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[o+4>>2]=n;o=f+16|0;n=o;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;g=q+128|0;c[g>>2]=d[n>>0]|d[n+1>>0]<<8|d[n+2>>0]<<16|d[n+3>>0]<<24;c[g+4>>2]=o;g=e;e=g;g=g+4|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;o=q+192|0;c[o>>2]=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;c[o+4>>2]=g;o=k;g=o;o=o+4|0;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;e=q+384|0;c[e>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[e+4>>2]=o;e=0;while(1){if((e|0)==8)break;o=e<<3;a[q+(o+128)>>0]=a[f+(e+40)>>0]|0;a[q+(o+256)>>0]=a[f+(e+48)>>0]|0;a[q+(o+448)>>0]=a[f+(e+56)>>0]|0;e=e+1|0}_a(q,704,r,h,j);_a(p,64,r,h,j);i=s;return}function yb(f,h,j,k,l,m,n,o,p,q){f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0.0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0,B=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0;Va=i;i=i+4560|0;Ta=Va+2376|0;Ma=Va+128|0;La=Va+4176|0;Ra=Va+4304|0;Qa=Va+3664|0;Na=Va;Ka=Va+3408|0;Oa=Va+1864|0;Sa=Va+840|0;Pa=Va+832|0;Fa=l;Ga=m;Ha=64-((aa(o|0)|0)^31)|0;Ia=(o|0)==0;Ja=o>>>0<2147483649;T=o+-1|0;Ea=(T&o|0)==0;S=bc(16777215,-1,Ha|0)|0;S=(T|0)==(S|0);T=h;U=m;V=l;W=Oa+4|0;X=Oa+8|0;Y=Oa+256|0;Z=Oa+336|0;_=Oa+256|0;$=Na+64|0;ba=Na+24|0;ca=Ma+24|0;da=Ma+32|0;ea=Na+48|0;fa=Ma+40|0;ga=Na+8|0;ha=Ma+48|0;ia=Na+56|0;ja=Ma+56|0;ka=Na+16|0;la=La+48|0;ma=Ka+16|0;na=La+80|0;oa=Ka+32|0;qa=La+112|0;ra=Ka+48|0;sa=Ka+96|0;ta=La+64|0;ua=Ka+112|0;va=La+96|0;wa=Ka+128|0;xa=Ma+64|0;ya=Na+32|0;za=Ma+128|0;Aa=Na+40|0;Ba=Ma+192|0;Ca=Ma+384|0;R=Sa;Da=Sa+1024|0;O=h;a:while(1){if(!j){Ua=155;break}P=j>>>0<131072?j:131072;c[Pa>>2]=Fa;Q=O+P|0;o=O;if(Ia){Ua=4;break}if(!Ja){Ua=6;break}if(!Ea){Ua=8;break}if(!S){Ua=10;break}b:do if(P>>>0>15){A=P+-6|0;N=j+-16|0;N=O+(A>>>0>>0?A:N)|0;A=O+1|0;t=A;s=t;t=t+4|0;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;L=-1;x=Ga;while(1){s=lc(s|0,t|0,-1480785920,7733)|0;s=bc(s|0,C|0,Ha|0)|0;J=o;if(J>>>0>=A>>>0){Ua=15;break a}F=0-L|0;K=A;D=32;while(1){G=K;t=D;D=D+1|0;M=K;I=M;M=M+4|0;M=lc(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24|0,d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24|0,-1480785920,7733)|0;M=bc(M|0,C|0,Ha|0)|0;if((s|0)!=(M|0)){Ua=17;break a}A=K+(t>>>5)|0;if(A>>>0>N>>>0)break b;B=A;t=B;B=B+4|0;B=lc(d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0,d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24|0,-1480785920,7733)|0;B=bc(B|0,C|0,Ha|0)|0;t=K+F|0;if(((d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24|0)==(d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)?(a[K+4>>0]|0)==(a[K+(4-L)>>0]|0):0)?((F|0)<0?(a[K+5>>0]|0)==(a[K+(5-L)>>0]|0):0):0){Ua=22;break}s=n+(s<<2)|0;y=c[s>>2]|0;t=h+y|0;if((y|0)<0){Ua=24;break a}if(t>>>0>=K>>>0){Ua=26;break a}c[s>>2]=G-T;if((d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24|0)!=(d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)){s=B;K=A;continue}if((a[K+4>>0]|0)!=(a[h+(y+4)>>0]|0)){s=B;K=A;continue}if((a[K+5>>0]|0)==(a[h+(y+5)>>0]|0))break;else{s=B;K=A}}if((Ua|0)==22){Ua=0;c[n+(s<<2)>>2]=G-T}A=t;M=O+(P+-4)|0;s=0;y=K+6|0;while(1){if(y>>>0>M>>>0){I=s;s=y;break}I=t+(s+6)|0;if((d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24|0)!=(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24|0)){I=s;s=y;break}s=s+4|0;y=y+4|0}while(1){if(s>>>0>=Q>>>0)break;if((a[t+(I+6)>>0]|0)!=(a[s>>0]|0))break;I=I+1|0;s=s+1|0}H=I+6|0;y=G-A|0;F=G-o|0;G=K+H|0;o=G;c:do if(H){B=H;D=K;while(1){s=a[D>>0]|0;A=a[t>>0]|0;if(s<<24>>24!=A<<24>>24)break;B=B+-1|0;if(!B)break c;else{D=D+1|0;t=t+1|0}}if(s<<24>>24!=A<<24>>24){Ua=41;break a}}while(0);do if(F>>>0>=6){if(F>>>0<130){A=F+-2|0;D=((aa(A|0)|0)^31)+-1|0;B=A>>>D;c[c[Pa>>2]>>2]=(D<<1)+B+2|A-(B<>>0<2114){B=F+-66|0;D=(aa(B|0)|0)^31;c[c[Pa>>2]>>2]=D+10|B-(1<>>0<6210){c[c[Pa>>2]>>2]=(F<<8)+-541184|21;break}s=F<<8;if(F>>>0<22594){c[c[Pa>>2]>>2]=s+-1589760|22;break}else{c[c[Pa>>2]>>2]=s+-5784064|23;break}}else c[c[Pa>>2]>>2]=F;while(0);c[Pa>>2]=(c[Pa>>2]|0)+4;dc(x|0,J|0,F|0)|0;x=x+F|0;if((y|0)==(L|0)){c[c[Pa>>2]>>2]=64;s=c[Pa>>2]|0;y=L}else{J=y+3|0;s=((aa(J|0)|0)^31)+-1|0;L=J>>>s&1;c[c[Pa>>2]>>2]=((s<<1)+-2|L)+80|J-((L|2)<>2]|0}s=s+4|0;c[Pa>>2]=s;do if(H>>>0>=12){if(H>>>0<72){H=I+-2|0;L=((aa(H|0)|0)^31)+-1|0;J=H>>>L;c[s>>2]=(L<<1)+J+28|H-(J<>2]=(c[Pa>>2]|0)+4;break}if(H>>>0<136){L=I+-2|0;c[s>>2]=(L>>>5)+54|L<<8&7936;L=(c[Pa>>2]|0)+4|0;c[Pa>>2]=L;c[L>>2]=64;c[Pa>>2]=(c[Pa>>2]|0)+4;break}if(H>>>0<2120){J=I+-66|0;L=(aa(J|0)|0)^31;c[s>>2]=L+52|J-(1<>2]|0)+4|0;c[Pa>>2]=L;c[L>>2]=64;c[Pa>>2]=(c[Pa>>2]|0)+4;break}else{c[s>>2]=(H<<8)+-542720|63;L=(c[Pa>>2]|0)+4|0;c[Pa>>2]=L;c[L>>2]=64;c[Pa>>2]=(c[Pa>>2]|0)+4;break}}else{c[s>>2]=I+26;c[Pa>>2]=(c[Pa>>2]|0)+4}while(0);if(G>>>0>=N>>>0)break b;t=K+(I+1)|0;L=t;L=d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;H=lc(L|0,t|0,-1480785920,7733)|0;H=bc(H|0,C|0,Ha|0)|0;J=G-T|0;c[n+(H<<2)>>2]=J+-5;H=bc(L|0,t|0,8)|0;H=lc(H|0,C|0,-1480785920,7733)|0;H=bc(H|0,C|0,Ha|0)|0;c[n+(H<<2)>>2]=J+-4;t=bc(L|0,t|0,16)|0;t=lc(t|0,C|0,-1480785920,7733)|0;t=bc(t|0,C|0,Ha|0)|0;c[n+(t<<2)>>2]=J+-3;t=K+(I+4)|0;K=t;K=d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;L=bc(K|0,t|0,16)|0;L=lc(L|0,C|0,-1480785920,7733)|0;L=bc(L|0,C|0,Ha|0)|0;I=lc(K|0,t|0,-1480785920,7733)|0;I=bc(I|0,C|0,Ha|0)|0;c[n+(I<<2)>>2]=J+-2;t=bc(K|0,t|0,8)|0;t=lc(t|0,C|0,-1480785920,7733)|0;t=bc(t|0,C|0,Ha|0)|0;c[n+(t<<2)>>2]=J+-1;L=n+(L<<2)|0;t=c[L>>2]|0;c[L>>2]=J;while(1){B=h+t|0;L=o;s=o;if((d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24|0)!=(d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24|0))break;if((a[s+4>>0]|0)!=(a[h+(t+4)>>0]|0))break;if((a[s+5>>0]|0)!=(a[h+(t+5)>>0]|0))break;A=t+6|0;t=0;y=s+6|0;while(1){if(y>>>0>M>>>0)break;L=h+(A+t)|0;if((d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24|0)!=(d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24|0))break;t=t+4|0;y=y+4|0}while(1){if(y>>>0>=Q>>>0)break;if((a[h+(A+t)>>0]|0)!=(a[y>>0]|0))break;t=t+1|0;y=y+1|0}G=t+6|0;H=s+G|0;I=H;y=o-B|0;do if(G){D=G;F=s;while(1){o=a[F>>0]|0;A=a[B>>0]|0;if(o<<24>>24!=A<<24>>24){Ua=80;break}D=D+-1|0;if(!D)break;else{F=F+1|0;B=B+1|0}}if((Ua|0)==80?(Ua=0,o<<24>>24!=A<<24>>24):0){Ua=81;break a}if(G>>>0<10){Ua=83;break}if(G>>>0<134){L=((aa(t|0)|0)^31)+-1|0;K=t>>>L;c[c[Pa>>2]>>2]=(L<<1)+K+44|t-(K<>>0<2118){K=t+-64|0;L=(aa(K|0)|0)^31;c[c[Pa>>2]>>2]=L+52|K-(1<>2]>>2]=(G<<8)+-542208|63;break}}else Ua=83;while(0);if((Ua|0)==83){Ua=0;c[c[Pa>>2]>>2]=t+44}L=(c[Pa>>2]|0)+4|0;c[Pa>>2]=L;G=y+3|0;K=((aa(G|0)|0)^31)+-1|0;J=G>>>K&1;c[L>>2]=((K<<1)+-2|J)+80|G-((J|2)<>2]=(c[Pa>>2]|0)+4;if(H>>>0>=N>>>0){o=I;break b}K=s+(t+1)|0;o=K;o=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;K=K+4|0;K=d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24;J=lc(o|0,K|0,-1480785920,7733)|0;J=bc(J|0,C|0,Ha|0)|0;L=H-T|0;c[n+(J<<2)>>2]=L+-5;J=bc(o|0,K|0,8)|0;J=lc(J|0,C|0,-1480785920,7733)|0;J=bc(J|0,C|0,Ha|0)|0;c[n+(J<<2)>>2]=L+-4;K=bc(o|0,K|0,16)|0;K=lc(K|0,C|0,-1480785920,7733)|0;K=bc(K|0,C|0,Ha|0)|0;c[n+(K<<2)>>2]=L+-3;t=s+(t+4)|0;K=t;K=d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24;t=t+4|0;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;o=bc(K|0,t|0,16)|0;o=lc(o|0,C|0,-1480785920,7733)|0;o=bc(o|0,C|0,Ha|0)|0;J=lc(K|0,t|0,-1480785920,7733)|0;J=bc(J|0,C|0,Ha|0)|0;c[n+(J<<2)>>2]=L+-2;t=bc(K|0,t|0,8)|0;t=lc(t|0,C|0,-1480785920,7733)|0;t=bc(t|0,C|0,Ha|0)|0;c[n+(t<<2)>>2]=L+-1;o=n+(o<<2)|0;t=c[o>>2]|0;c[o>>2]=L;o=I}A=s+1|0;t=A;s=t;t=t+4|0;s=d[s>>0]|d[s+1>>0]<<8|d[s+2>>0]<<16|d[s+3>>0]<<24;t=d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24;L=y}}else x=Ga;while(0);t=o;if(t>>>0>Q>>>0){Ua=93;break}if(t>>>0>>0){o=Q-o|0;do if(o>>>0>=6){if(o>>>0<130){L=o+-2|0;N=((aa(L|0)|0)^31)+-1|0;M=L>>>N;c[c[Pa>>2]>>2]=(N<<1)+M+2|L-(M<>>0<2114){M=o+-66|0;N=(aa(M|0)|0)^31;c[c[Pa>>2]>>2]=N+10|M-(1<>>0<6210){c[c[Pa>>2]>>2]=(o<<8)+-541184|21;break}s=o<<8;if(o>>>0<22594){c[c[Pa>>2]>>2]=s+-1589760|22;break}else{c[c[Pa>>2]>>2]=s+-5784064|23;break}}else c[c[Pa>>2]>>2]=o;while(0);c[Pa>>2]=(c[Pa>>2]|0)+4;dc(x|0,t|0,o|0)|0;x=x+o|0}A=x-U|0;r=+(P>>>0);if(!(+(A>>>0)>>0>=P>>>0){o=R;r=0.0;y=0;break}N=Sa+(d[O+o>>0]<<2)|0;c[N>>2]=(c[N>>2]|0)+1;o=o+43|0}while(1){if(o>>>0>=Da>>>0)break;s=c[o>>2]|0;u=+(s>>>0);if(s>>>0<256)z=+g[19516+(s<<2)>>2];else z=+Xb(u);t=c[o+4>>2]|0;v=+(t>>>0);if(t>>>0<256)w=+g[19516+(t<<2)>>2];else w=+Xb(v);o=o+8|0;r=r-u*z-v*w;y=y+s+t|0}z=E/43.0;v=+(y>>>0);if(!y)w=v;else{if(y>>>0<256)u=+g[19516+(y<<2)>>2];else u=+Xb(v);w=v;r=r+v*u}if(!((r>2]|0)+7|0;c[p>>2]=N&-8;dc(q+(N>>>3)|0,O|0,P|0)|0;O=(c[p>>2]|0)+(P<<3)|0;c[p>>2]=O;a[q+(O>>>3)>>0]=0}else Ua=126}else Ua=126;if((Ua|0)==126){Ua=0;G=(c[Pa>>2]|0)-V>>2;zb(P,0,p,q);s=q+((c[p>>2]|0)>>>3)|0;O=d[s>>0]|0;t=s;a[t>>0]=O;a[t+1>>0]=O>>8;a[t+2>>0]=O>>16;a[t+3>>0]=O>>24;s=s+4|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;c[p>>2]=(c[p>>2]|0)+13;ac(Sa|0,0,1024)|0;s=Na;t=s+128|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));ac(Ka|0,0,256)|0;ac(Oa|0,0,512)|0;o=x-U|0;s=0;while(1){if((s|0)==(o|0))break;O=Sa+(d[m+s>>0]<<2)|0;c[O>>2]=(c[O>>2]|0)+1;s=s+1|0}$a(f,Sa,A,8,Ra,Qa,p,q);o=0;while(1){if((o|0)==(G|0))break;O=Oa+((c[l+(o<<2)>>2]&255)<<2)|0;c[O>>2]=(c[O>>2]|0)+1;o=o+1|0}c[W>>2]=(c[W>>2]|0)+1;c[X>>2]=(c[X>>2]|0)+1;c[Y>>2]=(c[Y>>2]|0)+1;c[Z>>2]=(c[Z>>2]|0)+1;ac(Ma|0,0,704)|0;Hb(Oa,64,15,Ta,Na);Hb(_,64,14,Ta,$);c[Ma>>2]=c[ba>>2];c[Ma+4>>2]=c[ba+4>>2];c[Ma+8>>2]=c[ba+8>>2];c[Ma+12>>2]=c[ba+12>>2];c[Ma+16>>2]=c[ba+16>>2];c[Ma+20>>2]=c[ba+20>>2];t=Na;o=c[t+4>>2]|0;s=ca;c[s>>2]=c[t>>2];c[s+4>>2]=o;s=ea;o=c[s+4>>2]|0;t=da;c[t>>2]=c[s>>2];c[t+4>>2]=o;t=ga;o=c[t+4>>2]|0;s=fa;c[s>>2]=c[t>>2];c[s+4>>2]=o;s=ia;o=c[s+4>>2]|0;t=ha;c[t>>2]=c[s>>2];c[t+4>>2]=o;t=ka;o=c[t+4>>2]|0;s=ja;c[s>>2]=c[t>>2];c[s+4>>2]=o;Jb(Ma,64,La);b[Ka>>1]=b[la>>1]|0;b[Ka+2>>1]=b[la+2>>1]|0;b[Ka+4>>1]=b[la+4>>1]|0;b[Ka+6>>1]=b[la+6>>1]|0;b[Ka+8>>1]=b[la+8>>1]|0;b[Ka+10>>1]=b[la+10>>1]|0;b[Ka+12>>1]=b[la+12>>1]|0;b[Ka+14>>1]=b[la+14>>1]|0;b[ma>>1]=b[na>>1]|0;b[ma+2>>1]=b[na+2>>1]|0;b[ma+4>>1]=b[na+4>>1]|0;b[ma+6>>1]=b[na+6>>1]|0;b[ma+8>>1]=b[na+8>>1]|0;b[ma+10>>1]=b[na+10>>1]|0;b[ma+12>>1]=b[na+12>>1]|0;b[ma+14>>1]=b[na+14>>1]|0;b[oa>>1]=b[qa>>1]|0;b[oa+2>>1]=b[qa+2>>1]|0;b[oa+4>>1]=b[qa+4>>1]|0;b[oa+6>>1]=b[qa+6>>1]|0;b[oa+8>>1]=b[qa+8>>1]|0;b[oa+10>>1]=b[qa+10>>1]|0;b[oa+12>>1]=b[qa+12>>1]|0;b[oa+14>>1]=b[qa+14>>1]|0;s=ra;o=La;t=s+48|0;do{b[s>>1]=b[o>>1]|0;s=s+2|0;o=o+2|0}while((s|0)<(t|0));b[sa>>1]=b[ta>>1]|0;b[sa+2>>1]=b[ta+2>>1]|0;b[sa+4>>1]=b[ta+4>>1]|0;b[sa+6>>1]=b[ta+6>>1]|0;b[sa+8>>1]=b[ta+8>>1]|0;b[sa+10>>1]=b[ta+10>>1]|0;b[sa+12>>1]=b[ta+12>>1]|0;b[sa+14>>1]=b[ta+14>>1]|0;b[ua>>1]=b[va>>1]|0;b[ua+2>>1]=b[va+2>>1]|0;b[ua+4>>1]=b[va+4>>1]|0;b[ua+6>>1]=b[va+6>>1]|0;b[ua+8>>1]=b[va+8>>1]|0;b[ua+10>>1]=b[va+10>>1]|0;b[ua+12>>1]=b[va+12>>1]|0;b[ua+14>>1]=b[va+14>>1]|0;Jb($,64,wa);s=Ma;t=s+64|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));N=ba;O=c[N+4>>2]|0;o=Ma;c[o>>2]=c[N>>2];c[o+4>>2]=O;o=ya;O=c[o+4>>2]|0;N=xa;c[N>>2]=c[o>>2];c[N+4>>2]=O;N=Aa;O=c[N+4>>2]|0;o=za;c[o>>2]=c[N>>2];c[o+4>>2]=O;o=ea;O=c[o+4>>2]|0;N=Ba;c[N>>2]=c[o>>2];c[N+4>>2]=O;N=ia;O=c[N+4>>2]|0;o=Ca;c[o>>2]=c[N>>2];c[o+4>>2]=O;o=0;while(1){if((o|0)==8)break;O=o<<3;a[Ma+(O+128)>>0]=a[Na+o>>0]|0;a[Ma+(O+256)>>0]=a[Na+(o+8)>>0]|0;a[Ma+(O+448)>>0]=a[Na+(o+16)>>0]|0;o=o+1|0}_a(Ma,704,Ta,p,q);_a($,64,Ta,p,q);o=Ga;F=0;while(1){if(F>>>0>=G>>>0)break;D=c[l+(F<<2)>>2]|0;B=D&255;D=D>>>8;s=a[Na+B>>0]|0;t=e[Ka+(B<<1)>>1]|0;x=c[p>>2]|0;y=q+(x>>>3)|0;A=d[y>>0]|0;O=bc(t|0,0,s&255|0)|0;if(!((O|0)==0&(C|0)==0)){Ua=138;break a}if((s&255)>=57){Ua=140;break a}O=cc(t|0,0,x&7|0)|0;x=C;O=A|O;t=y;y=t;a[y>>0]=O;a[y+1>>0]=O>>8;a[y+2>>0]=O>>16;a[y+3>>0]=O>>24;t=t+4|0;a[t>>0]=x;a[t+1>>0]=x>>8;a[t+2>>0]=x>>16;a[t+3>>0]=x>>24;s=(c[p>>2]|0)+(s&255)|0;c[p>>2]=s;t=c[18276+(B<<2)>>2]|0;x=q+(s>>>3)|0;y=d[x>>0]|0;O=bc(D|0,0,t|0)|0;if(!((O|0)==0&(C|0)==0)){Ua=142;break a}M=cc(D|0,0,s&7|0)|0;O=C;M=y|M;s=x;N=s;a[N>>0]=M;a[N+1>>0]=M>>8;a[N+2>>0]=M>>16;a[N+3>>0]=M>>24;s=s+4|0;a[s>>0]=O;a[s+1>>0]=O>>8;a[s+2>>0]=O>>16;a[s+3>>0]=O>>24;s=(c[p>>2]|0)+t|0;c[p>>2]=s;d:do if(B>>>0<24){D=(c[18788+(B<<2)>>2]|0)+D|0;B=0;while(1){if(B>>>0>=D>>>0)break d;x=d[o>>0]|0;t=a[Ra+x>>0]|0;x=e[Qa+(x<<1)>>1]|0;y=q+(s>>>3)|0;A=d[y>>0]|0;O=bc(x|0,0,t&255|0)|0;if(!((O|0)==0&(C|0)==0)){Ua=147;break a}if((t&255)>=57){Ua=149;break a}L=cc(x|0,0,s&7|0)|0;N=C;L=A|L;O=y;M=O;a[M>>0]=L;a[M+1>>0]=L>>8;a[M+2>>0]=L>>16;a[M+3>>0]=L>>24;O=O+4|0;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24;O=(c[p>>2]|0)+(t&255)|0;c[p>>2]=O;o=o+1|0;s=O;B=B+1|0}}while(0);F=F+1|0}}j=j-P|0;O=Q}switch(Ua|0){case 4:{pa(405532,405543,251,405590);break}case 6:{pa(405605,405543,252,405590);break}case 8:{pa(405630,405543,254,405590);break}case 10:{pa(405667,405543,256,405590);break}case 15:{pa(405740,405543,289,405590);break}case 17:{pa(405755,405543,295,405590);break}case 24:{pa(405779,405543,309,405590);break}case 26:{pa(405800,405543,310,405590);break}case 41:{pa(405815,405543,329,405590);break}case 81:{pa(405815,405543,378,405590);break}case 93:{pa(405853,405543,415,405590);break}case 138:{pa(406196,406218,54,406251);break}case 140:{pa(406267,406218,55,406251);break}case 142:{pa(406196,406218,54,406251);break}case 147:{pa(406196,406218,54,406251);break}case 149:{pa(406267,406218,55,406251);break}case 155:{if(!k){i=Va;return}f=c[p>>2]|0;Ta=q+(f>>>3)|0;n=d[Ta>>0]|0;f=cc(1,0,f&7|0)|0;Ua=C;f=n|f;n=Ta;a[n>>0]=f;a[n+1>>0]=f>>8;a[n+2>>0]=f>>16;a[n+3>>0]=f>>24;Ta=Ta+4|0;a[Ta>>0]=Ua;a[Ta+1>>0]=Ua>>8;a[Ta+2>>0]=Ua>>16;a[Ta+3>>0]=Ua>>24;Ta=(c[p>>2]|0)+1|0;c[p>>2]=Ta;Ua=q+(Ta>>>3)|0;n=d[Ua>>0]|0;q=cc(1,0,Ta&7|0)|0;Ta=C;q=n|q;n=Ua;a[n>>0]=q;a[n+1>>0]=q>>8;a[n+2>>0]=q>>16;a[n+3>>0]=q>>24;Ua=Ua+4|0;a[Ua>>0]=Ta;a[Ua+1>>0]=Ta>>8;a[Ua+2>>0]=Ta>>16;a[Ua+3>>0]=Ta>>24;c[p>>2]=(c[p>>2]|0)+8&-8;i=Va;return}}}function zb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=g+((c[f>>2]|0)>>>3)|0;j=d[h>>0]|0;i=h;a[i>>0]=j;a[i+1>>0]=j>>8;a[i+2>>0]=j>>16;a[i+3>>0]=j>>24;h=h+4|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;i=g+(h>>>3)|0;j=d[i>>0]|0;if(b>>>0<65537){k=i;h=k;a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;k=(c[f>>2]|0)+2|0;c[f>>2]=k;h=b+-1|0;i=g+(k>>>3)|0;j=d[i>>0]|0;if(!((h&-65536|0)==0&0==0))pa(406196,406218,54,406251);h=cc(h|0,0,k&7|0)|0;b=C;h=j|h;k=i;j=k;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;k=k+4|0;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;k=(c[f>>2]|0)+16|0;c[f>>2]=k;e=e&1;b=k>>>3;g=g+b|0;b=a[g>>0]|0;b=b&255;k=k&7;k=cc(e|0,0,k|0)|0;e=C;k=b|k;b=g;a[b>>0]=k;a[b+1>>0]=k>>8;a[b+2>>0]=k>>16;a[b+3>>0]=k>>24;g=g+4|0;a[g>>0]=e;a[g+1>>0]=e>>8;a[g+2>>0]=e>>16;a[g+3>>0]=e>>24;g=c[f>>2]|0;g=g+1|0;c[f>>2]=g;return}else{k=cc(1,0,h&7|0)|0;h=C;j=j|k;k=i;i=k;a[i>>0]=j;a[i+1>>0]=j>>8;a[i+2>>0]=j>>16;a[i+3>>0]=j>>24;k=k+4|0;a[k>>0]=h;a[k+1>>0]=h>>8;a[k+2>>0]=h>>16;a[k+3>>0]=h>>24;k=(c[f>>2]|0)+2|0;c[f>>2]=k;h=b+-1|0;i=g+(k>>>3)|0;j=d[i>>0]|0;if(!((h&-1048576|0)==0&0==0))pa(406196,406218,54,406251);h=cc(h|0,0,k&7|0)|0;b=C;h=j|h;k=i;j=k;a[j>>0]=h;a[j+1>>0]=h>>8;a[j+2>>0]=h>>16;a[j+3>>0]=h>>24;k=k+4|0;a[k>>0]=b;a[k+1>>0]=b>>8;a[k+2>>0]=b>>16;a[k+3>>0]=b>>24;k=(c[f>>2]|0)+20|0;c[f>>2]=k;e=e&1;b=k>>>3;g=g+b|0;b=a[g>>0]|0;b=b&255;k=k&7;k=cc(e|0,0,k|0)|0;e=C;k=b|k;b=g;a[b>>0]=k;a[b+1>>0]=k>>8;a[b+2>>0]=k>>16;a[b+3>>0]=k>>24;g=g+4|0;a[g>>0]=e;a[g+1>>0]=e>>8;a[g+2>>0]=e>>16;a[g+3>>0]=e>>24;g=c[f>>2]|0;g=g+1|0;c[f>>2]=g;return}}function Ab(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,qa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0;fb=i;i=i+16|0;db=fb+8|0;eb=fb+4|0;$a=fb;if(!(Bb(e)|0)){k=0;i=fb;return k|0}bb=e+5232|0;if((c[bb>>2]|0)!=0?(c[f>>2]|0)!=0:0){k=0;i=fb;return k|0}cb=e+4|0;l=c[cb>>2]|0;if(l>>>0<2){M=1<>2];o=c[f>>2]|0;o=o>>>0>>0?o:M;o=o>>>0>131072?131072:o;N=e+16|0;a:do switch(l|0){case 0:{p=0;n=0;L=0;K=0;ab=20;break}case 1:{n=e+5208|0;ab=c[n>>2]|0;l=ab;b:do if(!ab){do if((o|0)==131072){l=e+24|0;m=sa[c[N>>2]&1](c[l>>2]|0,524288)|0;if(!m)oa(1);c[n>>2]=m;l=sa[c[N>>2]&1](c[l>>2]|0,131072)|0;if(l){c[e+5212>>2]=l;l=c[n>>2]|0;if(!l)break;else{p=l;break b}}else oa(1)}while(0);l=e+24|0;m=sa[c[N>>2]&1](c[l>>2]|0,o<<2)|0;if(!m)oa(1);l=sa[c[N>>2]&1](c[l>>2]|0,o)|0;if(!l)oa(1);else{p=m;n=l;L=m;K=l;ab=20;break a}}else p=l;while(0);n=c[e+5212>>2]|0;L=0;K=0;ab=20;break}default:O=0}while(0);do if((ab|0)==20){v=e+193|0;w=e+5220|0;x=e+196|0;y=e+200|0;z=e+20|0;A=e+24|0;B=e+192|0;D=e+4308|0;E=e+4436|0;F=e+5204|0;G=e+4692|0;H=e+5216|0;I=e+5224|0;J=(k|0)==0;c:while(1){l=c[bb>>2]|0;while(1){if((l|0)==1?(a[v>>0]|0)!=0:0){ab=24;break}m=c[w>>2]|0;if(m)break;if(l){ab=49;break c}u=c[f>>2]|0;s=M>>>0>>0?M:u;u=(u|0)==(s|0)?1:0;l=(s<<1)+502|0;c[db>>2]=d[v>>0];if(l>>>0>(c[h>>2]|0)>>>0){m=c[y>>2]|0;if((c[x>>2]|0)>>>0>>0){ra[c[z>>2]&1](c[A>>2]|0,m);c[y>>2]=0;m=sa[c[N>>2]&1](c[A>>2]|0,l)|0;if(!m){ab=34;break c}c[y>>2]=m;c[x>>2]=l;t=0}else t=0}else{t=1;m=c[j>>2]|0}a[m>>0]=a[B>>0]|0;l=Cb(e,c[cb>>2]|0,s,eb)|0;o=c[g>>2]|0;q=u<<24>>24!=0;r=c[eb>>2]|0;if(!(c[cb>>2]|0))ub(N,o,s,q,l,r,D,E,F,G,db,m);else yb(N,o,s,q,p,n,l,r,db,m);c[g>>2]=(c[g>>2]|0)+s;c[f>>2]=(c[f>>2]|0)-s;o=c[db>>2]|0;q=o>>>3;if(t<<24>>24){l=c[h>>2]|0;if(q>>>0>l>>>0){ab=41;break c}if(!((o&7|0)==0|q>>>0>>0)){ab=43;break c}c[j>>2]=(c[j>>2]|0)+q;c[h>>2]=(c[h>>2]|0)-q;l=(c[I>>2]|0)+q|0;c[I>>2]=l;if(!J)c[k>>2]=l}else{c[H>>2]=m;c[w>>2]=q}a[B>>0]=a[m+((c[db>>2]|0)>>>3)>>0]|0;a[v>>0]=c[db>>2]&7;if(!(u<<24>>24))continue c;c[bb>>2]=2;l=2}if((ab|0)==24){ab=0;Eb(e);continue}l=c[h>>2]|0;if(!l){ab=49;break}l=m>>>0>>0?m:l;dc(c[j>>2]|0,c[H>>2]|0,l|0)|0;c[j>>2]=(c[j>>2]|0)+l;c[h>>2]=(c[h>>2]|0)-l;c[H>>2]=(c[H>>2]|0)+l;c[w>>2]=(c[w>>2]|0)-l;l=(c[I>>2]|0)+l|0;c[I>>2]=l;if(J)continue;c[k>>2]=l}if((ab|0)==34)oa(1);else if((ab|0)==41)pa(406280,406053,1436,406308);else if((ab|0)==43)pa(406340,406053,1437,406308);else if((ab|0)==49){ra[c[z>>2]&1](c[A>>2]|0,L);ra[c[z>>2]&1](c[A>>2]|0,K);if((c[bb>>2]|0)!=1){O=1;break}if(c[w>>2]|0){O=1;break}c[bb>>2]=0;c[H>>2]=0;O=1;break}}while(0);k=O;i=fb;return k|0}Xa=e+80|0;Ya=e+152|0;x=e+12|0;y=e+193|0;z=e+5220|0;A=e+5216|0;B=e+16|0;D=e+116|0;E=e+92|0;F=e+5236|0;G=e+5208|0;H=e+24|0;I=e+5212|0;J=e+196|0;K=e+200|0;L=e+20|0;M=e+24|0;N=e+192|0;O=e+4308|0;P=e+4436|0;Q=e+5204|0;R=e+4692|0;S=e+128|0;T=e+120|0;U=e+124|0;V=e+20|0;W=e+160|0;X=e+136|0;Y=e+132|0;Z=e+4|0;_=e+72|0;$=e+8|0;ba=e+144|0;ca=e+28|0;da=e+32|0;ea=e+36|0;fa=e+40|0;ga=e+44|0;ha=e+48|0;ia=e+52|0;ja=e+56|0;ka=e+60|0;la=e+64|0;ma=e+68|0;na=e+8|0;qa=e+194|0;ta=e+195|0;ua=e+176|0;va=e+176|0;wa=e+160|0;xa=e+8|0;ya=e+5224|0;za=(k|0)==0;Aa=e+108|0;Ba=e+96|0;Ca=e+112|0;Da=e+104|0;Ea=e+116|0;Fa=e+116|0;Ga=e+92|0;Ua=e+104|0;Va=e+100|0;Wa=e+88|0;d:while(1){m=Xa;l=Ya;l=$b(c[m>>2]|0,c[m+4>>2]|0,c[l>>2]|0,c[l+4>>2]|0)|0;m=C;if(Bb(e)|0)n=1<>2];else n=0;if((m>>>0<0|(m|0)==0&l>>>0>>0?(Za=n-l|0,(Za|0)!=0):0)?(_a=c[f>>2]|0,(_a|0)!=0):0){p=Za>>>0<_a>>>0?Za:_a;o=c[g>>2]|0;if(Bb(e)|0){l=c[Aa>>2]|0;if((l|0)==0?p>>>0<(c[Ba>>2]|0)>>>0:0){c[Aa>>2]=p;l=sa[c[B>>2]&1](c[H>>2]|0,p+9|0)|0;if(!l){ab=62;break}m=c[Ca>>2]|0;if(m){dc(l|0,m|0,(c[Da>>2]|0)+9|0)|0;ra[c[V>>2]&1](c[H>>2]|0,c[Ca>>2]|0);c[Ca>>2]=0}c[Ca>>2]=l;c[Da>>2]=p;c[Ea>>2]=l+2;a[l+1>>0]=0;a[(c[Ea>>2]|0)+-2>>0]=0;l=0;while(1){if((l|0)==7)break;a[(c[Ea>>2]|0)+((c[Da>>2]|0)+l)>>0]=0;l=l+1|0}dc(c[Fa>>2]|0,o|0,p|0)|0}else{n=c[Va>>2]|0;if((c[Ua>>2]|0)>>>0>>0){l=sa[c[B>>2]&1](c[H>>2]|0,n+9|0)|0;if(!l){ab=71;break}m=c[Ca>>2]|0;if(m){dc(l|0,m|0,(c[Da>>2]|0)+9|0)|0;ra[c[V>>2]&1](c[H>>2]|0,c[Ca>>2]|0);c[Ca>>2]=0}c[Ca>>2]=l;c[Da>>2]=n;c[Ea>>2]=l+2;a[l+1>>0]=0;a[(c[Ea>>2]|0)+-2>>0]=0;l=0;while(1){if((l|0)==7)break;a[(c[Ea>>2]|0)+((c[Da>>2]|0)+l)>>0]=0;l=l+1|0}a[(c[Fa>>2]|0)+((c[Wa>>2]|0)+-2)>>0]=0;a[(c[Fa>>2]|0)+((c[Wa>>2]|0)+-1)>>0]=0;l=c[Aa>>2]|0}n=l&c[Ga>>2];l=c[Ba>>2]|0;if(l>>>0>n>>>0){ab=l-n|0;dc((c[Fa>>2]|0)+((c[Wa>>2]|0)+n)|0,o|0,(p>>>0>>0?p:ab)|0)|0}m=(c[Fa>>2]|0)+n|0;l=o;if((n+p|0)>>>0>(c[Wa>>2]|0)>>>0){ab=(c[Va>>2]|0)-n|0;dc(m|0,l|0,(p>>>0>>0?p:ab)|0)|0;ab=c[Wa>>2]|0;dc(c[Fa>>2]|0,l+(ab-n)|0,p+(n-ab)|0)|0}else dc(m|0,l|0,p|0)|0;l=c[Fa>>2]|0;a[l+-2>>0]=a[l+((c[Wa>>2]|0)+-2)>>0]|0;l=c[Fa>>2]|0;a[l+-1>>0]=a[l+((c[Wa>>2]|0)+-1)>>0]|0;l=(c[Aa>>2]|0)+p|0;c[Aa>>2]=l;if(l>>>0>1073741824)c[Aa>>2]=l&1073741823|1073741824}ab=Xa;ab=ec(c[ab>>2]|0,c[ab+4>>2]|0,p|0,0)|0;l=Xa;c[l>>2]=ab;c[l+4>>2]=C;l=c[Aa>>2]|0;if(l>>>0<=(c[Ga>>2]|0)>>>0){ab=(c[Fa>>2]|0)+l|0;a[ab>>0]=0;a[ab+1>>0]=0;a[ab+2>>0]=0;a[ab+3>>0]=0;a[ab+4>>0]=0;a[ab+5>>0]=0;a[ab+6>>0]=0}}c[g>>2]=(c[g>>2]|0)+p;c[f>>2]=(c[f>>2]|0)-p;continue}l=c[bb>>2]|0;n=(l|0)==1;if(n?(a[y>>0]|0)!=0:0){Eb(e);continue}m=c[z>>2]|0;o=(m|0)==0;if(!o){l=c[h>>2]|0;if(!l){ab=234;break}l=m>>>0>>0?m:l;dc(c[j>>2]|0,c[A>>2]|0,l|0)|0;c[j>>2]=(c[j>>2]|0)+l;c[h>>2]=(c[h>>2]|0)-l;c[A>>2]=(c[A>>2]|0)+l;c[z>>2]=(c[z>>2]|0)-l;l=(c[ya>>2]|0)+l|0;c[ya>>2]=l;if(za)continue;c[k>>2]=l;continue}if(l){ab=234;break}w=(c[f>>2]|0)==0?1:0;o=Xa;n=c[o>>2]|0;o=c[o+4>>2]|0;q=Ya;p=c[q>>2]|0;q=c[q+4>>2]|0;s=$b(n|0,o|0,p|0,q|0)|0;l=C;if(q>>>0>0|(q|0)==0&p>>>0>3221225471){r=bc(p|0,q|0,30)|0;r=p&1073741823|((r&1^1)<<30)+1073741824}else r=p;if(!(Bb(e)|0)){ab=231;break}u=c[D>>2]|0;v=c[E>>2]|0;if(a[F>>0]&1){ab=231;break}t=w<<24>>24==0;if(!t)a[F>>0]=1;if(Bb(e)|0)m=1<>2];else m=0;if(l>>>0>0|(l|0)==0&s>>>0>m>>>0){ab=231;break}l=c[cb>>2]|0;if((l|0)==1)if(!(c[G>>2]|0)){l=sa[c[B>>2]&1](c[H>>2]|0,524288)|0;if(!l){ab=108;break}c[G>>2]=l;l=sa[c[B>>2]&1](c[H>>2]|0,131072)|0;if(!l){ab=110;break}c[I>>2]=l;l=c[cb>>2]|0;ab=112}else ab=114;else ab=112;e:do if((ab|0)==112){ab=0;if((l|0)!=0?(l|0)!=1:0){m=c[S>>2]|0;l=m+(s>>>1)+1|0;if(l>>>0>(c[T>>2]|0)>>>0){l=l+((s>>>2)+16)|0;c[T>>2]=l;l=sa[c[B>>2]&1](c[H>>2]|0,l<<4)|0;if(!l){ab=127;break d}m=c[U>>2]|0;if(m){dc(l|0,m|0,c[S>>2]<<4|0)|0;ra[c[V>>2]&1](c[H>>2]|0,c[U>>2]|0);c[U>>2]=0}c[U>>2]=l;m=c[S>>2]|0}else l=c[U>>2]|0;m=l+(m<<4)|0;l=c[Z>>2]|0;f:do switch(l|0){case 10:{Ha(B,s,r,w<<24>>24!=0,u,v,e,c[_>>2]|0,W,X,m,S,Y);break}case 11:{Ia(B,s,r,w<<24>>24!=0,u,v,e,c[_>>2]|0,W,X,m,S,Y);break}default:{if((l|0)>9)break f;do if((l|0)<5)ab=139;else{if((c[xa>>2]|0)>=17){ab=139;break}if((l|0)<7)break;l=(l|0)<9?41:42;ab=139}while(0);g:do if((ab|0)==139){ab=0;do switch(l|0){case 40:break g;case 2:{Ja(B,s,r,w<<24>>24!=0,u,v,e,c[ca>>2]|0,W,X,m,S,Y);break f}case 3:{Ka(B,s,r,w<<24>>24!=0,u,v,e,c[da>>2]|0,W,X,m,S,Y);break f}case 4:{La(B,s,r,w<<24>>24!=0,u,v,e,c[ea>>2]|0,W,X,m,S,Y);break f}case 5:{Ma(B,s,r,w<<24>>24!=0,u,v,e,c[fa>>2]|0,W,X,m,S,Y);break f}case 6:{Na(B,s,r,w<<24>>24!=0,u,v,e,c[ga>>2]|0,W,X,m,S,Y);break f}case 7:{Oa(B,s,r,w<<24>>24!=0,u,v,e,c[ha>>2]|0,W,X,m,S,Y);break f}case 8:{Pa(B,s,r,w<<24>>24!=0,u,v,e,c[ia>>2]|0,W,X,m,S,Y);break f}case 9:{Qa(B,s,r,w<<24>>24!=0,u,v,e,c[ja>>2]|0,W,X,m,S,Y);break f}case 41:{Sa(B,s,r,w<<24>>24!=0,u,v,e,c[la>>2]|0,W,X,m,S,Y);break f}case 42:{Ta(B,s,r,w<<24>>24!=0,u,v,e,c[ma>>2]|0,W,X,m,S,Y);break f}default:break f}while(0)}while(0);Ra(B,s,r,w<<24>>24!=0,u,v,e,c[ka>>2]|0,W,X,m,S,Y)}}while(0);n=c[$>>2]|0;m=c[x>>2]|0;m=((n|0)>(m|0)?n:m)+1|0;m=1<<((m|0)<24?m:24);n=m>>>3;s=Xa;o=ba;o=$b(c[s>>2]|0,c[s+4>>2]|0,c[o>>2]|0,c[o+4>>2]|0)|0;if(Bb(e)|0)q=1<>2];else q=0;l=c[cb>>2]|0;if((l|0)<4)p=((c[Y>>2]|0)+(c[S>>2]|0)|0)>>>0>12286;else p=0;do if(!(t^1|p|(o+q|0)>>>0>m>>>0)){if((c[Y>>2]|0)>>>0>=n>>>0)break;if((c[S>>2]|0)>>>0>=n>>>0)break;n=Ya;m=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>0|(n|0)==0&m>>>0>3221225471){v=bc(m|0,n|0,30)|0;m=m&1073741823|((v&1^1)<<30)+1073741824}o=Xa;n=c[o>>2]|0;o=c[o+4>>2]|0;if(o>>>0>0|(o|0)==0&n>>>0>3221225471){p=bc(n|0,o|0,30)|0;p=n&1073741823|((p&1^1)<<30)+1073741824}else p=n;v=Ya;c[v>>2]=n;c[v+4>>2]=o;h:do if(p>>>0>>0){i:do if((l|0)<=9){do if((l|0)<5)ab=168;else{if((c[na>>2]|0)>=17){ab=168;break}if((l|0)<7)break;l=(l|0)<9?41:42;ab=168}while(0);j:do if((ab|0)==168){ab=0;do switch(l|0){case 10:break i;case 40:break j;case 2:{v=c[ca>>2]|0;a[v+262148>>0]=1;c[v+262152>>2]=0;c[v+262156>>2]=0;break h}case 3:{v=c[da>>2]|0;a[v+262152>>0]=1;c[v+262156>>2]=0;c[v+262160>>2]=0;break h}case 4:{v=c[ea>>2]|0;a[v+524304>>0]=1;c[v+524308>>2]=0;c[v+524312>>2]=0;break h}case 5:{v=c[fa>>2]|0;a[v+1081344>>0]=1;c[v+1081348>>2]=0;c[v+1081352>>2]=0;break h}case 6:{v=c[ga>>2]|0;a[v+2129920>>0]=1;c[v+2129924>>2]=0;c[v+2129928>>2]=0;break h}case 7:{v=c[ha>>2]|0;a[v+8454144>>0]=1;c[v+8454148>>2]=0;c[v+8454152>>2]=0;break h}case 8:{v=c[ia>>2]|0;a[v+16842752>>0]=1;c[v+16842756>>2]=0;c[v+16842760>>2]=0;break h}case 9:{v=c[ja>>2]|0;a[v+33619968>>0]=1;c[v+33619972>>2]=0;c[v+33619976>>2]=0;break h}case 41:{v=c[la>>2]|0;a[v+524290>>0]=1;c[v+524292>>2]=0;c[v+524296>>2]=0;break h}case 42:{v=c[ma>>2]|0;a[v+1311744>>0]=1;c[v+1311748>>2]=0;c[v+1311752>>2]=0;break h}default:break h}while(0)}while(0);v=c[ka>>2]|0;a[v+524290>>0]=1;c[v+524292>>2]=0;c[v+524296>>2]=0;break h}while(0);a[(c[_>>2]|0)+524304>>0]=1}while(0);c[z>>2]=0;break e}while(0);l=c[X>>2]|0;if(l){m=c[S>>2]|0;c[S>>2]=m+1;s=c[U>>2]|0;c[s+(m<<4)>>2]=l;c[s+(m<<4)+4>>2]=67108864;c[s+(m<<4)+8>>2]=0;b[s+(m<<4)+14>>1]=16;m=s+(m<<4)+12|0;do if(l>>>0>=6){if(l>>>0<130){s=l+-2|0;l=((aa(s|0)|0)^31)+-1|0;l=(l<<1)+(s>>>l)+2|0;break}if(l>>>0<2114){l=((aa(l+-66|0)|0)^31)+10|0;break}if(l>>>0<6210){l=21;break}l=l>>>0<22594?22:23}while(0);s=l&65535;b[m>>1]=b[88156+((s>>>3)*3<<1)>>1]|(s<<3&56|2)&65535;c[Y>>2]=(c[Y>>2]|0)+(c[X>>2]|0);c[X>>2]=0}m=Xa;l=c[m>>2]|0;m=c[m+4>>2]|0;o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if(t&((l|0)==(n|0)&(m|0)==(o|0))){c[z>>2]=0;break}if(m>>>0>>0|(m|0)==(o|0)&l>>>0>>0){ab=194;break d}if(!(m>>>0>o>>>0|(m|0)==(o|0)&l>>>0>n>>>0|t^1)){ab=196;break d}n=$b(l|0,m|0,n|0,o|0)|0;t=C;if(!(t>>>0<0|(t|0)==0&n>>>0<16777217)){ab=198;break d}l=(n<<1)+502|0;if((c[J>>2]|0)>>>0>>0){ra[c[L>>2]&1](c[M>>2]|0,c[K>>2]|0);c[K>>2]=0;t=sa[c[B>>2]&1](c[M>>2]|0,l)|0;m=t;if(!t){ab=202;break d}c[K>>2]=m;c[J>>2]=l}else m=c[K>>2]|0;c[$a>>2]=d[y>>0];p=m;a[p>>0]=a[N>>0]|0;q=u;o=ba;Db(B,q,v,c[o>>2]|0,c[o+4>>2]|0,n,w<<24>>24!=0,e,a[qa>>0]|0,a[ta>>0]|0,c[Y>>2]|0,c[S>>2]|0,c[U>>2]|0,ua,W,$a,p);a[N>>0]=a[p+((c[$a>>2]|0)>>>3)>>0]|0;a[y>>0]=c[$a>>2]&7;p=Xa;o=c[p>>2]|0;p=c[p+4>>2]|0;n=ba;c[n>>2]=o;c[n+4>>2]=p;n=Ya;l=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>0|(n|0)==0&l>>>0>3221225471){u=bc(l|0,n|0,30)|0;l=l&1073741823|((u&1^1)<<30)+1073741824}if(p>>>0>0|(p|0)==0&o>>>0>3221225471){n=bc(o|0,p|0,30)|0;n=o&1073741823|((n&1^1)<<30)+1073741824}else n=o;u=Ya;c[u>>2]=o;c[u+4>>2]=p;k:do if(n>>>0>>0){l=c[cb>>2]|0;l:do if((l|0)<=9){do if((l|0)<5)ab=214;else{if((c[na>>2]|0)>=17){ab=214;break}if((l|0)<7)break;l=(l|0)<9?41:42;ab=214}while(0);m:do if((ab|0)==214){ab=0;do switch(l|0){case 10:break l;case 40:break m;case 2:{u=c[ca>>2]|0;a[u+262148>>0]=1;c[u+262152>>2]=0;c[u+262156>>2]=0;break k}case 3:{u=c[da>>2]|0;a[u+262152>>0]=1;c[u+262156>>2]=0;c[u+262160>>2]=0;break k}case 4:{u=c[ea>>2]|0;a[u+524304>>0]=1;c[u+524308>>2]=0;c[u+524312>>2]=0;break k}case 5:{u=c[fa>>2]|0;a[u+1081344>>0]=1;c[u+1081348>>2]=0;c[u+1081352>>2]=0;break k}case 6:{u=c[ga>>2]|0;a[u+2129920>>0]=1;c[u+2129924>>2]=0;c[u+2129928>>2]=0;break k}case 7:{u=c[ha>>2]|0;a[u+8454144>>0]=1;c[u+8454148>>2]=0;c[u+8454152>>2]=0;break k}case 8:{u=c[ia>>2]|0;a[u+16842752>>0]=1;c[u+16842756>>2]=0;c[u+16842760>>2]=0;break k}case 9:{u=c[ja>>2]|0;a[u+33619968>>0]=1;c[u+33619972>>2]=0;c[u+33619976>>2]=0;break k}case 41:{u=c[la>>2]|0;a[u+524290>>0]=1;c[u+524292>>2]=0;c[u+524296>>2]=0;break k}case 42:{u=c[ma>>2]|0;a[u+1311744>>0]=1;c[u+1311748>>2]=0;c[u+1311752>>2]=0;break k}default:break k}while(0)}while(0);u=c[ka>>2]|0;a[u+524290>>0]=1;c[u+524292>>2]=0;c[u+524296>>2]=0;break k}while(0);a[(c[_>>2]|0)+524304>>0]=1}while(0);n=ba;l=c[n>>2]|0;n=c[n+4>>2]|0;do if(!((l|0)==0&(n|0)==0)){a[qa>>0]=a[q+(l+-1&v)>>0]|0;if(!(n>>>0>0|(n|0)==0&l>>>0>1))break;u=ec(l|0,n|0,-2,0)|0;a[ta>>0]=a[q+(u&v)>>0]|0}while(0);c[S>>2]=0;c[Y>>2]=0;c[va>>2]=c[wa>>2];c[va+4>>2]=c[wa+4>>2];c[va+8>>2]=c[wa+8>>2];c[va+12>>2]=c[wa+12>>2];c[A>>2]=m;c[z>>2]=(c[$a>>2]|0)>>>3}else ab=114}while(0);do if((ab|0)==114){c[db>>2]=d[y>>0];if(!((n|0)==(p|0)&(o|0)==(q|0)^1|t^1)){c[z>>2]=0;break}m=(s<<1)+502|0;l=c[K>>2]|0;if((c[J>>2]|0)>>>0>>0){ra[c[L>>2]&1](c[M>>2]|0,l);c[K>>2]=0;l=sa[c[B>>2]&1](c[M>>2]|0,m)|0;if(!l){ab=118;break d}c[K>>2]=l;c[J>>2]=m;n=l}else n=l;a[n>>0]=a[N>>0]|0;o=Cb(e,c[cb>>2]|0,s,eb)|0;l=u+(r&v)|0;m=w<<24>>24!=0;if(!(c[cb>>2]|0))ub(B,l,s,m,o,c[eb>>2]|0,O,P,Q,R,db,n);else yb(B,l,s,m,c[G>>2]|0,c[I>>2]|0,o,c[eb>>2]|0,db,n);a[N>>0]=a[n+((c[db>>2]|0)>>>3)>>0]|0;a[y>>0]=c[db>>2]&7;u=Xa;v=c[u+4>>2]|0;ab=Ya;c[ab>>2]=c[u>>2];c[ab+4>>2]=v;c[A>>2]=n;c[z>>2]=(c[db>>2]|0)>>>3}while(0);if(!(w<<24>>24))continue;c[bb>>2]=2}switch(ab|0){case 62:{oa(1);break}case 71:{oa(1);break}case 108:{oa(1);break}case 110:{oa(1);break}case 118:{oa(1);break}case 127:{oa(1);break}case 194:{pa(406017,406053,906,406080);break}case 196:{pa(406103,406053,907,406080);break}case 198:{pa(406149,406053,908,406080);break}case 202:{oa(1);break}case 231:{k=0;i=fb;return k|0}case 234:{if(n^1|o^1){k=1;i=fb;return k|0}c[bb>>2]=0;c[A>>2]=0;k=1;i=fb;return k|0}}return 0}function Bb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=b+5237|0;if(a[k>>0]&1)return 1;e=c[b+4>>2]|0;if((e|0)>=0)if((e|0)>11)h=11;else i=4;else{e=0;i=4}if((i|0)==4)h=e;c[b+4>>2]=h;e=b+8|0;f=c[e>>2]|0;if((f|0)>=10){if((f|0)>24){c[e>>2]=24;f=24}}else{c[e>>2]=10;f=10}g=b+12|0;e=c[g>>2]|0;i=(h|0)==0;do if(h>>>0>=2)if((h|0)<4)e=14;else{if(!e){if(!((h|0)>8&(f|0)>16)){e=16;break}e=(f|0)>18?18:f;break}if((e|0)>=16){if((e|0)>24){e=24;break}}else e=16}else e=f;while(0);c[g>>2]=e;g=1<<((f|0)>(e|0)?f:e)+1;c[b+88>>2]=g;c[b+92>>2]=g+-1;e=1<>2]=e;c[b+100>>2]=g+e;e=b+192|0;g=b+193|0;a:do switch(f|0){case 16:{a[e>>0]=0;a[g>>0]=1;break}case 17:{a[e>>0]=1;a[g>>0]=7;break}default:if((f|0)>17){a[e>>0]=(f<<1)+222|1;a[g>>0]=4;break a}else{a[e>>0]=(f<<4)+128|1;a[g>>0]=7;break a}}while(0);b:do if(i){g=b+4436|0;h=b+4692|0;i=b+5204|0;d=b+4308|0;e=406473;f=d+128|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));dc(g|0,88174,256)|0;d=h;e=406601;f=d+57|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));c[i>>2]=448}else{e=b+16|0;g=b+28|0;c:do if((h|0)>9){f=g;i=65}else{do if((h|0)>=5&(f|0)<17)if((h|0)<7){f=g;i=56;break}else{h=(h|0)<9?41:42;i=31;break}else i=31;while(0);d:do if((i|0)==31){f=g;e:do switch(h|0){case 10:{i=65;break c}case 40:{i=56;break d}case 2:{d=sa[c[e>>2]&1](c[b+24>>2]|0,262160)|0;if(!d)oa(1);else{c[g>>2]=d;d=f;i=69;break e}break}case 3:{d=sa[c[e>>2]&1](c[b+24>>2]|0,262164)|0;if(!d)oa(1);else{c[b+32>>2]=d;d=f;i=70;break e}break}case 4:{d=sa[c[e>>2]&1](c[b+24>>2]|0,524316)|0;if(!d)oa(1);else{c[b+36>>2]=d;d=f;i=71;break e}break}case 5:{d=sa[c[e>>2]&1](c[b+24>>2]|0,1081356)|0;if(!d)oa(1);else{c[b+40>>2]=d;d=f;i=72;break e}break}case 6:{d=sa[c[e>>2]&1](c[b+24>>2]|0,2129932)|0;if(!d)oa(1);else{c[b+44>>2]=d;d=f;i=73;break e}break}case 7:{d=sa[c[e>>2]&1](c[b+24>>2]|0,8454156)|0;if(!d)oa(1);else{c[b+48>>2]=d;d=f;i=74;break e}break}case 8:{d=sa[c[e>>2]&1](c[b+24>>2]|0,16842764)|0;if(!d)oa(1);else{c[b+52>>2]=d;d=f;i=75;break e}break}case 9:{d=sa[c[e>>2]&1](c[b+24>>2]|0,33619980)|0;if(!d)oa(1);else{c[b+56>>2]=d;d=f;i=76;break e}break}case 41:{d=sa[c[e>>2]&1](c[b+24>>2]|0,524304)|0;if(!d)oa(1);else{c[b+64>>2]=d;d=f;i=78;break e}break}case 42:{d=sa[c[e>>2]&1](c[b+24>>2]|0,1311760)|0;if(!d)oa(1);else{c[b+68>>2]=d;d=f;i=79;break e}break}default:{d=f;switch(h|0){case 10:break c;case 40:{j=d;break d}case 2:{i=69;break}case 3:{i=70;break}case 4:{i=71;break}case 5:{i=72;break}case 6:{i=73;break}case 7:{i=74;break}case 8:{i=75;break}case 9:{i=76;break}case 41:{i=78;break}case 42:{i=79;break}default:break b}}}while(0);switch(i|0){case 69:{b=c[d>>2]|0;a[b+262148>>0]=1;c[b+262152>>2]=0;c[b+262156>>2]=0;break b}case 70:{b=c[d+4>>2]|0;a[b+262152>>0]=1;c[b+262156>>2]=0;c[b+262160>>2]=0;break b}case 71:{b=c[d+8>>2]|0;a[b+524304>>0]=1;c[b+524308>>2]=0;c[b+524312>>2]=0;break b}case 72:{b=c[d+12>>2]|0;a[b+1081344>>0]=1;c[b+1081348>>2]=0;c[b+1081352>>2]=0;break b}case 73:{b=c[d+16>>2]|0;a[b+2129920>>0]=1;c[b+2129924>>2]=0;c[b+2129928>>2]=0;break b}case 74:{b=c[d+20>>2]|0;a[b+8454144>>0]=1;c[b+8454148>>2]=0;c[b+8454152>>2]=0;break b}case 75:{b=c[d+24>>2]|0;a[b+16842752>>0]=1;c[b+16842756>>2]=0;c[b+16842760>>2]=0;break b}case 76:{b=c[d+28>>2]|0;a[b+33619968>>0]=1;c[b+33619972>>2]=0;c[b+33619976>>2]=0;break b}case 78:{b=c[d+36>>2]|0;a[b+524290>>0]=1;c[b+524292>>2]=0;c[b+524296>>2]=0;break b}case 79:{b=c[d+40>>2]|0;a[b+1311744>>0]=1;c[b+1311748>>2]=0;c[b+1311752>>2]=0;break b}}}while(0);do if((i|0)==56){d=sa[c[e>>2]&1](c[b+24>>2]|0,524304)|0;if(!d)oa(1);else{c[b+60>>2]=d;j=f;break}}while(0);b=c[j+32>>2]|0;a[b+524290>>0]=1;c[b+524292>>2]=0;c[b+524296>>2]=0;break b}while(0);do if((i|0)==65){e=sa[c[e>>2]&1](c[b+24>>2]|0,524308)|0;if(!e)oa(1);else{c[f+44>>2]=e;d=c[f+44>>2]|0;c[d+524292>>2]=0;c[d+524300>>2]=0;a[d+524304>>0]=1;d=f;break}}while(0);a[(c[d+44>>2]|0)+524304>>0]=1}while(0);a[k>>0]=1;return 1}function Cb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;b=(b|0)==0?32768:131072;f=256;while(1){if(!(f>>>0>>0&f>>>0>>0))break;f=f<<1}do if(f>>>0>=1025){b=a+4304|0;if(f>>>0<=(c[b>>2]|0)>>>0){g=c[a+4300>>2]|0;break}c[b>>2]=f;d=a+4300|0;b=a+24|0;ra[c[a+20>>2]&1](c[b>>2]|0,c[d>>2]|0);c[d>>2]=0;a=sa[c[a+16>>2]&1](c[b>>2]|0,f<<2)|0;b=a;if(!a)oa(1);else{c[d>>2]=b;g=b;break}}else g=a+204|0;while(0);c[e>>2]=f;ac(g|0,0,f<<2|0)|0;return g|0} -function Pa(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;qa=i;i=i+32|0;oa=qa+16|0;pa=qa;ma=(1<>2])+-16|0;v=c[p>>2]|0;na=h+g|0;la=g>>>0>3?na+-3|0:h;ka=m+4|0;ja=(c[ka>>2]|0)<9?64:512;u=ja+h|0;if((((h|0)==0^1|j^1)^1)&g>>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;b[n+((_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17<<1)>>1]=0;f=f+1|0}if(g){a[n+16842752>>0]=0;t=8}}else{f=n+16842752|0;if(!(a[f>>0]&1))t=8;else{ac(n|0,0,65536)|0;a[f>>0]=0;t=8}}if((t|0)==8?g>>>0>2&h>>>0>2:0){ga=h+-3|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&127|ha<<7)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16;ia=h+-2|0;ha=k+(ia&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ga=n+(ha<<1)|0;c[n+65536+((e[ga>>1]&127|ha<<7)<<2)>>2]=ia;b[ga>>1]=(b[ga>>1]|0)+1<<16>>16;ga=h+-1|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&127|ha<<7)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16}P=oa+4|0;Q=oa+8|0;R=oa+12|0;S=oa+4|0;T=oa+8|0;U=oa+12|0;V=n+16842760|0;W=n+16842756|0;X=ja<<2;Y=na+-4|0;Z=na+-3|0;$=pa+12|0;ba=pa+4|0;ca=pa+8|0;da=pa+4|0;ea=pa+8|0;fa=pa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=v;a:while(1){M=O;N=u+X|0;b:while(1){L=na-m|0;if((m+4|0)>>>0>=na>>>0)break a;J=m>>>0>>0?m:ma;c[oa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;g=c[oa>>2]|0;c[oa>>2]=0;c[S>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;y=4240;j=0;x=0;while(1){if((x|0)==10)break;w=(c[o+(c[11372+(x<<2)>>2]<<2)>>2]|0)+(c[11436+(x<<2)>>2]|0)|0;t=m-w|0;do if(((!(t>>>0>=m>>>0|w>>>0>J>>>0)?(ra=t&l,sa=K+g|0,sa>>>0<=l>>>0):0)?(ta=ra+g|0,ta>>>0<=l>>>0):0)?(a[k+sa>>0]|0)==(a[k+ta>>0]|0):0){v=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;D=t;E=k+(ra+v)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;v=v+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(ra+v)>>0]|0)!=(a[t>>0]|0))break;v=v+1|0;t=t+1|0}if(v>>>0<=2?!((v|0)==2&x>>>0<2):0){t=y;break}t=(v*540|0)+(c[11500+(x<<2)>>2]|0)|0;if(y>>>0>>0){c[oa>>2]=v;c[T>>2]=w;c[U>>2]=t;g=v;j=1}else t=y}else t=y;while(0);y=t;x=x+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<7;D=n+(D<<1)|0;E=b[D>>1]|0;t=E&65535;E=(E&65535)>128?t+-128|0:0;c:while(1){B=K+g|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(t>>>0<=E>>>0)break c;t=t+-1|0;h=c[n+65536+((C|t&127)<<2)>>2]|0;z=m-h|0;if(z>>>0>J>>>0)break c;x=h&l;if(A)continue;h=x+g|0;if(h>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+h>>0]|0)){w=0;h=F}else continue;while(1){v=h;if(v>>>0>H>>>0)break;Ia=h;Ha=k+(x+w)|0;if((d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0)!=(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0))break;w=w+4|0;h=v+4|0}while(1){if(h>>>0>=G>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}if(w>>>0<=3)continue;h=(w*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(y>>>0>>0)break}c[oa>>2]=w;c[T>>2]=z;c[U>>2]=h;g=w;y=h;j=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&127)<<2)>>2]=m;b[D>>1]=Ia+1<<16>>16;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ia=b[21084+(w<<1)>>1]|0;t=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(ua=t&31,va=t>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=L>>>0):0){g=wa+ua|0;v=280811+g|0;g=280811+(g+-4)|0;h=0;t=280811+wa|0;while(1){if(t>>>0>g>>>0)break;Ia=k+(K+h)|0;if((d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;t=t+4|0}while(1){if(t>>>0>=v>>>0)break;if((a[k+(K+h)>>0]|0)!=(a[t>>0]|0))break;h=h+1|0;t=t+1|0}if(!((h+10|0)>>>0<=ua>>>0|(h|0)==0)?(xa=J+va+1+(d[407930+(ua-h)>>0]<>0])|0,ya=(h*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[U>>2]|0)>>>0):0){c[oa>>2]=h;c[S>>2]=ua^h;c[T>>2]=xa;c[U>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;t=m+1|0;if(t>>>0<=u>>>0){m=t;continue}if(t>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&127|Ha<<7)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&127|Ha<<7)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[ka>>2]|0)<5){f=(c[oa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[pa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:ma;K=y&l;t=c[pa>>2]|0;c[pa>>2]=0;c[da>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;w=4240;f=0;v=0;while(1){if((v|0)==10)break;h=(c[o+(c[11372+(v<<2)>>2]<<2)>>2]|0)+(c[11436+(v<<2)>>2]|0)|0;j=y-h|0;do if(((!(j>>>0>=y>>>0|h>>>0>J>>>0)?(za=j&l,Aa=K+t|0,Aa>>>0<=l>>>0):0)?(Ba=za+t|0,Ba>>>0<=l>>>0):0)?(a[k+Aa>>0]|0)==(a[k+Ba>>0]|0):0){u=0;j=F;while(1){g=j;if(g>>>0>H>>>0)break;Ha=j;Ia=k+(za+u)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;u=u+4|0;j=g+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(za+u)>>0]|0)!=(a[j>>0]|0))break;u=u+1|0;j=j+1|0}if(u>>>0<=2?!((u|0)==2&v>>>0<2):0){j=w;break}j=(u*540|0)+(c[11500+(v<<2)>>2]|0)|0;if(w>>>0>>0){c[pa>>2]=u;c[ea>>2]=h;c[fa>>2]=j;t=u;f=1}else j=w}else j=w;while(0);w=j;v=v+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<7;D=n+(D<<1)|0;E=b[D>>1]|0;j=E&65535;E=(E&65535)>128?j+-128|0:0;d:while(1){B=K+t|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(j>>>0<=E>>>0)break d;j=j+-1|0;g=c[n+65536+((C|j&127)<<2)>>2]|0;z=y-g|0;if(z>>>0>J>>>0)break d;v=g&l;if(A)continue;g=v+t|0;if(g>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+g>>0]|0)){h=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ha=g;Ia=k+(v+h)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(v+h)>>0]|0)!=(a[g>>0]|0))break;h=h+1|0;g=g+1|0}if(h>>>0<=3)continue;g=(h*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(w>>>0>>0)break}c[pa>>2]=h;c[ea>>2]=z;c[fa>>2]=g;t=h;w=g;f=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&127)<<2)>>2]=y;b[D>>1]=Ia+1<<16>>16;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;h=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ia=b[21084+(h<<1)>>1]|0;j=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(Ca=j&31,Da=j>>>5,Ea=(c[11272+(Ca<<2)>>2]|0)+(_(Ca,Da)|0)|0,Ca>>>0<=L>>>0):0){t=Ea+Ca|0;u=280811+t|0;t=280811+(t+-4)|0;g=0;j=280811+Ea|0;while(1){if(j>>>0>t>>>0)break;Ia=k+(K+g)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;g=g+4|0;j=j+4|0}while(1){if(j>>>0>=u>>>0)break;if((a[k+(K+g)>>0]|0)!=(a[j>>0]|0))break;g=g+1|0;j=j+1|0}if(!((g+10|0)>>>0<=Ca>>>0|(g|0)==0)?(Fa=J+Da+1+(d[407930+(Ca-g)>>0]<>0])|0,Ga=(g*540|0)+3840+(_((aa(Fa|0)|0)^31,-120)|0)|0,Ga>>>0>=(c[fa>>2]|0)>>>0):0){c[pa>>2]=g;c[da>>2]=Ca^g;c[ea>>2]=Fa;c[fa>>2]=Ga;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;h=h+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[oa>>2]=c[pa>>2];c[oa+4>>2]=c[pa+4>>2];c[oa+8>>2]=c[pa+8>>2];c[oa+12>>2]=c[pa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[oa>>2]|0;u=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:ma)>>>0){g=f+3|0;Ia=c[o>>2]|0;j=g-Ia|0;t=c[ia>>2]|0;g=g-t|0;if((f|0)==(Ia|0))f=0;else{f:do if((f|0)!=(t|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(g>>>0<7){f=266017486>>>(g<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[oa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ia=c[P>>2]|0;j=m^Ia;c[O>>2]=x;c[O+4>>2]=m|Ia<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ia=((aa(N|0)|0)^31)+-1|0;Ha=N>>>Ia&1;f=((Ia<<1)+65534|Ha)+16&65535;b[m>>1]=f;m=Ia<<24|N-((Ha|2)<>2]=m;h=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ia=x+-2|0;g=((aa(Ia|0)|0)^31)+-1|0;g=(g<<1)+(Ia>>>g)+2&65535;break}if(x>>>0<2114){g=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)g=21;else g=x>>>0<22594?22:23}else g=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ia=j+-6|0;f=((aa(Ia|0)|0)^31)+-1|0;f=(f<<1)+(Ia>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=g&65535;t=m&7|j<<3&56;if(h&(g&65535)<8&(f&65535)<16)f=((f&65535)<8?t:t|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|t&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[oa>>2]|0)|0;f=f>>>0>>0?f:la;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&127|Ha<<7)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+1|0}m=y+(c[oa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=qa;return}function Qa(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;qa=i;i=i+32|0;oa=qa+16|0;pa=qa;ma=(1<>2])+-16|0;v=c[p>>2]|0;na=h+g|0;la=g>>>0>3?na+-3|0:h;ka=m+4|0;ja=(c[ka>>2]|0)<9?64:512;u=ja+h|0;if((((h|0)==0^1|j^1)^1)&g>>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;b[n+((_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17<<1)>>1]=0;f=f+1|0}if(g){a[n+33619968>>0]=0;t=8}}else{f=n+33619968|0;if(!(a[f>>0]&1))t=8;else{ac(n|0,0,65536)|0;a[f>>0]=0;t=8}}if((t|0)==8?g>>>0>2&h>>>0>2:0){ga=h+-3|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&255|ha<<8)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16;ia=h+-2|0;ha=k+(ia&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ga=n+(ha<<1)|0;c[n+65536+((e[ga>>1]&255|ha<<8)<<2)>>2]=ia;b[ga>>1]=(b[ga>>1]|0)+1<<16>>16;ga=h+-1|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&255|ha<<8)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16}P=oa+4|0;Q=oa+8|0;R=oa+12|0;S=oa+4|0;T=oa+8|0;U=oa+12|0;V=n+33619976|0;W=n+33619972|0;X=ja<<2;Y=na+-4|0;Z=na+-3|0;$=pa+12|0;ba=pa+4|0;ca=pa+8|0;da=pa+4|0;ea=pa+8|0;fa=pa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=v;a:while(1){M=O;N=u+X|0;b:while(1){L=na-m|0;if((m+4|0)>>>0>=na>>>0)break a;J=m>>>0>>0?m:ma;c[oa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;g=c[oa>>2]|0;c[oa>>2]=0;c[S>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;y=4240;j=0;x=0;while(1){if((x|0)==16)break;w=(c[o+(c[11372+(x<<2)>>2]<<2)>>2]|0)+(c[11436+(x<<2)>>2]|0)|0;t=m-w|0;do if(((!(t>>>0>=m>>>0|w>>>0>J>>>0)?(ra=t&l,sa=K+g|0,sa>>>0<=l>>>0):0)?(ta=ra+g|0,ta>>>0<=l>>>0):0)?(a[k+sa>>0]|0)==(a[k+ta>>0]|0):0){v=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;D=t;E=k+(ra+v)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;v=v+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(ra+v)>>0]|0)!=(a[t>>0]|0))break;v=v+1|0;t=t+1|0}if(v>>>0<=2?!((v|0)==2&x>>>0<2):0){t=y;break}t=(v*540|0)+(c[11500+(x<<2)>>2]|0)|0;if(y>>>0>>0){c[oa>>2]=v;c[T>>2]=w;c[U>>2]=t;g=v;j=1}else t=y}else t=y;while(0);y=t;x=x+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<8;D=n+(D<<1)|0;E=b[D>>1]|0;t=E&65535;E=(E&65535)>256?t+-256|0:0;c:while(1){B=K+g|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(t>>>0<=E>>>0)break c;t=t+-1|0;h=c[n+65536+((C|t&255)<<2)>>2]|0;z=m-h|0;if(z>>>0>J>>>0)break c;x=h&l;if(A)continue;h=x+g|0;if(h>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+h>>0]|0)){w=0;h=F}else continue;while(1){v=h;if(v>>>0>H>>>0)break;Ia=h;Ha=k+(x+w)|0;if((d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0)!=(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0))break;w=w+4|0;h=v+4|0}while(1){if(h>>>0>=G>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}if(w>>>0<=3)continue;h=(w*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(y>>>0>>0)break}c[oa>>2]=w;c[T>>2]=z;c[U>>2]=h;g=w;y=h;j=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&255)<<2)>>2]=m;b[D>>1]=Ia+1<<16>>16;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ia=b[21084+(w<<1)>>1]|0;t=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(ua=t&31,va=t>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=L>>>0):0){g=wa+ua|0;v=280811+g|0;g=280811+(g+-4)|0;h=0;t=280811+wa|0;while(1){if(t>>>0>g>>>0)break;Ia=k+(K+h)|0;if((d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;t=t+4|0}while(1){if(t>>>0>=v>>>0)break;if((a[k+(K+h)>>0]|0)!=(a[t>>0]|0))break;h=h+1|0;t=t+1|0}if(!((h+10|0)>>>0<=ua>>>0|(h|0)==0)?(xa=J+va+1+(d[407930+(ua-h)>>0]<>0])|0,ya=(h*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[U>>2]|0)>>>0):0){c[oa>>2]=h;c[S>>2]=ua^h;c[T>>2]=xa;c[U>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;t=m+1|0;if(t>>>0<=u>>>0){m=t;continue}if(t>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&255|Ha<<8)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&255|Ha<<8)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[ka>>2]|0)<5){f=(c[oa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[pa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:ma;K=y&l;t=c[pa>>2]|0;c[pa>>2]=0;c[da>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;w=4240;f=0;v=0;while(1){if((v|0)==16)break;h=(c[o+(c[11372+(v<<2)>>2]<<2)>>2]|0)+(c[11436+(v<<2)>>2]|0)|0;j=y-h|0;do if(((!(j>>>0>=y>>>0|h>>>0>J>>>0)?(za=j&l,Aa=K+t|0,Aa>>>0<=l>>>0):0)?(Ba=za+t|0,Ba>>>0<=l>>>0):0)?(a[k+Aa>>0]|0)==(a[k+Ba>>0]|0):0){u=0;j=F;while(1){g=j;if(g>>>0>H>>>0)break;Ha=j;Ia=k+(za+u)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;u=u+4|0;j=g+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(za+u)>>0]|0)!=(a[j>>0]|0))break;u=u+1|0;j=j+1|0}if(u>>>0<=2?!((u|0)==2&v>>>0<2):0){j=w;break}j=(u*540|0)+(c[11500+(v<<2)>>2]|0)|0;if(w>>>0>>0){c[pa>>2]=u;c[ea>>2]=h;c[fa>>2]=j;t=u;f=1}else j=w}else j=w;while(0);w=j;v=v+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<8;D=n+(D<<1)|0;E=b[D>>1]|0;j=E&65535;E=(E&65535)>256?j+-256|0:0;d:while(1){B=K+t|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(j>>>0<=E>>>0)break d;j=j+-1|0;g=c[n+65536+((C|j&255)<<2)>>2]|0;z=y-g|0;if(z>>>0>J>>>0)break d;v=g&l;if(A)continue;g=v+t|0;if(g>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+g>>0]|0)){h=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ha=g;Ia=k+(v+h)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(v+h)>>0]|0)!=(a[g>>0]|0))break;h=h+1|0;g=g+1|0}if(h>>>0<=3)continue;g=(h*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(w>>>0>>0)break}c[pa>>2]=h;c[ea>>2]=z;c[fa>>2]=g;t=h;w=g;f=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&255)<<2)>>2]=y;b[D>>1]=Ia+1<<16>>16;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;h=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ia=b[21084+(h<<1)>>1]|0;j=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(Ca=j&31,Da=j>>>5,Ea=(c[11272+(Ca<<2)>>2]|0)+(_(Ca,Da)|0)|0,Ca>>>0<=L>>>0):0){t=Ea+Ca|0;u=280811+t|0;t=280811+(t+-4)|0;g=0;j=280811+Ea|0;while(1){if(j>>>0>t>>>0)break;Ia=k+(K+g)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;g=g+4|0;j=j+4|0}while(1){if(j>>>0>=u>>>0)break;if((a[k+(K+g)>>0]|0)!=(a[j>>0]|0))break;g=g+1|0;j=j+1|0}if(!((g+10|0)>>>0<=Ca>>>0|(g|0)==0)?(Fa=J+Da+1+(d[407930+(Ca-g)>>0]<>0])|0,Ga=(g*540|0)+3840+(_((aa(Fa|0)|0)^31,-120)|0)|0,Ga>>>0>=(c[fa>>2]|0)>>>0):0){c[pa>>2]=g;c[da>>2]=Ca^g;c[ea>>2]=Fa;c[fa>>2]=Ga;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;h=h+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[oa>>2]=c[pa>>2];c[oa+4>>2]=c[pa+4>>2];c[oa+8>>2]=c[pa+8>>2];c[oa+12>>2]=c[pa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[oa>>2]|0;u=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:ma)>>>0){g=f+3|0;Ia=c[o>>2]|0;j=g-Ia|0;t=c[ia>>2]|0;g=g-t|0;if((f|0)==(Ia|0))f=0;else{f:do if((f|0)!=(t|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(g>>>0<7){f=266017486>>>(g<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[oa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ia=c[P>>2]|0;j=m^Ia;c[O>>2]=x;c[O+4>>2]=m|Ia<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ia=((aa(N|0)|0)^31)+-1|0;Ha=N>>>Ia&1;f=((Ia<<1)+65534|Ha)+16&65535;b[m>>1]=f;m=Ia<<24|N-((Ha|2)<>2]=m;h=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ia=x+-2|0;g=((aa(Ia|0)|0)^31)+-1|0;g=(g<<1)+(Ia>>>g)+2&65535;break}if(x>>>0<2114){g=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)g=21;else g=x>>>0<22594?22:23}else g=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ia=j+-6|0;f=((aa(Ia|0)|0)^31)+-1|0;f=(f<<1)+(Ia>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=g&65535;t=m&7|j<<3&56;if(h&(g&65535)<8&(f&65535)<16)f=((f&65535)<8?t:t|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|t&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[oa>>2]|0)|0;f=f>>>0>>0?f:la;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&255|Ha<<8)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+1|0}m=y+(c[oa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=qa;return}function Ra(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;sa=i;i=i+32|0;pa=sa+16|0;qa=sa;na=(1<>2])+-16|0;u=c[p>>2]|0;oa=h+g|0;ma=g>>>0>3?oa+-3|0:h;la=m+4|0;ia=c[la>>2]|0;ja=(ia|0)<9?64:512;t=ja+h|0;ka=n+524300|0;c[ka>>2]=((ia|0)>6?7:8)<>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;c[n+(ia<<2)>>2]=-858993460;b[n+131072+(ia<<1)>>1]=-13108;f=f+1|0}ac(n+196608|0,0,65536)|0;b[n+524288>>1]=0;if(g){a[n+524290>>0]=0;ra=8}}else{f=n+524290|0;if(!(a[f>>0]&1))ra=8;else{ac(n|0,-52,131072)|0;b[n+524288>>1]=0;a[f>>0]=0;ac(n+131072|0,0,131072)|0;ra=8}}if((ra|0)==8?g>>>0>2&h>>>0>2:0){da=h+-3|0;ga=k+(da&l)|0;ga=(_(d[ga>>0]|d[ga+1>>0]<<8|d[ga+2>>0]<<16|d[ga+3>>0]<<24,506832829)|0)>>>17;ea=n+524288|0;fa=b[ea>>1]|0;b[ea>>1]=fa+1<<16>>16;ha=fa&65535;ia=n+(ga<<2)|0;ca=da-(c[ia>>2]|0)|0;a[(da&65535)+(n+196608)>>0]=ga;b[n+262144+(ha<<2)>>1]=ca>>>0>65535?65535:ca;ga=n+131072+(ga<<1)|0;b[n+262144+(ha<<2)+2>>1]=b[ga>>1]|0;c[ia>>2]=da;b[ga>>1]=fa;ga=h+-2|0;fa=k+(ga&l)|0;fa=(_(d[fa>>0]|d[fa+1>>0]<<8|d[fa+2>>0]<<16|d[fa+3>>0]<<24,506832829)|0)>>>17;ia=b[ea>>1]|0;b[ea>>1]=ia+1<<16>>16;da=ia&65535;ha=n+(fa<<2)|0;ca=ga-(c[ha>>2]|0)|0;a[(ga&65535)+(n+196608)>>0]=fa;b[n+262144+(da<<2)>>1]=ca>>>0>65535?65535:ca;fa=n+131072+(fa<<1)|0;b[n+262144+(da<<2)+2>>1]=b[fa>>1]|0;c[ha>>2]=ga;b[fa>>1]=ia;fa=h+-1|0;ia=k+(fa&l)|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;ha=b[ea>>1]|0;b[ea>>1]=ha+1<<16>>16;ea=ha&65535;ga=n+(ia<<2)|0;da=fa-(c[ga>>2]|0)|0;a[(fa&65535)+(n+196608)>>0]=ia;b[n+262144+(ea<<2)>>1]=da>>>0>65535?65535:da;ia=n+131072+(ia<<1)|0;b[n+262144+(ea<<2)+2>>1]=b[ia>>1]|0;c[ga>>2]=fa;b[ia>>1]=ha}O=pa+4|0;P=pa+8|0;Q=pa+12|0;R=pa+4|0;S=pa+8|0;T=pa+12|0;U=n+524288|0;V=n+524296|0;W=n+524292|0;X=ja<<2;Y=oa+-4|0;Z=oa+-3|0;$=qa+12|0;ba=qa+4|0;ca=qa+8|0;da=qa+4|0;ea=qa+8|0;fa=qa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;N=q;f=u;a:while(1){L=N;M=t+X|0;b:while(1){K=oa-m|0;if((m+4|0)>>>0>=oa>>>0)break a;I=m>>>0>>0?m:na;c[pa>>2]=0;c[O>>2]=0;c[P>>2]=0;c[Q>>2]=4240;J=m&l;z=c[pa>>2]|0;H=k+J|0;B=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;y=B&255;c[pa>>2]=0;c[R>>2]=0;G=J+K|0;F=k+G|0;E=H;G=k+(G+-4)|0;h=4240;j=0;A=0;while(1){if((A|0)==4)break;x=(c[o+(c[11372+(A<<2)>>2]<<2)>>2]|0)+(c[11436+(A<<2)>>2]|0)|0;g=m-x|0;if(!A)if(g>>>0>=m>>>0|x>>>0>I>>>0)g=z;else ra=17;else if((g>>>0>>0?(a[(g&65535)+(n+196608)>>0]|0)==y<<24>>24:0)^1|x>>>0>I>>>0)g=z;else ra=17;if((ra|0)==17){ra=0;w=g&l;g=0;u=E;while(1){v=u;if(v>>>0>G>>>0)break;C=u;D=k+(w+g)|0;if((d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24|0)!=(d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0))break;g=g+4|0;u=v+4|0}while(1){if(u>>>0>=F>>>0)break;if((a[k+(w+g)>>0]|0)!=(a[u>>0]|0))break;g=g+1|0;u=u+1|0}if(g>>>0>1?(ta=(g*540|0)+(c[11500+(A<<2)>>2]|0)|0,h>>>0>>0):0){c[pa>>2]=g;c[S>>2]=x;c[T>>2]=ta;h=ta;j=1}else g=z}z=g;A=A+1|0}w=0;u=m-(c[n+(B<<2)>>2]|0)|0;v=c[ka>>2]|0;g=e[n+131072+(B<<1)>>1]|0;c:while(1){D=J+z|0;C=D>>>0>l>>>0;D=k+D|0;x=w;y=u;A=v;B=g;while(1){w=A;A=A+-1|0;if(!w)break c;x=x+y|0;if(x>>>0>I>>>0)break c;w=m-x&l;y=B;B=e[n+262144+(B<<2)+2>>1]|0;y=e[n+262144+(y<<2)>>1]|0;if(C)continue;g=w+z|0;if(g>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+g>>0]|0)){v=0;g=E}else continue;while(1){u=g;if(u>>>0>G>>>0)break;Ga=g;Fa=k+(w+v)|0;if((d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0)!=(d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0))break;v=v+4|0;g=u+4|0}while(1){if(g>>>0>=F>>>0)break;if((a[k+(w+v)>>0]|0)!=(a[g>>0]|0))break;v=v+1|0;g=g+1|0}if(v>>>0<=3)continue;g=(v*540|0)+3840+(_((aa(x|0)|0)^31,-120)|0)|0;if(h>>>0>>0)break}c[pa>>2]=v;c[S>>2]=x;c[T>>2]=g;w=x;z=v;h=g;u=y;v=A;j=1;g=B}Ga=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;F=Fa&65535;G=n+(Ga<<2)|0;E=m-(c[G>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(F<<2)>>1]=E>>>0>65535?65535:E;Ga=n+131072+(Ga<<1)|0;b[n+262144+(F<<2)+2>>1]=b[Ga>>1]|0;c[G>>2]=m;b[Ga>>1]=Fa;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ga=b[21084+(w<<1)>>1]|0;g=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(ua=g&31,va=g>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=K>>>0):0){h=wa+ua|0;v=280811+h|0;h=280811+(h+-4)|0;u=0;g=280811+wa|0;while(1){if(g>>>0>h>>>0)break;Ga=k+(J+u)|0;if((d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;u=u+4|0;g=g+4|0}while(1){if(g>>>0>=v>>>0)break;if((a[k+(J+u)>>0]|0)!=(a[g>>0]|0))break;u=u+1|0;g=g+1|0}if(!((u+10|0)>>>0<=ua>>>0|(u|0)==0)?(xa=I+va+1+(d[407930+(ua-u)>>0]<>0])|0,ya=(u*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[T>>2]|0)>>>0):0){c[pa>>2]=u;c[R>>2]=ua^u;c[S>>2]=xa;c[T>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){L=0;x=f;break}f=f+1|0;g=m+1|0;if(g>>>0<=t>>>0){m=g;continue}if(g>>>0>M>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;J=Fa&65535;K=n+(Ga<<2)|0;I=m-(c[K>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(J<<2)>>1]=I>>>0>65535?65535:I;Ga=n+131072+(Ga<<1)|0;b[n+262144+(J<<2)+2>>1]=b[Ga>>1]|0;c[K>>2]=m;b[Ga>>1]=Fa;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;J=Fa&65535;K=n+(Ga<<2)|0;I=m-(c[K>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(J<<2)>>1]=I>>>0>65535?65535:I;Ga=n+131072+(Ga<<1)|0;b[n+262144+(J<<2)+2>>1]=b[Ga>>1]|0;c[K>>2]=m;b[Ga>>1]=Fa;m=m+2|0;f=f+2|0}}}while(1){K=K+-1|0;if((c[la>>2]|0)<5){f=(c[pa>>2]|0)+-1|0;f=f>>>0>>0?f:K}else f=0;c[qa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;I=y>>>0>>0?y:na;J=y&l;z=c[qa>>2]|0;H=k+J|0;B=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;w=B&255;c[qa>>2]=0;c[da>>2]=0;G=J+K|0;F=k+G|0;E=H;G=k+(G+-4)|0;g=4240;f=0;A=0;while(1){if((A|0)==4)break;v=(c[o+(c[11372+(A<<2)>>2]<<2)>>2]|0)+(c[11436+(A<<2)>>2]|0)|0;j=y-v|0;if(!A)if(j>>>0>=y>>>0|v>>>0>I>>>0)j=z;else ra=71;else if((j>>>0>>0?(a[(j&65535)+(n+196608)>>0]|0)==w<<24>>24:0)^1|v>>>0>I>>>0)j=z;else ra=71;if((ra|0)==71){ra=0;u=j&l;j=0;t=E;while(1){h=t;if(h>>>0>G>>>0)break;Fa=t;Ga=k+(u+j)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;j=j+4|0;t=h+4|0}while(1){if(t>>>0>=F>>>0)break;if((a[k+(u+j)>>0]|0)!=(a[t>>0]|0))break;j=j+1|0;t=t+1|0}if(j>>>0>1?(za=(j*540|0)+(c[11500+(A<<2)>>2]|0)|0,g>>>0>>0):0){c[qa>>2]=j;c[ea>>2]=v;c[fa>>2]=za;g=za;f=1}else j=z}z=j;A=A+1|0}u=0;t=y-(c[n+(B<<2)>>2]|0)|0;h=c[ka>>2]|0;j=e[n+131072+(B<<1)>>1]|0;d:while(1){D=J+z|0;C=D>>>0>l>>>0;D=k+D|0;v=u;w=t;A=h;B=j;while(1){Ga=A;A=A+-1|0;if(!Ga)break d;v=v+w|0;if(v>>>0>I>>>0)break d;u=y-v&l;w=B;B=e[n+262144+(B<<2)+2>>1]|0;w=e[n+262144+(w<<2)>>1]|0;if(C)continue;j=u+z|0;if(j>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+j>>0]|0)){h=0;j=E}else continue;while(1){t=j;if(t>>>0>G>>>0)break;Fa=j;Ga=k+(u+h)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;h=h+4|0;j=t+4|0}while(1){if(j>>>0>=F>>>0)break;if((a[k+(u+h)>>0]|0)!=(a[j>>0]|0))break;h=h+1|0;j=j+1|0}if(h>>>0<=3)continue;j=(h*540|0)+3840+(_((aa(v|0)|0)^31,-120)|0)|0;if(g>>>0>>0)break}c[qa>>2]=h;c[ea>>2]=v;c[fa>>2]=j;u=v;z=h;g=j;t=w;h=A;f=1;j=B}Ga=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;G=Fa&65535;M=n+(Ga<<2)|0;F=y-(c[M>>2]|0)|0;a[(y&65535)+(n+196608)>>0]=Ga;b[n+262144+(G<<2)>>1]=F>>>0>65535?65535:F;Ga=n+131072+(Ga<<1)|0;b[n+262144+(G<<2)+2>>1]=b[Ga>>1]|0;c[M>>2]=y;b[Ga>>1]=Fa;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;u=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ga=b[21084+(u<<1)>>1]|0;j=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(Aa=j&31,Ba=j>>>5,Ca=(c[11272+(Aa<<2)>>2]|0)+(_(Aa,Ba)|0)|0,Aa>>>0<=K>>>0):0){g=Ca+Aa|0;h=280811+g|0;g=280811+(g+-4)|0;t=0;j=280811+Ca|0;while(1){if(j>>>0>g>>>0)break;Ga=k+(J+t)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;t=t+4|0;j=j+4|0}while(1){if(j>>>0>=h>>>0)break;if((a[k+(J+t)>>0]|0)!=(a[j>>0]|0))break;t=t+1|0;j=j+1|0}if(!((t+10|0)>>>0<=Aa>>>0|(t|0)==0)?(Da=I+Ba+1+(d[407930+(Aa-t)>>0]<>0])|0,Ea=(t*540|0)+3840+(_((aa(Da|0)|0)^31,-120)|0)|0,Ea>>>0>=(c[fa>>2]|0)>>>0):0){c[qa>>2]=t;c[da>>2]=Aa^t;c[ea>>2]=Da;c[fa>>2]=Ea;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;u=u+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[Q>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[pa>>2]=c[qa>>2];c[pa+4>>2]=c[qa+4>>2];c[pa+8>>2]=c[qa+8>>2];c[pa+12>>2]=c[qa+12>>2];L=L+1|0;if(!((L|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[pa>>2]|0;t=y+(m<<1)+ja|0;f=c[P>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:na)>>>0){h=f+3|0;Ga=c[o>>2]|0;j=h-Ga|0;g=c[ia>>2]|0;h=h-g|0;if((f|0)==(Ga|0))f=0;else{f:do if((f|0)!=(g|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(h>>>0<7){f=266017486>>>(h<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[P>>2];m=c[pa>>2]|0}}else f=f+15|0;while(0);w=N+16|0;Ga=c[O>>2]|0;j=m^Ga;c[N>>2]=x;c[N+4>>2]=m|Ga<<24;m=N+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{M=f+-12|0;Ga=((aa(M|0)|0)^31)+-1|0;Fa=M>>>Ga&1;f=((Ga<<1)+65534|Fa)+16&65535;b[m>>1]=f;m=Ga<<24|M-((Fa|2)<>2]=m;u=f<<16>>16==0;v=N+12|0;do if(x>>>0>=6){if(x>>>0<130){Ga=x+-2|0;h=((aa(Ga|0)|0)^31)+-1|0;h=(h<<1)+(Ga>>>h)+2&65535;break}if(x>>>0<2114){h=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)h=21;else h=x>>>0<22594?22:23}else h=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ga=j+-6|0;f=((aa(Ga|0)|0)^31)+-1|0;f=(f<<1)+(Ga>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=h&65535;g=m&7|j<<3&56;if(u&(h&65535)<8&(f&65535)<16)f=((f&65535)<8?g:g|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|g&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[pa>>2]|0)|0;f=f>>>0>>0?f:ma;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;M=Fa&65535;N=n+(Ga<<2)|0;L=m-(c[N>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(M<<2)>>1]=L>>>0>65535?65535:L;Ga=n+131072+(Ga<<1)|0;b[n+262144+(M<<2)+2>>1]=b[Ga>>1]|0;c[N>>2]=m;b[Ga>>1]=Fa;m=m+1|0}m=y+(c[pa>>2]|0)|0;N=w;f=0}c[p>>2]=f+K;c[r>>2]=(c[r>>2]|0)+(L-q>>4);i=sa;return}function Sa(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;sa=i;i=i+32|0;pa=sa+16|0;qa=sa;na=(1<>2])+-16|0;u=c[p>>2]|0;oa=h+g|0;ma=g>>>0>3?oa+-3|0:h;la=m+4|0;ia=c[la>>2]|0;ja=(ia|0)<9?64:512;t=ja+h|0;ka=n+524300|0;c[ka>>2]=((ia|0)>6?7:8)<>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;c[n+(ia<<2)>>2]=-858993460;b[n+131072+(ia<<1)>>1]=-13108;f=f+1|0}ac(n+196608|0,0,65536)|0;b[n+524288>>1]=0;if(g){a[n+524290>>0]=0;ra=8}}else{f=n+524290|0;if(!(a[f>>0]&1))ra=8;else{ac(n|0,-52,131072)|0;b[n+524288>>1]=0;a[f>>0]=0;ac(n+131072|0,0,131072)|0;ra=8}}if((ra|0)==8?g>>>0>2&h>>>0>2:0){da=h+-3|0;ga=k+(da&l)|0;ga=(_(d[ga>>0]|d[ga+1>>0]<<8|d[ga+2>>0]<<16|d[ga+3>>0]<<24,506832829)|0)>>>17;ea=n+524288|0;fa=b[ea>>1]|0;b[ea>>1]=fa+1<<16>>16;ha=fa&65535;ia=n+(ga<<2)|0;ca=da-(c[ia>>2]|0)|0;a[(da&65535)+(n+196608)>>0]=ga;b[n+262144+(ha<<2)>>1]=ca>>>0>65535?65535:ca;ga=n+131072+(ga<<1)|0;b[n+262144+(ha<<2)+2>>1]=b[ga>>1]|0;c[ia>>2]=da;b[ga>>1]=fa;ga=h+-2|0;fa=k+(ga&l)|0;fa=(_(d[fa>>0]|d[fa+1>>0]<<8|d[fa+2>>0]<<16|d[fa+3>>0]<<24,506832829)|0)>>>17;ia=b[ea>>1]|0;b[ea>>1]=ia+1<<16>>16;da=ia&65535;ha=n+(fa<<2)|0;ca=ga-(c[ha>>2]|0)|0;a[(ga&65535)+(n+196608)>>0]=fa;b[n+262144+(da<<2)>>1]=ca>>>0>65535?65535:ca;fa=n+131072+(fa<<1)|0;b[n+262144+(da<<2)+2>>1]=b[fa>>1]|0;c[ha>>2]=ga;b[fa>>1]=ia;fa=h+-1|0;ia=k+(fa&l)|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;ha=b[ea>>1]|0;b[ea>>1]=ha+1<<16>>16;ea=ha&65535;ga=n+(ia<<2)|0;da=fa-(c[ga>>2]|0)|0;a[(fa&65535)+(n+196608)>>0]=ia;b[n+262144+(ea<<2)>>1]=da>>>0>65535?65535:da;ia=n+131072+(ia<<1)|0;b[n+262144+(ea<<2)+2>>1]=b[ia>>1]|0;c[ga>>2]=fa;b[ia>>1]=ha}O=pa+4|0;P=pa+8|0;Q=pa+12|0;R=pa+4|0;S=pa+8|0;T=pa+12|0;U=n+524288|0;V=n+524296|0;W=n+524292|0;X=ja<<2;Y=oa+-4|0;Z=oa+-3|0;$=qa+12|0;ba=qa+4|0;ca=qa+8|0;da=qa+4|0;ea=qa+8|0;fa=qa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;N=q;f=u;a:while(1){L=N;M=t+X|0;b:while(1){K=oa-m|0;if((m+4|0)>>>0>=oa>>>0)break a;I=m>>>0>>0?m:na;c[pa>>2]=0;c[O>>2]=0;c[P>>2]=0;c[Q>>2]=4240;J=m&l;z=c[pa>>2]|0;H=k+J|0;B=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;y=B&255;c[pa>>2]=0;c[R>>2]=0;G=J+K|0;F=k+G|0;E=H;G=k+(G+-4)|0;h=4240;j=0;A=0;while(1){if((A|0)==10)break;x=(c[o+(c[11372+(A<<2)>>2]<<2)>>2]|0)+(c[11436+(A<<2)>>2]|0)|0;g=m-x|0;if(!A)if(g>>>0>=m>>>0|x>>>0>I>>>0)g=z;else ra=17;else if((g>>>0>>0?(a[(g&65535)+(n+196608)>>0]|0)==y<<24>>24:0)^1|x>>>0>I>>>0)g=z;else ra=17;if((ra|0)==17){ra=0;w=g&l;g=0;u=E;while(1){v=u;if(v>>>0>G>>>0)break;C=u;D=k+(w+g)|0;if((d[C>>0]|d[C+1>>0]<<8|d[C+2>>0]<<16|d[C+3>>0]<<24|0)!=(d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0))break;g=g+4|0;u=v+4|0}while(1){if(u>>>0>=F>>>0)break;if((a[k+(w+g)>>0]|0)!=(a[u>>0]|0))break;g=g+1|0;u=u+1|0}if(g>>>0>1?(ta=(g*540|0)+(c[11500+(A<<2)>>2]|0)|0,h>>>0>>0):0){c[pa>>2]=g;c[S>>2]=x;c[T>>2]=ta;h=ta;j=1}else g=z}z=g;A=A+1|0}w=0;u=m-(c[n+(B<<2)>>2]|0)|0;v=c[ka>>2]|0;g=e[n+131072+(B<<1)>>1]|0;c:while(1){D=J+z|0;C=D>>>0>l>>>0;D=k+D|0;x=w;y=u;A=v;B=g;while(1){w=A;A=A+-1|0;if(!w)break c;x=x+y|0;if(x>>>0>I>>>0)break c;w=m-x&l;y=B;B=e[n+262144+(B<<2)+2>>1]|0;y=e[n+262144+(y<<2)>>1]|0;if(C)continue;g=w+z|0;if(g>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+g>>0]|0)){v=0;g=E}else continue;while(1){u=g;if(u>>>0>G>>>0)break;Ga=g;Fa=k+(w+v)|0;if((d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0)!=(d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0))break;v=v+4|0;g=u+4|0}while(1){if(g>>>0>=F>>>0)break;if((a[k+(w+v)>>0]|0)!=(a[g>>0]|0))break;v=v+1|0;g=g+1|0}if(v>>>0<=3)continue;g=(v*540|0)+3840+(_((aa(x|0)|0)^31,-120)|0)|0;if(h>>>0>>0)break}c[pa>>2]=v;c[S>>2]=x;c[T>>2]=g;w=x;z=v;h=g;u=y;v=A;j=1;g=B}Ga=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;F=Fa&65535;G=n+(Ga<<2)|0;E=m-(c[G>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(F<<2)>>1]=E>>>0>65535?65535:E;Ga=n+131072+(Ga<<1)|0;b[n+262144+(F<<2)+2>>1]=b[Ga>>1]|0;c[G>>2]=m;b[Ga>>1]=Fa;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ga=b[21084+(w<<1)>>1]|0;g=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(ua=g&31,va=g>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=K>>>0):0){h=wa+ua|0;v=280811+h|0;h=280811+(h+-4)|0;u=0;g=280811+wa|0;while(1){if(g>>>0>h>>>0)break;Ga=k+(J+u)|0;if((d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;u=u+4|0;g=g+4|0}while(1){if(g>>>0>=v>>>0)break;if((a[k+(J+u)>>0]|0)!=(a[g>>0]|0))break;u=u+1|0;g=g+1|0}if(!((u+10|0)>>>0<=ua>>>0|(u|0)==0)?(xa=I+va+1+(d[407930+(ua-u)>>0]<>0])|0,ya=(u*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[T>>2]|0)>>>0):0){c[pa>>2]=u;c[R>>2]=ua^u;c[S>>2]=xa;c[T>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){L=0;x=f;break}f=f+1|0;g=m+1|0;if(g>>>0<=t>>>0){m=g;continue}if(g>>>0>M>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;J=Fa&65535;K=n+(Ga<<2)|0;I=m-(c[K>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(J<<2)>>1]=I>>>0>65535?65535:I;Ga=n+131072+(Ga<<1)|0;b[n+262144+(J<<2)+2>>1]=b[Ga>>1]|0;c[K>>2]=m;b[Ga>>1]=Fa;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;J=Fa&65535;K=n+(Ga<<2)|0;I=m-(c[K>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(J<<2)>>1]=I>>>0>65535?65535:I;Ga=n+131072+(Ga<<1)|0;b[n+262144+(J<<2)+2>>1]=b[Ga>>1]|0;c[K>>2]=m;b[Ga>>1]=Fa;m=m+2|0;f=f+2|0}}}while(1){K=K+-1|0;if((c[la>>2]|0)<5){f=(c[pa>>2]|0)+-1|0;f=f>>>0>>0?f:K}else f=0;c[qa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;I=y>>>0>>0?y:na;J=y&l;z=c[qa>>2]|0;H=k+J|0;B=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;w=B&255;c[qa>>2]=0;c[da>>2]=0;G=J+K|0;F=k+G|0;E=H;G=k+(G+-4)|0;g=4240;f=0;A=0;while(1){if((A|0)==10)break;v=(c[o+(c[11372+(A<<2)>>2]<<2)>>2]|0)+(c[11436+(A<<2)>>2]|0)|0;j=y-v|0;if(!A)if(j>>>0>=y>>>0|v>>>0>I>>>0)j=z;else ra=71;else if((j>>>0>>0?(a[(j&65535)+(n+196608)>>0]|0)==w<<24>>24:0)^1|v>>>0>I>>>0)j=z;else ra=71;if((ra|0)==71){ra=0;u=j&l;j=0;t=E;while(1){h=t;if(h>>>0>G>>>0)break;Fa=t;Ga=k+(u+j)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;j=j+4|0;t=h+4|0}while(1){if(t>>>0>=F>>>0)break;if((a[k+(u+j)>>0]|0)!=(a[t>>0]|0))break;j=j+1|0;t=t+1|0}if(j>>>0>1?(za=(j*540|0)+(c[11500+(A<<2)>>2]|0)|0,g>>>0>>0):0){c[qa>>2]=j;c[ea>>2]=v;c[fa>>2]=za;g=za;f=1}else j=z}z=j;A=A+1|0}u=0;t=y-(c[n+(B<<2)>>2]|0)|0;h=c[ka>>2]|0;j=e[n+131072+(B<<1)>>1]|0;d:while(1){D=J+z|0;C=D>>>0>l>>>0;D=k+D|0;v=u;w=t;A=h;B=j;while(1){Ga=A;A=A+-1|0;if(!Ga)break d;v=v+w|0;if(v>>>0>I>>>0)break d;u=y-v&l;w=B;B=e[n+262144+(B<<2)+2>>1]|0;w=e[n+262144+(w<<2)>>1]|0;if(C)continue;j=u+z|0;if(j>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+j>>0]|0)){h=0;j=E}else continue;while(1){t=j;if(t>>>0>G>>>0)break;Fa=j;Ga=k+(u+h)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;h=h+4|0;j=t+4|0}while(1){if(j>>>0>=F>>>0)break;if((a[k+(u+h)>>0]|0)!=(a[j>>0]|0))break;h=h+1|0;j=j+1|0}if(h>>>0<=3)continue;j=(h*540|0)+3840+(_((aa(v|0)|0)^31,-120)|0)|0;if(g>>>0>>0)break}c[qa>>2]=h;c[ea>>2]=v;c[fa>>2]=j;u=v;z=h;g=j;t=w;h=A;f=1;j=B}Ga=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;G=Fa&65535;M=n+(Ga<<2)|0;F=y-(c[M>>2]|0)|0;a[(y&65535)+(n+196608)>>0]=Ga;b[n+262144+(G<<2)>>1]=F>>>0>65535?65535:F;Ga=n+131072+(Ga<<1)|0;b[n+262144+(G<<2)+2>>1]=b[Ga>>1]|0;c[M>>2]=y;b[Ga>>1]=Fa;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;u=(_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ga=b[21084+(u<<1)>>1]|0;j=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(Aa=j&31,Ba=j>>>5,Ca=(c[11272+(Aa<<2)>>2]|0)+(_(Aa,Ba)|0)|0,Aa>>>0<=K>>>0):0){g=Ca+Aa|0;h=280811+g|0;g=280811+(g+-4)|0;t=0;j=280811+Ca|0;while(1){if(j>>>0>g>>>0)break;Ga=k+(J+t)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;t=t+4|0;j=j+4|0}while(1){if(j>>>0>=h>>>0)break;if((a[k+(J+t)>>0]|0)!=(a[j>>0]|0))break;t=t+1|0;j=j+1|0}if(!((t+10|0)>>>0<=Aa>>>0|(t|0)==0)?(Da=I+Ba+1+(d[407930+(Aa-t)>>0]<>0])|0,Ea=(t*540|0)+3840+(_((aa(Da|0)|0)^31,-120)|0)|0,Ea>>>0>=(c[fa>>2]|0)>>>0):0){c[qa>>2]=t;c[da>>2]=Aa^t;c[ea>>2]=Da;c[fa>>2]=Ea;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;u=u+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[Q>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[pa>>2]=c[qa>>2];c[pa+4>>2]=c[qa+4>>2];c[pa+8>>2]=c[qa+8>>2];c[pa+12>>2]=c[qa+12>>2];L=L+1|0;if(!((L|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[pa>>2]|0;t=y+(m<<1)+ja|0;f=c[P>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:na)>>>0){h=f+3|0;Ga=c[o>>2]|0;j=h-Ga|0;g=c[ia>>2]|0;h=h-g|0;if((f|0)==(Ga|0))f=0;else{f:do if((f|0)!=(g|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(h>>>0<7){f=266017486>>>(h<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[P>>2];m=c[pa>>2]|0}}else f=f+15|0;while(0);w=N+16|0;Ga=c[O>>2]|0;j=m^Ga;c[N>>2]=x;c[N+4>>2]=m|Ga<<24;m=N+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{M=f+-12|0;Ga=((aa(M|0)|0)^31)+-1|0;Fa=M>>>Ga&1;f=((Ga<<1)+65534|Fa)+16&65535;b[m>>1]=f;m=Ga<<24|M-((Fa|2)<>2]=m;u=f<<16>>16==0;v=N+12|0;do if(x>>>0>=6){if(x>>>0<130){Ga=x+-2|0;h=((aa(Ga|0)|0)^31)+-1|0;h=(h<<1)+(Ga>>>h)+2&65535;break}if(x>>>0<2114){h=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)h=21;else h=x>>>0<22594?22:23}else h=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ga=j+-6|0;f=((aa(Ga|0)|0)^31)+-1|0;f=(f<<1)+(Ga>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=h&65535;g=m&7|j<<3&56;if(u&(h&65535)<8&(f&65535)<16)f=((f&65535)<8?g:g|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|g&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[pa>>2]|0)|0;f=f>>>0>>0?f:ma;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;Fa=b[U>>1]|0;b[U>>1]=Fa+1<<16>>16;M=Fa&65535;N=n+(Ga<<2)|0;L=m-(c[N>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(M<<2)>>1]=L>>>0>65535?65535:L;Ga=n+131072+(Ga<<1)|0;b[n+262144+(M<<2)+2>>1]=b[Ga>>1]|0;c[N>>2]=m;b[Ga>>1]=Fa;m=m+1|0}m=y+(c[pa>>2]|0)|0;N=w;f=0}c[p>>2]=f+K;c[r>>2]=(c[r>>2]|0)+(L-q>>4);i=sa;return}function Ta(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;ra=i;i=i+32|0;pa=ra+16|0;qa=ra;na=(1<>2])+-16|0;u=c[p>>2]|0;oa=h+g|0;ma=g>>>0>3?oa+-3|0:h;la=m+4|0;ia=c[la>>2]|0;ja=(ia|0)<9?64:512;t=ja+h|0;ka=n+1311756|0;c[ka>>2]=((ia|0)>6?7:8)<>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;c[n+(ia<<2)>>2]=-858993460;b[n+131072+(ia<<1)>>1]=-13108;f=f+1|0}ac(n+196608|0,0,65536)|0;ac(n+1310720|0,0,1024)|0;if(g){a[n+1311744>>0]=0;Ea=8}}else if(!(a[n+1311744>>0]&1))Ea=8;else{ac(n|0,-52,131072)|0;ac(n+131072|0,0,131072)|0;ac(n+1310720|0,0,1025)|0;Ea=8}if((Ea|0)==8?g>>>0>2&h>>>0>2:0){ea=h+-3|0;ga=k+(ea&l)|0;ga=(_(d[ga>>0]|d[ga+1>>0]<<8|d[ga+2>>0]<<16|d[ga+3>>0]<<24,506832829)|0)>>>17;ia=ga&511;ha=n+1310720+(ia<<1)|0;fa=b[ha>>1]|0;b[ha>>1]=fa+1<<16>>16;fa=fa&511;ha=n+(ga<<2)|0;da=ea-(c[ha>>2]|0)|0;a[(ea&65535)+(n+196608)>>0]=ga;b[n+262144+(ia<<11)+(fa<<2)>>1]=da>>>0>65535?65535:da;ga=n+131072+(ga<<1)|0;b[n+262144+(ia<<11)+(fa<<2)+2>>1]=b[ga>>1]|0;c[ha>>2]=ea;b[ga>>1]=fa;ga=h+-2|0;fa=k+(ga&l)|0;fa=(_(d[fa>>0]|d[fa+1>>0]<<8|d[fa+2>>0]<<16|d[fa+3>>0]<<24,506832829)|0)>>>17;ha=fa&511;ea=n+1310720+(ha<<1)|0;ia=b[ea>>1]|0;b[ea>>1]=ia+1<<16>>16;ia=ia&511;ea=n+(fa<<2)|0;da=ga-(c[ea>>2]|0)|0;a[(ga&65535)+(n+196608)>>0]=fa;b[n+262144+(ha<<11)+(ia<<2)>>1]=da>>>0>65535?65535:da;fa=n+131072+(fa<<1)|0;b[n+262144+(ha<<11)+(ia<<2)+2>>1]=b[fa>>1]|0;c[ea>>2]=ga;b[fa>>1]=ia;fa=h+-1|0;ia=k+(fa&l)|0;ia=(_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17;ea=ia&511;ga=n+1310720+(ea<<1)|0;ha=b[ga>>1]|0;b[ga>>1]=ha+1<<16>>16;ha=ha&511;ga=n+(ia<<2)|0;da=fa-(c[ga>>2]|0)|0;a[(fa&65535)+(n+196608)>>0]=ia;b[n+262144+(ea<<11)+(ha<<2)>>1]=da>>>0>65535?65535:da;ia=n+131072+(ia<<1)|0;b[n+262144+(ea<<11)+(ha<<2)+2>>1]=b[ia>>1]|0;c[ga>>2]=fa;b[ia>>1]=ha}P=pa+4|0;Q=pa+8|0;R=pa+12|0;S=pa+4|0;T=pa+8|0;U=pa+12|0;V=n+1311752|0;W=n+1311748|0;X=ja<<2;Y=oa+-4|0;Z=oa+-3|0;$=qa+12|0;ba=qa+4|0;ca=qa+8|0;da=qa+4|0;ea=qa+8|0;fa=qa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=u;a:while(1){M=O;N=t+X|0;b:while(1){L=oa-m|0;if((m+4|0)>>>0>=oa>>>0)break a;J=m>>>0>>0?m:na;c[pa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;A=c[pa>>2]|0;I=k+K|0;B=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;y=B&255;c[pa>>2]=0;c[S>>2]=0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;h=4240;j=0;z=0;while(1){if((z|0)==16)break;x=(c[o+(c[11372+(z<<2)>>2]<<2)>>2]|0)+(c[11436+(z<<2)>>2]|0)|0;g=m-x|0;if(!z)if(g>>>0>=m>>>0|x>>>0>J>>>0)g=A;else Ea=17;else if((g>>>0>>0?(a[(g&65535)+(n+196608)>>0]|0)==y<<24>>24:0)^1|x>>>0>J>>>0)g=A;else Ea=17;if((Ea|0)==17){Ea=0;w=g&l;g=0;u=F;while(1){v=u;if(v>>>0>H>>>0)break;D=u;E=k+(w+g)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;g=g+4|0;u=v+4|0}while(1){if(u>>>0>=G>>>0)break;if((a[k+(w+g)>>0]|0)!=(a[u>>0]|0))break;g=g+1|0;u=u+1|0}if(g>>>0>1?(sa=(g*540|0)+(c[11500+(z<<2)>>2]|0)|0,h>>>0>>0):0){c[pa>>2]=g;c[T>>2]=x;c[U>>2]=sa;h=sa;j=1}else g=A}A=g;z=z+1|0}E=B&511;w=0;u=m-(c[n+(B<<2)>>2]|0)|0;v=c[ka>>2]|0;g=e[n+131072+(B<<1)>>1]|0;c:while(1){D=K+A|0;C=D>>>0>l>>>0;D=k+D|0;x=w;y=u;z=v;B=g;while(1){w=z;z=z+-1|0;if(!w)break c;x=x+y|0;if(x>>>0>J>>>0)break c;w=m-x&l;y=B;B=e[n+262144+(E<<11)+(B<<2)+2>>1]|0;y=e[n+262144+(E<<11)+(y<<2)>>1]|0;if(C)continue;g=w+A|0;if(g>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+g>>0]|0)){v=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ga=g;Fa=k+(w+v)|0;if((d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0)!=(d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0))break;v=v+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(w+v)>>0]|0)!=(a[g>>0]|0))break;v=v+1|0;g=g+1|0}if(v>>>0<=3)continue;g=(v*540|0)+3840+(_((aa(x|0)|0)^31,-120)|0)|0;if(h>>>0>>0)break}c[pa>>2]=v;c[T>>2]=x;c[U>>2]=g;w=x;A=v;h=g;u=y;v=z;j=1;g=B}Ga=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;G=Ga&511;H=n+1310720+(G<<1)|0;Fa=b[H>>1]|0;b[H>>1]=Fa+1<<16>>16;Fa=Fa&511;H=n+(Ga<<2)|0;F=m-(c[H>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(G<<11)+(Fa<<2)>>1]=F>>>0>65535?65535:F;Ga=n+131072+(Ga<<1)|0;b[n+262144+(G<<11)+(Fa<<2)+2>>1]=b[Ga>>1]|0;c[H>>2]=m;b[Ga>>1]=Fa;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ga=b[21084+(w<<1)>>1]|0;g=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(ta=g&31,ua=g>>>5,va=(c[11272+(ta<<2)>>2]|0)+(_(ta,ua)|0)|0,ta>>>0<=L>>>0):0){h=va+ta|0;v=280811+h|0;h=280811+(h+-4)|0;u=0;g=280811+va|0;while(1){if(g>>>0>h>>>0)break;Ga=k+(K+u)|0;if((d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;u=u+4|0;g=g+4|0}while(1){if(g>>>0>=v>>>0)break;if((a[k+(K+u)>>0]|0)!=(a[g>>0]|0))break;u=u+1|0;g=g+1|0}if(!((u+10|0)>>>0<=ta>>>0|(u|0)==0)?(wa=J+ua+1+(d[407930+(ta-u)>>0]<>0])|0,xa=(u*540|0)+3840+(_((aa(wa|0)|0)^31,-120)|0)|0,xa>>>0>=(c[U>>2]|0)>>>0):0){c[pa>>2]=u;c[S>>2]=ta^u;c[T>>2]=wa;c[U>>2]=xa;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;g=m+1|0;if(g>>>0<=t>>>0){m=g;continue}if(g>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;K=Ga&511;L=n+1310720+(K<<1)|0;Fa=b[L>>1]|0;b[L>>1]=Fa+1<<16>>16;Fa=Fa&511;L=n+(Ga<<2)|0;J=m-(c[L>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(K<<11)+(Fa<<2)>>1]=J>>>0>65535?65535:J;Ga=n+131072+(Ga<<1)|0;b[n+262144+(K<<11)+(Fa<<2)+2>>1]=b[Ga>>1]|0;c[L>>2]=m;b[Ga>>1]=Fa;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=g;while(1){if(m>>>0>=j>>>0)continue b;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;K=Ga&511;L=n+1310720+(K<<1)|0;Fa=b[L>>1]|0;b[L>>1]=Fa+1<<16>>16;Fa=Fa&511;L=n+(Ga<<2)|0;J=m-(c[L>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(K<<11)+(Fa<<2)>>1]=J>>>0>65535?65535:J;Ga=n+131072+(Ga<<1)|0;b[n+262144+(K<<11)+(Fa<<2)+2>>1]=b[Ga>>1]|0;c[L>>2]=m;b[Ga>>1]=Fa;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[la>>2]|0)<5){f=(c[pa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[qa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:na;K=y&l;A=c[qa>>2]|0;I=k+K|0;B=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;w=B&255;c[qa>>2]=0;c[da>>2]=0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;g=4240;f=0;z=0;while(1){if((z|0)==16)break;v=(c[o+(c[11372+(z<<2)>>2]<<2)>>2]|0)+(c[11436+(z<<2)>>2]|0)|0;j=y-v|0;if(!z)if(j>>>0>=y>>>0|v>>>0>J>>>0)j=A;else Ea=71;else if((j>>>0>>0?(a[(j&65535)+(n+196608)>>0]|0)==w<<24>>24:0)^1|v>>>0>J>>>0)j=A;else Ea=71;if((Ea|0)==71){Ea=0;u=j&l;j=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;Fa=t;Ga=k+(u+j)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;j=j+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(u+j)>>0]|0)!=(a[t>>0]|0))break;j=j+1|0;t=t+1|0}if(j>>>0>1?(ya=(j*540|0)+(c[11500+(z<<2)>>2]|0)|0,g>>>0>>0):0){c[qa>>2]=j;c[ea>>2]=v;c[fa>>2]=ya;g=ya;f=1}else j=A}A=j;z=z+1|0}E=B&511;u=0;t=y-(c[n+(B<<2)>>2]|0)|0;h=c[ka>>2]|0;j=e[n+131072+(B<<1)>>1]|0;d:while(1){D=K+A|0;C=D>>>0>l>>>0;D=k+D|0;v=u;w=t;z=h;B=j;while(1){Ga=z;z=z+-1|0;if(!Ga)break d;v=v+w|0;if(v>>>0>J>>>0)break d;u=y-v&l;w=B;B=e[n+262144+(E<<11)+(B<<2)+2>>1]|0;w=e[n+262144+(E<<11)+(w<<2)>>1]|0;if(C)continue;j=u+A|0;if(j>>>0>l>>>0)continue;if((a[D>>0]|0)==(a[k+j>>0]|0)){h=0;j=F}else continue;while(1){t=j;if(t>>>0>H>>>0)break;Fa=j;Ga=k+(u+h)|0;if((d[Fa>>0]|d[Fa+1>>0]<<8|d[Fa+2>>0]<<16|d[Fa+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;h=h+4|0;j=t+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(u+h)>>0]|0)!=(a[j>>0]|0))break;h=h+1|0;j=j+1|0}if(h>>>0<=3)continue;j=(h*540|0)+3840+(_((aa(v|0)|0)^31,-120)|0)|0;if(g>>>0>>0)break}c[qa>>2]=h;c[ea>>2]=v;c[fa>>2]=j;u=v;A=h;g=j;t=w;h=z;f=1;j=B}Ga=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;H=Ga&511;N=n+1310720+(H<<1)|0;Fa=b[N>>1]|0;b[N>>1]=Fa+1<<16>>16;Fa=Fa&511;N=n+(Ga<<2)|0;G=y-(c[N>>2]|0)|0;a[(y&65535)+(n+196608)>>0]=Ga;b[n+262144+(H<<11)+(Fa<<2)>>1]=G>>>0>65535?65535:G;Ga=n+131072+(Ga<<1)|0;b[n+262144+(H<<11)+(Fa<<2)+2>>1]=b[Ga>>1]|0;c[N>>2]=y;b[Ga>>1]=Fa;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;u=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ga=b[21084+(u<<1)>>1]|0;j=Ga&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ga<<16>>16!=0?(za=j&31,Aa=j>>>5,Ba=(c[11272+(za<<2)>>2]|0)+(_(za,Aa)|0)|0,za>>>0<=L>>>0):0){g=Ba+za|0;h=280811+g|0;g=280811+(g+-4)|0;t=0;j=280811+Ba|0;while(1){if(j>>>0>g>>>0)break;Ga=k+(K+t)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24|0))break;t=t+4|0;j=j+4|0}while(1){if(j>>>0>=h>>>0)break;if((a[k+(K+t)>>0]|0)!=(a[j>>0]|0))break;t=t+1|0;j=j+1|0}if(!((t+10|0)>>>0<=za>>>0|(t|0)==0)?(Ca=J+Aa+1+(d[407930+(za-t)>>0]<>0])|0,Da=(t*540|0)+3840+(_((aa(Ca|0)|0)^31,-120)|0)|0,Da>>>0>=(c[fa>>2]|0)>>>0):0){c[qa>>2]=t;c[da>>2]=za^t;c[ea>>2]=Ca;c[fa>>2]=Da;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;u=u+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[pa>>2]=c[qa>>2];c[pa+4>>2]=c[qa+4>>2];c[pa+8>>2]=c[qa+8>>2];c[pa+12>>2]=c[qa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[pa>>2]|0;t=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:na)>>>0){h=f+3|0;Ga=c[o>>2]|0;j=h-Ga|0;g=c[ia>>2]|0;h=h-g|0;if((f|0)==(Ga|0))f=0;else{f:do if((f|0)!=(g|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(h>>>0<7){f=266017486>>>(h<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[pa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ga=c[P>>2]|0;j=m^Ga;c[O>>2]=x;c[O+4>>2]=m|Ga<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ga=((aa(N|0)|0)^31)+-1|0;Fa=N>>>Ga&1;f=((Ga<<1)+65534|Fa)+16&65535;b[m>>1]=f;m=Ga<<24|N-((Fa|2)<>2]=m;u=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ga=x+-2|0;h=((aa(Ga|0)|0)^31)+-1|0;h=(h<<1)+(Ga>>>h)+2&65535;break}if(x>>>0<2114){h=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)h=21;else h=x>>>0<22594?22:23}else h=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ga=j+-6|0;f=((aa(Ga|0)|0)^31)+-1|0;f=(f<<1)+(Ga>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=h&65535;g=m&7|j<<3&56;if(u&(h&65535)<8&(f&65535)<16)f=((f&65535)<8?g:g|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|g&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[pa>>2]|0)|0;f=f>>>0>>0?f:ma;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ga=k+(m&l)|0;Ga=(_(d[Ga>>0]|d[Ga+1>>0]<<8|d[Ga+2>>0]<<16|d[Ga+3>>0]<<24,506832829)|0)>>>17;N=Ga&511;O=n+1310720+(N<<1)|0;Fa=b[O>>1]|0;b[O>>1]=Fa+1<<16>>16;Fa=Fa&511;O=n+(Ga<<2)|0;M=m-(c[O>>2]|0)|0;a[(m&65535)+(n+196608)>>0]=Ga;b[n+262144+(N<<11)+(Fa<<2)>>1]=M>>>0>65535?65535:M;Ga=n+131072+(Ga<<1)|0;b[n+262144+(N<<11)+(Fa<<2)+2>>1]=b[Ga>>1]|0;c[O>>2]=m;b[Ga>>1]=Fa;m=m+1|0}m=y+(c[pa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=ra;return}function Ua(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+524304|0;if(!(a[j>>0]&1))return;e=1<>2];c[d>>2]=e+-1;e=1-e|0;c[d+524296>>2]=e;i=0;while(1){if((i|0)==131072)break;c[d+4+(i<<2)>>2]=e;i=i+1|0}if((f|0)==0^1|h^1)g=(c[d>>2]|0)+1|0;h=d+524300|0;do if(g>>>0>(c[h>>2]|0)>>>0){i=d+524292|0;e=b+8|0;ra[c[b+4>>2]&1](c[e>>2]|0,c[i>>2]|0);c[i>>2]=0;e=sa[c[b>>2]&1](c[e>>2]|0,g<<3)|0;if(!e)oa(1);else{c[i>>2]=e;c[h>>2]=g;break}}while(0);a[j>>0]=0;return}function Va(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0.0,j=0.0,k=0;f=0;h=0;while(1){if((f|0)==(b|0))break;k=h+(c[a+(f<<2)>>2]|0)|0;f=f+1|0;h=k}if(h>>>0<256)e=+g[19516+(h<<2)>>2];else e=+Xb(+(h>>>0));j=e+2.0;h=0;while(1){if((h|0)==(b|0))break;f=c[a+(h<<2)>>2]|0;if(f){if(f>>>0<256)i=+g[19516+(f<<2)>>2];else i=+Xb(+(f>>>0));i=e-i;f=d+(h<<2)|0;g[f>>2]=i;if(i<1.0)g[f>>2]=1.0}else g[d+(h<<2)>>2]=j;h=h+1|0}return}function Wa(a){a=a|0;var b=0.0,d=0,e=0.0,f=0,h=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0;s=i;i=i+112|0;m=s+88|0;p=s+72|0;r=s;n=c[a+1024>>2]|0;if(!n){q=12.0;i=s;return +q}else{f=0;l=0}while(1){if(l>>>0>=256){d=f;break}if(c[a+(l<<2)>>2]|0){c[m+(f<<2)>>2]=l;d=f+1|0;if((f|0)>3)break}else d=f;f=d;l=l+1|0}switch(d|0){case 2:{q=+(n>>>0)+20.0;i=s;return +q}case 3:{p=c[a+(c[m>>2]<<2)>>2]|0;n=c[a+(c[m+4>>2]<<2)>>2]|0;a=c[a+(c[m+8>>2]<<2)>>2]|0;r=n>>>0>a>>>0?n:a;q=+(p+n+a<<1>>>0)+28.0-+((p>>>0>r>>>0?p:r)>>>0);i=s;return +q}case 4:{d=0;while(1){if((d|0)==4){n=0;break}c[p+(d<<2)>>2]=c[a+(c[m+(d<<2)>>2]<<2)>>2];d=d+1|0}while(1){if((n|0)==4)break;m=p+(n<<2)|0;d=n;while(1){a=d+1|0;if((d|0)==3)break;d=p+(a<<2)|0;f=c[d>>2]|0;l=c[m>>2]|0;if(f>>>0<=l>>>0){d=a;continue}c[d>>2]=l;c[m>>2]=f;d=a}n=n+1|0}a=(c[p+8>>2]|0)+(c[p+12>>2]|0)|0;r=c[p>>2]|0;q=+((a*3|0)>>>0)+37.0+ +(r+(c[p+4>>2]|0)<<1>>>0)-+((a>>>0>r>>>0?a:r)>>>0);i=s;return +q}case 1:{q=12.0;i=s;return +q}default:{d=r;f=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));if(n>>>0<256)h=+g[19516+(n<<2)>>2];else h=+Xb(+(n>>>0));m=r+68|0;b=0.0;d=0;n=1;a:while(1){q=b;b:while(1){while(1){if(d>>>0>=256)break a;f=c[a+(d<<2)>>2]|0;if(!f){l=1;f=d}else break b;while(1){f=f+1|0;if(f>>>0>=256)break;if(c[a+(f<<2)>>2]|0)break;l=l+1|0}d=d+l|0;if((d|0)==256)break a;if(l>>>0>=3)break;c[r>>2]=(c[r>>2]|0)+l}b=q;f=l+-2|0;while(1){if(!f){q=b;continue b}c[m>>2]=(c[m>>2]|0)+1;b=b+3.0;f=f>>>3}}if(f>>>0<256){e=+(f>>>0);b=+g[19516+(f<<2)>>2]}else{b=+(f>>>0);e=b;b=+Xb(b)}b=h-b;p=~~(b+.5)>>>0;p=p>>>0>15?15:p;l=r+(p<<2)|0;c[l>>2]=(c[l>>2]|0)+1;b=q+e*b;d=d+1|0;n=p>>>0>n>>>0?p:n}o=+(((n<<1)+18|0)>>>0);m=r+72|0;d=r;b=0.0;n=0;while(1){if(d>>>0>=m>>>0)break;f=c[d>>2]|0;e=+(f>>>0);if(f>>>0<256)k=+g[19516+(f<<2)>>2];else k=+Xb(e);l=c[d+4>>2]|0;h=+(l>>>0);if(l>>>0<256)j=+g[19516+(l<<2)>>2];else j=+Xb(h);d=d+8|0;b=b-e*k-h*j;n=n+f+l|0}k=q+o;j=+(n>>>0);if(!n)h=j;else{if(n>>>0<256)e=+g[19516+(n<<2)>>2];else e=+Xb(j);h=j;b=b+j*e}q=k+(b>2]|0;if(!n){q=12.0;i=s;return +q}else{f=0;l=0}while(1){if(l>>>0>=704){d=f;break}if(c[a+(l<<2)>>2]|0){c[m+(f<<2)>>2]=l;d=f+1|0;if((f|0)>3)break}else d=f;f=d;l=l+1|0}switch(d|0){case 2:{q=+(n>>>0)+20.0;i=s;return +q}case 3:{p=c[a+(c[m>>2]<<2)>>2]|0;n=c[a+(c[m+4>>2]<<2)>>2]|0;a=c[a+(c[m+8>>2]<<2)>>2]|0;r=n>>>0>a>>>0?n:a;q=+(p+n+a<<1>>>0)+28.0-+((p>>>0>r>>>0?p:r)>>>0);i=s;return +q}case 4:{d=0;while(1){if((d|0)==4){n=0;break}c[p+(d<<2)>>2]=c[a+(c[m+(d<<2)>>2]<<2)>>2];d=d+1|0}while(1){if((n|0)==4)break;m=p+(n<<2)|0;d=n;while(1){a=d+1|0;if((d|0)==3)break;d=p+(a<<2)|0;f=c[d>>2]|0;l=c[m>>2]|0;if(f>>>0<=l>>>0){d=a;continue}c[d>>2]=l;c[m>>2]=f;d=a}n=n+1|0}a=(c[p+8>>2]|0)+(c[p+12>>2]|0)|0;r=c[p>>2]|0;q=+((a*3|0)>>>0)+37.0+ +(r+(c[p+4>>2]|0)<<1>>>0)-+((a>>>0>r>>>0?a:r)>>>0);i=s;return +q}case 1:{q=12.0;i=s;return +q}default:{d=r;f=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));if(n>>>0<256)h=+g[19516+(n<<2)>>2];else h=+Xb(+(n>>>0));m=r+68|0;b=0.0;d=0;n=1;a:while(1){q=b;b:while(1){while(1){if(d>>>0>=704)break a;f=c[a+(d<<2)>>2]|0;if(!f){l=1;f=d}else break b;while(1){f=f+1|0;if(f>>>0>=704)break;if(c[a+(f<<2)>>2]|0)break;l=l+1|0}d=d+l|0;if((d|0)==704)break a;if(l>>>0>=3)break;c[r>>2]=(c[r>>2]|0)+l}b=q;f=l+-2|0;while(1){if(!f){q=b;continue b}c[m>>2]=(c[m>>2]|0)+1;b=b+3.0;f=f>>>3}}if(f>>>0<256){e=+(f>>>0);b=+g[19516+(f<<2)>>2]}else{b=+(f>>>0);e=b;b=+Xb(b)}b=h-b;p=~~(b+.5)>>>0;p=p>>>0>15?15:p;l=r+(p<<2)|0;c[l>>2]=(c[l>>2]|0)+1;b=q+e*b;d=d+1|0;n=p>>>0>n>>>0?p:n}o=+(((n<<1)+18|0)>>>0);m=r+72|0;d=r;b=0.0;n=0;while(1){if(d>>>0>=m>>>0)break;f=c[d>>2]|0;e=+(f>>>0);if(f>>>0<256)k=+g[19516+(f<<2)>>2];else k=+Xb(e);l=c[d+4>>2]|0;h=+(l>>>0);if(l>>>0<256)j=+g[19516+(l<<2)>>2];else j=+Xb(h);d=d+8|0;b=b-e*k-h*j;n=n+f+l|0}k=q+o;j=+(n>>>0);if(!n)h=j;else{if(n>>>0<256)e=+g[19516+(n<<2)>>2];else e=+Xb(j);h=j;b=b+j*e}q=k+(b>2]|0;if(!n){q=12.0;i=s;return +q}else{f=0;l=0}while(1){if(l>>>0>=520){d=f;break}if(c[a+(l<<2)>>2]|0){c[m+(f<<2)>>2]=l;d=f+1|0;if((f|0)>3)break}else d=f;f=d;l=l+1|0}switch(d|0){case 2:{q=+(n>>>0)+20.0;i=s;return +q}case 3:{p=c[a+(c[m>>2]<<2)>>2]|0;n=c[a+(c[m+4>>2]<<2)>>2]|0;a=c[a+(c[m+8>>2]<<2)>>2]|0;r=n>>>0>a>>>0?n:a;q=+(p+n+a<<1>>>0)+28.0-+((p>>>0>r>>>0?p:r)>>>0);i=s;return +q}case 4:{d=0;while(1){if((d|0)==4){n=0;break}c[p+(d<<2)>>2]=c[a+(c[m+(d<<2)>>2]<<2)>>2];d=d+1|0}while(1){if((n|0)==4)break;m=p+(n<<2)|0;d=n;while(1){a=d+1|0;if((d|0)==3)break;d=p+(a<<2)|0;f=c[d>>2]|0;l=c[m>>2]|0;if(f>>>0<=l>>>0){d=a;continue}c[d>>2]=l;c[m>>2]=f;d=a}n=n+1|0}a=(c[p+8>>2]|0)+(c[p+12>>2]|0)|0;r=c[p>>2]|0;q=+((a*3|0)>>>0)+37.0+ +(r+(c[p+4>>2]|0)<<1>>>0)-+((a>>>0>r>>>0?a:r)>>>0);i=s;return +q}case 1:{q=12.0;i=s;return +q}default:{d=r;f=d+72|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));if(n>>>0<256)h=+g[19516+(n<<2)>>2];else h=+Xb(+(n>>>0));m=r+68|0;b=0.0;d=0;n=1;a:while(1){q=b;b:while(1){while(1){if(d>>>0>=520)break a;f=c[a+(d<<2)>>2]|0;if(!f){l=1;f=d}else break b;while(1){f=f+1|0;if(f>>>0>=520)break;if(c[a+(f<<2)>>2]|0)break;l=l+1|0}d=d+l|0;if((d|0)==520)break a;if(l>>>0>=3)break;c[r>>2]=(c[r>>2]|0)+l}b=q;f=l+-2|0;while(1){if(!f){q=b;continue b}c[m>>2]=(c[m>>2]|0)+1;b=b+3.0;f=f>>>3}}if(f>>>0<256){e=+(f>>>0);b=+g[19516+(f<<2)>>2]}else{b=+(f>>>0);e=b;b=+Xb(b)}b=h-b;p=~~(b+.5)>>>0;p=p>>>0>15?15:p;l=r+(p<<2)|0;c[l>>2]=(c[l>>2]|0)+1;b=q+e*b;d=d+1|0;n=p>>>0>n>>>0?p:n}o=+(((n<<1)+18|0)>>>0);m=r+72|0;d=r;b=0.0;n=0;while(1){if(d>>>0>=m>>>0)break;f=c[d>>2]|0;e=+(f>>>0);if(f>>>0<256)k=+g[19516+(f<<2)>>2];else k=+Xb(e);l=c[d+4>>2]|0;h=+(l>>>0);if(l>>>0<256)j=+g[19516+(l<<2)>>2];else j=+Xb(h);d=d+8|0;b=b-e*k-h*j;n=n+f+l|0}k=q+o;j=+(n>>>0);if(!n)h=j;else{if(n>>>0<256)e=+g[19516+(n<<2)>>2];else e=+Xb(j);h=j;b=b+j*e}q=k+(b>2]|0)|0;t=t+1|0;K=$}$=f+8|0;R=sa[c[f>>2]&1](c[$>>2]|0,K)|0;if(!R)oa(1);x=n+1|0;v=0;w=0;while(1){t=m&n;if((w|0)==(k|0))break;m=c[j+(w<<4)>>2]|0;if((t+m|0)>>>0>n>>>0){Q=x-t|0;dc(R+v|0,l+t|0,Q|0)|0;t=0;u=m-Q|0;m=v+Q|0}else{u=m;m=v}if(u){dc(R+m|0,l+t|0,u|0)|0;m=m+u|0}v=m;m=t+u+(c[j+(w<<4)+4>>2]&16777215)|0;w=w+1|0}B=((K>>>0)/544|0)+1|0;B=B>>>0>100?100:B;do if(K){if(K>>>0<128){w=p+16|0;m=c[w>>2]|0;x=p+4|0;t=c[x>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=p+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[f+4>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v;t=c[x>>2]|0}w=p+20|0;m=c[w>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}t=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!t)oa(1);u=c[w>>2]|0;m=p+12|0;if(u)dc(t|0,c[m>>2]|0,u<<2|0)|0;ra[c[f+4>>2]&1](c[$>>2]|0,c[m>>2]|0);c[m>>2]=t;c[w>>2]=v;t=c[x>>2]|0}else m=p+12|0;c[p>>2]=1;a[(c[p+8>>2]|0)+t>>0]=0;c[(c[m>>2]|0)+(c[x>>2]<<2)>>2]=K;c[x>>2]=(c[x>>2]|0)+1;break}J=sa[c[f>>2]&1](c[$>>2]|0,B*1040|0)|0;if(!J)oa(1);t=0;while(1){if((t|0)==(B|0))break;ac(J+(t*1040|0)|0,0,1024)|0;c[J+(t*1040|0)+1024>>2]=0;h[J+(t*1040|0)+1032>>3]=s;t=t+1|0}w=(K>>>0)/(B>>>0)|0;x=K+-71|0;m=7;l=0;while(1){if((l|0)==(B|0))break;t=((_(K,l)|0)>>>0)/(B>>>0)|0;if(l){m=m*16807|0;m=(m|0)==0?1:m;t=t+((m>>>0)%(w>>>0)|0)|0}u=J+(l*1040|0)+1024|0;c[u>>2]=(c[u>>2]|0)+70;u=71;v=R+((t+70|0)>>>0>>0?t:x)|0;while(1){t=u+-1|0;if(!t)break;u=J+(l*1040|0)+(d[v>>0]<<2)|0;c[u>>2]=(c[u>>2]|0)+1;u=t;v=v+1|0}l=l+1|0}c[Z>>2]=7;u=((K<<1>>>0)/70|0)+100+B+-1|0;u=u-((u>>>0)%(B>>>0)|0)|0;v=Y+1024|0;w=Y+1032|0;x=K>>>0>70;l=K+-69|0;n=Y+1024|0;A=0;while(1){if(A>>>0>=u>>>0)break;ac(Y|0,0,1028)|0;h[w>>3]=s;if(x){m=(c[Z>>2]|0)*16807|0;Q=(m|0)==0;c[Z>>2]=Q?1:m;t=70;m=((Q?1:m)>>>0)%(l>>>0)|0}else{t=K;m=0}c[n>>2]=(c[n>>2]|0)+t;t=t+1|0;m=R+m|0;while(1){t=t+-1|0;if(!t)break;Q=Y+(d[m>>0]<<2)|0;c[Q>>2]=(c[Q>>2]|0)+1;m=m+1|0}t=(A>>>0)%(B>>>0)|0;m=J+(t*1040|0)+1024|0;c[m>>2]=(c[m>>2]|0)+(c[v>>2]|0);m=0;while(1){if((m|0)==256)break;Q=J+(t*1040|0)+(m<<2)|0;c[Q>>2]=(c[Q>>2]|0)+(c[Y+(m<<2)>>2]|0);m=m+1|0}A=A+1|0}Q=sa[c[f>>2]&1](c[$>>2]|0,K)|0;if(!Q)oa(1);F=sa[c[f>>2]&1](c[$>>2]|0,B<<11)|0;if(!F)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,B<<3)|0;if(!G)oa(1);H=_(K,(B+7|0)>>>3)|0;H=sa[c[f>>2]&1](c[$>>2]|0,H)|0;if(!H)oa(1);I=sa[c[f>>2]&1](c[$>>2]|0,B<<1)|0;if(!I)oa(1);C=(c[o+4>>2]|0)<11?3:10;D=K+-1|0;E=Q+D|0;O=0;A=0;a:while(1){if(A>>>0>=C>>>0){l=136;break}n=(B+7|0)>>>3;if(B>>>0>=257){l=73;break}b:do if(B>>>0<2){t=0;while(1){if((t|0)==(K|0)){v=1;break b}a[Q+t>>0]=0;t=t+1|0}}else{ac(F|0,0,B<<11|0)|0;m=0;while(1){if((m|0)==(B|0)){t=256;break}t=c[J+(m*1040|0)+1024>>2]|0;if(t>>>0<256)y=+g[19516+(t<<2)>>2];else y=+Xb(+(t>>>0));h[F+(m<<3)>>3]=y;m=m+1|0}c:while(1){if(!t)break;t=t+-1|0;u=_(t,B)|0;v=0;while(1){if((v|0)==(B|0))continue c;z=+h[F+(v<<3)>>3];m=c[J+(v*1040|0)+(t<<2)>>2]|0;do if(m)if(m>>>0<256){y=+g[19516+(m<<2)>>2];break}else{y=+Xb(+(m>>>0));break}else y=-2.0;while(0);h[F+(u+v<<3)>>3]=z-y;v=v+1|0}}ac(G|0,0,B<<3|0)|0;ac(H|0,0,_(K,n)|0)|0;v=0;while(1){if(v>>>0>=K>>>0)break;t=_(d[R+v>>0]|0,B)|0;m=Q+v|0;z=1.e+99;u=0;while(1){if((u|0)==(B|0))break;O=G+(u<<3)|0;y=+h[O>>3]+ +h[F+(t+u<<3)>>3];h[O>>3]=y;if(y>0]=u;else y=z;z=y;u=u+1|0}m=_(v,n)|0;if(v>>>0<2e3)y=(+(v>>>0)*.07/2.0e3+.77)*28.1;else y=28.1;u=0;while(1){if(u>>>0>=B>>>0)break;t=G+(u<<3)|0;ba=+h[t>>3]-z;h[t>>3]=ba;if(ba>=y){h[t>>3]=y;t=u>>>3;if(t>>>0>=n>>>0){l=104;break a}O=H+(m+t)|0;a[O>>0]=a[O>>0]|1<<(u&7)&255}u=u+1|0}v=v+1|0}m=_(D,n)|0;v=D;t=a[E>>0]|0;u=1;while(1){if(!v){v=u;break b}w=t&255;x=w>>>3;if(x>>>0>=n>>>0){l=111;break a}l=v+-1|0;m=m-n|0;v=Q+l|0;if((a[H+(m+x)>>0]&(1<<(w&7)&255))<<24>>24){N=a[v>>0]|0;O=t<<24>>24==N<<24>>24;t=O?t:N;u=O?u:u+1|0}a[v>>0]=t;v=l}}while(0);t=0;while(1){if((t|0)==(B|0)){t=0;u=0;break}b[I+(t<<1)>>1]=256;t=t+1|0}while(1){if(u>>>0>=K>>>0){m=0;break}m=d[Q+u>>0]|0;if(m>>>0>=B>>>0){l=120;break a}m=I+(m<<1)|0;if((b[m>>1]|0)==256){b[m>>1]=t;t=t+1<<16>>16}u=u+1|0}while(1){if(m>>>0>=K>>>0)break;N=Q+m|0;O=b[I+(d[N>>0]<<1)>>1]|0;a[N>>0]=O;if((O&255)>>>0>=B>>>0){l=126;break a}m=m+1|0}u=t&65535;if(u>>>0>B>>>0){l=129;break}t=t&65535;m=0;while(1){if((m|0)==(t|0)){t=0;break}ac(J+(m*1040|0)|0,0,1024)|0;c[J+(m*1040|0)+1024>>2]=0;h[J+(m*1040|0)+1032>>3]=s;m=m+1|0}while(1){if((t|0)==(K|0))break;O=d[Q+t>>0]|0;N=J+(O*1040|0)+(d[R+t>>0]<<2)|0;c[N>>2]=(c[N>>2]|0)+1;O=J+(O*1040|0)+1024|0;c[O>>2]=(c[O>>2]|0)+1;t=t+1|0}O=v;B=u;A=A+1|0}if((l|0)==73)pa(404083,403848,80,404281);else if((l|0)==104)pa(404124,403848,130,404281);else if((l|0)==111)pa(404145,403848,141,404281);else if((l|0)==120)pa(404005,403848,165,404260);else if((l|0)==126)pa(404005,403848,172,404260);else if((l|0)==129)pa(404057,403848,174,404260);else if((l|0)==136){N=f+4|0;ra[c[N>>2]&1](c[$>>2]|0,F);ra[c[N>>2]&1](c[$>>2]|0,G);ra[c[N>>2]&1](c[$>>2]|0,H);ra[c[N>>2]&1](c[$>>2]|0,I);ra[c[N>>2]&1](c[$>>2]|0,J);t=O<<2;L=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!L)oa(1);M=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!M)oa(1);x=((O<<4)+1008|0)>>>6;J=sa[c[f>>2]&1](c[$>>2]|0,x*1040|0)|0;v=J;if(!J)oa(1);J=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;w=J;if(!J)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,(O>>>0<64?O:64)*1040|0)|0;if(!G)oa(1);H=sa[c[f>>2]&1](c[$>>2]|0,49176)|0;if(!H)oa(1);ac(V|0,0,256)|0;ac(T|0,0,256)|0;ac(W|0,0,256)|0;ac(U|0,0,256)|0;ac(M|0,0,t|0)|0;m=0;u=0;while(1){if(u>>>0>=K>>>0)break;if(m>>>0>=O>>>0){l=151;break}t=M+(m<<2)|0;c[t>>2]=(c[t>>2]|0)+1;t=u+1|0;if((t|0)!=(K|0)?(a[Q+u>>0]|0)==(a[Q+t>>0]|0):0){u=t;continue}m=m+1|0;u=t}if((l|0)==151)pa(403825,403848,231,404239);if((m|0)!=(O|0))pa(403911,403848,237,404239);C=x;B=x;J=0;t=0;F=0;while(1){if(O>>>0<=F>>>0){l=193;break}E=O-F|0;E=E>>>0<64?E:64;n=0;while(1){if((n|0)==(E|0))break;u=G+(n*1040|0)|0;ac(u|0,0,1024)|0;x=G+(n*1040|0)+1024|0;c[x>>2]=0;h[G+(n*1040|0)+1032>>3]=s;l=M+(F+n<<2)|0;m=0;while(1){if(m>>>0>=(c[l>>2]|0)>>>0)break;K=G+(n*1040|0)+(d[R+t>>0]<<2)|0;c[K>>2]=(c[K>>2]|0)+1;c[x>>2]=(c[x>>2]|0)+1;t=t+1|0;m=m+1|0}h[G+(n*1040|0)+1032>>3]=+Wa(u);c[T+(n<<2)>>2]=n;c[W+(n<<2)>>2]=n;c[V+(n<<2)>>2]=1;n=n+1|0}D=pb(G,V,W,T,H,E,E,64,2048)|0;m=J+D|0;if(C>>>0>>0){u=(C|0)==0;x=u?m:C;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x*1040|0)|0;if(!m){l=170;break}if(!u)dc(m|0,v|0,C*1040|0)|0;ra[c[N>>2]&1](c[$>>2]|0,v);v=m;C=x}m=J+D|0;if(B>>>0>>0){u=(B|0)==0;x=u?m:B;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;if(!m){l=179;break}if(!u)dc(m|0,w|0,B<<2|0)|0;ra[c[N>>2]&1](c[$>>2]|0,w);w=m;B=x}m=v;u=w;A=D+J|0;x=J;l=J;n=0;while(1){if((n|0)==(D|0)){m=0;break}K=T+(n<<2)|0;I=c[K>>2]|0;dc(m+(x*1040|0)|0,G+(I*1040|0)|0,1040)|0;c[u+(l<<2)>>2]=c[V+(I<<2)>>2];c[U+(c[K>>2]<<2)>>2]=n;x=x+1|0;l=l+1|0;n=n+1|0}while(1){if((m|0)==(E|0))break;c[L+(F+m<<2)>>2]=J+(c[U+(c[W+(m<<2)>>2]<<2)>>2]|0);m=m+1|0}m=D+J|0;if((J+D|0)!=(m|0)){l=189;break}if((m|0)!=(A|0)){l=191;break}J=m;F=F+64|0}if((l|0)==170)oa(1);else if((l|0)==179)oa(1);else if((l|0)==189)pa(403935,403848,273,404239);else if((l|0)==191)pa(403969,403848,274,404239);else if((l|0)==193){ra[c[N>>2]&1](c[$>>2]|0,G);K=J<<6;u=_(J>>>1,J)|0;u=K>>>0>>0?K:u;do if((u+1|0)>>>0>2049){ra[c[N>>2]&1](c[$>>2]|0,H);t=sa[c[f>>2]&1](c[$>>2]|0,(u*24|0)+24|0)|0;if(t){P=t;break}oa(1)}else P=H;while(0);m=J<<2;I=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!I)oa(1);t=0;while(1){if((t|0)==(J|0))break;c[I+(t<<2)>>2]=t;t=t+1|0}H=v;G=pb(H,w,L,I,P,J,O,256,u)|0;ra[c[N>>2]&1](c[$>>2]|0,P);ra[c[N>>2]&1](c[$>>2]|0,w);K=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!K)oa(1);t=0;while(1){if((t|0)==(J|0))break;c[K+(t<<2)>>2]=-1;t=t+1|0}B=Y+1024|0;C=Y+1032|0;D=Z+1024|0;E=Z+1024|0;t=0;m=0;F=0;while(1){if((F|0)==(O|0))break;ac(Y|0,0,1028)|0;h[C>>3]=s;u=M+(F<<2)|0;w=0;A=m;m=0;while(1){if(m>>>0>=(c[u>>2]|0)>>>0)break;w=Y+(d[R+A>>0]<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=(c[B>>2]|0)+1|0;c[B>>2]=w;A=A+1|0;m=m+1|0}u=c[((F|0)==0?L:L+(F+-1<<2)|0)>>2]|0;n=(w|0)==0;if(n)y=0.0;else{dc(Z|0,Y|0,1040)|0;c[E>>2]=(c[E>>2]|0)+(c[H+(u*1040|0)+1024>>2]|0);m=0;while(1){if((m|0)==256)break;P=Z+(m<<2)|0;c[P>>2]=(c[P>>2]|0)+(c[H+(u*1040|0)+(m<<2)>>2]|0);m=m+1|0}y=+Wa(Z);y=y-+h[H+(u*1040|0)+1032>>3]}m=u;l=0;while(1){if((l|0)==(G|0))break;x=I+(l<<2)|0;u=c[x>>2]|0;if(n)z=0.0;else{dc(Z|0,Y|0,1040)|0;c[D>>2]=(c[D>>2]|0)+(c[H+(u*1040|0)+1024>>2]|0);w=0;while(1){if((w|0)==256)break;P=Z+(w<<2)|0;c[P>>2]=(c[P>>2]|0)+(c[H+(u*1040|0)+(w<<2)>>2]|0);w=w+1|0}z=+Wa(Z);z=z-+h[H+(u*1040|0)+1032>>3]}if(z>2]|0}l=l+1|0}c[L+(F<<2)>>2]=m;m=K+(m<<2)|0;if((c[m>>2]|0)==-1){c[m>>2]=t;t=t+1|0}m=A;F=F+1|0}ra[c[N>>2]&1](c[$>>2]|0,I);ra[c[N>>2]&1](c[$>>2]|0,v);w=p+16|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?O:t;while(1){if(v>>>0>=O>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=p+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[N>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}w=p+20|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?O:t;while(1){if(v>>>0>=O>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!m)oa(1);u=c[w>>2]|0;t=p+12|0;if(u)dc(m|0,c[t>>2]|0,u<<2|0)|0;ra[c[N>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}else t=p+12|0;w=p+8|0;l=0;m=0;n=0;u=0;while(1){if((u|0)==(O|0))break;v=m+(c[M+(u<<2)>>2]|0)|0;x=u+1|0;m=c[L+(u<<2)>>2]|0;if((x|0)!=(O|0)?(m|0)==(c[L+(x<<2)>>2]|0):0){m=v;u=x;continue}u=c[K+(m<<2)>>2]|0;P=u&255;a[(c[w>>2]|0)+l>>0]=P;c[(c[t>>2]|0)+(l<<2)>>2]=v;l=l+1|0;m=0;n=((n&255)>(P&255)?n&255:u&255)&255;u=x}c[p+4>>2]=l;c[p>>2]=(n&255)+1;ra[c[N>>2]&1](c[$>>2]|0,K);ra[c[N>>2]&1](c[$>>2]|0,M);ra[c[N>>2]&1](c[$>>2]|0,L);ra[c[N>>2]&1](c[$>>2]|0,Q);break}}}else c[p>>2]=1;while(0);p=f+4|0;ra[c[p>>2]&1](c[$>>2]|0,R);P=k<<1;Q=sa[c[f>>2]&1](c[$>>2]|0,P)|0;if(!Q)oa(1);t=0;while(1){if((t|0)==(k|0))break;b[Q+(t<<1)>>1]=b[j+(t<<4)+12>>1]|0;t=t+1|0}C=((k>>>0)/530|0)+1|0;C=C>>>0>50?50:C;do if(k){if(k>>>0<128){w=q+16|0;m=c[w>>2]|0;x=q+4|0;t=c[x>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=q+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v;t=c[x>>2]|0}w=q+20|0;m=c[w>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}t=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!t)oa(1);u=c[w>>2]|0;m=q+12|0;if(u)dc(t|0,c[m>>2]|0,u<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[m>>2]|0);c[m>>2]=t;c[w>>2]=v;t=c[x>>2]|0}else m=q+12|0;c[q>>2]=1;a[(c[q+8>>2]|0)+t>>0]=0;c[(c[m>>2]|0)+(c[x>>2]<<2)>>2]=k;c[x>>2]=(c[x>>2]|0)+1;break}J=sa[c[f>>2]&1](c[$>>2]|0,C*2832|0)|0;if(!J)oa(1);t=0;while(1){if((t|0)==(C|0))break;ac(J+(t*2832|0)|0,0,2816)|0;c[J+(t*2832|0)+2816>>2]=0;h[J+(t*2832|0)+2824>>3]=s;t=t+1|0}v=(k>>>0)/(C>>>0)|0;w=k+-41|0;m=7;x=0;while(1){if((x|0)==(C|0))break;t=((_(x,k)|0)>>>0)/(C>>>0)|0;if(x){m=m*16807|0;m=(m|0)==0?1:m;t=t+((m>>>0)%(v>>>0)|0)|0}u=J+(x*2832|0)+2816|0;c[u>>2]=(c[u>>2]|0)+40;u=Q+(((t+40|0)>>>0>>0?t:w)<<1)|0;t=41;while(1){t=t+-1|0;if(!t)break;R=J+(x*2832|0)+(e[u>>1]<<2)|0;c[R>>2]=(c[R>>2]|0)+1;u=u+2|0}x=x+1|0}c[Z>>2]=7;v=((P>>>0)/40|0)+100+C+-1|0;v=v-((v>>>0)%(C>>>0)|0)|0;w=Y+2816|0;x=Y+2824|0;l=k>>>0>40;n=k+-39|0;A=Y+2816|0;B=0;while(1){if(B>>>0>=v>>>0)break;ac(Y|0,0,2820)|0;h[x>>3]=s;if(l){t=(c[Z>>2]|0)*16807|0;R=(t|0)==0;c[Z>>2]=R?1:t;m=40;t=((R?1:t)>>>0)%(n>>>0)|0}else{m=k;t=0}c[A>>2]=(c[A>>2]|0)+m;u=Q+(t<<1)|0;t=m+1|0;while(1){t=t+-1|0;if(!t)break;R=Y+(e[u>>1]<<2)|0;c[R>>2]=(c[R>>2]|0)+1;u=u+2|0}t=(B>>>0)%(C>>>0)|0;m=J+(t*2832|0)+2816|0;c[m>>2]=(c[m>>2]|0)+(c[w>>2]|0);m=0;while(1){if((m|0)==704)break;R=J+(t*2832|0)+(m<<2)|0;c[R>>2]=(c[R>>2]|0)+(c[Y+(m<<2)>>2]|0);m=m+1|0}B=B+1|0}O=sa[c[f>>2]&1](c[$>>2]|0,k)|0;if(!O)oa(1);F=sa[c[f>>2]&1](c[$>>2]|0,C*5632|0)|0;if(!F)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,C<<3)|0;if(!G)oa(1);H=_((C+7|0)>>>3,k)|0;H=sa[c[f>>2]&1](c[$>>2]|0,H)|0;if(!H)oa(1);I=sa[c[f>>2]&1](c[$>>2]|0,C<<1)|0;if(!I)oa(1);B=(c[o+4>>2]|0)<11?3:10;D=k+-1|0;E=O+D|0;N=0;A=0;d:while(1){if(A>>>0>=B>>>0){l=382;break}n=(C+7|0)>>>3;if(C>>>0>=257){l=319;break}e:do if(C>>>0<2){t=0;while(1){if((t|0)==(k|0)){v=1;break e}a[O+t>>0]=0;t=t+1|0}}else{ac(F|0,0,C*5632|0)|0;m=0;while(1){if((m|0)==(C|0)){t=704;break}t=c[J+(m*2832|0)+2816>>2]|0;if(t>>>0<256)y=+g[19516+(t<<2)>>2];else y=+Xb(+(t>>>0));h[F+(m<<3)>>3]=y;m=m+1|0}f:while(1){if(!t)break;t=t+-1|0;u=_(t,C)|0;v=0;while(1){if((v|0)==(C|0))continue f;z=+h[F+(v<<3)>>3];m=c[J+(v*2832|0)+(t<<2)>>2]|0;do if(m)if(m>>>0<256){y=+g[19516+(m<<2)>>2];break}else{y=+Xb(+(m>>>0));break}else y=-2.0;while(0);h[F+(u+v<<3)>>3]=z-y;v=v+1|0}}ac(G|0,0,C<<3|0)|0;ac(H|0,0,_(n,k)|0)|0;v=0;while(1){if(v>>>0>=k>>>0)break;t=_(e[Q+(v<<1)>>1]|0,C)|0;m=O+v|0;z=1.e+99;u=0;while(1){if((u|0)==(C|0))break;R=G+(u<<3)|0;y=+h[R>>3]+ +h[F+(t+u<<3)>>3];h[R>>3]=y;if(y>0]=u;else y=z;z=y;u=u+1|0}m=_(v,n)|0;if(v>>>0<2e3)y=(+(v>>>0)*.07/2.0e3+.77)*13.5;else y=13.5;u=0;while(1){if(u>>>0>=C>>>0)break;t=G+(u<<3)|0;ba=+h[t>>3]-z;h[t>>3]=ba;if(ba>=y){h[t>>3]=y;t=u>>>3;if(t>>>0>=n>>>0){l=350;break d}R=H+(m+t)|0;a[R>>0]=a[R>>0]|1<<(u&7)&255}u=u+1|0}v=v+1|0}m=_(D,n)|0;v=D;t=a[E>>0]|0;u=1;while(1){if(!v){v=u;break e}w=t&255;x=w>>>3;if(x>>>0>=n>>>0){l=357;break d}l=v+-1|0;m=m-n|0;v=O+l|0;if((a[H+(m+x)>>0]&(1<<(w&7)&255))<<24>>24){N=a[v>>0]|0;R=t<<24>>24==N<<24>>24;t=R?t:N;u=R?u:u+1|0}a[v>>0]=t;v=l}}while(0);t=0;while(1){if((t|0)==(C|0)){t=0;u=0;break}b[I+(t<<1)>>1]=256;t=t+1|0}while(1){if(u>>>0>=k>>>0){m=0;break}m=d[O+u>>0]|0;if(m>>>0>=C>>>0){l=366;break d}m=I+(m<<1)|0;if((b[m>>1]|0)==256){b[m>>1]=t;t=t+1<<16>>16}u=u+1|0}while(1){if(m>>>0>=k>>>0)break;N=O+m|0;R=b[I+(d[N>>0]<<1)>>1]|0;a[N>>0]=R;if((R&255)>>>0>=C>>>0){l=372;break d}m=m+1|0}u=t&65535;if(u>>>0>C>>>0){l=375;break}t=t&65535;m=0;while(1){if((m|0)==(t|0)){t=0;break}ac(J+(m*2832|0)|0,0,2816)|0;c[J+(m*2832|0)+2816>>2]=0;h[J+(m*2832|0)+2824>>3]=s;m=m+1|0}while(1){if((t|0)==(k|0))break;R=d[O+t>>0]|0;N=J+(R*2832|0)+(e[Q+(t<<1)>>1]<<2)|0;c[N>>2]=(c[N>>2]|0)+1;R=J+(R*2832|0)+2816|0;c[R>>2]=(c[R>>2]|0)+1;t=t+1|0}N=v;C=u;A=A+1|0}if((l|0)==319)pa(404083,403848,80,404221);else if((l|0)==350)pa(404124,403848,130,404221);else if((l|0)==357)pa(404145,403848,141,404221);else if((l|0)==366)pa(404005,403848,165,404200);else if((l|0)==372)pa(404005,403848,172,404200);else if((l|0)==375)pa(404057,403848,174,404200);else if((l|0)==382){ra[c[p>>2]&1](c[$>>2]|0,F);ra[c[p>>2]&1](c[$>>2]|0,G);ra[c[p>>2]&1](c[$>>2]|0,H);ra[c[p>>2]&1](c[$>>2]|0,I);ra[c[p>>2]&1](c[$>>2]|0,J);t=N<<2;L=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!L)oa(1);M=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!M)oa(1);x=((N<<4)+1008|0)>>>6;R=sa[c[f>>2]&1](c[$>>2]|0,x*2832|0)|0;v=R;if(!R)oa(1);R=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;w=R;if(!R)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,(N>>>0<64?N:64)*2832|0)|0;if(!G)oa(1);H=sa[c[f>>2]&1](c[$>>2]|0,49176)|0;if(!H)oa(1);ac(V|0,0,256)|0;ac(T|0,0,256)|0;ac(W|0,0,256)|0;ac(U|0,0,256)|0;ac(M|0,0,t|0)|0;m=0;u=0;while(1){if(u>>>0>=k>>>0)break;if(m>>>0>=N>>>0){l=397;break}t=M+(m<<2)|0;c[t>>2]=(c[t>>2]|0)+1;t=u+1|0;if((t|0)!=(k|0)?(a[O+u>>0]|0)==(a[O+t>>0]|0):0){u=t;continue}m=m+1|0;u=t}if((l|0)==397)pa(403825,403848,231,404179);if((m|0)!=(N|0))pa(403911,403848,237,404179);C=x;B=x;J=0;t=0;F=0;while(1){if(N>>>0<=F>>>0){l=439;break}E=N-F|0;E=E>>>0<64?E:64;n=0;while(1){if((n|0)==(E|0))break;u=G+(n*2832|0)|0;ac(u|0,0,2816)|0;x=G+(n*2832|0)+2816|0;c[x>>2]=0;h[G+(n*2832|0)+2824>>3]=s;l=M+(F+n<<2)|0;m=0;while(1){if(m>>>0>=(c[l>>2]|0)>>>0)break;R=G+(n*2832|0)+(e[Q+(t<<1)>>1]<<2)|0;c[R>>2]=(c[R>>2]|0)+1;c[x>>2]=(c[x>>2]|0)+1;t=t+1|0;m=m+1|0}h[G+(n*2832|0)+2824>>3]=+Xa(u);c[T+(n<<2)>>2]=n;c[W+(n<<2)>>2]=n;c[V+(n<<2)>>2]=1;n=n+1|0}D=rb(G,V,W,T,H,E,E,64,2048)|0;m=J+D|0;if(C>>>0>>0){u=(C|0)==0;x=u?m:C;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x*2832|0)|0;if(!m){l=416;break}if(!u)dc(m|0,v|0,C*2832|0)|0;ra[c[p>>2]&1](c[$>>2]|0,v);v=m;C=x}m=J+D|0;if(B>>>0>>0){u=(B|0)==0;x=u?m:B;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;if(!m){l=425;break}if(!u)dc(m|0,w|0,B<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,w);w=m;B=x}m=v;u=w;A=D+J|0;x=J;l=J;n=0;while(1){if((n|0)==(D|0)){m=0;break}R=T+(n<<2)|0;K=c[R>>2]|0;dc(m+(x*2832|0)|0,G+(K*2832|0)|0,2832)|0;c[u+(l<<2)>>2]=c[V+(K<<2)>>2];c[U+(c[R>>2]<<2)>>2]=n;x=x+1|0;l=l+1|0;n=n+1|0}while(1){if((m|0)==(E|0))break;c[L+(F+m<<2)>>2]=J+(c[U+(c[W+(m<<2)>>2]<<2)>>2]|0);m=m+1|0}m=D+J|0;if((J+D|0)!=(m|0)){l=435;break}if((m|0)!=(A|0)){l=437;break}J=m;F=F+64|0}if((l|0)==416)oa(1);else if((l|0)==425)oa(1);else if((l|0)==435)pa(403935,403848,273,404179);else if((l|0)==437)pa(403969,403848,274,404179);else if((l|0)==439){ra[c[p>>2]&1](c[$>>2]|0,G);R=J<<6;u=_(J>>>1,J)|0;u=R>>>0>>0?R:u;do if((u+1|0)>>>0>2049){ra[c[p>>2]&1](c[$>>2]|0,H);t=sa[c[f>>2]&1](c[$>>2]|0,(u*24|0)+24|0)|0;if(t){S=t;break}oa(1)}else S=H;while(0);m=J<<2;I=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!I)oa(1);t=0;while(1){if((t|0)==(J|0))break;c[I+(t<<2)>>2]=t;t=t+1|0}H=v;G=rb(H,w,L,I,S,J,N,256,u)|0;ra[c[p>>2]&1](c[$>>2]|0,S);ra[c[p>>2]&1](c[$>>2]|0,w);K=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!K)oa(1);t=0;while(1){if((t|0)==(J|0))break;c[K+(t<<2)>>2]=-1;t=t+1|0}B=Y+2816|0;C=Y+2824|0;D=Z+2816|0;E=Z+2816|0;t=0;m=0;F=0;while(1){if((F|0)==(N|0))break;ac(Y|0,0,2820)|0;h[C>>3]=s;u=M+(F<<2)|0;w=0;A=m;m=0;while(1){if(m>>>0>=(c[u>>2]|0)>>>0)break;w=Y+(e[Q+(A<<1)>>1]<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=(c[B>>2]|0)+1|0;c[B>>2]=w;A=A+1|0;m=m+1|0}u=c[((F|0)==0?L:L+(F+-1<<2)|0)>>2]|0;n=(w|0)==0;if(n)y=0.0;else{dc(Z|0,Y|0,2832)|0;c[E>>2]=(c[E>>2]|0)+(c[H+(u*2832|0)+2816>>2]|0);m=0;while(1){if((m|0)==704)break;S=Z+(m<<2)|0;c[S>>2]=(c[S>>2]|0)+(c[H+(u*2832|0)+(m<<2)>>2]|0);m=m+1|0}y=+Xa(Z);y=y-+h[H+(u*2832|0)+2824>>3]}m=u;l=0;while(1){if((l|0)==(G|0))break;x=I+(l<<2)|0;u=c[x>>2]|0;if(n)z=0.0;else{dc(Z|0,Y|0,2832)|0;c[D>>2]=(c[D>>2]|0)+(c[H+(u*2832|0)+2816>>2]|0);w=0;while(1){if((w|0)==704)break;S=Z+(w<<2)|0;c[S>>2]=(c[S>>2]|0)+(c[H+(u*2832|0)+(w<<2)>>2]|0);w=w+1|0}z=+Xa(Z);z=z-+h[H+(u*2832|0)+2824>>3]}if(z>2]|0}l=l+1|0}c[L+(F<<2)>>2]=m;m=K+(m<<2)|0;if((c[m>>2]|0)==-1){c[m>>2]=t;t=t+1|0}m=A;F=F+1|0}ra[c[p>>2]&1](c[$>>2]|0,I);ra[c[p>>2]&1](c[$>>2]|0,v);w=q+16|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?N:t;while(1){if(v>>>0>=N>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=q+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}w=q+20|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?N:t;while(1){if(v>>>0>=N>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!m)oa(1);u=c[w>>2]|0;t=q+12|0;if(u)dc(m|0,c[t>>2]|0,u<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}else t=q+12|0;w=q+8|0;l=0;m=0;n=0;u=0;while(1){if((u|0)==(N|0))break;v=m+(c[M+(u<<2)>>2]|0)|0;x=u+1|0;m=c[L+(u<<2)>>2]|0;if((x|0)!=(N|0)?(m|0)==(c[L+(x<<2)>>2]|0):0){m=v;u=x;continue}u=c[K+(m<<2)>>2]|0;S=u&255;a[(c[w>>2]|0)+l>>0]=S;c[(c[t>>2]|0)+(l<<2)>>2]=v;l=l+1|0;m=0;n=((n&255)>(S&255)?n&255:u&255)&255;u=x}c[q+4>>2]=l;c[q>>2]=(n&255)+1;ra[c[p>>2]&1](c[$>>2]|0,K);ra[c[p>>2]&1](c[$>>2]|0,M);ra[c[p>>2]&1](c[$>>2]|0,L);ra[c[p>>2]&1](c[$>>2]|0,O);break}}}else c[q>>2]=1;while(0);ra[c[p>>2]&1](c[$>>2]|0,Q);P=sa[c[f>>2]&1](c[$>>2]|0,P)|0;if(!P)oa(1);K=0;m=0;while(1){if((m|0)==(k|0))break;if((c[j+(m<<4)+4>>2]&16777215|0)!=0?(e[j+(m<<4)+12>>1]|0)>127:0){b[P+(K<<1)>>1]=b[j+(m<<4)+14>>1]|0;t=K+1|0}else t=K;K=t;m=m+1|0}C=((K>>>0)/544|0)+1|0;C=C>>>0>50?50:C;if(!K){c[r>>2]=1;f=c[p>>2]|0;r=c[$>>2]|0;ra[f&1](r,P);i=aa;return}if(K>>>0<128){w=r+16|0;m=c[w>>2]|0;x=r+4|0;t=c[x>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=r+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v;t=c[x>>2]|0}w=r+20|0;m=c[w>>2]|0;u=t+1|0;if(m>>>0>>0){v=(m|0)==0?u:m;while(1){if(v>>>0>=u>>>0)break;v=v<<1}t=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!t)oa(1);u=c[w>>2]|0;m=r+12|0;if(u)dc(t|0,c[m>>2]|0,u<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[m>>2]|0);c[m>>2]=t;c[w>>2]=v;t=c[x>>2]|0}else m=r+12|0;c[r>>2]=1;a[(c[r+8>>2]|0)+t>>0]=0;c[(c[m>>2]|0)+(c[x>>2]<<2)>>2]=K;c[x>>2]=(c[x>>2]|0)+1;f=c[p>>2]|0;r=c[$>>2]|0;ra[f&1](r,P);i=aa;return}J=sa[c[f>>2]&1](c[$>>2]|0,C*2096|0)|0;if(!J)oa(1);t=0;while(1){if((t|0)==(C|0))break;ac(J+(t*2096|0)|0,0,2080)|0;c[J+(t*2096|0)+2080>>2]=0;h[J+(t*2096|0)+2088>>3]=s;t=t+1|0}v=(K>>>0)/(C>>>0)|0;w=K+-41|0;m=7;x=0;while(1){if((x|0)==(C|0))break;t=((_(K,x)|0)>>>0)/(C>>>0)|0;if(x){m=m*16807|0;m=(m|0)==0?1:m;t=t+((m>>>0)%(v>>>0)|0)|0}u=J+(x*2096|0)+2080|0;c[u>>2]=(c[u>>2]|0)+40;u=P+(((t+40|0)>>>0>>0?t:w)<<1)|0;t=41;while(1){t=t+-1|0;if(!t)break;k=J+(x*2096|0)+(e[u>>1]<<2)|0;c[k>>2]=(c[k>>2]|0)+1;u=u+2|0}x=x+1|0}c[Z>>2]=7;v=((K<<1>>>0)/40|0)+100+C+-1|0;v=v-((v>>>0)%(C>>>0)|0)|0;w=Y+2080|0;x=Y+2088|0;l=K>>>0>40;n=K+-39|0;A=Y+2080|0;B=0;while(1){if(B>>>0>=v>>>0)break;ac(Y|0,0,2084)|0;h[x>>3]=s;if(l){t=(c[Z>>2]|0)*16807|0;k=(t|0)==0;c[Z>>2]=k?1:t;m=40;t=((k?1:t)>>>0)%(n>>>0)|0}else{m=K;t=0}c[A>>2]=(c[A>>2]|0)+m;u=P+(t<<1)|0;t=m+1|0;while(1){t=t+-1|0;if(!t)break;k=Y+(e[u>>1]<<2)|0;c[k>>2]=(c[k>>2]|0)+1;u=u+2|0}t=(B>>>0)%(C>>>0)|0;m=J+(t*2096|0)+2080|0;c[m>>2]=(c[m>>2]|0)+(c[w>>2]|0);m=0;while(1){if((m|0)==520)break;k=J+(t*2096|0)+(m<<2)|0;c[k>>2]=(c[k>>2]|0)+(c[Y+(m<<2)>>2]|0);m=m+1|0}B=B+1|0}O=sa[c[f>>2]&1](c[$>>2]|0,K)|0;if(!O)oa(1);F=sa[c[f>>2]&1](c[$>>2]|0,C*4160|0)|0;if(!F)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,C<<3)|0;if(!G)oa(1);H=_(K,(C+7|0)>>>3)|0;H=sa[c[f>>2]&1](c[$>>2]|0,H)|0;if(!H)oa(1);I=sa[c[f>>2]&1](c[$>>2]|0,C<<1)|0;if(!I)oa(1);B=(c[o+4>>2]|0)<11?3:10;D=K+-1|0;E=O+D|0;N=0;A=0;g:while(1){if(A>>>0>=B>>>0){l=631;break}n=(C+7|0)>>>3;if(C>>>0>=257){l=568;break}h:do if(C>>>0<2){t=0;while(1){if((t|0)==(K|0)){v=1;break h}a[O+t>>0]=0;t=t+1|0}}else{ac(F|0,0,C*4160|0)|0;m=0;while(1){if((m|0)==(C|0)){t=520;break}t=c[J+(m*2096|0)+2080>>2]|0;if(t>>>0<256)y=+g[19516+(t<<2)>>2];else y=+Xb(+(t>>>0));h[F+(m<<3)>>3]=y;m=m+1|0}i:while(1){if(!t)break;t=t+-1|0;u=_(t,C)|0;v=0;while(1){if((v|0)==(C|0))continue i;z=+h[F+(v<<3)>>3];m=c[J+(v*2096|0)+(t<<2)>>2]|0;do if(m)if(m>>>0<256){y=+g[19516+(m<<2)>>2];break}else{y=+Xb(+(m>>>0));break}else y=-2.0;while(0);h[F+(u+v<<3)>>3]=z-y;v=v+1|0}}ac(G|0,0,C<<3|0)|0;ac(H|0,0,_(K,n)|0)|0;v=0;while(1){if(v>>>0>=K>>>0)break;t=_(e[P+(v<<1)>>1]|0,C)|0;m=O+v|0;z=1.e+99;u=0;while(1){if((u|0)==(C|0))break;o=G+(u<<3)|0;y=+h[o>>3]+ +h[F+(t+u<<3)>>3];h[o>>3]=y;if(y>0]=u;else y=z;z=y;u=u+1|0}m=_(v,n)|0;if(v>>>0<2e3)y=(+(v>>>0)*.07/2.0e3+.77)*14.6;else y=14.6;u=0;while(1){if(u>>>0>=C>>>0)break;t=G+(u<<3)|0;ba=+h[t>>3]-z;h[t>>3]=ba;if(ba>=y){h[t>>3]=y;t=u>>>3;if(t>>>0>=n>>>0){l=599;break g}o=H+(m+t)|0;a[o>>0]=a[o>>0]|1<<(u&7)&255}u=u+1|0}v=v+1|0}m=_(D,n)|0;v=D;t=a[E>>0]|0;u=1;while(1){if(!v){v=u;break h}w=t&255;x=w>>>3;if(x>>>0>=n>>>0){l=606;break g}l=v+-1|0;m=m-n|0;v=O+l|0;if((a[H+(m+x)>>0]&(1<<(w&7)&255))<<24>>24){k=a[v>>0]|0;o=t<<24>>24==k<<24>>24;t=o?t:k;u=o?u:u+1|0}a[v>>0]=t;v=l}}while(0);t=0;while(1){if((t|0)==(C|0)){t=0;u=0;break}b[I+(t<<1)>>1]=256;t=t+1|0}while(1){if(u>>>0>=K>>>0){m=0;break}m=d[O+u>>0]|0;if(m>>>0>=C>>>0){l=615;break g}m=I+(m<<1)|0;if((b[m>>1]|0)==256){b[m>>1]=t;t=t+1<<16>>16}u=u+1|0}while(1){if(m>>>0>=K>>>0)break;k=O+m|0;o=b[I+(d[k>>0]<<1)>>1]|0;a[k>>0]=o;if((o&255)>>>0>=C>>>0){l=621;break g}m=m+1|0}u=t&65535;if(u>>>0>C>>>0){l=624;break}t=t&65535;m=0;while(1){if((m|0)==(t|0)){t=0;break}ac(J+(m*2096|0)|0,0,2080)|0;c[J+(m*2096|0)+2080>>2]=0;h[J+(m*2096|0)+2088>>3]=s;m=m+1|0}while(1){if((t|0)==(K|0))break;o=d[O+t>>0]|0;k=J+(o*2096|0)+(e[P+(t<<1)>>1]<<2)|0;c[k>>2]=(c[k>>2]|0)+1;o=J+(o*2096|0)+2080|0;c[o>>2]=(c[o>>2]|0)+1;t=t+1|0}N=v;C=u;A=A+1|0}if((l|0)==568)pa(404083,403848,80,404105);else if((l|0)==599)pa(404124,403848,130,404105);else if((l|0)==606)pa(404145,403848,141,404105);else if((l|0)==615)pa(404005,403848,165,404035);else if((l|0)==621)pa(404005,403848,172,404035);else if((l|0)==624)pa(404057,403848,174,404035);else if((l|0)==631){ra[c[p>>2]&1](c[$>>2]|0,F);ra[c[p>>2]&1](c[$>>2]|0,G);ra[c[p>>2]&1](c[$>>2]|0,H);ra[c[p>>2]&1](c[$>>2]|0,I);ra[c[p>>2]&1](c[$>>2]|0,J);t=N<<2;L=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!L)oa(1);M=sa[c[f>>2]&1](c[$>>2]|0,t)|0;if(!M)oa(1);x=((N<<4)+1008|0)>>>6;o=sa[c[f>>2]&1](c[$>>2]|0,x*2096|0)|0;v=o;if(!o)oa(1);o=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;w=o;if(!o)oa(1);G=sa[c[f>>2]&1](c[$>>2]|0,(N>>>0<64?N:64)*2096|0)|0;if(!G)oa(1);H=sa[c[f>>2]&1](c[$>>2]|0,49176)|0;if(!H)oa(1);ac(V|0,0,256)|0;ac(T|0,0,256)|0;ac(W|0,0,256)|0;ac(U|0,0,256)|0;ac(M|0,0,t|0)|0;m=0;u=0;while(1){if(u>>>0>=K>>>0)break;if(m>>>0>=N>>>0){l=646;break}t=M+(m<<2)|0;c[t>>2]=(c[t>>2]|0)+1;t=u+1|0;if((t|0)!=(K|0)?(a[O+u>>0]|0)==(a[O+t>>0]|0):0){u=t;continue}m=m+1|0;u=t}if((l|0)==646)pa(403825,403848,231,403889);if((m|0)!=(N|0))pa(403911,403848,237,403889);C=x;B=x;K=0;t=0;F=0;while(1){if(N>>>0<=F>>>0){l=688;break}E=N-F|0;E=E>>>0<64?E:64;n=0;while(1){if((n|0)==(E|0))break;u=G+(n*2096|0)|0;ac(u|0,0,2080)|0;x=G+(n*2096|0)+2080|0;c[x>>2]=0;h[G+(n*2096|0)+2088>>3]=s;l=M+(F+n<<2)|0;m=0;while(1){if(m>>>0>=(c[l>>2]|0)>>>0)break;o=G+(n*2096|0)+(e[P+(t<<1)>>1]<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[x>>2]=(c[x>>2]|0)+1;t=t+1|0;m=m+1|0}h[G+(n*2096|0)+2088>>3]=+Ya(u);c[T+(n<<2)>>2]=n;c[W+(n<<2)>>2]=n;c[V+(n<<2)>>2]=1;n=n+1|0}D=tb(G,V,W,T,H,E,E,64,2048)|0;m=K+D|0;if(C>>>0>>0){u=(C|0)==0;x=u?m:C;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x*2096|0)|0;if(!m){l=665;break}if(!u)dc(m|0,v|0,C*2096|0)|0;ra[c[p>>2]&1](c[$>>2]|0,v);v=m;C=x}m=K+D|0;if(B>>>0>>0){u=(B|0)==0;x=u?m:B;while(1){if(x>>>0>=m>>>0)break;x=x<<1}m=sa[c[f>>2]&1](c[$>>2]|0,x<<2)|0;if(!m){l=674;break}if(!u)dc(m|0,w|0,B<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,w);w=m;B=x}m=v;u=w;A=D+K|0;x=K;l=K;n=0;while(1){if((n|0)==(D|0)){m=0;break}o=T+(n<<2)|0;k=c[o>>2]|0;dc(m+(x*2096|0)|0,G+(k*2096|0)|0,2096)|0;c[u+(l<<2)>>2]=c[V+(k<<2)>>2];c[U+(c[o>>2]<<2)>>2]=n;x=x+1|0;l=l+1|0;n=n+1|0}while(1){if((m|0)==(E|0))break;c[L+(F+m<<2)>>2]=K+(c[U+(c[W+(m<<2)>>2]<<2)>>2]|0);m=m+1|0}m=D+K|0;if((K+D|0)!=(m|0)){l=684;break}if((m|0)!=(A|0)){l=686;break}K=m;F=F+64|0}if((l|0)==665)oa(1);else if((l|0)==674)oa(1);else if((l|0)==684)pa(403935,403848,273,403889);else if((l|0)==686)pa(403969,403848,274,403889);else if((l|0)==688){ra[c[p>>2]&1](c[$>>2]|0,G);W=K<<6;u=_(K>>>1,K)|0;u=W>>>0>>0?W:u;do if((u+1|0)>>>0>2049){ra[c[p>>2]&1](c[$>>2]|0,H);t=sa[c[f>>2]&1](c[$>>2]|0,(u*24|0)+24|0)|0;if(t){X=t;break}oa(1)}else X=H;while(0);m=K<<2;I=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!I)oa(1);t=0;while(1){if((t|0)==(K|0))break;c[I+(t<<2)>>2]=t;t=t+1|0}H=v;G=tb(H,w,L,I,X,K,N,256,u)|0;ra[c[p>>2]&1](c[$>>2]|0,X);ra[c[p>>2]&1](c[$>>2]|0,w);J=sa[c[f>>2]&1](c[$>>2]|0,m)|0;if(!J)oa(1);t=0;while(1){if((t|0)==(K|0))break;c[J+(t<<2)>>2]=-1;t=t+1|0}B=Y+2080|0;C=Y+2088|0;D=Z+2080|0;E=Z+2080|0;t=0;m=0;F=0;while(1){if((F|0)==(N|0))break;ac(Y|0,0,2084)|0;h[C>>3]=s;u=M+(F<<2)|0;w=0;A=m;m=0;while(1){if(m>>>0>=(c[u>>2]|0)>>>0)break;w=Y+(e[P+(A<<1)>>1]<<2)|0;c[w>>2]=(c[w>>2]|0)+1;w=(c[B>>2]|0)+1|0;c[B>>2]=w;A=A+1|0;m=m+1|0}u=c[((F|0)==0?L:L+(F+-1<<2)|0)>>2]|0;n=(w|0)==0;if(n)y=0.0;else{dc(Z|0,Y|0,2096)|0;c[E>>2]=(c[E>>2]|0)+(c[H+(u*2096|0)+2080>>2]|0);m=0;while(1){if((m|0)==520)break;X=Z+(m<<2)|0;c[X>>2]=(c[X>>2]|0)+(c[H+(u*2096|0)+(m<<2)>>2]|0);m=m+1|0}y=+Ya(Z);y=y-+h[H+(u*2096|0)+2088>>3]}m=u;l=0;while(1){if((l|0)==(G|0))break;x=I+(l<<2)|0;u=c[x>>2]|0;if(n)z=0.0;else{dc(Z|0,Y|0,2096)|0;c[D>>2]=(c[D>>2]|0)+(c[H+(u*2096|0)+2080>>2]|0);w=0;while(1){if((w|0)==520)break;X=Z+(w<<2)|0;c[X>>2]=(c[X>>2]|0)+(c[H+(u*2096|0)+(w<<2)>>2]|0);w=w+1|0}z=+Ya(Z);z=z-+h[H+(u*2096|0)+2088>>3]}if(z>2]|0}l=l+1|0}c[L+(F<<2)>>2]=m;m=J+(m<<2)|0;if((c[m>>2]|0)==-1){c[m>>2]=t;t=t+1|0}m=A;F=F+1|0}ra[c[p>>2]&1](c[$>>2]|0,I);ra[c[p>>2]&1](c[$>>2]|0,v);w=r+16|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?N:t;while(1){if(v>>>0>=N>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v)|0;if(!m)oa(1);u=c[w>>2]|0;t=r+8|0;if(u)dc(m|0,c[t>>2]|0,u|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}w=r+20|0;t=c[w>>2]|0;if(t>>>0>>0){v=(t|0)==0?N:t;while(1){if(v>>>0>=N>>>0)break;v=v<<1}m=sa[c[f>>2]&1](c[$>>2]|0,v<<2)|0;if(!m)oa(1);u=c[w>>2]|0;t=r+12|0;if(u)dc(m|0,c[t>>2]|0,u<<2|0)|0;ra[c[p>>2]&1](c[$>>2]|0,c[t>>2]|0);c[t>>2]=m;c[w>>2]=v}else t=r+12|0;w=r+8|0;l=0;m=0;n=0;u=0;while(1){if((u|0)==(N|0))break;v=m+(c[M+(u<<2)>>2]|0)|0;x=u+1|0;m=c[L+(u<<2)>>2]|0;if((x|0)!=(N|0)?(m|0)==(c[L+(x<<2)>>2]|0):0){m=v;u=x;continue}u=c[J+(m<<2)>>2]|0;f=u&255;a[(c[w>>2]|0)+l>>0]=f;c[(c[t>>2]|0)+(l<<2)>>2]=v;l=l+1|0;m=0;n=((n&255)>(f&255)?n&255:u&255)&255;u=x}c[r+4>>2]=l;c[r>>2]=(n&255)+1;ra[c[p>>2]&1](c[$>>2]|0,J);ra[c[p>>2]&1](c[$>>2]|0,M);ra[c[p>>2]&1](c[$>>2]|0,L);ra[c[p>>2]&1](c[$>>2]|0,O);f=c[p>>2]|0;r=c[$>>2]|0;ra[f&1](r,P);i=aa;return}}}function _a(b,f,g,h,j){b=b|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0;A=i;i=i+1552|0;y=A+840|0;z=A+136|0;v=A+72|0;w=A+112|0;x=A+76|0;t=A;c[v>>2]=0;l=w;m=l+18|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));l=t;m=l+72|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));if(f>>>0<705){s=f;k=0}else pa(404299,404333,308,404371);while(1){if(k>>>0>=f>>>0)break;if(a[b+(f-k+-1)>>0]|0)break;s=s+-1|0;k=k+1|0}if(f>>>0>50){m=1;f=1;q=0;n=0;o=0;while(1){if(q>>>0>=s>>>0)break;l=a[b+q>>0]|0;p=1;k=q;while(1){k=k+1|0;if(k>>>0>=s>>>0)break;if((a[b+k>>0]|0)!=l<<24>>24)break;p=p+1|0}if(p>>>0>2){r=l<<24>>24==0;f=r?f+1|0:f;k=r?o+p|0:o;if(p>>>0>3?!r:0){m=m+1|0;l=n+p|0}else l=n}else{l=n;k=o}q=q+p|0;n=l;o=k}k=n>>>0>m<<1>>>0&1;f=o>>>0>f<<1>>>0&1}else{k=0;f=0}r=f<<24>>24==0;p=k<<24>>24==0;n=8;q=0;a:while(1){if(q>>>0>=s>>>0)break;o=a[b+q>>0]|0;l=o<<24>>24==0;if(l)if(r){f=1;u=30}else{k=q;f=1;u=23}else if(p){f=1;u=43}else{k=q;f=1;u=23}b:do if((u|0)==23){while(1){u=0;k=k+1|0;if(k>>>0>=s>>>0)break;if((a[b+k>>0]|0)!=o<<24>>24)break;f=f+1|0;u=23}if(!l)if(!f){u=42;break a}else{u=43;break}if((f|0)!=11)if(f>>>0<3){u=30;break}else m=f;else{a[y+(c[v>>2]|0)>>0]=0;a[z+(c[v>>2]|0)>>0]=0;c[v>>2]=(c[v>>2]|0)+1;m=10}l=c[v>>2]|0;k=l;m=m+-3|0;while(1){a[y+k>>0]=17;a[z+(c[v>>2]|0)>>0]=m&7;k=(c[v>>2]|0)+1|0;c[v>>2]=k;m=m>>>3;if(!m){m=l;break}m=m+-1|0}while(1){k=k+-1|0;if(m>>>0>=k>>>0)break;D=y+m|0;B=a[D>>0]|0;o=y+k|0;a[D>>0]=a[o>>0]|0;a[o>>0]=B;m=m+1|0}k=c[v>>2]|0;while(1){k=k+-1|0;if(l>>>0>=k>>>0){k=n;break b}o=z+l|0;B=a[o>>0]|0;D=z+k|0;a[o>>0]=a[D>>0]|0;a[D>>0]=B;l=l+1|0}}while(0);c:do if((u|0)==30){u=0;k=0;while(1){if((k|0)==(f|0)){k=n;break c}a[y+(c[v>>2]|0)>>0]=0;a[z+(c[v>>2]|0)>>0]=0;c[v>>2]=(c[v>>2]|0)+1;k=k+1|0}}else if((u|0)==43){u=0;if(n<<24>>24==o<<24>>24)k=f;else{a[y+(c[v>>2]|0)>>0]=o;a[z+(c[v>>2]|0)>>0]=0;c[v>>2]=(c[v>>2]|0)+1;k=f+-1|0}if((k|0)==7){a[y+(c[v>>2]|0)>>0]=o;a[z+(c[v>>2]|0)>>0]=0;c[v>>2]=(c[v>>2]|0)+1;k=k+-1|0}if(k>>>0<3){l=0;while(1){if((l|0)==(k|0)){k=o;break c}a[y+(c[v>>2]|0)>>0]=o;a[z+(c[v>>2]|0)>>0]=0;c[v>>2]=(c[v>>2]|0)+1;l=l+1|0}}l=c[v>>2]|0;n=l;m=k+-3|0;while(1){a[y+n>>0]=16;a[z+(c[v>>2]|0)>>0]=m&3;k=(c[v>>2]|0)+1|0;c[v>>2]=k;m=m>>>2;if(!m){m=l;break}n=k;m=m+-1|0}while(1){k=k+-1|0;if(m>>>0>=k>>>0)break;n=y+m|0;B=a[n>>0]|0;D=y+k|0;a[n>>0]=a[D>>0]|0;a[D>>0]=B;m=m+1|0}k=c[v>>2]|0;while(1){k=k+-1|0;if(l>>>0>=k>>>0){k=o;break c}n=z+l|0;B=a[n>>0]|0;D=z+k|0;a[n>>0]=a[D>>0]|0;a[D>>0]=B;l=l+1|0}}while(0);n=k;q=q+f|0}if((u|0)==42)pa(406724,406674,168,406740);f=c[v>>2]|0;k=0;while(1){if((k|0)==(f|0)){r=0;k=0;l=0;break}D=t+(d[y+k>>0]<<2)|0;c[D>>2]=(c[D>>2]|0)+1;k=k+1|0}while(1){if(l>>>0>=18){q=k;break}if(c[t+(l<<2)>>2]|0)if(k)if((k|0)==1){q=2;break}else f=r;else{f=l;k=1}else f=r;r=f;l=l+1|0}Hb(t,18,5,g,w);Jb(w,18,x);d:do if((q|0)>1){k=18;while(1){if(!k)break d;f=k+-1|0;if(!(a[w+(d[405371+f>>0]|0)>>0]|0))k=f;else break}}else k=18;while(0);if((a[w+1>>0]|0)==0?(a[w+2>>0]|0)==0:0)f=(a[w+3>>0]|0)==0?3:2;else f=0;g=c[h>>2]|0;p=j+(g>>>3)|0;B=d[p>>0]|0;g=cc(f|0,0,g&7|0)|0;D=C;g=B|g;B=p;a[B>>0]=g;a[B+1>>0]=g>>8;a[B+2>>0]=g>>16;a[B+3>>0]=g>>24;p=p+4|0;a[p>>0]=D;a[p+1>>0]=D>>8;a[p+2>>0]=D>>16;a[p+3>>0]=D>>24;p=(c[h>>2]|0)+2|0;c[h>>2]=p;while(1){if(f>>>0>=k>>>0)break;m=d[w+(d[405371+f>>0]|0)>>0]|0;l=a[405389+m>>0]|0;m=d[405395+m>>0]|0;n=j+(p>>>3)|0;o=d[n>>0]|0;D=bc(m|0,0,l&255|0)|0;if(!((D|0)==0&(C|0)==0)){u=76;break}t=cc(m|0,0,p&7|0)|0;B=C;t=o|t;D=n;g=D;a[g>>0]=t;a[g+1>>0]=t>>8;a[g+2>>0]=t>>16;a[g+3>>0]=t>>24;D=D+4|0;a[D>>0]=B;a[D+1>>0]=B>>8;a[D+2>>0]=B>>16;a[D+3>>0]=B>>24;D=(c[h>>2]|0)+(l&255)|0;c[h>>2]=D;p=D;f=f+1|0}if((u|0)==76)pa(406196,406218,54,406251);if((q|0)==1)a[w+r>>0]=0;p=c[v>>2]|0;q=0;e:while(1){if(q>>>0>=p>>>0){u=94;break}o=d[y+q>>0]|0;f=a[w+o>>0]|0;k=e[x+(o<<1)>>1]|0;l=c[h>>2]|0;m=j+(l>>>3)|0;n=d[m>>0]|0;D=bc(k|0,0,f&255|0)|0;if(!((D|0)==0&(C|0)==0)){u=83;break}if((f&255)>=57){u=85;break}v=cc(k|0,0,l&7|0)|0;D=C;v=n|v;B=m;a[B>>0]=v;a[B+1>>0]=v>>8;a[B+2>>0]=v>>16;a[B+3>>0]=v>>24;m=m+4|0;a[m>>0]=D;a[m+1>>0]=D>>8;a[m+2>>0]=D>>16;a[m+3>>0]=D>>24;m=(c[h>>2]|0)+(f&255)|0;c[h>>2]=m;switch(o|0){case 16:{f=d[z+q>>0]|0;k=j+(m>>>3)|0;l=d[k>>0]|0;if(!((f&252|0)==0&0==0)){u=88;break e}u=cc(f|0,0,m&7|0)|0;B=C;u=l|u;D=k;v=D;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;D=D+4|0;a[D>>0]=B;a[D+1>>0]=B>>8;a[D+2>>0]=B>>16;a[D+3>>0]=B>>24;c[h>>2]=(c[h>>2]|0)+2;break}case 17:{f=d[z+q>>0]|0;k=j+(m>>>3)|0;l=d[k>>0]|0;if(!((f&248|0)==0&0==0)){u=91;break e}u=cc(f|0,0,m&7|0)|0;B=C;u=l|u;D=k;v=D;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;D=D+4|0;a[D>>0]=B;a[D+1>>0]=B>>8;a[D+2>>0]=B>>16;a[D+3>>0]=B>>24;c[h>>2]=(c[h>>2]|0)+3;break}default:{}}q=q+1|0}if((u|0)==83)pa(406196,406218,54,406251);else if((u|0)==85)pa(406267,406218,55,406251);else if((u|0)==88)pa(406196,406218,54,406251);else if((u|0)==91)pa(406196,406218,54,406251);else if((u|0)==94){i=A;return}} -function ta(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function ua(){return i|0}function va(a){a=a|0;i=a}function wa(a,b){a=a|0;b=b|0;i=a;j=b}function xa(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function ya(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function za(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Aa(a){a=a|0;C=a}function Ba(){return C|0}function Ca(e,f,h,j,k,l,m){e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,qa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;Oa=i;i=i+224|0;Ha=Oa+200|0;Ca=Oa+184|0;Ka=Oa+168|0;Ja=Oa+152|0;Fa=Oa+144|0;Ia=Oa+140|0;La=Oa+136|0;Ga=Oa+24|0;q=Oa+20|0;u=Oa+16|0;r=Oa+12|0;v=Oa+8|0;w=Oa+4|0;Na=Oa;c[Na>>2]=l;p=k;z=m;Ma=j>>>24;Ma=(Ma<<2|2)+((j-(Ma<<24)|0)>>>0>1048576?4:3)+1+j|0;n=(j|0)==0;Ma=n?1:Ma>>>0>>0?0:Ma;if(!l){k=0;Na=c[Na>>2]|0;Na=k?Na:-1;i=Oa;return Na|0}if(n){c[Na>>2]=1;a[m>>0]=6;k=1;Na=c[Na>>2]|0;Na=k?Na:-1;i=Oa;return Na|0}do if((e|0)==10){if((f|0)>=16)if((f|0)>24)f=24;else x=7;else{f=16;x=7}q=1<>2]=c[4721];c[Ca+4>>2]=c[4722];c[Ca+8>>2]=c[4723];c[Ca+12>>2]=c[4724];c[Ka>>2]=c[4721];c[Ka+4>>2]=c[4722];c[Ka+8>>2]=c[4723];c[Ka+12>>2]=c[4724];wa=c[Na>>2]|0;q=q>>>0>j>>>0?j:q;xa=1<<((f|0)>23?24:f+1|0);ya=xa>>>3;c[Ja>>2]=0;za=Ja+4|0;c[za>>2]=10;n=Ja+8|0;c[n>>2]=f;Aa=Ja+12|0;c[Aa>>2]=0;c[za>>2]=10;za=(f|0)>16?((f|0)>18?18:f):16;c[Aa>>2]=za;za=1<>2]=1;Aa=Ha+4|0;c[Aa>>2]=1;Ba=Ha+8|0;c[Ba>>2]=0;if(j>>>0>=2147483649)pa(406392,406053,1025,406415);if((f|0)!=16)if((f|0)==17){r=1;h=7}else{r=((f<<1)+222|1)&255;h=4}else{r=0;h=1}ua=Lb(0,524308)|0;if(!ua)oa(1);c[ua+524292>>2]=0;c[ua+524300>>2]=0;a[ua+524304>>0]=1;p=ua+524304|0;f=1<>2];c[ua>>2]=f+-1;f=1-f|0;ta=ua+524296|0;c[ta>>2]=f;n=0;while(1){if((n|0)==131072)break;c[ua+4+(n<<2)>>2]=f;n=n+1|0}f=ua+524300|0;do if(q>>>0>(c[f>>2]|0)>>>0){n=ua+524292|0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[n>>2]|0);c[n>>2]=0;o=sa[c[Ha>>2]&1](c[Ba>>2]|0,q<<3)|0;if(!o)oa(1);else{c[n>>2]=o;c[f>>2]=q;break}}while(0);a[p>>0]=0;W=ua+524292|0;X=Ga+8|0;Y=Ga+12|0;Z=Ga+28|0;$=Ga+32|0;ba=Ga+36|0;ca=Ga+48|0;da=Ga+52|0;ea=Ga+56|0;fa=Ga+60|0;ga=Ga+72|0;ha=Ga+80|0;ia=Ga+88|0;ja=Ga+96|0;ka=Ga+104|0;la=Ga+8|0;ma=Ga+32|0;qa=Ga+56|0;n=z;U=0;V=1;T=0;t=0;u=0;a:while(1){f=(V&1)==0;if(!((f^1)&U>>>0>>0)){x=93;break}R=U+xa|0;R=R>>>0>j>>>0?j:R;P=(((R-U|0)>>>0)/12|0)+16|0;c[Fa>>2]=0;c[Ia>>2]=0;f=0;Q=U;L=0;N=0;v=0;S=0;while(1){if(R>>>0<=Q>>>0){p=f;z=N;e=v;o=S;break}O=R-Q|0;O=O>>>0>>0?O:za;M=sa[c[Ha>>2]&1](c[Ba>>2]|0,(O<<4)+16|0)|0;if(!M){x=27;break a}f=O+1|0;o=0;while(1){if((o|0)==(f|0))break;c[M+(o<<4)>>2]=1;c[M+(o<<4)+4>>2]=0;c[M+(o<<4)+8>>2]=0;g[M+(o<<4)+12>>2]=s;o=o+1|0}b:do if(O>>>0>2&Q>>>0>127){K=Q+-127|0;J=K+O|0;J=Q>>>0>>0?Q:J;while(1){if(K>>>0>=J>>>0)break b;p=c[ua>>2]|0;F=Q-K|0;F=p-(F>>>0<15?15:F)|0;G=K&2147483647;H=k+G|0;D=ua+4+((_(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24,506832829)|0)>>>15<<2)|0;B=c[D>>2]|0;p=(K&p)<<1;c[D>>2]=K;D=0;q=0;E=0;o=p;p=p|1;I=64;while(1){A=B&2147483647;if((K|0)==(B|0)|(K-B|0)>>>0>F>>>0|(I|0)==0){x=36;break}z=q>>>0>>0?q:E;if(z>>>0>=129){x=38;break a}x=G+z|0;y=k+(A+128)|0;e=k+(A+124)|0;w=0;f=k+(A+z)|0;while(1){if(f>>>0>e>>>0)break;Pa=k+(x+w)|0;if((d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24|0)!=(d[Pa>>0]|d[Pa+1>>0]<<8|d[Pa+2>>0]<<16|d[Pa+3>>0]<<24|0))break;w=w+4|0;f=f+4|0}while(1){if(f>>>0>=y>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[f>>0]|0))break;w=w+1|0;f=f+1|0}z=z+w|0;c:do if(z){f=z;x=H;y=k+A|0;while(1){e=a[x>>0]|0;w=a[y>>0]|0;if(e<<24>>24!=w<<24>>24)break;f=f+-1|0;if(!f)break c;else{x=x+1|0;y=y+1|0}}if(e<<24>>24!=w<<24>>24){x=51;break a}}while(0);if(D){x=53;break a}if(z>>>0>=128){x=55;break}f=c[W>>2]|0;if((d[k+(G+z)>>0]|0)>(d[k+(A+z)>>0]|0)){c[f+(o<<2)>>2]=B;e=(B&c[ua>>2])<<1|1;q=z;f=E;o=e;e=(c[W>>2]|0)+(e<<2)|0}else{c[f+(p<<2)>>2]=B;e=(B&c[ua>>2])<<1;f=z;p=e;e=(c[W>>2]|0)+(e<<2)|0}D=0;E=f;B=c[e>>2]|0;I=I+-1|0}if((x|0)==36){c[(c[W>>2]|0)+(o<<2)>>2]=c[ta>>2];c[(c[W>>2]|0)+(p<<2)>>2]=c[ta>>2]}else if((x|0)==55){Pa=c[W>>2]|0;c[Pa+(o<<2)>>2]=c[Pa+((B&c[ua>>2])<<1<<2)>>2];Pa=c[W>>2]|0;c[Pa+(p<<2)>>2]=c[Pa+(((B&c[ua>>2])<<1|1)<<2)>>2]}K=K+1|0}}while(0);o=S+(Ea(Ha,O,Q,k,2147483647,Ja,va,Ca,ua,M)|0)|0;p=o+1|0;p=P>>>0>p>>>0?P:p;if((L|0)!=(p|0)){f=sa[c[Ha>>2]&1](c[Ba>>2]|0,p<<4)|0;q=f;if(!f){x=63;break a}if(N){Pa=N;dc(f|0,Pa|0,S<<4|0)|0;ra[c[Aa>>2]&1](c[Ba>>2]|0,Pa)}}else{p=L;q=N}Da(O,Q,va,M,Ca,Fa,q+(S<<4)|0,Ia);v=v+O|0;ra[c[Aa>>2]&1](c[Ba>>2]|0,M);f=c[Ia>>2]|0;if(f>>>0>ya>>>0){p=f;z=q;e=v;break}if(o>>>0>ya>>>0){p=f;z=q;e=v;break}else{Q=Q+O|0;L=p;N=q;S=o}}f=c[Fa>>2]|0;if(!f)f=p;else{p=o+1|0;Pa=z;c[Pa+(o<<4)>>2]=f;c[Pa+(o<<4)+4>>2]=67108864;c[Pa+(o<<4)+8>>2]=0;b[Pa+(o<<4)+14>>1]=16;o=Pa+(o<<4)+12|0;do if(f>>>0>=6){if(f>>>0<130){Pa=f+-2|0;f=((aa(Pa|0)|0)^31)+-1|0;f=(f<<1)+(Pa>>>f)+2|0;break}if(f>>>0<2114){f=((aa(f+-66|0)|0)^31)+10|0;break}if(f>>>0<6210)f=21;else f=f>>>0<22594?22:23}while(0);f=f&65535;b[o>>1]=b[88156+((f>>>3)*3<<1)>>1]|(f<<3&56|2)&65535;f=(c[Ia>>2]|0)+(c[Fa>>2]|0)|0;c[Ia>>2]=f;o=p}w=U+e|0;v=(w|0)==(j|0);h=h&255;c[La>>2]=h;do if(!e){f=sa[c[Ha>>2]&1](c[Ba>>2]|0,16)|0;if(!f){x=79;break a}a[f>>0]=r;Pa=c[La>>2]|0;U=f+(Pa>>>3)|0;S=d[U>>0]|0;R=cc(3,0,Pa&7|0)|0;T=C;R=S|R;S=U;a[S>>0]=R;a[S+1>>0]=R>>8;a[S+2>>0]=R>>16;a[S+3>>0]=R>>24;U=U+4|0;a[U>>0]=T;a[U+1>>0]=T>>8;a[U+2>>0]=T>>16;a[U+3>>0]=T>>24;c[La>>2]=Pa+9&-8}else{if(!(Fb(k,2147483647,U,0,e,f,o)|0)){c[Ca>>2]=c[Ka>>2];c[Ca+4>>2]=c[Ka+4>>2];c[Ca+8>>2]=c[Ka+8>>2];c[Ca+12>>2]=c[Ka+12>>2];f=sa[c[Ha>>2]&1](c[Ba>>2]|0,e+16|0)|0;if(!f){x=83;break a}a[f>>0]=r;bb(v,k,U,2147483647,e,La,f);break};c[Ga>>2]=0;c[Ga+4>>2]=0;c[Ga+8>>2]=0;c[Ga+12>>2]=0;c[Ga+16>>2]=0;c[Ga+20>>2]=0;c[Ga+24>>2]=0;c[Z>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;c[Z+12>>2]=0;c[Z+16>>2]=0;c[ca>>2]=0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;x=ga;y=x+40|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));p=Wb(k,U,2147483647,e)|0;p=p?2:3;q=z;Nb(Ha,k,U,2147483647,Ja,T,t,q,o,p,Ga);Ob(0,0,Ga);f=sa[c[Ha>>2]&1](c[Ba>>2]|0,(e<<1)+502|0)|0;if(!f){x=86;break a}a[f>>0]=r;ab(Ha,k,U,e,2147483647,T,t,v,0,0,p,q,o,Ga,La,f);if((e+4|0)>>>0<(c[La>>2]|0)>>>3>>>0){c[Ca>>2]=c[Ka>>2];c[Ca+4>>2]=c[Ka+4>>2];c[Ca+8>>2]=c[Ka+8>>2];c[Ca+12>>2]=c[Ka+12>>2];a[f>>0]=r;c[La>>2]=h;bb(v,k,U,2147483647,e,La,f)}ra[c[Aa>>2]&1](c[Ba>>2]|0,c[la>>2]|0);c[X>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[Y>>2]|0);c[Y>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ma>>2]|0);c[$>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ba>>2]|0);c[ba>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[qa>>2]|0);c[ea>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[fa>>2]|0);c[fa>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ga>>2]|0);c[ga>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ha>>2]|0);c[ha>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ia>>2]|0);c[ia>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ja>>2]|0);c[ja>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[ka>>2]|0);c[ka>>2]=0}while(0);p=c[La>>2]|0;o=p>>>3;r=a[f+o>>0]|0;q=a[k+(w+-1)>>0]|0;t=a[k+(w+-2)>>0]|0;c[Ka>>2]=c[Ca>>2];c[Ka+4>>2]=c[Ca+4>>2];c[Ka+8>>2]=c[Ca+8>>2];c[Ka+12>>2]=c[Ca+12>>2];u=u+o|0;if(u>>>0>wa>>>0)o=0;else{dc(n|0,f|0,o|0)|0;n=n+o|0;o=V}ra[c[Aa>>2]&1](c[Ba>>2]|0,f);ra[c[Aa>>2]&1](c[Ba>>2]|0,z);h=p&7;U=w;V=o;T=q}if((x|0)==27)oa(1);else if((x|0)==38)pa(405873,405905,373,405932);else if((x|0)==51)pa(405955,405905,378,405932);else if((x|0)==53)na();else if((x|0)==63)oa(1);else if((x|0)==79)oa(1);else if((x|0)==83)oa(1);else if((x|0)==86)oa(1);else if((x|0)==93){c[Na>>2]=u;ra[c[Aa>>2]&1](c[Ba>>2]|0,c[W>>2]|0);c[W>>2]=0;ra[c[Aa>>2]&1](c[Ba>>2]|0,ua);if(f){x=107;break}if((Ma|0)!=0?(c[Na>>2]|0)>>>0>Ma>>>0:0){x=106;break}else f=1;Pa=c[Na>>2]|0;Pa=f?Pa:-1;i=Oa;return Pa|0}}else{t=Yb(5240)|0;if(!t){k=0;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}c[t+16>>2]=1;c[t+20>>2]=1;c[t+24>>2]=0;c[t>>2]=0;c[t+4>>2]=11;c[t+8>>2]=22;c[t+12>>2]=0;x=t+80|0;c[x>>2]=0;c[x+4>>2]=0;c[t+128>>2]=0;c[t+132>>2]=0;c[t+136>>2]=0;x=t+144|0;c[t+4300>>2]=0;c[t+4304>>2]=0;n=t+5204|0;c[t+5232>>2]=0;a[t+5236>>0]=0;a[t+5237>>0]=0;c[t+28>>2]=0;o=t+32|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;x=t+194|0;y=x+10|0;do{a[x>>0]=0;x=x+1|0}while((x|0)<(y|0));c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;n=t+104|0;x=o;y=x+44|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));c[n>>2]=0;c[t+108>>2]=0;c[t+112>>2]=0;c[t+116>>2]=0;c[t+124>>2]=0;c[t+120>>2]=0;c[t+160>>2]=4;c[t+164>>2]=11;c[t+168>>2]=15;c[t+172>>2]=16;Pa=t+176|0;La=t+160|0;c[Pa>>2]=c[La>>2];c[Pa+4>>2]=c[La+4>>2];c[Pa+8>>2]=c[La+8>>2];c[Pa+12>>2]=c[La+12>>2];if(!t){k=0;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}c[q>>2]=j;c[u>>2]=p;c[r>>2]=c[Na>>2];c[v>>2]=z;c[w>>2]=0;if(!(a[t+5237>>0]&1)){c[t+4>>2]=e;c[t+8>>2]=f;c[t>>2]=h}f=Ab(t,q,u,r,v,w)|0;if((c[t+5232>>2]|0)==2?(c[t+5220>>2]|0)==0:0)h=f&1;else h=0;c[Na>>2]=c[w>>2];q=t+200|0;f=c[t+20>>2]|0;n=c[t+24>>2]|0;ra[f&1](n,c[q>>2]|0);c[q>>2]=0;q=t+124|0;o=t+20|0;p=t+24|0;ra[c[o>>2]&1](c[p>>2]|0,c[q>>2]|0);c[q>>2]=0;ra[c[o>>2]&1](c[p>>2]|0,c[t+112>>2]|0);c[t+112>>2]=0;q=t+28|0;r=c[t+72>>2]|0;if(r){Pa=r+524292|0;ra[c[o>>2]&1](c[p>>2]|0,c[Pa>>2]|0);c[Pa>>2]=0}Pa=t+72|0;ra[c[o>>2]&1](c[p>>2]|0,c[q>>2]|0);c[q>>2]=0;La=t+32|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+36|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+40|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+44|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+48|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+52|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+56|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+60|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+64|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;La=t+68|0;ra[c[o>>2]&1](c[p>>2]|0,c[La>>2]|0);c[La>>2]=0;ra[c[o>>2]&1](c[p>>2]|0,c[Pa>>2]|0);c[Pa>>2]=0;Pa=t+4300|0;ra[c[o>>2]&1](c[p>>2]|0,c[Pa>>2]|0);c[Pa>>2]=0;Pa=t+5208|0;ra[c[o>>2]&1](c[p>>2]|0,c[Pa>>2]|0);c[Pa>>2]=0;Pa=t+5212|0;ra[c[o>>2]&1](c[p>>2]|0,c[Pa>>2]|0);c[Pa>>2]=0;ra[f&1](n,t);if(h<<24>>24)if((Ma|0)!=0?(c[Na>>2]|0)>>>0>Ma>>>0:0)x=106;else{k=1;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}else x=107}while(0);if((x|0)==106){c[Na>>2]=0;if(Ma>>>0>l>>>0){k=0;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}}else if((x|0)==107?(c[Na>>2]=0,(Ma|0)==0|Ma>>>0>l>>>0):0){k=0;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}a[m>>0]=33;a[m+1>>0]=3;h=0;q=2;r=j;while(1){if(!r)break;if(r>>>0<=16777216)if(r>>>0>65536){f=r;if(f>>>0>1048576)x=113;else p=1}else{f=r;p=0}else{f=16777216;x=113}if((x|0)==113){x=0;p=2}o=p<<1|(f<<3)+-8|1<<(p<<2|19);a[m+q>>0]=o;a[m+(q+1)>>0]=o>>>8;n=q+3|0;a[m+(q+2)>>0]=o>>>16;if((p|0)==2){a[m+n>>0]=o>>>24;n=q+4|0}dc(m+n|0,k+h|0,f|0)|0;h=h+f|0;q=n+f|0;r=r-f|0}a[m+q>>0]=3;c[Na>>2]=q+1;k=1;Pa=c[Na>>2]|0;Pa=k?Pa:-1;i=Oa;return Pa|0}function Da(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;x=g+8|0;y=g+12|0;z=g+4|0;k=c[f+12>>2]|0;l=0;B=0;while(1){if((k|0)==-1)break;n=l+k|0;o=f+(n<<4)|0;p=c[o>>2]|0;A=p&16777215;m=c[f+(n<<4)+8>>2]|0;w=l+m|0;k=c[f+(n<<4)+12>>2]|0;if(!B){m=m+(c[h>>2]|0)|0;c[h>>2]=0}u=c[f+(n<<4)+4>>2]|0;v=u&33554431;o=c[o>>2]|0;o=(o&16777215)+9-(o>>>24)|0;t=w+d|0;t=v>>>0>(t>>>0>>0?t:e)>>>0;u=u>>>25;u=(u|0)==0?v+15|0:u+-1|0;c[i+(B<<4)>>2]=m;c[i+(B<<4)+4>>2]=A|(o^p)<<24;l=i+(B<<4)+14|0;if(u>>>0<16){n=u&65535;b[l>>1]=n;l=n;n=0}else{r=u+-12|0;n=((aa(r|0)|0)^31)+-1|0;s=r>>>n&1;q=((n<<1)+65534|s)+16&65535;b[l>>1]=q;l=q;n=n<<24|r-((s|2)<>2]=n;r=l<<16>>16==0;s=i+(B<<4)+12|0;do if(m>>>0>=6){if(m>>>0<130){p=m+-2|0;q=((aa(p|0)|0)^31)+-1|0;q=(q<<1)+(p>>>q)+2&65535;break}if(m>>>0<2114){q=((aa(m+-66|0)|0)^31)+10&65535;break}if(m>>>0<6210)q=21;else q=m>>>0<22594?22:23}else q=m&65535;while(0);do if(o>>>0>=10){if(o>>>0<134){p=o+-6|0;l=((aa(p|0)|0)^31)+-1|0;l=(l<<1)+(p>>>l)+4&65535;break}if(o>>>0<2118)l=((aa(o+-70|0)|0)^31)+12&65535;else l=23}else l=o+65534&65535;while(0);n=l&65535;o=q&65535;p=n&7|o<<3&56;if(r&(q&65535)<8&(l&65535)<16)l=((l&65535)<8?p:p|64)&65535;else l=b[88156+((n>>>3)+((o>>>3)*3|0)<<1)>>1]|p&65535;b[s>>1]=l;if(!(t|(u|0)==0)){c[y>>2]=c[x>>2];c[x>>2]=c[z>>2];c[z>>2]=c[g>>2];c[g>>2]=v}c[j>>2]=(c[j>>2]|0)+m;l=w+A|0;B=B+1|0}c[h>>2]=(c[h>>2]|0)+(a-l);return}function Ea(b,e,f,h,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0;ba=i;i=i+6320|0;Y=ba+6160|0;$=ba+1252|0;aa=ba+1024|0;Z=ba;W=(c[k+4>>2]|0)<11?150:325;X=e>>>0>127?f+e+-127|0:f;c[o>>2]=0;g[o+12>>2]=0.0;c[$+4904>>2]=e;U=b+8|0;p=sa[c[b>>2]&1](c[U>>2]|0,(e<<2)+8|0)|0;if(!p)oa(1);V=$+4896|0;c[V>>2]=p;Fa($,f,h,j);N=aa+224|0;c[N>>2]=0;O=Z;P=k+4|0;Q=n+524292|0;R=n+524296|0;S=Z;T=Z+4|0;p=0;a:while(1){if((p+3|0)>>>0>=e>>>0){w=98;break}M=p+f|0;L=M>>>0>>0?M:l;J=e-p|0;I=M&j;A=(c[P>>2]|0)!=11?16:64;A=M>>>0>>0?0:M-A|0;K=h+I|0;x=h+(I+1)|0;z=I+J|0;y=h+z|0;z=h+(z+-4)|0;q=O;s=1;r=M;while(1){r=r+-1|0;if(!(r>>>0>A>>>0&s>>>0<3))break;v=M-r|0;if(v>>>0>L>>>0)break;w=r&j;if((a[K>>0]|0)!=(a[h+w>>0]|0)){G=s;H=q;s=G;q=H;continue}if((a[x>>0]|0)==(a[h+(w+1)>>0]|0)){t=0;u=K}else{G=s;H=q;s=G;q=H;continue}while(1){if(u>>>0>z>>>0)break;H=h+(w+t)|0;if((d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24|0)!=(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24|0))break;t=t+4|0;u=u+4|0}while(1){if(u>>>0>=y>>>0)break;if((a[h+(w+t)>>0]|0)!=(a[u>>0]|0))break;t=t+1|0;u=u+1|0}if(t>>>0<=s>>>0){G=s;H=q;s=G;q=H;continue}s=q;c[s>>2]=v;c[s+4>>2]=t<<5;q=s+8|0;s=t}do if(s>>>0>>0){G=J>>>0<128?J:128;H=J>>>0>127;r=n+4+((_(d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24,506832829)|0)>>>15<<2)|0;v=c[r>>2]|0;t=(M&c[n>>2])<<1;u=t|1;if(H){c[r>>2]=M;E=0;F=0;D=64}else{E=0;F=0;D=64}while(1){B=M-v|0;C=v&j;if((M|0)==(v|0)|B>>>0>L>>>0|(D|0)==0){w=22;break}A=E>>>0>>0?E:F;if(A>>>0>=129){w=25;break a}y=I+A|0;w=C+J|0;z=h+w|0;w=h+(w+-4)|0;x=0;r=h+(C+A)|0;while(1){if(r>>>0>w>>>0)break;ca=h+(y+x)|0;if((d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24|0)!=(d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0))break;x=x+4|0;r=r+4|0}while(1){if(r>>>0>=z>>>0)break;if((a[h+(y+x)>>0]|0)!=(a[r>>0]|0))break;x=x+1|0;r=r+1|0}A=A+x|0;b:do if(A){r=A;y=K;z=h+C|0;while(1){w=a[y>>0]|0;x=a[z>>0]|0;if(w<<24>>24!=x<<24>>24)break;r=r+-1|0;if(!r)break b;else{y=y+1|0;z=z+1|0}}if(w<<24>>24!=x<<24>>24){w=38;break a}}while(0);r=q;if((q|0)!=0&A>>>0>s>>>0){c[r>>2]=B;c[r+4>>2]=A<<5;q=r+8|0;s=A}if(A>>>0>=G>>>0){w=42;break}if((d[h+(I+A)>>0]|0)>(d[h+(C+A)>>0]|0)){if(H)c[(c[Q>>2]|0)+(t<<2)>>2]=v;w=(v&c[n>>2])<<1|1;v=A;r=F;t=w;w=(c[Q>>2]|0)+(w<<2)|0}else{if(H)c[(c[Q>>2]|0)+(u<<2)>>2]=v;w=(v&c[n>>2])<<1;v=E;r=A;u=w;w=(c[Q>>2]|0)+(w<<2)|0}E=v;F=r;v=c[w>>2]|0;D=D+-1|0}if((w|0)==22){if(!H)break;c[(c[Q>>2]|0)+(t<<2)>>2]=c[R>>2];c[(c[Q>>2]|0)+(u<<2)>>2]=c[R>>2];break}else if((w|0)==42){if(!H)break;ca=c[Q>>2]|0;c[ca+(t<<2)>>2]=c[ca+((v&c[n>>2])<<1<<2)>>2];ca=c[Q>>2]|0;c[ca+(u<<2)>>2]=c[ca+(((v&c[n>>2])<<1|1)<<2)>>2];break}}while(0);r=0;while(1){if((r|0)==38)break;c[Y+(r<<2)>>2]=268435455;r=r+1|0}s=s+1|0;s=s>>>0<4?4:s;c:do if(Vb(K,s,J,Y)|0){t=J>>>0>37?37:J;while(1){if(s>>>0>t>>>0)break c;r=c[Y+(s<<2)>>2]|0;if(r>>>0<268435455){ca=r&31;c[q>>2]=L+(r>>>5)+1;c[q+4>>2]=s<<5|((s|0)==(ca|0)?0:ca);q=q+8|0}s=s+1|0}}while(0);q=q-S>>3;do if(q){r=q+-1|0;if((c[Z+(r<<3)+4>>2]|0)>>>5>>>0<=W>>>0){ca=q;Ga(e,f,p,h,j,k,l,m,ca,Z,$,aa,o);if((ca|0)!=1)break}else{K=Z+(r<<3)|0;L=c[K+4>>2]|0;ca=Z;c[ca>>2]=c[K>>2];c[ca+4>>2]=L;Ga(e,f,p,h,j,k,l,m,1,Z,$,aa,o)}q=(c[T>>2]|0)>>>5;if(q>>>0>W>>>0){I=M+q|0;I=I>>>0>>0?I:X;H=(M+64|0)>>>0>I>>>0?M+1|0:I+-63|0;while(1){if(H>>>0>=I>>>0)break;s=c[n>>2]|0;D=s+-15|0;E=H&j;F=h+E|0;B=n+4+((_(d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24,506832829)|0)>>>15<<2)|0;A=c[B>>2]|0;s=(H&s)<<1;c[B>>2]=H;B=0;t=0;C=0;r=s;s=s|1;G=64;while(1){z=A&j;if((H|0)==(A|0)|(H-A|0)>>>0>D>>>0|(G|0)==0){w=71;break}y=t>>>0>>0?t:C;if(y>>>0>=129){w=73;break a}w=E+y|0;x=h+(z+128)|0;u=h+(z+124)|0;v=0;q=h+(z+y)|0;while(1){if(q>>>0>u>>>0)break;ca=h+(w+v)|0;if((d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24|0)!=(d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0))break;v=v+4|0;q=q+4|0}while(1){if(q>>>0>=x>>>0)break;if((a[h+(w+v)>>0]|0)!=(a[q>>0]|0))break;v=v+1|0;q=q+1|0}y=y+v|0;d:do if(y){q=y;w=F;x=h+z|0;while(1){u=a[w>>0]|0;v=a[x>>0]|0;if(u<<24>>24!=v<<24>>24)break;q=q+-1|0;if(!q)break d;else{w=w+1|0;x=x+1|0}}if(u<<24>>24!=v<<24>>24){w=86;break a}}while(0);if(B){w=88;break a}if(y>>>0>=128){w=90;break}q=c[Q>>2]|0;if((d[h+(E+y)>>0]|0)>(d[h+(z+y)>>0]|0)){c[q+(r<<2)>>2]=A;u=(A&c[n>>2])<<1|1;t=y;q=C;r=u;u=(c[Q>>2]|0)+(u<<2)|0}else{c[q+(s<<2)>>2]=A;u=(A&c[n>>2])<<1;q=y;s=u;u=(c[Q>>2]|0)+(u<<2)|0}B=0;C=q;A=c[u>>2]|0;G=G+-1|0}if((w|0)==71){c[(c[Q>>2]|0)+(r<<2)>>2]=c[R>>2];c[(c[Q>>2]|0)+(s<<2)>>2]=c[R>>2]}else if((w|0)==90){ca=c[Q>>2]|0;c[ca+(r<<2)>>2]=c[ca+((A&c[n>>2])<<1<<2)>>2];ca=c[Q>>2]|0;c[ca+(s<<2)>>2]=c[ca+(((A&c[n>>2])<<1|1)<<2)>>2]}H=H+1|0}p=p+(((c[T>>2]|0)>>>5)+-1)|0;c[N>>2]=0}}else Ga(e,f,p,h,j,k,l,m,0,Z,$,aa,o);while(0);p=p+1|0}if((w|0)==25)pa(405873,405905,373,405932);else if((w|0)==38)pa(405955,405905,378,405932);else if((w|0)==73)pa(405873,405905,373,405932);else if((w|0)==86)pa(405955,405905,378,405932);else if((w|0)==88)na();else if((w|0)==98){ra[c[b+4>>2]&1](c[U>>2]|0,c[V>>2]|0);c[V>>2]=0;while(1){if(c[o+(e<<4)+8>>2]|0)break;if((c[o+(e<<4)>>2]|0)!=1)break;e=e+-1|0}c[o+(e<<4)+12>>2]=-1;p=0;while(1){if(!e)break;j=(c[o+(e<<4)>>2]&16777215)+(c[o+(e<<4)+8>>2]|0)|0;ca=e-j|0;c[o+(ca<<4)+12>>2]=j;e=ca;p=p+1|0}i=ba;return p|0}return 0}function Fa(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+4128|0;p=w+4112|0;s=w+1040|0;t=w+1024|0;o=w;u=c[b+4904>>2]|0;v=c[b+4896>>2]|0;a:do if(Wb(f,e,h,u)|0){c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;l=0;o=0;while(1){if((o|0)==(u|0))break;j=a[f+(o+e&h)>>0]|0;n=j&255;if(j<<24>>24<=-1)if((j&255)>191)j=1;else j=l>>>0<224?0:2;else j=0;l=p+(j<<2)|0;c[l>>2]=(c[l>>2]|0)+1;l=n;o=o+1|0}r=((c[p+4>>2]|0)+(c[p+8>>2]|0)|0)>>>0<25?0:1;ac(s|0,0,3072)|0;n=u>>>0>495?495:u;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;p=0;q=0;j=0;while(1){if((q|0)==(n|0)){o=0;break}l=a[f+(q+e&h)>>0]|0;o=l&255;x=s+(j<<10)+(o<<2)|0;c[x>>2]=(c[x>>2]|0)+1;j=t+(j<<2)|0;c[j>>2]=(c[j>>2]|0)+1;if(l<<24>>24<=-1)if((l&255)>191)j=r;else j=p>>>0<224?0:r;else j=0;p=o;q=q+1|0}while(1){if((o|0)==(u|0))break;if(o>>>0>=495){if(o>>>0>=496){j=o+e|0;l=d[f+(j+-496&h)>>0]|0;if(o>>>0<497)j=0;else j=d[f+(j+-497&h)>>0]|0;if(l>>>0>=128)if(l>>>0>191)j=r;else j=j>>>0<224?0:r;else j=0}else j=0;x=s+(j<<10)+((d[f+(o+e+-495&h)>>0]|0)<<2)|0;c[x>>2]=(c[x>>2]|0)+-1;x=t+(j<<2)|0;c[x>>2]=(c[x>>2]|0)+-1}if((o+495|0)>>>0>>0){l=o+e|0;n=l+495|0;j=a[f+(l+494&h)>>0]|0;l=a[f+(l+493&h)>>0]|0;if(j<<24>>24<=-1)if((j&255)>191)j=r;else j=(l&255)<224?0:r;else j=0;x=s+(j<<10)+((d[f+(n&h)>>0]|0)<<2)|0;c[x>>2]=(c[x>>2]|0)+1;x=t+(j<<2)|0;c[x>>2]=(c[x>>2]|0)+1}if(o){j=o+e|0;l=d[f+(j+-1&h)>>0]|0;if(o>>>0<2)j=0;else j=d[f+(j+-2&h)>>0]|0;if(l>>>0>=128)if(l>>>0>191)j=r;else j=j>>>0<224?0:r;else j=0}else j=0;l=c[s+(j<<10)+((d[f+(o+e&h)>>0]|0)<<2)>>2]|0;l=(l|0)==0?1:l;j=c[t+(j<<2)>>2]|0;if(j>>>0<256)m=+g[19516+(j<<2)>>2];else m=+Xb(+(j>>>0));if(l>>>0<256)k=+g[19516+(l<<2)>>2];else k=+Xb(+(l>>>0));k=m-k+.02905;k=k<1.0?k*.5+.5:k;if(o>>>0<2e3)k=k+(.7-+((2e3-o|0)>>>0)/2.0e3*.35);g[v+(o+1<<2)>>2]=k;o=o+1|0}}else{ac(o|0,0,1024)|0;j=u>>>0>2e3?2e3:u;l=0;while(1){if((l|0)==(j|0)){n=0;break}x=o+((d[f+(l+e&h)>>0]|0)<<2)|0;c[x>>2]=(c[x>>2]|0)+1;l=l+1|0}while(1){if((n|0)==(u|0))break a;if(n>>>0>=2e3){x=o+((d[f+(n+e+-2e3&h)>>0]|0)<<2)|0;c[x>>2]=(c[x>>2]|0)+-1;j=j+-1|0}l=n+e|0;if((n+2e3|0)>>>0>>0){x=o+((d[f+(l+2e3&h)>>0]|0)<<2)|0;c[x>>2]=(c[x>>2]|0)+1;j=j+1|0}l=c[o+((d[f+(l&h)>>0]|0)<<2)>>2]|0;l=(l|0)==0?1:l;if(j>>>0<256)m=+g[19516+(j<<2)>>2];else m=+Xb(+(j>>>0));if(l>>>0<256)k=+g[19516+(l<<2)>>2];else k=+Xb(+(l>>>0));m=m-k+.029;g[v+(n+1<<2)>>2]=m<1.0?m*.5+.5:m;n=n+1|0}}while(0);g[v>>2]=0.0;k=0.0;j=0;while(1){if((j|0)==(u|0)){l=0;break}x=j+1|0;h=v+(x<<2)|0;m=+g[h>>2]+k;g[h>>2]=m;k=m;j=x}while(1){if((l|0)==704){l=0;break}j=l+11|0;if(j>>>0<256)k=+g[19516+(j<<2)>>2];else k=+Xb(+(j>>>0));g[b+(l<<2)>>2]=k;l=l+1|0}while(1){if((l|0)==520)break;j=l+20|0;if(j>>>0<256)k=+g[19516+(j<<2)>>2];else k=+Xb(+(j>>>0));g[b+2816+(l<<2)>>2]=k;l=l+1|0}g[b+4900>>2]=3.4594316482543945;i=w;return}function Ga(e,f,h,j,l,m,n,o,p,q,r,s,t){e=e|0;f=f|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0.0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;Z=i;i=i+64|0;A=Z+36|0;z=Z+8|0;Y=Z;S=f+h|0;T=S&l;R=S>>>0>>0?S:n;U=e-h|0;Q=(c[m+4>>2]|0)<11;P=Q?150:325;Q=Q?1:5;y=c[t+(h<<4)+12>>2]|0;f=c[t+(h<<4)>>2]&16777215;m=c[t+(h<<4)+8>>2]|0;v=c[t+(h<<4)+4>>2]|0;w=v&33554431;if(h)if((w+f|0)>>>0>S>>>0|w>>>0>n>>>0|(v>>>25|0)==1)f=c[t+(h-f-m<<4)+12>>2]|0;else f=h;else f=0;v=t+(h<<4)+12|0;c[v>>2]=f;x=(c[k>>2]=y,+g[k>>2]);O=r+4896|0;m=c[O>>2]|0;u=+g[m+(h<<2)>>2];if(!(x<=u-+g[m>>2]))y=s+224|0;else{c[z>>2]=h;c[z+24>>2]=y;f=c[O>>2]|0;g[z+20>>2]=x-(+g[f+(h<<2)>>2]-+g[f>>2]);f=0;m=v;while(1){m=c[m>>2]|0;if(!((f|0)<4&(m|0)!=0)){m=o;break}N=c[t+(m<<4)+8>>2]|0;M=c[t+(m<<4)>>2]&16777215;c[z+4+(f<<2)>>2]=c[t+(m<<4)+4>>2]&33554431;f=f+1|0;m=t+(m-M-N<<4)+12|0}while(1){if((f|0)>=4)break;c[z+4+(f<<2)>>2]=c[m>>2];m=m+4|0;f=f+1|0}y=s+224|0;f=c[y>>2]|0;n=f+1|0;c[y>>2]=n;f=f&7^7;n=n>>>0<8?n:8;w=s+(f*28|0)|0;c[w>>2]=c[z>>2];c[w+4>>2]=c[z+4>>2];c[w+8>>2]=c[z+8>>2];c[w+12>>2]=c[z+12>>2];c[w+16>>2]=c[z+16>>2];c[w+20>>2]=c[z+20>>2];c[w+24>>2]=c[z+24>>2];w=1;while(1){if(w>>>0>=n>>>0)break;v=f&7;f=f+1|0;m=f&7;if(+g[s+(v*28|0)+20>>2]>+g[s+(m*28|0)+20>>2]){M=s+(v*28|0)|0;c[A>>2]=c[M>>2];c[A+4>>2]=c[M+4>>2];c[A+8>>2]=c[M+8>>2];c[A+12>>2]=c[M+12>>2];c[A+16>>2]=c[M+16>>2];c[A+20>>2]=c[M+20>>2];c[A+24>>2]=c[M+24>>2];N=s+(m*28|0)|0;c[M>>2]=c[N>>2];c[M+4>>2]=c[N+4>>2];c[M+8>>2]=c[N+8>>2];c[M+12>>2]=c[N+12>>2];c[M+16>>2]=c[N+16>>2];c[M+20>>2]=c[N+20>>2];c[M+24>>2]=c[N+24>>2];c[N>>2]=c[A>>2];c[N+4>>2]=c[A+4>>2];c[N+8>>2]=c[A+8>>2];c[N+12>>2]=c[A+12>>2];c[N+16>>2]=c[A+16>>2];c[N+20>>2]=c[A+20>>2];c[N+24>>2]=c[A+24>>2]}w=w+1|0}N=c[O>>2]|0;m=N;u=+g[N+(h<<2)>>2]}v=0-(c[y>>2]|0)&7;f=2;u=+g[s+(v*28|0)+24>>2]+ +g[r+4900>>2]+(u-+g[m+(c[s+(v*28|0)>>2]<<2)>>2]);v=4;w=10;a:while(1){do{m=f+h|0;if(m>>>0>e>>>0)break a;if(!(+g[t+(m<<4)+12>>2]<=u))break a;f=f+1|0}while((f|0)!=(w|0));N=w+v|0;f=w;u=u+1.0;v=v<<1;w=N}H=f+-1|0;I=j+T|0;K=T+U|0;J=j+K|0;K=j+(K+-4)|0;L=Y+4|0;M=Y+4|0;N=0;while(1){if(N>>>0>=Q>>>0){f=82;break}m=c[y>>2]|0;if(N>>>0>=(m>>>0<8?m:8)>>>0){f=82;break}C=N-m&7;D=h-(c[s+(C*28|0)>>2]|0)|0;do if(D>>>0>=6){if(D>>>0<130){G=D+-2|0;m=((aa(G|0)|0)^31)+-1|0;m=(m<<1)+(G>>>m)+2&65535;break}if(D>>>0<2114){m=((aa(D+-66|0)|0)^31)+10&65535;break}if(D>>>0<6210)m=21;else m=D>>>0<22594?22:23}else m=D&65535;while(0);G=m&65535;F=c[O>>2]|0;E=+g[s+(C*28|0)+20>>2]+ +((c[17268+(G<<2)>>2]|0)>>>0)+(+g[F+(h<<2)>>2]-+g[F>>2]);F=G<<3&56;G=(G>>>3)*3|0;e=(m&65535)<8;m=H;B=0;while(1){if(!(B>>>0<16&m>>>0>>0))break;n=(c[s+(C*28|0)+4+(c[11372+(B<<2)>>2]<<2)>>2]|0)+(c[11436+(B<<2)>>2]|0)|0;v=S-n|0;b:do if(((!(v>>>0>=S>>>0|n>>>0>R>>>0)?(V=v&l,W=T+m|0,W>>>0<=l>>>0):0)?(X=V+m|0,X>>>0<=l>>>0):0)?(a[j+W>>0]|0)==(a[j+X>>0]|0):0){v=0;w=I;while(1){if(w>>>0>K>>>0)break;A=j+(V+v)|0;if((d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24|0)!=(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0))break;v=v+4|0;w=w+4|0}while(1){if(w>>>0>=J>>>0)break;if((a[j+(V+v)>>0]|0)!=(a[w>>0]|0))break;v=v+1|0;w=w+1|0}x=E+ +g[r+2816+(B<<2)>>2];A=(B|0)==0;z=n|(B<<25)+33554432;while(1){o=m+1|0;if(o>>>0>v>>>0)break b;do if(o>>>0>=10){if(o>>>0<134){n=m+-5|0;m=((aa(n|0)|0)^31)+-1|0;m=(m<<1)+(n>>>m)+4&65535;break}if(o>>>0<2118)m=((aa(m+-69|0)|0)^31)+12&65535;else m=23}else m=m+65535&65535;while(0);n=m&65535;w=n&7|F;if(((A^1|e^1)^1)&(m&65535)<16)m=((m&65535)<8?w:w|64)&65535;else m=b[88156+((n>>>3)+G<<1)>>1]|w&65535;u=((m&65535)<128?E:x)+ +((c[17460+(n<<2)>>2]|0)>>>0)+ +g[r+((m&65535)<<2)>>2];m=o+h|0;if(!(u<+g[t+(m<<4)+12>>2])){m=o;continue}c[t+(m<<4)>>2]=o|150994944;c[t+(m<<4)+4>>2]=z;c[t+(m<<4)+8>>2]=D;g[t+(m<<4)+12>>2]=u;m=o}}while(0);B=B+1|0}c:do if(N>>>0<=1){o=f;C=0;while(1){if((C|0)==(p|0))break c;z=q+(C<<3)|0;e=c[z>>2]|0;z=c[z+4>>2]|0;n=Y;c[n>>2]=e;c[n+4>>2]=z;n=e>>>0>R>>>0;m=n&1;v=e+15|0;B=bc(e|0,z|0,37)|0;if(v>>>0<16)w=0;else{_=e+3|0;w=((aa(_|0)|0)^31)+-1|0;A=_>>>w&1;v=((w<<1)+65534|A)+16|0;w=w<<24|_-((A|2)<>>24>>>0)+ +g[r+2816+((v&65535)<<2)>>2];if(o>>>0>>0){_=n|B>>>0>P>>>0;m=_?m:0;o=_?B:o}A=m<<24>>24==0;w=bc(e|0,z|0,37)|0;w=w+1|0;n=o>>>0>w>>>0;z=o;while(1){if(z>>>0>B>>>0)break;if(!A){m=c[L>>2]&31;if(!m)m=(c[M>>2]|0)>>>5}else m=z;do if(m>>>0>=10){if(m>>>0<134){_=m+-6|0;v=((aa(_|0)|0)^31)+-1|0;v=(v<<1)+(_>>>v)+4|0;break}if(m>>>0<2118)v=((aa(m+-70|0)|0)^31)+12|0;else v=23}else v=m+65534|0;while(0);_=v&65535;u=x+ +((c[17460+(_<<2)>>2]|0)>>>0)+ +g[r+(((b[88156+((_>>>3)+G<<1)>>1]|(v&7|F)&65535)&65535)<<2)>>2];v=z+h|0;if(u<+g[t+(v<<4)+12>>2]){c[t+(v<<4)>>2]=z|z+9-m<<24;c[t+(v<<4)+4>>2]=e;c[t+(v<<4)+8>>2]=D;g[t+(v<<4)+12>>2]=u}z=z+1|0}o=n?o:w;C=C+1|0}}while(0);N=N+1|0}if((f|0)==82){i=Z;return}}function Ha(b,e,f,h,i,j,k,l,m,n,o,p,q){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;M=(1<>2])+-16|0;Ua(b,l,k,f,e,h);a:do if(e>>>0>2&f>>>0>127){L=f+-127|0;K=L+e|0;K=K>>>0>f>>>0?f:K;J=l+524292|0;I=l+524296|0;b:while(1){if(L>>>0>=K>>>0)break a;t=c[l>>2]|0;E=f-L|0;E=t-(E>>>0<15?15:E)|0;F=L&j;G=i+F|0;C=l+4+((_(d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24,506832829)|0)>>>15<<2)|0;B=c[C>>2]|0;t=(L&t)<<1;c[C>>2]=L;C=0;u=0;D=0;r=t;t=t|1;H=64;while(1){A=B&j;if((L|0)==(B|0)|(L-B|0)>>>0>E>>>0|(H|0)==0){h=6;break}z=u>>>0>>0?u:D;if(z>>>0>=129){h=8;break b}x=F+z|0;y=i+(A+128)|0;v=i+(A+124)|0;w=0;h=i+(A+z)|0;while(1){if(h>>>0>v>>>0)break;N=i+(x+w)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24|0))break;w=w+4|0;h=h+4|0}while(1){if(h>>>0>=y>>>0)break;if((a[i+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}z=z+w|0;c:do if(z){h=z;x=G;y=i+A|0;while(1){v=a[x>>0]|0;w=a[y>>0]|0;if(v<<24>>24!=w<<24>>24)break;h=h+-1|0;if(!h)break c;else{x=x+1|0;y=y+1|0}}if(v<<24>>24!=w<<24>>24){h=21;break b}}while(0);if(C){h=23;break b}if(z>>>0>=128){h=25;break}h=c[J>>2]|0;if((d[i+(F+z)>>0]|0)>(d[i+(A+z)>>0]|0)){c[h+(r<<2)>>2]=B;v=(B&c[l>>2])<<1|1;u=z;h=D;r=v;v=(c[J>>2]|0)+(v<<2)|0}else{c[h+(t<<2)>>2]=B;v=(B&c[l>>2])<<1;h=z;t=v;v=(c[J>>2]|0)+(v<<2)|0}C=0;D=h;B=c[v>>2]|0;H=H+-1|0}if((h|0)==6){c[(c[J>>2]|0)+(r<<2)>>2]=c[I>>2];c[(c[J>>2]|0)+(t<<2)>>2]=c[I>>2]}else if((h|0)==25){N=c[J>>2]|0;c[N+(r<<2)>>2]=c[N+((B&c[l>>2])<<1<<2)>>2];N=c[J>>2]|0;c[N+(t<<2)>>2]=c[N+(((B&c[l>>2])<<1|1)<<2)>>2]}L=L+1|0}if((h|0)==8)pa(405873,405905,373,405932);else if((h|0)==21)pa(405955,405905,378,405932);else if((h|0)==23)na()}while(0);h=b+8|0;r=sa[c[b>>2]&1](c[h>>2]|0,(e<<4)+16|0)|0;if(!r)oa(1);t=e+1|0;u=0;while(1){if((u|0)==(t|0))break;c[r+(u<<4)>>2]=1;c[r+(u<<4)+4>>2]=0;c[r+(u<<4)+8>>2]=0;g[r+(u<<4)+12>>2]=s;u=u+1|0}N=Ea(b,e,f,i,j,k,M,m,l,r)|0;c[p>>2]=(c[p>>2]|0)+N;Da(e,f,M,r,m,n,o,q);ra[c[b+4>>2]&1](c[h>>2]|0,r);return}function Ia(e,f,h,j,l,m,n,o,p,q,r,t,u){e=e|0;f=f|0;h=h|0;j=j|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;t=t|0;u=u|0;var v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,qa=0,ta=0,ua=0,va=0,wa=0,xa=0.0;va=i;i=i+12256|0;fa=va+12028|0;ea=va+12024|0;qa=va+11e3|0;la=va+8184|0;ma=va+6104|0;ka=va+5080|0;aa=va+4928|0;ua=va+4912|0;ta=va;ga=(1<>2])+-16|0;da=f<<2;ia=e+8|0;ja=sa[c[e>>2]&1](c[ia>>2]|0,da)|0;if(!ja)oa(1);$=f>>>0>127?h+f+-127|0:h;ca=sa[c[e>>2]&1](c[ia>>2]|0,f<<5)|0;Q=ca;if(!ca)oa(1);Ua(e,o,n,h,f,j);a:do if(f>>>0>2&h>>>0>127){P=h+-127|0;O=P+f|0;O=O>>>0>h>>>0?h:O;M=o+524292|0;N=o+524296|0;b:while(1){if(P>>>0>=O>>>0)break a;w=c[o>>2]|0;I=h-P|0;I=w-(I>>>0<15?15:I)|0;J=P&m;K=l+J|0;G=o+4+((_(d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24,506832829)|0)>>>15<<2)|0;F=c[G>>2]|0;w=(P&w)<<1;c[G>>2]=P;G=0;x=0;H=0;v=w;w=w|1;L=64;while(1){E=F&m;if((P|0)==(F|0)|(P-F|0)>>>0>I>>>0|(L|0)==0){x=11;break}D=x>>>0>>0?x:H;if(D>>>0>=129){x=13;break b}B=J+D|0;C=l+(E+128)|0;z=l+(E+124)|0;A=0;j=l+(E+D)|0;while(1){if(j>>>0>z>>>0)break;ca=l+(B+A)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0))break;A=A+4|0;j=j+4|0}while(1){if(j>>>0>=C>>>0)break;if((a[l+(B+A)>>0]|0)!=(a[j>>0]|0))break;A=A+1|0;j=j+1|0}D=D+A|0;c:do if(D){j=D;B=K;C=l+E|0;while(1){z=a[B>>0]|0;A=a[C>>0]|0;if(z<<24>>24!=A<<24>>24)break;j=j+-1|0;if(!j)break c;else{B=B+1|0;C=C+1|0}}if(z<<24>>24!=A<<24>>24){x=26;break b}}while(0);if(G){x=28;break b}if(D>>>0>=128){x=30;break}j=c[M>>2]|0;if((d[l+(J+D)>>0]|0)>(d[l+(E+D)>>0]|0)){c[j+(v<<2)>>2]=F;z=(F&c[o>>2])<<1|1;x=D;j=H;v=z;z=(c[M>>2]|0)+(z<<2)|0}else{c[j+(w<<2)>>2]=F;z=(F&c[o>>2])<<1;j=D;w=z;z=(c[M>>2]|0)+(z<<2)|0}G=0;H=j;F=c[z>>2]|0;L=L+-1|0}if((x|0)==11){c[(c[M>>2]|0)+(v<<2)>>2]=c[N>>2];c[(c[M>>2]|0)+(w<<2)>>2]=c[N>>2]}else if((x|0)==30){ca=c[M>>2]|0;c[ca+(v<<2)>>2]=c[ca+((F&c[o>>2])<<1<<2)>>2];ca=c[M>>2]|0;c[ca+(w<<2)>>2]=c[ca+(((F&c[o>>2])<<1|1)<<2)>>2]}P=P+1|0}if((x|0)==13)pa(405873,405905,373,405932);else if((x|0)==26)pa(405955,405905,378,405932);else if((x|0)==28)na()}while(0);ba=e+4|0;ca=n+4|0;Y=o+524292|0;Z=o+524296|0;W=0;A=da;v=0;d:while(1){if((v+3|0)>>>0>=f>>>0){x=142;break}V=v+h|0;U=V>>>0>>0?V:ga;R=f-v|0;j=W+128|0;if(A>>>0>>0){x=(A|0)==0;z=x?j:A;while(1){if(z>>>0>=j>>>0)break;z=z<<1}w=sa[c[e>>2]&1](c[ia>>2]|0,z<<3)|0;if(!w){x=42;break}j=Q;if(!x)dc(w|0,j|0,A<<3|0)|0;ra[c[ba>>2]&1](c[ia>>2]|0,j);X=z}else{w=Q;X=A}S=w;T=S+(W<<3)|0;P=V&m;E=(c[ca>>2]|0)!=11?16:64;E=V>>>0>>0?0:V-E|0;Q=l+P|0;F=l+(P+1)|0;H=P+R|0;G=l+H|0;H=l+(H+-4)|0;j=T;z=1;x=V;while(1){x=x+-1|0;if(!(x>>>0>E>>>0&z>>>0<3))break;C=V-x|0;if(C>>>0>U>>>0)break;D=x&m;if((a[Q>>0]|0)!=(a[l+D>>0]|0)){N=z;O=j;z=N;j=O;continue}if((a[F>>0]|0)==(a[l+(D+1)>>0]|0)){A=0;B=Q}else{N=z;O=j;z=N;j=O;continue}while(1){if(B>>>0>H>>>0)break;O=l+(D+A)|0;if((d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24|0)!=(d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24|0))break;A=A+4|0;B=B+4|0}while(1){if(B>>>0>=G>>>0)break;if((a[l+(D+A)>>0]|0)!=(a[B>>0]|0))break;A=A+1|0;B=B+1|0}if(A>>>0<=z>>>0){N=z;O=j;z=N;j=O;continue}z=j;c[z>>2]=C;c[z+4>>2]=A<<5;j=z+8|0;z=A}do if(z>>>0>>0){N=R>>>0<128?R:128;O=R>>>0>127;x=o+4+((_(d[Q>>0]|d[Q+1>>0]<<8|d[Q+2>>0]<<16|d[Q+3>>0]<<24,506832829)|0)>>>15<<2)|0;C=c[x>>2]|0;A=(V&c[o>>2])<<1;B=A|1;if(O){c[x>>2]=V;L=0;M=0;K=64}else{L=0;M=0;K=64}while(1){I=V-C|0;J=C&m;if((V|0)==(C|0)|I>>>0>U>>>0|(K|0)==0){x=63;break}H=L>>>0>>0?L:M;if(H>>>0>=129){x=66;break d}F=P+H|0;D=J+R|0;G=l+D|0;D=l+(D+-4)|0;E=0;x=l+(J+H)|0;while(1){if(x>>>0>D>>>0)break;wa=l+(F+E)|0;if((d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24|0)!=(d[wa>>0]|d[wa+1>>0]<<8|d[wa+2>>0]<<16|d[wa+3>>0]<<24|0))break;E=E+4|0;x=x+4|0}while(1){if(x>>>0>=G>>>0)break;if((a[l+(F+E)>>0]|0)!=(a[x>>0]|0))break;E=E+1|0;x=x+1|0}H=H+E|0;e:do if(H){x=H;F=Q;G=l+J|0;while(1){D=a[F>>0]|0;E=a[G>>0]|0;if(D<<24>>24!=E<<24>>24)break;x=x+-1|0;if(!x)break e;else{F=F+1|0;G=G+1|0}}if(D<<24>>24!=E<<24>>24){x=79;break d}}while(0);x=j;if((j|0)!=0&H>>>0>z>>>0){c[x>>2]=I;c[x+4>>2]=H<<5;j=x+8|0;z=H}if(H>>>0>=N>>>0){x=83;break}if((d[l+(P+H)>>0]|0)>(d[l+(J+H)>>0]|0)){if(O)c[(c[Y>>2]|0)+(A<<2)>>2]=C;D=(C&c[o>>2])<<1|1;C=H;x=M;A=D;D=(c[Y>>2]|0)+(D<<2)|0}else{if(O)c[(c[Y>>2]|0)+(B<<2)>>2]=C;D=(C&c[o>>2])<<1;C=L;x=H;B=D;D=(c[Y>>2]|0)+(D<<2)|0}L=C;M=x;C=c[D>>2]|0;K=K+-1|0}if((x|0)==63){if(!O)break;c[(c[Y>>2]|0)+(A<<2)>>2]=c[Z>>2];c[(c[Y>>2]|0)+(B<<2)>>2]=c[Z>>2];break}else if((x|0)==83){if(!O)break;wa=c[Y>>2]|0;c[wa+(A<<2)>>2]=c[wa+((C&c[o>>2])<<1<<2)>>2];wa=c[Y>>2]|0;c[wa+(B<<2)>>2]=c[wa+(((C&c[o>>2])<<1|1)<<2)>>2];break}}while(0);x=0;while(1){if((x|0)==38)break;c[aa+(x<<2)>>2]=268435455;x=x+1|0}z=z+1|0;z=z>>>0<4?4:z;f:do if(Vb(Q,z,R,aa)|0){A=R>>>0>37?37:R;while(1){if(z>>>0>A>>>0)break f;x=c[aa+(z<<2)>>2]|0;if(x>>>0<268435455){wa=x&31;c[j>>2]=U+(x>>>5)+1;c[j+4>>2]=z<<5|((z|0)==(wa|0)?0:wa);j=j+8|0}z=z+1|0}}while(0);A=j-T>>3;j=W+A|0;z=W;while(1){x=z;z=z+1|0;if(z>>>0>=j>>>0)break;if((c[S+(x<<3)+4>>2]|0)>>>5>>>0>=(c[S+(z<<3)+4>>2]|0)>>>5>>>0){x=105;break d}x=c[S+(x<<3)>>2]|0;if(x>>>0>U>>>0)continue;if(x>>>0>(c[S+(z<<3)>>2]|0)>>>0){x=108;break d}}B=ja+(v<<2)|0;c[B>>2]=A;if(A){x=j+-1|0;wa=c[S+(x<<3)+4>>2]|0;z=wa>>>5;if(wa>>>0>10431){R=z+-1|0;j=W+1|0;wa=S+(x<<3)|0;P=c[wa+4>>2]|0;Q=T;c[Q>>2]=c[wa>>2];c[Q+4>>2]=P;c[B>>2]=1;Q=V+z|0;Q=Q>>>0<$>>>0?Q:$;P=(V+64|0)>>>0>Q>>>0?V+1|0:Q+-63|0;while(1){if(P>>>0>=Q>>>0)break;A=c[o>>2]|0;L=A+-15|0;M=P&m;N=l+M|0;J=o+4+((_(d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24,506832829)|0)>>>15<<2)|0;I=c[J>>2]|0;A=(P&A)<<1;c[J>>2]=P;J=0;B=0;K=0;z=A;A=A|1;O=64;while(1){H=I&m;if((P|0)==(I|0)|(P-I|0)>>>0>L>>>0|(O|0)==0){x=115;break}G=B>>>0>>0?B:K;if(G>>>0>=129){x=117;break d}E=M+G|0;F=l+(H+128)|0;C=l+(H+124)|0;D=0;x=l+(H+G)|0;while(1){if(x>>>0>C>>>0)break;wa=l+(E+D)|0;if((d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24|0)!=(d[wa>>0]|d[wa+1>>0]<<8|d[wa+2>>0]<<16|d[wa+3>>0]<<24|0))break;D=D+4|0;x=x+4|0}while(1){if(x>>>0>=F>>>0)break;if((a[l+(E+D)>>0]|0)!=(a[x>>0]|0))break;D=D+1|0;x=x+1|0}G=G+D|0;g:do if(G){x=G;E=N;F=l+H|0;while(1){C=a[E>>0]|0;D=a[F>>0]|0;if(C<<24>>24!=D<<24>>24)break;x=x+-1|0;if(!x)break g;else{E=E+1|0;F=F+1|0}}if(C<<24>>24!=D<<24>>24){x=130;break d}}while(0);if(J){x=132;break d}if(G>>>0>=128){x=134;break}x=c[Y>>2]|0;if((d[l+(M+G)>>0]|0)>(d[l+(H+G)>>0]|0)){c[x+(z<<2)>>2]=I;C=(I&c[o>>2])<<1|1;B=G;x=K;z=C;C=(c[Y>>2]|0)+(C<<2)|0}else{c[x+(A<<2)>>2]=I;C=(I&c[o>>2])<<1;x=G;A=C;C=(c[Y>>2]|0)+(C<<2)|0}J=0;K=x;I=c[C>>2]|0;O=O+-1|0}if((x|0)==115){c[(c[Y>>2]|0)+(z<<2)>>2]=c[Z>>2];c[(c[Y>>2]|0)+(A<<2)>>2]=c[Z>>2]}else if((x|0)==134){wa=c[Y>>2]|0;c[wa+(z<<2)>>2]=c[wa+((I&c[o>>2])<<1<<2)>>2];wa=c[Y>>2]|0;c[wa+(A<<2)>>2]=c[wa+(((I&c[o>>2])<<1|1)<<2)>>2]}P=P+1|0}ac(ja+(v+1<<2)|0,0,R<<2|0)|0;v=v+R|0}}else j=W;W=j;Q=w;A=X;v=v+1|0}if((x|0)==42)oa(1);else if((x|0)==66)pa(405873,405905,373,405932);else if((x|0)==79)pa(405955,405905,378,405932);else if((x|0)==105)pa(403595,403667,793,403707);else if((x|0)==108)pa(403740,403667,795,403707);else if((x|0)==117)pa(405873,405905,373,405932);else if((x|0)==130)pa(405955,405905,378,405932);else if((x|0)==132)na();else if((x|0)==142){K=c[u>>2]|0;L=c[q>>2]|0;c[ua>>2]=c[p>>2];c[ua+4>>2]=c[p+4>>2];c[ua+8>>2]=c[p+8>>2];c[ua+12>>2]=c[p+12>>2];M=c[t>>2]|0;N=sa[c[e>>2]&1](c[ia>>2]|0,(f<<4)+16|0)|0;if(!N)oa(1);O=ta+4904|0;c[O>>2]=f;j=sa[c[e>>2]&1](c[ia>>2]|0,da+8|0)|0;if(!j)oa(1);J=ta+4896|0;c[J>>2]=j;B=N+12|0;C=fa+224|0;D=Q;E=h-L|0;F=ta+2816|0;G=ta+4900|0;H=f+1|0;I=0;while(1){if((I|0)==2)break;else j=0;while(1){if((j|0)==(H|0))break;c[N+(j<<4)>>2]=1;c[N+(j<<4)+4>>2]=0;c[N+(j<<4)+8>>2]=0;g[N+(j<<4)+12>>2]=s;j=j+1|0}if(!I)Fa(ta,h,l,m);else{v=c[t>>2]|0;ac(qa|0,0,1024)|0;ac(la|0,0,2816)|0;ac(ma|0,0,2080)|0;v=v-M|0;z=E;A=0;while(1){if((A|0)==(v|0))break;w=c[r+(A<<4)>>2]|0;x=c[r+(A<<4)+4>>2]&16777215;j=b[r+(A<<4)+14>>1]|0;wa=b[r+(A<<4)+12>>1]|0;e=la+((wa&65535)<<2)|0;c[e>>2]=(c[e>>2]|0)+1;if((wa&65535)>127){j=ma+((j&65535)<<2)|0;c[j>>2]=(c[j>>2]|0)+1;j=0}else j=0;while(1){if((j|0)==(w|0))break;wa=qa+(d[l+(z+j&m)>>0]<<2)|0;c[wa>>2]=(c[wa>>2]|0)+1;j=j+1|0}z=z+(w+x)|0;A=A+1|0}Va(qa,256,ka);Va(la,704,ta);Va(ma,520,F);j=2139095040;v=0;while(1){if((v|0)==704)break;wa=c[ta+(v<<2)>>2]|0;c[fa>>2]=j;c[ea>>2]=wa;y=(c[k>>2]=j,+g[k>>2]);j=c[(y<(c[k>>2]=wa,+g[k>>2])?fa:ea)>>2]|0;v=v+1|0}c[G>>2]=j;v=c[O>>2]|0;j=c[J>>2]|0;g[j>>2]=0.0;y=0.0;w=0;while(1){if((w|0)==(v|0))break;xa=y+ +g[ka+(d[l+(w+h&m)>>0]<<2)>>2];wa=w+1|0;g[j+(wa<<2)>>2]=xa;y=xa;w=wa}}c[t>>2]=M;c[u>>2]=K;c[q>>2]=L;c[p>>2]=c[ua>>2];c[p+4>>2]=c[ua+4>>2];c[p+8>>2]=c[ua+8>>2];c[p+12>>2]=c[ua+12>>2];w=(c[ca>>2]|0)<11?150:325;c[N>>2]=0;g[B>>2]=0.0;c[C>>2]=0;j=0;v=0;while(1){if((v+3|0)>>>0>=f>>>0){j=f;break}wa=ja+(v<<2)|0;Ga(f,h,v,l,m,n,ga,p,c[wa>>2]|0,D+(j<<3)|0,ta,fa,N);wa=c[wa>>2]|0;j=j+wa|0;if((wa|0)==1?(ha=(c[D+(j+-1<<3)+4>>2]|0)>>>5,ha>>>0>w>>>0):0){c[C>>2]=0;v=v+(ha+-1)|0}v=v+1|0}while(1){if(c[N+(j<<4)+8>>2]|0)break;if((c[N+(j<<4)>>2]|0)!=1)break;j=j+-1|0}c[N+(j<<4)+12>>2]=-1;v=0;while(1){if(!j)break;e=(c[N+(j<<4)>>2]&16777215)+(c[N+(j<<4)+8>>2]|0)|0;wa=j-e|0;c[N+(wa<<4)+12>>2]=e;j=wa;v=v+1|0}c[t>>2]=(c[t>>2]|0)+v;Da(f,h,ga,N,p,q,r,u);I=I+1|0}ra[c[ba>>2]&1](c[ia>>2]|0,c[J>>2]|0);c[J>>2]=0;ra[c[ba>>2]&1](c[ia>>2]|0,N);ra[c[ba>>2]&1](c[ia>>2]|0,Q);ra[c[ba>>2]&1](c[ia>>2]|0,ja);i=va;return}}function Ja(e,f,g,h,j,k,l,m,n,o,p,q,r){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;ga=i;i=i+32|0;ea=ga+16|0;fa=ga;ca=(1<>2])+-16|0;t=c[o>>2]|0;da=g+f|0;ba=f>>>0>7?da+-7|0:g;$=l+4|0;Z=(c[$>>2]|0)<9?64:512;s=Z+g|0;if((((g|0)==0^1|h^1)^1)&f>>>0<2049){e=0;while(1){if((e|0)==(f|0))break;Y=j+e|0;X=Y;Y=Y+4|0;Y=lc(d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24|0,d[Y>>0]|d[Y+1>>0]<<8|d[Y+2>>0]<<16|d[Y+3>>0]<<24|0,-1124073472,1979815)|0;Y=bc(Y|0,C|0,48)|0;c[m+(Y<<2)>>2]=0;e=e+1|0}if(f){a[m+262148>>0]=0;ta=8}}else if(!(a[m+262148>>0]&1))ta=8;else{ac(m|0,0,262149)|0;ta=8}if((ta|0)==8?f>>>0>6&g>>>0>2:0){X=g+-3|0;Y=j+(X&k)|0;W=Y;Y=Y+4|0;Y=lc(d[W>>0]|d[W+1>>0]<<8|d[W+2>>0]<<16|d[W+3>>0]<<24|0,d[Y>>0]|d[Y+1>>0]<<8|d[Y+2>>0]<<16|d[Y+3>>0]<<24|0,-1124073472,1979815)|0;Y=bc(Y|0,C|0,48)|0;c[m+(Y<<2)>>2]=X;Y=g+-2|0;X=j+(Y&k)|0;W=X;X=X+4|0;X=lc(d[W>>0]|d[W+1>>0]<<8|d[W+2>>0]<<16|d[W+3>>0]<<24|0,d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24|0,-1124073472,1979815)|0;X=bc(X|0,C|0,48)|0;c[m+(X<<2)>>2]=Y;X=g+-1|0;Y=j+(X&k)|0;W=Y;Y=Y+4|0;Y=lc(d[W>>0]|d[W+1>>0]<<8|d[W+2>>0]<<16|d[W+3>>0]<<24|0,d[Y>>0]|d[Y+1>>0]<<8|d[Y+2>>0]<<16|d[Y+3>>0]<<24|0,-1124073472,1979815)|0;Y=bc(Y|0,C|0,48)|0;c[m+(Y<<2)>>2]=X}G=ea+4|0;H=ea+8|0;I=ea+12|0;J=ea+4|0;K=m+262156|0;L=m+262152|0;M=ea+12|0;N=ea+8|0;O=Z<<2;P=da+-7|0;Q=fa+4|0;R=fa+8|0;S=fa+12|0;T=fa+4|0;U=fa+8|0;V=fa+12|0;W=n+8|0;X=n+12|0;Y=n+4|0;l=g;F=p;e=t;a:while(1){B=F;E=s+O|0;b:while(1){D=da-l|0;if((l+8|0)>>>0>=da>>>0)break a;z=l>>>0>>0?l:ca;c[ea>>2]=0;c[G>>2]=0;c[H>>2]=0;c[I>>2]=4240;A=l&k;x=j+A|0;u=x;w=u;w=d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24;u=u+4|0;u=lc(w|0,d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24|0,-1124073472,1979815)|0;u=bc(u|0,C|0,48)|0;v=c[n>>2]|0;h=l-v|0;c[J>>2]=0;if(h>>>0>>0?(ha=h&k,(a[j+ha>>0]|0)==(w&255)<<24>>24):0){f=A+D|0;t=j+f|0;f=j+(f+-4)|0;g=0;h=x;while(1){if(h>>>0>f>>>0)break;y=j+(ha+g)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24|0))break;g=g+4|0;h=h+4|0}while(1){if(h>>>0>=t>>>0)break;if((a[j+(ha+g)>>0]|0)!=(a[h>>0]|0))break;g=g+1|0;h=h+1|0}if(g>>>0>3){ta=22;break}}y=m+(u<<2)|0;t=c[y>>2]|0;c[y>>2]=l;u=l-t|0;v=t&k;if(!(((l|0)==(t|0)?1:(a[j+v>>0]|0)!=(w&255)<<24>>24)|u>>>0>z>>>0)){f=A+D|0;t=j+f|0;f=j+(f+-4)|0;g=0;h=x;while(1){if(h>>>0>f>>>0)break;w=j+(v+g)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24|0))break;g=g+4|0;h=h+4|0}while(1){if(h>>>0>=t>>>0)break;if((a[j+(v+g)>>0]|0)!=(a[h>>0]|0))break;g=g+1|0;h=h+1|0}if(g>>>0>3){ta=32;break}if((c[K>>2]|0)>>>0<(c[L>>2]|0)>>>7>>>0)h=0;else{w=0;h=0;v=(_(d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((w|0)==1)break;x=b[21084+(v<<1)>>1]|0;f=x&65535;c[L>>2]=(c[L>>2]|0)+1;if(x<<16>>16!=0?(ia=f&31,ja=f>>>5,ka=(c[11272+(ia<<2)>>2]|0)+(_(ia,ja)|0)|0,ia>>>0<=D>>>0):0){g=ka+ia|0;u=280811+g|0;g=280811+(g+-4)|0;t=0;f=280811+ka|0;while(1){if(f>>>0>g>>>0)break;x=j+(A+t)|0;if((d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24|0)!=(d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24|0))break;t=t+4|0;f=f+4|0}while(1){if(f>>>0>=u>>>0)break;if((a[j+(A+t)>>0]|0)!=(a[f>>0]|0))break;t=t+1|0;f=f+1|0}if(!((t+10|0)>>>0<=ia>>>0|(t|0)==0)?(la=z+ja+1+(d[407930+(ia-t)>>0]<>0])|0,ma=(t*540|0)+3840+(_((aa(la|0)|0)^31,-120)|0)|0,ma>>>0>=(c[M>>2]|0)>>>0):0){c[ea>>2]=t;c[J>>2]=ia^t;c[N>>2]=la;c[M>>2]=ma;c[K>>2]=(c[K>>2]|0)+1;h=1}}w=w+1|0;v=v+1|0}h=(h&1)!=0}c[y>>2]=l;if(h&1){E=0;break}}e=e+1|0;f=l+1|0;if(f>>>0<=s>>>0){l=f;continue}if(f>>>0>E>>>0){h=l+17|0;h=h>>>0

>>0?h:P;l=f;while(1){if(l>>>0>=h>>>0)continue b;D=j+(l&k)|0;A=D;D=D+4|0;D=lc(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0,d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0,-1124073472,1979815)|0;D=bc(D|0,C|0,48)|0;c[m+(D<<2)>>2]=l;l=l+4|0;e=e+4|0}}else{h=l+9|0;h=h>>>0

>>0?h:P;l=f;while(1){if(l>>>0>=h>>>0)continue b;D=j+(l&k)|0;A=D;D=D+4|0;D=lc(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0,d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0,-1124073472,1979815)|0;D=bc(D|0,C|0,48)|0;c[m+(D<<2)>>2]=l;l=l+2|0;e=e+2|0}}}if((ta|0)==22){ta=0;c[ea>>2]=g;c[N>>2]=v;c[M>>2]=(g*540|0)+3900;c[m+(u<<2)>>2]=l;E=0}else if((ta|0)==32){ta=0;c[ea>>2]=g;c[N>>2]=u;c[M>>2]=(g*540|0)+3840+(_((aa(u|0)|0)^31,-120)|0);E=0}c:while(1){D=D+-1|0;if((c[$>>2]|0)<5){v=(c[ea>>2]|0)+-1|0;v=v>>>0>>0?v:D}else v=0;c[fa>>2]=v;c[Q>>2]=0;c[R>>2]=0;c[S>>2]=4240;x=l+1|0;A=x>>>0>>0?x:ca;B=x&k;y=j+B|0;t=y;w=t;t=t+4|0;t=lc(d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24|0,d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0,-1124073472,1979815)|0;t=bc(t|0,C|0,48)|0;w=a[j+(B+v)>>0]|0;u=c[n>>2]|0;h=x-u|0;c[T>>2]=0;if(h>>>0>>0?(na=h&k,w<<24>>24==(a[j+(na+v)>>0]|0)):0){f=B+D|0;g=j+f|0;f=j+(f+-4)|0;s=0;h=y;while(1){if(h>>>0>f>>>0)break;z=j+(na+s)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[z>>0]|d[z+1>>0]<<8|d[z+2>>0]<<16|d[z+3>>0]<<24|0))break;s=s+4|0;h=h+4|0}while(1){if(h>>>0>=g>>>0)break;if((a[j+(na+s)>>0]|0)!=(a[h>>0]|0))break;s=s+1|0;h=h+1|0}if(s>>>0>3){c[fa>>2]=s;c[U>>2]=u;c[V>>2]=(s*540|0)+3900;c[m+(t<<2)>>2]=x}else ta=64}else ta=64;do if((ta|0)==64){ta=0;z=m+(t<<2)|0;g=c[z>>2]|0;c[z>>2]=x;t=x-g|0;u=g&k;if(((x|0)==(g|0)?1:w<<24>>24!=(a[j+(u+v)>>0]|0))|t>>>0>A>>>0){x=l;w=e;break c}f=B+D|0;g=j+f|0;f=j+(f+-4)|0;s=0;h=y;while(1){if(h>>>0>f>>>0)break;w=j+(u+s)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[w>>0]|d[w+1>>0]<<8|d[w+2>>0]<<16|d[w+3>>0]<<24|0))break;s=s+4|0;h=h+4|0}while(1){if(h>>>0>=g>>>0)break;if((a[j+(u+s)>>0]|0)!=(a[h>>0]|0))break;s=s+1|0;h=h+1|0}if(s>>>0>3){c[fa>>2]=s;c[U>>2]=t;c[V>>2]=(s*540|0)+3840+(_((aa(t|0)|0)^31,-120)|0);break}if((c[K>>2]|0)>>>0<(c[L>>2]|0)>>>7>>>0)h=0;else{v=0;h=0;u=(_(d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==1)break;y=b[21084+(u<<1)>>1]|0;f=y&65535;c[L>>2]=(c[L>>2]|0)+1;if(y<<16>>16!=0?(oa=f&31,pa=f>>>5,qa=(c[11272+(oa<<2)>>2]|0)+(_(oa,pa)|0)|0,oa>>>0<=D>>>0):0){s=qa+oa|0;t=280811+s|0;s=280811+(s+-4)|0;g=0;f=280811+qa|0;while(1){if(f>>>0>s>>>0)break;y=j+(B+g)|0;if((d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24|0)!=(d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24|0))break;g=g+4|0;f=f+4|0}while(1){if(f>>>0>=t>>>0)break;if((a[j+(B+g)>>0]|0)!=(a[f>>0]|0))break;g=g+1|0;f=f+1|0}if(!((g+10|0)>>>0<=oa>>>0|(g|0)==0)?(ra=A+pa+1+(d[407930+(oa-g)>>0]<>0])|0,sa=(g*540|0)+3840+(_((aa(ra|0)|0)^31,-120)|0)|0,sa>>>0>=(c[V>>2]|0)>>>0):0){c[fa>>2]=g;c[T>>2]=oa^g;c[U>>2]=ra;c[V>>2]=sa;c[K>>2]=(c[K>>2]|0)+1;h=1}}v=v+1|0;u=u+1|0}h=(h&1)!=0}c[z>>2]=x;if(!(h&1)){x=l;w=e;break c}}while(0);if((c[S>>2]|0)>>>0<((c[I>>2]|0)+700|0)>>>0){x=l;w=e;break}e=e+1|0;c[ea>>2]=c[fa>>2];c[ea+4>>2]=c[fa+4>>2];c[ea+8>>2]=c[fa+8>>2];c[ea+12>>2]=c[fa+12>>2];E=E+1|0;if(!((E|0)<4&(l+9|0)>>>0>>0)){w=e;break}else l=x}l=c[ea>>2]|0;s=x+(l<<1)+Z|0;e=c[H>>2]|0;d:do if(e>>>0<=(x>>>0>>0?x:ca)>>>0){g=e+3|0;E=c[n>>2]|0;h=g-E|0;f=c[Y>>2]|0;g=g-f|0;if((e|0)==(E|0))e=0;else{e:do if((e|0)!=(f|0)){do if(h>>>0<7)e=158663784>>>(h<<2)&15;else{if(g>>>0<7){e=266017486>>>(g<<2)&15;break}if((e|0)==(c[W>>2]|0)){e=2;break e}if((e|0)==(c[X>>2]|0)){e=3;break e}e=e+15|0}while(0);if(!e)break d}else e=1;while(0);c[X>>2]=c[W>>2];c[W>>2]=c[Y>>2];c[Y>>2]=c[n>>2];c[n>>2]=c[H>>2];l=c[ea>>2]|0}}else e=e+15|0;while(0);v=F+16|0;E=c[G>>2]|0;h=l^E;c[F>>2]=w;c[F+4>>2]=l|E<<24;l=F+14|0;if(e>>>0<16){e=e&65535;b[l>>1]=e;l=0}else{B=e+-12|0;E=((aa(B|0)|0)^31)+-1|0;D=B>>>E&1;e=((E<<1)+65534|D)+16&65535;b[l>>1]=e;l=E<<24|B-((D|2)<>2]=l;t=e<<16>>16==0;u=F+12|0;do if(w>>>0>=6){if(w>>>0<130){F=w+-2|0;g=((aa(F|0)|0)^31)+-1|0;g=(g<<1)+(F>>>g)+2&65535;break}if(w>>>0<2114){g=((aa(w+-66|0)|0)^31)+10&65535;break}if(w>>>0<6210)g=21;else g=w>>>0<22594?22:23}else g=w&65535;while(0);do if(h>>>0>=10){if(h>>>0<134){F=h+-6|0;e=((aa(F|0)|0)^31)+-1|0;e=(e<<1)+(F>>>e)+4&65535;break}if(h>>>0<2118)e=((aa(h+-70|0)|0)^31)+12&65535;else e=23}else e=h+65534&65535;while(0);l=e&65535;h=g&65535;f=l&7|h<<3&56;if(t&(g&65535)<8&(e&65535)<16)e=((e&65535)<8?f:f|64)&65535;else e=b[88156+((l>>>3)+((h>>>3)*3|0)<<1)>>1]|f&65535;b[u>>1]=e;c[r>>2]=(c[r>>2]|0)+w;e=x+(c[ea>>2]|0)|0;e=e>>>0>>0?e:ba;l=x+2|0;while(1){if(l>>>0>=e>>>0)break;F=j+(l&k)|0;E=F;F=F+4|0;F=lc(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0,d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24|0,-1124073472,1979815)|0;F=bc(F|0,C|0,48)|0;c[m+(F<<2)>>2]=l;l=l+1|0}l=x+(c[ea>>2]|0)|0;F=v;e=0}c[o>>2]=e+D;c[q>>2]=(c[q>>2]|0)+(B-p>>4);i=ga;return}function Ka(e,f,g,h,i,j,k,l,m,n,o,p,q){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0;X=(1<>2])+-16|0;s=c[n>>2]|0;Y=g+f|0;W=f>>>0>7?Y+-7|0:g;V=k+4|0;U=(c[V>>2]|0)<9?64:512;k=U+g|0;if((((g|0)==0^1|h^1)^1)&f>>>0<2049){e=0;while(1){if((e|0)==(f|0))break;T=i+e|0;S=T;T=T+4|0;T=lc(d[S>>0]|d[S+1>>0]<<8|d[S+2>>0]<<16|d[S+3>>0]<<24|0,d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24|0,-1124073472,1979815)|0;T=bc(T|0,C|0,48)|0;T=l+(T<<2)|0;c[T>>2]=0;c[T+4>>2]=0;e=e+1|0}if(f){a[l+262152>>0]=0;r=8}}else if(!(a[l+262152>>0]&1))r=8;else{ac(l|0,0,262153)|0;r=8}if((r|0)==8?f>>>0>6&g>>>0>2:0){T=g+-3|0;S=i+(T&j)|0;R=S;S=S+4|0;S=lc(d[R>>0]|d[R+1>>0]<<8|d[R+2>>0]<<16|d[R+3>>0]<<24|0,d[S>>0]|d[S+1>>0]<<8|d[S+2>>0]<<16|d[S+3>>0]<<24|0,-1124073472,1979815)|0;S=bc(S|0,C|0,48)|0;c[l+(S+(T>>>3&1)<<2)>>2]=T;T=g+-2|0;S=i+(T&j)|0;R=S;S=S+4|0;S=lc(d[R>>0]|d[R+1>>0]<<8|d[R+2>>0]<<16|d[R+3>>0]<<24|0,d[S>>0]|d[S+1>>0]<<8|d[S+2>>0]<<16|d[S+3>>0]<<24|0,-1124073472,1979815)|0;S=bc(S|0,C|0,48)|0;c[l+(S+(T>>>3&1)<<2)>>2]=T;T=g+-1|0;S=i+(T&j)|0;R=S;S=S+4|0;S=lc(d[R>>0]|d[R+1>>0]<<8|d[R+2>>0]<<16|d[R+3>>0]<<24|0,d[S>>0]|d[S+1>>0]<<8|d[S+2>>0]<<16|d[S+3>>0]<<24|0,-1124073472,1979815)|0;S=bc(S|0,C|0,48)|0;c[l+(S+(T>>>3&1)<<2)>>2]=T}P=U<<2;Q=Y+-7|0;R=m+8|0;S=m+12|0;T=m+4|0;h=g;O=o;v=k;e=s;a:while(1){J=O;K=v+P|0;b:while(1){M=Y-h|0;if((h+8|0)>>>0>=Y>>>0)break a;F=h>>>0>>0?h:X;G=h&j;H=i+G|0;I=H;k=I;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;I=I+4|0;I=lc(k|0,d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24|0,-1124073472,1979815)|0;I=bc(I|0,C|0,48)|0;t=k&255;f=c[m>>2]|0;r=h-f|0;if(r>>>0>>0?(Z=r&j,(a[i+Z>>0]|0)==(k&255)<<24>>24):0){r=G+M|0;s=i+r|0;r=i+(r+-4)|0;g=0;k=H;while(1){if(k>>>0>r>>>0)break;N=i+(Z+g)|0;if((d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0)!=(d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24|0))break;g=g+4|0;k=k+4|0}while(1){if(k>>>0>=s>>>0)break;if((a[i+(Z+g)>>0]|0)!=(a[k>>0]|0))break;g=g+1|0;k=k+1|0}if(g>>>0>3){t=d[i+(G+g)>>0]|0;k=1;s=g;g=(g*540|0)+3900|0}else{k=0;s=0;f=0;g=4240}}else{k=0;s=0;f=0;g=4240}D=G+M|0;B=i+D|0;D=i+(D+-4)|0;x=s;u=g;E=l+(I+1<<2)|0;y=0;r=l+(I<<2)|0;z=s;A=g;while(1){r=c[r>>2]|0;if((y|0)==2)break;w=h-r|0;s=r&j;if(!(((h|0)==(r|0)?1:(t|0)!=(d[i+(s+x)>>0]|0))|w>>>0>F>>>0)){r=0;g=H;while(1){if(g>>>0>D>>>0)break;N=i+(s+r)|0;if((d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24|0)!=(d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24|0))break;r=r+4|0;g=g+4|0}while(1){if(g>>>0>=B>>>0)break;if((a[i+(s+r)>>0]|0)!=(a[g>>0]|0))break;r=r+1|0;g=g+1|0}if(r>>>0>3?($=(r*540|0)+3840+(_((aa(w|0)|0)^31,-120)|0)|0,u>>>0<$>>>0):0){s=r;u=$;t=d[i+(G+r)>>0]|0;k=1;g=r;f=w;r=$}else{s=x;g=z;r=A}}else{s=x;g=z;r=A}N=E;x=s;E=E+4|0;y=y+1|0;z=g;A=r;r=N}c[l+(I+(h>>>3&1)<<2)>>2]=h;if(k&1){N=0;break}e=e+1|0;f=h+1|0;if(f>>>0<=v>>>0){h=f;continue}if(f>>>0>K>>>0){k=h+17|0;k=k>>>0>>0?k:Q;h=f;while(1){if(h>>>0>=k>>>0)continue b;N=i+(h&j)|0;M=N;N=N+4|0;N=lc(d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24|0,d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24|0,-1124073472,1979815)|0;N=bc(N|0,C|0,48)|0;c[l+(N+(h>>>3&1)<<2)>>2]=h;h=h+4|0;e=e+4|0}}else{k=h+9|0;k=k>>>0>>0?k:Q;h=f;while(1){if(h>>>0>=k>>>0)continue b;N=i+(h&j)|0;M=N;N=N+4|0;N=lc(d[M>>0]|d[M+1>>0]<<8|d[M+2>>0]<<16|d[M+3>>0]<<24|0,d[N>>0]|d[N+1>>0]<<8|d[N+2>>0]<<16|d[N+3>>0]<<24|0,-1124073472,1979815)|0;N=bc(N|0,C|0,48)|0;c[l+(N+(h>>>3&1)<<2)>>2]=h;h=h+2|0;e=e+2|0}}}while(1){M=M+-1|0;if((c[V>>2]|0)<5){u=z+-1|0;u=u>>>0>>0?u:M}else u=0;x=h+1|0;I=x>>>0>>0?x:X;J=x&j;K=i+J|0;L=K;k=L;L=L+4|0;L=lc(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0,d[L>>0]|d[L+1>>0]<<8|d[L+2>>0]<<16|d[L+3>>0]<<24|0,-1124073472,1979815)|0;L=bc(L|0,C|0,48)|0;k=a[i+(J+u)>>0]|0;t=k&255;v=c[m>>2]|0;r=x-v|0;if(r>>>0>>0?(ba=r&j,k<<24>>24==(a[i+(ba+u)>>0]|0)):0){r=J+M|0;s=i+r|0;r=i+(r+-4)|0;g=0;k=K;while(1){if(k>>>0>r>>>0)break;H=i+(ba+g)|0;if((d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0)!=(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24|0))break;g=g+4|0;k=k+4|0}while(1){if(k>>>0>=s>>>0)break;if((a[i+(ba+g)>>0]|0)!=(a[k>>0]|0))break;g=g+1|0;k=k+1|0}if(g>>>0>3){t=d[i+(J+g)>>0]|0;k=1;u=g;r=(g*540|0)+3900|0}else{k=0;r=4240;v=0}}else{k=0;r=4240;v=0}G=J+M|0;F=i+G|0;G=i+(G+-4)|0;B=u;D=r;H=l+(L+1<<2)|0;E=0;s=k;k=l+(L<<2)|0;y=r;while(1){k=c[k>>2]|0;if((E|0)==2)break;w=x-k|0;g=k&j;if(!(((x|0)==(k|0)?1:(t|0)!=(d[i+(g+B)>>0]|0))|w>>>0>I>>>0)){k=0;r=K;while(1){if(r>>>0>G>>>0)break;da=i+(g+k)|0;if((d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24|0)!=(d[da>>0]|d[da+1>>0]<<8|d[da+2>>0]<<16|d[da+3>>0]<<24|0))break;k=k+4|0;r=r+4|0}while(1){if(r>>>0>=F>>>0)break;if((a[i+(g+k)>>0]|0)!=(a[r>>0]|0))break;k=k+1|0;r=r+1|0}if(k>>>0>3?(ca=(k*540|0)+3840+(_((aa(w|0)|0)^31,-120)|0)|0,D>>>0>>0):0){r=k;g=ca;t=d[i+(J+k)>>0]|0;s=1;u=k;k=ca;v=w}else{r=B;g=D;k=y}}else{r=B;g=D;k=y}da=H;B=r;D=g;H=H+4|0;E=E+1|0;y=k;k=da}c[l+(L+(x>>>3&1)<<2)>>2]=x;if((s&1)==0|y>>>0<(A+700|0)>>>0){x=h;w=e;u=z;break}e=e+1|0;N=N+1|0;if(!((N|0)<4&(h+9|0)>>>0>>0)){w=e;f=v;break}else{h=x;z=u;f=v;A=y}}v=x+(u<<1)+U|0;c:do if(f>>>0<=(x>>>0>>0?x:X)>>>0){h=f+3|0;da=c[m>>2]|0;e=h-da|0;k=c[T>>2]|0;h=h-k|0;if((f|0)==(da|0))e=0;else{d:do if((f|0)!=(k|0)){do if(e>>>0<7)e=158663784>>>(e<<2)&15;else{if(h>>>0<7){e=266017486>>>(h<<2)&15;break}if((f|0)==(c[R>>2]|0)){e=2;break d}if((f|0)==(c[S>>2]|0)){e=3;break d}e=f+15|0}while(0);if(!e)break c}else e=1;while(0);c[S>>2]=c[R>>2];c[R>>2]=c[T>>2];c[T>>2]=c[m>>2];c[m>>2]=f}}else e=f+15|0;while(0);t=O+16|0;c[O>>2]=w;c[O+4>>2]=u;k=O+14|0;if(e>>>0<16){e=e&65535;b[k>>1]=e;k=0}else{M=e+-12|0;da=((aa(M|0)|0)^31)+-1|0;N=M>>>da&1;e=((da<<1)+65534|N)+16&65535;b[k>>1]=e;k=da<<24|M-((N|2)<>2]=k;g=e<<16>>16==0;s=O+12|0;do if(w>>>0>=6){if(w>>>0<130){da=w+-2|0;k=((aa(da|0)|0)^31)+-1|0;k=(k<<1)+(da>>>k)+2&65535;break}if(w>>>0<2114){k=((aa(w+-66|0)|0)^31)+10&65535;break}if(w>>>0<6210)k=21;else k=w>>>0<22594?22:23}else k=w&65535;while(0);do if(u>>>0>=10){if(u>>>0<134){da=u+-6|0;e=((aa(da|0)|0)^31)+-1|0;e=(e<<1)+(da>>>e)+4&65535;break}if(u>>>0<2118)e=((aa(u+-70|0)|0)^31)+12&65535;else e=23}else e=u+65534&65535;while(0);h=e&65535;f=k&65535;r=h&7|f<<3&56;if(g&(k&65535)<8&(e&65535)<16)e=((e&65535)<8?r:r|64)&65535;else e=b[88156+((h>>>3)+((f>>>3)*3|0)<<1)>>1]|r&65535;b[s>>1]=e;c[q>>2]=(c[q>>2]|0)+w;h=x+u|0;k=h>>>0>>0?h:W;e=x+2|0;while(1){if(e>>>0>=k>>>0){O=t;e=0;continue a}da=i+(e&j)|0;O=da;da=da+4|0;da=lc(d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24|0,d[da>>0]|d[da+1>>0]<<8|d[da+2>>0]<<16|d[da+3>>0]<<24|0,-1124073472,1979815)|0;da=bc(da|0,C|0,48)|0;c[l+(da+(e>>>3&1)<<2)>>2]=e;e=e+1|0}}c[n>>2]=e+M;c[p>>2]=(c[p>>2]|0)+(J-o>>4);return}function La(e,f,g,h,j,k,l,m,n,o,p,q,r){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;la=i;i=i+32|0;ja=la+16|0;ka=la;ha=(1<>2])+-16|0;u=c[o>>2]|0;ia=g+f|0;ga=f>>>0>7?ia+-7|0:g;fa=l+4|0;ea=(c[fa>>2]|0)<9?64:512;t=ea+g|0;if((((g|0)==0^1|h^1)^1)&f>>>0<4097){e=0;while(1){if((e|0)==(f|0))break;da=j+e|0;ca=da;da=da+4|0;da=lc(d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0,d[da>>0]|d[da+1>>0]<<8|d[da+2>>0]<<16|d[da+3>>0]<<24|0,-1124073472,1979815)|0;da=bc(da|0,C|0,47)|0;da=m+(da<<2)|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;e=e+1|0}if(f){a[m+524304>>0]=0;s=8}}else if(!(a[m+524304>>0]&1))s=8;else{ac(m|0,0,524305)|0;s=8}if((s|0)==8?f>>>0>6&g>>>0>2:0){da=g+-3|0;ca=j+(da&k)|0;ba=ca;ca=ca+4|0;ca=lc(d[ba>>0]|d[ba+1>>0]<<8|d[ba+2>>0]<<16|d[ba+3>>0]<<24|0,d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0,-1124073472,1979815)|0;ca=bc(ca|0,C|0,47)|0;c[m+(ca+(da>>>3&3)<<2)>>2]=da;da=g+-2|0;ca=j+(da&k)|0;ba=ca;ca=ca+4|0;ca=lc(d[ba>>0]|d[ba+1>>0]<<8|d[ba+2>>0]<<16|d[ba+3>>0]<<24|0,d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0,-1124073472,1979815)|0;ca=bc(ca|0,C|0,47)|0;c[m+(ca+(da>>>3&3)<<2)>>2]=da;da=g+-1|0;ca=j+(da&k)|0;ba=ca;ca=ca+4|0;ca=lc(d[ba>>0]|d[ba+1>>0]<<8|d[ba+2>>0]<<16|d[ba+3>>0]<<24|0,d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24|0,-1124073472,1979815)|0;ca=bc(ca|0,C|0,47)|0;c[m+(ca+(da>>>3&3)<<2)>>2]=da}R=ja+4|0;S=ja+8|0;T=ja+12|0;U=ja+12|0;V=ja+4|0;W=ja+8|0;X=m+524312|0;Y=m+524308|0;Z=ea<<2;$=ia+-7|0;ba=ka+12|0;ca=ka+4|0;da=ka+8|0;L=ka+12|0;M=ka+4|0;N=ka+8|0;O=n+8|0;P=n+12|0;Q=n+4|0;l=g;K=p;e=u;a:while(1){I=K;J=t+Z|0;b:while(1){H=ia-l|0;if((l+8|0)>>>0>=ia>>>0)break a;E=l>>>0>>0?l:ha;c[ja>>2]=0;c[R>>2]=0;c[S>>2]=0;c[T>>2]=4240;F=l&k;D=j+F|0;G=D;h=G;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;G=G+4|0;G=lc(h|0,d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24|0,-1124073472,1979815)|0;G=bc(G|0,C|0,47)|0;w=h&255;v=c[U>>2]|0;u=c[n>>2]|0;f=l-u|0;c[V>>2]=0;if(f>>>0>>0?(ma=f&k,(a[j+ma>>0]|0)==(h&255)<<24>>24):0){f=F+H|0;g=j+f|0;f=j+(f+-4)|0;s=0;h=D;while(1){if(h>>>0>f>>>0)break;B=j+(ma+s)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[B>>0]|d[B+1>>0]<<8|d[B+2>>0]<<16|d[B+3>>0]<<24|0))break;s=s+4|0;h=h+4|0}while(1){if(h>>>0>=g>>>0)break;if((a[j+(ma+s)>>0]|0)!=(a[h>>0]|0))break;s=s+1|0;h=h+1|0}if(s>>>0>3){g=(s*540|0)+3900|0;c[ja>>2]=s;c[W>>2]=u;c[U>>2]=g;f=s;s=d[j+(F+s)>>0]|0;h=1}else{f=0;g=v;s=w;h=0}}else{f=0;g=v;s=w;h=0}B=F+H|0;A=j+B|0;B=j+(B+-4)|0;z=m+(G+1<<2)|0;y=0;u=m+(G<<2)|0;while(1){u=c[u>>2]|0;if((y|0)==4)break;w=l-u|0;x=u&k;if(!(((l|0)==(u|0)?1:(s|0)!=(d[j+(x+f)>>0]|0))|w>>>0>E>>>0)){u=0;v=D;while(1){if(v>>>0>B>>>0)break;Aa=j+(x+u)|0;if((d[v>>0]|d[v+1>>0]<<8|d[v+2>>0]<<16|d[v+3>>0]<<24|0)!=(d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0))break;u=u+4|0;v=v+4|0}while(1){if(v>>>0>=A>>>0)break;if((a[j+(x+u)>>0]|0)!=(a[v>>0]|0))break;u=u+1|0;v=v+1|0}if(u>>>0>3?(na=(u*540|0)+3840+(_((aa(w|0)|0)^31,-120)|0)|0,g>>>0>>0):0){c[ja>>2]=u;c[W>>2]=w;c[U>>2]=na;f=u;g=na;s=d[j+(F+u)>>0]|0;h=1}}u=z;z=z+4|0;y=y+1|0}if(!(h&1)){if((c[X>>2]|0)>>>0<(c[Y>>2]|0)>>>7>>>0)h=0;else{w=0;h=0;v=(_(d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((w|0)==1)break;Aa=b[21084+(v<<1)>>1]|0;f=Aa&65535;c[Y>>2]=(c[Y>>2]|0)+1;if(Aa<<16>>16!=0?(oa=f&31,pa=f>>>5,qa=(c[11272+(oa<<2)>>2]|0)+(_(oa,pa)|0)|0,oa>>>0<=H>>>0):0){s=qa+oa|0;u=280811+s|0;s=280811+(s+-4)|0;g=0;f=280811+qa|0;while(1){if(f>>>0>s>>>0)break;Aa=j+(F+g)|0;if((d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24|0)!=(d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0))break;g=g+4|0;f=f+4|0}while(1){if(f>>>0>=u>>>0)break;if((a[j+(F+g)>>0]|0)!=(a[f>>0]|0))break;g=g+1|0;f=f+1|0}if(!((g+10|0)>>>0<=oa>>>0|(g|0)==0)?(ra=E+pa+1+(d[407930+(oa-g)>>0]<>0])|0,sa=(g*540|0)+3840+(_((aa(ra|0)|0)^31,-120)|0)|0,sa>>>0>=(c[U>>2]|0)>>>0):0){c[ja>>2]=g;c[V>>2]=oa^g;c[W>>2]=ra;c[U>>2]=sa;c[X>>2]=(c[X>>2]|0)+1;h=1}}w=w+1|0;v=v+1|0}h=(h&1)!=0}h=h&1}c[m+(G+(l>>>3&3)<<2)>>2]=l;if(h&1){I=0;break}e=e+1|0;f=l+1|0;if(f>>>0<=t>>>0){l=f;continue}if(f>>>0>J>>>0){h=l+17|0;h=h>>>0<$>>>0?h:$;l=f;while(1){if(l>>>0>=h>>>0)continue b;Aa=j+(l&k)|0;H=Aa;Aa=Aa+4|0;Aa=lc(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24|0,d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0,-1124073472,1979815)|0;Aa=bc(Aa|0,C|0,47)|0;c[m+(Aa+(l>>>3&3)<<2)>>2]=l;l=l+4|0;e=e+4|0}}else{h=l+9|0;h=h>>>0<$>>>0?h:$;l=f;while(1){if(l>>>0>=h>>>0)continue b;Aa=j+(l&k)|0;H=Aa;Aa=Aa+4|0;Aa=lc(d[H>>0]|d[H+1>>0]<<8|d[H+2>>0]<<16|d[H+3>>0]<<24|0,d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0,-1124073472,1979815)|0;Aa=bc(Aa|0,C|0,47)|0;c[m+(Aa+(l>>>3&3)<<2)>>2]=l;l=l+2|0;e=e+2|0}}}while(1){H=H+-1|0;if((c[fa>>2]|0)<5){u=(c[ja>>2]|0)+-1|0;u=u>>>0>>0?u:H}else u=0;c[ka>>2]=u;c[ca>>2]=0;c[da>>2]=0;c[ba>>2]=4240;x=l+1|0;E=x>>>0>>0?x:ha;F=x&k;D=j+F|0;G=D;h=G;G=G+4|0;G=lc(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0,d[G>>0]|d[G+1>>0]<<8|d[G+2>>0]<<16|d[G+3>>0]<<24|0,-1124073472,1979815)|0;G=bc(G|0,C|0,47)|0;h=a[j+(F+u)>>0]|0;w=h&255;t=c[L>>2]|0;v=c[n>>2]|0;f=x-v|0;c[M>>2]=0;if(f>>>0>>0?(ta=f&k,h<<24>>24==(a[j+(ta+u)>>0]|0)):0){f=F+H|0;g=j+f|0;f=j+(f+-4)|0;s=0;h=D;while(1){if(h>>>0>f>>>0)break;Aa=j+(ta+s)|0;if((d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24|0)!=(d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0))break;s=s+4|0;h=h+4|0}while(1){if(h>>>0>=g>>>0)break;if((a[j+(ta+s)>>0]|0)!=(a[h>>0]|0))break;s=s+1|0;h=h+1|0}if(s>>>0>3){t=(s*540|0)+3900|0;c[ka>>2]=s;c[N>>2]=v;c[L>>2]=t;f=s;s=d[j+(F+s)>>0]|0;h=1}else{f=u;s=w;h=0}}else{f=u;s=w;h=0}B=F+H|0;A=j+B|0;B=j+(B+-4)|0;z=m+(G+1<<2)|0;y=0;g=m+(G<<2)|0;while(1){g=c[g>>2]|0;if((y|0)==4)break;v=x-g|0;w=g&k;if(!(((x|0)==(g|0)?1:(s|0)!=(d[j+(w+f)>>0]|0))|v>>>0>E>>>0)){g=0;u=D;while(1){if(u>>>0>B>>>0)break;Aa=j+(w+g)|0;if((d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24|0)!=(d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0))break;g=g+4|0;u=u+4|0}while(1){if(u>>>0>=A>>>0)break;if((a[j+(w+g)>>0]|0)!=(a[u>>0]|0))break;g=g+1|0;u=u+1|0}if(g>>>0>3?(ua=(g*540|0)+3840+(_((aa(v|0)|0)^31,-120)|0)|0,t>>>0>>0):0){c[ka>>2]=g;c[N>>2]=v;c[L>>2]=ua;f=g;t=ua;s=d[j+(F+g)>>0]|0;h=1}}g=z;z=z+4|0;y=y+1|0}if(!(h&1)){if((c[X>>2]|0)>>>0<(c[Y>>2]|0)>>>7>>>0)h=0;else{v=0;h=0;u=(_(d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==1)break;Aa=b[21084+(u<<1)>>1]|0;f=Aa&65535;c[Y>>2]=(c[Y>>2]|0)+1;if(Aa<<16>>16!=0?(va=f&31,wa=f>>>5,xa=(c[11272+(va<<2)>>2]|0)+(_(va,wa)|0)|0,va>>>0<=H>>>0):0){s=xa+va|0;g=280811+s|0;s=280811+(s+-4)|0;t=0;f=280811+xa|0;while(1){if(f>>>0>s>>>0)break;Aa=j+(F+t)|0;if((d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24|0)!=(d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0))break;t=t+4|0;f=f+4|0}while(1){if(f>>>0>=g>>>0)break;if((a[j+(F+t)>>0]|0)!=(a[f>>0]|0))break;t=t+1|0;f=f+1|0}if(!((t+10|0)>>>0<=va>>>0|(t|0)==0)?(ya=E+wa+1+(d[407930+(va-t)>>0]<>0])|0,za=(t*540|0)+3840+(_((aa(ya|0)|0)^31,-120)|0)|0,za>>>0>=(c[L>>2]|0)>>>0):0){c[ka>>2]=t;c[M>>2]=va^t;c[N>>2]=ya;c[L>>2]=za;c[X>>2]=(c[X>>2]|0)+1;h=1}}v=v+1|0;u=u+1|0}h=(h&1)!=0}h=h&1}c[m+(G+(x>>>3&3)<<2)>>2]=x;if(!(h&1)){x=l;w=e;break}if((c[ba>>2]|0)>>>0<((c[T>>2]|0)+700|0)>>>0){x=l;w=e;break}e=e+1|0;c[ja>>2]=c[ka>>2];c[ja+4>>2]=c[ka+4>>2];c[ja+8>>2]=c[ka+8>>2];c[ja+12>>2]=c[ka+12>>2];I=I+1|0;if(!((I|0)<4&(l+9|0)>>>0>>0)){w=e;break}else l=x}l=c[ja>>2]|0;t=x+(l<<1)+ea|0;e=c[S>>2]|0;c:do if(e>>>0<=(x>>>0>>0?x:ha)>>>0){s=e+3|0;Aa=c[n>>2]|0;h=s-Aa|0;f=c[Q>>2]|0;s=s-f|0;if((e|0)==(Aa|0))e=0;else{d:do if((e|0)!=(f|0)){do if(h>>>0<7)e=158663784>>>(h<<2)&15;else{if(s>>>0<7){e=266017486>>>(s<<2)&15;break}if((e|0)==(c[O>>2]|0)){e=2;break d}if((e|0)==(c[P>>2]|0)){e=3;break d}e=e+15|0}while(0);if(!e)break c}else e=1;while(0);c[P>>2]=c[O>>2];c[O>>2]=c[Q>>2];c[Q>>2]=c[n>>2];c[n>>2]=c[S>>2];l=c[ja>>2]|0}}else e=e+15|0;while(0);v=K+16|0;Aa=c[R>>2]|0;h=l^Aa;c[K>>2]=w;c[K+4>>2]=l|Aa<<24;l=K+14|0;if(e>>>0<16){e=e&65535;b[l>>1]=e;l=0}else{I=e+-12|0;Aa=((aa(I|0)|0)^31)+-1|0;J=I>>>Aa&1;e=((Aa<<1)+65534|J)+16&65535;b[l>>1]=e;l=Aa<<24|I-((J|2)<>2]=l;g=e<<16>>16==0;u=K+12|0;do if(w>>>0>=6){if(w>>>0<130){Aa=w+-2|0;s=((aa(Aa|0)|0)^31)+-1|0;s=(s<<1)+(Aa>>>s)+2&65535;break}if(w>>>0<2114){s=((aa(w+-66|0)|0)^31)+10&65535;break}if(w>>>0<6210)s=21;else s=w>>>0<22594?22:23}else s=w&65535;while(0);do if(h>>>0>=10){if(h>>>0<134){Aa=h+-6|0;e=((aa(Aa|0)|0)^31)+-1|0;e=(e<<1)+(Aa>>>e)+4&65535;break}if(h>>>0<2118)e=((aa(h+-70|0)|0)^31)+12&65535;else e=23}else e=h+65534&65535;while(0);l=e&65535;h=s&65535;f=l&7|h<<3&56;if(g&(s&65535)<8&(e&65535)<16)e=((e&65535)<8?f:f|64)&65535;else e=b[88156+((l>>>3)+((h>>>3)*3|0)<<1)>>1]|f&65535;b[u>>1]=e;c[r>>2]=(c[r>>2]|0)+w;e=x+(c[ja>>2]|0)|0;e=e>>>0>>0?e:ga;l=x+2|0;while(1){if(l>>>0>=e>>>0)break;Aa=j+(l&k)|0;K=Aa;Aa=Aa+4|0;Aa=lc(d[K>>0]|d[K+1>>0]<<8|d[K+2>>0]<<16|d[K+3>>0]<<24|0,d[Aa>>0]|d[Aa+1>>0]<<8|d[Aa+2>>0]<<16|d[Aa+3>>0]<<24|0,-1124073472,1979815)|0;Aa=bc(Aa|0,C|0,47)|0;c[m+(Aa+(l>>>3&3)<<2)>>2]=l;l=l+1|0}l=x+(c[ja>>2]|0)|0;K=v;e=0}c[o>>2]=e+H;c[q>>2]=(c[q>>2]|0)+(I-p>>4);i=la;return}function Ma(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;qa=i;i=i+32|0;oa=qa+16|0;pa=qa;ma=(1<>2])+-16|0;v=c[p>>2]|0;na=h+g|0;la=g>>>0>3?na+-3|0:h;ka=m+4|0;ja=(c[ka>>2]|0)<9?64:512;u=ja+h|0;if((((h|0)==0^1|j^1)^1)&g>>>0<257){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;b[n+((_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>18<<1)>>1]=0;f=f+1|0}if(g){a[n+1081344>>0]=0;t=8}}else{f=n+1081344|0;if(!(a[f>>0]&1))t=8;else{ac(n|0,0,32768)|0;a[f>>0]=0;t=8}}if((t|0)==8?g>>>0>2&h>>>0>2:0){ga=h+-3|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ia=n+(ha<<1)|0;c[n+32768+((e[ia>>1]&15|ha<<4)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16;ia=h+-2|0;ha=k+(ia&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ga=n+(ha<<1)|0;c[n+32768+((e[ga>>1]&15|ha<<4)<<2)>>2]=ia;b[ga>>1]=(b[ga>>1]|0)+1<<16>>16;ga=h+-1|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ia=n+(ha<<1)|0;c[n+32768+((e[ia>>1]&15|ha<<4)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16}P=oa+4|0;Q=oa+8|0;R=oa+12|0;S=oa+4|0;T=oa+8|0;U=oa+12|0;V=n+1081352|0;W=n+1081348|0;X=ja<<2;Y=na+-4|0;Z=na+-3|0;$=pa+12|0;ba=pa+4|0;ca=pa+8|0;da=pa+4|0;ea=pa+8|0;fa=pa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=v;a:while(1){M=O;N=u+X|0;b:while(1){L=na-m|0;if((m+4|0)>>>0>=na>>>0)break a;J=m>>>0>>0?m:ma;c[oa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;g=c[oa>>2]|0;c[oa>>2]=0;c[S>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;y=4240;j=0;x=0;while(1){if((x|0)==4)break;w=(c[o+(c[11372+(x<<2)>>2]<<2)>>2]|0)+(c[11436+(x<<2)>>2]|0)|0;t=m-w|0;do if(((!(t>>>0>=m>>>0|w>>>0>J>>>0)?(ra=t&l,sa=K+g|0,sa>>>0<=l>>>0):0)?(ta=ra+g|0,ta>>>0<=l>>>0):0)?(a[k+sa>>0]|0)==(a[k+ta>>0]|0):0){v=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;D=t;E=k+(ra+v)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;v=v+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(ra+v)>>0]|0)!=(a[t>>0]|0))break;v=v+1|0;t=t+1|0}if(v>>>0<=2?!((v|0)==2&x>>>0<2):0){t=y;break}t=(v*540|0)+(c[11500+(x<<2)>>2]|0)|0;if(y>>>0>>0){c[oa>>2]=v;c[T>>2]=w;c[U>>2]=t;g=v;j=1}else t=y}else t=y;while(0);y=t;x=x+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18;C=D<<4;D=n+(D<<1)|0;E=b[D>>1]|0;t=E&65535;E=(E&65535)>16?t+-16|0:0;c:while(1){B=K+g|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(t>>>0<=E>>>0)break c;t=t+-1|0;h=c[n+32768+((C|t&15)<<2)>>2]|0;z=m-h|0;if(z>>>0>J>>>0)break c;x=h&l;if(A)continue;h=x+g|0;if(h>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+h>>0]|0)){w=0;h=F}else continue;while(1){v=h;if(v>>>0>H>>>0)break;Ia=h;Ha=k+(x+w)|0;if((d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0)!=(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0))break;w=w+4|0;h=v+4|0}while(1){if(h>>>0>=G>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}if(w>>>0<=3)continue;h=(w*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(y>>>0>>0)break}c[oa>>2]=w;c[T>>2]=z;c[U>>2]=h;g=w;y=h;j=1}Ia=b[D>>1]|0;c[n+32768+((C|Ia&15)<<2)>>2]=m;b[D>>1]=Ia+1<<16>>16;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ia=b[21084+(w<<1)>>1]|0;t=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(ua=t&31,va=t>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=L>>>0):0){g=wa+ua|0;v=280811+g|0;g=280811+(g+-4)|0;h=0;t=280811+wa|0;while(1){if(t>>>0>g>>>0)break;Ia=k+(K+h)|0;if((d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;t=t+4|0}while(1){if(t>>>0>=v>>>0)break;if((a[k+(K+h)>>0]|0)!=(a[t>>0]|0))break;h=h+1|0;t=t+1|0}if(!((h+10|0)>>>0<=ua>>>0|(h|0)==0)?(xa=J+va+1+(d[407930+(ua-h)>>0]<>0])|0,ya=(h*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[U>>2]|0)>>>0):0){c[oa>>2]=h;c[S>>2]=ua^h;c[T>>2]=xa;c[U>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;t=m+1|0;if(t>>>0<=u>>>0){m=t;continue}if(t>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&15|Ha<<4)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&15|Ha<<4)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[ka>>2]|0)<5){f=(c[oa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[pa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:ma;K=y&l;t=c[pa>>2]|0;c[pa>>2]=0;c[da>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;w=4240;f=0;v=0;while(1){if((v|0)==4)break;h=(c[o+(c[11372+(v<<2)>>2]<<2)>>2]|0)+(c[11436+(v<<2)>>2]|0)|0;j=y-h|0;do if(((!(j>>>0>=y>>>0|h>>>0>J>>>0)?(za=j&l,Aa=K+t|0,Aa>>>0<=l>>>0):0)?(Ba=za+t|0,Ba>>>0<=l>>>0):0)?(a[k+Aa>>0]|0)==(a[k+Ba>>0]|0):0){u=0;j=F;while(1){g=j;if(g>>>0>H>>>0)break;Ha=j;Ia=k+(za+u)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;u=u+4|0;j=g+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(za+u)>>0]|0)!=(a[j>>0]|0))break;u=u+1|0;j=j+1|0}if(u>>>0<=2?!((u|0)==2&v>>>0<2):0){j=w;break}j=(u*540|0)+(c[11500+(v<<2)>>2]|0)|0;if(w>>>0>>0){c[pa>>2]=u;c[ea>>2]=h;c[fa>>2]=j;t=u;f=1}else j=w}else j=w;while(0);w=j;v=v+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18;C=D<<4;D=n+(D<<1)|0;E=b[D>>1]|0;j=E&65535;E=(E&65535)>16?j+-16|0:0;d:while(1){B=K+t|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(j>>>0<=E>>>0)break d;j=j+-1|0;g=c[n+32768+((C|j&15)<<2)>>2]|0;z=y-g|0;if(z>>>0>J>>>0)break d;v=g&l;if(A)continue;g=v+t|0;if(g>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+g>>0]|0)){h=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ha=g;Ia=k+(v+h)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(v+h)>>0]|0)!=(a[g>>0]|0))break;h=h+1|0;g=g+1|0}if(h>>>0<=3)continue;g=(h*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(w>>>0>>0)break}c[pa>>2]=h;c[ea>>2]=z;c[fa>>2]=g;t=h;w=g;f=1}Ia=b[D>>1]|0;c[n+32768+((C|Ia&15)<<2)>>2]=y;b[D>>1]=Ia+1<<16>>16;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;h=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ia=b[21084+(h<<1)>>1]|0;j=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(Ca=j&31,Da=j>>>5,Ea=(c[11272+(Ca<<2)>>2]|0)+(_(Ca,Da)|0)|0,Ca>>>0<=L>>>0):0){t=Ea+Ca|0;u=280811+t|0;t=280811+(t+-4)|0;g=0;j=280811+Ea|0;while(1){if(j>>>0>t>>>0)break;Ia=k+(K+g)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;g=g+4|0;j=j+4|0}while(1){if(j>>>0>=u>>>0)break;if((a[k+(K+g)>>0]|0)!=(a[j>>0]|0))break;g=g+1|0;j=j+1|0}if(!((g+10|0)>>>0<=Ca>>>0|(g|0)==0)?(Fa=J+Da+1+(d[407930+(Ca-g)>>0]<>0])|0,Ga=(g*540|0)+3840+(_((aa(Fa|0)|0)^31,-120)|0)|0,Ga>>>0>=(c[fa>>2]|0)>>>0):0){c[pa>>2]=g;c[da>>2]=Ca^g;c[ea>>2]=Fa;c[fa>>2]=Ga;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;h=h+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[oa>>2]=c[pa>>2];c[oa+4>>2]=c[pa+4>>2];c[oa+8>>2]=c[pa+8>>2];c[oa+12>>2]=c[pa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[oa>>2]|0;u=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:ma)>>>0){g=f+3|0;Ia=c[o>>2]|0;j=g-Ia|0;t=c[ia>>2]|0;g=g-t|0;if((f|0)==(Ia|0))f=0;else{f:do if((f|0)!=(t|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(g>>>0<7){f=266017486>>>(g<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[oa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ia=c[P>>2]|0;j=m^Ia;c[O>>2]=x;c[O+4>>2]=m|Ia<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ia=((aa(N|0)|0)^31)+-1|0;Ha=N>>>Ia&1;f=((Ia<<1)+65534|Ha)+16&65535;b[m>>1]=f;m=Ia<<24|N-((Ha|2)<>2]=m;h=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ia=x+-2|0;g=((aa(Ia|0)|0)^31)+-1|0;g=(g<<1)+(Ia>>>g)+2&65535;break}if(x>>>0<2114){g=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)g=21;else g=x>>>0<22594?22:23}else g=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ia=j+-6|0;f=((aa(Ia|0)|0)^31)+-1|0;f=(f<<1)+(Ia>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=g&65535;t=m&7|j<<3&56;if(h&(g&65535)<8&(f&65535)<16)f=((f&65535)<8?t:t|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|t&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[oa>>2]|0)|0;f=f>>>0>>0?f:la;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&15|Ha<<4)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+1|0}m=y+(c[oa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=qa;return}function Na(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;qa=i;i=i+32|0;oa=qa+16|0;pa=qa;ma=(1<>2])+-16|0;v=c[p>>2]|0;na=h+g|0;la=g>>>0>3?na+-3|0:h;ka=m+4|0;ja=(c[ka>>2]|0)<9?64:512;u=ja+h|0;if((((h|0)==0^1|j^1)^1)&g>>>0<257){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;b[n+((_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>18<<1)>>1]=0;f=f+1|0}if(g){a[n+2129920>>0]=0;t=8}}else{f=n+2129920|0;if(!(a[f>>0]&1))t=8;else{ac(n|0,0,32768)|0;a[f>>0]=0;t=8}}if((t|0)==8?g>>>0>2&h>>>0>2:0){ga=h+-3|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ia=n+(ha<<1)|0;c[n+32768+((e[ia>>1]&31|ha<<5)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16;ia=h+-2|0;ha=k+(ia&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ga=n+(ha<<1)|0;c[n+32768+((e[ga>>1]&31|ha<<5)<<2)>>2]=ia;b[ga>>1]=(b[ga>>1]|0)+1<<16>>16;ga=h+-1|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>18;ia=n+(ha<<1)|0;c[n+32768+((e[ia>>1]&31|ha<<5)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16}P=oa+4|0;Q=oa+8|0;R=oa+12|0;S=oa+4|0;T=oa+8|0;U=oa+12|0;V=n+2129928|0;W=n+2129924|0;X=ja<<2;Y=na+-4|0;Z=na+-3|0;$=pa+12|0;ba=pa+4|0;ca=pa+8|0;da=pa+4|0;ea=pa+8|0;fa=pa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=v;a:while(1){M=O;N=u+X|0;b:while(1){L=na-m|0;if((m+4|0)>>>0>=na>>>0)break a;J=m>>>0>>0?m:ma;c[oa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;g=c[oa>>2]|0;c[oa>>2]=0;c[S>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;y=4240;j=0;x=0;while(1){if((x|0)==4)break;w=(c[o+(c[11372+(x<<2)>>2]<<2)>>2]|0)+(c[11436+(x<<2)>>2]|0)|0;t=m-w|0;do if(((!(t>>>0>=m>>>0|w>>>0>J>>>0)?(ra=t&l,sa=K+g|0,sa>>>0<=l>>>0):0)?(ta=ra+g|0,ta>>>0<=l>>>0):0)?(a[k+sa>>0]|0)==(a[k+ta>>0]|0):0){v=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;D=t;E=k+(ra+v)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;v=v+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(ra+v)>>0]|0)!=(a[t>>0]|0))break;v=v+1|0;t=t+1|0}if(v>>>0<=2?!((v|0)==2&x>>>0<2):0){t=y;break}t=(v*540|0)+(c[11500+(x<<2)>>2]|0)|0;if(y>>>0>>0){c[oa>>2]=v;c[T>>2]=w;c[U>>2]=t;g=v;j=1}else t=y}else t=y;while(0);y=t;x=x+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18;C=D<<5;D=n+(D<<1)|0;E=b[D>>1]|0;t=E&65535;E=(E&65535)>32?t+-32|0:0;c:while(1){B=K+g|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(t>>>0<=E>>>0)break c;t=t+-1|0;h=c[n+32768+((C|t&31)<<2)>>2]|0;z=m-h|0;if(z>>>0>J>>>0)break c;x=h&l;if(A)continue;h=x+g|0;if(h>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+h>>0]|0)){w=0;h=F}else continue;while(1){v=h;if(v>>>0>H>>>0)break;Ia=h;Ha=k+(x+w)|0;if((d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0)!=(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0))break;w=w+4|0;h=v+4|0}while(1){if(h>>>0>=G>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}if(w>>>0<=3)continue;h=(w*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(y>>>0>>0)break}c[oa>>2]=w;c[T>>2]=z;c[U>>2]=h;g=w;y=h;j=1}Ia=b[D>>1]|0;c[n+32768+((C|Ia&31)<<2)>>2]=m;b[D>>1]=Ia+1<<16>>16;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ia=b[21084+(w<<1)>>1]|0;t=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(ua=t&31,va=t>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=L>>>0):0){g=wa+ua|0;v=280811+g|0;g=280811+(g+-4)|0;h=0;t=280811+wa|0;while(1){if(t>>>0>g>>>0)break;Ia=k+(K+h)|0;if((d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;t=t+4|0}while(1){if(t>>>0>=v>>>0)break;if((a[k+(K+h)>>0]|0)!=(a[t>>0]|0))break;h=h+1|0;t=t+1|0}if(!((h+10|0)>>>0<=ua>>>0|(h|0)==0)?(xa=J+va+1+(d[407930+(ua-h)>>0]<>0])|0,ya=(h*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[U>>2]|0)>>>0):0){c[oa>>2]=h;c[S>>2]=ua^h;c[T>>2]=xa;c[U>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;t=m+1|0;if(t>>>0<=u>>>0){m=t;continue}if(t>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&31|Ha<<5)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&31|Ha<<5)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[ka>>2]|0)<5){f=(c[oa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[pa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:ma;K=y&l;t=c[pa>>2]|0;c[pa>>2]=0;c[da>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;w=4240;f=0;v=0;while(1){if((v|0)==4)break;h=(c[o+(c[11372+(v<<2)>>2]<<2)>>2]|0)+(c[11436+(v<<2)>>2]|0)|0;j=y-h|0;do if(((!(j>>>0>=y>>>0|h>>>0>J>>>0)?(za=j&l,Aa=K+t|0,Aa>>>0<=l>>>0):0)?(Ba=za+t|0,Ba>>>0<=l>>>0):0)?(a[k+Aa>>0]|0)==(a[k+Ba>>0]|0):0){u=0;j=F;while(1){g=j;if(g>>>0>H>>>0)break;Ha=j;Ia=k+(za+u)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;u=u+4|0;j=g+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(za+u)>>0]|0)!=(a[j>>0]|0))break;u=u+1|0;j=j+1|0}if(u>>>0<=2?!((u|0)==2&v>>>0<2):0){j=w;break}j=(u*540|0)+(c[11500+(v<<2)>>2]|0)|0;if(w>>>0>>0){c[pa>>2]=u;c[ea>>2]=h;c[fa>>2]=j;t=u;f=1}else j=w}else j=w;while(0);w=j;v=v+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18;C=D<<5;D=n+(D<<1)|0;E=b[D>>1]|0;j=E&65535;E=(E&65535)>32?j+-32|0:0;d:while(1){B=K+t|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(j>>>0<=E>>>0)break d;j=j+-1|0;g=c[n+32768+((C|j&31)<<2)>>2]|0;z=y-g|0;if(z>>>0>J>>>0)break d;v=g&l;if(A)continue;g=v+t|0;if(g>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+g>>0]|0)){h=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ha=g;Ia=k+(v+h)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(v+h)>>0]|0)!=(a[g>>0]|0))break;h=h+1|0;g=g+1|0}if(h>>>0<=3)continue;g=(h*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(w>>>0>>0)break}c[pa>>2]=h;c[ea>>2]=z;c[fa>>2]=g;t=h;w=g;f=1}Ia=b[D>>1]|0;c[n+32768+((C|Ia&31)<<2)>>2]=y;b[D>>1]=Ia+1<<16>>16;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;h=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ia=b[21084+(h<<1)>>1]|0;j=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(Ca=j&31,Da=j>>>5,Ea=(c[11272+(Ca<<2)>>2]|0)+(_(Ca,Da)|0)|0,Ca>>>0<=L>>>0):0){t=Ea+Ca|0;u=280811+t|0;t=280811+(t+-4)|0;g=0;j=280811+Ea|0;while(1){if(j>>>0>t>>>0)break;Ia=k+(K+g)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;g=g+4|0;j=j+4|0}while(1){if(j>>>0>=u>>>0)break;if((a[k+(K+g)>>0]|0)!=(a[j>>0]|0))break;g=g+1|0;j=j+1|0}if(!((g+10|0)>>>0<=Ca>>>0|(g|0)==0)?(Fa=J+Da+1+(d[407930+(Ca-g)>>0]<>0])|0,Ga=(g*540|0)+3840+(_((aa(Fa|0)|0)^31,-120)|0)|0,Ga>>>0>=(c[fa>>2]|0)>>>0):0){c[pa>>2]=g;c[da>>2]=Ca^g;c[ea>>2]=Fa;c[fa>>2]=Ga;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;h=h+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[oa>>2]=c[pa>>2];c[oa+4>>2]=c[pa+4>>2];c[oa+8>>2]=c[pa+8>>2];c[oa+12>>2]=c[pa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[oa>>2]|0;u=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:ma)>>>0){g=f+3|0;Ia=c[o>>2]|0;j=g-Ia|0;t=c[ia>>2]|0;g=g-t|0;if((f|0)==(Ia|0))f=0;else{f:do if((f|0)!=(t|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(g>>>0<7){f=266017486>>>(g<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[oa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ia=c[P>>2]|0;j=m^Ia;c[O>>2]=x;c[O+4>>2]=m|Ia<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ia=((aa(N|0)|0)^31)+-1|0;Ha=N>>>Ia&1;f=((Ia<<1)+65534|Ha)+16&65535;b[m>>1]=f;m=Ia<<24|N-((Ha|2)<>2]=m;h=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ia=x+-2|0;g=((aa(Ia|0)|0)^31)+-1|0;g=(g<<1)+(Ia>>>g)+2&65535;break}if(x>>>0<2114){g=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)g=21;else g=x>>>0<22594?22:23}else g=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ia=j+-6|0;f=((aa(Ia|0)|0)^31)+-1|0;f=(f<<1)+(Ia>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=g&65535;t=m&7|j<<3&56;if(h&(g&65535)<8&(f&65535)<16)f=((f&65535)<8?t:t|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|t&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[oa>>2]|0)|0;f=f>>>0>>0?f:la;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>18;Ia=n+(Ha<<1)|0;c[n+32768+((e[Ia>>1]&31|Ha<<5)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+1|0}m=y+(c[oa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=qa;return}function Oa(f,g,h,j,k,l,m,n,o,p,q,r,s){f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;qa=i;i=i+32|0;oa=qa+16|0;pa=qa;ma=(1<>2])+-16|0;v=c[p>>2]|0;na=h+g|0;la=g>>>0>3?na+-3|0:h;ka=m+4|0;ja=(c[ka>>2]|0)<9?64:512;u=ja+h|0;if((((h|0)==0^1|j^1)^1)&g>>>0<513){f=0;while(1){if((f|0)==(g|0))break;ia=k+f|0;b[n+((_(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24,506832829)|0)>>>17<<1)>>1]=0;f=f+1|0}if(g){a[n+8454144>>0]=0;t=8}}else{f=n+8454144|0;if(!(a[f>>0]&1))t=8;else{ac(n|0,0,65536)|0;a[f>>0]=0;t=8}}if((t|0)==8?g>>>0>2&h>>>0>2:0){ga=h+-3|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&63|ha<<6)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16;ia=h+-2|0;ha=k+(ia&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ga=n+(ha<<1)|0;c[n+65536+((e[ga>>1]&63|ha<<6)<<2)>>2]=ia;b[ga>>1]=(b[ga>>1]|0)+1<<16>>16;ga=h+-1|0;ha=k+(ga&l)|0;ha=(_(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24,506832829)|0)>>>17;ia=n+(ha<<1)|0;c[n+65536+((e[ia>>1]&63|ha<<6)<<2)>>2]=ga;b[ia>>1]=(b[ia>>1]|0)+1<<16>>16}P=oa+4|0;Q=oa+8|0;R=oa+12|0;S=oa+4|0;T=oa+8|0;U=oa+12|0;V=n+8454152|0;W=n+8454148|0;X=ja<<2;Y=na+-4|0;Z=na+-3|0;$=pa+12|0;ba=pa+4|0;ca=pa+8|0;da=pa+4|0;ea=pa+8|0;fa=pa+12|0;ga=o+8|0;ha=o+12|0;ia=o+4|0;m=h;O=q;f=v;a:while(1){M=O;N=u+X|0;b:while(1){L=na-m|0;if((m+4|0)>>>0>=na>>>0)break a;J=m>>>0>>0?m:ma;c[oa>>2]=0;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=4240;K=m&l;g=c[oa>>2]|0;c[oa>>2]=0;c[S>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;y=4240;j=0;x=0;while(1){if((x|0)==10)break;w=(c[o+(c[11372+(x<<2)>>2]<<2)>>2]|0)+(c[11436+(x<<2)>>2]|0)|0;t=m-w|0;do if(((!(t>>>0>=m>>>0|w>>>0>J>>>0)?(ra=t&l,sa=K+g|0,sa>>>0<=l>>>0):0)?(ta=ra+g|0,ta>>>0<=l>>>0):0)?(a[k+sa>>0]|0)==(a[k+ta>>0]|0):0){v=0;t=F;while(1){h=t;if(h>>>0>H>>>0)break;D=t;E=k+(ra+v)|0;if((d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;v=v+4|0;t=h+4|0}while(1){if(t>>>0>=G>>>0)break;if((a[k+(ra+v)>>0]|0)!=(a[t>>0]|0))break;v=v+1|0;t=t+1|0}if(v>>>0<=2?!((v|0)==2&x>>>0<2):0){t=y;break}t=(v*540|0)+(c[11500+(x<<2)>>2]|0)|0;if(y>>>0>>0){c[oa>>2]=v;c[T>>2]=w;c[U>>2]=t;g=v;j=1}else t=y}else t=y;while(0);y=t;x=x+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<6;D=n+(D<<1)|0;E=b[D>>1]|0;t=E&65535;E=(E&65535)>64?t+-64|0:0;c:while(1){B=K+g|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(t>>>0<=E>>>0)break c;t=t+-1|0;h=c[n+65536+((C|t&63)<<2)>>2]|0;z=m-h|0;if(z>>>0>J>>>0)break c;x=h&l;if(A)continue;h=x+g|0;if(h>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+h>>0]|0)){w=0;h=F}else continue;while(1){v=h;if(v>>>0>H>>>0)break;Ia=h;Ha=k+(x+w)|0;if((d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0)!=(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0))break;w=w+4|0;h=v+4|0}while(1){if(h>>>0>=G>>>0)break;if((a[k+(x+w)>>0]|0)!=(a[h>>0]|0))break;w=w+1|0;h=h+1|0}if(w>>>0<=3)continue;h=(w*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(y>>>0>>0)break}c[oa>>2]=w;c[T>>2]=z;c[U>>2]=h;g=w;y=h;j=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&63)<<2)>>2]=m;b[D>>1]=Ia+1<<16>>16;if(!(j&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)j=0;else{x=0;j=0;w=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((x|0)==2)break;Ia=b[21084+(w<<1)>>1]|0;t=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(ua=t&31,va=t>>>5,wa=(c[11272+(ua<<2)>>2]|0)+(_(ua,va)|0)|0,ua>>>0<=L>>>0):0){g=wa+ua|0;v=280811+g|0;g=280811+(g+-4)|0;h=0;t=280811+wa|0;while(1){if(t>>>0>g>>>0)break;Ia=k+(K+h)|0;if((d[t>>0]|d[t+1>>0]<<8|d[t+2>>0]<<16|d[t+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;t=t+4|0}while(1){if(t>>>0>=v>>>0)break;if((a[k+(K+h)>>0]|0)!=(a[t>>0]|0))break;h=h+1|0;t=t+1|0}if(!((h+10|0)>>>0<=ua>>>0|(h|0)==0)?(xa=J+va+1+(d[407930+(ua-h)>>0]<>0])|0,ya=(h*540|0)+3840+(_((aa(xa|0)|0)^31,-120)|0)|0,ya>>>0>=(c[U>>2]|0)>>>0):0){c[oa>>2]=h;c[S>>2]=ua^h;c[T>>2]=xa;c[U>>2]=ya;c[V>>2]=(c[V>>2]|0)+1;j=1}}x=x+1|0;w=w+1|0}j=(j&1)!=0}j=j&1}if(j&1){M=0;x=f;break}f=f+1|0;t=m+1|0;if(t>>>0<=u>>>0){m=t;continue}if(t>>>0>N>>>0){j=m+17|0;j=j>>>0>>0?j:Y;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&63|Ha<<6)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+4|0;f=f+4|0}}else{j=m+9|0;j=j>>>0>>0?j:Z;m=t;while(1){if(m>>>0>=j>>>0)continue b;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&63|Ha<<6)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+2|0;f=f+2|0}}}while(1){L=L+-1|0;if((c[ka>>2]|0)<5){f=(c[oa>>2]|0)+-1|0;f=f>>>0>>0?f:L}else f=0;c[pa>>2]=f;c[ba>>2]=0;c[ca>>2]=0;c[$>>2]=4240;y=m+1|0;J=y>>>0>>0?y:ma;K=y&l;t=c[pa>>2]|0;c[pa>>2]=0;c[da>>2]=0;I=k+K|0;H=K+L|0;G=k+H|0;F=I;H=k+(H+-4)|0;w=4240;f=0;v=0;while(1){if((v|0)==10)break;h=(c[o+(c[11372+(v<<2)>>2]<<2)>>2]|0)+(c[11436+(v<<2)>>2]|0)|0;j=y-h|0;do if(((!(j>>>0>=y>>>0|h>>>0>J>>>0)?(za=j&l,Aa=K+t|0,Aa>>>0<=l>>>0):0)?(Ba=za+t|0,Ba>>>0<=l>>>0):0)?(a[k+Aa>>0]|0)==(a[k+Ba>>0]|0):0){u=0;j=F;while(1){g=j;if(g>>>0>H>>>0)break;Ha=j;Ia=k+(za+u)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;u=u+4|0;j=g+4|0}while(1){if(j>>>0>=G>>>0)break;if((a[k+(za+u)>>0]|0)!=(a[j>>0]|0))break;u=u+1|0;j=j+1|0}if(u>>>0<=2?!((u|0)==2&v>>>0<2):0){j=w;break}j=(u*540|0)+(c[11500+(v<<2)>>2]|0)|0;if(w>>>0>>0){c[pa>>2]=u;c[ea>>2]=h;c[fa>>2]=j;t=u;f=1}else j=w}else j=w;while(0);w=j;v=v+1|0}D=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>17;C=D<<6;D=n+(D<<1)|0;E=b[D>>1]|0;j=E&65535;E=(E&65535)>64?j+-64|0:0;d:while(1){B=K+t|0;A=B>>>0>l>>>0;B=k+B|0;while(1){if(j>>>0<=E>>>0)break d;j=j+-1|0;g=c[n+65536+((C|j&63)<<2)>>2]|0;z=y-g|0;if(z>>>0>J>>>0)break d;v=g&l;if(A)continue;g=v+t|0;if(g>>>0>l>>>0)continue;if((a[B>>0]|0)==(a[k+g>>0]|0)){h=0;g=F}else continue;while(1){u=g;if(u>>>0>H>>>0)break;Ha=g;Ia=k+(v+h)|0;if((d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;h=h+4|0;g=u+4|0}while(1){if(g>>>0>=G>>>0)break;if((a[k+(v+h)>>0]|0)!=(a[g>>0]|0))break;h=h+1|0;g=g+1|0}if(h>>>0<=3)continue;g=(h*540|0)+3840+(_((aa(z|0)|0)^31,-120)|0)|0;if(w>>>0>>0)break}c[pa>>2]=h;c[ea>>2]=z;c[fa>>2]=g;t=h;w=g;f=1}Ia=b[D>>1]|0;c[n+65536+((C|Ia&63)<<2)>>2]=y;b[D>>1]=Ia+1<<16>>16;if(!(f&1)){if((c[V>>2]|0)>>>0<(c[W>>2]|0)>>>7>>>0)f=0;else{v=0;f=0;h=(_(d[I>>0]|d[I+1>>0]<<8|d[I+2>>0]<<16|d[I+3>>0]<<24,506832829)|0)>>>18<<1;while(1){if((v|0)==2)break;Ia=b[21084+(h<<1)>>1]|0;j=Ia&65535;c[W>>2]=(c[W>>2]|0)+1;if(Ia<<16>>16!=0?(Ca=j&31,Da=j>>>5,Ea=(c[11272+(Ca<<2)>>2]|0)+(_(Ca,Da)|0)|0,Ca>>>0<=L>>>0):0){t=Ea+Ca|0;u=280811+t|0;t=280811+(t+-4)|0;g=0;j=280811+Ea|0;while(1){if(j>>>0>t>>>0)break;Ia=k+(K+g)|0;if((d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24|0)!=(d[Ia>>0]|d[Ia+1>>0]<<8|d[Ia+2>>0]<<16|d[Ia+3>>0]<<24|0))break;g=g+4|0;j=j+4|0}while(1){if(j>>>0>=u>>>0)break;if((a[k+(K+g)>>0]|0)!=(a[j>>0]|0))break;g=g+1|0;j=j+1|0}if(!((g+10|0)>>>0<=Ca>>>0|(g|0)==0)?(Fa=J+Da+1+(d[407930+(Ca-g)>>0]<>0])|0,Ga=(g*540|0)+3840+(_((aa(Fa|0)|0)^31,-120)|0)|0,Ga>>>0>=(c[fa>>2]|0)>>>0):0){c[pa>>2]=g;c[da>>2]=Ca^g;c[ea>>2]=Fa;c[fa>>2]=Ga;c[V>>2]=(c[V>>2]|0)+1;f=1}}v=v+1|0;h=h+1|0}f=(f&1)!=0}f=f&1}if(!(f&1)){y=m;break}if((c[$>>2]|0)>>>0<((c[R>>2]|0)+700|0)>>>0){y=m;break}f=x+1|0;c[oa>>2]=c[pa>>2];c[oa+4>>2]=c[pa+4>>2];c[oa+8>>2]=c[pa+8>>2];c[oa+12>>2]=c[pa+12>>2];M=M+1|0;if(!((M|0)<4&(m+5|0)>>>0>>0)){x=f;break}else{m=y;x=f}}m=c[oa>>2]|0;u=y+(m<<1)+ja|0;f=c[Q>>2]|0;e:do if(f>>>0<=(y>>>0>>0?y:ma)>>>0){g=f+3|0;Ia=c[o>>2]|0;j=g-Ia|0;t=c[ia>>2]|0;g=g-t|0;if((f|0)==(Ia|0))f=0;else{f:do if((f|0)!=(t|0)){do if(j>>>0<7)f=158663784>>>(j<<2)&15;else{if(g>>>0<7){f=266017486>>>(g<<2)&15;break}if((f|0)==(c[ga>>2]|0)){f=2;break f}if((f|0)==(c[ha>>2]|0)){f=3;break f}f=f+15|0}while(0);if(!f)break e}else f=1;while(0);c[ha>>2]=c[ga>>2];c[ga>>2]=c[ia>>2];c[ia>>2]=c[o>>2];c[o>>2]=c[Q>>2];m=c[oa>>2]|0}}else f=f+15|0;while(0);w=O+16|0;Ia=c[P>>2]|0;j=m^Ia;c[O>>2]=x;c[O+4>>2]=m|Ia<<24;m=O+14|0;if(f>>>0<16){f=f&65535;b[m>>1]=f;m=0}else{N=f+-12|0;Ia=((aa(N|0)|0)^31)+-1|0;Ha=N>>>Ia&1;f=((Ia<<1)+65534|Ha)+16&65535;b[m>>1]=f;m=Ia<<24|N-((Ha|2)<>2]=m;h=f<<16>>16==0;v=O+12|0;do if(x>>>0>=6){if(x>>>0<130){Ia=x+-2|0;g=((aa(Ia|0)|0)^31)+-1|0;g=(g<<1)+(Ia>>>g)+2&65535;break}if(x>>>0<2114){g=((aa(x+-66|0)|0)^31)+10&65535;break}if(x>>>0<6210)g=21;else g=x>>>0<22594?22:23}else g=x&65535;while(0);do if(j>>>0>=10){if(j>>>0<134){Ia=j+-6|0;f=((aa(Ia|0)|0)^31)+-1|0;f=(f<<1)+(Ia>>>f)+4&65535;break}if(j>>>0<2118)f=((aa(j+-70|0)|0)^31)+12&65535;else f=23}else f=j+65534&65535;while(0);m=f&65535;j=g&65535;t=m&7|j<<3&56;if(h&(g&65535)<8&(f&65535)<16)f=((f&65535)<8?t:t|64)&65535;else f=b[88156+((m>>>3)+((j>>>3)*3|0)<<1)>>1]|t&65535;b[v>>1]=f;c[s>>2]=(c[s>>2]|0)+x;f=y+(c[oa>>2]|0)|0;f=f>>>0>>0?f:la;m=y+2|0;while(1){if(m>>>0>=f>>>0)break;Ha=k+(m&l)|0;Ha=(_(d[Ha>>0]|d[Ha+1>>0]<<8|d[Ha+2>>0]<<16|d[Ha+3>>0]<<24,506832829)|0)>>>17;Ia=n+(Ha<<1)|0;c[n+65536+((e[Ia>>1]&63|Ha<<6)<<2)>>2]=m;b[Ia>>1]=(b[Ia>>1]|0)+1<<16>>16;m=m+1|0}m=y+(c[oa>>2]|0)|0;O=w;f=0}c[p>>2]=f+L;c[r>>2]=(c[r>>2]|0)+(M-q>>4);i=qa;return} -function Db(f,j,k,l,m,n,o,p,q,r,t,u,v,w,x,y,z){f=f|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;var A=0,B=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,$=0,ba=0.0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,qa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;Ga=i;i=i+12768|0;Ca=Ga+7760|0;ya=Ga+4928|0;za=Ga+2096|0;O=Ga+12504|0;N=Ga+10968|0;B=Ga;E=Ga+12248|0;D=Ga+10456|0;J=Ga+11544|0;I=Ga+9048|0;L=Ga+11480|0;K=Ga+8920|0;Ba=Ga+8808|0;Q=Ga+8804|0;P=Ga+8800|0;if(m>>>0>0|(m|0)==0&l>>>0>3221225471){Fa=bc(l|0,m|0,30)|0;Fa=l&1073741823|((Fa&1^1)<<30)+1073741824}else Fa=l;if(!n){k=c[y>>2]|0;z=z+(k>>>3)|0;u=d[z>>0]|0;k=cc(3,0,k&7|0)|0;w=C;k=u|k;u=z;a[u>>0]=k;a[u+1>>0]=k>>8;a[u+2>>0]=k>>16;a[u+3>>0]=k>>24;z=z+4|0;a[z>>0]=w;a[z+1>>0]=w>>8;a[z+2>>0]=w>>16;a[z+3>>0]=w>>24;c[y>>2]=(c[y>>2]|0)+9&-8;i=Ga;return}if(!(Fb(j,k,l,m,n,t,u)|0)){c[x>>2]=c[w>>2];c[x+4>>2]=c[w+4>>2];c[x+8>>2]=c[w+8>>2];c[x+12>>2]=c[w+12>>2];bb(o,j,Fa,k,n,y,z);i=Ga;return}Da=a[z>>0]|0;Ea=c[y>>2]|0;Aa=p+4|0;l=c[Aa>>2]|0;if((l|0)>9)if((c[p>>2]|0)==2){A=0;while(1){if((A|0)==(u|0))break;do if((c[v+(A<<4)+4>>2]&16777215|0)!=0?(e[v+(A<<4)+12>>1]|0)>127:0){t=v+(A<<4)+14|0;l=b[t>>1]|0;if((l&65535)>=16){m=v+(A<<4)+8|0;xa=c[m>>2]|0;wa=xa>>>24;l=((l&65535)+-12-(wa<<1)<>>0>=28){va=l+-20|0;ua=(aa(va|0)|0)^31;xa=ua+-1|0;wa=va>>>xa&1;ua=ua+-2|0;b[t>>1]=(((ua<<1)+32766|wa)<<1)+28|va&1;c[m>>2]=ua<<24|(va-((wa|2)<>>1;break}}else{m=v+(A<<4)+8|0;l=l&65535}b[t>>1]=l;c[m>>2]=0}while(0);A=A+1|0}l=c[Aa>>2]|0;m=1;t=12;H=19}else{xa=0;wa=0;H=38}else{m=0;t=0;H=19}do if((H|0)==19){if((l|0)>=3){if((l|0)>=4){xa=m;wa=t;H=38;break}db(o,n,y,z);ac(Ca|0,0,1028)|0;h[Ca+1032>>3]=s;ac(ya|0,0,2820)|0;h[ya+2824>>3]=s;ac(za|0,0,2084)|0;h[za+2088>>3]=s;jb(j,Fa,k,v,u,Ca,ya,za);l=z+((c[y>>2]|0)>>>3)|0;r=d[l>>0]|0;m=l;a[m>>0]=r;a[m+1>>0]=r>>8;a[m+2>>0]=r>>16;a[m+3>>0]=r>>24;l=l+4|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;a[l+3>>0]=0;c[y>>2]=(c[y>>2]|0)+13;l=f+8|0;m=sa[c[f>>2]&1](c[l>>2]|0,11272)|0;if(!m)oa(1);kb(Ca,256,m,O,N,y,z);kb(ya,704,m,J,I,y,z);kb(za,64,m,L,K,y,z);ra[c[f+4>>2]&1](c[l>>2]|0,m);lb(j,Fa,k,v,u,O,N,J,I,L,K,y,z);if(o){u=(c[y>>2]|0)+7|0;c[y>>2]=u&-8;a[z+(u>>>3)>>0]=0}break}db(o,n,y,z);r=z+((c[y>>2]|0)>>>3)|0;Ba=d[r>>0]|0;q=r;a[q>>0]=Ba;a[q+1>>0]=Ba>>8;a[q+2>>0]=Ba>>16;a[q+3>>0]=Ba>>24;r=r+4|0;a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;c[y>>2]=(c[y>>2]|0)+13;if(u>>>0<129){ac(Ca|0,0,1024)|0;t=0;A=Fa;D=0;while(1){if((D|0)==(u|0))break;l=c[v+(D<<4)>>2]|0;m=c[v+(D<<4)+4>>2]|0;B=A;E=l;while(1){if(!E)break;r=Ca+((d[j+(B&k)>>0]|0)<<2)|0;c[r>>2]=(c[r>>2]|0)+1;B=B+1|0;E=E+-1|0}t=t+l|0;A=A+l+(m&16777215)|0;D=D+1|0}$a(f,Ca,t,8,O,N,y,z);Ca=c[y>>2]|0;q=z+(Ca>>>3)|0;f=d[q>>0]|0;Ca=cc(372273155,9593412,Ca&7|0)|0;r=C;Ca=f|Ca;f=q;a[f>>0]=Ca;a[f+1>>0]=Ca>>8;a[f+2>>0]=Ca>>16;a[f+3>>0]=Ca>>24;q=q+4|0;a[q>>0]=r;a[q+1>>0]=r>>8;a[q+2>>0]=r>>16;a[q+3>>0]=r>>24;q=(c[y>>2]|0)+56|0;c[y>>2]=q;q=z+(q>>>3)|0;r=d[q>>0]|0;f=q;a[f>>0]=r;a[f+1>>0]=r>>8;a[f+2>>0]=r>>16;a[f+3>>0]=r>>24;q=q+4|0;a[q>>0]=0;a[q+1>>0]=0;a[q+2>>0]=0;a[q+3>>0]=0;q=(c[y>>2]|0)+3|0;c[y>>2]=q;f=z+(q>>>3)|0;r=d[f>>0]|0;q=cc(57269251,0,q&7|0)|0;Ca=C;q=r|q;r=f;a[r>>0]=q;a[r+1>>0]=q>>8;a[r+2>>0]=q>>16;a[r+3>>0]=q>>24;f=f+4|0;a[f>>0]=Ca;a[f+1>>0]=Ca>>8;a[f+2>>0]=Ca>>16;a[f+3>>0]=Ca>>24;c[y>>2]=(c[y>>2]|0)+28;lb(j,Fa,k,v,u,O,N,404412,86620,405116,88028,y,z)}else{ac(ya|0,0,1028)|0;h[ya+1032>>3]=s;ac(za|0,0,2820)|0;h[za+2824>>3]=s;ac(B|0,0,2084)|0;h[B+2088>>3]=s;jb(j,Fa,k,v,u,ya,za,B);$a(f,ya,c[ya+1024>>2]|0,8,E,D,y,z);$a(f,za,c[za+2816>>2]|0,10,J,I,y,z);$a(f,B,c[B+2080>>2]|0,6,L,K,y,z);lb(j,Fa,k,v,u,E,D,J,I,L,K,y,z)}if(o){u=(c[y>>2]|0)+7|0;c[y>>2]=u&-8;a[z+(u>>>3)>>0]=0}}while(0);if((H|0)==38){ha=Ba+8|0;ia=Ba+12|0;K=Ba+24|0;ga=Ba+28|0;c[Ba>>2]=0;c[Ba+4>>2]=0;c[Ba+8>>2]=0;c[Ba+12>>2]=0;c[Ba+16>>2]=0;c[Ba+20>>2]=0;c[Ba+24>>2]=0;ja=Ba+32|0;ka=Ba+36|0;L=Ba+48|0;c[ga>>2]=0;c[ga+4>>2]=0;c[ga+8>>2]=0;c[ga+12>>2]=0;c[ga+16>>2]=0;c[L>>2]=0;ga=Ba+52|0;la=Ba+56|0;ma=Ba+60|0;na=Ba+72|0;c[ga>>2]=0;c[ga+4>>2]=0;c[ga+8>>2]=0;c[ga+12>>2]=0;c[ga+16>>2]=0;ga=Ba+76|0;qa=Ba+80|0;ta=Ba+88|0;J=Ba+92|0;ua=Ba+96|0;N=Ba+100|0;va=Ba+104|0;O=Ba+108|0;m=(l|0)<10;t=na;A=t+40|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(A|0));do if(m){c[Q>>2]=1;c[P>>2]=0;if(!((l|0)<5|n>>>0<64)){D=Fa+n|0;t=za;A=t+36|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(A|0));B=Fa;while(1){A=B+64|0;if(A>>>0>D>>>0)break;t=d[j+(B&k)>>0]|0;m=B;while(1){m=m+1|0;if(m>>>0>=A>>>0)break;fa=d[j+(m&k)>>0]|0;ea=za+(((c[18900+(t>>>6<<2)>>2]|0)*3|0)+(c[18900+(fa>>>6<<2)>>2]|0)<<2)|0;c[ea>>2]=(c[ea>>2]|0)+1;t=fa}B=B+4096|0}c[Ca>>2]=0;c[Ca+4>>2]=0;c[Ca+8>>2]=0;c[ya>>2]=0;c[ya+4>>2]=0;c[ya+8>>2]=0;c[ya+12>>2]=0;c[ya+16>>2]=0;c[ya+20>>2]=0;m=0;I=0;while(1){if((m|0)==9)break;fa=c[za+(m<<2)>>2]|0;ea=Ca+(((m>>>0)%3|0)<<2)|0;c[ea>>2]=(c[ea>>2]|0)+fa;ea=ya+((m>>>0>5?m+-6|0:m)<<2)|0;c[ea>>2]=(c[ea>>2]|0)+fa;m=m+1|0;I=I+fa|0}D=Ca+12|0;B=Ca;M=0.0;m=0;while(1){A=B+4|0;t=c[B>>2]|0;E=m+t|0;G=+(t>>>0);if(t>>>0<256)F=+g[19516+(t<<2)>>2];else F=+Xb(G);M=M-G*F;if(A>>>0>=D>>>0)break;m=c[A>>2]|0;F=+(m>>>0);if(m>>>0<256)G=+g[19516+(m<<2)>>2];else G=+Xb(F);B=B+8|0;M=M-F*G;m=E+m|0}if(!E)ba=M;else{G=+(E>>>0);if(E>>>0<256)F=+g[19516+(E<<2)>>2];else F=+Xb(G);ba=M+G*F}H=ya+12|0;B=ya;M=0.0;m=0;while(1){A=B+4|0;t=c[B>>2]|0;D=m+t|0;G=+(t>>>0);if(t>>>0<256)F=+g[19516+(t<<2)>>2];else F=+Xb(G);M=M-G*F;if(A>>>0>=H>>>0)break;m=c[A>>2]|0;F=+(m>>>0);if(m>>>0<256)G=+g[19516+(m<<2)>>2];else G=+Xb(F);B=B+8|0;M=M-F*G;m=D+m|0}if(!D)Z=M;else{G=+(D>>>0);if(D>>>0<256)F=+g[19516+(D<<2)>>2];else F=+Xb(G);Z=M+G*F}E=ya+24|0;B=H;M=0.0;m=0;while(1){A=B+4|0;t=c[B>>2]|0;D=m+t|0;G=+(t>>>0);if(t>>>0<256)F=+g[19516+(t<<2)>>2];else F=+Xb(G);M=M-G*F;if(A>>>0>=E>>>0)break;m=c[A>>2]|0;F=+(m>>>0);if(m>>>0<256)G=+g[19516+(m<<2)>>2];else G=+Xb(F);B=B+8|0;M=M-F*G;m=D+m|0}if(!D)R=M;else{G=+(D>>>0);if(D>>>0<256)F=+g[19516+(D<<2)>>2];else F=+Xb(G);R=M+G*F}S=0.0;E=0;while(1){if((E|0)==3)break;t=E*3|0;A=za+(t+3<<2)|0;t=za+(t<<2)|0;M=0.0;m=0;while(1){B=t+4|0;t=c[t>>2]|0;D=m+t|0;G=+(t>>>0);if(t>>>0<256)F=+g[19516+(t<<2)>>2];else F=+Xb(G);F=M-G*F;if(B>>>0>=A>>>0)break;m=c[B>>2]|0;G=+(m>>>0);if(m>>>0<256)M=+g[19516+(m<<2)>>2];else M=+Xb(G);t=B+4|0;M=F-G*M;m=D+m|0}if(D){M=+(D>>>0);if(D>>>0<256)G=+g[19516+(D<<2)>>2];else G=+Xb(M);F=F+M*G}S=S+F;E=E+1|0}if(!I)pa(406445,406053,339,406456);F=1.0/+(I>>>0);ba=ba*F;G=(Z+R)*F;F=(l|0)<7?ba*10.0:S*F;do if(!(ba-G<.2&ba-F<.2))if(G-F<.02){c[Q>>2]=2;c[P>>2]=18916;break}else{c[Q>>2]=3;c[P>>2]=19172;break}else c[Q>>2]=1;while(0);fa=c[P>>2]|0;W=fa;if(fa){fa=c[Q>>2]|0;l=0;m=0;while(1){if((m|0)==(u|0))break;l=l+(c[v+(m<<4)>>2]|0)|0;m=m+1|0}E=(l>>>9)+1|0;c[Ca>>2]=256;c[Ca+4>>2]=fa;H=256/(fa>>>0)|0;c[Ca+8>>2]=H;c[Ca+12>>2]=512;h[Ca+16>>3]=400.0;c[Ca+24>>2]=0;c[Ca+28>>2]=Ba;c[Ca+36>>2]=J;ca=Ca+40|0;c[ca>>2]=512;da=Ca+44|0;c[da>>2]=0;ea=Ca+48|0;c[ea>>2]=0;c[Ca+64>>2]=0;H=H+1|0;H=E>>>0>>0?E:H;D=Ba+16|0;l=c[D>>2]|0;if(l>>>0>>0){B=(l|0)==0?E:l;while(1){if(B>>>0>=E>>>0)break;B=B<<1}m=f+8|0;t=sa[c[f>>2]&1](c[m>>2]|0,B)|0;if(!t)oa(1);A=c[D>>2]|0;l=Ba+8|0;if(A)dc(t|0,c[l>>2]|0,A|0)|0;ra[c[f+4>>2]&1](c[m>>2]|0,c[l>>2]|0);c[l>>2]=t;c[D>>2]=B}B=Ba+20|0;l=c[B>>2]|0;if(l>>>0>>0){A=(l|0)==0?E:l;while(1){if(A>>>0>=E>>>0)break;A=A<<1}D=f+8|0;m=sa[c[f>>2]&1](c[D>>2]|0,A<<2)|0;if(!m)oa(1);t=c[B>>2]|0;l=Ba+12|0;if(t)dc(m|0,c[l>>2]|0,t<<2|0)|0;ra[c[f+4>>2]&1](c[D>>2]|0,c[l>>2]|0);c[l>>2]=m;c[B>>2]=A;$=f}else{$=f;D=f+8|0}c[Ba+4>>2]=E;l=sa[c[$>>2]&1](c[D>>2]|0,fa<<4)|0;if(!l)oa(1);Y=Ca+60|0;c[Y>>2]=l;if(c[ta>>2]|0)pa(407776,406802,255,407793);m=_(H,fa)|0;c[J>>2]=m;m=sa[c[$>>2]&1](c[D>>2]|0,m*1040|0)|0;l=m;if(!m)oa(1);c[ta>>2]=l;X=Ca+32|0;c[X>>2]=l;l=0;while(1){if((l|0)==(fa|0))break;ac(m+(l*1040|0)|0,0,1024)|0;c[m+(l*1040|0)+1024>>2]=0;h[m+(l*1040|0)+1032>>3]=s;l=l+1|0}c[Ca+56>>2]=0;c[Ca+52>>2]=0;Pb(f,ya,u,K,ua,N);Qb(f,za,u,L,va,O);Q=ya+40|0;T=ya+24|0;U=ya+36|0;V=ya+32|0;L=za+40|0;N=za+24|0;O=za+36|0;p=za+32|0;t=Fa;m=q;l=r;P=0;while(1){if((P|0)==(u|0))break;H=c[v+(P<<4)>>2]|0;I=c[v+(P<<4)+4>>2]|0;A=c[v+(P<<4)+12>>2]|0;J=A&65535;K=A>>>16;E=c[Q>>2]|0;B=c[T>>2]|0;A=B+(E*2832|0)+((A&65535)<<2)|0;c[A>>2]=(c[A>>2]|0)+1;E=B+(E*2832|0)+2816|0;c[E>>2]=(c[E>>2]|0)+1;E=(c[U>>2]|0)+1|0;c[U>>2]=E;if((E|0)==(c[V>>2]|0)){Sb(ya,0);E=t;B=H}else{E=t;B=H}while(1){if(!B)break;A=a[j+(E&k)>>0]|0;l=(c[ea>>2]|0)+(c[W+(((a[406969+(m&255)>>0]|a[406969+(l&255|256)>>0])&255)<<2)>>2]|0)|0;Ha=c[X>>2]|0;Ia=Ha+(l*1040|0)+((A&255)<<2)|0;c[Ia>>2]=(c[Ia>>2]|0)+1;l=Ha+(l*1040|0)+1024|0;c[l>>2]=(c[l>>2]|0)+1;l=(c[da>>2]|0)+1|0;c[da>>2]=l;if((l|0)==(c[ca>>2]|0))Ub(f,Ca,0);l=m;E=E+1|0;m=A;B=B+-1|0}Ia=I&16777215;t=t+H+Ia|0;do if(Ia){l=a[j+(t+-2&k)>>0]|0;m=a[j+(t+-1&k)>>0]|0;if((J&65535)<=127)break;Ia=c[L>>2]|0;Ha=c[N>>2]|0;K=Ha+(Ia*2096|0)+(K<<2)|0;c[K>>2]=(c[K>>2]|0)+1;Ia=Ha+(Ia*2096|0)+2080|0;c[Ia>>2]=(c[Ia>>2]|0)+1;Ia=(c[O>>2]|0)+1|0;c[O>>2]=Ia;if((Ia|0)!=(c[p>>2]|0))break;Tb(za,0)}while(0);P=P+1|0}Ub(f,Ca,1);ra[c[f+4>>2]&1](c[D>>2]|0,c[Y>>2]|0);c[Y>>2]=0;Sb(ya,1);Tb(za,1);if(c[na>>2]|0)pa(406853,406802,473,407737);l=c[Ba>>2]|0;c[ga>>2]=l<<6;l=sa[c[$>>2]&1](c[D>>2]|0,l<<8)|0;if(!l)oa(1);c[na>>2]=l;t=0;while(1){if(t>>>0>=(c[Ba>>2]|0)>>>0)break;l=_(t,fa)|0;m=t<<6;A=0;while(1){if((A|0)==64)break;c[(c[na>>2]|0)+(m+A<<2)>>2]=l+(c[W+(A<<2)>>2]|0);A=A+1|0}t=t+1|0}l=2;break}}l=0;m=0;while(1){if((m|0)==(u|0))break;l=l+(c[v+(m<<4)>>2]|0)|0;m=m+1|0}H=(l>>>9)+1|0;E=H>>>0<257?H:257;c[Ca>>2]=256;c[Ca+4>>2]=512;h[Ca+8>>3]=400.0;c[Ca+16>>2]=0;I=Ca+20|0;c[I>>2]=Ba;c[Ca+28>>2]=J;T=Ca+32|0;c[T>>2]=512;U=Ca+36|0;c[U>>2]=0;V=Ca+40|0;c[V>>2]=0;c[Ca+72>>2]=0;D=Ba+16|0;l=c[D>>2]|0;if(l>>>0>>0){B=(l|0)==0?H:l;while(1){if(B>>>0>=H>>>0)break;B=B<<1}m=f+8|0;t=sa[c[f>>2]&1](c[m>>2]|0,B)|0;if(!t)oa(1);A=c[D>>2]|0;l=Ba+8|0;if(A)dc(t|0,c[l>>2]|0,A|0)|0;ra[c[f+4>>2]&1](c[m>>2]|0,c[l>>2]|0);c[l>>2]=t;c[D>>2]=B}D=Ba+20|0;l=c[D>>2]|0;if(l>>>0>>0){B=(l|0)==0?H:l;while(1){if(B>>>0>=H>>>0)break;B=B<<1}m=f+8|0;t=sa[c[f>>2]&1](c[m>>2]|0,B<<2)|0;if(!t)oa(1);A=c[D>>2]|0;l=Ba+12|0;if(A)dc(t|0,c[l>>2]|0,A<<2|0)|0;ra[c[f+4>>2]&1](c[m>>2]|0,c[l>>2]|0);c[l>>2]=t;c[D>>2]=B}c[(c[I>>2]|0)+4>>2]=H;if(c[ta>>2]|0)pa(407776,407818,70,407905);c[J>>2]=E;l=sa[c[f>>2]&1](c[f+8>>2]|0,E*1040|0)|0;m=l;if(!l)oa(1);c[ta>>2]=m;Q=Ca+24|0;c[Q>>2]=m;ac(l|0,0,1024)|0;c[l+1024>>2]=0;h[l+1032>>3]=s;c[Ca+48>>2]=0;c[Ca+44>>2]=0;Pb(f,ya,u,K,ua,N);Qb(f,za,u,L,va,O);D=ya+40|0;E=ya+24|0;H=ya+36|0;I=ya+32|0;J=za+40|0;K=za+24|0;L=za+36|0;N=za+32|0;l=Fa;P=0;while(1){if((P|0)==(u|0))break;t=c[v+(P<<4)>>2]|0;A=c[v+(P<<4)+4>>2]|0;ga=c[v+(P<<4)+12>>2]|0;O=ga&65535;p=ga>>>16;Ia=c[D>>2]|0;Ha=c[E>>2]|0;ga=Ha+(Ia*2832|0)+((ga&65535)<<2)|0;c[ga>>2]=(c[ga>>2]|0)+1;Ia=Ha+(Ia*2832|0)+2816|0;c[Ia>>2]=(c[Ia>>2]|0)+1;Ia=(c[H>>2]|0)+1|0;c[H>>2]=Ia;if((Ia|0)==(c[I>>2]|0)){Sb(ya,0);m=l;B=t}else{m=l;B=t}while(1){if(!B)break;Ia=c[V>>2]|0;Ha=c[Q>>2]|0;ga=Ha+(Ia*1040|0)+((d[j+(m&k)>>0]|0)<<2)|0;c[ga>>2]=(c[ga>>2]|0)+1;Ia=Ha+(Ia*1040|0)+1024|0;c[Ia>>2]=(c[Ia>>2]|0)+1;Ia=(c[U>>2]|0)+1|0;c[U>>2]=Ia;if((Ia|0)==(c[T>>2]|0))Rb(Ca,0);m=m+1|0;B=B+-1|0}Ia=A&16777215;l=l+t+Ia|0;if((Ia|0)!=0&(O&65535)>127?(Ia=c[J>>2]|0,Ha=c[K>>2]|0,ga=Ha+(Ia*2096|0)+(p<<2)|0,c[ga>>2]=(c[ga>>2]|0)+1,Ia=Ha+(Ia*2096|0)+2080|0,c[Ia>>2]=(c[Ia>>2]|0)+1,Ia=(c[L>>2]|0)+1|0,c[L>>2]=Ia,(Ia|0)==(c[N>>2]|0)):0)Tb(za,0);P=P+1|0}Rb(Ca,1);Sb(ya,1);Tb(za,1);l=2}else{l=Wb(j,Fa,k,n)|0;l=l?2:3;Nb(f,j,Fa,k,p,q,r,v,u,l,Ba)}while(0);if((c[Aa>>2]|0)>3)Ob(wa,xa,Ba);ab(f,j,Fa,n,k,q,r,o,wa,xa,l,v,u,Ba,y,z);Ha=f+4|0;Ia=f+8|0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[Ba+8>>2]|0);c[ha>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[ia>>2]|0);c[ia>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[Ba+32>>2]|0);c[ja>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[ka>>2]|0);c[ka>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[Ba+56>>2]|0);c[la>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[ma>>2]|0);c[ma>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[na>>2]|0);c[na>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[qa>>2]|0);c[qa>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[ta>>2]|0);c[ta>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[ua>>2]|0);c[ua>>2]=0;ra[c[Ha>>2]&1](c[Ia>>2]|0,c[va>>2]|0);c[va>>2]=0}if((n+4|0)>>>0>=(c[y>>2]|0)>>>3>>>0){i=Ga;return};c[x>>2]=c[w>>2];c[x+4>>2]=c[w+4>>2];c[x+8>>2]=c[w+8>>2];c[x+12>>2]=c[w+12>>2];a[z>>0]=Da;c[y>>2]=Ea&255;bb(o,j,Fa,k,n,y,z);i=Ga;return}function Eb(b){b=b|0;var e=0,f=0,g=0,h=0,i=0;f=b+192|0;g=d[f>>0]|0;i=b+193|0;h=d[i>>0]|0;a[f>>0]=0;a[i>>0]=0;i=6<>2]|0;if(!e){e=b+5228|0;c[f>>2]=e}else e=e+(c[b+5220>>2]|0)|0;a[e>>0]=g|i;if((h+6|0)>>>0>8)a[e+1>>0]=i>>>8;b=b+5220|0;c[b>>2]=(c[b>>2]|0)+((h+13|0)>>>3);return}function Fb(a,b,e,f,h,j,k){a=a|0;b=b|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0;s=i;i=i+1024|0;q=s;if(((h>>>8)+2|0)>>>0>k>>>0?(l=+(h>>>0),+(j>>>0)>l*.99):0){ac(q|0,0,1024)|0;l=l*7.92;j=((h+12|0)>>>0)/13|0;f=e;k=0;while(1){if(k>>>0>=j>>>0)break;e=q+((d[a+(f&b)>>0]|0)<<2)|0;c[e>>2]=(c[e>>2]|0)+1;f=f+13|0;k=k+1|0}r=l/13.0;h=q+1024|0;f=q;l=0.0;e=0;while(1){if(f>>>0>=h>>>0)break;k=c[f>>2]|0;m=+(k>>>0);if(k>>>0<256)p=+g[19516+(k<<2)>>2];else p=+Xb(m);j=c[f+4>>2]|0;n=+(j>>>0);if(j>>>0<256)o=+g[19516+(j<<2)>>2];else o=+Xb(n);f=f+8|0;l=l-m*p-n*o;e=e+k+j|0}n=+(e>>>0);if(!e)o=n;else{if(e>>>0<256)m=+g[19516+(e<<2)>>2];else m=+Xb(n);o=n;l=l+n*m}if((lr){q=0;i=s;return q|0}}q=1;i=s;return q|0}function Gb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+64|0;l=m;if((g|0)>=16)pa(406658,406674,26,406709);c[l>>2]=-1;h=0;a:while(1){j=b[e+(d<<3)+4>>1]|0;if(j<<16>>16>-1){k=h+1|0;if((h|0)>=(g|0)){h=0;d=12;break}c[l+(k<<2)>>2]=b[e+(d<<3)+6>>1];h=k;d=j<<16>>16;continue}a[f+(b[e+(d<<3)+6>>1]|0)>>0]=h;while(1){if((h|0)<=-1){h=1;d=12;break a}if((c[l+(h<<2)>>2]|0)!=-1)break;h=h+-1|0}k=l+(h<<2)|0;d=c[k>>2]|0;c[k>>2]=-1}if((d|0)==12){i=m;return h|0}return 0}function Hb(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=i;i=i+16|0;u=x+8|0;v=x;t=1;while(1){j=e;s=0;a:while(1){do{if(!j)break a;j=j+-1|0;k=c[d+(j<<2)>>2]|0}while((k|0)==0);c[g+(s<<3)>>2]=k>>>0>t>>>0?k:t;b[g+(s<<3)+4>>1]=-1;b[g+(s<<3)+6>>1]=j;s=s+1|0}if((s|0)==1)break;b:do if(s>>>0<13){o=1;while(1){if(o>>>0>=s>>>0)break b;n=g+(o<<3)|0;m=c[n>>2]|0;n=c[n+4>>2]|0;l=u;c[l>>2]=m;c[l+4>>2]=n;l=o;while(1){j=l;l=l+-1|0;k=g+(l<<3)|0;if(!(Kb(u,k)|0))break;p=k;q=c[p+4>>2]|0;r=g+(j<<3)|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;if(!l){j=0;break}}r=g+(j<<3)|0;c[r>>2]=m;c[r+4>>2]=n;o=o+1|0}}else{p=s>>>0<57?2:0;while(1){if((p|0)==6)break b;j=c[19428+(p<<2)>>2]|0;q=j;while(1){if(q>>>0>=s>>>0)break;l=g+(q<<3)|0;k=c[l>>2]|0;l=c[l+4>>2]|0;o=v;c[o>>2]=k;c[o+4>>2]=l;o=q;while(1){if(o>>>0>>0)break;m=o-j|0;n=g+(m<<3)|0;if(!(Kb(v,n)|0))break;y=n;n=c[y+4>>2]|0;r=g+(o<<3)|0;c[r>>2]=c[y>>2];c[r+4>>2]=n;o=m}y=g+(o<<3)|0;c[y>>2]=k;c[y+4>>2]=l;q=q+1|0}p=p+1|0}}while(0);n=g+(s<<3)|0;c[n>>2]=-1;c[n+4>>2]=-1;n=s+1|0;r=g+(n<<3)|0;c[r>>2]=-1;c[r+4>>2]=-1;r=s<<1;m=0;j=s;while(1){j=j+-1|0;if(!j)break;l=c[g+(m<<3)>>2]|0;k=c[g+(n<<3)>>2]|0;if(l>>>0>k>>>0){q=n+1|0;k=c[g+(q<<3)>>2]|0;p=m;o=n}else{p=m+1|0;l=c[g+(p<<3)>>2]|0;q=n;o=m}if(l>>>0>k>>>0){m=p;n=q+1|0;l=q}else{k=l;m=p+1|0;n=q;l=p}y=r-j|0;c[g+(y<<3)>>2]=(c[g+(o<<3)>>2]|0)+k;b[g+(y<<3)+4>>1]=o;b[g+(y<<3)+6>>1]=l;y=g+(y+1<<3)|0;c[y>>2]=-1;c[y+4>>2]=-1}if(Gb(r+-1|0,g,h,f)|0){w=36;break}t=t<<1}if((w|0)==36){i=x;return}a[h+(b[g+6>>1]|0)>>0]=1;i=x;return}function Ib(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=0;g=0;while(1){if((g|0)==(b|0))break;f=(c[d+(g<<2)>>2]|0)==0?f:f+1|0;g=g+1|0}if(f>>>0<16)return;else k=b;while(1){if(!k){l=55;break}b=k+-1|0;if(!(c[d+(b<<2)>>2]|0))k=b;else break}if((l|0)==55)return;g=0;b=1073741824;h=0;while(1){if((h|0)==(k|0))break;f=c[d+(h<<2)>>2]|0;if(f){g=g+1|0;b=b>>>0>f>>>0?f:b}h=h+1|0}if(g>>>0<5)return;a:do if(b>>>0<4&(k-g|0)>>>0<6){b=k+-1|0;f=1;while(1){if(f>>>0>=b>>>0)break a;if(((c[d+(f+-1<<2)>>2]|0)!=0?(i=d+(f<<2)|0,(c[i>>2]|0)==0):0)?(c[d+(f+1<<2)>>2]|0)!=0:0)c[i>>2]=1;f=f+1|0}}while(0);if(g>>>0<28)return;ac(e|0,0,k|0)|0;b=0;i=0;f=c[d>>2]|0;while(1){if(i>>>0>k>>>0)break;g=(i|0)==(k|0);if(!g?(c[d+(i<<2)>>2]|0)==(f|0):0)b=b+1|0;else{if(!f){if(b>>>0>4){h=0;l=29}}else if(b>>>0>6){h=0;l=29}b:do if((l|0)==29)while(1){l=0;if((h|0)==(b|0))break b;a[e+(i-h+-1)>>0]=1;h=h+1|0;l=29}while(0);if(g)b=1;else{b=1;f=c[d+(i<<2)>>2]|0}}i=i+1|0}i=k+-2|0;f=(((c[d>>2]|0)+(c[d+4>>2]|0)+(c[d+8>>2]|0)<<8>>>0)/3|0)+420|0;j=0;g=0;b=0;while(1){if(j>>>0>k>>>0)break;h=(j|0)==(k|0);do if(!h?(a[e+j>>0]|0)==0:0){if((j|0)!=0?(a[e+(j+-1)>>0]|0)!=0:0){l=42;break}if(((c[d+(j<<2)>>2]<<8)-f+1240|0)>>>0>2479)l=42}else l=42;while(0);do if((l|0)==42){l=0;if(!(g>>>0<=3?!(g>>>0>2&(b|0)==0):0))l=44;c:do if((l|0)==44){l=0;f=((b+(g>>>1)|0)>>>0)/(g>>>0)|0;b=(b|0)==0?0:(f|0)==0?1:f;f=0;while(1){if((f|0)==(g|0))break c;c[d+(j-f+-1<<2)>>2]=b;f=f+1|0}}while(0);if(j>>>0>>0){f=(((c[d+(j<<2)>>2]|0)+(c[d+(j+1<<2)>>2]|0)+(c[d+(j+2<<2)>>2]|0)<<8>>>0)/3|0)+420|0;g=0;b=0;break}if(j>>>0>>0){f=c[d+(j<<2)>>2]<<8;g=0;b=0}else{f=0;g=0;b=0}}while(0);g=g+1|0;if(!h){b=b+(c[d+(j<<2)>>2]|0)|0;if(g>>>0>3){f=(((b<<8)+(g>>>1)|0)>>>0)/(g>>>0)|0;f=(g|0)==4?f+120|0:f}}j=j+1|0}return}function Jb(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+64|0;l=p+32|0;o=p;j=l;k=j+32|0;do{b[j>>1]=0;j=j+2|0}while((j|0)<(k|0));j=0;while(1){if((j|0)==(g|0))break;n=l+((d[f+j>>0]|0)<<1)|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;j=j+1|0}b[l>>1]=0;b[o>>1]=0;j=0;k=1;while(1){if((k|0)==16){n=0;break}n=j+(e[l+(k+-1<<1)>>1]|0)<<1;b[o+(k<<1)>>1]=n;j=n;k=k+1|0}while(1){if((n|0)==(g|0))break;j=a[f+n>>0]|0;if(j<<24>>24){k=j&255;j=o+(k<<1)|0;l=b[j>>1]|0;b[j>>1]=l+1<<16>>16;j=l;l=c[19452+((l&15)<<2)>>2]|0;m=4;while(1){if(m>>>0>=k>>>0)break;q=(j&65535)>>>4;j=q;l=l<<4|c[19452+((q&15)<<2)>>2];m=m+4|0}b[h+(n<<1)>>1]=l>>>(0-k&3)}n=n+1|0}i=p;return}function Kb(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;f=c[d>>2]|0;if((e|0)==(f|0)){d=(b[a+6>>1]|0)>(b[d+6>>1]|0);return d|0}else{d=e>>>0>>0;return d|0}return 0}function Lb(a,b){a=a|0;b=b|0;return Yb(b)|0}function Mb(a,b){a=a|0;b=b|0;Zb(b);return}function Nb(f,g,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=i;i=i+2096|0;W=Z;Za(f,o,p,g,j,k,l,r,r+24|0,r+48|0);Y=f+8|0;R=sa[c[f>>2]&1](c[Y>>2]|0,c[r>>2]<<2)|0;if(!R)oa(1);l=0;while(1){t=c[r>>2]|0;if(l>>>0>=t>>>0)break;c[R+(l<<2)>>2]=q;l=l+1|0}U=r+48|0;u=c[U>>2]|0;T=sa[c[f>>2]&1](c[Y>>2]|0,t*66560|0)|0;if(!T)oa(1);l=t<<6;q=0;while(1){if((q|0)==(l|0))break;ac(T+(q*1040|0)|0,0,1024)|0;c[T+(q*1040|0)+1024>>2]=0;h[T+(q*1040|0)+1032>>3]=s;q=q+1|0}v=r+96|0;if(c[v>>2]|0)pa(406774,406802,70,406832);t=c[r+24>>2]|0;l=r+100|0;c[l>>2]=t;t=sa[c[f>>2]&1](c[Y>>2]|0,t*2832|0)|0;if(!t)oa(1);c[v>>2]=t;l=c[l>>2]|0;q=0;while(1){if((q|0)==(l|0))break;ac(t+(q*2832|0)|0,0,2816)|0;c[t+(q*2832|0)+2816>>2]=0;h[t+(q*2832|0)+2824>>3]=s;q=q+1|0}X=sa[c[f>>2]&1](c[Y>>2]|0,u*8384|0)|0;if(!X)oa(1);l=u<<2;q=0;while(1){if((q|0)==(l|0))break;ac(X+(q*2096|0)|0,0,2080)|0;c[X+(q*2096|0)+2080>>2]=0;h[X+(q*2096|0)+2088>>3]=s;q=q+1|0}l=c[r+12>>2]|0;if(!l)u=0;else u=c[l>>2]|0;l=c[r+36>>2]|0;if(!l)q=0;else q=c[l>>2]|0;l=c[r+60>>2]|0;if(!l)l=0;else l=c[l>>2]|0;P=r+32|0;Q=r+36|0;K=c[v>>2]|0;L=r+8|0;M=r+12|0;N=r+56|0;O=r+60|0;v=n;z=0;t=0;A=0;y=0;C=0;B=0;J=0;while(1){if((J|0)==(p|0))break;if(!q){y=y+1|0;I=d[(c[P>>2]|0)+y>>0]|0;q=c[(c[Q>>2]|0)+(y<<2)>>2]|0}else I=A;G=o+(J<<4)+12|0;F=K+(I*2832|0)+((e[G>>1]|0)<<2)|0;c[F>>2]=(c[F>>2]|0)+1;F=K+(I*2832|0)+2816|0;c[F>>2]=(c[F>>2]|0)+1;F=c[o+(J<<4)>>2]|0;E=v;H=C;n=u;C=j;D=F;while(1){if(!D)break;if(!n){B=B+1|0;A=d[(c[L>>2]|0)+B>>0]|0;u=c[(c[M>>2]|0)+(B<<2)>>2]|0}else{A=H;u=n}n=u+-1|0;v=A<<6;switch(c[R+(A<<2)>>2]|0){case 0:{u=m&63;break}case 1:{u=(m&255)>>>2;break}case 2:{u=a[406969+(m&255)>>0]|a[406969+(E&255|256)>>0];break}case 3:{u=((d[407481+(m&255)>>0]|0)<<3)+(d[407481+(E&255)>>0]|0)&255;break}default:u=0}E=v+(u&255)|0;H=g+(C&k)|0;v=T+(E*1040|0)+((d[H>>0]|0)<<2)|0;c[v>>2]=(c[v>>2]|0)+1;E=T+(E*1040|0)+1024|0;c[E>>2]=(c[E>>2]|0)+1;E=m;m=a[H>>0]|0;H=A;C=C+1|0;D=D+-1|0}q=q+-1|0;D=c[o+(J<<4)+4>>2]&16777215;j=j+F+D|0;if(D){C=a[g+(j+-2&k)>>0]|0;m=a[g+(j+-1&k)>>0]|0;v=b[G>>1]|0;if((v&65535)>127){if(!l){A=t+1|0;z=d[(c[N>>2]|0)+A>>0]|0;l=c[(c[O>>2]|0)+(A<<2)>>2]|0}else A=t;l=l+-1|0;u=z<<2;G=v&65535;t=G&7;switch(G>>>6|0){case 7:case 4:case 2:case 0:{t=t>>>0<3?t:3;break}default:t=3}v=u+t|0;u=X+(v*2096|0)+((e[o+(J<<4)+14>>1]|0)<<2)|0;c[u>>2]=(c[u>>2]|0)+1;v=X+(v*2096|0)+2080|0;c[v>>2]=(c[v>>2]|0)+1;v=C;u=z;t=A}else{v=C;u=z}}else{v=E;u=z}z=u;A=I;C=H;u=n;J=J+1|0}H=f+4|0;ra[c[H>>2]&1](c[Y>>2]|0,R);t=r+72|0;if(c[t>>2]|0)pa(406853,406802,86,406832);l=c[r>>2]|0;q=r+76|0;c[q>>2]=l<<6;l=sa[c[f>>2]&1](c[Y>>2]|0,l<<8)|0;if(!l)oa(1);c[t>>2]=l;l=r+88|0;if(c[l>>2]|0)pa(406882,406802,92,406832);j=c[q>>2]|0;G=r+92|0;c[G>>2]=j;j=sa[c[f>>2]&1](c[Y>>2]|0,j*1040|0)|0;if(!j)oa(1);c[l>>2]=j;F=c[q>>2]|0;l=c[t>>2]|0;C=F<<2;n=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!n)oa(1);D=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!D)oa(1);v=sa[c[f>>2]&1](c[Y>>2]|0,49176)|0;if(!v)oa(1);q=0;while(1){if((q|0)==(F|0))break;c[n+(q<<2)>>2]=1;q=q+1|0}E=l;l=0;while(1){if((l|0)==(F|0))break;g=T+(l*1040|0)|0;dc(j+(l*1040|0)|0,g|0,1040)|0;h[j+(l*1040|0)+1032>>3]=+Wa(g);c[E+(l<<2)>>2]=l;l=l+1|0}u=0;q=0;while(1){if(F>>>0<=q>>>0)break;l=F-q|0;l=l>>>0<64?l:64;t=0;while(1){if((t|0)==(l|0))break;c[D+(u+t<<2)>>2]=q+t;t=t+1|0}u=u+(pb(j,n,E+(q<<2)|0,D+(u<<2)|0,v,l,l,256,2048)|0)|0;q=q+64|0}l=u<<6;t=_(u>>>1,u)|0;t=l>>>0>>0?l:t;l=t+1|0;do if(l>>>0>2048){q=2048;while(1){if(q>>>0>=l>>>0)break;q=q<<1}l=sa[c[f>>2]&1](c[Y>>2]|0,q*24|0)|0;if(!l)oa(1);else{dc(l|0,v|0,49152)|0;ra[c[H>>2]&1](c[Y>>2]|0,v);S=l;break}}else S=v;while(0);B=pb(j,n,E,D,S,u,F,256,t)|0;ra[c[H>>2]&1](c[Y>>2]|0,S);ra[c[H>>2]&1](c[Y>>2]|0,n);m=W+1024|0;y=W+1024|0;A=0;while(1){if((A|0)==(F|0)){l=0;break}t=c[((A|0)==0?E:E+(A+-1<<2)|0)>>2]|0;l=T+(A*1040|0)|0;z=T+(A*1040|0)+1024|0;if(!(c[z>>2]|0))w=0.0;else{dc(W|0,l|0,1040)|0;c[y>>2]=(c[y>>2]|0)+(c[j+(t*1040|0)+1024>>2]|0);q=0;while(1){if((q|0)==256)break;S=W+(q<<2)|0;c[S>>2]=(c[S>>2]|0)+(c[j+(t*1040|0)+(q<<2)>>2]|0);q=q+1|0}w=+Wa(W);w=w-+h[j+(t*1040|0)+1032>>3]}q=t;n=0;while(1){if((n|0)==(B|0))break;v=D+(n<<2)|0;t=c[v>>2]|0;if(!(c[z>>2]|0))x=0.0;else{dc(W|0,l|0,1040)|0;c[m>>2]=(c[m>>2]|0)+(c[j+(t*1040|0)+1024>>2]|0);u=0;while(1){if((u|0)==256)break;S=W+(u<<2)|0;c[S>>2]=(c[S>>2]|0)+(c[j+(t*1040|0)+(u<<2)>>2]|0);u=u+1|0}x=+Wa(W);x=x-+h[j+(t*1040|0)+1032>>3]}if(x>2]|0}n=n+1|0}c[E+(A<<2)>>2]=q;A=A+1|0}while(1){if((l|0)==(B|0)){q=0;break}S=c[D+(l<<2)>>2]|0;ac(j+(S*1040|0)|0,0,1024)|0;c[j+(S*1040|0)+1024>>2]=0;h[j+(S*1040|0)+1032>>3]=s;l=l+1|0}while(1){if((q|0)==(F|0))break;l=c[E+(q<<2)>>2]|0;t=j+(l*1040|0)+1024|0;c[t>>2]=(c[t>>2]|0)+(c[T+(q*1040|0)+1024>>2]|0);t=0;while(1){if((t|0)==256)break;S=j+(l*1040|0)+(t<<2)|0;c[S>>2]=(c[S>>2]|0)+(c[T+(q*1040|0)+(t<<2)>>2]|0);t=t+1|0}q=q+1|0}ra[c[H>>2]&1](c[Y>>2]|0,D);m=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!m)oa(1);l=0;while(1){if((l|0)==(F|0)){l=0;t=0;break}c[m+(l<<2)>>2]=-1;l=l+1|0}while(1){if((t|0)==(F|0))break;q=m+(c[E+(t<<2)>>2]<<2)|0;if((c[q>>2]|0)==-1){c[q>>2]=l;l=l+1|0}t=t+1|0}n=sa[c[f>>2]&1](c[Y>>2]|0,l*1040|0)|0;if(!n)oa(1);u=0;v=0;while(1){if((v|0)==(F|0))break;t=E+(v<<2)|0;l=c[t>>2]|0;q=c[m+(l<<2)>>2]|0;if((q|0)==(u|0)){dc(n+(u*1040|0)|0,j+(l*1040|0)|0,1040)|0;q=c[m+(c[t>>2]<<2)>>2]|0;l=u+1|0}else l=u;c[t>>2]=q;u=l;v=v+1|0}ra[c[H>>2]&1](c[Y>>2]|0,m);l=0;while(1){if((l|0)==(u|0))break;dc(j+(l*1040|0)|0,n+(l*1040|0)|0,1040)|0;l=l+1|0}ra[c[H>>2]&1](c[Y>>2]|0,n);c[G>>2]=u;ra[c[H>>2]&1](c[Y>>2]|0,T);t=r+80|0;if(c[t>>2]|0)pa(406910,406802,106,406832);l=c[U>>2]|0;q=r+84|0;c[q>>2]=l<<2;l=sa[c[f>>2]&1](c[Y>>2]|0,l<<4)|0;if(!l)oa(1);c[t>>2]=l;l=r+104|0;if(c[l>>2]|0)pa(406940,406802,112,406832);j=c[q>>2]|0;G=r+108|0;c[G>>2]=j;j=sa[c[f>>2]&1](c[Y>>2]|0,j*2096|0)|0;if(!j)oa(1);c[l>>2]=j;F=c[q>>2]|0;l=c[t>>2]|0;C=F<<2;n=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!n)oa(1);D=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!D)oa(1);v=sa[c[f>>2]&1](c[Y>>2]|0,49176)|0;if(!v)oa(1);q=0;while(1){if((q|0)==(F|0))break;c[n+(q<<2)>>2]=1;q=q+1|0}E=l;l=0;while(1){if((l|0)==(F|0))break;r=X+(l*2096|0)|0;dc(j+(l*2096|0)|0,r|0,2096)|0;h[j+(l*2096|0)+2088>>3]=+Ya(r);c[E+(l<<2)>>2]=l;l=l+1|0}u=0;q=0;while(1){if(F>>>0<=q>>>0)break;l=F-q|0;l=l>>>0<64?l:64;t=0;while(1){if((t|0)==(l|0))break;c[D+(u+t<<2)>>2]=q+t;t=t+1|0}u=u+(tb(j,n,E+(q<<2)|0,D+(u<<2)|0,v,l,l,256,2048)|0)|0;q=q+64|0}l=u<<6;t=_(u>>>1,u)|0;t=l>>>0>>0?l:t;l=t+1|0;do if(l>>>0>2048){q=2048;while(1){if(q>>>0>=l>>>0)break;q=q<<1}l=sa[c[f>>2]&1](c[Y>>2]|0,q*24|0)|0;if(!l)oa(1);else{dc(l|0,v|0,49152)|0;ra[c[H>>2]&1](c[Y>>2]|0,v);V=l;break}}else V=v;while(0);B=tb(j,n,E,D,V,u,F,256,t)|0;ra[c[H>>2]&1](c[Y>>2]|0,V);ra[c[H>>2]&1](c[Y>>2]|0,n);m=W+2080|0;y=W+2080|0;A=0;while(1){if((A|0)==(F|0)){l=0;break}t=c[((A|0)==0?E:E+(A+-1<<2)|0)>>2]|0;l=X+(A*2096|0)|0;z=X+(A*2096|0)+2080|0;if(!(c[z>>2]|0))w=0.0;else{dc(W|0,l|0,2096)|0;c[y>>2]=(c[y>>2]|0)+(c[j+(t*2096|0)+2080>>2]|0);q=0;while(1){if((q|0)==520)break;V=W+(q<<2)|0;c[V>>2]=(c[V>>2]|0)+(c[j+(t*2096|0)+(q<<2)>>2]|0);q=q+1|0}w=+Ya(W);w=w-+h[j+(t*2096|0)+2088>>3]}q=t;n=0;while(1){if((n|0)==(B|0))break;v=D+(n<<2)|0;t=c[v>>2]|0;if(!(c[z>>2]|0))x=0.0;else{dc(W|0,l|0,2096)|0;c[m>>2]=(c[m>>2]|0)+(c[j+(t*2096|0)+2080>>2]|0);u=0;while(1){if((u|0)==520)break;V=W+(u<<2)|0;c[V>>2]=(c[V>>2]|0)+(c[j+(t*2096|0)+(u<<2)>>2]|0);u=u+1|0}x=+Ya(W);x=x-+h[j+(t*2096|0)+2088>>3]}if(x>2]|0}n=n+1|0}c[E+(A<<2)>>2]=q;A=A+1|0}while(1){if((l|0)==(B|0)){q=0;break}W=c[D+(l<<2)>>2]|0;ac(j+(W*2096|0)|0,0,2080)|0;c[j+(W*2096|0)+2080>>2]=0;h[j+(W*2096|0)+2088>>3]=s;l=l+1|0}while(1){if((q|0)==(F|0))break;l=c[E+(q<<2)>>2]|0;t=j+(l*2096|0)+2080|0;c[t>>2]=(c[t>>2]|0)+(c[X+(q*2096|0)+2080>>2]|0);t=0;while(1){if((t|0)==520)break;W=j+(l*2096|0)+(t<<2)|0;c[W>>2]=(c[W>>2]|0)+(c[X+(q*2096|0)+(t<<2)>>2]|0);t=t+1|0}q=q+1|0}ra[c[H>>2]&1](c[Y>>2]|0,D);m=sa[c[f>>2]&1](c[Y>>2]|0,C)|0;if(!m)oa(1);l=0;while(1){if((l|0)==(F|0)){l=0;t=0;break}c[m+(l<<2)>>2]=-1;l=l+1|0}while(1){if((t|0)==(F|0))break;q=m+(c[E+(t<<2)>>2]<<2)|0;if((c[q>>2]|0)==-1){c[q>>2]=l;l=l+1|0}t=t+1|0}n=sa[c[f>>2]&1](c[Y>>2]|0,l*2096|0)|0;if(!n)oa(1);u=0;v=0;while(1){if((v|0)==(F|0))break;t=E+(v<<2)|0;l=c[t>>2]|0;q=c[m+(l<<2)>>2]|0;if((q|0)==(u|0)){dc(n+(u*2096|0)|0,j+(l*2096|0)|0,2096)|0;q=c[m+(c[t>>2]<<2)>>2]|0;l=u+1|0}else l=u;c[t>>2]=q;u=l;v=v+1|0}ra[c[H>>2]&1](c[Y>>2]|0,m);l=0;while(1){if((l|0)==(u|0))break;dc(j+(l*2096|0)|0,n+(l*2096|0)|0,2096)|0;l=l+1|0}ra[c[H>>2]&1](c[Y>>2]|0,n);c[G>>2]=u;ra[c[H>>2]&1](c[Y>>2]|0,X);i=Z;return}function Ob(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+704|0;h=j;e=d+92|0;f=d+88|0;g=0;while(1){if(g>>>0>=(c[e>>2]|0)>>>0)break;Ib(256,(c[f>>2]|0)+(g*1040|0)|0,h);g=g+1|0}e=d+100|0;f=d+96|0;g=0;while(1){if(g>>>0>=(c[e>>2]|0)>>>0)break;Ib(704,(c[f>>2]|0)+(g*2832|0)|0,h);g=g+1|0}g=a+16+(48<>>0>=(c[b>>2]|0)>>>0)break;Ib(g,(c[e>>2]|0)+(f*2096|0)|0,h);f=f+1|0}i=j;return}function Pb(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=(d>>>10)+1|0;n=o>>>0<257?o:257;c[b>>2]=704;c[b+4>>2]=1024;h[b+8>>3]=500.0;c[b+16>>2]=0;p=b+20|0;c[p>>2]=e;c[b+28>>2]=g;c[b+32>>2]=1024;c[b+36>>2]=0;c[b+40>>2]=0;c[b+72>>2]=0;m=e+16|0;d=c[m>>2]|0;if(d>>>0>>0){l=(d|0)==0?o:d;while(1){if(l>>>0>=o>>>0)break;l=l<<1}i=a+8|0;j=sa[c[a>>2]&1](c[i>>2]|0,l)|0;if(!j)oa(1);k=c[m>>2]|0;d=e+8|0;if(k)dc(j|0,c[d>>2]|0,k|0)|0;ra[c[a+4>>2]&1](c[i>>2]|0,c[d>>2]|0);c[d>>2]=j;c[m>>2]=l}m=e+20|0;d=c[m>>2]|0;if(d>>>0>>0){l=(d|0)==0?o:d;while(1){if(l>>>0>=o>>>0)break;l=l<<1}i=a+8|0;j=sa[c[a>>2]&1](c[i>>2]|0,l<<2)|0;if(!j)oa(1);k=c[m>>2]|0;d=e+12|0;if(k)dc(j|0,c[d>>2]|0,k<<2|0)|0;ra[c[a+4>>2]&1](c[i>>2]|0,c[d>>2]|0);c[d>>2]=j;c[m>>2]=l}c[(c[p>>2]|0)+4>>2]=o;if(c[f>>2]|0)pa(407776,407818,70,407880);c[g>>2]=n;d=sa[c[a>>2]&1](c[a+8>>2]|0,n*2832|0)|0;i=d;if(!d)oa(1);else{c[f>>2]=i;c[b+24>>2]=i;ac(d|0,0,2816)|0;c[d+2816>>2]=0;h[d+2824>>3]=s;c[b+48>>2]=0;c[b+44>>2]=0;return}}function Qb(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=(d>>>9)+1|0;n=o>>>0<257?o:257;c[b>>2]=64;c[b+4>>2]=512;h[b+8>>3]=100.0;c[b+16>>2]=0;p=b+20|0;c[p>>2]=e;c[b+28>>2]=g;c[b+32>>2]=512;c[b+36>>2]=0;c[b+40>>2]=0;c[b+72>>2]=0;m=e+16|0;d=c[m>>2]|0;if(d>>>0>>0){l=(d|0)==0?o:d;while(1){if(l>>>0>=o>>>0)break;l=l<<1}i=a+8|0;j=sa[c[a>>2]&1](c[i>>2]|0,l)|0;if(!j)oa(1);k=c[m>>2]|0;d=e+8|0;if(k)dc(j|0,c[d>>2]|0,k|0)|0;ra[c[a+4>>2]&1](c[i>>2]|0,c[d>>2]|0);c[d>>2]=j;c[m>>2]=l}m=e+20|0;d=c[m>>2]|0;if(d>>>0>>0){l=(d|0)==0?o:d;while(1){if(l>>>0>=o>>>0)break;l=l<<1}i=a+8|0;j=sa[c[a>>2]&1](c[i>>2]|0,l<<2)|0;if(!j)oa(1);k=c[m>>2]|0;d=e+12|0;if(k)dc(j|0,c[d>>2]|0,k<<2|0)|0;ra[c[a+4>>2]&1](c[i>>2]|0,c[d>>2]|0);c[d>>2]=j;c[m>>2]=l}c[(c[p>>2]|0)+4>>2]=o;if(c[f>>2]|0)pa(407776,407818,70,407854);c[g>>2]=n;d=sa[c[a>>2]&1](c[a+8>>2]|0,n*2096|0)|0;i=d;if(!d)oa(1);else{c[f>>2]=i;c[b+24>>2]=i;ac(d|0,0,2080)|0;c[d+2080>>2]=0;h[d+2088>>3]=s;c[b+48>>2]=0;c[b+44>>2]=0;return}}function Rb(b,d){b=b|0;d=d|0;var e=0,f=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+2112|0;y=J+32|0;x=J+16|0;z=J;G=c[b+20>>2]|0;F=b+56|0;e=c[b+24>>2]|0;I=b+36|0;H=c[I>>2]|0;D=b+4|0;B=c[D>>2]|0;B=H>>>0>B>>>0?H:B;c[I>>2]=B;H=b+16|0;w=c[H>>2]|0;do if(w){if(B){E=b+40|0;u=c[E>>2]|0;C=e;q=c[b>>2]|0;e=C+(u*1040|0)|0;o=C+(u*1040|0)+(q<<2)|0;t=(q&1|0)==0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=27}while(1){if((A|0)==27){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=27}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}r=f>2]|0;dc(y+(p*1040|0)|0,C+(u*1040|0)|0,1040)|0;m=y+(p*1040|0)+1024|0;c[m>>2]=(c[m>>2]|0)+(c[C+(e*1040|0)+1024>>2]|0);m=0;while(1){if((m|0)==256)break;o=y+(p*1040|0)+(m<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[C+(e*1040|0)+(m<<2)>>2]|0);m=m+1|0}e=y+(p*1040|0)|0;o=y+(p*1040|0)+(q<<2)|0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=47}while(1){if((A|0)==47){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=47}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}l=f>3]=l;h[z+(p<<3)>>3]=l-r-+h[b+56+(p<<3)>>3];p=p+1|0}e=G;f=+h[z>>3];if(((c[e>>2]|0)>>>0<256?(v=+h[b+8>>3],f>v):0)?+h[z+8>>3]>v:0){c[(c[e+12>>2]|0)+(w<<2)>>2]=B;a[(c[e+8>>2]|0)+(c[H>>2]|0)>>0]=c[e>>2];B=b+44|0;c[b+48>>2]=c[B>>2];c[B>>2]=c[e>>2]&255;h[b+64>>3]=+h[F>>3];h[F>>3]=r;c[H>>2]=(c[H>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1;e=(c[E>>2]|0)+1|0;c[E>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(C+(e*1040|0)|0,0,1024)|0;c[C+(e*1040|0)+1024>>2]=0;h[C+(e*1040|0)+1032>>3]=s}c[I>>2]=0;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}if(+h[z+8>>3]>2]|0)+(w<<2)>>2]=B;w=c[H>>2]|0;z=c[e+8>>2]|0;a[z+w>>0]=a[z+(w+-2)>>0]|0;w=b+44|0;z=c[w>>2]|0;A=b+48|0;B=c[A>>2]|0;c[w>>2]=B;c[A>>2]=z;dc(C+(B*1040|0)|0,y+1040|0,1040)|0;h[b+64>>3]=+h[F>>3];h[F>>3]=+h[x+8>>3];c[H>>2]=(c[H>>2]|0)+1;c[I>>2]=0;I=c[E>>2]|0;ac(C+(I*1040|0)|0,0,1024)|0;c[C+(I*1040|0)+1024>>2]=0;h[C+(I*1040|0)+1032>>3]=s;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}A=(c[e+12>>2]|0)+(w+-1<<2)|0;c[A>>2]=(c[A>>2]|0)+B;dc(C+((c[b+44>>2]|0)*1040|0)|0,y|0,1040)|0;f=+h[x>>3];h[F>>3]=f;if((c[e>>2]|0)==1)h[b+64>>3]=f;c[I>>2]=0;F=c[E>>2]|0;ac(C+(F*1040|0)|0,0,1024)|0;c[C+(F*1040|0)+1024>>2]=0;h[C+(F*1040|0)+1032>>3]=s;F=b+72|0;I=(c[F>>2]|0)+1|0;c[F>>2]=I;if(I>>>0>1){I=b+32|0;c[I>>2]=(c[I>>2]|0)+(c[D>>2]|0)}}}else{p=G;c[c[p+12>>2]>>2]=B;a[c[p+8>>2]>>0]=0;q=e;E=c[b>>2]|0;o=q+(E<<2)|0;if(!(E&1)){f=0.0;n=0}else{k=0.0;n=0;A=8}while(1){if((A|0)==8){m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=8}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}v=f>3]=v;h[b+64>>3]=v;c[H>>2]=(c[H>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1;F=b+40|0;e=(c[F>>2]|0)+1|0;c[F>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(q+(e*1040|0)|0,0,1024)|0;c[q+(e*1040|0)+1024>>2]=0;h[q+(e*1040|0)+1032>>3]=s}c[I>>2]=0}while(0);if(!d){i=J;return}d=G;c[c[b+28>>2]>>2]=c[d>>2];c[d+4>>2]=c[H>>2];i=J;return}function Sb(b,d){b=b|0;d=d|0;var e=0,f=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+5696|0;y=J+32|0;x=J+16|0;z=J;G=c[b+20>>2]|0;F=b+56|0;e=c[b+24>>2]|0;I=b+36|0;H=c[I>>2]|0;D=b+4|0;B=c[D>>2]|0;B=H>>>0>B>>>0?H:B;c[I>>2]=B;H=b+16|0;w=c[H>>2]|0;do if(w){if(B){E=b+40|0;u=c[E>>2]|0;C=e;q=c[b>>2]|0;e=C+(u*2832|0)|0;o=C+(u*2832|0)+(q<<2)|0;t=(q&1|0)==0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=27}while(1){if((A|0)==27){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=27}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}r=f>2]|0;dc(y+(p*2832|0)|0,C+(u*2832|0)|0,2832)|0;m=y+(p*2832|0)+2816|0;c[m>>2]=(c[m>>2]|0)+(c[C+(e*2832|0)+2816>>2]|0);m=0;while(1){if((m|0)==704)break;o=y+(p*2832|0)+(m<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[C+(e*2832|0)+(m<<2)>>2]|0);m=m+1|0}e=y+(p*2832|0)|0;o=y+(p*2832|0)+(q<<2)|0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=47}while(1){if((A|0)==47){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=47}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}l=f>3]=l;h[z+(p<<3)>>3]=l-r-+h[b+56+(p<<3)>>3];p=p+1|0}e=G;f=+h[z>>3];if(((c[e>>2]|0)>>>0<256?(v=+h[b+8>>3],f>v):0)?+h[z+8>>3]>v:0){c[(c[e+12>>2]|0)+(w<<2)>>2]=B;a[(c[e+8>>2]|0)+(c[H>>2]|0)>>0]=c[e>>2];B=b+44|0;c[b+48>>2]=c[B>>2];c[B>>2]=c[e>>2]&255;h[b+64>>3]=+h[F>>3];h[F>>3]=r;c[H>>2]=(c[H>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1;e=(c[E>>2]|0)+1|0;c[E>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(C+(e*2832|0)|0,0,2816)|0;c[C+(e*2832|0)+2816>>2]=0;h[C+(e*2832|0)+2824>>3]=s}c[I>>2]=0;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}if(+h[z+8>>3]>2]|0)+(w<<2)>>2]=B;w=c[H>>2]|0;z=c[e+8>>2]|0;a[z+w>>0]=a[z+(w+-2)>>0]|0;w=b+44|0;z=c[w>>2]|0;A=b+48|0;B=c[A>>2]|0;c[w>>2]=B;c[A>>2]=z;dc(C+(B*2832|0)|0,y+2832|0,2832)|0;h[b+64>>3]=+h[F>>3];h[F>>3]=+h[x+8>>3];c[H>>2]=(c[H>>2]|0)+1;c[I>>2]=0;I=c[E>>2]|0;ac(C+(I*2832|0)|0,0,2816)|0;c[C+(I*2832|0)+2816>>2]=0;h[C+(I*2832|0)+2824>>3]=s;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}A=(c[e+12>>2]|0)+(w+-1<<2)|0;c[A>>2]=(c[A>>2]|0)+B;dc(C+((c[b+44>>2]|0)*2832|0)|0,y|0,2832)|0;f=+h[x>>3];h[F>>3]=f;if((c[e>>2]|0)==1)h[b+64>>3]=f;c[I>>2]=0;F=c[E>>2]|0;ac(C+(F*2832|0)|0,0,2816)|0;c[C+(F*2832|0)+2816>>2]=0;h[C+(F*2832|0)+2824>>3]=s;F=b+72|0;I=(c[F>>2]|0)+1|0;c[F>>2]=I;if(I>>>0>1){I=b+32|0;c[I>>2]=(c[I>>2]|0)+(c[D>>2]|0)}}}else{p=G;c[c[p+12>>2]>>2]=B;a[c[p+8>>2]>>0]=0;q=e;E=c[b>>2]|0;o=q+(E<<2)|0;if(!(E&1)){f=0.0;n=0}else{k=0.0;n=0;A=8}while(1){if((A|0)==8){m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=8}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}v=f>3]=v;h[b+64>>3]=v;c[H>>2]=(c[H>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1;F=b+40|0;e=(c[F>>2]|0)+1|0;c[F>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(q+(e*2832|0)|0,0,2816)|0;c[q+(e*2832|0)+2816>>2]=0;h[q+(e*2832|0)+2824>>3]=s}c[I>>2]=0}while(0);if(!d){i=J;return}d=G;c[c[b+28>>2]>>2]=c[d>>2];c[d+4>>2]=c[H>>2];i=J;return}function Tb(b,d){b=b|0;d=d|0;var e=0,f=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+4224|0;y=J+32|0;x=J+16|0;z=J;G=c[b+20>>2]|0;F=b+56|0;e=c[b+24>>2]|0;I=b+36|0;H=c[I>>2]|0;D=b+4|0;B=c[D>>2]|0;B=H>>>0>B>>>0?H:B;c[I>>2]=B;H=b+16|0;w=c[H>>2]|0;do if(w){if(B){E=b+40|0;u=c[E>>2]|0;C=e;q=c[b>>2]|0;e=C+(u*2096|0)|0;o=C+(u*2096|0)+(q<<2)|0;t=(q&1|0)==0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=27}while(1){if((A|0)==27){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=27}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}r=f>2]|0;dc(y+(p*2096|0)|0,C+(u*2096|0)|0,2096)|0;m=y+(p*2096|0)+2080|0;c[m>>2]=(c[m>>2]|0)+(c[C+(e*2096|0)+2080>>2]|0);m=0;while(1){if((m|0)==520)break;o=y+(p*2096|0)+(m<<2)|0;c[o>>2]=(c[o>>2]|0)+(c[C+(e*2096|0)+(m<<2)>>2]|0);m=m+1|0}e=y+(p*2096|0)|0;o=y+(p*2096|0)+(q<<2)|0;if(t){f=0.0;n=0}else{k=0.0;n=0;A=47}while(1){if((A|0)==47){A=0;m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=47}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}l=f>3]=l;h[z+(p<<3)>>3]=l-r-+h[b+56+(p<<3)>>3];p=p+1|0}e=G;f=+h[z>>3];if(((c[e>>2]|0)>>>0<256?(v=+h[b+8>>3],f>v):0)?+h[z+8>>3]>v:0){c[(c[e+12>>2]|0)+(w<<2)>>2]=B;a[(c[e+8>>2]|0)+(c[H>>2]|0)>>0]=c[e>>2];B=b+44|0;c[b+48>>2]=c[B>>2];c[B>>2]=c[e>>2]&255;h[b+64>>3]=+h[F>>3];h[F>>3]=r;c[H>>2]=(c[H>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1;e=(c[E>>2]|0)+1|0;c[E>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(C+(e*2096|0)|0,0,2080)|0;c[C+(e*2096|0)+2080>>2]=0;h[C+(e*2096|0)+2088>>3]=s}c[I>>2]=0;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}if(+h[z+8>>3]>2]|0)+(w<<2)>>2]=B;w=c[H>>2]|0;z=c[e+8>>2]|0;a[z+w>>0]=a[z+(w+-2)>>0]|0;w=b+44|0;z=c[w>>2]|0;A=b+48|0;B=c[A>>2]|0;c[w>>2]=B;c[A>>2]=z;dc(C+(B*2096|0)|0,y+2096|0,2096)|0;h[b+64>>3]=+h[F>>3];h[F>>3]=+h[x+8>>3];c[H>>2]=(c[H>>2]|0)+1;c[I>>2]=0;I=c[E>>2]|0;ac(C+(I*2096|0)|0,0,2080)|0;c[C+(I*2096|0)+2080>>2]=0;h[C+(I*2096|0)+2088>>3]=s;c[b+72>>2]=0;c[b+32>>2]=c[D>>2];break}A=(c[e+12>>2]|0)+(w+-1<<2)|0;c[A>>2]=(c[A>>2]|0)+B;dc(C+((c[b+44>>2]|0)*2096|0)|0,y|0,2096)|0;f=+h[x>>3];h[F>>3]=f;if((c[e>>2]|0)==1)h[b+64>>3]=f;c[I>>2]=0;F=c[E>>2]|0;ac(C+(F*2096|0)|0,0,2080)|0;c[C+(F*2096|0)+2080>>2]=0;h[C+(F*2096|0)+2088>>3]=s;F=b+72|0;I=(c[F>>2]|0)+1|0;c[F>>2]=I;if(I>>>0>1){I=b+32|0;c[I>>2]=(c[I>>2]|0)+(c[D>>2]|0)}}}else{p=G;c[c[p+12>>2]>>2]=B;a[c[p+8>>2]>>0]=0;q=e;E=c[b>>2]|0;o=q+(E<<2)|0;if(!(E&1)){f=0.0;n=0}else{k=0.0;n=0;A=8}while(1){if((A|0)==8){m=c[e>>2]|0;f=+(m>>>0);if(m>>>0<256)j=+g[19516+(m<<2)>>2];else j=+Xb(f);e=e+4|0;f=k-f*j;n=n+m|0}if(e>>>0>=o>>>0)break;m=c[e>>2]|0;j=+(m>>>0);if(m>>>0<256)k=+g[19516+(m<<2)>>2];else k=+Xb(j);e=e+4|0;k=f-j*k;n=n+m|0;A=8}l=+(n>>>0);if(!n)k=l;else{if(n>>>0<256)j=+g[19516+(n<<2)>>2];else j=+Xb(l);k=l;f=f+l*j}v=f>3]=v;h[b+64>>3]=v;c[H>>2]=(c[H>>2]|0)+1;c[p>>2]=(c[p>>2]|0)+1;F=b+40|0;e=(c[F>>2]|0)+1|0;c[F>>2]=e;if(e>>>0<(c[c[b+28>>2]>>2]|0)>>>0){ac(q+(e*2096|0)|0,0,2080)|0;c[q+(e*2096|0)+2080>>2]=0;h[q+(e*2096|0)+2088>>3]=s}c[I>>2]=0}while(0);if(!d){i=J;return}d=G;c[c[b+28>>2]>>2]=c[d>>2];c[d+4>>2]=c[H>>2];i=J;return}function Ub(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+16|0;z=N;K=c[d+28>>2]|0;I=d+4|0;L=c[I>>2]|0;l=c[d+60>>2]|0;H=d+32|0;k=c[H>>2]|0;M=d+44|0;j=c[M>>2]|0;F=d+12|0;f=c[F>>2]|0;if(j>>>0>>0)c[M>>2]=f;else f=j;J=d+24|0;if(c[J>>2]|0){if(f){C=b+8|0;D=sa[c[b>>2]&1](c[C>>2]|0,L<<3)|0;if(!D)oa(1);E=sa[c[b>>2]&1](c[C>>2]|0,L*2080|0)|0;if(!E)oa(1);B=sa[c[b>>2]&1](c[C>>2]|0,L<<4)|0;if(!B)oa(1);c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;A=d+48|0;x=0;while(1){if((x|0)==(L|0))break;t=(c[A>>2]|0)+x|0;w=c[d>>2]|0;f=k+(t*1040|0)|0;r=k+(t*1040|0)+(w<<2)|0;if(!(w&1)){m=0.0;q=0}else{o=0.0;q=0;G=42}while(1){if((G|0)==42){G=0;j=c[f>>2]|0;m=+(j>>>0);if(j>>>0<256)n=+g[19516+(j<<2)>>2];else n=+Xb(m);f=f+4|0;m=o-m*n;q=q+j|0}if(f>>>0>=r>>>0)break;j=c[f>>2]|0;n=+(j>>>0);if(j>>>0<256)o=+g[19516+(j<<2)>>2];else o=+Xb(n);f=f+4|0;o=m-n*o;q=q+j|0;G=42}o=+(q>>>0);if(!q)p=o;else{if(q>>>0<256)n=+g[19516+(q<<2)>>2];else n=+Xb(o);p=o;m=m+o*n}w=D+(x<<3)|0;h[w>>3]=m>2]|0)+x|0;dc(E+(u*1040|0)|0,t|0,1040)|0;j=E+(u*1040|0)+1024|0;c[j>>2]=(c[j>>2]|0)+(c[k+(f*1040|0)+1024>>2]|0);j=0;while(1){if((j|0)==256)break;r=E+(u*1040|0)+(j<<2)|0;c[r>>2]=(c[r>>2]|0)+(c[k+(f*1040|0)+(j<<2)>>2]|0);j=j+1|0}q=c[d>>2]|0;f=E+(u*1040|0)|0;r=E+(u*1040|0)+(q<<2)|0;if(!(q&1)){m=0.0;q=0}else{o=0.0;q=0;G=62}while(1){if((G|0)==62){G=0;j=c[f>>2]|0;m=+(j>>>0);if(j>>>0<256)n=+g[19516+(j<<2)>>2];else n=+Xb(m);f=f+4|0;m=o-m*n;q=q+j|0}if(f>>>0>=r>>>0)break;j=c[f>>2]|0;n=+(j>>>0);if(j>>>0<256)o=+g[19516+(j<<2)>>2];else o=+Xb(n);f=f+4|0;o=m-n*o;q=q+j|0;G=62}p=+(q>>>0);if(!q)o=p;else{if(q>>>0<256)n=+g[19516+(q<<2)>>2];else n=+Xb(p);o=p;m=m+p*n}p=m>3]=p;r=z+(v<<3)|0;h[r>>3]=+h[r>>3]+(p-+h[w>>3]-+h[l+(u<<3)>>3]);v=v+1|0}x=x+1|0}q=K;m=+h[z>>3];if(((c[q>>2]|0)>>>0<(c[d+8>>2]|0)>>>0?(y=+h[d+16>>3],m>y):0)?+h[z+8>>3]>y:0){c[(c[q+12>>2]|0)+(c[J>>2]<<2)>>2]=c[M>>2];a[(c[q+8>>2]|0)+(c[J>>2]|0)>>0]=c[q>>2];f=d+52|0;c[d+56>>2]=c[f>>2];c[f>>2]=_(c[q>>2]|0,L)|0;f=0;while(1){if((f|0)==(L|0))break;z=l+(f<<3)|0;h[l+(L+f<<3)>>3]=+h[z>>3];h[z>>3]=+h[D+(f<<3)>>3];f=f+1|0}c[J>>2]=(c[J>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+1;l=(c[A>>2]|0)+L|0;c[A>>2]=l;a:do if(l>>>0<(c[c[d+36>>2]>>2]|0)>>>0){k=c[H>>2]|0;f=c[I>>2]|0;j=0;while(1){if((j|0)==(f|0))break a;I=l+j|0;ac(k+(I*1040|0)|0,0,1024)|0;c[k+(I*1040|0)+1024>>2]=0;h[k+(I*1040|0)+1032>>3]=s;j=j+1|0}}while(0);c[M>>2]=0;c[d+64>>2]=0;c[d+40>>2]=c[F>>2]}else G=84;do if((G|0)==84){f=c[M>>2]|0;j=c[J>>2]|0;if(+h[z+8>>3]>2]|0)+(j<<2)>>2]=f;f=c[J>>2]|0;I=c[q+8>>2]|0;a[I+f>>0]=a[I+(f+-2)>>0]|0;f=d+52|0;I=c[f>>2]|0;j=d+56|0;c[f>>2]=c[j>>2];c[j>>2]=I;j=0;while(1){if((j|0)==(L|0))break;H=L+j|0;dc(k+(((c[f>>2]|0)+j|0)*1040|0)|0,E+(H*1040|0)|0,1040)|0;I=l+(j<<3)|0;h[l+(H<<3)>>3]=+h[I>>3];h[I>>3]=+h[B+(H<<3)>>3];I=(c[A>>2]|0)+j|0;ac(k+(I*1040|0)|0,0,1024)|0;c[k+(I*1040|0)+1024>>2]=0;h[k+(I*1040|0)+1032>>3]=s;j=j+1|0}c[J>>2]=(c[J>>2]|0)+1;c[M>>2]=0;c[d+64>>2]=0;c[d+40>>2]=c[F>>2];break}j=(c[q+12>>2]|0)+(j+-1<<2)|0;c[j>>2]=(c[j>>2]|0)+f;f=d+52|0;j=0;while(1){if((j|0)==(L|0))break;dc(k+(((c[f>>2]|0)+j|0)*1040|0)|0,E+(j*1040|0)|0,1040)|0;m=+h[B+(j<<3)>>3];h[l+(j<<3)>>3]=m;if((c[q>>2]|0)==1)h[l+(L+j<<3)>>3]=m;I=(c[A>>2]|0)+j|0;ac(k+(I*1040|0)|0,0,1024)|0;c[k+(I*1040|0)+1024>>2]=0;h[k+(I*1040|0)+1032>>3]=s;j=j+1|0}c[M>>2]=0;I=d+64|0;M=(c[I>>2]|0)+1|0;c[I>>2]=M;if(M>>>0>1){M=d+40|0;c[M>>2]=(c[M>>2]|0)+(c[F>>2]|0)}}while(0);M=b+4|0;ra[c[M>>2]&1](c[C>>2]|0,B);ra[c[M>>2]&1](c[C>>2]|0,E);ra[c[M>>2]&1](c[C>>2]|0,D)}}else{u=K;c[c[u+12>>2]>>2]=f;a[c[u+8>>2]>>0]=0;t=k;r=0;while(1){if((r|0)==(L|0))break;b=c[d>>2]|0;f=t+(r*1040|0)|0;q=t+(r*1040|0)+(b<<2)|0;if(!(b&1)){m=0.0;k=0}else{o=0.0;k=0;G=12}while(1){if((G|0)==12){G=0;j=c[f>>2]|0;m=+(j>>>0);if(j>>>0<256)n=+g[19516+(j<<2)>>2];else n=+Xb(m);f=f+4|0;m=o-m*n;k=k+j|0}if(f>>>0>=q>>>0)break;j=c[f>>2]|0;n=+(j>>>0);if(j>>>0<256)o=+g[19516+(j<<2)>>2];else o=+Xb(n);f=f+4|0;o=m-n*o;k=k+j|0;G=12}p=+(k>>>0);if(!k)o=p;else{if(k>>>0<256)n=+g[19516+(k<<2)>>2];else n=+Xb(p);o=p;m=m+p*n}y=m>3]=y;h[l+(L+r<<3)>>3]=y;r=r+1|0}c[J>>2]=(c[J>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;G=d+48|0;l=(c[G>>2]|0)+L|0;c[G>>2]=l;b:do if(l>>>0<(c[c[d+36>>2]>>2]|0)>>>0){k=c[H>>2]|0;f=c[I>>2]|0;j=0;while(1){if((j|0)==(f|0))break b;I=l+j|0;ac(k+(I*1040|0)|0,0,1024)|0;c[k+(I*1040|0)+1024>>2]=0;h[k+(I*1040|0)+1032>>3]=s;j=j+1|0}}while(0);c[M>>2]=0}if(!e){i=N;return}e=K;M=_(c[e>>2]|0,L)|0;c[c[d+36>>2]>>2]=M;c[e+4>>2]=c[J>>2];i=N;return}function Vb(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;v=f;k=b[88430+((_(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,506832829)|0)>>>17<<1)>>1]|0;D=f+1|0;B=D;l=k<<16>>16==0&1;j=0;k=k&65535;a:while(1){if(l<<24>>24)break;w=k+1|0;m=153966+(k<<2)|0;m=e[m>>1]|e[m+2>>1]<<16;k=m>>>8&255;s=m>>>16;t=m&127;u=d[280786+t>>0]|0;r=1<>>7;if(k<<24>>24){r=k<<24>>24!=10;if(t>>>0>h>>>0){A=j;k=w;j=A;continue}q=(c[11272+(t<<2)>>2]|0)+(_(t,m>>>16)|0)|0;k=280811+q|0;b:do switch((m>>>8&255)<<24>>24){case 0:{p=f+t|0;m=f+(t+-4)|0;o=0;k=v;while(1){n=k;if(n>>>0>m>>>0)break;z=k;A=280811+(q+o)|0;if((d[z>>0]|d[z+1>>0]<<8|d[z+2>>0]<<16|d[z+3>>0]<<24|0)!=(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0))break;o=o+4|0;k=n+4|0}while(1){if(k>>>0>=p>>>0)break;if((a[280811+(q+o)>>0]|0)!=(a[k>>0]|0))break;o=o+1|0;k=k+1|0}if((o|0)!=(t|0)){A=j;k=w;j=A;continue a}break}case 10:{k=a[k>>0]|0;if(!((k&255)>96&(k&255)<123)){A=j;k=w;j=A;continue a}if((k&255^32|0)!=(d[f>>0]|0)){A=j;k=w;j=A;continue a}p=q+1|0;q=f+t|0;m=f+(t+-4)|0;o=0;k=B;while(1){n=k;if(n>>>0>m>>>0)break;z=k;A=280811+(p+o)|0;if((d[z>>0]|d[z+1>>0]<<8|d[z+2>>0]<<16|d[z+3>>0]<<24|0)!=(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0))break;o=o+4|0;k=n+4|0}while(1){if(k>>>0>=q>>>0)break;if((a[280811+(p+o)>>0]|0)!=(a[k>>0]|0))break;o=o+1|0;k=k+1|0}if((o|0)!=(t+-1|0)){A=j;k=w;j=A;continue a}break}default:{m=0;while(1){if(m>>>0>=t>>>0)break b;k=a[280811+(q+m)>>0]|0;if((k&255)>96&(k&255)<123){if((k&255^32|0)!=(d[f+m>>0]|0)){A=j;k=w;j=A;continue a}}else if(k<<24>>24!=(a[f+m>>0]|0)){A=j;k=w;j=A;continue a}m=m+1|0}}}while(0);A=(s+((r?44:9)<>2]|0;c[j>>2]=z>>>0>>0?z:A;j=t+1|0;if(j>>>0>=h>>>0){j=1;k=w;continue}switch(a[f+t>>0]|0){case 32:{k=(s+(((r&1)<<6|4)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 34:{z=(s+((r?87:66)<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=62){j=1;k=w;continue a}k=(s+((r?97:69)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 46:{z=(s+((r?101:79)<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=32){j=1;k=w;continue a}k=(s+((r?114:88)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 44:{z=(s+((r?112:99)<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=32){j=1;k=w;continue a}k=(s+((r?107:58)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 39:{k=(s+((r?94:74)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 40:{k=(s+((r?113:78)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 61:switch(a[f+(t+1)>>0]|0){case 34:{k=(s+((r&1|104)<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}case 39:{k=(s+(((r&1)<<3)+108<>2]|0;c[j>>2]=A>>>0>>0?A:k;j=1;k=w;continue a}default:{j=1;k=w;continue a}}default:{j=1;k=w;continue a}}}p=(c[11272+(t<<2)>>2]|0)+(_(t,s)|0)|0;m=t>>>0>>0?t:h;q=f+m|0;m=f+(m+-4)|0;o=0;k=v;while(1){n=k;if(n>>>0>m>>>0)break;z=k;A=280811+(p+o)|0;if((d[z>>0]|d[z+1>>0]<<8|d[z+2>>0]<<16|d[z+3>>0]<<24|0)!=(d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24|0))break;o=o+4|0;k=n+4|0}while(1){if(k>>>0>=q>>>0)break;if((a[280811+(p+o)>>0]|0)!=(a[k>>0]|0))break;o=o+1|0;k=k+1|0}if((o|0)==(t|0)){A=(s<<5)+t|0;j=i+(t<<2)|0;z=c[j>>2]|0;c[j>>2]=z>>>0>>0?z:A;j=1}k=t+-1|0;if(o>>>0>=k>>>0){z=(s+(12<>2]|0;c[A>>2]=y>>>0>>0?y:z;A=t+2|0;if((((A>>>0>>0?(a[f+k>>0]|0)==105:0)?(a[f+t>>0]|0)==110:0)?(a[f+(t+1)>>0]|0)==103:0)?(a[f+A>>0]|0)==32:0){A=(s+(49<>2]|0;c[j>>2]=z>>>0>>0?z:A;j=1}else j=1}if(t>>>0>9){k=t+-9|0;k=k>>>0>>0?g:k}else k=g;m=t+-2|0;m=o>>>0>>0?o:m;while(1){if(k>>>0>m>>>0)break;A=(s+(d[407930+(t-k)>>0]<>2]|0;c[j>>2]=z>>>0>>0?z:A;j=1;k=k+1|0}if(o>>>0>>0){k=w;continue}k=t+6|0;if(k>>>0>=h>>>0){k=w;continue}do switch(a[f+t>>0]|0){case 32:{z=(s+r<<5)+t|0;A=i+(t+1<<2)|0;y=c[A>>2]|0;c[A>>2]=y>>>0>>0?y:z;switch(a[f+(t+1)>>0]|0){case 97:switch(a[f+(t+2)>>0]|0){case 32:{A=(s+(28<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 115:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(46<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 116:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(60<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 110:{if((a[f+(t+3)>>0]|0)!=100){k=w;continue a}if((a[f+(t+4)>>0]|0)!=32){k=w;continue a}A=(s+(10<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 98:{if((a[f+(t+2)>>0]|0)!=121){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(38<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 105:switch(a[f+(t+2)>>0]|0){case 110:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(r<<4)<<5)+t|0;k=i+(t+4<<2)|0;z=c[k>>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 115:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(47<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 102:{switch(a[f+(t+2)>>0]|0){case 111:{if((a[f+(t+3)>>0]|0)!=114){k=w;continue a}if((a[f+(t+4)>>0]|0)!=32){k=w;continue a}A=(s+(25<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 114:break;default:{k=w;continue a}}if((a[f+(t+3)>>0]|0)!=111){k=w;continue a}if((a[f+(t+4)>>0]|0)!=109){k=w;continue a}if((a[f+(t+5)>>0]|0)!=32){k=w;continue a}A=(s+(37<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 111:switch(a[f+(t+2)>>0]|0){case 102:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(r<<3)<<5)+t|0;k=i+(t+4<<2)|0;z=c[k>>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 110:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(45<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 110:{if((a[f+(t+2)>>0]|0)!=111){k=w;continue a}if((a[f+(t+3)>>0]|0)!=116){k=w;continue a}if((a[f+(t+4)>>0]|0)!=32){k=w;continue a}A=(s+(80<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 116:{switch(a[f+(t+2)>>0]|0){case 104:break;case 111:{if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(17<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}switch(a[f+(t+3)>>0]|0){case 101:{if((a[f+(t+4)>>0]|0)!=32){k=w;continue a}A=(s+(5<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 97:break;default:{k=w;continue a}}if((a[f+(t+4)>>0]|0)!=116){k=w;continue a}if((a[f+(t+5)>>0]|0)!=32){k=w;continue a}A=(s+(29<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 119:{if((a[f+(t+2)>>0]|0)!=105){k=w;continue a}if((a[f+(t+3)>>0]|0)!=116){k=w;continue a}if((a[f+(t+4)>>0]|0)!=104){k=w;continue a}if((a[f+(t+5)>>0]|0)!=32){k=w;continue a}A=(s+(35<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}}case 34:{z=(s+(19<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=62){k=w;continue a}A=(s+(21<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 46:{z=(s+(20<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=32){k=w;continue a}z=(s+(31<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+2)>>0]|0)!=84){k=w;continue a}if((a[f+(t+3)>>0]|0)!=104){k=w;continue a}switch(a[f+(t+4)>>0]|0){case 101:{if((a[f+(t+5)>>0]|0)!=32){k=w;continue a}A=(s+(43<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 105:break;default:{k=w;continue a}}if((a[f+(t+5)>>0]|0)!=115){k=w;continue a}if((a[f+(t+6)>>0]|0)!=32){k=w;continue a}A=(s+(75<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 44:{z=(s+(76<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=32){k=w;continue a}A=(s+(14<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 10:{z=(s+(22<>2]|0;c[A>>2]=y>>>0>>0?y:z;if((a[f+(t+1)>>0]|0)!=9){k=w;continue a}A=(s+(50<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 93:{A=(s+(24<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 39:{A=(s+(36<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 58:{A=(s+(51<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 40:{A=(s+(57<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 61:switch(a[f+(t+1)>>0]|0){case 34:{A=(s+(70<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 39:{A=(s+(86<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 97:{if((a[f+(t+1)>>0]|0)!=108){k=w;continue a}if((a[f+(t+2)>>0]|0)!=32){k=w;continue a}A=(s+(84<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 101:switch(a[f+(t+1)>>0]|0){case 100:{if((a[f+(t+2)>>0]|0)!=32){k=w;continue a}A=(s+(53<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 114:{if((a[f+(t+2)>>0]|0)!=32){k=w;continue a}A=(s+(82<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 115:{if((a[f+(t+2)>>0]|0)!=116){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(95<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 102:{if((a[f+(t+1)>>0]|0)!=117){k=w;continue a}if((a[f+(t+2)>>0]|0)!=108){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(90<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 105:switch(a[f+(t+1)>>0]|0){case 118:{if((a[f+(t+2)>>0]|0)!=101){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(92<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 122:{if((a[f+(t+2)>>0]|0)!=101){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(100<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}case 108:{switch(a[f+(t+1)>>0]|0){case 101:break;case 121:{if((a[f+(t+2)>>0]|0)!=32){k=w;continue a}A=(s+(61<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}if((a[f+(t+2)>>0]|0)!=115){k=w;continue a}if((a[f+(t+3)>>0]|0)!=115){k=w;continue a}if((a[f+(t+4)>>0]|0)!=32){k=w;continue a}A=(s+(93<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}case 111:{if((a[f+(t+1)>>0]|0)!=117){k=w;continue a}if((a[f+(t+2)>>0]|0)!=115){k=w;continue a}if((a[f+(t+3)>>0]|0)!=32){k=w;continue a}A=(s+(106<>2]|0;c[k>>2]=z>>>0>>0?z:A;k=w;continue a}default:{k=w;continue a}}while(0)}if(h>>>0<=4){h=j;h=h&1;h=h<<24>>24!=0;return h|0}A=a[f>>0]|0;w=A<<24>>24==32;c:do switch(A<<24>>24){case 32:case 46:{k=b[88430+((_(d[D>>0]|d[D+1>>0]<<8|d[D+2>>0]<<16|d[D+3>>0]<<24,506832829)|0)>>>17<<1)>>1]|0;g=h+-1|0;x=w?6:32;y=w?2:77;z=w?89:67;A=f+2|0;l=k<<16>>16==0&1;k=k&65535;d:while(1){if(l<<24>>24)break c;v=k+1|0;m=153966+(k<<2)|0;m=e[m>>1]|e[m+2>>1]<<16;k=m>>>8&255;s=m>>>16;t=m&127;u=d[280786+t>>0]|0;l=(m&255)>>>7;if(!(k<<24>>24)){if(t>>>0>g>>>0){u=j;k=v;j=u;continue}p=(c[11272+(t<<2)>>2]|0)+(_(t,m>>>16)|0)|0;q=f+(t+1)|0;m=f+(t+-3)|0;o=0;k=B;while(1){n=k;if(n>>>0>m>>>0)break;E=k;r=280811+(p+o)|0;if((d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0)!=(d[r>>0]|d[r+1>>0]<<8|d[r+2>>0]<<16|d[r+3>>0]<<24|0))break;o=o+4|0;k=n+4|0}while(1){if(k>>>0>=q>>>0)break;if((a[280811+(p+o)>>0]|0)!=(a[k>>0]|0))break;o=o+1|0;k=k+1|0}if((o|0)!=(t|0)){E=j;k=v;j=E;continue}j=t+1|0;E=(s+(x<>2]|0;c[k>>2]=r>>>0>>0?r:E;k=t+2|0;if(k>>>0>=h>>>0){j=1;k=v;continue}j=a[f+j>>0]|0;switch(j<<24>>24){case 32:{E=(s+(y<>2]|0;c[j>>2]=k>>>0>>0?k:E;j=1;k=v;continue d}case 40:{E=(s+(z<>2]|0;c[j>>2]=k>>>0>>0?k:E;j=1;k=v;continue d}default:{if(!w){j=1;k=v;continue d}switch(j<<24>>24){case 44:{r=(s+(103<>2]|0;c[E>>2]=q>>>0>>0?q:r;if((a[f+(t+2)>>0]|0)!=32){j=1;k=v;continue d}k=(s+(33<>2]|0;c[j>>2]=E>>>0>>0?E:k;j=1;k=v;continue d}case 46:{r=(s+(71<>2]|0;c[E>>2]=q>>>0>>0?q:r;if((a[f+(t+2)>>0]|0)!=32){j=1;k=v;continue d}k=(s+(52<>2]|0;c[j>>2]=E>>>0>>0?E:k;j=1;k=v;continue d}case 61:switch(a[f+(t+2)>>0]|0){case 34:{k=(s+(81<>2]|0;c[j>>2]=E>>>0>>0?E:k;j=1;k=v;continue d}case 39:{k=(s+(98<>2]|0;c[j>>2]=E>>>0>>0?E:k;j=1;k=v;continue d}default:{j=1;k=v;continue d}}default:{j=1;k=v;continue d}}}}}if(!w){E=j;k=v;j=E;continue}r=k<<24>>24!=10;if(t>>>0>g>>>0){E=j;k=v;j=E;continue}q=(c[11272+(t<<2)>>2]|0)+(_(t,m>>>16)|0)|0;k=280811+q|0;e:do switch((m>>>8&255)<<24>>24){case 0:{p=f+(t+1)|0;m=f+(t+-3)|0;o=0;k=B;while(1){n=k;if(n>>>0>m>>>0)break;F=k;E=280811+(q+o)|0;if((d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24|0)!=(d[E>>0]|d[E+1>>0]<<8|d[E+2>>0]<<16|d[E+3>>0]<<24|0))break;o=o+4|0;k=n+4|0}while(1){if(k>>>0>=p>>>0)break;if((a[280811+(q+o)>>0]|0)!=(a[k>>0]|0))break;o=o+1|0;k=k+1|0}if((o|0)!=(t|0)){F=j;k=v;j=F;continue d}break}case 10:{k=a[k>>0]|0;if(!((k&255)>96&(k&255)<123)){F=j;k=v;j=F;continue d}if((k&255^32|0)!=(d[D>>0]|0)){F=j;k=v;j=F;continue d}o=q+1|0;p=f+(t+1)|0;m=f+(t+-3)|0;n=0;k=A;while(1){if(k>>>0>m>>>0)break;F=280811+(o+n)|0;if((d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0)!=(d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24|0))break;n=n+4|0;k=k+4|0}while(1){if(k>>>0>=p>>>0)break;if((a[280811+(o+n)>>0]|0)!=(a[k>>0]|0))break;n=n+1|0;k=k+1|0}if((n|0)!=(t+-1|0)){F=j;k=v;j=F;continue d}break}default:{m=0;while(1){if(m>>>0>=t>>>0)break e;k=a[280811+(q+m)>>0]|0;if((k&255)>96&(k&255)<123){if((k&255^32|0)!=(d[f+(m+1)>>0]|0)){F=j;k=v;j=F;continue d}}else if(k<<24>>24!=(a[f+(m+1)>>0]|0)){F=j;k=v;j=F;continue d}m=m+1|0}}}while(0);j=t+1|0;F=(s+((r?85:30)<>2]|0;c[k>>2]=E>>>0>>0?E:F;k=t+2|0;if(k>>>0>=h>>>0){j=1;k=v;continue}switch(a[f+j>>0]|0){case 32:{F=(s+((r?83:15)<>2]|0;c[j>>2]=k>>>0>>0?k:F;j=1;k=v;continue d}case 44:{if(!r){E=(s+(109<>2]|0;c[F>>2]=q>>>0>>0?q:E}if((a[f+(t+2)>>0]|0)!=32){j=1;k=v;continue d}k=(s+((r?111:65)<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=v;continue d}case 46:{E=(s+((r?115:96)<>2]|0;c[F>>2]=q>>>0>>0?q:E;if((a[f+(t+2)>>0]|0)!=32){j=1;k=v;continue d}k=(s+((r?117:91)<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=v;continue d}case 61:switch(a[f+(t+2)>>0]|0){case 34:{k=(s+(((r&1)<<3^8)+110<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=v;continue d}case 39:{k=(s+(120-(r&1)<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=v;continue d}default:{j=1;k=v;continue d}}default:{j=1;k=v;continue d}}}}default:{}}while(0);if(h>>>0<=5){F=j;F=F&1;F=F<<24>>24!=0;return F|0}k=a[D>>0]|0;l=a[f>>0]|0;f:do if(k<<24>>24==32){switch(l<<24>>24){case 44:case 115:case 101:{C=241;break f}case -62:break;default:break f}if(k<<24>>24==-96)C=241}else if(l<<24>>24==-62&k<<24>>24==-96)C=241;while(0);g:do if((C|0)==241){u=f+2|0;k=b[88430+((_(d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24,506832829)|0)>>>17<<1)>>1]|0;v=h+-2|0;l=k<<16>>16==0&1;k=k&65535;while(1){if(l<<24>>24)break g;t=k+1|0;k=153966+(k<<2)|0;k=e[k>>1]|e[k+2>>1]<<16;q=k>>>16;r=k&127;s=d[280786+r>>0]|0;l=(k&255)>>>7;if((k&65280|0)!=0|r>>>0>v>>>0){F=j;k=t;j=F;continue}o=(c[11272+(r<<2)>>2]|0)+(_(r,k>>>16)|0)|0;p=f+(r+2)|0;m=f+(r+-2)|0;n=0;k=u;while(1){if(k>>>0>m>>>0)break;F=280811+(o+n)|0;if((d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0)!=(d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24|0))break;n=n+4|0;k=k+4|0}while(1){if(k>>>0>=p>>>0)break;if((a[280811+(o+n)>>0]|0)!=(a[k>>0]|0))break;n=n+1|0;k=k+1|0}if((n|0)!=(r|0)){F=j;k=t;j=F;continue}k=a[f>>0]|0;if(k<<24>>24==-62){k=(q+(102<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=t;continue}m=r+2|0;if(m>>>0>=h>>>0){F=j;k=t;j=F;continue}if((a[f+m>>0]|0)!=32){F=j;k=t;j=F;continue}k=(q+((k<<24>>24==101?18:k<<24>>24==115?7:13)<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=t}}while(0);if(h>>>0<=8){F=j;F=F&1;F=F<<24>>24!=0;return F|0}switch(a[f>>0]|0){case 32:{if((a[D>>0]|0)!=116){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+2>>0]|0)!=104){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+3>>0]|0)!=101){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+4>>0]|0)!=32){F=j;F=F&1;F=F<<24>>24!=0;return F|0}break}case 46:{if((a[D>>0]|0)!=99){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+2>>0]|0)!=111){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+3>>0]|0)!=109){F=j;F=F&1;F=F<<24>>24!=0;return F|0}if((a[f+4>>0]|0)!=47){F=j;F=F&1;F=F<<24>>24!=0;return F|0}break}default:{F=j;F=F&1;F=F<<24>>24!=0;return F|0}}u=f+5|0;k=b[88430+((_(d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24,506832829)|0)>>>17<<1)>>1]|0;v=h+-5|0;l=k<<16>>16==0&1;k=k&65535;while(1){if(l<<24>>24)break;t=k+1|0;k=153966+(k<<2)|0;k=e[k>>1]|e[k+2>>1]<<16;q=k>>>16;r=k&127;s=d[280786+r>>0]|0;l=(k&255)>>>7;if((k&65280|0)!=0|r>>>0>v>>>0){F=j;k=t;j=F;continue}o=(c[11272+(r<<2)>>2]|0)+(_(r,k>>>16)|0)|0;p=f+(r+5)|0;m=f+(r+1)|0;n=0;k=u;while(1){if(k>>>0>m>>>0)break;F=280811+(o+n)|0;if((d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24|0)!=(d[F>>0]|d[F+1>>0]<<8|d[F+2>>0]<<16|d[F+3>>0]<<24|0))break;n=n+4|0;k=k+4|0}while(1){if(k>>>0>=p>>>0)break;if((a[280811+(o+n)>>0]|0)!=(a[k>>0]|0))break;n=n+1|0;k=k+1|0}if((n|0)!=(r|0)){F=j;k=t;j=F;continue}j=r+5|0;E=(q+(((a[f>>0]|0)==32?41:72)<>2]|0;c[F>>2]=D>>>0>>0?D:E;if(j>>>0>=h>>>0){j=1;k=t;continue}if(!((a[f>>0]|0)==32&(r+8|0)>>>0>>0)){j=1;k=t;continue}if((a[f+j>>0]|0)!=32){j=1;k=t;continue}if((a[f+(r+6)>>0]|0)!=111){j=1;k=t;continue}if((a[f+(r+7)>>0]|0)!=102){j=1;k=t;continue}if((a[f+(r+8)>>0]|0)!=32){j=1;k=t;continue}E=(q+(62<>2]|0;c[F>>2]=D>>>0>>0?D:E;if((r+12|0)>>>0>=h>>>0){j=1;k=t;continue}if((a[f+(r+9)>>0]|0)!=116){j=1;k=t;continue}if((a[f+(r+10)>>0]|0)!=104){j=1;k=t;continue}if((a[f+(r+11)>>0]|0)!=101){j=1;k=t;continue}if((a[f+(r+12)>>0]|0)!=32){j=1;k=t;continue}k=(q+(73<>2]|0;c[j>>2]=F>>>0>>0?F:k;j=1;k=t}F=j&1;F=F<<24>>24!=0;return F|0}function Wb(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=0;r=0;a:while(1){b:do{if(f>>>0>=e>>>0)break a;g=f+c&d;h=e-f|0;i=a[b+g>>0]|0;if(!(i<<24>>24<=-1|i<<24>>24==0)){g=1;s=20;break}do if(h>>>0>1){if(((i&-32)<<24>>24==-64?(j=a[b+(g+1)>>0]|0,(j&-64)<<24>>24==-128):0)?(k=(i&255)<<6&1984|j&63,k>>>0>127):0){h=2;g=k;break}if(h>>>0>2){if((((i&-16)<<24>>24==-32?(l=a[b+(g+1)>>0]|0,(l&-64)<<24>>24==-128):0)?(m=a[b+(g+2)>>0]|0,(m&-64)<<24>>24==-128):0)?(n=(i&255)<<12&61440|(l&255)<<6&4032|m&63,n>>>0>2047):0){h=3;g=n;break}if((((h>>>0>3&(i&-8)<<24>>24==-16?(o=a[b+(g+1)>>0]|0,(o&-64)<<24>>24==-128):0)?(p=a[b+(g+2)>>0]|0,(p&-64)<<24>>24==-128):0)?(q=a[b+(g+3)>>0]|0,(q&-64)<<24>>24==-128):0)?(s=(i&255)<<18&1835008|(o&255)<<12&258048|(p&255)<<6&4032|q&63,s>>>0>65535&s>>>0<1114112):0){g=4;s=20;break b}else s=19}else s=19}else s=19;while(0);if((s|0)==19){s=0;h=1;g=i&255|1114112}f=f+h|0}while((g|0)>=1114112);if((s|0)==20){s=0;h=g;f=f+g|0}r=r+h|0}return +(r>>>0)>+(e>>>0)*.75|0}function Xb(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,l=0.0,m=0.0;h[k>>3]=a;d=c[k>>2]|0;b=c[k+4>>2]|0;e=(b|0)<0;do if(e|b>>>0<1048576){if((d|0)==0&(b&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[k>>3]=a*18014398509481984.0;b=c[k+4>>2]|0;e=c[k>>2]|0;d=-1077;f=9;break}}else if(b>>>0<=2146435071)if((d|0)==0&0==0&(b|0)==1072693248)a=0.0;else{e=d;d=-1023;f=9}while(0);if((f|0)==9){f=b+614242|0;c[k>>2]=e;c[k+4>>2]=(f&1048575)+1072079006;l=+h[k>>3]+-1.0;a=l*(l*.5);m=l/(l+2.0);i=m*m;j=i*i;h[k>>3]=l-a;e=c[k+4>>2]|0;c[k>>2]=0;c[k+4>>2]=e;g=+h[k>>3];a=m*(a+(j*(j*(j*.15313837699209373+.22222198432149784)+.3999999999940942)+i*(j*(j*(j*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))+(l-g-a);l=g*1.4426950407214463;j=+(d+(f>>>20)|0);i=j+l;a=i+(l+(j-i)+(a*1.4426950407214463+(g+a)*1.6751713164886512e-10))}return +a}function Yb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[5147]|0;b=i>>>a;if(b&3){b=(b&1^1)+a|0;e=b<<1;d=20628+(e<<2)|0;e=20628+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[5151]|0)>>>0)ha();a=h+12|0;if((c[a>>2]|0)==(f|0)){c[a>>2]=d;c[e>>2]=h;break}else ha()}else c[5147]=i&~(1<>2]=L|3;L=f+(L|4)|0;c[L>>2]=c[L>>2]|1;L=g;return L|0}h=c[5149]|0;if(o>>>0>h>>>0){if(b){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;b=e>>>1&1;b=(f|j|g|d|b)+(e>>>b)|0;e=b<<1;d=20628+(e<<2)|0;e=20628+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[5151]|0)>>>0)ha();a=f+12|0;if((c[a>>2]|0)==(g|0)){c[a>>2]=d;c[e>>2]=f;k=c[5149]|0;break}else ha()}else{c[5147]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+L>>2]=h;if(k){f=c[5152]|0;d=k>>>3;a=d<<1;e=20628+(a<<2)|0;b=c[5147]|0;d=1<>2]|0;if(a>>>0<(c[5151]|0)>>>0)ha();else{l=b;m=a}}else{c[5147]=b|d;l=20628+(a+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[5149]=h;c[5152]=i;L=j;return L|0}a=c[5148]|0;if(a){i=(a&0-a)+-1|0;K=i>>>12&16;i=i>>>K;J=i>>>5&8;i=i>>>J;L=i>>>2&4;i=i>>>L;b=i>>>1&2;i=i>>>b;j=i>>>1&1;j=c[20892+((J|K|L|b|j)+(i>>>j)<<2)>>2]|0;i=(c[j+4>>2]&-8)-o|0;b=j;while(1){a=c[b+16>>2]|0;if(!a){a=c[b+20>>2]|0;if(!a)break}b=(c[a+4>>2]&-8)-o|0;L=b>>>0>>0;i=L?b:i;b=a;j=L?a:j}f=c[5151]|0;if(j>>>0>>0)ha();h=j+o|0;if(j>>>0>=h>>>0)ha();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){n=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)ha();else{c[b>>2]=0;n=a;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)ha();a=e+12|0;if((c[a>>2]|0)!=(j|0))ha();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;n=d;break}else ha()}while(0);do if(g){a=c[j+28>>2]|0;b=20892+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[5148]=c[5148]&~(1<>>0<(c[5151]|0)>>>0)ha();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=n;else c[g+20>>2]=n;if(!n)break}b=c[5151]|0;if(n>>>0>>0)ha();c[n+24>>2]=g;a=c[j+16>>2]|0;do if(a)if(a>>>0>>0)ha();else{c[n+16>>2]=a;c[a+24>>2]=n;break}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[5151]|0)>>>0)ha();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}while(0);if(i>>>0<16){L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}else{c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=c[5149]|0;if(a){f=c[5152]|0;d=a>>>3;a=d<<1;e=20628+(a<<2)|0;b=c[5147]|0;d=1<>2]|0;if(b>>>0<(c[5151]|0)>>>0)ha();else{p=a;q=b}}else{c[5147]=b|d;p=20628+(a+2<<2)|0;q=e}c[p>>2]=f;c[q+12>>2]=f;c[f+8>>2]=q;c[f+12>>2]=e}c[5149]=i;c[5152]=h}L=j+8|0;return L|0}}}else if(a>>>0<=4294967231){a=a+11|0;o=a&-8;j=c[5148]|0;if(j){b=0-o|0;a=a>>>8;if(a)if(o>>>0>16777215)i=31;else{q=(a+1048320|0)>>>16&8;x=a<>>16&4;x=x<>>16&2;i=14-(p|q|i)+(x<>>15)|0;i=o>>>(i+7|0)&1|i<<1}else i=0;a=c[20892+(i<<2)>>2]|0;a:do if(!a){d=0;a=0;x=86}else{f=b;d=0;g=o<<((i|0)==31?0:25-(i>>>1)|0);h=a;a=0;while(1){e=c[h+4>>2]&-8;b=e-o|0;if(b>>>0>>0)if((e|0)==(o|0)){e=h;a=h;x=90;break a}else a=h;else b=f;x=c[h+20>>2]|0;h=c[h+16+(g>>>31<<2)>>2]|0;d=(x|0)==0|(x|0)==(h|0)?d:x;if(!h){x=86;break}else{f=b;g=g<<1}}}while(0);if((x|0)==86){if((d|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;m=a>>>5&8;a=a>>>m;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;d=a>>>1&1;d=c[20892+((m|n|p|q|d)+(a>>>d)<<2)>>2]|0;a=0}if(!d){i=b;j=a}else{e=d;x=90}}if((x|0)==90)while(1){x=0;q=(c[e+4>>2]&-8)-o|0;d=q>>>0>>0;b=d?q:b;a=d?e:a;d=c[e+16>>2]|0;if(d){e=d;x=90;continue}e=c[e+20>>2]|0;if(!e){i=b;j=a;break}else x=90}if((j|0)!=0?i>>>0<((c[5149]|0)-o|0)>>>0:0){f=c[5151]|0;if(j>>>0>>0)ha();h=j+o|0;if(j>>>0>=h>>>0)ha();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){s=0;break}}while(1){d=a+20|0;e=c[d>>2]|0;if(e){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)ha();else{c[b>>2]=0;s=a;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)ha();a=e+12|0;if((c[a>>2]|0)!=(j|0))ha();b=d+8|0;if((c[b>>2]|0)==(j|0)){c[a>>2]=d;c[b>>2]=e;s=d;break}else ha()}while(0);do if(g){a=c[j+28>>2]|0;b=20892+(a<<2)|0;if((j|0)==(c[b>>2]|0)){c[b>>2]=s;if(!s){c[5148]=c[5148]&~(1<>>0<(c[5151]|0)>>>0)ha();a=g+16|0;if((c[a>>2]|0)==(j|0))c[a>>2]=s;else c[g+20>>2]=s;if(!s)break}b=c[5151]|0;if(s>>>0>>0)ha();c[s+24>>2]=g;a=c[j+16>>2]|0;do if(a)if(a>>>0>>0)ha();else{c[s+16>>2]=a;c[a+24>>2]=s;break}while(0);a=c[j+20>>2]|0;if(a)if(a>>>0<(c[5151]|0)>>>0)ha();else{c[s+20>>2]=a;c[a+24>>2]=s;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=o|3;c[j+(o|4)>>2]=i|1;c[j+(i+o)>>2]=i;a=i>>>3;if(i>>>0<256){b=a<<1;e=20628+(b<<2)|0;d=c[5147]|0;a=1<>2]|0;if(b>>>0<(c[5151]|0)>>>0)ha();else{t=a;u=b}}else{c[5147]=d|a;t=20628+(b+2<<2)|0;u=e}c[t>>2]=h;c[u+12>>2]=h;c[j+(o+8)>>2]=u;c[j+(o+12)>>2]=e;break}a=i>>>8;if(a)if(i>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;a=20892+(e<<2)|0;c[j+(o+28)>>2]=e;c[j+(o+20)>>2]=0;c[j+(o+16)>>2]=0;b=c[5148]|0;d=1<>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break}a=c[a>>2]|0;c:do if((c[a+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(i|0)){w=b;break c}else{e=e<<1;a=b}}if(d>>>0<(c[5151]|0)>>>0)ha();else{c[d>>2]=h;c[j+(o+24)>>2]=a;c[j+(o+12)>>2]=h;c[j+(o+8)>>2]=h;break b}}else w=a;while(0);a=w+8|0;b=c[a>>2]|0;L=c[5151]|0;if(b>>>0>=L>>>0&w>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[j+(o+8)>>2]=b;c[j+(o+12)>>2]=w;c[j+(o+24)>>2]=0;break}else ha()}else{L=i+o|0;c[j+4>>2]=L|3;L=j+(L+4)|0;c[L>>2]=c[L>>2]|1}while(0);L=j+8|0;return L|0}}}else o=-1;while(0);d=c[5149]|0;if(d>>>0>=o>>>0){a=d-o|0;b=c[5152]|0;if(a>>>0>15){c[5152]=b+o;c[5149]=a;c[b+(o+4)>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=o|3}else{c[5149]=0;c[5152]=0;c[b+4>>2]=d|3;L=b+(d+4)|0;c[L>>2]=c[L>>2]|1}L=b+8|0;return L|0}a=c[5150]|0;if(a>>>0>o>>>0){K=a-o|0;c[5150]=K;L=c[5153]|0;c[5153]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}do if(!(c[5265]|0)){a=ja(30)|0;if(!(a+-1&a)){c[5267]=a;c[5266]=a;c[5268]=-1;c[5269]=-1;c[5270]=0;c[5258]=0;c[5265]=(la(0)|0)&-16^1431655768;break}else ha()}while(0);g=o+48|0;f=c[5267]|0;h=o+47|0;e=f+h|0;f=0-f|0;i=e&f;if(i>>>0<=o>>>0){L=0;return L|0}a=c[5257]|0;if((a|0)!=0?(u=c[5255]|0,w=u+i|0,w>>>0<=u>>>0|w>>>0>a>>>0):0){L=0;return L|0}d:do if(!(c[5258]&4)){d=c[5153]|0;e:do if(d){a=21036;while(1){b=c[a>>2]|0;if(b>>>0<=d>>>0?(r=a+4|0,(b+(c[r>>2]|0)|0)>>>0>d>>>0):0)break;a=c[a+8>>2]|0;if(!a){x=174;break e}}b=e-(c[5150]|0)&f;if(b>>>0<2147483647){d=ka(b|0)|0;w=(d|0)==((c[a>>2]|0)+(c[r>>2]|0)|0);a=w?b:0;if(w){if((d|0)!=(-1|0)){r=d;q=a;x=194;break d}}else x=184}else a=0}else x=174;while(0);do if((x|0)==174){e=ka(0)|0;if((e|0)!=(-1|0)){a=e;b=c[5266]|0;d=b+-1|0;if(!(d&a))b=i;else b=i-a+(d+a&0-b)|0;a=c[5255]|0;d=a+b|0;if(b>>>0>o>>>0&b>>>0<2147483647){w=c[5257]|0;if((w|0)!=0?d>>>0<=a>>>0|d>>>0>w>>>0:0){a=0;break}d=ka(b|0)|0;x=(d|0)==(e|0);a=x?b:0;if(x){r=e;q=a;x=194;break d}else x=184}else a=0}else a=0}while(0);f:do if((x|0)==184){e=0-b|0;do if(g>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))?(v=c[5267]|0,v=h-b+v&0-v,v>>>0<2147483647):0)if((ka(v|0)|0)==(-1|0)){ka(e|0)|0;break f}else{b=v+b|0;break}while(0);if((d|0)!=(-1|0)){r=d;q=b;x=194;break d}}while(0);c[5258]=c[5258]|4;x=191}else{a=0;x=191}while(0);if((((x|0)==191?i>>>0<2147483647:0)?(y=ka(i|0)|0,z=ka(0)|0,y>>>0>>0&((y|0)!=(-1|0)&(z|0)!=(-1|0))):0)?(A=z-y|0,B=A>>>0>(o+40|0)>>>0,B):0){r=y;q=B?A:a;x=194}if((x|0)==194){a=(c[5255]|0)+q|0;c[5255]=a;if(a>>>0>(c[5256]|0)>>>0)c[5256]=a;h=c[5153]|0;g:do if(h){f=21036;while(1){a=c[f>>2]|0;b=f+4|0;d=c[b>>2]|0;if((r|0)==(a+d|0)){x=204;break}e=c[f+8>>2]|0;if(!e)break;else f=e}if(((x|0)==204?(c[f+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=a>>>0:0){c[b>>2]=d+q;L=(c[5150]|0)+q|0;K=h+8|0;K=(K&7|0)==0?0:0-K&7;J=L-K|0;c[5153]=h+K;c[5150]=J;c[h+(K+4)>>2]=J|1;c[h+(L+4)>>2]=40;c[5154]=c[5269];break}a=c[5151]|0;if(r>>>0>>0){c[5151]=r;j=r}else j=a;b=r+q|0;a=21036;while(1){if((c[a>>2]|0)==(b|0)){x=212;break}a=c[a+8>>2]|0;if(!a){b=21036;break}}if((x|0)==212)if(!(c[a+12>>2]&8)){c[a>>2]=r;n=a+4|0;c[n>>2]=(c[n>>2]|0)+q;n=r+8|0;n=(n&7|0)==0?0:0-n&7;k=r+(q+8)|0;k=(k&7|0)==0?0:0-k&7;a=r+(k+q)|0;m=n+o|0;p=r+m|0;l=a-(r+n)-o|0;c[r+(n+4)>>2]=o|3;h:do if((a|0)!=(h|0)){if((a|0)==(c[5152]|0)){L=(c[5149]|0)+l|0;c[5149]=L;c[5152]=p;c[r+(m+4)>>2]=L|1;c[r+(L+m)>>2]=L;break}h=q+4|0;b=c[r+(h+k)>>2]|0;if((b&3|0)==1){i=b&-8;f=b>>>3;i:do if(b>>>0>=256){g=c[r+((k|24)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;do if((e|0)==(a|0)){d=k|16;e=r+(h+d)|0;b=c[e>>2]|0;if(!b){d=r+(d+q)|0;b=c[d>>2]|0;if(!b){I=0;break}}else d=e;while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)ha();else{c[d>>2]=0;I=b;break}}else{f=c[r+((k|8)+q)>>2]|0;if(f>>>0>>0)ha();b=f+12|0;if((c[b>>2]|0)!=(a|0))ha();d=e+8|0;if((c[d>>2]|0)==(a|0)){c[b>>2]=e;c[d>>2]=f;I=e;break}else ha()}while(0);if(!g)break;b=c[r+(q+28+k)>>2]|0;d=20892+(b<<2)|0;do if((a|0)!=(c[d>>2]|0)){if(g>>>0<(c[5151]|0)>>>0)ha();b=g+16|0;if((c[b>>2]|0)==(a|0))c[b>>2]=I;else c[g+20>>2]=I;if(!I)break i}else{c[d>>2]=I;if(I)break;c[5148]=c[5148]&~(1<>>0>>0)ha();c[I+24>>2]=g;a=k|16;b=c[r+(a+q)>>2]|0;do if(b)if(b>>>0>>0)ha();else{c[I+16>>2]=b;c[b+24>>2]=I;break}while(0);a=c[r+(h+a)>>2]|0;if(!a)break;if(a>>>0<(c[5151]|0)>>>0)ha();else{c[I+20>>2]=a;c[a+24>>2]=I;break}}else{d=c[r+((k|8)+q)>>2]|0;e=c[r+(q+12+k)>>2]|0;b=20628+(f<<1<<2)|0;do if((d|0)!=(b|0)){if(d>>>0>>0)ha();if((c[d+12>>2]|0)==(a|0))break;ha()}while(0);if((e|0)==(d|0)){c[5147]=c[5147]&~(1<>>0>>0)ha();b=e+8|0;if((c[b>>2]|0)==(a|0)){E=b;break}ha()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);a=r+((i|k)+q)|0;f=i+l|0}else f=l;a=a+4|0;c[a>>2]=c[a>>2]&-2;c[r+(m+4)>>2]=f|1;c[r+(f+m)>>2]=f;a=f>>>3;if(f>>>0<256){b=a<<1;e=20628+(b<<2)|0;d=c[5147]|0;a=1<>2]|0;if(b>>>0>=(c[5151]|0)>>>0){J=a;K=b;break}ha()}while(0);c[J>>2]=p;c[K+12>>2]=p;c[r+(m+8)>>2]=K;c[r+(m+12)>>2]=e;break}a=f>>>8;do if(!a)e=0;else{if(f>>>0>16777215){e=31;break}J=(a+1048320|0)>>>16&8;K=a<>>16&4;K=K<>>16&2;e=14-(I|J|e)+(K<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);a=20892+(e<<2)|0;c[r+(m+28)>>2]=e;c[r+(m+20)>>2]=0;c[r+(m+16)>>2]=0;b=c[5148]|0;d=1<>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break}a=c[a>>2]|0;j:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){L=b;break j}else{e=e<<1;a=b}}if(d>>>0<(c[5151]|0)>>>0)ha();else{c[d>>2]=p;c[r+(m+24)>>2]=a;c[r+(m+12)>>2]=p;c[r+(m+8)>>2]=p;break h}}else L=a;while(0);a=L+8|0;b=c[a>>2]|0;K=c[5151]|0;if(b>>>0>=K>>>0&L>>>0>=K>>>0){c[b+12>>2]=p;c[a>>2]=p;c[r+(m+8)>>2]=b;c[r+(m+12)>>2]=L;c[r+(m+24)>>2]=0;break}else ha()}else{L=(c[5150]|0)+l|0;c[5150]=L;c[5153]=p;c[r+(m+4)>>2]=L|1}while(0);L=r+(n|8)|0;return L|0}else b=21036;while(1){a=c[b>>2]|0;if(a>>>0<=h>>>0?(C=c[b+4>>2]|0,D=a+C|0,D>>>0>h>>>0):0)break;b=c[b+8>>2]|0}b=a+(C+-39)|0;b=a+(C+-47+((b&7|0)==0?0:0-b&7))|0;f=h+16|0;b=b>>>0>>0?h:b;a=b+8|0;d=r+8|0;d=(d&7|0)==0?0:0-d&7;L=q+-40-d|0;c[5153]=r+d;c[5150]=L;c[r+(d+4)>>2]=L|1;c[r+(q+-36)>>2]=40;c[5154]=c[5269];d=b+4|0;c[d>>2]=27;c[a>>2]=c[5259];c[a+4>>2]=c[5260];c[a+8>>2]=c[5261];c[a+12>>2]=c[5262];c[5259]=r;c[5260]=q;c[5262]=0;c[5261]=a;a=b+28|0;c[a>>2]=7;if((b+32|0)>>>0>>0)do{L=a;a=a+4|0;c[a>>2]=7}while((L+8|0)>>>0>>0);if((b|0)!=(h|0)){g=b-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[b>>2]=g;a=g>>>3;if(g>>>0<256){b=a<<1;e=20628+(b<<2)|0;d=c[5147]|0;a=1<>2]|0;if(b>>>0<(c[5151]|0)>>>0)ha();else{F=a;G=b}}else{c[5147]=d|a;F=20628+(b+2<<2)|0;G=e}c[F>>2]=h;c[G+12>>2]=h;c[h+8>>2]=G;c[h+12>>2]=e;break}a=g>>>8;if(a)if(g>>>0>16777215)e=31;else{K=(a+1048320|0)>>>16&8;L=a<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=20892+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;a=c[5148]|0;b=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=c[d>>2]|0;k:do if((c[a+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(g|0)){H=b;break k}else{e=e<<1;a=b}}if(d>>>0<(c[5151]|0)>>>0)ha();else{c[d>>2]=h;c[h+24>>2]=a;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else H=a;while(0);a=H+8|0;b=c[a>>2]|0;L=c[5151]|0;if(b>>>0>=L>>>0&H>>>0>=L>>>0){c[b+12>>2]=h;c[a>>2]=h;c[h+8>>2]=b;c[h+12>>2]=H;c[h+24>>2]=0;break}else ha()}}else{L=c[5151]|0;if((L|0)==0|r>>>0>>0)c[5151]=r;c[5259]=r;c[5260]=q;c[5262]=0;c[5156]=c[5265];c[5155]=-1;a=0;do{L=a<<1;K=20628+(L<<2)|0;c[20628+(L+3<<2)>>2]=K;c[20628+(L+2<<2)>>2]=K;a=a+1|0}while((a|0)!=32);L=r+8|0;L=(L&7|0)==0?0:0-L&7;K=q+-40-L|0;c[5153]=r+L;c[5150]=K;c[r+(L+4)>>2]=K|1;c[r+(q+-36)>>2]=40;c[5154]=c[5269]}while(0);a=c[5150]|0;if(a>>>0>o>>>0){K=a-o|0;c[5150]=K;L=c[5153]|0;c[5153]=L+o;c[L+(o+4)>>2]=K|1;c[L+4>>2]=o|3;L=L+8|0;return L|0}}if(!(c[5135]|0))a=20584;else a=c[(ga()|0)+60>>2]|0;c[a>>2]=12;L=0;return L|0}function Zb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[5151]|0;if(b>>>0>>0)ha();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)ha();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)ha();if((l|0)==(c[5152]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[5149]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=20628+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)ha();if((c[e+12>>2]|0)!=(l|0))ha()}if((d|0)==(e|0)){c[5147]=c[5147]&~(1<>>0>>0)ha();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else ha()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)ha();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)ha();b=f+12|0;if((c[b>>2]|0)!=(l|0))ha();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else ha()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=20892+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[5148]=c[5148]&~(1<>>0<(c[5151]|0)>>>0)ha();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[5151]|0;if(k>>>0>>0)ha();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)ha();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[5151]|0)>>>0)ha();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)ha();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))ha();if(!(d&2)){if((q|0)==(c[5153]|0)){t=(c[5150]|0)+g|0;c[5150]=t;c[5153]=u;c[u+4>>2]=t|1;if((u|0)!=(c[5152]|0))return;c[5152]=0;c[5149]=0;return}if((q|0)==(c[5152]|0)){t=(c[5149]|0)+g|0;c[5149]=t;c[5152]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[5151]|0)>>>0)ha();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[5151]|0)>>>0)ha();e=d+12|0;if((c[e>>2]|0)!=(q|0))ha();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else ha()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=20892+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[5148]=c[5148]&~(1<>>0<(c[5151]|0)>>>0)ha();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[5151]|0;if(p>>>0>>0)ha();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)ha();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[5151]|0)>>>0)ha();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=20628+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[5151]|0)>>>0)ha();if((c[e+12>>2]|0)!=(q|0))ha()}if((d|0)==(e|0)){c[5147]=c[5147]&~(1<>>0<(c[5151]|0)>>>0)ha();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else ha()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[5152]|0)){c[5149]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=20628+(d<<2)|0;e=c[5147]|0;b=1<>2]|0;if(d>>>0<(c[5151]|0)>>>0)ha();else{r=b;s=d}}else{c[5147]=e|b;r=20628+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=20892+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[5148]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){e=b+16+(f>>>31<<2)|0;d=c[e>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){t=d;break b}else{f=f<<1;b=d}}if(e>>>0<(c[5151]|0)>>>0)ha();else{c[e>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[5151]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else ha()}else{c[5148]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[5155]|0)+-1|0;c[5155]=u;if(!u)b=21044;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[5155]=-1;return}function _b(){}function $b(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (C=d,a-c>>>0|0)|0}function ac(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function bc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function cc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<=4096)return ma(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function ec(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function fc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else dc(b,c,d)|0;return b|0}function gc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<>c-32|0}function hc(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function ic(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return (C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function jc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=$b(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return $b((oc(h,g,$b(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function kc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=$b(h^a,g^b,h,g)|0;b=C;oc(a,b,$b(l^d,k^e,l,k)|0,C,j)|0;e=$b(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return (C=d,e)|0}function lc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=ic(e,f)|0;a=C;return (C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function mc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return oc(a,b,c,d,0)|0}function nc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;oc(a,b,d,e,f)|0;i=g;return (C=c[f+4>>2]|0,c[f>>2]|0)|0}function oc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (C=n,f)|0}else{if(!g){n=0;f=0;return (C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=hc(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((hc(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=ec(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;$b(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=$b(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function pc(a,b,c){a=a|0;b=b|0;c=c|0;ra[a&1](b|0,c|0)}function qc(a,b,c){a=a|0;b=b|0;c=c|0;return sa[a&1](b|0,c|0)|0}function rc(a,b){a=a|0;b=b|0;ba(0)}function sc(a,b){a=a|0;b=b|0;ba(1);return 0} - -// EMSCRIPTEN_END_FUNCS -var ra=[rc,Mb];var sa=[sc,Lb];return{_i64Subtract:$b,_free:Zb,_i64Add:ec,_memmove:fc,_memset:ac,_malloc:Yb,_encode:Ca,_memcpy:dc,_bitshift64Lshr:bc,_bitshift64Shl:cc,runPostSets:_b,stackAlloc:ta,stackSave:ua,stackRestore:va,establishStackSpace:wa,setThrew:xa,setTempRet0:Aa,getTempRet0:Ba,dynCall_vii:pc,dynCall_iii:qc}}) - - -// EMSCRIPTEN_END_ASM -(b.I,b.J,buffer),Ja=b._i64Subtract=Y._i64Subtract,pa=b._free=Y._free;b.runPostSets=Y.runPostSets;var Pa=b._i64Add=Y._i64Add,Qa=b._memmove=Y._memmove,La=b._memset=Y._memset,ia=b._malloc=Y._malloc;b._encode=Y._encode;var Oa=b._memcpy=Y._memcpy,Ma=b._bitshift64Lshr=Y._bitshift64Lshr,Na=b._bitshift64Shl=Y._bitshift64Shl;b.dynCall_vii=Y.dynCall_vii;b.dynCall_iii=Y.dynCall_iii;A.n=Y.stackAlloc;A.G=Y.stackSave;A.F=Y.stackRestore;A.W=Y.establishStackSpace;A.P=Y.setTempRet0; -A.N=Y.getTempRet0; -if(W)if("function"===typeof b.locateFile?W=b.locateFile(W):b.memoryInitializerPrefixURL&&(W=b.memoryInitializerPrefixURL+W),v||x){var Ta=b.readBinary(W);P.set(Ta,A.C)}else{var Va=function(){Browser.T(W,Ua,function(){throw"could not load memory initializer "+W;})};U++;b.monitorRunDependencies&&b.monitorRunDependencies(U);var Ua=function(a){a.byteLength&&(a=new Uint8Array(a));P.set(a,A.C);U--;b.monitorRunDependencies&&b.monitorRunDependencies(U);0==U&&(null!==Ha&&(clearInterval(Ha),Ha=null),V&&(a=V, -V=null,a()))},Z=b.memoryInitializerRequest;if(Z){var Wa=function(){200!==Z.status&&0!==Z.status?(console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+Z.status+", retrying "+W),Va()):Ua(Z.response)};Z.response?setTimeout(Wa,0):Z.addEventListener("load",Wa)}else Va()}function y(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}y.prototype=Error();y.prototype.constructor=y; -var Xa=null,V=function Ya(){b.calledRun||Za();b.calledRun||(V=Ya)}; -b.callMain=b.U=function(a){function c(){for(var a=0;3>a;a++)e.push(0)}assert(0==U,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(0==Aa.length,"cannot call main when preRun functions remain to be called");a=a||[];T||(T=!0,S(Ba));var d=a.length+1,e=[O(Ga(b.thisProgram),"i8",0)];c();for(var h=0;h 0; -}; - -/* Fills up the input ringbuffer by calling the input callback. - - Does nothing if there are at least 32 bytes present after current position. - - Returns 0 if either: - - the input callback returned an error, or - - there is no more input and the position is past the end of the stream. - - After encountering the end of the input stream, 32 additional zero bytes are - copied to the ringbuffer, therefore it is safe to call this function after - every 32 bytes of input is read. -*/ -BrotliBitReader.prototype.readMoreInput = function() { - if (this.bit_end_pos_ > 256) { - return; - } else if (this.eos_) { - if (this.bit_pos_ > this.bit_end_pos_) - throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_); - } else { - var dst = this.buf_ptr_; - var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE); - if (bytes_read < 0) { - throw new Error('Unexpected end of input'); - } - - if (bytes_read < BROTLI_READ_SIZE) { - this.eos_ = 1; - /* Store 32 bytes of zero after the stream end. */ - for (var p = 0; p < 32; p++) - this.buf_[dst + bytes_read + p] = 0; - } - - if (dst === 0) { - /* Copy the head of the ringbuffer to the slack region. */ - for (var p = 0; p < 32; p++) - this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p]; - - this.buf_ptr_ = BROTLI_READ_SIZE; - } else { - this.buf_ptr_ = 0; - } - - this.bit_end_pos_ += bytes_read << 3; - } -}; - -/* Guarantees that there are at least 24 bits in the buffer. */ -BrotliBitReader.prototype.fillBitWindow = function() { - while (this.bit_pos_ >= 8) { - this.val_ >>>= 8; - this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; - ++this.pos_; - this.bit_pos_ = this.bit_pos_ - 8 >>> 0; - this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; - } -}; - -/* Reads the specified number of bits from Read Buffer. */ -BrotliBitReader.prototype.readBits = function(n_bits) { - if (32 - this.bit_pos_ < n_bits) { - this.fillBitWindow(); - } - - var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]); - this.bit_pos_ += n_bits; - return val; -}; - -module.exports = BrotliBitReader; diff --git a/skills/flight-finder/node_modules/brotli/dec/context.js b/skills/flight-finder/node_modules/brotli/dec/context.js deleted file mode 100644 index ba98779..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/context.js +++ /dev/null @@ -1,250 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Lookup table to map the previous two bytes to a context id. - - There are four different context modeling modes defined here: - CONTEXT_LSB6: context id is the least significant 6 bits of the last byte, - CONTEXT_MSB6: context id is the most significant 6 bits of the last byte, - CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, - CONTEXT_SIGNED: second-order context model tuned for signed integers. - - The context id for the UTF8 context model is calculated as follows. If p1 - and p2 are the previous two bytes, we calcualte the context as - - context = kContextLookup[p1] | kContextLookup[p2 + 256]. - - If the previous two bytes are ASCII characters (i.e. < 128), this will be - equivalent to - - context = 4 * context1(p1) + context2(p2), - - where context1 is based on the previous byte in the following way: - - 0 : non-ASCII control - 1 : \t, \n, \r - 2 : space - 3 : other punctuation - 4 : " ' - 5 : % - 6 : ( < [ { - 7 : ) > ] } - 8 : , ; : - 9 : . - 10 : = - 11 : number - 12 : upper-case vowel - 13 : upper-case consonant - 14 : lower-case vowel - 15 : lower-case consonant - - and context2 is based on the second last byte: - - 0 : control, space - 1 : punctuation - 2 : upper-case letter, number - 3 : lower-case letter - - If the last byte is ASCII, and the second last byte is not (in a valid UTF8 - stream it will be a continuation byte, value between 128 and 191), the - context is the same as if the second last byte was an ASCII control or space. - - If the last byte is a UTF8 lead byte (value >= 192), then the next byte will - be a continuation byte and the context id is 2 or 3 depending on the LSB of - the last byte and to a lesser extent on the second last byte if it is ASCII. - - If the last byte is a UTF8 continuation byte, the second last byte can be: - - continuation byte: the next byte is probably ASCII or lead byte (assuming - 4-byte UTF8 characters are rare) and the context id is 0 or 1. - - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 - - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 - - The possible value combinations of the previous two bytes, the range of - context ids and the type of the next byte is summarized in the table below: - - |--------\-----------------------------------------------------------------| - | \ Last byte | - | Second \---------------------------------------------------------------| - | last byte \ ASCII | cont. byte | lead byte | - | \ (0-127) | (128-191) | (192-) | - |=============|===================|=====================|==================| - | ASCII | next: ASCII/lead | not valid | next: cont. | - | (0-127) | context: 4 - 63 | | context: 2 - 3 | - |-------------|-------------------|---------------------|------------------| - | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | - | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | - |-------------|-------------------|---------------------|------------------| - | lead byte | not valid | next: ASCII/lead | not valid | - | (192-207) | | context: 0 - 1 | | - |-------------|-------------------|---------------------|------------------| - | lead byte | not valid | next: cont. | not valid | - | (208-) | | context: 2 - 3 | | - |-------------|-------------------|---------------------|------------------| - - The context id for the signed context mode is calculated as: - - context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2]. - - For any context modeling modes, the context ids can be calculated by |-ing - together two lookups from one table using context model dependent offsets: - - context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2]. - - where offset1 and offset2 are dependent on the context mode. -*/ - -var CONTEXT_LSB6 = 0; -var CONTEXT_MSB6 = 1; -var CONTEXT_UTF8 = 2; -var CONTEXT_SIGNED = 3; - -/* Common context lookup table for all context modes. */ -exports.lookup = new Uint8Array([ - /* CONTEXT_UTF8, last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, - 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, - 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, - 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, - 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - /* UTF8 continuation byte range. */ - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - /* UTF8 lead byte range. */ - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - /* CONTEXT_UTF8 second last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - /* UTF8 continuation byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* UTF8 lead byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* CONTEXT_SIGNED, second last byte. */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, - /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, - /* CONTEXT_LSB6, last byte. */ - 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, - 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, - 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, - 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, - /* CONTEXT_MSB6, last byte. */ - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, - 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, - 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, - 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, - 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, - 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, - 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, - 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, - 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, - 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, - 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, - 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, - /* CONTEXT_{M,L}SB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -]); - -exports.lookupOffsets = new Uint16Array([ - /* CONTEXT_LSB6 */ - 1024, 1536, - /* CONTEXT_MSB6 */ - 1280, 1536, - /* CONTEXT_UTF8 */ - 0, 256, - /* CONTEXT_SIGNED */ - 768, 512, -]); diff --git a/skills/flight-finder/node_modules/brotli/dec/decode.js b/skills/flight-finder/node_modules/brotli/dec/decode.js deleted file mode 100644 index 7b2aa77..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/decode.js +++ /dev/null @@ -1,938 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -var BrotliInput = require('./streams').BrotliInput; -var BrotliOutput = require('./streams').BrotliOutput; -var BrotliBitReader = require('./bit_reader'); -var BrotliDictionary = require('./dictionary'); -var HuffmanCode = require('./huffman').HuffmanCode; -var BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable; -var Context = require('./context'); -var Prefix = require('./prefix'); -var Transform = require('./transform'); - -var kDefaultCodeLength = 8; -var kCodeLengthRepeatCode = 16; -var kNumLiteralCodes = 256; -var kNumInsertAndCopyCodes = 704; -var kNumBlockLengthCodes = 26; -var kLiteralContextBits = 6; -var kDistanceContextBits = 2; - -var HUFFMAN_TABLE_BITS = 8; -var HUFFMAN_TABLE_MASK = 0xff; -/* Maximum possible Huffman table size for an alphabet size of 704, max code - * length 15 and root table bits 8. */ -var HUFFMAN_MAX_TABLE_SIZE = 1080; - -var CODE_LENGTH_CODES = 18; -var kCodeLengthCodeOrder = new Uint8Array([ - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, -]); - -var NUM_DISTANCE_SHORT_CODES = 16; -var kDistanceShortCodeIndexOffset = new Uint8Array([ - 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 -]); - -var kDistanceShortCodeValueOffset = new Int8Array([ - 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 -]); - -var kMaxHuffmanTableSize = new Uint16Array([ - 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, - 854, 886, 920, 952, 984, 1016, 1048, 1080 -]); - -function DecodeWindowBits(br) { - var n; - if (br.readBits(1) === 0) { - return 16; - } - - n = br.readBits(3); - if (n > 0) { - return 17 + n; - } - - n = br.readBits(3); - if (n > 0) { - return 8 + n; - } - - return 17; -} - -/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ -function DecodeVarLenUint8(br) { - if (br.readBits(1)) { - var nbits = br.readBits(3); - if (nbits === 0) { - return 1; - } else { - return br.readBits(nbits) + (1 << nbits); - } - } - return 0; -} - -function MetaBlockLength() { - this.meta_block_length = 0; - this.input_end = 0; - this.is_uncompressed = 0; - this.is_metadata = false; -} - -function DecodeMetaBlockLength(br) { - var out = new MetaBlockLength; - var size_nibbles; - var size_bytes; - var i; - - out.input_end = br.readBits(1); - if (out.input_end && br.readBits(1)) { - return out; - } - - size_nibbles = br.readBits(2) + 4; - if (size_nibbles === 7) { - out.is_metadata = true; - - if (br.readBits(1) !== 0) - throw new Error('Invalid reserved bit'); - - size_bytes = br.readBits(2); - if (size_bytes === 0) - return out; - - for (i = 0; i < size_bytes; i++) { - var next_byte = br.readBits(8); - if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0) - throw new Error('Invalid size byte'); - - out.meta_block_length |= next_byte << (i * 8); - } - } else { - for (i = 0; i < size_nibbles; ++i) { - var next_nibble = br.readBits(4); - if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) - throw new Error('Invalid size nibble'); - - out.meta_block_length |= next_nibble << (i * 4); - } - } - - ++out.meta_block_length; - - if (!out.input_end && !out.is_metadata) { - out.is_uncompressed = br.readBits(1); - } - - return out; -} - -/* Decodes the next Huffman code from bit-stream. */ -function ReadSymbol(table, index, br) { - var start_index = index; - - var nbits; - br.fillBitWindow(); - index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK; - nbits = table[index].bits - HUFFMAN_TABLE_BITS; - if (nbits > 0) { - br.bit_pos_ += HUFFMAN_TABLE_BITS; - index += table[index].value; - index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1); - } - br.bit_pos_ += table[index].bits; - return table[index].value; -} - -function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { - var symbol = 0; - var prev_code_len = kDefaultCodeLength; - var repeat = 0; - var repeat_code_len = 0; - var space = 32768; - - var table = []; - for (var i = 0; i < 32; i++) - table.push(new HuffmanCode(0, 0)); - - BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES); - - while (symbol < num_symbols && space > 0) { - var p = 0; - var code_len; - - br.readMoreInput(); - br.fillBitWindow(); - p += (br.val_ >>> br.bit_pos_) & 31; - br.bit_pos_ += table[p].bits; - code_len = table[p].value & 0xff; - if (code_len < kCodeLengthRepeatCode) { - repeat = 0; - code_lengths[symbol++] = code_len; - if (code_len !== 0) { - prev_code_len = code_len; - space -= 32768 >> code_len; - } - } else { - var extra_bits = code_len - 14; - var old_repeat; - var repeat_delta; - var new_len = 0; - if (code_len === kCodeLengthRepeatCode) { - new_len = prev_code_len; - } - if (repeat_code_len !== new_len) { - repeat = 0; - repeat_code_len = new_len; - } - old_repeat = repeat; - if (repeat > 0) { - repeat -= 2; - repeat <<= extra_bits; - } - repeat += br.readBits(extra_bits) + 3; - repeat_delta = repeat - old_repeat; - if (symbol + repeat_delta > num_symbols) { - throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols'); - } - - for (var x = 0; x < repeat_delta; x++) - code_lengths[symbol + x] = repeat_code_len; - - symbol += repeat_delta; - - if (repeat_code_len !== 0) { - space -= repeat_delta << (15 - repeat_code_len); - } - } - } - if (space !== 0) { - throw new Error("[ReadHuffmanCodeLengths] space = " + space); - } - - for (; symbol < num_symbols; symbol++) - code_lengths[symbol] = 0; -} - -function ReadHuffmanCode(alphabet_size, tables, table, br) { - var table_size = 0; - var simple_code_or_skip; - var code_lengths = new Uint8Array(alphabet_size); - - br.readMoreInput(); - - /* simple_code_or_skip is used as follows: - 1 for simple code; - 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ - simple_code_or_skip = br.readBits(2); - if (simple_code_or_skip === 1) { - /* Read symbols, codes & code lengths directly. */ - var i; - var max_bits_counter = alphabet_size - 1; - var max_bits = 0; - var symbols = new Int32Array(4); - var num_symbols = br.readBits(2) + 1; - while (max_bits_counter) { - max_bits_counter >>= 1; - ++max_bits; - } - - for (i = 0; i < num_symbols; ++i) { - symbols[i] = br.readBits(max_bits) % alphabet_size; - code_lengths[symbols[i]] = 2; - } - code_lengths[symbols[0]] = 1; - switch (num_symbols) { - case 1: - break; - case 3: - if ((symbols[0] === symbols[1]) || - (symbols[0] === symbols[2]) || - (symbols[1] === symbols[2])) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - break; - case 2: - if (symbols[0] === symbols[1]) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - - code_lengths[symbols[1]] = 1; - break; - case 4: - if ((symbols[0] === symbols[1]) || - (symbols[0] === symbols[2]) || - (symbols[0] === symbols[3]) || - (symbols[1] === symbols[2]) || - (symbols[1] === symbols[3]) || - (symbols[2] === symbols[3])) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - - if (br.readBits(1)) { - code_lengths[symbols[2]] = 3; - code_lengths[symbols[3]] = 3; - } else { - code_lengths[symbols[0]] = 2; - } - break; - } - } else { /* Decode Huffman-coded code lengths. */ - var i; - var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES); - var space = 32; - var num_codes = 0; - /* Static Huffman code for the code length code lengths */ - var huff = [ - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5) - ]; - for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) { - var code_len_idx = kCodeLengthCodeOrder[i]; - var p = 0; - var v; - br.fillBitWindow(); - p += (br.val_ >>> br.bit_pos_) & 15; - br.bit_pos_ += huff[p].bits; - v = huff[p].value; - code_length_code_lengths[code_len_idx] = v; - if (v !== 0) { - space -= (32 >> v); - ++num_codes; - } - } - - if (!(num_codes === 1 || space === 0)) - throw new Error('[ReadHuffmanCode] invalid num_codes or space'); - - ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br); - } - - table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size); - - if (table_size === 0) { - throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: "); - } - - return table_size; -} - -function ReadBlockLength(table, index, br) { - var code; - var nbits; - code = ReadSymbol(table, index, br); - nbits = Prefix.kBlockLengthPrefixCode[code].nbits; - return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); -} - -function TranslateShortCodes(code, ringbuffer, index) { - var val; - if (code < NUM_DISTANCE_SHORT_CODES) { - index += kDistanceShortCodeIndexOffset[code]; - index &= 3; - val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; - } else { - val = code - NUM_DISTANCE_SHORT_CODES + 1; - } - return val; -} - -function MoveToFront(v, index) { - var value = v[index]; - var i = index; - for (; i; --i) v[i] = v[i - 1]; - v[0] = value; -} - -function InverseMoveToFrontTransform(v, v_len) { - var mtf = new Uint8Array(256); - var i; - for (i = 0; i < 256; ++i) { - mtf[i] = i; - } - for (i = 0; i < v_len; ++i) { - var index = v[i]; - v[i] = mtf[index]; - if (index) MoveToFront(mtf, index); - } -} - -/* Contains a collection of huffman trees with the same alphabet size. */ -function HuffmanTreeGroup(alphabet_size, num_htrees) { - this.alphabet_size = alphabet_size; - this.num_htrees = num_htrees; - this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); - this.htrees = new Uint32Array(num_htrees); -} - -HuffmanTreeGroup.prototype.decode = function(br) { - var i; - var table_size; - var next = 0; - for (i = 0; i < this.num_htrees; ++i) { - this.htrees[i] = next; - table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br); - next += table_size; - } -}; - -function DecodeContextMap(context_map_size, br) { - var out = { num_htrees: null, context_map: null }; - var use_rle_for_zeros; - var max_run_length_prefix = 0; - var table; - var i; - - br.readMoreInput(); - var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; - - var context_map = out.context_map = new Uint8Array(context_map_size); - if (num_htrees <= 1) { - return out; - } - - use_rle_for_zeros = br.readBits(1); - if (use_rle_for_zeros) { - max_run_length_prefix = br.readBits(4) + 1; - } - - table = []; - for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) { - table[i] = new HuffmanCode(0, 0); - } - - ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br); - - for (i = 0; i < context_map_size;) { - var code; - - br.readMoreInput(); - code = ReadSymbol(table, 0, br); - if (code === 0) { - context_map[i] = 0; - ++i; - } else if (code <= max_run_length_prefix) { - var reps = 1 + (1 << code) + br.readBits(code); - while (--reps) { - if (i >= context_map_size) { - throw new Error("[DecodeContextMap] i >= context_map_size"); - } - context_map[i] = 0; - ++i; - } - } else { - context_map[i] = code - max_run_length_prefix; - ++i; - } - } - if (br.readBits(1)) { - InverseMoveToFrontTransform(context_map, context_map_size); - } - - return out; -} - -function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { - var ringbuffer = tree_type * 2; - var index = tree_type; - var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br); - var block_type; - if (type_code === 0) { - block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; - } else if (type_code === 1) { - block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1; - } else { - block_type = type_code - 2; - } - if (block_type >= max_block_type) { - block_type -= max_block_type; - } - block_types[tree_type] = block_type; - ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; - ++indexes[index]; -} - -function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { - var rb_size = ringbuffer_mask + 1; - var rb_pos = pos & ringbuffer_mask; - var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; - var nbytes; - - /* For short lengths copy byte-by-byte */ - if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { - while (len-- > 0) { - br.readMoreInput(); - ringbuffer[rb_pos++] = br.readBits(8); - if (rb_pos === rb_size) { - output.write(ringbuffer, rb_size); - rb_pos = 0; - } - } - return; - } - - if (br.bit_end_pos_ < 32) { - throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32'); - } - - /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */ - while (br.bit_pos_ < 32) { - ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_); - br.bit_pos_ += 8; - ++rb_pos; - --len; - } - - /* Copy remaining bytes from br.buf_ to ringbuffer. */ - nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3; - if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { - var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; - for (var x = 0; x < tail; x++) - ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; - - nbytes -= tail; - rb_pos += tail; - len -= tail; - br_pos = 0; - } - - for (var x = 0; x < nbytes; x++) - ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; - - rb_pos += nbytes; - len -= nbytes; - - /* If we wrote past the logical end of the ringbuffer, copy the tail of the - ringbuffer to its beginning and flush the ringbuffer to the output. */ - if (rb_pos >= rb_size) { - output.write(ringbuffer, rb_size); - rb_pos -= rb_size; - for (var x = 0; x < rb_pos; x++) - ringbuffer[x] = ringbuffer[rb_size + x]; - } - - /* If we have more to copy than the remaining size of the ringbuffer, then we - first fill the ringbuffer from the input and then flush the ringbuffer to - the output */ - while (rb_pos + len >= rb_size) { - nbytes = rb_size - rb_pos; - if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { - throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); - } - output.write(ringbuffer, rb_size); - len -= nbytes; - rb_pos = 0; - } - - /* Copy straight from the input onto the ringbuffer. The ringbuffer will be - flushed to the output at a later time. */ - if (br.input_.read(ringbuffer, rb_pos, len) < len) { - throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); - } - - /* Restore the state of the bit reader. */ - br.reset(); -} - -/* Advances the bit reader position to the next byte boundary and verifies - that any skipped bits are set to zero. */ -function JumpToByteBoundary(br) { - var new_bit_pos = (br.bit_pos_ + 7) & ~7; - var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); - return pad_bits == 0; -} - -function BrotliDecompressedSize(buffer) { - var input = new BrotliInput(buffer); - var br = new BrotliBitReader(input); - DecodeWindowBits(br); - var out = DecodeMetaBlockLength(br); - return out.meta_block_length; -} - -exports.BrotliDecompressedSize = BrotliDecompressedSize; - -function BrotliDecompressBuffer(buffer, output_size) { - var input = new BrotliInput(buffer); - - if (output_size == null) { - output_size = BrotliDecompressedSize(buffer); - } - - var output_buffer = new Uint8Array(output_size); - var output = new BrotliOutput(output_buffer); - - BrotliDecompress(input, output); - - if (output.pos < output.buffer.length) { - output.buffer = output.buffer.subarray(0, output.pos); - } - - return output.buffer; -} - -exports.BrotliDecompressBuffer = BrotliDecompressBuffer; - -function BrotliDecompress(input, output) { - var i; - var pos = 0; - var input_end = 0; - var window_bits = 0; - var max_backward_distance; - var max_distance = 0; - var ringbuffer_size; - var ringbuffer_mask; - var ringbuffer; - var ringbuffer_end; - /* This ring buffer holds a few past copy distances that will be used by */ - /* some special distance codes. */ - var dist_rb = [ 16, 15, 11, 4 ]; - var dist_rb_idx = 0; - /* The previous 2 bytes used for context. */ - var prev_byte1 = 0; - var prev_byte2 = 0; - var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)]; - var block_type_trees; - var block_len_trees; - var br; - - /* We need the slack region for the following reasons: - - always doing two 8-byte copies for fast backward copying - - transforms - - flushing the input ringbuffer when decoding uncompressed blocks */ - var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; - - br = new BrotliBitReader(input); - - /* Decode window size. */ - window_bits = DecodeWindowBits(br); - max_backward_distance = (1 << window_bits) - 16; - - ringbuffer_size = 1 << window_bits; - ringbuffer_mask = ringbuffer_size - 1; - ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength); - ringbuffer_end = ringbuffer_size; - - block_type_trees = []; - block_len_trees = []; - for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) { - block_type_trees[x] = new HuffmanCode(0, 0); - block_len_trees[x] = new HuffmanCode(0, 0); - } - - while (!input_end) { - var meta_block_remaining_len = 0; - var is_uncompressed; - var block_length = [ 1 << 28, 1 << 28, 1 << 28 ]; - var block_type = [ 0 ]; - var num_block_types = [ 1, 1, 1 ]; - var block_type_rb = [ 0, 1, 0, 1, 0, 1 ]; - var block_type_rb_index = [ 0 ]; - var distance_postfix_bits; - var num_direct_distance_codes; - var distance_postfix_mask; - var num_distance_codes; - var context_map = null; - var context_modes = null; - var num_literal_htrees; - var dist_context_map = null; - var num_dist_htrees; - var context_offset = 0; - var context_map_slice = null; - var literal_htree_index = 0; - var dist_context_offset = 0; - var dist_context_map_slice = null; - var dist_htree_index = 0; - var context_lookup_offset1 = 0; - var context_lookup_offset2 = 0; - var context_mode; - var htree_command; - - for (i = 0; i < 3; ++i) { - hgroup[i].codes = null; - hgroup[i].htrees = null; - } - - br.readMoreInput(); - - var _out = DecodeMetaBlockLength(br); - meta_block_remaining_len = _out.meta_block_length; - if (pos + meta_block_remaining_len > output.buffer.length) { - /* We need to grow the output buffer to fit the additional data. */ - var tmp = new Uint8Array( pos + meta_block_remaining_len ); - tmp.set( output.buffer ); - output.buffer = tmp; - } - input_end = _out.input_end; - is_uncompressed = _out.is_uncompressed; - - if (_out.is_metadata) { - JumpToByteBoundary(br); - - for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { - br.readMoreInput(); - /* Read one byte and ignore it. */ - br.readBits(8); - } - - continue; - } - - if (meta_block_remaining_len === 0) { - continue; - } - - if (is_uncompressed) { - br.bit_pos_ = (br.bit_pos_ + 7) & ~7; - CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos, - ringbuffer, ringbuffer_mask, br); - pos += meta_block_remaining_len; - continue; - } - - for (i = 0; i < 3; ++i) { - num_block_types[i] = DecodeVarLenUint8(br) + 1; - if (num_block_types[i] >= 2) { - ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - block_type_rb_index[i] = 1; - } - } - - br.readMoreInput(); - - distance_postfix_bits = br.readBits(2); - num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); - distance_postfix_mask = (1 << distance_postfix_bits) - 1; - num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits)); - context_modes = new Uint8Array(num_block_types[0]); - - for (i = 0; i < num_block_types[0]; ++i) { - br.readMoreInput(); - context_modes[i] = (br.readBits(2) << 1); - } - - var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br); - num_literal_htrees = _o1.num_htrees; - context_map = _o1.context_map; - - var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br); - num_dist_htrees = _o2.num_htrees; - dist_context_map = _o2.context_map; - - hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees); - hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]); - hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees); - - for (i = 0; i < 3; ++i) { - hgroup[i].decode(br); - } - - context_map_slice = 0; - dist_context_map_slice = 0; - context_mode = context_modes[block_type[0]]; - context_lookup_offset1 = Context.lookupOffsets[context_mode]; - context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; - htree_command = hgroup[1].htrees[0]; - - while (meta_block_remaining_len > 0) { - var cmd_code; - var range_idx; - var insert_code; - var copy_code; - var insert_length; - var copy_length; - var distance_code; - var distance; - var context; - var j; - var copy_dst; - - br.readMoreInput(); - - if (block_length[1] === 0) { - DecodeBlockType(num_block_types[1], - block_type_trees, 1, block_type, block_type_rb, - block_type_rb_index, br); - block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br); - htree_command = hgroup[1].htrees[block_type[1]]; - } - --block_length[1]; - cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br); - range_idx = cmd_code >> 6; - if (range_idx >= 2) { - range_idx -= 2; - distance_code = -1; - } else { - distance_code = 0; - } - insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7); - copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); - insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + - br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits); - copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + - br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits); - prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask]; - prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask]; - for (j = 0; j < insert_length; ++j) { - br.readMoreInput(); - - if (block_length[0] === 0) { - DecodeBlockType(num_block_types[0], - block_type_trees, 0, block_type, block_type_rb, - block_type_rb_index, br); - block_length[0] = ReadBlockLength(block_len_trees, 0, br); - context_offset = block_type[0] << kLiteralContextBits; - context_map_slice = context_offset; - context_mode = context_modes[block_type[0]]; - context_lookup_offset1 = Context.lookupOffsets[context_mode]; - context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; - } - context = (Context.lookup[context_lookup_offset1 + prev_byte1] | - Context.lookup[context_lookup_offset2 + prev_byte2]); - literal_htree_index = context_map[context_map_slice + context]; - --block_length[0]; - prev_byte2 = prev_byte1; - prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br); - ringbuffer[pos & ringbuffer_mask] = prev_byte1; - if ((pos & ringbuffer_mask) === ringbuffer_mask) { - output.write(ringbuffer, ringbuffer_size); - } - ++pos; - } - meta_block_remaining_len -= insert_length; - if (meta_block_remaining_len <= 0) break; - - if (distance_code < 0) { - var context; - - br.readMoreInput(); - if (block_length[2] === 0) { - DecodeBlockType(num_block_types[2], - block_type_trees, 2, block_type, block_type_rb, - block_type_rb_index, br); - block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br); - dist_context_offset = block_type[2] << kDistanceContextBits; - dist_context_map_slice = dist_context_offset; - } - --block_length[2]; - context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff; - dist_htree_index = dist_context_map[dist_context_map_slice + context]; - distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br); - if (distance_code >= num_direct_distance_codes) { - var nbits; - var postfix; - var offset; - distance_code -= num_direct_distance_codes; - postfix = distance_code & distance_postfix_mask; - distance_code >>= distance_postfix_bits; - nbits = (distance_code >> 1) + 1; - offset = ((2 + (distance_code & 1)) << nbits) - 4; - distance_code = num_direct_distance_codes + - ((offset + br.readBits(nbits)) << - distance_postfix_bits) + postfix; - } - } - - /* Convert the distance code to the actual distance by possibly looking */ - /* up past distnaces from the ringbuffer. */ - distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx); - if (distance < 0) { - throw new Error('[BrotliDecompress] invalid distance'); - } - - if (pos < max_backward_distance && - max_distance !== max_backward_distance) { - max_distance = pos; - } else { - max_distance = max_backward_distance; - } - - copy_dst = pos & ringbuffer_mask; - - if (distance > max_distance) { - if (copy_length >= BrotliDictionary.minDictionaryWordLength && - copy_length <= BrotliDictionary.maxDictionaryWordLength) { - var offset = BrotliDictionary.offsetsByLength[copy_length]; - var word_id = distance - max_distance - 1; - var shift = BrotliDictionary.sizeBitsByLength[copy_length]; - var mask = (1 << shift) - 1; - var word_idx = word_id & mask; - var transform_idx = word_id >> shift; - offset += word_idx * copy_length; - if (transform_idx < Transform.kNumTransforms) { - var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx); - copy_dst += len; - pos += len; - meta_block_remaining_len -= len; - if (copy_dst >= ringbuffer_end) { - output.write(ringbuffer, ringbuffer_size); - - for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++) - ringbuffer[_x] = ringbuffer[ringbuffer_end + _x]; - } - } else { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - } else { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - } else { - if (distance_code > 0) { - dist_rb[dist_rb_idx & 3] = distance; - ++dist_rb_idx; - } - - if (copy_length > meta_block_remaining_len) { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - - for (j = 0; j < copy_length; ++j) { - ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask]; - if ((pos & ringbuffer_mask) === ringbuffer_mask) { - output.write(ringbuffer, ringbuffer_size); - } - ++pos; - --meta_block_remaining_len; - } - } - - /* When we get here, we must have inserted at least one literal and */ - /* made a copy of at least length two, therefore accessing the last 2 */ - /* bytes is valid. */ - prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask]; - prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask]; - } - - /* Protect pos from overflow, wrap it around at every GB of input data */ - pos &= 0x3fffffff; - } - - output.write(ringbuffer, pos & ringbuffer_mask); -} - -exports.BrotliDecompress = BrotliDecompress; - -BrotliDictionary.init(); diff --git a/skills/flight-finder/node_modules/brotli/dec/dictionary-browser.js b/skills/flight-finder/node_modules/brotli/dec/dictionary-browser.js deleted file mode 100644 index 9608543..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/dictionary-browser.js +++ /dev/null @@ -1,14 +0,0 @@ -var base64 = require('base64-js'); - -/** - * The normal dictionary-data.js is quite large, which makes it - * unsuitable for browser usage. In order to make it smaller, - * we read dictionary.bin, which is a compressed version of - * the dictionary, and on initial load, Brotli decompresses - * it's own dictionary. 😜 - */ -exports.init = function() { - var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer; - var compressed = base64.toByteArray(require('./dictionary.bin.js')); - return BrotliDecompressBuffer(compressed); -}; diff --git a/skills/flight-finder/node_modules/brotli/dec/dictionary-data.js b/skills/flight-finder/node_modules/brotli/dec/dictionary-data.js deleted file mode 100644 index 55448aa..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/dictionary-data.js +++ /dev/null @@ -1,9469 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Collection of static dictionary words. -*/ - -exports.dictionary = new Uint8Array([ - 0x74, 0x69, 0x6d, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x66, 0x65, 0x6c, - 0x65, 0x66, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x68, 0x6f, 0x77, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x69, 0x74, - 0x65, 0x63, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x65, 0x6e, 0x6a, 0x75, 0x73, 0x74, - 0x6c, 0x69, 0x6b, 0x65, 0x66, 0x72, 0x65, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, - 0x65, 0x78, 0x74, 0x79, 0x65, 0x61, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x6f, - 0x64, 0x79, 0x6c, 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x62, 0x6f, 0x6f, - 0x6b, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x76, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x68, 0x65, 0x6c, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6d, - 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x6f, 0x6e, 0x67, 0x74, 0x68, - 0x65, 0x6d, 0x76, 0x69, 0x65, 0x77, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, 0x67, - 0x65, 0x64, 0x61, 0x79, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x68, 0x65, 0x61, 0x64, - 0x74, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x63, 0x68, 0x61, 0x72, 0x65, 0x61, 0x66, - 0x72, 0x6f, 0x6d, 0x74, 0x72, 0x75, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x62, - 0x6c, 0x65, 0x75, 0x70, 0x6f, 0x6e, 0x68, 0x69, 0x67, 0x68, 0x64, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x77, 0x73, 0x65, 0x76, 0x65, 0x6e, - 0x6e, 0x65, 0x78, 0x74, 0x63, 0x61, 0x73, 0x65, 0x62, 0x6f, 0x74, 0x68, 0x70, - 0x6f, 0x73, 0x74, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x64, 0x65, 0x68, 0x61, - 0x6e, 0x64, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x61, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x69, 0x7a, 0x65, - 0x62, 0x61, 0x73, 0x65, 0x68, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x6b, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x75, 0x73, 0x65, 0x72, 0x27, 0x29, 0x20, 0x2b, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x64, 0x73, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x77, - 0x73, 0x72, 0x65, 0x61, 0x64, 0x77, 0x65, 0x72, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x74, 0x61, 0x6b, 0x65, 0x68, 0x61, 0x76, 0x65, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x65, 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x74, 0x68, 0x77, 0x65, - 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x73, 0x6d, 0x65, 0x6e, 0x75, 0x66, 0x69, 0x6c, - 0x6d, 0x70, 0x61, 0x72, 0x74, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x68, 0x69, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x6f, 0x64, 0x6e, 0x65, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x73, 0x77, 0x65, 0x73, 0x74, 0x6a, 0x6f, 0x62, 0x73, 0x6d, 0x69, - 0x6e, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x6c, 0x6f, 0x67, 0x6f, 0x72, 0x69, 0x63, - 0x68, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x61, 0x73, 0x74, 0x74, 0x65, 0x61, 0x6d, - 0x61, 0x72, 0x6d, 0x79, 0x66, 0x6f, 0x6f, 0x64, 0x6b, 0x69, 0x6e, 0x67, 0x77, - 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x77, 0x61, 0x72, 0x64, 0x62, 0x65, - 0x73, 0x74, 0x66, 0x69, 0x72, 0x65, 0x50, 0x61, 0x67, 0x65, 0x6b, 0x6e, 0x6f, - 0x77, 0x61, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x65, - 0x74, 0x68, 0x61, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x67, 0x69, 0x76, 0x65, 0x73, - 0x65, 0x6c, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x6d, 0x75, 0x63, 0x68, 0x66, 0x65, - 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x6f, 0x63, 0x6b, 0x69, 0x63, 0x6f, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x68, 0x69, 0x64, 0x65, - 0x64, 0x69, 0x65, 0x64, 0x48, 0x6f, 0x6d, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x68, - 0x6f, 0x73, 0x74, 0x61, 0x6a, 0x61, 0x78, 0x69, 0x6e, 0x66, 0x6f, 0x63, 0x6c, - 0x75, 0x62, 0x6c, 0x61, 0x77, 0x73, 0x6c, 0x65, 0x73, 0x73, 0x68, 0x61, 0x6c, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x63, 0x68, 0x7a, 0x6f, 0x6e, 0x65, - 0x31, 0x30, 0x30, 0x25, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x72, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x72, 0x61, 0x63, 0x65, 0x62, 0x6c, 0x75, 0x65, 0x66, 0x6f, - 0x75, 0x72, 0x77, 0x65, 0x65, 0x6b, 0x66, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x70, - 0x65, 0x67, 0x61, 0x76, 0x65, 0x68, 0x61, 0x72, 0x64, 0x6c, 0x6f, 0x73, 0x74, - 0x77, 0x68, 0x65, 0x6e, 0x70, 0x61, 0x72, 0x6b, 0x6b, 0x65, 0x70, 0x74, 0x70, - 0x61, 0x73, 0x73, 0x73, 0x68, 0x69, 0x70, 0x72, 0x6f, 0x6f, 0x6d, 0x48, 0x54, - 0x4d, 0x4c, 0x70, 0x6c, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x6f, 0x6e, - 0x65, 0x73, 0x61, 0x76, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x66, 0x6c, 0x61, 0x67, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x6f, 0x6c, 0x64, 0x66, 0x69, 0x76, 0x65, 0x74, - 0x6f, 0x6f, 0x6b, 0x72, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x77, 0x6e, 0x6a, 0x75, - 0x6d, 0x70, 0x74, 0x68, 0x75, 0x73, 0x64, 0x61, 0x72, 0x6b, 0x63, 0x61, 0x72, - 0x64, 0x66, 0x69, 0x6c, 0x65, 0x66, 0x65, 0x61, 0x72, 0x73, 0x74, 0x61, 0x79, - 0x6b, 0x69, 0x6c, 0x6c, 0x74, 0x68, 0x61, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x61, - 0x75, 0x74, 0x6f, 0x65, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x74, 0x61, - 0x6c, 0x6b, 0x73, 0x68, 0x6f, 0x70, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x65, 0x65, - 0x70, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, 0x74, 0x74, 0x75, 0x72, 0x6e, - 0x62, 0x6f, 0x72, 0x6e, 0x62, 0x61, 0x6e, 0x64, 0x66, 0x65, 0x6c, 0x6c, 0x72, - 0x6f, 0x73, 0x65, 0x75, 0x72, 0x6c, 0x28, 0x73, 0x6b, 0x69, 0x6e, 0x72, 0x6f, - 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x6d, 0x65, 0x65, 0x74, 0x67, 0x6f, 0x6c, 0x64, 0x2e, 0x6a, 0x70, 0x67, - 0x69, 0x74, 0x65, 0x6d, 0x76, 0x61, 0x72, 0x79, 0x66, 0x65, 0x6c, 0x74, 0x74, - 0x68, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x64, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x63, 0x6f, 0x70, 0x79, 0x31, 0x2e, 0x30, 0x22, 0x3c, 0x2f, 0x61, - 0x3e, 0x73, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0x73, 0x65, 0x6c, 0x69, 0x65, 0x73, - 0x74, 0x6f, 0x75, 0x72, 0x70, 0x61, 0x63, 0x6b, 0x2e, 0x67, 0x69, 0x66, 0x70, - 0x61, 0x73, 0x74, 0x63, 0x73, 0x73, 0x3f, 0x67, 0x72, 0x61, 0x79, 0x6d, 0x65, - 0x61, 0x6e, 0x26, 0x67, 0x74, 0x3b, 0x72, 0x69, 0x64, 0x65, 0x73, 0x68, 0x6f, - 0x74, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x61, 0x69, 0x64, 0x72, 0x6f, 0x61, 0x64, - 0x76, 0x61, 0x72, 0x20, 0x66, 0x65, 0x65, 0x6c, 0x6a, 0x6f, 0x68, 0x6e, 0x72, - 0x69, 0x63, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x61, 0x73, 0x74, 0x27, 0x55, - 0x41, 0x2d, 0x64, 0x65, 0x61, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x70, 0x6f, 0x6f, - 0x72, 0x62, 0x69, 0x6c, 0x6c, 0x74, 0x79, 0x70, 0x65, 0x55, 0x2e, 0x53, 0x2e, - 0x77, 0x6f, 0x6f, 0x64, 0x6d, 0x75, 0x73, 0x74, 0x32, 0x70, 0x78, 0x3b, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x77, 0x69, 0x64, 0x65, 0x77, 0x61, - 0x6e, 0x74, 0x77, 0x61, 0x6c, 0x6c, 0x6c, 0x65, 0x61, 0x64, 0x5b, 0x30, 0x5d, - 0x3b, 0x70, 0x61, 0x75, 0x6c, 0x77, 0x61, 0x76, 0x65, 0x73, 0x75, 0x72, 0x65, - 0x24, 0x28, 0x27, 0x23, 0x77, 0x61, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x73, 0x61, - 0x72, 0x6d, 0x73, 0x67, 0x6f, 0x65, 0x73, 0x67, 0x61, 0x69, 0x6e, 0x6c, 0x61, - 0x6e, 0x67, 0x70, 0x61, 0x69, 0x64, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x63, - 0x6b, 0x75, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x77, 0x61, 0x6c, 0x6b, - 0x66, 0x69, 0x72, 0x6d, 0x77, 0x69, 0x66, 0x65, 0x78, 0x6d, 0x6c, 0x22, 0x73, - 0x6f, 0x6e, 0x67, 0x74, 0x65, 0x73, 0x74, 0x32, 0x30, 0x70, 0x78, 0x6b, 0x69, - 0x6e, 0x64, 0x72, 0x6f, 0x77, 0x73, 0x74, 0x6f, 0x6f, 0x6c, 0x66, 0x6f, 0x6e, - 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x61, 0x66, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x6d, 0x61, 0x70, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x69, 0x6e, 0x66, - 0x6c, 0x6f, 0x77, 0x62, 0x61, 0x62, 0x79, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x61, - 0x79, 0x73, 0x34, 0x70, 0x78, 0x3b, 0x36, 0x70, 0x78, 0x3b, 0x61, 0x72, 0x74, - 0x73, 0x66, 0x6f, 0x6f, 0x74, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x69, 0x6b, 0x69, - 0x68, 0x65, 0x61, 0x74, 0x73, 0x74, 0x65, 0x70, 0x74, 0x72, 0x69, 0x70, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x77, 0x65, 0x61, 0x6b, 0x74, 0x6f, - 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x63, 0x61, 0x73, 0x74, 0x66, 0x61, 0x6e, - 0x73, 0x62, 0x61, 0x6e, 0x6b, 0x76, 0x65, 0x72, 0x79, 0x72, 0x75, 0x6e, 0x73, - 0x6a, 0x75, 0x6c, 0x79, 0x74, 0x61, 0x73, 0x6b, 0x31, 0x70, 0x78, 0x3b, 0x67, - 0x6f, 0x61, 0x6c, 0x67, 0x72, 0x65, 0x77, 0x73, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x67, 0x65, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x73, 0x35, 0x70, 0x78, - 0x3b, 0x2e, 0x6a, 0x73, 0x3f, 0x34, 0x30, 0x70, 0x78, 0x69, 0x66, 0x20, 0x28, - 0x73, 0x6f, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x74, 0x6e, 0x6f, 0x6e, 0x65, 0x74, - 0x75, 0x62, 0x65, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x65, 0x6e, 0x74, 0x72, 0x65, - 0x65, 0x64, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x69, 0x66, - 0x74, 0x68, 0x61, 0x72, 0x6d, 0x31, 0x38, 0x70, 0x78, 0x63, 0x61, 0x6d, 0x65, - 0x68, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x6c, 0x64, 0x7a, 0x6f, 0x6f, 0x6d, 0x76, - 0x6f, 0x69, 0x64, 0x65, 0x61, 0x73, 0x79, 0x72, 0x69, 0x6e, 0x67, 0x66, 0x69, - 0x6c, 0x6c, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x69, 0x74, 0x63, 0x6f, 0x73, - 0x74, 0x33, 0x70, 0x78, 0x3b, 0x6a, 0x61, 0x63, 0x6b, 0x74, 0x61, 0x67, 0x73, - 0x62, 0x69, 0x74, 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6b, - 0x6e, 0x65, 0x77, 0x6e, 0x65, 0x61, 0x72, 0x3c, 0x21, 0x2d, 0x2d, 0x67, 0x72, - 0x6f, 0x77, 0x4a, 0x53, 0x4f, 0x4e, 0x64, 0x75, 0x74, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x61, 0x6c, 0x65, 0x79, 0x6f, 0x75, 0x20, 0x6c, 0x6f, 0x74, 0x73, - 0x70, 0x61, 0x69, 0x6e, 0x6a, 0x61, 0x7a, 0x7a, 0x63, 0x6f, 0x6c, 0x64, 0x65, - 0x79, 0x65, 0x73, 0x66, 0x69, 0x73, 0x68, 0x77, 0x77, 0x77, 0x2e, 0x72, 0x69, - 0x73, 0x6b, 0x74, 0x61, 0x62, 0x73, 0x70, 0x72, 0x65, 0x76, 0x31, 0x30, 0x70, - 0x78, 0x72, 0x69, 0x73, 0x65, 0x32, 0x35, 0x70, 0x78, 0x42, 0x6c, 0x75, 0x65, - 0x64, 0x69, 0x6e, 0x67, 0x33, 0x30, 0x30, 0x2c, 0x62, 0x61, 0x6c, 0x6c, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x61, 0x72, 0x6e, 0x77, 0x69, 0x6c, 0x64, 0x62, 0x6f, - 0x78, 0x2e, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x61, 0x63, 0x6b, 0x76, 0x65, 0x72, - 0x73, 0x70, 0x61, 0x69, 0x72, 0x6a, 0x75, 0x6e, 0x65, 0x74, 0x65, 0x63, 0x68, - 0x69, 0x66, 0x28, 0x21, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x76, 0x69, 0x6c, 0x24, - 0x28, 0x22, 0x23, 0x77, 0x61, 0x72, 0x6d, 0x6c, 0x6f, 0x72, 0x64, 0x64, 0x6f, - 0x65, 0x73, 0x70, 0x75, 0x6c, 0x6c, 0x2c, 0x30, 0x30, 0x30, 0x69, 0x64, 0x65, - 0x61, 0x64, 0x72, 0x61, 0x77, 0x68, 0x75, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x74, - 0x66, 0x75, 0x6e, 0x64, 0x62, 0x75, 0x72, 0x6e, 0x68, 0x72, 0x65, 0x66, 0x63, - 0x65, 0x6c, 0x6c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x68, 0x6f, - 0x75, 0x72, 0x6c, 0x6f, 0x73, 0x73, 0x66, 0x75, 0x65, 0x6c, 0x31, 0x32, 0x70, - 0x78, 0x73, 0x75, 0x69, 0x74, 0x64, 0x65, 0x61, 0x6c, 0x52, 0x53, 0x53, 0x22, - 0x61, 0x67, 0x65, 0x64, 0x67, 0x72, 0x65, 0x79, 0x47, 0x45, 0x54, 0x22, 0x65, - 0x61, 0x73, 0x65, 0x61, 0x69, 0x6d, 0x73, 0x67, 0x69, 0x72, 0x6c, 0x61, 0x69, - 0x64, 0x73, 0x38, 0x70, 0x78, 0x3b, 0x6e, 0x61, 0x76, 0x79, 0x67, 0x72, 0x69, - 0x64, 0x74, 0x69, 0x70, 0x73, 0x23, 0x39, 0x39, 0x39, 0x77, 0x61, 0x72, 0x73, - 0x6c, 0x61, 0x64, 0x79, 0x63, 0x61, 0x72, 0x73, 0x29, 0x3b, 0x20, 0x7d, 0x70, - 0x68, 0x70, 0x3f, 0x68, 0x65, 0x6c, 0x6c, 0x74, 0x61, 0x6c, 0x6c, 0x77, 0x68, - 0x6f, 0x6d, 0x7a, 0x68, 0x3a, 0xe5, 0x2a, 0x2f, 0x0d, 0x0a, 0x20, 0x31, 0x30, - 0x30, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x0a, 0x0a, 0x41, 0x37, 0x70, 0x78, 0x3b, - 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x74, 0x30, 0x70, 0x78, 0x3b, 0x63, - 0x72, 0x65, 0x77, 0x2a, 0x2f, 0x3c, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x37, 0x35, - 0x70, 0x78, 0x66, 0x6c, 0x61, 0x74, 0x72, 0x61, 0x72, 0x65, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x6e, 0x74, 0x6f, - 0x6c, 0x61, 0x69, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x73, 0x6b, 0x69, 0x70, 0x74, - 0x65, 0x6e, 0x74, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x67, 0x65, - 0x74, 0x73, 0x70, 0x6c, 0x6f, 0x74, 0x34, 0x30, 0x30, 0x2c, 0x0d, 0x0a, 0x0d, - 0x0a, 0x63, 0x6f, 0x6f, 0x6c, 0x66, 0x65, 0x65, 0x74, 0x2e, 0x70, 0x68, 0x70, - 0x3c, 0x62, 0x72, 0x3e, 0x65, 0x72, 0x69, 0x63, 0x6d, 0x6f, 0x73, 0x74, 0x67, - 0x75, 0x69, 0x64, 0x62, 0x65, 0x6c, 0x6c, 0x64, 0x65, 0x73, 0x63, 0x68, 0x61, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6d, 0x2f, 0x69, 0x6d, - 0x67, 0x26, 0x23, 0x38, 0x32, 0x6c, 0x75, 0x63, 0x6b, 0x63, 0x65, 0x6e, 0x74, - 0x30, 0x30, 0x30, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x67, 0x6f, 0x6e, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x73, 0x65, 0x6c, 0x6c, 0x64, 0x72, 0x75, 0x67, 0x46, 0x52, - 0x45, 0x45, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x69, 0x63, 0x6b, 0x3f, 0x69, 0x64, - 0x3d, 0x6c, 0x6f, 0x73, 0x65, 0x6e, 0x75, 0x6c, 0x6c, 0x76, 0x61, 0x73, 0x74, - 0x77, 0x69, 0x6e, 0x64, 0x52, 0x53, 0x53, 0x20, 0x77, 0x65, 0x61, 0x72, 0x72, - 0x65, 0x6c, 0x79, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x61, 0x6d, 0x65, 0x64, 0x75, - 0x6b, 0x65, 0x6e, 0x61, 0x73, 0x61, 0x63, 0x61, 0x70, 0x65, 0x77, 0x69, 0x73, - 0x68, 0x67, 0x75, 0x6c, 0x66, 0x54, 0x32, 0x33, 0x3a, 0x68, 0x69, 0x74, 0x73, - 0x73, 0x6c, 0x6f, 0x74, 0x67, 0x61, 0x74, 0x65, 0x6b, 0x69, 0x63, 0x6b, 0x62, - 0x6c, 0x75, 0x72, 0x74, 0x68, 0x65, 0x79, 0x31, 0x35, 0x70, 0x78, 0x27, 0x27, - 0x29, 0x3b, 0x29, 0x3b, 0x22, 0x3e, 0x6d, 0x73, 0x69, 0x65, 0x77, 0x69, 0x6e, - 0x73, 0x62, 0x69, 0x72, 0x64, 0x73, 0x6f, 0x72, 0x74, 0x62, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x65, 0x6b, 0x54, 0x31, 0x38, 0x3a, 0x6f, 0x72, 0x64, 0x73, 0x74, - 0x72, 0x65, 0x65, 0x6d, 0x61, 0x6c, 0x6c, 0x36, 0x30, 0x70, 0x78, 0x66, 0x61, - 0x72, 0x6d, 0xe2, 0x80, 0x99, 0x73, 0x62, 0x6f, 0x79, 0x73, 0x5b, 0x30, 0x5d, - 0x2e, 0x27, 0x29, 0x3b, 0x22, 0x50, 0x4f, 0x53, 0x54, 0x62, 0x65, 0x61, 0x72, - 0x6b, 0x69, 0x64, 0x73, 0x29, 0x3b, 0x7d, 0x7d, 0x6d, 0x61, 0x72, 0x79, 0x74, - 0x65, 0x6e, 0x64, 0x28, 0x55, 0x4b, 0x29, 0x71, 0x75, 0x61, 0x64, 0x7a, 0x68, - 0x3a, 0xe6, 0x2d, 0x73, 0x69, 0x7a, 0x2d, 0x2d, 0x2d, 0x2d, 0x70, 0x72, 0x6f, - 0x70, 0x27, 0x29, 0x3b, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x54, 0x31, 0x39, 0x3a, - 0x76, 0x69, 0x63, 0x65, 0x61, 0x6e, 0x64, 0x79, 0x64, 0x65, 0x62, 0x74, 0x3e, - 0x52, 0x53, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x65, 0x63, 0x6b, 0x62, 0x6c, - 0x6f, 0x77, 0x54, 0x31, 0x36, 0x3a, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x76, 0x61, - 0x6c, 0x54, 0x31, 0x37, 0x3a, 0x6c, 0x65, 0x74, 0x73, 0x66, 0x61, 0x69, 0x6c, - 0x6f, 0x72, 0x61, 0x6c, 0x70, 0x6f, 0x6c, 0x6c, 0x6e, 0x6f, 0x76, 0x61, 0x63, - 0x6f, 0x6c, 0x73, 0x67, 0x65, 0x6e, 0x65, 0x20, 0xe2, 0x80, 0x94, 0x73, 0x6f, - 0x66, 0x74, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6c, 0x6c, 0x72, 0x6f, 0x73, - 0x73, 0x3c, 0x68, 0x33, 0x3e, 0x70, 0x6f, 0x75, 0x72, 0x66, 0x61, 0x64, 0x65, - 0x70, 0x69, 0x6e, 0x6b, 0x3c, 0x74, 0x72, 0x3e, 0x6d, 0x69, 0x6e, 0x69, 0x29, - 0x7c, 0x21, 0x28, 0x6d, 0x69, 0x6e, 0x65, 0x7a, 0x68, 0x3a, 0xe8, 0x62, 0x61, - 0x72, 0x73, 0x68, 0x65, 0x61, 0x72, 0x30, 0x30, 0x29, 0x3b, 0x6d, 0x69, 0x6c, - 0x6b, 0x20, 0x2d, 0x2d, 0x3e, 0x69, 0x72, 0x6f, 0x6e, 0x66, 0x72, 0x65, 0x64, - 0x64, 0x69, 0x73, 0x6b, 0x77, 0x65, 0x6e, 0x74, 0x73, 0x6f, 0x69, 0x6c, 0x70, - 0x75, 0x74, 0x73, 0x2f, 0x6a, 0x73, 0x2f, 0x68, 0x6f, 0x6c, 0x79, 0x54, 0x32, - 0x32, 0x3a, 0x49, 0x53, 0x42, 0x4e, 0x54, 0x32, 0x30, 0x3a, 0x61, 0x64, 0x61, - 0x6d, 0x73, 0x65, 0x65, 0x73, 0x3c, 0x68, 0x32, 0x3e, 0x6a, 0x73, 0x6f, 0x6e, - 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x54, 0x32, 0x31, 0x3a, 0x20, - 0x52, 0x53, 0x53, 0x6c, 0x6f, 0x6f, 0x70, 0x61, 0x73, 0x69, 0x61, 0x6d, 0x6f, - 0x6f, 0x6e, 0x3c, 0x2f, 0x70, 0x3e, 0x73, 0x6f, 0x75, 0x6c, 0x4c, 0x49, 0x4e, - 0x45, 0x66, 0x6f, 0x72, 0x74, 0x63, 0x61, 0x72, 0x74, 0x54, 0x31, 0x34, 0x3a, - 0x3c, 0x68, 0x31, 0x3e, 0x38, 0x30, 0x70, 0x78, 0x21, 0x2d, 0x2d, 0x3c, 0x39, - 0x70, 0x78, 0x3b, 0x54, 0x30, 0x34, 0x3a, 0x6d, 0x69, 0x6b, 0x65, 0x3a, 0x34, - 0x36, 0x5a, 0x6e, 0x69, 0x63, 0x65, 0x69, 0x6e, 0x63, 0x68, 0x59, 0x6f, 0x72, - 0x6b, 0x72, 0x69, 0x63, 0x65, 0x7a, 0x68, 0x3a, 0xe4, 0x27, 0x29, 0x29, 0x3b, - 0x70, 0x75, 0x72, 0x65, 0x6d, 0x61, 0x67, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x6f, 0x6e, 0x65, 0x62, 0x6f, 0x6e, 0x64, 0x3a, 0x33, 0x37, 0x5a, 0x5f, 0x6f, - 0x66, 0x5f, 0x27, 0x5d, 0x29, 0x3b, 0x30, 0x30, 0x30, 0x2c, 0x7a, 0x68, 0x3a, - 0xe7, 0x74, 0x61, 0x6e, 0x6b, 0x79, 0x61, 0x72, 0x64, 0x62, 0x6f, 0x77, 0x6c, - 0x62, 0x75, 0x73, 0x68, 0x3a, 0x35, 0x36, 0x5a, 0x4a, 0x61, 0x76, 0x61, 0x33, - 0x30, 0x70, 0x78, 0x0a, 0x7c, 0x7d, 0x0a, 0x25, 0x43, 0x33, 0x25, 0x3a, 0x33, - 0x34, 0x5a, 0x6a, 0x65, 0x66, 0x66, 0x45, 0x58, 0x50, 0x49, 0x63, 0x61, 0x73, - 0x68, 0x76, 0x69, 0x73, 0x61, 0x67, 0x6f, 0x6c, 0x66, 0x73, 0x6e, 0x6f, 0x77, - 0x7a, 0x68, 0x3a, 0xe9, 0x71, 0x75, 0x65, 0x72, 0x2e, 0x63, 0x73, 0x73, 0x73, - 0x69, 0x63, 0x6b, 0x6d, 0x65, 0x61, 0x74, 0x6d, 0x69, 0x6e, 0x2e, 0x62, 0x69, - 0x6e, 0x64, 0x64, 0x65, 0x6c, 0x6c, 0x68, 0x69, 0x72, 0x65, 0x70, 0x69, 0x63, - 0x73, 0x72, 0x65, 0x6e, 0x74, 0x3a, 0x33, 0x36, 0x5a, 0x48, 0x54, 0x54, 0x50, - 0x2d, 0x32, 0x30, 0x31, 0x66, 0x6f, 0x74, 0x6f, 0x77, 0x6f, 0x6c, 0x66, 0x45, - 0x4e, 0x44, 0x20, 0x78, 0x62, 0x6f, 0x78, 0x3a, 0x35, 0x34, 0x5a, 0x42, 0x4f, - 0x44, 0x59, 0x64, 0x69, 0x63, 0x6b, 0x3b, 0x0a, 0x7d, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x3a, 0x33, 0x35, 0x5a, 0x76, 0x61, 0x72, 0x73, 0x62, 0x65, 0x61, 0x74, - 0x27, 0x7d, 0x29, 0x3b, 0x64, 0x69, 0x65, 0x74, 0x39, 0x39, 0x39, 0x3b, 0x61, - 0x6e, 0x6e, 0x65, 0x7d, 0x7d, 0x3c, 0x2f, 0x5b, 0x69, 0x5d, 0x2e, 0x4c, 0x61, - 0x6e, 0x67, 0x6b, 0x6d, 0xc2, 0xb2, 0x77, 0x69, 0x72, 0x65, 0x74, 0x6f, 0x79, - 0x73, 0x61, 0x64, 0x64, 0x73, 0x73, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x65, 0x78, - 0x3b, 0x0a, 0x09, 0x7d, 0x65, 0x63, 0x68, 0x6f, 0x6e, 0x69, 0x6e, 0x65, 0x2e, - 0x6f, 0x72, 0x67, 0x30, 0x30, 0x35, 0x29, 0x74, 0x6f, 0x6e, 0x79, 0x6a, 0x65, - 0x77, 0x73, 0x73, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x67, 0x73, 0x72, 0x6f, 0x6f, - 0x66, 0x30, 0x30, 0x30, 0x29, 0x20, 0x32, 0x30, 0x30, 0x77, 0x69, 0x6e, 0x65, - 0x67, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x67, 0x73, 0x62, 0x6f, 0x6f, 0x74, 0x67, - 0x61, 0x72, 0x79, 0x63, 0x75, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x6d, 0x6c, 0x63, 0x6f, 0x63, - 0x6b, 0x67, 0x61, 0x6e, 0x67, 0x24, 0x28, 0x27, 0x2e, 0x35, 0x30, 0x70, 0x78, - 0x50, 0x68, 0x2e, 0x44, 0x6d, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x6e, 0x6c, - 0x6f, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x6b, 0x6d, 0x69, 0x6c, 0x65, 0x72, 0x79, - 0x61, 0x6e, 0x75, 0x6e, 0x69, 0x78, 0x64, 0x69, 0x73, 0x63, 0x29, 0x3b, 0x7d, - 0x0a, 0x64, 0x75, 0x73, 0x74, 0x63, 0x6c, 0x69, 0x70, 0x29, 0x2e, 0x0a, 0x0a, - 0x37, 0x30, 0x70, 0x78, 0x2d, 0x32, 0x30, 0x30, 0x44, 0x56, 0x44, 0x73, 0x37, - 0x5d, 0x3e, 0x3c, 0x74, 0x61, 0x70, 0x65, 0x64, 0x65, 0x6d, 0x6f, 0x69, 0x2b, - 0x2b, 0x29, 0x77, 0x61, 0x67, 0x65, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x68, 0x69, - 0x6c, 0x6f, 0x70, 0x74, 0x73, 0x68, 0x6f, 0x6c, 0x65, 0x46, 0x41, 0x51, 0x73, - 0x61, 0x73, 0x69, 0x6e, 0x2d, 0x32, 0x36, 0x54, 0x6c, 0x61, 0x62, 0x73, 0x70, - 0x65, 0x74, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x62, 0x75, 0x6c, 0x6b, 0x63, 0x6f, - 0x6f, 0x6b, 0x3b, 0x7d, 0x0d, 0x0a, 0x48, 0x45, 0x41, 0x44, 0x5b, 0x30, 0x5d, - 0x29, 0x61, 0x62, 0x62, 0x72, 0x6a, 0x75, 0x61, 0x6e, 0x28, 0x31, 0x39, 0x38, - 0x6c, 0x65, 0x73, 0x68, 0x74, 0x77, 0x69, 0x6e, 0x3c, 0x2f, 0x69, 0x3e, 0x73, - 0x6f, 0x6e, 0x79, 0x67, 0x75, 0x79, 0x73, 0x66, 0x75, 0x63, 0x6b, 0x70, 0x69, - 0x70, 0x65, 0x7c, 0x2d, 0x0a, 0x21, 0x30, 0x30, 0x32, 0x29, 0x6e, 0x64, 0x6f, - 0x77, 0x5b, 0x31, 0x5d, 0x3b, 0x5b, 0x5d, 0x3b, 0x0a, 0x4c, 0x6f, 0x67, 0x20, - 0x73, 0x61, 0x6c, 0x74, 0x0d, 0x0a, 0x09, 0x09, 0x62, 0x61, 0x6e, 0x67, 0x74, - 0x72, 0x69, 0x6d, 0x62, 0x61, 0x74, 0x68, 0x29, 0x7b, 0x0d, 0x0a, 0x30, 0x30, - 0x70, 0x78, 0x0a, 0x7d, 0x29, 0x3b, 0x6b, 0x6f, 0x3a, 0xec, 0x66, 0x65, 0x65, - 0x73, 0x61, 0x64, 0x3e, 0x0d, 0x73, 0x3a, 0x2f, 0x2f, 0x20, 0x5b, 0x5d, 0x3b, - 0x74, 0x6f, 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x67, 0x28, 0x29, 0x7b, 0x0a, 0x7b, - 0x0d, 0x0a, 0x20, 0x2e, 0x6a, 0x73, 0x27, 0x32, 0x30, 0x30, 0x70, 0x64, 0x75, - 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x74, 0x2e, 0x4a, 0x50, 0x47, 0x29, 0x3b, 0x0a, - 0x7d, 0x71, 0x75, 0x6f, 0x74, 0x29, 0x3b, 0x0a, 0x0a, 0x27, 0x29, 0x3b, 0x0a, - 0x0d, 0x0a, 0x7d, 0x0d, 0x32, 0x30, 0x31, 0x34, 0x32, 0x30, 0x31, 0x35, 0x32, - 0x30, 0x31, 0x36, 0x32, 0x30, 0x31, 0x37, 0x32, 0x30, 0x31, 0x38, 0x32, 0x30, - 0x31, 0x39, 0x32, 0x30, 0x32, 0x30, 0x32, 0x30, 0x32, 0x31, 0x32, 0x30, 0x32, - 0x32, 0x32, 0x30, 0x32, 0x33, 0x32, 0x30, 0x32, 0x34, 0x32, 0x30, 0x32, 0x35, - 0x32, 0x30, 0x32, 0x36, 0x32, 0x30, 0x32, 0x37, 0x32, 0x30, 0x32, 0x38, 0x32, - 0x30, 0x32, 0x39, 0x32, 0x30, 0x33, 0x30, 0x32, 0x30, 0x33, 0x31, 0x32, 0x30, - 0x33, 0x32, 0x32, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x34, 0x32, 0x30, 0x33, - 0x35, 0x32, 0x30, 0x33, 0x36, 0x32, 0x30, 0x33, 0x37, 0x32, 0x30, 0x31, 0x33, - 0x32, 0x30, 0x31, 0x32, 0x32, 0x30, 0x31, 0x31, 0x32, 0x30, 0x31, 0x30, 0x32, - 0x30, 0x30, 0x39, 0x32, 0x30, 0x30, 0x38, 0x32, 0x30, 0x30, 0x37, 0x32, 0x30, - 0x30, 0x36, 0x32, 0x30, 0x30, 0x35, 0x32, 0x30, 0x30, 0x34, 0x32, 0x30, 0x30, - 0x33, 0x32, 0x30, 0x30, 0x32, 0x32, 0x30, 0x30, 0x31, 0x32, 0x30, 0x30, 0x30, - 0x31, 0x39, 0x39, 0x39, 0x31, 0x39, 0x39, 0x38, 0x31, 0x39, 0x39, 0x37, 0x31, - 0x39, 0x39, 0x36, 0x31, 0x39, 0x39, 0x35, 0x31, 0x39, 0x39, 0x34, 0x31, 0x39, - 0x39, 0x33, 0x31, 0x39, 0x39, 0x32, 0x31, 0x39, 0x39, 0x31, 0x31, 0x39, 0x39, - 0x30, 0x31, 0x39, 0x38, 0x39, 0x31, 0x39, 0x38, 0x38, 0x31, 0x39, 0x38, 0x37, - 0x31, 0x39, 0x38, 0x36, 0x31, 0x39, 0x38, 0x35, 0x31, 0x39, 0x38, 0x34, 0x31, - 0x39, 0x38, 0x33, 0x31, 0x39, 0x38, 0x32, 0x31, 0x39, 0x38, 0x31, 0x31, 0x39, - 0x38, 0x30, 0x31, 0x39, 0x37, 0x39, 0x31, 0x39, 0x37, 0x38, 0x31, 0x39, 0x37, - 0x37, 0x31, 0x39, 0x37, 0x36, 0x31, 0x39, 0x37, 0x35, 0x31, 0x39, 0x37, 0x34, - 0x31, 0x39, 0x37, 0x33, 0x31, 0x39, 0x37, 0x32, 0x31, 0x39, 0x37, 0x31, 0x31, - 0x39, 0x37, 0x30, 0x31, 0x39, 0x36, 0x39, 0x31, 0x39, 0x36, 0x38, 0x31, 0x39, - 0x36, 0x37, 0x31, 0x39, 0x36, 0x36, 0x31, 0x39, 0x36, 0x35, 0x31, 0x39, 0x36, - 0x34, 0x31, 0x39, 0x36, 0x33, 0x31, 0x39, 0x36, 0x32, 0x31, 0x39, 0x36, 0x31, - 0x31, 0x39, 0x36, 0x30, 0x31, 0x39, 0x35, 0x39, 0x31, 0x39, 0x35, 0x38, 0x31, - 0x39, 0x35, 0x37, 0x31, 0x39, 0x35, 0x36, 0x31, 0x39, 0x35, 0x35, 0x31, 0x39, - 0x35, 0x34, 0x31, 0x39, 0x35, 0x33, 0x31, 0x39, 0x35, 0x32, 0x31, 0x39, 0x35, - 0x31, 0x31, 0x39, 0x35, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x34, - 0x31, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x39, 0x39, 0x39, 0x39, 0x63, - 0x6f, 0x6d, 0x6f, 0x6d, 0xc3, 0xa1, 0x73, 0x65, 0x73, 0x74, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x70, 0x65, 0x72, 0x6f, 0x74, 0x6f, 0x64, 0x6f, 0x68, 0x61, 0x63, - 0x65, 0x63, 0x61, 0x64, 0x61, 0x61, 0xc3, 0xb1, 0x6f, 0x62, 0x69, 0x65, 0x6e, - 0x64, 0xc3, 0xad, 0x61, 0x61, 0x73, 0xc3, 0xad, 0x76, 0x69, 0x64, 0x61, 0x63, - 0x61, 0x73, 0x6f, 0x6f, 0x74, 0x72, 0x6f, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6f, - 0x6c, 0x6f, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x6a, - 0x6f, 0x73, 0x69, 0x64, 0x6f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x70, 0x6f, - 0x74, 0x65, 0x6d, 0x61, 0x64, 0x65, 0x62, 0x65, 0x61, 0x6c, 0x67, 0x6f, 0x71, - 0x75, 0xc3, 0xa9, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x74, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x63, 0x61, 0x73, 0x61, 0x62, 0x61, 0x6a, - 0x6f, 0x74, 0x6f, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x6f, 0x61, 0x67, 0x75, 0x61, - 0x70, 0x75, 0x65, 0x73, 0x75, 0x6e, 0x6f, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x69, 0x63, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x65, 0x6c, 0x6c, 0x61, 0x6d, 0x61, - 0x79, 0x6f, 0x7a, 0x6f, 0x6e, 0x61, 0x61, 0x6d, 0x6f, 0x72, 0x70, 0x69, 0x73, - 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x63, 0x6c, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, - 0x64, 0x69, 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x63, 0x61, 0x73, 0x69, 0xd0, - 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xb6, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0x9d, - 0xd0, 0xb0, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbc, 0xd1, - 0x8b, 0xd0, 0x92, 0xd1, 0x8b, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, - 0x9f, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xa0, - 0xd0, 0xa4, 0xd0, 0x9d, 0xd0, 0xb5, 0xd0, 0x9c, 0xd1, 0x8b, 0xd1, 0x82, 0xd1, - 0x8b, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0x97, 0xd0, 0xb0, 0xd0, 0x94, 0xd0, 0xb0, 0xd0, 0x9d, 0xd1, 0x83, 0xd0, - 0x9e, 0xd0, 0xb1, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0x98, 0xd0, 0xb7, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xbd, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xa2, 0xd1, - 0x8b, 0xd1, 0x83, 0xd0, 0xb6, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xa3, 0xd9, 0x86, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x83, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x81, - 0xd9, 0x89, 0xd9, 0x87, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, - 0x83, 0xd8, 0xa7, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa8, 0xd8, 0xb3, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, - 0xa3, 0xd9, 0x8a, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xab, - 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x8a, 0xd8, 0xa8, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x8a, 0xd8, 0xa8, 0xd9, 0x83, - 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa3, 0xd9, 0x85, 0xd9, - 0x86, 0xd8, 0xaa, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x84, 0xd9, 0x86, 0xd8, 0xad, - 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xb4, 0xd9, 0x88, 0xd8, - 0xb4, 0x66, 0x69, 0x72, 0x73, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x62, 0x6c, 0x61, - 0x63, 0x6b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x75, 0x73, 0x69, - 0x63, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x73, 0x74, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x64, 0x61, - 0x79, 0x77, 0x61, 0x74, 0x65, 0x72, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x64, 0x65, 0x61, 0x74, 0x68, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x6e, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x74, 0x6f, 0x6f, 0x6c, - 0x73, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x67, 0x75, 0x69, 0x64, - 0x65, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x77, 0x6f, - 0x6d, 0x65, 0x6e, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x79, 0x6f, 0x75, - 0x6e, 0x67, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x66, 0x72, 0x6f, 0x6e, - 0x74, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x77, 0x61, 0x74, 0x63, 0x68, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x70, 0x72, 0x69, 0x63, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x62, 0x65, 0x67, 0x69, 0x6e, 0x61, 0x66, 0x74, 0x65, 0x72, 0x76, 0x69, 0x73, - 0x69, 0x74, 0x69, 0x73, 0x73, 0x75, 0x65, 0x61, 0x72, 0x65, 0x61, 0x73, 0x62, - 0x65, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x70, 0x72, 0x65, 0x73, 0x73, 0x62, 0x75, 0x69, 0x6c, 0x74, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x73, 0x70, 0x65, 0x65, 0x64, 0x73, 0x74, 0x75, - 0x64, 0x79, 0x74, 0x72, 0x61, 0x64, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x65, 0x6e, 0x73, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x77, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x66, 0x6c, 0x61, - 0x73, 0x68, 0x66, 0x69, 0x78, 0x65, 0x64, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x73, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x72, 0x69, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x73, 0x68, 0x61, 0x70, 0x65, - 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x69, - 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x68, 0x69, 0x72, 0x64, 0x62, - 0x61, 0x73, 0x69, 0x63, 0x70, 0x65, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x69, 0x64, - 0x65, 0x61, 0x73, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x76, - 0x6f, 0x69, 0x63, 0x65, 0x73, 0x69, 0x74, 0x65, 0x73, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x77, 0x68, 0x65, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x65, 0x61, 0x72, 0x74, 0x68, 0x66, 0x6f, 0x72, 0x75, 0x6d, - 0x74, 0x68, 0x72, 0x65, 0x65, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x6c, - 0x69, 0x76, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6f, 0x75, 0x72, 0x74, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x70, 0x6f, 0x70, - 0x75, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x75, 0x70, 0x70, 0x65, - 0x72, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, 0x73, 0x68, - 0x6f, 0x77, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x62, 0x65, 0x67, 0x61, 0x6e, 0x73, - 0x75, 0x70, 0x65, 0x72, 0x70, 0x61, 0x70, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x70, 0x61, 0x72, 0x74, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x62, 0x72, 0x61, - 0x6e, 0x64, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x77, 0x6f, 0x6d, 0x61, 0x6e, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x61, 0x75, 0x64, 0x69, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x63, 0x61, 0x73, 0x65, 0x73, - 0x64, 0x61, 0x69, 0x6c, 0x79, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x6a, 0x75, 0x64, 0x67, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x70, - 0x70, 0x6c, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x63, 0x65, 0x6e, 0x65, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x71, 0x75, 0x65, 0x65, 0x6e, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x63, 0x61, 0x63, 0x68, 0x65, 0x63, 0x69, 0x76, 0x69, 0x6c, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6d, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x61, 0x73, 0x6b, 0x65, - 0x64, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x73, 0x74, - 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x61, 0x69, 0x74, 0x68, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x6f, 0x66, 0x66, - 0x65, 0x72, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x6d, - 0x69, 0x67, 0x68, 0x74, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x74, 0x68, 0x69, 0x6e, - 0x6b, 0x62, 0x6c, 0x6f, 0x6f, 0x64, 0x61, 0x72, 0x72, 0x61, 0x79, 0x6d, 0x61, - 0x6a, 0x6f, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x6f, 0x6e, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x66, 0x72, 0x65, 0x73, 0x68, 0x71, 0x75, - 0x69, 0x74, 0x65, 0x66, 0x69, 0x6c, 0x6d, 0x73, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x72, 0x62, 0x61, 0x6e, 0x66, 0x69, 0x67, - 0x68, 0x74, 0x62, 0x61, 0x73, 0x69, 0x73, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x61, - 0x75, 0x74, 0x6f, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x59, 0x6f, - 0x75, 0x72, 0x20, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x64, 0x72, 0x61, - 0x77, 0x6e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, - 0x69, 0x67, 0x68, 0x74, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x63, - 0x68, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x4c, 0x69, - 0x6e, 0x6b, 0x73, 0x64, 0x6f, 0x75, 0x62, 0x74, 0x61, 0x73, 0x79, 0x6e, 0x63, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x63, 0x68, 0x69, - 0x65, 0x66, 0x79, 0x6f, 0x75, 0x74, 0x68, 0x6e, 0x6f, 0x76, 0x65, 0x6c, 0x31, - 0x30, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x75, 0x6e, 0x74, 0x69, - 0x6c, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6a, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x74, 0x77, 0x69, 0x63, 0x65, 0x30, 0x2c, 0x30, - 0x30, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x73, - 0x6f, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x70, 0x6f, - 0x73, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x77, 0x65, 0x65, 0x6b, 0x73, - 0x61, 0x76, 0x6f, 0x69, 0x64, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x69, 0x6c, - 0x65, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x72, 0x61, 0x74, 0x65, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x73, - 0x73, 0x74, 0x61, 0x72, 0x73, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x3c, 0x2f, 0x68, - 0x33, 0x3e, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x68, 0x65, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x77, 0x65, - 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x62, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x73, 0x74, 0x61, 0x66, 0x66, 0x74, 0x72, 0x69, - 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x65, 0x67, - 0x79, 0x70, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x31, 0x35, 0x70, 0x78, 0x3b, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x72, 0x75, 0x65, 0x22, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x62, - 0x6f, 0x78, 0x22, 0x3e, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x6c, 0x65, 0x61, 0x76, - 0x65, 0x63, 0x68, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x67, 0x75, - 0x65, 0x73, 0x74, 0x3c, 0x2f, 0x68, 0x34, 0x3e, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x79, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x73, 0x65, 0x76, - 0x65, 0x6e, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x72, 0x69, 0x6d, 0x65, 0x73, - 0x69, 0x67, 0x6e, 0x73, 0x61, 0x77, 0x61, 0x72, 0x65, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x70, 0x68, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x65, 0x6e, - 0x5f, 0x55, 0x53, 0x26, 0x23, 0x33, 0x39, 0x3b, 0x32, 0x30, 0x30, 0x70, 0x78, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x6a, - 0x6f, 0x79, 0x61, 0x6a, 0x61, 0x78, 0x2e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x68, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x68, 0x6f, 0x6c, 0x64, - 0x73, 0x70, 0x65, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, - 0x76, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x31, 0x39, 0x39, 0x30, 0x73, 0x72, - 0x6f, 0x6d, 0x61, 0x6e, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x6a, 0x61, 0x70, 0x61, - 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x61, 0x67, 0x72, 0x65, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, - 0x61, 0x62, 0x75, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x63, 0x61, 0x72, 0x64, 0x73, 0x68, - 0x69, 0x6c, 0x6c, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x50, 0x68, 0x6f, 0x74, - 0x6f, 0x74, 0x72, 0x75, 0x74, 0x68, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x2e, 0x70, - 0x68, 0x70, 0x3f, 0x73, 0x61, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x6c, - 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x62, 0x72, 0x69, 0x65, 0x66, 0x72, 0x6f, 0x77, 0x22, 0x3e, 0x67, - 0x65, 0x6e, 0x72, 0x65, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6b, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x6e, - 0x65, 0x74, 0x2f, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x79, 0x20, 0x7b, - 0x0a, 0x76, 0x61, 0x72, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x63, 0x6f, 0x73, - 0x74, 0x73, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x61, 0x64, 0x75, 0x6c, 0x74, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x63, 0x61, 0x75, 0x73, 0x65, 0x6d, 0x61, - 0x67, 0x69, 0x63, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x69, 0x72, - 0x32, 0x35, 0x30, 0x70, 0x78, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x67, - 0x6c, 0x61, 0x73, 0x73, 0x73, 0x69, 0x64, 0x65, 0x73, 0x66, 0x75, 0x6e, 0x64, - 0x73, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x61, 0x77, 0x61, 0x72, 0x64, 0x6d, 0x6f, - 0x75, 0x74, 0x68, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x70, 0x61, 0x72, 0x69, 0x73, - 0x67, 0x69, 0x76, 0x65, 0x73, 0x64, 0x75, 0x74, 0x63, 0x68, 0x74, 0x65, 0x78, - 0x61, 0x73, 0x66, 0x72, 0x75, 0x69, 0x74, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x7c, - 0x7c, 0x5b, 0x5d, 0x3b, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x50, 0x4f, 0x53, 0x54, 0x22, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x3c, 0x62, - 0x72, 0x2f, 0x3e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x73, 0x70, 0x65, 0x61, 0x6b, - 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x61, 0x6e, - 0x6b, 0x73, 0x63, 0x61, 0x74, 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x74, 0x32, - 0x30, 0x70, 0x78, 0x3b, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x64, 0x65, 0x61, 0x6c, - 0x73, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x75, 0x72, - 0x6c, 0x3d, 0x22, 0x70, 0x61, 0x72, 0x6b, 0x73, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x4d, 0x6f, 0x73, 0x74, 0x20, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x6d, 0x6f, - 0x6e, 0x67, 0x62, 0x72, 0x61, 0x69, 0x6e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x64, 0x63, 0x61, 0x72, 0x72, - 0x79, 0x64, 0x72, 0x61, 0x66, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x64, - 0x72, 0x75, 0x67, 0x73, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x70, 0x72, 0x69, - 0x6c, 0x69, 0x64, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x63, 0x6f, 0x64, 0x65, 0x73, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x56, 0x69, 0x65, 0x77, 0x20, 0x73, 0x65, 0x65, - 0x6d, 0x73, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, - 0x28, 0x32, 0x30, 0x30, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, - 0x6b, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x67, 0x72, - 0x65, 0x65, 0x6b, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x33, 0x30, 0x70, 0x78, 0x3b, 0x77, 0x68, 0x6f, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x6a, 0x6f, 0x6e, 0x65, - 0x73, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x27, 0x29, 0x3b, 0x22, 0x3e, 0x29, 0x3b, - 0x69, 0x66, 0x28, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x64, 0x61, 0x76, 0x69, 0x64, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x72, 0x61, 0x69, - 0x73, 0x65, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x3e, 0x62, 0x61, 0x72, 0x22, - 0x3e, 0x2e, 0x73, 0x72, 0x63, 0x3d, 0x74, 0x6f, 0x77, 0x65, 0x72, 0x61, 0x6c, - 0x74, 0x3d, 0x22, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x68, 0x65, 0x6e, 0x72, 0x79, - 0x32, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x74, 0x75, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x73, 0x68, 0x61, 0x72, 0x70, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x74, - 0x61, 0x73, 0x74, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x67, 0x69, - 0x72, 0x6c, 0x73, 0x2f, 0x63, 0x73, 0x73, 0x2f, 0x31, 0x30, 0x30, 0x25, 0x3b, - 0x63, 0x6c, 0x75, 0x62, 0x73, 0x73, 0x74, 0x75, 0x66, 0x66, 0x62, 0x69, 0x62, - 0x6c, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x6b, - 0x6f, 0x72, 0x65, 0x61, 0x7d, 0x29, 0x3b, 0x0d, 0x0a, 0x62, 0x61, 0x6e, 0x64, - 0x73, 0x71, 0x75, 0x65, 0x75, 0x65, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x38, 0x30, - 0x70, 0x78, 0x3b, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x7b, 0x0d, 0x0a, 0x09, 0x09, - 0x61, 0x68, 0x65, 0x61, 0x64, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x72, 0x69, - 0x73, 0x68, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x79, 0x61, 0x68, 0x6f, - 0x6f, 0x29, 0x5b, 0x30, 0x5d, 0x3b, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x66, 0x69, - 0x6e, 0x64, 0x73, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x3d, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x31, 0x32, 0x70, 0x78, 0x3b, 0x70, - 0x72, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x6c, 0x73, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x30, 0x78, 0x36, 0x30, 0x30, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x73, 0x70, - 0x61, 0x69, 0x6e, 0x62, 0x65, 0x61, 0x63, 0x68, 0x74, 0x61, 0x78, 0x65, 0x73, - 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x2d, 0x2d, 0x3e, - 0x3c, 0x2f, 0x67, 0x69, 0x66, 0x74, 0x73, 0x73, 0x74, 0x65, 0x76, 0x65, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x7d, 0x29, 0x3b, 0x0a, - 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x28, 0x31, 0x39, 0x39, 0x46, 0x41, - 0x51, 0x3c, 0x2f, 0x72, 0x6f, 0x67, 0x65, 0x72, 0x66, 0x72, 0x61, 0x6e, 0x6b, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x38, 0x70, 0x78, 0x3b, 0x66, 0x65, 0x65, - 0x64, 0x73, 0x3c, 0x68, 0x31, 0x3e, 0x3c, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x73, 0x32, 0x32, 0x70, 0x78, 0x3b, 0x64, 0x72, 0x69, 0x6e, - 0x6b, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x65, 0x77, 0x69, 0x73, 0x73, 0x68, - 0x61, 0x6c, 0x6c, 0x23, 0x30, 0x33, 0x39, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x6c, 0x6f, 0x76, 0x65, 0x64, 0x77, 0x61, 0x73, 0x74, 0x65, 0x30, 0x30, 0x70, - 0x78, 0x3b, 0x6a, 0x61, 0x3a, 0xe3, 0x82, 0x73, 0x69, 0x6d, 0x6f, 0x6e, 0x3c, - 0x66, 0x6f, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x6d, 0x65, 0x65, 0x74, - 0x73, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x65, 0x61, 0x70, 0x74, 0x69, - 0x67, 0x68, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x72, 0x6f, 0x6f, - 0x6d, 0x73, 0x6f, 0x6e, 0x6b, 0x65, 0x79, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x6d, - 0x61, 0x69, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x66, 0x75, 0x6e, 0x6e, 0x79, 0x74, 0x72, 0x65, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x2f, 0x22, 0x31, 0x2e, 0x6a, 0x70, 0x67, 0x77, 0x6d, 0x6f, 0x64, 0x65, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x29, - 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x69, 0x72, 0x75, - 0x73, 0x63, 0x68, 0x61, 0x69, 0x72, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x6f, - 0x72, 0x73, 0x74, 0x50, 0x61, 0x67, 0x65, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x70, 0x61, 0x74, 0x63, 0x68, 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x6f, 0x2d, 0x63, - 0x61, 0x63, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x74, 0x6f, 0x75, 0x72, 0x73, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x61, 0x73, 0x69, 0x61, 0x6e, 0x69, 0x2b, 0x2b, 0x29, - 0x7b, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x27, 0x29, 0x5b, 0x30, 0x5d, 0x69, 0x64, - 0x3d, 0x31, 0x30, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x6d, 0x65, 0x6e, 0x75, 0x20, - 0x2e, 0x32, 0x2e, 0x6d, 0x69, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x6b, 0x65, 0x76, - 0x69, 0x6e, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x62, - 0x72, 0x75, 0x63, 0x65, 0x32, 0x2e, 0x6a, 0x70, 0x67, 0x55, 0x52, 0x4c, 0x29, - 0x2b, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x6c, - 0x69, 0x63, 0x65, 0x68, 0x61, 0x72, 0x72, 0x79, 0x31, 0x32, 0x30, 0x22, 0x20, - 0x73, 0x77, 0x65, 0x65, 0x74, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x64, 0x69, 0x65, 0x67, 0x6f, 0x70, 0x61, 0x67, 0x65, 0x20, 0x73, - 0x77, 0x69, 0x73, 0x73, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x23, 0x66, 0x66, 0x66, - 0x3b, 0x22, 0x3e, 0x4c, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x74, 0x72, - 0x65, 0x61, 0x74, 0x73, 0x68, 0x65, 0x65, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x31, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x64, 0x6a, 0x61, 0x3a, 0xe3, 0x83, 0x69, - 0x64, 0x3d, 0x22, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x6f, 0x72, 0x73, - 0x65, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2d, 0x62, 0x6f, 0x78, 0x2d, 0x64, 0x65, - 0x6c, 0x74, 0x61, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x73, - 0x3a, 0x34, 0x38, 0x5a, 0x3c, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x72, 0x75, 0x72, - 0x61, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x62, - 0x61, 0x6b, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x70, 0x73, 0x3d, 0x20, 0x22, 0x22, - 0x3b, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x33, - 0x70, 0x78, 0x3b, 0x62, 0x72, 0x69, 0x61, 0x6e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, - 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x6f, 0x3d, 0x25, 0x32, 0x46, 0x20, 0x6a, 0x6f, - 0x69, 0x6e, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x69, - 0x6d, 0x67, 0x22, 0x3e, 0x2c, 0x20, 0x66, 0x6a, 0x73, 0x69, 0x6d, 0x67, 0x22, - 0x20, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x4d, 0x54, 0x6f, 0x70, 0x42, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x44, 0x61, 0x6e, 0x73, 0x6b, - 0x63, 0x7a, 0x65, 0x63, 0x68, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x6b, 0x6e, 0x6f, - 0x77, 0x73, 0x3c, 0x2f, 0x68, 0x35, 0x3e, 0x66, 0x61, 0x71, 0x22, 0x3e, 0x7a, - 0x68, 0x2d, 0x63, 0x6e, 0x31, 0x30, 0x29, 0x3b, 0x0a, 0x2d, 0x31, 0x22, 0x29, - 0x3b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x6c, 0x75, 0x65, 0x73, 0x74, 0x72, - 0x75, 0x6c, 0x79, 0x64, 0x61, 0x76, 0x69, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0x3b, - 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x73, 0x74, 0x65, 0x65, 0x6c, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6a, - 0x65, 0x73, 0x75, 0x73, 0x31, 0x30, 0x30, 0x25, 0x20, 0x6d, 0x65, 0x6e, 0x75, - 0x2e, 0x0d, 0x0a, 0x09, 0x0d, 0x0a, 0x77, 0x61, 0x6c, 0x65, 0x73, 0x72, 0x69, - 0x73, 0x6b, 0x73, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x62, 0x2d, 0x6c, 0x69, 0x6b, 0x74, 0x65, 0x61, 0x63, 0x68, 0x67, 0x69, 0x66, - 0x22, 0x20, 0x76, 0x65, 0x67, 0x61, 0x73, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x65, - 0x65, 0x73, 0x74, 0x69, 0x73, 0x68, 0x71, 0x69, 0x70, 0x73, 0x75, 0x6f, 0x6d, - 0x69, 0x73, 0x6f, 0x62, 0x72, 0x65, 0x64, 0x65, 0x73, 0x64, 0x65, 0x65, 0x6e, - 0x74, 0x72, 0x65, 0x74, 0x6f, 0x64, 0x6f, 0x73, 0x70, 0x75, 0x65, 0x64, 0x65, - 0x61, 0xc3, 0xb1, 0x6f, 0x73, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x74, 0x69, 0x65, - 0x6e, 0x65, 0x68, 0x61, 0x73, 0x74, 0x61, 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x75, 0x65, 0x76, - 0x6f, 0x68, 0x61, 0x63, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6d, 0x69, - 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x6d, 0x75, 0x6e, 0x64, 0x6f, - 0x61, 0x71, 0x75, 0xc3, 0xad, 0x64, 0xc3, 0xad, 0x61, 0x73, 0x73, 0xc3, 0xb3, - 0x6c, 0x6f, 0x61, 0x79, 0x75, 0x64, 0x61, 0x66, 0x65, 0x63, 0x68, 0x61, 0x74, - 0x6f, 0x64, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, - 0x73, 0x64, 0x61, 0x74, 0x6f, 0x73, 0x6f, 0x74, 0x72, 0x61, 0x73, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x61, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x75, 0x67, 0x61, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x66, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, - 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x61, - 0x6c, 0x75, 0x64, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x6e, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x64, - 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x76, - 0x65, 0x63, 0x65, 0x73, 0x64, 0x65, 0x63, 0x69, 0x72, 0x6a, 0x6f, 0x73, 0xc3, - 0xa9, 0x65, 0x73, 0x74, 0x61, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x72, - 0x75, 0x70, 0x6f, 0x68, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x6f, 0x61, 0x6d, 0x69, 0x67, 0x6f, 0x63, 0x6f, 0x73, - 0x61, 0x73, 0x6e, 0x69, 0x76, 0x65, 0x6c, 0x67, 0x65, 0x6e, 0x74, 0x65, 0x6d, - 0x69, 0x73, 0x6d, 0x61, 0x61, 0x69, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x6c, 0x69, - 0x6f, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x68, 0x61, 0x63, 0x69, 0x61, 0x66, 0x61, - 0x76, 0x6f, 0x72, 0x6a, 0x75, 0x6e, 0x69, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x65, - 0x70, 0x75, 0x6e, 0x74, 0x6f, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x61, 0x75, 0x74, - 0x6f, 0x72, 0x61, 0x62, 0x72, 0x69, 0x6c, 0x62, 0x75, 0x65, 0x6e, 0x61, 0x74, - 0x65, 0x78, 0x74, 0x6f, 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x73, 0x61, 0x62, 0x65, - 0x72, 0x6c, 0x69, 0x73, 0x74, 0x61, 0x6c, 0x75, 0x65, 0x67, 0x6f, 0x63, 0xc3, - 0xb3, 0x6d, 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x6f, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x70, 0x65, 0x72, 0xc3, 0xba, 0x68, 0x61, 0x62, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x79, 0x6e, 0x75, 0x6e, 0x63, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x6f, 0x72, 0x66, 0x75, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x62, 0x72, - 0x6f, 0x67, 0x75, 0x73, 0x74, 0x61, 0x69, 0x67, 0x75, 0x61, 0x6c, 0x76, 0x6f, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x73, 0x6f, 0x73, 0x67, 0x75, 0xc3, 0xad, 0x61, - 0x70, 0x75, 0x65, 0x64, 0x6f, 0x73, 0x6f, 0x6d, 0x6f, 0x73, 0x61, 0x76, 0x69, - 0x73, 0x6f, 0x75, 0x73, 0x74, 0x65, 0x64, 0x64, 0x65, 0x62, 0x65, 0x6e, 0x6e, - 0x6f, 0x63, 0x68, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, 0x66, 0x61, 0x6c, 0x74, - 0x61, 0x65, 0x75, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x64, 0x69, - 0x63, 0x68, 0x6f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x63, 0x61, 0x73, 0x61, 0x73, 0x6c, 0x65, 0xc3, 0xb3, 0x6e, 0x70, 0x6c, 0x61, - 0x7a, 0x6f, 0x6c, 0x61, 0x72, 0x67, 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x73, 0x76, - 0x69, 0x73, 0x74, 0x61, 0x61, 0x70, 0x6f, 0x79, 0x6f, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x74, 0x72, 0x61, 0x74, 0x61, 0x76, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x72, - 0x65, 0x61, 0x72, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x68, 0x65, 0x6d, 0x6f, 0x73, - 0x63, 0x69, 0x6e, 0x63, 0x6f, 0x63, 0x61, 0x72, 0x67, 0x6f, 0x70, 0x69, 0x73, - 0x6f, 0x73, 0x6f, 0x72, 0x64, 0x65, 0x6e, 0x68, 0x61, 0x63, 0x65, 0x6e, 0xc3, - 0xa1, 0x72, 0x65, 0x61, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x72, - 0x6f, 0x63, 0x65, 0x72, 0x63, 0x61, 0x70, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, - 0x70, 0x65, 0x6c, 0x6d, 0x65, 0x6e, 0x6f, 0x72, 0xc3, 0xba, 0x74, 0x69, 0x6c, - 0x63, 0x6c, 0x61, 0x72, 0x6f, 0x6a, 0x6f, 0x72, 0x67, 0x65, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x70, 0x6f, 0x6e, 0x65, 0x72, 0x74, 0x61, 0x72, 0x64, 0x65, 0x6e, - 0x61, 0x64, 0x69, 0x65, 0x6d, 0x61, 0x72, 0x63, 0x61, 0x73, 0x69, 0x67, 0x75, - 0x65, 0x65, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6c, 0x6f, 0x63, 0x6f, - 0x63, 0x68, 0x65, 0x6d, 0x6f, 0x74, 0x6f, 0x73, 0x6d, 0x61, 0x64, 0x72, 0x65, - 0x63, 0x6c, 0x61, 0x73, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x69, 0xc3, - 0xb1, 0x6f, 0x71, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, 0x73, 0x61, 0x72, 0x62, - 0x61, 0x6e, 0x63, 0x6f, 0x68, 0x69, 0x6a, 0x6f, 0x73, 0x76, 0x69, 0x61, 0x6a, - 0x65, 0x70, 0x61, 0x62, 0x6c, 0x6f, 0xc3, 0xa9, 0x73, 0x74, 0x65, 0x76, 0x69, - 0x65, 0x6e, 0x65, 0x72, 0x65, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x6a, 0x61, 0x72, - 0x66, 0x6f, 0x6e, 0x64, 0x6f, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x6f, 0x72, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x72, 0x61, 0x63, 0x61, 0x75, 0x73, 0x61, 0x74, - 0x6f, 0x6d, 0x61, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x73, 0x6c, 0x75, 0x6e, 0x65, - 0x73, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x76, 0x65, - 0x6e, 0x64, 0x6f, 0x70, 0x65, 0x73, 0x61, 0x72, 0x74, 0x69, 0x70, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x61, 0x6d, 0x61, 0x72, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x76, 0x61, 0x70, 0x61, 0x64, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x76, - 0x61, 0x6d, 0x6f, 0x73, 0x7a, 0x6f, 0x6e, 0x61, 0x73, 0x61, 0x6d, 0x62, 0x6f, - 0x73, 0x62, 0x61, 0x6e, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x61, 0x61, 0x62, - 0x75, 0x73, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x75, 0x62, 0x69, 0x72, - 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x76, 0x69, 0x76, 0x69, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x6f, 0x63, 0x68, 0x69, 0x63, 0x61, 0x61, 0x6c, 0x6c, 0xc3, 0xad, 0x6a, - 0x6f, 0x76, 0x65, 0x6e, 0x64, 0x69, 0x63, 0x68, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x72, 0x73, 0x75, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x66, 0x69, 0x6e, 0x65, 0x73, - 0x6c, 0x6c, 0x61, 0x6d, 0x61, 0x62, 0x75, 0x73, 0x63, 0x6f, 0xc3, 0xa9, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6e, 0x65, 0x67, 0x72, 0x6f, 0x70, - 0x6c, 0x61, 0x7a, 0x61, 0x68, 0x75, 0x6d, 0x6f, 0x72, 0x70, 0x61, 0x67, 0x61, - 0x72, 0x6a, 0x75, 0x6e, 0x74, 0x61, 0x64, 0x6f, 0x62, 0x6c, 0x65, 0x69, 0x73, - 0x6c, 0x61, 0x73, 0x62, 0x6f, 0x6c, 0x73, 0x61, 0x62, 0x61, 0xc3, 0xb1, 0x6f, - 0x68, 0x61, 0x62, 0x6c, 0x61, 0x6c, 0x75, 0x63, 0x68, 0x61, 0xc3, 0x81, 0x72, - 0x65, 0x61, 0x64, 0x69, 0x63, 0x65, 0x6e, 0x6a, 0x75, 0x67, 0x61, 0x72, 0x6e, - 0x6f, 0x74, 0x61, 0x73, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0x61, 0x6c, 0x6c, 0xc3, - 0xa1, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x65, 0x73, 0x74, 0xc3, 0xa9, 0x67, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x61, 0x72, 0x69, 0x6f, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x63, 0x6f, 0x73, 0x74, 0x6f, 0x66, 0x69, 0x63, 0x68, 0x61, 0x70, - 0x6c, 0x61, 0x74, 0x61, 0x68, 0x6f, 0x67, 0x61, 0x72, 0x61, 0x72, 0x74, 0x65, - 0x73, 0x6c, 0x65, 0x79, 0x65, 0x73, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6d, 0x75, - 0x73, 0x65, 0x6f, 0x62, 0x61, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x73, - 0x6d, 0x69, 0x74, 0x61, 0x64, 0x63, 0x69, 0x65, 0x6c, 0x6f, 0x63, 0x68, 0x69, - 0x63, 0x6f, 0x6d, 0x69, 0x65, 0x64, 0x6f, 0x67, 0x61, 0x6e, 0x61, 0x72, 0x73, - 0x61, 0x6e, 0x74, 0x6f, 0x65, 0x74, 0x61, 0x70, 0x61, 0x64, 0x65, 0x62, 0x65, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x61, 0x72, 0x65, 0x64, 0x65, 0x73, 0x73, 0x69, - 0x65, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x65, 0x61, - 0x64, 0x75, 0x64, 0x61, 0x73, 0x64, 0x65, 0x73, 0x65, 0x6f, 0x76, 0x69, 0x65, - 0x6a, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x61, 0x61, 0x67, 0x75, 0x61, 0x73, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6d, - 0x65, 0x64, 0x69, 0x75, 0x6d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x70, 0x72, 0x69, 0x6e, 0x67, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x6d, 0x6f, - 0x62, 0x69, 0x6c, 0x65, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x73, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x66, 0x72, 0x69, - 0x65, 0x6e, 0x64, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x65, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x6c, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x73, 0x63, 0x68, - 0x6f, 0x6f, 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x64, 0x65, 0x62, 0x61, 0x74, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x67, 0x75, 0x65, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x71, 0x75, 0x61, 0x72, - 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x77, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x64, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, - 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x63, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x3e, - 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x76, - 0x61, 0x6c, 0x6c, 0x65, 0x79, 0x63, 0x61, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x6d, 0x75, 0x73, 0x65, - 0x75, 0x6d, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x79, - 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x68, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x72, 0x76, 0x65, 0x79, 0x62, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x6d, 0x6f, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x6d, 0x6f, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x45, 0x75, - 0x72, 0x6f, 0x70, 0x65, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x65, 0x6e, 0x6f, 0x75, - 0x67, 0x68, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x74, - 0x68, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x79, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x65, 0x73, 0x63, 0x61, 0x70, - 0x65, 0x63, 0x68, 0x6f, 0x73, 0x65, 0x6e, 0x63, 0x68, 0x75, 0x72, 0x63, 0x68, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x63, - 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, - 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, - 0x69, 0x6c, 0x76, 0x65, 0x72, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x62, 0x72, 0x6f, - 0x77, 0x73, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x77, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x6e, 0x6f, 0x77, 0x72, 0x61, 0x70, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x61, - 0x66, 0x65, 0x74, 0x79, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x70, 0x69, - 0x72, 0x69, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x65, - 0x61, 0x64, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x65, 0x64, 0x65, - 0x64, 0x72, 0x75, 0x73, 0x73, 0x69, 0x61, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x62, - 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x66, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2d, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, - 0x68, 0x65, 0x6c, 0x70, 0x65, 0x64, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x69, - 0x6d, 0x70, 0x61, 0x63, 0x74, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6c, - 0x77, 0x61, 0x79, 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x20, 0x62, 0x6f, 0x74, - 0x74, 0x6f, 0x6d, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x29, 0x7b, 0x76, 0x61, - 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, - 0x63, 0x6f, 0x75, 0x70, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x62, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x62, 0x65, 0x61, 0x75, 0x74, - 0x79, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x67, 0x6f, 0x74, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x63, - 0x6f, 0x75, 0x72, 0x73, 0x65, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x73, - 0x6c, 0x61, 0x6e, 0x64, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x63, 0x6f, 0x6f, - 0x6b, 0x69, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6d, 0x61, 0x7a, - 0x6f, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x61, 0x64, 0x76, 0x69, 0x63, - 0x65, 0x69, 0x6e, 0x3c, 0x2f, 0x61, 0x3e, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x42, - 0x45, 0x47, 0x49, 0x4e, 0x20, 0x4d, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x73, 0x6c, 0x61, - 0x6e, 0x64, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x6d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x0a, - 0x0a, 0x4f, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x6d, 0x65, 0x6e, - 0x75, 0x22, 0x3e, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x61, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x77, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x62, 0x65, 0x68, - 0x69, 0x6e, 0x64, 0x64, 0x6f, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, - 0x65, 0x64, 0x75, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x3c, - 0x2f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x73, - 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x64, 0x33, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x63, 0x61, - 0x6e, 0x61, 0x64, 0x61, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x7a, - 0x69, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x22, - 0x3e, 0x62, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x6d, - 0x61, 0x72, 0x69, 0x6e, 0x65, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x63, 0x61, - 0x6d, 0x65, 0x72, 0x61, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x73, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x2e, 0x67, 0x69, 0x66, 0x22, - 0x20, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x73, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x75, 0x72, 0x76, 0x69, 0x76, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x66, 0x65, - 0x6d, 0x61, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x3e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x74, 0x68, 0x61, 0x6e, 0x6b, - 0x73, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x41, - 0x66, 0x72, 0x69, 0x63, 0x61, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x3c, 0x62, 0x72, - 0x20, 0x2f, 0x3e, 0x77, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x73, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x7c, 0x7c, 0x20, 0x7b, 0x7d, - 0x3b, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x77, 0x72, 0x61, 0x70, 0x22, 0x3e, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x63, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x6d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x6f, - 0x74, 0x65, 0x73, 0x31, 0x35, 0x30, 0x70, 0x78, 0x7c, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x31, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x70, 0x72, - 0x69, 0x6e, 0x63, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x2e, 0x70, 0x6e, - 0x67, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2e, 0x20, - 0x57, 0x69, 0x74, 0x68, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x61, 0x6e, 0x6e, 0x75, 0x61, - 0x6c, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x62, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6c, - 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x69, 0x73, - 0x72, 0x61, 0x65, 0x6c, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x68, 0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x3c, 0x72, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x73, 0x65, 0x78, - 0x75, 0x61, 0x6c, 0x62, 0x75, 0x72, 0x65, 0x61, 0x75, 0x2e, 0x6a, 0x70, 0x67, - 0x22, 0x20, 0x31, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x6f, 0x62, 0x74, 0x61, 0x69, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x65, 0x64, 0x79, 0x6d, - 0x65, 0x6e, 0x75, 0x22, 0x20, 0x6c, 0x79, 0x72, 0x69, 0x63, 0x73, 0x74, 0x6f, - 0x64, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x65, 0x64, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x74, 0x75, 0x72, 0x6b, 0x65, 0x79, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x74, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x65, 0x6c, - 0x73, 0x65, 0x7b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x67, - 0x3c, 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x2e, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x30, 0x70, - 0x72, 0x61, 0x67, 0x6d, 0x61, 0x66, 0x72, 0x69, 0x64, 0x61, 0x79, 0x6a, 0x75, - 0x6e, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x70, 0x61, 0x67, 0x65, 0x22, - 0x3e, 0x62, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x28, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x66, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x72, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, - 0x62, 0x6f, 0x64, 0x79, 0x22, 0x3e, 0x0a, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x54, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x73, 0x65, 0x65, 0x69, 0x6e, 0x67, 0x6a, 0x65, - 0x72, 0x73, 0x65, 0x79, 0x4e, 0x65, 0x77, 0x73, 0x3c, 0x2f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x6a, 0x75, - 0x72, 0x79, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x43, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x70, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x62, 0x6f, - 0x78, 0x22, 0x3e, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x44, 0x61, - 0x76, 0x69, 0x64, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x41, 0x70, 0x72, 0x69, 0x6c, - 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x6d, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x61, - 0x6d, 0x70, 0x75, 0x73, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x5b, 0x5d, 0x3b, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x2e, 0x67, 0x75, 0x69, 0x74, - 0x61, 0x72, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x2e, 0x70, 0x68, 0x70, 0x22, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x77, 0x69, 0x6c, 0x73, 0x6f, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x72, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x77, 0x65, - 0x64, 0x65, 0x6e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x69, - 0x6c, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x0a, 0x0a, 0x57, 0x68, 0x69, 0x6c, 0x74, 0x61, 0x79, 0x6c, 0x6f, 0x72, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x72, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x66, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x29, - 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x62, 0x75, 0x79, - 0x69, 0x6e, 0x67, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x6f, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x35, 0x70, 0x78, 0x3b, 0x22, 0x3e, - 0x76, 0x73, 0x70, 0x61, 0x63, 0x65, 0x70, 0x6f, 0x73, 0x74, 0x65, 0x72, 0x6d, - 0x61, 0x6a, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x66, 0x66, 0x65, 0x65, 0x6d, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x6d, 0x61, 0x74, 0x75, 0x72, 0x65, 0x68, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x76, 0x3e, 0x6b, 0x61, 0x6e, 0x73, - 0x61, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x73, 0x3d, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x68, 0x73, 0x70, 0x61, 0x63, 0x65, 0x30, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x20, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x6f, - 0x6c, 0x73, 0x6b, 0x69, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6a, 0x6f, 0x72, - 0x64, 0x61, 0x6e, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x20, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6e, 0x65, 0x77, 0x73, 0x22, 0x3e, 0x30, 0x31, 0x2e, 0x6a, 0x70, 0x67, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6d, - 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x49, 0x53, - 0x42, 0x4e, 0x20, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x61, 0x69, 0x72, 0x2e, 0x78, 0x6d, 0x6c, 0x22, - 0x20, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x45, 0x78, 0x70, 0x3a, - 0x68, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x76, 0x69, - 0x72, 0x67, 0x69, 0x6e, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x74, - 0x72, 0x3e, 0x0d, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x3e, 0x27, 0x29, 0x3b, 0x0a, 0x09, 0x3c, 0x2f, 0x74, 0x64, 0x3e, - 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x67, 0x61, 0x6c, 0x65, 0x67, 0x6f, 0x6d, - 0x61, 0x67, 0x79, 0x61, 0x72, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x73, 0x72, - 0x70, 0x73, 0x6b, 0x69, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe7, 0xb9, 0x81, 0xe9, - 0xab, 0x94, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe4, 0xb8, 0xad, 0xe5, 0x9b, - 0xbd, 0xe6, 0x88, 0x91, 0xe4, 0xbb, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, 0xaa, - 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe8, - 0xae, 0xba, 0xe5, 0x9d, 0x9b, 0xe5, 0x8f, 0xaf, 0xe4, 0xbb, 0xa5, 0xe6, 0x9c, - 0x8d, 0xe5, 0x8a, 0xa1, 0xe6, 0x97, 0xb6, 0xe9, 0x97, 0xb4, 0xe4, 0xb8, 0xaa, - 0xe4, 0xba, 0xba, 0xe4, 0xba, 0xa7, 0xe5, 0x93, 0x81, 0xe8, 0x87, 0xaa, 0xe5, - 0xb7, 0xb1, 0xe4, 0xbc, 0x81, 0xe4, 0xb8, 0x9a, 0xe6, 0x9f, 0xa5, 0xe7, 0x9c, - 0x8b, 0xe5, 0xb7, 0xa5, 0xe4, 0xbd, 0x9c, 0xe8, 0x81, 0x94, 0xe7, 0xb3, 0xbb, - 0xe6, 0xb2, 0xa1, 0xe6, 0x9c, 0x89, 0xe7, 0xbd, 0x91, 0xe7, 0xab, 0x99, 0xe6, - 0x89, 0x80, 0xe6, 0x9c, 0x89, 0xe8, 0xaf, 0x84, 0xe8, 0xae, 0xba, 0xe4, 0xb8, - 0xad, 0xe5, 0xbf, 0x83, 0xe6, 0x96, 0x87, 0xe7, 0xab, 0xa0, 0xe7, 0x94, 0xa8, - 0xe6, 0x88, 0xb7, 0xe9, 0xa6, 0x96, 0xe9, 0xa1, 0xb5, 0xe4, 0xbd, 0x9c, 0xe8, - 0x80, 0x85, 0xe6, 0x8a, 0x80, 0xe6, 0x9c, 0xaf, 0xe9, 0x97, 0xae, 0xe9, 0xa2, - 0x98, 0xe7, 0x9b, 0xb8, 0xe5, 0x85, 0xb3, 0xe4, 0xb8, 0x8b, 0xe8, 0xbd, 0xbd, - 0xe6, 0x90, 0x9c, 0xe7, 0xb4, 0xa2, 0xe4, 0xbd, 0xbf, 0xe7, 0x94, 0xa8, 0xe8, - 0xbd, 0xaf, 0xe4, 0xbb, 0xb6, 0xe5, 0x9c, 0xa8, 0xe7, 0xba, 0xbf, 0xe4, 0xb8, - 0xbb, 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0x84, 0xe6, 0x96, 0x99, 0xe8, 0xa7, 0x86, - 0xe9, 0xa2, 0x91, 0xe5, 0x9b, 0x9e, 0xe5, 0xa4, 0x8d, 0xe6, 0xb3, 0xa8, 0xe5, - 0x86, 0x8c, 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x9c, 0xe6, 0x94, 0xb6, 0xe8, 0x97, - 0x8f, 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0xe6, 0x8e, 0xa8, 0xe8, 0x8d, 0x90, - 0xe5, 0xb8, 0x82, 0xe5, 0x9c, 0xba, 0xe6, 0xb6, 0x88, 0xe6, 0x81, 0xaf, 0xe7, - 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xe5, 0x8f, 0x91, 0xe5, 0xb8, 0x83, 0xe4, 0xbb, - 0x80, 0xe4, 0xb9, 0x88, 0xe5, 0xa5, 0xbd, 0xe5, 0x8f, 0x8b, 0xe7, 0x94, 0x9f, - 0xe6, 0xb4, 0xbb, 0xe5, 0x9b, 0xbe, 0xe7, 0x89, 0x87, 0xe5, 0x8f, 0x91, 0xe5, - 0xb1, 0x95, 0xe5, 0xa6, 0x82, 0xe6, 0x9e, 0x9c, 0xe6, 0x89, 0x8b, 0xe6, 0x9c, - 0xba, 0xe6, 0x96, 0xb0, 0xe9, 0x97, 0xbb, 0xe6, 0x9c, 0x80, 0xe6, 0x96, 0xb0, - 0xe6, 0x96, 0xb9, 0xe5, 0xbc, 0x8f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe6, - 0x8f, 0x90, 0xe4, 0xbe, 0x9b, 0xe5, 0x85, 0xb3, 0xe4, 0xba, 0x8e, 0xe6, 0x9b, - 0xb4, 0xe5, 0xa4, 0x9a, 0xe8, 0xbf, 0x99, 0xe4, 0xb8, 0xaa, 0xe7, 0xb3, 0xbb, - 0xe7, 0xbb, 0x9f, 0xe7, 0x9f, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0xb8, 0xb8, 0xe6, - 0x88, 0x8f, 0xe5, 0xb9, 0xbf, 0xe5, 0x91, 0x8a, 0xe5, 0x85, 0xb6, 0xe4, 0xbb, - 0x96, 0xe5, 0x8f, 0x91, 0xe8, 0xa1, 0xa8, 0xe5, 0xae, 0x89, 0xe5, 0x85, 0xa8, - 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xbc, 0x9a, 0xe5, 0x91, 0x98, 0xe8, - 0xbf, 0x9b, 0xe8, 0xa1, 0x8c, 0xe7, 0x82, 0xb9, 0xe5, 0x87, 0xbb, 0xe7, 0x89, - 0x88, 0xe6, 0x9d, 0x83, 0xe7, 0x94, 0xb5, 0xe5, 0xad, 0x90, 0xe4, 0xb8, 0x96, - 0xe7, 0x95, 0x8c, 0xe8, 0xae, 0xbe, 0xe8, 0xae, 0xa1, 0xe5, 0x85, 0x8d, 0xe8, - 0xb4, 0xb9, 0xe6, 0x95, 0x99, 0xe8, 0x82, 0xb2, 0xe5, 0x8a, 0xa0, 0xe5, 0x85, - 0xa5, 0xe6, 0xb4, 0xbb, 0xe5, 0x8a, 0xa8, 0xe4, 0xbb, 0x96, 0xe4, 0xbb, 0xac, - 0xe5, 0x95, 0x86, 0xe5, 0x93, 0x81, 0xe5, 0x8d, 0x9a, 0xe5, 0xae, 0xa2, 0xe7, - 0x8e, 0xb0, 0xe5, 0x9c, 0xa8, 0xe4, 0xb8, 0x8a, 0xe6, 0xb5, 0xb7, 0xe5, 0xa6, - 0x82, 0xe4, 0xbd, 0x95, 0xe5, 0xb7, 0xb2, 0xe7, 0xbb, 0x8f, 0xe7, 0x95, 0x99, - 0xe8, 0xa8, 0x80, 0xe8, 0xaf, 0xa6, 0xe7, 0xbb, 0x86, 0xe7, 0xa4, 0xbe, 0xe5, - 0x8c, 0xba, 0xe7, 0x99, 0xbb, 0xe5, 0xbd, 0x95, 0xe6, 0x9c, 0xac, 0xe7, 0xab, - 0x99, 0xe9, 0x9c, 0x80, 0xe8, 0xa6, 0x81, 0xe4, 0xbb, 0xb7, 0xe6, 0xa0, 0xbc, - 0xe6, 0x94, 0xaf, 0xe6, 0x8c, 0x81, 0xe5, 0x9b, 0xbd, 0xe9, 0x99, 0x85, 0xe9, - 0x93, 0xbe, 0xe6, 0x8e, 0xa5, 0xe5, 0x9b, 0xbd, 0xe5, 0xae, 0xb6, 0xe5, 0xbb, - 0xba, 0xe8, 0xae, 0xbe, 0xe6, 0x9c, 0x8b, 0xe5, 0x8f, 0x8b, 0xe9, 0x98, 0x85, - 0xe8, 0xaf, 0xbb, 0xe6, 0xb3, 0x95, 0xe5, 0xbe, 0x8b, 0xe4, 0xbd, 0x8d, 0xe7, - 0xbd, 0xae, 0xe7, 0xbb, 0x8f, 0xe6, 0xb5, 0x8e, 0xe9, 0x80, 0x89, 0xe6, 0x8b, - 0xa9, 0xe8, 0xbf, 0x99, 0xe6, 0xa0, 0xb7, 0xe5, 0xbd, 0x93, 0xe5, 0x89, 0x8d, - 0xe5, 0x88, 0x86, 0xe7, 0xb1, 0xbb, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe5, - 0x9b, 0xa0, 0xe4, 0xb8, 0xba, 0xe4, 0xba, 0xa4, 0xe6, 0x98, 0x93, 0xe6, 0x9c, - 0x80, 0xe5, 0x90, 0x8e, 0xe9, 0x9f, 0xb3, 0xe4, 0xb9, 0x90, 0xe4, 0xb8, 0x8d, - 0xe8, 0x83, 0xbd, 0xe9, 0x80, 0x9a, 0xe8, 0xbf, 0x87, 0xe8, 0xa1, 0x8c, 0xe4, - 0xb8, 0x9a, 0xe7, 0xa7, 0x91, 0xe6, 0x8a, 0x80, 0xe5, 0x8f, 0xaf, 0xe8, 0x83, - 0xbd, 0xe8, 0xae, 0xbe, 0xe5, 0xa4, 0x87, 0xe5, 0x90, 0x88, 0xe4, 0xbd, 0x9c, - 0xe5, 0xa4, 0xa7, 0xe5, 0xae, 0xb6, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, 0x9a, 0xe7, - 0xa0, 0x94, 0xe7, 0xa9, 0xb6, 0xe4, 0xb8, 0x93, 0xe4, 0xb8, 0x9a, 0xe5, 0x85, - 0xa8, 0xe9, 0x83, 0xa8, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe8, 0xbf, 0x99, - 0xe9, 0x87, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x98, 0xaf, 0xe5, 0xbc, 0x80, 0xe5, - 0xa7, 0x8b, 0xe6, 0x83, 0x85, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xb5, 0xe8, 0x84, - 0x91, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x93, 0x81, 0xe7, 0x89, 0x8c, - 0xe5, 0xb8, 0xae, 0xe5, 0x8a, 0xa9, 0xe6, 0x96, 0x87, 0xe5, 0x8c, 0x96, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe5, 0xad, - 0xa6, 0xe4, 0xb9, 0xa0, 0xe5, 0x9c, 0xb0, 0xe5, 0x9d, 0x80, 0xe6, 0xb5, 0x8f, - 0xe8, 0xa7, 0x88, 0xe6, 0x8a, 0x95, 0xe8, 0xb5, 0x84, 0xe5, 0xb7, 0xa5, 0xe7, - 0xa8, 0x8b, 0xe8, 0xa6, 0x81, 0xe6, 0xb1, 0x82, 0xe6, 0x80, 0x8e, 0xe4, 0xb9, - 0x88, 0xe6, 0x97, 0xb6, 0xe5, 0x80, 0x99, 0xe5, 0x8a, 0x9f, 0xe8, 0x83, 0xbd, - 0xe4, 0xb8, 0xbb, 0xe8, 0xa6, 0x81, 0xe7, 0x9b, 0xae, 0xe5, 0x89, 0x8d, 0xe8, - 0xb5, 0x84, 0xe8, 0xae, 0xaf, 0xe5, 0x9f, 0x8e, 0xe5, 0xb8, 0x82, 0xe6, 0x96, - 0xb9, 0xe6, 0xb3, 0x95, 0xe7, 0x94, 0xb5, 0xe5, 0xbd, 0xb1, 0xe6, 0x8b, 0x9b, - 0xe8, 0x81, 0x98, 0xe5, 0xa3, 0xb0, 0xe6, 0x98, 0x8e, 0xe4, 0xbb, 0xbb, 0xe4, - 0xbd, 0x95, 0xe5, 0x81, 0xa5, 0xe5, 0xba, 0xb7, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, - 0xae, 0xe7, 0xbe, 0x8e, 0xe5, 0x9b, 0xbd, 0xe6, 0xb1, 0xbd, 0xe8, 0xbd, 0xa6, - 0xe4, 0xbb, 0x8b, 0xe7, 0xbb, 0x8d, 0xe4, 0xbd, 0x86, 0xe6, 0x98, 0xaf, 0xe4, - 0xba, 0xa4, 0xe6, 0xb5, 0x81, 0xe7, 0x94, 0x9f, 0xe4, 0xba, 0xa7, 0xe6, 0x89, - 0x80, 0xe4, 0xbb, 0xa5, 0xe7, 0x94, 0xb5, 0xe8, 0xaf, 0x9d, 0xe6, 0x98, 0xbe, - 0xe7, 0xa4, 0xba, 0xe4, 0xb8, 0x80, 0xe4, 0xba, 0x9b, 0xe5, 0x8d, 0x95, 0xe4, - 0xbd, 0x8d, 0xe4, 0xba, 0xba, 0xe5, 0x91, 0x98, 0xe5, 0x88, 0x86, 0xe6, 0x9e, - 0x90, 0xe5, 0x9c, 0xb0, 0xe5, 0x9b, 0xbe, 0xe6, 0x97, 0x85, 0xe6, 0xb8, 0xb8, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0xb7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe7, - 0xb3, 0xbb, 0xe5, 0x88, 0x97, 0xe7, 0xbd, 0x91, 0xe5, 0x8f, 0x8b, 0xe5, 0xb8, - 0x96, 0xe5, 0xad, 0x90, 0xe5, 0xaf, 0x86, 0xe7, 0xa0, 0x81, 0xe9, 0xa2, 0x91, - 0xe9, 0x81, 0x93, 0xe6, 0x8e, 0xa7, 0xe5, 0x88, 0xb6, 0xe5, 0x9c, 0xb0, 0xe5, - 0x8c, 0xba, 0xe5, 0x9f, 0xba, 0xe6, 0x9c, 0xac, 0xe5, 0x85, 0xa8, 0xe5, 0x9b, - 0xbd, 0xe7, 0xbd, 0x91, 0xe4, 0xb8, 0x8a, 0xe9, 0x87, 0x8d, 0xe8, 0xa6, 0x81, - 0xe7, 0xac, 0xac, 0xe4, 0xba, 0x8c, 0xe5, 0x96, 0x9c, 0xe6, 0xac, 0xa2, 0xe8, - 0xbf, 0x9b, 0xe5, 0x85, 0xa5, 0xe5, 0x8f, 0x8b, 0xe6, 0x83, 0x85, 0xe8, 0xbf, - 0x99, 0xe4, 0xba, 0x9b, 0xe8, 0x80, 0x83, 0xe8, 0xaf, 0x95, 0xe5, 0x8f, 0x91, - 0xe7, 0x8e, 0xb0, 0xe5, 0x9f, 0xb9, 0xe8, 0xae, 0xad, 0xe4, 0xbb, 0xa5, 0xe4, - 0xb8, 0x8a, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe6, 0x88, 0x90, 0xe4, 0xb8, - 0xba, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe9, 0xa6, 0x99, 0xe6, 0xb8, 0xaf, - 0xe5, 0x90, 0x8c, 0xe6, 0x97, 0xb6, 0xe5, 0xa8, 0xb1, 0xe4, 0xb9, 0x90, 0xe5, - 0x8f, 0x91, 0xe9, 0x80, 0x81, 0xe4, 0xb8, 0x80, 0xe5, 0xae, 0x9a, 0xe5, 0xbc, - 0x80, 0xe5, 0x8f, 0x91, 0xe4, 0xbd, 0x9c, 0xe5, 0x93, 0x81, 0xe6, 0xa0, 0x87, - 0xe5, 0x87, 0x86, 0xe6, 0xac, 0xa2, 0xe8, 0xbf, 0x8e, 0xe8, 0xa7, 0xa3, 0xe5, - 0x86, 0xb3, 0xe5, 0x9c, 0xb0, 0xe6, 0x96, 0xb9, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, - 0x8b, 0xe4, 0xbb, 0xa5, 0xe5, 0x8f, 0x8a, 0xe8, 0xb4, 0xa3, 0xe4, 0xbb, 0xbb, - 0xe6, 0x88, 0x96, 0xe8, 0x80, 0x85, 0xe5, 0xae, 0xa2, 0xe6, 0x88, 0xb7, 0xe4, - 0xbb, 0xa3, 0xe8, 0xa1, 0xa8, 0xe7, 0xa7, 0xaf, 0xe5, 0x88, 0x86, 0xe5, 0xa5, - 0xb3, 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe7, 0xa0, 0x81, 0xe9, 0x94, 0x80, - 0xe5, 0x94, 0xae, 0xe5, 0x87, 0xba, 0xe7, 0x8e, 0xb0, 0xe7, 0xa6, 0xbb, 0xe7, - 0xba, 0xbf, 0xe5, 0xba, 0x94, 0xe7, 0x94, 0xa8, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0x90, 0x8c, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, - 0xe7, 0xbb, 0x9f, 0xe8, 0xae, 0xa1, 0xe6, 0x9f, 0xa5, 0xe8, 0xaf, 0xa2, 0xe4, - 0xb8, 0x8d, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb3, 0xe6, 0x9c, - 0xba, 0xe6, 0x9e, 0x84, 0xe5, 0xbe, 0x88, 0xe5, 0xa4, 0x9a, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe7, 0xbb, 0x84, 0xe7, 0xbb, 0x87, 0xe6, 0x94, 0xbf, 0xe7, - 0xad, 0x96, 0xe7, 0x9b, 0xb4, 0xe6, 0x8e, 0xa5, 0xe8, 0x83, 0xbd, 0xe5, 0x8a, - 0x9b, 0xe6, 0x9d, 0xa5, 0xe6, 0xba, 0x90, 0xe6, 0x99, 0x82, 0xe9, 0x96, 0x93, - 0xe7, 0x9c, 0x8b, 0xe5, 0x88, 0xb0, 0xe7, 0x83, 0xad, 0xe9, 0x97, 0xa8, 0xe5, - 0x85, 0xb3, 0xe9, 0x94, 0xae, 0xe4, 0xb8, 0x93, 0xe5, 0x8c, 0xba, 0xe9, 0x9d, - 0x9e, 0xe5, 0xb8, 0xb8, 0xe8, 0x8b, 0xb1, 0xe8, 0xaf, 0xad, 0xe7, 0x99, 0xbe, - 0xe5, 0xba, 0xa6, 0xe5, 0xb8, 0x8c, 0xe6, 0x9c, 0x9b, 0xe7, 0xbe, 0x8e, 0xe5, - 0xa5, 0xb3, 0xe6, 0xaf, 0x94, 0xe8, 0xbe, 0x83, 0xe7, 0x9f, 0xa5, 0xe8, 0xaf, - 0x86, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0x9a, 0xe5, 0xbb, 0xba, 0xe8, 0xae, 0xae, - 0xe9, 0x83, 0xa8, 0xe9, 0x97, 0xa8, 0xe6, 0x84, 0x8f, 0xe8, 0xa7, 0x81, 0xe7, - 0xb2, 0xbe, 0xe5, 0xbd, 0xa9, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe6, 0x8f, - 0x90, 0xe9, 0xab, 0x98, 0xe5, 0x8f, 0x91, 0xe8, 0xa8, 0x80, 0xe6, 0x96, 0xb9, - 0xe9, 0x9d, 0xa2, 0xe5, 0x9f, 0xba, 0xe9, 0x87, 0x91, 0xe5, 0xa4, 0x84, 0xe7, - 0x90, 0x86, 0xe6, 0x9d, 0x83, 0xe9, 0x99, 0x90, 0xe5, 0xbd, 0xb1, 0xe7, 0x89, - 0x87, 0xe9, 0x93, 0xb6, 0xe8, 0xa1, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x9c, 0x89, - 0xe5, 0x88, 0x86, 0xe4, 0xba, 0xab, 0xe7, 0x89, 0xa9, 0xe5, 0x93, 0x81, 0xe7, - 0xbb, 0x8f, 0xe8, 0x90, 0xa5, 0xe6, 0xb7, 0xbb, 0xe5, 0x8a, 0xa0, 0xe4, 0xb8, - 0x93, 0xe5, 0xae, 0xb6, 0xe8, 0xbf, 0x99, 0xe7, 0xa7, 0x8d, 0xe8, 0xaf, 0x9d, - 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0xb7, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, - 0x8a, 0xa1, 0xe5, 0x85, 0xac, 0xe5, 0x91, 0x8a, 0xe8, 0xae, 0xb0, 0xe5, 0xbd, - 0x95, 0xe7, 0xae, 0x80, 0xe4, 0xbb, 0x8b, 0xe8, 0xb4, 0xa8, 0xe9, 0x87, 0x8f, - 0xe7, 0x94, 0xb7, 0xe4, 0xba, 0xba, 0xe5, 0xbd, 0xb1, 0xe5, 0x93, 0x8d, 0xe5, - 0xbc, 0x95, 0xe7, 0x94, 0xa8, 0xe6, 0x8a, 0xa5, 0xe5, 0x91, 0x8a, 0xe9, 0x83, - 0xa8, 0xe5, 0x88, 0x86, 0xe5, 0xbf, 0xab, 0xe9, 0x80, 0x9f, 0xe5, 0x92, 0xa8, - 0xe8, 0xaf, 0xa2, 0xe6, 0x97, 0xb6, 0xe5, 0xb0, 0x9a, 0xe6, 0xb3, 0xa8, 0xe6, - 0x84, 0x8f, 0xe7, 0x94, 0xb3, 0xe8, 0xaf, 0xb7, 0xe5, 0xad, 0xa6, 0xe6, 0xa0, - 0xa1, 0xe5, 0xba, 0x94, 0xe8, 0xaf, 0xa5, 0xe5, 0x8e, 0x86, 0xe5, 0x8f, 0xb2, - 0xe5, 0x8f, 0xaa, 0xe6, 0x98, 0xaf, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe8, - 0xb4, 0xad, 0xe4, 0xb9, 0xb0, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe4, 0xb8, - 0xba, 0xe4, 0xba, 0x86, 0xe6, 0x88, 0x90, 0xe5, 0x8a, 0x9f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x98, 0x8e, 0xe4, 0xbe, 0x9b, 0xe5, 0xba, 0x94, 0xe5, 0xad, 0xa9, 0xe5, - 0xad, 0x90, 0xe4, 0xb8, 0x93, 0xe9, 0xa2, 0x98, 0xe7, 0xa8, 0x8b, 0xe5, 0xba, - 0x8f, 0xe4, 0xb8, 0x80, 0xe8, 0x88, 0xac, 0xe6, 0x9c, 0x83, 0xe5, 0x93, 0xa1, - 0xe5, 0x8f, 0xaa, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x83, 0xe4, - 0xbf, 0x9d, 0xe6, 0x8a, 0xa4, 0xe8, 0x80, 0x8c, 0xe4, 0xb8, 0x94, 0xe4, 0xbb, - 0x8a, 0xe5, 0xa4, 0xa9, 0xe7, 0xaa, 0x97, 0xe5, 0x8f, 0xa3, 0xe5, 0x8a, 0xa8, - 0xe6, 0x80, 0x81, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe7, 0x89, 0xb9, 0xe5, - 0x88, 0xab, 0xe8, 0xae, 0xa4, 0xe4, 0xb8, 0xba, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, - 0xbb, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe5, 0xb0, 0x8f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x88, 0x91, 0xe5, 0x80, 0x91, 0xe4, 0xbd, 0x9c, 0xe4, 0xb8, 0xba, 0xe5, - 0xaa, 0x92, 0xe4, 0xbd, 0x93, 0xe5, 0x8c, 0x85, 0xe6, 0x8b, 0xac, 0xe9, 0x82, - 0xa3, 0xe4, 0xb9, 0x88, 0xe4, 0xb8, 0x80, 0xe6, 0xa0, 0xb7, 0xe5, 0x9b, 0xbd, - 0xe5, 0x86, 0x85, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe6, 0xa0, 0xb9, 0xe6, - 0x8d, 0xae, 0xe7, 0x94, 0xb5, 0xe8, 0xa7, 0x86, 0xe5, 0xad, 0xa6, 0xe9, 0x99, - 0xa2, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0x89, 0xe8, 0xbf, 0x87, 0xe7, 0xa8, 0x8b, - 0xe7, 0x94, 0xb1, 0xe4, 0xba, 0x8e, 0xe4, 0xba, 0xba, 0xe6, 0x89, 0x8d, 0xe5, - 0x87, 0xba, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x8d, 0xe8, 0xbf, 0x87, 0xe6, 0xad, - 0xa3, 0xe5, 0x9c, 0xa8, 0xe6, 0x98, 0x8e, 0xe6, 0x98, 0x9f, 0xe6, 0x95, 0x85, - 0xe4, 0xba, 0x8b, 0xe5, 0x85, 0xb3, 0xe7, 0xb3, 0xbb, 0xe6, 0xa0, 0x87, 0xe9, - 0xa2, 0x98, 0xe5, 0x95, 0x86, 0xe5, 0x8a, 0xa1, 0xe8, 0xbe, 0x93, 0xe5, 0x85, - 0xa5, 0xe4, 0xb8, 0x80, 0xe7, 0x9b, 0xb4, 0xe5, 0x9f, 0xba, 0xe7, 0xa1, 0x80, - 0xe6, 0x95, 0x99, 0xe5, 0xad, 0xa6, 0xe4, 0xba, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, - 0xbb, 0xba, 0xe7, 0xad, 0x91, 0xe7, 0xbb, 0x93, 0xe6, 0x9e, 0x9c, 0xe5, 0x85, - 0xa8, 0xe7, 0x90, 0x83, 0xe9, 0x80, 0x9a, 0xe7, 0x9f, 0xa5, 0xe8, 0xae, 0xa1, - 0xe5, 0x88, 0x92, 0xe5, 0xaf, 0xb9, 0xe4, 0xba, 0x8e, 0xe8, 0x89, 0xba, 0xe6, - 0x9c, 0xaf, 0xe7, 0x9b, 0xb8, 0xe5, 0x86, 0x8c, 0xe5, 0x8f, 0x91, 0xe7, 0x94, - 0x9f, 0xe7, 0x9c, 0x9f, 0xe7, 0x9a, 0x84, 0xe5, 0xbb, 0xba, 0xe7, 0xab, 0x8b, - 0xe7, 0xad, 0x89, 0xe7, 0xba, 0xa7, 0xe7, 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xe7, - 0xbb, 0x8f, 0xe9, 0xaa, 0x8c, 0xe5, 0xae, 0x9e, 0xe7, 0x8e, 0xb0, 0xe5, 0x88, - 0xb6, 0xe4, 0xbd, 0x9c, 0xe6, 0x9d, 0xa5, 0xe8, 0x87, 0xaa, 0xe6, 0xa0, 0x87, - 0xe7, 0xad, 0xbe, 0xe4, 0xbb, 0xa5, 0xe4, 0xb8, 0x8b, 0xe5, 0x8e, 0x9f, 0xe5, - 0x88, 0x9b, 0xe6, 0x97, 0xa0, 0xe6, 0xb3, 0x95, 0xe5, 0x85, 0xb6, 0xe4, 0xb8, - 0xad, 0xe5, 0x80, 0x8b, 0xe4, 0xba, 0xba, 0xe4, 0xb8, 0x80, 0xe5, 0x88, 0x87, - 0xe6, 0x8c, 0x87, 0xe5, 0x8d, 0x97, 0xe5, 0x85, 0xb3, 0xe9, 0x97, 0xad, 0xe9, - 0x9b, 0x86, 0xe5, 0x9b, 0xa2, 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x89, 0xe5, 0x85, - 0xb3, 0xe6, 0xb3, 0xa8, 0xe5, 0x9b, 0xa0, 0xe6, 0xad, 0xa4, 0xe7, 0x85, 0xa7, - 0xe7, 0x89, 0x87, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0x95, 0x86, 0xe4, - 0xb8, 0x9a, 0xe5, 0xb9, 0xbf, 0xe5, 0xb7, 0x9e, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, - 0x9f, 0xe9, 0xab, 0x98, 0xe7, 0xba, 0xa7, 0xe6, 0x9c, 0x80, 0xe8, 0xbf, 0x91, - 0xe7, 0xbb, 0xbc, 0xe5, 0x90, 0x88, 0xe8, 0xa1, 0xa8, 0xe7, 0xa4, 0xba, 0xe4, - 0xb8, 0x93, 0xe8, 0xbe, 0x91, 0xe8, 0xa1, 0x8c, 0xe4, 0xb8, 0xba, 0xe4, 0xba, - 0xa4, 0xe9, 0x80, 0x9a, 0xe8, 0xaf, 0x84, 0xe4, 0xbb, 0xb7, 0xe8, 0xa7, 0x89, - 0xe5, 0xbe, 0x97, 0xe7, 0xb2, 0xbe, 0xe5, 0x8d, 0x8e, 0xe5, 0xae, 0xb6, 0xe5, - 0xba, 0xad, 0xe5, 0xae, 0x8c, 0xe6, 0x88, 0x90, 0xe6, 0x84, 0x9f, 0xe8, 0xa7, - 0x89, 0xe5, 0xae, 0x89, 0xe8, 0xa3, 0x85, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xb0, - 0xe9, 0x82, 0xae, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0xb6, 0xe5, 0xba, 0xa6, 0xe9, - 0xa3, 0x9f, 0xe5, 0x93, 0x81, 0xe8, 0x99, 0xbd, 0xe7, 0x84, 0xb6, 0xe8, 0xbd, - 0xac, 0xe8, 0xbd, 0xbd, 0xe6, 0x8a, 0xa5, 0xe4, 0xbb, 0xb7, 0xe8, 0xae, 0xb0, - 0xe8, 0x80, 0x85, 0xe6, 0x96, 0xb9, 0xe6, 0xa1, 0x88, 0xe8, 0xa1, 0x8c, 0xe6, - 0x94, 0xbf, 0xe4, 0xba, 0xba, 0xe6, 0xb0, 0x91, 0xe7, 0x94, 0xa8, 0xe5, 0x93, - 0x81, 0xe4, 0xb8, 0x9c, 0xe8, 0xa5, 0xbf, 0xe6, 0x8f, 0x90, 0xe5, 0x87, 0xba, - 0xe9, 0x85, 0x92, 0xe5, 0xba, 0x97, 0xe7, 0x84, 0xb6, 0xe5, 0x90, 0x8e, 0xe4, - 0xbb, 0x98, 0xe6, 0xac, 0xbe, 0xe7, 0x83, 0xad, 0xe7, 0x82, 0xb9, 0xe4, 0xbb, - 0xa5, 0xe5, 0x89, 0x8d, 0xe5, 0xae, 0x8c, 0xe5, 0x85, 0xa8, 0xe5, 0x8f, 0x91, - 0xe5, 0xb8, 0x96, 0xe8, 0xae, 0xbe, 0xe7, 0xbd, 0xae, 0xe9, 0xa2, 0x86, 0xe5, - 0xaf, 0xbc, 0xe5, 0xb7, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, 0x8c, 0xbb, 0xe9, 0x99, - 0xa2, 0xe7, 0x9c, 0x8b, 0xe7, 0x9c, 0x8b, 0xe7, 0xbb, 0x8f, 0xe5, 0x85, 0xb8, - 0xe5, 0x8e, 0x9f, 0xe5, 0x9b, 0xa0, 0xe5, 0xb9, 0xb3, 0xe5, 0x8f, 0xb0, 0xe5, - 0x90, 0x84, 0xe7, 0xa7, 0x8d, 0xe5, 0xa2, 0x9e, 0xe5, 0x8a, 0xa0, 0xe6, 0x9d, - 0x90, 0xe6, 0x96, 0x99, 0xe6, 0x96, 0xb0, 0xe5, 0xa2, 0x9e, 0xe4, 0xb9, 0x8b, - 0xe5, 0x90, 0x8e, 0xe8, 0x81, 0x8c, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0x88, 0xe6, - 0x9e, 0x9c, 0xe4, 0xbb, 0x8a, 0xe5, 0xb9, 0xb4, 0xe8, 0xae, 0xba, 0xe6, 0x96, - 0x87, 0xe6, 0x88, 0x91, 0xe5, 0x9b, 0xbd, 0xe5, 0x91, 0x8a, 0xe8, 0xaf, 0x89, - 0xe7, 0x89, 0x88, 0xe4, 0xb8, 0xbb, 0xe4, 0xbf, 0xae, 0xe6, 0x94, 0xb9, 0xe5, - 0x8f, 0x82, 0xe4, 0xb8, 0x8e, 0xe6, 0x89, 0x93, 0xe5, 0x8d, 0xb0, 0xe5, 0xbf, - 0xab, 0xe4, 0xb9, 0x90, 0xe6, 0x9c, 0xba, 0xe6, 0xa2, 0xb0, 0xe8, 0xa7, 0x82, - 0xe7, 0x82, 0xb9, 0xe5, 0xad, 0x98, 0xe5, 0x9c, 0xa8, 0xe7, 0xb2, 0xbe, 0xe7, - 0xa5, 0x9e, 0xe8, 0x8e, 0xb7, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xa9, 0xe7, 0x94, - 0xa8, 0xe7, 0xbb, 0xa7, 0xe7, 0xbb, 0xad, 0xe4, 0xbd, 0xa0, 0xe4, 0xbb, 0xac, - 0xe8, 0xbf, 0x99, 0xe4, 0xb9, 0x88, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0xe8, - 0xaf, 0xad, 0xe8, 0xa8, 0x80, 0xe8, 0x83, 0xbd, 0xe5, 0xa4, 0x9f, 0xe9, 0x9b, - 0x85, 0xe8, 0x99, 0x8e, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, 0xe9, 0xa3, 0x8e, - 0xe6, 0xa0, 0xbc, 0xe4, 0xb8, 0x80, 0xe8, 0xb5, 0xb7, 0xe7, 0xa7, 0x91, 0xe5, - 0xad, 0xa6, 0xe4, 0xbd, 0x93, 0xe8, 0x82, 0xb2, 0xe7, 0x9f, 0xad, 0xe4, 0xbf, - 0xa1, 0xe6, 0x9d, 0xa1, 0xe4, 0xbb, 0xb6, 0xe6, 0xb2, 0xbb, 0xe7, 0x96, 0x97, - 0xe8, 0xbf, 0x90, 0xe5, 0x8a, 0xa8, 0xe4, 0xba, 0xa7, 0xe4, 0xb8, 0x9a, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xae, 0xe5, 0xaf, 0xbc, 0xe8, 0x88, 0xaa, 0xe5, 0x85, - 0x88, 0xe7, 0x94, 0x9f, 0xe8, 0x81, 0x94, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0xaf, - 0xe6, 0x98, 0xaf, 0xe5, 0x95, 0x8f, 0xe9, 0xa1, 0x8c, 0xe7, 0xbb, 0x93, 0xe6, - 0x9e, 0x84, 0xe4, 0xbd, 0x9c, 0xe7, 0x94, 0xa8, 0xe8, 0xb0, 0x83, 0xe6, 0x9f, - 0xa5, 0xe8, 0xb3, 0x87, 0xe6, 0x96, 0x99, 0xe8, 0x87, 0xaa, 0xe5, 0x8a, 0xa8, - 0xe8, 0xb4, 0x9f, 0xe8, 0xb4, 0xa3, 0xe5, 0x86, 0x9c, 0xe4, 0xb8, 0x9a, 0xe8, - 0xae, 0xbf, 0xe9, 0x97, 0xae, 0xe5, 0xae, 0x9e, 0xe6, 0x96, 0xbd, 0xe6, 0x8e, - 0xa5, 0xe5, 0x8f, 0x97, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe9, 0x82, 0xa3, - 0xe4, 0xb8, 0xaa, 0xe5, 0x8f, 0x8d, 0xe9, 0xa6, 0x88, 0xe5, 0x8a, 0xa0, 0xe5, - 0xbc, 0xba, 0xe5, 0xa5, 0xb3, 0xe6, 0x80, 0xa7, 0xe8, 0x8c, 0x83, 0xe5, 0x9b, - 0xb4, 0xe6, 0x9c, 0x8d, 0xe5, 0x8b, 0x99, 0xe4, 0xbc, 0x91, 0xe9, 0x97, 0xb2, - 0xe4, 0xbb, 0x8a, 0xe6, 0x97, 0xa5, 0xe5, 0xae, 0xa2, 0xe6, 0x9c, 0x8d, 0xe8, - 0xa7, 0x80, 0xe7, 0x9c, 0x8b, 0xe5, 0x8f, 0x82, 0xe5, 0x8a, 0xa0, 0xe7, 0x9a, - 0x84, 0xe8, 0xaf, 0x9d, 0xe4, 0xb8, 0x80, 0xe7, 0x82, 0xb9, 0xe4, 0xbf, 0x9d, - 0xe8, 0xaf, 0x81, 0xe5, 0x9b, 0xbe, 0xe4, 0xb9, 0xa6, 0xe6, 0x9c, 0x89, 0xe6, - 0x95, 0x88, 0xe6, 0xb5, 0x8b, 0xe8, 0xaf, 0x95, 0xe7, 0xa7, 0xbb, 0xe5, 0x8a, - 0xa8, 0xe6, 0x89, 0x8d, 0xe8, 0x83, 0xbd, 0xe5, 0x86, 0xb3, 0xe5, 0xae, 0x9a, - 0xe8, 0x82, 0xa1, 0xe7, 0xa5, 0xa8, 0xe4, 0xb8, 0x8d, 0xe6, 0x96, 0xad, 0xe9, - 0x9c, 0x80, 0xe6, 0xb1, 0x82, 0xe4, 0xb8, 0x8d, 0xe5, 0xbe, 0x97, 0xe5, 0x8a, - 0x9e, 0xe6, 0xb3, 0x95, 0xe4, 0xb9, 0x8b, 0xe9, 0x97, 0xb4, 0xe9, 0x87, 0x87, - 0xe7, 0x94, 0xa8, 0xe8, 0x90, 0xa5, 0xe9, 0x94, 0x80, 0xe6, 0x8a, 0x95, 0xe8, - 0xaf, 0x89, 0xe7, 0x9b, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0x88, 0xb1, 0xe6, 0x83, - 0x85, 0xe6, 0x91, 0x84, 0xe5, 0xbd, 0xb1, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0x9b, - 0xe8, 0xa4, 0x87, 0xe8, 0xa3, 0xbd, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0xa6, 0xe6, - 0x9c, 0xba, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe5, 0xad, 0x97, 0xe8, 0xa3, - 0x85, 0xe4, 0xbf, 0xae, 0xe8, 0xb4, 0xad, 0xe7, 0x89, 0xa9, 0xe5, 0x86, 0x9c, - 0xe6, 0x9d, 0x91, 0xe5, 0x85, 0xa8, 0xe9, 0x9d, 0xa2, 0xe7, 0xb2, 0xbe, 0xe5, - 0x93, 0x81, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x9e, 0xe4, 0xba, 0x8b, 0xe6, 0x83, - 0x85, 0xe6, 0xb0, 0xb4, 0xe5, 0xb9, 0xb3, 0xe6, 0x8f, 0x90, 0xe7, 0xa4, 0xba, - 0xe4, 0xb8, 0x8a, 0xe5, 0xb8, 0x82, 0xe8, 0xb0, 0xa2, 0xe8, 0xb0, 0xa2, 0xe6, - 0x99, 0xae, 0xe9, 0x80, 0x9a, 0xe6, 0x95, 0x99, 0xe5, 0xb8, 0x88, 0xe4, 0xb8, - 0x8a, 0xe4, 0xbc, 0xa0, 0xe7, 0xb1, 0xbb, 0xe5, 0x88, 0xab, 0xe6, 0xad, 0x8c, - 0xe6, 0x9b, 0xb2, 0xe6, 0x8b, 0xa5, 0xe6, 0x9c, 0x89, 0xe5, 0x88, 0x9b, 0xe6, - 0x96, 0xb0, 0xe9, 0x85, 0x8d, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0xaa, 0xe8, 0xa6, - 0x81, 0xe6, 0x97, 0xb6, 0xe4, 0xbb, 0xa3, 0xe8, 0xb3, 0x87, 0xe8, 0xa8, 0x8a, - 0xe8, 0xbe, 0xbe, 0xe5, 0x88, 0xb0, 0xe4, 0xba, 0xba, 0xe7, 0x94, 0x9f, 0xe8, - 0xae, 0xa2, 0xe9, 0x98, 0x85, 0xe8, 0x80, 0x81, 0xe5, 0xb8, 0x88, 0xe5, 0xb1, - 0x95, 0xe7, 0xa4, 0xba, 0xe5, 0xbf, 0x83, 0xe7, 0x90, 0x86, 0xe8, 0xb4, 0xb4, - 0xe5, 0xad, 0x90, 0xe7, 0xb6, 0xb2, 0xe7, 0xab, 0x99, 0xe4, 0xb8, 0xbb, 0xe9, - 0xa1, 0x8c, 0xe8, 0x87, 0xaa, 0xe7, 0x84, 0xb6, 0xe7, 0xba, 0xa7, 0xe5, 0x88, - 0xab, 0xe7, 0xae, 0x80, 0xe5, 0x8d, 0x95, 0xe6, 0x94, 0xb9, 0xe9, 0x9d, 0xa9, - 0xe9, 0x82, 0xa3, 0xe4, 0xba, 0x9b, 0xe6, 0x9d, 0xa5, 0xe8, 0xaf, 0xb4, 0xe6, - 0x89, 0x93, 0xe5, 0xbc, 0x80, 0xe4, 0xbb, 0xa3, 0xe7, 0xa0, 0x81, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0xe8, 0xaf, 0x81, 0xe5, 0x88, 0xb8, 0xe8, 0x8a, 0x82, - 0xe7, 0x9b, 0xae, 0xe9, 0x87, 0x8d, 0xe7, 0x82, 0xb9, 0xe6, 0xac, 0xa1, 0xe6, - 0x95, 0xb8, 0xe5, 0xa4, 0x9a, 0xe5, 0xb0, 0x91, 0xe8, 0xa7, 0x84, 0xe5, 0x88, - 0x92, 0xe8, 0xb5, 0x84, 0xe9, 0x87, 0x91, 0xe6, 0x89, 0xbe, 0xe5, 0x88, 0xb0, - 0xe4, 0xbb, 0xa5, 0xe5, 0x90, 0x8e, 0xe5, 0xa4, 0xa7, 0xe5, 0x85, 0xa8, 0xe4, - 0xb8, 0xbb, 0xe9, 0xa1, 0xb5, 0xe6, 0x9c, 0x80, 0xe4, 0xbd, 0xb3, 0xe5, 0x9b, - 0x9e, 0xe7, 0xad, 0x94, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x9a, 0x9c, 0xe7, 0x8e, 0xb0, 0xe4, 0xbb, 0xa3, 0xe6, 0xa3, 0x80, 0xe6, - 0x9f, 0xa5, 0xe6, 0x8a, 0x95, 0xe7, 0xa5, 0xa8, 0xe5, 0xb0, 0x8f, 0xe6, 0x97, - 0xb6, 0xe6, 0xb2, 0x92, 0xe6, 0x9c, 0x89, 0xe6, 0xad, 0xa3, 0xe5, 0xb8, 0xb8, - 0xe7, 0x94, 0x9a, 0xe8, 0x87, 0xb3, 0xe4, 0xbb, 0xa3, 0xe7, 0x90, 0x86, 0xe7, - 0x9b, 0xae, 0xe5, 0xbd, 0x95, 0xe5, 0x85, 0xac, 0xe5, 0xbc, 0x80, 0xe5, 0xa4, - 0x8d, 0xe5, 0x88, 0xb6, 0xe9, 0x87, 0x91, 0xe8, 0x9e, 0x8d, 0xe5, 0xb9, 0xb8, - 0xe7, 0xa6, 0x8f, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe6, - 0x88, 0x90, 0xe5, 0x87, 0x86, 0xe5, 0xa4, 0x87, 0xe8, 0xa1, 0x8c, 0xe6, 0x83, - 0x85, 0xe5, 0x9b, 0x9e, 0xe5, 0x88, 0xb0, 0xe6, 0x80, 0x9d, 0xe6, 0x83, 0xb3, - 0xe6, 0x80, 0x8e, 0xe6, 0xa0, 0xb7, 0xe5, 0x8d, 0x8f, 0xe8, 0xae, 0xae, 0xe8, - 0xae, 0xa4, 0xe8, 0xaf, 0x81, 0xe6, 0x9c, 0x80, 0xe5, 0xa5, 0xbd, 0xe4, 0xba, - 0xa7, 0xe7, 0x94, 0x9f, 0xe6, 0x8c, 0x89, 0xe7, 0x85, 0xa7, 0xe6, 0x9c, 0x8d, - 0xe8, 0xa3, 0x85, 0xe5, 0xb9, 0xbf, 0xe4, 0xb8, 0x9c, 0xe5, 0x8a, 0xa8, 0xe6, - 0xbc, 0xab, 0xe9, 0x87, 0x87, 0xe8, 0xb4, 0xad, 0xe6, 0x96, 0xb0, 0xe6, 0x89, - 0x8b, 0xe7, 0xbb, 0x84, 0xe5, 0x9b, 0xbe, 0xe9, 0x9d, 0xa2, 0xe6, 0x9d, 0xbf, - 0xe5, 0x8f, 0x82, 0xe8, 0x80, 0x83, 0xe6, 0x94, 0xbf, 0xe6, 0xb2, 0xbb, 0xe5, - 0xae, 0xb9, 0xe6, 0x98, 0x93, 0xe5, 0xa4, 0xa9, 0xe5, 0x9c, 0xb0, 0xe5, 0x8a, - 0xaa, 0xe5, 0x8a, 0x9b, 0xe4, 0xba, 0xba, 0xe4, 0xbb, 0xac, 0xe5, 0x8d, 0x87, - 0xe7, 0xba, 0xa7, 0xe9, 0x80, 0x9f, 0xe5, 0xba, 0xa6, 0xe4, 0xba, 0xba, 0xe7, - 0x89, 0xa9, 0xe8, 0xb0, 0x83, 0xe6, 0x95, 0xb4, 0xe6, 0xb5, 0x81, 0xe8, 0xa1, - 0x8c, 0xe9, 0x80, 0xa0, 0xe6, 0x88, 0x90, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0x97, - 0xe9, 0x9f, 0xa9, 0xe5, 0x9b, 0xbd, 0xe8, 0xb4, 0xb8, 0xe6, 0x98, 0x93, 0xe5, - 0xbc, 0x80, 0xe5, 0xb1, 0x95, 0xe7, 0x9b, 0xb8, 0xe9, 0x97, 0x9c, 0xe8, 0xa1, - 0xa8, 0xe7, 0x8e, 0xb0, 0xe5, 0xbd, 0xb1, 0xe8, 0xa7, 0x86, 0xe5, 0xa6, 0x82, - 0xe6, 0xad, 0xa4, 0xe7, 0xbe, 0x8e, 0xe5, 0xae, 0xb9, 0xe5, 0xa4, 0xa7, 0xe5, - 0xb0, 0x8f, 0xe6, 0x8a, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0x9d, 0xa1, 0xe6, 0xac, - 0xbe, 0xe5, 0xbf, 0x83, 0xe6, 0x83, 0x85, 0xe8, 0xae, 0xb8, 0xe5, 0xa4, 0x9a, - 0xe6, 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0xb6, 0xe5, 0xb1, 0x85, 0xe4, - 0xb9, 0xa6, 0xe5, 0xba, 0x97, 0xe8, 0xbf, 0x9e, 0xe6, 0x8e, 0xa5, 0xe7, 0xab, - 0x8b, 0xe5, 0x8d, 0xb3, 0xe4, 0xb8, 0xbe, 0xe6, 0x8a, 0xa5, 0xe6, 0x8a, 0x80, - 0xe5, 0xb7, 0xa7, 0xe5, 0xa5, 0xa5, 0xe8, 0xbf, 0x90, 0xe7, 0x99, 0xbb, 0xe5, - 0x85, 0xa5, 0xe4, 0xbb, 0xa5, 0xe6, 0x9d, 0xa5, 0xe7, 0x90, 0x86, 0xe8, 0xae, - 0xba, 0xe4, 0xba, 0x8b, 0xe4, 0xbb, 0xb6, 0xe8, 0x87, 0xaa, 0xe7, 0x94, 0xb1, - 0xe4, 0xb8, 0xad, 0xe5, 0x8d, 0x8e, 0xe5, 0x8a, 0x9e, 0xe5, 0x85, 0xac, 0xe5, - 0xa6, 0x88, 0xe5, 0xa6, 0x88, 0xe7, 0x9c, 0x9f, 0xe6, 0xad, 0xa3, 0xe4, 0xb8, - 0x8d, 0xe9, 0x94, 0x99, 0xe5, 0x85, 0xa8, 0xe6, 0x96, 0x87, 0xe5, 0x90, 0x88, - 0xe5, 0x90, 0x8c, 0xe4, 0xbb, 0xb7, 0xe5, 0x80, 0xbc, 0xe5, 0x88, 0xab, 0xe4, - 0xba, 0xba, 0xe7, 0x9b, 0x91, 0xe7, 0x9d, 0xa3, 0xe5, 0x85, 0xb7, 0xe4, 0xbd, - 0x93, 0xe4, 0xb8, 0x96, 0xe7, 0xba, 0xaa, 0xe5, 0x9b, 0xa2, 0xe9, 0x98, 0x9f, - 0xe5, 0x88, 0x9b, 0xe4, 0xb8, 0x9a, 0xe6, 0x89, 0xbf, 0xe6, 0x8b, 0x85, 0xe5, - 0xa2, 0x9e, 0xe9, 0x95, 0xbf, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0xba, 0xe4, 0xbf, - 0x9d, 0xe6, 0x8c, 0x81, 0xe5, 0x95, 0x86, 0xe5, 0xae, 0xb6, 0xe7, 0xbb, 0xb4, - 0xe4, 0xbf, 0xae, 0xe5, 0x8f, 0xb0, 0xe6, 0xb9, 0xbe, 0xe5, 0xb7, 0xa6, 0xe5, - 0x8f, 0xb3, 0xe8, 0x82, 0xa1, 0xe4, 0xbb, 0xbd, 0xe7, 0xad, 0x94, 0xe6, 0xa1, - 0x88, 0xe5, 0xae, 0x9e, 0xe9, 0x99, 0x85, 0xe7, 0x94, 0xb5, 0xe4, 0xbf, 0xa1, - 0xe7, 0xbb, 0x8f, 0xe7, 0x90, 0x86, 0xe7, 0x94, 0x9f, 0xe5, 0x91, 0xbd, 0xe5, - 0xae, 0xa3, 0xe4, 0xbc, 0xa0, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0xe6, 0xad, - 0xa3, 0xe5, 0xbc, 0x8f, 0xe7, 0x89, 0xb9, 0xe8, 0x89, 0xb2, 0xe4, 0xb8, 0x8b, - 0xe6, 0x9d, 0xa5, 0xe5, 0x8d, 0x8f, 0xe4, 0xbc, 0x9a, 0xe5, 0x8f, 0xaa, 0xe8, - 0x83, 0xbd, 0xe5, 0xbd, 0x93, 0xe7, 0x84, 0xb6, 0xe9, 0x87, 0x8d, 0xe6, 0x96, - 0xb0, 0xe5, 0x85, 0xa7, 0xe5, 0xae, 0xb9, 0xe6, 0x8c, 0x87, 0xe5, 0xaf, 0xbc, - 0xe8, 0xbf, 0x90, 0xe8, 0xa1, 0x8c, 0xe6, 0x97, 0xa5, 0xe5, 0xbf, 0x97, 0xe8, - 0xb3, 0xa3, 0xe5, 0xae, 0xb6, 0xe8, 0xb6, 0x85, 0xe8, 0xbf, 0x87, 0xe5, 0x9c, - 0x9f, 0xe5, 0x9c, 0xb0, 0xe6, 0xb5, 0x99, 0xe6, 0xb1, 0x9f, 0xe6, 0x94, 0xaf, - 0xe4, 0xbb, 0x98, 0xe6, 0x8e, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0xab, 0x99, 0xe9, - 0x95, 0xbf, 0xe6, 0x9d, 0xad, 0xe5, 0xb7, 0x9e, 0xe6, 0x89, 0xa7, 0xe8, 0xa1, - 0x8c, 0xe5, 0x88, 0xb6, 0xe9, 0x80, 0xa0, 0xe4, 0xb9, 0x8b, 0xe4, 0xb8, 0x80, - 0xe6, 0x8e, 0xa8, 0xe5, 0xb9, 0xbf, 0xe7, 0x8e, 0xb0, 0xe5, 0x9c, 0xba, 0xe6, - 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0xe5, 0x8f, 0x98, 0xe5, 0x8c, 0x96, 0xe4, 0xbc, - 0xa0, 0xe7, 0xbb, 0x9f, 0xe6, 0xad, 0x8c, 0xe6, 0x89, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x99, 0xa9, 0xe8, 0xaf, 0xbe, 0xe7, 0xa8, 0x8b, 0xe5, 0x8c, 0xbb, 0xe7, - 0x96, 0x97, 0xe7, 0xbb, 0x8f, 0xe8, 0xbf, 0x87, 0xe8, 0xbf, 0x87, 0xe5, 0x8e, - 0xbb, 0xe4, 0xb9, 0x8b, 0xe5, 0x89, 0x8d, 0xe6, 0x94, 0xb6, 0xe5, 0x85, 0xa5, - 0xe5, 0xb9, 0xb4, 0xe5, 0xba, 0xa6, 0xe6, 0x9d, 0x82, 0xe5, 0xbf, 0x97, 0xe7, - 0xbe, 0x8e, 0xe4, 0xb8, 0xbd, 0xe6, 0x9c, 0x80, 0xe9, 0xab, 0x98, 0xe7, 0x99, - 0xbb, 0xe9, 0x99, 0x86, 0xe6, 0x9c, 0xaa, 0xe6, 0x9d, 0xa5, 0xe5, 0x8a, 0xa0, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0x8d, 0xe8, 0xb4, 0xa3, 0xe6, 0x95, 0x99, 0xe7, - 0xa8, 0x8b, 0xe7, 0x89, 0x88, 0xe5, 0x9d, 0x97, 0xe8, 0xba, 0xab, 0xe4, 0xbd, - 0x93, 0xe9, 0x87, 0x8d, 0xe5, 0xba, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x94, 0xae, - 0xe6, 0x88, 0x90, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe5, 0xbc, 0x8f, 0xe5, - 0x9c, 0x9f, 0xe8, 0xb1, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x83, 0xb9, 0xe4, 0xb8, - 0x9c, 0xe6, 0x96, 0xb9, 0xe9, 0x82, 0xae, 0xe7, 0xae, 0xb1, 0xe5, 0x8d, 0x97, - 0xe4, 0xba, 0xac, 0xe6, 0xb1, 0x82, 0xe8, 0x81, 0x8c, 0xe5, 0x8f, 0x96, 0xe5, - 0xbe, 0x97, 0xe8, 0x81, 0x8c, 0xe4, 0xbd, 0x8d, 0xe7, 0x9b, 0xb8, 0xe4, 0xbf, - 0xa1, 0xe9, 0xa1, 0xb5, 0xe9, 0x9d, 0xa2, 0xe5, 0x88, 0x86, 0xe9, 0x92, 0x9f, - 0xe7, 0xbd, 0x91, 0xe9, 0xa1, 0xb5, 0xe7, 0xa1, 0xae, 0xe5, 0xae, 0x9a, 0xe5, - 0x9b, 0xbe, 0xe4, 0xbe, 0x8b, 0xe7, 0xbd, 0x91, 0xe5, 0x9d, 0x80, 0xe7, 0xa7, - 0xaf, 0xe6, 0x9e, 0x81, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe7, 0x9b, 0xae, - 0xe7, 0x9a, 0x84, 0xe5, 0xae, 0x9d, 0xe8, 0xb4, 0x9d, 0xe6, 0x9c, 0xba, 0xe5, - 0x85, 0xb3, 0xe9, 0xa3, 0x8e, 0xe9, 0x99, 0xa9, 0xe6, 0x8e, 0x88, 0xe6, 0x9d, - 0x83, 0xe7, 0x97, 0x85, 0xe6, 0xaf, 0x92, 0xe5, 0xae, 0xa0, 0xe7, 0x89, 0xa9, - 0xe9, 0x99, 0xa4, 0xe4, 0xba, 0x86, 0xe8, 0xa9, 0x95, 0xe8, 0xab, 0x96, 0xe7, - 0x96, 0xbe, 0xe7, 0x97, 0x85, 0xe5, 0x8f, 0x8a, 0xe6, 0x97, 0xb6, 0xe6, 0xb1, - 0x82, 0xe8, 0xb4, 0xad, 0xe7, 0xab, 0x99, 0xe7, 0x82, 0xb9, 0xe5, 0x84, 0xbf, - 0xe7, 0xab, 0xa5, 0xe6, 0xaf, 0x8f, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0xad, 0xe5, - 0xa4, 0xae, 0xe8, 0xae, 0xa4, 0xe8, 0xaf, 0x86, 0xe6, 0xaf, 0x8f, 0xe4, 0xb8, - 0xaa, 0xe5, 0xa4, 0xa9, 0xe6, 0xb4, 0xa5, 0xe5, 0xad, 0x97, 0xe4, 0xbd, 0x93, - 0xe5, 0x8f, 0xb0, 0xe7, 0x81, 0xa3, 0xe7, 0xbb, 0xb4, 0xe6, 0x8a, 0xa4, 0xe6, - 0x9c, 0xac, 0xe9, 0xa1, 0xb5, 0xe4, 0xb8, 0xaa, 0xe6, 0x80, 0xa7, 0xe5, 0xae, - 0x98, 0xe6, 0x96, 0xb9, 0xe5, 0xb8, 0xb8, 0xe8, 0xa7, 0x81, 0xe7, 0x9b, 0xb8, - 0xe6, 0x9c, 0xba, 0xe6, 0x88, 0x98, 0xe7, 0x95, 0xa5, 0xe5, 0xba, 0x94, 0xe5, - 0xbd, 0x93, 0xe5, 0xbe, 0x8b, 0xe5, 0xb8, 0x88, 0xe6, 0x96, 0xb9, 0xe4, 0xbe, - 0xbf, 0xe6, 0xa0, 0xa1, 0xe5, 0x9b, 0xad, 0xe8, 0x82, 0xa1, 0xe5, 0xb8, 0x82, - 0xe6, 0x88, 0xbf, 0xe5, 0xb1, 0x8b, 0xe6, 0xa0, 0x8f, 0xe7, 0x9b, 0xae, 0xe5, - 0x91, 0x98, 0xe5, 0xb7, 0xa5, 0xe5, 0xaf, 0xbc, 0xe8, 0x87, 0xb4, 0xe7, 0xaa, - 0x81, 0xe7, 0x84, 0xb6, 0xe9, 0x81, 0x93, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0xac, - 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x93, 0xe5, 0x90, 0x88, 0xe6, 0xa1, 0xa3, 0xe6, - 0xa1, 0x88, 0xe5, 0x8a, 0xb3, 0xe5, 0x8a, 0xa8, 0xe5, 0x8f, 0xa6, 0xe5, 0xa4, - 0x96, 0xe7, 0xbe, 0x8e, 0xe5, 0x85, 0x83, 0xe5, 0xbc, 0x95, 0xe8, 0xb5, 0xb7, - 0xe6, 0x94, 0xb9, 0xe5, 0x8f, 0x98, 0xe7, 0xac, 0xac, 0xe5, 0x9b, 0x9b, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xa1, 0xe8, 0xaa, 0xaa, 0xe6, 0x98, 0x8e, 0xe9, 0x9a, - 0x90, 0xe7, 0xa7, 0x81, 0xe5, 0xae, 0x9d, 0xe5, 0xae, 0x9d, 0xe8, 0xa7, 0x84, - 0xe8, 0x8c, 0x83, 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe5, 0x85, 0xb1, 0xe5, - 0x90, 0x8c, 0xe5, 0xbf, 0x98, 0xe8, 0xae, 0xb0, 0xe4, 0xbd, 0x93, 0xe7, 0xb3, - 0xbb, 0xe5, 0xb8, 0xa6, 0xe6, 0x9d, 0xa5, 0xe5, 0x90, 0x8d, 0xe5, 0xad, 0x97, - 0xe7, 0x99, 0xbc, 0xe8, 0xa1, 0xa8, 0xe5, 0xbc, 0x80, 0xe6, 0x94, 0xbe, 0xe5, - 0x8a, 0xa0, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0x97, 0xe5, 0x88, 0xb0, 0xe4, 0xba, - 0x8c, 0xe6, 0x89, 0x8b, 0xe5, 0xa4, 0xa7, 0xe9, 0x87, 0x8f, 0xe6, 0x88, 0x90, - 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, 0xe5, 0x85, 0xb1, 0xe4, - 0xba, 0xab, 0xe5, 0x8c, 0xba, 0xe5, 0x9f, 0x9f, 0xe5, 0xa5, 0xb3, 0xe5, 0xad, - 0xa9, 0xe5, 0x8e, 0x9f, 0xe5, 0x88, 0x99, 0xe6, 0x89, 0x80, 0xe5, 0x9c, 0xa8, - 0xe7, 0xbb, 0x93, 0xe6, 0x9d, 0x9f, 0xe9, 0x80, 0x9a, 0xe4, 0xbf, 0xa1, 0xe8, - 0xb6, 0x85, 0xe7, 0xba, 0xa7, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe5, 0xbd, - 0x93, 0xe6, 0x97, 0xb6, 0xe4, 0xbc, 0x98, 0xe7, 0xa7, 0x80, 0xe6, 0x80, 0xa7, - 0xe6, 0x84, 0x9f, 0xe6, 0x88, 0xbf, 0xe4, 0xba, 0xa7, 0xe9, 0x81, 0x8a, 0xe6, - 0x88, 0xb2, 0xe5, 0x87, 0xba, 0xe5, 0x8f, 0xa3, 0xe6, 0x8f, 0x90, 0xe4, 0xba, - 0xa4, 0xe5, 0xb0, 0xb1, 0xe4, 0xb8, 0x9a, 0xe4, 0xbf, 0x9d, 0xe5, 0x81, 0xa5, - 0xe7, 0xa8, 0x8b, 0xe5, 0xba, 0xa6, 0xe5, 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0xe4, - 0xba, 0x8b, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0xb4, 0xe4, 0xb8, 0xaa, 0xe5, 0xb1, - 0xb1, 0xe4, 0xb8, 0x9c, 0xe6, 0x83, 0x85, 0xe6, 0x84, 0x9f, 0xe7, 0x89, 0xb9, - 0xe6, 0xae, 0x8a, 0xe5, 0x88, 0x86, 0xe9, 0xa1, 0x9e, 0xe6, 0x90, 0x9c, 0xe5, - 0xb0, 0x8b, 0xe5, 0xb1, 0x9e, 0xe4, 0xba, 0x8e, 0xe9, 0x97, 0xa8, 0xe6, 0x88, - 0xb7, 0xe8, 0xb4, 0xa2, 0xe5, 0x8a, 0xa1, 0xe5, 0xa3, 0xb0, 0xe9, 0x9f, 0xb3, - 0xe5, 0x8f, 0x8a, 0xe5, 0x85, 0xb6, 0xe8, 0xb4, 0xa2, 0xe7, 0xbb, 0x8f, 0xe5, - 0x9d, 0x9a, 0xe6, 0x8c, 0x81, 0xe5, 0xb9, 0xb2, 0xe9, 0x83, 0xa8, 0xe6, 0x88, - 0x90, 0xe7, 0xab, 0x8b, 0xe5, 0x88, 0xa9, 0xe7, 0x9b, 0x8a, 0xe8, 0x80, 0x83, - 0xe8, 0x99, 0x91, 0xe6, 0x88, 0x90, 0xe9, 0x83, 0xbd, 0xe5, 0x8c, 0x85, 0xe8, - 0xa3, 0x85, 0xe7, 0x94, 0xa8, 0xe6, 0x88, 0xb6, 0xe6, 0xaf, 0x94, 0xe8, 0xb5, - 0x9b, 0xe6, 0x96, 0x87, 0xe6, 0x98, 0x8e, 0xe6, 0x8b, 0x9b, 0xe5, 0x95, 0x86, - 0xe5, 0xae, 0x8c, 0xe6, 0x95, 0xb4, 0xe7, 0x9c, 0x9f, 0xe6, 0x98, 0xaf, 0xe7, - 0x9c, 0xbc, 0xe7, 0x9d, 0x9b, 0xe4, 0xbc, 0x99, 0xe4, 0xbc, 0xb4, 0xe5, 0xa8, - 0x81, 0xe6, 0x9c, 0x9b, 0xe9, 0xa2, 0x86, 0xe5, 0x9f, 0x9f, 0xe5, 0x8d, 0xab, - 0xe7, 0x94, 0x9f, 0xe4, 0xbc, 0x98, 0xe6, 0x83, 0xa0, 0xe8, 0xab, 0x96, 0xe5, - 0xa3, 0x87, 0xe5, 0x85, 0xac, 0xe5, 0x85, 0xb1, 0xe8, 0x89, 0xaf, 0xe5, 0xa5, - 0xbd, 0xe5, 0x85, 0x85, 0xe5, 0x88, 0x86, 0xe7, 0xac, 0xa6, 0xe5, 0x90, 0x88, - 0xe9, 0x99, 0x84, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0xb9, 0xe7, 0x82, 0xb9, 0xe4, - 0xb8, 0x8d, 0xe5, 0x8f, 0xaf, 0xe8, 0x8b, 0xb1, 0xe6, 0x96, 0x87, 0xe8, 0xb5, - 0x84, 0xe4, 0xba, 0xa7, 0xe6, 0xa0, 0xb9, 0xe6, 0x9c, 0xac, 0xe6, 0x98, 0x8e, - 0xe6, 0x98, 0xbe, 0xe5, 0xaf, 0x86, 0xe7, 0xa2, 0xbc, 0xe5, 0x85, 0xac, 0xe4, - 0xbc, 0x97, 0xe6, 0xb0, 0x91, 0xe6, 0x97, 0x8f, 0xe6, 0x9b, 0xb4, 0xe5, 0x8a, - 0xa0, 0xe4, 0xba, 0xab, 0xe5, 0x8f, 0x97, 0xe5, 0x90, 0x8c, 0xe5, 0xad, 0xa6, - 0xe5, 0x90, 0xaf, 0xe5, 0x8a, 0xa8, 0xe9, 0x80, 0x82, 0xe5, 0x90, 0x88, 0xe5, - 0x8e, 0x9f, 0xe6, 0x9d, 0xa5, 0xe9, 0x97, 0xae, 0xe7, 0xad, 0x94, 0xe6, 0x9c, - 0xac, 0xe6, 0x96, 0x87, 0xe7, 0xbe, 0x8e, 0xe9, 0xa3, 0x9f, 0xe7, 0xbb, 0xbf, - 0xe8, 0x89, 0xb2, 0xe7, 0xa8, 0xb3, 0xe5, 0xae, 0x9a, 0xe7, 0xbb, 0x88, 0xe4, - 0xba, 0x8e, 0xe7, 0x94, 0x9f, 0xe7, 0x89, 0xa9, 0xe4, 0xbe, 0x9b, 0xe6, 0xb1, - 0x82, 0xe6, 0x90, 0x9c, 0xe7, 0x8b, 0x90, 0xe5, 0x8a, 0x9b, 0xe9, 0x87, 0x8f, - 0xe4, 0xb8, 0xa5, 0xe9, 0x87, 0x8d, 0xe6, 0xb0, 0xb8, 0xe8, 0xbf, 0x9c, 0xe5, - 0x86, 0x99, 0xe7, 0x9c, 0x9f, 0xe6, 0x9c, 0x89, 0xe9, 0x99, 0x90, 0xe7, 0xab, - 0x9e, 0xe4, 0xba, 0x89, 0xe5, 0xaf, 0xb9, 0xe8, 0xb1, 0xa1, 0xe8, 0xb4, 0xb9, - 0xe7, 0x94, 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0xa5, 0xbd, 0xe7, 0xbb, 0x9d, 0xe5, - 0xaf, 0xb9, 0xe5, 0x8d, 0x81, 0xe5, 0x88, 0x86, 0xe4, 0xbf, 0x83, 0xe8, 0xbf, - 0x9b, 0xe7, 0x82, 0xb9, 0xe8, 0xaf, 0x84, 0xe5, 0xbd, 0xb1, 0xe9, 0x9f, 0xb3, - 0xe4, 0xbc, 0x98, 0xe5, 0x8a, 0xbf, 0xe4, 0xb8, 0x8d, 0xe5, 0xb0, 0x91, 0xe6, - 0xac, 0xa3, 0xe8, 0xb5, 0x8f, 0xe5, 0xb9, 0xb6, 0xe4, 0xb8, 0x94, 0xe6, 0x9c, - 0x89, 0xe7, 0x82, 0xb9, 0xe6, 0x96, 0xb9, 0xe5, 0x90, 0x91, 0xe5, 0x85, 0xa8, - 0xe6, 0x96, 0xb0, 0xe4, 0xbf, 0xa1, 0xe7, 0x94, 0xa8, 0xe8, 0xae, 0xbe, 0xe6, - 0x96, 0xbd, 0xe5, 0xbd, 0xa2, 0xe8, 0xb1, 0xa1, 0xe8, 0xb5, 0x84, 0xe6, 0xa0, - 0xbc, 0xe7, 0xaa, 0x81, 0xe7, 0xa0, 0xb4, 0xe9, 0x9a, 0x8f, 0xe7, 0x9d, 0x80, - 0xe9, 0x87, 0x8d, 0xe5, 0xa4, 0xa7, 0xe4, 0xba, 0x8e, 0xe6, 0x98, 0xaf, 0xe6, - 0xaf, 0x95, 0xe4, 0xb8, 0x9a, 0xe6, 0x99, 0xba, 0xe8, 0x83, 0xbd, 0xe5, 0x8c, - 0x96, 0xe5, 0xb7, 0xa5, 0xe5, 0xae, 0x8c, 0xe7, 0xbe, 0x8e, 0xe5, 0x95, 0x86, - 0xe5, 0x9f, 0x8e, 0xe7, 0xbb, 0x9f, 0xe4, 0xb8, 0x80, 0xe5, 0x87, 0xba, 0xe7, - 0x89, 0x88, 0xe6, 0x89, 0x93, 0xe9, 0x80, 0xa0, 0xe7, 0x94, 0xa2, 0xe5, 0x93, - 0x81, 0xe6, 0xa6, 0x82, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, - 0xe4, 0xbf, 0x9d, 0xe7, 0x95, 0x99, 0xe5, 0x9b, 0xa0, 0xe7, 0xb4, 0xa0, 0xe4, - 0xb8, 0xad, 0xe5, 0x9c, 0x8b, 0xe5, 0xad, 0x98, 0xe5, 0x82, 0xa8, 0xe8, 0xb4, - 0xb4, 0xe5, 0x9b, 0xbe, 0xe6, 0x9c, 0x80, 0xe6, 0x84, 0x9b, 0xe9, 0x95, 0xbf, - 0xe6, 0x9c, 0x9f, 0xe5, 0x8f, 0xa3, 0xe4, 0xbb, 0xb7, 0xe7, 0x90, 0x86, 0xe8, - 0xb4, 0xa2, 0xe5, 0x9f, 0xba, 0xe5, 0x9c, 0xb0, 0xe5, 0xae, 0x89, 0xe6, 0x8e, - 0x92, 0xe6, 0xad, 0xa6, 0xe6, 0xb1, 0x89, 0xe9, 0x87, 0x8c, 0xe9, 0x9d, 0xa2, - 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe5, 0xa4, 0xa9, 0xe7, 0xa9, 0xba, 0xe9, - 0xa6, 0x96, 0xe5, 0x85, 0x88, 0xe5, 0xae, 0x8c, 0xe5, 0x96, 0x84, 0xe9, 0xa9, - 0xb1, 0xe5, 0x8a, 0xa8, 0xe4, 0xb8, 0x8b, 0xe9, 0x9d, 0xa2, 0xe4, 0xb8, 0x8d, - 0xe5, 0x86, 0x8d, 0xe8, 0xaf, 0x9a, 0xe4, 0xbf, 0xa1, 0xe6, 0x84, 0x8f, 0xe4, - 0xb9, 0x89, 0xe9, 0x98, 0xb3, 0xe5, 0x85, 0x89, 0xe8, 0x8b, 0xb1, 0xe5, 0x9b, - 0xbd, 0xe6, 0xbc, 0x82, 0xe4, 0xba, 0xae, 0xe5, 0x86, 0x9b, 0xe4, 0xba, 0x8b, - 0xe7, 0x8e, 0xa9, 0xe5, 0xae, 0xb6, 0xe7, 0xbe, 0xa4, 0xe4, 0xbc, 0x97, 0xe5, - 0x86, 0x9c, 0xe6, 0xb0, 0x91, 0xe5, 0x8d, 0xb3, 0xe5, 0x8f, 0xaf, 0xe5, 0x90, - 0x8d, 0xe7, 0xa8, 0xb1, 0xe5, 0xae, 0xb6, 0xe5, 0x85, 0xb7, 0xe5, 0x8a, 0xa8, - 0xe7, 0x94, 0xbb, 0xe6, 0x83, 0xb3, 0xe5, 0x88, 0xb0, 0xe6, 0xb3, 0xa8, 0xe6, - 0x98, 0x8e, 0xe5, 0xb0, 0x8f, 0xe5, 0xad, 0xa6, 0xe6, 0x80, 0xa7, 0xe8, 0x83, - 0xbd, 0xe8, 0x80, 0x83, 0xe7, 0xa0, 0x94, 0xe7, 0xa1, 0xac, 0xe4, 0xbb, 0xb6, - 0xe8, 0xa7, 0x82, 0xe7, 0x9c, 0x8b, 0xe6, 0xb8, 0x85, 0xe6, 0xa5, 0x9a, 0xe6, - 0x90, 0x9e, 0xe7, 0xac, 0x91, 0xe9, 0xa6, 0x96, 0xe9, 0xa0, 0x81, 0xe9, 0xbb, - 0x84, 0xe9, 0x87, 0x91, 0xe9, 0x80, 0x82, 0xe7, 0x94, 0xa8, 0xe6, 0xb1, 0x9f, - 0xe8, 0x8b, 0x8f, 0xe7, 0x9c, 0x9f, 0xe5, 0xae, 0x9e, 0xe4, 0xb8, 0xbb, 0xe7, - 0xae, 0xa1, 0xe9, 0x98, 0xb6, 0xe6, 0xae, 0xb5, 0xe8, 0xa8, 0xbb, 0xe5, 0x86, - 0x8a, 0xe7, 0xbf, 0xbb, 0xe8, 0xaf, 0x91, 0xe6, 0x9d, 0x83, 0xe5, 0x88, 0xa9, - 0xe5, 0x81, 0x9a, 0xe5, 0xa5, 0xbd, 0xe4, 0xbc, 0xbc, 0xe4, 0xb9, 0x8e, 0xe9, - 0x80, 0x9a, 0xe8, 0xae, 0xaf, 0xe6, 0x96, 0xbd, 0xe5, 0xb7, 0xa5, 0xe7, 0x8b, - 0x80, 0xe6, 0x85, 0x8b, 0xe4, 0xb9, 0x9f, 0xe8, 0xae, 0xb8, 0xe7, 0x8e, 0xaf, - 0xe4, 0xbf, 0x9d, 0xe5, 0x9f, 0xb9, 0xe5, 0x85, 0xbb, 0xe6, 0xa6, 0x82, 0xe5, - 0xbf, 0xb5, 0xe5, 0xa4, 0xa7, 0xe5, 0x9e, 0x8b, 0xe6, 0x9c, 0xba, 0xe7, 0xa5, - 0xa8, 0xe7, 0x90, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, 0x8c, 0xbf, 0xe5, 0x90, 0x8d, - 0x63, 0x75, 0x61, 0x6e, 0x64, 0x6f, 0x65, 0x6e, 0x76, 0x69, 0x61, 0x72, 0x6d, - 0x61, 0x64, 0x72, 0x69, 0x64, 0x62, 0x75, 0x73, 0x63, 0x61, 0x72, 0x69, 0x6e, - 0x69, 0x63, 0x69, 0x6f, 0x74, 0x69, 0x65, 0x6d, 0x70, 0x6f, 0x70, 0x6f, 0x72, - 0x71, 0x75, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x64, 0x6f, 0x70, 0x75, 0x65, 0x64, 0x65, 0x6e, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x6e, - 0x6e, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x6e, 0x70, - 0x65, 0x72, 0x66, 0x69, 0x6c, 0x6d, 0x61, 0x6e, 0x65, 0x72, 0x61, 0x61, 0x6d, - 0x69, 0x67, 0x6f, 0x73, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, 0x63, 0x65, 0x6e, - 0x74, 0x72, 0x6f, 0x61, 0x75, 0x6e, 0x71, 0x75, 0x65, 0x70, 0x75, 0x65, 0x64, - 0x65, 0x73, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, 0x65, 0x67, 0xc3, 0xba, 0x6e, - 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x73, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x70, - 0x75, 0x6e, 0x74, 0x6f, 0x73, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x68, 0x61, - 0x62, 0xc3, 0xad, 0x61, 0x61, 0x67, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x75, 0x65, - 0x76, 0x6f, 0x73, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x63, 0x61, 0x72, 0x6c, - 0x6f, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6f, 0x6e, 0x69, 0xc3, 0xb1, 0x6f, - 0x73, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x72, 0x61, 0x72, 0x72, 0x69, 0x62, 0x61, 0x6d, 0x61, - 0x72, 0xc3, 0xad, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x6d, 0x70, - 0x6c, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x64, 0x61, 0x64, 0x63, 0x61, 0x6d, 0x62, - 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x66, 0x75, 0x65, 0x72, 0x6f, - 0x6e, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, 0x6c, 0xc3, 0xad, 0x6e, 0x65, 0x61, - 0x70, 0x61, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, 0x61, 0x71, 0x75, - 0x69, 0x65, 0x72, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x6f, 0x73, 0x63, 0x75, 0x61, - 0x6e, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x6f, 0x6d, 0x69, 0x67, 0x75, - 0x65, 0x6c, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x63, 0x75, 0x61, 0x74, 0x72, - 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x67, 0x72, 0x75, 0x70, 0x6f, 0x73, - 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x61, 0x6d, - 0x65, 0x64, 0x69, 0x6f, 0x73, 0x66, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, - 0x65, 0x72, 0x63, 0x61, 0x64, 0x65, 0x6d, 0xc3, 0xa1, 0x73, 0x6f, 0x66, 0x65, - 0x72, 0x74, 0x61, 0x63, 0x6f, 0x63, 0x68, 0x65, 0x73, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x6f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6c, 0x65, 0x74, 0x72, 0x61, - 0x73, 0x61, 0x6c, 0x67, 0xc3, 0xba, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x61, - 0x63, 0x75, 0x61, 0x6c, 0x65, 0x73, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x63, - 0x75, 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x70, 0x72, - 0x65, 0x6e, 0x73, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x76, 0x69, 0x61, - 0x6a, 0x65, 0x73, 0x64, 0x69, 0x6e, 0x65, 0x72, 0x6f, 0x6d, 0x75, 0x72, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xa1, 0x70, 0x75, 0x65, 0x73, 0x74, - 0x6f, 0x64, 0x69, 0x61, 0x72, 0x69, 0x6f, 0x70, 0x75, 0x65, 0x62, 0x6c, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x6e, 0x75, 0x65, 0x6c, 0x70, - 0x72, 0x6f, 0x70, 0x69, 0x6f, 0x63, 0x72, 0x69, 0x73, 0x69, 0x73, 0x63, 0x69, - 0x65, 0x72, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, 0x72, 0x6f, 0x6d, 0x75, 0x65, - 0x72, 0x74, 0x65, 0x66, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x63, 0x65, 0x72, 0x72, - 0x61, 0x72, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x65, 0x65, 0x66, 0x65, 0x63, 0x74, - 0x6f, 0x70, 0x61, 0x72, 0x74, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x64, 0x61, - 0x70, 0x72, 0x6f, 0x70, 0x69, 0x61, 0x6f, 0x66, 0x72, 0x65, 0x63, 0x65, 0x74, - 0x69, 0x65, 0x72, 0x72, 0x61, 0x65, 0x2d, 0x6d, 0x61, 0x69, 0x6c, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x73, 0x66, 0x75, 0x74, - 0x75, 0x72, 0x6f, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, - 0x69, 0x72, 0x72, 0x69, 0x65, 0x73, 0x67, 0x6f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x73, 0x6d, 0x69, 0x73, 0x6d, 0x6f, 0x73, 0xc3, 0xba, 0x6e, 0x69, 0x63, 0x6f, - 0x63, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x73, 0x72, - 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x62, 0x69, 0x64, 0x6f, 0x70, 0x72, - 0x75, 0x65, 0x62, 0x61, 0x74, 0x6f, 0x6c, 0x65, 0x64, 0x6f, 0x74, 0x65, 0x6e, - 0xc3, 0xad, 0x61, 0x6a, 0x65, 0x73, 0xc3, 0xba, 0x73, 0x65, 0x73, 0x70, 0x65, - 0x72, 0x6f, 0x63, 0x6f, 0x63, 0x69, 0x6e, 0x61, 0x6f, 0x72, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x63, 0xc3, 0xa1, 0x64, 0x69, 0x7a, 0x68, 0x61, 0x62, 0x6c, 0x61, 0x72, 0x73, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x61, 0x66, 0x75, - 0x65, 0x72, 0x7a, 0x61, 0x65, 0x73, 0x74, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x72, 0x72, 0x61, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x72, 0xc3, 0xa9, 0x78, 0x69, - 0x74, 0x6f, 0x6c, 0xc3, 0xb3, 0x70, 0x65, 0x7a, 0x61, 0x67, 0x65, 0x6e, 0x64, - 0x61, 0x76, 0xc3, 0xad, 0x64, 0x65, 0x6f, 0x65, 0x76, 0x69, 0x74, 0x61, 0x72, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x73, 0x6a, - 0x61, 0x76, 0x69, 0x65, 0x72, 0x70, 0x61, 0x64, 0x72, 0x65, 0x73, 0x66, 0xc3, - 0xa1, 0x63, 0x69, 0x6c, 0x63, 0x61, 0x62, 0x65, 0x7a, 0x61, 0xc3, 0xa1, 0x72, - 0x65, 0x61, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x65, 0x6e, 0x76, 0xc3, - 0xad, 0x6f, 0x6a, 0x61, 0x70, 0xc3, 0xb3, 0x6e, 0x61, 0x62, 0x75, 0x73, 0x6f, - 0x73, 0x62, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x6f, 0x73, - 0x6c, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x70, 0x75, 0x65, 0x64, 0x61, 0x6e, 0x66, - 0x75, 0x65, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0xc3, 0xba, 0x6e, 0x63, 0x6c, - 0x61, 0x73, 0x65, 0x73, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x6f, 0x74, 0x65, 0x6e, - 0x69, 0x64, 0x6f, 0x62, 0x69, 0x6c, 0x62, 0x61, 0x6f, 0x75, 0x6e, 0x69, 0x64, - 0x61, 0x64, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x73, 0x65, 0x64, 0x69, 0x74, 0x61, - 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6f, 0xd0, 0xb4, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb8, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, 0x89, - 0xd0, 0xb5, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0x9a, 0xd0, 0xb0, 0xd0, - 0xba, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, - 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0x92, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xad, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0x94, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd0, 0x9f, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xba, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd1, 0x82, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xa1, 0xd0, 0xa8, - 0xd0, 0x90, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xa7, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xa2, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb4, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x8d, - 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0x92, 0xd0, - 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, - 0xb4, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0x92, 0xd0, 0xbe, 0xd1, 0x82, - 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, - 0x92, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xb1, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0x9e, 0xd0, 0x9e, 0xd0, - 0x9e, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb4, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x83, 0xd0, 0xb4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x94, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0x6a, 0x61, 0x67, 0x72, 0x61, 0x6e, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0x98, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x93, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x80, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa5, 0xd9, - 0x84, 0xd9, 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd8, 0xa7, 0xd8, 0xa2, 0xd8, 0xae, - 0xd8, 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, - 0xd8, 0xba, 0xd9, 0x8a, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xb0, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x87, 0xd9, - 0x86, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xad, 0xd8, 0xaa, 0xd9, 0x89, - 0xd9, 0x82, 0xd8, 0xa8, 0xd9, 0x84, 0xd9, 0x88, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb9, - 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xa5, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xad, - 0xd8, 0xaf, 0xd8, 0xa5, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, - 0x87, 0xd8, 0xa8, 0xd8, 0xb9, 0xd8, 0xb6, 0xd9, 0x83, 0xd9, 0x8a, 0xd9, 0x81, - 0xd8, 0xa8, 0xd8, 0xad, 0xd8, 0xab, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x87, 0xd9, 0x88, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xb5, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb0, 0xd8, 0xa8, 0xd9, 0x87, 0xd8, 0xa7, - 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xab, 0xd9, 0x84, 0xd9, - 0x83, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xab, 0xd9, 0x85, 0xd8, 0xb5, 0xd8, 0xb1, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd8, 0xad, 0xd8, 0xad, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x81, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa3, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, - 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, - 0xb6, 0xd9, 0x88, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xae, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, - 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xa1, - 0xd9, 0x88, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x82, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x86, 0xd8, - 0xad, 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, - 0xa8, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa8, - 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaa, 0xd8, - 0xac, 0xd9, 0x87, 0xd8, 0xa9, 0xd8, 0xb3, 0xd9, 0x86, 0xd8, 0xa9, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xba, 0xd8, - 0xb2, 0xd8, 0xa9, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd8, 0xa8, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x86, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x87, 0xd8, - 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa1, 0xd9, 0x86, - 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, - 0x8a, 0xd9, 0x83, 0xd8, 0xa8, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xb0, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa8, 0xd8, 0xa3, 0xd9, - 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x83, - 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, - 0xad, 0xd8, 0xb3, 0xd9, 0x86, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x87, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb1, 0xd8, 0xb7, 0xd9, 0x84, - 0xd8, 0xa8, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x68, 0x69, 0x6d, - 0x73, 0x65, 0x6c, 0x66, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x61, 0x73, 0x68, 0x69, 0x6f, - 0x6e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x64, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x63, 0x79, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x6d, 0x69, 0x6c, - 0x6c, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x76, - 0x69, 0x73, 0x69, 0x74, 0x65, 0x64, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x6e, - 0x65, 0x72, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x65, 0x72, 0x66, - 0x65, 0x63, 0x74, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x73, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x75, - 0x6c, 0x74, 0x75, 0x72, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x70, - 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x67, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x69, 0x73, - 0x68, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x79, 0x64, 0x65, 0x63, 0x6c, 0x69, - 0x6e, 0x65, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x71, 0x75, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, - 0x70, 0x75, 0x74, 0x65, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x65, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x6d, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, - 0x63, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x76, 0x69, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x73, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x69, - 0x6e, 0x67, 0x67, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6f, 0x62, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, - 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x61, - 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x75, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x44, 0x69, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x57, 0x65, - 0x62, 0x73, 0x69, 0x74, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, - 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x64, 0x65, 0x63, 0x61, 0x64, 0x65, - 0x73, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x20, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x67, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x6e, 0x6f, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x63, - 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x3d, 0x31, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, - 0x6e, 0x65, 0x77, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x74, 0x6f, 0x6f, 0x6c, 0x62, - 0x61, 0x72, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x65, 0x75, - 0x74, 0x73, 0x63, 0x68, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x77, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x65, 0x61, 0x73, - 0x65, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x77, 0x65, 0x61, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x65, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x6f, 0x75, - 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, - 0x22, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x49, 0x74, 0x61, 0x6c, - 0x69, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x68, 0x65, 0x61, - 0x76, 0x69, 0x6c, 0x79, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x2d, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x64, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x62, 0x69, 0x6c, 0x6c, 0x69, - 0x6f, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x47, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x66, - 0x6f, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, - 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x41, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x79, 0x73, 0x69, 0x64, 0x65, - 0x62, 0x61, 0x72, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x68, 0x6f, 0x6c, - 0x69, 0x64, 0x61, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x70, 0x61, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x66, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, - 0x61, 0x72, 0x72, 0x69, 0x76, 0x65, 0x64, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x6f, 0x75, 0x67, 0x68, - 0x6c, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x6e, 0x6f, 0x74, 0x64, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x42, 0x72, 0x69, - 0x74, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x6c, 0x61, - 0x63, 0x6b, 0x20, 0x6f, 0x66, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, - 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, - 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x68, 0x75, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x63, 0x74, 0x61, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x43, 0x68, 0x61, - 0x72, 0x6c, 0x65, 0x73, 0x72, 0x61, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x74, 0x66, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x75, 0x6d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x2d, 0x6d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x77, 0x61, 0x6e, 0x74, - 0x20, 0x74, 0x6f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x46, 0x69, 0x72, - 0x65, 0x66, 0x6f, 0x78, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x64, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x72, 0x61, 0x70, 0x69, 0x64, 0x6c, 0x79, 0x63, 0x6c, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x65, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x65, 0x64, 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x75, 0x6c, 0x61, 0x64, 0x79, 0x6e, 0x61, 0x73, 0x74, 0x79, 0x68, 0x6f, - 0x77, 0x20, 0x74, 0x6f, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x6f, 0x6c, 0x64, 0x69, 0x65, 0x72, 0x6c, 0x61, 0x72, 0x67, 0x65, - 0x6c, 0x79, 0x63, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x64, 0x77, - 0x61, 0x72, 0x64, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, - 0x62, 0x65, 0x72, 0x74, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x50, - 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, - 0x75, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x41, 0x6e, 0x67, 0x65, 0x6c, - 0x65, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x61, 0x63, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x62, 0x69, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x64, 0x72, 0x69, 0x76, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x6d, 0x6f, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x75, 0x64, 0x65, 0x6e, - 0x74, 0x73, 0x6f, 0x6d, 0x65, 0x6f, 0x6e, 0x65, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x3a, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x61, 0x6c, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, 0x65, 0x6e, - 0x67, 0x6c, 0x69, 0x73, 0x68, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x20, - 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x67, 0x61, 0x69, 0x6e, - 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0d, 0x0a, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x72, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x27, 0x27, 0x54, 0x68, 0x65, - 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x47, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x79, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x65, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x72, 0x65, 0x65, 0x72, 0x73, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, - 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x69, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6e, - 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, - 0x67, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x63, 0x61, 0x75, 0x73, - 0x69, 0x6e, 0x67, 0x2d, 0x77, 0x65, 0x62, 0x6b, 0x69, 0x74, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x64, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x65, 0x63, 0x68, - 0x61, 0x70, 0x74, 0x65, 0x72, 0x76, 0x69, 0x63, 0x74, 0x69, 0x6d, 0x73, 0x54, - 0x68, 0x6f, 0x6d, 0x61, 0x73, 0x20, 0x6d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, 0x61, - 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x68, 0x75, 0x6e, 0x64, - 0x72, 0x65, 0x64, 0x4f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x5f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x72, 0x65, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x64, - 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x65, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6c, 0x79, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x77, - 0x6f, 0x72, 0x73, 0x68, 0x69, 0x70, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x43, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, - 0x61, 0x72, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x42, 0x72, - 0x6f, 0x77, 0x73, 0x65, 0x72, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x6c, 0x7d, - 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, - 0x3b, 0x46, 0x6c, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6d, 0x70, 0x65, - 0x72, 0x6f, 0x72, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x65, 0x72, - 0x69, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x53, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x46, - 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x21, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x44, 0x65, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x76, 0x6f, 0x69, 0x64, 0x28, - 0x30, 0x29, 0x2f, 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x73, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, - 0x70, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x4d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x0a, 0x0a, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x73, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x65, 0x64, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x66, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x6d, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x6f, - 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, - 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, - 0x65, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x65, 0x20, 0x42, 0x65, 0x6c, 0x67, 0x69, - 0x75, 0x6d, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x3e, 0x74, 0x77, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x61, 0x72, 0x66, 0x61, 0x72, 0x65, 0x20, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, - 0x72, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x6c, 0x6f, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x61, 0x73, 0x47, 0x65, 0x6f, - 0x72, 0x67, 0x69, 0x61, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x61, 0x72, 0x72, 0x69, - 0x65, 0x64, 0x31, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x3c, 0x2f, 0x68, 0x33, - 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x77, 0x65, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x30, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x6d, - 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x79, - 0x20, 0x62, 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, - 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x6f, 0x66, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x70, 0x6c, 0x75, - 0x73, 0x6f, 0x6e, 0x65, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x28, 0x74, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x44, 0x6f, 0x75, 0x67, 0x6c, 0x61, 0x73, 0x6a, - 0x6f, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x41, 0x6e, 0x63, 0x69, 0x65, 0x6e, - 0x74, 0x56, 0x69, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x76, 0x65, 0x68, 0x69, 0x63, - 0x6c, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x63, 0x72, 0x79, 0x73, - 0x74, 0x61, 0x6c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x73, 0x65, 0x6e, 0x6a, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x20, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x3c, - 0x61, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, - 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, - 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x74, 0x69, 0x72, - 0x65, 0x64, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x3b, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x65, - 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x77, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x20, 0x61, 0x74, 0x63, - 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x61, 0x3a, 0x68, 0x6f, 0x76, - 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x72, 0x65, 0x6e, - 0x63, 0x68, 0x20, 0x6c, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, - 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x6e, - 0x65, 0x6d, 0x69, 0x65, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x64, - 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x2d, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x3a, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x66, 0x69, 0x72, 0x73, 0x74, 0x22, 0x3e, 0x63, - 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x69, 0x6e, 0x6c, 0x61, 0x6e, 0x64, - 0x63, 0x68, 0x65, 0x6d, 0x69, 0x73, 0x74, 0x73, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x73, 0x20, 0x73, 0x75, - 0x63, 0x68, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x79, - 0x73, 0x74, 0x65, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x66, - 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x67, - 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x72, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6e, 0x75, 0x63, 0x6c, - 0x65, 0x61, 0x72, 0x4a, 0x65, 0x77, 0x69, 0x73, 0x68, 0x20, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x73, 0x74, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x66, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x73, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, - 0x77, 0x68, 0x6f, 0x20, 0x77, 0x61, 0x73, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x75, 0x69, 0x63, 0x69, - 0x64, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x73, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, - 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x77, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x3c, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x63, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x73, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x6c, 0x79, 0x50, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6e, 0x73, 0x6f, - 0x20, 0x6d, 0x75, 0x63, 0x68, 0x43, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x64, - 0x65, 0x70, 0x69, 0x63, 0x74, 0x73, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x68, 0x6f, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x61, 0x72, 0x69, - 0x6e, 0x67, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x65, 0x64, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x28, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x74, 0x6f, - 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x54, 0x75, 0x72, 0x6b, 0x69, 0x73, 0x68, - 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x28, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x62, 0x75, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x67, 0x72, - 0x65, 0x65, 0x73, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x52, 0x69, 0x63, - 0x68, 0x61, 0x72, 0x64, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x70, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, - 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, - 0x75, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x79, 0x73, 0x69, - 0x63, 0x73, 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x73, 0x74, 0x6c, 0x69, 0x6e, - 0x6b, 0x20, 0x74, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x65, 0x72, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x6d, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x65, - 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3c, 0x2f, 0x68, 0x31, 0x3e, - 0x0d, 0x0a, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x3f, 0x78, 0x6d, 0x6c, - 0x20, 0x76, 0x65, 0x68, 0x65, 0x6c, 0x70, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x69, - 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x29, - 0x2e, 0x61, 0x74, 0x74, 0x72, 0x28, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x56, 0x69, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x20, 0x73, 0x72, 0x63, - 0x3d, 0x22, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x64, 0x65, 0x73, - 0x70, 0x69, 0x74, 0x65, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x4a, 0x6f, 0x73, 0x65, 0x70, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x74, 0x72, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x73, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x61, 0x20, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x2c, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6f, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x75, - 0x6e, 0x67, 0x61, 0x72, 0x79, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x65, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x66, - 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x47, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x20, 0x41, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x67, - 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, - 0x66, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x73, - 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x2e, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x63, 0x61, 0x72, 0x74, 0x6f, 0x6f, 0x6e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x4d, 0x75, - 0x73, 0x6c, 0x69, 0x6d, 0x73, 0x57, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x69, - 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x65, 0x64, - 0x2c, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x73, 0x68, 0x6f, 0x77, - 0x5f, 0x61, 0x6f, 0x75, 0x74, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x70, 0x65, 0x28, 0x41, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x74, 0x69, 0x63, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, - 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x0a, 0x09, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x44, 0x61, 0x6e, 0x69, 0x65, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0x69, 0x6d, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x62, 0x72, - 0x61, 0x68, 0x61, 0x6d, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x7b, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x70, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, - 0x44, 0x41, 0x54, 0x41, 0x5b, 0x20, 0x2a, 0x6b, 0x69, 0x74, 0x63, 0x68, 0x65, - 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x20, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x69, 0x6e, - 0x6c, 0x79, 0x20, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x27, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x73, 0x69, 0x66, - 0x28, 0x74, 0x79, 0x70, 0x65, 0x49, 0x74, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x26, - 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x22, 0x3e, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x65, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, 0x61, 0x6c, 0x6b, 0x69, - 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x67, 0x61, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x6a, 0x75, 0x73, - 0x74, 0x69, 0x66, 0x79, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x73, 0x66, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x61, - 0x73, 0x73, 0x61, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x77, - 0x6e, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x72, 0x74, 0x64, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x64, 0x6f, 0x6c, - 0x6c, 0x61, 0x72, 0x73, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x68, - 0x70, 0x3f, 0x69, 0x64, 0x3d, 0x61, 0x6c, 0x63, 0x6f, 0x68, 0x6f, 0x6c, 0x29, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x73, 0x73, 0x65, 0x6c, - 0x73, 0x72, 0x65, 0x76, 0x69, 0x76, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x69, 0x6c, 0x6c, - 0x6e, 0x65, 0x73, 0x73, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x65, 0x78, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, - 0x65, 0x64, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x73, 0x6c, 0x69, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x42, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x6d, 0x69, - 0x6e, 0x2e, 0x6a, 0x73, 0x3f, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6b, - 0x6f, 0x6e, 0x74, 0x61, 0x6b, 0x74, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x27, 0x73, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x77, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x6c, 0x20, 0x52, - 0x69, 0x67, 0x3b, 0x0a, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x72, 0x61, 0x69, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x41, 0x6c, 0x73, 0x6f, 0x2c, 0x20, 0x63, 0x72, 0x75, - 0x63, 0x69, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x22, 0x3e, 0x64, 0x65, - 0x63, 0x6c, 0x61, 0x72, 0x65, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x66, - 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78, 0x61, 0x73, 0x20, 0x6d, 0x75, 0x63, 0x68, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, - 0x20, 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x74, 0x6f, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x50, 0x72, - 0x65, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x65, - 0x64, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x76, 0x65, 0x72, - 0x74, 0x79, 0x63, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x76, 0x69, - 0x6e, 0x67, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x74, - 0x68, 0x6f, 0x6e, 0x79, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x20, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x72, - 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x63, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x74, 0x64, - 0x3e, 0x0d, 0x0a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x61, - 0x64, 0x69, 0x75, 0x6d, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x76, 0x61, - 0x72, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x73, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x62, 0x79, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x66, 0x61, 0x63, 0x75, 0x6c, 0x74, - 0x79, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x77, 0x68, 0x6f, 0x20, 0x68, - 0x61, 0x64, 0x61, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x6f, 0x77, 0x6e, - 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x27, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x73, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x3b, - 0x41, 0x6e, 0x64, 0x72, 0x65, 0x77, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x6f, 0x72, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x33, 0x30, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x68, 0x65, - 0x72, 0x73, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, - 0x6f, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x66, 0x69, 0x6e, 0x67, - 0x65, 0x72, 0x73, 0x44, 0x75, 0x6b, 0x65, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, - 0x70, 0x6c, 0x65, 0x2c, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x69, 0x74, 0x77, 0x68, - 0x61, 0x74, 0x20, 0x69, 0x73, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x61, - 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x22, 0x3a, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x3e, - 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x63, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, 0x67, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x64, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x6c, 0x6f, - 0x79, 0x61, 0x6c, 0x74, 0x79, 0x66, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x61, 0x73, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, - 0x73, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x20, 0x68, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x73, 0x73, 0x69, - 0x61, 0x6e, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x62, 0x65, - 0x72, 0x74, 0x61, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x22, 0x3e, 0x2e, 0x61, - 0x70, 0x70, 0x65, 0x6e, 0x64, 0x64, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x66, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x61, 0x6e, 0x6b, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x6e, 0x65, 0x61, 0x74, 0x68, 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, - 0x65, 0x43, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x73, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x49, 0x6e, - 0x73, 0x74, 0x65, 0x61, 0x64, 0x66, 0x69, 0x66, 0x74, 0x65, 0x65, 0x6e, 0x61, - 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2e, 0x79, 0x61, 0x68, 0x6f, 0x6f, 0x2e, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x72, 0x6f, 0x62, 0x73, 0x63, 0x75, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x63, 0x3d, 0x20, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x61, 0x20, - 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x79, - 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, - 0x74, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x72, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x68, 0x65, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x66, 0x72, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4d, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x31, 0x6b, 0x6e, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x6f, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x73, 0x74, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x22, 0x3e, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x64, 0x45, 0x4e, 0x44, - 0x20, 0x2d, 0x2d, 0x3e, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x20, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x79, 0x20, - 0x77, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x61, - 0x6c, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x73, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x67, 0x66, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x42, 0x72, 0x61, - 0x73, 0x69, 0x6c, 0x29, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x47, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x75, 0x72, 0x73, 0x75, 0x65, 0x64, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x75, - 0x70, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x6f, 0x66, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x73, 0x61, 0x77, 0x20, - 0x74, 0x68, 0x65, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x73, 0x69, 0x66, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x68, 0x65, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x70, - 0x75, 0x73, 0x68, 0x28, 0x66, 0x75, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x20, - 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x46, 0x61, 0x6e, 0x74, 0x61, 0x73, - 0x79, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6a, 0x75, 0x72, - 0x65, 0x64, 0x55, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x66, 0x61, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x73, 0x69, 0x78, 0x74, 0x65, 0x65, 0x6e, 0x49, 0x73, 0x6c, 0x61, 0x6d, - 0x69, 0x63, 0x23, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x65, 0x6e, 0x74, 0x69, - 0x72, 0x65, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6f, 0x6e, - 0x65, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x73, - 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x73, 0x74, 0x65, 0x72, 0x72, 0x61, 0x69, - 0x6e, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x66, 0x75, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x76, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, - 0x6c, 0x65, 0x20, 0x63, 0x72, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x70, 0x72, 0x6f, - 0x70, 0x68, 0x65, 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x64, 0x6f, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x6c, 0x20, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x62, 0x72, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, - 0x2d, 0x62, 0x75, 0x6c, 0x6b, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x68, 0x65, 0x20, 0x6c, - 0x65, 0x66, 0x74, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x29, 0x3b, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x61, - 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x6e, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, - 0x0a, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x74, 0x75, - 0x72, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x20, 0x42, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x64, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x43, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x67, - 0x6f, 0x64, 0x64, 0x65, 0x73, 0x73, 0x54, 0x61, 0x67, 0x20, 0x2d, 0x2d, 0x3e, - 0x41, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x62, 0x75, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x3d, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x26, 0x4c, 0x69, 0x6e, 0x63, 0x6f, 0x6c, 0x6e, 0x77, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4a, 0x75, - 0x64, 0x61, 0x69, 0x73, 0x6d, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x61, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x27, 0x2c, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x69, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x0a, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x73, - 0x74, 0x72, 0x65, 0x65, 0x74, 0x73, 0x42, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x64, - 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x73, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, - 0x6f, 0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x64, 0x6f, 0x77, 0x6e, 0x20, - 0x69, 0x6e, 0x68, 0x61, 0x72, 0x62, 0x6f, 0x75, 0x72, 0x46, 0x72, 0x65, 0x65, - 0x64, 0x6f, 0x6d, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x72, 0x79, 0x2f, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x2e, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x6c, 0x65, - 0x67, 0x65, 0x6e, 0x64, 0x73, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, - 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x70, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x61, 0x72, 0x65, - 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x30, 0x30, - 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2f, 0x2a, 0x20, 0x3c, 0x21, 0x5b, 0x43, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x20, 0x70, 0x69, 0x63, 0x6b, 0x65, - 0x64, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x75, 0x73, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x74, 0x68, 0x65, 0x77, 0x74, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x73, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x73, 0x20, 0x6f, 0x66, - 0x65, 0x61, 0x73, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x20, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x7d, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x68, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x77, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x6f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x69, - 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x49, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x72, - 0x65, 0x74, 0x72, 0x65, 0x61, 0x74, 0x2e, 0x20, 0x53, 0x6f, 0x6d, 0x65, 0x20, - 0x77, 0x77, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x62, 0x6f, 0x6d, 0x62, 0x69, 0x6e, - 0x67, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x69, 0x6e, 0x2e, 0x20, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x73, 0x7c, 0x7c, 0x7b, 0x7d, 0x3b, 0x77, 0x69, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x6f, 0x66, 0x73, 0x79, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, - 0x66, 0x65, 0x61, 0x74, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x65, 0x64, 0x6f, - 0x70, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x53, 0x63, - 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x69, 0x63, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x20, 0x57, 0x69, - 0x6c, 0x68, 0x65, 0x6c, 0x6d, 0x73, 0x75, 0x62, 0x75, 0x72, 0x62, 0x73, 0x67, - 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x73, - 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x62, 0x6f, 0x64, 0x79, 0x20, - 0x6f, 0x66, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x73, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x74, 0x6f, 0x63, 0x68, 0x69, 0x65, 0x66, 0x6c, 0x79, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2d, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x0a, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, - 0x69, 0x6e, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, - 0x73, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x20, 0x76, 0x69, 0x61, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x61, 0xc3, - 0xb1, 0x6f, 0x6c, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x72, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6e, 0x72, - 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x6b, - 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x3d, 0x30, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x61, 0x67, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x20, 0x4b, 0x65, 0x6e, - 0x6e, 0x65, 0x64, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x66, 0x75, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x42, - 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x68, 0x69, 0x6d, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x6f, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x77, 0x61, 0x79, 0x73, 0x20, 0x74, 0x6f, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x64, 0x76, 0x69, 0x73, 0x65, 0x64, 0x70, - 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x3a, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x79, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x72, 0x62, 0x65, - 0x72, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x73, 0x20, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x73, 0x6c, - 0x6f, 0x77, 0x6c, 0x79, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x09, 0x09, - 0x69, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x64, - 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x70, 0x61, 0x69, 0x72, - 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x4b, 0x6f, 0x6e, - 0x74, 0x61, 0x6b, 0x74, 0x41, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x68, 0x61, - 0x76, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x29, 0x2e, 0x63, 0x73, 0x73, - 0x28, 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6c, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, - 0x74, 0x6f, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2c, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2d, 0x2d, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x72, 0x6f, 0x77, 0x73, 0x3d, 0x22, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x3c, - 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, - 0x3e, 0x3c, 0x5c, 0x2f, 0x73, 0x63, 0x72, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x6c, 0x61, 0x76, 0x65, - 0x72, 0x79, 0x77, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x21, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x41, 0x72, 0x61, 0x62, 0x69, 0x61, 0x6e, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, - 0x75, 0x6e, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, - 0x2d, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2c, 0x69, 0x73, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x72, 0x69, 0x73, 0x6b, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x73, 0x69, - 0x72, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x6f, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x70, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x65, 0x61, 0x64, 0x27, 0x29, 0x5b, 0x30, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x3e, 0x26, 0x63, 0x6f, 0x70, - 0x79, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3e, 0x61, 0x73, 0x73, 0x65, - 0x6d, 0x62, 0x6c, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x3f, 0x20, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x62, - 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x20, - 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x68, 0x61, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x70, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x20, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x62, 0x79, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, - 0x41, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x73, 0x61, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x64, 0x65, 0x6e, 0x6f, 0x74, - 0x65, 0x73, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x48, 0x6f, 0x75, 0x73, - 0x74, 0x6f, 0x6e, 0x32, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x67, 0x6f, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x46, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x29, - 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x70, 0x72, 0x69, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6c, - 0x79, 0x73, 0x74, 0x20, 0x2b, 0x20, 0x22, 0x67, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x74, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x68, 0x65, 0x6c, 0x70, - 0x66, 0x75, 0x6c, 0x72, 0x65, 0x76, 0x69, 0x76, 0x65, 0x64, 0x69, 0x73, 0x20, - 0x76, 0x65, 0x72, 0x79, 0x72, 0x27, 0x2b, 0x27, 0x69, 0x70, 0x74, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x69, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, - 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x3c, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x28, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x73, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x65, 0x20, 0x62, 0x79, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x61, 0x76, 0x6f, 0x69, 0x64, - 0x65, 0x64, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x32, 0x70, 0x78, 0x20, - 0x33, 0x70, 0x78, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6d, 0x65, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2d, 0x3d, - 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x66, 0x61, 0x6d, 0x69, 0x6c, - 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x64, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x7d, - 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x69, 0x73, 0x20, 0x6a, 0x75, - 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x77, 0x68, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64, 0x62, 0x72, - 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x6f, 0x66, - 0x63, 0x75, 0x69, 0x73, 0x69, 0x6e, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x72, - 0x61, 0x6c, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x3b, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, - 0x73, 0x73, 0x2c, 0x20, 0x6f, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, - 0x6e, 0x76, 0x61, 0x64, 0x65, 0x64, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, - 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x73, - 0x74, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x6c, 0x79, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x7d, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x6e, 0x73, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x61, - 0x74, 0x69, 0x73, 0x66, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x64, - 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6e, - 0x65, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x6e, 0x6f, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x6e, 0x69, 0x73, 0x68, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x68, 0x65, - 0x6c, 0x70, 0x20, 0x6f, 0x66, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, - 0x61, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, - 0x66, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x73, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, - 0x67, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x53, 0x74, 0x61, 0x6e, - 0x6c, 0x65, 0x79, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x72, 0x6f, 0x61, 0x74, 0x69, 0x61, 0x20, 0x41, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x69, - 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x29, 0x7b, 0x74, 0x68, 0x72, 0x6f, - 0x77, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x65, 0x72, 0x65, 0x74, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x22, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x61, 0x20, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x73, 0x20, 0x73, 0x65, 0x65, 0x6e, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x75, 0x62, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x66, 0x65, 0x65, 0x64, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x6f, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x57, 0x6f, - 0x6d, 0x65, 0x6e, 0x27, 0x73, 0x4e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x4d, - 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x69, 0x6e, - 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x61, 0x6e, - 0x79, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6c, 0x61, 0x77, 0x73, 0x75, - 0x69, 0x74, 0x64, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x7b, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x79, 0x20, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x2e, 0x63, - 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x75, 0x73, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, - 0x74, 0x6f, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x6c, 0x69, 0x65, 0x73, - 0x20, 0x69, 0x6e, 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x77, 0x68, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x28, 0x22, - 0x44, 0x4f, 0x4d, 0x43, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x6f, - 0x6e, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, - 0x4b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x6f, 0x20, 0x73, 0x68, - 0x6f, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x64, 0x65, - 0x20, 0x69, 0x74, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x65, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x20, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x64, 0x42, 0x61, 0x70, 0x74, 0x69, 0x73, - 0x74, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x32, 0x67, 0x72, 0x65, 0x77, - 0x20, 0x75, 0x70, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x77, 0x61, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x73, 0x68, 0x61, 0x73, 0x20, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x68, 0x6f, 0x77, - 0x28, 0x29, 0x3b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x62, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x3d, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x0a, - 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x66, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x2e, 0x72, 0x65, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x68, 0x6f, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x73, 0x70, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x61, 0x20, - 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x2e, 0x66, 0x6f, 0x6f, 0x74, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x2d, 0x3e, 0x3c, - 0x21, 0x2d, 0x2d, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x65, 0x65, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x73, 0x65, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x69, 0x73, 0x66, 0x61, 0x73, 0x74, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x69, 0x6d, - 0x67, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2c, 0x61, 0x20, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x72, 0x65, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x68, - 0x65, 0x61, 0x70, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x61, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, - 0x77, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x28, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, - 0x61, 0x20, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x6f, 0x66, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6c, 0x79, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x2c, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, - 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6c, 0x65, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x67, 0x61, 0x69, - 0x6e, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x77, 0x61, 0x79, 0x6b, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x70, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6e, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x69, 0x73, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x6f, 0x77, - 0x6e, 0x65, 0x64, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, 0x2d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x73, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x6d, 0x61, - 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6c, - 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, - 0x65, 0x6e, 0x61, 0x63, 0x74, 0x65, 0x64, 0x77, 0x69, 0x73, 0x68, 0x20, 0x74, - 0x6f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x6c, 0x79, 0x63, 0x6f, 0x6f, 0x6c, 0x69, - 0x6e, 0x67, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x69, 0x74, 0x2e, 0x20, - 0x54, 0x68, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x73, - 0x73, 0x75, 0x6d, 0x65, 0x73, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, - 0x3d, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, - 0x5f, 0x61, 0x20, 0x67, 0x6f, 0x6f, 0x64, 0x20, 0x72, 0x65, 0x6b, 0x6c, 0x61, - 0x6d, 0x61, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x70, 0x61, 0x6e, - 0x65, 0x6c, 0x22, 0x3e, 0x4c, 0x6f, 0x6e, 0x64, 0x6f, 0x6e, 0x2c, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x73, 0x63, 0x72, 0x75, 0x73, 0x68, 0x65, 0x64, 0x62, - 0x61, 0x70, 0x74, 0x69, 0x73, 0x6d, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x61, 0x6c, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, - 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x73, 0x74, 0x20, - 0x69, 0x6e, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x65, - 0x72, 0x68, 0x61, 0x70, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x66, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x6c, 0x61, 0x73, 0x74, 0x65, 0x64, 0x20, 0x72, 0x69, 0x73, 0x65, 0x20, 0x69, - 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x6f, 0x66, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x65, 0x6d, - 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x61, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x75, - 0x74, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x62, 0x79, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x62, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6c, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x6e, - 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x20, 0x3d, 0x55, 0x53, 0x26, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x68, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x6c, 0x65, - 0x73, 0x62, 0x69, 0x61, 0x6e, 0x73, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x2f, 0x70, 0x69, 0x78, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x6a, 0x6f, 0x69, - 0x6e, 0x74, 0x6c, 0x79, 0x73, 0x6b, 0x79, 0x73, 0x63, 0x72, 0x61, 0x55, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x41, - 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x61, 0x6e, 0x75, 0x63, 0x6c, 0x65, 0x75, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x79, 0x2c, 0x70, 0x75, 0x72, 0x65, 0x6c, 0x79, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x61, 0x73, 0x69, 0x6c, - 0x79, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x61, 0x6f, 0x6e, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x68, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, - 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x61, 0x6e, 0x20, 0x77, 0x68, - 0x6f, 0x6f, 0x72, 0x67, 0x2f, 0x57, 0x65, 0x62, 0x6f, 0x6e, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x63, 0x61, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x48, 0x65, 0x20, 0x64, - 0x69, 0x65, 0x64, 0x73, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x30, 0x30, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x7b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x74, 0x6f, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20, - 0x6d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x65, - 0x64, 0x44, 0x65, 0x74, 0x72, 0x6f, 0x69, 0x74, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x73, 0x74, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, - 0x20, 0x69, 0x6e, 0x53, 0x65, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x4b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x69, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x68, 0x69, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x73, 0x63, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x74, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x61, 0x6c, 0x6f, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x66, - 0x72, 0x65, 0x65, 0x20, 0x74, 0x6f, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x64, - 0x61, 0x79, 0x6e, 0x65, 0x72, 0x76, 0x6f, 0x75, 0x73, 0x73, 0x71, 0x75, 0x61, - 0x72, 0x65, 0x20, 0x7d, 0x3b, 0x69, 0x66, 0x28, 0x67, 0x6f, 0x69, 0x6e, 0x20, - 0x77, 0x68, 0x61, 0x74, 0x69, 0x6d, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x74, - 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x6c, 0x79, - 0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x75, 0x61, 0x6c, - 0x20, 0x2d, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x22, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x2c, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x61, - 0x6b, 0x65, 0x20, 0x61, 0x20, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, - 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x3e, 0x6f, 0x62, 0x6c, 0x69, 0x67, - 0x65, 0x64, 0x72, 0x69, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x22, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x45, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x69, 0x6e, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x69, 0x73, 0x61, - 0x74, 0x68, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x75, 0x70, 0x69, 0x74, 0x65, 0x72, - 0x59, 0x61, 0x68, 0x6f, 0x6f, 0x21, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x73, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x65, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x6f, - 0x6d, 0x61, 0x6e, 0x3f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x69, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x64, - 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, - 0x6f, 0x77, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x61, 0x20, 0x70, 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x3b, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, - 0x6e, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x77, - 0x70, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x20, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x28, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2e, 0x3b, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x65, 0x6e, 0x7a, - 0x79, 0x6d, 0x65, 0x73, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, - 0x20, 0x6c, 0x61, 0x74, 0x65, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x70, 0x79, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x62, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, - 0x0a, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x72, 0x65, 0x61, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x5c, 0x75, 0x30, 0x30, 0x33, 0x43, 0x61, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x61, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x61, 0x3c, 0x53, - 0x43, 0x52, 0x49, 0x50, 0x54, 0x52, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x74, - 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x62, 0x6f, 0x78, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x78, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x73, - 0x2c, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x69, 0x6e, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x69, 0x63, 0x6f, 0x6d, 0x69, - 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x55, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x62, 0x75, 0x74, 0x20, 0x68, 0x61, 0x73, 0x68, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x74, 0x61, - 0x67, 0x65, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x61, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x6f, 0x72, 0x65, - 0x67, 0x69, 0x6d, 0x65, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, - 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, 0x61, - 0x3b, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x72, 0x65, 0x20, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x68, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x20, 0x3d, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x66, - 0x65, 0x72, 0x74, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, - 0x3d, 0x5b, 0x5d, 0x3b, 0x28, 0x66, 0x75, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, - 0x73, 0x2f, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x61, 0x63, 0x74, 0x73, 0x20, - 0x61, 0x73, 0x49, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x21, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x42, 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0xc3, 0xa0, 0x64, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x65, - 0x75, 0x72, 0x6f, 0x70, 0x65, 0x75, 0x65, 0x75, 0x73, 0x6b, 0x61, 0x72, 0x61, - 0x67, 0x61, 0x65, 0x69, 0x6c, 0x67, 0x65, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, - 0x61, 0x65, 0x73, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x6d, 0x65, 0x6e, 0x73, 0x61, - 0x6a, 0x65, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x6d, 0xc3, 0xa9, 0x78, 0x69, 0x63, 0x6f, 0x70, 0xc3, 0xa1, - 0x67, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x6f, 0x63, 0x74, 0x75, 0x62, 0x72, 0x65, 0x64, - 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x61, 0xc3, 0xb1, 0x61, 0x64, 0x69, 0x72, - 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, - 0x6f, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x72, 0x61, 0x76, 0xc3, 0xa9, 0x73, 0x67, 0x72, 0x61, 0x63, - 0x69, 0x61, 0x73, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x6f, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x73, 0x63, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x64, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6e, - 0xc3, 0xba, 0x6d, 0x65, 0x72, 0x6f, 0x61, 0x63, 0x75, 0x65, 0x72, 0x64, 0x6f, - 0x6d, 0xc3, 0xba, 0x73, 0x69, 0x63, 0x61, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x6f, 0x66, 0x65, 0x72, 0x74, 0x61, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, - 0x6f, 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x65, 0x73, 0x65, 0x6a, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x61, 0x64, 0x65, - 0x6d, 0xc3, 0xa1, 0x73, 0x70, 0x72, 0x69, 0x76, 0x61, 0x64, 0x6f, 0x61, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x72, 0x65, 0x6e, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x70, - 0x6f, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x65, 0x73, - 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x72, - 0x6f, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x64, 0x61, 0x61, 0x6e, 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x65, 0x6d, - 0x62, 0x61, 0x72, 0x67, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x67, - 0x72, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, - 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x65, 0x73, 0x66, 0x65, 0x62, 0x72, 0x65, 0x72, - 0x6f, 0x64, 0x69, 0x73, 0x65, 0xc3, 0xb1, 0x6f, 0x74, 0x75, 0x72, 0x69, 0x73, - 0x6d, 0x6f, 0x63, 0xc3, 0xb3, 0x64, 0x69, 0x67, 0x6f, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x64, 0x61, 0x65, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6f, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x61, 0x72, 0x61, - 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x73, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, - 0x61, 0x6c, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x64, - 0x6f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x61, 0x73, 0x74, 0xc3, 0xad, 0x74, 0x75, - 0x6c, 0x6f, 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x65, 0x72, 0x73, 0x65, 0x67, 0x75, - 0x6e, 0x64, 0x6f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x66, 0x72, 0x61, - 0x6e, 0x63, 0x69, 0x61, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x73, 0x65, - 0x67, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x65, 0x6e, 0x65, 0x6d, 0x6f, 0x73, 0x65, - 0x66, 0x65, 0x63, 0x74, 0x6f, 0x73, 0x6d, 0xc3, 0xa1, 0x6c, 0x61, 0x67, 0x61, - 0x73, 0x65, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, - 0x61, 0x67, 0x72, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x61, 0x72, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x67, 0x61, 0x72, 0x63, - 0xc3, 0xad, 0x61, 0x61, 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x63, 0x75, - 0x61, 0x64, 0x6f, 0x72, 0x71, 0x75, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x73, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x73, - 0x6d, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xad, - 0x61, 0x6d, 0x61, 0xc3, 0xb1, 0x61, 0x6e, 0x61, 0xc3, 0xba, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x6f, 0x73, 0x6f, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x74, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0xc3, 0xba, 0x6e, 0x73, 0x61, 0x6c, 0x75, 0x64, 0x6f, 0x73, 0x70, 0x6f, - 0x64, 0x65, 0x6d, 0x6f, 0x73, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x61, 0x72, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x68, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x63, 0x61, 0x6d, 0x70, 0x61, - 0x69, 0x67, 0x6e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, - 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x6d, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x7a, 0x2d, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x73, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x72, 0x65, - 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, - 0x6c, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x61, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x6d, 0x61, 0x67, 0x61, - 0x7a, 0x69, 0x6e, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x72, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x3c, 0x73, 0x74, - 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x67, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x73, 0x74, 0x75, 0x64, 0x65, - 0x6e, 0x74, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x66, 0x69, - 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x72, - 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x66, 0x65, 0x73, 0x74, - 0x69, 0x76, 0x61, 0x6c, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x64, 0x72, 0x6f, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x70, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x72, 0x72, 0x69, - 0x61, 0x67, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x70, 0x72, - 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x61, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x62, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, - 0x61, 0x72, 0x6b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x63, 0x68, - 0x65, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, - 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x79, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x3d, 0x20, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x61, 0x69, 0x72, 0x63, 0x72, 0x61, 0x66, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x64, 0x6f, 0x6d, 0x65, 0x73, 0x74, 0x69, 0x63, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x68, 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, - 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x3e, 0x3c, 0x61, 0x64, 0x61, 0x75, 0x67, - 0x68, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x22, 0x20, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, - 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x61, 0x73, 0x73, - 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x66, 0x75, 0x6c, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x66, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, - 0x2f, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, - 0x65, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x73, 0x61, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x65, 0x78, 0x65, - 0x72, 0x63, 0x69, 0x73, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x6d, 0x65, 0x64, 0x69, 0x63, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x61, - 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x22, 0x3e, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x3a, - 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x53, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x73, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x65, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x67, 0x68, 0x74, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x64, 0x68, 0x65, 0x72, 0x69, 0x74, 0x61, 0x67, 0x65, - 0x73, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x65, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x72, 0x65, - 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, - 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x61, 0x6e, 0x79, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, - 0x6c, 0x79, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, - 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, - 0x2e, 0x72, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x3e, 0x3c, 0x74, 0x72, - 0x3e, 0x3c, 0x74, 0x64, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x64, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x48, 0x6f, 0x6d, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x77, 0x65, 0x62, 0x73, 0x69, - 0x74, 0x65, 0x73, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x61, 0x6c, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x3e, 0x73, 0x6f, 0x6d, 0x65, 0x77, 0x68, - 0x61, 0x74, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x57, 0x65, 0x73, - 0x74, 0x65, 0x72, 0x6e, 0x20, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x0a, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x73, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x76, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x61, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x61, 0x63, 0x63, 0x75, - 0x72, 0x61, 0x74, 0x65, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, - 0x61, 0x6c, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x63, 0x72, 0x69, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x64, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, 0x20, 0x20, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x6c, 0x79, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x65, 0x71, 0x75, 0x61, 0x74, 0x65, 0x70, 0x61, - 0x6b, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x3e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x62, - 0x72, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x20, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x67, 0x72, - 0x61, 0x64, 0x75, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6c, 0x61, - 0x79, 0x73, 0x69, 0x61, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, - 0x63, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, 0x63, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x73, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x75, 0x6c, - 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x6c, 0x69, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x74, 0x65, - 0x6e, 0x63, 0x65, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x29, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x65, 0x72, 0x6e, 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x20, 0x6d, - 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x63, 0x61, 0x72, 0x6f, 0x75, 0x73, - 0x65, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x72, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, - 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x63, 0x74, 0x6f, 0x62, - 0x65, 0x72, 0x20, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6d, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x2d, 0x2d, 0x26, 0x67, 0x74, 0x3b, 0x0a, - 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x63, 0x68, 0x61, 0x69, - 0x72, 0x6d, 0x61, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x69, 0x63, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x62, 0x61, 0x73, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x6a, 0x75, 0x64, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x2e, 0x63, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x20, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x74, 0x6c, 0x61, - 0x6e, 0x64, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, - 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x2d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2d, 0x22, 0x20, - 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x73, 0x6d, - 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x74, 0x61, - 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, - 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x3a, 0x20, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x46, - 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, - 0x75, 0x73, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x72, 0x6e, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x76, 0x20, 0x69, - 0x64, 0x3d, 0x22, 0x57, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x66, - 0x6c, 0x65, 0x78, 0x69, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x6c, 0x61, 0x77, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x3d, 0x22, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x6d, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x2f, 0x74, 0x68, 0x65, 0x6d, 0x65, - 0x73, 0x2f, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x61, 0x6c, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x26, 0x68, 0x65, 0x6c, 0x6c, 0x69, - 0x70, 0x3b, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x22, 0x20, 0x73, - 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x20, 0x22, 0x20, 0x2f, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x6f, 0x70, 0x69, 0x6e, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, 0x0a, 0x09, 0x3c, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x61, 0x74, - 0x75, 0x72, 0x64, 0x61, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x65, 0x6d, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x3d, 0x22, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x45, 0x73, 0x70, 0x61, - 0xc3, 0xb1, 0x6f, 0x6c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, - 0x74, 0x3b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x79, 0x6d, - 0x70, 0x74, 0x6f, 0x6d, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x3e, 0x3c, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x2e, 0x6c, 0x65, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x2e, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, - 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x69, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x69, 0x61, - 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x77, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x73, 0x4f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x61, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x79, 0x6f, - 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x20, 0x6d, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 0x6e, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x64, 0x72, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x63, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x61, 0x6d, 0x69, - 0x6c, 0x69, 0x61, 0x72, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x30, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x73, 0x2d, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, - 0x70, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x20, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x61, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x2e, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x70, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x67, 0x6c, 0x6f, 0x73, 0x73, 0x61, - 0x72, 0x79, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, 0x6c, - 0x65, 0x22, 0x3e, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x69, 0x73, - 0x68, 0x6a, 0x6f, 0x6e, 0x61, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x2e, 0x63, - 0x6c, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x61, 0x69, 0x6c, 0x61, - 0x6e, 0x64, 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x73, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0a, 0x09, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3c, 0x2f, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x3e, 0x6f, 0x6b, 0x6c, 0x61, 0x68, 0x6f, 0x6d, - 0x61, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x68, - 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x28, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x2e, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, - 0x20, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x22, 0x71, 0x75, 0x69, 0x63, - 0x6b, 0x6c, 0x79, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x6d, 0x61, - 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x68, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, - 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x26, 0x65, 0x61, 0x63, 0x75, 0x74, - 0x65, 0x3b, 0x68, 0x61, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x61, 0x64, 0x6f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x63, 0x61, 0x6d, 0x70, 0x62, 0x65, 0x6c, 0x6c, 0x3c, 0x21, 0x2d, 0x2d, - 0x20, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x3c, - 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x70, - 0x73, 0x7c, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x3c, 0x62, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x20, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x3c, - 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x72, - 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x29, 0x2e, 0x0a, 0x0a, 0x54, - 0x68, 0x65, 0x20, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x0a, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x73, 0x72, 0x74, 0x75, 0x67, - 0x75, 0xc3, 0xaa, 0x73, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x54, 0x6f, 0x20, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x6f, 0x72, 0x6e, 0x65, 0x79, 0x65, 0x6d, 0x70, - 0x68, 0x61, 0x73, 0x69, 0x73, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x73, - 0x66, 0x61, 0x6e, 0x63, 0x79, 0x62, 0x6f, 0x78, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x64, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x65, 0x64, 0x3d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x70, 0x78, 0x3b, 0x66, - 0x6f, 0x6e, 0x74, 0x2d, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x64, 0x76, 0x61, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x6f, - 0x6d, 0x70, 0x73, 0x6f, 0x6e, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x61, 0x6c, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x30, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, - 0x3e, 0x3c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x0a, - 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x20, 0x3c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x20, 0x4f, 0x63, 0x74, 0x6f, - 0x62, 0x65, 0x72, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x65, 0x78, - 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x6d, 0x61, 0x72, 0x79, 0x6c, 0x61, 0x6e, 0x64, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, - 0x63, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, - 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x73, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x29, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x62, 0x6f, 0x78, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x70, 0x72, - 0x65, 0x67, 0x6e, 0x61, 0x6e, 0x74, 0x74, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, - 0x77, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x70, 0x6e, 0x67, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x62, 0x61, 0x73, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x22, 0x3e, 0x67, 0x61, 0x6d, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x75, 0x63, - 0x68, 0x20, 0x61, 0x73, 0x20, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x6f, - 0x75, 0x72, 0x69, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x74, 0x6f, - 0x70, 0x3a, 0x31, 0x70, 0x78, 0x20, 0x2e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x32, 0x6c, 0x61, 0x7a, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x6e, - 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x3e, 0x0a, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x20, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x20, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x2f, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, - 0x3e, 0x0a, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0x29, 0x28, 0xe7, 0xb9, - 0x81, 0xe9, 0xab, 0x94, 0x29, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, - 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x72, 0x6f, 0x6d, 0xc3, 0xa2, - 0x6e, 0xc4, 0x83, 0x74, 0xc3, 0xbc, 0x72, 0x6b, 0xc3, 0xa7, 0x65, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0x74, 0x61, 0x6d, 0x62, 0x69, 0xc3, 0xa9, - 0x6e, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x69, 0x61, 0x73, 0x6d, 0x65, 0x6e, 0x73, - 0x61, 0x6a, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x73, 0x64, - 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x73, 0x6e, 0x61, 0x63, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x6f, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x73, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x67, 0x6f, 0x62, 0x69, 0x65, - 0x72, 0x6e, 0x6f, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x73, 0x61, 0x6e, - 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x73, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x69, 0x61, 0x64, 0x65, 0x73, 0x70, - 0x75, 0xc3, 0xa9, 0x73, 0x64, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x73, 0x70, - 0x72, 0x6f, 0x79, 0x65, 0x63, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x6f, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x6f, 0x6e, 0x6f, 0x73, - 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x6f, - 0x6e, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x70, 0x72, - 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x62, - 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x67, 0x6f, 0x6e, - 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x73, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0xc3, - 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x72, 0x6d, 0x69, 0x65, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x61, 0x6d, 0xc3, 0xa9, 0x72, 0x69, 0x63, 0x61, - 0x76, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x6f, 0x72, 0x73, 0x6f, 0x63, 0x69, 0x65, - 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x65, - 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x72, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x6f, 0x70, 0x61, 0x6c, 0x61, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0xc3, 0xa9, 0x73, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x65, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x73, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x64, 0x63, 0xc3, 0xb3, - 0x72, 0x64, 0x6f, 0x62, 0x61, 0x7a, 0x61, 0x72, 0x61, 0x67, 0x6f, 0x7a, 0x61, - 0x70, 0xc3, 0xa1, 0x67, 0x69, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x71, 0x75, 0x65, 0x61, 0x72, 0x67, 0x65, - 0x73, 0x74, 0x69, 0xc3, 0xb3, 0x6e, 0x61, 0x6c, 0x71, 0x75, 0x69, 0x6c, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x63, 0x69, 0x65, 0x6e, - 0x63, 0x69, 0x61, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x6f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x61, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x70, 0xc3, 0xba, - 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x69, 0x76, 0x6f, - 0x61, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, - 0x64, 0x6f, 0x72, 0x63, 0x61, 0x6e, 0x74, 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, - 0x74, 0x72, 0x61, 0x64, 0x61, 0x73, 0x61, 0x63, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x73, 0x73, 0x75, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6c, 0x65, 0x6d, 0x61, 0x6e, 0x69, 0x61, 0x66, 0x75, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x73, 0x68, 0x61, 0x63, - 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x65, 0x64, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x64, 0x6f, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, - 0x73, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x6f, 0x73, 0x62, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x72, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x6f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x6a, 0xc3, 0xb3, 0x76, 0x65, - 0x6e, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x74, 0xc3, - 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0xc3, 0xad, 0x61, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x61, 0x72, 0x61, 0x73, 0x74, 0x75, 0x72, 0x69, 0x61, 0x73, 0x72, - 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x72, 0x62, 0x6f, 0x6c, 0x65, 0x74, 0xc3, 0xad, 0x6e, 0x73, 0x61, 0x6c, - 0x76, 0x61, 0x64, 0x6f, 0x72, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, 0x6f, 0x73, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x6f, 0x73, 0x6e, 0x65, 0x67, 0x6f, 0x63, 0x69, 0x6f, 0x73, 0x6c, 0x69, - 0x62, 0x65, 0x72, 0x74, 0x61, 0x64, 0x64, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x73, 0x70, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0xc3, 0xb3, - 0x78, 0x69, 0x6d, 0x6f, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x71, 0x75, 0x69, 0xc3, 0xa9, 0x6e, - 0x65, 0x73, 0x63, 0x6f, 0x72, 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x62, 0x75, 0x73, 0x63, 0x61, 0x6e, 0x64, 0x6f, - 0x6f, 0x70, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x69, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x74, 0x6f, - 0x64, 0x61, 0x76, 0xc3, 0xad, 0x61, 0x67, 0x61, 0x6c, 0x65, 0x72, 0xc3, 0xad, - 0x61, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x69, - 0x63, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x6f, 0x73, 0x63, 0x72, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x64, 0xc3, 0xb3, - 0x6c, 0x61, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x69, 0x61, - 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x70, 0x65, 0x72, 0xc3, 0xad, - 0x6f, 0x64, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x74, 0x61, 0x6d, 0x61, - 0x6e, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x70, 0x65, 0x71, 0x75, 0x65, 0xc3, 0xb1, - 0x6f, 0x72, 0x65, 0x63, 0x69, 0x62, 0x69, 0x64, 0x61, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x6e, 0x61, 0x6c, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x66, 0x65, 0x63, - 0x61, 0x6e, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x69, - 0x61, 0x73, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x6f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x63, 0x61, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x74, 0xc3, 0xa9, 0x63, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x76, 0x69, - 0x76, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x7a, 0x61, - 0x73, 0x61, 0x64, 0x65, 0x6c, 0x61, 0x6e, 0x74, 0x65, 0x66, 0x75, 0x6e, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x73, 0x64, - 0x69, 0x66, 0xc3, 0xad, 0x63, 0x69, 0x6c, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61, 0x73, 0x61, 0x76, 0x61, - 0x6e, 0x7a, 0x61, 0x64, 0x61, 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, - 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0xc3, 0xa1, 0x6e, 0x63, - 0x68, 0x65, 0x7a, 0x63, 0x61, 0x6d, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x73, 0x6f, - 0x66, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, 0x61, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, - 0x61, 0x63, 0x75, 0x6c, 0x74, 0x61, 0x64, 0x63, 0x72, 0xc3, 0xa9, 0x64, 0x69, - 0x74, 0x6f, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x73, 0x73, 0x75, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x70, 0x65, 0x71, 0x75, 0x65, - 0xc3, 0xb1, 0x61, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb5, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, - 0x95, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0xb2, 0xd1, - 0x81, 0xd0, 0xb5, 0xd1, 0x85, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, - 0xbb, 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x83, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd1, 0x8f, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x81, 0xd0, 0xb5, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb4, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd1, 0x84, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x8e, 0xd0, 0xbb, 0xd0, 0xb8, - 0xd1, 0x88, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x85, 0xd0, 0xbe, 0xd1, - 0x82, 0xd1, 0x8f, 0xd0, 0xb4, 0xd0, 0xb2, 0xd1, 0x83, 0xd1, 0x85, 0xd1, 0x81, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8f, 0xd1, - 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, - 0x82, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd1, 0x86, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x8b, 0xd1, 0x82, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd0, 0xb0, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x8b, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8e, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, - 0xb3, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x8e, 0xd0, 0xbd, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0x95, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x8c, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, - 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd9, - 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xac, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, - 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb5, 0xd9, 0x81, 0xd8, - 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, 0xd9, - 0x86, 0xd8, 0xb4, 0xd8, 0xa8, 0xd9, 0x83, 0xd8, 0xa9, 0xd9, 0x81, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xad, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa3, 0xd9, 0x83, 0xd8, 0xab, - 0xd8, 0xb1, 0xd8, 0xae, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, - 0xba, 0xd8, 0xb7, 0xd8, 0xaa, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x87, - 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, - 0xa9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, - 0xb4, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, - 0xd9, 0x86, 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xb7, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, - 0xb1, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, - 0xd9, 0x81, 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x82, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xb2, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, - 0xd8, 0xa9, 0xd8, 0xa3, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x82, 0xd9, - 0x84, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x8a, - 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xb7, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd9, 0x82, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xac, - 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, - 0x89, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd8, 0xad, 0xd8, 0xab, 0xd8, 0xb9, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb6, 0xd8, - 0xa8, 0xd8, 0xb4, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xac, - 0xd9, 0x84, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, - 0x88, 0xd9, 0x86, 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x8a, - 0xd9, 0x88, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x81, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, - 0x82, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xa3, 0xd9, 0x81, - 0xd8, 0xb6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x83, 0xd8, 0xab, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xb6, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xad, 0xd9, 0x84, 0xd9, 0x89, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd9, 0x87, - 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, - 0x88, 0xd8, 0xaf, 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x86, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xae, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0e, - 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x18, 0x19, 0x1a, 0x1b, - 0x1c, 0x1d, 0x1e, 0x1f, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x07, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, - 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x69, 0x6e, 0x67, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x61, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x3c, 0x2f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3e, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, - 0x6c, 0x69, 0x61, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x61, 0x6e, 0x6f, - 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x7d, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x3c, 0x2f, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x62, 0x65, 0x61, 0x75, 0x74, 0x69, 0x66, 0x75, 0x6c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x6f, 0x72, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, - 0x64, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x70, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x2e, 0x66, 0x6f, 0x63, 0x75, 0x73, - 0x28, 0x29, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x72, 0x61, - 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, 0x73, 0x6d, 0x74, - 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x73, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x41, 0x6c, 0x65, 0x78, 0x61, 0x6e, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x66, 0x66, - 0x69, 0x6c, 0x69, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x3e, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x69, - 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x6f, - 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x62, 0x69, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x79, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, - 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x46, 0x72, 0x61, 0x6e, - 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x48, 0x6f, 0x6c, 0x6c, 0x79, 0x77, 0x6f, 0x6f, - 0x64, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0a, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x6f, - 0x70, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x3e, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x77, 0x6f, 0x72, - 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x65, - 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x3e, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x6c, - 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x65, - 0x64, 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x61, 0x72, - 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x3c, 0x2f, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x65, 0x72, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x64, 0x74, 0x77, 0x6f, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, - 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, - 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x74, 0x72, - 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, - 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x79, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6c, 0x69, 0x7a, 0x61, - 0x62, 0x65, 0x74, 0x68, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x73, 0x75, - 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x3c, - 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6e, 0x6f, 0x20, - 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x3b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x69, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x68, - 0x6f, 0x6e, 0x65, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x70, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x61, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x46, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x63, - 0x79, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x73, - 0x61, 0x69, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x74, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x3c, 0x2f, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x64, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0a, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, - 0x20, 0x30, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74, 0x75, 0x61, 0x6c, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x6f, 0x66, 0x74, 0x67, 0x72, 0x61, 0x64, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x68, 0x65, 0x20, 0x62, 0x65, - 0x63, 0x61, 0x6d, 0x65, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6a, 0x73, 0x68, 0x6f, 0x75, 0x73, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x64, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x65, 0x64, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, - 0x65, 0x6e, 0x74, 0x75, 0x72, 0x69, 0x65, 0x73, 0x4a, 0x61, 0x70, 0x61, 0x6e, - 0x65, 0x73, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x61, 0x6c, 0x67, 0x6f, - 0x72, 0x69, 0x74, 0x68, 0x6d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x73, 0x72, 0x65, 0x62, 0x65, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x72, 0x61, - 0x67, 0x65, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, - 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x2d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x46, 0x65, 0x62, - 0x72, 0x75, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, - 0x69, 0x63, 0x61, 0x6c, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x46, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x65, 0x6c, - 0x65, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x09, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x74, 0x68, 0x6f, 0x73, - 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x64, 0x69, 0x66, - 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x63, 0x6f, - 0x6e, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2e, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x22, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x6f, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x41, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x66, 0x75, 0x72, 0x6e, - 0x69, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x20, 0x20, 0x6f, 0x6e, 0x62, 0x6c, 0x75, 0x72, 0x3d, 0x22, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, - 0x72, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x61, 0x62, 0x6f, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x65, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x6e, 0x61, 0x72, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x61, 0x64, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x70, 0x78, 0x3b, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x64, 0x69, 0x72, - 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x22, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, - 0x65, 0x73, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x53, 0x65, 0x70, 0x74, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x61, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, - 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x73, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x6c, 0x61, - 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x63, 0x65, - 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x4a, - 0x65, 0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x74, 0x68, 0x65, 0x79, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x65, 0x73, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x65, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x70, 0x78, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x74, 0x68, - 0x65, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, - 0x6f, 0x75, 0x72, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x62, 0x65, 0x67, 0x61, 0x6e, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, - 0x6d, 0x61, 0x67, 0x6e, 0x69, 0x74, 0x75, 0x64, 0x65, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x6f, 0x63, - 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x3e, 0x3c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x6b, 0x69, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x69, 0x65, - 0x73, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x69, 0x64, 0x65, 0x20, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x77, 0x65, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x73, - 0x70, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x62, 0x75, 0x72, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x20, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, - 0x72, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x4e, 0x6f, - 0x72, 0x77, 0x65, 0x67, 0x69, 0x61, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x70, - 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, - 0x44, 0x61, 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x66, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x65, 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x72, 0x65, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6d, - 0x65, 0x6e, 0x61, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x22, 0x3e, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x41, 0x6d, 0x6f, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x41, 0x69, 0x72, - 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, - 0x6f, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x74, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, - 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x73, - 0x74, 0x69, 0x6c, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, - 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x6d, 0x6f, 0x6c, - 0x65, 0x63, 0x75, 0x6c, 0x65, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x69, - 0x73, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x68, - 0x6f, 0x6f, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6e, 0x67, 0x61, - 0x70, 0x6f, 0x72, 0x65, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, - 0x0a, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x70, 0x72, 0x69, 0x73, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x21, 0x5b, - 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x20, 0x62, 0x67, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x69, - 0x63, 0x69, 0x61, 0x6c, 0x73, 0x73, 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x6c, - 0x79, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x2f, 0x62, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x3e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x57, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x77, - 0x61, 0x73, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x56, 0x65, 0x6e, 0x65, 0x7a, - 0x75, 0x65, 0x6c, 0x61, 0x28, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, - 0x63, 0x66, 0x61, 0x76, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, - 0x69, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x77, 0x61, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x61, 0x77, 0x61, 0x79, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, 0x6c, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x6c, 0x79, 0x64, 0x69, 0x73, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x73, 0x6d, 0x73, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x46, 0x72, 0x69, 0x65, 0x64, 0x72, 0x69, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x69, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x73, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6f, - 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x72, 0x76, - 0x69, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x61, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x61, - 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x6d, - 0x69, 0x73, 0x73, 0x65, 0x64, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, - 0x74, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x73, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x73, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x61, 0x6c, - 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x7b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, - 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x6e, 0x65, - 0x65, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x47, 0x72, - 0x65, 0x61, 0x74, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x65, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x6e, - 0x69, 0x64, 0x65, 0x61, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x22, 0x3e, 0x63, 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x6d, 0x61, - 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x20, 0x6f, 0x66, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x74, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, - 0x65, 0x6e, 0x20, 0x20, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0d, 0x0a, 0x70, 0x72, - 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x73, 0x61, 0x79, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x68, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x48, 0x75, 0x6e, 0x67, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, - 0x66, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x20, 0x61, 0x73, 0x55, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x66, 0x6f, - 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x69, 0x6e, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x68, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x22, 0x3e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x61, 0x6c, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, - 0x63, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x6e, 0x65, 0x61, 0x73, 0x69, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x70, - 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0a, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x65, 0x6c, - 0x69, 0x65, 0x66, 0x20, 0x69, 0x6e, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, - 0x6e, 0x73, 0x61, 0x73, 0x20, 0x66, 0x61, 0x72, 0x20, 0x61, 0x73, 0x70, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x3c, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, - 0x74, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x74, 0x6d, 0x61, 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x73, 0x3e, 0x3c, 0x73, - 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x61, - 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x73, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6f, 0x77, 0x6e, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, - 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x73, 0x77, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3b, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, - 0x74, 0x65, 0x64, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x73, 0x74, 0x4a, - 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x31, 0x3c, 0x2f, 0x66, 0x6f, 0x6f, - 0x74, 0x65, 0x72, 0x3e, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x20, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6e, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x70, 0x68, 0x70, 0x61, 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x65, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x0a, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x63, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6b, 0x65, 0x79, 0x63, 0x6f, 0x6e, 0x64, 0x65, 0x6d, 0x6e, 0x65, 0x64, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x6f, 0x66, - 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x64, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x3e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, 0x72, 0x65, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x77, 0x61, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, - 0x61, 0x6c, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x77, - 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x77, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x22, 0x3e, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x73, 0x65, - 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x20, 0x3c, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3e, 0x67, 0x69, - 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x69, 0x61, 0x6e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x30, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2c, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x2c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, - 0x64, 0x6c, 0x79, 0x43, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x77, - 0x61, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x73, 0x63, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, - 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x2c, 0x20, - 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x75, 0x73, 0x65, 0x75, 0x6d, - 0x20, 0x6f, 0x66, 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x69, 0x61, 0x6e, 0x61, 0x28, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, 0x6e, 0x6e, 0x65, - 0x73, 0x6f, 0x74, 0x61, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x6d, 0x69, - 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x66, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x72, 0x69, - 0x67, 0x68, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, - 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x28, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x73, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, 0x63, 0x6f, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x77, 0x68, 0x6f, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, - 0x6f, 0x66, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x74, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6d, 0x65, 0x61, 0x73, 0x75, - 0x72, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x70, 0x61, 0x70, 0x65, 0x72, 0x62, 0x61, 0x63, 0x6b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3e, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x64, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3e, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x3b, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x2d, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x3d, 0x22, 0x2f, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, 0x2f, 0x74, - 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x61, 0x66, 0x72, 0x69, 0x6b, - 0x61, 0x61, 0x6e, 0x73, 0x65, 0x73, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x74, 0x6f, - 0x66, 0x72, 0x61, 0x6e, 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x76, - 0x69, 0x65, 0xc5, 0xa1, 0x75, 0x6c, 0x69, 0x65, 0x74, 0x75, 0x76, 0x69, 0xc5, - 0xb3, 0xc4, 0x8c, 0x65, 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xc4, 0x8d, 0x65, - 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, - 0xb8, 0xa2, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe8, 0xaa, 0x9e, 0xe7, 0xae, - 0x80, 0xe4, 0xbd, 0x93, 0xe5, 0xad, 0x97, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, - 0xe5, 0xad, 0x97, 0xed, 0x95, 0x9c, 0xea, 0xb5, 0xad, 0xec, 0x96, 0xb4, 0xe4, - 0xb8, 0xba, 0xe4, 0xbb, 0x80, 0xe4, 0xb9, 0x88, 0xe8, 0xae, 0xa1, 0xe7, 0xae, - 0x97, 0xe6, 0x9c, 0xba, 0xe7, 0xac, 0x94, 0xe8, 0xae, 0xb0, 0xe6, 0x9c, 0xac, - 0xe8, 0xa8, 0x8e, 0xe8, 0xab, 0x96, 0xe5, 0x8d, 0x80, 0xe6, 0x9c, 0x8d, 0xe5, - 0x8a, 0xa1, 0xe5, 0x99, 0xa8, 0xe4, 0xba, 0x92, 0xe8, 0x81, 0x94, 0xe7, 0xbd, - 0x91, 0xe6, 0x88, 0xbf, 0xe5, 0x9c, 0xb0, 0xe4, 0xba, 0xa7, 0xe4, 0xbf, 0xb1, - 0xe4, 0xb9, 0x90, 0xe9, 0x83, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0x89, 0x88, 0xe7, - 0xa4, 0xbe, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe6, 0xa6, 0x9c, 0xe9, 0x83, - 0xa8, 0xe8, 0x90, 0xbd, 0xe6, 0xa0, 0xbc, 0xe8, 0xbf, 0x9b, 0xe4, 0xb8, 0x80, - 0xe6, 0xad, 0xa5, 0xe6, 0x94, 0xaf, 0xe4, 0xbb, 0x98, 0xe5, 0xae, 0x9d, 0xe9, - 0xaa, 0x8c, 0xe8, 0xaf, 0x81, 0xe7, 0xa0, 0x81, 0xe5, 0xa7, 0x94, 0xe5, 0x91, - 0x98, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0xba, 0x93, - 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe8, 0x80, 0x85, 0xe5, 0x8a, 0x9e, 0xe5, - 0x85, 0xac, 0xe5, 0xae, 0xa4, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe5, 0x8c, - 0xba, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0xb8, 0x82, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe5, 0x99, 0xa8, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, - 0xb8, 0x82, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe8, 0xb6, - 0x8a, 0xe6, 0x9d, 0xa5, 0xe8, 0xb6, 0x8a, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, - 0xe5, 0x91, 0x98, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe7, 0xbd, 0x91, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, 0xad, - 0x63, 0x75, 0x6c, 0x6f, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x61, - 0x62, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x6f, 0x6e, 0x61, 0x63, 0x75, 0x61, 0x6c, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x64, - 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x73, 0x70, 0x6f, 0x6c, - 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x73, 0x70, 0x75, 0x65, 0x73, - 0x74, 0x61, 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x73, 0x69, - 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x62, 0xc3, 0xba, 0x73, 0x71, 0x75, - 0x65, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x73, - 0x65, 0x67, 0x75, 0x72, 0x69, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x70, 0x72, 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x73, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x65, 0x7a, 0x75, 0x65, 0x6c, - 0x61, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x64, 0x69, 0x63, - 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x6e, 0x6f, 0x76, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x79, 0x65, 0x63, - 0x74, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x73, 0x69, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, - 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0xc3, 0xad, 0x61, 0x69, 0x6d, 0xc3, 0xa1, - 0x67, 0x65, 0x6e, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x72, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x72, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x61, 0x72, 0x69, 0x6f, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x74, 0x65, 0x6c, 0xc3, 0xa9, 0x66, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, - 0x6d, 0x69, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x63, 0x69, 0x6f, - 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x64, 0x61, 0x64, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x72, 0x61, 0x6e, 0xc3, 0xa1, 0x6c, - 0x69, 0x73, 0x69, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, 0x74, 0x6f, 0x73, - 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x74, 0x69, 0x71, 0x75, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, 0x75, 0x6e, - 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, - 0x64, 0x6f, 0x63, 0x61, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x6f, 0x70, 0x69, 0x65, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x64, 0x61, 0x64, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x73, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, 0x6f, 0x6d, 0x65, - 0x72, 0x63, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x65, 0x6a, 0x65, 0x72, 0x63, 0x69, 0x63, 0x69, 0x6f, 0x65, 0x64, 0x69, - 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x61, 0x6c, 0x61, 0x6d, 0x61, 0x6e, - 0x63, 0x61, 0x67, 0x6f, 0x6e, 0x7a, 0xc3, 0xa1, 0x6c, 0x65, 0x7a, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0xc3, 0xad, 0x63, - 0x75, 0x6c, 0x61, 0x72, 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x72, 0x72, 0x61, - 0x67, 0x6f, 0x6e, 0x61, 0x70, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x69, 0x63, 0x61, - 0x6e, 0x6f, 0x76, 0x65, 0x64, 0x61, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x61, 0x70, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, - 0x73, 0x74, 0xc3, 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x6f, 0x62, 0x6a, - 0x65, 0x74, 0x69, 0x76, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x6f, 0x73, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9b, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0x64, 0x69, 0x70, 0x6c, 0x6f, - 0x64, 0x6f, 0x63, 0x73, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x94, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xae, - 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x8a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x80, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x20, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x26, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, - 0x6a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x62, 0x72, 0x65, 0x61, 0x64, 0x63, - 0x72, 0x75, 0x6d, 0x62, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, - 0x73, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x69, 0x66, - 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x4e, - 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x3c, 0x6d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, - 0x6f, 0x78, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x73, 0x20, 0x77, 0x65, - 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x75, 0x6e, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x55, - 0x41, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, - 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x20, 0x3d, 0x20, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x69, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x72, 0x26, 0x67, 0x74, - 0x3b, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x70, 0x6f, - 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x67, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x77, 0x73, - 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x54, 0x65, 0x63, - 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x72, 0x6c, 0x69, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, - 0x6e, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x2e, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x62, - 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x6f, 0x64, - 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x70, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x6f, 0x6e, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x3d, 0x22, 0x3c, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x65, - 0x6e, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x69, 0x70, - 0x6c, 0x69, 0x6e, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x22, - 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, - 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x28, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x22, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x20, 0x64, 0x65, 0x6d, - 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x74, 0x69, 0x63, 0x70, 0x78, 0x3b, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x75, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x7a, 0x65, 0x64, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6d, 0x61, 0x69, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x62, 0x75, - 0x6c, 0x61, 0x72, 0x79, 0x68, 0x79, 0x70, 0x6f, 0x74, 0x68, 0x65, 0x73, 0x69, - 0x73, 0x2e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x22, 0x61, 0x73, 0x73, 0x75, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x74, 0x73, 0x65, 0x78, 0x70, - 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x6f, 0x6f, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x76, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x6e, - 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x67, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x2f, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x75, 0x6e, 0x69, 0x73, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x72, - 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x30, 0x70, 0x78, 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x0a, 0x0a, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, - 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x65, - 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x61, 0x6e, 0x67, - 0x3d, 0x22, 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0d, 0x0a, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x20, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, - 0x72, 0x65, 0x6d, 0x65, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, - 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x22, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x50, 0x6f, 0x72, - 0x74, 0x75, 0x67, 0x75, 0x65, 0x73, 0x65, 0x73, 0x75, 0x62, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x65, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, - 0x6c, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x61, 0x6c, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, - 0x20, 0x23, 0x61, 0x70, 0x61, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, - 0x7a, 0x65, 0x64, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, - 0x67, 0x75, 0x69, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x61, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x65, 0x64, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x69, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x78, 0x3b, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x66, 0x75, 0x6c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x69, 0x6c, 0x6c, 0x65, 0x6e, 0x6e, 0x69, 0x75, 0x6d, 0x68, 0x69, - 0x73, 0x20, 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x74, 0x68, 0x65, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6e, 0x6f, 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x6f, - 0x75, 0x72, 0x61, 0x67, 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x72, 0x65, 0x78, 0x70, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x6c, 0x65, 0x67, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x30, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x6c, 0x79, 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x66, 0x69, 0x76, 0x65, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x69, 0x6e, 0x67, 0x31, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x6a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x62, 0x75, 0x74, - 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x2c, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x4c, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x55, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, - 0x70, 0x3b, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x6f, 0x62, - 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x6c, 0x79, 0x2c, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x65, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x6e, 0x65, 0x64, 0x2a, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, - 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x20, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, - 0x2f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x69, 0x20, - 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x73, 0x6f, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x7d, 0x0a, 0x3c, - 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x70, 0x68, 0x61, 0x73, 0x69, 0x7a, 0x65, - 0x64, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3c, 0x2f, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x4d, 0x65, 0x61, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x54, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x73, 0x69, 0x64, 0x65, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69, 0x6e, 0x67, 0x61, 0x6e, - 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x73, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x74, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x09, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x6e, 0x6f, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x65, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x72, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x4a, 0x61, - 0x6e, 0x75, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x09, 0x64, - 0x69, 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x3d, 0x22, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x75, 0x78, 0x65, 0x6d, - 0x62, 0x6f, 0x75, 0x72, 0x67, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x65, - 0x6e, 0x67, 0x61, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x22, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, - 0x77, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x3d, 0x22, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x45, 0x6e, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x69, 0x63, 0x61, 0x6c, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, - 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, - 0x61, 0x6e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x73, 0x65, 0x64, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x41, 0x6c, 0x65, - 0x78, 0x61, 0x6e, 0x64, 0x72, 0x69, 0x61, 0x72, 0x65, 0x74, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0a, 0x0a, - 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x6f, 0x62, 0x6c, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x64, 0x76, - 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6e, - 0x73, 0x3c, 0x62, 0x61, 0x73, 0x65, 0x20, 0x68, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x6c, 0x79, 0x77, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x6e, - 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x61, 0x75, - 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x74, - 0x77, 0x6f, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x46, 0x65, 0x62, 0x72, - 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x20, 0x6f, 0x66, 0x73, 0x77, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x69, 0x73, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, - 0x6c, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6e, - 0x65, 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x6d, 0x79, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x69, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x65, - 0x64, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x68, 0x61, 0x73, 0x20, 0x6c, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x6e, - 0x64, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, - 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x65, 0x72, 0x65, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x53, 0x63, 0x69, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x6e, 0x6f, 0x2d, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x4c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x76, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x32, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x44, 0x75, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, - 0x6e, 0x74, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, - 0x65, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x2f, 0x75, 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x73, 0x79, - 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x75, - 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x75, 0x6e, 0x65, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x64, - 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, - 0x73, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x20, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, - 0x73, 0x20, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x3c, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x41, 0x72, 0x63, 0x68, 0x62, 0x69, - 0x73, 0x68, 0x6f, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6e, - 0x6f, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x73, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x6d, - 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x45, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x65, 0x67, 0x67, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, - 0x73, 0x6d, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x22, 0x3e, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x61, 0x72, - 0x72, 0x69, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x2d, 0x6a, 0x73, 0x73, 0x64, - 0x6b, 0x27, 0x29, 0x29, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x63, - 0x61, 0x73, 0x75, 0x61, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x73, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x61, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x50, 0x68, - 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, 0x68, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x77, 0x61, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x67, 0x75, 0x61, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, - 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x73, 0x61, - 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x6f, 0x6e, 0x6b, 0x65, 0x79, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x3a, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, - 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x72, 0x63, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x62, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0a, 0x09, 0x09, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x65, 0x72, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x64, 0x75, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, - 0x65, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x2c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6e, 0x69, 0x63, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, - 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, - 0x62, 0x73, 0x69, 0x64, 0x69, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x63, 0x79, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x66, 0x66, 0x6f, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, - 0x66, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x74, 0x65, 0x6d, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x6c, 0x79, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x61, 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x74, 0x72, - 0x61, 0x76, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x73, 0x20, - 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, - 0x65, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x28, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, - 0x6c, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x71, 0x75, 0x61, 0x72, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x3c, 0x2f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x62, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x22, 0x20, 0x64, - 0x69, 0x72, 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x4c, 0x69, 0x65, 0x75, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x75, 0x70, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, - 0x72, 0x67, 0x75, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x61, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, - 0x6e, 0x27, 0x73, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x75, 0x70, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x73, 0x70, 0x6f, - 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2e, - 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x69, 0x6e, 0x20, - 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, - 0x77, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x70, 0x6f, - 0x6c, 0x69, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x77, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, - 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x20, 0x66, 0x6f, 0x72, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x65, 0x73, 0x62, 0x75, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6c, 0x61, 0x62, - 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x67, 0x61, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x2f, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x74, 0x6f, 0x70, 0x74, 0x68, - 0x65, 0x20, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x64, 0x3d, 0x22, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x74, 0x68, - 0x72, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x63, 0x75, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x62, 0x75, 0x69, - 0x6c, 0x74, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x61, - 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x44, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, - 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4b, 0x69, 0x6e, - 0x67, 0x64, 0x6f, 0x6d, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, - 0x74, 0x69, 0x72, 0x65, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x46, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x69, - 0x73, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x64, 0x75, 0x6d, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, - 0x2e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x64, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3d, 0x22, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x62, - 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x6f, - 0x72, 0x6d, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x70, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x61, 0x6e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x76, 0x65, - 0x72, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x76, 0x65, 0x62, 0x79, 0x20, 0x66, 0x61, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x70, - 0x75, 0x72, 0x73, 0x75, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, - 0x61, 0x67, 0x72, 0x65, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x68, 0x69, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x68, 0x65, 0x72, 0x74, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x64, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x30, - 0x20, 0x31, 0x65, 0x6d, 0x20, 0x31, 0x65, 0x6d, 0x3b, 0x42, 0x61, 0x73, 0x6b, - 0x65, 0x74, 0x62, 0x61, 0x6c, 0x6c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, - 0x63, 0x73, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2f, 0x22, 0x20, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x69, 0x74, 0x74, 0x73, 0x62, 0x75, 0x72, 0x67, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x3c, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x28, 0x66, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0d, 0x0a, 0x20, 0x6f, 0x63, 0x63, 0x61, - 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, - 0x20, 0x69, 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x2c, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x74, 0x61, - 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x73, - 0x74, 0x72, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, - 0x66, 0x6f, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, - 0x2e, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x6f, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6c, - 0x79, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x64, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, - 0x64, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0xd7, - 0xa2, 0xd7, 0x91, 0xd7, 0xa8, 0xd7, 0x99, 0xd7, 0xaa, 0xd9, 0x81, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xb3, 0xdb, 0x8c, 0x64, 0x65, 0x73, 0x61, 0x72, 0x72, 0x6f, - 0x6c, 0x6c, 0x6f, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x65, 0x64, 0x75, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x70, - 0x74, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x64, 0x6f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x75, 0x62, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x64, - 0x6f, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x64, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, - 0xad, 0x63, 0x75, 0x6c, 0x6f, 0x73, 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x65, 0x73, 0x73, 0x69, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, - 0x72, 0x65, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x69, 0x74, - 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x69, 0x64, 0x61, - 0x64, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x6f, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x6f, 0x62, 0x6c, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x6f, 0x72, 0x69, 0x6f, 0x73, 0x74, 0x65, 0x63, 0x68, - 0x6e, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x65, 0x73, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, - 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x64, 0x69, 0x73, - 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x76, 0x61, 0x6c, 0x6c, 0x61, 0x64, 0x6f, 0x6c, 0x69, 0x64, 0x62, 0x69, - 0x62, 0x6c, 0x69, 0x6f, 0x74, 0x65, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, - 0x69, 0x6f, 0x70, 0x6f, 0x6c, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x73, 0x61, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, - 0x65, 0x7a, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x73, - 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x63, 0x6f, - 0x6e, 0xc3, 0xb3, 0x6d, 0x69, 0x63, 0x61, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x72, 0x6f, 0x64, 0x72, 0xc3, 0xad, 0x67, 0x75, 0x65, - 0x7a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x61, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, - 0x72, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb6, 0xd0, - 0xb5, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, - 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, - 0x82, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb7, - 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd1, 0x82, 0xd1, 0x81, 0xd0, - 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, - 0x83, 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0x9f, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb7, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, 0xd0, 0xb7, 0xd0, 0xb8, 0xd0, - 0xbd, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, - 0xb0, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, - 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, - 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xb4, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0x9f, 0xd0, - 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, - 0xb9, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x82, - 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd1, 0x83, 0xd0, 0xa1, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xba, - 0xd1, 0x82, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, - 0x9a, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbd, - 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xb9, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, - 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd1, 0x8c, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0x9a, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xa4, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbc, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd1, 0x82, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, - 0x8f, 0xd1, 0x87, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, 0x86, - 0xd1, 0x86, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd1, 0x80, 0xd1, 0x82, 0xd1, - 0x80, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd1, 0x85, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, - 0xb0, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, 0xb9, 0xd1, 0x87, - 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, - 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd1, 0x85, - 0xd0, 0xbc, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, - 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x8e, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x80, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x86, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0x90, 0xd1, 0x80, - 0xd1, 0x85, 0xd0, 0xb8, 0xd0, 0xb2, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, - 0xaf, 0xd9, 0x89, 0xd8, 0xa5, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, - 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb6, - 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xb3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x85, 0xd9, - 0x8a, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x85, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x89, 0xd8, 0xaa, 0xd8, - 0xb9, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xaa, 0xd8, 0xb7, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa5, 0xd8, 0xb1, 0xd9, - 0x81, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xb7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd8, 0xba, 0xd8, 0xa9, 0xd8, - 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x8a, 0xd8, 0xae, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb9, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0xd9, 0x83, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb7, 0xd9, 0x81, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, - 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, - 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, - 0xa7, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xaa, - 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xb1, 0xd8, - 0xb4, 0xd9, 0x8a, 0xd9, 0x81, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, - 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa3, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x81, 0xd8, 0xb1, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd9, 0x81, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd9, 0x83, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, - 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, - 0xa3, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd9, 0x83, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, - 0x8a, 0xd8, 0xb1, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd8, 0xaf, 0xd8, 0xa8, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd8, 0xb7, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb7, 0xd9, 0x82, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd8, 0xac, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x85, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x83, 0x73, 0x42, 0x79, 0x54, - 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, - 0x64, 0x20, 0x23, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, - 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x6f, 0x6e, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, - 0x64, 0x61, 0x73, 0x68, 0x3b, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x6c, 0x79, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, - 0x2f, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x74, - 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x65, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3a, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, - 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x65, 0x76, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, - 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x75, 0x72, 0x6c, 0x28, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x73, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x50, 0x47, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, - 0x65, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x75, 0x6e, 0x64, 0x72, - 0x65, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, - 0x63, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x69, - 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, - 0x61, 0x6e, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x6c, 0x74, - 0x3b, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x73, 0x79, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, - 0x73, 0x77, 0x69, 0x74, 0x7a, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x44, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x0a, 0x0a, 0x41, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x20, 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, - 0x65, 0x61, 0x3e, 0x74, 0x68, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x62, 0x69, 0x72, - 0x64, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x73, 0x70, 0x65, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, - 0x63, 0x73, 0x0a, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, - 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x74, 0x65, 0x72, 0x72, - 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x64, 0x36, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x73, 0x61, 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x3b, 0x63, - 0x61, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x73, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x66, 0x6f, 0x72, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x41, 0x66, 0x67, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x73, 0x75, 0x72, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x3c, - 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x61, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x28, 0x29, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x2e, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x65, 0x61, 0x63, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x45, 0x61, 0x73, 0x74, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x3c, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, - 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x44, - 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x66, 0x61, 0x6d, - 0x6f, 0x75, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x73, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x74, 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x20, 0x74, 0x6f, 0x64, 0x6f, - 0x63, 0x74, 0x72, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x63, 0x63, 0x75, - 0x70, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x6e, 0x61, 0x69, 0x73, 0x73, 0x61, - 0x6e, 0x63, 0x65, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x64, 0x65, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x2f, 0x3c, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x76, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, - 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, - 0x74, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x6f, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x65, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x74, 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x30, 0x30, - 0x25, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x3c, - 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, 0x6f, 0x6e, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3d, 0x22, 0x29, 0x2e, 0x61, 0x64, 0x64, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x64, 0x61, 0x75, 0x67, 0x68, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x62, 0x72, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x65, 0x61, - 0x64, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x31, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x61, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, - 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x77, 0x61, 0x73, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x21, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x6e, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x2d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x3c, 0x68, 0x34, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x4e, 0x6f, 0x76, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x65, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x77, 0x69, 0x64, 0x65, 0x6c, - 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x49, 0x74, - 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x74, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x72, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, - 0x6e, 0x74, 0x73, 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, 0x72, 0x73, 0x68, 0x69, 0x70, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x20, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x70, 0x78, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x61, 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x6f, 0x6c, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x73, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x3d, 0x22, 0x68, 0x69, 0x67, 0x68, 0x20, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x66, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, - 0x79, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x22, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x3a, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x2f, 0x6a, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x69, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, - 0x61, 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x69, 0x74, 0x20, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x6f, 0x20, 0x73, - 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x62, - 0x65, 0x6c, 0x69, 0x65, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, - 0x6f, 0x66, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, - 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x65, - 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x6c, 0x65, 0x61, 0x76, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x61, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x69, 0x74, - 0x79, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x61, 0x72, - 0x74, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x65, 0x6d, 0x70, 0x68, 0x61, - 0x73, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x22, 0x3e, 0x3c, 0x2f, 0x69, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x3e, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x73, 0x3a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x6f, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x76, 0x69, 0x65, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x73, 0x65, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x59, - 0x6f, 0x72, 0x6b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, - 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x63, - 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x3b, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, - 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x22, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x72, 0x4d, - 0x75, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3d, 0x22, 0x32, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x65, 0x64, 0x75, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x3d, 0x22, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2f, - 0x44, 0x54, 0x44, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x63, 0x79, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6c, 0x65, - 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x77, 0x61, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x2c, 0x73, 0x61, 0x6e, 0x73, - 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, - 0x63, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x64, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x31, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x61, 0x6e, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x63, 0x61, 0x6e, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x6f, 0x47, 0x4d, 0x54, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x41, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x69, 0x6d, 0x67, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x6f, 0x66, 0x77, 0x69, 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x77, 0x65, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x63, - 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x6e, 0x20, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x61, - 0x6e, 0x74, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x74, 0x68, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, - 0x6c, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x68, 0x6f, - 0x72, 0x74, 0x2d, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x74, 0x74, - 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x2c, 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x22, - 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x33, 0x49, 0x6e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2d, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, - 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x77, 0x6f, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x3c, 0x2f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, - 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x73, 0x75, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x73, 0x73, 0x69, - 0x70, 0x70, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x62, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x77, 0x68, 0x61, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x73, 0x69, 0x74, 0x75, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x6d, 0x6f, - 0x73, 0x70, 0x68, 0x65, 0x72, 0x69, 0x63, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x73, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x67, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x64, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x76, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3c, - 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6d, 0x61, - 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6d, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x50, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x69, 0x61, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x69, 0x74, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x76, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x49, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2c, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x73, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x75, 0x62, 0x64, - 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, - 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, - 0x79, 0x77, 0x61, 0x73, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x6c, 0x79, 0x6f, - 0x75, 0x74, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, - 0x6f, 0x67, 0x3d, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x75, - 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, - 0x22, 0x3e, 0x0a, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x77, 0x61, 0x73, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x74, - 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x61, 0x62, 0x65, 0x63, - 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, - 0x6c, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x61, 0x6d, - 0x6f, 0x6e, 0x67, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x6f, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, - 0x31, 0x30, 0x30, 0x25, 0x3b, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x74, 0x6f, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x63, 0x75, 0x74, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, - 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x65, 0x6c, 0x79, 0x2c, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3d, 0x22, 0x31, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, - 0x79, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x63, 0x69, 0x74, 0x69, 0x7a, - 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x61, 0x6e, 0x73, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x73, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x61, 0x73, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x3c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x64, - 0x6f, 0x77, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, 0x73, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x64, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x74, 0x68, 0x65, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x3e, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x0d, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x66, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x72, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x69, 0x72, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x44, 0x75, 0x72, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, - 0x65, 0x6e, 0x74, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, - 0x64, 0x65, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x61, - 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x62, 0x79, 0x6e, 0x65, 0x65, 0x64, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, - 0x75, 0x73, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x65, 0x64, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x2d, 0x64, 0x61, 0x79, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, - 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, - 0x65, 0x77, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x62, 0x75, 0x74, - 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x6f, 0x75, - 0x73, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, - 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x61, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, - 0x6f, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x0a, 0x09, 0x3c, 0x2f, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x72, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x77, 0x61, 0x72, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x62, - 0x79, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, - 0x74, 0x61, 0x72, 0x79, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x74, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x6f, 0x20, 0x6d, - 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x74, 0x6f, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x2e, 0x53, 0x2e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x69, 0x6e, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x73, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x31, 0x73, 0x74, 0x20, 0x45, 0x61, 0x72, 0x6c, 0x20, 0x6f, 0x66, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x2f, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x62, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x61, 0x72, - 0x65, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x64, 0x64, 0x46, 0x61, 0x76, - 0x6f, 0x72, 0x69, 0x74, 0x65, 0x63, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x70, 0x61, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, - 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x74, 0x6f, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, - 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x6c, 0x61, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x62, 0x6f, 0x6f, - 0x6b, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x2f, 0x74, 0x64, 0x3e, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, 0x66, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x77, 0x65, - 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x6e, 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x69, - 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x4c, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, - 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x62, 0x6c, 0x61, 0x63, 0x6b, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x63, 0x61, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x69, 0x74, - 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x72, 0x61, 0x64, 0x69, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x72, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, - 0x75, 0x6c, 0x64, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x61, - 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x69, 0x74, 0x75, 0x74, 0x65, 0x73, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x65, 0x72, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, - 0x69, 0x3e, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, - 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x64, 0x74, 0x68, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x65, 0x67, 0x69, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x68, 0x61, 0x73, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, - 0x2c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x65, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x77, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x77, 0x73, 0x6c, 0x65, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x69, 0x74, 0x77, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, - 0x73, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x65, 0x63, 0x6f, - 0x6e, 0x6f, 0x6d, 0x79, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, - 0x73, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, - 0x64, 0x20, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x61, 0x72, 0x65, 0x61, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x54, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x32, 0x20, 0x7c, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x43, 0x68, 0x72, 0x69, - 0x73, 0x74, 0x69, 0x61, 0x6e, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x72, - 0x63, 0x68, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x69, 0x64, - 0x65, 0x6e, 0x63, 0x65, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x63, 0x6f, - 0x6d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2c, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x62, 0x6c, - 0x65, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x66, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, - 0x72, 0x6e, 0x69, 0x61, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x61, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x6d, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x09, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x74, 0x22, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x09, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x2f, 0x77, 0x61, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x61, 0x73, 0x20, 0x73, - 0x65, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x61, - 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, - 0x73, 0x74, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x62, 0x65, - 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x61, 0x6e, 0x64, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2c, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, - 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, 0x2e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x20, 0x61, 0x73, 0x74, 0x6f, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x73, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x4f, 0x66, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x69, - 0x73, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, - 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x74, 0x68, 0x65, 0x79, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc4, 0x8d, - 0x69, 0x6e, 0x61, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x73, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x64, 0x61, 0x64, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x74, 0x65, 0x63, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x70, 0x75, 0x6e, 0x74, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0x61, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x65, 0xc3, 0xb1, 0x61, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x72, 0x73, 0x65, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x74, 0x61, 0x6d, 0x69, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x65, 0x67, 0xc3, 0xad, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x64, 0x61, 0x64, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x63, 0x72, - 0x65, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, - 0x73, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0x75, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x69, 0x72, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x63, 0x69, - 0xc3, 0xb3, 0x6e, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, - 0x73, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, - 0x73, 0x74, 0x75, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x67, 0x75, 0x61, 0x64, 0x61, 0x6c, 0x61, - 0x6a, 0x61, 0x72, 0x61, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x64, - 0x6f, 0x73, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, - 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x66, 0xc3, 0xad, 0x61, 0x61, 0x75, 0x74, 0x6f, - 0x72, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x69, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, - 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x63, 0x69, 0x64, 0x6f, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x76, 0x65, 0x67, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x64, - 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, - 0x22, 0x20, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x2f, 0x3c, 0x21, - 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, - 0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x20, 0x21, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x3b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x31, - 0x38, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x73, - 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x2f, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x75, 0x6e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x46, 0x75, 0x72, 0x74, - 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x62, 0x65, 0x6c, 0x69, 0x65, - 0x76, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x54, 0x4d, 0x4c, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x64, 0x72, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x65, 0x61, 0x64, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, - 0x75, 0x6e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x50, - 0x65, 0x6e, 0x6e, 0x73, 0x79, 0x6c, 0x76, 0x61, 0x6e, 0x69, 0x61, 0x41, 0x73, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x3c, 0x68, 0x74, - 0x6d, 0x6c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x26, 0x6c, 0x74, 0x3b, - 0x2f, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x64, 0x65, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x68, 0x69, 0x6c, 0x61, 0x64, - 0x65, 0x6c, 0x70, 0x68, 0x69, 0x61, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, - 0x6f, 0x70, 0x3a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3d, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x2e, 0x64, 0x74, - 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x74, 0x67, 0x65, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x75, - 0x72, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, - 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x69, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x64, 0x65, 0x6d, 0x6f, - 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x65, 0x6d, 0x6f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x73, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x3c, 0x64, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x20, - 0x6f, 0x66, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6c, - 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x20, 0x74, 0x61, 0x62, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x77, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x72, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, - 0x65, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x3b, - 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x6a, 0x75, - 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x61, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x49, 0x6e, 0x20, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2b, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6c, 0x6c, 0x79, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x26, 0x6c, 0x74, 0x3b, 0x6d, 0x61, 0x74, 0x68, 0x26, 0x67, 0x74, 0x3b, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x6e, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6d, 0x70, - 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, - 0x22, 0x61, 0x6c, 0x6c, 0x22, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x3b, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2f, 0x2f, 0x45, 0x4e, - 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x43, 0x68, 0x61, - 0x6d, 0x70, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x63, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x21, 0x5b, 0x65, 0x6e, - 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x7d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x75, 0x6e, - 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x47, - 0x75, 0x69, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x76, - 0x65, 0x72, 0x77, 0x68, 0x65, 0x6c, 0x6d, 0x69, 0x6e, 0x67, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x0a, 0x2e, 0x6e, 0x6f, - 0x6e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, - 0x70, 0x78, 0x20, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, - 0x3a, 0x31, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x69, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x63, 0x68, 0x69, - 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x74, - 0x64, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x72, - 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x61, 0x6c, 0x66, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x61, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x65, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x76, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6d, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x4a, 0x65, 0x73, 0x75, 0x73, 0x20, - 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x69, 0x73, 0x61, 0x67, 0x72, 0x65, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3a, 0x72, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, - 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x3a, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x68, 0x6f, 0x6f, 0x64, 0x61, - 0x72, 0x6d, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x72, 0x65, - 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x4e, 0x6f, 0x6e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x74, 0x65, 0x6d, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x0a, 0x09, 0x09, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x28, 0x73, 0x65, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, - 0x29, 0x2e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x09, 0x09, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x09, 0x09, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x65, - 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x48, 0x61, 0x6c, 0x6c, 0x20, 0x6f, - 0x66, 0x20, 0x46, 0x61, 0x6d, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x76, 0x65, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x7b, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x20, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x3e, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6e, 0x65, 0x69, - 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x09, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x20, 0x55, - 0x6e, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, - 0x67, 0x65, 0x64, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x61, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42, 0x75, 0x62, - 0x62, 0x6c, 0x65, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x69, 0x6e, - 0x20, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x63, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x78, 0x3b, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x72, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x68, - 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x73, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, - 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x6d, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x6f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x67, 0x75, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x6e, 0x6f, 0x77, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x61, 0x73, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x61, 0x72, - 0x6c, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x53, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x61, 0x76, 0x69, 0x61, 0x6e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, - 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, - 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x6f, 0x75, - 0x73, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x77, 0x61, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x61, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x74, - 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x64, 0x6e, 0x6f, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x72, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x78, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6c, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x61, 0x6e, - 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x68, 0x6f, 0x77, - 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x79, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x73, 0x6d, 0x20, 0x6f, 0x66, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x6c, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x49, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, - 0x65, 0x61, 0x6e, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x62, 0x65, 0x74, - 0x74, 0x65, 0x72, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x57, 0x6f, 0x72, 0x6c, - 0x64, 0x20, 0x57, 0x61, 0x72, 0x20, 0x49, 0x49, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x79, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x6f, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x75, 0x70, - 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62, - 0x65, 0x69, 0x6e, 0x67, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x63, - 0x61, 0x6d, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x3e, - 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x76, - 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x78, 0x70, - 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x20, - 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, - 0x22, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x3c, - 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x73, 0x61, - 0x69, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x68, 0x69, 0x6c, - 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x68, 0x79, 0x70, 0x6f, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, - 0x6f, 0x70, 0x68, 0x65, 0x72, 0x73, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x69, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x74, 0x6f, 0x77, 0x65, 0x72, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, - 0x68, 0x65, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x62, 0x65, 0x74, - 0x77, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x6c, 0x79, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, - 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x74, 0x68, 0x65, 0x20, - 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, - 0x64, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x67, 0x69, 0x76, - 0x65, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x78, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x74, 0x75, 0x72, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x61, 0x73, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, - 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x73, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, - 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x61, 0x74, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x72, 0x65, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x64, 0x65, 0x66, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, - 0x66, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x3c, 0x6c, - 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x68, 0x65, 0x20, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3a, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x3e, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x2c, 0x68, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x20, - 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x61, 0x6e, 0x64, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x66, 0x65, 0x28, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x3e, 0x3c, 0x75, 0x6c, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6e, - 0x6f, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x79, 0x49, 0x6e, - 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x2c, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, - 0x79, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, - 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, - 0x6e, 0x67, 0x61, 0x72, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x76, 0x65, 0x72, - 0x28, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x6e, 0x20, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x6f, 0x72, 0x74, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x68, 0x61, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x6f, 0x66, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x61, 0x72, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x63, 0x6f, 0x72, - 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, - 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, 0x73, - 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x77, 0x61, 0x73, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x75, 0x6d, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x65, 0x61, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, - 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x31, 0x2f, 0x5e, 0x5c, 0x73, 0x2b, - 0x7c, 0x5c, 0x73, 0x2b, 0x24, 0x2f, 0x67, 0x65, 0x29, 0x7b, 0x74, 0x68, 0x72, - 0x6f, 0x77, 0x20, 0x65, 0x7d, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x64, 0x65, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x09, - 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x67, 0x6c, 0x69, - 0x73, 0x68, 0x20, 0x28, 0x55, 0x4b, 0x29, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0xd0, 0x9c, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xa1, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xbe, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, - 0xa9, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, - 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe7, - 0xb9, 0x81, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe6, 0x9c, - 0x89, 0xe9, 0x99, 0x90, 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe4, 0xba, 0xba, - 0xe6, 0xb0, 0x91, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe9, 0x98, 0xbf, 0xe9, - 0x87, 0x8c, 0xe5, 0xb7, 0xb4, 0xe5, 0xb7, 0xb4, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, - 0x9a, 0xe4, 0xb8, 0xbb, 0xe4, 0xb9, 0x89, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, - 0xe7, 0xb3, 0xbb, 0xe7, 0xbb, 0x9f, 0xe6, 0x94, 0xbf, 0xe7, 0xad, 0x96, 0xe6, - 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x68, 0x65, 0x72, 0x72, 0x61, 0x6d, 0x69, 0x65, 0x6e, - 0x74, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, - 0x63, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x64, 0x6f, 0x73, - 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, - 0x6c, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0xc3, 0xa1, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x6f, 0x73, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, - 0x61, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x79, 0x75, 0x6e, 0x74, 0x61, 0x6d, 0x69, - 0x65, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x4c, 0x69, - 0x62, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x6e, - 0x6f, 0x73, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x63, 0x75, 0x6d, 0x70, 0x6c, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, 0x63, 0x61, 0x61, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x64, 0x65, 0x73, 0x63, 0x6f, - 0x6e, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x6e, 0x63, 0x69, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x65, 0x6e, 0x66, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, - 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x73, - 0x69, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x8b, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb0, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, - 0x81, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, - 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd0, 0xb6, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x83, - 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0x9e, 0xd0, 0xb4, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x85, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x88, 0xd0, 0xbe, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb2, 0xd1, 0x81, 0xd1, - 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb0, - 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, 0x8b, 0xd0, 0xb9, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xbf, 0xd1, 0x8b, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd0, 0xb3, 0xd0, 0xb8, - 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb1, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, 0xba, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, - 0xbb, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x85, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xba, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xb2, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x81, 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xba, 0xd1, - 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, - 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbf, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbe, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, - 0xd1, 0x89, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x82, 0xd0, 0xa1, - 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb9, 0xd0, 0xbd, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbc, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbd, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, - 0x85, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8e, 0xd1, - 0x8f, 0xd0, 0xbd, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x8f, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, - 0xb0, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xb7, 0xd1, 0x8f, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, - 0x86, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x82, - 0xd1, 0x8b, 0xd0, 0x9b, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb8, 0xd0, - 0xb5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9d, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x97, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa0, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x9f, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8c, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa5, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, - 0xaa, 0xd8, 0xb7, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb3, 0xd8, 0xb7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x81, - 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb6, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb2, 0xd9, 0x8a, 0xd8, - 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa9, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa8, - 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x88, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x8a, 0xd8, 0xa7, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x82, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x82, 0xd9, - 0x85, 0xd8, 0xad, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xb8, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, - 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x82, 0xd8, 0xb1, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, - 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xac, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd9, 0x86, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x86, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xb7, 0xd9, - 0x81, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xaa, 0xd9, 0x88, 0xd9, - 0x82, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x88, - 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd8, 0xae, 0xd8, 0xb5, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xae, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, - 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, - 0xb9, 0xd8, 0xa9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, - 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, - 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd8, 0xae, 0xd9, 0x88, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb3, - 0xd8, 0xaa, 0xd8, 0xba, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xb8, 0xd9, 0x8a, 0xd9, 0x85, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, 0x70, 0x6f, - 0x72, 0x61, 0x72, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x43, - 0x68, 0x69, 0x6c, 0x64, 0x28, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x22, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, - 0x69, 0x63, 0x6f, 0x22, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x73, 0x73, 0x61, 0x63, 0x68, 0x75, - 0x73, 0x65, 0x74, 0x74, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x20, 0x61, 0x73, 0x70, 0x72, 0x6f, 0x6e, 0x75, 0x6e, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x23, 0x66, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, - 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, - 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x6d, 0x61, 0x74, - 0x68, 0x26, 0x67, 0x74, 0x3b, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x20, - 0x43, 0x6f, 0x75, 0x72, 0x74, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x61, 0x70, 0x78, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x6f, 0x4c, 0x6f, 0x77, 0x65, 0x72, - 0x43, 0x61, 0x73, 0x65, 0x28, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, 0x6f, 0x75, - 0x73, 0x6e, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x72, 0x72, - 0x61, 0x6e, 0x65, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x68, 0x72, 0x65, 0x66, 0x77, 0x61, 0x73, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x69, 0x73, 0x63, 0x6f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x7b, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x6f, 0x70, 0x68, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x47, 0x72, 0x65, 0x61, 0x74, 0x20, 0x42, 0x72, - 0x69, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x3b, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, - 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x61, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x09, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x22, - 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x70, - 0x75, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x7c, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0x2f, 0x78, 0x2d, 0x73, 0x68, 0x6f, 0x63, 0x6b, - 0x77, 0x61, 0x76, 0x65, 0x2d, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, - 0x69, 0x64, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x76, 0x69, 0x65, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x73, 0x65, 0x78, 0x75, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x72, 0x73, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x20, 0x23, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x6f, 0x2d, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, - 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x69, 0x61, 0x6e, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x28, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6a, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x6f, - 0x76, 0x65, 0x72, 0x3d, 0x22, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x65, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x61, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, - 0x74, 0x65, 0x6d, 0x70, 0x74, 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, - 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x69, 0x74, 0x20, 0x69, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x61, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x62, 0x65, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x27, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x28, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, - 0x65, 0x66, 0x74, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x62, 0x61, 0x73, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x6d, 0x20, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x75, 0x6e, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x69, 0x73, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x09, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x65, 0x20, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, - 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x09, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, - 0x65, 0x66, 0x74, 0x3a, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x73, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x2d, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, - 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x61, 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x61, - 0x6c, 0x77, 0x61, 0x79, 0x73, 0x61, 0x72, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, - 0x22, 0x22, 0x20, 0x2f, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x64, 0x69, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x65, 0x73, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x69, 0x74, 0x73, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x65, 0x64, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x75, 0x61, 0x74, 0x65, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x74, 0x77, 0x6f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2c, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x68, 0x61, - 0x6c, 0x66, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, - 0x74, 0x75, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x69, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x64, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x74, - 0x72, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x61, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x77, - 0x65, 0x72, 0x66, 0x75, 0x6c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x74, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x6e, 0x64, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x6e, 0x6f, - 0x75, 0x6e, 0x63, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, - 0x41, 0x4c, 0x54, 0x45, 0x52, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x3f, - 0x73, 0x6f, 0x72, 0x74, 0x3d, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x64, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x68, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x6f, 0x73, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, - 0x72, 0x69, 0x63, 0x61, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x61, 0x6d, 0x65, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6e, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x3b, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x3b, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, 0x20, 0x4d, - 0x65, 0x6c, 0x61, 0x79, 0x75, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x62, 0x6f, - 0x6b, 0x6d, 0xc3, 0xa5, 0x6c, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x6e, 0x79, - 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc5, 0xa1, - 0xc4, 0x8d, 0x69, 0x6e, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x6d, 0x62, 0x69, - 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x75, - 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, - 0x0a, 0x3c, 0x2f, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3d, 0x68, 0x74, 0x74, 0x70, - 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x3c, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x7d, - 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x2e, 0x73, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x28, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x29, 0x3b, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, - 0x2d, 0x3e, 0x0d, 0x0a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x55, 0x6e, 0x66, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, - 0x3b, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, - 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x3e, 0x3d, 0x27, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x27, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x3c, 0x6c, - 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, - 0x6e, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x20, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x41, 0x63, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x2d, 0x2d, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, - 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, - 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, - 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x6d, - 0x6f, 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, - 0x61, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, - 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, - 0x65, 0x72, 0x65, 0x64, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, - 0x7b, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x73, 0x29, 0x3b, - 0x20, 0x6a, 0x73, 0x2e, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x64, 0x22, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x72, - 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x43, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x31, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x61, 0x65, 0x6f, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, - 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x77, - 0x2e, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, - 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, - 0x3e, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x61, 0x49, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x2c, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, - 0x66, 0x74, 0x22, 0x20, 0x43, 0x7a, 0x65, 0x63, 0x68, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, - 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x7b, 0x63, 0x6f, 0x6d, - 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x27, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, - 0x3c, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x28, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x09, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x6f, 0x78, 0x69, - 0x64, 0x65, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x2d, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x54, 0x69, 0xe1, 0xba, - 0xbf, 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, - 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x63, 0x63, 0x6c, 0x65, 0x73, 0x69, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x61, 0x73, 0x20, - 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x69, 0x6e, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x61, - 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x65, 0x64, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x6e, - 0x6f, 0x74, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x61, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x20, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, - 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x3d, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, - 0x73, 0x74, 0x22, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x6d, 0x61, 0x6e, - 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, - 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x65, - 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0d, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, - 0x70, 0x22, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, - 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x66, 0x6f, 0x72, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x63, - 0x69, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x3c, - 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, - 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, - 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x61, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x68, 0x61, 0x73, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x63, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x69, - 0x63, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x63, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x66, 0x6f, 0x6e, 0x74, 0x2d, - 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x31, 0x70, 0x78, 0x65, 0x78, 0x70, 0x6c, - 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x09, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x6f, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x28, - 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x74, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x6f, - 0x70, 0x6c, 0x65, 0x77, 0x65, 0x72, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x61, 0x73, 0x20, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x69, 0x64, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x61, - 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, - 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x78, 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x69, 0x67, 0x6e, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x73, 0x65, - 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, - 0x73, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0d, - 0x69, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, - 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, - 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x28, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, - 0x61, 0x6c, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x72, - 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x7d, 0x0a, 0x2e, 0x0a, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x3e, - 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x64, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x63, 0x65, 0x6c, 0x65, 0x62, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x6f, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x21, - 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x0a, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x69, - 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x61, 0x73, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x68, 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, - 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x20, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6f, 0x66, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, - 0x6f, 0x66, 0x49, 0x49, 0x2c, 0x20, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, - 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, - 0x72, 0x20, 0x6f, 0x77, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x20, 0x65, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x72, 0x65, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x61, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x2f, 0x75, 0x6c, 0x3e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, - 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, - 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x62, 0x79, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x74, 0x6f, 0x20, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x70, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x09, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x72, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6d, 0x61, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x63, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x2c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x6f, - 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, 0x74, 0x69, 0xe1, 0xba, 0xbf, - 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0xd0, 0xa0, 0xd1, 0x83, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x80, 0xd1, - 0x83, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0x69, 0x6e, - 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, - 0xb5, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x8b, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, - 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x8f, 0xd1, 0x81, 0xd0, - 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, - 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd1, - 0x89, 0xd1, 0x8c, 0xd1, 0x8e, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x87, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, - 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0x93, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xb8, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, - 0x8f, 0xd0, 0xa1, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, - 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x83, - 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xa0, - 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbb, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb0, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x89, - 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb6, 0xd9, 0x88, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, - 0xa7, 0xd8, 0xa6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xaa, 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa6, 0xd8, 0xac, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x82, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb6, 0xd8, 0xba, 0xd8, 0xb7, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb7, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xaa, 0xd9, 0x85, 0xd8, - 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, - 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xad, 0xd8, 0xa9, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd9, 0x88, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xaf, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xba, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x3c, - 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, - 0x20, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x2f, 0x61, - 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x3c, 0x21, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, - 0x20, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, - 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x22, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x6e, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x22, 0x3e, 0x29, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x22, 0x2f, 0x7d, 0x62, 0x6f, 0x64, 0x79, 0x7b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x3a, 0x30, 0x3b, 0x45, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x20, 0x6f, 0x66, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x49, 0x6e, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0d, 0x0a, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x2e, 0x6a, 0x73, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, - 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x4f, 0x72, 0x74, - 0x68, 0x6f, 0x64, 0x6f, 0x78, 0x20, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x73, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x68, 0x69, - 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x72, - 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, 0x20, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x20, 0x74, 0x6f, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x3d, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, - 0x64, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6f, 0x72, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, - 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x55, 0x6e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x64, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, - 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x74, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, - 0x7b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x6e, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, - 0x22, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, 0x61, 0x73, - 0x68, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x75, 0x6c, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x61, 0x74, - 0x68, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x6f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x69, 0x73, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, - 0x93, 0x29, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x65, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x83, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x8c, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9b, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xab, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9b, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9b, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x8f, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x98, - 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb7, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x83, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x87, 0x72, 0x73, 0x73, 0x2b, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, - 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, - 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, - 0x73, 0x22, 0x3e, 0x2e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, - 0x22, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x29, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, - 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, - 0x70, 0x73, 0x65, 0x3a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x42, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x45, 0x6e, 0x67, - 0x6c, 0x69, 0x73, 0x68, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x3c, 0x74, 0x65, 0x78, 0x74, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x3d, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, - 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x6f, 0x76, 0x65, 0x72, - 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x2e, 0x6a, 0x73, 0x22, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, - 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x6c, 0x65, - 0x66, 0x74, 0x3b, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, - 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, - 0x0a, 0x3c, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, - 0x3b, 0x22, 0x3e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x68, 0x65, 0x20, - 0x31, 0x35, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x2e, - 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x28, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x79, 0x7a, 0x61, 0x6e, 0x74, 0x69, 0x6e, - 0x65, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x6a, 0x70, 0x67, 0x7c, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x6c, 0x65, 0x66, 0x74, 0x7c, 0x76, 0x61, - 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x64, 0x6f, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x57, 0x61, 0x72, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x31, 0x30, 0x30, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x2d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x6f, 0x66, 0x44, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x46, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2c, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x09, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x73, 0x29, 0x5b, 0x30, 0x5d, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x6c, 0x69, - 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x22, - 0x20, 0x27, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x27, 0x27, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x27, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x2f, 0x70, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x67, - 0x65, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x62, 0x61, 0x68, 0x61, - 0x73, 0x61, 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x65, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x73, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x29, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, 0xb7, 0xce, 0xbd, 0xce, - 0xb9, 0xce, 0xba, 0xce, 0xac, 0xd1, 0x85, 0xd1, 0x80, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd1, - 0x8f, 0xd0, 0x94, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xb8, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, - 0xbd, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, - 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x82, 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb8, - 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x86, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0xbf, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, - 0x8c, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd1, 0x8e, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbc, - 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd8, 0xb6, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, - 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd9, 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, - 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb3, 0xd8, 0xb9, 0xd9, 0x88, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd8, 0xad, 0xd8, 0xb5, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, - 0xaa, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x85, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, - 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, - 0x65, 0x72, 0x22, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, - 0x64, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x2e, - 0x6a, 0x70, 0x67, 0x7c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x3a, 0x30, 0x3b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, - 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x22, 0x20, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x65, 0x6e, 0x74, - 0x69, 0x65, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x70, - 0x61, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x2e, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0d, 0x0a, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, - 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x2c, - 0x20, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x2c, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x74, 0x64, 0x3e, - 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, - 0x3c, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x28, 0x27, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x20, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, - 0x22, 0x3e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, - 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2d, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x72, 0x63, - 0x68, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x6f, - 0x66, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x43, 0x61, 0x72, 0x6f, 0x6c, - 0x69, 0x6e, 0x61, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, - 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x65, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x64, 0x69, - 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x69, - 0x63, 0x20, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x64, 0x65, 0x63, - 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x42, 0x65, 0x6e, 0x6a, 0x61, 0x6d, 0x69, 0x6e, - 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x6c, 0x69, 0x6e, 0x72, 0x6f, 0x6c, 0x65, - 0x2d, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x61, 0x6d, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x47, 0x75, 0x74, 0x65, 0x6e, 0x62, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x72, 0x65, 0x64, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x6d, 0x65, - 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x73, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, - 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x67, 0x6f, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, - 0xb7, 0xce, 0xbd, 0xce, 0xb9, 0xce, 0xba, 0xce, 0xac, 0x0a, 0x74, 0x61, 0x6b, - 0x65, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, - 0x66, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x67, 0x20, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x73, 0x6f, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x6c, 0x64, 0x20, - 0x54, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x66, 0x72, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, - 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6d, - 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x67, 0x75, 0x61, 0x62, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x3e, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x63, 0x69, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x74, 0x77, 0x6f, 0x2d, 0x74, 0x68, 0x69, 0x72, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x44, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, - 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, - 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, - 0x6f, 0x75, 0x73, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, - 0x61, 0x73, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6f, 0x63, 0x63, - 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6a, 0x61, 0x78, 0x2f, 0x6c, - 0x69, 0x62, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x31, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, - 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, - 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, 0x65, - 0x28, 0x22, 0x25, 0x33, 0x43, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x27, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, - 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x4f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, - 0x2c, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x7c, 0x32, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6e, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x65, 0x6e, 0x74, 0x68, - 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x73, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, - 0x64, 0x3b, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x22, - 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x3c, 0x2f, - 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x3b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x20, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, - 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x22, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x3d, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, - 0x46, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x63, 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, - 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4f, 0x78, 0x66, 0x6f, - 0x72, 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x22, 0x20, 0x63, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, 0x68, - 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, 0x69, 0x6e, 0x67, - 0x64, 0x6f, 0x6d, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, - 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, - 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x65, 0x6c, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x54, 0x65, 0x6c, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x22, 0x20, 0x74, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, 0x6d, 0x61, - 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, 0x61, 0x6c, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, - 0x79, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x63, 0x75, - 0x6c, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x43, 0x49, 0x41, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x46, 0x61, 0x63, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x6e, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x65, 0x6d, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x4f, 0x74, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x41, 0x6e, 0x20, 0x49, 0x6e, 0x74, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x65, - 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x70, 0x65, - 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x72, 0x65, 0x65, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x20, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x64, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x69, - 0x64, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, - 0x64, 0x65, 0x6f, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x69, 0x63, 0x20, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x20, - 0x6f, 0x66, 0x20, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x49, 0x6e, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x6f, - 0x74, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x74, 0x68, - 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x65, - 0x61, 0x72, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x72, 0x6f, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, - 0x74, 0x6f, 0x70, 0x3a, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x61, 0x64, - 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, - 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x28, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x67, - 0x61, 0x69, 0x6e, 0x73, 0x74, 0x30, 0x3b, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x55, 0x6e, 0x66, - 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, - 0x69, 0x78, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x09, 0x09, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, - 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb1, - 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd0, 0xa4, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, - 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x89, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb1, 0xd0, 0xb5, 0xd1, 0x81, - 0xd0, 0xbf, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb0, - 0xd0, 0xbb, 0xd1, 0x8b, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, - 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x83, 0xd0, 0xba, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, - 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x81, 0xd1, 0x8f, - 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb8, 0xd0, - 0xb7, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0x90, 0xd0, 0xbb, 0xd0, 0xb5, - 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb4, 0xd1, 0x80, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9a, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0x91, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaf, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa7, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x89, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa7, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x8f, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x81, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xac, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x88, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, - 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xaf, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, - 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xb4, 0xd9, - 0x88, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, - 0xd8, 0xa8, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, - 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, - 0x3d, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x2f, - 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, - 0x3c, 0x73, 0x63, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, - 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, - 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, - 0x0a, 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x2f, - 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, - 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, - 0x22, 0x3f, 0x3e, 0x0a, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x3f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x3a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, - 0x74, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, - 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, - 0x30, 0x25, 0x22, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, - 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x67, 0x62, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x6f, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6d, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x64, 0x69, - 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x69, 0x64, 0x29, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x29, - 0x3b, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, - 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, - 0x0a, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3e, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x63, 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x3e, 0x3c, - 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x69, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x70, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x20, 0x44, 0x2e, - 0x43, 0x2e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x2c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x20, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x69, - 0x73, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x20, 0x55, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x65, 0x78, 0x70, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x3e, - 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x20, 0x6f, 0x66, 0x20, 0x49, 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x0a, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x77, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6d, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x79, - 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x6f, 0x66, 0x20, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, - 0x63, 0x69, 0x7a, 0x65, 0x64, 0x28, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x20, 0x46, - 0x6f, 0x72, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x25, 0x33, 0x45, 0x25, 0x33, - 0x43, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x25, 0x33, 0x45, 0x22, 0x29, - 0x29, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x3c, 0x6c, 0x69, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, - 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, - 0x28, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, - 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, - 0x66, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x2f, 0x75, - 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x71, 0x22, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x20, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x36, 0x3e, 0x3c, 0x75, 0x6c, - 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x22, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x68, 0x74, 0x6d, - 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x46, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x21, 0x44, 0x4f, - 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x3c, 0x68, - 0x74, 0x6d, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3a, 0x76, 0x6f, 0x69, 0x64, 0x28, 0x30, 0x29, 0x3b, 0x22, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, - 0x64, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x2c, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, - 0x6f, 0x6e, 0x22, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x64, 0x69, - 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x65, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x69, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x71, 0x75, 0x69, - 0x74, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x20, 0x76, - 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, - 0x73, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x28, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x64, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x20, 0x2f, 0x3e, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x70, 0x65, 0x72, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, - 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x65, 0x63, 0x6f, 0x6e, - 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0x20, 0x28, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x75, 0x29, 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, - 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, - 0x83, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, - 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x81, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, - 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, - 0xb8, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, 0xbd, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, - 0xb8, 0xd1, 0x8f, 0xd0, 0xa0, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbf, 0xd1, 0x83, - 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8e, 0xd1, 0x82, - 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa7, 0xd8, 0xad, 0xd8, 0xa7, 0xd8, 0xaa, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, 0x54, 0x46, 0x2d, 0x38, - 0x22, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0d, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, - 0x28, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x7d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x31, 0x22, 0x20, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x20, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, - 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x23, 0x76, 0x69, 0x65, 0x77, 0x70, - 0x6f, 0x72, 0x74, 0x7b, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, - 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x3c, 0x21, 0x44, 0x4f, 0x43, - 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x5b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x3e, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0xe0, 0xb8, 0xa0, 0xe0, 0xb8, 0xb2, 0xe0, 0xb8, 0xa9, 0xe0, 0xb8, 0xb2, - 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, 0xb8, 0xa2, 0xe1, 0x83, 0xa5, 0xe1, - 0x83, 0x90, 0xe1, 0x83, 0xa0, 0xe1, 0x83, 0x97, 0xe1, 0x83, 0xa3, 0xe1, 0x83, - 0x9a, 0xe1, 0x83, 0x98, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, 0x29, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0xa1, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa1, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x3c, 0x6d, 0x65, 0x74, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3a, 0x75, 0x72, 0x6c, 0x22, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, - 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x20, - 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, - 0x22, 0x20, 0x2f, 0x3e, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, - 0x22, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, - 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3d, 0x22, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x0a, - 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x3d, 0x22, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, - 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, - 0x22, 0x20, 0x3d, 0x27, 0x2b, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, 0x6c, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x2c, - 0x20, 0x74, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x0a, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x3e, 0xc2, 0xb7, - 0x3c, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x6c, 0x3d, 0x30, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x2d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x75, 0x72, - 0x6c, 0x28, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x09, 0x09, - 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, - 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, - 0x74, 0x72, 0x75, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x2f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x65, 0x3d, 0x28, 0x6e, - 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x28, 0x29, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, - 0xaa, 0x73, 0x20, 0x28, 0x64, 0x6f, 0x20, 0x42, 0x72, 0x61, 0x73, 0x69, 0x6c, - 0x29, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xb0, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, - 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, - 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x3c, 0x6d, 0x65, - 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, - 0x3d, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, - 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, - 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x54, 0x44, 0x54, - 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, - 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x3b, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x69, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6a, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x55, 0x41, 0x2d, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, - 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, - 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x61, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, - 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, - 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, - 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, - 0x30, 0x31, 0x20, 0x54, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, - 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x29, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x22, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x3d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x28, 0x27, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x73, 0x6e, 0x69, 0x63, - 0x61, 0x6c, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x43, 0x2f, 0x2f, 0x44, 0x54, - 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, - 0x73, 0x22, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x3e, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, - 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x68, 0x74, 0x6d, 0x6c, - 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, - 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, - 0x65, 0x3b, 0x22, 0x3e, 0x3c, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x3e, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, - 0xb7, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, -]); - -// Used by the browser version -exports.init = function() { - return exports.dictionary; -}; diff --git a/skills/flight-finder/node_modules/brotli/dec/dictionary.bin.js b/skills/flight-finder/node_modules/brotli/dec/dictionary.bin.js deleted file mode 100644 index 2382a76..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/dictionary.bin.js +++ /dev/null @@ -1 +0,0 @@ -module.exports="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"; diff --git a/skills/flight-finder/node_modules/brotli/dec/dictionary.js b/skills/flight-finder/node_modules/brotli/dec/dictionary.js deleted file mode 100644 index 927208a..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/dictionary.js +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Collection of static dictionary words. -*/ - -var data = require('./dictionary-data'); -exports.init = function() { - exports.dictionary = data.init(); -}; - -exports.offsetsByLength = new Uint32Array([ - 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, - 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, - 115968, 118528, 119872, 121280, 122016, -]); - -exports.sizeBitsByLength = new Uint8Array([ - 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, - 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, - 7, 6, 6, 5, 5, -]); - -exports.minDictionaryWordLength = 4; -exports.maxDictionaryWordLength = 24; diff --git a/skills/flight-finder/node_modules/brotli/dec/huffman.js b/skills/flight-finder/node_modules/brotli/dec/huffman.js deleted file mode 100644 index a0d8e06..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/huffman.js +++ /dev/null @@ -1,123 +0,0 @@ -function HuffmanCode(bits, value) { - this.bits = bits; /* number of bits used for this symbol */ - this.value = value; /* symbol value or table offset */ -} - -exports.HuffmanCode = HuffmanCode; - -var MAX_LENGTH = 15; - -/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the - bit-wise reversal of the len least significant bits of key. */ -function GetNextKey(key, len) { - var step = 1 << (len - 1); - while (key & step) { - step >>= 1; - } - return (key & (step - 1)) + step; -} - -/* Stores code in table[0], table[step], table[2*step], ..., table[end] */ -/* Assumes that end is an integer multiple of step */ -function ReplicateValue(table, i, step, end, code) { - do { - end -= step; - table[i + end] = new HuffmanCode(code.bits, code.value); - } while (end > 0); -} - -/* Returns the table width of the next 2nd level table. count is the histogram - of bit lengths for the remaining symbols, len is the code length of the next - processed symbol */ -function NextTableBitSize(count, len, root_bits) { - var left = 1 << (len - root_bits); - while (len < MAX_LENGTH) { - left -= count[len]; - if (left <= 0) break; - ++len; - left <<= 1; - } - return len - root_bits; -} - -exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { - var start_table = table; - var code; /* current table entry */ - var len; /* current code length */ - var symbol; /* symbol index in original or sorted table */ - var key; /* reversed prefix code */ - var step; /* step size to replicate values in current table */ - var low; /* low bits for current root entry */ - var mask; /* mask for low bits */ - var table_bits; /* key length of current table */ - var table_size; /* size of current table */ - var total_size; /* sum of root table size and 2nd level table sizes */ - var sorted; /* symbols sorted by code length */ - var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */ - var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */ - - sorted = new Int32Array(code_lengths_size); - - /* build histogram of code lengths */ - for (symbol = 0; symbol < code_lengths_size; symbol++) { - count[code_lengths[symbol]]++; - } - - /* generate offsets into sorted symbol table by code length */ - offset[1] = 0; - for (len = 1; len < MAX_LENGTH; len++) { - offset[len + 1] = offset[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (symbol = 0; symbol < code_lengths_size; symbol++) { - if (code_lengths[symbol] !== 0) { - sorted[offset[code_lengths[symbol]]++] = symbol; - } - } - - table_bits = root_bits; - table_size = 1 << table_bits; - total_size = table_size; - - /* special case code with only one value */ - if (offset[MAX_LENGTH] === 1) { - for (key = 0; key < total_size; ++key) { - root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff); - } - - return total_size; - } - - /* fill in root table */ - key = 0; - symbol = 0; - for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { - for (; count[len] > 0; --count[len]) { - code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff); - ReplicateValue(root_table, table + key, step, table_size, code); - key = GetNextKey(key, len); - } - } - - /* fill in 2nd level tables and add pointers to root table */ - mask = total_size - 1; - low = -1; - for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { - for (; count[len] > 0; --count[len]) { - if ((key & mask) !== low) { - table += table_size; - table_bits = NextTableBitSize(count, len, root_bits); - table_size = 1 << table_bits; - total_size += table_size; - low = key & mask; - root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff); - } - code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff); - ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code); - key = GetNextKey(key, len); - } - } - - return total_size; -} diff --git a/skills/flight-finder/node_modules/brotli/dec/prefix.js b/skills/flight-finder/node_modules/brotli/dec/prefix.js deleted file mode 100644 index 386c2cf..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/prefix.js +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Lookup tables to map prefix codes to value ranges. This is used during - decoding of the block lengths, literal insertion lengths and copy lengths. -*/ - -/* Represents the range of values belonging to a prefix code: */ -/* [offset, offset + 2^nbits) */ -function PrefixCodeRange(offset, nbits) { - this.offset = offset; - this.nbits = nbits; -} - -exports.kBlockLengthPrefixCode = [ - new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2), - new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3), - new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4), - new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5), - new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8), - new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12), - new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24) -]; - -exports.kInsertLengthPrefixCode = [ - new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), - new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1), - new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3), - new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5), - new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9), - new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24), -]; - -exports.kCopyLengthPrefixCode = [ - new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), - new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0), - new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2), - new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4), - new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7), - new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24), -]; - -exports.kInsertRangeLut = [ - 0, 0, 8, 8, 0, 16, 8, 16, 16, -]; - -exports.kCopyRangeLut = [ - 0, 8, 0, 8, 16, 0, 16, 8, 16, -]; diff --git a/skills/flight-finder/node_modules/brotli/dec/streams.js b/skills/flight-finder/node_modules/brotli/dec/streams.js deleted file mode 100644 index bfc9516..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/streams.js +++ /dev/null @@ -1,34 +0,0 @@ -function BrotliInput(buffer) { - this.buffer = buffer; - this.pos = 0; -} - -BrotliInput.prototype.read = function(buf, i, count) { - if (this.pos + count > this.buffer.length) { - count = this.buffer.length - this.pos; - } - - for (var p = 0; p < count; p++) - buf[i + p] = this.buffer[this.pos + p]; - - this.pos += count; - return count; -} - -exports.BrotliInput = BrotliInput; - -function BrotliOutput(buf) { - this.buffer = buf; - this.pos = 0; -} - -BrotliOutput.prototype.write = function(buf, count) { - if (this.pos + count > this.buffer.length) - throw new Error('Output buffer is not large enough'); - - this.buffer.set(buf.subarray(0, count), this.pos); - this.pos += count; - return count; -}; - -exports.BrotliOutput = BrotliOutput; diff --git a/skills/flight-finder/node_modules/brotli/dec/transform.js b/skills/flight-finder/node_modules/brotli/dec/transform.js deleted file mode 100644 index 965e067..0000000 --- a/skills/flight-finder/node_modules/brotli/dec/transform.js +++ /dev/null @@ -1,247 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Transformations on dictionary words. -*/ - -var BrotliDictionary = require('./dictionary'); - -var kIdentity = 0; -var kOmitLast1 = 1; -var kOmitLast2 = 2; -var kOmitLast3 = 3; -var kOmitLast4 = 4; -var kOmitLast5 = 5; -var kOmitLast6 = 6; -var kOmitLast7 = 7; -var kOmitLast8 = 8; -var kOmitLast9 = 9; -var kUppercaseFirst = 10; -var kUppercaseAll = 11; -var kOmitFirst1 = 12; -var kOmitFirst2 = 13; -var kOmitFirst3 = 14; -var kOmitFirst4 = 15; -var kOmitFirst5 = 16; -var kOmitFirst6 = 17; -var kOmitFirst7 = 18; -var kOmitFirst8 = 19; -var kOmitFirst9 = 20; - -function Transform(prefix, transform, suffix) { - this.prefix = new Uint8Array(prefix.length); - this.transform = transform; - this.suffix = new Uint8Array(suffix.length); - - for (var i = 0; i < prefix.length; i++) - this.prefix[i] = prefix.charCodeAt(i); - - for (var i = 0; i < suffix.length; i++) - this.suffix[i] = suffix.charCodeAt(i); -} - -var kTransforms = [ - new Transform( "", kIdentity, "" ), - new Transform( "", kIdentity, " " ), - new Transform( " ", kIdentity, " " ), - new Transform( "", kOmitFirst1, "" ), - new Transform( "", kUppercaseFirst, " " ), - new Transform( "", kIdentity, " the " ), - new Transform( " ", kIdentity, "" ), - new Transform( "s ", kIdentity, " " ), - new Transform( "", kIdentity, " of " ), - new Transform( "", kUppercaseFirst, "" ), - new Transform( "", kIdentity, " and " ), - new Transform( "", kOmitFirst2, "" ), - new Transform( "", kOmitLast1, "" ), - new Transform( ", ", kIdentity, " " ), - new Transform( "", kIdentity, ", " ), - new Transform( " ", kUppercaseFirst, " " ), - new Transform( "", kIdentity, " in " ), - new Transform( "", kIdentity, " to " ), - new Transform( "e ", kIdentity, " " ), - new Transform( "", kIdentity, "\"" ), - new Transform( "", kIdentity, "." ), - new Transform( "", kIdentity, "\">" ), - new Transform( "", kIdentity, "\n" ), - new Transform( "", kOmitLast3, "" ), - new Transform( "", kIdentity, "]" ), - new Transform( "", kIdentity, " for " ), - new Transform( "", kOmitFirst3, "" ), - new Transform( "", kOmitLast2, "" ), - new Transform( "", kIdentity, " a " ), - new Transform( "", kIdentity, " that " ), - new Transform( " ", kUppercaseFirst, "" ), - new Transform( "", kIdentity, ". " ), - new Transform( ".", kIdentity, "" ), - new Transform( " ", kIdentity, ", " ), - new Transform( "", kOmitFirst4, "" ), - new Transform( "", kIdentity, " with " ), - new Transform( "", kIdentity, "'" ), - new Transform( "", kIdentity, " from " ), - new Transform( "", kIdentity, " by " ), - new Transform( "", kOmitFirst5, "" ), - new Transform( "", kOmitFirst6, "" ), - new Transform( " the ", kIdentity, "" ), - new Transform( "", kOmitLast4, "" ), - new Transform( "", kIdentity, ". The " ), - new Transform( "", kUppercaseAll, "" ), - new Transform( "", kIdentity, " on " ), - new Transform( "", kIdentity, " as " ), - new Transform( "", kIdentity, " is " ), - new Transform( "", kOmitLast7, "" ), - new Transform( "", kOmitLast1, "ing " ), - new Transform( "", kIdentity, "\n\t" ), - new Transform( "", kIdentity, ":" ), - new Transform( " ", kIdentity, ". " ), - new Transform( "", kIdentity, "ed " ), - new Transform( "", kOmitFirst9, "" ), - new Transform( "", kOmitFirst7, "" ), - new Transform( "", kOmitLast6, "" ), - new Transform( "", kIdentity, "(" ), - new Transform( "", kUppercaseFirst, ", " ), - new Transform( "", kOmitLast8, "" ), - new Transform( "", kIdentity, " at " ), - new Transform( "", kIdentity, "ly " ), - new Transform( " the ", kIdentity, " of " ), - new Transform( "", kOmitLast5, "" ), - new Transform( "", kOmitLast9, "" ), - new Transform( " ", kUppercaseFirst, ", " ), - new Transform( "", kUppercaseFirst, "\"" ), - new Transform( ".", kIdentity, "(" ), - new Transform( "", kUppercaseAll, " " ), - new Transform( "", kUppercaseFirst, "\">" ), - new Transform( "", kIdentity, "=\"" ), - new Transform( " ", kIdentity, "." ), - new Transform( ".com/", kIdentity, "" ), - new Transform( " the ", kIdentity, " of the " ), - new Transform( "", kUppercaseFirst, "'" ), - new Transform( "", kIdentity, ". This " ), - new Transform( "", kIdentity, "," ), - new Transform( ".", kIdentity, " " ), - new Transform( "", kUppercaseFirst, "(" ), - new Transform( "", kUppercaseFirst, "." ), - new Transform( "", kIdentity, " not " ), - new Transform( " ", kIdentity, "=\"" ), - new Transform( "", kIdentity, "er " ), - new Transform( " ", kUppercaseAll, " " ), - new Transform( "", kIdentity, "al " ), - new Transform( " ", kUppercaseAll, "" ), - new Transform( "", kIdentity, "='" ), - new Transform( "", kUppercaseAll, "\"" ), - new Transform( "", kUppercaseFirst, ". " ), - new Transform( " ", kIdentity, "(" ), - new Transform( "", kIdentity, "ful " ), - new Transform( " ", kUppercaseFirst, ". " ), - new Transform( "", kIdentity, "ive " ), - new Transform( "", kIdentity, "less " ), - new Transform( "", kUppercaseAll, "'" ), - new Transform( "", kIdentity, "est " ), - new Transform( " ", kUppercaseFirst, "." ), - new Transform( "", kUppercaseAll, "\">" ), - new Transform( " ", kIdentity, "='" ), - new Transform( "", kUppercaseFirst, "," ), - new Transform( "", kIdentity, "ize " ), - new Transform( "", kUppercaseAll, "." ), - new Transform( "\xc2\xa0", kIdentity, "" ), - new Transform( " ", kIdentity, "," ), - new Transform( "", kUppercaseFirst, "=\"" ), - new Transform( "", kUppercaseAll, "=\"" ), - new Transform( "", kIdentity, "ous " ), - new Transform( "", kUppercaseAll, ", " ), - new Transform( "", kUppercaseFirst, "='" ), - new Transform( " ", kUppercaseFirst, "," ), - new Transform( " ", kUppercaseAll, "=\"" ), - new Transform( " ", kUppercaseAll, ", " ), - new Transform( "", kUppercaseAll, "," ), - new Transform( "", kUppercaseAll, "(" ), - new Transform( "", kUppercaseAll, ". " ), - new Transform( " ", kUppercaseAll, "." ), - new Transform( "", kUppercaseAll, "='" ), - new Transform( " ", kUppercaseAll, ". " ), - new Transform( " ", kUppercaseFirst, "=\"" ), - new Transform( " ", kUppercaseAll, "='" ), - new Transform( " ", kUppercaseFirst, "='" ) -]; - -exports.kTransforms = kTransforms; -exports.kNumTransforms = kTransforms.length; - -function ToUpperCase(p, i) { - if (p[i] < 0xc0) { - if (p[i] >= 97 && p[i] <= 122) { - p[i] ^= 32; - } - return 1; - } - - /* An overly simplified uppercasing model for utf-8. */ - if (p[i] < 0xe0) { - p[i + 1] ^= 32; - return 2; - } - - /* An arbitrary transform for three byte characters. */ - p[i + 2] ^= 5; - return 3; -} - -exports.transformDictionaryWord = function(dst, idx, word, len, transform) { - var prefix = kTransforms[transform].prefix; - var suffix = kTransforms[transform].suffix; - var t = kTransforms[transform].transform; - var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1); - var i = 0; - var start_idx = idx; - var uppercase; - - if (skip > len) { - skip = len; - } - - var prefix_pos = 0; - while (prefix_pos < prefix.length) { - dst[idx++] = prefix[prefix_pos++]; - } - - word += skip; - len -= skip; - - if (t <= kOmitLast9) { - len -= t; - } - - for (i = 0; i < len; i++) { - dst[idx++] = BrotliDictionary.dictionary[word + i]; - } - - uppercase = idx - len; - - if (t === kUppercaseFirst) { - ToUpperCase(dst, uppercase); - } else if (t === kUppercaseAll) { - while (len > 0) { - var step = ToUpperCase(dst, uppercase); - uppercase += step; - len -= step; - } - } - - var suffix_pos = 0; - while (suffix_pos < suffix.length) { - dst[idx++] = suffix[suffix_pos++]; - } - - return idx - start_idx; -} diff --git a/skills/flight-finder/node_modules/brotli/decompress.js b/skills/flight-finder/node_modules/brotli/decompress.js deleted file mode 100644 index bf84278..0000000 --- a/skills/flight-finder/node_modules/brotli/decompress.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dec/decode').BrotliDecompressBuffer; diff --git a/skills/flight-finder/node_modules/brotli/enc/pre.js b/skills/flight-finder/node_modules/brotli/enc/pre.js deleted file mode 100644 index 4737c01..0000000 --- a/skills/flight-finder/node_modules/brotli/enc/pre.js +++ /dev/null @@ -1,7 +0,0 @@ -var Module = {}; -var decode = require('../decompress'); -var base64 = require('base64-js'); -Module['readBinary'] = function() { - var src = base64['toByteArray'](require('../build/mem.js')); - return decode(src); -}; diff --git a/skills/flight-finder/node_modules/brotli/index.js b/skills/flight-finder/node_modules/brotli/index.js deleted file mode 100644 index c9528d8..0000000 --- a/skills/flight-finder/node_modules/brotli/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.compress = require('./compress'); -exports.decompress = require('./dec/decode').BrotliDecompressBuffer; diff --git a/skills/flight-finder/node_modules/brotli/package.json b/skills/flight-finder/node_modules/brotli/package.json deleted file mode 100644 index 0a1222c..0000000 --- a/skills/flight-finder/node_modules/brotli/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "brotli", - "version": "1.3.3", - "description": "A port of the Brotli compression algorithm as used in WOFF2", - "main": "index.js", - "repository": { - "type": "git", - "url": "https://github.com/devongovett/brotli.js.git" - }, - "keywords": [ - "compress", - "decompress", - "encode", - "decode" - ], - "author": "Devon Govett ", - "license": "MIT", - "bugs": { - "url": "https://github.com/devongovett/brotli.js/issues" - }, - "homepage": "https://github.com/devongovett/brotli.js", - "dependencies": { - "base64-js": "^1.1.2" - }, - "devDependencies": { - "mocha": "^2.2.1" - }, - "browser": { - "./dec/dictionary-data.js": "./dec/dictionary-browser.js" - }, - "scripts": { - "test": "mocha", - "prepublish": "make" - } -} diff --git a/skills/flight-finder/node_modules/brotli/readme.md b/skills/flight-finder/node_modules/brotli/readme.md deleted file mode 100644 index a0920a0..0000000 --- a/skills/flight-finder/node_modules/brotli/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# Brotli.js - -Brotli.js is port of the [Brotli](http://tools.ietf.org/html/draft-alakuijala-brotli-01) compression algorithm (as used in the [WOFF2](http://www.w3.org/TR/WOFF2/) font format) to JavaScript. The decompressor is hand ported, and the compressor is ported -with Emscripten. The original C++ source code can be found [here](http://github.com/google/brotli). - -## Installation and usage - -Install using npm. - - npm install brotli - -If you want to use brotli in the browser, you should use [Browserify](http://browserify.org/) to build it. - -In node, or in browserify, you can load brotli in the standard way: - -```javascript -var brotli = require('brotli'); -``` - -You can also require just the `decompress` function or just the `compress` function, which is useful for browserify builds. -For example, here's how you'd require just the `decompress` function. - -```javascript -var decompress = require('brotli/decompress'); -``` - -## API - -### brotli.decompress(buffer, [outSize]) - -Decompresses the given buffer to produce the original input to the compressor. -The `outSize` parameter is optional, and will be computed by the decompressor -if not provided. Inside a WOFF2 file, this can be computed from the WOFF2 directory. - -```javascript -// decode a buffer where the output size is known -brotli.decompress(compressedData, uncompressedLength); - -// decode a buffer where the output size is not known -brotli.decompress(fs.readFileSync('compressed.bin')); -``` - -### brotli.compress(buffer, isText = false) - -Compresses the given buffer. Pass optional parameters as the second argument. - -```javascript -// encode a buffer of binary data -brotli.compress(fs.readFileSync('myfile.bin')); - -// encode some data with options (default options shown) -brotli.compress(fs.readFileSync('myfile.bin'), { - mode: 0, // 0 = generic, 1 = text, 2 = font (WOFF2) - quality: 11, // 0 - 11 - lgwin: 22 // window size -}); -``` - -## License - -MIT diff --git a/skills/flight-finder/node_modules/clone/.npmignore b/skills/flight-finder/node_modules/clone/.npmignore deleted file mode 100644 index 2ff84f0..0000000 --- a/skills/flight-finder/node_modules/clone/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -/node_modules/ -/test.js -/.travis.yml -*.html diff --git a/skills/flight-finder/node_modules/clone/LICENSE b/skills/flight-finder/node_modules/clone/LICENSE deleted file mode 100644 index cc3c87b..0000000 --- a/skills/flight-finder/node_modules/clone/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright © 2011-2015 Paul Vorbach - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/skills/flight-finder/node_modules/clone/README.md b/skills/flight-finder/node_modules/clone/README.md deleted file mode 100644 index 207e60a..0000000 --- a/skills/flight-finder/node_modules/clone/README.md +++ /dev/null @@ -1,194 +0,0 @@ -# clone - -[![build status](https://secure.travis-ci.org/pvorb/clone.svg)](http://travis-ci.org/pvorb/clone) [![downloads](https://img.shields.io/npm/dt/clone.svg)](http://npm-stat.com/charts.html?package=clone) - -offers foolproof _deep cloning_ of objects, arrays, numbers, strings, maps, -sets, promises, etc. in JavaScript. - -**XSS vulnerability detected** - - -## Installation - - npm install clone - -(It also works with browserify, ender or standalone. You may want to use the -option `noParse` in browserify to reduce the resulting file size, since usually -`Buffer`s are not needed in browsers.) - - -## Example - -~~~ javascript -var clone = require('clone'); - -var a, b; - -a = { foo: { bar: 'baz' } }; // initial value of a - -b = clone(a); // clone a -> b -a.foo.bar = 'foo'; // change a - -console.log(a); // show a -console.log(b); // show b -~~~ - -This will print: - -~~~ javascript -{ foo: { bar: 'foo' } } -{ foo: { bar: 'baz' } } -~~~ - -**clone** masters cloning simple objects (even with custom prototype), arrays, -Date objects, and RegExp objects. Everything is cloned recursively, so that you -can clone dates in arrays in objects, for example. - - -## API - -`clone(val, circular, depth)` - - * `val` -- the value that you want to clone, any type allowed - * `circular` -- boolean - - Call `clone` with `circular` set to `false` if you are certain that `obj` - contains no circular references. This will give better performance if - needed. There is no error if `undefined` or `null` is passed as `obj`. - * `depth` -- depth to which the object is to be cloned (optional, - defaults to infinity) - * `prototype` -- sets the prototype to be used when cloning an object. - (optional, defaults to parent prototype). - * `includeNonEnumerable` -- set to `true` if the non-enumerable properties - should be cloned as well. Non-enumerable properties on the prototype chain - will be ignored. (optional, defaults to `false`) - -`clone.clonePrototype(obj)` - - * `obj` -- the object that you want to clone - -Does a prototype clone as -[described by Oran Looney](http://oranlooney.com/functional-javascript/). - - -## Circular References - -~~~ javascript -var a, b; - -a = { hello: 'world' }; - -a.myself = a; -b = clone(a); - -console.log(b); -~~~ - -This will print: - -~~~ javascript -{ hello: "world", myself: [Circular] } -~~~ - -So, `b.myself` points to `b`, not `a`. Neat! - - -## Test - - npm test - - -## Changelog - -### v2.1.2 - -#### 2018-03-21 - - - Use `Buffer.allocUnsafe()` on Node >= 4.5.0 (contributed by @ChALkeR) - -### v2.1.1 - -#### 2017-03-09 - - - Fix build badge in README - - Add support for cloning Maps and Sets on Internet Explorer - -### v2.1.0 - -#### 2016-11-22 - - - Add support for cloning Errors - - Exclude non-enumerable symbol-named object properties from cloning - - Add option to include non-enumerable own properties of objects - -### v2.0.0 - -#### 2016-09-28 - - - Add support for cloning ES6 Maps, Sets, Promises, and Symbols - -### v1.0.3 - -#### 2017-11-08 - - - Close XSS vulnerability in the NPM package, which included the file - `test-apart-ctx.html`. This vulnerability was disclosed by Juho Nurminen of - 2NS - Second Nature Security. - -### v1.0.2 (deprecated) - -#### 2015-03-25 - - - Fix call on getRegExpFlags - - Refactor utilities - - Refactor test suite - -### v1.0.1 (deprecated) - -#### 2015-03-04 - - - Fix nodeunit version - - Directly call getRegExpFlags - -### v1.0.0 (deprecated) - -#### 2015-02-10 - - - Improve browser support - - Improve browser testability - - Move helper methods to private namespace - -## Caveat - -Some special objects like a socket or `process.stdout`/`stderr` are known to not -be cloneable. If you find other objects that cannot be cloned, please [open an -issue](https://github.com/pvorb/clone/issues/new). - - -## Bugs and Issues - -If you encounter any bugs or issues, feel free to [open an issue at -github](https://github.com/pvorb/clone/issues) or send me an email to -. I also always like to hear from you, if you’re using my code. - -## License - -Copyright © 2011-2016 [Paul Vorbach](https://paul.vorba.ch/) and -[contributors](https://github.com/pvorb/clone/graphs/contributors). - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/skills/flight-finder/node_modules/clone/clone.iml b/skills/flight-finder/node_modules/clone/clone.iml deleted file mode 100644 index 30de8ae..0000000 --- a/skills/flight-finder/node_modules/clone/clone.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/skills/flight-finder/node_modules/clone/clone.js b/skills/flight-finder/node_modules/clone/clone.js deleted file mode 100644 index 3fa5fad..0000000 --- a/skills/flight-finder/node_modules/clone/clone.js +++ /dev/null @@ -1,257 +0,0 @@ -var clone = (function() { -'use strict'; - -function _instanceof(obj, type) { - return type != null && obj instanceof type; -} - -var nativeMap; -try { - nativeMap = Map; -} catch(_) { - // maybe a reference error because no `Map`. Give it a dummy value that no - // value will ever be an instanceof. - nativeMap = function() {}; -} - -var nativeSet; -try { - nativeSet = Set; -} catch(_) { - nativeSet = function() {}; -} - -var nativePromise; -try { - nativePromise = Promise; -} catch(_) { - nativePromise = function() {}; -} - -/** - * Clones (copies) an Object using deep copying. - * - * This function supports circular references by default, but if you are certain - * there are no circular references in your object, you can save some CPU time - * by calling clone(obj, false). - * - * Caution: if `circular` is false and `parent` contains circular references, - * your program may enter an infinite loop and crash. - * - * @param `parent` - the object to be cloned - * @param `circular` - set to true if the object to be cloned may contain - * circular references. (optional - true by default) - * @param `depth` - set to a number if the object is only to be cloned to - * a particular depth. (optional - defaults to Infinity) - * @param `prototype` - sets the prototype to be used when cloning an object. - * (optional - defaults to parent prototype). - * @param `includeNonEnumerable` - set to true if the non-enumerable properties - * should be cloned as well. Non-enumerable properties on the prototype - * chain will be ignored. (optional - false by default) -*/ -function clone(parent, circular, depth, prototype, includeNonEnumerable) { - if (typeof circular === 'object') { - depth = circular.depth; - prototype = circular.prototype; - includeNonEnumerable = circular.includeNonEnumerable; - circular = circular.circular; - } - // maintain two arrays for circular references, where corresponding parents - // and children have the same index - var allParents = []; - var allChildren = []; - - var useBuffer = typeof Buffer != 'undefined'; - - if (typeof circular == 'undefined') - circular = true; - - if (typeof depth == 'undefined') - depth = Infinity; - - // recurse this function so we don't reset allParents and allChildren - function _clone(parent, depth) { - // cloning null always returns null - if (parent === null) - return null; - - if (depth === 0) - return parent; - - var child; - var proto; - if (typeof parent != 'object') { - return parent; - } - - if (_instanceof(parent, nativeMap)) { - child = new nativeMap(); - } else if (_instanceof(parent, nativeSet)) { - child = new nativeSet(); - } else if (_instanceof(parent, nativePromise)) { - child = new nativePromise(function (resolve, reject) { - parent.then(function(value) { - resolve(_clone(value, depth - 1)); - }, function(err) { - reject(_clone(err, depth - 1)); - }); - }); - } else if (clone.__isArray(parent)) { - child = []; - } else if (clone.__isRegExp(parent)) { - child = new RegExp(parent.source, __getRegExpFlags(parent)); - if (parent.lastIndex) child.lastIndex = parent.lastIndex; - } else if (clone.__isDate(parent)) { - child = new Date(parent.getTime()); - } else if (useBuffer && Buffer.isBuffer(parent)) { - if (Buffer.allocUnsafe) { - // Node.js >= 4.5.0 - child = Buffer.allocUnsafe(parent.length); - } else { - // Older Node.js versions - child = new Buffer(parent.length); - } - parent.copy(child); - return child; - } else if (_instanceof(parent, Error)) { - child = Object.create(parent); - } else { - if (typeof prototype == 'undefined') { - proto = Object.getPrototypeOf(parent); - child = Object.create(proto); - } - else { - child = Object.create(prototype); - proto = prototype; - } - } - - if (circular) { - var index = allParents.indexOf(parent); - - if (index != -1) { - return allChildren[index]; - } - allParents.push(parent); - allChildren.push(child); - } - - if (_instanceof(parent, nativeMap)) { - parent.forEach(function(value, key) { - var keyChild = _clone(key, depth - 1); - var valueChild = _clone(value, depth - 1); - child.set(keyChild, valueChild); - }); - } - if (_instanceof(parent, nativeSet)) { - parent.forEach(function(value) { - var entryChild = _clone(value, depth - 1); - child.add(entryChild); - }); - } - - for (var i in parent) { - var attrs; - if (proto) { - attrs = Object.getOwnPropertyDescriptor(proto, i); - } - - if (attrs && attrs.set == null) { - continue; - } - child[i] = _clone(parent[i], depth - 1); - } - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(parent); - for (var i = 0; i < symbols.length; i++) { - // Don't need to worry about cloning a symbol because it is a primitive, - // like a number or string. - var symbol = symbols[i]; - var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); - if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { - continue; - } - child[symbol] = _clone(parent[symbol], depth - 1); - if (!descriptor.enumerable) { - Object.defineProperty(child, symbol, { - enumerable: false - }); - } - } - } - - if (includeNonEnumerable) { - var allPropertyNames = Object.getOwnPropertyNames(parent); - for (var i = 0; i < allPropertyNames.length; i++) { - var propertyName = allPropertyNames[i]; - var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); - if (descriptor && descriptor.enumerable) { - continue; - } - child[propertyName] = _clone(parent[propertyName], depth - 1); - Object.defineProperty(child, propertyName, { - enumerable: false - }); - } - } - - return child; - } - - return _clone(parent, depth); -} - -/** - * Simple flat clone using prototype, accepts only objects, usefull for property - * override on FLAT configuration object (no nested props). - * - * USE WITH CAUTION! This may not behave as you wish if you do not know how this - * works. - */ -clone.clonePrototype = function clonePrototype(parent) { - if (parent === null) - return null; - - var c = function () {}; - c.prototype = parent; - return new c(); -}; - -// private utility functions - -function __objToStr(o) { - return Object.prototype.toString.call(o); -} -clone.__objToStr = __objToStr; - -function __isDate(o) { - return typeof o === 'object' && __objToStr(o) === '[object Date]'; -} -clone.__isDate = __isDate; - -function __isArray(o) { - return typeof o === 'object' && __objToStr(o) === '[object Array]'; -} -clone.__isArray = __isArray; - -function __isRegExp(o) { - return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; -} -clone.__isRegExp = __isRegExp; - -function __getRegExpFlags(re) { - var flags = ''; - if (re.global) flags += 'g'; - if (re.ignoreCase) flags += 'i'; - if (re.multiline) flags += 'm'; - return flags; -} -clone.__getRegExpFlags = __getRegExpFlags; - -return clone; -})(); - -if (typeof module === 'object' && module.exports) { - module.exports = clone; -} diff --git a/skills/flight-finder/node_modules/clone/package.json b/skills/flight-finder/node_modules/clone/package.json deleted file mode 100644 index 39a53e3..0000000 --- a/skills/flight-finder/node_modules/clone/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "clone", - "description": "deep cloning of objects and arrays", - "tags": [ - "clone", - "object", - "array", - "function", - "date" - ], - "version": "2.1.2", - "repository": { - "type": "git", - "url": "git://github.com/pvorb/node-clone.git" - }, - "bugs": { - "url": "https://github.com/pvorb/node-clone/issues" - }, - "main": "clone.js", - "author": "Paul Vorbach (http://paul.vorba.ch/)", - "contributors": [ - "Blake Miner (http://www.blakeminer.com/)", - "Tian You (http://blog.axqd.net/)", - "George Stagas (http://stagas.com/)", - "Tobiasz Cudnik (https://github.com/TobiaszCudnik)", - "Pavel Lang (https://github.com/langpavel)", - "Dan MacTough (http://yabfog.com/)", - "w1nk (https://github.com/w1nk)", - "Hugh Kennedy (http://twitter.com/hughskennedy)", - "Dustin Diaz (http://dustindiaz.com)", - "Ilya Shaisultanov (https://github.com/diversario)", - "Nathan MacInnes (http://macinn.es/)", - "Benjamin E. Coe (https://twitter.com/benjamincoe)", - "Nathan Zadoks (https://github.com/nathan7)", - "Róbert Oroszi (https://github.com/oroce)", - "Aurélio A. Heckert (http://softwarelivre.org/aurium)", - "Guy Ellis (http://www.guyellisrocks.com/)", - "fscherwi (https://fscherwi.github.io)", - "rictic (https://github.com/rictic)", - "Martin Jurča (https://github.com/jurca)", - "Misery Lee (https://github.com/miserylee)", - "Clemens Wolff (https://github.com/c-w)" - ], - "license": "MIT", - "engines": { - "node": ">=0.8" - }, - "dependencies": {}, - "devDependencies": { - "nodeunit": "~0.9.0" - }, - "optionalDependencies": {}, - "scripts": { - "test": "nodeunit test.js" - } -} diff --git a/skills/flight-finder/node_modules/crypto-js/CONTRIBUTING.md b/skills/flight-finder/node_modules/crypto-js/CONTRIBUTING.md deleted file mode 100644 index 09bf774..0000000 --- a/skills/flight-finder/node_modules/crypto-js/CONTRIBUTING.md +++ /dev/null @@ -1,28 +0,0 @@ -# Contribution - -# Git Flow - -The crypto-js project uses [git flow](https://github.com/nvie/gitflow) to manage branches. -Do your changes on the `develop` or even better on a `feature/*` branch. Don't do any changes on the `master` branch. - -# Pull request - -Target your pull request on `develop` branch. Other pull request won't be accepted. - -# How to build - -1. Clone - -2. Run - - ```sh - npm install - ``` - -3. Run - - ```sh - npm run build - ``` - -4. Check `build` folder \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/LICENSE b/skills/flight-finder/node_modules/crypto-js/LICENSE deleted file mode 100644 index b0828e5..0000000 --- a/skills/flight-finder/node_modules/crypto-js/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -# License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2016 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/skills/flight-finder/node_modules/crypto-js/README.md b/skills/flight-finder/node_modules/crypto-js/README.md deleted file mode 100644 index 6a9bcdf..0000000 --- a/skills/flight-finder/node_modules/crypto-js/README.md +++ /dev/null @@ -1,275 +0,0 @@ -# crypto-js - -JavaScript library of crypto standards. - -## Discontinued - -Active development of CryptoJS has been discontinued. This library is no longer maintained. - -Nowadays, NodeJS and modern browsers have a native `Crypto` module. The latest version of CryptoJS already uses the native Crypto module for random number generation, since `Math.random()` is not crypto-safe. Further development of CryptoJS would result in it only being a wrapper of native Crypto. Therefore, development and maintenance has been discontinued, it is time to go for the native `crypto` module. - -## Node.js (Install) - -Requirements: - -- Node.js -- npm (Node.js package manager) - -```bash -npm install crypto-js -``` - -### Usage - -ES6 import for typical API call signing use case: - -```javascript -import sha256 from 'crypto-js/sha256'; -import hmacSHA512 from 'crypto-js/hmac-sha512'; -import Base64 from 'crypto-js/enc-base64'; - -const message, nonce, path, privateKey; // ... -const hashDigest = sha256(nonce + message); -const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey)); -``` - -Modular include: - -```javascript -var AES = require("crypto-js/aes"); -var SHA256 = require("crypto-js/sha256"); -... -console.log(SHA256("Message")); -``` - -Including all libraries, for access to extra methods: - -```javascript -var CryptoJS = require("crypto-js"); -console.log(CryptoJS.HmacSHA1("Message", "Key")); -``` - -## Client (browser) - -Requirements: - -- Node.js -- Bower (package manager for frontend) - -```bash -bower install crypto-js -``` - -### Usage - -Modular include: - -```javascript -require.config({ - packages: [ - { - name: 'crypto-js', - location: 'path-to/bower_components/crypto-js', - main: 'index' - } - ] -}); - -require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) { - console.log(SHA256("Message")); -}); -``` - -Including all libraries, for access to extra methods: - -```javascript -// Above-mentioned will work or use this simple form -require.config({ - paths: { - 'crypto-js': 'path-to/bower_components/crypto-js/crypto-js' - } -}); - -require(["crypto-js"], function (CryptoJS) { - console.log(CryptoJS.HmacSHA1("Message", "Key")); -}); -``` - -### Usage without RequireJS - -```html - - -``` - -## API - -See: https://cryptojs.gitbook.io/docs/ - -### AES Encryption - -#### Plain text encryption - -```javascript -var CryptoJS = require("crypto-js"); - -// Encrypt -var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString(); - -// Decrypt -var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); -var originalText = bytes.toString(CryptoJS.enc.Utf8); - -console.log(originalText); // 'my message' -``` - -#### Object encryption - -```javascript -var CryptoJS = require("crypto-js"); - -var data = [{id: 1}, {id: 2}] - -// Encrypt -var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString(); - -// Decrypt -var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); -var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); - -console.log(decryptedData); // [{id: 1}, {id: 2}] -``` - -### List of modules - - -- ```crypto-js/core``` -- ```crypto-js/x64-core``` -- ```crypto-js/lib-typedarrays``` - ---- - -- ```crypto-js/md5``` -- ```crypto-js/sha1``` -- ```crypto-js/sha256``` -- ```crypto-js/sha224``` -- ```crypto-js/sha512``` -- ```crypto-js/sha384``` -- ```crypto-js/sha3``` -- ```crypto-js/ripemd160``` - ---- - -- ```crypto-js/hmac-md5``` -- ```crypto-js/hmac-sha1``` -- ```crypto-js/hmac-sha256``` -- ```crypto-js/hmac-sha224``` -- ```crypto-js/hmac-sha512``` -- ```crypto-js/hmac-sha384``` -- ```crypto-js/hmac-sha3``` -- ```crypto-js/hmac-ripemd160``` - ---- - -- ```crypto-js/pbkdf2``` - ---- - -- ```crypto-js/aes``` -- ```crypto-js/tripledes``` -- ```crypto-js/rc4``` -- ```crypto-js/rabbit``` -- ```crypto-js/rabbit-legacy``` -- ```crypto-js/evpkdf``` - ---- - -- ```crypto-js/format-openssl``` -- ```crypto-js/format-hex``` - ---- - -- ```crypto-js/enc-latin1``` -- ```crypto-js/enc-utf8``` -- ```crypto-js/enc-hex``` -- ```crypto-js/enc-utf16``` -- ```crypto-js/enc-base64``` - ---- - -- ```crypto-js/mode-cfb``` -- ```crypto-js/mode-ctr``` -- ```crypto-js/mode-ctr-gladman``` -- ```crypto-js/mode-ofb``` -- ```crypto-js/mode-ecb``` - ---- - -- ```crypto-js/pad-pkcs7``` -- ```crypto-js/pad-ansix923``` -- ```crypto-js/pad-iso10126``` -- ```crypto-js/pad-iso97971``` -- ```crypto-js/pad-zeropadding``` -- ```crypto-js/pad-nopadding``` - - -## Release notes - -### 4.2.0 - -Change default hash algorithm and iteration's for PBKDF2 to prevent weak security by using the default configuration. - -Custom KDF Hasher - -Blowfish support - -### 4.1.1 - -Fix module order in bundled release. - -Include the browser field in the released package.json. - -### 4.1.0 - -Added url safe variant of base64 encoding. [357](https://github.com/brix/crypto-js/pull/357) - -Avoid webpack to add crypto-browser package. [364](https://github.com/brix/crypto-js/pull/364) - -### 4.0.0 - -This is an update including breaking changes for some environments. - -In this version `Math.random()` has been replaced by the random methods of the native crypto module. - -For this reason CryptoJS might not run in some JavaScript environments without native crypto module. Such as IE 10 or before or React Native. - -### 3.3.0 - -Rollback, `3.3.0` is the same as `3.1.9-1`. - -The move of using native secure crypto module will be shifted to a new `4.x.x` version. As it is a breaking change the impact is too big for a minor release. - -### 3.2.1 - -The usage of the native crypto module has been fixed. The import and access of the native crypto module has been improved. - -### 3.2.0 - -In this version `Math.random()` has been replaced by the random methods of the native crypto module. - -For this reason CryptoJS might does not run in some JavaScript environments without native crypto module. Such as IE 10 or before. - -If it's absolute required to run CryptoJS in such an environment, stay with `3.1.x` version. Encrypting and decrypting stays compatible. But keep in mind `3.1.x` versions still use `Math.random()` which is cryptographically not secure, as it's not random enough. - -This version came along with `CRITICAL` `BUG`. - -DO NOT USE THIS VERSION! Please, go for a newer version! - -### 3.1.x - -The `3.1.x` are based on the original CryptoJS, wrapped in CommonJS modules. - - diff --git a/skills/flight-finder/node_modules/crypto-js/aes.js b/skills/flight-finder/node_modules/crypto-js/aes.js deleted file mode 100644 index 166e3ea..0000000 --- a/skills/flight-finder/node_modules/crypto-js/aes.js +++ /dev/null @@ -1,234 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - var t; - - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/blowfish.js b/skills/flight-finder/node_modules/crypto-js/blowfish.js deleted file mode 100644 index 149812f..0000000 --- a/skills/flight-finder/node_modules/crypto-js/blowfish.js +++ /dev/null @@ -1,471 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - const N = 16; - - //Origin pbox and sbox, derived from PI - const ORIG_P = [ - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, - 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, - 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, - 0x9216D5D9, 0x8979FB1B - ]; - - const ORIG_S = [ - [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ], - [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ], - [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ], - [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ] - ]; - - var BLOWFISH_CTX = { - pbox: [], - sbox: [] - } - - function F(ctx, x){ - let a = (x >> 24) & 0xFF; - let b = (x >> 16) & 0xFF; - let c = (x >> 8) & 0xFF; - let d = x & 0xFF; - - let y = ctx.sbox[0][a] + ctx.sbox[1][b]; - y = y ^ ctx.sbox[2][c]; - y = y + ctx.sbox[3][d]; - - return y; - } - - function BlowFish_Encrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = 0; i < N; ++i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[N]; - Xl = Xl ^ ctx.pbox[N + 1]; - - return {left: Xl, right: Xr}; - } - - function BlowFish_Decrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = N + 1; i > 1; --i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[1]; - Xl = Xl ^ ctx.pbox[0]; - - return {left: Xl, right: Xr}; - } - - /** - * Initialization ctx's pbox and sbox. - * - * @param {Object} ctx The object has pbox and sbox. - * @param {Array} key An array of 32-bit words. - * @param {int} keysize The length of the key. - * - * @example - * - * BlowFishInit(BLOWFISH_CTX, key, 128/32); - */ - function BlowFishInit(ctx, key, keysize) - { - for(let Row = 0; Row < 4; Row++) - { - ctx.sbox[Row] = []; - for(let Col = 0; Col < 256; Col++) - { - ctx.sbox[Row][Col] = ORIG_S[Row][Col]; - } - } - - let keyIndex = 0; - for(let index = 0; index < N + 2; index++) - { - ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; - keyIndex++; - if(keyIndex >= keysize) - { - keyIndex = 0; - } - } - - let Data1 = 0; - let Data2 = 0; - let res = 0; - for(let i = 0; i < N + 2; i += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.pbox[i] = Data1; - ctx.pbox[i + 1] = Data2; - } - - for(let i = 0; i < 4; i++) - { - for(let j = 0; j < 256; j += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.sbox[i][j] = Data1; - ctx.sbox[i][j + 1] = Data2; - } - } - - return true; - } - - /** - * Blowfish block cipher algorithm. - */ - var Blowfish = C_algo.Blowfish = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - //Initialization pbox and sbox - BlowFishInit(BLOWFISH_CTX, keyWords, keySize); - }, - - encryptBlock: function (M, offset) { - var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - decryptBlock: function (M, offset) { - var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - blockSize: 64/32, - - keySize: 128/32, - - ivSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg); - */ - C.Blowfish = BlockCipher._createHelper(Blowfish); - }()); - - - return CryptoJS.Blowfish; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/bower.json b/skills/flight-finder/node_modules/crypto-js/bower.json deleted file mode 100644 index 4dee617..0000000 --- a/skills/flight-finder/node_modules/crypto-js/bower.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "crypto-js", - "version": "4.2.0", - "description": "JavaScript library of crypto standards.", - "license": "MIT", - "homepage": "http://github.com/brix/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/brix/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64", - "Base64url" - ], - "main": "index.js", - "dependencies": {}, - "browser": { - "crypto": false - }, - "ignore": [] -} diff --git a/skills/flight-finder/node_modules/crypto-js/cipher-core.js b/skills/flight-finder/node_modules/crypto-js/cipher-core.js deleted file mode 100644 index 903f462..0000000 --- a/skills/flight-finder/node_modules/crypto-js/cipher-core.js +++ /dev/null @@ -1,895 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./evpkdf")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./evpkdf"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - var block; - - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - var modeCreator; - - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - var finalProcessedBlocks; - - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - var wordArray; - - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - var salt; - - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt, hasher) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - if (!hasher) { - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - } else { - var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt); - } - - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/core.js b/skills/flight-finder/node_modules/crypto-js/core.js deleted file mode 100644 index e3a498b..0000000 --- a/skills/flight-finder/node_modules/crypto-js/core.js +++ /dev/null @@ -1,807 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /*globals window, global, require*/ - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - - var crypto; - - // Native crypto from window (Browser) - if (typeof window !== 'undefined' && window.crypto) { - crypto = window.crypto; - } - - // Native crypto in web worker (Browser) - if (typeof self !== 'undefined' && self.crypto) { - crypto = self.crypto; - } - - // Native crypto from worker - if (typeof globalThis !== 'undefined' && globalThis.crypto) { - crypto = globalThis.crypto; - } - - // Native (experimental IE 11) crypto from window (Browser) - if (!crypto && typeof window !== 'undefined' && window.msCrypto) { - crypto = window.msCrypto; - } - - // Native crypto from global (NodeJS) - if (!crypto && typeof global !== 'undefined' && global.crypto) { - crypto = global.crypto; - } - - // Native crypto import via require (NodeJS) - if (!crypto && typeof require === 'function') { - try { - crypto = require('crypto'); - } catch (err) {} - } - - /* - * Cryptographically secure pseudorandom number generator - * - * As Math.random() is cryptographically not safe to use - */ - var cryptoSecureRandomInt = function () { - if (crypto) { - // Use getRandomValues method (Browser) - if (typeof crypto.getRandomValues === 'function') { - try { - return crypto.getRandomValues(new Uint32Array(1))[0]; - } catch (err) {} - } - - // Use randomBytes method (NodeJS) - if (typeof crypto.randomBytes === 'function') { - try { - return crypto.randomBytes(4).readInt32LE(); - } catch (err) {} - } - } - - throw new Error('Native crypto module could not be used to get secure random number.'); - }; - - /* - * Local polyfill of Object.create - - */ - var create = Object.create || (function () { - function F() {} - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); - - F.prototype = null; - - return subtype; - }; - }()); - - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; - - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/crypto-js.js b/skills/flight-finder/node_modules/crypto-js/crypto-js.js deleted file mode 100644 index 958ee53..0000000 --- a/skills/flight-finder/node_modules/crypto-js/crypto-js.js +++ /dev/null @@ -1,6657 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /*globals window, global, require*/ - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - - var crypto; - - // Native crypto from window (Browser) - if (typeof window !== 'undefined' && window.crypto) { - crypto = window.crypto; - } - - // Native crypto in web worker (Browser) - if (typeof self !== 'undefined' && self.crypto) { - crypto = self.crypto; - } - - // Native crypto from worker - if (typeof globalThis !== 'undefined' && globalThis.crypto) { - crypto = globalThis.crypto; - } - - // Native (experimental IE 11) crypto from window (Browser) - if (!crypto && typeof window !== 'undefined' && window.msCrypto) { - crypto = window.msCrypto; - } - - // Native crypto from global (NodeJS) - if (!crypto && typeof global !== 'undefined' && global.crypto) { - crypto = global.crypto; - } - - // Native crypto import via require (NodeJS) - if (!crypto && typeof require === 'function') { - try { - crypto = require('crypto'); - } catch (err) {} - } - - /* - * Cryptographically secure pseudorandom number generator - * - * As Math.random() is cryptographically not safe to use - */ - var cryptoSecureRandomInt = function () { - if (crypto) { - // Use getRandomValues method (Browser) - if (typeof crypto.getRandomValues === 'function') { - try { - return crypto.getRandomValues(new Uint32Array(1))[0]; - } catch (err) {} - } - - // Use randomBytes method (NodeJS) - if (typeof crypto.randomBytes === 'function') { - try { - return crypto.randomBytes(4).readInt32LE(); - } catch (err) {} - } - } - - throw new Error('Native crypto module could not be used to get secure random number.'); - }; - - /* - * Local polyfill of Object.create - - */ - var create = Object.create || (function () { - function F() {} - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); - - F.prototype = null; - - return subtype; - }; - }()); - - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; - - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64url encoding strategy. - */ - var Base64url = C_enc.Base64url = { - /** - * Converts a word array to a Base64url string. - * - * @param {WordArray} wordArray The word array. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {string} The Base64url string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); - */ - stringify: function (wordArray, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = urlSafe ? this._safe_map : this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64url string to a word array. - * - * @param {string} base64Str The Base64url string. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64url.parse(base64String); - */ - parse: function (base64Str, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - - // Shortcuts - var base64StrLength = base64Str.length; - var map = urlSafe ? this._safe_map : this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - var Wil; - var Wih; - - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - Wih = Wi.high = M[offset + i * 2] | 0; - Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - Wil = gamma0l + Wi7l; - Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - Wil = Wil + gamma1l; - Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - Wil = Wil + Wi16l; - Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - var tMsw; - var tLsw; - - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA256 - * @property {number} iterations The number of iterations to perform. Default: 250000 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA256, - iterations: 250000 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - var block; - - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - var block; - - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - var modeCreator; - - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - var finalProcessedBlocks; - - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - var wordArray; - - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - var salt; - - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt, hasher) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - if (!hasher) { - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - } else { - var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt); - } - - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - var keystream; - - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - for (var i = data.sigBytes - 1; i >= 0; i--) { - if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - data.sigBytes = i + 1; - break; - } - } - } - }; - - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - var t; - - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - // Make sure the key length is valid (64, 128 or >= 192 bit) - if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { - throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); - } - - // Extend the key according to the keying options defined in 3DES standard - var key1 = keyWords.slice(0, 2); - var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); - var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(key1)); - this._des2 = DES.createEncryptor(WordArray.create(key2)); - this._des3 = DES.createEncryptor(WordArray.create(key3)); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - const N = 16; - - //Origin pbox and sbox, derived from PI - const ORIG_P = [ - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, - 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, - 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, - 0x9216D5D9, 0x8979FB1B - ]; - - const ORIG_S = [ - [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ], - [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ], - [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ], - [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ] - ]; - - var BLOWFISH_CTX = { - pbox: [], - sbox: [] - } - - function F(ctx, x){ - let a = (x >> 24) & 0xFF; - let b = (x >> 16) & 0xFF; - let c = (x >> 8) & 0xFF; - let d = x & 0xFF; - - let y = ctx.sbox[0][a] + ctx.sbox[1][b]; - y = y ^ ctx.sbox[2][c]; - y = y + ctx.sbox[3][d]; - - return y; - } - - function BlowFish_Encrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = 0; i < N; ++i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[N]; - Xl = Xl ^ ctx.pbox[N + 1]; - - return {left: Xl, right: Xr}; - } - - function BlowFish_Decrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = N + 1; i > 1; --i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[1]; - Xl = Xl ^ ctx.pbox[0]; - - return {left: Xl, right: Xr}; - } - - /** - * Initialization ctx's pbox and sbox. - * - * @param {Object} ctx The object has pbox and sbox. - * @param {Array} key An array of 32-bit words. - * @param {int} keysize The length of the key. - * - * @example - * - * BlowFishInit(BLOWFISH_CTX, key, 128/32); - */ - function BlowFishInit(ctx, key, keysize) - { - for(let Row = 0; Row < 4; Row++) - { - ctx.sbox[Row] = []; - for(let Col = 0; Col < 256; Col++) - { - ctx.sbox[Row][Col] = ORIG_S[Row][Col]; - } - } - - let keyIndex = 0; - for(let index = 0; index < N + 2; index++) - { - ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; - keyIndex++; - if(keyIndex >= keysize) - { - keyIndex = 0; - } - } - - let Data1 = 0; - let Data2 = 0; - let res = 0; - for(let i = 0; i < N + 2; i += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.pbox[i] = Data1; - ctx.pbox[i + 1] = Data2; - } - - for(let i = 0; i < 4; i++) - { - for(let j = 0; j < 256; j += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.sbox[i][j] = Data1; - ctx.sbox[i][j + 1] = Data2; - } - } - - return true; - } - - /** - * Blowfish block cipher algorithm. - */ - var Blowfish = C_algo.Blowfish = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - //Initialization pbox and sbox - BlowFishInit(BLOWFISH_CTX, keyWords, keySize); - }, - - encryptBlock: function (M, offset) { - var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - decryptBlock: function (M, offset) { - var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - blockSize: 64/32, - - keySize: 128/32, - - ivSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg); - */ - C.Blowfish = BlockCipher._createHelper(Blowfish); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/docs/QuickStartGuide.wiki b/skills/flight-finder/node_modules/crypto-js/docs/QuickStartGuide.wiki deleted file mode 100644 index 6b20199..0000000 --- a/skills/flight-finder/node_modules/crypto-js/docs/QuickStartGuide.wiki +++ /dev/null @@ -1,470 +0,0 @@ - - ----- - -= Quick-start Guide = - -== Hashers == - -=== The Hasher Algorithms === - -==== MD5 ==== - -MD5 is a widely used hash function. It's been used in a variety of security applications and is also commonly used to check the integrity of files. Though, MD5 is not collision resistant, and it isn't suitable for applications like SSL certificates or digital signatures that rely on this property. - -{{{ - - -}}} - -==== SHA-1 ==== - -The SHA hash functions were designed by the National Security Agency (NSA). SHA-1 is the most established of the existing SHA hash functions, and it's used in a variety of security applications and protocols. Though, SHA-1's collision resistance has been weakening as new attacks are discovered or improved. - -{{{ - - -}}} - -==== SHA-2 ==== - -SHA-256 is one of the four variants in the SHA-2 set. It isn't as widely used as SHA-1, though it appears to provide much better security. - -{{{ - - -}}} - -SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32. - -{{{ - - -}}} - -CryptoJS also supports SHA-224 and SHA-384, which are largely identical but truncated versions of SHA-256 and SHA-512 respectively. - -==== SHA-3 ==== - -SHA-3 is the winner of a five-year competition to select a new cryptographic hash algorithm where 64 competing designs were evaluated. - -{{{ - - -}}} - -SHA-3 can be configured to output hash lengths of one of 224, 256, 384, or 512 bits. The default is 512 bits. - -{{{ - - -}}} - -==== RIPEMD-160 ==== - -{{{ - - -}}} - -=== The Hasher Input === - -The hash algorithms accept either strings or instances of CryptoJS.lib.WordArray. A WordArray object represents an array of 32-bit words. When you pass a string, it's automatically converted to a WordArray encoded as UTF-8. - -=== The Hasher Output === - -The hash you get back isn't a string yet. It's a WordArray object. When you use a WordArray object in a string context, it's automatically converted to a hex string. - -{{{ - - -}}} - -You can convert a WordArray object to other formats by explicitly calling the toString method and passing an encoder. - -{{{ - - - -}}} - -=== Progressive Hashing === - -{{{ - - -}}} - -== HMAC == - -Keyed-hash message authentication codes (HMAC) is a mechanism for message authentication using cryptographic hash functions. - -HMAC can be used in combination with any iterated cryptographic hash function. - -{{{ - - - - - -}}} - -=== Progressive HMAC Hashing === - -{{{ - - -}}} - -== PBKDF2 == - -PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required. - -A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack. - -{{{ - - -}}} - -== Ciphers == - -=== The Cipher Algorithms === - -==== AES ==== - -The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated. - -{{{ - - -}}} - -CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key. - -==== DES, Triple DES ==== - -DES is a previously dominant algorithm for encryption, and was published as an official Federal Information Processing Standard (FIPS). DES is now considered to be insecure due to the small key size. - -{{{ - - -}}} - -Triple DES applies DES three times to each block to increase the key size. The algorithm is believed to be secure in this form. - -{{{ - - -}}} - -==== Rabbit ==== - -Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2-year process where 22 designs were evaluated. - -{{{ - - -}}} - -==== RC4, RC4Drop ==== - -RC4 is a widely-used stream cipher. It's used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm's history doesn't inspire confidence in its security. - -{{{ - - -}}} - -It was discovered that the first few bytes of keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop. - -By default, 192 words (768 bytes) are dropped, but you can configure the algorithm to drop any number of words. - -{{{ - - -}}} - -=== Custom Key and IV === - -{{{ - - -}}} - -=== Block Modes and Padding === - -{{{ - - - - -}}} - -CryptoJS supports the following modes: - - * CBC (the default) - * CFB - * CTR - * OFB - * ECB - -And CryptoJS supports the following padding schemes: - - * Pkcs7 (the default) - * Iso97971 - * AnsiX923 - * Iso10126 - * ZeroPadding - * NoPadding - -=== The Cipher Input === - -For the plaintext message, the cipher algorithms accept either strings or instances of CryptoJS.lib.WordArray. - -For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key. If you pass the actual key, you must also pass the actual IV. - -For the ciphertext, the cipher algorithms accept either strings or instances of CryptoJS.lib.CipherParams. A CipherParams object represents a collection of parameters such as the IV, a salt, and the raw ciphertext itself. When you pass a string, it's automatically converted to a CipherParams object according to a configurable format strategy. - -=== The Cipher Output === - -The plaintext you get back after decryption is a WordArray object. See Hashers' Output for more detail. - -The ciphertext you get back after encryption isn't a string yet. It's a CipherParams object. A CipherParams object gives you access to all the parameters used during encryption. When you use a CipherParams object in a string context, it's automatically converted to a string according to a format strategy. The default is an OpenSSL-compatible format. - -{{{ - - -}}} - -You can define your own formats in order to be compatible with other crypto implementations. A format is an object with two methods—stringify and parse—that converts between CipherParams objects and ciphertext strings. - -Here's how you might write a JSON formatter: - -{{{ - - -}}} - -=== Progressive Ciphering === - -{{{ - - -}}} - -=== Interoperability === - -==== With OpenSSL ==== - -Encrypt with OpenSSL: - -{{{ -openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64 -}}} - -Decrypt with CryptoJS: - -{{{ - - -}}} - -== Encoders == - -CryptoJS can convert from encoding formats such as Base64, Latin1 or Hex to WordArray objects and vica versa. - -{{{ - - - - -}}} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-base64.js b/skills/flight-finder/node_modules/crypto-js/enc-base64.js deleted file mode 100644 index 0ffcd53..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-base64.js +++ /dev/null @@ -1,136 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-base64url.js b/skills/flight-finder/node_modules/crypto-js/enc-base64url.js deleted file mode 100644 index af682e3..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-base64url.js +++ /dev/null @@ -1,148 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64url encoding strategy. - */ - var Base64url = C_enc.Base64url = { - /** - * Converts a word array to a Base64url string. - * - * @param {WordArray} wordArray The word array. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {string} The Base64url string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); - */ - stringify: function (wordArray, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = urlSafe ? this._safe_map : this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64url string to a word array. - * - * @param {string} base64Str The Base64url string. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64url.parse(base64String); - */ - parse: function (base64Str, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - - // Shortcuts - var base64StrLength = base64Str.length; - var map = urlSafe ? this._safe_map : this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64url; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-hex.js b/skills/flight-finder/node_modules/crypto-js/enc-hex.js deleted file mode 100644 index 88161ff..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-hex.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Hex; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-latin1.js b/skills/flight-finder/node_modules/crypto-js/enc-latin1.js deleted file mode 100644 index ade56dc..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-latin1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Latin1; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-utf16.js b/skills/flight-finder/node_modules/crypto-js/enc-utf16.js deleted file mode 100644 index 7de6245..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-utf16.js +++ /dev/null @@ -1,149 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/enc-utf8.js b/skills/flight-finder/node_modules/crypto-js/enc-utf8.js deleted file mode 100644 index e7a251d..0000000 --- a/skills/flight-finder/node_modules/crypto-js/enc-utf8.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.enc.Utf8; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/evpkdf.js b/skills/flight-finder/node_modules/crypto-js/evpkdf.js deleted file mode 100644 index 578974a..0000000 --- a/skills/flight-finder/node_modules/crypto-js/evpkdf.js +++ /dev/null @@ -1,134 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - var block; - - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/format-hex.js b/skills/flight-finder/node_modules/crypto-js/format-hex.js deleted file mode 100644 index 2e9a861..0000000 --- a/skills/flight-finder/node_modules/crypto-js/format-hex.js +++ /dev/null @@ -1,66 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/format-openssl.js b/skills/flight-finder/node_modules/crypto-js/format-openssl.js deleted file mode 100644 index 3373edc..0000000 --- a/skills/flight-finder/node_modules/crypto-js/format-openssl.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.format.OpenSSL; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-md5.js b/skills/flight-finder/node_modules/crypto-js/hmac-md5.js deleted file mode 100644 index ad7a90a..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-md5.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./md5"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./md5", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacMD5; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-ripemd160.js b/skills/flight-finder/node_modules/crypto-js/hmac-ripemd160.js deleted file mode 100644 index 73d55a7..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-ripemd160.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./ripemd160"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./ripemd160", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacRIPEMD160; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha1.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha1.js deleted file mode 100644 index 0b570cb..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha1.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA1; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha224.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha224.js deleted file mode 100644 index 3778863..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha224.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./sha224"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./sha224", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA224; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha256.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha256.js deleted file mode 100644 index 33b0c9f..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha256.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA256; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha3.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha3.js deleted file mode 100644 index 1248804..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha3.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha3"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha3", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA3; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha384.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha384.js deleted file mode 100644 index 0036e2b..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha384.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./sha384"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./sha384", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA384; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac-sha512.js b/skills/flight-finder/node_modules/crypto-js/hmac-sha512.js deleted file mode 100644 index c1005b6..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac-sha512.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.HmacSHA512; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/hmac.js b/skills/flight-finder/node_modules/crypto-js/hmac.js deleted file mode 100644 index 8c09851..0000000 --- a/skills/flight-finder/node_modules/crypto-js/hmac.js +++ /dev/null @@ -1,143 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/index.js b/skills/flight-finder/node_modules/crypto-js/index.js deleted file mode 100644 index b696646..0000000 --- a/skills/flight-finder/node_modules/crypto-js/index.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/lib-typedarrays.js b/skills/flight-finder/node_modules/crypto-js/lib-typedarrays.js deleted file mode 100644 index 264b210..0000000 --- a/skills/flight-finder/node_modules/crypto-js/lib-typedarrays.js +++ /dev/null @@ -1,76 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/md5.js b/skills/flight-finder/node_modules/crypto-js/md5.js deleted file mode 100644 index 72fce03..0000000 --- a/skills/flight-finder/node_modules/crypto-js/md5.js +++ /dev/null @@ -1,268 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/mode-cfb.js b/skills/flight-finder/node_modules/crypto-js/mode-cfb.js deleted file mode 100644 index 444c9cb..0000000 --- a/skills/flight-finder/node_modules/crypto-js/mode-cfb.js +++ /dev/null @@ -1,80 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - var keystream; - - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/mode-ctr-gladman.js b/skills/flight-finder/node_modules/crypto-js/mode-ctr-gladman.js deleted file mode 100644 index bbc5687..0000000 --- a/skills/flight-finder/node_modules/crypto-js/mode-ctr-gladman.js +++ /dev/null @@ -1,116 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/mode-ctr.js b/skills/flight-finder/node_modules/crypto-js/mode-ctr.js deleted file mode 100644 index c3d470a..0000000 --- a/skills/flight-finder/node_modules/crypto-js/mode-ctr.js +++ /dev/null @@ -1,58 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/mode-ecb.js b/skills/flight-finder/node_modules/crypto-js/mode-ecb.js deleted file mode 100644 index ff06921..0000000 --- a/skills/flight-finder/node_modules/crypto-js/mode-ecb.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/mode-ofb.js b/skills/flight-finder/node_modules/crypto-js/mode-ofb.js deleted file mode 100644 index c01314c..0000000 --- a/skills/flight-finder/node_modules/crypto-js/mode-ofb.js +++ /dev/null @@ -1,54 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/package.json b/skills/flight-finder/node_modules/crypto-js/package.json deleted file mode 100644 index 4b9a8e2..0000000 --- a/skills/flight-finder/node_modules/crypto-js/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "crypto-js", - "version": "4.2.0", - "description": "JavaScript library of crypto standards.", - "license": "MIT", - "author": { - "name": "Evan Vosberg", - "url": "http://github.com/evanvosberg" - }, - "homepage": "http://github.com/brix/crypto-js", - "repository": { - "type": "git", - "url": "http://github.com/brix/crypto-js.git" - }, - "keywords": [ - "security", - "crypto", - "Hash", - "MD5", - "SHA1", - "SHA-1", - "SHA256", - "SHA-256", - "RC4", - "Rabbit", - "AES", - "DES", - "PBKDF2", - "HMAC", - "OFB", - "CFB", - "CTR", - "CBC", - "Base64", - "Base64url" - ], - "main": "index.js", - "dependencies": {}, - "browser": { - "crypto": false - } -} diff --git a/skills/flight-finder/node_modules/crypto-js/pad-ansix923.js b/skills/flight-finder/node_modules/crypto-js/pad-ansix923.js deleted file mode 100644 index f01f21e..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-ansix923.js +++ /dev/null @@ -1,49 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pad-iso10126.js b/skills/flight-finder/node_modules/crypto-js/pad-iso10126.js deleted file mode 100644 index 6e2aefd..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-iso10126.js +++ /dev/null @@ -1,44 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pad-iso97971.js b/skills/flight-finder/node_modules/crypto-js/pad-iso97971.js deleted file mode 100644 index 41049b4..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-iso97971.js +++ /dev/null @@ -1,40 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pad-nopadding.js b/skills/flight-finder/node_modules/crypto-js/pad-nopadding.js deleted file mode 100644 index c7787c9..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-nopadding.js +++ /dev/null @@ -1,30 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pad-pkcs7.js b/skills/flight-finder/node_modules/crypto-js/pad-pkcs7.js deleted file mode 100644 index 3555168..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-pkcs7.js +++ /dev/null @@ -1,18 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS.pad.Pkcs7; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pad-zeropadding.js b/skills/flight-finder/node_modules/crypto-js/pad-zeropadding.js deleted file mode 100644 index a1a459e..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pad-zeropadding.js +++ /dev/null @@ -1,47 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - for (var i = data.sigBytes - 1; i >= 0; i--) { - if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - data.sigBytes = i + 1; - break; - } - } - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/pbkdf2.js b/skills/flight-finder/node_modules/crypto-js/pbkdf2.js deleted file mode 100644 index 6850934..0000000 --- a/skills/flight-finder/node_modules/crypto-js/pbkdf2.js +++ /dev/null @@ -1,145 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA256 - * @property {number} iterations The number of iterations to perform. Default: 250000 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA256, - iterations: 250000 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/rabbit-legacy.js b/skills/flight-finder/node_modules/crypto-js/rabbit-legacy.js deleted file mode 100644 index e118b6b..0000000 --- a/skills/flight-finder/node_modules/crypto-js/rabbit-legacy.js +++ /dev/null @@ -1,190 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/rabbit.js b/skills/flight-finder/node_modules/crypto-js/rabbit.js deleted file mode 100644 index 1b06833..0000000 --- a/skills/flight-finder/node_modules/crypto-js/rabbit.js +++ /dev/null @@ -1,192 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/rc4.js b/skills/flight-finder/node_modules/crypto-js/rc4.js deleted file mode 100644 index 0e4bdff..0000000 --- a/skills/flight-finder/node_modules/crypto-js/rc4.js +++ /dev/null @@ -1,139 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/ripemd160.js b/skills/flight-finder/node_modules/crypto-js/ripemd160.js deleted file mode 100644 index 24feb47..0000000 --- a/skills/flight-finder/node_modules/crypto-js/ripemd160.js +++ /dev/null @@ -1,267 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha1.js b/skills/flight-finder/node_modules/crypto-js/sha1.js deleted file mode 100644 index 6691149..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha1.js +++ /dev/null @@ -1,150 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha224.js b/skills/flight-finder/node_modules/crypto-js/sha224.js deleted file mode 100644 index d8ce988..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha224.js +++ /dev/null @@ -1,80 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha256.js b/skills/flight-finder/node_modules/crypto-js/sha256.js deleted file mode 100644 index de2d7fc..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha256.js +++ /dev/null @@ -1,199 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha3.js b/skills/flight-finder/node_modules/crypto-js/sha3.js deleted file mode 100644 index 34ad86c..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha3.js +++ /dev/null @@ -1,326 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - var tMsw; - var tLsw; - - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha384.js b/skills/flight-finder/node_modules/crypto-js/sha384.js deleted file mode 100644 index a0b95bf..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha384.js +++ /dev/null @@ -1,83 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/sha512.js b/skills/flight-finder/node_modules/crypto-js/sha512.js deleted file mode 100644 index d274ab0..0000000 --- a/skills/flight-finder/node_modules/crypto-js/sha512.js +++ /dev/null @@ -1,326 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - var Wil; - var Wih; - - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - Wih = Wi.high = M[offset + i * 2] | 0; - Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - Wil = gamma0l + Wi7l; - Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - Wil = Wil + gamma1l; - Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - Wil = Wil + Wi16l; - Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/tripledes.js b/skills/flight-finder/node_modules/crypto-js/tripledes.js deleted file mode 100644 index 1a92477..0000000 --- a/skills/flight-finder/node_modules/crypto-js/tripledes.js +++ /dev/null @@ -1,779 +0,0 @@ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - // Make sure the key length is valid (64, 128 or >= 192 bit) - if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { - throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); - } - - // Extend the key according to the keying options defined in 3DES standard - var key1 = keyWords.slice(0, 2); - var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); - var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(key1)); - this._des2 = DES.createEncryptor(WordArray.create(key2)); - this._des3 = DES.createEncryptor(WordArray.create(key3)); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/crypto-js/x64-core.js b/skills/flight-finder/node_modules/crypto-js/x64-core.js deleted file mode 100644 index 57dcc14..0000000 --- a/skills/flight-finder/node_modules/crypto-js/x64-core.js +++ /dev/null @@ -1,304 +0,0 @@ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/dfa/README.md b/skills/flight-finder/node_modules/dfa/README.md deleted file mode 100644 index 5e4338f..0000000 --- a/skills/flight-finder/node_modules/dfa/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# dfa - -Compiles a regular expression like syntax to fast deterministic finite automata. -Useful for pattern matching against non-string sequences. - -## Example - -This example matches [Hangul](https://en.wikipedia.org/wiki/Hangul) syllables. The symbols defined in the machine are Unicode character categories which could be mapped from code points. - -Machine definition: - -```coffeescript -# define symbols -X = 0; # Other character -L = 1; # Leading consonant -V = 2; # Medial vowel -T = 3; # Trailing consonant -LV = 4; # Composed syllable -LVT = 5; # Composed syllable -M = 6; # Tone mark - -# define variables -decomposed = L V T?; -partial = LV T?; -composed = LVT; - -# define main state machine pattern -main = (decomposed | partial | composed) M?; -``` - -Visualized, the machine looks like this (double circles are accepting states): - -![dfa](https://cloud.githubusercontent.com/assets/19409/19143719/8fbc6a12-8b5a-11e6-868d-99621644d094.png) - -Compiling and using the machine: - -```javascript -import compile from 'dfa/compile'; -import fs from 'fs'; - -let stateMachine = compile(fs.readFileSync('hangul.machine', 'utf8')); - -// find matches -for (let [startIndex, endIndex] of stateMachine.match([0, 1, 2, 3, 0, 4, 6]) { - console.log('match:', startIndex, endIndex); -} -``` - -Output: -``` -match: 1 3 -match: 5 6 -``` - -## Syntax - -A state machine file contains a list of assignment statements. Comments are also allowed -and are started with the `#` character. Each statement is an assignment of a variable name -to a value or expression. Assigning a variable to a number produces a symbol, which is -added to the state machine's alphabet. Assigning a variable to an expression allows -for substitutions into later expressions. The special `main` variable should always be -assigned to at the end of the file, and is the final expression that will be compiled. - -A subset of common regular expression syntax is supported. A list of operators and their -precedence is below. Operators with the same precedence are evaluated left to right. - -| Precedence | Syntax | Type | Meaning | -| ---------- | ---------- | --------------| ------------------------------------------ | -| 1 | `a \| b` | Alternation | Matches either `a` or `b` | -| 2 | `a b` | Concatenation | Matches `a` followed by `b` | -| 3 | `a*` | Repetition | Matches zero or more occurrences of `a` | -| 3 | `a+` | Repetition | Matches one ore more occurrences of `a` | -| 3 | `a?` | Optional | Matches zero or one occurrence of `a` | -| 3 | `a{n}` | Repetition | Matches exactly n occurrences of `a` | -| 3 | `a{n,}` | Repetition | Matches n or more occurrences of `a` | -| 3 | `a{,n}` | Repetition | Matches up to n occurrences of `a` | -| 3 | `a{n,m}` | Repetition | Matches n to m occurrences of `a` | -| 4 | `t:` | Tag | Tags the following expression with tag `t` | -| 5 | `()` | Grouping | Groups an expression | - -## License - -MIT diff --git a/skills/flight-finder/node_modules/dfa/compile.js b/skills/flight-finder/node_modules/dfa/compile.js deleted file mode 100644 index a6a98b7..0000000 --- a/skills/flight-finder/node_modules/dfa/compile.js +++ /dev/null @@ -1,1834 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -/** - * Returns a new set representing the union of a and b. - */ -function union(a, b) { - var s = new Set(a); - addAll(s, b); - return s; -} -/** - * Adds all items from the set b to a. - */ - -function addAll(a, b) { - for (var x of b) { - a.add(x); - } -} -/** - * Returns whether two sets are equal - */ - -function equal(a, b) { - if (a === b) return true; - if (a.size !== b.size) return false; - - for (var x of a) { - if (!b.has(x)) { - return false; - } - } - - return true; -} - -/** - * Base AST node - */ - -class Node { - constructor() { - Object.defineProperty(this, 'followpos', { - value: new Set() - }); - } - - calcFollowpos() { - for (var key in this) { - if (this[key] instanceof Node) { - this[key].calcFollowpos(); - } - } - } - -} -/** - * Represents a variable reference - */ - -class Variable extends Node { - constructor(name) { - super(); - this.name = name; - } - - copy() { - return new Variable(this.name); - } - -} -/** - * Represents a comment - */ - -class Comment extends Node { - constructor(value) { - super(); - this.value = value; - } - -} -/** - * Represents an assignment statement. - * e.g. `variable = expression;` - */ - -class Assignment extends Node { - constructor(variable, expression) { - super(); - this.variable = variable; - this.expression = expression; - } - -} -/** - * Represents an alternation. - * e.g. `a | b` - */ - -class Alternation extends Node { - constructor(a, b) { - super(); - this.a = a; - this.b = b; - } - - get nullable() { - return this.a.nullable || this.b.nullable; - } - - get firstpos() { - return union(this.a.firstpos, this.b.firstpos); - } - - get lastpos() { - return union(this.a.lastpos, this.b.lastpos); - } - - copy() { - return new Alternation(this.a.copy(), this.b.copy()); - } - -} -/** - * Represents a concatenation, or chain. - * e.g. `a b c` - */ - -class Concatenation extends Node { - constructor(a, b) { - super(); - this.a = a; - this.b = b; - } - - get nullable() { - return this.a.nullable && this.b.nullable; - } - - get firstpos() { - var s = this.a.firstpos; - - if (this.a.nullable) { - s = union(s, this.b.firstpos); - } - - return s; - } - - get lastpos() { - var s = this.b.lastpos; - - if (this.b.nullable) { - s = union(s, this.a.lastpos); - } - - return s; - } - - calcFollowpos() { - super.calcFollowpos(); - - for (var n of this.a.lastpos) { - addAll(n.followpos, this.b.firstpos); - } - } - - copy() { - return new Concatenation(this.a.copy(), this.b.copy()); - } - -} -/** - * Represents a repetition. - * e.g. `a+`, `b*`, or `c?` - */ - -class Repeat extends Node { - constructor(expression, op) { - super(); - this.expression = expression; - this.op = op; - } - - get nullable() { - return this.op === '*' || this.op === '?'; - } - - get firstpos() { - return this.expression.firstpos; - } - - get lastpos() { - return this.expression.lastpos; - } - - calcFollowpos() { - super.calcFollowpos(); - - if (this.op === '*' || this.op === '+') { - for (var n of this.lastpos) { - addAll(n.followpos, this.firstpos); - } - } - } - - copy() { - return new Repeat(this.expression.copy(), this.op); - } - -} -function buildRepetition(expression, min = 0, max = Infinity) { - if (min < 0 || min > max) { - throw new Error("Invalid repetition range: ".concat(min, " ").concat(max)); - } - - var res = null; - - for (var i = 0; i < min; i++) { - res = concat(res, expression.copy()); - } - - if (max === Infinity) { - res = concat(res, new Repeat(expression.copy(), '*')); - } else { - for (var _i = min; _i < max; _i++) { - res = concat(res, new Repeat(expression.copy(), '?')); - } - } - - return res; -} - -function concat(a, b) { - if (!a) { - return b; - } - - return new Concatenation(a, b); -} -/** - * Base class for leaf nodes - */ - - -class Leaf extends Node { - get nullable() { - return false; - } - - get firstpos() { - return new Set([this]); - } - - get lastpos() { - return new Set([this]); - } - -} -/** - * Represents a literal value, e.g. a number - */ - - -class Literal extends Leaf { - constructor(value) { - super(); - this.value = value; - } - - copy() { - return new Literal(this.value); - } - -} -/** - * Marks the end of an expression - */ - -class EndMarker extends Leaf {} -/** - * Represents a tag - * e.g. `a:(a b)` - */ - -class Tag extends Leaf { - constructor(name) { - super(); - this.name = name; - } - - get nullable() { - return true; - } - - copy() { - return new Tag(this.name); - } - -} - -var nodes = /*#__PURE__*/Object.freeze({ - Node: Node, - Variable: Variable, - Comment: Comment, - Assignment: Assignment, - Alternation: Alternation, - Concatenation: Concatenation, - Repeat: Repeat, - buildRepetition: buildRepetition, - Literal: Literal, - EndMarker: EndMarker, - Tag: Tag -}); - -function peg$subclass(child, parent) { - function ctor() { - this.constructor = child; - } - - ctor.prototype = parent.prototype; - child.prototype = new ctor(); -} - -function peg$SyntaxError(message, expected, found, location) { - this.message = message; - this.expected = expected; - this.found = found; - this.location = location; - this.name = "SyntaxError"; - - if (typeof Error.captureStackTrace === "function") { - Error.captureStackTrace(this, peg$SyntaxError); - } -} - -peg$subclass(peg$SyntaxError, Error); - -peg$SyntaxError.buildMessage = function (expected, found) { - var DESCRIBE_EXPECTATION_FNS = { - literal: function (expectation) { - return "\"" + literalEscape(expectation.text) + "\""; - }, - "class": function (expectation) { - var escapedParts = "", - i; - - for (i = 0; i < expectation.parts.length; i++) { - escapedParts += expectation.parts[i] instanceof Array ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) : classEscape(expectation.parts[i]); - } - - return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; - }, - any: function (expectation) { - return "any character"; - }, - end: function (expectation) { - return "end of input"; - }, - other: function (expectation) { - return expectation.description; - } - }; - - function hex(ch) { - return ch.charCodeAt(0).toString(16).toUpperCase(); - } - - function literalEscape(s) { - return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/[\x00-\x0F]/g, function (ch) { - return '\\x0' + hex(ch); - }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { - return '\\x' + hex(ch); - }); - } - - function classEscape(s) { - return s.replace(/\\/g, '\\\\').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/-/g, '\\-').replace(/\0/g, '\\0').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/[\x00-\x0F]/g, function (ch) { - return '\\x0' + hex(ch); - }).replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { - return '\\x' + hex(ch); - }); - } - - function describeExpectation(expectation) { - return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); - } - - function describeExpected(expected) { - var descriptions = new Array(expected.length), - i, - j; - - for (i = 0; i < expected.length; i++) { - descriptions[i] = describeExpectation(expected[i]); - } - - descriptions.sort(); - - if (descriptions.length > 0) { - for (i = 1, j = 1; i < descriptions.length; i++) { - if (descriptions[i - 1] !== descriptions[i]) { - descriptions[j] = descriptions[i]; - j++; - } - } - - descriptions.length = j; - } - - switch (descriptions.length) { - case 1: - return descriptions[0]; - - case 2: - return descriptions[0] + " or " + descriptions[1]; - - default: - return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; - } - } - - function describeFound(found) { - return found ? "\"" + literalEscape(found) + "\"" : "end of input"; - } - - return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; -}; - -function peg$parse(input, options) { - options = options !== void 0 ? options : {}; - - var peg$FAILED = {}, - peg$startRuleFunctions = { - rules: peg$parserules - }, - peg$startRuleFunction = peg$parserules, - peg$c0 = function (s) { - return s; - }, - peg$c1 = "#", - peg$c2 = peg$literalExpectation("#", false), - peg$c3 = /^[^\r\n]/, - peg$c4 = peg$classExpectation(["\r", "\n"], true, false), - peg$c5 = /^[\r\n]/, - peg$c6 = peg$classExpectation(["\r", "\n"], false, false), - peg$c7 = function (v) { - return new n.Comment(v.join('')); - }, - peg$c8 = "=", - peg$c9 = peg$literalExpectation("=", false), - peg$c10 = ";", - peg$c11 = peg$literalExpectation(";", false), - peg$c12 = function (v, e) { - return new n.Assignment(v, e); - }, - peg$c13 = function (v) { - return new n.Variable(v); - }, - peg$c14 = "|", - peg$c15 = peg$literalExpectation("|", false), - peg$c16 = function (a, b) { - return new n.Alternation(a, b); - }, - peg$c17 = function (a, b) { - return new n.Concatenation(a, b); - }, - peg$c18 = ":", - peg$c19 = peg$literalExpectation(":", false), - peg$c20 = function (t, e) { - return new n.Concatenation(e, new n.Tag(t)); - }, - peg$c21 = "*", - peg$c22 = peg$literalExpectation("*", false), - peg$c23 = function (t) { - return new n.Repeat(t, '*'); - }, - peg$c24 = "?", - peg$c25 = peg$literalExpectation("?", false), - peg$c26 = function (t) { - return new n.Repeat(t, '?'); - }, - peg$c27 = "+", - peg$c28 = peg$literalExpectation("+", false), - peg$c29 = function (t) { - return new n.Repeat(t, '+'); - }, - peg$c30 = "{", - peg$c31 = peg$literalExpectation("{", false), - peg$c32 = "}", - peg$c33 = peg$literalExpectation("}", false), - peg$c34 = function (t, m) { - return n.buildRepetition(t, m, m); - }, - peg$c35 = ",", - peg$c36 = peg$literalExpectation(",", false), - peg$c37 = function (t, min) { - return n.buildRepetition(t, min, Infinity); - }, - peg$c38 = function (t, max) { - return n.buildRepetition(t, 0, max); - }, - peg$c39 = function (t, min, max) { - return n.buildRepetition(t, min, max); - }, - peg$c40 = function (x) { - return new n.Literal(x); - }, - peg$c41 = "(", - peg$c42 = peg$literalExpectation("(", false), - peg$c43 = ")", - peg$c44 = peg$literalExpectation(")", false), - peg$c45 = function (e) { - return e; - }, - peg$c47 = function (a, b) { - return a + b.join(''); - }, - peg$c48 = "_", - peg$c49 = peg$literalExpectation("_", false), - peg$c50 = /^[a-zA-Z]/, - peg$c51 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), - peg$c52 = /^[0-9]/, - peg$c53 = peg$classExpectation([["0", "9"]], false, false), - peg$c54 = function (num) { - return parseInt(num.join('')); - }, - peg$c55 = /^[ \t\r\n]/, - peg$c56 = peg$classExpectation([" ", "\t", "\r", "\n"], false, false), - peg$currPos = 0, - peg$posDetailsCache = [{ - line: 1, - column: 1 - }], - peg$maxFailPos = 0, - peg$maxFailExpected = [], - peg$result; - - if ("startRule" in options) { - if (!(options.startRule in peg$startRuleFunctions)) { - throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); - } - - peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; - } - - function peg$literalExpectation(text, ignoreCase) { - return { - type: "literal", - text: text, - ignoreCase: ignoreCase - }; - } - - function peg$classExpectation(parts, inverted, ignoreCase) { - return { - type: "class", - parts: parts, - inverted: inverted, - ignoreCase: ignoreCase - }; - } - - function peg$endExpectation() { - return { - type: "end" - }; - } - - function peg$computePosDetails(pos) { - var details = peg$posDetailsCache[pos], - p; - - if (details) { - return details; - } else { - p = pos - 1; - - while (!peg$posDetailsCache[p]) { - p--; - } - - details = peg$posDetailsCache[p]; - details = { - line: details.line, - column: details.column - }; - - while (p < pos) { - if (input.charCodeAt(p) === 10) { - details.line++; - details.column = 1; - } else { - details.column++; - } - - p++; - } - - peg$posDetailsCache[pos] = details; - return details; - } - } - - function peg$computeLocation(startPos, endPos) { - var startPosDetails = peg$computePosDetails(startPos), - endPosDetails = peg$computePosDetails(endPos); - return { - start: { - offset: startPos, - line: startPosDetails.line, - column: startPosDetails.column - }, - end: { - offset: endPos, - line: endPosDetails.line, - column: endPosDetails.column - } - }; - } - - function peg$fail(expected) { - if (peg$currPos < peg$maxFailPos) { - return; - } - - if (peg$currPos > peg$maxFailPos) { - peg$maxFailPos = peg$currPos; - peg$maxFailExpected = []; - } - - peg$maxFailExpected.push(expected); - } - - function peg$buildStructuredError(expected, found, location) { - return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location); - } - - function peg$parserules() { - var s0, s1; - s0 = []; - s1 = peg$parsestatement(); - - if (s1 !== peg$FAILED) { - while (s1 !== peg$FAILED) { - s0.push(s1); - s1 = peg$parsestatement(); - } - } else { - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parsestatement() { - var s0, s1, s2; - s0 = peg$currPos; - s1 = peg$parsestatement_type(); - - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - - if (s2 !== peg$FAILED) { - s1 = peg$c0(s1); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parsestatement_type() { - var s0; - s0 = peg$parseassignment(); - - if (s0 === peg$FAILED) { - s0 = peg$parsecomment(); - } - - return s0; - } - - function peg$parsecomment() { - var s0, s1, s2, s3; - s0 = peg$currPos; - - if (input.charCodeAt(peg$currPos) === 35) { - s1 = peg$c1; - peg$currPos++; - } else { - s1 = peg$FAILED; - - { - peg$fail(peg$c2); - } - } - - if (s1 !== peg$FAILED) { - s2 = []; - - if (peg$c3.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c4); - } - } - - while (s3 !== peg$FAILED) { - s2.push(s3); - - if (peg$c3.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c4); - } - } - } - - if (s2 !== peg$FAILED) { - if (peg$c5.test(input.charAt(peg$currPos))) { - s3 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c6); - } - } - - if (s3 !== peg$FAILED) { - s1 = peg$c7(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parseassignment() { - var s0, s1, s2, s3, s4, s5, s6, s7; - s0 = peg$currPos; - s1 = peg$parsevariable(); - - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 61) { - s3 = peg$c8; - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c9); - } - } - - if (s3 !== peg$FAILED) { - s4 = peg$parse_(); - - if (s4 !== peg$FAILED) { - s5 = peg$parsealternation(); - - if (s5 !== peg$FAILED) { - s6 = peg$parse_(); - - if (s6 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 59) { - s7 = peg$c10; - peg$currPos++; - } else { - s7 = peg$FAILED; - - { - peg$fail(peg$c11); - } - } - - if (s7 !== peg$FAILED) { - s1 = peg$c12(s1, s5); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parsevariable() { - var s0, s1; - s0 = peg$currPos; - s1 = peg$parsename(); - - if (s1 !== peg$FAILED) { - s1 = peg$c13(s1); - } - - s0 = s1; - return s0; - } - - function peg$parsealternation() { - var s0, s1, s2, s3, s4, s5; - s0 = peg$currPos; - s1 = peg$parseconcatenation(); - - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 124) { - s3 = peg$c14; - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c15); - } - } - - if (s3 !== peg$FAILED) { - s4 = peg$parse_(); - - if (s4 !== peg$FAILED) { - s5 = peg$parsealternation(); - - if (s5 !== peg$FAILED) { - s1 = peg$c16(s1, s5); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$parseconcatenation(); - } - - return s0; - } - - function peg$parseconcatenation() { - var s0, s1, s2, s3; - s0 = peg$currPos; - s1 = peg$parserepeat(); - - if (s1 !== peg$FAILED) { - s2 = peg$parse_(); - - if (s2 !== peg$FAILED) { - s3 = peg$parseconcatenation(); - - if (s3 !== peg$FAILED) { - s1 = peg$c17(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$parserepeat(); - } - - return s0; - } - - function peg$parserepeat() { - var s0, s1, s2, s3, s4, s5, s6; - s0 = peg$currPos; - s1 = peg$parsename(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 58) { - s2 = peg$c18; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c19); - } - } - - if (s2 !== peg$FAILED) { - s3 = peg$parserepeat(); - - if (s3 !== peg$FAILED) { - s1 = peg$c20(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 42) { - s2 = peg$c21; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c22); - } - } - - if (s2 !== peg$FAILED) { - s1 = peg$c23(s1); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 63) { - s2 = peg$c24; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c25); - } - } - - if (s2 !== peg$FAILED) { - s1 = peg$c26(s1); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 43) { - s2 = peg$c27; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c28); - } - } - - if (s2 !== peg$FAILED) { - s1 = peg$c29(s1); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 123) { - s2 = peg$c30; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c31); - } - } - - if (s2 !== peg$FAILED) { - s3 = peg$parsenumber(); - - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 125) { - s4 = peg$c32; - peg$currPos++; - } else { - s4 = peg$FAILED; - - { - peg$fail(peg$c33); - } - } - - if (s4 !== peg$FAILED) { - s1 = peg$c34(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 123) { - s2 = peg$c30; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c31); - } - } - - if (s2 !== peg$FAILED) { - s3 = peg$parsenumber(); - - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 44) { - s4 = peg$c35; - peg$currPos++; - } else { - s4 = peg$FAILED; - - { - peg$fail(peg$c36); - } - } - - if (s4 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 125) { - s5 = peg$c32; - peg$currPos++; - } else { - s5 = peg$FAILED; - - { - peg$fail(peg$c33); - } - } - - if (s5 !== peg$FAILED) { - s1 = peg$c37(s1, s3); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 123) { - s2 = peg$c30; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c31); - } - } - - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 44) { - s3 = peg$c35; - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c36); - } - } - - if (s3 !== peg$FAILED) { - s4 = peg$parsenumber(); - - if (s4 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 125) { - s5 = peg$c32; - peg$currPos++; - } else { - s5 = peg$FAILED; - - { - peg$fail(peg$c33); - } - } - - if (s5 !== peg$FAILED) { - s1 = peg$c38(s1, s4); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parseterm(); - - if (s1 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 123) { - s2 = peg$c30; - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c31); - } - } - - if (s2 !== peg$FAILED) { - s3 = peg$parsenumber(); - - if (s3 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 44) { - s4 = peg$c35; - peg$currPos++; - } else { - s4 = peg$FAILED; - - { - peg$fail(peg$c36); - } - } - - if (s4 !== peg$FAILED) { - s5 = peg$parsenumber(); - - if (s5 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 125) { - s6 = peg$c32; - peg$currPos++; - } else { - s6 = peg$FAILED; - - { - peg$fail(peg$c33); - } - } - - if (s6 !== peg$FAILED) { - s1 = peg$c39(s1, s3, s5); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - if (s0 === peg$FAILED) { - s0 = peg$parseterm(); - } - } - } - } - } - } - } - } - - return s0; - } - - function peg$parseterm() { - var s0, s1, s2, s3; - s0 = peg$parsevariable(); - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - s1 = peg$parsenumber(); - - if (s1 !== peg$FAILED) { - s1 = peg$c40(s1); - } - - s0 = s1; - - if (s0 === peg$FAILED) { - s0 = peg$currPos; - - if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c41; - peg$currPos++; - } else { - s1 = peg$FAILED; - - { - peg$fail(peg$c42); - } - } - - if (s1 !== peg$FAILED) { - s2 = peg$parsealternation(); - - if (s2 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 41) { - s3 = peg$c43; - peg$currPos++; - } else { - s3 = peg$FAILED; - - { - peg$fail(peg$c44); - } - } - - if (s3 !== peg$FAILED) { - s1 = peg$c45(s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } - } - - return s0; - } - - function peg$parsename() { - var s0, s1, s2, s3; - s0 = peg$currPos; - s1 = peg$parsename_start_char(); - - if (s1 !== peg$FAILED) { - s2 = []; - s3 = peg$parsename_char(); - - while (s3 !== peg$FAILED) { - s2.push(s3); - s3 = peg$parsename_char(); - } - - if (s2 !== peg$FAILED) { - s1 = peg$c47(s1, s2); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parsename_start_char() { - var s0; - - if (input.charCodeAt(peg$currPos) === 95) { - s0 = peg$c48; - peg$currPos++; - } else { - s0 = peg$FAILED; - - { - peg$fail(peg$c49); - } - } - - if (s0 === peg$FAILED) { - if (peg$c50.test(input.charAt(peg$currPos))) { - s0 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s0 = peg$FAILED; - - { - peg$fail(peg$c51); - } - } - } - - return s0; - } - - function peg$parsename_char() { - var s0; - s0 = peg$parsename_start_char(); - - if (s0 === peg$FAILED) { - if (peg$c52.test(input.charAt(peg$currPos))) { - s0 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s0 = peg$FAILED; - - { - peg$fail(peg$c53); - } - } - } - - return s0; - } - - function peg$parsenumber() { - var s0, s1, s2; - s0 = peg$currPos; - s1 = []; - - if (peg$c52.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c53); - } - } - - if (s2 !== peg$FAILED) { - while (s2 !== peg$FAILED) { - s1.push(s2); - - if (peg$c52.test(input.charAt(peg$currPos))) { - s2 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s2 = peg$FAILED; - - { - peg$fail(peg$c53); - } - } - } - } else { - s1 = peg$FAILED; - } - - if (s1 !== peg$FAILED) { - s1 = peg$c54(s1); - } - - s0 = s1; - return s0; - } - - function peg$parse_() { - var s0, s1; - s0 = []; - - if (peg$c55.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - - { - peg$fail(peg$c56); - } - } - - while (s1 !== peg$FAILED) { - s0.push(s1); - - if (peg$c55.test(input.charAt(peg$currPos))) { - s1 = input.charAt(peg$currPos); - peg$currPos++; - } else { - s1 = peg$FAILED; - - { - peg$fail(peg$c56); - } - } - } - - return s0; - } - - var n = nodes; - peg$result = peg$startRuleFunction(); - - if (peg$result !== peg$FAILED && peg$currPos === input.length) { - return peg$result; - } else { - if (peg$result !== peg$FAILED && peg$currPos < input.length) { - peg$fail(peg$endExpectation()); - } - - throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)); - } -} - -var grammar = { - SyntaxError: peg$SyntaxError, - parse: peg$parse -}; - -/** - * Processes a list of statements into a symbol table - */ - -class SymbolTable { - constructor(statements, externalSymbols = {}) { - this.variables = {}; - this.symbols = {}; - this.main = null; - this.size = 0; - this.addExternalSymbols(externalSymbols); - this.process(statements); - } - - addExternalSymbols(externalSymbols) { - for (var key in externalSymbols) { - this.variables[key] = new Literal(externalSymbols[key]); - this.symbols[key] = externalSymbols[key]; - this.size++; - } - } - - process(statements) { - for (var statement of statements) { - if (statement instanceof Assignment) { - this.variables[statement.variable.name] = this.processExpression(statement.expression); - - if (statement.expression instanceof Literal) { - this.symbols[statement.variable.name] = statement.expression.value; - this.size++; - } - } - } - - this.main = this.variables.main; - - if (!this.main) { - throw new Error('No main variable declaration found'); - } - } - - processExpression(expr) { - // Process children - for (var key in expr) { - if (expr[key] instanceof Node) { - expr[key] = this.processExpression(expr[key]); - } - } // Replace variable references with their values - - - if (expr instanceof Variable) { - var value = this.variables[expr.name]; - if (value == null) throw new Error("Undeclared indentifier ".concat(expr.name)); - expr = this.processExpression(value.copy()); - } - - return expr; - } - -} - -var END_MARKER = new EndMarker(); -/** - * This is an implementation of the direct regular expression to DFA algorithm described - * in section 3.9.5 of "Compilers: Principles, Techniques, and Tools" by Aho, - * Lam, Sethi, and Ullman. http://dragonbook.stanford.edu - * There is a PDF of the book here: - * http://www.informatik.uni-bremen.de/agbkb/lehre/ccfl/Material/ALSUdragonbook.pdf - */ - -function buildDFA(root, numSymbols) { - root = new Concatenation(root, END_MARKER); - root.calcFollowpos(); - var failState = new State(new Set(), numSymbols); - var initialState = new State(root.firstpos, numSymbols); - var dstates = [failState, initialState]; // while there is an unmarked state S in dstates - - while (1) { - var s = null; - - for (var j = 1; j < dstates.length; j++) { - if (!dstates[j].marked) { - s = dstates[j]; - break; - } - } - - if (s == null) { - break; - } // mark S - - - s.marked = true; // for each input symbol a - - for (var a = 0; a < numSymbols; a++) { - // let U be the union of followpos(p) for all - // p in S that correspond to a - var u = new Set(); - - for (var p of s.positions) { - if (p instanceof Literal && p.value === a) { - addAll(u, p.followpos); - } - } - - if (u.size === 0) { - continue; - } // if U is not in dstates - - - var ux = -1; - - for (var i = 0; i < dstates.length; i++) { - if (equal(u, dstates[i].positions)) { - ux = i; - break; - } - } - - if (ux === -1) { - // Add U as an unmarked state to dstates - dstates.push(new State(u, numSymbols)); - ux = dstates.length - 1; - } - - s.transitions[a] = ux; - } - } - - return dstates; -} - -class State { - constructor(positions, len) { - this.positions = positions; - this.transitions = new Uint16Array(len); - this.accepting = positions.has(END_MARKER); - this.marked = false; - this.tags = new Set(); - - for (var pos of positions) { - if (pos instanceof Tag) { - this.tags.add(pos.name); - } - } - } - -} - -var INITIAL_STATE = 1; -var FAIL_STATE = 0; -/** - * A StateMachine represents a deterministic finite automaton. - * It can perform matches over a sequence of values, similar to a regular expression. - */ - -class StateMachine { - constructor(dfa) { - this.stateTable = dfa.stateTable; - this.accepting = dfa.accepting; - this.tags = dfa.tags; - } - /** - * Returns an iterable object that yields pattern matches over the input sequence. - * Matches are of the form [startIndex, endIndex, tags]. - */ - - - match(str) { - var self = this; - return { - *[Symbol.iterator]() { - var state = INITIAL_STATE; - var startRun = null; - var lastAccepting = null; - var lastState = null; - - for (var p = 0; p < str.length; p++) { - var c = str[p]; - lastState = state; - state = self.stateTable[state][c]; - - if (state === FAIL_STATE) { - // yield the last match if any - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[lastState]]; - } // reset the state as if we started over from the initial state - - - state = self.stateTable[INITIAL_STATE][c]; - startRun = null; - } // start a run if not in the failure state - - - if (state !== FAIL_STATE && startRun == null) { - startRun = p; - } // if accepting, mark the potential match end - - - if (self.accepting[state]) { - lastAccepting = p; - } // reset the state to the initial state if we get into the failure state - - - if (state === FAIL_STATE) { - state = INITIAL_STATE; - } - } // yield the last match if any - - - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[state]]; - } - } - - }; - } - /** - * For each match over the input sequence, action functions matching - * the tag definitions in the input pattern are called with the startIndex, - * endIndex, and sub-match sequence. - */ - - - apply(str, actions) { - for (var [start, end, tags] of this.match(str)) { - for (var tag of tags) { - if (typeof actions[tag] === 'function') { - actions[tag](start, end, str.slice(start, end + 1)); - } - } - } - } - -} - -function parse(string, externalSymbols) { - var ast = grammar.parse(string); - return new SymbolTable(ast, externalSymbols); -} -function build(symbolTable) { - var states = buildDFA(symbolTable.main, symbolTable.size); - return new StateMachine({ - stateTable: states.map(s => Array.from(s.transitions)), - accepting: states.map(s => s.accepting), - tags: states.map(s => Array.from(s.tags)) - }); -} -function compile(string, externalSymbols) { - return build(parse(string, externalSymbols)); -} - -exports.build = build; -exports.default = compile; -exports.parse = parse; -//# sourceMappingURL=compile.js.map diff --git a/skills/flight-finder/node_modules/dfa/compile.js.map b/skills/flight-finder/node_modules/dfa/compile.js.map deleted file mode 100644 index c105528..0000000 --- a/skills/flight-finder/node_modules/dfa/compile.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compile.js","sources":["src/utils.js","src/nodes.js","src/grammar.js","src/SymbolTable.js","src/dfa.js","src/StateMachine.js","src/compile.js"],"sourcesContent":["/**\n * Returns a new set representing the union of a and b.\n */\nexport function union(a, b) {\n let s = new Set(a);\n addAll(s, b);\n return s;\n}\n\n/**\n * Adds all items from the set b to a.\n */\nexport function addAll(a, b) {\n for (let x of b) {\n a.add(x);\n }\n}\n\n/**\n * Returns whether two sets are equal\n */\nexport function equal(a, b) {\n if (a === b)\n return true;\n\n if (a.size !== b.size)\n return false;\n\n for (let x of a) {\n if (!b.has(x)) {\n return false;\n }\n }\n\n return true;\n}\n","import {addAll, union} from './utils';\n\n/**\n * Base AST node\n */\nexport class Node {\n constructor() {\n Object.defineProperty(this, 'followpos', {value: new Set})\n }\n\n calcFollowpos() {\n for (let key in this) {\n if (this[key] instanceof Node) {\n this[key].calcFollowpos();\n }\n }\n }\n}\n\n/**\n * Represents a variable reference\n */\nexport class Variable extends Node {\n constructor(name) {\n super();\n this.name = name;\n }\n\n copy() {\n return new Variable(this.name);\n }\n}\n\n/**\n * Represents a comment\n */\nexport class Comment extends Node {\n constructor(value) {\n super();\n this.value = value;\n }\n}\n\n/**\n * Represents an assignment statement.\n * e.g. `variable = expression;`\n */\nexport class Assignment extends Node {\n constructor(variable, expression) {\n super();\n this.variable = variable;\n this.expression = expression;\n }\n}\n\n/**\n * Represents an alternation.\n * e.g. `a | b`\n */\nexport class Alternation extends Node {\n constructor(a, b) {\n super();\n this.a = a;\n this.b = b;\n }\n\n get nullable() {\n return this.a.nullable || this.b.nullable;\n }\n\n get firstpos() {\n return union(this.a.firstpos, this.b.firstpos);\n }\n\n get lastpos() {\n return union(this.a.lastpos, this.b.lastpos);\n }\n\n copy() {\n return new Alternation(this.a.copy(), this.b.copy());\n }\n}\n\n/**\n * Represents a concatenation, or chain.\n * e.g. `a b c`\n */\nexport class Concatenation extends Node {\n constructor(a, b) {\n super();\n this.a = a;\n this.b = b;\n }\n\n get nullable() {\n return this.a.nullable && this.b.nullable;\n }\n\n get firstpos() {\n let s = this.a.firstpos;\n if (this.a.nullable) {\n s = union(s, this.b.firstpos);\n }\n\n return s;\n }\n\n get lastpos() {\n let s = this.b.lastpos;\n if (this.b.nullable) {\n s = union(s, this.a.lastpos);\n }\n\n return s;\n }\n\n calcFollowpos() {\n super.calcFollowpos();\n for (let n of this.a.lastpos) {\n addAll(n.followpos, this.b.firstpos);\n }\n }\n\n copy() {\n return new Concatenation(this.a.copy(), this.b.copy());\n }\n}\n\n/**\n * Represents a repetition.\n * e.g. `a+`, `b*`, or `c?`\n */\nexport class Repeat extends Node {\n constructor(expression, op) {\n super();\n this.expression = expression;\n this.op = op;\n }\n\n get nullable() {\n return this.op === '*' || this.op === '?';\n }\n\n get firstpos() {\n return this.expression.firstpos;\n }\n\n get lastpos() {\n return this.expression.lastpos;\n }\n\n calcFollowpos() {\n super.calcFollowpos();\n if (this.op === '*' || this.op === '+') {\n for (let n of this.lastpos) {\n addAll(n.followpos, this.firstpos);\n }\n }\n }\n\n copy() {\n return new Repeat(this.expression.copy(), this.op);\n }\n}\n\nexport function buildRepetition(expression, min = 0, max = Infinity) {\n if (min < 0 || min > max) {\n throw new Error(`Invalid repetition range: ${min} ${max}`);\n }\n\n let res = null;\n for (let i = 0; i < min; i++) {\n res = concat(res, expression.copy());\n }\n\n if (max === Infinity) {\n res = concat(res, new Repeat(expression.copy(), '*'));\n } else {\n for (let i = min; i < max; i++) {\n res = concat(res, new Repeat(expression.copy(), '?'))\n }\n }\n\n return res;\n}\n\nfunction concat(a, b) {\n if (!a) {\n return b;\n }\n\n return new Concatenation(a, b);\n}\n\n/**\n * Base class for leaf nodes\n */\nclass Leaf extends Node {\n get nullable() {\n return false;\n }\n\n get firstpos() {\n return new Set([this]);\n }\n\n get lastpos() {\n return new Set([this]);\n }\n}\n\n/**\n * Represents a literal value, e.g. a number\n */\nexport class Literal extends Leaf {\n constructor(value) {\n super();\n this.value = value;\n }\n\n copy() {\n return new Literal(this.value);\n }\n}\n\n/**\n * Marks the end of an expression\n */\nexport class EndMarker extends Leaf {}\n\n/**\n * Represents a tag\n * e.g. `a:(a b)`\n */\nexport class Tag extends Leaf {\n constructor(name) {\n super();\n this.name = name;\n }\n\n get nullable() {\n return true;\n }\n\n copy() {\n return new Tag(this.name);\n }\n}\n","/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n\n\"use strict\";\n\nfunction peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n \"class\": function(expectation) {\n var escapedParts = \"\",\n i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n : classEscape(expectation.parts[i]);\n }\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n\n any: function(expectation) {\n return \"any character\";\n },\n\n end: function(expectation) {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i, j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n var peg$FAILED = {},\n\n peg$startRuleFunctions = { rules: peg$parserules },\n peg$startRuleFunction = peg$parserules,\n\n peg$c0 = function(s) { return s },\n peg$c1 = \"#\",\n peg$c2 = peg$literalExpectation(\"#\", false),\n peg$c3 = /^[^\\r\\n]/,\n peg$c4 = peg$classExpectation([\"\\r\", \"\\n\"], true, false),\n peg$c5 = /^[\\r\\n]/,\n peg$c6 = peg$classExpectation([\"\\r\", \"\\n\"], false, false),\n peg$c7 = function(v) { return new n.Comment(v.join('')) },\n peg$c8 = \"=\",\n peg$c9 = peg$literalExpectation(\"=\", false),\n peg$c10 = \";\",\n peg$c11 = peg$literalExpectation(\";\", false),\n peg$c12 = function(v, e) { return new n.Assignment(v, e) },\n peg$c13 = function(v) { return new n.Variable(v) },\n peg$c14 = \"|\",\n peg$c15 = peg$literalExpectation(\"|\", false),\n peg$c16 = function(a, b) { return new n.Alternation(a, b) },\n peg$c17 = function(a, b) { return new n.Concatenation(a, b) },\n peg$c18 = \":\",\n peg$c19 = peg$literalExpectation(\":\", false),\n peg$c20 = function(t, e) { return new n.Concatenation(e, new n.Tag(t)) },\n peg$c21 = \"*\",\n peg$c22 = peg$literalExpectation(\"*\", false),\n peg$c23 = function(t) { return new n.Repeat(t, '*') },\n peg$c24 = \"?\",\n peg$c25 = peg$literalExpectation(\"?\", false),\n peg$c26 = function(t) { return new n.Repeat(t, '?') },\n peg$c27 = \"+\",\n peg$c28 = peg$literalExpectation(\"+\", false),\n peg$c29 = function(t) { return new n.Repeat(t, '+') },\n peg$c30 = \"{\",\n peg$c31 = peg$literalExpectation(\"{\", false),\n peg$c32 = \"}\",\n peg$c33 = peg$literalExpectation(\"}\", false),\n peg$c34 = function(t, m) { return n.buildRepetition(t, m, m) },\n peg$c35 = \",\",\n peg$c36 = peg$literalExpectation(\",\", false),\n peg$c37 = function(t, min) { return n.buildRepetition(t, min, Infinity) },\n peg$c38 = function(t, max) { return n.buildRepetition(t, 0, max) },\n peg$c39 = function(t, min, max) { return n.buildRepetition(t, min, max) },\n peg$c40 = function(x) { return new n.Literal(x) },\n peg$c41 = \"(\",\n peg$c42 = peg$literalExpectation(\"(\", false),\n peg$c43 = \")\",\n peg$c44 = peg$literalExpectation(\")\", false),\n peg$c45 = function(e) { return e },\n peg$c46 = function() { return n.buildRepetition() },\n peg$c47 = function(a, b) { return a + b.join('') },\n peg$c48 = \"_\",\n peg$c49 = peg$literalExpectation(\"_\", false),\n peg$c50 = /^[a-zA-Z]/,\n peg$c51 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false),\n peg$c52 = /^[0-9]/,\n peg$c53 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c54 = function(num) { return parseInt(num.join('')) },\n peg$c55 = /^[ \\t\\r\\n]/,\n peg$c56 = peg$classExpectation([\" \", \"\\t\", \"\\r\", \"\\n\"], false, false),\n\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{ line: 1, column: 1 }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos], p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parserules() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parsestatement();\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsestatement();\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsestatement() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = peg$parsestatement_type();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsestatement_type() {\n var s0;\n\n s0 = peg$parseassignment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsecomment();\n }\n\n return s0;\n }\n\n function peg$parsecomment() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c1;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c2); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c3.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n }\n if (s2 !== peg$FAILED) {\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c7(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseassignment() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parsevariable();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c8;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsealternation();\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 59) {\n s7 = peg$c10;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsevariable() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c13(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsealternation() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parseconcatenation();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 124) {\n s3 = peg$c14;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsealternation();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c16(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseconcatenation();\n }\n\n return s0;\n }\n\n function peg$parseconcatenation() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parserepeat();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseconcatenation();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c17(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parserepeat();\n }\n\n return s0;\n }\n\n function peg$parserepeat() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n s1 = peg$parsename();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parserepeat();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 42) {\n s2 = peg$c21;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c22); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c23(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 63) {\n s2 = peg$c24;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c25); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s2 = peg$c27;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c29(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c30;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s4 = peg$c32;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c34(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c30;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c35;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c32;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c37(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c30;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c35;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsenumber();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c32;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38(s1, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseterm();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s2 = peg$c30;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c35;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsenumber();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s6 = peg$c32;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s1, s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseterm();\n }\n }\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseterm() {\n var s0, s1, s2, s3;\n\n s0 = peg$parsevariable();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsenumber();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 40) {\n s1 = peg$c41;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsealternation();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 41) {\n s3 = peg$c43;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c44); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c45(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n\n return s0;\n }\n\n function peg$parserepetition() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c30;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c31); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumber();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c32;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c33); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c46();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsename() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parsename_start_char();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsename_char();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsename_char();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsename_start_char() {\n var s0;\n\n if (input.charCodeAt(peg$currPos) === 95) {\n s0 = peg$c48;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s0 === peg$FAILED) {\n if (peg$c50.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c51); }\n }\n }\n\n return s0;\n }\n\n function peg$parsename_char() {\n var s0;\n\n s0 = peg$parsename_start_char();\n if (s0 === peg$FAILED) {\n if (peg$c52.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c52.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c52.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c53); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c54(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1;\n\n s0 = [];\n if (peg$c55.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c55.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c56); }\n }\n }\n\n return s0;\n }\n\n\n var n = require('./nodes');\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n};\n","import {Assignment, Literal, Node, Variable} from './nodes';\n\n/**\n * Processes a list of statements into a symbol table\n */\nexport default class SymbolTable {\n constructor(statements, externalSymbols = {}) {\n this.variables = {};\n this.symbols = {};\n this.main = null;\n this.size = 0;\n\n this.addExternalSymbols(externalSymbols);\n this.process(statements);\n }\n\n addExternalSymbols(externalSymbols) {\n for (let key in externalSymbols) {\n this.variables[key] = new Literal(externalSymbols[key]);\n this.symbols[key] = externalSymbols[key];\n this.size++;\n }\n }\n\n process(statements) {\n for (let statement of statements) {\n if (statement instanceof Assignment) {\n this.variables[statement.variable.name] = this.processExpression(statement.expression);\n\n if (statement.expression instanceof Literal) {\n this.symbols[statement.variable.name] = statement.expression.value;\n this.size++;\n }\n }\n }\n\n this.main = this.variables.main;\n if (!this.main) {\n throw new Error('No main variable declaration found');\n }\n }\n\n processExpression(expr) {\n // Process children\n for (let key in expr) {\n if (expr[key] instanceof Node) {\n expr[key] = this.processExpression(expr[key]);\n }\n }\n\n // Replace variable references with their values\n if (expr instanceof Variable) {\n let value = this.variables[expr.name];\n if (value == null)\n throw new Error(`Undeclared indentifier ${expr.name}`);\n\n expr = this.processExpression(value.copy());\n }\n\n return expr;\n }\n}\n","import {EndMarker, Concatenation, Literal, Tag} from './nodes';\nimport {addAll, equal} from './utils';\n\nconst END_MARKER = new EndMarker;\n\n/**\n * This is an implementation of the direct regular expression to DFA algorithm described\n * in section 3.9.5 of \"Compilers: Principles, Techniques, and Tools\" by Aho,\n * Lam, Sethi, and Ullman. http://dragonbook.stanford.edu\n * There is a PDF of the book here:\n * http://www.informatik.uni-bremen.de/agbkb/lehre/ccfl/Material/ALSUdragonbook.pdf\n */\nexport default function buildDFA(root, numSymbols) {\n root = new Concatenation(root, END_MARKER);\n root.calcFollowpos();\n\n let failState = new State(new Set, numSymbols);\n let initialState = new State(root.firstpos, numSymbols);\n let dstates = [failState, initialState];\n\n // while there is an unmarked state S in dstates\n while (1) {\n let s = null;\n\n for (let j = 1; j < dstates.length; j++) {\n if (!dstates[j].marked) {\n s = dstates[j];\n break;\n }\n }\n\n if (s == null) {\n break;\n }\n\n // mark S\n s.marked = true;\n\n // for each input symbol a\n for (let a = 0; a < numSymbols; a++) {\n // let U be the union of followpos(p) for all\n // p in S that correspond to a\n let u = new Set;\n for (let p of s.positions) {\n if (p instanceof Literal && p.value === a) {\n addAll(u, p.followpos);\n }\n }\n\n if (u.size === 0) {\n continue;\n }\n\n // if U is not in dstates\n let ux = -1;\n for (let i = 0; i < dstates.length; i++) {\n if (equal(u, dstates[i].positions)) {\n ux = i;\n break;\n }\n }\n\n if (ux === -1) {\n // Add U as an unmarked state to dstates\n dstates.push(new State(u, numSymbols));\n ux = dstates.length - 1;\n }\n\n s.transitions[a] = ux;\n }\n }\n\n return dstates;\n}\n\nclass State {\n constructor(positions, len) {\n this.positions = positions;\n this.transitions = new Uint16Array(len);\n this.accepting = positions.has(END_MARKER);\n this.marked = false;\n this.tags = new Set;\n\n for (let pos of positions) {\n if (pos instanceof Tag) {\n this.tags.add(pos.name);\n }\n }\n }\n}\n","const INITIAL_STATE = 1;\nconst FAIL_STATE = 0;\n\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nexport default class StateMachine {\n constructor(dfa) {\n this.stateTable = dfa.stateTable;\n this.accepting = dfa.accepting;\n this.tags = dfa.tags;\n }\n\n /**\n * Returns an iterable object that yields pattern matches over the input sequence.\n * Matches are of the form [startIndex, endIndex, tags].\n */\n match(str) {\n let self = this;\n return {\n *[Symbol.iterator]() {\n let state = INITIAL_STATE;\n let startRun = null;\n let lastAccepting = null;\n let lastState = null;\n\n for (let p = 0; p < str.length; p++) {\n let c = str[p];\n\n lastState = state;\n state = self.stateTable[state][c];\n\n if (state === FAIL_STATE) {\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[lastState]];\n }\n\n // reset the state as if we started over from the initial state\n state = self.stateTable[INITIAL_STATE][c];\n startRun = null;\n }\n\n // start a run if not in the failure state\n if (state !== FAIL_STATE && startRun == null) {\n startRun = p;\n }\n\n // if accepting, mark the potential match end\n if (self.accepting[state]) {\n lastAccepting = p;\n }\n\n // reset the state to the initial state if we get into the failure state\n if (state === FAIL_STATE) {\n state = INITIAL_STATE;\n }\n }\n\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[state]];\n }\n }\n };\n }\n\n /**\n * For each match over the input sequence, action functions matching\n * the tag definitions in the input pattern are called with the startIndex,\n * endIndex, and sub-match sequence.\n */\n apply(str, actions) {\n for (let [start, end, tags] of this.match(str)) {\n for (let tag of tags) {\n if (typeof actions[tag] === 'function') {\n actions[tag](start, end, str.slice(start, end + 1));\n }\n }\n }\n }\n}\n","import grammar from './grammar';\nimport SymbolTable from './SymbolTable';\nimport buildDFA from './dfa';\nimport StateMachine from './StateMachine';\n\nexport function parse(string, externalSymbols) {\n let ast = grammar.parse(string);\n return new SymbolTable(ast, externalSymbols);\n}\n\nexport function build(symbolTable) {\n let states = buildDFA(symbolTable.main, symbolTable.size);\n\n return new StateMachine({\n stateTable: states.map(s => Array.from(s.transitions)),\n accepting: states.map(s => s.accepting),\n tags: states.map(s => Array.from(s.tags))\n });\n}\n\nexport default function compile(string, externalSymbols) {\n return build(parse(string, externalSymbols));\n}\n"],"names":["union","a","b","s","Set","addAll","x","add","equal","size","has","Node","constructor","Object","defineProperty","value","calcFollowpos","key","Variable","name","copy","Comment","Assignment","variable","expression","Alternation","nullable","firstpos","lastpos","Concatenation","n","followpos","Repeat","op","buildRepetition","min","max","Infinity","Error","res","i","concat","Leaf","Literal","EndMarker","Tag","peg$subclass","child","parent","ctor","prototype","peg$SyntaxError","message","expected","found","location","captureStackTrace","buildMessage","DESCRIBE_EXPECTATION_FNS","literal","expectation","literalEscape","text","escapedParts","parts","length","Array","classEscape","inverted","any","end","other","description","hex","ch","charCodeAt","toString","toUpperCase","replace","describeExpectation","type","describeExpected","descriptions","j","sort","slice","join","describeFound","peg$parse","input","options","peg$FAILED","peg$startRuleFunctions","rules","peg$parserules","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$literalExpectation","peg$c3","peg$c4","peg$classExpectation","peg$c5","peg$c6","peg$c7","v","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","e","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","t","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","m","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","num","parseInt","peg$c55","peg$c56","peg$currPos","peg$savedPos","peg$posDetailsCache","line","column","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","startRule","ignoreCase","peg$endExpectation","peg$computePosDetails","pos","details","p","peg$computeLocation","startPos","endPos","startPosDetails","endPosDetails","start","offset","peg$fail","push","peg$buildStructuredError","s0","s1","peg$parsestatement","s2","peg$parsestatement_type","peg$parse_","peg$parseassignment","peg$parsecomment","s3","test","charAt","s4","s5","s6","s7","peg$parsevariable","peg$parsealternation","peg$parsename","peg$parseconcatenation","peg$parserepeat","peg$parseterm","peg$parsenumber","peg$parsename_start_char","peg$parsename_char","require$$0","SyntaxError","parse","SymbolTable","statements","externalSymbols","variables","symbols","main","addExternalSymbols","process","statement","processExpression","expr","END_MARKER","buildDFA","root","numSymbols","failState","State","initialState","dstates","marked","u","positions","ux","transitions","len","Uint16Array","accepting","tags","INITIAL_STATE","FAIL_STATE","StateMachine","dfa","stateTable","match","str","self","Symbol","iterator","state","startRun","lastAccepting","lastState","c","apply","actions","tag","string","ast","grammar","build","symbolTable","states","map","from","compile"],"mappings":"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"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/dfa/index.js b/skills/flight-finder/node_modules/dfa/index.js deleted file mode 100644 index 05181ee..0000000 --- a/skills/flight-finder/node_modules/dfa/index.js +++ /dev/null @@ -1,91 +0,0 @@ -'use strict'; - -var INITIAL_STATE = 1; -var FAIL_STATE = 0; -/** - * A StateMachine represents a deterministic finite automaton. - * It can perform matches over a sequence of values, similar to a regular expression. - */ - -class StateMachine { - constructor(dfa) { - this.stateTable = dfa.stateTable; - this.accepting = dfa.accepting; - this.tags = dfa.tags; - } - /** - * Returns an iterable object that yields pattern matches over the input sequence. - * Matches are of the form [startIndex, endIndex, tags]. - */ - - - match(str) { - var self = this; - return { - *[Symbol.iterator]() { - var state = INITIAL_STATE; - var startRun = null; - var lastAccepting = null; - var lastState = null; - - for (var p = 0; p < str.length; p++) { - var c = str[p]; - lastState = state; - state = self.stateTable[state][c]; - - if (state === FAIL_STATE) { - // yield the last match if any - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[lastState]]; - } // reset the state as if we started over from the initial state - - - state = self.stateTable[INITIAL_STATE][c]; - startRun = null; - } // start a run if not in the failure state - - - if (state !== FAIL_STATE && startRun == null) { - startRun = p; - } // if accepting, mark the potential match end - - - if (self.accepting[state]) { - lastAccepting = p; - } // reset the state to the initial state if we get into the failure state - - - if (state === FAIL_STATE) { - state = INITIAL_STATE; - } - } // yield the last match if any - - - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[state]]; - } - } - - }; - } - /** - * For each match over the input sequence, action functions matching - * the tag definitions in the input pattern are called with the startIndex, - * endIndex, and sub-match sequence. - */ - - - apply(str, actions) { - for (var [start, end, tags] of this.match(str)) { - for (var tag of tags) { - if (typeof actions[tag] === 'function') { - actions[tag](start, end, str.slice(start, end + 1)); - } - } - } - } - -} - -module.exports = StateMachine; -//# sourceMappingURL=index.js.map diff --git a/skills/flight-finder/node_modules/dfa/index.js.map b/skills/flight-finder/node_modules/dfa/index.js.map deleted file mode 100644 index 867f150..0000000 --- a/skills/flight-finder/node_modules/dfa/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sources":["src/StateMachine.js"],"sourcesContent":["const INITIAL_STATE = 1;\nconst FAIL_STATE = 0;\n\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nexport default class StateMachine {\n constructor(dfa) {\n this.stateTable = dfa.stateTable;\n this.accepting = dfa.accepting;\n this.tags = dfa.tags;\n }\n\n /**\n * Returns an iterable object that yields pattern matches over the input sequence.\n * Matches are of the form [startIndex, endIndex, tags].\n */\n match(str) {\n let self = this;\n return {\n *[Symbol.iterator]() {\n let state = INITIAL_STATE;\n let startRun = null;\n let lastAccepting = null;\n let lastState = null;\n\n for (let p = 0; p < str.length; p++) {\n let c = str[p];\n\n lastState = state;\n state = self.stateTable[state][c];\n\n if (state === FAIL_STATE) {\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[lastState]];\n }\n\n // reset the state as if we started over from the initial state\n state = self.stateTable[INITIAL_STATE][c];\n startRun = null;\n }\n\n // start a run if not in the failure state\n if (state !== FAIL_STATE && startRun == null) {\n startRun = p;\n }\n\n // if accepting, mark the potential match end\n if (self.accepting[state]) {\n lastAccepting = p;\n }\n\n // reset the state to the initial state if we get into the failure state\n if (state === FAIL_STATE) {\n state = INITIAL_STATE;\n }\n }\n\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[state]];\n }\n }\n };\n }\n\n /**\n * For each match over the input sequence, action functions matching\n * the tag definitions in the input pattern are called with the startIndex,\n * endIndex, and sub-match sequence.\n */\n apply(str, actions) {\n for (let [start, end, tags] of this.match(str)) {\n for (let tag of tags) {\n if (typeof actions[tag] === 'function') {\n actions[tag](start, end, str.slice(start, end + 1));\n }\n }\n }\n }\n}\n"],"names":["INITIAL_STATE","FAIL_STATE","StateMachine","constructor","dfa","stateTable","accepting","tags","match","str","self","Symbol","iterator","state","startRun","lastAccepting","lastState","p","length","c","apply","actions","start","end","tag","slice"],"mappings":";;AAAA,IAAMA,aAAa,GAAG,CAAtB;AACA,IAAMC,UAAU,GAAG,CAAnB;;;;;;AAMA,AAAe,MAAMC,YAAN,CAAmB;EAChCC,WAAW,CAACC,GAAD,EAAM;SACVC,UAAL,GAAkBD,GAAG,CAACC,UAAtB;SACKC,SAAL,GAAiBF,GAAG,CAACE,SAArB;SACKC,IAAL,GAAYH,GAAG,CAACG,IAAhB;;;;;;;;EAOFC,KAAK,CAACC,GAAD,EAAM;QACLC,IAAI,GAAG,IAAX;WACO;QACHC,MAAM,CAACC,QAAT,IAAqB;YACfC,KAAK,GAAGb,aAAZ;YACIc,QAAQ,GAAG,IAAf;YACIC,aAAa,GAAG,IAApB;YACIC,SAAS,GAAG,IAAhB;;aAEK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,GAAG,CAACS,MAAxB,EAAgCD,CAAC,EAAjC,EAAqC;cAC/BE,CAAC,GAAGV,GAAG,CAACQ,CAAD,CAAX;UAEAD,SAAS,GAAGH,KAAZ;UACAA,KAAK,GAAGH,IAAI,CAACL,UAAL,CAAgBQ,KAAhB,EAAuBM,CAAvB,CAAR;;cAEIN,KAAK,KAAKZ,UAAd,EAA0B;;gBAEpBa,QAAQ,IAAI,IAAZ,IAAoBC,aAAa,IAAI,IAArC,IAA6CA,aAAa,IAAID,QAAlE,EAA4E;oBACpE,CAACA,QAAD,EAAWC,aAAX,EAA0BL,IAAI,CAACH,IAAL,CAAUS,SAAV,CAA1B,CAAN;aAHsB;;;YAOxBH,KAAK,GAAGH,IAAI,CAACL,UAAL,CAAgBL,aAAhB,EAA+BmB,CAA/B,CAAR;YACAL,QAAQ,GAAG,IAAX;WAdiC;;;cAkB/BD,KAAK,KAAKZ,UAAV,IAAwBa,QAAQ,IAAI,IAAxC,EAA8C;YAC5CA,QAAQ,GAAGG,CAAX;WAnBiC;;;cAuB/BP,IAAI,CAACJ,SAAL,CAAeO,KAAf,CAAJ,EAA2B;YACzBE,aAAa,GAAGE,CAAhB;WAxBiC;;;cA4B/BJ,KAAK,KAAKZ,UAAd,EAA0B;YACxBY,KAAK,GAAGb,aAAR;;SAnCe;;;YAwCfc,QAAQ,IAAI,IAAZ,IAAoBC,aAAa,IAAI,IAArC,IAA6CA,aAAa,IAAID,QAAlE,EAA4E;gBACpE,CAACA,QAAD,EAAWC,aAAX,EAA0BL,IAAI,CAACH,IAAL,CAAUM,KAAV,CAA1B,CAAN;;;;KA1CN;;;;;;;;;EAqDFO,KAAK,CAACX,GAAD,EAAMY,OAAN,EAAe;SACb,IAAI,CAACC,KAAD,EAAQC,GAAR,EAAahB,IAAb,CAAT,IAA+B,KAAKC,KAAL,CAAWC,GAAX,CAA/B,EAAgD;WACzC,IAAIe,GAAT,IAAgBjB,IAAhB,EAAsB;YAChB,OAAOc,OAAO,CAACG,GAAD,CAAd,KAAwB,UAA5B,EAAwC;UACtCH,OAAO,CAACG,GAAD,CAAP,CAAaF,KAAb,EAAoBC,GAApB,EAAyBd,GAAG,CAACgB,KAAJ,CAAUH,KAAV,EAAiBC,GAAG,GAAG,CAAvB,CAAzB;;;;;;;;;;"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/dfa/package.json b/skills/flight-finder/node_modules/dfa/package.json deleted file mode 100644 index a9b6b10..0000000 --- a/skills/flight-finder/node_modules/dfa/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "dfa", - "version": "1.2.0", - "description": "A state machine compiler", - "main": "index.js", - "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@babel/register": "^7.0.0", - "mocha": "^3.1.0", - "pegjs": "^0.10.0", - "rollup": "^1.5.0", - "rollup-plugin-babel": "^4.0.1", - "rollup-plugin-commonjs": "^9.2.1", - "rollup-plugin-local-resolve": "^1.0.7" - }, - "scripts": { - "test": "mocha --require @babel/register", - "prepublish": "make" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/devongovett/dfa.git" - }, - "keywords": [ - "state", - "machine", - "compiler" - ], - "author": "Devon Govett ", - "license": "MIT", - "bugs": { - "url": "https://github.com/devongovett/dfa/issues" - }, - "homepage": "https://github.com/devongovett/dfa#readme", - "files": [ - "index.js", - "index.js.map", - "compile.js", - "compile.js.map" - ] -} diff --git a/skills/flight-finder/node_modules/esbuild/LICENSE.md b/skills/flight-finder/node_modules/esbuild/LICENSE.md deleted file mode 100644 index 2027e8d..0000000 --- a/skills/flight-finder/node_modules/esbuild/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Evan Wallace - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/esbuild/README.md b/skills/flight-finder/node_modules/esbuild/README.md deleted file mode 100644 index 93863d1..0000000 --- a/skills/flight-finder/node_modules/esbuild/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# esbuild - -This is a JavaScript bundler and minifier. See https://github.com/evanw/esbuild and the [JavaScript API documentation](https://esbuild.github.io/api/) for details. diff --git a/skills/flight-finder/node_modules/esbuild/bin/esbuild b/skills/flight-finder/node_modules/esbuild/bin/esbuild deleted file mode 100755 index 073f4e8..0000000 Binary files a/skills/flight-finder/node_modules/esbuild/bin/esbuild and /dev/null differ diff --git a/skills/flight-finder/node_modules/esbuild/install.js b/skills/flight-finder/node_modules/esbuild/install.js deleted file mode 100644 index 1019e62..0000000 --- a/skills/flight-finder/node_modules/esbuild/install.js +++ /dev/null @@ -1,289 +0,0 @@ -"use strict"; -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); - -// lib/npm/node-platform.ts -var fs = require("fs"); -var os = require("os"); -var path = require("path"); -var ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH; -var isValidBinaryPath = (x) => !!x && x !== "/usr/bin/esbuild"; -var knownWindowsPackages = { - "win32 arm64 LE": "@esbuild/win32-arm64", - "win32 ia32 LE": "@esbuild/win32-ia32", - "win32 x64 LE": "@esbuild/win32-x64" -}; -var knownUnixlikePackages = { - "aix ppc64 BE": "@esbuild/aix-ppc64", - "android arm64 LE": "@esbuild/android-arm64", - "darwin arm64 LE": "@esbuild/darwin-arm64", - "darwin x64 LE": "@esbuild/darwin-x64", - "freebsd arm64 LE": "@esbuild/freebsd-arm64", - "freebsd x64 LE": "@esbuild/freebsd-x64", - "linux arm LE": "@esbuild/linux-arm", - "linux arm64 LE": "@esbuild/linux-arm64", - "linux ia32 LE": "@esbuild/linux-ia32", - "linux mips64el LE": "@esbuild/linux-mips64el", - "linux ppc64 LE": "@esbuild/linux-ppc64", - "linux riscv64 LE": "@esbuild/linux-riscv64", - "linux s390x BE": "@esbuild/linux-s390x", - "linux x64 LE": "@esbuild/linux-x64", - "linux loong64 LE": "@esbuild/linux-loong64", - "netbsd arm64 LE": "@esbuild/netbsd-arm64", - "netbsd x64 LE": "@esbuild/netbsd-x64", - "openbsd arm64 LE": "@esbuild/openbsd-arm64", - "openbsd x64 LE": "@esbuild/openbsd-x64", - "sunos x64 LE": "@esbuild/sunos-x64" -}; -var knownWebAssemblyFallbackPackages = { - "android arm LE": "@esbuild/android-arm", - "android x64 LE": "@esbuild/android-x64", - "openharmony arm64 LE": "@esbuild/openharmony-arm64" -}; -function pkgAndSubpathForCurrentPlatform() { - let pkg; - let subpath; - let isWASM = false; - let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`; - if (platformKey in knownWindowsPackages) { - pkg = knownWindowsPackages[platformKey]; - subpath = "esbuild.exe"; - } else if (platformKey in knownUnixlikePackages) { - pkg = knownUnixlikePackages[platformKey]; - subpath = "bin/esbuild"; - } else if (platformKey in knownWebAssemblyFallbackPackages) { - pkg = knownWebAssemblyFallbackPackages[platformKey]; - subpath = "bin/esbuild"; - isWASM = true; - } else { - throw new Error(`Unsupported platform: ${platformKey}`); - } - return { pkg, subpath, isWASM }; -} -function downloadedBinPath(pkg, subpath) { - const esbuildLibDir = path.dirname(require.resolve("esbuild")); - return path.join(esbuildLibDir, `downloaded-${pkg.replace("/", "-")}-${path.basename(subpath)}`); -} - -// lib/npm/node-install.ts -var fs2 = require("fs"); -var os2 = require("os"); -var path2 = require("path"); -var zlib = require("zlib"); -var https = require("https"); -var child_process = require("child_process"); -var versionFromPackageJSON = require(path2.join(__dirname, "package.json")).version; -var toPath = path2.join(__dirname, "bin", "esbuild"); -var isToPathJS = true; -function validateBinaryVersion(...command) { - command.push("--version"); - let stdout; - try { - stdout = child_process.execFileSync(command.shift(), command, { - // Without this, this install script strangely crashes with the error - // "EACCES: permission denied, write" but only on Ubuntu Linux when node is - // installed from the Snap Store. This is not a problem when you download - // the official version of node. The problem appears to be that stderr - // (i.e. file descriptor 2) isn't writable? - // - // More info: - // - https://snapcraft.io/ (what the Snap Store is) - // - https://nodejs.org/dist/ (download the official version of node) - // - https://github.com/evanw/esbuild/issues/1711#issuecomment-1027554035 - // - stdio: "pipe" - }).toString().trim(); - } catch (err) { - if (os2.platform() === "darwin" && /_SecTrustEvaluateWithError/.test(err + "")) { - let os3 = "this version of macOS"; - try { - os3 = "macOS " + child_process.execFileSync("sw_vers", ["-productVersion"]).toString().trim(); - } catch { - } - throw new Error(`The "esbuild" package cannot be installed because ${os3} is too outdated. - -The Go compiler (which esbuild relies on) no longer supports ${os3}, -which means the "esbuild" binary executable can't be run. You can either: - - * Update your version of macOS to one that the Go compiler supports - * Use the "esbuild-wasm" package instead of the "esbuild" package - * Build esbuild yourself using an older version of the Go compiler -`); - } - throw err; - } - if (stdout !== versionFromPackageJSON) { - throw new Error(`Expected ${JSON.stringify(versionFromPackageJSON)} but got ${JSON.stringify(stdout)}`); - } -} -function isYarn() { - const { npm_config_user_agent } = process.env; - if (npm_config_user_agent) { - return /\byarn\//.test(npm_config_user_agent); - } - return false; -} -function fetch(url) { - return new Promise((resolve, reject) => { - https.get(url, (res) => { - if ((res.statusCode === 301 || res.statusCode === 302) && res.headers.location) - return fetch(res.headers.location).then(resolve, reject); - if (res.statusCode !== 200) - return reject(new Error(`Server responded with ${res.statusCode}`)); - let chunks = []; - res.on("data", (chunk) => chunks.push(chunk)); - res.on("end", () => resolve(Buffer.concat(chunks))); - }).on("error", reject); - }); -} -function extractFileFromTarGzip(buffer, subpath) { - try { - buffer = zlib.unzipSync(buffer); - } catch (err) { - throw new Error(`Invalid gzip data in archive: ${err && err.message || err}`); - } - let str = (i, n) => String.fromCharCode(...buffer.subarray(i, i + n)).replace(/\0.*$/, ""); - let offset = 0; - subpath = `package/${subpath}`; - while (offset < buffer.length) { - let name = str(offset, 100); - let size = parseInt(str(offset + 124, 12), 8); - offset += 512; - if (!isNaN(size)) { - if (name === subpath) return buffer.subarray(offset, offset + size); - offset += size + 511 & ~511; - } - } - throw new Error(`Could not find ${JSON.stringify(subpath)} in archive`); -} -function installUsingNPM(pkg, subpath, binPath) { - const env = { ...process.env, npm_config_global: void 0 }; - const esbuildLibDir = path2.dirname(require.resolve("esbuild")); - const installDir = path2.join(esbuildLibDir, "npm-install"); - fs2.mkdirSync(installDir); - try { - fs2.writeFileSync(path2.join(installDir, "package.json"), "{}"); - child_process.execSync( - `npm install --loglevel=error --prefer-offline --no-audit --progress=false ${pkg}@${versionFromPackageJSON}`, - { cwd: installDir, stdio: "pipe", env } - ); - const installedBinPath = path2.join(installDir, "node_modules", pkg, subpath); - fs2.renameSync(installedBinPath, binPath); - } finally { - try { - removeRecursive(installDir); - } catch { - } - } -} -function removeRecursive(dir) { - for (const entry of fs2.readdirSync(dir)) { - const entryPath = path2.join(dir, entry); - let stats; - try { - stats = fs2.lstatSync(entryPath); - } catch { - continue; - } - if (stats.isDirectory()) removeRecursive(entryPath); - else fs2.unlinkSync(entryPath); - } - fs2.rmdirSync(dir); -} -function applyManualBinaryPathOverride(overridePath) { - const pathString = JSON.stringify(overridePath); - fs2.writeFileSync(toPath, `#!/usr/bin/env node -require('child_process').execFileSync(${pathString}, process.argv.slice(2), { stdio: 'inherit' }); -`); - const libMain = path2.join(__dirname, "lib", "main.js"); - const code = fs2.readFileSync(libMain, "utf8"); - fs2.writeFileSync(libMain, `var ESBUILD_BINARY_PATH = ${pathString}; -${code}`); -} -function maybeOptimizePackage(binPath) { - const { isWASM } = pkgAndSubpathForCurrentPlatform(); - if (os2.platform() !== "win32" && !isYarn() && !isWASM) { - const tempPath = path2.join(__dirname, "bin-esbuild"); - try { - fs2.linkSync(binPath, tempPath); - fs2.renameSync(tempPath, toPath); - isToPathJS = false; - fs2.unlinkSync(tempPath); - } catch { - } - } -} -async function downloadDirectlyFromNPM(pkg, subpath, binPath) { - const url = `https://registry.npmjs.org/${pkg}/-/${pkg.replace("@esbuild/", "")}-${versionFromPackageJSON}.tgz`; - console.error(`[esbuild] Trying to download ${JSON.stringify(url)}`); - try { - fs2.writeFileSync(binPath, extractFileFromTarGzip(await fetch(url), subpath)); - fs2.chmodSync(binPath, 493); - } catch (e) { - console.error(`[esbuild] Failed to download ${JSON.stringify(url)}: ${e && e.message || e}`); - throw e; - } -} -async function checkAndPreparePackage() { - if (isValidBinaryPath(ESBUILD_BINARY_PATH)) { - if (!fs2.existsSync(ESBUILD_BINARY_PATH)) { - console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`); - } else { - applyManualBinaryPathOverride(ESBUILD_BINARY_PATH); - return; - } - } - const { pkg, subpath } = pkgAndSubpathForCurrentPlatform(); - let binPath; - try { - binPath = require.resolve(`${pkg}/${subpath}`); - } catch (e) { - console.error(`[esbuild] Failed to find package "${pkg}" on the file system - -This can happen if you use the "--no-optional" flag. The "optionalDependencies" -package.json feature is used by esbuild to install the correct binary executable -for your current platform. This install script will now attempt to work around -this. If that fails, you need to remove the "--no-optional" flag to use esbuild. -`); - binPath = downloadedBinPath(pkg, subpath); - try { - console.error(`[esbuild] Trying to install package "${pkg}" using npm`); - installUsingNPM(pkg, subpath, binPath); - } catch (e2) { - console.error(`[esbuild] Failed to install package "${pkg}" using npm: ${e2 && e2.message || e2}`); - try { - await downloadDirectlyFromNPM(pkg, subpath, binPath); - } catch (e3) { - throw new Error(`Failed to install package "${pkg}"`); - } - } - } - maybeOptimizePackage(binPath); -} -checkAndPreparePackage().then(() => { - if (isToPathJS) { - validateBinaryVersion(process.execPath, toPath); - } else { - validateBinaryVersion(toPath); - } -}); diff --git a/skills/flight-finder/node_modules/esbuild/lib/main.d.ts b/skills/flight-finder/node_modules/esbuild/lib/main.d.ts deleted file mode 100644 index 9e69c39..0000000 --- a/skills/flight-finder/node_modules/esbuild/lib/main.d.ts +++ /dev/null @@ -1,716 +0,0 @@ -export type Platform = 'browser' | 'node' | 'neutral' -export type Format = 'iife' | 'cjs' | 'esm' -export type Loader = 'base64' | 'binary' | 'copy' | 'css' | 'dataurl' | 'default' | 'empty' | 'file' | 'js' | 'json' | 'jsx' | 'local-css' | 'text' | 'ts' | 'tsx' -export type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'silent' -export type Charset = 'ascii' | 'utf8' -export type Drop = 'console' | 'debugger' -export type AbsPaths = 'code' | 'log' | 'metafile' - -interface CommonOptions { - /** Documentation: https://esbuild.github.io/api/#sourcemap */ - sourcemap?: boolean | 'linked' | 'inline' | 'external' | 'both' - /** Documentation: https://esbuild.github.io/api/#legal-comments */ - legalComments?: 'none' | 'inline' | 'eof' | 'linked' | 'external' - /** Documentation: https://esbuild.github.io/api/#source-root */ - sourceRoot?: string - /** Documentation: https://esbuild.github.io/api/#sources-content */ - sourcesContent?: boolean - - /** Documentation: https://esbuild.github.io/api/#format */ - format?: Format - /** Documentation: https://esbuild.github.io/api/#global-name */ - globalName?: string - /** Documentation: https://esbuild.github.io/api/#target */ - target?: string | string[] - /** Documentation: https://esbuild.github.io/api/#supported */ - supported?: Record - /** Documentation: https://esbuild.github.io/api/#platform */ - platform?: Platform - - /** Documentation: https://esbuild.github.io/api/#mangle-props */ - mangleProps?: RegExp - /** Documentation: https://esbuild.github.io/api/#mangle-props */ - reserveProps?: RegExp - /** Documentation: https://esbuild.github.io/api/#mangle-props */ - mangleQuoted?: boolean - /** Documentation: https://esbuild.github.io/api/#mangle-props */ - mangleCache?: Record - /** Documentation: https://esbuild.github.io/api/#drop */ - drop?: Drop[] - /** Documentation: https://esbuild.github.io/api/#drop-labels */ - dropLabels?: string[] - /** Documentation: https://esbuild.github.io/api/#minify */ - minify?: boolean - /** Documentation: https://esbuild.github.io/api/#minify */ - minifyWhitespace?: boolean - /** Documentation: https://esbuild.github.io/api/#minify */ - minifyIdentifiers?: boolean - /** Documentation: https://esbuild.github.io/api/#minify */ - minifySyntax?: boolean - /** Documentation: https://esbuild.github.io/api/#line-limit */ - lineLimit?: number - /** Documentation: https://esbuild.github.io/api/#charset */ - charset?: Charset - /** Documentation: https://esbuild.github.io/api/#tree-shaking */ - treeShaking?: boolean - /** Documentation: https://esbuild.github.io/api/#ignore-annotations */ - ignoreAnnotations?: boolean - - /** Documentation: https://esbuild.github.io/api/#jsx */ - jsx?: 'transform' | 'preserve' | 'automatic' - /** Documentation: https://esbuild.github.io/api/#jsx-factory */ - jsxFactory?: string - /** Documentation: https://esbuild.github.io/api/#jsx-fragment */ - jsxFragment?: string - /** Documentation: https://esbuild.github.io/api/#jsx-import-source */ - jsxImportSource?: string - /** Documentation: https://esbuild.github.io/api/#jsx-development */ - jsxDev?: boolean - /** Documentation: https://esbuild.github.io/api/#jsx-side-effects */ - jsxSideEffects?: boolean - - /** Documentation: https://esbuild.github.io/api/#define */ - define?: { [key: string]: string } - /** Documentation: https://esbuild.github.io/api/#pure */ - pure?: string[] - /** Documentation: https://esbuild.github.io/api/#keep-names */ - keepNames?: boolean - - /** Documentation: https://esbuild.github.io/api/#abs-paths */ - absPaths?: AbsPaths[] - /** Documentation: https://esbuild.github.io/api/#color */ - color?: boolean - /** Documentation: https://esbuild.github.io/api/#log-level */ - logLevel?: LogLevel - /** Documentation: https://esbuild.github.io/api/#log-limit */ - logLimit?: number - /** Documentation: https://esbuild.github.io/api/#log-override */ - logOverride?: Record - - /** Documentation: https://esbuild.github.io/api/#tsconfig-raw */ - tsconfigRaw?: string | TsconfigRaw -} - -export interface TsconfigRaw { - compilerOptions?: { - alwaysStrict?: boolean - baseUrl?: string - experimentalDecorators?: boolean - importsNotUsedAsValues?: 'remove' | 'preserve' | 'error' - jsx?: 'preserve' | 'react-native' | 'react' | 'react-jsx' | 'react-jsxdev' - jsxFactory?: string - jsxFragmentFactory?: string - jsxImportSource?: string - paths?: Record - preserveValueImports?: boolean - strict?: boolean - target?: string - useDefineForClassFields?: boolean - verbatimModuleSyntax?: boolean - } -} - -export interface BuildOptions extends CommonOptions { - /** Documentation: https://esbuild.github.io/api/#bundle */ - bundle?: boolean - /** Documentation: https://esbuild.github.io/api/#splitting */ - splitting?: boolean - /** Documentation: https://esbuild.github.io/api/#preserve-symlinks */ - preserveSymlinks?: boolean - /** Documentation: https://esbuild.github.io/api/#outfile */ - outfile?: string - /** Documentation: https://esbuild.github.io/api/#metafile */ - metafile?: boolean - /** Documentation: https://esbuild.github.io/api/#outdir */ - outdir?: string - /** Documentation: https://esbuild.github.io/api/#outbase */ - outbase?: string - /** Documentation: https://esbuild.github.io/api/#external */ - external?: string[] - /** Documentation: https://esbuild.github.io/api/#packages */ - packages?: 'bundle' | 'external' - /** Documentation: https://esbuild.github.io/api/#alias */ - alias?: Record - /** Documentation: https://esbuild.github.io/api/#loader */ - loader?: { [ext: string]: Loader } - /** Documentation: https://esbuild.github.io/api/#resolve-extensions */ - resolveExtensions?: string[] - /** Documentation: https://esbuild.github.io/api/#main-fields */ - mainFields?: string[] - /** Documentation: https://esbuild.github.io/api/#conditions */ - conditions?: string[] - /** Documentation: https://esbuild.github.io/api/#write */ - write?: boolean - /** Documentation: https://esbuild.github.io/api/#allow-overwrite */ - allowOverwrite?: boolean - /** Documentation: https://esbuild.github.io/api/#tsconfig */ - tsconfig?: string - /** Documentation: https://esbuild.github.io/api/#out-extension */ - outExtension?: { [ext: string]: string } - /** Documentation: https://esbuild.github.io/api/#public-path */ - publicPath?: string - /** Documentation: https://esbuild.github.io/api/#entry-names */ - entryNames?: string - /** Documentation: https://esbuild.github.io/api/#chunk-names */ - chunkNames?: string - /** Documentation: https://esbuild.github.io/api/#asset-names */ - assetNames?: string - /** Documentation: https://esbuild.github.io/api/#inject */ - inject?: string[] - /** Documentation: https://esbuild.github.io/api/#banner */ - banner?: { [type: string]: string } - /** Documentation: https://esbuild.github.io/api/#footer */ - footer?: { [type: string]: string } - /** Documentation: https://esbuild.github.io/api/#entry-points */ - entryPoints?: (string | { in: string, out: string })[] | Record - /** Documentation: https://esbuild.github.io/api/#stdin */ - stdin?: StdinOptions - /** Documentation: https://esbuild.github.io/plugins/ */ - plugins?: Plugin[] - /** Documentation: https://esbuild.github.io/api/#working-directory */ - absWorkingDir?: string - /** Documentation: https://esbuild.github.io/api/#node-paths */ - nodePaths?: string[]; // The "NODE_PATH" variable from Node.js -} - -export interface StdinOptions { - contents: string | Uint8Array - resolveDir?: string - sourcefile?: string - loader?: Loader -} - -export interface Message { - id: string - pluginName: string - text: string - location: Location | null - notes: Note[] - - /** - * Optional user-specified data that is passed through unmodified. You can - * use this to stash the original error, for example. - */ - detail: any -} - -export interface Note { - text: string - location: Location | null -} - -export interface Location { - file: string - namespace: string - /** 1-based */ - line: number - /** 0-based, in bytes */ - column: number - /** in bytes */ - length: number - lineText: string - suggestion: string -} - -export interface OutputFile { - path: string - contents: Uint8Array - hash: string - /** "contents" as text (changes automatically with "contents") */ - readonly text: string -} - -export interface BuildResult { - errors: Message[] - warnings: Message[] - /** Only when "write: false" */ - outputFiles: OutputFile[] | (ProvidedOptions['write'] extends false ? never : undefined) - /** Only when "metafile: true" */ - metafile: Metafile | (ProvidedOptions['metafile'] extends true ? never : undefined) - /** Only when "mangleCache" is present */ - mangleCache: Record | (ProvidedOptions['mangleCache'] extends Object ? never : undefined) -} - -export interface BuildFailure extends Error { - errors: Message[] - warnings: Message[] -} - -/** Documentation: https://esbuild.github.io/api/#serve-arguments */ -export interface ServeOptions { - port?: number - host?: string - servedir?: string - keyfile?: string - certfile?: string - fallback?: string - cors?: CORSOptions - onRequest?: (args: ServeOnRequestArgs) => void -} - -/** Documentation: https://esbuild.github.io/api/#cors */ -export interface CORSOptions { - origin?: string | string[] -} - -export interface ServeOnRequestArgs { - remoteAddress: string - method: string - path: string - status: number - /** The time to generate the response, not to send it */ - timeInMS: number -} - -/** Documentation: https://esbuild.github.io/api/#serve-return-values */ -export interface ServeResult { - port: number - hosts: string[] -} - -export interface TransformOptions extends CommonOptions { - /** Documentation: https://esbuild.github.io/api/#sourcefile */ - sourcefile?: string - /** Documentation: https://esbuild.github.io/api/#loader */ - loader?: Loader - /** Documentation: https://esbuild.github.io/api/#banner */ - banner?: string - /** Documentation: https://esbuild.github.io/api/#footer */ - footer?: string -} - -export interface TransformResult { - code: string - map: string - warnings: Message[] - /** Only when "mangleCache" is present */ - mangleCache: Record | (ProvidedOptions['mangleCache'] extends Object ? never : undefined) - /** Only when "legalComments" is "external" */ - legalComments: string | (ProvidedOptions['legalComments'] extends 'external' ? never : undefined) -} - -export interface TransformFailure extends Error { - errors: Message[] - warnings: Message[] -} - -export interface Plugin { - name: string - setup: (build: PluginBuild) => (void | Promise) -} - -export interface PluginBuild { - /** Documentation: https://esbuild.github.io/plugins/#build-options */ - initialOptions: BuildOptions - - /** Documentation: https://esbuild.github.io/plugins/#resolve */ - resolve(path: string, options?: ResolveOptions): Promise - - /** Documentation: https://esbuild.github.io/plugins/#on-start */ - onStart(callback: () => - (OnStartResult | null | void | Promise)): void - - /** Documentation: https://esbuild.github.io/plugins/#on-end */ - onEnd(callback: (result: BuildResult) => - (OnEndResult | null | void | Promise)): void - - /** Documentation: https://esbuild.github.io/plugins/#on-resolve */ - onResolve(options: OnResolveOptions, callback: (args: OnResolveArgs) => - (OnResolveResult | null | undefined | Promise)): void - - /** Documentation: https://esbuild.github.io/plugins/#on-load */ - onLoad(options: OnLoadOptions, callback: (args: OnLoadArgs) => - (OnLoadResult | null | undefined | Promise)): void - - /** Documentation: https://esbuild.github.io/plugins/#on-dispose */ - onDispose(callback: () => void): void - - // This is a full copy of the esbuild library in case you need it - esbuild: { - context: typeof context, - build: typeof build, - buildSync: typeof buildSync, - transform: typeof transform, - transformSync: typeof transformSync, - formatMessages: typeof formatMessages, - formatMessagesSync: typeof formatMessagesSync, - analyzeMetafile: typeof analyzeMetafile, - analyzeMetafileSync: typeof analyzeMetafileSync, - initialize: typeof initialize, - version: typeof version, - } -} - -/** Documentation: https://esbuild.github.io/plugins/#resolve-options */ -export interface ResolveOptions { - pluginName?: string - importer?: string - namespace?: string - resolveDir?: string - kind?: ImportKind - pluginData?: any - with?: Record -} - -/** Documentation: https://esbuild.github.io/plugins/#resolve-results */ -export interface ResolveResult { - errors: Message[] - warnings: Message[] - - path: string - external: boolean - sideEffects: boolean - namespace: string - suffix: string - pluginData: any -} - -export interface OnStartResult { - errors?: PartialMessage[] - warnings?: PartialMessage[] -} - -export interface OnEndResult { - errors?: PartialMessage[] - warnings?: PartialMessage[] -} - -/** Documentation: https://esbuild.github.io/plugins/#on-resolve-options */ -export interface OnResolveOptions { - filter: RegExp - namespace?: string -} - -/** Documentation: https://esbuild.github.io/plugins/#on-resolve-arguments */ -export interface OnResolveArgs { - path: string - importer: string - namespace: string - resolveDir: string - kind: ImportKind - pluginData: any - with: Record -} - -export type ImportKind = - | 'entry-point' - - // JS - | 'import-statement' - | 'require-call' - | 'dynamic-import' - | 'require-resolve' - - // CSS - | 'import-rule' - | 'composes-from' - | 'url-token' - -/** Documentation: https://esbuild.github.io/plugins/#on-resolve-results */ -export interface OnResolveResult { - pluginName?: string - - errors?: PartialMessage[] - warnings?: PartialMessage[] - - path?: string - external?: boolean - sideEffects?: boolean - namespace?: string - suffix?: string - pluginData?: any - - watchFiles?: string[] - watchDirs?: string[] -} - -/** Documentation: https://esbuild.github.io/plugins/#on-load-options */ -export interface OnLoadOptions { - filter: RegExp - namespace?: string -} - -/** Documentation: https://esbuild.github.io/plugins/#on-load-arguments */ -export interface OnLoadArgs { - path: string - namespace: string - suffix: string - pluginData: any - with: Record -} - -/** Documentation: https://esbuild.github.io/plugins/#on-load-results */ -export interface OnLoadResult { - pluginName?: string - - errors?: PartialMessage[] - warnings?: PartialMessage[] - - contents?: string | Uint8Array - resolveDir?: string - loader?: Loader - pluginData?: any - - watchFiles?: string[] - watchDirs?: string[] -} - -export interface PartialMessage { - id?: string - pluginName?: string - text?: string - location?: Partial | null - notes?: PartialNote[] - detail?: any -} - -export interface PartialNote { - text?: string - location?: Partial | null -} - -/** Documentation: https://esbuild.github.io/api/#metafile */ -export interface Metafile { - inputs: { - [path: string]: { - bytes: number - imports: { - path: string - kind: ImportKind - external?: boolean - original?: string - with?: Record - }[] - format?: 'cjs' | 'esm' - with?: Record - } - } - outputs: { - [path: string]: { - bytes: number - inputs: { - [path: string]: { - bytesInOutput: number - } - } - imports: { - path: string - kind: ImportKind | 'file-loader' - external?: boolean - }[] - exports: string[] - entryPoint?: string - cssBundle?: string - } - } -} - -export interface FormatMessagesOptions { - kind: 'error' | 'warning' - color?: boolean - terminalWidth?: number -} - -export interface AnalyzeMetafileOptions { - color?: boolean - verbose?: boolean -} - -/** Documentation: https://esbuild.github.io/api/#watch-arguments */ -export interface WatchOptions { - delay?: number // In milliseconds -} - -export interface BuildContext { - /** Documentation: https://esbuild.github.io/api/#rebuild */ - rebuild(): Promise> - - /** Documentation: https://esbuild.github.io/api/#watch */ - watch(options?: WatchOptions): Promise - - /** Documentation: https://esbuild.github.io/api/#serve */ - serve(options?: ServeOptions): Promise - - cancel(): Promise - dispose(): Promise -} - -// This is a TypeScript type-level function which replaces any keys in "In" -// that aren't in "Out" with "never". We use this to reject properties with -// typos in object literals. See: https://stackoverflow.com/questions/49580725 -type SameShape = In & { [Key in Exclude]: never } - -/** - * This function invokes the "esbuild" command-line tool for you. It returns a - * promise that either resolves with a "BuildResult" object or rejects with a - * "BuildFailure" object. - * - * - Works in node: yes - * - Works in browser: yes - * - * Documentation: https://esbuild.github.io/api/#build - */ -export declare function build(options: SameShape): Promise> - -/** - * This is the advanced long-running form of "build" that supports additional - * features such as watch mode and a local development server. - * - * - Works in node: yes - * - Works in browser: no - * - * Documentation: https://esbuild.github.io/api/#build - */ -export declare function context(options: SameShape): Promise> - -/** - * This function transforms a single JavaScript file. It can be used to minify - * JavaScript, convert TypeScript/JSX to JavaScript, or convert newer JavaScript - * to older JavaScript. It returns a promise that is either resolved with a - * "TransformResult" object or rejected with a "TransformFailure" object. - * - * - Works in node: yes - * - Works in browser: yes - * - * Documentation: https://esbuild.github.io/api/#transform - */ -export declare function transform(input: string | Uint8Array, options?: SameShape): Promise> - -/** - * Converts log messages to formatted message strings suitable for printing in - * the terminal. This allows you to reuse the built-in behavior of esbuild's - * log message formatter. This is a batch-oriented API for efficiency. - * - * - Works in node: yes - * - Works in browser: yes - */ -export declare function formatMessages(messages: PartialMessage[], options: FormatMessagesOptions): Promise - -/** - * Pretty-prints an analysis of the metafile JSON to a string. This is just for - * convenience to be able to match esbuild's pretty-printing exactly. If you want - * to customize it, you can just inspect the data in the metafile yourself. - * - * - Works in node: yes - * - Works in browser: yes - * - * Documentation: https://esbuild.github.io/api/#analyze - */ -export declare function analyzeMetafile(metafile: Metafile | string, options?: AnalyzeMetafileOptions): Promise - -/** - * A synchronous version of "build". - * - * - Works in node: yes - * - Works in browser: no - * - * Documentation: https://esbuild.github.io/api/#build - */ -export declare function buildSync(options: SameShape): BuildResult - -/** - * A synchronous version of "transform". - * - * - Works in node: yes - * - Works in browser: no - * - * Documentation: https://esbuild.github.io/api/#transform - */ -export declare function transformSync(input: string | Uint8Array, options?: SameShape): TransformResult - -/** - * A synchronous version of "formatMessages". - * - * - Works in node: yes - * - Works in browser: no - */ -export declare function formatMessagesSync(messages: PartialMessage[], options: FormatMessagesOptions): string[] - -/** - * A synchronous version of "analyzeMetafile". - * - * - Works in node: yes - * - Works in browser: no - * - * Documentation: https://esbuild.github.io/api/#analyze - */ -export declare function analyzeMetafileSync(metafile: Metafile | string, options?: AnalyzeMetafileOptions): string - -/** - * This configures the browser-based version of esbuild. It is necessary to - * call this first and wait for the returned promise to be resolved before - * making other API calls when using esbuild in the browser. - * - * - Works in node: yes - * - Works in browser: yes ("options" is required) - * - * Documentation: https://esbuild.github.io/api/#browser - */ -export declare function initialize(options: InitializeOptions): Promise - -export interface InitializeOptions { - /** - * The URL of the "esbuild.wasm" file. This must be provided when running - * esbuild in the browser. - */ - wasmURL?: string | URL - - /** - * The result of calling "new WebAssembly.Module(buffer)" where "buffer" - * is a typed array or ArrayBuffer containing the binary code of the - * "esbuild.wasm" file. - * - * You can use this as an alternative to "wasmURL" for environments where it's - * not possible to download the WebAssembly module. - */ - wasmModule?: WebAssembly.Module - - /** - * By default esbuild runs the WebAssembly-based browser API in a web worker - * to avoid blocking the UI thread. This can be disabled by setting "worker" - * to false. - */ - worker?: boolean -} - -export let version: string - -// Call this function to terminate esbuild's child process. The child process -// is not terminated and re-created after each API call because it's more -// efficient to keep it around when there are multiple API calls. -// -// In node this happens automatically before the parent node process exits. So -// you only need to call this if you know you will not make any more esbuild -// API calls and you want to clean up resources. -// -// Unlike node, Deno lacks the necessary APIs to clean up child processes -// automatically. You must manually call stop() in Deno when you're done -// using esbuild or Deno will continue running forever. -// -// Another reason you might want to call this is if you are using esbuild from -// within a Deno test. Deno fails tests that create a child process without -// killing it before the test ends, so you have to call this function (and -// await the returned promise) in every Deno test that uses esbuild. -export declare function stop(): Promise - -// Note: These declarations exist to avoid type errors when you omit "dom" from -// "lib" in your "tsconfig.json" file. TypeScript confusingly declares the -// global "WebAssembly" type in "lib.dom.d.ts" even though it has nothing to do -// with the browser DOM and is present in many non-browser JavaScript runtimes -// (e.g. node and deno). Declaring it here allows esbuild's API to be used in -// these scenarios. -// -// There's an open issue about getting this problem corrected (although these -// declarations will need to remain even if this is fixed for backward -// compatibility with older TypeScript versions): -// -// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/826 -// -declare global { - namespace WebAssembly { - interface Module { - } - } - interface URL { - } -} diff --git a/skills/flight-finder/node_modules/esbuild/lib/main.js b/skills/flight-finder/node_modules/esbuild/lib/main.js deleted file mode 100644 index d701d63..0000000 --- a/skills/flight-finder/node_modules/esbuild/lib/main.js +++ /dev/null @@ -1,2532 +0,0 @@ -"use strict"; -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// lib/npm/node.ts -var node_exports = {}; -__export(node_exports, { - analyzeMetafile: () => analyzeMetafile, - analyzeMetafileSync: () => analyzeMetafileSync, - build: () => build, - buildSync: () => buildSync, - context: () => context, - default: () => node_default, - formatMessages: () => formatMessages, - formatMessagesSync: () => formatMessagesSync, - initialize: () => initialize, - stop: () => stop, - transform: () => transform, - transformSync: () => transformSync, - version: () => version -}); -module.exports = __toCommonJS(node_exports); - -// lib/shared/stdio_protocol.ts -function encodePacket(packet) { - let visit = (value) => { - if (value === null) { - bb.write8(0); - } else if (typeof value === "boolean") { - bb.write8(1); - bb.write8(+value); - } else if (typeof value === "number") { - bb.write8(2); - bb.write32(value | 0); - } else if (typeof value === "string") { - bb.write8(3); - bb.write(encodeUTF8(value)); - } else if (value instanceof Uint8Array) { - bb.write8(4); - bb.write(value); - } else if (value instanceof Array) { - bb.write8(5); - bb.write32(value.length); - for (let item of value) { - visit(item); - } - } else { - let keys = Object.keys(value); - bb.write8(6); - bb.write32(keys.length); - for (let key of keys) { - bb.write(encodeUTF8(key)); - visit(value[key]); - } - } - }; - let bb = new ByteBuffer(); - bb.write32(0); - bb.write32(packet.id << 1 | +!packet.isRequest); - visit(packet.value); - writeUInt32LE(bb.buf, bb.len - 4, 0); - return bb.buf.subarray(0, bb.len); -} -function decodePacket(bytes) { - let visit = () => { - switch (bb.read8()) { - case 0: - return null; - case 1: - return !!bb.read8(); - case 2: - return bb.read32(); - case 3: - return decodeUTF8(bb.read()); - case 4: - return bb.read(); - case 5: { - let count = bb.read32(); - let value2 = []; - for (let i = 0; i < count; i++) { - value2.push(visit()); - } - return value2; - } - case 6: { - let count = bb.read32(); - let value2 = {}; - for (let i = 0; i < count; i++) { - value2[decodeUTF8(bb.read())] = visit(); - } - return value2; - } - default: - throw new Error("Invalid packet"); - } - }; - let bb = new ByteBuffer(bytes); - let id = bb.read32(); - let isRequest = (id & 1) === 0; - id >>>= 1; - let value = visit(); - if (bb.ptr !== bytes.length) { - throw new Error("Invalid packet"); - } - return { id, isRequest, value }; -} -var ByteBuffer = class { - constructor(buf = new Uint8Array(1024)) { - this.buf = buf; - this.len = 0; - this.ptr = 0; - } - _write(delta) { - if (this.len + delta > this.buf.length) { - let clone = new Uint8Array((this.len + delta) * 2); - clone.set(this.buf); - this.buf = clone; - } - this.len += delta; - return this.len - delta; - } - write8(value) { - let offset = this._write(1); - this.buf[offset] = value; - } - write32(value) { - let offset = this._write(4); - writeUInt32LE(this.buf, value, offset); - } - write(bytes) { - let offset = this._write(4 + bytes.length); - writeUInt32LE(this.buf, bytes.length, offset); - this.buf.set(bytes, offset + 4); - } - _read(delta) { - if (this.ptr + delta > this.buf.length) { - throw new Error("Invalid packet"); - } - this.ptr += delta; - return this.ptr - delta; - } - read8() { - return this.buf[this._read(1)]; - } - read32() { - return readUInt32LE(this.buf, this._read(4)); - } - read() { - let length = this.read32(); - let bytes = new Uint8Array(length); - let ptr = this._read(bytes.length); - bytes.set(this.buf.subarray(ptr, ptr + length)); - return bytes; - } -}; -var encodeUTF8; -var decodeUTF8; -var encodeInvariant; -if (typeof TextEncoder !== "undefined" && typeof TextDecoder !== "undefined") { - let encoder = new TextEncoder(); - let decoder = new TextDecoder(); - encodeUTF8 = (text) => encoder.encode(text); - decodeUTF8 = (bytes) => decoder.decode(bytes); - encodeInvariant = 'new TextEncoder().encode("")'; -} else if (typeof Buffer !== "undefined") { - encodeUTF8 = (text) => Buffer.from(text); - decodeUTF8 = (bytes) => { - let { buffer, byteOffset, byteLength } = bytes; - return Buffer.from(buffer, byteOffset, byteLength).toString(); - }; - encodeInvariant = 'Buffer.from("")'; -} else { - throw new Error("No UTF-8 codec found"); -} -if (!(encodeUTF8("") instanceof Uint8Array)) - throw new Error(`Invariant violation: "${encodeInvariant} instanceof Uint8Array" is incorrectly false - -This indicates that your JavaScript environment is broken. You cannot use -esbuild in this environment because esbuild relies on this invariant. This -is not a problem with esbuild. You need to fix your environment instead. -`); -function readUInt32LE(buffer, offset) { - return (buffer[offset++] | buffer[offset++] << 8 | buffer[offset++] << 16 | buffer[offset++] << 24) >>> 0; -} -function writeUInt32LE(buffer, value, offset) { - buffer[offset++] = value; - buffer[offset++] = value >> 8; - buffer[offset++] = value >> 16; - buffer[offset++] = value >> 24; -} - -// lib/shared/uint8array_json_parser.ts -var fromCharCode = String.fromCharCode; -function throwSyntaxError(bytes, index, message) { - const c = bytes[index]; - let line = 1; - let column = 0; - for (let i = 0; i < index; i++) { - if (bytes[i] === 10 /* Newline */) { - line++; - column = 0; - } else { - column++; - } - } - throw new SyntaxError( - message ? message : index === bytes.length ? "Unexpected end of input while parsing JSON" : c >= 32 && c <= 126 ? `Unexpected character ${fromCharCode(c)} in JSON at position ${index} (line ${line}, column ${column})` : `Unexpected byte 0x${c.toString(16)} in JSON at position ${index} (line ${line}, column ${column})` - ); -} -function JSON_parse(bytes) { - if (!(bytes instanceof Uint8Array)) { - throw new Error(`JSON input must be a Uint8Array`); - } - const propertyStack = []; - const objectStack = []; - const stateStack = []; - const length = bytes.length; - let property = null; - let state = 0 /* TopLevel */; - let object; - let i = 0; - while (i < length) { - let c = bytes[i++]; - if (c <= 32 /* Space */) { - continue; - } - let value; - if (state === 2 /* Object */ && property === null && c !== 34 /* Quote */ && c !== 125 /* CloseBrace */) { - throwSyntaxError(bytes, --i); - } - switch (c) { - // True - case 116 /* LowerT */: { - if (bytes[i++] !== 114 /* LowerR */ || bytes[i++] !== 117 /* LowerU */ || bytes[i++] !== 101 /* LowerE */) { - throwSyntaxError(bytes, --i); - } - value = true; - break; - } - // False - case 102 /* LowerF */: { - if (bytes[i++] !== 97 /* LowerA */ || bytes[i++] !== 108 /* LowerL */ || bytes[i++] !== 115 /* LowerS */ || bytes[i++] !== 101 /* LowerE */) { - throwSyntaxError(bytes, --i); - } - value = false; - break; - } - // Null - case 110 /* LowerN */: { - if (bytes[i++] !== 117 /* LowerU */ || bytes[i++] !== 108 /* LowerL */ || bytes[i++] !== 108 /* LowerL */) { - throwSyntaxError(bytes, --i); - } - value = null; - break; - } - // Number begin - case 45 /* Minus */: - case 46 /* Dot */: - case 48 /* Digit0 */: - case 49 /* Digit1 */: - case 50 /* Digit2 */: - case 51 /* Digit3 */: - case 52 /* Digit4 */: - case 53 /* Digit5 */: - case 54 /* Digit6 */: - case 55 /* Digit7 */: - case 56 /* Digit8 */: - case 57 /* Digit9 */: { - let index = i; - value = fromCharCode(c); - c = bytes[i]; - while (true) { - switch (c) { - case 43 /* Plus */: - case 45 /* Minus */: - case 46 /* Dot */: - case 48 /* Digit0 */: - case 49 /* Digit1 */: - case 50 /* Digit2 */: - case 51 /* Digit3 */: - case 52 /* Digit4 */: - case 53 /* Digit5 */: - case 54 /* Digit6 */: - case 55 /* Digit7 */: - case 56 /* Digit8 */: - case 57 /* Digit9 */: - case 101 /* LowerE */: - case 69 /* UpperE */: { - value += fromCharCode(c); - c = bytes[++i]; - continue; - } - } - break; - } - value = +value; - if (isNaN(value)) { - throwSyntaxError(bytes, --index, "Invalid number"); - } - break; - } - // String begin - case 34 /* Quote */: { - value = ""; - while (true) { - if (i >= length) { - throwSyntaxError(bytes, length); - } - c = bytes[i++]; - if (c === 34 /* Quote */) { - break; - } else if (c === 92 /* Backslash */) { - switch (bytes[i++]) { - // Normal escape sequence - case 34 /* Quote */: - value += '"'; - break; - case 47 /* Slash */: - value += "/"; - break; - case 92 /* Backslash */: - value += "\\"; - break; - case 98 /* LowerB */: - value += "\b"; - break; - case 102 /* LowerF */: - value += "\f"; - break; - case 110 /* LowerN */: - value += "\n"; - break; - case 114 /* LowerR */: - value += "\r"; - break; - case 116 /* LowerT */: - value += " "; - break; - // Unicode escape sequence - case 117 /* LowerU */: { - let code = 0; - for (let j = 0; j < 4; j++) { - c = bytes[i++]; - code <<= 4; - if (c >= 48 /* Digit0 */ && c <= 57 /* Digit9 */) code |= c - 48 /* Digit0 */; - else if (c >= 97 /* LowerA */ && c <= 102 /* LowerF */) code |= c + (10 - 97 /* LowerA */); - else if (c >= 65 /* UpperA */ && c <= 70 /* UpperF */) code |= c + (10 - 65 /* UpperA */); - else throwSyntaxError(bytes, --i); - } - value += fromCharCode(code); - break; - } - // Invalid escape sequence - default: - throwSyntaxError(bytes, --i); - break; - } - } else if (c <= 127) { - value += fromCharCode(c); - } else if ((c & 224) === 192) { - value += fromCharCode((c & 31) << 6 | bytes[i++] & 63); - } else if ((c & 240) === 224) { - value += fromCharCode((c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63); - } else if ((c & 248) == 240) { - let codePoint = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63; - if (codePoint > 65535) { - codePoint -= 65536; - value += fromCharCode(codePoint >> 10 & 1023 | 55296); - codePoint = 56320 | codePoint & 1023; - } - value += fromCharCode(codePoint); - } - } - value[0]; - break; - } - // Array begin - case 91 /* OpenBracket */: { - value = []; - propertyStack.push(property); - objectStack.push(object); - stateStack.push(state); - property = null; - object = value; - state = 1 /* Array */; - continue; - } - // Object begin - case 123 /* OpenBrace */: { - value = {}; - propertyStack.push(property); - objectStack.push(object); - stateStack.push(state); - property = null; - object = value; - state = 2 /* Object */; - continue; - } - // Array end - case 93 /* CloseBracket */: { - if (state !== 1 /* Array */) { - throwSyntaxError(bytes, --i); - } - value = object; - property = propertyStack.pop(); - object = objectStack.pop(); - state = stateStack.pop(); - break; - } - // Object end - case 125 /* CloseBrace */: { - if (state !== 2 /* Object */) { - throwSyntaxError(bytes, --i); - } - value = object; - property = propertyStack.pop(); - object = objectStack.pop(); - state = stateStack.pop(); - break; - } - default: { - throwSyntaxError(bytes, --i); - } - } - c = bytes[i]; - while (c <= 32 /* Space */) { - c = bytes[++i]; - } - switch (state) { - case 0 /* TopLevel */: { - if (i === length) { - return value; - } - break; - } - case 1 /* Array */: { - object.push(value); - if (c === 44 /* Comma */) { - i++; - continue; - } - if (c === 93 /* CloseBracket */) { - continue; - } - break; - } - case 2 /* Object */: { - if (property === null) { - property = value; - if (c === 58 /* Colon */) { - i++; - continue; - } - } else { - object[property] = value; - property = null; - if (c === 44 /* Comma */) { - i++; - continue; - } - if (c === 125 /* CloseBrace */) { - continue; - } - } - break; - } - } - break; - } - throwSyntaxError(bytes, i); -} - -// lib/shared/common.ts -var quote = JSON.stringify; -var buildLogLevelDefault = "warning"; -var transformLogLevelDefault = "silent"; -function validateAndJoinStringArray(values, what) { - const toJoin = []; - for (const value of values) { - validateStringValue(value, what); - if (value.indexOf(",") >= 0) throw new Error(`Invalid ${what}: ${value}`); - toJoin.push(value); - } - return toJoin.join(","); -} -var canBeAnything = () => null; -var mustBeBoolean = (value) => typeof value === "boolean" ? null : "a boolean"; -var mustBeString = (value) => typeof value === "string" ? null : "a string"; -var mustBeRegExp = (value) => value instanceof RegExp ? null : "a RegExp object"; -var mustBeInteger = (value) => typeof value === "number" && value === (value | 0) ? null : "an integer"; -var mustBeValidPortNumber = (value) => typeof value === "number" && value === (value | 0) && value >= 0 && value <= 65535 ? null : "a valid port number"; -var mustBeFunction = (value) => typeof value === "function" ? null : "a function"; -var mustBeArray = (value) => Array.isArray(value) ? null : "an array"; -var mustBeArrayOfStrings = (value) => Array.isArray(value) && value.every((x) => typeof x === "string") ? null : "an array of strings"; -var mustBeObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? null : "an object"; -var mustBeEntryPoints = (value) => typeof value === "object" && value !== null ? null : "an array or an object"; -var mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : "a WebAssembly.Module"; -var mustBeObjectOrNull = (value) => typeof value === "object" && !Array.isArray(value) ? null : "an object or null"; -var mustBeStringOrBoolean = (value) => typeof value === "string" || typeof value === "boolean" ? null : "a string or a boolean"; -var mustBeStringOrObject = (value) => typeof value === "string" || typeof value === "object" && value !== null && !Array.isArray(value) ? null : "a string or an object"; -var mustBeStringOrArrayOfStrings = (value) => typeof value === "string" || Array.isArray(value) && value.every((x) => typeof x === "string") ? null : "a string or an array of strings"; -var mustBeStringOrUint8Array = (value) => typeof value === "string" || value instanceof Uint8Array ? null : "a string or a Uint8Array"; -var mustBeStringOrURL = (value) => typeof value === "string" || value instanceof URL ? null : "a string or a URL"; -function getFlag(object, keys, key, mustBeFn) { - let value = object[key]; - keys[key + ""] = true; - if (value === void 0) return void 0; - let mustBe = mustBeFn(value); - if (mustBe !== null) throw new Error(`${quote(key)} must be ${mustBe}`); - return value; -} -function checkForInvalidFlags(object, keys, where) { - for (let key in object) { - if (!(key in keys)) { - throw new Error(`Invalid option ${where}: ${quote(key)}`); - } - } -} -function validateInitializeOptions(options) { - let keys = /* @__PURE__ */ Object.create(null); - let wasmURL = getFlag(options, keys, "wasmURL", mustBeStringOrURL); - let wasmModule = getFlag(options, keys, "wasmModule", mustBeWebAssemblyModule); - let worker = getFlag(options, keys, "worker", mustBeBoolean); - checkForInvalidFlags(options, keys, "in initialize() call"); - return { - wasmURL, - wasmModule, - worker - }; -} -function validateMangleCache(mangleCache) { - let validated; - if (mangleCache !== void 0) { - validated = /* @__PURE__ */ Object.create(null); - for (let key in mangleCache) { - let value = mangleCache[key]; - if (typeof value === "string" || value === false) { - validated[key] = value; - } else { - throw new Error(`Expected ${quote(key)} in mangle cache to map to either a string or false`); - } - } - } - return validated; -} -function pushLogFlags(flags, options, keys, isTTY2, logLevelDefault) { - let color = getFlag(options, keys, "color", mustBeBoolean); - let logLevel = getFlag(options, keys, "logLevel", mustBeString); - let logLimit = getFlag(options, keys, "logLimit", mustBeInteger); - if (color !== void 0) flags.push(`--color=${color}`); - else if (isTTY2) flags.push(`--color=true`); - flags.push(`--log-level=${logLevel || logLevelDefault}`); - flags.push(`--log-limit=${logLimit || 0}`); -} -function validateStringValue(value, what, key) { - if (typeof value !== "string") { - throw new Error(`Expected value for ${what}${key !== void 0 ? " " + quote(key) : ""} to be a string, got ${typeof value} instead`); - } - return value; -} -function pushCommonFlags(flags, options, keys) { - let legalComments = getFlag(options, keys, "legalComments", mustBeString); - let sourceRoot = getFlag(options, keys, "sourceRoot", mustBeString); - let sourcesContent = getFlag(options, keys, "sourcesContent", mustBeBoolean); - let target = getFlag(options, keys, "target", mustBeStringOrArrayOfStrings); - let format = getFlag(options, keys, "format", mustBeString); - let globalName = getFlag(options, keys, "globalName", mustBeString); - let mangleProps = getFlag(options, keys, "mangleProps", mustBeRegExp); - let reserveProps = getFlag(options, keys, "reserveProps", mustBeRegExp); - let mangleQuoted = getFlag(options, keys, "mangleQuoted", mustBeBoolean); - let minify = getFlag(options, keys, "minify", mustBeBoolean); - let minifySyntax = getFlag(options, keys, "minifySyntax", mustBeBoolean); - let minifyWhitespace = getFlag(options, keys, "minifyWhitespace", mustBeBoolean); - let minifyIdentifiers = getFlag(options, keys, "minifyIdentifiers", mustBeBoolean); - let lineLimit = getFlag(options, keys, "lineLimit", mustBeInteger); - let drop = getFlag(options, keys, "drop", mustBeArrayOfStrings); - let dropLabels = getFlag(options, keys, "dropLabels", mustBeArrayOfStrings); - let charset = getFlag(options, keys, "charset", mustBeString); - let treeShaking = getFlag(options, keys, "treeShaking", mustBeBoolean); - let ignoreAnnotations = getFlag(options, keys, "ignoreAnnotations", mustBeBoolean); - let jsx = getFlag(options, keys, "jsx", mustBeString); - let jsxFactory = getFlag(options, keys, "jsxFactory", mustBeString); - let jsxFragment = getFlag(options, keys, "jsxFragment", mustBeString); - let jsxImportSource = getFlag(options, keys, "jsxImportSource", mustBeString); - let jsxDev = getFlag(options, keys, "jsxDev", mustBeBoolean); - let jsxSideEffects = getFlag(options, keys, "jsxSideEffects", mustBeBoolean); - let define = getFlag(options, keys, "define", mustBeObject); - let logOverride = getFlag(options, keys, "logOverride", mustBeObject); - let supported = getFlag(options, keys, "supported", mustBeObject); - let pure = getFlag(options, keys, "pure", mustBeArrayOfStrings); - let keepNames = getFlag(options, keys, "keepNames", mustBeBoolean); - let platform = getFlag(options, keys, "platform", mustBeString); - let tsconfigRaw = getFlag(options, keys, "tsconfigRaw", mustBeStringOrObject); - let absPaths = getFlag(options, keys, "absPaths", mustBeArrayOfStrings); - if (legalComments) flags.push(`--legal-comments=${legalComments}`); - if (sourceRoot !== void 0) flags.push(`--source-root=${sourceRoot}`); - if (sourcesContent !== void 0) flags.push(`--sources-content=${sourcesContent}`); - if (target) flags.push(`--target=${validateAndJoinStringArray(Array.isArray(target) ? target : [target], "target")}`); - if (format) flags.push(`--format=${format}`); - if (globalName) flags.push(`--global-name=${globalName}`); - if (platform) flags.push(`--platform=${platform}`); - if (tsconfigRaw) flags.push(`--tsconfig-raw=${typeof tsconfigRaw === "string" ? tsconfigRaw : JSON.stringify(tsconfigRaw)}`); - if (minify) flags.push("--minify"); - if (minifySyntax) flags.push("--minify-syntax"); - if (minifyWhitespace) flags.push("--minify-whitespace"); - if (minifyIdentifiers) flags.push("--minify-identifiers"); - if (lineLimit) flags.push(`--line-limit=${lineLimit}`); - if (charset) flags.push(`--charset=${charset}`); - if (treeShaking !== void 0) flags.push(`--tree-shaking=${treeShaking}`); - if (ignoreAnnotations) flags.push(`--ignore-annotations`); - if (drop) for (let what of drop) flags.push(`--drop:${validateStringValue(what, "drop")}`); - if (dropLabels) flags.push(`--drop-labels=${validateAndJoinStringArray(dropLabels, "drop label")}`); - if (absPaths) flags.push(`--abs-paths=${validateAndJoinStringArray(absPaths, "abs paths")}`); - if (mangleProps) flags.push(`--mangle-props=${jsRegExpToGoRegExp(mangleProps)}`); - if (reserveProps) flags.push(`--reserve-props=${jsRegExpToGoRegExp(reserveProps)}`); - if (mangleQuoted !== void 0) flags.push(`--mangle-quoted=${mangleQuoted}`); - if (jsx) flags.push(`--jsx=${jsx}`); - if (jsxFactory) flags.push(`--jsx-factory=${jsxFactory}`); - if (jsxFragment) flags.push(`--jsx-fragment=${jsxFragment}`); - if (jsxImportSource) flags.push(`--jsx-import-source=${jsxImportSource}`); - if (jsxDev) flags.push(`--jsx-dev`); - if (jsxSideEffects) flags.push(`--jsx-side-effects`); - if (define) { - for (let key in define) { - if (key.indexOf("=") >= 0) throw new Error(`Invalid define: ${key}`); - flags.push(`--define:${key}=${validateStringValue(define[key], "define", key)}`); - } - } - if (logOverride) { - for (let key in logOverride) { - if (key.indexOf("=") >= 0) throw new Error(`Invalid log override: ${key}`); - flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], "log override", key)}`); - } - } - if (supported) { - for (let key in supported) { - if (key.indexOf("=") >= 0) throw new Error(`Invalid supported: ${key}`); - const value = supported[key]; - if (typeof value !== "boolean") throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`); - flags.push(`--supported:${key}=${value}`); - } - } - if (pure) for (let fn of pure) flags.push(`--pure:${validateStringValue(fn, "pure")}`); - if (keepNames) flags.push(`--keep-names`); -} -function flagsForBuildOptions(callName, options, isTTY2, logLevelDefault, writeDefault) { - var _a2; - let flags = []; - let entries = []; - let keys = /* @__PURE__ */ Object.create(null); - let stdinContents = null; - let stdinResolveDir = null; - pushLogFlags(flags, options, keys, isTTY2, logLevelDefault); - pushCommonFlags(flags, options, keys); - let sourcemap = getFlag(options, keys, "sourcemap", mustBeStringOrBoolean); - let bundle = getFlag(options, keys, "bundle", mustBeBoolean); - let splitting = getFlag(options, keys, "splitting", mustBeBoolean); - let preserveSymlinks = getFlag(options, keys, "preserveSymlinks", mustBeBoolean); - let metafile = getFlag(options, keys, "metafile", mustBeBoolean); - let outfile = getFlag(options, keys, "outfile", mustBeString); - let outdir = getFlag(options, keys, "outdir", mustBeString); - let outbase = getFlag(options, keys, "outbase", mustBeString); - let tsconfig = getFlag(options, keys, "tsconfig", mustBeString); - let resolveExtensions = getFlag(options, keys, "resolveExtensions", mustBeArrayOfStrings); - let nodePathsInput = getFlag(options, keys, "nodePaths", mustBeArrayOfStrings); - let mainFields = getFlag(options, keys, "mainFields", mustBeArrayOfStrings); - let conditions = getFlag(options, keys, "conditions", mustBeArrayOfStrings); - let external = getFlag(options, keys, "external", mustBeArrayOfStrings); - let packages = getFlag(options, keys, "packages", mustBeString); - let alias = getFlag(options, keys, "alias", mustBeObject); - let loader = getFlag(options, keys, "loader", mustBeObject); - let outExtension = getFlag(options, keys, "outExtension", mustBeObject); - let publicPath = getFlag(options, keys, "publicPath", mustBeString); - let entryNames = getFlag(options, keys, "entryNames", mustBeString); - let chunkNames = getFlag(options, keys, "chunkNames", mustBeString); - let assetNames = getFlag(options, keys, "assetNames", mustBeString); - let inject = getFlag(options, keys, "inject", mustBeArrayOfStrings); - let banner = getFlag(options, keys, "banner", mustBeObject); - let footer = getFlag(options, keys, "footer", mustBeObject); - let entryPoints = getFlag(options, keys, "entryPoints", mustBeEntryPoints); - let absWorkingDir = getFlag(options, keys, "absWorkingDir", mustBeString); - let stdin = getFlag(options, keys, "stdin", mustBeObject); - let write = (_a2 = getFlag(options, keys, "write", mustBeBoolean)) != null ? _a2 : writeDefault; - let allowOverwrite = getFlag(options, keys, "allowOverwrite", mustBeBoolean); - let mangleCache = getFlag(options, keys, "mangleCache", mustBeObject); - keys.plugins = true; - checkForInvalidFlags(options, keys, `in ${callName}() call`); - if (sourcemap) flags.push(`--sourcemap${sourcemap === true ? "" : `=${sourcemap}`}`); - if (bundle) flags.push("--bundle"); - if (allowOverwrite) flags.push("--allow-overwrite"); - if (splitting) flags.push("--splitting"); - if (preserveSymlinks) flags.push("--preserve-symlinks"); - if (metafile) flags.push(`--metafile`); - if (outfile) flags.push(`--outfile=${outfile}`); - if (outdir) flags.push(`--outdir=${outdir}`); - if (outbase) flags.push(`--outbase=${outbase}`); - if (tsconfig) flags.push(`--tsconfig=${tsconfig}`); - if (packages) flags.push(`--packages=${packages}`); - if (resolveExtensions) flags.push(`--resolve-extensions=${validateAndJoinStringArray(resolveExtensions, "resolve extension")}`); - if (publicPath) flags.push(`--public-path=${publicPath}`); - if (entryNames) flags.push(`--entry-names=${entryNames}`); - if (chunkNames) flags.push(`--chunk-names=${chunkNames}`); - if (assetNames) flags.push(`--asset-names=${assetNames}`); - if (mainFields) flags.push(`--main-fields=${validateAndJoinStringArray(mainFields, "main field")}`); - if (conditions) flags.push(`--conditions=${validateAndJoinStringArray(conditions, "condition")}`); - if (external) for (let name of external) flags.push(`--external:${validateStringValue(name, "external")}`); - if (alias) { - for (let old in alias) { - if (old.indexOf("=") >= 0) throw new Error(`Invalid package name in alias: ${old}`); - flags.push(`--alias:${old}=${validateStringValue(alias[old], "alias", old)}`); - } - } - if (banner) { - for (let type in banner) { - if (type.indexOf("=") >= 0) throw new Error(`Invalid banner file type: ${type}`); - flags.push(`--banner:${type}=${validateStringValue(banner[type], "banner", type)}`); - } - } - if (footer) { - for (let type in footer) { - if (type.indexOf("=") >= 0) throw new Error(`Invalid footer file type: ${type}`); - flags.push(`--footer:${type}=${validateStringValue(footer[type], "footer", type)}`); - } - } - if (inject) for (let path3 of inject) flags.push(`--inject:${validateStringValue(path3, "inject")}`); - if (loader) { - for (let ext in loader) { - if (ext.indexOf("=") >= 0) throw new Error(`Invalid loader extension: ${ext}`); - flags.push(`--loader:${ext}=${validateStringValue(loader[ext], "loader", ext)}`); - } - } - if (outExtension) { - for (let ext in outExtension) { - if (ext.indexOf("=") >= 0) throw new Error(`Invalid out extension: ${ext}`); - flags.push(`--out-extension:${ext}=${validateStringValue(outExtension[ext], "out extension", ext)}`); - } - } - if (entryPoints) { - if (Array.isArray(entryPoints)) { - for (let i = 0, n = entryPoints.length; i < n; i++) { - let entryPoint = entryPoints[i]; - if (typeof entryPoint === "object" && entryPoint !== null) { - let entryPointKeys = /* @__PURE__ */ Object.create(null); - let input = getFlag(entryPoint, entryPointKeys, "in", mustBeString); - let output = getFlag(entryPoint, entryPointKeys, "out", mustBeString); - checkForInvalidFlags(entryPoint, entryPointKeys, "in entry point at index " + i); - if (input === void 0) throw new Error('Missing property "in" for entry point at index ' + i); - if (output === void 0) throw new Error('Missing property "out" for entry point at index ' + i); - entries.push([output, input]); - } else { - entries.push(["", validateStringValue(entryPoint, "entry point at index " + i)]); - } - } - } else { - for (let key in entryPoints) { - entries.push([key, validateStringValue(entryPoints[key], "entry point", key)]); - } - } - } - if (stdin) { - let stdinKeys = /* @__PURE__ */ Object.create(null); - let contents = getFlag(stdin, stdinKeys, "contents", mustBeStringOrUint8Array); - let resolveDir = getFlag(stdin, stdinKeys, "resolveDir", mustBeString); - let sourcefile = getFlag(stdin, stdinKeys, "sourcefile", mustBeString); - let loader2 = getFlag(stdin, stdinKeys, "loader", mustBeString); - checkForInvalidFlags(stdin, stdinKeys, 'in "stdin" object'); - if (sourcefile) flags.push(`--sourcefile=${sourcefile}`); - if (loader2) flags.push(`--loader=${loader2}`); - if (resolveDir) stdinResolveDir = resolveDir; - if (typeof contents === "string") stdinContents = encodeUTF8(contents); - else if (contents instanceof Uint8Array) stdinContents = contents; - } - let nodePaths = []; - if (nodePathsInput) { - for (let value of nodePathsInput) { - value += ""; - nodePaths.push(value); - } - } - return { - entries, - flags, - write, - stdinContents, - stdinResolveDir, - absWorkingDir, - nodePaths, - mangleCache: validateMangleCache(mangleCache) - }; -} -function flagsForTransformOptions(callName, options, isTTY2, logLevelDefault) { - let flags = []; - let keys = /* @__PURE__ */ Object.create(null); - pushLogFlags(flags, options, keys, isTTY2, logLevelDefault); - pushCommonFlags(flags, options, keys); - let sourcemap = getFlag(options, keys, "sourcemap", mustBeStringOrBoolean); - let sourcefile = getFlag(options, keys, "sourcefile", mustBeString); - let loader = getFlag(options, keys, "loader", mustBeString); - let banner = getFlag(options, keys, "banner", mustBeString); - let footer = getFlag(options, keys, "footer", mustBeString); - let mangleCache = getFlag(options, keys, "mangleCache", mustBeObject); - checkForInvalidFlags(options, keys, `in ${callName}() call`); - if (sourcemap) flags.push(`--sourcemap=${sourcemap === true ? "external" : sourcemap}`); - if (sourcefile) flags.push(`--sourcefile=${sourcefile}`); - if (loader) flags.push(`--loader=${loader}`); - if (banner) flags.push(`--banner=${banner}`); - if (footer) flags.push(`--footer=${footer}`); - return { - flags, - mangleCache: validateMangleCache(mangleCache) - }; -} -function createChannel(streamIn) { - const requestCallbacksByKey = {}; - const closeData = { didClose: false, reason: "" }; - let responseCallbacks = {}; - let nextRequestID = 0; - let nextBuildKey = 0; - let stdout = new Uint8Array(16 * 1024); - let stdoutUsed = 0; - let readFromStdout = (chunk) => { - let limit = stdoutUsed + chunk.length; - if (limit > stdout.length) { - let swap = new Uint8Array(limit * 2); - swap.set(stdout); - stdout = swap; - } - stdout.set(chunk, stdoutUsed); - stdoutUsed += chunk.length; - let offset = 0; - while (offset + 4 <= stdoutUsed) { - let length = readUInt32LE(stdout, offset); - if (offset + 4 + length > stdoutUsed) { - break; - } - offset += 4; - handleIncomingPacket(stdout.subarray(offset, offset + length)); - offset += length; - } - if (offset > 0) { - stdout.copyWithin(0, offset, stdoutUsed); - stdoutUsed -= offset; - } - }; - let afterClose = (error) => { - closeData.didClose = true; - if (error) closeData.reason = ": " + (error.message || error); - const text = "The service was stopped" + closeData.reason; - for (let id in responseCallbacks) { - responseCallbacks[id](text, null); - } - responseCallbacks = {}; - }; - let sendRequest = (refs, value, callback) => { - if (closeData.didClose) return callback("The service is no longer running" + closeData.reason, null); - let id = nextRequestID++; - responseCallbacks[id] = (error, response) => { - try { - callback(error, response); - } finally { - if (refs) refs.unref(); - } - }; - if (refs) refs.ref(); - streamIn.writeToStdin(encodePacket({ id, isRequest: true, value })); - }; - let sendResponse = (id, value) => { - if (closeData.didClose) throw new Error("The service is no longer running" + closeData.reason); - streamIn.writeToStdin(encodePacket({ id, isRequest: false, value })); - }; - let handleRequest = async (id, request) => { - try { - if (request.command === "ping") { - sendResponse(id, {}); - return; - } - if (typeof request.key === "number") { - const requestCallbacks = requestCallbacksByKey[request.key]; - if (!requestCallbacks) { - return; - } - const callback = requestCallbacks[request.command]; - if (callback) { - await callback(id, request); - return; - } - } - throw new Error(`Invalid command: ` + request.command); - } catch (e) { - const errors = [extractErrorMessageV8(e, streamIn, null, void 0, "")]; - try { - sendResponse(id, { errors }); - } catch { - } - } - }; - let isFirstPacket = true; - let handleIncomingPacket = (bytes) => { - if (isFirstPacket) { - isFirstPacket = false; - let binaryVersion = String.fromCharCode(...bytes); - if (binaryVersion !== "0.27.4") { - throw new Error(`Cannot start service: Host version "${"0.27.4"}" does not match binary version ${quote(binaryVersion)}`); - } - return; - } - let packet = decodePacket(bytes); - if (packet.isRequest) { - handleRequest(packet.id, packet.value); - } else { - let callback = responseCallbacks[packet.id]; - delete responseCallbacks[packet.id]; - if (packet.value.error) callback(packet.value.error, {}); - else callback(null, packet.value); - } - }; - let buildOrContext = ({ callName, refs, options, isTTY: isTTY2, defaultWD: defaultWD2, callback }) => { - let refCount = 0; - const buildKey = nextBuildKey++; - const requestCallbacks = {}; - const buildRefs = { - ref() { - if (++refCount === 1) { - if (refs) refs.ref(); - } - }, - unref() { - if (--refCount === 0) { - delete requestCallbacksByKey[buildKey]; - if (refs) refs.unref(); - } - } - }; - requestCallbacksByKey[buildKey] = requestCallbacks; - buildRefs.ref(); - buildOrContextImpl( - callName, - buildKey, - sendRequest, - sendResponse, - buildRefs, - streamIn, - requestCallbacks, - options, - isTTY2, - defaultWD2, - (err, res) => { - try { - callback(err, res); - } finally { - buildRefs.unref(); - } - } - ); - }; - let transform2 = ({ callName, refs, input, options, isTTY: isTTY2, fs: fs3, callback }) => { - const details = createObjectStash(); - let start = (inputPath) => { - try { - if (typeof input !== "string" && !(input instanceof Uint8Array)) - throw new Error('The input to "transform" must be a string or a Uint8Array'); - let { - flags, - mangleCache - } = flagsForTransformOptions(callName, options, isTTY2, transformLogLevelDefault); - let request = { - command: "transform", - flags, - inputFS: inputPath !== null, - input: inputPath !== null ? encodeUTF8(inputPath) : typeof input === "string" ? encodeUTF8(input) : input - }; - if (mangleCache) request.mangleCache = mangleCache; - sendRequest(refs, request, (error, response) => { - if (error) return callback(new Error(error), null); - let errors = replaceDetailsInMessages(response.errors, details); - let warnings = replaceDetailsInMessages(response.warnings, details); - let outstanding = 1; - let next = () => { - if (--outstanding === 0) { - let result = { - warnings, - code: response.code, - map: response.map, - mangleCache: void 0, - legalComments: void 0 - }; - if ("legalComments" in response) result.legalComments = response == null ? void 0 : response.legalComments; - if (response.mangleCache) result.mangleCache = response == null ? void 0 : response.mangleCache; - callback(null, result); - } - }; - if (errors.length > 0) return callback(failureErrorWithLog("Transform failed", errors, warnings), null); - if (response.codeFS) { - outstanding++; - fs3.readFile(response.code, (err, contents) => { - if (err !== null) { - callback(err, null); - } else { - response.code = contents; - next(); - } - }); - } - if (response.mapFS) { - outstanding++; - fs3.readFile(response.map, (err, contents) => { - if (err !== null) { - callback(err, null); - } else { - response.map = contents; - next(); - } - }); - } - next(); - }); - } catch (e) { - let flags = []; - try { - pushLogFlags(flags, options, {}, isTTY2, transformLogLevelDefault); - } catch { - } - const error = extractErrorMessageV8(e, streamIn, details, void 0, ""); - sendRequest(refs, { command: "error", flags, error }, () => { - error.detail = details.load(error.detail); - callback(failureErrorWithLog("Transform failed", [error], []), null); - }); - } - }; - if ((typeof input === "string" || input instanceof Uint8Array) && input.length > 1024 * 1024) { - let next = start; - start = () => fs3.writeFile(input, next); - } - start(null); - }; - let formatMessages2 = ({ callName, refs, messages, options, callback }) => { - if (!options) throw new Error(`Missing second argument in ${callName}() call`); - let keys = {}; - let kind = getFlag(options, keys, "kind", mustBeString); - let color = getFlag(options, keys, "color", mustBeBoolean); - let terminalWidth = getFlag(options, keys, "terminalWidth", mustBeInteger); - checkForInvalidFlags(options, keys, `in ${callName}() call`); - if (kind === void 0) throw new Error(`Missing "kind" in ${callName}() call`); - if (kind !== "error" && kind !== "warning") throw new Error(`Expected "kind" to be "error" or "warning" in ${callName}() call`); - let request = { - command: "format-msgs", - messages: sanitizeMessages(messages, "messages", null, "", terminalWidth), - isWarning: kind === "warning" - }; - if (color !== void 0) request.color = color; - if (terminalWidth !== void 0) request.terminalWidth = terminalWidth; - sendRequest(refs, request, (error, response) => { - if (error) return callback(new Error(error), null); - callback(null, response.messages); - }); - }; - let analyzeMetafile2 = ({ callName, refs, metafile, options, callback }) => { - if (options === void 0) options = {}; - let keys = {}; - let color = getFlag(options, keys, "color", mustBeBoolean); - let verbose = getFlag(options, keys, "verbose", mustBeBoolean); - checkForInvalidFlags(options, keys, `in ${callName}() call`); - let request = { - command: "analyze-metafile", - metafile - }; - if (color !== void 0) request.color = color; - if (verbose !== void 0) request.verbose = verbose; - sendRequest(refs, request, (error, response) => { - if (error) return callback(new Error(error), null); - callback(null, response.result); - }); - }; - return { - readFromStdout, - afterClose, - service: { - buildOrContext, - transform: transform2, - formatMessages: formatMessages2, - analyzeMetafile: analyzeMetafile2 - } - }; -} -function buildOrContextImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, isTTY2, defaultWD2, callback) { - const details = createObjectStash(); - const isContext = callName === "context"; - const handleError = (e, pluginName) => { - const flags = []; - try { - pushLogFlags(flags, options, {}, isTTY2, buildLogLevelDefault); - } catch { - } - const message = extractErrorMessageV8(e, streamIn, details, void 0, pluginName); - sendRequest(refs, { command: "error", flags, error: message }, () => { - message.detail = details.load(message.detail); - callback(failureErrorWithLog(isContext ? "Context failed" : "Build failed", [message], []), null); - }); - }; - let plugins; - if (typeof options === "object") { - const value = options.plugins; - if (value !== void 0) { - if (!Array.isArray(value)) return handleError(new Error(`"plugins" must be an array`), ""); - plugins = value; - } - } - if (plugins && plugins.length > 0) { - if (streamIn.isSync) return handleError(new Error("Cannot use plugins in synchronous API calls"), ""); - handlePlugins( - buildKey, - sendRequest, - sendResponse, - refs, - streamIn, - requestCallbacks, - options, - plugins, - details - ).then( - (result) => { - if (!result.ok) return handleError(result.error, result.pluginName); - try { - buildOrContextContinue(result.requestPlugins, result.runOnEndCallbacks, result.scheduleOnDisposeCallbacks); - } catch (e) { - handleError(e, ""); - } - }, - (e) => handleError(e, "") - ); - return; - } - try { - buildOrContextContinue(null, (result, done) => done([], []), () => { - }); - } catch (e) { - handleError(e, ""); - } - function buildOrContextContinue(requestPlugins, runOnEndCallbacks, scheduleOnDisposeCallbacks) { - const writeDefault = streamIn.hasFS; - const { - entries, - flags, - write, - stdinContents, - stdinResolveDir, - absWorkingDir, - nodePaths, - mangleCache - } = flagsForBuildOptions(callName, options, isTTY2, buildLogLevelDefault, writeDefault); - if (write && !streamIn.hasFS) throw new Error(`The "write" option is unavailable in this environment`); - const request = { - command: "build", - key: buildKey, - entries, - flags, - write, - stdinContents, - stdinResolveDir, - absWorkingDir: absWorkingDir || defaultWD2, - nodePaths, - context: isContext - }; - if (requestPlugins) request.plugins = requestPlugins; - if (mangleCache) request.mangleCache = mangleCache; - const buildResponseToResult = (response, callback2) => { - const result = { - errors: replaceDetailsInMessages(response.errors, details), - warnings: replaceDetailsInMessages(response.warnings, details), - outputFiles: void 0, - metafile: void 0, - mangleCache: void 0 - }; - const originalErrors = result.errors.slice(); - const originalWarnings = result.warnings.slice(); - if (response.outputFiles) result.outputFiles = response.outputFiles.map(convertOutputFiles); - if (response.metafile) result.metafile = parseJSON(response.metafile); - if (response.mangleCache) result.mangleCache = response.mangleCache; - if (response.writeToStdout !== void 0) console.log(decodeUTF8(response.writeToStdout).replace(/\n$/, "")); - runOnEndCallbacks(result, (onEndErrors, onEndWarnings) => { - if (originalErrors.length > 0 || onEndErrors.length > 0) { - const error = failureErrorWithLog("Build failed", originalErrors.concat(onEndErrors), originalWarnings.concat(onEndWarnings)); - return callback2(error, null, onEndErrors, onEndWarnings); - } - callback2(null, result, onEndErrors, onEndWarnings); - }); - }; - let latestResultPromise; - let provideLatestResult; - if (isContext) - requestCallbacks["on-end"] = (id, request2) => new Promise((resolve) => { - buildResponseToResult(request2, (err, result, onEndErrors, onEndWarnings) => { - const response = { - errors: onEndErrors, - warnings: onEndWarnings - }; - if (provideLatestResult) provideLatestResult(err, result); - latestResultPromise = void 0; - provideLatestResult = void 0; - sendResponse(id, response); - resolve(); - }); - }); - sendRequest(refs, request, (error, response) => { - if (error) return callback(new Error(error), null); - if (!isContext) { - return buildResponseToResult(response, (err, res) => { - scheduleOnDisposeCallbacks(); - return callback(err, res); - }); - } - if (response.errors.length > 0) { - return callback(failureErrorWithLog("Context failed", response.errors, response.warnings), null); - } - let didDispose = false; - const result = { - rebuild: () => { - if (!latestResultPromise) latestResultPromise = new Promise((resolve, reject) => { - let settlePromise; - provideLatestResult = (err, result2) => { - if (!settlePromise) settlePromise = () => err ? reject(err) : resolve(result2); - }; - const triggerAnotherBuild = () => { - const request2 = { - command: "rebuild", - key: buildKey - }; - sendRequest(refs, request2, (error2, response2) => { - if (error2) { - reject(new Error(error2)); - } else if (settlePromise) { - settlePromise(); - } else { - triggerAnotherBuild(); - } - }); - }; - triggerAnotherBuild(); - }); - return latestResultPromise; - }, - watch: (options2 = {}) => new Promise((resolve, reject) => { - if (!streamIn.hasFS) throw new Error(`Cannot use the "watch" API in this environment`); - const keys = {}; - const delay = getFlag(options2, keys, "delay", mustBeInteger); - checkForInvalidFlags(options2, keys, `in watch() call`); - const request2 = { - command: "watch", - key: buildKey - }; - if (delay) request2.delay = delay; - sendRequest(refs, request2, (error2) => { - if (error2) reject(new Error(error2)); - else resolve(void 0); - }); - }), - serve: (options2 = {}) => new Promise((resolve, reject) => { - if (!streamIn.hasFS) throw new Error(`Cannot use the "serve" API in this environment`); - const keys = {}; - const port = getFlag(options2, keys, "port", mustBeValidPortNumber); - const host = getFlag(options2, keys, "host", mustBeString); - const servedir = getFlag(options2, keys, "servedir", mustBeString); - const keyfile = getFlag(options2, keys, "keyfile", mustBeString); - const certfile = getFlag(options2, keys, "certfile", mustBeString); - const fallback = getFlag(options2, keys, "fallback", mustBeString); - const cors = getFlag(options2, keys, "cors", mustBeObject); - const onRequest = getFlag(options2, keys, "onRequest", mustBeFunction); - checkForInvalidFlags(options2, keys, `in serve() call`); - const request2 = { - command: "serve", - key: buildKey, - onRequest: !!onRequest - }; - if (port !== void 0) request2.port = port; - if (host !== void 0) request2.host = host; - if (servedir !== void 0) request2.servedir = servedir; - if (keyfile !== void 0) request2.keyfile = keyfile; - if (certfile !== void 0) request2.certfile = certfile; - if (fallback !== void 0) request2.fallback = fallback; - if (cors) { - const corsKeys = {}; - const origin = getFlag(cors, corsKeys, "origin", mustBeStringOrArrayOfStrings); - checkForInvalidFlags(cors, corsKeys, `on "cors" object`); - if (Array.isArray(origin)) request2.corsOrigin = origin; - else if (origin !== void 0) request2.corsOrigin = [origin]; - } - sendRequest(refs, request2, (error2, response2) => { - if (error2) return reject(new Error(error2)); - if (onRequest) { - requestCallbacks["serve-request"] = (id, request3) => { - onRequest(request3.args); - sendResponse(id, {}); - }; - } - resolve(response2); - }); - }), - cancel: () => new Promise((resolve) => { - if (didDispose) return resolve(); - const request2 = { - command: "cancel", - key: buildKey - }; - sendRequest(refs, request2, () => { - resolve(); - }); - }), - dispose: () => new Promise((resolve) => { - if (didDispose) return resolve(); - didDispose = true; - const request2 = { - command: "dispose", - key: buildKey - }; - sendRequest(refs, request2, () => { - resolve(); - scheduleOnDisposeCallbacks(); - refs.unref(); - }); - }) - }; - refs.ref(); - callback(null, result); - }); - } -} -var handlePlugins = async (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => { - let onStartCallbacks = []; - let onEndCallbacks = []; - let onResolveCallbacks = {}; - let onLoadCallbacks = {}; - let onDisposeCallbacks = []; - let nextCallbackID = 0; - let i = 0; - let requestPlugins = []; - let isSetupDone = false; - plugins = [...plugins]; - for (let item of plugins) { - let keys = {}; - if (typeof item !== "object") throw new Error(`Plugin at index ${i} must be an object`); - const name = getFlag(item, keys, "name", mustBeString); - if (typeof name !== "string" || name === "") throw new Error(`Plugin at index ${i} is missing a name`); - try { - let setup = getFlag(item, keys, "setup", mustBeFunction); - if (typeof setup !== "function") throw new Error(`Plugin is missing a setup function`); - checkForInvalidFlags(item, keys, `on plugin ${quote(name)}`); - let plugin = { - name, - onStart: false, - onEnd: false, - onResolve: [], - onLoad: [] - }; - i++; - let resolve = (path3, options = {}) => { - if (!isSetupDone) throw new Error('Cannot call "resolve" before plugin setup has completed'); - if (typeof path3 !== "string") throw new Error(`The path to resolve must be a string`); - let keys2 = /* @__PURE__ */ Object.create(null); - let pluginName = getFlag(options, keys2, "pluginName", mustBeString); - let importer = getFlag(options, keys2, "importer", mustBeString); - let namespace = getFlag(options, keys2, "namespace", mustBeString); - let resolveDir = getFlag(options, keys2, "resolveDir", mustBeString); - let kind = getFlag(options, keys2, "kind", mustBeString); - let pluginData = getFlag(options, keys2, "pluginData", canBeAnything); - let importAttributes = getFlag(options, keys2, "with", mustBeObject); - checkForInvalidFlags(options, keys2, "in resolve() call"); - return new Promise((resolve2, reject) => { - const request = { - command: "resolve", - path: path3, - key: buildKey, - pluginName: name - }; - if (pluginName != null) request.pluginName = pluginName; - if (importer != null) request.importer = importer; - if (namespace != null) request.namespace = namespace; - if (resolveDir != null) request.resolveDir = resolveDir; - if (kind != null) request.kind = kind; - else throw new Error(`Must specify "kind" when calling "resolve"`); - if (pluginData != null) request.pluginData = details.store(pluginData); - if (importAttributes != null) request.with = sanitizeStringMap(importAttributes, "with"); - sendRequest(refs, request, (error, response) => { - if (error !== null) reject(new Error(error)); - else resolve2({ - errors: replaceDetailsInMessages(response.errors, details), - warnings: replaceDetailsInMessages(response.warnings, details), - path: response.path, - external: response.external, - sideEffects: response.sideEffects, - namespace: response.namespace, - suffix: response.suffix, - pluginData: details.load(response.pluginData) - }); - }); - }); - }; - let promise = setup({ - initialOptions, - resolve, - onStart(callback) { - let registeredText = `This error came from the "onStart" callback registered here:`; - let registeredNote = extractCallerV8(new Error(registeredText), streamIn, "onStart"); - onStartCallbacks.push({ name, callback, note: registeredNote }); - plugin.onStart = true; - }, - onEnd(callback) { - let registeredText = `This error came from the "onEnd" callback registered here:`; - let registeredNote = extractCallerV8(new Error(registeredText), streamIn, "onEnd"); - onEndCallbacks.push({ name, callback, note: registeredNote }); - plugin.onEnd = true; - }, - onResolve(options, callback) { - let registeredText = `This error came from the "onResolve" callback registered here:`; - let registeredNote = extractCallerV8(new Error(registeredText), streamIn, "onResolve"); - let keys2 = {}; - let filter = getFlag(options, keys2, "filter", mustBeRegExp); - let namespace = getFlag(options, keys2, "namespace", mustBeString); - checkForInvalidFlags(options, keys2, `in onResolve() call for plugin ${quote(name)}`); - if (filter == null) throw new Error(`onResolve() call is missing a filter`); - let id = nextCallbackID++; - onResolveCallbacks[id] = { name, callback, note: registeredNote }; - plugin.onResolve.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || "" }); - }, - onLoad(options, callback) { - let registeredText = `This error came from the "onLoad" callback registered here:`; - let registeredNote = extractCallerV8(new Error(registeredText), streamIn, "onLoad"); - let keys2 = {}; - let filter = getFlag(options, keys2, "filter", mustBeRegExp); - let namespace = getFlag(options, keys2, "namespace", mustBeString); - checkForInvalidFlags(options, keys2, `in onLoad() call for plugin ${quote(name)}`); - if (filter == null) throw new Error(`onLoad() call is missing a filter`); - let id = nextCallbackID++; - onLoadCallbacks[id] = { name, callback, note: registeredNote }; - plugin.onLoad.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || "" }); - }, - onDispose(callback) { - onDisposeCallbacks.push(callback); - }, - esbuild: streamIn.esbuild - }); - if (promise) await promise; - requestPlugins.push(plugin); - } catch (e) { - return { ok: false, error: e, pluginName: name }; - } - } - requestCallbacks["on-start"] = async (id, request) => { - details.clear(); - let response = { errors: [], warnings: [] }; - await Promise.all(onStartCallbacks.map(async ({ name, callback, note }) => { - try { - let result = await callback(); - if (result != null) { - if (typeof result !== "object") throw new Error(`Expected onStart() callback in plugin ${quote(name)} to return an object`); - let keys = {}; - let errors = getFlag(result, keys, "errors", mustBeArray); - let warnings = getFlag(result, keys, "warnings", mustBeArray); - checkForInvalidFlags(result, keys, `from onStart() callback in plugin ${quote(name)}`); - if (errors != null) response.errors.push(...sanitizeMessages(errors, "errors", details, name, void 0)); - if (warnings != null) response.warnings.push(...sanitizeMessages(warnings, "warnings", details, name, void 0)); - } - } catch (e) { - response.errors.push(extractErrorMessageV8(e, streamIn, details, note && note(), name)); - } - })); - sendResponse(id, response); - }; - requestCallbacks["on-resolve"] = async (id, request) => { - let response = {}, name = "", callback, note; - for (let id2 of request.ids) { - try { - ({ name, callback, note } = onResolveCallbacks[id2]); - let result = await callback({ - path: request.path, - importer: request.importer, - namespace: request.namespace, - resolveDir: request.resolveDir, - kind: request.kind, - pluginData: details.load(request.pluginData), - with: request.with - }); - if (result != null) { - if (typeof result !== "object") throw new Error(`Expected onResolve() callback in plugin ${quote(name)} to return an object`); - let keys = {}; - let pluginName = getFlag(result, keys, "pluginName", mustBeString); - let path3 = getFlag(result, keys, "path", mustBeString); - let namespace = getFlag(result, keys, "namespace", mustBeString); - let suffix = getFlag(result, keys, "suffix", mustBeString); - let external = getFlag(result, keys, "external", mustBeBoolean); - let sideEffects = getFlag(result, keys, "sideEffects", mustBeBoolean); - let pluginData = getFlag(result, keys, "pluginData", canBeAnything); - let errors = getFlag(result, keys, "errors", mustBeArray); - let warnings = getFlag(result, keys, "warnings", mustBeArray); - let watchFiles = getFlag(result, keys, "watchFiles", mustBeArrayOfStrings); - let watchDirs = getFlag(result, keys, "watchDirs", mustBeArrayOfStrings); - checkForInvalidFlags(result, keys, `from onResolve() callback in plugin ${quote(name)}`); - response.id = id2; - if (pluginName != null) response.pluginName = pluginName; - if (path3 != null) response.path = path3; - if (namespace != null) response.namespace = namespace; - if (suffix != null) response.suffix = suffix; - if (external != null) response.external = external; - if (sideEffects != null) response.sideEffects = sideEffects; - if (pluginData != null) response.pluginData = details.store(pluginData); - if (errors != null) response.errors = sanitizeMessages(errors, "errors", details, name, void 0); - if (warnings != null) response.warnings = sanitizeMessages(warnings, "warnings", details, name, void 0); - if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, "watchFiles"); - if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, "watchDirs"); - break; - } - } catch (e) { - response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] }; - break; - } - } - sendResponse(id, response); - }; - requestCallbacks["on-load"] = async (id, request) => { - let response = {}, name = "", callback, note; - for (let id2 of request.ids) { - try { - ({ name, callback, note } = onLoadCallbacks[id2]); - let result = await callback({ - path: request.path, - namespace: request.namespace, - suffix: request.suffix, - pluginData: details.load(request.pluginData), - with: request.with - }); - if (result != null) { - if (typeof result !== "object") throw new Error(`Expected onLoad() callback in plugin ${quote(name)} to return an object`); - let keys = {}; - let pluginName = getFlag(result, keys, "pluginName", mustBeString); - let contents = getFlag(result, keys, "contents", mustBeStringOrUint8Array); - let resolveDir = getFlag(result, keys, "resolveDir", mustBeString); - let pluginData = getFlag(result, keys, "pluginData", canBeAnything); - let loader = getFlag(result, keys, "loader", mustBeString); - let errors = getFlag(result, keys, "errors", mustBeArray); - let warnings = getFlag(result, keys, "warnings", mustBeArray); - let watchFiles = getFlag(result, keys, "watchFiles", mustBeArrayOfStrings); - let watchDirs = getFlag(result, keys, "watchDirs", mustBeArrayOfStrings); - checkForInvalidFlags(result, keys, `from onLoad() callback in plugin ${quote(name)}`); - response.id = id2; - if (pluginName != null) response.pluginName = pluginName; - if (contents instanceof Uint8Array) response.contents = contents; - else if (contents != null) response.contents = encodeUTF8(contents); - if (resolveDir != null) response.resolveDir = resolveDir; - if (pluginData != null) response.pluginData = details.store(pluginData); - if (loader != null) response.loader = loader; - if (errors != null) response.errors = sanitizeMessages(errors, "errors", details, name, void 0); - if (warnings != null) response.warnings = sanitizeMessages(warnings, "warnings", details, name, void 0); - if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, "watchFiles"); - if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, "watchDirs"); - break; - } - } catch (e) { - response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] }; - break; - } - } - sendResponse(id, response); - }; - let runOnEndCallbacks = (result, done) => done([], []); - if (onEndCallbacks.length > 0) { - runOnEndCallbacks = (result, done) => { - (async () => { - const onEndErrors = []; - const onEndWarnings = []; - for (const { name, callback, note } of onEndCallbacks) { - let newErrors; - let newWarnings; - try { - const value = await callback(result); - if (value != null) { - if (typeof value !== "object") throw new Error(`Expected onEnd() callback in plugin ${quote(name)} to return an object`); - let keys = {}; - let errors = getFlag(value, keys, "errors", mustBeArray); - let warnings = getFlag(value, keys, "warnings", mustBeArray); - checkForInvalidFlags(value, keys, `from onEnd() callback in plugin ${quote(name)}`); - if (errors != null) newErrors = sanitizeMessages(errors, "errors", details, name, void 0); - if (warnings != null) newWarnings = sanitizeMessages(warnings, "warnings", details, name, void 0); - } - } catch (e) { - newErrors = [extractErrorMessageV8(e, streamIn, details, note && note(), name)]; - } - if (newErrors) { - onEndErrors.push(...newErrors); - try { - result.errors.push(...newErrors); - } catch { - } - } - if (newWarnings) { - onEndWarnings.push(...newWarnings); - try { - result.warnings.push(...newWarnings); - } catch { - } - } - } - done(onEndErrors, onEndWarnings); - })(); - }; - } - let scheduleOnDisposeCallbacks = () => { - for (const cb of onDisposeCallbacks) { - setTimeout(() => cb(), 0); - } - }; - isSetupDone = true; - return { - ok: true, - requestPlugins, - runOnEndCallbacks, - scheduleOnDisposeCallbacks - }; -}; -function createObjectStash() { - const map = /* @__PURE__ */ new Map(); - let nextID = 0; - return { - clear() { - map.clear(); - }, - load(id) { - return map.get(id); - }, - store(value) { - if (value === void 0) return -1; - const id = nextID++; - map.set(id, value); - return id; - } - }; -} -function extractCallerV8(e, streamIn, ident) { - let note; - let tried = false; - return () => { - if (tried) return note; - tried = true; - try { - let lines = (e.stack + "").split("\n"); - lines.splice(1, 1); - let location = parseStackLinesV8(streamIn, lines, ident); - if (location) { - note = { text: e.message, location }; - return note; - } - } catch { - } - }; -} -function extractErrorMessageV8(e, streamIn, stash, note, pluginName) { - let text = "Internal error"; - let location = null; - try { - text = (e && e.message || e) + ""; - } catch { - } - try { - location = parseStackLinesV8(streamIn, (e.stack + "").split("\n"), ""); - } catch { - } - return { id: "", pluginName, text, location, notes: note ? [note] : [], detail: stash ? stash.store(e) : -1 }; -} -function parseStackLinesV8(streamIn, lines, ident) { - let at = " at "; - if (streamIn.readFileSync && !lines[0].startsWith(at) && lines[1].startsWith(at)) { - for (let i = 1; i < lines.length; i++) { - let line = lines[i]; - if (!line.startsWith(at)) continue; - line = line.slice(at.length); - while (true) { - let match = /^(?:new |async )?\S+ \((.*)\)$/.exec(line); - if (match) { - line = match[1]; - continue; - } - match = /^eval at \S+ \((.*)\)(?:, \S+:\d+:\d+)?$/.exec(line); - if (match) { - line = match[1]; - continue; - } - match = /^(\S+):(\d+):(\d+)$/.exec(line); - if (match) { - let contents; - try { - contents = streamIn.readFileSync(match[1], "utf8"); - } catch { - break; - } - let lineText = contents.split(/\r\n|\r|\n|\u2028|\u2029/)[+match[2] - 1] || ""; - let column = +match[3] - 1; - let length = lineText.slice(column, column + ident.length) === ident ? ident.length : 0; - return { - file: match[1], - namespace: "file", - line: +match[2], - column: encodeUTF8(lineText.slice(0, column)).length, - length: encodeUTF8(lineText.slice(column, column + length)).length, - lineText: lineText + "\n" + lines.slice(1).join("\n"), - suggestion: "" - }; - } - break; - } - } - } - return null; -} -function failureErrorWithLog(text, errors, warnings) { - let limit = 5; - text += errors.length < 1 ? "" : ` with ${errors.length} error${errors.length < 2 ? "" : "s"}:` + errors.slice(0, limit + 1).map((e, i) => { - if (i === limit) return "\n..."; - if (!e.location) return ` -error: ${e.text}`; - let { file, line, column } = e.location; - let pluginText = e.pluginName ? `[plugin: ${e.pluginName}] ` : ""; - return ` -${file}:${line}:${column}: ERROR: ${pluginText}${e.text}`; - }).join(""); - let error = new Error(text); - for (const [key, value] of [["errors", errors], ["warnings", warnings]]) { - Object.defineProperty(error, key, { - configurable: true, - enumerable: true, - get: () => value, - set: (value2) => Object.defineProperty(error, key, { - configurable: true, - enumerable: true, - value: value2 - }) - }); - } - return error; -} -function replaceDetailsInMessages(messages, stash) { - for (const message of messages) { - message.detail = stash.load(message.detail); - } - return messages; -} -function sanitizeLocation(location, where, terminalWidth) { - if (location == null) return null; - let keys = {}; - let file = getFlag(location, keys, "file", mustBeString); - let namespace = getFlag(location, keys, "namespace", mustBeString); - let line = getFlag(location, keys, "line", mustBeInteger); - let column = getFlag(location, keys, "column", mustBeInteger); - let length = getFlag(location, keys, "length", mustBeInteger); - let lineText = getFlag(location, keys, "lineText", mustBeString); - let suggestion = getFlag(location, keys, "suggestion", mustBeString); - checkForInvalidFlags(location, keys, where); - if (lineText) { - const relevantASCII = lineText.slice( - 0, - (column && column > 0 ? column : 0) + (length && length > 0 ? length : 0) + (terminalWidth && terminalWidth > 0 ? terminalWidth : 80) - ); - if (!/[\x7F-\uFFFF]/.test(relevantASCII) && !/\n/.test(lineText)) { - lineText = relevantASCII; - } - } - return { - file: file || "", - namespace: namespace || "", - line: line || 0, - column: column || 0, - length: length || 0, - lineText: lineText || "", - suggestion: suggestion || "" - }; -} -function sanitizeMessages(messages, property, stash, fallbackPluginName, terminalWidth) { - let messagesClone = []; - let index = 0; - for (const message of messages) { - let keys = {}; - let id = getFlag(message, keys, "id", mustBeString); - let pluginName = getFlag(message, keys, "pluginName", mustBeString); - let text = getFlag(message, keys, "text", mustBeString); - let location = getFlag(message, keys, "location", mustBeObjectOrNull); - let notes = getFlag(message, keys, "notes", mustBeArray); - let detail = getFlag(message, keys, "detail", canBeAnything); - let where = `in element ${index} of "${property}"`; - checkForInvalidFlags(message, keys, where); - let notesClone = []; - if (notes) { - for (const note of notes) { - let noteKeys = {}; - let noteText = getFlag(note, noteKeys, "text", mustBeString); - let noteLocation = getFlag(note, noteKeys, "location", mustBeObjectOrNull); - checkForInvalidFlags(note, noteKeys, where); - notesClone.push({ - text: noteText || "", - location: sanitizeLocation(noteLocation, where, terminalWidth) - }); - } - } - messagesClone.push({ - id: id || "", - pluginName: pluginName || fallbackPluginName, - text: text || "", - location: sanitizeLocation(location, where, terminalWidth), - notes: notesClone, - detail: stash ? stash.store(detail) : -1 - }); - index++; - } - return messagesClone; -} -function sanitizeStringArray(values, property) { - const result = []; - for (const value of values) { - if (typeof value !== "string") throw new Error(`${quote(property)} must be an array of strings`); - result.push(value); - } - return result; -} -function sanitizeStringMap(map, property) { - const result = /* @__PURE__ */ Object.create(null); - for (const key in map) { - const value = map[key]; - if (typeof value !== "string") throw new Error(`key ${quote(key)} in object ${quote(property)} must be a string`); - result[key] = value; - } - return result; -} -function convertOutputFiles({ path: path3, contents, hash }) { - let text = null; - return { - path: path3, - contents, - hash, - get text() { - const binary = this.contents; - if (text === null || binary !== contents) { - contents = binary; - text = decodeUTF8(binary); - } - return text; - } - }; -} -function jsRegExpToGoRegExp(regexp) { - let result = regexp.source; - if (regexp.flags) result = `(?${regexp.flags})${result}`; - return result; -} -function parseJSON(bytes) { - let text; - try { - text = decodeUTF8(bytes); - } catch { - return JSON_parse(bytes); - } - return JSON.parse(text); -} - -// lib/npm/node-platform.ts -var fs = require("fs"); -var os = require("os"); -var path = require("path"); -var ESBUILD_BINARY_PATH = process.env.ESBUILD_BINARY_PATH || ESBUILD_BINARY_PATH; -var isValidBinaryPath = (x) => !!x && x !== "/usr/bin/esbuild"; -var packageDarwin_arm64 = "@esbuild/darwin-arm64"; -var packageDarwin_x64 = "@esbuild/darwin-x64"; -var knownWindowsPackages = { - "win32 arm64 LE": "@esbuild/win32-arm64", - "win32 ia32 LE": "@esbuild/win32-ia32", - "win32 x64 LE": "@esbuild/win32-x64" -}; -var knownUnixlikePackages = { - "aix ppc64 BE": "@esbuild/aix-ppc64", - "android arm64 LE": "@esbuild/android-arm64", - "darwin arm64 LE": "@esbuild/darwin-arm64", - "darwin x64 LE": "@esbuild/darwin-x64", - "freebsd arm64 LE": "@esbuild/freebsd-arm64", - "freebsd x64 LE": "@esbuild/freebsd-x64", - "linux arm LE": "@esbuild/linux-arm", - "linux arm64 LE": "@esbuild/linux-arm64", - "linux ia32 LE": "@esbuild/linux-ia32", - "linux mips64el LE": "@esbuild/linux-mips64el", - "linux ppc64 LE": "@esbuild/linux-ppc64", - "linux riscv64 LE": "@esbuild/linux-riscv64", - "linux s390x BE": "@esbuild/linux-s390x", - "linux x64 LE": "@esbuild/linux-x64", - "linux loong64 LE": "@esbuild/linux-loong64", - "netbsd arm64 LE": "@esbuild/netbsd-arm64", - "netbsd x64 LE": "@esbuild/netbsd-x64", - "openbsd arm64 LE": "@esbuild/openbsd-arm64", - "openbsd x64 LE": "@esbuild/openbsd-x64", - "sunos x64 LE": "@esbuild/sunos-x64" -}; -var knownWebAssemblyFallbackPackages = { - "android arm LE": "@esbuild/android-arm", - "android x64 LE": "@esbuild/android-x64", - "openharmony arm64 LE": "@esbuild/openharmony-arm64" -}; -function pkgAndSubpathForCurrentPlatform() { - let pkg; - let subpath; - let isWASM = false; - let platformKey = `${process.platform} ${os.arch()} ${os.endianness()}`; - if (platformKey in knownWindowsPackages) { - pkg = knownWindowsPackages[platformKey]; - subpath = "esbuild.exe"; - } else if (platformKey in knownUnixlikePackages) { - pkg = knownUnixlikePackages[platformKey]; - subpath = "bin/esbuild"; - } else if (platformKey in knownWebAssemblyFallbackPackages) { - pkg = knownWebAssemblyFallbackPackages[platformKey]; - subpath = "bin/esbuild"; - isWASM = true; - } else { - throw new Error(`Unsupported platform: ${platformKey}`); - } - return { pkg, subpath, isWASM }; -} -function pkgForSomeOtherPlatform() { - const libMainJS = require.resolve("esbuild"); - const nodeModulesDirectory = path.dirname(path.dirname(path.dirname(libMainJS))); - if (path.basename(nodeModulesDirectory) === "node_modules") { - for (const unixKey in knownUnixlikePackages) { - try { - const pkg = knownUnixlikePackages[unixKey]; - if (fs.existsSync(path.join(nodeModulesDirectory, pkg))) return pkg; - } catch { - } - } - for (const windowsKey in knownWindowsPackages) { - try { - const pkg = knownWindowsPackages[windowsKey]; - if (fs.existsSync(path.join(nodeModulesDirectory, pkg))) return pkg; - } catch { - } - } - } - return null; -} -function downloadedBinPath(pkg, subpath) { - const esbuildLibDir = path.dirname(require.resolve("esbuild")); - return path.join(esbuildLibDir, `downloaded-${pkg.replace("/", "-")}-${path.basename(subpath)}`); -} -function generateBinPath() { - if (isValidBinaryPath(ESBUILD_BINARY_PATH)) { - if (!fs.existsSync(ESBUILD_BINARY_PATH)) { - console.warn(`[esbuild] Ignoring bad configuration: ESBUILD_BINARY_PATH=${ESBUILD_BINARY_PATH}`); - } else { - return { binPath: ESBUILD_BINARY_PATH, isWASM: false }; - } - } - const { pkg, subpath, isWASM } = pkgAndSubpathForCurrentPlatform(); - let binPath; - try { - binPath = require.resolve(`${pkg}/${subpath}`); - } catch (e) { - binPath = downloadedBinPath(pkg, subpath); - if (!fs.existsSync(binPath)) { - try { - require.resolve(pkg); - } catch { - const otherPkg = pkgForSomeOtherPlatform(); - if (otherPkg) { - let suggestions = ` -Specifically the "${otherPkg}" package is present but this platform -needs the "${pkg}" package instead. People often get into this -situation by installing esbuild on Windows or macOS and copying "node_modules" -into a Docker image that runs Linux, or by copying "node_modules" between -Windows and WSL environments. - -If you are installing with npm, you can try not copying the "node_modules" -directory when you copy the files over, and running "npm ci" or "npm install" -on the destination platform after the copy. Or you could consider using yarn -instead of npm which has built-in support for installing a package on multiple -platforms simultaneously. - -If you are installing with yarn, you can try listing both this platform and the -other platform in your ".yarnrc.yml" file using the "supportedArchitectures" -feature: https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures -Keep in mind that this means multiple copies of esbuild will be present. -`; - if (pkg === packageDarwin_x64 && otherPkg === packageDarwin_arm64 || pkg === packageDarwin_arm64 && otherPkg === packageDarwin_x64) { - suggestions = ` -Specifically the "${otherPkg}" package is present but this platform -needs the "${pkg}" package instead. People often get into this -situation by installing esbuild with npm running inside of Rosetta 2 and then -trying to use it with node running outside of Rosetta 2, or vice versa (Rosetta -2 is Apple's on-the-fly x86_64-to-arm64 translation service). - -If you are installing with npm, you can try ensuring that both npm and node are -not running under Rosetta 2 and then reinstalling esbuild. This likely involves -changing how you installed npm and/or node. For example, installing node with -the universal installer here should work: https://nodejs.org/en/download/. Or -you could consider using yarn instead of npm which has built-in support for -installing a package on multiple platforms simultaneously. - -If you are installing with yarn, you can try listing both "arm64" and "x64" -in your ".yarnrc.yml" file using the "supportedArchitectures" feature: -https://yarnpkg.com/configuration/yarnrc/#supportedArchitectures -Keep in mind that this means multiple copies of esbuild will be present. -`; - } - throw new Error(` -You installed esbuild for another platform than the one you're currently using. -This won't work because esbuild is written with native code and needs to -install a platform-specific binary executable. -${suggestions} -Another alternative is to use the "esbuild-wasm" package instead, which works -the same way on all platforms. But it comes with a heavy performance cost and -can sometimes be 10x slower than the "esbuild" package, so you may also not -want to do that. -`); - } - throw new Error(`The package "${pkg}" could not be found, and is needed by esbuild. - -If you are installing esbuild with npm, make sure that you don't specify the -"--no-optional" or "--omit=optional" flags. The "optionalDependencies" feature -of "package.json" is used by esbuild to install the correct binary executable -for your current platform.`); - } - throw e; - } - } - if (/\.zip\//.test(binPath)) { - let pnpapi; - try { - pnpapi = require("pnpapi"); - } catch (e) { - } - if (pnpapi) { - const root = pnpapi.getPackageInformation(pnpapi.topLevel).packageLocation; - const binTargetPath = path.join( - root, - "node_modules", - ".cache", - "esbuild", - `pnpapi-${pkg.replace("/", "-")}-${"0.27.4"}-${path.basename(subpath)}` - ); - if (!fs.existsSync(binTargetPath)) { - fs.mkdirSync(path.dirname(binTargetPath), { recursive: true }); - fs.copyFileSync(binPath, binTargetPath); - fs.chmodSync(binTargetPath, 493); - } - return { binPath: binTargetPath, isWASM }; - } - } - return { binPath, isWASM }; -} - -// lib/npm/node.ts -var child_process = require("child_process"); -var crypto = require("crypto"); -var path2 = require("path"); -var fs2 = require("fs"); -var os2 = require("os"); -var tty = require("tty"); -var worker_threads; -if (process.env.ESBUILD_WORKER_THREADS !== "0") { - try { - worker_threads = require("worker_threads"); - } catch { - } - let [major, minor] = process.versions.node.split("."); - if ( - // { - if ((!ESBUILD_BINARY_PATH || false) && (path2.basename(__filename) !== "main.js" || path2.basename(__dirname) !== "lib")) { - throw new Error( - `The esbuild JavaScript API cannot be bundled. Please mark the "esbuild" package as external so it's not included in the bundle. - -More information: The file containing the code for esbuild's JavaScript API (${__filename}) does not appear to be inside the esbuild package on the file system, which usually means that the esbuild package was bundled into another file. This is problematic because the API needs to run a binary executable inside the esbuild package which is located using a relative path from the API code to the executable. If the esbuild package is bundled, the relative path will be incorrect and the executable won't be found.` - ); - } - if (false) { - return ["node", [path2.join(__dirname, "..", "bin", "esbuild")]]; - } else { - const { binPath, isWASM } = generateBinPath(); - if (isWASM) { - return ["node", [binPath]]; - } else { - return [binPath, []]; - } - } -}; -var isTTY = () => tty.isatty(2); -var fsSync = { - readFile(tempFile, callback) { - try { - let contents = fs2.readFileSync(tempFile, "utf8"); - try { - fs2.unlinkSync(tempFile); - } catch { - } - callback(null, contents); - } catch (err) { - callback(err, null); - } - }, - writeFile(contents, callback) { - try { - let tempFile = randomFileName(); - fs2.writeFileSync(tempFile, contents); - callback(tempFile); - } catch { - callback(null); - } - } -}; -var fsAsync = { - readFile(tempFile, callback) { - try { - fs2.readFile(tempFile, "utf8", (err, contents) => { - try { - fs2.unlink(tempFile, () => callback(err, contents)); - } catch { - callback(err, contents); - } - }); - } catch (err) { - callback(err, null); - } - }, - writeFile(contents, callback) { - try { - let tempFile = randomFileName(); - fs2.writeFile(tempFile, contents, (err) => err !== null ? callback(null) : callback(tempFile)); - } catch { - callback(null); - } - } -}; -var version = "0.27.4"; -var build = (options) => ensureServiceIsRunning().build(options); -var context = (buildOptions) => ensureServiceIsRunning().context(buildOptions); -var transform = (input, options) => ensureServiceIsRunning().transform(input, options); -var formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options); -var analyzeMetafile = (messages, options) => ensureServiceIsRunning().analyzeMetafile(messages, options); -var buildSync = (options) => { - if (worker_threads && !isInternalWorkerThread) { - if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads); - return workerThreadService.buildSync(options); - } - let result; - runServiceSync((service) => service.buildOrContext({ - callName: "buildSync", - refs: null, - options, - isTTY: isTTY(), - defaultWD, - callback: (err, res) => { - if (err) throw err; - result = res; - } - })); - return result; -}; -var transformSync = (input, options) => { - if (worker_threads && !isInternalWorkerThread) { - if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads); - return workerThreadService.transformSync(input, options); - } - let result; - runServiceSync((service) => service.transform({ - callName: "transformSync", - refs: null, - input, - options: options || {}, - isTTY: isTTY(), - fs: fsSync, - callback: (err, res) => { - if (err) throw err; - result = res; - } - })); - return result; -}; -var formatMessagesSync = (messages, options) => { - if (worker_threads && !isInternalWorkerThread) { - if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads); - return workerThreadService.formatMessagesSync(messages, options); - } - let result; - runServiceSync((service) => service.formatMessages({ - callName: "formatMessagesSync", - refs: null, - messages, - options, - callback: (err, res) => { - if (err) throw err; - result = res; - } - })); - return result; -}; -var analyzeMetafileSync = (metafile, options) => { - if (worker_threads && !isInternalWorkerThread) { - if (!workerThreadService) workerThreadService = startWorkerThreadService(worker_threads); - return workerThreadService.analyzeMetafileSync(metafile, options); - } - let result; - runServiceSync((service) => service.analyzeMetafile({ - callName: "analyzeMetafileSync", - refs: null, - metafile: typeof metafile === "string" ? metafile : JSON.stringify(metafile), - options, - callback: (err, res) => { - if (err) throw err; - result = res; - } - })); - return result; -}; -var stop = () => { - if (stopService) stopService(); - if (workerThreadService) workerThreadService.stop(); - return Promise.resolve(); -}; -var initializeWasCalled = false; -var initialize = (options) => { - options = validateInitializeOptions(options || {}); - if (options.wasmURL) throw new Error(`The "wasmURL" option only works in the browser`); - if (options.wasmModule) throw new Error(`The "wasmModule" option only works in the browser`); - if (options.worker) throw new Error(`The "worker" option only works in the browser`); - if (initializeWasCalled) throw new Error('Cannot call "initialize" more than once'); - ensureServiceIsRunning(); - initializeWasCalled = true; - return Promise.resolve(); -}; -var defaultWD = process.cwd(); -var longLivedService; -var stopService; -var ensureServiceIsRunning = () => { - if (longLivedService) return longLivedService; - let [command, args] = esbuildCommandAndArgs(); - let child = child_process.spawn(command, args.concat(`--service=${"0.27.4"}`, "--ping"), { - windowsHide: true, - stdio: ["pipe", "pipe", "inherit"], - cwd: defaultWD - }); - let { readFromStdout, afterClose, service } = createChannel({ - writeToStdin(bytes) { - child.stdin.write(bytes, (err) => { - if (err) afterClose(err); - }); - }, - readFileSync: fs2.readFileSync, - isSync: false, - hasFS: true, - esbuild: node_exports - }); - child.stdin.on("error", afterClose); - child.on("error", afterClose); - const stdin = child.stdin; - const stdout = child.stdout; - stdout.on("data", readFromStdout); - stdout.on("end", afterClose); - stopService = () => { - stdin.destroy(); - stdout.destroy(); - child.kill(); - initializeWasCalled = false; - longLivedService = void 0; - stopService = void 0; - }; - let refCount = 0; - child.unref(); - if (stdin.unref) { - stdin.unref(); - } - if (stdout.unref) { - stdout.unref(); - } - const refs = { - ref() { - if (++refCount === 1) child.ref(); - }, - unref() { - if (--refCount === 0) child.unref(); - } - }; - longLivedService = { - build: (options) => new Promise((resolve, reject) => { - service.buildOrContext({ - callName: "build", - refs, - options, - isTTY: isTTY(), - defaultWD, - callback: (err, res) => err ? reject(err) : resolve(res) - }); - }), - context: (options) => new Promise((resolve, reject) => service.buildOrContext({ - callName: "context", - refs, - options, - isTTY: isTTY(), - defaultWD, - callback: (err, res) => err ? reject(err) : resolve(res) - })), - transform: (input, options) => new Promise((resolve, reject) => service.transform({ - callName: "transform", - refs, - input, - options: options || {}, - isTTY: isTTY(), - fs: fsAsync, - callback: (err, res) => err ? reject(err) : resolve(res) - })), - formatMessages: (messages, options) => new Promise((resolve, reject) => service.formatMessages({ - callName: "formatMessages", - refs, - messages, - options, - callback: (err, res) => err ? reject(err) : resolve(res) - })), - analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => service.analyzeMetafile({ - callName: "analyzeMetafile", - refs, - metafile: typeof metafile === "string" ? metafile : JSON.stringify(metafile), - options, - callback: (err, res) => err ? reject(err) : resolve(res) - })) - }; - return longLivedService; -}; -var runServiceSync = (callback) => { - let [command, args] = esbuildCommandAndArgs(); - let stdin = new Uint8Array(); - let { readFromStdout, afterClose, service } = createChannel({ - writeToStdin(bytes) { - if (stdin.length !== 0) throw new Error("Must run at most one command"); - stdin = bytes; - }, - isSync: true, - hasFS: true, - esbuild: node_exports - }); - callback(service); - let stdout = child_process.execFileSync(command, args.concat(`--service=${"0.27.4"}`), { - cwd: defaultWD, - windowsHide: true, - input: stdin, - // We don't know how large the output could be. If it's too large, the - // command will fail with ENOBUFS. Reserve 16mb for now since that feels - // like it should be enough. Also allow overriding this with an environment - // variable. - maxBuffer: +process.env.ESBUILD_MAX_BUFFER || 16 * 1024 * 1024 - }); - readFromStdout(stdout); - afterClose(null); -}; -var randomFileName = () => { - return path2.join(os2.tmpdir(), `esbuild-${crypto.randomBytes(32).toString("hex")}`); -}; -var workerThreadService = null; -var startWorkerThreadService = (worker_threads2) => { - let { port1: mainPort, port2: workerPort } = new worker_threads2.MessageChannel(); - let worker = new worker_threads2.Worker(__filename, { - workerData: { workerPort, defaultWD, esbuildVersion: "0.27.4" }, - transferList: [workerPort], - // From node's documentation: https://nodejs.org/api/worker_threads.html - // - // Take care when launching worker threads from preload scripts (scripts loaded - // and run using the `-r` command line flag). Unless the `execArgv` option is - // explicitly set, new Worker threads automatically inherit the command line flags - // from the running process and will preload the same preload scripts as the main - // thread. If the preload script unconditionally launches a worker thread, every - // thread spawned will spawn another until the application crashes. - // - execArgv: [] - }); - let nextID = 0; - let fakeBuildError = (text) => { - let error = new Error(`Build failed with 1 error: -error: ${text}`); - let errors = [{ id: "", pluginName: "", text, location: null, notes: [], detail: void 0 }]; - error.errors = errors; - error.warnings = []; - return error; - }; - let validateBuildSyncOptions = (options) => { - if (!options) return; - let plugins = options.plugins; - if (plugins && plugins.length > 0) throw fakeBuildError(`Cannot use plugins in synchronous API calls`); - }; - let applyProperties = (object, properties) => { - for (let key in properties) { - object[key] = properties[key]; - } - }; - let runCallSync = (command, args) => { - let id = nextID++; - let sharedBuffer = new SharedArrayBuffer(8); - let sharedBufferView = new Int32Array(sharedBuffer); - let msg = { sharedBuffer, id, command, args }; - worker.postMessage(msg); - let status = Atomics.wait(sharedBufferView, 0, 0); - if (status !== "ok" && status !== "not-equal") throw new Error("Internal error: Atomics.wait() failed: " + status); - let { message: { id: id2, resolve, reject, properties } } = worker_threads2.receiveMessageOnPort(mainPort); - if (id !== id2) throw new Error(`Internal error: Expected id ${id} but got id ${id2}`); - if (reject) { - applyProperties(reject, properties); - throw reject; - } - return resolve; - }; - worker.unref(); - return { - buildSync(options) { - validateBuildSyncOptions(options); - return runCallSync("build", [options]); - }, - transformSync(input, options) { - return runCallSync("transform", [input, options]); - }, - formatMessagesSync(messages, options) { - return runCallSync("formatMessages", [messages, options]); - }, - analyzeMetafileSync(metafile, options) { - return runCallSync("analyzeMetafile", [metafile, options]); - }, - stop() { - worker.terminate(); - workerThreadService = null; - } - }; -}; -var startSyncServiceWorker = () => { - let workerPort = worker_threads.workerData.workerPort; - let parentPort = worker_threads.parentPort; - let extractProperties = (object) => { - let properties = {}; - if (object && typeof object === "object") { - for (let key in object) { - properties[key] = object[key]; - } - } - return properties; - }; - try { - let service = ensureServiceIsRunning(); - defaultWD = worker_threads.workerData.defaultWD; - parentPort.on("message", (msg) => { - (async () => { - let { sharedBuffer, id, command, args } = msg; - let sharedBufferView = new Int32Array(sharedBuffer); - try { - switch (command) { - case "build": - workerPort.postMessage({ id, resolve: await service.build(args[0]) }); - break; - case "transform": - workerPort.postMessage({ id, resolve: await service.transform(args[0], args[1]) }); - break; - case "formatMessages": - workerPort.postMessage({ id, resolve: await service.formatMessages(args[0], args[1]) }); - break; - case "analyzeMetafile": - workerPort.postMessage({ id, resolve: await service.analyzeMetafile(args[0], args[1]) }); - break; - default: - throw new Error(`Invalid command: ${command}`); - } - } catch (reject) { - workerPort.postMessage({ id, reject, properties: extractProperties(reject) }); - } - Atomics.add(sharedBufferView, 0, 1); - Atomics.notify(sharedBufferView, 0, Infinity); - })(); - }); - } catch (reject) { - parentPort.on("message", (msg) => { - let { sharedBuffer, id } = msg; - let sharedBufferView = new Int32Array(sharedBuffer); - workerPort.postMessage({ id, reject, properties: extractProperties(reject) }); - Atomics.add(sharedBufferView, 0, 1); - Atomics.notify(sharedBufferView, 0, Infinity); - }); - } -}; -if (isInternalWorkerThread) { - startSyncServiceWorker(); -} -var node_default = node_exports; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - analyzeMetafile, - analyzeMetafileSync, - build, - buildSync, - context, - formatMessages, - formatMessagesSync, - initialize, - stop, - transform, - transformSync, - version -}); diff --git a/skills/flight-finder/node_modules/esbuild/package.json b/skills/flight-finder/node_modules/esbuild/package.json deleted file mode 100644 index 13a9813..0000000 --- a/skills/flight-finder/node_modules/esbuild/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "esbuild", - "version": "0.27.4", - "description": "An extremely fast JavaScript and CSS bundler and minifier.", - "repository": { - "type": "git", - "url": "git+https://github.com/evanw/esbuild.git" - }, - "scripts": { - "postinstall": "node install.js" - }, - "main": "lib/main.js", - "types": "lib/main.d.ts", - "engines": { - "node": ">=18" - }, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.4", - "@esbuild/android-arm": "0.27.4", - "@esbuild/android-arm64": "0.27.4", - "@esbuild/android-x64": "0.27.4", - "@esbuild/darwin-arm64": "0.27.4", - "@esbuild/darwin-x64": "0.27.4", - "@esbuild/freebsd-arm64": "0.27.4", - "@esbuild/freebsd-x64": "0.27.4", - "@esbuild/linux-arm": "0.27.4", - "@esbuild/linux-arm64": "0.27.4", - "@esbuild/linux-ia32": "0.27.4", - "@esbuild/linux-loong64": "0.27.4", - "@esbuild/linux-mips64el": "0.27.4", - "@esbuild/linux-ppc64": "0.27.4", - "@esbuild/linux-riscv64": "0.27.4", - "@esbuild/linux-s390x": "0.27.4", - "@esbuild/linux-x64": "0.27.4", - "@esbuild/netbsd-arm64": "0.27.4", - "@esbuild/netbsd-x64": "0.27.4", - "@esbuild/openbsd-arm64": "0.27.4", - "@esbuild/openbsd-x64": "0.27.4", - "@esbuild/openharmony-arm64": "0.27.4", - "@esbuild/sunos-x64": "0.27.4", - "@esbuild/win32-arm64": "0.27.4", - "@esbuild/win32-ia32": "0.27.4", - "@esbuild/win32-x64": "0.27.4" - }, - "license": "MIT" -} diff --git a/skills/flight-finder/node_modules/fast-deep-equal/LICENSE b/skills/flight-finder/node_modules/fast-deep-equal/LICENSE deleted file mode 100644 index 7f15435..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/fast-deep-equal/README.md b/skills/flight-finder/node_modules/fast-deep-equal/README.md deleted file mode 100644 index d3f4ffc..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# fast-deep-equal -The fastest deep equal with ES6 Map, Set and Typed arrays support. - -[![Build Status](https://travis-ci.org/epoberezkin/fast-deep-equal.svg?branch=master)](https://travis-ci.org/epoberezkin/fast-deep-equal) -[![npm](https://img.shields.io/npm/v/fast-deep-equal.svg)](https://www.npmjs.com/package/fast-deep-equal) -[![Coverage Status](https://coveralls.io/repos/github/epoberezkin/fast-deep-equal/badge.svg?branch=master)](https://coveralls.io/github/epoberezkin/fast-deep-equal?branch=master) - - -## Install - -```bash -npm install fast-deep-equal -``` - - -## Features - -- ES5 compatible -- works in node.js (8+) and browsers (IE9+) -- checks equality of Date and RegExp objects by value. - -ES6 equal (`require('fast-deep-equal/es6')`) also supports: -- Maps -- Sets -- Typed arrays - - -## Usage - -```javascript -var equal = require('fast-deep-equal'); -console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true -``` - -To support ES6 Maps, Sets and Typed arrays equality use: - -```javascript -var equal = require('fast-deep-equal/es6'); -console.log(equal(Int16Array([1, 2]), Int16Array([1, 2]))); // true -``` - -To use with React (avoiding the traversal of React elements' _owner -property that contains circular references and is not needed when -comparing the elements - borrowed from [react-fast-compare](https://github.com/FormidableLabs/react-fast-compare)): - -```javascript -var equal = require('fast-deep-equal/react'); -var equal = require('fast-deep-equal/es6/react'); -``` - - -## Performance benchmark - -Node.js v12.6.0: - -``` -fast-deep-equal x 261,950 ops/sec ±0.52% (89 runs sampled) -fast-deep-equal/es6 x 212,991 ops/sec ±0.34% (92 runs sampled) -fast-equals x 230,957 ops/sec ±0.83% (85 runs sampled) -nano-equal x 187,995 ops/sec ±0.53% (88 runs sampled) -shallow-equal-fuzzy x 138,302 ops/sec ±0.49% (90 runs sampled) -underscore.isEqual x 74,423 ops/sec ±0.38% (89 runs sampled) -lodash.isEqual x 36,637 ops/sec ±0.72% (90 runs sampled) -deep-equal x 2,310 ops/sec ±0.37% (90 runs sampled) -deep-eql x 35,312 ops/sec ±0.67% (91 runs sampled) -ramda.equals x 12,054 ops/sec ±0.40% (91 runs sampled) -util.isDeepStrictEqual x 46,440 ops/sec ±0.43% (90 runs sampled) -assert.deepStrictEqual x 456 ops/sec ±0.71% (88 runs sampled) - -The fastest is fast-deep-equal -``` - -To run benchmark (requires node.js 6+): - -```bash -npm run benchmark -``` - -__Please note__: this benchmark runs against the available test cases. To choose the most performant library for your application, it is recommended to benchmark against your data and to NOT expect this benchmark to reflect the performance difference in your application. - - -## Enterprise support - -fast-deep-equal package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-fast-deep-equal?utm_source=npm-fast-deep-equal&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers. - - -## Security contact - -To report a security vulnerability, please use the -[Tidelift security contact](https://tidelift.com/security). -Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues. - - -## License - -[MIT](https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE) diff --git a/skills/flight-finder/node_modules/fast-deep-equal/es6/index.d.ts b/skills/flight-finder/node_modules/fast-deep-equal/es6/index.d.ts deleted file mode 100644 index c7eb9c7..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/es6/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const equal: (a: any, b: any) => boolean; -export = equal; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/es6/index.js b/skills/flight-finder/node_modules/fast-deep-equal/es6/index.js deleted file mode 100644 index d980be2..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/es6/index.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -// do not edit .js files directly - edit src/index.jst - - - var envHasBigInt64Array = typeof BigInt64Array !== 'undefined'; - - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - if ((a instanceof Map) && (b instanceof Map)) { - if (a.size !== b.size) return false; - for (i of a.entries()) - if (!b.has(i[0])) return false; - for (i of a.entries()) - if (!equal(i[1], b.get(i[0]))) return false; - return true; - } - - if ((a instanceof Set) && (b instanceof Set)) { - if (a.size !== b.size) return false; - for (i of a.entries()) - if (!b.has(i[0])) return false; - return true; - } - - if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (a[i] !== b[i]) return false; - return true; - } - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; -}; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/es6/react.d.ts b/skills/flight-finder/node_modules/fast-deep-equal/es6/react.d.ts deleted file mode 100644 index c7eb9c7..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/es6/react.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const equal: (a: any, b: any) => boolean; -export = equal; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/es6/react.js b/skills/flight-finder/node_modules/fast-deep-equal/es6/react.js deleted file mode 100644 index 98e2f9b..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/es6/react.js +++ /dev/null @@ -1,79 +0,0 @@ -'use strict'; - -// do not edit .js files directly - edit src/index.jst - - - var envHasBigInt64Array = typeof BigInt64Array !== 'undefined'; - - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - if ((a instanceof Map) && (b instanceof Map)) { - if (a.size !== b.size) return false; - for (i of a.entries()) - if (!b.has(i[0])) return false; - for (i of a.entries()) - if (!equal(i[1], b.get(i[0]))) return false; - return true; - } - - if ((a instanceof Set) && (b instanceof Set)) { - if (a.size !== b.size) return false; - for (i of a.entries()) - if (!b.has(i[0])) return false; - return true; - } - - if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (a[i] !== b[i]) return false; - return true; - } - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - - if (key === '_owner' && a.$$typeof) { - // React-specific: avoid traversing React elements' _owner. - // _owner contains circular references - // and is not needed when comparing the actual elements (and not their owners) - continue; - } - - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; -}; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/index.d.ts b/skills/flight-finder/node_modules/fast-deep-equal/index.d.ts deleted file mode 100644 index 3c042ca..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'fast-deep-equal' { - const equal: (a: any, b: any) => boolean; - export = equal; -} diff --git a/skills/flight-finder/node_modules/fast-deep-equal/index.js b/skills/flight-finder/node_modules/fast-deep-equal/index.js deleted file mode 100644 index 30dd1ba..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/index.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -// do not edit .js files directly - edit src/index.jst - - - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; -}; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/package.json b/skills/flight-finder/node_modules/fast-deep-equal/package.json deleted file mode 100644 index 3cfe66c..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "fast-deep-equal", - "version": "3.1.3", - "description": "Fast deep equal", - "main": "index.js", - "scripts": { - "eslint": "eslint *.js benchmark/*.js spec/*.js", - "build": "node build", - "benchmark": "npm i && npm run build && cd ./benchmark && npm i && node ./", - "test-spec": "mocha spec/*.spec.js -R spec", - "test-cov": "nyc npm run test-spec", - "test-ts": "tsc --target ES5 --noImplicitAny index.d.ts", - "test": "npm run build && npm run eslint && npm run test-ts && npm run test-cov", - "prepublish": "npm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/epoberezkin/fast-deep-equal.git" - }, - "keywords": [ - "fast", - "equal", - "deep-equal" - ], - "author": "Evgeny Poberezkin", - "license": "MIT", - "bugs": { - "url": "https://github.com/epoberezkin/fast-deep-equal/issues" - }, - "homepage": "https://github.com/epoberezkin/fast-deep-equal#readme", - "devDependencies": { - "coveralls": "^3.1.0", - "dot": "^1.1.2", - "eslint": "^7.2.0", - "mocha": "^7.2.0", - "nyc": "^15.1.0", - "pre-commit": "^1.2.2", - "react": "^16.12.0", - "react-test-renderer": "^16.12.0", - "sinon": "^9.0.2", - "typescript": "^3.9.5" - }, - "nyc": { - "exclude": [ - "**/spec/**", - "node_modules" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "files": [ - "index.js", - "index.d.ts", - "react.js", - "react.d.ts", - "es6/" - ], - "types": "index.d.ts" -} diff --git a/skills/flight-finder/node_modules/fast-deep-equal/react.d.ts b/skills/flight-finder/node_modules/fast-deep-equal/react.d.ts deleted file mode 100644 index c7eb9c7..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/react.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const equal: (a: any, b: any) => boolean; -export = equal; diff --git a/skills/flight-finder/node_modules/fast-deep-equal/react.js b/skills/flight-finder/node_modules/fast-deep-equal/react.js deleted file mode 100644 index 3489b98..0000000 --- a/skills/flight-finder/node_modules/fast-deep-equal/react.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -// do not edit .js files directly - edit src/index.jst - - - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - - if (key === '_owner' && a.$$typeof) { - // React-specific: avoid traversing React elements' _owner. - // _owner contains circular references - // and is not needed when comparing the actual elements (and not their owners) - continue; - } - - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; -}; diff --git a/skills/flight-finder/node_modules/fontkit/README.md b/skills/flight-finder/node_modules/fontkit/README.md deleted file mode 100644 index 027b61c..0000000 --- a/skills/flight-finder/node_modules/fontkit/README.md +++ /dev/null @@ -1,266 +0,0 @@ -# fontkit - -Fontkit is an advanced font engine for Node and the browser, used by [PDFKit](https://github.com/devongovett/pdfkit). It supports many font formats, advanced glyph substitution and layout features, glyph path extraction, color emoji glyphs, font subsetting, and more. - -## Features - -* Supports TrueType (.ttf), OpenType (.otf), WOFF, WOFF2, TrueType Collection (.ttc), and Datafork TrueType (.dfont) font files -* Supports mapping characters to glyphs, including support for ligatures and other advanced substitutions (see below) -* Supports reading glyph metrics and laying out glyphs, including support for kerning and other advanced layout features (see below) -* Advanced OpenType features including glyph substitution (GSUB) and positioning (GPOS) -* Apple Advanced Typography (AAT) glyph substitution features (morx table) -* Support for getting glyph vector paths and converting them to SVG paths, or rendering them to a graphics context -* Supports TrueType (glyf) and PostScript (CFF) outlines -* Support for color glyphs (e.g. emoji), including Apple’s SBIX table, and Microsoft’s COLR table -* Support for AAT variation glyphs, allowing for nearly infinite design control over weight, width, and other axes. -* Font subsetting support - create a new font including only the specified glyphs - -## Installation - - npm install fontkit - -## Example - -```javascript -var fontkit = require('fontkit'); - -// open a font synchronously -var font = fontkit.openSync('font.ttf'); - -// layout a string, using default shaping features. -// returns a GlyphRun, describing glyphs and positions. -var run = font.layout('hello world!'); - -// get an SVG path for a glyph -var svg = run.glyphs[0].path.toSVG(); - -// create a font subset -var subset = font.createSubset(); -run.glyphs.forEach(function(glyph) { - subset.includeGlyph(glyph); -}); - -let buffer = subset.encode(); -``` - -## API - -### `fontkit.open(filename, postscriptName = null)` - -Opens a font file asynchronously, and returns a `Promise` with a font object. For collection fonts (such as TrueType collection files), you can pass a `postscriptName` to get that font out of the collection instead of a collection object. - -### `fontkit.openSync(filename, postscriptName = null)` - -Opens a font file synchronously, and returns a font object. For collection fonts (such as TrueType collection files), you can pass a `postscriptName` to get that font out of the collection instead of a collection object. - -### `fontkit.create(buffer, postscriptName = null)` - -Returns a font object for the given buffer. For collection fonts (such as TrueType collection files), you can pass a `postscriptName` to get that font out of the collection instead of a collection object. - -## Font objects - -There are several different types of font objects that are returned by fontkit depending on the font format. They all inherit from the `TTFFont` class and have the same public API, described below. - -### Metadata properties - -The following properties are strings (or null if the font does not contain strings for them) describing the font, as specified by the font creator. - -* `postscriptName` -* `fullName` -* `familyName` -* `subfamilyName` -* `copyright` -* `version` - -### Metrics - -The following properties describe the general metrics of the font. See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-3.html) for a good overview of how all of these properties relate to one another. - -* `unitsPerEm` - the size of the font’s internal coordinate grid -* `ascent` - the font’s [ascender](http://en.wikipedia.org/wiki/Ascender_(typography)) -* `descent` - the font’s [descender](http://en.wikipedia.org/wiki/Descender) -* `lineGap` - the amount of space that should be included between lines -* `underlinePosition` - the offset from the normal underline position that should be used -* `underlineThickness` - the weight of the underline that should be used -* `italicAngle` - if this is an italic font, the angle the cursor should be drawn at to match the font design -* `capHeight` - the height of capital letters above the baseline. See [here](http://en.wikipedia.org/wiki/Cap_height) for more details. -* `xHeight`- the height of lower case letters. See [here](http://en.wikipedia.org/wiki/X-height) for more details. -* `bbox` - the font’s bounding box, i.e. the box that encloses all glyphs in the font - -### Other properties - -* `numGlyphs` - the number of glyphs in the font -* `characterSet` - an array of all of the unicode code points supported by the font -* `availableFeatures` - an array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) (or mapped AAT tags) supported by the font (see below for a description of this) - -### Character to glyph mapping - -Fontkit includes several methods for character to glyph mapping, including support for advanced OpenType and AAT substitutions. - -#### `font.glyphForCodePoint(codePoint)` - -Maps a single unicode code point (number) to a Glyph object. Does not perform any advanced substitutions (there is no context to do so). - -#### `font.hasGlyphForCodePoint(codePoint)` - -Returns whether there is glyph in the font for the given unicode code point. - -#### `font.glyphsForString(string)` - -This method returns an array of Glyph objects for the given string. This is only a one-to-one mapping from characters -to glyphs. For most uses, you should use `font.layout` (described below), which provides a much more advanced mapping -supporting AAT and OpenType shaping. - -### Glyph metrics and layout - -Fontkit includes several methods for accessing glyph metrics and performing layout, including support for kerning and other advanced OpenType positioning adjustments. - -#### `font.widthOfGlyph(glyph_id)` - -Returns the advance width (described above) for a single glyph id. - -#### `font.layout(string, features = [] | {})` - -This method returns a `GlyphRun` object, which includes an array of `Glyph`s and `GlyphPosition`s for the given string. -`Glyph` objects are described below. `GlyphPosition` objects include 4 properties: `xAdvance`, `yAdvance`, `xOffset`, -and `yOffset`. - -The `features` parameter is either an array of [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) to be applied -in addition to the default set, or an object mapping OpenType features to a boolean enabling or disabling each. If this is an AAT font, the OpenType feature tags are mapped to AAT features. - -### Variation fonts - -Fontkit has support for AAT variation fonts, where glyphs can adjust their shape according to user defined settings along -various axes including weight, width, and slant. Font designers specify the minimum, default, and maximum values for each -axis they support, and allow the user fine grained control over the rendered text. - -#### `font.variationAxes` - -Returns an object describing the available variation axes. Keys are 4 letter axis tags, and values include `name`, -`min`, `default`, and `max` properties for the axis. - -#### `font.namedVariations` - -The font designer may have picked out some variations that they think look particularly good, for example a light, regular, -and bold weight which would traditionally be separate fonts. This property returns an object describing these named variation -instances that the designer has specified. Keys are variation names, and values are objects with axis settings. - -#### `font.getVariation(variation)` - -Returns a new font object representing this variation, from which you can get glyphs and perform layout as normal. -The `variation` parameter can either be a variation settings object or a string variation name. Variation settings objects -have axis names as keys, and numbers as values (should be in the range specified by `font.variationAxes`). - -### Other methods - -#### `font.getGlyph(glyph_id, codePoints = [])` - -Returns a glyph object for the given glyph id. You can pass the array of code points this glyph represents for your use later, and it will be stored in the glyph object. - -#### `font.createSubset()` - -Returns a Subset object for this font, described below. - -## Font Collection objects - -For font collection files that contain multiple fonts in a single file, such as TrueType Collection (.ttc) and Datafork TrueType (.dfont) files, a font collection object can be returned by Fontkit. - -### `collection.getFont(postscriptName)` - -Gets a font from the collection by its postscript name. Returns a Font object, described above. - -### `collection.fonts` - -This property is a lazily-loaded array of all of the fonts in the collection. - -## Glyph objects - -Glyph objects represent a glyph in the font. They have various properties for accessing metrics and the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context. - -You do not create glyph objects directly. They are created by various methods on the font object, described above. There are several subclasses of the base `Glyph` class internally that may be returned depending on the font format, but they all include the following API. - -### Properties - -* `id` - the glyph id in the font -* `name` - the glyph name in the font -* `codePoints` - an array of unicode code points that are represented by this glyph. There can be multiple code points in the case of ligatures and other glyphs that represent multiple visual characters. -* `path` - a vector Path object representing the glyph -* `bbox` - the glyph’s bounding box, i.e. the rectangle that encloses the glyph outline as tightly as possible. -* `cbox` - the glyph’s control box. This is often the same as the bounding box, but is faster to compute. Because of the way bezier curves are defined, some of the control points can be outside of the bounding box. Where `bbox` takes this into account, `cbox` does not. Thus, `cbox` is less accurate, but faster to compute. See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) for a more detailed description. -* `advanceWidth` - the glyph’s advance width. - -### `glyph.render(ctx, size)` - -Renders the glyph to the given graphics context, at the specified font size. - -### Color glyphs (e.g. emoji) - -Fontkit has support for several different color emoji font formats. Currently, these include Apple’s SBIX table (as used by the “Apple Color Emoji” font), and Microsoft’s COLR table (supported by Windows 8.1). [Here](http://blog.symbolset.com/multicolor-fonts) is an overview of the various color font formats out there. - -#### `glyph.getImageForSize(size)` - -For SBIX glyphs, which are bitmap based, this returns an object containing some properties about the image, along with the image data itself (usually PNG). - -#### `glyph.layers` - -For COLR glyphs, which are vector based, this returns an array of objects representing the glyphs and colors for each layer in render order. - -## Path objects - -Path objects are returned by glyphs and represent the actual vector outlines for each glyph in the font. Paths can be converted to SVG path data strings, or to functions that can be applied to render the path to a graphics context. - -### `path.moveTo(x, y)` - -Moves the virtual pen to the given x, y coordinates. - -### `path.lineTo(x, y)` - -Adds a line to the path from the current point to the given x, y coordinates. - -### `path.quadraticCurveTo(cpx, cpy, x, y)` - -Adds a quadratic curve to the path from the current point to the given x, y coordinates using cpx, cpy as a control point. - -### `path.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)` - -Adds a bezier curve to the path from the current point to the given x, y coordinates using cp1x, cp1y and cp2x, cp2y as control points. - -### `path.closePath()` - -Closes the current sub-path by drawing a straight line back to the starting point. - -### `path.toFunction()` - -Compiles the path to a JavaScript function that can be applied with a graphics context in order to render the path. - -### `path.toSVG()` - -Converts the path to an SVG path data string. - -### `path.bbox` - -This property represents the path’s bounding box, i.e. the smallest rectangle that contains the entire path shape. This is the exact bounding box, taking into account control points that may be outside the visible shape. - -### `path.cbox` - -This property represents the path’s control box. It is like the bounding box, but it includes all points of the path, including control points of bezier segments. It is much faster to compute than the real bounding box, but less accurate if there are control points outside of the visible shape. - -## Subsets - -Fontkit can perform font subsetting, i.e. the process of creating a new font from an existing font where only the specified glyphs are included. This is useful to reduce the size of large fonts, such as in PDF generation or for web use. - -Currently, subsets produce minimal fonts designed for PDF embedding that may not work as standalone files. They have no cmap tables and other essential tables for standalone use. This limitation will be removed in the future. - -You create a Subset object by calling `font.createSubset()`, described above. The API on Subset objects is as follows. - -### `subset.includeGlyph(glyph)` - -Includes the given glyph object or glyph ID in the subset. - -### `subset.encode()` - -Returns a `Uint8Array` containing the encoded font file. - -## License - -MIT diff --git a/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs b/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs deleted file mode 100644 index 4d0a389..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs +++ /dev/null @@ -1,13316 +0,0 @@ -import {DecodeStream as $6uUbQ$DecodeStream, Struct as $6uUbQ$Struct, String as $6uUbQ$String, uint32 as $6uUbQ$uint32, Pointer as $6uUbQ$Pointer, uint16 as $6uUbQ$uint16, Array as $6uUbQ$Array, VoidPointer as $6uUbQ$VoidPointer, int16 as $6uUbQ$int16, uint24 as $6uUbQ$uint24, uint8 as $6uUbQ$uint8, VersionedStruct as $6uUbQ$VersionedStruct, LazyArray as $6uUbQ$LazyArray, Reserved as $6uUbQ$Reserved, int32 as $6uUbQ$int32, Bitfield as $6uUbQ$Bitfield, fixed32 as $6uUbQ$fixed32, Buffer as $6uUbQ$Buffer, Number as $6uUbQ$Number, resolveLength as $6uUbQ$resolveLength, fixed16 as $6uUbQ$fixed16, PropertyDescriptor as $6uUbQ$PropertyDescriptor, Fixed as $6uUbQ$Fixed, int8 as $6uUbQ$int8, Optional as $6uUbQ$Optional, EncodeStream as $6uUbQ$EncodeStream} from "restructure"; -import {_ as $6uUbQ$_} from "@swc/helpers/_/_define_property"; -import {_ as $6uUbQ$_1} from "@swc/helpers/_/_ts_decorate"; -import $6uUbQ$fastdeepequal from "fast-deep-equal"; -import {getCombiningClass as $6uUbQ$getCombiningClass, getScript as $6uUbQ$getScript, isDigit as $6uUbQ$isDigit, getCategory as $6uUbQ$getCategory, isMark as $6uUbQ$isMark} from "unicode-properties"; -import $6uUbQ$unicodetrie from "unicode-trie"; -import $6uUbQ$dfa from "dfa"; -import $6uUbQ$clone from "clone"; -import $6uUbQ$tinyinflate from "tiny-inflate"; -import $6uUbQ$brotlidecompressjs from "brotli/decompress.js"; - - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -var $d636bc798e7178db$exports = {}; - -$parcel$export($d636bc798e7178db$exports, "logErrors", () => $d636bc798e7178db$export$bd5c5d8b8dcafd78); -$parcel$export($d636bc798e7178db$exports, "registerFormat", () => $d636bc798e7178db$export$36b2f24e97d43be); -$parcel$export($d636bc798e7178db$exports, "create", () => $d636bc798e7178db$export$185802fd694ee1f5); -$parcel$export($d636bc798e7178db$exports, "defaultLanguage", () => $d636bc798e7178db$export$42940898df819940); -$parcel$export($d636bc798e7178db$exports, "setDefaultLanguage", () => $d636bc798e7178db$export$5157e7780d44cc36); - -let $d636bc798e7178db$export$bd5c5d8b8dcafd78 = false; -let $d636bc798e7178db$var$formats = []; -function $d636bc798e7178db$export$36b2f24e97d43be(format) { - $d636bc798e7178db$var$formats.push(format); -} -function $d636bc798e7178db$export$185802fd694ee1f5(buffer, postscriptName) { - for(let i = 0; i < $d636bc798e7178db$var$formats.length; i++){ - let format = $d636bc798e7178db$var$formats[i]; - if (format.probe(buffer)) { - let font = new format(new (0, $6uUbQ$DecodeStream)(buffer)); - if (postscriptName) return font.getFont(postscriptName); - return font; - } - } - throw new Error('Unknown font format'); -} -let $d636bc798e7178db$export$42940898df819940 = 'en'; -function $d636bc798e7178db$export$5157e7780d44cc36(lang = 'en') { - $d636bc798e7178db$export$42940898df819940 = lang; -} - - - - - -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ function $e71565f2ce09cb6b$export$69a3209f1a06c04d(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { - value: value - }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - return { - get () { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) return cache.get(key); - let result = fn.apply(this, args); - cache.set(key, result); - return result; - } - Object.defineProperty(this, key, { - value: memoized - }); - return memoized; - } - }; - } -} - - - - - -let $26a62205ad06574e$var$SubHeader = new $6uUbQ$Struct({ - firstCode: $6uUbQ$uint16, - entryCount: $6uUbQ$uint16, - idDelta: $6uUbQ$int16, - idRangeOffset: $6uUbQ$uint16 -}); -let $26a62205ad06574e$var$CmapGroup = new $6uUbQ$Struct({ - startCharCode: $6uUbQ$uint32, - endCharCode: $6uUbQ$uint32, - glyphID: $6uUbQ$uint32 -}); -let $26a62205ad06574e$var$UnicodeValueRange = new $6uUbQ$Struct({ - startUnicodeValue: $6uUbQ$uint24, - additionalCount: $6uUbQ$uint8 -}); -let $26a62205ad06574e$var$UVSMapping = new $6uUbQ$Struct({ - unicodeValue: $6uUbQ$uint24, - glyphID: $6uUbQ$uint16 -}); -let $26a62205ad06574e$var$DefaultUVS = new $6uUbQ$Array($26a62205ad06574e$var$UnicodeValueRange, $6uUbQ$uint32); -let $26a62205ad06574e$var$NonDefaultUVS = new $6uUbQ$Array($26a62205ad06574e$var$UVSMapping, $6uUbQ$uint32); -let $26a62205ad06574e$var$VarSelectorRecord = new $6uUbQ$Struct({ - varSelector: $6uUbQ$uint24, - defaultUVS: new $6uUbQ$Pointer($6uUbQ$uint32, $26a62205ad06574e$var$DefaultUVS, { - type: 'parent' - }), - nonDefaultUVS: new $6uUbQ$Pointer($6uUbQ$uint32, $26a62205ad06574e$var$NonDefaultUVS, { - type: 'parent' - }) -}); -let $26a62205ad06574e$var$CmapSubtable = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 0: { - length: $6uUbQ$uint16, - language: $6uUbQ$uint16, - codeMap: new $6uUbQ$LazyArray($6uUbQ$uint8, 256) - }, - 2: { - length: $6uUbQ$uint16, - language: $6uUbQ$uint16, - subHeaderKeys: new $6uUbQ$Array($6uUbQ$uint16, 256), - subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new $6uUbQ$LazyArray($26a62205ad06574e$var$SubHeader, 'subHeaderCount'), - glyphIndexArray: new $6uUbQ$LazyArray($6uUbQ$uint16, 'subHeaderCount') - }, - 4: { - length: $6uUbQ$uint16, - language: $6uUbQ$uint16, - segCountX2: $6uUbQ$uint16, - segCount: (t)=>t.segCountX2 >> 1, - searchRange: $6uUbQ$uint16, - entrySelector: $6uUbQ$uint16, - rangeShift: $6uUbQ$uint16, - endCode: new $6uUbQ$LazyArray($6uUbQ$uint16, 'segCount'), - reservedPad: new $6uUbQ$Reserved($6uUbQ$uint16), - startCode: new $6uUbQ$LazyArray($6uUbQ$uint16, 'segCount'), - idDelta: new $6uUbQ$LazyArray($6uUbQ$int16, 'segCount'), - idRangeOffset: new $6uUbQ$LazyArray($6uUbQ$uint16, 'segCount'), - glyphIndexArray: new $6uUbQ$LazyArray($6uUbQ$uint16, (t)=>(t.length - t._currentOffset) / 2) - }, - 6: { - length: $6uUbQ$uint16, - language: $6uUbQ$uint16, - firstCode: $6uUbQ$uint16, - entryCount: $6uUbQ$uint16, - glyphIndices: new $6uUbQ$LazyArray($6uUbQ$uint16, 'entryCount') - }, - 8: { - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - length: $6uUbQ$uint32, - language: $6uUbQ$uint16, - is32: new $6uUbQ$LazyArray($6uUbQ$uint8, 8192), - nGroups: $6uUbQ$uint32, - groups: new $6uUbQ$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 10: { - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - length: $6uUbQ$uint32, - language: $6uUbQ$uint32, - firstCode: $6uUbQ$uint32, - entryCount: $6uUbQ$uint32, - glyphIndices: new $6uUbQ$LazyArray($6uUbQ$uint16, 'numChars') - }, - 12: { - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - length: $6uUbQ$uint32, - language: $6uUbQ$uint32, - nGroups: $6uUbQ$uint32, - groups: new $6uUbQ$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 13: { - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - length: $6uUbQ$uint32, - language: $6uUbQ$uint32, - nGroups: $6uUbQ$uint32, - groups: new $6uUbQ$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 14: { - length: $6uUbQ$uint32, - numRecords: $6uUbQ$uint32, - varSelectors: new $6uUbQ$LazyArray($26a62205ad06574e$var$VarSelectorRecord, 'numRecords') - } -}); -let $26a62205ad06574e$var$CmapEntry = new $6uUbQ$Struct({ - platformID: $6uUbQ$uint16, - encodingID: $6uUbQ$uint16, - table: new $6uUbQ$Pointer($6uUbQ$uint32, $26a62205ad06574e$var$CmapSubtable, { - type: 'parent', - lazy: true - }) -}); -var // character to glyph mapping -$26a62205ad06574e$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numSubtables: $6uUbQ$uint16, - tables: new $6uUbQ$Array($26a62205ad06574e$var$CmapEntry, 'numSubtables') -}); - - - -var // font header -$f2612a29f92ac062$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$int32, - revision: $6uUbQ$int32, - checkSumAdjustment: $6uUbQ$uint32, - magicNumber: $6uUbQ$uint32, - flags: $6uUbQ$uint16, - unitsPerEm: $6uUbQ$uint16, - created: new $6uUbQ$Array($6uUbQ$int32, 2), - modified: new $6uUbQ$Array($6uUbQ$int32, 2), - xMin: $6uUbQ$int16, - yMin: $6uUbQ$int16, - xMax: $6uUbQ$int16, - yMax: $6uUbQ$int16, - macStyle: new $6uUbQ$Bitfield($6uUbQ$uint16, [ - 'bold', - 'italic', - 'underline', - 'outline', - 'shadow', - 'condensed', - 'extended' - ]), - lowestRecPPEM: $6uUbQ$uint16, - fontDirectionHint: $6uUbQ$int16, - indexToLocFormat: $6uUbQ$int16, - glyphDataFormat: $6uUbQ$int16 // 0 for current format -}); - - - -var // horizontal header -$2c179dd593583073$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$int32, - ascent: $6uUbQ$int16, - descent: $6uUbQ$int16, - lineGap: $6uUbQ$int16, - advanceWidthMax: $6uUbQ$uint16, - minLeftSideBearing: $6uUbQ$int16, - minRightSideBearing: $6uUbQ$int16, - xMaxExtent: $6uUbQ$int16, - caretSlopeRise: $6uUbQ$int16, - caretSlopeRun: $6uUbQ$int16, - caretOffset: $6uUbQ$int16, - reserved: new $6uUbQ$Reserved($6uUbQ$int16, 4), - metricDataFormat: $6uUbQ$int16, - numberOfMetrics: $6uUbQ$uint16 // Number of advance widths in 'hmtx' table -}); - - - -let $bdc9060542264b85$var$HmtxEntry = new $6uUbQ$Struct({ - advance: $6uUbQ$uint16, - bearing: $6uUbQ$int16 -}); -var $bdc9060542264b85$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - metrics: new $6uUbQ$LazyArray($bdc9060542264b85$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics), - bearings: new $6uUbQ$LazyArray($6uUbQ$int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); - - - -var // maxiumum profile -$dbf51cb3d3fe409d$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$int32, - numGlyphs: $6uUbQ$uint16, - maxPoints: $6uUbQ$uint16, - maxContours: $6uUbQ$uint16, - maxComponentPoints: $6uUbQ$uint16, - maxComponentContours: $6uUbQ$uint16, - maxZones: $6uUbQ$uint16, - maxTwilightPoints: $6uUbQ$uint16, - maxStorage: $6uUbQ$uint16, - maxFunctionDefs: $6uUbQ$uint16, - maxInstructionDefs: $6uUbQ$uint16, - maxStackElements: $6uUbQ$uint16, - maxSizeOfInstructions: $6uUbQ$uint16, - maxComponentElements: $6uUbQ$uint16, - maxComponentDepth: $6uUbQ$uint16 // Maximum levels of recursion; 1 for simple components -}); - - - -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ function $e449ad78d50845fe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { - if (platformID === 1 && $e449ad78d50845fe$export$479e671907f486d1[languageID]) return $e449ad78d50845fe$export$479e671907f486d1[languageID]; - return $e449ad78d50845fe$export$6fef87b7618bdf0b[platformID][encodingID]; -} -const $e449ad78d50845fe$var$SINGLE_BYTE_ENCODINGS = new Set([ - 'x-mac-roman', - 'x-mac-cyrillic', - 'iso-8859-6', - 'iso-8859-8' -]); -const $e449ad78d50845fe$var$MAC_ENCODINGS = { - 'x-mac-croatian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017D\xd8\u221E\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220F\u0161\u222B\xaa\xba\u03A9\u017E\xf8\xbf\xa1\xac\u221A\u0192\u2248\u0106\xab\u010C\u2026 \xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\uF8FF\xa9\u2044\u20AC\u2039\u203A\xc6\xbb\u2013\xb7\u201A\u201E\u2030\xc2\u0107\xc1\u010D\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u03C0\xcb\u02DA\xb8\xca\xe6\u02C7", - 'x-mac-gaelic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u1E02\xb1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xe6\xf8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xff\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xb7\u1EF2\u1EF3\u204A\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\u2663\xd2\xda\xdb\xd9\u0131\xdd\xfd\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83", - 'x-mac-greek': "\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\u20AC\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xdf\xae\xa9\u03A3\u03AA\xa7\u2260\xb0\xb7\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xac\u039F\u03A1\u2248\u03A4\xab\xbb\u2026 \u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xf7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xad", - 'x-mac-icelandic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\xd0\xf0\xde\xfe\xfd\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-inuit': "\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xb0\u14A1\u14A5\u14A6\u2022\xb6\u14A7\xae\xa9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026 \u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142", - 'x-mac-ce': "\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010C\xe4\u010D\u0106\u0107\xe9\u0179\u017A\u010E\xed\u010F\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011A\u011B\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xac\u221A\u0144\u0147\u2206\xab\xbb\u2026 \u0148\u0150\xd5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xc1\u0164\u0165\xcd\u017D\u017E\u016A\xd3\xd4\u016B\u016E\xda\u016F\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017B\u0141\u017C\u0122\u02C7", - 'x-mac-romanian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u0218\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\u0103\u0219\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-turkish': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\uF8A0\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7" -}; -const $e449ad78d50845fe$var$encodingCache = new Map(); -function $e449ad78d50845fe$export$1dceb3c14ed68bee(encoding) { - let cached = $e449ad78d50845fe$var$encodingCache.get(encoding); - if (cached) return cached; - // These encodings aren't supported by TextDecoder. - let mapping = $e449ad78d50845fe$var$MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for(let i = 0; i < mapping.length; i++)res.set(mapping.charCodeAt(i), 0x80 + i); - $e449ad78d50845fe$var$encodingCache.set(encoding, res); - return res; - } - // Only single byte encodings can be mapped 1:1. - if ($e449ad78d50845fe$var$SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for(let i = 0; i < 0x80; i++)mapping[i] = 0x80 + i; - let res = new Map(); - let s = decoder.decode(mapping); - for(let i = 0; i < 0x80; i++)res.set(s.charCodeAt(i), 0x80 + i); - $e449ad78d50845fe$var$encodingCache.set(encoding, res); - return res; - } -} -const $e449ad78d50845fe$export$6fef87b7618bdf0b = [ - // unicode - [ - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be' - ], - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - [ - 'x-mac-roman', - 'shift-jis', - 'big5', - 'euc-kr', - 'iso-8859-6', - 'iso-8859-8', - 'x-mac-greek', - 'x-mac-cyrillic', - 'x-mac-symbol', - 'x-mac-devanagari', - 'x-mac-gurmukhi', - 'x-mac-gujarati', - 'Oriya', - 'Bengali', - 'Tamil', - 'Telugu', - 'Kannada', - 'Malayalam', - 'Sinhalese', - 'Burmese', - 'Khmer', - 'iso-8859-11', - 'Laotian', - 'Georgian', - 'Armenian', - 'gbk', - 'Tibetan', - 'Mongolian', - 'Geez', - 'x-mac-ce', - 'Vietnamese', - 'Sindhi' - ], - // ISO (deprecated) - [ - 'ascii', - null, - 'iso-8859-1' - ], - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - [ - 'symbol', - 'utf-16be', - 'shift-jis', - 'gb18030', - 'big5', - 'euc-kr', - 'johab', - null, - null, - null, - 'utf-16be' - ] -]; -const $e449ad78d50845fe$export$479e671907f486d1 = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; -const $e449ad78d50845fe$export$2092376fd002e13 = [ - // unicode - [], - { - 0: 'en', - 30: 'fo', - 60: 'ks', - 90: 'rw', - 1: 'fr', - 31: 'fa', - 61: 'ku', - 91: 'rn', - 2: 'de', - 32: 'ru', - 62: 'sd', - 92: 'ny', - 3: 'it', - 33: 'zh', - 63: 'bo', - 93: 'mg', - 4: 'nl', - 34: 'nl-BE', - 64: 'ne', - 94: 'eo', - 5: 'sv', - 35: 'ga', - 65: 'sa', - 128: 'cy', - 6: 'es', - 36: 'sq', - 66: 'mr', - 129: 'eu', - 7: 'da', - 37: 'ro', - 67: 'bn', - 130: 'ca', - 8: 'pt', - 38: 'cz', - 68: 'as', - 131: 'la', - 9: 'no', - 39: 'sk', - 69: 'gu', - 132: 'qu', - 10: 'he', - 40: 'si', - 70: 'pa', - 133: 'gn', - 11: 'ja', - 41: 'yi', - 71: 'or', - 134: 'ay', - 12: 'ar', - 42: 'sr', - 72: 'ml', - 135: 'tt', - 13: 'fi', - 43: 'mk', - 73: 'kn', - 136: 'ug', - 14: 'el', - 44: 'bg', - 74: 'ta', - 137: 'dz', - 15: 'is', - 45: 'uk', - 75: 'te', - 138: 'jv', - 16: 'mt', - 46: 'be', - 76: 'si', - 139: 'su', - 17: 'tr', - 47: 'uz', - 77: 'my', - 140: 'gl', - 18: 'hr', - 48: 'kk', - 78: 'km', - 141: 'af', - 19: 'zh-Hant', - 49: 'az-Cyrl', - 79: 'lo', - 142: 'br', - 20: 'ur', - 50: 'az-Arab', - 80: 'vi', - 143: 'iu', - 21: 'hi', - 51: 'hy', - 81: 'id', - 144: 'gd', - 22: 'th', - 52: 'ka', - 82: 'tl', - 145: 'gv', - 23: 'ko', - 53: 'mo', - 83: 'ms', - 146: 'ga', - 24: 'lt', - 54: 'ky', - 84: 'ms-Arab', - 147: 'to', - 25: 'pl', - 55: 'tg', - 85: 'am', - 148: 'el-polyton', - 26: 'hu', - 56: 'tk', - 86: 'ti', - 149: 'kl', - 27: 'es', - 57: 'mn-CN', - 87: 'om', - 150: 'az', - 28: 'lv', - 58: 'mn', - 88: 'so', - 151: 'nn', - 29: 'se', - 59: 'ps', - 89: 'sw' - }, - // ISO (deprecated) - [], - { - 0x0436: 'af', - 0x4009: 'en-IN', - 0x0487: 'rw', - 0x0432: 'tn', - 0x041C: 'sq', - 0x1809: 'en-IE', - 0x0441: 'sw', - 0x045B: 'si', - 0x0484: 'gsw', - 0x2009: 'en-JM', - 0x0457: 'kok', - 0x041B: 'sk', - 0x045E: 'am', - 0x4409: 'en-MY', - 0x0412: 'ko', - 0x0424: 'sl', - 0x1401: 'ar-DZ', - 0x1409: 'en-NZ', - 0x0440: 'ky', - 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', - 0x3409: 'en-PH', - 0x0454: 'lo', - 0x400A: 'es-BO', - 0x0C01: 'ar', - 0x4809: 'en-SG', - 0x0426: 'lv', - 0x340A: 'es-CL', - 0x0801: 'ar-IQ', - 0x1C09: 'en-ZA', - 0x0427: 'lt', - 0x240A: 'es-CO', - 0x2C01: 'ar-JO', - 0x2C09: 'en-TT', - 0x082E: 'dsb', - 0x140A: 'es-CR', - 0x3401: 'ar-KW', - 0x0809: 'en-GB', - 0x046E: 'lb', - 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', - 0x0409: 'en', - 0x042F: 'mk', - 0x300A: 'es-EC', - 0x1001: 'ar-LY', - 0x3009: 'en-ZW', - 0x083E: 'ms-BN', - 0x440A: 'es-SV', - 0x1801: 'ary', - 0x0425: 'et', - 0x043E: 'ms', - 0x100A: 'es-GT', - 0x2001: 'ar-OM', - 0x0438: 'fo', - 0x044C: 'ml', - 0x480A: 'es-HN', - 0x4001: 'ar-QA', - 0x0464: 'fil', - 0x043A: 'mt', - 0x080A: 'es-MX', - 0x0401: 'ar-SA', - 0x040B: 'fi', - 0x0481: 'mi', - 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', - 0x080C: 'fr-BE', - 0x047A: 'arn', - 0x180A: 'es-PA', - 0x1C01: 'aeb', - 0x0C0C: 'fr-CA', - 0x044E: 'mr', - 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', - 0x040C: 'fr', - 0x047C: 'moh', - 0x280A: 'es-PE', - 0x2401: 'ar-YE', - 0x140C: 'fr-LU', - 0x0450: 'mn', - 0x500A: 'es-PR', - 0x042B: 'hy', - 0x180C: 'fr-MC', - 0x0850: 'mn-CN', - 0x0C0A: 'es', - 0x044D: 'as', - 0x100C: 'fr-CH', - 0x0461: 'ne', - 0x040A: 'es', - 0x082C: 'az-Cyrl', - 0x0462: 'fy', - 0x0414: 'nb', - 0x540A: 'es-US', - 0x042C: 'az', - 0x0456: 'gl', - 0x0814: 'nn', - 0x380A: 'es-UY', - 0x046D: 'ba', - 0x0437: 'ka', - 0x0482: 'oc', - 0x200A: 'es-VE', - 0x042D: 'eu', - 0x0C07: 'de-AT', - 0x0448: 'or', - 0x081D: 'sv-FI', - 0x0423: 'be', - 0x0407: 'de', - 0x0463: 'ps', - 0x041D: 'sv', - 0x0845: 'bn', - 0x1407: 'de-LI', - 0x0415: 'pl', - 0x045A: 'syr', - 0x0445: 'bn-IN', - 0x1007: 'de-LU', - 0x0416: 'pt', - 0x0428: 'tg', - 0x201A: 'bs-Cyrl', - 0x0807: 'de-CH', - 0x0816: 'pt-PT', - 0x085F: 'tzm', - 0x141A: 'bs', - 0x0408: 'el', - 0x0446: 'pa', - 0x0449: 'ta', - 0x047E: 'br', - 0x046F: 'kl', - 0x046B: 'qu-BO', - 0x0444: 'tt', - 0x0402: 'bg', - 0x0447: 'gu', - 0x086B: 'qu-EC', - 0x044A: 'te', - 0x0403: 'ca', - 0x0468: 'ha', - 0x0C6B: 'qu', - 0x041E: 'th', - 0x0C04: 'zh-HK', - 0x040D: 'he', - 0x0418: 'ro', - 0x0451: 'bo', - 0x1404: 'zh-MO', - 0x0439: 'hi', - 0x0417: 'rm', - 0x041F: 'tr', - 0x0804: 'zh', - 0x040E: 'hu', - 0x0419: 'ru', - 0x0442: 'tk', - 0x1004: 'zh-SG', - 0x040F: 'is', - 0x243B: 'smn', - 0x0480: 'ug', - 0x0404: 'zh-TW', - 0x0470: 'ig', - 0x103B: 'smj-NO', - 0x0422: 'uk', - 0x0483: 'co', - 0x0421: 'id', - 0x143B: 'smj', - 0x042E: 'hsb', - 0x041A: 'hr', - 0x045D: 'iu', - 0x0C3B: 'se-FI', - 0x0420: 'ur', - 0x101A: 'hr-BA', - 0x085D: 'iu-Latn', - 0x043B: 'se', - 0x0843: 'uz-Cyrl', - 0x0405: 'cs', - 0x083C: 'ga', - 0x083B: 'se-SE', - 0x0443: 'uz', - 0x0406: 'da', - 0x0434: 'xh', - 0x203B: 'sms', - 0x042A: 'vi', - 0x048C: 'prs', - 0x0435: 'zu', - 0x183B: 'sma-NO', - 0x0452: 'cy', - 0x0465: 'dv', - 0x0410: 'it', - 0x1C3B: 'sms', - 0x0488: 'wo', - 0x0813: 'nl-BE', - 0x0810: 'it-CH', - 0x044F: 'sa', - 0x0485: 'sah', - 0x0413: 'nl', - 0x0411: 'ja', - 0x1C1A: 'sr-Cyrl-BA', - 0x0478: 'ii', - 0x0C09: 'en-AU', - 0x044B: 'kn', - 0x0C1A: 'sr', - 0x046A: 'yo', - 0x2809: 'en-BZ', - 0x043F: 'kk', - 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', - 0x0453: 'km', - 0x081A: 'sr-Latn', - 0x2409: 'en-029', - 0x0486: 'quc', - 0x046C: 'nso' - } -]; - - -let $2bcf221753ec8e32$var$NameRecord = new $6uUbQ$Struct({ - platformID: $6uUbQ$uint16, - encodingID: $6uUbQ$uint16, - languageID: $6uUbQ$uint16, - nameID: $6uUbQ$uint16, - length: $6uUbQ$uint16, - string: new $6uUbQ$Pointer($6uUbQ$uint16, new $6uUbQ$String('length', (t)=>(0, $e449ad78d50845fe$export$badc544e0651b6b1)(t.platformID, t.encodingID, t.languageID)), { - type: 'parent', - relativeTo: (ctx)=>ctx.parent.stringOffset, - allowNull: false - }) -}); -let $2bcf221753ec8e32$var$LangTagRecord = new $6uUbQ$Struct({ - length: $6uUbQ$uint16, - tag: new $6uUbQ$Pointer($6uUbQ$uint16, new $6uUbQ$String('length', 'utf16be'), { - type: 'parent', - relativeTo: (ctx)=>ctx.stringOffset - }) -}); -var $2bcf221753ec8e32$var$NameTable = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 0: { - count: $6uUbQ$uint16, - stringOffset: $6uUbQ$uint16, - records: new $6uUbQ$Array($2bcf221753ec8e32$var$NameRecord, 'count') - }, - 1: { - count: $6uUbQ$uint16, - stringOffset: $6uUbQ$uint16, - records: new $6uUbQ$Array($2bcf221753ec8e32$var$NameRecord, 'count'), - langTagCount: $6uUbQ$uint16, - langTags: new $6uUbQ$Array($2bcf221753ec8e32$var$LangTagRecord, 'langTagCount') - } -}); -var $2bcf221753ec8e32$export$2e2bcd8739ae039 = $2bcf221753ec8e32$var$NameTable; -const $2bcf221753ec8e32$var$NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; -$2bcf221753ec8e32$var$NameTable.process = function(stream) { - var records = {}; - for (let record of this.records){ - // find out what language this is for - let language = (0, $e449ad78d50845fe$export$2092376fd002e13)[record.platformID][record.languageID]; - if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; - if (language == null) language = record.platformID + '-' + record.languageID; - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : $2bcf221753ec8e32$var$NAMES[record.nameID] || record.nameID; - if (records[key] == null) records[key] = {}; - let obj = records[key]; - if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); - if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; - } - this.records = records; -}; -$2bcf221753ec8e32$var$NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - let records = []; - for(let key in this.records){ - let val = this.records[key]; - if (key === 'fontFeatures') continue; - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: $2bcf221753ec8e32$var$NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - if (key === 'postscriptName') records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: $2bcf221753ec8e32$var$NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - this.records = records; - this.count = records.length; - this.stringOffset = $2bcf221753ec8e32$var$NameTable.size(this, null, false); -}; - - - -var $84b272aa31b70606$var$OS2 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - header: { - xAvgCharWidth: $6uUbQ$int16, - usWeightClass: $6uUbQ$uint16, - usWidthClass: $6uUbQ$uint16, - fsType: new $6uUbQ$Bitfield($6uUbQ$uint16, [ - null, - 'noEmbedding', - 'viewOnly', - 'editable', - null, - null, - null, - null, - 'noSubsetting', - 'bitmapOnly' - ]), - ySubscriptXSize: $6uUbQ$int16, - ySubscriptYSize: $6uUbQ$int16, - ySubscriptXOffset: $6uUbQ$int16, - ySubscriptYOffset: $6uUbQ$int16, - ySuperscriptXSize: $6uUbQ$int16, - ySuperscriptYSize: $6uUbQ$int16, - ySuperscriptXOffset: $6uUbQ$int16, - ySuperscriptYOffset: $6uUbQ$int16, - yStrikeoutSize: $6uUbQ$int16, - yStrikeoutPosition: $6uUbQ$int16, - sFamilyClass: $6uUbQ$int16, - panose: new $6uUbQ$Array($6uUbQ$uint8, 10), - ulCharRange: new $6uUbQ$Array($6uUbQ$uint32, 4), - vendorID: new $6uUbQ$String(4), - fsSelection: new $6uUbQ$Bitfield($6uUbQ$uint16, [ - 'italic', - 'underscore', - 'negative', - 'outlined', - 'strikeout', - 'bold', - 'regular', - 'useTypoMetrics', - 'wws', - 'oblique' - ]), - usFirstCharIndex: $6uUbQ$uint16, - usLastCharIndex: $6uUbQ$uint16 // The maximum Unicode index in this font - }, - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - 1: { - typoAscender: $6uUbQ$int16, - typoDescender: $6uUbQ$int16, - typoLineGap: $6uUbQ$int16, - winAscent: $6uUbQ$uint16, - winDescent: $6uUbQ$uint16, - codePageRange: new $6uUbQ$Array($6uUbQ$uint32, 2) - }, - 2: { - // these should be common with version 1 somehow - typoAscender: $6uUbQ$int16, - typoDescender: $6uUbQ$int16, - typoLineGap: $6uUbQ$int16, - winAscent: $6uUbQ$uint16, - winDescent: $6uUbQ$uint16, - codePageRange: new $6uUbQ$Array($6uUbQ$uint32, 2), - xHeight: $6uUbQ$int16, - capHeight: $6uUbQ$int16, - defaultChar: $6uUbQ$uint16, - breakChar: $6uUbQ$uint16, - maxContent: $6uUbQ$uint16 - }, - 5: { - typoAscender: $6uUbQ$int16, - typoDescender: $6uUbQ$int16, - typoLineGap: $6uUbQ$int16, - winAscent: $6uUbQ$uint16, - winDescent: $6uUbQ$uint16, - codePageRange: new $6uUbQ$Array($6uUbQ$uint32, 2), - xHeight: $6uUbQ$int16, - capHeight: $6uUbQ$int16, - defaultChar: $6uUbQ$uint16, - breakChar: $6uUbQ$uint16, - maxContent: $6uUbQ$uint16, - usLowerOpticalPointSize: $6uUbQ$uint16, - usUpperOpticalPointSize: $6uUbQ$uint16 - } -}); -let $84b272aa31b70606$var$versions = $84b272aa31b70606$var$OS2.versions; -$84b272aa31b70606$var$versions[3] = $84b272aa31b70606$var$versions[4] = $84b272aa31b70606$var$versions[2]; -var $84b272aa31b70606$export$2e2bcd8739ae039 = $84b272aa31b70606$var$OS2; - - - -var // PostScript information -$32d9e2eb9565d93c$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$fixed32, { - header: { - italicAngle: $6uUbQ$fixed32, - underlinePosition: $6uUbQ$int16, - underlineThickness: $6uUbQ$int16, - isFixedPitch: $6uUbQ$uint32, - minMemType42: $6uUbQ$uint32, - maxMemType42: $6uUbQ$uint32, - minMemType1: $6uUbQ$uint32, - maxMemType1: $6uUbQ$uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - 1: {}, - 2: { - numberOfGlyphs: $6uUbQ$uint16, - glyphNameIndex: new $6uUbQ$Array($6uUbQ$uint16, 'numberOfGlyphs'), - names: new $6uUbQ$Array(new $6uUbQ$String($6uUbQ$uint8)) - }, - 2.5: { - numberOfGlyphs: $6uUbQ$uint16, - offsets: new $6uUbQ$Array($6uUbQ$uint8, 'numberOfGlyphs') - }, - 3: {}, - 4: { - map: new $6uUbQ$Array($6uUbQ$uint32, (t)=>t.parent.maxp.numGlyphs) - } -}); - - - -var // An array of predefined values accessible by instructions -$5202bd9d9ad8eaac$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - controlValues: new $6uUbQ$Array($6uUbQ$int16) -}); - - - -var // A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -$5c0f37ca5ffb1850$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - instructions: new $6uUbQ$Array($6uUbQ$uint8) -}); - - - -let $2b2b260902b1c57e$var$loca = new $6uUbQ$VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new $6uUbQ$Array($6uUbQ$uint16) - }, - 1: { - offsets: new $6uUbQ$Array($6uUbQ$uint32) - } -}); -$2b2b260902b1c57e$var$loca.process = function() { - if (this.version === 0 && !this._processed) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; - this._processed = true; - } -}; -$2b2b260902b1c57e$var$loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; - this._processed = false; - } -}; -var $2b2b260902b1c57e$export$2e2bcd8739ae039 = $2b2b260902b1c57e$var$loca; - - - -var // Set of instructions executed whenever the point size or font transformation change -$7afb878c7bea4f66$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - controlValueProgram: new $6uUbQ$Array($6uUbQ$uint8) -}); - - - -var // only used for encoding -$6c92b6371bce8bd9$export$2e2bcd8739ae039 = new $6uUbQ$Array(new $6uUbQ$Buffer); - - - - -class $43e9821ef3717eec$export$2e2bcd8739ae039 { - getCFFVersion(ctx) { - while(ctx && !ctx.hdrSize)ctx = ctx.parent; - return ctx ? ctx.version : -1; - } - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); - if (count === 0) return []; - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) offsetType = $6uUbQ$uint8; - else if (offSize === 2) offsetType = $6uUbQ$uint16; - else if (offSize === 3) offsetType = $6uUbQ$uint24; - else if (offSize === 4) offsetType = $6uUbQ$uint32; - else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - let ret = []; - let startPos = stream.pos + (count + 1) * offSize - 1; - let start = offsetType.decode(stream); - for(let i = 0; i < count; i++){ - let end = offsetType.decode(stream); - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else ret.push({ - offset: startPos + start, - length: end - start - }); - start = end; - } - stream.pos = startPos + start; - return ret; - } - size(arr, parent) { - let size = 2; - if (arr.length === 0) return size; - let type = this.type || new $6uUbQ$Buffer; - // find maximum offset to detminine offset type - let offset = 1; - for(let i = 0; i < arr.length; i++){ - let item = arr[i]; - offset += type.size(item, parent); - } - let offsetType; - if (offset <= 0xff) offsetType = $6uUbQ$uint8; - else if (offset <= 0xffff) offsetType = $6uUbQ$uint16; - else if (offset <= 0xffffff) offsetType = $6uUbQ$uint24; - else if (offset <= 0xffffffff) offsetType = $6uUbQ$uint32; - else throw new Error("Bad offset in CFFIndex"); - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - return size; - } - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) return; - let type = this.type || new $6uUbQ$Buffer; - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr){ - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - let offsetType; - if (offset <= 0xff) offsetType = $6uUbQ$uint8; - else if (offset <= 0xffff) offsetType = $6uUbQ$uint16; - else if (offset <= 0xffffff) offsetType = $6uUbQ$uint24; - else if (offset <= 0xffffffff) offsetType = $6uUbQ$uint32; - else throw new Error("Bad offset in CFFIndex"); - // write offset size - stream.writeUInt8(offsetType.size()); - // write elements - offset = 1; - offsetType.encode(stream, offset); - for (let size of sizes){ - offset += size; - offsetType.encode(stream, offset); - } - for (let item of arr)type.encode(stream, item, parent); - return; - } - constructor(type){ - this.type = type; - } -} - - - - - -const $c2d28e92708f99da$var$FLOAT_EOF = 0xf; -const $c2d28e92708f99da$var$FLOAT_LOOKUP = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '.', - 'E', - 'E-', - null, - '-' -]; -const $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; -class $c2d28e92708f99da$export$2e2bcd8739ae039 { - static decode(stream, value) { - if (32 <= value && value <= 246) return value - 139; - if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; - if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; - if (value === 28) return stream.readInt16BE(); - if (value === 29) return stream.readInt32BE(); - if (value === 30) { - let str = ''; - while(true){ - let b = stream.readUInt8(); - let n1 = b >> 4; - if (n1 === $c2d28e92708f99da$var$FLOAT_EOF) break; - str += $c2d28e92708f99da$var$FLOAT_LOOKUP[n1]; - let n2 = b & 15; - if (n2 === $c2d28e92708f99da$var$FLOAT_EOF) break; - str += $c2d28e92708f99da$var$FLOAT_LOOKUP[n2]; - } - return parseFloat(str); - } - return null; - } - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) value = 32768; - if ((value | 0) !== value) { - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - } else if (-107 <= value && value <= 107) return 1; - else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; - else if (-32768 <= value && value <= 32767) return 3; - else return 5; - } - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } else if ((val | 0) !== val) { - stream.writeUInt8(30); - let str = '' + val; - for(let i = 0; i < str.length; i += 2){ - let c1 = str[i]; - let n1 = $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; - if (i === str.length - 1) var n2 = $c2d28e92708f99da$var$FLOAT_EOF; - else { - let c2 = str[i + 1]; - var n2 = $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - stream.writeUInt8(n1 << 4 | n2 & 15); - } - if (n2 !== $c2d28e92708f99da$var$FLOAT_EOF) return stream.writeUInt8($c2d28e92708f99da$var$FLOAT_EOF << 4); - } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); - else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} - - -class $61aa549f16d58b9b$export$2e2bcd8739ae039 { - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ - op - ])); - else if (type.decode != null) return type.decode(stream, ret, operands); - else switch(type){ - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]); - else if (type.encode != null) return type.encode(stream, operands, ctx); - else if (typeof operands === 'number') return [ - operands - ]; - else if (typeof operands === 'boolean') return [ - +operands - ]; - else if (Array.isArray(operands)) return operands; - else return [ - operands - ]; - } - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - // define hidden properties - Object.defineProperties(ret, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - } - }); - // fill in defaults - for(let key in this.fields){ - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - while(stream.pos < end){ - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) b = b << 8 | stream.readUInt8(); - let field = this.fields[b]; - if (!field) throw new Error(`Unknown operator ${b}`); - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof (0, $6uUbQ$PropertyDescriptor)) Object.defineProperty(ret, field[1], val); - else ret[field[1]] = val; - } - operands = []; - } else operands.push((0, $c2d28e92708f99da$export$2e2bcd8739ae039).decode(stream, b)); - } - return ret; - } - size(dict, parent, includePointers = true) { - let ctx = { - parent: parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - let len = 0; - for(let k in this.fields){ - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || (0, $6uUbQ$fastdeepequal)(val, field[3])) continue; - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands)len += (0, $c2d28e92708f99da$export$2e2bcd8739ae039).size(op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - len += key.length; - } - if (includePointers) len += ctx.pointerSize; - return len; - } - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: dict, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - for (let field of this.ops){ - let val = dict[field[1]]; - if (val == null || (0, $6uUbQ$fastdeepequal)(val, field[3])) continue; - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands)(0, $c2d28e92708f99da$export$2e2bcd8739ae039).encode(stream, op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - for (let op of key)stream.writeUInt8(op); - } - let i = 0; - while(i < ctx.pointers.length){ - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - return; - } - constructor(ops = []){ - this.ops = ops; - this.fields = {}; - for (let field of ops){ - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } -} - - - - -class $0e34a43d05bde82c$export$2e2bcd8739ae039 extends $6uUbQ$Pointer { - decode(stream, parent, operands) { - this.offsetType = { - decode: ()=>operands[0] - }; - return super.decode(stream, parent, operands); - } - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: ()=>0 - }; - this.size(value, ctx); - return [ - new $0e34a43d05bde82c$var$Ptr(0) - ]; - } - let ptr = null; - this.offsetType = { - encode: (stream, val)=>ptr = val - }; - super.encode(stream, value, ctx); - return [ - new $0e34a43d05bde82c$var$Ptr(ptr) - ]; - } - constructor(type, options = {}){ - if (options.type == null) options.type = 'global'; - super(null, type, options); - } -} -class $0e34a43d05bde82c$var$Ptr { - valueOf() { - return this.val; - } - constructor(val){ - this.val = val; - this.forceLarge = true; - } -} - - - - - -class $6d59db2e29cc77b3$var$CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while(operands.length > numBlends)operands.pop(); - } -} -var $6d59db2e29cc77b3$export$2e2bcd8739ae039 = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type default - [ - 6, - 'BlueValues', - 'delta', - null - ], - [ - 7, - 'OtherBlues', - 'delta', - null - ], - [ - 8, - 'FamilyBlues', - 'delta', - null - ], - [ - 9, - 'FamilyOtherBlues', - 'delta', - null - ], - [ - [ - 12, - 9 - ], - 'BlueScale', - 'number', - 0.039625 - ], - [ - [ - 12, - 10 - ], - 'BlueShift', - 'number', - 7 - ], - [ - [ - 12, - 11 - ], - 'BlueFuzz', - 'number', - 1 - ], - [ - 10, - 'StdHW', - 'number', - null - ], - [ - 11, - 'StdVW', - 'number', - null - ], - [ - [ - 12, - 12 - ], - 'StemSnapH', - 'delta', - null - ], - [ - [ - 12, - 13 - ], - 'StemSnapV', - 'delta', - null - ], - [ - [ - 12, - 14 - ], - 'ForceBold', - 'boolean', - false - ], - [ - [ - 12, - 17 - ], - 'LanguageGroup', - 'number', - 0 - ], - [ - [ - 12, - 18 - ], - 'ExpansionFactor', - 'number', - 0.06 - ], - [ - [ - 12, - 19 - ], - 'initialRandomSeed', - 'number', - 0 - ], - [ - 20, - 'defaultWidthX', - 'number', - 0 - ], - [ - 21, - 'nominalWidthX', - 'number', - 0 - ], - [ - 22, - 'vsindex', - 'number', - 0 - ], - [ - 23, - 'blend', - $6d59db2e29cc77b3$var$CFFBlendOp, - null - ], - [ - 19, - 'Subrs', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039), { - type: 'local' - }), - null - ] -]); - - -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -var $229224aec43783c5$export$2e2bcd8739ae039 = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -]; - - -let $bc0433d9b7e41f5f$export$dee0027060fa13bd = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - '', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - '', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - '', - 'questiondown', - '', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - '', - 'ring', - 'cedilla', - '', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'AE', - '', - 'ordfeminine', - '', - '', - '', - '', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - '', - '', - '', - '', - '', - 'ae', - '', - '', - '', - 'dotlessi', - '', - '', - 'lslash', - 'oslash', - 'oe', - 'germandbls' -]; -let $bc0433d9b7e41f5f$export$4f58f497e14a53c3 = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - '', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - '', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - '', - '', - 'isuperior', - '', - '', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - '', - '', - 'rsuperior', - 'ssuperior', - 'tsuperior', - '', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - '', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - '', - '', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - '', - 'Dotaccentsmall', - '', - '', - 'Macronsmall', - '', - '', - 'figuredash', - 'hypheninferior', - '', - '', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - '', - '', - '', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - '', - '', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; - - -let $ef658f5c9a1488b2$export$c33b50336c234f16 = [ - '.notdef', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - 'questiondown', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - 'AE', - 'ordfeminine', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - 'ae', - 'dotlessi', - 'lslash', - 'oslash', - 'oe', - 'germandbls', - 'onesuperior', - 'logicalnot', - 'mu', - 'trademark', - 'Eth', - 'onehalf', - 'plusminus', - 'Thorn', - 'onequarter', - 'divide', - 'brokenbar', - 'degree', - 'thorn', - 'threequarters', - 'twosuperior', - 'registered', - 'minus', - 'eth', - 'multiply', - 'threesuperior', - 'copyright', - 'Aacute', - 'Acircumflex', - 'Adieresis', - 'Agrave', - 'Aring', - 'Atilde', - 'Ccedilla', - 'Eacute', - 'Ecircumflex', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Ntilde', - 'Oacute', - 'Ocircumflex', - 'Odieresis', - 'Ograve', - 'Otilde', - 'Scaron', - 'Uacute', - 'Ucircumflex', - 'Udieresis', - 'Ugrave', - 'Yacute', - 'Ydieresis', - 'Zcaron', - 'aacute', - 'acircumflex', - 'adieresis', - 'agrave', - 'aring', - 'atilde', - 'ccedilla', - 'eacute', - 'ecircumflex', - 'edieresis', - 'egrave', - 'iacute', - 'icircumflex', - 'idieresis', - 'igrave', - 'ntilde', - 'oacute', - 'ocircumflex', - 'odieresis', - 'ograve', - 'otilde', - 'scaron', - 'uacute', - 'ucircumflex', - 'udieresis', - 'ugrave', - 'yacute', - 'ydieresis', - 'zcaron' -]; -let $ef658f5c9a1488b2$export$3ed0f9e1fee8d489 = [ - '.notdef', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - 'Dotaccentsmall', - 'Macronsmall', - 'figuredash', - 'hypheninferior', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; -let $ef658f5c9a1488b2$export$dc28be11139d4120 = [ - '.notdef', - 'space', - 'dollaroldstyle', - 'dollarsuperior', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'hyphensuperior', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'centoldstyle', - 'figuredash', - 'hypheninferior', - 'onequarter', - 'onehalf', - 'threequarters', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior' -]; - - - -//######################## -// Scripts and Languages # -//######################## -let $7cbbe4e24ef3cb75$var$LangSysTable = new $6uUbQ$Struct({ - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - reqFeatureIndex: $6uUbQ$uint16, - featureCount: $6uUbQ$uint16, - featureIndexes: new $6uUbQ$Array($6uUbQ$uint16, 'featureCount') -}); -let $7cbbe4e24ef3cb75$var$LangSysRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - langSys: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$LangSysTable, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$var$Script = new $6uUbQ$Struct({ - defaultLangSys: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$LangSysTable), - count: $6uUbQ$uint16, - langSysRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LangSysRecord, 'count') -}); -let $7cbbe4e24ef3cb75$var$ScriptRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - script: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$Script, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$export$3e15fc05ce864229 = new $6uUbQ$Array($7cbbe4e24ef3cb75$var$ScriptRecord, $6uUbQ$uint16); -//####################### -// Features and Lookups # -//####################### -let $7cbbe4e24ef3cb75$var$FeatureParams = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - nameID: $6uUbQ$uint16 -}); -let $7cbbe4e24ef3cb75$export$6e91cf7616333d5 = new $6uUbQ$Struct({ - featureParams: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$FeatureParams), - lookupCount: $6uUbQ$uint16, - lookupListIndexes: new $6uUbQ$Array($6uUbQ$uint16, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$FeatureRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - feature: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$6e91cf7616333d5, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$export$aa18130def4b6cb4 = new $6uUbQ$Array($7cbbe4e24ef3cb75$var$FeatureRecord, $6uUbQ$uint16); -let $7cbbe4e24ef3cb75$var$LookupFlags = new $6uUbQ$Struct({ - markAttachmentType: $6uUbQ$uint8, - flags: new $6uUbQ$Bitfield($6uUbQ$uint8, [ - 'rightToLeft', - 'ignoreBaseGlyphs', - 'ignoreLigatures', - 'ignoreMarks', - 'useMarkFilteringSet' - ]) -}); -function $7cbbe4e24ef3cb75$export$df0008c6ff2da22a(SubTable) { - let Lookup = new $6uUbQ$Struct({ - lookupType: $6uUbQ$uint16, - flags: $7cbbe4e24ef3cb75$var$LookupFlags, - subTableCount: $6uUbQ$uint16, - subTables: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, SubTable), 'subTableCount'), - markFilteringSet: new $6uUbQ$Optional($6uUbQ$uint16, (t)=>t.flags.flags.useMarkFilteringSet) - }); - return new $6uUbQ$LazyArray(new $6uUbQ$Pointer($6uUbQ$uint16, Lookup), $6uUbQ$uint16); -} -//################# -// Coverage Table # -//################# -let $7cbbe4e24ef3cb75$var$RangeRecord = new $6uUbQ$Struct({ - start: $6uUbQ$uint16, - end: $6uUbQ$uint16, - startCoverageIndex: $6uUbQ$uint16 -}); -let $7cbbe4e24ef3cb75$export$17608c3f81a6111 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - glyphCount: $6uUbQ$uint16, - glyphs: new $6uUbQ$Array($6uUbQ$uint16, 'glyphCount') - }, - 2: { - rangeCount: $6uUbQ$uint16, - rangeRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$RangeRecord, 'rangeCount') - } -}); -//######################### -// Class Definition Table # -//######################### -let $7cbbe4e24ef3cb75$var$ClassRangeRecord = new $6uUbQ$Struct({ - start: $6uUbQ$uint16, - end: $6uUbQ$uint16, - class: $6uUbQ$uint16 -}); -let $7cbbe4e24ef3cb75$export$843d551fbbafef71 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - startGlyph: $6uUbQ$uint16, - glyphCount: $6uUbQ$uint16, - classValueArray: new $6uUbQ$Array($6uUbQ$uint16, 'glyphCount') - }, - 2: { - classRangeCount: $6uUbQ$uint16, - classRangeRecord: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$ClassRangeRecord, 'classRangeCount') - } -}); -let $7cbbe4e24ef3cb75$export$8215d14a63d9fb10 = new $6uUbQ$Struct({ - a: $6uUbQ$uint16, - b: $6uUbQ$uint16, - deltaFormat: $6uUbQ$uint16 -}); -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# -let $7cbbe4e24ef3cb75$var$LookupRecord = new $6uUbQ$Struct({ - sequenceIndex: $6uUbQ$uint16, - lookupListIndex: $6uUbQ$uint16 -}); -let $7cbbe4e24ef3cb75$var$Rule = new $6uUbQ$Struct({ - glyphCount: $6uUbQ$uint16, - lookupCount: $6uUbQ$uint16, - input: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$RuleSet = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$Rule), $6uUbQ$uint16); -let $7cbbe4e24ef3cb75$var$ClassRule = new $6uUbQ$Struct({ - glyphCount: $6uUbQ$uint16, - lookupCount: $6uUbQ$uint16, - classes: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$ClassSet = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$ClassRule), $6uUbQ$uint16); -let $7cbbe4e24ef3cb75$export$841858b892ce1f4c = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - ruleSetCount: $6uUbQ$uint16, - ruleSets: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$RuleSet), 'ruleSetCount') - }, - 2: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - classDef: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - classSetCnt: $6uUbQ$uint16, - classSet: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: $6uUbQ$uint16, - lookupCount: $6uUbQ$uint16, - coverages: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'glyphCount'), - lookupRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') - } -}); -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### -let $7cbbe4e24ef3cb75$var$ChainRule = new $6uUbQ$Struct({ - backtrackGlyphCount: $6uUbQ$uint16, - backtrack: new $6uUbQ$Array($6uUbQ$uint16, 'backtrackGlyphCount'), - inputGlyphCount: $6uUbQ$uint16, - input: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.inputGlyphCount - 1), - lookaheadGlyphCount: $6uUbQ$uint16, - lookahead: new $6uUbQ$Array($6uUbQ$uint16, 'lookaheadGlyphCount'), - lookupCount: $6uUbQ$uint16, - lookupRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$ChainRuleSet = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$ChainRule), $6uUbQ$uint16); -let $7cbbe4e24ef3cb75$export$5e6d09e6861162f6 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - chainCount: $6uUbQ$uint16, - chainRuleSets: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$ChainRuleSet), 'chainCount') - }, - 2: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - backtrackClassDef: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - inputClassDef: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - lookaheadClassDef: new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - chainCount: $6uUbQ$uint16, - chainClassSet: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$var$ChainRuleSet), 'chainCount') - }, - 3: { - backtrackGlyphCount: $6uUbQ$uint16, - backtrackCoverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'backtrackGlyphCount'), - inputGlyphCount: $6uUbQ$uint16, - inputCoverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'inputGlyphCount'), - lookaheadGlyphCount: $6uUbQ$uint16, - lookaheadCoverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'lookaheadGlyphCount'), - lookupCount: $6uUbQ$uint16, - lookupRecords: new $6uUbQ$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') - } -}); - - - -/******************* - * Variation Store * - *******************/ let $1a47b0c45c1c22fe$var$F2DOT14 = new $6uUbQ$Fixed(16, 'BE', 14); -let $1a47b0c45c1c22fe$var$RegionAxisCoordinates = new $6uUbQ$Struct({ - startCoord: $1a47b0c45c1c22fe$var$F2DOT14, - peakCoord: $1a47b0c45c1c22fe$var$F2DOT14, - endCoord: $1a47b0c45c1c22fe$var$F2DOT14 -}); -let $1a47b0c45c1c22fe$var$VariationRegionList = new $6uUbQ$Struct({ - axisCount: $6uUbQ$uint16, - regionCount: $6uUbQ$uint16, - variationRegions: new $6uUbQ$Array(new $6uUbQ$Array($1a47b0c45c1c22fe$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); -let $1a47b0c45c1c22fe$var$DeltaSet = new $6uUbQ$Struct({ - shortDeltas: new $6uUbQ$Array($6uUbQ$int16, (t)=>t.parent.shortDeltaCount), - regionDeltas: new $6uUbQ$Array($6uUbQ$int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) -}); -let $1a47b0c45c1c22fe$var$ItemVariationData = new $6uUbQ$Struct({ - itemCount: $6uUbQ$uint16, - shortDeltaCount: $6uUbQ$uint16, - regionIndexCount: $6uUbQ$uint16, - regionIndexes: new $6uUbQ$Array($6uUbQ$uint16, 'regionIndexCount'), - deltaSets: new $6uUbQ$Array($1a47b0c45c1c22fe$var$DeltaSet, 'itemCount') -}); -let $1a47b0c45c1c22fe$export$fe1b122a2710f241 = new $6uUbQ$Struct({ - format: $6uUbQ$uint16, - variationRegionList: new $6uUbQ$Pointer($6uUbQ$uint32, $1a47b0c45c1c22fe$var$VariationRegionList), - variationDataCount: $6uUbQ$uint16, - itemVariationData: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint32, $1a47b0c45c1c22fe$var$ItemVariationData), 'variationDataCount') -}); -/********************** - * Feature Variations * - **********************/ let $1a47b0c45c1c22fe$var$ConditionTable = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - axisIndex: $6uUbQ$uint16, - axisIndex: $6uUbQ$uint16, - filterRangeMinValue: $1a47b0c45c1c22fe$var$F2DOT14, - filterRangeMaxValue: $1a47b0c45c1c22fe$var$F2DOT14 - } -}); -let $1a47b0c45c1c22fe$var$ConditionSet = new $6uUbQ$Struct({ - conditionCount: $6uUbQ$uint16, - conditionTable: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint32, $1a47b0c45c1c22fe$var$ConditionTable), 'conditionCount') -}); -let $1a47b0c45c1c22fe$var$FeatureTableSubstitutionRecord = new $6uUbQ$Struct({ - featureIndex: $6uUbQ$uint16, - alternateFeatureTable: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $7cbbe4e24ef3cb75$export$6e91cf7616333d5), { - type: 'parent' - }) -}); -let $1a47b0c45c1c22fe$var$FeatureTableSubstitution = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - substitutionCount: $6uUbQ$uint16, - substitutions: new $6uUbQ$Array($1a47b0c45c1c22fe$var$FeatureTableSubstitutionRecord, 'substitutionCount') -}); -let $1a47b0c45c1c22fe$var$FeatureVariationRecord = new $6uUbQ$Struct({ - conditionSet: new $6uUbQ$Pointer($6uUbQ$uint32, $1a47b0c45c1c22fe$var$ConditionSet, { - type: 'parent' - }), - featureTableSubstitution: new $6uUbQ$Pointer($6uUbQ$uint32, $1a47b0c45c1c22fe$var$FeatureTableSubstitution, { - type: 'parent' - }) -}); -let $1a47b0c45c1c22fe$export$441b70b7971dd419 = new $6uUbQ$Struct({ - majorVersion: $6uUbQ$uint16, - minorVersion: $6uUbQ$uint16, - featureVariationRecordCount: $6uUbQ$uint32, - featureVariationRecords: new $6uUbQ$Array($1a47b0c45c1c22fe$var$FeatureVariationRecord, 'featureVariationRecordCount') -}); - - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class $b84fd3dd9d8eddb2$var$PredefinedOp { - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; - return this.type.decode(stream, parent, operands); - } - size(value, ctx) { - return this.type.size(value, ctx); - } - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) return index; - return this.type.encode(stream, value, ctx); - } - constructor(predefinedOps, type){ - this.predefinedOps = predefinedOps; - this.type = type; - } -} -class $b84fd3dd9d8eddb2$var$CFFEncodingVersion extends $6uUbQ$Number { - decode(stream) { - return $6uUbQ$uint8.decode(stream) & 0x7f; - } - constructor(){ - super('UInt8'); - } -} -let $b84fd3dd9d8eddb2$var$Range1 = new $6uUbQ$Struct({ - first: $6uUbQ$uint16, - nLeft: $6uUbQ$uint8 -}); -let $b84fd3dd9d8eddb2$var$Range2 = new $6uUbQ$Struct({ - first: $6uUbQ$uint16, - nLeft: $6uUbQ$uint16 -}); -let $b84fd3dd9d8eddb2$var$CFFCustomEncoding = new $6uUbQ$VersionedStruct(new $b84fd3dd9d8eddb2$var$CFFEncodingVersion(), { - 0: { - nCodes: $6uUbQ$uint8, - codes: new $6uUbQ$Array($6uUbQ$uint8, 'nCodes') - }, - 1: { - nRanges: $6uUbQ$uint8, - ranges: new $6uUbQ$Array($b84fd3dd9d8eddb2$var$Range1, 'nRanges') - } -}); -let $b84fd3dd9d8eddb2$var$CFFEncoding = new $b84fd3dd9d8eddb2$var$PredefinedOp([ - (0, $bc0433d9b7e41f5f$export$dee0027060fa13bd), - (0, $bc0433d9b7e41f5f$export$4f58f497e14a53c3) -], new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFCustomEncoding, { - lazy: true -})); -// Decodes an array of ranges until the total -// length is equal to the provided length. -class $b84fd3dd9d8eddb2$var$RangeArray extends $6uUbQ$Array { - decode(stream, parent) { - let length = (0, $6uUbQ$resolveLength)(this.length, stream, parent); - let count = 0; - let res = []; - while(count < length){ - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - return res; - } -} -let $b84fd3dd9d8eddb2$var$CFFCustomCharset = new $6uUbQ$VersionedStruct($6uUbQ$uint8, { - 0: { - glyphs: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.parent.CharStrings.length - 1) - }, - 1: { - ranges: new $b84fd3dd9d8eddb2$var$RangeArray($b84fd3dd9d8eddb2$var$Range1, (t)=>t.parent.CharStrings.length - 1) - }, - 2: { - ranges: new $b84fd3dd9d8eddb2$var$RangeArray($b84fd3dd9d8eddb2$var$Range2, (t)=>t.parent.CharStrings.length - 1) - } -}); -let $b84fd3dd9d8eddb2$var$CFFCharset = new $b84fd3dd9d8eddb2$var$PredefinedOp([ - (0, $ef658f5c9a1488b2$export$c33b50336c234f16), - (0, $ef658f5c9a1488b2$export$3ed0f9e1fee8d489), - (0, $ef658f5c9a1488b2$export$dc28be11139d4120) -], new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFCustomCharset, { - lazy: true -})); -let $b84fd3dd9d8eddb2$var$FDRange3 = new $6uUbQ$Struct({ - first: $6uUbQ$uint16, - fd: $6uUbQ$uint8 -}); -let $b84fd3dd9d8eddb2$var$FDRange4 = new $6uUbQ$Struct({ - first: $6uUbQ$uint32, - fd: $6uUbQ$uint16 -}); -let $b84fd3dd9d8eddb2$var$FDSelect = new $6uUbQ$VersionedStruct($6uUbQ$uint8, { - 0: { - fds: new $6uUbQ$Array($6uUbQ$uint8, (t)=>t.parent.CharStrings.length) - }, - 3: { - nRanges: $6uUbQ$uint16, - ranges: new $6uUbQ$Array($b84fd3dd9d8eddb2$var$FDRange3, 'nRanges'), - sentinel: $6uUbQ$uint16 - }, - 4: { - nRanges: $6uUbQ$uint32, - ranges: new $6uUbQ$Array($b84fd3dd9d8eddb2$var$FDRange4, 'nRanges'), - sentinel: $6uUbQ$uint32 - } -}); -let $b84fd3dd9d8eddb2$var$ptr = new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)((0, $6d59db2e29cc77b3$export$2e2bcd8739ae039)); -class $b84fd3dd9d8eddb2$var$CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return $b84fd3dd9d8eddb2$var$ptr.decode(stream, parent, [ - operands[1] - ]); - } - size(dict, ctx) { - return [ - (0, $6d59db2e29cc77b3$export$2e2bcd8739ae039).size(dict, ctx, false), - $b84fd3dd9d8eddb2$var$ptr.size(dict, ctx)[0] - ]; - } - encode(stream, dict, ctx) { - return [ - (0, $6d59db2e29cc77b3$export$2e2bcd8739ae039).size(dict, ctx, false), - $b84fd3dd9d8eddb2$var$ptr.encode(stream, dict, ctx)[0] - ]; - } -} -let $b84fd3dd9d8eddb2$var$FontDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - 18, - 'Private', - new $b84fd3dd9d8eddb2$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ] -]); -let $b84fd3dd9d8eddb2$var$CFFTopDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - [ - 12, - 30 - ], - 'ROS', - [ - 'sid', - 'sid', - 'number' - ], - null - ], - [ - 0, - 'version', - 'sid', - null - ], - [ - 1, - 'Notice', - 'sid', - null - ], - [ - [ - 12, - 0 - ], - 'Copyright', - 'sid', - null - ], - [ - 2, - 'FullName', - 'sid', - null - ], - [ - 3, - 'FamilyName', - 'sid', - null - ], - [ - 4, - 'Weight', - 'sid', - null - ], - [ - [ - 12, - 1 - ], - 'isFixedPitch', - 'boolean', - false - ], - [ - [ - 12, - 2 - ], - 'ItalicAngle', - 'number', - 0 - ], - [ - [ - 12, - 3 - ], - 'UnderlinePosition', - 'number', - -100 - ], - [ - [ - 12, - 4 - ], - 'UnderlineThickness', - 'number', - 50 - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ], - [ - [ - 12, - 6 - ], - 'CharstringType', - 'number', - 2 - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 13, - 'UniqueID', - 'number', - null - ], - [ - 5, - 'FontBBox', - 'array', - [ - 0, - 0, - 0, - 0 - ] - ], - [ - [ - 12, - 8 - ], - 'StrokeWidth', - 'number', - 0 - ], - [ - 14, - 'XUID', - 'array', - null - ], - [ - 15, - 'charset', - $b84fd3dd9d8eddb2$var$CFFCharset, - (0, $ef658f5c9a1488b2$export$c33b50336c234f16) - ], - [ - 16, - 'Encoding', - $b84fd3dd9d8eddb2$var$CFFEncoding, - (0, $bc0433d9b7e41f5f$export$dee0027060fa13bd) - ], - [ - 17, - 'CharStrings', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)), - null - ], - [ - 18, - 'Private', - new $b84fd3dd9d8eddb2$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 20 - ], - 'SyntheticBase', - 'number', - null - ], - [ - [ - 12, - 21 - ], - 'PostScript', - 'sid', - null - ], - [ - [ - 12, - 22 - ], - 'BaseFontName', - 'sid', - null - ], - [ - [ - 12, - 23 - ], - 'BaseFontBlend', - 'delta', - null - ], - // CID font specific - [ - [ - 12, - 31 - ], - 'CIDFontVersion', - 'number', - 0 - ], - [ - [ - 12, - 32 - ], - 'CIDFontRevision', - 'number', - 0 - ], - [ - [ - 12, - 33 - ], - 'CIDFontType', - 'number', - 0 - ], - [ - [ - 12, - 34 - ], - 'CIDCount', - 'number', - 8720 - ], - [ - [ - 12, - 35 - ], - 'UIDBase', - 'number', - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FontDict)), - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ] -]); -let $b84fd3dd9d8eddb2$var$VariationStore = new $6uUbQ$Struct({ - length: $6uUbQ$uint16, - itemVariationStore: (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241) -}); -let $b84fd3dd9d8eddb2$var$CFF2TopDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 17, - 'CharStrings', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)), - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FontDict)), - null - ], - [ - 24, - 'vstore', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$VariationStore), - null - ], - [ - 25, - 'maxstack', - 'number', - 193 - ] -]); -let $b84fd3dd9d8eddb2$var$CFFTop = new $6uUbQ$VersionedStruct($6uUbQ$fixed16, { - 1: { - hdrSize: $6uUbQ$uint8, - offSize: $6uUbQ$uint8, - nameIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)(new $6uUbQ$String('length')), - topDictIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFTopDict), - stringIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)(new $6uUbQ$String('length')), - globalSubrIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039) - }, - 2: { - hdrSize: $6uUbQ$uint8, - length: $6uUbQ$uint16, - topDict: $b84fd3dd9d8eddb2$var$CFF2TopDict, - globalSubrIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039) - } -}); -var $b84fd3dd9d8eddb2$export$2e2bcd8739ae039 = $b84fd3dd9d8eddb2$var$CFFTop; - - - - -class $822ac0d589e4e237$var$CFFFont { - static decode(stream) { - return new $822ac0d589e4e237$var$CFFFont(stream); - } - decode() { - let start = this.stream.pos; - let top = (0, $b84fd3dd9d8eddb2$export$2e2bcd8739ae039).decode(this.stream); - for(let key in top){ - let val = top[key]; - this[key] = val; - } - if (this.version < 2) { - if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); - this.topDict = this.topDictIndex[0]; - } - this.isCIDFont = this.topDict.ROS != null; - return this; - } - string(sid) { - if (this.version >= 2) return null; - if (sid < (0, $229224aec43783c5$export$2e2bcd8739ae039).length) return (0, $229224aec43783c5$export$2e2bcd8739ae039)[sid]; - return this.stringIndex[sid - (0, $229224aec43783c5$export$2e2bcd8739ae039).length]; - } - get postscriptName() { - if (this.version < 2) return this.nameIndex[0]; - return null; - } - get fullName() { - return this.string(this.topDict.FullName); - } - get familyName() { - return this.string(this.topDict.FamilyName); - } - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) return null; - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) return null; - let { charset: charset } = this.topDict; - if (Array.isArray(charset)) return charset[gid]; - if (gid === 0) return '.notdef'; - gid -= 1; - switch(charset.version){ - case 0: - return this.string(charset.glyphs[gid]); - case 1: - case 2: - for(let i = 0; i < charset.ranges.length; i++){ - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); - } - break; - } - return null; - } - fdForGlyph(gid) { - if (!this.topDict.FDSelect) return null; - switch(this.topDict.FDSelect.version){ - case 0: - return this.topDict.FDSelect.fds[gid]; - case 3: - case 4: - let { ranges: ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - while(low <= high){ - let mid = low + high >> 1; - if (gid < ranges[mid].first) high = mid - 1; - else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; - else return ranges[mid].fd; - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; - return null; - } - if (this.version < 2) return this.topDict.Private; - return this.topDict.FDArray[0].Private; - } - constructor(stream){ - this.stream = stream; - this.decode(); - } -} -var $822ac0d589e4e237$export$2e2bcd8739ae039 = $822ac0d589e4e237$var$CFFFont; - - - -let $2bbf2bc1ce37cd8f$var$VerticalOrigin = new $6uUbQ$Struct({ - glyphIndex: $6uUbQ$uint16, - vertOriginY: $6uUbQ$int16 -}); -var $2bbf2bc1ce37cd8f$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - majorVersion: $6uUbQ$uint16, - minorVersion: $6uUbQ$uint16, - defaultVertOriginY: $6uUbQ$int16, - numVertOriginYMetrics: $6uUbQ$uint16, - metrics: new $6uUbQ$Array($2bbf2bc1ce37cd8f$var$VerticalOrigin, 'numVertOriginYMetrics') -}); - - - - -let $0941618dc22a946d$export$16b227cb15d716a0 = new $6uUbQ$Struct({ - height: $6uUbQ$uint8, - width: $6uUbQ$uint8, - horiBearingX: $6uUbQ$int8, - horiBearingY: $6uUbQ$int8, - horiAdvance: $6uUbQ$uint8, - vertBearingX: $6uUbQ$int8, - vertBearingY: $6uUbQ$int8, - vertAdvance: $6uUbQ$uint8 -}); -let $0941618dc22a946d$export$62c53e75f69bfe12 = new $6uUbQ$Struct({ - height: $6uUbQ$uint8, - width: $6uUbQ$uint8, - bearingX: $6uUbQ$int8, - bearingY: $6uUbQ$int8, - advance: $6uUbQ$uint8 -}); -let $0941618dc22a946d$var$EBDTComponent = new $6uUbQ$Struct({ - glyph: $6uUbQ$uint16, - xOffset: $6uUbQ$int8, - yOffset: $6uUbQ$int8 -}); -class $0941618dc22a946d$var$ByteAligned { -} -class $0941618dc22a946d$var$BitAligned { -} -let $0941618dc22a946d$export$f1f5ddeb20d14f = new $6uUbQ$VersionedStruct('version', { - 1: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - data: $0941618dc22a946d$var$ByteAligned - }, - 2: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - data: $0941618dc22a946d$var$BitAligned - }, - // format 3 is deprecated - // format 4 is not supported by Microsoft - 5: { - data: $0941618dc22a946d$var$BitAligned - }, - 6: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - data: $0941618dc22a946d$var$ByteAligned - }, - 7: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - data: $0941618dc22a946d$var$BitAligned - }, - 8: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - pad: new $6uUbQ$Reserved($6uUbQ$uint8), - numComponents: $6uUbQ$uint16, - components: new $6uUbQ$Array($0941618dc22a946d$var$EBDTComponent, 'numComponents') - }, - 9: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - pad: new $6uUbQ$Reserved($6uUbQ$uint8), - numComponents: $6uUbQ$uint16, - components: new $6uUbQ$Array($0941618dc22a946d$var$EBDTComponent, 'numComponents') - }, - 17: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - dataLen: $6uUbQ$uint32, - data: new $6uUbQ$Buffer('dataLen') - }, - 18: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - dataLen: $6uUbQ$uint32, - data: new $6uUbQ$Buffer('dataLen') - }, - 19: { - dataLen: $6uUbQ$uint32, - data: new $6uUbQ$Buffer('dataLen') - } -}); - - -let $9911c4c7201c13de$var$SBitLineMetrics = new $6uUbQ$Struct({ - ascender: $6uUbQ$int8, - descender: $6uUbQ$int8, - widthMax: $6uUbQ$uint8, - caretSlopeNumerator: $6uUbQ$int8, - caretSlopeDenominator: $6uUbQ$int8, - caretOffset: $6uUbQ$int8, - minOriginSB: $6uUbQ$int8, - minAdvanceSB: $6uUbQ$int8, - maxBeforeBL: $6uUbQ$int8, - minAfterBL: $6uUbQ$int8, - pad: new $6uUbQ$Reserved($6uUbQ$int8, 2) -}); -let $9911c4c7201c13de$var$CodeOffsetPair = new $6uUbQ$Struct({ - glyphCode: $6uUbQ$uint16, - offset: $6uUbQ$uint16 -}); -let $9911c4c7201c13de$var$IndexSubtable = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - header: { - imageFormat: $6uUbQ$uint16, - imageDataOffset: $6uUbQ$uint32 - }, - 1: { - offsetArray: new $6uUbQ$Array($6uUbQ$uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 2: { - imageSize: $6uUbQ$uint32, - bigMetrics: (0, $0941618dc22a946d$export$16b227cb15d716a0) - }, - 3: { - offsetArray: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 4: { - numGlyphs: $6uUbQ$uint32, - glyphArray: new $6uUbQ$Array($9911c4c7201c13de$var$CodeOffsetPair, (t)=>t.numGlyphs + 1) - }, - 5: { - imageSize: $6uUbQ$uint32, - bigMetrics: (0, $0941618dc22a946d$export$16b227cb15d716a0), - numGlyphs: $6uUbQ$uint32, - glyphCodeArray: new $6uUbQ$Array($6uUbQ$uint16, 'numGlyphs') - } -}); -let $9911c4c7201c13de$var$IndexSubtableArray = new $6uUbQ$Struct({ - firstGlyphIndex: $6uUbQ$uint16, - lastGlyphIndex: $6uUbQ$uint16, - subtable: new $6uUbQ$Pointer($6uUbQ$uint32, $9911c4c7201c13de$var$IndexSubtable) -}); -let $9911c4c7201c13de$var$BitmapSizeTable = new $6uUbQ$Struct({ - indexSubTableArray: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($9911c4c7201c13de$var$IndexSubtableArray, 1), { - type: 'parent' - }), - indexTablesSize: $6uUbQ$uint32, - numberOfIndexSubTables: $6uUbQ$uint32, - colorRef: $6uUbQ$uint32, - hori: $9911c4c7201c13de$var$SBitLineMetrics, - vert: $9911c4c7201c13de$var$SBitLineMetrics, - startGlyphIndex: $6uUbQ$uint16, - endGlyphIndex: $6uUbQ$uint16, - ppemX: $6uUbQ$uint8, - ppemY: $6uUbQ$uint8, - bitDepth: $6uUbQ$uint8, - flags: new $6uUbQ$Bitfield($6uUbQ$uint8, [ - 'horizontal', - 'vertical' - ]) -}); -var $9911c4c7201c13de$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint32, - numSizes: $6uUbQ$uint32, - sizes: new $6uUbQ$Array($9911c4c7201c13de$var$BitmapSizeTable, 'numSizes') -}); - - - -let $abb847051efd51b1$var$ImageTable = new $6uUbQ$Struct({ - ppem: $6uUbQ$uint16, - resolution: $6uUbQ$uint16, - imageOffsets: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1) -}); -var // This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -$abb847051efd51b1$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - flags: new $6uUbQ$Bitfield($6uUbQ$uint16, [ - 'renderOutlines' - ]), - numImgTables: $6uUbQ$uint32, - imageTables: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint32, $abb847051efd51b1$var$ImageTable), 'numImgTables') -}); - - - -let $eb629188f3dfefdd$var$LayerRecord = new $6uUbQ$Struct({ - gid: $6uUbQ$uint16, - paletteIndex: $6uUbQ$uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for -// the special case noted below. Each palette entry is 16 bits. -// A palette index of 0xFFFF is a special case indicating that -// the text foreground color should be used. -let $eb629188f3dfefdd$var$BaseGlyphRecord = new $6uUbQ$Struct({ - gid: $6uUbQ$uint16, - // and is not rendered for color. - firstLayerIndex: $6uUbQ$uint16, - // There will be numLayers consecutive entries for this base glyph. - numLayers: $6uUbQ$uint16 -}); -var $eb629188f3dfefdd$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numBaseGlyphRecords: $6uUbQ$uint16, - baseGlyphRecord: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($eb629188f3dfefdd$var$BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($eb629188f3dfefdd$var$LayerRecord, 'numLayerRecords'), { - lazy: true - }), - numLayerRecords: $6uUbQ$uint16 -}); - - - -let $08734b8e7dc64587$var$ColorRecord = new $6uUbQ$Struct({ - blue: $6uUbQ$uint8, - green: $6uUbQ$uint8, - red: $6uUbQ$uint8, - alpha: $6uUbQ$uint8 -}); -var $08734b8e7dc64587$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - header: { - numPaletteEntries: $6uUbQ$uint16, - numPalettes: $6uUbQ$uint16, - numColorRecords: $6uUbQ$uint16, - colorRecords: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($08734b8e7dc64587$var$ColorRecord, 'numColorRecords')), - colorRecordIndices: new $6uUbQ$Array($6uUbQ$uint16, 'numPalettes') - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($6uUbQ$uint32, 'numPalettes')), - offsetPaletteLabelArray: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($6uUbQ$uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($6uUbQ$uint16, 'numPaletteEntries')) - } -}); - - - - - -let $497cef411d884e34$var$BaseCoord = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coordinate: $6uUbQ$int16 // X or Y value, in design units - }, - 2: { - coordinate: $6uUbQ$int16, - referenceGlyph: $6uUbQ$uint16, - baseCoordPoint: $6uUbQ$uint16 // Index of contour point on the referenceGlyph - }, - 3: { - coordinate: $6uUbQ$int16, - deviceTable: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) // Device table for X or Y value - } -}); -let $497cef411d884e34$var$BaseValues = new $6uUbQ$Struct({ - defaultIndex: $6uUbQ$uint16, - baseCoordCount: $6uUbQ$uint16, - baseCoords: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseCoord), 'baseCoordCount') -}); -let $497cef411d884e34$var$FeatMinMaxRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - minCoord: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseCoord, { - type: 'parent' - }), - maxCoord: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseCoord, { - type: 'parent' - }) // May be NULL -}); -let $497cef411d884e34$var$MinMax = new $6uUbQ$Struct({ - minCoord: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseCoord), - maxCoord: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseCoord), - featMinMaxCount: $6uUbQ$uint16, - featMinMaxRecords: new $6uUbQ$Array($497cef411d884e34$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); -let $497cef411d884e34$var$BaseLangSysRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - minMax: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$MinMax, { - type: 'parent' - }) -}); -let $497cef411d884e34$var$BaseScript = new $6uUbQ$Struct({ - baseValues: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseValues), - defaultMinMax: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$MinMax), - baseLangSysCount: $6uUbQ$uint16, - baseLangSysRecords: new $6uUbQ$Array($497cef411d884e34$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); -let $497cef411d884e34$var$BaseScriptRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - script: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseScript, { - type: 'parent' - }) -}); -let $497cef411d884e34$var$BaseScriptList = new $6uUbQ$Array($497cef411d884e34$var$BaseScriptRecord, $6uUbQ$uint16); -// Array of 4-byte baseline identification tags-must be in alphabetical order -let $497cef411d884e34$var$BaseTagList = new $6uUbQ$Array(new $6uUbQ$String(4), $6uUbQ$uint16); -let $497cef411d884e34$var$Axis = new $6uUbQ$Struct({ - baseTagList: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseTagList), - baseScriptList: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$BaseScriptList) -}); -var $497cef411d884e34$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint32, { - header: { - horizAxis: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$Axis), - vertAxis: new $6uUbQ$Pointer($6uUbQ$uint16, $497cef411d884e34$var$Axis) // May be NULL - }, - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)) - } -}); - - - - - -let $cf5f33c63ef209e6$var$AttachPoint = new $6uUbQ$Array($6uUbQ$uint16, $6uUbQ$uint16); -let $cf5f33c63ef209e6$var$AttachList = new $6uUbQ$Struct({ - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - glyphCount: $6uUbQ$uint16, - attachPoints: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$AttachPoint), 'glyphCount') -}); -let $cf5f33c63ef209e6$var$CaretValue = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coordinate: $6uUbQ$int16 - }, - 2: { - caretValuePoint: $6uUbQ$uint16 - }, - 3: { - coordinate: $6uUbQ$int16, - deviceTable: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) - } -}); -let $cf5f33c63ef209e6$var$LigGlyph = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$CaretValue), $6uUbQ$uint16); -let $cf5f33c63ef209e6$var$LigCaretList = new $6uUbQ$Struct({ - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - ligGlyphCount: $6uUbQ$uint16, - ligGlyphs: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$LigGlyph), 'ligGlyphCount') -}); -let $cf5f33c63ef209e6$var$MarkGlyphSetsDef = new $6uUbQ$Struct({ - markSetTableFormat: $6uUbQ$uint16, - markSetCount: $6uUbQ$uint16, - coverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint32, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'markSetCount') -}); -var $cf5f33c63ef209e6$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint32, { - header: { - glyphClassDef: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - attachList: new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$AttachList), - ligCaretList: new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$LigCaretList), - markAttachClassDef: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)) - }, - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new $6uUbQ$Pointer($6uUbQ$uint16, $cf5f33c63ef209e6$var$MarkGlyphSetsDef), - itemVariationStore: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)) - } -}); - - - - - -let $47e0e8ef515d9903$var$ValueFormat = new $6uUbQ$Bitfield($6uUbQ$uint16, [ - 'xPlacement', - 'yPlacement', - 'xAdvance', - 'yAdvance', - 'xPlaDevice', - 'yPlaDevice', - 'xAdvDevice', - 'yAdvDevice' -]); -let $47e0e8ef515d9903$var$types = { - xPlacement: $6uUbQ$int16, - yPlacement: $6uUbQ$int16, - xAdvance: $6uUbQ$int16, - yAdvance: $6uUbQ$int16, - xPlaDevice: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yPlaDevice: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - xAdvDevice: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yAdvDevice: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }) -}; -class $47e0e8ef515d9903$var$ValueRecord { - buildStruct(parent) { - let struct = parent; - while(!struct[this.key] && struct.parent)struct = struct.parent; - if (!struct[this.key]) return; - let fields = {}; - fields.rel = ()=>struct._startOffset; - let format = struct[this.key]; - for(let key in format)if (format[key]) fields[key] = $47e0e8ef515d9903$var$types[key]; - return new $6uUbQ$Struct(fields); - } - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } - constructor(key = 'valueFormat'){ - this.key = key; - } -} -let $47e0e8ef515d9903$var$PairValueRecord = new $6uUbQ$Struct({ - secondGlyph: $6uUbQ$uint16, - value1: new $47e0e8ef515d9903$var$ValueRecord('valueFormat1'), - value2: new $47e0e8ef515d9903$var$ValueRecord('valueFormat2') -}); -let $47e0e8ef515d9903$var$PairSet = new $6uUbQ$Array($47e0e8ef515d9903$var$PairValueRecord, $6uUbQ$uint16); -let $47e0e8ef515d9903$var$Class2Record = new $6uUbQ$Struct({ - value1: new $47e0e8ef515d9903$var$ValueRecord('valueFormat1'), - value2: new $47e0e8ef515d9903$var$ValueRecord('valueFormat2') -}); -let $47e0e8ef515d9903$var$Anchor = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - xCoordinate: $6uUbQ$int16, - yCoordinate: $6uUbQ$int16 - }, - 2: { - xCoordinate: $6uUbQ$int16, - yCoordinate: $6uUbQ$int16, - anchorPoint: $6uUbQ$uint16 - }, - 3: { - xCoordinate: $6uUbQ$int16, - yCoordinate: $6uUbQ$int16, - xDeviceTable: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)), - yDeviceTable: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) - } -}); -let $47e0e8ef515d9903$var$EntryExitRecord = new $6uUbQ$Struct({ - entryAnchor: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }), - exitAnchor: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }) -}); -let $47e0e8ef515d9903$var$MarkRecord = new $6uUbQ$Struct({ - class: $6uUbQ$uint16, - markAnchor: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }) -}); -let $47e0e8ef515d9903$var$MarkArray = new $6uUbQ$Array($47e0e8ef515d9903$var$MarkRecord, $6uUbQ$uint16); -let $47e0e8ef515d9903$var$BaseRecord = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$Anchor), (t)=>t.parent.classCount); -let $47e0e8ef515d9903$var$BaseArray = new $6uUbQ$Array($47e0e8ef515d9903$var$BaseRecord, $6uUbQ$uint16); -let $47e0e8ef515d9903$var$ComponentRecord = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$Anchor), (t)=>t.parent.parent.classCount); -let $47e0e8ef515d9903$var$LigatureAttach = new $6uUbQ$Array($47e0e8ef515d9903$var$ComponentRecord, $6uUbQ$uint16); -let $47e0e8ef515d9903$var$LigatureArray = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$LigatureAttach), $6uUbQ$uint16); -let $47e0e8ef515d9903$export$73a8cfb19cd43a0f = new $6uUbQ$VersionedStruct('lookupType', { - 1: new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat: $47e0e8ef515d9903$var$ValueFormat, - value: new $47e0e8ef515d9903$var$ValueRecord() - }, - 2: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat: $47e0e8ef515d9903$var$ValueFormat, - valueCount: $6uUbQ$uint16, - values: new $6uUbQ$LazyArray(new $47e0e8ef515d9903$var$ValueRecord(), 'valueCount') - } - }), - 2: new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat1: $47e0e8ef515d9903$var$ValueFormat, - valueFormat2: $47e0e8ef515d9903$var$ValueFormat, - pairSetCount: $6uUbQ$uint16, - pairSets: new $6uUbQ$LazyArray(new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$PairSet), 'pairSetCount') - }, - 2: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat1: $47e0e8ef515d9903$var$ValueFormat, - valueFormat2: $47e0e8ef515d9903$var$ValueFormat, - classDef1: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - classDef2: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - class1Count: $6uUbQ$uint16, - class2Count: $6uUbQ$uint16, - classRecords: new $6uUbQ$LazyArray(new $6uUbQ$LazyArray($47e0e8ef515d9903$var$Class2Record, 'class2Count'), 'class1Count') - } - }), - 3: { - format: $6uUbQ$uint16, - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - entryExitCount: $6uUbQ$uint16, - entryExitRecords: new $6uUbQ$Array($47e0e8ef515d9903$var$EntryExitRecord, 'entryExitCount') - }, - 4: { - format: $6uUbQ$uint16, - markCoverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - baseCoverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $6uUbQ$uint16, - markArray: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$MarkArray), - baseArray: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$BaseArray) - }, - 5: { - format: $6uUbQ$uint16, - markCoverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - ligatureCoverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $6uUbQ$uint16, - markArray: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$MarkArray), - ligatureArray: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$LigatureArray) - }, - 6: { - format: $6uUbQ$uint16, - mark1Coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - mark2Coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $6uUbQ$uint16, - mark1Array: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$MarkArray), - mark2Array: new $6uUbQ$Pointer($6uUbQ$uint16, $47e0e8ef515d9903$var$BaseArray) - }, - 7: (0, $7cbbe4e24ef3cb75$export$841858b892ce1f4c), - 8: (0, $7cbbe4e24ef3cb75$export$5e6d09e6861162f6), - 9: { - posFormat: $6uUbQ$uint16, - lookupType: $6uUbQ$uint16, - extension: new $6uUbQ$Pointer($6uUbQ$uint32, null) - } -}); -// Fix circular reference -$47e0e8ef515d9903$export$73a8cfb19cd43a0f.versions[9].extension.type = $47e0e8ef515d9903$export$73a8cfb19cd43a0f; -var $47e0e8ef515d9903$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint32, { - header: { - scriptList: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$3e15fc05ce864229)), - featureList: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$aa18130def4b6cb4)), - lookupList: new $6uUbQ$Pointer($6uUbQ$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)($47e0e8ef515d9903$export$73a8cfb19cd43a0f)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $1a47b0c45c1c22fe$export$441b70b7971dd419)) - } -}); - - - - - -let $d3f442064af66e06$var$Sequence = new $6uUbQ$Array($6uUbQ$uint16, $6uUbQ$uint16); -let $d3f442064af66e06$var$AlternateSet = $d3f442064af66e06$var$Sequence; -let $d3f442064af66e06$var$Ligature = new $6uUbQ$Struct({ - glyph: $6uUbQ$uint16, - compCount: $6uUbQ$uint16, - components: new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.compCount - 1) -}); -let $d3f442064af66e06$var$LigatureSet = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $d3f442064af66e06$var$Ligature), $6uUbQ$uint16); -let $d3f442064af66e06$var$GSUBLookup = new $6uUbQ$VersionedStruct('lookupType', { - 1: new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 1: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - deltaGlyphID: $6uUbQ$int16 - }, - 2: { - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - glyphCount: $6uUbQ$uint16, - substitute: new $6uUbQ$LazyArray($6uUbQ$uint16, 'glyphCount') - } - }), - 2: { - substFormat: $6uUbQ$uint16, - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $6uUbQ$uint16, - sequences: new $6uUbQ$LazyArray(new $6uUbQ$Pointer($6uUbQ$uint16, $d3f442064af66e06$var$Sequence), 'count') - }, - 3: { - substFormat: $6uUbQ$uint16, - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $6uUbQ$uint16, - alternateSet: new $6uUbQ$LazyArray(new $6uUbQ$Pointer($6uUbQ$uint16, $d3f442064af66e06$var$AlternateSet), 'count') - }, - 4: { - substFormat: $6uUbQ$uint16, - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $6uUbQ$uint16, - ligatureSets: new $6uUbQ$LazyArray(new $6uUbQ$Pointer($6uUbQ$uint16, $d3f442064af66e06$var$LigatureSet), 'count') - }, - 5: (0, $7cbbe4e24ef3cb75$export$841858b892ce1f4c), - 6: (0, $7cbbe4e24ef3cb75$export$5e6d09e6861162f6), - 7: { - substFormat: $6uUbQ$uint16, - lookupType: $6uUbQ$uint16, - extension: new $6uUbQ$Pointer($6uUbQ$uint32, null) - }, - 8: { - substFormat: $6uUbQ$uint16, - coverage: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - backtrackCoverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'backtrackGlyphCount'), - lookaheadGlyphCount: $6uUbQ$uint16, - lookaheadCoverage: new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'lookaheadGlyphCount'), - glyphCount: $6uUbQ$uint16, - substitutes: new $6uUbQ$Array($6uUbQ$uint16, 'glyphCount') - } -}); -// Fix circular reference -$d3f442064af66e06$var$GSUBLookup.versions[7].extension.type = $d3f442064af66e06$var$GSUBLookup; -var $d3f442064af66e06$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint32, { - header: { - scriptList: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$3e15fc05ce864229)), - featureList: new $6uUbQ$Pointer($6uUbQ$uint16, (0, $7cbbe4e24ef3cb75$export$aa18130def4b6cb4)), - lookupList: new $6uUbQ$Pointer($6uUbQ$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)($d3f442064af66e06$var$GSUBLookup)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $1a47b0c45c1c22fe$export$441b70b7971dd419)) - } -}); - - - - - -let $71cfb3c4767fbd0c$var$JstfGSUBModList = new $6uUbQ$Array($6uUbQ$uint16, $6uUbQ$uint16); -let $71cfb3c4767fbd0c$var$JstfPriority = new $6uUbQ$Struct({ - shrinkageEnableGSUB: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageDisableGSUB: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageEnableGPOS: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageDisableGPOS: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageJstfMax: new $6uUbQ$Pointer($6uUbQ$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)((0, $47e0e8ef515d9903$export$73a8cfb19cd43a0f))), - extensionEnableGSUB: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionDisableGSUB: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionEnableGPOS: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionDisableGPOS: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionJstfMax: new $6uUbQ$Pointer($6uUbQ$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)((0, $47e0e8ef515d9903$export$73a8cfb19cd43a0f))) -}); -let $71cfb3c4767fbd0c$var$JstfLangSys = new $6uUbQ$Array(new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfPriority), $6uUbQ$uint16); -let $71cfb3c4767fbd0c$var$JstfLangSysRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - jstfLangSys: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfLangSys) -}); -let $71cfb3c4767fbd0c$var$JstfScript = new $6uUbQ$Struct({ - extenderGlyphs: new $6uUbQ$Pointer($6uUbQ$uint16, new $6uUbQ$Array($6uUbQ$uint16, $6uUbQ$uint16)), - defaultLangSys: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfLangSys), - langSysCount: $6uUbQ$uint16, - langSysRecords: new $6uUbQ$Array($71cfb3c4767fbd0c$var$JstfLangSysRecord, 'langSysCount') -}); -let $71cfb3c4767fbd0c$var$JstfScriptRecord = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - script: new $6uUbQ$Pointer($6uUbQ$uint16, $71cfb3c4767fbd0c$var$JstfScript, { - type: 'parent' - }) -}); -var $71cfb3c4767fbd0c$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint32, - scriptCount: $6uUbQ$uint16, - scriptList: new $6uUbQ$Array($71cfb3c4767fbd0c$var$JstfScriptRecord, 'scriptCount') -}); - - - - -// TODO: add this to restructure -class $d059a6bd2d3b5b63$var$VariableSizeNumber { - decode(stream, parent) { - switch(this.size(0, parent)){ - case 1: - return stream.readUInt8(); - case 2: - return stream.readUInt16BE(); - case 3: - return stream.readUInt24BE(); - case 4: - return stream.readUInt32BE(); - } - } - size(val, parent) { - return (0, $6uUbQ$resolveLength)(this._size, null, parent); - } - constructor(size){ - this._size = size; - } -} -let $d059a6bd2d3b5b63$var$MapDataEntry = new $6uUbQ$Struct({ - entry: new $d059a6bd2d3b5b63$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1, - innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 -}); -let $d059a6bd2d3b5b63$var$DeltaSetIndexMap = new $6uUbQ$Struct({ - entryFormat: $6uUbQ$uint16, - mapCount: $6uUbQ$uint16, - mapData: new $6uUbQ$Array($d059a6bd2d3b5b63$var$MapDataEntry, 'mapCount') -}); -var $d059a6bd2d3b5b63$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - majorVersion: $6uUbQ$uint16, - minorVersion: $6uUbQ$uint16, - itemVariationStore: new $6uUbQ$Pointer($6uUbQ$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)), - advanceWidthMapping: new $6uUbQ$Pointer($6uUbQ$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap), - LSBMapping: new $6uUbQ$Pointer($6uUbQ$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap), - RSBMapping: new $6uUbQ$Pointer($6uUbQ$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap) -}); - - - -let $dceeca3e1977ce30$var$Signature = new $6uUbQ$Struct({ - format: $6uUbQ$uint32, - length: $6uUbQ$uint32, - offset: $6uUbQ$uint32 -}); -let $dceeca3e1977ce30$var$SignatureBlock = new $6uUbQ$Struct({ - reserved: new $6uUbQ$Reserved($6uUbQ$uint16, 2), - cbSignature: $6uUbQ$uint32, - signature: new $6uUbQ$Buffer('cbSignature') -}); -var $dceeca3e1977ce30$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - ulVersion: $6uUbQ$uint32, - usNumSigs: $6uUbQ$uint16, - usFlag: $6uUbQ$uint16, - signatures: new $6uUbQ$Array($dceeca3e1977ce30$var$Signature, 'usNumSigs'), - signatureBlocks: new $6uUbQ$Array($dceeca3e1977ce30$var$SignatureBlock, 'usNumSigs') -}); - - - -let $8acd740a9435aad0$var$GaspRange = new $6uUbQ$Struct({ - rangeMaxPPEM: $6uUbQ$uint16, - rangeGaspBehavior: new $6uUbQ$Bitfield($6uUbQ$uint16, [ - 'grayscale', - 'gridfit', - 'symmetricSmoothing', - 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); -var $8acd740a9435aad0$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numRanges: $6uUbQ$uint16, - gaspRanges: new $6uUbQ$Array($8acd740a9435aad0$var$GaspRange, 'numRanges') // Sorted by ppem -}); - - - -let $b5f380243c34d6a0$var$DeviceRecord = new $6uUbQ$Struct({ - pixelSize: $6uUbQ$uint8, - maximumWidth: $6uUbQ$uint8, - widths: new $6uUbQ$Array($6uUbQ$uint8, (t)=>t.parent.parent.maxp.numGlyphs) -}); -var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -$b5f380243c34d6a0$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numRecords: $6uUbQ$int16, - sizeDeviceRecord: $6uUbQ$int32, - records: new $6uUbQ$Array($b5f380243c34d6a0$var$DeviceRecord, 'numRecords') -}); - - - -let $ca2df1256966e313$var$KernPair = new $6uUbQ$Struct({ - left: $6uUbQ$uint16, - right: $6uUbQ$uint16, - value: $6uUbQ$int16 -}); -let $ca2df1256966e313$var$ClassTable = new $6uUbQ$Struct({ - firstGlyph: $6uUbQ$uint16, - nGlyphs: $6uUbQ$uint16, - offsets: new $6uUbQ$Array($6uUbQ$uint16, 'nGlyphs'), - max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) -}); -let $ca2df1256966e313$var$Kern2Array = new $6uUbQ$Struct({ - off: (t)=>t._startOffset - t.parent.parent._startOffset, - len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2), - values: new $6uUbQ$LazyArray($6uUbQ$int16, 'len') -}); -let $ca2df1256966e313$var$KernSubtable = new $6uUbQ$VersionedStruct('format', { - 0: { - nPairs: $6uUbQ$uint16, - searchRange: $6uUbQ$uint16, - entrySelector: $6uUbQ$uint16, - rangeShift: $6uUbQ$uint16, - pairs: new $6uUbQ$Array($ca2df1256966e313$var$KernPair, 'nPairs') - }, - 2: { - rowWidth: $6uUbQ$uint16, - leftTable: new $6uUbQ$Pointer($6uUbQ$uint16, $ca2df1256966e313$var$ClassTable, { - type: 'parent' - }), - rightTable: new $6uUbQ$Pointer($6uUbQ$uint16, $ca2df1256966e313$var$ClassTable, { - type: 'parent' - }), - array: new $6uUbQ$Pointer($6uUbQ$uint16, $ca2df1256966e313$var$Kern2Array, { - type: 'parent' - }) - }, - 3: { - glyphCount: $6uUbQ$uint16, - kernValueCount: $6uUbQ$uint8, - leftClassCount: $6uUbQ$uint8, - rightClassCount: $6uUbQ$uint8, - flags: $6uUbQ$uint8, - kernValue: new $6uUbQ$Array($6uUbQ$int16, 'kernValueCount'), - leftClass: new $6uUbQ$Array($6uUbQ$uint8, 'glyphCount'), - rightClass: new $6uUbQ$Array($6uUbQ$uint8, 'glyphCount'), - kernIndex: new $6uUbQ$Array($6uUbQ$uint8, (t)=>t.leftClassCount * t.rightClassCount) - } -}); -let $ca2df1256966e313$var$KernTable = new $6uUbQ$VersionedStruct('version', { - 0: { - subVersion: $6uUbQ$uint16, - length: $6uUbQ$uint16, - format: $6uUbQ$uint8, - coverage: new $6uUbQ$Bitfield($6uUbQ$uint8, [ - 'horizontal', - 'minimum', - 'crossStream', - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: $ca2df1256966e313$var$KernSubtable, - padding: new $6uUbQ$Reserved($6uUbQ$uint8, (t)=>t.length - t._currentOffset) - }, - 1: { - length: $6uUbQ$uint32, - coverage: new $6uUbQ$Bitfield($6uUbQ$uint8, [ - null, - null, - null, - null, - null, - 'variation', - 'crossStream', - 'vertical' // Set if table has vertical kerning values - ]), - format: $6uUbQ$uint8, - tupleIndex: $6uUbQ$uint16, - subtable: $ca2df1256966e313$var$KernSubtable, - padding: new $6uUbQ$Reserved($6uUbQ$uint8, (t)=>t.length - t._currentOffset) - } -}); -var $ca2df1256966e313$export$2e2bcd8739ae039 = new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 0: { - nTables: $6uUbQ$uint16, - tables: new $6uUbQ$Array($ca2df1256966e313$var$KernTable, 'nTables') - }, - 1: { - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - nTables: $6uUbQ$uint32, - tables: new $6uUbQ$Array($ca2df1256966e313$var$KernTable, 'nTables') - } -}); - - - -var // Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -$7a9f92b0c46ebe33$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numGlyphs: $6uUbQ$uint16, - yPels: new $6uUbQ$Array($6uUbQ$uint8, 'numGlyphs') -}); - - - -var // PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -$2b2ccc419d152631$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - fontNumber: $6uUbQ$uint32, - pitch: $6uUbQ$uint16, - xHeight: $6uUbQ$uint16, - style: $6uUbQ$uint16, - typeFamily: $6uUbQ$uint16, - capHeight: $6uUbQ$uint16, - symbolSet: $6uUbQ$uint16, - typeface: new $6uUbQ$String(16), - characterComplement: new $6uUbQ$String(8), - fileName: new $6uUbQ$String(6), - strokeWeight: new $6uUbQ$String(1), - widthType: new $6uUbQ$String(1), - serifStyle: $6uUbQ$uint8, - reserved: new $6uUbQ$Reserved($6uUbQ$uint8) -}); - - - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. -let $ca5b40b9bcda9c9b$var$Ratio = new $6uUbQ$Struct({ - bCharSet: $6uUbQ$uint8, - xRatio: $6uUbQ$uint8, - yStartRatio: $6uUbQ$uint8, - yEndRatio: $6uUbQ$uint8 // Ending y-Ratio value -}); -let $ca5b40b9bcda9c9b$var$vTable = new $6uUbQ$Struct({ - yPelHeight: $6uUbQ$uint16, - yMax: $6uUbQ$int16, - yMin: $6uUbQ$int16 // Minimum value (in pels) for this yPelHeight -}); -let $ca5b40b9bcda9c9b$var$VdmxGroup = new $6uUbQ$Struct({ - recs: $6uUbQ$uint16, - startsz: $6uUbQ$uint8, - endsz: $6uUbQ$uint8, - entries: new $6uUbQ$Array($ca5b40b9bcda9c9b$var$vTable, 'recs') // The VDMX records -}); -var $ca5b40b9bcda9c9b$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - numRecs: $6uUbQ$uint16, - numRatios: $6uUbQ$uint16, - ratioRanges: new $6uUbQ$Array($ca5b40b9bcda9c9b$var$Ratio, 'numRatios'), - offsets: new $6uUbQ$Array($6uUbQ$uint16, 'numRatios'), - groups: new $6uUbQ$Array($ca5b40b9bcda9c9b$var$VdmxGroup, 'numRecs') // The actual VDMX groupings -}); - - - -var // Vertical Header Table -$69530a3c40755af0$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - ascent: $6uUbQ$int16, - descent: $6uUbQ$int16, - lineGap: $6uUbQ$int16, - advanceHeightMax: $6uUbQ$int16, - minTopSideBearing: $6uUbQ$int16, - minBottomSideBearing: $6uUbQ$int16, - yMaxExtent: $6uUbQ$int16, - caretSlopeRise: $6uUbQ$int16, - caretSlopeRun: $6uUbQ$int16, - caretOffset: $6uUbQ$int16, - reserved: new $6uUbQ$Reserved($6uUbQ$int16, 4), - metricDataFormat: $6uUbQ$int16, - numberOfMetrics: $6uUbQ$uint16 // Number of advance heights in the Vertical Metrics table -}); - - - -let $344073dd270f0e62$var$VmtxEntry = new $6uUbQ$Struct({ - advance: $6uUbQ$uint16, - bearing: $6uUbQ$int16 // The top sidebearing of the glyph -}); -var // Vertical Metrics Table -$344073dd270f0e62$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - metrics: new $6uUbQ$LazyArray($344073dd270f0e62$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics), - bearings: new $6uUbQ$LazyArray($6uUbQ$int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); - - - -let $3793b781918cfced$var$shortFrac = new $6uUbQ$Fixed(16, 'BE', 14); -let $3793b781918cfced$var$Correspondence = new $6uUbQ$Struct({ - fromCoord: $3793b781918cfced$var$shortFrac, - toCoord: $3793b781918cfced$var$shortFrac -}); -let $3793b781918cfced$var$Segment = new $6uUbQ$Struct({ - pairCount: $6uUbQ$uint16, - correspondence: new $6uUbQ$Array($3793b781918cfced$var$Correspondence, 'pairCount') -}); -var $3793b781918cfced$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - axisCount: $6uUbQ$uint32, - segment: new $6uUbQ$Array($3793b781918cfced$var$Segment, 'axisCount') -}); - - - - -class $6cb7dd5f47d82580$var$UnboundedArrayAccessor { - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - return this._items[index]; - } - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } - constructor(type, stream, parent){ - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } -} -class $6cb7dd5f47d82580$export$c5af1eebc882e39a extends $6uUbQ$Array { - decode(stream, parent) { - return new $6cb7dd5f47d82580$var$UnboundedArrayAccessor(this.type, stream, parent); - } - constructor(type){ - super(type, 0); - } -} -let $6cb7dd5f47d82580$export$8351f8c2ae2f103c = function(ValueType = $6uUbQ$uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - constructor(type){ - this.type = type; - } - } - ValueType = new Shadow(ValueType); - let BinarySearchHeader = new $6uUbQ$Struct({ - unitSize: $6uUbQ$uint16, - nUnits: $6uUbQ$uint16, - searchRange: $6uUbQ$uint16, - entrySelector: $6uUbQ$uint16, - rangeShift: $6uUbQ$uint16 - }); - let LookupSegmentSingle = new $6uUbQ$Struct({ - lastGlyph: $6uUbQ$uint16, - firstGlyph: $6uUbQ$uint16, - value: ValueType - }); - let LookupSegmentArray = new $6uUbQ$Struct({ - lastGlyph: $6uUbQ$uint16, - firstGlyph: $6uUbQ$uint16, - values: new $6uUbQ$Pointer($6uUbQ$uint16, new $6uUbQ$Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1), { - type: 'parent' - }) - }); - let LookupSingle = new $6uUbQ$Struct({ - glyph: $6uUbQ$uint16, - value: ValueType - }); - return new $6uUbQ$VersionedStruct($6uUbQ$uint16, { - 0: { - values: new $6cb7dd5f47d82580$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new $6uUbQ$Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new $6uUbQ$Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new $6uUbQ$Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: $6uUbQ$uint16, - count: $6uUbQ$uint16, - values: new $6uUbQ$Array(ValueType, 'count') - } - }); -}; -function $6cb7dd5f47d82580$export$79f7d93d790934ba(entryData = {}, lookupType = $6uUbQ$uint16) { - let entry = Object.assign({ - newState: $6uUbQ$uint16, - flags: $6uUbQ$uint16 - }, entryData); - let Entry = new $6uUbQ$Struct(entry); - let StateArray = new $6cb7dd5f47d82580$export$c5af1eebc882e39a(new $6uUbQ$Array($6uUbQ$uint16, (t)=>t.nClasses)); - let StateHeader = new $6uUbQ$Struct({ - nClasses: $6uUbQ$uint32, - classTable: new $6uUbQ$Pointer($6uUbQ$uint32, new $6cb7dd5f47d82580$export$8351f8c2ae2f103c(lookupType)), - stateArray: new $6uUbQ$Pointer($6uUbQ$uint32, StateArray), - entryTable: new $6uUbQ$Pointer($6uUbQ$uint32, new $6cb7dd5f47d82580$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader; -} -function $6cb7dd5f47d82580$export$105027425199cc51(entryData = {}, lookupType = $6uUbQ$uint16) { - let ClassLookupTable = new $6uUbQ$Struct({ - version () { - return 8; - }, - firstGlyph: $6uUbQ$uint16, - values: new $6uUbQ$Array($6uUbQ$uint8, $6uUbQ$uint16) - }); - let entry = Object.assign({ - newStateOffset: $6uUbQ$uint16, - // convert offset to stateArray index - newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: $6uUbQ$uint16 - }, entryData); - let Entry = new $6uUbQ$Struct(entry); - let StateArray = new $6cb7dd5f47d82580$export$c5af1eebc882e39a(new $6uUbQ$Array($6uUbQ$uint8, (t)=>t.nClasses)); - let StateHeader1 = new $6uUbQ$Struct({ - nClasses: $6uUbQ$uint16, - classTable: new $6uUbQ$Pointer($6uUbQ$uint16, ClassLookupTable), - stateArray: new $6uUbQ$Pointer($6uUbQ$uint16, StateArray), - entryTable: new $6uUbQ$Pointer($6uUbQ$uint16, new $6cb7dd5f47d82580$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader1; -} - - -let $6a3746e8c708f5a3$var$BslnSubtable = new $6uUbQ$VersionedStruct('format', { - 0: { - deltas: new $6uUbQ$Array($6uUbQ$int16, 32) - }, - 1: { - deltas: new $6uUbQ$Array($6uUbQ$int16, 32), - mappingData: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($6uUbQ$uint16) - }, - 2: { - standardGlyph: $6uUbQ$uint16, - controlPoints: new $6uUbQ$Array($6uUbQ$uint16, 32) - }, - 3: { - standardGlyph: $6uUbQ$uint16, - controlPoints: new $6uUbQ$Array($6uUbQ$uint16, 32), - mappingData: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($6uUbQ$uint16) - } -}); -var $6a3746e8c708f5a3$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - format: $6uUbQ$uint16, - defaultBaseline: $6uUbQ$uint16, - subtable: $6a3746e8c708f5a3$var$BslnSubtable -}); - - - -let $d0c76fac617b308a$var$Setting = new $6uUbQ$Struct({ - setting: $6uUbQ$uint16, - nameIndex: $6uUbQ$int16, - name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -let $d0c76fac617b308a$var$FeatureName = new $6uUbQ$Struct({ - feature: $6uUbQ$uint16, - nSettings: $6uUbQ$uint16, - settingTable: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array($d0c76fac617b308a$var$Setting, 'nSettings'), { - type: 'parent' - }), - featureFlags: new $6uUbQ$Bitfield($6uUbQ$uint8, [ - null, - null, - null, - null, - null, - null, - 'hasDefault', - 'exclusive' - ]), - defaultSetting: $6uUbQ$uint8, - nameIndex: $6uUbQ$int16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -var $d0c76fac617b308a$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - featureNameCount: $6uUbQ$uint16, - reserved1: new $6uUbQ$Reserved($6uUbQ$uint16), - reserved2: new $6uUbQ$Reserved($6uUbQ$uint32), - featureNames: new $6uUbQ$Array($d0c76fac617b308a$var$FeatureName, 'featureNameCount') -}); - - - -let $e83fd065f00fcd01$var$Axis = new $6uUbQ$Struct({ - axisTag: new $6uUbQ$String(4), - minValue: $6uUbQ$fixed32, - defaultValue: $6uUbQ$fixed32, - maxValue: $6uUbQ$fixed32, - flags: $6uUbQ$uint16, - nameID: $6uUbQ$uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] -}); -let $e83fd065f00fcd01$var$Instance = new $6uUbQ$Struct({ - nameID: $6uUbQ$uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID], - flags: $6uUbQ$uint16, - coord: new $6uUbQ$Array($6uUbQ$fixed32, (t)=>t.parent.axisCount), - postscriptNameID: new $6uUbQ$Optional($6uUbQ$uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0) -}); -var $e83fd065f00fcd01$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - offsetToData: $6uUbQ$uint16, - countSizePairs: $6uUbQ$uint16, - axisCount: $6uUbQ$uint16, - axisSize: $6uUbQ$uint16, - instanceCount: $6uUbQ$uint16, - instanceSize: $6uUbQ$uint16, - axis: new $6uUbQ$Array($e83fd065f00fcd01$var$Axis, 'axisCount'), - instance: new $6uUbQ$Array($e83fd065f00fcd01$var$Instance, 'instanceCount') -}); - - - -let $dbe33c8d3a7f131c$var$shortFrac = new $6uUbQ$Fixed(16, 'BE', 14); -class $dbe33c8d3a7f131c$var$Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; - } -} -let $dbe33c8d3a7f131c$var$gvar = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - axisCount: $6uUbQ$uint16, - globalCoordCount: $6uUbQ$uint16, - globalCoords: new $6uUbQ$Pointer($6uUbQ$uint32, new $6uUbQ$Array(new $6uUbQ$Array($dbe33c8d3a7f131c$var$shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: $6uUbQ$uint16, - flags: $6uUbQ$uint16, - offsetToData: $6uUbQ$uint32, - offsets: new $6uUbQ$Array(new $6uUbQ$Pointer($dbe33c8d3a7f131c$var$Offset, 'void', { - relativeTo: (ctx)=>ctx.offsetToData, - allowNull: false - }), (t)=>t.glyphCount + 1) -}); -var $dbe33c8d3a7f131c$export$2e2bcd8739ae039 = $dbe33c8d3a7f131c$var$gvar; - - - - -let $05b01887df96c4ee$var$ClassTable = new $6uUbQ$Struct({ - length: $6uUbQ$uint16, - coverage: $6uUbQ$uint16, - subFeatureFlags: $6uUbQ$uint32, - stateTable: new (0, $6cb7dd5f47d82580$export$105027425199cc51) -}); -let $05b01887df96c4ee$var$WidthDeltaRecord = new $6uUbQ$Struct({ - justClass: $6uUbQ$uint32, - beforeGrowLimit: $6uUbQ$fixed32, - beforeShrinkLimit: $6uUbQ$fixed32, - afterGrowLimit: $6uUbQ$fixed32, - afterShrinkLimit: $6uUbQ$fixed32, - growFlags: $6uUbQ$uint16, - shrinkFlags: $6uUbQ$uint16 -}); -let $05b01887df96c4ee$var$WidthDeltaCluster = new $6uUbQ$Array($05b01887df96c4ee$var$WidthDeltaRecord, $6uUbQ$uint32); -let $05b01887df96c4ee$var$ActionData = new $6uUbQ$VersionedStruct('actionType', { - 0: { - lowerLimit: $6uUbQ$fixed32, - upperLimit: $6uUbQ$fixed32, - order: $6uUbQ$uint16, - glyphs: new $6uUbQ$Array($6uUbQ$uint16, $6uUbQ$uint16) - }, - 1: { - addGlyph: $6uUbQ$uint16 - }, - 2: { - substThreshold: $6uUbQ$fixed32, - addGlyph: $6uUbQ$uint16, - substGlyph: $6uUbQ$uint16 - }, - 3: {}, - 4: { - variationAxis: $6uUbQ$uint32, - minimumLimit: $6uUbQ$fixed32, - noStretchValue: $6uUbQ$fixed32, - maximumLimit: $6uUbQ$fixed32 - }, - 5: { - flags: $6uUbQ$uint16, - glyph: $6uUbQ$uint16 - } -}); -let $05b01887df96c4ee$var$Action = new $6uUbQ$Struct({ - actionClass: $6uUbQ$uint16, - actionType: $6uUbQ$uint16, - actionLength: $6uUbQ$uint32, - actionData: $05b01887df96c4ee$var$ActionData, - padding: new $6uUbQ$Reserved($6uUbQ$uint8, (t)=>t.actionLength - t._currentOffset) -}); -let $05b01887df96c4ee$var$PostcompensationAction = new $6uUbQ$Array($05b01887df96c4ee$var$Action, $6uUbQ$uint32); -let $05b01887df96c4ee$var$PostCompensationTable = new $6uUbQ$Struct({ - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)(new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$PostcompensationAction)) -}); -let $05b01887df96c4ee$var$JustificationTable = new $6uUbQ$Struct({ - classTable: new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$ClassTable, { - type: 'parent' - }), - wdcOffset: $6uUbQ$uint16, - postCompensationTable: new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$PostCompensationTable, { - type: 'parent' - }), - widthDeltaClusters: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)(new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$WidthDeltaCluster, { - type: 'parent', - relativeTo: (ctx)=>ctx.wdcOffset - })) -}); -var $05b01887df96c4ee$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint32, - format: $6uUbQ$uint16, - horizontal: new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$JustificationTable), - vertical: new $6uUbQ$Pointer($6uUbQ$uint16, $05b01887df96c4ee$var$JustificationTable) -}); - - - - -let $03ee6ebd54db1053$var$LigatureData = { - action: $6uUbQ$uint16 -}; -let $03ee6ebd54db1053$var$ContextualData = { - markIndex: $6uUbQ$uint16, - currentIndex: $6uUbQ$uint16 -}; -let $03ee6ebd54db1053$var$InsertionData = { - currentInsertIndex: $6uUbQ$uint16, - markedInsertIndex: $6uUbQ$uint16 -}; -let $03ee6ebd54db1053$var$SubstitutionTable = new $6uUbQ$Struct({ - items: new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)(new $6uUbQ$Pointer($6uUbQ$uint32, new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c))) -}); -let $03ee6ebd54db1053$var$SubtableData = new $6uUbQ$VersionedStruct('type', { - 0: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba) - }, - 1: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$ContextualData), - substitutionTable: new $6uUbQ$Pointer($6uUbQ$uint32, $03ee6ebd54db1053$var$SubstitutionTable) - }, - 2: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$LigatureData), - ligatureActions: new $6uUbQ$Pointer($6uUbQ$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($6uUbQ$uint32)), - components: new $6uUbQ$Pointer($6uUbQ$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($6uUbQ$uint16)), - ligatureList: new $6uUbQ$Pointer($6uUbQ$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($6uUbQ$uint16)) - }, - 4: { - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c) - }, - 5: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$InsertionData), - insertionActions: new $6uUbQ$Pointer($6uUbQ$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($6uUbQ$uint16)) - } -}); -let $03ee6ebd54db1053$var$Subtable = new $6uUbQ$Struct({ - length: $6uUbQ$uint32, - coverage: $6uUbQ$uint24, - type: $6uUbQ$uint8, - subFeatureFlags: $6uUbQ$uint32, - table: $03ee6ebd54db1053$var$SubtableData, - padding: new $6uUbQ$Reserved($6uUbQ$uint8, (t)=>t.length - t._currentOffset) -}); -let $03ee6ebd54db1053$var$FeatureEntry = new $6uUbQ$Struct({ - featureType: $6uUbQ$uint16, - featureSetting: $6uUbQ$uint16, - enableFlags: $6uUbQ$uint32, - disableFlags: $6uUbQ$uint32 -}); -let $03ee6ebd54db1053$var$MorxChain = new $6uUbQ$Struct({ - defaultFlags: $6uUbQ$uint32, - chainLength: $6uUbQ$uint32, - nFeatureEntries: $6uUbQ$uint32, - nSubtables: $6uUbQ$uint32, - features: new $6uUbQ$Array($03ee6ebd54db1053$var$FeatureEntry, 'nFeatureEntries'), - subtables: new $6uUbQ$Array($03ee6ebd54db1053$var$Subtable, 'nSubtables') -}); -var $03ee6ebd54db1053$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$uint16, - unused: new $6uUbQ$Reserved($6uUbQ$uint16), - nChains: $6uUbQ$uint32, - chains: new $6uUbQ$Array($03ee6ebd54db1053$var$MorxChain, 'nChains') -}); - - - - -let $b7492a80b0d1a056$var$OpticalBounds = new $6uUbQ$Struct({ - left: $6uUbQ$int16, - top: $6uUbQ$int16, - right: $6uUbQ$int16, - bottom: $6uUbQ$int16 -}); -var $b7492a80b0d1a056$export$2e2bcd8739ae039 = new $6uUbQ$Struct({ - version: $6uUbQ$fixed32, - format: $6uUbQ$uint16, - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($b7492a80b0d1a056$var$OpticalBounds) -}); - - -let $c3395722bea751e2$var$tables = {}; -var $c3395722bea751e2$export$2e2bcd8739ae039 = $c3395722bea751e2$var$tables; -$c3395722bea751e2$var$tables.cmap = (0, $26a62205ad06574e$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.head = (0, $f2612a29f92ac062$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hhea = (0, $2c179dd593583073$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hmtx = (0, $bdc9060542264b85$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.maxp = (0, $dbf51cb3d3fe409d$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.name = (0, $2bcf221753ec8e32$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['OS/2'] = (0, $84b272aa31b70606$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.post = (0, $32d9e2eb9565d93c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.fpgm = (0, $5c0f37ca5ffb1850$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.loca = (0, $2b2b260902b1c57e$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.prep = (0, $7afb878c7bea4f66$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['cvt '] = (0, $5202bd9d9ad8eaac$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.glyf = (0, $6c92b6371bce8bd9$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['CFF '] = (0, $822ac0d589e4e237$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['CFF2'] = (0, $822ac0d589e4e237$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.VORG = (0, $2bbf2bc1ce37cd8f$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.EBLC = (0, $9911c4c7201c13de$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.CBLC = $c3395722bea751e2$var$tables.EBLC; -$c3395722bea751e2$var$tables.sbix = (0, $abb847051efd51b1$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.COLR = (0, $eb629188f3dfefdd$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.CPAL = (0, $08734b8e7dc64587$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.BASE = (0, $497cef411d884e34$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GDEF = (0, $cf5f33c63ef209e6$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GPOS = (0, $47e0e8ef515d9903$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GSUB = (0, $d3f442064af66e06$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.JSTF = (0, $71cfb3c4767fbd0c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.HVAR = (0, $d059a6bd2d3b5b63$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.DSIG = (0, $dceeca3e1977ce30$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.gasp = (0, $8acd740a9435aad0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hdmx = (0, $b5f380243c34d6a0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.kern = (0, $ca2df1256966e313$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.LTSH = (0, $7a9f92b0c46ebe33$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.PCLT = (0, $2b2ccc419d152631$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.VDMX = (0, $ca5b40b9bcda9c9b$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.vhea = (0, $69530a3c40755af0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.vmtx = (0, $344073dd270f0e62$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.avar = (0, $3793b781918cfced$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.bsln = (0, $6a3746e8c708f5a3$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.feat = (0, $d0c76fac617b308a$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.fvar = (0, $e83fd065f00fcd01$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.gvar = (0, $dbe33c8d3a7f131c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.just = (0, $05b01887df96c4ee$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.morx = (0, $03ee6ebd54db1053$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.opbd = (0, $b7492a80b0d1a056$export$2e2bcd8739ae039); - - -let $816c07a04b6dba87$var$TableEntry = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - checkSum: $6uUbQ$uint32, - offset: new $6uUbQ$Pointer($6uUbQ$uint32, 'void', { - type: 'global' - }), - length: $6uUbQ$uint32 -}); -let $816c07a04b6dba87$var$Directory = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - numTables: $6uUbQ$uint16, - searchRange: $6uUbQ$uint16, - entrySelector: $6uUbQ$uint16, - rangeShift: $6uUbQ$uint16, - tables: new $6uUbQ$Array($816c07a04b6dba87$var$TableEntry, 'numTables') -}); -$816c07a04b6dba87$var$Directory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -$816c07a04b6dba87$var$Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for(let tag in this.tables){ - let table = this.tables[tag]; - if (table) tables.push({ - tag: tag, - checkSum: 0, - offset: new $6uUbQ$VoidPointer((0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag], table), - length: (0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag].size(table) - }); - } - this.tables = tables; - } - this.tag = 'true'; - this.numTables = this.tables.length; - let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; -var $816c07a04b6dba87$export$2e2bcd8739ae039 = $816c07a04b6dba87$var$Directory; - - - - -function $12727730ddfc8bfe$export$2e0ae67339d5f1ac(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while(min <= max){ - let mid = min + max >> 1; - let res = cmp(arr[mid]); - if (res < 0) max = mid - 1; - else if (res > 0) min = mid + 1; - else return mid; - } - return -1; -} -function $12727730ddfc8bfe$export$d02631cccf789723(index, end) { - let range = []; - while(index < end)range.push(index++); - return range; -} -const $12727730ddfc8bfe$export$3d28c1996ced1f14 = new TextDecoder('ascii'); -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const $12727730ddfc8bfe$var$CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const $12727730ddfc8bfe$var$LOOKUP = new Uint8Array(256); -for(let i = 0; i < $12727730ddfc8bfe$var$CHARS.length; i++)$12727730ddfc8bfe$var$LOOKUP[$12727730ddfc8bfe$var$CHARS.charCodeAt(i)] = i; -function $12727730ddfc8bfe$export$94fdf11bafc8de6b(base64) { - let bufferLength = base64.length * 0.75; - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') bufferLength--; - } - let bytes = new Uint8Array(bufferLength); - let p = 0; - for(let i = 0, len = base64.length; i < len; i += 4){ - let encoded1 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i)]; - let encoded2 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 3)]; - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - return bytes; -} - - - - -class $f08dd41ef10b694c$export$2e2bcd8739ae039 { - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ - if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; - } - return null; - } - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) codepoint = this.encoding.get(codepoint) || codepoint; - else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) return gid; - } - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return cmap.codeMap.get(codepoint) || 0; - case 4: - { - let min = 0; - let max = cmap.segCount - 1; - while(min <= max){ - let mid = min + max >> 1; - if (codepoint < cmap.startCode.get(mid)) max = mid - 1; - else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; - else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); - else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) gid += cmap.idDelta.get(mid); - } - return gid & 0xffff; - } - } - return 0; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - case 12: - case 13: - { - let min = 0; - let max = cmap.nGroups - 1; - while(min <= max){ - let mid = min + max >> 1; - let group = cmap.groups.get(mid); - if (codepoint < group.startCharCode) max = mid - 1; - else if (codepoint > group.endCharCode) min = mid + 1; - else { - if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); - else return group.glyphID; - } - } - return 0; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) return 0; - let selectors = this.uvs.varSelectors.toArray(); - let i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(selectors, (x)=>variationSelector - x.varSelector); - let sel = selectors[i]; - if (i !== -1 && sel.defaultUVS) i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0); - if (i !== -1 && sel.nonDefaultUVS) { - i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue); - if (i !== -1) return sel.nonDefaultUVS[i].glyphID; - } - return 0; - } - getCharacterSet() { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return (0, $12727730ddfc8bfe$export$d02631cccf789723)(0, cmap.codeMap.length); - case 4: - { - let res = []; - let endCodes = cmap.endCode.toArray(); - for(let i = 0; i < endCodes.length; i++){ - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(start, tail)); - } - return res; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return (0, $12727730ddfc8bfe$export$d02631cccf789723)(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - case 12: - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - { - let res = []; - for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); - return res; - } - case 4: - { - let res = []; - for(let i = 0; i < cmap.segCount; i++){ - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - for(var c = start; c <= end; c++){ - let g = 0; - if (rangeOffset === 0) g = c + delta; - else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) g += delta; - } - if (g === gid) res.push(c); - } - } - return res; - } - case 12: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); - return res; - } - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - constructor(cmapTable){ - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [ - 3, - 10 - ], - [ - 0, - 6 - ], - [ - 0, - 4 - ], - // 16-bit subtables - [ - 3, - 1 - ], - [ - 0, - 3 - ], - [ - 0, - 2 - ], - [ - 0, - 1 - ], - [ - 0, - 0 - ] - ]); - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) for (let cmap of cmapTable.tables){ - let encoding = (0, $e449ad78d50845fe$export$badc544e0651b6b1)(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = (0, $e449ad78d50845fe$export$1dceb3c14ed68bee)(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - if (!this.cmap) throw new Error("Could not find a supported cmap table"); - this.uvs = this.findSubtable(cmapTable, [ - [ - 0, - 5 - ] - ]); - if (this.uvs && this.uvs.version !== 14) this.uvs = null; - } -} -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f08dd41ef10b694c$export$2e2bcd8739ae039.prototype, "getCharacterSet", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f08dd41ef10b694c$export$2e2bcd8739ae039.prototype, "codePointsForGlyph", null); - - - -class $0bba3a9db57637f3$export$2e2bcd8739ae039 { - process(glyphs, positions) { - for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - getKerning(left, right) { - let res = 0; - for (let table of this.kern.tables){ - if (table.coverage.crossStream) continue; - switch(table.version){ - case 0: - if (!table.coverage.horizontal) continue; - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) continue; - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - let val = 0; - let s = table.subtable; - switch(table.format){ - case 0: - let pairIdx = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(s.pairs, function(pair) { - return left - pair.left || right - pair.right; - }); - if (pairIdx >= 0) val = s.pairs[pairIdx].value; - break; - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - else leftOffset = s.array.off; - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) return 0; - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) res = val; - else res += val; - } - return res; - } - constructor(font){ - this.kern = font.kern; - } -} - - - -class $0a4bdfeb6dfd6f5e$export$2e2bcd8739ae039 { - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for(let index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.isMark) clusterEnd = index; - else { - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - clusterStart = clusterEnd = index; - } - } - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - return positions; - } - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) // LTR. TODO: RTL support. - baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - // position each of the mark glyphs relative to the base glyph - for(let index = clusterStart + 1; index <= clusterEnd; index++){ - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - // x positioning - switch(combiningClass){ - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - default: - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - // y positioning - switch(combiningClass){ - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - return; - } - getCombiningClass(codePoint) { - let combiningClass = (0, $6uUbQ$getCombiningClass)(codePoint); - // Thai / Lao need some per-character work - if ((codePoint & -256) === 0x0e00) { - if (combiningClass === 'Not_Reordered') switch(codePoint){ - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - case 0x0ebc: - return 'Below'; - } - else if (codePoint === 0x0e3a) return 'Below_Right'; - } - switch(combiningClass){ - // Hebrew - case 'CCC10': - case 'CCC11': - case 'CCC12': - case 'CCC13': - case 'CCC14': - case 'CCC15': - case 'CCC16': - case 'CCC17': - case 'CCC18': - case 'CCC20': - case 'CCC22': - return 'Below'; - case 'CCC23': - return 'Attached_Above'; - case 'CCC24': - return 'Above_Right'; - case 'CCC25': - case 'CCC19': - return 'Above_Left'; - case 'CCC26': - return 'Above'; - case 'CCC21': - break; - // Arabic and Syriac - case 'CCC27': - case 'CCC28': - case 'CCC30': - case 'CCC31': - case 'CCC33': - case 'CCC34': - case 'CCC35': - case 'CCC36': - return 'Above'; - case 'CCC29': - case 'CCC32': - return 'Below'; - // Thai - case 'CCC103': - return 'Below_Right'; - case 'CCC107': - return 'Above_Right'; - // Lao - case 'CCC118': - return 'Below'; - case 'CCC122': - return 'Above'; - // Tibetan - case 'CCC129': - case 'CCC132': - return 'Below'; - case 'CCC130': - return 'Above'; - } - return combiningClass; - } - constructor(font){ - this.font = font; - } -} - - -/** - * Represents a glyph bounding box - */ class $f34600ab9d7f70d8$export$2e2bcd8739ae039 { - /** - * The width of the bounding box - * @type {number} - */ get width() { - return this.maxX - this.minX; - } - /** - * The height of the bounding box - * @type {number} - */ get height() { - return this.maxY - this.minY; - } - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) this.minX = x; - if (x > this.maxX) this.maxX = x; - } - if (Math.abs(y) !== Infinity) { - if (y < this.minY) this.minY = y; - if (y > this.maxY) this.maxY = y; - } - } - copy() { - return new $f34600ab9d7f70d8$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); - } - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ - /** - * The minimum X position in the bounding box - * @type {number} - */ this.minX = minX; - /** - * The minimum Y position in the bounding box - * @type {number} - */ this.minY = minY; - /** - * The maxmimum X position in the bounding box - * @type {number} - */ this.maxX = maxX; - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ this.maxY = maxY; - } -} - - - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const $130d1a642ebcd2b7$var$UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: [ - 'bng2', - 'beng' - ], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: [ - 'dev2', - 'deva' - ], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: [ - 'gjr2', - 'gujr' - ], - Gurmukhi: [ - 'gur2', - 'guru' - ], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: [ - 'knd2', - 'knda' - ], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: [ - 'mlm2', - 'mlym' - ], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: [ - 'mym2', - 'mymr' - ], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: [ - 'ory2', - 'orya' - ], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: [ - 'tml2', - 'taml' - ], - Tai_Viet: 'tavt', - Telugu: [ - 'tel2', - 'telu' - ], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; -const $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS = {}; -for(let script in $130d1a642ebcd2b7$var$UNICODE_SCRIPTS){ - let tag = $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) for (let t of tag)$130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[t] = script; - else $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[tag] = script; -} -function $130d1a642ebcd2b7$export$b32f0b5f69d65e51(script) { - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; -} -function $130d1a642ebcd2b7$export$ce50e82f12a827a4(tag) { - return $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[tag]; -} -function $130d1a642ebcd2b7$export$e5cb25e204fb8450(string) { - let len = string.length; - let idx = 0; - while(idx < len){ - let code = string.charCodeAt(idx++); - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - let script = (0, $6uUbQ$getScript)(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - } - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS.Unknown; -} -function $130d1a642ebcd2b7$export$16fab0757cfc223d(codePoints) { - for(let i = 0; i < codePoints.length; i++){ - let codePoint = codePoints[i]; - let script = (0, $6uUbQ$getScript)(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - } - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS.Unknown; -} -// The scripts in this map are written from right to left -const $130d1a642ebcd2b7$var$RTL = { - arab: true, - hebr: true, - syrc: true, - thaa: true, - cprt: true, - khar: true, - phnx: true, - 'nko ': true, - lydi: true, - avst: true, - armi: true, - phli: true, - prti: true, - sarb: true, - orkh: true, - samr: true, - mand: true, - merc: true, - mero: true, - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, - mend: true, - nbat: true, - narb: true, - palm: true, - phlp: true // Psalter Pahlavi -}; -function $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script) { - if ($130d1a642ebcd2b7$var$RTL[script]) return 'rtl'; - return 'ltr'; -} - - -class $be07b3e97a42687a$export$2e2bcd8739ae039 { - /** - * The total advance width of the run. - * @type {number} - */ get advanceWidth() { - let width = 0; - for (let position of this.positions)width += position.xAdvance; - return width; - } - /** - * The total advance height of the run. - * @type {number} - */ get advanceHeight() { - let height = 0; - for (let position of this.positions)height += position.yAdvance; - return height; - } - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ get bbox() { - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - let x = 0; - let y = 0; - for(let index = 0; index < this.glyphs.length; index++){ - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - x += p.xAdvance; - y += p.yAdvance; - } - return bbox; - } - constructor(glyphs, features, script, language, direction){ - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ this.glyphs = glyphs; - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ this.positions = null; - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ this.script = script; - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ this.language = language || null; - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ this.direction = direction || $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script); - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ this.features = {}; - // Convert features to an object - if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; - else if (typeof features === 'object') this.features = features; - } -} - - -/** - * Represents positioning information for a glyph in a GlyphRun. - */ class $1ac75d9a55b67f01$export$2e2bcd8739ae039 { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ this.xAdvance = xAdvance; - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ this.yAdvance = yAdvance; - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ this.xOffset = xOffset; - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ this.yOffset = yOffset; - } -} - - - -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const $3b6302b64eccc32c$var$features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; -const $3b6302b64eccc32c$var$feature = (name, selector)=>[ - $3b6302b64eccc32c$var$features[name].code, - $3b6302b64eccc32c$var$features[name][selector] - ]; -const $3b6302b64eccc32c$var$OTMapping = { - rlig: $3b6302b64eccc32c$var$feature('ligatures', 'requiredLigatures'), - clig: $3b6302b64eccc32c$var$feature('ligatures', 'contextualLigatures'), - dlig: $3b6302b64eccc32c$var$feature('ligatures', 'rareLigatures'), - hlig: $3b6302b64eccc32c$var$feature('ligatures', 'historicalLigatures'), - liga: $3b6302b64eccc32c$var$feature('ligatures', 'commonLigatures'), - hist: $3b6302b64eccc32c$var$feature('ligatures', 'historicalLigatures'), - smcp: $3b6302b64eccc32c$var$feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: $3b6302b64eccc32c$var$feature('lowerCase', 'lowerCasePetiteCaps'), - frac: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - dnom: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - numr: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - afrc: $3b6302b64eccc32c$var$feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - case: $3b6302b64eccc32c$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), - ccmp: $3b6302b64eccc32c$var$feature('unicodeDecomposition', 'canonicalComposition'), - cpct: $3b6302b64eccc32c$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - valt: $3b6302b64eccc32c$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: $3b6302b64eccc32c$var$feature('contextualAlternates', 'swashAlternates'), - cswh: $3b6302b64eccc32c$var$feature('contextualAlternates', 'contextualSwashAlternates'), - curs: $3b6302b64eccc32c$var$feature('cursiveConnection', 'cursive'), - c2pc: $3b6302b64eccc32c$var$feature('upperCase', 'upperCasePetiteCaps'), - c2sc: $3b6302b64eccc32c$var$feature('upperCase', 'upperCaseSmallCaps'), - init: $3b6302b64eccc32c$var$feature('smartSwash', 'wordInitialSwashes'), - fin2: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - medi: $3b6302b64eccc32c$var$feature('smartSwash', 'nonFinalSwashes'), - med2: $3b6302b64eccc32c$var$feature('smartSwash', 'nonFinalSwashes'), - fin3: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - fina: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - pkna: $3b6302b64eccc32c$var$feature('kanaSpacing', 'proportionalKana'), - half: $3b6302b64eccc32c$var$feature('textSpacing', 'halfWidthText'), - halt: $3b6302b64eccc32c$var$feature('textSpacing', 'altHalfWidthText'), - hkna: $3b6302b64eccc32c$var$feature('alternateKana', 'alternateHorizKana'), - vkna: $3b6302b64eccc32c$var$feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - ital: $3b6302b64eccc32c$var$feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: $3b6302b64eccc32c$var$feature('numberCase', 'upperCaseNumbers'), - onum: $3b6302b64eccc32c$var$feature('numberCase', 'lowerCaseNumbers'), - mgrk: $3b6302b64eccc32c$var$feature('mathematicalExtras', 'mathematicalGreek'), - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - calt: $3b6302b64eccc32c$var$feature('contextualAlternates', 'contextualAlternates'), - vrt2: $3b6302b64eccc32c$var$feature('verticalSubstitution', 'substituteVerticalForms'), - vert: $3b6302b64eccc32c$var$feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: $3b6302b64eccc32c$var$feature('numberSpacing', 'monospacedNumbers'), - pnum: $3b6302b64eccc32c$var$feature('numberSpacing', 'proportionalNumbers'), - sups: $3b6302b64eccc32c$var$feature('verticalPosition', 'superiors'), - subs: $3b6302b64eccc32c$var$feature('verticalPosition', 'inferiors'), - ordn: $3b6302b64eccc32c$var$feature('verticalPosition', 'ordinals'), - pwid: $3b6302b64eccc32c$var$feature('textSpacing', 'proportionalText'), - hwid: $3b6302b64eccc32c$var$feature('textSpacing', 'halfWidthText'), - qwid: $3b6302b64eccc32c$var$feature('textSpacing', 'quarterWidthText'), - twid: $3b6302b64eccc32c$var$feature('textSpacing', 'thirdWidthText'), - fwid: $3b6302b64eccc32c$var$feature('textSpacing', 'proportionalText'), - palt: $3b6302b64eccc32c$var$feature('textSpacing', 'altProportionalText'), - trad: $3b6302b64eccc32c$var$feature('characterShape', 'traditionalCharacters'), - smpl: $3b6302b64eccc32c$var$feature('characterShape', 'simplifiedCharacters'), - jp78: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1978Characters'), - jp83: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1983Characters'), - jp90: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1990Characters'), - jp04: $3b6302b64eccc32c$var$feature('characterShape', 'JIS2004Characters'), - expt: $3b6302b64eccc32c$var$feature('characterShape', 'expertCharacters'), - hojo: $3b6302b64eccc32c$var$feature('characterShape', 'hojoCharacters'), - nlck: $3b6302b64eccc32c$var$feature('characterShape', 'NLCCharacters'), - tnam: $3b6302b64eccc32c$var$feature('characterShape', 'traditionalNamesCharacters'), - ruby: $3b6302b64eccc32c$var$feature('rubyKana', 'rubyKana'), - titl: $3b6302b64eccc32c$var$feature('styleOptions', 'titlingCaps'), - zero: $3b6302b64eccc32c$var$feature('typographicExtras', 'slashedZero'), - ss01: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwenty') -}; -// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose -// Add cv01-cv99 features -for(let i = 1; i <= 99; i++)$3b6302b64eccc32c$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ - $3b6302b64eccc32c$var$features.characterAlternatives.code, - i -]; -// create inverse mapping -let $3b6302b64eccc32c$var$AATMapping = {}; -for(let ot in $3b6302b64eccc32c$var$OTMapping){ - let aat = $3b6302b64eccc32c$var$OTMapping[ot]; - if ($3b6302b64eccc32c$var$AATMapping[aat[0]] == null) $3b6302b64eccc32c$var$AATMapping[aat[0]] = {}; - $3b6302b64eccc32c$var$AATMapping[aat[0]][aat[1]] = ot; -} -function $3b6302b64eccc32c$export$b813f7d2a1677c16(features) { - let res = {}; - for(let k in features){ - let r; - if (r = $3b6302b64eccc32c$var$OTMapping[k]) { - if (res[r[0]] == null) res[r[0]] = {}; - res[r[0]][r[1]] = features[k]; - } - } - return res; -} -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function $3b6302b64eccc32c$var$mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) var typeCode = $3b6302b64eccc32c$var$features[type] && $3b6302b64eccc32c$var$features[type].code; - else var typeCode = type; - if (isNaN(setting)) var settingCode = $3b6302b64eccc32c$var$features[type] && $3b6302b64eccc32c$var$features[type][setting]; - else var settingCode = setting; - return [ - typeCode, - settingCode - ]; -} -function $3b6302b64eccc32c$export$bd6df347a4f391c4(features) { - let res = {}; - if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ - let r; - let f = $3b6302b64eccc32c$var$mapFeatureStrings(features[k]); - if (r = $3b6302b64eccc32c$var$AATMapping[f[0]] && $3b6302b64eccc32c$var$AATMapping[f[0]][f[1]]) res[r] = true; - } - else if (typeof features === 'object') for(let type in features){ - let feature = features[type]; - for(let setting in feature){ - let r; - let f = $3b6302b64eccc32c$var$mapFeatureStrings([ - type, - setting - ]); - if (feature[setting] && (r = $3b6302b64eccc32c$var$AATMapping[f[0]] && $3b6302b64eccc32c$var$AATMapping[f[0]][f[1]])) res[r] = true; - } - } - return Object.keys(res); -} - - - - - - - -class $ff5ce077dae0f144$export$2e2bcd8739ae039 { - lookup(glyph) { - switch(this.table.version){ - case 0: - return this.table.values.getItem(glyph); - case 2: - case 4: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.firstGlyph === 0xffff) return null; - if (glyph < seg.firstGlyph) max = mid - 1; - else if (glyph > seg.lastGlyph) min = mid + 1; - else { - if (this.table.version === 2) return seg.value; - else return seg.values[glyph - seg.firstGlyph]; - } - } - return null; - } - case 6: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.glyph === 0xffff) return null; - if (glyph < seg.glyph) max = mid - 1; - else if (glyph > seg.glyph) min = mid + 1; - else return seg.value; - } - return null; - } - case 8: - return this.table.values[glyph - this.table.firstGlyph]; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - glyphsForValue(classValue) { - let res = []; - switch(this.table.version){ - case 2: - case 4: - for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(segment.firstGlyph, segment.lastGlyph + 1)); - else { - for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); - } - break; - case 6: - for (let segment of this.table.segments)if (segment.value === classValue) res.push(segment.glyph); - break; - case 8: - for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); - break; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - return res; - } - constructor(table){ - this.table = table; - } -} -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $ff5ce077dae0f144$export$2e2bcd8739ae039.prototype, "glyphsForValue", null); - - -const $50c7aac9316f2948$var$START_OF_TEXT_STATE = 0; -const $50c7aac9316f2948$var$START_OF_LINE_STATE = 1; -const $50c7aac9316f2948$var$END_OF_TEXT_CLASS = 0; -const $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS = 1; -const $50c7aac9316f2948$var$DELETED_GLYPH_CLASS = 2; -const $50c7aac9316f2948$var$END_OF_LINE_CLASS = 3; -const $50c7aac9316f2948$var$DONT_ADVANCE = 0x4000; -class $50c7aac9316f2948$export$2e2bcd8739ae039 { - process(glyphs, reverse, processEntry) { - let currentState = $50c7aac9316f2948$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ - let glyph = null; - let classCode = $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - if (index === glyphs.length || index === -1) classCode = $50c7aac9316f2948$var$END_OF_TEXT_CLASS; - else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) classCode = $50c7aac9316f2948$var$DELETED_GLYPH_CLASS; - else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) classCode = $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS; - } - } - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - if (classCode !== $50c7aac9316f2948$var$END_OF_TEXT_CLASS && classCode !== $50c7aac9316f2948$var$DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & $50c7aac9316f2948$var$DONT_ADVANCE); - } - currentState = entry.newState; - if (shouldAdvance) index += dir; - } - return glyphs; - } - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) return; - visited.add(state); - let { nClasses: nClasses, stateArray: stateArray, entryTable: entryTable } = this.stateTable; - let row = stateArray.getItem(state); - // Skip predefined classes - for(let classCode = 4; classCode < nClasses; classCode++){ - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)){ - if (opts.enter) opts.enter(glyph, entry); - if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); - if (opts.exit) opts.exit(glyph, entry); - } - } - } - constructor(stateTable){ - this.stateTable = stateTable; - this.lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(stateTable.classTable); - } -} - - - - -// indic replacement flags -const $55f71433a605c87d$var$MARK_FIRST = 0x8000; -const $55f71433a605c87d$var$MARK_LAST = 0x2000; -const $55f71433a605c87d$var$VERB = 0x000F; -// contextual substitution and glyph insertion flag -const $55f71433a605c87d$var$SET_MARK = 0x8000; -// ligature entry flags -const $55f71433a605c87d$var$SET_COMPONENT = 0x8000; -const $55f71433a605c87d$var$PERFORM_ACTION = 0x2000; -// ligature action masks -const $55f71433a605c87d$var$LAST_MASK = 0x80000000; -const $55f71433a605c87d$var$STORE_MASK = 0x40000000; -const $55f71433a605c87d$var$OFFSET_MASK = 0x3FFFFFFF; -const $55f71433a605c87d$var$VERTICAL_ONLY = 0x800000; -const $55f71433a605c87d$var$REVERSE_DIRECTION = 0x400000; -const $55f71433a605c87d$var$HORIZONTAL_AND_VERTICAL = 0x200000; -// glyph insertion flags -const $55f71433a605c87d$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; -const $55f71433a605c87d$var$MARKED_IS_KASHIDA_LIKE = 0x1000; -const $55f71433a605c87d$var$CURRENT_INSERT_BEFORE = 0x0800; -const $55f71433a605c87d$var$MARKED_INSERT_BEFORE = 0x0400; -const $55f71433a605c87d$var$CURRENT_INSERT_COUNT = 0x03E0; -const $55f71433a605c87d$var$MARKED_INSERT_COUNT = 0x001F; -class $55f71433a605c87d$export$2e2bcd8739ae039 { - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - // enable/disable the requested features - for (let feature of chain.features){ - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); - } - // remove deleted glyphs - let index = glyphs.length - 1; - while(index >= 0){ - if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); - index--; - } - return glyphs; - } - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let reverse = !!(this.subtable.coverage & $55f71433a605c87d$var$REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - getStateMachine(subtable) { - return new (0, $50c7aac9316f2948$export$2e2bcd8739ae039)(subtable.table.stateTable); - } - getProcessor() { - switch(this.subtable.type){ - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - processIndicRearragement(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$MARK_FIRST) this.firstGlyph = index; - if (entry.flags & $55f71433a605c87d$var$MARK_LAST) this.lastGlyph = index; - $55f71433a605c87d$var$reorderGlyphs(this.glyphs, entry.flags & $55f71433a605c87d$var$VERB, this.firstGlyph, this.lastGlyph); - } - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.flags & $55f71433a605c87d$var$SET_MARK) this.markedGlyph = index; - } - processLigature(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$SET_COMPONENT) this.ligatureStack.push(index); - if (entry.flags & $55f71433a605c87d$var$PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - while(!last){ - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - let action = actions.getItem(actionIndex++); - last = !!(action & $55f71433a605c87d$var$LAST_MASK); - let store = !!(action & $55f71433a605c87d$var$STORE_MASK); - let offset = (action & $55f71433a605c87d$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - let component = components.getItem(offset); - ligatureIndex += component; - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(subtable.table.lookupTable); - for(index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while(count--){ - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - if (!isBefore) glyphIndex++; - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$SET_MARK) this.markedIndex = index; - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & $55f71433a605c87d$var$MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $55f71433a605c87d$var$MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & $55f71433a605c87d$var$CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $55f71433a605c87d$var$CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ - feature.featureType, - feature.featureSetting - ]); - return features; - } - generateInputs(gid) { - if (!this.inputCache) this.generateInputCache(); - return this.inputCache[gid] || []; - } - generateInputCache() { - this.inputCache = {}; - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); - } - } - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) return; - let reverse = !!(subtable.coverage & $55f71433a605c87d$var$REVERSE_DIRECTION); - if (reverse) throw new Error('Reverse subtable, not supported.'); - this.subtable = subtable; - this.ligatureStack = []; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let input = []; - let stack = []; - this.glyphs = []; - stateMachine.traverse({ - enter: (glyph, entry)=>{ - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - if (count === 1) { - let result = input.map((g)=>g.id); - let cache = this.inputCache[found]; - if (cache) cache.push(result); - else this.inputCache[found] = [ - result - ]; - } - }, - exit: ()=>{ - ({ glyphs: this.glyphs, ligatureStack: this.ligatureStack } = stack.pop()); - input.pop(); - } - }); - } - constructor(font){ - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } -} -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $55f71433a605c87d$export$2e2bcd8739ae039.prototype, "getStateMachine", null); -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function $55f71433a605c87d$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) end.reverse(); - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) start.reverse(); - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} -function $55f71433a605c87d$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch(verb){ - case 0: - return glyphs; - case 1: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 0 - ]); - case 2: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 1 - ]); - case 3: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 1 - ]); - case 4: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ]); - case 5: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ], true, false); - case 6: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ]); - case 7: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ], false, true); - case 8: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ]); - case 9: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ], false, true); - case 10: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ]); - case 11: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ], true, false); - case 12: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ]); - case 13: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, false); - case 14: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], false, true); - case 15: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, true); - default: - throw new Error(`Unknown verb: ${verb}`); - } -} - - -class $ba6dd74203be8728$export$2e2bcd8739ae039 { - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); - this.morxProcessor.process(glyphRun.glyphs, $3b6302b64eccc32c$export$b813f7d2a1677c16(glyphRun.features)); - } - getAvailableFeatures(script, language) { - return $3b6302b64eccc32c$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); - } - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); - return result; - } - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - for (let codePoint of codePoints){ - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); - else strings.add(s); - } - } - constructor(font){ - this.font = font; - this.morxProcessor = new (0, $55f71433a605c87d$export$2e2bcd8739ae039)(font); - this.fallbackPosition = false; - } -} - - - -class $94d7a73bd2edfc9a$export$2e2bcd8739ae039 { - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features)if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - if (global) this.globalFeatures[feature] = true; - } - } - /** - * Add features to the last stage - */ add(arg, global = true) { - if (this.stages.length === 0) this.stages.push([]); - if (typeof arg === 'string') arg = [ - arg - ]; - if (Array.isArray(arg)) this._addFeatures(arg, global); - else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else throw new Error("Unsupported argument to ShapingPlan#add"); - } - /** - * Add a new stage - */ addStage(arg, global) { - if (typeof arg === 'function') this.stages.push(arg, []); - else { - this.stages.push([]); - this.add(arg, global); - } - } - setFeatureOverrides(features) { - if (Array.isArray(features)) this.add(features); - else if (typeof features === 'object') for(let tag in features){ - if (features[tag]) this.add(tag); - else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - /** - * Assigns the global features to the given glyphs - */ assignGlobalFeatures(glyphs) { - for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; - } - /** - * Executes the planned stages using the given OTProcessor - */ process(processor, glyphs, positions) { - for (let stage of this.stages){ - if (typeof stage === 'function') { - if (!positions) stage(this.font, glyphs, this); - } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); - } - } - constructor(font, script, direction){ - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } -} - - - - -const $649970d87335b30f$var$VARIATION_FEATURES = [ - 'rvrn' -]; -const $649970d87335b30f$var$COMMON_FEATURES = [ - 'ccmp', - 'locl', - 'rlig', - 'mark', - 'mkmk' -]; -const $649970d87335b30f$var$FRACTIONAL_FEATURES = [ - 'frac', - 'numr', - 'dnom' -]; -const $649970d87335b30f$var$HORIZONTAL_FEATURES = [ - 'calt', - 'clig', - 'liga', - 'rclt', - 'curs', - 'kern' -]; -const $649970d87335b30f$var$VERTICAL_FEATURES = [ - 'vert' -]; -const $649970d87335b30f$var$DIRECTIONAL_FEATURES = { - ltr: [ - 'ltra', - 'ltrm' - ], - rtl: [ - 'rtla', - 'rtlm' - ] -}; -class $649970d87335b30f$export$2e2bcd8739ae039 { - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - static planPreprocessing(plan) { - plan.add({ - global: [ - ...$649970d87335b30f$var$VARIATION_FEATURES, - ...$649970d87335b30f$var$DIRECTIONAL_FEATURES[plan.direction] - ], - local: $649970d87335b30f$var$FRACTIONAL_FEATURES - }); - } - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - static planPostprocessing(plan, userFeatures) { - plan.add([ - ...$649970d87335b30f$var$COMMON_FEATURES, - ...$649970d87335b30f$var$HORIZONTAL_FEATURES - ]); - plan.setFeatureOverrides(userFeatures); - } - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for(let i = 0; i < glyphs.length; i++){ - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { - let start = i; - let end = i + 1; - // Apply numerator - while(start > 0 && (0, $6uUbQ$isDigit)(glyphs[start - 1].codePoints[0])){ - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - // Apply denominator - while(end < glyphs.length && (0, $6uUbQ$isDigit)(glyphs[end].codePoints[0])){ - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} -(0, $6uUbQ$_)($649970d87335b30f$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); - - - - - - -const $764eb544bbe1ccf0$var$trie = new (0, $6uUbQ$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==")); -const $764eb544bbe1ccf0$var$FEATURES = [ - 'isol', - 'fina', - 'fin2', - 'fin3', - 'medi', - 'med2', - 'init' -]; -const $764eb544bbe1ccf0$var$ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; -const $764eb544bbe1ccf0$var$ISOL = 'isol'; -const $764eb544bbe1ccf0$var$FINA = 'fina'; -const $764eb544bbe1ccf0$var$FIN2 = 'fin2'; -const $764eb544bbe1ccf0$var$FIN3 = 'fin3'; -const $764eb544bbe1ccf0$var$MEDI = 'medi'; -const $764eb544bbe1ccf0$var$MED2 = 'med2'; -const $764eb544bbe1ccf0$var$INIT = 'init'; -const $764eb544bbe1ccf0$var$NONE = null; -// Each entry is [prevAction, curAction, nextState] -const $764eb544bbe1ccf0$var$STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 2: prev was D/L in ISOL form, willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 1 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 3 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 4 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 6 - ] - ], - // State 3: prev was D in FINA form, willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 1 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 3 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 4 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 6 - ] - ], - // State 4: prev was FINA ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 6: prev was DALATH/RISH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$FIN3, - 5 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ] -]; -class $764eb544bbe1ccf0$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ccmp', - 'locl' - ]); - for(let i = 0; i < $764eb544bbe1ccf0$var$FEATURES.length; i++){ - let feature = $764eb544bbe1ccf0$var$FEATURES[i]; - plan.addStage(feature, false); - } - plan.addStage('mset'); - } - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - let prev = -1; - let state = 0; - let actions = []; - // Apply the state machine to map glyphs to features - for(let i = 0; i < glyphs.length; i++){ - let curAction, prevAction; - var glyph = glyphs[i]; - let type = $764eb544bbe1ccf0$var$getShapingClass(glyph.codePoints[0]); - if (type === $764eb544bbe1ccf0$var$ShapingClasses.Transparent) { - actions[i] = $764eb544bbe1ccf0$var$NONE; - continue; - } - [prevAction, curAction, state] = $764eb544bbe1ccf0$var$STATE_TABLE[state][type]; - if (prevAction !== $764eb544bbe1ccf0$var$NONE && prev !== -1) actions[prev] = prevAction; - actions[i] = curAction; - prev = i; - } - // Apply the chosen features to their respective glyphs - for(let index = 0; index < glyphs.length; index++){ - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) glyph.features[feature] = true; - } - } -} -function $764eb544bbe1ccf0$var$getShapingClass(codePoint) { - let res = $764eb544bbe1ccf0$var$trie.get(codePoint); - if (res) return res - 1; - let category = (0, $6uUbQ$getCategory)(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') return $764eb544bbe1ccf0$var$ShapingClasses.Transparent; - return $764eb544bbe1ccf0$var$ShapingClasses.Non_Joining; -} - - - - - -class $85d408632270248b$export$2e2bcd8739ae039 { - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - get cur() { - return this.glyphs[this.index] || null; - } - shouldIgnore(glyph) { - return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; - } - move(dir) { - this.index += dir; - while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; - if (0 > this.index || this.index >= this.glyphs.length) return null; - return this.glyphs[this.index]; - } - next() { - return this.move(1); - } - prev() { - return this.move(-1); - } - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while(count--)this.move(dir); - return this.glyphs[this.index]; - } - constructor(glyphs, options){ - this.glyphs = glyphs; - this.reset(options); - } -} - - - -const $a83b9c36aaa94fd3$var$DEFAULT_SCRIPTS = [ - 'DFLT', - 'dflt', - 'latn' -]; -class $a83b9c36aaa94fd3$export$2e2bcd8739ae039 { - findScript(script) { - if (this.table.scriptList == null) return null; - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script)for (let entry of this.table.scriptList){ - if (entry.tag === s) return entry; - } - return null; - } - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) entry = this.findScript($a83b9c36aaa94fd3$var$DEFAULT_SCRIPTS); - if (!entry) return this.scriptTag; - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - if (!direction || direction !== this.direction) this.direction = direction || $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script); - if (language && language.length < 4) language += ' '.repeat(4 - language.length); - if (!language || language !== this.languageTag) { - this.language = null; - for (let lang of this.script.langSysRecords)if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - changed = true; - } - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) for (let featureIndex of this.language.featureIndexes){ - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - return this.scriptTag; - } - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures){ - let feature = this.features[tag]; - if (!feature) continue; - for (let lookupIndex of feature.lookupListIndexes){ - if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - lookups.sort((a, b)=>a.index - b.index); - return lookups; - } - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) return null; - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions){ - if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; - } - return null; - } - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) return -1; - let records = variations.featureVariationRecords; - for(let i = 0; i < records.length; i++){ - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) return i; - } - return -1; - } - variationConditionsMatch(conditions, coords) { - return conditions.every((condition)=>{ - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new (0, $85d408632270248b$export$2e2bcd8739ae039)(glyphs); - for (let { feature: feature, lookup: lookup } of lookups){ - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - while(this.glyphIterator.index < glyphs.length){ - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - for (let table of lookup.subTables){ - let res = this.applyLookup(lookup.lookupType, table); - if (res) break; - } - this.glyphIterator.next(); - } - } - } - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - for (let lookupRecord of lookupRecords){ - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - // Apply lookup subtables until one matches - for (let table of lookup.subTables){ - if (this.applyLookup(lookup.lookupType, table)) break; - } - } - this.glyphIterator.reset(options, glyphIndex); - return true; - } - coverageIndex(coverage, glyph) { - if (glyph == null) glyph = this.glyphIterator.cur.id; - switch(coverage.version){ - case 1: - return coverage.glyphs.indexOf(glyph); - case 2: - for (let range of coverage.rangeRecords){ - if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; - } - break; - } - return -1; - } - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ - if (matched) matched.push(this.glyphIterator.index); - idx++; - glyph = this.glyphIterator.next(); - } - this.glyphIterator.index = pos; - if (idx < sequence.length) return false; - return matched || true; - } - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id); - } - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>{ - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) return false; - return component === glyph.id; - }, []); - } - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0); - } - getClassID(glyph, classDef) { - switch(classDef.version){ - case 1: - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; - break; - case 2: - for (let range of classDef.classRangeRecord){ - if (range.start <= glyph && glyph <= range.end) return range.class; - } - break; - } - return 0; - } - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)); - } - applyContext(table) { - let index, set; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - set = table.ruleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) return false; - set = table.classSet[index]; - for (let rule of set){ - if (this.classSequenceMatches(1, rule.classes, table.classDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - applyChainingContext(table) { - let index; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let set = table.chainRuleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) return false; - for (let rule of rules){ - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule.input, table.inputClassDef) && this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - constructor(font, table){ - this.font = font; - this.table = table; - this.script = null; - this.scriptTag = null; - this.language = null; - this.languageTag = null; - this.features = {}; - this.lookups = {}; - // Setup variation substitutions - this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; - // initialize to default script + language - this.selectScript(); - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } -} - - -class $10e7b257e1a9a756$export$2e2bcd8739ae039 { - get id() { - return this._id; - } - set id(id) { - this._id = id; - this.substituted = true; - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $6uUbQ$isMark)); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - copy() { - return new $10e7b257e1a9a756$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); - } - constructor(font, id, codePoints = [], features){ - this._font = font; - this.codePoints = codePoints; - this.id = id; - this.features = {}; - if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ - let feature = features[i]; - this.features[feature] = true; - } - else if (typeof features === 'object') Object.assign(this.features, features); - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } -} - - -class $e1c6bbc8cb416f8c$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ljmo', - 'vjmo', - 'tjmo' - ], false); - } - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while(i < glyphs.length){ - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = $e1c6bbc8cb416f8c$var$getType(code); - [action, state] = $e1c6bbc8cb416f8c$var$STATE_TABLE[state][type]; - switch(action){ - case $e1c6bbc8cb416f8c$var$DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) i = $e1c6bbc8cb416f8c$var$decompose(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = $e1c6bbc8cb416f8c$var$compose(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - $e1c6bbc8cb416f8c$var$reorderToneMark(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = $e1c6bbc8cb416f8c$var$insertDottedCircle(glyphs, i, plan.font); - break; - } - i++; - } - } -} -(0, $6uUbQ$_)($e1c6bbc8cb416f8c$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -const $e1c6bbc8cb416f8c$var$HANGUL_BASE = 0xac00; -const $e1c6bbc8cb416f8c$var$HANGUL_END = 0xd7a4; -const $e1c6bbc8cb416f8c$var$HANGUL_COUNT = $e1c6bbc8cb416f8c$var$HANGUL_END - $e1c6bbc8cb416f8c$var$HANGUL_BASE + 1; -const $e1c6bbc8cb416f8c$var$L_BASE = 0x1100; // lead -const $e1c6bbc8cb416f8c$var$V_BASE = 0x1161; // vowel -const $e1c6bbc8cb416f8c$var$T_BASE = 0x11a7; // trail -const $e1c6bbc8cb416f8c$var$L_COUNT = 19; -const $e1c6bbc8cb416f8c$var$V_COUNT = 21; -const $e1c6bbc8cb416f8c$var$T_COUNT = 28; -const $e1c6bbc8cb416f8c$var$L_END = $e1c6bbc8cb416f8c$var$L_BASE + $e1c6bbc8cb416f8c$var$L_COUNT - 1; -const $e1c6bbc8cb416f8c$var$V_END = $e1c6bbc8cb416f8c$var$V_BASE + $e1c6bbc8cb416f8c$var$V_COUNT - 1; -const $e1c6bbc8cb416f8c$var$T_END = $e1c6bbc8cb416f8c$var$T_BASE + $e1c6bbc8cb416f8c$var$T_COUNT - 1; -const $e1c6bbc8cb416f8c$var$DOTTED_CIRCLE = 0x25cc; -const $e1c6bbc8cb416f8c$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const $e1c6bbc8cb416f8c$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const $e1c6bbc8cb416f8c$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const $e1c6bbc8cb416f8c$var$isTone = (code)=>0x302e <= code && code <= 0x302f; -const $e1c6bbc8cb416f8c$var$isLVT = (code)=>$e1c6bbc8cb416f8c$var$HANGUL_BASE <= code && code <= $e1c6bbc8cb416f8c$var$HANGUL_END; -const $e1c6bbc8cb416f8c$var$isLV = (code)=>code - $e1c6bbc8cb416f8c$var$HANGUL_BASE < $e1c6bbc8cb416f8c$var$HANGUL_COUNT && (code - $e1c6bbc8cb416f8c$var$HANGUL_BASE) % $e1c6bbc8cb416f8c$var$T_COUNT === 0; -const $e1c6bbc8cb416f8c$var$isCombiningL = (code)=>$e1c6bbc8cb416f8c$var$L_BASE <= code && code <= $e1c6bbc8cb416f8c$var$L_END; -const $e1c6bbc8cb416f8c$var$isCombiningV = (code)=>$e1c6bbc8cb416f8c$var$V_BASE <= code && code <= $e1c6bbc8cb416f8c$var$V_END; -const $e1c6bbc8cb416f8c$var$isCombiningT = (code)=>$e1c6bbc8cb416f8c$var$T_BASE + 1 && 1 <= code && code <= $e1c6bbc8cb416f8c$var$T_END; -// Character categories -const $e1c6bbc8cb416f8c$var$X = 0; // Other character -const $e1c6bbc8cb416f8c$var$L = 1; // Leading consonant -const $e1c6bbc8cb416f8c$var$V = 2; // Medial vowel -const $e1c6bbc8cb416f8c$var$T = 3; // Trailing consonant -const $e1c6bbc8cb416f8c$var$LV = 4; // Composed syllable -const $e1c6bbc8cb416f8c$var$LVT = 5; // Composed syllable -const $e1c6bbc8cb416f8c$var$M = 6; // Tone mark -// This function classifies a character using the above categories. -function $e1c6bbc8cb416f8c$var$getType(code) { - if ($e1c6bbc8cb416f8c$var$isL(code)) return $e1c6bbc8cb416f8c$var$L; - if ($e1c6bbc8cb416f8c$var$isV(code)) return $e1c6bbc8cb416f8c$var$V; - if ($e1c6bbc8cb416f8c$var$isT(code)) return $e1c6bbc8cb416f8c$var$T; - if ($e1c6bbc8cb416f8c$var$isLV(code)) return $e1c6bbc8cb416f8c$var$LV; - if ($e1c6bbc8cb416f8c$var$isLVT(code)) return $e1c6bbc8cb416f8c$var$LVT; - if ($e1c6bbc8cb416f8c$var$isTone(code)) return $e1c6bbc8cb416f8c$var$M; - return $e1c6bbc8cb416f8c$var$X; -} -// State machine actions -const $e1c6bbc8cb416f8c$var$NO_ACTION = 0; -const $e1c6bbc8cb416f8c$var$DECOMPOSE = 1; -const $e1c6bbc8cb416f8c$var$COMPOSE = 2; -const $e1c6bbc8cb416f8c$var$TONE_MARK = 4; -const $e1c6bbc8cb416f8c$var$INVALID = 5; -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const $e1c6bbc8cb416f8c$var$STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$INVALID, - 0 - ] - ], - // State 1: - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$COMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$INVALID, - 0 - ] - ], - // State 2: or - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$COMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$TONE_MARK, - 0 - ] - ], - // State 3: or - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$TONE_MARK, - 0 - ] - ] -]; -function $e1c6bbc8cb416f8c$var$getGlyph(font, code, features) { - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, font.glyphForCodePoint(code).id, [ - code - ], features); -} -function $e1c6bbc8cb416f8c$var$decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let s = code - $e1c6bbc8cb416f8c$var$HANGUL_BASE; - let t = $e1c6bbc8cb416f8c$var$T_BASE + s % $e1c6bbc8cb416f8c$var$T_COUNT; - s = s / $e1c6bbc8cb416f8c$var$T_COUNT | 0; - let l = $e1c6bbc8cb416f8c$var$L_BASE + s / $e1c6bbc8cb416f8c$var$V_COUNT | 0; - let v = $e1c6bbc8cb416f8c$var$V_BASE + s % $e1c6bbc8cb416f8c$var$V_COUNT; - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $e1c6bbc8cb416f8c$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = $e1c6bbc8cb416f8c$var$getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - let vjmo = $e1c6bbc8cb416f8c$var$getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - let insert = [ - ljmo, - vjmo - ]; - if (t > $e1c6bbc8cb416f8c$var$T_BASE) { - let tjmo = $e1c6bbc8cb416f8c$var$getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} -function $e1c6bbc8cb416f8c$var$compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = $e1c6bbc8cb416f8c$var$getType(code); - let prev = glyphs[i - 1].codePoints[0]; - let prevType = $e1c6bbc8cb416f8c$var$getType(prev); - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === $e1c6bbc8cb416f8c$var$LV && type === $e1c6bbc8cb416f8c$var$T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === $e1c6bbc8cb416f8c$var$V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - // Make sure L and V are combining characters - if ($e1c6bbc8cb416f8c$var$isCombiningL(l) && $e1c6bbc8cb416f8c$var$isCombiningV(v)) lv = $e1c6bbc8cb416f8c$var$HANGUL_BASE + ((l - $e1c6bbc8cb416f8c$var$L_BASE) * $e1c6bbc8cb416f8c$var$V_COUNT + (v - $e1c6bbc8cb416f8c$var$V_BASE)) * $e1c6bbc8cb416f8c$var$T_COUNT; - } - let t = tjmo && tjmo.codePoints[0] || $e1c6bbc8cb416f8c$var$T_BASE; - if (lv != null && (t === $e1c6bbc8cb416f8c$var$T_BASE || $e1c6bbc8cb416f8c$var$isCombiningT(t))) { - let s = lv + (t - $e1c6bbc8cb416f8c$var$T_BASE); - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === $e1c6bbc8cb416f8c$var$V ? 3 : 2; - glyphs.splice(i - del + 1, del, $e1c6bbc8cb416f8c$var$getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) ljmo.features.ljmo = true; - if (vjmo) vjmo.features.vjmo = true; - if (tjmo) tjmo.features.tjmo = true; - if (prevType === $e1c6bbc8cb416f8c$var$LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - $e1c6bbc8cb416f8c$var$decompose(glyphs, i - 1, font); - return i + 1; - } - return i; -} -function $e1c6bbc8cb416f8c$var$getLength(code) { - switch($e1c6bbc8cb416f8c$var$getType(code)){ - case $e1c6bbc8cb416f8c$var$LV: - case $e1c6bbc8cb416f8c$var$LVT: - return 1; - case $e1c6bbc8cb416f8c$var$V: - return 2; - case $e1c6bbc8cb416f8c$var$T: - return 3; - } -} -function $e1c6bbc8cb416f8c$var$reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) return; - let prev = glyphs[i - 1].codePoints[0]; - let len = $e1c6bbc8cb416f8c$var$getLength(prev); - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} -function $e1c6bbc8cb416f8c$var$insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - if (font.hasGlyphForCodePoint($e1c6bbc8cb416f8c$var$DOTTED_CIRCLE)) { - let dottedCircle = $e1c6bbc8cb416f8c$var$getGlyph(font, $e1c6bbc8cb416f8c$var$DOTTED_CIRCLE, glyph.features); - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - return i; -} - - - - - - - - - -var $4b0735ca6c692ea5$exports = {}; -$4b0735ca6c692ea5$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}"); - - -var $aa333a9607471296$exports = {}; -$aa333a9607471296$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}"); - - -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -const $90a9d3398ee54fe5$export$a513ea61a7bee91c = { - X: 1, - C: 2, - V: 4, - N: 8, - H: 16, - ZWNJ: 32, - ZWJ: 64, - M: 128, - SM: 256, - VD: 512, - A: 1024, - Placeholder: 2048, - Dotted_Circle: 4096, - RS: 8192, - Coeng: 16384, - Repha: 32768, - Ra: 65536, - CM: 131072, - Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). -}; -const $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0 = { - Start: 1, - Ra_To_Become_Reph: 2, - Pre_M: 4, - Pre_C: 8, - Base_C: 16, - After_Main: 32, - Above_C: 64, - Before_Sub: 128, - Below_C: 256, - After_Sub: 512, - Before_Post: 1024, - Post_C: 2048, - After_Post: 4096, - Final_C: 8192, - SMVD: 16384, - End: 32768 -}; -const $90a9d3398ee54fe5$export$8519deaa7de2b07 = $90a9d3398ee54fe5$export$a513ea61a7bee91c.C | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Ra | $90a9d3398ee54fe5$export$a513ea61a7bee91c.CM | $90a9d3398ee54fe5$export$a513ea61a7bee91c.V | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Placeholder | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Dotted_Circle; -const $90a9d3398ee54fe5$export$bbcd928767338e0d = $90a9d3398ee54fe5$export$a513ea61a7bee91c.ZWJ | $90a9d3398ee54fe5$export$a513ea61a7bee91c.ZWNJ; -const $90a9d3398ee54fe5$export$ca9599b2a300afc = $90a9d3398ee54fe5$export$a513ea61a7bee91c.H | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Coeng; -const $90a9d3398ee54fe5$export$e99d119da76a0fc5 = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; -const $90a9d3398ee54fe5$export$f647c9cfdd77d95a = { - // Khmer - 0x17BE: [ - 0x17C1, - 0x17BE - ], - 0x17BF: [ - 0x17C1, - 0x17BF - ], - 0x17C0: [ - 0x17C1, - 0x17C0 - ], - 0x17C4: [ - 0x17C1, - 0x17C4 - ], - 0x17C5: [ - 0x17C1, - 0x17C5 - ] -}; - - - -const { decompositions: $7826f90f6f0cecc9$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports))); -const $7826f90f6f0cecc9$var$trie = new (0, $6uUbQ$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("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")); -const $7826f90f6f0cecc9$var$stateMachine = new (0, $6uUbQ$dfa)((0, (/*@__PURE__*/$parcel$interopDefault($4b0735ca6c692ea5$exports)))); -class $7826f90f6f0cecc9$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($7826f90f6f0cecc9$var$setupSyllables); - plan.addStage([ - 'locl', - 'ccmp' - ]); - plan.addStage($7826f90f6f0cecc9$var$initialReordering); - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - plan.addStage($7826f90f6f0cecc9$var$finalReordering); - plan.addStage({ - local: [ - 'init' - ], - global: [ - 'pres', - 'abvs', - 'blws', - 'psts', - 'haln', - 'dist', - 'abvm', - 'blwm', - 'calt', - 'clig' - ] - }); - // Setup the indic config for the selected script - plan.unicodeScript = $130d1a642ebcd2b7$export$ce50e82f12a827a4(plan.script); - plan.indicConfig = (0, $90a9d3398ee54fe5$export$e99d119da76a0fc5)[plan.unicodeScript] || (0, $90a9d3398ee54fe5$export$e99d119da76a0fc5).Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - // TODO: turn off kern (Khmer) and liga features. - } - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - let d = (0, $90a9d3398ee54fe5$export$f647c9cfdd77d95a)[codepoint] || $7826f90f6f0cecc9$var$decompositions[codepoint]; - if (d) { - let decomposed = d.map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $6uUbQ$_)($7826f90f6f0cecc9$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -function $7826f90f6f0cecc9$var$indicCategory(glyph) { - return $7826f90f6f0cecc9$var$trie.get(glyph.codePoints[0]) >> 8; -} -function $7826f90f6f0cecc9$var$indicPosition(glyph) { - return 1 << ($7826f90f6f0cecc9$var$trie.get(glyph.codePoints[0]) & 0xff); -} -class $7826f90f6f0cecc9$var$IndicInfo { - constructor(category, position, syllableType, syllable){ - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $7826f90f6f0cecc9$var$setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of $7826f90f6f0cecc9$var$stateMachine.match(glyphs.map($7826f90f6f0cecc9$var$indicCategory))){ - if (start > last) { - ++syllable; - for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).X, (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo(1 << $7826f90f6f0cecc9$var$indicCategory(glyphs[i]), $7826f90f6f0cecc9$var$indicPosition(glyphs[i]), tags[0], syllable); - last = end + 1; - } - if (last < glyphs.length) { - ++syllable; - for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).X, (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } -} -function $7826f90f6f0cecc9$var$isConsonant(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$8519deaa7de2b07); -} -function $7826f90f6f0cecc9$var$isJoiner(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$bbcd928767338e0d); -} -function $7826f90f6f0cecc9$var$isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$ca9599b2a300afc); -} -function $7826f90f6f0cecc9$var$wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs)glyph.features = { - [feature]: true - }; - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([ - feature - ], glyphs); - return glyphs.length === 1; -} -function $7826f90f6f0cecc9$var$consonantPosition(font, consonant, virama) { - let glyphs = [ - virama, - consonant, - virama - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C; - else if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C; - else if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C; - return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; -} -function $7826f90f6f0cecc9$var$initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, virama, [ - indicConfig.virama - ]); - for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) glyphs[i].shaperInfo.position = $7826f90f6f0cecc9$var$consonantPosition(font, glyphs[i].copy(), info); - } - for(let start = 0, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, start)){ - let { category: category, syllableType: syllableType } = glyphs[start].shaperInfo; - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue; - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo(1 << $7826f90f6f0cecc9$var$indicCategory(g), $7826f90f6f0cecc9$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); - // Insert after possible Repha. - let i = start; - while(i < end && glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha)i++; - glyphs.splice(i++, 0, g); - end++; - } - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - let base = end; - let limit = start; - let hasReph = false; - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$7826f90f6f0cecc9$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ)) { - // See if it matches the 'rphf' feature. - let g = [ - glyphs[start].copy(), - glyphs[start + 1].copy(), - glyphs[start + 2].copy() - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $7826f90f6f0cecc9$var$wouldSubstitute(g, 'rphf')) { - limit += 2; - while(limit < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha) { - limit++; - while(limit < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - switch(indicConfig.basePos){ - case 'Last': - { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - do { - let info = glyphs[--i].shaperInfo; - // until a consonant is found - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C && (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C || seenBelow)) { - base = i; - break; - } - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C) seenBelow = true; - base = i; - } else if (start < i && info.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ && glyphs[i - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) break; - }while (i > limit); - break; - } - case 'First': - // The first consonant is always the base. - base = start; - // Mark all subsequent consonants as below. - for(let i = base + 1; i < end; i++)if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C; - } - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) hasReph = false; - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - // Reorder characters - for(let i = start; i < base; i++){ - let info = glyphs[i].shaperInfo; - info.position = Math.min((0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_C, info.position); - } - if (base < end) glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - for(let j = i + 1; j < end; j++)if ($7826f90f6f0cecc9$var$isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Final_C; - break; - } - break; - } - // Handle beginning Ra - if (hasReph) glyphs[start].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) { - let j; - for(j = end - 1; j > i; j--){ - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) break; - } - if (glyphs[j].shaperInfo.category !== (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - break; - } - } - // Attach misc marks to previous char to move with them. - let lastPos = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Start; - for(let i = start; i < end; i++){ - let info = glyphs[i].shaperInfo; - if (info.category & ((0, $90a9d3398ee54fe5$export$bbcd928767338e0d) | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).N | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).RS | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).CM | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc) & info.category)) { - info.position = lastPos; - if (info.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && info.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for(let j = i; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } else if (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD) lastPos = info.position; - } - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for(let i = base + 1; i < end; i++){ - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) { - for(let j = last + 1; j < i; j++)if (glyphs[j].shaperInfo.position < (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD) glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - last = i; - } else if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) last = i; - } - let arr = glyphs.slice(start, end); - arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - // Find base again - for(let i = start; i < end; i++)if (glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) { - base = i; - break; - } - // Setup features now - // Reph - for(let i = start; i < end && glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; i++)glyphs[i].features.rphf = true; - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for(let i = start; i < base; i++){ - glyphs[i].features.half = true; - if (blwf) glyphs[i].features.blwf = true; - } - // Post-base - for(let i = base + 1; i < end; i++){ - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Ra && glyphs[i + 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ)) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - let prefLen = 2; - if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for(let i = base + 1; i + prefLen - 1 < end; i++){ - let g = [ - glyphs[i].copy(), - glyphs[i + 1].copy() - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(g, 'pref')) { - for(let j = 0; j < prefLen; j++)glyphs[i++].features.pref = true; - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) for(; i < end; i++)glyphs[i].features.cfar = true; - break; - } - } - // Apply ZWJ/ZWNJ effects - for(let i = start + 1; i < end; i++)if ($7826f90f6f0cecc9$var$isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWNJ; - let j = i; - do { - j--; - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - // A ZWNJ disables HALF. - if (nonJoiner) delete glyphs[j].features.half; - }while (j > start && !$7826f90f6f0cecc9$var$isConsonant(glyphs[j])); - } - } -} -function $7826f90f6f0cecc9$var$finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - for(let start = 0, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, start)){ - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - let tryPref = !!features.pref; - // Find base again - let base = start; - for(; base < end; base++)if (glyphs[base].shaperInfo.position >= (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) { - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while(base < end && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[base]))base++; - glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).BASE_C; - tryPref = false; - } - break; - } - } - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){ - while(i < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[i]))i++; - if (i === end || !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[i])) break; - i++; // Skip halant. - while(i < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[i]))i++; - if (i < end && $7826f90f6f0cecc9$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C) { - base = i; - glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; - } - } - if (start < base && glyphs[base].shaperInfo.position > (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) base--; - break; - } - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ) base--; - if (base < end) while(start < base && glyphs[base].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).N | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc)))base--; - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - if (start + 1 < end && start < base) { - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc))))newPos--; - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if ($7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos + 1 < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[newPos + 1])) newPos++; - } else newPos = start; // No move. - } - if (start < newPos && glyphs[newPos].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - // Now go see if there's actually any matras... - for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) base--; - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - newPos--; - } - } - } - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && glyphs[start].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && glyphs[start].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while(newRephPos < base && !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $7826f90f6f0cecc9$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Main) { - newRephPos = base; - while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Main)newRephPos++; - found = newRephPos < end; - } - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Sub) { - newRephPos = base; - while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ((0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C | (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Post | (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD)))newRephPos++; - found = newRephPos < end; - } - } - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while(newRephPos < base && !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $7826f90f6f0cecc9$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - } - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD)newRephPos--; - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if ($7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) newRephPos--; - } - } - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - if (start < base && base <= newRephPos) base--; - } - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc))))newPos--; - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - let oldPos = i; - for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - newPos--; - break; - } - } - } - if (newPos > start && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[newPos])) newPos++; - } - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - if (newPos <= base && base < oldPos) base++; - } - break; - } - } - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M && (!start || !/Cf|Mn/.test((0, $6uUbQ$getCategory)(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true; - } -} -function $7826f90f6f0cecc9$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - - - - - - - - - -const { categories: $7ab494fe977143c6$var$categories, decompositions: $7ab494fe977143c6$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports))); -const $7ab494fe977143c6$var$trie = new (0, $6uUbQ$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("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")); -const $7ab494fe977143c6$var$stateMachine = new (0, $6uUbQ$dfa)((0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports)))); -class $7ab494fe977143c6$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($7ab494fe977143c6$var$setupSyllables); - // Default glyph pre-processing group - plan.addStage([ - 'locl', - 'ccmp', - 'nukt', - 'akhn' - ]); - // Reordering group - plan.addStage($7ab494fe977143c6$var$clearSubstitutionFlags); - plan.addStage([ - 'rphf' - ], false); - plan.addStage($7ab494fe977143c6$var$recordRphf); - plan.addStage($7ab494fe977143c6$var$clearSubstitutionFlags); - plan.addStage([ - 'pref' - ]); - plan.addStage($7ab494fe977143c6$var$recordPref); - // Orthographic unit shaping group - plan.addStage([ - 'rkrf', - 'abvf', - 'blwf', - 'half', - 'pstf', - 'vatu', - 'cjct' - ]); - plan.addStage($7ab494fe977143c6$var$reorder); - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - // Standard topographic presentation and positional feature application - plan.addStage([ - 'abvs', - 'blws', - 'pres', - 'psts', - 'dist', - 'abvm', - 'blwm' - ]); - } - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - if ($7ab494fe977143c6$var$decompositions[codepoint]) { - let decomposed = $7ab494fe977143c6$var$decompositions[codepoint].map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $6uUbQ$_)($7ab494fe977143c6$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS'); -function $7ab494fe977143c6$var$useCategory(glyph) { - return $7ab494fe977143c6$var$trie.get(glyph.codePoints[0]); -} -class $7ab494fe977143c6$var$USEInfo { - constructor(category, syllableType, syllable){ - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $7ab494fe977143c6$var$setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of $7ab494fe977143c6$var$stateMachine.match(glyphs.map($7ab494fe977143c6$var$useCategory))){ - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $7ab494fe977143c6$var$USEInfo($7ab494fe977143c6$var$categories[$7ab494fe977143c6$var$useCategory(glyphs[i])], tags[0], syllable); - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for(let i = start; i < start + limit; i++)glyphs[i].features.rphf = true; - } -} -function $7ab494fe977143c6$var$clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs)glyph.substituted = false; -} -function $7ab494fe977143c6$var$recordRphf(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; -} -function $7ab494fe977143c6$var$recordPref(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; -} -function $7ab494fe977143c6$var$reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - for(let start = 0, end = $7ab494fe977143c6$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7ab494fe977143c6$var$nextSyllable(glyphs, start)){ - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue; - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = info; - // Insert after possible Repha. - for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - // Move things forward. - if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant. - for(i = start + 1; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($7ab494fe977143c6$var$isBase(info) || $7ab494fe977143c6$var$isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if ($7ab494fe977143c6$var$isHalant(glyphs[i])) i--; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - // Move things back. - for(i = start, j = end; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($7ab494fe977143c6$var$isBase(info) || $7ab494fe977143c6$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = $7ab494fe977143c6$var$isHalant(glyphs[i]) ? i + 1 : i; - else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } -} -function $7ab494fe977143c6$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} -function $7ab494fe977143c6$var$isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} -function $7ab494fe977143c6$var$isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} - - -const $102b6fe50f1d50b4$var$SHAPERS = { - arab: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mong: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - syrc: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - 'nko ': (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - phag: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mand: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mani: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - phlp: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - hang: (0, $e1c6bbc8cb416f8c$export$2e2bcd8739ae039), - bng2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - beng: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - dev2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - deva: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gjr2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gujr: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - guru: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gur2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - knda: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - knd2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - mlm2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - mlym: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - ory2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - orya: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - taml: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - tml2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - telu: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - tel2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - khmr: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - bali: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - batk: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - brah: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - bugi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - buhd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - cakm: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - cham: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - dupl: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - egyp: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - gran: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - hano: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - java: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - kthi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - kali: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - khar: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - khoj: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sind: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - lepc: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - limb: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - mahj: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - modi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - saur: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - shrd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sidd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sinh: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - sund: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sylo: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tglg: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tagb: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tale: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - lana: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tavt: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - takr: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tibt: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tfng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tirh: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - latn: (0, $649970d87335b30f$export$2e2bcd8739ae039), - DFLT: (0, $649970d87335b30f$export$2e2bcd8739ae039 // Default - ) -}; -function $102b6fe50f1d50b4$export$7877a478dd30fd3d(script) { - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script){ - let shaper = $102b6fe50f1d50b4$var$SHAPERS[s]; - if (shaper) return shaper; - } - return 0, $649970d87335b30f$export$2e2bcd8739ae039; -} - - - - - -class $0a876c45f1f7c41c$export$2e2bcd8739ae039 extends (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039) { - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let glyph = this.glyphIterator.cur; - switch(table.version){ - case 1: - glyph.id = glyph.id + table.deltaGlyphID & 0xffff; - break; - case 2: - glyph.id = table.substitute.get(index); - break; - } - return true; - } - case 2: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i)=>{ - let glyph = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - return false; - } - case 3: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - return false; - } - case 4: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - for (let ligature of table.ligatureSets.get(index)){ - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) continue; - let curGlyph = this.glyphIterator.cur; - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched)characters.push(...this.glyphs[index].codePoints); - // Create the replacement ligature glyph - let ligatureGlyph = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark; - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched){ - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) idx = matchIndex; - else while(idx < matchIndex){ - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) for(let i = idx; i < this.glyphs.length; i++){ - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else break; - } - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for(let i = matched.length - 1; i >= 0; i--)this.glyphs.splice(matched[i], 1); - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - return false; - } - case 5: - return this.applyContext(table); - case 6: - return this.applyChainingContext(table); - case 7: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} - - - -class $c96c93587d49c14d$export$2e2bcd8739ae039 extends (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039) { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) position.xAdvance += value.xAdvance; - if (value.yAdvance != null) position.yAdvance += value.yAdvance; - if (value.xPlacement != null) position.xOffset += value.xPlacement; - if (value.yPlacement != null) position.yOffset += value.yPlacement; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - // TODO: device tables - } - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - this.applyPositionValue(0, table.value); - break; - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - return true; - } - case 2: - { - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) return false; - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - let set = table.pairSets.get(index); - for (let pair of set)if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - return false; - case 2: - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) return false; - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - case 3: - { - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) return false; - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) return false; - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) return false; - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - switch(this.direction){ - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - return true; - } - case 4: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - if (baseGlyphIndex < 0) return false; - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) return false; - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 5: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - if (baseGlyphIndex < 0) return false; - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) return false; - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 6: - { - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) return false; - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) return false; - let cur = this.glyphIterator.cur; - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) good = true; - else if (cur.ligatureComponent === prev.ligatureComponent) good = true; - } else // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true; - if (!good) return false; - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) return false; - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - case 7: - return this.applyContext(table); - case 8: - return this.applyChainingContext(table); - case 9: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - return { - x: x, - y: y - }; - } - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i); - this.fixMarkAttachment(); - } - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - fixMarkAttachment() { - for(let i = 0; i < this.glyphs.length; i++){ - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - if (this.direction === 'ltr') for(let k = j; k < i; k++){ - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - else for(let k = j + 1; k < i + 1; k++){ - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } -} - - -class $a62492810de27e3d$export$2e2bcd8739ae039 { - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map((glyph)=>new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, glyph.id, [ - ...glyph.codePoints - ])); - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = $102b6fe50f1d50b4$export$7877a478dd30fd3d(script); - this.plan = new (0, $94d7a73bd2edfc9a$export$2e2bcd8739ae039)(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - // Assign chosen features to output glyph run - for(let key in this.plan.allFeatures)glyphRun.features[key] = true; - } - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions); - if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions); - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - return this.GPOSProcessor && this.GPOSProcessor.features; - } - zeroMarkAdvances(positions) { - for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - getAvailableFeatures(script, language) { - let features = []; - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - return features; - } - constructor(font){ - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - if (font.GSUB) this.GSUBProcessor = new (0, $0a876c45f1f7c41c$export$2e2bcd8739ae039)(font, font.GSUB); - if (font.GPOS) this.GPOSProcessor = new (0, $c96c93587d49c14d$export$2e2bcd8739ae039)(font, font.GPOS); - } -} - - -class $4c0a7fa5df7a9ab1$export$2e2bcd8739ae039 { - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) script = $130d1a642ebcd2b7$export$e5cb25e204fb8450(string); - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string)codePoints.push(...glyph.codePoints); - script = $130d1a642ebcd2b7$export$16fab0757cfc223d(codePoints); - } - var glyphs = string; - } - let glyphRun = new (0, $be07b3e97a42687a$export$2e2bcd8739ae039)(glyphs, features, script, language, direction); - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - // Setup the advanced layout engine - if (this.engine && this.engine.setup) this.engine.setup(glyphRun); - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) this.engine.cleanup(); - return glyphRun; - } - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun); - } - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map((glyph)=>new (0, $1ac75d9a55b67f01$export$2e2bcd8739ae039)(glyph.advanceWidth)); - let positioned = null; - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun); - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new (0, $0a4bdfeb6dfd6f5e$export$2e2bcd8739ae039)(this.font); - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) this.kernProcessor = new (0, $0bba3a9db57637f3$export$2e2bcd8739ae039)(this.font); - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) // BMP - switch(ch >> 8){ - case 0x00: - return ch === 0x00AD; - case 0x03: - return ch === 0x034F; - case 0x06: - return ch === 0x061C; - case 0x17: - return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: - return 0x180B <= ch && ch <= 0x180E; - case 0x20: - return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; - case 0xFE: - return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; - case 0xFF: - return 0xFFF0 <= ch && ch <= 0xFFF8; - default: - return false; - } - else // Other planes - switch(plane){ - case 0x01: - return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; - case 0x0E: - return 0xE0000 <= ch && ch <= 0xE0FFF; - default: - return false; - } - } - getAvailableFeatures(script, language) { - let features = []; - if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language)); - if (this.font.kern && features.indexOf('kern') === -1) features.push('kern'); - return features; - } - stringsForGlyph(gid) { - let result = new Set; - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint)); - if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string); - return Array.from(result); - } - constructor(font){ - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) this.engine = new (0, $ba6dd74203be8728$export$2e2bcd8739ae039)(this.font); - else if (this.font.GSUB || this.font.GPOS) this.engine = new (0, $a62492810de27e3d$export$2e2bcd8739ae039)(this.font); - } -} - - - - - - -const $f43aec954cdfdf21$var$SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; -class $f43aec954cdfdf21$export$2e2bcd8739ae039 { - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ toFunction() { - return (ctx)=>{ - this.commands.forEach((c)=>{ - return ctx[c.command].apply(ctx, c.args); - }); - }; - } - /** - * Converts the path to an SVG path data string - * @return {string} - */ toSVG() { - let cmds = this.commands.map((c)=>{ - let args = c.args.map((arg)=>Math.round(arg * 100) / 100); - return `${$f43aec954cdfdf21$var$SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - return cmds.join(''); - } - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ get cbox() { - if (!this._cbox) { - let cbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - for (let command of this.commands)for(let i = 0; i < command.args.length; i += 2)cbox.addPoint(command.args[i], command.args[i + 1]); - this._cbox = Object.freeze(cbox); - } - return this._cbox; - } - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ get bbox() { - if (this._bbox) return this._bbox; - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - let cx = 0, cy = 0; - let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - for (let c of this.commands)switch(c.command){ - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - var p0 = [ - cx, - cy - ]; - var p1 = [ - cp1x, - cp1y - ]; - var p2 = [ - cp2x, - cp2y - ]; - var p3 = [ - p3x, - p3y - ]; - for(var i = 0; i <= 1; i++){ - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) bbox.addPoint(f(t), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t)); - } - continue; - } - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) bbox.addPoint(f(t1), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t1)); - } - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) bbox.addPoint(f(t2), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t2)); - } - } - cx = p3x; - cy = p3y; - break; - } - return this._bbox = Object.freeze(bbox); - } - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ mapPoints(fn) { - let path = new $f43aec954cdfdf21$export$2e2bcd8739ae039; - for (let c of this.commands){ - let args = []; - for(let i = 0; i < c.args.length; i += 2){ - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - path[c.command](...args); - } - return path; - } - /** - * Transforms the path by the given matrix. - */ transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y)=>{ - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [ - tx, - ty - ]; - }); - } - /** - * Translates the path by the given offset. - */ translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - /** - * Rotates the path by the given angle (in radians). - */ rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - /** - * Scales the path. - */ scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } - constructor(){ - this.commands = []; - this._bbox = null; - this._cbox = null; - } -} -for (let command of [ - 'moveTo', - 'lineTo', - 'quadraticCurveTo', - 'bezierCurveTo', - 'closePath' -])$f43aec954cdfdf21$export$2e2bcd8739ae039.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command: command, - args: args - }); - return this; -}; - - - -var $7713b9b7b438dff8$export$2e2bcd8739ae039 = [ - '.notdef', - '.null', - 'nonmarkingreturn', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quotesingle', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'grave', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'Adieresis', - 'Aring', - 'Ccedilla', - 'Eacute', - 'Ntilde', - 'Odieresis', - 'Udieresis', - 'aacute', - 'agrave', - 'acircumflex', - 'adieresis', - 'atilde', - 'aring', - 'ccedilla', - 'eacute', - 'egrave', - 'ecircumflex', - 'edieresis', - 'iacute', - 'igrave', - 'icircumflex', - 'idieresis', - 'ntilde', - 'oacute', - 'ograve', - 'ocircumflex', - 'odieresis', - 'otilde', - 'uacute', - 'ugrave', - 'ucircumflex', - 'udieresis', - 'dagger', - 'degree', - 'cent', - 'sterling', - 'section', - 'bullet', - 'paragraph', - 'germandbls', - 'registered', - 'copyright', - 'trademark', - 'acute', - 'dieresis', - 'notequal', - 'AE', - 'Oslash', - 'infinity', - 'plusminus', - 'lessequal', - 'greaterequal', - 'yen', - 'mu', - 'partialdiff', - 'summation', - 'product', - 'pi', - 'integral', - 'ordfeminine', - 'ordmasculine', - 'Omega', - 'ae', - 'oslash', - 'questiondown', - 'exclamdown', - 'logicalnot', - 'radical', - 'florin', - 'approxequal', - 'Delta', - 'guillemotleft', - 'guillemotright', - 'ellipsis', - 'nonbreakingspace', - 'Agrave', - 'Atilde', - 'Otilde', - 'OE', - 'oe', - 'endash', - 'emdash', - 'quotedblleft', - 'quotedblright', - 'quoteleft', - 'quoteright', - 'divide', - 'lozenge', - 'ydieresis', - 'Ydieresis', - 'fraction', - 'currency', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'daggerdbl', - 'periodcentered', - 'quotesinglbase', - 'quotedblbase', - 'perthousand', - 'Acircumflex', - 'Ecircumflex', - 'Aacute', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Oacute', - 'Ocircumflex', - 'apple', - 'Ograve', - 'Uacute', - 'Ucircumflex', - 'Ugrave', - 'dotlessi', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'Lslash', - 'lslash', - 'Scaron', - 'scaron', - 'Zcaron', - 'zcaron', - 'brokenbar', - 'Eth', - 'eth', - 'Yacute', - 'yacute', - 'Thorn', - 'thorn', - 'minus', - 'multiply', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'onehalf', - 'onequarter', - 'threequarters', - 'franc', - 'Gbreve', - 'gbreve', - 'Idotaccent', - 'Scedilla', - 'scedilla', - 'Cacute', - 'cacute', - 'Ccaron', - 'ccaron', - 'dcroat' -]; - - -class $f92906be28e61769$export$2e2bcd8739ae039 { - _getPath() { - return new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039)(); - } - _getCBox() { - return this.path.cbox; - } - _getBBox() { - return this.path.bbox; - } - _getTableMetrics(table) { - if (this.id < table.metrics.length) return table.metrics.get(this.id); - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - return res; - } - _getMetrics(cbox) { - if (this._metrics) return this._metrics; - let { advance: advanceWidth, bearing: leftBearing } = this._getTableMetrics(this._font.hmtx); - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) var { advance: advanceHeight, bearing: topBearing } = this._getTableMetrics(this._font.vmtx); - else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this); - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - } else { - let { hhea: hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - return this._metrics = { - advanceWidth: advanceWidth, - advanceHeight: advanceHeight, - leftBearing: leftBearing, - topBearing: topBearing - }; - } - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ get cbox() { - return this._getCBox(); - } - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ get bbox() { - return this._getBBox(); - } - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - /** - * The glyph's advance width. - * @type {number} - */ get advanceWidth() { - return this._getMetrics().advanceWidth; - } - /** - * The glyph's advance height. - * @type {number} - */ get advanceHeight() { - return this._getMetrics().advanceHeight; - } - get ligatureCaretPositions() {} - _getName() { - let { post: post } = this._font; - if (!post) return null; - switch(post.version){ - case 1: - return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[this.id]; - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < (0, $7713b9b7b438dff8$export$2e2bcd8739ae039).length) return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[id]; - return post.names[id - (0, $7713b9b7b438dff8$export$2e2bcd8739ae039).length]; - case 2.5: - return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[this.id + post.offsets[this.id]]; - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - /** - * The glyph's name - * @type {string} - */ get name() { - return this._getName(); - } - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ render(ctx, size) { - ctx.save(); - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - ctx.restore(); - } - constructor(id, codePoints, font){ - /** - * The glyph id in the font - * @type {number} - */ this.id = id; - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ this.codePoints = codePoints; - this._font = font; - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $6uUbQ$isMark)); - this.isLigature = this.codePoints.length > 1; - } -} -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "cbox", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "path", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "advanceWidth", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "advanceHeight", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "name", null); - - - - - -// The header for both simple and composite glyphs -let $69aac16029968692$var$GlyfHeader = new $6uUbQ$Struct({ - numberOfContours: $6uUbQ$int16, - xMin: $6uUbQ$int16, - yMin: $6uUbQ$int16, - xMax: $6uUbQ$int16, - yMax: $6uUbQ$int16 -}); -// Flags for simple glyphs -const $69aac16029968692$var$ON_CURVE = 1; -const $69aac16029968692$var$X_SHORT_VECTOR = 2; -const $69aac16029968692$var$Y_SHORT_VECTOR = 4; -const $69aac16029968692$var$REPEAT = 8; -const $69aac16029968692$var$SAME_X = 16; -const $69aac16029968692$var$SAME_Y = 32; -// Flags for composite glyphs -const $69aac16029968692$var$ARG_1_AND_2_ARE_WORDS = 1; -const $69aac16029968692$var$ARGS_ARE_XY_VALUES = 2; -const $69aac16029968692$var$ROUND_XY_TO_GRID = 4; -const $69aac16029968692$var$WE_HAVE_A_SCALE = 8; -const $69aac16029968692$var$MORE_COMPONENTS = 32; -const $69aac16029968692$var$WE_HAVE_AN_X_AND_Y_SCALE = 64; -const $69aac16029968692$var$WE_HAVE_A_TWO_BY_TWO = 128; -const $69aac16029968692$var$WE_HAVE_INSTRUCTIONS = 256; -const $69aac16029968692$var$USE_MY_METRICS = 512; -const $69aac16029968692$var$OVERLAP_COMPOUND = 1024; -const $69aac16029968692$var$SCALED_COMPONENT_OFFSET = 2048; -const $69aac16029968692$var$UNSCALED_COMPONENT_OFFSET = 4096; -class $69aac16029968692$export$baf26146a414f24a { - copy() { - return new $69aac16029968692$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y); - } - constructor(onCurve, endContour, x = 0, y = 0){ - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } -} -// Represents a component in a composite glyph -class $69aac16029968692$var$Component { - constructor(glyphID, dx, dy){ - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} -class $69aac16029968692$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) return this.path.cbox; - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = $69aac16029968692$var$GlyfHeader.decode(stream); - let cbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039)(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) val = -val; - val += prev; - } else if (same) var val = prev; - else var val = prev + stream.readInt16BE(); - return val; - } - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) return null; - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - let glyph = $69aac16029968692$var$GlyfHeader.decode(stream); - if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream); - else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos); - return glyph; - } - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - let endPtsOfContours = new $6uUbQ$Array($6uUbQ$uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new $6uUbQ$Array($6uUbQ$uint8, $6uUbQ$uint16).decode(stream); - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - while(flags.length < numCoords){ - var flag = stream.readUInt8(); - flags.push(flag); - // check for repeat flag - if (flag & $69aac16029968692$var$REPEAT) { - let count = stream.readUInt8(); - for(let j = 0; j < count; j++)flags.push(flag); - } - } - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - let point = new $69aac16029968692$export$baf26146a414f24a(!!(flag & $69aac16029968692$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - let px = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $69aac16029968692$var$X_SHORT_VECTOR, flag & $69aac16029968692$var$SAME_X); - } - let py = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $69aac16029968692$var$Y_SHORT_VECTOR, flag & $69aac16029968692$var$SAME_Y); - } - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - return; - } - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = $69aac16029968692$var$MORE_COMPONENTS; - while(flags & $69aac16029968692$var$MORE_COMPONENTS){ - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) haveInstructions = (flags & $69aac16029968692$var$WE_HAVE_INSTRUCTIONS) !== 0; - if (flags & $69aac16029968692$var$ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - var component = new $69aac16029968692$var$Component(glyphID, dx, dy); - component.pos = gPos; - if (flags & $69aac16029968692$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction - component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - else if (flags & $69aac16029968692$var$WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } else if (flags & $69aac16029968692$var$WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } - glyph.components.push(component); - } - if (this._font._variationProcessor) { - let points = []; - for(let j = 0; j < glyph.components.length; j++){ - var component = glyph.components[j]; - points.push(new $69aac16029968692$export$baf26146a414f24a(true, true, component.dx, component.dy)); - } - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - for(let i = 0; i < points.length; i++){ - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - return haveInstructions; - } - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) this._metrics = (0, $f92906be28e61769$export$2e2bcd8739ae039).prototype._getMetrics.call(this, cbox); - let { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing } = this._metrics; - return [ - new $69aac16029968692$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0), - new $69aac16029968692$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new $69aac16029968692$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing), - new $69aac16029968692$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) return []; - let points = []; - if (glyph.numberOfContours < 0) // resolve composite glyphs - for (let component of glyph.components){ - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - for(let j = 0; j < contour.length; j++){ - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new $69aac16029968692$export$baf26146a414f24a(point.onCurve, point.endContour, x, y)); - } - } - } - else points = glyph.points || []; - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - let contours = []; - let cur = []; - for(let k = 0; k < points.length; k++){ - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - return contours; - } - _getMetrics() { - if (this._metrics) return this._metrics; - let cbox = this._getCBox(true); - super._getMetrics(cbox); - if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - return this._metrics; - } - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - else // Start at the middle if both the first and last points are off curve - firstPt = new $69aac16029968692$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - var curvePt = firstPt; - } - path.moveTo(firstPt.x, firstPt.y); - for(let j = start; j < contour.length; j++){ - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y); - else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt; - else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - } else throw new Error("Unknown TTF path state"); - } - // Connect the first and last points - if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - path.closePath(); - } - return path; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'TTF'); - } -} - - - - - -class $62cc5109c6101893$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - _getName() { - if (this._font.CFF2) return super._getName(); - return this._font['CFF '].getGlyphName(this.id); - } - bias(s) { - if (s.length < 1240) return 107; - else if (s.length < 33900) return 1131; - else return 32768; - } - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream: stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - let path = new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039); - let stack = []; - let trans = []; - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - function checkWidth() { - if (width == null) width = stack.shift() + privateDict.nominalWidthX; - } - function parseStems() { - if (stack.length % 2 !== 0) checkWidth(); - nStems += stack.length >> 1; - return stack.length = 0; - } - function moveTo(x, y) { - if (open) path.closePath(); - path.moveTo(x, y); - open = true; - } - let parse = function() { - while(stream.pos < end){ - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - switch(op){ - case 1: - case 3: - case 18: - case 23: - parseStems(); - break; - case 4: - if (stack.length > 1) checkWidth(); - y += stack.shift(); - moveTo(x, y); - break; - case 5: - while(stack.length >= 2){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - case 6: - case 7: - phase = op === 6; - while(stack.length >= 1){ - if (phase) x += stack.shift(); - else y += stack.shift(); - path.lineTo(x, y); - phase = !phase; - } - break; - case 8: - while(stack.length > 0){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 11: - if (cff.version >= 2) break; - return; - case 14: - if (cff.version >= 2) break; - if (stack.length > 0) checkWidth(); - if (open) { - path.closePath(); - open = false; - } - break; - case 15: - if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1'); - vsindex = stack.pop(); - break; - case 16: - { - if (cff.version < 2) throw new Error('blend operator not supported in CFF v1'); - if (!variationProcessor) throw new Error('blend operator in non-variation font'); - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - for(let i = 0; i < numBlends; i++){ - let sum = stack[base + i]; - for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++]; - stack[base + i] = sum; - } - while(numOperands--)stack.pop(); - break; - } - case 19: - case 20: - parseStems(); - stream.pos += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2) checkWidth(); - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - case 22: - if (stack.length > 1) checkWidth(); - x += stack.shift(); - moveTo(x, y); - break; - case 24: - while(stack.length >= 8){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - case 25: - while(stack.length >= 8){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while(stack.length >= 4){ - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while(stack.length >= 4){ - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - stack.push(stream.readInt16BE()); - break; - case 29: - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 30: - case 31: - phase = op === 31; - while(stack.length >= 4){ - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - case 12: - op = stream.readUInt8(); - switch(op){ - case 3: - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - case 4: - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - case 5: - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - case 9: - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case 10: - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - case 11: - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - case 12: - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - case 14: - a = stack.pop(); - stack.push(-a); - break; - case 15: - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - case 18: - stack.pop(); - break; - case 20: - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - case 21: - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - case 22: - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - case 23: - stack.push(Math.random()); - break; - case 24: - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - case 26: - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case 27: - a = stack.pop(); - stack.push(a, a); - break; - case 28: - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - case 29: - idx = stack.pop(); - if (idx < 0) idx = 0; - else if (idx > stack.length - 1) idx = stack.length - 1; - stack.push(stack[idx]); - break; - case 30: - let n = stack.pop(); - let j = stack.pop(); - if (j >= 0) while(j > 0){ - var t = stack[n - 1]; - for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i]; - stack[0] = t; - j--; - } - else while(j < 0){ - var t = stack[0]; - for(let i = 0; i <= n; i++)stack[i] = stack[i + 1]; - stack[n - 1] = t; - j++; - } - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 35: - pts = []; - for(let i = 0; i <= 5; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 37: - let startx = x; - let starty = y; - pts = []; - for(let i = 0; i <= 4; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - if (Math.abs(x - startx) > Math.abs(y - starty)) { - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - default: - throw new Error(`Unknown op: ${op}`); - } - } else if (op < 247) stack.push(op - 139); - else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else stack.push(stream.readInt32BE() / 65536); - } - }; - parse(); - if (open) path.closePath(); - return path; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'CFF'); - } -} - - - - - -let $25d8f049c222084c$var$SBIXImage = new $6uUbQ$Struct({ - originX: $6uUbQ$uint16, - originY: $6uUbQ$uint16, - type: new $6uUbQ$String(4), - data: new $6uUbQ$Buffer((t)=>t.parent.buflen - t._currentOffset) -}); -class $25d8f049c222084c$export$2e2bcd8739ae039 extends (0, $69aac16029968692$export$2e2bcd8739ae039) { - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ getImageForSize(size) { - for(let i = 0; i < this._font.sbix.imageTables.length; i++){ - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) break; - } - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - if (start === end) return null; - this._font.stream.pos = start; - return $25d8f049c222084c$var$SBIXImage.decode(this._font.stream, { - buflen: end - start - }); - } - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, { - height: size, - x: img.originX, - y: (this.bbox.minY - img.originY) * scale - }); - } - if (this._font.sbix.flags.renderOutlines) super.render(ctx, size); - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'SBIX'); - } -} - - - - - -class $0d411f0165859681$var$COLRLayer { - constructor(glyph, color){ - this.glyph = glyph; - this.color = color; - } -} -class $0d411f0165859681$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - _getBBox() { - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - for(let i = 0; i < this.layers.length; i++){ - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - return bbox; - } - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - while(low <= high){ - let mid = low + high >> 1; - var rec = colr.baseGlyphRecord[mid]; - if (this.id < rec.gid) high = mid - 1; - else if (this.id > rec.gid) low = mid + 1; - else { - var baseLayer = rec; - break; - } - } - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - return [ - new $0d411f0165859681$var$COLRLayer(g, color) - ]; - } - // otherwise, return an array of all the layers - let layers = []; - for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){ - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new $0d411f0165859681$var$COLRLayer(g, color)); - } - return layers; - } - render(ctx, size) { - for (let { glyph: glyph, color: color } of this.layers){ - ctx.fillColor([ - color.red, - color.green, - color.blue - ], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - return; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'COLR'); - } -} - - -const $0bb840cac04e911b$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const $0bb840cac04e911b$var$TUPLE_COUNT_MASK = 0x0fff; -const $0bb840cac04e911b$var$EMBEDDED_TUPLE_COORD = 0x8000; -const $0bb840cac04e911b$var$INTERMEDIATE_TUPLE = 0x4000; -const $0bb840cac04e911b$var$PRIVATE_POINT_NUMBERS = 0x2000; -const $0bb840cac04e911b$var$TUPLE_INDEX_MASK = 0x0fff; -const $0bb840cac04e911b$var$POINTS_ARE_WORDS = 0x80; -const $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK = 0x7f; -const $0bb840cac04e911b$var$DELTAS_ARE_ZERO = 0x80; -const $0bb840cac04e911b$var$DELTAS_ARE_WORDS = 0x40; -const $0bb840cac04e911b$var$DELTA_RUN_COUNT_MASK = 0x3f; -class $0bb840cac04e911b$export$2e2bcd8739ae039 { - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for(var i = 0; i < this.font.fvar.axis.length; i++){ - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){ - let segment = this.font.avar.segment[i]; - for(let j = 0; j < segment.correspondence.length; j++){ - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord; - break; - } - } - } - return normalized; - } - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) return; - let { gvar: gvar } = this.font; - if (gid >= gvar.glyphCount) return; - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) return; - // Read the gvar data for this glyph - let { stream: stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) return; - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - if (tupleCount & $0bb840cac04e911b$var$TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - let origPoints = glyphPoints.map((pt)=>pt.copy()); - tupleCount &= $0bb840cac04e911b$var$TUPLE_COUNT_MASK; - for(let i = 0; i < tupleCount; i++){ - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - if (tupleIndex & $0bb840cac04e911b$var$EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384); - } else { - if ((tupleIndex & $0bb840cac04e911b$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table'); - var tupleCoords = gvar.globalCoords[tupleIndex & $0bb840cac04e911b$var$TUPLE_INDEX_MASK]; - } - if (tupleIndex & $0bb840cac04e911b$var$INTERMEDIATE_TUPLE) { - var startCoords = []; - for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384); - var endCoords = []; - for(let a = 0; a < gvar.axisCount; a++)endCoords.push(stream.readInt16BE() / 16384); - } - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - var here = stream.pos; - stream.pos = offsetToData; - if (tupleIndex & $0bb840cac04e911b$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints(); - else var points = sharedPoints; - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){ - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - else { - let outPoints = origPoints.map((pt)=>pt.copy()); - let hasDelta = glyphPoints.map(()=>false); - for(let i = 0; i < points.length; i++){ - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - for(let i = 0; i < glyphPoints.length; i++){ - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - offsetToData += tupleDataSize; - stream.pos = here; - } - } - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - if (count & $0bb840cac04e911b$var$POINTS_ARE_WORDS) count = (count & $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK) + 1; - let fn = run & $0bb840cac04e911b$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - for(let j = 0; j < runCount && i < count; j++){ - point += fn.call(stream); - points[i++] = point; - } - } - return points; - } - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $0bb840cac04e911b$var$DELTA_RUN_COUNT_MASK) + 1; - if (run & $0bb840cac04e911b$var$DELTAS_ARE_ZERO) i += runCount; - else { - let fn = run & $0bb840cac04e911b$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream); - } - } - return deltas; - } - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar: gvar } = this.font; - let factor = 1; - for(let i = 0; i < gvar.axisCount; i++){ - if (tupleCoords[i] === 0) continue; - if (normalized[i] === 0) return 0; - if ((tupleIndex & $0bb840cac04e911b$var$INTERMEDIATE_TUPLE) === 0) { - if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0; - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0; - else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - return factor; - } - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) return; - let point = 0; - while(point < points.length){ - let firstPoint = point; - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while(!pt.endContour)pt = points[++endPoint]; - // find the first point that has a delta - while(point <= endPoint && !hasDelta[point])point++; - if (point > endPoint) continue; - let firstDelta = point; - let curDelta = point; - point++; - while(point <= endPoint){ - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - point++; - } - // shift contour if we only have a single delta - if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - point = endPoint + 1; - } - } - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) return; - let iterable = [ - 'x', - 'y' - ]; - for(let i = 0; i < iterable.length; i++){ - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - for(let p = p1; p <= p2; p++){ - let out = inPoints[p][k]; - if (out <= in1) out += out1 - in1; - else if (out >= in2) out += out2 - in2; - else out = out1 + (out - in1) * scale; - outPoints[p][k] = out; - } - } - } - } - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - if (deltaX === 0 && deltaY === 0) return; - for(let p = p1; p <= p2; p++)if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1; - let entryFormat = table.advanceWidthMapping.entryFormat; - ({ outerIndex: outerIndex, innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) return 0; - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) return 0; - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master]; - return netAdjustment; - } - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) return this.blendVectors.get(varData); - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - // outer loop steps through master designs to be blended - for(let master = 0; master < varData.regionIndexCount; master++){ - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - // inner loop steps through axes in this region - for(let j = 0; j < axes.length; j++){ - let axis = axes[j]; - let axisScalar; - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1; - else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1; - else if (axis.peakCoord === 0) axisScalar = 1; - else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0; - else { - if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1; - else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON); - else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - // take product of all the axis scalars - scalar *= axisScalar; - } - blendVector[master] = scalar; - } - this.blendVectors.set(varData, blendVector); - return blendVector; - } - constructor(font, coords){ - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } -} - - - - -const $5cc7476da92df375$var$resolved = Promise.resolve(); -class $5cc7476da92df375$export$2e2bcd8739ae039 { - includeGlyph(glyph) { - if (typeof glyph === 'object') glyph = glyph.id; - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - return this.mapping[glyph]; - } - constructor(font){ - this.font = font; - this.glyphs = []; - this.mapping = {}; - // always include the missing glyph - this.includeGlyph(0); - } -} - - - - - -// Flags for simple glyphs -const $807e58506be70005$var$ON_CURVE = 1; -const $807e58506be70005$var$X_SHORT_VECTOR = 2; -const $807e58506be70005$var$Y_SHORT_VECTOR = 4; -const $807e58506be70005$var$REPEAT = 8; -const $807e58506be70005$var$SAME_X = 16; -const $807e58506be70005$var$SAME_Y = 32; -class $807e58506be70005$var$Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - static encode(stream, value) { - if (value >= 0 && value <= 255) stream.writeUInt8(value); - else stream.writeInt16BE(value); - } -} -let $807e58506be70005$var$Glyf = new $6uUbQ$Struct({ - numberOfContours: $6uUbQ$int16, - xMin: $6uUbQ$int16, - yMin: $6uUbQ$int16, - xMax: $6uUbQ$int16, - yMax: $6uUbQ$int16, - endPtsOfContours: new $6uUbQ$Array($6uUbQ$uint16, 'numberOfContours'), - instructions: new $6uUbQ$Array($6uUbQ$uint8, $6uUbQ$uint16), - flags: new $6uUbQ$Array($6uUbQ$uint8, 0), - xPoints: new $6uUbQ$Array($807e58506be70005$var$Point, 0), - yPoints: new $6uUbQ$Array($807e58506be70005$var$Point, 0) -}); -class $807e58506be70005$export$2e2bcd8739ae039 { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - for(let i = 0; i < path.commands.length; i++){ - let c = path.commands[i]; - for(let j = 0; j < c.args.length; j += 2){ - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - if (x === midX && y === midY) continue; - } - } - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $807e58506be70005$var$ON_CURVE; - flag = this._encodePoint(x, lastX, xPoints, flag, $807e58506be70005$var$X_SHORT_VECTOR, $807e58506be70005$var$SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, $807e58506be70005$var$Y_SHORT_VECTOR, $807e58506be70005$var$SAME_Y); - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= $807e58506be70005$var$REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - flags.push(flag); - lastFlag = flag; - } - lastX = x; - lastY = y; - pointCount++; - } - if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1); - } - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1); - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - let size = $807e58506be70005$var$Glyf.size(glyf); - let tail = 4 - size % 4; - let stream = new $6uUbQ$EncodeStream(size + tail); - $807e58506be70005$var$Glyf.encode(stream, glyf); - // Align to 4-byte length - if (tail !== 0) stream.fill(0, tail); - return stream.buffer; - } - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - if (value === last) flag |= sameFlag; - else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) diff = -diff; - else flag |= sameFlag; - } - points.push(diff); - } - return flag; - } -} - - -class $4abbb6a5dbdc441a$export$2e2bcd8739ae039 extends (0, $5cc7476da92df375$export$2e2bcd8739ae039) { - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - let buffer = stream.readBuffer(nextOffset - curOffset); - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components){ - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - this.offset += buffer.length; - return this.glyf.length - 1; - } - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - this.hmtx = { - metrics: [], - bearings: [] - }; - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]); - let maxp = (0, $6uUbQ$clone)(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - this.loca.offsets.push(this.offset); - let head = (0, $6uUbQ$clone)(this.font.head); - head.indexToLocFormat = this.loca.version; - let hhea = (0, $6uUbQ$clone)(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - // TODO: subset prep, cvt, fpgm? - return (0, $816c07a04b6dba87$export$2e2bcd8739ae039).toBuffer({ - tables: { - head: head, - hhea: hhea, - loca: this.loca, - maxp: maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - } - }); - } - constructor(font){ - super(font); - this.glyphEncoder = new (0, $807e58506be70005$export$2e2bcd8739ae039); - } -} - - - - - - -class $001d739428a71d5a$export$2e2bcd8739ae039 extends (0, $5cc7476da92df375$export$2e2bcd8739ae039) { - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - for (let gid of this.glyphs){ - this.charstrings.push(this.cff.getCharString(gid)); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedGsubrs)gsubrs[subr] = true; - } - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - subsetSubrs(subrs, used) { - let res = []; - for(let i = 0; i < subrs.length; i++){ - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else res.push(new Uint8Array([ - 11 - ])); // return - } - return res; - } - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs){ - let fd = this.cff.fdForGlyph(gid); - if (fd == null) continue; - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true; - } - for(let i = 0; i < topDict.FDArray.length; i++){ - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - return; - } - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs){ - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[subr] = true; - } - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - topDict.FDArray = [ - { - Private: privateDict - } - ]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [ - { - first: 0, - fd: 0 - } - ], - sentinel: this.charstrings.length - }; - } - addString(string) { - if (!string) return null; - if (!this.strings) this.strings = []; - this.strings.push(string); - return (0, $229224aec43783c5$export$2e2bcd8739ae039).length + this.strings.length - 1; - } - encode() { - this.subsetCharstrings(); - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [ - { - first: 1, - nLeft: this.charstrings.length - 2 - } - ] - }; - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - for (let key of [ - 'version', - 'Notice', - 'Copyright', - 'FullName', - 'FamilyName', - 'Weight', - 'PostScript', - 'BaseFontName', - 'FontName' - ])topDict[key] = this.addString(this.cff.string(topDict[key])); - topDict.ROS = [ - this.addString('Adobe'), - this.addString('Identity'), - 0 - ]; - topDict.CIDCount = this.charstrings.length; - if (this.cff.isCIDFont) this.subsetFontdict(topDict); - else this.createCIDFontdict(topDict); - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [ - this.cff.postscriptName - ], - topDictIndex: [ - topDict - ], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - return (0, $b84fd3dd9d8eddb2$export$2e2bcd8739ae039).toBuffer(top); - } - constructor(font){ - super(font); - this.cff = this.font['CFF ']; - if (!this.cff) throw new Error('Not a CFF Font'); - } -} - - - - -class $4c1709dee528ea76$export$2e2bcd8739ae039 { - static probe(buffer) { - let format = (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - _getTable(table) { - if (!(table.tag in this._tables)) try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if ($d636bc798e7178db$export$bd5c5d8b8dcafd78) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - return this._tables[table.tag]; - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - return null; - } - _decodeDirectory() { - return this.directory = (0, $816c07a04b6dba87$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _decodeTable(table) { - let pos = this.stream.pos; - let stream = this._getTableStream(table.tag); - let result = (0, $c3395722bea751e2$export$2e2bcd8739ae039)[table.tag].decode(stream, this, table.length); - this.stream.pos = pos; - return result; - } - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ getName(key, lang = this.defaultLanguage || $d636bc798e7178db$export$42940898df819940) { - let record = this.name && this.name.records[key]; - if (record) // Attempt to retrieve the entry, depending on which translation is available: - return record[lang] || record[this.defaultLanguage] || record[$d636bc798e7178db$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null; - return null; - } - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ get postscriptName() { - return this.getName('postscriptName'); - } - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ get fullName() { - return this.getName('fullName'); - } - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ get familyName() { - return this.getName('fontFamily'); - } - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ get subfamilyName() { - return this.getName('fontSubfamily'); - } - /** - * The font's copyright information - * @type {string} - */ get copyright() { - return this.getName('copyright'); - } - /** - * The font's version number - * @type {string} - */ get version() { - return this.getName('version'); - } - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ get ascent() { - return this.hhea.ascent; - } - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ get descent() { - return this.hhea.descent; - } - /** - * The amount of space that should be included between lines - * @type {number} - */ get lineGap() { - return this.hhea.lineGap; - } - /** - * The offset from the normal underline position that should be used - * @type {number} - */ get underlinePosition() { - return this.post.underlinePosition; - } - /** - * The weight of the underline that should be used - * @type {number} - */ get underlineThickness() { - return this.post.underlineThickness; - } - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ get italicAngle() { - return this.post.italicAngle; - } - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - /** - * The number of glyphs in the font. - * @type {number} - */ get numGlyphs() { - return this.maxp.numGlyphs; - } - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ get unitsPerEm() { - return this.head.unitsPerEm; - } - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ get bbox() { - return Object.freeze(new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039)(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - get _cmapProcessor() { - return new (0, $f08dd41ef10b694c$export$2e2bcd8739ae039)(this.cmap); - } - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [ - codePoint - ]); - } - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - while(idx <= len){ - let code = 0; - let nextState = 0; - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; - } else idx++; - if (state === 0 && nextState === 1) // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [ - last, - code - ])); - else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - last = code; - state = nextState; - } - return glyphs; - } - get _layoutEngine() { - return new (0, $4c0a7fa5df7a9ab1$export$2e2bcd8739ae039)(this); - } - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) this._glyphs[glyph] = new (0, $69aac16029968692$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new (0, $62cc5109c6101893$export$2e2bcd8739ae039)(glyph, characters, this); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) this._glyphs[glyph] = new (0, $25d8f049c222084c$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new (0, $0d411f0165859681$export$2e2bcd8739ae039)(glyph, characters, this); - else this._getBaseGlyph(glyph, characters); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a Subset for this font. - * @return {Subset} - */ createSubset() { - if (this.directory.tables['CFF ']) return new (0, $001d739428a71d5a$export$2e2bcd8739ae039)(this); - return new (0, $4abbb6a5dbdc441a$export$2e2bcd8739ae039)(this); - } - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ get variationAxes() { - let res = {}; - if (!this.fvar) return res; - for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - return res; - } - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ get namedVariations() { - let res = {}; - if (!this.fvar) return res; - for (let instance of this.fvar.instance){ - let settings = {}; - for(let i = 0; i < this.fvar.axis.length; i++){ - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - res[instance.name.en] = settings; - } - return res; - } - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ getVariation(settings) { - if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - if (typeof settings === 'string') settings = this.namedVariations[settings]; - if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.'); - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i)=>{ - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - else return axis.defaultValue; - }); - let stream = new $6uUbQ$DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - let font = new $4c1709dee528ea76$export$2e2bcd8739ae039(stream, coords); - font._tables = this._tables; - return font; - } - get _variationProcessor() { - if (!this.fvar) return null; - let variationCoords = this.variationCoords; - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) return null; - if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue); - return new (0, $0bb840cac04e911b$export$2e2bcd8739ae039)(this, variationCoords); - } - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } - constructor(stream, variationCoords = null){ - (0, $6uUbQ$_)(this, "type", 'TTF'); - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - // define properties for each table to lazily parse - for(let tag in this.directory.tables){ - let table = this.directory.tables[tag]; - if ((0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag] && table.length > 0) Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } -} -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_cmapProcessor", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "characterSet", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_layoutEngine", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "variationAxes", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "namedVariations", null); -(0, $6uUbQ$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_variationProcessor", null); - - - - - - -let $c1726355ecc5b889$var$WOFFDirectoryEntry = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - offset: new $6uUbQ$Pointer($6uUbQ$uint32, 'void', { - type: 'global' - }), - compLength: $6uUbQ$uint32, - length: $6uUbQ$uint32, - origChecksum: $6uUbQ$uint32 -}); -let $c1726355ecc5b889$var$WOFFDirectory = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - flavor: $6uUbQ$uint32, - length: $6uUbQ$uint32, - numTables: $6uUbQ$uint16, - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - totalSfntSize: $6uUbQ$uint32, - majorVersion: $6uUbQ$uint16, - minorVersion: $6uUbQ$uint16, - metaOffset: $6uUbQ$uint32, - metaLength: $6uUbQ$uint32, - metaOrigLength: $6uUbQ$uint32, - privOffset: $6uUbQ$uint32, - privLength: $6uUbQ$uint32, - tables: new $6uUbQ$Array($c1726355ecc5b889$var$WOFFDirectoryEntry, 'numTables') -}); -$c1726355ecc5b889$var$WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -var $c1726355ecc5b889$export$2e2bcd8739ae039 = $c1726355ecc5b889$var$WOFFDirectory; - - - - - - -class $760785214b9fc52c$export$2e2bcd8739ae039 extends (0, $4c1709dee528ea76$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOFF'; - } - _decodeDirectory() { - this.directory = (0, $c1726355ecc5b889$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = (0, $6uUbQ$tinyinflate)(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new $6uUbQ$DecodeStream(buf); - } else return this.stream; - } - return null; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'WOFF'); - } -} - - - - - - - - - -class $8046190c9f1ad19e$export$2e2bcd8739ae039 extends (0, $69aac16029968692$export$2e2bcd8739ae039) { - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - _getCBox() { - return this.path.bbox; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'WOFF2'); - } -} - - - -const $c28ec7bbb3b8de3a$var$Base128 = { - decode (stream) { - let result = 0; - let iterable = [ - 0, - 1, - 2, - 3, - 4 - ]; - for(let j = 0; j < iterable.length; j++){ - let i = iterable[j]; - let code = stream.readUInt8(); - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) throw new Error('Overflow'); - result = result << 7 | code & 0x7f; - if ((code & 0x80) === 0) return result; - } - throw new Error('Bad base 128 number'); - } -}; -let $c28ec7bbb3b8de3a$var$knownTags = [ - 'cmap', - 'head', - 'hhea', - 'hmtx', - 'maxp', - 'name', - 'OS/2', - 'post', - 'cvt ', - 'fpgm', - 'glyf', - 'loca', - 'prep', - 'CFF ', - 'VORG', - 'EBDT', - 'EBLC', - 'gasp', - 'hdmx', - 'kern', - 'LTSH', - 'PCLT', - 'VDMX', - 'vhea', - 'vmtx', - 'BASE', - 'GDEF', - 'GPOS', - 'GSUB', - 'EBSC', - 'JSTF', - 'MATH', - 'CBDT', - 'CBLC', - 'COLR', - 'CPAL', - 'SVG ', - 'sbix', - 'acnt', - 'avar', - 'bdat', - 'bloc', - 'bsln', - 'cvar', - 'fdsc', - 'feat', - 'fmtx', - 'fvar', - 'gvar', - 'hsty', - 'just', - 'lcar', - 'mort', - 'morx', - 'opbd', - 'prop', - 'trak', - 'Zapf', - 'Silf', - 'Glat', - 'Gloc', - 'Feat', - 'Sill' -]; -let $c28ec7bbb3b8de3a$var$WOFF2DirectoryEntry = new $6uUbQ$Struct({ - flags: $6uUbQ$uint8, - customTag: new $6uUbQ$Optional(new $6uUbQ$String(4), (t)=>(t.flags & 0x3f) === 0x3f), - tag: (t)=>t.customTag || $c28ec7bbb3b8de3a$var$knownTags[t.flags & 0x3f], - length: $c28ec7bbb3b8de3a$var$Base128, - transformVersion: (t)=>t.flags >>> 6 & 0x03, - transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new $6uUbQ$Optional($c28ec7bbb3b8de3a$var$Base128, (t)=>t.transformed) -}); -let $c28ec7bbb3b8de3a$var$WOFF2Directory = new $6uUbQ$Struct({ - tag: new $6uUbQ$String(4), - flavor: $6uUbQ$uint32, - length: $6uUbQ$uint32, - numTables: $6uUbQ$uint16, - reserved: new $6uUbQ$Reserved($6uUbQ$uint16), - totalSfntSize: $6uUbQ$uint32, - totalCompressedSize: $6uUbQ$uint32, - majorVersion: $6uUbQ$uint16, - minorVersion: $6uUbQ$uint16, - metaOffset: $6uUbQ$uint32, - metaLength: $6uUbQ$uint32, - metaOrigLength: $6uUbQ$uint32, - privOffset: $6uUbQ$uint32, - privLength: $6uUbQ$uint32, - tables: new $6uUbQ$Array($c28ec7bbb3b8de3a$var$WOFF2DirectoryEntry, 'numTables') -}); -$c28ec7bbb3b8de3a$var$WOFF2Directory.process = function() { - let tables = {}; - for(let i = 0; i < this.tables.length; i++){ - let table = this.tables[i]; - tables[table.tag] = table; - } - return this.tables = tables; -}; -var $c28ec7bbb3b8de3a$export$2e2bcd8739ae039 = $c28ec7bbb3b8de3a$var$WOFF2Directory; - - - -class $21ee218f84ac7f32$export$2e2bcd8739ae039 extends (0, $4c1709dee528ea76$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOF2'; - } - _decodeDirectory() { - this.directory = (0, $c28ec7bbb3b8de3a$export$2e2bcd8739ae039).decode(this.stream); - this._dataPos = this.stream.pos; - } - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - let decompressedSize = 0; - for(let tag in this.directory.tables){ - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; - } - let decompressed = (0, $6uUbQ$brotlidecompressjs)(buffer, decompressedSize); - if (!decompressed) throw new Error('Error decoding compressed data in WOFF2'); - this.stream = new $6uUbQ$DecodeStream(decompressed); - this._decompressed = true; - } - } - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) this._transformGlyfTable(); - return this._glyphs[glyph] = new (0, $8046190c9f1ad19e$export$2e2bcd8739ae039)(glyph, characters, this); - } else return super._getBaseGlyph(glyph, characters); - } - } - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = $21ee218f84ac7f32$var$GlyfTable.decode(this.stream); - let glyphs = []; - for(let index = 0; index < table.numGlyphs; index++){ - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - if (nContours > 0) { - let nPoints = []; - let totalPoints = 0; - for(let i = 0; i < nContours; i++){ - let r = $21ee218f84ac7f32$var$read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - glyph.points = $21ee218f84ac7f32$var$decodeTriplet(table.flags, table.glyphs, totalPoints); - for(let i = 0; i < nContours; i++)glyph.points[nPoints[i] - 1].endContour = true; - var instructionSize = $21ee218f84ac7f32$var$read255UInt16(table.glyphs); - } else if (nContours < 0) { - let haveInstructions = (0, $69aac16029968692$export$2e2bcd8739ae039).prototype._decodeComposite.call({ - _font: this - }, glyph, table.composites); - if (haveInstructions) var instructionSize = $21ee218f84ac7f32$var$read255UInt16(table.glyphs); - } - glyphs.push(glyph); - } - this._transformedGlyphs = glyphs; - } - constructor(...args){ - super(...args); - (0, $6uUbQ$_)(this, "type", 'WOFF2'); - } -} -// Special class that accepts a length and returns a sub-stream for that data -class $21ee218f84ac7f32$var$Substream { - decode(stream, parent) { - return new $6uUbQ$DecodeStream(this._buf.decode(stream, parent)); - } - constructor(length){ - this.length = length; - this._buf = new $6uUbQ$Buffer(length); - } -} -// This struct represents the entire glyf table -let $21ee218f84ac7f32$var$GlyfTable = new $6uUbQ$Struct({ - version: $6uUbQ$uint32, - numGlyphs: $6uUbQ$uint16, - indexFormat: $6uUbQ$uint16, - nContourStreamSize: $6uUbQ$uint32, - nPointsStreamSize: $6uUbQ$uint32, - flagStreamSize: $6uUbQ$uint32, - glyphStreamSize: $6uUbQ$uint32, - compositeStreamSize: $6uUbQ$uint32, - bboxStreamSize: $6uUbQ$uint32, - instructionStreamSize: $6uUbQ$uint32, - nContours: new $21ee218f84ac7f32$var$Substream('nContourStreamSize'), - nPoints: new $21ee218f84ac7f32$var$Substream('nPointsStreamSize'), - flags: new $21ee218f84ac7f32$var$Substream('flagStreamSize'), - glyphs: new $21ee218f84ac7f32$var$Substream('glyphStreamSize'), - composites: new $21ee218f84ac7f32$var$Substream('compositeStreamSize'), - bboxes: new $21ee218f84ac7f32$var$Substream('bboxStreamSize'), - instructions: new $21ee218f84ac7f32$var$Substream('instructionStreamSize') -}); -const $21ee218f84ac7f32$var$WORD_CODE = 253; -const $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE2 = 254; -const $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE1 = 255; -const $21ee218f84ac7f32$var$LOWEST_U_CODE = 253; -function $21ee218f84ac7f32$var$read255UInt16(stream) { - let code = stream.readUInt8(); - if (code === $21ee218f84ac7f32$var$WORD_CODE) return stream.readUInt16BE(); - if (code === $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $21ee218f84ac7f32$var$LOWEST_U_CODE; - if (code === $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $21ee218f84ac7f32$var$LOWEST_U_CODE * 2; - return code; -} -function $21ee218f84ac7f32$var$withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} -function $21ee218f84ac7f32$var$decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - for(let i = 0; i < nPoints; i++){ - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - if (flag < 10) { - dx = 0; - dy = $21ee218f84ac7f32$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - } else if (flag < 20) { - dx = $21ee218f84ac7f32$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); - dy = 0; - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = $21ee218f84ac7f32$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - } else if (flag < 120) { - var b0 = flag - 84; - dx = $21ee218f84ac7f32$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = $21ee218f84ac7f32$var$withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - } else { - dx = $21ee218f84ac7f32$var$withSign(flag, glyphs.readUInt16BE()); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, glyphs.readUInt16BE()); - } - x += dx; - y += dy; - res.push(new (0, $69aac16029968692$export$baf26146a414f24a)(onCurve, false, x, y)); - } - return res; -} - - - - - - - - -let $cd5853a56c68fec7$var$TTCHeader = new $6uUbQ$VersionedStruct($6uUbQ$uint32, { - 0x00010000: { - numFonts: $6uUbQ$uint32, - offsets: new $6uUbQ$Array($6uUbQ$uint32, 'numFonts') - }, - 0x00020000: { - numFonts: $6uUbQ$uint32, - offsets: new $6uUbQ$Array($6uUbQ$uint32, 'numFonts'), - dsigTag: $6uUbQ$uint32, - dsigLength: $6uUbQ$uint32, - dsigOffset: $6uUbQ$uint32 - } -}); -class $cd5853a56c68fec7$export$2e2bcd8739ae039 { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'ttcf'; - } - getFont(name) { - for (let offset of this.header.offsets){ - let stream = new $6uUbQ$DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let offset of this.header.offsets){ - let stream = new $6uUbQ$DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $6uUbQ$_)(this, "type", 'TTC'); - this.stream = stream; - if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection'); - this.header = $cd5853a56c68fec7$var$TTCHeader.decode(stream); - } -} - - - - - -let $05f49f930186144e$var$DFontName = new $6uUbQ$String($6uUbQ$uint8); -let $05f49f930186144e$var$DFontData = new $6uUbQ$Struct({ - len: $6uUbQ$uint32, - buf: new $6uUbQ$Buffer('len') -}); -let $05f49f930186144e$var$Ref = new $6uUbQ$Struct({ - id: $6uUbQ$uint16, - nameOffset: $6uUbQ$int16, - attr: $6uUbQ$uint8, - dataOffset: $6uUbQ$uint24, - handle: $6uUbQ$uint32 -}); -let $05f49f930186144e$var$Type = new $6uUbQ$Struct({ - name: new $6uUbQ$String(4), - maxTypeIndex: $6uUbQ$uint16, - refList: new $6uUbQ$Pointer($6uUbQ$uint16, new $6uUbQ$Array($05f49f930186144e$var$Ref, (t)=>t.maxTypeIndex + 1), { - type: 'parent' - }) -}); -let $05f49f930186144e$var$TypeList = new $6uUbQ$Struct({ - length: $6uUbQ$uint16, - types: new $6uUbQ$Array($05f49f930186144e$var$Type, (t)=>t.length + 1) -}); -let $05f49f930186144e$var$DFontMap = new $6uUbQ$Struct({ - reserved: new $6uUbQ$Reserved($6uUbQ$uint8, 24), - typeList: new $6uUbQ$Pointer($6uUbQ$uint16, $05f49f930186144e$var$TypeList), - nameListOffset: new $6uUbQ$Pointer($6uUbQ$uint16, 'void') -}); -let $05f49f930186144e$var$DFontHeader = new $6uUbQ$Struct({ - dataOffset: $6uUbQ$uint32, - map: new $6uUbQ$Pointer($6uUbQ$uint32, $05f49f930186144e$var$DFontMap), - dataLength: $6uUbQ$uint32, - mapLength: $6uUbQ$uint32 -}); -class $05f49f930186144e$export$2e2bcd8739ae039 { - static probe(buffer) { - let stream = new $6uUbQ$DecodeStream(buffer); - try { - var header = $05f49f930186144e$var$DFontHeader.decode(stream); - } catch (e) { - return false; - } - for (let type of header.map.typeList.types){ - if (type.name === 'sfnt') return true; - } - return false; - } - getFont(name) { - if (!this.sfnt) return null; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $6uUbQ$DecodeStream(this.stream.buffer.slice(pos)); - let font = new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $6uUbQ$DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $6uUbQ$_)(this, "type", 'DFont'); - this.stream = stream; - this.header = $05f49f930186144e$var$DFontHeader.decode(this.stream); - for (let type of this.header.map.typeList.types){ - for (let ref of type.refList)if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = $05f49f930186144e$var$DFontName.decode(this.stream); - } else ref.name = null; - if (type.name === 'sfnt') this.sfnt = type; - } - } -} - - -// Register font formats -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $4c1709dee528ea76$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $760785214b9fc52c$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $21ee218f84ac7f32$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $cd5853a56c68fec7$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $05f49f930186144e$export$2e2bcd8739ae039)); - - -export {$d636bc798e7178db$export$bd5c5d8b8dcafd78 as logErrors, $d636bc798e7178db$export$36b2f24e97d43be as registerFormat, $d636bc798e7178db$export$185802fd694ee1f5 as create, $d636bc798e7178db$export$42940898df819940 as defaultLanguage, $d636bc798e7178db$export$5157e7780d44cc36 as setDefaultLanguage}; -//# sourceMappingURL=browser-module.mjs.map diff --git a/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs.map b/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs.map deleted file mode 100644 index c18d11f..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/browser-module.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,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","sources":["src/index.js","src/base.js","src/TTFFont.js","src/decorators.js","src/tables/directory.js","src/tables/index.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/tables/name.js","src/encodings.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFFont.js","src/cff/CFFIndex.js","src/cff/CFFTop.js","src/cff/CFFDict.js","src/cff/CFFOperand.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/variations.js","src/tables/opentype.js","src/tables/VORG.js","src/tables/EBLC.js","src/tables/EBDT.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/bsln.js","src/tables/aat.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/CmapProcessor.js","src/utils.js","src/layout/LayoutEngine.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/layout/GlyphRun.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphPosition.js","src/aat/AATLayoutEngine.js","src/aat/AATFeatureMap.js","src/aat/AATMorxProcessor.js","src/aat/AATStateMachine.js","src/aat/AATLookupTable.js","src/opentype/OTLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/index.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/shapers/HangulShaper.js","src/opentype/GlyphInfo.js","src/opentype/OTProcessor.js","src/opentype/GlyphIterator.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/indic.json","src/opentype/shapers/use.json","src/opentype/shapers/indic-data.js","src/opentype/shapers/UniversalShaper.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/glyph/TTFGlyph.js","src/glyph/Glyph.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/TTFSubset.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/CFFSubset.js","src/WOFFFont.js","src/tables/WOFFDirectory.js","src/WOFF2Font.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/TrueTypeCollection.js","src/DFont.js"],"sourcesContent":["import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base';\nimport TTFFont from './TTFFont';\nimport WOFFFont from './WOFFFont';\nimport WOFF2Font from './WOFF2Font';\nimport TrueTypeCollection from './TrueTypeCollection';\nimport DFont from './DFont';\n\n// Register font formats\nregisterFormat(TTFFont);\nregisterFormat(WOFFFont);\nregisterFormat(WOFF2Font);\nregisterFormat(TrueTypeCollection);\nregisterFormat(DFont);\n\nexport * from './base';\n","import {DecodeStream} from 'restructure';\n\nexport let logErrors = false;\n\nlet formats = [];\nexport function registerFormat(format) {\n formats.push(format);\n};\n\nexport function create(buffer, postscriptName) {\n for (let i = 0; i < formats.length; i++) {\n let format = formats[i];\n if (format.probe(buffer)) {\n let font = new format(new DecodeStream(buffer));\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n\n return font;\n }\n }\n\n throw new Error('Unknown font format');\n};\n\nexport let defaultLanguage = 'en';\nexport function setDefaultLanguage(lang = 'en') {\n defaultLanguage = lang;\n};\n","import * as r from 'restructure';\nimport { cache } from './decorators';\nimport * as fontkit from './base';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport CmapProcessor from './CmapProcessor';\nimport LayoutEngine from './layout/LayoutEngine';\nimport TTFGlyph from './glyph/TTFGlyph';\nimport CFFGlyph from './glyph/CFFGlyph';\nimport SBIXGlyph from './glyph/SBIXGlyph';\nimport COLRGlyph from './glyph/COLRGlyph';\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\nimport TTFSubset from './subset/TTFSubset';\nimport CFFSubset from './subset/CFFSubset';\nimport BBox from './glyph/BBox';\nimport { asciiDecoder } from './utils';\n\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\nexport default class TTFFont {\n type = 'TTF';\n\n static probe(buffer) {\n let format = asciiDecoder.decode(buffer.slice(0, 4));\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n }\n\n constructor(stream, variationCoords = null) {\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n this._decodeDirectory();\n\n // define properties for each table to lazily parse\n for (let tag in this.directory.tables) {\n let table = this.directory.tables[tag];\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n\n setDefaultLanguage(lang = null) {\n this.defaultLanguage = lang;\n }\n\n _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(`Error decoding table ${table.tag}`);\n console.error(e.stack);\n }\n }\n }\n\n return this._tables[table.tag];\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n\n return null;\n }\n\n _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {_startOffset: 0});\n }\n\n _decodeTable(table) {\n let pos = this.stream.pos;\n\n let stream = this._getTableStream(table.tag);\n let result = tables[table.tag].decode(stream, this, table.length);\n\n this.stream.pos = pos;\n return result;\n }\n\n /**\n * Gets a string from the font's `name` table\n * `lang` is a BCP-47 language code.\n * @return {string}\n */\n getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\n let record = this.name && this.name.records[key];\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return (\n record[lang]\n || record[this.defaultLanguage]\n || record[fontkit.defaultLanguage]\n || record['en']\n || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null\n );\n }\n\n return null;\n }\n\n /**\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n * @type {string}\n */\n get postscriptName() {\n return this.getName('postscriptName');\n }\n\n /**\n * The font's full name, e.g. \"Helvetica Bold\"\n * @type {string}\n */\n get fullName() {\n return this.getName('fullName');\n }\n\n /**\n * The font's family name, e.g. \"Helvetica\"\n * @type {string}\n */\n get familyName() {\n return this.getName('fontFamily');\n }\n\n /**\n * The font's sub-family, e.g. \"Bold\".\n * @type {string}\n */\n get subfamilyName() {\n return this.getName('fontSubfamily');\n }\n\n /**\n * The font's copyright information\n * @type {string}\n */\n get copyright() {\n return this.getName('copyright');\n }\n\n /**\n * The font's version number\n * @type {string}\n */\n get version() {\n return this.getName('version');\n }\n\n /**\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n * @type {number}\n */\n get ascent() {\n return this.hhea.ascent;\n }\n\n /**\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n * @type {number}\n */\n get descent() {\n return this.hhea.descent;\n }\n\n /**\n * The amount of space that should be included between lines\n * @type {number}\n */\n get lineGap() {\n return this.hhea.lineGap;\n }\n\n /**\n * The offset from the normal underline position that should be used\n * @type {number}\n */\n get underlinePosition() {\n return this.post.underlinePosition;\n }\n\n /**\n * The weight of the underline that should be used\n * @type {number}\n */\n get underlineThickness() {\n return this.post.underlineThickness;\n }\n\n /**\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\n * @type {number}\n */\n get italicAngle() {\n return this.post.italicAngle;\n }\n\n /**\n * The height of capital letters above the baseline.\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n * @type {number}\n */\n get capHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n\n /**\n * The height of lower case letters in the font.\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n * @type {number}\n */\n get xHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n\n /**\n * The number of glyphs in the font.\n * @type {number}\n */\n get numGlyphs() {\n return this.maxp.numGlyphs;\n }\n\n /**\n * The size of the font’s internal coordinate grid\n * @type {number}\n */\n get unitsPerEm() {\n return this.head.unitsPerEm;\n }\n\n /**\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n\n @cache\n get _cmapProcessor() {\n return new CmapProcessor(this.cmap);\n }\n\n /**\n * An array of all of the unicode code points supported by the font.\n * @type {number[]}\n */\n @cache\n get characterSet() {\n return this._cmapProcessor.getCharacterSet();\n }\n\n /**\n * Returns whether there is glyph in the font for the given unicode code point.\n *\n * @param {number} codePoint\n * @return {boolean}\n */\n hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n\n /**\n * Maps a single unicode code point to a Glyph object.\n * Does not perform any advanced substitutions (there is no context to do so).\n *\n * @param {number} codePoint\n * @return {Glyph}\n */\n glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n\n /**\n * Returns an array of Glyph objects for the given string.\n * This is only a one-to-one mapping from characters to glyphs.\n * For most uses, you should use font.layout (described below), which\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\n *\n * @param {string} string\n * @return {Glyph[]}\n */\n glyphsForString(string) {\n let glyphs = [];\n let len = string.length;\n let idx = 0;\n let last = -1;\n let state = -1;\n\n while (idx <= len) {\n let code = 0;\n let nextState = 0;\n\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n }\n\n // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\n } else {\n idx++;\n }\n\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n\n last = code;\n state = nextState;\n }\n\n return glyphs;\n }\n\n @cache\n get _layoutEngine() {\n return new LayoutEngine(this);\n }\n\n /**\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n *\n * @param {string} string\n * @param {string[]} [userFeatures]\n * @param {string} [script]\n * @param {string} [language]\n * @param {string} [direction]\n * @return {GlyphRun}\n */\n layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n\n /**\n * Returns an array of strings that map to the given glyph id.\n * @param {number} gid - glyph id\n */\n stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n\n /**\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n * (or mapped AAT tags) supported by the font.\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n *\n * @type {string[]}\n */\n get availableFeatures() {\n return this._layoutEngine.getAvailableFeatures();\n }\n\n getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n }\n\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a glyph object for the given glyph id.\n * You can pass the array of code points this glyph represents for\n * your use later, and it will be stored in the glyph object.\n *\n * @param {number} glyph\n * @param {number[]} characters\n * @return {Glyph}\n */\n getGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n\n } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a Subset for this font.\n * @return {Subset}\n */\n createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n\n return new TTFSubset(this);\n }\n\n /**\n * Returns an object describing the available variation axes\n * that this font supports. Keys are setting tags, and values\n * contain the axis name, range, and default value.\n *\n * @type {object}\n */\n @cache\n get variationAxes() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let axis of this.fvar.axis) {\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n\n return res;\n }\n\n /**\n * Returns an object describing the named variation instances\n * that the font designer has specified. Keys are variation names\n * and values are the variation settings for this instance.\n *\n * @type {object}\n */\n @cache\n get namedVariations() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let instance of this.fvar.instance) {\n let settings = {};\n for (let i = 0; i < this.fvar.axis.length; i++) {\n let axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n\n res[instance.name.en] = settings;\n }\n\n return res;\n }\n\n /**\n * Returns a new font with the given variation settings applied.\n * Settings can either be an instance name, or an object containing\n * variation tags as specified by the `variationAxes` property.\n *\n * @param {object} settings\n * @return {TTFFont}\n */\n getVariation(settings) {\n if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n }\n\n // normalize the coordinates\n let coords = this.fvar.axis.map((axis, i) => {\n let axisTag = axis.axisTag.trim();\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n\n let font = new TTFFont(stream, coords);\n font._tables = this._tables;\n\n return font;\n }\n\n @cache\n get _variationProcessor() {\n if (!this.fvar) {\n return null;\n }\n\n let variationCoords = this.variationCoords;\n\n // Ignore if no variation coords and not CFF2\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\n }\n\n return new GlyphVariationProcessor(this, variationCoords);\n }\n\n // Standardized format plugin API\n getFont(name) {\n return this.getVariation(name);\n }\n}\n","/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nexport function cache(target, key, descriptor) {\n if (descriptor.get) {\n let get = descriptor.get;\n descriptor.get = function() {\n let value = get.call(this);\n Object.defineProperty(this, key, { value });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n let fn = descriptor.value;\n\n return {\n get() {\n let cache = new Map;\n function memoized(...args) {\n let key = args.length > 0 ? args[0] : 'value';\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n let result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n Object.defineProperty(this, key, {value: memoized});\n return memoized;\n }\n };\n }\n}\n","import * as r from 'restructure';\nimport Tables from './';\n\nlet TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),\n length: r.uint32\n});\n\nlet Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nDirectory.preEncode = function() {\n if (!Array.isArray(this.tables)) {\n let tables = [];\n for (let tag in this.tables) {\n let table = this.tables[tag];\n if (table) {\n tables.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(Tables[tag], table),\n length: Tables[tag].size(table)\n });\n }\n }\n \n this.tables = tables;\n }\n\n this.tag = 'true';\n this.numTables = this.tables.length;\n\n let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\n let maxPowerOf2 = Math.pow(2, maxExponentFor2);\n\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nexport default Directory;\n","let tables = {};\nexport default tables;\n\n// Required Tables\nimport cmap from './cmap';\nimport head from './head';\nimport hhea from './hhea';\nimport hmtx from './hmtx';\nimport maxp from './maxp';\nimport name from './name';\nimport OS2 from './OS2';\nimport post from './post';\n\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = name;\ntables['OS/2'] = OS2;\ntables.post = post;\n\n\n// TrueType Outlines\nimport cvt from './cvt';\nimport fpgm from './fpgm';\nimport loca from './loca';\nimport prep from './prep';\nimport glyf from './glyf';\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf;\n\n\n// PostScript Outlines\nimport CFFFont from '../cff/CFFFont';\nimport VORG from './VORG';\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG;\n\n\n// Bitmap Glyphs\nimport EBLC from './EBLC';\nimport sbix from './sbix';\nimport COLR from './COLR';\nimport CPAL from './CPAL';\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL;\n\n\n// Advanced OpenType Tables\nimport BASE from './BASE';\nimport GDEF from './GDEF';\nimport GPOS from './GPOS';\nimport GSUB from './GSUB';\nimport JSTF from './JSTF';\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF;\n\n// OpenType variations tables\nimport HVAR from './HVAR';\n\ntables.HVAR = HVAR;\n\n// Other OpenType Tables\nimport DSIG from './DSIG';\nimport gasp from './gasp';\nimport hdmx from './hdmx';\nimport kern from './kern';\nimport LTSH from './LTSH';\nimport PCLT from './PCLT';\nimport VDMX from './VDMX';\nimport vhea from './vhea';\nimport vmtx from './vmtx';\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx;\n\n\n// Apple Advanced Typography Tables\nimport avar from './avar';\nimport bsln from './bsln';\nimport feat from './feat';\nimport fvar from './fvar';\nimport gvar from './gvar';\nimport just from './just';\nimport morx from './morx';\nimport opbd from './opbd';\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\n","import * as r from 'restructure';\n\nlet SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\n\nlet CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\n\nlet UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\n\nlet UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\n\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\n\nlet VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\n});\n\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: { // Byte encoding\n length: r.uint16, // Total table length in bytes (set to 262 for format 0)\n language: r.uint16, // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n\n 2: { // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys),\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n\n 4: { // Segment mapping to delta values\n length: r.uint16, // Total table length in bytes\n language: r.uint16, // Language code\n segCountX2: r.uint16,\n segCount: t => t.segCountX2 >> 1,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16), // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\n },\n\n 6: { // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n\n 8: { // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 10: { // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n\n 12: { // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 14: { // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\n\nlet CmapEntry = new r.Struct({\n platformID: r.uint16, // Platform identifier\n encodingID: r.uint16, // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\n});\n\n// character to glyph mapping\nexport default new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\n","import * as r from 'restructure';\n\n// font header\nexport default new r.Struct({\n version: r.int32, // 0x00010000 (version 1.0)\n revision: r.int32, // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32, // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16, // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16, // for all glyph bounding boxes\n yMin: r.int16, // for all glyph bounding boxes\n xMax: r.int16, // for all glyph bounding boxes\n yMax: r.int16, // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, [\n 'bold', 'italic', 'underline', 'outline',\n 'shadow', 'condensed', 'extended'\n ]),\n lowestRecPPEM: r.uint16, // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16, // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n});\n","import * as r from 'restructure';\n\n// horizontal header\nexport default new r.Struct({\n version: r.int32,\n ascent: r.int16, // Distance from baseline of highest ascender\n descent: r.int16, // Distance from baseline of lowest descender\n lineGap: r.int16, // Typographic line gap\n advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16, // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16, // 0 for vertical\n caretOffset: r.int16, // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n","import * as r from 'restructure';\n\nlet HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\n\nexport default new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\n// maxiumum profile\nexport default new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16, // The number of glyphs in the font\n maxPoints: r.uint16, // Maximum points in a non-composite glyph\n maxContours: r.uint16, // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16, // Maximum points in a composite glyph\n maxComponentContours: r.uint16, // Maximum contours in a composite glyph\n maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16, // Maximum points used in Z0\n maxStorage: r.uint16, // Number of Storage Area locations\n maxFunctionDefs: r.uint16, // Number of FDEFs\n maxInstructionDefs: r.uint16, // Number of IDEFs\n maxStackElements: r.uint16, // Maximum stack depth\n maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n","import * as r from 'restructure';\nimport {getEncoding, LANGUAGES} from '../encodings';\n\nlet NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16,\n new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\n { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\n )\n});\n\nlet LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\n});\n\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\n\nexport default NameTable;\n\nconst NAMES = [\n 'copyright',\n 'fontFamily',\n 'fontSubfamily',\n 'uniqueSubfamily',\n 'fullName',\n 'version',\n 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n 'trademark',\n 'manufacturer',\n 'designer',\n 'description',\n 'vendorURL',\n 'designerURL',\n 'license',\n 'licenseURL',\n null, // reserved\n 'preferredFamily',\n 'preferredSubfamily',\n 'compatibleFull',\n 'sampleText',\n 'postscriptCIDFontName',\n 'wwsFamilyName',\n 'wwsSubfamilyName'\n];\n\nNameTable.process = function(stream) {\n var records = {};\n for (let record of this.records) {\n // find out what language this is for\n let language = LANGUAGES[record.platformID][record.languageID];\n\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n }\n\n // if the nameID is >= 256, it is a font feature record (AAT)\n let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\n if (records[key] == null) {\n records[key] = {};\n }\n\n let obj = records[key];\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n\n this.records = records;\n};\n\nNameTable.preEncode = function() {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n\n let records = [];\n for (let key in this.records) {\n let val = this.records[key];\n if (key === 'fontFeatures') continue;\n\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: val.en.length * 2,\n string: val.en\n });\n\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\n","/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nexport function getEncoding(platformID, encodingID, languageID = 0) {\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n \n return ENCODINGS[platformID][encodingID];\n}\n\nconst SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']);\nconst MAC_ENCODINGS = {\n 'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',\n 'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',\n 'x-mac-greek': 'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\\u00AD',\n 'x-mac-icelandic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-inuit': 'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',\n 'x-mac-ce': 'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',\n 'x-mac-romanian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'\n};\n\nconst encodingCache = new Map();\n\nexport function getEncodingMapping(encoding) {\n let cached = encodingCache.get(encoding);\n if (cached) {\n return cached;\n }\n\n // These encodings aren't supported by TextDecoder.\n let mapping = MAC_ENCODINGS[encoding];\n if (mapping) {\n let res = new Map();\n for (let i = 0; i < mapping.length; i++) {\n res.set(mapping.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n\n // Only single byte encodings can be mapped 1:1.\n if (SINGLE_BYTE_ENCODINGS.has(encoding)) {\n // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings.\n // Use this to create a mapping of code points.\n let decoder = new TextDecoder(encoding);\n let mapping = new Uint8Array(0x80);\n for (let i = 0; i < 0x80; i++) {\n mapping[i] = 0x80 + i;\n }\n\n let res = new Map();\n let s = decoder.decode(mapping);\n for (let i = 0; i < 0x80; i++) {\n res.set(s.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n}\n\n// Map of platform ids to encoding ids.\nexport const ENCODINGS = [\n // unicode\n ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'],\n \n // macintosh\n // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n // 0\tRoman 17\tMalayalam\n // 1\tJapanese\t 18\tSinhalese\n // 2\tTraditional Chinese\t 19\tBurmese\n // 3\tKorean\t 20\tKhmer\n // 4\tArabic\t 21\tThai\n // 5\tHebrew\t 22\tLaotian\n // 6\tGreek\t 23\tGeorgian\n // 7\tRussian\t 24\tArmenian\n // 8\tRSymbol\t 25\tSimplified Chinese\n // 9\tDevanagari\t 26\tTibetan\n // 10\tGurmukhi\t 27\tMongolian\n // 11\tGujarati\t 28\tGeez\n // 12\tOriya\t 29\tSlavic\n // 13\tBengali\t 30\tVietnamese\n // 14\tTamil\t 31\tSindhi\n // 15\tTelugu\t 32\t(Uninterpreted)\n // 16\tKannada\n ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\n 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',\n 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\n 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk', \n 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],\n \n // ISO (deprecated)\n ['ascii', null, 'iso-8859-1'],\n \n // windows\n // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be']\n];\n\n// Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nexport const MAC_LANGUAGE_ENCODINGS = {\n 15: 'x-mac-icelandic',\n 17: 'x-mac-turkish',\n 18: 'x-mac-croatian',\n 24: 'x-mac-ce',\n 25: 'x-mac-ce',\n 26: 'x-mac-ce',\n 27: 'x-mac-ce',\n 28: 'x-mac-ce',\n 30: 'x-mac-icelandic',\n 37: 'x-mac-romanian',\n 38: 'x-mac-ce',\n 39: 'x-mac-ce',\n 40: 'x-mac-ce',\n 143: 'x-mac-inuit',\n 146: 'x-mac-gaelic'\n};\n\n// Map of platform ids to BCP-47 language codes.\nexport const LANGUAGES = [\n // unicode\n [],\n \n { // macintosh\n 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',\n 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',\n 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',\n 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',\n 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',\n 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',\n 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',\n 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',\n 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',\n 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',\n 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',\n 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',\n 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',\n 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',\n 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',\n 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',\n 16: 'mt', 46: 'be', 76: 'si', 139: 'su',\n 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',\n 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',\n 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',\n 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',\n 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',\n 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',\n 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',\n 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',\n 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',\n 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',\n 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',\n 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',\n 29: 'se', 59: 'ps', 89: 'sw',\n },\n \n // ISO (deprecated)\n [],\n \n { // windows \n 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', \n 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', \n 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', \n 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', \n 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', \n 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', \n 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', \n 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', \n 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', \n 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', \n 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', \n 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', \n 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', \n 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', \n 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', \n 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', \n 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', \n 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', \n 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', \n 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', \n 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', \n 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', \n 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', \n 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', \n 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', \n 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', \n 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', \n 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', \n 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', \n 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', \n 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', \n 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', \n 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', \n 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', \n 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', \n 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', \n 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', \n 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', \n 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', \n 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', \n 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', \n 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', \n 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', \n 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', \n 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', \n 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', \n 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', \n 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', \n 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', \n 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', \n 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', \n 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', \n }\n];\n","import * as r from 'restructure';\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16, // visual weight of stroke in glyphs\n usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null,\n null, null, null, 'noSubsetting', 'bitmapOnly'\n ]),\n ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16, // width of the strikeout stroke\n yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16, // classification of font-family design\n panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4), // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout',\n 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\n ]),\n usFirstCharIndex: r.uint16, // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n },\n\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\n\nlet versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\n\nexport default OS2;\n","import * as r from 'restructure';\n\n// PostScript information\nexport default new r.VersionedStruct(r.fixed32, {\n header: { // these fields exist at the top of all versions\n italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16, // Suggested values for the underline thickness\n isFixedPitch: r.uint32, // Whether the font is monospaced\n minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n },\n\n 1: {}, // version 1 has no additional fields\n\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n\n 3: {}, // version 3 has no additional fields\n\n 4: {\n map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\n }\n});\n","import * as r from 'restructure';\n\n// An array of predefined values accessible by instructions\nexport default new r.Struct({\n controlValues: new r.Array(r.int16)\n});\n","import * as r from 'restructure';\n\n// A list of instructions that are executed once when a font is first used.\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\nexport default new r.Struct({\n instructions: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\n\nloca.process = function() {\n if (this.version === 0 && !this._processed) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n this._processed = true;\n }\n};\n\nloca.preEncode = function() {\n if (this.version === 0 && this._processed !== false) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n this._processed = false;\n }\n};\n\nexport default loca;\n","import * as r from 'restructure';\n\n// Set of instructions executed whenever the point size or font transformation change\nexport default new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\n// only used for encoding\nexport default new r.Array(new r.Buffer);\n","import * as r from 'restructure';\nimport CFFIndex from './CFFIndex';\nimport CFFTop from './CFFTop';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport standardStrings from './CFFStandardStrings';\n\nclass CFFFont {\n constructor(stream) {\n this.stream = stream;\n this.decode();\n }\n\n static decode(stream) {\n return new CFFFont(stream);\n }\n\n decode() {\n let start = this.stream.pos;\n let top = CFFTop.decode(this.stream);\n for (let key in top) {\n let val = top[key];\n this[key] = val;\n }\n\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n\n this.topDict = this.topDictIndex[0];\n }\n\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n }\n\n string(sid) {\n if (this.version >= 2) {\n return null;\n }\n\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n\n return this.stringIndex[sid - standardStrings.length];\n }\n\n get postscriptName() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n\n return null;\n }\n\n get fullName() {\n return this.string(this.topDict.FullName);\n }\n\n get familyName() {\n return this.string(this.topDict.FamilyName);\n }\n\n getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n }\n\n getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n }\n\n // CID-keyed fonts don't have glyph names\n if (this.isCIDFont) {\n return null;\n }\n\n let { charset } = this.topDict;\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n\n if (gid === 0) {\n return '.notdef';\n }\n\n gid -= 1;\n\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n\n case 1:\n case 2:\n for (let i = 0; i < charset.ranges.length; i++) {\n let range = charset.ranges[i];\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n break;\n }\n\n return null;\n }\n\n fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n\n case 3:\n case 4:\n let { ranges } = this.topDict.FDSelect;\n let low = 0;\n let high = ranges.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n default:\n throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\n }\n }\n\n privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n let fd = this.fdForGlyph(gid);\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n\n return null;\n }\n\n if (this.version < 2) {\n return this.topDict.Private;\n }\n\n return this.topDict.FDArray[0].Private;\n }\n}\n\nexport default CFFFont;\n","import * as r from 'restructure';\n\nexport default class CFFIndex {\n constructor(type) {\n this.type = type;\n }\n\n getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n\n return ctx ? ctx.version : -1;\n }\n\n decode(stream, parent) {\n let version = this.getCFFVersion(parent);\n let count = version >= 2\n ? stream.readUInt32BE()\n : stream.readUInt16BE();\n\n if (count === 0) {\n return [];\n }\n\n let offSize = stream.readUInt8();\n let offsetType;\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\n }\n\n let ret = [];\n let startPos = stream.pos + ((count + 1) * offSize) - 1;\n\n let start = offsetType.decode(stream);\n for (let i = 0; i < count; i++) {\n let end = offsetType.decode(stream);\n\n if (this.type != null) {\n let pos = stream.pos;\n stream.pos = startPos + start;\n\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n\n start = end;\n }\n\n stream.pos = startPos + start;\n return ret;\n }\n\n size(arr, parent) {\n let size = 2;\n if (arr.length === 0) {\n return size;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let offset = 1;\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n offset += type.size(item, parent);\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n\n return size;\n }\n\n encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n if (arr.length === 0) {\n return;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let sizes = [];\n let offset = 1;\n for (let item of arr) {\n let s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n // write offset size\n stream.writeUInt8(offsetType.size());\n\n // write elements\n offset = 1;\n offsetType.encode(stream, offset);\n\n for (let size of sizes) {\n offset += size;\n offsetType.encode(stream, offset);\n }\n\n for (let item of arr) {\n type.encode(stream, item, parent);\n }\n\n return;\n }\n}\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport StandardStrings from './CFFStandardStrings';\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\nimport { ItemVariationStore } from '../tables/variations';\n\n// Checks if an operand is an index of a predefined value,\n// otherwise delegates to the provided type.\nclass PredefinedOp {\n constructor(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n\n decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n\n return this.type.decode(stream, parent, operands);\n }\n\n size(value, ctx) {\n return this.type.size(value, ctx);\n }\n\n encode(stream, value, ctx) {\n let index = this.predefinedOps.indexOf(value);\n if (index !== -1) {\n return index;\n }\n\n return this.type.encode(stream, value, ctx);\n }\n}\n\nclass CFFEncodingVersion extends r.Number {\n constructor() {\n super('UInt8');\n }\n\n decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n }\n}\n\nlet Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\n\nlet Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\n\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n }\n\n // TODO: supplement?\n});\n\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\n\n// Decodes an array of ranges until the total\n// length is equal to the provided length.\nclass RangeArray extends r.Array {\n decode(stream, parent) {\n let length = resolveLength(this.length, stream, parent);\n let count = 0;\n let res = [];\n while (count < length) {\n let range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n\n return res;\n }\n}\n\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\n },\n\n 1: {\n ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\n },\n\n 2: {\n ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\n }\n});\n\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\n\nlet FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\n\nlet FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\n\nlet FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\n },\n\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\n\nlet ptr = new CFFPointer(CFFPrivateDict);\nclass CFFPrivateOp {\n decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n }\n\n size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n }\n\n encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n }\n}\n\nlet FontDict = new CFFDict([\n // key name type(s) default\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 38], 'FontName', 'sid', null],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [[12, 5], 'PaintType', 'number', 0],\n]);\n\nlet CFFTopDict = new CFFDict([\n // key name type(s) default\n [[12, 30], 'ROS', ['sid', 'sid', 'number'], null],\n\n [0, 'version', 'sid', null],\n [1, 'Notice', 'sid', null],\n [[12, 0], 'Copyright', 'sid', null],\n [2, 'FullName', 'sid', null],\n [3, 'FamilyName', 'sid', null],\n [4, 'Weight', 'sid', null],\n [[12, 1], 'isFixedPitch', 'boolean', false],\n [[12, 2], 'ItalicAngle', 'number', 0],\n [[12, 3], 'UnderlinePosition', 'number', -100],\n [[12, 4], 'UnderlineThickness', 'number', 50],\n [[12, 5], 'PaintType', 'number', 0],\n [[12, 6], 'CharstringType', 'number', 2],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [13, 'UniqueID', 'number', null],\n [5, 'FontBBox', 'array', [0, 0, 0, 0]],\n [[12, 8], 'StrokeWidth', 'number', 0],\n [14, 'XUID', 'array', null],\n [15, 'charset', CFFCharset, ISOAdobeCharset],\n [16, 'Encoding', CFFEncoding, StandardEncoding],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 20], 'SyntheticBase', 'number', null],\n [[12, 21], 'PostScript', 'sid', null],\n [[12, 22], 'BaseFontName', 'sid', null],\n [[12, 23], 'BaseFontBlend', 'delta', null],\n\n // CID font specific\n [[12, 31], 'CIDFontVersion', 'number', 0],\n [[12, 32], 'CIDFontRevision', 'number', 0],\n [[12, 33], 'CIDFontType', 'number', 0],\n [[12, 34], 'CIDCount', 'number', 8720],\n [[12, 35], 'UIDBase', 'number', null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [[12, 38], 'FontName', 'sid', null]\n]);\n\nlet VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n})\n\nlet CFF2TopDict = new CFFDict([\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [24, 'vstore', new CFFPointer(VariationStore), null],\n [25, 'maxstack', 'number', 193]\n]);\n\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex\n },\n\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex\n }\n});\n\nexport default CFFTop;\n","import isEqual from 'fast-deep-equal';\nimport * as r from 'restructure';\nimport CFFOperand from './CFFOperand';\nimport { PropertyDescriptor } from 'restructure';\n\nexport default class CFFDict {\n constructor(ops = []) {\n this.ops = ops;\n this.fields = {};\n for (let field of ops) {\n let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n\n decodeOperands(type, stream, ret, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n case 'boolean':\n return !!operands[0];\n default:\n return operands;\n }\n }\n }\n\n encodeOperands(type, stream, ctx, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n }\n\n decode(stream, parent) {\n let end = stream.pos + parent.length;\n let ret = {};\n let operands = [];\n\n // define hidden properties\n Object.defineProperties(ret, {\n parent: { value: parent },\n _startOffset: { value: stream.pos }\n });\n\n // fill in defaults\n for (let key in this.fields) {\n let field = this.fields[key];\n ret[field[1]] = field[3];\n }\n\n while (stream.pos < end) {\n let b = stream.readUInt8();\n if (b < 28) {\n if (b === 12) {\n b = (b << 8) | stream.readUInt8();\n }\n\n let field = this.fields[b];\n if (!field) {\n throw new Error(`Unknown operator ${b}`);\n }\n\n let val = this.decodeOperands(field[2], stream, ret, operands);\n if (val != null) {\n if (val instanceof PropertyDescriptor) {\n Object.defineProperty(ret, field[1], val);\n } else {\n ret[field[1]] = val;\n }\n }\n\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n\n return ret;\n }\n\n size(dict, parent, includePointers = true) {\n let ctx = {\n parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n\n let len = 0;\n\n for (let k in this.fields) {\n let field = this.fields[k];\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], null, ctx, val);\n for (let op of operands) {\n len += CFFOperand.size(op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n\n if (includePointers) {\n len += ctx.pointerSize;\n }\n\n return len;\n }\n\n encode(stream, dict, parent) {\n let ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val: dict,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n for (let field of this.ops) {\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], stream, ctx, val);\n for (let op of operands) {\n CFFOperand.encode(stream, op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n for (let op of key) {\n stream.writeUInt8(op);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n let ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n\n return;\n }\n}\n","const FLOAT_EOF = 0xf;\nconst FLOAT_LOOKUP = [\n '0', '1', '2', '3', '4', '5', '6', '7',\n '8', '9', '.', 'E', 'E-', null, '-'\n];\n\nconst FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\n\nexport default class CFFOperand {\n static decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n\n if (value === 28) {\n return stream.readInt16BE();\n }\n\n if (value === 29) {\n return stream.readInt32BE();\n }\n\n if (value === 30) {\n let str = '';\n while (true) {\n let b = stream.readUInt8();\n\n let n1 = b >> 4;\n if (n1 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n1];\n\n let n2 = b & 15;\n if (n2 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n2];\n }\n\n return parseFloat(str);\n }\n\n return null;\n }\n\n static size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n\n if ((value | 0) !== value) { // floating point\n let str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n\n } else if (-107 <= value && value <= 107) {\n return 1;\n\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n\n } else {\n return 5;\n }\n }\n\n static encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n let val = Number(value);\n\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n\n } else if ((val | 0) !== val) { // floating point\n stream.writeUInt8(30);\n\n let str = '' + val;\n for (let i = 0; i < str.length; i += 2) {\n let c1 = str[i];\n let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n let c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n\n stream.writeUInt8((n1 << 4) | (n2 & 15));\n }\n\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8((FLOAT_EOF << 4));\n }\n\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n }\n}\n","import * as r from 'restructure';\n\nexport default class CFFPointer extends r.Pointer {\n constructor(type, options = {}) {\n if (options.type == null) {\n options.type = 'global';\n }\n\n super(null, type, options);\n }\n\n decode(stream, parent, operands) {\n this.offsetType = {\n decode: () => operands[0]\n };\n\n return super.decode(stream, parent, operands);\n }\n\n encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: () => 0\n };\n\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n\n let ptr = null;\n this.offsetType = {\n encode: (stream, val) => ptr = val\n };\n\n super.encode(stream, value, ctx);\n return [new Ptr(ptr)];\n }\n}\n\nclass Ptr {\n constructor(val) {\n this.val = val;\n this.forceLarge = true;\n }\n\n valueOf() {\n return this.val;\n }\n}\n","import CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\n\nclass CFFBlendOp {\n static decode(stream, parent, operands) {\n let numBlends = operands.pop();\n\n // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n while (operands.length > numBlends) {\n operands.pop();\n }\n }\n}\n\nexport default new CFFDict([\n // key name type default\n [6, 'BlueValues', 'delta', null],\n [7, 'OtherBlues', 'delta', null],\n [8, 'FamilyBlues', 'delta', null],\n [9, 'FamilyOtherBlues', 'delta', null],\n [[12, 9], 'BlueScale', 'number', 0.039625],\n [[12, 10], 'BlueShift', 'number', 7],\n [[12, 11], 'BlueFuzz', 'number', 1],\n [10, 'StdHW', 'number', null],\n [11, 'StdVW', 'number', null],\n [[12, 12], 'StemSnapH', 'delta', null],\n [[12, 13], 'StemSnapV', 'delta', null],\n [[12, 14], 'ForceBold', 'boolean', false],\n [[12, 17], 'LanguageGroup', 'number', 0],\n [[12, 18], 'ExpansionFactor', 'number', 0.06],\n [[12, 19], 'initialRandomSeed', 'number', 0],\n [20, 'defaultWidthX', 'number', 0],\n [21, 'nominalWidthX', 'number', 0],\n [22, 'vsindex', 'number', 0],\n [23, 'blend', CFFBlendOp, null],\n [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]\n]);\n","// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nexport default [\n \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\n \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\n \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\n \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\n \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\n \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\n \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\n \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\n \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\n \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\n \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\n \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\n \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\n \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\n \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\n \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\n \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\n \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\n \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\n \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\n \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\n \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\n \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\n \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\n \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\n \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\n \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\n \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\n \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\n \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\n \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\n \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\n \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\n \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\n \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n","export let StandardEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n 'lslash', 'oslash', 'oe', 'germandbls'\n];\n\nexport let ExpertEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\n];\n","export let ISOAdobeCharset = [\n '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\n 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\n 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\n 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\n 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\n 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\n 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\n 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\n 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\n 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\n 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\n 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\n 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\n 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\n 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\n 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\n 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\n 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\n 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\n 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\n 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\n 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\n 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\n 'ugrave', 'yacute', 'ydieresis', 'zcaron'\n];\n\nexport let ExpertCharset = [\n '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\n 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\n 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\n 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\n 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\n 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\n 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\n 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\n 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\n 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\n 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\n 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\n 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\n 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\n 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\n 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\n 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\n 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\n 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\n 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\n 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\n 'Ydieresissmall'\n];\n\nexport let ExpertSubsetCharset = [\n '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\n 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\n 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\n 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\n 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\n 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\n 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\n 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior'\n];\n","import {Feature} from './opentype';\nimport * as r from 'restructure';\n\n/*******************\n * Variation Store *\n *******************/\n\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\nlet RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\n\nlet VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\n\nlet DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\n regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\n deltas: t => t.shortDeltas.concat(t.regionDeltas)\n});\n\nlet ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\n\nexport let ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n\n/**********************\n * Feature Variations *\n **********************/\n\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: {\n axisIndex: r.uint16,\n axisIndex: r.uint16,\n filterRangeMinValue: F2DOT14,\n filterRangeMaxValue: F2DOT14\n }\n});\n\nlet ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\n\nlet FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\n});\n\nlet FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\n\nlet FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\n});\n\nexport let FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n","import * as r from 'restructure';\n\n//########################\n// Scripts and Languages #\n//########################\n\nlet LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\n\nlet LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\n});\n\nlet Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\n\nlet ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, { type: 'parent' })\n});\n\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\n\n//#######################\n// Features and Lookups #\n//#######################\n\nlet FeatureParams = new r.Struct({\n version: r.uint16, // should be set to 0 according OT spec\n nameID: r.uint16, //OT spec: UI Name ID or uiLabelNameId\n});\n\nexport let Feature = new r.Struct({\n featureParams: new r.Pointer(r.uint16, FeatureParams),\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\n\nlet FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })\n});\n\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\n\nlet LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, [\n 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\n 'ignoreMarks', 'useMarkFilteringSet'\n ])\n});\n\nexport function LookupList(SubTable) {\n let Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\n });\n\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n}\n\n//#################\n// Coverage Table #\n//#################\n\nlet RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\n\nexport let Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n});\n\n//#########################\n// Class Definition Table #\n//#########################\n\nlet ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\n\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\n 1: { // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: { // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n});\n\n//###############\n// Device Table #\n//###############\n\nexport let Device = new r.Struct({\n a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16, // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n});\n\n//#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nlet LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\n\nlet Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\n\nlet ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\n\nexport let Context = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: { // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n\n//######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nlet ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, t => t.inputGlyphCount - 1),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\n\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 2: { // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 3: { // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n","import * as r from 'restructure';\n\nlet VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\n","import * as r from 'restructure';\nimport {BigMetrics} from './EBDT';\n\nlet SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\n\nlet CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\n\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n\n 1: {\n offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n\n 3: {\n offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\n },\n\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\n\nlet IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\n\nlet BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\n\nexport default new r.Struct({\n version: r.uint32, // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\n","import * as r from 'restructure';\n\nexport let BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\n\nexport let SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\n\nlet EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\n\nclass ByteAligned {}\n\nclass BitAligned {}\n\nexport let glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n\n 5: {\n data: BitAligned\n },\n\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\n\n","import * as r from 'restructure';\n\nlet ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\n});\n\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\nexport default new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\n","import * as r from 'restructure';\n\nlet LayerRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n // the special case noted below. Each palette entry is 16 bits.\n // A palette index of 0xFFFF is a special case indicating that\n // the text foreground color should be used.\n\nlet BaseGlyphRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\n\nexport default new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\n numLayerRecords: r.uint16\n});\n","import * as r from 'restructure';\n\nlet ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16 // X or Y value, in design units\n },\n\n 2: { // Design units plus contour point\n coordinate: r.int16, // X or Y value, in design units\n referenceGlyph: r.uint16, // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16, // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n }\n});\n\nlet BaseValues = new r.Struct({\n defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\n\nlet FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL\n});\n\nlet MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n featMinMaxCount: r.uint16, // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nlet BaseLangSysRecord = new r.Struct({\n tag: new r.String(4), // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\n});\n\nlet BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL\n baseLangSysCount: r.uint16, // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nlet BaseScriptRecord = new r.Struct({\n tag: new r.String(4), // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\n});\n\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\n\n// Array of 4-byte baseline identification tags-must be in alphabetical order\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\n\nlet Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n },\n\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\nlet AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\n\nlet CaretValue = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16\n },\n\n 2: { // Contour point\n caretValuePoint: r.uint16\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\n\nlet LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\n\nlet MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet ValueFormat = new r.Bitfield(r.uint16, [\n 'xPlacement', 'yPlacement',\n 'xAdvance', 'yAdvance',\n 'xPlaDevice', 'yPlaDevice',\n 'xAdvDevice', 'yAdvDevice'\n]);\n\nlet types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\n};\n\nclass ValueRecord {\n constructor(key = 'valueFormat') {\n this.key = key;\n }\n\n buildStruct(parent) {\n let struct = parent;\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n\n if (!struct[this.key]) return;\n\n let fields = {};\n fields.rel = () => struct._startOffset;\n\n let format = struct[this.key];\n for (let key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n\n return new r.Struct(fields);\n }\n\n size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n }\n\n decode(stream, parent) {\n let res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n }\n}\n\nlet PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\n\nlet Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet Anchor = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n\n 2: { // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n\n 3: { // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\n\nlet BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\nlet BaseArray = new r.Array(BaseRecord, r.uint16);\n\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\nlet LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nlet LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\n\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, { // Single Adjustment\n 1: { // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n\n 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\n 1: { // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n\n 2: { // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n\n 3: { // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n\n 4: { // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n\n 5: { // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n\n 6: { // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n\n 7: Context, // Contextual positioning\n 8: ChainingContext, // Chaining contextual positioning\n\n 9: { // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 9\n extension: new r.Pointer(r.uint32, null)\n }\n});\n\n// Fix circular reference\nGPOSLookup.versions[9].extension.type = GPOSLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n\n// export GPOSLookup for JSTF table\nexport { GPOSLookup };\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet Sequence = new r.Array(r.uint16, r.uint16);\nlet AlternateSet = Sequence;\n\nlet Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, t => t.compCount - 1)\n});\n\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\n\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {// Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n\n 2: { // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n\n 3: { // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n\n 4: { // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n\n 5: Context, // Contextual Substitution\n 6: ChainingContext, // Chaining Contextual Substitution\n\n 7: { // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 7\n extension: new r.Pointer(r.uint32, null)\n },\n\n 8: { // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n});\n\n// Fix circular reference\nGSUBLookup.versions[7].extension.type = GSUBLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n","import * as r from 'restructure';\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\nimport { GPOSLookup } from './GPOS';\n\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\n\nlet JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\n\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\n\nlet JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\n\nlet JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\n\nlet JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\n});\n\nexport default new r.Struct({\n version: r.uint32, // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport { ItemVariationStore } from './variations';\n\n// TODO: add this to restructure\nclass VariableSizeNumber {\n constructor(size) {\n this._size = size;\n }\n\n decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1: return stream.readUInt8();\n case 2: return stream.readUInt16BE();\n case 3: return stream.readUInt24BE();\n case 4: return stream.readUInt32BE();\n }\n }\n\n size(val, parent) {\n return resolveLength(this._size, null, parent);\n }\n}\n\nlet MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\n outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\n innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\n});\n\nlet DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\n","import * as r from 'restructure';\n\nlet Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\n\nlet SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\n\nexport default new r.Struct({\n ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16, // Number of signatures in the table\n usFlag: r.uint16, // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\n","import * as r from 'restructure';\n\nlet GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit',\n 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\n\nexport default new r.Struct({\n version: r.uint16, // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n","import * as r from 'restructure';\n\nlet DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\n});\n\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\nexport default new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\n","import * as r from 'restructure';\n\nlet KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\n\nlet ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\n});\n\nlet Kern2Array = new r.Struct({\n off: t => t._startOffset - t.parent.parent._startOffset,\n len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\n values: new r.LazyArray(r.int16, 'len')\n});\n\nlet KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\n },\n\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\n }\n});\n\nlet KernTable = new r.VersionedStruct('version', {\n 0: { // Microsoft uses this format\n subVersion: r.uint16, // Microsoft has an extra sub-table version number\n length: r.uint16, // Length of the subtable, in bytes\n format: r.uint8, // Format of subtable\n coverage: new r.Bitfield(r.uint8, [\n 'horizontal', // 1 if table has horizontal data, 0 if vertical\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n },\n 1: { // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [\n null, null, null, null, null,\n 'variation', // Set if table has variation kerning values\n 'crossStream', // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n }\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n 0: { // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n\n 1: { // Apple Version\n reserved: new r.Reserved(r.uint16), // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n});\n","import * as r from 'restructure';\n\n// Linear Threshold table\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\nexport default new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n","import * as r from 'restructure';\n\n// PCL 5 Table\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\nexport default new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n});\n","import * as r from 'restructure';\n\n// VDMX tables contain ascender/descender overrides for certain (usually small)\n// sizes. This is needed in order to match font metrics on Windows.\n\nlet Ratio = new r.Struct({\n bCharSet: r.uint8, // Character set\n xRatio: r.uint8, // Value to use for x-Ratio\n yStartRatio: r.uint8, // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nlet vTable = new r.Struct({\n yPelHeight: r.uint16, // yPelHeight to which values apply\n yMax: r.int16, // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nlet VdmxGroup = new r.Struct({\n recs: r.uint16, // Number of height records in this group\n startsz: r.uint8, // Starting yPelHeight\n endsz: r.uint8, // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nexport default new r.Struct({\n version: r.uint16, // Version number (0 or 1)\n numRecs: r.uint16, // Number of VDMX groups present\n numRatios: r.uint16, // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n","import * as r from 'restructure';\n\n// Vertical Header Table\nexport default new r.Struct({\n version: r.uint16, // Version number of the Vertical Header Table\n ascent: r.int16, // The vertical typographic ascender for this font\n descent: r.int16, // The vertical typographic descender for this font\n lineGap: r.int16, // The vertical typographic line gap for this font\n advanceHeightMax: r.int16, // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n","import * as r from 'restructure';\n\nlet VmtxEntry = new r.Struct({\n advance: r.uint16, // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n});\n\n// Vertical Metrics Table\nexport default new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\n\nlet Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\n\nlet Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet BslnSubtable = new r.VersionedStruct('format', {\n 0: { // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n\n 1: { // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n\n 2: { // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n\n 3: { // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\n","import * as r from 'restructure';\n\nclass UnboundedArrayAccessor {\n constructor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n\n getItem(index) {\n if (this._items[index] == null) {\n let pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n\n return this._items[index];\n }\n\n inspect() {\n return `[UnboundedArray ${this.type.constructor.name}]`;\n }\n}\n\nexport class UnboundedArray extends r.Array {\n constructor(type) {\n super(type, 0);\n }\n\n decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n }\n}\n\nexport let LookupTable = function(ValueType = r.uint16) {\n // Helper class that makes internal structures invisible to pointers\n class Shadow {\n constructor(type) {\n this.type = type;\n }\n\n decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n }\n\n size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n }\n\n encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n }\n }\n\n ValueType = new Shadow(ValueType);\n\n let BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n\n let LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n\n let LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\n });\n\n let LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\n\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\n let entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\n\n let StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n\n return StateHeader;\n}\n\n// This is the old version of the StateTable structure\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\n let ClassLookupTable = new r.Struct({\n version() { return 8; }, // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n\n let entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\n\n let StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n\n return StateHeader1;\n}\n","import * as r from 'restructure';\n\nlet Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nlet FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\n featureFlags: new r.Bitfield(r.uint8, [\n null, null, null, null, null, null,\n 'hasDefault', 'exclusive'\n ]),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\n","import * as r from 'restructure';\n\nlet Axis = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\n});\n\nlet Instance = new r.Struct({\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\n flags: r.uint16,\n coord: new r.Array(r.fixed32, t => t.parent.axisCount),\n postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\nclass Offset {\n static decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags\n ? stream.readUInt32BE()\n : stream.readUInt16BE() * 2;\n }\n}\n\nlet gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\n});\n\nexport default gvar;\n","import * as r from 'restructure';\nimport { LookupTable, StateTable1 } from './aat';\n\nlet ClassTable = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1\n});\n\nlet WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\n\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\n\nlet ActionData = new r.VersionedStruct('actionType', {\n 0: { // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n\n 1: { // Unconditional add glyph action\n addGlyph: r.uint16\n },\n\n 2: { // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n\n 3: {}, // Stretch glyph action (no data, not supported by CoreText)\n\n 4: { // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n\n 5: { // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\n\nlet Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\n});\n\nlet PostcompensationAction = new r.Array(Action, r.uint32);\nlet PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\n\nlet JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\n});\n\nexport default new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\n","import * as r from 'restructure';\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\n\nlet LigatureData = {\n action: r.uint16\n};\n\nlet ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\n\nlet InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\n\nlet SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\n});\n\nlet SubtableData = new r.VersionedStruct('type', {\n 0: { // Indic Rearrangement Subtable\n stateTable: new StateTable\n },\n\n 1: { // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n\n 2: { // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n\n 4: { // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable\n },\n\n 5: { // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\n\nlet Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n});\n\nlet FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\n\nlet MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\n\nexport default new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\n","import { binarySearch } from './utils';\nimport { encodingExists, getEncoding, getEncodingMapping } from './encodings';\nimport { cache } from './decorators';\nimport { range } from './utils';\n\nexport default class CmapProcessor {\n constructor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [\n // 32-bit subtables\n [3, 10],\n [0, 6],\n [0, 4],\n\n // 16-bit subtables\n [3, 1],\n [0, 3],\n [0, 2],\n [0, 1],\n [0, 0]\n ]);\n\n // If not unicode cmap was found, take the first table with a supported encoding.\n if (!this.cmap) {\n for (let cmap of cmapTable.tables) {\n let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n let mapping = getEncodingMapping(encoding);\n if (mapping) {\n this.cmap = cmap.table;\n this.encoding = mapping;\n }\n }\n }\n\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n\n findSubtable(cmapTable, pairs) {\n for (let [platformID, encodingID] of pairs) {\n for (let cmap of cmapTable.tables) {\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n\n return null;\n }\n\n lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n codepoint = this.encoding.get(codepoint) || codepoint;\n\n // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n } else if (variationSelector) {\n let gid = this.getVariationSelector(codepoint, variationSelector);\n if (gid) {\n return gid;\n }\n }\n\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n\n case 4: {\n let min = 0;\n let max = cmap.segCount - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n let rangeOffset = cmap.idRangeOffset.get(mid);\n let gid;\n\n if (rangeOffset === 0) {\n gid = codepoint + cmap.idDelta.get(mid);\n } else {\n let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n gid = cmap.glyphIndexArray.get(index) || 0;\n if (gid !== 0) {\n gid += cmap.idDelta.get(mid);\n }\n }\n\n return gid & 0xffff;\n }\n }\n\n return 0;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n case 12:\n case 13: {\n let min = 0;\n let max = cmap.nGroups - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let group = cmap.groups.get(mid);\n\n if (codepoint < group.startCharCode) {\n max = mid - 1;\n } else if (codepoint > group.endCharCode) {\n min = mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n\n return 0;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n\n let selectors = this.uvs.varSelectors.toArray();\n let i = binarySearch(selectors, x => variationSelector - x.varSelector);\n let sel = selectors[i];\n\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, x =>\n codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\n );\n }\n\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n\n return 0;\n }\n\n @cache\n getCharacterSet() {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n\n case 4: {\n let res = [];\n let endCodes = cmap.endCode.toArray();\n for (let i = 0; i < endCodes.length; i++) {\n let tail = endCodes[i] + 1;\n let start = cmap.startCode.get(i);\n res.push(...range(start, tail));\n }\n\n return res;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n case 12:\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n\n return res;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n @cache\n codePointsForGlyph(gid) {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0: {\n let res = [];\n for (let i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n\n return res;\n }\n\n case 4: {\n let res = [];\n for (let i = 0; i < cmap.segCount; i++) {\n let end = cmap.endCode.get(i);\n let start = cmap.startCode.get(i);\n let rangeOffset = cmap.idRangeOffset.get(i);\n let delta = cmap.idDelta.get(i);\n\n for (var c = start; c <= end; c++) {\n let g = 0;\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\n g = cmap.glyphIndexArray.get(index) || 0;\n if (g !== 0) {\n g += delta;\n }\n }\n\n if (g === gid) {\n res.push(c);\n }\n }\n }\n\n return res;\n }\n\n case 12: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n res.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n\n return res;\n }\n\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid === group.glyphID) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n }\n\n return res;\n }\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n}\n","export function binarySearch(arr, cmp) {\n let min = 0;\n let max = arr.length - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let res = cmp(arr[mid]);\n\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n}\n\nexport function range(index, end) {\n let range = [];\n while (index < end) {\n range.push(index++);\n }\n return range;\n}\n\nexport const asciiDecoder = new TextDecoder('ascii');\n\n// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license.\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst LOOKUP = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n LOOKUP[CHARS.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n let bufferLength = base64.length * 0.75;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n let bytes = new Uint8Array(bufferLength);\n let p = 0;\n\n for (let i = 0, len = base64.length; i < len; i += 4) {\n let encoded1 = LOOKUP[base64.charCodeAt(i)];\n let encoded2 = LOOKUP[base64.charCodeAt(i + 1)];\n let encoded3 = LOOKUP[base64.charCodeAt(i + 2)];\n let encoded4 = LOOKUP[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return bytes;\n}\n","import KernProcessor from './KernProcessor';\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\nimport GlyphRun from './GlyphRun';\nimport GlyphPosition from './GlyphPosition';\nimport * as Script from './Script';\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\n\nexport default class LayoutEngine {\n constructor(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null;\n\n // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n\n layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n }\n\n // Map string to glyphs if needed\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = Script.forString(string);\n }\n\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n let codePoints = [];\n for (let glyph of string) {\n codePoints.push(...glyph.codePoints);\n }\n\n script = Script.forCodePoints(codePoints);\n }\n\n var glyphs = string;\n }\n\n let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\n\n // Return early if there are no glyphs\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n }\n\n // Setup the advanced layout engine\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n }\n\n // Substitute and position the glyphs\n this.substitute(glyphRun);\n this.position(glyphRun);\n\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\n\n // Let the layout engine clean up any state it might have\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n\n return glyphRun;\n }\n\n substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n }\n\n position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\n let positioned = null;\n\n // Call the advanced layout engine. Returns the features applied.\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n }\n\n // if there is no GPOS table, use unicode properties to position marks.\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n }\n\n // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n }\n\n hideDefaultIgnorables(glyphs, positions) {\n let space = this.font.glyphForCodePoint(0x20);\n for (let i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n let plane = ch >> 16;\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n \tcase 0x00: return ch === 0x00AD;\n \tcase 0x03: return ch === 0x034F;\n \tcase 0x06: return ch === 0x061C;\n \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\n \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\n \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\n \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\n \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\n \tdefault: return false;\n }\n } else {\n // Other planes\n switch (plane) {\n \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\n \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\n \tdefault: return false;\n }\n }\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.engine) {\n features.push(...this.engine.getAvailableFeatures(script, language));\n }\n\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n\n return features;\n }\n\n stringsForGlyph(gid) {\n let result = new Set;\n\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n for (let codePoint of codePoints) {\n result.add(String.fromCodePoint(codePoint));\n }\n\n if (this.engine && this.engine.stringsForGlyph) {\n for (let string of this.engine.stringsForGlyph(gid)) {\n result.add(string);\n }\n }\n\n return Array.from(result);\n }\n}\n","import {binarySearch} from '../utils';\n\nexport default class KernProcessor {\n constructor(font) {\n this.kern = font.kern;\n }\n\n process(glyphs, positions) {\n for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n let left = glyphs[glyphIndex].id;\n let right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n }\n\n getKerning(left, right) {\n let res = 0;\n\n for (let table of this.kern.tables) {\n if (table.coverage.crossStream) {\n continue;\n }\n\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n\n break;\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n\n break;\n default:\n throw new Error(`Unsupported kerning table version ${table.version}`);\n }\n\n let val = 0;\n let s = table.subtable;\n switch (table.format) {\n case 0:\n let pairIdx = binarySearch(s.pairs, function (pair) {\n return (left - pair.left) || (right - pair.right);\n });\n\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n\n break;\n\n case 2:\n let leftOffset = 0, rightOffset = 0;\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n\n let index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n\n default:\n throw new Error(`Unsupported kerning sub-table format ${table.format}`);\n }\n\n // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n\n return res;\n }\n}\n","import {getCombiningClass} from 'unicode-properties';\n\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nexport default class UnicodeLayoutEngine {\n constructor(font) {\n this.font = font;\n }\n\n positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n let clusterStart = 0;\n let clusterEnd = 0;\n for (let index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.isMark) { // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n clusterStart = clusterEnd = index;\n }\n }\n\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n return positions;\n }\n\n positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n let base = glyphs[clusterStart];\n let baseBox = base.cbox.copy();\n\n // adjust bounding box for ligature glyphs\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\n }\n\n let xOffset = -positions[clusterStart].xAdvance;\n let yOffset = 0;\n let yGap = this.font.unitsPerEm / 16;\n\n // position each of the mark glyphs relative to the base glyph\n for (let index = clusterStart + 1; index <= clusterEnd; index++) {\n let mark = glyphs[index];\n let markBox = mark.cbox;\n let position = positions[index];\n\n let combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0;\n\n // x positioning\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n\n default: // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n }\n\n // y positioning\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n\n return;\n }\n\n getCombiningClass(codePoint) {\n let combiningClass = getCombiningClass(codePoint);\n\n // Thai / Lao need some per-character work\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) { // virama\n return 'Below_Right';\n }\n }\n\n switch (combiningClass) {\n // Hebrew\n\n case 'CCC10': // sheva\n case 'CCC11': // hataf segol\n case 'CCC12': // hataf patah\n case 'CCC13': // hataf qamats\n case 'CCC14': // hiriq\n case 'CCC15': // tsere\n case 'CCC16': // segol\n case 'CCC17': // patah\n case 'CCC18': // qamats\n case 'CCC20': // qubuts\n case 'CCC22': // meteg\n return 'Below';\n\n case 'CCC23': // rafe\n return 'Attached_Above';\n\n case 'CCC24': // shin dot\n return 'Above_Right';\n\n case 'CCC25': // sin dot\n case 'CCC19': // holam\n return 'Above_Left';\n\n case 'CCC26': // point varika\n return 'Above';\n\n case 'CCC21': // dagesh\n break;\n\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n case 'CCC28': // dammatan\n case 'CCC30': // fatha\n case 'CCC31': // damma\n case 'CCC33': // shadda\n case 'CCC34': // sukun\n case 'CCC35': // superscript alef\n case 'CCC36': // superscript alaph\n return 'Above';\n\n case 'CCC29': // kasratan\n case 'CCC32': // kasra\n return 'Below';\n\n // Thai\n\n case 'CCC103': // sara u / sara uu\n return 'Below_Right';\n\n case 'CCC107': // mai\n return 'Above_Right';\n\n // Lao\n\n case 'CCC118': // sign u / sign uu\n return 'Below';\n\n case 'CCC122': // mai\n return 'Above';\n\n // Tibetan\n\n case 'CCC129': // sign aa\n case 'CCC132': // sign u\n return 'Below';\n\n case 'CCC130': // sign i\n return 'Above';\n }\n\n return combiningClass;\n }\n}\n","import BBox from '../glyph/BBox';\nimport * as Script from '../layout/Script';\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nexport default class GlyphRun {\n constructor(glyphs, features, script, language, direction) {\n /**\n * An array of Glyph objects in the run\n * @type {Glyph[]}\n */\n this.glyphs = glyphs;\n\n /**\n * An array of GlyphPosition objects for each glyph in the run\n * @type {GlyphPosition[]}\n */\n this.positions = null;\n\n /**\n * The script that was requested for shaping. This was either passed in or detected automatically.\n * @type {string}\n */\n this.script = script;\n\n /**\n * The language requested for shaping, as passed in. If `null`, the default language for the\n * script was used.\n * @type {string}\n */\n this.language = language || null;\n\n /**\n * The direction requested for shaping, as passed in (either ltr or rtl).\n * If `null`, the default direction of the script is used.\n * @type {string}\n */\n this.direction = direction || Script.direction(script);\n\n /**\n * The features requested during shaping. This is a combination of user\n * specified features and features chosen by the shaper.\n * @type {object}\n */\n this.features = {};\n\n // Convert features to an object\n if (Array.isArray(features)) {\n for (let tag of features) {\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n\n /**\n * The total advance width of the run.\n * @type {number}\n */\n get advanceWidth() {\n let width = 0;\n for (let position of this.positions) {\n width += position.xAdvance;\n }\n\n return width;\n }\n\n /**\n * The total advance height of the run.\n * @type {number}\n */\n get advanceHeight() {\n let height = 0;\n for (let position of this.positions) {\n height += position.yAdvance;\n }\n\n return height;\n }\n\n /**\n * The bounding box containing all glyphs in the run.\n * @type {BBox}\n */\n get bbox() {\n let bbox = new BBox;\n\n let x = 0;\n let y = 0;\n for (let index = 0; index < this.glyphs.length; index++) {\n let glyph = this.glyphs[index];\n let p = this.positions[index];\n let b = glyph.bbox;\n\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n\n x += p.xAdvance;\n y += p.yAdvance;\n }\n\n return bbox;\n }\n}\n","/**\n * Represents a glyph bounding box\n */\nexport default class BBox {\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n /**\n * The minimum X position in the bounding box\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * The minimum Y position in the bounding box\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * The maxmimum X position in the bounding box\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * The maxmimum Y position in the bounding box\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * The width of the bounding box\n * @type {number}\n */\n get width() {\n return this.maxX - this.minX;\n }\n\n /**\n * The height of the bounding box\n * @type {number}\n */\n get height() {\n return this.maxY - this.minY;\n }\n\n addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n }\n\n copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n }\n}\n","import {getScript} from 'unicode-properties';\n\n// This maps the Unicode Script property to an OpenType script tag\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nconst UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\n\nconst OPENTYPE_SCRIPTS = {};\nfor (let script in UNICODE_SCRIPTS) {\n let tag = UNICODE_SCRIPTS[script];\n if (Array.isArray(tag)) {\n for (let t of tag) {\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\n\nexport function fromUnicode(script) {\n return UNICODE_SCRIPTS[script];\n}\n\nexport function fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\n\nexport function forString(string) {\n let len = string.length;\n let idx = 0;\n while (idx < len) {\n let code = string.charCodeAt(idx++);\n\n // Check if this is a high surrogate\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n\n // Check if this is a low surrogate\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n\n let script = getScript(code);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\nexport function forCodePoints(codePoints) {\n for (let i = 0; i < codePoints.length; i++) {\n let codePoint = codePoints[i];\n let script = getScript(codePoint);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\n// The scripts in this map are written from right to left\nconst RTL = {\n arab: true, // Arabic\n hebr: true, // Hebrew\n syrc: true, // Syriac\n thaa: true, // Thaana\n cprt: true, // Cypriot Syllabary\n khar: true, // Kharosthi\n phnx: true, // Phoenician\n 'nko ': true, // N'Ko\n lydi: true, // Lydian\n avst: true, // Avestan\n armi: true, // Imperial Aramaic\n phli: true, // Inscriptional Pahlavi\n prti: true, // Inscriptional Parthian\n sarb: true, // Old South Arabian\n orkh: true, // Old Turkic, Orkhon Runic\n samr: true, // Samaritan\n mand: true, // Mandaic, Mandaean\n merc: true, // Meroitic Cursive\n mero: true, // Meroitic Hieroglyphs\n\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true, // Manichaean\n mend: true, // Mende Kikakui\n nbat: true, // Nabataean\n narb: true, // Old North Arabian\n palm: true, // Palmyrene\n phlp: true // Psalter Pahlavi\n};\n\nexport function direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n\n return 'ltr';\n}\n","/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nexport default class GlyphPosition {\n constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\n /**\n * The amount to move the virtual pen in the X direction after rendering this glyph.\n * @type {number}\n */\n this.xAdvance = xAdvance;\n\n /**\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\n * @type {number}\n */\n this.yAdvance = yAdvance;\n\n /**\n * The offset from the pen position in the X direction at which to render this glyph.\n * @type {number}\n */\n this.xOffset = xOffset;\n\n /**\n * The offset from the pen position in the Y direction at which to render this glyph.\n * @type {number}\n */\n this.yOffset = yOffset;\n }\n}\n","import * as AATFeatureMap from './AATFeatureMap';\nimport * as Script from '../layout/Script';\nimport AATMorxProcessor from './AATMorxProcessor';\n\nexport default class AATLayoutEngine {\n constructor(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n\n substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n\n this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\n }\n\n getAvailableFeatures(script, language) {\n return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\n }\n\n stringsForGlyph(gid) {\n let glyphStrings = this.morxProcessor.generateInputs(gid);\n let result = new Set;\n\n for (let glyphs of glyphStrings) {\n this._addStrings(glyphs, 0, result, '');\n }\n\n return result;\n }\n\n _addStrings(glyphs, index, strings, string) {\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n for (let codePoint of codePoints) {\n let s = string + String.fromCodePoint(codePoint);\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n }\n}\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nconst features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: { // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\n\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\n\nconst OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'), // ??\n\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'), // ??\n numr: feature('fractions', 'diagonalFractions'), // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'), // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n\n init: feature('smartSwash', 'wordInitialSwashes'), // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\n medi: feature('smartSwash', 'nonFinalSwashes'), // ??\n med2: feature('smartSwash', 'nonFinalSwashes'), // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\n fina: feature('smartSwash', 'wordFinalSwashes'), // ??\n\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n\n calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'), //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n};\n\n // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n\n// Add cv01-cv99 features\nfor (let i = 1; i <= 99; i++) {\n OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\n}\n\n// create inverse mapping\nlet AATMapping = {};\nfor (let ot in OTMapping) {\n let aat = OTMapping[ot];\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n\n AATMapping[aat[0]][aat[1]] = ot;\n}\n\n// Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\nexport function mapOTToAAT(features) {\n let res = {};\n for (let k in features) {\n let r;\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n\n res[r[0]][r[1]] = features[k];\n }\n }\n\n return res;\n}\n\n// Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\nfunction mapFeatureStrings(f) {\n let [type, setting] = f;\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n\n return [typeCode, settingCode];\n}\n\n// Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\nexport function mapAATToOT(features) {\n let res = {};\n if (Array.isArray(features)) {\n for (let k = 0; k < features.length; k++) {\n let r;\n let f = mapFeatureStrings(features[k]);\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n\n } else if (typeof features === 'object') {\n for (let type in features) {\n let feature = features[type];\n for (let setting in feature) {\n let r;\n let f = mapFeatureStrings([type, setting]);\n if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\n res[r] = true;\n }\n }\n }\n }\n\n return Object.keys(res);\n}\n","import AATStateMachine from './AATStateMachine';\nimport AATLookupTable from './AATLookupTable';\nimport {cache} from '../decorators';\n\n// indic replacement flags\nconst MARK_FIRST = 0x8000;\nconst MARK_LAST = 0x2000;\nconst VERB = 0x000F;\n\n// contextual substitution and glyph insertion flag\nconst SET_MARK = 0x8000;\n\n// ligature entry flags\nconst SET_COMPONENT = 0x8000;\nconst PERFORM_ACTION = 0x2000;\n\n// ligature action masks\nconst LAST_MASK = 0x80000000;\nconst STORE_MASK = 0x40000000;\nconst OFFSET_MASK = 0x3FFFFFFF;\n\nconst VERTICAL_ONLY = 0x800000;\nconst REVERSE_DIRECTION = 0x400000;\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\n\n// glyph insertion flags\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\nconst MARKED_IS_KASHIDA_LIKE = 0x1000;\nconst CURRENT_INSERT_BEFORE = 0x0800;\nconst MARKED_INSERT_BEFORE = 0x0400;\nconst CURRENT_INSERT_COUNT = 0x03E0;\nconst MARKED_INSERT_COUNT = 0x001F;\n\nexport default class AATMorxProcessor {\n constructor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n }\n\n // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n process(glyphs, features = {}) {\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n // enable/disable the requested features\n for (let feature of chain.features) {\n let f;\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n }\n\n // remove deleted glyphs\n let index = glyphs.length - 1;\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n\n index--;\n }\n\n return glyphs;\n }\n\n processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n }\n\n @cache\n getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n }\n\n getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n case 1:\n return this.processContextualSubstitution;\n case 2:\n return this.processLigature;\n case 4:\n return this.processNoncontextualSubstitutions;\n case 5:\n return this.processGlyphInsertion;\n default:\n throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\n }\n }\n\n processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n }\n\n processContextualSubstitution(glyph, entry, index) {\n let subsitutions = this.subtable.table.substitutionTable.items;\n if (entry.markIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.markIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.currentIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.currentIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[index];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n }\n\n processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n\n if (entry.flags & PERFORM_ACTION) {\n let actions = this.subtable.table.ligatureActions;\n let components = this.subtable.table.components;\n let ligatureList = this.subtable.table.ligatureList;\n\n let actionIndex = entry.action;\n let last = false;\n let ligatureIndex = 0;\n let codePoints = [];\n let ligatureGlyphs = [];\n\n while (!last) {\n let componentGlyph = this.ligatureStack.pop();\n codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\n\n let action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n let store = !!(action & STORE_MASK);\n let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n offset += this.glyphs[componentGlyph].id;\n\n let component = components.getItem(offset);\n ligatureIndex += component;\n\n if (last || store) {\n let ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n }\n\n // Put ligature glyph indexes back on the stack\n this.ligatureStack.push(...ligatureGlyphs);\n }\n }\n\n processNoncontextualSubstitutions(subtable, glyphs, index) {\n let lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n for (index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.id !== 0xffff) {\n let gid = lookupTable.lookup(glyph.id);\n if (gid) { // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n }\n\n _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n let insertions = [];\n while (count--) {\n let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n\n if (!isBefore) {\n glyphIndex++;\n }\n\n this.glyphs.splice(glyphIndex, 0, ...insertions);\n }\n\n processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n\n if (entry.markedInsertIndex !== 0xffff) {\n let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n\n if (entry.currentInsertIndex !== 0xffff) {\n let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\n }\n }\n\n getSupportedFeatures() {\n let features = [];\n for (let chain of this.morx.chains) {\n for (let feature of chain.features) {\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n\n return features;\n }\n\n generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n\n return this.inputCache[gid] || [];\n }\n\n generateInputCache() {\n this.inputCache = {};\n\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n }\n\n generateInputsForSubtable(subtable) {\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n\n let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n\n this.subtable = subtable;\n this.ligatureStack = [];\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let input = [];\n let stack = [];\n this.glyphs = [];\n\n stateMachine.traverse({\n enter: (glyph, entry) => {\n let glyphs = this.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: this.ligatureStack.slice()\n });\n\n // Add glyph to input and glyphs to process.\n let g = this.font.getGlyph(glyph);\n input.push(g);\n glyphs.push(input[input.length - 1]);\n\n // Process ligature substitution\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\n\n // Add input to result if only one matching (non-deleted) glyph remains.\n let count = 0;\n let found = 0;\n for (let i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n\n if (count === 1) {\n let result = input.map(g => g.id);\n let cache = this.inputCache[found];\n if (cache) {\n cache.push(result);\n } else {\n this.inputCache[found] = [result];\n }\n }\n },\n\n exit: () => {\n ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\n input.pop();\n }\n });\n }\n}\n\n// swaps the glyphs in rangeA with those in rangeB\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\n let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n if (reverseB) {\n end.reverse();\n }\n\n let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\n if (reverseA) {\n start.reverse();\n }\n\n glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\n return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n let length = lastGlyph - firstGlyph + 1;\n switch (verb) {\n case 0: // no change\n return glyphs;\n\n case 1: // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n case 2: // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n case 3: // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n case 4: // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n case 5: // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n case 6: // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n case 7: // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n case 8: // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n case 9: // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n case 10: // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n case 11: // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n case 12: // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n case 13: // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n case 14: // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n case 15: // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n default:\n throw new Error(`Unknown verb: ${verb}`);\n }\n}\n","import AATLookupTable from './AATLookupTable';\n\nconst START_OF_TEXT_STATE = 0;\nconst START_OF_LINE_STATE = 1;\n\nconst END_OF_TEXT_CLASS = 0;\nconst OUT_OF_BOUNDS_CLASS = 1;\nconst DELETED_GLYPH_CLASS = 2;\nconst END_OF_LINE_CLASS = 3;\n\nconst DONT_ADVANCE = 0x4000;\n\nexport default class AATStateMachine {\n constructor(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n\n process(glyphs, reverse, processEntry) {\n let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n let index = reverse ? glyphs.length - 1 : 0;\n let dir = reverse ? -1 : 1;\n\n while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\n let glyph = null;\n let classCode = OUT_OF_BOUNDS_CLASS;\n let shouldAdvance = true;\n\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n if (glyph.id === 0xffff) { // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n\n let row = this.stateTable.stateArray.getItem(currentState);\n let entryIndex = row[classCode];\n let entry = this.stateTable.entryTable.getItem(entryIndex);\n\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n\n currentState = entry.newState;\n if (shouldAdvance) {\n index += dir;\n }\n }\n\n return glyphs;\n }\n\n /**\n * Performs a depth-first traversal of the glyph strings\n * represented by the state machine.\n */\n traverse(opts, state = 0, visited = new Set) {\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n\n let {nClasses, stateArray, entryTable} = this.stateTable;\n let row = stateArray.getItem(state);\n\n // Skip predefined classes\n for (let classCode = 4; classCode < nClasses; classCode++) {\n let entryIndex = row[classCode];\n let entry = entryTable.getItem(entryIndex);\n\n // Try all glyphs in the class\n for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n }\n}\n","import {cache} from '../decorators';\nimport {range} from '../utils';\n\nexport default class AATLookupTable {\n constructor(table) {\n this.table = table;\n }\n\n lookup(glyph) {\n switch (this.table.version) {\n case 0: // simple array format\n return this.table.values.getItem(glyph);\n\n case 2: // segment format\n case 4: {\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n\n return null;\n }\n\n case 6: { // lookup single\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.glyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.glyph) {\n max = mid - 1;\n } else if (glyph > seg.glyph) {\n min = mid + 1;\n } else {\n return seg.value;\n }\n }\n\n return null;\n }\n\n case 8: // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n }\n\n @cache\n glyphsForValue(classValue) {\n let res = [];\n\n switch (this.table.version) {\n case 2: // segment format\n case 4: {\n for (let segment of this.table.segments) {\n if ((this.table.version === 2 && segment.value === classValue)) {\n res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (let index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n\n break;\n }\n\n case 6: { // lookup single\n for (let segment of this.table.segments) {\n if (segment.value === classValue) {\n res.push(segment.glyph);\n }\n }\n\n break;\n }\n\n case 8: { // lookup trimmed\n for (let i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n\n break;\n }\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n\n return res;\n }\n}\n","import ShapingPlan from './ShapingPlan';\nimport * as Shapers from './shapers';\nimport GlyphInfo from './GlyphInfo';\nimport GSUBProcessor from './GSUBProcessor';\nimport GPOSProcessor from './GPOSProcessor';\n\nexport default class OTLayoutEngine {\n constructor(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n\n setup(glyphRun) {\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\n\n // Select a script based on what is available in GSUB/GPOS.\n let script = null;\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n this.shaper = Shapers.choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\n\n // Assign chosen features to output glyph run\n for (let key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n }\n\n substitute(glyphRun) {\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos);\n\n // Map glyph infos back to normal Glyph objects\n glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\n }\n }\n\n position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n // Reverse the glyphs and positions if the script is right-to-left\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n\n return this.GPOSProcessor && this.GPOSProcessor.features;\n }\n\n zeroMarkAdvances(positions) {\n for (let i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GSUBProcessor.features));\n }\n\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GPOSProcessor.features));\n }\n\n return features;\n }\n}\n","import * as Script from '../layout/Script';\n\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nexport default class ShapingPlan {\n constructor(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n\n /**\n * Adds the given features to the last stage.\n * Ignores features that have already been applied.\n */\n _addFeatures(features, global) {\n let stageIndex = this.stages.length - 1;\n let stage = this.stages[stageIndex];\n for (let feature of features) {\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n\n /**\n * Add features to the last stage\n */\n add(arg, global = true) {\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n\n if (typeof arg === 'string') {\n arg = [arg];\n }\n\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n\n /**\n * Add a new stage\n */\n addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n }\n\n setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (let tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n let stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n\n /**\n * Assigns the global features to the given glyphs\n */\n assignGlobalFeatures(glyphs) {\n for (let glyph of glyphs) {\n for (let feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n\n /**\n * Executes the planned stages using the given OTProcessor\n */\n process(processor, glyphs, positions) {\n for (let stage of this.stages) {\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport ArabicShaper from './ArabicShaper';\nimport HangulShaper from './HangulShaper';\nimport IndicShaper from './IndicShaper';\nimport UniversalShaper from './UniversalShaper';\n\nconst SHAPERS = {\n arab: ArabicShaper, // Arabic\n mong: ArabicShaper, // Mongolian\n syrc: ArabicShaper, // Syriac\n 'nko ': ArabicShaper, // N'Ko\n phag: ArabicShaper, // Phags Pa\n mand: ArabicShaper, // Mandaic\n mani: ArabicShaper, // Manichaean\n phlp: ArabicShaper, // Psalter Pahlavi\n\n hang: HangulShaper, // Hangul\n\n bng2: IndicShaper, // Bengali\n beng: IndicShaper, // Bengali\n dev2: IndicShaper, // Devanagari\n deva: IndicShaper, // Devanagari\n gjr2: IndicShaper, // Gujarati\n gujr: IndicShaper, // Gujarati\n guru: IndicShaper, // Gurmukhi\n gur2: IndicShaper, // Gurmukhi\n knda: IndicShaper, // Kannada\n knd2: IndicShaper, // Kannada\n mlm2: IndicShaper, // Malayalam\n mlym: IndicShaper, // Malayalam\n ory2: IndicShaper, // Oriya\n orya: IndicShaper, // Oriya\n taml: IndicShaper, // Tamil\n tml2: IndicShaper, // Tamil\n telu: IndicShaper, // Telugu\n tel2: IndicShaper, // Telugu\n khmr: IndicShaper, // Khmer\n\n bali: UniversalShaper, // Balinese\n batk: UniversalShaper, // Batak\n brah: UniversalShaper, // Brahmi\n bugi: UniversalShaper, // Buginese\n buhd: UniversalShaper, // Buhid\n cakm: UniversalShaper, // Chakma\n cham: UniversalShaper, // Cham\n dupl: UniversalShaper, // Duployan\n egyp: UniversalShaper, // Egyptian Hieroglyphs\n gran: UniversalShaper, // Grantha\n hano: UniversalShaper, // Hanunoo\n java: UniversalShaper, // Javanese\n kthi: UniversalShaper, // Kaithi\n kali: UniversalShaper, // Kayah Li\n khar: UniversalShaper, // Kharoshthi\n khoj: UniversalShaper, // Khojki\n sind: UniversalShaper, // Khudawadi\n lepc: UniversalShaper, // Lepcha\n limb: UniversalShaper, // Limbu\n mahj: UniversalShaper, // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper, // Meitei Mayek\n modi: UniversalShaper, // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper, // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper, // Rejang\n saur: UniversalShaper, // Saurashtra\n shrd: UniversalShaper, // Sharada\n sidd: UniversalShaper, // Siddham\n sinh: IndicShaper, // Sinhala\n sund: UniversalShaper, // Sundanese\n sylo: UniversalShaper, // Syloti Nagri\n tglg: UniversalShaper, // Tagalog\n tagb: UniversalShaper, // Tagbanwa\n tale: UniversalShaper, // Tai Le\n lana: UniversalShaper, // Tai Tham\n tavt: UniversalShaper, // Tai Viet\n takr: UniversalShaper, // Takri\n tibt: UniversalShaper, // Tibetan\n tfng: UniversalShaper, // Tifinagh\n tirh: UniversalShaper, // Tirhuta\n\n latn: DefaultShaper, // Latin\n DFLT: DefaultShaper // Default\n};\n\nexport function choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n let shaper = SHAPERS[s];\n if (shaper) {\n return shaper;\n }\n }\n\n return DefaultShaper;\n}\n","import {isDigit} from 'unicode-properties';\n\nconst VARIATION_FEATURES = ['rvrn'];\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nconst VERTICAL_FEATURES = ['vert'];\nconst DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\n\nexport default class DefaultShaper {\n static zeroMarkWidths = 'AFTER_GPOS';\n static plan(plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(plan);\n this.planFeatures(plan);\n this.planPostprocessing(plan, features);\n\n // Assign the global features to all the glyphs\n plan.assignGlobalFeatures(glyphs);\n\n // Assign local features to glyphs\n this.assignFeatures(plan, glyphs);\n }\n\n static planPreprocessing(plan) {\n plan.add({\n global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\n local: FRACTIONAL_FEATURES\n });\n }\n\n static planFeatures(plan) {\n // Do nothing by default. Let subclasses override this.\n }\n\n static planPostprocessing(plan, userFeatures) {\n plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\n plan.setFeatureOverrides(userFeatures);\n }\n\n static assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (let i = 0; i < glyphs.length; i++) {\n let glyph = glyphs[i];\n if (glyph.codePoints[0] === 0x2044) { // fraction slash\n let start = i;\n let end = i + 1;\n\n // Apply numerator\n while (start > 0 && isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n }\n\n // Apply denominator\n while (end < glyphs.length && isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n }\n\n // Apply fraction slash\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport {getCategory} from 'unicode-properties';\nimport UnicodeTrie from 'unicode-trie';\nimport { decodeBase64 } from '../../utils';\n\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\n\nconst ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\n\nconst ISOL = 'isol';\nconst FINA = 'fina';\nconst FIN2 = 'fin2';\nconst FIN3 = 'fin3';\nconst MEDI = 'medi';\nconst MED2 = 'med2';\nconst INIT = 'init';\nconst NONE = null;\n\n// Each entry is [prevAction, curAction, nextState]\nconst STATE_TABLE = [\n // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n // State 0: prev was U, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ],\n\n // State 1: prev was R or ISOL/ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ],\n\n // State 2: prev was D/L in ISOL form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ],\n\n // State 3: prev was D in FINA form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ],\n\n // State 4: prev was FINA ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ],\n\n // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ],\n\n // State 6: prev was DALATH/RISH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ]\n];\n\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nexport default class ArabicShaper extends DefaultShaper {\n static planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n for (let i = 0; i < FEATURES.length; i++) {\n let feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n\n plan.addStage('mset');\n }\n\n static assignFeatures(plan, glyphs) {\n super.assignFeatures(plan, glyphs);\n\n let prev = -1;\n let state = 0;\n let actions = [];\n\n // Apply the state machine to map glyphs to features\n for (let i = 0; i < glyphs.length; i++) {\n let curAction, prevAction;\n var glyph = glyphs[i];\n let type = getShapingClass(glyph.codePoints[0]);\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n\n [prevAction, curAction, state] = STATE_TABLE[state][type];\n\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n\n actions[i] = curAction;\n prev = i;\n }\n\n // Apply the chosen features to their respective glyphs\n for (let index = 0; index < glyphs.length; index++) {\n let feature;\n var glyph = glyphs[index];\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n }\n}\n\nfunction getShapingClass(codePoint) {\n let res = trie.get(codePoint);\n if (res) {\n return res - 1;\n }\n\n let category = getCategory(codePoint);\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n\n return ShapingClasses.Non_Joining;\n}\n","import DefaultShaper from './DefaultShaper';\nimport GlyphInfo from '../GlyphInfo';\n\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n * - decompose if unsupported by the font:\n * -> \n * -> \n * -> \n *\n * - compose if supported by the font:\n * -> \n * -> \n * -> \n *\n * - reorder tone marks (S is any valid syllable):\n * -> \n *\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nexport default class HangulShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n }\n\n static assignFeatures(plan, glyphs) {\n let state = 0;\n let i = 0;\n while (i < glyphs.length) {\n let action;\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n let type = getType(code);\n\n [ action, state ] = STATE_TABLE[state][type];\n\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n break;\n\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n\n i++;\n }\n }\n}\n\nconst HANGUL_BASE = 0xac00;\nconst HANGUL_END = 0xd7a4;\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nconst L_BASE = 0x1100; // lead\nconst V_BASE = 0x1161; // vowel\nconst T_BASE = 0x11a7; // trail\nconst L_COUNT = 19;\nconst V_COUNT = 21;\nconst T_COUNT = 28;\nconst L_END = L_BASE + L_COUNT - 1;\nconst V_END = V_BASE + V_COUNT - 1;\nconst T_END = T_BASE + T_COUNT - 1;\nconst DOTTED_CIRCLE = 0x25cc;\n\nconst isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\nconst isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\nconst isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\nconst isTone = code => 0x302e <= code && code <= 0x302f;\nconst isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;\nconst isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\n\n// Character categories\nconst X = 0; // Other character\nconst L = 1; // Leading consonant\nconst V = 2; // Medial vowel\nconst T = 3; // Trailing consonant\nconst LV = 4; // Composed syllable\nconst LVT = 5; // Composed syllable\nconst M = 6; // Tone mark\n\n// This function classifies a character using the above categories.\nfunction getType(code) {\n if (isL(code)) { return L; }\n if (isV(code)) { return V; }\n if (isT(code)) { return T; }\n if (isLV(code)) { return LV; }\n if (isLVT(code)) { return LVT; }\n if (isTone(code)) { return M; }\n return X;\n}\n\n// State machine actions\nconst NO_ACTION = 0;\nconst DECOMPOSE = 1;\nconst COMPOSE = 2;\nconst TONE_MARK = 4;\nconst INVALID = 5;\n\n// Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\nconst STATE_TABLE = [\n // X L V T LV LVT M\n // State 0: start state\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 1: \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 2: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\n\n // State 3: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\n];\n\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n\n let s = code - HANGUL_BASE;\n let t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n let l = L_BASE + s / V_COUNT | 0;\n let v = V_BASE + s % V_COUNT;\n\n // Don't decompose if all of the components are not available\n if (!font.hasGlyphForCodePoint(l) ||\n !font.hasGlyphForCodePoint(v) ||\n (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\n return i;\n }\n\n // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n let ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n\n let vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n\n let insert = [ ljmo, vjmo ];\n\n if (t > T_BASE) {\n let tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n\n glyphs.splice(i, 1, ...insert);\n return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n let type = getType(code);\n\n let prev = glyphs[i - 1].codePoints[0];\n let prevType = getType(prev);\n\n // Figure out what type of syllable we're dealing with\n let lv, ljmo, vjmo, tjmo;\n if (prevType === LV && type === T) {\n // \n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // \n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // \n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n\n let l = ljmo.codePoints[0];\n let v = vjmo.codePoints[0];\n\n // Make sure L and V are combining characters\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n\n let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\n if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\n let s = lv + (t - T_BASE);\n\n // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n if (font.hasGlyphForCodePoint(s)) {\n let del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n }\n\n // Didn't compose (either a non-combining component or unsupported by font).\n if (ljmo) { ljmo.features.ljmo = true; }\n if (vjmo) { vjmo.features.vjmo = true; }\n if (tjmo) { tjmo.features.tjmo = true; }\n\n if (prevType === LV) {\n // Sequence was originally , which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n\n return i;\n}\n\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n case V:\n return 2;\n case T:\n return 3;\n }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n // Move tone mark to the beginning of the previous syllable, unless it is zero width\n if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\n\n let prev = glyphs[i - 1].codePoints[0];\n let len = getLength(prev);\n\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\n\n // If the tone mark is zero width, insert the dotted circle before, otherwise after\n let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n\n return i;\n}\n","import {isMark} from 'unicode-properties';\nimport OTProcessor from './OTProcessor';\n\nexport default class GlyphInfo {\n constructor(font, id, codePoints = [], features) {\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n\n this.features = {};\n if (Array.isArray(features)) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n\n get id() {\n return this._id;\n }\n\n set id(id) {\n this._id = id;\n this.substituted = true;\n\n let GDEF = this._font.GDEF;\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n\n copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n }\n}\n","import GlyphIterator from './GlyphIterator';\nimport * as Script from '../layout/Script';\n\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nexport default class OTProcessor {\n constructor(font, table) {\n this.font = font;\n this.table = table;\n\n this.script = null;\n this.scriptTag = null;\n\n this.language = null;\n this.languageTag = null;\n\n this.features = {};\n this.lookups = {};\n\n // Setup variation substitutions\n this.variationsIndex = font._variationProcessor\n ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\n : -1;\n\n // initialize to default script + language\n this.selectScript();\n\n // current context (set by applyFeatures)\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n\n findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n for (let entry of this.table.scriptList) {\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n\n return null;\n }\n\n selectScript(script, language, direction) {\n let changed = false;\n let entry;\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n\n if (!entry) {\n return this.scriptTag;\n }\n\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n\n if (!direction || direction !== this.direction) {\n this.direction = direction || Script.direction(script);\n }\n\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n\n if (!language || language !== this.languageTag) {\n this.language = null;\n\n for (let lang of this.script.langSysRecords) {\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n\n changed = true;\n }\n\n // Build a feature lookup table\n if (changed) {\n this.features = {};\n if (this.language) {\n for (let featureIndex of this.language.featureIndexes) {\n let record = this.table.featureList[featureIndex];\n let substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n\n return this.scriptTag;\n }\n\n lookupsForFeatures(userFeatures = [], exclude) {\n let lookups = [];\n for (let tag of userFeatures) {\n let feature = this.features[tag];\n if (!feature) {\n continue;\n }\n\n for (let lookupIndex of feature.lookupListIndexes) {\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n\n lookups.sort((a, b) => a.index - b.index);\n return lookups;\n }\n\n substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n\n let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n let substitutions = record.featureTableSubstitution.substitutions;\n for (let substitution of substitutions) {\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n\n return null;\n }\n\n findVariationsIndex(coords) {\n let variations = this.table.featureVariations;\n if (!variations) {\n return -1;\n }\n\n let records = variations.featureVariationRecords;\n for (let i = 0; i < records.length; i++) {\n let conditions = records[i].conditionSet.conditionTable;\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n\n return -1;\n }\n\n variationConditionsMatch(conditions, coords) {\n return conditions.every(condition => {\n let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n let lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n }\n\n applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n\n for (let { feature, lookup } of lookups) {\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n\n for (let table of lookup.subTables) {\n let res = this.applyLookup(lookup.lookupType, table);\n if (res) {\n break;\n }\n }\n\n this.glyphIterator.next();\n }\n }\n }\n\n applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n }\n\n applyLookupList(lookupRecords) {\n let options = this.glyphIterator.options;\n let glyphIndex = this.glyphIterator.index;\n\n for (let lookupRecord of lookupRecords) {\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex);\n\n // Get the lookup and setup flags for subtables\n let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\n\n // Apply lookup subtables until one matches\n for (let table of lookup.subTables) {\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n }\n\n coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n\n case 2:\n for (let range of coverage.rangeRecords) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n\n break;\n }\n\n return -1;\n }\n\n match(sequenceIndex, sequence, fn, matched) {\n let pos = this.glyphIterator.index;\n let glyph = this.glyphIterator.increment(sequenceIndex);\n let idx = 0;\n\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n\n idx++;\n glyph = this.glyphIterator.next();\n }\n\n this.glyphIterator.index = pos;\n if (idx < sequence.length) {\n return false;\n }\n\n return matched || true;\n }\n\n sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\n }\n\n sequenceMatchIndices(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => {\n // If the current feature doesn't apply to this glyph,\n if (!(this.currentFeature in glyph.features)) {\n return false;\n }\n\n return component === glyph.id;\n }, []);\n }\n\n coverageSequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (coverage, glyph) =>\n this.coverageIndex(coverage, glyph.id) >= 0\n );\n }\n\n getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1: // Class array\n let i = glyph - classDef.startGlyph;\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n\n break;\n\n case 2:\n for (let range of classDef.classRangeRecord) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n\n break;\n }\n\n return 0;\n }\n\n classSequenceMatches(sequenceIndex, sequence, classDef) {\n return this.match(sequenceIndex, sequence, (classID, glyph) =>\n classID === this.getClassID(glyph.id, classDef)\n );\n }\n\n applyContext(table) {\n let index, set;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n set = table.ruleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n if (index === -1) {\n return false;\n }\n\n set = table.classSet[index];\n for (let rule of set) {\n if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n\n applyChainingContext(table) {\n let index;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let set = table.chainRuleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\n && this.sequenceMatches(1, rule.input)\n && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n let rules = table.chainClassSet[index];\n if (!rules) {\n return false;\n }\n\n for (let rule of rules) {\n if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\n this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\n this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\n this.coverageSequenceMatches(0, table.inputCoverage) &&\n this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n}\n","export default class GlyphIterator {\n constructor(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n\n reset(options = {}, index = 0) {\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n }\n\n get cur() {\n return this.glyphs[this.index] || null;\n }\n\n shouldIgnore(glyph) {\n return (this.flags.ignoreMarks && glyph.isMark) ||\n (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\n (this.flags.ignoreLigatures && glyph.isLigature) ||\n (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\n }\n\n move(dir) {\n this.index += dir;\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n\n return this.glyphs[this.index];\n }\n\n next() {\n return this.move(+1);\n }\n\n prev() {\n return this.move(-1);\n }\n\n peek(count = 1) {\n let idx = this.index;\n let res = this.increment(count);\n this.index = idx;\n return res;\n }\n\n peekIndex(count = 1) {\n let idx = this.index;\n this.increment(count);\n let res = this.index;\n this.index = idx;\n return res;\n }\n\n increment(count = 1) {\n let dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n while (count--) {\n this.move(dir);\n }\n\n return this.glyphs[this.index];\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport {getCategory} from 'unicode-properties';\nimport * as Script from '../../layout/Script';\nimport GlyphInfo from '../GlyphInfo';\nimport indicMachine from './indic.json';\nimport useData from './use.json';\nimport {\n CATEGORIES,\n POSITIONS,\n CONSONANT_FLAGS,\n JOINER_FLAGS,\n HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\n INDIC_DECOMPOSITIONS\n} from './indic-data';\nimport { decodeBase64 } from '../../utils';\n\nconst {decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/indic.trie', 'base64')));\nconst stateMachine = new StateMachine(indicMachine);\n\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nexport default class IndicShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n plan.addStage(['locl', 'ccmp']);\n\n plan.addStage(initialReordering);\n\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n\n plan.addStage(finalReordering);\n\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n });\n\n // Setup the indic config for the selected script\n plan.unicodeScript = Script.fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\n\n // TODO: turn off kern (Khmer) and liga features.\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\n if (d) {\n let decomposed = d.map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction indicCategory(glyph) {\n return trie.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\n}\n\nclass IndicInfo {\n constructor(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n let last = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\n if (start > last) {\n ++syllable;\n for (let i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new IndicInfo(\n 1 << indicCategory(glyphs[i]),\n indicPosition(glyphs[i]),\n tags[0],\n syllable\n );\n }\n\n last = end + 1;\n }\n\n if (last < glyphs.length) {\n ++syllable;\n for (let i = last; i < glyphs.length; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\n\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n for (let glyph of glyphs) {\n glyph.features = {[feature]: true};\n }\n\n let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n\n return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n let glyphs = [virama, consonant, virama];\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n\n return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n let virama = font.glyphForCodePoint(indicConfig.virama).id;\n if (virama) {\n let info = new GlyphInfo(font, virama, [indicConfig.virama]);\n for (let i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let {category, syllableType} = glyphs[start].shaperInfo;\n\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n\n if (syllableType === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(\n 1 << indicCategory(g),\n indicPosition(g),\n glyphs[start].shaperInfo.syllableType,\n glyphs[start].shaperInfo.syllable\n );\n\n // Insert after possible Repha.\n let i = start;\n while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\n i++;\n }\n\n glyphs.splice(i++, 0, g);\n end++;\n }\n\n // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n let base = end;\n let limit = start;\n let hasReph = false;\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\n features.rphf &&\n start + 3 <= end && (\n (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\n (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\n )\n ) {\n // See if it matches the 'rphf' feature.\n let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\n limit += 2;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n\n switch (indicConfig.basePos) {\n case 'Last': {\n // starting from the end of the syllable, move backwards\n let i = end;\n let seenBelow = false;\n\n do {\n let info = glyphs[--i].shaperInfo;\n\n // until a consonant is found\n if (isConsonant(glyphs[i])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\n base = i;\n break;\n }\n\n // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n if (info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n\n base = i;\n } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (i > limit);\n break;\n }\n\n case 'First': {\n // The first consonant is always the base.\n base = start;\n\n // Mark all subsequent consonants as below.\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n glyphs[i].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n }\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n }\n\n // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n\n // Reorder characters\n\n for (let i = start; i < base; i++) {\n let info = glyphs[i].shaperInfo;\n info.position = Math.min(POSITIONS.Pre_C, info.position);\n }\n\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n\n // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n for (let j = i + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n break;\n }\n }\n\n // Handle beginning Ra\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n }\n\n // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n if (plan.isOldSpec) {\n let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\n let j;\n for (j = end - 1; j > i; j--) {\n if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\n break;\n }\n }\n\n if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\n // Move Halant to after last consonant.\n let t = glyphs[i];\n glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\n glyphs[j] = t;\n }\n\n break;\n }\n }\n }\n\n // Attach misc marks to previous char to move with them.\n let lastPos = POSITIONS.Start;\n for (let i = start; i < end; i++) {\n let info = glyphs[i].shaperInfo;\n if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\n info.position = lastPos;\n if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (let j = i; j > start; j--) {\n if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n info.position = glyphs[j - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (info.position !== POSITIONS.SMVD) {\n lastPos = info.position;\n }\n }\n\n // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n let last = base;\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n for (let j = last + 1; j < i; j++) {\n if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\n }\n }\n last = i;\n } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n last = i;\n }\n }\n\n let arr = glyphs.slice(start, end);\n arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\n glyphs.splice(start, arr.length, ...arr);\n\n // Find base again\n for (let i = start; i < end; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n base = i;\n break;\n }\n }\n\n // Setup features now\n\n // Reph\n for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\n glyphs[i].features.rphf = true;\n }\n\n // Pre-base\n let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n for (let i = start; i < base; i++) {\n glyphs[i].features.half = true;\n if (blwf) {\n glyphs[i].features.blwf = true;\n }\n }\n\n // Post-base\n for (let i = base + 1; i < end; i++) {\n glyphs[i].features.abvf = true;\n glyphs[i].features.pstf = true;\n glyphs[i].features.blwf = true;\n }\n\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (let i = start; i + 1 < base; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\n glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\n (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\n ) {\n glyphs[i].features.blwf = true;\n glyphs[i + 1].features.blwf = true;\n }\n }\n }\n\n let prefLen = 2;\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (let i = base + 1; i + prefLen - 1 < end; i++) {\n let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\n if (wouldSubstitute(g, 'pref')) {\n for (let j = 0; j < prefLen; j++) {\n glyphs[i++].features.pref = true;\n }\n\n // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n if (features.cfar) {\n for (; i < end; i++) {\n glyphs[i].features.cfar = true;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply ZWJ/ZWNJ effects\n for (let i = start + 1; i < end; i++) {\n if (isJoiner(glyphs[i])) {\n let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\n let j = i;\n\n do {\n j--;\n\n // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n\n // A ZWNJ disables HALF.\n if (nonJoiner) {\n delete glyphs[j].features.half;\n }\n } while (j > start && !isConsonant(glyphs[j]));\n }\n }\n }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n\n let tryPref = !!features.pref;\n\n // Find base again\n let base = start;\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n break;\n }\n }\n }\n\n // For Malayalam, skip over unformed below- (but NOT post-) forms.\n if (plan.unicodeScript === 'Malayalam') {\n for (let i = base + 1; i < end; i++) {\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i === end || !isHalantOrCoeng(glyphs[i])) {\n break;\n }\n\n i++; // Skip halant.\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\n base = i;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n break;\n }\n }\n\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n }\n\n // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n let newPos = base === end ? base - 2 : base - 1;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (let i = newPos; i > start; i--) {\n if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\n let oldPos = i - 1;\n if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\n base--;\n }\n\n let tmp = glyphs[oldPos];\n glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\n glyphs[newPos] = tmp;\n\n newPos--;\n }\n }\n }\n }\n\n // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n if (start + 1 < end &&\n glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\n (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\n ) {\n let newRephPos;\n let rephPos = indicConfig.rephPos;\n let found = false;\n\n // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n\n // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n\n // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n }\n\n // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n }\n\n // 6. Otherwise, reorder reph to the end of the syllable.\n if (!found) {\n newRephPos = end - 1;\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n }\n\n // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (let i = base + 1; i < newRephPos; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n\n let reph = glyphs[start];\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\n glyphs[newRephPos] = reph;\n\n if (start < base && base <= newRephPos) {\n base--;\n }\n }\n\n // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n\n // Note: We just check that something got substituted. We don't check that\n // the feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n let newPos = base;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\n let oldPos = i;\n for (let j = base + 1; j < oldPos; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n newPos--;\n break;\n }\n }\n }\n }\n\n if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos < end && isJoiner(glyphs[newPos])) {\n newPos++;\n }\n }\n\n let oldPos = i;\n let tmp = glyphs[oldPos];\n glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\n glyphs[newPos] = tmp;\n\n if (newPos <= base && base < oldPos) {\n base++;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply 'init' to the Left Matra if it's a word start.\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n","{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}","{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}","// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nexport const CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13, // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14, // Khmer-style Virama.\n Repha: 1 << 15, // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17, // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n};\n\n// Visual positions in a syllable from left to right.\nexport const POSITIONS = {\n Start: 1 << 0,\n\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n\n Above_C: 1 << 6,\n\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n\n End: 1 << 15\n};\n\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\n\nexport const INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n};\n\n// Additional decompositions that aren't in Unicode\nexport const INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport GlyphInfo from '../GlyphInfo';\nimport useData from './use.json';\nimport { decodeBase64 } from '../../utils';\n\nconst {categories, decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/use.trie', 'base64')));\nconst stateMachine = new StateMachine(useData);\n\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nexport default class UniversalShaper extends DefaultShaper {\n static zeroMarkWidths = 'BEFORE_GPOS';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n // Default glyph pre-processing group\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\n\n // Reordering group\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref);\n\n // Orthographic unit shaping group\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder);\n\n // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n\n // Standard topographic presentation and positional feature application\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n if (decompositions[codepoint]) {\n let decomposed = decompositions[codepoint].map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction useCategory(glyph) {\n return trie.get(glyph.codePoints[0]);\n}\n\nclass USEInfo {\n constructor(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\n }\n\n // Assign rphf feature\n let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n for (let i = start; i < start + limit; i++) {\n glyphs[i].features.rphf = true;\n }\n }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n for (let glyph of glyphs) {\n glyph.substituted = false;\n }\n}\n\nfunction recordRphf(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\n\nfunction recordPref(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\n\nfunction reorder(font, glyphs) {\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let i, j;\n let info = glyphs[start].shaperInfo;\n let type = info.syllableType;\n\n // Only a few syllable types need reordering.\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n }\n\n // Insert a dotted circle glyph in broken clusters.\n if (type === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info;\n\n // Insert after possible Repha.\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\n glyphs.splice(++i, 0, g);\n end++;\n }\n\n // Move things forward.\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\n break;\n }\n }\n }\n\n // Move things back.\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\n }\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\n","import OTProcessor from './OTProcessor';\nimport GlyphInfo from './GlyphInfo';\n\nexport default class GSUBProcessor extends OTProcessor {\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let glyph = this.glyphIterator.cur;\n switch (table.version) {\n case 1:\n glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\n break;\n\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n\n return true;\n }\n\n case 2: { // Multiple Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let sequence = table.sequences.get(index);\n\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n\n let features = this.glyphIterator.cur.features;\n let curGlyph = this.glyphIterator.cur;\n let replacement = sequence.slice(1).map((gid, i) => {\n let glyph = new GlyphInfo(this.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n\n this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\n return true;\n }\n\n return false;\n }\n\n case 3: { // Alternate Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let USER_INDEX = 0; // TODO\n this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\n return true;\n }\n\n return false;\n }\n\n case 4: { // Ligature Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n for (let ligature of table.ligatureSets.get(index)) {\n let matched = this.sequenceMatchIndices(1, ligature.components);\n if (!matched) {\n continue;\n }\n\n let curGlyph = this.glyphIterator.cur;\n\n // Concatenate all of the characters the new ligature will represent\n let characters = curGlyph.codePoints.slice();\n for (let index of matched) {\n characters.push(...this.glyphs[index].codePoints);\n }\n\n // Create the replacement ligature glyph\n let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\n ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true;\n\n // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n let isMarkLigature = curGlyph.isMark;\n for (let i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n\n let lastLigID = curGlyph.ligatureID;\n let lastNumComps = curGlyph.codePoints.length;\n let curComps = lastNumComps;\n let idx = this.glyphIterator.index + 1;\n\n // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n for (let matchIndex of matched) {\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n }\n\n // Adjust ligature components for any marks following\n if (lastLigID && !isMarkLigature) {\n for (let i = idx; i < this.glyphs.length; i++) {\n if (this.glyphs[i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\n this.glyphs[i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n }\n\n // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n for (let i = matched.length - 1; i >= 0; i--) {\n this.glyphs.splice(matched[i], 1);\n }\n\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n\n return false;\n }\n\n case 5: // Contextual Substitution\n return this.applyContext(table);\n\n case 6: // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n\n case 7: // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`GSUB lookupType ${lookupType} is not supported`);\n }\n }\n}\n","import OTProcessor from './OTProcessor';\n\nexport default class GPOSProcessor extends OTProcessor {\n applyPositionValue(sequenceIndex, value) {\n let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n }\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n }\n\n // TODO: device tables\n }\n\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single positioning value\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n\n return true;\n }\n\n case 2: { // Pair Adjustment Positioning\n let nextGlyph = this.glyphIterator.peek();\n if (!nextGlyph) {\n return false;\n }\n\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1: // Adjustments for glyph pairs\n let set = table.pairSets.get(index);\n\n for (let pair of set) {\n if (pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n return false;\n\n case 2: // Class pair adjustment\n let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n let class2 = this.getClassID(nextGlyph.id, table.classDef2);\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n case 3: { // Cursive Attachment Positioning\n let nextIndex = this.glyphIterator.peekIndex();\n let nextGlyph = this.glyphs[nextIndex];\n if (!nextGlyph) {\n return false;\n }\n\n let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n\n let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n\n let entry = this.getAnchor(nextRecord.entryAnchor);\n let exit = this.getAnchor(curRecord.exitAnchor);\n\n let cur = this.positions[this.glyphIterator.index];\n let next = this.positions[nextIndex];\n let d;\n\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n\n d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n\n return true;\n }\n\n case 4: { // Mark to base positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n if (baseIndex === -1) {\n return false;\n }\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 5: { // Mark to ligature positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\n if (ligIndex === -1) {\n return false;\n }\n\n let ligAttach = table.ligatureArray[ligIndex];\n let markGlyph = this.glyphIterator.cur;\n let ligGlyph = this.glyphs[baseGlyphIndex];\n let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\n ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\n : ligGlyph.codePoints.length - 1;\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = ligAttach[compIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 6: { // Mark to mark positioning\n let mark1Index = this.coverageIndex(table.mark1Coverage);\n if (mark1Index === -1) {\n return false;\n }\n\n // get the previous mark to attach to\n let prevIndex = this.glyphIterator.peekIndex(-1);\n let prev = this.glyphs[prevIndex];\n if (!prev || !prev.isMark) {\n return false;\n }\n\n let cur = this.glyphIterator.cur;\n\n // The following logic was borrowed from Harfbuzz\n let good = false;\n if (cur.ligatureID === prev.ligatureID) {\n if (!cur.ligatureID) { // Marks belonging to the same base\n good = true;\n } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\n good = true;\n }\n }\n\n if (!good) {\n return false;\n }\n\n let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n if (mark2Index === -1) {\n return false;\n }\n\n let markRecord = table.mark1Array[mark1Index];\n let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, prevIndex);\n return true;\n }\n\n case 7: // Contextual positioning\n return this.applyContext(table);\n\n case 8: // Chaining contextual positioning\n return this.applyChainingContext(table);\n\n case 9: // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`Unsupported GPOS table: ${lookupType}`);\n }\n }\n\n applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n let baseCoords = this.getAnchor(baseAnchor);\n let markCoords = this.getAnchor(markRecord.markAnchor);\n\n let basePos = this.positions[baseGlyphIndex];\n let markPos = this.positions[this.glyphIterator.index];\n\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n }\n\n getAnchor(anchor) {\n // TODO: contour point, device tables\n let x = anchor.xCoordinate;\n let y = anchor.yCoordinate;\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n\n return { x, y };\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n super.applyFeatures(userFeatures, glyphs, advances);\n\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n\n this.fixMarkAttachment();\n }\n\n fixCursiveAttachment(i) {\n let glyph = this.glyphs[i];\n if (glyph.cursiveAttachment != null) {\n let j = glyph.cursiveAttachment;\n\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n }\n\n fixMarkAttachment() {\n for (let i = 0; i < this.glyphs.length; i++) {\n let glyph = this.glyphs[i];\n if (glyph.markAttachment != null) {\n let j = glyph.markAttachment;\n\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n\n if (this.direction === 'ltr') {\n for (let k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (let k = j + 1; k < i + 1; k++) {\n this.positions[i].xOffset += this.positions[k].xAdvance;\n this.positions[i].yOffset += this.positions[k].yAdvance;\n }\n }\n }\n }\n }\n}\n","import Glyph from './Glyph';\nimport Path from './Path';\nimport BBox from './BBox';\nimport * as r from 'restructure';\n\n// The header for both simple and composite glyphs\nlet GlyfHeader = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n});\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\n// Flags for composite glyphs\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\nconst ROUND_XY_TO_GRID = 1 << 2;\nconst WE_HAVE_A_SCALE = 1 << 3;\nconst MORE_COMPONENTS = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\nconst USE_MY_METRICS = 1 << 9;\nconst OVERLAP_COMPOUND = 1 << 10;\nconst SCALED_COMPONENT_OFFSET = 1 << 11;\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\n// Represents a point in a simple glyph\nexport class Point {\n constructor(onCurve, endContour, x = 0, y = 0) {\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n\n copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n }\n}\n\n// Represents a component in a composite glyph\nclass Component {\n constructor(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n }\n}\n\n/**\n * Represents a TrueType glyph.\n */\nexport default class TTFGlyph extends Glyph {\n type = 'TTF';\n\n // Parses just the glyph header and returns the bounding box\n _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += this._font.loca.offsets[this.id];\n let glyph = GlyfHeader.decode(stream);\n\n let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n }\n\n // Parses a single glyph coordinate\n _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n if (!same) {\n val = -val;\n }\n\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n\n return val;\n }\n\n // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n _decode() {\n let glyfPos = this._font.loca.offsets[this.id];\n let nextPos = this._font.loca.offsets[this.id + 1];\n\n // Nothing to do if there is no data for this glyph\n if (glyfPos === nextPos) { return null; }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += glyfPos;\n let startPos = stream.pos;\n\n let glyph = GlyfHeader.decode(stream);\n\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n\n return glyph;\n }\n\n _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n\n let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n\n let flags = [];\n let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag);\n\n // check for repeat flag\n if (flag & REPEAT) {\n let count = stream.readUInt8();\n for (let j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n\n let px = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n\n let py = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n\n if (this._font._variationProcessor) {\n let points = glyph.points.slice();\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.slice(-4);\n }\n\n return;\n }\n\n _decodeComposite(glyph, stream, offset = 0) {\n // this is a composite glyph\n glyph.components = [];\n let haveInstructions = false;\n let flags = MORE_COMPONENTS;\n\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n let gPos = stream.pos - offset;\n let glyphID = stream.readUInt16BE();\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX =\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n }\n\n glyph.components.push(component);\n }\n\n if (this._font._variationProcessor) {\n let points = [];\n for (let j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.splice(-4, 4);\n\n for (let i = 0; i < points.length; i++) {\n let point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n\n return haveInstructions;\n }\n\n _getPhantomPoints(glyph) {\n let cbox = this._getCBox(true);\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n\n let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\n\n return [\n new Point(false, true, glyph.xMin - leftBearing, 0),\n new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\n new Point(false, true, 0, glyph.yMax + topBearing),\n new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\n ];\n }\n\n // Decodes font data, resolves composite glyphs, and returns an array of contours\n _getContours() {\n let glyph = this._decode();\n if (!glyph) {\n return [];\n }\n\n let points = [];\n\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (let component of glyph.components) {\n let contours = this._font.getGlyph(component.glyphID)._getContours();\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n for (let j = 0; j < contour.length; j++) {\n let point = contour[j];\n let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\n let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\n points.push(new Point(point.onCurve, point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n }\n\n // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n\n let contours = [];\n let cur = [];\n for (let k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n\n return contours;\n }\n\n _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n\n let cbox = this._getCBox(true);\n super._getMetrics(cbox);\n\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n\n return this._metrics;\n }\n\n // Converts contours to a Path object that can be rendered\n _getPath() {\n let contours = this._getContours();\n let path = new Path;\n\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n let firstPt = contour[0];\n let lastPt = contour[contour.length - 1];\n let start = 0;\n\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n\n var curvePt = firstPt;\n }\n\n path.moveTo(firstPt.x, firstPt.y);\n\n for (let j = start; j < contour.length; j++) {\n let pt = contour[j];\n let prevPt = j === 0 ? firstPt : contour[j - 1];\n\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && !pt.onCurve) {\n let midX = (prevPt.x + pt.x) / 2;\n let midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n }\n\n // Connect the first and last points\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n\n path.closePath();\n }\n\n return path;\n }\n}\n","import { cache } from '../decorators';\nimport Path from './Path';\nimport {isMark} from 'unicode-properties';\nimport StandardNames from './StandardNames';\n\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\nexport default class Glyph {\n constructor(id, codePoints, font) {\n /**\n * The glyph id in the font\n * @type {number}\n */\n this.id = id;\n\n /**\n * An array of unicode code points that are represented by this glyph.\n * There can be multiple code points in the case of ligatures and other glyphs\n * that represent multiple visual characters.\n * @type {number[]}\n */\n this.codePoints = codePoints;\n this._font = font;\n\n // TODO: get this info from GDEF if available\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n\n _getPath() {\n return new Path();\n }\n\n _getCBox() {\n return this.path.cbox;\n }\n\n _getBBox() {\n return this.path.bbox;\n }\n\n _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n\n let metric = table.metrics.get(table.metrics.length - 1);\n let res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n\n return res;\n }\n\n _getMetrics(cbox) {\n if (this._metrics) { return this._metrics; }\n\n let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\n\n // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n if (this._font.vmtx) {\n var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\n\n } else {\n let os2;\n if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\n\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n\n } else {\n let { hhea } = this._font;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n\n return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\n }\n\n /**\n * The glyph’s control box.\n * This is often the same as the bounding box, but is faster to compute.\n * Because of the way bezier curves are defined, some of the control points\n * can be outside of the bounding box. Where `bbox` takes this into account,\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n * for a more detailed description.\n *\n * @type {BBox}\n */\n @cache\n get cbox() {\n return this._getCBox();\n }\n\n /**\n * The glyph’s bounding box, i.e. the rectangle that encloses the\n * glyph outline as tightly as possible.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return this._getBBox();\n }\n\n /**\n * A vector Path object representing the glyph outline.\n * @type {Path}\n */\n @cache\n get path() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n\n /**\n * Returns a path scaled to the given font size.\n * @param {number} size\n * @return {Path}\n */\n getScaledPath(size) {\n let scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n\n /**\n * The glyph's advance width.\n * @type {number}\n */\n @cache\n get advanceWidth() {\n return this._getMetrics().advanceWidth;\n }\n\n /**\n * The glyph's advance height.\n * @type {number}\n */\n @cache\n get advanceHeight() {\n return this._getMetrics().advanceHeight;\n }\n\n get ligatureCaretPositions() {}\n\n _getName() {\n let { post } = this._font;\n if (!post) {\n return null;\n }\n\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n\n case 2:\n let id = post.glyphNameIndex[this.id];\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n\n return post.names[id - StandardNames.length];\n\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n\n /**\n * The glyph's name\n * @type {string}\n */\n @cache\n get name() {\n return this._getName();\n }\n\n /**\n * Renders the glyph to the given graphics context, at the specified font size.\n * @param {CanvasRenderingContext2d} ctx\n * @param {number} size\n */\n render(ctx, size) {\n ctx.save();\n\n let scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n\n let fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n\n ctx.restore();\n }\n}\n","import BBox from './BBox';\n\nconst SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nexport default class Path {\n constructor() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n\n /**\n * Compiles the path to a JavaScript function that can be applied with\n * a graphics context in order to render the path.\n * @return {string}\n */\n toFunction() {\n return ctx => {\n this.commands.forEach(c => {\n return ctx[c.command].apply(ctx, c.args)\n })\n };\n }\n\n /**\n * Converts the path to an SVG path data string\n * @return {string}\n */\n toSVG() {\n let cmds = this.commands.map(c => {\n let args = c.args.map(arg => Math.round(arg * 100) / 100);\n return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\n });\n\n return cmds.join('');\n }\n\n /**\n * Gets the \"control box\" of a path.\n * This is like the bounding box, but it includes all points including\n * control points of bezier segments and is much faster to compute than\n * the real bounding box.\n * @type {BBox}\n */\n get cbox() {\n if (!this._cbox) {\n let cbox = new BBox;\n for (let command of this.commands) {\n for (let i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n\n this._cbox = Object.freeze(cbox);\n }\n\n return this._cbox;\n }\n\n /**\n * Gets the exact bounding box of the path by evaluating curve segments.\n * Slower to compute than the control box, but more accurate.\n * @type {BBox}\n */\n get bbox() {\n if (this._bbox) {\n return this._bbox;\n }\n\n let bbox = new BBox;\n let cx = 0, cy = 0;\n\n let f = t => (\n Math.pow(1 - t, 3) * p0[i]\n + 3 * Math.pow(1 - t, 2) * t * p1[i]\n + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\n + Math.pow(t, 3) * p3[i]\n );\n\n for (let c of this.commands) {\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n let [x, y] = c.args;\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var [qp1x, qp1y, p3x, p3y] = c.args;\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\n }\n\n // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n bbox.addPoint(p3x, p3y);\n\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n\n for (var i = 0; i <= 1; i++) {\n let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n let t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n\n continue;\n }\n\n let b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n\n let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n\n let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n\n return this._bbox = Object.freeze(bbox);\n }\n\n /**\n * Applies a mapping function to each point in the path.\n * @param {function} fn\n * @return {Path}\n */\n mapPoints(fn) {\n let path = new Path;\n\n for (let c of this.commands) {\n let args = [];\n for (let i = 0; i < c.args.length; i += 2) {\n let [x, y] = fn(c.args[i], c.args[i + 1]);\n args.push(x, y);\n }\n\n path[c.command](...args);\n }\n\n return path;\n }\n\n /**\n * Transforms the path by the given matrix.\n */\n transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints((x, y) => {\n const tx = m0 * x + m2 * y + m4;\n const ty = m1 * x + m3 * y + m5;\n return [tx, ty];\n });\n }\n\n /**\n * Translates the path by the given offset.\n */\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n\n /**\n * Rotates the path by the given angle (in radians).\n */\n rotate(angle) {\n let cos = Math.cos(angle);\n let sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n\n /**\n * Scales the path.\n */\n scale(scaleX, scaleY = scaleX) {\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\n Path.prototype[command] = function(...args) {\n this._bbox = this._cbox = null;\n this.commands.push({\n command,\n args\n });\n\n return this;\n };\n}\n","export default [\n '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\n];\n","import Glyph from './Glyph';\nimport Path from './Path';\n\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nexport default class CFFGlyph extends Glyph {\n type = 'CFF';\n\n _getName() {\n if (this._font.CFF2) {\n return super._getName();\n }\n\n return this._font['CFF '].getGlyphName(this.id);\n }\n\n bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n }\n\n _getPath() {\n let cff = this._font.CFF2 || this._font['CFF '];\n let { stream } = cff;\n let str = cff.topDict.CharStrings[this.id];\n let end = str.offset + str.length;\n stream.pos = str.offset;\n\n let path = new Path;\n let stack = [];\n let trans = [];\n\n let width = null;\n let nStems = 0;\n let x = 0, y = 0;\n let usedGsubrs;\n let usedSubrs;\n let open = false;\n\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n\n let gsubrs = cff.globalSubrIndex || [];\n let gsubrsBias = this.bias(gsubrs);\n\n let privateDict = cff.privateDictForGlyph(this.id) || {};\n let subrs = privateDict.Subrs || [];\n let subrsBias = this.bias(subrs);\n\n let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n let vsindex = privateDict.vsindex;\n let variationProcessor = this._font._variationProcessor;\n\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n\n path.moveTo(x, y);\n open = true;\n }\n\n let parse = function () {\n while (stream.pos < end) {\n let op = stream.readUInt8();\n if (op < 32) {\n let index, subr, phase;\n let c1x, c1y, c2x, c2y, c3x, c3y;\n let c4x, c4y, c5x, c5y, c6x, c6y;\n let pts;\n\n switch (op) {\n case 1: // hstem\n case 3: // vstem\n case 18: // hstemhm\n case 23: // vstemhm\n parseStems();\n break;\n\n case 4: // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 5: // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n break;\n\n case 6: // hlineto\n case 7: // vlineto\n phase = op === 6;\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n path.lineTo(x, y);\n phase = !phase;\n }\n break;\n\n case 8: // rrcurveto\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 10: // callsubr\n index = stack.pop() + subrsBias;\n subr = subrs[index];\n if (subr) {\n usedSubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 11: // return\n if (cff.version >= 2) {\n break;\n }\n return;\n\n case 14: // endchar\n if (cff.version >= 2) {\n break;\n }\n\n if (stack.length > 0) {\n checkWidth();\n }\n\n if (open) {\n path.closePath();\n open = false;\n }\n break;\n\n case 15: { // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n\n vsindex = stack.pop();\n break;\n }\n\n case 16: { // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n\n let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n let numBlends = stack.pop();\n let numOperands = numBlends * blendVector.length;\n let delta = stack.length - numOperands;\n let base = delta - numBlends;\n\n for (let i = 0; i < numBlends; i++) {\n let sum = stack[base + i];\n for (let j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n\n stack[base + i] = sum;\n }\n\n while (numOperands--) {\n stack.pop();\n }\n\n break;\n }\n\n case 19: // hintmask\n case 20: // cntrmask\n parseStems();\n stream.pos += (nStems + 7) >> 3;\n break;\n\n case 21: // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 22: // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n x += stack.shift();\n moveTo(x, y);\n break;\n\n case 24: // rcurveline\n while (stack.length >= 8) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n\n case 25: // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n\n case 26: // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 27: // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 28: // shortint\n stack.push(stream.readInt16BE());\n break;\n\n case 29: // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n if (subr) {\n usedGsubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 30: // vhcurveto\n case 31: // hvcurveto\n phase = op === 31;\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n break;\n\n case 12:\n op = stream.readUInt8();\n switch (op) {\n case 3: // and\n let a = stack.pop();\n let b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n\n case 4: // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n\n case 5: // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n\n case 9: // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case 10: // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n\n case 11: // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n\n case 12: // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n\n case 14: // neg\n a = stack.pop();\n stack.push(-a);\n break;\n\n case 15: // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n\n case 18: // drop\n stack.pop();\n break;\n\n case 20: // put\n let val = stack.pop();\n let idx = stack.pop();\n trans[idx] = val;\n break;\n\n case 21: // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n\n case 22: // ifelse\n let s1 = stack.pop();\n let s2 = stack.pop();\n let v1 = stack.pop();\n let v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n\n case 23: // random\n stack.push(Math.random());\n break;\n\n case 24: // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n\n case 26: // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case 27: // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n\n case 28: // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n\n case 29: // index\n idx = stack.pop();\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n\n stack.push(stack[idx]);\n break;\n\n case 30: // roll\n let n = stack.pop();\n let j = stack.pop();\n\n if (j >= 0) {\n while (j > 0) {\n var t = stack[n - 1];\n for (let i = n - 2; i >= 0; i--) {\n stack[i + 1] = stack[i];\n }\n\n stack[0] = t;\n j--;\n }\n } else {\n while (j < 0) {\n var t = stack[0];\n for (let i = 0; i <= n; i++) {\n stack[i] = stack[i + 1];\n }\n\n stack[n - 1] = t;\n j++;\n }\n }\n break;\n\n case 34: // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y;\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 35: // flex\n pts = [];\n\n for (let i = 0; i <= 5; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n stack.shift(); // fd\n break;\n\n case 36: // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 37: // flex1\n let startx = x;\n let starty = y;\n\n pts = [];\n for (let i = 0; i <= 4; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n\n pts.push(x, y);\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n break;\n\n default:\n throw new Error(`Unknown op: 12 ${op}`);\n }\n break;\n\n default:\n throw new Error(`Unknown op: ${op}`);\n }\n\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n\n parse();\n\n if (open) {\n path.closePath();\n }\n\n return path;\n }\n}\n","import TTFGlyph from './TTFGlyph';\nimport * as r from 'restructure';\n\nlet SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\n});\n\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nexport default class SBIXGlyph extends TTFGlyph {\n type = 'SBIX';\n\n /**\n * Returns an object representing a glyph image at the given point size.\n * The object has a data property with a Buffer containing the actual image data,\n * along with the image type, and origin.\n *\n * @param {number} size\n * @return {object}\n */\n getImageForSize(size) {\n for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n if (table.ppem >= size) { break; }\n }\n\n let offsets = table.imageOffsets;\n let start = offsets[this.id];\n let end = offsets[this.id + 1];\n\n if (start === end) {\n return null;\n }\n\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {buflen: end - start});\n }\n\n render(ctx, size) {\n let img = this.getImageForSize(size);\n if (img != null) {\n let scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\n }\n\n if (this._font.sbix.flags.renderOutlines) {\n super.render(ctx, size);\n }\n }\n}\n","import Glyph from './Glyph';\nimport BBox from './BBox';\n\nclass COLRLayer {\n constructor(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n }\n}\n\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which is another vector glyph.\n */\nexport default class COLRGlyph extends Glyph {\n type = 'COLR';\n\n _getBBox() {\n let bbox = new BBox;\n for (let i = 0; i < this.layers.length; i++) {\n let layer = this.layers[i];\n let b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n\n return bbox;\n }\n\n /**\n * Returns an array of objects containing the glyph and color for\n * each layer in the composite color glyph.\n * @type {object[]}\n */\n get layers() {\n let cpal = this._font.CPAL;\n let colr = this._font.COLR;\n let low = 0;\n let high = colr.baseGlyphRecord.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n var rec = colr.baseGlyphRecord[mid];\n\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n }\n\n // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n\n return [new COLRLayer(g, color)];\n }\n\n // otherwise, return an array of all the layers\n let layers = [];\n for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n var g = this._font._getBaseGlyph(rec.gid);\n layers.push(new COLRLayer(g, color));\n }\n\n return layers;\n }\n\n render(ctx, size) {\n for (let {glyph, color} of this.layers) {\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n\n return;\n }\n}\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nconst TUPLE_COUNT_MASK = 0x0fff;\nconst EMBEDDED_TUPLE_COORD = 0x8000;\nconst INTERMEDIATE_TUPLE = 0x4000;\nconst PRIVATE_POINT_NUMBERS = 0x2000;\nconst TUPLE_INDEX_MASK = 0x0fff;\nconst POINTS_ARE_WORDS = 0x80;\nconst POINT_RUN_COUNT_MASK = 0x7f;\nconst DELTAS_ARE_ZERO = 0x80;\nconst DELTAS_ARE_WORDS = 0x40;\nconst DELTA_RUN_COUNT_MASK = 0x3f;\n\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nexport default class GlyphVariationProcessor {\n constructor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map;\n }\n\n normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n let normalized = [];\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n let axis = this.font.fvar.axis[i];\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n\n // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n let segment = this.font.avar.segment[i];\n for (let j = 0; j < segment.correspondence.length; j++) {\n let pair = segment.correspondence[j];\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n let prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\n (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\n prev.toCoord;\n\n break;\n }\n }\n }\n }\n\n return normalized;\n }\n\n transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) { return; }\n\n let { gvar } = this.font;\n if (gid >= gvar.glyphCount) { return; }\n\n let offset = gvar.offsets[gid];\n if (offset === gvar.offsets[gid + 1]) { return; }\n\n // Read the gvar data for this glyph\n let { stream } = this.font;\n stream.pos = offset;\n if (stream.pos >= stream.length) {\n return;\n }\n\n let tupleCount = stream.readUInt16BE();\n let offsetToData = offset + stream.readUInt16BE();\n\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n\n let origPoints = glyphPoints.map(pt => pt.copy());\n\n tupleCount &= TUPLE_COUNT_MASK;\n for (let i = 0; i < tupleCount; i++) {\n let tupleDataSize = stream.readUInt16BE();\n let tupleIndex = stream.readUInt16BE();\n\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n\n var endCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n }\n\n // Get the factor at which to apply this tuple\n let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n\n var here = stream.pos;\n stream.pos = offsetToData;\n\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n }\n\n // points.length = 0 means there are deltas for all points\n let nPoints = points.length === 0 ? glyphPoints.length : points.length;\n let xDeltas = this.decodeDeltas(nPoints);\n let yDeltas = this.decodeDeltas(nPoints);\n\n if (points.length === 0) { // all points\n for (let i = 0; i < glyphPoints.length; i++) {\n var point = glyphPoints[i];\n point.x += Math.round(xDeltas[i] * factor);\n point.y += Math.round(yDeltas[i] * factor);\n }\n } else {\n let outPoints = origPoints.map(pt => pt.copy());\n let hasDelta = glyphPoints.map(() => false);\n\n for (let i = 0; i < points.length; i++) {\n let idx = points[i];\n if (idx < glyphPoints.length) {\n let point = outPoints[idx];\n hasDelta[idx] = true;\n\n point.x += xDeltas[i] * factor;\n point.y += yDeltas[i] * factor;\n }\n }\n\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n for (let i = 0; i < glyphPoints.length; i++) {\n let deltaX = outPoints[i].x - origPoints[i].x;\n let deltaY = outPoints[i].y - origPoints[i].y;\n\n glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX);\n glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY);\n }\n }\n\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n }\n\n decodePoints() {\n let stream = this.font.stream;\n let count = stream.readUInt8();\n\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n\n let points = new Uint16Array(count);\n let i = 0;\n let point = 0;\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n for (let j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n\n return points;\n }\n\n decodeDeltas(count) {\n let stream = this.font.stream;\n let i = 0;\n let deltas = new Int16Array(count);\n\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n\n } else {\n let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n for (let j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n\n return deltas;\n }\n\n tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n let normalized = this.normalizedCoords;\n let { gvar } = this.font;\n let factor = 1;\n\n for (let i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n\n if (normalized[i] === 0) {\n return 0;\n }\n\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\n (normalized[i] > Math.max(0, tupleCoords[i]))) {\n return 0;\n }\n\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if ((normalized[i] < startCoords[i]) ||\n (normalized[i] > endCoords[i])) {\n return 0;\n\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n\n return factor;\n }\n\n // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n\n let point = 0;\n while (point < points.length) {\n let firstPoint = point;\n\n // find the end point of the contour\n let endPoint = point;\n let pt = points[endPoint];\n while (!pt.endContour) {\n pt = points[++endPoint];\n }\n\n // find the first point that has a delta\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n\n if (point > endPoint) {\n continue;\n }\n\n let firstDelta = point;\n let curDelta = point;\n point++;\n\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n\n point++;\n }\n\n // shift contour if we only have a single delta\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n\n point = endPoint + 1;\n }\n }\n\n deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n\n let iterable = ['x', 'y'];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n\n let in1 = inPoints[ref1][k];\n let in2 = inPoints[ref2][k];\n let out1 = outPoints[ref1][k];\n let out2 = outPoints[ref2][k];\n\n // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n for (let p = p1; p <= p2; p++) {\n let out = inPoints[p][k];\n\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n\n outPoints[p][k] = out;\n }\n }\n }\n }\n\n deltaShift(p1, p2, ref, inPoints, outPoints) {\n let deltaX = outPoints[ref].x - inPoints[ref].x;\n let deltaY = outPoints[ref].y - inPoints[ref].y;\n\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n }\n\n getAdvanceAdjustment(gid, table) {\n let outerIndex, innerIndex;\n\n if (table.advanceWidthMapping) {\n let idx = gid;\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n\n let entryFormat = table.advanceWidthMapping.entryFormat;\n ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n }\n\n // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n\n let varData = itemStore.itemVariationData[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex);\n let netAdjustment = 0;\n\n for (let master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n\n return netAdjustment;\n }\n\n getBlendVector(itemStore, outerIndex) {\n let varData = itemStore.itemVariationData[outerIndex];\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n\n let normalizedCoords = this.normalizedCoords;\n let blendVector = [];\n\n // outer loop steps through master designs to be blended\n for (let master = 0; master < varData.regionIndexCount; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegionList.variationRegions[regionIndex];\n\n // inner loop steps through axes in this region\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n\n // compute the scalar contribution of this axis\n // ignore invalid ranges\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n\n // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n\n // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\n\n // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\n (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\n (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n\n // take product of all the axis scalars\n scalar *= axisScalar;\n }\n\n blendVector[master] = scalar;\n }\n\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n }\n}\n","import cloneDeep from 'clone';\nimport Subset from './Subset';\nimport Directory from '../tables/directory';\nimport Tables from '../tables';\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\n\nexport default class TTFSubset extends Subset {\n constructor(font) {\n super(font);\n this.glyphEncoder = new TTFGlyphEncoder;\n }\n\n _addGlyph(gid) {\n let glyph = this.font.getGlyph(gid);\n let glyf = glyph._decode();\n\n // get the offset to the glyph from the loca table\n let curOffset = this.font.loca.offsets[gid];\n let nextOffset = this.font.loca.offsets[gid + 1];\n\n let stream = this.font._getTableStream('glyf');\n stream.pos += curOffset;\n\n let buffer = stream.readBuffer(nextOffset - curOffset);\n\n // if it is a compound glyph, include its components\n if (glyf && glyf.numberOfContours < 0) {\n buffer = new Uint8Array(buffer);\n let view = new DataView(buffer.buffer);\n for (let component of glyf.components) {\n gid = this.includeGlyph(component.glyphID);\n view.setUint16(component.pos, gid);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n\n this.offset += buffer.length;\n return this.glyf.length - 1;\n }\n\n encode() {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n\n this.hmtx = {\n metrics: [],\n bearings: []\n };\n\n // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n let i = 0;\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n\n let maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n\n this.loca.offsets.push(this.offset);\n\n let head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n\n let hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length;\n\n // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n\n // TODO: subset prep, cvt, fpgm?\n return Directory.toBuffer({\n tables: {\n head,\n hhea,\n loca: this.loca,\n maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm\n\n // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n }\n });\n }\n}\n","import * as r from 'restructure';\n\nconst resolved = Promise.resolve();\n\nexport default class Subset {\n constructor(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {};\n\n // always include the missing glyph\n this.includeGlyph(0);\n }\n\n includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n\n return this.mapping[glyph];\n }\n}\n","import * as r from 'restructure';\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\nclass Point {\n static size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n }\n \n static encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n }\n}\n\nlet Glyf = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point, 0),\n yPoints: new r.Array(Point, 0)\n});\n\n/**\n * Encodes TrueType glyph outlines\n */\nexport default class TTFGlyphEncoder {\n encodeSimple(path, instructions = []) {\n let endPtsOfContours = [];\n let xPoints = [];\n let yPoints = [];\n let flags = [];\n let same = 0;\n let lastX = 0, lastY = 0, lastFlag = 0;\n let pointCount = 0;\n \n for (let i = 0; i < path.commands.length; i++) {\n let c = path.commands[i];\n \n for (let j = 0; j < c.args.length; j += 2) {\n let x = c.args[j];\n let y = c.args[j + 1];\n let flag = 0;\n \n // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n if (c.command === 'quadraticCurveTo' && j === 2) {\n let next = path.commands[i + 1];\n if (next && next.command === 'quadraticCurveTo') {\n let midX = (lastX + next.args[0]) / 2;\n let midY = (lastY + next.args[1]) / 2;\n \n if (x === midX && y === midY) {\n continue;\n }\n }\n }\n \n // All points except control points are on curve.\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE;\n }\n \n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\n \n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n \n flags.push(flag);\n lastFlag = flag;\n }\n \n lastX = x;\n lastY = y;\n pointCount++;\n }\n \n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n }\n\n // Close the path if the last command didn't already\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n \n let bbox = path.bbox;\n let glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n \n let size = Glyf.size(glyf);\n let tail = 4 - (size % 4);\n \n let stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf);\n \n // Align to 4-byte length\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n \n return stream.buffer;\n }\n \n _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n let diff = value - last;\n \n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n \n points.push(diff);\n }\n \n return flag;\n }\n}\n","import Subset from './Subset';\nimport CFFTop from '../cff/CFFTop';\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\nimport standardStrings from '../cff/CFFStandardStrings';\n\nexport default class CFFSubset extends Subset {\n constructor(font) {\n super(font);\n\n this.cff = this.font['CFF '];\n if (!this.cff) {\n throw new Error('Not a CFF Font');\n }\n }\n\n subsetCharstrings() {\n this.charstrings = [];\n let gsubrs = {};\n\n for (let gid of this.glyphs) {\n this.charstrings.push(this.cff.getCharString(gid));\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n }\n\n subsetSubrs(subrs, used) {\n let res = [];\n for (let i = 0; i < subrs.length; i++) {\n let subr = subrs[i];\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(new Uint8Array([11])); // return\n }\n }\n\n return res;\n }\n\n subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n\n let used_fds = {};\n let used_subrs = [];\n let fd_select = {};\n for (let gid of this.glyphs) {\n let fd = this.cff.fdForGlyph(gid);\n if (fd == null) {\n continue;\n }\n\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n for (let subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n\n for (let i = 0; i < topDict.FDArray.length; i++) {\n let dict = topDict.FDArray[i];\n delete dict.FontName;\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n\n return;\n }\n\n createCIDFontdict(topDict) {\n let used_subrs = {};\n for (let gid of this.glyphs) {\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n\n let privateDict = Object.assign({}, this.cff.topDict.Private);\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n\n topDict.FDArray = [{ Private: privateDict }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{ first: 0, fd: 0 }],\n sentinel: this.charstrings.length\n };\n }\n\n addString(string) {\n if (!string) {\n return null;\n }\n\n if (!this.strings) {\n this.strings = [];\n }\n\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n }\n\n encode() {\n this.subsetCharstrings();\n\n let charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\n };\n\n let topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n\n for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n\n let top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n\n return CFFTop.toBuffer(top);\n }\n}\n","import TTFFont from './TTFFont';\nimport WOFFDirectory from './tables/WOFFDirectory';\nimport tables from './tables';\nimport inflate from 'tiny-inflate';\nimport * as r from 'restructure';\nimport { asciiDecoder } from './utils';\n\nexport default class WOFFFont extends TTFFont {\n type = 'WOFF';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF';\n }\n\n _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n let outBuffer = new Uint8Array(table.length);\n let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n\n return null;\n }\n}\n","import * as r from 'restructure';\nimport tables from './';\n\nlet WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {type: 'global'}),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\n\nlet WOFFDirectory = new r.Struct({\n tag: new r.String(4), // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nexport default WOFFDirectory;\n","import * as r from 'restructure';\nimport brotli from 'brotli/decompress.js';\nimport TTFFont from './TTFFont';\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\nimport WOFF2Directory from './tables/WOFF2Directory';\nimport { asciiDecoder } from './utils';\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nexport default class WOFF2Font extends TTFFont {\n type = 'WOFF2';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOF2';\n }\n\n _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n }\n\n _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n\n let decompressedSize = 0;\n for (let tag in this.directory.tables) {\n let entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\n }\n\n let decompressed = brotli(buffer, decompressedSize);\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n\n this.stream = new r.DecodeStream(decompressed);\n this._decompressed = true;\n }\n }\n\n _decodeTable(table) {\n this._decompress();\n return super._decodeTable(table);\n }\n\n // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) { this._transformGlyfTable(); }\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n\n } else {\n return super._getBaseGlyph(glyph, characters);\n }\n }\n }\n\n _transformGlyfTable() {\n this._decompress();\n this.stream.pos = this.directory.tables.glyf.offset;\n let table = GlyfTable.decode(this.stream);\n let glyphs = [];\n\n for (let index = 0; index < table.numGlyphs; index++) {\n let glyph = {};\n let nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n\n if (nContours > 0) { // simple glyph\n let nPoints = [];\n let totalPoints = 0;\n\n for (let i = 0; i < nContours; i++) {\n let r = read255UInt16(table.nPoints);\n totalPoints += r;\n nPoints.push(totalPoints);\n }\n\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n for (let i = 0; i < nContours; i++) {\n glyph.points[nPoints[i] - 1].endContour = true;\n }\n\n var instructionSize = read255UInt16(table.glyphs);\n\n } else if (nContours < 0) { // composite glyph\n let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n\n glyphs.push(glyph);\n }\n\n this._transformedGlyphs = glyphs;\n }\n}\n\n// Special class that accepts a length and returns a sub-stream for that data\nclass Substream {\n constructor(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n\n decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n }\n}\n\n// This struct represents the entire glyf table\nlet GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\n\nconst WORD_CODE = 253;\nconst ONE_MORE_BYTE_CODE2 = 254;\nconst ONE_MORE_BYTE_CODE1 = 255;\nconst LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n let code = stream.readUInt8();\n\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n\n return code;\n}\n\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n let y;\n let x = y = 0;\n let res = [];\n\n for (let i = 0; i < nPoints; i++) {\n let dx = 0, dy = 0;\n let flag = flags.readUInt8();\n let onCurve = !(flag >> 7);\n flag &= 0x7f;\n\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n\n } else if (flag < 20) {\n dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\n\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n let b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n\n return res;\n}\n","import TTFGlyph from './TTFGlyph';\n\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nexport default class WOFF2Glyph extends TTFGlyph {\n type = 'WOFF2';\n\n _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n }\n\n _getCBox() {\n return this.path.bbox;\n }\n}\n","import * as r from 'restructure';\n\nconst Base128 = {\n decode(stream) {\n let result = 0;\n let iterable = [0, 1, 2, 3, 4];\n for (let j = 0; j < iterable.length; j++) {\n let i = iterable[j];\n let code = stream.readUInt8();\n\n // If any of the top seven bits are set then we're about to overflow.\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n\n result = (result << 7) | (code & 0x7f);\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n\n throw new Error('Bad base 128 number');\n }\n};\n\nlet knownTags = [\n 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\n 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\n 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\n 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\n 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\n 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\n 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\n];\n\nlet WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\n tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: t => (t.flags >>> 6) & 0x03,\n transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\n transformLength: new r.Optional(Base128, t => t.transformed)\n});\n\nlet WOFF2Directory = new r.Struct({\n tag: new r.String(4), // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function() {\n let tables = {};\n for (let i = 0; i < this.tables.length; i++) {\n let table = this.tables[i];\n tables[table.tag] = table;\n }\n\n return this.tables = tables;\n};\n\nexport default WOFF2Directory;\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport { asciiDecoder } from './utils';\n\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\n\nexport default class TrueTypeCollection {\n type = 'TTC';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'ttcf';\n }\n\n constructor(stream) {\n this.stream = stream;\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n\n this.header = TTCHeader.decode(stream);\n }\n\n getFont(name) {\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\n\nlet DFontName = new r.String(r.uint8);\nlet DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\n\nlet Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\n\nlet Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\n});\n\nlet TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, t => t.length + 1)\n});\n\nlet DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\n\nlet DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\n\nexport default class DFont {\n type = 'DFont';\n\n static probe(buffer) {\n let stream = new r.DecodeStream(buffer);\n\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n\n for (let type of header.map.typeList.types) {\n if (type.name === 'sfnt') {\n return true;\n }\n }\n\n return false;\n }\n\n constructor(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n\n for (let type of this.header.map.typeList.types) {\n for (let ref of type.refList) {\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n\n getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n"],"names":[],"version":3,"file":"browser-module.mjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/dist/browser.cjs b/skills/flight-finder/node_modules/fontkit/dist/browser.cjs deleted file mode 100644 index a5fa901..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/browser.cjs +++ /dev/null @@ -1,13333 +0,0 @@ -var $gfJaN$restructure = require("restructure"); -var $gfJaN$swchelperscjs_define_propertycjs = require("@swc/helpers/cjs/_define_property.cjs"); -var $gfJaN$swchelperscjs_ts_decoratecjs = require("@swc/helpers/cjs/_ts_decorate.cjs"); -var $gfJaN$fastdeepequal = require("fast-deep-equal"); -var $gfJaN$unicodeproperties = require("unicode-properties"); -var $gfJaN$unicodetrie = require("unicode-trie"); -var $gfJaN$dfa = require("dfa"); -var $gfJaN$clone = require("clone"); -var $gfJaN$tinyinflate = require("tiny-inflate"); -var $gfJaN$brotlidecompressjs = require("brotli/decompress.js"); - - -function $parcel$exportWildcard(dest, source) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { - return; - } - - Object.defineProperty(dest, key, { - enumerable: true, - get: function get() { - return source[key]; - } - }); - }); - - return dest; -} - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -var $59aa4ed98453e1d4$exports = {}; - -$parcel$export($59aa4ed98453e1d4$exports, "logErrors", () => $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78); -$parcel$export($59aa4ed98453e1d4$exports, "registerFormat", () => $59aa4ed98453e1d4$export$36b2f24e97d43be); -$parcel$export($59aa4ed98453e1d4$exports, "create", () => $59aa4ed98453e1d4$export$185802fd694ee1f5); -$parcel$export($59aa4ed98453e1d4$exports, "defaultLanguage", () => $59aa4ed98453e1d4$export$42940898df819940); -$parcel$export($59aa4ed98453e1d4$exports, "setDefaultLanguage", () => $59aa4ed98453e1d4$export$5157e7780d44cc36); - -let $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78 = false; -let $59aa4ed98453e1d4$var$formats = []; -function $59aa4ed98453e1d4$export$36b2f24e97d43be(format) { - $59aa4ed98453e1d4$var$formats.push(format); -} -function $59aa4ed98453e1d4$export$185802fd694ee1f5(buffer, postscriptName) { - for(let i = 0; i < $59aa4ed98453e1d4$var$formats.length; i++){ - let format = $59aa4ed98453e1d4$var$formats[i]; - if (format.probe(buffer)) { - let font = new format(new (0, $gfJaN$restructure.DecodeStream)(buffer)); - if (postscriptName) return font.getFont(postscriptName); - return font; - } - } - throw new Error('Unknown font format'); -} -let $59aa4ed98453e1d4$export$42940898df819940 = 'en'; -function $59aa4ed98453e1d4$export$5157e7780d44cc36(lang = 'en') { - $59aa4ed98453e1d4$export$42940898df819940 = lang; -} - - - - - -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ function $3bda6911913b43f0$export$69a3209f1a06c04d(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { - value: value - }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - return { - get () { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) return cache.get(key); - let result = fn.apply(this, args); - cache.set(key, result); - return result; - } - Object.defineProperty(this, key, { - value: memoized - }); - return memoized; - } - }; - } -} - - - - - -let $e4ae0436c91af89f$var$SubHeader = new $gfJaN$restructure.Struct({ - firstCode: $gfJaN$restructure.uint16, - entryCount: $gfJaN$restructure.uint16, - idDelta: $gfJaN$restructure.int16, - idRangeOffset: $gfJaN$restructure.uint16 -}); -let $e4ae0436c91af89f$var$CmapGroup = new $gfJaN$restructure.Struct({ - startCharCode: $gfJaN$restructure.uint32, - endCharCode: $gfJaN$restructure.uint32, - glyphID: $gfJaN$restructure.uint32 -}); -let $e4ae0436c91af89f$var$UnicodeValueRange = new $gfJaN$restructure.Struct({ - startUnicodeValue: $gfJaN$restructure.uint24, - additionalCount: $gfJaN$restructure.uint8 -}); -let $e4ae0436c91af89f$var$UVSMapping = new $gfJaN$restructure.Struct({ - unicodeValue: $gfJaN$restructure.uint24, - glyphID: $gfJaN$restructure.uint16 -}); -let $e4ae0436c91af89f$var$DefaultUVS = new $gfJaN$restructure.Array($e4ae0436c91af89f$var$UnicodeValueRange, $gfJaN$restructure.uint32); -let $e4ae0436c91af89f$var$NonDefaultUVS = new $gfJaN$restructure.Array($e4ae0436c91af89f$var$UVSMapping, $gfJaN$restructure.uint32); -let $e4ae0436c91af89f$var$VarSelectorRecord = new $gfJaN$restructure.Struct({ - varSelector: $gfJaN$restructure.uint24, - defaultUVS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$DefaultUVS, { - type: 'parent' - }), - nonDefaultUVS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$NonDefaultUVS, { - type: 'parent' - }) -}); -let $e4ae0436c91af89f$var$CmapSubtable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - codeMap: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint8, 256) - }, - 2: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - subHeaderKeys: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 256), - subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$SubHeader, 'subHeaderCount'), - glyphIndexArray: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'subHeaderCount') - }, - 4: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - segCountX2: $gfJaN$restructure.uint16, - segCount: (t)=>t.segCountX2 >> 1, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - endCode: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - reservedPad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - startCode: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - idDelta: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, 'segCount'), - idRangeOffset: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - glyphIndexArray: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, (t)=>(t.length - t._currentOffset) / 2) - }, - 6: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - firstCode: $gfJaN$restructure.uint16, - entryCount: $gfJaN$restructure.uint16, - glyphIndices: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'entryCount') - }, - 8: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint16, - is32: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint8, 8192), - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 10: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - firstCode: $gfJaN$restructure.uint32, - entryCount: $gfJaN$restructure.uint32, - glyphIndices: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'numChars') - }, - 12: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 13: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 14: { - length: $gfJaN$restructure.uint32, - numRecords: $gfJaN$restructure.uint32, - varSelectors: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$VarSelectorRecord, 'numRecords') - } -}); -let $e4ae0436c91af89f$var$CmapEntry = new $gfJaN$restructure.Struct({ - platformID: $gfJaN$restructure.uint16, - encodingID: $gfJaN$restructure.uint16, - table: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$CmapSubtable, { - type: 'parent', - lazy: true - }) -}); -var // character to glyph mapping -$e4ae0436c91af89f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numSubtables: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($e4ae0436c91af89f$var$CmapEntry, 'numSubtables') -}); - - - -var // font header -$55a60976afb7c261$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - revision: $gfJaN$restructure.int32, - checkSumAdjustment: $gfJaN$restructure.uint32, - magicNumber: $gfJaN$restructure.uint32, - flags: $gfJaN$restructure.uint16, - unitsPerEm: $gfJaN$restructure.uint16, - created: new $gfJaN$restructure.Array($gfJaN$restructure.int32, 2), - modified: new $gfJaN$restructure.Array($gfJaN$restructure.int32, 2), - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16, - macStyle: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'bold', - 'italic', - 'underline', - 'outline', - 'shadow', - 'condensed', - 'extended' - ]), - lowestRecPPEM: $gfJaN$restructure.uint16, - fontDirectionHint: $gfJaN$restructure.int16, - indexToLocFormat: $gfJaN$restructure.int16, - glyphDataFormat: $gfJaN$restructure.int16 // 0 for current format -}); - - - -var // horizontal header -$dde72b7b5b650596$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - ascent: $gfJaN$restructure.int16, - descent: $gfJaN$restructure.int16, - lineGap: $gfJaN$restructure.int16, - advanceWidthMax: $gfJaN$restructure.uint16, - minLeftSideBearing: $gfJaN$restructure.int16, - minRightSideBearing: $gfJaN$restructure.int16, - xMaxExtent: $gfJaN$restructure.int16, - caretSlopeRise: $gfJaN$restructure.int16, - caretSlopeRun: $gfJaN$restructure.int16, - caretOffset: $gfJaN$restructure.int16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.int16, 4), - metricDataFormat: $gfJaN$restructure.int16, - numberOfMetrics: $gfJaN$restructure.uint16 // Number of advance widths in 'hmtx' table -}); - - - -let $a7c40184072c9a5b$var$HmtxEntry = new $gfJaN$restructure.Struct({ - advance: $gfJaN$restructure.uint16, - bearing: $gfJaN$restructure.int16 -}); -var $a7c40184072c9a5b$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - metrics: new $gfJaN$restructure.LazyArray($a7c40184072c9a5b$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics), - bearings: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); - - - -var // maxiumum profile -$521197722369f691$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - numGlyphs: $gfJaN$restructure.uint16, - maxPoints: $gfJaN$restructure.uint16, - maxContours: $gfJaN$restructure.uint16, - maxComponentPoints: $gfJaN$restructure.uint16, - maxComponentContours: $gfJaN$restructure.uint16, - maxZones: $gfJaN$restructure.uint16, - maxTwilightPoints: $gfJaN$restructure.uint16, - maxStorage: $gfJaN$restructure.uint16, - maxFunctionDefs: $gfJaN$restructure.uint16, - maxInstructionDefs: $gfJaN$restructure.uint16, - maxStackElements: $gfJaN$restructure.uint16, - maxSizeOfInstructions: $gfJaN$restructure.uint16, - maxComponentElements: $gfJaN$restructure.uint16, - maxComponentDepth: $gfJaN$restructure.uint16 // Maximum levels of recursion; 1 for simple components -}); - - - -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ function $e2613b812f052cbe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { - if (platformID === 1 && $e2613b812f052cbe$export$479e671907f486d1[languageID]) return $e2613b812f052cbe$export$479e671907f486d1[languageID]; - return $e2613b812f052cbe$export$6fef87b7618bdf0b[platformID][encodingID]; -} -const $e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS = new Set([ - 'x-mac-roman', - 'x-mac-cyrillic', - 'iso-8859-6', - 'iso-8859-8' -]); -const $e2613b812f052cbe$var$MAC_ENCODINGS = { - 'x-mac-croatian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017D\xd8\u221E\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220F\u0161\u222B\xaa\xba\u03A9\u017E\xf8\xbf\xa1\xac\u221A\u0192\u2248\u0106\xab\u010C\u2026 \xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\uF8FF\xa9\u2044\u20AC\u2039\u203A\xc6\xbb\u2013\xb7\u201A\u201E\u2030\xc2\u0107\xc1\u010D\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u03C0\xcb\u02DA\xb8\xca\xe6\u02C7", - 'x-mac-gaelic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u1E02\xb1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xe6\xf8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xff\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xb7\u1EF2\u1EF3\u204A\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\u2663\xd2\xda\xdb\xd9\u0131\xdd\xfd\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83", - 'x-mac-greek': "\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\u20AC\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xdf\xae\xa9\u03A3\u03AA\xa7\u2260\xb0\xb7\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xac\u039F\u03A1\u2248\u03A4\xab\xbb\u2026 \u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xf7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xad", - 'x-mac-icelandic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\xd0\xf0\xde\xfe\xfd\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-inuit': "\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xb0\u14A1\u14A5\u14A6\u2022\xb6\u14A7\xae\xa9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026 \u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142", - 'x-mac-ce': "\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010C\xe4\u010D\u0106\u0107\xe9\u0179\u017A\u010E\xed\u010F\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011A\u011B\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xac\u221A\u0144\u0147\u2206\xab\xbb\u2026 \u0148\u0150\xd5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xc1\u0164\u0165\xcd\u017D\u017E\u016A\xd3\xd4\u016B\u016E\xda\u016F\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017B\u0141\u017C\u0122\u02C7", - 'x-mac-romanian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u0218\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\u0103\u0219\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-turkish': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\uF8A0\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7" -}; -const $e2613b812f052cbe$var$encodingCache = new Map(); -function $e2613b812f052cbe$export$1dceb3c14ed68bee(encoding) { - let cached = $e2613b812f052cbe$var$encodingCache.get(encoding); - if (cached) return cached; - // These encodings aren't supported by TextDecoder. - let mapping = $e2613b812f052cbe$var$MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for(let i = 0; i < mapping.length; i++)res.set(mapping.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } - // Only single byte encodings can be mapped 1:1. - if ($e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for(let i = 0; i < 0x80; i++)mapping[i] = 0x80 + i; - let res = new Map(); - let s = decoder.decode(mapping); - for(let i = 0; i < 0x80; i++)res.set(s.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } -} -const $e2613b812f052cbe$export$6fef87b7618bdf0b = [ - // unicode - [ - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be' - ], - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - [ - 'x-mac-roman', - 'shift-jis', - 'big5', - 'euc-kr', - 'iso-8859-6', - 'iso-8859-8', - 'x-mac-greek', - 'x-mac-cyrillic', - 'x-mac-symbol', - 'x-mac-devanagari', - 'x-mac-gurmukhi', - 'x-mac-gujarati', - 'Oriya', - 'Bengali', - 'Tamil', - 'Telugu', - 'Kannada', - 'Malayalam', - 'Sinhalese', - 'Burmese', - 'Khmer', - 'iso-8859-11', - 'Laotian', - 'Georgian', - 'Armenian', - 'gbk', - 'Tibetan', - 'Mongolian', - 'Geez', - 'x-mac-ce', - 'Vietnamese', - 'Sindhi' - ], - // ISO (deprecated) - [ - 'ascii', - null, - 'iso-8859-1' - ], - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - [ - 'symbol', - 'utf-16be', - 'shift-jis', - 'gb18030', - 'big5', - 'euc-kr', - 'johab', - null, - null, - null, - 'utf-16be' - ] -]; -const $e2613b812f052cbe$export$479e671907f486d1 = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; -const $e2613b812f052cbe$export$2092376fd002e13 = [ - // unicode - [], - { - 0: 'en', - 30: 'fo', - 60: 'ks', - 90: 'rw', - 1: 'fr', - 31: 'fa', - 61: 'ku', - 91: 'rn', - 2: 'de', - 32: 'ru', - 62: 'sd', - 92: 'ny', - 3: 'it', - 33: 'zh', - 63: 'bo', - 93: 'mg', - 4: 'nl', - 34: 'nl-BE', - 64: 'ne', - 94: 'eo', - 5: 'sv', - 35: 'ga', - 65: 'sa', - 128: 'cy', - 6: 'es', - 36: 'sq', - 66: 'mr', - 129: 'eu', - 7: 'da', - 37: 'ro', - 67: 'bn', - 130: 'ca', - 8: 'pt', - 38: 'cz', - 68: 'as', - 131: 'la', - 9: 'no', - 39: 'sk', - 69: 'gu', - 132: 'qu', - 10: 'he', - 40: 'si', - 70: 'pa', - 133: 'gn', - 11: 'ja', - 41: 'yi', - 71: 'or', - 134: 'ay', - 12: 'ar', - 42: 'sr', - 72: 'ml', - 135: 'tt', - 13: 'fi', - 43: 'mk', - 73: 'kn', - 136: 'ug', - 14: 'el', - 44: 'bg', - 74: 'ta', - 137: 'dz', - 15: 'is', - 45: 'uk', - 75: 'te', - 138: 'jv', - 16: 'mt', - 46: 'be', - 76: 'si', - 139: 'su', - 17: 'tr', - 47: 'uz', - 77: 'my', - 140: 'gl', - 18: 'hr', - 48: 'kk', - 78: 'km', - 141: 'af', - 19: 'zh-Hant', - 49: 'az-Cyrl', - 79: 'lo', - 142: 'br', - 20: 'ur', - 50: 'az-Arab', - 80: 'vi', - 143: 'iu', - 21: 'hi', - 51: 'hy', - 81: 'id', - 144: 'gd', - 22: 'th', - 52: 'ka', - 82: 'tl', - 145: 'gv', - 23: 'ko', - 53: 'mo', - 83: 'ms', - 146: 'ga', - 24: 'lt', - 54: 'ky', - 84: 'ms-Arab', - 147: 'to', - 25: 'pl', - 55: 'tg', - 85: 'am', - 148: 'el-polyton', - 26: 'hu', - 56: 'tk', - 86: 'ti', - 149: 'kl', - 27: 'es', - 57: 'mn-CN', - 87: 'om', - 150: 'az', - 28: 'lv', - 58: 'mn', - 88: 'so', - 151: 'nn', - 29: 'se', - 59: 'ps', - 89: 'sw' - }, - // ISO (deprecated) - [], - { - 0x0436: 'af', - 0x4009: 'en-IN', - 0x0487: 'rw', - 0x0432: 'tn', - 0x041C: 'sq', - 0x1809: 'en-IE', - 0x0441: 'sw', - 0x045B: 'si', - 0x0484: 'gsw', - 0x2009: 'en-JM', - 0x0457: 'kok', - 0x041B: 'sk', - 0x045E: 'am', - 0x4409: 'en-MY', - 0x0412: 'ko', - 0x0424: 'sl', - 0x1401: 'ar-DZ', - 0x1409: 'en-NZ', - 0x0440: 'ky', - 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', - 0x3409: 'en-PH', - 0x0454: 'lo', - 0x400A: 'es-BO', - 0x0C01: 'ar', - 0x4809: 'en-SG', - 0x0426: 'lv', - 0x340A: 'es-CL', - 0x0801: 'ar-IQ', - 0x1C09: 'en-ZA', - 0x0427: 'lt', - 0x240A: 'es-CO', - 0x2C01: 'ar-JO', - 0x2C09: 'en-TT', - 0x082E: 'dsb', - 0x140A: 'es-CR', - 0x3401: 'ar-KW', - 0x0809: 'en-GB', - 0x046E: 'lb', - 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', - 0x0409: 'en', - 0x042F: 'mk', - 0x300A: 'es-EC', - 0x1001: 'ar-LY', - 0x3009: 'en-ZW', - 0x083E: 'ms-BN', - 0x440A: 'es-SV', - 0x1801: 'ary', - 0x0425: 'et', - 0x043E: 'ms', - 0x100A: 'es-GT', - 0x2001: 'ar-OM', - 0x0438: 'fo', - 0x044C: 'ml', - 0x480A: 'es-HN', - 0x4001: 'ar-QA', - 0x0464: 'fil', - 0x043A: 'mt', - 0x080A: 'es-MX', - 0x0401: 'ar-SA', - 0x040B: 'fi', - 0x0481: 'mi', - 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', - 0x080C: 'fr-BE', - 0x047A: 'arn', - 0x180A: 'es-PA', - 0x1C01: 'aeb', - 0x0C0C: 'fr-CA', - 0x044E: 'mr', - 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', - 0x040C: 'fr', - 0x047C: 'moh', - 0x280A: 'es-PE', - 0x2401: 'ar-YE', - 0x140C: 'fr-LU', - 0x0450: 'mn', - 0x500A: 'es-PR', - 0x042B: 'hy', - 0x180C: 'fr-MC', - 0x0850: 'mn-CN', - 0x0C0A: 'es', - 0x044D: 'as', - 0x100C: 'fr-CH', - 0x0461: 'ne', - 0x040A: 'es', - 0x082C: 'az-Cyrl', - 0x0462: 'fy', - 0x0414: 'nb', - 0x540A: 'es-US', - 0x042C: 'az', - 0x0456: 'gl', - 0x0814: 'nn', - 0x380A: 'es-UY', - 0x046D: 'ba', - 0x0437: 'ka', - 0x0482: 'oc', - 0x200A: 'es-VE', - 0x042D: 'eu', - 0x0C07: 'de-AT', - 0x0448: 'or', - 0x081D: 'sv-FI', - 0x0423: 'be', - 0x0407: 'de', - 0x0463: 'ps', - 0x041D: 'sv', - 0x0845: 'bn', - 0x1407: 'de-LI', - 0x0415: 'pl', - 0x045A: 'syr', - 0x0445: 'bn-IN', - 0x1007: 'de-LU', - 0x0416: 'pt', - 0x0428: 'tg', - 0x201A: 'bs-Cyrl', - 0x0807: 'de-CH', - 0x0816: 'pt-PT', - 0x085F: 'tzm', - 0x141A: 'bs', - 0x0408: 'el', - 0x0446: 'pa', - 0x0449: 'ta', - 0x047E: 'br', - 0x046F: 'kl', - 0x046B: 'qu-BO', - 0x0444: 'tt', - 0x0402: 'bg', - 0x0447: 'gu', - 0x086B: 'qu-EC', - 0x044A: 'te', - 0x0403: 'ca', - 0x0468: 'ha', - 0x0C6B: 'qu', - 0x041E: 'th', - 0x0C04: 'zh-HK', - 0x040D: 'he', - 0x0418: 'ro', - 0x0451: 'bo', - 0x1404: 'zh-MO', - 0x0439: 'hi', - 0x0417: 'rm', - 0x041F: 'tr', - 0x0804: 'zh', - 0x040E: 'hu', - 0x0419: 'ru', - 0x0442: 'tk', - 0x1004: 'zh-SG', - 0x040F: 'is', - 0x243B: 'smn', - 0x0480: 'ug', - 0x0404: 'zh-TW', - 0x0470: 'ig', - 0x103B: 'smj-NO', - 0x0422: 'uk', - 0x0483: 'co', - 0x0421: 'id', - 0x143B: 'smj', - 0x042E: 'hsb', - 0x041A: 'hr', - 0x045D: 'iu', - 0x0C3B: 'se-FI', - 0x0420: 'ur', - 0x101A: 'hr-BA', - 0x085D: 'iu-Latn', - 0x043B: 'se', - 0x0843: 'uz-Cyrl', - 0x0405: 'cs', - 0x083C: 'ga', - 0x083B: 'se-SE', - 0x0443: 'uz', - 0x0406: 'da', - 0x0434: 'xh', - 0x203B: 'sms', - 0x042A: 'vi', - 0x048C: 'prs', - 0x0435: 'zu', - 0x183B: 'sma-NO', - 0x0452: 'cy', - 0x0465: 'dv', - 0x0410: 'it', - 0x1C3B: 'sms', - 0x0488: 'wo', - 0x0813: 'nl-BE', - 0x0810: 'it-CH', - 0x044F: 'sa', - 0x0485: 'sah', - 0x0413: 'nl', - 0x0411: 'ja', - 0x1C1A: 'sr-Cyrl-BA', - 0x0478: 'ii', - 0x0C09: 'en-AU', - 0x044B: 'kn', - 0x0C1A: 'sr', - 0x046A: 'yo', - 0x2809: 'en-BZ', - 0x043F: 'kk', - 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', - 0x0453: 'km', - 0x081A: 'sr-Latn', - 0x2409: 'en-029', - 0x0486: 'quc', - 0x046C: 'nso' - } -]; - - -let $51a9f4feb3a3b2b1$var$NameRecord = new $gfJaN$restructure.Struct({ - platformID: $gfJaN$restructure.uint16, - encodingID: $gfJaN$restructure.uint16, - languageID: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16, - length: $gfJaN$restructure.uint16, - string: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.String('length', (t)=>(0, $e2613b812f052cbe$export$badc544e0651b6b1)(t.platformID, t.encodingID, t.languageID)), { - type: 'parent', - relativeTo: (ctx)=>ctx.parent.stringOffset, - allowNull: false - }) -}); -let $51a9f4feb3a3b2b1$var$LangTagRecord = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - tag: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.String('length', 'utf16be'), { - type: 'parent', - relativeTo: (ctx)=>ctx.stringOffset - }) -}); -var $51a9f4feb3a3b2b1$var$NameTable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - count: $gfJaN$restructure.uint16, - stringOffset: $gfJaN$restructure.uint16, - records: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count') - }, - 1: { - count: $gfJaN$restructure.uint16, - stringOffset: $gfJaN$restructure.uint16, - records: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count'), - langTagCount: $gfJaN$restructure.uint16, - langTags: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$LangTagRecord, 'langTagCount') - } -}); -var $51a9f4feb3a3b2b1$export$2e2bcd8739ae039 = $51a9f4feb3a3b2b1$var$NameTable; -const $51a9f4feb3a3b2b1$var$NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; -$51a9f4feb3a3b2b1$var$NameTable.process = function(stream) { - var records = {}; - for (let record of this.records){ - // find out what language this is for - let language = (0, $e2613b812f052cbe$export$2092376fd002e13)[record.platformID][record.languageID]; - if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; - if (language == null) language = record.platformID + '-' + record.languageID; - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : $51a9f4feb3a3b2b1$var$NAMES[record.nameID] || record.nameID; - if (records[key] == null) records[key] = {}; - let obj = records[key]; - if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); - if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; - } - this.records = records; -}; -$51a9f4feb3a3b2b1$var$NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - let records = []; - for(let key in this.records){ - let val = this.records[key]; - if (key === 'fontFeatures') continue; - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - if (key === 'postscriptName') records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - this.records = records; - this.count = records.length; - this.stringOffset = $51a9f4feb3a3b2b1$var$NameTable.size(this, null, false); -}; - - - -var $114ea85db469b435$var$OS2 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - xAvgCharWidth: $gfJaN$restructure.int16, - usWeightClass: $gfJaN$restructure.uint16, - usWidthClass: $gfJaN$restructure.uint16, - fsType: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - null, - 'noEmbedding', - 'viewOnly', - 'editable', - null, - null, - null, - null, - 'noSubsetting', - 'bitmapOnly' - ]), - ySubscriptXSize: $gfJaN$restructure.int16, - ySubscriptYSize: $gfJaN$restructure.int16, - ySubscriptXOffset: $gfJaN$restructure.int16, - ySubscriptYOffset: $gfJaN$restructure.int16, - ySuperscriptXSize: $gfJaN$restructure.int16, - ySuperscriptYSize: $gfJaN$restructure.int16, - ySuperscriptXOffset: $gfJaN$restructure.int16, - ySuperscriptYOffset: $gfJaN$restructure.int16, - yStrikeoutSize: $gfJaN$restructure.int16, - yStrikeoutPosition: $gfJaN$restructure.int16, - sFamilyClass: $gfJaN$restructure.int16, - panose: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 10), - ulCharRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 4), - vendorID: new $gfJaN$restructure.String(4), - fsSelection: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'italic', - 'underscore', - 'negative', - 'outlined', - 'strikeout', - 'bold', - 'regular', - 'useTypoMetrics', - 'wws', - 'oblique' - ]), - usFirstCharIndex: $gfJaN$restructure.uint16, - usLastCharIndex: $gfJaN$restructure.uint16 // The maximum Unicode index in this font - }, - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - 1: { - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2) - }, - 2: { - // these should be common with version 1 somehow - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2), - xHeight: $gfJaN$restructure.int16, - capHeight: $gfJaN$restructure.int16, - defaultChar: $gfJaN$restructure.uint16, - breakChar: $gfJaN$restructure.uint16, - maxContent: $gfJaN$restructure.uint16 - }, - 5: { - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2), - xHeight: $gfJaN$restructure.int16, - capHeight: $gfJaN$restructure.int16, - defaultChar: $gfJaN$restructure.uint16, - breakChar: $gfJaN$restructure.uint16, - maxContent: $gfJaN$restructure.uint16, - usLowerOpticalPointSize: $gfJaN$restructure.uint16, - usUpperOpticalPointSize: $gfJaN$restructure.uint16 - } -}); -let $114ea85db469b435$var$versions = $114ea85db469b435$var$OS2.versions; -$114ea85db469b435$var$versions[3] = $114ea85db469b435$var$versions[4] = $114ea85db469b435$var$versions[2]; -var $114ea85db469b435$export$2e2bcd8739ae039 = $114ea85db469b435$var$OS2; - - - -var // PostScript information -$f93b30299e1ea0f5$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.fixed32, { - header: { - italicAngle: $gfJaN$restructure.fixed32, - underlinePosition: $gfJaN$restructure.int16, - underlineThickness: $gfJaN$restructure.int16, - isFixedPitch: $gfJaN$restructure.uint32, - minMemType42: $gfJaN$restructure.uint32, - maxMemType42: $gfJaN$restructure.uint32, - minMemType1: $gfJaN$restructure.uint32, - maxMemType1: $gfJaN$restructure.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - 1: {}, - 2: { - numberOfGlyphs: $gfJaN$restructure.uint16, - glyphNameIndex: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numberOfGlyphs'), - names: new $gfJaN$restructure.Array(new $gfJaN$restructure.String($gfJaN$restructure.uint8)) - }, - 2.5: { - numberOfGlyphs: $gfJaN$restructure.uint16, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'numberOfGlyphs') - }, - 3: {}, - 4: { - map: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, (t)=>t.parent.maxp.numGlyphs) - } -}); - - - -var // An array of predefined values accessible by instructions -$8fb09b0f473d61a0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - controlValues: new $gfJaN$restructure.Array($gfJaN$restructure.int16) -}); - - - -var // A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -$873d79fea57d3161$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - instructions: new $gfJaN$restructure.Array($gfJaN$restructure.uint8) -}); - - - -let $83c4155666d50c37$var$loca = new $gfJaN$restructure.VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16) - }, - 1: { - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32) - } -}); -$83c4155666d50c37$var$loca.process = function() { - if (this.version === 0 && !this._processed) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; - this._processed = true; - } -}; -$83c4155666d50c37$var$loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; - this._processed = false; - } -}; -var $83c4155666d50c37$export$2e2bcd8739ae039 = $83c4155666d50c37$var$loca; - - - -var // Set of instructions executed whenever the point size or font transformation change -$b12598db7cdf7042$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - controlValueProgram: new $gfJaN$restructure.Array($gfJaN$restructure.uint8) -}); - - - -var // only used for encoding -$7707bdf21a3d89cc$export$2e2bcd8739ae039 = new $gfJaN$restructure.Array(new $gfJaN$restructure.Buffer); - - - - -class $9eaea3754914a290$export$2e2bcd8739ae039 { - getCFFVersion(ctx) { - while(ctx && !ctx.hdrSize)ctx = ctx.parent; - return ctx ? ctx.version : -1; - } - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); - if (count === 0) return []; - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) offsetType = $gfJaN$restructure.uint8; - else if (offSize === 2) offsetType = $gfJaN$restructure.uint16; - else if (offSize === 3) offsetType = $gfJaN$restructure.uint24; - else if (offSize === 4) offsetType = $gfJaN$restructure.uint32; - else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - let ret = []; - let startPos = stream.pos + (count + 1) * offSize - 1; - let start = offsetType.decode(stream); - for(let i = 0; i < count; i++){ - let end = offsetType.decode(stream); - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else ret.push({ - offset: startPos + start, - length: end - start - }); - start = end; - } - stream.pos = startPos + start; - return ret; - } - size(arr, parent) { - let size = 2; - if (arr.length === 0) return size; - let type = this.type || new $gfJaN$restructure.Buffer; - // find maximum offset to detminine offset type - let offset = 1; - for(let i = 0; i < arr.length; i++){ - let item = arr[i]; - offset += type.size(item, parent); - } - let offsetType; - if (offset <= 0xff) offsetType = $gfJaN$restructure.uint8; - else if (offset <= 0xffff) offsetType = $gfJaN$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $gfJaN$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $gfJaN$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - return size; - } - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) return; - let type = this.type || new $gfJaN$restructure.Buffer; - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr){ - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - let offsetType; - if (offset <= 0xff) offsetType = $gfJaN$restructure.uint8; - else if (offset <= 0xffff) offsetType = $gfJaN$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $gfJaN$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $gfJaN$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - // write offset size - stream.writeUInt8(offsetType.size()); - // write elements - offset = 1; - offsetType.encode(stream, offset); - for (let size of sizes){ - offset += size; - offsetType.encode(stream, offset); - } - for (let item of arr)type.encode(stream, item, parent); - return; - } - constructor(type){ - this.type = type; - } -} - - - - - -const $f77b592c17132d70$var$FLOAT_EOF = 0xf; -const $f77b592c17132d70$var$FLOAT_LOOKUP = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '.', - 'E', - 'E-', - null, - '-' -]; -const $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; -class $f77b592c17132d70$export$2e2bcd8739ae039 { - static decode(stream, value) { - if (32 <= value && value <= 246) return value - 139; - if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; - if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; - if (value === 28) return stream.readInt16BE(); - if (value === 29) return stream.readInt32BE(); - if (value === 30) { - let str = ''; - while(true){ - let b = stream.readUInt8(); - let n1 = b >> 4; - if (n1 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n1]; - let n2 = b & 15; - if (n2 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n2]; - } - return parseFloat(str); - } - return null; - } - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) value = 32768; - if ((value | 0) !== value) { - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - } else if (-107 <= value && value <= 107) return 1; - else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; - else if (-32768 <= value && value <= 32767) return 3; - else return 5; - } - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } else if ((val | 0) !== val) { - stream.writeUInt8(30); - let str = '' + val; - for(let i = 0; i < str.length; i += 2){ - let c1 = str[i]; - let n1 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; - if (i === str.length - 1) var n2 = $f77b592c17132d70$var$FLOAT_EOF; - else { - let c2 = str[i + 1]; - var n2 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - stream.writeUInt8(n1 << 4 | n2 & 15); - } - if (n2 !== $f77b592c17132d70$var$FLOAT_EOF) return stream.writeUInt8($f77b592c17132d70$var$FLOAT_EOF << 4); - } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); - else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} - - -class $efe622f40a9c35bd$export$2e2bcd8739ae039 { - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ - op - ])); - else if (type.decode != null) return type.decode(stream, ret, operands); - else switch(type){ - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]); - else if (type.encode != null) return type.encode(stream, operands, ctx); - else if (typeof operands === 'number') return [ - operands - ]; - else if (typeof operands === 'boolean') return [ - +operands - ]; - else if (Array.isArray(operands)) return operands; - else return [ - operands - ]; - } - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - // define hidden properties - Object.defineProperties(ret, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - } - }); - // fill in defaults - for(let key in this.fields){ - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - while(stream.pos < end){ - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) b = b << 8 | stream.readUInt8(); - let field = this.fields[b]; - if (!field) throw new Error(`Unknown operator ${b}`); - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof (0, $gfJaN$restructure.PropertyDescriptor)) Object.defineProperty(ret, field[1], val); - else ret[field[1]] = val; - } - operands = []; - } else operands.push((0, $f77b592c17132d70$export$2e2bcd8739ae039).decode(stream, b)); - } - return ret; - } - size(dict, parent, includePointers = true) { - let ctx = { - parent: parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - let len = 0; - for(let k in this.fields){ - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($gfJaN$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands)len += (0, $f77b592c17132d70$export$2e2bcd8739ae039).size(op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - len += key.length; - } - if (includePointers) len += ctx.pointerSize; - return len; - } - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: dict, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - for (let field of this.ops){ - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($gfJaN$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands)(0, $f77b592c17132d70$export$2e2bcd8739ae039).encode(stream, op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - for (let op of key)stream.writeUInt8(op); - } - let i = 0; - while(i < ctx.pointers.length){ - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - return; - } - constructor(ops = []){ - this.ops = ops; - this.fields = {}; - for (let field of ops){ - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } -} - - - - -class $4aa1b0749c2770f8$export$2e2bcd8739ae039 extends $gfJaN$restructure.Pointer { - decode(stream, parent, operands) { - this.offsetType = { - decode: ()=>operands[0] - }; - return super.decode(stream, parent, operands); - } - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: ()=>0 - }; - this.size(value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(0) - ]; - } - let ptr = null; - this.offsetType = { - encode: (stream, val)=>ptr = val - }; - super.encode(stream, value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(ptr) - ]; - } - constructor(type, options = {}){ - if (options.type == null) options.type = 'global'; - super(null, type, options); - } -} -class $4aa1b0749c2770f8$var$Ptr { - valueOf() { - return this.val; - } - constructor(val){ - this.val = val; - this.forceLarge = true; - } -} - - - - - -class $15a0cbb3d09cf7ee$var$CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while(operands.length > numBlends)operands.pop(); - } -} -var $15a0cbb3d09cf7ee$export$2e2bcd8739ae039 = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type default - [ - 6, - 'BlueValues', - 'delta', - null - ], - [ - 7, - 'OtherBlues', - 'delta', - null - ], - [ - 8, - 'FamilyBlues', - 'delta', - null - ], - [ - 9, - 'FamilyOtherBlues', - 'delta', - null - ], - [ - [ - 12, - 9 - ], - 'BlueScale', - 'number', - 0.039625 - ], - [ - [ - 12, - 10 - ], - 'BlueShift', - 'number', - 7 - ], - [ - [ - 12, - 11 - ], - 'BlueFuzz', - 'number', - 1 - ], - [ - 10, - 'StdHW', - 'number', - null - ], - [ - 11, - 'StdVW', - 'number', - null - ], - [ - [ - 12, - 12 - ], - 'StemSnapH', - 'delta', - null - ], - [ - [ - 12, - 13 - ], - 'StemSnapV', - 'delta', - null - ], - [ - [ - 12, - 14 - ], - 'ForceBold', - 'boolean', - false - ], - [ - [ - 12, - 17 - ], - 'LanguageGroup', - 'number', - 0 - ], - [ - [ - 12, - 18 - ], - 'ExpansionFactor', - 'number', - 0.06 - ], - [ - [ - 12, - 19 - ], - 'initialRandomSeed', - 'number', - 0 - ], - [ - 20, - 'defaultWidthX', - 'number', - 0 - ], - [ - 21, - 'nominalWidthX', - 'number', - 0 - ], - [ - 22, - 'vsindex', - 'number', - 0 - ], - [ - 23, - 'blend', - $15a0cbb3d09cf7ee$var$CFFBlendOp, - null - ], - [ - 19, - 'Subrs', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039), { - type: 'local' - }), - null - ] -]); - - -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -var $860d3574d7fa3a51$export$2e2bcd8739ae039 = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -]; - - -let $c4ffe47cba1d7f36$export$dee0027060fa13bd = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - '', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - '', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - '', - 'questiondown', - '', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - '', - 'ring', - 'cedilla', - '', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'AE', - '', - 'ordfeminine', - '', - '', - '', - '', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - '', - '', - '', - '', - '', - 'ae', - '', - '', - '', - 'dotlessi', - '', - '', - 'lslash', - 'oslash', - 'oe', - 'germandbls' -]; -let $c4ffe47cba1d7f36$export$4f58f497e14a53c3 = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - '', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - '', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - '', - '', - 'isuperior', - '', - '', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - '', - '', - 'rsuperior', - 'ssuperior', - 'tsuperior', - '', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - '', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - '', - '', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - '', - 'Dotaccentsmall', - '', - '', - 'Macronsmall', - '', - '', - 'figuredash', - 'hypheninferior', - '', - '', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - '', - '', - '', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - '', - '', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; - - -let $1e7c7c16984e4427$export$c33b50336c234f16 = [ - '.notdef', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - 'questiondown', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - 'AE', - 'ordfeminine', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - 'ae', - 'dotlessi', - 'lslash', - 'oslash', - 'oe', - 'germandbls', - 'onesuperior', - 'logicalnot', - 'mu', - 'trademark', - 'Eth', - 'onehalf', - 'plusminus', - 'Thorn', - 'onequarter', - 'divide', - 'brokenbar', - 'degree', - 'thorn', - 'threequarters', - 'twosuperior', - 'registered', - 'minus', - 'eth', - 'multiply', - 'threesuperior', - 'copyright', - 'Aacute', - 'Acircumflex', - 'Adieresis', - 'Agrave', - 'Aring', - 'Atilde', - 'Ccedilla', - 'Eacute', - 'Ecircumflex', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Ntilde', - 'Oacute', - 'Ocircumflex', - 'Odieresis', - 'Ograve', - 'Otilde', - 'Scaron', - 'Uacute', - 'Ucircumflex', - 'Udieresis', - 'Ugrave', - 'Yacute', - 'Ydieresis', - 'Zcaron', - 'aacute', - 'acircumflex', - 'adieresis', - 'agrave', - 'aring', - 'atilde', - 'ccedilla', - 'eacute', - 'ecircumflex', - 'edieresis', - 'egrave', - 'iacute', - 'icircumflex', - 'idieresis', - 'igrave', - 'ntilde', - 'oacute', - 'ocircumflex', - 'odieresis', - 'ograve', - 'otilde', - 'scaron', - 'uacute', - 'ucircumflex', - 'udieresis', - 'ugrave', - 'yacute', - 'ydieresis', - 'zcaron' -]; -let $1e7c7c16984e4427$export$3ed0f9e1fee8d489 = [ - '.notdef', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - 'Dotaccentsmall', - 'Macronsmall', - 'figuredash', - 'hypheninferior', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; -let $1e7c7c16984e4427$export$dc28be11139d4120 = [ - '.notdef', - 'space', - 'dollaroldstyle', - 'dollarsuperior', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'hyphensuperior', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'centoldstyle', - 'figuredash', - 'hypheninferior', - 'onequarter', - 'onehalf', - 'threequarters', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior' -]; - - - -//######################## -// Scripts and Languages # -//######################## -let $b6dd765146ad212a$var$LangSysTable = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - reqFeatureIndex: $gfJaN$restructure.uint16, - featureCount: $gfJaN$restructure.uint16, - featureIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'featureCount') -}); -let $b6dd765146ad212a$var$LangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - langSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$LangSysTable, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$var$Script = new $gfJaN$restructure.Struct({ - defaultLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$LangSysTable), - count: $gfJaN$restructure.uint16, - langSysRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LangSysRecord, 'count') -}); -let $b6dd765146ad212a$var$ScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$Script, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$3e15fc05ce864229 = new $gfJaN$restructure.Array($b6dd765146ad212a$var$ScriptRecord, $gfJaN$restructure.uint16); -//####################### -// Features and Lookups # -//####################### -let $b6dd765146ad212a$var$FeatureParams = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$6e91cf7616333d5 = new $gfJaN$restructure.Struct({ - featureParams: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$FeatureParams), - lookupCount: $gfJaN$restructure.uint16, - lookupListIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'lookupCount') -}); -let $b6dd765146ad212a$var$FeatureRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - feature: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$6e91cf7616333d5, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$aa18130def4b6cb4 = new $gfJaN$restructure.Array($b6dd765146ad212a$var$FeatureRecord, $gfJaN$restructure.uint16); -let $b6dd765146ad212a$var$LookupFlags = new $gfJaN$restructure.Struct({ - markAttachmentType: $gfJaN$restructure.uint8, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'rightToLeft', - 'ignoreBaseGlyphs', - 'ignoreLigatures', - 'ignoreMarks', - 'useMarkFilteringSet' - ]) -}); -function $b6dd765146ad212a$export$df0008c6ff2da22a(SubTable) { - let Lookup = new $gfJaN$restructure.Struct({ - lookupType: $gfJaN$restructure.uint16, - flags: $b6dd765146ad212a$var$LookupFlags, - subTableCount: $gfJaN$restructure.uint16, - subTables: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, SubTable), 'subTableCount'), - markFilteringSet: new $gfJaN$restructure.Optional($gfJaN$restructure.uint16, (t)=>t.flags.flags.useMarkFilteringSet) - }); - return new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, Lookup), $gfJaN$restructure.uint16); -} -//################# -// Coverage Table # -//################# -let $b6dd765146ad212a$var$RangeRecord = new $gfJaN$restructure.Struct({ - start: $gfJaN$restructure.uint16, - end: $gfJaN$restructure.uint16, - startCoverageIndex: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$17608c3f81a6111 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - glyphCount: $gfJaN$restructure.uint16, - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - }, - 2: { - rangeCount: $gfJaN$restructure.uint16, - rangeRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$RangeRecord, 'rangeCount') - } -}); -//######################### -// Class Definition Table # -//######################### -let $b6dd765146ad212a$var$ClassRangeRecord = new $gfJaN$restructure.Struct({ - start: $gfJaN$restructure.uint16, - end: $gfJaN$restructure.uint16, - class: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$843d551fbbafef71 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - startGlyph: $gfJaN$restructure.uint16, - glyphCount: $gfJaN$restructure.uint16, - classValueArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - }, - 2: { - classRangeCount: $gfJaN$restructure.uint16, - classRangeRecord: new $gfJaN$restructure.Array($b6dd765146ad212a$var$ClassRangeRecord, 'classRangeCount') - } -}); -let $b6dd765146ad212a$export$8215d14a63d9fb10 = new $gfJaN$restructure.Struct({ - a: $gfJaN$restructure.uint16, - b: $gfJaN$restructure.uint16, - deltaFormat: $gfJaN$restructure.uint16 -}); -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# -let $b6dd765146ad212a$var$LookupRecord = new $gfJaN$restructure.Struct({ - sequenceIndex: $gfJaN$restructure.uint16, - lookupListIndex: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$var$Rule = new $gfJaN$restructure.Struct({ - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - input: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$RuleSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$Rule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$var$ClassRule = new $gfJaN$restructure.Struct({ - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - classes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ClassSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ClassRule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$export$841858b892ce1f4c = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - ruleSetCount: $gfJaN$restructure.uint16, - ruleSets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$RuleSet), 'ruleSetCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - classDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - classSetCnt: $gfJaN$restructure.uint16, - classSet: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - coverages: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'glyphCount'), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### -let $b6dd765146ad212a$var$ChainRule = new $gfJaN$restructure.Struct({ - backtrackGlyphCount: $gfJaN$restructure.uint16, - backtrack: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'backtrackGlyphCount'), - inputGlyphCount: $gfJaN$restructure.uint16, - input: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.inputGlyphCount - 1), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookahead: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'lookaheadGlyphCount'), - lookupCount: $gfJaN$restructure.uint16, - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ChainRuleSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$export$5e6d09e6861162f6 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - chainCount: $gfJaN$restructure.uint16, - chainRuleSets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - backtrackClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - inputClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - lookaheadClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - chainCount: $gfJaN$restructure.uint16, - chainClassSet: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 3: { - backtrackGlyphCount: $gfJaN$restructure.uint16, - backtrackCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'backtrackGlyphCount'), - inputGlyphCount: $gfJaN$restructure.uint16, - inputCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'inputGlyphCount'), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookaheadCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'lookaheadGlyphCount'), - lookupCount: $gfJaN$restructure.uint16, - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); - - - -/******************* - * Variation Store * - *******************/ let $2e4adcda047b3383$var$F2DOT14 = new $gfJaN$restructure.Fixed(16, 'BE', 14); -let $2e4adcda047b3383$var$RegionAxisCoordinates = new $gfJaN$restructure.Struct({ - startCoord: $2e4adcda047b3383$var$F2DOT14, - peakCoord: $2e4adcda047b3383$var$F2DOT14, - endCoord: $2e4adcda047b3383$var$F2DOT14 -}); -let $2e4adcda047b3383$var$VariationRegionList = new $gfJaN$restructure.Struct({ - axisCount: $gfJaN$restructure.uint16, - regionCount: $gfJaN$restructure.uint16, - variationRegions: new $gfJaN$restructure.Array(new $gfJaN$restructure.Array($2e4adcda047b3383$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); -let $2e4adcda047b3383$var$DeltaSet = new $gfJaN$restructure.Struct({ - shortDeltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, (t)=>t.parent.shortDeltaCount), - regionDeltas: new $gfJaN$restructure.Array($gfJaN$restructure.int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) -}); -let $2e4adcda047b3383$var$ItemVariationData = new $gfJaN$restructure.Struct({ - itemCount: $gfJaN$restructure.uint16, - shortDeltaCount: $gfJaN$restructure.uint16, - regionIndexCount: $gfJaN$restructure.uint16, - regionIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'regionIndexCount'), - deltaSets: new $gfJaN$restructure.Array($2e4adcda047b3383$var$DeltaSet, 'itemCount') -}); -let $2e4adcda047b3383$export$fe1b122a2710f241 = new $gfJaN$restructure.Struct({ - format: $gfJaN$restructure.uint16, - variationRegionList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$VariationRegionList), - variationDataCount: $gfJaN$restructure.uint16, - itemVariationData: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ItemVariationData), 'variationDataCount') -}); -/********************** - * Feature Variations * - **********************/ let $2e4adcda047b3383$var$ConditionTable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - axisIndex: $gfJaN$restructure.uint16, - axisIndex: $gfJaN$restructure.uint16, - filterRangeMinValue: $2e4adcda047b3383$var$F2DOT14, - filterRangeMaxValue: $2e4adcda047b3383$var$F2DOT14 - } -}); -let $2e4adcda047b3383$var$ConditionSet = new $gfJaN$restructure.Struct({ - conditionCount: $gfJaN$restructure.uint16, - conditionTable: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ConditionTable), 'conditionCount') -}); -let $2e4adcda047b3383$var$FeatureTableSubstitutionRecord = new $gfJaN$restructure.Struct({ - featureIndex: $gfJaN$restructure.uint16, - alternateFeatureTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $b6dd765146ad212a$export$6e91cf7616333d5), { - type: 'parent' - }) -}); -let $2e4adcda047b3383$var$FeatureTableSubstitution = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - substitutionCount: $gfJaN$restructure.uint16, - substitutions: new $gfJaN$restructure.Array($2e4adcda047b3383$var$FeatureTableSubstitutionRecord, 'substitutionCount') -}); -let $2e4adcda047b3383$var$FeatureVariationRecord = new $gfJaN$restructure.Struct({ - conditionSet: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ConditionSet, { - type: 'parent' - }), - featureTableSubstitution: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$FeatureTableSubstitution, { - type: 'parent' - }) -}); -let $2e4adcda047b3383$export$441b70b7971dd419 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - featureVariationRecordCount: $gfJaN$restructure.uint32, - featureVariationRecords: new $gfJaN$restructure.Array($2e4adcda047b3383$var$FeatureVariationRecord, 'featureVariationRecordCount') -}); - - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class $5b547cf9e5da519b$var$PredefinedOp { - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; - return this.type.decode(stream, parent, operands); - } - size(value, ctx) { - return this.type.size(value, ctx); - } - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) return index; - return this.type.encode(stream, value, ctx); - } - constructor(predefinedOps, type){ - this.predefinedOps = predefinedOps; - this.type = type; - } -} -class $5b547cf9e5da519b$var$CFFEncodingVersion extends $gfJaN$restructure.Number { - decode(stream) { - return $gfJaN$restructure.uint8.decode(stream) & 0x7f; - } - constructor(){ - super('UInt8'); - } -} -let $5b547cf9e5da519b$var$Range1 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - nLeft: $gfJaN$restructure.uint8 -}); -let $5b547cf9e5da519b$var$Range2 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - nLeft: $gfJaN$restructure.uint16 -}); -let $5b547cf9e5da519b$var$CFFCustomEncoding = new $gfJaN$restructure.VersionedStruct(new $5b547cf9e5da519b$var$CFFEncodingVersion(), { - 0: { - nCodes: $gfJaN$restructure.uint8, - codes: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'nCodes') - }, - 1: { - nRanges: $gfJaN$restructure.uint8, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$Range1, 'nRanges') - } -}); -let $5b547cf9e5da519b$var$CFFEncoding = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd), - (0, $c4ffe47cba1d7f36$export$4f58f497e14a53c3) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomEncoding, { - lazy: true -})); -// Decodes an array of ranges until the total -// length is equal to the provided length. -class $5b547cf9e5da519b$var$RangeArray extends $gfJaN$restructure.Array { - decode(stream, parent) { - let length = (0, $gfJaN$restructure.resolveLength)(this.length, stream, parent); - let count = 0; - let res = []; - while(count < length){ - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - return res; - } -} -let $5b547cf9e5da519b$var$CFFCustomCharset = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint8, { - 0: { - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.parent.CharStrings.length - 1) - }, - 1: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range1, (t)=>t.parent.CharStrings.length - 1) - }, - 2: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range2, (t)=>t.parent.CharStrings.length - 1) - } -}); -let $5b547cf9e5da519b$var$CFFCharset = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $1e7c7c16984e4427$export$c33b50336c234f16), - (0, $1e7c7c16984e4427$export$3ed0f9e1fee8d489), - (0, $1e7c7c16984e4427$export$dc28be11139d4120) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomCharset, { - lazy: true -})); -let $5b547cf9e5da519b$var$FDRange3 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - fd: $gfJaN$restructure.uint8 -}); -let $5b547cf9e5da519b$var$FDRange4 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint32, - fd: $gfJaN$restructure.uint16 -}); -let $5b547cf9e5da519b$var$FDSelect = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint8, { - 0: { - fds: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.parent.CharStrings.length) - }, - 3: { - nRanges: $gfJaN$restructure.uint16, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$FDRange3, 'nRanges'), - sentinel: $gfJaN$restructure.uint16 - }, - 4: { - nRanges: $gfJaN$restructure.uint32, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$FDRange4, 'nRanges'), - sentinel: $gfJaN$restructure.uint32 - } -}); -let $5b547cf9e5da519b$var$ptr = new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)((0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039)); -class $5b547cf9e5da519b$var$CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return $5b547cf9e5da519b$var$ptr.decode(stream, parent, [ - operands[1] - ]); - } - size(dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.size(dict, ctx)[0] - ]; - } - encode(stream, dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.encode(stream, dict, ctx)[0] - ]; - } -} -let $5b547cf9e5da519b$var$FontDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ] -]); -let $5b547cf9e5da519b$var$CFFTopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - [ - 12, - 30 - ], - 'ROS', - [ - 'sid', - 'sid', - 'number' - ], - null - ], - [ - 0, - 'version', - 'sid', - null - ], - [ - 1, - 'Notice', - 'sid', - null - ], - [ - [ - 12, - 0 - ], - 'Copyright', - 'sid', - null - ], - [ - 2, - 'FullName', - 'sid', - null - ], - [ - 3, - 'FamilyName', - 'sid', - null - ], - [ - 4, - 'Weight', - 'sid', - null - ], - [ - [ - 12, - 1 - ], - 'isFixedPitch', - 'boolean', - false - ], - [ - [ - 12, - 2 - ], - 'ItalicAngle', - 'number', - 0 - ], - [ - [ - 12, - 3 - ], - 'UnderlinePosition', - 'number', - -100 - ], - [ - [ - 12, - 4 - ], - 'UnderlineThickness', - 'number', - 50 - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ], - [ - [ - 12, - 6 - ], - 'CharstringType', - 'number', - 2 - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 13, - 'UniqueID', - 'number', - null - ], - [ - 5, - 'FontBBox', - 'array', - [ - 0, - 0, - 0, - 0 - ] - ], - [ - [ - 12, - 8 - ], - 'StrokeWidth', - 'number', - 0 - ], - [ - 14, - 'XUID', - 'array', - null - ], - [ - 15, - 'charset', - $5b547cf9e5da519b$var$CFFCharset, - (0, $1e7c7c16984e4427$export$c33b50336c234f16) - ], - [ - 16, - 'Encoding', - $5b547cf9e5da519b$var$CFFEncoding, - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd) - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 20 - ], - 'SyntheticBase', - 'number', - null - ], - [ - [ - 12, - 21 - ], - 'PostScript', - 'sid', - null - ], - [ - [ - 12, - 22 - ], - 'BaseFontName', - 'sid', - null - ], - [ - [ - 12, - 23 - ], - 'BaseFontBlend', - 'delta', - null - ], - // CID font specific - [ - [ - 12, - 31 - ], - 'CIDFontVersion', - 'number', - 0 - ], - [ - [ - 12, - 32 - ], - 'CIDFontRevision', - 'number', - 0 - ], - [ - [ - 12, - 33 - ], - 'CIDFontType', - 'number', - 0 - ], - [ - [ - 12, - 34 - ], - 'CIDCount', - 'number', - 8720 - ], - [ - [ - 12, - 35 - ], - 'UIDBase', - 'number', - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ] -]); -let $5b547cf9e5da519b$var$VariationStore = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - itemVariationStore: (0, $2e4adcda047b3383$export$fe1b122a2710f241) -}); -let $5b547cf9e5da519b$var$CFF2TopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - 24, - 'vstore', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$VariationStore), - null - ], - [ - 25, - 'maxstack', - 'number', - 193 - ] -]); -let $5b547cf9e5da519b$var$CFFTop = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.fixed16, { - 1: { - hdrSize: $gfJaN$restructure.uint8, - offSize: $gfJaN$restructure.uint8, - nameIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $gfJaN$restructure.String('length')), - topDictIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFTopDict), - stringIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $gfJaN$restructure.String('length')), - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - }, - 2: { - hdrSize: $gfJaN$restructure.uint8, - length: $gfJaN$restructure.uint16, - topDict: $5b547cf9e5da519b$var$CFF2TopDict, - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - } -}); -var $5b547cf9e5da519b$export$2e2bcd8739ae039 = $5b547cf9e5da519b$var$CFFTop; - - - - -class $f717432b360040c7$var$CFFFont { - static decode(stream) { - return new $f717432b360040c7$var$CFFFont(stream); - } - decode() { - let start = this.stream.pos; - let top = (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).decode(this.stream); - for(let key in top){ - let val = top[key]; - this[key] = val; - } - if (this.version < 2) { - if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); - this.topDict = this.topDictIndex[0]; - } - this.isCIDFont = this.topDict.ROS != null; - return this; - } - string(sid) { - if (this.version >= 2) return null; - if (sid < (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length) return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039)[sid]; - return this.stringIndex[sid - (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length]; - } - get postscriptName() { - if (this.version < 2) return this.nameIndex[0]; - return null; - } - get fullName() { - return this.string(this.topDict.FullName); - } - get familyName() { - return this.string(this.topDict.FamilyName); - } - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) return null; - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) return null; - let { charset: charset } = this.topDict; - if (Array.isArray(charset)) return charset[gid]; - if (gid === 0) return '.notdef'; - gid -= 1; - switch(charset.version){ - case 0: - return this.string(charset.glyphs[gid]); - case 1: - case 2: - for(let i = 0; i < charset.ranges.length; i++){ - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); - } - break; - } - return null; - } - fdForGlyph(gid) { - if (!this.topDict.FDSelect) return null; - switch(this.topDict.FDSelect.version){ - case 0: - return this.topDict.FDSelect.fds[gid]; - case 3: - case 4: - let { ranges: ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - while(low <= high){ - let mid = low + high >> 1; - if (gid < ranges[mid].first) high = mid - 1; - else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; - else return ranges[mid].fd; - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; - return null; - } - if (this.version < 2) return this.topDict.Private; - return this.topDict.FDArray[0].Private; - } - constructor(stream){ - this.stream = stream; - this.decode(); - } -} -var $f717432b360040c7$export$2e2bcd8739ae039 = $f717432b360040c7$var$CFFFont; - - - -let $8cb7ae73ed7aa7d8$var$VerticalOrigin = new $gfJaN$restructure.Struct({ - glyphIndex: $gfJaN$restructure.uint16, - vertOriginY: $gfJaN$restructure.int16 -}); -var $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - defaultVertOriginY: $gfJaN$restructure.int16, - numVertOriginYMetrics: $gfJaN$restructure.uint16, - metrics: new $gfJaN$restructure.Array($8cb7ae73ed7aa7d8$var$VerticalOrigin, 'numVertOriginYMetrics') -}); - - - - -let $20e0c7bbecb76d75$export$16b227cb15d716a0 = new $gfJaN$restructure.Struct({ - height: $gfJaN$restructure.uint8, - width: $gfJaN$restructure.uint8, - horiBearingX: $gfJaN$restructure.int8, - horiBearingY: $gfJaN$restructure.int8, - horiAdvance: $gfJaN$restructure.uint8, - vertBearingX: $gfJaN$restructure.int8, - vertBearingY: $gfJaN$restructure.int8, - vertAdvance: $gfJaN$restructure.uint8 -}); -let $20e0c7bbecb76d75$export$62c53e75f69bfe12 = new $gfJaN$restructure.Struct({ - height: $gfJaN$restructure.uint8, - width: $gfJaN$restructure.uint8, - bearingX: $gfJaN$restructure.int8, - bearingY: $gfJaN$restructure.int8, - advance: $gfJaN$restructure.uint8 -}); -let $20e0c7bbecb76d75$var$EBDTComponent = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - xOffset: $gfJaN$restructure.int8, - yOffset: $gfJaN$restructure.int8 -}); -class $20e0c7bbecb76d75$var$ByteAligned { -} -class $20e0c7bbecb76d75$var$BitAligned { -} -let $20e0c7bbecb76d75$export$f1f5ddeb20d14f = new $gfJaN$restructure.VersionedStruct('version', { - 1: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 2: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$BitAligned - }, - // format 3 is deprecated - // format 4 is not supported by Microsoft - 5: { - data: $20e0c7bbecb76d75$var$BitAligned - }, - 6: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 7: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$BitAligned - }, - 8: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8), - numComponents: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 9: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8), - numComponents: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 17: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - }, - 18: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - }, - 19: { - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - } -}); - - -let $035bb95c0cdb1f6d$var$SBitLineMetrics = new $gfJaN$restructure.Struct({ - ascender: $gfJaN$restructure.int8, - descender: $gfJaN$restructure.int8, - widthMax: $gfJaN$restructure.uint8, - caretSlopeNumerator: $gfJaN$restructure.int8, - caretSlopeDenominator: $gfJaN$restructure.int8, - caretOffset: $gfJaN$restructure.int8, - minOriginSB: $gfJaN$restructure.int8, - minAdvanceSB: $gfJaN$restructure.int8, - maxBeforeBL: $gfJaN$restructure.int8, - minAfterBL: $gfJaN$restructure.int8, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.int8, 2) -}); -let $035bb95c0cdb1f6d$var$CodeOffsetPair = new $gfJaN$restructure.Struct({ - glyphCode: $gfJaN$restructure.uint16, - offset: $gfJaN$restructure.uint16 -}); -let $035bb95c0cdb1f6d$var$IndexSubtable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - imageFormat: $gfJaN$restructure.uint16, - imageDataOffset: $gfJaN$restructure.uint32 - }, - 1: { - offsetArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 2: { - imageSize: $gfJaN$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0) - }, - 3: { - offsetArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 4: { - numGlyphs: $gfJaN$restructure.uint32, - glyphArray: new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$CodeOffsetPair, (t)=>t.numGlyphs + 1) - }, - 5: { - imageSize: $gfJaN$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0), - numGlyphs: $gfJaN$restructure.uint32, - glyphCodeArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numGlyphs') - } -}); -let $035bb95c0cdb1f6d$var$IndexSubtableArray = new $gfJaN$restructure.Struct({ - firstGlyphIndex: $gfJaN$restructure.uint16, - lastGlyphIndex: $gfJaN$restructure.uint16, - subtable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $035bb95c0cdb1f6d$var$IndexSubtable) -}); -let $035bb95c0cdb1f6d$var$BitmapSizeTable = new $gfJaN$restructure.Struct({ - indexSubTableArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$IndexSubtableArray, 1), { - type: 'parent' - }), - indexTablesSize: $gfJaN$restructure.uint32, - numberOfIndexSubTables: $gfJaN$restructure.uint32, - colorRef: $gfJaN$restructure.uint32, - hori: $035bb95c0cdb1f6d$var$SBitLineMetrics, - vert: $035bb95c0cdb1f6d$var$SBitLineMetrics, - startGlyphIndex: $gfJaN$restructure.uint16, - endGlyphIndex: $gfJaN$restructure.uint16, - ppemX: $gfJaN$restructure.uint8, - ppemY: $gfJaN$restructure.uint8, - bitDepth: $gfJaN$restructure.uint8, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'horizontal', - 'vertical' - ]) -}); -var $035bb95c0cdb1f6d$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - numSizes: $gfJaN$restructure.uint32, - sizes: new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$BitmapSizeTable, 'numSizes') -}); - - - -let $73d13900b55a3c0c$var$ImageTable = new $gfJaN$restructure.Struct({ - ppem: $gfJaN$restructure.uint16, - resolution: $gfJaN$restructure.uint16, - imageOffsets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1) -}); -var // This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -$73d13900b55a3c0c$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'renderOutlines' - ]), - numImgTables: $gfJaN$restructure.uint32, - imageTables: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $73d13900b55a3c0c$var$ImageTable), 'numImgTables') -}); - - - -let $97f6b8be3a347a8f$var$LayerRecord = new $gfJaN$restructure.Struct({ - gid: $gfJaN$restructure.uint16, - paletteIndex: $gfJaN$restructure.uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for -// the special case noted below. Each palette entry is 16 bits. -// A palette index of 0xFFFF is a special case indicating that -// the text foreground color should be used. -let $97f6b8be3a347a8f$var$BaseGlyphRecord = new $gfJaN$restructure.Struct({ - gid: $gfJaN$restructure.uint16, - // and is not rendered for color. - firstLayerIndex: $gfJaN$restructure.uint16, - // There will be numLayers consecutive entries for this base glyph. - numLayers: $gfJaN$restructure.uint16 -}); -var $97f6b8be3a347a8f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numBaseGlyphRecords: $gfJaN$restructure.uint16, - baseGlyphRecord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($97f6b8be3a347a8f$var$BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($97f6b8be3a347a8f$var$LayerRecord, 'numLayerRecords'), { - lazy: true - }), - numLayerRecords: $gfJaN$restructure.uint16 -}); - - - -let $16ca60ecbdee30ea$var$ColorRecord = new $gfJaN$restructure.Struct({ - blue: $gfJaN$restructure.uint8, - green: $gfJaN$restructure.uint8, - red: $gfJaN$restructure.uint8, - alpha: $gfJaN$restructure.uint8 -}); -var $16ca60ecbdee30ea$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - numPaletteEntries: $gfJaN$restructure.uint16, - numPalettes: $gfJaN$restructure.uint16, - numColorRecords: $gfJaN$restructure.uint16, - colorRecords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($16ca60ecbdee30ea$var$ColorRecord, 'numColorRecords')), - colorRecordIndices: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPalettes') - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numPalettes')), - offsetPaletteLabelArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPaletteEntries')) - } -}); - - - - - -let $7327e41706f9d5c7$var$BaseCoord = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coordinate: $gfJaN$restructure.int16 // X or Y value, in design units - }, - 2: { - coordinate: $gfJaN$restructure.int16, - referenceGlyph: $gfJaN$restructure.uint16, - baseCoordPoint: $gfJaN$restructure.uint16 // Index of contour point on the referenceGlyph - }, - 3: { - coordinate: $gfJaN$restructure.int16, - deviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) // Device table for X or Y value - } -}); -let $7327e41706f9d5c7$var$BaseValues = new $gfJaN$restructure.Struct({ - defaultIndex: $gfJaN$restructure.uint16, - baseCoordCount: $gfJaN$restructure.uint16, - baseCoords: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), 'baseCoordCount') -}); -let $7327e41706f9d5c7$var$FeatMinMaxRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - minCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }), - maxCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }) // May be NULL -}); -let $7327e41706f9d5c7$var$MinMax = new $gfJaN$restructure.Struct({ - minCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - maxCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - featMinMaxCount: $gfJaN$restructure.uint16, - featMinMaxRecords: new $gfJaN$restructure.Array($7327e41706f9d5c7$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); -let $7327e41706f9d5c7$var$BaseLangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - minMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$MinMax, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScript = new $gfJaN$restructure.Struct({ - baseValues: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseValues), - defaultMinMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$MinMax), - baseLangSysCount: $gfJaN$restructure.uint16, - baseLangSysRecords: new $gfJaN$restructure.Array($7327e41706f9d5c7$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); -let $7327e41706f9d5c7$var$BaseScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseScript, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScriptList = new $gfJaN$restructure.Array($7327e41706f9d5c7$var$BaseScriptRecord, $gfJaN$restructure.uint16); -// Array of 4-byte baseline identification tags-must be in alphabetical order -let $7327e41706f9d5c7$var$BaseTagList = new $gfJaN$restructure.Array(new $gfJaN$restructure.String(4), $gfJaN$restructure.uint16); -let $7327e41706f9d5c7$var$Axis = new $gfJaN$restructure.Struct({ - baseTagList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseTagList), - baseScriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseScriptList) -}); -var $7327e41706f9d5c7$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - horizAxis: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$Axis), - vertAxis: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$Axis) // May be NULL - }, - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $7e48bbe9e5345664$var$AttachPoint = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $7e48bbe9e5345664$var$AttachList = new $gfJaN$restructure.Struct({ - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $gfJaN$restructure.uint16, - attachPoints: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$AttachPoint), 'glyphCount') -}); -let $7e48bbe9e5345664$var$CaretValue = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coordinate: $gfJaN$restructure.int16 - }, - 2: { - caretValuePoint: $gfJaN$restructure.uint16 - }, - 3: { - coordinate: $gfJaN$restructure.int16, - deviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $7e48bbe9e5345664$var$LigGlyph = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$CaretValue), $gfJaN$restructure.uint16); -let $7e48bbe9e5345664$var$LigCaretList = new $gfJaN$restructure.Struct({ - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligGlyphCount: $gfJaN$restructure.uint16, - ligGlyphs: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$LigGlyph), 'ligGlyphCount') -}); -let $7e48bbe9e5345664$var$MarkGlyphSetsDef = new $gfJaN$restructure.Struct({ - markSetTableFormat: $gfJaN$restructure.uint16, - markSetCount: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'markSetCount') -}); -var $7e48bbe9e5345664$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - glyphClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - attachList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$AttachList), - ligCaretList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$LigCaretList), - markAttachClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)) - }, - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef), - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $b687332511a4da75$var$ValueFormat = new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'xPlacement', - 'yPlacement', - 'xAdvance', - 'yAdvance', - 'xPlaDevice', - 'yPlaDevice', - 'xAdvDevice', - 'yAdvDevice' -]); -let $b687332511a4da75$var$types = { - xPlacement: $gfJaN$restructure.int16, - yPlacement: $gfJaN$restructure.int16, - xAdvance: $gfJaN$restructure.int16, - yAdvance: $gfJaN$restructure.int16, - xPlaDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yPlaDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - xAdvDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yAdvDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }) -}; -class $b687332511a4da75$var$ValueRecord { - buildStruct(parent) { - let struct = parent; - while(!struct[this.key] && struct.parent)struct = struct.parent; - if (!struct[this.key]) return; - let fields = {}; - fields.rel = ()=>struct._startOffset; - let format = struct[this.key]; - for(let key in format)if (format[key]) fields[key] = $b687332511a4da75$var$types[key]; - return new $gfJaN$restructure.Struct(fields); - } - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } - constructor(key = 'valueFormat'){ - this.key = key; - } -} -let $b687332511a4da75$var$PairValueRecord = new $gfJaN$restructure.Struct({ - secondGlyph: $gfJaN$restructure.uint16, - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$PairSet = new $gfJaN$restructure.Array($b687332511a4da75$var$PairValueRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$Class2Record = new $gfJaN$restructure.Struct({ - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$Anchor = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16 - }, - 2: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16, - anchorPoint: $gfJaN$restructure.uint16 - }, - 3: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16, - xDeviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)), - yDeviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $b687332511a4da75$var$EntryExitRecord = new $gfJaN$restructure.Struct({ - entryAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }), - exitAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkRecord = new $gfJaN$restructure.Struct({ - class: $gfJaN$restructure.uint16, - markAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkArray = new $gfJaN$restructure.Array($b687332511a4da75$var$MarkRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$BaseRecord = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.classCount); -let $b687332511a4da75$var$BaseArray = new $gfJaN$restructure.Array($b687332511a4da75$var$BaseRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$ComponentRecord = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.parent.classCount); -let $b687332511a4da75$var$LigatureAttach = new $gfJaN$restructure.Array($b687332511a4da75$var$ComponentRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$LigatureArray = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$LigatureAttach), $gfJaN$restructure.uint16); -let $b687332511a4da75$export$73a8cfb19cd43a0f = new $gfJaN$restructure.VersionedStruct('lookupType', { - 1: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - value: new $b687332511a4da75$var$ValueRecord() - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - valueCount: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.LazyArray(new $b687332511a4da75$var$ValueRecord(), 'valueCount') - } - }), - 2: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - pairSetCount: $gfJaN$restructure.uint16, - pairSets: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$PairSet), 'pairSetCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - classDef1: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - classDef2: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - class1Count: $gfJaN$restructure.uint16, - class2Count: $gfJaN$restructure.uint16, - classRecords: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.LazyArray($b687332511a4da75$var$Class2Record, 'class2Count'), 'class1Count') - } - }), - 3: { - format: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - entryExitCount: $gfJaN$restructure.uint16, - entryExitRecords: new $gfJaN$restructure.Array($b687332511a4da75$var$EntryExitRecord, 'entryExitCount') - }, - 4: { - format: $gfJaN$restructure.uint16, - markCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - baseCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - markArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - baseArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 5: { - format: $gfJaN$restructure.uint16, - markCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligatureCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - markArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - ligatureArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$LigatureArray) - }, - 6: { - format: $gfJaN$restructure.uint16, - mark1Coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - mark2Coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - mark1Array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - mark2Array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 7: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 8: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 9: { - posFormat: $gfJaN$restructure.uint16, - lookupType: $gfJaN$restructure.uint16, - extension: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, null) - } -}); -// Fix circular reference -$b687332511a4da75$export$73a8cfb19cd43a0f.versions[9].extension.type = $b687332511a4da75$export$73a8cfb19cd43a0f; -var $b687332511a4da75$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - scriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($b687332511a4da75$export$73a8cfb19cd43a0f)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $99ccad60b96f92fb$var$Sequence = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $99ccad60b96f92fb$var$AlternateSet = $99ccad60b96f92fb$var$Sequence; -let $99ccad60b96f92fb$var$Ligature = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - compCount: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.compCount - 1) -}); -let $99ccad60b96f92fb$var$LigatureSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$Ligature), $gfJaN$restructure.uint16); -let $99ccad60b96f92fb$var$GSUBLookup = new $gfJaN$restructure.VersionedStruct('lookupType', { - 1: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - deltaGlyphID: $gfJaN$restructure.int16 - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $gfJaN$restructure.uint16, - substitute: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'glyphCount') - } - }), - 2: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - sequences: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$Sequence), 'count') - }, - 3: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - alternateSet: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$AlternateSet), 'count') - }, - 4: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - ligatureSets: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$LigatureSet), 'count') - }, - 5: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 6: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 7: { - substFormat: $gfJaN$restructure.uint16, - lookupType: $gfJaN$restructure.uint16, - extension: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, null) - }, - 8: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - backtrackCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'backtrackGlyphCount'), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookaheadCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'lookaheadGlyphCount'), - glyphCount: $gfJaN$restructure.uint16, - substitutes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - } -}); -// Fix circular reference -$99ccad60b96f92fb$var$GSUBLookup.versions[7].extension.type = $99ccad60b96f92fb$var$GSUBLookup; -var $99ccad60b96f92fb$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - scriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($99ccad60b96f92fb$var$GSUBLookup)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $573d5042c76c4940$var$JstfGSUBModList = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $573d5042c76c4940$var$JstfPriority = new $gfJaN$restructure.Struct({ - shrinkageEnableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageEnableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageJstfMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))), - extensionEnableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionEnableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionJstfMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))) -}); -let $573d5042c76c4940$var$JstfLangSys = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfPriority), $gfJaN$restructure.uint16); -let $573d5042c76c4940$var$JstfLangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - jstfLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfLangSys) -}); -let $573d5042c76c4940$var$JstfScript = new $gfJaN$restructure.Struct({ - extenderGlyphs: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16)), - defaultLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfLangSys), - langSysCount: $gfJaN$restructure.uint16, - langSysRecords: new $gfJaN$restructure.Array($573d5042c76c4940$var$JstfLangSysRecord, 'langSysCount') -}); -let $573d5042c76c4940$var$JstfScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfScript, { - type: 'parent' - }) -}); -var $573d5042c76c4940$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - scriptCount: $gfJaN$restructure.uint16, - scriptList: new $gfJaN$restructure.Array($573d5042c76c4940$var$JstfScriptRecord, 'scriptCount') -}); - - - - -// TODO: add this to restructure -class $a5875b80d6087f61$var$VariableSizeNumber { - decode(stream, parent) { - switch(this.size(0, parent)){ - case 1: - return stream.readUInt8(); - case 2: - return stream.readUInt16BE(); - case 3: - return stream.readUInt24BE(); - case 4: - return stream.readUInt32BE(); - } - } - size(val, parent) { - return (0, $gfJaN$restructure.resolveLength)(this._size, null, parent); - } - constructor(size){ - this._size = size; - } -} -let $a5875b80d6087f61$var$MapDataEntry = new $gfJaN$restructure.Struct({ - entry: new $a5875b80d6087f61$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1, - innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 -}); -let $a5875b80d6087f61$var$DeltaSetIndexMap = new $gfJaN$restructure.Struct({ - entryFormat: $gfJaN$restructure.uint16, - mapCount: $gfJaN$restructure.uint16, - mapData: new $gfJaN$restructure.Array($a5875b80d6087f61$var$MapDataEntry, 'mapCount') -}); -var $a5875b80d6087f61$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)), - advanceWidthMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - LSBMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - RSBMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap) -}); - - - -let $4423bc1ac09bbbd1$var$Signature = new $gfJaN$restructure.Struct({ - format: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - offset: $gfJaN$restructure.uint32 -}); -let $4423bc1ac09bbbd1$var$SignatureBlock = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16, 2), - cbSignature: $gfJaN$restructure.uint32, - signature: new $gfJaN$restructure.Buffer('cbSignature') -}); -var $4423bc1ac09bbbd1$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - ulVersion: $gfJaN$restructure.uint32, - usNumSigs: $gfJaN$restructure.uint16, - usFlag: $gfJaN$restructure.uint16, - signatures: new $gfJaN$restructure.Array($4423bc1ac09bbbd1$var$Signature, 'usNumSigs'), - signatureBlocks: new $gfJaN$restructure.Array($4423bc1ac09bbbd1$var$SignatureBlock, 'usNumSigs') -}); - - - -let $7b50e3f8d83263de$var$GaspRange = new $gfJaN$restructure.Struct({ - rangeMaxPPEM: $gfJaN$restructure.uint16, - rangeGaspBehavior: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'grayscale', - 'gridfit', - 'symmetricSmoothing', - 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); -var $7b50e3f8d83263de$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRanges: $gfJaN$restructure.uint16, - gaspRanges: new $gfJaN$restructure.Array($7b50e3f8d83263de$var$GaspRange, 'numRanges') // Sorted by ppem -}); - - - -let $7bf92ec372cd2307$var$DeviceRecord = new $gfJaN$restructure.Struct({ - pixelSize: $gfJaN$restructure.uint8, - maximumWidth: $gfJaN$restructure.uint8, - widths: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.parent.parent.maxp.numGlyphs) -}); -var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -$7bf92ec372cd2307$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRecords: $gfJaN$restructure.int16, - sizeDeviceRecord: $gfJaN$restructure.int32, - records: new $gfJaN$restructure.Array($7bf92ec372cd2307$var$DeviceRecord, 'numRecords') -}); - - - -let $a3f544bcf76542d1$var$KernPair = new $gfJaN$restructure.Struct({ - left: $gfJaN$restructure.uint16, - right: $gfJaN$restructure.uint16, - value: $gfJaN$restructure.int16 -}); -let $a3f544bcf76542d1$var$ClassTable = new $gfJaN$restructure.Struct({ - firstGlyph: $gfJaN$restructure.uint16, - nGlyphs: $gfJaN$restructure.uint16, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'nGlyphs'), - max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) -}); -let $a3f544bcf76542d1$var$Kern2Array = new $gfJaN$restructure.Struct({ - off: (t)=>t._startOffset - t.parent.parent._startOffset, - len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2), - values: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, 'len') -}); -let $a3f544bcf76542d1$var$KernSubtable = new $gfJaN$restructure.VersionedStruct('format', { - 0: { - nPairs: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - pairs: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernPair, 'nPairs') - }, - 2: { - rowWidth: $gfJaN$restructure.uint16, - leftTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - rightTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$Kern2Array, { - type: 'parent' - }) - }, - 3: { - glyphCount: $gfJaN$restructure.uint16, - kernValueCount: $gfJaN$restructure.uint8, - leftClassCount: $gfJaN$restructure.uint8, - rightClassCount: $gfJaN$restructure.uint8, - flags: $gfJaN$restructure.uint8, - kernValue: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 'kernValueCount'), - leftClass: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'glyphCount'), - rightClass: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'glyphCount'), - kernIndex: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.leftClassCount * t.rightClassCount) - } -}); -let $a3f544bcf76542d1$var$KernTable = new $gfJaN$restructure.VersionedStruct('version', { - 0: { - subVersion: $gfJaN$restructure.uint16, - length: $gfJaN$restructure.uint16, - format: $gfJaN$restructure.uint8, - coverage: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'horizontal', - 'minimum', - 'crossStream', - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) - }, - 1: { - length: $gfJaN$restructure.uint32, - coverage: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - null, - null, - null, - null, - null, - 'variation', - 'crossStream', - 'vertical' // Set if table has vertical kerning values - ]), - format: $gfJaN$restructure.uint8, - tupleIndex: $gfJaN$restructure.uint16, - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) - } -}); -var $a3f544bcf76542d1$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - nTables: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - }, - 1: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - nTables: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - } -}); - - - -var // Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -$86687befb45925d0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numGlyphs: $gfJaN$restructure.uint16, - yPels: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'numGlyphs') -}); - - - -var // PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -$91429006e51e0fe8$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - fontNumber: $gfJaN$restructure.uint32, - pitch: $gfJaN$restructure.uint16, - xHeight: $gfJaN$restructure.uint16, - style: $gfJaN$restructure.uint16, - typeFamily: $gfJaN$restructure.uint16, - capHeight: $gfJaN$restructure.uint16, - symbolSet: $gfJaN$restructure.uint16, - typeface: new $gfJaN$restructure.String(16), - characterComplement: new $gfJaN$restructure.String(8), - fileName: new $gfJaN$restructure.String(6), - strokeWeight: new $gfJaN$restructure.String(1), - widthType: new $gfJaN$restructure.String(1), - serifStyle: $gfJaN$restructure.uint8, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8) -}); - - - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. -let $627850fc9deed59a$var$Ratio = new $gfJaN$restructure.Struct({ - bCharSet: $gfJaN$restructure.uint8, - xRatio: $gfJaN$restructure.uint8, - yStartRatio: $gfJaN$restructure.uint8, - yEndRatio: $gfJaN$restructure.uint8 // Ending y-Ratio value -}); -let $627850fc9deed59a$var$vTable = new $gfJaN$restructure.Struct({ - yPelHeight: $gfJaN$restructure.uint16, - yMax: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16 // Minimum value (in pels) for this yPelHeight -}); -let $627850fc9deed59a$var$VdmxGroup = new $gfJaN$restructure.Struct({ - recs: $gfJaN$restructure.uint16, - startsz: $gfJaN$restructure.uint8, - endsz: $gfJaN$restructure.uint8, - entries: new $gfJaN$restructure.Array($627850fc9deed59a$var$vTable, 'recs') // The VDMX records -}); -var $627850fc9deed59a$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRecs: $gfJaN$restructure.uint16, - numRatios: $gfJaN$restructure.uint16, - ratioRanges: new $gfJaN$restructure.Array($627850fc9deed59a$var$Ratio, 'numRatios'), - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numRatios'), - groups: new $gfJaN$restructure.Array($627850fc9deed59a$var$VdmxGroup, 'numRecs') // The actual VDMX groupings -}); - - - -var // Vertical Header Table -$65c33f5f068fc77f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - ascent: $gfJaN$restructure.int16, - descent: $gfJaN$restructure.int16, - lineGap: $gfJaN$restructure.int16, - advanceHeightMax: $gfJaN$restructure.int16, - minTopSideBearing: $gfJaN$restructure.int16, - minBottomSideBearing: $gfJaN$restructure.int16, - yMaxExtent: $gfJaN$restructure.int16, - caretSlopeRise: $gfJaN$restructure.int16, - caretSlopeRun: $gfJaN$restructure.int16, - caretOffset: $gfJaN$restructure.int16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.int16, 4), - metricDataFormat: $gfJaN$restructure.int16, - numberOfMetrics: $gfJaN$restructure.uint16 // Number of advance heights in the Vertical Metrics table -}); - - - -let $597d739523b65bb3$var$VmtxEntry = new $gfJaN$restructure.Struct({ - advance: $gfJaN$restructure.uint16, - bearing: $gfJaN$restructure.int16 // The top sidebearing of the glyph -}); -var // Vertical Metrics Table -$597d739523b65bb3$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - metrics: new $gfJaN$restructure.LazyArray($597d739523b65bb3$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics), - bearings: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); - - - -let $35aa0c87d9c3d3a0$var$shortFrac = new $gfJaN$restructure.Fixed(16, 'BE', 14); -let $35aa0c87d9c3d3a0$var$Correspondence = new $gfJaN$restructure.Struct({ - fromCoord: $35aa0c87d9c3d3a0$var$shortFrac, - toCoord: $35aa0c87d9c3d3a0$var$shortFrac -}); -let $35aa0c87d9c3d3a0$var$Segment = new $gfJaN$restructure.Struct({ - pairCount: $gfJaN$restructure.uint16, - correspondence: new $gfJaN$restructure.Array($35aa0c87d9c3d3a0$var$Correspondence, 'pairCount') -}); -var $35aa0c87d9c3d3a0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - axisCount: $gfJaN$restructure.uint32, - segment: new $gfJaN$restructure.Array($35aa0c87d9c3d3a0$var$Segment, 'axisCount') -}); - - - - -class $22801616bd931ca3$var$UnboundedArrayAccessor { - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - return this._items[index]; - } - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } - constructor(type, stream, parent){ - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } -} -class $22801616bd931ca3$export$c5af1eebc882e39a extends $gfJaN$restructure.Array { - decode(stream, parent) { - return new $22801616bd931ca3$var$UnboundedArrayAccessor(this.type, stream, parent); - } - constructor(type){ - super(type, 0); - } -} -let $22801616bd931ca3$export$8351f8c2ae2f103c = function(ValueType = $gfJaN$restructure.uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - constructor(type){ - this.type = type; - } - } - ValueType = new Shadow(ValueType); - let BinarySearchHeader = new $gfJaN$restructure.Struct({ - unitSize: $gfJaN$restructure.uint16, - nUnits: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16 - }); - let LookupSegmentSingle = new $gfJaN$restructure.Struct({ - lastGlyph: $gfJaN$restructure.uint16, - firstGlyph: $gfJaN$restructure.uint16, - value: ValueType - }); - let LookupSegmentArray = new $gfJaN$restructure.Struct({ - lastGlyph: $gfJaN$restructure.uint16, - firstGlyph: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1), { - type: 'parent' - }) - }); - let LookupSingle = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - value: ValueType - }); - return new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - values: new $22801616bd931ca3$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: $gfJaN$restructure.uint16, - count: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Array(ValueType, 'count') - } - }); -}; -function $22801616bd931ca3$export$79f7d93d790934ba(entryData = {}, lookupType = $gfJaN$restructure.uint16) { - let entry = Object.assign({ - newState: $gfJaN$restructure.uint16, - flags: $gfJaN$restructure.uint16 - }, entryData); - let Entry = new $gfJaN$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.nClasses)); - let StateHeader = new $gfJaN$restructure.Struct({ - nClasses: $gfJaN$restructure.uint32, - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $22801616bd931ca3$export$8351f8c2ae2f103c(lookupType)), - stateArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, StateArray), - entryTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader; -} -function $22801616bd931ca3$export$105027425199cc51(entryData = {}, lookupType = $gfJaN$restructure.uint16) { - let ClassLookupTable = new $gfJaN$restructure.Struct({ - version () { - return 8; - }, - firstGlyph: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16) - }); - let entry = Object.assign({ - newStateOffset: $gfJaN$restructure.uint16, - // convert offset to stateArray index - newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: $gfJaN$restructure.uint16 - }, entryData); - let Entry = new $gfJaN$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.nClasses)); - let StateHeader1 = new $gfJaN$restructure.Struct({ - nClasses: $gfJaN$restructure.uint16, - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, ClassLookupTable), - stateArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, StateArray), - entryTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader1; -} - - -let $3a5ca96d3e3aaf20$var$BslnSubtable = new $gfJaN$restructure.VersionedStruct('format', { - 0: { - deltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 32) - }, - 1: { - deltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($gfJaN$restructure.uint16) - }, - 2: { - standardGlyph: $gfJaN$restructure.uint16, - controlPoints: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 32) - }, - 3: { - standardGlyph: $gfJaN$restructure.uint16, - controlPoints: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($gfJaN$restructure.uint16) - } -}); -var $3a5ca96d3e3aaf20$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - format: $gfJaN$restructure.uint16, - defaultBaseline: $gfJaN$restructure.uint16, - subtable: $3a5ca96d3e3aaf20$var$BslnSubtable -}); - - - -let $8d4241d96b2b0589$var$Setting = new $gfJaN$restructure.Struct({ - setting: $gfJaN$restructure.uint16, - nameIndex: $gfJaN$restructure.int16, - name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -let $8d4241d96b2b0589$var$FeatureName = new $gfJaN$restructure.Struct({ - feature: $gfJaN$restructure.uint16, - nSettings: $gfJaN$restructure.uint16, - settingTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($8d4241d96b2b0589$var$Setting, 'nSettings'), { - type: 'parent' - }), - featureFlags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - null, - null, - null, - null, - null, - null, - 'hasDefault', - 'exclusive' - ]), - defaultSetting: $gfJaN$restructure.uint8, - nameIndex: $gfJaN$restructure.int16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -var $8d4241d96b2b0589$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - featureNameCount: $gfJaN$restructure.uint16, - reserved1: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - reserved2: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint32), - featureNames: new $gfJaN$restructure.Array($8d4241d96b2b0589$var$FeatureName, 'featureNameCount') -}); - - - -let $a79cd5132b1cf476$var$Axis = new $gfJaN$restructure.Struct({ - axisTag: new $gfJaN$restructure.String(4), - minValue: $gfJaN$restructure.fixed32, - defaultValue: $gfJaN$restructure.fixed32, - maxValue: $gfJaN$restructure.fixed32, - flags: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] -}); -let $a79cd5132b1cf476$var$Instance = new $gfJaN$restructure.Struct({ - nameID: $gfJaN$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID], - flags: $gfJaN$restructure.uint16, - coord: new $gfJaN$restructure.Array($gfJaN$restructure.fixed32, (t)=>t.parent.axisCount), - postscriptNameID: new $gfJaN$restructure.Optional($gfJaN$restructure.uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0) -}); -var $a79cd5132b1cf476$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - offsetToData: $gfJaN$restructure.uint16, - countSizePairs: $gfJaN$restructure.uint16, - axisCount: $gfJaN$restructure.uint16, - axisSize: $gfJaN$restructure.uint16, - instanceCount: $gfJaN$restructure.uint16, - instanceSize: $gfJaN$restructure.uint16, - axis: new $gfJaN$restructure.Array($a79cd5132b1cf476$var$Axis, 'axisCount'), - instance: new $gfJaN$restructure.Array($a79cd5132b1cf476$var$Instance, 'instanceCount') -}); - - - -let $3f36f1a5e6989457$var$shortFrac = new $gfJaN$restructure.Fixed(16, 'BE', 14); -class $3f36f1a5e6989457$var$Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; - } -} -let $3f36f1a5e6989457$var$gvar = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - axisCount: $gfJaN$restructure.uint16, - globalCoordCount: $gfJaN$restructure.uint16, - globalCoords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array(new $gfJaN$restructure.Array($3f36f1a5e6989457$var$shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: $gfJaN$restructure.uint16, - flags: $gfJaN$restructure.uint16, - offsetToData: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($3f36f1a5e6989457$var$Offset, 'void', { - relativeTo: (ctx)=>ctx.offsetToData, - allowNull: false - }), (t)=>t.glyphCount + 1) -}); -var $3f36f1a5e6989457$export$2e2bcd8739ae039 = $3f36f1a5e6989457$var$gvar; - - - - -let $0bd8fe7a6d1d9fb4$var$ClassTable = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - coverage: $gfJaN$restructure.uint16, - subFeatureFlags: $gfJaN$restructure.uint32, - stateTable: new (0, $22801616bd931ca3$export$105027425199cc51) -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaRecord = new $gfJaN$restructure.Struct({ - justClass: $gfJaN$restructure.uint32, - beforeGrowLimit: $gfJaN$restructure.fixed32, - beforeShrinkLimit: $gfJaN$restructure.fixed32, - afterGrowLimit: $gfJaN$restructure.fixed32, - afterShrinkLimit: $gfJaN$restructure.fixed32, - growFlags: $gfJaN$restructure.uint16, - shrinkFlags: $gfJaN$restructure.uint16 -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster = new $gfJaN$restructure.Array($0bd8fe7a6d1d9fb4$var$WidthDeltaRecord, $gfJaN$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$ActionData = new $gfJaN$restructure.VersionedStruct('actionType', { - 0: { - lowerLimit: $gfJaN$restructure.fixed32, - upperLimit: $gfJaN$restructure.fixed32, - order: $gfJaN$restructure.uint16, - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16) - }, - 1: { - addGlyph: $gfJaN$restructure.uint16 - }, - 2: { - substThreshold: $gfJaN$restructure.fixed32, - addGlyph: $gfJaN$restructure.uint16, - substGlyph: $gfJaN$restructure.uint16 - }, - 3: {}, - 4: { - variationAxis: $gfJaN$restructure.uint32, - minimumLimit: $gfJaN$restructure.fixed32, - noStretchValue: $gfJaN$restructure.fixed32, - maximumLimit: $gfJaN$restructure.fixed32 - }, - 5: { - flags: $gfJaN$restructure.uint16, - glyph: $gfJaN$restructure.uint16 - } -}); -let $0bd8fe7a6d1d9fb4$var$Action = new $gfJaN$restructure.Struct({ - actionClass: $gfJaN$restructure.uint16, - actionType: $gfJaN$restructure.uint16, - actionLength: $gfJaN$restructure.uint32, - actionData: $0bd8fe7a6d1d9fb4$var$ActionData, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.actionLength - t._currentOffset) -}); -let $0bd8fe7a6d1d9fb4$var$PostcompensationAction = new $gfJaN$restructure.Array($0bd8fe7a6d1d9fb4$var$Action, $gfJaN$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$PostCompensationTable = new $gfJaN$restructure.Struct({ - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostcompensationAction)) -}); -let $0bd8fe7a6d1d9fb4$var$JustificationTable = new $gfJaN$restructure.Struct({ - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$ClassTable, { - type: 'parent' - }), - wdcOffset: $gfJaN$restructure.uint16, - postCompensationTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostCompensationTable, { - type: 'parent' - }), - widthDeltaClusters: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster, { - type: 'parent', - relativeTo: (ctx)=>ctx.wdcOffset - })) -}); -var $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - format: $gfJaN$restructure.uint16, - horizontal: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable), - vertical: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable) -}); - - - - -let $ef40c6dc80fd50a2$var$LigatureData = { - action: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$ContextualData = { - markIndex: $gfJaN$restructure.uint16, - currentIndex: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$InsertionData = { - currentInsertIndex: $gfJaN$restructure.uint16, - markedInsertIndex: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$SubstitutionTable = new $gfJaN$restructure.Struct({ - items: new (0, $22801616bd931ca3$export$c5af1eebc882e39a)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$8351f8c2ae2f103c))) -}); -let $ef40c6dc80fd50a2$var$SubtableData = new $gfJaN$restructure.VersionedStruct('type', { - 0: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba) - }, - 1: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$ContextualData), - substitutionTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $ef40c6dc80fd50a2$var$SubstitutionTable) - }, - 2: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$LigatureData), - ligatureActions: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint32)), - components: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)), - ligatureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)) - }, - 4: { - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c) - }, - 5: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$InsertionData), - insertionActions: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)) - } -}); -let $ef40c6dc80fd50a2$var$Subtable = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint32, - coverage: $gfJaN$restructure.uint24, - type: $gfJaN$restructure.uint8, - subFeatureFlags: $gfJaN$restructure.uint32, - table: $ef40c6dc80fd50a2$var$SubtableData, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) -}); -let $ef40c6dc80fd50a2$var$FeatureEntry = new $gfJaN$restructure.Struct({ - featureType: $gfJaN$restructure.uint16, - featureSetting: $gfJaN$restructure.uint16, - enableFlags: $gfJaN$restructure.uint32, - disableFlags: $gfJaN$restructure.uint32 -}); -let $ef40c6dc80fd50a2$var$MorxChain = new $gfJaN$restructure.Struct({ - defaultFlags: $gfJaN$restructure.uint32, - chainLength: $gfJaN$restructure.uint32, - nFeatureEntries: $gfJaN$restructure.uint32, - nSubtables: $gfJaN$restructure.uint32, - features: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$FeatureEntry, 'nFeatureEntries'), - subtables: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$Subtable, 'nSubtables') -}); -var $ef40c6dc80fd50a2$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - unused: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - nChains: $gfJaN$restructure.uint32, - chains: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$MorxChain, 'nChains') -}); - - - - -let $ab24dea08b58a7cc$var$OpticalBounds = new $gfJaN$restructure.Struct({ - left: $gfJaN$restructure.int16, - top: $gfJaN$restructure.int16, - right: $gfJaN$restructure.int16, - bottom: $gfJaN$restructure.int16 -}); -var $ab24dea08b58a7cc$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - format: $gfJaN$restructure.uint16, - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($ab24dea08b58a7cc$var$OpticalBounds) -}); - - -let $5825c04ce8f7102d$var$tables = {}; -var $5825c04ce8f7102d$export$2e2bcd8739ae039 = $5825c04ce8f7102d$var$tables; -$5825c04ce8f7102d$var$tables.cmap = (0, $e4ae0436c91af89f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.head = (0, $55a60976afb7c261$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hhea = (0, $dde72b7b5b650596$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hmtx = (0, $a7c40184072c9a5b$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.maxp = (0, $521197722369f691$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.name = (0, $51a9f4feb3a3b2b1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['OS/2'] = (0, $114ea85db469b435$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.post = (0, $f93b30299e1ea0f5$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fpgm = (0, $873d79fea57d3161$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.loca = (0, $83c4155666d50c37$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.prep = (0, $b12598db7cdf7042$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['cvt '] = (0, $8fb09b0f473d61a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.glyf = (0, $7707bdf21a3d89cc$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF '] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF2'] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VORG = (0, $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.EBLC = (0, $035bb95c0cdb1f6d$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CBLC = $5825c04ce8f7102d$var$tables.EBLC; -$5825c04ce8f7102d$var$tables.sbix = (0, $73d13900b55a3c0c$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.COLR = (0, $97f6b8be3a347a8f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CPAL = (0, $16ca60ecbdee30ea$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.BASE = (0, $7327e41706f9d5c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GDEF = (0, $7e48bbe9e5345664$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GPOS = (0, $b687332511a4da75$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GSUB = (0, $99ccad60b96f92fb$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.JSTF = (0, $573d5042c76c4940$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.HVAR = (0, $a5875b80d6087f61$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.DSIG = (0, $4423bc1ac09bbbd1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gasp = (0, $7b50e3f8d83263de$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hdmx = (0, $7bf92ec372cd2307$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.kern = (0, $a3f544bcf76542d1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.LTSH = (0, $86687befb45925d0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.PCLT = (0, $91429006e51e0fe8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VDMX = (0, $627850fc9deed59a$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vhea = (0, $65c33f5f068fc77f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vmtx = (0, $597d739523b65bb3$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.avar = (0, $35aa0c87d9c3d3a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.bsln = (0, $3a5ca96d3e3aaf20$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.feat = (0, $8d4241d96b2b0589$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fvar = (0, $a79cd5132b1cf476$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gvar = (0, $3f36f1a5e6989457$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.just = (0, $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.morx = (0, $ef40c6dc80fd50a2$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.opbd = (0, $ab24dea08b58a7cc$export$2e2bcd8739ae039); - - -let $df50e1efe10a1247$var$TableEntry = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - checkSum: $gfJaN$restructure.uint32, - offset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void', { - type: 'global' - }), - length: $gfJaN$restructure.uint32 -}); -let $df50e1efe10a1247$var$Directory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - numTables: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($df50e1efe10a1247$var$TableEntry, 'numTables') -}); -$df50e1efe10a1247$var$Directory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -$df50e1efe10a1247$var$Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for(let tag in this.tables){ - let table = this.tables[tag]; - if (table) tables.push({ - tag: tag, - checkSum: 0, - offset: new $gfJaN$restructure.VoidPointer((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag], table), - length: (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag].size(table) - }); - } - this.tables = tables; - } - this.tag = 'true'; - this.numTables = this.tables.length; - let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; -var $df50e1efe10a1247$export$2e2bcd8739ae039 = $df50e1efe10a1247$var$Directory; - - - - -function $66a5b9fb5318558a$export$2e0ae67339d5f1ac(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while(min <= max){ - let mid = min + max >> 1; - let res = cmp(arr[mid]); - if (res < 0) max = mid - 1; - else if (res > 0) min = mid + 1; - else return mid; - } - return -1; -} -function $66a5b9fb5318558a$export$d02631cccf789723(index, end) { - let range = []; - while(index < end)range.push(index++); - return range; -} -const $66a5b9fb5318558a$export$3d28c1996ced1f14 = new TextDecoder('ascii'); -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const $66a5b9fb5318558a$var$CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const $66a5b9fb5318558a$var$LOOKUP = new Uint8Array(256); -for(let i = 0; i < $66a5b9fb5318558a$var$CHARS.length; i++)$66a5b9fb5318558a$var$LOOKUP[$66a5b9fb5318558a$var$CHARS.charCodeAt(i)] = i; -function $66a5b9fb5318558a$export$94fdf11bafc8de6b(base64) { - let bufferLength = base64.length * 0.75; - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') bufferLength--; - } - let bytes = new Uint8Array(bufferLength); - let p = 0; - for(let i = 0, len = base64.length; i < len; i += 4){ - let encoded1 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i)]; - let encoded2 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 3)]; - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - return bytes; -} - - - - -class $0d6e160064c86e50$export$2e2bcd8739ae039 { - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ - if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; - } - return null; - } - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) codepoint = this.encoding.get(codepoint) || codepoint; - else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) return gid; - } - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return cmap.codeMap.get(codepoint) || 0; - case 4: - { - let min = 0; - let max = cmap.segCount - 1; - while(min <= max){ - let mid = min + max >> 1; - if (codepoint < cmap.startCode.get(mid)) max = mid - 1; - else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; - else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); - else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) gid += cmap.idDelta.get(mid); - } - return gid & 0xffff; - } - } - return 0; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - case 12: - case 13: - { - let min = 0; - let max = cmap.nGroups - 1; - while(min <= max){ - let mid = min + max >> 1; - let group = cmap.groups.get(mid); - if (codepoint < group.startCharCode) max = mid - 1; - else if (codepoint > group.endCharCode) min = mid + 1; - else { - if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); - else return group.glyphID; - } - } - return 0; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) return 0; - let selectors = this.uvs.varSelectors.toArray(); - let i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(selectors, (x)=>variationSelector - x.varSelector); - let sel = selectors[i]; - if (i !== -1 && sel.defaultUVS) i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0); - if (i !== -1 && sel.nonDefaultUVS) { - i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue); - if (i !== -1) return sel.nonDefaultUVS[i].glyphID; - } - return 0; - } - getCharacterSet() { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(0, cmap.codeMap.length); - case 4: - { - let res = []; - let endCodes = cmap.endCode.toArray(); - for(let i = 0; i < endCodes.length; i++){ - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(start, tail)); - } - return res; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - case 12: - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - { - let res = []; - for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); - return res; - } - case 4: - { - let res = []; - for(let i = 0; i < cmap.segCount; i++){ - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - for(var c = start; c <= end; c++){ - let g = 0; - if (rangeOffset === 0) g = c + delta; - else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) g += delta; - } - if (g === gid) res.push(c); - } - } - return res; - } - case 12: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); - return res; - } - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - constructor(cmapTable){ - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [ - 3, - 10 - ], - [ - 0, - 6 - ], - [ - 0, - 4 - ], - // 16-bit subtables - [ - 3, - 1 - ], - [ - 0, - 3 - ], - [ - 0, - 2 - ], - [ - 0, - 1 - ], - [ - 0, - 0 - ] - ]); - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) for (let cmap of cmapTable.tables){ - let encoding = (0, $e2613b812f052cbe$export$badc544e0651b6b1)(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = (0, $e2613b812f052cbe$export$1dceb3c14ed68bee)(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - if (!this.cmap) throw new Error("Could not find a supported cmap table"); - this.uvs = this.findSubtable(cmapTable, [ - [ - 0, - 5 - ] - ]); - if (this.uvs && this.uvs.version !== 14) this.uvs = null; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "getCharacterSet", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "codePointsForGlyph", null); - - - -class $4646d52c2a559cdb$export$2e2bcd8739ae039 { - process(glyphs, positions) { - for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - getKerning(left, right) { - let res = 0; - for (let table of this.kern.tables){ - if (table.coverage.crossStream) continue; - switch(table.version){ - case 0: - if (!table.coverage.horizontal) continue; - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) continue; - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - let val = 0; - let s = table.subtable; - switch(table.format){ - case 0: - let pairIdx = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(s.pairs, function(pair) { - return left - pair.left || right - pair.right; - }); - if (pairIdx >= 0) val = s.pairs[pairIdx].value; - break; - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - else leftOffset = s.array.off; - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) return 0; - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) res = val; - else res += val; - } - return res; - } - constructor(font){ - this.kern = font.kern; - } -} - - - -class $a57a26817cd35108$export$2e2bcd8739ae039 { - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for(let index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.isMark) clusterEnd = index; - else { - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - clusterStart = clusterEnd = index; - } - } - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - return positions; - } - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) // LTR. TODO: RTL support. - baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - // position each of the mark glyphs relative to the base glyph - for(let index = clusterStart + 1; index <= clusterEnd; index++){ - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - // x positioning - switch(combiningClass){ - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - default: - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - // y positioning - switch(combiningClass){ - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - return; - } - getCombiningClass(codePoint) { - let combiningClass = (0, $gfJaN$unicodeproperties.getCombiningClass)(codePoint); - // Thai / Lao need some per-character work - if ((codePoint & -256) === 0x0e00) { - if (combiningClass === 'Not_Reordered') switch(codePoint){ - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - case 0x0ebc: - return 'Below'; - } - else if (codePoint === 0x0e3a) return 'Below_Right'; - } - switch(combiningClass){ - // Hebrew - case 'CCC10': - case 'CCC11': - case 'CCC12': - case 'CCC13': - case 'CCC14': - case 'CCC15': - case 'CCC16': - case 'CCC17': - case 'CCC18': - case 'CCC20': - case 'CCC22': - return 'Below'; - case 'CCC23': - return 'Attached_Above'; - case 'CCC24': - return 'Above_Right'; - case 'CCC25': - case 'CCC19': - return 'Above_Left'; - case 'CCC26': - return 'Above'; - case 'CCC21': - break; - // Arabic and Syriac - case 'CCC27': - case 'CCC28': - case 'CCC30': - case 'CCC31': - case 'CCC33': - case 'CCC34': - case 'CCC35': - case 'CCC36': - return 'Above'; - case 'CCC29': - case 'CCC32': - return 'Below'; - // Thai - case 'CCC103': - return 'Below_Right'; - case 'CCC107': - return 'Above_Right'; - // Lao - case 'CCC118': - return 'Below'; - case 'CCC122': - return 'Above'; - // Tibetan - case 'CCC129': - case 'CCC132': - return 'Below'; - case 'CCC130': - return 'Above'; - } - return combiningClass; - } - constructor(font){ - this.font = font; - } -} - - -/** - * Represents a glyph bounding box - */ class $0e2da1c4ce69e8ad$export$2e2bcd8739ae039 { - /** - * The width of the bounding box - * @type {number} - */ get width() { - return this.maxX - this.minX; - } - /** - * The height of the bounding box - * @type {number} - */ get height() { - return this.maxY - this.minY; - } - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) this.minX = x; - if (x > this.maxX) this.maxX = x; - } - if (Math.abs(y) !== Infinity) { - if (y < this.minY) this.minY = y; - if (y > this.maxY) this.maxY = y; - } - } - copy() { - return new $0e2da1c4ce69e8ad$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); - } - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ - /** - * The minimum X position in the bounding box - * @type {number} - */ this.minX = minX; - /** - * The minimum Y position in the bounding box - * @type {number} - */ this.minY = minY; - /** - * The maxmimum X position in the bounding box - * @type {number} - */ this.maxX = maxX; - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ this.maxY = maxY; - } -} - - - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const $e38a1a895f6aeb54$var$UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: [ - 'bng2', - 'beng' - ], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: [ - 'dev2', - 'deva' - ], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: [ - 'gjr2', - 'gujr' - ], - Gurmukhi: [ - 'gur2', - 'guru' - ], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: [ - 'knd2', - 'knda' - ], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: [ - 'mlm2', - 'mlym' - ], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: [ - 'mym2', - 'mymr' - ], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: [ - 'ory2', - 'orya' - ], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: [ - 'tml2', - 'taml' - ], - Tai_Viet: 'tavt', - Telugu: [ - 'tel2', - 'telu' - ], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; -const $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS = {}; -for(let script in $e38a1a895f6aeb54$var$UNICODE_SCRIPTS){ - let tag = $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) for (let t of tag)$e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[t] = script; - else $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag] = script; -} -function $e38a1a895f6aeb54$export$b32f0b5f69d65e51(script) { - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; -} -function $e38a1a895f6aeb54$export$ce50e82f12a827a4(tag) { - return $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag]; -} -function $e38a1a895f6aeb54$export$e5cb25e204fb8450(string) { - let len = string.length; - let idx = 0; - while(idx < len){ - let code = string.charCodeAt(idx++); - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - let script = (0, $gfJaN$unicodeproperties.getScript)(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -function $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints) { - for(let i = 0; i < codePoints.length; i++){ - let codePoint = codePoints[i]; - let script = (0, $gfJaN$unicodeproperties.getScript)(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -// The scripts in this map are written from right to left -const $e38a1a895f6aeb54$var$RTL = { - arab: true, - hebr: true, - syrc: true, - thaa: true, - cprt: true, - khar: true, - phnx: true, - 'nko ': true, - lydi: true, - avst: true, - armi: true, - phli: true, - prti: true, - sarb: true, - orkh: true, - samr: true, - mand: true, - merc: true, - mero: true, - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, - mend: true, - nbat: true, - narb: true, - palm: true, - phlp: true // Psalter Pahlavi -}; -function $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script) { - if ($e38a1a895f6aeb54$var$RTL[script]) return 'rtl'; - return 'ltr'; -} - - -class $b19c79ec7a94fa39$export$2e2bcd8739ae039 { - /** - * The total advance width of the run. - * @type {number} - */ get advanceWidth() { - let width = 0; - for (let position of this.positions)width += position.xAdvance; - return width; - } - /** - * The total advance height of the run. - * @type {number} - */ get advanceHeight() { - let height = 0; - for (let position of this.positions)height += position.yAdvance; - return height; - } - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ get bbox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let x = 0; - let y = 0; - for(let index = 0; index < this.glyphs.length; index++){ - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - x += p.xAdvance; - y += p.yAdvance; - } - return bbox; - } - constructor(glyphs, features, script, language, direction){ - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ this.glyphs = glyphs; - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ this.positions = null; - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ this.script = script; - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ this.language = language || null; - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ this.features = {}; - // Convert features to an object - if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; - else if (typeof features === 'object') this.features = features; - } -} - - -/** - * Represents positioning information for a glyph in a GlyphRun. - */ class $9195cf1266c12ea5$export$2e2bcd8739ae039 { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ this.xAdvance = xAdvance; - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ this.yAdvance = yAdvance; - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ this.xOffset = xOffset; - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ this.yOffset = yOffset; - } -} - - - -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const $2b7f887ebcb5888a$var$features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; -const $2b7f887ebcb5888a$var$feature = (name, selector)=>[ - $2b7f887ebcb5888a$var$features[name].code, - $2b7f887ebcb5888a$var$features[name][selector] - ]; -const $2b7f887ebcb5888a$var$OTMapping = { - rlig: $2b7f887ebcb5888a$var$feature('ligatures', 'requiredLigatures'), - clig: $2b7f887ebcb5888a$var$feature('ligatures', 'contextualLigatures'), - dlig: $2b7f887ebcb5888a$var$feature('ligatures', 'rareLigatures'), - hlig: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - liga: $2b7f887ebcb5888a$var$feature('ligatures', 'commonLigatures'), - hist: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - smcp: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCasePetiteCaps'), - frac: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - dnom: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - numr: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - afrc: $2b7f887ebcb5888a$var$feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - case: $2b7f887ebcb5888a$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), - ccmp: $2b7f887ebcb5888a$var$feature('unicodeDecomposition', 'canonicalComposition'), - cpct: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - valt: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'swashAlternates'), - cswh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualSwashAlternates'), - curs: $2b7f887ebcb5888a$var$feature('cursiveConnection', 'cursive'), - c2pc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCasePetiteCaps'), - c2sc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCaseSmallCaps'), - init: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordInitialSwashes'), - fin2: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - medi: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - med2: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - fin3: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - fina: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - pkna: $2b7f887ebcb5888a$var$feature('kanaSpacing', 'proportionalKana'), - half: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - halt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altHalfWidthText'), - hkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateHorizKana'), - vkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - ital: $2b7f887ebcb5888a$var$feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: $2b7f887ebcb5888a$var$feature('numberCase', 'upperCaseNumbers'), - onum: $2b7f887ebcb5888a$var$feature('numberCase', 'lowerCaseNumbers'), - mgrk: $2b7f887ebcb5888a$var$feature('mathematicalExtras', 'mathematicalGreek'), - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - calt: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualAlternates'), - vrt2: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - vert: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'monospacedNumbers'), - pnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'proportionalNumbers'), - sups: $2b7f887ebcb5888a$var$feature('verticalPosition', 'superiors'), - subs: $2b7f887ebcb5888a$var$feature('verticalPosition', 'inferiors'), - ordn: $2b7f887ebcb5888a$var$feature('verticalPosition', 'ordinals'), - pwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - hwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - qwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'quarterWidthText'), - twid: $2b7f887ebcb5888a$var$feature('textSpacing', 'thirdWidthText'), - fwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - palt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altProportionalText'), - trad: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalCharacters'), - smpl: $2b7f887ebcb5888a$var$feature('characterShape', 'simplifiedCharacters'), - jp78: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1978Characters'), - jp83: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1983Characters'), - jp90: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1990Characters'), - jp04: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS2004Characters'), - expt: $2b7f887ebcb5888a$var$feature('characterShape', 'expertCharacters'), - hojo: $2b7f887ebcb5888a$var$feature('characterShape', 'hojoCharacters'), - nlck: $2b7f887ebcb5888a$var$feature('characterShape', 'NLCCharacters'), - tnam: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalNamesCharacters'), - ruby: $2b7f887ebcb5888a$var$feature('rubyKana', 'rubyKana'), - titl: $2b7f887ebcb5888a$var$feature('styleOptions', 'titlingCaps'), - zero: $2b7f887ebcb5888a$var$feature('typographicExtras', 'slashedZero'), - ss01: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwenty') -}; -// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose -// Add cv01-cv99 features -for(let i = 1; i <= 99; i++)$2b7f887ebcb5888a$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ - $2b7f887ebcb5888a$var$features.characterAlternatives.code, - i -]; -// create inverse mapping -let $2b7f887ebcb5888a$var$AATMapping = {}; -for(let ot in $2b7f887ebcb5888a$var$OTMapping){ - let aat = $2b7f887ebcb5888a$var$OTMapping[ot]; - if ($2b7f887ebcb5888a$var$AATMapping[aat[0]] == null) $2b7f887ebcb5888a$var$AATMapping[aat[0]] = {}; - $2b7f887ebcb5888a$var$AATMapping[aat[0]][aat[1]] = ot; -} -function $2b7f887ebcb5888a$export$b813f7d2a1677c16(features) { - let res = {}; - for(let k in features){ - let r; - if (r = $2b7f887ebcb5888a$var$OTMapping[k]) { - if (res[r[0]] == null) res[r[0]] = {}; - res[r[0]][r[1]] = features[k]; - } - } - return res; -} -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function $2b7f887ebcb5888a$var$mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) var typeCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type].code; - else var typeCode = type; - if (isNaN(setting)) var settingCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type][setting]; - else var settingCode = setting; - return [ - typeCode, - settingCode - ]; -} -function $2b7f887ebcb5888a$export$bd6df347a4f391c4(features) { - let res = {}; - if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings(features[k]); - if (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]]) res[r] = true; - } - else if (typeof features === 'object') for(let type in features){ - let feature = features[type]; - for(let setting in feature){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings([ - type, - setting - ]); - if (feature[setting] && (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]])) res[r] = true; - } - } - return Object.keys(res); -} - - - - - - - -class $f3d63ae925545400$export$2e2bcd8739ae039 { - lookup(glyph) { - switch(this.table.version){ - case 0: - return this.table.values.getItem(glyph); - case 2: - case 4: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.firstGlyph === 0xffff) return null; - if (glyph < seg.firstGlyph) max = mid - 1; - else if (glyph > seg.lastGlyph) min = mid + 1; - else { - if (this.table.version === 2) return seg.value; - else return seg.values[glyph - seg.firstGlyph]; - } - } - return null; - } - case 6: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.glyph === 0xffff) return null; - if (glyph < seg.glyph) max = mid - 1; - else if (glyph > seg.glyph) min = mid + 1; - else return seg.value; - } - return null; - } - case 8: - return this.table.values[glyph - this.table.firstGlyph]; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - glyphsForValue(classValue) { - let res = []; - switch(this.table.version){ - case 2: - case 4: - for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(segment.firstGlyph, segment.lastGlyph + 1)); - else { - for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); - } - break; - case 6: - for (let segment of this.table.segments)if (segment.value === classValue) res.push(segment.glyph); - break; - case 8: - for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); - break; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - return res; - } - constructor(table){ - this.table = table; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $f3d63ae925545400$export$2e2bcd8739ae039.prototype, "glyphsForValue", null); - - -const $860c6347bb941b91$var$START_OF_TEXT_STATE = 0; -const $860c6347bb941b91$var$START_OF_LINE_STATE = 1; -const $860c6347bb941b91$var$END_OF_TEXT_CLASS = 0; -const $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS = 1; -const $860c6347bb941b91$var$DELETED_GLYPH_CLASS = 2; -const $860c6347bb941b91$var$END_OF_LINE_CLASS = 3; -const $860c6347bb941b91$var$DONT_ADVANCE = 0x4000; -class $860c6347bb941b91$export$2e2bcd8739ae039 { - process(glyphs, reverse, processEntry) { - let currentState = $860c6347bb941b91$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ - let glyph = null; - let classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - if (index === glyphs.length || index === -1) classCode = $860c6347bb941b91$var$END_OF_TEXT_CLASS; - else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) classCode = $860c6347bb941b91$var$DELETED_GLYPH_CLASS; - else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - } - } - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - if (classCode !== $860c6347bb941b91$var$END_OF_TEXT_CLASS && classCode !== $860c6347bb941b91$var$DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & $860c6347bb941b91$var$DONT_ADVANCE); - } - currentState = entry.newState; - if (shouldAdvance) index += dir; - } - return glyphs; - } - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) return; - visited.add(state); - let { nClasses: nClasses, stateArray: stateArray, entryTable: entryTable } = this.stateTable; - let row = stateArray.getItem(state); - // Skip predefined classes - for(let classCode = 4; classCode < nClasses; classCode++){ - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)){ - if (opts.enter) opts.enter(glyph, entry); - if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); - if (opts.exit) opts.exit(glyph, entry); - } - } - } - constructor(stateTable){ - this.stateTable = stateTable; - this.lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(stateTable.classTable); - } -} - - - - -// indic replacement flags -const $99be642f82069918$var$MARK_FIRST = 0x8000; -const $99be642f82069918$var$MARK_LAST = 0x2000; -const $99be642f82069918$var$VERB = 0x000F; -// contextual substitution and glyph insertion flag -const $99be642f82069918$var$SET_MARK = 0x8000; -// ligature entry flags -const $99be642f82069918$var$SET_COMPONENT = 0x8000; -const $99be642f82069918$var$PERFORM_ACTION = 0x2000; -// ligature action masks -const $99be642f82069918$var$LAST_MASK = 0x80000000; -const $99be642f82069918$var$STORE_MASK = 0x40000000; -const $99be642f82069918$var$OFFSET_MASK = 0x3FFFFFFF; -const $99be642f82069918$var$VERTICAL_ONLY = 0x800000; -const $99be642f82069918$var$REVERSE_DIRECTION = 0x400000; -const $99be642f82069918$var$HORIZONTAL_AND_VERTICAL = 0x200000; -// glyph insertion flags -const $99be642f82069918$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; -const $99be642f82069918$var$MARKED_IS_KASHIDA_LIKE = 0x1000; -const $99be642f82069918$var$CURRENT_INSERT_BEFORE = 0x0800; -const $99be642f82069918$var$MARKED_INSERT_BEFORE = 0x0400; -const $99be642f82069918$var$CURRENT_INSERT_COUNT = 0x03E0; -const $99be642f82069918$var$MARKED_INSERT_COUNT = 0x001F; -class $99be642f82069918$export$2e2bcd8739ae039 { - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - // enable/disable the requested features - for (let feature of chain.features){ - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); - } - // remove deleted glyphs - let index = glyphs.length - 1; - while(index >= 0){ - if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); - index--; - } - return glyphs; - } - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let reverse = !!(this.subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - getStateMachine(subtable) { - return new (0, $860c6347bb941b91$export$2e2bcd8739ae039)(subtable.table.stateTable); - } - getProcessor() { - switch(this.subtable.type){ - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - processIndicRearragement(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$MARK_FIRST) this.firstGlyph = index; - if (entry.flags & $99be642f82069918$var$MARK_LAST) this.lastGlyph = index; - $99be642f82069918$var$reorderGlyphs(this.glyphs, entry.flags & $99be642f82069918$var$VERB, this.firstGlyph, this.lastGlyph); - } - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedGlyph = index; - } - processLigature(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_COMPONENT) this.ligatureStack.push(index); - if (entry.flags & $99be642f82069918$var$PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - while(!last){ - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - let action = actions.getItem(actionIndex++); - last = !!(action & $99be642f82069918$var$LAST_MASK); - let store = !!(action & $99be642f82069918$var$STORE_MASK); - let offset = (action & $99be642f82069918$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - let component = components.getItem(offset); - ligatureIndex += component; - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(subtable.table.lookupTable); - for(index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while(count--){ - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - if (!isBefore) glyphIndex++; - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedIndex = index; - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ - feature.featureType, - feature.featureSetting - ]); - return features; - } - generateInputs(gid) { - if (!this.inputCache) this.generateInputCache(); - return this.inputCache[gid] || []; - } - generateInputCache() { - this.inputCache = {}; - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); - } - } - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) return; - let reverse = !!(subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - if (reverse) throw new Error('Reverse subtable, not supported.'); - this.subtable = subtable; - this.ligatureStack = []; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let input = []; - let stack = []; - this.glyphs = []; - stateMachine.traverse({ - enter: (glyph, entry)=>{ - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - if (count === 1) { - let result = input.map((g)=>g.id); - let cache = this.inputCache[found]; - if (cache) cache.push(result); - else this.inputCache[found] = [ - result - ]; - } - }, - exit: ()=>{ - ({ glyphs: this.glyphs, ligatureStack: this.ligatureStack } = stack.pop()); - input.pop(); - } - }); - } - constructor(font){ - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $99be642f82069918$export$2e2bcd8739ae039.prototype, "getStateMachine", null); -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function $99be642f82069918$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) end.reverse(); - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) start.reverse(); - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} -function $99be642f82069918$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch(verb){ - case 0: - return glyphs; - case 1: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 0 - ]); - case 2: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 1 - ]); - case 3: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 1 - ]); - case 4: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ]); - case 5: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ], true, false); - case 6: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ]); - case 7: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ], false, true); - case 8: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ]); - case 9: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ], false, true); - case 10: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ]); - case 11: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ], true, false); - case 12: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ]); - case 13: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, false); - case 14: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], false, true); - case 15: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, true); - default: - throw new Error(`Unknown verb: ${verb}`); - } -} - - -class $860fcbd64bc12fbc$export$2e2bcd8739ae039 { - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); - this.morxProcessor.process(glyphRun.glyphs, $2b7f887ebcb5888a$export$b813f7d2a1677c16(glyphRun.features)); - } - getAvailableFeatures(script, language) { - return $2b7f887ebcb5888a$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); - } - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); - return result; - } - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - for (let codePoint of codePoints){ - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); - else strings.add(s); - } - } - constructor(font){ - this.font = font; - this.morxProcessor = new (0, $99be642f82069918$export$2e2bcd8739ae039)(font); - this.fallbackPosition = false; - } -} - - - -class $d7e93cca3cf8ce8a$export$2e2bcd8739ae039 { - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features)if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - if (global) this.globalFeatures[feature] = true; - } - } - /** - * Add features to the last stage - */ add(arg, global = true) { - if (this.stages.length === 0) this.stages.push([]); - if (typeof arg === 'string') arg = [ - arg - ]; - if (Array.isArray(arg)) this._addFeatures(arg, global); - else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else throw new Error("Unsupported argument to ShapingPlan#add"); - } - /** - * Add a new stage - */ addStage(arg, global) { - if (typeof arg === 'function') this.stages.push(arg, []); - else { - this.stages.push([]); - this.add(arg, global); - } - } - setFeatureOverrides(features) { - if (Array.isArray(features)) this.add(features); - else if (typeof features === 'object') for(let tag in features){ - if (features[tag]) this.add(tag); - else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - /** - * Assigns the global features to the given glyphs - */ assignGlobalFeatures(glyphs) { - for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; - } - /** - * Executes the planned stages using the given OTProcessor - */ process(processor, glyphs, positions) { - for (let stage of this.stages){ - if (typeof stage === 'function') { - if (!positions) stage(this.font, glyphs, this); - } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); - } - } - constructor(font, script, direction){ - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } -} - - - - -const $d28fb665ee343afc$var$VARIATION_FEATURES = [ - 'rvrn' -]; -const $d28fb665ee343afc$var$COMMON_FEATURES = [ - 'ccmp', - 'locl', - 'rlig', - 'mark', - 'mkmk' -]; -const $d28fb665ee343afc$var$FRACTIONAL_FEATURES = [ - 'frac', - 'numr', - 'dnom' -]; -const $d28fb665ee343afc$var$HORIZONTAL_FEATURES = [ - 'calt', - 'clig', - 'liga', - 'rclt', - 'curs', - 'kern' -]; -const $d28fb665ee343afc$var$VERTICAL_FEATURES = [ - 'vert' -]; -const $d28fb665ee343afc$var$DIRECTIONAL_FEATURES = { - ltr: [ - 'ltra', - 'ltrm' - ], - rtl: [ - 'rtla', - 'rtlm' - ] -}; -class $d28fb665ee343afc$export$2e2bcd8739ae039 { - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - static planPreprocessing(plan) { - plan.add({ - global: [ - ...$d28fb665ee343afc$var$VARIATION_FEATURES, - ...$d28fb665ee343afc$var$DIRECTIONAL_FEATURES[plan.direction] - ], - local: $d28fb665ee343afc$var$FRACTIONAL_FEATURES - }); - } - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - static planPostprocessing(plan, userFeatures) { - plan.add([ - ...$d28fb665ee343afc$var$COMMON_FEATURES, - ...$d28fb665ee343afc$var$HORIZONTAL_FEATURES - ]); - plan.setFeatureOverrides(userFeatures); - } - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for(let i = 0; i < glyphs.length; i++){ - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { - let start = i; - let end = i + 1; - // Apply numerator - while(start > 0 && (0, $gfJaN$unicodeproperties.isDigit)(glyphs[start - 1].codePoints[0])){ - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - // Apply denominator - while(end < glyphs.length && (0, $gfJaN$unicodeproperties.isDigit)(glyphs[end].codePoints[0])){ - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($d28fb665ee343afc$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); - - - - - - -const $17ba6019f27bfcf9$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==")); -const $17ba6019f27bfcf9$var$FEATURES = [ - 'isol', - 'fina', - 'fin2', - 'fin3', - 'medi', - 'med2', - 'init' -]; -const $17ba6019f27bfcf9$var$ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; -const $17ba6019f27bfcf9$var$ISOL = 'isol'; -const $17ba6019f27bfcf9$var$FINA = 'fina'; -const $17ba6019f27bfcf9$var$FIN2 = 'fin2'; -const $17ba6019f27bfcf9$var$FIN3 = 'fin3'; -const $17ba6019f27bfcf9$var$MEDI = 'medi'; -const $17ba6019f27bfcf9$var$MED2 = 'med2'; -const $17ba6019f27bfcf9$var$INIT = 'init'; -const $17ba6019f27bfcf9$var$NONE = null; -// Each entry is [prevAction, curAction, nextState] -const $17ba6019f27bfcf9$var$STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 2: prev was D/L in ISOL form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 3: prev was D in FINA form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 4: prev was FINA ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 6: prev was DALATH/RISH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN3, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ] -]; -class $17ba6019f27bfcf9$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ccmp', - 'locl' - ]); - for(let i = 0; i < $17ba6019f27bfcf9$var$FEATURES.length; i++){ - let feature = $17ba6019f27bfcf9$var$FEATURES[i]; - plan.addStage(feature, false); - } - plan.addStage('mset'); - } - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - let prev = -1; - let state = 0; - let actions = []; - // Apply the state machine to map glyphs to features - for(let i = 0; i < glyphs.length; i++){ - let curAction, prevAction; - var glyph = glyphs[i]; - let type = $17ba6019f27bfcf9$var$getShapingClass(glyph.codePoints[0]); - if (type === $17ba6019f27bfcf9$var$ShapingClasses.Transparent) { - actions[i] = $17ba6019f27bfcf9$var$NONE; - continue; - } - [prevAction, curAction, state] = $17ba6019f27bfcf9$var$STATE_TABLE[state][type]; - if (prevAction !== $17ba6019f27bfcf9$var$NONE && prev !== -1) actions[prev] = prevAction; - actions[i] = curAction; - prev = i; - } - // Apply the chosen features to their respective glyphs - for(let index = 0; index < glyphs.length; index++){ - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) glyph.features[feature] = true; - } - } -} -function $17ba6019f27bfcf9$var$getShapingClass(codePoint) { - let res = $17ba6019f27bfcf9$var$trie.get(codePoint); - if (res) return res - 1; - let category = (0, $gfJaN$unicodeproperties.getCategory)(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') return $17ba6019f27bfcf9$var$ShapingClasses.Transparent; - return $17ba6019f27bfcf9$var$ShapingClasses.Non_Joining; -} - - - - - -class $d6368085223f631e$export$2e2bcd8739ae039 { - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - get cur() { - return this.glyphs[this.index] || null; - } - shouldIgnore(glyph) { - return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; - } - move(dir) { - this.index += dir; - while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; - if (0 > this.index || this.index >= this.glyphs.length) return null; - return this.glyphs[this.index]; - } - next() { - return this.move(1); - } - prev() { - return this.move(-1); - } - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while(count--)this.move(dir); - return this.glyphs[this.index]; - } - constructor(glyphs, options){ - this.glyphs = glyphs; - this.reset(options); - } -} - - - -const $7b226e6bbeadedeb$var$DEFAULT_SCRIPTS = [ - 'DFLT', - 'dflt', - 'latn' -]; -class $7b226e6bbeadedeb$export$2e2bcd8739ae039 { - findScript(script) { - if (this.table.scriptList == null) return null; - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script)for (let entry of this.table.scriptList){ - if (entry.tag === s) return entry; - } - return null; - } - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) entry = this.findScript($7b226e6bbeadedeb$var$DEFAULT_SCRIPTS); - if (!entry) return this.scriptTag; - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - if (!direction || direction !== this.direction) this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - if (language && language.length < 4) language += ' '.repeat(4 - language.length); - if (!language || language !== this.languageTag) { - this.language = null; - for (let lang of this.script.langSysRecords)if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - changed = true; - } - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) for (let featureIndex of this.language.featureIndexes){ - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - return this.scriptTag; - } - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures){ - let feature = this.features[tag]; - if (!feature) continue; - for (let lookupIndex of feature.lookupListIndexes){ - if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - lookups.sort((a, b)=>a.index - b.index); - return lookups; - } - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) return null; - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions){ - if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; - } - return null; - } - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) return -1; - let records = variations.featureVariationRecords; - for(let i = 0; i < records.length; i++){ - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) return i; - } - return -1; - } - variationConditionsMatch(conditions, coords) { - return conditions.every((condition)=>{ - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new (0, $d6368085223f631e$export$2e2bcd8739ae039)(glyphs); - for (let { feature: feature, lookup: lookup } of lookups){ - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - while(this.glyphIterator.index < glyphs.length){ - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - for (let table of lookup.subTables){ - let res = this.applyLookup(lookup.lookupType, table); - if (res) break; - } - this.glyphIterator.next(); - } - } - } - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - for (let lookupRecord of lookupRecords){ - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - // Apply lookup subtables until one matches - for (let table of lookup.subTables){ - if (this.applyLookup(lookup.lookupType, table)) break; - } - } - this.glyphIterator.reset(options, glyphIndex); - return true; - } - coverageIndex(coverage, glyph) { - if (glyph == null) glyph = this.glyphIterator.cur.id; - switch(coverage.version){ - case 1: - return coverage.glyphs.indexOf(glyph); - case 2: - for (let range of coverage.rangeRecords){ - if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; - } - break; - } - return -1; - } - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ - if (matched) matched.push(this.glyphIterator.index); - idx++; - glyph = this.glyphIterator.next(); - } - this.glyphIterator.index = pos; - if (idx < sequence.length) return false; - return matched || true; - } - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id); - } - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>{ - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) return false; - return component === glyph.id; - }, []); - } - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0); - } - getClassID(glyph, classDef) { - switch(classDef.version){ - case 1: - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; - break; - case 2: - for (let range of classDef.classRangeRecord){ - if (range.start <= glyph && glyph <= range.end) return range.class; - } - break; - } - return 0; - } - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)); - } - applyContext(table) { - let index, set; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - set = table.ruleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) return false; - set = table.classSet[index]; - for (let rule of set){ - if (this.classSequenceMatches(1, rule.classes, table.classDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - applyChainingContext(table) { - let index; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let set = table.chainRuleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) return false; - for (let rule of rules){ - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule.input, table.inputClassDef) && this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - constructor(font, table){ - this.font = font; - this.table = table; - this.script = null; - this.scriptTag = null; - this.language = null; - this.languageTag = null; - this.features = {}; - this.lookups = {}; - // Setup variation substitutions - this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; - // initialize to default script + language - this.selectScript(); - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } -} - - -class $f22bb23c9fd478d8$export$2e2bcd8739ae039 { - get id() { - return this._id; - } - set id(id) { - this._id = id; - this.substituted = true; - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $gfJaN$unicodeproperties.isMark)); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - copy() { - return new $f22bb23c9fd478d8$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); - } - constructor(font, id, codePoints = [], features){ - this._font = font; - this.codePoints = codePoints; - this.id = id; - this.features = {}; - if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ - let feature = features[i]; - this.features[feature] = true; - } - else if (typeof features === 'object') Object.assign(this.features, features); - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } -} - - -class $fa1d9fd80dd7279e$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ljmo', - 'vjmo', - 'tjmo' - ], false); - } - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while(i < glyphs.length){ - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - [action, state] = $fa1d9fd80dd7279e$var$STATE_TABLE[state][type]; - switch(action){ - case $fa1d9fd80dd7279e$var$DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) i = $fa1d9fd80dd7279e$var$decompose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = $fa1d9fd80dd7279e$var$compose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, plan.font); - break; - } - i++; - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($fa1d9fd80dd7279e$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -const $fa1d9fd80dd7279e$var$HANGUL_BASE = 0xac00; -const $fa1d9fd80dd7279e$var$HANGUL_END = 0xd7a4; -const $fa1d9fd80dd7279e$var$HANGUL_COUNT = $fa1d9fd80dd7279e$var$HANGUL_END - $fa1d9fd80dd7279e$var$HANGUL_BASE + 1; -const $fa1d9fd80dd7279e$var$L_BASE = 0x1100; // lead -const $fa1d9fd80dd7279e$var$V_BASE = 0x1161; // vowel -const $fa1d9fd80dd7279e$var$T_BASE = 0x11a7; // trail -const $fa1d9fd80dd7279e$var$L_COUNT = 19; -const $fa1d9fd80dd7279e$var$V_COUNT = 21; -const $fa1d9fd80dd7279e$var$T_COUNT = 28; -const $fa1d9fd80dd7279e$var$L_END = $fa1d9fd80dd7279e$var$L_BASE + $fa1d9fd80dd7279e$var$L_COUNT - 1; -const $fa1d9fd80dd7279e$var$V_END = $fa1d9fd80dd7279e$var$V_BASE + $fa1d9fd80dd7279e$var$V_COUNT - 1; -const $fa1d9fd80dd7279e$var$T_END = $fa1d9fd80dd7279e$var$T_BASE + $fa1d9fd80dd7279e$var$T_COUNT - 1; -const $fa1d9fd80dd7279e$var$DOTTED_CIRCLE = 0x25cc; -const $fa1d9fd80dd7279e$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const $fa1d9fd80dd7279e$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const $fa1d9fd80dd7279e$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const $fa1d9fd80dd7279e$var$isTone = (code)=>0x302e <= code && code <= 0x302f; -const $fa1d9fd80dd7279e$var$isLVT = (code)=>$fa1d9fd80dd7279e$var$HANGUL_BASE <= code && code <= $fa1d9fd80dd7279e$var$HANGUL_END; -const $fa1d9fd80dd7279e$var$isLV = (code)=>code - $fa1d9fd80dd7279e$var$HANGUL_BASE < $fa1d9fd80dd7279e$var$HANGUL_COUNT && (code - $fa1d9fd80dd7279e$var$HANGUL_BASE) % $fa1d9fd80dd7279e$var$T_COUNT === 0; -const $fa1d9fd80dd7279e$var$isCombiningL = (code)=>$fa1d9fd80dd7279e$var$L_BASE <= code && code <= $fa1d9fd80dd7279e$var$L_END; -const $fa1d9fd80dd7279e$var$isCombiningV = (code)=>$fa1d9fd80dd7279e$var$V_BASE <= code && code <= $fa1d9fd80dd7279e$var$V_END; -const $fa1d9fd80dd7279e$var$isCombiningT = (code)=>$fa1d9fd80dd7279e$var$T_BASE + 1 && 1 <= code && code <= $fa1d9fd80dd7279e$var$T_END; -// Character categories -const $fa1d9fd80dd7279e$var$X = 0; // Other character -const $fa1d9fd80dd7279e$var$L = 1; // Leading consonant -const $fa1d9fd80dd7279e$var$V = 2; // Medial vowel -const $fa1d9fd80dd7279e$var$T = 3; // Trailing consonant -const $fa1d9fd80dd7279e$var$LV = 4; // Composed syllable -const $fa1d9fd80dd7279e$var$LVT = 5; // Composed syllable -const $fa1d9fd80dd7279e$var$M = 6; // Tone mark -// This function classifies a character using the above categories. -function $fa1d9fd80dd7279e$var$getType(code) { - if ($fa1d9fd80dd7279e$var$isL(code)) return $fa1d9fd80dd7279e$var$L; - if ($fa1d9fd80dd7279e$var$isV(code)) return $fa1d9fd80dd7279e$var$V; - if ($fa1d9fd80dd7279e$var$isT(code)) return $fa1d9fd80dd7279e$var$T; - if ($fa1d9fd80dd7279e$var$isLV(code)) return $fa1d9fd80dd7279e$var$LV; - if ($fa1d9fd80dd7279e$var$isLVT(code)) return $fa1d9fd80dd7279e$var$LVT; - if ($fa1d9fd80dd7279e$var$isTone(code)) return $fa1d9fd80dd7279e$var$M; - return $fa1d9fd80dd7279e$var$X; -} -// State machine actions -const $fa1d9fd80dd7279e$var$NO_ACTION = 0; -const $fa1d9fd80dd7279e$var$DECOMPOSE = 1; -const $fa1d9fd80dd7279e$var$COMPOSE = 2; -const $fa1d9fd80dd7279e$var$TONE_MARK = 4; -const $fa1d9fd80dd7279e$var$INVALID = 5; -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const $fa1d9fd80dd7279e$var$STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 1: - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 2: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ], - // State 3: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ] -]; -function $fa1d9fd80dd7279e$var$getGlyph(font, code, features) { - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, font.glyphForCodePoint(code).id, [ - code - ], features); -} -function $fa1d9fd80dd7279e$var$decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let s = code - $fa1d9fd80dd7279e$var$HANGUL_BASE; - let t = $fa1d9fd80dd7279e$var$T_BASE + s % $fa1d9fd80dd7279e$var$T_COUNT; - s = s / $fa1d9fd80dd7279e$var$T_COUNT | 0; - let l = $fa1d9fd80dd7279e$var$L_BASE + s / $fa1d9fd80dd7279e$var$V_COUNT | 0; - let v = $fa1d9fd80dd7279e$var$V_BASE + s % $fa1d9fd80dd7279e$var$V_COUNT; - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $fa1d9fd80dd7279e$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = $fa1d9fd80dd7279e$var$getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - let vjmo = $fa1d9fd80dd7279e$var$getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - let insert = [ - ljmo, - vjmo - ]; - if (t > $fa1d9fd80dd7279e$var$T_BASE) { - let tjmo = $fa1d9fd80dd7279e$var$getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} -function $fa1d9fd80dd7279e$var$compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - let prev = glyphs[i - 1].codePoints[0]; - let prevType = $fa1d9fd80dd7279e$var$getType(prev); - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === $fa1d9fd80dd7279e$var$LV && type === $fa1d9fd80dd7279e$var$T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === $fa1d9fd80dd7279e$var$V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - // Make sure L and V are combining characters - if ($fa1d9fd80dd7279e$var$isCombiningL(l) && $fa1d9fd80dd7279e$var$isCombiningV(v)) lv = $fa1d9fd80dd7279e$var$HANGUL_BASE + ((l - $fa1d9fd80dd7279e$var$L_BASE) * $fa1d9fd80dd7279e$var$V_COUNT + (v - $fa1d9fd80dd7279e$var$V_BASE)) * $fa1d9fd80dd7279e$var$T_COUNT; - } - let t = tjmo && tjmo.codePoints[0] || $fa1d9fd80dd7279e$var$T_BASE; - if (lv != null && (t === $fa1d9fd80dd7279e$var$T_BASE || $fa1d9fd80dd7279e$var$isCombiningT(t))) { - let s = lv + (t - $fa1d9fd80dd7279e$var$T_BASE); - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === $fa1d9fd80dd7279e$var$V ? 3 : 2; - glyphs.splice(i - del + 1, del, $fa1d9fd80dd7279e$var$getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) ljmo.features.ljmo = true; - if (vjmo) vjmo.features.vjmo = true; - if (tjmo) tjmo.features.tjmo = true; - if (prevType === $fa1d9fd80dd7279e$var$LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - $fa1d9fd80dd7279e$var$decompose(glyphs, i - 1, font); - return i + 1; - } - return i; -} -function $fa1d9fd80dd7279e$var$getLength(code) { - switch($fa1d9fd80dd7279e$var$getType(code)){ - case $fa1d9fd80dd7279e$var$LV: - case $fa1d9fd80dd7279e$var$LVT: - return 1; - case $fa1d9fd80dd7279e$var$V: - return 2; - case $fa1d9fd80dd7279e$var$T: - return 3; - } -} -function $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) return; - let prev = glyphs[i - 1].codePoints[0]; - let len = $fa1d9fd80dd7279e$var$getLength(prev); - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} -function $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - if (font.hasGlyphForCodePoint($fa1d9fd80dd7279e$var$DOTTED_CIRCLE)) { - let dottedCircle = $fa1d9fd80dd7279e$var$getGlyph(font, $fa1d9fd80dd7279e$var$DOTTED_CIRCLE, glyph.features); - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - return i; -} - - - - - - - - - -var $d22b56f2cf15e5ba$exports = {}; -$d22b56f2cf15e5ba$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}"); - - -var $79781f8c452881c2$exports = {}; -$79781f8c452881c2$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}"); - - -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -const $79e3b6f2c331d0bf$export$a513ea61a7bee91c = { - X: 1, - C: 2, - V: 4, - N: 8, - H: 16, - ZWNJ: 32, - ZWJ: 64, - M: 128, - SM: 256, - VD: 512, - A: 1024, - Placeholder: 2048, - Dotted_Circle: 4096, - RS: 8192, - Coeng: 16384, - Repha: 32768, - Ra: 65536, - CM: 131072, - Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). -}; -const $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0 = { - Start: 1, - Ra_To_Become_Reph: 2, - Pre_M: 4, - Pre_C: 8, - Base_C: 16, - After_Main: 32, - Above_C: 64, - Before_Sub: 128, - Below_C: 256, - After_Sub: 512, - Before_Post: 1024, - Post_C: 2048, - After_Post: 4096, - Final_C: 8192, - SMVD: 16384, - End: 32768 -}; -const $79e3b6f2c331d0bf$export$8519deaa7de2b07 = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.C | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Ra | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.CM | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.V | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Placeholder | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Dotted_Circle; -const $79e3b6f2c331d0bf$export$bbcd928767338e0d = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWJ | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWNJ; -const $79e3b6f2c331d0bf$export$ca9599b2a300afc = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.H | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Coeng; -const $79e3b6f2c331d0bf$export$e99d119da76a0fc5 = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; -const $79e3b6f2c331d0bf$export$f647c9cfdd77d95a = { - // Khmer - 0x17BE: [ - 0x17C1, - 0x17BE - ], - 0x17BF: [ - 0x17C1, - 0x17BF - ], - 0x17C0: [ - 0x17C1, - 0x17C0 - ], - 0x17C4: [ - 0x17C1, - 0x17C4 - ], - 0x17C5: [ - 0x17C1, - 0x17C5 - ] -}; - - - -const { decompositions: $d203e6b9523d0071$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $d203e6b9523d0071$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $d203e6b9523d0071$var$stateMachine = new (0, ($parcel$interopDefault($gfJaN$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($d22b56f2cf15e5ba$exports)))); -class $d203e6b9523d0071$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($d203e6b9523d0071$var$setupSyllables); - plan.addStage([ - 'locl', - 'ccmp' - ]); - plan.addStage($d203e6b9523d0071$var$initialReordering); - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - plan.addStage($d203e6b9523d0071$var$finalReordering); - plan.addStage({ - local: [ - 'init' - ], - global: [ - 'pres', - 'abvs', - 'blws', - 'psts', - 'haln', - 'dist', - 'abvm', - 'blwm', - 'calt', - 'clig' - ] - }); - // Setup the indic config for the selected script - plan.unicodeScript = $e38a1a895f6aeb54$export$ce50e82f12a827a4(plan.script); - plan.indicConfig = (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5)[plan.unicodeScript] || (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5).Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - // TODO: turn off kern (Khmer) and liga features. - } - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - let d = (0, $79e3b6f2c331d0bf$export$f647c9cfdd77d95a)[codepoint] || $d203e6b9523d0071$var$decompositions[codepoint]; - if (d) { - let decomposed = d.map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($d203e6b9523d0071$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -function $d203e6b9523d0071$var$indicCategory(glyph) { - return $d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) >> 8; -} -function $d203e6b9523d0071$var$indicPosition(glyph) { - return 1 << ($d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) & 0xff); -} -class $d203e6b9523d0071$var$IndicInfo { - constructor(category, position, syllableType, syllable){ - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $d203e6b9523d0071$var$setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of $d203e6b9523d0071$var$stateMachine.match(glyphs.map($d203e6b9523d0071$var$indicCategory))){ - if (start > last) { - ++syllable; - for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(glyphs[i]), $d203e6b9523d0071$var$indicPosition(glyphs[i]), tags[0], syllable); - last = end + 1; - } - if (last < glyphs.length) { - ++syllable; - for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } -} -function $d203e6b9523d0071$var$isConsonant(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$8519deaa7de2b07); -} -function $d203e6b9523d0071$var$isJoiner(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$bbcd928767338e0d); -} -function $d203e6b9523d0071$var$isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc); -} -function $d203e6b9523d0071$var$wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs)glyph.features = { - [feature]: true - }; - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([ - feature - ], glyphs); - return glyphs.length === 1; -} -function $d203e6b9523d0071$var$consonantPosition(font, consonant, virama) { - let glyphs = [ - virama, - consonant, - virama - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; -} -function $d203e6b9523d0071$var$initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, virama, [ - indicConfig.virama - ]); - for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) glyphs[i].shaperInfo.position = $d203e6b9523d0071$var$consonantPosition(font, glyphs[i].copy(), info); - } - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - let { category: category, syllableType: syllableType } = glyphs[start].shaperInfo; - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue; - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(g), $d203e6b9523d0071$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); - // Insert after possible Repha. - let i = start; - while(i < end && glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha)i++; - glyphs.splice(i++, 0, g); - end++; - } - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - let base = end; - let limit = start; - let hasReph = false; - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$d203e6b9523d0071$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - // See if it matches the 'rphf' feature. - let g = [ - glyphs[start].copy(), - glyphs[start + 1].copy(), - glyphs[start + 2].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $d203e6b9523d0071$var$wouldSubstitute(g, 'rphf')) { - limit += 2; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha) { - limit++; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - switch(indicConfig.basePos){ - case 'Last': - { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - do { - let info = glyphs[--i].shaperInfo; - // until a consonant is found - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C && (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C || seenBelow)) { - base = i; - break; - } - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) seenBelow = true; - base = i; - } else if (start < i && info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ && glyphs[i - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - }while (i > limit); - break; - } - case 'First': - // The first consonant is always the base. - base = start; - // Mark all subsequent consonants as below. - for(let i = base + 1; i < end; i++)if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - } - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) hasReph = false; - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - // Reorder characters - for(let i = start; i < base; i++){ - let info = glyphs[i].shaperInfo; - info.position = Math.min((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_C, info.position); - } - if (base < end) glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - for(let j = i + 1; j < end; j++)if ($d203e6b9523d0071$var$isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Final_C; - break; - } - break; - } - // Handle beginning Ra - if (hasReph) glyphs[start].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) { - let j; - for(j = end - 1; j > i; j--){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - } - if (glyphs[j].shaperInfo.category !== (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - break; - } - } - // Attach misc marks to previous char to move with them. - let lastPos = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Start; - for(let i = start; i < end; i++){ - let info = glyphs[i].shaperInfo; - if (info.category & ((0, $79e3b6f2c331d0bf$export$bbcd928767338e0d) | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).RS | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).CM | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc) & info.category)) { - info.position = lastPos; - if (info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for(let j = i; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } else if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) lastPos = info.position; - } - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for(let i = base + 1; i < end; i++){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - for(let j = last + 1; j < i; j++)if (glyphs[j].shaperInfo.position < (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - last = i; - } else if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) last = i; - } - let arr = glyphs.slice(start, end); - arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - // Find base again - for(let i = start; i < end; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - base = i; - break; - } - // Setup features now - // Reph - for(let i = start; i < end && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; i++)glyphs[i].features.rphf = true; - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for(let i = start; i < base; i++){ - glyphs[i].features.half = true; - if (blwf) glyphs[i].features.blwf = true; - } - // Post-base - for(let i = base + 1; i < end; i++){ - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Ra && glyphs[i + 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - let prefLen = 2; - if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for(let i = base + 1; i + prefLen - 1 < end; i++){ - let g = [ - glyphs[i].copy(), - glyphs[i + 1].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g, 'pref')) { - for(let j = 0; j < prefLen; j++)glyphs[i++].features.pref = true; - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) for(; i < end; i++)glyphs[i].features.cfar = true; - break; - } - } - // Apply ZWJ/ZWNJ effects - for(let i = start + 1; i < end; i++)if ($d203e6b9523d0071$var$isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWNJ; - let j = i; - do { - j--; - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - // A ZWNJ disables HALF. - if (nonJoiner) delete glyphs[j].features.half; - }while (j > start && !$d203e6b9523d0071$var$isConsonant(glyphs[j])); - } - } -} -function $d203e6b9523d0071$var$finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - let tryPref = !!features.pref; - // Find base again - let base = start; - for(; base < end; base++)if (glyphs[base].shaperInfo.position >= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while(base < end && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[base]))base++; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).BASE_C; - tryPref = false; - } - break; - } - } - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){ - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i === end || !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[i])) break; - i++; // Skip halant. - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i < end && $d203e6b9523d0071$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) { - base = i; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - } - } - if (start < base && glyphs[base].shaperInfo.position > (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) base--; - break; - } - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ) base--; - if (base < end) while(start < base && glyphs[base].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc)))base--; - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - if (start + 1 < end && start < base) { - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos + 1 < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos + 1])) newPos++; - } else newPos = start; // No move. - } - if (start < newPos && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Now go see if there's actually any matras... - for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) base--; - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - newPos--; - } - } - } - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main) { - newRephPos = base; - while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main)newRephPos++; - found = newRephPos < end; - } - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Sub) { - newRephPos = base; - while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)))newRephPos++; - found = newRephPos < end; - } - } - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - } - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)newRephPos--; - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) newRephPos--; - } - } - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - if (start < base && base <= newRephPos) base--; - } - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - let oldPos = i; - for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - newPos--; - break; - } - } - } - if (newPos > start && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos])) newPos++; - } - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - if (newPos <= base && base < oldPos) base++; - } - break; - } - } - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M && (!start || !/Cf|Mn/.test((0, $gfJaN$unicodeproperties.getCategory)(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true; - } -} -function $d203e6b9523d0071$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - - - - - - - - - -const { categories: $9b772791ccede8a5$var$categories, decompositions: $9b772791ccede8a5$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $9b772791ccede8a5$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $9b772791ccede8a5$var$stateMachine = new (0, ($parcel$interopDefault($gfJaN$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports)))); -class $9b772791ccede8a5$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($9b772791ccede8a5$var$setupSyllables); - // Default glyph pre-processing group - plan.addStage([ - 'locl', - 'ccmp', - 'nukt', - 'akhn' - ]); - // Reordering group - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'rphf' - ], false); - plan.addStage($9b772791ccede8a5$var$recordRphf); - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'pref' - ]); - plan.addStage($9b772791ccede8a5$var$recordPref); - // Orthographic unit shaping group - plan.addStage([ - 'rkrf', - 'abvf', - 'blwf', - 'half', - 'pstf', - 'vatu', - 'cjct' - ]); - plan.addStage($9b772791ccede8a5$var$reorder); - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - // Standard topographic presentation and positional feature application - plan.addStage([ - 'abvs', - 'blws', - 'pres', - 'psts', - 'dist', - 'abvm', - 'blwm' - ]); - } - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - if ($9b772791ccede8a5$var$decompositions[codepoint]) { - let decomposed = $9b772791ccede8a5$var$decompositions[codepoint].map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($9b772791ccede8a5$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS'); -function $9b772791ccede8a5$var$useCategory(glyph) { - return $9b772791ccede8a5$var$trie.get(glyph.codePoints[0]); -} -class $9b772791ccede8a5$var$USEInfo { - constructor(category, syllableType, syllable){ - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $9b772791ccede8a5$var$setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of $9b772791ccede8a5$var$stateMachine.match(glyphs.map($9b772791ccede8a5$var$useCategory))){ - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $9b772791ccede8a5$var$USEInfo($9b772791ccede8a5$var$categories[$9b772791ccede8a5$var$useCategory(glyphs[i])], tags[0], syllable); - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for(let i = start; i < start + limit; i++)glyphs[i].features.rphf = true; - } -} -function $9b772791ccede8a5$var$clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs)glyph.substituted = false; -} -function $9b772791ccede8a5$var$recordRphf(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; -} -function $9b772791ccede8a5$var$recordPref(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; -} -function $9b772791ccede8a5$var$reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - for(let start = 0, end = $9b772791ccede8a5$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $9b772791ccede8a5$var$nextSyllable(glyphs, start)){ - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue; - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = info; - // Insert after possible Repha. - for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - // Move things forward. - if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant. - for(i = start + 1; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if ($9b772791ccede8a5$var$isHalant(glyphs[i])) i--; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - // Move things back. - for(i = start, j = end; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = $9b772791ccede8a5$var$isHalant(glyphs[i]) ? i + 1 : i; - else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } -} -function $9b772791ccede8a5$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} -function $9b772791ccede8a5$var$isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} -function $9b772791ccede8a5$var$isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} - - -const $fdb4471fc82bc2c2$var$SHAPERS = { - arab: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mong: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - syrc: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - 'nko ': (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phag: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mand: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mani: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phlp: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - hang: (0, $fa1d9fd80dd7279e$export$2e2bcd8739ae039), - bng2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - beng: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - dev2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - deva: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gjr2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gujr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - guru: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gur2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knda: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knd2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlm2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlym: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - ory2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - orya: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - taml: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tml2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - telu: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tel2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - khmr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - bali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - batk: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - brah: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - bugi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - buhd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cakm: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cham: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - dupl: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - egyp: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - gran: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - hano: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - java: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kthi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khar: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khoj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sind: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lepc: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - limb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - mahj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - modi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - saur: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - shrd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sidd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sinh: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - sund: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sylo: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tglg: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tagb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tale: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lana: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tavt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - takr: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tibt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tfng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tirh: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - latn: (0, $d28fb665ee343afc$export$2e2bcd8739ae039), - DFLT: (0, $d28fb665ee343afc$export$2e2bcd8739ae039 // Default - ) -}; -function $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script) { - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script){ - let shaper = $fdb4471fc82bc2c2$var$SHAPERS[s]; - if (shaper) return shaper; - } - return 0, $d28fb665ee343afc$export$2e2bcd8739ae039; -} - - - - - -class $86bc1883359e094a$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let glyph = this.glyphIterator.cur; - switch(table.version){ - case 1: - glyph.id = glyph.id + table.deltaGlyphID & 0xffff; - break; - case 2: - glyph.id = table.substitute.get(index); - break; - } - return true; - } - case 2: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i)=>{ - let glyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - return false; - } - case 3: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - return false; - } - case 4: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - for (let ligature of table.ligatureSets.get(index)){ - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) continue; - let curGlyph = this.glyphIterator.cur; - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched)characters.push(...this.glyphs[index].codePoints); - // Create the replacement ligature glyph - let ligatureGlyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark; - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched){ - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) idx = matchIndex; - else while(idx < matchIndex){ - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) for(let i = idx; i < this.glyphs.length; i++){ - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else break; - } - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for(let i = matched.length - 1; i >= 0; i--)this.glyphs.splice(matched[i], 1); - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - return false; - } - case 5: - return this.applyContext(table); - case 6: - return this.applyChainingContext(table); - case 7: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} - - - -class $79ea6270f0a90256$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) position.xAdvance += value.xAdvance; - if (value.yAdvance != null) position.yAdvance += value.yAdvance; - if (value.xPlacement != null) position.xOffset += value.xPlacement; - if (value.yPlacement != null) position.yOffset += value.yPlacement; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - // TODO: device tables - } - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - this.applyPositionValue(0, table.value); - break; - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - return true; - } - case 2: - { - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) return false; - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - let set = table.pairSets.get(index); - for (let pair of set)if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - return false; - case 2: - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) return false; - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - case 3: - { - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) return false; - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) return false; - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) return false; - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - switch(this.direction){ - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - return true; - } - case 4: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - if (baseGlyphIndex < 0) return false; - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) return false; - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 5: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - if (baseGlyphIndex < 0) return false; - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) return false; - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 6: - { - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) return false; - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) return false; - let cur = this.glyphIterator.cur; - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) good = true; - else if (cur.ligatureComponent === prev.ligatureComponent) good = true; - } else // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true; - if (!good) return false; - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) return false; - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - case 7: - return this.applyContext(table); - case 8: - return this.applyChainingContext(table); - case 9: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - return { - x: x, - y: y - }; - } - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i); - this.fixMarkAttachment(); - } - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - fixMarkAttachment() { - for(let i = 0; i < this.glyphs.length; i++){ - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - if (this.direction === 'ltr') for(let k = j; k < i; k++){ - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - else for(let k = j + 1; k < i + 1; k++){ - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } -} - - -class $b2f26a32cb9ab2fa$export$2e2bcd8739ae039 { - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map((glyph)=>new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, glyph.id, [ - ...glyph.codePoints - ])); - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script); - this.plan = new (0, $d7e93cca3cf8ce8a$export$2e2bcd8739ae039)(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - // Assign chosen features to output glyph run - for(let key in this.plan.allFeatures)glyphRun.features[key] = true; - } - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions); - if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions); - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - return this.GPOSProcessor && this.GPOSProcessor.features; - } - zeroMarkAdvances(positions) { - for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - getAvailableFeatures(script, language) { - let features = []; - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - return features; - } - constructor(font){ - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - if (font.GSUB) this.GSUBProcessor = new (0, $86bc1883359e094a$export$2e2bcd8739ae039)(font, font.GSUB); - if (font.GPOS) this.GPOSProcessor = new (0, $79ea6270f0a90256$export$2e2bcd8739ae039)(font, font.GPOS); - } -} - - -class $9d641258c9d7180d$export$2e2bcd8739ae039 { - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) script = $e38a1a895f6aeb54$export$e5cb25e204fb8450(string); - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string)codePoints.push(...glyph.codePoints); - script = $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints); - } - var glyphs = string; - } - let glyphRun = new (0, $b19c79ec7a94fa39$export$2e2bcd8739ae039)(glyphs, features, script, language, direction); - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - // Setup the advanced layout engine - if (this.engine && this.engine.setup) this.engine.setup(glyphRun); - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) this.engine.cleanup(); - return glyphRun; - } - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun); - } - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map((glyph)=>new (0, $9195cf1266c12ea5$export$2e2bcd8739ae039)(glyph.advanceWidth)); - let positioned = null; - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun); - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new (0, $a57a26817cd35108$export$2e2bcd8739ae039)(this.font); - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) this.kernProcessor = new (0, $4646d52c2a559cdb$export$2e2bcd8739ae039)(this.font); - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) // BMP - switch(ch >> 8){ - case 0x00: - return ch === 0x00AD; - case 0x03: - return ch === 0x034F; - case 0x06: - return ch === 0x061C; - case 0x17: - return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: - return 0x180B <= ch && ch <= 0x180E; - case 0x20: - return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; - case 0xFE: - return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; - case 0xFF: - return 0xFFF0 <= ch && ch <= 0xFFF8; - default: - return false; - } - else // Other planes - switch(plane){ - case 0x01: - return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; - case 0x0E: - return 0xE0000 <= ch && ch <= 0xE0FFF; - default: - return false; - } - } - getAvailableFeatures(script, language) { - let features = []; - if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language)); - if (this.font.kern && features.indexOf('kern') === -1) features.push('kern'); - return features; - } - stringsForGlyph(gid) { - let result = new Set; - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint)); - if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string); - return Array.from(result); - } - constructor(font){ - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) this.engine = new (0, $860fcbd64bc12fbc$export$2e2bcd8739ae039)(this.font); - else if (this.font.GSUB || this.font.GPOS) this.engine = new (0, $b2f26a32cb9ab2fa$export$2e2bcd8739ae039)(this.font); - } -} - - - - - - -const $67ee4828d81adb28$var$SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; -class $67ee4828d81adb28$export$2e2bcd8739ae039 { - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ toFunction() { - return (ctx)=>{ - this.commands.forEach((c)=>{ - return ctx[c.command].apply(ctx, c.args); - }); - }; - } - /** - * Converts the path to an SVG path data string - * @return {string} - */ toSVG() { - let cmds = this.commands.map((c)=>{ - let args = c.args.map((arg)=>Math.round(arg * 100) / 100); - return `${$67ee4828d81adb28$var$SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - return cmds.join(''); - } - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ get cbox() { - if (!this._cbox) { - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for (let command of this.commands)for(let i = 0; i < command.args.length; i += 2)cbox.addPoint(command.args[i], command.args[i + 1]); - this._cbox = Object.freeze(cbox); - } - return this._cbox; - } - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ get bbox() { - if (this._bbox) return this._bbox; - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let cx = 0, cy = 0; - let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - for (let c of this.commands)switch(c.command){ - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - var p0 = [ - cx, - cy - ]; - var p1 = [ - cp1x, - cp1y - ]; - var p2 = [ - cp2x, - cp2y - ]; - var p3 = [ - p3x, - p3y - ]; - for(var i = 0; i <= 1; i++){ - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) bbox.addPoint(f(t), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t)); - } - continue; - } - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) bbox.addPoint(f(t1), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t1)); - } - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) bbox.addPoint(f(t2), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t2)); - } - } - cx = p3x; - cy = p3y; - break; - } - return this._bbox = Object.freeze(bbox); - } - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ mapPoints(fn) { - let path = new $67ee4828d81adb28$export$2e2bcd8739ae039; - for (let c of this.commands){ - let args = []; - for(let i = 0; i < c.args.length; i += 2){ - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - path[c.command](...args); - } - return path; - } - /** - * Transforms the path by the given matrix. - */ transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y)=>{ - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [ - tx, - ty - ]; - }); - } - /** - * Translates the path by the given offset. - */ translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - /** - * Rotates the path by the given angle (in radians). - */ rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - /** - * Scales the path. - */ scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } - constructor(){ - this.commands = []; - this._bbox = null; - this._cbox = null; - } -} -for (let command of [ - 'moveTo', - 'lineTo', - 'quadraticCurveTo', - 'bezierCurveTo', - 'closePath' -])$67ee4828d81adb28$export$2e2bcd8739ae039.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command: command, - args: args - }); - return this; -}; - - - -var $85e16e40023cfb0f$export$2e2bcd8739ae039 = [ - '.notdef', - '.null', - 'nonmarkingreturn', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quotesingle', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'grave', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'Adieresis', - 'Aring', - 'Ccedilla', - 'Eacute', - 'Ntilde', - 'Odieresis', - 'Udieresis', - 'aacute', - 'agrave', - 'acircumflex', - 'adieresis', - 'atilde', - 'aring', - 'ccedilla', - 'eacute', - 'egrave', - 'ecircumflex', - 'edieresis', - 'iacute', - 'igrave', - 'icircumflex', - 'idieresis', - 'ntilde', - 'oacute', - 'ograve', - 'ocircumflex', - 'odieresis', - 'otilde', - 'uacute', - 'ugrave', - 'ucircumflex', - 'udieresis', - 'dagger', - 'degree', - 'cent', - 'sterling', - 'section', - 'bullet', - 'paragraph', - 'germandbls', - 'registered', - 'copyright', - 'trademark', - 'acute', - 'dieresis', - 'notequal', - 'AE', - 'Oslash', - 'infinity', - 'plusminus', - 'lessequal', - 'greaterequal', - 'yen', - 'mu', - 'partialdiff', - 'summation', - 'product', - 'pi', - 'integral', - 'ordfeminine', - 'ordmasculine', - 'Omega', - 'ae', - 'oslash', - 'questiondown', - 'exclamdown', - 'logicalnot', - 'radical', - 'florin', - 'approxequal', - 'Delta', - 'guillemotleft', - 'guillemotright', - 'ellipsis', - 'nonbreakingspace', - 'Agrave', - 'Atilde', - 'Otilde', - 'OE', - 'oe', - 'endash', - 'emdash', - 'quotedblleft', - 'quotedblright', - 'quoteleft', - 'quoteright', - 'divide', - 'lozenge', - 'ydieresis', - 'Ydieresis', - 'fraction', - 'currency', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'daggerdbl', - 'periodcentered', - 'quotesinglbase', - 'quotedblbase', - 'perthousand', - 'Acircumflex', - 'Ecircumflex', - 'Aacute', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Oacute', - 'Ocircumflex', - 'apple', - 'Ograve', - 'Uacute', - 'Ucircumflex', - 'Ugrave', - 'dotlessi', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'Lslash', - 'lslash', - 'Scaron', - 'scaron', - 'Zcaron', - 'zcaron', - 'brokenbar', - 'Eth', - 'eth', - 'Yacute', - 'yacute', - 'Thorn', - 'thorn', - 'minus', - 'multiply', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'onehalf', - 'onequarter', - 'threequarters', - 'franc', - 'Gbreve', - 'gbreve', - 'Idotaccent', - 'Scedilla', - 'scedilla', - 'Cacute', - 'cacute', - 'Ccaron', - 'ccaron', - 'dcroat' -]; - - -class $0e4f52d7996e478b$export$2e2bcd8739ae039 { - _getPath() { - return new (0, $67ee4828d81adb28$export$2e2bcd8739ae039)(); - } - _getCBox() { - return this.path.cbox; - } - _getBBox() { - return this.path.bbox; - } - _getTableMetrics(table) { - if (this.id < table.metrics.length) return table.metrics.get(this.id); - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - return res; - } - _getMetrics(cbox) { - if (this._metrics) return this._metrics; - let { advance: advanceWidth, bearing: leftBearing } = this._getTableMetrics(this._font.hmtx); - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) var { advance: advanceHeight, bearing: topBearing } = this._getTableMetrics(this._font.vmtx); - else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this); - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - } else { - let { hhea: hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - return this._metrics = { - advanceWidth: advanceWidth, - advanceHeight: advanceHeight, - leftBearing: leftBearing, - topBearing: topBearing - }; - } - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ get cbox() { - return this._getCBox(); - } - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ get bbox() { - return this._getBBox(); - } - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - /** - * The glyph's advance width. - * @type {number} - */ get advanceWidth() { - return this._getMetrics().advanceWidth; - } - /** - * The glyph's advance height. - * @type {number} - */ get advanceHeight() { - return this._getMetrics().advanceHeight; - } - get ligatureCaretPositions() {} - _getName() { - let { post: post } = this._font; - if (!post) return null; - switch(post.version){ - case 1: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id]; - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length) return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[id]; - return post.names[id - (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length]; - case 2.5: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id + post.offsets[this.id]]; - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - /** - * The glyph's name - * @type {string} - */ get name() { - return this._getName(); - } - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ render(ctx, size) { - ctx.save(); - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - ctx.restore(); - } - constructor(id, codePoints, font){ - /** - * The glyph id in the font - * @type {number} - */ this.id = id; - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ this.codePoints = codePoints; - this._font = font; - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $gfJaN$unicodeproperties.isMark)); - this.isLigature = this.codePoints.length > 1; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "cbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "path", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceWidth", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceHeight", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "name", null); - - - - - -// The header for both simple and composite glyphs -let $f680320fa07ef53d$var$GlyfHeader = new $gfJaN$restructure.Struct({ - numberOfContours: $gfJaN$restructure.int16, - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16 -}); -// Flags for simple glyphs -const $f680320fa07ef53d$var$ON_CURVE = 1; -const $f680320fa07ef53d$var$X_SHORT_VECTOR = 2; -const $f680320fa07ef53d$var$Y_SHORT_VECTOR = 4; -const $f680320fa07ef53d$var$REPEAT = 8; -const $f680320fa07ef53d$var$SAME_X = 16; -const $f680320fa07ef53d$var$SAME_Y = 32; -// Flags for composite glyphs -const $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS = 1; -const $f680320fa07ef53d$var$ARGS_ARE_XY_VALUES = 2; -const $f680320fa07ef53d$var$ROUND_XY_TO_GRID = 4; -const $f680320fa07ef53d$var$WE_HAVE_A_SCALE = 8; -const $f680320fa07ef53d$var$MORE_COMPONENTS = 32; -const $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE = 64; -const $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO = 128; -const $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS = 256; -const $f680320fa07ef53d$var$USE_MY_METRICS = 512; -const $f680320fa07ef53d$var$OVERLAP_COMPOUND = 1024; -const $f680320fa07ef53d$var$SCALED_COMPONENT_OFFSET = 2048; -const $f680320fa07ef53d$var$UNSCALED_COMPONENT_OFFSET = 4096; -class $f680320fa07ef53d$export$baf26146a414f24a { - copy() { - return new $f680320fa07ef53d$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y); - } - constructor(onCurve, endContour, x = 0, y = 0){ - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } -} -// Represents a component in a composite glyph -class $f680320fa07ef53d$var$Component { - constructor(glyphID, dx, dy){ - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} -class $f680320fa07ef53d$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) return this.path.cbox; - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) val = -val; - val += prev; - } else if (same) var val = prev; - else var val = prev + stream.readInt16BE(); - return val; - } - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) return null; - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream); - else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos); - return glyph; - } - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - let endPtsOfContours = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16).decode(stream); - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - while(flags.length < numCoords){ - var flag = stream.readUInt8(); - flags.push(flag); - // check for repeat flag - if (flag & $f680320fa07ef53d$var$REPEAT) { - let count = stream.readUInt8(); - for(let j = 0; j < count; j++)flags.push(flag); - } - } - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - let point = new $f680320fa07ef53d$export$baf26146a414f24a(!!(flag & $f680320fa07ef53d$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - let px = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $f680320fa07ef53d$var$X_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_X); - } - let py = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $f680320fa07ef53d$var$Y_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_Y); - } - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - return; - } - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = $f680320fa07ef53d$var$MORE_COMPONENTS; - while(flags & $f680320fa07ef53d$var$MORE_COMPONENTS){ - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) haveInstructions = (flags & $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS) !== 0; - if (flags & $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - var component = new $f680320fa07ef53d$var$Component(glyphID, dx, dy); - component.pos = gPos; - if (flags & $f680320fa07ef53d$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction - component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - else if (flags & $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } else if (flags & $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } - glyph.components.push(component); - } - if (this._font._variationProcessor) { - let points = []; - for(let j = 0; j < glyph.components.length; j++){ - var component = glyph.components[j]; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(true, true, component.dx, component.dy)); - } - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - for(let i = 0; i < points.length; i++){ - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - return haveInstructions; - } - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) this._metrics = (0, $0e4f52d7996e478b$export$2e2bcd8739ae039).prototype._getMetrics.call(this, cbox); - let { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing } = this._metrics; - return [ - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) return []; - let points = []; - if (glyph.numberOfContours < 0) // resolve composite glyphs - for (let component of glyph.components){ - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - for(let j = 0; j < contour.length; j++){ - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(point.onCurve, point.endContour, x, y)); - } - } - } - else points = glyph.points || []; - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - let contours = []; - let cur = []; - for(let k = 0; k < points.length; k++){ - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - return contours; - } - _getMetrics() { - if (this._metrics) return this._metrics; - let cbox = this._getCBox(true); - super._getMetrics(cbox); - if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - return this._metrics; - } - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - else // Start at the middle if both the first and last points are off curve - firstPt = new $f680320fa07ef53d$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - var curvePt = firstPt; - } - path.moveTo(firstPt.x, firstPt.y); - for(let j = start; j < contour.length; j++){ - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y); - else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt; - else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - } else throw new Error("Unknown TTF path state"); - } - // Connect the first and last points - if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - path.closePath(); - } - return path; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - } -} - - - - - -class $7ee0705195f3b047$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getName() { - if (this._font.CFF2) return super._getName(); - return this._font['CFF '].getGlyphName(this.id); - } - bias(s) { - if (s.length < 1240) return 107; - else if (s.length < 33900) return 1131; - else return 32768; - } - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream: stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - let stack = []; - let trans = []; - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - function checkWidth() { - if (width == null) width = stack.shift() + privateDict.nominalWidthX; - } - function parseStems() { - if (stack.length % 2 !== 0) checkWidth(); - nStems += stack.length >> 1; - return stack.length = 0; - } - function moveTo(x, y) { - if (open) path.closePath(); - path.moveTo(x, y); - open = true; - } - let parse = function() { - while(stream.pos < end){ - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - switch(op){ - case 1: - case 3: - case 18: - case 23: - parseStems(); - break; - case 4: - if (stack.length > 1) checkWidth(); - y += stack.shift(); - moveTo(x, y); - break; - case 5: - while(stack.length >= 2){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - case 6: - case 7: - phase = op === 6; - while(stack.length >= 1){ - if (phase) x += stack.shift(); - else y += stack.shift(); - path.lineTo(x, y); - phase = !phase; - } - break; - case 8: - while(stack.length > 0){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 11: - if (cff.version >= 2) break; - return; - case 14: - if (cff.version >= 2) break; - if (stack.length > 0) checkWidth(); - if (open) { - path.closePath(); - open = false; - } - break; - case 15: - if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1'); - vsindex = stack.pop(); - break; - case 16: - { - if (cff.version < 2) throw new Error('blend operator not supported in CFF v1'); - if (!variationProcessor) throw new Error('blend operator in non-variation font'); - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - for(let i = 0; i < numBlends; i++){ - let sum = stack[base + i]; - for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++]; - stack[base + i] = sum; - } - while(numOperands--)stack.pop(); - break; - } - case 19: - case 20: - parseStems(); - stream.pos += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2) checkWidth(); - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - case 22: - if (stack.length > 1) checkWidth(); - x += stack.shift(); - moveTo(x, y); - break; - case 24: - while(stack.length >= 8){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - case 25: - while(stack.length >= 8){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while(stack.length >= 4){ - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while(stack.length >= 4){ - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - stack.push(stream.readInt16BE()); - break; - case 29: - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 30: - case 31: - phase = op === 31; - while(stack.length >= 4){ - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - case 12: - op = stream.readUInt8(); - switch(op){ - case 3: - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - case 4: - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - case 5: - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - case 9: - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case 10: - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - case 11: - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - case 12: - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - case 14: - a = stack.pop(); - stack.push(-a); - break; - case 15: - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - case 18: - stack.pop(); - break; - case 20: - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - case 21: - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - case 22: - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - case 23: - stack.push(Math.random()); - break; - case 24: - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - case 26: - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case 27: - a = stack.pop(); - stack.push(a, a); - break; - case 28: - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - case 29: - idx = stack.pop(); - if (idx < 0) idx = 0; - else if (idx > stack.length - 1) idx = stack.length - 1; - stack.push(stack[idx]); - break; - case 30: - let n = stack.pop(); - let j = stack.pop(); - if (j >= 0) while(j > 0){ - var t = stack[n - 1]; - for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i]; - stack[0] = t; - j--; - } - else while(j < 0){ - var t = stack[0]; - for(let i = 0; i <= n; i++)stack[i] = stack[i + 1]; - stack[n - 1] = t; - j++; - } - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 35: - pts = []; - for(let i = 0; i <= 5; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 37: - let startx = x; - let starty = y; - pts = []; - for(let i = 0; i <= 4; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - if (Math.abs(x - startx) > Math.abs(y - starty)) { - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - default: - throw new Error(`Unknown op: ${op}`); - } - } else if (op < 247) stack.push(op - 139); - else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else stack.push(stream.readInt32BE() / 65536); - } - }; - parse(); - if (open) path.closePath(); - return path; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'CFF'); - } -} - - - - - -let $55855d6d316b015e$var$SBIXImage = new $gfJaN$restructure.Struct({ - originX: $gfJaN$restructure.uint16, - originY: $gfJaN$restructure.uint16, - type: new $gfJaN$restructure.String(4), - data: new $gfJaN$restructure.Buffer((t)=>t.parent.buflen - t._currentOffset) -}); -class $55855d6d316b015e$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ getImageForSize(size) { - for(let i = 0; i < this._font.sbix.imageTables.length; i++){ - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) break; - } - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - if (start === end) return null; - this._font.stream.pos = start; - return $55855d6d316b015e$var$SBIXImage.decode(this._font.stream, { - buflen: end - start - }); - } - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, { - height: size, - x: img.originX, - y: (this.bbox.minY - img.originY) * scale - }); - } - if (this._font.sbix.flags.renderOutlines) super.render(ctx, size); - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'SBIX'); - } -} - - - - - -class $42d9dbd2de9ee2d8$var$COLRLayer { - constructor(glyph, color){ - this.glyph = glyph; - this.color = color; - } -} -class $42d9dbd2de9ee2d8$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getBBox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for(let i = 0; i < this.layers.length; i++){ - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - return bbox; - } - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - while(low <= high){ - let mid = low + high >> 1; - var rec = colr.baseGlyphRecord[mid]; - if (this.id < rec.gid) high = mid - 1; - else if (this.id > rec.gid) low = mid + 1; - else { - var baseLayer = rec; - break; - } - } - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - return [ - new $42d9dbd2de9ee2d8$var$COLRLayer(g, color) - ]; - } - // otherwise, return an array of all the layers - let layers = []; - for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){ - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new $42d9dbd2de9ee2d8$var$COLRLayer(g, color)); - } - return layers; - } - render(ctx, size) { - for (let { glyph: glyph, color: color } of this.layers){ - ctx.fillColor([ - color.red, - color.green, - color.blue - ], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - return; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'COLR'); - } -} - - -const $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD = 0x8000; -const $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE = 0x4000; -const $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS = 0x2000; -const $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$POINTS_ARE_WORDS = 0x80; -const $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK = 0x7f; -const $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO = 0x80; -const $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS = 0x40; -const $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK = 0x3f; -class $7586bb9ea67c41d8$export$2e2bcd8739ae039 { - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for(var i = 0; i < this.font.fvar.axis.length; i++){ - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){ - let segment = this.font.avar.segment[i]; - for(let j = 0; j < segment.correspondence.length; j++){ - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord; - break; - } - } - } - return normalized; - } - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) return; - let { gvar: gvar } = this.font; - if (gid >= gvar.glyphCount) return; - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) return; - // Read the gvar data for this glyph - let { stream: stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) return; - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - if (tupleCount & $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - let origPoints = glyphPoints.map((pt)=>pt.copy()); - tupleCount &= $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK; - for(let i = 0; i < tupleCount; i++){ - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - if (tupleIndex & $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384); - } else { - if ((tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table'); - var tupleCoords = gvar.globalCoords[tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK]; - } - if (tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) { - var startCoords = []; - for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384); - var endCoords = []; - for(let a = 0; a < gvar.axisCount; a++)endCoords.push(stream.readInt16BE() / 16384); - } - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - var here = stream.pos; - stream.pos = offsetToData; - if (tupleIndex & $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints(); - else var points = sharedPoints; - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){ - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - else { - let outPoints = origPoints.map((pt)=>pt.copy()); - let hasDelta = glyphPoints.map(()=>false); - for(let i = 0; i < points.length; i++){ - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - for(let i = 0; i < glyphPoints.length; i++){ - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - offsetToData += tupleDataSize; - stream.pos = here; - } - } - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - if (count & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS) count = (count & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) + 1; - let fn = run & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - for(let j = 0; j < runCount && i < count; j++){ - point += fn.call(stream); - points[i++] = point; - } - } - return points; - } - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK) + 1; - if (run & $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO) i += runCount; - else { - let fn = run & $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream); - } - } - return deltas; - } - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar: gvar } = this.font; - let factor = 1; - for(let i = 0; i < gvar.axisCount; i++){ - if (tupleCoords[i] === 0) continue; - if (normalized[i] === 0) return 0; - if ((tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) === 0) { - if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0; - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0; - else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - return factor; - } - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) return; - let point = 0; - while(point < points.length){ - let firstPoint = point; - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while(!pt.endContour)pt = points[++endPoint]; - // find the first point that has a delta - while(point <= endPoint && !hasDelta[point])point++; - if (point > endPoint) continue; - let firstDelta = point; - let curDelta = point; - point++; - while(point <= endPoint){ - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - point++; - } - // shift contour if we only have a single delta - if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - point = endPoint + 1; - } - } - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) return; - let iterable = [ - 'x', - 'y' - ]; - for(let i = 0; i < iterable.length; i++){ - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - for(let p = p1; p <= p2; p++){ - let out = inPoints[p][k]; - if (out <= in1) out += out1 - in1; - else if (out >= in2) out += out2 - in2; - else out = out1 + (out - in1) * scale; - outPoints[p][k] = out; - } - } - } - } - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - if (deltaX === 0 && deltaY === 0) return; - for(let p = p1; p <= p2; p++)if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1; - let entryFormat = table.advanceWidthMapping.entryFormat; - ({ outerIndex: outerIndex, innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) return 0; - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) return 0; - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master]; - return netAdjustment; - } - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) return this.blendVectors.get(varData); - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - // outer loop steps through master designs to be blended - for(let master = 0; master < varData.regionIndexCount; master++){ - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - // inner loop steps through axes in this region - for(let j = 0; j < axes.length; j++){ - let axis = axes[j]; - let axisScalar; - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1; - else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1; - else if (axis.peakCoord === 0) axisScalar = 1; - else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0; - else { - if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1; - else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON); - else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - // take product of all the axis scalars - scalar *= axisScalar; - } - blendVector[master] = scalar; - } - this.blendVectors.set(varData, blendVector); - return blendVector; - } - constructor(font, coords){ - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } -} - - - - -const $a8ac370803cb82cf$var$resolved = Promise.resolve(); -class $a8ac370803cb82cf$export$2e2bcd8739ae039 { - includeGlyph(glyph) { - if (typeof glyph === 'object') glyph = glyph.id; - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - return this.mapping[glyph]; - } - constructor(font){ - this.font = font; - this.glyphs = []; - this.mapping = {}; - // always include the missing glyph - this.includeGlyph(0); - } -} - - - - - -// Flags for simple glyphs -const $2784eedf0b35a048$var$ON_CURVE = 1; -const $2784eedf0b35a048$var$X_SHORT_VECTOR = 2; -const $2784eedf0b35a048$var$Y_SHORT_VECTOR = 4; -const $2784eedf0b35a048$var$REPEAT = 8; -const $2784eedf0b35a048$var$SAME_X = 16; -const $2784eedf0b35a048$var$SAME_Y = 32; -class $2784eedf0b35a048$var$Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - static encode(stream, value) { - if (value >= 0 && value <= 255) stream.writeUInt8(value); - else stream.writeInt16BE(value); - } -} -let $2784eedf0b35a048$var$Glyf = new $gfJaN$restructure.Struct({ - numberOfContours: $gfJaN$restructure.int16, - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16, - endPtsOfContours: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numberOfContours'), - instructions: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16), - flags: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 0), - xPoints: new $gfJaN$restructure.Array($2784eedf0b35a048$var$Point, 0), - yPoints: new $gfJaN$restructure.Array($2784eedf0b35a048$var$Point, 0) -}); -class $2784eedf0b35a048$export$2e2bcd8739ae039 { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - for(let i = 0; i < path.commands.length; i++){ - let c = path.commands[i]; - for(let j = 0; j < c.args.length; j += 2){ - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - if (x === midX && y === midY) continue; - } - } - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $2784eedf0b35a048$var$ON_CURVE; - flag = this._encodePoint(x, lastX, xPoints, flag, $2784eedf0b35a048$var$X_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, $2784eedf0b35a048$var$Y_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_Y); - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= $2784eedf0b35a048$var$REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - flags.push(flag); - lastFlag = flag; - } - lastX = x; - lastY = y; - pointCount++; - } - if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1); - } - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1); - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - let size = $2784eedf0b35a048$var$Glyf.size(glyf); - let tail = 4 - size % 4; - let stream = new $gfJaN$restructure.EncodeStream(size + tail); - $2784eedf0b35a048$var$Glyf.encode(stream, glyf); - // Align to 4-byte length - if (tail !== 0) stream.fill(0, tail); - return stream.buffer; - } - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - if (value === last) flag |= sameFlag; - else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) diff = -diff; - else flag |= sameFlag; - } - points.push(diff); - } - return flag; - } -} - - -class $fe042f4b88f46896$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - let buffer = stream.readBuffer(nextOffset - curOffset); - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components){ - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - this.offset += buffer.length; - return this.glyf.length - 1; - } - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - this.hmtx = { - metrics: [], - bearings: [] - }; - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]); - let maxp = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - this.loca.offsets.push(this.offset); - let head = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.head); - head.indexToLocFormat = this.loca.version; - let hhea = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - // TODO: subset prep, cvt, fpgm? - return (0, $df50e1efe10a1247$export$2e2bcd8739ae039).toBuffer({ - tables: { - head: head, - hhea: hhea, - loca: this.loca, - maxp: maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - } - }); - } - constructor(font){ - super(font); - this.glyphEncoder = new (0, $2784eedf0b35a048$export$2e2bcd8739ae039); - } -} - - - - - - -class $ec40f80c07a4e08a$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - for (let gid of this.glyphs){ - this.charstrings.push(this.cff.getCharString(gid)); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedGsubrs)gsubrs[subr] = true; - } - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - subsetSubrs(subrs, used) { - let res = []; - for(let i = 0; i < subrs.length; i++){ - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else res.push(new Uint8Array([ - 11 - ])); // return - } - return res; - } - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs){ - let fd = this.cff.fdForGlyph(gid); - if (fd == null) continue; - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true; - } - for(let i = 0; i < topDict.FDArray.length; i++){ - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - return; - } - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs){ - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[subr] = true; - } - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - topDict.FDArray = [ - { - Private: privateDict - } - ]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [ - { - first: 0, - fd: 0 - } - ], - sentinel: this.charstrings.length - }; - } - addString(string) { - if (!string) return null; - if (!this.strings) this.strings = []; - this.strings.push(string); - return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length + this.strings.length - 1; - } - encode() { - this.subsetCharstrings(); - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [ - { - first: 1, - nLeft: this.charstrings.length - 2 - } - ] - }; - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - for (let key of [ - 'version', - 'Notice', - 'Copyright', - 'FullName', - 'FamilyName', - 'Weight', - 'PostScript', - 'BaseFontName', - 'FontName' - ])topDict[key] = this.addString(this.cff.string(topDict[key])); - topDict.ROS = [ - this.addString('Adobe'), - this.addString('Identity'), - 0 - ]; - topDict.CIDCount = this.charstrings.length; - if (this.cff.isCIDFont) this.subsetFontdict(topDict); - else this.createCIDFontdict(topDict); - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [ - this.cff.postscriptName - ], - topDictIndex: [ - topDict - ], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - return (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).toBuffer(top); - } - constructor(font){ - super(font); - this.cff = this.font['CFF ']; - if (!this.cff) throw new Error('Not a CFF Font'); - } -} - - - - -class $0a8ef2660a6ce4b6$export$2e2bcd8739ae039 { - static probe(buffer) { - let format = (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - _getTable(table) { - if (!(table.tag in this._tables)) try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if ($59aa4ed98453e1d4$export$bd5c5d8b8dcafd78) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - return this._tables[table.tag]; - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - return null; - } - _decodeDirectory() { - return this.directory = (0, $df50e1efe10a1247$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _decodeTable(table) { - let pos = this.stream.pos; - let stream = this._getTableStream(table.tag); - let result = (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[table.tag].decode(stream, this, table.length); - this.stream.pos = pos; - return result; - } - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ getName(key, lang = this.defaultLanguage || $59aa4ed98453e1d4$export$42940898df819940) { - let record = this.name && this.name.records[key]; - if (record) // Attempt to retrieve the entry, depending on which translation is available: - return record[lang] || record[this.defaultLanguage] || record[$59aa4ed98453e1d4$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null; - return null; - } - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ get postscriptName() { - return this.getName('postscriptName'); - } - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ get fullName() { - return this.getName('fullName'); - } - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ get familyName() { - return this.getName('fontFamily'); - } - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ get subfamilyName() { - return this.getName('fontSubfamily'); - } - /** - * The font's copyright information - * @type {string} - */ get copyright() { - return this.getName('copyright'); - } - /** - * The font's version number - * @type {string} - */ get version() { - return this.getName('version'); - } - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ get ascent() { - return this.hhea.ascent; - } - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ get descent() { - return this.hhea.descent; - } - /** - * The amount of space that should be included between lines - * @type {number} - */ get lineGap() { - return this.hhea.lineGap; - } - /** - * The offset from the normal underline position that should be used - * @type {number} - */ get underlinePosition() { - return this.post.underlinePosition; - } - /** - * The weight of the underline that should be used - * @type {number} - */ get underlineThickness() { - return this.post.underlineThickness; - } - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ get italicAngle() { - return this.post.italicAngle; - } - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - /** - * The number of glyphs in the font. - * @type {number} - */ get numGlyphs() { - return this.maxp.numGlyphs; - } - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ get unitsPerEm() { - return this.head.unitsPerEm; - } - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ get bbox() { - return Object.freeze(new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - get _cmapProcessor() { - return new (0, $0d6e160064c86e50$export$2e2bcd8739ae039)(this.cmap); - } - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [ - codePoint - ]); - } - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - while(idx <= len){ - let code = 0; - let nextState = 0; - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; - } else idx++; - if (state === 0 && nextState === 1) // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [ - last, - code - ])); - else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - last = code; - state = nextState; - } - return glyphs; - } - get _layoutEngine() { - return new (0, $9d641258c9d7180d$export$2e2bcd8739ae039)(this); - } - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) this._glyphs[glyph] = new (0, $f680320fa07ef53d$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new (0, $7ee0705195f3b047$export$2e2bcd8739ae039)(glyph, characters, this); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) this._glyphs[glyph] = new (0, $55855d6d316b015e$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new (0, $42d9dbd2de9ee2d8$export$2e2bcd8739ae039)(glyph, characters, this); - else this._getBaseGlyph(glyph, characters); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a Subset for this font. - * @return {Subset} - */ createSubset() { - if (this.directory.tables['CFF ']) return new (0, $ec40f80c07a4e08a$export$2e2bcd8739ae039)(this); - return new (0, $fe042f4b88f46896$export$2e2bcd8739ae039)(this); - } - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ get variationAxes() { - let res = {}; - if (!this.fvar) return res; - for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - return res; - } - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ get namedVariations() { - let res = {}; - if (!this.fvar) return res; - for (let instance of this.fvar.instance){ - let settings = {}; - for(let i = 0; i < this.fvar.axis.length; i++){ - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - res[instance.name.en] = settings; - } - return res; - } - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ getVariation(settings) { - if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - if (typeof settings === 'string') settings = this.namedVariations[settings]; - if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.'); - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i)=>{ - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - else return axis.defaultValue; - }); - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - let font = new $0a8ef2660a6ce4b6$export$2e2bcd8739ae039(stream, coords); - font._tables = this._tables; - return font; - } - get _variationProcessor() { - if (!this.fvar) return null; - let variationCoords = this.variationCoords; - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) return null; - if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue); - return new (0, $7586bb9ea67c41d8$export$2e2bcd8739ae039)(this, variationCoords); - } - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } - constructor(stream, variationCoords = null){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - // define properties for each table to lazily parse - for(let tag in this.directory.tables){ - let table = this.directory.tables[tag]; - if ((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag] && table.length > 0) Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_cmapProcessor", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "characterSet", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_layoutEngine", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "variationAxes", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "namedVariations", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_variationProcessor", null); - - - - - - -let $89f72d2d7c9afc0d$var$WOFFDirectoryEntry = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - offset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void', { - type: 'global' - }), - compLength: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - origChecksum: $gfJaN$restructure.uint32 -}); -let $89f72d2d7c9afc0d$var$WOFFDirectory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - flavor: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - numTables: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - totalSfntSize: $gfJaN$restructure.uint32, - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - metaOffset: $gfJaN$restructure.uint32, - metaLength: $gfJaN$restructure.uint32, - metaOrigLength: $gfJaN$restructure.uint32, - privOffset: $gfJaN$restructure.uint32, - privLength: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($89f72d2d7c9afc0d$var$WOFFDirectoryEntry, 'numTables') -}); -$89f72d2d7c9afc0d$var$WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -var $89f72d2d7c9afc0d$export$2e2bcd8739ae039 = $89f72d2d7c9afc0d$var$WOFFDirectory; - - - - - - -class $8a0a49baaf5d834d$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOFF'; - } - _decodeDirectory() { - this.directory = (0, $89f72d2d7c9afc0d$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = (0, ($parcel$interopDefault($gfJaN$tinyinflate)))(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new $gfJaN$restructure.DecodeStream(buf); - } else return this.stream; - } - return null; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF'); - } -} - - - - - - - - - -class $44b9edca0e403d6d$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - _getCBox() { - return this.path.bbox; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} - - - -const $2f0bfd9a5c1d7b58$var$Base128 = { - decode (stream) { - let result = 0; - let iterable = [ - 0, - 1, - 2, - 3, - 4 - ]; - for(let j = 0; j < iterable.length; j++){ - let i = iterable[j]; - let code = stream.readUInt8(); - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) throw new Error('Overflow'); - result = result << 7 | code & 0x7f; - if ((code & 0x80) === 0) return result; - } - throw new Error('Bad base 128 number'); - } -}; -let $2f0bfd9a5c1d7b58$var$knownTags = [ - 'cmap', - 'head', - 'hhea', - 'hmtx', - 'maxp', - 'name', - 'OS/2', - 'post', - 'cvt ', - 'fpgm', - 'glyf', - 'loca', - 'prep', - 'CFF ', - 'VORG', - 'EBDT', - 'EBLC', - 'gasp', - 'hdmx', - 'kern', - 'LTSH', - 'PCLT', - 'VDMX', - 'vhea', - 'vmtx', - 'BASE', - 'GDEF', - 'GPOS', - 'GSUB', - 'EBSC', - 'JSTF', - 'MATH', - 'CBDT', - 'CBLC', - 'COLR', - 'CPAL', - 'SVG ', - 'sbix', - 'acnt', - 'avar', - 'bdat', - 'bloc', - 'bsln', - 'cvar', - 'fdsc', - 'feat', - 'fmtx', - 'fvar', - 'gvar', - 'hsty', - 'just', - 'lcar', - 'mort', - 'morx', - 'opbd', - 'prop', - 'trak', - 'Zapf', - 'Silf', - 'Glat', - 'Gloc', - 'Feat', - 'Sill' -]; -let $2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry = new $gfJaN$restructure.Struct({ - flags: $gfJaN$restructure.uint8, - customTag: new $gfJaN$restructure.Optional(new $gfJaN$restructure.String(4), (t)=>(t.flags & 0x3f) === 0x3f), - tag: (t)=>t.customTag || $2f0bfd9a5c1d7b58$var$knownTags[t.flags & 0x3f], - length: $2f0bfd9a5c1d7b58$var$Base128, - transformVersion: (t)=>t.flags >>> 6 & 0x03, - transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new $gfJaN$restructure.Optional($2f0bfd9a5c1d7b58$var$Base128, (t)=>t.transformed) -}); -let $2f0bfd9a5c1d7b58$var$WOFF2Directory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - flavor: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - numTables: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - totalSfntSize: $gfJaN$restructure.uint32, - totalCompressedSize: $gfJaN$restructure.uint32, - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - metaOffset: $gfJaN$restructure.uint32, - metaLength: $gfJaN$restructure.uint32, - metaOrigLength: $gfJaN$restructure.uint32, - privOffset: $gfJaN$restructure.uint32, - privLength: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry, 'numTables') -}); -$2f0bfd9a5c1d7b58$var$WOFF2Directory.process = function() { - let tables = {}; - for(let i = 0; i < this.tables.length; i++){ - let table = this.tables[i]; - tables[table.tag] = table; - } - return this.tables = tables; -}; -var $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039 = $2f0bfd9a5c1d7b58$var$WOFF2Directory; - - - -class $333fb94547d9fb5c$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOF2'; - } - _decodeDirectory() { - this.directory = (0, $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039).decode(this.stream); - this._dataPos = this.stream.pos; - } - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - let decompressedSize = 0; - for(let tag in this.directory.tables){ - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; - } - let decompressed = (0, ($parcel$interopDefault($gfJaN$brotlidecompressjs)))(buffer, decompressedSize); - if (!decompressed) throw new Error('Error decoding compressed data in WOFF2'); - this.stream = new $gfJaN$restructure.DecodeStream(decompressed); - this._decompressed = true; - } - } - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) this._transformGlyfTable(); - return this._glyphs[glyph] = new (0, $44b9edca0e403d6d$export$2e2bcd8739ae039)(glyph, characters, this); - } else return super._getBaseGlyph(glyph, characters); - } - } - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = $333fb94547d9fb5c$var$GlyfTable.decode(this.stream); - let glyphs = []; - for(let index = 0; index < table.numGlyphs; index++){ - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - if (nContours > 0) { - let nPoints = []; - let totalPoints = 0; - for(let i = 0; i < nContours; i++){ - let r = $333fb94547d9fb5c$var$read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - glyph.points = $333fb94547d9fb5c$var$decodeTriplet(table.flags, table.glyphs, totalPoints); - for(let i = 0; i < nContours; i++)glyph.points[nPoints[i] - 1].endContour = true; - var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } else if (nContours < 0) { - let haveInstructions = (0, $f680320fa07ef53d$export$2e2bcd8739ae039).prototype._decodeComposite.call({ - _font: this - }, glyph, table.composites); - if (haveInstructions) var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } - glyphs.push(glyph); - } - this._transformedGlyphs = glyphs; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} -// Special class that accepts a length and returns a sub-stream for that data -class $333fb94547d9fb5c$var$Substream { - decode(stream, parent) { - return new $gfJaN$restructure.DecodeStream(this._buf.decode(stream, parent)); - } - constructor(length){ - this.length = length; - this._buf = new $gfJaN$restructure.Buffer(length); - } -} -// This struct represents the entire glyf table -let $333fb94547d9fb5c$var$GlyfTable = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - numGlyphs: $gfJaN$restructure.uint16, - indexFormat: $gfJaN$restructure.uint16, - nContourStreamSize: $gfJaN$restructure.uint32, - nPointsStreamSize: $gfJaN$restructure.uint32, - flagStreamSize: $gfJaN$restructure.uint32, - glyphStreamSize: $gfJaN$restructure.uint32, - compositeStreamSize: $gfJaN$restructure.uint32, - bboxStreamSize: $gfJaN$restructure.uint32, - instructionStreamSize: $gfJaN$restructure.uint32, - nContours: new $333fb94547d9fb5c$var$Substream('nContourStreamSize'), - nPoints: new $333fb94547d9fb5c$var$Substream('nPointsStreamSize'), - flags: new $333fb94547d9fb5c$var$Substream('flagStreamSize'), - glyphs: new $333fb94547d9fb5c$var$Substream('glyphStreamSize'), - composites: new $333fb94547d9fb5c$var$Substream('compositeStreamSize'), - bboxes: new $333fb94547d9fb5c$var$Substream('bboxStreamSize'), - instructions: new $333fb94547d9fb5c$var$Substream('instructionStreamSize') -}); -const $333fb94547d9fb5c$var$WORD_CODE = 253; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2 = 254; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1 = 255; -const $333fb94547d9fb5c$var$LOWEST_U_CODE = 253; -function $333fb94547d9fb5c$var$read255UInt16(stream) { - let code = stream.readUInt8(); - if (code === $333fb94547d9fb5c$var$WORD_CODE) return stream.readUInt16BE(); - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE; - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE * 2; - return code; -} -function $333fb94547d9fb5c$var$withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} -function $333fb94547d9fb5c$var$decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - for(let i = 0; i < nPoints; i++){ - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - if (flag < 10) { - dx = 0; - dy = $333fb94547d9fb5c$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - } else if (flag < 20) { - dx = $333fb94547d9fb5c$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); - dy = 0; - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - } else if (flag < 120) { - var b0 = flag - 84; - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - } else { - dx = $333fb94547d9fb5c$var$withSign(flag, glyphs.readUInt16BE()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, glyphs.readUInt16BE()); - } - x += dx; - y += dy; - res.push(new (0, $f680320fa07ef53d$export$baf26146a414f24a)(onCurve, false, x, y)); - } - return res; -} - - - - - - - - -let $e0b2de9958441c02$var$TTCHeader = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - 0x00010000: { - numFonts: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numFonts') - }, - 0x00020000: { - numFonts: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numFonts'), - dsigTag: $gfJaN$restructure.uint32, - dsigLength: $gfJaN$restructure.uint32, - dsigOffset: $gfJaN$restructure.uint32 - } -}); -class $e0b2de9958441c02$export$2e2bcd8739ae039 { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'ttcf'; - } - getFont(name) { - for (let offset of this.header.offsets){ - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let offset of this.header.offsets){ - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTC'); - this.stream = stream; - if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection'); - this.header = $e0b2de9958441c02$var$TTCHeader.decode(stream); - } -} - - - - - -let $d0fe640dc6c78783$var$DFontName = new $gfJaN$restructure.String($gfJaN$restructure.uint8); -let $d0fe640dc6c78783$var$DFontData = new $gfJaN$restructure.Struct({ - len: $gfJaN$restructure.uint32, - buf: new $gfJaN$restructure.Buffer('len') -}); -let $d0fe640dc6c78783$var$Ref = new $gfJaN$restructure.Struct({ - id: $gfJaN$restructure.uint16, - nameOffset: $gfJaN$restructure.int16, - attr: $gfJaN$restructure.uint8, - dataOffset: $gfJaN$restructure.uint24, - handle: $gfJaN$restructure.uint32 -}); -let $d0fe640dc6c78783$var$Type = new $gfJaN$restructure.Struct({ - name: new $gfJaN$restructure.String(4), - maxTypeIndex: $gfJaN$restructure.uint16, - refList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array($d0fe640dc6c78783$var$Ref, (t)=>t.maxTypeIndex + 1), { - type: 'parent' - }) -}); -let $d0fe640dc6c78783$var$TypeList = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - types: new $gfJaN$restructure.Array($d0fe640dc6c78783$var$Type, (t)=>t.length + 1) -}); -let $d0fe640dc6c78783$var$DFontMap = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, 24), - typeList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $d0fe640dc6c78783$var$TypeList), - nameListOffset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, 'void') -}); -let $d0fe640dc6c78783$var$DFontHeader = new $gfJaN$restructure.Struct({ - dataOffset: $gfJaN$restructure.uint32, - map: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $d0fe640dc6c78783$var$DFontMap), - dataLength: $gfJaN$restructure.uint32, - mapLength: $gfJaN$restructure.uint32 -}); -class $d0fe640dc6c78783$export$2e2bcd8739ae039 { - static probe(buffer) { - let stream = new $gfJaN$restructure.DecodeStream(buffer); - try { - var header = $d0fe640dc6c78783$var$DFontHeader.decode(stream); - } catch (e) { - return false; - } - for (let type of header.map.typeList.types){ - if (type.name === 'sfnt') return true; - } - return false; - } - getFont(name) { - if (!this.sfnt) return null; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer.slice(pos)); - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'DFont'); - this.stream = stream; - this.header = $d0fe640dc6c78783$var$DFontHeader.decode(this.stream); - for (let type of this.header.map.typeList.types){ - for (let ref of type.refList)if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = $d0fe640dc6c78783$var$DFontName.decode(this.stream); - } else ref.name = null; - if (type.name === 'sfnt') this.sfnt = type; - } - } -} - - -// Register font formats -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $8a0a49baaf5d834d$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $333fb94547d9fb5c$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $e0b2de9958441c02$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $d0fe640dc6c78783$export$2e2bcd8739ae039)); -$parcel$exportWildcard(module.exports, $59aa4ed98453e1d4$exports); - - -//# sourceMappingURL=browser.cjs.map diff --git a/skills/flight-finder/node_modules/fontkit/dist/browser.cjs.map b/skills/flight-finder/node_modules/fontkit/dist/browser.cjs.map deleted file mode 100644 index 817431e..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/browser.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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AEF;QACE,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,IAAI;QACpD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,IAAI;QACpD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,IAAI;QACpD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,IAAI;QACpD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,IAAI;QACpD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,GAAG;QAAa,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IAAI;QAAY,IAAI;QAAY,IAAI;QAAY,KAAK;QACrD,IA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","sources":["src/index.js","src/base.js","src/TTFFont.js","src/decorators.js","src/tables/directory.js","src/tables/index.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/tables/name.js","src/encodings.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFFont.js","src/cff/CFFIndex.js","src/cff/CFFTop.js","src/cff/CFFDict.js","src/cff/CFFOperand.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/variations.js","src/tables/opentype.js","src/tables/VORG.js","src/tables/EBLC.js","src/tables/EBDT.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/bsln.js","src/tables/aat.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/CmapProcessor.js","src/utils.js","src/layout/LayoutEngine.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/layout/GlyphRun.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphPosition.js","src/aat/AATLayoutEngine.js","src/aat/AATFeatureMap.js","src/aat/AATMorxProcessor.js","src/aat/AATStateMachine.js","src/aat/AATLookupTable.js","src/opentype/OTLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/index.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/shapers/HangulShaper.js","src/opentype/GlyphInfo.js","src/opentype/OTProcessor.js","src/opentype/GlyphIterator.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/indic.json","src/opentype/shapers/use.json","src/opentype/shapers/indic-data.js","src/opentype/shapers/UniversalShaper.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/glyph/TTFGlyph.js","src/glyph/Glyph.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/TTFSubset.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/CFFSubset.js","src/WOFFFont.js","src/tables/WOFFDirectory.js","src/WOFF2Font.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/TrueTypeCollection.js","src/DFont.js"],"sourcesContent":["import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base';\nimport TTFFont from './TTFFont';\nimport WOFFFont from './WOFFFont';\nimport WOFF2Font from './WOFF2Font';\nimport TrueTypeCollection from './TrueTypeCollection';\nimport DFont from './DFont';\n\n// Register font formats\nregisterFormat(TTFFont);\nregisterFormat(WOFFFont);\nregisterFormat(WOFF2Font);\nregisterFormat(TrueTypeCollection);\nregisterFormat(DFont);\n\nexport * from './base';\n","import {DecodeStream} from 'restructure';\n\nexport let logErrors = false;\n\nlet formats = [];\nexport function registerFormat(format) {\n formats.push(format);\n};\n\nexport function create(buffer, postscriptName) {\n for (let i = 0; i < formats.length; i++) {\n let format = formats[i];\n if (format.probe(buffer)) {\n let font = new format(new DecodeStream(buffer));\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n\n return font;\n }\n }\n\n throw new Error('Unknown font format');\n};\n\nexport let defaultLanguage = 'en';\nexport function setDefaultLanguage(lang = 'en') {\n defaultLanguage = lang;\n};\n","import * as r from 'restructure';\nimport { cache } from './decorators';\nimport * as fontkit from './base';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport CmapProcessor from './CmapProcessor';\nimport LayoutEngine from './layout/LayoutEngine';\nimport TTFGlyph from './glyph/TTFGlyph';\nimport CFFGlyph from './glyph/CFFGlyph';\nimport SBIXGlyph from './glyph/SBIXGlyph';\nimport COLRGlyph from './glyph/COLRGlyph';\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\nimport TTFSubset from './subset/TTFSubset';\nimport CFFSubset from './subset/CFFSubset';\nimport BBox from './glyph/BBox';\nimport { asciiDecoder } from './utils';\n\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\nexport default class TTFFont {\n type = 'TTF';\n\n static probe(buffer) {\n let format = asciiDecoder.decode(buffer.slice(0, 4));\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n }\n\n constructor(stream, variationCoords = null) {\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n this._decodeDirectory();\n\n // define properties for each table to lazily parse\n for (let tag in this.directory.tables) {\n let table = this.directory.tables[tag];\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n\n setDefaultLanguage(lang = null) {\n this.defaultLanguage = lang;\n }\n\n _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(`Error decoding table ${table.tag}`);\n console.error(e.stack);\n }\n }\n }\n\n return this._tables[table.tag];\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n\n return null;\n }\n\n _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {_startOffset: 0});\n }\n\n _decodeTable(table) {\n let pos = this.stream.pos;\n\n let stream = this._getTableStream(table.tag);\n let result = tables[table.tag].decode(stream, this, table.length);\n\n this.stream.pos = pos;\n return result;\n }\n\n /**\n * Gets a string from the font's `name` table\n * `lang` is a BCP-47 language code.\n * @return {string}\n */\n getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\n let record = this.name && this.name.records[key];\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return (\n record[lang]\n || record[this.defaultLanguage]\n || record[fontkit.defaultLanguage]\n || record['en']\n || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null\n );\n }\n\n return null;\n }\n\n /**\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n * @type {string}\n */\n get postscriptName() {\n return this.getName('postscriptName');\n }\n\n /**\n * The font's full name, e.g. \"Helvetica Bold\"\n * @type {string}\n */\n get fullName() {\n return this.getName('fullName');\n }\n\n /**\n * The font's family name, e.g. \"Helvetica\"\n * @type {string}\n */\n get familyName() {\n return this.getName('fontFamily');\n }\n\n /**\n * The font's sub-family, e.g. \"Bold\".\n * @type {string}\n */\n get subfamilyName() {\n return this.getName('fontSubfamily');\n }\n\n /**\n * The font's copyright information\n * @type {string}\n */\n get copyright() {\n return this.getName('copyright');\n }\n\n /**\n * The font's version number\n * @type {string}\n */\n get version() {\n return this.getName('version');\n }\n\n /**\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n * @type {number}\n */\n get ascent() {\n return this.hhea.ascent;\n }\n\n /**\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n * @type {number}\n */\n get descent() {\n return this.hhea.descent;\n }\n\n /**\n * The amount of space that should be included between lines\n * @type {number}\n */\n get lineGap() {\n return this.hhea.lineGap;\n }\n\n /**\n * The offset from the normal underline position that should be used\n * @type {number}\n */\n get underlinePosition() {\n return this.post.underlinePosition;\n }\n\n /**\n * The weight of the underline that should be used\n * @type {number}\n */\n get underlineThickness() {\n return this.post.underlineThickness;\n }\n\n /**\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\n * @type {number}\n */\n get italicAngle() {\n return this.post.italicAngle;\n }\n\n /**\n * The height of capital letters above the baseline.\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n * @type {number}\n */\n get capHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n\n /**\n * The height of lower case letters in the font.\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n * @type {number}\n */\n get xHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n\n /**\n * The number of glyphs in the font.\n * @type {number}\n */\n get numGlyphs() {\n return this.maxp.numGlyphs;\n }\n\n /**\n * The size of the font’s internal coordinate grid\n * @type {number}\n */\n get unitsPerEm() {\n return this.head.unitsPerEm;\n }\n\n /**\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n\n @cache\n get _cmapProcessor() {\n return new CmapProcessor(this.cmap);\n }\n\n /**\n * An array of all of the unicode code points supported by the font.\n * @type {number[]}\n */\n @cache\n get characterSet() {\n return this._cmapProcessor.getCharacterSet();\n }\n\n /**\n * Returns whether there is glyph in the font for the given unicode code point.\n *\n * @param {number} codePoint\n * @return {boolean}\n */\n hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n\n /**\n * Maps a single unicode code point to a Glyph object.\n * Does not perform any advanced substitutions (there is no context to do so).\n *\n * @param {number} codePoint\n * @return {Glyph}\n */\n glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n\n /**\n * Returns an array of Glyph objects for the given string.\n * This is only a one-to-one mapping from characters to glyphs.\n * For most uses, you should use font.layout (described below), which\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\n *\n * @param {string} string\n * @return {Glyph[]}\n */\n glyphsForString(string) {\n let glyphs = [];\n let len = string.length;\n let idx = 0;\n let last = -1;\n let state = -1;\n\n while (idx <= len) {\n let code = 0;\n let nextState = 0;\n\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n }\n\n // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\n } else {\n idx++;\n }\n\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n\n last = code;\n state = nextState;\n }\n\n return glyphs;\n }\n\n @cache\n get _layoutEngine() {\n return new LayoutEngine(this);\n }\n\n /**\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n *\n * @param {string} string\n * @param {string[]} [userFeatures]\n * @param {string} [script]\n * @param {string} [language]\n * @param {string} [direction]\n * @return {GlyphRun}\n */\n layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n\n /**\n * Returns an array of strings that map to the given glyph id.\n * @param {number} gid - glyph id\n */\n stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n\n /**\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n * (or mapped AAT tags) supported by the font.\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n *\n * @type {string[]}\n */\n get availableFeatures() {\n return this._layoutEngine.getAvailableFeatures();\n }\n\n getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n }\n\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a glyph object for the given glyph id.\n * You can pass the array of code points this glyph represents for\n * your use later, and it will be stored in the glyph object.\n *\n * @param {number} glyph\n * @param {number[]} characters\n * @return {Glyph}\n */\n getGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n\n } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a Subset for this font.\n * @return {Subset}\n */\n createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n\n return new TTFSubset(this);\n }\n\n /**\n * Returns an object describing the available variation axes\n * that this font supports. Keys are setting tags, and values\n * contain the axis name, range, and default value.\n *\n * @type {object}\n */\n @cache\n get variationAxes() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let axis of this.fvar.axis) {\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n\n return res;\n }\n\n /**\n * Returns an object describing the named variation instances\n * that the font designer has specified. Keys are variation names\n * and values are the variation settings for this instance.\n *\n * @type {object}\n */\n @cache\n get namedVariations() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let instance of this.fvar.instance) {\n let settings = {};\n for (let i = 0; i < this.fvar.axis.length; i++) {\n let axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n\n res[instance.name.en] = settings;\n }\n\n return res;\n }\n\n /**\n * Returns a new font with the given variation settings applied.\n * Settings can either be an instance name, or an object containing\n * variation tags as specified by the `variationAxes` property.\n *\n * @param {object} settings\n * @return {TTFFont}\n */\n getVariation(settings) {\n if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n }\n\n // normalize the coordinates\n let coords = this.fvar.axis.map((axis, i) => {\n let axisTag = axis.axisTag.trim();\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n\n let font = new TTFFont(stream, coords);\n font._tables = this._tables;\n\n return font;\n }\n\n @cache\n get _variationProcessor() {\n if (!this.fvar) {\n return null;\n }\n\n let variationCoords = this.variationCoords;\n\n // Ignore if no variation coords and not CFF2\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\n }\n\n return new GlyphVariationProcessor(this, variationCoords);\n }\n\n // Standardized format plugin API\n getFont(name) {\n return this.getVariation(name);\n }\n}\n","/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nexport function cache(target, key, descriptor) {\n if (descriptor.get) {\n let get = descriptor.get;\n descriptor.get = function() {\n let value = get.call(this);\n Object.defineProperty(this, key, { value });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n let fn = descriptor.value;\n\n return {\n get() {\n let cache = new Map;\n function memoized(...args) {\n let key = args.length > 0 ? args[0] : 'value';\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n let result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n Object.defineProperty(this, key, {value: memoized});\n return memoized;\n }\n };\n }\n}\n","import * as r from 'restructure';\nimport Tables from './';\n\nlet TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),\n length: r.uint32\n});\n\nlet Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nDirectory.preEncode = function() {\n if (!Array.isArray(this.tables)) {\n let tables = [];\n for (let tag in this.tables) {\n let table = this.tables[tag];\n if (table) {\n tables.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(Tables[tag], table),\n length: Tables[tag].size(table)\n });\n }\n }\n \n this.tables = tables;\n }\n\n this.tag = 'true';\n this.numTables = this.tables.length;\n\n let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\n let maxPowerOf2 = Math.pow(2, maxExponentFor2);\n\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nexport default Directory;\n","let tables = {};\nexport default tables;\n\n// Required Tables\nimport cmap from './cmap';\nimport head from './head';\nimport hhea from './hhea';\nimport hmtx from './hmtx';\nimport maxp from './maxp';\nimport name from './name';\nimport OS2 from './OS2';\nimport post from './post';\n\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = name;\ntables['OS/2'] = OS2;\ntables.post = post;\n\n\n// TrueType Outlines\nimport cvt from './cvt';\nimport fpgm from './fpgm';\nimport loca from './loca';\nimport prep from './prep';\nimport glyf from './glyf';\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf;\n\n\n// PostScript Outlines\nimport CFFFont from '../cff/CFFFont';\nimport VORG from './VORG';\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG;\n\n\n// Bitmap Glyphs\nimport EBLC from './EBLC';\nimport sbix from './sbix';\nimport COLR from './COLR';\nimport CPAL from './CPAL';\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL;\n\n\n// Advanced OpenType Tables\nimport BASE from './BASE';\nimport GDEF from './GDEF';\nimport GPOS from './GPOS';\nimport GSUB from './GSUB';\nimport JSTF from './JSTF';\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF;\n\n// OpenType variations tables\nimport HVAR from './HVAR';\n\ntables.HVAR = HVAR;\n\n// Other OpenType Tables\nimport DSIG from './DSIG';\nimport gasp from './gasp';\nimport hdmx from './hdmx';\nimport kern from './kern';\nimport LTSH from './LTSH';\nimport PCLT from './PCLT';\nimport VDMX from './VDMX';\nimport vhea from './vhea';\nimport vmtx from './vmtx';\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx;\n\n\n// Apple Advanced Typography Tables\nimport avar from './avar';\nimport bsln from './bsln';\nimport feat from './feat';\nimport fvar from './fvar';\nimport gvar from './gvar';\nimport just from './just';\nimport morx from './morx';\nimport opbd from './opbd';\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\n","import * as r from 'restructure';\n\nlet SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\n\nlet CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\n\nlet UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\n\nlet UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\n\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\n\nlet VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\n});\n\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: { // Byte encoding\n length: r.uint16, // Total table length in bytes (set to 262 for format 0)\n language: r.uint16, // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n\n 2: { // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys),\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n\n 4: { // Segment mapping to delta values\n length: r.uint16, // Total table length in bytes\n language: r.uint16, // Language code\n segCountX2: r.uint16,\n segCount: t => t.segCountX2 >> 1,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16), // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\n },\n\n 6: { // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n\n 8: { // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 10: { // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n\n 12: { // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 14: { // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\n\nlet CmapEntry = new r.Struct({\n platformID: r.uint16, // Platform identifier\n encodingID: r.uint16, // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\n});\n\n// character to glyph mapping\nexport default new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\n","import * as r from 'restructure';\n\n// font header\nexport default new r.Struct({\n version: r.int32, // 0x00010000 (version 1.0)\n revision: r.int32, // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32, // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16, // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16, // for all glyph bounding boxes\n yMin: r.int16, // for all glyph bounding boxes\n xMax: r.int16, // for all glyph bounding boxes\n yMax: r.int16, // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, [\n 'bold', 'italic', 'underline', 'outline',\n 'shadow', 'condensed', 'extended'\n ]),\n lowestRecPPEM: r.uint16, // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16, // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n});\n","import * as r from 'restructure';\n\n// horizontal header\nexport default new r.Struct({\n version: r.int32,\n ascent: r.int16, // Distance from baseline of highest ascender\n descent: r.int16, // Distance from baseline of lowest descender\n lineGap: r.int16, // Typographic line gap\n advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16, // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16, // 0 for vertical\n caretOffset: r.int16, // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n","import * as r from 'restructure';\n\nlet HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\n\nexport default new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\n// maxiumum profile\nexport default new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16, // The number of glyphs in the font\n maxPoints: r.uint16, // Maximum points in a non-composite glyph\n maxContours: r.uint16, // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16, // Maximum points in a composite glyph\n maxComponentContours: r.uint16, // Maximum contours in a composite glyph\n maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16, // Maximum points used in Z0\n maxStorage: r.uint16, // Number of Storage Area locations\n maxFunctionDefs: r.uint16, // Number of FDEFs\n maxInstructionDefs: r.uint16, // Number of IDEFs\n maxStackElements: r.uint16, // Maximum stack depth\n maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n","import * as r from 'restructure';\nimport {getEncoding, LANGUAGES} from '../encodings';\n\nlet NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16,\n new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\n { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\n )\n});\n\nlet LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\n});\n\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\n\nexport default NameTable;\n\nconst NAMES = [\n 'copyright',\n 'fontFamily',\n 'fontSubfamily',\n 'uniqueSubfamily',\n 'fullName',\n 'version',\n 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n 'trademark',\n 'manufacturer',\n 'designer',\n 'description',\n 'vendorURL',\n 'designerURL',\n 'license',\n 'licenseURL',\n null, // reserved\n 'preferredFamily',\n 'preferredSubfamily',\n 'compatibleFull',\n 'sampleText',\n 'postscriptCIDFontName',\n 'wwsFamilyName',\n 'wwsSubfamilyName'\n];\n\nNameTable.process = function(stream) {\n var records = {};\n for (let record of this.records) {\n // find out what language this is for\n let language = LANGUAGES[record.platformID][record.languageID];\n\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n }\n\n // if the nameID is >= 256, it is a font feature record (AAT)\n let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\n if (records[key] == null) {\n records[key] = {};\n }\n\n let obj = records[key];\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n\n this.records = records;\n};\n\nNameTable.preEncode = function() {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n\n let records = [];\n for (let key in this.records) {\n let val = this.records[key];\n if (key === 'fontFeatures') continue;\n\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: val.en.length * 2,\n string: val.en\n });\n\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\n","/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nexport function getEncoding(platformID, encodingID, languageID = 0) {\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n \n return ENCODINGS[platformID][encodingID];\n}\n\nconst SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']);\nconst MAC_ENCODINGS = {\n 'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',\n 'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',\n 'x-mac-greek': 'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\\u00AD',\n 'x-mac-icelandic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-inuit': 'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',\n 'x-mac-ce': 'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',\n 'x-mac-romanian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'\n};\n\nconst encodingCache = new Map();\n\nexport function getEncodingMapping(encoding) {\n let cached = encodingCache.get(encoding);\n if (cached) {\n return cached;\n }\n\n // These encodings aren't supported by TextDecoder.\n let mapping = MAC_ENCODINGS[encoding];\n if (mapping) {\n let res = new Map();\n for (let i = 0; i < mapping.length; i++) {\n res.set(mapping.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n\n // Only single byte encodings can be mapped 1:1.\n if (SINGLE_BYTE_ENCODINGS.has(encoding)) {\n // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings.\n // Use this to create a mapping of code points.\n let decoder = new TextDecoder(encoding);\n let mapping = new Uint8Array(0x80);\n for (let i = 0; i < 0x80; i++) {\n mapping[i] = 0x80 + i;\n }\n\n let res = new Map();\n let s = decoder.decode(mapping);\n for (let i = 0; i < 0x80; i++) {\n res.set(s.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n}\n\n// Map of platform ids to encoding ids.\nexport const ENCODINGS = [\n // unicode\n ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'],\n \n // macintosh\n // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n // 0\tRoman 17\tMalayalam\n // 1\tJapanese\t 18\tSinhalese\n // 2\tTraditional Chinese\t 19\tBurmese\n // 3\tKorean\t 20\tKhmer\n // 4\tArabic\t 21\tThai\n // 5\tHebrew\t 22\tLaotian\n // 6\tGreek\t 23\tGeorgian\n // 7\tRussian\t 24\tArmenian\n // 8\tRSymbol\t 25\tSimplified Chinese\n // 9\tDevanagari\t 26\tTibetan\n // 10\tGurmukhi\t 27\tMongolian\n // 11\tGujarati\t 28\tGeez\n // 12\tOriya\t 29\tSlavic\n // 13\tBengali\t 30\tVietnamese\n // 14\tTamil\t 31\tSindhi\n // 15\tTelugu\t 32\t(Uninterpreted)\n // 16\tKannada\n ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\n 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',\n 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\n 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk', \n 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],\n \n // ISO (deprecated)\n ['ascii', null, 'iso-8859-1'],\n \n // windows\n // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be']\n];\n\n// Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nexport const MAC_LANGUAGE_ENCODINGS = {\n 15: 'x-mac-icelandic',\n 17: 'x-mac-turkish',\n 18: 'x-mac-croatian',\n 24: 'x-mac-ce',\n 25: 'x-mac-ce',\n 26: 'x-mac-ce',\n 27: 'x-mac-ce',\n 28: 'x-mac-ce',\n 30: 'x-mac-icelandic',\n 37: 'x-mac-romanian',\n 38: 'x-mac-ce',\n 39: 'x-mac-ce',\n 40: 'x-mac-ce',\n 143: 'x-mac-inuit',\n 146: 'x-mac-gaelic'\n};\n\n// Map of platform ids to BCP-47 language codes.\nexport const LANGUAGES = [\n // unicode\n [],\n \n { // macintosh\n 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',\n 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',\n 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',\n 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',\n 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',\n 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',\n 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',\n 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',\n 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',\n 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',\n 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',\n 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',\n 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',\n 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',\n 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',\n 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',\n 16: 'mt', 46: 'be', 76: 'si', 139: 'su',\n 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',\n 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',\n 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',\n 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',\n 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',\n 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',\n 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',\n 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',\n 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',\n 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',\n 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',\n 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',\n 29: 'se', 59: 'ps', 89: 'sw',\n },\n \n // ISO (deprecated)\n [],\n \n { // windows \n 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', \n 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', \n 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', \n 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', \n 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', \n 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', \n 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', \n 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', \n 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', \n 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', \n 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', \n 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', \n 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', \n 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', \n 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', \n 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', \n 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', \n 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', \n 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', \n 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', \n 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', \n 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', \n 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', \n 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', \n 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', \n 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', \n 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', \n 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', \n 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', \n 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', \n 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', \n 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', \n 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', \n 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', \n 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', \n 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', \n 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', \n 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', \n 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', \n 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', \n 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', \n 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', \n 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', \n 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', \n 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', \n 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', \n 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', \n 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', \n 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', \n 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', \n 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', \n 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', \n }\n];\n","import * as r from 'restructure';\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16, // visual weight of stroke in glyphs\n usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null,\n null, null, null, 'noSubsetting', 'bitmapOnly'\n ]),\n ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16, // width of the strikeout stroke\n yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16, // classification of font-family design\n panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4), // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout',\n 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\n ]),\n usFirstCharIndex: r.uint16, // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n },\n\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\n\nlet versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\n\nexport default OS2;\n","import * as r from 'restructure';\n\n// PostScript information\nexport default new r.VersionedStruct(r.fixed32, {\n header: { // these fields exist at the top of all versions\n italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16, // Suggested values for the underline thickness\n isFixedPitch: r.uint32, // Whether the font is monospaced\n minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n },\n\n 1: {}, // version 1 has no additional fields\n\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n\n 3: {}, // version 3 has no additional fields\n\n 4: {\n map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\n }\n});\n","import * as r from 'restructure';\n\n// An array of predefined values accessible by instructions\nexport default new r.Struct({\n controlValues: new r.Array(r.int16)\n});\n","import * as r from 'restructure';\n\n// A list of instructions that are executed once when a font is first used.\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\nexport default new r.Struct({\n instructions: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\n\nloca.process = function() {\n if (this.version === 0 && !this._processed) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n this._processed = true;\n }\n};\n\nloca.preEncode = function() {\n if (this.version === 0 && this._processed !== false) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n this._processed = false;\n }\n};\n\nexport default loca;\n","import * as r from 'restructure';\n\n// Set of instructions executed whenever the point size or font transformation change\nexport default new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\n// only used for encoding\nexport default new r.Array(new r.Buffer);\n","import * as r from 'restructure';\nimport CFFIndex from './CFFIndex';\nimport CFFTop from './CFFTop';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport standardStrings from './CFFStandardStrings';\n\nclass CFFFont {\n constructor(stream) {\n this.stream = stream;\n this.decode();\n }\n\n static decode(stream) {\n return new CFFFont(stream);\n }\n\n decode() {\n let start = this.stream.pos;\n let top = CFFTop.decode(this.stream);\n for (let key in top) {\n let val = top[key];\n this[key] = val;\n }\n\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n\n this.topDict = this.topDictIndex[0];\n }\n\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n }\n\n string(sid) {\n if (this.version >= 2) {\n return null;\n }\n\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n\n return this.stringIndex[sid - standardStrings.length];\n }\n\n get postscriptName() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n\n return null;\n }\n\n get fullName() {\n return this.string(this.topDict.FullName);\n }\n\n get familyName() {\n return this.string(this.topDict.FamilyName);\n }\n\n getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n }\n\n getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n }\n\n // CID-keyed fonts don't have glyph names\n if (this.isCIDFont) {\n return null;\n }\n\n let { charset } = this.topDict;\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n\n if (gid === 0) {\n return '.notdef';\n }\n\n gid -= 1;\n\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n\n case 1:\n case 2:\n for (let i = 0; i < charset.ranges.length; i++) {\n let range = charset.ranges[i];\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n break;\n }\n\n return null;\n }\n\n fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n\n case 3:\n case 4:\n let { ranges } = this.topDict.FDSelect;\n let low = 0;\n let high = ranges.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n default:\n throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\n }\n }\n\n privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n let fd = this.fdForGlyph(gid);\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n\n return null;\n }\n\n if (this.version < 2) {\n return this.topDict.Private;\n }\n\n return this.topDict.FDArray[0].Private;\n }\n}\n\nexport default CFFFont;\n","import * as r from 'restructure';\n\nexport default class CFFIndex {\n constructor(type) {\n this.type = type;\n }\n\n getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n\n return ctx ? ctx.version : -1;\n }\n\n decode(stream, parent) {\n let version = this.getCFFVersion(parent);\n let count = version >= 2\n ? stream.readUInt32BE()\n : stream.readUInt16BE();\n\n if (count === 0) {\n return [];\n }\n\n let offSize = stream.readUInt8();\n let offsetType;\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\n }\n\n let ret = [];\n let startPos = stream.pos + ((count + 1) * offSize) - 1;\n\n let start = offsetType.decode(stream);\n for (let i = 0; i < count; i++) {\n let end = offsetType.decode(stream);\n\n if (this.type != null) {\n let pos = stream.pos;\n stream.pos = startPos + start;\n\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n\n start = end;\n }\n\n stream.pos = startPos + start;\n return ret;\n }\n\n size(arr, parent) {\n let size = 2;\n if (arr.length === 0) {\n return size;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let offset = 1;\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n offset += type.size(item, parent);\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n\n return size;\n }\n\n encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n if (arr.length === 0) {\n return;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let sizes = [];\n let offset = 1;\n for (let item of arr) {\n let s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n // write offset size\n stream.writeUInt8(offsetType.size());\n\n // write elements\n offset = 1;\n offsetType.encode(stream, offset);\n\n for (let size of sizes) {\n offset += size;\n offsetType.encode(stream, offset);\n }\n\n for (let item of arr) {\n type.encode(stream, item, parent);\n }\n\n return;\n }\n}\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport StandardStrings from './CFFStandardStrings';\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\nimport { ItemVariationStore } from '../tables/variations';\n\n// Checks if an operand is an index of a predefined value,\n// otherwise delegates to the provided type.\nclass PredefinedOp {\n constructor(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n\n decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n\n return this.type.decode(stream, parent, operands);\n }\n\n size(value, ctx) {\n return this.type.size(value, ctx);\n }\n\n encode(stream, value, ctx) {\n let index = this.predefinedOps.indexOf(value);\n if (index !== -1) {\n return index;\n }\n\n return this.type.encode(stream, value, ctx);\n }\n}\n\nclass CFFEncodingVersion extends r.Number {\n constructor() {\n super('UInt8');\n }\n\n decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n }\n}\n\nlet Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\n\nlet Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\n\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n }\n\n // TODO: supplement?\n});\n\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\n\n// Decodes an array of ranges until the total\n// length is equal to the provided length.\nclass RangeArray extends r.Array {\n decode(stream, parent) {\n let length = resolveLength(this.length, stream, parent);\n let count = 0;\n let res = [];\n while (count < length) {\n let range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n\n return res;\n }\n}\n\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\n },\n\n 1: {\n ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\n },\n\n 2: {\n ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\n }\n});\n\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\n\nlet FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\n\nlet FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\n\nlet FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\n },\n\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\n\nlet ptr = new CFFPointer(CFFPrivateDict);\nclass CFFPrivateOp {\n decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n }\n\n size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n }\n\n encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n }\n}\n\nlet FontDict = new CFFDict([\n // key name type(s) default\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 38], 'FontName', 'sid', null],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [[12, 5], 'PaintType', 'number', 0],\n]);\n\nlet CFFTopDict = new CFFDict([\n // key name type(s) default\n [[12, 30], 'ROS', ['sid', 'sid', 'number'], null],\n\n [0, 'version', 'sid', null],\n [1, 'Notice', 'sid', null],\n [[12, 0], 'Copyright', 'sid', null],\n [2, 'FullName', 'sid', null],\n [3, 'FamilyName', 'sid', null],\n [4, 'Weight', 'sid', null],\n [[12, 1], 'isFixedPitch', 'boolean', false],\n [[12, 2], 'ItalicAngle', 'number', 0],\n [[12, 3], 'UnderlinePosition', 'number', -100],\n [[12, 4], 'UnderlineThickness', 'number', 50],\n [[12, 5], 'PaintType', 'number', 0],\n [[12, 6], 'CharstringType', 'number', 2],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [13, 'UniqueID', 'number', null],\n [5, 'FontBBox', 'array', [0, 0, 0, 0]],\n [[12, 8], 'StrokeWidth', 'number', 0],\n [14, 'XUID', 'array', null],\n [15, 'charset', CFFCharset, ISOAdobeCharset],\n [16, 'Encoding', CFFEncoding, StandardEncoding],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 20], 'SyntheticBase', 'number', null],\n [[12, 21], 'PostScript', 'sid', null],\n [[12, 22], 'BaseFontName', 'sid', null],\n [[12, 23], 'BaseFontBlend', 'delta', null],\n\n // CID font specific\n [[12, 31], 'CIDFontVersion', 'number', 0],\n [[12, 32], 'CIDFontRevision', 'number', 0],\n [[12, 33], 'CIDFontType', 'number', 0],\n [[12, 34], 'CIDCount', 'number', 8720],\n [[12, 35], 'UIDBase', 'number', null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [[12, 38], 'FontName', 'sid', null]\n]);\n\nlet VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n})\n\nlet CFF2TopDict = new CFFDict([\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [24, 'vstore', new CFFPointer(VariationStore), null],\n [25, 'maxstack', 'number', 193]\n]);\n\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex\n },\n\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex\n }\n});\n\nexport default CFFTop;\n","import isEqual from 'fast-deep-equal';\nimport * as r from 'restructure';\nimport CFFOperand from './CFFOperand';\nimport { PropertyDescriptor } from 'restructure';\n\nexport default class CFFDict {\n constructor(ops = []) {\n this.ops = ops;\n this.fields = {};\n for (let field of ops) {\n let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n\n decodeOperands(type, stream, ret, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n case 'boolean':\n return !!operands[0];\n default:\n return operands;\n }\n }\n }\n\n encodeOperands(type, stream, ctx, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n }\n\n decode(stream, parent) {\n let end = stream.pos + parent.length;\n let ret = {};\n let operands = [];\n\n // define hidden properties\n Object.defineProperties(ret, {\n parent: { value: parent },\n _startOffset: { value: stream.pos }\n });\n\n // fill in defaults\n for (let key in this.fields) {\n let field = this.fields[key];\n ret[field[1]] = field[3];\n }\n\n while (stream.pos < end) {\n let b = stream.readUInt8();\n if (b < 28) {\n if (b === 12) {\n b = (b << 8) | stream.readUInt8();\n }\n\n let field = this.fields[b];\n if (!field) {\n throw new Error(`Unknown operator ${b}`);\n }\n\n let val = this.decodeOperands(field[2], stream, ret, operands);\n if (val != null) {\n if (val instanceof PropertyDescriptor) {\n Object.defineProperty(ret, field[1], val);\n } else {\n ret[field[1]] = val;\n }\n }\n\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n\n return ret;\n }\n\n size(dict, parent, includePointers = true) {\n let ctx = {\n parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n\n let len = 0;\n\n for (let k in this.fields) {\n let field = this.fields[k];\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], null, ctx, val);\n for (let op of operands) {\n len += CFFOperand.size(op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n\n if (includePointers) {\n len += ctx.pointerSize;\n }\n\n return len;\n }\n\n encode(stream, dict, parent) {\n let ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val: dict,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n for (let field of this.ops) {\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], stream, ctx, val);\n for (let op of operands) {\n CFFOperand.encode(stream, op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n for (let op of key) {\n stream.writeUInt8(op);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n let ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n\n return;\n }\n}\n","const FLOAT_EOF = 0xf;\nconst FLOAT_LOOKUP = [\n '0', '1', '2', '3', '4', '5', '6', '7',\n '8', '9', '.', 'E', 'E-', null, '-'\n];\n\nconst FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\n\nexport default class CFFOperand {\n static decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n\n if (value === 28) {\n return stream.readInt16BE();\n }\n\n if (value === 29) {\n return stream.readInt32BE();\n }\n\n if (value === 30) {\n let str = '';\n while (true) {\n let b = stream.readUInt8();\n\n let n1 = b >> 4;\n if (n1 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n1];\n\n let n2 = b & 15;\n if (n2 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n2];\n }\n\n return parseFloat(str);\n }\n\n return null;\n }\n\n static size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n\n if ((value | 0) !== value) { // floating point\n let str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n\n } else if (-107 <= value && value <= 107) {\n return 1;\n\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n\n } else {\n return 5;\n }\n }\n\n static encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n let val = Number(value);\n\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n\n } else if ((val | 0) !== val) { // floating point\n stream.writeUInt8(30);\n\n let str = '' + val;\n for (let i = 0; i < str.length; i += 2) {\n let c1 = str[i];\n let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n let c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n\n stream.writeUInt8((n1 << 4) | (n2 & 15));\n }\n\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8((FLOAT_EOF << 4));\n }\n\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n }\n}\n","import * as r from 'restructure';\n\nexport default class CFFPointer extends r.Pointer {\n constructor(type, options = {}) {\n if (options.type == null) {\n options.type = 'global';\n }\n\n super(null, type, options);\n }\n\n decode(stream, parent, operands) {\n this.offsetType = {\n decode: () => operands[0]\n };\n\n return super.decode(stream, parent, operands);\n }\n\n encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: () => 0\n };\n\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n\n let ptr = null;\n this.offsetType = {\n encode: (stream, val) => ptr = val\n };\n\n super.encode(stream, value, ctx);\n return [new Ptr(ptr)];\n }\n}\n\nclass Ptr {\n constructor(val) {\n this.val = val;\n this.forceLarge = true;\n }\n\n valueOf() {\n return this.val;\n }\n}\n","import CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\n\nclass CFFBlendOp {\n static decode(stream, parent, operands) {\n let numBlends = operands.pop();\n\n // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n while (operands.length > numBlends) {\n operands.pop();\n }\n }\n}\n\nexport default new CFFDict([\n // key name type default\n [6, 'BlueValues', 'delta', null],\n [7, 'OtherBlues', 'delta', null],\n [8, 'FamilyBlues', 'delta', null],\n [9, 'FamilyOtherBlues', 'delta', null],\n [[12, 9], 'BlueScale', 'number', 0.039625],\n [[12, 10], 'BlueShift', 'number', 7],\n [[12, 11], 'BlueFuzz', 'number', 1],\n [10, 'StdHW', 'number', null],\n [11, 'StdVW', 'number', null],\n [[12, 12], 'StemSnapH', 'delta', null],\n [[12, 13], 'StemSnapV', 'delta', null],\n [[12, 14], 'ForceBold', 'boolean', false],\n [[12, 17], 'LanguageGroup', 'number', 0],\n [[12, 18], 'ExpansionFactor', 'number', 0.06],\n [[12, 19], 'initialRandomSeed', 'number', 0],\n [20, 'defaultWidthX', 'number', 0],\n [21, 'nominalWidthX', 'number', 0],\n [22, 'vsindex', 'number', 0],\n [23, 'blend', CFFBlendOp, null],\n [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]\n]);\n","// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nexport default [\n \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\n \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\n \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\n \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\n \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\n \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\n \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\n \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\n \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\n \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\n \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\n \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\n \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\n \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\n \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\n \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\n \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\n \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\n \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\n \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\n \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\n \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\n \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\n \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\n \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\n \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\n \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\n \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\n \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\n \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\n \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\n \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\n \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\n \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\n \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n","export let StandardEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n 'lslash', 'oslash', 'oe', 'germandbls'\n];\n\nexport let ExpertEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\n];\n","export let ISOAdobeCharset = [\n '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\n 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\n 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\n 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\n 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\n 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\n 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\n 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\n 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\n 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\n 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\n 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\n 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\n 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\n 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\n 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\n 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\n 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\n 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\n 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\n 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\n 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\n 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\n 'ugrave', 'yacute', 'ydieresis', 'zcaron'\n];\n\nexport let ExpertCharset = [\n '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\n 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\n 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\n 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\n 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\n 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\n 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\n 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\n 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\n 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\n 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\n 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\n 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\n 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\n 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\n 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\n 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\n 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\n 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\n 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\n 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\n 'Ydieresissmall'\n];\n\nexport let ExpertSubsetCharset = [\n '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\n 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\n 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\n 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\n 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\n 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\n 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\n 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior'\n];\n","import {Feature} from './opentype';\nimport * as r from 'restructure';\n\n/*******************\n * Variation Store *\n *******************/\n\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\nlet RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\n\nlet VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\n\nlet DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\n regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\n deltas: t => t.shortDeltas.concat(t.regionDeltas)\n});\n\nlet ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\n\nexport let ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n\n/**********************\n * Feature Variations *\n **********************/\n\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: {\n axisIndex: r.uint16,\n axisIndex: r.uint16,\n filterRangeMinValue: F2DOT14,\n filterRangeMaxValue: F2DOT14\n }\n});\n\nlet ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\n\nlet FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\n});\n\nlet FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\n\nlet FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\n});\n\nexport let FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n","import * as r from 'restructure';\n\n//########################\n// Scripts and Languages #\n//########################\n\nlet LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\n\nlet LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\n});\n\nlet Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\n\nlet ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, { type: 'parent' })\n});\n\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\n\n//#######################\n// Features and Lookups #\n//#######################\n\nlet FeatureParams = new r.Struct({\n version: r.uint16, // should be set to 0 according OT spec\n nameID: r.uint16, //OT spec: UI Name ID or uiLabelNameId\n});\n\nexport let Feature = new r.Struct({\n featureParams: new r.Pointer(r.uint16, FeatureParams),\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\n\nlet FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })\n});\n\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\n\nlet LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, [\n 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\n 'ignoreMarks', 'useMarkFilteringSet'\n ])\n});\n\nexport function LookupList(SubTable) {\n let Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\n });\n\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n}\n\n//#################\n// Coverage Table #\n//#################\n\nlet RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\n\nexport let Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n});\n\n//#########################\n// Class Definition Table #\n//#########################\n\nlet ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\n\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\n 1: { // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: { // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n});\n\n//###############\n// Device Table #\n//###############\n\nexport let Device = new r.Struct({\n a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16, // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n});\n\n//#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nlet LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\n\nlet Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\n\nlet ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\n\nexport let Context = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: { // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n\n//######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nlet ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, t => t.inputGlyphCount - 1),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\n\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 2: { // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 3: { // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n","import * as r from 'restructure';\n\nlet VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\n","import * as r from 'restructure';\nimport {BigMetrics} from './EBDT';\n\nlet SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\n\nlet CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\n\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n\n 1: {\n offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n\n 3: {\n offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\n },\n\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\n\nlet IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\n\nlet BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\n\nexport default new r.Struct({\n version: r.uint32, // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\n","import * as r from 'restructure';\n\nexport let BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\n\nexport let SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\n\nlet EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\n\nclass ByteAligned {}\n\nclass BitAligned {}\n\nexport let glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n\n 5: {\n data: BitAligned\n },\n\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\n\n","import * as r from 'restructure';\n\nlet ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\n});\n\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\nexport default new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\n","import * as r from 'restructure';\n\nlet LayerRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n // the special case noted below. Each palette entry is 16 bits.\n // A palette index of 0xFFFF is a special case indicating that\n // the text foreground color should be used.\n\nlet BaseGlyphRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\n\nexport default new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\n numLayerRecords: r.uint16\n});\n","import * as r from 'restructure';\n\nlet ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16 // X or Y value, in design units\n },\n\n 2: { // Design units plus contour point\n coordinate: r.int16, // X or Y value, in design units\n referenceGlyph: r.uint16, // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16, // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n }\n});\n\nlet BaseValues = new r.Struct({\n defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\n\nlet FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL\n});\n\nlet MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n featMinMaxCount: r.uint16, // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nlet BaseLangSysRecord = new r.Struct({\n tag: new r.String(4), // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\n});\n\nlet BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL\n baseLangSysCount: r.uint16, // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nlet BaseScriptRecord = new r.Struct({\n tag: new r.String(4), // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\n});\n\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\n\n// Array of 4-byte baseline identification tags-must be in alphabetical order\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\n\nlet Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n },\n\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\nlet AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\n\nlet CaretValue = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16\n },\n\n 2: { // Contour point\n caretValuePoint: r.uint16\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\n\nlet LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\n\nlet MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet ValueFormat = new r.Bitfield(r.uint16, [\n 'xPlacement', 'yPlacement',\n 'xAdvance', 'yAdvance',\n 'xPlaDevice', 'yPlaDevice',\n 'xAdvDevice', 'yAdvDevice'\n]);\n\nlet types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\n};\n\nclass ValueRecord {\n constructor(key = 'valueFormat') {\n this.key = key;\n }\n\n buildStruct(parent) {\n let struct = parent;\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n\n if (!struct[this.key]) return;\n\n let fields = {};\n fields.rel = () => struct._startOffset;\n\n let format = struct[this.key];\n for (let key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n\n return new r.Struct(fields);\n }\n\n size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n }\n\n decode(stream, parent) {\n let res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n }\n}\n\nlet PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\n\nlet Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet Anchor = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n\n 2: { // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n\n 3: { // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\n\nlet BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\nlet BaseArray = new r.Array(BaseRecord, r.uint16);\n\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\nlet LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nlet LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\n\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, { // Single Adjustment\n 1: { // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n\n 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\n 1: { // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n\n 2: { // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n\n 3: { // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n\n 4: { // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n\n 5: { // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n\n 6: { // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n\n 7: Context, // Contextual positioning\n 8: ChainingContext, // Chaining contextual positioning\n\n 9: { // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 9\n extension: new r.Pointer(r.uint32, null)\n }\n});\n\n// Fix circular reference\nGPOSLookup.versions[9].extension.type = GPOSLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n\n// export GPOSLookup for JSTF table\nexport { GPOSLookup };\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet Sequence = new r.Array(r.uint16, r.uint16);\nlet AlternateSet = Sequence;\n\nlet Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, t => t.compCount - 1)\n});\n\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\n\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {// Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n\n 2: { // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n\n 3: { // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n\n 4: { // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n\n 5: Context, // Contextual Substitution\n 6: ChainingContext, // Chaining Contextual Substitution\n\n 7: { // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 7\n extension: new r.Pointer(r.uint32, null)\n },\n\n 8: { // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n});\n\n// Fix circular reference\nGSUBLookup.versions[7].extension.type = GSUBLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n","import * as r from 'restructure';\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\nimport { GPOSLookup } from './GPOS';\n\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\n\nlet JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\n\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\n\nlet JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\n\nlet JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\n\nlet JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\n});\n\nexport default new r.Struct({\n version: r.uint32, // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport { ItemVariationStore } from './variations';\n\n// TODO: add this to restructure\nclass VariableSizeNumber {\n constructor(size) {\n this._size = size;\n }\n\n decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1: return stream.readUInt8();\n case 2: return stream.readUInt16BE();\n case 3: return stream.readUInt24BE();\n case 4: return stream.readUInt32BE();\n }\n }\n\n size(val, parent) {\n return resolveLength(this._size, null, parent);\n }\n}\n\nlet MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\n outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\n innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\n});\n\nlet DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\n","import * as r from 'restructure';\n\nlet Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\n\nlet SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\n\nexport default new r.Struct({\n ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16, // Number of signatures in the table\n usFlag: r.uint16, // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\n","import * as r from 'restructure';\n\nlet GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit',\n 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\n\nexport default new r.Struct({\n version: r.uint16, // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n","import * as r from 'restructure';\n\nlet DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\n});\n\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\nexport default new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\n","import * as r from 'restructure';\n\nlet KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\n\nlet ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\n});\n\nlet Kern2Array = new r.Struct({\n off: t => t._startOffset - t.parent.parent._startOffset,\n len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\n values: new r.LazyArray(r.int16, 'len')\n});\n\nlet KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\n },\n\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\n }\n});\n\nlet KernTable = new r.VersionedStruct('version', {\n 0: { // Microsoft uses this format\n subVersion: r.uint16, // Microsoft has an extra sub-table version number\n length: r.uint16, // Length of the subtable, in bytes\n format: r.uint8, // Format of subtable\n coverage: new r.Bitfield(r.uint8, [\n 'horizontal', // 1 if table has horizontal data, 0 if vertical\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n },\n 1: { // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [\n null, null, null, null, null,\n 'variation', // Set if table has variation kerning values\n 'crossStream', // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n }\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n 0: { // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n\n 1: { // Apple Version\n reserved: new r.Reserved(r.uint16), // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n});\n","import * as r from 'restructure';\n\n// Linear Threshold table\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\nexport default new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n","import * as r from 'restructure';\n\n// PCL 5 Table\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\nexport default new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n});\n","import * as r from 'restructure';\n\n// VDMX tables contain ascender/descender overrides for certain (usually small)\n// sizes. This is needed in order to match font metrics on Windows.\n\nlet Ratio = new r.Struct({\n bCharSet: r.uint8, // Character set\n xRatio: r.uint8, // Value to use for x-Ratio\n yStartRatio: r.uint8, // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nlet vTable = new r.Struct({\n yPelHeight: r.uint16, // yPelHeight to which values apply\n yMax: r.int16, // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nlet VdmxGroup = new r.Struct({\n recs: r.uint16, // Number of height records in this group\n startsz: r.uint8, // Starting yPelHeight\n endsz: r.uint8, // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nexport default new r.Struct({\n version: r.uint16, // Version number (0 or 1)\n numRecs: r.uint16, // Number of VDMX groups present\n numRatios: r.uint16, // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n","import * as r from 'restructure';\n\n// Vertical Header Table\nexport default new r.Struct({\n version: r.uint16, // Version number of the Vertical Header Table\n ascent: r.int16, // The vertical typographic ascender for this font\n descent: r.int16, // The vertical typographic descender for this font\n lineGap: r.int16, // The vertical typographic line gap for this font\n advanceHeightMax: r.int16, // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n","import * as r from 'restructure';\n\nlet VmtxEntry = new r.Struct({\n advance: r.uint16, // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n});\n\n// Vertical Metrics Table\nexport default new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\n\nlet Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\n\nlet Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet BslnSubtable = new r.VersionedStruct('format', {\n 0: { // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n\n 1: { // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n\n 2: { // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n\n 3: { // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\n","import * as r from 'restructure';\n\nclass UnboundedArrayAccessor {\n constructor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n\n getItem(index) {\n if (this._items[index] == null) {\n let pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n\n return this._items[index];\n }\n\n inspect() {\n return `[UnboundedArray ${this.type.constructor.name}]`;\n }\n}\n\nexport class UnboundedArray extends r.Array {\n constructor(type) {\n super(type, 0);\n }\n\n decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n }\n}\n\nexport let LookupTable = function(ValueType = r.uint16) {\n // Helper class that makes internal structures invisible to pointers\n class Shadow {\n constructor(type) {\n this.type = type;\n }\n\n decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n }\n\n size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n }\n\n encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n }\n }\n\n ValueType = new Shadow(ValueType);\n\n let BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n\n let LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n\n let LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\n });\n\n let LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\n\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\n let entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\n\n let StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n\n return StateHeader;\n}\n\n// This is the old version of the StateTable structure\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\n let ClassLookupTable = new r.Struct({\n version() { return 8; }, // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n\n let entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\n\n let StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n\n return StateHeader1;\n}\n","import * as r from 'restructure';\n\nlet Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nlet FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\n featureFlags: new r.Bitfield(r.uint8, [\n null, null, null, null, null, null,\n 'hasDefault', 'exclusive'\n ]),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\n","import * as r from 'restructure';\n\nlet Axis = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\n});\n\nlet Instance = new r.Struct({\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\n flags: r.uint16,\n coord: new r.Array(r.fixed32, t => t.parent.axisCount),\n postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\nclass Offset {\n static decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags\n ? stream.readUInt32BE()\n : stream.readUInt16BE() * 2;\n }\n}\n\nlet gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\n});\n\nexport default gvar;\n","import * as r from 'restructure';\nimport { LookupTable, StateTable1 } from './aat';\n\nlet ClassTable = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1\n});\n\nlet WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\n\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\n\nlet ActionData = new r.VersionedStruct('actionType', {\n 0: { // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n\n 1: { // Unconditional add glyph action\n addGlyph: r.uint16\n },\n\n 2: { // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n\n 3: {}, // Stretch glyph action (no data, not supported by CoreText)\n\n 4: { // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n\n 5: { // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\n\nlet Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\n});\n\nlet PostcompensationAction = new r.Array(Action, r.uint32);\nlet PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\n\nlet JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\n});\n\nexport default new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\n","import * as r from 'restructure';\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\n\nlet LigatureData = {\n action: r.uint16\n};\n\nlet ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\n\nlet InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\n\nlet SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\n});\n\nlet SubtableData = new r.VersionedStruct('type', {\n 0: { // Indic Rearrangement Subtable\n stateTable: new StateTable\n },\n\n 1: { // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n\n 2: { // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n\n 4: { // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable\n },\n\n 5: { // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\n\nlet Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n});\n\nlet FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\n\nlet MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\n\nexport default new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\n","import { binarySearch } from './utils';\nimport { encodingExists, getEncoding, getEncodingMapping } from './encodings';\nimport { cache } from './decorators';\nimport { range } from './utils';\n\nexport default class CmapProcessor {\n constructor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [\n // 32-bit subtables\n [3, 10],\n [0, 6],\n [0, 4],\n\n // 16-bit subtables\n [3, 1],\n [0, 3],\n [0, 2],\n [0, 1],\n [0, 0]\n ]);\n\n // If not unicode cmap was found, take the first table with a supported encoding.\n if (!this.cmap) {\n for (let cmap of cmapTable.tables) {\n let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n let mapping = getEncodingMapping(encoding);\n if (mapping) {\n this.cmap = cmap.table;\n this.encoding = mapping;\n }\n }\n }\n\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n\n findSubtable(cmapTable, pairs) {\n for (let [platformID, encodingID] of pairs) {\n for (let cmap of cmapTable.tables) {\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n\n return null;\n }\n\n lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n codepoint = this.encoding.get(codepoint) || codepoint;\n\n // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n } else if (variationSelector) {\n let gid = this.getVariationSelector(codepoint, variationSelector);\n if (gid) {\n return gid;\n }\n }\n\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n\n case 4: {\n let min = 0;\n let max = cmap.segCount - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n let rangeOffset = cmap.idRangeOffset.get(mid);\n let gid;\n\n if (rangeOffset === 0) {\n gid = codepoint + cmap.idDelta.get(mid);\n } else {\n let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n gid = cmap.glyphIndexArray.get(index) || 0;\n if (gid !== 0) {\n gid += cmap.idDelta.get(mid);\n }\n }\n\n return gid & 0xffff;\n }\n }\n\n return 0;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n case 12:\n case 13: {\n let min = 0;\n let max = cmap.nGroups - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let group = cmap.groups.get(mid);\n\n if (codepoint < group.startCharCode) {\n max = mid - 1;\n } else if (codepoint > group.endCharCode) {\n min = mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n\n return 0;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n\n let selectors = this.uvs.varSelectors.toArray();\n let i = binarySearch(selectors, x => variationSelector - x.varSelector);\n let sel = selectors[i];\n\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, x =>\n codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\n );\n }\n\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n\n return 0;\n }\n\n @cache\n getCharacterSet() {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n\n case 4: {\n let res = [];\n let endCodes = cmap.endCode.toArray();\n for (let i = 0; i < endCodes.length; i++) {\n let tail = endCodes[i] + 1;\n let start = cmap.startCode.get(i);\n res.push(...range(start, tail));\n }\n\n return res;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n case 12:\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n\n return res;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n @cache\n codePointsForGlyph(gid) {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0: {\n let res = [];\n for (let i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n\n return res;\n }\n\n case 4: {\n let res = [];\n for (let i = 0; i < cmap.segCount; i++) {\n let end = cmap.endCode.get(i);\n let start = cmap.startCode.get(i);\n let rangeOffset = cmap.idRangeOffset.get(i);\n let delta = cmap.idDelta.get(i);\n\n for (var c = start; c <= end; c++) {\n let g = 0;\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\n g = cmap.glyphIndexArray.get(index) || 0;\n if (g !== 0) {\n g += delta;\n }\n }\n\n if (g === gid) {\n res.push(c);\n }\n }\n }\n\n return res;\n }\n\n case 12: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n res.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n\n return res;\n }\n\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid === group.glyphID) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n }\n\n return res;\n }\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n}\n","export function binarySearch(arr, cmp) {\n let min = 0;\n let max = arr.length - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let res = cmp(arr[mid]);\n\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n}\n\nexport function range(index, end) {\n let range = [];\n while (index < end) {\n range.push(index++);\n }\n return range;\n}\n\nexport const asciiDecoder = new TextDecoder('ascii');\n\n// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license.\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst LOOKUP = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n LOOKUP[CHARS.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n let bufferLength = base64.length * 0.75;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n let bytes = new Uint8Array(bufferLength);\n let p = 0;\n\n for (let i = 0, len = base64.length; i < len; i += 4) {\n let encoded1 = LOOKUP[base64.charCodeAt(i)];\n let encoded2 = LOOKUP[base64.charCodeAt(i + 1)];\n let encoded3 = LOOKUP[base64.charCodeAt(i + 2)];\n let encoded4 = LOOKUP[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return bytes;\n}\n","import KernProcessor from './KernProcessor';\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\nimport GlyphRun from './GlyphRun';\nimport GlyphPosition from './GlyphPosition';\nimport * as Script from './Script';\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\n\nexport default class LayoutEngine {\n constructor(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null;\n\n // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n\n layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n }\n\n // Map string to glyphs if needed\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = Script.forString(string);\n }\n\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n let codePoints = [];\n for (let glyph of string) {\n codePoints.push(...glyph.codePoints);\n }\n\n script = Script.forCodePoints(codePoints);\n }\n\n var glyphs = string;\n }\n\n let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\n\n // Return early if there are no glyphs\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n }\n\n // Setup the advanced layout engine\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n }\n\n // Substitute and position the glyphs\n this.substitute(glyphRun);\n this.position(glyphRun);\n\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\n\n // Let the layout engine clean up any state it might have\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n\n return glyphRun;\n }\n\n substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n }\n\n position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\n let positioned = null;\n\n // Call the advanced layout engine. Returns the features applied.\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n }\n\n // if there is no GPOS table, use unicode properties to position marks.\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n }\n\n // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n }\n\n hideDefaultIgnorables(glyphs, positions) {\n let space = this.font.glyphForCodePoint(0x20);\n for (let i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n let plane = ch >> 16;\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n \tcase 0x00: return ch === 0x00AD;\n \tcase 0x03: return ch === 0x034F;\n \tcase 0x06: return ch === 0x061C;\n \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\n \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\n \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\n \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\n \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\n \tdefault: return false;\n }\n } else {\n // Other planes\n switch (plane) {\n \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\n \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\n \tdefault: return false;\n }\n }\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.engine) {\n features.push(...this.engine.getAvailableFeatures(script, language));\n }\n\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n\n return features;\n }\n\n stringsForGlyph(gid) {\n let result = new Set;\n\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n for (let codePoint of codePoints) {\n result.add(String.fromCodePoint(codePoint));\n }\n\n if (this.engine && this.engine.stringsForGlyph) {\n for (let string of this.engine.stringsForGlyph(gid)) {\n result.add(string);\n }\n }\n\n return Array.from(result);\n }\n}\n","import {binarySearch} from '../utils';\n\nexport default class KernProcessor {\n constructor(font) {\n this.kern = font.kern;\n }\n\n process(glyphs, positions) {\n for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n let left = glyphs[glyphIndex].id;\n let right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n }\n\n getKerning(left, right) {\n let res = 0;\n\n for (let table of this.kern.tables) {\n if (table.coverage.crossStream) {\n continue;\n }\n\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n\n break;\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n\n break;\n default:\n throw new Error(`Unsupported kerning table version ${table.version}`);\n }\n\n let val = 0;\n let s = table.subtable;\n switch (table.format) {\n case 0:\n let pairIdx = binarySearch(s.pairs, function (pair) {\n return (left - pair.left) || (right - pair.right);\n });\n\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n\n break;\n\n case 2:\n let leftOffset = 0, rightOffset = 0;\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n\n let index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n\n default:\n throw new Error(`Unsupported kerning sub-table format ${table.format}`);\n }\n\n // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n\n return res;\n }\n}\n","import {getCombiningClass} from 'unicode-properties';\n\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nexport default class UnicodeLayoutEngine {\n constructor(font) {\n this.font = font;\n }\n\n positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n let clusterStart = 0;\n let clusterEnd = 0;\n for (let index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.isMark) { // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n clusterStart = clusterEnd = index;\n }\n }\n\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n return positions;\n }\n\n positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n let base = glyphs[clusterStart];\n let baseBox = base.cbox.copy();\n\n // adjust bounding box for ligature glyphs\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\n }\n\n let xOffset = -positions[clusterStart].xAdvance;\n let yOffset = 0;\n let yGap = this.font.unitsPerEm / 16;\n\n // position each of the mark glyphs relative to the base glyph\n for (let index = clusterStart + 1; index <= clusterEnd; index++) {\n let mark = glyphs[index];\n let markBox = mark.cbox;\n let position = positions[index];\n\n let combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0;\n\n // x positioning\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n\n default: // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n }\n\n // y positioning\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n\n return;\n }\n\n getCombiningClass(codePoint) {\n let combiningClass = getCombiningClass(codePoint);\n\n // Thai / Lao need some per-character work\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) { // virama\n return 'Below_Right';\n }\n }\n\n switch (combiningClass) {\n // Hebrew\n\n case 'CCC10': // sheva\n case 'CCC11': // hataf segol\n case 'CCC12': // hataf patah\n case 'CCC13': // hataf qamats\n case 'CCC14': // hiriq\n case 'CCC15': // tsere\n case 'CCC16': // segol\n case 'CCC17': // patah\n case 'CCC18': // qamats\n case 'CCC20': // qubuts\n case 'CCC22': // meteg\n return 'Below';\n\n case 'CCC23': // rafe\n return 'Attached_Above';\n\n case 'CCC24': // shin dot\n return 'Above_Right';\n\n case 'CCC25': // sin dot\n case 'CCC19': // holam\n return 'Above_Left';\n\n case 'CCC26': // point varika\n return 'Above';\n\n case 'CCC21': // dagesh\n break;\n\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n case 'CCC28': // dammatan\n case 'CCC30': // fatha\n case 'CCC31': // damma\n case 'CCC33': // shadda\n case 'CCC34': // sukun\n case 'CCC35': // superscript alef\n case 'CCC36': // superscript alaph\n return 'Above';\n\n case 'CCC29': // kasratan\n case 'CCC32': // kasra\n return 'Below';\n\n // Thai\n\n case 'CCC103': // sara u / sara uu\n return 'Below_Right';\n\n case 'CCC107': // mai\n return 'Above_Right';\n\n // Lao\n\n case 'CCC118': // sign u / sign uu\n return 'Below';\n\n case 'CCC122': // mai\n return 'Above';\n\n // Tibetan\n\n case 'CCC129': // sign aa\n case 'CCC132': // sign u\n return 'Below';\n\n case 'CCC130': // sign i\n return 'Above';\n }\n\n return combiningClass;\n }\n}\n","import BBox from '../glyph/BBox';\nimport * as Script from '../layout/Script';\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nexport default class GlyphRun {\n constructor(glyphs, features, script, language, direction) {\n /**\n * An array of Glyph objects in the run\n * @type {Glyph[]}\n */\n this.glyphs = glyphs;\n\n /**\n * An array of GlyphPosition objects for each glyph in the run\n * @type {GlyphPosition[]}\n */\n this.positions = null;\n\n /**\n * The script that was requested for shaping. This was either passed in or detected automatically.\n * @type {string}\n */\n this.script = script;\n\n /**\n * The language requested for shaping, as passed in. If `null`, the default language for the\n * script was used.\n * @type {string}\n */\n this.language = language || null;\n\n /**\n * The direction requested for shaping, as passed in (either ltr or rtl).\n * If `null`, the default direction of the script is used.\n * @type {string}\n */\n this.direction = direction || Script.direction(script);\n\n /**\n * The features requested during shaping. This is a combination of user\n * specified features and features chosen by the shaper.\n * @type {object}\n */\n this.features = {};\n\n // Convert features to an object\n if (Array.isArray(features)) {\n for (let tag of features) {\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n\n /**\n * The total advance width of the run.\n * @type {number}\n */\n get advanceWidth() {\n let width = 0;\n for (let position of this.positions) {\n width += position.xAdvance;\n }\n\n return width;\n }\n\n /**\n * The total advance height of the run.\n * @type {number}\n */\n get advanceHeight() {\n let height = 0;\n for (let position of this.positions) {\n height += position.yAdvance;\n }\n\n return height;\n }\n\n /**\n * The bounding box containing all glyphs in the run.\n * @type {BBox}\n */\n get bbox() {\n let bbox = new BBox;\n\n let x = 0;\n let y = 0;\n for (let index = 0; index < this.glyphs.length; index++) {\n let glyph = this.glyphs[index];\n let p = this.positions[index];\n let b = glyph.bbox;\n\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n\n x += p.xAdvance;\n y += p.yAdvance;\n }\n\n return bbox;\n }\n}\n","/**\n * Represents a glyph bounding box\n */\nexport default class BBox {\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n /**\n * The minimum X position in the bounding box\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * The minimum Y position in the bounding box\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * The maxmimum X position in the bounding box\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * The maxmimum Y position in the bounding box\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * The width of the bounding box\n * @type {number}\n */\n get width() {\n return this.maxX - this.minX;\n }\n\n /**\n * The height of the bounding box\n * @type {number}\n */\n get height() {\n return this.maxY - this.minY;\n }\n\n addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n }\n\n copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n }\n}\n","import {getScript} from 'unicode-properties';\n\n// This maps the Unicode Script property to an OpenType script tag\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nconst UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\n\nconst OPENTYPE_SCRIPTS = {};\nfor (let script in UNICODE_SCRIPTS) {\n let tag = UNICODE_SCRIPTS[script];\n if (Array.isArray(tag)) {\n for (let t of tag) {\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\n\nexport function fromUnicode(script) {\n return UNICODE_SCRIPTS[script];\n}\n\nexport function fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\n\nexport function forString(string) {\n let len = string.length;\n let idx = 0;\n while (idx < len) {\n let code = string.charCodeAt(idx++);\n\n // Check if this is a high surrogate\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n\n // Check if this is a low surrogate\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n\n let script = getScript(code);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\nexport function forCodePoints(codePoints) {\n for (let i = 0; i < codePoints.length; i++) {\n let codePoint = codePoints[i];\n let script = getScript(codePoint);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\n// The scripts in this map are written from right to left\nconst RTL = {\n arab: true, // Arabic\n hebr: true, // Hebrew\n syrc: true, // Syriac\n thaa: true, // Thaana\n cprt: true, // Cypriot Syllabary\n khar: true, // Kharosthi\n phnx: true, // Phoenician\n 'nko ': true, // N'Ko\n lydi: true, // Lydian\n avst: true, // Avestan\n armi: true, // Imperial Aramaic\n phli: true, // Inscriptional Pahlavi\n prti: true, // Inscriptional Parthian\n sarb: true, // Old South Arabian\n orkh: true, // Old Turkic, Orkhon Runic\n samr: true, // Samaritan\n mand: true, // Mandaic, Mandaean\n merc: true, // Meroitic Cursive\n mero: true, // Meroitic Hieroglyphs\n\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true, // Manichaean\n mend: true, // Mende Kikakui\n nbat: true, // Nabataean\n narb: true, // Old North Arabian\n palm: true, // Palmyrene\n phlp: true // Psalter Pahlavi\n};\n\nexport function direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n\n return 'ltr';\n}\n","/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nexport default class GlyphPosition {\n constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\n /**\n * The amount to move the virtual pen in the X direction after rendering this glyph.\n * @type {number}\n */\n this.xAdvance = xAdvance;\n\n /**\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\n * @type {number}\n */\n this.yAdvance = yAdvance;\n\n /**\n * The offset from the pen position in the X direction at which to render this glyph.\n * @type {number}\n */\n this.xOffset = xOffset;\n\n /**\n * The offset from the pen position in the Y direction at which to render this glyph.\n * @type {number}\n */\n this.yOffset = yOffset;\n }\n}\n","import * as AATFeatureMap from './AATFeatureMap';\nimport * as Script from '../layout/Script';\nimport AATMorxProcessor from './AATMorxProcessor';\n\nexport default class AATLayoutEngine {\n constructor(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n\n substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n\n this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\n }\n\n getAvailableFeatures(script, language) {\n return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\n }\n\n stringsForGlyph(gid) {\n let glyphStrings = this.morxProcessor.generateInputs(gid);\n let result = new Set;\n\n for (let glyphs of glyphStrings) {\n this._addStrings(glyphs, 0, result, '');\n }\n\n return result;\n }\n\n _addStrings(glyphs, index, strings, string) {\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n for (let codePoint of codePoints) {\n let s = string + String.fromCodePoint(codePoint);\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n }\n}\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nconst features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: { // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\n\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\n\nconst OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'), // ??\n\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'), // ??\n numr: feature('fractions', 'diagonalFractions'), // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'), // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n\n init: feature('smartSwash', 'wordInitialSwashes'), // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\n medi: feature('smartSwash', 'nonFinalSwashes'), // ??\n med2: feature('smartSwash', 'nonFinalSwashes'), // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\n fina: feature('smartSwash', 'wordFinalSwashes'), // ??\n\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n\n calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'), //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n};\n\n // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n\n// Add cv01-cv99 features\nfor (let i = 1; i <= 99; i++) {\n OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\n}\n\n// create inverse mapping\nlet AATMapping = {};\nfor (let ot in OTMapping) {\n let aat = OTMapping[ot];\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n\n AATMapping[aat[0]][aat[1]] = ot;\n}\n\n// Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\nexport function mapOTToAAT(features) {\n let res = {};\n for (let k in features) {\n let r;\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n\n res[r[0]][r[1]] = features[k];\n }\n }\n\n return res;\n}\n\n// Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\nfunction mapFeatureStrings(f) {\n let [type, setting] = f;\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n\n return [typeCode, settingCode];\n}\n\n// Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\nexport function mapAATToOT(features) {\n let res = {};\n if (Array.isArray(features)) {\n for (let k = 0; k < features.length; k++) {\n let r;\n let f = mapFeatureStrings(features[k]);\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n\n } else if (typeof features === 'object') {\n for (let type in features) {\n let feature = features[type];\n for (let setting in feature) {\n let r;\n let f = mapFeatureStrings([type, setting]);\n if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\n res[r] = true;\n }\n }\n }\n }\n\n return Object.keys(res);\n}\n","import AATStateMachine from './AATStateMachine';\nimport AATLookupTable from './AATLookupTable';\nimport {cache} from '../decorators';\n\n// indic replacement flags\nconst MARK_FIRST = 0x8000;\nconst MARK_LAST = 0x2000;\nconst VERB = 0x000F;\n\n// contextual substitution and glyph insertion flag\nconst SET_MARK = 0x8000;\n\n// ligature entry flags\nconst SET_COMPONENT = 0x8000;\nconst PERFORM_ACTION = 0x2000;\n\n// ligature action masks\nconst LAST_MASK = 0x80000000;\nconst STORE_MASK = 0x40000000;\nconst OFFSET_MASK = 0x3FFFFFFF;\n\nconst VERTICAL_ONLY = 0x800000;\nconst REVERSE_DIRECTION = 0x400000;\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\n\n// glyph insertion flags\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\nconst MARKED_IS_KASHIDA_LIKE = 0x1000;\nconst CURRENT_INSERT_BEFORE = 0x0800;\nconst MARKED_INSERT_BEFORE = 0x0400;\nconst CURRENT_INSERT_COUNT = 0x03E0;\nconst MARKED_INSERT_COUNT = 0x001F;\n\nexport default class AATMorxProcessor {\n constructor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n }\n\n // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n process(glyphs, features = {}) {\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n // enable/disable the requested features\n for (let feature of chain.features) {\n let f;\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n }\n\n // remove deleted glyphs\n let index = glyphs.length - 1;\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n\n index--;\n }\n\n return glyphs;\n }\n\n processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n }\n\n @cache\n getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n }\n\n getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n case 1:\n return this.processContextualSubstitution;\n case 2:\n return this.processLigature;\n case 4:\n return this.processNoncontextualSubstitutions;\n case 5:\n return this.processGlyphInsertion;\n default:\n throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\n }\n }\n\n processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n }\n\n processContextualSubstitution(glyph, entry, index) {\n let subsitutions = this.subtable.table.substitutionTable.items;\n if (entry.markIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.markIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.currentIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.currentIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[index];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n }\n\n processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n\n if (entry.flags & PERFORM_ACTION) {\n let actions = this.subtable.table.ligatureActions;\n let components = this.subtable.table.components;\n let ligatureList = this.subtable.table.ligatureList;\n\n let actionIndex = entry.action;\n let last = false;\n let ligatureIndex = 0;\n let codePoints = [];\n let ligatureGlyphs = [];\n\n while (!last) {\n let componentGlyph = this.ligatureStack.pop();\n codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\n\n let action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n let store = !!(action & STORE_MASK);\n let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n offset += this.glyphs[componentGlyph].id;\n\n let component = components.getItem(offset);\n ligatureIndex += component;\n\n if (last || store) {\n let ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n }\n\n // Put ligature glyph indexes back on the stack\n this.ligatureStack.push(...ligatureGlyphs);\n }\n }\n\n processNoncontextualSubstitutions(subtable, glyphs, index) {\n let lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n for (index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.id !== 0xffff) {\n let gid = lookupTable.lookup(glyph.id);\n if (gid) { // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n }\n\n _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n let insertions = [];\n while (count--) {\n let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n\n if (!isBefore) {\n glyphIndex++;\n }\n\n this.glyphs.splice(glyphIndex, 0, ...insertions);\n }\n\n processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n\n if (entry.markedInsertIndex !== 0xffff) {\n let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n\n if (entry.currentInsertIndex !== 0xffff) {\n let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\n }\n }\n\n getSupportedFeatures() {\n let features = [];\n for (let chain of this.morx.chains) {\n for (let feature of chain.features) {\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n\n return features;\n }\n\n generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n\n return this.inputCache[gid] || [];\n }\n\n generateInputCache() {\n this.inputCache = {};\n\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n }\n\n generateInputsForSubtable(subtable) {\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n\n let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n\n this.subtable = subtable;\n this.ligatureStack = [];\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let input = [];\n let stack = [];\n this.glyphs = [];\n\n stateMachine.traverse({\n enter: (glyph, entry) => {\n let glyphs = this.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: this.ligatureStack.slice()\n });\n\n // Add glyph to input and glyphs to process.\n let g = this.font.getGlyph(glyph);\n input.push(g);\n glyphs.push(input[input.length - 1]);\n\n // Process ligature substitution\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\n\n // Add input to result if only one matching (non-deleted) glyph remains.\n let count = 0;\n let found = 0;\n for (let i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n\n if (count === 1) {\n let result = input.map(g => g.id);\n let cache = this.inputCache[found];\n if (cache) {\n cache.push(result);\n } else {\n this.inputCache[found] = [result];\n }\n }\n },\n\n exit: () => {\n ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\n input.pop();\n }\n });\n }\n}\n\n// swaps the glyphs in rangeA with those in rangeB\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\n let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n if (reverseB) {\n end.reverse();\n }\n\n let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\n if (reverseA) {\n start.reverse();\n }\n\n glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\n return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n let length = lastGlyph - firstGlyph + 1;\n switch (verb) {\n case 0: // no change\n return glyphs;\n\n case 1: // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n case 2: // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n case 3: // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n case 4: // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n case 5: // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n case 6: // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n case 7: // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n case 8: // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n case 9: // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n case 10: // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n case 11: // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n case 12: // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n case 13: // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n case 14: // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n case 15: // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n default:\n throw new Error(`Unknown verb: ${verb}`);\n }\n}\n","import AATLookupTable from './AATLookupTable';\n\nconst START_OF_TEXT_STATE = 0;\nconst START_OF_LINE_STATE = 1;\n\nconst END_OF_TEXT_CLASS = 0;\nconst OUT_OF_BOUNDS_CLASS = 1;\nconst DELETED_GLYPH_CLASS = 2;\nconst END_OF_LINE_CLASS = 3;\n\nconst DONT_ADVANCE = 0x4000;\n\nexport default class AATStateMachine {\n constructor(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n\n process(glyphs, reverse, processEntry) {\n let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n let index = reverse ? glyphs.length - 1 : 0;\n let dir = reverse ? -1 : 1;\n\n while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\n let glyph = null;\n let classCode = OUT_OF_BOUNDS_CLASS;\n let shouldAdvance = true;\n\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n if (glyph.id === 0xffff) { // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n\n let row = this.stateTable.stateArray.getItem(currentState);\n let entryIndex = row[classCode];\n let entry = this.stateTable.entryTable.getItem(entryIndex);\n\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n\n currentState = entry.newState;\n if (shouldAdvance) {\n index += dir;\n }\n }\n\n return glyphs;\n }\n\n /**\n * Performs a depth-first traversal of the glyph strings\n * represented by the state machine.\n */\n traverse(opts, state = 0, visited = new Set) {\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n\n let {nClasses, stateArray, entryTable} = this.stateTable;\n let row = stateArray.getItem(state);\n\n // Skip predefined classes\n for (let classCode = 4; classCode < nClasses; classCode++) {\n let entryIndex = row[classCode];\n let entry = entryTable.getItem(entryIndex);\n\n // Try all glyphs in the class\n for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n }\n}\n","import {cache} from '../decorators';\nimport {range} from '../utils';\n\nexport default class AATLookupTable {\n constructor(table) {\n this.table = table;\n }\n\n lookup(glyph) {\n switch (this.table.version) {\n case 0: // simple array format\n return this.table.values.getItem(glyph);\n\n case 2: // segment format\n case 4: {\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n\n return null;\n }\n\n case 6: { // lookup single\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.glyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.glyph) {\n max = mid - 1;\n } else if (glyph > seg.glyph) {\n min = mid + 1;\n } else {\n return seg.value;\n }\n }\n\n return null;\n }\n\n case 8: // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n }\n\n @cache\n glyphsForValue(classValue) {\n let res = [];\n\n switch (this.table.version) {\n case 2: // segment format\n case 4: {\n for (let segment of this.table.segments) {\n if ((this.table.version === 2 && segment.value === classValue)) {\n res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (let index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n\n break;\n }\n\n case 6: { // lookup single\n for (let segment of this.table.segments) {\n if (segment.value === classValue) {\n res.push(segment.glyph);\n }\n }\n\n break;\n }\n\n case 8: { // lookup trimmed\n for (let i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n\n break;\n }\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n\n return res;\n }\n}\n","import ShapingPlan from './ShapingPlan';\nimport * as Shapers from './shapers';\nimport GlyphInfo from './GlyphInfo';\nimport GSUBProcessor from './GSUBProcessor';\nimport GPOSProcessor from './GPOSProcessor';\n\nexport default class OTLayoutEngine {\n constructor(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n\n setup(glyphRun) {\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\n\n // Select a script based on what is available in GSUB/GPOS.\n let script = null;\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n this.shaper = Shapers.choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\n\n // Assign chosen features to output glyph run\n for (let key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n }\n\n substitute(glyphRun) {\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos);\n\n // Map glyph infos back to normal Glyph objects\n glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\n }\n }\n\n position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n // Reverse the glyphs and positions if the script is right-to-left\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n\n return this.GPOSProcessor && this.GPOSProcessor.features;\n }\n\n zeroMarkAdvances(positions) {\n for (let i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GSUBProcessor.features));\n }\n\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GPOSProcessor.features));\n }\n\n return features;\n }\n}\n","import * as Script from '../layout/Script';\n\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nexport default class ShapingPlan {\n constructor(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n\n /**\n * Adds the given features to the last stage.\n * Ignores features that have already been applied.\n */\n _addFeatures(features, global) {\n let stageIndex = this.stages.length - 1;\n let stage = this.stages[stageIndex];\n for (let feature of features) {\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n\n /**\n * Add features to the last stage\n */\n add(arg, global = true) {\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n\n if (typeof arg === 'string') {\n arg = [arg];\n }\n\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n\n /**\n * Add a new stage\n */\n addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n }\n\n setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (let tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n let stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n\n /**\n * Assigns the global features to the given glyphs\n */\n assignGlobalFeatures(glyphs) {\n for (let glyph of glyphs) {\n for (let feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n\n /**\n * Executes the planned stages using the given OTProcessor\n */\n process(processor, glyphs, positions) {\n for (let stage of this.stages) {\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport ArabicShaper from './ArabicShaper';\nimport HangulShaper from './HangulShaper';\nimport IndicShaper from './IndicShaper';\nimport UniversalShaper from './UniversalShaper';\n\nconst SHAPERS = {\n arab: ArabicShaper, // Arabic\n mong: ArabicShaper, // Mongolian\n syrc: ArabicShaper, // Syriac\n 'nko ': ArabicShaper, // N'Ko\n phag: ArabicShaper, // Phags Pa\n mand: ArabicShaper, // Mandaic\n mani: ArabicShaper, // Manichaean\n phlp: ArabicShaper, // Psalter Pahlavi\n\n hang: HangulShaper, // Hangul\n\n bng2: IndicShaper, // Bengali\n beng: IndicShaper, // Bengali\n dev2: IndicShaper, // Devanagari\n deva: IndicShaper, // Devanagari\n gjr2: IndicShaper, // Gujarati\n gujr: IndicShaper, // Gujarati\n guru: IndicShaper, // Gurmukhi\n gur2: IndicShaper, // Gurmukhi\n knda: IndicShaper, // Kannada\n knd2: IndicShaper, // Kannada\n mlm2: IndicShaper, // Malayalam\n mlym: IndicShaper, // Malayalam\n ory2: IndicShaper, // Oriya\n orya: IndicShaper, // Oriya\n taml: IndicShaper, // Tamil\n tml2: IndicShaper, // Tamil\n telu: IndicShaper, // Telugu\n tel2: IndicShaper, // Telugu\n khmr: IndicShaper, // Khmer\n\n bali: UniversalShaper, // Balinese\n batk: UniversalShaper, // Batak\n brah: UniversalShaper, // Brahmi\n bugi: UniversalShaper, // Buginese\n buhd: UniversalShaper, // Buhid\n cakm: UniversalShaper, // Chakma\n cham: UniversalShaper, // Cham\n dupl: UniversalShaper, // Duployan\n egyp: UniversalShaper, // Egyptian Hieroglyphs\n gran: UniversalShaper, // Grantha\n hano: UniversalShaper, // Hanunoo\n java: UniversalShaper, // Javanese\n kthi: UniversalShaper, // Kaithi\n kali: UniversalShaper, // Kayah Li\n khar: UniversalShaper, // Kharoshthi\n khoj: UniversalShaper, // Khojki\n sind: UniversalShaper, // Khudawadi\n lepc: UniversalShaper, // Lepcha\n limb: UniversalShaper, // Limbu\n mahj: UniversalShaper, // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper, // Meitei Mayek\n modi: UniversalShaper, // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper, // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper, // Rejang\n saur: UniversalShaper, // Saurashtra\n shrd: UniversalShaper, // Sharada\n sidd: UniversalShaper, // Siddham\n sinh: IndicShaper, // Sinhala\n sund: UniversalShaper, // Sundanese\n sylo: UniversalShaper, // Syloti Nagri\n tglg: UniversalShaper, // Tagalog\n tagb: UniversalShaper, // Tagbanwa\n tale: UniversalShaper, // Tai Le\n lana: UniversalShaper, // Tai Tham\n tavt: UniversalShaper, // Tai Viet\n takr: UniversalShaper, // Takri\n tibt: UniversalShaper, // Tibetan\n tfng: UniversalShaper, // Tifinagh\n tirh: UniversalShaper, // Tirhuta\n\n latn: DefaultShaper, // Latin\n DFLT: DefaultShaper // Default\n};\n\nexport function choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n let shaper = SHAPERS[s];\n if (shaper) {\n return shaper;\n }\n }\n\n return DefaultShaper;\n}\n","import {isDigit} from 'unicode-properties';\n\nconst VARIATION_FEATURES = ['rvrn'];\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nconst VERTICAL_FEATURES = ['vert'];\nconst DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\n\nexport default class DefaultShaper {\n static zeroMarkWidths = 'AFTER_GPOS';\n static plan(plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(plan);\n this.planFeatures(plan);\n this.planPostprocessing(plan, features);\n\n // Assign the global features to all the glyphs\n plan.assignGlobalFeatures(glyphs);\n\n // Assign local features to glyphs\n this.assignFeatures(plan, glyphs);\n }\n\n static planPreprocessing(plan) {\n plan.add({\n global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\n local: FRACTIONAL_FEATURES\n });\n }\n\n static planFeatures(plan) {\n // Do nothing by default. Let subclasses override this.\n }\n\n static planPostprocessing(plan, userFeatures) {\n plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\n plan.setFeatureOverrides(userFeatures);\n }\n\n static assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (let i = 0; i < glyphs.length; i++) {\n let glyph = glyphs[i];\n if (glyph.codePoints[0] === 0x2044) { // fraction slash\n let start = i;\n let end = i + 1;\n\n // Apply numerator\n while (start > 0 && isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n }\n\n // Apply denominator\n while (end < glyphs.length && isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n }\n\n // Apply fraction slash\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport {getCategory} from 'unicode-properties';\nimport UnicodeTrie from 'unicode-trie';\nimport { decodeBase64 } from '../../utils';\n\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\n\nconst ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\n\nconst ISOL = 'isol';\nconst FINA = 'fina';\nconst FIN2 = 'fin2';\nconst FIN3 = 'fin3';\nconst MEDI = 'medi';\nconst MED2 = 'med2';\nconst INIT = 'init';\nconst NONE = null;\n\n// Each entry is [prevAction, curAction, nextState]\nconst STATE_TABLE = [\n // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n // State 0: prev was U, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ],\n\n // State 1: prev was R or ISOL/ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ],\n\n // State 2: prev was D/L in ISOL form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ],\n\n // State 3: prev was D in FINA form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ],\n\n // State 4: prev was FINA ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ],\n\n // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ],\n\n // State 6: prev was DALATH/RISH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ]\n];\n\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nexport default class ArabicShaper extends DefaultShaper {\n static planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n for (let i = 0; i < FEATURES.length; i++) {\n let feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n\n plan.addStage('mset');\n }\n\n static assignFeatures(plan, glyphs) {\n super.assignFeatures(plan, glyphs);\n\n let prev = -1;\n let state = 0;\n let actions = [];\n\n // Apply the state machine to map glyphs to features\n for (let i = 0; i < glyphs.length; i++) {\n let curAction, prevAction;\n var glyph = glyphs[i];\n let type = getShapingClass(glyph.codePoints[0]);\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n\n [prevAction, curAction, state] = STATE_TABLE[state][type];\n\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n\n actions[i] = curAction;\n prev = i;\n }\n\n // Apply the chosen features to their respective glyphs\n for (let index = 0; index < glyphs.length; index++) {\n let feature;\n var glyph = glyphs[index];\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n }\n}\n\nfunction getShapingClass(codePoint) {\n let res = trie.get(codePoint);\n if (res) {\n return res - 1;\n }\n\n let category = getCategory(codePoint);\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n\n return ShapingClasses.Non_Joining;\n}\n","import DefaultShaper from './DefaultShaper';\nimport GlyphInfo from '../GlyphInfo';\n\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n * - decompose if unsupported by the font:\n * -> \n * -> \n * -> \n *\n * - compose if supported by the font:\n * -> \n * -> \n * -> \n *\n * - reorder tone marks (S is any valid syllable):\n * -> \n *\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nexport default class HangulShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n }\n\n static assignFeatures(plan, glyphs) {\n let state = 0;\n let i = 0;\n while (i < glyphs.length) {\n let action;\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n let type = getType(code);\n\n [ action, state ] = STATE_TABLE[state][type];\n\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n break;\n\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n\n i++;\n }\n }\n}\n\nconst HANGUL_BASE = 0xac00;\nconst HANGUL_END = 0xd7a4;\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nconst L_BASE = 0x1100; // lead\nconst V_BASE = 0x1161; // vowel\nconst T_BASE = 0x11a7; // trail\nconst L_COUNT = 19;\nconst V_COUNT = 21;\nconst T_COUNT = 28;\nconst L_END = L_BASE + L_COUNT - 1;\nconst V_END = V_BASE + V_COUNT - 1;\nconst T_END = T_BASE + T_COUNT - 1;\nconst DOTTED_CIRCLE = 0x25cc;\n\nconst isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\nconst isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\nconst isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\nconst isTone = code => 0x302e <= code && code <= 0x302f;\nconst isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;\nconst isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\n\n// Character categories\nconst X = 0; // Other character\nconst L = 1; // Leading consonant\nconst V = 2; // Medial vowel\nconst T = 3; // Trailing consonant\nconst LV = 4; // Composed syllable\nconst LVT = 5; // Composed syllable\nconst M = 6; // Tone mark\n\n// This function classifies a character using the above categories.\nfunction getType(code) {\n if (isL(code)) { return L; }\n if (isV(code)) { return V; }\n if (isT(code)) { return T; }\n if (isLV(code)) { return LV; }\n if (isLVT(code)) { return LVT; }\n if (isTone(code)) { return M; }\n return X;\n}\n\n// State machine actions\nconst NO_ACTION = 0;\nconst DECOMPOSE = 1;\nconst COMPOSE = 2;\nconst TONE_MARK = 4;\nconst INVALID = 5;\n\n// Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\nconst STATE_TABLE = [\n // X L V T LV LVT M\n // State 0: start state\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 1: \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 2: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\n\n // State 3: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\n];\n\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n\n let s = code - HANGUL_BASE;\n let t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n let l = L_BASE + s / V_COUNT | 0;\n let v = V_BASE + s % V_COUNT;\n\n // Don't decompose if all of the components are not available\n if (!font.hasGlyphForCodePoint(l) ||\n !font.hasGlyphForCodePoint(v) ||\n (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\n return i;\n }\n\n // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n let ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n\n let vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n\n let insert = [ ljmo, vjmo ];\n\n if (t > T_BASE) {\n let tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n\n glyphs.splice(i, 1, ...insert);\n return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n let type = getType(code);\n\n let prev = glyphs[i - 1].codePoints[0];\n let prevType = getType(prev);\n\n // Figure out what type of syllable we're dealing with\n let lv, ljmo, vjmo, tjmo;\n if (prevType === LV && type === T) {\n // \n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // \n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // \n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n\n let l = ljmo.codePoints[0];\n let v = vjmo.codePoints[0];\n\n // Make sure L and V are combining characters\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n\n let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\n if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\n let s = lv + (t - T_BASE);\n\n // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n if (font.hasGlyphForCodePoint(s)) {\n let del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n }\n\n // Didn't compose (either a non-combining component or unsupported by font).\n if (ljmo) { ljmo.features.ljmo = true; }\n if (vjmo) { vjmo.features.vjmo = true; }\n if (tjmo) { tjmo.features.tjmo = true; }\n\n if (prevType === LV) {\n // Sequence was originally , which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n\n return i;\n}\n\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n case V:\n return 2;\n case T:\n return 3;\n }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n // Move tone mark to the beginning of the previous syllable, unless it is zero width\n if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\n\n let prev = glyphs[i - 1].codePoints[0];\n let len = getLength(prev);\n\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\n\n // If the tone mark is zero width, insert the dotted circle before, otherwise after\n let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n\n return i;\n}\n","import {isMark} from 'unicode-properties';\nimport OTProcessor from './OTProcessor';\n\nexport default class GlyphInfo {\n constructor(font, id, codePoints = [], features) {\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n\n this.features = {};\n if (Array.isArray(features)) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n\n get id() {\n return this._id;\n }\n\n set id(id) {\n this._id = id;\n this.substituted = true;\n\n let GDEF = this._font.GDEF;\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n\n copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n }\n}\n","import GlyphIterator from './GlyphIterator';\nimport * as Script from '../layout/Script';\n\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nexport default class OTProcessor {\n constructor(font, table) {\n this.font = font;\n this.table = table;\n\n this.script = null;\n this.scriptTag = null;\n\n this.language = null;\n this.languageTag = null;\n\n this.features = {};\n this.lookups = {};\n\n // Setup variation substitutions\n this.variationsIndex = font._variationProcessor\n ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\n : -1;\n\n // initialize to default script + language\n this.selectScript();\n\n // current context (set by applyFeatures)\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n\n findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n for (let entry of this.table.scriptList) {\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n\n return null;\n }\n\n selectScript(script, language, direction) {\n let changed = false;\n let entry;\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n\n if (!entry) {\n return this.scriptTag;\n }\n\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n\n if (!direction || direction !== this.direction) {\n this.direction = direction || Script.direction(script);\n }\n\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n\n if (!language || language !== this.languageTag) {\n this.language = null;\n\n for (let lang of this.script.langSysRecords) {\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n\n changed = true;\n }\n\n // Build a feature lookup table\n if (changed) {\n this.features = {};\n if (this.language) {\n for (let featureIndex of this.language.featureIndexes) {\n let record = this.table.featureList[featureIndex];\n let substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n\n return this.scriptTag;\n }\n\n lookupsForFeatures(userFeatures = [], exclude) {\n let lookups = [];\n for (let tag of userFeatures) {\n let feature = this.features[tag];\n if (!feature) {\n continue;\n }\n\n for (let lookupIndex of feature.lookupListIndexes) {\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n\n lookups.sort((a, b) => a.index - b.index);\n return lookups;\n }\n\n substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n\n let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n let substitutions = record.featureTableSubstitution.substitutions;\n for (let substitution of substitutions) {\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n\n return null;\n }\n\n findVariationsIndex(coords) {\n let variations = this.table.featureVariations;\n if (!variations) {\n return -1;\n }\n\n let records = variations.featureVariationRecords;\n for (let i = 0; i < records.length; i++) {\n let conditions = records[i].conditionSet.conditionTable;\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n\n return -1;\n }\n\n variationConditionsMatch(conditions, coords) {\n return conditions.every(condition => {\n let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n let lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n }\n\n applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n\n for (let { feature, lookup } of lookups) {\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n\n for (let table of lookup.subTables) {\n let res = this.applyLookup(lookup.lookupType, table);\n if (res) {\n break;\n }\n }\n\n this.glyphIterator.next();\n }\n }\n }\n\n applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n }\n\n applyLookupList(lookupRecords) {\n let options = this.glyphIterator.options;\n let glyphIndex = this.glyphIterator.index;\n\n for (let lookupRecord of lookupRecords) {\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex);\n\n // Get the lookup and setup flags for subtables\n let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\n\n // Apply lookup subtables until one matches\n for (let table of lookup.subTables) {\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n }\n\n coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n\n case 2:\n for (let range of coverage.rangeRecords) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n\n break;\n }\n\n return -1;\n }\n\n match(sequenceIndex, sequence, fn, matched) {\n let pos = this.glyphIterator.index;\n let glyph = this.glyphIterator.increment(sequenceIndex);\n let idx = 0;\n\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n\n idx++;\n glyph = this.glyphIterator.next();\n }\n\n this.glyphIterator.index = pos;\n if (idx < sequence.length) {\n return false;\n }\n\n return matched || true;\n }\n\n sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\n }\n\n sequenceMatchIndices(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => {\n // If the current feature doesn't apply to this glyph,\n if (!(this.currentFeature in glyph.features)) {\n return false;\n }\n\n return component === glyph.id;\n }, []);\n }\n\n coverageSequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (coverage, glyph) =>\n this.coverageIndex(coverage, glyph.id) >= 0\n );\n }\n\n getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1: // Class array\n let i = glyph - classDef.startGlyph;\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n\n break;\n\n case 2:\n for (let range of classDef.classRangeRecord) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n\n break;\n }\n\n return 0;\n }\n\n classSequenceMatches(sequenceIndex, sequence, classDef) {\n return this.match(sequenceIndex, sequence, (classID, glyph) =>\n classID === this.getClassID(glyph.id, classDef)\n );\n }\n\n applyContext(table) {\n let index, set;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n set = table.ruleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n if (index === -1) {\n return false;\n }\n\n set = table.classSet[index];\n for (let rule of set) {\n if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n\n applyChainingContext(table) {\n let index;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let set = table.chainRuleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\n && this.sequenceMatches(1, rule.input)\n && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n let rules = table.chainClassSet[index];\n if (!rules) {\n return false;\n }\n\n for (let rule of rules) {\n if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\n this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\n this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\n this.coverageSequenceMatches(0, table.inputCoverage) &&\n this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n}\n","export default class GlyphIterator {\n constructor(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n\n reset(options = {}, index = 0) {\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n }\n\n get cur() {\n return this.glyphs[this.index] || null;\n }\n\n shouldIgnore(glyph) {\n return (this.flags.ignoreMarks && glyph.isMark) ||\n (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\n (this.flags.ignoreLigatures && glyph.isLigature) ||\n (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\n }\n\n move(dir) {\n this.index += dir;\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n\n return this.glyphs[this.index];\n }\n\n next() {\n return this.move(+1);\n }\n\n prev() {\n return this.move(-1);\n }\n\n peek(count = 1) {\n let idx = this.index;\n let res = this.increment(count);\n this.index = idx;\n return res;\n }\n\n peekIndex(count = 1) {\n let idx = this.index;\n this.increment(count);\n let res = this.index;\n this.index = idx;\n return res;\n }\n\n increment(count = 1) {\n let dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n while (count--) {\n this.move(dir);\n }\n\n return this.glyphs[this.index];\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport {getCategory} from 'unicode-properties';\nimport * as Script from '../../layout/Script';\nimport GlyphInfo from '../GlyphInfo';\nimport indicMachine from './indic.json';\nimport useData from './use.json';\nimport {\n CATEGORIES,\n POSITIONS,\n CONSONANT_FLAGS,\n JOINER_FLAGS,\n HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\n INDIC_DECOMPOSITIONS\n} from './indic-data';\nimport { decodeBase64 } from '../../utils';\n\nconst {decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/indic.trie', 'base64')));\nconst stateMachine = new StateMachine(indicMachine);\n\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nexport default class IndicShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n plan.addStage(['locl', 'ccmp']);\n\n plan.addStage(initialReordering);\n\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n\n plan.addStage(finalReordering);\n\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n });\n\n // Setup the indic config for the selected script\n plan.unicodeScript = Script.fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\n\n // TODO: turn off kern (Khmer) and liga features.\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\n if (d) {\n let decomposed = d.map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction indicCategory(glyph) {\n return trie.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\n}\n\nclass IndicInfo {\n constructor(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n let last = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\n if (start > last) {\n ++syllable;\n for (let i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new IndicInfo(\n 1 << indicCategory(glyphs[i]),\n indicPosition(glyphs[i]),\n tags[0],\n syllable\n );\n }\n\n last = end + 1;\n }\n\n if (last < glyphs.length) {\n ++syllable;\n for (let i = last; i < glyphs.length; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\n\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n for (let glyph of glyphs) {\n glyph.features = {[feature]: true};\n }\n\n let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n\n return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n let glyphs = [virama, consonant, virama];\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n\n return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n let virama = font.glyphForCodePoint(indicConfig.virama).id;\n if (virama) {\n let info = new GlyphInfo(font, virama, [indicConfig.virama]);\n for (let i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let {category, syllableType} = glyphs[start].shaperInfo;\n\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n\n if (syllableType === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(\n 1 << indicCategory(g),\n indicPosition(g),\n glyphs[start].shaperInfo.syllableType,\n glyphs[start].shaperInfo.syllable\n );\n\n // Insert after possible Repha.\n let i = start;\n while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\n i++;\n }\n\n glyphs.splice(i++, 0, g);\n end++;\n }\n\n // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n let base = end;\n let limit = start;\n let hasReph = false;\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\n features.rphf &&\n start + 3 <= end && (\n (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\n (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\n )\n ) {\n // See if it matches the 'rphf' feature.\n let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\n limit += 2;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n\n switch (indicConfig.basePos) {\n case 'Last': {\n // starting from the end of the syllable, move backwards\n let i = end;\n let seenBelow = false;\n\n do {\n let info = glyphs[--i].shaperInfo;\n\n // until a consonant is found\n if (isConsonant(glyphs[i])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\n base = i;\n break;\n }\n\n // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n if (info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n\n base = i;\n } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (i > limit);\n break;\n }\n\n case 'First': {\n // The first consonant is always the base.\n base = start;\n\n // Mark all subsequent consonants as below.\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n glyphs[i].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n }\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n }\n\n // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n\n // Reorder characters\n\n for (let i = start; i < base; i++) {\n let info = glyphs[i].shaperInfo;\n info.position = Math.min(POSITIONS.Pre_C, info.position);\n }\n\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n\n // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n for (let j = i + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n break;\n }\n }\n\n // Handle beginning Ra\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n }\n\n // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n if (plan.isOldSpec) {\n let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\n let j;\n for (j = end - 1; j > i; j--) {\n if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\n break;\n }\n }\n\n if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\n // Move Halant to after last consonant.\n let t = glyphs[i];\n glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\n glyphs[j] = t;\n }\n\n break;\n }\n }\n }\n\n // Attach misc marks to previous char to move with them.\n let lastPos = POSITIONS.Start;\n for (let i = start; i < end; i++) {\n let info = glyphs[i].shaperInfo;\n if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\n info.position = lastPos;\n if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (let j = i; j > start; j--) {\n if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n info.position = glyphs[j - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (info.position !== POSITIONS.SMVD) {\n lastPos = info.position;\n }\n }\n\n // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n let last = base;\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n for (let j = last + 1; j < i; j++) {\n if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\n }\n }\n last = i;\n } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n last = i;\n }\n }\n\n let arr = glyphs.slice(start, end);\n arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\n glyphs.splice(start, arr.length, ...arr);\n\n // Find base again\n for (let i = start; i < end; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n base = i;\n break;\n }\n }\n\n // Setup features now\n\n // Reph\n for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\n glyphs[i].features.rphf = true;\n }\n\n // Pre-base\n let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n for (let i = start; i < base; i++) {\n glyphs[i].features.half = true;\n if (blwf) {\n glyphs[i].features.blwf = true;\n }\n }\n\n // Post-base\n for (let i = base + 1; i < end; i++) {\n glyphs[i].features.abvf = true;\n glyphs[i].features.pstf = true;\n glyphs[i].features.blwf = true;\n }\n\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (let i = start; i + 1 < base; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\n glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\n (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\n ) {\n glyphs[i].features.blwf = true;\n glyphs[i + 1].features.blwf = true;\n }\n }\n }\n\n let prefLen = 2;\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (let i = base + 1; i + prefLen - 1 < end; i++) {\n let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\n if (wouldSubstitute(g, 'pref')) {\n for (let j = 0; j < prefLen; j++) {\n glyphs[i++].features.pref = true;\n }\n\n // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n if (features.cfar) {\n for (; i < end; i++) {\n glyphs[i].features.cfar = true;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply ZWJ/ZWNJ effects\n for (let i = start + 1; i < end; i++) {\n if (isJoiner(glyphs[i])) {\n let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\n let j = i;\n\n do {\n j--;\n\n // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n\n // A ZWNJ disables HALF.\n if (nonJoiner) {\n delete glyphs[j].features.half;\n }\n } while (j > start && !isConsonant(glyphs[j]));\n }\n }\n }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n\n let tryPref = !!features.pref;\n\n // Find base again\n let base = start;\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n break;\n }\n }\n }\n\n // For Malayalam, skip over unformed below- (but NOT post-) forms.\n if (plan.unicodeScript === 'Malayalam') {\n for (let i = base + 1; i < end; i++) {\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i === end || !isHalantOrCoeng(glyphs[i])) {\n break;\n }\n\n i++; // Skip halant.\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\n base = i;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n break;\n }\n }\n\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n }\n\n // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n let newPos = base === end ? base - 2 : base - 1;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (let i = newPos; i > start; i--) {\n if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\n let oldPos = i - 1;\n if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\n base--;\n }\n\n let tmp = glyphs[oldPos];\n glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\n glyphs[newPos] = tmp;\n\n newPos--;\n }\n }\n }\n }\n\n // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n if (start + 1 < end &&\n glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\n (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\n ) {\n let newRephPos;\n let rephPos = indicConfig.rephPos;\n let found = false;\n\n // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n\n // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n\n // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n }\n\n // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n }\n\n // 6. Otherwise, reorder reph to the end of the syllable.\n if (!found) {\n newRephPos = end - 1;\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n }\n\n // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (let i = base + 1; i < newRephPos; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n\n let reph = glyphs[start];\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\n glyphs[newRephPos] = reph;\n\n if (start < base && base <= newRephPos) {\n base--;\n }\n }\n\n // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n\n // Note: We just check that something got substituted. We don't check that\n // the feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n let newPos = base;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\n let oldPos = i;\n for (let j = base + 1; j < oldPos; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n newPos--;\n break;\n }\n }\n }\n }\n\n if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos < end && isJoiner(glyphs[newPos])) {\n newPos++;\n }\n }\n\n let oldPos = i;\n let tmp = glyphs[oldPos];\n glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\n glyphs[newPos] = tmp;\n\n if (newPos <= base && base < oldPos) {\n base++;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply 'init' to the Left Matra if it's a word start.\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n","{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}","{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}","// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nexport const CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13, // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14, // Khmer-style Virama.\n Repha: 1 << 15, // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17, // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n};\n\n// Visual positions in a syllable from left to right.\nexport const POSITIONS = {\n Start: 1 << 0,\n\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n\n Above_C: 1 << 6,\n\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n\n End: 1 << 15\n};\n\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\n\nexport const INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n};\n\n// Additional decompositions that aren't in Unicode\nexport const INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport GlyphInfo from '../GlyphInfo';\nimport useData from './use.json';\nimport { decodeBase64 } from '../../utils';\n\nconst {categories, decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/use.trie', 'base64')));\nconst stateMachine = new StateMachine(useData);\n\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nexport default class UniversalShaper extends DefaultShaper {\n static zeroMarkWidths = 'BEFORE_GPOS';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n // Default glyph pre-processing group\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\n\n // Reordering group\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref);\n\n // Orthographic unit shaping group\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder);\n\n // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n\n // Standard topographic presentation and positional feature application\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n if (decompositions[codepoint]) {\n let decomposed = decompositions[codepoint].map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction useCategory(glyph) {\n return trie.get(glyph.codePoints[0]);\n}\n\nclass USEInfo {\n constructor(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\n }\n\n // Assign rphf feature\n let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n for (let i = start; i < start + limit; i++) {\n glyphs[i].features.rphf = true;\n }\n }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n for (let glyph of glyphs) {\n glyph.substituted = false;\n }\n}\n\nfunction recordRphf(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\n\nfunction recordPref(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\n\nfunction reorder(font, glyphs) {\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let i, j;\n let info = glyphs[start].shaperInfo;\n let type = info.syllableType;\n\n // Only a few syllable types need reordering.\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n }\n\n // Insert a dotted circle glyph in broken clusters.\n if (type === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info;\n\n // Insert after possible Repha.\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\n glyphs.splice(++i, 0, g);\n end++;\n }\n\n // Move things forward.\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\n break;\n }\n }\n }\n\n // Move things back.\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\n }\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\n","import OTProcessor from './OTProcessor';\nimport GlyphInfo from './GlyphInfo';\n\nexport default class GSUBProcessor extends OTProcessor {\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let glyph = this.glyphIterator.cur;\n switch (table.version) {\n case 1:\n glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\n break;\n\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n\n return true;\n }\n\n case 2: { // Multiple Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let sequence = table.sequences.get(index);\n\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n\n let features = this.glyphIterator.cur.features;\n let curGlyph = this.glyphIterator.cur;\n let replacement = sequence.slice(1).map((gid, i) => {\n let glyph = new GlyphInfo(this.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n\n this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\n return true;\n }\n\n return false;\n }\n\n case 3: { // Alternate Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let USER_INDEX = 0; // TODO\n this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\n return true;\n }\n\n return false;\n }\n\n case 4: { // Ligature Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n for (let ligature of table.ligatureSets.get(index)) {\n let matched = this.sequenceMatchIndices(1, ligature.components);\n if (!matched) {\n continue;\n }\n\n let curGlyph = this.glyphIterator.cur;\n\n // Concatenate all of the characters the new ligature will represent\n let characters = curGlyph.codePoints.slice();\n for (let index of matched) {\n characters.push(...this.glyphs[index].codePoints);\n }\n\n // Create the replacement ligature glyph\n let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\n ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true;\n\n // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n let isMarkLigature = curGlyph.isMark;\n for (let i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n\n let lastLigID = curGlyph.ligatureID;\n let lastNumComps = curGlyph.codePoints.length;\n let curComps = lastNumComps;\n let idx = this.glyphIterator.index + 1;\n\n // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n for (let matchIndex of matched) {\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n }\n\n // Adjust ligature components for any marks following\n if (lastLigID && !isMarkLigature) {\n for (let i = idx; i < this.glyphs.length; i++) {\n if (this.glyphs[i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\n this.glyphs[i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n }\n\n // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n for (let i = matched.length - 1; i >= 0; i--) {\n this.glyphs.splice(matched[i], 1);\n }\n\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n\n return false;\n }\n\n case 5: // Contextual Substitution\n return this.applyContext(table);\n\n case 6: // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n\n case 7: // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`GSUB lookupType ${lookupType} is not supported`);\n }\n }\n}\n","import OTProcessor from './OTProcessor';\n\nexport default class GPOSProcessor extends OTProcessor {\n applyPositionValue(sequenceIndex, value) {\n let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n }\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n }\n\n // TODO: device tables\n }\n\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single positioning value\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n\n return true;\n }\n\n case 2: { // Pair Adjustment Positioning\n let nextGlyph = this.glyphIterator.peek();\n if (!nextGlyph) {\n return false;\n }\n\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1: // Adjustments for glyph pairs\n let set = table.pairSets.get(index);\n\n for (let pair of set) {\n if (pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n return false;\n\n case 2: // Class pair adjustment\n let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n let class2 = this.getClassID(nextGlyph.id, table.classDef2);\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n case 3: { // Cursive Attachment Positioning\n let nextIndex = this.glyphIterator.peekIndex();\n let nextGlyph = this.glyphs[nextIndex];\n if (!nextGlyph) {\n return false;\n }\n\n let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n\n let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n\n let entry = this.getAnchor(nextRecord.entryAnchor);\n let exit = this.getAnchor(curRecord.exitAnchor);\n\n let cur = this.positions[this.glyphIterator.index];\n let next = this.positions[nextIndex];\n let d;\n\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n\n d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n\n return true;\n }\n\n case 4: { // Mark to base positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n if (baseIndex === -1) {\n return false;\n }\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 5: { // Mark to ligature positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\n if (ligIndex === -1) {\n return false;\n }\n\n let ligAttach = table.ligatureArray[ligIndex];\n let markGlyph = this.glyphIterator.cur;\n let ligGlyph = this.glyphs[baseGlyphIndex];\n let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\n ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\n : ligGlyph.codePoints.length - 1;\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = ligAttach[compIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 6: { // Mark to mark positioning\n let mark1Index = this.coverageIndex(table.mark1Coverage);\n if (mark1Index === -1) {\n return false;\n }\n\n // get the previous mark to attach to\n let prevIndex = this.glyphIterator.peekIndex(-1);\n let prev = this.glyphs[prevIndex];\n if (!prev || !prev.isMark) {\n return false;\n }\n\n let cur = this.glyphIterator.cur;\n\n // The following logic was borrowed from Harfbuzz\n let good = false;\n if (cur.ligatureID === prev.ligatureID) {\n if (!cur.ligatureID) { // Marks belonging to the same base\n good = true;\n } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\n good = true;\n }\n }\n\n if (!good) {\n return false;\n }\n\n let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n if (mark2Index === -1) {\n return false;\n }\n\n let markRecord = table.mark1Array[mark1Index];\n let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, prevIndex);\n return true;\n }\n\n case 7: // Contextual positioning\n return this.applyContext(table);\n\n case 8: // Chaining contextual positioning\n return this.applyChainingContext(table);\n\n case 9: // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`Unsupported GPOS table: ${lookupType}`);\n }\n }\n\n applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n let baseCoords = this.getAnchor(baseAnchor);\n let markCoords = this.getAnchor(markRecord.markAnchor);\n\n let basePos = this.positions[baseGlyphIndex];\n let markPos = this.positions[this.glyphIterator.index];\n\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n }\n\n getAnchor(anchor) {\n // TODO: contour point, device tables\n let x = anchor.xCoordinate;\n let y = anchor.yCoordinate;\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n\n return { x, y };\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n super.applyFeatures(userFeatures, glyphs, advances);\n\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n\n this.fixMarkAttachment();\n }\n\n fixCursiveAttachment(i) {\n let glyph = this.glyphs[i];\n if (glyph.cursiveAttachment != null) {\n let j = glyph.cursiveAttachment;\n\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n }\n\n fixMarkAttachment() {\n for (let i = 0; i < this.glyphs.length; i++) {\n let glyph = this.glyphs[i];\n if (glyph.markAttachment != null) {\n let j = glyph.markAttachment;\n\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n\n if (this.direction === 'ltr') {\n for (let k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (let k = j + 1; k < i + 1; k++) {\n this.positions[i].xOffset += this.positions[k].xAdvance;\n this.positions[i].yOffset += this.positions[k].yAdvance;\n }\n }\n }\n }\n }\n}\n","import Glyph from './Glyph';\nimport Path from './Path';\nimport BBox from './BBox';\nimport * as r from 'restructure';\n\n// The header for both simple and composite glyphs\nlet GlyfHeader = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n});\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\n// Flags for composite glyphs\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\nconst ROUND_XY_TO_GRID = 1 << 2;\nconst WE_HAVE_A_SCALE = 1 << 3;\nconst MORE_COMPONENTS = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\nconst USE_MY_METRICS = 1 << 9;\nconst OVERLAP_COMPOUND = 1 << 10;\nconst SCALED_COMPONENT_OFFSET = 1 << 11;\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\n// Represents a point in a simple glyph\nexport class Point {\n constructor(onCurve, endContour, x = 0, y = 0) {\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n\n copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n }\n}\n\n// Represents a component in a composite glyph\nclass Component {\n constructor(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n }\n}\n\n/**\n * Represents a TrueType glyph.\n */\nexport default class TTFGlyph extends Glyph {\n type = 'TTF';\n\n // Parses just the glyph header and returns the bounding box\n _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += this._font.loca.offsets[this.id];\n let glyph = GlyfHeader.decode(stream);\n\n let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n }\n\n // Parses a single glyph coordinate\n _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n if (!same) {\n val = -val;\n }\n\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n\n return val;\n }\n\n // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n _decode() {\n let glyfPos = this._font.loca.offsets[this.id];\n let nextPos = this._font.loca.offsets[this.id + 1];\n\n // Nothing to do if there is no data for this glyph\n if (glyfPos === nextPos) { return null; }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += glyfPos;\n let startPos = stream.pos;\n\n let glyph = GlyfHeader.decode(stream);\n\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n\n return glyph;\n }\n\n _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n\n let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n\n let flags = [];\n let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag);\n\n // check for repeat flag\n if (flag & REPEAT) {\n let count = stream.readUInt8();\n for (let j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n\n let px = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n\n let py = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n\n if (this._font._variationProcessor) {\n let points = glyph.points.slice();\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.slice(-4);\n }\n\n return;\n }\n\n _decodeComposite(glyph, stream, offset = 0) {\n // this is a composite glyph\n glyph.components = [];\n let haveInstructions = false;\n let flags = MORE_COMPONENTS;\n\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n let gPos = stream.pos - offset;\n let glyphID = stream.readUInt16BE();\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX =\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n }\n\n glyph.components.push(component);\n }\n\n if (this._font._variationProcessor) {\n let points = [];\n for (let j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.splice(-4, 4);\n\n for (let i = 0; i < points.length; i++) {\n let point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n\n return haveInstructions;\n }\n\n _getPhantomPoints(glyph) {\n let cbox = this._getCBox(true);\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n\n let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\n\n return [\n new Point(false, true, glyph.xMin - leftBearing, 0),\n new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\n new Point(false, true, 0, glyph.yMax + topBearing),\n new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\n ];\n }\n\n // Decodes font data, resolves composite glyphs, and returns an array of contours\n _getContours() {\n let glyph = this._decode();\n if (!glyph) {\n return [];\n }\n\n let points = [];\n\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (let component of glyph.components) {\n let contours = this._font.getGlyph(component.glyphID)._getContours();\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n for (let j = 0; j < contour.length; j++) {\n let point = contour[j];\n let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\n let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\n points.push(new Point(point.onCurve, point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n }\n\n // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n\n let contours = [];\n let cur = [];\n for (let k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n\n return contours;\n }\n\n _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n\n let cbox = this._getCBox(true);\n super._getMetrics(cbox);\n\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n\n return this._metrics;\n }\n\n // Converts contours to a Path object that can be rendered\n _getPath() {\n let contours = this._getContours();\n let path = new Path;\n\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n let firstPt = contour[0];\n let lastPt = contour[contour.length - 1];\n let start = 0;\n\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n\n var curvePt = firstPt;\n }\n\n path.moveTo(firstPt.x, firstPt.y);\n\n for (let j = start; j < contour.length; j++) {\n let pt = contour[j];\n let prevPt = j === 0 ? firstPt : contour[j - 1];\n\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && !pt.onCurve) {\n let midX = (prevPt.x + pt.x) / 2;\n let midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n }\n\n // Connect the first and last points\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n\n path.closePath();\n }\n\n return path;\n }\n}\n","import { cache } from '../decorators';\nimport Path from './Path';\nimport {isMark} from 'unicode-properties';\nimport StandardNames from './StandardNames';\n\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\nexport default class Glyph {\n constructor(id, codePoints, font) {\n /**\n * The glyph id in the font\n * @type {number}\n */\n this.id = id;\n\n /**\n * An array of unicode code points that are represented by this glyph.\n * There can be multiple code points in the case of ligatures and other glyphs\n * that represent multiple visual characters.\n * @type {number[]}\n */\n this.codePoints = codePoints;\n this._font = font;\n\n // TODO: get this info from GDEF if available\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n\n _getPath() {\n return new Path();\n }\n\n _getCBox() {\n return this.path.cbox;\n }\n\n _getBBox() {\n return this.path.bbox;\n }\n\n _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n\n let metric = table.metrics.get(table.metrics.length - 1);\n let res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n\n return res;\n }\n\n _getMetrics(cbox) {\n if (this._metrics) { return this._metrics; }\n\n let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\n\n // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n if (this._font.vmtx) {\n var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\n\n } else {\n let os2;\n if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\n\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n\n } else {\n let { hhea } = this._font;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n\n return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\n }\n\n /**\n * The glyph’s control box.\n * This is often the same as the bounding box, but is faster to compute.\n * Because of the way bezier curves are defined, some of the control points\n * can be outside of the bounding box. Where `bbox` takes this into account,\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n * for a more detailed description.\n *\n * @type {BBox}\n */\n @cache\n get cbox() {\n return this._getCBox();\n }\n\n /**\n * The glyph’s bounding box, i.e. the rectangle that encloses the\n * glyph outline as tightly as possible.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return this._getBBox();\n }\n\n /**\n * A vector Path object representing the glyph outline.\n * @type {Path}\n */\n @cache\n get path() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n\n /**\n * Returns a path scaled to the given font size.\n * @param {number} size\n * @return {Path}\n */\n getScaledPath(size) {\n let scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n\n /**\n * The glyph's advance width.\n * @type {number}\n */\n @cache\n get advanceWidth() {\n return this._getMetrics().advanceWidth;\n }\n\n /**\n * The glyph's advance height.\n * @type {number}\n */\n @cache\n get advanceHeight() {\n return this._getMetrics().advanceHeight;\n }\n\n get ligatureCaretPositions() {}\n\n _getName() {\n let { post } = this._font;\n if (!post) {\n return null;\n }\n\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n\n case 2:\n let id = post.glyphNameIndex[this.id];\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n\n return post.names[id - StandardNames.length];\n\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n\n /**\n * The glyph's name\n * @type {string}\n */\n @cache\n get name() {\n return this._getName();\n }\n\n /**\n * Renders the glyph to the given graphics context, at the specified font size.\n * @param {CanvasRenderingContext2d} ctx\n * @param {number} size\n */\n render(ctx, size) {\n ctx.save();\n\n let scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n\n let fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n\n ctx.restore();\n }\n}\n","import BBox from './BBox';\n\nconst SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nexport default class Path {\n constructor() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n\n /**\n * Compiles the path to a JavaScript function that can be applied with\n * a graphics context in order to render the path.\n * @return {string}\n */\n toFunction() {\n return ctx => {\n this.commands.forEach(c => {\n return ctx[c.command].apply(ctx, c.args)\n })\n };\n }\n\n /**\n * Converts the path to an SVG path data string\n * @return {string}\n */\n toSVG() {\n let cmds = this.commands.map(c => {\n let args = c.args.map(arg => Math.round(arg * 100) / 100);\n return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\n });\n\n return cmds.join('');\n }\n\n /**\n * Gets the \"control box\" of a path.\n * This is like the bounding box, but it includes all points including\n * control points of bezier segments and is much faster to compute than\n * the real bounding box.\n * @type {BBox}\n */\n get cbox() {\n if (!this._cbox) {\n let cbox = new BBox;\n for (let command of this.commands) {\n for (let i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n\n this._cbox = Object.freeze(cbox);\n }\n\n return this._cbox;\n }\n\n /**\n * Gets the exact bounding box of the path by evaluating curve segments.\n * Slower to compute than the control box, but more accurate.\n * @type {BBox}\n */\n get bbox() {\n if (this._bbox) {\n return this._bbox;\n }\n\n let bbox = new BBox;\n let cx = 0, cy = 0;\n\n let f = t => (\n Math.pow(1 - t, 3) * p0[i]\n + 3 * Math.pow(1 - t, 2) * t * p1[i]\n + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\n + Math.pow(t, 3) * p3[i]\n );\n\n for (let c of this.commands) {\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n let [x, y] = c.args;\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var [qp1x, qp1y, p3x, p3y] = c.args;\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\n }\n\n // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n bbox.addPoint(p3x, p3y);\n\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n\n for (var i = 0; i <= 1; i++) {\n let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n let t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n\n continue;\n }\n\n let b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n\n let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n\n let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n\n return this._bbox = Object.freeze(bbox);\n }\n\n /**\n * Applies a mapping function to each point in the path.\n * @param {function} fn\n * @return {Path}\n */\n mapPoints(fn) {\n let path = new Path;\n\n for (let c of this.commands) {\n let args = [];\n for (let i = 0; i < c.args.length; i += 2) {\n let [x, y] = fn(c.args[i], c.args[i + 1]);\n args.push(x, y);\n }\n\n path[c.command](...args);\n }\n\n return path;\n }\n\n /**\n * Transforms the path by the given matrix.\n */\n transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints((x, y) => {\n const tx = m0 * x + m2 * y + m4;\n const ty = m1 * x + m3 * y + m5;\n return [tx, ty];\n });\n }\n\n /**\n * Translates the path by the given offset.\n */\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n\n /**\n * Rotates the path by the given angle (in radians).\n */\n rotate(angle) {\n let cos = Math.cos(angle);\n let sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n\n /**\n * Scales the path.\n */\n scale(scaleX, scaleY = scaleX) {\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\n Path.prototype[command] = function(...args) {\n this._bbox = this._cbox = null;\n this.commands.push({\n command,\n args\n });\n\n return this;\n };\n}\n","export default [\n '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\n];\n","import Glyph from './Glyph';\nimport Path from './Path';\n\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nexport default class CFFGlyph extends Glyph {\n type = 'CFF';\n\n _getName() {\n if (this._font.CFF2) {\n return super._getName();\n }\n\n return this._font['CFF '].getGlyphName(this.id);\n }\n\n bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n }\n\n _getPath() {\n let cff = this._font.CFF2 || this._font['CFF '];\n let { stream } = cff;\n let str = cff.topDict.CharStrings[this.id];\n let end = str.offset + str.length;\n stream.pos = str.offset;\n\n let path = new Path;\n let stack = [];\n let trans = [];\n\n let width = null;\n let nStems = 0;\n let x = 0, y = 0;\n let usedGsubrs;\n let usedSubrs;\n let open = false;\n\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n\n let gsubrs = cff.globalSubrIndex || [];\n let gsubrsBias = this.bias(gsubrs);\n\n let privateDict = cff.privateDictForGlyph(this.id) || {};\n let subrs = privateDict.Subrs || [];\n let subrsBias = this.bias(subrs);\n\n let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n let vsindex = privateDict.vsindex;\n let variationProcessor = this._font._variationProcessor;\n\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n\n path.moveTo(x, y);\n open = true;\n }\n\n let parse = function () {\n while (stream.pos < end) {\n let op = stream.readUInt8();\n if (op < 32) {\n let index, subr, phase;\n let c1x, c1y, c2x, c2y, c3x, c3y;\n let c4x, c4y, c5x, c5y, c6x, c6y;\n let pts;\n\n switch (op) {\n case 1: // hstem\n case 3: // vstem\n case 18: // hstemhm\n case 23: // vstemhm\n parseStems();\n break;\n\n case 4: // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 5: // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n break;\n\n case 6: // hlineto\n case 7: // vlineto\n phase = op === 6;\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n path.lineTo(x, y);\n phase = !phase;\n }\n break;\n\n case 8: // rrcurveto\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 10: // callsubr\n index = stack.pop() + subrsBias;\n subr = subrs[index];\n if (subr) {\n usedSubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 11: // return\n if (cff.version >= 2) {\n break;\n }\n return;\n\n case 14: // endchar\n if (cff.version >= 2) {\n break;\n }\n\n if (stack.length > 0) {\n checkWidth();\n }\n\n if (open) {\n path.closePath();\n open = false;\n }\n break;\n\n case 15: { // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n\n vsindex = stack.pop();\n break;\n }\n\n case 16: { // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n\n let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n let numBlends = stack.pop();\n let numOperands = numBlends * blendVector.length;\n let delta = stack.length - numOperands;\n let base = delta - numBlends;\n\n for (let i = 0; i < numBlends; i++) {\n let sum = stack[base + i];\n for (let j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n\n stack[base + i] = sum;\n }\n\n while (numOperands--) {\n stack.pop();\n }\n\n break;\n }\n\n case 19: // hintmask\n case 20: // cntrmask\n parseStems();\n stream.pos += (nStems + 7) >> 3;\n break;\n\n case 21: // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 22: // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n x += stack.shift();\n moveTo(x, y);\n break;\n\n case 24: // rcurveline\n while (stack.length >= 8) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n\n case 25: // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n\n case 26: // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 27: // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 28: // shortint\n stack.push(stream.readInt16BE());\n break;\n\n case 29: // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n if (subr) {\n usedGsubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 30: // vhcurveto\n case 31: // hvcurveto\n phase = op === 31;\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n break;\n\n case 12:\n op = stream.readUInt8();\n switch (op) {\n case 3: // and\n let a = stack.pop();\n let b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n\n case 4: // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n\n case 5: // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n\n case 9: // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case 10: // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n\n case 11: // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n\n case 12: // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n\n case 14: // neg\n a = stack.pop();\n stack.push(-a);\n break;\n\n case 15: // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n\n case 18: // drop\n stack.pop();\n break;\n\n case 20: // put\n let val = stack.pop();\n let idx = stack.pop();\n trans[idx] = val;\n break;\n\n case 21: // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n\n case 22: // ifelse\n let s1 = stack.pop();\n let s2 = stack.pop();\n let v1 = stack.pop();\n let v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n\n case 23: // random\n stack.push(Math.random());\n break;\n\n case 24: // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n\n case 26: // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case 27: // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n\n case 28: // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n\n case 29: // index\n idx = stack.pop();\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n\n stack.push(stack[idx]);\n break;\n\n case 30: // roll\n let n = stack.pop();\n let j = stack.pop();\n\n if (j >= 0) {\n while (j > 0) {\n var t = stack[n - 1];\n for (let i = n - 2; i >= 0; i--) {\n stack[i + 1] = stack[i];\n }\n\n stack[0] = t;\n j--;\n }\n } else {\n while (j < 0) {\n var t = stack[0];\n for (let i = 0; i <= n; i++) {\n stack[i] = stack[i + 1];\n }\n\n stack[n - 1] = t;\n j++;\n }\n }\n break;\n\n case 34: // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y;\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 35: // flex\n pts = [];\n\n for (let i = 0; i <= 5; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n stack.shift(); // fd\n break;\n\n case 36: // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 37: // flex1\n let startx = x;\n let starty = y;\n\n pts = [];\n for (let i = 0; i <= 4; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n\n pts.push(x, y);\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n break;\n\n default:\n throw new Error(`Unknown op: 12 ${op}`);\n }\n break;\n\n default:\n throw new Error(`Unknown op: ${op}`);\n }\n\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n\n parse();\n\n if (open) {\n path.closePath();\n }\n\n return path;\n }\n}\n","import TTFGlyph from './TTFGlyph';\nimport * as r from 'restructure';\n\nlet SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\n});\n\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nexport default class SBIXGlyph extends TTFGlyph {\n type = 'SBIX';\n\n /**\n * Returns an object representing a glyph image at the given point size.\n * The object has a data property with a Buffer containing the actual image data,\n * along with the image type, and origin.\n *\n * @param {number} size\n * @return {object}\n */\n getImageForSize(size) {\n for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n if (table.ppem >= size) { break; }\n }\n\n let offsets = table.imageOffsets;\n let start = offsets[this.id];\n let end = offsets[this.id + 1];\n\n if (start === end) {\n return null;\n }\n\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {buflen: end - start});\n }\n\n render(ctx, size) {\n let img = this.getImageForSize(size);\n if (img != null) {\n let scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\n }\n\n if (this._font.sbix.flags.renderOutlines) {\n super.render(ctx, size);\n }\n }\n}\n","import Glyph from './Glyph';\nimport BBox from './BBox';\n\nclass COLRLayer {\n constructor(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n }\n}\n\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which is another vector glyph.\n */\nexport default class COLRGlyph extends Glyph {\n type = 'COLR';\n\n _getBBox() {\n let bbox = new BBox;\n for (let i = 0; i < this.layers.length; i++) {\n let layer = this.layers[i];\n let b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n\n return bbox;\n }\n\n /**\n * Returns an array of objects containing the glyph and color for\n * each layer in the composite color glyph.\n * @type {object[]}\n */\n get layers() {\n let cpal = this._font.CPAL;\n let colr = this._font.COLR;\n let low = 0;\n let high = colr.baseGlyphRecord.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n var rec = colr.baseGlyphRecord[mid];\n\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n }\n\n // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n\n return [new COLRLayer(g, color)];\n }\n\n // otherwise, return an array of all the layers\n let layers = [];\n for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n var g = this._font._getBaseGlyph(rec.gid);\n layers.push(new COLRLayer(g, color));\n }\n\n return layers;\n }\n\n render(ctx, size) {\n for (let {glyph, color} of this.layers) {\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n\n return;\n }\n}\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nconst TUPLE_COUNT_MASK = 0x0fff;\nconst EMBEDDED_TUPLE_COORD = 0x8000;\nconst INTERMEDIATE_TUPLE = 0x4000;\nconst PRIVATE_POINT_NUMBERS = 0x2000;\nconst TUPLE_INDEX_MASK = 0x0fff;\nconst POINTS_ARE_WORDS = 0x80;\nconst POINT_RUN_COUNT_MASK = 0x7f;\nconst DELTAS_ARE_ZERO = 0x80;\nconst DELTAS_ARE_WORDS = 0x40;\nconst DELTA_RUN_COUNT_MASK = 0x3f;\n\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nexport default class GlyphVariationProcessor {\n constructor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map;\n }\n\n normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n let normalized = [];\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n let axis = this.font.fvar.axis[i];\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n\n // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n let segment = this.font.avar.segment[i];\n for (let j = 0; j < segment.correspondence.length; j++) {\n let pair = segment.correspondence[j];\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n let prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\n (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\n prev.toCoord;\n\n break;\n }\n }\n }\n }\n\n return normalized;\n }\n\n transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) { return; }\n\n let { gvar } = this.font;\n if (gid >= gvar.glyphCount) { return; }\n\n let offset = gvar.offsets[gid];\n if (offset === gvar.offsets[gid + 1]) { return; }\n\n // Read the gvar data for this glyph\n let { stream } = this.font;\n stream.pos = offset;\n if (stream.pos >= stream.length) {\n return;\n }\n\n let tupleCount = stream.readUInt16BE();\n let offsetToData = offset + stream.readUInt16BE();\n\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n\n let origPoints = glyphPoints.map(pt => pt.copy());\n\n tupleCount &= TUPLE_COUNT_MASK;\n for (let i = 0; i < tupleCount; i++) {\n let tupleDataSize = stream.readUInt16BE();\n let tupleIndex = stream.readUInt16BE();\n\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n\n var endCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n }\n\n // Get the factor at which to apply this tuple\n let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n\n var here = stream.pos;\n stream.pos = offsetToData;\n\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n }\n\n // points.length = 0 means there are deltas for all points\n let nPoints = points.length === 0 ? glyphPoints.length : points.length;\n let xDeltas = this.decodeDeltas(nPoints);\n let yDeltas = this.decodeDeltas(nPoints);\n\n if (points.length === 0) { // all points\n for (let i = 0; i < glyphPoints.length; i++) {\n var point = glyphPoints[i];\n point.x += Math.round(xDeltas[i] * factor);\n point.y += Math.round(yDeltas[i] * factor);\n }\n } else {\n let outPoints = origPoints.map(pt => pt.copy());\n let hasDelta = glyphPoints.map(() => false);\n\n for (let i = 0; i < points.length; i++) {\n let idx = points[i];\n if (idx < glyphPoints.length) {\n let point = outPoints[idx];\n hasDelta[idx] = true;\n\n point.x += xDeltas[i] * factor;\n point.y += yDeltas[i] * factor;\n }\n }\n\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n for (let i = 0; i < glyphPoints.length; i++) {\n let deltaX = outPoints[i].x - origPoints[i].x;\n let deltaY = outPoints[i].y - origPoints[i].y;\n\n glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX);\n glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY);\n }\n }\n\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n }\n\n decodePoints() {\n let stream = this.font.stream;\n let count = stream.readUInt8();\n\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n\n let points = new Uint16Array(count);\n let i = 0;\n let point = 0;\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n for (let j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n\n return points;\n }\n\n decodeDeltas(count) {\n let stream = this.font.stream;\n let i = 0;\n let deltas = new Int16Array(count);\n\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n\n } else {\n let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n for (let j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n\n return deltas;\n }\n\n tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n let normalized = this.normalizedCoords;\n let { gvar } = this.font;\n let factor = 1;\n\n for (let i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n\n if (normalized[i] === 0) {\n return 0;\n }\n\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\n (normalized[i] > Math.max(0, tupleCoords[i]))) {\n return 0;\n }\n\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if ((normalized[i] < startCoords[i]) ||\n (normalized[i] > endCoords[i])) {\n return 0;\n\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n\n return factor;\n }\n\n // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n\n let point = 0;\n while (point < points.length) {\n let firstPoint = point;\n\n // find the end point of the contour\n let endPoint = point;\n let pt = points[endPoint];\n while (!pt.endContour) {\n pt = points[++endPoint];\n }\n\n // find the first point that has a delta\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n\n if (point > endPoint) {\n continue;\n }\n\n let firstDelta = point;\n let curDelta = point;\n point++;\n\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n\n point++;\n }\n\n // shift contour if we only have a single delta\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n\n point = endPoint + 1;\n }\n }\n\n deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n\n let iterable = ['x', 'y'];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n\n let in1 = inPoints[ref1][k];\n let in2 = inPoints[ref2][k];\n let out1 = outPoints[ref1][k];\n let out2 = outPoints[ref2][k];\n\n // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n for (let p = p1; p <= p2; p++) {\n let out = inPoints[p][k];\n\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n\n outPoints[p][k] = out;\n }\n }\n }\n }\n\n deltaShift(p1, p2, ref, inPoints, outPoints) {\n let deltaX = outPoints[ref].x - inPoints[ref].x;\n let deltaY = outPoints[ref].y - inPoints[ref].y;\n\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n }\n\n getAdvanceAdjustment(gid, table) {\n let outerIndex, innerIndex;\n\n if (table.advanceWidthMapping) {\n let idx = gid;\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n\n let entryFormat = table.advanceWidthMapping.entryFormat;\n ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n }\n\n // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n\n let varData = itemStore.itemVariationData[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex);\n let netAdjustment = 0;\n\n for (let master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n\n return netAdjustment;\n }\n\n getBlendVector(itemStore, outerIndex) {\n let varData = itemStore.itemVariationData[outerIndex];\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n\n let normalizedCoords = this.normalizedCoords;\n let blendVector = [];\n\n // outer loop steps through master designs to be blended\n for (let master = 0; master < varData.regionIndexCount; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegionList.variationRegions[regionIndex];\n\n // inner loop steps through axes in this region\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n\n // compute the scalar contribution of this axis\n // ignore invalid ranges\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n\n // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n\n // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\n\n // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\n (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\n (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n\n // take product of all the axis scalars\n scalar *= axisScalar;\n }\n\n blendVector[master] = scalar;\n }\n\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n }\n}\n","import cloneDeep from 'clone';\nimport Subset from './Subset';\nimport Directory from '../tables/directory';\nimport Tables from '../tables';\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\n\nexport default class TTFSubset extends Subset {\n constructor(font) {\n super(font);\n this.glyphEncoder = new TTFGlyphEncoder;\n }\n\n _addGlyph(gid) {\n let glyph = this.font.getGlyph(gid);\n let glyf = glyph._decode();\n\n // get the offset to the glyph from the loca table\n let curOffset = this.font.loca.offsets[gid];\n let nextOffset = this.font.loca.offsets[gid + 1];\n\n let stream = this.font._getTableStream('glyf');\n stream.pos += curOffset;\n\n let buffer = stream.readBuffer(nextOffset - curOffset);\n\n // if it is a compound glyph, include its components\n if (glyf && glyf.numberOfContours < 0) {\n buffer = new Uint8Array(buffer);\n let view = new DataView(buffer.buffer);\n for (let component of glyf.components) {\n gid = this.includeGlyph(component.glyphID);\n view.setUint16(component.pos, gid);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n\n this.offset += buffer.length;\n return this.glyf.length - 1;\n }\n\n encode() {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n\n this.hmtx = {\n metrics: [],\n bearings: []\n };\n\n // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n let i = 0;\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n\n let maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n\n this.loca.offsets.push(this.offset);\n\n let head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n\n let hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length;\n\n // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n\n // TODO: subset prep, cvt, fpgm?\n return Directory.toBuffer({\n tables: {\n head,\n hhea,\n loca: this.loca,\n maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm\n\n // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n }\n });\n }\n}\n","import * as r from 'restructure';\n\nconst resolved = Promise.resolve();\n\nexport default class Subset {\n constructor(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {};\n\n // always include the missing glyph\n this.includeGlyph(0);\n }\n\n includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n\n return this.mapping[glyph];\n }\n}\n","import * as r from 'restructure';\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\nclass Point {\n static size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n }\n \n static encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n }\n}\n\nlet Glyf = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point, 0),\n yPoints: new r.Array(Point, 0)\n});\n\n/**\n * Encodes TrueType glyph outlines\n */\nexport default class TTFGlyphEncoder {\n encodeSimple(path, instructions = []) {\n let endPtsOfContours = [];\n let xPoints = [];\n let yPoints = [];\n let flags = [];\n let same = 0;\n let lastX = 0, lastY = 0, lastFlag = 0;\n let pointCount = 0;\n \n for (let i = 0; i < path.commands.length; i++) {\n let c = path.commands[i];\n \n for (let j = 0; j < c.args.length; j += 2) {\n let x = c.args[j];\n let y = c.args[j + 1];\n let flag = 0;\n \n // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n if (c.command === 'quadraticCurveTo' && j === 2) {\n let next = path.commands[i + 1];\n if (next && next.command === 'quadraticCurveTo') {\n let midX = (lastX + next.args[0]) / 2;\n let midY = (lastY + next.args[1]) / 2;\n \n if (x === midX && y === midY) {\n continue;\n }\n }\n }\n \n // All points except control points are on curve.\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE;\n }\n \n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\n \n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n \n flags.push(flag);\n lastFlag = flag;\n }\n \n lastX = x;\n lastY = y;\n pointCount++;\n }\n \n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n }\n\n // Close the path if the last command didn't already\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n \n let bbox = path.bbox;\n let glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n \n let size = Glyf.size(glyf);\n let tail = 4 - (size % 4);\n \n let stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf);\n \n // Align to 4-byte length\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n \n return stream.buffer;\n }\n \n _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n let diff = value - last;\n \n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n \n points.push(diff);\n }\n \n return flag;\n }\n}\n","import Subset from './Subset';\nimport CFFTop from '../cff/CFFTop';\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\nimport standardStrings from '../cff/CFFStandardStrings';\n\nexport default class CFFSubset extends Subset {\n constructor(font) {\n super(font);\n\n this.cff = this.font['CFF '];\n if (!this.cff) {\n throw new Error('Not a CFF Font');\n }\n }\n\n subsetCharstrings() {\n this.charstrings = [];\n let gsubrs = {};\n\n for (let gid of this.glyphs) {\n this.charstrings.push(this.cff.getCharString(gid));\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n }\n\n subsetSubrs(subrs, used) {\n let res = [];\n for (let i = 0; i < subrs.length; i++) {\n let subr = subrs[i];\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(new Uint8Array([11])); // return\n }\n }\n\n return res;\n }\n\n subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n\n let used_fds = {};\n let used_subrs = [];\n let fd_select = {};\n for (let gid of this.glyphs) {\n let fd = this.cff.fdForGlyph(gid);\n if (fd == null) {\n continue;\n }\n\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n for (let subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n\n for (let i = 0; i < topDict.FDArray.length; i++) {\n let dict = topDict.FDArray[i];\n delete dict.FontName;\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n\n return;\n }\n\n createCIDFontdict(topDict) {\n let used_subrs = {};\n for (let gid of this.glyphs) {\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n\n let privateDict = Object.assign({}, this.cff.topDict.Private);\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n\n topDict.FDArray = [{ Private: privateDict }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{ first: 0, fd: 0 }],\n sentinel: this.charstrings.length\n };\n }\n\n addString(string) {\n if (!string) {\n return null;\n }\n\n if (!this.strings) {\n this.strings = [];\n }\n\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n }\n\n encode() {\n this.subsetCharstrings();\n\n let charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\n };\n\n let topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n\n for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n\n let top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n\n return CFFTop.toBuffer(top);\n }\n}\n","import TTFFont from './TTFFont';\nimport WOFFDirectory from './tables/WOFFDirectory';\nimport tables from './tables';\nimport inflate from 'tiny-inflate';\nimport * as r from 'restructure';\nimport { asciiDecoder } from './utils';\n\nexport default class WOFFFont extends TTFFont {\n type = 'WOFF';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF';\n }\n\n _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n let outBuffer = new Uint8Array(table.length);\n let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n\n return null;\n }\n}\n","import * as r from 'restructure';\nimport tables from './';\n\nlet WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {type: 'global'}),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\n\nlet WOFFDirectory = new r.Struct({\n tag: new r.String(4), // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nexport default WOFFDirectory;\n","import * as r from 'restructure';\nimport brotli from 'brotli/decompress.js';\nimport TTFFont from './TTFFont';\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\nimport WOFF2Directory from './tables/WOFF2Directory';\nimport { asciiDecoder } from './utils';\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nexport default class WOFF2Font extends TTFFont {\n type = 'WOFF2';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOF2';\n }\n\n _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n }\n\n _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n\n let decompressedSize = 0;\n for (let tag in this.directory.tables) {\n let entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\n }\n\n let decompressed = brotli(buffer, decompressedSize);\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n\n this.stream = new r.DecodeStream(decompressed);\n this._decompressed = true;\n }\n }\n\n _decodeTable(table) {\n this._decompress();\n return super._decodeTable(table);\n }\n\n // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) { this._transformGlyfTable(); }\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n\n } else {\n return super._getBaseGlyph(glyph, characters);\n }\n }\n }\n\n _transformGlyfTable() {\n this._decompress();\n this.stream.pos = this.directory.tables.glyf.offset;\n let table = GlyfTable.decode(this.stream);\n let glyphs = [];\n\n for (let index = 0; index < table.numGlyphs; index++) {\n let glyph = {};\n let nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n\n if (nContours > 0) { // simple glyph\n let nPoints = [];\n let totalPoints = 0;\n\n for (let i = 0; i < nContours; i++) {\n let r = read255UInt16(table.nPoints);\n totalPoints += r;\n nPoints.push(totalPoints);\n }\n\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n for (let i = 0; i < nContours; i++) {\n glyph.points[nPoints[i] - 1].endContour = true;\n }\n\n var instructionSize = read255UInt16(table.glyphs);\n\n } else if (nContours < 0) { // composite glyph\n let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n\n glyphs.push(glyph);\n }\n\n this._transformedGlyphs = glyphs;\n }\n}\n\n// Special class that accepts a length and returns a sub-stream for that data\nclass Substream {\n constructor(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n\n decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n }\n}\n\n// This struct represents the entire glyf table\nlet GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\n\nconst WORD_CODE = 253;\nconst ONE_MORE_BYTE_CODE2 = 254;\nconst ONE_MORE_BYTE_CODE1 = 255;\nconst LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n let code = stream.readUInt8();\n\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n\n return code;\n}\n\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n let y;\n let x = y = 0;\n let res = [];\n\n for (let i = 0; i < nPoints; i++) {\n let dx = 0, dy = 0;\n let flag = flags.readUInt8();\n let onCurve = !(flag >> 7);\n flag &= 0x7f;\n\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n\n } else if (flag < 20) {\n dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\n\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n let b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n\n return res;\n}\n","import TTFGlyph from './TTFGlyph';\n\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nexport default class WOFF2Glyph extends TTFGlyph {\n type = 'WOFF2';\n\n _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n }\n\n _getCBox() {\n return this.path.bbox;\n }\n}\n","import * as r from 'restructure';\n\nconst Base128 = {\n decode(stream) {\n let result = 0;\n let iterable = [0, 1, 2, 3, 4];\n for (let j = 0; j < iterable.length; j++) {\n let i = iterable[j];\n let code = stream.readUInt8();\n\n // If any of the top seven bits are set then we're about to overflow.\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n\n result = (result << 7) | (code & 0x7f);\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n\n throw new Error('Bad base 128 number');\n }\n};\n\nlet knownTags = [\n 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\n 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\n 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\n 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\n 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\n 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\n 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\n];\n\nlet WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\n tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: t => (t.flags >>> 6) & 0x03,\n transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\n transformLength: new r.Optional(Base128, t => t.transformed)\n});\n\nlet WOFF2Directory = new r.Struct({\n tag: new r.String(4), // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function() {\n let tables = {};\n for (let i = 0; i < this.tables.length; i++) {\n let table = this.tables[i];\n tables[table.tag] = table;\n }\n\n return this.tables = tables;\n};\n\nexport default WOFF2Directory;\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport { asciiDecoder } from './utils';\n\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\n\nexport default class TrueTypeCollection {\n type = 'TTC';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'ttcf';\n }\n\n constructor(stream) {\n this.stream = stream;\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n\n this.header = TTCHeader.decode(stream);\n }\n\n getFont(name) {\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\n\nlet DFontName = new r.String(r.uint8);\nlet DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\n\nlet Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\n\nlet Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\n});\n\nlet TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, t => t.length + 1)\n});\n\nlet DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\n\nlet DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\n\nexport default class DFont {\n type = 'DFont';\n\n static probe(buffer) {\n let stream = new r.DecodeStream(buffer);\n\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n\n for (let type of header.map.typeList.types) {\n if (type.name === 'sfnt') {\n return true;\n }\n }\n\n return false;\n }\n\n constructor(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n\n for (let type of this.header.map.typeList.types) {\n for (let ref of type.refList) {\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n\n getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n"],"names":[],"version":3,"file":"browser.cjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/dist/main.cjs b/skills/flight-finder/node_modules/fontkit/dist/main.cjs deleted file mode 100644 index 851b2d2..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/main.cjs +++ /dev/null @@ -1,13355 +0,0 @@ -var $elh9A$restructure = require("restructure"); -var $elh9A$fs = require("fs"); -var $elh9A$swchelperscjs_define_propertycjs = require("@swc/helpers/cjs/_define_property.cjs"); -var $elh9A$swchelperscjs_ts_decoratecjs = require("@swc/helpers/cjs/_ts_decorate.cjs"); -var $elh9A$fastdeepequal = require("fast-deep-equal"); -var $elh9A$unicodeproperties = require("unicode-properties"); -var $elh9A$unicodetrie = require("unicode-trie"); -var $elh9A$dfa = require("dfa"); -var $elh9A$clone = require("clone"); -var $elh9A$tinyinflate = require("tiny-inflate"); -var $elh9A$brotlidecompressjs = require("brotli/decompress.js"); - - -function $parcel$exportWildcard(dest, source) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { - return; - } - - Object.defineProperty(dest, key, { - enumerable: true, - get: function get() { - return source[key]; - } - }); - }); - - return dest; -} - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -var $59aa4ed98453e1d4$exports = {}; - -$parcel$export($59aa4ed98453e1d4$exports, "logErrors", () => $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78); -$parcel$export($59aa4ed98453e1d4$exports, "registerFormat", () => $59aa4ed98453e1d4$export$36b2f24e97d43be); -$parcel$export($59aa4ed98453e1d4$exports, "create", () => $59aa4ed98453e1d4$export$185802fd694ee1f5); -$parcel$export($59aa4ed98453e1d4$exports, "defaultLanguage", () => $59aa4ed98453e1d4$export$42940898df819940); -$parcel$export($59aa4ed98453e1d4$exports, "setDefaultLanguage", () => $59aa4ed98453e1d4$export$5157e7780d44cc36); - -let $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78 = false; -let $59aa4ed98453e1d4$var$formats = []; -function $59aa4ed98453e1d4$export$36b2f24e97d43be(format) { - $59aa4ed98453e1d4$var$formats.push(format); -} -function $59aa4ed98453e1d4$export$185802fd694ee1f5(buffer, postscriptName) { - for(let i = 0; i < $59aa4ed98453e1d4$var$formats.length; i++){ - let format = $59aa4ed98453e1d4$var$formats[i]; - if (format.probe(buffer)) { - let font = new format(new (0, $elh9A$restructure.DecodeStream)(buffer)); - if (postscriptName) return font.getFont(postscriptName); - return font; - } - } - throw new Error('Unknown font format'); -} -let $59aa4ed98453e1d4$export$42940898df819940 = 'en'; -function $59aa4ed98453e1d4$export$5157e7780d44cc36(lang = 'en') { - $59aa4ed98453e1d4$export$42940898df819940 = lang; -} - - -var $f39726ff40304956$exports = {}; - -$parcel$export($f39726ff40304956$exports, "openSync", () => $f39726ff40304956$export$fa5499edb1ab414a); -$parcel$export($f39726ff40304956$exports, "open", () => $f39726ff40304956$export$3ce6949f20cea765); - - -function $f39726ff40304956$export$fa5499edb1ab414a(filename, postscriptName) { - let buffer = (0, ($parcel$interopDefault($elh9A$fs))).readFileSync(filename); - return (0, $59aa4ed98453e1d4$export$185802fd694ee1f5)(buffer, postscriptName); -} -async function $f39726ff40304956$export$3ce6949f20cea765(filename, postscriptName, callback) { - if (typeof postscriptName === 'function') { - callback = postscriptName; - postscriptName = null; - } - let buffer = await (0, ($parcel$interopDefault($elh9A$fs))).promises.readFile(filename); - return (0, $59aa4ed98453e1d4$export$185802fd694ee1f5)(buffer, postscriptName); -} - - - - - -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ function $3bda6911913b43f0$export$69a3209f1a06c04d(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { - value: value - }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - return { - get () { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) return cache.get(key); - let result = fn.apply(this, args); - cache.set(key, result); - return result; - } - Object.defineProperty(this, key, { - value: memoized - }); - return memoized; - } - }; - } -} - - - - - -let $e4ae0436c91af89f$var$SubHeader = new $elh9A$restructure.Struct({ - firstCode: $elh9A$restructure.uint16, - entryCount: $elh9A$restructure.uint16, - idDelta: $elh9A$restructure.int16, - idRangeOffset: $elh9A$restructure.uint16 -}); -let $e4ae0436c91af89f$var$CmapGroup = new $elh9A$restructure.Struct({ - startCharCode: $elh9A$restructure.uint32, - endCharCode: $elh9A$restructure.uint32, - glyphID: $elh9A$restructure.uint32 -}); -let $e4ae0436c91af89f$var$UnicodeValueRange = new $elh9A$restructure.Struct({ - startUnicodeValue: $elh9A$restructure.uint24, - additionalCount: $elh9A$restructure.uint8 -}); -let $e4ae0436c91af89f$var$UVSMapping = new $elh9A$restructure.Struct({ - unicodeValue: $elh9A$restructure.uint24, - glyphID: $elh9A$restructure.uint16 -}); -let $e4ae0436c91af89f$var$DefaultUVS = new $elh9A$restructure.Array($e4ae0436c91af89f$var$UnicodeValueRange, $elh9A$restructure.uint32); -let $e4ae0436c91af89f$var$NonDefaultUVS = new $elh9A$restructure.Array($e4ae0436c91af89f$var$UVSMapping, $elh9A$restructure.uint32); -let $e4ae0436c91af89f$var$VarSelectorRecord = new $elh9A$restructure.Struct({ - varSelector: $elh9A$restructure.uint24, - defaultUVS: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $e4ae0436c91af89f$var$DefaultUVS, { - type: 'parent' - }), - nonDefaultUVS: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $e4ae0436c91af89f$var$NonDefaultUVS, { - type: 'parent' - }) -}); -let $e4ae0436c91af89f$var$CmapSubtable = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 0: { - length: $elh9A$restructure.uint16, - language: $elh9A$restructure.uint16, - codeMap: new $elh9A$restructure.LazyArray($elh9A$restructure.uint8, 256) - }, - 2: { - length: $elh9A$restructure.uint16, - language: $elh9A$restructure.uint16, - subHeaderKeys: new $elh9A$restructure.Array($elh9A$restructure.uint16, 256), - subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new $elh9A$restructure.LazyArray($e4ae0436c91af89f$var$SubHeader, 'subHeaderCount'), - glyphIndexArray: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'subHeaderCount') - }, - 4: { - length: $elh9A$restructure.uint16, - language: $elh9A$restructure.uint16, - segCountX2: $elh9A$restructure.uint16, - segCount: (t)=>t.segCountX2 >> 1, - searchRange: $elh9A$restructure.uint16, - entrySelector: $elh9A$restructure.uint16, - rangeShift: $elh9A$restructure.uint16, - endCode: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'segCount'), - reservedPad: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - startCode: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'segCount'), - idDelta: new $elh9A$restructure.LazyArray($elh9A$restructure.int16, 'segCount'), - idRangeOffset: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'segCount'), - glyphIndexArray: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, (t)=>(t.length - t._currentOffset) / 2) - }, - 6: { - length: $elh9A$restructure.uint16, - language: $elh9A$restructure.uint16, - firstCode: $elh9A$restructure.uint16, - entryCount: $elh9A$restructure.uint16, - glyphIndices: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'entryCount') - }, - 8: { - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - length: $elh9A$restructure.uint32, - language: $elh9A$restructure.uint16, - is32: new $elh9A$restructure.LazyArray($elh9A$restructure.uint8, 8192), - nGroups: $elh9A$restructure.uint32, - groups: new $elh9A$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 10: { - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - length: $elh9A$restructure.uint32, - language: $elh9A$restructure.uint32, - firstCode: $elh9A$restructure.uint32, - entryCount: $elh9A$restructure.uint32, - glyphIndices: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'numChars') - }, - 12: { - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - length: $elh9A$restructure.uint32, - language: $elh9A$restructure.uint32, - nGroups: $elh9A$restructure.uint32, - groups: new $elh9A$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 13: { - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - length: $elh9A$restructure.uint32, - language: $elh9A$restructure.uint32, - nGroups: $elh9A$restructure.uint32, - groups: new $elh9A$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 14: { - length: $elh9A$restructure.uint32, - numRecords: $elh9A$restructure.uint32, - varSelectors: new $elh9A$restructure.LazyArray($e4ae0436c91af89f$var$VarSelectorRecord, 'numRecords') - } -}); -let $e4ae0436c91af89f$var$CmapEntry = new $elh9A$restructure.Struct({ - platformID: $elh9A$restructure.uint16, - encodingID: $elh9A$restructure.uint16, - table: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $e4ae0436c91af89f$var$CmapSubtable, { - type: 'parent', - lazy: true - }) -}); -var // character to glyph mapping -$e4ae0436c91af89f$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numSubtables: $elh9A$restructure.uint16, - tables: new $elh9A$restructure.Array($e4ae0436c91af89f$var$CmapEntry, 'numSubtables') -}); - - - -var // font header -$55a60976afb7c261$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.int32, - revision: $elh9A$restructure.int32, - checkSumAdjustment: $elh9A$restructure.uint32, - magicNumber: $elh9A$restructure.uint32, - flags: $elh9A$restructure.uint16, - unitsPerEm: $elh9A$restructure.uint16, - created: new $elh9A$restructure.Array($elh9A$restructure.int32, 2), - modified: new $elh9A$restructure.Array($elh9A$restructure.int32, 2), - xMin: $elh9A$restructure.int16, - yMin: $elh9A$restructure.int16, - xMax: $elh9A$restructure.int16, - yMax: $elh9A$restructure.int16, - macStyle: new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - 'bold', - 'italic', - 'underline', - 'outline', - 'shadow', - 'condensed', - 'extended' - ]), - lowestRecPPEM: $elh9A$restructure.uint16, - fontDirectionHint: $elh9A$restructure.int16, - indexToLocFormat: $elh9A$restructure.int16, - glyphDataFormat: $elh9A$restructure.int16 // 0 for current format -}); - - - -var // horizontal header -$dde72b7b5b650596$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.int32, - ascent: $elh9A$restructure.int16, - descent: $elh9A$restructure.int16, - lineGap: $elh9A$restructure.int16, - advanceWidthMax: $elh9A$restructure.uint16, - minLeftSideBearing: $elh9A$restructure.int16, - minRightSideBearing: $elh9A$restructure.int16, - xMaxExtent: $elh9A$restructure.int16, - caretSlopeRise: $elh9A$restructure.int16, - caretSlopeRun: $elh9A$restructure.int16, - caretOffset: $elh9A$restructure.int16, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.int16, 4), - metricDataFormat: $elh9A$restructure.int16, - numberOfMetrics: $elh9A$restructure.uint16 // Number of advance widths in 'hmtx' table -}); - - - -let $a7c40184072c9a5b$var$HmtxEntry = new $elh9A$restructure.Struct({ - advance: $elh9A$restructure.uint16, - bearing: $elh9A$restructure.int16 -}); -var $a7c40184072c9a5b$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - metrics: new $elh9A$restructure.LazyArray($a7c40184072c9a5b$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics), - bearings: new $elh9A$restructure.LazyArray($elh9A$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); - - - -var // maxiumum profile -$521197722369f691$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.int32, - numGlyphs: $elh9A$restructure.uint16, - maxPoints: $elh9A$restructure.uint16, - maxContours: $elh9A$restructure.uint16, - maxComponentPoints: $elh9A$restructure.uint16, - maxComponentContours: $elh9A$restructure.uint16, - maxZones: $elh9A$restructure.uint16, - maxTwilightPoints: $elh9A$restructure.uint16, - maxStorage: $elh9A$restructure.uint16, - maxFunctionDefs: $elh9A$restructure.uint16, - maxInstructionDefs: $elh9A$restructure.uint16, - maxStackElements: $elh9A$restructure.uint16, - maxSizeOfInstructions: $elh9A$restructure.uint16, - maxComponentElements: $elh9A$restructure.uint16, - maxComponentDepth: $elh9A$restructure.uint16 // Maximum levels of recursion; 1 for simple components -}); - - - -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ function $e2613b812f052cbe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { - if (platformID === 1 && $e2613b812f052cbe$export$479e671907f486d1[languageID]) return $e2613b812f052cbe$export$479e671907f486d1[languageID]; - return $e2613b812f052cbe$export$6fef87b7618bdf0b[platformID][encodingID]; -} -const $e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS = new Set([ - 'x-mac-roman', - 'x-mac-cyrillic', - 'iso-8859-6', - 'iso-8859-8' -]); -const $e2613b812f052cbe$var$MAC_ENCODINGS = { - 'x-mac-croatian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017D\xd8\u221E\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220F\u0161\u222B\xaa\xba\u03A9\u017E\xf8\xbf\xa1\xac\u221A\u0192\u2248\u0106\xab\u010C\u2026 \xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\uF8FF\xa9\u2044\u20AC\u2039\u203A\xc6\xbb\u2013\xb7\u201A\u201E\u2030\xc2\u0107\xc1\u010D\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u03C0\xcb\u02DA\xb8\xca\xe6\u02C7", - 'x-mac-gaelic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u1E02\xb1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xe6\xf8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xff\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xb7\u1EF2\u1EF3\u204A\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\u2663\xd2\xda\xdb\xd9\u0131\xdd\xfd\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83", - 'x-mac-greek': "\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\u20AC\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xdf\xae\xa9\u03A3\u03AA\xa7\u2260\xb0\xb7\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xac\u039F\u03A1\u2248\u03A4\xab\xbb\u2026 \u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xf7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xad", - 'x-mac-icelandic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\xd0\xf0\xde\xfe\xfd\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-inuit': "\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xb0\u14A1\u14A5\u14A6\u2022\xb6\u14A7\xae\xa9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026 \u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142", - 'x-mac-ce': "\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010C\xe4\u010D\u0106\u0107\xe9\u0179\u017A\u010E\xed\u010F\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011A\u011B\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xac\u221A\u0144\u0147\u2206\xab\xbb\u2026 \u0148\u0150\xd5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xc1\u0164\u0165\xcd\u017D\u017E\u016A\xd3\xd4\u016B\u016E\xda\u016F\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017B\u0141\u017C\u0122\u02C7", - 'x-mac-romanian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u0218\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\u0103\u0219\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-turkish': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\uF8A0\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7" -}; -const $e2613b812f052cbe$var$encodingCache = new Map(); -function $e2613b812f052cbe$export$1dceb3c14ed68bee(encoding) { - let cached = $e2613b812f052cbe$var$encodingCache.get(encoding); - if (cached) return cached; - // These encodings aren't supported by TextDecoder. - let mapping = $e2613b812f052cbe$var$MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for(let i = 0; i < mapping.length; i++)res.set(mapping.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } - // Only single byte encodings can be mapped 1:1. - if ($e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for(let i = 0; i < 0x80; i++)mapping[i] = 0x80 + i; - let res = new Map(); - let s = decoder.decode(mapping); - for(let i = 0; i < 0x80; i++)res.set(s.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } -} -const $e2613b812f052cbe$export$6fef87b7618bdf0b = [ - // unicode - [ - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be' - ], - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - [ - 'x-mac-roman', - 'shift-jis', - 'big5', - 'euc-kr', - 'iso-8859-6', - 'iso-8859-8', - 'x-mac-greek', - 'x-mac-cyrillic', - 'x-mac-symbol', - 'x-mac-devanagari', - 'x-mac-gurmukhi', - 'x-mac-gujarati', - 'Oriya', - 'Bengali', - 'Tamil', - 'Telugu', - 'Kannada', - 'Malayalam', - 'Sinhalese', - 'Burmese', - 'Khmer', - 'iso-8859-11', - 'Laotian', - 'Georgian', - 'Armenian', - 'gbk', - 'Tibetan', - 'Mongolian', - 'Geez', - 'x-mac-ce', - 'Vietnamese', - 'Sindhi' - ], - // ISO (deprecated) - [ - 'ascii', - null, - 'iso-8859-1' - ], - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - [ - 'symbol', - 'utf-16be', - 'shift-jis', - 'gb18030', - 'big5', - 'euc-kr', - 'johab', - null, - null, - null, - 'utf-16be' - ] -]; -const $e2613b812f052cbe$export$479e671907f486d1 = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; -const $e2613b812f052cbe$export$2092376fd002e13 = [ - // unicode - [], - { - 0: 'en', - 30: 'fo', - 60: 'ks', - 90: 'rw', - 1: 'fr', - 31: 'fa', - 61: 'ku', - 91: 'rn', - 2: 'de', - 32: 'ru', - 62: 'sd', - 92: 'ny', - 3: 'it', - 33: 'zh', - 63: 'bo', - 93: 'mg', - 4: 'nl', - 34: 'nl-BE', - 64: 'ne', - 94: 'eo', - 5: 'sv', - 35: 'ga', - 65: 'sa', - 128: 'cy', - 6: 'es', - 36: 'sq', - 66: 'mr', - 129: 'eu', - 7: 'da', - 37: 'ro', - 67: 'bn', - 130: 'ca', - 8: 'pt', - 38: 'cz', - 68: 'as', - 131: 'la', - 9: 'no', - 39: 'sk', - 69: 'gu', - 132: 'qu', - 10: 'he', - 40: 'si', - 70: 'pa', - 133: 'gn', - 11: 'ja', - 41: 'yi', - 71: 'or', - 134: 'ay', - 12: 'ar', - 42: 'sr', - 72: 'ml', - 135: 'tt', - 13: 'fi', - 43: 'mk', - 73: 'kn', - 136: 'ug', - 14: 'el', - 44: 'bg', - 74: 'ta', - 137: 'dz', - 15: 'is', - 45: 'uk', - 75: 'te', - 138: 'jv', - 16: 'mt', - 46: 'be', - 76: 'si', - 139: 'su', - 17: 'tr', - 47: 'uz', - 77: 'my', - 140: 'gl', - 18: 'hr', - 48: 'kk', - 78: 'km', - 141: 'af', - 19: 'zh-Hant', - 49: 'az-Cyrl', - 79: 'lo', - 142: 'br', - 20: 'ur', - 50: 'az-Arab', - 80: 'vi', - 143: 'iu', - 21: 'hi', - 51: 'hy', - 81: 'id', - 144: 'gd', - 22: 'th', - 52: 'ka', - 82: 'tl', - 145: 'gv', - 23: 'ko', - 53: 'mo', - 83: 'ms', - 146: 'ga', - 24: 'lt', - 54: 'ky', - 84: 'ms-Arab', - 147: 'to', - 25: 'pl', - 55: 'tg', - 85: 'am', - 148: 'el-polyton', - 26: 'hu', - 56: 'tk', - 86: 'ti', - 149: 'kl', - 27: 'es', - 57: 'mn-CN', - 87: 'om', - 150: 'az', - 28: 'lv', - 58: 'mn', - 88: 'so', - 151: 'nn', - 29: 'se', - 59: 'ps', - 89: 'sw' - }, - // ISO (deprecated) - [], - { - 0x0436: 'af', - 0x4009: 'en-IN', - 0x0487: 'rw', - 0x0432: 'tn', - 0x041C: 'sq', - 0x1809: 'en-IE', - 0x0441: 'sw', - 0x045B: 'si', - 0x0484: 'gsw', - 0x2009: 'en-JM', - 0x0457: 'kok', - 0x041B: 'sk', - 0x045E: 'am', - 0x4409: 'en-MY', - 0x0412: 'ko', - 0x0424: 'sl', - 0x1401: 'ar-DZ', - 0x1409: 'en-NZ', - 0x0440: 'ky', - 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', - 0x3409: 'en-PH', - 0x0454: 'lo', - 0x400A: 'es-BO', - 0x0C01: 'ar', - 0x4809: 'en-SG', - 0x0426: 'lv', - 0x340A: 'es-CL', - 0x0801: 'ar-IQ', - 0x1C09: 'en-ZA', - 0x0427: 'lt', - 0x240A: 'es-CO', - 0x2C01: 'ar-JO', - 0x2C09: 'en-TT', - 0x082E: 'dsb', - 0x140A: 'es-CR', - 0x3401: 'ar-KW', - 0x0809: 'en-GB', - 0x046E: 'lb', - 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', - 0x0409: 'en', - 0x042F: 'mk', - 0x300A: 'es-EC', - 0x1001: 'ar-LY', - 0x3009: 'en-ZW', - 0x083E: 'ms-BN', - 0x440A: 'es-SV', - 0x1801: 'ary', - 0x0425: 'et', - 0x043E: 'ms', - 0x100A: 'es-GT', - 0x2001: 'ar-OM', - 0x0438: 'fo', - 0x044C: 'ml', - 0x480A: 'es-HN', - 0x4001: 'ar-QA', - 0x0464: 'fil', - 0x043A: 'mt', - 0x080A: 'es-MX', - 0x0401: 'ar-SA', - 0x040B: 'fi', - 0x0481: 'mi', - 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', - 0x080C: 'fr-BE', - 0x047A: 'arn', - 0x180A: 'es-PA', - 0x1C01: 'aeb', - 0x0C0C: 'fr-CA', - 0x044E: 'mr', - 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', - 0x040C: 'fr', - 0x047C: 'moh', - 0x280A: 'es-PE', - 0x2401: 'ar-YE', - 0x140C: 'fr-LU', - 0x0450: 'mn', - 0x500A: 'es-PR', - 0x042B: 'hy', - 0x180C: 'fr-MC', - 0x0850: 'mn-CN', - 0x0C0A: 'es', - 0x044D: 'as', - 0x100C: 'fr-CH', - 0x0461: 'ne', - 0x040A: 'es', - 0x082C: 'az-Cyrl', - 0x0462: 'fy', - 0x0414: 'nb', - 0x540A: 'es-US', - 0x042C: 'az', - 0x0456: 'gl', - 0x0814: 'nn', - 0x380A: 'es-UY', - 0x046D: 'ba', - 0x0437: 'ka', - 0x0482: 'oc', - 0x200A: 'es-VE', - 0x042D: 'eu', - 0x0C07: 'de-AT', - 0x0448: 'or', - 0x081D: 'sv-FI', - 0x0423: 'be', - 0x0407: 'de', - 0x0463: 'ps', - 0x041D: 'sv', - 0x0845: 'bn', - 0x1407: 'de-LI', - 0x0415: 'pl', - 0x045A: 'syr', - 0x0445: 'bn-IN', - 0x1007: 'de-LU', - 0x0416: 'pt', - 0x0428: 'tg', - 0x201A: 'bs-Cyrl', - 0x0807: 'de-CH', - 0x0816: 'pt-PT', - 0x085F: 'tzm', - 0x141A: 'bs', - 0x0408: 'el', - 0x0446: 'pa', - 0x0449: 'ta', - 0x047E: 'br', - 0x046F: 'kl', - 0x046B: 'qu-BO', - 0x0444: 'tt', - 0x0402: 'bg', - 0x0447: 'gu', - 0x086B: 'qu-EC', - 0x044A: 'te', - 0x0403: 'ca', - 0x0468: 'ha', - 0x0C6B: 'qu', - 0x041E: 'th', - 0x0C04: 'zh-HK', - 0x040D: 'he', - 0x0418: 'ro', - 0x0451: 'bo', - 0x1404: 'zh-MO', - 0x0439: 'hi', - 0x0417: 'rm', - 0x041F: 'tr', - 0x0804: 'zh', - 0x040E: 'hu', - 0x0419: 'ru', - 0x0442: 'tk', - 0x1004: 'zh-SG', - 0x040F: 'is', - 0x243B: 'smn', - 0x0480: 'ug', - 0x0404: 'zh-TW', - 0x0470: 'ig', - 0x103B: 'smj-NO', - 0x0422: 'uk', - 0x0483: 'co', - 0x0421: 'id', - 0x143B: 'smj', - 0x042E: 'hsb', - 0x041A: 'hr', - 0x045D: 'iu', - 0x0C3B: 'se-FI', - 0x0420: 'ur', - 0x101A: 'hr-BA', - 0x085D: 'iu-Latn', - 0x043B: 'se', - 0x0843: 'uz-Cyrl', - 0x0405: 'cs', - 0x083C: 'ga', - 0x083B: 'se-SE', - 0x0443: 'uz', - 0x0406: 'da', - 0x0434: 'xh', - 0x203B: 'sms', - 0x042A: 'vi', - 0x048C: 'prs', - 0x0435: 'zu', - 0x183B: 'sma-NO', - 0x0452: 'cy', - 0x0465: 'dv', - 0x0410: 'it', - 0x1C3B: 'sms', - 0x0488: 'wo', - 0x0813: 'nl-BE', - 0x0810: 'it-CH', - 0x044F: 'sa', - 0x0485: 'sah', - 0x0413: 'nl', - 0x0411: 'ja', - 0x1C1A: 'sr-Cyrl-BA', - 0x0478: 'ii', - 0x0C09: 'en-AU', - 0x044B: 'kn', - 0x0C1A: 'sr', - 0x046A: 'yo', - 0x2809: 'en-BZ', - 0x043F: 'kk', - 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', - 0x0453: 'km', - 0x081A: 'sr-Latn', - 0x2409: 'en-029', - 0x0486: 'quc', - 0x046C: 'nso' - } -]; - - -let $51a9f4feb3a3b2b1$var$NameRecord = new $elh9A$restructure.Struct({ - platformID: $elh9A$restructure.uint16, - encodingID: $elh9A$restructure.uint16, - languageID: $elh9A$restructure.uint16, - nameID: $elh9A$restructure.uint16, - length: $elh9A$restructure.uint16, - string: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $elh9A$restructure.String('length', (t)=>(0, $e2613b812f052cbe$export$badc544e0651b6b1)(t.platformID, t.encodingID, t.languageID)), { - type: 'parent', - relativeTo: (ctx)=>ctx.parent.stringOffset, - allowNull: false - }) -}); -let $51a9f4feb3a3b2b1$var$LangTagRecord = new $elh9A$restructure.Struct({ - length: $elh9A$restructure.uint16, - tag: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $elh9A$restructure.String('length', 'utf16be'), { - type: 'parent', - relativeTo: (ctx)=>ctx.stringOffset - }) -}); -var $51a9f4feb3a3b2b1$var$NameTable = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 0: { - count: $elh9A$restructure.uint16, - stringOffset: $elh9A$restructure.uint16, - records: new $elh9A$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count') - }, - 1: { - count: $elh9A$restructure.uint16, - stringOffset: $elh9A$restructure.uint16, - records: new $elh9A$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count'), - langTagCount: $elh9A$restructure.uint16, - langTags: new $elh9A$restructure.Array($51a9f4feb3a3b2b1$var$LangTagRecord, 'langTagCount') - } -}); -var $51a9f4feb3a3b2b1$export$2e2bcd8739ae039 = $51a9f4feb3a3b2b1$var$NameTable; -const $51a9f4feb3a3b2b1$var$NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; -$51a9f4feb3a3b2b1$var$NameTable.process = function(stream) { - var records = {}; - for (let record of this.records){ - // find out what language this is for - let language = (0, $e2613b812f052cbe$export$2092376fd002e13)[record.platformID][record.languageID]; - if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; - if (language == null) language = record.platformID + '-' + record.languageID; - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : $51a9f4feb3a3b2b1$var$NAMES[record.nameID] || record.nameID; - if (records[key] == null) records[key] = {}; - let obj = records[key]; - if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); - if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; - } - this.records = records; -}; -$51a9f4feb3a3b2b1$var$NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - let records = []; - for(let key in this.records){ - let val = this.records[key]; - if (key === 'fontFeatures') continue; - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - if (key === 'postscriptName') records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - this.records = records; - this.count = records.length; - this.stringOffset = $51a9f4feb3a3b2b1$var$NameTable.size(this, null, false); -}; - - - -var $114ea85db469b435$var$OS2 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - header: { - xAvgCharWidth: $elh9A$restructure.int16, - usWeightClass: $elh9A$restructure.uint16, - usWidthClass: $elh9A$restructure.uint16, - fsType: new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - null, - 'noEmbedding', - 'viewOnly', - 'editable', - null, - null, - null, - null, - 'noSubsetting', - 'bitmapOnly' - ]), - ySubscriptXSize: $elh9A$restructure.int16, - ySubscriptYSize: $elh9A$restructure.int16, - ySubscriptXOffset: $elh9A$restructure.int16, - ySubscriptYOffset: $elh9A$restructure.int16, - ySuperscriptXSize: $elh9A$restructure.int16, - ySuperscriptYSize: $elh9A$restructure.int16, - ySuperscriptXOffset: $elh9A$restructure.int16, - ySuperscriptYOffset: $elh9A$restructure.int16, - yStrikeoutSize: $elh9A$restructure.int16, - yStrikeoutPosition: $elh9A$restructure.int16, - sFamilyClass: $elh9A$restructure.int16, - panose: new $elh9A$restructure.Array($elh9A$restructure.uint8, 10), - ulCharRange: new $elh9A$restructure.Array($elh9A$restructure.uint32, 4), - vendorID: new $elh9A$restructure.String(4), - fsSelection: new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - 'italic', - 'underscore', - 'negative', - 'outlined', - 'strikeout', - 'bold', - 'regular', - 'useTypoMetrics', - 'wws', - 'oblique' - ]), - usFirstCharIndex: $elh9A$restructure.uint16, - usLastCharIndex: $elh9A$restructure.uint16 // The maximum Unicode index in this font - }, - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - 1: { - typoAscender: $elh9A$restructure.int16, - typoDescender: $elh9A$restructure.int16, - typoLineGap: $elh9A$restructure.int16, - winAscent: $elh9A$restructure.uint16, - winDescent: $elh9A$restructure.uint16, - codePageRange: new $elh9A$restructure.Array($elh9A$restructure.uint32, 2) - }, - 2: { - // these should be common with version 1 somehow - typoAscender: $elh9A$restructure.int16, - typoDescender: $elh9A$restructure.int16, - typoLineGap: $elh9A$restructure.int16, - winAscent: $elh9A$restructure.uint16, - winDescent: $elh9A$restructure.uint16, - codePageRange: new $elh9A$restructure.Array($elh9A$restructure.uint32, 2), - xHeight: $elh9A$restructure.int16, - capHeight: $elh9A$restructure.int16, - defaultChar: $elh9A$restructure.uint16, - breakChar: $elh9A$restructure.uint16, - maxContent: $elh9A$restructure.uint16 - }, - 5: { - typoAscender: $elh9A$restructure.int16, - typoDescender: $elh9A$restructure.int16, - typoLineGap: $elh9A$restructure.int16, - winAscent: $elh9A$restructure.uint16, - winDescent: $elh9A$restructure.uint16, - codePageRange: new $elh9A$restructure.Array($elh9A$restructure.uint32, 2), - xHeight: $elh9A$restructure.int16, - capHeight: $elh9A$restructure.int16, - defaultChar: $elh9A$restructure.uint16, - breakChar: $elh9A$restructure.uint16, - maxContent: $elh9A$restructure.uint16, - usLowerOpticalPointSize: $elh9A$restructure.uint16, - usUpperOpticalPointSize: $elh9A$restructure.uint16 - } -}); -let $114ea85db469b435$var$versions = $114ea85db469b435$var$OS2.versions; -$114ea85db469b435$var$versions[3] = $114ea85db469b435$var$versions[4] = $114ea85db469b435$var$versions[2]; -var $114ea85db469b435$export$2e2bcd8739ae039 = $114ea85db469b435$var$OS2; - - - -var // PostScript information -$f93b30299e1ea0f5$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.fixed32, { - header: { - italicAngle: $elh9A$restructure.fixed32, - underlinePosition: $elh9A$restructure.int16, - underlineThickness: $elh9A$restructure.int16, - isFixedPitch: $elh9A$restructure.uint32, - minMemType42: $elh9A$restructure.uint32, - maxMemType42: $elh9A$restructure.uint32, - minMemType1: $elh9A$restructure.uint32, - maxMemType1: $elh9A$restructure.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - 1: {}, - 2: { - numberOfGlyphs: $elh9A$restructure.uint16, - glyphNameIndex: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numberOfGlyphs'), - names: new $elh9A$restructure.Array(new $elh9A$restructure.String($elh9A$restructure.uint8)) - }, - 2.5: { - numberOfGlyphs: $elh9A$restructure.uint16, - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint8, 'numberOfGlyphs') - }, - 3: {}, - 4: { - map: new $elh9A$restructure.Array($elh9A$restructure.uint32, (t)=>t.parent.maxp.numGlyphs) - } -}); - - - -var // An array of predefined values accessible by instructions -$8fb09b0f473d61a0$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - controlValues: new $elh9A$restructure.Array($elh9A$restructure.int16) -}); - - - -var // A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -$873d79fea57d3161$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - instructions: new $elh9A$restructure.Array($elh9A$restructure.uint8) -}); - - - -let $83c4155666d50c37$var$loca = new $elh9A$restructure.VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint16) - }, - 1: { - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint32) - } -}); -$83c4155666d50c37$var$loca.process = function() { - if (this.version === 0 && !this._processed) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; - this._processed = true; - } -}; -$83c4155666d50c37$var$loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; - this._processed = false; - } -}; -var $83c4155666d50c37$export$2e2bcd8739ae039 = $83c4155666d50c37$var$loca; - - - -var // Set of instructions executed whenever the point size or font transformation change -$b12598db7cdf7042$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - controlValueProgram: new $elh9A$restructure.Array($elh9A$restructure.uint8) -}); - - - -var // only used for encoding -$7707bdf21a3d89cc$export$2e2bcd8739ae039 = new $elh9A$restructure.Array(new $elh9A$restructure.Buffer); - - - - -class $9eaea3754914a290$export$2e2bcd8739ae039 { - getCFFVersion(ctx) { - while(ctx && !ctx.hdrSize)ctx = ctx.parent; - return ctx ? ctx.version : -1; - } - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); - if (count === 0) return []; - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) offsetType = $elh9A$restructure.uint8; - else if (offSize === 2) offsetType = $elh9A$restructure.uint16; - else if (offSize === 3) offsetType = $elh9A$restructure.uint24; - else if (offSize === 4) offsetType = $elh9A$restructure.uint32; - else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - let ret = []; - let startPos = stream.pos + (count + 1) * offSize - 1; - let start = offsetType.decode(stream); - for(let i = 0; i < count; i++){ - let end = offsetType.decode(stream); - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else ret.push({ - offset: startPos + start, - length: end - start - }); - start = end; - } - stream.pos = startPos + start; - return ret; - } - size(arr, parent) { - let size = 2; - if (arr.length === 0) return size; - let type = this.type || new $elh9A$restructure.Buffer; - // find maximum offset to detminine offset type - let offset = 1; - for(let i = 0; i < arr.length; i++){ - let item = arr[i]; - offset += type.size(item, parent); - } - let offsetType; - if (offset <= 0xff) offsetType = $elh9A$restructure.uint8; - else if (offset <= 0xffff) offsetType = $elh9A$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $elh9A$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $elh9A$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - return size; - } - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) return; - let type = this.type || new $elh9A$restructure.Buffer; - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr){ - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - let offsetType; - if (offset <= 0xff) offsetType = $elh9A$restructure.uint8; - else if (offset <= 0xffff) offsetType = $elh9A$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $elh9A$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $elh9A$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - // write offset size - stream.writeUInt8(offsetType.size()); - // write elements - offset = 1; - offsetType.encode(stream, offset); - for (let size of sizes){ - offset += size; - offsetType.encode(stream, offset); - } - for (let item of arr)type.encode(stream, item, parent); - return; - } - constructor(type){ - this.type = type; - } -} - - - - - -const $f77b592c17132d70$var$FLOAT_EOF = 0xf; -const $f77b592c17132d70$var$FLOAT_LOOKUP = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '.', - 'E', - 'E-', - null, - '-' -]; -const $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; -class $f77b592c17132d70$export$2e2bcd8739ae039 { - static decode(stream, value) { - if (32 <= value && value <= 246) return value - 139; - if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; - if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; - if (value === 28) return stream.readInt16BE(); - if (value === 29) return stream.readInt32BE(); - if (value === 30) { - let str = ''; - while(true){ - let b = stream.readUInt8(); - let n1 = b >> 4; - if (n1 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n1]; - let n2 = b & 15; - if (n2 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n2]; - } - return parseFloat(str); - } - return null; - } - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) value = 32768; - if ((value | 0) !== value) { - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - } else if (-107 <= value && value <= 107) return 1; - else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; - else if (-32768 <= value && value <= 32767) return 3; - else return 5; - } - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } else if ((val | 0) !== val) { - stream.writeUInt8(30); - let str = '' + val; - for(let i = 0; i < str.length; i += 2){ - let c1 = str[i]; - let n1 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; - if (i === str.length - 1) var n2 = $f77b592c17132d70$var$FLOAT_EOF; - else { - let c2 = str[i + 1]; - var n2 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - stream.writeUInt8(n1 << 4 | n2 & 15); - } - if (n2 !== $f77b592c17132d70$var$FLOAT_EOF) return stream.writeUInt8($f77b592c17132d70$var$FLOAT_EOF << 4); - } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); - else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} - - -class $efe622f40a9c35bd$export$2e2bcd8739ae039 { - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ - op - ])); - else if (type.decode != null) return type.decode(stream, ret, operands); - else switch(type){ - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]); - else if (type.encode != null) return type.encode(stream, operands, ctx); - else if (typeof operands === 'number') return [ - operands - ]; - else if (typeof operands === 'boolean') return [ - +operands - ]; - else if (Array.isArray(operands)) return operands; - else return [ - operands - ]; - } - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - // define hidden properties - Object.defineProperties(ret, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - } - }); - // fill in defaults - for(let key in this.fields){ - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - while(stream.pos < end){ - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) b = b << 8 | stream.readUInt8(); - let field = this.fields[b]; - if (!field) throw new Error(`Unknown operator ${b}`); - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof (0, $elh9A$restructure.PropertyDescriptor)) Object.defineProperty(ret, field[1], val); - else ret[field[1]] = val; - } - operands = []; - } else operands.push((0, $f77b592c17132d70$export$2e2bcd8739ae039).decode(stream, b)); - } - return ret; - } - size(dict, parent, includePointers = true) { - let ctx = { - parent: parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - let len = 0; - for(let k in this.fields){ - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($elh9A$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands)len += (0, $f77b592c17132d70$export$2e2bcd8739ae039).size(op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - len += key.length; - } - if (includePointers) len += ctx.pointerSize; - return len; - } - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: dict, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - for (let field of this.ops){ - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($elh9A$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands)(0, $f77b592c17132d70$export$2e2bcd8739ae039).encode(stream, op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - for (let op of key)stream.writeUInt8(op); - } - let i = 0; - while(i < ctx.pointers.length){ - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - return; - } - constructor(ops = []){ - this.ops = ops; - this.fields = {}; - for (let field of ops){ - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } -} - - - - -class $4aa1b0749c2770f8$export$2e2bcd8739ae039 extends $elh9A$restructure.Pointer { - decode(stream, parent, operands) { - this.offsetType = { - decode: ()=>operands[0] - }; - return super.decode(stream, parent, operands); - } - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: ()=>0 - }; - this.size(value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(0) - ]; - } - let ptr = null; - this.offsetType = { - encode: (stream, val)=>ptr = val - }; - super.encode(stream, value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(ptr) - ]; - } - constructor(type, options = {}){ - if (options.type == null) options.type = 'global'; - super(null, type, options); - } -} -class $4aa1b0749c2770f8$var$Ptr { - valueOf() { - return this.val; - } - constructor(val){ - this.val = val; - this.forceLarge = true; - } -} - - - - - -class $15a0cbb3d09cf7ee$var$CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while(operands.length > numBlends)operands.pop(); - } -} -var $15a0cbb3d09cf7ee$export$2e2bcd8739ae039 = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type default - [ - 6, - 'BlueValues', - 'delta', - null - ], - [ - 7, - 'OtherBlues', - 'delta', - null - ], - [ - 8, - 'FamilyBlues', - 'delta', - null - ], - [ - 9, - 'FamilyOtherBlues', - 'delta', - null - ], - [ - [ - 12, - 9 - ], - 'BlueScale', - 'number', - 0.039625 - ], - [ - [ - 12, - 10 - ], - 'BlueShift', - 'number', - 7 - ], - [ - [ - 12, - 11 - ], - 'BlueFuzz', - 'number', - 1 - ], - [ - 10, - 'StdHW', - 'number', - null - ], - [ - 11, - 'StdVW', - 'number', - null - ], - [ - [ - 12, - 12 - ], - 'StemSnapH', - 'delta', - null - ], - [ - [ - 12, - 13 - ], - 'StemSnapV', - 'delta', - null - ], - [ - [ - 12, - 14 - ], - 'ForceBold', - 'boolean', - false - ], - [ - [ - 12, - 17 - ], - 'LanguageGroup', - 'number', - 0 - ], - [ - [ - 12, - 18 - ], - 'ExpansionFactor', - 'number', - 0.06 - ], - [ - [ - 12, - 19 - ], - 'initialRandomSeed', - 'number', - 0 - ], - [ - 20, - 'defaultWidthX', - 'number', - 0 - ], - [ - 21, - 'nominalWidthX', - 'number', - 0 - ], - [ - 22, - 'vsindex', - 'number', - 0 - ], - [ - 23, - 'blend', - $15a0cbb3d09cf7ee$var$CFFBlendOp, - null - ], - [ - 19, - 'Subrs', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039), { - type: 'local' - }), - null - ] -]); - - -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -var $860d3574d7fa3a51$export$2e2bcd8739ae039 = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -]; - - -let $c4ffe47cba1d7f36$export$dee0027060fa13bd = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - '', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - '', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - '', - 'questiondown', - '', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - '', - 'ring', - 'cedilla', - '', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'AE', - '', - 'ordfeminine', - '', - '', - '', - '', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - '', - '', - '', - '', - '', - 'ae', - '', - '', - '', - 'dotlessi', - '', - '', - 'lslash', - 'oslash', - 'oe', - 'germandbls' -]; -let $c4ffe47cba1d7f36$export$4f58f497e14a53c3 = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - '', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - '', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - '', - '', - 'isuperior', - '', - '', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - '', - '', - 'rsuperior', - 'ssuperior', - 'tsuperior', - '', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - '', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - '', - '', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - '', - 'Dotaccentsmall', - '', - '', - 'Macronsmall', - '', - '', - 'figuredash', - 'hypheninferior', - '', - '', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - '', - '', - '', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - '', - '', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; - - -let $1e7c7c16984e4427$export$c33b50336c234f16 = [ - '.notdef', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - 'questiondown', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - 'AE', - 'ordfeminine', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - 'ae', - 'dotlessi', - 'lslash', - 'oslash', - 'oe', - 'germandbls', - 'onesuperior', - 'logicalnot', - 'mu', - 'trademark', - 'Eth', - 'onehalf', - 'plusminus', - 'Thorn', - 'onequarter', - 'divide', - 'brokenbar', - 'degree', - 'thorn', - 'threequarters', - 'twosuperior', - 'registered', - 'minus', - 'eth', - 'multiply', - 'threesuperior', - 'copyright', - 'Aacute', - 'Acircumflex', - 'Adieresis', - 'Agrave', - 'Aring', - 'Atilde', - 'Ccedilla', - 'Eacute', - 'Ecircumflex', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Ntilde', - 'Oacute', - 'Ocircumflex', - 'Odieresis', - 'Ograve', - 'Otilde', - 'Scaron', - 'Uacute', - 'Ucircumflex', - 'Udieresis', - 'Ugrave', - 'Yacute', - 'Ydieresis', - 'Zcaron', - 'aacute', - 'acircumflex', - 'adieresis', - 'agrave', - 'aring', - 'atilde', - 'ccedilla', - 'eacute', - 'ecircumflex', - 'edieresis', - 'egrave', - 'iacute', - 'icircumflex', - 'idieresis', - 'igrave', - 'ntilde', - 'oacute', - 'ocircumflex', - 'odieresis', - 'ograve', - 'otilde', - 'scaron', - 'uacute', - 'ucircumflex', - 'udieresis', - 'ugrave', - 'yacute', - 'ydieresis', - 'zcaron' -]; -let $1e7c7c16984e4427$export$3ed0f9e1fee8d489 = [ - '.notdef', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - 'Dotaccentsmall', - 'Macronsmall', - 'figuredash', - 'hypheninferior', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; -let $1e7c7c16984e4427$export$dc28be11139d4120 = [ - '.notdef', - 'space', - 'dollaroldstyle', - 'dollarsuperior', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'hyphensuperior', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'centoldstyle', - 'figuredash', - 'hypheninferior', - 'onequarter', - 'onehalf', - 'threequarters', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior' -]; - - - -//######################## -// Scripts and Languages # -//######################## -let $b6dd765146ad212a$var$LangSysTable = new $elh9A$restructure.Struct({ - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - reqFeatureIndex: $elh9A$restructure.uint16, - featureCount: $elh9A$restructure.uint16, - featureIndexes: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'featureCount') -}); -let $b6dd765146ad212a$var$LangSysRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - langSys: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$LangSysTable, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$var$Script = new $elh9A$restructure.Struct({ - defaultLangSys: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$LangSysTable), - count: $elh9A$restructure.uint16, - langSysRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LangSysRecord, 'count') -}); -let $b6dd765146ad212a$var$ScriptRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - script: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$Script, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$3e15fc05ce864229 = new $elh9A$restructure.Array($b6dd765146ad212a$var$ScriptRecord, $elh9A$restructure.uint16); -//####################### -// Features and Lookups # -//####################### -let $b6dd765146ad212a$var$FeatureParams = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - nameID: $elh9A$restructure.uint16 -}); -let $b6dd765146ad212a$export$6e91cf7616333d5 = new $elh9A$restructure.Struct({ - featureParams: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$FeatureParams), - lookupCount: $elh9A$restructure.uint16, - lookupListIndexes: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'lookupCount') -}); -let $b6dd765146ad212a$var$FeatureRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - feature: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$6e91cf7616333d5, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$aa18130def4b6cb4 = new $elh9A$restructure.Array($b6dd765146ad212a$var$FeatureRecord, $elh9A$restructure.uint16); -let $b6dd765146ad212a$var$LookupFlags = new $elh9A$restructure.Struct({ - markAttachmentType: $elh9A$restructure.uint8, - flags: new $elh9A$restructure.Bitfield($elh9A$restructure.uint8, [ - 'rightToLeft', - 'ignoreBaseGlyphs', - 'ignoreLigatures', - 'ignoreMarks', - 'useMarkFilteringSet' - ]) -}); -function $b6dd765146ad212a$export$df0008c6ff2da22a(SubTable) { - let Lookup = new $elh9A$restructure.Struct({ - lookupType: $elh9A$restructure.uint16, - flags: $b6dd765146ad212a$var$LookupFlags, - subTableCount: $elh9A$restructure.uint16, - subTables: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, SubTable), 'subTableCount'), - markFilteringSet: new $elh9A$restructure.Optional($elh9A$restructure.uint16, (t)=>t.flags.flags.useMarkFilteringSet) - }); - return new $elh9A$restructure.LazyArray(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, Lookup), $elh9A$restructure.uint16); -} -//################# -// Coverage Table # -//################# -let $b6dd765146ad212a$var$RangeRecord = new $elh9A$restructure.Struct({ - start: $elh9A$restructure.uint16, - end: $elh9A$restructure.uint16, - startCoverageIndex: $elh9A$restructure.uint16 -}); -let $b6dd765146ad212a$export$17608c3f81a6111 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - glyphCount: $elh9A$restructure.uint16, - glyphs: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'glyphCount') - }, - 2: { - rangeCount: $elh9A$restructure.uint16, - rangeRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$RangeRecord, 'rangeCount') - } -}); -//######################### -// Class Definition Table # -//######################### -let $b6dd765146ad212a$var$ClassRangeRecord = new $elh9A$restructure.Struct({ - start: $elh9A$restructure.uint16, - end: $elh9A$restructure.uint16, - class: $elh9A$restructure.uint16 -}); -let $b6dd765146ad212a$export$843d551fbbafef71 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - startGlyph: $elh9A$restructure.uint16, - glyphCount: $elh9A$restructure.uint16, - classValueArray: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'glyphCount') - }, - 2: { - classRangeCount: $elh9A$restructure.uint16, - classRangeRecord: new $elh9A$restructure.Array($b6dd765146ad212a$var$ClassRangeRecord, 'classRangeCount') - } -}); -let $b6dd765146ad212a$export$8215d14a63d9fb10 = new $elh9A$restructure.Struct({ - a: $elh9A$restructure.uint16, - b: $elh9A$restructure.uint16, - deltaFormat: $elh9A$restructure.uint16 -}); -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# -let $b6dd765146ad212a$var$LookupRecord = new $elh9A$restructure.Struct({ - sequenceIndex: $elh9A$restructure.uint16, - lookupListIndex: $elh9A$restructure.uint16 -}); -let $b6dd765146ad212a$var$Rule = new $elh9A$restructure.Struct({ - glyphCount: $elh9A$restructure.uint16, - lookupCount: $elh9A$restructure.uint16, - input: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$RuleSet = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$Rule), $elh9A$restructure.uint16); -let $b6dd765146ad212a$var$ClassRule = new $elh9A$restructure.Struct({ - glyphCount: $elh9A$restructure.uint16, - lookupCount: $elh9A$restructure.uint16, - classes: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ClassSet = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$ClassRule), $elh9A$restructure.uint16); -let $b6dd765146ad212a$export$841858b892ce1f4c = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - ruleSetCount: $elh9A$restructure.uint16, - ruleSets: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$RuleSet), 'ruleSetCount') - }, - 2: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - classDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - classSetCnt: $elh9A$restructure.uint16, - classSet: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: $elh9A$restructure.uint16, - lookupCount: $elh9A$restructure.uint16, - coverages: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'glyphCount'), - lookupRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### -let $b6dd765146ad212a$var$ChainRule = new $elh9A$restructure.Struct({ - backtrackGlyphCount: $elh9A$restructure.uint16, - backtrack: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'backtrackGlyphCount'), - inputGlyphCount: $elh9A$restructure.uint16, - input: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.inputGlyphCount - 1), - lookaheadGlyphCount: $elh9A$restructure.uint16, - lookahead: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'lookaheadGlyphCount'), - lookupCount: $elh9A$restructure.uint16, - lookupRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ChainRuleSet = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$ChainRule), $elh9A$restructure.uint16); -let $b6dd765146ad212a$export$5e6d09e6861162f6 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - chainCount: $elh9A$restructure.uint16, - chainRuleSets: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 2: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - backtrackClassDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - inputClassDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - lookaheadClassDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - chainCount: $elh9A$restructure.uint16, - chainClassSet: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 3: { - backtrackGlyphCount: $elh9A$restructure.uint16, - backtrackCoverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'backtrackGlyphCount'), - inputGlyphCount: $elh9A$restructure.uint16, - inputCoverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'inputGlyphCount'), - lookaheadGlyphCount: $elh9A$restructure.uint16, - lookaheadCoverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'lookaheadGlyphCount'), - lookupCount: $elh9A$restructure.uint16, - lookupRecords: new $elh9A$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); - - - -/******************* - * Variation Store * - *******************/ let $2e4adcda047b3383$var$F2DOT14 = new $elh9A$restructure.Fixed(16, 'BE', 14); -let $2e4adcda047b3383$var$RegionAxisCoordinates = new $elh9A$restructure.Struct({ - startCoord: $2e4adcda047b3383$var$F2DOT14, - peakCoord: $2e4adcda047b3383$var$F2DOT14, - endCoord: $2e4adcda047b3383$var$F2DOT14 -}); -let $2e4adcda047b3383$var$VariationRegionList = new $elh9A$restructure.Struct({ - axisCount: $elh9A$restructure.uint16, - regionCount: $elh9A$restructure.uint16, - variationRegions: new $elh9A$restructure.Array(new $elh9A$restructure.Array($2e4adcda047b3383$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); -let $2e4adcda047b3383$var$DeltaSet = new $elh9A$restructure.Struct({ - shortDeltas: new $elh9A$restructure.Array($elh9A$restructure.int16, (t)=>t.parent.shortDeltaCount), - regionDeltas: new $elh9A$restructure.Array($elh9A$restructure.int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) -}); -let $2e4adcda047b3383$var$ItemVariationData = new $elh9A$restructure.Struct({ - itemCount: $elh9A$restructure.uint16, - shortDeltaCount: $elh9A$restructure.uint16, - regionIndexCount: $elh9A$restructure.uint16, - regionIndexes: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'regionIndexCount'), - deltaSets: new $elh9A$restructure.Array($2e4adcda047b3383$var$DeltaSet, 'itemCount') -}); -let $2e4adcda047b3383$export$fe1b122a2710f241 = new $elh9A$restructure.Struct({ - format: $elh9A$restructure.uint16, - variationRegionList: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $2e4adcda047b3383$var$VariationRegionList), - variationDataCount: $elh9A$restructure.uint16, - itemVariationData: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $2e4adcda047b3383$var$ItemVariationData), 'variationDataCount') -}); -/********************** - * Feature Variations * - **********************/ let $2e4adcda047b3383$var$ConditionTable = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - axisIndex: $elh9A$restructure.uint16, - axisIndex: $elh9A$restructure.uint16, - filterRangeMinValue: $2e4adcda047b3383$var$F2DOT14, - filterRangeMaxValue: $2e4adcda047b3383$var$F2DOT14 - } -}); -let $2e4adcda047b3383$var$ConditionSet = new $elh9A$restructure.Struct({ - conditionCount: $elh9A$restructure.uint16, - conditionTable: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $2e4adcda047b3383$var$ConditionTable), 'conditionCount') -}); -let $2e4adcda047b3383$var$FeatureTableSubstitutionRecord = new $elh9A$restructure.Struct({ - featureIndex: $elh9A$restructure.uint16, - alternateFeatureTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $b6dd765146ad212a$export$6e91cf7616333d5), { - type: 'parent' - }) -}); -let $2e4adcda047b3383$var$FeatureTableSubstitution = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - substitutionCount: $elh9A$restructure.uint16, - substitutions: new $elh9A$restructure.Array($2e4adcda047b3383$var$FeatureTableSubstitutionRecord, 'substitutionCount') -}); -let $2e4adcda047b3383$var$FeatureVariationRecord = new $elh9A$restructure.Struct({ - conditionSet: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $2e4adcda047b3383$var$ConditionSet, { - type: 'parent' - }), - featureTableSubstitution: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $2e4adcda047b3383$var$FeatureTableSubstitution, { - type: 'parent' - }) -}); -let $2e4adcda047b3383$export$441b70b7971dd419 = new $elh9A$restructure.Struct({ - majorVersion: $elh9A$restructure.uint16, - minorVersion: $elh9A$restructure.uint16, - featureVariationRecordCount: $elh9A$restructure.uint32, - featureVariationRecords: new $elh9A$restructure.Array($2e4adcda047b3383$var$FeatureVariationRecord, 'featureVariationRecordCount') -}); - - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class $5b547cf9e5da519b$var$PredefinedOp { - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; - return this.type.decode(stream, parent, operands); - } - size(value, ctx) { - return this.type.size(value, ctx); - } - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) return index; - return this.type.encode(stream, value, ctx); - } - constructor(predefinedOps, type){ - this.predefinedOps = predefinedOps; - this.type = type; - } -} -class $5b547cf9e5da519b$var$CFFEncodingVersion extends $elh9A$restructure.Number { - decode(stream) { - return $elh9A$restructure.uint8.decode(stream) & 0x7f; - } - constructor(){ - super('UInt8'); - } -} -let $5b547cf9e5da519b$var$Range1 = new $elh9A$restructure.Struct({ - first: $elh9A$restructure.uint16, - nLeft: $elh9A$restructure.uint8 -}); -let $5b547cf9e5da519b$var$Range2 = new $elh9A$restructure.Struct({ - first: $elh9A$restructure.uint16, - nLeft: $elh9A$restructure.uint16 -}); -let $5b547cf9e5da519b$var$CFFCustomEncoding = new $elh9A$restructure.VersionedStruct(new $5b547cf9e5da519b$var$CFFEncodingVersion(), { - 0: { - nCodes: $elh9A$restructure.uint8, - codes: new $elh9A$restructure.Array($elh9A$restructure.uint8, 'nCodes') - }, - 1: { - nRanges: $elh9A$restructure.uint8, - ranges: new $elh9A$restructure.Array($5b547cf9e5da519b$var$Range1, 'nRanges') - } -}); -let $5b547cf9e5da519b$var$CFFEncoding = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd), - (0, $c4ffe47cba1d7f36$export$4f58f497e14a53c3) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomEncoding, { - lazy: true -})); -// Decodes an array of ranges until the total -// length is equal to the provided length. -class $5b547cf9e5da519b$var$RangeArray extends $elh9A$restructure.Array { - decode(stream, parent) { - let length = (0, $elh9A$restructure.resolveLength)(this.length, stream, parent); - let count = 0; - let res = []; - while(count < length){ - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - return res; - } -} -let $5b547cf9e5da519b$var$CFFCustomCharset = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint8, { - 0: { - glyphs: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.parent.CharStrings.length - 1) - }, - 1: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range1, (t)=>t.parent.CharStrings.length - 1) - }, - 2: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range2, (t)=>t.parent.CharStrings.length - 1) - } -}); -let $5b547cf9e5da519b$var$CFFCharset = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $1e7c7c16984e4427$export$c33b50336c234f16), - (0, $1e7c7c16984e4427$export$3ed0f9e1fee8d489), - (0, $1e7c7c16984e4427$export$dc28be11139d4120) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomCharset, { - lazy: true -})); -let $5b547cf9e5da519b$var$FDRange3 = new $elh9A$restructure.Struct({ - first: $elh9A$restructure.uint16, - fd: $elh9A$restructure.uint8 -}); -let $5b547cf9e5da519b$var$FDRange4 = new $elh9A$restructure.Struct({ - first: $elh9A$restructure.uint32, - fd: $elh9A$restructure.uint16 -}); -let $5b547cf9e5da519b$var$FDSelect = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint8, { - 0: { - fds: new $elh9A$restructure.Array($elh9A$restructure.uint8, (t)=>t.parent.CharStrings.length) - }, - 3: { - nRanges: $elh9A$restructure.uint16, - ranges: new $elh9A$restructure.Array($5b547cf9e5da519b$var$FDRange3, 'nRanges'), - sentinel: $elh9A$restructure.uint16 - }, - 4: { - nRanges: $elh9A$restructure.uint32, - ranges: new $elh9A$restructure.Array($5b547cf9e5da519b$var$FDRange4, 'nRanges'), - sentinel: $elh9A$restructure.uint32 - } -}); -let $5b547cf9e5da519b$var$ptr = new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)((0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039)); -class $5b547cf9e5da519b$var$CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return $5b547cf9e5da519b$var$ptr.decode(stream, parent, [ - operands[1] - ]); - } - size(dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.size(dict, ctx)[0] - ]; - } - encode(stream, dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.encode(stream, dict, ctx)[0] - ]; - } -} -let $5b547cf9e5da519b$var$FontDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ] -]); -let $5b547cf9e5da519b$var$CFFTopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - [ - 12, - 30 - ], - 'ROS', - [ - 'sid', - 'sid', - 'number' - ], - null - ], - [ - 0, - 'version', - 'sid', - null - ], - [ - 1, - 'Notice', - 'sid', - null - ], - [ - [ - 12, - 0 - ], - 'Copyright', - 'sid', - null - ], - [ - 2, - 'FullName', - 'sid', - null - ], - [ - 3, - 'FamilyName', - 'sid', - null - ], - [ - 4, - 'Weight', - 'sid', - null - ], - [ - [ - 12, - 1 - ], - 'isFixedPitch', - 'boolean', - false - ], - [ - [ - 12, - 2 - ], - 'ItalicAngle', - 'number', - 0 - ], - [ - [ - 12, - 3 - ], - 'UnderlinePosition', - 'number', - -100 - ], - [ - [ - 12, - 4 - ], - 'UnderlineThickness', - 'number', - 50 - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ], - [ - [ - 12, - 6 - ], - 'CharstringType', - 'number', - 2 - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 13, - 'UniqueID', - 'number', - null - ], - [ - 5, - 'FontBBox', - 'array', - [ - 0, - 0, - 0, - 0 - ] - ], - [ - [ - 12, - 8 - ], - 'StrokeWidth', - 'number', - 0 - ], - [ - 14, - 'XUID', - 'array', - null - ], - [ - 15, - 'charset', - $5b547cf9e5da519b$var$CFFCharset, - (0, $1e7c7c16984e4427$export$c33b50336c234f16) - ], - [ - 16, - 'Encoding', - $5b547cf9e5da519b$var$CFFEncoding, - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd) - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 20 - ], - 'SyntheticBase', - 'number', - null - ], - [ - [ - 12, - 21 - ], - 'PostScript', - 'sid', - null - ], - [ - [ - 12, - 22 - ], - 'BaseFontName', - 'sid', - null - ], - [ - [ - 12, - 23 - ], - 'BaseFontBlend', - 'delta', - null - ], - // CID font specific - [ - [ - 12, - 31 - ], - 'CIDFontVersion', - 'number', - 0 - ], - [ - [ - 12, - 32 - ], - 'CIDFontRevision', - 'number', - 0 - ], - [ - [ - 12, - 33 - ], - 'CIDFontType', - 'number', - 0 - ], - [ - [ - 12, - 34 - ], - 'CIDCount', - 'number', - 8720 - ], - [ - [ - 12, - 35 - ], - 'UIDBase', - 'number', - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ] -]); -let $5b547cf9e5da519b$var$VariationStore = new $elh9A$restructure.Struct({ - length: $elh9A$restructure.uint16, - itemVariationStore: (0, $2e4adcda047b3383$export$fe1b122a2710f241) -}); -let $5b547cf9e5da519b$var$CFF2TopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - 24, - 'vstore', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$VariationStore), - null - ], - [ - 25, - 'maxstack', - 'number', - 193 - ] -]); -let $5b547cf9e5da519b$var$CFFTop = new $elh9A$restructure.VersionedStruct($elh9A$restructure.fixed16, { - 1: { - hdrSize: $elh9A$restructure.uint8, - offSize: $elh9A$restructure.uint8, - nameIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $elh9A$restructure.String('length')), - topDictIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFTopDict), - stringIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $elh9A$restructure.String('length')), - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - }, - 2: { - hdrSize: $elh9A$restructure.uint8, - length: $elh9A$restructure.uint16, - topDict: $5b547cf9e5da519b$var$CFF2TopDict, - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - } -}); -var $5b547cf9e5da519b$export$2e2bcd8739ae039 = $5b547cf9e5da519b$var$CFFTop; - - - - -class $f717432b360040c7$var$CFFFont { - static decode(stream) { - return new $f717432b360040c7$var$CFFFont(stream); - } - decode() { - let start = this.stream.pos; - let top = (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).decode(this.stream); - for(let key in top){ - let val = top[key]; - this[key] = val; - } - if (this.version < 2) { - if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); - this.topDict = this.topDictIndex[0]; - } - this.isCIDFont = this.topDict.ROS != null; - return this; - } - string(sid) { - if (this.version >= 2) return null; - if (sid < (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length) return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039)[sid]; - return this.stringIndex[sid - (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length]; - } - get postscriptName() { - if (this.version < 2) return this.nameIndex[0]; - return null; - } - get fullName() { - return this.string(this.topDict.FullName); - } - get familyName() { - return this.string(this.topDict.FamilyName); - } - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) return null; - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) return null; - let { charset: charset } = this.topDict; - if (Array.isArray(charset)) return charset[gid]; - if (gid === 0) return '.notdef'; - gid -= 1; - switch(charset.version){ - case 0: - return this.string(charset.glyphs[gid]); - case 1: - case 2: - for(let i = 0; i < charset.ranges.length; i++){ - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); - } - break; - } - return null; - } - fdForGlyph(gid) { - if (!this.topDict.FDSelect) return null; - switch(this.topDict.FDSelect.version){ - case 0: - return this.topDict.FDSelect.fds[gid]; - case 3: - case 4: - let { ranges: ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - while(low <= high){ - let mid = low + high >> 1; - if (gid < ranges[mid].first) high = mid - 1; - else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; - else return ranges[mid].fd; - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; - return null; - } - if (this.version < 2) return this.topDict.Private; - return this.topDict.FDArray[0].Private; - } - constructor(stream){ - this.stream = stream; - this.decode(); - } -} -var $f717432b360040c7$export$2e2bcd8739ae039 = $f717432b360040c7$var$CFFFont; - - - -let $8cb7ae73ed7aa7d8$var$VerticalOrigin = new $elh9A$restructure.Struct({ - glyphIndex: $elh9A$restructure.uint16, - vertOriginY: $elh9A$restructure.int16 -}); -var $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - majorVersion: $elh9A$restructure.uint16, - minorVersion: $elh9A$restructure.uint16, - defaultVertOriginY: $elh9A$restructure.int16, - numVertOriginYMetrics: $elh9A$restructure.uint16, - metrics: new $elh9A$restructure.Array($8cb7ae73ed7aa7d8$var$VerticalOrigin, 'numVertOriginYMetrics') -}); - - - - -let $20e0c7bbecb76d75$export$16b227cb15d716a0 = new $elh9A$restructure.Struct({ - height: $elh9A$restructure.uint8, - width: $elh9A$restructure.uint8, - horiBearingX: $elh9A$restructure.int8, - horiBearingY: $elh9A$restructure.int8, - horiAdvance: $elh9A$restructure.uint8, - vertBearingX: $elh9A$restructure.int8, - vertBearingY: $elh9A$restructure.int8, - vertAdvance: $elh9A$restructure.uint8 -}); -let $20e0c7bbecb76d75$export$62c53e75f69bfe12 = new $elh9A$restructure.Struct({ - height: $elh9A$restructure.uint8, - width: $elh9A$restructure.uint8, - bearingX: $elh9A$restructure.int8, - bearingY: $elh9A$restructure.int8, - advance: $elh9A$restructure.uint8 -}); -let $20e0c7bbecb76d75$var$EBDTComponent = new $elh9A$restructure.Struct({ - glyph: $elh9A$restructure.uint16, - xOffset: $elh9A$restructure.int8, - yOffset: $elh9A$restructure.int8 -}); -class $20e0c7bbecb76d75$var$ByteAligned { -} -class $20e0c7bbecb76d75$var$BitAligned { -} -let $20e0c7bbecb76d75$export$f1f5ddeb20d14f = new $elh9A$restructure.VersionedStruct('version', { - 1: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 2: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$BitAligned - }, - // format 3 is deprecated - // format 4 is not supported by Microsoft - 5: { - data: $20e0c7bbecb76d75$var$BitAligned - }, - 6: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 7: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$BitAligned - }, - 8: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - pad: new $elh9A$restructure.Reserved($elh9A$restructure.uint8), - numComponents: $elh9A$restructure.uint16, - components: new $elh9A$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 9: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - pad: new $elh9A$restructure.Reserved($elh9A$restructure.uint8), - numComponents: $elh9A$restructure.uint16, - components: new $elh9A$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 17: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - dataLen: $elh9A$restructure.uint32, - data: new $elh9A$restructure.Buffer('dataLen') - }, - 18: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - dataLen: $elh9A$restructure.uint32, - data: new $elh9A$restructure.Buffer('dataLen') - }, - 19: { - dataLen: $elh9A$restructure.uint32, - data: new $elh9A$restructure.Buffer('dataLen') - } -}); - - -let $035bb95c0cdb1f6d$var$SBitLineMetrics = new $elh9A$restructure.Struct({ - ascender: $elh9A$restructure.int8, - descender: $elh9A$restructure.int8, - widthMax: $elh9A$restructure.uint8, - caretSlopeNumerator: $elh9A$restructure.int8, - caretSlopeDenominator: $elh9A$restructure.int8, - caretOffset: $elh9A$restructure.int8, - minOriginSB: $elh9A$restructure.int8, - minAdvanceSB: $elh9A$restructure.int8, - maxBeforeBL: $elh9A$restructure.int8, - minAfterBL: $elh9A$restructure.int8, - pad: new $elh9A$restructure.Reserved($elh9A$restructure.int8, 2) -}); -let $035bb95c0cdb1f6d$var$CodeOffsetPair = new $elh9A$restructure.Struct({ - glyphCode: $elh9A$restructure.uint16, - offset: $elh9A$restructure.uint16 -}); -let $035bb95c0cdb1f6d$var$IndexSubtable = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - header: { - imageFormat: $elh9A$restructure.uint16, - imageDataOffset: $elh9A$restructure.uint32 - }, - 1: { - offsetArray: new $elh9A$restructure.Array($elh9A$restructure.uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 2: { - imageSize: $elh9A$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0) - }, - 3: { - offsetArray: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 4: { - numGlyphs: $elh9A$restructure.uint32, - glyphArray: new $elh9A$restructure.Array($035bb95c0cdb1f6d$var$CodeOffsetPair, (t)=>t.numGlyphs + 1) - }, - 5: { - imageSize: $elh9A$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0), - numGlyphs: $elh9A$restructure.uint32, - glyphCodeArray: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numGlyphs') - } -}); -let $035bb95c0cdb1f6d$var$IndexSubtableArray = new $elh9A$restructure.Struct({ - firstGlyphIndex: $elh9A$restructure.uint16, - lastGlyphIndex: $elh9A$restructure.uint16, - subtable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $035bb95c0cdb1f6d$var$IndexSubtable) -}); -let $035bb95c0cdb1f6d$var$BitmapSizeTable = new $elh9A$restructure.Struct({ - indexSubTableArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($035bb95c0cdb1f6d$var$IndexSubtableArray, 1), { - type: 'parent' - }), - indexTablesSize: $elh9A$restructure.uint32, - numberOfIndexSubTables: $elh9A$restructure.uint32, - colorRef: $elh9A$restructure.uint32, - hori: $035bb95c0cdb1f6d$var$SBitLineMetrics, - vert: $035bb95c0cdb1f6d$var$SBitLineMetrics, - startGlyphIndex: $elh9A$restructure.uint16, - endGlyphIndex: $elh9A$restructure.uint16, - ppemX: $elh9A$restructure.uint8, - ppemY: $elh9A$restructure.uint8, - bitDepth: $elh9A$restructure.uint8, - flags: new $elh9A$restructure.Bitfield($elh9A$restructure.uint8, [ - 'horizontal', - 'vertical' - ]) -}); -var $035bb95c0cdb1f6d$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint32, - numSizes: $elh9A$restructure.uint32, - sizes: new $elh9A$restructure.Array($035bb95c0cdb1f6d$var$BitmapSizeTable, 'numSizes') -}); - - - -let $73d13900b55a3c0c$var$ImageTable = new $elh9A$restructure.Struct({ - ppem: $elh9A$restructure.uint16, - resolution: $elh9A$restructure.uint16, - imageOffsets: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1) -}); -var // This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -$73d13900b55a3c0c$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - flags: new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - 'renderOutlines' - ]), - numImgTables: $elh9A$restructure.uint32, - imageTables: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $73d13900b55a3c0c$var$ImageTable), 'numImgTables') -}); - - - -let $97f6b8be3a347a8f$var$LayerRecord = new $elh9A$restructure.Struct({ - gid: $elh9A$restructure.uint16, - paletteIndex: $elh9A$restructure.uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for -// the special case noted below. Each palette entry is 16 bits. -// A palette index of 0xFFFF is a special case indicating that -// the text foreground color should be used. -let $97f6b8be3a347a8f$var$BaseGlyphRecord = new $elh9A$restructure.Struct({ - gid: $elh9A$restructure.uint16, - // and is not rendered for color. - firstLayerIndex: $elh9A$restructure.uint16, - // There will be numLayers consecutive entries for this base glyph. - numLayers: $elh9A$restructure.uint16 -}); -var $97f6b8be3a347a8f$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numBaseGlyphRecords: $elh9A$restructure.uint16, - baseGlyphRecord: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($97f6b8be3a347a8f$var$BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($97f6b8be3a347a8f$var$LayerRecord, 'numLayerRecords'), { - lazy: true - }), - numLayerRecords: $elh9A$restructure.uint16 -}); - - - -let $16ca60ecbdee30ea$var$ColorRecord = new $elh9A$restructure.Struct({ - blue: $elh9A$restructure.uint8, - green: $elh9A$restructure.uint8, - red: $elh9A$restructure.uint8, - alpha: $elh9A$restructure.uint8 -}); -var $16ca60ecbdee30ea$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - header: { - numPaletteEntries: $elh9A$restructure.uint16, - numPalettes: $elh9A$restructure.uint16, - numColorRecords: $elh9A$restructure.uint16, - colorRecords: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($16ca60ecbdee30ea$var$ColorRecord, 'numColorRecords')), - colorRecordIndices: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numPalettes') - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($elh9A$restructure.uint32, 'numPalettes')), - offsetPaletteLabelArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numPaletteEntries')) - } -}); - - - - - -let $7327e41706f9d5c7$var$BaseCoord = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coordinate: $elh9A$restructure.int16 // X or Y value, in design units - }, - 2: { - coordinate: $elh9A$restructure.int16, - referenceGlyph: $elh9A$restructure.uint16, - baseCoordPoint: $elh9A$restructure.uint16 // Index of contour point on the referenceGlyph - }, - 3: { - coordinate: $elh9A$restructure.int16, - deviceTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) // Device table for X or Y value - } -}); -let $7327e41706f9d5c7$var$BaseValues = new $elh9A$restructure.Struct({ - defaultIndex: $elh9A$restructure.uint16, - baseCoordCount: $elh9A$restructure.uint16, - baseCoords: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), 'baseCoordCount') -}); -let $7327e41706f9d5c7$var$FeatMinMaxRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - minCoord: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }), - maxCoord: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }) // May be NULL -}); -let $7327e41706f9d5c7$var$MinMax = new $elh9A$restructure.Struct({ - minCoord: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - maxCoord: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - featMinMaxCount: $elh9A$restructure.uint16, - featMinMaxRecords: new $elh9A$restructure.Array($7327e41706f9d5c7$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); -let $7327e41706f9d5c7$var$BaseLangSysRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - minMax: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$MinMax, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScript = new $elh9A$restructure.Struct({ - baseValues: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseValues), - defaultMinMax: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$MinMax), - baseLangSysCount: $elh9A$restructure.uint16, - baseLangSysRecords: new $elh9A$restructure.Array($7327e41706f9d5c7$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); -let $7327e41706f9d5c7$var$BaseScriptRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - script: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseScript, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScriptList = new $elh9A$restructure.Array($7327e41706f9d5c7$var$BaseScriptRecord, $elh9A$restructure.uint16); -// Array of 4-byte baseline identification tags-must be in alphabetical order -let $7327e41706f9d5c7$var$BaseTagList = new $elh9A$restructure.Array(new $elh9A$restructure.String(4), $elh9A$restructure.uint16); -let $7327e41706f9d5c7$var$Axis = new $elh9A$restructure.Struct({ - baseTagList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseTagList), - baseScriptList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$BaseScriptList) -}); -var $7327e41706f9d5c7$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint32, { - header: { - horizAxis: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$Axis), - vertAxis: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7327e41706f9d5c7$var$Axis) // May be NULL - }, - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $7e48bbe9e5345664$var$AttachPoint = new $elh9A$restructure.Array($elh9A$restructure.uint16, $elh9A$restructure.uint16); -let $7e48bbe9e5345664$var$AttachList = new $elh9A$restructure.Struct({ - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $elh9A$restructure.uint16, - attachPoints: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$AttachPoint), 'glyphCount') -}); -let $7e48bbe9e5345664$var$CaretValue = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coordinate: $elh9A$restructure.int16 - }, - 2: { - caretValuePoint: $elh9A$restructure.uint16 - }, - 3: { - coordinate: $elh9A$restructure.int16, - deviceTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $7e48bbe9e5345664$var$LigGlyph = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$CaretValue), $elh9A$restructure.uint16); -let $7e48bbe9e5345664$var$LigCaretList = new $elh9A$restructure.Struct({ - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligGlyphCount: $elh9A$restructure.uint16, - ligGlyphs: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$LigGlyph), 'ligGlyphCount') -}); -let $7e48bbe9e5345664$var$MarkGlyphSetsDef = new $elh9A$restructure.Struct({ - markSetTableFormat: $elh9A$restructure.uint16, - markSetCount: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'markSetCount') -}); -var $7e48bbe9e5345664$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint32, { - header: { - glyphClassDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - attachList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$AttachList), - ligCaretList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$LigCaretList), - markAttachClassDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)) - }, - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef), - itemVariationStore: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $b687332511a4da75$var$ValueFormat = new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - 'xPlacement', - 'yPlacement', - 'xAdvance', - 'yAdvance', - 'xPlaDevice', - 'yPlaDevice', - 'xAdvDevice', - 'yAdvDevice' -]); -let $b687332511a4da75$var$types = { - xPlacement: $elh9A$restructure.int16, - yPlacement: $elh9A$restructure.int16, - xAdvance: $elh9A$restructure.int16, - yAdvance: $elh9A$restructure.int16, - xPlaDevice: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yPlaDevice: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - xAdvDevice: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yAdvDevice: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }) -}; -class $b687332511a4da75$var$ValueRecord { - buildStruct(parent) { - let struct = parent; - while(!struct[this.key] && struct.parent)struct = struct.parent; - if (!struct[this.key]) return; - let fields = {}; - fields.rel = ()=>struct._startOffset; - let format = struct[this.key]; - for(let key in format)if (format[key]) fields[key] = $b687332511a4da75$var$types[key]; - return new $elh9A$restructure.Struct(fields); - } - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } - constructor(key = 'valueFormat'){ - this.key = key; - } -} -let $b687332511a4da75$var$PairValueRecord = new $elh9A$restructure.Struct({ - secondGlyph: $elh9A$restructure.uint16, - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$PairSet = new $elh9A$restructure.Array($b687332511a4da75$var$PairValueRecord, $elh9A$restructure.uint16); -let $b687332511a4da75$var$Class2Record = new $elh9A$restructure.Struct({ - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$Anchor = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - xCoordinate: $elh9A$restructure.int16, - yCoordinate: $elh9A$restructure.int16 - }, - 2: { - xCoordinate: $elh9A$restructure.int16, - yCoordinate: $elh9A$restructure.int16, - anchorPoint: $elh9A$restructure.uint16 - }, - 3: { - xCoordinate: $elh9A$restructure.int16, - yCoordinate: $elh9A$restructure.int16, - xDeviceTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)), - yDeviceTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $b687332511a4da75$var$EntryExitRecord = new $elh9A$restructure.Struct({ - entryAnchor: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }), - exitAnchor: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkRecord = new $elh9A$restructure.Struct({ - class: $elh9A$restructure.uint16, - markAnchor: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkArray = new $elh9A$restructure.Array($b687332511a4da75$var$MarkRecord, $elh9A$restructure.uint16); -let $b687332511a4da75$var$BaseRecord = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.classCount); -let $b687332511a4da75$var$BaseArray = new $elh9A$restructure.Array($b687332511a4da75$var$BaseRecord, $elh9A$restructure.uint16); -let $b687332511a4da75$var$ComponentRecord = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.parent.classCount); -let $b687332511a4da75$var$LigatureAttach = new $elh9A$restructure.Array($b687332511a4da75$var$ComponentRecord, $elh9A$restructure.uint16); -let $b687332511a4da75$var$LigatureArray = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$LigatureAttach), $elh9A$restructure.uint16); -let $b687332511a4da75$export$73a8cfb19cd43a0f = new $elh9A$restructure.VersionedStruct('lookupType', { - 1: new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - value: new $b687332511a4da75$var$ValueRecord() - }, - 2: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - valueCount: $elh9A$restructure.uint16, - values: new $elh9A$restructure.LazyArray(new $b687332511a4da75$var$ValueRecord(), 'valueCount') - } - }), - 2: new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - pairSetCount: $elh9A$restructure.uint16, - pairSets: new $elh9A$restructure.LazyArray(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$PairSet), 'pairSetCount') - }, - 2: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - classDef1: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - classDef2: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - class1Count: $elh9A$restructure.uint16, - class2Count: $elh9A$restructure.uint16, - classRecords: new $elh9A$restructure.LazyArray(new $elh9A$restructure.LazyArray($b687332511a4da75$var$Class2Record, 'class2Count'), 'class1Count') - } - }), - 3: { - format: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - entryExitCount: $elh9A$restructure.uint16, - entryExitRecords: new $elh9A$restructure.Array($b687332511a4da75$var$EntryExitRecord, 'entryExitCount') - }, - 4: { - format: $elh9A$restructure.uint16, - markCoverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - baseCoverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $elh9A$restructure.uint16, - markArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$MarkArray), - baseArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 5: { - format: $elh9A$restructure.uint16, - markCoverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligatureCoverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $elh9A$restructure.uint16, - markArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$MarkArray), - ligatureArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$LigatureArray) - }, - 6: { - format: $elh9A$restructure.uint16, - mark1Coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - mark2Coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $elh9A$restructure.uint16, - mark1Array: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$MarkArray), - mark2Array: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 7: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 8: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 9: { - posFormat: $elh9A$restructure.uint16, - lookupType: $elh9A$restructure.uint16, - extension: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, null) - } -}); -// Fix circular reference -$b687332511a4da75$export$73a8cfb19cd43a0f.versions[9].extension.type = $b687332511a4da75$export$73a8cfb19cd43a0f; -var $b687332511a4da75$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint32, { - header: { - scriptList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($b687332511a4da75$export$73a8cfb19cd43a0f)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $99ccad60b96f92fb$var$Sequence = new $elh9A$restructure.Array($elh9A$restructure.uint16, $elh9A$restructure.uint16); -let $99ccad60b96f92fb$var$AlternateSet = $99ccad60b96f92fb$var$Sequence; -let $99ccad60b96f92fb$var$Ligature = new $elh9A$restructure.Struct({ - glyph: $elh9A$restructure.uint16, - compCount: $elh9A$restructure.uint16, - components: new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.compCount - 1) -}); -let $99ccad60b96f92fb$var$LigatureSet = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $99ccad60b96f92fb$var$Ligature), $elh9A$restructure.uint16); -let $99ccad60b96f92fb$var$GSUBLookup = new $elh9A$restructure.VersionedStruct('lookupType', { - 1: new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 1: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - deltaGlyphID: $elh9A$restructure.int16 - }, - 2: { - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $elh9A$restructure.uint16, - substitute: new $elh9A$restructure.LazyArray($elh9A$restructure.uint16, 'glyphCount') - } - }), - 2: { - substFormat: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $elh9A$restructure.uint16, - sequences: new $elh9A$restructure.LazyArray(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $99ccad60b96f92fb$var$Sequence), 'count') - }, - 3: { - substFormat: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $elh9A$restructure.uint16, - alternateSet: new $elh9A$restructure.LazyArray(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $99ccad60b96f92fb$var$AlternateSet), 'count') - }, - 4: { - substFormat: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $elh9A$restructure.uint16, - ligatureSets: new $elh9A$restructure.LazyArray(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $99ccad60b96f92fb$var$LigatureSet), 'count') - }, - 5: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 6: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 7: { - substFormat: $elh9A$restructure.uint16, - lookupType: $elh9A$restructure.uint16, - extension: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, null) - }, - 8: { - substFormat: $elh9A$restructure.uint16, - coverage: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - backtrackCoverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'backtrackGlyphCount'), - lookaheadGlyphCount: $elh9A$restructure.uint16, - lookaheadCoverage: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'lookaheadGlyphCount'), - glyphCount: $elh9A$restructure.uint16, - substitutes: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'glyphCount') - } -}); -// Fix circular reference -$99ccad60b96f92fb$var$GSUBLookup.versions[7].extension.type = $99ccad60b96f92fb$var$GSUBLookup; -var $99ccad60b96f92fb$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint32, { - header: { - scriptList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($99ccad60b96f92fb$var$GSUBLookup)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $573d5042c76c4940$var$JstfGSUBModList = new $elh9A$restructure.Array($elh9A$restructure.uint16, $elh9A$restructure.uint16); -let $573d5042c76c4940$var$JstfPriority = new $elh9A$restructure.Struct({ - shrinkageEnableGSUB: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGSUB: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageEnableGPOS: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGPOS: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageJstfMax: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))), - extensionEnableGSUB: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGSUB: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionEnableGPOS: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGPOS: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionJstfMax: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))) -}); -let $573d5042c76c4940$var$JstfLangSys = new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfPriority), $elh9A$restructure.uint16); -let $573d5042c76c4940$var$JstfLangSysRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - jstfLangSys: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfLangSys) -}); -let $573d5042c76c4940$var$JstfScript = new $elh9A$restructure.Struct({ - extenderGlyphs: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $elh9A$restructure.Array($elh9A$restructure.uint16, $elh9A$restructure.uint16)), - defaultLangSys: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfLangSys), - langSysCount: $elh9A$restructure.uint16, - langSysRecords: new $elh9A$restructure.Array($573d5042c76c4940$var$JstfLangSysRecord, 'langSysCount') -}); -let $573d5042c76c4940$var$JstfScriptRecord = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - script: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $573d5042c76c4940$var$JstfScript, { - type: 'parent' - }) -}); -var $573d5042c76c4940$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint32, - scriptCount: $elh9A$restructure.uint16, - scriptList: new $elh9A$restructure.Array($573d5042c76c4940$var$JstfScriptRecord, 'scriptCount') -}); - - - - -// TODO: add this to restructure -class $a5875b80d6087f61$var$VariableSizeNumber { - decode(stream, parent) { - switch(this.size(0, parent)){ - case 1: - return stream.readUInt8(); - case 2: - return stream.readUInt16BE(); - case 3: - return stream.readUInt24BE(); - case 4: - return stream.readUInt32BE(); - } - } - size(val, parent) { - return (0, $elh9A$restructure.resolveLength)(this._size, null, parent); - } - constructor(size){ - this._size = size; - } -} -let $a5875b80d6087f61$var$MapDataEntry = new $elh9A$restructure.Struct({ - entry: new $a5875b80d6087f61$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1, - innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 -}); -let $a5875b80d6087f61$var$DeltaSetIndexMap = new $elh9A$restructure.Struct({ - entryFormat: $elh9A$restructure.uint16, - mapCount: $elh9A$restructure.uint16, - mapData: new $elh9A$restructure.Array($a5875b80d6087f61$var$MapDataEntry, 'mapCount') -}); -var $a5875b80d6087f61$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - majorVersion: $elh9A$restructure.uint16, - minorVersion: $elh9A$restructure.uint16, - itemVariationStore: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)), - advanceWidthMapping: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - LSBMapping: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - RSBMapping: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap) -}); - - - -let $4423bc1ac09bbbd1$var$Signature = new $elh9A$restructure.Struct({ - format: $elh9A$restructure.uint32, - length: $elh9A$restructure.uint32, - offset: $elh9A$restructure.uint32 -}); -let $4423bc1ac09bbbd1$var$SignatureBlock = new $elh9A$restructure.Struct({ - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16, 2), - cbSignature: $elh9A$restructure.uint32, - signature: new $elh9A$restructure.Buffer('cbSignature') -}); -var $4423bc1ac09bbbd1$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - ulVersion: $elh9A$restructure.uint32, - usNumSigs: $elh9A$restructure.uint16, - usFlag: $elh9A$restructure.uint16, - signatures: new $elh9A$restructure.Array($4423bc1ac09bbbd1$var$Signature, 'usNumSigs'), - signatureBlocks: new $elh9A$restructure.Array($4423bc1ac09bbbd1$var$SignatureBlock, 'usNumSigs') -}); - - - -let $7b50e3f8d83263de$var$GaspRange = new $elh9A$restructure.Struct({ - rangeMaxPPEM: $elh9A$restructure.uint16, - rangeGaspBehavior: new $elh9A$restructure.Bitfield($elh9A$restructure.uint16, [ - 'grayscale', - 'gridfit', - 'symmetricSmoothing', - 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); -var $7b50e3f8d83263de$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numRanges: $elh9A$restructure.uint16, - gaspRanges: new $elh9A$restructure.Array($7b50e3f8d83263de$var$GaspRange, 'numRanges') // Sorted by ppem -}); - - - -let $7bf92ec372cd2307$var$DeviceRecord = new $elh9A$restructure.Struct({ - pixelSize: $elh9A$restructure.uint8, - maximumWidth: $elh9A$restructure.uint8, - widths: new $elh9A$restructure.Array($elh9A$restructure.uint8, (t)=>t.parent.parent.maxp.numGlyphs) -}); -var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -$7bf92ec372cd2307$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numRecords: $elh9A$restructure.int16, - sizeDeviceRecord: $elh9A$restructure.int32, - records: new $elh9A$restructure.Array($7bf92ec372cd2307$var$DeviceRecord, 'numRecords') -}); - - - -let $a3f544bcf76542d1$var$KernPair = new $elh9A$restructure.Struct({ - left: $elh9A$restructure.uint16, - right: $elh9A$restructure.uint16, - value: $elh9A$restructure.int16 -}); -let $a3f544bcf76542d1$var$ClassTable = new $elh9A$restructure.Struct({ - firstGlyph: $elh9A$restructure.uint16, - nGlyphs: $elh9A$restructure.uint16, - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'nGlyphs'), - max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) -}); -let $a3f544bcf76542d1$var$Kern2Array = new $elh9A$restructure.Struct({ - off: (t)=>t._startOffset - t.parent.parent._startOffset, - len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2), - values: new $elh9A$restructure.LazyArray($elh9A$restructure.int16, 'len') -}); -let $a3f544bcf76542d1$var$KernSubtable = new $elh9A$restructure.VersionedStruct('format', { - 0: { - nPairs: $elh9A$restructure.uint16, - searchRange: $elh9A$restructure.uint16, - entrySelector: $elh9A$restructure.uint16, - rangeShift: $elh9A$restructure.uint16, - pairs: new $elh9A$restructure.Array($a3f544bcf76542d1$var$KernPair, 'nPairs') - }, - 2: { - rowWidth: $elh9A$restructure.uint16, - leftTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - rightTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - array: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $a3f544bcf76542d1$var$Kern2Array, { - type: 'parent' - }) - }, - 3: { - glyphCount: $elh9A$restructure.uint16, - kernValueCount: $elh9A$restructure.uint8, - leftClassCount: $elh9A$restructure.uint8, - rightClassCount: $elh9A$restructure.uint8, - flags: $elh9A$restructure.uint8, - kernValue: new $elh9A$restructure.Array($elh9A$restructure.int16, 'kernValueCount'), - leftClass: new $elh9A$restructure.Array($elh9A$restructure.uint8, 'glyphCount'), - rightClass: new $elh9A$restructure.Array($elh9A$restructure.uint8, 'glyphCount'), - kernIndex: new $elh9A$restructure.Array($elh9A$restructure.uint8, (t)=>t.leftClassCount * t.rightClassCount) - } -}); -let $a3f544bcf76542d1$var$KernTable = new $elh9A$restructure.VersionedStruct('version', { - 0: { - subVersion: $elh9A$restructure.uint16, - length: $elh9A$restructure.uint16, - format: $elh9A$restructure.uint8, - coverage: new $elh9A$restructure.Bitfield($elh9A$restructure.uint8, [ - 'horizontal', - 'minimum', - 'crossStream', - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $elh9A$restructure.Reserved($elh9A$restructure.uint8, (t)=>t.length - t._currentOffset) - }, - 1: { - length: $elh9A$restructure.uint32, - coverage: new $elh9A$restructure.Bitfield($elh9A$restructure.uint8, [ - null, - null, - null, - null, - null, - 'variation', - 'crossStream', - 'vertical' // Set if table has vertical kerning values - ]), - format: $elh9A$restructure.uint8, - tupleIndex: $elh9A$restructure.uint16, - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $elh9A$restructure.Reserved($elh9A$restructure.uint8, (t)=>t.length - t._currentOffset) - } -}); -var $a3f544bcf76542d1$export$2e2bcd8739ae039 = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 0: { - nTables: $elh9A$restructure.uint16, - tables: new $elh9A$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - }, - 1: { - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - nTables: $elh9A$restructure.uint32, - tables: new $elh9A$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - } -}); - - - -var // Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -$86687befb45925d0$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numGlyphs: $elh9A$restructure.uint16, - yPels: new $elh9A$restructure.Array($elh9A$restructure.uint8, 'numGlyphs') -}); - - - -var // PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -$91429006e51e0fe8$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - fontNumber: $elh9A$restructure.uint32, - pitch: $elh9A$restructure.uint16, - xHeight: $elh9A$restructure.uint16, - style: $elh9A$restructure.uint16, - typeFamily: $elh9A$restructure.uint16, - capHeight: $elh9A$restructure.uint16, - symbolSet: $elh9A$restructure.uint16, - typeface: new $elh9A$restructure.String(16), - characterComplement: new $elh9A$restructure.String(8), - fileName: new $elh9A$restructure.String(6), - strokeWeight: new $elh9A$restructure.String(1), - widthType: new $elh9A$restructure.String(1), - serifStyle: $elh9A$restructure.uint8, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint8) -}); - - - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. -let $627850fc9deed59a$var$Ratio = new $elh9A$restructure.Struct({ - bCharSet: $elh9A$restructure.uint8, - xRatio: $elh9A$restructure.uint8, - yStartRatio: $elh9A$restructure.uint8, - yEndRatio: $elh9A$restructure.uint8 // Ending y-Ratio value -}); -let $627850fc9deed59a$var$vTable = new $elh9A$restructure.Struct({ - yPelHeight: $elh9A$restructure.uint16, - yMax: $elh9A$restructure.int16, - yMin: $elh9A$restructure.int16 // Minimum value (in pels) for this yPelHeight -}); -let $627850fc9deed59a$var$VdmxGroup = new $elh9A$restructure.Struct({ - recs: $elh9A$restructure.uint16, - startsz: $elh9A$restructure.uint8, - endsz: $elh9A$restructure.uint8, - entries: new $elh9A$restructure.Array($627850fc9deed59a$var$vTable, 'recs') // The VDMX records -}); -var $627850fc9deed59a$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - numRecs: $elh9A$restructure.uint16, - numRatios: $elh9A$restructure.uint16, - ratioRanges: new $elh9A$restructure.Array($627850fc9deed59a$var$Ratio, 'numRatios'), - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numRatios'), - groups: new $elh9A$restructure.Array($627850fc9deed59a$var$VdmxGroup, 'numRecs') // The actual VDMX groupings -}); - - - -var // Vertical Header Table -$65c33f5f068fc77f$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - ascent: $elh9A$restructure.int16, - descent: $elh9A$restructure.int16, - lineGap: $elh9A$restructure.int16, - advanceHeightMax: $elh9A$restructure.int16, - minTopSideBearing: $elh9A$restructure.int16, - minBottomSideBearing: $elh9A$restructure.int16, - yMaxExtent: $elh9A$restructure.int16, - caretSlopeRise: $elh9A$restructure.int16, - caretSlopeRun: $elh9A$restructure.int16, - caretOffset: $elh9A$restructure.int16, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.int16, 4), - metricDataFormat: $elh9A$restructure.int16, - numberOfMetrics: $elh9A$restructure.uint16 // Number of advance heights in the Vertical Metrics table -}); - - - -let $597d739523b65bb3$var$VmtxEntry = new $elh9A$restructure.Struct({ - advance: $elh9A$restructure.uint16, - bearing: $elh9A$restructure.int16 // The top sidebearing of the glyph -}); -var // Vertical Metrics Table -$597d739523b65bb3$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - metrics: new $elh9A$restructure.LazyArray($597d739523b65bb3$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics), - bearings: new $elh9A$restructure.LazyArray($elh9A$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); - - - -let $35aa0c87d9c3d3a0$var$shortFrac = new $elh9A$restructure.Fixed(16, 'BE', 14); -let $35aa0c87d9c3d3a0$var$Correspondence = new $elh9A$restructure.Struct({ - fromCoord: $35aa0c87d9c3d3a0$var$shortFrac, - toCoord: $35aa0c87d9c3d3a0$var$shortFrac -}); -let $35aa0c87d9c3d3a0$var$Segment = new $elh9A$restructure.Struct({ - pairCount: $elh9A$restructure.uint16, - correspondence: new $elh9A$restructure.Array($35aa0c87d9c3d3a0$var$Correspondence, 'pairCount') -}); -var $35aa0c87d9c3d3a0$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - axisCount: $elh9A$restructure.uint32, - segment: new $elh9A$restructure.Array($35aa0c87d9c3d3a0$var$Segment, 'axisCount') -}); - - - - -class $22801616bd931ca3$var$UnboundedArrayAccessor { - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - return this._items[index]; - } - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } - constructor(type, stream, parent){ - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } -} -class $22801616bd931ca3$export$c5af1eebc882e39a extends $elh9A$restructure.Array { - decode(stream, parent) { - return new $22801616bd931ca3$var$UnboundedArrayAccessor(this.type, stream, parent); - } - constructor(type){ - super(type, 0); - } -} -let $22801616bd931ca3$export$8351f8c2ae2f103c = function(ValueType = $elh9A$restructure.uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - constructor(type){ - this.type = type; - } - } - ValueType = new Shadow(ValueType); - let BinarySearchHeader = new $elh9A$restructure.Struct({ - unitSize: $elh9A$restructure.uint16, - nUnits: $elh9A$restructure.uint16, - searchRange: $elh9A$restructure.uint16, - entrySelector: $elh9A$restructure.uint16, - rangeShift: $elh9A$restructure.uint16 - }); - let LookupSegmentSingle = new $elh9A$restructure.Struct({ - lastGlyph: $elh9A$restructure.uint16, - firstGlyph: $elh9A$restructure.uint16, - value: ValueType - }); - let LookupSegmentArray = new $elh9A$restructure.Struct({ - lastGlyph: $elh9A$restructure.uint16, - firstGlyph: $elh9A$restructure.uint16, - values: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $elh9A$restructure.Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1), { - type: 'parent' - }) - }); - let LookupSingle = new $elh9A$restructure.Struct({ - glyph: $elh9A$restructure.uint16, - value: ValueType - }); - return new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint16, { - 0: { - values: new $22801616bd931ca3$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new $elh9A$restructure.Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new $elh9A$restructure.Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new $elh9A$restructure.Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: $elh9A$restructure.uint16, - count: $elh9A$restructure.uint16, - values: new $elh9A$restructure.Array(ValueType, 'count') - } - }); -}; -function $22801616bd931ca3$export$79f7d93d790934ba(entryData = {}, lookupType = $elh9A$restructure.uint16) { - let entry = Object.assign({ - newState: $elh9A$restructure.uint16, - flags: $elh9A$restructure.uint16 - }, entryData); - let Entry = new $elh9A$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $elh9A$restructure.Array($elh9A$restructure.uint16, (t)=>t.nClasses)); - let StateHeader = new $elh9A$restructure.Struct({ - nClasses: $elh9A$restructure.uint32, - classTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $22801616bd931ca3$export$8351f8c2ae2f103c(lookupType)), - stateArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, StateArray), - entryTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader; -} -function $22801616bd931ca3$export$105027425199cc51(entryData = {}, lookupType = $elh9A$restructure.uint16) { - let ClassLookupTable = new $elh9A$restructure.Struct({ - version () { - return 8; - }, - firstGlyph: $elh9A$restructure.uint16, - values: new $elh9A$restructure.Array($elh9A$restructure.uint8, $elh9A$restructure.uint16) - }); - let entry = Object.assign({ - newStateOffset: $elh9A$restructure.uint16, - // convert offset to stateArray index - newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: $elh9A$restructure.uint16 - }, entryData); - let Entry = new $elh9A$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $elh9A$restructure.Array($elh9A$restructure.uint8, (t)=>t.nClasses)); - let StateHeader1 = new $elh9A$restructure.Struct({ - nClasses: $elh9A$restructure.uint16, - classTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, ClassLookupTable), - stateArray: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, StateArray), - entryTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader1; -} - - -let $3a5ca96d3e3aaf20$var$BslnSubtable = new $elh9A$restructure.VersionedStruct('format', { - 0: { - deltas: new $elh9A$restructure.Array($elh9A$restructure.int16, 32) - }, - 1: { - deltas: new $elh9A$restructure.Array($elh9A$restructure.int16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($elh9A$restructure.uint16) - }, - 2: { - standardGlyph: $elh9A$restructure.uint16, - controlPoints: new $elh9A$restructure.Array($elh9A$restructure.uint16, 32) - }, - 3: { - standardGlyph: $elh9A$restructure.uint16, - controlPoints: new $elh9A$restructure.Array($elh9A$restructure.uint16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($elh9A$restructure.uint16) - } -}); -var $3a5ca96d3e3aaf20$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - format: $elh9A$restructure.uint16, - defaultBaseline: $elh9A$restructure.uint16, - subtable: $3a5ca96d3e3aaf20$var$BslnSubtable -}); - - - -let $8d4241d96b2b0589$var$Setting = new $elh9A$restructure.Struct({ - setting: $elh9A$restructure.uint16, - nameIndex: $elh9A$restructure.int16, - name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -let $8d4241d96b2b0589$var$FeatureName = new $elh9A$restructure.Struct({ - feature: $elh9A$restructure.uint16, - nSettings: $elh9A$restructure.uint16, - settingTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array($8d4241d96b2b0589$var$Setting, 'nSettings'), { - type: 'parent' - }), - featureFlags: new $elh9A$restructure.Bitfield($elh9A$restructure.uint8, [ - null, - null, - null, - null, - null, - null, - 'hasDefault', - 'exclusive' - ]), - defaultSetting: $elh9A$restructure.uint8, - nameIndex: $elh9A$restructure.int16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -var $8d4241d96b2b0589$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - featureNameCount: $elh9A$restructure.uint16, - reserved1: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - reserved2: new $elh9A$restructure.Reserved($elh9A$restructure.uint32), - featureNames: new $elh9A$restructure.Array($8d4241d96b2b0589$var$FeatureName, 'featureNameCount') -}); - - - -let $a79cd5132b1cf476$var$Axis = new $elh9A$restructure.Struct({ - axisTag: new $elh9A$restructure.String(4), - minValue: $elh9A$restructure.fixed32, - defaultValue: $elh9A$restructure.fixed32, - maxValue: $elh9A$restructure.fixed32, - flags: $elh9A$restructure.uint16, - nameID: $elh9A$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] -}); -let $a79cd5132b1cf476$var$Instance = new $elh9A$restructure.Struct({ - nameID: $elh9A$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID], - flags: $elh9A$restructure.uint16, - coord: new $elh9A$restructure.Array($elh9A$restructure.fixed32, (t)=>t.parent.axisCount), - postscriptNameID: new $elh9A$restructure.Optional($elh9A$restructure.uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0) -}); -var $a79cd5132b1cf476$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - offsetToData: $elh9A$restructure.uint16, - countSizePairs: $elh9A$restructure.uint16, - axisCount: $elh9A$restructure.uint16, - axisSize: $elh9A$restructure.uint16, - instanceCount: $elh9A$restructure.uint16, - instanceSize: $elh9A$restructure.uint16, - axis: new $elh9A$restructure.Array($a79cd5132b1cf476$var$Axis, 'axisCount'), - instance: new $elh9A$restructure.Array($a79cd5132b1cf476$var$Instance, 'instanceCount') -}); - - - -let $3f36f1a5e6989457$var$shortFrac = new $elh9A$restructure.Fixed(16, 'BE', 14); -class $3f36f1a5e6989457$var$Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; - } -} -let $3f36f1a5e6989457$var$gvar = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - axisCount: $elh9A$restructure.uint16, - globalCoordCount: $elh9A$restructure.uint16, - globalCoords: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new $elh9A$restructure.Array(new $elh9A$restructure.Array($3f36f1a5e6989457$var$shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: $elh9A$restructure.uint16, - flags: $elh9A$restructure.uint16, - offsetToData: $elh9A$restructure.uint32, - offsets: new $elh9A$restructure.Array(new $elh9A$restructure.Pointer($3f36f1a5e6989457$var$Offset, 'void', { - relativeTo: (ctx)=>ctx.offsetToData, - allowNull: false - }), (t)=>t.glyphCount + 1) -}); -var $3f36f1a5e6989457$export$2e2bcd8739ae039 = $3f36f1a5e6989457$var$gvar; - - - - -let $0bd8fe7a6d1d9fb4$var$ClassTable = new $elh9A$restructure.Struct({ - length: $elh9A$restructure.uint16, - coverage: $elh9A$restructure.uint16, - subFeatureFlags: $elh9A$restructure.uint32, - stateTable: new (0, $22801616bd931ca3$export$105027425199cc51) -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaRecord = new $elh9A$restructure.Struct({ - justClass: $elh9A$restructure.uint32, - beforeGrowLimit: $elh9A$restructure.fixed32, - beforeShrinkLimit: $elh9A$restructure.fixed32, - afterGrowLimit: $elh9A$restructure.fixed32, - afterShrinkLimit: $elh9A$restructure.fixed32, - growFlags: $elh9A$restructure.uint16, - shrinkFlags: $elh9A$restructure.uint16 -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster = new $elh9A$restructure.Array($0bd8fe7a6d1d9fb4$var$WidthDeltaRecord, $elh9A$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$ActionData = new $elh9A$restructure.VersionedStruct('actionType', { - 0: { - lowerLimit: $elh9A$restructure.fixed32, - upperLimit: $elh9A$restructure.fixed32, - order: $elh9A$restructure.uint16, - glyphs: new $elh9A$restructure.Array($elh9A$restructure.uint16, $elh9A$restructure.uint16) - }, - 1: { - addGlyph: $elh9A$restructure.uint16 - }, - 2: { - substThreshold: $elh9A$restructure.fixed32, - addGlyph: $elh9A$restructure.uint16, - substGlyph: $elh9A$restructure.uint16 - }, - 3: {}, - 4: { - variationAxis: $elh9A$restructure.uint32, - minimumLimit: $elh9A$restructure.fixed32, - noStretchValue: $elh9A$restructure.fixed32, - maximumLimit: $elh9A$restructure.fixed32 - }, - 5: { - flags: $elh9A$restructure.uint16, - glyph: $elh9A$restructure.uint16 - } -}); -let $0bd8fe7a6d1d9fb4$var$Action = new $elh9A$restructure.Struct({ - actionClass: $elh9A$restructure.uint16, - actionType: $elh9A$restructure.uint16, - actionLength: $elh9A$restructure.uint32, - actionData: $0bd8fe7a6d1d9fb4$var$ActionData, - padding: new $elh9A$restructure.Reserved($elh9A$restructure.uint8, (t)=>t.actionLength - t._currentOffset) -}); -let $0bd8fe7a6d1d9fb4$var$PostcompensationAction = new $elh9A$restructure.Array($0bd8fe7a6d1d9fb4$var$Action, $elh9A$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$PostCompensationTable = new $elh9A$restructure.Struct({ - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostcompensationAction)) -}); -let $0bd8fe7a6d1d9fb4$var$JustificationTable = new $elh9A$restructure.Struct({ - classTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$ClassTable, { - type: 'parent' - }), - wdcOffset: $elh9A$restructure.uint16, - postCompensationTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostCompensationTable, { - type: 'parent' - }), - widthDeltaClusters: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster, { - type: 'parent', - relativeTo: (ctx)=>ctx.wdcOffset - })) -}); -var $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint32, - format: $elh9A$restructure.uint16, - horizontal: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable), - vertical: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable) -}); - - - - -let $ef40c6dc80fd50a2$var$LigatureData = { - action: $elh9A$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$ContextualData = { - markIndex: $elh9A$restructure.uint16, - currentIndex: $elh9A$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$InsertionData = { - currentInsertIndex: $elh9A$restructure.uint16, - markedInsertIndex: $elh9A$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$SubstitutionTable = new $elh9A$restructure.Struct({ - items: new (0, $22801616bd931ca3$export$c5af1eebc882e39a)(new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new (0, $22801616bd931ca3$export$8351f8c2ae2f103c))) -}); -let $ef40c6dc80fd50a2$var$SubtableData = new $elh9A$restructure.VersionedStruct('type', { - 0: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba) - }, - 1: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$ContextualData), - substitutionTable: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $ef40c6dc80fd50a2$var$SubstitutionTable) - }, - 2: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$LigatureData), - ligatureActions: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($elh9A$restructure.uint32)), - components: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($elh9A$restructure.uint16)), - ligatureList: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($elh9A$restructure.uint16)) - }, - 4: { - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c) - }, - 5: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$InsertionData), - insertionActions: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($elh9A$restructure.uint16)) - } -}); -let $ef40c6dc80fd50a2$var$Subtable = new $elh9A$restructure.Struct({ - length: $elh9A$restructure.uint32, - coverage: $elh9A$restructure.uint24, - type: $elh9A$restructure.uint8, - subFeatureFlags: $elh9A$restructure.uint32, - table: $ef40c6dc80fd50a2$var$SubtableData, - padding: new $elh9A$restructure.Reserved($elh9A$restructure.uint8, (t)=>t.length - t._currentOffset) -}); -let $ef40c6dc80fd50a2$var$FeatureEntry = new $elh9A$restructure.Struct({ - featureType: $elh9A$restructure.uint16, - featureSetting: $elh9A$restructure.uint16, - enableFlags: $elh9A$restructure.uint32, - disableFlags: $elh9A$restructure.uint32 -}); -let $ef40c6dc80fd50a2$var$MorxChain = new $elh9A$restructure.Struct({ - defaultFlags: $elh9A$restructure.uint32, - chainLength: $elh9A$restructure.uint32, - nFeatureEntries: $elh9A$restructure.uint32, - nSubtables: $elh9A$restructure.uint32, - features: new $elh9A$restructure.Array($ef40c6dc80fd50a2$var$FeatureEntry, 'nFeatureEntries'), - subtables: new $elh9A$restructure.Array($ef40c6dc80fd50a2$var$Subtable, 'nSubtables') -}); -var $ef40c6dc80fd50a2$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint16, - unused: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - nChains: $elh9A$restructure.uint32, - chains: new $elh9A$restructure.Array($ef40c6dc80fd50a2$var$MorxChain, 'nChains') -}); - - - - -let $ab24dea08b58a7cc$var$OpticalBounds = new $elh9A$restructure.Struct({ - left: $elh9A$restructure.int16, - top: $elh9A$restructure.int16, - right: $elh9A$restructure.int16, - bottom: $elh9A$restructure.int16 -}); -var $ab24dea08b58a7cc$export$2e2bcd8739ae039 = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.fixed32, - format: $elh9A$restructure.uint16, - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($ab24dea08b58a7cc$var$OpticalBounds) -}); - - -let $5825c04ce8f7102d$var$tables = {}; -var $5825c04ce8f7102d$export$2e2bcd8739ae039 = $5825c04ce8f7102d$var$tables; -$5825c04ce8f7102d$var$tables.cmap = (0, $e4ae0436c91af89f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.head = (0, $55a60976afb7c261$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hhea = (0, $dde72b7b5b650596$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hmtx = (0, $a7c40184072c9a5b$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.maxp = (0, $521197722369f691$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.name = (0, $51a9f4feb3a3b2b1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['OS/2'] = (0, $114ea85db469b435$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.post = (0, $f93b30299e1ea0f5$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fpgm = (0, $873d79fea57d3161$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.loca = (0, $83c4155666d50c37$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.prep = (0, $b12598db7cdf7042$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['cvt '] = (0, $8fb09b0f473d61a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.glyf = (0, $7707bdf21a3d89cc$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF '] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF2'] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VORG = (0, $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.EBLC = (0, $035bb95c0cdb1f6d$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CBLC = $5825c04ce8f7102d$var$tables.EBLC; -$5825c04ce8f7102d$var$tables.sbix = (0, $73d13900b55a3c0c$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.COLR = (0, $97f6b8be3a347a8f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CPAL = (0, $16ca60ecbdee30ea$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.BASE = (0, $7327e41706f9d5c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GDEF = (0, $7e48bbe9e5345664$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GPOS = (0, $b687332511a4da75$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GSUB = (0, $99ccad60b96f92fb$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.JSTF = (0, $573d5042c76c4940$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.HVAR = (0, $a5875b80d6087f61$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.DSIG = (0, $4423bc1ac09bbbd1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gasp = (0, $7b50e3f8d83263de$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hdmx = (0, $7bf92ec372cd2307$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.kern = (0, $a3f544bcf76542d1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.LTSH = (0, $86687befb45925d0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.PCLT = (0, $91429006e51e0fe8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VDMX = (0, $627850fc9deed59a$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vhea = (0, $65c33f5f068fc77f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vmtx = (0, $597d739523b65bb3$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.avar = (0, $35aa0c87d9c3d3a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.bsln = (0, $3a5ca96d3e3aaf20$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.feat = (0, $8d4241d96b2b0589$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fvar = (0, $a79cd5132b1cf476$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gvar = (0, $3f36f1a5e6989457$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.just = (0, $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.morx = (0, $ef40c6dc80fd50a2$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.opbd = (0, $ab24dea08b58a7cc$export$2e2bcd8739ae039); - - -let $df50e1efe10a1247$var$TableEntry = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - checkSum: $elh9A$restructure.uint32, - offset: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, 'void', { - type: 'global' - }), - length: $elh9A$restructure.uint32 -}); -let $df50e1efe10a1247$var$Directory = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - numTables: $elh9A$restructure.uint16, - searchRange: $elh9A$restructure.uint16, - entrySelector: $elh9A$restructure.uint16, - rangeShift: $elh9A$restructure.uint16, - tables: new $elh9A$restructure.Array($df50e1efe10a1247$var$TableEntry, 'numTables') -}); -$df50e1efe10a1247$var$Directory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -$df50e1efe10a1247$var$Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for(let tag in this.tables){ - let table = this.tables[tag]; - if (table) tables.push({ - tag: tag, - checkSum: 0, - offset: new $elh9A$restructure.VoidPointer((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag], table), - length: (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag].size(table) - }); - } - this.tables = tables; - } - this.tag = 'true'; - this.numTables = this.tables.length; - let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; -var $df50e1efe10a1247$export$2e2bcd8739ae039 = $df50e1efe10a1247$var$Directory; - - - - -function $66a5b9fb5318558a$export$2e0ae67339d5f1ac(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while(min <= max){ - let mid = min + max >> 1; - let res = cmp(arr[mid]); - if (res < 0) max = mid - 1; - else if (res > 0) min = mid + 1; - else return mid; - } - return -1; -} -function $66a5b9fb5318558a$export$d02631cccf789723(index, end) { - let range = []; - while(index < end)range.push(index++); - return range; -} -const $66a5b9fb5318558a$export$3d28c1996ced1f14 = new TextDecoder('ascii'); -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const $66a5b9fb5318558a$var$CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const $66a5b9fb5318558a$var$LOOKUP = new Uint8Array(256); -for(let i = 0; i < $66a5b9fb5318558a$var$CHARS.length; i++)$66a5b9fb5318558a$var$LOOKUP[$66a5b9fb5318558a$var$CHARS.charCodeAt(i)] = i; -function $66a5b9fb5318558a$export$94fdf11bafc8de6b(base64) { - let bufferLength = base64.length * 0.75; - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') bufferLength--; - } - let bytes = new Uint8Array(bufferLength); - let p = 0; - for(let i = 0, len = base64.length; i < len; i += 4){ - let encoded1 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i)]; - let encoded2 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 3)]; - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - return bytes; -} - - - - -class $0d6e160064c86e50$export$2e2bcd8739ae039 { - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ - if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; - } - return null; - } - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) codepoint = this.encoding.get(codepoint) || codepoint; - else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) return gid; - } - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return cmap.codeMap.get(codepoint) || 0; - case 4: - { - let min = 0; - let max = cmap.segCount - 1; - while(min <= max){ - let mid = min + max >> 1; - if (codepoint < cmap.startCode.get(mid)) max = mid - 1; - else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; - else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); - else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) gid += cmap.idDelta.get(mid); - } - return gid & 0xffff; - } - } - return 0; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - case 12: - case 13: - { - let min = 0; - let max = cmap.nGroups - 1; - while(min <= max){ - let mid = min + max >> 1; - let group = cmap.groups.get(mid); - if (codepoint < group.startCharCode) max = mid - 1; - else if (codepoint > group.endCharCode) min = mid + 1; - else { - if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); - else return group.glyphID; - } - } - return 0; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) return 0; - let selectors = this.uvs.varSelectors.toArray(); - let i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(selectors, (x)=>variationSelector - x.varSelector); - let sel = selectors[i]; - if (i !== -1 && sel.defaultUVS) i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0); - if (i !== -1 && sel.nonDefaultUVS) { - i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue); - if (i !== -1) return sel.nonDefaultUVS[i].glyphID; - } - return 0; - } - getCharacterSet() { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(0, cmap.codeMap.length); - case 4: - { - let res = []; - let endCodes = cmap.endCode.toArray(); - for(let i = 0; i < endCodes.length; i++){ - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(start, tail)); - } - return res; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - case 12: - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - { - let res = []; - for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); - return res; - } - case 4: - { - let res = []; - for(let i = 0; i < cmap.segCount; i++){ - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - for(var c = start; c <= end; c++){ - let g = 0; - if (rangeOffset === 0) g = c + delta; - else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) g += delta; - } - if (g === gid) res.push(c); - } - } - return res; - } - case 12: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); - return res; - } - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - constructor(cmapTable){ - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [ - 3, - 10 - ], - [ - 0, - 6 - ], - [ - 0, - 4 - ], - // 16-bit subtables - [ - 3, - 1 - ], - [ - 0, - 3 - ], - [ - 0, - 2 - ], - [ - 0, - 1 - ], - [ - 0, - 0 - ] - ]); - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) for (let cmap of cmapTable.tables){ - let encoding = (0, $e2613b812f052cbe$export$badc544e0651b6b1)(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = (0, $e2613b812f052cbe$export$1dceb3c14ed68bee)(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - if (!this.cmap) throw new Error("Could not find a supported cmap table"); - this.uvs = this.findSubtable(cmapTable, [ - [ - 0, - 5 - ] - ]); - if (this.uvs && this.uvs.version !== 14) this.uvs = null; - } -} -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "getCharacterSet", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "codePointsForGlyph", null); - - - -class $4646d52c2a559cdb$export$2e2bcd8739ae039 { - process(glyphs, positions) { - for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - getKerning(left, right) { - let res = 0; - for (let table of this.kern.tables){ - if (table.coverage.crossStream) continue; - switch(table.version){ - case 0: - if (!table.coverage.horizontal) continue; - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) continue; - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - let val = 0; - let s = table.subtable; - switch(table.format){ - case 0: - let pairIdx = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(s.pairs, function(pair) { - return left - pair.left || right - pair.right; - }); - if (pairIdx >= 0) val = s.pairs[pairIdx].value; - break; - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - else leftOffset = s.array.off; - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) return 0; - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) res = val; - else res += val; - } - return res; - } - constructor(font){ - this.kern = font.kern; - } -} - - - -class $a57a26817cd35108$export$2e2bcd8739ae039 { - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for(let index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.isMark) clusterEnd = index; - else { - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - clusterStart = clusterEnd = index; - } - } - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - return positions; - } - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) // LTR. TODO: RTL support. - baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - // position each of the mark glyphs relative to the base glyph - for(let index = clusterStart + 1; index <= clusterEnd; index++){ - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - // x positioning - switch(combiningClass){ - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - default: - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - // y positioning - switch(combiningClass){ - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - return; - } - getCombiningClass(codePoint) { - let combiningClass = (0, $elh9A$unicodeproperties.getCombiningClass)(codePoint); - // Thai / Lao need some per-character work - if ((codePoint & -256) === 0x0e00) { - if (combiningClass === 'Not_Reordered') switch(codePoint){ - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - case 0x0ebc: - return 'Below'; - } - else if (codePoint === 0x0e3a) return 'Below_Right'; - } - switch(combiningClass){ - // Hebrew - case 'CCC10': - case 'CCC11': - case 'CCC12': - case 'CCC13': - case 'CCC14': - case 'CCC15': - case 'CCC16': - case 'CCC17': - case 'CCC18': - case 'CCC20': - case 'CCC22': - return 'Below'; - case 'CCC23': - return 'Attached_Above'; - case 'CCC24': - return 'Above_Right'; - case 'CCC25': - case 'CCC19': - return 'Above_Left'; - case 'CCC26': - return 'Above'; - case 'CCC21': - break; - // Arabic and Syriac - case 'CCC27': - case 'CCC28': - case 'CCC30': - case 'CCC31': - case 'CCC33': - case 'CCC34': - case 'CCC35': - case 'CCC36': - return 'Above'; - case 'CCC29': - case 'CCC32': - return 'Below'; - // Thai - case 'CCC103': - return 'Below_Right'; - case 'CCC107': - return 'Above_Right'; - // Lao - case 'CCC118': - return 'Below'; - case 'CCC122': - return 'Above'; - // Tibetan - case 'CCC129': - case 'CCC132': - return 'Below'; - case 'CCC130': - return 'Above'; - } - return combiningClass; - } - constructor(font){ - this.font = font; - } -} - - -/** - * Represents a glyph bounding box - */ class $0e2da1c4ce69e8ad$export$2e2bcd8739ae039 { - /** - * The width of the bounding box - * @type {number} - */ get width() { - return this.maxX - this.minX; - } - /** - * The height of the bounding box - * @type {number} - */ get height() { - return this.maxY - this.minY; - } - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) this.minX = x; - if (x > this.maxX) this.maxX = x; - } - if (Math.abs(y) !== Infinity) { - if (y < this.minY) this.minY = y; - if (y > this.maxY) this.maxY = y; - } - } - copy() { - return new $0e2da1c4ce69e8ad$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); - } - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ - /** - * The minimum X position in the bounding box - * @type {number} - */ this.minX = minX; - /** - * The minimum Y position in the bounding box - * @type {number} - */ this.minY = minY; - /** - * The maxmimum X position in the bounding box - * @type {number} - */ this.maxX = maxX; - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ this.maxY = maxY; - } -} - - - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const $e38a1a895f6aeb54$var$UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: [ - 'bng2', - 'beng' - ], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: [ - 'dev2', - 'deva' - ], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: [ - 'gjr2', - 'gujr' - ], - Gurmukhi: [ - 'gur2', - 'guru' - ], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: [ - 'knd2', - 'knda' - ], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: [ - 'mlm2', - 'mlym' - ], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: [ - 'mym2', - 'mymr' - ], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: [ - 'ory2', - 'orya' - ], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: [ - 'tml2', - 'taml' - ], - Tai_Viet: 'tavt', - Telugu: [ - 'tel2', - 'telu' - ], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; -const $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS = {}; -for(let script in $e38a1a895f6aeb54$var$UNICODE_SCRIPTS){ - let tag = $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) for (let t of tag)$e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[t] = script; - else $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag] = script; -} -function $e38a1a895f6aeb54$export$b32f0b5f69d65e51(script) { - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; -} -function $e38a1a895f6aeb54$export$ce50e82f12a827a4(tag) { - return $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag]; -} -function $e38a1a895f6aeb54$export$e5cb25e204fb8450(string) { - let len = string.length; - let idx = 0; - while(idx < len){ - let code = string.charCodeAt(idx++); - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - let script = (0, $elh9A$unicodeproperties.getScript)(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -function $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints) { - for(let i = 0; i < codePoints.length; i++){ - let codePoint = codePoints[i]; - let script = (0, $elh9A$unicodeproperties.getScript)(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -// The scripts in this map are written from right to left -const $e38a1a895f6aeb54$var$RTL = { - arab: true, - hebr: true, - syrc: true, - thaa: true, - cprt: true, - khar: true, - phnx: true, - 'nko ': true, - lydi: true, - avst: true, - armi: true, - phli: true, - prti: true, - sarb: true, - orkh: true, - samr: true, - mand: true, - merc: true, - mero: true, - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, - mend: true, - nbat: true, - narb: true, - palm: true, - phlp: true // Psalter Pahlavi -}; -function $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script) { - if ($e38a1a895f6aeb54$var$RTL[script]) return 'rtl'; - return 'ltr'; -} - - -class $b19c79ec7a94fa39$export$2e2bcd8739ae039 { - /** - * The total advance width of the run. - * @type {number} - */ get advanceWidth() { - let width = 0; - for (let position of this.positions)width += position.xAdvance; - return width; - } - /** - * The total advance height of the run. - * @type {number} - */ get advanceHeight() { - let height = 0; - for (let position of this.positions)height += position.yAdvance; - return height; - } - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ get bbox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let x = 0; - let y = 0; - for(let index = 0; index < this.glyphs.length; index++){ - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - x += p.xAdvance; - y += p.yAdvance; - } - return bbox; - } - constructor(glyphs, features, script, language, direction){ - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ this.glyphs = glyphs; - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ this.positions = null; - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ this.script = script; - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ this.language = language || null; - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ this.features = {}; - // Convert features to an object - if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; - else if (typeof features === 'object') this.features = features; - } -} - - -/** - * Represents positioning information for a glyph in a GlyphRun. - */ class $9195cf1266c12ea5$export$2e2bcd8739ae039 { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ this.xAdvance = xAdvance; - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ this.yAdvance = yAdvance; - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ this.xOffset = xOffset; - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ this.yOffset = yOffset; - } -} - - - -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const $2b7f887ebcb5888a$var$features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; -const $2b7f887ebcb5888a$var$feature = (name, selector)=>[ - $2b7f887ebcb5888a$var$features[name].code, - $2b7f887ebcb5888a$var$features[name][selector] - ]; -const $2b7f887ebcb5888a$var$OTMapping = { - rlig: $2b7f887ebcb5888a$var$feature('ligatures', 'requiredLigatures'), - clig: $2b7f887ebcb5888a$var$feature('ligatures', 'contextualLigatures'), - dlig: $2b7f887ebcb5888a$var$feature('ligatures', 'rareLigatures'), - hlig: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - liga: $2b7f887ebcb5888a$var$feature('ligatures', 'commonLigatures'), - hist: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - smcp: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCasePetiteCaps'), - frac: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - dnom: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - numr: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - afrc: $2b7f887ebcb5888a$var$feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - case: $2b7f887ebcb5888a$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), - ccmp: $2b7f887ebcb5888a$var$feature('unicodeDecomposition', 'canonicalComposition'), - cpct: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - valt: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'swashAlternates'), - cswh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualSwashAlternates'), - curs: $2b7f887ebcb5888a$var$feature('cursiveConnection', 'cursive'), - c2pc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCasePetiteCaps'), - c2sc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCaseSmallCaps'), - init: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordInitialSwashes'), - fin2: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - medi: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - med2: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - fin3: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - fina: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - pkna: $2b7f887ebcb5888a$var$feature('kanaSpacing', 'proportionalKana'), - half: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - halt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altHalfWidthText'), - hkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateHorizKana'), - vkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - ital: $2b7f887ebcb5888a$var$feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: $2b7f887ebcb5888a$var$feature('numberCase', 'upperCaseNumbers'), - onum: $2b7f887ebcb5888a$var$feature('numberCase', 'lowerCaseNumbers'), - mgrk: $2b7f887ebcb5888a$var$feature('mathematicalExtras', 'mathematicalGreek'), - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - calt: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualAlternates'), - vrt2: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - vert: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'monospacedNumbers'), - pnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'proportionalNumbers'), - sups: $2b7f887ebcb5888a$var$feature('verticalPosition', 'superiors'), - subs: $2b7f887ebcb5888a$var$feature('verticalPosition', 'inferiors'), - ordn: $2b7f887ebcb5888a$var$feature('verticalPosition', 'ordinals'), - pwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - hwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - qwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'quarterWidthText'), - twid: $2b7f887ebcb5888a$var$feature('textSpacing', 'thirdWidthText'), - fwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - palt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altProportionalText'), - trad: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalCharacters'), - smpl: $2b7f887ebcb5888a$var$feature('characterShape', 'simplifiedCharacters'), - jp78: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1978Characters'), - jp83: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1983Characters'), - jp90: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1990Characters'), - jp04: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS2004Characters'), - expt: $2b7f887ebcb5888a$var$feature('characterShape', 'expertCharacters'), - hojo: $2b7f887ebcb5888a$var$feature('characterShape', 'hojoCharacters'), - nlck: $2b7f887ebcb5888a$var$feature('characterShape', 'NLCCharacters'), - tnam: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalNamesCharacters'), - ruby: $2b7f887ebcb5888a$var$feature('rubyKana', 'rubyKana'), - titl: $2b7f887ebcb5888a$var$feature('styleOptions', 'titlingCaps'), - zero: $2b7f887ebcb5888a$var$feature('typographicExtras', 'slashedZero'), - ss01: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwenty') -}; -// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose -// Add cv01-cv99 features -for(let i = 1; i <= 99; i++)$2b7f887ebcb5888a$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ - $2b7f887ebcb5888a$var$features.characterAlternatives.code, - i -]; -// create inverse mapping -let $2b7f887ebcb5888a$var$AATMapping = {}; -for(let ot in $2b7f887ebcb5888a$var$OTMapping){ - let aat = $2b7f887ebcb5888a$var$OTMapping[ot]; - if ($2b7f887ebcb5888a$var$AATMapping[aat[0]] == null) $2b7f887ebcb5888a$var$AATMapping[aat[0]] = {}; - $2b7f887ebcb5888a$var$AATMapping[aat[0]][aat[1]] = ot; -} -function $2b7f887ebcb5888a$export$b813f7d2a1677c16(features) { - let res = {}; - for(let k in features){ - let r; - if (r = $2b7f887ebcb5888a$var$OTMapping[k]) { - if (res[r[0]] == null) res[r[0]] = {}; - res[r[0]][r[1]] = features[k]; - } - } - return res; -} -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function $2b7f887ebcb5888a$var$mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) var typeCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type].code; - else var typeCode = type; - if (isNaN(setting)) var settingCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type][setting]; - else var settingCode = setting; - return [ - typeCode, - settingCode - ]; -} -function $2b7f887ebcb5888a$export$bd6df347a4f391c4(features) { - let res = {}; - if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings(features[k]); - if (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]]) res[r] = true; - } - else if (typeof features === 'object') for(let type in features){ - let feature = features[type]; - for(let setting in feature){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings([ - type, - setting - ]); - if (feature[setting] && (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]])) res[r] = true; - } - } - return Object.keys(res); -} - - - - - - - -class $f3d63ae925545400$export$2e2bcd8739ae039 { - lookup(glyph) { - switch(this.table.version){ - case 0: - return this.table.values.getItem(glyph); - case 2: - case 4: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.firstGlyph === 0xffff) return null; - if (glyph < seg.firstGlyph) max = mid - 1; - else if (glyph > seg.lastGlyph) min = mid + 1; - else { - if (this.table.version === 2) return seg.value; - else return seg.values[glyph - seg.firstGlyph]; - } - } - return null; - } - case 6: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.glyph === 0xffff) return null; - if (glyph < seg.glyph) max = mid - 1; - else if (glyph > seg.glyph) min = mid + 1; - else return seg.value; - } - return null; - } - case 8: - return this.table.values[glyph - this.table.firstGlyph]; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - glyphsForValue(classValue) { - let res = []; - switch(this.table.version){ - case 2: - case 4: - for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(segment.firstGlyph, segment.lastGlyph + 1)); - else { - for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); - } - break; - case 6: - for (let segment of this.table.segments)if (segment.value === classValue) res.push(segment.glyph); - break; - case 8: - for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); - break; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - return res; - } - constructor(table){ - this.table = table; - } -} -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $f3d63ae925545400$export$2e2bcd8739ae039.prototype, "glyphsForValue", null); - - -const $860c6347bb941b91$var$START_OF_TEXT_STATE = 0; -const $860c6347bb941b91$var$START_OF_LINE_STATE = 1; -const $860c6347bb941b91$var$END_OF_TEXT_CLASS = 0; -const $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS = 1; -const $860c6347bb941b91$var$DELETED_GLYPH_CLASS = 2; -const $860c6347bb941b91$var$END_OF_LINE_CLASS = 3; -const $860c6347bb941b91$var$DONT_ADVANCE = 0x4000; -class $860c6347bb941b91$export$2e2bcd8739ae039 { - process(glyphs, reverse, processEntry) { - let currentState = $860c6347bb941b91$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ - let glyph = null; - let classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - if (index === glyphs.length || index === -1) classCode = $860c6347bb941b91$var$END_OF_TEXT_CLASS; - else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) classCode = $860c6347bb941b91$var$DELETED_GLYPH_CLASS; - else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - } - } - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - if (classCode !== $860c6347bb941b91$var$END_OF_TEXT_CLASS && classCode !== $860c6347bb941b91$var$DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & $860c6347bb941b91$var$DONT_ADVANCE); - } - currentState = entry.newState; - if (shouldAdvance) index += dir; - } - return glyphs; - } - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) return; - visited.add(state); - let { nClasses: nClasses, stateArray: stateArray, entryTable: entryTable } = this.stateTable; - let row = stateArray.getItem(state); - // Skip predefined classes - for(let classCode = 4; classCode < nClasses; classCode++){ - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)){ - if (opts.enter) opts.enter(glyph, entry); - if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); - if (opts.exit) opts.exit(glyph, entry); - } - } - } - constructor(stateTable){ - this.stateTable = stateTable; - this.lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(stateTable.classTable); - } -} - - - - -// indic replacement flags -const $99be642f82069918$var$MARK_FIRST = 0x8000; -const $99be642f82069918$var$MARK_LAST = 0x2000; -const $99be642f82069918$var$VERB = 0x000F; -// contextual substitution and glyph insertion flag -const $99be642f82069918$var$SET_MARK = 0x8000; -// ligature entry flags -const $99be642f82069918$var$SET_COMPONENT = 0x8000; -const $99be642f82069918$var$PERFORM_ACTION = 0x2000; -// ligature action masks -const $99be642f82069918$var$LAST_MASK = 0x80000000; -const $99be642f82069918$var$STORE_MASK = 0x40000000; -const $99be642f82069918$var$OFFSET_MASK = 0x3FFFFFFF; -const $99be642f82069918$var$VERTICAL_ONLY = 0x800000; -const $99be642f82069918$var$REVERSE_DIRECTION = 0x400000; -const $99be642f82069918$var$HORIZONTAL_AND_VERTICAL = 0x200000; -// glyph insertion flags -const $99be642f82069918$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; -const $99be642f82069918$var$MARKED_IS_KASHIDA_LIKE = 0x1000; -const $99be642f82069918$var$CURRENT_INSERT_BEFORE = 0x0800; -const $99be642f82069918$var$MARKED_INSERT_BEFORE = 0x0400; -const $99be642f82069918$var$CURRENT_INSERT_COUNT = 0x03E0; -const $99be642f82069918$var$MARKED_INSERT_COUNT = 0x001F; -class $99be642f82069918$export$2e2bcd8739ae039 { - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - // enable/disable the requested features - for (let feature of chain.features){ - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); - } - // remove deleted glyphs - let index = glyphs.length - 1; - while(index >= 0){ - if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); - index--; - } - return glyphs; - } - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let reverse = !!(this.subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - getStateMachine(subtable) { - return new (0, $860c6347bb941b91$export$2e2bcd8739ae039)(subtable.table.stateTable); - } - getProcessor() { - switch(this.subtable.type){ - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - processIndicRearragement(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$MARK_FIRST) this.firstGlyph = index; - if (entry.flags & $99be642f82069918$var$MARK_LAST) this.lastGlyph = index; - $99be642f82069918$var$reorderGlyphs(this.glyphs, entry.flags & $99be642f82069918$var$VERB, this.firstGlyph, this.lastGlyph); - } - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedGlyph = index; - } - processLigature(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_COMPONENT) this.ligatureStack.push(index); - if (entry.flags & $99be642f82069918$var$PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - while(!last){ - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - let action = actions.getItem(actionIndex++); - last = !!(action & $99be642f82069918$var$LAST_MASK); - let store = !!(action & $99be642f82069918$var$STORE_MASK); - let offset = (action & $99be642f82069918$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - let component = components.getItem(offset); - ligatureIndex += component; - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(subtable.table.lookupTable); - for(index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while(count--){ - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - if (!isBefore) glyphIndex++; - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedIndex = index; - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ - feature.featureType, - feature.featureSetting - ]); - return features; - } - generateInputs(gid) { - if (!this.inputCache) this.generateInputCache(); - return this.inputCache[gid] || []; - } - generateInputCache() { - this.inputCache = {}; - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); - } - } - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) return; - let reverse = !!(subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - if (reverse) throw new Error('Reverse subtable, not supported.'); - this.subtable = subtable; - this.ligatureStack = []; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let input = []; - let stack = []; - this.glyphs = []; - stateMachine.traverse({ - enter: (glyph, entry)=>{ - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - if (count === 1) { - let result = input.map((g)=>g.id); - let cache = this.inputCache[found]; - if (cache) cache.push(result); - else this.inputCache[found] = [ - result - ]; - } - }, - exit: ()=>{ - ({ glyphs: this.glyphs, ligatureStack: this.ligatureStack } = stack.pop()); - input.pop(); - } - }); - } - constructor(font){ - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } -} -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $99be642f82069918$export$2e2bcd8739ae039.prototype, "getStateMachine", null); -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function $99be642f82069918$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) end.reverse(); - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) start.reverse(); - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} -function $99be642f82069918$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch(verb){ - case 0: - return glyphs; - case 1: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 0 - ]); - case 2: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 1 - ]); - case 3: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 1 - ]); - case 4: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ]); - case 5: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ], true, false); - case 6: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ]); - case 7: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ], false, true); - case 8: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ]); - case 9: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ], false, true); - case 10: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ]); - case 11: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ], true, false); - case 12: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ]); - case 13: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, false); - case 14: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], false, true); - case 15: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, true); - default: - throw new Error(`Unknown verb: ${verb}`); - } -} - - -class $860fcbd64bc12fbc$export$2e2bcd8739ae039 { - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); - this.morxProcessor.process(glyphRun.glyphs, $2b7f887ebcb5888a$export$b813f7d2a1677c16(glyphRun.features)); - } - getAvailableFeatures(script, language) { - return $2b7f887ebcb5888a$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); - } - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); - return result; - } - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - for (let codePoint of codePoints){ - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); - else strings.add(s); - } - } - constructor(font){ - this.font = font; - this.morxProcessor = new (0, $99be642f82069918$export$2e2bcd8739ae039)(font); - this.fallbackPosition = false; - } -} - - - -class $d7e93cca3cf8ce8a$export$2e2bcd8739ae039 { - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features)if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - if (global) this.globalFeatures[feature] = true; - } - } - /** - * Add features to the last stage - */ add(arg, global = true) { - if (this.stages.length === 0) this.stages.push([]); - if (typeof arg === 'string') arg = [ - arg - ]; - if (Array.isArray(arg)) this._addFeatures(arg, global); - else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else throw new Error("Unsupported argument to ShapingPlan#add"); - } - /** - * Add a new stage - */ addStage(arg, global) { - if (typeof arg === 'function') this.stages.push(arg, []); - else { - this.stages.push([]); - this.add(arg, global); - } - } - setFeatureOverrides(features) { - if (Array.isArray(features)) this.add(features); - else if (typeof features === 'object') for(let tag in features){ - if (features[tag]) this.add(tag); - else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - /** - * Assigns the global features to the given glyphs - */ assignGlobalFeatures(glyphs) { - for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; - } - /** - * Executes the planned stages using the given OTProcessor - */ process(processor, glyphs, positions) { - for (let stage of this.stages){ - if (typeof stage === 'function') { - if (!positions) stage(this.font, glyphs, this); - } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); - } - } - constructor(font, script, direction){ - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } -} - - - - -const $d28fb665ee343afc$var$VARIATION_FEATURES = [ - 'rvrn' -]; -const $d28fb665ee343afc$var$COMMON_FEATURES = [ - 'ccmp', - 'locl', - 'rlig', - 'mark', - 'mkmk' -]; -const $d28fb665ee343afc$var$FRACTIONAL_FEATURES = [ - 'frac', - 'numr', - 'dnom' -]; -const $d28fb665ee343afc$var$HORIZONTAL_FEATURES = [ - 'calt', - 'clig', - 'liga', - 'rclt', - 'curs', - 'kern' -]; -const $d28fb665ee343afc$var$VERTICAL_FEATURES = [ - 'vert' -]; -const $d28fb665ee343afc$var$DIRECTIONAL_FEATURES = { - ltr: [ - 'ltra', - 'ltrm' - ], - rtl: [ - 'rtla', - 'rtlm' - ] -}; -class $d28fb665ee343afc$export$2e2bcd8739ae039 { - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - static planPreprocessing(plan) { - plan.add({ - global: [ - ...$d28fb665ee343afc$var$VARIATION_FEATURES, - ...$d28fb665ee343afc$var$DIRECTIONAL_FEATURES[plan.direction] - ], - local: $d28fb665ee343afc$var$FRACTIONAL_FEATURES - }); - } - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - static planPostprocessing(plan, userFeatures) { - plan.add([ - ...$d28fb665ee343afc$var$COMMON_FEATURES, - ...$d28fb665ee343afc$var$HORIZONTAL_FEATURES - ]); - plan.setFeatureOverrides(userFeatures); - } - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for(let i = 0; i < glyphs.length; i++){ - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { - let start = i; - let end = i + 1; - // Apply numerator - while(start > 0 && (0, $elh9A$unicodeproperties.isDigit)(glyphs[start - 1].codePoints[0])){ - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - // Apply denominator - while(end < glyphs.length && (0, $elh9A$unicodeproperties.isDigit)(glyphs[end].codePoints[0])){ - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} -(0, $elh9A$swchelperscjs_define_propertycjs._)($d28fb665ee343afc$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); - - - - - - -const $17ba6019f27bfcf9$var$trie = new (0, ($parcel$interopDefault($elh9A$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==")); -const $17ba6019f27bfcf9$var$FEATURES = [ - 'isol', - 'fina', - 'fin2', - 'fin3', - 'medi', - 'med2', - 'init' -]; -const $17ba6019f27bfcf9$var$ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; -const $17ba6019f27bfcf9$var$ISOL = 'isol'; -const $17ba6019f27bfcf9$var$FINA = 'fina'; -const $17ba6019f27bfcf9$var$FIN2 = 'fin2'; -const $17ba6019f27bfcf9$var$FIN3 = 'fin3'; -const $17ba6019f27bfcf9$var$MEDI = 'medi'; -const $17ba6019f27bfcf9$var$MED2 = 'med2'; -const $17ba6019f27bfcf9$var$INIT = 'init'; -const $17ba6019f27bfcf9$var$NONE = null; -// Each entry is [prevAction, curAction, nextState] -const $17ba6019f27bfcf9$var$STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 2: prev was D/L in ISOL form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 3: prev was D in FINA form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 4: prev was FINA ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 6: prev was DALATH/RISH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN3, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ] -]; -class $17ba6019f27bfcf9$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ccmp', - 'locl' - ]); - for(let i = 0; i < $17ba6019f27bfcf9$var$FEATURES.length; i++){ - let feature = $17ba6019f27bfcf9$var$FEATURES[i]; - plan.addStage(feature, false); - } - plan.addStage('mset'); - } - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - let prev = -1; - let state = 0; - let actions = []; - // Apply the state machine to map glyphs to features - for(let i = 0; i < glyphs.length; i++){ - let curAction, prevAction; - var glyph = glyphs[i]; - let type = $17ba6019f27bfcf9$var$getShapingClass(glyph.codePoints[0]); - if (type === $17ba6019f27bfcf9$var$ShapingClasses.Transparent) { - actions[i] = $17ba6019f27bfcf9$var$NONE; - continue; - } - [prevAction, curAction, state] = $17ba6019f27bfcf9$var$STATE_TABLE[state][type]; - if (prevAction !== $17ba6019f27bfcf9$var$NONE && prev !== -1) actions[prev] = prevAction; - actions[i] = curAction; - prev = i; - } - // Apply the chosen features to their respective glyphs - for(let index = 0; index < glyphs.length; index++){ - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) glyph.features[feature] = true; - } - } -} -function $17ba6019f27bfcf9$var$getShapingClass(codePoint) { - let res = $17ba6019f27bfcf9$var$trie.get(codePoint); - if (res) return res - 1; - let category = (0, $elh9A$unicodeproperties.getCategory)(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') return $17ba6019f27bfcf9$var$ShapingClasses.Transparent; - return $17ba6019f27bfcf9$var$ShapingClasses.Non_Joining; -} - - - - - -class $d6368085223f631e$export$2e2bcd8739ae039 { - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - get cur() { - return this.glyphs[this.index] || null; - } - shouldIgnore(glyph) { - return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; - } - move(dir) { - this.index += dir; - while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; - if (0 > this.index || this.index >= this.glyphs.length) return null; - return this.glyphs[this.index]; - } - next() { - return this.move(1); - } - prev() { - return this.move(-1); - } - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while(count--)this.move(dir); - return this.glyphs[this.index]; - } - constructor(glyphs, options){ - this.glyphs = glyphs; - this.reset(options); - } -} - - - -const $7b226e6bbeadedeb$var$DEFAULT_SCRIPTS = [ - 'DFLT', - 'dflt', - 'latn' -]; -class $7b226e6bbeadedeb$export$2e2bcd8739ae039 { - findScript(script) { - if (this.table.scriptList == null) return null; - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script)for (let entry of this.table.scriptList){ - if (entry.tag === s) return entry; - } - return null; - } - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) entry = this.findScript($7b226e6bbeadedeb$var$DEFAULT_SCRIPTS); - if (!entry) return this.scriptTag; - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - if (!direction || direction !== this.direction) this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - if (language && language.length < 4) language += ' '.repeat(4 - language.length); - if (!language || language !== this.languageTag) { - this.language = null; - for (let lang of this.script.langSysRecords)if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - changed = true; - } - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) for (let featureIndex of this.language.featureIndexes){ - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - return this.scriptTag; - } - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures){ - let feature = this.features[tag]; - if (!feature) continue; - for (let lookupIndex of feature.lookupListIndexes){ - if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - lookups.sort((a, b)=>a.index - b.index); - return lookups; - } - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) return null; - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions){ - if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; - } - return null; - } - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) return -1; - let records = variations.featureVariationRecords; - for(let i = 0; i < records.length; i++){ - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) return i; - } - return -1; - } - variationConditionsMatch(conditions, coords) { - return conditions.every((condition)=>{ - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new (0, $d6368085223f631e$export$2e2bcd8739ae039)(glyphs); - for (let { feature: feature, lookup: lookup } of lookups){ - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - while(this.glyphIterator.index < glyphs.length){ - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - for (let table of lookup.subTables){ - let res = this.applyLookup(lookup.lookupType, table); - if (res) break; - } - this.glyphIterator.next(); - } - } - } - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - for (let lookupRecord of lookupRecords){ - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - // Apply lookup subtables until one matches - for (let table of lookup.subTables){ - if (this.applyLookup(lookup.lookupType, table)) break; - } - } - this.glyphIterator.reset(options, glyphIndex); - return true; - } - coverageIndex(coverage, glyph) { - if (glyph == null) glyph = this.glyphIterator.cur.id; - switch(coverage.version){ - case 1: - return coverage.glyphs.indexOf(glyph); - case 2: - for (let range of coverage.rangeRecords){ - if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; - } - break; - } - return -1; - } - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ - if (matched) matched.push(this.glyphIterator.index); - idx++; - glyph = this.glyphIterator.next(); - } - this.glyphIterator.index = pos; - if (idx < sequence.length) return false; - return matched || true; - } - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id); - } - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>{ - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) return false; - return component === glyph.id; - }, []); - } - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0); - } - getClassID(glyph, classDef) { - switch(classDef.version){ - case 1: - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; - break; - case 2: - for (let range of classDef.classRangeRecord){ - if (range.start <= glyph && glyph <= range.end) return range.class; - } - break; - } - return 0; - } - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)); - } - applyContext(table) { - let index, set; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - set = table.ruleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) return false; - set = table.classSet[index]; - for (let rule of set){ - if (this.classSequenceMatches(1, rule.classes, table.classDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - applyChainingContext(table) { - let index; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let set = table.chainRuleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) return false; - for (let rule of rules){ - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule.input, table.inputClassDef) && this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - constructor(font, table){ - this.font = font; - this.table = table; - this.script = null; - this.scriptTag = null; - this.language = null; - this.languageTag = null; - this.features = {}; - this.lookups = {}; - // Setup variation substitutions - this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; - // initialize to default script + language - this.selectScript(); - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } -} - - -class $f22bb23c9fd478d8$export$2e2bcd8739ae039 { - get id() { - return this._id; - } - set id(id) { - this._id = id; - this.substituted = true; - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $elh9A$unicodeproperties.isMark)); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - copy() { - return new $f22bb23c9fd478d8$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); - } - constructor(font, id, codePoints = [], features){ - this._font = font; - this.codePoints = codePoints; - this.id = id; - this.features = {}; - if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ - let feature = features[i]; - this.features[feature] = true; - } - else if (typeof features === 'object') Object.assign(this.features, features); - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } -} - - -class $fa1d9fd80dd7279e$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ljmo', - 'vjmo', - 'tjmo' - ], false); - } - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while(i < glyphs.length){ - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - [action, state] = $fa1d9fd80dd7279e$var$STATE_TABLE[state][type]; - switch(action){ - case $fa1d9fd80dd7279e$var$DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) i = $fa1d9fd80dd7279e$var$decompose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = $fa1d9fd80dd7279e$var$compose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, plan.font); - break; - } - i++; - } - } -} -(0, $elh9A$swchelperscjs_define_propertycjs._)($fa1d9fd80dd7279e$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -const $fa1d9fd80dd7279e$var$HANGUL_BASE = 0xac00; -const $fa1d9fd80dd7279e$var$HANGUL_END = 0xd7a4; -const $fa1d9fd80dd7279e$var$HANGUL_COUNT = $fa1d9fd80dd7279e$var$HANGUL_END - $fa1d9fd80dd7279e$var$HANGUL_BASE + 1; -const $fa1d9fd80dd7279e$var$L_BASE = 0x1100; // lead -const $fa1d9fd80dd7279e$var$V_BASE = 0x1161; // vowel -const $fa1d9fd80dd7279e$var$T_BASE = 0x11a7; // trail -const $fa1d9fd80dd7279e$var$L_COUNT = 19; -const $fa1d9fd80dd7279e$var$V_COUNT = 21; -const $fa1d9fd80dd7279e$var$T_COUNT = 28; -const $fa1d9fd80dd7279e$var$L_END = $fa1d9fd80dd7279e$var$L_BASE + $fa1d9fd80dd7279e$var$L_COUNT - 1; -const $fa1d9fd80dd7279e$var$V_END = $fa1d9fd80dd7279e$var$V_BASE + $fa1d9fd80dd7279e$var$V_COUNT - 1; -const $fa1d9fd80dd7279e$var$T_END = $fa1d9fd80dd7279e$var$T_BASE + $fa1d9fd80dd7279e$var$T_COUNT - 1; -const $fa1d9fd80dd7279e$var$DOTTED_CIRCLE = 0x25cc; -const $fa1d9fd80dd7279e$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const $fa1d9fd80dd7279e$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const $fa1d9fd80dd7279e$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const $fa1d9fd80dd7279e$var$isTone = (code)=>0x302e <= code && code <= 0x302f; -const $fa1d9fd80dd7279e$var$isLVT = (code)=>$fa1d9fd80dd7279e$var$HANGUL_BASE <= code && code <= $fa1d9fd80dd7279e$var$HANGUL_END; -const $fa1d9fd80dd7279e$var$isLV = (code)=>code - $fa1d9fd80dd7279e$var$HANGUL_BASE < $fa1d9fd80dd7279e$var$HANGUL_COUNT && (code - $fa1d9fd80dd7279e$var$HANGUL_BASE) % $fa1d9fd80dd7279e$var$T_COUNT === 0; -const $fa1d9fd80dd7279e$var$isCombiningL = (code)=>$fa1d9fd80dd7279e$var$L_BASE <= code && code <= $fa1d9fd80dd7279e$var$L_END; -const $fa1d9fd80dd7279e$var$isCombiningV = (code)=>$fa1d9fd80dd7279e$var$V_BASE <= code && code <= $fa1d9fd80dd7279e$var$V_END; -const $fa1d9fd80dd7279e$var$isCombiningT = (code)=>$fa1d9fd80dd7279e$var$T_BASE + 1 && 1 <= code && code <= $fa1d9fd80dd7279e$var$T_END; -// Character categories -const $fa1d9fd80dd7279e$var$X = 0; // Other character -const $fa1d9fd80dd7279e$var$L = 1; // Leading consonant -const $fa1d9fd80dd7279e$var$V = 2; // Medial vowel -const $fa1d9fd80dd7279e$var$T = 3; // Trailing consonant -const $fa1d9fd80dd7279e$var$LV = 4; // Composed syllable -const $fa1d9fd80dd7279e$var$LVT = 5; // Composed syllable -const $fa1d9fd80dd7279e$var$M = 6; // Tone mark -// This function classifies a character using the above categories. -function $fa1d9fd80dd7279e$var$getType(code) { - if ($fa1d9fd80dd7279e$var$isL(code)) return $fa1d9fd80dd7279e$var$L; - if ($fa1d9fd80dd7279e$var$isV(code)) return $fa1d9fd80dd7279e$var$V; - if ($fa1d9fd80dd7279e$var$isT(code)) return $fa1d9fd80dd7279e$var$T; - if ($fa1d9fd80dd7279e$var$isLV(code)) return $fa1d9fd80dd7279e$var$LV; - if ($fa1d9fd80dd7279e$var$isLVT(code)) return $fa1d9fd80dd7279e$var$LVT; - if ($fa1d9fd80dd7279e$var$isTone(code)) return $fa1d9fd80dd7279e$var$M; - return $fa1d9fd80dd7279e$var$X; -} -// State machine actions -const $fa1d9fd80dd7279e$var$NO_ACTION = 0; -const $fa1d9fd80dd7279e$var$DECOMPOSE = 1; -const $fa1d9fd80dd7279e$var$COMPOSE = 2; -const $fa1d9fd80dd7279e$var$TONE_MARK = 4; -const $fa1d9fd80dd7279e$var$INVALID = 5; -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const $fa1d9fd80dd7279e$var$STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 1: - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 2: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ], - // State 3: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ] -]; -function $fa1d9fd80dd7279e$var$getGlyph(font, code, features) { - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, font.glyphForCodePoint(code).id, [ - code - ], features); -} -function $fa1d9fd80dd7279e$var$decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let s = code - $fa1d9fd80dd7279e$var$HANGUL_BASE; - let t = $fa1d9fd80dd7279e$var$T_BASE + s % $fa1d9fd80dd7279e$var$T_COUNT; - s = s / $fa1d9fd80dd7279e$var$T_COUNT | 0; - let l = $fa1d9fd80dd7279e$var$L_BASE + s / $fa1d9fd80dd7279e$var$V_COUNT | 0; - let v = $fa1d9fd80dd7279e$var$V_BASE + s % $fa1d9fd80dd7279e$var$V_COUNT; - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $fa1d9fd80dd7279e$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = $fa1d9fd80dd7279e$var$getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - let vjmo = $fa1d9fd80dd7279e$var$getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - let insert = [ - ljmo, - vjmo - ]; - if (t > $fa1d9fd80dd7279e$var$T_BASE) { - let tjmo = $fa1d9fd80dd7279e$var$getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} -function $fa1d9fd80dd7279e$var$compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - let prev = glyphs[i - 1].codePoints[0]; - let prevType = $fa1d9fd80dd7279e$var$getType(prev); - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === $fa1d9fd80dd7279e$var$LV && type === $fa1d9fd80dd7279e$var$T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === $fa1d9fd80dd7279e$var$V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - // Make sure L and V are combining characters - if ($fa1d9fd80dd7279e$var$isCombiningL(l) && $fa1d9fd80dd7279e$var$isCombiningV(v)) lv = $fa1d9fd80dd7279e$var$HANGUL_BASE + ((l - $fa1d9fd80dd7279e$var$L_BASE) * $fa1d9fd80dd7279e$var$V_COUNT + (v - $fa1d9fd80dd7279e$var$V_BASE)) * $fa1d9fd80dd7279e$var$T_COUNT; - } - let t = tjmo && tjmo.codePoints[0] || $fa1d9fd80dd7279e$var$T_BASE; - if (lv != null && (t === $fa1d9fd80dd7279e$var$T_BASE || $fa1d9fd80dd7279e$var$isCombiningT(t))) { - let s = lv + (t - $fa1d9fd80dd7279e$var$T_BASE); - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === $fa1d9fd80dd7279e$var$V ? 3 : 2; - glyphs.splice(i - del + 1, del, $fa1d9fd80dd7279e$var$getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) ljmo.features.ljmo = true; - if (vjmo) vjmo.features.vjmo = true; - if (tjmo) tjmo.features.tjmo = true; - if (prevType === $fa1d9fd80dd7279e$var$LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - $fa1d9fd80dd7279e$var$decompose(glyphs, i - 1, font); - return i + 1; - } - return i; -} -function $fa1d9fd80dd7279e$var$getLength(code) { - switch($fa1d9fd80dd7279e$var$getType(code)){ - case $fa1d9fd80dd7279e$var$LV: - case $fa1d9fd80dd7279e$var$LVT: - return 1; - case $fa1d9fd80dd7279e$var$V: - return 2; - case $fa1d9fd80dd7279e$var$T: - return 3; - } -} -function $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) return; - let prev = glyphs[i - 1].codePoints[0]; - let len = $fa1d9fd80dd7279e$var$getLength(prev); - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} -function $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - if (font.hasGlyphForCodePoint($fa1d9fd80dd7279e$var$DOTTED_CIRCLE)) { - let dottedCircle = $fa1d9fd80dd7279e$var$getGlyph(font, $fa1d9fd80dd7279e$var$DOTTED_CIRCLE, glyph.features); - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - return i; -} - - - - - - - - - -var $d22b56f2cf15e5ba$exports = {}; -$d22b56f2cf15e5ba$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}"); - - -var $79781f8c452881c2$exports = {}; -$79781f8c452881c2$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}"); - - -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -const $79e3b6f2c331d0bf$export$a513ea61a7bee91c = { - X: 1, - C: 2, - V: 4, - N: 8, - H: 16, - ZWNJ: 32, - ZWJ: 64, - M: 128, - SM: 256, - VD: 512, - A: 1024, - Placeholder: 2048, - Dotted_Circle: 4096, - RS: 8192, - Coeng: 16384, - Repha: 32768, - Ra: 65536, - CM: 131072, - Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). -}; -const $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0 = { - Start: 1, - Ra_To_Become_Reph: 2, - Pre_M: 4, - Pre_C: 8, - Base_C: 16, - After_Main: 32, - Above_C: 64, - Before_Sub: 128, - Below_C: 256, - After_Sub: 512, - Before_Post: 1024, - Post_C: 2048, - After_Post: 4096, - Final_C: 8192, - SMVD: 16384, - End: 32768 -}; -const $79e3b6f2c331d0bf$export$8519deaa7de2b07 = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.C | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Ra | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.CM | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.V | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Placeholder | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Dotted_Circle; -const $79e3b6f2c331d0bf$export$bbcd928767338e0d = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWJ | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWNJ; -const $79e3b6f2c331d0bf$export$ca9599b2a300afc = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.H | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Coeng; -const $79e3b6f2c331d0bf$export$e99d119da76a0fc5 = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; -const $79e3b6f2c331d0bf$export$f647c9cfdd77d95a = { - // Khmer - 0x17BE: [ - 0x17C1, - 0x17BE - ], - 0x17BF: [ - 0x17C1, - 0x17BF - ], - 0x17C0: [ - 0x17C1, - 0x17C0 - ], - 0x17C4: [ - 0x17C1, - 0x17C4 - ], - 0x17C5: [ - 0x17C1, - 0x17C5 - ] -}; - - - -const { decompositions: $d203e6b9523d0071$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $d203e6b9523d0071$var$trie = new (0, ($parcel$interopDefault($elh9A$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $d203e6b9523d0071$var$stateMachine = new (0, ($parcel$interopDefault($elh9A$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($d22b56f2cf15e5ba$exports)))); -class $d203e6b9523d0071$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($d203e6b9523d0071$var$setupSyllables); - plan.addStage([ - 'locl', - 'ccmp' - ]); - plan.addStage($d203e6b9523d0071$var$initialReordering); - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - plan.addStage($d203e6b9523d0071$var$finalReordering); - plan.addStage({ - local: [ - 'init' - ], - global: [ - 'pres', - 'abvs', - 'blws', - 'psts', - 'haln', - 'dist', - 'abvm', - 'blwm', - 'calt', - 'clig' - ] - }); - // Setup the indic config for the selected script - plan.unicodeScript = $e38a1a895f6aeb54$export$ce50e82f12a827a4(plan.script); - plan.indicConfig = (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5)[plan.unicodeScript] || (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5).Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - // TODO: turn off kern (Khmer) and liga features. - } - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - let d = (0, $79e3b6f2c331d0bf$export$f647c9cfdd77d95a)[codepoint] || $d203e6b9523d0071$var$decompositions[codepoint]; - if (d) { - let decomposed = d.map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $elh9A$swchelperscjs_define_propertycjs._)($d203e6b9523d0071$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -function $d203e6b9523d0071$var$indicCategory(glyph) { - return $d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) >> 8; -} -function $d203e6b9523d0071$var$indicPosition(glyph) { - return 1 << ($d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) & 0xff); -} -class $d203e6b9523d0071$var$IndicInfo { - constructor(category, position, syllableType, syllable){ - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $d203e6b9523d0071$var$setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of $d203e6b9523d0071$var$stateMachine.match(glyphs.map($d203e6b9523d0071$var$indicCategory))){ - if (start > last) { - ++syllable; - for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(glyphs[i]), $d203e6b9523d0071$var$indicPosition(glyphs[i]), tags[0], syllable); - last = end + 1; - } - if (last < glyphs.length) { - ++syllable; - for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } -} -function $d203e6b9523d0071$var$isConsonant(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$8519deaa7de2b07); -} -function $d203e6b9523d0071$var$isJoiner(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$bbcd928767338e0d); -} -function $d203e6b9523d0071$var$isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc); -} -function $d203e6b9523d0071$var$wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs)glyph.features = { - [feature]: true - }; - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([ - feature - ], glyphs); - return glyphs.length === 1; -} -function $d203e6b9523d0071$var$consonantPosition(font, consonant, virama) { - let glyphs = [ - virama, - consonant, - virama - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; -} -function $d203e6b9523d0071$var$initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, virama, [ - indicConfig.virama - ]); - for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) glyphs[i].shaperInfo.position = $d203e6b9523d0071$var$consonantPosition(font, glyphs[i].copy(), info); - } - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - let { category: category, syllableType: syllableType } = glyphs[start].shaperInfo; - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue; - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(g), $d203e6b9523d0071$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); - // Insert after possible Repha. - let i = start; - while(i < end && glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha)i++; - glyphs.splice(i++, 0, g); - end++; - } - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - let base = end; - let limit = start; - let hasReph = false; - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$d203e6b9523d0071$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - // See if it matches the 'rphf' feature. - let g = [ - glyphs[start].copy(), - glyphs[start + 1].copy(), - glyphs[start + 2].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $d203e6b9523d0071$var$wouldSubstitute(g, 'rphf')) { - limit += 2; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha) { - limit++; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - switch(indicConfig.basePos){ - case 'Last': - { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - do { - let info = glyphs[--i].shaperInfo; - // until a consonant is found - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C && (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C || seenBelow)) { - base = i; - break; - } - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) seenBelow = true; - base = i; - } else if (start < i && info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ && glyphs[i - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - }while (i > limit); - break; - } - case 'First': - // The first consonant is always the base. - base = start; - // Mark all subsequent consonants as below. - for(let i = base + 1; i < end; i++)if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - } - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) hasReph = false; - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - // Reorder characters - for(let i = start; i < base; i++){ - let info = glyphs[i].shaperInfo; - info.position = Math.min((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_C, info.position); - } - if (base < end) glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - for(let j = i + 1; j < end; j++)if ($d203e6b9523d0071$var$isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Final_C; - break; - } - break; - } - // Handle beginning Ra - if (hasReph) glyphs[start].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) { - let j; - for(j = end - 1; j > i; j--){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - } - if (glyphs[j].shaperInfo.category !== (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - break; - } - } - // Attach misc marks to previous char to move with them. - let lastPos = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Start; - for(let i = start; i < end; i++){ - let info = glyphs[i].shaperInfo; - if (info.category & ((0, $79e3b6f2c331d0bf$export$bbcd928767338e0d) | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).RS | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).CM | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc) & info.category)) { - info.position = lastPos; - if (info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for(let j = i; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } else if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) lastPos = info.position; - } - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for(let i = base + 1; i < end; i++){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - for(let j = last + 1; j < i; j++)if (glyphs[j].shaperInfo.position < (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - last = i; - } else if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) last = i; - } - let arr = glyphs.slice(start, end); - arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - // Find base again - for(let i = start; i < end; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - base = i; - break; - } - // Setup features now - // Reph - for(let i = start; i < end && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; i++)glyphs[i].features.rphf = true; - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for(let i = start; i < base; i++){ - glyphs[i].features.half = true; - if (blwf) glyphs[i].features.blwf = true; - } - // Post-base - for(let i = base + 1; i < end; i++){ - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Ra && glyphs[i + 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - let prefLen = 2; - if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for(let i = base + 1; i + prefLen - 1 < end; i++){ - let g = [ - glyphs[i].copy(), - glyphs[i + 1].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g, 'pref')) { - for(let j = 0; j < prefLen; j++)glyphs[i++].features.pref = true; - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) for(; i < end; i++)glyphs[i].features.cfar = true; - break; - } - } - // Apply ZWJ/ZWNJ effects - for(let i = start + 1; i < end; i++)if ($d203e6b9523d0071$var$isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWNJ; - let j = i; - do { - j--; - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - // A ZWNJ disables HALF. - if (nonJoiner) delete glyphs[j].features.half; - }while (j > start && !$d203e6b9523d0071$var$isConsonant(glyphs[j])); - } - } -} -function $d203e6b9523d0071$var$finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - let tryPref = !!features.pref; - // Find base again - let base = start; - for(; base < end; base++)if (glyphs[base].shaperInfo.position >= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while(base < end && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[base]))base++; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).BASE_C; - tryPref = false; - } - break; - } - } - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){ - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i === end || !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[i])) break; - i++; // Skip halant. - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i < end && $d203e6b9523d0071$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) { - base = i; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - } - } - if (start < base && glyphs[base].shaperInfo.position > (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) base--; - break; - } - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ) base--; - if (base < end) while(start < base && glyphs[base].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc)))base--; - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - if (start + 1 < end && start < base) { - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos + 1 < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos + 1])) newPos++; - } else newPos = start; // No move. - } - if (start < newPos && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Now go see if there's actually any matras... - for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) base--; - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - newPos--; - } - } - } - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main) { - newRephPos = base; - while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main)newRephPos++; - found = newRephPos < end; - } - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Sub) { - newRephPos = base; - while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)))newRephPos++; - found = newRephPos < end; - } - } - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - } - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)newRephPos--; - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) newRephPos--; - } - } - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - if (start < base && base <= newRephPos) base--; - } - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - let oldPos = i; - for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - newPos--; - break; - } - } - } - if (newPos > start && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos])) newPos++; - } - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - if (newPos <= base && base < oldPos) base++; - } - break; - } - } - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M && (!start || !/Cf|Mn/.test((0, $elh9A$unicodeproperties.getCategory)(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true; - } -} -function $d203e6b9523d0071$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - - - - - - - - - -const { categories: $9b772791ccede8a5$var$categories, decompositions: $9b772791ccede8a5$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $9b772791ccede8a5$var$trie = new (0, ($parcel$interopDefault($elh9A$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $9b772791ccede8a5$var$stateMachine = new (0, ($parcel$interopDefault($elh9A$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports)))); -class $9b772791ccede8a5$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($9b772791ccede8a5$var$setupSyllables); - // Default glyph pre-processing group - plan.addStage([ - 'locl', - 'ccmp', - 'nukt', - 'akhn' - ]); - // Reordering group - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'rphf' - ], false); - plan.addStage($9b772791ccede8a5$var$recordRphf); - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'pref' - ]); - plan.addStage($9b772791ccede8a5$var$recordPref); - // Orthographic unit shaping group - plan.addStage([ - 'rkrf', - 'abvf', - 'blwf', - 'half', - 'pstf', - 'vatu', - 'cjct' - ]); - plan.addStage($9b772791ccede8a5$var$reorder); - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - // Standard topographic presentation and positional feature application - plan.addStage([ - 'abvs', - 'blws', - 'pres', - 'psts', - 'dist', - 'abvm', - 'blwm' - ]); - } - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - if ($9b772791ccede8a5$var$decompositions[codepoint]) { - let decomposed = $9b772791ccede8a5$var$decompositions[codepoint].map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $elh9A$swchelperscjs_define_propertycjs._)($9b772791ccede8a5$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS'); -function $9b772791ccede8a5$var$useCategory(glyph) { - return $9b772791ccede8a5$var$trie.get(glyph.codePoints[0]); -} -class $9b772791ccede8a5$var$USEInfo { - constructor(category, syllableType, syllable){ - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $9b772791ccede8a5$var$setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of $9b772791ccede8a5$var$stateMachine.match(glyphs.map($9b772791ccede8a5$var$useCategory))){ - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $9b772791ccede8a5$var$USEInfo($9b772791ccede8a5$var$categories[$9b772791ccede8a5$var$useCategory(glyphs[i])], tags[0], syllable); - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for(let i = start; i < start + limit; i++)glyphs[i].features.rphf = true; - } -} -function $9b772791ccede8a5$var$clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs)glyph.substituted = false; -} -function $9b772791ccede8a5$var$recordRphf(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; -} -function $9b772791ccede8a5$var$recordPref(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; -} -function $9b772791ccede8a5$var$reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - for(let start = 0, end = $9b772791ccede8a5$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $9b772791ccede8a5$var$nextSyllable(glyphs, start)){ - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue; - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = info; - // Insert after possible Repha. - for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - // Move things forward. - if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant. - for(i = start + 1; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if ($9b772791ccede8a5$var$isHalant(glyphs[i])) i--; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - // Move things back. - for(i = start, j = end; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = $9b772791ccede8a5$var$isHalant(glyphs[i]) ? i + 1 : i; - else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } -} -function $9b772791ccede8a5$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} -function $9b772791ccede8a5$var$isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} -function $9b772791ccede8a5$var$isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} - - -const $fdb4471fc82bc2c2$var$SHAPERS = { - arab: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mong: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - syrc: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - 'nko ': (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phag: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mand: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mani: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phlp: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - hang: (0, $fa1d9fd80dd7279e$export$2e2bcd8739ae039), - bng2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - beng: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - dev2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - deva: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gjr2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gujr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - guru: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gur2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knda: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knd2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlm2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlym: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - ory2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - orya: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - taml: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tml2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - telu: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tel2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - khmr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - bali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - batk: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - brah: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - bugi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - buhd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cakm: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cham: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - dupl: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - egyp: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - gran: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - hano: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - java: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kthi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khar: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khoj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sind: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lepc: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - limb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - mahj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - modi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - saur: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - shrd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sidd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sinh: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - sund: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sylo: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tglg: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tagb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tale: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lana: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tavt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - takr: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tibt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tfng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tirh: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - latn: (0, $d28fb665ee343afc$export$2e2bcd8739ae039), - DFLT: (0, $d28fb665ee343afc$export$2e2bcd8739ae039 // Default - ) -}; -function $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script) { - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script){ - let shaper = $fdb4471fc82bc2c2$var$SHAPERS[s]; - if (shaper) return shaper; - } - return 0, $d28fb665ee343afc$export$2e2bcd8739ae039; -} - - - - - -class $86bc1883359e094a$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let glyph = this.glyphIterator.cur; - switch(table.version){ - case 1: - glyph.id = glyph.id + table.deltaGlyphID & 0xffff; - break; - case 2: - glyph.id = table.substitute.get(index); - break; - } - return true; - } - case 2: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i)=>{ - let glyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - return false; - } - case 3: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - return false; - } - case 4: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - for (let ligature of table.ligatureSets.get(index)){ - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) continue; - let curGlyph = this.glyphIterator.cur; - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched)characters.push(...this.glyphs[index].codePoints); - // Create the replacement ligature glyph - let ligatureGlyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark; - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched){ - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) idx = matchIndex; - else while(idx < matchIndex){ - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) for(let i = idx; i < this.glyphs.length; i++){ - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else break; - } - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for(let i = matched.length - 1; i >= 0; i--)this.glyphs.splice(matched[i], 1); - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - return false; - } - case 5: - return this.applyContext(table); - case 6: - return this.applyChainingContext(table); - case 7: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} - - - -class $79ea6270f0a90256$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) position.xAdvance += value.xAdvance; - if (value.yAdvance != null) position.yAdvance += value.yAdvance; - if (value.xPlacement != null) position.xOffset += value.xPlacement; - if (value.yPlacement != null) position.yOffset += value.yPlacement; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - // TODO: device tables - } - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - this.applyPositionValue(0, table.value); - break; - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - return true; - } - case 2: - { - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) return false; - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - let set = table.pairSets.get(index); - for (let pair of set)if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - return false; - case 2: - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) return false; - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - case 3: - { - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) return false; - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) return false; - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) return false; - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - switch(this.direction){ - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - return true; - } - case 4: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - if (baseGlyphIndex < 0) return false; - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) return false; - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 5: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - if (baseGlyphIndex < 0) return false; - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) return false; - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 6: - { - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) return false; - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) return false; - let cur = this.glyphIterator.cur; - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) good = true; - else if (cur.ligatureComponent === prev.ligatureComponent) good = true; - } else // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true; - if (!good) return false; - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) return false; - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - case 7: - return this.applyContext(table); - case 8: - return this.applyChainingContext(table); - case 9: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - return { - x: x, - y: y - }; - } - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i); - this.fixMarkAttachment(); - } - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - fixMarkAttachment() { - for(let i = 0; i < this.glyphs.length; i++){ - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - if (this.direction === 'ltr') for(let k = j; k < i; k++){ - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - else for(let k = j + 1; k < i + 1; k++){ - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } -} - - -class $b2f26a32cb9ab2fa$export$2e2bcd8739ae039 { - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map((glyph)=>new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, glyph.id, [ - ...glyph.codePoints - ])); - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script); - this.plan = new (0, $d7e93cca3cf8ce8a$export$2e2bcd8739ae039)(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - // Assign chosen features to output glyph run - for(let key in this.plan.allFeatures)glyphRun.features[key] = true; - } - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions); - if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions); - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - return this.GPOSProcessor && this.GPOSProcessor.features; - } - zeroMarkAdvances(positions) { - for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - getAvailableFeatures(script, language) { - let features = []; - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - return features; - } - constructor(font){ - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - if (font.GSUB) this.GSUBProcessor = new (0, $86bc1883359e094a$export$2e2bcd8739ae039)(font, font.GSUB); - if (font.GPOS) this.GPOSProcessor = new (0, $79ea6270f0a90256$export$2e2bcd8739ae039)(font, font.GPOS); - } -} - - -class $9d641258c9d7180d$export$2e2bcd8739ae039 { - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) script = $e38a1a895f6aeb54$export$e5cb25e204fb8450(string); - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string)codePoints.push(...glyph.codePoints); - script = $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints); - } - var glyphs = string; - } - let glyphRun = new (0, $b19c79ec7a94fa39$export$2e2bcd8739ae039)(glyphs, features, script, language, direction); - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - // Setup the advanced layout engine - if (this.engine && this.engine.setup) this.engine.setup(glyphRun); - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) this.engine.cleanup(); - return glyphRun; - } - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun); - } - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map((glyph)=>new (0, $9195cf1266c12ea5$export$2e2bcd8739ae039)(glyph.advanceWidth)); - let positioned = null; - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun); - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new (0, $a57a26817cd35108$export$2e2bcd8739ae039)(this.font); - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) this.kernProcessor = new (0, $4646d52c2a559cdb$export$2e2bcd8739ae039)(this.font); - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) // BMP - switch(ch >> 8){ - case 0x00: - return ch === 0x00AD; - case 0x03: - return ch === 0x034F; - case 0x06: - return ch === 0x061C; - case 0x17: - return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: - return 0x180B <= ch && ch <= 0x180E; - case 0x20: - return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; - case 0xFE: - return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; - case 0xFF: - return 0xFFF0 <= ch && ch <= 0xFFF8; - default: - return false; - } - else // Other planes - switch(plane){ - case 0x01: - return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; - case 0x0E: - return 0xE0000 <= ch && ch <= 0xE0FFF; - default: - return false; - } - } - getAvailableFeatures(script, language) { - let features = []; - if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language)); - if (this.font.kern && features.indexOf('kern') === -1) features.push('kern'); - return features; - } - stringsForGlyph(gid) { - let result = new Set; - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint)); - if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string); - return Array.from(result); - } - constructor(font){ - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) this.engine = new (0, $860fcbd64bc12fbc$export$2e2bcd8739ae039)(this.font); - else if (this.font.GSUB || this.font.GPOS) this.engine = new (0, $b2f26a32cb9ab2fa$export$2e2bcd8739ae039)(this.font); - } -} - - - - - - -const $67ee4828d81adb28$var$SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; -class $67ee4828d81adb28$export$2e2bcd8739ae039 { - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ toFunction() { - return (ctx)=>{ - this.commands.forEach((c)=>{ - return ctx[c.command].apply(ctx, c.args); - }); - }; - } - /** - * Converts the path to an SVG path data string - * @return {string} - */ toSVG() { - let cmds = this.commands.map((c)=>{ - let args = c.args.map((arg)=>Math.round(arg * 100) / 100); - return `${$67ee4828d81adb28$var$SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - return cmds.join(''); - } - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ get cbox() { - if (!this._cbox) { - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for (let command of this.commands)for(let i = 0; i < command.args.length; i += 2)cbox.addPoint(command.args[i], command.args[i + 1]); - this._cbox = Object.freeze(cbox); - } - return this._cbox; - } - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ get bbox() { - if (this._bbox) return this._bbox; - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let cx = 0, cy = 0; - let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - for (let c of this.commands)switch(c.command){ - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - var p0 = [ - cx, - cy - ]; - var p1 = [ - cp1x, - cp1y - ]; - var p2 = [ - cp2x, - cp2y - ]; - var p3 = [ - p3x, - p3y - ]; - for(var i = 0; i <= 1; i++){ - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) bbox.addPoint(f(t), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t)); - } - continue; - } - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) bbox.addPoint(f(t1), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t1)); - } - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) bbox.addPoint(f(t2), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t2)); - } - } - cx = p3x; - cy = p3y; - break; - } - return this._bbox = Object.freeze(bbox); - } - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ mapPoints(fn) { - let path = new $67ee4828d81adb28$export$2e2bcd8739ae039; - for (let c of this.commands){ - let args = []; - for(let i = 0; i < c.args.length; i += 2){ - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - path[c.command](...args); - } - return path; - } - /** - * Transforms the path by the given matrix. - */ transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y)=>{ - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [ - tx, - ty - ]; - }); - } - /** - * Translates the path by the given offset. - */ translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - /** - * Rotates the path by the given angle (in radians). - */ rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - /** - * Scales the path. - */ scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } - constructor(){ - this.commands = []; - this._bbox = null; - this._cbox = null; - } -} -for (let command of [ - 'moveTo', - 'lineTo', - 'quadraticCurveTo', - 'bezierCurveTo', - 'closePath' -])$67ee4828d81adb28$export$2e2bcd8739ae039.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command: command, - args: args - }); - return this; -}; - - - -var $85e16e40023cfb0f$export$2e2bcd8739ae039 = [ - '.notdef', - '.null', - 'nonmarkingreturn', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quotesingle', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'grave', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'Adieresis', - 'Aring', - 'Ccedilla', - 'Eacute', - 'Ntilde', - 'Odieresis', - 'Udieresis', - 'aacute', - 'agrave', - 'acircumflex', - 'adieresis', - 'atilde', - 'aring', - 'ccedilla', - 'eacute', - 'egrave', - 'ecircumflex', - 'edieresis', - 'iacute', - 'igrave', - 'icircumflex', - 'idieresis', - 'ntilde', - 'oacute', - 'ograve', - 'ocircumflex', - 'odieresis', - 'otilde', - 'uacute', - 'ugrave', - 'ucircumflex', - 'udieresis', - 'dagger', - 'degree', - 'cent', - 'sterling', - 'section', - 'bullet', - 'paragraph', - 'germandbls', - 'registered', - 'copyright', - 'trademark', - 'acute', - 'dieresis', - 'notequal', - 'AE', - 'Oslash', - 'infinity', - 'plusminus', - 'lessequal', - 'greaterequal', - 'yen', - 'mu', - 'partialdiff', - 'summation', - 'product', - 'pi', - 'integral', - 'ordfeminine', - 'ordmasculine', - 'Omega', - 'ae', - 'oslash', - 'questiondown', - 'exclamdown', - 'logicalnot', - 'radical', - 'florin', - 'approxequal', - 'Delta', - 'guillemotleft', - 'guillemotright', - 'ellipsis', - 'nonbreakingspace', - 'Agrave', - 'Atilde', - 'Otilde', - 'OE', - 'oe', - 'endash', - 'emdash', - 'quotedblleft', - 'quotedblright', - 'quoteleft', - 'quoteright', - 'divide', - 'lozenge', - 'ydieresis', - 'Ydieresis', - 'fraction', - 'currency', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'daggerdbl', - 'periodcentered', - 'quotesinglbase', - 'quotedblbase', - 'perthousand', - 'Acircumflex', - 'Ecircumflex', - 'Aacute', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Oacute', - 'Ocircumflex', - 'apple', - 'Ograve', - 'Uacute', - 'Ucircumflex', - 'Ugrave', - 'dotlessi', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'Lslash', - 'lslash', - 'Scaron', - 'scaron', - 'Zcaron', - 'zcaron', - 'brokenbar', - 'Eth', - 'eth', - 'Yacute', - 'yacute', - 'Thorn', - 'thorn', - 'minus', - 'multiply', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'onehalf', - 'onequarter', - 'threequarters', - 'franc', - 'Gbreve', - 'gbreve', - 'Idotaccent', - 'Scedilla', - 'scedilla', - 'Cacute', - 'cacute', - 'Ccaron', - 'ccaron', - 'dcroat' -]; - - -class $0e4f52d7996e478b$export$2e2bcd8739ae039 { - _getPath() { - return new (0, $67ee4828d81adb28$export$2e2bcd8739ae039)(); - } - _getCBox() { - return this.path.cbox; - } - _getBBox() { - return this.path.bbox; - } - _getTableMetrics(table) { - if (this.id < table.metrics.length) return table.metrics.get(this.id); - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - return res; - } - _getMetrics(cbox) { - if (this._metrics) return this._metrics; - let { advance: advanceWidth, bearing: leftBearing } = this._getTableMetrics(this._font.hmtx); - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) var { advance: advanceHeight, bearing: topBearing } = this._getTableMetrics(this._font.vmtx); - else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this); - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - } else { - let { hhea: hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - return this._metrics = { - advanceWidth: advanceWidth, - advanceHeight: advanceHeight, - leftBearing: leftBearing, - topBearing: topBearing - }; - } - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ get cbox() { - return this._getCBox(); - } - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ get bbox() { - return this._getBBox(); - } - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - /** - * The glyph's advance width. - * @type {number} - */ get advanceWidth() { - return this._getMetrics().advanceWidth; - } - /** - * The glyph's advance height. - * @type {number} - */ get advanceHeight() { - return this._getMetrics().advanceHeight; - } - get ligatureCaretPositions() {} - _getName() { - let { post: post } = this._font; - if (!post) return null; - switch(post.version){ - case 1: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id]; - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length) return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[id]; - return post.names[id - (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length]; - case 2.5: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id + post.offsets[this.id]]; - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - /** - * The glyph's name - * @type {string} - */ get name() { - return this._getName(); - } - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ render(ctx, size) { - ctx.save(); - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - ctx.restore(); - } - constructor(id, codePoints, font){ - /** - * The glyph id in the font - * @type {number} - */ this.id = id; - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ this.codePoints = codePoints; - this._font = font; - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $elh9A$unicodeproperties.isMark)); - this.isLigature = this.codePoints.length > 1; - } -} -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "cbox", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "path", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceWidth", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceHeight", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "name", null); - - - - - -// The header for both simple and composite glyphs -let $f680320fa07ef53d$var$GlyfHeader = new $elh9A$restructure.Struct({ - numberOfContours: $elh9A$restructure.int16, - xMin: $elh9A$restructure.int16, - yMin: $elh9A$restructure.int16, - xMax: $elh9A$restructure.int16, - yMax: $elh9A$restructure.int16 -}); -// Flags for simple glyphs -const $f680320fa07ef53d$var$ON_CURVE = 1; -const $f680320fa07ef53d$var$X_SHORT_VECTOR = 2; -const $f680320fa07ef53d$var$Y_SHORT_VECTOR = 4; -const $f680320fa07ef53d$var$REPEAT = 8; -const $f680320fa07ef53d$var$SAME_X = 16; -const $f680320fa07ef53d$var$SAME_Y = 32; -// Flags for composite glyphs -const $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS = 1; -const $f680320fa07ef53d$var$ARGS_ARE_XY_VALUES = 2; -const $f680320fa07ef53d$var$ROUND_XY_TO_GRID = 4; -const $f680320fa07ef53d$var$WE_HAVE_A_SCALE = 8; -const $f680320fa07ef53d$var$MORE_COMPONENTS = 32; -const $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE = 64; -const $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO = 128; -const $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS = 256; -const $f680320fa07ef53d$var$USE_MY_METRICS = 512; -const $f680320fa07ef53d$var$OVERLAP_COMPOUND = 1024; -const $f680320fa07ef53d$var$SCALED_COMPONENT_OFFSET = 2048; -const $f680320fa07ef53d$var$UNSCALED_COMPONENT_OFFSET = 4096; -class $f680320fa07ef53d$export$baf26146a414f24a { - copy() { - return new $f680320fa07ef53d$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y); - } - constructor(onCurve, endContour, x = 0, y = 0){ - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } -} -// Represents a component in a composite glyph -class $f680320fa07ef53d$var$Component { - constructor(glyphID, dx, dy){ - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} -class $f680320fa07ef53d$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) return this.path.cbox; - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) val = -val; - val += prev; - } else if (same) var val = prev; - else var val = prev + stream.readInt16BE(); - return val; - } - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) return null; - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream); - else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos); - return glyph; - } - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - let endPtsOfContours = new $elh9A$restructure.Array($elh9A$restructure.uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new $elh9A$restructure.Array($elh9A$restructure.uint8, $elh9A$restructure.uint16).decode(stream); - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - while(flags.length < numCoords){ - var flag = stream.readUInt8(); - flags.push(flag); - // check for repeat flag - if (flag & $f680320fa07ef53d$var$REPEAT) { - let count = stream.readUInt8(); - for(let j = 0; j < count; j++)flags.push(flag); - } - } - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - let point = new $f680320fa07ef53d$export$baf26146a414f24a(!!(flag & $f680320fa07ef53d$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - let px = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $f680320fa07ef53d$var$X_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_X); - } - let py = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $f680320fa07ef53d$var$Y_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_Y); - } - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - return; - } - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = $f680320fa07ef53d$var$MORE_COMPONENTS; - while(flags & $f680320fa07ef53d$var$MORE_COMPONENTS){ - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) haveInstructions = (flags & $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS) !== 0; - if (flags & $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - var component = new $f680320fa07ef53d$var$Component(glyphID, dx, dy); - component.pos = gPos; - if (flags & $f680320fa07ef53d$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction - component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - else if (flags & $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } else if (flags & $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } - glyph.components.push(component); - } - if (this._font._variationProcessor) { - let points = []; - for(let j = 0; j < glyph.components.length; j++){ - var component = glyph.components[j]; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(true, true, component.dx, component.dy)); - } - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - for(let i = 0; i < points.length; i++){ - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - return haveInstructions; - } - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) this._metrics = (0, $0e4f52d7996e478b$export$2e2bcd8739ae039).prototype._getMetrics.call(this, cbox); - let { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing } = this._metrics; - return [ - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) return []; - let points = []; - if (glyph.numberOfContours < 0) // resolve composite glyphs - for (let component of glyph.components){ - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - for(let j = 0; j < contour.length; j++){ - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(point.onCurve, point.endContour, x, y)); - } - } - } - else points = glyph.points || []; - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - let contours = []; - let cur = []; - for(let k = 0; k < points.length; k++){ - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - return contours; - } - _getMetrics() { - if (this._metrics) return this._metrics; - let cbox = this._getCBox(true); - super._getMetrics(cbox); - if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - return this._metrics; - } - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - else // Start at the middle if both the first and last points are off curve - firstPt = new $f680320fa07ef53d$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - var curvePt = firstPt; - } - path.moveTo(firstPt.x, firstPt.y); - for(let j = start; j < contour.length; j++){ - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y); - else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt; - else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - } else throw new Error("Unknown TTF path state"); - } - // Connect the first and last points - if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - path.closePath(); - } - return path; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - } -} - - - - - -class $7ee0705195f3b047$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getName() { - if (this._font.CFF2) return super._getName(); - return this._font['CFF '].getGlyphName(this.id); - } - bias(s) { - if (s.length < 1240) return 107; - else if (s.length < 33900) return 1131; - else return 32768; - } - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream: stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - let stack = []; - let trans = []; - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - function checkWidth() { - if (width == null) width = stack.shift() + privateDict.nominalWidthX; - } - function parseStems() { - if (stack.length % 2 !== 0) checkWidth(); - nStems += stack.length >> 1; - return stack.length = 0; - } - function moveTo(x, y) { - if (open) path.closePath(); - path.moveTo(x, y); - open = true; - } - let parse = function() { - while(stream.pos < end){ - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - switch(op){ - case 1: - case 3: - case 18: - case 23: - parseStems(); - break; - case 4: - if (stack.length > 1) checkWidth(); - y += stack.shift(); - moveTo(x, y); - break; - case 5: - while(stack.length >= 2){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - case 6: - case 7: - phase = op === 6; - while(stack.length >= 1){ - if (phase) x += stack.shift(); - else y += stack.shift(); - path.lineTo(x, y); - phase = !phase; - } - break; - case 8: - while(stack.length > 0){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 11: - if (cff.version >= 2) break; - return; - case 14: - if (cff.version >= 2) break; - if (stack.length > 0) checkWidth(); - if (open) { - path.closePath(); - open = false; - } - break; - case 15: - if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1'); - vsindex = stack.pop(); - break; - case 16: - { - if (cff.version < 2) throw new Error('blend operator not supported in CFF v1'); - if (!variationProcessor) throw new Error('blend operator in non-variation font'); - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - for(let i = 0; i < numBlends; i++){ - let sum = stack[base + i]; - for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++]; - stack[base + i] = sum; - } - while(numOperands--)stack.pop(); - break; - } - case 19: - case 20: - parseStems(); - stream.pos += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2) checkWidth(); - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - case 22: - if (stack.length > 1) checkWidth(); - x += stack.shift(); - moveTo(x, y); - break; - case 24: - while(stack.length >= 8){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - case 25: - while(stack.length >= 8){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while(stack.length >= 4){ - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while(stack.length >= 4){ - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - stack.push(stream.readInt16BE()); - break; - case 29: - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 30: - case 31: - phase = op === 31; - while(stack.length >= 4){ - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - case 12: - op = stream.readUInt8(); - switch(op){ - case 3: - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - case 4: - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - case 5: - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - case 9: - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case 10: - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - case 11: - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - case 12: - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - case 14: - a = stack.pop(); - stack.push(-a); - break; - case 15: - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - case 18: - stack.pop(); - break; - case 20: - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - case 21: - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - case 22: - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - case 23: - stack.push(Math.random()); - break; - case 24: - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - case 26: - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case 27: - a = stack.pop(); - stack.push(a, a); - break; - case 28: - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - case 29: - idx = stack.pop(); - if (idx < 0) idx = 0; - else if (idx > stack.length - 1) idx = stack.length - 1; - stack.push(stack[idx]); - break; - case 30: - let n = stack.pop(); - let j = stack.pop(); - if (j >= 0) while(j > 0){ - var t = stack[n - 1]; - for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i]; - stack[0] = t; - j--; - } - else while(j < 0){ - var t = stack[0]; - for(let i = 0; i <= n; i++)stack[i] = stack[i + 1]; - stack[n - 1] = t; - j++; - } - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 35: - pts = []; - for(let i = 0; i <= 5; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 37: - let startx = x; - let starty = y; - pts = []; - for(let i = 0; i <= 4; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - if (Math.abs(x - startx) > Math.abs(y - starty)) { - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - default: - throw new Error(`Unknown op: ${op}`); - } - } else if (op < 247) stack.push(op - 139); - else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else stack.push(stream.readInt32BE() / 65536); - } - }; - parse(); - if (open) path.closePath(); - return path; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'CFF'); - } -} - - - - - -let $55855d6d316b015e$var$SBIXImage = new $elh9A$restructure.Struct({ - originX: $elh9A$restructure.uint16, - originY: $elh9A$restructure.uint16, - type: new $elh9A$restructure.String(4), - data: new $elh9A$restructure.Buffer((t)=>t.parent.buflen - t._currentOffset) -}); -class $55855d6d316b015e$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ getImageForSize(size) { - for(let i = 0; i < this._font.sbix.imageTables.length; i++){ - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) break; - } - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - if (start === end) return null; - this._font.stream.pos = start; - return $55855d6d316b015e$var$SBIXImage.decode(this._font.stream, { - buflen: end - start - }); - } - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, { - height: size, - x: img.originX, - y: (this.bbox.minY - img.originY) * scale - }); - } - if (this._font.sbix.flags.renderOutlines) super.render(ctx, size); - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'SBIX'); - } -} - - - - - -class $42d9dbd2de9ee2d8$var$COLRLayer { - constructor(glyph, color){ - this.glyph = glyph; - this.color = color; - } -} -class $42d9dbd2de9ee2d8$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getBBox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for(let i = 0; i < this.layers.length; i++){ - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - return bbox; - } - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - while(low <= high){ - let mid = low + high >> 1; - var rec = colr.baseGlyphRecord[mid]; - if (this.id < rec.gid) high = mid - 1; - else if (this.id > rec.gid) low = mid + 1; - else { - var baseLayer = rec; - break; - } - } - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - return [ - new $42d9dbd2de9ee2d8$var$COLRLayer(g, color) - ]; - } - // otherwise, return an array of all the layers - let layers = []; - for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){ - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new $42d9dbd2de9ee2d8$var$COLRLayer(g, color)); - } - return layers; - } - render(ctx, size) { - for (let { glyph: glyph, color: color } of this.layers){ - ctx.fillColor([ - color.red, - color.green, - color.blue - ], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - return; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'COLR'); - } -} - - -const $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD = 0x8000; -const $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE = 0x4000; -const $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS = 0x2000; -const $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$POINTS_ARE_WORDS = 0x80; -const $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK = 0x7f; -const $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO = 0x80; -const $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS = 0x40; -const $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK = 0x3f; -class $7586bb9ea67c41d8$export$2e2bcd8739ae039 { - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for(var i = 0; i < this.font.fvar.axis.length; i++){ - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){ - let segment = this.font.avar.segment[i]; - for(let j = 0; j < segment.correspondence.length; j++){ - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord; - break; - } - } - } - return normalized; - } - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) return; - let { gvar: gvar } = this.font; - if (gid >= gvar.glyphCount) return; - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) return; - // Read the gvar data for this glyph - let { stream: stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) return; - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - if (tupleCount & $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - let origPoints = glyphPoints.map((pt)=>pt.copy()); - tupleCount &= $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK; - for(let i = 0; i < tupleCount; i++){ - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - if (tupleIndex & $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384); - } else { - if ((tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table'); - var tupleCoords = gvar.globalCoords[tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK]; - } - if (tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) { - var startCoords = []; - for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384); - var endCoords = []; - for(let a = 0; a < gvar.axisCount; a++)endCoords.push(stream.readInt16BE() / 16384); - } - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - var here = stream.pos; - stream.pos = offsetToData; - if (tupleIndex & $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints(); - else var points = sharedPoints; - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){ - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - else { - let outPoints = origPoints.map((pt)=>pt.copy()); - let hasDelta = glyphPoints.map(()=>false); - for(let i = 0; i < points.length; i++){ - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - for(let i = 0; i < glyphPoints.length; i++){ - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - offsetToData += tupleDataSize; - stream.pos = here; - } - } - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - if (count & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS) count = (count & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) + 1; - let fn = run & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - for(let j = 0; j < runCount && i < count; j++){ - point += fn.call(stream); - points[i++] = point; - } - } - return points; - } - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK) + 1; - if (run & $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO) i += runCount; - else { - let fn = run & $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream); - } - } - return deltas; - } - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar: gvar } = this.font; - let factor = 1; - for(let i = 0; i < gvar.axisCount; i++){ - if (tupleCoords[i] === 0) continue; - if (normalized[i] === 0) return 0; - if ((tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) === 0) { - if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0; - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0; - else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - return factor; - } - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) return; - let point = 0; - while(point < points.length){ - let firstPoint = point; - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while(!pt.endContour)pt = points[++endPoint]; - // find the first point that has a delta - while(point <= endPoint && !hasDelta[point])point++; - if (point > endPoint) continue; - let firstDelta = point; - let curDelta = point; - point++; - while(point <= endPoint){ - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - point++; - } - // shift contour if we only have a single delta - if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - point = endPoint + 1; - } - } - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) return; - let iterable = [ - 'x', - 'y' - ]; - for(let i = 0; i < iterable.length; i++){ - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - for(let p = p1; p <= p2; p++){ - let out = inPoints[p][k]; - if (out <= in1) out += out1 - in1; - else if (out >= in2) out += out2 - in2; - else out = out1 + (out - in1) * scale; - outPoints[p][k] = out; - } - } - } - } - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - if (deltaX === 0 && deltaY === 0) return; - for(let p = p1; p <= p2; p++)if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1; - let entryFormat = table.advanceWidthMapping.entryFormat; - ({ outerIndex: outerIndex, innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) return 0; - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) return 0; - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master]; - return netAdjustment; - } - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) return this.blendVectors.get(varData); - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - // outer loop steps through master designs to be blended - for(let master = 0; master < varData.regionIndexCount; master++){ - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - // inner loop steps through axes in this region - for(let j = 0; j < axes.length; j++){ - let axis = axes[j]; - let axisScalar; - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1; - else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1; - else if (axis.peakCoord === 0) axisScalar = 1; - else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0; - else { - if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1; - else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON); - else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - // take product of all the axis scalars - scalar *= axisScalar; - } - blendVector[master] = scalar; - } - this.blendVectors.set(varData, blendVector); - return blendVector; - } - constructor(font, coords){ - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } -} - - - - -const $a8ac370803cb82cf$var$resolved = Promise.resolve(); -class $a8ac370803cb82cf$export$2e2bcd8739ae039 { - includeGlyph(glyph) { - if (typeof glyph === 'object') glyph = glyph.id; - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - return this.mapping[glyph]; - } - constructor(font){ - this.font = font; - this.glyphs = []; - this.mapping = {}; - // always include the missing glyph - this.includeGlyph(0); - } -} - - - - - -// Flags for simple glyphs -const $2784eedf0b35a048$var$ON_CURVE = 1; -const $2784eedf0b35a048$var$X_SHORT_VECTOR = 2; -const $2784eedf0b35a048$var$Y_SHORT_VECTOR = 4; -const $2784eedf0b35a048$var$REPEAT = 8; -const $2784eedf0b35a048$var$SAME_X = 16; -const $2784eedf0b35a048$var$SAME_Y = 32; -class $2784eedf0b35a048$var$Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - static encode(stream, value) { - if (value >= 0 && value <= 255) stream.writeUInt8(value); - else stream.writeInt16BE(value); - } -} -let $2784eedf0b35a048$var$Glyf = new $elh9A$restructure.Struct({ - numberOfContours: $elh9A$restructure.int16, - xMin: $elh9A$restructure.int16, - yMin: $elh9A$restructure.int16, - xMax: $elh9A$restructure.int16, - yMax: $elh9A$restructure.int16, - endPtsOfContours: new $elh9A$restructure.Array($elh9A$restructure.uint16, 'numberOfContours'), - instructions: new $elh9A$restructure.Array($elh9A$restructure.uint8, $elh9A$restructure.uint16), - flags: new $elh9A$restructure.Array($elh9A$restructure.uint8, 0), - xPoints: new $elh9A$restructure.Array($2784eedf0b35a048$var$Point, 0), - yPoints: new $elh9A$restructure.Array($2784eedf0b35a048$var$Point, 0) -}); -class $2784eedf0b35a048$export$2e2bcd8739ae039 { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - for(let i = 0; i < path.commands.length; i++){ - let c = path.commands[i]; - for(let j = 0; j < c.args.length; j += 2){ - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - if (x === midX && y === midY) continue; - } - } - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $2784eedf0b35a048$var$ON_CURVE; - flag = this._encodePoint(x, lastX, xPoints, flag, $2784eedf0b35a048$var$X_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, $2784eedf0b35a048$var$Y_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_Y); - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= $2784eedf0b35a048$var$REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - flags.push(flag); - lastFlag = flag; - } - lastX = x; - lastY = y; - pointCount++; - } - if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1); - } - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1); - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - let size = $2784eedf0b35a048$var$Glyf.size(glyf); - let tail = 4 - size % 4; - let stream = new $elh9A$restructure.EncodeStream(size + tail); - $2784eedf0b35a048$var$Glyf.encode(stream, glyf); - // Align to 4-byte length - if (tail !== 0) stream.fill(0, tail); - return stream.buffer; - } - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - if (value === last) flag |= sameFlag; - else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) diff = -diff; - else flag |= sameFlag; - } - points.push(diff); - } - return flag; - } -} - - -class $fe042f4b88f46896$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - let buffer = stream.readBuffer(nextOffset - curOffset); - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components){ - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - this.offset += buffer.length; - return this.glyf.length - 1; - } - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - this.hmtx = { - metrics: [], - bearings: [] - }; - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]); - let maxp = (0, ($parcel$interopDefault($elh9A$clone)))(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - this.loca.offsets.push(this.offset); - let head = (0, ($parcel$interopDefault($elh9A$clone)))(this.font.head); - head.indexToLocFormat = this.loca.version; - let hhea = (0, ($parcel$interopDefault($elh9A$clone)))(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - // TODO: subset prep, cvt, fpgm? - return (0, $df50e1efe10a1247$export$2e2bcd8739ae039).toBuffer({ - tables: { - head: head, - hhea: hhea, - loca: this.loca, - maxp: maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - } - }); - } - constructor(font){ - super(font); - this.glyphEncoder = new (0, $2784eedf0b35a048$export$2e2bcd8739ae039); - } -} - - - - - - -class $ec40f80c07a4e08a$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - for (let gid of this.glyphs){ - this.charstrings.push(this.cff.getCharString(gid)); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedGsubrs)gsubrs[subr] = true; - } - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - subsetSubrs(subrs, used) { - let res = []; - for(let i = 0; i < subrs.length; i++){ - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else res.push(new Uint8Array([ - 11 - ])); // return - } - return res; - } - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs){ - let fd = this.cff.fdForGlyph(gid); - if (fd == null) continue; - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true; - } - for(let i = 0; i < topDict.FDArray.length; i++){ - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - return; - } - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs){ - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[subr] = true; - } - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - topDict.FDArray = [ - { - Private: privateDict - } - ]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [ - { - first: 0, - fd: 0 - } - ], - sentinel: this.charstrings.length - }; - } - addString(string) { - if (!string) return null; - if (!this.strings) this.strings = []; - this.strings.push(string); - return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length + this.strings.length - 1; - } - encode() { - this.subsetCharstrings(); - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [ - { - first: 1, - nLeft: this.charstrings.length - 2 - } - ] - }; - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - for (let key of [ - 'version', - 'Notice', - 'Copyright', - 'FullName', - 'FamilyName', - 'Weight', - 'PostScript', - 'BaseFontName', - 'FontName' - ])topDict[key] = this.addString(this.cff.string(topDict[key])); - topDict.ROS = [ - this.addString('Adobe'), - this.addString('Identity'), - 0 - ]; - topDict.CIDCount = this.charstrings.length; - if (this.cff.isCIDFont) this.subsetFontdict(topDict); - else this.createCIDFontdict(topDict); - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [ - this.cff.postscriptName - ], - topDictIndex: [ - topDict - ], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - return (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).toBuffer(top); - } - constructor(font){ - super(font); - this.cff = this.font['CFF ']; - if (!this.cff) throw new Error('Not a CFF Font'); - } -} - - - - -class $0a8ef2660a6ce4b6$export$2e2bcd8739ae039 { - static probe(buffer) { - let format = (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - _getTable(table) { - if (!(table.tag in this._tables)) try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if ($59aa4ed98453e1d4$export$bd5c5d8b8dcafd78) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - return this._tables[table.tag]; - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - return null; - } - _decodeDirectory() { - return this.directory = (0, $df50e1efe10a1247$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _decodeTable(table) { - let pos = this.stream.pos; - let stream = this._getTableStream(table.tag); - let result = (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[table.tag].decode(stream, this, table.length); - this.stream.pos = pos; - return result; - } - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ getName(key, lang = this.defaultLanguage || $59aa4ed98453e1d4$export$42940898df819940) { - let record = this.name && this.name.records[key]; - if (record) // Attempt to retrieve the entry, depending on which translation is available: - return record[lang] || record[this.defaultLanguage] || record[$59aa4ed98453e1d4$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null; - return null; - } - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ get postscriptName() { - return this.getName('postscriptName'); - } - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ get fullName() { - return this.getName('fullName'); - } - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ get familyName() { - return this.getName('fontFamily'); - } - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ get subfamilyName() { - return this.getName('fontSubfamily'); - } - /** - * The font's copyright information - * @type {string} - */ get copyright() { - return this.getName('copyright'); - } - /** - * The font's version number - * @type {string} - */ get version() { - return this.getName('version'); - } - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ get ascent() { - return this.hhea.ascent; - } - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ get descent() { - return this.hhea.descent; - } - /** - * The amount of space that should be included between lines - * @type {number} - */ get lineGap() { - return this.hhea.lineGap; - } - /** - * The offset from the normal underline position that should be used - * @type {number} - */ get underlinePosition() { - return this.post.underlinePosition; - } - /** - * The weight of the underline that should be used - * @type {number} - */ get underlineThickness() { - return this.post.underlineThickness; - } - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ get italicAngle() { - return this.post.italicAngle; - } - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - /** - * The number of glyphs in the font. - * @type {number} - */ get numGlyphs() { - return this.maxp.numGlyphs; - } - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ get unitsPerEm() { - return this.head.unitsPerEm; - } - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ get bbox() { - return Object.freeze(new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - get _cmapProcessor() { - return new (0, $0d6e160064c86e50$export$2e2bcd8739ae039)(this.cmap); - } - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [ - codePoint - ]); - } - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - while(idx <= len){ - let code = 0; - let nextState = 0; - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; - } else idx++; - if (state === 0 && nextState === 1) // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [ - last, - code - ])); - else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - last = code; - state = nextState; - } - return glyphs; - } - get _layoutEngine() { - return new (0, $9d641258c9d7180d$export$2e2bcd8739ae039)(this); - } - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) this._glyphs[glyph] = new (0, $f680320fa07ef53d$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new (0, $7ee0705195f3b047$export$2e2bcd8739ae039)(glyph, characters, this); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) this._glyphs[glyph] = new (0, $55855d6d316b015e$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new (0, $42d9dbd2de9ee2d8$export$2e2bcd8739ae039)(glyph, characters, this); - else this._getBaseGlyph(glyph, characters); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a Subset for this font. - * @return {Subset} - */ createSubset() { - if (this.directory.tables['CFF ']) return new (0, $ec40f80c07a4e08a$export$2e2bcd8739ae039)(this); - return new (0, $fe042f4b88f46896$export$2e2bcd8739ae039)(this); - } - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ get variationAxes() { - let res = {}; - if (!this.fvar) return res; - for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - return res; - } - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ get namedVariations() { - let res = {}; - if (!this.fvar) return res; - for (let instance of this.fvar.instance){ - let settings = {}; - for(let i = 0; i < this.fvar.axis.length; i++){ - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - res[instance.name.en] = settings; - } - return res; - } - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ getVariation(settings) { - if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - if (typeof settings === 'string') settings = this.namedVariations[settings]; - if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.'); - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i)=>{ - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - else return axis.defaultValue; - }); - let stream = new $elh9A$restructure.DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - let font = new $0a8ef2660a6ce4b6$export$2e2bcd8739ae039(stream, coords); - font._tables = this._tables; - return font; - } - get _variationProcessor() { - if (!this.fvar) return null; - let variationCoords = this.variationCoords; - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) return null; - if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue); - return new (0, $7586bb9ea67c41d8$export$2e2bcd8739ae039)(this, variationCoords); - } - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } - constructor(stream, variationCoords = null){ - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - // define properties for each table to lazily parse - for(let tag in this.directory.tables){ - let table = this.directory.tables[tag]; - if ((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag] && table.length > 0) Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } -} -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_cmapProcessor", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "characterSet", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_layoutEngine", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "variationAxes", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "namedVariations", null); -(0, $elh9A$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_variationProcessor", null); - - - - - - -let $89f72d2d7c9afc0d$var$WOFFDirectoryEntry = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - offset: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, 'void', { - type: 'global' - }), - compLength: $elh9A$restructure.uint32, - length: $elh9A$restructure.uint32, - origChecksum: $elh9A$restructure.uint32 -}); -let $89f72d2d7c9afc0d$var$WOFFDirectory = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - flavor: $elh9A$restructure.uint32, - length: $elh9A$restructure.uint32, - numTables: $elh9A$restructure.uint16, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - totalSfntSize: $elh9A$restructure.uint32, - majorVersion: $elh9A$restructure.uint16, - minorVersion: $elh9A$restructure.uint16, - metaOffset: $elh9A$restructure.uint32, - metaLength: $elh9A$restructure.uint32, - metaOrigLength: $elh9A$restructure.uint32, - privOffset: $elh9A$restructure.uint32, - privLength: $elh9A$restructure.uint32, - tables: new $elh9A$restructure.Array($89f72d2d7c9afc0d$var$WOFFDirectoryEntry, 'numTables') -}); -$89f72d2d7c9afc0d$var$WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -var $89f72d2d7c9afc0d$export$2e2bcd8739ae039 = $89f72d2d7c9afc0d$var$WOFFDirectory; - - - - - - -class $8a0a49baaf5d834d$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOFF'; - } - _decodeDirectory() { - this.directory = (0, $89f72d2d7c9afc0d$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = (0, ($parcel$interopDefault($elh9A$tinyinflate)))(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new $elh9A$restructure.DecodeStream(buf); - } else return this.stream; - } - return null; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF'); - } -} - - - - - - - - - -class $44b9edca0e403d6d$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - _getCBox() { - return this.path.bbox; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} - - - -const $2f0bfd9a5c1d7b58$var$Base128 = { - decode (stream) { - let result = 0; - let iterable = [ - 0, - 1, - 2, - 3, - 4 - ]; - for(let j = 0; j < iterable.length; j++){ - let i = iterable[j]; - let code = stream.readUInt8(); - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) throw new Error('Overflow'); - result = result << 7 | code & 0x7f; - if ((code & 0x80) === 0) return result; - } - throw new Error('Bad base 128 number'); - } -}; -let $2f0bfd9a5c1d7b58$var$knownTags = [ - 'cmap', - 'head', - 'hhea', - 'hmtx', - 'maxp', - 'name', - 'OS/2', - 'post', - 'cvt ', - 'fpgm', - 'glyf', - 'loca', - 'prep', - 'CFF ', - 'VORG', - 'EBDT', - 'EBLC', - 'gasp', - 'hdmx', - 'kern', - 'LTSH', - 'PCLT', - 'VDMX', - 'vhea', - 'vmtx', - 'BASE', - 'GDEF', - 'GPOS', - 'GSUB', - 'EBSC', - 'JSTF', - 'MATH', - 'CBDT', - 'CBLC', - 'COLR', - 'CPAL', - 'SVG ', - 'sbix', - 'acnt', - 'avar', - 'bdat', - 'bloc', - 'bsln', - 'cvar', - 'fdsc', - 'feat', - 'fmtx', - 'fvar', - 'gvar', - 'hsty', - 'just', - 'lcar', - 'mort', - 'morx', - 'opbd', - 'prop', - 'trak', - 'Zapf', - 'Silf', - 'Glat', - 'Gloc', - 'Feat', - 'Sill' -]; -let $2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry = new $elh9A$restructure.Struct({ - flags: $elh9A$restructure.uint8, - customTag: new $elh9A$restructure.Optional(new $elh9A$restructure.String(4), (t)=>(t.flags & 0x3f) === 0x3f), - tag: (t)=>t.customTag || $2f0bfd9a5c1d7b58$var$knownTags[t.flags & 0x3f], - length: $2f0bfd9a5c1d7b58$var$Base128, - transformVersion: (t)=>t.flags >>> 6 & 0x03, - transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new $elh9A$restructure.Optional($2f0bfd9a5c1d7b58$var$Base128, (t)=>t.transformed) -}); -let $2f0bfd9a5c1d7b58$var$WOFF2Directory = new $elh9A$restructure.Struct({ - tag: new $elh9A$restructure.String(4), - flavor: $elh9A$restructure.uint32, - length: $elh9A$restructure.uint32, - numTables: $elh9A$restructure.uint16, - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint16), - totalSfntSize: $elh9A$restructure.uint32, - totalCompressedSize: $elh9A$restructure.uint32, - majorVersion: $elh9A$restructure.uint16, - minorVersion: $elh9A$restructure.uint16, - metaOffset: $elh9A$restructure.uint32, - metaLength: $elh9A$restructure.uint32, - metaOrigLength: $elh9A$restructure.uint32, - privOffset: $elh9A$restructure.uint32, - privLength: $elh9A$restructure.uint32, - tables: new $elh9A$restructure.Array($2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry, 'numTables') -}); -$2f0bfd9a5c1d7b58$var$WOFF2Directory.process = function() { - let tables = {}; - for(let i = 0; i < this.tables.length; i++){ - let table = this.tables[i]; - tables[table.tag] = table; - } - return this.tables = tables; -}; -var $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039 = $2f0bfd9a5c1d7b58$var$WOFF2Directory; - - - -class $333fb94547d9fb5c$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOF2'; - } - _decodeDirectory() { - this.directory = (0, $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039).decode(this.stream); - this._dataPos = this.stream.pos; - } - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - let decompressedSize = 0; - for(let tag in this.directory.tables){ - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; - } - let decompressed = (0, ($parcel$interopDefault($elh9A$brotlidecompressjs)))(buffer, decompressedSize); - if (!decompressed) throw new Error('Error decoding compressed data in WOFF2'); - this.stream = new $elh9A$restructure.DecodeStream(decompressed); - this._decompressed = true; - } - } - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) this._transformGlyfTable(); - return this._glyphs[glyph] = new (0, $44b9edca0e403d6d$export$2e2bcd8739ae039)(glyph, characters, this); - } else return super._getBaseGlyph(glyph, characters); - } - } - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = $333fb94547d9fb5c$var$GlyfTable.decode(this.stream); - let glyphs = []; - for(let index = 0; index < table.numGlyphs; index++){ - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - if (nContours > 0) { - let nPoints = []; - let totalPoints = 0; - for(let i = 0; i < nContours; i++){ - let r = $333fb94547d9fb5c$var$read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - glyph.points = $333fb94547d9fb5c$var$decodeTriplet(table.flags, table.glyphs, totalPoints); - for(let i = 0; i < nContours; i++)glyph.points[nPoints[i] - 1].endContour = true; - var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } else if (nContours < 0) { - let haveInstructions = (0, $f680320fa07ef53d$export$2e2bcd8739ae039).prototype._decodeComposite.call({ - _font: this - }, glyph, table.composites); - if (haveInstructions) var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } - glyphs.push(glyph); - } - this._transformedGlyphs = glyphs; - } - constructor(...args){ - super(...args); - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} -// Special class that accepts a length and returns a sub-stream for that data -class $333fb94547d9fb5c$var$Substream { - decode(stream, parent) { - return new $elh9A$restructure.DecodeStream(this._buf.decode(stream, parent)); - } - constructor(length){ - this.length = length; - this._buf = new $elh9A$restructure.Buffer(length); - } -} -// This struct represents the entire glyf table -let $333fb94547d9fb5c$var$GlyfTable = new $elh9A$restructure.Struct({ - version: $elh9A$restructure.uint32, - numGlyphs: $elh9A$restructure.uint16, - indexFormat: $elh9A$restructure.uint16, - nContourStreamSize: $elh9A$restructure.uint32, - nPointsStreamSize: $elh9A$restructure.uint32, - flagStreamSize: $elh9A$restructure.uint32, - glyphStreamSize: $elh9A$restructure.uint32, - compositeStreamSize: $elh9A$restructure.uint32, - bboxStreamSize: $elh9A$restructure.uint32, - instructionStreamSize: $elh9A$restructure.uint32, - nContours: new $333fb94547d9fb5c$var$Substream('nContourStreamSize'), - nPoints: new $333fb94547d9fb5c$var$Substream('nPointsStreamSize'), - flags: new $333fb94547d9fb5c$var$Substream('flagStreamSize'), - glyphs: new $333fb94547d9fb5c$var$Substream('glyphStreamSize'), - composites: new $333fb94547d9fb5c$var$Substream('compositeStreamSize'), - bboxes: new $333fb94547d9fb5c$var$Substream('bboxStreamSize'), - instructions: new $333fb94547d9fb5c$var$Substream('instructionStreamSize') -}); -const $333fb94547d9fb5c$var$WORD_CODE = 253; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2 = 254; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1 = 255; -const $333fb94547d9fb5c$var$LOWEST_U_CODE = 253; -function $333fb94547d9fb5c$var$read255UInt16(stream) { - let code = stream.readUInt8(); - if (code === $333fb94547d9fb5c$var$WORD_CODE) return stream.readUInt16BE(); - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE; - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE * 2; - return code; -} -function $333fb94547d9fb5c$var$withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} -function $333fb94547d9fb5c$var$decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - for(let i = 0; i < nPoints; i++){ - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - if (flag < 10) { - dx = 0; - dy = $333fb94547d9fb5c$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - } else if (flag < 20) { - dx = $333fb94547d9fb5c$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); - dy = 0; - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - } else if (flag < 120) { - var b0 = flag - 84; - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - } else { - dx = $333fb94547d9fb5c$var$withSign(flag, glyphs.readUInt16BE()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, glyphs.readUInt16BE()); - } - x += dx; - y += dy; - res.push(new (0, $f680320fa07ef53d$export$baf26146a414f24a)(onCurve, false, x, y)); - } - return res; -} - - - - - - - - -let $e0b2de9958441c02$var$TTCHeader = new $elh9A$restructure.VersionedStruct($elh9A$restructure.uint32, { - 0x00010000: { - numFonts: $elh9A$restructure.uint32, - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint32, 'numFonts') - }, - 0x00020000: { - numFonts: $elh9A$restructure.uint32, - offsets: new $elh9A$restructure.Array($elh9A$restructure.uint32, 'numFonts'), - dsigTag: $elh9A$restructure.uint32, - dsigLength: $elh9A$restructure.uint32, - dsigOffset: $elh9A$restructure.uint32 - } -}); -class $e0b2de9958441c02$export$2e2bcd8739ae039 { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'ttcf'; - } - getFont(name) { - for (let offset of this.header.offsets){ - let stream = new $elh9A$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let offset of this.header.offsets){ - let stream = new $elh9A$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'TTC'); - this.stream = stream; - if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection'); - this.header = $e0b2de9958441c02$var$TTCHeader.decode(stream); - } -} - - - - - -let $d0fe640dc6c78783$var$DFontName = new $elh9A$restructure.String($elh9A$restructure.uint8); -let $d0fe640dc6c78783$var$DFontData = new $elh9A$restructure.Struct({ - len: $elh9A$restructure.uint32, - buf: new $elh9A$restructure.Buffer('len') -}); -let $d0fe640dc6c78783$var$Ref = new $elh9A$restructure.Struct({ - id: $elh9A$restructure.uint16, - nameOffset: $elh9A$restructure.int16, - attr: $elh9A$restructure.uint8, - dataOffset: $elh9A$restructure.uint24, - handle: $elh9A$restructure.uint32 -}); -let $d0fe640dc6c78783$var$Type = new $elh9A$restructure.Struct({ - name: new $elh9A$restructure.String(4), - maxTypeIndex: $elh9A$restructure.uint16, - refList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, new $elh9A$restructure.Array($d0fe640dc6c78783$var$Ref, (t)=>t.maxTypeIndex + 1), { - type: 'parent' - }) -}); -let $d0fe640dc6c78783$var$TypeList = new $elh9A$restructure.Struct({ - length: $elh9A$restructure.uint16, - types: new $elh9A$restructure.Array($d0fe640dc6c78783$var$Type, (t)=>t.length + 1) -}); -let $d0fe640dc6c78783$var$DFontMap = new $elh9A$restructure.Struct({ - reserved: new $elh9A$restructure.Reserved($elh9A$restructure.uint8, 24), - typeList: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, $d0fe640dc6c78783$var$TypeList), - nameListOffset: new $elh9A$restructure.Pointer($elh9A$restructure.uint16, 'void') -}); -let $d0fe640dc6c78783$var$DFontHeader = new $elh9A$restructure.Struct({ - dataOffset: $elh9A$restructure.uint32, - map: new $elh9A$restructure.Pointer($elh9A$restructure.uint32, $d0fe640dc6c78783$var$DFontMap), - dataLength: $elh9A$restructure.uint32, - mapLength: $elh9A$restructure.uint32 -}); -class $d0fe640dc6c78783$export$2e2bcd8739ae039 { - static probe(buffer) { - let stream = new $elh9A$restructure.DecodeStream(buffer); - try { - var header = $d0fe640dc6c78783$var$DFontHeader.decode(stream); - } catch (e) { - return false; - } - for (let type of header.map.typeList.types){ - if (type.name === 'sfnt') return true; - } - return false; - } - getFont(name) { - if (!this.sfnt) return null; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $elh9A$restructure.DecodeStream(this.stream.buffer.slice(pos)); - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $elh9A$restructure.DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $elh9A$swchelperscjs_define_propertycjs._)(this, "type", 'DFont'); - this.stream = stream; - this.header = $d0fe640dc6c78783$var$DFontHeader.decode(this.stream); - for (let type of this.header.map.typeList.types){ - for (let ref of type.refList)if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = $d0fe640dc6c78783$var$DFontName.decode(this.stream); - } else ref.name = null; - if (type.name === 'sfnt') this.sfnt = type; - } - } -} - - -// Register font formats -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $8a0a49baaf5d834d$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $333fb94547d9fb5c$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $e0b2de9958441c02$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $d0fe640dc6c78783$export$2e2bcd8739ae039)); -$parcel$exportWildcard(module.exports, $59aa4ed98453e1d4$exports); -$parcel$exportWildcard(module.exports, $f39726ff40304956$exports); - - -//# sourceMappingURL=main.cjs.map diff --git a/skills/flight-finder/node_modules/fontkit/dist/main.cjs.map b/skills/flight-finder/node_modules/fontkit/dist/main.cjs.map deleted file mode 100644 index 295a54c..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/main.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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AAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QA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","sources":["src/node.js","src/base.js","src/fs.js","src/TTFFont.js","src/decorators.js","src/tables/directory.js","src/tables/index.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/tables/name.js","src/encodings.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFFont.js","src/cff/CFFIndex.js","src/cff/CFFTop.js","src/cff/CFFDict.js","src/cff/CFFOperand.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/variations.js","src/tables/opentype.js","src/tables/VORG.js","src/tables/EBLC.js","src/tables/EBDT.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/bsln.js","src/tables/aat.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/CmapProcessor.js","src/utils.js","src/layout/LayoutEngine.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/layout/GlyphRun.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphPosition.js","src/aat/AATLayoutEngine.js","src/aat/AATFeatureMap.js","src/aat/AATMorxProcessor.js","src/aat/AATStateMachine.js","src/aat/AATLookupTable.js","src/opentype/OTLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/index.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/shapers/HangulShaper.js","src/opentype/GlyphInfo.js","src/opentype/OTProcessor.js","src/opentype/GlyphIterator.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/indic.json","src/opentype/shapers/use.json","src/opentype/shapers/indic-data.js","src/opentype/shapers/UniversalShaper.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/glyph/TTFGlyph.js","src/glyph/Glyph.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/TTFSubset.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/CFFSubset.js","src/WOFFFont.js","src/tables/WOFFDirectory.js","src/WOFF2Font.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/TrueTypeCollection.js","src/DFont.js"],"sourcesContent":["import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base';\nimport { open, openSync } from './fs';\nimport TTFFont from './TTFFont';\nimport WOFFFont from './WOFFFont';\nimport WOFF2Font from './WOFF2Font';\nimport TrueTypeCollection from './TrueTypeCollection';\nimport DFont from './DFont';\n\n// Register font formats\nregisterFormat(TTFFont);\nregisterFormat(WOFFFont);\nregisterFormat(WOFF2Font);\nregisterFormat(TrueTypeCollection);\nregisterFormat(DFont);\n\nexport * from './base';\nexport * from './fs';\n","import {DecodeStream} from 'restructure';\n\nexport let logErrors = false;\n\nlet formats = [];\nexport function registerFormat(format) {\n formats.push(format);\n};\n\nexport function create(buffer, postscriptName) {\n for (let i = 0; i < formats.length; i++) {\n let format = formats[i];\n if (format.probe(buffer)) {\n let font = new format(new DecodeStream(buffer));\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n\n return font;\n }\n }\n\n throw new Error('Unknown font format');\n};\n\nexport let defaultLanguage = 'en';\nexport function setDefaultLanguage(lang = 'en') {\n defaultLanguage = lang;\n};\n","import { create } from './base';\nimport fs from 'fs';\n\nexport function openSync(filename, postscriptName) {\n let buffer = fs.readFileSync(filename);\n return create(buffer, postscriptName);\n}\n\nexport async function open(filename, postscriptName, callback) {\n if (typeof postscriptName === 'function') {\n callback = postscriptName;\n postscriptName = null;\n }\n\n let buffer = await fs.promises.readFile(filename);\n return create(buffer, postscriptName);\n}\n","import * as r from 'restructure';\nimport { cache } from './decorators';\nimport * as fontkit from './base';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport CmapProcessor from './CmapProcessor';\nimport LayoutEngine from './layout/LayoutEngine';\nimport TTFGlyph from './glyph/TTFGlyph';\nimport CFFGlyph from './glyph/CFFGlyph';\nimport SBIXGlyph from './glyph/SBIXGlyph';\nimport COLRGlyph from './glyph/COLRGlyph';\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\nimport TTFSubset from './subset/TTFSubset';\nimport CFFSubset from './subset/CFFSubset';\nimport BBox from './glyph/BBox';\nimport { asciiDecoder } from './utils';\n\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\nexport default class TTFFont {\n type = 'TTF';\n\n static probe(buffer) {\n let format = asciiDecoder.decode(buffer.slice(0, 4));\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n }\n\n constructor(stream, variationCoords = null) {\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n this._decodeDirectory();\n\n // define properties for each table to lazily parse\n for (let tag in this.directory.tables) {\n let table = this.directory.tables[tag];\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n\n setDefaultLanguage(lang = null) {\n this.defaultLanguage = lang;\n }\n\n _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(`Error decoding table ${table.tag}`);\n console.error(e.stack);\n }\n }\n }\n\n return this._tables[table.tag];\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n\n return null;\n }\n\n _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {_startOffset: 0});\n }\n\n _decodeTable(table) {\n let pos = this.stream.pos;\n\n let stream = this._getTableStream(table.tag);\n let result = tables[table.tag].decode(stream, this, table.length);\n\n this.stream.pos = pos;\n return result;\n }\n\n /**\n * Gets a string from the font's `name` table\n * `lang` is a BCP-47 language code.\n * @return {string}\n */\n getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\n let record = this.name && this.name.records[key];\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return (\n record[lang]\n || record[this.defaultLanguage]\n || record[fontkit.defaultLanguage]\n || record['en']\n || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null\n );\n }\n\n return null;\n }\n\n /**\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n * @type {string}\n */\n get postscriptName() {\n return this.getName('postscriptName');\n }\n\n /**\n * The font's full name, e.g. \"Helvetica Bold\"\n * @type {string}\n */\n get fullName() {\n return this.getName('fullName');\n }\n\n /**\n * The font's family name, e.g. \"Helvetica\"\n * @type {string}\n */\n get familyName() {\n return this.getName('fontFamily');\n }\n\n /**\n * The font's sub-family, e.g. \"Bold\".\n * @type {string}\n */\n get subfamilyName() {\n return this.getName('fontSubfamily');\n }\n\n /**\n * The font's copyright information\n * @type {string}\n */\n get copyright() {\n return this.getName('copyright');\n }\n\n /**\n * The font's version number\n * @type {string}\n */\n get version() {\n return this.getName('version');\n }\n\n /**\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n * @type {number}\n */\n get ascent() {\n return this.hhea.ascent;\n }\n\n /**\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n * @type {number}\n */\n get descent() {\n return this.hhea.descent;\n }\n\n /**\n * The amount of space that should be included between lines\n * @type {number}\n */\n get lineGap() {\n return this.hhea.lineGap;\n }\n\n /**\n * The offset from the normal underline position that should be used\n * @type {number}\n */\n get underlinePosition() {\n return this.post.underlinePosition;\n }\n\n /**\n * The weight of the underline that should be used\n * @type {number}\n */\n get underlineThickness() {\n return this.post.underlineThickness;\n }\n\n /**\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\n * @type {number}\n */\n get italicAngle() {\n return this.post.italicAngle;\n }\n\n /**\n * The height of capital letters above the baseline.\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n * @type {number}\n */\n get capHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n\n /**\n * The height of lower case letters in the font.\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n * @type {number}\n */\n get xHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n\n /**\n * The number of glyphs in the font.\n * @type {number}\n */\n get numGlyphs() {\n return this.maxp.numGlyphs;\n }\n\n /**\n * The size of the font’s internal coordinate grid\n * @type {number}\n */\n get unitsPerEm() {\n return this.head.unitsPerEm;\n }\n\n /**\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n\n @cache\n get _cmapProcessor() {\n return new CmapProcessor(this.cmap);\n }\n\n /**\n * An array of all of the unicode code points supported by the font.\n * @type {number[]}\n */\n @cache\n get characterSet() {\n return this._cmapProcessor.getCharacterSet();\n }\n\n /**\n * Returns whether there is glyph in the font for the given unicode code point.\n *\n * @param {number} codePoint\n * @return {boolean}\n */\n hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n\n /**\n * Maps a single unicode code point to a Glyph object.\n * Does not perform any advanced substitutions (there is no context to do so).\n *\n * @param {number} codePoint\n * @return {Glyph}\n */\n glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n\n /**\n * Returns an array of Glyph objects for the given string.\n * This is only a one-to-one mapping from characters to glyphs.\n * For most uses, you should use font.layout (described below), which\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\n *\n * @param {string} string\n * @return {Glyph[]}\n */\n glyphsForString(string) {\n let glyphs = [];\n let len = string.length;\n let idx = 0;\n let last = -1;\n let state = -1;\n\n while (idx <= len) {\n let code = 0;\n let nextState = 0;\n\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n }\n\n // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\n } else {\n idx++;\n }\n\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n\n last = code;\n state = nextState;\n }\n\n return glyphs;\n }\n\n @cache\n get _layoutEngine() {\n return new LayoutEngine(this);\n }\n\n /**\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n *\n * @param {string} string\n * @param {string[]} [userFeatures]\n * @param {string} [script]\n * @param {string} [language]\n * @param {string} [direction]\n * @return {GlyphRun}\n */\n layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n\n /**\n * Returns an array of strings that map to the given glyph id.\n * @param {number} gid - glyph id\n */\n stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n\n /**\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n * (or mapped AAT tags) supported by the font.\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n *\n * @type {string[]}\n */\n get availableFeatures() {\n return this._layoutEngine.getAvailableFeatures();\n }\n\n getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n }\n\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a glyph object for the given glyph id.\n * You can pass the array of code points this glyph represents for\n * your use later, and it will be stored in the glyph object.\n *\n * @param {number} glyph\n * @param {number[]} characters\n * @return {Glyph}\n */\n getGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n\n } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a Subset for this font.\n * @return {Subset}\n */\n createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n\n return new TTFSubset(this);\n }\n\n /**\n * Returns an object describing the available variation axes\n * that this font supports. Keys are setting tags, and values\n * contain the axis name, range, and default value.\n *\n * @type {object}\n */\n @cache\n get variationAxes() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let axis of this.fvar.axis) {\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n\n return res;\n }\n\n /**\n * Returns an object describing the named variation instances\n * that the font designer has specified. Keys are variation names\n * and values are the variation settings for this instance.\n *\n * @type {object}\n */\n @cache\n get namedVariations() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let instance of this.fvar.instance) {\n let settings = {};\n for (let i = 0; i < this.fvar.axis.length; i++) {\n let axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n\n res[instance.name.en] = settings;\n }\n\n return res;\n }\n\n /**\n * Returns a new font with the given variation settings applied.\n * Settings can either be an instance name, or an object containing\n * variation tags as specified by the `variationAxes` property.\n *\n * @param {object} settings\n * @return {TTFFont}\n */\n getVariation(settings) {\n if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n }\n\n // normalize the coordinates\n let coords = this.fvar.axis.map((axis, i) => {\n let axisTag = axis.axisTag.trim();\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n\n let font = new TTFFont(stream, coords);\n font._tables = this._tables;\n\n return font;\n }\n\n @cache\n get _variationProcessor() {\n if (!this.fvar) {\n return null;\n }\n\n let variationCoords = this.variationCoords;\n\n // Ignore if no variation coords and not CFF2\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\n }\n\n return new GlyphVariationProcessor(this, variationCoords);\n }\n\n // Standardized format plugin API\n getFont(name) {\n return this.getVariation(name);\n }\n}\n","/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nexport function cache(target, key, descriptor) {\n if (descriptor.get) {\n let get = descriptor.get;\n descriptor.get = function() {\n let value = get.call(this);\n Object.defineProperty(this, key, { value });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n let fn = descriptor.value;\n\n return {\n get() {\n let cache = new Map;\n function memoized(...args) {\n let key = args.length > 0 ? args[0] : 'value';\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n let result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n Object.defineProperty(this, key, {value: memoized});\n return memoized;\n }\n };\n }\n}\n","import * as r from 'restructure';\nimport Tables from './';\n\nlet TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),\n length: r.uint32\n});\n\nlet Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nDirectory.preEncode = function() {\n if (!Array.isArray(this.tables)) {\n let tables = [];\n for (let tag in this.tables) {\n let table = this.tables[tag];\n if (table) {\n tables.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(Tables[tag], table),\n length: Tables[tag].size(table)\n });\n }\n }\n \n this.tables = tables;\n }\n\n this.tag = 'true';\n this.numTables = this.tables.length;\n\n let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\n let maxPowerOf2 = Math.pow(2, maxExponentFor2);\n\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nexport default Directory;\n","let tables = {};\nexport default tables;\n\n// Required Tables\nimport cmap from './cmap';\nimport head from './head';\nimport hhea from './hhea';\nimport hmtx from './hmtx';\nimport maxp from './maxp';\nimport name from './name';\nimport OS2 from './OS2';\nimport post from './post';\n\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = name;\ntables['OS/2'] = OS2;\ntables.post = post;\n\n\n// TrueType Outlines\nimport cvt from './cvt';\nimport fpgm from './fpgm';\nimport loca from './loca';\nimport prep from './prep';\nimport glyf from './glyf';\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf;\n\n\n// PostScript Outlines\nimport CFFFont from '../cff/CFFFont';\nimport VORG from './VORG';\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG;\n\n\n// Bitmap Glyphs\nimport EBLC from './EBLC';\nimport sbix from './sbix';\nimport COLR from './COLR';\nimport CPAL from './CPAL';\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL;\n\n\n// Advanced OpenType Tables\nimport BASE from './BASE';\nimport GDEF from './GDEF';\nimport GPOS from './GPOS';\nimport GSUB from './GSUB';\nimport JSTF from './JSTF';\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF;\n\n// OpenType variations tables\nimport HVAR from './HVAR';\n\ntables.HVAR = HVAR;\n\n// Other OpenType Tables\nimport DSIG from './DSIG';\nimport gasp from './gasp';\nimport hdmx from './hdmx';\nimport kern from './kern';\nimport LTSH from './LTSH';\nimport PCLT from './PCLT';\nimport VDMX from './VDMX';\nimport vhea from './vhea';\nimport vmtx from './vmtx';\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx;\n\n\n// Apple Advanced Typography Tables\nimport avar from './avar';\nimport bsln from './bsln';\nimport feat from './feat';\nimport fvar from './fvar';\nimport gvar from './gvar';\nimport just from './just';\nimport morx from './morx';\nimport opbd from './opbd';\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\n","import * as r from 'restructure';\n\nlet SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\n\nlet CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\n\nlet UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\n\nlet UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\n\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\n\nlet VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\n});\n\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: { // Byte encoding\n length: r.uint16, // Total table length in bytes (set to 262 for format 0)\n language: r.uint16, // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n\n 2: { // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys),\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n\n 4: { // Segment mapping to delta values\n length: r.uint16, // Total table length in bytes\n language: r.uint16, // Language code\n segCountX2: r.uint16,\n segCount: t => t.segCountX2 >> 1,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16), // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\n },\n\n 6: { // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n\n 8: { // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 10: { // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n\n 12: { // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 14: { // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\n\nlet CmapEntry = new r.Struct({\n platformID: r.uint16, // Platform identifier\n encodingID: r.uint16, // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\n});\n\n// character to glyph mapping\nexport default new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\n","import * as r from 'restructure';\n\n// font header\nexport default new r.Struct({\n version: r.int32, // 0x00010000 (version 1.0)\n revision: r.int32, // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32, // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16, // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16, // for all glyph bounding boxes\n yMin: r.int16, // for all glyph bounding boxes\n xMax: r.int16, // for all glyph bounding boxes\n yMax: r.int16, // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, [\n 'bold', 'italic', 'underline', 'outline',\n 'shadow', 'condensed', 'extended'\n ]),\n lowestRecPPEM: r.uint16, // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16, // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n});\n","import * as r from 'restructure';\n\n// horizontal header\nexport default new r.Struct({\n version: r.int32,\n ascent: r.int16, // Distance from baseline of highest ascender\n descent: r.int16, // Distance from baseline of lowest descender\n lineGap: r.int16, // Typographic line gap\n advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16, // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16, // 0 for vertical\n caretOffset: r.int16, // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n","import * as r from 'restructure';\n\nlet HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\n\nexport default new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\n// maxiumum profile\nexport default new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16, // The number of glyphs in the font\n maxPoints: r.uint16, // Maximum points in a non-composite glyph\n maxContours: r.uint16, // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16, // Maximum points in a composite glyph\n maxComponentContours: r.uint16, // Maximum contours in a composite glyph\n maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16, // Maximum points used in Z0\n maxStorage: r.uint16, // Number of Storage Area locations\n maxFunctionDefs: r.uint16, // Number of FDEFs\n maxInstructionDefs: r.uint16, // Number of IDEFs\n maxStackElements: r.uint16, // Maximum stack depth\n maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n","import * as r from 'restructure';\nimport {getEncoding, LANGUAGES} from '../encodings';\n\nlet NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16,\n new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\n { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\n )\n});\n\nlet LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\n});\n\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\n\nexport default NameTable;\n\nconst NAMES = [\n 'copyright',\n 'fontFamily',\n 'fontSubfamily',\n 'uniqueSubfamily',\n 'fullName',\n 'version',\n 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n 'trademark',\n 'manufacturer',\n 'designer',\n 'description',\n 'vendorURL',\n 'designerURL',\n 'license',\n 'licenseURL',\n null, // reserved\n 'preferredFamily',\n 'preferredSubfamily',\n 'compatibleFull',\n 'sampleText',\n 'postscriptCIDFontName',\n 'wwsFamilyName',\n 'wwsSubfamilyName'\n];\n\nNameTable.process = function(stream) {\n var records = {};\n for (let record of this.records) {\n // find out what language this is for\n let language = LANGUAGES[record.platformID][record.languageID];\n\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n }\n\n // if the nameID is >= 256, it is a font feature record (AAT)\n let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\n if (records[key] == null) {\n records[key] = {};\n }\n\n let obj = records[key];\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n\n this.records = records;\n};\n\nNameTable.preEncode = function() {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n\n let records = [];\n for (let key in this.records) {\n let val = this.records[key];\n if (key === 'fontFeatures') continue;\n\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: val.en.length * 2,\n string: val.en\n });\n\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\n","/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nexport function getEncoding(platformID, encodingID, languageID = 0) {\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n \n return ENCODINGS[platformID][encodingID];\n}\n\nconst SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']);\nconst MAC_ENCODINGS = {\n 'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',\n 'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',\n 'x-mac-greek': 'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\\u00AD',\n 'x-mac-icelandic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-inuit': 'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',\n 'x-mac-ce': 'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',\n 'x-mac-romanian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'\n};\n\nconst encodingCache = new Map();\n\nexport function getEncodingMapping(encoding) {\n let cached = encodingCache.get(encoding);\n if (cached) {\n return cached;\n }\n\n // These encodings aren't supported by TextDecoder.\n let mapping = MAC_ENCODINGS[encoding];\n if (mapping) {\n let res = new Map();\n for (let i = 0; i < mapping.length; i++) {\n res.set(mapping.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n\n // Only single byte encodings can be mapped 1:1.\n if (SINGLE_BYTE_ENCODINGS.has(encoding)) {\n // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings.\n // Use this to create a mapping of code points.\n let decoder = new TextDecoder(encoding);\n let mapping = new Uint8Array(0x80);\n for (let i = 0; i < 0x80; i++) {\n mapping[i] = 0x80 + i;\n }\n\n let res = new Map();\n let s = decoder.decode(mapping);\n for (let i = 0; i < 0x80; i++) {\n res.set(s.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n}\n\n// Map of platform ids to encoding ids.\nexport const ENCODINGS = [\n // unicode\n ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'],\n \n // macintosh\n // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n // 0\tRoman 17\tMalayalam\n // 1\tJapanese\t 18\tSinhalese\n // 2\tTraditional Chinese\t 19\tBurmese\n // 3\tKorean\t 20\tKhmer\n // 4\tArabic\t 21\tThai\n // 5\tHebrew\t 22\tLaotian\n // 6\tGreek\t 23\tGeorgian\n // 7\tRussian\t 24\tArmenian\n // 8\tRSymbol\t 25\tSimplified Chinese\n // 9\tDevanagari\t 26\tTibetan\n // 10\tGurmukhi\t 27\tMongolian\n // 11\tGujarati\t 28\tGeez\n // 12\tOriya\t 29\tSlavic\n // 13\tBengali\t 30\tVietnamese\n // 14\tTamil\t 31\tSindhi\n // 15\tTelugu\t 32\t(Uninterpreted)\n // 16\tKannada\n ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\n 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',\n 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\n 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk', \n 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],\n \n // ISO (deprecated)\n ['ascii', null, 'iso-8859-1'],\n \n // windows\n // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be']\n];\n\n// Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nexport const MAC_LANGUAGE_ENCODINGS = {\n 15: 'x-mac-icelandic',\n 17: 'x-mac-turkish',\n 18: 'x-mac-croatian',\n 24: 'x-mac-ce',\n 25: 'x-mac-ce',\n 26: 'x-mac-ce',\n 27: 'x-mac-ce',\n 28: 'x-mac-ce',\n 30: 'x-mac-icelandic',\n 37: 'x-mac-romanian',\n 38: 'x-mac-ce',\n 39: 'x-mac-ce',\n 40: 'x-mac-ce',\n 143: 'x-mac-inuit',\n 146: 'x-mac-gaelic'\n};\n\n// Map of platform ids to BCP-47 language codes.\nexport const LANGUAGES = [\n // unicode\n [],\n \n { // macintosh\n 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',\n 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',\n 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',\n 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',\n 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',\n 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',\n 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',\n 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',\n 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',\n 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',\n 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',\n 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',\n 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',\n 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',\n 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',\n 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',\n 16: 'mt', 46: 'be', 76: 'si', 139: 'su',\n 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',\n 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',\n 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',\n 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',\n 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',\n 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',\n 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',\n 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',\n 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',\n 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',\n 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',\n 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',\n 29: 'se', 59: 'ps', 89: 'sw',\n },\n \n // ISO (deprecated)\n [],\n \n { // windows \n 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', \n 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', \n 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', \n 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', \n 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', \n 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', \n 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', \n 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', \n 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', \n 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', \n 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', \n 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', \n 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', \n 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', \n 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', \n 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', \n 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', \n 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', \n 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', \n 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', \n 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', \n 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', \n 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', \n 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', \n 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', \n 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', \n 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', \n 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', \n 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', \n 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', \n 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', \n 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', \n 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', \n 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', \n 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', \n 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', \n 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', \n 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', \n 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', \n 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', \n 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', \n 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', \n 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', \n 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', \n 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', \n 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', \n 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', \n 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', \n 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', \n 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', \n 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', \n 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', \n }\n];\n","import * as r from 'restructure';\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16, // visual weight of stroke in glyphs\n usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null,\n null, null, null, 'noSubsetting', 'bitmapOnly'\n ]),\n ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16, // width of the strikeout stroke\n yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16, // classification of font-family design\n panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4), // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout',\n 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\n ]),\n usFirstCharIndex: r.uint16, // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n },\n\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\n\nlet versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\n\nexport default OS2;\n","import * as r from 'restructure';\n\n// PostScript information\nexport default new r.VersionedStruct(r.fixed32, {\n header: { // these fields exist at the top of all versions\n italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16, // Suggested values for the underline thickness\n isFixedPitch: r.uint32, // Whether the font is monospaced\n minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n },\n\n 1: {}, // version 1 has no additional fields\n\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n\n 3: {}, // version 3 has no additional fields\n\n 4: {\n map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\n }\n});\n","import * as r from 'restructure';\n\n// An array of predefined values accessible by instructions\nexport default new r.Struct({\n controlValues: new r.Array(r.int16)\n});\n","import * as r from 'restructure';\n\n// A list of instructions that are executed once when a font is first used.\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\nexport default new r.Struct({\n instructions: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\n\nloca.process = function() {\n if (this.version === 0 && !this._processed) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n this._processed = true;\n }\n};\n\nloca.preEncode = function() {\n if (this.version === 0 && this._processed !== false) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n this._processed = false;\n }\n};\n\nexport default loca;\n","import * as r from 'restructure';\n\n// Set of instructions executed whenever the point size or font transformation change\nexport default new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\n// only used for encoding\nexport default new r.Array(new r.Buffer);\n","import * as r from 'restructure';\nimport CFFIndex from './CFFIndex';\nimport CFFTop from './CFFTop';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport standardStrings from './CFFStandardStrings';\n\nclass CFFFont {\n constructor(stream) {\n this.stream = stream;\n this.decode();\n }\n\n static decode(stream) {\n return new CFFFont(stream);\n }\n\n decode() {\n let start = this.stream.pos;\n let top = CFFTop.decode(this.stream);\n for (let key in top) {\n let val = top[key];\n this[key] = val;\n }\n\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n\n this.topDict = this.topDictIndex[0];\n }\n\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n }\n\n string(sid) {\n if (this.version >= 2) {\n return null;\n }\n\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n\n return this.stringIndex[sid - standardStrings.length];\n }\n\n get postscriptName() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n\n return null;\n }\n\n get fullName() {\n return this.string(this.topDict.FullName);\n }\n\n get familyName() {\n return this.string(this.topDict.FamilyName);\n }\n\n getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n }\n\n getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n }\n\n // CID-keyed fonts don't have glyph names\n if (this.isCIDFont) {\n return null;\n }\n\n let { charset } = this.topDict;\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n\n if (gid === 0) {\n return '.notdef';\n }\n\n gid -= 1;\n\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n\n case 1:\n case 2:\n for (let i = 0; i < charset.ranges.length; i++) {\n let range = charset.ranges[i];\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n break;\n }\n\n return null;\n }\n\n fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n\n case 3:\n case 4:\n let { ranges } = this.topDict.FDSelect;\n let low = 0;\n let high = ranges.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n default:\n throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\n }\n }\n\n privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n let fd = this.fdForGlyph(gid);\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n\n return null;\n }\n\n if (this.version < 2) {\n return this.topDict.Private;\n }\n\n return this.topDict.FDArray[0].Private;\n }\n}\n\nexport default CFFFont;\n","import * as r from 'restructure';\n\nexport default class CFFIndex {\n constructor(type) {\n this.type = type;\n }\n\n getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n\n return ctx ? ctx.version : -1;\n }\n\n decode(stream, parent) {\n let version = this.getCFFVersion(parent);\n let count = version >= 2\n ? stream.readUInt32BE()\n : stream.readUInt16BE();\n\n if (count === 0) {\n return [];\n }\n\n let offSize = stream.readUInt8();\n let offsetType;\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\n }\n\n let ret = [];\n let startPos = stream.pos + ((count + 1) * offSize) - 1;\n\n let start = offsetType.decode(stream);\n for (let i = 0; i < count; i++) {\n let end = offsetType.decode(stream);\n\n if (this.type != null) {\n let pos = stream.pos;\n stream.pos = startPos + start;\n\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n\n start = end;\n }\n\n stream.pos = startPos + start;\n return ret;\n }\n\n size(arr, parent) {\n let size = 2;\n if (arr.length === 0) {\n return size;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let offset = 1;\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n offset += type.size(item, parent);\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n\n return size;\n }\n\n encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n if (arr.length === 0) {\n return;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let sizes = [];\n let offset = 1;\n for (let item of arr) {\n let s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n // write offset size\n stream.writeUInt8(offsetType.size());\n\n // write elements\n offset = 1;\n offsetType.encode(stream, offset);\n\n for (let size of sizes) {\n offset += size;\n offsetType.encode(stream, offset);\n }\n\n for (let item of arr) {\n type.encode(stream, item, parent);\n }\n\n return;\n }\n}\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport StandardStrings from './CFFStandardStrings';\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\nimport { ItemVariationStore } from '../tables/variations';\n\n// Checks if an operand is an index of a predefined value,\n// otherwise delegates to the provided type.\nclass PredefinedOp {\n constructor(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n\n decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n\n return this.type.decode(stream, parent, operands);\n }\n\n size(value, ctx) {\n return this.type.size(value, ctx);\n }\n\n encode(stream, value, ctx) {\n let index = this.predefinedOps.indexOf(value);\n if (index !== -1) {\n return index;\n }\n\n return this.type.encode(stream, value, ctx);\n }\n}\n\nclass CFFEncodingVersion extends r.Number {\n constructor() {\n super('UInt8');\n }\n\n decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n }\n}\n\nlet Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\n\nlet Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\n\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n }\n\n // TODO: supplement?\n});\n\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\n\n// Decodes an array of ranges until the total\n// length is equal to the provided length.\nclass RangeArray extends r.Array {\n decode(stream, parent) {\n let length = resolveLength(this.length, stream, parent);\n let count = 0;\n let res = [];\n while (count < length) {\n let range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n\n return res;\n }\n}\n\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\n },\n\n 1: {\n ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\n },\n\n 2: {\n ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\n }\n});\n\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\n\nlet FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\n\nlet FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\n\nlet FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\n },\n\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\n\nlet ptr = new CFFPointer(CFFPrivateDict);\nclass CFFPrivateOp {\n decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n }\n\n size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n }\n\n encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n }\n}\n\nlet FontDict = new CFFDict([\n // key name type(s) default\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 38], 'FontName', 'sid', null],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [[12, 5], 'PaintType', 'number', 0],\n]);\n\nlet CFFTopDict = new CFFDict([\n // key name type(s) default\n [[12, 30], 'ROS', ['sid', 'sid', 'number'], null],\n\n [0, 'version', 'sid', null],\n [1, 'Notice', 'sid', null],\n [[12, 0], 'Copyright', 'sid', null],\n [2, 'FullName', 'sid', null],\n [3, 'FamilyName', 'sid', null],\n [4, 'Weight', 'sid', null],\n [[12, 1], 'isFixedPitch', 'boolean', false],\n [[12, 2], 'ItalicAngle', 'number', 0],\n [[12, 3], 'UnderlinePosition', 'number', -100],\n [[12, 4], 'UnderlineThickness', 'number', 50],\n [[12, 5], 'PaintType', 'number', 0],\n [[12, 6], 'CharstringType', 'number', 2],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [13, 'UniqueID', 'number', null],\n [5, 'FontBBox', 'array', [0, 0, 0, 0]],\n [[12, 8], 'StrokeWidth', 'number', 0],\n [14, 'XUID', 'array', null],\n [15, 'charset', CFFCharset, ISOAdobeCharset],\n [16, 'Encoding', CFFEncoding, StandardEncoding],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 20], 'SyntheticBase', 'number', null],\n [[12, 21], 'PostScript', 'sid', null],\n [[12, 22], 'BaseFontName', 'sid', null],\n [[12, 23], 'BaseFontBlend', 'delta', null],\n\n // CID font specific\n [[12, 31], 'CIDFontVersion', 'number', 0],\n [[12, 32], 'CIDFontRevision', 'number', 0],\n [[12, 33], 'CIDFontType', 'number', 0],\n [[12, 34], 'CIDCount', 'number', 8720],\n [[12, 35], 'UIDBase', 'number', null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [[12, 38], 'FontName', 'sid', null]\n]);\n\nlet VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n})\n\nlet CFF2TopDict = new CFFDict([\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [24, 'vstore', new CFFPointer(VariationStore), null],\n [25, 'maxstack', 'number', 193]\n]);\n\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex\n },\n\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex\n }\n});\n\nexport default CFFTop;\n","import isEqual from 'fast-deep-equal';\nimport * as r from 'restructure';\nimport CFFOperand from './CFFOperand';\nimport { PropertyDescriptor } from 'restructure';\n\nexport default class CFFDict {\n constructor(ops = []) {\n this.ops = ops;\n this.fields = {};\n for (let field of ops) {\n let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n\n decodeOperands(type, stream, ret, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n case 'boolean':\n return !!operands[0];\n default:\n return operands;\n }\n }\n }\n\n encodeOperands(type, stream, ctx, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n }\n\n decode(stream, parent) {\n let end = stream.pos + parent.length;\n let ret = {};\n let operands = [];\n\n // define hidden properties\n Object.defineProperties(ret, {\n parent: { value: parent },\n _startOffset: { value: stream.pos }\n });\n\n // fill in defaults\n for (let key in this.fields) {\n let field = this.fields[key];\n ret[field[1]] = field[3];\n }\n\n while (stream.pos < end) {\n let b = stream.readUInt8();\n if (b < 28) {\n if (b === 12) {\n b = (b << 8) | stream.readUInt8();\n }\n\n let field = this.fields[b];\n if (!field) {\n throw new Error(`Unknown operator ${b}`);\n }\n\n let val = this.decodeOperands(field[2], stream, ret, operands);\n if (val != null) {\n if (val instanceof PropertyDescriptor) {\n Object.defineProperty(ret, field[1], val);\n } else {\n ret[field[1]] = val;\n }\n }\n\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n\n return ret;\n }\n\n size(dict, parent, includePointers = true) {\n let ctx = {\n parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n\n let len = 0;\n\n for (let k in this.fields) {\n let field = this.fields[k];\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], null, ctx, val);\n for (let op of operands) {\n len += CFFOperand.size(op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n\n if (includePointers) {\n len += ctx.pointerSize;\n }\n\n return len;\n }\n\n encode(stream, dict, parent) {\n let ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val: dict,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n for (let field of this.ops) {\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], stream, ctx, val);\n for (let op of operands) {\n CFFOperand.encode(stream, op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n for (let op of key) {\n stream.writeUInt8(op);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n let ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n\n return;\n }\n}\n","const FLOAT_EOF = 0xf;\nconst FLOAT_LOOKUP = [\n '0', '1', '2', '3', '4', '5', '6', '7',\n '8', '9', '.', 'E', 'E-', null, '-'\n];\n\nconst FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\n\nexport default class CFFOperand {\n static decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n\n if (value === 28) {\n return stream.readInt16BE();\n }\n\n if (value === 29) {\n return stream.readInt32BE();\n }\n\n if (value === 30) {\n let str = '';\n while (true) {\n let b = stream.readUInt8();\n\n let n1 = b >> 4;\n if (n1 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n1];\n\n let n2 = b & 15;\n if (n2 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n2];\n }\n\n return parseFloat(str);\n }\n\n return null;\n }\n\n static size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n\n if ((value | 0) !== value) { // floating point\n let str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n\n } else if (-107 <= value && value <= 107) {\n return 1;\n\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n\n } else {\n return 5;\n }\n }\n\n static encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n let val = Number(value);\n\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n\n } else if ((val | 0) !== val) { // floating point\n stream.writeUInt8(30);\n\n let str = '' + val;\n for (let i = 0; i < str.length; i += 2) {\n let c1 = str[i];\n let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n let c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n\n stream.writeUInt8((n1 << 4) | (n2 & 15));\n }\n\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8((FLOAT_EOF << 4));\n }\n\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n }\n}\n","import * as r from 'restructure';\n\nexport default class CFFPointer extends r.Pointer {\n constructor(type, options = {}) {\n if (options.type == null) {\n options.type = 'global';\n }\n\n super(null, type, options);\n }\n\n decode(stream, parent, operands) {\n this.offsetType = {\n decode: () => operands[0]\n };\n\n return super.decode(stream, parent, operands);\n }\n\n encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: () => 0\n };\n\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n\n let ptr = null;\n this.offsetType = {\n encode: (stream, val) => ptr = val\n };\n\n super.encode(stream, value, ctx);\n return [new Ptr(ptr)];\n }\n}\n\nclass Ptr {\n constructor(val) {\n this.val = val;\n this.forceLarge = true;\n }\n\n valueOf() {\n return this.val;\n }\n}\n","import CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\n\nclass CFFBlendOp {\n static decode(stream, parent, operands) {\n let numBlends = operands.pop();\n\n // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n while (operands.length > numBlends) {\n operands.pop();\n }\n }\n}\n\nexport default new CFFDict([\n // key name type default\n [6, 'BlueValues', 'delta', null],\n [7, 'OtherBlues', 'delta', null],\n [8, 'FamilyBlues', 'delta', null],\n [9, 'FamilyOtherBlues', 'delta', null],\n [[12, 9], 'BlueScale', 'number', 0.039625],\n [[12, 10], 'BlueShift', 'number', 7],\n [[12, 11], 'BlueFuzz', 'number', 1],\n [10, 'StdHW', 'number', null],\n [11, 'StdVW', 'number', null],\n [[12, 12], 'StemSnapH', 'delta', null],\n [[12, 13], 'StemSnapV', 'delta', null],\n [[12, 14], 'ForceBold', 'boolean', false],\n [[12, 17], 'LanguageGroup', 'number', 0],\n [[12, 18], 'ExpansionFactor', 'number', 0.06],\n [[12, 19], 'initialRandomSeed', 'number', 0],\n [20, 'defaultWidthX', 'number', 0],\n [21, 'nominalWidthX', 'number', 0],\n [22, 'vsindex', 'number', 0],\n [23, 'blend', CFFBlendOp, null],\n [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]\n]);\n","// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nexport default [\n \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\n \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\n \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\n \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\n \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\n \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\n \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\n \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\n \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\n \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\n \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\n \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\n \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\n \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\n \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\n \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\n \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\n \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\n \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\n \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\n \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\n \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\n \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\n \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\n \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\n \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\n \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\n \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\n \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\n \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\n \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\n \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\n \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\n \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\n \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n","export let StandardEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n 'lslash', 'oslash', 'oe', 'germandbls'\n];\n\nexport let ExpertEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\n];\n","export let ISOAdobeCharset = [\n '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\n 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\n 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\n 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\n 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\n 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\n 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\n 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\n 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\n 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\n 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\n 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\n 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\n 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\n 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\n 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\n 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\n 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\n 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\n 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\n 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\n 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\n 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\n 'ugrave', 'yacute', 'ydieresis', 'zcaron'\n];\n\nexport let ExpertCharset = [\n '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\n 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\n 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\n 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\n 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\n 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\n 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\n 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\n 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\n 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\n 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\n 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\n 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\n 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\n 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\n 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\n 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\n 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\n 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\n 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\n 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\n 'Ydieresissmall'\n];\n\nexport let ExpertSubsetCharset = [\n '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\n 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\n 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\n 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\n 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\n 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\n 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\n 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior'\n];\n","import {Feature} from './opentype';\nimport * as r from 'restructure';\n\n/*******************\n * Variation Store *\n *******************/\n\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\nlet RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\n\nlet VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\n\nlet DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\n regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\n deltas: t => t.shortDeltas.concat(t.regionDeltas)\n});\n\nlet ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\n\nexport let ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n\n/**********************\n * Feature Variations *\n **********************/\n\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: {\n axisIndex: r.uint16,\n axisIndex: r.uint16,\n filterRangeMinValue: F2DOT14,\n filterRangeMaxValue: F2DOT14\n }\n});\n\nlet ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\n\nlet FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\n});\n\nlet FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\n\nlet FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\n});\n\nexport let FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n","import * as r from 'restructure';\n\n//########################\n// Scripts and Languages #\n//########################\n\nlet LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\n\nlet LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\n});\n\nlet Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\n\nlet ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, { type: 'parent' })\n});\n\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\n\n//#######################\n// Features and Lookups #\n//#######################\n\nlet FeatureParams = new r.Struct({\n version: r.uint16, // should be set to 0 according OT spec\n nameID: r.uint16, //OT spec: UI Name ID or uiLabelNameId\n});\n\nexport let Feature = new r.Struct({\n featureParams: new r.Pointer(r.uint16, FeatureParams),\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\n\nlet FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })\n});\n\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\n\nlet LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, [\n 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\n 'ignoreMarks', 'useMarkFilteringSet'\n ])\n});\n\nexport function LookupList(SubTable) {\n let Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\n });\n\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n}\n\n//#################\n// Coverage Table #\n//#################\n\nlet RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\n\nexport let Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n});\n\n//#########################\n// Class Definition Table #\n//#########################\n\nlet ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\n\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\n 1: { // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: { // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n});\n\n//###############\n// Device Table #\n//###############\n\nexport let Device = new r.Struct({\n a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16, // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n});\n\n//#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nlet LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\n\nlet Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\n\nlet ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\n\nexport let Context = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: { // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n\n//######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nlet ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, t => t.inputGlyphCount - 1),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\n\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 2: { // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 3: { // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n","import * as r from 'restructure';\n\nlet VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\n","import * as r from 'restructure';\nimport {BigMetrics} from './EBDT';\n\nlet SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\n\nlet CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\n\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n\n 1: {\n offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n\n 3: {\n offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\n },\n\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\n\nlet IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\n\nlet BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\n\nexport default new r.Struct({\n version: r.uint32, // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\n","import * as r from 'restructure';\n\nexport let BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\n\nexport let SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\n\nlet EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\n\nclass ByteAligned {}\n\nclass BitAligned {}\n\nexport let glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n\n 5: {\n data: BitAligned\n },\n\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\n\n","import * as r from 'restructure';\n\nlet ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\n});\n\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\nexport default new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\n","import * as r from 'restructure';\n\nlet LayerRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n // the special case noted below. Each palette entry is 16 bits.\n // A palette index of 0xFFFF is a special case indicating that\n // the text foreground color should be used.\n\nlet BaseGlyphRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\n\nexport default new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\n numLayerRecords: r.uint16\n});\n","import * as r from 'restructure';\n\nlet ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16 // X or Y value, in design units\n },\n\n 2: { // Design units plus contour point\n coordinate: r.int16, // X or Y value, in design units\n referenceGlyph: r.uint16, // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16, // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n }\n});\n\nlet BaseValues = new r.Struct({\n defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\n\nlet FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL\n});\n\nlet MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n featMinMaxCount: r.uint16, // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nlet BaseLangSysRecord = new r.Struct({\n tag: new r.String(4), // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\n});\n\nlet BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL\n baseLangSysCount: r.uint16, // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nlet BaseScriptRecord = new r.Struct({\n tag: new r.String(4), // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\n});\n\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\n\n// Array of 4-byte baseline identification tags-must be in alphabetical order\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\n\nlet Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n },\n\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\nlet AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\n\nlet CaretValue = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16\n },\n\n 2: { // Contour point\n caretValuePoint: r.uint16\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\n\nlet LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\n\nlet MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet ValueFormat = new r.Bitfield(r.uint16, [\n 'xPlacement', 'yPlacement',\n 'xAdvance', 'yAdvance',\n 'xPlaDevice', 'yPlaDevice',\n 'xAdvDevice', 'yAdvDevice'\n]);\n\nlet types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\n};\n\nclass ValueRecord {\n constructor(key = 'valueFormat') {\n this.key = key;\n }\n\n buildStruct(parent) {\n let struct = parent;\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n\n if (!struct[this.key]) return;\n\n let fields = {};\n fields.rel = () => struct._startOffset;\n\n let format = struct[this.key];\n for (let key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n\n return new r.Struct(fields);\n }\n\n size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n }\n\n decode(stream, parent) {\n let res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n }\n}\n\nlet PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\n\nlet Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet Anchor = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n\n 2: { // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n\n 3: { // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\n\nlet BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\nlet BaseArray = new r.Array(BaseRecord, r.uint16);\n\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\nlet LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nlet LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\n\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, { // Single Adjustment\n 1: { // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n\n 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\n 1: { // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n\n 2: { // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n\n 3: { // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n\n 4: { // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n\n 5: { // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n\n 6: { // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n\n 7: Context, // Contextual positioning\n 8: ChainingContext, // Chaining contextual positioning\n\n 9: { // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 9\n extension: new r.Pointer(r.uint32, null)\n }\n});\n\n// Fix circular reference\nGPOSLookup.versions[9].extension.type = GPOSLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n\n// export GPOSLookup for JSTF table\nexport { GPOSLookup };\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet Sequence = new r.Array(r.uint16, r.uint16);\nlet AlternateSet = Sequence;\n\nlet Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, t => t.compCount - 1)\n});\n\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\n\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {// Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n\n 2: { // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n\n 3: { // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n\n 4: { // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n\n 5: Context, // Contextual Substitution\n 6: ChainingContext, // Chaining Contextual Substitution\n\n 7: { // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 7\n extension: new r.Pointer(r.uint32, null)\n },\n\n 8: { // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n});\n\n// Fix circular reference\nGSUBLookup.versions[7].extension.type = GSUBLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n","import * as r from 'restructure';\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\nimport { GPOSLookup } from './GPOS';\n\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\n\nlet JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\n\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\n\nlet JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\n\nlet JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\n\nlet JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\n});\n\nexport default new r.Struct({\n version: r.uint32, // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport { ItemVariationStore } from './variations';\n\n// TODO: add this to restructure\nclass VariableSizeNumber {\n constructor(size) {\n this._size = size;\n }\n\n decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1: return stream.readUInt8();\n case 2: return stream.readUInt16BE();\n case 3: return stream.readUInt24BE();\n case 4: return stream.readUInt32BE();\n }\n }\n\n size(val, parent) {\n return resolveLength(this._size, null, parent);\n }\n}\n\nlet MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\n outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\n innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\n});\n\nlet DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\n","import * as r from 'restructure';\n\nlet Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\n\nlet SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\n\nexport default new r.Struct({\n ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16, // Number of signatures in the table\n usFlag: r.uint16, // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\n","import * as r from 'restructure';\n\nlet GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit',\n 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\n\nexport default new r.Struct({\n version: r.uint16, // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n","import * as r from 'restructure';\n\nlet DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\n});\n\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\nexport default new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\n","import * as r from 'restructure';\n\nlet KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\n\nlet ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\n});\n\nlet Kern2Array = new r.Struct({\n off: t => t._startOffset - t.parent.parent._startOffset,\n len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\n values: new r.LazyArray(r.int16, 'len')\n});\n\nlet KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\n },\n\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\n }\n});\n\nlet KernTable = new r.VersionedStruct('version', {\n 0: { // Microsoft uses this format\n subVersion: r.uint16, // Microsoft has an extra sub-table version number\n length: r.uint16, // Length of the subtable, in bytes\n format: r.uint8, // Format of subtable\n coverage: new r.Bitfield(r.uint8, [\n 'horizontal', // 1 if table has horizontal data, 0 if vertical\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n },\n 1: { // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [\n null, null, null, null, null,\n 'variation', // Set if table has variation kerning values\n 'crossStream', // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n }\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n 0: { // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n\n 1: { // Apple Version\n reserved: new r.Reserved(r.uint16), // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n});\n","import * as r from 'restructure';\n\n// Linear Threshold table\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\nexport default new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n","import * as r from 'restructure';\n\n// PCL 5 Table\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\nexport default new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n});\n","import * as r from 'restructure';\n\n// VDMX tables contain ascender/descender overrides for certain (usually small)\n// sizes. This is needed in order to match font metrics on Windows.\n\nlet Ratio = new r.Struct({\n bCharSet: r.uint8, // Character set\n xRatio: r.uint8, // Value to use for x-Ratio\n yStartRatio: r.uint8, // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nlet vTable = new r.Struct({\n yPelHeight: r.uint16, // yPelHeight to which values apply\n yMax: r.int16, // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nlet VdmxGroup = new r.Struct({\n recs: r.uint16, // Number of height records in this group\n startsz: r.uint8, // Starting yPelHeight\n endsz: r.uint8, // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nexport default new r.Struct({\n version: r.uint16, // Version number (0 or 1)\n numRecs: r.uint16, // Number of VDMX groups present\n numRatios: r.uint16, // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n","import * as r from 'restructure';\n\n// Vertical Header Table\nexport default new r.Struct({\n version: r.uint16, // Version number of the Vertical Header Table\n ascent: r.int16, // The vertical typographic ascender for this font\n descent: r.int16, // The vertical typographic descender for this font\n lineGap: r.int16, // The vertical typographic line gap for this font\n advanceHeightMax: r.int16, // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n","import * as r from 'restructure';\n\nlet VmtxEntry = new r.Struct({\n advance: r.uint16, // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n});\n\n// Vertical Metrics Table\nexport default new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\n\nlet Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\n\nlet Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet BslnSubtable = new r.VersionedStruct('format', {\n 0: { // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n\n 1: { // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n\n 2: { // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n\n 3: { // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\n","import * as r from 'restructure';\n\nclass UnboundedArrayAccessor {\n constructor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n\n getItem(index) {\n if (this._items[index] == null) {\n let pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n\n return this._items[index];\n }\n\n inspect() {\n return `[UnboundedArray ${this.type.constructor.name}]`;\n }\n}\n\nexport class UnboundedArray extends r.Array {\n constructor(type) {\n super(type, 0);\n }\n\n decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n }\n}\n\nexport let LookupTable = function(ValueType = r.uint16) {\n // Helper class that makes internal structures invisible to pointers\n class Shadow {\n constructor(type) {\n this.type = type;\n }\n\n decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n }\n\n size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n }\n\n encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n }\n }\n\n ValueType = new Shadow(ValueType);\n\n let BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n\n let LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n\n let LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\n });\n\n let LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\n\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\n let entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\n\n let StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n\n return StateHeader;\n}\n\n// This is the old version of the StateTable structure\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\n let ClassLookupTable = new r.Struct({\n version() { return 8; }, // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n\n let entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\n\n let StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n\n return StateHeader1;\n}\n","import * as r from 'restructure';\n\nlet Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nlet FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\n featureFlags: new r.Bitfield(r.uint8, [\n null, null, null, null, null, null,\n 'hasDefault', 'exclusive'\n ]),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\n","import * as r from 'restructure';\n\nlet Axis = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\n});\n\nlet Instance = new r.Struct({\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\n flags: r.uint16,\n coord: new r.Array(r.fixed32, t => t.parent.axisCount),\n postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\nclass Offset {\n static decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags\n ? stream.readUInt32BE()\n : stream.readUInt16BE() * 2;\n }\n}\n\nlet gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\n});\n\nexport default gvar;\n","import * as r from 'restructure';\nimport { LookupTable, StateTable1 } from './aat';\n\nlet ClassTable = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1\n});\n\nlet WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\n\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\n\nlet ActionData = new r.VersionedStruct('actionType', {\n 0: { // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n\n 1: { // Unconditional add glyph action\n addGlyph: r.uint16\n },\n\n 2: { // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n\n 3: {}, // Stretch glyph action (no data, not supported by CoreText)\n\n 4: { // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n\n 5: { // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\n\nlet Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\n});\n\nlet PostcompensationAction = new r.Array(Action, r.uint32);\nlet PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\n\nlet JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\n});\n\nexport default new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\n","import * as r from 'restructure';\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\n\nlet LigatureData = {\n action: r.uint16\n};\n\nlet ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\n\nlet InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\n\nlet SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\n});\n\nlet SubtableData = new r.VersionedStruct('type', {\n 0: { // Indic Rearrangement Subtable\n stateTable: new StateTable\n },\n\n 1: { // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n\n 2: { // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n\n 4: { // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable\n },\n\n 5: { // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\n\nlet Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n});\n\nlet FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\n\nlet MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\n\nexport default new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\n","import { binarySearch } from './utils';\nimport { encodingExists, getEncoding, getEncodingMapping } from './encodings';\nimport { cache } from './decorators';\nimport { range } from './utils';\n\nexport default class CmapProcessor {\n constructor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [\n // 32-bit subtables\n [3, 10],\n [0, 6],\n [0, 4],\n\n // 16-bit subtables\n [3, 1],\n [0, 3],\n [0, 2],\n [0, 1],\n [0, 0]\n ]);\n\n // If not unicode cmap was found, take the first table with a supported encoding.\n if (!this.cmap) {\n for (let cmap of cmapTable.tables) {\n let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n let mapping = getEncodingMapping(encoding);\n if (mapping) {\n this.cmap = cmap.table;\n this.encoding = mapping;\n }\n }\n }\n\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n\n findSubtable(cmapTable, pairs) {\n for (let [platformID, encodingID] of pairs) {\n for (let cmap of cmapTable.tables) {\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n\n return null;\n }\n\n lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n codepoint = this.encoding.get(codepoint) || codepoint;\n\n // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n } else if (variationSelector) {\n let gid = this.getVariationSelector(codepoint, variationSelector);\n if (gid) {\n return gid;\n }\n }\n\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n\n case 4: {\n let min = 0;\n let max = cmap.segCount - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n let rangeOffset = cmap.idRangeOffset.get(mid);\n let gid;\n\n if (rangeOffset === 0) {\n gid = codepoint + cmap.idDelta.get(mid);\n } else {\n let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n gid = cmap.glyphIndexArray.get(index) || 0;\n if (gid !== 0) {\n gid += cmap.idDelta.get(mid);\n }\n }\n\n return gid & 0xffff;\n }\n }\n\n return 0;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n case 12:\n case 13: {\n let min = 0;\n let max = cmap.nGroups - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let group = cmap.groups.get(mid);\n\n if (codepoint < group.startCharCode) {\n max = mid - 1;\n } else if (codepoint > group.endCharCode) {\n min = mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n\n return 0;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n\n let selectors = this.uvs.varSelectors.toArray();\n let i = binarySearch(selectors, x => variationSelector - x.varSelector);\n let sel = selectors[i];\n\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, x =>\n codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\n );\n }\n\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n\n return 0;\n }\n\n @cache\n getCharacterSet() {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n\n case 4: {\n let res = [];\n let endCodes = cmap.endCode.toArray();\n for (let i = 0; i < endCodes.length; i++) {\n let tail = endCodes[i] + 1;\n let start = cmap.startCode.get(i);\n res.push(...range(start, tail));\n }\n\n return res;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n case 12:\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n\n return res;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n @cache\n codePointsForGlyph(gid) {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0: {\n let res = [];\n for (let i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n\n return res;\n }\n\n case 4: {\n let res = [];\n for (let i = 0; i < cmap.segCount; i++) {\n let end = cmap.endCode.get(i);\n let start = cmap.startCode.get(i);\n let rangeOffset = cmap.idRangeOffset.get(i);\n let delta = cmap.idDelta.get(i);\n\n for (var c = start; c <= end; c++) {\n let g = 0;\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\n g = cmap.glyphIndexArray.get(index) || 0;\n if (g !== 0) {\n g += delta;\n }\n }\n\n if (g === gid) {\n res.push(c);\n }\n }\n }\n\n return res;\n }\n\n case 12: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n res.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n\n return res;\n }\n\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid === group.glyphID) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n }\n\n return res;\n }\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n}\n","export function binarySearch(arr, cmp) {\n let min = 0;\n let max = arr.length - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let res = cmp(arr[mid]);\n\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n}\n\nexport function range(index, end) {\n let range = [];\n while (index < end) {\n range.push(index++);\n }\n return range;\n}\n\nexport const asciiDecoder = new TextDecoder('ascii');\n\n// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license.\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst LOOKUP = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n LOOKUP[CHARS.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n let bufferLength = base64.length * 0.75;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n let bytes = new Uint8Array(bufferLength);\n let p = 0;\n\n for (let i = 0, len = base64.length; i < len; i += 4) {\n let encoded1 = LOOKUP[base64.charCodeAt(i)];\n let encoded2 = LOOKUP[base64.charCodeAt(i + 1)];\n let encoded3 = LOOKUP[base64.charCodeAt(i + 2)];\n let encoded4 = LOOKUP[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return bytes;\n}\n","import KernProcessor from './KernProcessor';\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\nimport GlyphRun from './GlyphRun';\nimport GlyphPosition from './GlyphPosition';\nimport * as Script from './Script';\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\n\nexport default class LayoutEngine {\n constructor(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null;\n\n // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n\n layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n }\n\n // Map string to glyphs if needed\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = Script.forString(string);\n }\n\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n let codePoints = [];\n for (let glyph of string) {\n codePoints.push(...glyph.codePoints);\n }\n\n script = Script.forCodePoints(codePoints);\n }\n\n var glyphs = string;\n }\n\n let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\n\n // Return early if there are no glyphs\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n }\n\n // Setup the advanced layout engine\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n }\n\n // Substitute and position the glyphs\n this.substitute(glyphRun);\n this.position(glyphRun);\n\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\n\n // Let the layout engine clean up any state it might have\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n\n return glyphRun;\n }\n\n substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n }\n\n position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\n let positioned = null;\n\n // Call the advanced layout engine. Returns the features applied.\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n }\n\n // if there is no GPOS table, use unicode properties to position marks.\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n }\n\n // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n }\n\n hideDefaultIgnorables(glyphs, positions) {\n let space = this.font.glyphForCodePoint(0x20);\n for (let i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n let plane = ch >> 16;\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n \tcase 0x00: return ch === 0x00AD;\n \tcase 0x03: return ch === 0x034F;\n \tcase 0x06: return ch === 0x061C;\n \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\n \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\n \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\n \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\n \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\n \tdefault: return false;\n }\n } else {\n // Other planes\n switch (plane) {\n \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\n \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\n \tdefault: return false;\n }\n }\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.engine) {\n features.push(...this.engine.getAvailableFeatures(script, language));\n }\n\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n\n return features;\n }\n\n stringsForGlyph(gid) {\n let result = new Set;\n\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n for (let codePoint of codePoints) {\n result.add(String.fromCodePoint(codePoint));\n }\n\n if (this.engine && this.engine.stringsForGlyph) {\n for (let string of this.engine.stringsForGlyph(gid)) {\n result.add(string);\n }\n }\n\n return Array.from(result);\n }\n}\n","import {binarySearch} from '../utils';\n\nexport default class KernProcessor {\n constructor(font) {\n this.kern = font.kern;\n }\n\n process(glyphs, positions) {\n for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n let left = glyphs[glyphIndex].id;\n let right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n }\n\n getKerning(left, right) {\n let res = 0;\n\n for (let table of this.kern.tables) {\n if (table.coverage.crossStream) {\n continue;\n }\n\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n\n break;\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n\n break;\n default:\n throw new Error(`Unsupported kerning table version ${table.version}`);\n }\n\n let val = 0;\n let s = table.subtable;\n switch (table.format) {\n case 0:\n let pairIdx = binarySearch(s.pairs, function (pair) {\n return (left - pair.left) || (right - pair.right);\n });\n\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n\n break;\n\n case 2:\n let leftOffset = 0, rightOffset = 0;\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n\n let index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n\n default:\n throw new Error(`Unsupported kerning sub-table format ${table.format}`);\n }\n\n // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n\n return res;\n }\n}\n","import {getCombiningClass} from 'unicode-properties';\n\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nexport default class UnicodeLayoutEngine {\n constructor(font) {\n this.font = font;\n }\n\n positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n let clusterStart = 0;\n let clusterEnd = 0;\n for (let index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.isMark) { // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n clusterStart = clusterEnd = index;\n }\n }\n\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n return positions;\n }\n\n positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n let base = glyphs[clusterStart];\n let baseBox = base.cbox.copy();\n\n // adjust bounding box for ligature glyphs\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\n }\n\n let xOffset = -positions[clusterStart].xAdvance;\n let yOffset = 0;\n let yGap = this.font.unitsPerEm / 16;\n\n // position each of the mark glyphs relative to the base glyph\n for (let index = clusterStart + 1; index <= clusterEnd; index++) {\n let mark = glyphs[index];\n let markBox = mark.cbox;\n let position = positions[index];\n\n let combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0;\n\n // x positioning\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n\n default: // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n }\n\n // y positioning\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n\n return;\n }\n\n getCombiningClass(codePoint) {\n let combiningClass = getCombiningClass(codePoint);\n\n // Thai / Lao need some per-character work\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) { // virama\n return 'Below_Right';\n }\n }\n\n switch (combiningClass) {\n // Hebrew\n\n case 'CCC10': // sheva\n case 'CCC11': // hataf segol\n case 'CCC12': // hataf patah\n case 'CCC13': // hataf qamats\n case 'CCC14': // hiriq\n case 'CCC15': // tsere\n case 'CCC16': // segol\n case 'CCC17': // patah\n case 'CCC18': // qamats\n case 'CCC20': // qubuts\n case 'CCC22': // meteg\n return 'Below';\n\n case 'CCC23': // rafe\n return 'Attached_Above';\n\n case 'CCC24': // shin dot\n return 'Above_Right';\n\n case 'CCC25': // sin dot\n case 'CCC19': // holam\n return 'Above_Left';\n\n case 'CCC26': // point varika\n return 'Above';\n\n case 'CCC21': // dagesh\n break;\n\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n case 'CCC28': // dammatan\n case 'CCC30': // fatha\n case 'CCC31': // damma\n case 'CCC33': // shadda\n case 'CCC34': // sukun\n case 'CCC35': // superscript alef\n case 'CCC36': // superscript alaph\n return 'Above';\n\n case 'CCC29': // kasratan\n case 'CCC32': // kasra\n return 'Below';\n\n // Thai\n\n case 'CCC103': // sara u / sara uu\n return 'Below_Right';\n\n case 'CCC107': // mai\n return 'Above_Right';\n\n // Lao\n\n case 'CCC118': // sign u / sign uu\n return 'Below';\n\n case 'CCC122': // mai\n return 'Above';\n\n // Tibetan\n\n case 'CCC129': // sign aa\n case 'CCC132': // sign u\n return 'Below';\n\n case 'CCC130': // sign i\n return 'Above';\n }\n\n return combiningClass;\n }\n}\n","import BBox from '../glyph/BBox';\nimport * as Script from '../layout/Script';\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nexport default class GlyphRun {\n constructor(glyphs, features, script, language, direction) {\n /**\n * An array of Glyph objects in the run\n * @type {Glyph[]}\n */\n this.glyphs = glyphs;\n\n /**\n * An array of GlyphPosition objects for each glyph in the run\n * @type {GlyphPosition[]}\n */\n this.positions = null;\n\n /**\n * The script that was requested for shaping. This was either passed in or detected automatically.\n * @type {string}\n */\n this.script = script;\n\n /**\n * The language requested for shaping, as passed in. If `null`, the default language for the\n * script was used.\n * @type {string}\n */\n this.language = language || null;\n\n /**\n * The direction requested for shaping, as passed in (either ltr or rtl).\n * If `null`, the default direction of the script is used.\n * @type {string}\n */\n this.direction = direction || Script.direction(script);\n\n /**\n * The features requested during shaping. This is a combination of user\n * specified features and features chosen by the shaper.\n * @type {object}\n */\n this.features = {};\n\n // Convert features to an object\n if (Array.isArray(features)) {\n for (let tag of features) {\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n\n /**\n * The total advance width of the run.\n * @type {number}\n */\n get advanceWidth() {\n let width = 0;\n for (let position of this.positions) {\n width += position.xAdvance;\n }\n\n return width;\n }\n\n /**\n * The total advance height of the run.\n * @type {number}\n */\n get advanceHeight() {\n let height = 0;\n for (let position of this.positions) {\n height += position.yAdvance;\n }\n\n return height;\n }\n\n /**\n * The bounding box containing all glyphs in the run.\n * @type {BBox}\n */\n get bbox() {\n let bbox = new BBox;\n\n let x = 0;\n let y = 0;\n for (let index = 0; index < this.glyphs.length; index++) {\n let glyph = this.glyphs[index];\n let p = this.positions[index];\n let b = glyph.bbox;\n\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n\n x += p.xAdvance;\n y += p.yAdvance;\n }\n\n return bbox;\n }\n}\n","/**\n * Represents a glyph bounding box\n */\nexport default class BBox {\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n /**\n * The minimum X position in the bounding box\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * The minimum Y position in the bounding box\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * The maxmimum X position in the bounding box\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * The maxmimum Y position in the bounding box\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * The width of the bounding box\n * @type {number}\n */\n get width() {\n return this.maxX - this.minX;\n }\n\n /**\n * The height of the bounding box\n * @type {number}\n */\n get height() {\n return this.maxY - this.minY;\n }\n\n addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n }\n\n copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n }\n}\n","import {getScript} from 'unicode-properties';\n\n// This maps the Unicode Script property to an OpenType script tag\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nconst UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\n\nconst OPENTYPE_SCRIPTS = {};\nfor (let script in UNICODE_SCRIPTS) {\n let tag = UNICODE_SCRIPTS[script];\n if (Array.isArray(tag)) {\n for (let t of tag) {\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\n\nexport function fromUnicode(script) {\n return UNICODE_SCRIPTS[script];\n}\n\nexport function fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\n\nexport function forString(string) {\n let len = string.length;\n let idx = 0;\n while (idx < len) {\n let code = string.charCodeAt(idx++);\n\n // Check if this is a high surrogate\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n\n // Check if this is a low surrogate\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n\n let script = getScript(code);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\nexport function forCodePoints(codePoints) {\n for (let i = 0; i < codePoints.length; i++) {\n let codePoint = codePoints[i];\n let script = getScript(codePoint);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\n// The scripts in this map are written from right to left\nconst RTL = {\n arab: true, // Arabic\n hebr: true, // Hebrew\n syrc: true, // Syriac\n thaa: true, // Thaana\n cprt: true, // Cypriot Syllabary\n khar: true, // Kharosthi\n phnx: true, // Phoenician\n 'nko ': true, // N'Ko\n lydi: true, // Lydian\n avst: true, // Avestan\n armi: true, // Imperial Aramaic\n phli: true, // Inscriptional Pahlavi\n prti: true, // Inscriptional Parthian\n sarb: true, // Old South Arabian\n orkh: true, // Old Turkic, Orkhon Runic\n samr: true, // Samaritan\n mand: true, // Mandaic, Mandaean\n merc: true, // Meroitic Cursive\n mero: true, // Meroitic Hieroglyphs\n\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true, // Manichaean\n mend: true, // Mende Kikakui\n nbat: true, // Nabataean\n narb: true, // Old North Arabian\n palm: true, // Palmyrene\n phlp: true // Psalter Pahlavi\n};\n\nexport function direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n\n return 'ltr';\n}\n","/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nexport default class GlyphPosition {\n constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\n /**\n * The amount to move the virtual pen in the X direction after rendering this glyph.\n * @type {number}\n */\n this.xAdvance = xAdvance;\n\n /**\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\n * @type {number}\n */\n this.yAdvance = yAdvance;\n\n /**\n * The offset from the pen position in the X direction at which to render this glyph.\n * @type {number}\n */\n this.xOffset = xOffset;\n\n /**\n * The offset from the pen position in the Y direction at which to render this glyph.\n * @type {number}\n */\n this.yOffset = yOffset;\n }\n}\n","import * as AATFeatureMap from './AATFeatureMap';\nimport * as Script from '../layout/Script';\nimport AATMorxProcessor from './AATMorxProcessor';\n\nexport default class AATLayoutEngine {\n constructor(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n\n substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n\n this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\n }\n\n getAvailableFeatures(script, language) {\n return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\n }\n\n stringsForGlyph(gid) {\n let glyphStrings = this.morxProcessor.generateInputs(gid);\n let result = new Set;\n\n for (let glyphs of glyphStrings) {\n this._addStrings(glyphs, 0, result, '');\n }\n\n return result;\n }\n\n _addStrings(glyphs, index, strings, string) {\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n for (let codePoint of codePoints) {\n let s = string + String.fromCodePoint(codePoint);\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n }\n}\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nconst features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: { // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\n\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\n\nconst OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'), // ??\n\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'), // ??\n numr: feature('fractions', 'diagonalFractions'), // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'), // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n\n init: feature('smartSwash', 'wordInitialSwashes'), // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\n medi: feature('smartSwash', 'nonFinalSwashes'), // ??\n med2: feature('smartSwash', 'nonFinalSwashes'), // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\n fina: feature('smartSwash', 'wordFinalSwashes'), // ??\n\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n\n calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'), //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n};\n\n // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n\n// Add cv01-cv99 features\nfor (let i = 1; i <= 99; i++) {\n OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\n}\n\n// create inverse mapping\nlet AATMapping = {};\nfor (let ot in OTMapping) {\n let aat = OTMapping[ot];\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n\n AATMapping[aat[0]][aat[1]] = ot;\n}\n\n// Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\nexport function mapOTToAAT(features) {\n let res = {};\n for (let k in features) {\n let r;\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n\n res[r[0]][r[1]] = features[k];\n }\n }\n\n return res;\n}\n\n// Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\nfunction mapFeatureStrings(f) {\n let [type, setting] = f;\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n\n return [typeCode, settingCode];\n}\n\n// Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\nexport function mapAATToOT(features) {\n let res = {};\n if (Array.isArray(features)) {\n for (let k = 0; k < features.length; k++) {\n let r;\n let f = mapFeatureStrings(features[k]);\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n\n } else if (typeof features === 'object') {\n for (let type in features) {\n let feature = features[type];\n for (let setting in feature) {\n let r;\n let f = mapFeatureStrings([type, setting]);\n if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\n res[r] = true;\n }\n }\n }\n }\n\n return Object.keys(res);\n}\n","import AATStateMachine from './AATStateMachine';\nimport AATLookupTable from './AATLookupTable';\nimport {cache} from '../decorators';\n\n// indic replacement flags\nconst MARK_FIRST = 0x8000;\nconst MARK_LAST = 0x2000;\nconst VERB = 0x000F;\n\n// contextual substitution and glyph insertion flag\nconst SET_MARK = 0x8000;\n\n// ligature entry flags\nconst SET_COMPONENT = 0x8000;\nconst PERFORM_ACTION = 0x2000;\n\n// ligature action masks\nconst LAST_MASK = 0x80000000;\nconst STORE_MASK = 0x40000000;\nconst OFFSET_MASK = 0x3FFFFFFF;\n\nconst VERTICAL_ONLY = 0x800000;\nconst REVERSE_DIRECTION = 0x400000;\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\n\n// glyph insertion flags\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\nconst MARKED_IS_KASHIDA_LIKE = 0x1000;\nconst CURRENT_INSERT_BEFORE = 0x0800;\nconst MARKED_INSERT_BEFORE = 0x0400;\nconst CURRENT_INSERT_COUNT = 0x03E0;\nconst MARKED_INSERT_COUNT = 0x001F;\n\nexport default class AATMorxProcessor {\n constructor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n }\n\n // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n process(glyphs, features = {}) {\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n // enable/disable the requested features\n for (let feature of chain.features) {\n let f;\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n }\n\n // remove deleted glyphs\n let index = glyphs.length - 1;\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n\n index--;\n }\n\n return glyphs;\n }\n\n processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n }\n\n @cache\n getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n }\n\n getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n case 1:\n return this.processContextualSubstitution;\n case 2:\n return this.processLigature;\n case 4:\n return this.processNoncontextualSubstitutions;\n case 5:\n return this.processGlyphInsertion;\n default:\n throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\n }\n }\n\n processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n }\n\n processContextualSubstitution(glyph, entry, index) {\n let subsitutions = this.subtable.table.substitutionTable.items;\n if (entry.markIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.markIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.currentIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.currentIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[index];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n }\n\n processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n\n if (entry.flags & PERFORM_ACTION) {\n let actions = this.subtable.table.ligatureActions;\n let components = this.subtable.table.components;\n let ligatureList = this.subtable.table.ligatureList;\n\n let actionIndex = entry.action;\n let last = false;\n let ligatureIndex = 0;\n let codePoints = [];\n let ligatureGlyphs = [];\n\n while (!last) {\n let componentGlyph = this.ligatureStack.pop();\n codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\n\n let action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n let store = !!(action & STORE_MASK);\n let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n offset += this.glyphs[componentGlyph].id;\n\n let component = components.getItem(offset);\n ligatureIndex += component;\n\n if (last || store) {\n let ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n }\n\n // Put ligature glyph indexes back on the stack\n this.ligatureStack.push(...ligatureGlyphs);\n }\n }\n\n processNoncontextualSubstitutions(subtable, glyphs, index) {\n let lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n for (index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.id !== 0xffff) {\n let gid = lookupTable.lookup(glyph.id);\n if (gid) { // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n }\n\n _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n let insertions = [];\n while (count--) {\n let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n\n if (!isBefore) {\n glyphIndex++;\n }\n\n this.glyphs.splice(glyphIndex, 0, ...insertions);\n }\n\n processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n\n if (entry.markedInsertIndex !== 0xffff) {\n let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n\n if (entry.currentInsertIndex !== 0xffff) {\n let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\n }\n }\n\n getSupportedFeatures() {\n let features = [];\n for (let chain of this.morx.chains) {\n for (let feature of chain.features) {\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n\n return features;\n }\n\n generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n\n return this.inputCache[gid] || [];\n }\n\n generateInputCache() {\n this.inputCache = {};\n\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n }\n\n generateInputsForSubtable(subtable) {\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n\n let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n\n this.subtable = subtable;\n this.ligatureStack = [];\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let input = [];\n let stack = [];\n this.glyphs = [];\n\n stateMachine.traverse({\n enter: (glyph, entry) => {\n let glyphs = this.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: this.ligatureStack.slice()\n });\n\n // Add glyph to input and glyphs to process.\n let g = this.font.getGlyph(glyph);\n input.push(g);\n glyphs.push(input[input.length - 1]);\n\n // Process ligature substitution\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\n\n // Add input to result if only one matching (non-deleted) glyph remains.\n let count = 0;\n let found = 0;\n for (let i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n\n if (count === 1) {\n let result = input.map(g => g.id);\n let cache = this.inputCache[found];\n if (cache) {\n cache.push(result);\n } else {\n this.inputCache[found] = [result];\n }\n }\n },\n\n exit: () => {\n ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\n input.pop();\n }\n });\n }\n}\n\n// swaps the glyphs in rangeA with those in rangeB\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\n let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n if (reverseB) {\n end.reverse();\n }\n\n let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\n if (reverseA) {\n start.reverse();\n }\n\n glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\n return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n let length = lastGlyph - firstGlyph + 1;\n switch (verb) {\n case 0: // no change\n return glyphs;\n\n case 1: // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n case 2: // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n case 3: // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n case 4: // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n case 5: // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n case 6: // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n case 7: // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n case 8: // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n case 9: // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n case 10: // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n case 11: // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n case 12: // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n case 13: // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n case 14: // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n case 15: // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n default:\n throw new Error(`Unknown verb: ${verb}`);\n }\n}\n","import AATLookupTable from './AATLookupTable';\n\nconst START_OF_TEXT_STATE = 0;\nconst START_OF_LINE_STATE = 1;\n\nconst END_OF_TEXT_CLASS = 0;\nconst OUT_OF_BOUNDS_CLASS = 1;\nconst DELETED_GLYPH_CLASS = 2;\nconst END_OF_LINE_CLASS = 3;\n\nconst DONT_ADVANCE = 0x4000;\n\nexport default class AATStateMachine {\n constructor(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n\n process(glyphs, reverse, processEntry) {\n let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n let index = reverse ? glyphs.length - 1 : 0;\n let dir = reverse ? -1 : 1;\n\n while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\n let glyph = null;\n let classCode = OUT_OF_BOUNDS_CLASS;\n let shouldAdvance = true;\n\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n if (glyph.id === 0xffff) { // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n\n let row = this.stateTable.stateArray.getItem(currentState);\n let entryIndex = row[classCode];\n let entry = this.stateTable.entryTable.getItem(entryIndex);\n\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n\n currentState = entry.newState;\n if (shouldAdvance) {\n index += dir;\n }\n }\n\n return glyphs;\n }\n\n /**\n * Performs a depth-first traversal of the glyph strings\n * represented by the state machine.\n */\n traverse(opts, state = 0, visited = new Set) {\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n\n let {nClasses, stateArray, entryTable} = this.stateTable;\n let row = stateArray.getItem(state);\n\n // Skip predefined classes\n for (let classCode = 4; classCode < nClasses; classCode++) {\n let entryIndex = row[classCode];\n let entry = entryTable.getItem(entryIndex);\n\n // Try all glyphs in the class\n for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n }\n}\n","import {cache} from '../decorators';\nimport {range} from '../utils';\n\nexport default class AATLookupTable {\n constructor(table) {\n this.table = table;\n }\n\n lookup(glyph) {\n switch (this.table.version) {\n case 0: // simple array format\n return this.table.values.getItem(glyph);\n\n case 2: // segment format\n case 4: {\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n\n return null;\n }\n\n case 6: { // lookup single\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.glyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.glyph) {\n max = mid - 1;\n } else if (glyph > seg.glyph) {\n min = mid + 1;\n } else {\n return seg.value;\n }\n }\n\n return null;\n }\n\n case 8: // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n }\n\n @cache\n glyphsForValue(classValue) {\n let res = [];\n\n switch (this.table.version) {\n case 2: // segment format\n case 4: {\n for (let segment of this.table.segments) {\n if ((this.table.version === 2 && segment.value === classValue)) {\n res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (let index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n\n break;\n }\n\n case 6: { // lookup single\n for (let segment of this.table.segments) {\n if (segment.value === classValue) {\n res.push(segment.glyph);\n }\n }\n\n break;\n }\n\n case 8: { // lookup trimmed\n for (let i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n\n break;\n }\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n\n return res;\n }\n}\n","import ShapingPlan from './ShapingPlan';\nimport * as Shapers from './shapers';\nimport GlyphInfo from './GlyphInfo';\nimport GSUBProcessor from './GSUBProcessor';\nimport GPOSProcessor from './GPOSProcessor';\n\nexport default class OTLayoutEngine {\n constructor(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n\n setup(glyphRun) {\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\n\n // Select a script based on what is available in GSUB/GPOS.\n let script = null;\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n this.shaper = Shapers.choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\n\n // Assign chosen features to output glyph run\n for (let key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n }\n\n substitute(glyphRun) {\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos);\n\n // Map glyph infos back to normal Glyph objects\n glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\n }\n }\n\n position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n // Reverse the glyphs and positions if the script is right-to-left\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n\n return this.GPOSProcessor && this.GPOSProcessor.features;\n }\n\n zeroMarkAdvances(positions) {\n for (let i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GSUBProcessor.features));\n }\n\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GPOSProcessor.features));\n }\n\n return features;\n }\n}\n","import * as Script from '../layout/Script';\n\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nexport default class ShapingPlan {\n constructor(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n\n /**\n * Adds the given features to the last stage.\n * Ignores features that have already been applied.\n */\n _addFeatures(features, global) {\n let stageIndex = this.stages.length - 1;\n let stage = this.stages[stageIndex];\n for (let feature of features) {\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n\n /**\n * Add features to the last stage\n */\n add(arg, global = true) {\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n\n if (typeof arg === 'string') {\n arg = [arg];\n }\n\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n\n /**\n * Add a new stage\n */\n addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n }\n\n setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (let tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n let stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n\n /**\n * Assigns the global features to the given glyphs\n */\n assignGlobalFeatures(glyphs) {\n for (let glyph of glyphs) {\n for (let feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n\n /**\n * Executes the planned stages using the given OTProcessor\n */\n process(processor, glyphs, positions) {\n for (let stage of this.stages) {\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport ArabicShaper from './ArabicShaper';\nimport HangulShaper from './HangulShaper';\nimport IndicShaper from './IndicShaper';\nimport UniversalShaper from './UniversalShaper';\n\nconst SHAPERS = {\n arab: ArabicShaper, // Arabic\n mong: ArabicShaper, // Mongolian\n syrc: ArabicShaper, // Syriac\n 'nko ': ArabicShaper, // N'Ko\n phag: ArabicShaper, // Phags Pa\n mand: ArabicShaper, // Mandaic\n mani: ArabicShaper, // Manichaean\n phlp: ArabicShaper, // Psalter Pahlavi\n\n hang: HangulShaper, // Hangul\n\n bng2: IndicShaper, // Bengali\n beng: IndicShaper, // Bengali\n dev2: IndicShaper, // Devanagari\n deva: IndicShaper, // Devanagari\n gjr2: IndicShaper, // Gujarati\n gujr: IndicShaper, // Gujarati\n guru: IndicShaper, // Gurmukhi\n gur2: IndicShaper, // Gurmukhi\n knda: IndicShaper, // Kannada\n knd2: IndicShaper, // Kannada\n mlm2: IndicShaper, // Malayalam\n mlym: IndicShaper, // Malayalam\n ory2: IndicShaper, // Oriya\n orya: IndicShaper, // Oriya\n taml: IndicShaper, // Tamil\n tml2: IndicShaper, // Tamil\n telu: IndicShaper, // Telugu\n tel2: IndicShaper, // Telugu\n khmr: IndicShaper, // Khmer\n\n bali: UniversalShaper, // Balinese\n batk: UniversalShaper, // Batak\n brah: UniversalShaper, // Brahmi\n bugi: UniversalShaper, // Buginese\n buhd: UniversalShaper, // Buhid\n cakm: UniversalShaper, // Chakma\n cham: UniversalShaper, // Cham\n dupl: UniversalShaper, // Duployan\n egyp: UniversalShaper, // Egyptian Hieroglyphs\n gran: UniversalShaper, // Grantha\n hano: UniversalShaper, // Hanunoo\n java: UniversalShaper, // Javanese\n kthi: UniversalShaper, // Kaithi\n kali: UniversalShaper, // Kayah Li\n khar: UniversalShaper, // Kharoshthi\n khoj: UniversalShaper, // Khojki\n sind: UniversalShaper, // Khudawadi\n lepc: UniversalShaper, // Lepcha\n limb: UniversalShaper, // Limbu\n mahj: UniversalShaper, // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper, // Meitei Mayek\n modi: UniversalShaper, // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper, // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper, // Rejang\n saur: UniversalShaper, // Saurashtra\n shrd: UniversalShaper, // Sharada\n sidd: UniversalShaper, // Siddham\n sinh: IndicShaper, // Sinhala\n sund: UniversalShaper, // Sundanese\n sylo: UniversalShaper, // Syloti Nagri\n tglg: UniversalShaper, // Tagalog\n tagb: UniversalShaper, // Tagbanwa\n tale: UniversalShaper, // Tai Le\n lana: UniversalShaper, // Tai Tham\n tavt: UniversalShaper, // Tai Viet\n takr: UniversalShaper, // Takri\n tibt: UniversalShaper, // Tibetan\n tfng: UniversalShaper, // Tifinagh\n tirh: UniversalShaper, // Tirhuta\n\n latn: DefaultShaper, // Latin\n DFLT: DefaultShaper // Default\n};\n\nexport function choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n let shaper = SHAPERS[s];\n if (shaper) {\n return shaper;\n }\n }\n\n return DefaultShaper;\n}\n","import {isDigit} from 'unicode-properties';\n\nconst VARIATION_FEATURES = ['rvrn'];\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nconst VERTICAL_FEATURES = ['vert'];\nconst DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\n\nexport default class DefaultShaper {\n static zeroMarkWidths = 'AFTER_GPOS';\n static plan(plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(plan);\n this.planFeatures(plan);\n this.planPostprocessing(plan, features);\n\n // Assign the global features to all the glyphs\n plan.assignGlobalFeatures(glyphs);\n\n // Assign local features to glyphs\n this.assignFeatures(plan, glyphs);\n }\n\n static planPreprocessing(plan) {\n plan.add({\n global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\n local: FRACTIONAL_FEATURES\n });\n }\n\n static planFeatures(plan) {\n // Do nothing by default. Let subclasses override this.\n }\n\n static planPostprocessing(plan, userFeatures) {\n plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\n plan.setFeatureOverrides(userFeatures);\n }\n\n static assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (let i = 0; i < glyphs.length; i++) {\n let glyph = glyphs[i];\n if (glyph.codePoints[0] === 0x2044) { // fraction slash\n let start = i;\n let end = i + 1;\n\n // Apply numerator\n while (start > 0 && isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n }\n\n // Apply denominator\n while (end < glyphs.length && isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n }\n\n // Apply fraction slash\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport {getCategory} from 'unicode-properties';\nimport UnicodeTrie from 'unicode-trie';\nimport { decodeBase64 } from '../../utils';\n\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\n\nconst ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\n\nconst ISOL = 'isol';\nconst FINA = 'fina';\nconst FIN2 = 'fin2';\nconst FIN3 = 'fin3';\nconst MEDI = 'medi';\nconst MED2 = 'med2';\nconst INIT = 'init';\nconst NONE = null;\n\n// Each entry is [prevAction, curAction, nextState]\nconst STATE_TABLE = [\n // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n // State 0: prev was U, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ],\n\n // State 1: prev was R or ISOL/ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ],\n\n // State 2: prev was D/L in ISOL form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ],\n\n // State 3: prev was D in FINA form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ],\n\n // State 4: prev was FINA ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ],\n\n // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ],\n\n // State 6: prev was DALATH/RISH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ]\n];\n\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nexport default class ArabicShaper extends DefaultShaper {\n static planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n for (let i = 0; i < FEATURES.length; i++) {\n let feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n\n plan.addStage('mset');\n }\n\n static assignFeatures(plan, glyphs) {\n super.assignFeatures(plan, glyphs);\n\n let prev = -1;\n let state = 0;\n let actions = [];\n\n // Apply the state machine to map glyphs to features\n for (let i = 0; i < glyphs.length; i++) {\n let curAction, prevAction;\n var glyph = glyphs[i];\n let type = getShapingClass(glyph.codePoints[0]);\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n\n [prevAction, curAction, state] = STATE_TABLE[state][type];\n\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n\n actions[i] = curAction;\n prev = i;\n }\n\n // Apply the chosen features to their respective glyphs\n for (let index = 0; index < glyphs.length; index++) {\n let feature;\n var glyph = glyphs[index];\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n }\n}\n\nfunction getShapingClass(codePoint) {\n let res = trie.get(codePoint);\n if (res) {\n return res - 1;\n }\n\n let category = getCategory(codePoint);\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n\n return ShapingClasses.Non_Joining;\n}\n","import DefaultShaper from './DefaultShaper';\nimport GlyphInfo from '../GlyphInfo';\n\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n * - decompose if unsupported by the font:\n * -> \n * -> \n * -> \n *\n * - compose if supported by the font:\n * -> \n * -> \n * -> \n *\n * - reorder tone marks (S is any valid syllable):\n * -> \n *\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nexport default class HangulShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n }\n\n static assignFeatures(plan, glyphs) {\n let state = 0;\n let i = 0;\n while (i < glyphs.length) {\n let action;\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n let type = getType(code);\n\n [ action, state ] = STATE_TABLE[state][type];\n\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n break;\n\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n\n i++;\n }\n }\n}\n\nconst HANGUL_BASE = 0xac00;\nconst HANGUL_END = 0xd7a4;\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nconst L_BASE = 0x1100; // lead\nconst V_BASE = 0x1161; // vowel\nconst T_BASE = 0x11a7; // trail\nconst L_COUNT = 19;\nconst V_COUNT = 21;\nconst T_COUNT = 28;\nconst L_END = L_BASE + L_COUNT - 1;\nconst V_END = V_BASE + V_COUNT - 1;\nconst T_END = T_BASE + T_COUNT - 1;\nconst DOTTED_CIRCLE = 0x25cc;\n\nconst isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\nconst isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\nconst isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\nconst isTone = code => 0x302e <= code && code <= 0x302f;\nconst isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;\nconst isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\n\n// Character categories\nconst X = 0; // Other character\nconst L = 1; // Leading consonant\nconst V = 2; // Medial vowel\nconst T = 3; // Trailing consonant\nconst LV = 4; // Composed syllable\nconst LVT = 5; // Composed syllable\nconst M = 6; // Tone mark\n\n// This function classifies a character using the above categories.\nfunction getType(code) {\n if (isL(code)) { return L; }\n if (isV(code)) { return V; }\n if (isT(code)) { return T; }\n if (isLV(code)) { return LV; }\n if (isLVT(code)) { return LVT; }\n if (isTone(code)) { return M; }\n return X;\n}\n\n// State machine actions\nconst NO_ACTION = 0;\nconst DECOMPOSE = 1;\nconst COMPOSE = 2;\nconst TONE_MARK = 4;\nconst INVALID = 5;\n\n// Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\nconst STATE_TABLE = [\n // X L V T LV LVT M\n // State 0: start state\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 1: \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 2: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\n\n // State 3: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\n];\n\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n\n let s = code - HANGUL_BASE;\n let t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n let l = L_BASE + s / V_COUNT | 0;\n let v = V_BASE + s % V_COUNT;\n\n // Don't decompose if all of the components are not available\n if (!font.hasGlyphForCodePoint(l) ||\n !font.hasGlyphForCodePoint(v) ||\n (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\n return i;\n }\n\n // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n let ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n\n let vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n\n let insert = [ ljmo, vjmo ];\n\n if (t > T_BASE) {\n let tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n\n glyphs.splice(i, 1, ...insert);\n return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n let type = getType(code);\n\n let prev = glyphs[i - 1].codePoints[0];\n let prevType = getType(prev);\n\n // Figure out what type of syllable we're dealing with\n let lv, ljmo, vjmo, tjmo;\n if (prevType === LV && type === T) {\n // \n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // \n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // \n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n\n let l = ljmo.codePoints[0];\n let v = vjmo.codePoints[0];\n\n // Make sure L and V are combining characters\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n\n let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\n if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\n let s = lv + (t - T_BASE);\n\n // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n if (font.hasGlyphForCodePoint(s)) {\n let del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n }\n\n // Didn't compose (either a non-combining component or unsupported by font).\n if (ljmo) { ljmo.features.ljmo = true; }\n if (vjmo) { vjmo.features.vjmo = true; }\n if (tjmo) { tjmo.features.tjmo = true; }\n\n if (prevType === LV) {\n // Sequence was originally , which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n\n return i;\n}\n\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n case V:\n return 2;\n case T:\n return 3;\n }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n // Move tone mark to the beginning of the previous syllable, unless it is zero width\n if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\n\n let prev = glyphs[i - 1].codePoints[0];\n let len = getLength(prev);\n\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\n\n // If the tone mark is zero width, insert the dotted circle before, otherwise after\n let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n\n return i;\n}\n","import {isMark} from 'unicode-properties';\nimport OTProcessor from './OTProcessor';\n\nexport default class GlyphInfo {\n constructor(font, id, codePoints = [], features) {\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n\n this.features = {};\n if (Array.isArray(features)) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n\n get id() {\n return this._id;\n }\n\n set id(id) {\n this._id = id;\n this.substituted = true;\n\n let GDEF = this._font.GDEF;\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n\n copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n }\n}\n","import GlyphIterator from './GlyphIterator';\nimport * as Script from '../layout/Script';\n\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nexport default class OTProcessor {\n constructor(font, table) {\n this.font = font;\n this.table = table;\n\n this.script = null;\n this.scriptTag = null;\n\n this.language = null;\n this.languageTag = null;\n\n this.features = {};\n this.lookups = {};\n\n // Setup variation substitutions\n this.variationsIndex = font._variationProcessor\n ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\n : -1;\n\n // initialize to default script + language\n this.selectScript();\n\n // current context (set by applyFeatures)\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n\n findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n for (let entry of this.table.scriptList) {\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n\n return null;\n }\n\n selectScript(script, language, direction) {\n let changed = false;\n let entry;\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n\n if (!entry) {\n return this.scriptTag;\n }\n\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n\n if (!direction || direction !== this.direction) {\n this.direction = direction || Script.direction(script);\n }\n\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n\n if (!language || language !== this.languageTag) {\n this.language = null;\n\n for (let lang of this.script.langSysRecords) {\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n\n changed = true;\n }\n\n // Build a feature lookup table\n if (changed) {\n this.features = {};\n if (this.language) {\n for (let featureIndex of this.language.featureIndexes) {\n let record = this.table.featureList[featureIndex];\n let substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n\n return this.scriptTag;\n }\n\n lookupsForFeatures(userFeatures = [], exclude) {\n let lookups = [];\n for (let tag of userFeatures) {\n let feature = this.features[tag];\n if (!feature) {\n continue;\n }\n\n for (let lookupIndex of feature.lookupListIndexes) {\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n\n lookups.sort((a, b) => a.index - b.index);\n return lookups;\n }\n\n substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n\n let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n let substitutions = record.featureTableSubstitution.substitutions;\n for (let substitution of substitutions) {\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n\n return null;\n }\n\n findVariationsIndex(coords) {\n let variations = this.table.featureVariations;\n if (!variations) {\n return -1;\n }\n\n let records = variations.featureVariationRecords;\n for (let i = 0; i < records.length; i++) {\n let conditions = records[i].conditionSet.conditionTable;\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n\n return -1;\n }\n\n variationConditionsMatch(conditions, coords) {\n return conditions.every(condition => {\n let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n let lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n }\n\n applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n\n for (let { feature, lookup } of lookups) {\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n\n for (let table of lookup.subTables) {\n let res = this.applyLookup(lookup.lookupType, table);\n if (res) {\n break;\n }\n }\n\n this.glyphIterator.next();\n }\n }\n }\n\n applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n }\n\n applyLookupList(lookupRecords) {\n let options = this.glyphIterator.options;\n let glyphIndex = this.glyphIterator.index;\n\n for (let lookupRecord of lookupRecords) {\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex);\n\n // Get the lookup and setup flags for subtables\n let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\n\n // Apply lookup subtables until one matches\n for (let table of lookup.subTables) {\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n }\n\n coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n\n case 2:\n for (let range of coverage.rangeRecords) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n\n break;\n }\n\n return -1;\n }\n\n match(sequenceIndex, sequence, fn, matched) {\n let pos = this.glyphIterator.index;\n let glyph = this.glyphIterator.increment(sequenceIndex);\n let idx = 0;\n\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n\n idx++;\n glyph = this.glyphIterator.next();\n }\n\n this.glyphIterator.index = pos;\n if (idx < sequence.length) {\n return false;\n }\n\n return matched || true;\n }\n\n sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\n }\n\n sequenceMatchIndices(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => {\n // If the current feature doesn't apply to this glyph,\n if (!(this.currentFeature in glyph.features)) {\n return false;\n }\n\n return component === glyph.id;\n }, []);\n }\n\n coverageSequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (coverage, glyph) =>\n this.coverageIndex(coverage, glyph.id) >= 0\n );\n }\n\n getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1: // Class array\n let i = glyph - classDef.startGlyph;\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n\n break;\n\n case 2:\n for (let range of classDef.classRangeRecord) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n\n break;\n }\n\n return 0;\n }\n\n classSequenceMatches(sequenceIndex, sequence, classDef) {\n return this.match(sequenceIndex, sequence, (classID, glyph) =>\n classID === this.getClassID(glyph.id, classDef)\n );\n }\n\n applyContext(table) {\n let index, set;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n set = table.ruleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n if (index === -1) {\n return false;\n }\n\n set = table.classSet[index];\n for (let rule of set) {\n if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n\n applyChainingContext(table) {\n let index;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let set = table.chainRuleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\n && this.sequenceMatches(1, rule.input)\n && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n let rules = table.chainClassSet[index];\n if (!rules) {\n return false;\n }\n\n for (let rule of rules) {\n if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\n this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\n this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\n this.coverageSequenceMatches(0, table.inputCoverage) &&\n this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n}\n","export default class GlyphIterator {\n constructor(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n\n reset(options = {}, index = 0) {\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n }\n\n get cur() {\n return this.glyphs[this.index] || null;\n }\n\n shouldIgnore(glyph) {\n return (this.flags.ignoreMarks && glyph.isMark) ||\n (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\n (this.flags.ignoreLigatures && glyph.isLigature) ||\n (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\n }\n\n move(dir) {\n this.index += dir;\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n\n return this.glyphs[this.index];\n }\n\n next() {\n return this.move(+1);\n }\n\n prev() {\n return this.move(-1);\n }\n\n peek(count = 1) {\n let idx = this.index;\n let res = this.increment(count);\n this.index = idx;\n return res;\n }\n\n peekIndex(count = 1) {\n let idx = this.index;\n this.increment(count);\n let res = this.index;\n this.index = idx;\n return res;\n }\n\n increment(count = 1) {\n let dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n while (count--) {\n this.move(dir);\n }\n\n return this.glyphs[this.index];\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport {getCategory} from 'unicode-properties';\nimport * as Script from '../../layout/Script';\nimport GlyphInfo from '../GlyphInfo';\nimport indicMachine from './indic.json';\nimport useData from './use.json';\nimport {\n CATEGORIES,\n POSITIONS,\n CONSONANT_FLAGS,\n JOINER_FLAGS,\n HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\n INDIC_DECOMPOSITIONS\n} from './indic-data';\nimport { decodeBase64 } from '../../utils';\n\nconst {decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/indic.trie', 'base64')));\nconst stateMachine = new StateMachine(indicMachine);\n\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nexport default class IndicShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n plan.addStage(['locl', 'ccmp']);\n\n plan.addStage(initialReordering);\n\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n\n plan.addStage(finalReordering);\n\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n });\n\n // Setup the indic config for the selected script\n plan.unicodeScript = Script.fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\n\n // TODO: turn off kern (Khmer) and liga features.\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\n if (d) {\n let decomposed = d.map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction indicCategory(glyph) {\n return trie.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\n}\n\nclass IndicInfo {\n constructor(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n let last = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\n if (start > last) {\n ++syllable;\n for (let i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new IndicInfo(\n 1 << indicCategory(glyphs[i]),\n indicPosition(glyphs[i]),\n tags[0],\n syllable\n );\n }\n\n last = end + 1;\n }\n\n if (last < glyphs.length) {\n ++syllable;\n for (let i = last; i < glyphs.length; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\n\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n for (let glyph of glyphs) {\n glyph.features = {[feature]: true};\n }\n\n let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n\n return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n let glyphs = [virama, consonant, virama];\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n\n return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n let virama = font.glyphForCodePoint(indicConfig.virama).id;\n if (virama) {\n let info = new GlyphInfo(font, virama, [indicConfig.virama]);\n for (let i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let {category, syllableType} = glyphs[start].shaperInfo;\n\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n\n if (syllableType === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(\n 1 << indicCategory(g),\n indicPosition(g),\n glyphs[start].shaperInfo.syllableType,\n glyphs[start].shaperInfo.syllable\n );\n\n // Insert after possible Repha.\n let i = start;\n while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\n i++;\n }\n\n glyphs.splice(i++, 0, g);\n end++;\n }\n\n // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n let base = end;\n let limit = start;\n let hasReph = false;\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\n features.rphf &&\n start + 3 <= end && (\n (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\n (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\n )\n ) {\n // See if it matches the 'rphf' feature.\n let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\n limit += 2;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n\n switch (indicConfig.basePos) {\n case 'Last': {\n // starting from the end of the syllable, move backwards\n let i = end;\n let seenBelow = false;\n\n do {\n let info = glyphs[--i].shaperInfo;\n\n // until a consonant is found\n if (isConsonant(glyphs[i])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\n base = i;\n break;\n }\n\n // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n if (info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n\n base = i;\n } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (i > limit);\n break;\n }\n\n case 'First': {\n // The first consonant is always the base.\n base = start;\n\n // Mark all subsequent consonants as below.\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n glyphs[i].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n }\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n }\n\n // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n\n // Reorder characters\n\n for (let i = start; i < base; i++) {\n let info = glyphs[i].shaperInfo;\n info.position = Math.min(POSITIONS.Pre_C, info.position);\n }\n\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n\n // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n for (let j = i + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n break;\n }\n }\n\n // Handle beginning Ra\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n }\n\n // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n if (plan.isOldSpec) {\n let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\n let j;\n for (j = end - 1; j > i; j--) {\n if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\n break;\n }\n }\n\n if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\n // Move Halant to after last consonant.\n let t = glyphs[i];\n glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\n glyphs[j] = t;\n }\n\n break;\n }\n }\n }\n\n // Attach misc marks to previous char to move with them.\n let lastPos = POSITIONS.Start;\n for (let i = start; i < end; i++) {\n let info = glyphs[i].shaperInfo;\n if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\n info.position = lastPos;\n if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (let j = i; j > start; j--) {\n if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n info.position = glyphs[j - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (info.position !== POSITIONS.SMVD) {\n lastPos = info.position;\n }\n }\n\n // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n let last = base;\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n for (let j = last + 1; j < i; j++) {\n if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\n }\n }\n last = i;\n } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n last = i;\n }\n }\n\n let arr = glyphs.slice(start, end);\n arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\n glyphs.splice(start, arr.length, ...arr);\n\n // Find base again\n for (let i = start; i < end; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n base = i;\n break;\n }\n }\n\n // Setup features now\n\n // Reph\n for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\n glyphs[i].features.rphf = true;\n }\n\n // Pre-base\n let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n for (let i = start; i < base; i++) {\n glyphs[i].features.half = true;\n if (blwf) {\n glyphs[i].features.blwf = true;\n }\n }\n\n // Post-base\n for (let i = base + 1; i < end; i++) {\n glyphs[i].features.abvf = true;\n glyphs[i].features.pstf = true;\n glyphs[i].features.blwf = true;\n }\n\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (let i = start; i + 1 < base; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\n glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\n (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\n ) {\n glyphs[i].features.blwf = true;\n glyphs[i + 1].features.blwf = true;\n }\n }\n }\n\n let prefLen = 2;\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (let i = base + 1; i + prefLen - 1 < end; i++) {\n let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\n if (wouldSubstitute(g, 'pref')) {\n for (let j = 0; j < prefLen; j++) {\n glyphs[i++].features.pref = true;\n }\n\n // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n if (features.cfar) {\n for (; i < end; i++) {\n glyphs[i].features.cfar = true;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply ZWJ/ZWNJ effects\n for (let i = start + 1; i < end; i++) {\n if (isJoiner(glyphs[i])) {\n let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\n let j = i;\n\n do {\n j--;\n\n // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n\n // A ZWNJ disables HALF.\n if (nonJoiner) {\n delete glyphs[j].features.half;\n }\n } while (j > start && !isConsonant(glyphs[j]));\n }\n }\n }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n\n let tryPref = !!features.pref;\n\n // Find base again\n let base = start;\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n break;\n }\n }\n }\n\n // For Malayalam, skip over unformed below- (but NOT post-) forms.\n if (plan.unicodeScript === 'Malayalam') {\n for (let i = base + 1; i < end; i++) {\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i === end || !isHalantOrCoeng(glyphs[i])) {\n break;\n }\n\n i++; // Skip halant.\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\n base = i;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n break;\n }\n }\n\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n }\n\n // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n let newPos = base === end ? base - 2 : base - 1;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (let i = newPos; i > start; i--) {\n if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\n let oldPos = i - 1;\n if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\n base--;\n }\n\n let tmp = glyphs[oldPos];\n glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\n glyphs[newPos] = tmp;\n\n newPos--;\n }\n }\n }\n }\n\n // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n if (start + 1 < end &&\n glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\n (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\n ) {\n let newRephPos;\n let rephPos = indicConfig.rephPos;\n let found = false;\n\n // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n\n // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n\n // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n }\n\n // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n }\n\n // 6. Otherwise, reorder reph to the end of the syllable.\n if (!found) {\n newRephPos = end - 1;\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n }\n\n // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (let i = base + 1; i < newRephPos; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n\n let reph = glyphs[start];\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\n glyphs[newRephPos] = reph;\n\n if (start < base && base <= newRephPos) {\n base--;\n }\n }\n\n // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n\n // Note: We just check that something got substituted. We don't check that\n // the feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n let newPos = base;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\n let oldPos = i;\n for (let j = base + 1; j < oldPos; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n newPos--;\n break;\n }\n }\n }\n }\n\n if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos < end && isJoiner(glyphs[newPos])) {\n newPos++;\n }\n }\n\n let oldPos = i;\n let tmp = glyphs[oldPos];\n glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\n glyphs[newPos] = tmp;\n\n if (newPos <= base && base < oldPos) {\n base++;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply 'init' to the Left Matra if it's a word start.\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n","{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}","{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}","// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nexport const CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13, // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14, // Khmer-style Virama.\n Repha: 1 << 15, // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17, // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n};\n\n// Visual positions in a syllable from left to right.\nexport const POSITIONS = {\n Start: 1 << 0,\n\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n\n Above_C: 1 << 6,\n\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n\n End: 1 << 15\n};\n\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\n\nexport const INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n};\n\n// Additional decompositions that aren't in Unicode\nexport const INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport GlyphInfo from '../GlyphInfo';\nimport useData from './use.json';\nimport { decodeBase64 } from '../../utils';\n\nconst {categories, decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/use.trie', 'base64')));\nconst stateMachine = new StateMachine(useData);\n\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nexport default class UniversalShaper extends DefaultShaper {\n static zeroMarkWidths = 'BEFORE_GPOS';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n // Default glyph pre-processing group\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\n\n // Reordering group\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref);\n\n // Orthographic unit shaping group\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder);\n\n // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n\n // Standard topographic presentation and positional feature application\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n if (decompositions[codepoint]) {\n let decomposed = decompositions[codepoint].map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction useCategory(glyph) {\n return trie.get(glyph.codePoints[0]);\n}\n\nclass USEInfo {\n constructor(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\n }\n\n // Assign rphf feature\n let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n for (let i = start; i < start + limit; i++) {\n glyphs[i].features.rphf = true;\n }\n }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n for (let glyph of glyphs) {\n glyph.substituted = false;\n }\n}\n\nfunction recordRphf(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\n\nfunction recordPref(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\n\nfunction reorder(font, glyphs) {\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let i, j;\n let info = glyphs[start].shaperInfo;\n let type = info.syllableType;\n\n // Only a few syllable types need reordering.\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n }\n\n // Insert a dotted circle glyph in broken clusters.\n if (type === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info;\n\n // Insert after possible Repha.\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\n glyphs.splice(++i, 0, g);\n end++;\n }\n\n // Move things forward.\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\n break;\n }\n }\n }\n\n // Move things back.\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\n }\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\n","import OTProcessor from './OTProcessor';\nimport GlyphInfo from './GlyphInfo';\n\nexport default class GSUBProcessor extends OTProcessor {\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let glyph = this.glyphIterator.cur;\n switch (table.version) {\n case 1:\n glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\n break;\n\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n\n return true;\n }\n\n case 2: { // Multiple Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let sequence = table.sequences.get(index);\n\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n\n let features = this.glyphIterator.cur.features;\n let curGlyph = this.glyphIterator.cur;\n let replacement = sequence.slice(1).map((gid, i) => {\n let glyph = new GlyphInfo(this.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n\n this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\n return true;\n }\n\n return false;\n }\n\n case 3: { // Alternate Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let USER_INDEX = 0; // TODO\n this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\n return true;\n }\n\n return false;\n }\n\n case 4: { // Ligature Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n for (let ligature of table.ligatureSets.get(index)) {\n let matched = this.sequenceMatchIndices(1, ligature.components);\n if (!matched) {\n continue;\n }\n\n let curGlyph = this.glyphIterator.cur;\n\n // Concatenate all of the characters the new ligature will represent\n let characters = curGlyph.codePoints.slice();\n for (let index of matched) {\n characters.push(...this.glyphs[index].codePoints);\n }\n\n // Create the replacement ligature glyph\n let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\n ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true;\n\n // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n let isMarkLigature = curGlyph.isMark;\n for (let i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n\n let lastLigID = curGlyph.ligatureID;\n let lastNumComps = curGlyph.codePoints.length;\n let curComps = lastNumComps;\n let idx = this.glyphIterator.index + 1;\n\n // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n for (let matchIndex of matched) {\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n }\n\n // Adjust ligature components for any marks following\n if (lastLigID && !isMarkLigature) {\n for (let i = idx; i < this.glyphs.length; i++) {\n if (this.glyphs[i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\n this.glyphs[i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n }\n\n // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n for (let i = matched.length - 1; i >= 0; i--) {\n this.glyphs.splice(matched[i], 1);\n }\n\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n\n return false;\n }\n\n case 5: // Contextual Substitution\n return this.applyContext(table);\n\n case 6: // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n\n case 7: // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`GSUB lookupType ${lookupType} is not supported`);\n }\n }\n}\n","import OTProcessor from './OTProcessor';\n\nexport default class GPOSProcessor extends OTProcessor {\n applyPositionValue(sequenceIndex, value) {\n let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n }\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n }\n\n // TODO: device tables\n }\n\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single positioning value\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n\n return true;\n }\n\n case 2: { // Pair Adjustment Positioning\n let nextGlyph = this.glyphIterator.peek();\n if (!nextGlyph) {\n return false;\n }\n\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1: // Adjustments for glyph pairs\n let set = table.pairSets.get(index);\n\n for (let pair of set) {\n if (pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n return false;\n\n case 2: // Class pair adjustment\n let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n let class2 = this.getClassID(nextGlyph.id, table.classDef2);\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n case 3: { // Cursive Attachment Positioning\n let nextIndex = this.glyphIterator.peekIndex();\n let nextGlyph = this.glyphs[nextIndex];\n if (!nextGlyph) {\n return false;\n }\n\n let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n\n let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n\n let entry = this.getAnchor(nextRecord.entryAnchor);\n let exit = this.getAnchor(curRecord.exitAnchor);\n\n let cur = this.positions[this.glyphIterator.index];\n let next = this.positions[nextIndex];\n let d;\n\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n\n d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n\n return true;\n }\n\n case 4: { // Mark to base positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n if (baseIndex === -1) {\n return false;\n }\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 5: { // Mark to ligature positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\n if (ligIndex === -1) {\n return false;\n }\n\n let ligAttach = table.ligatureArray[ligIndex];\n let markGlyph = this.glyphIterator.cur;\n let ligGlyph = this.glyphs[baseGlyphIndex];\n let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\n ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\n : ligGlyph.codePoints.length - 1;\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = ligAttach[compIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 6: { // Mark to mark positioning\n let mark1Index = this.coverageIndex(table.mark1Coverage);\n if (mark1Index === -1) {\n return false;\n }\n\n // get the previous mark to attach to\n let prevIndex = this.glyphIterator.peekIndex(-1);\n let prev = this.glyphs[prevIndex];\n if (!prev || !prev.isMark) {\n return false;\n }\n\n let cur = this.glyphIterator.cur;\n\n // The following logic was borrowed from Harfbuzz\n let good = false;\n if (cur.ligatureID === prev.ligatureID) {\n if (!cur.ligatureID) { // Marks belonging to the same base\n good = true;\n } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\n good = true;\n }\n }\n\n if (!good) {\n return false;\n }\n\n let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n if (mark2Index === -1) {\n return false;\n }\n\n let markRecord = table.mark1Array[mark1Index];\n let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, prevIndex);\n return true;\n }\n\n case 7: // Contextual positioning\n return this.applyContext(table);\n\n case 8: // Chaining contextual positioning\n return this.applyChainingContext(table);\n\n case 9: // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`Unsupported GPOS table: ${lookupType}`);\n }\n }\n\n applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n let baseCoords = this.getAnchor(baseAnchor);\n let markCoords = this.getAnchor(markRecord.markAnchor);\n\n let basePos = this.positions[baseGlyphIndex];\n let markPos = this.positions[this.glyphIterator.index];\n\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n }\n\n getAnchor(anchor) {\n // TODO: contour point, device tables\n let x = anchor.xCoordinate;\n let y = anchor.yCoordinate;\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n\n return { x, y };\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n super.applyFeatures(userFeatures, glyphs, advances);\n\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n\n this.fixMarkAttachment();\n }\n\n fixCursiveAttachment(i) {\n let glyph = this.glyphs[i];\n if (glyph.cursiveAttachment != null) {\n let j = glyph.cursiveAttachment;\n\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n }\n\n fixMarkAttachment() {\n for (let i = 0; i < this.glyphs.length; i++) {\n let glyph = this.glyphs[i];\n if (glyph.markAttachment != null) {\n let j = glyph.markAttachment;\n\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n\n if (this.direction === 'ltr') {\n for (let k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (let k = j + 1; k < i + 1; k++) {\n this.positions[i].xOffset += this.positions[k].xAdvance;\n this.positions[i].yOffset += this.positions[k].yAdvance;\n }\n }\n }\n }\n }\n}\n","import Glyph from './Glyph';\nimport Path from './Path';\nimport BBox from './BBox';\nimport * as r from 'restructure';\n\n// The header for both simple and composite glyphs\nlet GlyfHeader = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n});\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\n// Flags for composite glyphs\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\nconst ROUND_XY_TO_GRID = 1 << 2;\nconst WE_HAVE_A_SCALE = 1 << 3;\nconst MORE_COMPONENTS = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\nconst USE_MY_METRICS = 1 << 9;\nconst OVERLAP_COMPOUND = 1 << 10;\nconst SCALED_COMPONENT_OFFSET = 1 << 11;\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\n// Represents a point in a simple glyph\nexport class Point {\n constructor(onCurve, endContour, x = 0, y = 0) {\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n\n copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n }\n}\n\n// Represents a component in a composite glyph\nclass Component {\n constructor(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n }\n}\n\n/**\n * Represents a TrueType glyph.\n */\nexport default class TTFGlyph extends Glyph {\n type = 'TTF';\n\n // Parses just the glyph header and returns the bounding box\n _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += this._font.loca.offsets[this.id];\n let glyph = GlyfHeader.decode(stream);\n\n let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n }\n\n // Parses a single glyph coordinate\n _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n if (!same) {\n val = -val;\n }\n\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n\n return val;\n }\n\n // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n _decode() {\n let glyfPos = this._font.loca.offsets[this.id];\n let nextPos = this._font.loca.offsets[this.id + 1];\n\n // Nothing to do if there is no data for this glyph\n if (glyfPos === nextPos) { return null; }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += glyfPos;\n let startPos = stream.pos;\n\n let glyph = GlyfHeader.decode(stream);\n\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n\n return glyph;\n }\n\n _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n\n let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n\n let flags = [];\n let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag);\n\n // check for repeat flag\n if (flag & REPEAT) {\n let count = stream.readUInt8();\n for (let j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n\n let px = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n\n let py = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n\n if (this._font._variationProcessor) {\n let points = glyph.points.slice();\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.slice(-4);\n }\n\n return;\n }\n\n _decodeComposite(glyph, stream, offset = 0) {\n // this is a composite glyph\n glyph.components = [];\n let haveInstructions = false;\n let flags = MORE_COMPONENTS;\n\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n let gPos = stream.pos - offset;\n let glyphID = stream.readUInt16BE();\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX =\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n }\n\n glyph.components.push(component);\n }\n\n if (this._font._variationProcessor) {\n let points = [];\n for (let j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.splice(-4, 4);\n\n for (let i = 0; i < points.length; i++) {\n let point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n\n return haveInstructions;\n }\n\n _getPhantomPoints(glyph) {\n let cbox = this._getCBox(true);\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n\n let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\n\n return [\n new Point(false, true, glyph.xMin - leftBearing, 0),\n new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\n new Point(false, true, 0, glyph.yMax + topBearing),\n new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\n ];\n }\n\n // Decodes font data, resolves composite glyphs, and returns an array of contours\n _getContours() {\n let glyph = this._decode();\n if (!glyph) {\n return [];\n }\n\n let points = [];\n\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (let component of glyph.components) {\n let contours = this._font.getGlyph(component.glyphID)._getContours();\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n for (let j = 0; j < contour.length; j++) {\n let point = contour[j];\n let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\n let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\n points.push(new Point(point.onCurve, point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n }\n\n // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n\n let contours = [];\n let cur = [];\n for (let k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n\n return contours;\n }\n\n _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n\n let cbox = this._getCBox(true);\n super._getMetrics(cbox);\n\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n\n return this._metrics;\n }\n\n // Converts contours to a Path object that can be rendered\n _getPath() {\n let contours = this._getContours();\n let path = new Path;\n\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n let firstPt = contour[0];\n let lastPt = contour[contour.length - 1];\n let start = 0;\n\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n\n var curvePt = firstPt;\n }\n\n path.moveTo(firstPt.x, firstPt.y);\n\n for (let j = start; j < contour.length; j++) {\n let pt = contour[j];\n let prevPt = j === 0 ? firstPt : contour[j - 1];\n\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && !pt.onCurve) {\n let midX = (prevPt.x + pt.x) / 2;\n let midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n }\n\n // Connect the first and last points\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n\n path.closePath();\n }\n\n return path;\n }\n}\n","import { cache } from '../decorators';\nimport Path from './Path';\nimport {isMark} from 'unicode-properties';\nimport StandardNames from './StandardNames';\n\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\nexport default class Glyph {\n constructor(id, codePoints, font) {\n /**\n * The glyph id in the font\n * @type {number}\n */\n this.id = id;\n\n /**\n * An array of unicode code points that are represented by this glyph.\n * There can be multiple code points in the case of ligatures and other glyphs\n * that represent multiple visual characters.\n * @type {number[]}\n */\n this.codePoints = codePoints;\n this._font = font;\n\n // TODO: get this info from GDEF if available\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n\n _getPath() {\n return new Path();\n }\n\n _getCBox() {\n return this.path.cbox;\n }\n\n _getBBox() {\n return this.path.bbox;\n }\n\n _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n\n let metric = table.metrics.get(table.metrics.length - 1);\n let res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n\n return res;\n }\n\n _getMetrics(cbox) {\n if (this._metrics) { return this._metrics; }\n\n let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\n\n // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n if (this._font.vmtx) {\n var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\n\n } else {\n let os2;\n if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\n\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n\n } else {\n let { hhea } = this._font;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n\n return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\n }\n\n /**\n * The glyph’s control box.\n * This is often the same as the bounding box, but is faster to compute.\n * Because of the way bezier curves are defined, some of the control points\n * can be outside of the bounding box. Where `bbox` takes this into account,\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n * for a more detailed description.\n *\n * @type {BBox}\n */\n @cache\n get cbox() {\n return this._getCBox();\n }\n\n /**\n * The glyph’s bounding box, i.e. the rectangle that encloses the\n * glyph outline as tightly as possible.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return this._getBBox();\n }\n\n /**\n * A vector Path object representing the glyph outline.\n * @type {Path}\n */\n @cache\n get path() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n\n /**\n * Returns a path scaled to the given font size.\n * @param {number} size\n * @return {Path}\n */\n getScaledPath(size) {\n let scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n\n /**\n * The glyph's advance width.\n * @type {number}\n */\n @cache\n get advanceWidth() {\n return this._getMetrics().advanceWidth;\n }\n\n /**\n * The glyph's advance height.\n * @type {number}\n */\n @cache\n get advanceHeight() {\n return this._getMetrics().advanceHeight;\n }\n\n get ligatureCaretPositions() {}\n\n _getName() {\n let { post } = this._font;\n if (!post) {\n return null;\n }\n\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n\n case 2:\n let id = post.glyphNameIndex[this.id];\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n\n return post.names[id - StandardNames.length];\n\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n\n /**\n * The glyph's name\n * @type {string}\n */\n @cache\n get name() {\n return this._getName();\n }\n\n /**\n * Renders the glyph to the given graphics context, at the specified font size.\n * @param {CanvasRenderingContext2d} ctx\n * @param {number} size\n */\n render(ctx, size) {\n ctx.save();\n\n let scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n\n let fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n\n ctx.restore();\n }\n}\n","import BBox from './BBox';\n\nconst SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nexport default class Path {\n constructor() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n\n /**\n * Compiles the path to a JavaScript function that can be applied with\n * a graphics context in order to render the path.\n * @return {string}\n */\n toFunction() {\n return ctx => {\n this.commands.forEach(c => {\n return ctx[c.command].apply(ctx, c.args)\n })\n };\n }\n\n /**\n * Converts the path to an SVG path data string\n * @return {string}\n */\n toSVG() {\n let cmds = this.commands.map(c => {\n let args = c.args.map(arg => Math.round(arg * 100) / 100);\n return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\n });\n\n return cmds.join('');\n }\n\n /**\n * Gets the \"control box\" of a path.\n * This is like the bounding box, but it includes all points including\n * control points of bezier segments and is much faster to compute than\n * the real bounding box.\n * @type {BBox}\n */\n get cbox() {\n if (!this._cbox) {\n let cbox = new BBox;\n for (let command of this.commands) {\n for (let i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n\n this._cbox = Object.freeze(cbox);\n }\n\n return this._cbox;\n }\n\n /**\n * Gets the exact bounding box of the path by evaluating curve segments.\n * Slower to compute than the control box, but more accurate.\n * @type {BBox}\n */\n get bbox() {\n if (this._bbox) {\n return this._bbox;\n }\n\n let bbox = new BBox;\n let cx = 0, cy = 0;\n\n let f = t => (\n Math.pow(1 - t, 3) * p0[i]\n + 3 * Math.pow(1 - t, 2) * t * p1[i]\n + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\n + Math.pow(t, 3) * p3[i]\n );\n\n for (let c of this.commands) {\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n let [x, y] = c.args;\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var [qp1x, qp1y, p3x, p3y] = c.args;\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\n }\n\n // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n bbox.addPoint(p3x, p3y);\n\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n\n for (var i = 0; i <= 1; i++) {\n let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n let t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n\n continue;\n }\n\n let b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n\n let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n\n let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n\n return this._bbox = Object.freeze(bbox);\n }\n\n /**\n * Applies a mapping function to each point in the path.\n * @param {function} fn\n * @return {Path}\n */\n mapPoints(fn) {\n let path = new Path;\n\n for (let c of this.commands) {\n let args = [];\n for (let i = 0; i < c.args.length; i += 2) {\n let [x, y] = fn(c.args[i], c.args[i + 1]);\n args.push(x, y);\n }\n\n path[c.command](...args);\n }\n\n return path;\n }\n\n /**\n * Transforms the path by the given matrix.\n */\n transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints((x, y) => {\n const tx = m0 * x + m2 * y + m4;\n const ty = m1 * x + m3 * y + m5;\n return [tx, ty];\n });\n }\n\n /**\n * Translates the path by the given offset.\n */\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n\n /**\n * Rotates the path by the given angle (in radians).\n */\n rotate(angle) {\n let cos = Math.cos(angle);\n let sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n\n /**\n * Scales the path.\n */\n scale(scaleX, scaleY = scaleX) {\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\n Path.prototype[command] = function(...args) {\n this._bbox = this._cbox = null;\n this.commands.push({\n command,\n args\n });\n\n return this;\n };\n}\n","export default [\n '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\n];\n","import Glyph from './Glyph';\nimport Path from './Path';\n\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nexport default class CFFGlyph extends Glyph {\n type = 'CFF';\n\n _getName() {\n if (this._font.CFF2) {\n return super._getName();\n }\n\n return this._font['CFF '].getGlyphName(this.id);\n }\n\n bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n }\n\n _getPath() {\n let cff = this._font.CFF2 || this._font['CFF '];\n let { stream } = cff;\n let str = cff.topDict.CharStrings[this.id];\n let end = str.offset + str.length;\n stream.pos = str.offset;\n\n let path = new Path;\n let stack = [];\n let trans = [];\n\n let width = null;\n let nStems = 0;\n let x = 0, y = 0;\n let usedGsubrs;\n let usedSubrs;\n let open = false;\n\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n\n let gsubrs = cff.globalSubrIndex || [];\n let gsubrsBias = this.bias(gsubrs);\n\n let privateDict = cff.privateDictForGlyph(this.id) || {};\n let subrs = privateDict.Subrs || [];\n let subrsBias = this.bias(subrs);\n\n let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n let vsindex = privateDict.vsindex;\n let variationProcessor = this._font._variationProcessor;\n\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n\n path.moveTo(x, y);\n open = true;\n }\n\n let parse = function () {\n while (stream.pos < end) {\n let op = stream.readUInt8();\n if (op < 32) {\n let index, subr, phase;\n let c1x, c1y, c2x, c2y, c3x, c3y;\n let c4x, c4y, c5x, c5y, c6x, c6y;\n let pts;\n\n switch (op) {\n case 1: // hstem\n case 3: // vstem\n case 18: // hstemhm\n case 23: // vstemhm\n parseStems();\n break;\n\n case 4: // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 5: // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n break;\n\n case 6: // hlineto\n case 7: // vlineto\n phase = op === 6;\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n path.lineTo(x, y);\n phase = !phase;\n }\n break;\n\n case 8: // rrcurveto\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 10: // callsubr\n index = stack.pop() + subrsBias;\n subr = subrs[index];\n if (subr) {\n usedSubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 11: // return\n if (cff.version >= 2) {\n break;\n }\n return;\n\n case 14: // endchar\n if (cff.version >= 2) {\n break;\n }\n\n if (stack.length > 0) {\n checkWidth();\n }\n\n if (open) {\n path.closePath();\n open = false;\n }\n break;\n\n case 15: { // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n\n vsindex = stack.pop();\n break;\n }\n\n case 16: { // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n\n let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n let numBlends = stack.pop();\n let numOperands = numBlends * blendVector.length;\n let delta = stack.length - numOperands;\n let base = delta - numBlends;\n\n for (let i = 0; i < numBlends; i++) {\n let sum = stack[base + i];\n for (let j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n\n stack[base + i] = sum;\n }\n\n while (numOperands--) {\n stack.pop();\n }\n\n break;\n }\n\n case 19: // hintmask\n case 20: // cntrmask\n parseStems();\n stream.pos += (nStems + 7) >> 3;\n break;\n\n case 21: // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 22: // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n x += stack.shift();\n moveTo(x, y);\n break;\n\n case 24: // rcurveline\n while (stack.length >= 8) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n\n case 25: // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n\n case 26: // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 27: // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 28: // shortint\n stack.push(stream.readInt16BE());\n break;\n\n case 29: // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n if (subr) {\n usedGsubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 30: // vhcurveto\n case 31: // hvcurveto\n phase = op === 31;\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n break;\n\n case 12:\n op = stream.readUInt8();\n switch (op) {\n case 3: // and\n let a = stack.pop();\n let b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n\n case 4: // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n\n case 5: // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n\n case 9: // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case 10: // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n\n case 11: // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n\n case 12: // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n\n case 14: // neg\n a = stack.pop();\n stack.push(-a);\n break;\n\n case 15: // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n\n case 18: // drop\n stack.pop();\n break;\n\n case 20: // put\n let val = stack.pop();\n let idx = stack.pop();\n trans[idx] = val;\n break;\n\n case 21: // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n\n case 22: // ifelse\n let s1 = stack.pop();\n let s2 = stack.pop();\n let v1 = stack.pop();\n let v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n\n case 23: // random\n stack.push(Math.random());\n break;\n\n case 24: // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n\n case 26: // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case 27: // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n\n case 28: // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n\n case 29: // index\n idx = stack.pop();\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n\n stack.push(stack[idx]);\n break;\n\n case 30: // roll\n let n = stack.pop();\n let j = stack.pop();\n\n if (j >= 0) {\n while (j > 0) {\n var t = stack[n - 1];\n for (let i = n - 2; i >= 0; i--) {\n stack[i + 1] = stack[i];\n }\n\n stack[0] = t;\n j--;\n }\n } else {\n while (j < 0) {\n var t = stack[0];\n for (let i = 0; i <= n; i++) {\n stack[i] = stack[i + 1];\n }\n\n stack[n - 1] = t;\n j++;\n }\n }\n break;\n\n case 34: // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y;\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 35: // flex\n pts = [];\n\n for (let i = 0; i <= 5; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n stack.shift(); // fd\n break;\n\n case 36: // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 37: // flex1\n let startx = x;\n let starty = y;\n\n pts = [];\n for (let i = 0; i <= 4; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n\n pts.push(x, y);\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n break;\n\n default:\n throw new Error(`Unknown op: 12 ${op}`);\n }\n break;\n\n default:\n throw new Error(`Unknown op: ${op}`);\n }\n\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n\n parse();\n\n if (open) {\n path.closePath();\n }\n\n return path;\n }\n}\n","import TTFGlyph from './TTFGlyph';\nimport * as r from 'restructure';\n\nlet SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\n});\n\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nexport default class SBIXGlyph extends TTFGlyph {\n type = 'SBIX';\n\n /**\n * Returns an object representing a glyph image at the given point size.\n * The object has a data property with a Buffer containing the actual image data,\n * along with the image type, and origin.\n *\n * @param {number} size\n * @return {object}\n */\n getImageForSize(size) {\n for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n if (table.ppem >= size) { break; }\n }\n\n let offsets = table.imageOffsets;\n let start = offsets[this.id];\n let end = offsets[this.id + 1];\n\n if (start === end) {\n return null;\n }\n\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {buflen: end - start});\n }\n\n render(ctx, size) {\n let img = this.getImageForSize(size);\n if (img != null) {\n let scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\n }\n\n if (this._font.sbix.flags.renderOutlines) {\n super.render(ctx, size);\n }\n }\n}\n","import Glyph from './Glyph';\nimport BBox from './BBox';\n\nclass COLRLayer {\n constructor(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n }\n}\n\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which is another vector glyph.\n */\nexport default class COLRGlyph extends Glyph {\n type = 'COLR';\n\n _getBBox() {\n let bbox = new BBox;\n for (let i = 0; i < this.layers.length; i++) {\n let layer = this.layers[i];\n let b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n\n return bbox;\n }\n\n /**\n * Returns an array of objects containing the glyph and color for\n * each layer in the composite color glyph.\n * @type {object[]}\n */\n get layers() {\n let cpal = this._font.CPAL;\n let colr = this._font.COLR;\n let low = 0;\n let high = colr.baseGlyphRecord.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n var rec = colr.baseGlyphRecord[mid];\n\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n }\n\n // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n\n return [new COLRLayer(g, color)];\n }\n\n // otherwise, return an array of all the layers\n let layers = [];\n for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n var g = this._font._getBaseGlyph(rec.gid);\n layers.push(new COLRLayer(g, color));\n }\n\n return layers;\n }\n\n render(ctx, size) {\n for (let {glyph, color} of this.layers) {\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n\n return;\n }\n}\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nconst TUPLE_COUNT_MASK = 0x0fff;\nconst EMBEDDED_TUPLE_COORD = 0x8000;\nconst INTERMEDIATE_TUPLE = 0x4000;\nconst PRIVATE_POINT_NUMBERS = 0x2000;\nconst TUPLE_INDEX_MASK = 0x0fff;\nconst POINTS_ARE_WORDS = 0x80;\nconst POINT_RUN_COUNT_MASK = 0x7f;\nconst DELTAS_ARE_ZERO = 0x80;\nconst DELTAS_ARE_WORDS = 0x40;\nconst DELTA_RUN_COUNT_MASK = 0x3f;\n\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nexport default class GlyphVariationProcessor {\n constructor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map;\n }\n\n normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n let normalized = [];\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n let axis = this.font.fvar.axis[i];\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n\n // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n let segment = this.font.avar.segment[i];\n for (let j = 0; j < segment.correspondence.length; j++) {\n let pair = segment.correspondence[j];\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n let prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\n (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\n prev.toCoord;\n\n break;\n }\n }\n }\n }\n\n return normalized;\n }\n\n transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) { return; }\n\n let { gvar } = this.font;\n if (gid >= gvar.glyphCount) { return; }\n\n let offset = gvar.offsets[gid];\n if (offset === gvar.offsets[gid + 1]) { return; }\n\n // Read the gvar data for this glyph\n let { stream } = this.font;\n stream.pos = offset;\n if (stream.pos >= stream.length) {\n return;\n }\n\n let tupleCount = stream.readUInt16BE();\n let offsetToData = offset + stream.readUInt16BE();\n\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n\n let origPoints = glyphPoints.map(pt => pt.copy());\n\n tupleCount &= TUPLE_COUNT_MASK;\n for (let i = 0; i < tupleCount; i++) {\n let tupleDataSize = stream.readUInt16BE();\n let tupleIndex = stream.readUInt16BE();\n\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n\n var endCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n }\n\n // Get the factor at which to apply this tuple\n let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n\n var here = stream.pos;\n stream.pos = offsetToData;\n\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n }\n\n // points.length = 0 means there are deltas for all points\n let nPoints = points.length === 0 ? glyphPoints.length : points.length;\n let xDeltas = this.decodeDeltas(nPoints);\n let yDeltas = this.decodeDeltas(nPoints);\n\n if (points.length === 0) { // all points\n for (let i = 0; i < glyphPoints.length; i++) {\n var point = glyphPoints[i];\n point.x += Math.round(xDeltas[i] * factor);\n point.y += Math.round(yDeltas[i] * factor);\n }\n } else {\n let outPoints = origPoints.map(pt => pt.copy());\n let hasDelta = glyphPoints.map(() => false);\n\n for (let i = 0; i < points.length; i++) {\n let idx = points[i];\n if (idx < glyphPoints.length) {\n let point = outPoints[idx];\n hasDelta[idx] = true;\n\n point.x += xDeltas[i] * factor;\n point.y += yDeltas[i] * factor;\n }\n }\n\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n for (let i = 0; i < glyphPoints.length; i++) {\n let deltaX = outPoints[i].x - origPoints[i].x;\n let deltaY = outPoints[i].y - origPoints[i].y;\n\n glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX);\n glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY);\n }\n }\n\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n }\n\n decodePoints() {\n let stream = this.font.stream;\n let count = stream.readUInt8();\n\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n\n let points = new Uint16Array(count);\n let i = 0;\n let point = 0;\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n for (let j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n\n return points;\n }\n\n decodeDeltas(count) {\n let stream = this.font.stream;\n let i = 0;\n let deltas = new Int16Array(count);\n\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n\n } else {\n let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n for (let j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n\n return deltas;\n }\n\n tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n let normalized = this.normalizedCoords;\n let { gvar } = this.font;\n let factor = 1;\n\n for (let i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n\n if (normalized[i] === 0) {\n return 0;\n }\n\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\n (normalized[i] > Math.max(0, tupleCoords[i]))) {\n return 0;\n }\n\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if ((normalized[i] < startCoords[i]) ||\n (normalized[i] > endCoords[i])) {\n return 0;\n\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n\n return factor;\n }\n\n // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n\n let point = 0;\n while (point < points.length) {\n let firstPoint = point;\n\n // find the end point of the contour\n let endPoint = point;\n let pt = points[endPoint];\n while (!pt.endContour) {\n pt = points[++endPoint];\n }\n\n // find the first point that has a delta\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n\n if (point > endPoint) {\n continue;\n }\n\n let firstDelta = point;\n let curDelta = point;\n point++;\n\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n\n point++;\n }\n\n // shift contour if we only have a single delta\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n\n point = endPoint + 1;\n }\n }\n\n deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n\n let iterable = ['x', 'y'];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n\n let in1 = inPoints[ref1][k];\n let in2 = inPoints[ref2][k];\n let out1 = outPoints[ref1][k];\n let out2 = outPoints[ref2][k];\n\n // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n for (let p = p1; p <= p2; p++) {\n let out = inPoints[p][k];\n\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n\n outPoints[p][k] = out;\n }\n }\n }\n }\n\n deltaShift(p1, p2, ref, inPoints, outPoints) {\n let deltaX = outPoints[ref].x - inPoints[ref].x;\n let deltaY = outPoints[ref].y - inPoints[ref].y;\n\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n }\n\n getAdvanceAdjustment(gid, table) {\n let outerIndex, innerIndex;\n\n if (table.advanceWidthMapping) {\n let idx = gid;\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n\n let entryFormat = table.advanceWidthMapping.entryFormat;\n ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n }\n\n // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n\n let varData = itemStore.itemVariationData[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex);\n let netAdjustment = 0;\n\n for (let master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n\n return netAdjustment;\n }\n\n getBlendVector(itemStore, outerIndex) {\n let varData = itemStore.itemVariationData[outerIndex];\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n\n let normalizedCoords = this.normalizedCoords;\n let blendVector = [];\n\n // outer loop steps through master designs to be blended\n for (let master = 0; master < varData.regionIndexCount; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegionList.variationRegions[regionIndex];\n\n // inner loop steps through axes in this region\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n\n // compute the scalar contribution of this axis\n // ignore invalid ranges\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n\n // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n\n // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\n\n // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\n (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\n (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n\n // take product of all the axis scalars\n scalar *= axisScalar;\n }\n\n blendVector[master] = scalar;\n }\n\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n }\n}\n","import cloneDeep from 'clone';\nimport Subset from './Subset';\nimport Directory from '../tables/directory';\nimport Tables from '../tables';\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\n\nexport default class TTFSubset extends Subset {\n constructor(font) {\n super(font);\n this.glyphEncoder = new TTFGlyphEncoder;\n }\n\n _addGlyph(gid) {\n let glyph = this.font.getGlyph(gid);\n let glyf = glyph._decode();\n\n // get the offset to the glyph from the loca table\n let curOffset = this.font.loca.offsets[gid];\n let nextOffset = this.font.loca.offsets[gid + 1];\n\n let stream = this.font._getTableStream('glyf');\n stream.pos += curOffset;\n\n let buffer = stream.readBuffer(nextOffset - curOffset);\n\n // if it is a compound glyph, include its components\n if (glyf && glyf.numberOfContours < 0) {\n buffer = new Uint8Array(buffer);\n let view = new DataView(buffer.buffer);\n for (let component of glyf.components) {\n gid = this.includeGlyph(component.glyphID);\n view.setUint16(component.pos, gid);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n\n this.offset += buffer.length;\n return this.glyf.length - 1;\n }\n\n encode() {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n\n this.hmtx = {\n metrics: [],\n bearings: []\n };\n\n // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n let i = 0;\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n\n let maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n\n this.loca.offsets.push(this.offset);\n\n let head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n\n let hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length;\n\n // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n\n // TODO: subset prep, cvt, fpgm?\n return Directory.toBuffer({\n tables: {\n head,\n hhea,\n loca: this.loca,\n maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm\n\n // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n }\n });\n }\n}\n","import * as r from 'restructure';\n\nconst resolved = Promise.resolve();\n\nexport default class Subset {\n constructor(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {};\n\n // always include the missing glyph\n this.includeGlyph(0);\n }\n\n includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n\n return this.mapping[glyph];\n }\n}\n","import * as r from 'restructure';\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\nclass Point {\n static size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n }\n \n static encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n }\n}\n\nlet Glyf = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point, 0),\n yPoints: new r.Array(Point, 0)\n});\n\n/**\n * Encodes TrueType glyph outlines\n */\nexport default class TTFGlyphEncoder {\n encodeSimple(path, instructions = []) {\n let endPtsOfContours = [];\n let xPoints = [];\n let yPoints = [];\n let flags = [];\n let same = 0;\n let lastX = 0, lastY = 0, lastFlag = 0;\n let pointCount = 0;\n \n for (let i = 0; i < path.commands.length; i++) {\n let c = path.commands[i];\n \n for (let j = 0; j < c.args.length; j += 2) {\n let x = c.args[j];\n let y = c.args[j + 1];\n let flag = 0;\n \n // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n if (c.command === 'quadraticCurveTo' && j === 2) {\n let next = path.commands[i + 1];\n if (next && next.command === 'quadraticCurveTo') {\n let midX = (lastX + next.args[0]) / 2;\n let midY = (lastY + next.args[1]) / 2;\n \n if (x === midX && y === midY) {\n continue;\n }\n }\n }\n \n // All points except control points are on curve.\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE;\n }\n \n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\n \n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n \n flags.push(flag);\n lastFlag = flag;\n }\n \n lastX = x;\n lastY = y;\n pointCount++;\n }\n \n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n }\n\n // Close the path if the last command didn't already\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n \n let bbox = path.bbox;\n let glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n \n let size = Glyf.size(glyf);\n let tail = 4 - (size % 4);\n \n let stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf);\n \n // Align to 4-byte length\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n \n return stream.buffer;\n }\n \n _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n let diff = value - last;\n \n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n \n points.push(diff);\n }\n \n return flag;\n }\n}\n","import Subset from './Subset';\nimport CFFTop from '../cff/CFFTop';\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\nimport standardStrings from '../cff/CFFStandardStrings';\n\nexport default class CFFSubset extends Subset {\n constructor(font) {\n super(font);\n\n this.cff = this.font['CFF '];\n if (!this.cff) {\n throw new Error('Not a CFF Font');\n }\n }\n\n subsetCharstrings() {\n this.charstrings = [];\n let gsubrs = {};\n\n for (let gid of this.glyphs) {\n this.charstrings.push(this.cff.getCharString(gid));\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n }\n\n subsetSubrs(subrs, used) {\n let res = [];\n for (let i = 0; i < subrs.length; i++) {\n let subr = subrs[i];\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(new Uint8Array([11])); // return\n }\n }\n\n return res;\n }\n\n subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n\n let used_fds = {};\n let used_subrs = [];\n let fd_select = {};\n for (let gid of this.glyphs) {\n let fd = this.cff.fdForGlyph(gid);\n if (fd == null) {\n continue;\n }\n\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n for (let subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n\n for (let i = 0; i < topDict.FDArray.length; i++) {\n let dict = topDict.FDArray[i];\n delete dict.FontName;\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n\n return;\n }\n\n createCIDFontdict(topDict) {\n let used_subrs = {};\n for (let gid of this.glyphs) {\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n\n let privateDict = Object.assign({}, this.cff.topDict.Private);\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n\n topDict.FDArray = [{ Private: privateDict }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{ first: 0, fd: 0 }],\n sentinel: this.charstrings.length\n };\n }\n\n addString(string) {\n if (!string) {\n return null;\n }\n\n if (!this.strings) {\n this.strings = [];\n }\n\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n }\n\n encode() {\n this.subsetCharstrings();\n\n let charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\n };\n\n let topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n\n for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n\n let top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n\n return CFFTop.toBuffer(top);\n }\n}\n","import TTFFont from './TTFFont';\nimport WOFFDirectory from './tables/WOFFDirectory';\nimport tables from './tables';\nimport inflate from 'tiny-inflate';\nimport * as r from 'restructure';\nimport { asciiDecoder } from './utils';\n\nexport default class WOFFFont extends TTFFont {\n type = 'WOFF';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF';\n }\n\n _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n let outBuffer = new Uint8Array(table.length);\n let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n\n return null;\n }\n}\n","import * as r from 'restructure';\nimport tables from './';\n\nlet WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {type: 'global'}),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\n\nlet WOFFDirectory = new r.Struct({\n tag: new r.String(4), // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nexport default WOFFDirectory;\n","import * as r from 'restructure';\nimport brotli from 'brotli/decompress.js';\nimport TTFFont from './TTFFont';\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\nimport WOFF2Directory from './tables/WOFF2Directory';\nimport { asciiDecoder } from './utils';\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nexport default class WOFF2Font extends TTFFont {\n type = 'WOFF2';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOF2';\n }\n\n _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n }\n\n _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n\n let decompressedSize = 0;\n for (let tag in this.directory.tables) {\n let entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\n }\n\n let decompressed = brotli(buffer, decompressedSize);\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n\n this.stream = new r.DecodeStream(decompressed);\n this._decompressed = true;\n }\n }\n\n _decodeTable(table) {\n this._decompress();\n return super._decodeTable(table);\n }\n\n // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) { this._transformGlyfTable(); }\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n\n } else {\n return super._getBaseGlyph(glyph, characters);\n }\n }\n }\n\n _transformGlyfTable() {\n this._decompress();\n this.stream.pos = this.directory.tables.glyf.offset;\n let table = GlyfTable.decode(this.stream);\n let glyphs = [];\n\n for (let index = 0; index < table.numGlyphs; index++) {\n let glyph = {};\n let nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n\n if (nContours > 0) { // simple glyph\n let nPoints = [];\n let totalPoints = 0;\n\n for (let i = 0; i < nContours; i++) {\n let r = read255UInt16(table.nPoints);\n totalPoints += r;\n nPoints.push(totalPoints);\n }\n\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n for (let i = 0; i < nContours; i++) {\n glyph.points[nPoints[i] - 1].endContour = true;\n }\n\n var instructionSize = read255UInt16(table.glyphs);\n\n } else if (nContours < 0) { // composite glyph\n let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n\n glyphs.push(glyph);\n }\n\n this._transformedGlyphs = glyphs;\n }\n}\n\n// Special class that accepts a length and returns a sub-stream for that data\nclass Substream {\n constructor(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n\n decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n }\n}\n\n// This struct represents the entire glyf table\nlet GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\n\nconst WORD_CODE = 253;\nconst ONE_MORE_BYTE_CODE2 = 254;\nconst ONE_MORE_BYTE_CODE1 = 255;\nconst LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n let code = stream.readUInt8();\n\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n\n return code;\n}\n\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n let y;\n let x = y = 0;\n let res = [];\n\n for (let i = 0; i < nPoints; i++) {\n let dx = 0, dy = 0;\n let flag = flags.readUInt8();\n let onCurve = !(flag >> 7);\n flag &= 0x7f;\n\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n\n } else if (flag < 20) {\n dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\n\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n let b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n\n return res;\n}\n","import TTFGlyph from './TTFGlyph';\n\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nexport default class WOFF2Glyph extends TTFGlyph {\n type = 'WOFF2';\n\n _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n }\n\n _getCBox() {\n return this.path.bbox;\n }\n}\n","import * as r from 'restructure';\n\nconst Base128 = {\n decode(stream) {\n let result = 0;\n let iterable = [0, 1, 2, 3, 4];\n for (let j = 0; j < iterable.length; j++) {\n let i = iterable[j];\n let code = stream.readUInt8();\n\n // If any of the top seven bits are set then we're about to overflow.\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n\n result = (result << 7) | (code & 0x7f);\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n\n throw new Error('Bad base 128 number');\n }\n};\n\nlet knownTags = [\n 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\n 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\n 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\n 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\n 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\n 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\n 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\n];\n\nlet WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\n tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: t => (t.flags >>> 6) & 0x03,\n transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\n transformLength: new r.Optional(Base128, t => t.transformed)\n});\n\nlet WOFF2Directory = new r.Struct({\n tag: new r.String(4), // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function() {\n let tables = {};\n for (let i = 0; i < this.tables.length; i++) {\n let table = this.tables[i];\n tables[table.tag] = table;\n }\n\n return this.tables = tables;\n};\n\nexport default WOFF2Directory;\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport { asciiDecoder } from './utils';\n\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\n\nexport default class TrueTypeCollection {\n type = 'TTC';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'ttcf';\n }\n\n constructor(stream) {\n this.stream = stream;\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n\n this.header = TTCHeader.decode(stream);\n }\n\n getFont(name) {\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\n\nlet DFontName = new r.String(r.uint8);\nlet DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\n\nlet Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\n\nlet Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\n});\n\nlet TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, t => t.length + 1)\n});\n\nlet DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\n\nlet DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\n\nexport default class DFont {\n type = 'DFont';\n\n static probe(buffer) {\n let stream = new r.DecodeStream(buffer);\n\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n\n for (let type of header.map.typeList.types) {\n if (type.name === 'sfnt') {\n return true;\n }\n }\n\n return false;\n }\n\n constructor(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n\n for (let type of this.header.map.typeList.types) {\n for (let ref of type.refList) {\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n\n getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n"],"names":[],"version":3,"file":"main.cjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/dist/module.mjs b/skills/flight-finder/node_modules/fontkit/dist/module.mjs deleted file mode 100644 index fde88fc..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/module.mjs +++ /dev/null @@ -1,13337 +0,0 @@ -import {DecodeStream as $52ZIf$DecodeStream, Struct as $52ZIf$Struct, String as $52ZIf$String, uint32 as $52ZIf$uint32, Pointer as $52ZIf$Pointer, uint16 as $52ZIf$uint16, Array as $52ZIf$Array, VoidPointer as $52ZIf$VoidPointer, int16 as $52ZIf$int16, uint24 as $52ZIf$uint24, uint8 as $52ZIf$uint8, VersionedStruct as $52ZIf$VersionedStruct, LazyArray as $52ZIf$LazyArray, Reserved as $52ZIf$Reserved, int32 as $52ZIf$int32, Bitfield as $52ZIf$Bitfield, fixed32 as $52ZIf$fixed32, Buffer as $52ZIf$Buffer, Number as $52ZIf$Number, resolveLength as $52ZIf$resolveLength, fixed16 as $52ZIf$fixed16, PropertyDescriptor as $52ZIf$PropertyDescriptor, Fixed as $52ZIf$Fixed, int8 as $52ZIf$int8, Optional as $52ZIf$Optional, EncodeStream as $52ZIf$EncodeStream} from "restructure"; -import $52ZIf$fs from "fs"; -import {_ as $52ZIf$_} from "@swc/helpers/_/_define_property"; -import {_ as $52ZIf$_1} from "@swc/helpers/_/_ts_decorate"; -import $52ZIf$fastdeepequal from "fast-deep-equal"; -import {getCombiningClass as $52ZIf$getCombiningClass, getScript as $52ZIf$getScript, isDigit as $52ZIf$isDigit, getCategory as $52ZIf$getCategory, isMark as $52ZIf$isMark} from "unicode-properties"; -import $52ZIf$unicodetrie from "unicode-trie"; -import $52ZIf$dfa from "dfa"; -import $52ZIf$clone from "clone"; -import $52ZIf$tinyinflate from "tiny-inflate"; -import $52ZIf$brotlidecompressjs from "brotli/decompress.js"; - - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -var $d636bc798e7178db$exports = {}; - -$parcel$export($d636bc798e7178db$exports, "logErrors", () => $d636bc798e7178db$export$bd5c5d8b8dcafd78); -$parcel$export($d636bc798e7178db$exports, "registerFormat", () => $d636bc798e7178db$export$36b2f24e97d43be); -$parcel$export($d636bc798e7178db$exports, "create", () => $d636bc798e7178db$export$185802fd694ee1f5); -$parcel$export($d636bc798e7178db$exports, "defaultLanguage", () => $d636bc798e7178db$export$42940898df819940); -$parcel$export($d636bc798e7178db$exports, "setDefaultLanguage", () => $d636bc798e7178db$export$5157e7780d44cc36); - -let $d636bc798e7178db$export$bd5c5d8b8dcafd78 = false; -let $d636bc798e7178db$var$formats = []; -function $d636bc798e7178db$export$36b2f24e97d43be(format) { - $d636bc798e7178db$var$formats.push(format); -} -function $d636bc798e7178db$export$185802fd694ee1f5(buffer, postscriptName) { - for(let i = 0; i < $d636bc798e7178db$var$formats.length; i++){ - let format = $d636bc798e7178db$var$formats[i]; - if (format.probe(buffer)) { - let font = new format(new (0, $52ZIf$DecodeStream)(buffer)); - if (postscriptName) return font.getFont(postscriptName); - return font; - } - } - throw new Error('Unknown font format'); -} -let $d636bc798e7178db$export$42940898df819940 = 'en'; -function $d636bc798e7178db$export$5157e7780d44cc36(lang = 'en') { - $d636bc798e7178db$export$42940898df819940 = lang; -} - - -var $b422b1e013cd6010$exports = {}; - -$parcel$export($b422b1e013cd6010$exports, "openSync", () => $b422b1e013cd6010$export$fa5499edb1ab414a); -$parcel$export($b422b1e013cd6010$exports, "open", () => $b422b1e013cd6010$export$3ce6949f20cea765); - - -function $b422b1e013cd6010$export$fa5499edb1ab414a(filename, postscriptName) { - let buffer = (0, $52ZIf$fs).readFileSync(filename); - return (0, $d636bc798e7178db$export$185802fd694ee1f5)(buffer, postscriptName); -} -async function $b422b1e013cd6010$export$3ce6949f20cea765(filename, postscriptName, callback) { - if (typeof postscriptName === 'function') { - callback = postscriptName; - postscriptName = null; - } - let buffer = await (0, $52ZIf$fs).promises.readFile(filename); - return (0, $d636bc798e7178db$export$185802fd694ee1f5)(buffer, postscriptName); -} - - - - - -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ function $e71565f2ce09cb6b$export$69a3209f1a06c04d(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { - value: value - }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - return { - get () { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) return cache.get(key); - let result = fn.apply(this, args); - cache.set(key, result); - return result; - } - Object.defineProperty(this, key, { - value: memoized - }); - return memoized; - } - }; - } -} - - - - - -let $26a62205ad06574e$var$SubHeader = new $52ZIf$Struct({ - firstCode: $52ZIf$uint16, - entryCount: $52ZIf$uint16, - idDelta: $52ZIf$int16, - idRangeOffset: $52ZIf$uint16 -}); -let $26a62205ad06574e$var$CmapGroup = new $52ZIf$Struct({ - startCharCode: $52ZIf$uint32, - endCharCode: $52ZIf$uint32, - glyphID: $52ZIf$uint32 -}); -let $26a62205ad06574e$var$UnicodeValueRange = new $52ZIf$Struct({ - startUnicodeValue: $52ZIf$uint24, - additionalCount: $52ZIf$uint8 -}); -let $26a62205ad06574e$var$UVSMapping = new $52ZIf$Struct({ - unicodeValue: $52ZIf$uint24, - glyphID: $52ZIf$uint16 -}); -let $26a62205ad06574e$var$DefaultUVS = new $52ZIf$Array($26a62205ad06574e$var$UnicodeValueRange, $52ZIf$uint32); -let $26a62205ad06574e$var$NonDefaultUVS = new $52ZIf$Array($26a62205ad06574e$var$UVSMapping, $52ZIf$uint32); -let $26a62205ad06574e$var$VarSelectorRecord = new $52ZIf$Struct({ - varSelector: $52ZIf$uint24, - defaultUVS: new $52ZIf$Pointer($52ZIf$uint32, $26a62205ad06574e$var$DefaultUVS, { - type: 'parent' - }), - nonDefaultUVS: new $52ZIf$Pointer($52ZIf$uint32, $26a62205ad06574e$var$NonDefaultUVS, { - type: 'parent' - }) -}); -let $26a62205ad06574e$var$CmapSubtable = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 0: { - length: $52ZIf$uint16, - language: $52ZIf$uint16, - codeMap: new $52ZIf$LazyArray($52ZIf$uint8, 256) - }, - 2: { - length: $52ZIf$uint16, - language: $52ZIf$uint16, - subHeaderKeys: new $52ZIf$Array($52ZIf$uint16, 256), - subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new $52ZIf$LazyArray($26a62205ad06574e$var$SubHeader, 'subHeaderCount'), - glyphIndexArray: new $52ZIf$LazyArray($52ZIf$uint16, 'subHeaderCount') - }, - 4: { - length: $52ZIf$uint16, - language: $52ZIf$uint16, - segCountX2: $52ZIf$uint16, - segCount: (t)=>t.segCountX2 >> 1, - searchRange: $52ZIf$uint16, - entrySelector: $52ZIf$uint16, - rangeShift: $52ZIf$uint16, - endCode: new $52ZIf$LazyArray($52ZIf$uint16, 'segCount'), - reservedPad: new $52ZIf$Reserved($52ZIf$uint16), - startCode: new $52ZIf$LazyArray($52ZIf$uint16, 'segCount'), - idDelta: new $52ZIf$LazyArray($52ZIf$int16, 'segCount'), - idRangeOffset: new $52ZIf$LazyArray($52ZIf$uint16, 'segCount'), - glyphIndexArray: new $52ZIf$LazyArray($52ZIf$uint16, (t)=>(t.length - t._currentOffset) / 2) - }, - 6: { - length: $52ZIf$uint16, - language: $52ZIf$uint16, - firstCode: $52ZIf$uint16, - entryCount: $52ZIf$uint16, - glyphIndices: new $52ZIf$LazyArray($52ZIf$uint16, 'entryCount') - }, - 8: { - reserved: new $52ZIf$Reserved($52ZIf$uint16), - length: $52ZIf$uint32, - language: $52ZIf$uint16, - is32: new $52ZIf$LazyArray($52ZIf$uint8, 8192), - nGroups: $52ZIf$uint32, - groups: new $52ZIf$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 10: { - reserved: new $52ZIf$Reserved($52ZIf$uint16), - length: $52ZIf$uint32, - language: $52ZIf$uint32, - firstCode: $52ZIf$uint32, - entryCount: $52ZIf$uint32, - glyphIndices: new $52ZIf$LazyArray($52ZIf$uint16, 'numChars') - }, - 12: { - reserved: new $52ZIf$Reserved($52ZIf$uint16), - length: $52ZIf$uint32, - language: $52ZIf$uint32, - nGroups: $52ZIf$uint32, - groups: new $52ZIf$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 13: { - reserved: new $52ZIf$Reserved($52ZIf$uint16), - length: $52ZIf$uint32, - language: $52ZIf$uint32, - nGroups: $52ZIf$uint32, - groups: new $52ZIf$LazyArray($26a62205ad06574e$var$CmapGroup, 'nGroups') - }, - 14: { - length: $52ZIf$uint32, - numRecords: $52ZIf$uint32, - varSelectors: new $52ZIf$LazyArray($26a62205ad06574e$var$VarSelectorRecord, 'numRecords') - } -}); -let $26a62205ad06574e$var$CmapEntry = new $52ZIf$Struct({ - platformID: $52ZIf$uint16, - encodingID: $52ZIf$uint16, - table: new $52ZIf$Pointer($52ZIf$uint32, $26a62205ad06574e$var$CmapSubtable, { - type: 'parent', - lazy: true - }) -}); -var // character to glyph mapping -$26a62205ad06574e$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numSubtables: $52ZIf$uint16, - tables: new $52ZIf$Array($26a62205ad06574e$var$CmapEntry, 'numSubtables') -}); - - - -var // font header -$f2612a29f92ac062$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$int32, - revision: $52ZIf$int32, - checkSumAdjustment: $52ZIf$uint32, - magicNumber: $52ZIf$uint32, - flags: $52ZIf$uint16, - unitsPerEm: $52ZIf$uint16, - created: new $52ZIf$Array($52ZIf$int32, 2), - modified: new $52ZIf$Array($52ZIf$int32, 2), - xMin: $52ZIf$int16, - yMin: $52ZIf$int16, - xMax: $52ZIf$int16, - yMax: $52ZIf$int16, - macStyle: new $52ZIf$Bitfield($52ZIf$uint16, [ - 'bold', - 'italic', - 'underline', - 'outline', - 'shadow', - 'condensed', - 'extended' - ]), - lowestRecPPEM: $52ZIf$uint16, - fontDirectionHint: $52ZIf$int16, - indexToLocFormat: $52ZIf$int16, - glyphDataFormat: $52ZIf$int16 // 0 for current format -}); - - - -var // horizontal header -$2c179dd593583073$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$int32, - ascent: $52ZIf$int16, - descent: $52ZIf$int16, - lineGap: $52ZIf$int16, - advanceWidthMax: $52ZIf$uint16, - minLeftSideBearing: $52ZIf$int16, - minRightSideBearing: $52ZIf$int16, - xMaxExtent: $52ZIf$int16, - caretSlopeRise: $52ZIf$int16, - caretSlopeRun: $52ZIf$int16, - caretOffset: $52ZIf$int16, - reserved: new $52ZIf$Reserved($52ZIf$int16, 4), - metricDataFormat: $52ZIf$int16, - numberOfMetrics: $52ZIf$uint16 // Number of advance widths in 'hmtx' table -}); - - - -let $bdc9060542264b85$var$HmtxEntry = new $52ZIf$Struct({ - advance: $52ZIf$uint16, - bearing: $52ZIf$int16 -}); -var $bdc9060542264b85$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - metrics: new $52ZIf$LazyArray($bdc9060542264b85$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics), - bearings: new $52ZIf$LazyArray($52ZIf$int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); - - - -var // maxiumum profile -$dbf51cb3d3fe409d$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$int32, - numGlyphs: $52ZIf$uint16, - maxPoints: $52ZIf$uint16, - maxContours: $52ZIf$uint16, - maxComponentPoints: $52ZIf$uint16, - maxComponentContours: $52ZIf$uint16, - maxZones: $52ZIf$uint16, - maxTwilightPoints: $52ZIf$uint16, - maxStorage: $52ZIf$uint16, - maxFunctionDefs: $52ZIf$uint16, - maxInstructionDefs: $52ZIf$uint16, - maxStackElements: $52ZIf$uint16, - maxSizeOfInstructions: $52ZIf$uint16, - maxComponentElements: $52ZIf$uint16, - maxComponentDepth: $52ZIf$uint16 // Maximum levels of recursion; 1 for simple components -}); - - - -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ function $e449ad78d50845fe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { - if (platformID === 1 && $e449ad78d50845fe$export$479e671907f486d1[languageID]) return $e449ad78d50845fe$export$479e671907f486d1[languageID]; - return $e449ad78d50845fe$export$6fef87b7618bdf0b[platformID][encodingID]; -} -const $e449ad78d50845fe$var$SINGLE_BYTE_ENCODINGS = new Set([ - 'x-mac-roman', - 'x-mac-cyrillic', - 'iso-8859-6', - 'iso-8859-8' -]); -const $e449ad78d50845fe$var$MAC_ENCODINGS = { - 'x-mac-croatian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017D\xd8\u221E\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220F\u0161\u222B\xaa\xba\u03A9\u017E\xf8\xbf\xa1\xac\u221A\u0192\u2248\u0106\xab\u010C\u2026 \xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\uF8FF\xa9\u2044\u20AC\u2039\u203A\xc6\xbb\u2013\xb7\u201A\u201E\u2030\xc2\u0107\xc1\u010D\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u03C0\xcb\u02DA\xb8\xca\xe6\u02C7", - 'x-mac-gaelic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u1E02\xb1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xe6\xf8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xff\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xb7\u1EF2\u1EF3\u204A\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\u2663\xd2\xda\xdb\xd9\u0131\xdd\xfd\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83", - 'x-mac-greek': "\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\u20AC\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xdf\xae\xa9\u03A3\u03AA\xa7\u2260\xb0\xb7\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xac\u039F\u03A1\u2248\u03A4\xab\xbb\u2026 \u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xf7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xad", - 'x-mac-icelandic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\xd0\xf0\xde\xfe\xfd\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-inuit': "\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xb0\u14A1\u14A5\u14A6\u2022\xb6\u14A7\xae\xa9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026 \u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142", - 'x-mac-ce': "\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010C\xe4\u010D\u0106\u0107\xe9\u0179\u017A\u010E\xed\u010F\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011A\u011B\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xac\u221A\u0144\u0147\u2206\xab\xbb\u2026 \u0148\u0150\xd5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xc1\u0164\u0165\xcd\u017D\u017E\u016A\xd3\xd4\u016B\u016E\xda\u016F\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017B\u0141\u017C\u0122\u02C7", - 'x-mac-romanian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u0218\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\u0103\u0219\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-turkish': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\uF8A0\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7" -}; -const $e449ad78d50845fe$var$encodingCache = new Map(); -function $e449ad78d50845fe$export$1dceb3c14ed68bee(encoding) { - let cached = $e449ad78d50845fe$var$encodingCache.get(encoding); - if (cached) return cached; - // These encodings aren't supported by TextDecoder. - let mapping = $e449ad78d50845fe$var$MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for(let i = 0; i < mapping.length; i++)res.set(mapping.charCodeAt(i), 0x80 + i); - $e449ad78d50845fe$var$encodingCache.set(encoding, res); - return res; - } - // Only single byte encodings can be mapped 1:1. - if ($e449ad78d50845fe$var$SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for(let i = 0; i < 0x80; i++)mapping[i] = 0x80 + i; - let res = new Map(); - let s = decoder.decode(mapping); - for(let i = 0; i < 0x80; i++)res.set(s.charCodeAt(i), 0x80 + i); - $e449ad78d50845fe$var$encodingCache.set(encoding, res); - return res; - } -} -const $e449ad78d50845fe$export$6fef87b7618bdf0b = [ - // unicode - [ - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be' - ], - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - [ - 'x-mac-roman', - 'shift-jis', - 'big5', - 'euc-kr', - 'iso-8859-6', - 'iso-8859-8', - 'x-mac-greek', - 'x-mac-cyrillic', - 'x-mac-symbol', - 'x-mac-devanagari', - 'x-mac-gurmukhi', - 'x-mac-gujarati', - 'Oriya', - 'Bengali', - 'Tamil', - 'Telugu', - 'Kannada', - 'Malayalam', - 'Sinhalese', - 'Burmese', - 'Khmer', - 'iso-8859-11', - 'Laotian', - 'Georgian', - 'Armenian', - 'gbk', - 'Tibetan', - 'Mongolian', - 'Geez', - 'x-mac-ce', - 'Vietnamese', - 'Sindhi' - ], - // ISO (deprecated) - [ - 'ascii', - null, - 'iso-8859-1' - ], - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - [ - 'symbol', - 'utf-16be', - 'shift-jis', - 'gb18030', - 'big5', - 'euc-kr', - 'johab', - null, - null, - null, - 'utf-16be' - ] -]; -const $e449ad78d50845fe$export$479e671907f486d1 = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; -const $e449ad78d50845fe$export$2092376fd002e13 = [ - // unicode - [], - { - 0: 'en', - 30: 'fo', - 60: 'ks', - 90: 'rw', - 1: 'fr', - 31: 'fa', - 61: 'ku', - 91: 'rn', - 2: 'de', - 32: 'ru', - 62: 'sd', - 92: 'ny', - 3: 'it', - 33: 'zh', - 63: 'bo', - 93: 'mg', - 4: 'nl', - 34: 'nl-BE', - 64: 'ne', - 94: 'eo', - 5: 'sv', - 35: 'ga', - 65: 'sa', - 128: 'cy', - 6: 'es', - 36: 'sq', - 66: 'mr', - 129: 'eu', - 7: 'da', - 37: 'ro', - 67: 'bn', - 130: 'ca', - 8: 'pt', - 38: 'cz', - 68: 'as', - 131: 'la', - 9: 'no', - 39: 'sk', - 69: 'gu', - 132: 'qu', - 10: 'he', - 40: 'si', - 70: 'pa', - 133: 'gn', - 11: 'ja', - 41: 'yi', - 71: 'or', - 134: 'ay', - 12: 'ar', - 42: 'sr', - 72: 'ml', - 135: 'tt', - 13: 'fi', - 43: 'mk', - 73: 'kn', - 136: 'ug', - 14: 'el', - 44: 'bg', - 74: 'ta', - 137: 'dz', - 15: 'is', - 45: 'uk', - 75: 'te', - 138: 'jv', - 16: 'mt', - 46: 'be', - 76: 'si', - 139: 'su', - 17: 'tr', - 47: 'uz', - 77: 'my', - 140: 'gl', - 18: 'hr', - 48: 'kk', - 78: 'km', - 141: 'af', - 19: 'zh-Hant', - 49: 'az-Cyrl', - 79: 'lo', - 142: 'br', - 20: 'ur', - 50: 'az-Arab', - 80: 'vi', - 143: 'iu', - 21: 'hi', - 51: 'hy', - 81: 'id', - 144: 'gd', - 22: 'th', - 52: 'ka', - 82: 'tl', - 145: 'gv', - 23: 'ko', - 53: 'mo', - 83: 'ms', - 146: 'ga', - 24: 'lt', - 54: 'ky', - 84: 'ms-Arab', - 147: 'to', - 25: 'pl', - 55: 'tg', - 85: 'am', - 148: 'el-polyton', - 26: 'hu', - 56: 'tk', - 86: 'ti', - 149: 'kl', - 27: 'es', - 57: 'mn-CN', - 87: 'om', - 150: 'az', - 28: 'lv', - 58: 'mn', - 88: 'so', - 151: 'nn', - 29: 'se', - 59: 'ps', - 89: 'sw' - }, - // ISO (deprecated) - [], - { - 0x0436: 'af', - 0x4009: 'en-IN', - 0x0487: 'rw', - 0x0432: 'tn', - 0x041C: 'sq', - 0x1809: 'en-IE', - 0x0441: 'sw', - 0x045B: 'si', - 0x0484: 'gsw', - 0x2009: 'en-JM', - 0x0457: 'kok', - 0x041B: 'sk', - 0x045E: 'am', - 0x4409: 'en-MY', - 0x0412: 'ko', - 0x0424: 'sl', - 0x1401: 'ar-DZ', - 0x1409: 'en-NZ', - 0x0440: 'ky', - 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', - 0x3409: 'en-PH', - 0x0454: 'lo', - 0x400A: 'es-BO', - 0x0C01: 'ar', - 0x4809: 'en-SG', - 0x0426: 'lv', - 0x340A: 'es-CL', - 0x0801: 'ar-IQ', - 0x1C09: 'en-ZA', - 0x0427: 'lt', - 0x240A: 'es-CO', - 0x2C01: 'ar-JO', - 0x2C09: 'en-TT', - 0x082E: 'dsb', - 0x140A: 'es-CR', - 0x3401: 'ar-KW', - 0x0809: 'en-GB', - 0x046E: 'lb', - 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', - 0x0409: 'en', - 0x042F: 'mk', - 0x300A: 'es-EC', - 0x1001: 'ar-LY', - 0x3009: 'en-ZW', - 0x083E: 'ms-BN', - 0x440A: 'es-SV', - 0x1801: 'ary', - 0x0425: 'et', - 0x043E: 'ms', - 0x100A: 'es-GT', - 0x2001: 'ar-OM', - 0x0438: 'fo', - 0x044C: 'ml', - 0x480A: 'es-HN', - 0x4001: 'ar-QA', - 0x0464: 'fil', - 0x043A: 'mt', - 0x080A: 'es-MX', - 0x0401: 'ar-SA', - 0x040B: 'fi', - 0x0481: 'mi', - 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', - 0x080C: 'fr-BE', - 0x047A: 'arn', - 0x180A: 'es-PA', - 0x1C01: 'aeb', - 0x0C0C: 'fr-CA', - 0x044E: 'mr', - 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', - 0x040C: 'fr', - 0x047C: 'moh', - 0x280A: 'es-PE', - 0x2401: 'ar-YE', - 0x140C: 'fr-LU', - 0x0450: 'mn', - 0x500A: 'es-PR', - 0x042B: 'hy', - 0x180C: 'fr-MC', - 0x0850: 'mn-CN', - 0x0C0A: 'es', - 0x044D: 'as', - 0x100C: 'fr-CH', - 0x0461: 'ne', - 0x040A: 'es', - 0x082C: 'az-Cyrl', - 0x0462: 'fy', - 0x0414: 'nb', - 0x540A: 'es-US', - 0x042C: 'az', - 0x0456: 'gl', - 0x0814: 'nn', - 0x380A: 'es-UY', - 0x046D: 'ba', - 0x0437: 'ka', - 0x0482: 'oc', - 0x200A: 'es-VE', - 0x042D: 'eu', - 0x0C07: 'de-AT', - 0x0448: 'or', - 0x081D: 'sv-FI', - 0x0423: 'be', - 0x0407: 'de', - 0x0463: 'ps', - 0x041D: 'sv', - 0x0845: 'bn', - 0x1407: 'de-LI', - 0x0415: 'pl', - 0x045A: 'syr', - 0x0445: 'bn-IN', - 0x1007: 'de-LU', - 0x0416: 'pt', - 0x0428: 'tg', - 0x201A: 'bs-Cyrl', - 0x0807: 'de-CH', - 0x0816: 'pt-PT', - 0x085F: 'tzm', - 0x141A: 'bs', - 0x0408: 'el', - 0x0446: 'pa', - 0x0449: 'ta', - 0x047E: 'br', - 0x046F: 'kl', - 0x046B: 'qu-BO', - 0x0444: 'tt', - 0x0402: 'bg', - 0x0447: 'gu', - 0x086B: 'qu-EC', - 0x044A: 'te', - 0x0403: 'ca', - 0x0468: 'ha', - 0x0C6B: 'qu', - 0x041E: 'th', - 0x0C04: 'zh-HK', - 0x040D: 'he', - 0x0418: 'ro', - 0x0451: 'bo', - 0x1404: 'zh-MO', - 0x0439: 'hi', - 0x0417: 'rm', - 0x041F: 'tr', - 0x0804: 'zh', - 0x040E: 'hu', - 0x0419: 'ru', - 0x0442: 'tk', - 0x1004: 'zh-SG', - 0x040F: 'is', - 0x243B: 'smn', - 0x0480: 'ug', - 0x0404: 'zh-TW', - 0x0470: 'ig', - 0x103B: 'smj-NO', - 0x0422: 'uk', - 0x0483: 'co', - 0x0421: 'id', - 0x143B: 'smj', - 0x042E: 'hsb', - 0x041A: 'hr', - 0x045D: 'iu', - 0x0C3B: 'se-FI', - 0x0420: 'ur', - 0x101A: 'hr-BA', - 0x085D: 'iu-Latn', - 0x043B: 'se', - 0x0843: 'uz-Cyrl', - 0x0405: 'cs', - 0x083C: 'ga', - 0x083B: 'se-SE', - 0x0443: 'uz', - 0x0406: 'da', - 0x0434: 'xh', - 0x203B: 'sms', - 0x042A: 'vi', - 0x048C: 'prs', - 0x0435: 'zu', - 0x183B: 'sma-NO', - 0x0452: 'cy', - 0x0465: 'dv', - 0x0410: 'it', - 0x1C3B: 'sms', - 0x0488: 'wo', - 0x0813: 'nl-BE', - 0x0810: 'it-CH', - 0x044F: 'sa', - 0x0485: 'sah', - 0x0413: 'nl', - 0x0411: 'ja', - 0x1C1A: 'sr-Cyrl-BA', - 0x0478: 'ii', - 0x0C09: 'en-AU', - 0x044B: 'kn', - 0x0C1A: 'sr', - 0x046A: 'yo', - 0x2809: 'en-BZ', - 0x043F: 'kk', - 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', - 0x0453: 'km', - 0x081A: 'sr-Latn', - 0x2409: 'en-029', - 0x0486: 'quc', - 0x046C: 'nso' - } -]; - - -let $2bcf221753ec8e32$var$NameRecord = new $52ZIf$Struct({ - platformID: $52ZIf$uint16, - encodingID: $52ZIf$uint16, - languageID: $52ZIf$uint16, - nameID: $52ZIf$uint16, - length: $52ZIf$uint16, - string: new $52ZIf$Pointer($52ZIf$uint16, new $52ZIf$String('length', (t)=>(0, $e449ad78d50845fe$export$badc544e0651b6b1)(t.platformID, t.encodingID, t.languageID)), { - type: 'parent', - relativeTo: (ctx)=>ctx.parent.stringOffset, - allowNull: false - }) -}); -let $2bcf221753ec8e32$var$LangTagRecord = new $52ZIf$Struct({ - length: $52ZIf$uint16, - tag: new $52ZIf$Pointer($52ZIf$uint16, new $52ZIf$String('length', 'utf16be'), { - type: 'parent', - relativeTo: (ctx)=>ctx.stringOffset - }) -}); -var $2bcf221753ec8e32$var$NameTable = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 0: { - count: $52ZIf$uint16, - stringOffset: $52ZIf$uint16, - records: new $52ZIf$Array($2bcf221753ec8e32$var$NameRecord, 'count') - }, - 1: { - count: $52ZIf$uint16, - stringOffset: $52ZIf$uint16, - records: new $52ZIf$Array($2bcf221753ec8e32$var$NameRecord, 'count'), - langTagCount: $52ZIf$uint16, - langTags: new $52ZIf$Array($2bcf221753ec8e32$var$LangTagRecord, 'langTagCount') - } -}); -var $2bcf221753ec8e32$export$2e2bcd8739ae039 = $2bcf221753ec8e32$var$NameTable; -const $2bcf221753ec8e32$var$NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; -$2bcf221753ec8e32$var$NameTable.process = function(stream) { - var records = {}; - for (let record of this.records){ - // find out what language this is for - let language = (0, $e449ad78d50845fe$export$2092376fd002e13)[record.platformID][record.languageID]; - if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; - if (language == null) language = record.platformID + '-' + record.languageID; - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : $2bcf221753ec8e32$var$NAMES[record.nameID] || record.nameID; - if (records[key] == null) records[key] = {}; - let obj = records[key]; - if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); - if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; - } - this.records = records; -}; -$2bcf221753ec8e32$var$NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - let records = []; - for(let key in this.records){ - let val = this.records[key]; - if (key === 'fontFeatures') continue; - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: $2bcf221753ec8e32$var$NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - if (key === 'postscriptName') records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: $2bcf221753ec8e32$var$NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - this.records = records; - this.count = records.length; - this.stringOffset = $2bcf221753ec8e32$var$NameTable.size(this, null, false); -}; - - - -var $84b272aa31b70606$var$OS2 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - header: { - xAvgCharWidth: $52ZIf$int16, - usWeightClass: $52ZIf$uint16, - usWidthClass: $52ZIf$uint16, - fsType: new $52ZIf$Bitfield($52ZIf$uint16, [ - null, - 'noEmbedding', - 'viewOnly', - 'editable', - null, - null, - null, - null, - 'noSubsetting', - 'bitmapOnly' - ]), - ySubscriptXSize: $52ZIf$int16, - ySubscriptYSize: $52ZIf$int16, - ySubscriptXOffset: $52ZIf$int16, - ySubscriptYOffset: $52ZIf$int16, - ySuperscriptXSize: $52ZIf$int16, - ySuperscriptYSize: $52ZIf$int16, - ySuperscriptXOffset: $52ZIf$int16, - ySuperscriptYOffset: $52ZIf$int16, - yStrikeoutSize: $52ZIf$int16, - yStrikeoutPosition: $52ZIf$int16, - sFamilyClass: $52ZIf$int16, - panose: new $52ZIf$Array($52ZIf$uint8, 10), - ulCharRange: new $52ZIf$Array($52ZIf$uint32, 4), - vendorID: new $52ZIf$String(4), - fsSelection: new $52ZIf$Bitfield($52ZIf$uint16, [ - 'italic', - 'underscore', - 'negative', - 'outlined', - 'strikeout', - 'bold', - 'regular', - 'useTypoMetrics', - 'wws', - 'oblique' - ]), - usFirstCharIndex: $52ZIf$uint16, - usLastCharIndex: $52ZIf$uint16 // The maximum Unicode index in this font - }, - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - 1: { - typoAscender: $52ZIf$int16, - typoDescender: $52ZIf$int16, - typoLineGap: $52ZIf$int16, - winAscent: $52ZIf$uint16, - winDescent: $52ZIf$uint16, - codePageRange: new $52ZIf$Array($52ZIf$uint32, 2) - }, - 2: { - // these should be common with version 1 somehow - typoAscender: $52ZIf$int16, - typoDescender: $52ZIf$int16, - typoLineGap: $52ZIf$int16, - winAscent: $52ZIf$uint16, - winDescent: $52ZIf$uint16, - codePageRange: new $52ZIf$Array($52ZIf$uint32, 2), - xHeight: $52ZIf$int16, - capHeight: $52ZIf$int16, - defaultChar: $52ZIf$uint16, - breakChar: $52ZIf$uint16, - maxContent: $52ZIf$uint16 - }, - 5: { - typoAscender: $52ZIf$int16, - typoDescender: $52ZIf$int16, - typoLineGap: $52ZIf$int16, - winAscent: $52ZIf$uint16, - winDescent: $52ZIf$uint16, - codePageRange: new $52ZIf$Array($52ZIf$uint32, 2), - xHeight: $52ZIf$int16, - capHeight: $52ZIf$int16, - defaultChar: $52ZIf$uint16, - breakChar: $52ZIf$uint16, - maxContent: $52ZIf$uint16, - usLowerOpticalPointSize: $52ZIf$uint16, - usUpperOpticalPointSize: $52ZIf$uint16 - } -}); -let $84b272aa31b70606$var$versions = $84b272aa31b70606$var$OS2.versions; -$84b272aa31b70606$var$versions[3] = $84b272aa31b70606$var$versions[4] = $84b272aa31b70606$var$versions[2]; -var $84b272aa31b70606$export$2e2bcd8739ae039 = $84b272aa31b70606$var$OS2; - - - -var // PostScript information -$32d9e2eb9565d93c$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$fixed32, { - header: { - italicAngle: $52ZIf$fixed32, - underlinePosition: $52ZIf$int16, - underlineThickness: $52ZIf$int16, - isFixedPitch: $52ZIf$uint32, - minMemType42: $52ZIf$uint32, - maxMemType42: $52ZIf$uint32, - minMemType1: $52ZIf$uint32, - maxMemType1: $52ZIf$uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - 1: {}, - 2: { - numberOfGlyphs: $52ZIf$uint16, - glyphNameIndex: new $52ZIf$Array($52ZIf$uint16, 'numberOfGlyphs'), - names: new $52ZIf$Array(new $52ZIf$String($52ZIf$uint8)) - }, - 2.5: { - numberOfGlyphs: $52ZIf$uint16, - offsets: new $52ZIf$Array($52ZIf$uint8, 'numberOfGlyphs') - }, - 3: {}, - 4: { - map: new $52ZIf$Array($52ZIf$uint32, (t)=>t.parent.maxp.numGlyphs) - } -}); - - - -var // An array of predefined values accessible by instructions -$5202bd9d9ad8eaac$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - controlValues: new $52ZIf$Array($52ZIf$int16) -}); - - - -var // A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -$5c0f37ca5ffb1850$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - instructions: new $52ZIf$Array($52ZIf$uint8) -}); - - - -let $2b2b260902b1c57e$var$loca = new $52ZIf$VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new $52ZIf$Array($52ZIf$uint16) - }, - 1: { - offsets: new $52ZIf$Array($52ZIf$uint32) - } -}); -$2b2b260902b1c57e$var$loca.process = function() { - if (this.version === 0 && !this._processed) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; - this._processed = true; - } -}; -$2b2b260902b1c57e$var$loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; - this._processed = false; - } -}; -var $2b2b260902b1c57e$export$2e2bcd8739ae039 = $2b2b260902b1c57e$var$loca; - - - -var // Set of instructions executed whenever the point size or font transformation change -$7afb878c7bea4f66$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - controlValueProgram: new $52ZIf$Array($52ZIf$uint8) -}); - - - -var // only used for encoding -$6c92b6371bce8bd9$export$2e2bcd8739ae039 = new $52ZIf$Array(new $52ZIf$Buffer); - - - - -class $43e9821ef3717eec$export$2e2bcd8739ae039 { - getCFFVersion(ctx) { - while(ctx && !ctx.hdrSize)ctx = ctx.parent; - return ctx ? ctx.version : -1; - } - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); - if (count === 0) return []; - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) offsetType = $52ZIf$uint8; - else if (offSize === 2) offsetType = $52ZIf$uint16; - else if (offSize === 3) offsetType = $52ZIf$uint24; - else if (offSize === 4) offsetType = $52ZIf$uint32; - else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - let ret = []; - let startPos = stream.pos + (count + 1) * offSize - 1; - let start = offsetType.decode(stream); - for(let i = 0; i < count; i++){ - let end = offsetType.decode(stream); - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else ret.push({ - offset: startPos + start, - length: end - start - }); - start = end; - } - stream.pos = startPos + start; - return ret; - } - size(arr, parent) { - let size = 2; - if (arr.length === 0) return size; - let type = this.type || new $52ZIf$Buffer; - // find maximum offset to detminine offset type - let offset = 1; - for(let i = 0; i < arr.length; i++){ - let item = arr[i]; - offset += type.size(item, parent); - } - let offsetType; - if (offset <= 0xff) offsetType = $52ZIf$uint8; - else if (offset <= 0xffff) offsetType = $52ZIf$uint16; - else if (offset <= 0xffffff) offsetType = $52ZIf$uint24; - else if (offset <= 0xffffffff) offsetType = $52ZIf$uint32; - else throw new Error("Bad offset in CFFIndex"); - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - return size; - } - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) return; - let type = this.type || new $52ZIf$Buffer; - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr){ - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - let offsetType; - if (offset <= 0xff) offsetType = $52ZIf$uint8; - else if (offset <= 0xffff) offsetType = $52ZIf$uint16; - else if (offset <= 0xffffff) offsetType = $52ZIf$uint24; - else if (offset <= 0xffffffff) offsetType = $52ZIf$uint32; - else throw new Error("Bad offset in CFFIndex"); - // write offset size - stream.writeUInt8(offsetType.size()); - // write elements - offset = 1; - offsetType.encode(stream, offset); - for (let size of sizes){ - offset += size; - offsetType.encode(stream, offset); - } - for (let item of arr)type.encode(stream, item, parent); - return; - } - constructor(type){ - this.type = type; - } -} - - - - - -const $c2d28e92708f99da$var$FLOAT_EOF = 0xf; -const $c2d28e92708f99da$var$FLOAT_LOOKUP = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '.', - 'E', - 'E-', - null, - '-' -]; -const $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; -class $c2d28e92708f99da$export$2e2bcd8739ae039 { - static decode(stream, value) { - if (32 <= value && value <= 246) return value - 139; - if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; - if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; - if (value === 28) return stream.readInt16BE(); - if (value === 29) return stream.readInt32BE(); - if (value === 30) { - let str = ''; - while(true){ - let b = stream.readUInt8(); - let n1 = b >> 4; - if (n1 === $c2d28e92708f99da$var$FLOAT_EOF) break; - str += $c2d28e92708f99da$var$FLOAT_LOOKUP[n1]; - let n2 = b & 15; - if (n2 === $c2d28e92708f99da$var$FLOAT_EOF) break; - str += $c2d28e92708f99da$var$FLOAT_LOOKUP[n2]; - } - return parseFloat(str); - } - return null; - } - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) value = 32768; - if ((value | 0) !== value) { - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - } else if (-107 <= value && value <= 107) return 1; - else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; - else if (-32768 <= value && value <= 32767) return 3; - else return 5; - } - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } else if ((val | 0) !== val) { - stream.writeUInt8(30); - let str = '' + val; - for(let i = 0; i < str.length; i += 2){ - let c1 = str[i]; - let n1 = $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; - if (i === str.length - 1) var n2 = $c2d28e92708f99da$var$FLOAT_EOF; - else { - let c2 = str[i + 1]; - var n2 = $c2d28e92708f99da$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - stream.writeUInt8(n1 << 4 | n2 & 15); - } - if (n2 !== $c2d28e92708f99da$var$FLOAT_EOF) return stream.writeUInt8($c2d28e92708f99da$var$FLOAT_EOF << 4); - } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); - else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} - - -class $61aa549f16d58b9b$export$2e2bcd8739ae039 { - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ - op - ])); - else if (type.decode != null) return type.decode(stream, ret, operands); - else switch(type){ - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]); - else if (type.encode != null) return type.encode(stream, operands, ctx); - else if (typeof operands === 'number') return [ - operands - ]; - else if (typeof operands === 'boolean') return [ - +operands - ]; - else if (Array.isArray(operands)) return operands; - else return [ - operands - ]; - } - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - // define hidden properties - Object.defineProperties(ret, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - } - }); - // fill in defaults - for(let key in this.fields){ - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - while(stream.pos < end){ - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) b = b << 8 | stream.readUInt8(); - let field = this.fields[b]; - if (!field) throw new Error(`Unknown operator ${b}`); - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof (0, $52ZIf$PropertyDescriptor)) Object.defineProperty(ret, field[1], val); - else ret[field[1]] = val; - } - operands = []; - } else operands.push((0, $c2d28e92708f99da$export$2e2bcd8739ae039).decode(stream, b)); - } - return ret; - } - size(dict, parent, includePointers = true) { - let ctx = { - parent: parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - let len = 0; - for(let k in this.fields){ - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || (0, $52ZIf$fastdeepequal)(val, field[3])) continue; - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands)len += (0, $c2d28e92708f99da$export$2e2bcd8739ae039).size(op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - len += key.length; - } - if (includePointers) len += ctx.pointerSize; - return len; - } - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: dict, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - for (let field of this.ops){ - let val = dict[field[1]]; - if (val == null || (0, $52ZIf$fastdeepequal)(val, field[3])) continue; - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands)(0, $c2d28e92708f99da$export$2e2bcd8739ae039).encode(stream, op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - for (let op of key)stream.writeUInt8(op); - } - let i = 0; - while(i < ctx.pointers.length){ - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - return; - } - constructor(ops = []){ - this.ops = ops; - this.fields = {}; - for (let field of ops){ - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } -} - - - - -class $0e34a43d05bde82c$export$2e2bcd8739ae039 extends $52ZIf$Pointer { - decode(stream, parent, operands) { - this.offsetType = { - decode: ()=>operands[0] - }; - return super.decode(stream, parent, operands); - } - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: ()=>0 - }; - this.size(value, ctx); - return [ - new $0e34a43d05bde82c$var$Ptr(0) - ]; - } - let ptr = null; - this.offsetType = { - encode: (stream, val)=>ptr = val - }; - super.encode(stream, value, ctx); - return [ - new $0e34a43d05bde82c$var$Ptr(ptr) - ]; - } - constructor(type, options = {}){ - if (options.type == null) options.type = 'global'; - super(null, type, options); - } -} -class $0e34a43d05bde82c$var$Ptr { - valueOf() { - return this.val; - } - constructor(val){ - this.val = val; - this.forceLarge = true; - } -} - - - - - -class $6d59db2e29cc77b3$var$CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while(operands.length > numBlends)operands.pop(); - } -} -var $6d59db2e29cc77b3$export$2e2bcd8739ae039 = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type default - [ - 6, - 'BlueValues', - 'delta', - null - ], - [ - 7, - 'OtherBlues', - 'delta', - null - ], - [ - 8, - 'FamilyBlues', - 'delta', - null - ], - [ - 9, - 'FamilyOtherBlues', - 'delta', - null - ], - [ - [ - 12, - 9 - ], - 'BlueScale', - 'number', - 0.039625 - ], - [ - [ - 12, - 10 - ], - 'BlueShift', - 'number', - 7 - ], - [ - [ - 12, - 11 - ], - 'BlueFuzz', - 'number', - 1 - ], - [ - 10, - 'StdHW', - 'number', - null - ], - [ - 11, - 'StdVW', - 'number', - null - ], - [ - [ - 12, - 12 - ], - 'StemSnapH', - 'delta', - null - ], - [ - [ - 12, - 13 - ], - 'StemSnapV', - 'delta', - null - ], - [ - [ - 12, - 14 - ], - 'ForceBold', - 'boolean', - false - ], - [ - [ - 12, - 17 - ], - 'LanguageGroup', - 'number', - 0 - ], - [ - [ - 12, - 18 - ], - 'ExpansionFactor', - 'number', - 0.06 - ], - [ - [ - 12, - 19 - ], - 'initialRandomSeed', - 'number', - 0 - ], - [ - 20, - 'defaultWidthX', - 'number', - 0 - ], - [ - 21, - 'nominalWidthX', - 'number', - 0 - ], - [ - 22, - 'vsindex', - 'number', - 0 - ], - [ - 23, - 'blend', - $6d59db2e29cc77b3$var$CFFBlendOp, - null - ], - [ - 19, - 'Subrs', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039), { - type: 'local' - }), - null - ] -]); - - -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -var $229224aec43783c5$export$2e2bcd8739ae039 = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -]; - - -let $bc0433d9b7e41f5f$export$dee0027060fa13bd = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - '', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - '', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - '', - 'questiondown', - '', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - '', - 'ring', - 'cedilla', - '', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'AE', - '', - 'ordfeminine', - '', - '', - '', - '', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - '', - '', - '', - '', - '', - 'ae', - '', - '', - '', - 'dotlessi', - '', - '', - 'lslash', - 'oslash', - 'oe', - 'germandbls' -]; -let $bc0433d9b7e41f5f$export$4f58f497e14a53c3 = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - '', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - '', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - '', - '', - 'isuperior', - '', - '', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - '', - '', - 'rsuperior', - 'ssuperior', - 'tsuperior', - '', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - '', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - '', - '', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - '', - 'Dotaccentsmall', - '', - '', - 'Macronsmall', - '', - '', - 'figuredash', - 'hypheninferior', - '', - '', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - '', - '', - '', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - '', - '', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; - - -let $ef658f5c9a1488b2$export$c33b50336c234f16 = [ - '.notdef', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - 'questiondown', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - 'AE', - 'ordfeminine', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - 'ae', - 'dotlessi', - 'lslash', - 'oslash', - 'oe', - 'germandbls', - 'onesuperior', - 'logicalnot', - 'mu', - 'trademark', - 'Eth', - 'onehalf', - 'plusminus', - 'Thorn', - 'onequarter', - 'divide', - 'brokenbar', - 'degree', - 'thorn', - 'threequarters', - 'twosuperior', - 'registered', - 'minus', - 'eth', - 'multiply', - 'threesuperior', - 'copyright', - 'Aacute', - 'Acircumflex', - 'Adieresis', - 'Agrave', - 'Aring', - 'Atilde', - 'Ccedilla', - 'Eacute', - 'Ecircumflex', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Ntilde', - 'Oacute', - 'Ocircumflex', - 'Odieresis', - 'Ograve', - 'Otilde', - 'Scaron', - 'Uacute', - 'Ucircumflex', - 'Udieresis', - 'Ugrave', - 'Yacute', - 'Ydieresis', - 'Zcaron', - 'aacute', - 'acircumflex', - 'adieresis', - 'agrave', - 'aring', - 'atilde', - 'ccedilla', - 'eacute', - 'ecircumflex', - 'edieresis', - 'egrave', - 'iacute', - 'icircumflex', - 'idieresis', - 'igrave', - 'ntilde', - 'oacute', - 'ocircumflex', - 'odieresis', - 'ograve', - 'otilde', - 'scaron', - 'uacute', - 'ucircumflex', - 'udieresis', - 'ugrave', - 'yacute', - 'ydieresis', - 'zcaron' -]; -let $ef658f5c9a1488b2$export$3ed0f9e1fee8d489 = [ - '.notdef', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - 'Dotaccentsmall', - 'Macronsmall', - 'figuredash', - 'hypheninferior', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; -let $ef658f5c9a1488b2$export$dc28be11139d4120 = [ - '.notdef', - 'space', - 'dollaroldstyle', - 'dollarsuperior', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'hyphensuperior', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'centoldstyle', - 'figuredash', - 'hypheninferior', - 'onequarter', - 'onehalf', - 'threequarters', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior' -]; - - - -//######################## -// Scripts and Languages # -//######################## -let $7cbbe4e24ef3cb75$var$LangSysTable = new $52ZIf$Struct({ - reserved: new $52ZIf$Reserved($52ZIf$uint16), - reqFeatureIndex: $52ZIf$uint16, - featureCount: $52ZIf$uint16, - featureIndexes: new $52ZIf$Array($52ZIf$uint16, 'featureCount') -}); -let $7cbbe4e24ef3cb75$var$LangSysRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - langSys: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$LangSysTable, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$var$Script = new $52ZIf$Struct({ - defaultLangSys: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$LangSysTable), - count: $52ZIf$uint16, - langSysRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LangSysRecord, 'count') -}); -let $7cbbe4e24ef3cb75$var$ScriptRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - script: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$Script, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$export$3e15fc05ce864229 = new $52ZIf$Array($7cbbe4e24ef3cb75$var$ScriptRecord, $52ZIf$uint16); -//####################### -// Features and Lookups # -//####################### -let $7cbbe4e24ef3cb75$var$FeatureParams = new $52ZIf$Struct({ - version: $52ZIf$uint16, - nameID: $52ZIf$uint16 -}); -let $7cbbe4e24ef3cb75$export$6e91cf7616333d5 = new $52ZIf$Struct({ - featureParams: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$FeatureParams), - lookupCount: $52ZIf$uint16, - lookupListIndexes: new $52ZIf$Array($52ZIf$uint16, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$FeatureRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - feature: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$6e91cf7616333d5, { - type: 'parent' - }) -}); -let $7cbbe4e24ef3cb75$export$aa18130def4b6cb4 = new $52ZIf$Array($7cbbe4e24ef3cb75$var$FeatureRecord, $52ZIf$uint16); -let $7cbbe4e24ef3cb75$var$LookupFlags = new $52ZIf$Struct({ - markAttachmentType: $52ZIf$uint8, - flags: new $52ZIf$Bitfield($52ZIf$uint8, [ - 'rightToLeft', - 'ignoreBaseGlyphs', - 'ignoreLigatures', - 'ignoreMarks', - 'useMarkFilteringSet' - ]) -}); -function $7cbbe4e24ef3cb75$export$df0008c6ff2da22a(SubTable) { - let Lookup = new $52ZIf$Struct({ - lookupType: $52ZIf$uint16, - flags: $7cbbe4e24ef3cb75$var$LookupFlags, - subTableCount: $52ZIf$uint16, - subTables: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, SubTable), 'subTableCount'), - markFilteringSet: new $52ZIf$Optional($52ZIf$uint16, (t)=>t.flags.flags.useMarkFilteringSet) - }); - return new $52ZIf$LazyArray(new $52ZIf$Pointer($52ZIf$uint16, Lookup), $52ZIf$uint16); -} -//################# -// Coverage Table # -//################# -let $7cbbe4e24ef3cb75$var$RangeRecord = new $52ZIf$Struct({ - start: $52ZIf$uint16, - end: $52ZIf$uint16, - startCoverageIndex: $52ZIf$uint16 -}); -let $7cbbe4e24ef3cb75$export$17608c3f81a6111 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - glyphCount: $52ZIf$uint16, - glyphs: new $52ZIf$Array($52ZIf$uint16, 'glyphCount') - }, - 2: { - rangeCount: $52ZIf$uint16, - rangeRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$RangeRecord, 'rangeCount') - } -}); -//######################### -// Class Definition Table # -//######################### -let $7cbbe4e24ef3cb75$var$ClassRangeRecord = new $52ZIf$Struct({ - start: $52ZIf$uint16, - end: $52ZIf$uint16, - class: $52ZIf$uint16 -}); -let $7cbbe4e24ef3cb75$export$843d551fbbafef71 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - startGlyph: $52ZIf$uint16, - glyphCount: $52ZIf$uint16, - classValueArray: new $52ZIf$Array($52ZIf$uint16, 'glyphCount') - }, - 2: { - classRangeCount: $52ZIf$uint16, - classRangeRecord: new $52ZIf$Array($7cbbe4e24ef3cb75$var$ClassRangeRecord, 'classRangeCount') - } -}); -let $7cbbe4e24ef3cb75$export$8215d14a63d9fb10 = new $52ZIf$Struct({ - a: $52ZIf$uint16, - b: $52ZIf$uint16, - deltaFormat: $52ZIf$uint16 -}); -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# -let $7cbbe4e24ef3cb75$var$LookupRecord = new $52ZIf$Struct({ - sequenceIndex: $52ZIf$uint16, - lookupListIndex: $52ZIf$uint16 -}); -let $7cbbe4e24ef3cb75$var$Rule = new $52ZIf$Struct({ - glyphCount: $52ZIf$uint16, - lookupCount: $52ZIf$uint16, - input: new $52ZIf$Array($52ZIf$uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$RuleSet = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$Rule), $52ZIf$uint16); -let $7cbbe4e24ef3cb75$var$ClassRule = new $52ZIf$Struct({ - glyphCount: $52ZIf$uint16, - lookupCount: $52ZIf$uint16, - classes: new $52ZIf$Array($52ZIf$uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$ClassSet = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$ClassRule), $52ZIf$uint16); -let $7cbbe4e24ef3cb75$export$841858b892ce1f4c = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - ruleSetCount: $52ZIf$uint16, - ruleSets: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$RuleSet), 'ruleSetCount') - }, - 2: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - classDef: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - classSetCnt: $52ZIf$uint16, - classSet: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: $52ZIf$uint16, - lookupCount: $52ZIf$uint16, - coverages: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'glyphCount'), - lookupRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') - } -}); -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### -let $7cbbe4e24ef3cb75$var$ChainRule = new $52ZIf$Struct({ - backtrackGlyphCount: $52ZIf$uint16, - backtrack: new $52ZIf$Array($52ZIf$uint16, 'backtrackGlyphCount'), - inputGlyphCount: $52ZIf$uint16, - input: new $52ZIf$Array($52ZIf$uint16, (t)=>t.inputGlyphCount - 1), - lookaheadGlyphCount: $52ZIf$uint16, - lookahead: new $52ZIf$Array($52ZIf$uint16, 'lookaheadGlyphCount'), - lookupCount: $52ZIf$uint16, - lookupRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') -}); -let $7cbbe4e24ef3cb75$var$ChainRuleSet = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$ChainRule), $52ZIf$uint16); -let $7cbbe4e24ef3cb75$export$5e6d09e6861162f6 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - chainCount: $52ZIf$uint16, - chainRuleSets: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$ChainRuleSet), 'chainCount') - }, - 2: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), - backtrackClassDef: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - inputClassDef: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - lookaheadClassDef: new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$843d551fbbafef71), - chainCount: $52ZIf$uint16, - chainClassSet: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$var$ChainRuleSet), 'chainCount') - }, - 3: { - backtrackGlyphCount: $52ZIf$uint16, - backtrackCoverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'backtrackGlyphCount'), - inputGlyphCount: $52ZIf$uint16, - inputCoverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'inputGlyphCount'), - lookaheadGlyphCount: $52ZIf$uint16, - lookaheadCoverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $7cbbe4e24ef3cb75$export$17608c3f81a6111), 'lookaheadGlyphCount'), - lookupCount: $52ZIf$uint16, - lookupRecords: new $52ZIf$Array($7cbbe4e24ef3cb75$var$LookupRecord, 'lookupCount') - } -}); - - - -/******************* - * Variation Store * - *******************/ let $1a47b0c45c1c22fe$var$F2DOT14 = new $52ZIf$Fixed(16, 'BE', 14); -let $1a47b0c45c1c22fe$var$RegionAxisCoordinates = new $52ZIf$Struct({ - startCoord: $1a47b0c45c1c22fe$var$F2DOT14, - peakCoord: $1a47b0c45c1c22fe$var$F2DOT14, - endCoord: $1a47b0c45c1c22fe$var$F2DOT14 -}); -let $1a47b0c45c1c22fe$var$VariationRegionList = new $52ZIf$Struct({ - axisCount: $52ZIf$uint16, - regionCount: $52ZIf$uint16, - variationRegions: new $52ZIf$Array(new $52ZIf$Array($1a47b0c45c1c22fe$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); -let $1a47b0c45c1c22fe$var$DeltaSet = new $52ZIf$Struct({ - shortDeltas: new $52ZIf$Array($52ZIf$int16, (t)=>t.parent.shortDeltaCount), - regionDeltas: new $52ZIf$Array($52ZIf$int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) -}); -let $1a47b0c45c1c22fe$var$ItemVariationData = new $52ZIf$Struct({ - itemCount: $52ZIf$uint16, - shortDeltaCount: $52ZIf$uint16, - regionIndexCount: $52ZIf$uint16, - regionIndexes: new $52ZIf$Array($52ZIf$uint16, 'regionIndexCount'), - deltaSets: new $52ZIf$Array($1a47b0c45c1c22fe$var$DeltaSet, 'itemCount') -}); -let $1a47b0c45c1c22fe$export$fe1b122a2710f241 = new $52ZIf$Struct({ - format: $52ZIf$uint16, - variationRegionList: new $52ZIf$Pointer($52ZIf$uint32, $1a47b0c45c1c22fe$var$VariationRegionList), - variationDataCount: $52ZIf$uint16, - itemVariationData: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint32, $1a47b0c45c1c22fe$var$ItemVariationData), 'variationDataCount') -}); -/********************** - * Feature Variations * - **********************/ let $1a47b0c45c1c22fe$var$ConditionTable = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - axisIndex: $52ZIf$uint16, - axisIndex: $52ZIf$uint16, - filterRangeMinValue: $1a47b0c45c1c22fe$var$F2DOT14, - filterRangeMaxValue: $1a47b0c45c1c22fe$var$F2DOT14 - } -}); -let $1a47b0c45c1c22fe$var$ConditionSet = new $52ZIf$Struct({ - conditionCount: $52ZIf$uint16, - conditionTable: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint32, $1a47b0c45c1c22fe$var$ConditionTable), 'conditionCount') -}); -let $1a47b0c45c1c22fe$var$FeatureTableSubstitutionRecord = new $52ZIf$Struct({ - featureIndex: $52ZIf$uint16, - alternateFeatureTable: new $52ZIf$Pointer($52ZIf$uint32, (0, $7cbbe4e24ef3cb75$export$6e91cf7616333d5), { - type: 'parent' - }) -}); -let $1a47b0c45c1c22fe$var$FeatureTableSubstitution = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - substitutionCount: $52ZIf$uint16, - substitutions: new $52ZIf$Array($1a47b0c45c1c22fe$var$FeatureTableSubstitutionRecord, 'substitutionCount') -}); -let $1a47b0c45c1c22fe$var$FeatureVariationRecord = new $52ZIf$Struct({ - conditionSet: new $52ZIf$Pointer($52ZIf$uint32, $1a47b0c45c1c22fe$var$ConditionSet, { - type: 'parent' - }), - featureTableSubstitution: new $52ZIf$Pointer($52ZIf$uint32, $1a47b0c45c1c22fe$var$FeatureTableSubstitution, { - type: 'parent' - }) -}); -let $1a47b0c45c1c22fe$export$441b70b7971dd419 = new $52ZIf$Struct({ - majorVersion: $52ZIf$uint16, - minorVersion: $52ZIf$uint16, - featureVariationRecordCount: $52ZIf$uint32, - featureVariationRecords: new $52ZIf$Array($1a47b0c45c1c22fe$var$FeatureVariationRecord, 'featureVariationRecordCount') -}); - - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class $b84fd3dd9d8eddb2$var$PredefinedOp { - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; - return this.type.decode(stream, parent, operands); - } - size(value, ctx) { - return this.type.size(value, ctx); - } - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) return index; - return this.type.encode(stream, value, ctx); - } - constructor(predefinedOps, type){ - this.predefinedOps = predefinedOps; - this.type = type; - } -} -class $b84fd3dd9d8eddb2$var$CFFEncodingVersion extends $52ZIf$Number { - decode(stream) { - return $52ZIf$uint8.decode(stream) & 0x7f; - } - constructor(){ - super('UInt8'); - } -} -let $b84fd3dd9d8eddb2$var$Range1 = new $52ZIf$Struct({ - first: $52ZIf$uint16, - nLeft: $52ZIf$uint8 -}); -let $b84fd3dd9d8eddb2$var$Range2 = new $52ZIf$Struct({ - first: $52ZIf$uint16, - nLeft: $52ZIf$uint16 -}); -let $b84fd3dd9d8eddb2$var$CFFCustomEncoding = new $52ZIf$VersionedStruct(new $b84fd3dd9d8eddb2$var$CFFEncodingVersion(), { - 0: { - nCodes: $52ZIf$uint8, - codes: new $52ZIf$Array($52ZIf$uint8, 'nCodes') - }, - 1: { - nRanges: $52ZIf$uint8, - ranges: new $52ZIf$Array($b84fd3dd9d8eddb2$var$Range1, 'nRanges') - } -}); -let $b84fd3dd9d8eddb2$var$CFFEncoding = new $b84fd3dd9d8eddb2$var$PredefinedOp([ - (0, $bc0433d9b7e41f5f$export$dee0027060fa13bd), - (0, $bc0433d9b7e41f5f$export$4f58f497e14a53c3) -], new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFCustomEncoding, { - lazy: true -})); -// Decodes an array of ranges until the total -// length is equal to the provided length. -class $b84fd3dd9d8eddb2$var$RangeArray extends $52ZIf$Array { - decode(stream, parent) { - let length = (0, $52ZIf$resolveLength)(this.length, stream, parent); - let count = 0; - let res = []; - while(count < length){ - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - return res; - } -} -let $b84fd3dd9d8eddb2$var$CFFCustomCharset = new $52ZIf$VersionedStruct($52ZIf$uint8, { - 0: { - glyphs: new $52ZIf$Array($52ZIf$uint16, (t)=>t.parent.CharStrings.length - 1) - }, - 1: { - ranges: new $b84fd3dd9d8eddb2$var$RangeArray($b84fd3dd9d8eddb2$var$Range1, (t)=>t.parent.CharStrings.length - 1) - }, - 2: { - ranges: new $b84fd3dd9d8eddb2$var$RangeArray($b84fd3dd9d8eddb2$var$Range2, (t)=>t.parent.CharStrings.length - 1) - } -}); -let $b84fd3dd9d8eddb2$var$CFFCharset = new $b84fd3dd9d8eddb2$var$PredefinedOp([ - (0, $ef658f5c9a1488b2$export$c33b50336c234f16), - (0, $ef658f5c9a1488b2$export$3ed0f9e1fee8d489), - (0, $ef658f5c9a1488b2$export$dc28be11139d4120) -], new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFCustomCharset, { - lazy: true -})); -let $b84fd3dd9d8eddb2$var$FDRange3 = new $52ZIf$Struct({ - first: $52ZIf$uint16, - fd: $52ZIf$uint8 -}); -let $b84fd3dd9d8eddb2$var$FDRange4 = new $52ZIf$Struct({ - first: $52ZIf$uint32, - fd: $52ZIf$uint16 -}); -let $b84fd3dd9d8eddb2$var$FDSelect = new $52ZIf$VersionedStruct($52ZIf$uint8, { - 0: { - fds: new $52ZIf$Array($52ZIf$uint8, (t)=>t.parent.CharStrings.length) - }, - 3: { - nRanges: $52ZIf$uint16, - ranges: new $52ZIf$Array($b84fd3dd9d8eddb2$var$FDRange3, 'nRanges'), - sentinel: $52ZIf$uint16 - }, - 4: { - nRanges: $52ZIf$uint32, - ranges: new $52ZIf$Array($b84fd3dd9d8eddb2$var$FDRange4, 'nRanges'), - sentinel: $52ZIf$uint32 - } -}); -let $b84fd3dd9d8eddb2$var$ptr = new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)((0, $6d59db2e29cc77b3$export$2e2bcd8739ae039)); -class $b84fd3dd9d8eddb2$var$CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return $b84fd3dd9d8eddb2$var$ptr.decode(stream, parent, [ - operands[1] - ]); - } - size(dict, ctx) { - return [ - (0, $6d59db2e29cc77b3$export$2e2bcd8739ae039).size(dict, ctx, false), - $b84fd3dd9d8eddb2$var$ptr.size(dict, ctx)[0] - ]; - } - encode(stream, dict, ctx) { - return [ - (0, $6d59db2e29cc77b3$export$2e2bcd8739ae039).size(dict, ctx, false), - $b84fd3dd9d8eddb2$var$ptr.encode(stream, dict, ctx)[0] - ]; - } -} -let $b84fd3dd9d8eddb2$var$FontDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - 18, - 'Private', - new $b84fd3dd9d8eddb2$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ] -]); -let $b84fd3dd9d8eddb2$var$CFFTopDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - [ - 12, - 30 - ], - 'ROS', - [ - 'sid', - 'sid', - 'number' - ], - null - ], - [ - 0, - 'version', - 'sid', - null - ], - [ - 1, - 'Notice', - 'sid', - null - ], - [ - [ - 12, - 0 - ], - 'Copyright', - 'sid', - null - ], - [ - 2, - 'FullName', - 'sid', - null - ], - [ - 3, - 'FamilyName', - 'sid', - null - ], - [ - 4, - 'Weight', - 'sid', - null - ], - [ - [ - 12, - 1 - ], - 'isFixedPitch', - 'boolean', - false - ], - [ - [ - 12, - 2 - ], - 'ItalicAngle', - 'number', - 0 - ], - [ - [ - 12, - 3 - ], - 'UnderlinePosition', - 'number', - -100 - ], - [ - [ - 12, - 4 - ], - 'UnderlineThickness', - 'number', - 50 - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ], - [ - [ - 12, - 6 - ], - 'CharstringType', - 'number', - 2 - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 13, - 'UniqueID', - 'number', - null - ], - [ - 5, - 'FontBBox', - 'array', - [ - 0, - 0, - 0, - 0 - ] - ], - [ - [ - 12, - 8 - ], - 'StrokeWidth', - 'number', - 0 - ], - [ - 14, - 'XUID', - 'array', - null - ], - [ - 15, - 'charset', - $b84fd3dd9d8eddb2$var$CFFCharset, - (0, $ef658f5c9a1488b2$export$c33b50336c234f16) - ], - [ - 16, - 'Encoding', - $b84fd3dd9d8eddb2$var$CFFEncoding, - (0, $bc0433d9b7e41f5f$export$dee0027060fa13bd) - ], - [ - 17, - 'CharStrings', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)), - null - ], - [ - 18, - 'Private', - new $b84fd3dd9d8eddb2$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 20 - ], - 'SyntheticBase', - 'number', - null - ], - [ - [ - 12, - 21 - ], - 'PostScript', - 'sid', - null - ], - [ - [ - 12, - 22 - ], - 'BaseFontName', - 'sid', - null - ], - [ - [ - 12, - 23 - ], - 'BaseFontBlend', - 'delta', - null - ], - // CID font specific - [ - [ - 12, - 31 - ], - 'CIDFontVersion', - 'number', - 0 - ], - [ - [ - 12, - 32 - ], - 'CIDFontRevision', - 'number', - 0 - ], - [ - [ - 12, - 33 - ], - 'CIDFontType', - 'number', - 0 - ], - [ - [ - 12, - 34 - ], - 'CIDCount', - 'number', - 8720 - ], - [ - [ - 12, - 35 - ], - 'UIDBase', - 'number', - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FontDict)), - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ] -]); -let $b84fd3dd9d8eddb2$var$VariationStore = new $52ZIf$Struct({ - length: $52ZIf$uint16, - itemVariationStore: (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241) -}); -let $b84fd3dd9d8eddb2$var$CFF2TopDict = new (0, $61aa549f16d58b9b$export$2e2bcd8739ae039)([ - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 17, - 'CharStrings', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)), - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)(new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$FontDict)), - null - ], - [ - 24, - 'vstore', - new (0, $0e34a43d05bde82c$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$VariationStore), - null - ], - [ - 25, - 'maxstack', - 'number', - 193 - ] -]); -let $b84fd3dd9d8eddb2$var$CFFTop = new $52ZIf$VersionedStruct($52ZIf$fixed16, { - 1: { - hdrSize: $52ZIf$uint8, - offSize: $52ZIf$uint8, - nameIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)(new $52ZIf$String('length')), - topDictIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)($b84fd3dd9d8eddb2$var$CFFTopDict), - stringIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039)(new $52ZIf$String('length')), - globalSubrIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039) - }, - 2: { - hdrSize: $52ZIf$uint8, - length: $52ZIf$uint16, - topDict: $b84fd3dd9d8eddb2$var$CFF2TopDict, - globalSubrIndex: new (0, $43e9821ef3717eec$export$2e2bcd8739ae039) - } -}); -var $b84fd3dd9d8eddb2$export$2e2bcd8739ae039 = $b84fd3dd9d8eddb2$var$CFFTop; - - - - -class $822ac0d589e4e237$var$CFFFont { - static decode(stream) { - return new $822ac0d589e4e237$var$CFFFont(stream); - } - decode() { - let start = this.stream.pos; - let top = (0, $b84fd3dd9d8eddb2$export$2e2bcd8739ae039).decode(this.stream); - for(let key in top){ - let val = top[key]; - this[key] = val; - } - if (this.version < 2) { - if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); - this.topDict = this.topDictIndex[0]; - } - this.isCIDFont = this.topDict.ROS != null; - return this; - } - string(sid) { - if (this.version >= 2) return null; - if (sid < (0, $229224aec43783c5$export$2e2bcd8739ae039).length) return (0, $229224aec43783c5$export$2e2bcd8739ae039)[sid]; - return this.stringIndex[sid - (0, $229224aec43783c5$export$2e2bcd8739ae039).length]; - } - get postscriptName() { - if (this.version < 2) return this.nameIndex[0]; - return null; - } - get fullName() { - return this.string(this.topDict.FullName); - } - get familyName() { - return this.string(this.topDict.FamilyName); - } - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) return null; - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) return null; - let { charset: charset } = this.topDict; - if (Array.isArray(charset)) return charset[gid]; - if (gid === 0) return '.notdef'; - gid -= 1; - switch(charset.version){ - case 0: - return this.string(charset.glyphs[gid]); - case 1: - case 2: - for(let i = 0; i < charset.ranges.length; i++){ - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); - } - break; - } - return null; - } - fdForGlyph(gid) { - if (!this.topDict.FDSelect) return null; - switch(this.topDict.FDSelect.version){ - case 0: - return this.topDict.FDSelect.fds[gid]; - case 3: - case 4: - let { ranges: ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - while(low <= high){ - let mid = low + high >> 1; - if (gid < ranges[mid].first) high = mid - 1; - else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; - else return ranges[mid].fd; - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; - return null; - } - if (this.version < 2) return this.topDict.Private; - return this.topDict.FDArray[0].Private; - } - constructor(stream){ - this.stream = stream; - this.decode(); - } -} -var $822ac0d589e4e237$export$2e2bcd8739ae039 = $822ac0d589e4e237$var$CFFFont; - - - -let $2bbf2bc1ce37cd8f$var$VerticalOrigin = new $52ZIf$Struct({ - glyphIndex: $52ZIf$uint16, - vertOriginY: $52ZIf$int16 -}); -var $2bbf2bc1ce37cd8f$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - majorVersion: $52ZIf$uint16, - minorVersion: $52ZIf$uint16, - defaultVertOriginY: $52ZIf$int16, - numVertOriginYMetrics: $52ZIf$uint16, - metrics: new $52ZIf$Array($2bbf2bc1ce37cd8f$var$VerticalOrigin, 'numVertOriginYMetrics') -}); - - - - -let $0941618dc22a946d$export$16b227cb15d716a0 = new $52ZIf$Struct({ - height: $52ZIf$uint8, - width: $52ZIf$uint8, - horiBearingX: $52ZIf$int8, - horiBearingY: $52ZIf$int8, - horiAdvance: $52ZIf$uint8, - vertBearingX: $52ZIf$int8, - vertBearingY: $52ZIf$int8, - vertAdvance: $52ZIf$uint8 -}); -let $0941618dc22a946d$export$62c53e75f69bfe12 = new $52ZIf$Struct({ - height: $52ZIf$uint8, - width: $52ZIf$uint8, - bearingX: $52ZIf$int8, - bearingY: $52ZIf$int8, - advance: $52ZIf$uint8 -}); -let $0941618dc22a946d$var$EBDTComponent = new $52ZIf$Struct({ - glyph: $52ZIf$uint16, - xOffset: $52ZIf$int8, - yOffset: $52ZIf$int8 -}); -class $0941618dc22a946d$var$ByteAligned { -} -class $0941618dc22a946d$var$BitAligned { -} -let $0941618dc22a946d$export$f1f5ddeb20d14f = new $52ZIf$VersionedStruct('version', { - 1: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - data: $0941618dc22a946d$var$ByteAligned - }, - 2: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - data: $0941618dc22a946d$var$BitAligned - }, - // format 3 is deprecated - // format 4 is not supported by Microsoft - 5: { - data: $0941618dc22a946d$var$BitAligned - }, - 6: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - data: $0941618dc22a946d$var$ByteAligned - }, - 7: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - data: $0941618dc22a946d$var$BitAligned - }, - 8: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - pad: new $52ZIf$Reserved($52ZIf$uint8), - numComponents: $52ZIf$uint16, - components: new $52ZIf$Array($0941618dc22a946d$var$EBDTComponent, 'numComponents') - }, - 9: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - pad: new $52ZIf$Reserved($52ZIf$uint8), - numComponents: $52ZIf$uint16, - components: new $52ZIf$Array($0941618dc22a946d$var$EBDTComponent, 'numComponents') - }, - 17: { - metrics: $0941618dc22a946d$export$62c53e75f69bfe12, - dataLen: $52ZIf$uint32, - data: new $52ZIf$Buffer('dataLen') - }, - 18: { - metrics: $0941618dc22a946d$export$16b227cb15d716a0, - dataLen: $52ZIf$uint32, - data: new $52ZIf$Buffer('dataLen') - }, - 19: { - dataLen: $52ZIf$uint32, - data: new $52ZIf$Buffer('dataLen') - } -}); - - -let $9911c4c7201c13de$var$SBitLineMetrics = new $52ZIf$Struct({ - ascender: $52ZIf$int8, - descender: $52ZIf$int8, - widthMax: $52ZIf$uint8, - caretSlopeNumerator: $52ZIf$int8, - caretSlopeDenominator: $52ZIf$int8, - caretOffset: $52ZIf$int8, - minOriginSB: $52ZIf$int8, - minAdvanceSB: $52ZIf$int8, - maxBeforeBL: $52ZIf$int8, - minAfterBL: $52ZIf$int8, - pad: new $52ZIf$Reserved($52ZIf$int8, 2) -}); -let $9911c4c7201c13de$var$CodeOffsetPair = new $52ZIf$Struct({ - glyphCode: $52ZIf$uint16, - offset: $52ZIf$uint16 -}); -let $9911c4c7201c13de$var$IndexSubtable = new $52ZIf$VersionedStruct($52ZIf$uint16, { - header: { - imageFormat: $52ZIf$uint16, - imageDataOffset: $52ZIf$uint32 - }, - 1: { - offsetArray: new $52ZIf$Array($52ZIf$uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 2: { - imageSize: $52ZIf$uint32, - bigMetrics: (0, $0941618dc22a946d$export$16b227cb15d716a0) - }, - 3: { - offsetArray: new $52ZIf$Array($52ZIf$uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 4: { - numGlyphs: $52ZIf$uint32, - glyphArray: new $52ZIf$Array($9911c4c7201c13de$var$CodeOffsetPair, (t)=>t.numGlyphs + 1) - }, - 5: { - imageSize: $52ZIf$uint32, - bigMetrics: (0, $0941618dc22a946d$export$16b227cb15d716a0), - numGlyphs: $52ZIf$uint32, - glyphCodeArray: new $52ZIf$Array($52ZIf$uint16, 'numGlyphs') - } -}); -let $9911c4c7201c13de$var$IndexSubtableArray = new $52ZIf$Struct({ - firstGlyphIndex: $52ZIf$uint16, - lastGlyphIndex: $52ZIf$uint16, - subtable: new $52ZIf$Pointer($52ZIf$uint32, $9911c4c7201c13de$var$IndexSubtable) -}); -let $9911c4c7201c13de$var$BitmapSizeTable = new $52ZIf$Struct({ - indexSubTableArray: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($9911c4c7201c13de$var$IndexSubtableArray, 1), { - type: 'parent' - }), - indexTablesSize: $52ZIf$uint32, - numberOfIndexSubTables: $52ZIf$uint32, - colorRef: $52ZIf$uint32, - hori: $9911c4c7201c13de$var$SBitLineMetrics, - vert: $9911c4c7201c13de$var$SBitLineMetrics, - startGlyphIndex: $52ZIf$uint16, - endGlyphIndex: $52ZIf$uint16, - ppemX: $52ZIf$uint8, - ppemY: $52ZIf$uint8, - bitDepth: $52ZIf$uint8, - flags: new $52ZIf$Bitfield($52ZIf$uint8, [ - 'horizontal', - 'vertical' - ]) -}); -var $9911c4c7201c13de$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint32, - numSizes: $52ZIf$uint32, - sizes: new $52ZIf$Array($9911c4c7201c13de$var$BitmapSizeTable, 'numSizes') -}); - - - -let $abb847051efd51b1$var$ImageTable = new $52ZIf$Struct({ - ppem: $52ZIf$uint16, - resolution: $52ZIf$uint16, - imageOffsets: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1) -}); -var // This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -$abb847051efd51b1$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - flags: new $52ZIf$Bitfield($52ZIf$uint16, [ - 'renderOutlines' - ]), - numImgTables: $52ZIf$uint32, - imageTables: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint32, $abb847051efd51b1$var$ImageTable), 'numImgTables') -}); - - - -let $eb629188f3dfefdd$var$LayerRecord = new $52ZIf$Struct({ - gid: $52ZIf$uint16, - paletteIndex: $52ZIf$uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for -// the special case noted below. Each palette entry is 16 bits. -// A palette index of 0xFFFF is a special case indicating that -// the text foreground color should be used. -let $eb629188f3dfefdd$var$BaseGlyphRecord = new $52ZIf$Struct({ - gid: $52ZIf$uint16, - // and is not rendered for color. - firstLayerIndex: $52ZIf$uint16, - // There will be numLayers consecutive entries for this base glyph. - numLayers: $52ZIf$uint16 -}); -var $eb629188f3dfefdd$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numBaseGlyphRecords: $52ZIf$uint16, - baseGlyphRecord: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($eb629188f3dfefdd$var$BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($eb629188f3dfefdd$var$LayerRecord, 'numLayerRecords'), { - lazy: true - }), - numLayerRecords: $52ZIf$uint16 -}); - - - -let $08734b8e7dc64587$var$ColorRecord = new $52ZIf$Struct({ - blue: $52ZIf$uint8, - green: $52ZIf$uint8, - red: $52ZIf$uint8, - alpha: $52ZIf$uint8 -}); -var $08734b8e7dc64587$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - header: { - numPaletteEntries: $52ZIf$uint16, - numPalettes: $52ZIf$uint16, - numColorRecords: $52ZIf$uint16, - colorRecords: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($08734b8e7dc64587$var$ColorRecord, 'numColorRecords')), - colorRecordIndices: new $52ZIf$Array($52ZIf$uint16, 'numPalettes') - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($52ZIf$uint32, 'numPalettes')), - offsetPaletteLabelArray: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($52ZIf$uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($52ZIf$uint16, 'numPaletteEntries')) - } -}); - - - - - -let $497cef411d884e34$var$BaseCoord = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coordinate: $52ZIf$int16 // X or Y value, in design units - }, - 2: { - coordinate: $52ZIf$int16, - referenceGlyph: $52ZIf$uint16, - baseCoordPoint: $52ZIf$uint16 // Index of contour point on the referenceGlyph - }, - 3: { - coordinate: $52ZIf$int16, - deviceTable: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) // Device table for X or Y value - } -}); -let $497cef411d884e34$var$BaseValues = new $52ZIf$Struct({ - defaultIndex: $52ZIf$uint16, - baseCoordCount: $52ZIf$uint16, - baseCoords: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseCoord), 'baseCoordCount') -}); -let $497cef411d884e34$var$FeatMinMaxRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - minCoord: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseCoord, { - type: 'parent' - }), - maxCoord: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseCoord, { - type: 'parent' - }) // May be NULL -}); -let $497cef411d884e34$var$MinMax = new $52ZIf$Struct({ - minCoord: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseCoord), - maxCoord: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseCoord), - featMinMaxCount: $52ZIf$uint16, - featMinMaxRecords: new $52ZIf$Array($497cef411d884e34$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); -let $497cef411d884e34$var$BaseLangSysRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - minMax: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$MinMax, { - type: 'parent' - }) -}); -let $497cef411d884e34$var$BaseScript = new $52ZIf$Struct({ - baseValues: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseValues), - defaultMinMax: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$MinMax), - baseLangSysCount: $52ZIf$uint16, - baseLangSysRecords: new $52ZIf$Array($497cef411d884e34$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); -let $497cef411d884e34$var$BaseScriptRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - script: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseScript, { - type: 'parent' - }) -}); -let $497cef411d884e34$var$BaseScriptList = new $52ZIf$Array($497cef411d884e34$var$BaseScriptRecord, $52ZIf$uint16); -// Array of 4-byte baseline identification tags-must be in alphabetical order -let $497cef411d884e34$var$BaseTagList = new $52ZIf$Array(new $52ZIf$String(4), $52ZIf$uint16); -let $497cef411d884e34$var$Axis = new $52ZIf$Struct({ - baseTagList: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseTagList), - baseScriptList: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$BaseScriptList) -}); -var $497cef411d884e34$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint32, { - header: { - horizAxis: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$Axis), - vertAxis: new $52ZIf$Pointer($52ZIf$uint16, $497cef411d884e34$var$Axis) // May be NULL - }, - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new $52ZIf$Pointer($52ZIf$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)) - } -}); - - - - - -let $cf5f33c63ef209e6$var$AttachPoint = new $52ZIf$Array($52ZIf$uint16, $52ZIf$uint16); -let $cf5f33c63ef209e6$var$AttachList = new $52ZIf$Struct({ - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - glyphCount: $52ZIf$uint16, - attachPoints: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$AttachPoint), 'glyphCount') -}); -let $cf5f33c63ef209e6$var$CaretValue = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coordinate: $52ZIf$int16 - }, - 2: { - caretValuePoint: $52ZIf$uint16 - }, - 3: { - coordinate: $52ZIf$int16, - deviceTable: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) - } -}); -let $cf5f33c63ef209e6$var$LigGlyph = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$CaretValue), $52ZIf$uint16); -let $cf5f33c63ef209e6$var$LigCaretList = new $52ZIf$Struct({ - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - ligGlyphCount: $52ZIf$uint16, - ligGlyphs: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$LigGlyph), 'ligGlyphCount') -}); -let $cf5f33c63ef209e6$var$MarkGlyphSetsDef = new $52ZIf$Struct({ - markSetTableFormat: $52ZIf$uint16, - markSetCount: $52ZIf$uint16, - coverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint32, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'markSetCount') -}); -var $cf5f33c63ef209e6$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint32, { - header: { - glyphClassDef: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - attachList: new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$AttachList), - ligCaretList: new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$LigCaretList), - markAttachClassDef: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)) - }, - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new $52ZIf$Pointer($52ZIf$uint16, $cf5f33c63ef209e6$var$MarkGlyphSetsDef), - itemVariationStore: new $52ZIf$Pointer($52ZIf$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)) - } -}); - - - - - -let $47e0e8ef515d9903$var$ValueFormat = new $52ZIf$Bitfield($52ZIf$uint16, [ - 'xPlacement', - 'yPlacement', - 'xAdvance', - 'yAdvance', - 'xPlaDevice', - 'yPlaDevice', - 'xAdvDevice', - 'yAdvDevice' -]); -let $47e0e8ef515d9903$var$types = { - xPlacement: $52ZIf$int16, - yPlacement: $52ZIf$int16, - xAdvance: $52ZIf$int16, - yAdvance: $52ZIf$int16, - xPlaDevice: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yPlaDevice: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - xAdvDevice: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yAdvDevice: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }) -}; -class $47e0e8ef515d9903$var$ValueRecord { - buildStruct(parent) { - let struct = parent; - while(!struct[this.key] && struct.parent)struct = struct.parent; - if (!struct[this.key]) return; - let fields = {}; - fields.rel = ()=>struct._startOffset; - let format = struct[this.key]; - for(let key in format)if (format[key]) fields[key] = $47e0e8ef515d9903$var$types[key]; - return new $52ZIf$Struct(fields); - } - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } - constructor(key = 'valueFormat'){ - this.key = key; - } -} -let $47e0e8ef515d9903$var$PairValueRecord = new $52ZIf$Struct({ - secondGlyph: $52ZIf$uint16, - value1: new $47e0e8ef515d9903$var$ValueRecord('valueFormat1'), - value2: new $47e0e8ef515d9903$var$ValueRecord('valueFormat2') -}); -let $47e0e8ef515d9903$var$PairSet = new $52ZIf$Array($47e0e8ef515d9903$var$PairValueRecord, $52ZIf$uint16); -let $47e0e8ef515d9903$var$Class2Record = new $52ZIf$Struct({ - value1: new $47e0e8ef515d9903$var$ValueRecord('valueFormat1'), - value2: new $47e0e8ef515d9903$var$ValueRecord('valueFormat2') -}); -let $47e0e8ef515d9903$var$Anchor = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - xCoordinate: $52ZIf$int16, - yCoordinate: $52ZIf$int16 - }, - 2: { - xCoordinate: $52ZIf$int16, - yCoordinate: $52ZIf$int16, - anchorPoint: $52ZIf$uint16 - }, - 3: { - xCoordinate: $52ZIf$int16, - yCoordinate: $52ZIf$int16, - xDeviceTable: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)), - yDeviceTable: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$8215d14a63d9fb10)) - } -}); -let $47e0e8ef515d9903$var$EntryExitRecord = new $52ZIf$Struct({ - entryAnchor: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }), - exitAnchor: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }) -}); -let $47e0e8ef515d9903$var$MarkRecord = new $52ZIf$Struct({ - class: $52ZIf$uint16, - markAnchor: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$Anchor, { - type: 'parent' - }) -}); -let $47e0e8ef515d9903$var$MarkArray = new $52ZIf$Array($47e0e8ef515d9903$var$MarkRecord, $52ZIf$uint16); -let $47e0e8ef515d9903$var$BaseRecord = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$Anchor), (t)=>t.parent.classCount); -let $47e0e8ef515d9903$var$BaseArray = new $52ZIf$Array($47e0e8ef515d9903$var$BaseRecord, $52ZIf$uint16); -let $47e0e8ef515d9903$var$ComponentRecord = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$Anchor), (t)=>t.parent.parent.classCount); -let $47e0e8ef515d9903$var$LigatureAttach = new $52ZIf$Array($47e0e8ef515d9903$var$ComponentRecord, $52ZIf$uint16); -let $47e0e8ef515d9903$var$LigatureArray = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$LigatureAttach), $52ZIf$uint16); -let $47e0e8ef515d9903$export$73a8cfb19cd43a0f = new $52ZIf$VersionedStruct('lookupType', { - 1: new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat: $47e0e8ef515d9903$var$ValueFormat, - value: new $47e0e8ef515d9903$var$ValueRecord() - }, - 2: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat: $47e0e8ef515d9903$var$ValueFormat, - valueCount: $52ZIf$uint16, - values: new $52ZIf$LazyArray(new $47e0e8ef515d9903$var$ValueRecord(), 'valueCount') - } - }), - 2: new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat1: $47e0e8ef515d9903$var$ValueFormat, - valueFormat2: $47e0e8ef515d9903$var$ValueFormat, - pairSetCount: $52ZIf$uint16, - pairSets: new $52ZIf$LazyArray(new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$PairSet), 'pairSetCount') - }, - 2: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - valueFormat1: $47e0e8ef515d9903$var$ValueFormat, - valueFormat2: $47e0e8ef515d9903$var$ValueFormat, - classDef1: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - classDef2: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$843d551fbbafef71)), - class1Count: $52ZIf$uint16, - class2Count: $52ZIf$uint16, - classRecords: new $52ZIf$LazyArray(new $52ZIf$LazyArray($47e0e8ef515d9903$var$Class2Record, 'class2Count'), 'class1Count') - } - }), - 3: { - format: $52ZIf$uint16, - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - entryExitCount: $52ZIf$uint16, - entryExitRecords: new $52ZIf$Array($47e0e8ef515d9903$var$EntryExitRecord, 'entryExitCount') - }, - 4: { - format: $52ZIf$uint16, - markCoverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - baseCoverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $52ZIf$uint16, - markArray: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$MarkArray), - baseArray: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$BaseArray) - }, - 5: { - format: $52ZIf$uint16, - markCoverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - ligatureCoverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $52ZIf$uint16, - markArray: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$MarkArray), - ligatureArray: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$LigatureArray) - }, - 6: { - format: $52ZIf$uint16, - mark1Coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - mark2Coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - classCount: $52ZIf$uint16, - mark1Array: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$MarkArray), - mark2Array: new $52ZIf$Pointer($52ZIf$uint16, $47e0e8ef515d9903$var$BaseArray) - }, - 7: (0, $7cbbe4e24ef3cb75$export$841858b892ce1f4c), - 8: (0, $7cbbe4e24ef3cb75$export$5e6d09e6861162f6), - 9: { - posFormat: $52ZIf$uint16, - lookupType: $52ZIf$uint16, - extension: new $52ZIf$Pointer($52ZIf$uint32, null) - } -}); -// Fix circular reference -$47e0e8ef515d9903$export$73a8cfb19cd43a0f.versions[9].extension.type = $47e0e8ef515d9903$export$73a8cfb19cd43a0f; -var $47e0e8ef515d9903$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint32, { - header: { - scriptList: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$3e15fc05ce864229)), - featureList: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$aa18130def4b6cb4)), - lookupList: new $52ZIf$Pointer($52ZIf$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)($47e0e8ef515d9903$export$73a8cfb19cd43a0f)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $52ZIf$Pointer($52ZIf$uint32, (0, $1a47b0c45c1c22fe$export$441b70b7971dd419)) - } -}); - - - - - -let $d3f442064af66e06$var$Sequence = new $52ZIf$Array($52ZIf$uint16, $52ZIf$uint16); -let $d3f442064af66e06$var$AlternateSet = $d3f442064af66e06$var$Sequence; -let $d3f442064af66e06$var$Ligature = new $52ZIf$Struct({ - glyph: $52ZIf$uint16, - compCount: $52ZIf$uint16, - components: new $52ZIf$Array($52ZIf$uint16, (t)=>t.compCount - 1) -}); -let $d3f442064af66e06$var$LigatureSet = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $d3f442064af66e06$var$Ligature), $52ZIf$uint16); -let $d3f442064af66e06$var$GSUBLookup = new $52ZIf$VersionedStruct('lookupType', { - 1: new $52ZIf$VersionedStruct($52ZIf$uint16, { - 1: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - deltaGlyphID: $52ZIf$int16 - }, - 2: { - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - glyphCount: $52ZIf$uint16, - substitute: new $52ZIf$LazyArray($52ZIf$uint16, 'glyphCount') - } - }), - 2: { - substFormat: $52ZIf$uint16, - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $52ZIf$uint16, - sequences: new $52ZIf$LazyArray(new $52ZIf$Pointer($52ZIf$uint16, $d3f442064af66e06$var$Sequence), 'count') - }, - 3: { - substFormat: $52ZIf$uint16, - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $52ZIf$uint16, - alternateSet: new $52ZIf$LazyArray(new $52ZIf$Pointer($52ZIf$uint16, $d3f442064af66e06$var$AlternateSet), 'count') - }, - 4: { - substFormat: $52ZIf$uint16, - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - count: $52ZIf$uint16, - ligatureSets: new $52ZIf$LazyArray(new $52ZIf$Pointer($52ZIf$uint16, $d3f442064af66e06$var$LigatureSet), 'count') - }, - 5: (0, $7cbbe4e24ef3cb75$export$841858b892ce1f4c), - 6: (0, $7cbbe4e24ef3cb75$export$5e6d09e6861162f6), - 7: { - substFormat: $52ZIf$uint16, - lookupType: $52ZIf$uint16, - extension: new $52ZIf$Pointer($52ZIf$uint32, null) - }, - 8: { - substFormat: $52ZIf$uint16, - coverage: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), - backtrackCoverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'backtrackGlyphCount'), - lookaheadGlyphCount: $52ZIf$uint16, - lookaheadCoverage: new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$17608c3f81a6111)), 'lookaheadGlyphCount'), - glyphCount: $52ZIf$uint16, - substitutes: new $52ZIf$Array($52ZIf$uint16, 'glyphCount') - } -}); -// Fix circular reference -$d3f442064af66e06$var$GSUBLookup.versions[7].extension.type = $d3f442064af66e06$var$GSUBLookup; -var $d3f442064af66e06$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint32, { - header: { - scriptList: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$3e15fc05ce864229)), - featureList: new $52ZIf$Pointer($52ZIf$uint16, (0, $7cbbe4e24ef3cb75$export$aa18130def4b6cb4)), - lookupList: new $52ZIf$Pointer($52ZIf$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)($d3f442064af66e06$var$GSUBLookup)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $52ZIf$Pointer($52ZIf$uint32, (0, $1a47b0c45c1c22fe$export$441b70b7971dd419)) - } -}); - - - - - -let $71cfb3c4767fbd0c$var$JstfGSUBModList = new $52ZIf$Array($52ZIf$uint16, $52ZIf$uint16); -let $71cfb3c4767fbd0c$var$JstfPriority = new $52ZIf$Struct({ - shrinkageEnableGSUB: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageDisableGSUB: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageEnableGPOS: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageDisableGPOS: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - shrinkageJstfMax: new $52ZIf$Pointer($52ZIf$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)((0, $47e0e8ef515d9903$export$73a8cfb19cd43a0f))), - extensionEnableGSUB: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionDisableGSUB: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionEnableGPOS: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionDisableGPOS: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfGSUBModList), - extensionJstfMax: new $52ZIf$Pointer($52ZIf$uint16, new (0, $7cbbe4e24ef3cb75$export$df0008c6ff2da22a)((0, $47e0e8ef515d9903$export$73a8cfb19cd43a0f))) -}); -let $71cfb3c4767fbd0c$var$JstfLangSys = new $52ZIf$Array(new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfPriority), $52ZIf$uint16); -let $71cfb3c4767fbd0c$var$JstfLangSysRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - jstfLangSys: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfLangSys) -}); -let $71cfb3c4767fbd0c$var$JstfScript = new $52ZIf$Struct({ - extenderGlyphs: new $52ZIf$Pointer($52ZIf$uint16, new $52ZIf$Array($52ZIf$uint16, $52ZIf$uint16)), - defaultLangSys: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfLangSys), - langSysCount: $52ZIf$uint16, - langSysRecords: new $52ZIf$Array($71cfb3c4767fbd0c$var$JstfLangSysRecord, 'langSysCount') -}); -let $71cfb3c4767fbd0c$var$JstfScriptRecord = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - script: new $52ZIf$Pointer($52ZIf$uint16, $71cfb3c4767fbd0c$var$JstfScript, { - type: 'parent' - }) -}); -var $71cfb3c4767fbd0c$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint32, - scriptCount: $52ZIf$uint16, - scriptList: new $52ZIf$Array($71cfb3c4767fbd0c$var$JstfScriptRecord, 'scriptCount') -}); - - - - -// TODO: add this to restructure -class $d059a6bd2d3b5b63$var$VariableSizeNumber { - decode(stream, parent) { - switch(this.size(0, parent)){ - case 1: - return stream.readUInt8(); - case 2: - return stream.readUInt16BE(); - case 3: - return stream.readUInt24BE(); - case 4: - return stream.readUInt32BE(); - } - } - size(val, parent) { - return (0, $52ZIf$resolveLength)(this._size, null, parent); - } - constructor(size){ - this._size = size; - } -} -let $d059a6bd2d3b5b63$var$MapDataEntry = new $52ZIf$Struct({ - entry: new $d059a6bd2d3b5b63$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1, - innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 -}); -let $d059a6bd2d3b5b63$var$DeltaSetIndexMap = new $52ZIf$Struct({ - entryFormat: $52ZIf$uint16, - mapCount: $52ZIf$uint16, - mapData: new $52ZIf$Array($d059a6bd2d3b5b63$var$MapDataEntry, 'mapCount') -}); -var $d059a6bd2d3b5b63$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - majorVersion: $52ZIf$uint16, - minorVersion: $52ZIf$uint16, - itemVariationStore: new $52ZIf$Pointer($52ZIf$uint32, (0, $1a47b0c45c1c22fe$export$fe1b122a2710f241)), - advanceWidthMapping: new $52ZIf$Pointer($52ZIf$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap), - LSBMapping: new $52ZIf$Pointer($52ZIf$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap), - RSBMapping: new $52ZIf$Pointer($52ZIf$uint32, $d059a6bd2d3b5b63$var$DeltaSetIndexMap) -}); - - - -let $dceeca3e1977ce30$var$Signature = new $52ZIf$Struct({ - format: $52ZIf$uint32, - length: $52ZIf$uint32, - offset: $52ZIf$uint32 -}); -let $dceeca3e1977ce30$var$SignatureBlock = new $52ZIf$Struct({ - reserved: new $52ZIf$Reserved($52ZIf$uint16, 2), - cbSignature: $52ZIf$uint32, - signature: new $52ZIf$Buffer('cbSignature') -}); -var $dceeca3e1977ce30$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - ulVersion: $52ZIf$uint32, - usNumSigs: $52ZIf$uint16, - usFlag: $52ZIf$uint16, - signatures: new $52ZIf$Array($dceeca3e1977ce30$var$Signature, 'usNumSigs'), - signatureBlocks: new $52ZIf$Array($dceeca3e1977ce30$var$SignatureBlock, 'usNumSigs') -}); - - - -let $8acd740a9435aad0$var$GaspRange = new $52ZIf$Struct({ - rangeMaxPPEM: $52ZIf$uint16, - rangeGaspBehavior: new $52ZIf$Bitfield($52ZIf$uint16, [ - 'grayscale', - 'gridfit', - 'symmetricSmoothing', - 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); -var $8acd740a9435aad0$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numRanges: $52ZIf$uint16, - gaspRanges: new $52ZIf$Array($8acd740a9435aad0$var$GaspRange, 'numRanges') // Sorted by ppem -}); - - - -let $b5f380243c34d6a0$var$DeviceRecord = new $52ZIf$Struct({ - pixelSize: $52ZIf$uint8, - maximumWidth: $52ZIf$uint8, - widths: new $52ZIf$Array($52ZIf$uint8, (t)=>t.parent.parent.maxp.numGlyphs) -}); -var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -$b5f380243c34d6a0$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numRecords: $52ZIf$int16, - sizeDeviceRecord: $52ZIf$int32, - records: new $52ZIf$Array($b5f380243c34d6a0$var$DeviceRecord, 'numRecords') -}); - - - -let $ca2df1256966e313$var$KernPair = new $52ZIf$Struct({ - left: $52ZIf$uint16, - right: $52ZIf$uint16, - value: $52ZIf$int16 -}); -let $ca2df1256966e313$var$ClassTable = new $52ZIf$Struct({ - firstGlyph: $52ZIf$uint16, - nGlyphs: $52ZIf$uint16, - offsets: new $52ZIf$Array($52ZIf$uint16, 'nGlyphs'), - max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) -}); -let $ca2df1256966e313$var$Kern2Array = new $52ZIf$Struct({ - off: (t)=>t._startOffset - t.parent.parent._startOffset, - len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2), - values: new $52ZIf$LazyArray($52ZIf$int16, 'len') -}); -let $ca2df1256966e313$var$KernSubtable = new $52ZIf$VersionedStruct('format', { - 0: { - nPairs: $52ZIf$uint16, - searchRange: $52ZIf$uint16, - entrySelector: $52ZIf$uint16, - rangeShift: $52ZIf$uint16, - pairs: new $52ZIf$Array($ca2df1256966e313$var$KernPair, 'nPairs') - }, - 2: { - rowWidth: $52ZIf$uint16, - leftTable: new $52ZIf$Pointer($52ZIf$uint16, $ca2df1256966e313$var$ClassTable, { - type: 'parent' - }), - rightTable: new $52ZIf$Pointer($52ZIf$uint16, $ca2df1256966e313$var$ClassTable, { - type: 'parent' - }), - array: new $52ZIf$Pointer($52ZIf$uint16, $ca2df1256966e313$var$Kern2Array, { - type: 'parent' - }) - }, - 3: { - glyphCount: $52ZIf$uint16, - kernValueCount: $52ZIf$uint8, - leftClassCount: $52ZIf$uint8, - rightClassCount: $52ZIf$uint8, - flags: $52ZIf$uint8, - kernValue: new $52ZIf$Array($52ZIf$int16, 'kernValueCount'), - leftClass: new $52ZIf$Array($52ZIf$uint8, 'glyphCount'), - rightClass: new $52ZIf$Array($52ZIf$uint8, 'glyphCount'), - kernIndex: new $52ZIf$Array($52ZIf$uint8, (t)=>t.leftClassCount * t.rightClassCount) - } -}); -let $ca2df1256966e313$var$KernTable = new $52ZIf$VersionedStruct('version', { - 0: { - subVersion: $52ZIf$uint16, - length: $52ZIf$uint16, - format: $52ZIf$uint8, - coverage: new $52ZIf$Bitfield($52ZIf$uint8, [ - 'horizontal', - 'minimum', - 'crossStream', - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: $ca2df1256966e313$var$KernSubtable, - padding: new $52ZIf$Reserved($52ZIf$uint8, (t)=>t.length - t._currentOffset) - }, - 1: { - length: $52ZIf$uint32, - coverage: new $52ZIf$Bitfield($52ZIf$uint8, [ - null, - null, - null, - null, - null, - 'variation', - 'crossStream', - 'vertical' // Set if table has vertical kerning values - ]), - format: $52ZIf$uint8, - tupleIndex: $52ZIf$uint16, - subtable: $ca2df1256966e313$var$KernSubtable, - padding: new $52ZIf$Reserved($52ZIf$uint8, (t)=>t.length - t._currentOffset) - } -}); -var $ca2df1256966e313$export$2e2bcd8739ae039 = new $52ZIf$VersionedStruct($52ZIf$uint16, { - 0: { - nTables: $52ZIf$uint16, - tables: new $52ZIf$Array($ca2df1256966e313$var$KernTable, 'nTables') - }, - 1: { - reserved: new $52ZIf$Reserved($52ZIf$uint16), - nTables: $52ZIf$uint32, - tables: new $52ZIf$Array($ca2df1256966e313$var$KernTable, 'nTables') - } -}); - - - -var // Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -$7a9f92b0c46ebe33$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numGlyphs: $52ZIf$uint16, - yPels: new $52ZIf$Array($52ZIf$uint8, 'numGlyphs') -}); - - - -var // PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -$2b2ccc419d152631$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - fontNumber: $52ZIf$uint32, - pitch: $52ZIf$uint16, - xHeight: $52ZIf$uint16, - style: $52ZIf$uint16, - typeFamily: $52ZIf$uint16, - capHeight: $52ZIf$uint16, - symbolSet: $52ZIf$uint16, - typeface: new $52ZIf$String(16), - characterComplement: new $52ZIf$String(8), - fileName: new $52ZIf$String(6), - strokeWeight: new $52ZIf$String(1), - widthType: new $52ZIf$String(1), - serifStyle: $52ZIf$uint8, - reserved: new $52ZIf$Reserved($52ZIf$uint8) -}); - - - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. -let $ca5b40b9bcda9c9b$var$Ratio = new $52ZIf$Struct({ - bCharSet: $52ZIf$uint8, - xRatio: $52ZIf$uint8, - yStartRatio: $52ZIf$uint8, - yEndRatio: $52ZIf$uint8 // Ending y-Ratio value -}); -let $ca5b40b9bcda9c9b$var$vTable = new $52ZIf$Struct({ - yPelHeight: $52ZIf$uint16, - yMax: $52ZIf$int16, - yMin: $52ZIf$int16 // Minimum value (in pels) for this yPelHeight -}); -let $ca5b40b9bcda9c9b$var$VdmxGroup = new $52ZIf$Struct({ - recs: $52ZIf$uint16, - startsz: $52ZIf$uint8, - endsz: $52ZIf$uint8, - entries: new $52ZIf$Array($ca5b40b9bcda9c9b$var$vTable, 'recs') // The VDMX records -}); -var $ca5b40b9bcda9c9b$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - numRecs: $52ZIf$uint16, - numRatios: $52ZIf$uint16, - ratioRanges: new $52ZIf$Array($ca5b40b9bcda9c9b$var$Ratio, 'numRatios'), - offsets: new $52ZIf$Array($52ZIf$uint16, 'numRatios'), - groups: new $52ZIf$Array($ca5b40b9bcda9c9b$var$VdmxGroup, 'numRecs') // The actual VDMX groupings -}); - - - -var // Vertical Header Table -$69530a3c40755af0$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - ascent: $52ZIf$int16, - descent: $52ZIf$int16, - lineGap: $52ZIf$int16, - advanceHeightMax: $52ZIf$int16, - minTopSideBearing: $52ZIf$int16, - minBottomSideBearing: $52ZIf$int16, - yMaxExtent: $52ZIf$int16, - caretSlopeRise: $52ZIf$int16, - caretSlopeRun: $52ZIf$int16, - caretOffset: $52ZIf$int16, - reserved: new $52ZIf$Reserved($52ZIf$int16, 4), - metricDataFormat: $52ZIf$int16, - numberOfMetrics: $52ZIf$uint16 // Number of advance heights in the Vertical Metrics table -}); - - - -let $344073dd270f0e62$var$VmtxEntry = new $52ZIf$Struct({ - advance: $52ZIf$uint16, - bearing: $52ZIf$int16 // The top sidebearing of the glyph -}); -var // Vertical Metrics Table -$344073dd270f0e62$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - metrics: new $52ZIf$LazyArray($344073dd270f0e62$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics), - bearings: new $52ZIf$LazyArray($52ZIf$int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); - - - -let $3793b781918cfced$var$shortFrac = new $52ZIf$Fixed(16, 'BE', 14); -let $3793b781918cfced$var$Correspondence = new $52ZIf$Struct({ - fromCoord: $3793b781918cfced$var$shortFrac, - toCoord: $3793b781918cfced$var$shortFrac -}); -let $3793b781918cfced$var$Segment = new $52ZIf$Struct({ - pairCount: $52ZIf$uint16, - correspondence: new $52ZIf$Array($3793b781918cfced$var$Correspondence, 'pairCount') -}); -var $3793b781918cfced$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - axisCount: $52ZIf$uint32, - segment: new $52ZIf$Array($3793b781918cfced$var$Segment, 'axisCount') -}); - - - - -class $6cb7dd5f47d82580$var$UnboundedArrayAccessor { - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - return this._items[index]; - } - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } - constructor(type, stream, parent){ - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } -} -class $6cb7dd5f47d82580$export$c5af1eebc882e39a extends $52ZIf$Array { - decode(stream, parent) { - return new $6cb7dd5f47d82580$var$UnboundedArrayAccessor(this.type, stream, parent); - } - constructor(type){ - super(type, 0); - } -} -let $6cb7dd5f47d82580$export$8351f8c2ae2f103c = function(ValueType = $52ZIf$uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - constructor(type){ - this.type = type; - } - } - ValueType = new Shadow(ValueType); - let BinarySearchHeader = new $52ZIf$Struct({ - unitSize: $52ZIf$uint16, - nUnits: $52ZIf$uint16, - searchRange: $52ZIf$uint16, - entrySelector: $52ZIf$uint16, - rangeShift: $52ZIf$uint16 - }); - let LookupSegmentSingle = new $52ZIf$Struct({ - lastGlyph: $52ZIf$uint16, - firstGlyph: $52ZIf$uint16, - value: ValueType - }); - let LookupSegmentArray = new $52ZIf$Struct({ - lastGlyph: $52ZIf$uint16, - firstGlyph: $52ZIf$uint16, - values: new $52ZIf$Pointer($52ZIf$uint16, new $52ZIf$Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1), { - type: 'parent' - }) - }); - let LookupSingle = new $52ZIf$Struct({ - glyph: $52ZIf$uint16, - value: ValueType - }); - return new $52ZIf$VersionedStruct($52ZIf$uint16, { - 0: { - values: new $6cb7dd5f47d82580$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new $52ZIf$Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new $52ZIf$Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new $52ZIf$Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: $52ZIf$uint16, - count: $52ZIf$uint16, - values: new $52ZIf$Array(ValueType, 'count') - } - }); -}; -function $6cb7dd5f47d82580$export$79f7d93d790934ba(entryData = {}, lookupType = $52ZIf$uint16) { - let entry = Object.assign({ - newState: $52ZIf$uint16, - flags: $52ZIf$uint16 - }, entryData); - let Entry = new $52ZIf$Struct(entry); - let StateArray = new $6cb7dd5f47d82580$export$c5af1eebc882e39a(new $52ZIf$Array($52ZIf$uint16, (t)=>t.nClasses)); - let StateHeader = new $52ZIf$Struct({ - nClasses: $52ZIf$uint32, - classTable: new $52ZIf$Pointer($52ZIf$uint32, new $6cb7dd5f47d82580$export$8351f8c2ae2f103c(lookupType)), - stateArray: new $52ZIf$Pointer($52ZIf$uint32, StateArray), - entryTable: new $52ZIf$Pointer($52ZIf$uint32, new $6cb7dd5f47d82580$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader; -} -function $6cb7dd5f47d82580$export$105027425199cc51(entryData = {}, lookupType = $52ZIf$uint16) { - let ClassLookupTable = new $52ZIf$Struct({ - version () { - return 8; - }, - firstGlyph: $52ZIf$uint16, - values: new $52ZIf$Array($52ZIf$uint8, $52ZIf$uint16) - }); - let entry = Object.assign({ - newStateOffset: $52ZIf$uint16, - // convert offset to stateArray index - newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: $52ZIf$uint16 - }, entryData); - let Entry = new $52ZIf$Struct(entry); - let StateArray = new $6cb7dd5f47d82580$export$c5af1eebc882e39a(new $52ZIf$Array($52ZIf$uint8, (t)=>t.nClasses)); - let StateHeader1 = new $52ZIf$Struct({ - nClasses: $52ZIf$uint16, - classTable: new $52ZIf$Pointer($52ZIf$uint16, ClassLookupTable), - stateArray: new $52ZIf$Pointer($52ZIf$uint16, StateArray), - entryTable: new $52ZIf$Pointer($52ZIf$uint16, new $6cb7dd5f47d82580$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader1; -} - - -let $6a3746e8c708f5a3$var$BslnSubtable = new $52ZIf$VersionedStruct('format', { - 0: { - deltas: new $52ZIf$Array($52ZIf$int16, 32) - }, - 1: { - deltas: new $52ZIf$Array($52ZIf$int16, 32), - mappingData: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($52ZIf$uint16) - }, - 2: { - standardGlyph: $52ZIf$uint16, - controlPoints: new $52ZIf$Array($52ZIf$uint16, 32) - }, - 3: { - standardGlyph: $52ZIf$uint16, - controlPoints: new $52ZIf$Array($52ZIf$uint16, 32), - mappingData: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($52ZIf$uint16) - } -}); -var $6a3746e8c708f5a3$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - format: $52ZIf$uint16, - defaultBaseline: $52ZIf$uint16, - subtable: $6a3746e8c708f5a3$var$BslnSubtable -}); - - - -let $d0c76fac617b308a$var$Setting = new $52ZIf$Struct({ - setting: $52ZIf$uint16, - nameIndex: $52ZIf$int16, - name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -let $d0c76fac617b308a$var$FeatureName = new $52ZIf$Struct({ - feature: $52ZIf$uint16, - nSettings: $52ZIf$uint16, - settingTable: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array($d0c76fac617b308a$var$Setting, 'nSettings'), { - type: 'parent' - }), - featureFlags: new $52ZIf$Bitfield($52ZIf$uint8, [ - null, - null, - null, - null, - null, - null, - 'hasDefault', - 'exclusive' - ]), - defaultSetting: $52ZIf$uint8, - nameIndex: $52ZIf$int16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -var $d0c76fac617b308a$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - featureNameCount: $52ZIf$uint16, - reserved1: new $52ZIf$Reserved($52ZIf$uint16), - reserved2: new $52ZIf$Reserved($52ZIf$uint32), - featureNames: new $52ZIf$Array($d0c76fac617b308a$var$FeatureName, 'featureNameCount') -}); - - - -let $e83fd065f00fcd01$var$Axis = new $52ZIf$Struct({ - axisTag: new $52ZIf$String(4), - minValue: $52ZIf$fixed32, - defaultValue: $52ZIf$fixed32, - maxValue: $52ZIf$fixed32, - flags: $52ZIf$uint16, - nameID: $52ZIf$uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] -}); -let $e83fd065f00fcd01$var$Instance = new $52ZIf$Struct({ - nameID: $52ZIf$uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID], - flags: $52ZIf$uint16, - coord: new $52ZIf$Array($52ZIf$fixed32, (t)=>t.parent.axisCount), - postscriptNameID: new $52ZIf$Optional($52ZIf$uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0) -}); -var $e83fd065f00fcd01$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - offsetToData: $52ZIf$uint16, - countSizePairs: $52ZIf$uint16, - axisCount: $52ZIf$uint16, - axisSize: $52ZIf$uint16, - instanceCount: $52ZIf$uint16, - instanceSize: $52ZIf$uint16, - axis: new $52ZIf$Array($e83fd065f00fcd01$var$Axis, 'axisCount'), - instance: new $52ZIf$Array($e83fd065f00fcd01$var$Instance, 'instanceCount') -}); - - - -let $dbe33c8d3a7f131c$var$shortFrac = new $52ZIf$Fixed(16, 'BE', 14); -class $dbe33c8d3a7f131c$var$Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; - } -} -let $dbe33c8d3a7f131c$var$gvar = new $52ZIf$Struct({ - version: $52ZIf$uint16, - reserved: new $52ZIf$Reserved($52ZIf$uint16), - axisCount: $52ZIf$uint16, - globalCoordCount: $52ZIf$uint16, - globalCoords: new $52ZIf$Pointer($52ZIf$uint32, new $52ZIf$Array(new $52ZIf$Array($dbe33c8d3a7f131c$var$shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: $52ZIf$uint16, - flags: $52ZIf$uint16, - offsetToData: $52ZIf$uint32, - offsets: new $52ZIf$Array(new $52ZIf$Pointer($dbe33c8d3a7f131c$var$Offset, 'void', { - relativeTo: (ctx)=>ctx.offsetToData, - allowNull: false - }), (t)=>t.glyphCount + 1) -}); -var $dbe33c8d3a7f131c$export$2e2bcd8739ae039 = $dbe33c8d3a7f131c$var$gvar; - - - - -let $05b01887df96c4ee$var$ClassTable = new $52ZIf$Struct({ - length: $52ZIf$uint16, - coverage: $52ZIf$uint16, - subFeatureFlags: $52ZIf$uint32, - stateTable: new (0, $6cb7dd5f47d82580$export$105027425199cc51) -}); -let $05b01887df96c4ee$var$WidthDeltaRecord = new $52ZIf$Struct({ - justClass: $52ZIf$uint32, - beforeGrowLimit: $52ZIf$fixed32, - beforeShrinkLimit: $52ZIf$fixed32, - afterGrowLimit: $52ZIf$fixed32, - afterShrinkLimit: $52ZIf$fixed32, - growFlags: $52ZIf$uint16, - shrinkFlags: $52ZIf$uint16 -}); -let $05b01887df96c4ee$var$WidthDeltaCluster = new $52ZIf$Array($05b01887df96c4ee$var$WidthDeltaRecord, $52ZIf$uint32); -let $05b01887df96c4ee$var$ActionData = new $52ZIf$VersionedStruct('actionType', { - 0: { - lowerLimit: $52ZIf$fixed32, - upperLimit: $52ZIf$fixed32, - order: $52ZIf$uint16, - glyphs: new $52ZIf$Array($52ZIf$uint16, $52ZIf$uint16) - }, - 1: { - addGlyph: $52ZIf$uint16 - }, - 2: { - substThreshold: $52ZIf$fixed32, - addGlyph: $52ZIf$uint16, - substGlyph: $52ZIf$uint16 - }, - 3: {}, - 4: { - variationAxis: $52ZIf$uint32, - minimumLimit: $52ZIf$fixed32, - noStretchValue: $52ZIf$fixed32, - maximumLimit: $52ZIf$fixed32 - }, - 5: { - flags: $52ZIf$uint16, - glyph: $52ZIf$uint16 - } -}); -let $05b01887df96c4ee$var$Action = new $52ZIf$Struct({ - actionClass: $52ZIf$uint16, - actionType: $52ZIf$uint16, - actionLength: $52ZIf$uint32, - actionData: $05b01887df96c4ee$var$ActionData, - padding: new $52ZIf$Reserved($52ZIf$uint8, (t)=>t.actionLength - t._currentOffset) -}); -let $05b01887df96c4ee$var$PostcompensationAction = new $52ZIf$Array($05b01887df96c4ee$var$Action, $52ZIf$uint32); -let $05b01887df96c4ee$var$PostCompensationTable = new $52ZIf$Struct({ - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)(new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$PostcompensationAction)) -}); -let $05b01887df96c4ee$var$JustificationTable = new $52ZIf$Struct({ - classTable: new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$ClassTable, { - type: 'parent' - }), - wdcOffset: $52ZIf$uint16, - postCompensationTable: new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$PostCompensationTable, { - type: 'parent' - }), - widthDeltaClusters: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)(new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$WidthDeltaCluster, { - type: 'parent', - relativeTo: (ctx)=>ctx.wdcOffset - })) -}); -var $05b01887df96c4ee$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint32, - format: $52ZIf$uint16, - horizontal: new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$JustificationTable), - vertical: new $52ZIf$Pointer($52ZIf$uint16, $05b01887df96c4ee$var$JustificationTable) -}); - - - - -let $03ee6ebd54db1053$var$LigatureData = { - action: $52ZIf$uint16 -}; -let $03ee6ebd54db1053$var$ContextualData = { - markIndex: $52ZIf$uint16, - currentIndex: $52ZIf$uint16 -}; -let $03ee6ebd54db1053$var$InsertionData = { - currentInsertIndex: $52ZIf$uint16, - markedInsertIndex: $52ZIf$uint16 -}; -let $03ee6ebd54db1053$var$SubstitutionTable = new $52ZIf$Struct({ - items: new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)(new $52ZIf$Pointer($52ZIf$uint32, new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c))) -}); -let $03ee6ebd54db1053$var$SubtableData = new $52ZIf$VersionedStruct('type', { - 0: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba) - }, - 1: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$ContextualData), - substitutionTable: new $52ZIf$Pointer($52ZIf$uint32, $03ee6ebd54db1053$var$SubstitutionTable) - }, - 2: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$LigatureData), - ligatureActions: new $52ZIf$Pointer($52ZIf$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($52ZIf$uint32)), - components: new $52ZIf$Pointer($52ZIf$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($52ZIf$uint16)), - ligatureList: new $52ZIf$Pointer($52ZIf$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($52ZIf$uint16)) - }, - 4: { - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c) - }, - 5: { - stateTable: new (0, $6cb7dd5f47d82580$export$79f7d93d790934ba)($03ee6ebd54db1053$var$InsertionData), - insertionActions: new $52ZIf$Pointer($52ZIf$uint32, new (0, $6cb7dd5f47d82580$export$c5af1eebc882e39a)($52ZIf$uint16)) - } -}); -let $03ee6ebd54db1053$var$Subtable = new $52ZIf$Struct({ - length: $52ZIf$uint32, - coverage: $52ZIf$uint24, - type: $52ZIf$uint8, - subFeatureFlags: $52ZIf$uint32, - table: $03ee6ebd54db1053$var$SubtableData, - padding: new $52ZIf$Reserved($52ZIf$uint8, (t)=>t.length - t._currentOffset) -}); -let $03ee6ebd54db1053$var$FeatureEntry = new $52ZIf$Struct({ - featureType: $52ZIf$uint16, - featureSetting: $52ZIf$uint16, - enableFlags: $52ZIf$uint32, - disableFlags: $52ZIf$uint32 -}); -let $03ee6ebd54db1053$var$MorxChain = new $52ZIf$Struct({ - defaultFlags: $52ZIf$uint32, - chainLength: $52ZIf$uint32, - nFeatureEntries: $52ZIf$uint32, - nSubtables: $52ZIf$uint32, - features: new $52ZIf$Array($03ee6ebd54db1053$var$FeatureEntry, 'nFeatureEntries'), - subtables: new $52ZIf$Array($03ee6ebd54db1053$var$Subtable, 'nSubtables') -}); -var $03ee6ebd54db1053$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$uint16, - unused: new $52ZIf$Reserved($52ZIf$uint16), - nChains: $52ZIf$uint32, - chains: new $52ZIf$Array($03ee6ebd54db1053$var$MorxChain, 'nChains') -}); - - - - -let $b7492a80b0d1a056$var$OpticalBounds = new $52ZIf$Struct({ - left: $52ZIf$int16, - top: $52ZIf$int16, - right: $52ZIf$int16, - bottom: $52ZIf$int16 -}); -var $b7492a80b0d1a056$export$2e2bcd8739ae039 = new $52ZIf$Struct({ - version: $52ZIf$fixed32, - format: $52ZIf$uint16, - lookupTable: new (0, $6cb7dd5f47d82580$export$8351f8c2ae2f103c)($b7492a80b0d1a056$var$OpticalBounds) -}); - - -let $c3395722bea751e2$var$tables = {}; -var $c3395722bea751e2$export$2e2bcd8739ae039 = $c3395722bea751e2$var$tables; -$c3395722bea751e2$var$tables.cmap = (0, $26a62205ad06574e$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.head = (0, $f2612a29f92ac062$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hhea = (0, $2c179dd593583073$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hmtx = (0, $bdc9060542264b85$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.maxp = (0, $dbf51cb3d3fe409d$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.name = (0, $2bcf221753ec8e32$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['OS/2'] = (0, $84b272aa31b70606$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.post = (0, $32d9e2eb9565d93c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.fpgm = (0, $5c0f37ca5ffb1850$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.loca = (0, $2b2b260902b1c57e$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.prep = (0, $7afb878c7bea4f66$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['cvt '] = (0, $5202bd9d9ad8eaac$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.glyf = (0, $6c92b6371bce8bd9$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['CFF '] = (0, $822ac0d589e4e237$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables['CFF2'] = (0, $822ac0d589e4e237$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.VORG = (0, $2bbf2bc1ce37cd8f$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.EBLC = (0, $9911c4c7201c13de$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.CBLC = $c3395722bea751e2$var$tables.EBLC; -$c3395722bea751e2$var$tables.sbix = (0, $abb847051efd51b1$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.COLR = (0, $eb629188f3dfefdd$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.CPAL = (0, $08734b8e7dc64587$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.BASE = (0, $497cef411d884e34$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GDEF = (0, $cf5f33c63ef209e6$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GPOS = (0, $47e0e8ef515d9903$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.GSUB = (0, $d3f442064af66e06$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.JSTF = (0, $71cfb3c4767fbd0c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.HVAR = (0, $d059a6bd2d3b5b63$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.DSIG = (0, $dceeca3e1977ce30$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.gasp = (0, $8acd740a9435aad0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.hdmx = (0, $b5f380243c34d6a0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.kern = (0, $ca2df1256966e313$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.LTSH = (0, $7a9f92b0c46ebe33$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.PCLT = (0, $2b2ccc419d152631$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.VDMX = (0, $ca5b40b9bcda9c9b$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.vhea = (0, $69530a3c40755af0$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.vmtx = (0, $344073dd270f0e62$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.avar = (0, $3793b781918cfced$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.bsln = (0, $6a3746e8c708f5a3$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.feat = (0, $d0c76fac617b308a$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.fvar = (0, $e83fd065f00fcd01$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.gvar = (0, $dbe33c8d3a7f131c$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.just = (0, $05b01887df96c4ee$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.morx = (0, $03ee6ebd54db1053$export$2e2bcd8739ae039); -$c3395722bea751e2$var$tables.opbd = (0, $b7492a80b0d1a056$export$2e2bcd8739ae039); - - -let $816c07a04b6dba87$var$TableEntry = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - checkSum: $52ZIf$uint32, - offset: new $52ZIf$Pointer($52ZIf$uint32, 'void', { - type: 'global' - }), - length: $52ZIf$uint32 -}); -let $816c07a04b6dba87$var$Directory = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - numTables: $52ZIf$uint16, - searchRange: $52ZIf$uint16, - entrySelector: $52ZIf$uint16, - rangeShift: $52ZIf$uint16, - tables: new $52ZIf$Array($816c07a04b6dba87$var$TableEntry, 'numTables') -}); -$816c07a04b6dba87$var$Directory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -$816c07a04b6dba87$var$Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for(let tag in this.tables){ - let table = this.tables[tag]; - if (table) tables.push({ - tag: tag, - checkSum: 0, - offset: new $52ZIf$VoidPointer((0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag], table), - length: (0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag].size(table) - }); - } - this.tables = tables; - } - this.tag = 'true'; - this.numTables = this.tables.length; - let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; -var $816c07a04b6dba87$export$2e2bcd8739ae039 = $816c07a04b6dba87$var$Directory; - - - - -function $12727730ddfc8bfe$export$2e0ae67339d5f1ac(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while(min <= max){ - let mid = min + max >> 1; - let res = cmp(arr[mid]); - if (res < 0) max = mid - 1; - else if (res > 0) min = mid + 1; - else return mid; - } - return -1; -} -function $12727730ddfc8bfe$export$d02631cccf789723(index, end) { - let range = []; - while(index < end)range.push(index++); - return range; -} -const $12727730ddfc8bfe$export$3d28c1996ced1f14 = new TextDecoder('ascii'); -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const $12727730ddfc8bfe$var$CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const $12727730ddfc8bfe$var$LOOKUP = new Uint8Array(256); -for(let i = 0; i < $12727730ddfc8bfe$var$CHARS.length; i++)$12727730ddfc8bfe$var$LOOKUP[$12727730ddfc8bfe$var$CHARS.charCodeAt(i)] = i; -function $12727730ddfc8bfe$export$94fdf11bafc8de6b(base64) { - let bufferLength = base64.length * 0.75; - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') bufferLength--; - } - let bytes = new Uint8Array(bufferLength); - let p = 0; - for(let i = 0, len = base64.length; i < len; i += 4){ - let encoded1 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i)]; - let encoded2 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = $12727730ddfc8bfe$var$LOOKUP[base64.charCodeAt(i + 3)]; - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - return bytes; -} - - - - -class $f08dd41ef10b694c$export$2e2bcd8739ae039 { - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ - if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; - } - return null; - } - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) codepoint = this.encoding.get(codepoint) || codepoint; - else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) return gid; - } - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return cmap.codeMap.get(codepoint) || 0; - case 4: - { - let min = 0; - let max = cmap.segCount - 1; - while(min <= max){ - let mid = min + max >> 1; - if (codepoint < cmap.startCode.get(mid)) max = mid - 1; - else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; - else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); - else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) gid += cmap.idDelta.get(mid); - } - return gid & 0xffff; - } - } - return 0; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - case 12: - case 13: - { - let min = 0; - let max = cmap.nGroups - 1; - while(min <= max){ - let mid = min + max >> 1; - let group = cmap.groups.get(mid); - if (codepoint < group.startCharCode) max = mid - 1; - else if (codepoint > group.endCharCode) min = mid + 1; - else { - if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); - else return group.glyphID; - } - } - return 0; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) return 0; - let selectors = this.uvs.varSelectors.toArray(); - let i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(selectors, (x)=>variationSelector - x.varSelector); - let sel = selectors[i]; - if (i !== -1 && sel.defaultUVS) i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0); - if (i !== -1 && sel.nonDefaultUVS) { - i = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue); - if (i !== -1) return sel.nonDefaultUVS[i].glyphID; - } - return 0; - } - getCharacterSet() { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return (0, $12727730ddfc8bfe$export$d02631cccf789723)(0, cmap.codeMap.length); - case 4: - { - let res = []; - let endCodes = cmap.endCode.toArray(); - for(let i = 0; i < endCodes.length; i++){ - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(start, tail)); - } - return res; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return (0, $12727730ddfc8bfe$export$d02631cccf789723)(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - case 12: - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - { - let res = []; - for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); - return res; - } - case 4: - { - let res = []; - for(let i = 0; i < cmap.segCount; i++){ - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - for(var c = start; c <= end; c++){ - let g = 0; - if (rangeOffset === 0) g = c + delta; - else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) g += delta; - } - if (g === gid) res.push(c); - } - } - return res; - } - case 12: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); - return res; - } - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - constructor(cmapTable){ - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [ - 3, - 10 - ], - [ - 0, - 6 - ], - [ - 0, - 4 - ], - // 16-bit subtables - [ - 3, - 1 - ], - [ - 0, - 3 - ], - [ - 0, - 2 - ], - [ - 0, - 1 - ], - [ - 0, - 0 - ] - ]); - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) for (let cmap of cmapTable.tables){ - let encoding = (0, $e449ad78d50845fe$export$badc544e0651b6b1)(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = (0, $e449ad78d50845fe$export$1dceb3c14ed68bee)(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - if (!this.cmap) throw new Error("Could not find a supported cmap table"); - this.uvs = this.findSubtable(cmapTable, [ - [ - 0, - 5 - ] - ]); - if (this.uvs && this.uvs.version !== 14) this.uvs = null; - } -} -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f08dd41ef10b694c$export$2e2bcd8739ae039.prototype, "getCharacterSet", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f08dd41ef10b694c$export$2e2bcd8739ae039.prototype, "codePointsForGlyph", null); - - - -class $0bba3a9db57637f3$export$2e2bcd8739ae039 { - process(glyphs, positions) { - for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - getKerning(left, right) { - let res = 0; - for (let table of this.kern.tables){ - if (table.coverage.crossStream) continue; - switch(table.version){ - case 0: - if (!table.coverage.horizontal) continue; - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) continue; - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - let val = 0; - let s = table.subtable; - switch(table.format){ - case 0: - let pairIdx = (0, $12727730ddfc8bfe$export$2e0ae67339d5f1ac)(s.pairs, function(pair) { - return left - pair.left || right - pair.right; - }); - if (pairIdx >= 0) val = s.pairs[pairIdx].value; - break; - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - else leftOffset = s.array.off; - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) return 0; - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) res = val; - else res += val; - } - return res; - } - constructor(font){ - this.kern = font.kern; - } -} - - - -class $0a4bdfeb6dfd6f5e$export$2e2bcd8739ae039 { - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for(let index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.isMark) clusterEnd = index; - else { - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - clusterStart = clusterEnd = index; - } - } - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - return positions; - } - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) // LTR. TODO: RTL support. - baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - // position each of the mark glyphs relative to the base glyph - for(let index = clusterStart + 1; index <= clusterEnd; index++){ - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - // x positioning - switch(combiningClass){ - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - default: - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - // y positioning - switch(combiningClass){ - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - return; - } - getCombiningClass(codePoint) { - let combiningClass = (0, $52ZIf$getCombiningClass)(codePoint); - // Thai / Lao need some per-character work - if ((codePoint & -256) === 0x0e00) { - if (combiningClass === 'Not_Reordered') switch(codePoint){ - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - case 0x0ebc: - return 'Below'; - } - else if (codePoint === 0x0e3a) return 'Below_Right'; - } - switch(combiningClass){ - // Hebrew - case 'CCC10': - case 'CCC11': - case 'CCC12': - case 'CCC13': - case 'CCC14': - case 'CCC15': - case 'CCC16': - case 'CCC17': - case 'CCC18': - case 'CCC20': - case 'CCC22': - return 'Below'; - case 'CCC23': - return 'Attached_Above'; - case 'CCC24': - return 'Above_Right'; - case 'CCC25': - case 'CCC19': - return 'Above_Left'; - case 'CCC26': - return 'Above'; - case 'CCC21': - break; - // Arabic and Syriac - case 'CCC27': - case 'CCC28': - case 'CCC30': - case 'CCC31': - case 'CCC33': - case 'CCC34': - case 'CCC35': - case 'CCC36': - return 'Above'; - case 'CCC29': - case 'CCC32': - return 'Below'; - // Thai - case 'CCC103': - return 'Below_Right'; - case 'CCC107': - return 'Above_Right'; - // Lao - case 'CCC118': - return 'Below'; - case 'CCC122': - return 'Above'; - // Tibetan - case 'CCC129': - case 'CCC132': - return 'Below'; - case 'CCC130': - return 'Above'; - } - return combiningClass; - } - constructor(font){ - this.font = font; - } -} - - -/** - * Represents a glyph bounding box - */ class $f34600ab9d7f70d8$export$2e2bcd8739ae039 { - /** - * The width of the bounding box - * @type {number} - */ get width() { - return this.maxX - this.minX; - } - /** - * The height of the bounding box - * @type {number} - */ get height() { - return this.maxY - this.minY; - } - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) this.minX = x; - if (x > this.maxX) this.maxX = x; - } - if (Math.abs(y) !== Infinity) { - if (y < this.minY) this.minY = y; - if (y > this.maxY) this.maxY = y; - } - } - copy() { - return new $f34600ab9d7f70d8$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); - } - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ - /** - * The minimum X position in the bounding box - * @type {number} - */ this.minX = minX; - /** - * The minimum Y position in the bounding box - * @type {number} - */ this.minY = minY; - /** - * The maxmimum X position in the bounding box - * @type {number} - */ this.maxX = maxX; - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ this.maxY = maxY; - } -} - - - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const $130d1a642ebcd2b7$var$UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: [ - 'bng2', - 'beng' - ], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: [ - 'dev2', - 'deva' - ], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: [ - 'gjr2', - 'gujr' - ], - Gurmukhi: [ - 'gur2', - 'guru' - ], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: [ - 'knd2', - 'knda' - ], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: [ - 'mlm2', - 'mlym' - ], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: [ - 'mym2', - 'mymr' - ], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: [ - 'ory2', - 'orya' - ], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: [ - 'tml2', - 'taml' - ], - Tai_Viet: 'tavt', - Telugu: [ - 'tel2', - 'telu' - ], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; -const $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS = {}; -for(let script in $130d1a642ebcd2b7$var$UNICODE_SCRIPTS){ - let tag = $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) for (let t of tag)$130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[t] = script; - else $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[tag] = script; -} -function $130d1a642ebcd2b7$export$b32f0b5f69d65e51(script) { - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; -} -function $130d1a642ebcd2b7$export$ce50e82f12a827a4(tag) { - return $130d1a642ebcd2b7$var$OPENTYPE_SCRIPTS[tag]; -} -function $130d1a642ebcd2b7$export$e5cb25e204fb8450(string) { - let len = string.length; - let idx = 0; - while(idx < len){ - let code = string.charCodeAt(idx++); - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - let script = (0, $52ZIf$getScript)(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - } - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS.Unknown; -} -function $130d1a642ebcd2b7$export$16fab0757cfc223d(codePoints) { - for(let i = 0; i < codePoints.length; i++){ - let codePoint = codePoints[i]; - let script = (0, $52ZIf$getScript)(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS[script]; - } - return $130d1a642ebcd2b7$var$UNICODE_SCRIPTS.Unknown; -} -// The scripts in this map are written from right to left -const $130d1a642ebcd2b7$var$RTL = { - arab: true, - hebr: true, - syrc: true, - thaa: true, - cprt: true, - khar: true, - phnx: true, - 'nko ': true, - lydi: true, - avst: true, - armi: true, - phli: true, - prti: true, - sarb: true, - orkh: true, - samr: true, - mand: true, - merc: true, - mero: true, - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, - mend: true, - nbat: true, - narb: true, - palm: true, - phlp: true // Psalter Pahlavi -}; -function $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script) { - if ($130d1a642ebcd2b7$var$RTL[script]) return 'rtl'; - return 'ltr'; -} - - -class $be07b3e97a42687a$export$2e2bcd8739ae039 { - /** - * The total advance width of the run. - * @type {number} - */ get advanceWidth() { - let width = 0; - for (let position of this.positions)width += position.xAdvance; - return width; - } - /** - * The total advance height of the run. - * @type {number} - */ get advanceHeight() { - let height = 0; - for (let position of this.positions)height += position.yAdvance; - return height; - } - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ get bbox() { - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - let x = 0; - let y = 0; - for(let index = 0; index < this.glyphs.length; index++){ - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - x += p.xAdvance; - y += p.yAdvance; - } - return bbox; - } - constructor(glyphs, features, script, language, direction){ - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ this.glyphs = glyphs; - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ this.positions = null; - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ this.script = script; - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ this.language = language || null; - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ this.direction = direction || $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script); - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ this.features = {}; - // Convert features to an object - if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; - else if (typeof features === 'object') this.features = features; - } -} - - -/** - * Represents positioning information for a glyph in a GlyphRun. - */ class $1ac75d9a55b67f01$export$2e2bcd8739ae039 { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ this.xAdvance = xAdvance; - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ this.yAdvance = yAdvance; - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ this.xOffset = xOffset; - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ this.yOffset = yOffset; - } -} - - - -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const $3b6302b64eccc32c$var$features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; -const $3b6302b64eccc32c$var$feature = (name, selector)=>[ - $3b6302b64eccc32c$var$features[name].code, - $3b6302b64eccc32c$var$features[name][selector] - ]; -const $3b6302b64eccc32c$var$OTMapping = { - rlig: $3b6302b64eccc32c$var$feature('ligatures', 'requiredLigatures'), - clig: $3b6302b64eccc32c$var$feature('ligatures', 'contextualLigatures'), - dlig: $3b6302b64eccc32c$var$feature('ligatures', 'rareLigatures'), - hlig: $3b6302b64eccc32c$var$feature('ligatures', 'historicalLigatures'), - liga: $3b6302b64eccc32c$var$feature('ligatures', 'commonLigatures'), - hist: $3b6302b64eccc32c$var$feature('ligatures', 'historicalLigatures'), - smcp: $3b6302b64eccc32c$var$feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: $3b6302b64eccc32c$var$feature('lowerCase', 'lowerCasePetiteCaps'), - frac: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - dnom: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - numr: $3b6302b64eccc32c$var$feature('fractions', 'diagonalFractions'), - afrc: $3b6302b64eccc32c$var$feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - case: $3b6302b64eccc32c$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), - ccmp: $3b6302b64eccc32c$var$feature('unicodeDecomposition', 'canonicalComposition'), - cpct: $3b6302b64eccc32c$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - valt: $3b6302b64eccc32c$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: $3b6302b64eccc32c$var$feature('contextualAlternates', 'swashAlternates'), - cswh: $3b6302b64eccc32c$var$feature('contextualAlternates', 'contextualSwashAlternates'), - curs: $3b6302b64eccc32c$var$feature('cursiveConnection', 'cursive'), - c2pc: $3b6302b64eccc32c$var$feature('upperCase', 'upperCasePetiteCaps'), - c2sc: $3b6302b64eccc32c$var$feature('upperCase', 'upperCaseSmallCaps'), - init: $3b6302b64eccc32c$var$feature('smartSwash', 'wordInitialSwashes'), - fin2: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - medi: $3b6302b64eccc32c$var$feature('smartSwash', 'nonFinalSwashes'), - med2: $3b6302b64eccc32c$var$feature('smartSwash', 'nonFinalSwashes'), - fin3: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - fina: $3b6302b64eccc32c$var$feature('smartSwash', 'wordFinalSwashes'), - pkna: $3b6302b64eccc32c$var$feature('kanaSpacing', 'proportionalKana'), - half: $3b6302b64eccc32c$var$feature('textSpacing', 'halfWidthText'), - halt: $3b6302b64eccc32c$var$feature('textSpacing', 'altHalfWidthText'), - hkna: $3b6302b64eccc32c$var$feature('alternateKana', 'alternateHorizKana'), - vkna: $3b6302b64eccc32c$var$feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - ital: $3b6302b64eccc32c$var$feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: $3b6302b64eccc32c$var$feature('numberCase', 'upperCaseNumbers'), - onum: $3b6302b64eccc32c$var$feature('numberCase', 'lowerCaseNumbers'), - mgrk: $3b6302b64eccc32c$var$feature('mathematicalExtras', 'mathematicalGreek'), - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - calt: $3b6302b64eccc32c$var$feature('contextualAlternates', 'contextualAlternates'), - vrt2: $3b6302b64eccc32c$var$feature('verticalSubstitution', 'substituteVerticalForms'), - vert: $3b6302b64eccc32c$var$feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: $3b6302b64eccc32c$var$feature('numberSpacing', 'monospacedNumbers'), - pnum: $3b6302b64eccc32c$var$feature('numberSpacing', 'proportionalNumbers'), - sups: $3b6302b64eccc32c$var$feature('verticalPosition', 'superiors'), - subs: $3b6302b64eccc32c$var$feature('verticalPosition', 'inferiors'), - ordn: $3b6302b64eccc32c$var$feature('verticalPosition', 'ordinals'), - pwid: $3b6302b64eccc32c$var$feature('textSpacing', 'proportionalText'), - hwid: $3b6302b64eccc32c$var$feature('textSpacing', 'halfWidthText'), - qwid: $3b6302b64eccc32c$var$feature('textSpacing', 'quarterWidthText'), - twid: $3b6302b64eccc32c$var$feature('textSpacing', 'thirdWidthText'), - fwid: $3b6302b64eccc32c$var$feature('textSpacing', 'proportionalText'), - palt: $3b6302b64eccc32c$var$feature('textSpacing', 'altProportionalText'), - trad: $3b6302b64eccc32c$var$feature('characterShape', 'traditionalCharacters'), - smpl: $3b6302b64eccc32c$var$feature('characterShape', 'simplifiedCharacters'), - jp78: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1978Characters'), - jp83: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1983Characters'), - jp90: $3b6302b64eccc32c$var$feature('characterShape', 'JIS1990Characters'), - jp04: $3b6302b64eccc32c$var$feature('characterShape', 'JIS2004Characters'), - expt: $3b6302b64eccc32c$var$feature('characterShape', 'expertCharacters'), - hojo: $3b6302b64eccc32c$var$feature('characterShape', 'hojoCharacters'), - nlck: $3b6302b64eccc32c$var$feature('characterShape', 'NLCCharacters'), - tnam: $3b6302b64eccc32c$var$feature('characterShape', 'traditionalNamesCharacters'), - ruby: $3b6302b64eccc32c$var$feature('rubyKana', 'rubyKana'), - titl: $3b6302b64eccc32c$var$feature('styleOptions', 'titlingCaps'), - zero: $3b6302b64eccc32c$var$feature('typographicExtras', 'slashedZero'), - ss01: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: $3b6302b64eccc32c$var$feature('stylisticAlternatives', 'stylisticAltTwenty') -}; -// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose -// Add cv01-cv99 features -for(let i = 1; i <= 99; i++)$3b6302b64eccc32c$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ - $3b6302b64eccc32c$var$features.characterAlternatives.code, - i -]; -// create inverse mapping -let $3b6302b64eccc32c$var$AATMapping = {}; -for(let ot in $3b6302b64eccc32c$var$OTMapping){ - let aat = $3b6302b64eccc32c$var$OTMapping[ot]; - if ($3b6302b64eccc32c$var$AATMapping[aat[0]] == null) $3b6302b64eccc32c$var$AATMapping[aat[0]] = {}; - $3b6302b64eccc32c$var$AATMapping[aat[0]][aat[1]] = ot; -} -function $3b6302b64eccc32c$export$b813f7d2a1677c16(features) { - let res = {}; - for(let k in features){ - let r; - if (r = $3b6302b64eccc32c$var$OTMapping[k]) { - if (res[r[0]] == null) res[r[0]] = {}; - res[r[0]][r[1]] = features[k]; - } - } - return res; -} -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function $3b6302b64eccc32c$var$mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) var typeCode = $3b6302b64eccc32c$var$features[type] && $3b6302b64eccc32c$var$features[type].code; - else var typeCode = type; - if (isNaN(setting)) var settingCode = $3b6302b64eccc32c$var$features[type] && $3b6302b64eccc32c$var$features[type][setting]; - else var settingCode = setting; - return [ - typeCode, - settingCode - ]; -} -function $3b6302b64eccc32c$export$bd6df347a4f391c4(features) { - let res = {}; - if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ - let r; - let f = $3b6302b64eccc32c$var$mapFeatureStrings(features[k]); - if (r = $3b6302b64eccc32c$var$AATMapping[f[0]] && $3b6302b64eccc32c$var$AATMapping[f[0]][f[1]]) res[r] = true; - } - else if (typeof features === 'object') for(let type in features){ - let feature = features[type]; - for(let setting in feature){ - let r; - let f = $3b6302b64eccc32c$var$mapFeatureStrings([ - type, - setting - ]); - if (feature[setting] && (r = $3b6302b64eccc32c$var$AATMapping[f[0]] && $3b6302b64eccc32c$var$AATMapping[f[0]][f[1]])) res[r] = true; - } - } - return Object.keys(res); -} - - - - - - - -class $ff5ce077dae0f144$export$2e2bcd8739ae039 { - lookup(glyph) { - switch(this.table.version){ - case 0: - return this.table.values.getItem(glyph); - case 2: - case 4: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.firstGlyph === 0xffff) return null; - if (glyph < seg.firstGlyph) max = mid - 1; - else if (glyph > seg.lastGlyph) min = mid + 1; - else { - if (this.table.version === 2) return seg.value; - else return seg.values[glyph - seg.firstGlyph]; - } - } - return null; - } - case 6: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.glyph === 0xffff) return null; - if (glyph < seg.glyph) max = mid - 1; - else if (glyph > seg.glyph) min = mid + 1; - else return seg.value; - } - return null; - } - case 8: - return this.table.values[glyph - this.table.firstGlyph]; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - glyphsForValue(classValue) { - let res = []; - switch(this.table.version){ - case 2: - case 4: - for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...(0, $12727730ddfc8bfe$export$d02631cccf789723)(segment.firstGlyph, segment.lastGlyph + 1)); - else { - for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); - } - break; - case 6: - for (let segment of this.table.segments)if (segment.value === classValue) res.push(segment.glyph); - break; - case 8: - for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); - break; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - return res; - } - constructor(table){ - this.table = table; - } -} -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $ff5ce077dae0f144$export$2e2bcd8739ae039.prototype, "glyphsForValue", null); - - -const $50c7aac9316f2948$var$START_OF_TEXT_STATE = 0; -const $50c7aac9316f2948$var$START_OF_LINE_STATE = 1; -const $50c7aac9316f2948$var$END_OF_TEXT_CLASS = 0; -const $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS = 1; -const $50c7aac9316f2948$var$DELETED_GLYPH_CLASS = 2; -const $50c7aac9316f2948$var$END_OF_LINE_CLASS = 3; -const $50c7aac9316f2948$var$DONT_ADVANCE = 0x4000; -class $50c7aac9316f2948$export$2e2bcd8739ae039 { - process(glyphs, reverse, processEntry) { - let currentState = $50c7aac9316f2948$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ - let glyph = null; - let classCode = $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - if (index === glyphs.length || index === -1) classCode = $50c7aac9316f2948$var$END_OF_TEXT_CLASS; - else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) classCode = $50c7aac9316f2948$var$DELETED_GLYPH_CLASS; - else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) classCode = $50c7aac9316f2948$var$OUT_OF_BOUNDS_CLASS; - } - } - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - if (classCode !== $50c7aac9316f2948$var$END_OF_TEXT_CLASS && classCode !== $50c7aac9316f2948$var$DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & $50c7aac9316f2948$var$DONT_ADVANCE); - } - currentState = entry.newState; - if (shouldAdvance) index += dir; - } - return glyphs; - } - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) return; - visited.add(state); - let { nClasses: nClasses, stateArray: stateArray, entryTable: entryTable } = this.stateTable; - let row = stateArray.getItem(state); - // Skip predefined classes - for(let classCode = 4; classCode < nClasses; classCode++){ - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)){ - if (opts.enter) opts.enter(glyph, entry); - if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); - if (opts.exit) opts.exit(glyph, entry); - } - } - } - constructor(stateTable){ - this.stateTable = stateTable; - this.lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(stateTable.classTable); - } -} - - - - -// indic replacement flags -const $55f71433a605c87d$var$MARK_FIRST = 0x8000; -const $55f71433a605c87d$var$MARK_LAST = 0x2000; -const $55f71433a605c87d$var$VERB = 0x000F; -// contextual substitution and glyph insertion flag -const $55f71433a605c87d$var$SET_MARK = 0x8000; -// ligature entry flags -const $55f71433a605c87d$var$SET_COMPONENT = 0x8000; -const $55f71433a605c87d$var$PERFORM_ACTION = 0x2000; -// ligature action masks -const $55f71433a605c87d$var$LAST_MASK = 0x80000000; -const $55f71433a605c87d$var$STORE_MASK = 0x40000000; -const $55f71433a605c87d$var$OFFSET_MASK = 0x3FFFFFFF; -const $55f71433a605c87d$var$VERTICAL_ONLY = 0x800000; -const $55f71433a605c87d$var$REVERSE_DIRECTION = 0x400000; -const $55f71433a605c87d$var$HORIZONTAL_AND_VERTICAL = 0x200000; -// glyph insertion flags -const $55f71433a605c87d$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; -const $55f71433a605c87d$var$MARKED_IS_KASHIDA_LIKE = 0x1000; -const $55f71433a605c87d$var$CURRENT_INSERT_BEFORE = 0x0800; -const $55f71433a605c87d$var$MARKED_INSERT_BEFORE = 0x0400; -const $55f71433a605c87d$var$CURRENT_INSERT_COUNT = 0x03E0; -const $55f71433a605c87d$var$MARKED_INSERT_COUNT = 0x001F; -class $55f71433a605c87d$export$2e2bcd8739ae039 { - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - // enable/disable the requested features - for (let feature of chain.features){ - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); - } - // remove deleted glyphs - let index = glyphs.length - 1; - while(index >= 0){ - if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); - index--; - } - return glyphs; - } - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let reverse = !!(this.subtable.coverage & $55f71433a605c87d$var$REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - getStateMachine(subtable) { - return new (0, $50c7aac9316f2948$export$2e2bcd8739ae039)(subtable.table.stateTable); - } - getProcessor() { - switch(this.subtable.type){ - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - processIndicRearragement(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$MARK_FIRST) this.firstGlyph = index; - if (entry.flags & $55f71433a605c87d$var$MARK_LAST) this.lastGlyph = index; - $55f71433a605c87d$var$reorderGlyphs(this.glyphs, entry.flags & $55f71433a605c87d$var$VERB, this.firstGlyph, this.lastGlyph); - } - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.flags & $55f71433a605c87d$var$SET_MARK) this.markedGlyph = index; - } - processLigature(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$SET_COMPONENT) this.ligatureStack.push(index); - if (entry.flags & $55f71433a605c87d$var$PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - while(!last){ - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - let action = actions.getItem(actionIndex++); - last = !!(action & $55f71433a605c87d$var$LAST_MASK); - let store = !!(action & $55f71433a605c87d$var$STORE_MASK); - let offset = (action & $55f71433a605c87d$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - let component = components.getItem(offset); - ligatureIndex += component; - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new (0, $ff5ce077dae0f144$export$2e2bcd8739ae039)(subtable.table.lookupTable); - for(index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while(count--){ - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - if (!isBefore) glyphIndex++; - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & $55f71433a605c87d$var$SET_MARK) this.markedIndex = index; - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & $55f71433a605c87d$var$MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $55f71433a605c87d$var$MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & $55f71433a605c87d$var$CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $55f71433a605c87d$var$CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ - feature.featureType, - feature.featureSetting - ]); - return features; - } - generateInputs(gid) { - if (!this.inputCache) this.generateInputCache(); - return this.inputCache[gid] || []; - } - generateInputCache() { - this.inputCache = {}; - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); - } - } - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) return; - let reverse = !!(subtable.coverage & $55f71433a605c87d$var$REVERSE_DIRECTION); - if (reverse) throw new Error('Reverse subtable, not supported.'); - this.subtable = subtable; - this.ligatureStack = []; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let input = []; - let stack = []; - this.glyphs = []; - stateMachine.traverse({ - enter: (glyph, entry)=>{ - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - if (count === 1) { - let result = input.map((g)=>g.id); - let cache = this.inputCache[found]; - if (cache) cache.push(result); - else this.inputCache[found] = [ - result - ]; - } - }, - exit: ()=>{ - ({ glyphs: this.glyphs, ligatureStack: this.ligatureStack } = stack.pop()); - input.pop(); - } - }); - } - constructor(font){ - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } -} -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $55f71433a605c87d$export$2e2bcd8739ae039.prototype, "getStateMachine", null); -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function $55f71433a605c87d$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) end.reverse(); - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) start.reverse(); - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} -function $55f71433a605c87d$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch(verb){ - case 0: - return glyphs; - case 1: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 0 - ]); - case 2: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 1 - ]); - case 3: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 1 - ]); - case 4: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ]); - case 5: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ], true, false); - case 6: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ]); - case 7: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ], false, true); - case 8: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ]); - case 9: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ], false, true); - case 10: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ]); - case 11: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ], true, false); - case 12: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ]); - case 13: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, false); - case 14: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], false, true); - case 15: - return $55f71433a605c87d$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, true); - default: - throw new Error(`Unknown verb: ${verb}`); - } -} - - -class $ba6dd74203be8728$export$2e2bcd8739ae039 { - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); - this.morxProcessor.process(glyphRun.glyphs, $3b6302b64eccc32c$export$b813f7d2a1677c16(glyphRun.features)); - } - getAvailableFeatures(script, language) { - return $3b6302b64eccc32c$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); - } - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); - return result; - } - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - for (let codePoint of codePoints){ - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); - else strings.add(s); - } - } - constructor(font){ - this.font = font; - this.morxProcessor = new (0, $55f71433a605c87d$export$2e2bcd8739ae039)(font); - this.fallbackPosition = false; - } -} - - - -class $94d7a73bd2edfc9a$export$2e2bcd8739ae039 { - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features)if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - if (global) this.globalFeatures[feature] = true; - } - } - /** - * Add features to the last stage - */ add(arg, global = true) { - if (this.stages.length === 0) this.stages.push([]); - if (typeof arg === 'string') arg = [ - arg - ]; - if (Array.isArray(arg)) this._addFeatures(arg, global); - else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else throw new Error("Unsupported argument to ShapingPlan#add"); - } - /** - * Add a new stage - */ addStage(arg, global) { - if (typeof arg === 'function') this.stages.push(arg, []); - else { - this.stages.push([]); - this.add(arg, global); - } - } - setFeatureOverrides(features) { - if (Array.isArray(features)) this.add(features); - else if (typeof features === 'object') for(let tag in features){ - if (features[tag]) this.add(tag); - else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - /** - * Assigns the global features to the given glyphs - */ assignGlobalFeatures(glyphs) { - for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; - } - /** - * Executes the planned stages using the given OTProcessor - */ process(processor, glyphs, positions) { - for (let stage of this.stages){ - if (typeof stage === 'function') { - if (!positions) stage(this.font, glyphs, this); - } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); - } - } - constructor(font, script, direction){ - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } -} - - - - -const $649970d87335b30f$var$VARIATION_FEATURES = [ - 'rvrn' -]; -const $649970d87335b30f$var$COMMON_FEATURES = [ - 'ccmp', - 'locl', - 'rlig', - 'mark', - 'mkmk' -]; -const $649970d87335b30f$var$FRACTIONAL_FEATURES = [ - 'frac', - 'numr', - 'dnom' -]; -const $649970d87335b30f$var$HORIZONTAL_FEATURES = [ - 'calt', - 'clig', - 'liga', - 'rclt', - 'curs', - 'kern' -]; -const $649970d87335b30f$var$VERTICAL_FEATURES = [ - 'vert' -]; -const $649970d87335b30f$var$DIRECTIONAL_FEATURES = { - ltr: [ - 'ltra', - 'ltrm' - ], - rtl: [ - 'rtla', - 'rtlm' - ] -}; -class $649970d87335b30f$export$2e2bcd8739ae039 { - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - static planPreprocessing(plan) { - plan.add({ - global: [ - ...$649970d87335b30f$var$VARIATION_FEATURES, - ...$649970d87335b30f$var$DIRECTIONAL_FEATURES[plan.direction] - ], - local: $649970d87335b30f$var$FRACTIONAL_FEATURES - }); - } - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - static planPostprocessing(plan, userFeatures) { - plan.add([ - ...$649970d87335b30f$var$COMMON_FEATURES, - ...$649970d87335b30f$var$HORIZONTAL_FEATURES - ]); - plan.setFeatureOverrides(userFeatures); - } - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for(let i = 0; i < glyphs.length; i++){ - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { - let start = i; - let end = i + 1; - // Apply numerator - while(start > 0 && (0, $52ZIf$isDigit)(glyphs[start - 1].codePoints[0])){ - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - // Apply denominator - while(end < glyphs.length && (0, $52ZIf$isDigit)(glyphs[end].codePoints[0])){ - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} -(0, $52ZIf$_)($649970d87335b30f$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); - - - - - - -const $764eb544bbe1ccf0$var$trie = new (0, $52ZIf$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==")); -const $764eb544bbe1ccf0$var$FEATURES = [ - 'isol', - 'fina', - 'fin2', - 'fin3', - 'medi', - 'med2', - 'init' -]; -const $764eb544bbe1ccf0$var$ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; -const $764eb544bbe1ccf0$var$ISOL = 'isol'; -const $764eb544bbe1ccf0$var$FINA = 'fina'; -const $764eb544bbe1ccf0$var$FIN2 = 'fin2'; -const $764eb544bbe1ccf0$var$FIN3 = 'fin3'; -const $764eb544bbe1ccf0$var$MEDI = 'medi'; -const $764eb544bbe1ccf0$var$MED2 = 'med2'; -const $764eb544bbe1ccf0$var$INIT = 'init'; -const $764eb544bbe1ccf0$var$NONE = null; -// Each entry is [prevAction, curAction, nextState] -const $764eb544bbe1ccf0$var$STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 2: prev was D/L in ISOL form, willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 1 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 3 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 4 - ], - [ - $764eb544bbe1ccf0$var$INIT, - $764eb544bbe1ccf0$var$FINA, - 6 - ] - ], - // State 3: prev was D in FINA form, willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 1 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 3 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 4 - ], - [ - $764eb544bbe1ccf0$var$MEDI, - $764eb544bbe1ccf0$var$FINA, - 6 - ] - ], - // State 4: prev was FINA ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$MED2, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$FIN2, - 5 - ], - [ - $764eb544bbe1ccf0$var$ISOL, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ], - // State 6: prev was DALATH/RISH, not willing to join. - [ - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$NONE, - 0 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 1 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 2 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$FIN3, - 5 - ], - [ - $764eb544bbe1ccf0$var$NONE, - $764eb544bbe1ccf0$var$ISOL, - 6 - ] - ] -]; -class $764eb544bbe1ccf0$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ccmp', - 'locl' - ]); - for(let i = 0; i < $764eb544bbe1ccf0$var$FEATURES.length; i++){ - let feature = $764eb544bbe1ccf0$var$FEATURES[i]; - plan.addStage(feature, false); - } - plan.addStage('mset'); - } - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - let prev = -1; - let state = 0; - let actions = []; - // Apply the state machine to map glyphs to features - for(let i = 0; i < glyphs.length; i++){ - let curAction, prevAction; - var glyph = glyphs[i]; - let type = $764eb544bbe1ccf0$var$getShapingClass(glyph.codePoints[0]); - if (type === $764eb544bbe1ccf0$var$ShapingClasses.Transparent) { - actions[i] = $764eb544bbe1ccf0$var$NONE; - continue; - } - [prevAction, curAction, state] = $764eb544bbe1ccf0$var$STATE_TABLE[state][type]; - if (prevAction !== $764eb544bbe1ccf0$var$NONE && prev !== -1) actions[prev] = prevAction; - actions[i] = curAction; - prev = i; - } - // Apply the chosen features to their respective glyphs - for(let index = 0; index < glyphs.length; index++){ - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) glyph.features[feature] = true; - } - } -} -function $764eb544bbe1ccf0$var$getShapingClass(codePoint) { - let res = $764eb544bbe1ccf0$var$trie.get(codePoint); - if (res) return res - 1; - let category = (0, $52ZIf$getCategory)(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') return $764eb544bbe1ccf0$var$ShapingClasses.Transparent; - return $764eb544bbe1ccf0$var$ShapingClasses.Non_Joining; -} - - - - - -class $85d408632270248b$export$2e2bcd8739ae039 { - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - get cur() { - return this.glyphs[this.index] || null; - } - shouldIgnore(glyph) { - return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; - } - move(dir) { - this.index += dir; - while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; - if (0 > this.index || this.index >= this.glyphs.length) return null; - return this.glyphs[this.index]; - } - next() { - return this.move(1); - } - prev() { - return this.move(-1); - } - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while(count--)this.move(dir); - return this.glyphs[this.index]; - } - constructor(glyphs, options){ - this.glyphs = glyphs; - this.reset(options); - } -} - - - -const $a83b9c36aaa94fd3$var$DEFAULT_SCRIPTS = [ - 'DFLT', - 'dflt', - 'latn' -]; -class $a83b9c36aaa94fd3$export$2e2bcd8739ae039 { - findScript(script) { - if (this.table.scriptList == null) return null; - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script)for (let entry of this.table.scriptList){ - if (entry.tag === s) return entry; - } - return null; - } - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) entry = this.findScript($a83b9c36aaa94fd3$var$DEFAULT_SCRIPTS); - if (!entry) return this.scriptTag; - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - if (!direction || direction !== this.direction) this.direction = direction || $130d1a642ebcd2b7$export$9fddb9d0dd7d8a54(script); - if (language && language.length < 4) language += ' '.repeat(4 - language.length); - if (!language || language !== this.languageTag) { - this.language = null; - for (let lang of this.script.langSysRecords)if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - changed = true; - } - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) for (let featureIndex of this.language.featureIndexes){ - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - return this.scriptTag; - } - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures){ - let feature = this.features[tag]; - if (!feature) continue; - for (let lookupIndex of feature.lookupListIndexes){ - if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - lookups.sort((a, b)=>a.index - b.index); - return lookups; - } - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) return null; - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions){ - if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; - } - return null; - } - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) return -1; - let records = variations.featureVariationRecords; - for(let i = 0; i < records.length; i++){ - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) return i; - } - return -1; - } - variationConditionsMatch(conditions, coords) { - return conditions.every((condition)=>{ - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new (0, $85d408632270248b$export$2e2bcd8739ae039)(glyphs); - for (let { feature: feature, lookup: lookup } of lookups){ - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - while(this.glyphIterator.index < glyphs.length){ - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - for (let table of lookup.subTables){ - let res = this.applyLookup(lookup.lookupType, table); - if (res) break; - } - this.glyphIterator.next(); - } - } - } - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - for (let lookupRecord of lookupRecords){ - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - // Apply lookup subtables until one matches - for (let table of lookup.subTables){ - if (this.applyLookup(lookup.lookupType, table)) break; - } - } - this.glyphIterator.reset(options, glyphIndex); - return true; - } - coverageIndex(coverage, glyph) { - if (glyph == null) glyph = this.glyphIterator.cur.id; - switch(coverage.version){ - case 1: - return coverage.glyphs.indexOf(glyph); - case 2: - for (let range of coverage.rangeRecords){ - if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; - } - break; - } - return -1; - } - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ - if (matched) matched.push(this.glyphIterator.index); - idx++; - glyph = this.glyphIterator.next(); - } - this.glyphIterator.index = pos; - if (idx < sequence.length) return false; - return matched || true; - } - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id); - } - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>{ - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) return false; - return component === glyph.id; - }, []); - } - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0); - } - getClassID(glyph, classDef) { - switch(classDef.version){ - case 1: - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; - break; - case 2: - for (let range of classDef.classRangeRecord){ - if (range.start <= glyph && glyph <= range.end) return range.class; - } - break; - } - return 0; - } - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)); - } - applyContext(table) { - let index, set; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - set = table.ruleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) return false; - set = table.classSet[index]; - for (let rule of set){ - if (this.classSequenceMatches(1, rule.classes, table.classDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - applyChainingContext(table) { - let index; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let set = table.chainRuleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) return false; - for (let rule of rules){ - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule.input, table.inputClassDef) && this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - constructor(font, table){ - this.font = font; - this.table = table; - this.script = null; - this.scriptTag = null; - this.language = null; - this.languageTag = null; - this.features = {}; - this.lookups = {}; - // Setup variation substitutions - this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; - // initialize to default script + language - this.selectScript(); - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } -} - - -class $10e7b257e1a9a756$export$2e2bcd8739ae039 { - get id() { - return this._id; - } - set id(id) { - this._id = id; - this.substituted = true; - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $52ZIf$isMark)); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - copy() { - return new $10e7b257e1a9a756$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); - } - constructor(font, id, codePoints = [], features){ - this._font = font; - this.codePoints = codePoints; - this.id = id; - this.features = {}; - if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ - let feature = features[i]; - this.features[feature] = true; - } - else if (typeof features === 'object') Object.assign(this.features, features); - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } -} - - -class $e1c6bbc8cb416f8c$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ljmo', - 'vjmo', - 'tjmo' - ], false); - } - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while(i < glyphs.length){ - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = $e1c6bbc8cb416f8c$var$getType(code); - [action, state] = $e1c6bbc8cb416f8c$var$STATE_TABLE[state][type]; - switch(action){ - case $e1c6bbc8cb416f8c$var$DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) i = $e1c6bbc8cb416f8c$var$decompose(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = $e1c6bbc8cb416f8c$var$compose(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - $e1c6bbc8cb416f8c$var$reorderToneMark(glyphs, i, plan.font); - break; - case $e1c6bbc8cb416f8c$var$INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = $e1c6bbc8cb416f8c$var$insertDottedCircle(glyphs, i, plan.font); - break; - } - i++; - } - } -} -(0, $52ZIf$_)($e1c6bbc8cb416f8c$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -const $e1c6bbc8cb416f8c$var$HANGUL_BASE = 0xac00; -const $e1c6bbc8cb416f8c$var$HANGUL_END = 0xd7a4; -const $e1c6bbc8cb416f8c$var$HANGUL_COUNT = $e1c6bbc8cb416f8c$var$HANGUL_END - $e1c6bbc8cb416f8c$var$HANGUL_BASE + 1; -const $e1c6bbc8cb416f8c$var$L_BASE = 0x1100; // lead -const $e1c6bbc8cb416f8c$var$V_BASE = 0x1161; // vowel -const $e1c6bbc8cb416f8c$var$T_BASE = 0x11a7; // trail -const $e1c6bbc8cb416f8c$var$L_COUNT = 19; -const $e1c6bbc8cb416f8c$var$V_COUNT = 21; -const $e1c6bbc8cb416f8c$var$T_COUNT = 28; -const $e1c6bbc8cb416f8c$var$L_END = $e1c6bbc8cb416f8c$var$L_BASE + $e1c6bbc8cb416f8c$var$L_COUNT - 1; -const $e1c6bbc8cb416f8c$var$V_END = $e1c6bbc8cb416f8c$var$V_BASE + $e1c6bbc8cb416f8c$var$V_COUNT - 1; -const $e1c6bbc8cb416f8c$var$T_END = $e1c6bbc8cb416f8c$var$T_BASE + $e1c6bbc8cb416f8c$var$T_COUNT - 1; -const $e1c6bbc8cb416f8c$var$DOTTED_CIRCLE = 0x25cc; -const $e1c6bbc8cb416f8c$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const $e1c6bbc8cb416f8c$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const $e1c6bbc8cb416f8c$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const $e1c6bbc8cb416f8c$var$isTone = (code)=>0x302e <= code && code <= 0x302f; -const $e1c6bbc8cb416f8c$var$isLVT = (code)=>$e1c6bbc8cb416f8c$var$HANGUL_BASE <= code && code <= $e1c6bbc8cb416f8c$var$HANGUL_END; -const $e1c6bbc8cb416f8c$var$isLV = (code)=>code - $e1c6bbc8cb416f8c$var$HANGUL_BASE < $e1c6bbc8cb416f8c$var$HANGUL_COUNT && (code - $e1c6bbc8cb416f8c$var$HANGUL_BASE) % $e1c6bbc8cb416f8c$var$T_COUNT === 0; -const $e1c6bbc8cb416f8c$var$isCombiningL = (code)=>$e1c6bbc8cb416f8c$var$L_BASE <= code && code <= $e1c6bbc8cb416f8c$var$L_END; -const $e1c6bbc8cb416f8c$var$isCombiningV = (code)=>$e1c6bbc8cb416f8c$var$V_BASE <= code && code <= $e1c6bbc8cb416f8c$var$V_END; -const $e1c6bbc8cb416f8c$var$isCombiningT = (code)=>$e1c6bbc8cb416f8c$var$T_BASE + 1 && 1 <= code && code <= $e1c6bbc8cb416f8c$var$T_END; -// Character categories -const $e1c6bbc8cb416f8c$var$X = 0; // Other character -const $e1c6bbc8cb416f8c$var$L = 1; // Leading consonant -const $e1c6bbc8cb416f8c$var$V = 2; // Medial vowel -const $e1c6bbc8cb416f8c$var$T = 3; // Trailing consonant -const $e1c6bbc8cb416f8c$var$LV = 4; // Composed syllable -const $e1c6bbc8cb416f8c$var$LVT = 5; // Composed syllable -const $e1c6bbc8cb416f8c$var$M = 6; // Tone mark -// This function classifies a character using the above categories. -function $e1c6bbc8cb416f8c$var$getType(code) { - if ($e1c6bbc8cb416f8c$var$isL(code)) return $e1c6bbc8cb416f8c$var$L; - if ($e1c6bbc8cb416f8c$var$isV(code)) return $e1c6bbc8cb416f8c$var$V; - if ($e1c6bbc8cb416f8c$var$isT(code)) return $e1c6bbc8cb416f8c$var$T; - if ($e1c6bbc8cb416f8c$var$isLV(code)) return $e1c6bbc8cb416f8c$var$LV; - if ($e1c6bbc8cb416f8c$var$isLVT(code)) return $e1c6bbc8cb416f8c$var$LVT; - if ($e1c6bbc8cb416f8c$var$isTone(code)) return $e1c6bbc8cb416f8c$var$M; - return $e1c6bbc8cb416f8c$var$X; -} -// State machine actions -const $e1c6bbc8cb416f8c$var$NO_ACTION = 0; -const $e1c6bbc8cb416f8c$var$DECOMPOSE = 1; -const $e1c6bbc8cb416f8c$var$COMPOSE = 2; -const $e1c6bbc8cb416f8c$var$TONE_MARK = 4; -const $e1c6bbc8cb416f8c$var$INVALID = 5; -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const $e1c6bbc8cb416f8c$var$STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$INVALID, - 0 - ] - ], - // State 1: - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$COMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$INVALID, - 0 - ] - ], - // State 2: or - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$COMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$TONE_MARK, - 0 - ] - ], - // State 3: or - [ - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 1 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$NO_ACTION, - 0 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 2 - ], - [ - $e1c6bbc8cb416f8c$var$DECOMPOSE, - 3 - ], - [ - $e1c6bbc8cb416f8c$var$TONE_MARK, - 0 - ] - ] -]; -function $e1c6bbc8cb416f8c$var$getGlyph(font, code, features) { - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, font.glyphForCodePoint(code).id, [ - code - ], features); -} -function $e1c6bbc8cb416f8c$var$decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let s = code - $e1c6bbc8cb416f8c$var$HANGUL_BASE; - let t = $e1c6bbc8cb416f8c$var$T_BASE + s % $e1c6bbc8cb416f8c$var$T_COUNT; - s = s / $e1c6bbc8cb416f8c$var$T_COUNT | 0; - let l = $e1c6bbc8cb416f8c$var$L_BASE + s / $e1c6bbc8cb416f8c$var$V_COUNT | 0; - let v = $e1c6bbc8cb416f8c$var$V_BASE + s % $e1c6bbc8cb416f8c$var$V_COUNT; - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $e1c6bbc8cb416f8c$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = $e1c6bbc8cb416f8c$var$getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - let vjmo = $e1c6bbc8cb416f8c$var$getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - let insert = [ - ljmo, - vjmo - ]; - if (t > $e1c6bbc8cb416f8c$var$T_BASE) { - let tjmo = $e1c6bbc8cb416f8c$var$getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} -function $e1c6bbc8cb416f8c$var$compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = $e1c6bbc8cb416f8c$var$getType(code); - let prev = glyphs[i - 1].codePoints[0]; - let prevType = $e1c6bbc8cb416f8c$var$getType(prev); - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === $e1c6bbc8cb416f8c$var$LV && type === $e1c6bbc8cb416f8c$var$T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === $e1c6bbc8cb416f8c$var$V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - // Make sure L and V are combining characters - if ($e1c6bbc8cb416f8c$var$isCombiningL(l) && $e1c6bbc8cb416f8c$var$isCombiningV(v)) lv = $e1c6bbc8cb416f8c$var$HANGUL_BASE + ((l - $e1c6bbc8cb416f8c$var$L_BASE) * $e1c6bbc8cb416f8c$var$V_COUNT + (v - $e1c6bbc8cb416f8c$var$V_BASE)) * $e1c6bbc8cb416f8c$var$T_COUNT; - } - let t = tjmo && tjmo.codePoints[0] || $e1c6bbc8cb416f8c$var$T_BASE; - if (lv != null && (t === $e1c6bbc8cb416f8c$var$T_BASE || $e1c6bbc8cb416f8c$var$isCombiningT(t))) { - let s = lv + (t - $e1c6bbc8cb416f8c$var$T_BASE); - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === $e1c6bbc8cb416f8c$var$V ? 3 : 2; - glyphs.splice(i - del + 1, del, $e1c6bbc8cb416f8c$var$getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) ljmo.features.ljmo = true; - if (vjmo) vjmo.features.vjmo = true; - if (tjmo) tjmo.features.tjmo = true; - if (prevType === $e1c6bbc8cb416f8c$var$LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - $e1c6bbc8cb416f8c$var$decompose(glyphs, i - 1, font); - return i + 1; - } - return i; -} -function $e1c6bbc8cb416f8c$var$getLength(code) { - switch($e1c6bbc8cb416f8c$var$getType(code)){ - case $e1c6bbc8cb416f8c$var$LV: - case $e1c6bbc8cb416f8c$var$LVT: - return 1; - case $e1c6bbc8cb416f8c$var$V: - return 2; - case $e1c6bbc8cb416f8c$var$T: - return 3; - } -} -function $e1c6bbc8cb416f8c$var$reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) return; - let prev = glyphs[i - 1].codePoints[0]; - let len = $e1c6bbc8cb416f8c$var$getLength(prev); - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} -function $e1c6bbc8cb416f8c$var$insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - if (font.hasGlyphForCodePoint($e1c6bbc8cb416f8c$var$DOTTED_CIRCLE)) { - let dottedCircle = $e1c6bbc8cb416f8c$var$getGlyph(font, $e1c6bbc8cb416f8c$var$DOTTED_CIRCLE, glyph.features); - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - return i; -} - - - - - - - - - -var $4b0735ca6c692ea5$exports = {}; -$4b0735ca6c692ea5$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}"); - - -var $aa333a9607471296$exports = {}; -$aa333a9607471296$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}"); - - -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -const $90a9d3398ee54fe5$export$a513ea61a7bee91c = { - X: 1, - C: 2, - V: 4, - N: 8, - H: 16, - ZWNJ: 32, - ZWJ: 64, - M: 128, - SM: 256, - VD: 512, - A: 1024, - Placeholder: 2048, - Dotted_Circle: 4096, - RS: 8192, - Coeng: 16384, - Repha: 32768, - Ra: 65536, - CM: 131072, - Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). -}; -const $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0 = { - Start: 1, - Ra_To_Become_Reph: 2, - Pre_M: 4, - Pre_C: 8, - Base_C: 16, - After_Main: 32, - Above_C: 64, - Before_Sub: 128, - Below_C: 256, - After_Sub: 512, - Before_Post: 1024, - Post_C: 2048, - After_Post: 4096, - Final_C: 8192, - SMVD: 16384, - End: 32768 -}; -const $90a9d3398ee54fe5$export$8519deaa7de2b07 = $90a9d3398ee54fe5$export$a513ea61a7bee91c.C | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Ra | $90a9d3398ee54fe5$export$a513ea61a7bee91c.CM | $90a9d3398ee54fe5$export$a513ea61a7bee91c.V | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Placeholder | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Dotted_Circle; -const $90a9d3398ee54fe5$export$bbcd928767338e0d = $90a9d3398ee54fe5$export$a513ea61a7bee91c.ZWJ | $90a9d3398ee54fe5$export$a513ea61a7bee91c.ZWNJ; -const $90a9d3398ee54fe5$export$ca9599b2a300afc = $90a9d3398ee54fe5$export$a513ea61a7bee91c.H | $90a9d3398ee54fe5$export$a513ea61a7bee91c.Coeng; -const $90a9d3398ee54fe5$export$e99d119da76a0fc5 = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; -const $90a9d3398ee54fe5$export$f647c9cfdd77d95a = { - // Khmer - 0x17BE: [ - 0x17C1, - 0x17BE - ], - 0x17BF: [ - 0x17C1, - 0x17BF - ], - 0x17C0: [ - 0x17C1, - 0x17C0 - ], - 0x17C4: [ - 0x17C1, - 0x17C4 - ], - 0x17C5: [ - 0x17C1, - 0x17C5 - ] -}; - - - -const { decompositions: $7826f90f6f0cecc9$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports))); -const $7826f90f6f0cecc9$var$trie = new (0, $52ZIf$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("AAARAAAAAABg2AAAAWYPmfDtnXuMXFUdx+/uzs7M7szudAtECGJRIMRQbUAithQWkGAKiVhNpFVRRAmIQVCDkDYICGotIA9BTCz8IeUviv7BQ2PBtBIRLBBQIWAUsKg1BKxRAqIgfs/cc+aeOXPej3tnZX7JJ/dxzj3nd36/8753Z5fUsuxgsAwcAU4Gp4BPgM+Cd4P3RjieDs4GXwLrHJ5bDy4DG8A14LvgZrAZbAF3gns0z18ALgY/B78C94NHwBPgabAE/AX8DbwM5sF/QX0yD5vFcU/wVnAgWAoOAyvAceBE8CGwBpwGzgJfAF8BXwXfAFeC68EmsBlsAXeCreA+8CB4DDwF/gh2gd3gFfAGmKxn2QzYC+wHDgRLweFgJTgWrKrnuq/GcQ04jV6fheN54EJwEbgcXAG+Q8O/j+Mt4DZwB9haz8t9Hz3a8iCN/xiOvwRP0evH6fE68AzOH+Ke2eWYhw3PcGnuxvkr4A3QaGRZB7wFLAEHg2XgiEZ/fHKcp/ceBh/A+cngFPCpRm6vM3E8l8a5gN67GMdvgqsbeX2ap9yI601gM7gN3AG20mfuo8cdOP6GpvdUg9oKxz839GV90RDO2/glxN1B790NXsN1rZll7WYRdw+c70uvTwIHNAfTO0RyL5TDmnnbc3lmRQI9UnM0dD5eovfz4FpJ/BNpXNYWV+N6Lfg0hY97JK1vn+Pur9DoQur2F7m436bHDUK8C5t5/8vruo4+97WmXG+GLmzEiBF+PDwEOowYMWLEiBEjRoxYeBw5BDqIPEfXut9yWN+vVNxfrnnmWqR/PdgENoMt4E5wD9gOHgCPgifBs2BXM99b2o3jP8F/wMRUlrXAHNgHvH0q3895J46HguXgWHAGLctmLv9VuL96qnp7jxgxYsSbCbJvuRZ97/tqxT59VVRtixEjRsThBG7OSt5zzoPT0M+cBc4T5noXOs79TqLHeZrHUeCSqeJ96gacXy2kecNU8V6Hh7yXuQlhtw7B/PO1RTkr52Aj8JNFZjYg3gOKuC/g/v6Ls2wNuAY8urg//PcIb+6RZXuDNeCS6SzbBrJWlh0DLiFHco8ed9IjzzvaWfa9sZzTcf6D9mCcnbg3PlNcH4fzS8F2MDaLdQG4dLZIJxbbaZqv4ri8k58f3+mPs66T6/TTzqDeI0aMGDGiHP5dcR8ce/xxYcWi6vOfr725uRzcjnngXVOD61Hync+9uL+Nmyfej/NHpvL56A5Jeuz7uyfo+pqcPz2Vf1NH0ttJ03pekt8SmuY/EPYy9zzbN319ym/9TL6ZIt9MHCXRdxJtoAkWTRdz472n87D9cTwYLJvuz++I6WIePo/zE8AHp4v8WLyP0nufnM6/+zoDx8+DL08P6r9+urheRtO+jD6/cdrsx3mqu8w+xH4PScKIXa5D2jeCm8Et4DbwI/BjcC/4BXgI/Bb8DuwEu8Bu8Ap4A9RaRZptnO8J9gUHgEPAoWA5OLY1qMO90GEV7q+mYWtxPBWcIYnL4p+DsPNbxfVFOP86uAr8DNc34HgTDb8Vx9sVaRFI/LtagzYjnCqpb908EX87eBA8Bh4Hf2jle/9/wvGFVv787rrZZy8h7qtgDOuFOmiBuXYRvg/O9wMHgXeB97SLspk4sq0OI/q9v13+ek+sh3zYSRp9jrYorw9ll1/GRzR+KotYZSHf8laVP2lvpA/8OGdPMk59hqtXZ+L8nHbxvWwqO65ryu+fT3VZz+l4dET7L0R072ljsMyzTpaJqQxsbL8M9WajY789DO85XMp/Dcp3Qztdn+9qf/a97ZWK8PXc3G+TpC/nv8Mncy7ZvICF302P5O+aNiOtLdTXd+D4Q7DVwfcvWvx9zTEJ/o5iG3R8YAjGNFseha5PGuZKz7b7xxXbOrXMcu5eJSo//rXdH/73Enz6L1q/X+fyIu8wZGtNBmkjkzNZNgP2AvuBg2bysKUzduXn/66JtNeN4PCZvO0/x7Ujdn4VnYOvRJzjZ/I+9sQZeftX2Tc1RPcPz/Tf4/si0g+t5Mq+kfZjZL34Mc5ul3PPnE7TOxvHK2qDaZ+L++db2HyYqMo/qVnb/P8uH8/rmnFxR0k6DCu/rjj/RxT7KGUSWgbd+LMQuEgYB1zsk2qtvJD8v5AhdfdttbEunSxbcJD9Zf7chqp1Hlbe7FK1/aPVTfp7FgtC1yGGiSncFK/DhZvi+epZta0WWjlsfDZMyPRdSPrryqSSKnXx1bkq/Ye9TlRpk7Lrjq1UrfdC9X+MtKqwP6+3a/4pJFUZF0pZZpv91MYjMBaRRXbxpho5zQmUY3F+Pt4o7rvQrBXPdm00TaE24uMadaM2meLSI7iu071t3er3b6ZLi8JEde3qw+6zGv+ycF5kaRBh/m1T/7Yl/mMyTuMwadP4xL9ifjJpNwbvDZRJ8G8vnqV/Wf12aa/kyOdl69+BspTsXzGueE6E+JfZnvmXIfNPW+FfXkjb1YmqPNpnLP3b61fHCj/X5tzGANf2y3yqvC7Jv7btV4TVbdammI9l/g0dS5lNxLrk2j9r8xjjxhBQnygg0lgg/bOrfyct+udJi/Yrk0lFnxC7f+5kRbsNmcexfrubt0X/rGvLqrGSnYv3ZPHEe8r7lvMvUfi2LOu/2dg8LrRtQt2yfcv8r5IU70VkIs6nbebUXf0M/o7Znl39Sdoz+X1oEb5N8ffF67qhPfPP6eoUbxf+GRf/6sRnvaSdmw+Bf1VxmbD+2sa//DU7t/Gv2PfKpKdrBP92Ojk+IvqX16ks/2qxbL8EZnc2HqsgYuqPuzZV+I3RbujbDm+T0PmWCVO/5jqftp1zy+wSA6s0JWtp2z5e1oZV+yMsjB3ZXolsv0Ulrv01v3/iKrF94Qtbt9siCnmeb6fjjf59KnLk1xaEbvtvFnFirGvEOqmycQrbm/IMsXd3P28uh4nM3swXRER717OiX8kc7K2qqyn2p3maFGU/aruP5VCv+PraoTYU8yUmmbDwcYo6pusnM486xdoga4dkPCb1pK7Sfc6ebvkd4qeAtQcd/N63bB3lU3dlUnUf38VyvqCqK7JxlNSd7lydrDlm+/uqHiRvl30Nrp/n9zpkZRjoJ3V1diyP05rIYXHYs+w+D5+WMS8b5gZtKcuX0KT5d/WwtB97VnyvY6rjMukI56HI0rFJPwt8PjT/1OXzSbcMeEmdh294qvKK4rNu7j4n3LNZg8TKXwafv025U+XvKjHsT8Q7/7LGaJt9lAh7Asz3uv0XEX6t0duDoWN/93wmh92XpUHmCKb9GALbG+rZP3AfNbQPKKv/jpF/bP0JXfuW1QYk7dhljcyvk5mw+933Hpo1g26PQ2ZP6zVmTJt47P25jncD9vPwGS+q9QS/V6RaY8j8K8LmvUr9HfYCpH5OWL9lZY+Sv6pesHCJHbtrf9k6etZvf0G1L0ja4cAe1UT/s3zdCe3/Q5/n372wMc97/E1Qh0Tbmfwh3m/V9On72tNnrCF1sJkVe1EyXMdBa7+lHMsk44zMF6St9e2djNnbm8ybpHkq+gbbemMaH0UZmD8obKGrk7r+nt+3bE7o83YZp/vqOKdv6PzJNN6mTJsI/51XR7i2ZrGA5B6zFwnjzxmqPjaGfW3tZNrz1eljq29mOOqeCfF/irRt87PNw0uXSVAvrmOMNT569MptsYaV0sic/wbY13e8hPrb9K2ySUJ0j6G/Lu0U4qpTrR23jMp6m5hU+YTaWCeh9aIsm/rqUHV4bFv42kgnZdfH1PUj1D7DVH9d8khRN1zFRl/+/TW//qxL1uH83+mk3H+SvRtS2TDU90nX2TpM6/1xzZpZtoYdK763dqlz0f6uNeFehcs+H/nbGP77MpX06n/ofpzP+tVmTUvRtVuX/cjS67OE5kRBrxyJ+w/dPo7r+9cO1160e3gqu0S2uW7PjN/L6ns/UfMf10Lai87frJ+3KndAfc8yTf1M3T4s6qm4/yh7/2GSkG8UMw//DvRLgbYZSEOxr0LCWvRdjfh9XGzfqN4NivfZd7rsmFp08zmbssrKJEuTfVMZopdpbuwSrhNv3/N2s+0PDG3KNB6RMrFvJHv6B85HXObAoWsd3zm3i+6uZYytv+5+pohbpo6+tpZJFfmGlrcMf4c8b1Pe2OUIsaXJrinCTfaxtZOt+NYnU3hIfQlN20Z/1+dt7JaqLsbIzycNWZmrlNg2Dc2/LJ1T+T6WrrYSml4Ku7ik7yIx2opJD51vU9UfVRmrqL8u/olZj0PyCLV5irxcdKoi/6rKb8qTrHsnhW9jyZH/nSpeWDzxd9769uQ016lgUuf2pAfKPhu2FpfZL2Yb9snLNl/fNIepXaUsj4vNXCXUZ75px8ojNP8UPvAta2g6fb+F1ckZuneshv1vGXXDeyRRrN/bBPS1Jul+l+7zW86R7Wv63WXyDpt/RxraRjvC+TC3O61/Sqj/prag8x372yQivn+XwudrI2X2E2KdtJEov52e0L+uv4FO3p/rvssgsL8F4d/z9PzlWS94m8fqS3361Fi+6qaVYHwi9Yz4iH2fobIj+45cpz/TUaarr/4+z+vaWtVtyAX2d1LG8W9C3f+F1mnf36/k4w3YPrLv+XBVXCJs3cr+n4MKJuLv/fN9GhNdXVP5pJMN9vFi3rpv3/r8Ywg3SYp66zNOsO8QGcxPpnmRS/1mvmJjju3v7absI2xspQrvs1dNbjOj/wP7h1RlZyKGy8occ408UL8En4v6xfC/K3z52XzJd62T8vuZGGsxo/6O46ntmNqqFb/jps2/hHV4rPKH0svT4pstU7t2tZ9u/ZdqbJL1MwP6O86Fyt4jYaIrGz9mjEt8lFL4PtVE6votG2P6fpdf/GZRse7s3bf4BtSl/DIbKMctx++Z+8o6K6z9FPOwKsRmXiaNl7C+6NYRpjlbqG1j72f49qsuY4brd/amb4ZVc8TQ+sSH985LrEe8iPWJnfPrJRbWbb+dwn4x6o+r/aS2S7w3qWt//LnYz2ntE0vH1uDcyKatx1rH+EiMPEN1SZG/iz6+9o01Rob6O7Q+xLZ1jHobK61U+pWVvo2EpuWqzzD6Poa+pvhli0wn8Zq/72Mzm2d90o5VN1x9ZKuzbTgvqWwUIin8FSpl1CXXvFRxU0iozVPYJDRtF3uFphn6XAyJUUdD7SjTJ8v6n9fVbVObkKWp001lc9VRlqdOf5v0ZM+bymdbfp1NfG0bq27Y5JMyfxeJkU6o/inKH8O2Zfgidb6h/g3VJ7QcVbWL0Pxt6rlrPqa4KfQ25a2zl4/E8GdM/4fK/wA=")); -const $7826f90f6f0cecc9$var$stateMachine = new (0, $52ZIf$dfa)((0, (/*@__PURE__*/$parcel$interopDefault($4b0735ca6c692ea5$exports)))); -class $7826f90f6f0cecc9$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($7826f90f6f0cecc9$var$setupSyllables); - plan.addStage([ - 'locl', - 'ccmp' - ]); - plan.addStage($7826f90f6f0cecc9$var$initialReordering); - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - plan.addStage($7826f90f6f0cecc9$var$finalReordering); - plan.addStage({ - local: [ - 'init' - ], - global: [ - 'pres', - 'abvs', - 'blws', - 'psts', - 'haln', - 'dist', - 'abvm', - 'blwm', - 'calt', - 'clig' - ] - }); - // Setup the indic config for the selected script - plan.unicodeScript = $130d1a642ebcd2b7$export$ce50e82f12a827a4(plan.script); - plan.indicConfig = (0, $90a9d3398ee54fe5$export$e99d119da76a0fc5)[plan.unicodeScript] || (0, $90a9d3398ee54fe5$export$e99d119da76a0fc5).Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - // TODO: turn off kern (Khmer) and liga features. - } - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - let d = (0, $90a9d3398ee54fe5$export$f647c9cfdd77d95a)[codepoint] || $7826f90f6f0cecc9$var$decompositions[codepoint]; - if (d) { - let decomposed = d.map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $52ZIf$_)($7826f90f6f0cecc9$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -function $7826f90f6f0cecc9$var$indicCategory(glyph) { - return $7826f90f6f0cecc9$var$trie.get(glyph.codePoints[0]) >> 8; -} -function $7826f90f6f0cecc9$var$indicPosition(glyph) { - return 1 << ($7826f90f6f0cecc9$var$trie.get(glyph.codePoints[0]) & 0xff); -} -class $7826f90f6f0cecc9$var$IndicInfo { - constructor(category, position, syllableType, syllable){ - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $7826f90f6f0cecc9$var$setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of $7826f90f6f0cecc9$var$stateMachine.match(glyphs.map($7826f90f6f0cecc9$var$indicCategory))){ - if (start > last) { - ++syllable; - for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).X, (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo(1 << $7826f90f6f0cecc9$var$indicCategory(glyphs[i]), $7826f90f6f0cecc9$var$indicPosition(glyphs[i]), tags[0], syllable); - last = end + 1; - } - if (last < glyphs.length) { - ++syllable; - for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).X, (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } -} -function $7826f90f6f0cecc9$var$isConsonant(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$8519deaa7de2b07); -} -function $7826f90f6f0cecc9$var$isJoiner(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$bbcd928767338e0d); -} -function $7826f90f6f0cecc9$var$isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & (0, $90a9d3398ee54fe5$export$ca9599b2a300afc); -} -function $7826f90f6f0cecc9$var$wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs)glyph.features = { - [feature]: true - }; - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([ - feature - ], glyphs); - return glyphs.length === 1; -} -function $7826f90f6f0cecc9$var$consonantPosition(font, consonant, virama) { - let glyphs = [ - virama, - consonant, - virama - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C; - else if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C; - else if ($7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $7826f90f6f0cecc9$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C; - return (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; -} -function $7826f90f6f0cecc9$var$initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, virama, [ - indicConfig.virama - ]); - for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) glyphs[i].shaperInfo.position = $7826f90f6f0cecc9$var$consonantPosition(font, glyphs[i].copy(), info); - } - for(let start = 0, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, start)){ - let { category: category, syllableType: syllableType } = glyphs[start].shaperInfo; - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue; - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = new $7826f90f6f0cecc9$var$IndicInfo(1 << $7826f90f6f0cecc9$var$indicCategory(g), $7826f90f6f0cecc9$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); - // Insert after possible Repha. - let i = start; - while(i < end && glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha)i++; - glyphs.splice(i++, 0, g); - end++; - } - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - let base = end; - let limit = start; - let hasReph = false; - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$7826f90f6f0cecc9$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ)) { - // See if it matches the 'rphf' feature. - let g = [ - glyphs[start].copy(), - glyphs[start + 1].copy(), - glyphs[start + 2].copy() - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $7826f90f6f0cecc9$var$wouldSubstitute(g, 'rphf')) { - limit += 2; - while(limit < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha) { - limit++; - while(limit < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - switch(indicConfig.basePos){ - case 'Last': - { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - do { - let info = glyphs[--i].shaperInfo; - // until a consonant is found - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C && (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C || seenBelow)) { - base = i; - break; - } - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C) seenBelow = true; - base = i; - } else if (start < i && info.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ && glyphs[i - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) break; - }while (i > limit); - break; - } - case 'First': - // The first consonant is always the base. - base = start; - // Mark all subsequent consonants as below. - for(let i = base + 1; i < end; i++)if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C; - } - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) hasReph = false; - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - // Reorder characters - for(let i = start; i < base; i++){ - let info = glyphs[i].shaperInfo; - info.position = Math.min((0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_C, info.position); - } - if (base < end) glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - for(let j = i + 1; j < end; j++)if ($7826f90f6f0cecc9$var$isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Final_C; - break; - } - break; - } - // Handle beginning Ra - if (hasReph) glyphs[start].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) { - let j; - for(j = end - 1; j > i; j--){ - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H) break; - } - if (glyphs[j].shaperInfo.category !== (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - break; - } - } - // Attach misc marks to previous char to move with them. - let lastPos = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Start; - for(let i = start; i < end; i++){ - let info = glyphs[i].shaperInfo; - if (info.category & ((0, $90a9d3398ee54fe5$export$bbcd928767338e0d) | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).N | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).RS | (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).CM | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc) & info.category)) { - info.position = lastPos; - if (info.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && info.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for(let j = i; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } else if (info.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD) lastPos = info.position; - } - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for(let i = base + 1; i < end; i++){ - if ($7826f90f6f0cecc9$var$isConsonant(glyphs[i])) { - for(let j = last + 1; j < i; j++)if (glyphs[j].shaperInfo.position < (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD) glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - last = i; - } else if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) last = i; - } - let arr = glyphs.slice(start, end); - arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - // Find base again - for(let i = start; i < end; i++)if (glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) { - base = i; - break; - } - // Setup features now - // Reph - for(let i = start; i < end && glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; i++)glyphs[i].features.rphf = true; - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for(let i = start; i < base; i++){ - glyphs[i].features.half = true; - if (blwf) glyphs[i].features.blwf = true; - } - // Post-base - for(let i = base + 1; i < end; i++){ - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Ra && glyphs[i + 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ)) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - let prefLen = 2; - if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for(let i = base + 1; i + prefLen - 1 < end; i++){ - let g = [ - glyphs[i].copy(), - glyphs[i + 1].copy() - ]; - if ($7826f90f6f0cecc9$var$wouldSubstitute(g, 'pref')) { - for(let j = 0; j < prefLen; j++)glyphs[i++].features.pref = true; - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) for(; i < end; i++)glyphs[i].features.cfar = true; - break; - } - } - // Apply ZWJ/ZWNJ effects - for(let i = start + 1; i < end; i++)if ($7826f90f6f0cecc9$var$isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWNJ; - let j = i; - do { - j--; - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - // A ZWNJ disables HALF. - if (nonJoiner) delete glyphs[j].features.half; - }while (j > start && !$7826f90f6f0cecc9$var$isConsonant(glyphs[j])); - } - } -} -function $7826f90f6f0cecc9$var$finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - for(let start = 0, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7826f90f6f0cecc9$var$nextSyllable(glyphs, start)){ - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - let tryPref = !!features.pref; - // Find base again - let base = start; - for(; base < end; base++)if (glyphs[base].shaperInfo.position >= (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) { - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while(base < end && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[base]))base++; - glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).BASE_C; - tryPref = false; - } - break; - } - } - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){ - while(i < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[i]))i++; - if (i === end || !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[i])) break; - i++; // Skip halant. - while(i < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[i]))i++; - if (i < end && $7826f90f6f0cecc9$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Below_C) { - base = i; - glyphs[base].shaperInfo.position = (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C; - } - } - if (start < base && glyphs[base].shaperInfo.position > (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Base_C) base--; - break; - } - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).ZWJ) base--; - if (base < end) while(start < base && glyphs[base].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).N | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc)))base--; - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - if (start + 1 < end && start < base) { - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc))))newPos--; - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if ($7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos + 1 < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[newPos + 1])) newPos++; - } else newPos = start; // No move. - } - if (start < newPos && glyphs[newPos].shaperInfo.position !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - // Now go see if there's actually any matras... - for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) base--; - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - newPos--; - } - } - } - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && glyphs[start].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && glyphs[start].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while(newRephPos < base && !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $7826f90f6f0cecc9$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Main) { - newRephPos = base; - while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Main)newRephPos++; - found = newRephPos < end; - } - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Sub) { - newRephPos = base; - while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ((0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Post_C | (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).After_Post | (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD)))newRephPos++; - found = newRephPos < end; - } - } - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while(newRephPos < base && !$7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $7826f90f6f0cecc9$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - } - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).SMVD)newRephPos--; - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if ($7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newRephPos])) { - for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) newRephPos--; - } - } - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - if (start < base && base <= newRephPos) base--; - } - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ((0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M | (0, $90a9d3398ee54fe5$export$ca9599b2a300afc))))newPos--; - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - let oldPos = i; - for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === (0, $90a9d3398ee54fe5$export$a513ea61a7bee91c).M) { - newPos--; - break; - } - } - } - if (newPos > start && $7826f90f6f0cecc9$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos < end && $7826f90f6f0cecc9$var$isJoiner(glyphs[newPos])) newPos++; - } - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - if (newPos <= base && base < oldPos) base++; - } - break; - } - } - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === (0, $90a9d3398ee54fe5$export$1a1f61c9c4dd9df0).Pre_M && (!start || !/Cf|Mn/.test((0, $52ZIf$getCategory)(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true; - } -} -function $7826f90f6f0cecc9$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - - - - - - - - - -const { categories: $7ab494fe977143c6$var$categories, decompositions: $7ab494fe977143c6$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports))); -const $7ab494fe977143c6$var$trie = new (0, $52ZIf$unicodetrie)((0, $12727730ddfc8bfe$export$94fdf11bafc8de6b)("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")); -const $7ab494fe977143c6$var$stateMachine = new (0, $52ZIf$dfa)((0, (/*@__PURE__*/$parcel$interopDefault($aa333a9607471296$exports)))); -class $7ab494fe977143c6$export$2e2bcd8739ae039 extends (0, $649970d87335b30f$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($7ab494fe977143c6$var$setupSyllables); - // Default glyph pre-processing group - plan.addStage([ - 'locl', - 'ccmp', - 'nukt', - 'akhn' - ]); - // Reordering group - plan.addStage($7ab494fe977143c6$var$clearSubstitutionFlags); - plan.addStage([ - 'rphf' - ], false); - plan.addStage($7ab494fe977143c6$var$recordRphf); - plan.addStage($7ab494fe977143c6$var$clearSubstitutionFlags); - plan.addStage([ - 'pref' - ]); - plan.addStage($7ab494fe977143c6$var$recordPref); - // Orthographic unit shaping group - plan.addStage([ - 'rkrf', - 'abvf', - 'blwf', - 'half', - 'pstf', - 'vatu', - 'cjct' - ]); - plan.addStage($7ab494fe977143c6$var$reorder); - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - // Standard topographic presentation and positional feature application - plan.addStage([ - 'abvs', - 'blws', - 'pres', - 'psts', - 'dist', - 'abvm', - 'blwm' - ]); - } - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - if ($7ab494fe977143c6$var$decompositions[codepoint]) { - let decomposed = $7ab494fe977143c6$var$decompositions[codepoint].map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $52ZIf$_)($7ab494fe977143c6$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS'); -function $7ab494fe977143c6$var$useCategory(glyph) { - return $7ab494fe977143c6$var$trie.get(glyph.codePoints[0]); -} -class $7ab494fe977143c6$var$USEInfo { - constructor(category, syllableType, syllable){ - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $7ab494fe977143c6$var$setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of $7ab494fe977143c6$var$stateMachine.match(glyphs.map($7ab494fe977143c6$var$useCategory))){ - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $7ab494fe977143c6$var$USEInfo($7ab494fe977143c6$var$categories[$7ab494fe977143c6$var$useCategory(glyphs[i])], tags[0], syllable); - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for(let i = start; i < start + limit; i++)glyphs[i].features.rphf = true; - } -} -function $7ab494fe977143c6$var$clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs)glyph.substituted = false; -} -function $7ab494fe977143c6$var$recordRphf(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; -} -function $7ab494fe977143c6$var$recordPref(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; -} -function $7ab494fe977143c6$var$reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - for(let start = 0, end = $7ab494fe977143c6$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $7ab494fe977143c6$var$nextSyllable(glyphs, start)){ - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue; - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = info; - // Insert after possible Repha. - for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - // Move things forward. - if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant. - for(i = start + 1; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($7ab494fe977143c6$var$isBase(info) || $7ab494fe977143c6$var$isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if ($7ab494fe977143c6$var$isHalant(glyphs[i])) i--; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - // Move things back. - for(i = start, j = end; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($7ab494fe977143c6$var$isBase(info) || $7ab494fe977143c6$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = $7ab494fe977143c6$var$isHalant(glyphs[i]) ? i + 1 : i; - else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } -} -function $7ab494fe977143c6$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} -function $7ab494fe977143c6$var$isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} -function $7ab494fe977143c6$var$isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} - - -const $102b6fe50f1d50b4$var$SHAPERS = { - arab: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mong: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - syrc: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - 'nko ': (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - phag: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mand: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - mani: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - phlp: (0, $764eb544bbe1ccf0$export$2e2bcd8739ae039), - hang: (0, $e1c6bbc8cb416f8c$export$2e2bcd8739ae039), - bng2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - beng: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - dev2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - deva: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gjr2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gujr: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - guru: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - gur2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - knda: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - knd2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - mlm2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - mlym: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - ory2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - orya: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - taml: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - tml2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - telu: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - tel2: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - khmr: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - bali: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - batk: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - brah: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - bugi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - buhd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - cakm: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - cham: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - dupl: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - egyp: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - gran: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - hano: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - java: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - kthi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - kali: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - khar: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - khoj: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sind: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - lepc: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - limb: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - mahj: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - modi: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - saur: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - shrd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sidd: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sinh: (0, $7826f90f6f0cecc9$export$2e2bcd8739ae039), - sund: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - sylo: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tglg: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tagb: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tale: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - lana: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tavt: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - takr: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tibt: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tfng: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - tirh: (0, $7ab494fe977143c6$export$2e2bcd8739ae039), - latn: (0, $649970d87335b30f$export$2e2bcd8739ae039), - DFLT: (0, $649970d87335b30f$export$2e2bcd8739ae039 // Default - ) -}; -function $102b6fe50f1d50b4$export$7877a478dd30fd3d(script) { - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script){ - let shaper = $102b6fe50f1d50b4$var$SHAPERS[s]; - if (shaper) return shaper; - } - return 0, $649970d87335b30f$export$2e2bcd8739ae039; -} - - - - - -class $0a876c45f1f7c41c$export$2e2bcd8739ae039 extends (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039) { - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let glyph = this.glyphIterator.cur; - switch(table.version){ - case 1: - glyph.id = glyph.id + table.deltaGlyphID & 0xffff; - break; - case 2: - glyph.id = table.substitute.get(index); - break; - } - return true; - } - case 2: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i)=>{ - let glyph = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - return false; - } - case 3: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - return false; - } - case 4: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - for (let ligature of table.ligatureSets.get(index)){ - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) continue; - let curGlyph = this.glyphIterator.cur; - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched)characters.push(...this.glyphs[index].codePoints); - // Create the replacement ligature glyph - let ligatureGlyph = new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark; - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched){ - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) idx = matchIndex; - else while(idx < matchIndex){ - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) for(let i = idx; i < this.glyphs.length; i++){ - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else break; - } - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for(let i = matched.length - 1; i >= 0; i--)this.glyphs.splice(matched[i], 1); - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - return false; - } - case 5: - return this.applyContext(table); - case 6: - return this.applyChainingContext(table); - case 7: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} - - - -class $c96c93587d49c14d$export$2e2bcd8739ae039 extends (0, $a83b9c36aaa94fd3$export$2e2bcd8739ae039) { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) position.xAdvance += value.xAdvance; - if (value.yAdvance != null) position.yAdvance += value.yAdvance; - if (value.xPlacement != null) position.xOffset += value.xPlacement; - if (value.yPlacement != null) position.yOffset += value.yPlacement; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - // TODO: device tables - } - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - this.applyPositionValue(0, table.value); - break; - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - return true; - } - case 2: - { - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) return false; - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - let set = table.pairSets.get(index); - for (let pair of set)if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - return false; - case 2: - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) return false; - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - case 3: - { - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) return false; - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) return false; - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) return false; - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - switch(this.direction){ - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - return true; - } - case 4: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - if (baseGlyphIndex < 0) return false; - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) return false; - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 5: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - if (baseGlyphIndex < 0) return false; - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) return false; - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 6: - { - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) return false; - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) return false; - let cur = this.glyphIterator.cur; - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) good = true; - else if (cur.ligatureComponent === prev.ligatureComponent) good = true; - } else // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true; - if (!good) return false; - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) return false; - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - case 7: - return this.applyContext(table); - case 8: - return this.applyChainingContext(table); - case 9: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - return { - x: x, - y: y - }; - } - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i); - this.fixMarkAttachment(); - } - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - fixMarkAttachment() { - for(let i = 0; i < this.glyphs.length; i++){ - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - if (this.direction === 'ltr') for(let k = j; k < i; k++){ - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - else for(let k = j + 1; k < i + 1; k++){ - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } -} - - -class $a62492810de27e3d$export$2e2bcd8739ae039 { - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map((glyph)=>new (0, $10e7b257e1a9a756$export$2e2bcd8739ae039)(this.font, glyph.id, [ - ...glyph.codePoints - ])); - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = $102b6fe50f1d50b4$export$7877a478dd30fd3d(script); - this.plan = new (0, $94d7a73bd2edfc9a$export$2e2bcd8739ae039)(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - // Assign chosen features to output glyph run - for(let key in this.plan.allFeatures)glyphRun.features[key] = true; - } - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions); - if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions); - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - return this.GPOSProcessor && this.GPOSProcessor.features; - } - zeroMarkAdvances(positions) { - for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - getAvailableFeatures(script, language) { - let features = []; - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - return features; - } - constructor(font){ - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - if (font.GSUB) this.GSUBProcessor = new (0, $0a876c45f1f7c41c$export$2e2bcd8739ae039)(font, font.GSUB); - if (font.GPOS) this.GPOSProcessor = new (0, $c96c93587d49c14d$export$2e2bcd8739ae039)(font, font.GPOS); - } -} - - -class $4c0a7fa5df7a9ab1$export$2e2bcd8739ae039 { - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) script = $130d1a642ebcd2b7$export$e5cb25e204fb8450(string); - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string)codePoints.push(...glyph.codePoints); - script = $130d1a642ebcd2b7$export$16fab0757cfc223d(codePoints); - } - var glyphs = string; - } - let glyphRun = new (0, $be07b3e97a42687a$export$2e2bcd8739ae039)(glyphs, features, script, language, direction); - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - // Setup the advanced layout engine - if (this.engine && this.engine.setup) this.engine.setup(glyphRun); - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) this.engine.cleanup(); - return glyphRun; - } - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun); - } - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map((glyph)=>new (0, $1ac75d9a55b67f01$export$2e2bcd8739ae039)(glyph.advanceWidth)); - let positioned = null; - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun); - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new (0, $0a4bdfeb6dfd6f5e$export$2e2bcd8739ae039)(this.font); - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) this.kernProcessor = new (0, $0bba3a9db57637f3$export$2e2bcd8739ae039)(this.font); - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) // BMP - switch(ch >> 8){ - case 0x00: - return ch === 0x00AD; - case 0x03: - return ch === 0x034F; - case 0x06: - return ch === 0x061C; - case 0x17: - return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: - return 0x180B <= ch && ch <= 0x180E; - case 0x20: - return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; - case 0xFE: - return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; - case 0xFF: - return 0xFFF0 <= ch && ch <= 0xFFF8; - default: - return false; - } - else // Other planes - switch(plane){ - case 0x01: - return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; - case 0x0E: - return 0xE0000 <= ch && ch <= 0xE0FFF; - default: - return false; - } - } - getAvailableFeatures(script, language) { - let features = []; - if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language)); - if (this.font.kern && features.indexOf('kern') === -1) features.push('kern'); - return features; - } - stringsForGlyph(gid) { - let result = new Set; - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint)); - if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string); - return Array.from(result); - } - constructor(font){ - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) this.engine = new (0, $ba6dd74203be8728$export$2e2bcd8739ae039)(this.font); - else if (this.font.GSUB || this.font.GPOS) this.engine = new (0, $a62492810de27e3d$export$2e2bcd8739ae039)(this.font); - } -} - - - - - - -const $f43aec954cdfdf21$var$SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; -class $f43aec954cdfdf21$export$2e2bcd8739ae039 { - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ toFunction() { - return (ctx)=>{ - this.commands.forEach((c)=>{ - return ctx[c.command].apply(ctx, c.args); - }); - }; - } - /** - * Converts the path to an SVG path data string - * @return {string} - */ toSVG() { - let cmds = this.commands.map((c)=>{ - let args = c.args.map((arg)=>Math.round(arg * 100) / 100); - return `${$f43aec954cdfdf21$var$SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - return cmds.join(''); - } - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ get cbox() { - if (!this._cbox) { - let cbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - for (let command of this.commands)for(let i = 0; i < command.args.length; i += 2)cbox.addPoint(command.args[i], command.args[i + 1]); - this._cbox = Object.freeze(cbox); - } - return this._cbox; - } - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ get bbox() { - if (this._bbox) return this._bbox; - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - let cx = 0, cy = 0; - let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - for (let c of this.commands)switch(c.command){ - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - var p0 = [ - cx, - cy - ]; - var p1 = [ - cp1x, - cp1y - ]; - var p2 = [ - cp2x, - cp2y - ]; - var p3 = [ - p3x, - p3y - ]; - for(var i = 0; i <= 1; i++){ - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) bbox.addPoint(f(t), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t)); - } - continue; - } - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) bbox.addPoint(f(t1), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t1)); - } - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) bbox.addPoint(f(t2), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t2)); - } - } - cx = p3x; - cy = p3y; - break; - } - return this._bbox = Object.freeze(bbox); - } - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ mapPoints(fn) { - let path = new $f43aec954cdfdf21$export$2e2bcd8739ae039; - for (let c of this.commands){ - let args = []; - for(let i = 0; i < c.args.length; i += 2){ - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - path[c.command](...args); - } - return path; - } - /** - * Transforms the path by the given matrix. - */ transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y)=>{ - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [ - tx, - ty - ]; - }); - } - /** - * Translates the path by the given offset. - */ translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - /** - * Rotates the path by the given angle (in radians). - */ rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - /** - * Scales the path. - */ scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } - constructor(){ - this.commands = []; - this._bbox = null; - this._cbox = null; - } -} -for (let command of [ - 'moveTo', - 'lineTo', - 'quadraticCurveTo', - 'bezierCurveTo', - 'closePath' -])$f43aec954cdfdf21$export$2e2bcd8739ae039.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command: command, - args: args - }); - return this; -}; - - - -var $7713b9b7b438dff8$export$2e2bcd8739ae039 = [ - '.notdef', - '.null', - 'nonmarkingreturn', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quotesingle', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'grave', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'Adieresis', - 'Aring', - 'Ccedilla', - 'Eacute', - 'Ntilde', - 'Odieresis', - 'Udieresis', - 'aacute', - 'agrave', - 'acircumflex', - 'adieresis', - 'atilde', - 'aring', - 'ccedilla', - 'eacute', - 'egrave', - 'ecircumflex', - 'edieresis', - 'iacute', - 'igrave', - 'icircumflex', - 'idieresis', - 'ntilde', - 'oacute', - 'ograve', - 'ocircumflex', - 'odieresis', - 'otilde', - 'uacute', - 'ugrave', - 'ucircumflex', - 'udieresis', - 'dagger', - 'degree', - 'cent', - 'sterling', - 'section', - 'bullet', - 'paragraph', - 'germandbls', - 'registered', - 'copyright', - 'trademark', - 'acute', - 'dieresis', - 'notequal', - 'AE', - 'Oslash', - 'infinity', - 'plusminus', - 'lessequal', - 'greaterequal', - 'yen', - 'mu', - 'partialdiff', - 'summation', - 'product', - 'pi', - 'integral', - 'ordfeminine', - 'ordmasculine', - 'Omega', - 'ae', - 'oslash', - 'questiondown', - 'exclamdown', - 'logicalnot', - 'radical', - 'florin', - 'approxequal', - 'Delta', - 'guillemotleft', - 'guillemotright', - 'ellipsis', - 'nonbreakingspace', - 'Agrave', - 'Atilde', - 'Otilde', - 'OE', - 'oe', - 'endash', - 'emdash', - 'quotedblleft', - 'quotedblright', - 'quoteleft', - 'quoteright', - 'divide', - 'lozenge', - 'ydieresis', - 'Ydieresis', - 'fraction', - 'currency', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'daggerdbl', - 'periodcentered', - 'quotesinglbase', - 'quotedblbase', - 'perthousand', - 'Acircumflex', - 'Ecircumflex', - 'Aacute', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Oacute', - 'Ocircumflex', - 'apple', - 'Ograve', - 'Uacute', - 'Ucircumflex', - 'Ugrave', - 'dotlessi', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'Lslash', - 'lslash', - 'Scaron', - 'scaron', - 'Zcaron', - 'zcaron', - 'brokenbar', - 'Eth', - 'eth', - 'Yacute', - 'yacute', - 'Thorn', - 'thorn', - 'minus', - 'multiply', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'onehalf', - 'onequarter', - 'threequarters', - 'franc', - 'Gbreve', - 'gbreve', - 'Idotaccent', - 'Scedilla', - 'scedilla', - 'Cacute', - 'cacute', - 'Ccaron', - 'ccaron', - 'dcroat' -]; - - -class $f92906be28e61769$export$2e2bcd8739ae039 { - _getPath() { - return new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039)(); - } - _getCBox() { - return this.path.cbox; - } - _getBBox() { - return this.path.bbox; - } - _getTableMetrics(table) { - if (this.id < table.metrics.length) return table.metrics.get(this.id); - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - return res; - } - _getMetrics(cbox) { - if (this._metrics) return this._metrics; - let { advance: advanceWidth, bearing: leftBearing } = this._getTableMetrics(this._font.hmtx); - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) var { advance: advanceHeight, bearing: topBearing } = this._getTableMetrics(this._font.vmtx); - else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this); - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - } else { - let { hhea: hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - return this._metrics = { - advanceWidth: advanceWidth, - advanceHeight: advanceHeight, - leftBearing: leftBearing, - topBearing: topBearing - }; - } - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ get cbox() { - return this._getCBox(); - } - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ get bbox() { - return this._getBBox(); - } - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - /** - * The glyph's advance width. - * @type {number} - */ get advanceWidth() { - return this._getMetrics().advanceWidth; - } - /** - * The glyph's advance height. - * @type {number} - */ get advanceHeight() { - return this._getMetrics().advanceHeight; - } - get ligatureCaretPositions() {} - _getName() { - let { post: post } = this._font; - if (!post) return null; - switch(post.version){ - case 1: - return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[this.id]; - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < (0, $7713b9b7b438dff8$export$2e2bcd8739ae039).length) return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[id]; - return post.names[id - (0, $7713b9b7b438dff8$export$2e2bcd8739ae039).length]; - case 2.5: - return (0, $7713b9b7b438dff8$export$2e2bcd8739ae039)[this.id + post.offsets[this.id]]; - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - /** - * The glyph's name - * @type {string} - */ get name() { - return this._getName(); - } - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ render(ctx, size) { - ctx.save(); - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - ctx.restore(); - } - constructor(id, codePoints, font){ - /** - * The glyph id in the font - * @type {number} - */ this.id = id; - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ this.codePoints = codePoints; - this._font = font; - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $52ZIf$isMark)); - this.isLigature = this.codePoints.length > 1; - } -} -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "cbox", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "path", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "advanceWidth", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "advanceHeight", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $f92906be28e61769$export$2e2bcd8739ae039.prototype, "name", null); - - - - - -// The header for both simple and composite glyphs -let $69aac16029968692$var$GlyfHeader = new $52ZIf$Struct({ - numberOfContours: $52ZIf$int16, - xMin: $52ZIf$int16, - yMin: $52ZIf$int16, - xMax: $52ZIf$int16, - yMax: $52ZIf$int16 -}); -// Flags for simple glyphs -const $69aac16029968692$var$ON_CURVE = 1; -const $69aac16029968692$var$X_SHORT_VECTOR = 2; -const $69aac16029968692$var$Y_SHORT_VECTOR = 4; -const $69aac16029968692$var$REPEAT = 8; -const $69aac16029968692$var$SAME_X = 16; -const $69aac16029968692$var$SAME_Y = 32; -// Flags for composite glyphs -const $69aac16029968692$var$ARG_1_AND_2_ARE_WORDS = 1; -const $69aac16029968692$var$ARGS_ARE_XY_VALUES = 2; -const $69aac16029968692$var$ROUND_XY_TO_GRID = 4; -const $69aac16029968692$var$WE_HAVE_A_SCALE = 8; -const $69aac16029968692$var$MORE_COMPONENTS = 32; -const $69aac16029968692$var$WE_HAVE_AN_X_AND_Y_SCALE = 64; -const $69aac16029968692$var$WE_HAVE_A_TWO_BY_TWO = 128; -const $69aac16029968692$var$WE_HAVE_INSTRUCTIONS = 256; -const $69aac16029968692$var$USE_MY_METRICS = 512; -const $69aac16029968692$var$OVERLAP_COMPOUND = 1024; -const $69aac16029968692$var$SCALED_COMPONENT_OFFSET = 2048; -const $69aac16029968692$var$UNSCALED_COMPONENT_OFFSET = 4096; -class $69aac16029968692$export$baf26146a414f24a { - copy() { - return new $69aac16029968692$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y); - } - constructor(onCurve, endContour, x = 0, y = 0){ - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } -} -// Represents a component in a composite glyph -class $69aac16029968692$var$Component { - constructor(glyphID, dx, dy){ - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} -class $69aac16029968692$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) return this.path.cbox; - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = $69aac16029968692$var$GlyfHeader.decode(stream); - let cbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039)(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) val = -val; - val += prev; - } else if (same) var val = prev; - else var val = prev + stream.readInt16BE(); - return val; - } - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) return null; - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - let glyph = $69aac16029968692$var$GlyfHeader.decode(stream); - if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream); - else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos); - return glyph; - } - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - let endPtsOfContours = new $52ZIf$Array($52ZIf$uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new $52ZIf$Array($52ZIf$uint8, $52ZIf$uint16).decode(stream); - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - while(flags.length < numCoords){ - var flag = stream.readUInt8(); - flags.push(flag); - // check for repeat flag - if (flag & $69aac16029968692$var$REPEAT) { - let count = stream.readUInt8(); - for(let j = 0; j < count; j++)flags.push(flag); - } - } - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - let point = new $69aac16029968692$export$baf26146a414f24a(!!(flag & $69aac16029968692$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - let px = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $69aac16029968692$var$X_SHORT_VECTOR, flag & $69aac16029968692$var$SAME_X); - } - let py = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $69aac16029968692$var$Y_SHORT_VECTOR, flag & $69aac16029968692$var$SAME_Y); - } - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - return; - } - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = $69aac16029968692$var$MORE_COMPONENTS; - while(flags & $69aac16029968692$var$MORE_COMPONENTS){ - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) haveInstructions = (flags & $69aac16029968692$var$WE_HAVE_INSTRUCTIONS) !== 0; - if (flags & $69aac16029968692$var$ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - var component = new $69aac16029968692$var$Component(glyphID, dx, dy); - component.pos = gPos; - if (flags & $69aac16029968692$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction - component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - else if (flags & $69aac16029968692$var$WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } else if (flags & $69aac16029968692$var$WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } - glyph.components.push(component); - } - if (this._font._variationProcessor) { - let points = []; - for(let j = 0; j < glyph.components.length; j++){ - var component = glyph.components[j]; - points.push(new $69aac16029968692$export$baf26146a414f24a(true, true, component.dx, component.dy)); - } - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - for(let i = 0; i < points.length; i++){ - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - return haveInstructions; - } - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) this._metrics = (0, $f92906be28e61769$export$2e2bcd8739ae039).prototype._getMetrics.call(this, cbox); - let { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing } = this._metrics; - return [ - new $69aac16029968692$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0), - new $69aac16029968692$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new $69aac16029968692$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing), - new $69aac16029968692$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) return []; - let points = []; - if (glyph.numberOfContours < 0) // resolve composite glyphs - for (let component of glyph.components){ - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - for(let j = 0; j < contour.length; j++){ - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new $69aac16029968692$export$baf26146a414f24a(point.onCurve, point.endContour, x, y)); - } - } - } - else points = glyph.points || []; - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - let contours = []; - let cur = []; - for(let k = 0; k < points.length; k++){ - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - return contours; - } - _getMetrics() { - if (this._metrics) return this._metrics; - let cbox = this._getCBox(true); - super._getMetrics(cbox); - if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - return this._metrics; - } - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - else // Start at the middle if both the first and last points are off curve - firstPt = new $69aac16029968692$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - var curvePt = firstPt; - } - path.moveTo(firstPt.x, firstPt.y); - for(let j = start; j < contour.length; j++){ - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y); - else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt; - else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - } else throw new Error("Unknown TTF path state"); - } - // Connect the first and last points - if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - path.closePath(); - } - return path; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'TTF'); - } -} - - - - - -class $62cc5109c6101893$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - _getName() { - if (this._font.CFF2) return super._getName(); - return this._font['CFF '].getGlyphName(this.id); - } - bias(s) { - if (s.length < 1240) return 107; - else if (s.length < 33900) return 1131; - else return 32768; - } - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream: stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - let path = new (0, $f43aec954cdfdf21$export$2e2bcd8739ae039); - let stack = []; - let trans = []; - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - function checkWidth() { - if (width == null) width = stack.shift() + privateDict.nominalWidthX; - } - function parseStems() { - if (stack.length % 2 !== 0) checkWidth(); - nStems += stack.length >> 1; - return stack.length = 0; - } - function moveTo(x, y) { - if (open) path.closePath(); - path.moveTo(x, y); - open = true; - } - let parse = function() { - while(stream.pos < end){ - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - switch(op){ - case 1: - case 3: - case 18: - case 23: - parseStems(); - break; - case 4: - if (stack.length > 1) checkWidth(); - y += stack.shift(); - moveTo(x, y); - break; - case 5: - while(stack.length >= 2){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - case 6: - case 7: - phase = op === 6; - while(stack.length >= 1){ - if (phase) x += stack.shift(); - else y += stack.shift(); - path.lineTo(x, y); - phase = !phase; - } - break; - case 8: - while(stack.length > 0){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 11: - if (cff.version >= 2) break; - return; - case 14: - if (cff.version >= 2) break; - if (stack.length > 0) checkWidth(); - if (open) { - path.closePath(); - open = false; - } - break; - case 15: - if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1'); - vsindex = stack.pop(); - break; - case 16: - { - if (cff.version < 2) throw new Error('blend operator not supported in CFF v1'); - if (!variationProcessor) throw new Error('blend operator in non-variation font'); - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - for(let i = 0; i < numBlends; i++){ - let sum = stack[base + i]; - for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++]; - stack[base + i] = sum; - } - while(numOperands--)stack.pop(); - break; - } - case 19: - case 20: - parseStems(); - stream.pos += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2) checkWidth(); - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - case 22: - if (stack.length > 1) checkWidth(); - x += stack.shift(); - moveTo(x, y); - break; - case 24: - while(stack.length >= 8){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - case 25: - while(stack.length >= 8){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while(stack.length >= 4){ - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while(stack.length >= 4){ - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - stack.push(stream.readInt16BE()); - break; - case 29: - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 30: - case 31: - phase = op === 31; - while(stack.length >= 4){ - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - case 12: - op = stream.readUInt8(); - switch(op){ - case 3: - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - case 4: - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - case 5: - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - case 9: - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case 10: - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - case 11: - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - case 12: - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - case 14: - a = stack.pop(); - stack.push(-a); - break; - case 15: - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - case 18: - stack.pop(); - break; - case 20: - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - case 21: - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - case 22: - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - case 23: - stack.push(Math.random()); - break; - case 24: - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - case 26: - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case 27: - a = stack.pop(); - stack.push(a, a); - break; - case 28: - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - case 29: - idx = stack.pop(); - if (idx < 0) idx = 0; - else if (idx > stack.length - 1) idx = stack.length - 1; - stack.push(stack[idx]); - break; - case 30: - let n = stack.pop(); - let j = stack.pop(); - if (j >= 0) while(j > 0){ - var t = stack[n - 1]; - for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i]; - stack[0] = t; - j--; - } - else while(j < 0){ - var t = stack[0]; - for(let i = 0; i <= n; i++)stack[i] = stack[i + 1]; - stack[n - 1] = t; - j++; - } - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 35: - pts = []; - for(let i = 0; i <= 5; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 37: - let startx = x; - let starty = y; - pts = []; - for(let i = 0; i <= 4; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - if (Math.abs(x - startx) > Math.abs(y - starty)) { - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - default: - throw new Error(`Unknown op: ${op}`); - } - } else if (op < 247) stack.push(op - 139); - else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else stack.push(stream.readInt32BE() / 65536); - } - }; - parse(); - if (open) path.closePath(); - return path; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'CFF'); - } -} - - - - - -let $25d8f049c222084c$var$SBIXImage = new $52ZIf$Struct({ - originX: $52ZIf$uint16, - originY: $52ZIf$uint16, - type: new $52ZIf$String(4), - data: new $52ZIf$Buffer((t)=>t.parent.buflen - t._currentOffset) -}); -class $25d8f049c222084c$export$2e2bcd8739ae039 extends (0, $69aac16029968692$export$2e2bcd8739ae039) { - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ getImageForSize(size) { - for(let i = 0; i < this._font.sbix.imageTables.length; i++){ - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) break; - } - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - if (start === end) return null; - this._font.stream.pos = start; - return $25d8f049c222084c$var$SBIXImage.decode(this._font.stream, { - buflen: end - start - }); - } - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, { - height: size, - x: img.originX, - y: (this.bbox.minY - img.originY) * scale - }); - } - if (this._font.sbix.flags.renderOutlines) super.render(ctx, size); - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'SBIX'); - } -} - - - - - -class $0d411f0165859681$var$COLRLayer { - constructor(glyph, color){ - this.glyph = glyph; - this.color = color; - } -} -class $0d411f0165859681$export$2e2bcd8739ae039 extends (0, $f92906be28e61769$export$2e2bcd8739ae039) { - _getBBox() { - let bbox = new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039); - for(let i = 0; i < this.layers.length; i++){ - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - return bbox; - } - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - while(low <= high){ - let mid = low + high >> 1; - var rec = colr.baseGlyphRecord[mid]; - if (this.id < rec.gid) high = mid - 1; - else if (this.id > rec.gid) low = mid + 1; - else { - var baseLayer = rec; - break; - } - } - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - return [ - new $0d411f0165859681$var$COLRLayer(g, color) - ]; - } - // otherwise, return an array of all the layers - let layers = []; - for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){ - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new $0d411f0165859681$var$COLRLayer(g, color)); - } - return layers; - } - render(ctx, size) { - for (let { glyph: glyph, color: color } of this.layers){ - ctx.fillColor([ - color.red, - color.green, - color.blue - ], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - return; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'COLR'); - } -} - - -const $0bb840cac04e911b$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const $0bb840cac04e911b$var$TUPLE_COUNT_MASK = 0x0fff; -const $0bb840cac04e911b$var$EMBEDDED_TUPLE_COORD = 0x8000; -const $0bb840cac04e911b$var$INTERMEDIATE_TUPLE = 0x4000; -const $0bb840cac04e911b$var$PRIVATE_POINT_NUMBERS = 0x2000; -const $0bb840cac04e911b$var$TUPLE_INDEX_MASK = 0x0fff; -const $0bb840cac04e911b$var$POINTS_ARE_WORDS = 0x80; -const $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK = 0x7f; -const $0bb840cac04e911b$var$DELTAS_ARE_ZERO = 0x80; -const $0bb840cac04e911b$var$DELTAS_ARE_WORDS = 0x40; -const $0bb840cac04e911b$var$DELTA_RUN_COUNT_MASK = 0x3f; -class $0bb840cac04e911b$export$2e2bcd8739ae039 { - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for(var i = 0; i < this.font.fvar.axis.length; i++){ - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){ - let segment = this.font.avar.segment[i]; - for(let j = 0; j < segment.correspondence.length; j++){ - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord; - break; - } - } - } - return normalized; - } - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) return; - let { gvar: gvar } = this.font; - if (gid >= gvar.glyphCount) return; - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) return; - // Read the gvar data for this glyph - let { stream: stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) return; - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - if (tupleCount & $0bb840cac04e911b$var$TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - let origPoints = glyphPoints.map((pt)=>pt.copy()); - tupleCount &= $0bb840cac04e911b$var$TUPLE_COUNT_MASK; - for(let i = 0; i < tupleCount; i++){ - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - if (tupleIndex & $0bb840cac04e911b$var$EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384); - } else { - if ((tupleIndex & $0bb840cac04e911b$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table'); - var tupleCoords = gvar.globalCoords[tupleIndex & $0bb840cac04e911b$var$TUPLE_INDEX_MASK]; - } - if (tupleIndex & $0bb840cac04e911b$var$INTERMEDIATE_TUPLE) { - var startCoords = []; - for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384); - var endCoords = []; - for(let a = 0; a < gvar.axisCount; a++)endCoords.push(stream.readInt16BE() / 16384); - } - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - var here = stream.pos; - stream.pos = offsetToData; - if (tupleIndex & $0bb840cac04e911b$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints(); - else var points = sharedPoints; - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){ - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - else { - let outPoints = origPoints.map((pt)=>pt.copy()); - let hasDelta = glyphPoints.map(()=>false); - for(let i = 0; i < points.length; i++){ - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - for(let i = 0; i < glyphPoints.length; i++){ - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - offsetToData += tupleDataSize; - stream.pos = here; - } - } - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - if (count & $0bb840cac04e911b$var$POINTS_ARE_WORDS) count = (count & $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $0bb840cac04e911b$var$POINT_RUN_COUNT_MASK) + 1; - let fn = run & $0bb840cac04e911b$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - for(let j = 0; j < runCount && i < count; j++){ - point += fn.call(stream); - points[i++] = point; - } - } - return points; - } - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $0bb840cac04e911b$var$DELTA_RUN_COUNT_MASK) + 1; - if (run & $0bb840cac04e911b$var$DELTAS_ARE_ZERO) i += runCount; - else { - let fn = run & $0bb840cac04e911b$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream); - } - } - return deltas; - } - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar: gvar } = this.font; - let factor = 1; - for(let i = 0; i < gvar.axisCount; i++){ - if (tupleCoords[i] === 0) continue; - if (normalized[i] === 0) return 0; - if ((tupleIndex & $0bb840cac04e911b$var$INTERMEDIATE_TUPLE) === 0) { - if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0; - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0; - else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - return factor; - } - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) return; - let point = 0; - while(point < points.length){ - let firstPoint = point; - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while(!pt.endContour)pt = points[++endPoint]; - // find the first point that has a delta - while(point <= endPoint && !hasDelta[point])point++; - if (point > endPoint) continue; - let firstDelta = point; - let curDelta = point; - point++; - while(point <= endPoint){ - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - point++; - } - // shift contour if we only have a single delta - if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - point = endPoint + 1; - } - } - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) return; - let iterable = [ - 'x', - 'y' - ]; - for(let i = 0; i < iterable.length; i++){ - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - for(let p = p1; p <= p2; p++){ - let out = inPoints[p][k]; - if (out <= in1) out += out1 - in1; - else if (out >= in2) out += out2 - in2; - else out = out1 + (out - in1) * scale; - outPoints[p][k] = out; - } - } - } - } - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - if (deltaX === 0 && deltaY === 0) return; - for(let p = p1; p <= p2; p++)if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1; - let entryFormat = table.advanceWidthMapping.entryFormat; - ({ outerIndex: outerIndex, innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) return 0; - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) return 0; - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master]; - return netAdjustment; - } - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) return this.blendVectors.get(varData); - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - // outer loop steps through master designs to be blended - for(let master = 0; master < varData.regionIndexCount; master++){ - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - // inner loop steps through axes in this region - for(let j = 0; j < axes.length; j++){ - let axis = axes[j]; - let axisScalar; - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1; - else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1; - else if (axis.peakCoord === 0) axisScalar = 1; - else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0; - else { - if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1; - else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON); - else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - // take product of all the axis scalars - scalar *= axisScalar; - } - blendVector[master] = scalar; - } - this.blendVectors.set(varData, blendVector); - return blendVector; - } - constructor(font, coords){ - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } -} - - - - -const $5cc7476da92df375$var$resolved = Promise.resolve(); -class $5cc7476da92df375$export$2e2bcd8739ae039 { - includeGlyph(glyph) { - if (typeof glyph === 'object') glyph = glyph.id; - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - return this.mapping[glyph]; - } - constructor(font){ - this.font = font; - this.glyphs = []; - this.mapping = {}; - // always include the missing glyph - this.includeGlyph(0); - } -} - - - - - -// Flags for simple glyphs -const $807e58506be70005$var$ON_CURVE = 1; -const $807e58506be70005$var$X_SHORT_VECTOR = 2; -const $807e58506be70005$var$Y_SHORT_VECTOR = 4; -const $807e58506be70005$var$REPEAT = 8; -const $807e58506be70005$var$SAME_X = 16; -const $807e58506be70005$var$SAME_Y = 32; -class $807e58506be70005$var$Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - static encode(stream, value) { - if (value >= 0 && value <= 255) stream.writeUInt8(value); - else stream.writeInt16BE(value); - } -} -let $807e58506be70005$var$Glyf = new $52ZIf$Struct({ - numberOfContours: $52ZIf$int16, - xMin: $52ZIf$int16, - yMin: $52ZIf$int16, - xMax: $52ZIf$int16, - yMax: $52ZIf$int16, - endPtsOfContours: new $52ZIf$Array($52ZIf$uint16, 'numberOfContours'), - instructions: new $52ZIf$Array($52ZIf$uint8, $52ZIf$uint16), - flags: new $52ZIf$Array($52ZIf$uint8, 0), - xPoints: new $52ZIf$Array($807e58506be70005$var$Point, 0), - yPoints: new $52ZIf$Array($807e58506be70005$var$Point, 0) -}); -class $807e58506be70005$export$2e2bcd8739ae039 { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - for(let i = 0; i < path.commands.length; i++){ - let c = path.commands[i]; - for(let j = 0; j < c.args.length; j += 2){ - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - if (x === midX && y === midY) continue; - } - } - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $807e58506be70005$var$ON_CURVE; - flag = this._encodePoint(x, lastX, xPoints, flag, $807e58506be70005$var$X_SHORT_VECTOR, $807e58506be70005$var$SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, $807e58506be70005$var$Y_SHORT_VECTOR, $807e58506be70005$var$SAME_Y); - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= $807e58506be70005$var$REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - flags.push(flag); - lastFlag = flag; - } - lastX = x; - lastY = y; - pointCount++; - } - if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1); - } - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1); - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - let size = $807e58506be70005$var$Glyf.size(glyf); - let tail = 4 - size % 4; - let stream = new $52ZIf$EncodeStream(size + tail); - $807e58506be70005$var$Glyf.encode(stream, glyf); - // Align to 4-byte length - if (tail !== 0) stream.fill(0, tail); - return stream.buffer; - } - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - if (value === last) flag |= sameFlag; - else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) diff = -diff; - else flag |= sameFlag; - } - points.push(diff); - } - return flag; - } -} - - -class $4abbb6a5dbdc441a$export$2e2bcd8739ae039 extends (0, $5cc7476da92df375$export$2e2bcd8739ae039) { - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - let buffer = stream.readBuffer(nextOffset - curOffset); - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components){ - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - this.offset += buffer.length; - return this.glyf.length - 1; - } - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - this.hmtx = { - metrics: [], - bearings: [] - }; - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]); - let maxp = (0, $52ZIf$clone)(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - this.loca.offsets.push(this.offset); - let head = (0, $52ZIf$clone)(this.font.head); - head.indexToLocFormat = this.loca.version; - let hhea = (0, $52ZIf$clone)(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - // TODO: subset prep, cvt, fpgm? - return (0, $816c07a04b6dba87$export$2e2bcd8739ae039).toBuffer({ - tables: { - head: head, - hhea: hhea, - loca: this.loca, - maxp: maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - } - }); - } - constructor(font){ - super(font); - this.glyphEncoder = new (0, $807e58506be70005$export$2e2bcd8739ae039); - } -} - - - - - - -class $001d739428a71d5a$export$2e2bcd8739ae039 extends (0, $5cc7476da92df375$export$2e2bcd8739ae039) { - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - for (let gid of this.glyphs){ - this.charstrings.push(this.cff.getCharString(gid)); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedGsubrs)gsubrs[subr] = true; - } - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - subsetSubrs(subrs, used) { - let res = []; - for(let i = 0; i < subrs.length; i++){ - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else res.push(new Uint8Array([ - 11 - ])); // return - } - return res; - } - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs){ - let fd = this.cff.fdForGlyph(gid); - if (fd == null) continue; - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true; - } - for(let i = 0; i < topDict.FDArray.length; i++){ - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - return; - } - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs){ - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[subr] = true; - } - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - topDict.FDArray = [ - { - Private: privateDict - } - ]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [ - { - first: 0, - fd: 0 - } - ], - sentinel: this.charstrings.length - }; - } - addString(string) { - if (!string) return null; - if (!this.strings) this.strings = []; - this.strings.push(string); - return (0, $229224aec43783c5$export$2e2bcd8739ae039).length + this.strings.length - 1; - } - encode() { - this.subsetCharstrings(); - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [ - { - first: 1, - nLeft: this.charstrings.length - 2 - } - ] - }; - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - for (let key of [ - 'version', - 'Notice', - 'Copyright', - 'FullName', - 'FamilyName', - 'Weight', - 'PostScript', - 'BaseFontName', - 'FontName' - ])topDict[key] = this.addString(this.cff.string(topDict[key])); - topDict.ROS = [ - this.addString('Adobe'), - this.addString('Identity'), - 0 - ]; - topDict.CIDCount = this.charstrings.length; - if (this.cff.isCIDFont) this.subsetFontdict(topDict); - else this.createCIDFontdict(topDict); - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [ - this.cff.postscriptName - ], - topDictIndex: [ - topDict - ], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - return (0, $b84fd3dd9d8eddb2$export$2e2bcd8739ae039).toBuffer(top); - } - constructor(font){ - super(font); - this.cff = this.font['CFF ']; - if (!this.cff) throw new Error('Not a CFF Font'); - } -} - - - - -class $4c1709dee528ea76$export$2e2bcd8739ae039 { - static probe(buffer) { - let format = (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - _getTable(table) { - if (!(table.tag in this._tables)) try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if ($d636bc798e7178db$export$bd5c5d8b8dcafd78) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - return this._tables[table.tag]; - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - return null; - } - _decodeDirectory() { - return this.directory = (0, $816c07a04b6dba87$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _decodeTable(table) { - let pos = this.stream.pos; - let stream = this._getTableStream(table.tag); - let result = (0, $c3395722bea751e2$export$2e2bcd8739ae039)[table.tag].decode(stream, this, table.length); - this.stream.pos = pos; - return result; - } - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ getName(key, lang = this.defaultLanguage || $d636bc798e7178db$export$42940898df819940) { - let record = this.name && this.name.records[key]; - if (record) // Attempt to retrieve the entry, depending on which translation is available: - return record[lang] || record[this.defaultLanguage] || record[$d636bc798e7178db$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null; - return null; - } - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ get postscriptName() { - return this.getName('postscriptName'); - } - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ get fullName() { - return this.getName('fullName'); - } - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ get familyName() { - return this.getName('fontFamily'); - } - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ get subfamilyName() { - return this.getName('fontSubfamily'); - } - /** - * The font's copyright information - * @type {string} - */ get copyright() { - return this.getName('copyright'); - } - /** - * The font's version number - * @type {string} - */ get version() { - return this.getName('version'); - } - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ get ascent() { - return this.hhea.ascent; - } - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ get descent() { - return this.hhea.descent; - } - /** - * The amount of space that should be included between lines - * @type {number} - */ get lineGap() { - return this.hhea.lineGap; - } - /** - * The offset from the normal underline position that should be used - * @type {number} - */ get underlinePosition() { - return this.post.underlinePosition; - } - /** - * The weight of the underline that should be used - * @type {number} - */ get underlineThickness() { - return this.post.underlineThickness; - } - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ get italicAngle() { - return this.post.italicAngle; - } - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - /** - * The number of glyphs in the font. - * @type {number} - */ get numGlyphs() { - return this.maxp.numGlyphs; - } - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ get unitsPerEm() { - return this.head.unitsPerEm; - } - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ get bbox() { - return Object.freeze(new (0, $f34600ab9d7f70d8$export$2e2bcd8739ae039)(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - get _cmapProcessor() { - return new (0, $f08dd41ef10b694c$export$2e2bcd8739ae039)(this.cmap); - } - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [ - codePoint - ]); - } - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - while(idx <= len){ - let code = 0; - let nextState = 0; - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; - } else idx++; - if (state === 0 && nextState === 1) // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [ - last, - code - ])); - else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - last = code; - state = nextState; - } - return glyphs; - } - get _layoutEngine() { - return new (0, $4c0a7fa5df7a9ab1$export$2e2bcd8739ae039)(this); - } - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) this._glyphs[glyph] = new (0, $69aac16029968692$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new (0, $62cc5109c6101893$export$2e2bcd8739ae039)(glyph, characters, this); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) this._glyphs[glyph] = new (0, $25d8f049c222084c$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new (0, $0d411f0165859681$export$2e2bcd8739ae039)(glyph, characters, this); - else this._getBaseGlyph(glyph, characters); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a Subset for this font. - * @return {Subset} - */ createSubset() { - if (this.directory.tables['CFF ']) return new (0, $001d739428a71d5a$export$2e2bcd8739ae039)(this); - return new (0, $4abbb6a5dbdc441a$export$2e2bcd8739ae039)(this); - } - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ get variationAxes() { - let res = {}; - if (!this.fvar) return res; - for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - return res; - } - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ get namedVariations() { - let res = {}; - if (!this.fvar) return res; - for (let instance of this.fvar.instance){ - let settings = {}; - for(let i = 0; i < this.fvar.axis.length; i++){ - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - res[instance.name.en] = settings; - } - return res; - } - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ getVariation(settings) { - if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - if (typeof settings === 'string') settings = this.namedVariations[settings]; - if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.'); - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i)=>{ - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - else return axis.defaultValue; - }); - let stream = new $52ZIf$DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - let font = new $4c1709dee528ea76$export$2e2bcd8739ae039(stream, coords); - font._tables = this._tables; - return font; - } - get _variationProcessor() { - if (!this.fvar) return null; - let variationCoords = this.variationCoords; - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) return null; - if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue); - return new (0, $0bb840cac04e911b$export$2e2bcd8739ae039)(this, variationCoords); - } - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } - constructor(stream, variationCoords = null){ - (0, $52ZIf$_)(this, "type", 'TTF'); - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - // define properties for each table to lazily parse - for(let tag in this.directory.tables){ - let table = this.directory.tables[tag]; - if ((0, $c3395722bea751e2$export$2e2bcd8739ae039)[tag] && table.length > 0) Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } -} -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_cmapProcessor", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "characterSet", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_layoutEngine", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "variationAxes", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "namedVariations", null); -(0, $52ZIf$_1)([ - (0, $e71565f2ce09cb6b$export$69a3209f1a06c04d) -], $4c1709dee528ea76$export$2e2bcd8739ae039.prototype, "_variationProcessor", null); - - - - - - -let $c1726355ecc5b889$var$WOFFDirectoryEntry = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - offset: new $52ZIf$Pointer($52ZIf$uint32, 'void', { - type: 'global' - }), - compLength: $52ZIf$uint32, - length: $52ZIf$uint32, - origChecksum: $52ZIf$uint32 -}); -let $c1726355ecc5b889$var$WOFFDirectory = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - flavor: $52ZIf$uint32, - length: $52ZIf$uint32, - numTables: $52ZIf$uint16, - reserved: new $52ZIf$Reserved($52ZIf$uint16), - totalSfntSize: $52ZIf$uint32, - majorVersion: $52ZIf$uint16, - minorVersion: $52ZIf$uint16, - metaOffset: $52ZIf$uint32, - metaLength: $52ZIf$uint32, - metaOrigLength: $52ZIf$uint32, - privOffset: $52ZIf$uint32, - privLength: $52ZIf$uint32, - tables: new $52ZIf$Array($c1726355ecc5b889$var$WOFFDirectoryEntry, 'numTables') -}); -$c1726355ecc5b889$var$WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -var $c1726355ecc5b889$export$2e2bcd8739ae039 = $c1726355ecc5b889$var$WOFFDirectory; - - - - - - -class $760785214b9fc52c$export$2e2bcd8739ae039 extends (0, $4c1709dee528ea76$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOFF'; - } - _decodeDirectory() { - this.directory = (0, $c1726355ecc5b889$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = (0, $52ZIf$tinyinflate)(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new $52ZIf$DecodeStream(buf); - } else return this.stream; - } - return null; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'WOFF'); - } -} - - - - - - - - - -class $8046190c9f1ad19e$export$2e2bcd8739ae039 extends (0, $69aac16029968692$export$2e2bcd8739ae039) { - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - _getCBox() { - return this.path.bbox; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'WOFF2'); - } -} - - - -const $c28ec7bbb3b8de3a$var$Base128 = { - decode (stream) { - let result = 0; - let iterable = [ - 0, - 1, - 2, - 3, - 4 - ]; - for(let j = 0; j < iterable.length; j++){ - let i = iterable[j]; - let code = stream.readUInt8(); - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) throw new Error('Overflow'); - result = result << 7 | code & 0x7f; - if ((code & 0x80) === 0) return result; - } - throw new Error('Bad base 128 number'); - } -}; -let $c28ec7bbb3b8de3a$var$knownTags = [ - 'cmap', - 'head', - 'hhea', - 'hmtx', - 'maxp', - 'name', - 'OS/2', - 'post', - 'cvt ', - 'fpgm', - 'glyf', - 'loca', - 'prep', - 'CFF ', - 'VORG', - 'EBDT', - 'EBLC', - 'gasp', - 'hdmx', - 'kern', - 'LTSH', - 'PCLT', - 'VDMX', - 'vhea', - 'vmtx', - 'BASE', - 'GDEF', - 'GPOS', - 'GSUB', - 'EBSC', - 'JSTF', - 'MATH', - 'CBDT', - 'CBLC', - 'COLR', - 'CPAL', - 'SVG ', - 'sbix', - 'acnt', - 'avar', - 'bdat', - 'bloc', - 'bsln', - 'cvar', - 'fdsc', - 'feat', - 'fmtx', - 'fvar', - 'gvar', - 'hsty', - 'just', - 'lcar', - 'mort', - 'morx', - 'opbd', - 'prop', - 'trak', - 'Zapf', - 'Silf', - 'Glat', - 'Gloc', - 'Feat', - 'Sill' -]; -let $c28ec7bbb3b8de3a$var$WOFF2DirectoryEntry = new $52ZIf$Struct({ - flags: $52ZIf$uint8, - customTag: new $52ZIf$Optional(new $52ZIf$String(4), (t)=>(t.flags & 0x3f) === 0x3f), - tag: (t)=>t.customTag || $c28ec7bbb3b8de3a$var$knownTags[t.flags & 0x3f], - length: $c28ec7bbb3b8de3a$var$Base128, - transformVersion: (t)=>t.flags >>> 6 & 0x03, - transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new $52ZIf$Optional($c28ec7bbb3b8de3a$var$Base128, (t)=>t.transformed) -}); -let $c28ec7bbb3b8de3a$var$WOFF2Directory = new $52ZIf$Struct({ - tag: new $52ZIf$String(4), - flavor: $52ZIf$uint32, - length: $52ZIf$uint32, - numTables: $52ZIf$uint16, - reserved: new $52ZIf$Reserved($52ZIf$uint16), - totalSfntSize: $52ZIf$uint32, - totalCompressedSize: $52ZIf$uint32, - majorVersion: $52ZIf$uint16, - minorVersion: $52ZIf$uint16, - metaOffset: $52ZIf$uint32, - metaLength: $52ZIf$uint32, - metaOrigLength: $52ZIf$uint32, - privOffset: $52ZIf$uint32, - privLength: $52ZIf$uint32, - tables: new $52ZIf$Array($c28ec7bbb3b8de3a$var$WOFF2DirectoryEntry, 'numTables') -}); -$c28ec7bbb3b8de3a$var$WOFF2Directory.process = function() { - let tables = {}; - for(let i = 0; i < this.tables.length; i++){ - let table = this.tables[i]; - tables[table.tag] = table; - } - return this.tables = tables; -}; -var $c28ec7bbb3b8de3a$export$2e2bcd8739ae039 = $c28ec7bbb3b8de3a$var$WOFF2Directory; - - - -class $21ee218f84ac7f32$export$2e2bcd8739ae039 extends (0, $4c1709dee528ea76$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOF2'; - } - _decodeDirectory() { - this.directory = (0, $c28ec7bbb3b8de3a$export$2e2bcd8739ae039).decode(this.stream); - this._dataPos = this.stream.pos; - } - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - let decompressedSize = 0; - for(let tag in this.directory.tables){ - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; - } - let decompressed = (0, $52ZIf$brotlidecompressjs)(buffer, decompressedSize); - if (!decompressed) throw new Error('Error decoding compressed data in WOFF2'); - this.stream = new $52ZIf$DecodeStream(decompressed); - this._decompressed = true; - } - } - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) this._transformGlyfTable(); - return this._glyphs[glyph] = new (0, $8046190c9f1ad19e$export$2e2bcd8739ae039)(glyph, characters, this); - } else return super._getBaseGlyph(glyph, characters); - } - } - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = $21ee218f84ac7f32$var$GlyfTable.decode(this.stream); - let glyphs = []; - for(let index = 0; index < table.numGlyphs; index++){ - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - if (nContours > 0) { - let nPoints = []; - let totalPoints = 0; - for(let i = 0; i < nContours; i++){ - let r = $21ee218f84ac7f32$var$read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - glyph.points = $21ee218f84ac7f32$var$decodeTriplet(table.flags, table.glyphs, totalPoints); - for(let i = 0; i < nContours; i++)glyph.points[nPoints[i] - 1].endContour = true; - var instructionSize = $21ee218f84ac7f32$var$read255UInt16(table.glyphs); - } else if (nContours < 0) { - let haveInstructions = (0, $69aac16029968692$export$2e2bcd8739ae039).prototype._decodeComposite.call({ - _font: this - }, glyph, table.composites); - if (haveInstructions) var instructionSize = $21ee218f84ac7f32$var$read255UInt16(table.glyphs); - } - glyphs.push(glyph); - } - this._transformedGlyphs = glyphs; - } - constructor(...args){ - super(...args); - (0, $52ZIf$_)(this, "type", 'WOFF2'); - } -} -// Special class that accepts a length and returns a sub-stream for that data -class $21ee218f84ac7f32$var$Substream { - decode(stream, parent) { - return new $52ZIf$DecodeStream(this._buf.decode(stream, parent)); - } - constructor(length){ - this.length = length; - this._buf = new $52ZIf$Buffer(length); - } -} -// This struct represents the entire glyf table -let $21ee218f84ac7f32$var$GlyfTable = new $52ZIf$Struct({ - version: $52ZIf$uint32, - numGlyphs: $52ZIf$uint16, - indexFormat: $52ZIf$uint16, - nContourStreamSize: $52ZIf$uint32, - nPointsStreamSize: $52ZIf$uint32, - flagStreamSize: $52ZIf$uint32, - glyphStreamSize: $52ZIf$uint32, - compositeStreamSize: $52ZIf$uint32, - bboxStreamSize: $52ZIf$uint32, - instructionStreamSize: $52ZIf$uint32, - nContours: new $21ee218f84ac7f32$var$Substream('nContourStreamSize'), - nPoints: new $21ee218f84ac7f32$var$Substream('nPointsStreamSize'), - flags: new $21ee218f84ac7f32$var$Substream('flagStreamSize'), - glyphs: new $21ee218f84ac7f32$var$Substream('glyphStreamSize'), - composites: new $21ee218f84ac7f32$var$Substream('compositeStreamSize'), - bboxes: new $21ee218f84ac7f32$var$Substream('bboxStreamSize'), - instructions: new $21ee218f84ac7f32$var$Substream('instructionStreamSize') -}); -const $21ee218f84ac7f32$var$WORD_CODE = 253; -const $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE2 = 254; -const $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE1 = 255; -const $21ee218f84ac7f32$var$LOWEST_U_CODE = 253; -function $21ee218f84ac7f32$var$read255UInt16(stream) { - let code = stream.readUInt8(); - if (code === $21ee218f84ac7f32$var$WORD_CODE) return stream.readUInt16BE(); - if (code === $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $21ee218f84ac7f32$var$LOWEST_U_CODE; - if (code === $21ee218f84ac7f32$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $21ee218f84ac7f32$var$LOWEST_U_CODE * 2; - return code; -} -function $21ee218f84ac7f32$var$withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} -function $21ee218f84ac7f32$var$decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - for(let i = 0; i < nPoints; i++){ - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - if (flag < 10) { - dx = 0; - dy = $21ee218f84ac7f32$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - } else if (flag < 20) { - dx = $21ee218f84ac7f32$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); - dy = 0; - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = $21ee218f84ac7f32$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - } else if (flag < 120) { - var b0 = flag - 84; - dx = $21ee218f84ac7f32$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = $21ee218f84ac7f32$var$withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - } else { - dx = $21ee218f84ac7f32$var$withSign(flag, glyphs.readUInt16BE()); - dy = $21ee218f84ac7f32$var$withSign(flag >> 1, glyphs.readUInt16BE()); - } - x += dx; - y += dy; - res.push(new (0, $69aac16029968692$export$baf26146a414f24a)(onCurve, false, x, y)); - } - return res; -} - - - - - - - - -let $cd5853a56c68fec7$var$TTCHeader = new $52ZIf$VersionedStruct($52ZIf$uint32, { - 0x00010000: { - numFonts: $52ZIf$uint32, - offsets: new $52ZIf$Array($52ZIf$uint32, 'numFonts') - }, - 0x00020000: { - numFonts: $52ZIf$uint32, - offsets: new $52ZIf$Array($52ZIf$uint32, 'numFonts'), - dsigTag: $52ZIf$uint32, - dsigLength: $52ZIf$uint32, - dsigOffset: $52ZIf$uint32 - } -}); -class $cd5853a56c68fec7$export$2e2bcd8739ae039 { - static probe(buffer) { - return (0, $12727730ddfc8bfe$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'ttcf'; - } - getFont(name) { - for (let offset of this.header.offsets){ - let stream = new $52ZIf$DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let offset of this.header.offsets){ - let stream = new $52ZIf$DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $52ZIf$_)(this, "type", 'TTC'); - this.stream = stream; - if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection'); - this.header = $cd5853a56c68fec7$var$TTCHeader.decode(stream); - } -} - - - - - -let $05f49f930186144e$var$DFontName = new $52ZIf$String($52ZIf$uint8); -let $05f49f930186144e$var$DFontData = new $52ZIf$Struct({ - len: $52ZIf$uint32, - buf: new $52ZIf$Buffer('len') -}); -let $05f49f930186144e$var$Ref = new $52ZIf$Struct({ - id: $52ZIf$uint16, - nameOffset: $52ZIf$int16, - attr: $52ZIf$uint8, - dataOffset: $52ZIf$uint24, - handle: $52ZIf$uint32 -}); -let $05f49f930186144e$var$Type = new $52ZIf$Struct({ - name: new $52ZIf$String(4), - maxTypeIndex: $52ZIf$uint16, - refList: new $52ZIf$Pointer($52ZIf$uint16, new $52ZIf$Array($05f49f930186144e$var$Ref, (t)=>t.maxTypeIndex + 1), { - type: 'parent' - }) -}); -let $05f49f930186144e$var$TypeList = new $52ZIf$Struct({ - length: $52ZIf$uint16, - types: new $52ZIf$Array($05f49f930186144e$var$Type, (t)=>t.length + 1) -}); -let $05f49f930186144e$var$DFontMap = new $52ZIf$Struct({ - reserved: new $52ZIf$Reserved($52ZIf$uint8, 24), - typeList: new $52ZIf$Pointer($52ZIf$uint16, $05f49f930186144e$var$TypeList), - nameListOffset: new $52ZIf$Pointer($52ZIf$uint16, 'void') -}); -let $05f49f930186144e$var$DFontHeader = new $52ZIf$Struct({ - dataOffset: $52ZIf$uint32, - map: new $52ZIf$Pointer($52ZIf$uint32, $05f49f930186144e$var$DFontMap), - dataLength: $52ZIf$uint32, - mapLength: $52ZIf$uint32 -}); -class $05f49f930186144e$export$2e2bcd8739ae039 { - static probe(buffer) { - let stream = new $52ZIf$DecodeStream(buffer); - try { - var header = $05f49f930186144e$var$DFontHeader.decode(stream); - } catch (e) { - return false; - } - for (let type of header.map.typeList.types){ - if (type.name === 'sfnt') return true; - } - return false; - } - getFont(name) { - if (!this.sfnt) return null; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $52ZIf$DecodeStream(this.stream.buffer.slice(pos)); - let font = new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $52ZIf$DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new (0, $4c1709dee528ea76$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $52ZIf$_)(this, "type", 'DFont'); - this.stream = stream; - this.header = $05f49f930186144e$var$DFontHeader.decode(this.stream); - for (let type of this.header.map.typeList.types){ - for (let ref of type.refList)if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = $05f49f930186144e$var$DFontName.decode(this.stream); - } else ref.name = null; - if (type.name === 'sfnt') this.sfnt = type; - } - } -} - - -// Register font formats -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $4c1709dee528ea76$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $760785214b9fc52c$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $21ee218f84ac7f32$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $cd5853a56c68fec7$export$2e2bcd8739ae039)); -(0, $d636bc798e7178db$export$36b2f24e97d43be)((0, $05f49f930186144e$export$2e2bcd8739ae039)); - - -export {$d636bc798e7178db$export$bd5c5d8b8dcafd78 as logErrors, $d636bc798e7178db$export$36b2f24e97d43be as registerFormat, $d636bc798e7178db$export$185802fd694ee1f5 as create, $d636bc798e7178db$export$42940898df819940 as defaultLanguage, $d636bc798e7178db$export$5157e7780d44cc36 as setDefaultLanguage, $b422b1e013cd6010$export$fa5499edb1ab414a as openSync, $b422b1e013cd6010$export$3ce6949f20cea765 as open}; -//# sourceMappingURL=module.mjs.map diff --git a/skills/flight-finder/node_modules/fontkit/dist/module.mjs.map b/skills/flight-finder/node_modules/fontkit/dist/module.mjs.map deleted file mode 100644 index d8d6a91..0000000 --- a/skills/flight-finder/node_modules/fontkit/dist/module.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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AY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAAe,QAAQ;QACvE,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAChD,QAAQ;QAAY,QAAQ;QAAY,QAAQ;QAC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","sources":["src/node.js","src/base.js","src/fs.js","src/TTFFont.js","src/decorators.js","src/tables/directory.js","src/tables/index.js","src/tables/cmap.js","src/tables/head.js","src/tables/hhea.js","src/tables/hmtx.js","src/tables/maxp.js","src/tables/name.js","src/encodings.js","src/tables/OS2.js","src/tables/post.js","src/tables/cvt.js","src/tables/fpgm.js","src/tables/loca.js","src/tables/prep.js","src/tables/glyf.js","src/cff/CFFFont.js","src/cff/CFFIndex.js","src/cff/CFFTop.js","src/cff/CFFDict.js","src/cff/CFFOperand.js","src/cff/CFFPointer.js","src/cff/CFFPrivateDict.js","src/cff/CFFStandardStrings.js","src/cff/CFFEncodings.js","src/cff/CFFCharsets.js","src/tables/variations.js","src/tables/opentype.js","src/tables/VORG.js","src/tables/EBLC.js","src/tables/EBDT.js","src/tables/sbix.js","src/tables/COLR.js","src/tables/CPAL.js","src/tables/BASE.js","src/tables/GDEF.js","src/tables/GPOS.js","src/tables/GSUB.js","src/tables/JSTF.js","src/tables/HVAR.js","src/tables/DSIG.js","src/tables/gasp.js","src/tables/hdmx.js","src/tables/kern.js","src/tables/LTSH.js","src/tables/PCLT.js","src/tables/VDMX.js","src/tables/vhea.js","src/tables/vmtx.js","src/tables/avar.js","src/tables/bsln.js","src/tables/aat.js","src/tables/feat.js","src/tables/fvar.js","src/tables/gvar.js","src/tables/just.js","src/tables/morx.js","src/tables/opbd.js","src/CmapProcessor.js","src/utils.js","src/layout/LayoutEngine.js","src/layout/KernProcessor.js","src/layout/UnicodeLayoutEngine.js","src/layout/GlyphRun.js","src/glyph/BBox.js","src/layout/Script.js","src/layout/GlyphPosition.js","src/aat/AATLayoutEngine.js","src/aat/AATFeatureMap.js","src/aat/AATMorxProcessor.js","src/aat/AATStateMachine.js","src/aat/AATLookupTable.js","src/opentype/OTLayoutEngine.js","src/opentype/ShapingPlan.js","src/opentype/shapers/index.js","src/opentype/shapers/DefaultShaper.js","src/opentype/shapers/ArabicShaper.js","src/opentype/shapers/HangulShaper.js","src/opentype/GlyphInfo.js","src/opentype/OTProcessor.js","src/opentype/GlyphIterator.js","src/opentype/shapers/IndicShaper.js","src/opentype/shapers/indic.json","src/opentype/shapers/use.json","src/opentype/shapers/indic-data.js","src/opentype/shapers/UniversalShaper.js","src/opentype/GSUBProcessor.js","src/opentype/GPOSProcessor.js","src/glyph/TTFGlyph.js","src/glyph/Glyph.js","src/glyph/Path.js","src/glyph/StandardNames.js","src/glyph/CFFGlyph.js","src/glyph/SBIXGlyph.js","src/glyph/COLRGlyph.js","src/glyph/GlyphVariationProcessor.js","src/subset/TTFSubset.js","src/subset/Subset.js","src/glyph/TTFGlyphEncoder.js","src/subset/CFFSubset.js","src/WOFFFont.js","src/tables/WOFFDirectory.js","src/WOFF2Font.js","src/glyph/WOFF2Glyph.js","src/tables/WOFF2Directory.js","src/TrueTypeCollection.js","src/DFont.js"],"sourcesContent":["import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base';\nimport { open, openSync } from './fs';\nimport TTFFont from './TTFFont';\nimport WOFFFont from './WOFFFont';\nimport WOFF2Font from './WOFF2Font';\nimport TrueTypeCollection from './TrueTypeCollection';\nimport DFont from './DFont';\n\n// Register font formats\nregisterFormat(TTFFont);\nregisterFormat(WOFFFont);\nregisterFormat(WOFF2Font);\nregisterFormat(TrueTypeCollection);\nregisterFormat(DFont);\n\nexport * from './base';\nexport * from './fs';\n","import {DecodeStream} from 'restructure';\n\nexport let logErrors = false;\n\nlet formats = [];\nexport function registerFormat(format) {\n formats.push(format);\n};\n\nexport function create(buffer, postscriptName) {\n for (let i = 0; i < formats.length; i++) {\n let format = formats[i];\n if (format.probe(buffer)) {\n let font = new format(new DecodeStream(buffer));\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n\n return font;\n }\n }\n\n throw new Error('Unknown font format');\n};\n\nexport let defaultLanguage = 'en';\nexport function setDefaultLanguage(lang = 'en') {\n defaultLanguage = lang;\n};\n","import { create } from './base';\nimport fs from 'fs';\n\nexport function openSync(filename, postscriptName) {\n let buffer = fs.readFileSync(filename);\n return create(buffer, postscriptName);\n}\n\nexport async function open(filename, postscriptName, callback) {\n if (typeof postscriptName === 'function') {\n callback = postscriptName;\n postscriptName = null;\n }\n\n let buffer = await fs.promises.readFile(filename);\n return create(buffer, postscriptName);\n}\n","import * as r from 'restructure';\nimport { cache } from './decorators';\nimport * as fontkit from './base';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport CmapProcessor from './CmapProcessor';\nimport LayoutEngine from './layout/LayoutEngine';\nimport TTFGlyph from './glyph/TTFGlyph';\nimport CFFGlyph from './glyph/CFFGlyph';\nimport SBIXGlyph from './glyph/SBIXGlyph';\nimport COLRGlyph from './glyph/COLRGlyph';\nimport GlyphVariationProcessor from './glyph/GlyphVariationProcessor';\nimport TTFSubset from './subset/TTFSubset';\nimport CFFSubset from './subset/CFFSubset';\nimport BBox from './glyph/BBox';\nimport { asciiDecoder } from './utils';\n\n/**\n * This is the base class for all SFNT-based font formats in fontkit.\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\n */\nexport default class TTFFont {\n type = 'TTF';\n\n static probe(buffer) {\n let format = asciiDecoder.decode(buffer.slice(0, 4));\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n }\n\n constructor(stream, variationCoords = null) {\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n this._decodeDirectory();\n\n // define properties for each table to lazily parse\n for (let tag in this.directory.tables) {\n let table = this.directory.tables[tag];\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n\n setDefaultLanguage(lang = null) {\n this.defaultLanguage = lang;\n }\n\n _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(`Error decoding table ${table.tag}`);\n console.error(e.stack);\n }\n }\n }\n\n return this._tables[table.tag];\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n\n return null;\n }\n\n _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {_startOffset: 0});\n }\n\n _decodeTable(table) {\n let pos = this.stream.pos;\n\n let stream = this._getTableStream(table.tag);\n let result = tables[table.tag].decode(stream, this, table.length);\n\n this.stream.pos = pos;\n return result;\n }\n\n /**\n * Gets a string from the font's `name` table\n * `lang` is a BCP-47 language code.\n * @return {string}\n */\n getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) {\n let record = this.name && this.name.records[key];\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return (\n record[lang]\n || record[this.defaultLanguage]\n || record[fontkit.defaultLanguage]\n || record['en']\n || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null\n );\n }\n\n return null;\n }\n\n /**\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\n * @type {string}\n */\n get postscriptName() {\n return this.getName('postscriptName');\n }\n\n /**\n * The font's full name, e.g. \"Helvetica Bold\"\n * @type {string}\n */\n get fullName() {\n return this.getName('fullName');\n }\n\n /**\n * The font's family name, e.g. \"Helvetica\"\n * @type {string}\n */\n get familyName() {\n return this.getName('fontFamily');\n }\n\n /**\n * The font's sub-family, e.g. \"Bold\".\n * @type {string}\n */\n get subfamilyName() {\n return this.getName('fontSubfamily');\n }\n\n /**\n * The font's copyright information\n * @type {string}\n */\n get copyright() {\n return this.getName('copyright');\n }\n\n /**\n * The font's version number\n * @type {string}\n */\n get version() {\n return this.getName('version');\n }\n\n /**\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\n * @type {number}\n */\n get ascent() {\n return this.hhea.ascent;\n }\n\n /**\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\n * @type {number}\n */\n get descent() {\n return this.hhea.descent;\n }\n\n /**\n * The amount of space that should be included between lines\n * @type {number}\n */\n get lineGap() {\n return this.hhea.lineGap;\n }\n\n /**\n * The offset from the normal underline position that should be used\n * @type {number}\n */\n get underlinePosition() {\n return this.post.underlinePosition;\n }\n\n /**\n * The weight of the underline that should be used\n * @type {number}\n */\n get underlineThickness() {\n return this.post.underlineThickness;\n }\n\n /**\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\n * @type {number}\n */\n get italicAngle() {\n return this.post.italicAngle;\n }\n\n /**\n * The height of capital letters above the baseline.\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\n * @type {number}\n */\n get capHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n\n /**\n * The height of lower case letters in the font.\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\n * @type {number}\n */\n get xHeight() {\n let os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n\n /**\n * The number of glyphs in the font.\n * @type {number}\n */\n get numGlyphs() {\n return this.maxp.numGlyphs;\n }\n\n /**\n * The size of the font’s internal coordinate grid\n * @type {number}\n */\n get unitsPerEm() {\n return this.head.unitsPerEm;\n }\n\n /**\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n\n @cache\n get _cmapProcessor() {\n return new CmapProcessor(this.cmap);\n }\n\n /**\n * An array of all of the unicode code points supported by the font.\n * @type {number[]}\n */\n @cache\n get characterSet() {\n return this._cmapProcessor.getCharacterSet();\n }\n\n /**\n * Returns whether there is glyph in the font for the given unicode code point.\n *\n * @param {number} codePoint\n * @return {boolean}\n */\n hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n\n /**\n * Maps a single unicode code point to a Glyph object.\n * Does not perform any advanced substitutions (there is no context to do so).\n *\n * @param {number} codePoint\n * @return {Glyph}\n */\n glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n\n /**\n * Returns an array of Glyph objects for the given string.\n * This is only a one-to-one mapping from characters to glyphs.\n * For most uses, you should use font.layout (described below), which\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\n *\n * @param {string} string\n * @return {Glyph[]}\n */\n glyphsForString(string) {\n let glyphs = [];\n let len = string.length;\n let idx = 0;\n let last = -1;\n let state = -1;\n\n while (idx <= len) {\n let code = 0;\n let nextState = 0;\n\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n }\n\n // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0;\n } else {\n idx++;\n }\n\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n\n last = code;\n state = nextState;\n }\n\n return glyphs;\n }\n\n @cache\n get _layoutEngine() {\n return new LayoutEngine(this);\n }\n\n /**\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\n *\n * @param {string} string\n * @param {string[]} [userFeatures]\n * @param {string} [script]\n * @param {string} [language]\n * @param {string} [direction]\n * @return {GlyphRun}\n */\n layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n\n /**\n * Returns an array of strings that map to the given glyph id.\n * @param {number} gid - glyph id\n */\n stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n\n /**\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\n * (or mapped AAT tags) supported by the font.\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\n *\n * @type {string[]}\n */\n get availableFeatures() {\n return this._layoutEngine.getAvailableFeatures();\n }\n\n getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n }\n\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a glyph object for the given glyph id.\n * You can pass the array of code points this glyph represents for\n * your use later, and it will be stored in the glyph object.\n *\n * @param {number} glyph\n * @param {number[]} characters\n * @return {Glyph}\n */\n getGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n\n } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n\n return this._glyphs[glyph] || null;\n }\n\n /**\n * Returns a Subset for this font.\n * @return {Subset}\n */\n createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n\n return new TTFSubset(this);\n }\n\n /**\n * Returns an object describing the available variation axes\n * that this font supports. Keys are setting tags, and values\n * contain the axis name, range, and default value.\n *\n * @type {object}\n */\n @cache\n get variationAxes() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let axis of this.fvar.axis) {\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n\n return res;\n }\n\n /**\n * Returns an object describing the named variation instances\n * that the font designer has specified. Keys are variation names\n * and values are the variation settings for this instance.\n *\n * @type {object}\n */\n @cache\n get namedVariations() {\n let res = {};\n if (!this.fvar) {\n return res;\n }\n\n for (let instance of this.fvar.instance) {\n let settings = {};\n for (let i = 0; i < this.fvar.axis.length; i++) {\n let axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n\n res[instance.name.en] = settings;\n }\n\n return res;\n }\n\n /**\n * Returns a new font with the given variation settings applied.\n * Settings can either be an instance name, or an object containing\n * variation tags as specified by the `variationAxes` property.\n *\n * @param {object} settings\n * @return {TTFFont}\n */\n getVariation(settings) {\n if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n }\n\n // normalize the coordinates\n let coords = this.fvar.axis.map((axis, i) => {\n let axisTag = axis.axisTag.trim();\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n\n let font = new TTFFont(stream, coords);\n font._tables = this._tables;\n\n return font;\n }\n\n @cache\n get _variationProcessor() {\n if (!this.fvar) {\n return null;\n }\n\n let variationCoords = this.variationCoords;\n\n // Ignore if no variation coords and not CFF2\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(axis => axis.defaultValue);\n }\n\n return new GlyphVariationProcessor(this, variationCoords);\n }\n\n // Standardized format plugin API\n getFont(name) {\n return this.getVariation(name);\n }\n}\n","/**\n * This decorator caches the results of a getter or method such that\n * the results are lazily computed once, and then cached.\n * @private\n */\nexport function cache(target, key, descriptor) {\n if (descriptor.get) {\n let get = descriptor.get;\n descriptor.get = function() {\n let value = get.call(this);\n Object.defineProperty(this, key, { value });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n let fn = descriptor.value;\n\n return {\n get() {\n let cache = new Map;\n function memoized(...args) {\n let key = args.length > 0 ? args[0] : 'value';\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n let result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n Object.defineProperty(this, key, {value: memoized});\n return memoized;\n }\n };\n }\n}\n","import * as r from 'restructure';\nimport Tables from './';\n\nlet TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', { type: 'global' }),\n length: r.uint32\n});\n\nlet Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\n\nDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nDirectory.preEncode = function() {\n if (!Array.isArray(this.tables)) {\n let tables = [];\n for (let tag in this.tables) {\n let table = this.tables[tag];\n if (table) {\n tables.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(Tables[tag], table),\n length: Tables[tag].size(table)\n });\n }\n }\n \n this.tables = tables;\n }\n\n this.tag = 'true';\n this.numTables = this.tables.length;\n\n let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2));\n let maxPowerOf2 = Math.pow(2, maxExponentFor2);\n\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\n\nexport default Directory;\n","let tables = {};\nexport default tables;\n\n// Required Tables\nimport cmap from './cmap';\nimport head from './head';\nimport hhea from './hhea';\nimport hmtx from './hmtx';\nimport maxp from './maxp';\nimport name from './name';\nimport OS2 from './OS2';\nimport post from './post';\n\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = name;\ntables['OS/2'] = OS2;\ntables.post = post;\n\n\n// TrueType Outlines\nimport cvt from './cvt';\nimport fpgm from './fpgm';\nimport loca from './loca';\nimport prep from './prep';\nimport glyf from './glyf';\n\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf;\n\n\n// PostScript Outlines\nimport CFFFont from '../cff/CFFFont';\nimport VORG from './VORG';\n\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG;\n\n\n// Bitmap Glyphs\nimport EBLC from './EBLC';\nimport sbix from './sbix';\nimport COLR from './COLR';\nimport CPAL from './CPAL';\n\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL;\n\n\n// Advanced OpenType Tables\nimport BASE from './BASE';\nimport GDEF from './GDEF';\nimport GPOS from './GPOS';\nimport GSUB from './GSUB';\nimport JSTF from './JSTF';\n\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF;\n\n// OpenType variations tables\nimport HVAR from './HVAR';\n\ntables.HVAR = HVAR;\n\n// Other OpenType Tables\nimport DSIG from './DSIG';\nimport gasp from './gasp';\nimport hdmx from './hdmx';\nimport kern from './kern';\nimport LTSH from './LTSH';\nimport PCLT from './PCLT';\nimport VDMX from './VDMX';\nimport vhea from './vhea';\nimport vmtx from './vmtx';\n\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx;\n\n\n// Apple Advanced Typography Tables\nimport avar from './avar';\nimport bsln from './bsln';\nimport feat from './feat';\nimport fvar from './fvar';\nimport gvar from './gvar';\nimport just from './just';\nimport morx from './morx';\nimport opbd from './opbd';\n\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\n","import * as r from 'restructure';\n\nlet SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\n\nlet CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\n\nlet UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\n\nlet UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\n\nlet DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nlet NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\n\nlet VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'})\n});\n\nlet CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: { // Byte encoding\n length: r.uint16, // Total table length in bytes (set to 262 for format 0)\n language: r.uint16, // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n\n 2: { // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys),\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n\n 4: { // Segment mapping to delta values\n length: r.uint16, // Total table length in bytes\n language: r.uint16, // Language code\n segCountX2: r.uint16,\n segCount: t => t.segCountX2 >> 1,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16), // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2)\n },\n\n 6: { // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n\n 8: { // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 10: { // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n\n 12: { // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n\n 14: { // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\n\nlet CmapEntry = new r.Struct({\n platformID: r.uint16, // Platform identifier\n encodingID: r.uint16, // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true})\n});\n\n// character to glyph mapping\nexport default new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\n","import * as r from 'restructure';\n\n// font header\nexport default new r.Struct({\n version: r.int32, // 0x00010000 (version 1.0)\n revision: r.int32, // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32, // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16, // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16, // for all glyph bounding boxes\n yMin: r.int16, // for all glyph bounding boxes\n xMax: r.int16, // for all glyph bounding boxes\n yMax: r.int16, // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, [\n 'bold', 'italic', 'underline', 'outline',\n 'shadow', 'condensed', 'extended'\n ]),\n lowestRecPPEM: r.uint16, // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16, // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n});\n","import * as r from 'restructure';\n\n// horizontal header\nexport default new r.Struct({\n version: r.int32,\n ascent: r.int16, // Distance from baseline of highest ascender\n descent: r.int16, // Distance from baseline of lowest descender\n lineGap: r.int16, // Typographic line gap\n advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16, // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16, // 0 for vertical\n caretOffset: r.int16, // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\n","import * as r from 'restructure';\n\nlet HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\n\nexport default new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\n// maxiumum profile\nexport default new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16, // The number of glyphs in the font\n maxPoints: r.uint16, // Maximum points in a non-composite glyph\n maxContours: r.uint16, // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16, // Maximum points in a composite glyph\n maxComponentContours: r.uint16, // Maximum contours in a composite glyph\n maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16, // Maximum points used in Z0\n maxStorage: r.uint16, // Number of Storage Area locations\n maxFunctionDefs: r.uint16, // Number of FDEFs\n maxInstructionDefs: r.uint16, // Number of IDEFs\n maxStackElements: r.uint16, // Maximum stack depth\n maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n","import * as r from 'restructure';\nimport {getEncoding, LANGUAGES} from '../encodings';\n\nlet NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16,\n new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)),\n { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false }\n )\n});\n\nlet LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset})\n});\n\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\n\nexport default NameTable;\n\nconst NAMES = [\n 'copyright',\n 'fontFamily',\n 'fontSubfamily',\n 'uniqueSubfamily',\n 'fullName',\n 'version',\n 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII.\n 'trademark',\n 'manufacturer',\n 'designer',\n 'description',\n 'vendorURL',\n 'designerURL',\n 'license',\n 'licenseURL',\n null, // reserved\n 'preferredFamily',\n 'preferredSubfamily',\n 'compatibleFull',\n 'sampleText',\n 'postscriptCIDFontName',\n 'wwsFamilyName',\n 'wwsSubfamilyName'\n];\n\nNameTable.process = function(stream) {\n var records = {};\n for (let record of this.records) {\n // find out what language this is for\n let language = LANGUAGES[record.platformID][record.languageID];\n\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n }\n\n // if the nameID is >= 256, it is a font feature record (AAT)\n let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID);\n if (records[key] == null) {\n records[key] = {};\n }\n\n let obj = records[key];\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n\n this.records = records;\n};\n\nNameTable.preEncode = function() {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n\n let records = [];\n for (let key in this.records) {\n let val = this.records[key];\n if (key === 'fontFeatures') continue;\n\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: val.en.length * 2,\n string: val.en\n });\n\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\n","/**\n * Gets an encoding name from platform, encoding, and language ids.\n * Returned encoding names can be used in iconv-lite to decode text.\n */\nexport function getEncoding(platformID, encodingID, languageID = 0) {\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n \n return ENCODINGS[platformID][encodingID];\n}\n\nconst SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']);\nconst MAC_ENCODINGS = {\n 'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',\n 'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',\n 'x-mac-greek': 'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\\u00AD',\n 'x-mac-icelandic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-inuit': 'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',\n 'x-mac-ce': 'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',\n 'x-mac-romanian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',\n 'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'\n};\n\nconst encodingCache = new Map();\n\nexport function getEncodingMapping(encoding) {\n let cached = encodingCache.get(encoding);\n if (cached) {\n return cached;\n }\n\n // These encodings aren't supported by TextDecoder.\n let mapping = MAC_ENCODINGS[encoding];\n if (mapping) {\n let res = new Map();\n for (let i = 0; i < mapping.length; i++) {\n res.set(mapping.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n\n // Only single byte encodings can be mapped 1:1.\n if (SINGLE_BYTE_ENCODINGS.has(encoding)) {\n // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings.\n // Use this to create a mapping of code points.\n let decoder = new TextDecoder(encoding);\n let mapping = new Uint8Array(0x80);\n for (let i = 0; i < 0x80; i++) {\n mapping[i] = 0x80 + i;\n }\n\n let res = new Map();\n let s = decoder.decode(mapping);\n for (let i = 0; i < 0x80; i++) {\n res.set(s.charCodeAt(i), 0x80 + i);\n }\n\n encodingCache.set(encoding, res);\n return res;\n }\n}\n\n// Map of platform ids to encoding ids.\nexport const ENCODINGS = [\n // unicode\n ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'],\n \n // macintosh\n // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n // 0\tRoman 17\tMalayalam\n // 1\tJapanese\t 18\tSinhalese\n // 2\tTraditional Chinese\t 19\tBurmese\n // 3\tKorean\t 20\tKhmer\n // 4\tArabic\t 21\tThai\n // 5\tHebrew\t 22\tLaotian\n // 6\tGreek\t 23\tGeorgian\n // 7\tRussian\t 24\tArmenian\n // 8\tRSymbol\t 25\tSimplified Chinese\n // 9\tDevanagari\t 26\tTibetan\n // 10\tGurmukhi\t 27\tMongolian\n // 11\tGujarati\t 28\tGeez\n // 12\tOriya\t 29\tSlavic\n // 13\tBengali\t 30\tVietnamese\n // 14\tTamil\t 31\tSindhi\n // 15\tTelugu\t 32\t(Uninterpreted)\n // 16\tKannada\n ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8',\n 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati',\n 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese',\n 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk', \n 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'],\n \n // ISO (deprecated)\n ['ascii', null, 'iso-8859-1'],\n \n // windows\n // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be']\n];\n\n// Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\nexport const MAC_LANGUAGE_ENCODINGS = {\n 15: 'x-mac-icelandic',\n 17: 'x-mac-turkish',\n 18: 'x-mac-croatian',\n 24: 'x-mac-ce',\n 25: 'x-mac-ce',\n 26: 'x-mac-ce',\n 27: 'x-mac-ce',\n 28: 'x-mac-ce',\n 30: 'x-mac-icelandic',\n 37: 'x-mac-romanian',\n 38: 'x-mac-ce',\n 39: 'x-mac-ce',\n 40: 'x-mac-ce',\n 143: 'x-mac-inuit',\n 146: 'x-mac-gaelic'\n};\n\n// Map of platform ids to BCP-47 language codes.\nexport const LANGUAGES = [\n // unicode\n [],\n \n { // macintosh\n 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw',\n 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn',\n 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny',\n 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg',\n 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo',\n 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy',\n 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu',\n 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca',\n 8: 'pt', 38: 'cz', 68: 'as', 131: 'la',\n 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu',\n 10: 'he', 40: 'si', 70: 'pa', 133: 'gn',\n 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay',\n 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt',\n 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug',\n 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz',\n 15: 'is', 45: 'uk', 75: 'te', 138: 'jv',\n 16: 'mt', 46: 'be', 76: 'si', 139: 'su',\n 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl',\n 18: 'hr', 48: 'kk', 78: 'km', 141: 'af',\n 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br',\n 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu',\n 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd',\n 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv',\n 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga',\n 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to',\n 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton',\n 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl',\n 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az',\n 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn',\n 29: 'se', 59: 'ps', 89: 'sw',\n },\n \n // ISO (deprecated)\n [],\n \n { // windows \n 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', \n 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', \n 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', \n 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', \n 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', \n 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', \n 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', \n 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', \n 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', \n 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', \n 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', \n 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', \n 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', \n 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', \n 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', \n 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', \n 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', \n 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', \n 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', \n 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', \n 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', \n 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', \n 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', \n 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', \n 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', \n 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', \n 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', \n 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', \n 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', \n 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', \n 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', \n 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', \n 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', \n 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', \n 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', \n 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', \n 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', \n 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', \n 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', \n 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', \n 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', \n 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', \n 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', \n 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', \n 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', \n 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', \n 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', \n 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', \n 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', \n 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', \n 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', \n 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', \n }\n];\n","import * as r from 'restructure';\n\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16, // visual weight of stroke in glyphs\n usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null,\n null, null, null, 'noSubsetting', 'bitmapOnly'\n ]),\n ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16, // width of the strikeout stroke\n yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16, // classification of font-family design\n panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4), // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout',\n 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique'\n ]),\n usFirstCharIndex: r.uint16, // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n },\n\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\n\nlet versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\n\nexport default OS2;\n","import * as r from 'restructure';\n\n// PostScript information\nexport default new r.VersionedStruct(r.fixed32, {\n header: { // these fields exist at the top of all versions\n italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16, // Suggested values for the underline thickness\n isFixedPitch: r.uint32, // Whether the font is monospaced\n minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n },\n\n 1: {}, // version 1 has no additional fields\n\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n\n 3: {}, // version 3 has no additional fields\n\n 4: {\n map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs)\n }\n});\n","import * as r from 'restructure';\n\n// An array of predefined values accessible by instructions\nexport default new r.Struct({\n controlValues: new r.Array(r.int16)\n});\n","import * as r from 'restructure';\n\n// A list of instructions that are executed once when a font is first used.\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\nexport default new r.Struct({\n instructions: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\nlet loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\n\nloca.process = function() {\n if (this.version === 0 && !this._processed) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n this._processed = true;\n }\n};\n\nloca.preEncode = function() {\n if (this.version === 0 && this._processed !== false) {\n for (let i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n this._processed = false;\n }\n};\n\nexport default loca;\n","import * as r from 'restructure';\n\n// Set of instructions executed whenever the point size or font transformation change\nexport default new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\n","import * as r from 'restructure';\n\n// only used for encoding\nexport default new r.Array(new r.Buffer);\n","import * as r from 'restructure';\nimport CFFIndex from './CFFIndex';\nimport CFFTop from './CFFTop';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport standardStrings from './CFFStandardStrings';\n\nclass CFFFont {\n constructor(stream) {\n this.stream = stream;\n this.decode();\n }\n\n static decode(stream) {\n return new CFFFont(stream);\n }\n\n decode() {\n let start = this.stream.pos;\n let top = CFFTop.decode(this.stream);\n for (let key in top) {\n let val = top[key];\n this[key] = val;\n }\n\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n\n this.topDict = this.topDictIndex[0];\n }\n\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n }\n\n string(sid) {\n if (this.version >= 2) {\n return null;\n }\n\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n\n return this.stringIndex[sid - standardStrings.length];\n }\n\n get postscriptName() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n\n return null;\n }\n\n get fullName() {\n return this.string(this.topDict.FullName);\n }\n\n get familyName() {\n return this.string(this.topDict.FamilyName);\n }\n\n getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n }\n\n getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n }\n\n // CID-keyed fonts don't have glyph names\n if (this.isCIDFont) {\n return null;\n }\n\n let { charset } = this.topDict;\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n\n if (gid === 0) {\n return '.notdef';\n }\n\n gid -= 1;\n\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n\n case 1:\n case 2:\n for (let i = 0; i < charset.ranges.length; i++) {\n let range = charset.ranges[i];\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n break;\n }\n\n return null;\n }\n\n fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n\n case 3:\n case 4:\n let { ranges } = this.topDict.FDSelect;\n let low = 0;\n let high = ranges.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n default:\n throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`);\n }\n }\n\n privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n let fd = this.fdForGlyph(gid);\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n\n return null;\n }\n\n if (this.version < 2) {\n return this.topDict.Private;\n }\n\n return this.topDict.FDArray[0].Private;\n }\n}\n\nexport default CFFFont;\n","import * as r from 'restructure';\n\nexport default class CFFIndex {\n constructor(type) {\n this.type = type;\n }\n\n getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n\n return ctx ? ctx.version : -1;\n }\n\n decode(stream, parent) {\n let version = this.getCFFVersion(parent);\n let count = version >= 2\n ? stream.readUInt32BE()\n : stream.readUInt16BE();\n\n if (count === 0) {\n return [];\n }\n\n let offSize = stream.readUInt8();\n let offsetType;\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`);\n }\n\n let ret = [];\n let startPos = stream.pos + ((count + 1) * offSize) - 1;\n\n let start = offsetType.decode(stream);\n for (let i = 0; i < count; i++) {\n let end = offsetType.decode(stream);\n\n if (this.type != null) {\n let pos = stream.pos;\n stream.pos = startPos + start;\n\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n\n start = end;\n }\n\n stream.pos = startPos + start;\n return ret;\n }\n\n size(arr, parent) {\n let size = 2;\n if (arr.length === 0) {\n return size;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let offset = 1;\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n offset += type.size(item, parent);\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n\n return size;\n }\n\n encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n if (arr.length === 0) {\n return;\n }\n\n let type = this.type || new r.Buffer;\n\n // find maximum offset to detminine offset type\n let sizes = [];\n let offset = 1;\n for (let item of arr) {\n let s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n\n let offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n\n // write offset size\n stream.writeUInt8(offsetType.size());\n\n // write elements\n offset = 1;\n offsetType.encode(stream, offset);\n\n for (let size of sizes) {\n offset += size;\n offsetType.encode(stream, offset);\n }\n\n for (let item of arr) {\n type.encode(stream, item, parent);\n }\n\n return;\n }\n}\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\nimport CFFPrivateDict from './CFFPrivateDict';\nimport StandardStrings from './CFFStandardStrings';\nimport { StandardEncoding, ExpertEncoding } from './CFFEncodings';\nimport { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets';\nimport { ItemVariationStore } from '../tables/variations';\n\n// Checks if an operand is an index of a predefined value,\n// otherwise delegates to the provided type.\nclass PredefinedOp {\n constructor(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n\n decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n\n return this.type.decode(stream, parent, operands);\n }\n\n size(value, ctx) {\n return this.type.size(value, ctx);\n }\n\n encode(stream, value, ctx) {\n let index = this.predefinedOps.indexOf(value);\n if (index !== -1) {\n return index;\n }\n\n return this.type.encode(stream, value, ctx);\n }\n}\n\nclass CFFEncodingVersion extends r.Number {\n constructor() {\n super('UInt8');\n }\n\n decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n }\n}\n\nlet Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\n\nlet Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\n\nlet CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n }\n\n // TODO: supplement?\n});\n\nlet CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true }));\n\n// Decodes an array of ranges until the total\n// length is equal to the provided length.\nclass RangeArray extends r.Array {\n decode(stream, parent) {\n let length = resolveLength(this.length, stream, parent);\n let count = 0;\n let res = [];\n while (count < length) {\n let range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n\n return res;\n }\n}\n\nlet CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1)\n },\n\n 1: {\n ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1)\n },\n\n 2: {\n ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1)\n }\n});\n\nlet CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true}));\n\nlet FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\n\nlet FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\n\nlet FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, t => t.parent.CharStrings.length)\n },\n\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\n\nlet ptr = new CFFPointer(CFFPrivateDict);\nclass CFFPrivateOp {\n decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n }\n\n size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n }\n\n encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n }\n}\n\nlet FontDict = new CFFDict([\n // key name type(s) default\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 38], 'FontName', 'sid', null],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [[12, 5], 'PaintType', 'number', 0],\n]);\n\nlet CFFTopDict = new CFFDict([\n // key name type(s) default\n [[12, 30], 'ROS', ['sid', 'sid', 'number'], null],\n\n [0, 'version', 'sid', null],\n [1, 'Notice', 'sid', null],\n [[12, 0], 'Copyright', 'sid', null],\n [2, 'FullName', 'sid', null],\n [3, 'FamilyName', 'sid', null],\n [4, 'Weight', 'sid', null],\n [[12, 1], 'isFixedPitch', 'boolean', false],\n [[12, 2], 'ItalicAngle', 'number', 0],\n [[12, 3], 'UnderlinePosition', 'number', -100],\n [[12, 4], 'UnderlineThickness', 'number', 50],\n [[12, 5], 'PaintType', 'number', 0],\n [[12, 6], 'CharstringType', 'number', 2],\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [13, 'UniqueID', 'number', null],\n [5, 'FontBBox', 'array', [0, 0, 0, 0]],\n [[12, 8], 'StrokeWidth', 'number', 0],\n [14, 'XUID', 'array', null],\n [15, 'charset', CFFCharset, ISOAdobeCharset],\n [16, 'Encoding', CFFEncoding, StandardEncoding],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [18, 'Private', new CFFPrivateOp, null],\n [[12, 20], 'SyntheticBase', 'number', null],\n [[12, 21], 'PostScript', 'sid', null],\n [[12, 22], 'BaseFontName', 'sid', null],\n [[12, 23], 'BaseFontBlend', 'delta', null],\n\n // CID font specific\n [[12, 31], 'CIDFontVersion', 'number', 0],\n [[12, 32], 'CIDFontRevision', 'number', 0],\n [[12, 33], 'CIDFontType', 'number', 0],\n [[12, 34], 'CIDCount', 'number', 8720],\n [[12, 35], 'UIDBase', 'number', null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [[12, 38], 'FontName', 'sid', null]\n]);\n\nlet VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n})\n\nlet CFF2TopDict = new CFFDict([\n [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]],\n [17, 'CharStrings', new CFFPointer(new CFFIndex), null],\n [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null],\n [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null],\n [24, 'vstore', new CFFPointer(VariationStore), null],\n [25, 'maxstack', 'number', 193]\n]);\n\nlet CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex\n },\n\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex\n }\n});\n\nexport default CFFTop;\n","import isEqual from 'fast-deep-equal';\nimport * as r from 'restructure';\nimport CFFOperand from './CFFOperand';\nimport { PropertyDescriptor } from 'restructure';\n\nexport default class CFFDict {\n constructor(ops = []) {\n this.ops = ops;\n this.fields = {};\n for (let field of ops) {\n let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n\n decodeOperands(type, stream, ret, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op]));\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n case 'boolean':\n return !!operands[0];\n default:\n return operands;\n }\n }\n }\n\n encodeOperands(type, stream, ctx, operands) {\n if (Array.isArray(type)) {\n return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]);\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n }\n\n decode(stream, parent) {\n let end = stream.pos + parent.length;\n let ret = {};\n let operands = [];\n\n // define hidden properties\n Object.defineProperties(ret, {\n parent: { value: parent },\n _startOffset: { value: stream.pos }\n });\n\n // fill in defaults\n for (let key in this.fields) {\n let field = this.fields[key];\n ret[field[1]] = field[3];\n }\n\n while (stream.pos < end) {\n let b = stream.readUInt8();\n if (b < 28) {\n if (b === 12) {\n b = (b << 8) | stream.readUInt8();\n }\n\n let field = this.fields[b];\n if (!field) {\n throw new Error(`Unknown operator ${b}`);\n }\n\n let val = this.decodeOperands(field[2], stream, ret, operands);\n if (val != null) {\n if (val instanceof PropertyDescriptor) {\n Object.defineProperty(ret, field[1], val);\n } else {\n ret[field[1]] = val;\n }\n }\n\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n\n return ret;\n }\n\n size(dict, parent, includePointers = true) {\n let ctx = {\n parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n\n let len = 0;\n\n for (let k in this.fields) {\n let field = this.fields[k];\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], null, ctx, val);\n for (let op of operands) {\n len += CFFOperand.size(op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n\n if (includePointers) {\n len += ctx.pointerSize;\n }\n\n return len;\n }\n\n encode(stream, dict, parent) {\n let ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val: dict,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n\n for (let field of this.ops) {\n let val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n\n let operands = this.encodeOperands(field[2], stream, ctx, val);\n for (let op of operands) {\n CFFOperand.encode(stream, op);\n }\n\n let key = Array.isArray(field[0]) ? field[0] : [field[0]];\n for (let op of key) {\n stream.writeUInt8(op);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n let ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n\n return;\n }\n}\n","const FLOAT_EOF = 0xf;\nconst FLOAT_LOOKUP = [\n '0', '1', '2', '3', '4', '5', '6', '7',\n '8', '9', '.', 'E', 'E-', null, '-'\n];\n\nconst FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\n\nexport default class CFFOperand {\n static decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n\n if (value === 28) {\n return stream.readInt16BE();\n }\n\n if (value === 29) {\n return stream.readInt32BE();\n }\n\n if (value === 30) {\n let str = '';\n while (true) {\n let b = stream.readUInt8();\n\n let n1 = b >> 4;\n if (n1 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n1];\n\n let n2 = b & 15;\n if (n2 === FLOAT_EOF) { break; }\n str += FLOAT_LOOKUP[n2];\n }\n\n return parseFloat(str);\n }\n\n return null;\n }\n\n static size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n\n if ((value | 0) !== value) { // floating point\n let str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n\n } else if (-107 <= value && value <= 107) {\n return 1;\n\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n\n } else {\n return 5;\n }\n }\n\n static encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n let val = Number(value);\n\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n\n } else if ((val | 0) !== val) { // floating point\n stream.writeUInt8(30);\n\n let str = '' + val;\n for (let i = 0; i < str.length; i += 2) {\n let c1 = str[i];\n let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n let c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n\n stream.writeUInt8((n1 << 4) | (n2 & 15));\n }\n\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8((FLOAT_EOF << 4));\n }\n\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n }\n}\n","import * as r from 'restructure';\n\nexport default class CFFPointer extends r.Pointer {\n constructor(type, options = {}) {\n if (options.type == null) {\n options.type = 'global';\n }\n\n super(null, type, options);\n }\n\n decode(stream, parent, operands) {\n this.offsetType = {\n decode: () => operands[0]\n };\n\n return super.decode(stream, parent, operands);\n }\n\n encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: () => 0\n };\n\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n\n let ptr = null;\n this.offsetType = {\n encode: (stream, val) => ptr = val\n };\n\n super.encode(stream, value, ctx);\n return [new Ptr(ptr)];\n }\n}\n\nclass Ptr {\n constructor(val) {\n this.val = val;\n this.forceLarge = true;\n }\n\n valueOf() {\n return this.val;\n }\n}\n","import CFFDict from './CFFDict';\nimport CFFIndex from './CFFIndex';\nimport CFFPointer from './CFFPointer';\n\nclass CFFBlendOp {\n static decode(stream, parent, operands) {\n let numBlends = operands.pop();\n\n // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n while (operands.length > numBlends) {\n operands.pop();\n }\n }\n}\n\nexport default new CFFDict([\n // key name type default\n [6, 'BlueValues', 'delta', null],\n [7, 'OtherBlues', 'delta', null],\n [8, 'FamilyBlues', 'delta', null],\n [9, 'FamilyOtherBlues', 'delta', null],\n [[12, 9], 'BlueScale', 'number', 0.039625],\n [[12, 10], 'BlueShift', 'number', 7],\n [[12, 11], 'BlueFuzz', 'number', 1],\n [10, 'StdHW', 'number', null],\n [11, 'StdVW', 'number', null],\n [[12, 12], 'StemSnapH', 'delta', null],\n [[12, 13], 'StemSnapV', 'delta', null],\n [[12, 14], 'ForceBold', 'boolean', false],\n [[12, 17], 'LanguageGroup', 'number', 0],\n [[12, 18], 'ExpansionFactor', 'number', 0.06],\n [[12, 19], 'initialRandomSeed', 'number', 0],\n [20, 'defaultWidthX', 'number', 0],\n [21, 'nominalWidthX', 'number', 0],\n [22, 'vsindex', 'number', 0],\n [23, 'blend', CFFBlendOp, null],\n [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null]\n]);\n","// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nexport default [\n \".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\",\n \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\",\n \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\",\n \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\",\n \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\",\n \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\",\n \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\",\n \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\",\n \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\",\n \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\",\n \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\",\n \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\",\n \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\",\n \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\",\n \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\",\n \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\",\n \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\",\n \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\",\n \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\",\n \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\",\n \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\",\n \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\",\n \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\",\n \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\",\n \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\",\n \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\",\n \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\",\n \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\",\n \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\",\n \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\",\n \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\",\n \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\",\n \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\",\n \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\",\n \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\",\n \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\",\n \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\",\n \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\",\n \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\",\n \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\",\n \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\",\n \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\",\n \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\",\n \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\",\n \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\",\n \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\",\n \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\",\n \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\",\n \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\",\n \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\",\n \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\",\n \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\",\n \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\",\n \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\",\n \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\",\n \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\",\n \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\",\n \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\",\n \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\",\n \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\",\n \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\",\n \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\",\n \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\",\n \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\",\n \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\",\n \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\",\n \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"\n];\n","export let StandardEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',\n 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',\n 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',\n 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',\n 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',\n 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',\n 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',\n 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',\n 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',\n 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',\n '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',\n 'lslash', 'oslash', 'oe', 'germandbls'\n];\n\nexport let ExpertEncoding = [\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',\n 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',\n 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',\n 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',\n 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',\n 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',\n 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',\n 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',\n 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',\n 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',\n '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',\n 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',\n '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',\n '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',\n 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',\n 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',\n 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',\n 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',\n 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'\n];\n","export let ISOAdobeCharset = [\n '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',\n 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',\n 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',\n 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',\n 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',\n 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',\n 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',\n 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',\n 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',\n 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',\n 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',\n 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',\n 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',\n 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',\n 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',\n 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',\n 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',\n 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',\n 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',\n 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',\n 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',\n 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',\n 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',\n 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',\n 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',\n 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',\n 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',\n 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',\n 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',\n 'ugrave', 'yacute', 'ydieresis', 'zcaron'\n];\n\nexport let ExpertCharset = [\n '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',\n 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',\n 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',\n 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',\n 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',\n 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',\n 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',\n 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',\n 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',\n 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',\n 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',\n 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',\n 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',\n 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',\n 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',\n 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',\n 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',\n 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',\n 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',\n 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',\n 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',\n 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',\n 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',\n 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',\n 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',\n 'Ydieresissmall'\n];\n\nexport let ExpertSubsetCharset = [\n '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',\n 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',\n 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',\n 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',\n 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',\n 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',\n 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',\n 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',\n 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',\n 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',\n 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',\n 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',\n 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',\n 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',\n 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',\n 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',\n 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',\n 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',\n 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',\n 'periodinferior', 'commainferior'\n];\n","import {Feature} from './opentype';\nimport * as r from 'restructure';\n\n/*******************\n * Variation Store *\n *******************/\n\nlet F2DOT14 = new r.Fixed(16, 'BE', 14);\nlet RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\n\nlet VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\n\nlet DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount),\n regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount),\n deltas: t => t.shortDeltas.concat(t.regionDeltas)\n});\n\nlet ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\n\nexport let ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n\n/**********************\n * Feature Variations *\n **********************/\n\nlet ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: {\n axisIndex: r.uint16,\n axisIndex: r.uint16,\n filterRangeMinValue: F2DOT14,\n filterRangeMaxValue: F2DOT14\n }\n});\n\nlet ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\n\nlet FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'})\n});\n\nlet FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\n\nlet FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'})\n});\n\nexport let FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n","import * as r from 'restructure';\n\n//########################\n// Scripts and Languages #\n//########################\n\nlet LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\n\nlet LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' })\n});\n\nlet Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\n\nlet ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, { type: 'parent' })\n});\n\nexport let ScriptList = new r.Array(ScriptRecord, r.uint16);\n\n//#######################\n// Features and Lookups #\n//#######################\n\nlet FeatureParams = new r.Struct({\n version: r.uint16, // should be set to 0 according OT spec\n nameID: r.uint16, //OT spec: UI Name ID or uiLabelNameId\n});\n\nexport let Feature = new r.Struct({\n featureParams: new r.Pointer(r.uint16, FeatureParams),\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\n\nlet FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, { type: 'parent' })\n});\n\nexport let FeatureList = new r.Array(FeatureRecord, r.uint16);\n\nlet LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, [\n 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures',\n 'ignoreMarks', 'useMarkFilteringSet'\n ])\n});\n\nexport function LookupList(SubTable) {\n let Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet)\n });\n\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n}\n\n//#################\n// Coverage Table #\n//#################\n\nlet RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\n\nexport let Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n});\n\n//#########################\n// Class Definition Table #\n//#########################\n\nlet ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\n\nexport let ClassDef = new r.VersionedStruct(r.uint16, {\n 1: { // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: { // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n});\n\n//###############\n// Device Table #\n//###############\n\nexport let Device = new r.Struct({\n a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16, // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n});\n\n//#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nlet LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\n\nlet Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\n\nlet ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, t => t.glyphCount - 1),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\n\nexport let Context = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: { // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n\n//######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nlet ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, t => t.inputGlyphCount - 1),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\n\nlet ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\n\nexport let ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: { // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 2: { // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n\n 3: { // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n","import * as r from 'restructure';\n\nlet VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\n","import * as r from 'restructure';\nimport {BigMetrics} from './EBDT';\n\nlet SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\n\nlet CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\n\nlet IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n\n 1: {\n offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n\n 3: {\n offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1)\n },\n\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1)\n },\n\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\n\nlet IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\n\nlet BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\n\nexport default new r.Struct({\n version: r.uint32, // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\n","import * as r from 'restructure';\n\nexport let BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\n\nexport let SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\n\nlet EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\n\nclass ByteAligned {}\n\nclass BitAligned {}\n\nexport let glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n\n 5: {\n data: BitAligned\n },\n\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\n\n","import * as r from 'restructure';\n\nlet ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1)\n});\n\n// This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\nexport default new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\n","import * as r from 'restructure';\n\nlet LayerRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n // the special case noted below. Each palette entry is 16 bits.\n // A palette index of 0xFFFF is a special case indicating that\n // the text foreground color should be used.\n\nlet BaseGlyphRecord = new r.Struct({\n gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\n\nexport default new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }),\n numLayerRecords: r.uint16\n});\n","import * as r from 'restructure';\n\nlet ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes'),\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16 // X or Y value, in design units\n },\n\n 2: { // Design units plus contour point\n coordinate: r.int16, // X or Y value, in design units\n referenceGlyph: r.uint16, // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16, // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n }\n});\n\nlet BaseValues = new r.Struct({\n defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\n\nlet FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL\n});\n\nlet MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL\n featMinMaxCount: r.uint16, // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\n\nlet BaseLangSysRecord = new r.Struct({\n tag: new r.String(4), // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'})\n});\n\nlet BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL\n baseLangSysCount: r.uint16, // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\n\nlet BaseScriptRecord = new r.Struct({\n tag: new r.String(4), // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'})\n});\n\nlet BaseScriptList = new r.Array(BaseScriptRecord, r.uint16);\n\n// Array of 4-byte baseline identification tags-must be in alphabetical order\nlet BaseTagList = new r.Array(new r.String(4), r.uint16);\n\nlet Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n },\n\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype';\nimport {ItemVariationStore} from './variations';\n\nlet AttachPoint = new r.Array(r.uint16, r.uint16);\nlet AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\n\nlet CaretValue = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n coordinate: r.int16\n },\n\n 2: { // Contour point\n caretValuePoint: r.uint16\n },\n\n 3: { // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\n\nlet LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\n\nlet MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet ValueFormat = new r.Bitfield(r.uint16, [\n 'xPlacement', 'yPlacement',\n 'xAdvance', 'yAdvance',\n 'xPlaDevice', 'yPlaDevice',\n 'xAdvDevice', 'yAdvDevice'\n]);\n\nlet types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }),\n yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel })\n};\n\nclass ValueRecord {\n constructor(key = 'valueFormat') {\n this.key = key;\n }\n\n buildStruct(parent) {\n let struct = parent;\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n\n if (!struct[this.key]) return;\n\n let fields = {};\n fields.rel = () => struct._startOffset;\n\n let format = struct[this.key];\n for (let key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n\n return new r.Struct(fields);\n }\n\n size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n }\n\n decode(stream, parent) {\n let res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n }\n}\n\nlet PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet PairSet = new r.Array(PairValueRecord, r.uint16);\n\nlet Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\n\nlet Anchor = new r.VersionedStruct(r.uint16, {\n 1: { // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n\n 2: { // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n\n 3: { // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\n\nlet EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'})\n});\n\nlet MarkArray = new r.Array(MarkRecord, r.uint16);\n\nlet BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount);\nlet BaseArray = new r.Array(BaseRecord, r.uint16);\n\nlet ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount);\nlet LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nlet LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\n\nlet GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, { // Single Adjustment\n 1: { // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n\n 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning\n 1: { // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n\n 2: { // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n\n 3: { // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n\n 4: { // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n\n 5: { // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n\n 6: { // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n\n 7: Context, // Contextual positioning\n 8: ChainingContext, // Chaining contextual positioning\n\n 9: { // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 9\n extension: new r.Pointer(r.uint32, null)\n }\n});\n\n// Fix circular reference\nGPOSLookup.versions[9].extension.type = GPOSLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n\n// export GPOSLookup for JSTF table\nexport { GPOSLookup };\n","import * as r from 'restructure';\nimport {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype';\nimport {FeatureVariations} from './variations';\n\nlet Sequence = new r.Array(r.uint16, r.uint16);\nlet AlternateSet = Sequence;\n\nlet Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, t => t.compCount - 1)\n});\n\nlet LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\n\nlet GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {// Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n\n 2: { // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n\n 3: { // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n\n 4: { // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n\n 5: Context, // Contextual Substitution\n 6: ChainingContext, // Chaining Contextual Substitution\n\n 7: { // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16, // cannot also be 7\n extension: new r.Pointer(r.uint32, null)\n },\n\n 8: { // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n});\n\n// Fix circular reference\nGSUBLookup.versions[7].extension.type = GSUBLookup;\n\nexport default new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\n","import * as r from 'restructure';\nimport { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype';\nimport { GPOSLookup } from './GPOS';\n\nlet JstfGSUBModList = new r.Array(r.uint16, r.uint16);\n\nlet JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\n\nlet JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\n\nlet JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\n\nlet JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\n\nlet JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'})\n});\n\nexport default new r.Struct({\n version: r.uint32, // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\n","import * as r from 'restructure';\nimport { resolveLength } from 'restructure';\nimport { ItemVariationStore } from './variations';\n\n// TODO: add this to restructure\nclass VariableSizeNumber {\n constructor(size) {\n this._size = size;\n }\n\n decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1: return stream.readUInt8();\n case 2: return stream.readUInt16BE();\n case 3: return stream.readUInt24BE();\n case 4: return stream.readUInt32BE();\n }\n }\n\n size(val, parent) {\n return resolveLength(this._size, null, parent);\n }\n}\n\nlet MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1),\n outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1),\n innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1)\n});\n\nlet DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\n\nexport default new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\n","import * as r from 'restructure';\n\nlet Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\n\nlet SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\n\nexport default new r.Struct({\n ulVersion: r.uint32, // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16, // Number of signatures in the table\n usFlag: r.uint16, // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\n","import * as r from 'restructure';\n\nlet GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit',\n 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\n\nexport default new r.Struct({\n version: r.uint16, // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\n","import * as r from 'restructure';\n\nlet DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs)\n});\n\n// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\nexport default new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\n","import * as r from 'restructure';\n\nlet KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\n\nlet ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: t => t.offsets.length && Math.max.apply(Math, t.offsets)\n});\n\nlet Kern2Array = new r.Struct({\n off: t => t._startOffset - t.parent.parent._startOffset,\n len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2),\n values: new r.LazyArray(r.int16, 'len')\n});\n\nlet KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}),\n array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'})\n },\n\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount)\n }\n});\n\nlet KernTable = new r.VersionedStruct('version', {\n 0: { // Microsoft uses this format\n subVersion: r.uint16, // Microsoft has an extra sub-table version number\n length: r.uint16, // Length of the subtable, in bytes\n format: r.uint8, // Format of subtable\n coverage: new r.Bitfield(r.uint8, [\n 'horizontal', // 1 if table has horizontal data, 0 if vertical\n 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n },\n 1: { // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [\n null, null, null, null, null,\n 'variation', // Set if table has variation kerning values\n 'crossStream', // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n }\n});\n\nexport default new r.VersionedStruct(r.uint16, {\n 0: { // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n\n 1: { // Apple Version\n reserved: new r.Reserved(r.uint16), // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n});\n","import * as r from 'restructure';\n\n// Linear Threshold table\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\nexport default new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n","import * as r from 'restructure';\n\n// PCL 5 Table\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\nexport default new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n});\n","import * as r from 'restructure';\n\n// VDMX tables contain ascender/descender overrides for certain (usually small)\n// sizes. This is needed in order to match font metrics on Windows.\n\nlet Ratio = new r.Struct({\n bCharSet: r.uint8, // Character set\n xRatio: r.uint8, // Value to use for x-Ratio\n yStartRatio: r.uint8, // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n});\n\nlet vTable = new r.Struct({\n yPelHeight: r.uint16, // yPelHeight to which values apply\n yMax: r.int16, // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\n\nlet VdmxGroup = new r.Struct({\n recs: r.uint16, // Number of height records in this group\n startsz: r.uint8, // Starting yPelHeight\n endsz: r.uint8, // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n});\n\nexport default new r.Struct({\n version: r.uint16, // Version number (0 or 1)\n numRecs: r.uint16, // Number of VDMX groups present\n numRatios: r.uint16, // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\n","import * as r from 'restructure';\n\n// Vertical Header Table\nexport default new r.Struct({\n version: r.uint16, // Version number of the Vertical Header Table\n ascent: r.int16, // The vertical typographic ascender for this font\n descent: r.int16, // The vertical typographic descender for this font\n lineGap: r.int16, // The vertical typographic line gap for this font\n advanceHeightMax: r.int16, // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16, // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16, // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\n","import * as r from 'restructure';\n\nlet VmtxEntry = new r.Struct({\n advance: r.uint16, // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n});\n\n// Vertical Metrics Table\nexport default new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics),\n bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics)\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\n\nlet Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\n\nlet Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet BslnSubtable = new r.VersionedStruct('format', {\n 0: { // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n\n 1: { // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n\n 2: { // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n\n 3: { // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\n","import * as r from 'restructure';\n\nclass UnboundedArrayAccessor {\n constructor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n\n getItem(index) {\n if (this._items[index] == null) {\n let pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n\n return this._items[index];\n }\n\n inspect() {\n return `[UnboundedArray ${this.type.constructor.name}]`;\n }\n}\n\nexport class UnboundedArray extends r.Array {\n constructor(type) {\n super(type, 0);\n }\n\n decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n }\n}\n\nexport let LookupTable = function(ValueType = r.uint16) {\n // Helper class that makes internal structures invisible to pointers\n class Shadow {\n constructor(type) {\n this.type = type;\n }\n\n decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n }\n\n size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n }\n\n encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n }\n }\n\n ValueType = new Shadow(ValueType);\n\n let BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n\n let LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n\n let LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'})\n });\n\n let LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits)\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits)\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits)\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\n\nexport function StateTable(entryData = {}, lookupType = r.uint16) {\n let entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses));\n\n let StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n\n return StateHeader;\n}\n\n// This is the old version of the StateTable structure\nexport function StateTable1(entryData = {}, lookupType = r.uint16) {\n let ClassLookupTable = new r.Struct({\n version() { return 8; }, // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n\n let entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses,\n flags: r.uint16\n }, entryData);\n\n let Entry = new r.Struct(entry);\n let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses));\n\n let StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n\n return StateHeader1;\n}\n","import * as r from 'restructure';\n\nlet Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nlet FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }),\n featureFlags: new r.Bitfield(r.uint8, [\n null, null, null, null, null, null,\n 'hasDefault', 'exclusive'\n ]),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex]\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\n","import * as r from 'restructure';\n\nlet Axis = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID]\n});\n\nlet Instance = new r.Struct({\n nameID: r.uint16,\n name: t => t.parent.parent.name.records.fontFeatures[t.nameID],\n flags: r.uint16,\n coord: new r.Array(r.fixed32, t => t.parent.axisCount),\n postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0)\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\n","import * as r from 'restructure';\n\nlet shortFrac = new r.Fixed(16, 'BE', 14);\nclass Offset {\n static decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags\n ? stream.readUInt32BE()\n : stream.readUInt16BE() * 2;\n }\n}\n\nlet gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1)\n});\n\nexport default gvar;\n","import * as r from 'restructure';\nimport { LookupTable, StateTable1 } from './aat';\n\nlet ClassTable = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1\n});\n\nlet WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\n\nlet WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\n\nlet ActionData = new r.VersionedStruct('actionType', {\n 0: { // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n\n 1: { // Unconditional add glyph action\n addGlyph: r.uint16\n },\n\n 2: { // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n\n 3: {}, // Stretch glyph action (no data, not supported by CoreText)\n\n 4: { // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n\n 5: { // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\n\nlet Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset)\n});\n\nlet PostcompensationAction = new r.Array(Action, r.uint32);\nlet PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\n\nlet JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset }))\n});\n\nexport default new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\n","import * as r from 'restructure';\nimport { UnboundedArray, LookupTable, StateTable } from './aat';\n\nlet LigatureData = {\n action: r.uint16\n};\n\nlet ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\n\nlet InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\n\nlet SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable))\n});\n\nlet SubtableData = new r.VersionedStruct('type', {\n 0: { // Indic Rearrangement Subtable\n stateTable: new StateTable\n },\n\n 1: { // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n\n 2: { // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n\n 4: { // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable\n },\n\n 5: { // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\n\nlet Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset)\n});\n\nlet FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\n\nlet MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\n\nexport default new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\n","import * as r from 'restructure';\nimport { LookupTable } from './aat';\n\nlet OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\n\nexport default new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\n","import { binarySearch } from './utils';\nimport { encodingExists, getEncoding, getEncodingMapping } from './encodings';\nimport { cache } from './decorators';\nimport { range } from './utils';\n\nexport default class CmapProcessor {\n constructor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [\n // 32-bit subtables\n [3, 10],\n [0, 6],\n [0, 4],\n\n // 16-bit subtables\n [3, 1],\n [0, 3],\n [0, 2],\n [0, 1],\n [0, 0]\n ]);\n\n // If not unicode cmap was found, take the first table with a supported encoding.\n if (!this.cmap) {\n for (let cmap of cmapTable.tables) {\n let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n let mapping = getEncodingMapping(encoding);\n if (mapping) {\n this.cmap = cmap.table;\n this.encoding = mapping;\n }\n }\n }\n\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n\n findSubtable(cmapTable, pairs) {\n for (let [platformID, encodingID] of pairs) {\n for (let cmap of cmapTable.tables) {\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n\n return null;\n }\n\n lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n codepoint = this.encoding.get(codepoint) || codepoint;\n\n // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n } else if (variationSelector) {\n let gid = this.getVariationSelector(codepoint, variationSelector);\n if (gid) {\n return gid;\n }\n }\n\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n\n case 4: {\n let min = 0;\n let max = cmap.segCount - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n let rangeOffset = cmap.idRangeOffset.get(mid);\n let gid;\n\n if (rangeOffset === 0) {\n gid = codepoint + cmap.idDelta.get(mid);\n } else {\n let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n gid = cmap.glyphIndexArray.get(index) || 0;\n if (gid !== 0) {\n gid += cmap.idDelta.get(mid);\n }\n }\n\n return gid & 0xffff;\n }\n }\n\n return 0;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n\n case 12:\n case 13: {\n let min = 0;\n let max = cmap.nGroups - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let group = cmap.groups.get(mid);\n\n if (codepoint < group.startCharCode) {\n max = mid - 1;\n } else if (codepoint > group.endCharCode) {\n min = mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n\n return 0;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n\n let selectors = this.uvs.varSelectors.toArray();\n let i = binarySearch(selectors, x => variationSelector - x.varSelector);\n let sel = selectors[i];\n\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, x =>\n codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0\n );\n }\n\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue);\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n\n return 0;\n }\n\n @cache\n getCharacterSet() {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n\n case 4: {\n let res = [];\n let endCodes = cmap.endCode.toArray();\n for (let i = 0; i < endCodes.length; i++) {\n let tail = endCodes[i] + 1;\n let start = cmap.startCode.get(i);\n res.push(...range(start, tail));\n }\n\n return res;\n }\n\n case 8:\n throw new Error('TODO: cmap format 8');\n\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n\n case 12:\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n\n return res;\n }\n\n case 14:\n throw new Error('TODO: cmap format 14');\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n\n @cache\n codePointsForGlyph(gid) {\n let cmap = this.cmap;\n switch (cmap.version) {\n case 0: {\n let res = [];\n for (let i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n\n return res;\n }\n\n case 4: {\n let res = [];\n for (let i = 0; i < cmap.segCount; i++) {\n let end = cmap.endCode.get(i);\n let start = cmap.startCode.get(i);\n let rangeOffset = cmap.idRangeOffset.get(i);\n let delta = cmap.idDelta.get(i);\n\n for (var c = start; c <= end; c++) {\n let g = 0;\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i);\n g = cmap.glyphIndexArray.get(index) || 0;\n if (g !== 0) {\n g += delta;\n }\n }\n\n if (g === gid) {\n res.push(c);\n }\n }\n }\n\n return res;\n }\n\n case 12: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n res.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n\n return res;\n }\n\n case 13: {\n let res = [];\n for (let group of cmap.groups.toArray()) {\n if (gid === group.glyphID) {\n res.push(...range(group.startCharCode, group.endCharCode + 1));\n }\n }\n\n return res;\n }\n\n default:\n throw new Error(`Unknown cmap format ${cmap.version}`);\n }\n }\n}\n","export function binarySearch(arr, cmp) {\n let min = 0;\n let max = arr.length - 1;\n while (min <= max) {\n let mid = (min + max) >> 1;\n let res = cmp(arr[mid]);\n\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n\n return -1;\n}\n\nexport function range(index, end) {\n let range = [];\n while (index < end) {\n range.push(index++);\n }\n return range;\n}\n\nexport const asciiDecoder = new TextDecoder('ascii');\n\n// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license.\nconst CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst LOOKUP = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n LOOKUP[CHARS.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n let bufferLength = base64.length * 0.75;\n\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n let bytes = new Uint8Array(bufferLength);\n let p = 0;\n\n for (let i = 0, len = base64.length; i < len; i += 4) {\n let encoded1 = LOOKUP[base64.charCodeAt(i)];\n let encoded2 = LOOKUP[base64.charCodeAt(i + 1)];\n let encoded3 = LOOKUP[base64.charCodeAt(i + 2)];\n let encoded4 = LOOKUP[base64.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return bytes;\n}\n","import KernProcessor from './KernProcessor';\nimport UnicodeLayoutEngine from './UnicodeLayoutEngine';\nimport GlyphRun from './GlyphRun';\nimport GlyphPosition from './GlyphPosition';\nimport * as Script from './Script';\nimport AATLayoutEngine from '../aat/AATLayoutEngine';\nimport OTLayoutEngine from '../opentype/OTLayoutEngine';\n\nexport default class LayoutEngine {\n constructor(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null;\n\n // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n\n layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n }\n\n // Map string to glyphs if needed\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = Script.forString(string);\n }\n\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n let codePoints = [];\n for (let glyph of string) {\n codePoints.push(...glyph.codePoints);\n }\n\n script = Script.forCodePoints(codePoints);\n }\n\n var glyphs = string;\n }\n\n let glyphRun = new GlyphRun(glyphs, features, script, language, direction);\n\n // Return early if there are no glyphs\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n }\n\n // Setup the advanced layout engine\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n }\n\n // Substitute and position the glyphs\n this.substitute(glyphRun);\n this.position(glyphRun);\n\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions);\n\n // Let the layout engine clean up any state it might have\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n\n return glyphRun;\n }\n\n substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n }\n\n position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth));\n let positioned = null;\n\n // Call the advanced layout engine. Returns the features applied.\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n }\n\n // if there is no GPOS table, use unicode properties to position marks.\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n }\n\n // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n }\n\n hideDefaultIgnorables(glyphs, positions) {\n let space = this.font.glyphForCodePoint(0x20);\n for (let i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n let plane = ch >> 16;\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n \tcase 0x00: return ch === 0x00AD;\n \tcase 0x03: return ch === 0x034F;\n \tcase 0x06: return ch === 0x061C;\n \tcase 0x17: return 0x17B4 <= ch && ch <= 0x17B5;\n \tcase 0x18: return 0x180B <= ch && ch <= 0x180E;\n \tcase 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F);\n \tcase 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF;\n \tcase 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8;\n \tdefault: return false;\n }\n } else {\n // Other planes\n switch (plane) {\n \tcase 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A);\n \tcase 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF;\n \tdefault: return false;\n }\n }\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.engine) {\n features.push(...this.engine.getAvailableFeatures(script, language));\n }\n\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n\n return features;\n }\n\n stringsForGlyph(gid) {\n let result = new Set;\n\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n for (let codePoint of codePoints) {\n result.add(String.fromCodePoint(codePoint));\n }\n\n if (this.engine && this.engine.stringsForGlyph) {\n for (let string of this.engine.stringsForGlyph(gid)) {\n result.add(string);\n }\n }\n\n return Array.from(result);\n }\n}\n","import {binarySearch} from '../utils';\n\nexport default class KernProcessor {\n constructor(font) {\n this.kern = font.kern;\n }\n\n process(glyphs, positions) {\n for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n let left = glyphs[glyphIndex].id;\n let right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n }\n\n getKerning(left, right) {\n let res = 0;\n\n for (let table of this.kern.tables) {\n if (table.coverage.crossStream) {\n continue;\n }\n\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n\n break;\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n\n break;\n default:\n throw new Error(`Unsupported kerning table version ${table.version}`);\n }\n\n let val = 0;\n let s = table.subtable;\n switch (table.format) {\n case 0:\n let pairIdx = binarySearch(s.pairs, function (pair) {\n return (left - pair.left) || (right - pair.right);\n });\n\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n\n break;\n\n case 2:\n let leftOffset = 0, rightOffset = 0;\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n\n let index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n\n default:\n throw new Error(`Unsupported kerning sub-table format ${table.format}`);\n }\n\n // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n\n return res;\n }\n}\n","import {getCombiningClass} from 'unicode-properties';\n\n/**\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\n * for positioning marks relative to base glyphs. It uses the unicode\n * combining class property to position marks.\n *\n * Based on code from Harfbuzz, thanks!\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\n */\nexport default class UnicodeLayoutEngine {\n constructor(font) {\n this.font = font;\n }\n\n positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n let clusterStart = 0;\n let clusterEnd = 0;\n for (let index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.isMark) { // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n clusterStart = clusterEnd = index;\n }\n }\n\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n\n return positions;\n }\n\n positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n let base = glyphs[clusterStart];\n let baseBox = base.cbox.copy();\n\n // adjust bounding box for ligature glyphs\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length;\n }\n\n let xOffset = -positions[clusterStart].xAdvance;\n let yOffset = 0;\n let yGap = this.font.unitsPerEm / 16;\n\n // position each of the mark glyphs relative to the base glyph\n for (let index = clusterStart + 1; index <= clusterEnd; index++) {\n let mark = glyphs[index];\n let markBox = mark.cbox;\n let position = positions[index];\n\n let combiningClass = this.getCombiningClass(mark.codePoints[0]);\n\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0;\n\n // x positioning\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n\n default: // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n }\n\n // y positioning\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n\n return;\n }\n\n getCombiningClass(codePoint) {\n let combiningClass = getCombiningClass(codePoint);\n\n // Thai / Lao need some per-character work\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) { // virama\n return 'Below_Right';\n }\n }\n\n switch (combiningClass) {\n // Hebrew\n\n case 'CCC10': // sheva\n case 'CCC11': // hataf segol\n case 'CCC12': // hataf patah\n case 'CCC13': // hataf qamats\n case 'CCC14': // hiriq\n case 'CCC15': // tsere\n case 'CCC16': // segol\n case 'CCC17': // patah\n case 'CCC18': // qamats\n case 'CCC20': // qubuts\n case 'CCC22': // meteg\n return 'Below';\n\n case 'CCC23': // rafe\n return 'Attached_Above';\n\n case 'CCC24': // shin dot\n return 'Above_Right';\n\n case 'CCC25': // sin dot\n case 'CCC19': // holam\n return 'Above_Left';\n\n case 'CCC26': // point varika\n return 'Above';\n\n case 'CCC21': // dagesh\n break;\n\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n case 'CCC28': // dammatan\n case 'CCC30': // fatha\n case 'CCC31': // damma\n case 'CCC33': // shadda\n case 'CCC34': // sukun\n case 'CCC35': // superscript alef\n case 'CCC36': // superscript alaph\n return 'Above';\n\n case 'CCC29': // kasratan\n case 'CCC32': // kasra\n return 'Below';\n\n // Thai\n\n case 'CCC103': // sara u / sara uu\n return 'Below_Right';\n\n case 'CCC107': // mai\n return 'Above_Right';\n\n // Lao\n\n case 'CCC118': // sign u / sign uu\n return 'Below';\n\n case 'CCC122': // mai\n return 'Above';\n\n // Tibetan\n\n case 'CCC129': // sign aa\n case 'CCC132': // sign u\n return 'Below';\n\n case 'CCC130': // sign i\n return 'Above';\n }\n\n return combiningClass;\n }\n}\n","import BBox from '../glyph/BBox';\nimport * as Script from '../layout/Script';\n\n/**\n * Represents a run of Glyph and GlyphPosition objects.\n * Returned by the font layout method.\n */\nexport default class GlyphRun {\n constructor(glyphs, features, script, language, direction) {\n /**\n * An array of Glyph objects in the run\n * @type {Glyph[]}\n */\n this.glyphs = glyphs;\n\n /**\n * An array of GlyphPosition objects for each glyph in the run\n * @type {GlyphPosition[]}\n */\n this.positions = null;\n\n /**\n * The script that was requested for shaping. This was either passed in or detected automatically.\n * @type {string}\n */\n this.script = script;\n\n /**\n * The language requested for shaping, as passed in. If `null`, the default language for the\n * script was used.\n * @type {string}\n */\n this.language = language || null;\n\n /**\n * The direction requested for shaping, as passed in (either ltr or rtl).\n * If `null`, the default direction of the script is used.\n * @type {string}\n */\n this.direction = direction || Script.direction(script);\n\n /**\n * The features requested during shaping. This is a combination of user\n * specified features and features chosen by the shaper.\n * @type {object}\n */\n this.features = {};\n\n // Convert features to an object\n if (Array.isArray(features)) {\n for (let tag of features) {\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n\n /**\n * The total advance width of the run.\n * @type {number}\n */\n get advanceWidth() {\n let width = 0;\n for (let position of this.positions) {\n width += position.xAdvance;\n }\n\n return width;\n }\n\n /**\n * The total advance height of the run.\n * @type {number}\n */\n get advanceHeight() {\n let height = 0;\n for (let position of this.positions) {\n height += position.yAdvance;\n }\n\n return height;\n }\n\n /**\n * The bounding box containing all glyphs in the run.\n * @type {BBox}\n */\n get bbox() {\n let bbox = new BBox;\n\n let x = 0;\n let y = 0;\n for (let index = 0; index < this.glyphs.length; index++) {\n let glyph = this.glyphs[index];\n let p = this.positions[index];\n let b = glyph.bbox;\n\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n\n x += p.xAdvance;\n y += p.yAdvance;\n }\n\n return bbox;\n }\n}\n","/**\n * Represents a glyph bounding box\n */\nexport default class BBox {\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n /**\n * The minimum X position in the bounding box\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * The minimum Y position in the bounding box\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * The maxmimum X position in the bounding box\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * The maxmimum Y position in the bounding box\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * The width of the bounding box\n * @type {number}\n */\n get width() {\n return this.maxX - this.minX;\n }\n\n /**\n * The height of the bounding box\n * @type {number}\n */\n get height() {\n return this.maxY - this.minY;\n }\n\n addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n }\n\n copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n }\n}\n","import {getScript} from 'unicode-properties';\n\n// This maps the Unicode Script property to an OpenType script tag\n// Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nconst UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\n\nconst OPENTYPE_SCRIPTS = {};\nfor (let script in UNICODE_SCRIPTS) {\n let tag = UNICODE_SCRIPTS[script];\n if (Array.isArray(tag)) {\n for (let t of tag) {\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\n\nexport function fromUnicode(script) {\n return UNICODE_SCRIPTS[script];\n}\n\nexport function fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\n\nexport function forString(string) {\n let len = string.length;\n let idx = 0;\n while (idx < len) {\n let code = string.charCodeAt(idx++);\n\n // Check if this is a high surrogate\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n let next = string.charCodeAt(idx);\n\n // Check if this is a low surrogate\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n\n let script = getScript(code);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\nexport function forCodePoints(codePoints) {\n for (let i = 0; i < codePoints.length; i++) {\n let codePoint = codePoints[i];\n let script = getScript(codePoint);\n if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') {\n return UNICODE_SCRIPTS[script];\n }\n }\n\n return UNICODE_SCRIPTS.Unknown;\n}\n\n// The scripts in this map are written from right to left\nconst RTL = {\n arab: true, // Arabic\n hebr: true, // Hebrew\n syrc: true, // Syriac\n thaa: true, // Thaana\n cprt: true, // Cypriot Syllabary\n khar: true, // Kharosthi\n phnx: true, // Phoenician\n 'nko ': true, // N'Ko\n lydi: true, // Lydian\n avst: true, // Avestan\n armi: true, // Imperial Aramaic\n phli: true, // Inscriptional Pahlavi\n prti: true, // Inscriptional Parthian\n sarb: true, // Old South Arabian\n orkh: true, // Old Turkic, Orkhon Runic\n samr: true, // Samaritan\n mand: true, // Mandaic, Mandaean\n merc: true, // Meroitic Cursive\n mero: true, // Meroitic Hieroglyphs\n\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true, // Manichaean\n mend: true, // Mende Kikakui\n nbat: true, // Nabataean\n narb: true, // Old North Arabian\n palm: true, // Palmyrene\n phlp: true // Psalter Pahlavi\n};\n\nexport function direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n\n return 'ltr';\n}\n","/**\n * Represents positioning information for a glyph in a GlyphRun.\n */\nexport default class GlyphPosition {\n constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) {\n /**\n * The amount to move the virtual pen in the X direction after rendering this glyph.\n * @type {number}\n */\n this.xAdvance = xAdvance;\n\n /**\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\n * @type {number}\n */\n this.yAdvance = yAdvance;\n\n /**\n * The offset from the pen position in the X direction at which to render this glyph.\n * @type {number}\n */\n this.xOffset = xOffset;\n\n /**\n * The offset from the pen position in the Y direction at which to render this glyph.\n * @type {number}\n */\n this.yOffset = yOffset;\n }\n}\n","import * as AATFeatureMap from './AATFeatureMap';\nimport * as Script from '../layout/Script';\nimport AATMorxProcessor from './AATMorxProcessor';\n\nexport default class AATLayoutEngine {\n constructor(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n\n substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n\n this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features));\n }\n\n getAvailableFeatures(script, language) {\n return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures());\n }\n\n stringsForGlyph(gid) {\n let glyphStrings = this.morxProcessor.generateInputs(gid);\n let result = new Set;\n\n for (let glyphs of glyphStrings) {\n this._addStrings(glyphs, 0, result, '');\n }\n\n return result;\n }\n\n _addStrings(glyphs, index, strings, string) {\n let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n\n for (let codePoint of codePoints) {\n let s = string + String.fromCodePoint(codePoint);\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n }\n}\n","// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nconst features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: { // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\n\nconst feature = (name, selector) => [features[name].code, features[name][selector]];\n\nconst OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'), // ??\n\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'), // ??\n numr: feature('fractions', 'diagonalFractions'), // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'), // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n\n init: feature('smartSwash', 'wordInitialSwashes'), // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'), // ??\n medi: feature('smartSwash', 'nonFinalSwashes'), // ??\n med2: feature('smartSwash', 'nonFinalSwashes'), // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'), // ??\n fina: feature('smartSwash', 'wordFinalSwashes'), // ??\n\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n\n calt: feature('contextualAlternates', 'contextualAlternates'), // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'), //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n};\n\n // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n\n// Add cv01-cv99 features\nfor (let i = 1; i <= 99; i++) {\n OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i];\n}\n\n// create inverse mapping\nlet AATMapping = {};\nfor (let ot in OTMapping) {\n let aat = OTMapping[ot];\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n\n AATMapping[aat[0]][aat[1]] = ot;\n}\n\n// Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\nexport function mapOTToAAT(features) {\n let res = {};\n for (let k in features) {\n let r;\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n\n res[r[0]][r[1]] = features[k];\n }\n }\n\n return res;\n}\n\n// Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\nfunction mapFeatureStrings(f) {\n let [type, setting] = f;\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n\n return [typeCode, settingCode];\n}\n\n// Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\nexport function mapAATToOT(features) {\n let res = {};\n if (Array.isArray(features)) {\n for (let k = 0; k < features.length; k++) {\n let r;\n let f = mapFeatureStrings(features[k]);\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n\n } else if (typeof features === 'object') {\n for (let type in features) {\n let feature = features[type];\n for (let setting in feature) {\n let r;\n let f = mapFeatureStrings([type, setting]);\n if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) {\n res[r] = true;\n }\n }\n }\n }\n\n return Object.keys(res);\n}\n","import AATStateMachine from './AATStateMachine';\nimport AATLookupTable from './AATLookupTable';\nimport {cache} from '../decorators';\n\n// indic replacement flags\nconst MARK_FIRST = 0x8000;\nconst MARK_LAST = 0x2000;\nconst VERB = 0x000F;\n\n// contextual substitution and glyph insertion flag\nconst SET_MARK = 0x8000;\n\n// ligature entry flags\nconst SET_COMPONENT = 0x8000;\nconst PERFORM_ACTION = 0x2000;\n\n// ligature action masks\nconst LAST_MASK = 0x80000000;\nconst STORE_MASK = 0x40000000;\nconst OFFSET_MASK = 0x3FFFFFFF;\n\nconst VERTICAL_ONLY = 0x800000;\nconst REVERSE_DIRECTION = 0x400000;\nconst HORIZONTAL_AND_VERTICAL = 0x200000;\n\n// glyph insertion flags\nconst CURRENT_IS_KASHIDA_LIKE = 0x2000;\nconst MARKED_IS_KASHIDA_LIKE = 0x1000;\nconst CURRENT_INSERT_BEFORE = 0x0800;\nconst MARKED_INSERT_BEFORE = 0x0400;\nconst CURRENT_INSERT_COUNT = 0x03E0;\nconst MARKED_INSERT_COUNT = 0x001F;\n\nexport default class AATMorxProcessor {\n constructor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n }\n\n // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n process(glyphs, features = {}) {\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n // enable/disable the requested features\n for (let feature of chain.features) {\n let f;\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n }\n\n // remove deleted glyphs\n let index = glyphs.length - 1;\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n\n index--;\n }\n\n return glyphs;\n }\n\n processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n }\n\n @cache\n getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n }\n\n getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n case 1:\n return this.processContextualSubstitution;\n case 2:\n return this.processLigature;\n case 4:\n return this.processNoncontextualSubstitutions;\n case 5:\n return this.processGlyphInsertion;\n default:\n throw new Error(`Invalid morx subtable type: ${this.subtable.type}`);\n }\n }\n\n processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n }\n\n processContextualSubstitution(glyph, entry, index) {\n let subsitutions = this.subtable.table.substitutionTable.items;\n if (entry.markIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.markIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.currentIndex !== 0xffff) {\n let lookup = subsitutions.getItem(entry.currentIndex);\n let lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[index];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n }\n\n processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n\n if (entry.flags & PERFORM_ACTION) {\n let actions = this.subtable.table.ligatureActions;\n let components = this.subtable.table.components;\n let ligatureList = this.subtable.table.ligatureList;\n\n let actionIndex = entry.action;\n let last = false;\n let ligatureIndex = 0;\n let codePoints = [];\n let ligatureGlyphs = [];\n\n while (!last) {\n let componentGlyph = this.ligatureStack.pop();\n codePoints.unshift(...this.glyphs[componentGlyph].codePoints);\n\n let action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n let store = !!(action & STORE_MASK);\n let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n offset += this.glyphs[componentGlyph].id;\n\n let component = components.getItem(offset);\n ligatureIndex += component;\n\n if (last || store) {\n let ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n }\n\n // Put ligature glyph indexes back on the stack\n this.ligatureStack.push(...ligatureGlyphs);\n }\n }\n\n processNoncontextualSubstitutions(subtable, glyphs, index) {\n let lookupTable = new AATLookupTable(subtable.table.lookupTable);\n\n for (index = 0; index < glyphs.length; index++) {\n let glyph = glyphs[index];\n if (glyph.id !== 0xffff) {\n let gid = lookupTable.lookup(glyph.id);\n if (gid) { // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n }\n\n _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n let insertions = [];\n while (count--) {\n let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n\n if (!isBefore) {\n glyphIndex++;\n }\n\n this.glyphs.splice(glyphIndex, 0, ...insertions);\n }\n\n processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n\n if (entry.markedInsertIndex !== 0xffff) {\n let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n\n if (entry.currentInsertIndex !== 0xffff) {\n let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore);\n }\n }\n\n getSupportedFeatures() {\n let features = [];\n for (let chain of this.morx.chains) {\n for (let feature of chain.features) {\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n\n return features;\n }\n\n generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n\n return this.inputCache[gid] || [];\n }\n\n generateInputCache() {\n this.inputCache = {};\n\n for (let chain of this.morx.chains) {\n let flags = chain.defaultFlags;\n\n for (let subtable of chain.subtables) {\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n }\n\n generateInputsForSubtable(subtable) {\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n\n let reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n\n this.subtable = subtable;\n this.ligatureStack = [];\n\n let stateMachine = this.getStateMachine(subtable);\n let process = this.getProcessor();\n\n let input = [];\n let stack = [];\n this.glyphs = [];\n\n stateMachine.traverse({\n enter: (glyph, entry) => {\n let glyphs = this.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: this.ligatureStack.slice()\n });\n\n // Add glyph to input and glyphs to process.\n let g = this.font.getGlyph(glyph);\n input.push(g);\n glyphs.push(input[input.length - 1]);\n\n // Process ligature substitution\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1);\n\n // Add input to result if only one matching (non-deleted) glyph remains.\n let count = 0;\n let found = 0;\n for (let i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n\n if (count === 1) {\n let result = input.map(g => g.id);\n let cache = this.inputCache[found];\n if (cache) {\n cache.push(result);\n } else {\n this.inputCache[found] = [result];\n }\n }\n },\n\n exit: () => {\n ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop());\n input.pop();\n }\n });\n }\n}\n\n// swaps the glyphs in rangeA with those in rangeB\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\nfunction swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) {\n let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n if (reverseB) {\n end.reverse();\n }\n\n let start = glyphs.splice(rangeA[0], rangeA[1], ...end);\n if (reverseA) {\n start.reverse();\n }\n\n glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start);\n return glyphs;\n}\n\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n let length = lastGlyph - firstGlyph + 1;\n switch (verb) {\n case 0: // no change\n return glyphs;\n\n case 1: // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n\n case 2: // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n\n case 3: // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n\n case 4: // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n\n case 5: // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n\n case 6: // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n\n case 7: // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n\n case 8: // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n\n case 9: // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n\n case 10: // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n\n case 11: // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n\n case 12: // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n\n case 13: // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n\n case 14: // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n\n case 15: // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n\n default:\n throw new Error(`Unknown verb: ${verb}`);\n }\n}\n","import AATLookupTable from './AATLookupTable';\n\nconst START_OF_TEXT_STATE = 0;\nconst START_OF_LINE_STATE = 1;\n\nconst END_OF_TEXT_CLASS = 0;\nconst OUT_OF_BOUNDS_CLASS = 1;\nconst DELETED_GLYPH_CLASS = 2;\nconst END_OF_LINE_CLASS = 3;\n\nconst DONT_ADVANCE = 0x4000;\n\nexport default class AATStateMachine {\n constructor(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n\n process(glyphs, reverse, processEntry) {\n let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n let index = reverse ? glyphs.length - 1 : 0;\n let dir = reverse ? -1 : 1;\n\n while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) {\n let glyph = null;\n let classCode = OUT_OF_BOUNDS_CLASS;\n let shouldAdvance = true;\n\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n if (glyph.id === 0xffff) { // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n\n let row = this.stateTable.stateArray.getItem(currentState);\n let entryIndex = row[classCode];\n let entry = this.stateTable.entryTable.getItem(entryIndex);\n\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n\n currentState = entry.newState;\n if (shouldAdvance) {\n index += dir;\n }\n }\n\n return glyphs;\n }\n\n /**\n * Performs a depth-first traversal of the glyph strings\n * represented by the state machine.\n */\n traverse(opts, state = 0, visited = new Set) {\n if (visited.has(state)) {\n return;\n }\n\n visited.add(state);\n\n let {nClasses, stateArray, entryTable} = this.stateTable;\n let row = stateArray.getItem(state);\n\n // Skip predefined classes\n for (let classCode = 4; classCode < nClasses; classCode++) {\n let entryIndex = row[classCode];\n let entry = entryTable.getItem(entryIndex);\n\n // Try all glyphs in the class\n for (let glyph of this.lookupTable.glyphsForValue(classCode)) {\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n }\n}\n","import {cache} from '../decorators';\nimport {range} from '../utils';\n\nexport default class AATLookupTable {\n constructor(table) {\n this.table = table;\n }\n\n lookup(glyph) {\n switch (this.table.version) {\n case 0: // simple array format\n return this.table.values.getItem(glyph);\n\n case 2: // segment format\n case 4: {\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n\n return null;\n }\n\n case 6: { // lookup single\n let min = 0;\n let max = this.table.binarySearchHeader.nUnits - 1;\n\n while (min <= max) {\n var mid = (min + max) >> 1;\n var seg = this.table.segments[mid];\n\n // special end of search value\n if (seg.glyph === 0xffff) {\n return null;\n }\n\n if (glyph < seg.glyph) {\n max = mid - 1;\n } else if (glyph > seg.glyph) {\n min = mid + 1;\n } else {\n return seg.value;\n }\n }\n\n return null;\n }\n\n case 8: // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n }\n\n @cache\n glyphsForValue(classValue) {\n let res = [];\n\n switch (this.table.version) {\n case 2: // segment format\n case 4: {\n for (let segment of this.table.segments) {\n if ((this.table.version === 2 && segment.value === classValue)) {\n res.push(...range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (let index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n\n break;\n }\n\n case 6: { // lookup single\n for (let segment of this.table.segments) {\n if (segment.value === classValue) {\n res.push(segment.glyph);\n }\n }\n\n break;\n }\n\n case 8: { // lookup trimmed\n for (let i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n\n break;\n }\n\n default:\n throw new Error(`Unknown lookup table format: ${this.table.version}`);\n }\n\n return res;\n }\n}\n","import ShapingPlan from './ShapingPlan';\nimport * as Shapers from './shapers';\nimport GlyphInfo from './GlyphInfo';\nimport GSUBProcessor from './GSUBProcessor';\nimport GPOSProcessor from './GPOSProcessor';\n\nexport default class OTLayoutEngine {\n constructor(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n\n setup(glyphRun) {\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints]));\n\n // Select a script based on what is available in GSUB/GPOS.\n let script = null;\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n\n // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n this.shaper = Shapers.choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features);\n\n // Assign chosen features to output glyph run\n for (let key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n }\n\n substitute(glyphRun) {\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos);\n\n // Map glyph infos back to normal Glyph objects\n glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints));\n }\n }\n\n position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n\n // Reverse the glyphs and positions if the script is right-to-left\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n\n return this.GPOSProcessor && this.GPOSProcessor.features;\n }\n\n zeroMarkAdvances(positions) {\n for (let i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n }\n\n cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n }\n\n getAvailableFeatures(script, language) {\n let features = [];\n\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GSUBProcessor.features));\n }\n\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push(...Object.keys(this.GPOSProcessor.features));\n }\n\n return features;\n }\n}\n","import * as Script from '../layout/Script';\n\n/**\n * ShapingPlans are used by the OpenType shapers to store which\n * features should by applied, and in what order to apply them.\n * The features are applied in groups called stages. A feature\n * can be applied globally to all glyphs, or locally to only\n * specific glyphs.\n *\n * @private\n */\nexport default class ShapingPlan {\n constructor(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n\n /**\n * Adds the given features to the last stage.\n * Ignores features that have already been applied.\n */\n _addFeatures(features, global) {\n let stageIndex = this.stages.length - 1;\n let stage = this.stages[stageIndex];\n for (let feature of features) {\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n\n /**\n * Add features to the last stage\n */\n add(arg, global = true) {\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n\n if (typeof arg === 'string') {\n arg = [arg];\n }\n\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n\n /**\n * Add a new stage\n */\n addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n }\n\n setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (let tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n let stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n\n /**\n * Assigns the global features to the given glyphs\n */\n assignGlobalFeatures(glyphs) {\n for (let glyph of glyphs) {\n for (let feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n\n /**\n * Executes the planned stages using the given OTProcessor\n */\n process(processor, glyphs, positions) {\n for (let stage of this.stages) {\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport ArabicShaper from './ArabicShaper';\nimport HangulShaper from './HangulShaper';\nimport IndicShaper from './IndicShaper';\nimport UniversalShaper from './UniversalShaper';\n\nconst SHAPERS = {\n arab: ArabicShaper, // Arabic\n mong: ArabicShaper, // Mongolian\n syrc: ArabicShaper, // Syriac\n 'nko ': ArabicShaper, // N'Ko\n phag: ArabicShaper, // Phags Pa\n mand: ArabicShaper, // Mandaic\n mani: ArabicShaper, // Manichaean\n phlp: ArabicShaper, // Psalter Pahlavi\n\n hang: HangulShaper, // Hangul\n\n bng2: IndicShaper, // Bengali\n beng: IndicShaper, // Bengali\n dev2: IndicShaper, // Devanagari\n deva: IndicShaper, // Devanagari\n gjr2: IndicShaper, // Gujarati\n gujr: IndicShaper, // Gujarati\n guru: IndicShaper, // Gurmukhi\n gur2: IndicShaper, // Gurmukhi\n knda: IndicShaper, // Kannada\n knd2: IndicShaper, // Kannada\n mlm2: IndicShaper, // Malayalam\n mlym: IndicShaper, // Malayalam\n ory2: IndicShaper, // Oriya\n orya: IndicShaper, // Oriya\n taml: IndicShaper, // Tamil\n tml2: IndicShaper, // Tamil\n telu: IndicShaper, // Telugu\n tel2: IndicShaper, // Telugu\n khmr: IndicShaper, // Khmer\n\n bali: UniversalShaper, // Balinese\n batk: UniversalShaper, // Batak\n brah: UniversalShaper, // Brahmi\n bugi: UniversalShaper, // Buginese\n buhd: UniversalShaper, // Buhid\n cakm: UniversalShaper, // Chakma\n cham: UniversalShaper, // Cham\n dupl: UniversalShaper, // Duployan\n egyp: UniversalShaper, // Egyptian Hieroglyphs\n gran: UniversalShaper, // Grantha\n hano: UniversalShaper, // Hanunoo\n java: UniversalShaper, // Javanese\n kthi: UniversalShaper, // Kaithi\n kali: UniversalShaper, // Kayah Li\n khar: UniversalShaper, // Kharoshthi\n khoj: UniversalShaper, // Khojki\n sind: UniversalShaper, // Khudawadi\n lepc: UniversalShaper, // Lepcha\n limb: UniversalShaper, // Limbu\n mahj: UniversalShaper, // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper, // Meitei Mayek\n modi: UniversalShaper, // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper, // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper, // Rejang\n saur: UniversalShaper, // Saurashtra\n shrd: UniversalShaper, // Sharada\n sidd: UniversalShaper, // Siddham\n sinh: IndicShaper, // Sinhala\n sund: UniversalShaper, // Sundanese\n sylo: UniversalShaper, // Syloti Nagri\n tglg: UniversalShaper, // Tagalog\n tagb: UniversalShaper, // Tagbanwa\n tale: UniversalShaper, // Tai Le\n lana: UniversalShaper, // Tai Tham\n tavt: UniversalShaper, // Tai Viet\n takr: UniversalShaper, // Takri\n tibt: UniversalShaper, // Tibetan\n tfng: UniversalShaper, // Tifinagh\n tirh: UniversalShaper, // Tirhuta\n\n latn: DefaultShaper, // Latin\n DFLT: DefaultShaper // Default\n};\n\nexport function choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n let shaper = SHAPERS[s];\n if (shaper) {\n return shaper;\n }\n }\n\n return DefaultShaper;\n}\n","import {isDigit} from 'unicode-properties';\n\nconst VARIATION_FEATURES = ['rvrn'];\nconst COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nconst FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nconst HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nconst VERTICAL_FEATURES = ['vert'];\nconst DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\n\nexport default class DefaultShaper {\n static zeroMarkWidths = 'AFTER_GPOS';\n static plan(plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(plan);\n this.planFeatures(plan);\n this.planPostprocessing(plan, features);\n\n // Assign the global features to all the glyphs\n plan.assignGlobalFeatures(glyphs);\n\n // Assign local features to glyphs\n this.assignFeatures(plan, glyphs);\n }\n\n static planPreprocessing(plan) {\n plan.add({\n global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]],\n local: FRACTIONAL_FEATURES\n });\n }\n\n static planFeatures(plan) {\n // Do nothing by default. Let subclasses override this.\n }\n\n static planPostprocessing(plan, userFeatures) {\n plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]);\n plan.setFeatureOverrides(userFeatures);\n }\n\n static assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (let i = 0; i < glyphs.length; i++) {\n let glyph = glyphs[i];\n if (glyph.codePoints[0] === 0x2044) { // fraction slash\n let start = i;\n let end = i + 1;\n\n // Apply numerator\n while (start > 0 && isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n }\n\n // Apply denominator\n while (end < glyphs.length && isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n }\n\n // Apply fraction slash\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport {getCategory} from 'unicode-properties';\nimport UnicodeTrie from 'unicode-trie';\nimport { decodeBase64 } from '../../utils';\n\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\nconst FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\n\nconst ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\n\nconst ISOL = 'isol';\nconst FINA = 'fina';\nconst FIN2 = 'fin2';\nconst FIN3 = 'fin3';\nconst MEDI = 'medi';\nconst MED2 = 'med2';\nconst INIT = 'init';\nconst NONE = null;\n\n// Each entry is [prevAction, curAction, nextState]\nconst STATE_TABLE = [\n // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n // State 0: prev was U, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ],\n\n // State 1: prev was R or ISOL/ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ],\n\n // State 2: prev was D/L in ISOL form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ],\n\n // State 3: prev was D in FINA form, willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ],\n\n // State 4: prev was FINA ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ],\n\n // State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ],\n\n // State 6: prev was DALATH/RISH, not willing to join.\n [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ]\n];\n\n/**\n * This is a shaper for Arabic, and other cursive scripts.\n * It uses data from ArabicShaping.txt in the Unicode database,\n * compiled to a UnicodeTrie by generate-data.coffee.\n *\n * The shaping state machine was ported from Harfbuzz.\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\n */\nexport default class ArabicShaper extends DefaultShaper {\n static planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n for (let i = 0; i < FEATURES.length; i++) {\n let feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n\n plan.addStage('mset');\n }\n\n static assignFeatures(plan, glyphs) {\n super.assignFeatures(plan, glyphs);\n\n let prev = -1;\n let state = 0;\n let actions = [];\n\n // Apply the state machine to map glyphs to features\n for (let i = 0; i < glyphs.length; i++) {\n let curAction, prevAction;\n var glyph = glyphs[i];\n let type = getShapingClass(glyph.codePoints[0]);\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n\n [prevAction, curAction, state] = STATE_TABLE[state][type];\n\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n\n actions[i] = curAction;\n prev = i;\n }\n\n // Apply the chosen features to their respective glyphs\n for (let index = 0; index < glyphs.length; index++) {\n let feature;\n var glyph = glyphs[index];\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n }\n}\n\nfunction getShapingClass(codePoint) {\n let res = trie.get(codePoint);\n if (res) {\n return res - 1;\n }\n\n let category = getCategory(codePoint);\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n\n return ShapingClasses.Non_Joining;\n}\n","import DefaultShaper from './DefaultShaper';\nimport GlyphInfo from '../GlyphInfo';\n\n/**\n * This is a shaper for the Hangul script, used by the Korean language.\n * It does the following:\n * - decompose if unsupported by the font:\n * -> \n * -> \n * -> \n *\n * - compose if supported by the font:\n * -> \n * -> \n * -> \n *\n * - reorder tone marks (S is any valid syllable):\n * -> \n *\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\n *\n * This logic is based on the following documents:\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\n */\nexport default class HangulShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n }\n\n static assignFeatures(plan, glyphs) {\n let state = 0;\n let i = 0;\n while (i < glyphs.length) {\n let action;\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n let type = getType(code);\n\n [ action, state ] = STATE_TABLE[state][type];\n\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n break;\n\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n\n i++;\n }\n }\n}\n\nconst HANGUL_BASE = 0xac00;\nconst HANGUL_END = 0xd7a4;\nconst HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nconst L_BASE = 0x1100; // lead\nconst V_BASE = 0x1161; // vowel\nconst T_BASE = 0x11a7; // trail\nconst L_COUNT = 19;\nconst V_COUNT = 21;\nconst T_COUNT = 28;\nconst L_END = L_BASE + L_COUNT - 1;\nconst V_END = V_BASE + V_COUNT - 1;\nconst T_END = T_BASE + T_COUNT - 1;\nconst DOTTED_CIRCLE = 0x25cc;\n\nconst isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\nconst isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\nconst isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\nconst isTone = code => 0x302e <= code && code <= 0x302f;\nconst isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END;\nconst isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\nconst isCombiningL = code => L_BASE <= code && code <= L_END;\nconst isCombiningV = code => V_BASE <= code && code <= V_END;\nconst isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END;\n\n// Character categories\nconst X = 0; // Other character\nconst L = 1; // Leading consonant\nconst V = 2; // Medial vowel\nconst T = 3; // Trailing consonant\nconst LV = 4; // Composed syllable\nconst LVT = 5; // Composed syllable\nconst M = 6; // Tone mark\n\n// This function classifies a character using the above categories.\nfunction getType(code) {\n if (isL(code)) { return L; }\n if (isV(code)) { return V; }\n if (isT(code)) { return T; }\n if (isLV(code)) { return LV; }\n if (isLVT(code)) { return LVT; }\n if (isTone(code)) { return M; }\n return X;\n}\n\n// State machine actions\nconst NO_ACTION = 0;\nconst DECOMPOSE = 1;\nconst COMPOSE = 2;\nconst TONE_MARK = 4;\nconst INVALID = 5;\n\n// Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\nconst STATE_TABLE = [\n // X L V T LV LVT M\n // State 0: start state\n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 1: \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ],\n\n // State 2: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ],\n\n // State 3: or \n [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ]\n];\n\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\n\nfunction decompose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyph.codePoints[0];\n\n let s = code - HANGUL_BASE;\n let t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n let l = L_BASE + s / V_COUNT | 0;\n let v = V_BASE + s % V_COUNT;\n\n // Don't decompose if all of the components are not available\n if (!font.hasGlyphForCodePoint(l) ||\n !font.hasGlyphForCodePoint(v) ||\n (t !== T_BASE && !font.hasGlyphForCodePoint(t))) {\n return i;\n }\n\n // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n let ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n\n let vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n\n let insert = [ ljmo, vjmo ];\n\n if (t > T_BASE) {\n let tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n\n glyphs.splice(i, 1, ...insert);\n return i + insert.length - 1;\n}\n\nfunction compose(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n let type = getType(code);\n\n let prev = glyphs[i - 1].codePoints[0];\n let prevType = getType(prev);\n\n // Figure out what type of syllable we're dealing with\n let lv, ljmo, vjmo, tjmo;\n if (prevType === LV && type === T) {\n // \n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // \n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // \n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n\n let l = ljmo.codePoints[0];\n let v = vjmo.codePoints[0];\n\n // Make sure L and V are combining characters\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n\n let t = (tjmo && tjmo.codePoints[0]) || T_BASE;\n if ((lv != null) && (t === T_BASE || isCombiningT(t))) {\n let s = lv + (t - T_BASE);\n\n // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n if (font.hasGlyphForCodePoint(s)) {\n let del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n }\n\n // Didn't compose (either a non-combining component or unsupported by font).\n if (ljmo) { ljmo.features.ljmo = true; }\n if (vjmo) { vjmo.features.vjmo = true; }\n if (tjmo) { tjmo.features.tjmo = true; }\n\n if (prevType === LV) {\n // Sequence was originally , which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n\n return i;\n}\n\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n case V:\n return 2;\n case T:\n return 3;\n }\n}\n\nfunction reorderToneMark(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n // Move tone mark to the beginning of the previous syllable, unless it is zero width\n if (font.glyphForCodePoint(code).advanceWidth === 0) { return; }\n\n let prev = glyphs[i - 1].codePoints[0];\n let len = getLength(prev);\n\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\n\nfunction insertDottedCircle(glyphs, i, font) {\n let glyph = glyphs[i];\n let code = glyphs[i].codePoints[0];\n\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features);\n\n // If the tone mark is zero width, insert the dotted circle before, otherwise after\n let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n\n return i;\n}\n","import {isMark} from 'unicode-properties';\nimport OTProcessor from './OTProcessor';\n\nexport default class GlyphInfo {\n constructor(font, id, codePoints = [], features) {\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n\n this.features = {};\n if (Array.isArray(features)) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n\n get id() {\n return this._id;\n }\n\n set id(id) {\n this._id = id;\n this.substituted = true;\n\n let GDEF = this._font.GDEF;\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n\n copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n }\n}\n","import GlyphIterator from './GlyphIterator';\nimport * as Script from '../layout/Script';\n\nconst DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\n\nexport default class OTProcessor {\n constructor(font, table) {\n this.font = font;\n this.table = table;\n\n this.script = null;\n this.scriptTag = null;\n\n this.language = null;\n this.languageTag = null;\n\n this.features = {};\n this.lookups = {};\n\n // Setup variation substitutions\n this.variationsIndex = font._variationProcessor\n ? this.findVariationsIndex(font._variationProcessor.normalizedCoords)\n : -1;\n\n // initialize to default script + language\n this.selectScript();\n\n // current context (set by applyFeatures)\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n\n findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n\n if (!Array.isArray(script)) {\n script = [script];\n }\n\n for (let s of script) {\n for (let entry of this.table.scriptList) {\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n\n return null;\n }\n\n selectScript(script, language, direction) {\n let changed = false;\n let entry;\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n\n if (!entry) {\n return this.scriptTag;\n }\n\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n\n if (!direction || direction !== this.direction) {\n this.direction = direction || Script.direction(script);\n }\n\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n\n if (!language || language !== this.languageTag) {\n this.language = null;\n\n for (let lang of this.script.langSysRecords) {\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n\n changed = true;\n }\n\n // Build a feature lookup table\n if (changed) {\n this.features = {};\n if (this.language) {\n for (let featureIndex of this.language.featureIndexes) {\n let record = this.table.featureList[featureIndex];\n let substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n\n return this.scriptTag;\n }\n\n lookupsForFeatures(userFeatures = [], exclude) {\n let lookups = [];\n for (let tag of userFeatures) {\n let feature = this.features[tag];\n if (!feature) {\n continue;\n }\n\n for (let lookupIndex of feature.lookupListIndexes) {\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n\n lookups.sort((a, b) => a.index - b.index);\n return lookups;\n }\n\n substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n\n let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n let substitutions = record.featureTableSubstitution.substitutions;\n for (let substitution of substitutions) {\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n\n return null;\n }\n\n findVariationsIndex(coords) {\n let variations = this.table.featureVariations;\n if (!variations) {\n return -1;\n }\n\n let records = variations.featureVariationRecords;\n for (let i = 0; i < records.length; i++) {\n let conditions = records[i].conditionSet.conditionTable;\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n\n return -1;\n }\n\n variationConditionsMatch(conditions, coords) {\n return conditions.every(condition => {\n let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n let lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n }\n\n applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n\n for (let { feature, lookup } of lookups) {\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n\n for (let table of lookup.subTables) {\n let res = this.applyLookup(lookup.lookupType, table);\n if (res) {\n break;\n }\n }\n\n this.glyphIterator.next();\n }\n }\n }\n\n applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n }\n\n applyLookupList(lookupRecords) {\n let options = this.glyphIterator.options;\n let glyphIndex = this.glyphIterator.index;\n\n for (let lookupRecord of lookupRecords) {\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex);\n\n // Get the lookup and setup flags for subtables\n let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index);\n\n // Apply lookup subtables until one matches\n for (let table of lookup.subTables) {\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n }\n\n coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n\n case 2:\n for (let range of coverage.rangeRecords) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n\n break;\n }\n\n return -1;\n }\n\n match(sequenceIndex, sequence, fn, matched) {\n let pos = this.glyphIterator.index;\n let glyph = this.glyphIterator.increment(sequenceIndex);\n let idx = 0;\n\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n\n idx++;\n glyph = this.glyphIterator.next();\n }\n\n this.glyphIterator.index = pos;\n if (idx < sequence.length) {\n return false;\n }\n\n return matched || true;\n }\n\n sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id);\n }\n\n sequenceMatchIndices(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (component, glyph) => {\n // If the current feature doesn't apply to this glyph,\n if (!(this.currentFeature in glyph.features)) {\n return false;\n }\n\n return component === glyph.id;\n }, []);\n }\n\n coverageSequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, (coverage, glyph) =>\n this.coverageIndex(coverage, glyph.id) >= 0\n );\n }\n\n getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1: // Class array\n let i = glyph - classDef.startGlyph;\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n\n break;\n\n case 2:\n for (let range of classDef.classRangeRecord) {\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n\n break;\n }\n\n return 0;\n }\n\n classSequenceMatches(sequenceIndex, sequence, classDef) {\n return this.match(sequenceIndex, sequence, (classID, glyph) =>\n classID === this.getClassID(glyph.id, classDef)\n );\n }\n\n applyContext(table) {\n let index, set;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n set = table.ruleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n if (index === -1) {\n return false;\n }\n\n set = table.classSet[index];\n for (let rule of set) {\n if (this.classSequenceMatches(1, rule.classes, table.classDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n\n applyChainingContext(table) {\n let index;\n switch (table.version) {\n case 1:\n index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let set = table.chainRuleSets[index];\n for (let rule of set) {\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack)\n && this.sequenceMatches(1, rule.input)\n && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n let rules = table.chainClassSet[index];\n if (!rules) {\n return false;\n }\n\n for (let rule of rules) {\n if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) &&\n this.classSequenceMatches(1, rule.input, table.inputClassDef) &&\n this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n\n break;\n\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) &&\n this.coverageSequenceMatches(0, table.inputCoverage) &&\n this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n\n break;\n }\n\n return false;\n }\n}\n","export default class GlyphIterator {\n constructor(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n\n reset(options = {}, index = 0) {\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n }\n\n get cur() {\n return this.glyphs[this.index] || null;\n }\n\n shouldIgnore(glyph) {\n return (this.flags.ignoreMarks && glyph.isMark) ||\n (this.flags.ignoreBaseGlyphs && glyph.isBase) ||\n (this.flags.ignoreLigatures && glyph.isLigature) ||\n (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType);\n }\n\n move(dir) {\n this.index += dir;\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n\n return this.glyphs[this.index];\n }\n\n next() {\n return this.move(+1);\n }\n\n prev() {\n return this.move(-1);\n }\n\n peek(count = 1) {\n let idx = this.index;\n let res = this.increment(count);\n this.index = idx;\n return res;\n }\n\n peekIndex(count = 1) {\n let idx = this.index;\n this.increment(count);\n let res = this.index;\n this.index = idx;\n return res;\n }\n\n increment(count = 1) {\n let dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n while (count--) {\n this.move(dir);\n }\n\n return this.glyphs[this.index];\n }\n}\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport {getCategory} from 'unicode-properties';\nimport * as Script from '../../layout/Script';\nimport GlyphInfo from '../GlyphInfo';\nimport indicMachine from './indic.json';\nimport useData from './use.json';\nimport {\n CATEGORIES,\n POSITIONS,\n CONSONANT_FLAGS,\n JOINER_FLAGS,\n HALANT_OR_COENG_FLAGS, INDIC_CONFIGS,\n INDIC_DECOMPOSITIONS\n} from './indic-data';\nimport { decodeBase64 } from '../../utils';\n\nconst {decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/indic.trie', 'base64')));\nconst stateMachine = new StateMachine(indicMachine);\n\n/**\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\n */\nexport default class IndicShaper extends DefaultShaper {\n static zeroMarkWidths = 'NONE';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n plan.addStage(['locl', 'ccmp']);\n\n plan.addStage(initialReordering);\n\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n\n plan.addStage(finalReordering);\n\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n });\n\n // Setup the indic config for the selected script\n plan.unicodeScript = Script.fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2';\n\n // TODO: turn off kern (Khmer) and liga features.\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint];\n if (d) {\n let decomposed = d.map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction indicCategory(glyph) {\n return trie.get(glyph.codePoints[0]) >> 8;\n}\n\nfunction indicPosition(glyph) {\n return 1 << (trie.get(glyph.codePoints[0]) & 0xff);\n}\n\nclass IndicInfo {\n constructor(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n let last = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) {\n if (start > last) {\n ++syllable;\n for (let i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new IndicInfo(\n 1 << indicCategory(glyphs[i]),\n indicPosition(glyphs[i]),\n tags[0],\n syllable\n );\n }\n\n last = end + 1;\n }\n\n if (last < glyphs.length) {\n ++syllable;\n for (let i = last; i < glyphs.length; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\n\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\n\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\n\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\n\nfunction wouldSubstitute(glyphs, feature) {\n for (let glyph of glyphs) {\n glyph.features = {[feature]: true};\n }\n\n let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n\n return glyphs.length === 1;\n}\n\nfunction consonantPosition(font, consonant, virama) {\n let glyphs = [virama, consonant, virama];\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n\n return POSITIONS.Base_C;\n}\n\nfunction initialReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n let virama = font.glyphForCodePoint(indicConfig.virama).id;\n if (virama) {\n let info = new GlyphInfo(font, virama, [indicConfig.virama]);\n for (let i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let {category, syllableType} = glyphs[start].shaperInfo;\n\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n\n if (syllableType === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(\n 1 << indicCategory(g),\n indicPosition(g),\n glyphs[start].shaperInfo.syllableType,\n glyphs[start].shaperInfo.syllable\n );\n\n // Insert after possible Repha.\n let i = start;\n while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) {\n i++;\n }\n\n glyphs.splice(i++, 0, g);\n end++;\n }\n\n // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n let base = end;\n let limit = start;\n let hasReph = false;\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph &&\n features.rphf &&\n start + 3 <= end && (\n (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) ||\n (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)\n )\n ) {\n // See if it matches the 'rphf' feature.\n let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) {\n limit += 2;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n\n switch (indicConfig.basePos) {\n case 'Last': {\n // starting from the end of the syllable, move backwards\n let i = end;\n let seenBelow = false;\n\n do {\n let info = glyphs[--i].shaperInfo;\n\n // until a consonant is found\n if (isConsonant(glyphs[i])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) {\n base = i;\n break;\n }\n\n // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n if (info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n\n base = i;\n } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (i > limit);\n break;\n }\n\n case 'First': {\n // The first consonant is always the base.\n base = start;\n\n // Mark all subsequent consonants as below.\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n glyphs[i].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n }\n\n // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n }\n\n // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n\n // Reorder characters\n\n for (let i = start; i < base; i++) {\n let info = glyphs[i].shaperInfo;\n info.position = Math.min(POSITIONS.Pre_C, info.position);\n }\n\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n\n // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n for (let j = i + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n break;\n }\n }\n\n // Handle beginning Ra\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n }\n\n // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n if (plan.isOldSpec) {\n let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.H) {\n let j;\n for (j = end - 1; j > i; j--) {\n if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) {\n break;\n }\n }\n\n if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) {\n // Move Halant to after last consonant.\n let t = glyphs[i];\n glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i));\n glyphs[j] = t;\n }\n\n break;\n }\n }\n }\n\n // Attach misc marks to previous char to move with them.\n let lastPos = POSITIONS.Start;\n for (let i = start; i < end; i++) {\n let info = glyphs[i].shaperInfo;\n if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) {\n info.position = lastPos;\n if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (let j = i; j > start; j--) {\n if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n info.position = glyphs[j - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (info.position !== POSITIONS.SMVD) {\n lastPos = info.position;\n }\n }\n\n // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n let last = base;\n for (let i = base + 1; i < end; i++) {\n if (isConsonant(glyphs[i])) {\n for (let j = last + 1; j < i; j++) {\n if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position;\n }\n }\n last = i;\n } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n last = i;\n }\n }\n\n let arr = glyphs.slice(start, end);\n arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position);\n glyphs.splice(start, arr.length, ...arr);\n\n // Find base again\n for (let i = start; i < end; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n base = i;\n break;\n }\n }\n\n // Setup features now\n\n // Reph\n for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) {\n glyphs[i].features.rphf = true;\n }\n\n // Pre-base\n let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n for (let i = start; i < base; i++) {\n glyphs[i].features.half = true;\n if (blwf) {\n glyphs[i].features.blwf = true;\n }\n }\n\n // Post-base\n for (let i = base + 1; i < end; i++) {\n glyphs[i].features.abvf = true;\n glyphs[i].features.pstf = true;\n glyphs[i].features.blwf = true;\n }\n\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (let i = start; i + 1 < base; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.Ra &&\n glyphs[i + 1].shaperInfo.category === CATEGORIES.H &&\n (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ)\n ) {\n glyphs[i].features.blwf = true;\n glyphs[i + 1].features.blwf = true;\n }\n }\n }\n\n let prefLen = 2;\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (let i = base + 1; i + prefLen - 1 < end; i++) {\n let g = [glyphs[i].copy(), glyphs[i + 1].copy()];\n if (wouldSubstitute(g, 'pref')) {\n for (let j = 0; j < prefLen; j++) {\n glyphs[i++].features.pref = true;\n }\n\n // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n if (features.cfar) {\n for (; i < end; i++) {\n glyphs[i].features.cfar = true;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply ZWJ/ZWNJ effects\n for (let i = start + 1; i < end; i++) {\n if (isJoiner(glyphs[i])) {\n let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ;\n let j = i;\n\n do {\n j--;\n\n // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n\n // A ZWNJ disables HALF.\n if (nonJoiner) {\n delete glyphs[j].features.half;\n }\n } while (j > start && !isConsonant(glyphs[j]));\n }\n }\n }\n}\n\nfunction finalReordering(font, glyphs, plan) {\n let indicConfig = plan.indicConfig;\n let features = font._layoutEngine.engine.GSUBProcessor.features;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n\n let tryPref = !!features.pref;\n\n // Find base again\n let base = start;\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n break;\n }\n }\n }\n\n // For Malayalam, skip over unformed below- (but NOT post-) forms.\n if (plan.unicodeScript === 'Malayalam') {\n for (let i = base + 1; i < end; i++) {\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i === end || !isHalantOrCoeng(glyphs[i])) {\n break;\n }\n\n i++; // Skip halant.\n while (i < end && isJoiner(glyphs[i])) {\n i++;\n }\n\n if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) {\n base = i;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n break;\n }\n }\n\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n }\n\n // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n let newPos = base === end ? base - 2 : base - 1;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (let i = newPos; i > start; i--) {\n if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) {\n let oldPos = i - 1;\n if (oldPos < base && base <= newPos) { // Shouldn't actually happen.\n base--;\n }\n\n let tmp = glyphs[oldPos];\n glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos));\n glyphs[newPos] = tmp;\n\n newPos--;\n }\n }\n }\n }\n\n // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n if (start + 1 < end &&\n glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph &&\n (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)\n ) {\n let newRephPos;\n let rephPos = indicConfig.rephPos;\n let found = false;\n\n // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n\n // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n\n // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n\n found = newRephPos < end;\n }\n }\n\n // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n\n found = true;\n }\n }\n\n // 6. Otherwise, reorder reph to the end of the syllable.\n if (!found) {\n newRephPos = end - 1;\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n }\n\n // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (let i = base + 1; i < newRephPos; i++) {\n if (glyphs[i].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n\n let reph = glyphs[start];\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start));\n glyphs[newRephPos] = reph;\n\n if (start < base && base <= newRephPos) {\n base--;\n }\n }\n\n // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n if (tryPref && base + 1 < end) {\n for (let i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n\n // Note: We just check that something got substituted. We don't check that\n // the feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[i].isLigated && !glyphs[i].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n let newPos = base;\n\n // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n }\n\n // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) {\n let oldPos = i;\n for (let j = base + 1; j < oldPos; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n newPos--;\n break;\n }\n }\n }\n }\n\n if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos < end && isJoiner(glyphs[newPos])) {\n newPos++;\n }\n }\n\n let oldPos = i;\n let tmp = glyphs[oldPos];\n glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos));\n glyphs[newPos] = tmp;\n\n if (newPos <= base && base < oldPos) {\n base++;\n }\n }\n\n break;\n }\n }\n }\n\n // Apply 'init' to the Left Matra if it's a word start.\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n","{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}","{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}","// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nexport const CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13, // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14, // Khmer-style Virama.\n Repha: 1 << 15, // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17, // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n};\n\n// Visual positions in a syllable from left to right.\nexport const POSITIONS = {\n Start: 1 << 0,\n\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n\n Above_C: 1 << 6,\n\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n\n End: 1 << 15\n};\n\nexport const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nexport const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nexport const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\n\nexport const INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n};\n\n// Additional decompositions that aren't in Unicode\nexport const INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\n","import DefaultShaper from './DefaultShaper';\nimport StateMachine from 'dfa';\nimport UnicodeTrie from 'unicode-trie';\nimport GlyphInfo from '../GlyphInfo';\nimport useData from './use.json';\nimport { decodeBase64 } from '../../utils';\n\nconst {categories, decompositions} = useData;\nconst trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/use.trie', 'base64')));\nconst stateMachine = new StateMachine(useData);\n\n/**\n * This shaper is an implementation of the Universal Shaping Engine, which\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\n */\nexport default class UniversalShaper extends DefaultShaper {\n static zeroMarkWidths = 'BEFORE_GPOS';\n static planFeatures(plan) {\n plan.addStage(setupSyllables);\n\n // Default glyph pre-processing group\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']);\n\n // Reordering group\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref);\n\n // Orthographic unit shaping group\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder);\n\n // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n\n // Standard topographic presentation and positional feature application\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n }\n\n static assignFeatures(plan, glyphs) {\n // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n for (let i = glyphs.length - 1; i >= 0; i--) {\n let codepoint = glyphs[i].codePoints[0];\n if (decompositions[codepoint]) {\n let decomposed = decompositions[codepoint].map(c => {\n let g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n\n glyphs.splice(i, 1, ...decomposed);\n }\n }\n }\n}\n\nfunction useCategory(glyph) {\n return trie.get(glyph.codePoints[0]);\n}\n\nclass USEInfo {\n constructor(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n }\n}\n\nfunction setupSyllables(font, glyphs) {\n let syllable = 0;\n for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) {\n ++syllable;\n\n // Create shaper info\n for (let i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable);\n }\n\n // Assign rphf feature\n let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n for (let i = start; i < start + limit; i++) {\n glyphs[i].features.rphf = true;\n }\n }\n}\n\nfunction clearSubstitutionFlags(font, glyphs) {\n for (let glyph of glyphs) {\n glyph.substituted = false;\n }\n}\n\nfunction recordRphf(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\n\nfunction recordPref(font, glyphs) {\n for (let glyph of glyphs) {\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\n\nfunction reorder(font, glyphs) {\n let dottedCircle = font.glyphForCodePoint(0x25cc).id;\n\n for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n let i, j;\n let info = glyphs[start].shaperInfo;\n let type = info.syllableType;\n\n // Only a few syllable types need reordering.\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n }\n\n // Insert a dotted circle glyph in broken clusters.\n if (type === 'broken_cluster' && dottedCircle) {\n let g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info;\n\n // Insert after possible Repha.\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++);\n glyphs.splice(++i, 0, g);\n end++;\n }\n\n // Move things forward.\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n\n glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]);\n break;\n }\n }\n }\n\n // Move things back.\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j));\n }\n }\n }\n}\n\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n let syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable);\n return start;\n}\n\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\n\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\n","import OTProcessor from './OTProcessor';\nimport GlyphInfo from './GlyphInfo';\n\nexport default class GSUBProcessor extends OTProcessor {\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n let glyph = this.glyphIterator.cur;\n switch (table.version) {\n case 1:\n glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff;\n break;\n\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n\n return true;\n }\n\n case 2: { // Multiple Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let sequence = table.sequences.get(index);\n\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n\n let features = this.glyphIterator.cur.features;\n let curGlyph = this.glyphIterator.cur;\n let replacement = sequence.slice(1).map((gid, i) => {\n let glyph = new GlyphInfo(this.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n\n this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement);\n return true;\n }\n\n return false;\n }\n\n case 3: { // Alternate Substitution\n let index = this.coverageIndex(table.coverage);\n if (index !== -1) {\n let USER_INDEX = 0; // TODO\n this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX];\n return true;\n }\n\n return false;\n }\n\n case 4: { // Ligature Substitution\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n for (let ligature of table.ligatureSets.get(index)) {\n let matched = this.sequenceMatchIndices(1, ligature.components);\n if (!matched) {\n continue;\n }\n\n let curGlyph = this.glyphIterator.cur;\n\n // Concatenate all of the characters the new ligature will represent\n let characters = curGlyph.codePoints.slice();\n for (let index of matched) {\n characters.push(...this.glyphs[index].codePoints);\n }\n\n // Create the replacement ligature glyph\n let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features);\n ligatureGlyph.shaperInfo = curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true;\n\n // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n let isMarkLigature = curGlyph.isMark;\n for (let i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n\n let lastLigID = curGlyph.ligatureID;\n let lastNumComps = curGlyph.codePoints.length;\n let curComps = lastNumComps;\n let idx = this.glyphIterator.index + 1;\n\n // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n for (let matchIndex of matched) {\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n }\n\n // Adjust ligature components for any marks following\n if (lastLigID && !isMarkLigature) {\n for (let i = idx; i < this.glyphs.length; i++) {\n if (this.glyphs[i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps);\n this.glyphs[i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n }\n\n // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n for (let i = matched.length - 1; i >= 0; i--) {\n this.glyphs.splice(matched[i], 1);\n }\n\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n\n return false;\n }\n\n case 5: // Contextual Substitution\n return this.applyContext(table);\n\n case 6: // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n\n case 7: // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`GSUB lookupType ${lookupType} is not supported`);\n }\n }\n}\n","import OTProcessor from './OTProcessor';\n\nexport default class GPOSProcessor extends OTProcessor {\n applyPositionValue(sequenceIndex, value) {\n let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n }\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n }\n\n // TODO: device tables\n }\n\n applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1: { // Single positioning value\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n\n return true;\n }\n\n case 2: { // Pair Adjustment Positioning\n let nextGlyph = this.glyphIterator.peek();\n if (!nextGlyph) {\n return false;\n }\n\n let index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n\n switch (table.version) {\n case 1: // Adjustments for glyph pairs\n let set = table.pairSets.get(index);\n\n for (let pair of set) {\n if (pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n return false;\n\n case 2: // Class pair adjustment\n let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n let class2 = this.getClassID(nextGlyph.id, table.classDef2);\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n\n case 3: { // Cursive Attachment Positioning\n let nextIndex = this.glyphIterator.peekIndex();\n let nextGlyph = this.glyphs[nextIndex];\n if (!nextGlyph) {\n return false;\n }\n\n let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n\n let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)];\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n\n let entry = this.getAnchor(nextRecord.entryAnchor);\n let exit = this.getAnchor(curRecord.exitAnchor);\n\n let cur = this.positions[this.glyphIterator.index];\n let next = this.positions[nextIndex];\n let d;\n\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n\n d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n\n return true;\n }\n\n case 4: { // Mark to base positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0));\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n if (baseIndex === -1) {\n return false;\n }\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 5: { // Mark to ligature positioning\n let markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n }\n\n // search backward for a base glyph\n let baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark);\n\n if (baseGlyphIndex < 0) {\n return false;\n }\n\n let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id);\n if (ligIndex === -1) {\n return false;\n }\n\n let ligAttach = table.ligatureArray[ligIndex];\n let markGlyph = this.glyphIterator.cur;\n let ligGlyph = this.glyphs[baseGlyphIndex];\n let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0)\n ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1\n : ligGlyph.codePoints.length - 1;\n\n let markRecord = table.markArray[markIndex];\n let baseAnchor = ligAttach[compIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n\n case 6: { // Mark to mark positioning\n let mark1Index = this.coverageIndex(table.mark1Coverage);\n if (mark1Index === -1) {\n return false;\n }\n\n // get the previous mark to attach to\n let prevIndex = this.glyphIterator.peekIndex(-1);\n let prev = this.glyphs[prevIndex];\n if (!prev || !prev.isMark) {\n return false;\n }\n\n let cur = this.glyphIterator.cur;\n\n // The following logic was borrowed from Harfbuzz\n let good = false;\n if (cur.ligatureID === prev.ligatureID) {\n if (!cur.ligatureID) { // Marks belonging to the same base\n good = true;\n } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) {\n good = true;\n }\n }\n\n if (!good) {\n return false;\n }\n\n let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n if (mark2Index === -1) {\n return false;\n }\n\n let markRecord = table.mark1Array[mark1Index];\n let baseAnchor = table.mark2Array[mark2Index][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, prevIndex);\n return true;\n }\n\n case 7: // Contextual positioning\n return this.applyContext(table);\n\n case 8: // Chaining contextual positioning\n return this.applyChainingContext(table);\n\n case 9: // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n\n default:\n throw new Error(`Unsupported GPOS table: ${lookupType}`);\n }\n }\n\n applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n let baseCoords = this.getAnchor(baseAnchor);\n let markCoords = this.getAnchor(markRecord.markAnchor);\n\n let basePos = this.positions[baseGlyphIndex];\n let markPos = this.positions[this.glyphIterator.index];\n\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n }\n\n getAnchor(anchor) {\n // TODO: contour point, device tables\n let x = anchor.xCoordinate;\n let y = anchor.yCoordinate;\n\n // Adjustments for font variations\n let variationProcessor = this.font._variationProcessor;\n let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n\n return { x, y };\n }\n\n applyFeatures(userFeatures, glyphs, advances) {\n super.applyFeatures(userFeatures, glyphs, advances);\n\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n\n this.fixMarkAttachment();\n }\n\n fixCursiveAttachment(i) {\n let glyph = this.glyphs[i];\n if (glyph.cursiveAttachment != null) {\n let j = glyph.cursiveAttachment;\n\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n }\n\n fixMarkAttachment() {\n for (let i = 0; i < this.glyphs.length; i++) {\n let glyph = this.glyphs[i];\n if (glyph.markAttachment != null) {\n let j = glyph.markAttachment;\n\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n\n if (this.direction === 'ltr') {\n for (let k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (let k = j + 1; k < i + 1; k++) {\n this.positions[i].xOffset += this.positions[k].xAdvance;\n this.positions[i].yOffset += this.positions[k].yAdvance;\n }\n }\n }\n }\n }\n}\n","import Glyph from './Glyph';\nimport Path from './Path';\nimport BBox from './BBox';\nimport * as r from 'restructure';\n\n// The header for both simple and composite glyphs\nlet GlyfHeader = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n});\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\n// Flags for composite glyphs\nconst ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst ARGS_ARE_XY_VALUES = 1 << 1;\nconst ROUND_XY_TO_GRID = 1 << 2;\nconst WE_HAVE_A_SCALE = 1 << 3;\nconst MORE_COMPONENTS = 1 << 5;\nconst WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nconst WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nconst WE_HAVE_INSTRUCTIONS = 1 << 8;\nconst USE_MY_METRICS = 1 << 9;\nconst OVERLAP_COMPOUND = 1 << 10;\nconst SCALED_COMPONENT_OFFSET = 1 << 11;\nconst UNSCALED_COMPONENT_OFFSET = 1 << 12;\n\n// Represents a point in a simple glyph\nexport class Point {\n constructor(onCurve, endContour, x = 0, y = 0) {\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n\n copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n }\n}\n\n// Represents a component in a composite glyph\nclass Component {\n constructor(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n }\n}\n\n/**\n * Represents a TrueType glyph.\n */\nexport default class TTFGlyph extends Glyph {\n type = 'TTF';\n\n // Parses just the glyph header and returns the bounding box\n _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += this._font.loca.offsets[this.id];\n let glyph = GlyfHeader.decode(stream);\n\n let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n }\n\n // Parses a single glyph coordinate\n _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n if (!same) {\n val = -val;\n }\n\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n\n return val;\n }\n\n // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n _decode() {\n let glyfPos = this._font.loca.offsets[this.id];\n let nextPos = this._font.loca.offsets[this.id + 1];\n\n // Nothing to do if there is no data for this glyph\n if (glyfPos === nextPos) { return null; }\n\n let stream = this._font._getTableStream('glyf');\n stream.pos += glyfPos;\n let startPos = stream.pos;\n\n let glyph = GlyfHeader.decode(stream);\n\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n\n return glyph;\n }\n\n _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n\n let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n\n let flags = [];\n let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag);\n\n // check for repeat flag\n if (flag & REPEAT) {\n let count = stream.readUInt8();\n for (let j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n\n let px = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n\n let py = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n\n if (this._font._variationProcessor) {\n let points = glyph.points.slice();\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.slice(-4);\n }\n\n return;\n }\n\n _decodeComposite(glyph, stream, offset = 0) {\n // this is a composite glyph\n glyph.components = [];\n let haveInstructions = false;\n let flags = MORE_COMPONENTS;\n\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n let gPos = stream.pos - offset;\n let glyphID = stream.readUInt16BE();\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX =\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824;\n }\n\n glyph.components.push(component);\n }\n\n if (this._font._variationProcessor) {\n let points = [];\n for (let j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n\n points.push(...this._getPhantomPoints(glyph));\n\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.splice(-4, 4);\n\n for (let i = 0; i < points.length; i++) {\n let point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n\n return haveInstructions;\n }\n\n _getPhantomPoints(glyph) {\n let cbox = this._getCBox(true);\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n\n let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics;\n\n return [\n new Point(false, true, glyph.xMin - leftBearing, 0),\n new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0),\n new Point(false, true, 0, glyph.yMax + topBearing),\n new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)\n ];\n }\n\n // Decodes font data, resolves composite glyphs, and returns an array of contours\n _getContours() {\n let glyph = this._decode();\n if (!glyph) {\n return [];\n }\n\n let points = [];\n\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (let component of glyph.components) {\n let contours = this._font.getGlyph(component.glyphID)._getContours();\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n for (let j = 0; j < contour.length; j++) {\n let point = contour[j];\n let x = point.x * component.scaleX + point.y * component.scale01 + component.dx;\n let y = point.y * component.scaleY + point.x * component.scale10 + component.dy;\n points.push(new Point(point.onCurve, point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n }\n\n // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n\n let contours = [];\n let cur = [];\n for (let k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n\n return contours;\n }\n\n _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n\n let cbox = this._getCBox(true);\n super._getMetrics(cbox);\n\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n\n return this._metrics;\n }\n\n // Converts contours to a Path object that can be rendered\n _getPath() {\n let contours = this._getContours();\n let path = new Path;\n\n for (let i = 0; i < contours.length; i++) {\n let contour = contours[i];\n let firstPt = contour[0];\n let lastPt = contour[contour.length - 1];\n let start = 0;\n\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n\n var curvePt = firstPt;\n }\n\n path.moveTo(firstPt.x, firstPt.y);\n\n for (let j = start; j < contour.length; j++) {\n let pt = contour[j];\n let prevPt = j === 0 ? firstPt : contour[j - 1];\n\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && !pt.onCurve) {\n let midX = (prevPt.x + pt.x) / 2;\n let midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n }\n\n // Connect the first and last points\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n\n path.closePath();\n }\n\n return path;\n }\n}\n","import { cache } from '../decorators';\nimport Path from './Path';\nimport {isMark} from 'unicode-properties';\nimport StandardNames from './StandardNames';\n\n/**\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\n *\n * You do not create glyph objects directly. They are created by various methods on the font object.\n * There are several subclasses of the base Glyph class internally that may be returned depending\n * on the font format, but they all inherit from this class.\n */\nexport default class Glyph {\n constructor(id, codePoints, font) {\n /**\n * The glyph id in the font\n * @type {number}\n */\n this.id = id;\n\n /**\n * An array of unicode code points that are represented by this glyph.\n * There can be multiple code points in the case of ligatures and other glyphs\n * that represent multiple visual characters.\n * @type {number[]}\n */\n this.codePoints = codePoints;\n this._font = font;\n\n // TODO: get this info from GDEF if available\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n\n _getPath() {\n return new Path();\n }\n\n _getCBox() {\n return this.path.cbox;\n }\n\n _getBBox() {\n return this.path.bbox;\n }\n\n _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n\n let metric = table.metrics.get(table.metrics.length - 1);\n let res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n\n return res;\n }\n\n _getMetrics(cbox) {\n if (this._metrics) { return this._metrics; }\n\n let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx);\n\n // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n if (this._font.vmtx) {\n var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx);\n\n } else {\n let os2;\n if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); }\n\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n\n } else {\n let { hhea } = this._font;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n\n return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing };\n }\n\n /**\n * The glyph’s control box.\n * This is often the same as the bounding box, but is faster to compute.\n * Because of the way bezier curves are defined, some of the control points\n * can be outside of the bounding box. Where `bbox` takes this into account,\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\n * for a more detailed description.\n *\n * @type {BBox}\n */\n @cache\n get cbox() {\n return this._getCBox();\n }\n\n /**\n * The glyph’s bounding box, i.e. the rectangle that encloses the\n * glyph outline as tightly as possible.\n * @type {BBox}\n */\n @cache\n get bbox() {\n return this._getBBox();\n }\n\n /**\n * A vector Path object representing the glyph outline.\n * @type {Path}\n */\n @cache\n get path() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n\n /**\n * Returns a path scaled to the given font size.\n * @param {number} size\n * @return {Path}\n */\n getScaledPath(size) {\n let scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n\n /**\n * The glyph's advance width.\n * @type {number}\n */\n @cache\n get advanceWidth() {\n return this._getMetrics().advanceWidth;\n }\n\n /**\n * The glyph's advance height.\n * @type {number}\n */\n @cache\n get advanceHeight() {\n return this._getMetrics().advanceHeight;\n }\n\n get ligatureCaretPositions() {}\n\n _getName() {\n let { post } = this._font;\n if (!post) {\n return null;\n }\n\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n\n case 2:\n let id = post.glyphNameIndex[this.id];\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n\n return post.names[id - StandardNames.length];\n\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n\n /**\n * The glyph's name\n * @type {string}\n */\n @cache\n get name() {\n return this._getName();\n }\n\n /**\n * Renders the glyph to the given graphics context, at the specified font size.\n * @param {CanvasRenderingContext2d} ctx\n * @param {number} size\n */\n render(ctx, size) {\n ctx.save();\n\n let scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n\n let fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n\n ctx.restore();\n }\n}\n","import BBox from './BBox';\n\nconst SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n\n/**\n * Path objects are returned by glyphs and represent the actual\n * vector outlines for each glyph in the font. Paths can be converted\n * to SVG path data strings, or to functions that can be applied to\n * render the path to a graphics context.\n */\nexport default class Path {\n constructor() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n\n /**\n * Compiles the path to a JavaScript function that can be applied with\n * a graphics context in order to render the path.\n * @return {string}\n */\n toFunction() {\n return ctx => {\n this.commands.forEach(c => {\n return ctx[c.command].apply(ctx, c.args)\n })\n };\n }\n\n /**\n * Converts the path to an SVG path data string\n * @return {string}\n */\n toSVG() {\n let cmds = this.commands.map(c => {\n let args = c.args.map(arg => Math.round(arg * 100) / 100);\n return `${SVG_COMMANDS[c.command]}${args.join(' ')}`;\n });\n\n return cmds.join('');\n }\n\n /**\n * Gets the \"control box\" of a path.\n * This is like the bounding box, but it includes all points including\n * control points of bezier segments and is much faster to compute than\n * the real bounding box.\n * @type {BBox}\n */\n get cbox() {\n if (!this._cbox) {\n let cbox = new BBox;\n for (let command of this.commands) {\n for (let i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n\n this._cbox = Object.freeze(cbox);\n }\n\n return this._cbox;\n }\n\n /**\n * Gets the exact bounding box of the path by evaluating curve segments.\n * Slower to compute than the control box, but more accurate.\n * @type {BBox}\n */\n get bbox() {\n if (this._bbox) {\n return this._bbox;\n }\n\n let bbox = new BBox;\n let cx = 0, cy = 0;\n\n let f = t => (\n Math.pow(1 - t, 3) * p0[i]\n + 3 * Math.pow(1 - t, 2) * t * p1[i]\n + 3 * (1 - t) * Math.pow(t, 2) * p2[i]\n + Math.pow(t, 3) * p3[i]\n );\n\n for (let c of this.commands) {\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n let [x, y] = c.args;\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var [qp1x, qp1y, p3x, p3y] = c.args;\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args;\n }\n\n // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n bbox.addPoint(p3x, p3y);\n\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n\n for (var i = 0; i <= 1; i++) {\n let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n let t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n\n continue;\n }\n\n let b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n\n let t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n\n let t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n\n return this._bbox = Object.freeze(bbox);\n }\n\n /**\n * Applies a mapping function to each point in the path.\n * @param {function} fn\n * @return {Path}\n */\n mapPoints(fn) {\n let path = new Path;\n\n for (let c of this.commands) {\n let args = [];\n for (let i = 0; i < c.args.length; i += 2) {\n let [x, y] = fn(c.args[i], c.args[i + 1]);\n args.push(x, y);\n }\n\n path[c.command](...args);\n }\n\n return path;\n }\n\n /**\n * Transforms the path by the given matrix.\n */\n transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints((x, y) => {\n const tx = m0 * x + m2 * y + m4;\n const ty = m1 * x + m3 * y + m5;\n return [tx, ty];\n });\n }\n\n /**\n * Translates the path by the given offset.\n */\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n\n /**\n * Rotates the path by the given angle (in radians).\n */\n rotate(angle) {\n let cos = Math.cos(angle);\n let sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n\n /**\n * Scales the path.\n */\n scale(scaleX, scaleY = scaleX) {\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nfor (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) {\n Path.prototype[command] = function(...args) {\n this._bbox = this._cbox = null;\n this.commands.push({\n command,\n args\n });\n\n return this;\n };\n}\n","export default [\n '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',\n 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',\n 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',\n 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',\n 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',\n 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',\n 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',\n 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',\n 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',\n 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',\n 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',\n 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',\n 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',\n 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',\n 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',\n 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',\n 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',\n 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',\n 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',\n 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',\n 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',\n 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',\n 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'\n];\n","import Glyph from './Glyph';\nimport Path from './Path';\n\n/**\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\n */\nexport default class CFFGlyph extends Glyph {\n type = 'CFF';\n\n _getName() {\n if (this._font.CFF2) {\n return super._getName();\n }\n\n return this._font['CFF '].getGlyphName(this.id);\n }\n\n bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n }\n\n _getPath() {\n let cff = this._font.CFF2 || this._font['CFF '];\n let { stream } = cff;\n let str = cff.topDict.CharStrings[this.id];\n let end = str.offset + str.length;\n stream.pos = str.offset;\n\n let path = new Path;\n let stack = [];\n let trans = [];\n\n let width = null;\n let nStems = 0;\n let x = 0, y = 0;\n let usedGsubrs;\n let usedSubrs;\n let open = false;\n\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n\n let gsubrs = cff.globalSubrIndex || [];\n let gsubrsBias = this.bias(gsubrs);\n\n let privateDict = cff.privateDictForGlyph(this.id) || {};\n let subrs = privateDict.Subrs || [];\n let subrsBias = this.bias(subrs);\n\n let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n let vsindex = privateDict.vsindex;\n let variationProcessor = this._font._variationProcessor;\n\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n\n path.moveTo(x, y);\n open = true;\n }\n\n let parse = function () {\n while (stream.pos < end) {\n let op = stream.readUInt8();\n if (op < 32) {\n let index, subr, phase;\n let c1x, c1y, c2x, c2y, c3x, c3y;\n let c4x, c4y, c5x, c5y, c6x, c6y;\n let pts;\n\n switch (op) {\n case 1: // hstem\n case 3: // vstem\n case 18: // hstemhm\n case 23: // vstemhm\n parseStems();\n break;\n\n case 4: // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 5: // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n break;\n\n case 6: // hlineto\n case 7: // vlineto\n phase = op === 6;\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n\n path.lineTo(x, y);\n phase = !phase;\n }\n break;\n\n case 8: // rrcurveto\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 10: // callsubr\n index = stack.pop() + subrsBias;\n subr = subrs[index];\n if (subr) {\n usedSubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 11: // return\n if (cff.version >= 2) {\n break;\n }\n return;\n\n case 14: // endchar\n if (cff.version >= 2) {\n break;\n }\n\n if (stack.length > 0) {\n checkWidth();\n }\n\n if (open) {\n path.closePath();\n open = false;\n }\n break;\n\n case 15: { // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n\n vsindex = stack.pop();\n break;\n }\n\n case 16: { // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n\n let blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n let numBlends = stack.pop();\n let numOperands = numBlends * blendVector.length;\n let delta = stack.length - numOperands;\n let base = delta - numBlends;\n\n for (let i = 0; i < numBlends; i++) {\n let sum = stack[base + i];\n for (let j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n\n stack[base + i] = sum;\n }\n\n while (numOperands--) {\n stack.pop();\n }\n\n break;\n }\n\n case 19: // hintmask\n case 20: // cntrmask\n parseStems();\n stream.pos += (nStems + 7) >> 3;\n break;\n\n case 21: // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n\n case 22: // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n\n x += stack.shift();\n moveTo(x, y);\n break;\n\n case 24: // rcurveline\n while (stack.length >= 8) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n\n case 25: // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n\n case 26: // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 27: // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n\n case 28: // shortint\n stack.push(stream.readInt16BE());\n break;\n\n case 29: // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n if (subr) {\n usedGsubrs[index] = true;\n let p = stream.pos;\n let e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n\n case 30: // vhcurveto\n case 31: // hvcurveto\n phase = op === 31;\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n break;\n\n case 12:\n op = stream.readUInt8();\n switch (op) {\n case 3: // and\n let a = stack.pop();\n let b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n\n case 4: // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n\n case 5: // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n\n case 9: // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n\n case 10: // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n\n case 11: // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n\n case 12: // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n\n case 14: // neg\n a = stack.pop();\n stack.push(-a);\n break;\n\n case 15: // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n\n case 18: // drop\n stack.pop();\n break;\n\n case 20: // put\n let val = stack.pop();\n let idx = stack.pop();\n trans[idx] = val;\n break;\n\n case 21: // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n\n case 22: // ifelse\n let s1 = stack.pop();\n let s2 = stack.pop();\n let v1 = stack.pop();\n let v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n\n case 23: // random\n stack.push(Math.random());\n break;\n\n case 24: // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n\n case 26: // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n\n case 27: // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n\n case 28: // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n\n case 29: // index\n idx = stack.pop();\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n\n stack.push(stack[idx]);\n break;\n\n case 30: // roll\n let n = stack.pop();\n let j = stack.pop();\n\n if (j >= 0) {\n while (j > 0) {\n var t = stack[n - 1];\n for (let i = n - 2; i >= 0; i--) {\n stack[i + 1] = stack[i];\n }\n\n stack[0] = t;\n j--;\n }\n } else {\n while (j < 0) {\n var t = stack[0];\n for (let i = 0; i <= n; i++) {\n stack[i] = stack[i + 1];\n }\n\n stack[n - 1] = t;\n j++;\n }\n }\n break;\n\n case 34: // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y;\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 35: // flex\n pts = [];\n\n for (let i = 0; i <= 5; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n stack.shift(); // fd\n break;\n\n case 36: // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n\n case 37: // flex1\n let startx = x;\n let starty = y;\n\n pts = [];\n for (let i = 0; i <= 4; i++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n\n if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n\n pts.push(x, y);\n path.bezierCurveTo(...pts.slice(0, 6));\n path.bezierCurveTo(...pts.slice(6));\n break;\n\n default:\n throw new Error(`Unknown op: 12 ${op}`);\n }\n break;\n\n default:\n throw new Error(`Unknown op: ${op}`);\n }\n\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n\n parse();\n\n if (open) {\n path.closePath();\n }\n\n return path;\n }\n}\n","import TTFGlyph from './TTFGlyph';\nimport * as r from 'restructure';\n\nlet SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(t => t.parent.buflen - t._currentOffset)\n});\n\n/**\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\n */\nexport default class SBIXGlyph extends TTFGlyph {\n type = 'SBIX';\n\n /**\n * Returns an object representing a glyph image at the given point size.\n * The object has a data property with a Buffer containing the actual image data,\n * along with the image type, and origin.\n *\n * @param {number} size\n * @return {object}\n */\n getImageForSize(size) {\n for (let i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n if (table.ppem >= size) { break; }\n }\n\n let offsets = table.imageOffsets;\n let start = offsets[this.id];\n let end = offsets[this.id + 1];\n\n if (start === end) {\n return null;\n }\n\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {buflen: end - start});\n }\n\n render(ctx, size) {\n let img = this.getImageForSize(size);\n if (img != null) {\n let scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale});\n }\n\n if (this._font.sbix.flags.renderOutlines) {\n super.render(ctx, size);\n }\n }\n}\n","import Glyph from './Glyph';\nimport BBox from './BBox';\n\nclass COLRLayer {\n constructor(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n }\n}\n\n/**\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\n * Each glyph in this format contain a list of colored layers, each\n * of which is another vector glyph.\n */\nexport default class COLRGlyph extends Glyph {\n type = 'COLR';\n\n _getBBox() {\n let bbox = new BBox;\n for (let i = 0; i < this.layers.length; i++) {\n let layer = this.layers[i];\n let b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n\n return bbox;\n }\n\n /**\n * Returns an array of objects containing the glyph and color for\n * each layer in the composite color glyph.\n * @type {object[]}\n */\n get layers() {\n let cpal = this._font.CPAL;\n let colr = this._font.COLR;\n let low = 0;\n let high = colr.baseGlyphRecord.length - 1;\n\n while (low <= high) {\n let mid = (low + high) >> 1;\n var rec = colr.baseGlyphRecord[mid];\n\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n }\n\n // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n\n return [new COLRLayer(g, color)];\n }\n\n // otherwise, return an array of all the layers\n let layers = [];\n for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n var g = this._font._getBaseGlyph(rec.gid);\n layers.push(new COLRLayer(g, color));\n }\n\n return layers;\n }\n\n render(ctx, size) {\n for (let {glyph, color} of this.layers) {\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n\n return;\n }\n}\n","const TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nconst TUPLE_COUNT_MASK = 0x0fff;\nconst EMBEDDED_TUPLE_COORD = 0x8000;\nconst INTERMEDIATE_TUPLE = 0x4000;\nconst PRIVATE_POINT_NUMBERS = 0x2000;\nconst TUPLE_INDEX_MASK = 0x0fff;\nconst POINTS_ARE_WORDS = 0x80;\nconst POINT_RUN_COUNT_MASK = 0x7f;\nconst DELTAS_ARE_ZERO = 0x80;\nconst DELTAS_ARE_WORDS = 0x40;\nconst DELTA_RUN_COUNT_MASK = 0x3f;\n\n/**\n * This class is transforms TrueType glyphs according to the data from\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\n * These tables allow infinite adjustments to glyph weight, width, slant,\n * and optical size without the designer needing to specify every exact style.\n *\n * Apple's documentation for these tables is not great, so thanks to the\n * Freetype project for figuring much of this out.\n *\n * @private\n */\nexport default class GlyphVariationProcessor {\n constructor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map;\n }\n\n normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n let normalized = [];\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n let axis = this.font.fvar.axis[i];\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n\n // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n let segment = this.font.avar.segment[i];\n for (let j = 0; j < segment.correspondence.length; j++) {\n let pair = segment.correspondence[j];\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n let prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) /\n (pair.fromCoord - prev.fromCoord + Number.EPSILON) +\n prev.toCoord;\n\n break;\n }\n }\n }\n }\n\n return normalized;\n }\n\n transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) { return; }\n\n let { gvar } = this.font;\n if (gid >= gvar.glyphCount) { return; }\n\n let offset = gvar.offsets[gid];\n if (offset === gvar.offsets[gid + 1]) { return; }\n\n // Read the gvar data for this glyph\n let { stream } = this.font;\n stream.pos = offset;\n if (stream.pos >= stream.length) {\n return;\n }\n\n let tupleCount = stream.readUInt16BE();\n let offsetToData = offset + stream.readUInt16BE();\n\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n\n let origPoints = glyphPoints.map(pt => pt.copy());\n\n tupleCount &= TUPLE_COUNT_MASK;\n for (let i = 0; i < tupleCount; i++) {\n let tupleDataSize = stream.readUInt16BE();\n let tupleIndex = stream.readUInt16BE();\n\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n\n var endCoords = [];\n for (let a = 0; a < gvar.axisCount; a++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n }\n\n // Get the factor at which to apply this tuple\n let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n\n var here = stream.pos;\n stream.pos = offsetToData;\n\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n }\n\n // points.length = 0 means there are deltas for all points\n let nPoints = points.length === 0 ? glyphPoints.length : points.length;\n let xDeltas = this.decodeDeltas(nPoints);\n let yDeltas = this.decodeDeltas(nPoints);\n\n if (points.length === 0) { // all points\n for (let i = 0; i < glyphPoints.length; i++) {\n var point = glyphPoints[i];\n point.x += Math.round(xDeltas[i] * factor);\n point.y += Math.round(yDeltas[i] * factor);\n }\n } else {\n let outPoints = origPoints.map(pt => pt.copy());\n let hasDelta = glyphPoints.map(() => false);\n\n for (let i = 0; i < points.length; i++) {\n let idx = points[i];\n if (idx < glyphPoints.length) {\n let point = outPoints[idx];\n hasDelta[idx] = true;\n\n point.x += xDeltas[i] * factor;\n point.y += yDeltas[i] * factor;\n }\n }\n\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n\n for (let i = 0; i < glyphPoints.length; i++) {\n let deltaX = outPoints[i].x - origPoints[i].x;\n let deltaY = outPoints[i].y - origPoints[i].y;\n\n glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX);\n glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY);\n }\n }\n\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n }\n\n decodePoints() {\n let stream = this.font.stream;\n let count = stream.readUInt8();\n\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n\n let points = new Uint16Array(count);\n let i = 0;\n let point = 0;\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n\n for (let j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n\n return points;\n }\n\n decodeDeltas(count) {\n let stream = this.font.stream;\n let i = 0;\n let deltas = new Int16Array(count);\n\n while (i < count) {\n let run = stream.readUInt8();\n let runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n\n } else {\n let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n for (let j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n\n return deltas;\n }\n\n tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n let normalized = this.normalizedCoords;\n let { gvar } = this.font;\n let factor = 1;\n\n for (let i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n\n if (normalized[i] === 0) {\n return 0;\n }\n\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if ((normalized[i] < Math.min(0, tupleCoords[i])) ||\n (normalized[i] > Math.max(0, tupleCoords[i]))) {\n return 0;\n }\n\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if ((normalized[i] < startCoords[i]) ||\n (normalized[i] > endCoords[i])) {\n return 0;\n\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n\n return factor;\n }\n\n // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n\n let point = 0;\n while (point < points.length) {\n let firstPoint = point;\n\n // find the end point of the contour\n let endPoint = point;\n let pt = points[endPoint];\n while (!pt.endContour) {\n pt = points[++endPoint];\n }\n\n // find the first point that has a delta\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n\n if (point > endPoint) {\n continue;\n }\n\n let firstDelta = point;\n let curDelta = point;\n point++;\n\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n\n point++;\n }\n\n // shift contour if we only have a single delta\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n\n point = endPoint + 1;\n }\n }\n\n deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n\n let iterable = ['x', 'y'];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n\n let in1 = inPoints[ref1][k];\n let in2 = inPoints[ref2][k];\n let out1 = outPoints[ref1][k];\n let out2 = outPoints[ref2][k];\n\n // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n\n for (let p = p1; p <= p2; p++) {\n let out = inPoints[p][k];\n\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n\n outPoints[p][k] = out;\n }\n }\n }\n }\n\n deltaShift(p1, p2, ref, inPoints, outPoints) {\n let deltaX = outPoints[ref].x - inPoints[ref].x;\n let deltaY = outPoints[ref].y - inPoints[ref].y;\n\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n }\n\n getAdvanceAdjustment(gid, table) {\n let outerIndex, innerIndex;\n\n if (table.advanceWidthMapping) {\n let idx = gid;\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n\n let entryFormat = table.advanceWidthMapping.entryFormat;\n ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n }\n\n // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n\n let varData = itemStore.itemVariationData[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex);\n let netAdjustment = 0;\n\n for (let master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n\n return netAdjustment;\n }\n\n getBlendVector(itemStore, outerIndex) {\n let varData = itemStore.itemVariationData[outerIndex];\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n\n let normalizedCoords = this.normalizedCoords;\n let blendVector = [];\n\n // outer loop steps through master designs to be blended\n for (let master = 0; master < varData.regionIndexCount; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegionList.variationRegions[regionIndex];\n\n // inner loop steps through axes in this region\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n\n // compute the scalar contribution of this axis\n // ignore invalid ranges\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n\n // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n\n // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\n\n // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) /\n (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) /\n (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n\n // take product of all the axis scalars\n scalar *= axisScalar;\n }\n\n blendVector[master] = scalar;\n }\n\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n }\n}\n","import cloneDeep from 'clone';\nimport Subset from './Subset';\nimport Directory from '../tables/directory';\nimport Tables from '../tables';\nimport TTFGlyphEncoder from '../glyph/TTFGlyphEncoder';\n\nexport default class TTFSubset extends Subset {\n constructor(font) {\n super(font);\n this.glyphEncoder = new TTFGlyphEncoder;\n }\n\n _addGlyph(gid) {\n let glyph = this.font.getGlyph(gid);\n let glyf = glyph._decode();\n\n // get the offset to the glyph from the loca table\n let curOffset = this.font.loca.offsets[gid];\n let nextOffset = this.font.loca.offsets[gid + 1];\n\n let stream = this.font._getTableStream('glyf');\n stream.pos += curOffset;\n\n let buffer = stream.readBuffer(nextOffset - curOffset);\n\n // if it is a compound glyph, include its components\n if (glyf && glyf.numberOfContours < 0) {\n buffer = new Uint8Array(buffer);\n let view = new DataView(buffer.buffer);\n for (let component of glyf.components) {\n gid = this.includeGlyph(component.glyphID);\n view.setUint16(component.pos, gid);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n\n this.offset += buffer.length;\n return this.glyf.length - 1;\n }\n\n encode() {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n\n this.hmtx = {\n metrics: [],\n bearings: []\n };\n\n // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n let i = 0;\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n\n let maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n\n this.loca.offsets.push(this.offset);\n\n let head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n\n let hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length;\n\n // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n\n // TODO: subset prep, cvt, fpgm?\n return Directory.toBuffer({\n tables: {\n head,\n hhea,\n loca: this.loca,\n maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm\n\n // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n }\n });\n }\n}\n","import * as r from 'restructure';\n\nconst resolved = Promise.resolve();\n\nexport default class Subset {\n constructor(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {};\n\n // always include the missing glyph\n this.includeGlyph(0);\n }\n\n includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n\n return this.mapping[glyph];\n }\n}\n","import * as r from 'restructure';\n\n// Flags for simple glyphs\nconst ON_CURVE = 1 << 0;\nconst X_SHORT_VECTOR = 1 << 1;\nconst Y_SHORT_VECTOR = 1 << 2;\nconst REPEAT = 1 << 3;\nconst SAME_X = 1 << 4;\nconst SAME_Y = 1 << 5;\n\nclass Point {\n static size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n }\n \n static encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n }\n}\n\nlet Glyf = new r.Struct({\n numberOfContours: r.int16, // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point, 0),\n yPoints: new r.Array(Point, 0)\n});\n\n/**\n * Encodes TrueType glyph outlines\n */\nexport default class TTFGlyphEncoder {\n encodeSimple(path, instructions = []) {\n let endPtsOfContours = [];\n let xPoints = [];\n let yPoints = [];\n let flags = [];\n let same = 0;\n let lastX = 0, lastY = 0, lastFlag = 0;\n let pointCount = 0;\n \n for (let i = 0; i < path.commands.length; i++) {\n let c = path.commands[i];\n \n for (let j = 0; j < c.args.length; j += 2) {\n let x = c.args[j];\n let y = c.args[j + 1];\n let flag = 0;\n \n // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n if (c.command === 'quadraticCurveTo' && j === 2) {\n let next = path.commands[i + 1];\n if (next && next.command === 'quadraticCurveTo') {\n let midX = (lastX + next.args[0]) / 2;\n let midY = (lastY + next.args[1]) / 2;\n \n if (x === midX && y === midY) {\n continue;\n }\n }\n }\n \n // All points except control points are on curve.\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE;\n }\n \n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y);\n \n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n \n flags.push(flag);\n lastFlag = flag;\n }\n \n lastX = x;\n lastY = y;\n pointCount++;\n }\n \n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n }\n\n // Close the path if the last command didn't already\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n \n let bbox = path.bbox;\n let glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n \n let size = Glyf.size(glyf);\n let tail = 4 - (size % 4);\n \n let stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf);\n \n // Align to 4-byte length\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n \n return stream.buffer;\n }\n \n _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n let diff = value - last;\n \n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n \n points.push(diff);\n }\n \n return flag;\n }\n}\n","import Subset from './Subset';\nimport CFFTop from '../cff/CFFTop';\nimport CFFPrivateDict from '../cff/CFFPrivateDict';\nimport standardStrings from '../cff/CFFStandardStrings';\n\nexport default class CFFSubset extends Subset {\n constructor(font) {\n super(font);\n\n this.cff = this.font['CFF '];\n if (!this.cff) {\n throw new Error('Not a CFF Font');\n }\n }\n\n subsetCharstrings() {\n this.charstrings = [];\n let gsubrs = {};\n\n for (let gid of this.glyphs) {\n this.charstrings.push(this.cff.getCharString(gid));\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n }\n\n subsetSubrs(subrs, used) {\n let res = [];\n for (let i = 0; i < subrs.length; i++) {\n let subr = subrs[i];\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(new Uint8Array([11])); // return\n }\n }\n\n return res;\n }\n\n subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n\n let used_fds = {};\n let used_subrs = [];\n let fd_select = {};\n for (let gid of this.glyphs) {\n let fd = this.cff.fdForGlyph(gid);\n if (fd == null) {\n continue;\n }\n\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n for (let subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n\n for (let i = 0; i < topDict.FDArray.length; i++) {\n let dict = topDict.FDArray[i];\n delete dict.FontName;\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n\n return;\n }\n\n createCIDFontdict(topDict) {\n let used_subrs = {};\n for (let gid of this.glyphs) {\n let glyph = this.font.getGlyph(gid);\n let path = glyph.path; // this causes the glyph to be parsed\n\n for (let subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n\n let privateDict = Object.assign({}, this.cff.topDict.Private);\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n\n topDict.FDArray = [{ Private: privateDict }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{ first: 0, fd: 0 }],\n sentinel: this.charstrings.length\n };\n }\n\n addString(string) {\n if (!string) {\n return null;\n }\n\n if (!this.strings) {\n this.strings = [];\n }\n\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n }\n\n encode() {\n this.subsetCharstrings();\n\n let charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }]\n };\n\n let topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n\n for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) {\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n\n let top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n\n return CFFTop.toBuffer(top);\n }\n}\n","import TTFFont from './TTFFont';\nimport WOFFDirectory from './tables/WOFFDirectory';\nimport tables from './tables';\nimport inflate from 'tiny-inflate';\nimport * as r from 'restructure';\nimport { asciiDecoder } from './utils';\n\nexport default class WOFFFont extends TTFFont {\n type = 'WOFF';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF';\n }\n\n _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });\n }\n\n _getTableStream(tag) {\n let table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n let outBuffer = new Uint8Array(table.length);\n let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n\n return null;\n }\n}\n","import * as r from 'restructure';\nimport tables from './';\n\nlet WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {type: 'global'}),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\n\nlet WOFFDirectory = new r.Struct({\n tag: new r.String(4), // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\n\nWOFFDirectory.process = function() {\n let tables = {};\n for (let table of this.tables) {\n tables[table.tag] = table;\n }\n\n this.tables = tables;\n};\n\nexport default WOFFDirectory;\n","import * as r from 'restructure';\nimport brotli from 'brotli/decompress.js';\nimport TTFFont from './TTFFont';\nimport TTFGlyph, { Point } from './glyph/TTFGlyph';\nimport WOFF2Glyph from './glyph/WOFF2Glyph';\nimport WOFF2Directory from './tables/WOFF2Directory';\nimport { asciiDecoder } from './utils';\n\n/**\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\n * See spec here: http://www.w3.org/TR/WOFF2/\n */\nexport default class WOFF2Font extends TTFFont {\n type = 'WOFF2';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOF2';\n }\n\n _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n }\n\n _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n let buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n\n let decompressedSize = 0;\n for (let tag in this.directory.tables) {\n let entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length;\n }\n\n let decompressed = brotli(buffer, decompressedSize);\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n\n this.stream = new r.DecodeStream(decompressed);\n this._decompressed = true;\n }\n }\n\n _decodeTable(table) {\n this._decompress();\n return super._decodeTable(table);\n }\n\n // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n _getBaseGlyph(glyph, characters = []) {\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) { this._transformGlyfTable(); }\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n\n } else {\n return super._getBaseGlyph(glyph, characters);\n }\n }\n }\n\n _transformGlyfTable() {\n this._decompress();\n this.stream.pos = this.directory.tables.glyf.offset;\n let table = GlyfTable.decode(this.stream);\n let glyphs = [];\n\n for (let index = 0; index < table.numGlyphs; index++) {\n let glyph = {};\n let nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n\n if (nContours > 0) { // simple glyph\n let nPoints = [];\n let totalPoints = 0;\n\n for (let i = 0; i < nContours; i++) {\n let r = read255UInt16(table.nPoints);\n totalPoints += r;\n nPoints.push(totalPoints);\n }\n\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n for (let i = 0; i < nContours; i++) {\n glyph.points[nPoints[i] - 1].endContour = true;\n }\n\n var instructionSize = read255UInt16(table.glyphs);\n\n } else if (nContours < 0) { // composite glyph\n let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites);\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n\n glyphs.push(glyph);\n }\n\n this._transformedGlyphs = glyphs;\n }\n}\n\n// Special class that accepts a length and returns a sub-stream for that data\nclass Substream {\n constructor(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n\n decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n }\n}\n\n// This struct represents the entire glyf table\nlet GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\n\nconst WORD_CODE = 253;\nconst ONE_MORE_BYTE_CODE2 = 254;\nconst ONE_MORE_BYTE_CODE1 = 255;\nconst LOWEST_U_CODE = 253;\n\nfunction read255UInt16(stream) {\n let code = stream.readUInt8();\n\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n\n return code;\n}\n\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\n\nfunction decodeTriplet(flags, glyphs, nPoints) {\n let y;\n let x = y = 0;\n let res = [];\n\n for (let i = 0; i < nPoints; i++) {\n let dx = 0, dy = 0;\n let flag = flags.readUInt8();\n let onCurve = !(flag >> 7);\n flag &= 0x7f;\n\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n\n } else if (flag < 20) {\n dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8());\n\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n let b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n\n return res;\n}\n","import TTFGlyph from './TTFGlyph';\n\n/**\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\n */\nexport default class WOFF2Glyph extends TTFGlyph {\n type = 'WOFF2';\n\n _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n }\n\n _getCBox() {\n return this.path.bbox;\n }\n}\n","import * as r from 'restructure';\n\nconst Base128 = {\n decode(stream) {\n let result = 0;\n let iterable = [0, 1, 2, 3, 4];\n for (let j = 0; j < iterable.length; j++) {\n let i = iterable[j];\n let code = stream.readUInt8();\n\n // If any of the top seven bits are set then we're about to overflow.\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n\n result = (result << 7) | (code & 0x7f);\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n\n throw new Error('Bad base 128 number');\n }\n};\n\nlet knownTags = [\n 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ',\n 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp',\n 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF',\n 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL',\n 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc',\n 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx',\n 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'\n];\n\nlet WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f),\n tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: t => (t.flags >>> 6) & 0x03,\n transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0,\n transformLength: new r.Optional(Base128, t => t.transformed)\n});\n\nlet WOFF2Directory = new r.Struct({\n tag: new r.String(4), // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\n\nWOFF2Directory.process = function() {\n let tables = {};\n for (let i = 0; i < this.tables.length; i++) {\n let table = this.tables[i];\n tables[table.tag] = table;\n }\n\n return this.tables = tables;\n};\n\nexport default WOFF2Directory;\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\nimport Directory from './tables/directory';\nimport tables from './tables';\nimport { asciiDecoder } from './utils';\n\nlet TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\n\nexport default class TrueTypeCollection {\n type = 'TTC';\n\n static probe(buffer) {\n return asciiDecoder.decode(buffer.slice(0, 4)) === 'ttcf';\n }\n\n constructor(stream) {\n this.stream = stream;\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n\n this.header = TTCHeader.decode(stream);\n }\n\n getFont(name) {\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let offset of this.header.offsets) {\n let stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n","import * as r from 'restructure';\nimport TTFFont from './TTFFont';\n\nlet DFontName = new r.String(r.uint8);\nlet DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\n\nlet Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\n\nlet Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' })\n});\n\nlet TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, t => t.length + 1)\n});\n\nlet DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\n\nlet DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\n\nexport default class DFont {\n type = 'DFont';\n\n static probe(buffer) {\n let stream = new r.DecodeStream(buffer);\n\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n\n for (let type of header.map.typeList.types) {\n if (type.name === 'sfnt') {\n return true;\n }\n }\n\n return false;\n }\n\n constructor(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n\n for (let type of this.header.map.typeList.types) {\n for (let ref of type.refList) {\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n\n getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n let font = new TTFFont(stream);\n if (\n font.postscriptName === name ||\n (\n font.postscriptName instanceof Uint8Array && \n name instanceof Uint8Array && \n font.postscriptName.every((v, i) => name[i] === v)\n )\n ) {\n return font;\n }\n }\n\n return null;\n }\n\n get fonts() {\n let fonts = [];\n for (let ref of this.sfnt.refList) {\n let pos = this.header.dataOffset + ref.dataOffset + 4;\n let stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n\n return fonts;\n }\n}\n"],"names":[],"version":3,"file":"module.mjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/package.json b/skills/flight-finder/node_modules/fontkit/package.json deleted file mode 100644 index dff6f0f..0000000 --- a/skills/flight-finder/node_modules/fontkit/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "name": "fontkit", - "version": "2.0.4", - "description": "An advanced font engine for Node and the browser", - "keywords": [ - "opentype", - "font", - "typography", - "subset", - "emoji", - "glyph", - "layout" - ], - "scripts": { - "test": "run-s build mocha", - "mocha": "mocha", - "build": "parcel build", - "prepublish": "run-s clean trie:** build", - "trie:data": "node src/opentype/shapers/generate-data.js", - "trie:use": "node src/opentype/shapers/gen-use.js", - "trie:indic": "node src/opentype/shapers/gen-indic.js", - "clean": "shx rm -rf src/opentype/shapers/data.trie src/opentype/shapers/use.trie src/opentype/shapers/use.json src/opentype/shapers/indic.trie src/opentype/shapers/indic.json dist", - "coverage": "c8 mocha" - }, - "type": "module", - "main": "dist/main.cjs", - "node-module": "dist/module.mjs", - "browser": "dist/browser.cjs", - "module": "dist/browser-module.mjs", - "source": "src/index.js", - "exports": { - "node": { - "import": "./dist/module.mjs", - "require": "./dist/main.cjs" - }, - "import": "./dist/browser-module.mjs", - "require": "./dist/browser.cjs" - }, - "targets": { - "main": { - "source": "src/node.js", - "context": "browser", - "engines": { - "browsers": "chrome >= 70" - } - }, - "node-module": { - "source": "src/node.js", - "isLibrary": true, - "includeNodeModules": false, - "engines": { - "browsers": "chrome >= 70" - } - }, - "module": { - "source": "src/index.js", - "engines": { - "browsers": "chrome >= 70" - } - }, - "browser": { - "source": "src/index.js", - "engines": { - "browsers": "chrome >= 70" - } - } - }, - "files": [ - "src", - "dist" - ], - "author": "Devon Govett ", - "license": "MIT", - "repository": { - "type": "git", - "url": "git://github.com/foliojs/fontkit.git" - }, - "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" - }, - "devDependencies": { - "c8": "^7.11.3", - "codepoints": "^1.2.0", - "concat-stream": "^2.0.0", - "mocha": "^10.0.0", - "npm-run-all": "^4.1.5", - "parcel": "2.0.0-canary.1713", - "shx": "^0.3.4" - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/CmapProcessor.js b/skills/flight-finder/node_modules/fontkit/src/CmapProcessor.js deleted file mode 100644 index 6acc501..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/CmapProcessor.js +++ /dev/null @@ -1,286 +0,0 @@ -import { binarySearch } from './utils'; -import { encodingExists, getEncoding, getEncodingMapping } from './encodings'; -import { cache } from './decorators'; -import { range } from './utils'; - -export default class CmapProcessor { - constructor(cmapTable) { - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [3, 10], - [0, 6], - [0, 4], - - // 16-bit subtables - [3, 1], - [0, 3], - [0, 2], - [0, 1], - [0, 0] - ]); - - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) { - for (let cmap of cmapTable.tables) { - let encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = getEncodingMapping(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - } - - if (!this.cmap) { - throw new Error("Could not find a supported cmap table"); - } - - this.uvs = this.findSubtable(cmapTable, [[0, 5]]); - if (this.uvs && this.uvs.version !== 14) { - this.uvs = null; - } - } - - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs) { - for (let cmap of cmapTable.tables) { - if (cmap.platformID === platformID && cmap.encodingID === encodingID) { - return cmap.table; - } - } - } - - return null; - } - - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) { - codepoint = this.encoding.get(codepoint) || codepoint; - - // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided. - } else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) { - return gid; - } - } - - let cmap = this.cmap; - switch (cmap.version) { - case 0: - return cmap.codeMap.get(codepoint) || 0; - - case 4: { - let min = 0; - let max = cmap.segCount - 1; - while (min <= max) { - let mid = (min + max) >> 1; - - if (codepoint < cmap.startCode.get(mid)) { - max = mid - 1; - } else if (codepoint > cmap.endCode.get(mid)) { - min = mid + 1; - } else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - - if (rangeOffset === 0) { - gid = codepoint + cmap.idDelta.get(mid); - } else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) { - gid += cmap.idDelta.get(mid); - } - } - - return gid & 0xffff; - } - } - - return 0; - } - - case 8: - throw new Error('TODO: cmap format 8'); - - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - - case 12: - case 13: { - let min = 0; - let max = cmap.nGroups - 1; - while (min <= max) { - let mid = (min + max) >> 1; - let group = cmap.groups.get(mid); - - if (codepoint < group.startCharCode) { - max = mid - 1; - } else if (codepoint > group.endCharCode) { - min = mid + 1; - } else { - if (cmap.version === 12) { - return group.glyphID + (codepoint - group.startCharCode); - } else { - return group.glyphID; - } - } - } - - return 0; - } - - case 14: - throw new Error('TODO: cmap format 14'); - - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) { - return 0; - } - - let selectors = this.uvs.varSelectors.toArray(); - let i = binarySearch(selectors, x => variationSelector - x.varSelector); - let sel = selectors[i]; - - if (i !== -1 && sel.defaultUVS) { - i = binarySearch(sel.defaultUVS, x => - codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0 - ); - } - - if (i !== -1 && sel.nonDefaultUVS) { - i = binarySearch(sel.nonDefaultUVS, x => codepoint - x.unicodeValue); - if (i !== -1) { - return sel.nonDefaultUVS[i].glyphID; - } - } - - return 0; - } - - @cache - getCharacterSet() { - let cmap = this.cmap; - switch (cmap.version) { - case 0: - return range(0, cmap.codeMap.length); - - case 4: { - let res = []; - let endCodes = cmap.endCode.toArray(); - for (let i = 0; i < endCodes.length; i++) { - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...range(start, tail)); - } - - return res; - } - - case 8: - throw new Error('TODO: cmap format 8'); - - case 6: - case 10: - return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - - case 12: - case 13: { - let res = []; - for (let group of cmap.groups.toArray()) { - res.push(...range(group.startCharCode, group.endCharCode + 1)); - } - - return res; - } - - case 14: - throw new Error('TODO: cmap format 14'); - - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - - @cache - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch (cmap.version) { - case 0: { - let res = []; - for (let i = 0; i < 256; i++) { - if (cmap.codeMap.get(i) === gid) { - res.push(i); - } - } - - return res; - } - - case 4: { - let res = []; - for (let i = 0; i < cmap.segCount; i++) { - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - - for (var c = start; c <= end; c++) { - let g = 0; - if (rangeOffset === 0) { - g = c + delta; - } else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) { - g += delta; - } - } - - if (g === gid) { - res.push(c); - } - } - } - - return res; - } - - case 12: { - let res = []; - for (let group of cmap.groups.toArray()) { - if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) { - res.push(group.startCharCode + (gid - group.glyphID)); - } - } - - return res; - } - - case 13: { - let res = []; - for (let group of cmap.groups.toArray()) { - if (gid === group.glyphID) { - res.push(...range(group.startCharCode, group.endCharCode + 1)); - } - } - - return res; - } - - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/DFont.js b/skills/flight-finder/node_modules/fontkit/src/DFont.js deleted file mode 100644 index 5f606f6..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/DFont.js +++ /dev/null @@ -1,117 +0,0 @@ -import * as r from 'restructure'; -import TTFFont from './TTFFont'; - -let DFontName = new r.String(r.uint8); -let DFontData = new r.Struct({ - len: r.uint32, - buf: new r.Buffer('len') -}); - -let Ref = new r.Struct({ - id: r.uint16, - nameOffset: r.int16, - attr: r.uint8, - dataOffset: r.uint24, - handle: r.uint32 -}); - -let Type = new r.Struct({ - name: new r.String(4), - maxTypeIndex: r.uint16, - refList: new r.Pointer(r.uint16, new r.Array(Ref, t => t.maxTypeIndex + 1), { type: 'parent' }) -}); - -let TypeList = new r.Struct({ - length: r.uint16, - types: new r.Array(Type, t => t.length + 1) -}); - -let DFontMap = new r.Struct({ - reserved: new r.Reserved(r.uint8, 24), - typeList: new r.Pointer(r.uint16, TypeList), - nameListOffset: new r.Pointer(r.uint16, 'void') -}); - -let DFontHeader = new r.Struct({ - dataOffset: r.uint32, - map: new r.Pointer(r.uint32, DFontMap), - dataLength: r.uint32, - mapLength: r.uint32 -}); - -export default class DFont { - type = 'DFont'; - - static probe(buffer) { - let stream = new r.DecodeStream(buffer); - - try { - var header = DFontHeader.decode(stream); - } catch (e) { - return false; - } - - for (let type of header.map.typeList.types) { - if (type.name === 'sfnt') { - return true; - } - } - - return false; - } - - constructor(stream) { - this.stream = stream; - this.header = DFontHeader.decode(this.stream); - - for (let type of this.header.map.typeList.types) { - for (let ref of type.refList) { - if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = DFontName.decode(this.stream); - } else { - ref.name = null; - } - } - - if (type.name === 'sfnt') { - this.sfnt = type; - } - } - } - - getFont(name) { - if (!this.sfnt) { - return null; - } - - for (let ref of this.sfnt.refList) { - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new r.DecodeStream(this.stream.buffer.slice(pos)); - let font = new TTFFont(stream); - if ( - font.postscriptName === name || - ( - font.postscriptName instanceof Uint8Array && - name instanceof Uint8Array && - font.postscriptName.every((v, i) => name[i] === v) - ) - ) { - return font; - } - } - - return null; - } - - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList) { - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new r.DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new TTFFont(stream)); - } - - return fonts; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/TTFFont.js b/skills/flight-finder/node_modules/fontkit/src/TTFFont.js deleted file mode 100644 index 6aa0937..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/TTFFont.js +++ /dev/null @@ -1,554 +0,0 @@ -import * as r from 'restructure'; -import { cache } from './decorators'; -import * as fontkit from './base'; -import Directory from './tables/directory'; -import tables from './tables'; -import CmapProcessor from './CmapProcessor'; -import LayoutEngine from './layout/LayoutEngine'; -import TTFGlyph from './glyph/TTFGlyph'; -import CFFGlyph from './glyph/CFFGlyph'; -import SBIXGlyph from './glyph/SBIXGlyph'; -import COLRGlyph from './glyph/COLRGlyph'; -import GlyphVariationProcessor from './glyph/GlyphVariationProcessor'; -import TTFSubset from './subset/TTFSubset'; -import CFFSubset from './subset/CFFSubset'; -import BBox from './glyph/BBox'; -import { asciiDecoder } from './utils'; - -/** - * This is the base class for all SFNT-based font formats in fontkit. - * It supports TrueType, and PostScript glyphs, and several color glyph formats. - */ -export default class TTFFont { - type = 'TTF'; - - static probe(buffer) { - let format = asciiDecoder.decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - - constructor(stream, variationCoords = null) { - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - - // define properties for each table to lazily parse - for (let tag in this.directory.tables) { - let table = this.directory.tables[tag]; - if (tables[tag] && table.length > 0) { - Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } - } - - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - - _getTable(table) { - if (!(table.tag in this._tables)) { - try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if (fontkit.logErrors) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - } - - return this._tables[table.tag]; - } - - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - - return null; - } - - _decodeDirectory() { - return this.directory = Directory.decode(this.stream, {_startOffset: 0}); - } - - _decodeTable(table) { - let pos = this.stream.pos; - - let stream = this._getTableStream(table.tag); - let result = tables[table.tag].decode(stream, this, table.length); - - this.stream.pos = pos; - return result; - } - - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ - getName(key, lang = this.defaultLanguage || fontkit.defaultLanguage) { - let record = this.name && this.name.records[key]; - if (record) { - // Attempt to retrieve the entry, depending on which translation is available: - return ( - record[lang] - || record[this.defaultLanguage] - || record[fontkit.defaultLanguage] - || record['en'] - || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null - ); - } - - return null; - } - - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ - get postscriptName() { - return this.getName('postscriptName'); - } - - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ - get fullName() { - return this.getName('fullName'); - } - - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ - get familyName() { - return this.getName('fontFamily'); - } - - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ - get subfamilyName() { - return this.getName('fontSubfamily'); - } - - /** - * The font's copyright information - * @type {string} - */ - get copyright() { - return this.getName('copyright'); - } - - /** - * The font's version number - * @type {string} - */ - get version() { - return this.getName('version'); - } - - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ - get ascent() { - return this.hhea.ascent; - } - - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ - get descent() { - return this.hhea.descent; - } - - /** - * The amount of space that should be included between lines - * @type {number} - */ - get lineGap() { - return this.hhea.lineGap; - } - - /** - * The offset from the normal underline position that should be used - * @type {number} - */ - get underlinePosition() { - return this.post.underlinePosition; - } - - /** - * The weight of the underline that should be used - * @type {number} - */ - get underlineThickness() { - return this.post.underlineThickness; - } - - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ - get italicAngle() { - return this.post.italicAngle; - } - - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ - get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ - get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - - /** - * The number of glyphs in the font. - * @type {number} - */ - get numGlyphs() { - return this.maxp.numGlyphs; - } - - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ - get unitsPerEm() { - return this.head.unitsPerEm; - } - - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ - @cache - get bbox() { - return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - - @cache - get _cmapProcessor() { - return new CmapProcessor(this.cmap); - } - - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ - @cache - get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ - hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ - glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]); - } - - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ - glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - - while (idx <= len) { - let code = 0; - let nextState = 0; - - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = ((0xfe00 <= code && code <= 0xfe0f) || (0xe0100 <= code && code <= 0xe01ef)) ? 1 : 0; - } else { - idx++; - } - - if (state === 0 && nextState === 1) { - // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code])); - } else if (state === 0 && nextState === 0) { - // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - } - - last = code; - state = nextState; - } - - return glyphs; - } - - @cache - get _layoutEngine() { - return new LayoutEngine(this); - } - - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ - layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ - stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ - get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) { - this._glyphs[glyph] = new TTFGlyph(glyph, characters, this); - - } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) { - this._glyphs[glyph] = new CFFGlyph(glyph, characters, this); - } - } - - return this._glyphs[glyph] || null; - } - - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ - getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) { - this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this); - - } else if ((this.directory.tables.COLR) && (this.directory.tables.CPAL)) { - this._glyphs[glyph] = new COLRGlyph(glyph, characters, this); - - } else { - this._getBaseGlyph(glyph, characters); - } - } - - return this._glyphs[glyph] || null; - } - - /** - * Returns a Subset for this font. - * @return {Subset} - */ - createSubset() { - if (this.directory.tables['CFF ']) { - return new CFFSubset(this); - } - - return new TTFSubset(this); - } - - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ - @cache - get variationAxes() { - let res = {}; - if (!this.fvar) { - return res; - } - - for (let axis of this.fvar.axis) { - res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - } - - return res; - } - - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ - @cache - get namedVariations() { - let res = {}; - if (!this.fvar) { - return res; - } - - for (let instance of this.fvar.instance) { - let settings = {}; - for (let i = 0; i < this.fvar.axis.length; i++) { - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - - res[instance.name.en] = settings; - } - - return res; - } - - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ - getVariation(settings) { - if (!(this.directory.tables.fvar && ((this.directory.tables.gvar && this.directory.tables.glyf) || this.directory.tables.CFF2))) { - throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - } - - if (typeof settings === 'string') { - settings = this.namedVariations[settings]; - } - - if (typeof settings !== 'object') { - throw new Error('Variation settings must be either a variation name or settings object.'); - } - - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i) => { - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) { - return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - } else { - return axis.defaultValue; - } - }); - - let stream = new r.DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - - let font = new TTFFont(stream, coords); - font._tables = this._tables; - - return font; - } - - @cache - get _variationProcessor() { - if (!this.fvar) { - return null; - } - - let variationCoords = this.variationCoords; - - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) { - return null; - } - - if (!variationCoords) { - variationCoords = this.fvar.axis.map(axis => axis.defaultValue); - } - - return new GlyphVariationProcessor(this, variationCoords); - } - - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/TrueTypeCollection.js b/skills/flight-finder/node_modules/fontkit/src/TrueTypeCollection.js deleted file mode 100644 index 2d27309..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/TrueTypeCollection.js +++ /dev/null @@ -1,67 +0,0 @@ -import * as r from 'restructure'; -import TTFFont from './TTFFont'; -import Directory from './tables/directory'; -import tables from './tables'; -import { asciiDecoder } from './utils'; - -let TTCHeader = new r.VersionedStruct(r.uint32, { - 0x00010000: { - numFonts: r.uint32, - offsets: new r.Array(r.uint32, 'numFonts') - }, - 0x00020000: { - numFonts: r.uint32, - offsets: new r.Array(r.uint32, 'numFonts'), - dsigTag: r.uint32, - dsigLength: r.uint32, - dsigOffset: r.uint32 - } -}); - -export default class TrueTypeCollection { - type = 'TTC'; - - static probe(buffer) { - return asciiDecoder.decode(buffer.slice(0, 4)) === 'ttcf'; - } - - constructor(stream) { - this.stream = stream; - if (stream.readString(4) !== 'ttcf') { - throw new Error('Not a TrueType collection'); - } - - this.header = TTCHeader.decode(stream); - } - - getFont(name) { - for (let offset of this.header.offsets) { - let stream = new r.DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new TTFFont(stream); - if ( - font.postscriptName === name || - ( - font.postscriptName instanceof Uint8Array && - name instanceof Uint8Array && - font.postscriptName.every((v, i) => name[i] === v) - ) - ) { - return font; - } - } - - return null; - } - - get fonts() { - let fonts = []; - for (let offset of this.header.offsets) { - let stream = new r.DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new TTFFont(stream)); - } - - return fonts; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/WOFF2Font.js b/skills/flight-finder/node_modules/fontkit/src/WOFF2Font.js deleted file mode 100644 index 2cb327d..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/WOFF2Font.js +++ /dev/null @@ -1,216 +0,0 @@ -import * as r from 'restructure'; -import brotli from 'brotli/decompress.js'; -import TTFFont from './TTFFont'; -import TTFGlyph, { Point } from './glyph/TTFGlyph'; -import WOFF2Glyph from './glyph/WOFF2Glyph'; -import WOFF2Directory from './tables/WOFF2Directory'; -import { asciiDecoder } from './utils'; - -/** - * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2 - * See spec here: http://www.w3.org/TR/WOFF2/ - */ -export default class WOFF2Font extends TTFFont { - type = 'WOFF2'; - - static probe(buffer) { - return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOF2'; - } - - _decodeDirectory() { - this.directory = WOFF2Directory.decode(this.stream); - this._dataPos = this.stream.pos; - } - - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - - let decompressedSize = 0; - for (let tag in this.directory.tables) { - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += (entry.transformLength != null) ? entry.transformLength : entry.length; - } - - let decompressed = brotli(buffer, decompressedSize); - if (!decompressed) { - throw new Error('Error decoding compressed data in WOFF2'); - } - - this.stream = new r.DecodeStream(decompressed); - this._decompressed = true; - } - } - - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) { this._transformGlyfTable(); } - return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this); - - } else { - return super._getBaseGlyph(glyph, characters); - } - } - } - - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = GlyfTable.decode(this.stream); - let glyphs = []; - - for (let index = 0; index < table.numGlyphs; index++) { - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - - if (nContours > 0) { // simple glyph - let nPoints = []; - let totalPoints = 0; - - for (let i = 0; i < nContours; i++) { - let r = read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - - glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints); - for (let i = 0; i < nContours; i++) { - glyph.points[nPoints[i] - 1].endContour = true; - } - - var instructionSize = read255UInt16(table.glyphs); - - } else if (nContours < 0) { // composite glyph - let haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites); - if (haveInstructions) { - var instructionSize = read255UInt16(table.glyphs); - } - } - - glyphs.push(glyph); - } - - this._transformedGlyphs = glyphs; - } -} - -// Special class that accepts a length and returns a sub-stream for that data -class Substream { - constructor(length) { - this.length = length; - this._buf = new r.Buffer(length); - } - - decode(stream, parent) { - return new r.DecodeStream(this._buf.decode(stream, parent)); - } -} - -// This struct represents the entire glyf table -let GlyfTable = new r.Struct({ - version: r.uint32, - numGlyphs: r.uint16, - indexFormat: r.uint16, - nContourStreamSize: r.uint32, - nPointsStreamSize: r.uint32, - flagStreamSize: r.uint32, - glyphStreamSize: r.uint32, - compositeStreamSize: r.uint32, - bboxStreamSize: r.uint32, - instructionStreamSize: r.uint32, - nContours: new Substream('nContourStreamSize'), - nPoints: new Substream('nPointsStreamSize'), - flags: new Substream('flagStreamSize'), - glyphs: new Substream('glyphStreamSize'), - composites: new Substream('compositeStreamSize'), - bboxes: new Substream('bboxStreamSize'), - instructions: new Substream('instructionStreamSize') -}); - -const WORD_CODE = 253; -const ONE_MORE_BYTE_CODE2 = 254; -const ONE_MORE_BYTE_CODE1 = 255; -const LOWEST_U_CODE = 253; - -function read255UInt16(stream) { - let code = stream.readUInt8(); - - if (code === WORD_CODE) { - return stream.readUInt16BE(); - } - - if (code === ONE_MORE_BYTE_CODE1) { - return stream.readUInt8() + LOWEST_U_CODE; - } - - if (code === ONE_MORE_BYTE_CODE2) { - return stream.readUInt8() + LOWEST_U_CODE * 2; - } - - return code; -} - -function withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} - -function decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - - for (let i = 0; i < nPoints; i++) { - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - - if (flag < 10) { - dx = 0; - dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - - } else if (flag < 20) { - dx = withSign(flag, (((flag - 10) & 14) << 7) + glyphs.readUInt8()); - dy = 0; - - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - - } else if (flag < 120) { - var b0 = flag - 84; - dx = withSign(flag, 1 + ((b0 / 12) << 8) + glyphs.readUInt8()); - dy = withSign(flag >> 1, 1 + (((b0 % 12) >> 2) << 8) + glyphs.readUInt8()); - - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - - } else { - dx = withSign(flag, glyphs.readUInt16BE()); - dy = withSign(flag >> 1, glyphs.readUInt16BE()); - } - - x += dx; - y += dy; - res.push(new Point(onCurve, false, x, y)); - } - - return res; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/WOFFFont.js b/skills/flight-finder/node_modules/fontkit/src/WOFFFont.js deleted file mode 100644 index 6a2399a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/WOFFFont.js +++ /dev/null @@ -1,36 +0,0 @@ -import TTFFont from './TTFFont'; -import WOFFDirectory from './tables/WOFFDirectory'; -import tables from './tables'; -import inflate from 'tiny-inflate'; -import * as r from 'restructure'; -import { asciiDecoder } from './utils'; - -export default class WOFFFont extends TTFFont { - type = 'WOFF'; - - static probe(buffer) { - return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF'; - } - - _decodeDirectory() { - this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 }); - } - - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new r.DecodeStream(buf); - } else { - return this.stream; - } - } - - return null; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/aat/AATFeatureMap.js b/skills/flight-finder/node_modules/fontkit/src/aat/AATFeatureMap.js deleted file mode 100644 index 2aacffe..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/aat/AATFeatureMap.js +++ /dev/null @@ -1,543 +0,0 @@ -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { // indices into ltag table - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; - -const feature = (name, selector) => [features[name].code, features[name][selector]]; - -const OTMapping = { - rlig: feature('ligatures', 'requiredLigatures'), - clig: feature('ligatures', 'contextualLigatures'), - dlig: feature('ligatures', 'rareLigatures'), - hlig: feature('ligatures', 'historicalLigatures'), - liga: feature('ligatures', 'commonLigatures'), - hist: feature('ligatures', 'historicalLigatures'), // ?? - - smcp: feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: feature('lowerCase', 'lowerCasePetiteCaps'), - - frac: feature('fractions', 'diagonalFractions'), - dnom: feature('fractions', 'diagonalFractions'), // ?? - numr: feature('fractions', 'diagonalFractions'), // ?? - afrc: feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - - case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing - ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition? - cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below - valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: feature('contextualAlternates', 'swashAlternates'), - cswh: feature('contextualAlternates', 'contextualSwashAlternates'), - curs: feature('cursiveConnection', 'cursive'), // ?? - c2pc: feature('upperCase', 'upperCasePetiteCaps'), - c2sc: feature('upperCase', 'upperCaseSmallCaps'), - - init: feature('smartSwash', 'wordInitialSwashes'), // ?? - fin2: feature('smartSwash', 'wordFinalSwashes'), // ?? - medi: feature('smartSwash', 'nonFinalSwashes'), // ?? - med2: feature('smartSwash', 'nonFinalSwashes'), // ?? - fin3: feature('smartSwash', 'wordFinalSwashes'), // ?? - fina: feature('smartSwash', 'wordFinalSwashes'), // ?? - - pkna: feature('kanaSpacing', 'proportionalKana'), - half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs? - halt: feature('textSpacing', 'altHalfWidthText'), - - hkna: feature('alternateKana', 'alternateHorizKana'), - vkna: feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - - ital: feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: feature('numberCase', 'upperCaseNumbers'), - onum: feature('numberCase', 'lowerCaseNumbers'), - mgrk: feature('mathematicalExtras', 'mathematicalGreek'), - - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - - calt: feature('contextualAlternates', 'contextualAlternates'), // or more? - vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below? - vert: feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: feature('numberSpacing', 'monospacedNumbers'), - pnum: feature('numberSpacing', 'proportionalNumbers'), - sups: feature('verticalPosition', 'superiors'), - subs: feature('verticalPosition', 'inferiors'), - ordn: feature('verticalPosition', 'ordinals'), - pwid: feature('textSpacing', 'proportionalText'), - hwid: feature('textSpacing', 'halfWidthText'), - qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers? - twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers? - fwid: feature('textSpacing', 'proportionalText'), //?? - palt: feature('textSpacing', 'altProportionalText'), - trad: feature('characterShape', 'traditionalCharacters'), - smpl: feature('characterShape', 'simplifiedCharacters'), - jp78: feature('characterShape', 'JIS1978Characters'), - jp83: feature('characterShape', 'JIS1983Characters'), - jp90: feature('characterShape', 'JIS1990Characters'), - jp04: feature('characterShape', 'JIS2004Characters'), - expt: feature('characterShape', 'expertCharacters'), - hojo: feature('characterShape', 'hojoCharacters'), - nlck: feature('characterShape', 'NLCCharacters'), - tnam: feature('characterShape', 'traditionalNamesCharacters'), - ruby: feature('rubyKana', 'rubyKana'), - titl: feature('styleOptions', 'titlingCaps'), - zero: feature('typographicExtras', 'slashedZero'), - - ss01: feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: feature('stylisticAlternatives', 'stylisticAltTwenty') -}; - - // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose - -// Add cv01-cv99 features -for (let i = 1; i <= 99; i++) { - OTMapping[`cv${`00${i}`.slice(-2)}`] = [features.characterAlternatives.code, i]; -} - -// create inverse mapping -let AATMapping = {}; -for (let ot in OTMapping) { - let aat = OTMapping[ot]; - if (AATMapping[aat[0]] == null) { - AATMapping[aat[0]] = {}; - } - - AATMapping[aat[0]][aat[1]] = ot; -} - -// Maps an array of OpenType features to AAT features -// in the form of {featureType:{featureSetting:true}} -export function mapOTToAAT(features) { - let res = {}; - for (let k in features) { - let r; - if (r = OTMapping[k]) { - if (res[r[0]] == null) { - res[r[0]] = {}; - } - - res[r[0]][r[1]] = features[k]; - } - } - - return res; -} - -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) { - var typeCode = features[type] && features[type].code; - } else { - var typeCode = type; - } - - if (isNaN(setting)) { - var settingCode = features[type] && features[type][setting]; - } else { - var settingCode = setting; - } - - return [typeCode, settingCode]; -} - -// Maps AAT features to an array of OpenType features -// Supports both arrays in the form of [[featureType, featureSetting]] -// and objects in the form of {featureType:{featureSetting:true}} -// featureTypes and featureSettings can be either strings or number codes -export function mapAATToOT(features) { - let res = {}; - if (Array.isArray(features)) { - for (let k = 0; k < features.length; k++) { - let r; - let f = mapFeatureStrings(features[k]); - if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) { - res[r] = true; - } - } - - } else if (typeof features === 'object') { - for (let type in features) { - let feature = features[type]; - for (let setting in feature) { - let r; - let f = mapFeatureStrings([type, setting]); - if (feature[setting] && (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]])) { - res[r] = true; - } - } - } - } - - return Object.keys(res); -} diff --git a/skills/flight-finder/node_modules/fontkit/src/aat/AATLayoutEngine.js b/skills/flight-finder/node_modules/fontkit/src/aat/AATLayoutEngine.js deleted file mode 100644 index 1097e4a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/aat/AATLayoutEngine.js +++ /dev/null @@ -1,49 +0,0 @@ -import * as AATFeatureMap from './AATFeatureMap'; -import * as Script from '../layout/Script'; -import AATMorxProcessor from './AATMorxProcessor'; - -export default class AATLayoutEngine { - constructor(font) { - this.font = font; - this.morxProcessor = new AATMorxProcessor(font); - this.fallbackPosition = false; - } - - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - } - - this.morxProcessor.process(glyphRun.glyphs, AATFeatureMap.mapOTToAAT(glyphRun.features)); - } - - getAvailableFeatures(script, language) { - return AATFeatureMap.mapAATToOT(this.morxProcessor.getSupportedFeatures()); - } - - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - - for (let glyphs of glyphStrings) { - this._addStrings(glyphs, 0, result, ''); - } - - return result; - } - - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - - for (let codePoint of codePoints) { - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) { - this._addStrings(glyphs, index + 1, strings, s); - } else { - strings.add(s); - } - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/aat/AATLookupTable.js b/skills/flight-finder/node_modules/fontkit/src/aat/AATLookupTable.js deleted file mode 100644 index 74f764c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/aat/AATLookupTable.js +++ /dev/null @@ -1,125 +0,0 @@ -import {cache} from '../decorators'; -import {range} from '../utils'; - -export default class AATLookupTable { - constructor(table) { - this.table = table; - } - - lookup(glyph) { - switch (this.table.version) { - case 0: // simple array format - return this.table.values.getItem(glyph); - - case 2: // segment format - case 4: { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - - while (min <= max) { - var mid = (min + max) >> 1; - var seg = this.table.segments[mid]; - - // special end of search value - if (seg.firstGlyph === 0xffff) { - return null; - } - - if (glyph < seg.firstGlyph) { - max = mid - 1; - } else if (glyph > seg.lastGlyph) { - min = mid + 1; - } else { - if (this.table.version === 2) { - return seg.value; - } else { - return seg.values[glyph - seg.firstGlyph]; - } - } - } - - return null; - } - - case 6: { // lookup single - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - - while (min <= max) { - var mid = (min + max) >> 1; - var seg = this.table.segments[mid]; - - // special end of search value - if (seg.glyph === 0xffff) { - return null; - } - - if (glyph < seg.glyph) { - max = mid - 1; - } else if (glyph > seg.glyph) { - min = mid + 1; - } else { - return seg.value; - } - } - - return null; - } - - case 8: // lookup trimmed - return this.table.values[glyph - this.table.firstGlyph]; - - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - - @cache - glyphsForValue(classValue) { - let res = []; - - switch (this.table.version) { - case 2: // segment format - case 4: { - for (let segment of this.table.segments) { - if ((this.table.version === 2 && segment.value === classValue)) { - res.push(...range(segment.firstGlyph, segment.lastGlyph + 1)); - } else { - for (let index = 0; index < segment.values.length; index++) { - if (segment.values[index] === classValue) { - res.push(segment.firstGlyph + index); - } - } - } - } - - break; - } - - case 6: { // lookup single - for (let segment of this.table.segments) { - if (segment.value === classValue) { - res.push(segment.glyph); - } - } - - break; - } - - case 8: { // lookup trimmed - for (let i = 0; i < this.table.values.length; i++) { - if (this.table.values[i] === classValue) { - res.push(this.table.firstGlyph + i); - } - } - - break; - } - - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - - return res; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/aat/AATMorxProcessor.js b/skills/flight-finder/node_modules/fontkit/src/aat/AATMorxProcessor.js deleted file mode 100644 index 94744e1..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/aat/AATMorxProcessor.js +++ /dev/null @@ -1,430 +0,0 @@ -import AATStateMachine from './AATStateMachine'; -import AATLookupTable from './AATLookupTable'; -import {cache} from '../decorators'; - -// indic replacement flags -const MARK_FIRST = 0x8000; -const MARK_LAST = 0x2000; -const VERB = 0x000F; - -// contextual substitution and glyph insertion flag -const SET_MARK = 0x8000; - -// ligature entry flags -const SET_COMPONENT = 0x8000; -const PERFORM_ACTION = 0x2000; - -// ligature action masks -const LAST_MASK = 0x80000000; -const STORE_MASK = 0x40000000; -const OFFSET_MASK = 0x3FFFFFFF; - -const VERTICAL_ONLY = 0x800000; -const REVERSE_DIRECTION = 0x400000; -const HORIZONTAL_AND_VERTICAL = 0x200000; - -// glyph insertion flags -const CURRENT_IS_KASHIDA_LIKE = 0x2000; -const MARKED_IS_KASHIDA_LIKE = 0x1000; -const CURRENT_INSERT_BEFORE = 0x0800; -const MARKED_INSERT_BEFORE = 0x0400; -const CURRENT_INSERT_COUNT = 0x03E0; -const MARKED_INSERT_COUNT = 0x001F; - -export default class AATMorxProcessor { - constructor(font) { - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } - - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains) { - let flags = chain.defaultFlags; - - // enable/disable the requested features - for (let feature of chain.features) { - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - - for (let subtable of chain.subtables) { - if (subtable.subFeatureFlags & flags) { - this.processSubtable(subtable, glyphs); - } - } - } - - // remove deleted glyphs - let index = glyphs.length - 1; - while (index >= 0) { - if (glyphs[index].id === 0xffff) { - glyphs.splice(index, 1); - } - - index--; - } - - return glyphs; - } - - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - - let reverse = !!(this.subtable.coverage & REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - - @cache - getStateMachine(subtable) { - return new AATStateMachine(subtable.table.stateTable); - } - - getProcessor() { - switch (this.subtable.type) { - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - - processIndicRearragement(glyph, entry, index) { - if (entry.flags & MARK_FIRST) { - this.firstGlyph = index; - } - - if (entry.flags & MARK_LAST) { - this.lastGlyph = index; - } - - reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph); - } - - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new AATLookupTable(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) { - this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - } - - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new AATLookupTable(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) { - this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - - if (entry.flags & SET_MARK) { - this.markedGlyph = index; - } - } - - processLigature(glyph, entry, index) { - if (entry.flags & SET_COMPONENT) { - this.ligatureStack.push(index); - } - - if (entry.flags & PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - - while (!last) { - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - - let action = actions.getItem(actionIndex++); - last = !!(action & LAST_MASK); - let store = !!(action & STORE_MASK); - let offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - - let component = components.getItem(offset); - ligatureIndex += component; - - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else { - this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - } - - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new AATLookupTable(subtable.table.lookupTable); - - for (index = 0; index < glyphs.length; index++) { - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) { // 0 means do nothing - glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - } - - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while (count--) { - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - - if (!isBefore) { - glyphIndex++; - } - - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & SET_MARK) { - this.markedIndex = index; - } - - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains) { - for (let feature of chain.features) { - features.push([feature.featureType, feature.featureSetting]); - } - } - - return features; - } - - generateInputs(gid) { - if (!this.inputCache) { - this.generateInputCache(); - } - - return this.inputCache[gid] || []; - } - - generateInputCache() { - this.inputCache = {}; - - for (let chain of this.morx.chains) { - let flags = chain.defaultFlags; - - for (let subtable of chain.subtables) { - if (subtable.subFeatureFlags & flags) { - this.generateInputsForSubtable(subtable); - } - } - } - } - - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) { - return; - } - - let reverse = !!(subtable.coverage & REVERSE_DIRECTION); - if (reverse) { - throw new Error('Reverse subtable, not supported.'); - } - - this.subtable = subtable; - this.ligatureStack = []; - - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - - let input = []; - let stack = []; - this.glyphs = []; - - stateMachine.traverse({ - enter: (glyph, entry) => { - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for (let i = 0; i < glyphs.length && count <= 1; i++) { - if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - } - - if (count === 1) { - let result = input.map(g => g.id); - let cache = this.inputCache[found]; - if (cache) { - cache.push(result); - } else { - this.inputCache[found] = [result]; - } - } - }, - - exit: () => { - ({glyphs: this.glyphs, ligatureStack: this.ligatureStack} = stack.pop()); - input.pop(); - } - }); - } -} - -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) { - end.reverse(); - } - - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) { - start.reverse(); - } - - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} - -function reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch (verb) { - case 0: // no change - return glyphs; - - case 1: // Ax => xA - return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]); - - case 2: // xD => Dx - return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]); - - case 3: // AxD => DxA - return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]); - - case 4: // ABx => xAB - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]); - - case 5: // ABx => xBA - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false); - - case 6: // xCD => CDx - return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]); - - case 7: // xCD => DCx - return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true); - - case 8: // AxCD => CDxA - return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]); - - case 9: // AxCD => DCxA - return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true); - - case 10: // ABxD => DxAB - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]); - - case 11: // ABxD => DxBA - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false); - - case 12: // ABxCD => CDxAB - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]); - - case 13: // ABxCD => CDxBA - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false); - - case 14: // ABxCD => DCxAB - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true); - - case 15: // ABxCD => DCxBA - return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true); - - default: - throw new Error(`Unknown verb: ${verb}`); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/aat/AATStateMachine.js b/skills/flight-finder/node_modules/fontkit/src/aat/AATStateMachine.js deleted file mode 100644 index 77d31ef..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/aat/AATStateMachine.js +++ /dev/null @@ -1,96 +0,0 @@ -import AATLookupTable from './AATLookupTable'; - -const START_OF_TEXT_STATE = 0; -const START_OF_LINE_STATE = 1; - -const END_OF_TEXT_CLASS = 0; -const OUT_OF_BOUNDS_CLASS = 1; -const DELETED_GLYPH_CLASS = 2; -const END_OF_LINE_CLASS = 3; - -const DONT_ADVANCE = 0x4000; - -export default class AATStateMachine { - constructor(stateTable) { - this.stateTable = stateTable; - this.lookupTable = new AATLookupTable(stateTable.classTable); - } - - process(glyphs, reverse, processEntry) { - let currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - - while ((dir === 1 && index <= glyphs.length) || (dir === -1 && index >= -1)) { - let glyph = null; - let classCode = OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - - if (index === glyphs.length || index === -1) { - classCode = END_OF_TEXT_CLASS; - } else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) { // deleted glyph - classCode = DELETED_GLYPH_CLASS; - } else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) { - classCode = OUT_OF_BOUNDS_CLASS; - } - } - } - - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - - if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & DONT_ADVANCE); - } - - currentState = entry.newState; - if (shouldAdvance) { - index += dir; - } - } - - return glyphs; - } - - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ - traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) { - return; - } - - visited.add(state); - - let {nClasses, stateArray, entryTable} = this.stateTable; - let row = stateArray.getItem(state); - - // Skip predefined classes - for (let classCode = 4; classCode < nClasses; classCode++) { - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)) { - if (opts.enter) { - opts.enter(glyph, entry); - } - - if (entry.newState !== 0) { - this.traverse(opts, entry.newState, visited); - } - - if (opts.exit) { - opts.exit(glyph, entry); - } - } - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/base.js b/skills/flight-finder/node_modules/fontkit/src/base.js deleted file mode 100644 index 1f9d40b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/base.js +++ /dev/null @@ -1,29 +0,0 @@ -import {DecodeStream} from 'restructure'; - -export let logErrors = false; - -let formats = []; -export function registerFormat(format) { - formats.push(format); -}; - -export function create(buffer, postscriptName) { - for (let i = 0; i < formats.length; i++) { - let format = formats[i]; - if (format.probe(buffer)) { - let font = new format(new DecodeStream(buffer)); - if (postscriptName) { - return font.getFont(postscriptName); - } - - return font; - } - } - - throw new Error('Unknown font format'); -}; - -export let defaultLanguage = 'en'; -export function setDefaultLanguage(lang = 'en') { - defaultLanguage = lang; -}; diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFCharsets.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFCharsets.js deleted file mode 100644 index b7a9874..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFCharsets.js +++ /dev/null @@ -1,99 +0,0 @@ -export let ISOAdobeCharset = [ - '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', - 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', - 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', - 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', - 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', - 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', - 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', - 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', - 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', - 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', - 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', - 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', - 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', - 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', - 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', - 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', - 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', - 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', - 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', - 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', - 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', - 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', - 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', - 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', - 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', - 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', - 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', - 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', - 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', - 'ugrave', 'yacute', 'ydieresis', 'zcaron' -]; - -export let ExpertCharset = [ - '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', - 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', - 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', - 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', - 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', - 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', - 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', - 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', - 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', - 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', - 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', - 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', - 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', - 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', - 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', - 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', - 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', - 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', - 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', - 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', - 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', - 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', - 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', - 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', - 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', - 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', - 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', - 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', - 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', - 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', - 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', - 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', - 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', - 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', - 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', - 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', - 'Ydieresissmall' -]; - -export let ExpertSubsetCharset = [ - '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', - 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', - 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', - 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', - 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', - 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', - 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', - 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', - 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', - 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', - 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', - 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', - 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', - 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', - 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', - 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', - 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', - 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', - 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', - 'periodinferior', 'commainferior' -]; diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFDict.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFDict.js deleted file mode 100644 index 569c106..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFDict.js +++ /dev/null @@ -1,167 +0,0 @@ -import isEqual from 'fast-deep-equal'; -import * as r from 'restructure'; -import CFFOperand from './CFFOperand'; -import { PropertyDescriptor } from 'restructure'; - -export default class CFFDict { - constructor(ops = []) { - this.ops = ops; - this.fields = {}; - for (let field of ops) { - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } - - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) { - return operands.map((op, i) => this.decodeOperands(type[i], stream, ret, [op])); - } else if (type.decode != null) { - return type.decode(stream, ret, operands); - } else { - switch (type) { - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - } - - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) { - return operands.map((op, i) => this.encodeOperands(type[i], stream, ctx, op)[0]); - } else if (type.encode != null) { - return type.encode(stream, operands, ctx); - } else if (typeof operands === 'number') { - return [operands]; - } else if (typeof operands === 'boolean') { - return [+operands]; - } else if (Array.isArray(operands)) { - return operands; - } else { - return [operands]; - } - } - - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - - // define hidden properties - Object.defineProperties(ret, { - parent: { value: parent }, - _startOffset: { value: stream.pos } - }); - - // fill in defaults - for (let key in this.fields) { - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - - while (stream.pos < end) { - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) { - b = (b << 8) | stream.readUInt8(); - } - - let field = this.fields[b]; - if (!field) { - throw new Error(`Unknown operator ${b}`); - } - - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof PropertyDescriptor) { - Object.defineProperty(ret, field[1], val); - } else { - ret[field[1]] = val; - } - } - - operands = []; - } else { - operands.push(CFFOperand.decode(stream, b)); - } - } - - return ret; - } - - size(dict, parent, includePointers = true) { - let ctx = { - parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - - let len = 0; - - for (let k in this.fields) { - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || isEqual(val, field[3])) { - continue; - } - - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands) { - len += CFFOperand.size(op); - } - - let key = Array.isArray(field[0]) ? field[0] : [field[0]]; - len += key.length; - } - - if (includePointers) { - len += ctx.pointerSize; - } - - return len; - } - - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent, - val: dict, - pointerSize: 0 - }; - - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - - for (let field of this.ops) { - let val = dict[field[1]]; - if (val == null || isEqual(val, field[3])) { - continue; - } - - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands) { - CFFOperand.encode(stream, op); - } - - let key = Array.isArray(field[0]) ? field[0] : [field[0]]; - for (let op of key) { - stream.writeUInt8(op); - } - } - - let i = 0; - while (i < ctx.pointers.length) { - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - - return; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFEncodings.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFEncodings.js deleted file mode 100644 index 5465bb4..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFEncodings.js +++ /dev/null @@ -1,48 +0,0 @@ -export let StandardEncoding = [ - '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', - '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', - 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', - 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', - 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', - 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', - 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', - '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', - 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', - 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', - 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', - 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', - 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', - 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', - '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', - 'lslash', 'oslash', 'oe', 'germandbls' -]; - -export let ExpertEncoding = [ - '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', - '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', - 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', - 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', - 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', - 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', - 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', - 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', - 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', - 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', - 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', - 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', - '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', - 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', - 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', - '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', - 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', - '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', - 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', - 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', - 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', - 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', - 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', - 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', - 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', - 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall' -]; diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFFont.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFFont.js deleted file mode 100644 index c6c6809..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFFont.js +++ /dev/null @@ -1,159 +0,0 @@ -import * as r from 'restructure'; -import CFFIndex from './CFFIndex'; -import CFFTop from './CFFTop'; -import CFFPrivateDict from './CFFPrivateDict'; -import standardStrings from './CFFStandardStrings'; - -class CFFFont { - constructor(stream) { - this.stream = stream; - this.decode(); - } - - static decode(stream) { - return new CFFFont(stream); - } - - decode() { - let start = this.stream.pos; - let top = CFFTop.decode(this.stream); - for (let key in top) { - let val = top[key]; - this[key] = val; - } - - if (this.version < 2) { - if (this.topDictIndex.length !== 1) { - throw new Error("Only a single font is allowed in CFF"); - } - - this.topDict = this.topDictIndex[0]; - } - - this.isCIDFont = this.topDict.ROS != null; - return this; - } - - string(sid) { - if (this.version >= 2) { - return null; - } - - if (sid < standardStrings.length) { - return standardStrings[sid]; - } - - return this.stringIndex[sid - standardStrings.length]; - } - - get postscriptName() { - if (this.version < 2) { - return this.nameIndex[0]; - } - - return null; - } - - get fullName() { - return this.string(this.topDict.FullName); - } - - get familyName() { - return this.string(this.topDict.FamilyName); - } - - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) { - return null; - } - - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) { - return null; - } - - let { charset } = this.topDict; - if (Array.isArray(charset)) { - return charset[gid]; - } - - if (gid === 0) { - return '.notdef'; - } - - gid -= 1; - - switch (charset.version) { - case 0: - return this.string(charset.glyphs[gid]); - - case 1: - case 2: - for (let i = 0; i < charset.ranges.length; i++) { - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) { - return this.string(range.first + (gid - range.offset)); - } - } - break; - } - - return null; - } - - fdForGlyph(gid) { - if (!this.topDict.FDSelect) { - return null; - } - - switch (this.topDict.FDSelect.version) { - case 0: - return this.topDict.FDSelect.fds[gid]; - - case 3: - case 4: - let { ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - - while (low <= high) { - let mid = (low + high) >> 1; - - if (gid < ranges[mid].first) { - high = mid - 1; - } else if (mid < high && gid >= ranges[mid + 1].first) { - low = mid + 1; - } else { - return ranges[mid].fd; - } - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) { - return this.topDict.FDArray[fd].Private; - } - - return null; - } - - if (this.version < 2) { - return this.topDict.Private; - } - - return this.topDict.FDArray[0].Private; - } -} - -export default CFFFont; diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFIndex.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFIndex.js deleted file mode 100644 index fea5eaf..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFIndex.js +++ /dev/null @@ -1,150 +0,0 @@ -import * as r from 'restructure'; - -export default class CFFIndex { - constructor(type) { - this.type = type; - } - - getCFFVersion(ctx) { - while (ctx && !ctx.hdrSize) { - ctx = ctx.parent; - } - - return ctx ? ctx.version : -1; - } - - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 - ? stream.readUInt32BE() - : stream.readUInt16BE(); - - if (count === 0) { - return []; - } - - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) { - offsetType = r.uint8; - } else if (offSize === 2) { - offsetType = r.uint16; - } else if (offSize === 3) { - offsetType = r.uint24; - } else if (offSize === 4) { - offsetType = r.uint32; - } else { - throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - } - - let ret = []; - let startPos = stream.pos + ((count + 1) * offSize) - 1; - - let start = offsetType.decode(stream); - for (let i = 0; i < count; i++) { - let end = offsetType.decode(stream); - - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else { - ret.push({ - offset: startPos + start, - length: end - start - }); - } - - start = end; - } - - stream.pos = startPos + start; - return ret; - } - - size(arr, parent) { - let size = 2; - if (arr.length === 0) { - return size; - } - - let type = this.type || new r.Buffer; - - // find maximum offset to detminine offset type - let offset = 1; - for (let i = 0; i < arr.length; i++) { - let item = arr[i]; - offset += type.size(item, parent); - } - - let offsetType; - if (offset <= 0xff) { - offsetType = r.uint8; - } else if (offset <= 0xffff) { - offsetType = r.uint16; - } else if (offset <= 0xffffff) { - offsetType = r.uint24; - } else if (offset <= 0xffffffff) { - offsetType = r.uint32; - } else { - throw new Error("Bad offset in CFFIndex"); - } - - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - - return size; - } - - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) { - return; - } - - let type = this.type || new r.Buffer; - - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr) { - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - - let offsetType; - if (offset <= 0xff) { - offsetType = r.uint8; - } else if (offset <= 0xffff) { - offsetType = r.uint16; - } else if (offset <= 0xffffff) { - offsetType = r.uint24; - } else if (offset <= 0xffffffff) { - offsetType = r.uint32; - } else { - throw new Error("Bad offset in CFFIndex"); - } - - // write offset size - stream.writeUInt8(offsetType.size()); - - // write elements - offset = 1; - offsetType.encode(stream, offset); - - for (let size of sizes) { - offset += size; - offsetType.encode(stream, offset); - } - - for (let item of arr) { - type.encode(stream, item, parent); - } - - return; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFOperand.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFOperand.js deleted file mode 100644 index 28f858c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFOperand.js +++ /dev/null @@ -1,134 +0,0 @@ -const FLOAT_EOF = 0xf; -const FLOAT_LOOKUP = [ - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '.', 'E', 'E-', null, '-' -]; - -const FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; - -export default class CFFOperand { - static decode(stream, value) { - if (32 <= value && value <= 246) { - return value - 139; - } - - if (247 <= value && value <= 250) { - return (value - 247) * 256 + stream.readUInt8() + 108; - } - - if (251 <= value && value <= 254) { - return -(value - 251) * 256 - stream.readUInt8() - 108; - } - - if (value === 28) { - return stream.readInt16BE(); - } - - if (value === 29) { - return stream.readInt32BE(); - } - - if (value === 30) { - let str = ''; - while (true) { - let b = stream.readUInt8(); - - let n1 = b >> 4; - if (n1 === FLOAT_EOF) { break; } - str += FLOAT_LOOKUP[n1]; - - let n2 = b & 15; - if (n2 === FLOAT_EOF) { break; } - str += FLOAT_LOOKUP[n2]; - } - - return parseFloat(str); - } - - return null; - } - - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) { - value = 32768; - } - - if ((value | 0) !== value) { // floating point - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - - } else if (-107 <= value && value <= 107) { - return 1; - - } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) { - return 2; - - } else if (-32768 <= value && value <= 32767) { - return 3; - - } else { - return 5; - } - } - - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - - } else if ((val | 0) !== val) { // floating point - stream.writeUInt8(30); - - let str = '' + val; - for (let i = 0; i < str.length; i += 2) { - let c1 = str[i]; - let n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1; - - if (i === str.length - 1) { - var n2 = FLOAT_EOF; - } else { - let c2 = str[i + 1]; - var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - - stream.writeUInt8((n1 << 4) | (n2 & 15)); - } - - if (n2 !== FLOAT_EOF) { - return stream.writeUInt8((FLOAT_EOF << 4)); - } - - } else if (-107 <= val && val <= 107) { - return stream.writeUInt8(val + 139); - - } else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFPointer.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFPointer.js deleted file mode 100644 index 771e834..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFPointer.js +++ /dev/null @@ -1,50 +0,0 @@ -import * as r from 'restructure'; - -export default class CFFPointer extends r.Pointer { - constructor(type, options = {}) { - if (options.type == null) { - options.type = 'global'; - } - - super(null, type, options); - } - - decode(stream, parent, operands) { - this.offsetType = { - decode: () => operands[0] - }; - - return super.decode(stream, parent, operands); - } - - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: () => 0 - }; - - this.size(value, ctx); - return [new Ptr(0)]; - } - - let ptr = null; - this.offsetType = { - encode: (stream, val) => ptr = val - }; - - super.encode(stream, value, ctx); - return [new Ptr(ptr)]; - } -} - -class Ptr { - constructor(val) { - this.val = val; - this.forceLarge = true; - } - - valueOf() { - return this.val; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFPrivateDict.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFPrivateDict.js deleted file mode 100644 index 59fcab6..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFPrivateDict.js +++ /dev/null @@ -1,39 +0,0 @@ -import CFFDict from './CFFDict'; -import CFFIndex from './CFFIndex'; -import CFFPointer from './CFFPointer'; - -class CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while (operands.length > numBlends) { - operands.pop(); - } - } -} - -export default new CFFDict([ - // key name type default - [6, 'BlueValues', 'delta', null], - [7, 'OtherBlues', 'delta', null], - [8, 'FamilyBlues', 'delta', null], - [9, 'FamilyOtherBlues', 'delta', null], - [[12, 9], 'BlueScale', 'number', 0.039625], - [[12, 10], 'BlueShift', 'number', 7], - [[12, 11], 'BlueFuzz', 'number', 1], - [10, 'StdHW', 'number', null], - [11, 'StdVW', 'number', null], - [[12, 12], 'StemSnapH', 'delta', null], - [[12, 13], 'StemSnapV', 'delta', null], - [[12, 14], 'ForceBold', 'boolean', false], - [[12, 17], 'LanguageGroup', 'number', 0], - [[12, 18], 'ExpansionFactor', 'number', 0.06], - [[12, 19], 'initialRandomSeed', 'number', 0], - [20, 'defaultWidthX', 'number', 0], - [21, 'nominalWidthX', 'number', 0], - [22, 'vsindex', 'number', 0], - [23, 'blend', CFFBlendOp, null], - [19, 'Subrs', new CFFPointer(new CFFIndex, {type: 'local'}), null] -]); diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFStandardStrings.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFStandardStrings.js deleted file mode 100644 index b5d5956..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFStandardStrings.js +++ /dev/null @@ -1,71 +0,0 @@ -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -export default [ - ".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", - "percent", "ampersand", "quoteright", "parenleft", "parenright", - "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", - "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", - "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", - "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", - "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", - "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", - "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", - "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", - "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", - "florin", "section", "currency", "quotesingle", "quotedblleft", - "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", - "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", - "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", - "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", - "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", - "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", - "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", - "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", - "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", - "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", - "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", - "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", - "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", - "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", - "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", - "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", - "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", - "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", - "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", - "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", - "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", - "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", - "parenleftsuperior", "parenrightsuperior", "twodotenleader", - "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", - "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", - "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", - "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", - "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", - "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", - "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", - "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", - "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", - "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", - "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", - "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", - "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", - "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", - "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", - "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", - "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", - "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", - "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", - "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", - "threeinferior", "fourinferior", "fiveinferior", "sixinferior", - "seveninferior", "eightinferior", "nineinferior", "centinferior", - "dollarinferior", "periodinferior", "commainferior", "Agravesmall", - "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", - "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", - "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", - "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", - "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", - "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", - "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", - "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", - "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold" -]; diff --git a/skills/flight-finder/node_modules/fontkit/src/cff/CFFTop.js b/skills/flight-finder/node_modules/fontkit/src/cff/CFFTop.js deleted file mode 100644 index efdba72..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/cff/CFFTop.js +++ /dev/null @@ -1,237 +0,0 @@ -import * as r from 'restructure'; -import { resolveLength } from 'restructure'; -import CFFDict from './CFFDict'; -import CFFIndex from './CFFIndex'; -import CFFPointer from './CFFPointer'; -import CFFPrivateDict from './CFFPrivateDict'; -import StandardStrings from './CFFStandardStrings'; -import { StandardEncoding, ExpertEncoding } from './CFFEncodings'; -import { ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset } from './CFFCharsets'; -import { ItemVariationStore } from '../tables/variations'; - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class PredefinedOp { - constructor(predefinedOps, type) { - this.predefinedOps = predefinedOps; - this.type = type; - } - - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) { - return this.predefinedOps[operands[0]]; - } - - return this.type.decode(stream, parent, operands); - } - - size(value, ctx) { - return this.type.size(value, ctx); - } - - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) { - return index; - } - - return this.type.encode(stream, value, ctx); - } -} - -class CFFEncodingVersion extends r.Number { - constructor() { - super('UInt8'); - } - - decode(stream) { - return r.uint8.decode(stream) & 0x7f; - } -} - -let Range1 = new r.Struct({ - first: r.uint16, - nLeft: r.uint8 -}); - -let Range2 = new r.Struct({ - first: r.uint16, - nLeft: r.uint16 -}); - -let CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), { - 0: { - nCodes: r.uint8, - codes: new r.Array(r.uint8, 'nCodes') - }, - - 1: { - nRanges: r.uint8, - ranges: new r.Array(Range1, 'nRanges') - } - - // TODO: supplement? -}); - -let CFFEncoding = new PredefinedOp([ StandardEncoding, ExpertEncoding ], new CFFPointer(CFFCustomEncoding, { lazy: true })); - -// Decodes an array of ranges until the total -// length is equal to the provided length. -class RangeArray extends r.Array { - decode(stream, parent) { - let length = resolveLength(this.length, stream, parent); - let count = 0; - let res = []; - while (count < length) { - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - - return res; - } -} - -let CFFCustomCharset = new r.VersionedStruct(r.uint8, { - 0: { - glyphs: new r.Array(r.uint16, t => t.parent.CharStrings.length - 1) - }, - - 1: { - ranges: new RangeArray(Range1, t => t.parent.CharStrings.length - 1) - }, - - 2: { - ranges: new RangeArray(Range2, t => t.parent.CharStrings.length - 1) - } -}); - -let CFFCharset = new PredefinedOp([ ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset ], new CFFPointer(CFFCustomCharset, {lazy: true})); - -let FDRange3 = new r.Struct({ - first: r.uint16, - fd: r.uint8 -}); - -let FDRange4 = new r.Struct({ - first: r.uint32, - fd: r.uint16 -}); - -let FDSelect = new r.VersionedStruct(r.uint8, { - 0: { - fds: new r.Array(r.uint8, t => t.parent.CharStrings.length) - }, - - 3: { - nRanges: r.uint16, - ranges: new r.Array(FDRange3, 'nRanges'), - sentinel: r.uint16 - }, - - 4: { - nRanges: r.uint32, - ranges: new r.Array(FDRange4, 'nRanges'), - sentinel: r.uint32 - } -}); - -let ptr = new CFFPointer(CFFPrivateDict); -class CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return ptr.decode(stream, parent, [operands[1]]); - } - - size(dict, ctx) { - return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]]; - } - - encode(stream, dict, ctx) { - return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]]; - } -} - -let FontDict = new CFFDict([ - // key name type(s) default - [18, 'Private', new CFFPrivateOp, null], - [[12, 38], 'FontName', 'sid', null], - [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], - [[12, 5], 'PaintType', 'number', 0], -]); - -let CFFTopDict = new CFFDict([ - // key name type(s) default - [[12, 30], 'ROS', ['sid', 'sid', 'number'], null], - - [0, 'version', 'sid', null], - [1, 'Notice', 'sid', null], - [[12, 0], 'Copyright', 'sid', null], - [2, 'FullName', 'sid', null], - [3, 'FamilyName', 'sid', null], - [4, 'Weight', 'sid', null], - [[12, 1], 'isFixedPitch', 'boolean', false], - [[12, 2], 'ItalicAngle', 'number', 0], - [[12, 3], 'UnderlinePosition', 'number', -100], - [[12, 4], 'UnderlineThickness', 'number', 50], - [[12, 5], 'PaintType', 'number', 0], - [[12, 6], 'CharstringType', 'number', 2], - [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], - [13, 'UniqueID', 'number', null], - [5, 'FontBBox', 'array', [0, 0, 0, 0]], - [[12, 8], 'StrokeWidth', 'number', 0], - [14, 'XUID', 'array', null], - [15, 'charset', CFFCharset, ISOAdobeCharset], - [16, 'Encoding', CFFEncoding, StandardEncoding], - [17, 'CharStrings', new CFFPointer(new CFFIndex), null], - [18, 'Private', new CFFPrivateOp, null], - [[12, 20], 'SyntheticBase', 'number', null], - [[12, 21], 'PostScript', 'sid', null], - [[12, 22], 'BaseFontName', 'sid', null], - [[12, 23], 'BaseFontBlend', 'delta', null], - - // CID font specific - [[12, 31], 'CIDFontVersion', 'number', 0], - [[12, 32], 'CIDFontRevision', 'number', 0], - [[12, 33], 'CIDFontType', 'number', 0], - [[12, 34], 'CIDCount', 'number', 8720], - [[12, 35], 'UIDBase', 'number', null], - [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], - [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], - [[12, 38], 'FontName', 'sid', null] -]); - -let VariationStore = new r.Struct({ - length: r.uint16, - itemVariationStore: ItemVariationStore -}) - -let CFF2TopDict = new CFFDict([ - [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], - [17, 'CharStrings', new CFFPointer(new CFFIndex), null], - [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], - [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], - [24, 'vstore', new CFFPointer(VariationStore), null], - [25, 'maxstack', 'number', 193] -]); - -let CFFTop = new r.VersionedStruct(r.fixed16, { - 1: { - hdrSize: r.uint8, - offSize: r.uint8, - nameIndex: new CFFIndex(new r.String('length')), - topDictIndex: new CFFIndex(CFFTopDict), - stringIndex: new CFFIndex(new r.String('length')), - globalSubrIndex: new CFFIndex - }, - - 2: { - hdrSize: r.uint8, - length: r.uint16, - topDict: CFF2TopDict, - globalSubrIndex: new CFFIndex - } -}); - -export default CFFTop; diff --git a/skills/flight-finder/node_modules/fontkit/src/decorators.js b/skills/flight-finder/node_modules/fontkit/src/decorators.js deleted file mode 100644 index ce0d90b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/decorators.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ -export function cache(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { value }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - - return { - get() { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) { - return cache.get(key); - } - - let result = fn.apply(this, args); - cache.set(key, result); - return result; - }; - - Object.defineProperty(this, key, {value: memoized}); - return memoized; - } - }; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/encodings.js b/skills/flight-finder/node_modules/fontkit/src/encodings.js deleted file mode 100644 index 83b785e..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/encodings.js +++ /dev/null @@ -1,219 +0,0 @@ -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ -export function getEncoding(platformID, encodingID, languageID = 0) { - if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) { - return MAC_LANGUAGE_ENCODINGS[languageID]; - } - - return ENCODINGS[platformID][encodingID]; -} - -const SINGLE_BYTE_ENCODINGS = new Set(['x-mac-roman', 'x-mac-cyrillic', 'iso-8859-6', 'iso-8859-8']); -const MAC_ENCODINGS = { - 'x-mac-croatian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ', - 'x-mac-gaelic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ', - 'x-mac-greek': 'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\u00AD', - 'x-mac-icelandic': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ', - 'x-mac-inuit': 'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł', - 'x-mac-ce': 'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ', - 'x-mac-romanian': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ', - 'x-mac-turkish': 'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ' -}; - -const encodingCache = new Map(); - -export function getEncodingMapping(encoding) { - let cached = encodingCache.get(encoding); - if (cached) { - return cached; - } - - // These encodings aren't supported by TextDecoder. - let mapping = MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for (let i = 0; i < mapping.length; i++) { - res.set(mapping.charCodeAt(i), 0x80 + i); - } - - encodingCache.set(encoding, res); - return res; - } - - // Only single byte encodings can be mapped 1:1. - if (SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for (let i = 0; i < 0x80; i++) { - mapping[i] = 0x80 + i; - } - - let res = new Map(); - let s = decoder.decode(mapping); - for (let i = 0; i < 0x80; i++) { - res.set(s.charCodeAt(i), 0x80 + i); - } - - encodingCache.set(encoding, res); - return res; - } -} - -// Map of platform ids to encoding ids. -export const ENCODINGS = [ - // unicode - ['utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be', 'utf-16be'], - - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - ['x-mac-roman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', - 'x-mac-greek', 'x-mac-cyrillic', 'x-mac-symbol', 'x-mac-devanagari', 'x-mac-gurmukhi', 'x-mac-gujarati', - 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', - 'Burmese', 'Khmer', 'iso-8859-11', 'Laotian', 'Georgian', 'Armenian', 'gbk', - 'Tibetan', 'Mongolian', 'Geez', 'x-mac-ce', 'Vietnamese', 'Sindhi'], - - // ISO (deprecated) - ['ascii', null, 'iso-8859-1'], - - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - ['symbol', 'utf-16be', 'shift-jis', 'gb18030', 'big5', 'euc-kr', 'johab', null, null, null, 'utf-16be'] -]; - -// Overrides for Mac scripts by language id. -// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt -export const MAC_LANGUAGE_ENCODINGS = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; - -// Map of platform ids to BCP-47 language codes. -export const LANGUAGES = [ - // unicode - [], - - { // macintosh - 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw', - 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn', - 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny', - 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg', - 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo', - 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy', - 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu', - 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca', - 8: 'pt', 38: 'cz', 68: 'as', 131: 'la', - 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu', - 10: 'he', 40: 'si', 70: 'pa', 133: 'gn', - 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay', - 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt', - 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug', - 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz', - 15: 'is', 45: 'uk', 75: 'te', 138: 'jv', - 16: 'mt', 46: 'be', 76: 'si', 139: 'su', - 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl', - 18: 'hr', 48: 'kk', 78: 'km', 141: 'af', - 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br', - 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu', - 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd', - 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv', - 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga', - 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to', - 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton', - 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl', - 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az', - 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn', - 29: 'se', 59: 'ps', 89: 'sw', - }, - - // ISO (deprecated) - [], - - { // windows - 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', - 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', - 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', - 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', - 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', - 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', - 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', - 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', - 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', - 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', - 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', - 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', - 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', - 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', - 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', - 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', - 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', - 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', - 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', - 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', - 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', - 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', - 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', - 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', - 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', - 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', - 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', - 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', - 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', - 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', - 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', - 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', - 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', - 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', - 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk', - 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', - 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', - 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', - 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', - 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', - 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', - 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', - 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', - 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', - 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', - 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', - 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso', - } -]; diff --git a/skills/flight-finder/node_modules/fontkit/src/fs.js b/skills/flight-finder/node_modules/fontkit/src/fs.js deleted file mode 100644 index 5dab995..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/fs.js +++ /dev/null @@ -1,17 +0,0 @@ -import { create } from './base'; -import fs from 'fs'; - -export function openSync(filename, postscriptName) { - let buffer = fs.readFileSync(filename); - return create(buffer, postscriptName); -} - -export async function open(filename, postscriptName, callback) { - if (typeof postscriptName === 'function') { - callback = postscriptName; - postscriptName = null; - } - - let buffer = await fs.promises.readFile(filename); - return create(buffer, postscriptName); -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/BBox.js b/skills/flight-finder/node_modules/fontkit/src/glyph/BBox.js deleted file mode 100644 index bba7237..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/BBox.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Represents a glyph bounding box - */ -export default class BBox { - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) { - /** - * The minimum X position in the bounding box - * @type {number} - */ - this.minX = minX; - - /** - * The minimum Y position in the bounding box - * @type {number} - */ - this.minY = minY; - - /** - * The maxmimum X position in the bounding box - * @type {number} - */ - this.maxX = maxX; - - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ - this.maxY = maxY; - } - - /** - * The width of the bounding box - * @type {number} - */ - get width() { - return this.maxX - this.minX; - } - - /** - * The height of the bounding box - * @type {number} - */ - get height() { - return this.maxY - this.minY; - } - - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) { - this.minX = x; - } - - if (x > this.maxX) { - this.maxX = x; - } - } - - if (Math.abs(y) !== Infinity) { - if (y < this.minY) { - this.minY = y; - } - - if (y > this.maxY) { - this.maxY = y; - } - } - } - - copy() { - return new BBox(this.minX, this.minY, this.maxX, this.maxY); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/CFFGlyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/CFFGlyph.js deleted file mode 100644 index 1ac182f..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/CFFGlyph.js +++ /dev/null @@ -1,604 +0,0 @@ -import Glyph from './Glyph'; -import Path from './Path'; - -/** - * Represents an OpenType PostScript glyph, in the Compact Font Format. - */ -export default class CFFGlyph extends Glyph { - type = 'CFF'; - - _getName() { - if (this._font.CFF2) { - return super._getName(); - } - - return this._font['CFF '].getGlyphName(this.id); - } - - bias(s) { - if (s.length < 1240) { - return 107; - } else if (s.length < 33900) { - return 1131; - } else { - return 32768; - } - } - - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - - let path = new Path; - let stack = []; - let trans = []; - - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - - function checkWidth() { - if (width == null) { - width = stack.shift() + privateDict.nominalWidthX; - } - } - - function parseStems() { - if (stack.length % 2 !== 0) { - checkWidth(); - } - - nStems += stack.length >> 1; - return stack.length = 0; - } - - function moveTo(x, y) { - if (open) { - path.closePath(); - } - - path.moveTo(x, y); - open = true; - } - - let parse = function () { - while (stream.pos < end) { - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - - switch (op) { - case 1: // hstem - case 3: // vstem - case 18: // hstemhm - case 23: // vstemhm - parseStems(); - break; - - case 4: // vmoveto - if (stack.length > 1) { - checkWidth(); - } - - y += stack.shift(); - moveTo(x, y); - break; - - case 5: // rlineto - while (stack.length >= 2) { - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - - case 6: // hlineto - case 7: // vlineto - phase = op === 6; - while (stack.length >= 1) { - if (phase) { - x += stack.shift(); - } else { - y += stack.shift(); - } - - path.lineTo(x, y); - phase = !phase; - } - break; - - case 8: // rrcurveto - while (stack.length > 0) { - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - - case 10: // callsubr - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - - case 11: // return - if (cff.version >= 2) { - break; - } - return; - - case 14: // endchar - if (cff.version >= 2) { - break; - } - - if (stack.length > 0) { - checkWidth(); - } - - if (open) { - path.closePath(); - open = false; - } - break; - - case 15: { // vsindex - if (cff.version < 2) { - throw new Error('vsindex operator not supported in CFF v1'); - } - - vsindex = stack.pop(); - break; - } - - case 16: { // blend - if (cff.version < 2) { - throw new Error('blend operator not supported in CFF v1'); - } - - if (!variationProcessor) { - throw new Error('blend operator in non-variation font'); - } - - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - - for (let i = 0; i < numBlends; i++) { - let sum = stack[base + i]; - for (let j = 0; j < blendVector.length; j++) { - sum += blendVector[j] * stack[delta++]; - } - - stack[base + i] = sum; - } - - while (numOperands--) { - stack.pop(); - } - - break; - } - - case 19: // hintmask - case 20: // cntrmask - parseStems(); - stream.pos += (nStems + 7) >> 3; - break; - - case 21: // rmoveto - if (stack.length > 2) { - checkWidth(); - } - - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - - case 22: // hmoveto - if (stack.length > 1) { - checkWidth(); - } - - x += stack.shift(); - moveTo(x, y); - break; - - case 24: // rcurveline - while (stack.length >= 8) { - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - - case 25: // rlinecurve - while (stack.length >= 8) { - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - - case 26: // vvcurveto - if (stack.length % 2) { - x += stack.shift(); - } - - while (stack.length >= 4) { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - - case 27: // hhcurveto - if (stack.length % 2) { - y += stack.shift(); - } - - while (stack.length >= 4) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - - case 28: // shortint - stack.push(stream.readInt16BE()); - break; - - case 29: // callgsubr - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - - case 30: // vhcurveto - case 31: // hvcurveto - phase = op === 31; - while (stack.length >= 4) { - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - - case 12: - op = stream.readUInt8(); - switch (op) { - case 3: // and - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - - case 4: // or - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - - case 5: // not - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - - case 9: // abs - a = stack.pop(); - stack.push(Math.abs(a)); - break; - - case 10: // add - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - - case 11: // sub - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - - case 12: // div - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - - case 14: // neg - a = stack.pop(); - stack.push(-a); - break; - - case 15: // eq - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - - case 18: // drop - stack.pop(); - break; - - case 20: // put - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - - case 21: // get - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - - case 22: // ifelse - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - - case 23: // random - stack.push(Math.random()); - break; - - case 24: // mul - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - - case 26: // sqrt - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - - case 27: // dup - a = stack.pop(); - stack.push(a, a); - break; - - case 28: // exch - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - - case 29: // index - idx = stack.pop(); - if (idx < 0) { - idx = 0; - } else if (idx > stack.length - 1) { - idx = stack.length - 1; - } - - stack.push(stack[idx]); - break; - - case 30: // roll - let n = stack.pop(); - let j = stack.pop(); - - if (j >= 0) { - while (j > 0) { - var t = stack[n - 1]; - for (let i = n - 2; i >= 0; i--) { - stack[i + 1] = stack[i]; - } - - stack[0] = t; - j--; - } - } else { - while (j < 0) { - var t = stack[0]; - for (let i = 0; i <= n; i++) { - stack[i] = stack[i + 1]; - } - - stack[n - 1] = t; - j++; - } - } - break; - - case 34: // hflex - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - - case 35: // flex - pts = []; - - for (let i = 0; i <= 5; i++) { - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - - case 36: // hflex1 - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - - case 37: // flex1 - let startx = x; - let starty = y; - - pts = []; - for (let i = 0; i <= 4; i++) { - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - - if (Math.abs(x - startx) > Math.abs(y - starty)) { // horizontal - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - - default: - throw new Error(`Unknown op: ${op}`); - } - - } else if (op < 247) { - stack.push(op - 139); - } else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else { - stack.push(stream.readInt32BE() / 65536); - } - } - }; - - parse(); - - if (open) { - path.closePath(); - } - - return path; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/COLRGlyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/COLRGlyph.js deleted file mode 100644 index 85d594b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/COLRGlyph.js +++ /dev/null @@ -1,90 +0,0 @@ -import Glyph from './Glyph'; -import BBox from './BBox'; - -class COLRLayer { - constructor(glyph, color) { - this.glyph = glyph; - this.color = color; - } -} - -/** - * Represents a color (e.g. emoji) glyph in Microsoft's COLR format. - * Each glyph in this format contain a list of colored layers, each - * of which is another vector glyph. - */ -export default class COLRGlyph extends Glyph { - type = 'COLR'; - - _getBBox() { - let bbox = new BBox; - for (let i = 0; i < this.layers.length; i++) { - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - - return bbox; - } - - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ - get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - - while (low <= high) { - let mid = (low + high) >> 1; - var rec = colr.baseGlyphRecord[mid]; - - if (this.id < rec.gid) { - high = mid - 1; - } else if (this.id > rec.gid) { - low = mid + 1; - } else { - var baseLayer = rec; - break; - } - } - - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - - return [new COLRLayer(g, color)]; - } - - // otherwise, return an array of all the layers - let layers = []; - for (let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) { - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new COLRLayer(g, color)); - } - - return layers; - } - - render(ctx, size) { - for (let {glyph, color} of this.layers) { - ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - - return; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/Glyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/Glyph.js deleted file mode 100644 index 3592150..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/Glyph.js +++ /dev/null @@ -1,212 +0,0 @@ -import { cache } from '../decorators'; -import Path from './Path'; -import {isMark} from 'unicode-properties'; -import StandardNames from './StandardNames'; - -/** - * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and - * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context. - * - * You do not create glyph objects directly. They are created by various methods on the font object. - * There are several subclasses of the base Glyph class internally that may be returned depending - * on the font format, but they all inherit from this class. - */ -export default class Glyph { - constructor(id, codePoints, font) { - /** - * The glyph id in the font - * @type {number} - */ - this.id = id; - - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ - this.codePoints = codePoints; - this._font = font; - - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark); - this.isLigature = this.codePoints.length > 1; - } - - _getPath() { - return new Path(); - } - - _getCBox() { - return this.path.cbox; - } - - _getBBox() { - return this.path.bbox; - } - - _getTableMetrics(table) { - if (this.id < table.metrics.length) { - return table.metrics.get(this.id); - } - - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - - return res; - } - - _getMetrics(cbox) { - if (this._metrics) { return this._metrics; } - - let {advance:advanceWidth, bearing:leftBearing} = this._getTableMetrics(this._font.hmtx); - - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) { - var {advance:advanceHeight, bearing:topBearing} = this._getTableMetrics(this._font.vmtx); - - } else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) { ({ cbox } = this); } - - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - - } else { - let { hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - - if (this._font._variationProcessor && this._font.HVAR) { - advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - } - - return this._metrics = { advanceWidth, advanceHeight, leftBearing, topBearing }; - } - - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ - @cache - get cbox() { - return this._getCBox(); - } - - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ - @cache - get bbox() { - return this._getBBox(); - } - - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ - @cache - get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ - getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - - /** - * The glyph's advance width. - * @type {number} - */ - @cache - get advanceWidth() { - return this._getMetrics().advanceWidth; - } - - /** - * The glyph's advance height. - * @type {number} - */ - @cache - get advanceHeight() { - return this._getMetrics().advanceHeight; - } - - get ligatureCaretPositions() {} - - _getName() { - let { post } = this._font; - if (!post) { - return null; - } - - switch (post.version) { - case 1: - return StandardNames[this.id]; - - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < StandardNames.length) { - return StandardNames[id]; - } - - return post.names[id - StandardNames.length]; - - case 2.5: - return StandardNames[this.id + post.offsets[this.id]]; - - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - - /** - * The glyph's name - * @type {string} - */ - @cache - get name() { - return this._getName(); - } - - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ - render(ctx, size) { - ctx.save(); - - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - - ctx.restore(); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/GlyphVariationProcessor.js b/skills/flight-finder/node_modules/fontkit/src/glyph/GlyphVariationProcessor.js deleted file mode 100644 index 7866279..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/GlyphVariationProcessor.js +++ /dev/null @@ -1,486 +0,0 @@ -const TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const TUPLE_COUNT_MASK = 0x0fff; -const EMBEDDED_TUPLE_COORD = 0x8000; -const INTERMEDIATE_TUPLE = 0x4000; -const PRIVATE_POINT_NUMBERS = 0x2000; -const TUPLE_INDEX_MASK = 0x0fff; -const POINTS_ARE_WORDS = 0x80; -const POINT_RUN_COUNT_MASK = 0x7f; -const DELTAS_ARE_ZERO = 0x80; -const DELTAS_ARE_WORDS = 0x40; -const DELTA_RUN_COUNT_MASK = 0x3f; - -/** - * This class is transforms TrueType glyphs according to the data from - * the Apple Advanced Typography variation tables (fvar, gvar, and avar). - * These tables allow infinite adjustments to glyph weight, width, slant, - * and optical size without the designer needing to specify every exact style. - * - * Apple's documentation for these tables is not great, so thanks to the - * Freetype project for figuring much of this out. - * - * @private - */ -export default class GlyphVariationProcessor { - constructor(font, coords) { - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } - - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for (var i = 0; i < this.font.fvar.axis.length; i++) { - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) { - normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - } else { - normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - } - - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) { - for (var i = 0; i < this.font.avar.segment.length; i++) { - let segment = this.font.avar.segment[i]; - for (let j = 0; j < segment.correspondence.length; j++) { - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / - (pair.fromCoord - prev.fromCoord + Number.EPSILON) + - prev.toCoord; - - break; - } - } - } - } - - return normalized; - } - - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) { return; } - - let { gvar } = this.font; - if (gid >= gvar.glyphCount) { return; } - - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) { return; } - - // Read the gvar data for this glyph - let { stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) { - return; - } - - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - - if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - - let origPoints = glyphPoints.map(pt => pt.copy()); - - tupleCount &= TUPLE_COUNT_MASK; - for (let i = 0; i < tupleCount; i++) { - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - - if (tupleIndex & EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for (let a = 0; a < gvar.axisCount; a++) { - tupleCoords.push(stream.readInt16BE() / 16384); - } - - } else { - if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) { - throw new Error('Invalid gvar table'); - } - - var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK]; - } - - if (tupleIndex & INTERMEDIATE_TUPLE) { - var startCoords = []; - for (let a = 0; a < gvar.axisCount; a++) { - startCoords.push(stream.readInt16BE() / 16384); - } - - var endCoords = []; - for (let a = 0; a < gvar.axisCount; a++) { - endCoords.push(stream.readInt16BE() / 16384); - } - } - - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - - var here = stream.pos; - stream.pos = offsetToData; - - if (tupleIndex & PRIVATE_POINT_NUMBERS) { - var points = this.decodePoints(); - } else { - var points = sharedPoints; - } - - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - - if (points.length === 0) { // all points - for (let i = 0; i < glyphPoints.length; i++) { - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - } else { - let outPoints = origPoints.map(pt => pt.copy()); - let hasDelta = glyphPoints.map(() => false); - - for (let i = 0; i < points.length; i++) { - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - - for (let i = 0; i < glyphPoints.length; i++) { - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - - offsetToData += tupleDataSize; - stream.pos = here; - } - } - - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - - if (count & POINTS_ARE_WORDS) { - count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - } - - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while (i < count) { - let run = stream.readUInt8(); - let runCount = (run & POINT_RUN_COUNT_MASK) + 1; - let fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - - for (let j = 0; j < runCount && i < count; j++) { - point += fn.call(stream); - points[i++] = point; - } - } - - return points; - } - - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - - while (i < count) { - let run = stream.readUInt8(); - let runCount = (run & DELTA_RUN_COUNT_MASK) + 1; - - if (run & DELTAS_ARE_ZERO) { - i += runCount; - - } else { - let fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for (let j = 0; j < runCount && i < count; j++) { - deltas[i++] = fn.call(stream); - } - } - } - - return deltas; - } - - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar } = this.font; - let factor = 1; - - for (let i = 0; i < gvar.axisCount; i++) { - if (tupleCoords[i] === 0) { - continue; - } - - if (normalized[i] === 0) { - return 0; - } - - if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) { - if ((normalized[i] < Math.min(0, tupleCoords[i])) || - (normalized[i] > Math.max(0, tupleCoords[i]))) { - return 0; - } - - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if ((normalized[i] < startCoords[i]) || - (normalized[i] > endCoords[i])) { - return 0; - - } else if (normalized[i] < tupleCoords[i]) { - factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - - } else { - factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - } - - return factor; - } - - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) { - return; - } - - let point = 0; - while (point < points.length) { - let firstPoint = point; - - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while (!pt.endContour) { - pt = points[++endPoint]; - } - - // find the first point that has a delta - while (point <= endPoint && !hasDelta[point]) { - point++; - } - - if (point > endPoint) { - continue; - } - - let firstDelta = point; - let curDelta = point; - point++; - - while (point <= endPoint) { - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - - point++; - } - - // shift contour if we only have a single delta - if (curDelta === firstDelta) { - this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - } else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - - if (firstDelta > 0) { - this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - } - - point = endPoint + 1; - } - } - - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) { - return; - } - - let iterable = ['x', 'y']; - for (let i = 0; i < iterable.length; i++) { - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - - for (let p = p1; p <= p2; p++) { - let out = inPoints[p][k]; - - if (out <= in1) { - out += out1 - in1; - } else if (out >= in2) { - out += out2 - in2; - } else { - out = out1 + (out - in1) * scale; - } - - outPoints[p][k] = out; - } - } - } - } - - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - - if (deltaX === 0 && deltaY === 0) { - return; - } - - for (let p = p1; p <= p2; p++) { - if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - } - - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) { - idx = table.advanceWidthMapping.mapCount - 1; - } - - let entryFormat = table.advanceWidthMapping.entryFormat; - ({outerIndex, innerIndex} = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) { - return 0; - } - - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) { - return 0; - } - - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - - for (let master = 0; master < varData.regionIndexCount; master++) { - netAdjustment += deltaSet.deltas[master] * blendVector[master]; - } - - return netAdjustment; - } - - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) { - return this.blendVectors.get(varData); - } - - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - - // outer loop steps through master designs to be blended - for (let master = 0; master < varData.regionIndexCount; master++) { - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - - // inner loop steps through axes in this region - for (let j = 0; j < axes.length; j++) { - let axis = axes[j]; - let axisScalar; - - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) { - axisScalar = 1; - - } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) { - axisScalar = 1; - - // peak of 0 means ignore this axis - } else if (axis.peakCoord === 0) { - axisScalar = 1; - - // ignore this region if coords are out of range - } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) { - axisScalar = 0; - - // calculate a proportional factor - } else { - if (normalizedCoords[j] === axis.peakCoord) { - axisScalar = 1; - } else if (normalizedCoords[j] < axis.peakCoord) { - axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / - (axis.peakCoord - axis.startCoord + Number.EPSILON); - } else { - axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / - (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - } - - // take product of all the axis scalars - scalar *= axisScalar; - } - - blendVector[master] = scalar; - } - - this.blendVectors.set(varData, blendVector); - return blendVector; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/Path.js b/skills/flight-finder/node_modules/fontkit/src/glyph/Path.js deleted file mode 100644 index a119fb2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/Path.js +++ /dev/null @@ -1,244 +0,0 @@ -import BBox from './BBox'; - -const SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; - -/** - * Path objects are returned by glyphs and represent the actual - * vector outlines for each glyph in the font. Paths can be converted - * to SVG path data strings, or to functions that can be applied to - * render the path to a graphics context. - */ -export default class Path { - constructor() { - this.commands = []; - this._bbox = null; - this._cbox = null; - } - - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ - toFunction() { - return ctx => { - this.commands.forEach(c => { - return ctx[c.command].apply(ctx, c.args) - }) - }; - } - - /** - * Converts the path to an SVG path data string - * @return {string} - */ - toSVG() { - let cmds = this.commands.map(c => { - let args = c.args.map(arg => Math.round(arg * 100) / 100); - return `${SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - - return cmds.join(''); - } - - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ - get cbox() { - if (!this._cbox) { - let cbox = new BBox; - for (let command of this.commands) { - for (let i = 0; i < command.args.length; i += 2) { - cbox.addPoint(command.args[i], command.args[i + 1]); - } - } - - this._cbox = Object.freeze(cbox); - } - - return this._cbox; - } - - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ - get bbox() { - if (this._bbox) { - return this._bbox; - } - - let bbox = new BBox; - let cx = 0, cy = 0; - - let f = t => ( - Math.pow(1 - t, 3) * p0[i] - + 3 * Math.pow(1 - t, 2) * t * p1[i] - + 3 * (1 - t) * Math.pow(t, 2) * p2[i] - + Math.pow(t, 3) * p3[i] - ); - - for (let c of this.commands) { - switch (c.command) { - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else { - var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - } - - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - - var p0 = [cx, cy]; - var p1 = [cp1x, cp1y]; - var p2 = [cp2x, cp2y]; - var p3 = [p3x, p3y]; - - for (var i = 0; i <= 1; i++) { - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - - if (a === 0) { - if (b === 0) { - continue; - } - - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) { - bbox.addPoint(f(t), bbox.maxY); - } else if (i === 1) { - bbox.addPoint(bbox.maxX, f(t)); - } - } - - continue; - } - - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) { - continue; - } - - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) { - bbox.addPoint(f(t1), bbox.maxY); - } else if (i === 1) { - bbox.addPoint(bbox.maxX, f(t1)); - } - } - - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) { - bbox.addPoint(f(t2), bbox.maxY); - } else if (i === 1) { - bbox.addPoint(bbox.maxX, f(t2)); - } - } - } - - cx = p3x; - cy = p3y; - break; - } - } - - return this._bbox = Object.freeze(bbox); - } - - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ - mapPoints(fn) { - let path = new Path; - - for (let c of this.commands) { - let args = []; - for (let i = 0; i < c.args.length; i += 2) { - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - - path[c.command](...args); - } - - return path; - } - - /** - * Transforms the path by the given matrix. - */ - transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y) => { - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [tx, ty]; - }); - } - - /** - * Translates the path by the given offset. - */ - translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - - /** - * Rotates the path by the given angle (in radians). - */ - rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - - /** - * Scales the path. - */ - scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } -} - -for (let command of ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']) { - Path.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command, - args - }); - - return this; - }; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/SBIXGlyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/SBIXGlyph.js deleted file mode 100644 index fda3b89..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/SBIXGlyph.js +++ /dev/null @@ -1,54 +0,0 @@ -import TTFGlyph from './TTFGlyph'; -import * as r from 'restructure'; - -let SBIXImage = new r.Struct({ - originX: r.uint16, - originY: r.uint16, - type: new r.String(4), - data: new r.Buffer(t => t.parent.buflen - t._currentOffset) -}); - -/** - * Represents a color (e.g. emoji) glyph in Apple's SBIX format. - */ -export default class SBIXGlyph extends TTFGlyph { - type = 'SBIX'; - - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ - getImageForSize(size) { - for (let i = 0; i < this._font.sbix.imageTables.length; i++) { - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) { break; } - } - - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - - if (start === end) { - return null; - } - - this._font.stream.pos = start; - return SBIXImage.decode(this._font.stream, {buflen: end - start}); - } - - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, {height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale}); - } - - if (this._font.sbix.flags.renderOutlines) { - super.render(ctx, size); - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/StandardNames.js b/skills/flight-finder/node_modules/fontkit/src/glyph/StandardNames.js deleted file mode 100644 index 7c024a1..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/StandardNames.js +++ /dev/null @@ -1,27 +0,0 @@ -export default [ - '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', - 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', - 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', - 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', - 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', - 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', - 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', - 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', - 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', - 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', - 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', - 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', - 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', - 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', - 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', - 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', - 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', - 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', - 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', - 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', - 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', - 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', - 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat' -]; diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyph.js deleted file mode 100644 index 8dc1c75..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyph.js +++ /dev/null @@ -1,393 +0,0 @@ -import Glyph from './Glyph'; -import Path from './Path'; -import BBox from './BBox'; -import * as r from 'restructure'; - -// The header for both simple and composite glyphs -let GlyfHeader = new r.Struct({ - numberOfContours: r.int16, // if negative, this is a composite glyph - xMin: r.int16, - yMin: r.int16, - xMax: r.int16, - yMax: r.int16 -}); - -// Flags for simple glyphs -const ON_CURVE = 1 << 0; -const X_SHORT_VECTOR = 1 << 1; -const Y_SHORT_VECTOR = 1 << 2; -const REPEAT = 1 << 3; -const SAME_X = 1 << 4; -const SAME_Y = 1 << 5; - -// Flags for composite glyphs -const ARG_1_AND_2_ARE_WORDS = 1 << 0; -const ARGS_ARE_XY_VALUES = 1 << 1; -const ROUND_XY_TO_GRID = 1 << 2; -const WE_HAVE_A_SCALE = 1 << 3; -const MORE_COMPONENTS = 1 << 5; -const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; -const WE_HAVE_A_TWO_BY_TWO = 1 << 7; -const WE_HAVE_INSTRUCTIONS = 1 << 8; -const USE_MY_METRICS = 1 << 9; -const OVERLAP_COMPOUND = 1 << 10; -const SCALED_COMPONENT_OFFSET = 1 << 11; -const UNSCALED_COMPONENT_OFFSET = 1 << 12; - -// Represents a point in a simple glyph -export class Point { - constructor(onCurve, endContour, x = 0, y = 0) { - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } - - copy() { - return new Point(this.onCurve, this.endContour, this.x, this.y); - } -} - -// Represents a component in a composite glyph -class Component { - constructor(glyphID, dx, dy) { - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} - -/** - * Represents a TrueType glyph. - */ -export default class TTFGlyph extends Glyph { - type = 'TTF'; - - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) { - return this.path.cbox; - } - - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = GlyfHeader.decode(stream); - - let cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) { - val = -val; - } - - val += prev; - } else { - if (same) { - var val = prev; - } else { - var val = prev + stream.readInt16BE(); - } - } - - return val; - } - - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) { return null; } - - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - - let glyph = GlyfHeader.decode(stream); - - if (glyph.numberOfContours > 0) { - this._decodeSimple(glyph, stream); - - } else if (glyph.numberOfContours < 0) { - this._decodeComposite(glyph, stream, startPos); - } - - return glyph; - } - - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - - let endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream); - - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - - while (flags.length < numCoords) { - var flag = stream.readUInt8(); - flags.push(flag); - - // check for repeat flag - if (flag & REPEAT) { - let count = stream.readUInt8(); - for (let j = 0; j < count; j++) { - flags.push(flag); - } - } - } - - for (var i = 0; i < flags.length; i++) { - var flag = flags[i]; - let point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - - let px = 0; - for (var i = 0; i < flags.length; i++) { - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X); - } - - let py = 0; - for (var i = 0; i < flags.length; i++) { - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y); - } - - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - - return; - } - - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = MORE_COMPONENTS; - - while (flags & MORE_COMPONENTS) { - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) { - haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0; - } - - if (flags & ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - - var component = new Component(glyphID, dx, dy); - component.pos = gPos; - - if (flags & WE_HAVE_A_SCALE) { - // fixed number with 14 bits of fraction - component.scaleX = - component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - - } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - - } else if (flags & WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - component.scale01 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - component.scale10 = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - component.scaleY = ((stream.readUInt8() << 24) | (stream.readUInt8() << 16)) / 1073741824; - } - - glyph.components.push(component); - } - - if (this._font._variationProcessor) { - let points = []; - for (let j = 0; j < glyph.components.length; j++) { - var component = glyph.components[j]; - points.push(new Point(true, true, component.dx, component.dy)); - } - - points.push(...this._getPhantomPoints(glyph)); - - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - - for (let i = 0; i < points.length; i++) { - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - - return haveInstructions; - } - - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) { - this._metrics = Glyph.prototype._getMetrics.call(this, cbox); - } - - let { advanceWidth, advanceHeight, leftBearing, topBearing } = this._metrics; - - return [ - new Point(false, true, glyph.xMin - leftBearing, 0), - new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new Point(false, true, 0, glyph.yMax + topBearing), - new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) { - return []; - } - - let points = []; - - if (glyph.numberOfContours < 0) { - // resolve composite glyphs - for (let component of glyph.components) { - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for (let i = 0; i < contours.length; i++) { - let contour = contours[i]; - for (let j = 0; j < contour.length; j++) { - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new Point(point.onCurve, point.endContour, x, y)); - } - } - } - } else { - points = glyph.points || []; - } - - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - - let contours = []; - let cur = []; - for (let k = 0; k < points.length; k++) { - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - - return contours; - } - - _getMetrics() { - if (this._metrics) { - return this._metrics; - } - - let cbox = this._getCBox(true); - super._getMetrics(cbox); - - if (this._font._variationProcessor && !this._font.HVAR) { - // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - } - - return this._metrics; - } - - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new Path; - - for (let i = 0; i < contours.length; i++) { - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) { - // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - } else { - // Start at the middle if both the first and last points are off curve - firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - } - - var curvePt = firstPt; - } - - path.moveTo(firstPt.x, firstPt.y); - - for (let j = start; j < contour.length; j++) { - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - - if (prevPt.onCurve && pt.onCurve) { - path.lineTo(pt.x, pt.y); - - } else if (prevPt.onCurve && !pt.onCurve) { - var curvePt = pt; - - } else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - - } else { - throw new Error("Unknown TTF path state"); - } - } - - // Connect the first and last points - if (curvePt) { - path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - } - - path.closePath(); - } - - return path; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyphEncoder.js b/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyphEncoder.js deleted file mode 100644 index 6ab8b73..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/TTFGlyphEncoder.js +++ /dev/null @@ -1,158 +0,0 @@ -import * as r from 'restructure'; - -// Flags for simple glyphs -const ON_CURVE = 1 << 0; -const X_SHORT_VECTOR = 1 << 1; -const Y_SHORT_VECTOR = 1 << 2; -const REPEAT = 1 << 3; -const SAME_X = 1 << 4; -const SAME_Y = 1 << 5; - -class Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - - static encode(stream, value) { - if (value >= 0 && value <= 255) { - stream.writeUInt8(value); - } else { - stream.writeInt16BE(value); - } - } -} - -let Glyf = new r.Struct({ - numberOfContours: r.int16, // if negative, this is a composite glyph - xMin: r.int16, - yMin: r.int16, - xMax: r.int16, - yMax: r.int16, - endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'), - instructions: new r.Array(r.uint8, r.uint16), - flags: new r.Array(r.uint8, 0), - xPoints: new r.Array(Point, 0), - yPoints: new r.Array(Point, 0) -}); - -/** - * Encodes TrueType glyph outlines - */ -export default class TTFGlyphEncoder { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - - for (let i = 0; i < path.commands.length; i++) { - let c = path.commands[i]; - - for (let j = 0; j < c.args.length; j += 2) { - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - - if (x === midX && y === midY) { - continue; - } - } - } - - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) { - flag |= ON_CURVE; - } - - flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR, SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR, SAME_Y); - - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - - flags.push(flag); - lastFlag = flag; - } - - lastX = x; - lastY = y; - pointCount++; - } - - if (c.command === 'closePath') { - endPtsOfContours.push(pointCount - 1); - } - } - - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') { - endPtsOfContours.push(pointCount - 1); - } - - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - - let size = Glyf.size(glyf); - let tail = 4 - (size % 4); - - let stream = new r.EncodeStream(size + tail); - Glyf.encode(stream, glyf); - - // Align to 4-byte length - if (tail !== 0) { - stream.fill(0, tail); - } - - return stream.buffer; - } - - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - - if (value === last) { - flag |= sameFlag; - } else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) { - diff = -diff; - } else { - flag |= sameFlag; - } - } - - points.push(diff); - } - - return flag; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/glyph/WOFF2Glyph.js b/skills/flight-finder/node_modules/fontkit/src/glyph/WOFF2Glyph.js deleted file mode 100644 index 9b451c1..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/glyph/WOFF2Glyph.js +++ /dev/null @@ -1,17 +0,0 @@ -import TTFGlyph from './TTFGlyph'; - -/** - * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently. - */ -export default class WOFF2Glyph extends TTFGlyph { - type = 'WOFF2'; - - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - - _getCBox() { - return this.path.bbox; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/index.js b/skills/flight-finder/node_modules/fontkit/src/index.js deleted file mode 100644 index e27a7b2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base'; -import TTFFont from './TTFFont'; -import WOFFFont from './WOFFFont'; -import WOFF2Font from './WOFF2Font'; -import TrueTypeCollection from './TrueTypeCollection'; -import DFont from './DFont'; - -// Register font formats -registerFormat(TTFFont); -registerFormat(WOFFFont); -registerFormat(WOFF2Font); -registerFormat(TrueTypeCollection); -registerFormat(DFont); - -export * from './base'; diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/GlyphPosition.js b/skills/flight-finder/node_modules/fontkit/src/layout/GlyphPosition.js deleted file mode 100644 index 79a4422..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/GlyphPosition.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Represents positioning information for a glyph in a GlyphRun. - */ -export default class GlyphPosition { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0) { - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ - this.xAdvance = xAdvance; - - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ - this.yAdvance = yAdvance; - - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ - this.xOffset = xOffset; - - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ - this.yOffset = yOffset; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/GlyphRun.js b/skills/flight-finder/node_modules/fontkit/src/layout/GlyphRun.js deleted file mode 100644 index 18e2f23..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/GlyphRun.js +++ /dev/null @@ -1,108 +0,0 @@ -import BBox from '../glyph/BBox'; -import * as Script from '../layout/Script'; - -/** - * Represents a run of Glyph and GlyphPosition objects. - * Returned by the font layout method. - */ -export default class GlyphRun { - constructor(glyphs, features, script, language, direction) { - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ - this.glyphs = glyphs; - - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ - this.positions = null; - - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ - this.script = script; - - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ - this.language = language || null; - - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ - this.direction = direction || Script.direction(script); - - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ - this.features = {}; - - // Convert features to an object - if (Array.isArray(features)) { - for (let tag of features) { - this.features[tag] = true; - } - } else if (typeof features === 'object') { - this.features = features; - } - } - - /** - * The total advance width of the run. - * @type {number} - */ - get advanceWidth() { - let width = 0; - for (let position of this.positions) { - width += position.xAdvance; - } - - return width; - } - - /** - * The total advance height of the run. - * @type {number} - */ - get advanceHeight() { - let height = 0; - for (let position of this.positions) { - height += position.yAdvance; - } - - return height; - } - - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ - get bbox() { - let bbox = new BBox; - - let x = 0; - let y = 0; - for (let index = 0; index < this.glyphs.length; index++) { - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - - x += p.xAdvance; - y += p.yAdvance; - } - - return bbox; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/KernProcessor.js b/skills/flight-finder/node_modules/fontkit/src/layout/KernProcessor.js deleted file mode 100644 index 4d4f6db..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/KernProcessor.js +++ /dev/null @@ -1,94 +0,0 @@ -import {binarySearch} from '../utils'; - -export default class KernProcessor { - constructor(font) { - this.kern = font.kern; - } - - process(glyphs, positions) { - for (let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) { - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - - getKerning(left, right) { - let res = 0; - - for (let table of this.kern.tables) { - if (table.coverage.crossStream) { - continue; - } - - switch (table.version) { - case 0: - if (!table.coverage.horizontal) { - continue; - } - - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) { - continue; - } - - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - - let val = 0; - let s = table.subtable; - switch (table.format) { - case 0: - let pairIdx = binarySearch(s.pairs, function (pair) { - return (left - pair.left) || (right - pair.right); - }); - - if (pairIdx >= 0) { - val = s.pairs[pairIdx].value; - } - - break; - - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) { - leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - } else { - leftOffset = s.array.off; - } - - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) { - rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - } - - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) { - return 0; - } - - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) { - res = val; - } else { - res += val; - } - } - - return res; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/LayoutEngine.js b/skills/flight-finder/node_modules/fontkit/src/layout/LayoutEngine.js deleted file mode 100644 index 1b035a7..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/LayoutEngine.js +++ /dev/null @@ -1,189 +0,0 @@ -import KernProcessor from './KernProcessor'; -import UnicodeLayoutEngine from './UnicodeLayoutEngine'; -import GlyphRun from './GlyphRun'; -import GlyphPosition from './GlyphPosition'; -import * as Script from './Script'; -import AATLayoutEngine from '../aat/AATLayoutEngine'; -import OTLayoutEngine from '../opentype/OTLayoutEngine'; - -export default class LayoutEngine { - constructor(font) { - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) { - this.engine = new AATLayoutEngine(this.font); - - } else if (this.font.GSUB || this.font.GPOS) { - this.engine = new OTLayoutEngine(this.font); - } - } - - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) { - script = Script.forString(string); - } - - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string) { - codePoints.push(...glyph.codePoints); - } - - script = Script.forCodePoints(codePoints); - } - - var glyphs = string; - } - - let glyphRun = new GlyphRun(glyphs, features, script, language, direction); - - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - - // Setup the advanced layout engine - if (this.engine && this.engine.setup) { - this.engine.setup(glyphRun); - } - - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) { - this.engine.cleanup(); - } - - return glyphRun; - } - - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) { - this.engine.substitute(glyphRun); - } - } - - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map(glyph => new GlyphPosition(glyph.advanceWidth)); - let positioned = null; - - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) { - positioned = this.engine.position(glyphRun); - } - - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) { - this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font); - } - - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) { - this.kernProcessor = new KernProcessor(this.font); - } - - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for (let i = 0; i < glyphs.length; i++) { - if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - } - - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) { - // BMP - switch (ch >> 8) { - case 0x00: return ch === 0x00AD; - case 0x03: return ch === 0x034F; - case 0x06: return ch === 0x061C; - case 0x17: return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: return 0x180B <= ch && ch <= 0x180E; - case 0x20: return (0x200B <= ch && ch <= 0x200F) || (0x202A <= ch && ch <= 0x202E) || (0x2060 <= ch && ch <= 0x206F); - case 0xFE: return (0xFE00 <= ch && ch <= 0xFE0F) || ch === 0xFEFF; - case 0xFF: return 0xFFF0 <= ch && ch <= 0xFFF8; - default: return false; - } - } else { - // Other planes - switch (plane) { - case 0x01: return (0x1BCA0 <= ch && ch <= 0x1BCA3) || (0x1D173 <= ch && ch <= 0x1D17A); - case 0x0E: return 0xE0000 <= ch && ch <= 0xE0FFF; - default: return false; - } - } - } - - getAvailableFeatures(script, language) { - let features = []; - - if (this.engine) { - features.push(...this.engine.getAvailableFeatures(script, language)); - } - - if (this.font.kern && features.indexOf('kern') === -1) { - features.push('kern'); - } - - return features; - } - - stringsForGlyph(gid) { - let result = new Set; - - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints) { - result.add(String.fromCodePoint(codePoint)); - } - - if (this.engine && this.engine.stringsForGlyph) { - for (let string of this.engine.stringsForGlyph(gid)) { - result.add(string); - } - } - - return Array.from(result); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/Script.js b/skills/flight-finder/node_modules/fontkit/src/layout/Script.js deleted file mode 100644 index 80106b6..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/Script.js +++ /dev/null @@ -1,231 +0,0 @@ -import {getScript} from 'unicode-properties'; - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: ['bng2', 'beng'], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: ['dev2', 'deva'], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: ['gjr2', 'gujr'], - Gurmukhi: ['gur2', 'guru'], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: ['knd2', 'knda'], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: ['mlm2', 'mlym'], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: ['mym2', 'mymr'], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: ['ory2', 'orya'], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: ['tml2', 'taml'], - Tai_Viet: 'tavt', - Telugu: ['tel2', 'telu'], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; - -const OPENTYPE_SCRIPTS = {}; -for (let script in UNICODE_SCRIPTS) { - let tag = UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) { - for (let t of tag) { - OPENTYPE_SCRIPTS[t] = script; - } - } else { - OPENTYPE_SCRIPTS[tag] = script; - } -} - -export function fromUnicode(script) { - return UNICODE_SCRIPTS[script]; -} - -export function fromOpenType(tag) { - return OPENTYPE_SCRIPTS[tag]; -} - -export function forString(string) { - let len = string.length; - let idx = 0; - while (idx < len) { - let code = string.charCodeAt(idx++); - - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - - let script = getScript(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') { - return UNICODE_SCRIPTS[script]; - } - } - - return UNICODE_SCRIPTS.Unknown; -} - -export function forCodePoints(codePoints) { - for (let i = 0; i < codePoints.length; i++) { - let codePoint = codePoints[i]; - let script = getScript(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') { - return UNICODE_SCRIPTS[script]; - } - } - - return UNICODE_SCRIPTS.Unknown; -} - -// The scripts in this map are written from right to left -const RTL = { - arab: true, // Arabic - hebr: true, // Hebrew - syrc: true, // Syriac - thaa: true, // Thaana - cprt: true, // Cypriot Syllabary - khar: true, // Kharosthi - phnx: true, // Phoenician - 'nko ': true, // N'Ko - lydi: true, // Lydian - avst: true, // Avestan - armi: true, // Imperial Aramaic - phli: true, // Inscriptional Pahlavi - prti: true, // Inscriptional Parthian - sarb: true, // Old South Arabian - orkh: true, // Old Turkic, Orkhon Runic - samr: true, // Samaritan - mand: true, // Mandaic, Mandaean - merc: true, // Meroitic Cursive - mero: true, // Meroitic Hieroglyphs - - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, // Manichaean - mend: true, // Mende Kikakui - nbat: true, // Nabataean - narb: true, // Old North Arabian - palm: true, // Palmyrene - phlp: true // Psalter Pahlavi -}; - -export function direction(script) { - if (RTL[script]) { - return 'rtl'; - } - - return 'ltr'; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/layout/UnicodeLayoutEngine.js b/skills/flight-finder/node_modules/fontkit/src/layout/UnicodeLayoutEngine.js deleted file mode 100644 index 68d5b9a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/layout/UnicodeLayoutEngine.js +++ /dev/null @@ -1,250 +0,0 @@ -import {getCombiningClass} from 'unicode-properties'; - -/** - * This class is used when GPOS does not define 'mark' or 'mkmk' features - * for positioning marks relative to base glyphs. It uses the unicode - * combining class property to position marks. - * - * Based on code from Harfbuzz, thanks! - * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc - */ -export default class UnicodeLayoutEngine { - constructor(font) { - this.font = font; - } - - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for (let index = 0; index < glyphs.length; index++) { - let glyph = glyphs[index]; - if (glyph.isMark) { // TODO: handle ligatures - clusterEnd = index; - } else { - if (clusterStart !== clusterEnd) { - this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - } - - clusterStart = clusterEnd = index; - } - } - - if (clusterStart !== clusterEnd) { - this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - } - - return positions; - } - - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) { - // LTR. TODO: RTL support. - baseBox.minX += ((base.codePoints.length - 1) * baseBox.width) / base.codePoints.length; - } - - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - - // position each of the mark glyphs relative to the base glyph - for (let index = clusterStart + 1; index <= clusterEnd; index++) { - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - - // x positioning - switch (combiningClass) { - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - - default: // Attached_Below, Attached_Above, Below, Above, other - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - - // y positioning - switch (combiningClass) { - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') { - baseBox.minY += yGap; - } - - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') { - baseBox.maxY += yGap; - } - - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - - return; - } - - getCombiningClass(codePoint) { - let combiningClass = getCombiningClass(codePoint); - - // Thai / Lao need some per-character work - if ((codePoint & ~0xff) === 0x0e00) { - if (combiningClass === 'Not_Reordered') { - switch (codePoint) { - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - - case 0x0ebc: - return 'Below'; - } - } else if (codePoint === 0x0e3a) { // virama - return 'Below_Right'; - } - } - - switch (combiningClass) { - // Hebrew - - case 'CCC10': // sheva - case 'CCC11': // hataf segol - case 'CCC12': // hataf patah - case 'CCC13': // hataf qamats - case 'CCC14': // hiriq - case 'CCC15': // tsere - case 'CCC16': // segol - case 'CCC17': // patah - case 'CCC18': // qamats - case 'CCC20': // qubuts - case 'CCC22': // meteg - return 'Below'; - - case 'CCC23': // rafe - return 'Attached_Above'; - - case 'CCC24': // shin dot - return 'Above_Right'; - - case 'CCC25': // sin dot - case 'CCC19': // holam - return 'Above_Left'; - - case 'CCC26': // point varika - return 'Above'; - - case 'CCC21': // dagesh - break; - - // Arabic and Syriac - - case 'CCC27': // fathatan - case 'CCC28': // dammatan - case 'CCC30': // fatha - case 'CCC31': // damma - case 'CCC33': // shadda - case 'CCC34': // sukun - case 'CCC35': // superscript alef - case 'CCC36': // superscript alaph - return 'Above'; - - case 'CCC29': // kasratan - case 'CCC32': // kasra - return 'Below'; - - // Thai - - case 'CCC103': // sara u / sara uu - return 'Below_Right'; - - case 'CCC107': // mai - return 'Above_Right'; - - // Lao - - case 'CCC118': // sign u / sign uu - return 'Below'; - - case 'CCC122': // mai - return 'Above'; - - // Tibetan - - case 'CCC129': // sign aa - case 'CCC132': // sign u - return 'Below'; - - case 'CCC130': // sign i - return 'Above'; - } - - return combiningClass; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/node.js b/skills/flight-finder/node_modules/fontkit/src/node.js deleted file mode 100644 index f496ea0..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/node.js +++ /dev/null @@ -1,17 +0,0 @@ -import { registerFormat, create, defaultLanguage, setDefaultLanguage } from './base'; -import { open, openSync } from './fs'; -import TTFFont from './TTFFont'; -import WOFFFont from './WOFFFont'; -import WOFF2Font from './WOFF2Font'; -import TrueTypeCollection from './TrueTypeCollection'; -import DFont from './DFont'; - -// Register font formats -registerFormat(TTFFont); -registerFormat(WOFFFont); -registerFormat(WOFF2Font); -registerFormat(TrueTypeCollection); -registerFormat(DFont); - -export * from './base'; -export * from './fs'; diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/GPOSProcessor.js b/skills/flight-finder/node_modules/fontkit/src/opentype/GPOSProcessor.js deleted file mode 100644 index 6a2c1f9..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/GPOSProcessor.js +++ /dev/null @@ -1,353 +0,0 @@ -import OTProcessor from './OTProcessor'; - -export default class GPOSProcessor extends OTProcessor { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) { - position.xAdvance += value.xAdvance; - } - - if (value.yAdvance != null) { - position.yAdvance += value.yAdvance; - } - - if (value.xPlacement != null) { - position.xOffset += value.xPlacement; - } - - if (value.yPlacement != null) { - position.yOffset += value.yPlacement; - } - - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) { - position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - } - - if (value.yPlaDevice) { - position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - } - - if (value.xAdvDevice) { - position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - } - - if (value.yAdvDevice) { - position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - } - - // TODO: device tables - } - - applyLookup(lookupType, table) { - switch (lookupType) { - case 1: { // Single positioning value - let index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - switch (table.version) { - case 1: - this.applyPositionValue(0, table.value); - break; - - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - - return true; - } - - case 2: { // Pair Adjustment Positioning - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) { - return false; - } - - let index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - switch (table.version) { - case 1: // Adjustments for glyph pairs - let set = table.pairSets.get(index); - - for (let pair of set) { - if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - - return false; - - case 2: // Class pair adjustment - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) { - return false; - } - - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - - case 3: { // Cursive Attachment Positioning - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) { - return false; - } - - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) { - return false; - } - - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) { - return false; - } - - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - - switch (this.direction) { - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - - return true; - } - - case 4: { // Mark to base positioning - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) { - return false; - } - - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - - if (baseGlyphIndex < 0) { - return false; - } - - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) { - return false; - } - - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - - case 5: { // Mark to ligature positioning - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) { - return false; - } - - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while (--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - - if (baseGlyphIndex < 0) { - return false; - } - - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) { - return false; - } - - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && (markGlyph.ligatureComponent > 0) - ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 - : ligGlyph.codePoints.length - 1; - - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - - case 6: { // Mark to mark positioning - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) { - return false; - } - - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) { - return false; - } - - let cur = this.glyphIterator.cur; - - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) { // Marks belonging to the same base - good = true; - } else if (cur.ligatureComponent === prev.ligatureComponent) { // Marks belonging to the same ligature component - good = true; - } - } else { - // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if ((cur.ligatureID && !cur.ligatureComponent) || (prev.ligatureID && !prev.ligatureComponent)) { - good = true; - } - } - - if (!good) { - return false; - } - - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) { - return false; - } - - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - - case 7: // Contextual positioning - return this.applyContext(table); - - case 8: // Chaining contextual positioning - return this.applyChainingContext(table); - - case 9: // Extension positioning - return this.applyLookup(table.lookupType, table.extension); - - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) { - x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - } - - if (anchor.yDeviceTable) { - y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - } - - return { x, y }; - } - - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - - for (var i = 0; i < this.glyphs.length; i++) { - this.fixCursiveAttachment(i); - } - - this.fixMarkAttachment(); - } - - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - - fixMarkAttachment() { - for (let i = 0; i < this.glyphs.length; i++) { - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - - if (this.direction === 'ltr') { - for (let k = j; k < i; k++) { - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - } else { - for (let k = j + 1; k < i + 1; k++) { - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/GSUBProcessor.js b/skills/flight-finder/node_modules/fontkit/src/opentype/GSUBProcessor.js deleted file mode 100644 index f5672d5..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/GSUBProcessor.js +++ /dev/null @@ -1,192 +0,0 @@ -import OTProcessor from './OTProcessor'; -import GlyphInfo from './GlyphInfo'; - -export default class GSUBProcessor extends OTProcessor { - applyLookup(lookupType, table) { - switch (lookupType) { - case 1: { // Single Substitution - let index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - let glyph = this.glyphIterator.cur; - switch (table.version) { - case 1: - glyph.id = (glyph.id + table.deltaGlyphID) & 0xffff; - break; - - case 2: - glyph.id = table.substitute.get(index); - break; - } - - return true; - } - - case 2: { // Multiple Substitution - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i) => { - let glyph = new GlyphInfo(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - - return false; - } - - case 3: { // Alternate Substitution - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - - return false; - } - - case 4: { // Ligature Substitution - let index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - for (let ligature of table.ligatureSets.get(index)) { - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) { - continue; - } - - let curGlyph = this.glyphIterator.cur; - - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched) { - characters.push(...this.glyphs[index].codePoints); - } - - // Create the replacement ligature glyph - let ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for (let i = 0; i < matched.length && isMarkLigature; i++) { - isMarkLigature = this.glyphs[matched[i]].isMark; - } - - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched) { - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) { - idx = matchIndex; - } else { - while (idx < matchIndex) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - } - - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) { - for (let i = idx; i < this.glyphs.length; i++) { - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else { - break; - } - } - } - - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for (let i = matched.length - 1; i >= 0; i--) { - this.glyphs.splice(matched[i], 1); - } - - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - - return false; - } - - case 5: // Contextual Substitution - return this.applyContext(table); - - case 6: // Chaining Contextual Substitution - return this.applyChainingContext(table); - - case 7: // Extension Substitution - return this.applyLookup(table.lookupType, table.extension); - - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphInfo.js b/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphInfo.js deleted file mode 100644 index 644a3a8..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphInfo.js +++ /dev/null @@ -1,57 +0,0 @@ -import {isMark} from 'unicode-properties'; -import OTProcessor from './OTProcessor'; - -export default class GlyphInfo { - constructor(font, id, codePoints = [], features) { - this._font = font; - this.codePoints = codePoints; - this.id = id; - - this.features = {}; - if (Array.isArray(features)) { - for (let i = 0; i < features.length; i++) { - let feature = features[i]; - this.features[feature] = true; - } - } else if (typeof features === 'object') { - Object.assign(this.features, features); - } - - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } - - get id() { - return this._id; - } - - set id(id) { - this._id = id; - this.substituted = true; - - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every(isMark); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - - copy() { - return new GlyphInfo(this._font, this.id, this.codePoints, this.features); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphIterator.js b/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphIterator.js deleted file mode 100644 index b22ad30..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/GlyphIterator.js +++ /dev/null @@ -1,70 +0,0 @@ -export default class GlyphIterator { - constructor(glyphs, options) { - this.glyphs = glyphs; - this.reset(options); - } - - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - - get cur() { - return this.glyphs[this.index] || null; - } - - shouldIgnore(glyph) { - return (this.flags.ignoreMarks && glyph.isMark) || - (this.flags.ignoreBaseGlyphs && glyph.isBase) || - (this.flags.ignoreLigatures && glyph.isLigature) || - (this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType); - } - - move(dir) { - this.index += dir; - while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) { - this.index += dir; - } - - if (0 > this.index || this.index >= this.glyphs.length) { - return null; - } - - return this.glyphs[this.index]; - } - - next() { - return this.move(+1); - } - - prev() { - return this.move(-1); - } - - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while (count--) { - this.move(dir); - } - - return this.glyphs[this.index]; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/OTLayoutEngine.js b/skills/flight-finder/node_modules/fontkit/src/opentype/OTLayoutEngine.js deleted file mode 100644 index 15cf362..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/OTLayoutEngine.js +++ /dev/null @@ -1,113 +0,0 @@ -import ShapingPlan from './ShapingPlan'; -import * as Shapers from './shapers'; -import GlyphInfo from './GlyphInfo'; -import GSUBProcessor from './GSUBProcessor'; -import GPOSProcessor from './GPOSProcessor'; - -export default class OTLayoutEngine { - constructor(font) { - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - - if (font.GSUB) { - this.GSUBProcessor = new GSUBProcessor(font, font.GSUB); - } - - if (font.GPOS) { - this.GPOSProcessor = new GPOSProcessor(font, font.GPOS); - } - } - - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map(glyph => new GlyphInfo(this.font, glyph.id, [...glyph.codePoints])); - - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) { - script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - } - - if (this.GSUBProcessor) { - script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - } - - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = Shapers.choose(script); - this.plan = new ShapingPlan(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - - // Assign chosen features to output glyph run - for (let key in this.plan.allFeatures) { - glyphRun.features[key] = true; - } - } - - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map(glyphInfo => this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') { - this.zeroMarkAdvances(glyphRun.positions); - } - - if (this.GPOSProcessor) { - this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - } - - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') { - this.zeroMarkAdvances(glyphRun.positions); - } - - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - - return this.GPOSProcessor && this.GPOSProcessor.features; - } - - zeroMarkAdvances(positions) { - for (let i = 0; i < this.glyphInfos.length; i++) { - if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - } - - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - - getAvailableFeatures(script, language) { - let features = []; - - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - - return features; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/OTProcessor.js b/skills/flight-finder/node_modules/fontkit/src/opentype/OTProcessor.js deleted file mode 100644 index 80d1ce6..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/OTProcessor.js +++ /dev/null @@ -1,438 +0,0 @@ -import GlyphIterator from './GlyphIterator'; -import * as Script from '../layout/Script'; - -const DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn']; - -export default class OTProcessor { - constructor(font, table) { - this.font = font; - this.table = table; - - this.script = null; - this.scriptTag = null; - - this.language = null; - this.languageTag = null; - - this.features = {}; - this.lookups = {}; - - // Setup variation substitutions - this.variationsIndex = font._variationProcessor - ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) - : -1; - - // initialize to default script + language - this.selectScript(); - - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } - - findScript(script) { - if (this.table.scriptList == null) { - return null; - } - - if (!Array.isArray(script)) { - script = [script]; - } - - for (let s of script) { - for (let entry of this.table.scriptList) { - if (entry.tag === s) { - return entry; - } - } - } - - return null; - } - - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) { - entry = this.findScript(DEFAULT_SCRIPTS); - } - - if (!entry) { - return this.scriptTag; - } - - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - - if (!direction || direction !== this.direction) { - this.direction = direction || Script.direction(script); - } - - if (language && language.length < 4) { - language += ' '.repeat(4 - language.length); - } - - if (!language || language !== this.languageTag) { - this.language = null; - - for (let lang of this.script.langSysRecords) { - if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - } - - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - - changed = true; - } - - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) { - for (let featureIndex of this.language.featureIndexes) { - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - } - - return this.scriptTag; - } - - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures) { - let feature = this.features[tag]; - if (!feature) { - continue; - } - - for (let lookupIndex of feature.lookupListIndexes) { - if (exclude && exclude.indexOf(lookupIndex) !== -1) { - continue; - } - - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - - lookups.sort((a, b) => a.index - b.index); - return lookups; - } - - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) { - return null; - } - - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions) { - if (substitution.featureIndex === featureIndex) { - return substitution.alternateFeatureTable; - } - } - - return null; - } - - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) { - return -1; - } - - let records = variations.featureVariationRecords; - for (let i = 0; i < records.length; i++) { - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) { - return i; - } - } - - return -1; - } - - variationConditionsMatch(conditions, coords) { - return conditions.every(condition => { - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new GlyphIterator(glyphs); - - for (let { feature, lookup } of lookups) { - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - - while (this.glyphIterator.index < glyphs.length) { - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - - for (let table of lookup.subTables) { - let res = this.applyLookup(lookup.lookupType, table); - if (res) { - break; - } - } - - this.glyphIterator.next(); - } - } - } - - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - - for (let lookupRecord of lookupRecords) { - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - - // Apply lookup subtables until one matches - for (let table of lookup.subTables) { - if (this.applyLookup(lookup.lookupType, table)) { - break; - } - } - } - - this.glyphIterator.reset(options, glyphIndex); - return true; - } - - coverageIndex(coverage, glyph) { - if (glyph == null) { - glyph = this.glyphIterator.cur.id; - } - - switch (coverage.version) { - case 1: - return coverage.glyphs.indexOf(glyph); - - case 2: - for (let range of coverage.rangeRecords) { - if (range.start <= glyph && glyph <= range.end) { - return range.startCoverageIndex + glyph - range.start; - } - } - - break; - } - - return -1; - } - - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - - while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) { - if (matched) { - matched.push(this.glyphIterator.index); - } - - idx++; - glyph = this.glyphIterator.next(); - } - - this.glyphIterator.index = pos; - if (idx < sequence.length) { - return false; - } - - return matched || true; - } - - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph) => component === glyph.id); - } - - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph) => { - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) { - return false; - } - - return component === glyph.id; - }, []); - } - - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph) => - this.coverageIndex(coverage, glyph.id) >= 0 - ); - } - - getClassID(glyph, classDef) { - switch (classDef.version) { - case 1: // Class array - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) { - return classDef.classValueArray[i]; - } - - break; - - case 2: - for (let range of classDef.classRangeRecord) { - if (range.start <= glyph && glyph <= range.end) { - return range.class; - } - } - - break; - } - - return 0; - } - - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph) => - classID === this.getClassID(glyph.id, classDef) - ); - } - - applyContext(table) { - let index, set; - switch (table.version) { - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - set = table.ruleSets[index]; - for (let rule of set) { - if (this.sequenceMatches(1, rule.input)) { - return this.applyLookupList(rule.lookupRecords); - } - } - - break; - - case 2: - if (this.coverageIndex(table.coverage) === -1) { - return false; - } - - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) { - return false; - } - - set = table.classSet[index]; - for (let rule of set) { - if (this.classSequenceMatches(1, rule.classes, table.classDef)) { - return this.applyLookupList(rule.lookupRecords); - } - } - - break; - - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) { - return this.applyLookupList(table.lookupRecords); - } - - break; - } - - return false; - } - - applyChainingContext(table) { - let index; - switch (table.version) { - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) { - return false; - } - - let set = table.chainRuleSets[index]; - for (let rule of set) { - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) - && this.sequenceMatches(1, rule.input) - && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) { - return this.applyLookupList(rule.lookupRecords); - } - } - - break; - - case 2: - if (this.coverageIndex(table.coverage) === -1) { - return false; - } - - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) { - return false; - } - - for (let rule of rules) { - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && - this.classSequenceMatches(1, rule.input, table.inputClassDef) && - this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) { - return this.applyLookupList(rule.lookupRecords); - } - } - - break; - - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && - this.coverageSequenceMatches(0, table.inputCoverage) && - this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) { - return this.applyLookupList(table.lookupRecords); - } - - break; - } - - return false; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/ShapingPlan.js b/skills/flight-finder/node_modules/fontkit/src/opentype/ShapingPlan.js deleted file mode 100644 index 121a793..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/ShapingPlan.js +++ /dev/null @@ -1,118 +0,0 @@ -import * as Script from '../layout/Script'; - -/** - * ShapingPlans are used by the OpenType shapers to store which - * features should by applied, and in what order to apply them. - * The features are applied in groups called stages. A feature - * can be applied globally to all glyphs, or locally to only - * specific glyphs. - * - * @private - */ -export default class ShapingPlan { - constructor(font, script, direction) { - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } - - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ - _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features) { - if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - - if (global) { - this.globalFeatures[feature] = true; - } - } - } - } - - /** - * Add features to the last stage - */ - add(arg, global = true) { - if (this.stages.length === 0) { - this.stages.push([]); - } - - if (typeof arg === 'string') { - arg = [arg]; - } - - if (Array.isArray(arg)) { - this._addFeatures(arg, global); - } else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else { - throw new Error("Unsupported argument to ShapingPlan#add"); - } - } - - /** - * Add a new stage - */ - addStage(arg, global) { - if (typeof arg === 'function') { - this.stages.push(arg, []); - } else { - this.stages.push([]); - this.add(arg, global); - } - } - - setFeatureOverrides(features) { - if (Array.isArray(features)) { - this.add(features); - } else if (typeof features === 'object') { - for (let tag in features) { - if (features[tag]) { - this.add(tag); - } else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - } - - /** - * Assigns the global features to the given glyphs - */ - assignGlobalFeatures(glyphs) { - for (let glyph of glyphs) { - for (let feature in this.globalFeatures) { - glyph.features[feature] = true; - } - } - } - - /** - * Executes the planned stages using the given OTProcessor - */ - process(processor, glyphs, positions) { - for (let stage of this.stages) { - if (typeof stage === 'function') { - if (!positions) { - stage(this.font, glyphs, this); - } - - } else if (stage.length > 0) { - processor.applyFeatures(stage, glyphs, positions); - } - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/ArabicShaper.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/ArabicShaper.js deleted file mode 100644 index fb6d20e..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/ArabicShaper.js +++ /dev/null @@ -1,123 +0,0 @@ -import DefaultShaper from './DefaultShaper'; -import {getCategory} from 'unicode-properties'; -import UnicodeTrie from 'unicode-trie'; -import { decodeBase64 } from '../../utils'; - -const trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/data.trie', 'base64'))); -const FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init']; - -const ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; - -const ISOL = 'isol'; -const FINA = 'fina'; -const FIN2 = 'fin2'; -const FIN3 = 'fin3'; -const MEDI = 'medi'; -const MED2 = 'med2'; -const INIT = 'init'; -const NONE = null; - -// Each entry is [prevAction, curAction, nextState] -const STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 6 ] ], - - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN2, 5 ], [ NONE, ISOL, 6 ] ], - - // State 2: prev was D/L in ISOL form, willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ INIT, FINA, 1 ], [ INIT, FINA, 3 ], [ INIT, FINA, 4 ], [ INIT, FINA, 6 ] ], - - // State 3: prev was D in FINA form, willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MEDI, FINA, 1 ], [ MEDI, FINA, 3 ], [ MEDI, FINA, 4 ], [ MEDI, FINA, 6 ] ], - - // State 4: prev was FINA ALAPH, not willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ MED2, ISOL, 1 ], [ MED2, ISOL, 2 ], [ MED2, FIN2, 5 ], [ MED2, ISOL, 6 ] ], - - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ ISOL, ISOL, 1 ], [ ISOL, ISOL, 2 ], [ ISOL, FIN2, 5 ], [ ISOL, ISOL, 6 ] ], - - // State 6: prev was DALATH/RISH, not willing to join. - [ [ NONE, NONE, 0 ], [ NONE, ISOL, 2 ], [ NONE, ISOL, 1 ], [ NONE, ISOL, 2 ], [ NONE, FIN3, 5 ], [ NONE, ISOL, 6 ] ] -]; - -/** - * This is a shaper for Arabic, and other cursive scripts. - * It uses data from ArabicShaping.txt in the Unicode database, - * compiled to a UnicodeTrie by generate-data.coffee. - * - * The shaping state machine was ported from Harfbuzz. - * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc - */ -export default class ArabicShaper extends DefaultShaper { - static planFeatures(plan) { - plan.add(['ccmp', 'locl']); - for (let i = 0; i < FEATURES.length; i++) { - let feature = FEATURES[i]; - plan.addStage(feature, false); - } - - plan.addStage('mset'); - } - - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - - let prev = -1; - let state = 0; - let actions = []; - - // Apply the state machine to map glyphs to features - for (let i = 0; i < glyphs.length; i++) { - let curAction, prevAction; - var glyph = glyphs[i]; - let type = getShapingClass(glyph.codePoints[0]); - if (type === ShapingClasses.Transparent) { - actions[i] = NONE; - continue; - } - - [prevAction, curAction, state] = STATE_TABLE[state][type]; - - if (prevAction !== NONE && prev !== -1) { - actions[prev] = prevAction; - } - - actions[i] = curAction; - prev = i; - } - - // Apply the chosen features to their respective glyphs - for (let index = 0; index < glyphs.length; index++) { - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) { - glyph.features[feature] = true; - } - } - } -} - -function getShapingClass(codePoint) { - let res = trie.get(codePoint); - if (res) { - return res - 1; - } - - let category = getCategory(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') { - return ShapingClasses.Transparent; - } - - return ShapingClasses.Non_Joining; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/DefaultShaper.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/DefaultShaper.js deleted file mode 100644 index e02e4d3..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/DefaultShaper.js +++ /dev/null @@ -1,72 +0,0 @@ -import {isDigit} from 'unicode-properties'; - -const VARIATION_FEATURES = ['rvrn']; -const COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk']; -const FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom']; -const HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern']; -const VERTICAL_FEATURES = ['vert']; -const DIRECTIONAL_FEATURES = { - ltr: ['ltra', 'ltrm'], - rtl: ['rtla', 'rtlm'] -}; - -export default class DefaultShaper { - static zeroMarkWidths = 'AFTER_GPOS'; - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - - static planPreprocessing(plan) { - plan.add({ - global: [...VARIATION_FEATURES, ...DIRECTIONAL_FEATURES[plan.direction]], - local: FRACTIONAL_FEATURES - }); - } - - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - - static planPostprocessing(plan, userFeatures) { - plan.add([...COMMON_FEATURES, ...HORIZONTAL_FEATURES]); - plan.setFeatureOverrides(userFeatures); - } - - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for (let i = 0; i < glyphs.length; i++) { - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { // fraction slash - let start = i; - let end = i + 1; - - // Apply numerator - while (start > 0 && isDigit(glyphs[start - 1].codePoints[0])) { - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - - // Apply denominator - while (end < glyphs.length && isDigit(glyphs[end].codePoints[0])) { - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/HangulShaper.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/HangulShaper.js deleted file mode 100644 index 789fb76..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/HangulShaper.js +++ /dev/null @@ -1,285 +0,0 @@ -import DefaultShaper from './DefaultShaper'; -import GlyphInfo from '../GlyphInfo'; - -/** - * This is a shaper for the Hangul script, used by the Korean language. - * It does the following: - * - decompose if unsupported by the font: - * -> - * -> - * -> - * - * - compose if supported by the font: - * -> - * -> - * -> - * - * - reorder tone marks (S is any valid syllable): - * -> - * - * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences. - * - * This logic is based on the following documents: - * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm - * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf - */ -export default class HangulShaper extends DefaultShaper { - static zeroMarkWidths = 'NONE'; - static planFeatures(plan) { - plan.add(['ljmo', 'vjmo', 'tjmo'], false); - } - - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while (i < glyphs.length) { - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = getType(code); - - [ action, state ] = STATE_TABLE[state][type]; - - switch (action) { - case DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) { - i = decompose(glyphs, i, plan.font); - } - break; - - case COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = compose(glyphs, i, plan.font); - break; - - case TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - reorderToneMark(glyphs, i, plan.font); - break; - - case INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = insertDottedCircle(glyphs, i, plan.font); - break; - } - - i++; - } - } -} - -const HANGUL_BASE = 0xac00; -const HANGUL_END = 0xd7a4; -const HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1; -const L_BASE = 0x1100; // lead -const V_BASE = 0x1161; // vowel -const T_BASE = 0x11a7; // trail -const L_COUNT = 19; -const V_COUNT = 21; -const T_COUNT = 28; -const L_END = L_BASE + L_COUNT - 1; -const V_END = V_BASE + V_COUNT - 1; -const T_END = T_BASE + T_COUNT - 1; -const DOTTED_CIRCLE = 0x25cc; - -const isL = code => 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const isV = code => 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const isT = code => 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const isTone = code => 0x302e <= code && code <= 0x302f; -const isLVT = code => HANGUL_BASE <= code && code <= HANGUL_END; -const isLV = code => (code - HANGUL_BASE) < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0; -const isCombiningL = code => L_BASE <= code && code <= L_END; -const isCombiningV = code => V_BASE <= code && code <= V_END; -const isCombiningT = code => T_BASE + 1 && 1 <= code && code <= T_END; - -// Character categories -const X = 0; // Other character -const L = 1; // Leading consonant -const V = 2; // Medial vowel -const T = 3; // Trailing consonant -const LV = 4; // Composed syllable -const LVT = 5; // Composed syllable -const M = 6; // Tone mark - -// This function classifies a character using the above categories. -function getType(code) { - if (isL(code)) { return L; } - if (isV(code)) { return V; } - if (isT(code)) { return T; } - if (isLV(code)) { return LV; } - if (isLVT(code)) { return LVT; } - if (isTone(code)) { return M; } - return X; -} - -// State machine actions -const NO_ACTION = 0; -const DECOMPOSE = 1; -const COMPOSE = 2; -const TONE_MARK = 4; -const INVALID = 5; - -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ], - - // State 1: - [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ COMPOSE, 2 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ INVALID, 0 ] ], - - // State 2: or - [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ COMPOSE, 3 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ], - - // State 3: or - [ [ NO_ACTION, 0 ], [ NO_ACTION, 1 ], [ NO_ACTION, 0 ], [ NO_ACTION, 0 ], [ DECOMPOSE, 2 ], [ DECOMPOSE, 3 ], [ TONE_MARK, 0 ] ] -]; - -function getGlyph(font, code, features) { - return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features); -} - -function decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - - let s = code - HANGUL_BASE; - let t = T_BASE + s % T_COUNT; - s = s / T_COUNT | 0; - let l = L_BASE + s / V_COUNT | 0; - let v = V_BASE + s % V_COUNT; - - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || - !font.hasGlyphForCodePoint(v) || - (t !== T_BASE && !font.hasGlyphForCodePoint(t))) { - return i; - } - - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - - let vjmo = getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - - let insert = [ ljmo, vjmo ]; - - if (t > T_BASE) { - let tjmo = getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} - -function compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = getType(code); - - let prev = glyphs[i - 1].codePoints[0]; - let prevType = getType(prev); - - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === LV && type === T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - - // Make sure L and V are combining characters - if (isCombiningL(l) && isCombiningV(v)) { - lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT; - } - } - - let t = (tjmo && tjmo.codePoints[0]) || T_BASE; - if ((lv != null) && (t === T_BASE || isCombiningT(t))) { - let s = lv + (t - T_BASE); - - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === V ? 3 : 2; - glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) { ljmo.features.ljmo = true; } - if (vjmo) { vjmo.features.vjmo = true; } - if (tjmo) { tjmo.features.tjmo = true; } - - if (prevType === LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - decompose(glyphs, i - 1, font); - return i + 1; - } - - return i; -} - -function getLength(code) { - switch (getType(code)) { - case LV: - case LVT: - return 1; - case V: - return 2; - case T: - return 3; - } -} - -function reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) { return; } - - let prev = glyphs[i - 1].codePoints[0]; - let len = getLength(prev); - - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} - -function insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - - if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) { - let dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); - - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - - return i; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/IndicShaper.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/IndicShaper.js deleted file mode 100644 index 104198c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/IndicShaper.js +++ /dev/null @@ -1,911 +0,0 @@ -import DefaultShaper from './DefaultShaper'; -import StateMachine from 'dfa'; -import UnicodeTrie from 'unicode-trie'; -import {getCategory} from 'unicode-properties'; -import * as Script from '../../layout/Script'; -import GlyphInfo from '../GlyphInfo'; -import indicMachine from './indic.json'; -import useData from './use.json'; -import { - CATEGORIES, - POSITIONS, - CONSONANT_FLAGS, - JOINER_FLAGS, - HALANT_OR_COENG_FLAGS, INDIC_CONFIGS, - INDIC_DECOMPOSITIONS -} from './indic-data'; -import { decodeBase64 } from '../../utils'; - -const {decompositions} = useData; -const trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/indic.trie', 'base64'))); -const stateMachine = new StateMachine(indicMachine); - -/** - * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc. - * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc - */ -export default class IndicShaper extends DefaultShaper { - static zeroMarkWidths = 'NONE'; - static planFeatures(plan) { - plan.addStage(setupSyllables); - - plan.addStage(['locl', 'ccmp']); - - plan.addStage(initialReordering); - - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - - plan.addStage(finalReordering); - - plan.addStage({ - local: ['init'], - global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig'] - }); - - // Setup the indic config for the selected script - plan.unicodeScript = Script.fromOpenType(plan.script); - plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - - // TODO: turn off kern (Khmer) and liga features. - } - - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for (let i = glyphs.length - 1; i >= 0; i--) { - let codepoint = glyphs[i].codePoints[0]; - let d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint]; - if (d) { - let decomposed = d.map(c => { - let g = plan.font.glyphForCodePoint(c); - return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features); - }); - - glyphs.splice(i, 1, ...decomposed); - } - } - } -} - -function indicCategory(glyph) { - return trie.get(glyph.codePoints[0]) >> 8; -} - -function indicPosition(glyph) { - return 1 << (trie.get(glyph.codePoints[0]) & 0xff); -} - -class IndicInfo { - constructor(category, position, syllableType, syllable) { - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} - -function setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of stateMachine.match(glyphs.map(indicCategory))) { - if (start > last) { - ++syllable; - for (let i = last; i < start; i++) { - glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable); - } - } - - ++syllable; - - // Create shaper info - for (let i = start; i <= end; i++) { - glyphs[i].shaperInfo = new IndicInfo( - 1 << indicCategory(glyphs[i]), - indicPosition(glyphs[i]), - tags[0], - syllable - ); - } - - last = end + 1; - } - - if (last < glyphs.length) { - ++syllable; - for (let i = last; i < glyphs.length; i++) { - glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable); - } - } -} - -function isConsonant(glyph) { - return glyph.shaperInfo.category & CONSONANT_FLAGS; -} - -function isJoiner(glyph) { - return glyph.shaperInfo.category & JOINER_FLAGS; -} - -function isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS; -} - -function wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs) { - glyph.features = {[feature]: true}; - } - - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([feature], glyphs); - - return glyphs.length === 1; -} - -function consonantPosition(font, consonant, virama) { - let glyphs = [virama, consonant, virama]; - if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) { - return POSITIONS.Below_C; - } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) { - return POSITIONS.Post_C; - } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) { - return POSITIONS.Post_C; - } - - return POSITIONS.Base_C; -} - -function initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new GlyphInfo(font, virama, [indicConfig.virama]); - for (let i = 0; i < glyphs.length; i++) { - if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) { - glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info); - } - } - } - - for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) { - let {category, syllableType} = glyphs[start].shaperInfo; - - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') { - continue; - } - - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new GlyphInfo(font, dottedCircle, [0x25cc]); - g.shaperInfo = new IndicInfo( - 1 << indicCategory(g), - indicPosition(g), - glyphs[start].shaperInfo.syllableType, - glyphs[start].shaperInfo.syllable - ); - - // Insert after possible Repha. - let i = start; - while (i < end && glyphs[i].shaperInfo.category === CATEGORIES.Repha) { - i++; - } - - glyphs.splice(i++, 0, g); - end++; - } - - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - - let base = end; - let limit = start; - let hasReph = false; - - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && - features.rphf && - start + 3 <= end && ( - (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2])) || - (indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ) - ) - ) { - // See if it matches the 'rphf' feature. - let g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()]; - if (wouldSubstitute(g.slice(0, 2), 'rphf') || (indicConfig.rephMode === 'Explicit' && wouldSubstitute(g, 'rphf'))) { - limit += 2; - while (limit < end && isJoiner(glyphs[limit])) { - limit++; - } - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) { - limit++; - while (limit < end && isJoiner(glyphs[limit])) { - limit++; - } - base = start; - hasReph = true; - } - - switch (indicConfig.basePos) { - case 'Last': { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - - do { - let info = glyphs[--i].shaperInfo; - - // until a consonant is found - if (isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== POSITIONS.Below_C && (info.position !== POSITIONS.Post_C || seenBelow)) { - base = i; - break; - } - - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === POSITIONS.Below_C) { - seenBelow = true; - } - - base = i; - } else if (start < i && info.category === CATEGORIES.ZWJ && glyphs[i - 1].shaperInfo.category === CATEGORIES.H) { - // A ZWJ after a Halant stops the base search, and requests an explicit - // half form. - // A ZWJ before a Halant, requests a subjoined form instead, and hence - // search continues. This is particularly important for Bengali - // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya. - break; - } - } while (i > limit); - break; - } - - case 'First': { - // The first consonant is always the base. - base = start; - - // Mark all subsequent consonants as below. - for (let i = base + 1; i < end; i++) { - if (isConsonant(glyphs[i])) { - glyphs[i].shaperInfo.position = POSITIONS.Below_C; - } - } - } - } - - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) { - hasReph = false; - } - - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - - // Reorder characters - - for (let i = start; i < base; i++) { - let info = glyphs[i].shaperInfo; - info.position = Math.min(POSITIONS.Pre_C, info.position); - } - - if (base < end) { - glyphs[base].shaperInfo.position = POSITIONS.Base_C; - } - - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for (let i = base + 1; i < end; i++) { - if (glyphs[i].shaperInfo.category === CATEGORIES.M) { - for (let j = i + 1; j < end; j++) { - if (isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = POSITIONS.Final_C; - break; - } - } - break; - } - } - - // Handle beginning Ra - if (hasReph) { - glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph; - } - - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for (let i = base + 1; i < end; i++) { - if (glyphs[i].shaperInfo.category === CATEGORIES.H) { - let j; - for (j = end - 1; j > i; j--) { - if (isConsonant(glyphs[j]) || (disallowDoubleHalants && glyphs[j].shaperInfo.category === CATEGORIES.H)) { - break; - } - } - - if (glyphs[j].shaperInfo.category !== CATEGORIES.H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - - break; - } - } - } - - // Attach misc marks to previous char to move with them. - let lastPos = POSITIONS.Start; - for (let i = start; i < end; i++) { - let info = glyphs[i].shaperInfo; - if (info.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & info.category)) { - info.position = lastPos; - if (info.category === CATEGORIES.H && info.position === POSITIONS.Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for (let j = i; j > start; j--) { - if (glyphs[j - 1].shaperInfo.position !== POSITIONS.Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } - } else if (info.position !== POSITIONS.SMVD) { - lastPos = info.position; - } - } - - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for (let i = base + 1; i < end; i++) { - if (isConsonant(glyphs[i])) { - for (let j = last + 1; j < i; j++) { - if (glyphs[j].shaperInfo.position < POSITIONS.SMVD) { - glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - } - } - last = i; - } else if (glyphs[i].shaperInfo.category === CATEGORIES.M) { - last = i; - } - } - - let arr = glyphs.slice(start, end); - arr.sort((a, b) => a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - - // Find base again - for (let i = start; i < end; i++) { - if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) { - base = i; - break; - } - } - - // Setup features now - - // Reph - for (let i = start; i < end && glyphs[i].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; i++) { - glyphs[i].features.rphf = true; - } - - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for (let i = start; i < base; i++) { - glyphs[i].features.half = true; - if (blwf) { - glyphs[i].features.blwf = true; - } - } - - // Post-base - for (let i = base + 1; i < end; i++) { - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for (let i = start; i + 1 < base; i++) { - if (glyphs[i].shaperInfo.category === CATEGORIES.Ra && - glyphs[i + 1].shaperInfo.category === CATEGORIES.H && - (i + 1 === base || glyphs[i + 2].shaperInfo.category === CATEGORIES.ZWJ) - ) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - } - - let prefLen = 2; - if (features.pref && base + prefLen < end) { - // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for (let i = base + 1; i + prefLen - 1 < end; i++) { - let g = [glyphs[i].copy(), glyphs[i + 1].copy()]; - if (wouldSubstitute(g, 'pref')) { - for (let j = 0; j < prefLen; j++) { - glyphs[i++].features.pref = true; - } - - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) { - for (; i < end; i++) { - glyphs[i].features.cfar = true; - } - } - - break; - } - } - } - - // Apply ZWJ/ZWNJ effects - for (let i = start + 1; i < end; i++) { - if (isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === CATEGORIES.ZWNJ; - let j = i; - - do { - j--; - - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - - // A ZWNJ disables HALF. - if (nonJoiner) { - delete glyphs[j].features.half; - } - } while (j > start && !isConsonant(glyphs[j])); - } - } - } -} - -function finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - - for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) { - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - - let tryPref = !!features.pref; - - // Find base again - let base = start; - for (; base < end; base++) { - if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) { - if (tryPref && base + 1 < end) { - for (let i = base + 1; i < end; i++) { - if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while (base < end && isHalantOrCoeng(glyphs[base])) { - base++; - } - glyphs[base].shaperInfo.position = POSITIONS.BASE_C; - tryPref = false; - } - break; - } - } - } - - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') { - for (let i = base + 1; i < end; i++) { - while (i < end && isJoiner(glyphs[i])) { - i++; - } - - if (i === end || !isHalantOrCoeng(glyphs[i])) { - break; - } - - i++; // Skip halant. - while (i < end && isJoiner(glyphs[i])) { - i++; - } - - if (i < end && isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === POSITIONS.Below_C) { - base = i; - glyphs[base].shaperInfo.position = POSITIONS.Base_C; - } - } - } - - if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) { - base--; - } - break; - } - } - - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) { - base--; - } - - if (base < end) { - while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) { - base--; - } - } - - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - - if (start + 1 < end && start < base) { // Otherwise there can't be any pre-base matra characters. - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) { - newPos--; - } - - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) { - // If ZWJ or ZWNJ follow this halant, position is moved after it. - if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) { - newPos++; - } - } else { - newPos = start; // No move. - } - } - - if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) { - // Now go see if there's actually any matras... - for (let i = newPos; i > start; i--) { - if (glyphs[i - 1].shaperInfo.position === POSITIONS.Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) { // Shouldn't actually happen. - base--; - } - - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - - newPos--; - } - } - } - } - - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && - glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && - (glyphs[start].shaperInfo.category === CATEGORIES.Repha) !== (glyphs[start].isLigated && !glyphs[start].isMultiplied) - ) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== POSITIONS.After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) { - newRephPos++; - } - - if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) { - newRephPos++; - } - - found = true; - } - - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === POSITIONS.After_Main) { - newRephPos = base; - while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) { - newRephPos++; - } - - found = newRephPos < end; - } - - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === POSITIONS.After_Sub) { - newRephPos = base; - while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) { - newRephPos++; - } - - found = newRephPos < end; - } - } - - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) { - newRephPos++; - } - - if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) { - newRephPos++; - } - - found = true; - } - } - - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) { - newRephPos--; - } - - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if (isHalantOrCoeng(glyphs[newRephPos])) { - for (let i = base + 1; i < newRephPos; i++) { - if (glyphs[i].shaperInfo.category === CATEGORIES.M) { - newRephPos--; - } - } - } - } - - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - - if (start < base && base <= newRephPos) { - base--; - } - } - - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for (let i = base + 1; i < end; i++) { - if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while (newPos > start && !(glyphs[newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) { - newPos--; - } - - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === CATEGORIES.M) { - let oldPos = i; - for (let j = base + 1; j < oldPos; j++) { - if (glyphs[j].shaperInfo.category === CATEGORIES.M) { - newPos--; - break; - } - } - } - } - - if (newPos > start && isHalantOrCoeng(glyphs[newPos - 1])) { - // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - if (newPos < end && isJoiner(glyphs[newPos])) { - newPos++; - } - } - - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - - if (newPos <= base && base < oldPos) { - base++; - } - } - - break; - } - } - } - - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(getCategory(glyphs[start - 1].codePoints[0])))) { - glyphs[start].features.init = true; - } - } -} - -function nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/UniversalShaper.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/UniversalShaper.js deleted file mode 100644 index 3057dd1..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/UniversalShaper.js +++ /dev/null @@ -1,185 +0,0 @@ -import DefaultShaper from './DefaultShaper'; -import StateMachine from 'dfa'; -import UnicodeTrie from 'unicode-trie'; -import GlyphInfo from '../GlyphInfo'; -import useData from './use.json'; -import { decodeBase64 } from '../../utils'; - -const {categories, decompositions} = useData; -const trie = new UnicodeTrie(decodeBase64(require('fs').readFileSync(__dirname + '/use.trie', 'base64'))); -const stateMachine = new StateMachine(useData); - -/** - * This shaper is an implementation of the Universal Shaping Engine, which - * uses Unicode data to shape a number of scripts without a dedicated shaping engine. - * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm. - */ -export default class UniversalShaper extends DefaultShaper { - static zeroMarkWidths = 'BEFORE_GPOS'; - static planFeatures(plan) { - plan.addStage(setupSyllables); - - // Default glyph pre-processing group - plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); - - // Reordering group - plan.addStage(clearSubstitutionFlags); - plan.addStage(['rphf'], false); - plan.addStage(recordRphf); - plan.addStage(clearSubstitutionFlags); - plan.addStage(['pref']); - plan.addStage(recordPref); - - // Orthographic unit shaping group - plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']); - plan.addStage(reorder); - - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - - // Standard topographic presentation and positional feature application - plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']); - } - - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for (let i = glyphs.length - 1; i >= 0; i--) { - let codepoint = glyphs[i].codePoints[0]; - if (decompositions[codepoint]) { - let decomposed = decompositions[codepoint].map(c => { - let g = plan.font.glyphForCodePoint(c); - return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features); - }); - - glyphs.splice(i, 1, ...decomposed); - } - } - } -} - -function useCategory(glyph) { - return trie.get(glyph.codePoints[0]); -} - -class USEInfo { - constructor(category, syllableType, syllable) { - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} - -function setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of stateMachine.match(glyphs.map(useCategory))) { - ++syllable; - - // Create shaper info - for (let i = start; i <= end; i++) { - glyphs[i].shaperInfo = new USEInfo(categories[useCategory(glyphs[i])], tags[0], syllable); - } - - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for (let i = start; i < start + limit; i++) { - glyphs[i].features.rphf = true; - } - } -} - -function clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs) { - glyph.substituted = false; - } -} - -function recordRphf(font, glyphs) { - for (let glyph of glyphs) { - if (glyph.substituted && glyph.features.rphf) { - // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; - } - } -} - -function recordPref(font, glyphs) { - for (let glyph of glyphs) { - if (glyph.substituted) { - // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; - } - } -} - -function reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - - for (let start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) { - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') { - continue; - } - - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new GlyphInfo(font, dottedCircle, [0x25cc]); - g.shaperInfo = info; - - // Insert after possible Repha. - for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - - // Move things forward. - if (info.category === 'R' && end - start > 1) { - // Got a repha. Reorder it to after first base, before first halant. - for (i = start + 1; i < end; i++) { - info = glyphs[i].shaperInfo; - if (isBase(info) || isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if (isHalant(glyphs[i])) { - i--; - } - - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - } - - // Move things back. - for (i = start, j = end; i < end; i++) { - info = glyphs[i].shaperInfo; - if (isBase(info) || isHalant(glyphs[i])) { - // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = isHalant(glyphs[i]) ? i + 1 : i; - } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) { - glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } - } -} - -function nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - -function isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} - -function isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/data.trie b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/data.trie deleted file mode 100644 index 14e3519..0000000 Binary files a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/data.trie and /dev/null differ diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-indic.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-indic.js deleted file mode 100644 index 7cd3989..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-indic.js +++ /dev/null @@ -1,208 +0,0 @@ -import codepoints from 'codepoints'; -import fs from 'fs'; -import UnicodeTrieBuilder from 'unicode-trie/builder.js'; -import dfa from 'dfa/compile.js'; -import { CATEGORIES, POSITIONS, CONSONANT_FLAGS } from './indic-data.js'; - -const compile = dfa.default; - -const CATEGORY_MAP = { - Avagraha: 'Symbol', - Bindu: 'SM', - Brahmi_Joining_Number: 'Placeholder', - Cantillation_Mark: 'A', - Consonant: 'C', - Consonant_Dead: 'C', - Consonant_Final: 'CM', - Consonant_Head_Letter: 'C', - Consonant_Killer: 'M', - Consonant_Medial: 'CM', - Consonant_Placeholder: 'Placeholder', - Consonant_Preceding_Repha: 'Repha', - Consonant_Prefixed: 'X', - Consonant_Subjoined: 'CM', - Consonant_Succeeding_Repha: 'N', - Consonant_With_Stacker: 'Repha', - Gemination_Mark: 'SM', - Invisible_Stacker: 'Coeng', - Joiner: 'ZWJ', - Modifying_Letter: 'X', - Non_Joiner: 'ZWNJ', - Nukta: 'N', - Number: 'Placeholder', - Number_Joiner: 'Placeholder', - Pure_Killer: 'M', - Register_Shifter: 'RS', - Syllable_Modifier: 'M', - Tone_Letter: 'X', - Tone_Mark: 'N', - Virama: 'H', - Visarga: 'SM', - Vowel: 'V', - Vowel_Dependent: 'M', - Vowel_Independent: 'V' -}; - -const OVERRIDES = { - 0x0953: 'SM', - 0x0954: 'SM', - 0x0A72: 'C', - 0x0A73: 'C', - 0x1CF5: 'C', - 0x1CF6: 'C', - 0x1CE2: 'A', - 0x1CE3: 'A', - 0x1CE4: 'A', - 0x1CE5: 'A', - 0x1CE6: 'A', - 0x1CE7: 'A', - 0x1CE8: 'A', - 0x1CED: 'A', - 0xA8F2: 'Symbol', - 0xA8F3: 'Symbol', - 0xA8F4: 'Symbol', - 0xA8F5: 'Symbol', - 0xA8F6: 'Symbol', - 0xA8F7: 'Symbol', - 0x1CE9: 'Symbol', - 0x1CEA: 'Symbol', - 0x1CEB: 'Symbol', - 0x1CEC: 'Symbol', - 0x1CEE: 'Symbol', - 0x1CEF: 'Symbol', - 0x1CF0: 'Symbol', - 0x1CF1: 'Symbol', - 0x17C6: 'N', - 0x2010: 'Placeholder', - 0x2011: 'Placeholder', - 0x25CC: 'Dotted_Circle', - - // Ra - 0x0930: 'Ra', // Devanagari - 0x09B0: 'Ra', // Bengali - 0x09F0: 'Ra', // Bengali - 0x0A30: 'Ra', // Gurmukhi - No Reph - 0x0AB0: 'Ra', // Gujarati - 0x0B30: 'Ra', // Oriya - 0x0BB0: 'Ra', // Tamil - No Reph - 0x0C30: 'Ra', // Telugu - Reph formed only with ZWJ - 0x0CB0: 'Ra', // Kannada - 0x0D30: 'Ra', // Malayalam - No Reph, Logical Repha - 0x0DBB: 'Ra', // Sinhala - Reph formed only with ZWJ - 0x179A: 'Ra', // Khmer - No Reph, Visual Repha -}; - -const POSITION_MAP = { - Left: 'Pre_C', - Top: 'Above_C', - Bottom: 'Below_C', - Right: 'Post_C', - - // These should resolve to the position of the last part of the split sequence. - Bottom_And_Right: 'Post_C', - Left_And_Right: 'Post_C', - Top_And_Bottom: 'Below_C', - Top_And_Bottom_And_Right: 'Post_C', - Top_And_Left: 'Above_C', - Top_And_Left_And_Right: 'Post_C', - Top_And_Right: 'Post_C', - - Overstruck: 'After_Main', - Visual_Order_Left: 'Pre_M' -}; - -function matraPosition(c, pos) { - switch (pos) { - case 'Pre_C': - return 'Pre_M'; - - case 'Post_C': - switch (c.block) { - case 'Devanagari': return 'After_Sub'; - case 'Bengali': return 'After_Post'; - case 'Gurmukhi': return 'After_Post'; - case 'Gujarati': return 'After_Post'; - case 'Oriya': return 'After_Post'; - case 'Tamil': return 'After_Post'; - case 'Telugu': return c.code <= 0x0C42 ? 'Before_Sub' : 'After_Sub'; - case 'Kannada': return c.code < 0x0CC3 || c.code > 0xCD6 ? 'Before_Sub' : 'After_Sub'; - case 'Malayalam': return 'After_Post'; - case 'Sinhala': return 'After_Sub'; - case 'Khmer': return 'After_Post'; - default: return 'After_Sub'; - } - - case 'Above_C': - switch (c.block) { - case 'Devanagari': return 'After_Sub'; - case 'Gurmukhi': return 'After_Post'; // Deviate from spec - case 'Gujarati': return 'After_Sub'; - case 'Oriya': return 'After_Main'; - case 'Tamil': return 'After_Sub'; - case 'Telugu': return 'Before_Sub'; - case 'Kannada': return 'Before_Sub'; - case 'Sinhala': return 'After_Sub'; - case 'Khmer': return 'After_Post'; - default: return 'After_Sub'; - } - - case 'Below_C': - switch (c.block) { - case 'Devanagari': return 'After_Sub'; - case 'Bengali': return 'After_Sub'; - case 'Gurmukhi': return 'After_Post'; - case 'Gujarati': return 'After_Post'; - case 'Oriya': return 'After_Sub'; - case 'Tamil': return 'After_Post'; - case 'Telugu': return 'Before_Sub'; - case 'Kannada': return 'Before_Sub'; - case 'Malayalam': return 'After_Post'; - case 'Sinhala': return 'After_Sub'; - case 'Khmer': return 'After_Post'; - default: return 'After_Sub'; - } - - default: - return pos; - } -} - -function getPosition(codepoint, category) { - let position = POSITION_MAP[codepoint.indicPositionalCategory] || 'End'; - - if (CATEGORIES[category] & CONSONANT_FLAGS) { - position = 'Base_C'; - } else if (category === 'M') { - position = matraPosition(codepoint, position); - } else if (category === 'SM' || category === 'VD' || category === 'A' || category === 'Symbol') { - position = 'SMVD'; - } - - // Oriya Bindu is Before_Sub in the spec. - if (codepoint.code === 0x0B01) { - position = 'Before_Sub'; - } - - return Math.log2(POSITIONS[position]); -} - -let symbols = {}; -for (let c in CATEGORIES) { - symbols[c] = Math.log2(CATEGORIES[c]); -} - -let trie = new UnicodeTrieBuilder; -for (let i = 0; i < codepoints.length; i++) { - let codepoint = codepoints[i]; - if (codepoint) { - let category = OVERRIDES[codepoint.code] || CATEGORY_MAP[codepoint.indicSyllabicCategory] || 'X'; - let position = getPosition(codepoint, category); - - trie.set(codepoint.code, (symbols[category] << 8) | position); - } -} - -fs.writeFileSync(new URL('indic.trie', import.meta.url), trie.toBuffer()); - -let stateMachine = compile(fs.readFileSync(new URL('indic.machine', import.meta.url), 'utf8'), symbols); -fs.writeFileSync(new URL('indic.json', import.meta.url), JSON.stringify(stateMachine)); diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-use.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-use.js deleted file mode 100644 index cb7eda5..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/gen-use.js +++ /dev/null @@ -1,287 +0,0 @@ -import codepoints from 'codepoints'; -import fs from 'fs'; -import UnicodeTrieBuilder from 'unicode-trie/builder.js'; -import dfa from 'dfa/compile.js'; - -const compile = dfa.default; - -const CATEGORIES = { - B: [ - {UISC: 'Number'}, - {UISC: 'Avagraha', UGC: 'Lo'}, - {UISC: 'Bindu', UGC: 'Lo'}, - {UISC: 'Consonant'}, - {UISC: 'Consonant_Final', UGC: 'Lo'}, - {UISC: 'Consonant_Head_Letter'}, - {UISC: 'Consonant_Medial', UGC: 'Lo'}, - {UISC: 'Consonant_Subjoined', UGC: 'Lo'}, - {UISC: 'Tone_Letter'}, - {UISC: 'Vowel', UGC: 'Lo'}, - {UISC: 'Vowel_Independent'}, - {UISC: 'Vowel_Dependent', UGC: 'Lo'} - ], - CGJ: [0x034f], - CM: [ - 'Nukta', - 'Gemination_Mark', - 'Consonant_Killer' - ], - CS: [ - 'Consonant_With_Stacker' - ], - F: [ - {UISC: 'Consonant_Final', UGC: {not: 'Lo'}}, - {UISC: 'Consonant_Succeeding_Repha'} - ], - FM: [ - 'Syllable_Modifier' - ], - GB: [ - 'Consonant_Placeholder', - 0x2015, - 0x2022, - 0x25fb, - 0x25fc, - 0x25fd, - 0x25fe - ], - H: [ - 'Virama', - 'Invisible_Stacker' - ], - HN: [ - 'Number_Joiner' - ], - IND: [ - 'Consonant_Dead', - 'Modifying_Letter', - {UGC: 'Po', U: {not: [0x104e, 0x2022]}} - ], - M: [ - {UISC: 'Consonant_Medial', UGC: {not: 'Lo'}} - ], - N: [ - 'Brahmi_Joining_Number' - ], - R: [ - 'Consonant_Preceding_Repha', - 'Consonant_Prefixed' - ], - Rsv: [ - {UGC: 'Cn'} // TODO - ], - S: [ - {UGC: 'So', U: {not: 0x25cc}}, - {UGC: 'Sc'} - ], - SM: [ - 0x1b6b, - 0x1b6c, - 0x1b6d, - 0x1b6e, - 0x1b6f, - 0x1b70, - 0x1b71, - 0x1b72, - 0x1b73 - ], - SUB: [ - {UISC: 'Consonant_Subjoined', UGC: {not: 'Lo'}} - ], - V: [ - {UISC: 'Vowel', UGC: {not: 'Lo'}}, - {UISC: 'Vowel_Dependent', UGC: {not: 'Lo'}}, - {UISC: 'Pure_Killer'} - ], - VM: [ - {UISC: 'Bindu', UGC: {not: 'Lo'}}, - 'Tone_Mark', - 'Cantillation_Mark', - 'Register_Shifter', - 'Visarga' - ], - VS: [ - 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07, - 0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f - ], - WJ: [0x2060], - ZWJ: [ - 'Joiner' - ], - ZWNJ: [ - 'Non_Joiner' - ], - O: [ - 'Other' - ] -}; - -const USE_POSITIONS = { - F: { - Abv: ['Top'], - Blw: ['Bottom'], - Pst: ['Right'], - }, - M: { - Abv: ['Top'], - Blw: ['Bottom'], - Pst: ['Right'], - Pre: ['Left'], - }, - CM: { - Abv: ['Top'], - Blw: ['Bottom'], - }, - V: { - Abv: ['Top', 'Top_And_Bottom', 'Top_And_Bottom_And_Right', 'Top_And_Right'], - Blw: ['Bottom', 'Overstruck', 'Bottom_And_Right'], - Pst: ['Right'], - Pre: ['Left', 'Top_And_Left', 'Top_And_Left_And_Right', 'Left_And_Right'], - }, - VM: { - Abv: ['Top'], - Blw: ['Bottom', 'Overstruck'], - Pst: ['Right'], - Pre: ['Left'], - }, - SM: { - Abv: ['Top'], - Blw: ['Bottom'], - } -}; - -const UISC_OVERRIDE = { - 0x17dd: 'Vowel_Dependent', - 0x1ce2: 'Cantillation_Mark', - 0x1ce3: 'Cantillation_Mark', - 0x1ce4: 'Cantillation_Mark', - 0x1ce5: 'Cantillation_Mark', - 0x1ce6: 'Cantillation_Mark', - 0x1ce7: 'Cantillation_Mark', - 0x1ce8: 'Cantillation_Mark', - 0x1ced: 'Tone_Mark' -}; - -const UIPC_OVERRIDE = { - 0x1b6c: 'Bottom', - 0x953: 'Not_Applicable', - 0x954: 'Not_Applicable', - 0x103c: 'Left', - 0xa926: 'Top', - 0xa927: 'Top', - 0xa928: 'Top', - 0xa929: 'Top', - 0xa92a: 'Top', - 0x111ca: 'Bottom', - 0x11300: 'Top', - 0x1133c: 'Bottom', - 0x1171e: 'Left', - 0x1cf2: 'Right', - 0x1cf3: 'Right', - 0x1cf8: 'Top', - 0x1cf9: 'Top' -}; - -function check(pattern, value) { - if (typeof pattern === 'object' && pattern.not) { - if (Array.isArray(pattern.not)) { - return pattern.not.indexOf(value) === -1; - } else { - return value !== pattern.not; - } - } - - return value === pattern; -} - -function matches(pattern, code) { - if (typeof pattern === 'number') { - pattern = {U: pattern}; - } else if (typeof pattern === 'string') { - pattern = {UISC: pattern}; - } - - for (let key in pattern) { - if (!check(pattern[key], code[key])) { - return false; - } - } - - return true; -} - -function getUISC(code) { - return UISC_OVERRIDE[code.code] || code.indicSyllabicCategory || 'Other'; -} - -function getUIPC(code) { - return UIPC_OVERRIDE[code.code] || code.indicPositionalCategory; -} - -function getPositionalCategory(code, USE) { - let UIPC = getUIPC(code); - let pos = USE_POSITIONS[USE]; - if (pos) { - for (let key in pos) { - if (pos[key].indexOf(UIPC) !== -1) { - return USE + key; - } - } - } - - return USE; -} - -function getCategory(code) { - for (let category in CATEGORIES) { - for (let pattern of CATEGORIES[category]) { - if (matches(pattern, {UISC: getUISC(code), UGC: code.category, U: code.code})) { - return getPositionalCategory(code, category); - } - } - } - - return null; -} - -let trie = new UnicodeTrieBuilder; -let symbols = {}; -let numSymbols = 0; -let decompositions = {}; -for (let i = 0; i < codepoints.length; i++) { - let codepoint = codepoints[i]; - if (codepoint) { - let category = getCategory(codepoint); - if (!(category in symbols)) { - symbols[category] = numSymbols++; - } - - trie.set(codepoint.code, symbols[category]); - - if (codepoint.indicSyllabicCategory === 'Vowel_Dependent' && codepoint.decomposition.length > 0) { - decompositions[codepoint.code] = decompose(codepoint.code); - } - } -} - -function decompose(code) { - let decomposition = []; - let codepoint = codepoints[code]; - for (let c of codepoint.decomposition) { - let codes = decompose(c); - codes = codes.length > 0 ? codes : [c]; - decomposition.push(...codes); - } - - return decomposition; -} - -fs.writeFileSync(new URL('use.trie', import.meta.url), trie.toBuffer()); - -let stateMachine = compile(fs.readFileSync(new URL('use.machine', import.meta.url), 'utf8'), symbols); -let json = Object.assign({ - categories: Object.keys(symbols), - decompositions: decompositions -}, stateMachine); - -fs.writeFileSync(new URL('use.json', import.meta.url), JSON.stringify(json)); diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/generate-data.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/generate-data.js deleted file mode 100644 index e8ad55b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/generate-data.js +++ /dev/null @@ -1,33 +0,0 @@ -// -// This script generates a UnicodeTrie containing shaping data derived -// from Unicode properties (currently just for the Arabic shaper). -// -import codepoints from 'codepoints'; -import fs from 'fs'; -import UnicodeTrieBuilder from 'unicode-trie/builder.js'; - -let ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; - -let trie = new UnicodeTrieBuilder; -for (let i = 0; i < codepoints.length; i++) { - let codepoint = codepoints[i]; - if (codepoint) { - if (codepoint.joiningGroup === 'ALAPH' || codepoint.joiningGroup === 'DALATH RISH') { - trie.set(codepoint.code, ShapingClasses[codepoint.joiningGroup] + 1); - - } else if (codepoint.joiningType) { - trie.set(codepoint.code, ShapingClasses[codepoint.joiningType] + 1); - } - } -} - -fs.writeFileSync(new URL('data.trie', import.meta.url), trie.toBuffer()); diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/index.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/index.js deleted file mode 100644 index b22ebdd..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/index.js +++ /dev/null @@ -1,102 +0,0 @@ -import DefaultShaper from './DefaultShaper'; -import ArabicShaper from './ArabicShaper'; -import HangulShaper from './HangulShaper'; -import IndicShaper from './IndicShaper'; -import UniversalShaper from './UniversalShaper'; - -const SHAPERS = { - arab: ArabicShaper, // Arabic - mong: ArabicShaper, // Mongolian - syrc: ArabicShaper, // Syriac - 'nko ': ArabicShaper, // N'Ko - phag: ArabicShaper, // Phags Pa - mand: ArabicShaper, // Mandaic - mani: ArabicShaper, // Manichaean - phlp: ArabicShaper, // Psalter Pahlavi - - hang: HangulShaper, // Hangul - - bng2: IndicShaper, // Bengali - beng: IndicShaper, // Bengali - dev2: IndicShaper, // Devanagari - deva: IndicShaper, // Devanagari - gjr2: IndicShaper, // Gujarati - gujr: IndicShaper, // Gujarati - guru: IndicShaper, // Gurmukhi - gur2: IndicShaper, // Gurmukhi - knda: IndicShaper, // Kannada - knd2: IndicShaper, // Kannada - mlm2: IndicShaper, // Malayalam - mlym: IndicShaper, // Malayalam - ory2: IndicShaper, // Oriya - orya: IndicShaper, // Oriya - taml: IndicShaper, // Tamil - tml2: IndicShaper, // Tamil - telu: IndicShaper, // Telugu - tel2: IndicShaper, // Telugu - khmr: IndicShaper, // Khmer - - bali: UniversalShaper, // Balinese - batk: UniversalShaper, // Batak - brah: UniversalShaper, // Brahmi - bugi: UniversalShaper, // Buginese - buhd: UniversalShaper, // Buhid - cakm: UniversalShaper, // Chakma - cham: UniversalShaper, // Cham - dupl: UniversalShaper, // Duployan - egyp: UniversalShaper, // Egyptian Hieroglyphs - gran: UniversalShaper, // Grantha - hano: UniversalShaper, // Hanunoo - java: UniversalShaper, // Javanese - kthi: UniversalShaper, // Kaithi - kali: UniversalShaper, // Kayah Li - khar: UniversalShaper, // Kharoshthi - khoj: UniversalShaper, // Khojki - sind: UniversalShaper, // Khudawadi - lepc: UniversalShaper, // Lepcha - limb: UniversalShaper, // Limbu - mahj: UniversalShaper, // Mahajani - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: UniversalShaper, // Meitei Mayek - modi: UniversalShaper, // Modi - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: UniversalShaper, // Pahawh Hmong - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: UniversalShaper, // Rejang - saur: UniversalShaper, // Saurashtra - shrd: UniversalShaper, // Sharada - sidd: UniversalShaper, // Siddham - sinh: IndicShaper, // Sinhala - sund: UniversalShaper, // Sundanese - sylo: UniversalShaper, // Syloti Nagri - tglg: UniversalShaper, // Tagalog - tagb: UniversalShaper, // Tagbanwa - tale: UniversalShaper, // Tai Le - lana: UniversalShaper, // Tai Tham - tavt: UniversalShaper, // Tai Viet - takr: UniversalShaper, // Takri - tibt: UniversalShaper, // Tibetan - tfng: UniversalShaper, // Tifinagh - tirh: UniversalShaper, // Tirhuta - - latn: DefaultShaper, // Latin - DFLT: DefaultShaper // Default -}; - -export function choose(script) { - if (!Array.isArray(script)) { - script = [script]; - } - - for (let s of script) { - let shaper = SHAPERS[s]; - if (shaper) { - return shaper; - } - } - - return DefaultShaper; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic-data.js b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic-data.js deleted file mode 100644 index 30feff2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic-data.js +++ /dev/null @@ -1,175 +0,0 @@ -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -export const CATEGORIES = { - X: 1 << 0, - C: 1 << 1, - V: 1 << 2, - N: 1 << 3, - H: 1 << 4, - ZWNJ: 1 << 5, - ZWJ: 1 << 6, - M: 1 << 7, - SM: 1 << 8, - VD: 1 << 9, - A: 1 << 10, - Placeholder: 1 << 11, - Dotted_Circle: 1 << 12, - RS: 1 << 13, // Register Shifter, used in Khmer OT spec. - Coeng: 1 << 14, // Khmer-style Virama. - Repha: 1 << 15, // Atomically-encoded logical or visual repha. - Ra: 1 << 16, - CM: 1 << 17, // Consonant-Medial. - Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD). -}; - -// Visual positions in a syllable from left to right. -export const POSITIONS = { - Start: 1 << 0, - - Ra_To_Become_Reph: 1 << 1, - Pre_M: 1 << 2, - Pre_C: 1 << 3, - - Base_C: 1 << 4, - After_Main: 1 << 5, - - Above_C: 1 << 6, - - Before_Sub: 1 << 7, - Below_C: 1 << 8, - After_Sub: 1 << 9, - - Before_Post: 1 << 10, - Post_C: 1 << 11, - After_Post: 1 << 12, - - Final_C: 1 << 13, - SMVD: 1 << 14, - - End: 1 << 15 -}; - -export const CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle; -export const JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ; -export const HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng; - -export const INDIC_CONFIGS = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: POSITIONS.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: POSITIONS.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: POSITIONS.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: POSITIONS.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: POSITIONS.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: POSITIONS.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: POSITIONS.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: POSITIONS.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: POSITIONS.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: POSITIONS.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: POSITIONS.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; - -// Additional decompositions that aren't in Unicode -export const INDIC_DECOMPOSITIONS = { - // Khmer - 0x17BE: [0x17C1, 0x17BE], - 0x17BF: [0x17C1, 0x17BF], - 0x17C0: [0x17C1, 0x17C0], - 0x17C4: [0x17C1, 0x17C4], - 0x17C5: [0x17C1, 0x17C5] -}; diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.json b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.json deleted file mode 100644 index dd3a3f9..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.json +++ /dev/null @@ -1 +0,0 @@ -{"stateTable":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],"accepting":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],"tags":[[],["broken_cluster"],["consonant_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["consonant_syllable"],["broken_cluster"],["symbol_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["broken_cluster"],["broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],[],["broken_cluster"],["symbol_cluster"],[],["symbol_cluster"],["symbol_cluster"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["symbol_cluster"],["symbol_cluster"],["symbol_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],["symbol_cluster"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],[],["broken_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],[],["consonant_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],[],["vowel_syllable"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],[],[],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],["standalone_cluster"],[],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],[],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],[],[],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],[],[],[],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],["consonant_syllable"],["vowel_syllable"],["standalone_cluster"]]} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.machine b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.machine deleted file mode 100644 index 9c9c649..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.machine +++ /dev/null @@ -1,31 +0,0 @@ -c = C | Ra; # is_consonant -n = (ZWNJ? RS)? (N N?)?; # is_consonant_modifier -z = ZWJ | ZWNJ; # is_joiner -h = H | Coeng; # is_halant_or_coeng -reph = Ra H | Repha; # possible reph - -cn = c ZWJ? n?; -forced_rakar = ZWJ H ZWJ Ra; -symbol = Symbol N?; -matra_group = z{0,3} M N? (H | forced_rakar)?; -# syllable_tail = (z? SM SM? ZWNJ?)? A{0,3} VD{0,2}; -syllable_tail = (z? SM SM? ZWNJ?)? A{0,3}; -place_holder = Placeholder | Dotted_Circle; -halant_group = z? h (ZWJ N?)?; -final_halant_group = halant_group | h ZWNJ; -medial_group = CM?; -halant_or_matra_group = (final_halant_group | (h ZWJ)? matra_group{0,4}) (Coeng (cn | V))?; - -consonant_syllable = Repha? (cn halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail; -vowel_syllable = reph? V n? (ZWJ | (halant_group cn){0,4} medial_group halant_or_matra_group syllable_tail); -standalone_cluster = (Repha? Placeholder | reph? Dotted_Circle) n? (halant_group cn){0,4} medial_group halant_or_matra_group syllable_tail; -symbol_cluster = symbol syllable_tail; -broken_cluster = reph? n? (halant_group cn){0,4} medial_group halant_or_matra_group syllable_tail; - -main = - consonant_syllable:consonant_syllable - | vowel_syllable:vowel_syllable - | standalone_cluster:standalone_cluster - | symbol_cluster:symbol_cluster - | broken_cluster:broken_cluster -; diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.trie b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.trie deleted file mode 100644 index 511b5a1..0000000 Binary files a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/indic.trie and /dev/null differ diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.json b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.json deleted file mode 100644 index 68581e1..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.json +++ /dev/null @@ -1 +0,0 @@ -{"categories":["O","IND","S","GB","B","FM","CGJ","VMAbv","VMPst","VAbv","VPst","CMBlw","VPre","VBlw","H","VMBlw","CMAbv","MBlw","CS","R","SUB","MPst","MPre","FAbv","FPst","FBlw","null","SMAbv","SMBlw","VMPre","ZWNJ","ZWJ","WJ","M","VS","N","HN","MAbv"],"decompositions":{"2507":[2503,2494],"2508":[2503,2519],"2888":[2887,2902],"2891":[2887,2878],"2892":[2887,2903],"3018":[3014,3006],"3019":[3015,3006],"3020":[3014,3031],"3144":[3142,3158],"3264":[3263,3285],"3271":[3270,3285],"3272":[3270,3286],"3274":[3270,3266],"3275":[3270,3266,3285],"3402":[3398,3390],"3403":[3399,3390],"3404":[3398,3415],"3546":[3545,3530],"3548":[3545,3535],"3549":[3545,3535,3530],"3550":[3545,3551],"3635":[3661,3634],"3763":[3789,3762],"3955":[3953,3954],"3957":[3953,3956],"3958":[4018,3968],"3959":[4018,3953,3968],"3960":[4019,3968],"3961":[4019,3953,3968],"3969":[3953,3968],"6971":[6970,6965],"6973":[6972,6965],"6976":[6974,6965],"6977":[6975,6965],"6979":[6978,6965],"69934":[69937,69927],"69935":[69938,69927],"70475":[70471,70462],"70476":[70471,70487],"70843":[70841,70842],"70844":[70841,70832],"70846":[70841,70845],"71098":[71096,71087],"71099":[71097,71087]},"stateTable":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],"accepting":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],"tags":[[],["broken_cluster"],["independent_cluster"],["symbol_cluster"],["standard_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["numeral_cluster"],["broken_cluster"],["independent_cluster"],["symbol_cluster"],["symbol_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["virama_terminated_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["broken_cluster"],["broken_cluster"],["numeral_cluster"],["number_joiner_terminated_cluster"],["standard_cluster"],["standard_cluster"],["numeral_cluster"]]} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.machine b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.machine deleted file mode 100644 index 603001c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.machine +++ /dev/null @@ -1,44 +0,0 @@ -consonant_modifiers = CMAbv* CMBlw* ((H B | SUB) VS? CMAbv? CMBlw*)*; -medial_consonants = MPre? MAbv? MBlw? MPst?; -dependent_vowels = VPre* VAbv* VBlw* VPst*; -vowel_modifiers = VMPre* VMAbv* VMBlw* VMPst*; -final_consonants = FAbv* FBlw* FPst* FM?; - -virama_terminated_cluster = - R? (B | GB) VS? - consonant_modifiers - H -; - -standard_cluster = - R? (B | GB) VS? - consonant_modifiers - medial_consonants - dependent_vowels - vowel_modifiers - final_consonants -; - -broken_cluster = - R? - consonant_modifiers - medial_consonants - dependent_vowels - vowel_modifiers - final_consonants -; - -number_joiner_terminated_cluster = N VS? (HN N VS?)* HN; -numeral_cluster = N VS? (HN N VS?)*; -symbol_cluster = S VS? SMAbv* SMBlw*; -independent_cluster = (IND | O | WJ) VS?; - -main = - independent_cluster:independent_cluster - | virama_terminated_cluster:virama_terminated_cluster - | standard_cluster:standard_cluster - | number_joiner_terminated_cluster:number_joiner_terminated_cluster - | numeral_cluster:numeral_cluster - | symbol_cluster:symbol_cluster - | broken_cluster:broken_cluster -; diff --git a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.trie b/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.trie deleted file mode 100644 index 518e74d..0000000 Binary files a/skills/flight-finder/node_modules/fontkit/src/opentype/shapers/use.trie and /dev/null differ diff --git a/skills/flight-finder/node_modules/fontkit/src/subset/CFFSubset.js b/skills/flight-finder/node_modules/fontkit/src/subset/CFFSubset.js deleted file mode 100644 index d4506e7..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/subset/CFFSubset.js +++ /dev/null @@ -1,171 +0,0 @@ -import Subset from './Subset'; -import CFFTop from '../cff/CFFTop'; -import CFFPrivateDict from '../cff/CFFPrivateDict'; -import standardStrings from '../cff/CFFStandardStrings'; - -export default class CFFSubset extends Subset { - constructor(font) { - super(font); - - this.cff = this.font['CFF ']; - if (!this.cff) { - throw new Error('Not a CFF Font'); - } - } - - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - - for (let gid of this.glyphs) { - this.charstrings.push(this.cff.getCharString(gid)); - - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - - for (let subr in glyph._usedGsubrs) { - gsubrs[subr] = true; - } - } - - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - - subsetSubrs(subrs, used) { - let res = []; - for (let i = 0; i < subrs.length; i++) { - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else { - res.push(new Uint8Array([11])); // return - } - } - - return res; - } - - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs) { - let fd = this.cff.fdForGlyph(gid); - if (fd == null) { - continue; - } - - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for (let subr in glyph._usedSubrs) { - used_subrs[fd_select[fd]][subr] = true; - } - } - - for (let i = 0; i < topDict.FDArray.length; i++) { - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - - return; - } - - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs) { - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - - for (let subr in glyph._usedSubrs) { - used_subrs[subr] = true; - } - } - - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) { - privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - } - - topDict.FDArray = [{ Private: privateDict }]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [{ first: 0, fd: 0 }], - sentinel: this.charstrings.length - }; - } - - addString(string) { - if (!string) { - return null; - } - - if (!this.strings) { - this.strings = []; - } - - this.strings.push(string); - return standardStrings.length + this.strings.length - 1; - } - - encode() { - this.subsetCharstrings(); - - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }] - }; - - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - - for (let key of ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']) { - topDict[key] = this.addString(this.cff.string(topDict[key])); - } - - topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0]; - topDict.CIDCount = this.charstrings.length; - - if (this.cff.isCIDFont) { - this.subsetFontdict(topDict); - } else { - this.createCIDFontdict(topDict); - } - - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [this.cff.postscriptName], - topDictIndex: [topDict], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - - return CFFTop.toBuffer(top); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/subset/Subset.js b/skills/flight-finder/node_modules/fontkit/src/subset/Subset.js deleted file mode 100644 index 06692b5..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/subset/Subset.js +++ /dev/null @@ -1,27 +0,0 @@ -import * as r from 'restructure'; - -const resolved = Promise.resolve(); - -export default class Subset { - constructor(font) { - this.font = font; - this.glyphs = []; - this.mapping = {}; - - // always include the missing glyph - this.includeGlyph(0); - } - - includeGlyph(glyph) { - if (typeof glyph === 'object') { - glyph = glyph.id; - } - - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - - return this.mapping[glyph]; - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/subset/TTFSubset.js b/skills/flight-finder/node_modules/fontkit/src/subset/TTFSubset.js deleted file mode 100644 index f13e5ce..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/subset/TTFSubset.js +++ /dev/null @@ -1,131 +0,0 @@ -import cloneDeep from 'clone'; -import Subset from './Subset'; -import Directory from '../tables/directory'; -import Tables from '../tables'; -import TTFGlyphEncoder from '../glyph/TTFGlyphEncoder'; - -export default class TTFSubset extends Subset { - constructor(font) { - super(font); - this.glyphEncoder = new TTFGlyphEncoder; - } - - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - - let buffer = stream.readBuffer(nextOffset - curOffset); - - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components) { - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) { - // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - } - - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - - this.offset += buffer.length; - return this.glyf.length - 1; - } - - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - - this.hmtx = { - metrics: [], - bearings: [] - }; - - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while (i < this.glyphs.length) { - this._addGlyph(this.glyphs[i++]); - } - - let maxp = cloneDeep(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - - this.loca.offsets.push(this.offset); - - let head = cloneDeep(this.font.head); - head.indexToLocFormat = this.loca.version; - - let hhea = cloneDeep(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - - // TODO: subset prep, cvt, fpgm? - return Directory.toBuffer({ - tables: { - head, - hhea, - loca: this.loca, - maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - - // name: clone @font.name - // 'OS/2': clone @font['OS/2'] - // post: clone @font.post - // cmap: cmap - } - }); - } -} diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/BASE.js b/skills/flight-finder/node_modules/fontkit/src/tables/BASE.js deleted file mode 100644 index bbb84cf..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/BASE.js +++ /dev/null @@ -1,78 +0,0 @@ -import * as r from 'restructure'; -import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype'; -import {ItemVariationStore} from './variations'; - -let BaseCoord = new r.VersionedStruct(r.uint16, { - 1: { // Design units only - coordinate: r.int16 // X or Y value, in design units - }, - - 2: { // Design units plus contour point - coordinate: r.int16, // X or Y value, in design units - referenceGlyph: r.uint16, // GlyphID of control glyph - baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph - }, - - 3: { // Design units plus Device table - coordinate: r.int16, // X or Y value, in design units - deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value - } -}); - -let BaseValues = new r.Struct({ - defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList - baseCoordCount: r.uint16, - baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount') -}); - -let FeatMinMaxRecord = new r.Struct({ - tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList - minCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}), // May be NULL - maxCoord: new r.Pointer(r.uint16, BaseCoord, {type: 'parent'}) // May be NULL -}); - -let MinMax = new r.Struct({ - minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL - maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL - featMinMaxCount: r.uint16, // May be 0 - featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); - -let BaseLangSysRecord = new r.Struct({ - tag: new r.String(4), // 4-byte language system identification tag - minMax: new r.Pointer(r.uint16, MinMax, {type: 'parent'}) -}); - -let BaseScript = new r.Struct({ - baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL - defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL - baseLangSysCount: r.uint16, // May be 0 - baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); - -let BaseScriptRecord = new r.Struct({ - tag: new r.String(4), // 4-byte script identification tag - script: new r.Pointer(r.uint16, BaseScript, {type: 'parent'}) -}); - -let BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); - -// Array of 4-byte baseline identification tags-must be in alphabetical order -let BaseTagList = new r.Array(new r.String(4), r.uint16); - -let Axis = new r.Struct({ - baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL - baseScriptList: new r.Pointer(r.uint16, BaseScriptList) -}); - -export default new r.VersionedStruct(r.uint32, { - header: { - horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL - vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL - }, - - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/COLR.js b/skills/flight-finder/node_modules/fontkit/src/tables/COLR.js deleted file mode 100644 index 6a4b169..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/COLR.js +++ /dev/null @@ -1,25 +0,0 @@ -import * as r from 'restructure'; - -let LayerRecord = new r.Struct({ - gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top). - paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for - // the special case noted below. Each palette entry is 16 bits. - // A palette index of 0xFFFF is a special case indicating that - // the text foreground color should be used. - -let BaseGlyphRecord = new r.Struct({ - gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only - // and is not rendered for color. - firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record. - // There will be numLayers consecutive entries for this base glyph. - numLayers: r.uint16 -}); - -export default new r.Struct({ - version: r.uint16, - numBaseGlyphRecords: r.uint16, - baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }), - numLayerRecords: r.uint16 -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/CPAL.js b/skills/flight-finder/node_modules/fontkit/src/tables/CPAL.js deleted file mode 100644 index 2b4fd9e..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/CPAL.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as r from 'restructure'; - -let ColorRecord = new r.Struct({ - blue: r.uint8, - green: r.uint8, - red: r.uint8, - alpha: r.uint8 -}); - -export default new r.VersionedStruct(r.uint16, { - header: { - numPaletteEntries: r.uint16, - numPalettes: r.uint16, - numColorRecords: r.uint16, - colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')), - colorRecordIndices: new r.Array(r.uint16, 'numPalettes'), - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')), - offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries')) - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/DSIG.js b/skills/flight-finder/node_modules/fontkit/src/tables/DSIG.js deleted file mode 100644 index 660be0c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/DSIG.js +++ /dev/null @@ -1,21 +0,0 @@ -import * as r from 'restructure'; - -let Signature = new r.Struct({ - format: r.uint32, - length: r.uint32, - offset: r.uint32 -}); - -let SignatureBlock = new r.Struct({ - reserved: new r.Reserved(r.uint16, 2), - cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature - signature: new r.Buffer('cbSignature') -}); - -export default new r.Struct({ - ulVersion: r.uint32, // Version number of the DSIG table (0x00000001) - usNumSigs: r.uint16, // Number of signatures in the table - usFlag: r.uint16, // Permission flags - signatures: new r.Array(Signature, 'usNumSigs'), - signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/EBDT.js b/skills/flight-finder/node_modules/fontkit/src/tables/EBDT.js deleted file mode 100644 index c4aa596..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/EBDT.js +++ /dev/null @@ -1,91 +0,0 @@ -import * as r from 'restructure'; - -export let BigMetrics = new r.Struct({ - height: r.uint8, - width: r.uint8, - horiBearingX: r.int8, - horiBearingY: r.int8, - horiAdvance: r.uint8, - vertBearingX: r.int8, - vertBearingY: r.int8, - vertAdvance: r.uint8 -}); - -export let SmallMetrics = new r.Struct({ - height: r.uint8, - width: r.uint8, - bearingX: r.int8, - bearingY: r.int8, - advance: r.uint8 -}); - -let EBDTComponent = new r.Struct({ - glyph: r.uint16, - xOffset: r.int8, - yOffset: r.int8 -}); - -class ByteAligned {} - -class BitAligned {} - -export let glyph = new r.VersionedStruct('version', { - 1: { - metrics: SmallMetrics, - data: ByteAligned - }, - - 2: { - metrics: SmallMetrics, - data: BitAligned - }, - - // format 3 is deprecated - // format 4 is not supported by Microsoft - - 5: { - data: BitAligned - }, - - 6: { - metrics: BigMetrics, - data: ByteAligned - }, - - 7: { - metrics: BigMetrics, - data: BitAligned - }, - - 8: { - metrics: SmallMetrics, - pad: new r.Reserved(r.uint8), - numComponents: r.uint16, - components: new r.Array(EBDTComponent, 'numComponents') - }, - - 9: { - metrics: BigMetrics, - pad: new r.Reserved(r.uint8), - numComponents: r.uint16, - components: new r.Array(EBDTComponent, 'numComponents') - }, - - 17: { - metrics: SmallMetrics, - dataLen: r.uint32, - data: new r.Buffer('dataLen') - }, - - 18: { - metrics: BigMetrics, - dataLen: r.uint32, - data: new r.Buffer('dataLen') - }, - - 19: { - dataLen: r.uint32, - data: new r.Buffer('dataLen') - } -}); - diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/EBLC.js b/skills/flight-finder/node_modules/fontkit/src/tables/EBLC.js deleted file mode 100644 index 90705ef..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/EBLC.js +++ /dev/null @@ -1,80 +0,0 @@ -import * as r from 'restructure'; -import {BigMetrics} from './EBDT'; - -let SBitLineMetrics = new r.Struct({ - ascender: r.int8, - descender: r.int8, - widthMax: r.uint8, - caretSlopeNumerator: r.int8, - caretSlopeDenominator: r.int8, - caretOffset: r.int8, - minOriginSB: r.int8, - minAdvanceSB: r.int8, - maxBeforeBL: r.int8, - minAfterBL: r.int8, - pad: new r.Reserved(r.int8, 2) -}); - -let CodeOffsetPair = new r.Struct({ - glyphCode: r.uint16, - offset: r.uint16 -}); - -let IndexSubtable = new r.VersionedStruct(r.uint16, { - header: { - imageFormat: r.uint16, - imageDataOffset: r.uint32 - }, - - 1: { - offsetArray: new r.Array(r.uint32, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - - 2: { - imageSize: r.uint32, - bigMetrics: BigMetrics - }, - - 3: { - offsetArray: new r.Array(r.uint16, t => t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - - 4: { - numGlyphs: r.uint32, - glyphArray: new r.Array(CodeOffsetPair, t => t.numGlyphs + 1) - }, - - 5: { - imageSize: r.uint32, - bigMetrics: BigMetrics, - numGlyphs: r.uint32, - glyphCodeArray: new r.Array(r.uint16, 'numGlyphs') - } -}); - -let IndexSubtableArray = new r.Struct({ - firstGlyphIndex: r.uint16, - lastGlyphIndex: r.uint16, - subtable: new r.Pointer(r.uint32, IndexSubtable) -}); - -let BitmapSizeTable = new r.Struct({ - indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }), - indexTablesSize: r.uint32, - numberOfIndexSubTables: r.uint32, - colorRef: r.uint32, - hori: SBitLineMetrics, - vert: SBitLineMetrics, - startGlyphIndex: r.uint16, - endGlyphIndex: r.uint16, - ppemX: r.uint8, - ppemY: r.uint8, - bitDepth: r.uint8, - flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical']) -}); - -export default new r.Struct({ - version: r.uint32, // 0x00020000 - numSizes: r.uint32, - sizes: new r.Array(BitmapSizeTable, 'numSizes') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/GDEF.js b/skills/flight-finder/node_modules/fontkit/src/tables/GDEF.js deleted file mode 100644 index a1be863..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/GDEF.js +++ /dev/null @@ -1,57 +0,0 @@ -import * as r from 'restructure'; -import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device} from './opentype'; -import {ItemVariationStore} from './variations'; - -let AttachPoint = new r.Array(r.uint16, r.uint16); -let AttachList = new r.Struct({ - coverage: new r.Pointer(r.uint16, Coverage), - glyphCount: r.uint16, - attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount') -}); - -let CaretValue = new r.VersionedStruct(r.uint16, { - 1: { // Design units only - coordinate: r.int16 - }, - - 2: { // Contour point - caretValuePoint: r.uint16 - }, - - 3: { // Design units plus Device table - coordinate: r.int16, - deviceTable: new r.Pointer(r.uint16, Device) - } -}); - -let LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16); - -let LigCaretList = new r.Struct({ - coverage: new r.Pointer(r.uint16, Coverage), - ligGlyphCount: r.uint16, - ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount') -}); - -let MarkGlyphSetsDef = new r.Struct({ - markSetTableFormat: r.uint16, - markSetCount: r.uint16, - coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount') -}); - -export default new r.VersionedStruct(r.uint32, { - header: { - glyphClassDef: new r.Pointer(r.uint16, ClassDef), - attachList: new r.Pointer(r.uint16, AttachList), - ligCaretList: new r.Pointer(r.uint16, LigCaretList), - markAttachClassDef: new r.Pointer(r.uint16, ClassDef) - }, - - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef), - itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/GPOS.js b/skills/flight-finder/node_modules/fontkit/src/tables/GPOS.js deleted file mode 100644 index 3fc7cc3..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/GPOS.js +++ /dev/null @@ -1,209 +0,0 @@ -import * as r from 'restructure'; -import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype'; -import {FeatureVariations} from './variations'; - -let ValueFormat = new r.Bitfield(r.uint16, [ - 'xPlacement', 'yPlacement', - 'xAdvance', 'yAdvance', - 'xPlaDevice', 'yPlaDevice', - 'xAdvDevice', 'yAdvDevice' -]); - -let types = { - xPlacement: r.int16, - yPlacement: r.int16, - xAdvance: r.int16, - yAdvance: r.int16, - xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }), - yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }), - xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }), - yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: ctx => ctx.rel }) -}; - -class ValueRecord { - constructor(key = 'valueFormat') { - this.key = key; - } - - buildStruct(parent) { - let struct = parent; - while (!struct[this.key] && struct.parent) { - struct = struct.parent; - } - - if (!struct[this.key]) return; - - let fields = {}; - fields.rel = () => struct._startOffset; - - let format = struct[this.key]; - for (let key in format) { - if (format[key]) { - fields[key] = types[key]; - } - } - - return new r.Struct(fields); - } - - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } -} - -let PairValueRecord = new r.Struct({ - secondGlyph: r.uint16, - value1: new ValueRecord('valueFormat1'), - value2: new ValueRecord('valueFormat2') -}); - -let PairSet = new r.Array(PairValueRecord, r.uint16); - -let Class2Record = new r.Struct({ - value1: new ValueRecord('valueFormat1'), - value2: new ValueRecord('valueFormat2') -}); - -let Anchor = new r.VersionedStruct(r.uint16, { - 1: { // Design units only - xCoordinate: r.int16, - yCoordinate: r.int16 - }, - - 2: { // Design units plus contour point - xCoordinate: r.int16, - yCoordinate: r.int16, - anchorPoint: r.uint16 - }, - - 3: { // Design units plus Device tables - xCoordinate: r.int16, - yCoordinate: r.int16, - xDeviceTable: new r.Pointer(r.uint16, Device), - yDeviceTable: new r.Pointer(r.uint16, Device) - } -}); - -let EntryExitRecord = new r.Struct({ - entryAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}), - exitAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}) -}); - -let MarkRecord = new r.Struct({ - class: r.uint16, - markAnchor: new r.Pointer(r.uint16, Anchor, {type: 'parent'}) -}); - -let MarkArray = new r.Array(MarkRecord, r.uint16); - -let BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.classCount); -let BaseArray = new r.Array(BaseRecord, r.uint16); - -let ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), t => t.parent.parent.classCount); -let LigatureAttach = new r.Array(ComponentRecord, r.uint16); -let LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16); - -let GPOSLookup = new r.VersionedStruct('lookupType', { - 1: new r.VersionedStruct(r.uint16, { // Single Adjustment - 1: { // Single positioning value - coverage: new r.Pointer(r.uint16, Coverage), - valueFormat: ValueFormat, - value: new ValueRecord() - }, - 2: { - coverage: new r.Pointer(r.uint16, Coverage), - valueFormat: ValueFormat, - valueCount: r.uint16, - values: new r.LazyArray(new ValueRecord(), 'valueCount') - } - }), - - 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning - 1: { // Adjustments for glyph pairs - coverage: new r.Pointer(r.uint16, Coverage), - valueFormat1: ValueFormat, - valueFormat2: ValueFormat, - pairSetCount: r.uint16, - pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount') - }, - - 2: { // Class pair adjustment - coverage: new r.Pointer(r.uint16, Coverage), - valueFormat1: ValueFormat, - valueFormat2: ValueFormat, - classDef1: new r.Pointer(r.uint16, ClassDef), - classDef2: new r.Pointer(r.uint16, ClassDef), - class1Count: r.uint16, - class2Count: r.uint16, - classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count') - } - }), - - 3: { // Cursive Attachment Positioning - format: r.uint16, - coverage: new r.Pointer(r.uint16, Coverage), - entryExitCount: r.uint16, - entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount') - }, - - 4: { // MarkToBase Attachment Positioning - format: r.uint16, - markCoverage: new r.Pointer(r.uint16, Coverage), - baseCoverage: new r.Pointer(r.uint16, Coverage), - classCount: r.uint16, - markArray: new r.Pointer(r.uint16, MarkArray), - baseArray: new r.Pointer(r.uint16, BaseArray) - }, - - 5: { // MarkToLigature Attachment Positioning - format: r.uint16, - markCoverage: new r.Pointer(r.uint16, Coverage), - ligatureCoverage: new r.Pointer(r.uint16, Coverage), - classCount: r.uint16, - markArray: new r.Pointer(r.uint16, MarkArray), - ligatureArray: new r.Pointer(r.uint16, LigatureArray) - }, - - 6: { // MarkToMark Attachment Positioning - format: r.uint16, - mark1Coverage: new r.Pointer(r.uint16, Coverage), - mark2Coverage: new r.Pointer(r.uint16, Coverage), - classCount: r.uint16, - mark1Array: new r.Pointer(r.uint16, MarkArray), - mark2Array: new r.Pointer(r.uint16, BaseArray) - }, - - 7: Context, // Contextual positioning - 8: ChainingContext, // Chaining contextual positioning - - 9: { // Extension Positioning - posFormat: r.uint16, - lookupType: r.uint16, // cannot also be 9 - extension: new r.Pointer(r.uint32, null) - } -}); - -// Fix circular reference -GPOSLookup.versions[9].extension.type = GPOSLookup; - -export default new r.VersionedStruct(r.uint32, { - header: { - scriptList: new r.Pointer(r.uint16, ScriptList), - featureList: new r.Pointer(r.uint16, FeatureList), - lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup)) - }, - - 0x00010000: {}, - 0x00010001: { - featureVariations: new r.Pointer(r.uint32, FeatureVariations) - } -}); - -// export GPOSLookup for JSTF table -export { GPOSLookup }; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/GSUB.js b/skills/flight-finder/node_modules/fontkit/src/tables/GSUB.js deleted file mode 100644 index 757bf5a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/GSUB.js +++ /dev/null @@ -1,84 +0,0 @@ -import * as r from 'restructure'; -import {ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device, Context, ChainingContext} from './opentype'; -import {FeatureVariations} from './variations'; - -let Sequence = new r.Array(r.uint16, r.uint16); -let AlternateSet = Sequence; - -let Ligature = new r.Struct({ - glyph: r.uint16, - compCount: r.uint16, - components: new r.Array(r.uint16, t => t.compCount - 1) -}); - -let LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16); - -let GSUBLookup = new r.VersionedStruct('lookupType', { - 1: new r.VersionedStruct(r.uint16, {// Single Substitution - 1: { - coverage: new r.Pointer(r.uint16, Coverage), - deltaGlyphID: r.int16 - }, - 2: { - coverage: new r.Pointer(r.uint16, Coverage), - glyphCount: r.uint16, - substitute: new r.LazyArray(r.uint16, 'glyphCount') - } - }), - - 2: { // Multiple Substitution - substFormat: r.uint16, - coverage: new r.Pointer(r.uint16, Coverage), - count: r.uint16, - sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count') - }, - - 3: { // Alternate Substitution - substFormat: r.uint16, - coverage: new r.Pointer(r.uint16, Coverage), - count: r.uint16, - alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count') - }, - - 4: { // Ligature Substitution - substFormat: r.uint16, - coverage: new r.Pointer(r.uint16, Coverage), - count: r.uint16, - ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count') - }, - - 5: Context, // Contextual Substitution - 6: ChainingContext, // Chaining Contextual Substitution - - 7: { // Extension Substitution - substFormat: r.uint16, - lookupType: r.uint16, // cannot also be 7 - extension: new r.Pointer(r.uint32, null) - }, - - 8: { // Reverse Chaining Contextual Single Substitution - substFormat: r.uint16, - coverage: new r.Pointer(r.uint16, Coverage), - backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'), - lookaheadGlyphCount: r.uint16, - lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'), - glyphCount: r.uint16, - substitutes: new r.Array(r.uint16, 'glyphCount') - } -}); - -// Fix circular reference -GSUBLookup.versions[7].extension.type = GSUBLookup; - -export default new r.VersionedStruct(r.uint32, { - header: { - scriptList: new r.Pointer(r.uint16, ScriptList), - featureList: new r.Pointer(r.uint16, FeatureList), - lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup)) - }, - - 0x00010000: {}, - 0x00010001: { - featureVariations: new r.Pointer(r.uint32, FeatureVariations) - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/HVAR.js b/skills/flight-finder/node_modules/fontkit/src/tables/HVAR.js deleted file mode 100644 index 0b45e95..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/HVAR.js +++ /dev/null @@ -1,44 +0,0 @@ -import * as r from 'restructure'; -import { resolveLength } from 'restructure'; -import { ItemVariationStore } from './variations'; - -// TODO: add this to restructure -class VariableSizeNumber { - constructor(size) { - this._size = size; - } - - decode(stream, parent) { - switch (this.size(0, parent)) { - case 1: return stream.readUInt8(); - case 2: return stream.readUInt16BE(); - case 3: return stream.readUInt24BE(); - case 4: return stream.readUInt32BE(); - } - } - - size(val, parent) { - return resolveLength(this._size, null, parent); - } -} - -let MapDataEntry = new r.Struct({ - entry: new VariableSizeNumber(t => ((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: t => t.entry >> ((t.parent.entryFormat & 0x000F) + 1), - innerIndex: t => t.entry & ((1 << ((t.parent.entryFormat & 0x000F) + 1)) - 1) -}); - -let DeltaSetIndexMap = new r.Struct({ - entryFormat: r.uint16, - mapCount: r.uint16, - mapData: new r.Array(MapDataEntry, 'mapCount') -}); - -export default new r.Struct({ - majorVersion: r.uint16, - minorVersion: r.uint16, - itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore), - advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap), - LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap), - RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/JSTF.js b/skills/flight-finder/node_modules/fontkit/src/tables/JSTF.js deleted file mode 100644 index abfbe94..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/JSTF.js +++ /dev/null @@ -1,43 +0,0 @@ -import * as r from 'restructure'; -import { ScriptList, FeatureList, LookupList, Coverage, ClassDef, Device } from './opentype'; -import { GPOSLookup } from './GPOS'; - -let JstfGSUBModList = new r.Array(r.uint16, r.uint16); - -let JstfPriority = new r.Struct({ - shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), - shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), - shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), - shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), - shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)), - extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), - extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), - extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), - extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), - extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)) -}); - -let JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16); - -let JstfLangSysRecord = new r.Struct({ - tag: new r.String(4), - jstfLangSys: new r.Pointer(r.uint16, JstfLangSys) -}); - -let JstfScript = new r.Struct({ - extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length - defaultLangSys: new r.Pointer(r.uint16, JstfLangSys), - langSysCount: r.uint16, - langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount') -}); - -let JstfScriptRecord = new r.Struct({ - tag: new r.String(4), - script: new r.Pointer(r.uint16, JstfScript, {type: 'parent'}) -}); - -export default new r.Struct({ - version: r.uint32, // should be 0x00010000 - scriptCount: r.uint16, - scriptList: new r.Array(JstfScriptRecord, 'scriptCount') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/LTSH.js b/skills/flight-finder/node_modules/fontkit/src/tables/LTSH.js deleted file mode 100644 index 8a7c29a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/LTSH.js +++ /dev/null @@ -1,10 +0,0 @@ -import * as r from 'restructure'; - -// Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -export default new r.Struct({ - version: r.uint16, - numGlyphs: r.uint16, - yPels: new r.Array(r.uint8, 'numGlyphs') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/OS2.js b/skills/flight-finder/node_modules/fontkit/src/tables/OS2.js deleted file mode 100644 index 931a0e9..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/OS2.js +++ /dev/null @@ -1,84 +0,0 @@ -import * as r from 'restructure'; - -var OS2 = new r.VersionedStruct(r.uint16, { - header: { - xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space - usWeightClass: r.uint16, // visual weight of stroke in glyphs - usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio) - fsType: new r.Bitfield(r.uint16, [ // Indicates font embedding licensing rights - null, 'noEmbedding', 'viewOnly', 'editable', null, - null, null, null, 'noSubsetting', 'bitmapOnly' - ]), - ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts - ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts - ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts - ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts - ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts - ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts - ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts - ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts - yStrikeoutSize: r.int16, // width of the strikeout stroke - yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline - sFamilyClass: r.int16, // classification of font-family design - panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface - ulCharRange: new r.Array(r.uint32, 4), - vendorID: new r.String(4), // four character identifier for the font vendor - fsSelection: new r.Bitfield(r.uint16, [ // bit field containing information about the font - 'italic', 'underscore', 'negative', 'outlined', 'strikeout', - 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique' - ]), - usFirstCharIndex: r.uint16, // The minimum Unicode index in this font - usLastCharIndex: r.uint16 // The maximum Unicode index in this font - }, - - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - - 1: { - typoAscender: r.int16, - typoDescender: r.int16, - typoLineGap: r.int16, - winAscent: r.uint16, - winDescent: r.uint16, - codePageRange: new r.Array(r.uint32, 2) - }, - - 2: { - // these should be common with version 1 somehow - typoAscender: r.int16, - typoDescender: r.int16, - typoLineGap: r.int16, - winAscent: r.uint16, - winDescent: r.uint16, - codePageRange: new r.Array(r.uint32, 2), - - xHeight: r.int16, - capHeight: r.int16, - defaultChar: r.uint16, - breakChar: r.uint16, - maxContent: r.uint16 - }, - - 5: { - typoAscender: r.int16, - typoDescender: r.int16, - typoLineGap: r.int16, - winAscent: r.uint16, - winDescent: r.uint16, - codePageRange: new r.Array(r.uint32, 2), - - xHeight: r.int16, - capHeight: r.int16, - defaultChar: r.uint16, - breakChar: r.uint16, - maxContent: r.uint16, - - usLowerOpticalPointSize: r.uint16, - usUpperOpticalPointSize: r.uint16 - } -}); - -let versions = OS2.versions; -versions[3] = versions[4] = versions[2]; - -export default OS2; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/PCLT.js b/skills/flight-finder/node_modules/fontkit/src/tables/PCLT.js deleted file mode 100644 index 5df584d..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/PCLT.js +++ /dev/null @@ -1,21 +0,0 @@ -import * as r from 'restructure'; - -// PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -export default new r.Struct({ - version: r.uint16, - fontNumber: r.uint32, - pitch: r.uint16, - xHeight: r.uint16, - style: r.uint16, - typeFamily: r.uint16, - capHeight: r.uint16, - symbolSet: r.uint16, - typeface: new r.String(16), - characterComplement: new r.String(8), - fileName: new r.String(6), - strokeWeight: new r.String(1), - widthType: new r.String(1), - serifStyle: r.uint8, - reserved: new r.Reserved(r.uint8) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/VDMX.js b/skills/flight-finder/node_modules/fontkit/src/tables/VDMX.js deleted file mode 100644 index c65e658..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/VDMX.js +++ /dev/null @@ -1,33 +0,0 @@ -import * as r from 'restructure'; - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. - -let Ratio = new r.Struct({ - bCharSet: r.uint8, // Character set - xRatio: r.uint8, // Value to use for x-Ratio - yStartRatio: r.uint8, // Starting y-Ratio value - yEndRatio: r.uint8 // Ending y-Ratio value -}); - -let vTable = new r.Struct({ - yPelHeight: r.uint16, // yPelHeight to which values apply - yMax: r.int16, // Maximum value (in pels) for this yPelHeight - yMin: r.int16 // Minimum value (in pels) for this yPelHeight -}); - -let VdmxGroup = new r.Struct({ - recs: r.uint16, // Number of height records in this group - startsz: r.uint8, // Starting yPelHeight - endsz: r.uint8, // Ending yPelHeight - entries: new r.Array(vTable, 'recs') // The VDMX records -}); - -export default new r.Struct({ - version: r.uint16, // Version number (0 or 1) - numRecs: r.uint16, // Number of VDMX groups present - numRatios: r.uint16, // Number of aspect ratio groupings - ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges - offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range - groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/VORG.js b/skills/flight-finder/node_modules/fontkit/src/tables/VORG.js deleted file mode 100644 index 2a4f440..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/VORG.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as r from 'restructure'; - -let VerticalOrigin = new r.Struct({ - glyphIndex: r.uint16, - vertOriginY: r.int16 -}); - -export default new r.Struct({ - majorVersion: r.uint16, - minorVersion: r.uint16, - defaultVertOriginY: r.int16, - numVertOriginYMetrics: r.uint16, - metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/WOFF2Directory.js b/skills/flight-finder/node_modules/fontkit/src/tables/WOFF2Directory.js deleted file mode 100644 index 91b1053..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/WOFF2Directory.js +++ /dev/null @@ -1,74 +0,0 @@ -import * as r from 'restructure'; - -const Base128 = { - decode(stream) { - let result = 0; - let iterable = [0, 1, 2, 3, 4]; - for (let j = 0; j < iterable.length; j++) { - let i = iterable[j]; - let code = stream.readUInt8(); - - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) { - throw new Error('Overflow'); - } - - result = (result << 7) | (code & 0x7f); - if ((code & 0x80) === 0) { - return result; - } - } - - throw new Error('Bad base 128 number'); - } -}; - -let knownTags = [ - 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', - 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', - 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', - 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', - 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', - 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', - 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill' -]; - -let WOFF2DirectoryEntry = new r.Struct({ - flags: r.uint8, - customTag: new r.Optional(new r.String(4), t => (t.flags & 0x3f) === 0x3f), - tag: t => t.customTag || knownTags[t.flags & 0x3f],// || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); }, - length: Base128, - transformVersion: t => (t.flags >>> 6) & 0x03, - transformed: t => (t.tag === 'glyf' || t.tag === 'loca') ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new r.Optional(Base128, t => t.transformed) -}); - -let WOFF2Directory = new r.Struct({ - tag: new r.String(4), // should be 'wOF2' - flavor: r.uint32, - length: r.uint32, - numTables: r.uint16, - reserved: new r.Reserved(r.uint16), - totalSfntSize: r.uint32, - totalCompressedSize: r.uint32, - majorVersion: r.uint16, - minorVersion: r.uint16, - metaOffset: r.uint32, - metaLength: r.uint32, - metaOrigLength: r.uint32, - privOffset: r.uint32, - privLength: r.uint32, - tables: new r.Array(WOFF2DirectoryEntry, 'numTables') -}); - -WOFF2Directory.process = function() { - let tables = {}; - for (let i = 0; i < this.tables.length; i++) { - let table = this.tables[i]; - tables[table.tag] = table; - } - - return this.tables = tables; -}; - -export default WOFF2Directory; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/WOFFDirectory.js b/skills/flight-finder/node_modules/fontkit/src/tables/WOFFDirectory.js deleted file mode 100644 index dfd5d55..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/WOFFDirectory.js +++ /dev/null @@ -1,38 +0,0 @@ -import * as r from 'restructure'; -import tables from './'; - -let WOFFDirectoryEntry = new r.Struct({ - tag: new r.String(4), - offset: new r.Pointer(r.uint32, 'void', {type: 'global'}), - compLength: r.uint32, - length: r.uint32, - origChecksum: r.uint32 -}); - -let WOFFDirectory = new r.Struct({ - tag: new r.String(4), // should be 'wOFF' - flavor: r.uint32, - length: r.uint32, - numTables: r.uint16, - reserved: new r.Reserved(r.uint16), - totalSfntSize: r.uint32, - majorVersion: r.uint16, - minorVersion: r.uint16, - metaOffset: r.uint32, - metaLength: r.uint32, - metaOrigLength: r.uint32, - privOffset: r.uint32, - privLength: r.uint32, - tables: new r.Array(WOFFDirectoryEntry, 'numTables') -}); - -WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables) { - tables[table.tag] = table; - } - - this.tables = tables; -}; - -export default WOFFDirectory; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/aat.js b/skills/flight-finder/node_modules/fontkit/src/tables/aat.js deleted file mode 100644 index 299621b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/aat.js +++ /dev/null @@ -1,157 +0,0 @@ -import * as r from 'restructure'; - -class UnboundedArrayAccessor { - constructor(type, stream, parent) { - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } - - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - - return this._items[index]; - } - - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } -} - -export class UnboundedArray extends r.Array { - constructor(type) { - super(type, 0); - } - - decode(stream, parent) { - return new UnboundedArrayAccessor(this.type, stream, parent); - } -} - -export let LookupTable = function(ValueType = r.uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - constructor(type) { - this.type = type; - } - - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - } - - ValueType = new Shadow(ValueType); - - let BinarySearchHeader = new r.Struct({ - unitSize: r.uint16, - nUnits: r.uint16, - searchRange: r.uint16, - entrySelector: r.uint16, - rangeShift: r.uint16 - }); - - let LookupSegmentSingle = new r.Struct({ - lastGlyph: r.uint16, - firstGlyph: r.uint16, - value: ValueType - }); - - let LookupSegmentArray = new r.Struct({ - lastGlyph: r.uint16, - firstGlyph: r.uint16, - values: new r.Pointer(r.uint16, new r.Array(ValueType, t => t.lastGlyph - t.firstGlyph + 1), {type: 'parent'}) - }); - - let LookupSingle = new r.Struct({ - glyph: r.uint16, - value: ValueType - }); - - return new r.VersionedStruct(r.uint16, { - 0: { - values: new UnboundedArray(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new r.Array(LookupSegmentSingle, t => t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new r.Array(LookupSegmentArray, t => t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new r.Array(LookupSingle, t => t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: r.uint16, - count: r.uint16, - values: new r.Array(ValueType, 'count') - } - }); -}; - -export function StateTable(entryData = {}, lookupType = r.uint16) { - let entry = Object.assign({ - newState: r.uint16, - flags: r.uint16 - }, entryData); - - let Entry = new r.Struct(entry); - let StateArray = new UnboundedArray(new r.Array(r.uint16, t => t.nClasses)); - - let StateHeader = new r.Struct({ - nClasses: r.uint32, - classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)), - stateArray: new r.Pointer(r.uint32, StateArray), - entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry)) - }); - - return StateHeader; -} - -// This is the old version of the StateTable structure -export function StateTable1(entryData = {}, lookupType = r.uint16) { - let ClassLookupTable = new r.Struct({ - version() { return 8; }, // simulate LookupTable - firstGlyph: r.uint16, - values: new r.Array(r.uint8, r.uint16) - }); - - let entry = Object.assign({ - newStateOffset: r.uint16, - // convert offset to stateArray index - newState: t => (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: r.uint16 - }, entryData); - - let Entry = new r.Struct(entry); - let StateArray = new UnboundedArray(new r.Array(r.uint8, t => t.nClasses)); - - let StateHeader1 = new r.Struct({ - nClasses: r.uint16, - classTable: new r.Pointer(r.uint16, ClassLookupTable), - stateArray: new r.Pointer(r.uint16, StateArray), - entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry)) - }); - - return StateHeader1; -} diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/avar.js b/skills/flight-finder/node_modules/fontkit/src/tables/avar.js deleted file mode 100644 index d2e5aef..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/avar.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as r from 'restructure'; - -let shortFrac = new r.Fixed(16, 'BE', 14); - -let Correspondence = new r.Struct({ - fromCoord: shortFrac, - toCoord: shortFrac -}); - -let Segment = new r.Struct({ - pairCount: r.uint16, - correspondence: new r.Array(Correspondence, 'pairCount') -}); - -export default new r.Struct({ - version: r.fixed32, - axisCount: r.uint32, - segment: new r.Array(Segment, 'axisCount') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/bsln.js b/skills/flight-finder/node_modules/fontkit/src/tables/bsln.js deleted file mode 100644 index 21d5754..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/bsln.js +++ /dev/null @@ -1,31 +0,0 @@ -import * as r from 'restructure'; -import { LookupTable } from './aat'; - -let BslnSubtable = new r.VersionedStruct('format', { - 0: { // Distance-based, no mapping - deltas: new r.Array(r.int16, 32) - }, - - 1: { // Distance-based, with mapping - deltas: new r.Array(r.int16, 32), - mappingData: new LookupTable(r.uint16) - }, - - 2: { // Control point-based, no mapping - standardGlyph: r.uint16, - controlPoints: new r.Array(r.uint16, 32) - }, - - 3: { // Control point-based, with mapping - standardGlyph: r.uint16, - controlPoints: new r.Array(r.uint16, 32), - mappingData: new LookupTable(r.uint16) - } -}); - -export default new r.Struct({ - version: r.fixed32, - format: r.uint16, - defaultBaseline: r.uint16, - subtable: BslnSubtable -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/cmap.js b/skills/flight-finder/node_modules/fontkit/src/tables/cmap.js deleted file mode 100644 index 0049e45..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/cmap.js +++ /dev/null @@ -1,127 +0,0 @@ -import * as r from 'restructure'; - -let SubHeader = new r.Struct({ - firstCode: r.uint16, - entryCount: r.uint16, - idDelta: r.int16, - idRangeOffset: r.uint16 -}); - -let CmapGroup = new r.Struct({ - startCharCode: r.uint32, - endCharCode: r.uint32, - glyphID: r.uint32 -}); - -let UnicodeValueRange = new r.Struct({ - startUnicodeValue: r.uint24, - additionalCount: r.uint8 -}); - -let UVSMapping = new r.Struct({ - unicodeValue: r.uint24, - glyphID: r.uint16 -}); - -let DefaultUVS = new r.Array(UnicodeValueRange, r.uint32); -let NonDefaultUVS = new r.Array(UVSMapping, r.uint32); - -let VarSelectorRecord = new r.Struct({ - varSelector: r.uint24, - defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {type: 'parent'}), - nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {type: 'parent'}) -}); - -let CmapSubtable = new r.VersionedStruct(r.uint16, { - 0: { // Byte encoding - length: r.uint16, // Total table length in bytes (set to 262 for format 0) - language: r.uint16, // Language code for this encoding subtable, or zero if language-independent - codeMap: new r.LazyArray(r.uint8, 256) - }, - - 2: { // High-byte mapping (CJK) - length: r.uint16, - language: r.uint16, - subHeaderKeys: new r.Array(r.uint16, 256), - subHeaderCount: t => Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'), - glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount') - }, - - 4: { // Segment mapping to delta values - length: r.uint16, // Total table length in bytes - language: r.uint16, // Language code - segCountX2: r.uint16, - segCount: t => t.segCountX2 >> 1, - searchRange: r.uint16, - entrySelector: r.uint16, - rangeShift: r.uint16, - endCode: new r.LazyArray(r.uint16, 'segCount'), - reservedPad: new r.Reserved(r.uint16), // This value should be zero - startCode: new r.LazyArray(r.uint16, 'segCount'), - idDelta: new r.LazyArray(r.int16, 'segCount'), - idRangeOffset: new r.LazyArray(r.uint16, 'segCount'), - glyphIndexArray: new r.LazyArray(r.uint16, t => (t.length - t._currentOffset) / 2) - }, - - 6: { // Trimmed table - length: r.uint16, - language: r.uint16, - firstCode: r.uint16, - entryCount: r.uint16, - glyphIndices: new r.LazyArray(r.uint16, 'entryCount') - }, - - 8: { // mixed 16-bit and 32-bit coverage - reserved: new r.Reserved(r.uint16), - length: r.uint32, - language: r.uint16, - is32: new r.LazyArray(r.uint8, 8192), - nGroups: r.uint32, - groups: new r.LazyArray(CmapGroup, 'nGroups') - }, - - 10: { // Trimmed Array - reserved: new r.Reserved(r.uint16), - length: r.uint32, - language: r.uint32, - firstCode: r.uint32, - entryCount: r.uint32, - glyphIndices: new r.LazyArray(r.uint16, 'numChars') - }, - - 12: { // Segmented coverage - reserved: new r.Reserved(r.uint16), - length: r.uint32, - language: r.uint32, - nGroups: r.uint32, - groups: new r.LazyArray(CmapGroup, 'nGroups') - }, - - 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID) - reserved: new r.Reserved(r.uint16), - length: r.uint32, - language: r.uint32, - nGroups: r.uint32, - groups: new r.LazyArray(CmapGroup, 'nGroups') - }, - - 14: { // Unicode Variation Sequences - length: r.uint32, - numRecords: r.uint32, - varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords') - } -}); - -let CmapEntry = new r.Struct({ - platformID: r.uint16, // Platform identifier - encodingID: r.uint16, // Platform-specific encoding identifier - table: new r.Pointer(r.uint32, CmapSubtable, {type: 'parent', lazy: true}) -}); - -// character to glyph mapping -export default new r.Struct({ - version: r.uint16, - numSubtables: r.uint16, - tables: new r.Array(CmapEntry, 'numSubtables') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/cvt.js b/skills/flight-finder/node_modules/fontkit/src/tables/cvt.js deleted file mode 100644 index 48eecc3..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/cvt.js +++ /dev/null @@ -1,6 +0,0 @@ -import * as r from 'restructure'; - -// An array of predefined values accessible by instructions -export default new r.Struct({ - controlValues: new r.Array(r.int16) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/directory.js b/skills/flight-finder/node_modules/fontkit/src/tables/directory.js deleted file mode 100644 index c95b8c6..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/directory.js +++ /dev/null @@ -1,58 +0,0 @@ -import * as r from 'restructure'; -import Tables from './'; - -let TableEntry = new r.Struct({ - tag: new r.String(4), - checkSum: r.uint32, - offset: new r.Pointer(r.uint32, 'void', { type: 'global' }), - length: r.uint32 -}); - -let Directory = new r.Struct({ - tag: new r.String(4), - numTables: r.uint16, - searchRange: r.uint16, - entrySelector: r.uint16, - rangeShift: r.uint16, - tables: new r.Array(TableEntry, 'numTables') -}); - -Directory.process = function() { - let tables = {}; - for (let table of this.tables) { - tables[table.tag] = table; - } - - this.tables = tables; -}; - -Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for (let tag in this.tables) { - let table = this.tables[tag]; - if (table) { - tables.push({ - tag: tag, - checkSum: 0, - offset: new r.VoidPointer(Tables[tag], table), - length: Tables[tag].size(table) - }); - } - } - - this.tables = tables; - } - - this.tag = 'true'; - this.numTables = this.tables.length; - - let maxExponentFor2 = Math.floor((Math.log(this.numTables) / Math.LN2)); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; - -export default Directory; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/feat.js b/skills/flight-finder/node_modules/fontkit/src/tables/feat.js deleted file mode 100644 index bfbbfb2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/feat.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as r from 'restructure'; - -let Setting = new r.Struct({ - setting: r.uint16, - nameIndex: r.int16, - name: t => t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); - -let FeatureName = new r.Struct({ - feature: r.uint16, - nSettings: r.uint16, - settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }), - featureFlags: new r.Bitfield(r.uint8, [ - null, null, null, null, null, null, - 'hasDefault', 'exclusive' - ]), - defaultSetting: r.uint8, - nameIndex: r.int16, - name: t => t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); - -export default new r.Struct({ - version: r.fixed32, - featureNameCount: r.uint16, - reserved1: new r.Reserved(r.uint16), - reserved2: new r.Reserved(r.uint32), - featureNames: new r.Array(FeatureName, 'featureNameCount') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/fpgm.js b/skills/flight-finder/node_modules/fontkit/src/tables/fpgm.js deleted file mode 100644 index fde3e4d..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/fpgm.js +++ /dev/null @@ -1,8 +0,0 @@ -import * as r from 'restructure'; - -// A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -export default new r.Struct({ - instructions: new r.Array(r.uint8) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/fvar.js b/skills/flight-finder/node_modules/fontkit/src/tables/fvar.js deleted file mode 100644 index d4187ed..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/fvar.js +++ /dev/null @@ -1,31 +0,0 @@ -import * as r from 'restructure'; - -let Axis = new r.Struct({ - axisTag: new r.String(4), - minValue: r.fixed32, - defaultValue: r.fixed32, - maxValue: r.fixed32, - flags: r.uint16, - nameID: r.uint16, - name: t => t.parent.parent.name.records.fontFeatures[t.nameID] -}); - -let Instance = new r.Struct({ - nameID: r.uint16, - name: t => t.parent.parent.name.records.fontFeatures[t.nameID], - flags: r.uint16, - coord: new r.Array(r.fixed32, t => t.parent.axisCount), - postscriptNameID: new r.Optional(r.uint16, t => t.parent.instanceSize - t._currentOffset > 0) -}); - -export default new r.Struct({ - version: r.fixed32, - offsetToData: r.uint16, - countSizePairs: r.uint16, - axisCount: r.uint16, - axisSize: r.uint16, - instanceCount: r.uint16, - instanceSize: r.uint16, - axis: new r.Array(Axis, 'axisCount'), - instance: new r.Array(Instance, 'instanceCount') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/gasp.js b/skills/flight-finder/node_modules/fontkit/src/tables/gasp.js deleted file mode 100644 index d0925b2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/gasp.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as r from 'restructure'; - -let GaspRange = new r.Struct({ - rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem - rangeGaspBehavior: new r.Bitfield(r.uint16, [ // Flags describing desired rasterizer behavior - 'grayscale', 'gridfit', - 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); - -export default new r.Struct({ - version: r.uint16, // set to 0 - numRanges: r.uint16, - gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/glyf.js b/skills/flight-finder/node_modules/fontkit/src/tables/glyf.js deleted file mode 100644 index 207bb3c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/glyf.js +++ /dev/null @@ -1,4 +0,0 @@ -import * as r from 'restructure'; - -// only used for encoding -export default new r.Array(new r.Buffer); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/gvar.js b/skills/flight-finder/node_modules/fontkit/src/tables/gvar.js deleted file mode 100644 index 8b4b1a4..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/gvar.js +++ /dev/null @@ -1,27 +0,0 @@ -import * as r from 'restructure'; - -let shortFrac = new r.Fixed(16, 'BE', 14); -class Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags - ? stream.readUInt32BE() - : stream.readUInt16BE() * 2; - } -} - -let gvar = new r.Struct({ - version: r.uint16, - reserved: new r.Reserved(r.uint16), - axisCount: r.uint16, - globalCoordCount: r.uint16, - globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: r.uint16, - flags: r.uint16, - offsetToData: r.uint32, - offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: ctx => ctx.offsetToData, allowNull: false }), t => t.glyphCount + 1) -}); - -export default gvar; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/hdmx.js b/skills/flight-finder/node_modules/fontkit/src/tables/hdmx.js deleted file mode 100644 index 511f089..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/hdmx.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as r from 'restructure'; - -let DeviceRecord = new r.Struct({ - pixelSize: r.uint8, - maximumWidth: r.uint8, - widths: new r.Array(r.uint8, t => t.parent.parent.maxp.numGlyphs) -}); - -// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -export default new r.Struct({ - version: r.uint16, - numRecords: r.int16, - sizeDeviceRecord: r.int32, - records: new r.Array(DeviceRecord, 'numRecords') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/head.js b/skills/flight-finder/node_modules/fontkit/src/tables/head.js deleted file mode 100644 index 88f7a51..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/head.js +++ /dev/null @@ -1,25 +0,0 @@ -import * as r from 'restructure'; - -// font header -export default new r.Struct({ - version: r.int32, // 0x00010000 (version 1.0) - revision: r.int32, // set by font manufacturer - checkSumAdjustment: r.uint32, - magicNumber: r.uint32, // set to 0x5F0F3CF5 - flags: r.uint16, - unitsPerEm: r.uint16, // range from 64 to 16384 - created: new r.Array(r.int32, 2), - modified: new r.Array(r.int32, 2), - xMin: r.int16, // for all glyph bounding boxes - yMin: r.int16, // for all glyph bounding boxes - xMax: r.int16, // for all glyph bounding boxes - yMax: r.int16, // for all glyph bounding boxes - macStyle: new r.Bitfield(r.uint16, [ - 'bold', 'italic', 'underline', 'outline', - 'shadow', 'condensed', 'extended' - ]), - lowestRecPPEM: r.uint16, // smallest readable size in pixels - fontDirectionHint: r.int16, - indexToLocFormat: r.int16, // 0 for short offsets, 1 for long - glyphDataFormat: r.int16 // 0 for current format -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/hhea.js b/skills/flight-finder/node_modules/fontkit/src/tables/hhea.js deleted file mode 100644 index af47604..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/hhea.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as r from 'restructure'; - -// horizontal header -export default new r.Struct({ - version: r.int32, - ascent: r.int16, // Distance from baseline of highest ascender - descent: r.int16, // Distance from baseline of lowest descender - lineGap: r.int16, // Typographic line gap - advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table - minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table - minRightSideBearing: r.int16, // Minimum right sidebearing value - xMaxExtent: r.int16, - caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical - caretSlopeRun: r.int16, // 0 for vertical - caretOffset: r.int16, // Set to 0 for non-slanted fonts - reserved: new r.Reserved(r.int16, 4), - metricDataFormat: r.int16, // 0 for current format - numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/hmtx.js b/skills/flight-finder/node_modules/fontkit/src/tables/hmtx.js deleted file mode 100644 index 6df2ae5..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/hmtx.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as r from 'restructure'; - -let HmtxEntry = new r.Struct({ - advance: r.uint16, - bearing: r.int16 -}); - -export default new r.Struct({ - metrics: new r.LazyArray(HmtxEntry, t => t.parent.hhea.numberOfMetrics), - bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/index.js b/skills/flight-finder/node_modules/fontkit/src/tables/index.js deleted file mode 100644 index 438bb48..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/index.js +++ /dev/null @@ -1,117 +0,0 @@ -let tables = {}; -export default tables; - -// Required Tables -import cmap from './cmap'; -import head from './head'; -import hhea from './hhea'; -import hmtx from './hmtx'; -import maxp from './maxp'; -import name from './name'; -import OS2 from './OS2'; -import post from './post'; - -tables.cmap = cmap; -tables.head = head; -tables.hhea = hhea; -tables.hmtx = hmtx; -tables.maxp = maxp; -tables.name = name; -tables['OS/2'] = OS2; -tables.post = post; - - -// TrueType Outlines -import cvt from './cvt'; -import fpgm from './fpgm'; -import loca from './loca'; -import prep from './prep'; -import glyf from './glyf'; - -tables.fpgm = fpgm; -tables.loca = loca; -tables.prep = prep; -tables['cvt '] = cvt; -tables.glyf = glyf; - - -// PostScript Outlines -import CFFFont from '../cff/CFFFont'; -import VORG from './VORG'; - -tables['CFF '] = CFFFont; -tables['CFF2'] = CFFFont; -tables.VORG = VORG; - - -// Bitmap Glyphs -import EBLC from './EBLC'; -import sbix from './sbix'; -import COLR from './COLR'; -import CPAL from './CPAL'; - -tables.EBLC = EBLC; -tables.CBLC = tables.EBLC; -tables.sbix = sbix; -tables.COLR = COLR; -tables.CPAL = CPAL; - - -// Advanced OpenType Tables -import BASE from './BASE'; -import GDEF from './GDEF'; -import GPOS from './GPOS'; -import GSUB from './GSUB'; -import JSTF from './JSTF'; - -tables.BASE = BASE; -tables.GDEF = GDEF; -tables.GPOS = GPOS; -tables.GSUB = GSUB; -tables.JSTF = JSTF; - -// OpenType variations tables -import HVAR from './HVAR'; - -tables.HVAR = HVAR; - -// Other OpenType Tables -import DSIG from './DSIG'; -import gasp from './gasp'; -import hdmx from './hdmx'; -import kern from './kern'; -import LTSH from './LTSH'; -import PCLT from './PCLT'; -import VDMX from './VDMX'; -import vhea from './vhea'; -import vmtx from './vmtx'; - -tables.DSIG = DSIG; -tables.gasp = gasp; -tables.hdmx = hdmx; -tables.kern = kern; -tables.LTSH = LTSH; -tables.PCLT = PCLT; -tables.VDMX = VDMX; -tables.vhea = vhea; -tables.vmtx = vmtx; - - -// Apple Advanced Typography Tables -import avar from './avar'; -import bsln from './bsln'; -import feat from './feat'; -import fvar from './fvar'; -import gvar from './gvar'; -import just from './just'; -import morx from './morx'; -import opbd from './opbd'; - -tables.avar = avar; -tables.bsln = bsln; -tables.feat = feat; -tables.fvar = fvar; -tables.gvar = gvar; -tables.just = just; -tables.morx = morx; -tables.opbd = opbd; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/just.js b/skills/flight-finder/node_modules/fontkit/src/tables/just.js deleted file mode 100644 index 198be1b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/just.js +++ /dev/null @@ -1,81 +0,0 @@ -import * as r from 'restructure'; -import { LookupTable, StateTable1 } from './aat'; - -let ClassTable = new r.Struct({ - length: r.uint16, - coverage: r.uint16, - subFeatureFlags: r.uint32, - stateTable: new StateTable1 -}); - -let WidthDeltaRecord = new r.Struct({ - justClass: r.uint32, - beforeGrowLimit: r.fixed32, - beforeShrinkLimit: r.fixed32, - afterGrowLimit: r.fixed32, - afterShrinkLimit: r.fixed32, - growFlags: r.uint16, - shrinkFlags: r.uint16 -}); - -let WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32); - -let ActionData = new r.VersionedStruct('actionType', { - 0: { // Decomposition action - lowerLimit: r.fixed32, - upperLimit: r.fixed32, - order: r.uint16, - glyphs: new r.Array(r.uint16, r.uint16) - }, - - 1: { // Unconditional add glyph action - addGlyph: r.uint16 - }, - - 2: { // Conditional add glyph action - substThreshold: r.fixed32, - addGlyph: r.uint16, - substGlyph: r.uint16 - }, - - 3: {}, // Stretch glyph action (no data, not supported by CoreText) - - 4: { // Ductile glyph action (not supported by CoreText) - variationAxis: r.uint32, - minimumLimit: r.fixed32, - noStretchValue: r.fixed32, - maximumLimit: r.fixed32 - }, - - 5: { // Repeated add glyph action - flags: r.uint16, - glyph: r.uint16 - } -}); - -let Action = new r.Struct({ - actionClass: r.uint16, - actionType: r.uint16, - actionLength: r.uint32, - actionData: ActionData, - padding: new r.Reserved(r.uint8, t => t.actionLength - t._currentOffset) -}); - -let PostcompensationAction = new r.Array(Action, r.uint32); -let PostCompensationTable = new r.Struct({ - lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction)) -}); - -let JustificationTable = new r.Struct({ - classTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }), - wdcOffset: r.uint16, - postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }), - widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: ctx => ctx.wdcOffset })) -}); - -export default new r.Struct({ - version: r.uint32, - format: r.uint16, - horizontal: new r.Pointer(r.uint16, JustificationTable), - vertical: new r.Pointer(r.uint16, JustificationTable) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/kern.js b/skills/flight-finder/node_modules/fontkit/src/tables/kern.js deleted file mode 100644 index 9ce4d90..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/kern.js +++ /dev/null @@ -1,91 +0,0 @@ -import * as r from 'restructure'; - -let KernPair = new r.Struct({ - left: r.uint16, - right: r.uint16, - value: r.int16 -}); - -let ClassTable = new r.Struct({ - firstGlyph: r.uint16, - nGlyphs: r.uint16, - offsets: new r.Array(r.uint16, 'nGlyphs'), - max: t => t.offsets.length && Math.max.apply(Math, t.offsets) -}); - -let Kern2Array = new r.Struct({ - off: t => t._startOffset - t.parent.parent._startOffset, - len: t => (((t.parent.leftTable.max - t.off) / t.parent.rowWidth) + 1) * (t.parent.rowWidth / 2), - values: new r.LazyArray(r.int16, 'len') -}); - -let KernSubtable = new r.VersionedStruct('format', { - 0: { - nPairs: r.uint16, - searchRange: r.uint16, - entrySelector: r.uint16, - rangeShift: r.uint16, - pairs: new r.Array(KernPair, 'nPairs') - }, - - 2: { - rowWidth: r.uint16, - leftTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}), - rightTable: new r.Pointer(r.uint16, ClassTable, {type: 'parent'}), - array: new r.Pointer(r.uint16, Kern2Array, {type: 'parent'}) - }, - - 3: { - glyphCount: r.uint16, - kernValueCount: r.uint8, - leftClassCount: r.uint8, - rightClassCount: r.uint8, - flags: r.uint8, - kernValue: new r.Array(r.int16, 'kernValueCount'), - leftClass: new r.Array(r.uint8, 'glyphCount'), - rightClass: new r.Array(r.uint8, 'glyphCount'), - kernIndex: new r.Array(r.uint8, t => t.leftClassCount * t.rightClassCount) - } -}); - -let KernTable = new r.VersionedStruct('version', { - 0: { // Microsoft uses this format - subVersion: r.uint16, // Microsoft has an extra sub-table version number - length: r.uint16, // Length of the subtable, in bytes - format: r.uint8, // Format of subtable - coverage: new r.Bitfield(r.uint8, [ - 'horizontal', // 1 if table has horizontal data, 0 if vertical - 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values. - 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: KernSubtable, - padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset) - }, - 1: { // Apple uses this format - length: r.uint32, - coverage: new r.Bitfield(r.uint8, [ - null, null, null, null, null, - 'variation', // Set if table has variation kerning values - 'crossStream', // Set if table has cross-stream kerning values - 'vertical' // Set if table has vertical kerning values - ]), - format: r.uint8, - tupleIndex: r.uint16, - subtable: KernSubtable, - padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset) - } -}); - -export default new r.VersionedStruct(r.uint16, { - 0: { // Microsoft Version - nTables: r.uint16, - tables: new r.Array(KernTable, 'nTables') - }, - - 1: { // Apple Version - reserved: new r.Reserved(r.uint16), // the other half of the version number - nTables: r.uint32, - tables: new r.Array(KernTable, 'nTables') - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/loca.js b/skills/flight-finder/node_modules/fontkit/src/tables/loca.js deleted file mode 100644 index 8d1ea6a..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/loca.js +++ /dev/null @@ -1,30 +0,0 @@ -import * as r from 'restructure'; - -let loca = new r.VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new r.Array(r.uint16) - }, - 1: { - offsets: new r.Array(r.uint32) - } -}); - -loca.process = function() { - if (this.version === 0 && !this._processed) { - for (let i = 0; i < this.offsets.length; i++) { - this.offsets[i] <<= 1; - } - this._processed = true; - } -}; - -loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for (let i = 0; i < this.offsets.length; i++) { - this.offsets[i] >>>= 1; - } - this._processed = false; - } -}; - -export default loca; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/maxp.js b/skills/flight-finder/node_modules/fontkit/src/tables/maxp.js deleted file mode 100644 index 3e21138..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/maxp.js +++ /dev/null @@ -1,20 +0,0 @@ -import * as r from 'restructure'; - -// maxiumum profile -export default new r.Struct({ - version: r.int32, - numGlyphs: r.uint16, // The number of glyphs in the font - maxPoints: r.uint16, // Maximum points in a non-composite glyph - maxContours: r.uint16, // Maximum contours in a non-composite glyph - maxComponentPoints: r.uint16, // Maximum points in a composite glyph - maxComponentContours: r.uint16, // Maximum contours in a composite glyph - maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise - maxTwilightPoints: r.uint16, // Maximum points used in Z0 - maxStorage: r.uint16, // Number of Storage Area locations - maxFunctionDefs: r.uint16, // Number of FDEFs - maxInstructionDefs: r.uint16, // Number of IDEFs - maxStackElements: r.uint16, // Maximum stack depth - maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions - maxComponentElements: r.uint16, // Maximum number of components referenced at “top level” for any composite glyph - maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/morx.js b/skills/flight-finder/node_modules/fontkit/src/tables/morx.js deleted file mode 100644 index 73bc296..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/morx.js +++ /dev/null @@ -1,79 +0,0 @@ -import * as r from 'restructure'; -import { UnboundedArray, LookupTable, StateTable } from './aat'; - -let LigatureData = { - action: r.uint16 -}; - -let ContextualData = { - markIndex: r.uint16, - currentIndex: r.uint16 -}; - -let InsertionData = { - currentInsertIndex: r.uint16, - markedInsertIndex: r.uint16 -}; - -let SubstitutionTable = new r.Struct({ - items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable)) -}); - -let SubtableData = new r.VersionedStruct('type', { - 0: { // Indic Rearrangement Subtable - stateTable: new StateTable - }, - - 1: { // Contextual Glyph Substitution Subtable - stateTable: new StateTable(ContextualData), - substitutionTable: new r.Pointer(r.uint32, SubstitutionTable) - }, - - 2: { // Ligature subtable - stateTable: new StateTable(LigatureData), - ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)), - components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)), - ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)) - }, - - 4: { // Non-contextual Glyph Substitution Subtable - lookupTable: new LookupTable - }, - - 5: { // Glyph Insertion Subtable - stateTable: new StateTable(InsertionData), - insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)) - } -}); - -let Subtable = new r.Struct({ - length: r.uint32, - coverage: r.uint24, - type: r.uint8, - subFeatureFlags: r.uint32, - table: SubtableData, - padding: new r.Reserved(r.uint8, t => t.length - t._currentOffset) -}); - -let FeatureEntry = new r.Struct({ - featureType: r.uint16, - featureSetting: r.uint16, - enableFlags: r.uint32, - disableFlags: r.uint32 -}); - -let MorxChain = new r.Struct({ - defaultFlags: r.uint32, - chainLength: r.uint32, - nFeatureEntries: r.uint32, - nSubtables: r.uint32, - features: new r.Array(FeatureEntry, 'nFeatureEntries'), - subtables: new r.Array(Subtable, 'nSubtables') -}); - -export default new r.Struct({ - version: r.uint16, - unused: new r.Reserved(r.uint16), - nChains: r.uint32, - chains: new r.Array(MorxChain, 'nChains') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/name.js b/skills/flight-finder/node_modules/fontkit/src/tables/name.js deleted file mode 100644 index c5542d2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/name.js +++ /dev/null @@ -1,130 +0,0 @@ -import * as r from 'restructure'; -import {getEncoding, LANGUAGES} from '../encodings'; - -let NameRecord = new r.Struct({ - platformID: r.uint16, - encodingID: r.uint16, - languageID: r.uint16, - nameID: r.uint16, - length: r.uint16, - string: new r.Pointer(r.uint16, - new r.String('length', t => getEncoding(t.platformID, t.encodingID, t.languageID)), - { type: 'parent', relativeTo: ctx => ctx.parent.stringOffset, allowNull: false } - ) -}); - -let LangTagRecord = new r.Struct({ - length: r.uint16, - tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {type: 'parent', relativeTo: ctx => ctx.stringOffset}) -}); - -var NameTable = new r.VersionedStruct(r.uint16, { - 0: { - count: r.uint16, - stringOffset: r.uint16, - records: new r.Array(NameRecord, 'count') - }, - 1: { - count: r.uint16, - stringOffset: r.uint16, - records: new r.Array(NameRecord, 'count'), - langTagCount: r.uint16, - langTags: new r.Array(LangTagRecord, 'langTagCount') - } -}); - -export default NameTable; - -const NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII. - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, // reserved - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; - -NameTable.process = function(stream) { - var records = {}; - for (let record of this.records) { - // find out what language this is for - let language = LANGUAGES[record.platformID][record.languageID]; - - if (language == null && this.langTags != null && record.languageID >= 0x8000) { - language = this.langTags[record.languageID - 0x8000].tag; - } - - if (language == null) { - language = record.platformID + '-' + record.languageID; - } - - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : (NAMES[record.nameID] || record.nameID); - if (records[key] == null) { - records[key] = {}; - } - - let obj = records[key]; - if (record.nameID >= 256) { - obj = obj[record.nameID] || (obj[record.nameID] = {}); - } - - if (typeof record.string === 'string' || typeof obj[language] !== 'string') { - obj[language] = record.string; - } - } - - this.records = records; -}; - -NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - - let records = []; - for (let key in this.records) { - let val = this.records[key]; - if (key === 'fontFeatures') continue; - - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - - if (key === 'postscriptName') { - records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - } - - this.records = records; - this.count = records.length; - this.stringOffset = NameTable.size(this, null, false); -}; diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/opbd.js b/skills/flight-finder/node_modules/fontkit/src/tables/opbd.js deleted file mode 100644 index 7c614f2..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/opbd.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as r from 'restructure'; -import { LookupTable } from './aat'; - -let OpticalBounds = new r.Struct({ - left: r.int16, - top: r.int16, - right: r.int16, - bottom: r.int16 -}); - -export default new r.Struct({ - version: r.fixed32, - format: r.uint16, - lookupTable: new LookupTable(OpticalBounds) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/opentype.js b/skills/flight-finder/node_modules/fontkit/src/tables/opentype.js deleted file mode 100644 index 867cf5c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/opentype.js +++ /dev/null @@ -1,217 +0,0 @@ -import * as r from 'restructure'; - -//######################## -// Scripts and Languages # -//######################## - -let LangSysTable = new r.Struct({ - reserved: new r.Reserved(r.uint16), - reqFeatureIndex: r.uint16, - featureCount: r.uint16, - featureIndexes: new r.Array(r.uint16, 'featureCount') -}); - -let LangSysRecord = new r.Struct({ - tag: new r.String(4), - langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' }) -}); - -let Script = new r.Struct({ - defaultLangSys: new r.Pointer(r.uint16, LangSysTable), - count: r.uint16, - langSysRecords: new r.Array(LangSysRecord, 'count') -}); - -let ScriptRecord = new r.Struct({ - tag: new r.String(4), - script: new r.Pointer(r.uint16, Script, { type: 'parent' }) -}); - -export let ScriptList = new r.Array(ScriptRecord, r.uint16); - -//####################### -// Features and Lookups # -//####################### - -let FeatureParams = new r.Struct({ - version: r.uint16, // should be set to 0 according OT spec - nameID: r.uint16, //OT spec: UI Name ID or uiLabelNameId -}); - -export let Feature = new r.Struct({ - featureParams: new r.Pointer(r.uint16, FeatureParams), - lookupCount: r.uint16, - lookupListIndexes: new r.Array(r.uint16, 'lookupCount') -}); - -let FeatureRecord = new r.Struct({ - tag: new r.String(4), - feature: new r.Pointer(r.uint16, Feature, { type: 'parent' }) -}); - -export let FeatureList = new r.Array(FeatureRecord, r.uint16); - -let LookupFlags = new r.Struct({ - markAttachmentType: r.uint8, - flags: new r.Bitfield(r.uint8, [ - 'rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', - 'ignoreMarks', 'useMarkFilteringSet' - ]) -}); - -export function LookupList(SubTable) { - let Lookup = new r.Struct({ - lookupType: r.uint16, - flags: LookupFlags, - subTableCount: r.uint16, - subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'), - markFilteringSet: new r.Optional(r.uint16, t => t.flags.flags.useMarkFilteringSet) - }); - - return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16); -} - -//################# -// Coverage Table # -//################# - -let RangeRecord = new r.Struct({ - start: r.uint16, - end: r.uint16, - startCoverageIndex: r.uint16 -}); - -export let Coverage = new r.VersionedStruct(r.uint16, { - 1: { - glyphCount: r.uint16, - glyphs: new r.Array(r.uint16, 'glyphCount') - }, - 2: { - rangeCount: r.uint16, - rangeRecords: new r.Array(RangeRecord, 'rangeCount') - } -}); - -//######################### -// Class Definition Table # -//######################### - -let ClassRangeRecord = new r.Struct({ - start: r.uint16, - end: r.uint16, - class: r.uint16 -}); - -export let ClassDef = new r.VersionedStruct(r.uint16, { - 1: { // Class array - startGlyph: r.uint16, - glyphCount: r.uint16, - classValueArray: new r.Array(r.uint16, 'glyphCount') - }, - 2: { // Class ranges - classRangeCount: r.uint16, - classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount') - } -}); - -//############### -// Device Table # -//############### - -export let Device = new r.Struct({ - a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex - b: r.uint16, // endSize for Device, innerIndex for VariationIndex - deltaFormat: r.uint16 -}); - -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# - -let LookupRecord = new r.Struct({ - sequenceIndex: r.uint16, - lookupListIndex: r.uint16 -}); - -let Rule = new r.Struct({ - glyphCount: r.uint16, - lookupCount: r.uint16, - input: new r.Array(r.uint16, t => t.glyphCount - 1), - lookupRecords: new r.Array(LookupRecord, 'lookupCount') -}); - -let RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16); - -let ClassRule = new r.Struct({ - glyphCount: r.uint16, - lookupCount: r.uint16, - classes: new r.Array(r.uint16, t => t.glyphCount - 1), - lookupRecords: new r.Array(LookupRecord, 'lookupCount') -}); - -let ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16); - -export let Context = new r.VersionedStruct(r.uint16, { - 1: { // Simple context - coverage: new r.Pointer(r.uint16, Coverage), - ruleSetCount: r.uint16, - ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount') - }, - 2: { // Class-based context - coverage: new r.Pointer(r.uint16, Coverage), - classDef: new r.Pointer(r.uint16, ClassDef), - classSetCnt: r.uint16, - classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: r.uint16, - lookupCount: r.uint16, - coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'), - lookupRecords: new r.Array(LookupRecord, 'lookupCount') - } -}); - -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### - -let ChainRule = new r.Struct({ - backtrackGlyphCount: r.uint16, - backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'), - inputGlyphCount: r.uint16, - input: new r.Array(r.uint16, t => t.inputGlyphCount - 1), - lookaheadGlyphCount: r.uint16, - lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'), - lookupCount: r.uint16, - lookupRecords: new r.Array(LookupRecord, 'lookupCount') -}); - -let ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16); - -export let ChainingContext = new r.VersionedStruct(r.uint16, { - 1: { // Simple context glyph substitution - coverage: new r.Pointer(r.uint16, Coverage), - chainCount: r.uint16, - chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount') - }, - - 2: { // Class-based chaining context - coverage: new r.Pointer(r.uint16, Coverage), - backtrackClassDef: new r.Pointer(r.uint16, ClassDef), - inputClassDef: new r.Pointer(r.uint16, ClassDef), - lookaheadClassDef: new r.Pointer(r.uint16, ClassDef), - chainCount: r.uint16, - chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount') - }, - - 3: { // Coverage-based chaining context - backtrackGlyphCount: r.uint16, - backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'), - inputGlyphCount: r.uint16, - inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'), - lookaheadGlyphCount: r.uint16, - lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'), - lookupCount: r.uint16, - lookupRecords: new r.Array(LookupRecord, 'lookupCount') - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/post.js b/skills/flight-finder/node_modules/fontkit/src/tables/post.js deleted file mode 100644 index 04fdeab..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/post.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as r from 'restructure'; - -// PostScript information -export default new r.VersionedStruct(r.fixed32, { - header: { // these fields exist at the top of all versions - italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical. - underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline - underlineThickness: r.int16, // Suggested values for the underline thickness - isFixedPitch: r.uint32, // Whether the font is monospaced - minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font - maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font - minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font - maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - - 1: {}, // version 1 has no additional fields - - 2: { - numberOfGlyphs: r.uint16, - glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'), - names: new r.Array(new r.String(r.uint8)) - }, - - 2.5: { - numberOfGlyphs: r.uint16, - offsets: new r.Array(r.uint8, 'numberOfGlyphs') - }, - - 3: {}, // version 3 has no additional fields - - 4: { - map: new r.Array(r.uint32, t => t.parent.maxp.numGlyphs) - } -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/prep.js b/skills/flight-finder/node_modules/fontkit/src/tables/prep.js deleted file mode 100644 index 4b784a5..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/prep.js +++ /dev/null @@ -1,6 +0,0 @@ -import * as r from 'restructure'; - -// Set of instructions executed whenever the point size or font transformation change -export default new r.Struct({ - controlValueProgram: new r.Array(r.uint8) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/sbix.js b/skills/flight-finder/node_modules/fontkit/src/tables/sbix.js deleted file mode 100644 index 140824c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/sbix.js +++ /dev/null @@ -1,17 +0,0 @@ -import * as r from 'restructure'; - -let ImageTable = new r.Struct({ - ppem: r.uint16, - resolution: r.uint16, - imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), t => t.parent.parent.maxp.numGlyphs + 1) -}); - -// This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -export default new r.Struct({ - version: r.uint16, - flags: new r.Bitfield(r.uint16, ['renderOutlines']), - numImgTables: r.uint32, - imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/variations.js b/skills/flight-finder/node_modules/fontkit/src/tables/variations.js deleted file mode 100644 index 0aae61c..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/variations.js +++ /dev/null @@ -1,81 +0,0 @@ -import {Feature} from './opentype'; -import * as r from 'restructure'; - -/******************* - * Variation Store * - *******************/ - -let F2DOT14 = new r.Fixed(16, 'BE', 14); -let RegionAxisCoordinates = new r.Struct({ - startCoord: F2DOT14, - peakCoord: F2DOT14, - endCoord: F2DOT14 -}); - -let VariationRegionList = new r.Struct({ - axisCount: r.uint16, - regionCount: r.uint16, - variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); - -let DeltaSet = new r.Struct({ - shortDeltas: new r.Array(r.int16, t => t.parent.shortDeltaCount), - regionDeltas: new r.Array(r.int8, t => t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: t => t.shortDeltas.concat(t.regionDeltas) -}); - -let ItemVariationData = new r.Struct({ - itemCount: r.uint16, - shortDeltaCount: r.uint16, - regionIndexCount: r.uint16, - regionIndexes: new r.Array(r.uint16, 'regionIndexCount'), - deltaSets: new r.Array(DeltaSet, 'itemCount') -}); - -export let ItemVariationStore = new r.Struct({ - format: r.uint16, - variationRegionList: new r.Pointer(r.uint32, VariationRegionList), - variationDataCount: r.uint16, - itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount') -}); - -/********************** - * Feature Variations * - **********************/ - -let ConditionTable = new r.VersionedStruct(r.uint16, { - 1: { - axisIndex: r.uint16, - axisIndex: r.uint16, - filterRangeMinValue: F2DOT14, - filterRangeMaxValue: F2DOT14 - } -}); - -let ConditionSet = new r.Struct({ - conditionCount: r.uint16, - conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount') -}); - -let FeatureTableSubstitutionRecord = new r.Struct({ - featureIndex: r.uint16, - alternateFeatureTable: new r.Pointer(r.uint32, Feature, {type: 'parent'}) -}); - -let FeatureTableSubstitution = new r.Struct({ - version: r.fixed32, - substitutionCount: r.uint16, - substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount') -}); - -let FeatureVariationRecord = new r.Struct({ - conditionSet: new r.Pointer(r.uint32, ConditionSet, {type: 'parent'}), - featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {type: 'parent'}) -}); - -export let FeatureVariations = new r.Struct({ - majorVersion: r.uint16, - minorVersion: r.uint16, - featureVariationRecordCount: r.uint32, - featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount') -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/vhea.js b/skills/flight-finder/node_modules/fontkit/src/tables/vhea.js deleted file mode 100644 index 004cdf9..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/vhea.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as r from 'restructure'; - -// Vertical Header Table -export default new r.Struct({ - version: r.uint16, // Version number of the Vertical Header Table - ascent: r.int16, // The vertical typographic ascender for this font - descent: r.int16, // The vertical typographic descender for this font - lineGap: r.int16, // The vertical typographic line gap for this font - advanceHeightMax: r.int16, // The maximum advance height measurement found in the font - minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font - minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font - yMaxExtent: r.int16, - caretSlopeRise: r.int16, // Caret slope (rise/run) - caretSlopeRun: r.int16, - caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts - reserved: new r.Reserved(r.int16, 4), - metricDataFormat: r.int16, // Set to 0 - numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/tables/vmtx.js b/skills/flight-finder/node_modules/fontkit/src/tables/vmtx.js deleted file mode 100644 index 579da6b..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/tables/vmtx.js +++ /dev/null @@ -1,12 +0,0 @@ -import * as r from 'restructure'; - -let VmtxEntry = new r.Struct({ - advance: r.uint16, // The advance height of the glyph - bearing: r.int16 // The top sidebearing of the glyph -}); - -// Vertical Metrics Table -export default new r.Struct({ - metrics: new r.LazyArray(VmtxEntry, t => t.parent.vhea.numberOfMetrics), - bearings: new r.LazyArray(r.int16, t => t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); diff --git a/skills/flight-finder/node_modules/fontkit/src/utils.js b/skills/flight-finder/node_modules/fontkit/src/utils.js deleted file mode 100644 index 72db576..0000000 --- a/skills/flight-finder/node_modules/fontkit/src/utils.js +++ /dev/null @@ -1,62 +0,0 @@ -export function binarySearch(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while (min <= max) { - let mid = (min + max) >> 1; - let res = cmp(arr[mid]); - - if (res < 0) { - max = mid - 1; - } else if (res > 0) { - min = mid + 1; - } else { - return mid; - } - } - - return -1; -} - -export function range(index, end) { - let range = []; - while (index < end) { - range.push(index++); - } - return range; -} - -export const asciiDecoder = new TextDecoder('ascii'); - -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const LOOKUP = new Uint8Array(256); -for (let i = 0; i < CHARS.length; i++) { - LOOKUP[CHARS.charCodeAt(i)] = i; -} - -export function decodeBase64(base64) { - let bufferLength = base64.length * 0.75; - - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') { - bufferLength--; - } - } - - let bytes = new Uint8Array(bufferLength); - let p = 0; - - for (let i = 0, len = base64.length; i < len; i += 4) { - let encoded1 = LOOKUP[base64.charCodeAt(i)]; - let encoded2 = LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = LOOKUP[base64.charCodeAt(i + 3)]; - - bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); - bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); - bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); - } - - return bytes; -} diff --git a/skills/flight-finder/node_modules/get-tsconfig/LICENSE b/skills/flight-finder/node_modules/get-tsconfig/LICENSE deleted file mode 100644 index 51e4fd8..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Hiroki Osame - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/get-tsconfig/README.md b/skills/flight-finder/node_modules/get-tsconfig/README.md deleted file mode 100644 index b5861e3..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/README.md +++ /dev/null @@ -1,235 +0,0 @@ -

- -

-

- get-tsconfig -
-
-

- -Find and parse `tsconfig.json` files. - -### Features -- Zero dependency (not even TypeScript) -- Tested against TypeScript for correctness -- Supports comments & dangling commas in `tsconfig.json` -- Resolves [`extends`](https://www.typescriptlang.org/tsconfig/#extends) -- Fully typed `tsconfig.json` -- Validates and throws parsing errors -- Tiny! `7 kB` Minified + Gzipped - -
- -

- - -

-

Already a sponsor? Join the discussion in the Development repo!

- -## Install - -```bash -npm install get-tsconfig -``` - -## Why? -For TypeScript related tooling to correctly parse `tsconfig.json` file without depending on TypeScript. - -## API - -### getTsconfig(searchPath?, configName?, cache?) - -Searches for a tsconfig file (defaults to `tsconfig.json`) in the `searchPath` and parses it. (If you already know the tsconfig path, use [`parseTsconfig`](#parsetsconfigtsconfigpath-cache) instead). Returns `null` if a config file cannot be found, or an object containing the path and parsed TSConfig object if found. - -Returns: - -```ts -type TsconfigResult = { - - /** - * The path to the tsconfig.json file - */ - path: string - - /** - * The resolved tsconfig.json file - */ - config: TsConfigJsonResolved -} -``` - -#### searchPath -Type: `string` - -Default: `process.cwd()` - -Accepts a path to a file or directory to search up for a `tsconfig.json` file. - -#### configName -Type: `string` - -Default: `tsconfig.json` - -The file name of the TypeScript config file. - -#### cache -Type: `Map` - -Default: `new Map()` - -Optional cache for fs operations. - -#### Example - -```ts -import { getTsconfig } from 'get-tsconfig' - -// Searches for tsconfig.json starting in the current directory -console.log(getTsconfig()) - -// Find tsconfig.json from a TypeScript file path -console.log(getTsconfig('./path/to/index.ts')) - -// Find tsconfig.json from a directory file path -console.log(getTsconfig('./path/to/directory')) - -// Explicitly pass in tsconfig.json path -console.log(getTsconfig('./path/to/tsconfig.json')) - -// Search for jsconfig.json - https://code.visualstudio.com/docs/languages/jsconfig -console.log(getTsconfig('.', 'jsconfig.json')) -``` - ---- - -### parseTsconfig(tsconfigPath, cache?) - -Parse the tsconfig file provided. Used internally by `getTsconfig`. Returns the parsed tsconfig as `TsConfigJsonResolved`. - -#### tsconfigPath -Type: `string` - -Required path to the tsconfig file. - -#### cache -Type: `Map` - -Default: `new Map()` - -Optional cache for fs operations. - -#### Example - -```ts -import { parseTsconfig } from 'get-tsconfig' - -// Must pass in a path to an existing tsconfig.json file -console.log(parseTsconfig('./path/to/tsconfig.custom.json')) -``` - ---- - -### createFileMatcher(tsconfig: TsconfigResult, caseSensitivePaths?: boolean) - -Given a `tsconfig.json` file, it returns a file-matcher function that determines whether it should apply to a file path. - -```ts -type FileMatcher = (filePath: string) => TsconfigResult['config'] | undefined -``` - -#### tsconfig -Type: `TsconfigResult` - -Pass in the return value from `getTsconfig`, or a `TsconfigResult` object. - -#### caseSensitivePaths -Type: `boolean` - -By default, it uses [`is-fs-case-sensitive`](https://github.com/privatenumber/is-fs-case-sensitive) to detect whether the file-system is case-sensitive. - -Pass in `true` to make it case-sensitive. - -#### Example - -For example, if it's called with a `tsconfig.json` file that has `include`/`exclude`/`files` defined, the file-matcher will return the config for files that match `include`/`files`, and return `undefined` for files that don't match or match `exclude`. - -```ts -const tsconfig = getTsconfig() -const fileMatcher = tsconfig && createFileMatcher(tsconfig) - -/* - * Returns tsconfig.json if it matches the file, - * undefined if not - */ -const configForFile = fileMatcher?.('/path/to/file.ts') -const distCode = compileTypescript({ - code: sourceCode, - tsconfig: configForFile -}) -``` - ---- - -### createPathsMatcher(tsconfig: TsconfigResult) - -Given a tsconfig with [`compilerOptions.paths`](https://www.typescriptlang.org/tsconfig#paths) defined, it returns a matcher function. - -The matcher function accepts an [import specifier (the path to resolve)](https://nodejs.org/api/esm.html#terminology), checks it against `compilerOptions.paths`, and returns an array of possible paths to check: -```ts -function pathsMatcher(specifier: string): string[] -``` - -This function only returns possible paths and doesn't actually do any resolution. This helps increase compatibility wtih file/build systems which usually have their own resolvers. - -#### Example - -```ts -import { getTsconfig, createPathsMatcher } from 'get-tsconfig' - -const tsconfig = getTsconfig() -const pathsMatcher = createPathsMatcher(tsconfig) - -const exampleResolver = (request: string) => { - if (pathsMatcher) { - const tryPaths = pathsMatcher(request) - - // Check if paths in `tryPaths` exist - } -} -``` - -## FAQ - -### How can I use TypeScript to parse `tsconfig.json`? -This package is a re-implementation of TypeScript's `tsconfig.json` parser. - -However, if you already have TypeScript as a dependency, you can simply use it's API: - -```ts -import { - sys as tsSys, - findConfigFile, - readConfigFile, - parseJsonConfigFileContent -} from 'typescript' - -// Find tsconfig.json file -const tsconfigPath = findConfigFile(process.cwd(), tsSys.fileExists, 'tsconfig.json') - -// Read tsconfig.json file -const tsconfigFile = readConfigFile(tsconfigPath, tsSys.readFile) - -// Resolve extends -const parsedTsconfig = parseJsonConfigFileContent( - tsconfigFile.config, - tsSys, - path.dirname(tsconfigPath) -) -``` - -## Sponsors -

- - - -

diff --git a/skills/flight-finder/node_modules/get-tsconfig/dist/index.cjs b/skills/flight-finder/node_modules/get-tsconfig/dist/index.cjs deleted file mode 100755 index b27395d..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/dist/index.cjs +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";var Le=Object.defineProperty;var o=(e,t)=>Le(e,"name",{value:t,configurable:!0});var w=require("node:path"),re=require("node:fs"),he=require("node:module"),Ee=require("resolve-pkg-maps"),Be=require("fs"),xe=require("os"),Ie=require("path");function h(e){return e.startsWith("\\\\?\\")?e:e.replace(/\\/g,"/")}o(h,"slash");const Y=o(e=>{const t=re[e];return(s,...n)=>{const i=`${e}:${n.join(":")}`;let l=s==null?void 0:s.get(i);return l===void 0&&(l=Reflect.apply(t,re,n),s==null||s.set(i,l)),l}},"cacheFs"),E=Y("existsSync"),$e=Y("readFileSync"),G=Y("statSync"),fe=o((e,t,s)=>{for(;;){const n=w.posix.join(e,t);if(E(s,n))return n;const i=w.dirname(e);if(i===e)return;e=i}},"findUp"),Z=/^\.{1,2}(\/.*)?$/,K=o(e=>{const t=h(e);return Z.test(t)?t:`./${t}`},"normalizeRelativePath");function Ue(e,t=!1){const s=e.length;let n=0,i="",l=0,u=16,a=0,r=0,g=0,v=0,d=0;function _(c,y){let A=0,b=0;for(;A=48&&k<=57)b=b*16+k-48;else if(k>=65&&k<=70)b=b*16+k-65+10;else if(k>=97&&k<=102)b=b*16+k-97+10;else break;n++,A++}return A=s){c+=e.substring(y,n),d=2;break}const A=e.charCodeAt(n);if(A===34){c+=e.substring(y,n),n++;break}if(A===92){if(c+=e.substring(y,n),n++,n>=s){d=2;break}switch(e.charCodeAt(n++)){case 34:c+='"';break;case 92:c+="\\";break;case 47:c+="/";break;case 98:c+="\b";break;case 102:c+="\f";break;case 110:c+=` -`;break;case 114:c+="\r";break;case 116:c+=" ";break;case 117:const k=_(4);k>=0?c+=String.fromCharCode(k):d=4;break;default:d=5}y=n;continue}if(A>=0&&A<=31)if(M(A)){c+=e.substring(y,n),d=2;break}else d=6;n++}return c}o(L,"scanString");function T(){if(i="",d=0,l=n,r=a,v=g,n>=s)return l=s,u=17;let c=e.charCodeAt(n);if(O(c)){do n++,i+=String.fromCharCode(c),c=e.charCodeAt(n);while(O(c));return u=15}if(M(c))return n++,i+=String.fromCharCode(c),c===13&&e.charCodeAt(n)===10&&(n++,i+=` -`),a++,g=n,u=14;switch(c){case 123:return n++,u=1;case 125:return n++,u=2;case 91:return n++,u=3;case 93:return n++,u=4;case 58:return n++,u=6;case 44:return n++,u=5;case 34:return n++,i=L(),u=10;case 47:const y=n-1;if(e.charCodeAt(n+1)===47){for(n+=2;n=12&&c<=15);return c}return o(B,"scanNextNonTrivia"),{setPosition:p,getPosition:o(()=>n,"getPosition"),scan:t?B:T,getToken:o(()=>u,"getToken"),getTokenValue:o(()=>i,"getTokenValue"),getTokenOffset:o(()=>l,"getTokenOffset"),getTokenLength:o(()=>n-l,"getTokenLength"),getTokenStartLine:o(()=>r,"getTokenStartLine"),getTokenStartCharacter:o(()=>l-v,"getTokenStartCharacter"),getTokenError:o(()=>d,"getTokenError")}}o(Ue,"createScanner");function O(e){return e===32||e===9}o(O,"isWhiteSpace");function M(e){return e===10||e===13}o(M,"isLineBreak");function P(e){return e>=48&&e<=57}o(P,"isDigit");var ae;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(ae||(ae={})),new Array(20).fill(0).map((e,t)=>" ".repeat(t));const N=200;new Array(N).fill(0).map((e,t)=>` -`+" ".repeat(t)),new Array(N).fill(0).map((e,t)=>"\r"+" ".repeat(t)),new Array(N).fill(0).map((e,t)=>`\r -`+" ".repeat(t)),new Array(N).fill(0).map((e,t)=>` -`+" ".repeat(t)),new Array(N).fill(0).map((e,t)=>"\r"+" ".repeat(t)),new Array(N).fill(0).map((e,t)=>`\r -`+" ".repeat(t));var q;(function(e){e.DEFAULT={allowTrailingComma:!1}})(q||(q={}));function Pe(e,t=[],s=q.DEFAULT){let n=null,i=[];const l=[];function u(r){Array.isArray(i)?i.push(r):n!==null&&(i[n]=r)}return o(u,"onValue"),Ne(e,{onObjectBegin:o(()=>{const r={};u(r),l.push(i),i=r,n=null},"onObjectBegin"),onObjectProperty:o(r=>{n=r},"onObjectProperty"),onObjectEnd:o(()=>{i=l.pop()},"onObjectEnd"),onArrayBegin:o(()=>{const r=[];u(r),l.push(i),i=r,n=null},"onArrayBegin"),onArrayEnd:o(()=>{i=l.pop()},"onArrayEnd"),onLiteralValue:u,onError:o((r,g,v)=>{t.push({error:r,offset:g,length:v})},"onError")},s),i[0]}o(Pe,"parse$1");function Ne(e,t,s=q.DEFAULT){const n=Ue(e,!1),i=[];let l=0;function u(m){return m?()=>l===0&&m(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}o(u,"toNoArgVisit");function a(m){return m?j=>l===0&&m(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}o(a,"toOneArgVisit");function r(m){return m?j=>l===0&&m(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice()):()=>!0}o(r,"toOneArgVisitWithPath");function g(m){return m?()=>{l>0?l++:m(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice())===!1&&(l=1)}:()=>!0}o(g,"toBeginVisit");function v(m){return m?()=>{l>0&&l--,l===0&&m(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}o(v,"toEndVisit");const d=g(t.onObjectBegin),_=r(t.onObjectProperty),p=v(t.onObjectEnd),D=g(t.onArrayBegin),L=v(t.onArrayEnd),T=r(t.onLiteralValue),F=a(t.onSeparator),B=u(t.onComment),c=a(t.onError),y=s&&s.disallowComments,A=s&&s.allowTrailingComma;function b(){for(;;){const m=n.scan();switch(n.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:y||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(m){case 12:case 13:y?k(10):B();break;case 16:k(1);break;case 15:case 14:break;default:return m}}}o(b,"scanNext");function k(m,j=[],S=[]){if(c(m),j.length+S.length>0){let $=n.getToken();for(;$!==17;){if(j.indexOf($)!==-1){b();break}else if(S.indexOf($)!==-1)break;$=b()}}}o(k,"handleError");function R(m){const j=n.getTokenValue();return m?T(j):(_(j),i.push(j)),b(),!0}o(R,"parseString");function J(){switch(n.getToken()){case 11:const m=n.getTokenValue();let j=Number(m);isNaN(j)&&(k(2),j=0),T(j);break;case 7:T(null);break;case 8:T(!0);break;case 9:T(!1);break;default:return!1}return b(),!0}o(J,"parseLiteral");function W(){return n.getToken()!==10?(k(3,[],[2,5]),!1):(R(!1),n.getToken()===6?(F(":"),b(),U()||k(4,[],[2,5])):k(5,[],[2,5]),i.pop(),!0)}o(W,"parseProperty");function V(){d(),b();let m=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(m||k(4,[],[]),F(","),b(),n.getToken()===2&&A)break}else m&&k(6,[],[]);W()||k(4,[],[2,5]),m=!0}return p(),n.getToken()!==2?k(7,[2],[]):b(),!0}o(V,"parseObject");function z(){D(),b();let m=!0,j=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(j||k(4,[],[]),F(","),b(),n.getToken()===4&&A)break}else j&&k(6,[],[]);m?(i.push(0),m=!1):i[i.length-1]++,U()||k(4,[],[4,5]),j=!0}return L(),m||i.pop(),n.getToken()!==4?k(8,[4],[]):b(),!0}o(z,"parseArray");function U(){switch(n.getToken()){case 3:return z();case 1:return V();case 10:return R(!0);default:return J()}}return o(U,"parseValue"),b(),n.getToken()===17?s.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(n.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}o(Ne,"visit");var ce;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(ce||(ce={}));var ge;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(ge||(ge={}));const Re=Pe;var ke;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(ke||(ke={}));const we=o((e,t)=>Re($e(t,e,"utf8")),"readJsonc"),C=Symbol("implicitBaseUrl"),I="${configDir}",Se=o(()=>{const{findPnpApi:e}=he;return e&&e(process.cwd())},"getPnpApi"),ee=o((e,t,s,n)=>{const i=`resolveFromPackageJsonPath:${e}:${t}:${s}`;if(n!=null&&n.has(i))return n.get(i);const l=we(e,n);if(!l)return;let u=t||"tsconfig.json";if(!s&&l.exports)try{const[a]=Ee.resolveExports(l.exports,t,["require","types"]);u=a}catch{return!1}else!t&&l.tsconfig&&(u=l.tsconfig);return u=w.join(e,"..",u),n==null||n.set(i,u),u},"resolveFromPackageJsonPath"),ne="package.json",te="tsconfig.json",Me=o((e,t,s)=>{let n=e;if(e===".."&&(n=w.join(n,te)),e[0]==="."&&(n=w.resolve(t,n)),w.isAbsolute(n)){if(E(s,n)){if(G(s,n).isFile())return n}else if(!n.endsWith(".json")){const p=`${n}.json`;if(E(s,p))return p}return}const[i,...l]=e.split("/"),u=i[0]==="@"?`${i}/${l.shift()}`:i,a=l.join("/"),r=Se();if(r){const{resolveRequest:p}=r;try{if(u===e){const D=p(w.join(u,ne),t);if(D){const L=ee(D,a,!1,s);if(L&&E(s,L))return L}}else{let D;try{D=p(e,t,{extensions:[".json"]})}catch{D=p(w.join(e,te),t)}if(D)return D}}catch{}}const g=fe(w.resolve(t),w.join("node_modules",u),s);if(!g||!G(s,g).isDirectory())return;const v=w.join(g,ne);if(E(s,v)){const p=ee(v,a,!1,s);if(p===!1)return;if(p&&E(s,p)&&G(s,p).isFile())return p}const d=w.join(g,a),_=d.endsWith(".json");if(!_){const p=`${d}.json`;if(E(s,p))return p}if(E(s,d)){if(G(s,d).isDirectory()){const p=w.join(d,ne);if(E(s,p)){const L=ee(p,"",!0,s);if(L&&E(s,L))return L}const D=w.join(d,te);if(E(s,D))return D}else if(_)return d}},"resolveExtendsPath"),se=o((e,t)=>K(w.relative(e,t)),"pathRelative"),me=["files","include","exclude"],de=o((e,t,s)=>{const n=w.join(t,s),i=w.relative(e,n);return h(i)||"./"},"resolveAndRelativize"),Je=o((e,t,s)=>{const n=w.relative(e,t);if(!n)return s;const i=s.startsWith("./")?s.slice(2):s;return h(`${n}/${i}`)},"prefixPattern"),We=o((e,t,s,n)=>{const i=Me(e,t,n);if(!i)throw new Error(`File '${e}' not found.`);if(s.has(i))throw new Error(`Circularity detected while resolving configuration: ${i}`);s.add(i);const l=w.dirname(i),u=ve(i,n,s);delete u.references;const{compilerOptions:a}=u;if(a){const{baseUrl:r}=a;r&&!r.startsWith(I)&&(a.baseUrl=de(t,l,r));const{outDir:g}=a;g&&!g.startsWith(I)&&(a.outDir=de(t,l,g))}for(const r of me){const g=u[r];g&&(u[r]=g.map(v=>v.startsWith(I)?v:Je(t,l,v)))}return u},"resolveExtends"),be=["outDir","declarationDir"],ve=o((e,t,s=new Set)=>{let n;try{n=we(e,t)||{}}catch{throw new Error(`Cannot resolve tsconfig at path: ${e}`)}if(typeof n!="object")throw new SyntaxError(`Failed to parse tsconfig at: ${e}`);const i=w.dirname(e);if(n.compilerOptions){const{compilerOptions:l}=n;l.paths&&!l.baseUrl&&(l[C]=i)}if(n.extends){const l=Array.isArray(n.extends)?n.extends:[n.extends];delete n.extends;for(const u of l.reverse()){const a=We(u,i,new Set(s),t),r={...a,...n,compilerOptions:{...a.compilerOptions,...n.compilerOptions}};a.watchOptions&&(r.watchOptions={...a.watchOptions,...n.watchOptions}),n=r}}if(n.compilerOptions){const{compilerOptions:l}=n,u=["baseUrl","rootDir"];for(const a of u){const r=l[a];if(r&&!r.startsWith(I)){const g=w.resolve(i,r),v=se(i,g);l[a]=v}}for(const a of be){let r=l[a];r&&(Array.isArray(n.exclude)||(n.exclude=be.map(g=>l[g]).filter(Boolean)),r.startsWith(I)||(r=K(r)),l[a]=r)}}else n.compilerOptions={};if(n.include&&(n.include=n.include.map(h)),n.files&&(n.files=n.files.map(l=>l.startsWith(I)?l:K(l))),n.watchOptions){const{watchOptions:l}=n;l.excludeDirectories&&(l.excludeDirectories=l.excludeDirectories.map(u=>h(w.resolve(i,u)))),l.excludeFiles&&(l.excludeFiles=l.excludeFiles.map(u=>h(w.resolve(i,u)))),l.watchFile&&(l.watchFile=l.watchFile.toLowerCase()),l.watchDirectory&&(l.watchDirectory=l.watchDirectory.toLowerCase()),l.fallbackPolling&&(l.fallbackPolling=l.fallbackPolling.toLowerCase())}return n},"_parseTsconfig"),Q=o((e,t)=>{if(e.startsWith(I))return h(w.join(t,e.slice(I.length)))},"interpolateConfigDir"),Ve=["outDir","declarationDir","outFile","rootDir","baseUrl","tsBuildInfoFile"],ze=o(e=>{var t,s,n,i,l,u,a,r,g,v,d,_,p,D,L,T,F,B,c,y,A,b,k,R,J,W,V,z,U,m,j,S,$;if(e.strict){const f=["noImplicitAny","noImplicitThis","strictNullChecks","strictFunctionTypes","strictBindCallApply","strictPropertyInitialization","strictBuiltinIteratorReturn","alwaysStrict","useUnknownInCatchVariables"];for(const x of f)e[x]===void 0&&(e[x]=!0)}if(e.composite&&((t=e.declaration)!=null||(e.declaration=!0),(s=e.incremental)!=null||(e.incremental=!0)),e.target){let f=e.target.toLowerCase();f==="es2015"&&(f="es6"),e.target=f,f==="esnext"&&((n=e.module)!=null||(e.module="es6"),(i=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0)),(f==="es6"||f==="es2016"||f==="es2017"||f==="es2018"||f==="es2019"||f==="es2020"||f==="es2021"||f==="es2022"||f==="es2023"||f==="es2024")&&((l=e.module)!=null||(e.module="es6")),(f==="es2022"||f==="es2023"||f==="es2024")&&((u=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0))}if(e.module){let f=e.module.toLowerCase();if(f==="es2015"&&(f="es6"),e.module=f,(f==="es6"||f==="es2020"||f==="es2022"||f==="esnext"||f==="none"||f==="system"||f==="umd"||f==="amd")&&((a=e.moduleResolution)!=null||(e.moduleResolution="classic")),f==="system"&&((r=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),(f==="node16"||f==="node18"||f==="node20"||f==="nodenext"||f==="preserve")&&((g=e.esModuleInterop)!=null||(e.esModuleInterop=!0),(v=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),(f==="node16"||f==="node18"||f==="node20"||f==="nodenext")&&((d=e.moduleDetection)!=null||(e.moduleDetection="force")),f==="node16"&&((_=e.target)!=null||(e.target="es2022"),(p=e.moduleResolution)!=null||(e.moduleResolution="node16")),f==="node18"&&((D=e.target)!=null||(e.target="es2022"),(L=e.moduleResolution)!=null||(e.moduleResolution="node16")),f==="node20"&&((T=e.target)!=null||(e.target="es2023"),(F=e.moduleResolution)!=null||(e.moduleResolution="node16"),(B=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0)),f==="nodenext"&&((c=e.target)!=null||(e.target="esnext"),(y=e.moduleResolution)!=null||(e.moduleResolution="nodenext"),(A=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0)),f==="node16"||f==="node18"||f==="node20"||f==="nodenext"){const x=e.target;(x==="es3"||x==="es2022"||x==="es2023"||x==="es2024"||x==="esnext")&&((b=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0))}f==="preserve"&&((k=e.moduleResolution)!=null||(e.moduleResolution="bundler"))}if(e.moduleResolution){let f=e.moduleResolution.toLowerCase();f==="node"&&(f="node10"),e.moduleResolution=f,(f==="node16"||f==="nodenext"||f==="bundler")&&((R=e.resolvePackageJsonExports)!=null||(e.resolvePackageJsonExports=!0),(J=e.resolvePackageJsonImports)!=null||(e.resolvePackageJsonImports=!0)),f==="bundler"&&((W=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0),(V=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0))}e.jsx&&(e.jsx=e.jsx.toLowerCase()),e.moduleDetection&&(e.moduleDetection=e.moduleDetection.toLowerCase()),e.importsNotUsedAsValues&&(e.importsNotUsedAsValues=e.importsNotUsedAsValues.toLowerCase()),e.newLine&&(e.newLine=e.newLine.toLowerCase()),e.esModuleInterop&&((z=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),e.verbatimModuleSyntax&&((U=e.isolatedModules)!=null||(e.isolatedModules=!0),(m=e.preserveConstEnums)!=null||(e.preserveConstEnums=!0)),e.isolatedModules&&((j=e.preserveConstEnums)!=null||(e.preserveConstEnums=!0)),e.rewriteRelativeImportExtensions&&((S=e.allowImportingTsExtensions)!=null||(e.allowImportingTsExtensions=!0)),e.lib&&(e.lib=e.lib.map(f=>f.toLowerCase())),e.checkJs&&(($=e.allowJs)!=null||(e.allowJs=!0))},"normalizeCompilerOptions"),pe=o((e,t=new Map)=>{const s=w.resolve(e),n=ve(s,t),i=w.dirname(s),{compilerOptions:l}=n;if(l){for(const a of Ve){const r=l[a];if(r){const g=Q(r,i);l[a]=g?se(i,g):r}}for(const a of["rootDirs","typeRoots"]){const r=l[a];r&&(l[a]=r.map(g=>{const v=Q(g,i);return v?se(i,v):g}))}const{paths:u}=l;if(u)for(const a of Object.keys(u))u[a]=u[a].map(r=>{var g;return(g=Q(r,i))!=null?g:r});ze(l)}for(const u of me){const a=n[u];a&&(n[u]=a.map(r=>{var g;return(g=Q(r,i))!=null?g:r}))}return n},"parseTsconfig"),Ge=o((e=process.cwd(),t="tsconfig.json",s=new Map)=>{const n=fe(h(e),t,s);if(!n)return null;const i=pe(n,s);return{path:n,config:i}},"getTsconfig"),qe=/\*/g,Te=o((e,t)=>{const s=e.match(qe);if(s&&s.length>1)throw new Error(t)},"assertStarCount"),Qe=o(e=>{if(e.includes("*")){const[t,s]=e.split("*");return{prefix:t,suffix:s}}return e},"parsePattern"),He=o(({prefix:e,suffix:t},s)=>s.startsWith(e)&&s.endsWith(t),"isPatternMatch"),Xe=o((e,t,s)=>Object.entries(e).map(([n,i])=>(Te(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:Qe(n),substitutions:i.map(l=>{if(Te(l,`Substitution '${l}' in pattern '${n}' can have at most one '*' character.`),!t&&!Z.test(l)&&!w.isAbsolute(l))throw new Error("Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?");return w.resolve(s,l)})})),"parsePaths"),Ye=o(e=>{const{compilerOptions:t}=e.config;if(!t)return null;const{baseUrl:s,paths:n}=t;if(!s&&!n)return null;const i=C in t&&t[C],l=w.resolve(w.dirname(e.path),s||i||"."),u=n?Xe(n,s,l):[];return a=>{if(Z.test(a))return[];const r=[];for(const _ of u){if(_.pattern===a)return _.substitutions.map(h);typeof _.pattern!="string"&&r.push(_)}let g,v=-1;for(const _ of r)He(_.pattern,a)&&_.pattern.prefix.length>v&&(v=_.pattern.prefix.length,g=_);if(!g)return s?[h(w.join(l,a))]:[];const d=a.slice(g.pattern.prefix.length,a.length-g.pattern.suffix.length);return g.substitutions.map(_=>h(_.replace("*",d)))}},"createPathsMatcher");var Ze=Object.defineProperty,H=o((e,t)=>Ze(e,"name",{value:t,configurable:!0}),"s");const Ae=H(e=>{let t="";for(let s=0;s{const s=Ie.join(e,`.is-fs-case-sensitive-test-${process.pid}`);try{return t.writeFileSync(s,""),!t.existsSync(Ae(s))}finally{try{t.unlinkSync(s)}catch{}}},"checkDirectoryCaseWithWrite"),Ke=H((e,t,s)=>{try{return _e(e,s)}catch(n){if(t===void 0)return _e(xe.tmpdir(),s);throw n}},"checkDirectoryCaseWithFallback"),Oe=H((e,t=Be,s=!0)=>{const n=e!=null?e:process.cwd();if(s&&le.has(n))return le.get(n);let i;const l=Ae(n);return l!==n&&t.existsSync(n)?i=!t.existsSync(l):i=Ke(n,e,t),s&&le.set(n,i),i},"isFsCaseSensitive"),{join:ye}=w.posix,ie={ts:[".ts",".tsx",".d.ts"],cts:[".cts",".d.cts"],mts:[".mts",".d.mts"]},Ce=o(e=>{const t=[...ie.ts],s=[...ie.cts],n=[...ie.mts];return e!=null&&e.allowJs&&(t.push(".js",".jsx"),s.push(".cjs"),n.push(".mjs")),[...t,...s,...n]},"getSupportedExtensions"),en=o(e=>{const t=[];if(!e)return t;const{outDir:s,declarationDir:n}=e;return s&&t.push(s),n&&t.push(n),t},"getDefaultExcludeSpec"),je=o(e=>e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),"escapeForRegexp"),nn=["node_modules","bower_components","jspm_packages"],oe=`(?!(${nn.join("|")})(/|$))`,tn=/(?:^|\/)[^.*?]+$/,Fe="**/*",X="[^/]",ue="[^./]",De=process.platform==="win32",sn=o(({config:e,path:t},s=Oe())=>{if("extends"in e)throw new Error("tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.");if(!w.isAbsolute(t))throw new Error("The tsconfig path must be absolute");De&&(t=h(t));const n=w.dirname(t),{files:i,include:l,exclude:u,compilerOptions:a}=e,r=o(T=>w.isAbsolute(T)?T:ye(n,T),"resolvePattern"),g=i==null?void 0:i.map(r),v=Ce(a),d=s?"":"i",p=(u||en(a)).map(T=>{const F=r(T),B=je(F).replaceAll(String.raw`\*\*/`,"(.+/)?").replaceAll(String.raw`\*`,`${X}*`).replaceAll(String.raw`\?`,X);return new RegExp(`^${B}($|/)`,d)}),D=i||l?l:[Fe],L=D?D.map(T=>{let F=r(T);tn.test(F)&&(F=ye(F,Fe));const B=je(F).replaceAll(String.raw`/\*\*`,`(/${oe}${ue}${X}*)*?`).replaceAll(/(\/)?\\\*/g,(c,y)=>{const A=`(${ue}|(\\.(?!min\\.js$))?)*`;return y?`/${oe}${ue}${A}`:A}).replaceAll(/(\/)?\\\?/g,(c,y)=>{const A=X;return y?`/${oe}${A}`:A});return new RegExp(`^${B}$`,d)}):void 0;return T=>{if(!w.isAbsolute(T))throw new Error("filePath must be absolute");if(De&&(T=h(T)),g!=null&&g.includes(T))return e;if(!(!v.some(F=>T.endsWith(F))||p.some(F=>F.test(T)))&&L&&L.some(F=>F.test(T)))return e}},"createFilesMatcher");exports.createFilesMatcher=sn,exports.createPathsMatcher=Ye,exports.getTsconfig=Ge,exports.parseTsconfig=pe; diff --git a/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.cts b/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.cts deleted file mode 100644 index 5ab1518..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.cts +++ /dev/null @@ -1,2088 +0,0 @@ -/** -Returns a boolean for whether the given type is `any`. - -@link https://stackoverflow.com/a/49928360/1490091 - -Useful in type utilities, such as disallowing `any`s to be passed to a function. - -@example -``` -import type {IsAny} from 'type-fest'; - -const typedObject = {a: 1, b: 2} as const; -const anyObject: any = {a: 1, b: 2}; - -function get extends true ? {} : Record), K extends keyof O = keyof O>(obj: O, key: K) { - return obj[key]; -} - -const typedA = get(typedObject, 'a'); -//=> 1 - -const anyA = get(anyObject, 'a'); -//=> any -``` - -@category Type Guard -@category Utilities -*/ -type IsAny = 0 extends 1 & NoInfer ? true : false; - -/** -Returns a boolean for whether the given key is an optional key of type. - -This is useful when writing utility types or schema validators that need to differentiate `optional` keys. - -@example -``` -import type {IsOptionalKeyOf} from 'type-fest'; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -interface Admin { - name: string; - surname?: string; -} - -type T1 = IsOptionalKeyOf; -//=> true - -type T2 = IsOptionalKeyOf; -//=> false - -type T3 = IsOptionalKeyOf; -//=> boolean - -type T4 = IsOptionalKeyOf; -//=> false - -type T5 = IsOptionalKeyOf; -//=> boolean -``` - -@category Type Guard -@category Utilities -*/ -type IsOptionalKeyOf = - IsAny extends true ? never - : Key extends keyof Type - ? Type extends Record - ? false - : true - : false; - -/** -Extract all optional keys from the given type. - -This is useful when you want to create a new type that contains different type values for the optional keys only. - -@example -``` -import type {OptionalKeysOf, Except} from 'type-fest'; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -const REMOVE_FIELD = Symbol('remove field symbol'); -type UpdateOperation = Except, OptionalKeysOf> & { - [Key in OptionalKeysOf]?: Entity[Key] | typeof REMOVE_FIELD; -}; - -const update1: UpdateOperation = { - name: 'Alice' -}; - -const update2: UpdateOperation = { - name: 'Bob', - luckyNumber: REMOVE_FIELD -}; -``` - -@category Utilities -*/ -type OptionalKeysOf = - Type extends unknown // For distributing `Type` - ? (keyof {[Key in keyof Type as - IsOptionalKeyOf extends false - ? never - : Key - ]: never - }) & keyof Type // Intersect with `keyof Type` to ensure result of `OptionalKeysOf` is always assignable to `keyof Type` - : never; // Should never happen - -/** -Extract all required keys from the given type. - -This is useful when you want to create a new type that contains different type values for the required keys only or use the list of keys for validation purposes, etc... - -@example -``` -import type {RequiredKeysOf} from 'type-fest'; - -declare function createValidation = RequiredKeysOf>(field: Key, validator: (value: Entity[Key]) => boolean): ValidatorFn; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -const validator1 = createValidation('name', value => value.length < 25); -const validator2 = createValidation('surname', value => value.length < 25); -``` - -@category Utilities -*/ -type RequiredKeysOf = - Type extends unknown // For distributing `Type` - ? Exclude> - : never; // Should never happen - -/** -Returns a boolean for whether the given type is `never`. - -@link https://github.com/microsoft/TypeScript/issues/31751#issuecomment-498526919 -@link https://stackoverflow.com/a/53984913/10292952 -@link https://www.zhenghao.io/posts/ts-never - -Useful in type utilities, such as checking if something does not occur. - -@example -``` -import type {IsNever, And} from 'type-fest'; - -// https://github.com/andnp/SimplyTyped/blob/master/src/types/strings.ts -type AreStringsEqual = - And< - IsNever> extends true ? true : false, - IsNever> extends true ? true : false - >; - -type EndIfEqual = - AreStringsEqual extends true - ? never - : void; - -function endIfEqual(input: I, output: O): EndIfEqual { - if (input === output) { - process.exit(0); - } -} - -endIfEqual('abc', 'abc'); -//=> never - -endIfEqual('abc', '123'); -//=> void -``` - -@category Type Guard -@category Utilities -*/ -type IsNever = [T] extends [never] ? true : false; - -/** -An if-else-like type that resolves depending on whether the given `boolean` type is `true` or `false`. - -Use-cases: -- You can use this in combination with `Is*` types to create an if-else-like experience. For example, `If, 'is any', 'not any'>`. - -Note: -- Returns a union of if branch and else branch if the given type is `boolean` or `any`. For example, `If` will return `'Y' | 'N'`. -- Returns the else branch if the given type is `never`. For example, `If` will return `'N'`. - -@example -``` -import {If} from 'type-fest'; - -type A = If; -//=> 'yes' - -type B = If; -//=> 'no' - -type C = If; -//=> 'yes' | 'no' - -type D = If; -//=> 'yes' | 'no' - -type E = If; -//=> 'no' -``` - -@example -``` -import {If, IsAny, IsNever} from 'type-fest'; - -type A = If, 'is any', 'not any'>; -//=> 'not any' - -type B = If, 'is never', 'not never'>; -//=> 'is never' -``` - -@example -``` -import {If, IsEqual} from 'type-fest'; - -type IfEqual = If, IfBranch, ElseBranch>; - -type A = IfEqual; -//=> 'equal' - -type B = IfEqual; -//=> 'not equal' -``` - -@category Type Guard -@category Utilities -*/ -type If = - IsNever extends true - ? ElseBranch - : Type extends true - ? IfBranch - : ElseBranch; - -/** -Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability. - -@example -``` -import type {Simplify} from 'type-fest'; - -type PositionProps = { - top: number; - left: number; -}; - -type SizeProps = { - width: number; - height: number; -}; - -// In your editor, hovering over `Props` will show a flattened object with all the properties. -type Props = Simplify; -``` - -Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface. - -If the type definition must be an interface (perhaps it was defined in a third-party npm package), then the `value` can be defined as `const value: Simplify = ...`. Then `value` will be assignable to the `fn` argument. Or the `value` can be cast as `Simplify` if you can't re-declare the `value`. - -@example -``` -import type {Simplify} from 'type-fest'; - -interface SomeInterface { - foo: number; - bar?: string; - baz: number | undefined; -} - -type SomeType = { - foo: number; - bar?: string; - baz: number | undefined; -}; - -const literal = {foo: 123, bar: 'hello', baz: 456}; -const someType: SomeType = literal; -const someInterface: SomeInterface = literal; - -function fn(object: Record): void {} - -fn(literal); // Good: literal object type is sealed -fn(someType); // Good: type is sealed -fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened -fn(someInterface as Simplify); // Good: transform an `interface` into a `type` -``` - -@link https://github.com/microsoft/TypeScript/issues/15300 -@see SimplifyDeep -@category Object -*/ -type Simplify = {[KeyType in keyof T]: T[KeyType]} & {}; - -/** -Returns a boolean for whether the two given types are equal. - -@link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650 -@link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796 - -Use-cases: -- If you want to make a conditional branch based on the result of a comparison of two types. - -@example -``` -import type {IsEqual} from 'type-fest'; - -// This type returns a boolean for whether the given array includes the given item. -// `IsEqual` is used to compare the given array at position 0 and the given item and then return true if they are equal. -type Includes = - Value extends readonly [Value[0], ...infer rest] - ? IsEqual extends true - ? true - : Includes - : false; -``` - -@category Type Guard -@category Utilities -*/ -type IsEqual = - [A, B] extends [infer AA, infer BB] - ? [AA] extends [never] - ? [BB] extends [never] - ? true - : false - : [BB] extends [never] - ? false - : _IsEqual - : false; - -// This version fails the `equalWrappedTupleIntersectionToBeNeverAndNeverExpanded` test in `test-d/is-equal.ts`. -type _IsEqual = - (() => G extends A & G | G ? 1 : 2) extends - (() => G extends B & G | G ? 1 : 2) - ? true - : false; - -/** -Omit any index signatures from the given object type, leaving only explicitly defined properties. - -This is the counterpart of `PickIndexSignature`. - -Use-cases: -- Remove overly permissive signatures from third-party types. - -This type was taken from this [StackOverflow answer](https://stackoverflow.com/a/68261113/420747). - -It relies on the fact that an empty object (`{}`) is assignable to an object with just an index signature, like `Record`, but not to an object with explicitly defined keys, like `Record<'foo' | 'bar', unknown>`. - -(The actual value type, `unknown`, is irrelevant and could be any type. Only the key type matters.) - -``` -const indexed: Record = {}; // Allowed - -const keyed: Record<'foo', unknown> = {}; // Error -// => TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar -``` - -Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another: - -``` -type Indexed = {} extends Record - ? '✅ `{}` is assignable to `Record`' - : '❌ `{}` is NOT assignable to `Record`'; -// => '✅ `{}` is assignable to `Record`' - -type Keyed = {} extends Record<'foo' | 'bar', unknown> - ? "✅ `{}` is assignable to `Record<'foo' | 'bar', unknown>`" - : "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`"; -// => "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`" -``` - -Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`... - -``` -import type {OmitIndexSignature} from 'type-fest'; - -type OmitIndexSignature = { - [KeyType in keyof ObjectType // Map each key of `ObjectType`... - ]: ObjectType[KeyType]; // ...to its original value, i.e. `OmitIndexSignature == Foo`. -}; -``` - -...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record`)... - -``` -import type {OmitIndexSignature} from 'type-fest'; - -type OmitIndexSignature = { - [KeyType in keyof ObjectType - // Is `{}` assignable to `Record`? - as {} extends Record - ? ... // ✅ `{}` is assignable to `Record` - : ... // ❌ `{}` is NOT assignable to `Record` - ]: ObjectType[KeyType]; -}; -``` - -If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it. - -@example -``` -import type {OmitIndexSignature} from 'type-fest'; - -interface Example { - // These index signatures will be removed. - [x: string]: any - [x: number]: any - [x: symbol]: any - [x: `head-${string}`]: string - [x: `${string}-tail`]: string - [x: `head-${string}-tail`]: string - [x: `${bigint}`]: string - [x: `embedded-${number}`]: string - - // These explicitly defined keys will remain. - foo: 'bar'; - qux?: 'baz'; -} - -type ExampleWithoutIndexSignatures = OmitIndexSignature; -// => { foo: 'bar'; qux?: 'baz' | undefined; } -``` - -@see PickIndexSignature -@category Object -*/ -type OmitIndexSignature = { - [KeyType in keyof ObjectType as {} extends Record - ? never - : KeyType]: ObjectType[KeyType]; -}; - -/** -Pick only index signatures from the given object type, leaving out all explicitly defined properties. - -This is the counterpart of `OmitIndexSignature`. - -@example -``` -import type {PickIndexSignature} from 'type-fest'; - -declare const symbolKey: unique symbol; - -type Example = { - // These index signatures will remain. - [x: string]: unknown; - [x: number]: unknown; - [x: symbol]: unknown; - [x: `head-${string}`]: string; - [x: `${string}-tail`]: string; - [x: `head-${string}-tail`]: string; - [x: `${bigint}`]: string; - [x: `embedded-${number}`]: string; - - // These explicitly defined keys will be removed. - ['kebab-case-key']: string; - [symbolKey]: string; - foo: 'bar'; - qux?: 'baz'; -}; - -type ExampleIndexSignature = PickIndexSignature; -// { -// [x: string]: unknown; -// [x: number]: unknown; -// [x: symbol]: unknown; -// [x: `head-${string}`]: string; -// [x: `${string}-tail`]: string; -// [x: `head-${string}-tail`]: string; -// [x: `${bigint}`]: string; -// [x: `embedded-${number}`]: string; -// } -``` - -@see OmitIndexSignature -@category Object -*/ -type PickIndexSignature = { - [KeyType in keyof ObjectType as {} extends Record - ? KeyType - : never]: ObjectType[KeyType]; -}; - -// Merges two objects without worrying about index signatures. -type SimpleMerge = { - [Key in keyof Destination as Key extends keyof Source ? never : Key]: Destination[Key]; -} & Source; - -/** -Merge two types into a new type. Keys of the second type overrides keys of the first type. - -@example -``` -import type {Merge} from 'type-fest'; - -interface Foo { - [x: string]: unknown; - [x: number]: unknown; - foo: string; - bar: symbol; -} - -type Bar = { - [x: number]: number; - [x: symbol]: unknown; - bar: Date; - baz: boolean; -}; - -export type FooBar = Merge; -// => { -// [x: string]: unknown; -// [x: number]: number; -// [x: symbol]: unknown; -// foo: string; -// bar: Date; -// baz: boolean; -// } -``` - -@category Object -*/ -type Merge = -Simplify< - SimpleMerge, PickIndexSignature> - & SimpleMerge, OmitIndexSignature> ->; - -/** -Merges user specified options with default options. - -@example -``` -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: false}; -type SpecifiedOptions = {leavesOnly: true}; - -type Result = ApplyDefaultOptions; -//=> {maxRecursionDepth: 10; leavesOnly: true} -``` - -@example -``` -// Complains if default values are not provided for optional options - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10}; -type SpecifiedOptions = {}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~~~~ -// Property 'leavesOnly' is missing in type 'DefaultPathsOptions' but required in type '{ maxRecursionDepth: number; leavesOnly: boolean; }'. -``` - -@example -``` -// Complains if an option's default type does not conform to the expected type - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: 'no'}; -type SpecifiedOptions = {}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~~~~ -// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'. -``` - -@example -``` -// Complains if an option's specified type does not conform to the expected type - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: false}; -type SpecifiedOptions = {leavesOnly: 'yes'}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~ -// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'. -``` -*/ -type ApplyDefaultOptions< - Options extends object, - Defaults extends Simplify, RequiredKeysOf> & Partial, never>>>, - SpecifiedOptions extends Options, -> = - If, Defaults, - If, Defaults, - Simplify ? undefined extends SpecifiedOptions[Key] ? never : Key : Key - ]: SpecifiedOptions[Key] - }> & Required>>>; - -/** -Filter out keys from an object. - -Returns `never` if `Exclude` is strictly equal to `Key`. -Returns `never` if `Key` extends `Exclude`. -Returns `Key` otherwise. - -@example -``` -type Filtered = Filter<'foo', 'foo'>; -//=> never -``` - -@example -``` -type Filtered = Filter<'bar', string>; -//=> never -``` - -@example -``` -type Filtered = Filter<'bar', 'foo'>; -//=> 'bar' -``` - -@see {Except} -*/ -type Filter = IsEqual extends true ? never : (KeyType extends ExcludeType ? never : KeyType); - -type ExceptOptions = { - /** - Disallow assigning non-specified properties. - - Note that any omitted properties in the resulting type will be present in autocomplete as `undefined`. - - @default false - */ - requireExactProps?: boolean; -}; - -type DefaultExceptOptions = { - requireExactProps: false; -}; - -/** -Create a type from an object type without certain keys. - -We recommend setting the `requireExactProps` option to `true`. - -This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically. - -This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)). - -@example -``` -import type {Except} from 'type-fest'; - -type Foo = { - a: number; - b: string; -}; - -type FooWithoutA = Except; -//=> {b: string} - -const fooWithoutA: FooWithoutA = {a: 1, b: '2'}; -//=> errors: 'a' does not exist in type '{ b: string; }' - -type FooWithoutB = Except; -//=> {a: number} & Partial> - -const fooWithoutB: FooWithoutB = {a: 1, b: '2'}; -//=> errors at 'b': Type 'string' is not assignable to type 'undefined'. - -// The `Omit` utility type doesn't work when omitting specific keys from objects containing index signatures. - -// Consider the following example: - -type UserData = { - [metadata: string]: string; - email: string; - name: string; - role: 'admin' | 'user'; -}; - -// `Omit` clearly doesn't behave as expected in this case: -type PostPayload = Omit; -//=> type PostPayload = { [x: string]: string; [x: number]: string; } - -// In situations like this, `Except` works better. -// It simply removes the `email` key while preserving all the other keys. -type PostPayload = Except; -//=> type PostPayload = { [x: string]: string; name: string; role: 'admin' | 'user'; } -``` - -@category Object -*/ -type Except = - _Except>; - -type _Except> = { - [KeyType in keyof ObjectType as Filter]: ObjectType[KeyType]; -} & (Options['requireExactProps'] extends true - ? Partial> - : {}); - -declare namespace TsConfigJson { - namespace CompilerOptions { - type JSX = - | 'preserve' - | 'react' - | 'react-jsx' - | 'react-jsxdev' - | 'react-native'; - - type Module = - | 'CommonJS' - | 'AMD' - | 'System' - | 'UMD' - | 'ES6' - | 'ES2015' - | 'ES2020' - | 'ES2022' - | 'ESNext' - | 'Node16' - | 'Node18' - | 'Node20' - | 'NodeNext' - | 'Preserve' - | 'None' - // Lowercase alternatives - | 'commonjs' - | 'amd' - | 'system' - | 'umd' - | 'es6' - | 'es2015' - | 'es2020' - | 'es2022' - | 'esnext' - | 'node16' - | 'node18' - | 'node20' - | 'nodenext' - | 'preserve' - | 'none'; - - type NewLine = - | 'CRLF' - | 'LF' - // Lowercase alternatives - | 'crlf' - | 'lf'; - - type Target = - | 'ES3' - | 'ES5' - | 'ES6' - | 'ES2015' - | 'ES2016' - | 'ES2017' - | 'ES2018' - | 'ES2019' - | 'ES2020' - | 'ES2021' - | 'ES2022' - | 'ES2023' - | 'ES2024' - | 'ESNext' - // Lowercase alternatives - | 'es3' - | 'es5' - | 'es6' - | 'es2015' - | 'es2016' - | 'es2017' - | 'es2018' - | 'es2019' - | 'es2020' - | 'es2021' - | 'es2022' - | 'es2023' - | 'es2024' - | 'esnext'; - - type Lib = - | 'ES5' - | 'ES6' - | 'ES7' - | 'ES2015' - | 'ES2015.Collection' - | 'ES2015.Core' - | 'ES2015.Generator' - | 'ES2015.Iterable' - | 'ES2015.Promise' - | 'ES2015.Proxy' - | 'ES2015.Reflect' - | 'ES2015.Symbol.WellKnown' - | 'ES2015.Symbol' - | 'ES2016' - | 'ES2016.Array.Include' - | 'ES2017' - | 'ES2017.ArrayBuffer' - | 'ES2017.Date' - | 'ES2017.Intl' - | 'ES2017.Object' - | 'ES2017.SharedMemory' - | 'ES2017.String' - | 'ES2017.TypedArrays' - | 'ES2018' - | 'ES2018.AsyncGenerator' - | 'ES2018.AsyncIterable' - | 'ES2018.Intl' - | 'ES2018.Promise' - | 'ES2018.Regexp' - | 'ES2019' - | 'ES2019.Array' - | 'ES2019.Intl' - | 'ES2019.Object' - | 'ES2019.String' - | 'ES2019.Symbol' - | 'ES2020' - | 'ES2020.BigInt' - | 'ES2020.Date' - | 'ES2020.Intl' - | 'ES2020.Number' - | 'ES2020.Promise' - | 'ES2020.SharedMemory' - | 'ES2020.String' - | 'ES2020.Symbol.WellKnown' - | 'ES2021' - | 'ES2021.Intl' - | 'ES2021.Promise' - | 'ES2021.String' - | 'ES2021.WeakRef' - | 'ES2022' - | 'ES2022.Array' - | 'ES2022.Error' - | 'ES2022.Intl' - | 'ES2022.Object' - | 'ES2022.RegExp' - | 'ES2022.SharedMemory' - | 'ES2022.String' - | 'ES2023' - | 'ES2023.Array' - | 'ES2023.Collection' - | 'ES2023.Intl' - | 'ES2024' - | 'ES2024.ArrayBuffer' - | 'ES2024.Collection' - | 'ES2024.Object' - | 'ES2024.Promise' - | 'ES2024.Regexp' - | 'ES2024.SharedMemory' - | 'ES2024.String' - | 'ESNext' - | 'ESNext.Array' - | 'ESNext.AsyncIterable' - | 'ESNext.BigInt' - | 'ESNext.Collection' - | 'ESNext.Decorators' - | 'ESNext.Disposable' - | 'ESNext.Error' - | 'ESNext.Intl' - | 'ESNext.Iterator' - | 'ESNext.Object' - | 'ESNext.Promise' - | 'ESNext.Regexp' - | 'ESNext.String' - | 'ESNext.Symbol' - | 'ESNext.WeakRef' - | 'DOM' - | 'DOM.AsyncIterable' - | 'DOM.Iterable' - | 'Decorators' - | 'Decorators.Legacy' - | 'ScriptHost' - | 'WebWorker' - | 'WebWorker.AsyncIterable' - | 'WebWorker.ImportScripts' - | 'WebWorker.Iterable' - // Lowercase alternatives - | 'es5' - | 'es6' - | 'es7' - | 'es2015' - | 'es2015.collection' - | 'es2015.core' - | 'es2015.generator' - | 'es2015.iterable' - | 'es2015.promise' - | 'es2015.proxy' - | 'es2015.reflect' - | 'es2015.symbol.wellknown' - | 'es2015.symbol' - | 'es2016' - | 'es2016.array.include' - | 'es2017' - | 'es2017.arraybuffer' - | 'es2017.date' - | 'es2017.intl' - | 'es2017.object' - | 'es2017.sharedmemory' - | 'es2017.string' - | 'es2017.typedarrays' - | 'es2018' - | 'es2018.asyncgenerator' - | 'es2018.asynciterable' - | 'es2018.intl' - | 'es2018.promise' - | 'es2018.regexp' - | 'es2019' - | 'es2019.array' - | 'es2019.intl' - | 'es2019.object' - | 'es2019.string' - | 'es2019.symbol' - | 'es2020' - | 'es2020.bigint' - | 'es2020.date' - | 'es2020.intl' - | 'es2020.number' - | 'es2020.promise' - | 'es2020.sharedmemory' - | 'es2020.string' - | 'es2020.symbol.wellknown' - | 'es2021' - | 'es2021.intl' - | 'es2021.promise' - | 'es2021.string' - | 'es2021.weakref' - | 'es2022' - | 'es2022.array' - | 'es2022.error' - | 'es2022.intl' - | 'es2022.object' - | 'es2022.regexp' - | 'es2022.sharedmemory' - | 'es2022.string' - | 'es2023' - | 'es2023.array' - | 'es2023.collection' - | 'es2023.intl' - | 'es2024' - | 'es2024.arraybuffer' - | 'es2024.collection' - | 'es2024.object' - | 'es2024.promise' - | 'es2024.regexp' - | 'es2024.sharedmemory' - | 'es2024.string' - | 'esnext' - | 'esnext.array' - | 'esnext.asynciterable' - | 'esnext.bigint' - | 'esnext.collection' - | 'esnext.decorators' - | 'esnext.disposable' - | 'esnext.error' - | 'esnext.intl' - | 'esnext.iterator' - | 'esnext.object' - | 'esnext.promise' - | 'esnext.regexp' - | 'esnext.string' - | 'esnext.symbol' - | 'esnext.weakref' - | 'dom' - | 'dom.asynciterable' - | 'dom.iterable' - | 'decorators' - | 'decorators.legacy' - | 'scripthost' - | 'webworker' - | 'webworker.asynciterable' - | 'webworker.importscripts' - | 'webworker.iterable'; - - type Plugin = { - /** - Plugin name. - */ - name: string; - }; - - type ImportsNotUsedAsValues = - | 'remove' - | 'preserve' - | 'error'; - - type FallbackPolling = - | 'fixedPollingInterval' - | 'priorityPollingInterval' - | 'dynamicPriorityPolling' - | 'fixedInterval' - | 'priorityInterval' - | 'dynamicPriority' - | 'fixedChunkSize'; - - type WatchDirectory = - | 'useFsEvents' - | 'fixedPollingInterval' - | 'dynamicPriorityPolling' - | 'fixedChunkSizePolling'; - - type WatchFile = - | 'fixedPollingInterval' - | 'priorityPollingInterval' - | 'dynamicPriorityPolling' - | 'useFsEvents' - | 'useFsEventsOnParentDirectory' - | 'fixedChunkSizePolling'; - - type ModuleResolution = - | 'classic' - | 'node' - | 'node10' - | 'node16' - | 'nodenext' - | 'bundler' - // Pascal-cased alternatives - | 'Classic' - | 'Node' - | 'Node10' - | 'Node16' - | 'NodeNext' - | 'Bundler'; - - type ModuleDetection = - | 'auto' - | 'legacy' - | 'force'; - - type IgnoreDeprecations = '5.0'; - } - - type CompilerOptions = { - /** - The character set of the input files. - - @default 'utf8' - @deprecated This option will be removed in TypeScript 5.5. - */ - charset?: string; - - /** - Enables building for project references. - - @default true - */ - composite?: boolean; - - /** - Generates corresponding d.ts files. - - @default false - */ - declaration?: boolean; - - /** - Specify output directory for generated declaration files. - */ - declarationDir?: string; - - /** - Show diagnostic information. - - @default false - */ - diagnostics?: boolean; - - /** - Reduce the number of projects loaded automatically by TypeScript. - - @default false - */ - disableReferencedProjectLoad?: boolean; - - /** - Enforces using indexed accessors for keys declared using an indexed type. - - @default false - */ - noPropertyAccessFromIndexSignature?: boolean; - - /** - Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. - - @default false - */ - emitBOM?: boolean; - - /** - Only emit `.d.ts` declaration files. - - @default false - */ - emitDeclarationOnly?: boolean; - - /** - Differentiate between undefined and not present when type checking. - - @default false - */ - exactOptionalPropertyTypes?: boolean; - - /** - Enable incremental compilation. - - @default `composite` - */ - incremental?: boolean; - - /** - Specify file to store incremental compilation information. - - @default '.tsbuildinfo' - */ - tsBuildInfoFile?: string; - - /** - Emit a single file with source maps instead of having a separate file. - - @default false - */ - inlineSourceMap?: boolean; - - /** - Emit the source alongside the sourcemaps within a single file. - - Requires `--inlineSourceMap` to be set. - - @default false - */ - inlineSources?: boolean; - - /** - Specify what JSX code is generated. - - @default 'preserve' - */ - jsx?: CompilerOptions.JSX; - - /** - Specifies the object invoked for `createElement` and `__spread` when targeting `'react'` JSX emit. - - @default 'React' - */ - reactNamespace?: string; - - /** - Specify the JSX factory function to use when targeting React JSX emit, e.g. `React.createElement` or `h`. - - @default 'React.createElement' - */ - jsxFactory?: string; - - /** - Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. - - @default 'React.Fragment' - */ - jsxFragmentFactory?: string; - - /** - Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`. - - @default 'react' - */ - jsxImportSource?: string; - - /** - Print names of files part of the compilation. - - @default false - */ - listFiles?: boolean; - - /** - Specifies the location where debugger should locate map files instead of generated locations. - */ - mapRoot?: string; - - /** - Specify module code generation: 'None', 'CommonJS', 'AMD', 'System', 'UMD', 'ES6', 'ES2015' or 'ESNext'. Only 'AMD' and 'System' can be used in conjunction with `--outFile`. 'ES6' and 'ES2015' values may be used when targeting 'ES5' or lower. - - @default ['ES3', 'ES5'].includes(target) ? 'CommonJS' : 'ES6' - */ - module?: CompilerOptions.Module; - - /** - Specifies module resolution strategy: 'node' (Node) or 'classic' (TypeScript pre 1.6). - - @default ['AMD', 'System', 'ES6'].includes(module) ? 'classic' : 'node' - */ - moduleResolution?: CompilerOptions.ModuleResolution; - - /** - Specifies the end of line sequence to be used when emitting files: 'crlf' (Windows) or 'lf' (Unix). - - @default 'LF' - */ - newLine?: CompilerOptions.NewLine; - - /** - Disable full type checking (only critical parse and emit errors will be reported). - - @default false - */ - noCheck?: boolean; - - /** - Do not emit output. - - @default false - */ - noEmit?: boolean; - - /** - Do not generate custom helper functions like `__extends` in compiled output. - - @default false - */ - noEmitHelpers?: boolean; - - /** - Do not emit outputs if any type checking errors were reported. - - @default false - */ - noEmitOnError?: boolean; - - /** - Warn on expressions and declarations with an implied 'any' type. - - @default false - */ - noImplicitAny?: boolean; - - /** - Raise error on 'this' expressions with an implied any type. - - @default false - */ - noImplicitThis?: boolean; - - /** - Report errors on unused locals. - - @default false - */ - noUnusedLocals?: boolean; - - /** - Report errors on unused parameters. - - @default false - */ - noUnusedParameters?: boolean; - - /** - Do not include the default library file (lib.d.ts). - - @default false - */ - noLib?: boolean; - - /** - Do not add triple-slash references or module import targets to the list of compiled files. - - @default false - */ - noResolve?: boolean; - - /** - Disable strict checking of generic signatures in function types. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - noStrictGenericChecks?: boolean; - - /** - @deprecated use `skipLibCheck` instead. - */ - skipDefaultLibCheck?: boolean; - - /** - Skip type checking of declaration files. - - @default false - */ - skipLibCheck?: boolean; - - /** - Concatenate and emit output to single file. - */ - outFile?: string; - - /** - Redirect output structure to the directory. - */ - outDir?: string; - - /** - Do not erase const enum declarations in generated code. - - @default false - */ - preserveConstEnums?: boolean; - - /** - Do not resolve symlinks to their real path; treat a symlinked file like a real one. - - @default false - */ - preserveSymlinks?: boolean; - - /** - Keep outdated console output in watch mode instead of clearing the screen. - - @default false - */ - preserveWatchOutput?: boolean; - - /** - Stylize errors and messages using color and context (experimental). - - @default true // Unless piping to another program or redirecting output to a file. - */ - pretty?: boolean; - - /** - Do not emit comments to output. - - @default false - */ - removeComments?: boolean; - - /** - Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. - - @default false - */ - rewriteRelativeImportExtensions?: boolean; - - /** - Specifies the root directory of input files. - - Use to control the output directory structure with `--outDir`. - */ - rootDir?: string; - - /** - Unconditionally emit imports for unresolved files. - - @default false - */ - isolatedModules?: boolean; - - /** - Require sufficient annotation on exports so other tools can trivially generate declaration files. - - @default false - */ - isolatedDeclarations?: boolean; - - /** - Generates corresponding '.map' file. - - @default false - */ - sourceMap?: boolean; - - /** - Specifies the location where debugger should locate TypeScript files instead of source locations. - */ - sourceRoot?: string; - - /** - Suppress excess property checks for object literals. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - suppressExcessPropertyErrors?: boolean; - - /** - Suppress noImplicitAny errors for indexing objects lacking index signatures. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - suppressImplicitAnyIndexErrors?: boolean; - - /** - Do not emit declarations for code that has an `@internal` annotation. - */ - stripInternal?: boolean; - - /** - Specify ECMAScript target version. - - @default 'es3' - */ - target?: CompilerOptions.Target; - - /** - Default catch clause variables as `unknown` instead of `any`. - - @default false - */ - useUnknownInCatchVariables?: boolean; - - /** - Watch input files. - - @default false - @deprecated Use watchOptions instead. - */ - watch?: boolean; - - /** - Specify the polling strategy to use when the system runs out of or doesn't support native file watchers. - - @deprecated Use watchOptions.fallbackPolling instead. - */ - fallbackPolling?: CompilerOptions.FallbackPolling; - - /** - Specify the strategy for watching directories under systems that lack recursive file-watching functionality. - - @default 'useFsEvents' - @deprecated Use watchOptions.watchDirectory instead. - */ - watchDirectory?: CompilerOptions.WatchDirectory; - - /** - Specify the strategy for watching individual files. - - @default 'useFsEvents' - @deprecated Use watchOptions.watchFile instead. - */ - watchFile?: CompilerOptions.WatchFile; - - /** - Enables experimental support for ES7 decorators. - - @default false - */ - experimentalDecorators?: boolean; - - /** - Emit design-type metadata for decorated declarations in source. - - @default false - */ - emitDecoratorMetadata?: boolean; - - /** - Do not report errors on unused labels. - - @default false - */ - allowUnusedLabels?: boolean; - - /** - Report error when not all code paths in function return a value. - - @default false - */ - noImplicitReturns?: boolean; - - /** - Add `undefined` to a type when accessed using an index. - - @default false - */ - noUncheckedIndexedAccess?: boolean; - - /** - Report error if failed to find a source file for a side effect import. - - @default false - */ - noUncheckedSideEffectImports?: boolean; - - /** - Report errors for fallthrough cases in switch statement. - - @default false - */ - noFallthroughCasesInSwitch?: boolean; - - /** - Ensure overriding members in derived classes are marked with an override modifier. - - @default false - */ - noImplicitOverride?: boolean; - - /** - Do not report errors on unreachable code. - - @default false - */ - allowUnreachableCode?: boolean; - - /** - Disallow inconsistently-cased references to the same file. - - @default true - */ - forceConsistentCasingInFileNames?: boolean; - - /** - Emit a v8 CPU profile of the compiler run for debugging. - - @default 'profile.cpuprofile' - */ - generateCpuProfile?: string; - - /** - Generates an event trace and a list of types. - */ - generateTrace?: boolean; - - /** - Base directory to resolve non-relative module names. - */ - baseUrl?: string; - - /** - Specify path mapping to be computed relative to baseUrl option. - */ - paths?: Record; - - /** - List of TypeScript language server plugins to load. - */ - plugins?: CompilerOptions.Plugin[]; - - /** - Specify list of root directories to be used when resolving modules. - */ - rootDirs?: string[]; - - /** - Specify list of directories for type definition files to be included. - */ - typeRoots?: string[]; - - /** - Type declaration files to be included in compilation. - */ - types?: string[]; - - /** - Enable tracing of the name resolution process. - - @default false - */ - traceResolution?: boolean; - - /** - Allow javascript files to be compiled. - - @default false - */ - allowJs?: boolean; - - /** - Do not truncate error messages. - - @default false - */ - noErrorTruncation?: boolean; - - /** - Allow default imports from modules with no default export. This does not affect code emit, just typechecking. - - @default module === 'system' || esModuleInterop - */ - allowSyntheticDefaultImports?: boolean; - - /** - Do not emit `'use strict'` directives in module output. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - noImplicitUseStrict?: boolean; - - /** - Enable to list all emitted files. - - @default false - */ - listEmittedFiles?: boolean; - - /** - Disable size limit for JavaScript project. - - @default false - */ - disableSizeLimit?: boolean; - - /** - List of library files to be included in the compilation. - */ - lib?: CompilerOptions.Lib[]; - - /** - Enable strict null checks. - - @default false - */ - strictNullChecks?: boolean; - - /** - The maximum dependency depth to search under `node_modules` and load JavaScript files. Only applicable with `--allowJs`. - - @default 0 - */ - maxNodeModuleJsDepth?: number; - - /** - Import emit helpers (e.g. `__extends`, `__rest`, etc..) from tslib. - - @default false - */ - importHelpers?: boolean; - - /** - Specify emit/checking behavior for imports that are only used for types. - - @default 'remove' - @deprecated Use `verbatimModuleSyntax` instead. - */ - importsNotUsedAsValues?: CompilerOptions.ImportsNotUsedAsValues; - - /** - Parse in strict mode and emit `'use strict'` for each source file. - - @default false - */ - alwaysStrict?: boolean; - - /** - Enable all strict type checking options. - - @default false - */ - strict?: boolean; - - /** - Enable stricter checking of of the `bind`, `call`, and `apply` methods on functions. - - @default false - */ - strictBindCallApply?: boolean; - - /** - Provide full support for iterables in `for-of`, spread, and destructuring when targeting `ES5` or `ES3`. - - @default false - */ - downlevelIteration?: boolean; - - /** - Report errors in `.js` files. - - @default false - */ - checkJs?: boolean; - - /** - Built-in iterators are instantiated with a `TReturn` type of undefined instead of `any`. - - @default false - */ - strictBuiltinIteratorReturn?: boolean; - - /** - Disable bivariant parameter checking for function types. - - @default false - */ - strictFunctionTypes?: boolean; - - /** - Ensure non-undefined class properties are initialized in the constructor. - - @default false - */ - strictPropertyInitialization?: boolean; - - /** - Emit `__importStar` and `__importDefault` helpers for runtime Babel ecosystem compatibility and enable `--allowSyntheticDefaultImports` for typesystem compatibility. - - @default false - */ - esModuleInterop?: boolean; - - /** - Allow accessing UMD globals from modules. - - @default false - */ - allowUmdGlobalAccess?: boolean; - - /** - Resolve `keyof` to string valued property names only (no numbers or symbols). - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - keyofStringsOnly?: boolean; - - /** - Emit ECMAScript standard class fields. - - @default false - */ - useDefineForClassFields?: boolean; - - /** - Generates a sourcemap for each corresponding `.d.ts` file. - - @default false - */ - declarationMap?: boolean; - - /** - Include modules imported with `.json` extension. - - @default false - */ - resolveJsonModule?: boolean; - - /** - Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it. - - @default false - */ - assumeChangesOnlyAffectDirectDependencies?: boolean; - - /** - Output more detailed compiler performance information after building. - - @default false - */ - extendedDiagnostics?: boolean; - - /** - Print names of files that are part of the compilation and then stop processing. - - @default false - */ - listFilesOnly?: boolean; - - /** - Disable preferring source files instead of declaration files when referencing composite projects. - - @default true if composite, false otherwise - */ - disableSourceOfProjectReferenceRedirect?: boolean; - - /** - Opt a project out of multi-project reference checking when editing. - - @default false - */ - disableSolutionSearching?: boolean; - - /** - Print names of files which TypeScript sees as a part of your project and the reason they are part of the compilation. - - @default false - */ - explainFiles?: boolean; - - /** - Preserve unused imported values in the JavaScript output that would otherwise be removed. - - @default true - @deprecated Use `verbatimModuleSyntax` instead. - */ - preserveValueImports?: boolean; - - /** - List of file name suffixes to search when resolving a module. - */ - moduleSuffixes?: string[]; - - /** - Control what method is used to detect module-format JS files. - - @default 'auto' - */ - moduleDetection?: CompilerOptions.ModuleDetection; - - /** - Allows TypeScript files to import each other with a TypeScript-specific extension like .ts, .mts, or .tsx. - - @default false - */ - allowImportingTsExtensions?: boolean; - - /** - Forces TypeScript to consult the exports field of package.json files if it ever reads from a package in node_modules. - - @default false - */ - resolvePackageJsonExports?: boolean; - - /** - Forces TypeScript to consult the imports field of package.json files when performing a lookup that starts with # from a file whose ancestor directory contains a package.json. - - @default false - */ - resolvePackageJsonImports?: boolean; - - /** - Suppress errors for file formats that TypeScript does not understand. - - @default false - */ - allowArbitraryExtensions?: boolean; - - /** - List of additional conditions that should succeed when TypeScript resolves from package.json. - */ - customConditions?: string[]; - - /** - Anything that uses the type modifier is dropped entirely. - - @default false - */ - verbatimModuleSyntax?: boolean; - - /** - Suppress deprecation warnings - */ - ignoreDeprecations?: CompilerOptions.IgnoreDeprecations; - - /** - Do not allow runtime constructs that are not part of ECMAScript. - - @default false - */ - erasableSyntaxOnly?: boolean; - - /** - Enable lib replacement. - - @default true - */ - libReplacement?: boolean; - }; - - namespace WatchOptions { - type WatchFileKind = - | 'FixedPollingInterval' - | 'PriorityPollingInterval' - | 'DynamicPriorityPolling' - | 'FixedChunkSizePolling' - | 'UseFsEvents' - | 'UseFsEventsOnParentDirectory'; - - type WatchDirectoryKind = - | 'UseFsEvents' - | 'FixedPollingInterval' - | 'DynamicPriorityPolling' - | 'FixedChunkSizePolling'; - - type PollingWatchKind = - | 'FixedInterval' - | 'PriorityInterval' - | 'DynamicPriority' - | 'FixedChunkSize'; - } - - type WatchOptions = { - - /** - Specify the strategy for watching individual files. - - @default 'UseFsEvents' - */ - watchFile?: WatchOptions.WatchFileKind | Lowercase; - - /** - Specify the strategy for watching directories under systems that lack recursive file-watching functionality. - - @default 'UseFsEvents' - */ - watchDirectory?: WatchOptions.WatchDirectoryKind | Lowercase; - - /** - Specify the polling strategy to use when the system runs out of or doesn't support native file watchers. - */ - fallbackPolling?: WatchOptions.PollingWatchKind | Lowercase; - - /** - Enable synchronous updates on directory watchers for platforms that don't support recursive watching natively. - */ - synchronousWatchDirectory?: boolean; - - /** - Specifies a list of directories to exclude from watch. - */ - excludeDirectories?: string[]; - - /** - Specifies a list of files to exclude from watch. - */ - excludeFiles?: string[]; - }; - - /** - Auto type (.d.ts) acquisition options for this project. - */ - type TypeAcquisition = { - /** - Enable auto type acquisition. - */ - enable?: boolean; - - /** - Specifies a list of type declarations to be included in auto type acquisition. For example, `['jquery', 'lodash']`. - */ - include?: string[]; - - /** - Specifies a list of type declarations to be excluded from auto type acquisition. For example, `['jquery', 'lodash']`. - */ - exclude?: string[]; - - /** - Disable infering what types should be added based on filenames in a project. - */ - disableFilenameBasedTypeAcquisition?: boolean; - }; - - type References = { - /** - A normalized path on disk. - */ - path: string; - - /** - The path as the user originally wrote it. - */ - originalPath?: string; - - /** - True if the output of this reference should be prepended to the output of this project. - - Only valid for `--outFile` compilations. - @deprecated This option will be removed in TypeScript 5.5. - */ - prepend?: boolean; - - /** - True if it is intended that this reference form a circularity. - */ - circular?: boolean; - }; -} - -/** -Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (TypeScript 3.7). - -@category File -*/ -type TsConfigJson = { - /** - Instructs the TypeScript compiler how to compile `.ts` files. - */ - compilerOptions?: TsConfigJson.CompilerOptions; - - /** - Instructs the TypeScript compiler how to watch files. - */ - watchOptions?: TsConfigJson.WatchOptions; - - /** - Auto type (.d.ts) acquisition options for this project. - */ - typeAcquisition?: TsConfigJson.TypeAcquisition; - - /** - Enable Compile-on-Save for this project. - */ - compileOnSave?: boolean; - - /** - Path to base configuration file to inherit from. - */ - extends?: string | string[]; - - /** - If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. When a `files` property is specified, only those files and those specified by `include` are included. - */ - files?: string[]; - - /** - Specifies a list of files to be excluded from compilation. The `exclude` property only affects the files included via the `include` property and not the `files` property. - - Glob patterns require TypeScript version 2.0 or later. - */ - exclude?: string[]; - - /** - Specifies a list of glob patterns that match files to be included in compilation. - - If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. - */ - include?: string[]; - - /** - Referenced projects. - */ - references?: TsConfigJson.References[]; -}; - -type TsConfigJsonResolved = Except; -type TsConfigResult = { - /** - * The path to the tsconfig.json file - */ - path: string; - /** - * The resolved tsconfig.json file - */ - config: TsConfigJsonResolved; -}; -type Cache = Map; - -/** - * Finds a tsconfig file, defaulting to `tsconfig.json`, starting from a given path. - * - * @param searchPath Starting directory (default: `process.cwd()`). - * @param configName Config file name (default: `tsconfig.json`). - * @param cache Cache for previous results (default: new `Map()`). - * @returns The tsconfig file path and parsed contents, or `null` if not found. - */ -declare const getTsconfig: (searchPath?: string, configName?: string, cache?: Cache) => TsConfigResult | null; - -/** - * Parses a tsconfig file at a given path - * - * @param tsconfigPath - Path to the tsconfig file. - * @param cache - Cache for storing parsed tsconfig results (default: new `Map()`). - * @returns The parsed and resolved tsconfig JSON. - */ -declare const parseTsconfig: (tsconfigPath: string, cache?: Cache) => TsConfigJsonResolved; - -/** - * Reference: - * https://github.com/microsoft/TypeScript/blob/3ccbe804f850f40d228d3c875be952d94d39aa1d/src/compiler/moduleNameResolver.ts#L2465 - */ -declare const createPathsMatcher: (tsconfig: TsConfigResult) => ((specifier: string) => string[]) | null; - -type FileMatcher = (filePath: string) => (TsConfigJsonResolved | undefined); -declare const createFilesMatcher: ({ config, path: tsconfigPath, }: TsConfigResult, caseSensitivePaths?: boolean) => FileMatcher; - -export { type Cache, type FileMatcher, TsConfigJson, type TsConfigJsonResolved, type TsConfigResult, createFilesMatcher, createPathsMatcher, getTsconfig, parseTsconfig }; diff --git a/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.mts b/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.mts deleted file mode 100644 index 5ab1518..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/dist/index.d.mts +++ /dev/null @@ -1,2088 +0,0 @@ -/** -Returns a boolean for whether the given type is `any`. - -@link https://stackoverflow.com/a/49928360/1490091 - -Useful in type utilities, such as disallowing `any`s to be passed to a function. - -@example -``` -import type {IsAny} from 'type-fest'; - -const typedObject = {a: 1, b: 2} as const; -const anyObject: any = {a: 1, b: 2}; - -function get extends true ? {} : Record), K extends keyof O = keyof O>(obj: O, key: K) { - return obj[key]; -} - -const typedA = get(typedObject, 'a'); -//=> 1 - -const anyA = get(anyObject, 'a'); -//=> any -``` - -@category Type Guard -@category Utilities -*/ -type IsAny = 0 extends 1 & NoInfer ? true : false; - -/** -Returns a boolean for whether the given key is an optional key of type. - -This is useful when writing utility types or schema validators that need to differentiate `optional` keys. - -@example -``` -import type {IsOptionalKeyOf} from 'type-fest'; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -interface Admin { - name: string; - surname?: string; -} - -type T1 = IsOptionalKeyOf; -//=> true - -type T2 = IsOptionalKeyOf; -//=> false - -type T3 = IsOptionalKeyOf; -//=> boolean - -type T4 = IsOptionalKeyOf; -//=> false - -type T5 = IsOptionalKeyOf; -//=> boolean -``` - -@category Type Guard -@category Utilities -*/ -type IsOptionalKeyOf = - IsAny extends true ? never - : Key extends keyof Type - ? Type extends Record - ? false - : true - : false; - -/** -Extract all optional keys from the given type. - -This is useful when you want to create a new type that contains different type values for the optional keys only. - -@example -``` -import type {OptionalKeysOf, Except} from 'type-fest'; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -const REMOVE_FIELD = Symbol('remove field symbol'); -type UpdateOperation = Except, OptionalKeysOf> & { - [Key in OptionalKeysOf]?: Entity[Key] | typeof REMOVE_FIELD; -}; - -const update1: UpdateOperation = { - name: 'Alice' -}; - -const update2: UpdateOperation = { - name: 'Bob', - luckyNumber: REMOVE_FIELD -}; -``` - -@category Utilities -*/ -type OptionalKeysOf = - Type extends unknown // For distributing `Type` - ? (keyof {[Key in keyof Type as - IsOptionalKeyOf extends false - ? never - : Key - ]: never - }) & keyof Type // Intersect with `keyof Type` to ensure result of `OptionalKeysOf` is always assignable to `keyof Type` - : never; // Should never happen - -/** -Extract all required keys from the given type. - -This is useful when you want to create a new type that contains different type values for the required keys only or use the list of keys for validation purposes, etc... - -@example -``` -import type {RequiredKeysOf} from 'type-fest'; - -declare function createValidation = RequiredKeysOf>(field: Key, validator: (value: Entity[Key]) => boolean): ValidatorFn; - -interface User { - name: string; - surname: string; - - luckyNumber?: number; -} - -const validator1 = createValidation('name', value => value.length < 25); -const validator2 = createValidation('surname', value => value.length < 25); -``` - -@category Utilities -*/ -type RequiredKeysOf = - Type extends unknown // For distributing `Type` - ? Exclude> - : never; // Should never happen - -/** -Returns a boolean for whether the given type is `never`. - -@link https://github.com/microsoft/TypeScript/issues/31751#issuecomment-498526919 -@link https://stackoverflow.com/a/53984913/10292952 -@link https://www.zhenghao.io/posts/ts-never - -Useful in type utilities, such as checking if something does not occur. - -@example -``` -import type {IsNever, And} from 'type-fest'; - -// https://github.com/andnp/SimplyTyped/blob/master/src/types/strings.ts -type AreStringsEqual = - And< - IsNever> extends true ? true : false, - IsNever> extends true ? true : false - >; - -type EndIfEqual = - AreStringsEqual extends true - ? never - : void; - -function endIfEqual(input: I, output: O): EndIfEqual { - if (input === output) { - process.exit(0); - } -} - -endIfEqual('abc', 'abc'); -//=> never - -endIfEqual('abc', '123'); -//=> void -``` - -@category Type Guard -@category Utilities -*/ -type IsNever = [T] extends [never] ? true : false; - -/** -An if-else-like type that resolves depending on whether the given `boolean` type is `true` or `false`. - -Use-cases: -- You can use this in combination with `Is*` types to create an if-else-like experience. For example, `If, 'is any', 'not any'>`. - -Note: -- Returns a union of if branch and else branch if the given type is `boolean` or `any`. For example, `If` will return `'Y' | 'N'`. -- Returns the else branch if the given type is `never`. For example, `If` will return `'N'`. - -@example -``` -import {If} from 'type-fest'; - -type A = If; -//=> 'yes' - -type B = If; -//=> 'no' - -type C = If; -//=> 'yes' | 'no' - -type D = If; -//=> 'yes' | 'no' - -type E = If; -//=> 'no' -``` - -@example -``` -import {If, IsAny, IsNever} from 'type-fest'; - -type A = If, 'is any', 'not any'>; -//=> 'not any' - -type B = If, 'is never', 'not never'>; -//=> 'is never' -``` - -@example -``` -import {If, IsEqual} from 'type-fest'; - -type IfEqual = If, IfBranch, ElseBranch>; - -type A = IfEqual; -//=> 'equal' - -type B = IfEqual; -//=> 'not equal' -``` - -@category Type Guard -@category Utilities -*/ -type If = - IsNever extends true - ? ElseBranch - : Type extends true - ? IfBranch - : ElseBranch; - -/** -Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability. - -@example -``` -import type {Simplify} from 'type-fest'; - -type PositionProps = { - top: number; - left: number; -}; - -type SizeProps = { - width: number; - height: number; -}; - -// In your editor, hovering over `Props` will show a flattened object with all the properties. -type Props = Simplify; -``` - -Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface. - -If the type definition must be an interface (perhaps it was defined in a third-party npm package), then the `value` can be defined as `const value: Simplify = ...`. Then `value` will be assignable to the `fn` argument. Or the `value` can be cast as `Simplify` if you can't re-declare the `value`. - -@example -``` -import type {Simplify} from 'type-fest'; - -interface SomeInterface { - foo: number; - bar?: string; - baz: number | undefined; -} - -type SomeType = { - foo: number; - bar?: string; - baz: number | undefined; -}; - -const literal = {foo: 123, bar: 'hello', baz: 456}; -const someType: SomeType = literal; -const someInterface: SomeInterface = literal; - -function fn(object: Record): void {} - -fn(literal); // Good: literal object type is sealed -fn(someType); // Good: type is sealed -fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened -fn(someInterface as Simplify); // Good: transform an `interface` into a `type` -``` - -@link https://github.com/microsoft/TypeScript/issues/15300 -@see SimplifyDeep -@category Object -*/ -type Simplify = {[KeyType in keyof T]: T[KeyType]} & {}; - -/** -Returns a boolean for whether the two given types are equal. - -@link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650 -@link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796 - -Use-cases: -- If you want to make a conditional branch based on the result of a comparison of two types. - -@example -``` -import type {IsEqual} from 'type-fest'; - -// This type returns a boolean for whether the given array includes the given item. -// `IsEqual` is used to compare the given array at position 0 and the given item and then return true if they are equal. -type Includes = - Value extends readonly [Value[0], ...infer rest] - ? IsEqual extends true - ? true - : Includes - : false; -``` - -@category Type Guard -@category Utilities -*/ -type IsEqual = - [A, B] extends [infer AA, infer BB] - ? [AA] extends [never] - ? [BB] extends [never] - ? true - : false - : [BB] extends [never] - ? false - : _IsEqual - : false; - -// This version fails the `equalWrappedTupleIntersectionToBeNeverAndNeverExpanded` test in `test-d/is-equal.ts`. -type _IsEqual = - (() => G extends A & G | G ? 1 : 2) extends - (() => G extends B & G | G ? 1 : 2) - ? true - : false; - -/** -Omit any index signatures from the given object type, leaving only explicitly defined properties. - -This is the counterpart of `PickIndexSignature`. - -Use-cases: -- Remove overly permissive signatures from third-party types. - -This type was taken from this [StackOverflow answer](https://stackoverflow.com/a/68261113/420747). - -It relies on the fact that an empty object (`{}`) is assignable to an object with just an index signature, like `Record`, but not to an object with explicitly defined keys, like `Record<'foo' | 'bar', unknown>`. - -(The actual value type, `unknown`, is irrelevant and could be any type. Only the key type matters.) - -``` -const indexed: Record = {}; // Allowed - -const keyed: Record<'foo', unknown> = {}; // Error -// => TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar -``` - -Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another: - -``` -type Indexed = {} extends Record - ? '✅ `{}` is assignable to `Record`' - : '❌ `{}` is NOT assignable to `Record`'; -// => '✅ `{}` is assignable to `Record`' - -type Keyed = {} extends Record<'foo' | 'bar', unknown> - ? "✅ `{}` is assignable to `Record<'foo' | 'bar', unknown>`" - : "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`"; -// => "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`" -``` - -Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`... - -``` -import type {OmitIndexSignature} from 'type-fest'; - -type OmitIndexSignature = { - [KeyType in keyof ObjectType // Map each key of `ObjectType`... - ]: ObjectType[KeyType]; // ...to its original value, i.e. `OmitIndexSignature == Foo`. -}; -``` - -...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record`)... - -``` -import type {OmitIndexSignature} from 'type-fest'; - -type OmitIndexSignature = { - [KeyType in keyof ObjectType - // Is `{}` assignable to `Record`? - as {} extends Record - ? ... // ✅ `{}` is assignable to `Record` - : ... // ❌ `{}` is NOT assignable to `Record` - ]: ObjectType[KeyType]; -}; -``` - -If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it. - -@example -``` -import type {OmitIndexSignature} from 'type-fest'; - -interface Example { - // These index signatures will be removed. - [x: string]: any - [x: number]: any - [x: symbol]: any - [x: `head-${string}`]: string - [x: `${string}-tail`]: string - [x: `head-${string}-tail`]: string - [x: `${bigint}`]: string - [x: `embedded-${number}`]: string - - // These explicitly defined keys will remain. - foo: 'bar'; - qux?: 'baz'; -} - -type ExampleWithoutIndexSignatures = OmitIndexSignature; -// => { foo: 'bar'; qux?: 'baz' | undefined; } -``` - -@see PickIndexSignature -@category Object -*/ -type OmitIndexSignature = { - [KeyType in keyof ObjectType as {} extends Record - ? never - : KeyType]: ObjectType[KeyType]; -}; - -/** -Pick only index signatures from the given object type, leaving out all explicitly defined properties. - -This is the counterpart of `OmitIndexSignature`. - -@example -``` -import type {PickIndexSignature} from 'type-fest'; - -declare const symbolKey: unique symbol; - -type Example = { - // These index signatures will remain. - [x: string]: unknown; - [x: number]: unknown; - [x: symbol]: unknown; - [x: `head-${string}`]: string; - [x: `${string}-tail`]: string; - [x: `head-${string}-tail`]: string; - [x: `${bigint}`]: string; - [x: `embedded-${number}`]: string; - - // These explicitly defined keys will be removed. - ['kebab-case-key']: string; - [symbolKey]: string; - foo: 'bar'; - qux?: 'baz'; -}; - -type ExampleIndexSignature = PickIndexSignature; -// { -// [x: string]: unknown; -// [x: number]: unknown; -// [x: symbol]: unknown; -// [x: `head-${string}`]: string; -// [x: `${string}-tail`]: string; -// [x: `head-${string}-tail`]: string; -// [x: `${bigint}`]: string; -// [x: `embedded-${number}`]: string; -// } -``` - -@see OmitIndexSignature -@category Object -*/ -type PickIndexSignature = { - [KeyType in keyof ObjectType as {} extends Record - ? KeyType - : never]: ObjectType[KeyType]; -}; - -// Merges two objects without worrying about index signatures. -type SimpleMerge = { - [Key in keyof Destination as Key extends keyof Source ? never : Key]: Destination[Key]; -} & Source; - -/** -Merge two types into a new type. Keys of the second type overrides keys of the first type. - -@example -``` -import type {Merge} from 'type-fest'; - -interface Foo { - [x: string]: unknown; - [x: number]: unknown; - foo: string; - bar: symbol; -} - -type Bar = { - [x: number]: number; - [x: symbol]: unknown; - bar: Date; - baz: boolean; -}; - -export type FooBar = Merge; -// => { -// [x: string]: unknown; -// [x: number]: number; -// [x: symbol]: unknown; -// foo: string; -// bar: Date; -// baz: boolean; -// } -``` - -@category Object -*/ -type Merge = -Simplify< - SimpleMerge, PickIndexSignature> - & SimpleMerge, OmitIndexSignature> ->; - -/** -Merges user specified options with default options. - -@example -``` -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: false}; -type SpecifiedOptions = {leavesOnly: true}; - -type Result = ApplyDefaultOptions; -//=> {maxRecursionDepth: 10; leavesOnly: true} -``` - -@example -``` -// Complains if default values are not provided for optional options - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10}; -type SpecifiedOptions = {}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~~~~ -// Property 'leavesOnly' is missing in type 'DefaultPathsOptions' but required in type '{ maxRecursionDepth: number; leavesOnly: boolean; }'. -``` - -@example -``` -// Complains if an option's default type does not conform to the expected type - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: 'no'}; -type SpecifiedOptions = {}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~~~~ -// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'. -``` - -@example -``` -// Complains if an option's specified type does not conform to the expected type - -type PathsOptions = {maxRecursionDepth?: number; leavesOnly?: boolean}; -type DefaultPathsOptions = {maxRecursionDepth: 10; leavesOnly: false}; -type SpecifiedOptions = {leavesOnly: 'yes'}; - -type Result = ApplyDefaultOptions; -// ~~~~~~~~~~~~~~~~ -// Types of property 'leavesOnly' are incompatible. Type 'string' is not assignable to type 'boolean'. -``` -*/ -type ApplyDefaultOptions< - Options extends object, - Defaults extends Simplify, RequiredKeysOf> & Partial, never>>>, - SpecifiedOptions extends Options, -> = - If, Defaults, - If, Defaults, - Simplify ? undefined extends SpecifiedOptions[Key] ? never : Key : Key - ]: SpecifiedOptions[Key] - }> & Required>>>; - -/** -Filter out keys from an object. - -Returns `never` if `Exclude` is strictly equal to `Key`. -Returns `never` if `Key` extends `Exclude`. -Returns `Key` otherwise. - -@example -``` -type Filtered = Filter<'foo', 'foo'>; -//=> never -``` - -@example -``` -type Filtered = Filter<'bar', string>; -//=> never -``` - -@example -``` -type Filtered = Filter<'bar', 'foo'>; -//=> 'bar' -``` - -@see {Except} -*/ -type Filter = IsEqual extends true ? never : (KeyType extends ExcludeType ? never : KeyType); - -type ExceptOptions = { - /** - Disallow assigning non-specified properties. - - Note that any omitted properties in the resulting type will be present in autocomplete as `undefined`. - - @default false - */ - requireExactProps?: boolean; -}; - -type DefaultExceptOptions = { - requireExactProps: false; -}; - -/** -Create a type from an object type without certain keys. - -We recommend setting the `requireExactProps` option to `true`. - -This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically. - -This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)). - -@example -``` -import type {Except} from 'type-fest'; - -type Foo = { - a: number; - b: string; -}; - -type FooWithoutA = Except; -//=> {b: string} - -const fooWithoutA: FooWithoutA = {a: 1, b: '2'}; -//=> errors: 'a' does not exist in type '{ b: string; }' - -type FooWithoutB = Except; -//=> {a: number} & Partial> - -const fooWithoutB: FooWithoutB = {a: 1, b: '2'}; -//=> errors at 'b': Type 'string' is not assignable to type 'undefined'. - -// The `Omit` utility type doesn't work when omitting specific keys from objects containing index signatures. - -// Consider the following example: - -type UserData = { - [metadata: string]: string; - email: string; - name: string; - role: 'admin' | 'user'; -}; - -// `Omit` clearly doesn't behave as expected in this case: -type PostPayload = Omit; -//=> type PostPayload = { [x: string]: string; [x: number]: string; } - -// In situations like this, `Except` works better. -// It simply removes the `email` key while preserving all the other keys. -type PostPayload = Except; -//=> type PostPayload = { [x: string]: string; name: string; role: 'admin' | 'user'; } -``` - -@category Object -*/ -type Except = - _Except>; - -type _Except> = { - [KeyType in keyof ObjectType as Filter]: ObjectType[KeyType]; -} & (Options['requireExactProps'] extends true - ? Partial> - : {}); - -declare namespace TsConfigJson { - namespace CompilerOptions { - type JSX = - | 'preserve' - | 'react' - | 'react-jsx' - | 'react-jsxdev' - | 'react-native'; - - type Module = - | 'CommonJS' - | 'AMD' - | 'System' - | 'UMD' - | 'ES6' - | 'ES2015' - | 'ES2020' - | 'ES2022' - | 'ESNext' - | 'Node16' - | 'Node18' - | 'Node20' - | 'NodeNext' - | 'Preserve' - | 'None' - // Lowercase alternatives - | 'commonjs' - | 'amd' - | 'system' - | 'umd' - | 'es6' - | 'es2015' - | 'es2020' - | 'es2022' - | 'esnext' - | 'node16' - | 'node18' - | 'node20' - | 'nodenext' - | 'preserve' - | 'none'; - - type NewLine = - | 'CRLF' - | 'LF' - // Lowercase alternatives - | 'crlf' - | 'lf'; - - type Target = - | 'ES3' - | 'ES5' - | 'ES6' - | 'ES2015' - | 'ES2016' - | 'ES2017' - | 'ES2018' - | 'ES2019' - | 'ES2020' - | 'ES2021' - | 'ES2022' - | 'ES2023' - | 'ES2024' - | 'ESNext' - // Lowercase alternatives - | 'es3' - | 'es5' - | 'es6' - | 'es2015' - | 'es2016' - | 'es2017' - | 'es2018' - | 'es2019' - | 'es2020' - | 'es2021' - | 'es2022' - | 'es2023' - | 'es2024' - | 'esnext'; - - type Lib = - | 'ES5' - | 'ES6' - | 'ES7' - | 'ES2015' - | 'ES2015.Collection' - | 'ES2015.Core' - | 'ES2015.Generator' - | 'ES2015.Iterable' - | 'ES2015.Promise' - | 'ES2015.Proxy' - | 'ES2015.Reflect' - | 'ES2015.Symbol.WellKnown' - | 'ES2015.Symbol' - | 'ES2016' - | 'ES2016.Array.Include' - | 'ES2017' - | 'ES2017.ArrayBuffer' - | 'ES2017.Date' - | 'ES2017.Intl' - | 'ES2017.Object' - | 'ES2017.SharedMemory' - | 'ES2017.String' - | 'ES2017.TypedArrays' - | 'ES2018' - | 'ES2018.AsyncGenerator' - | 'ES2018.AsyncIterable' - | 'ES2018.Intl' - | 'ES2018.Promise' - | 'ES2018.Regexp' - | 'ES2019' - | 'ES2019.Array' - | 'ES2019.Intl' - | 'ES2019.Object' - | 'ES2019.String' - | 'ES2019.Symbol' - | 'ES2020' - | 'ES2020.BigInt' - | 'ES2020.Date' - | 'ES2020.Intl' - | 'ES2020.Number' - | 'ES2020.Promise' - | 'ES2020.SharedMemory' - | 'ES2020.String' - | 'ES2020.Symbol.WellKnown' - | 'ES2021' - | 'ES2021.Intl' - | 'ES2021.Promise' - | 'ES2021.String' - | 'ES2021.WeakRef' - | 'ES2022' - | 'ES2022.Array' - | 'ES2022.Error' - | 'ES2022.Intl' - | 'ES2022.Object' - | 'ES2022.RegExp' - | 'ES2022.SharedMemory' - | 'ES2022.String' - | 'ES2023' - | 'ES2023.Array' - | 'ES2023.Collection' - | 'ES2023.Intl' - | 'ES2024' - | 'ES2024.ArrayBuffer' - | 'ES2024.Collection' - | 'ES2024.Object' - | 'ES2024.Promise' - | 'ES2024.Regexp' - | 'ES2024.SharedMemory' - | 'ES2024.String' - | 'ESNext' - | 'ESNext.Array' - | 'ESNext.AsyncIterable' - | 'ESNext.BigInt' - | 'ESNext.Collection' - | 'ESNext.Decorators' - | 'ESNext.Disposable' - | 'ESNext.Error' - | 'ESNext.Intl' - | 'ESNext.Iterator' - | 'ESNext.Object' - | 'ESNext.Promise' - | 'ESNext.Regexp' - | 'ESNext.String' - | 'ESNext.Symbol' - | 'ESNext.WeakRef' - | 'DOM' - | 'DOM.AsyncIterable' - | 'DOM.Iterable' - | 'Decorators' - | 'Decorators.Legacy' - | 'ScriptHost' - | 'WebWorker' - | 'WebWorker.AsyncIterable' - | 'WebWorker.ImportScripts' - | 'WebWorker.Iterable' - // Lowercase alternatives - | 'es5' - | 'es6' - | 'es7' - | 'es2015' - | 'es2015.collection' - | 'es2015.core' - | 'es2015.generator' - | 'es2015.iterable' - | 'es2015.promise' - | 'es2015.proxy' - | 'es2015.reflect' - | 'es2015.symbol.wellknown' - | 'es2015.symbol' - | 'es2016' - | 'es2016.array.include' - | 'es2017' - | 'es2017.arraybuffer' - | 'es2017.date' - | 'es2017.intl' - | 'es2017.object' - | 'es2017.sharedmemory' - | 'es2017.string' - | 'es2017.typedarrays' - | 'es2018' - | 'es2018.asyncgenerator' - | 'es2018.asynciterable' - | 'es2018.intl' - | 'es2018.promise' - | 'es2018.regexp' - | 'es2019' - | 'es2019.array' - | 'es2019.intl' - | 'es2019.object' - | 'es2019.string' - | 'es2019.symbol' - | 'es2020' - | 'es2020.bigint' - | 'es2020.date' - | 'es2020.intl' - | 'es2020.number' - | 'es2020.promise' - | 'es2020.sharedmemory' - | 'es2020.string' - | 'es2020.symbol.wellknown' - | 'es2021' - | 'es2021.intl' - | 'es2021.promise' - | 'es2021.string' - | 'es2021.weakref' - | 'es2022' - | 'es2022.array' - | 'es2022.error' - | 'es2022.intl' - | 'es2022.object' - | 'es2022.regexp' - | 'es2022.sharedmemory' - | 'es2022.string' - | 'es2023' - | 'es2023.array' - | 'es2023.collection' - | 'es2023.intl' - | 'es2024' - | 'es2024.arraybuffer' - | 'es2024.collection' - | 'es2024.object' - | 'es2024.promise' - | 'es2024.regexp' - | 'es2024.sharedmemory' - | 'es2024.string' - | 'esnext' - | 'esnext.array' - | 'esnext.asynciterable' - | 'esnext.bigint' - | 'esnext.collection' - | 'esnext.decorators' - | 'esnext.disposable' - | 'esnext.error' - | 'esnext.intl' - | 'esnext.iterator' - | 'esnext.object' - | 'esnext.promise' - | 'esnext.regexp' - | 'esnext.string' - | 'esnext.symbol' - | 'esnext.weakref' - | 'dom' - | 'dom.asynciterable' - | 'dom.iterable' - | 'decorators' - | 'decorators.legacy' - | 'scripthost' - | 'webworker' - | 'webworker.asynciterable' - | 'webworker.importscripts' - | 'webworker.iterable'; - - type Plugin = { - /** - Plugin name. - */ - name: string; - }; - - type ImportsNotUsedAsValues = - | 'remove' - | 'preserve' - | 'error'; - - type FallbackPolling = - | 'fixedPollingInterval' - | 'priorityPollingInterval' - | 'dynamicPriorityPolling' - | 'fixedInterval' - | 'priorityInterval' - | 'dynamicPriority' - | 'fixedChunkSize'; - - type WatchDirectory = - | 'useFsEvents' - | 'fixedPollingInterval' - | 'dynamicPriorityPolling' - | 'fixedChunkSizePolling'; - - type WatchFile = - | 'fixedPollingInterval' - | 'priorityPollingInterval' - | 'dynamicPriorityPolling' - | 'useFsEvents' - | 'useFsEventsOnParentDirectory' - | 'fixedChunkSizePolling'; - - type ModuleResolution = - | 'classic' - | 'node' - | 'node10' - | 'node16' - | 'nodenext' - | 'bundler' - // Pascal-cased alternatives - | 'Classic' - | 'Node' - | 'Node10' - | 'Node16' - | 'NodeNext' - | 'Bundler'; - - type ModuleDetection = - | 'auto' - | 'legacy' - | 'force'; - - type IgnoreDeprecations = '5.0'; - } - - type CompilerOptions = { - /** - The character set of the input files. - - @default 'utf8' - @deprecated This option will be removed in TypeScript 5.5. - */ - charset?: string; - - /** - Enables building for project references. - - @default true - */ - composite?: boolean; - - /** - Generates corresponding d.ts files. - - @default false - */ - declaration?: boolean; - - /** - Specify output directory for generated declaration files. - */ - declarationDir?: string; - - /** - Show diagnostic information. - - @default false - */ - diagnostics?: boolean; - - /** - Reduce the number of projects loaded automatically by TypeScript. - - @default false - */ - disableReferencedProjectLoad?: boolean; - - /** - Enforces using indexed accessors for keys declared using an indexed type. - - @default false - */ - noPropertyAccessFromIndexSignature?: boolean; - - /** - Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. - - @default false - */ - emitBOM?: boolean; - - /** - Only emit `.d.ts` declaration files. - - @default false - */ - emitDeclarationOnly?: boolean; - - /** - Differentiate between undefined and not present when type checking. - - @default false - */ - exactOptionalPropertyTypes?: boolean; - - /** - Enable incremental compilation. - - @default `composite` - */ - incremental?: boolean; - - /** - Specify file to store incremental compilation information. - - @default '.tsbuildinfo' - */ - tsBuildInfoFile?: string; - - /** - Emit a single file with source maps instead of having a separate file. - - @default false - */ - inlineSourceMap?: boolean; - - /** - Emit the source alongside the sourcemaps within a single file. - - Requires `--inlineSourceMap` to be set. - - @default false - */ - inlineSources?: boolean; - - /** - Specify what JSX code is generated. - - @default 'preserve' - */ - jsx?: CompilerOptions.JSX; - - /** - Specifies the object invoked for `createElement` and `__spread` when targeting `'react'` JSX emit. - - @default 'React' - */ - reactNamespace?: string; - - /** - Specify the JSX factory function to use when targeting React JSX emit, e.g. `React.createElement` or `h`. - - @default 'React.createElement' - */ - jsxFactory?: string; - - /** - Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. - - @default 'React.Fragment' - */ - jsxFragmentFactory?: string; - - /** - Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`. - - @default 'react' - */ - jsxImportSource?: string; - - /** - Print names of files part of the compilation. - - @default false - */ - listFiles?: boolean; - - /** - Specifies the location where debugger should locate map files instead of generated locations. - */ - mapRoot?: string; - - /** - Specify module code generation: 'None', 'CommonJS', 'AMD', 'System', 'UMD', 'ES6', 'ES2015' or 'ESNext'. Only 'AMD' and 'System' can be used in conjunction with `--outFile`. 'ES6' and 'ES2015' values may be used when targeting 'ES5' or lower. - - @default ['ES3', 'ES5'].includes(target) ? 'CommonJS' : 'ES6' - */ - module?: CompilerOptions.Module; - - /** - Specifies module resolution strategy: 'node' (Node) or 'classic' (TypeScript pre 1.6). - - @default ['AMD', 'System', 'ES6'].includes(module) ? 'classic' : 'node' - */ - moduleResolution?: CompilerOptions.ModuleResolution; - - /** - Specifies the end of line sequence to be used when emitting files: 'crlf' (Windows) or 'lf' (Unix). - - @default 'LF' - */ - newLine?: CompilerOptions.NewLine; - - /** - Disable full type checking (only critical parse and emit errors will be reported). - - @default false - */ - noCheck?: boolean; - - /** - Do not emit output. - - @default false - */ - noEmit?: boolean; - - /** - Do not generate custom helper functions like `__extends` in compiled output. - - @default false - */ - noEmitHelpers?: boolean; - - /** - Do not emit outputs if any type checking errors were reported. - - @default false - */ - noEmitOnError?: boolean; - - /** - Warn on expressions and declarations with an implied 'any' type. - - @default false - */ - noImplicitAny?: boolean; - - /** - Raise error on 'this' expressions with an implied any type. - - @default false - */ - noImplicitThis?: boolean; - - /** - Report errors on unused locals. - - @default false - */ - noUnusedLocals?: boolean; - - /** - Report errors on unused parameters. - - @default false - */ - noUnusedParameters?: boolean; - - /** - Do not include the default library file (lib.d.ts). - - @default false - */ - noLib?: boolean; - - /** - Do not add triple-slash references or module import targets to the list of compiled files. - - @default false - */ - noResolve?: boolean; - - /** - Disable strict checking of generic signatures in function types. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - noStrictGenericChecks?: boolean; - - /** - @deprecated use `skipLibCheck` instead. - */ - skipDefaultLibCheck?: boolean; - - /** - Skip type checking of declaration files. - - @default false - */ - skipLibCheck?: boolean; - - /** - Concatenate and emit output to single file. - */ - outFile?: string; - - /** - Redirect output structure to the directory. - */ - outDir?: string; - - /** - Do not erase const enum declarations in generated code. - - @default false - */ - preserveConstEnums?: boolean; - - /** - Do not resolve symlinks to their real path; treat a symlinked file like a real one. - - @default false - */ - preserveSymlinks?: boolean; - - /** - Keep outdated console output in watch mode instead of clearing the screen. - - @default false - */ - preserveWatchOutput?: boolean; - - /** - Stylize errors and messages using color and context (experimental). - - @default true // Unless piping to another program or redirecting output to a file. - */ - pretty?: boolean; - - /** - Do not emit comments to output. - - @default false - */ - removeComments?: boolean; - - /** - Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. - - @default false - */ - rewriteRelativeImportExtensions?: boolean; - - /** - Specifies the root directory of input files. - - Use to control the output directory structure with `--outDir`. - */ - rootDir?: string; - - /** - Unconditionally emit imports for unresolved files. - - @default false - */ - isolatedModules?: boolean; - - /** - Require sufficient annotation on exports so other tools can trivially generate declaration files. - - @default false - */ - isolatedDeclarations?: boolean; - - /** - Generates corresponding '.map' file. - - @default false - */ - sourceMap?: boolean; - - /** - Specifies the location where debugger should locate TypeScript files instead of source locations. - */ - sourceRoot?: string; - - /** - Suppress excess property checks for object literals. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - suppressExcessPropertyErrors?: boolean; - - /** - Suppress noImplicitAny errors for indexing objects lacking index signatures. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - suppressImplicitAnyIndexErrors?: boolean; - - /** - Do not emit declarations for code that has an `@internal` annotation. - */ - stripInternal?: boolean; - - /** - Specify ECMAScript target version. - - @default 'es3' - */ - target?: CompilerOptions.Target; - - /** - Default catch clause variables as `unknown` instead of `any`. - - @default false - */ - useUnknownInCatchVariables?: boolean; - - /** - Watch input files. - - @default false - @deprecated Use watchOptions instead. - */ - watch?: boolean; - - /** - Specify the polling strategy to use when the system runs out of or doesn't support native file watchers. - - @deprecated Use watchOptions.fallbackPolling instead. - */ - fallbackPolling?: CompilerOptions.FallbackPolling; - - /** - Specify the strategy for watching directories under systems that lack recursive file-watching functionality. - - @default 'useFsEvents' - @deprecated Use watchOptions.watchDirectory instead. - */ - watchDirectory?: CompilerOptions.WatchDirectory; - - /** - Specify the strategy for watching individual files. - - @default 'useFsEvents' - @deprecated Use watchOptions.watchFile instead. - */ - watchFile?: CompilerOptions.WatchFile; - - /** - Enables experimental support for ES7 decorators. - - @default false - */ - experimentalDecorators?: boolean; - - /** - Emit design-type metadata for decorated declarations in source. - - @default false - */ - emitDecoratorMetadata?: boolean; - - /** - Do not report errors on unused labels. - - @default false - */ - allowUnusedLabels?: boolean; - - /** - Report error when not all code paths in function return a value. - - @default false - */ - noImplicitReturns?: boolean; - - /** - Add `undefined` to a type when accessed using an index. - - @default false - */ - noUncheckedIndexedAccess?: boolean; - - /** - Report error if failed to find a source file for a side effect import. - - @default false - */ - noUncheckedSideEffectImports?: boolean; - - /** - Report errors for fallthrough cases in switch statement. - - @default false - */ - noFallthroughCasesInSwitch?: boolean; - - /** - Ensure overriding members in derived classes are marked with an override modifier. - - @default false - */ - noImplicitOverride?: boolean; - - /** - Do not report errors on unreachable code. - - @default false - */ - allowUnreachableCode?: boolean; - - /** - Disallow inconsistently-cased references to the same file. - - @default true - */ - forceConsistentCasingInFileNames?: boolean; - - /** - Emit a v8 CPU profile of the compiler run for debugging. - - @default 'profile.cpuprofile' - */ - generateCpuProfile?: string; - - /** - Generates an event trace and a list of types. - */ - generateTrace?: boolean; - - /** - Base directory to resolve non-relative module names. - */ - baseUrl?: string; - - /** - Specify path mapping to be computed relative to baseUrl option. - */ - paths?: Record; - - /** - List of TypeScript language server plugins to load. - */ - plugins?: CompilerOptions.Plugin[]; - - /** - Specify list of root directories to be used when resolving modules. - */ - rootDirs?: string[]; - - /** - Specify list of directories for type definition files to be included. - */ - typeRoots?: string[]; - - /** - Type declaration files to be included in compilation. - */ - types?: string[]; - - /** - Enable tracing of the name resolution process. - - @default false - */ - traceResolution?: boolean; - - /** - Allow javascript files to be compiled. - - @default false - */ - allowJs?: boolean; - - /** - Do not truncate error messages. - - @default false - */ - noErrorTruncation?: boolean; - - /** - Allow default imports from modules with no default export. This does not affect code emit, just typechecking. - - @default module === 'system' || esModuleInterop - */ - allowSyntheticDefaultImports?: boolean; - - /** - Do not emit `'use strict'` directives in module output. - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - noImplicitUseStrict?: boolean; - - /** - Enable to list all emitted files. - - @default false - */ - listEmittedFiles?: boolean; - - /** - Disable size limit for JavaScript project. - - @default false - */ - disableSizeLimit?: boolean; - - /** - List of library files to be included in the compilation. - */ - lib?: CompilerOptions.Lib[]; - - /** - Enable strict null checks. - - @default false - */ - strictNullChecks?: boolean; - - /** - The maximum dependency depth to search under `node_modules` and load JavaScript files. Only applicable with `--allowJs`. - - @default 0 - */ - maxNodeModuleJsDepth?: number; - - /** - Import emit helpers (e.g. `__extends`, `__rest`, etc..) from tslib. - - @default false - */ - importHelpers?: boolean; - - /** - Specify emit/checking behavior for imports that are only used for types. - - @default 'remove' - @deprecated Use `verbatimModuleSyntax` instead. - */ - importsNotUsedAsValues?: CompilerOptions.ImportsNotUsedAsValues; - - /** - Parse in strict mode and emit `'use strict'` for each source file. - - @default false - */ - alwaysStrict?: boolean; - - /** - Enable all strict type checking options. - - @default false - */ - strict?: boolean; - - /** - Enable stricter checking of of the `bind`, `call`, and `apply` methods on functions. - - @default false - */ - strictBindCallApply?: boolean; - - /** - Provide full support for iterables in `for-of`, spread, and destructuring when targeting `ES5` or `ES3`. - - @default false - */ - downlevelIteration?: boolean; - - /** - Report errors in `.js` files. - - @default false - */ - checkJs?: boolean; - - /** - Built-in iterators are instantiated with a `TReturn` type of undefined instead of `any`. - - @default false - */ - strictBuiltinIteratorReturn?: boolean; - - /** - Disable bivariant parameter checking for function types. - - @default false - */ - strictFunctionTypes?: boolean; - - /** - Ensure non-undefined class properties are initialized in the constructor. - - @default false - */ - strictPropertyInitialization?: boolean; - - /** - Emit `__importStar` and `__importDefault` helpers for runtime Babel ecosystem compatibility and enable `--allowSyntheticDefaultImports` for typesystem compatibility. - - @default false - */ - esModuleInterop?: boolean; - - /** - Allow accessing UMD globals from modules. - - @default false - */ - allowUmdGlobalAccess?: boolean; - - /** - Resolve `keyof` to string valued property names only (no numbers or symbols). - - @default false - @deprecated This option will be removed in TypeScript 5.5. - */ - keyofStringsOnly?: boolean; - - /** - Emit ECMAScript standard class fields. - - @default false - */ - useDefineForClassFields?: boolean; - - /** - Generates a sourcemap for each corresponding `.d.ts` file. - - @default false - */ - declarationMap?: boolean; - - /** - Include modules imported with `.json` extension. - - @default false - */ - resolveJsonModule?: boolean; - - /** - Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it. - - @default false - */ - assumeChangesOnlyAffectDirectDependencies?: boolean; - - /** - Output more detailed compiler performance information after building. - - @default false - */ - extendedDiagnostics?: boolean; - - /** - Print names of files that are part of the compilation and then stop processing. - - @default false - */ - listFilesOnly?: boolean; - - /** - Disable preferring source files instead of declaration files when referencing composite projects. - - @default true if composite, false otherwise - */ - disableSourceOfProjectReferenceRedirect?: boolean; - - /** - Opt a project out of multi-project reference checking when editing. - - @default false - */ - disableSolutionSearching?: boolean; - - /** - Print names of files which TypeScript sees as a part of your project and the reason they are part of the compilation. - - @default false - */ - explainFiles?: boolean; - - /** - Preserve unused imported values in the JavaScript output that would otherwise be removed. - - @default true - @deprecated Use `verbatimModuleSyntax` instead. - */ - preserveValueImports?: boolean; - - /** - List of file name suffixes to search when resolving a module. - */ - moduleSuffixes?: string[]; - - /** - Control what method is used to detect module-format JS files. - - @default 'auto' - */ - moduleDetection?: CompilerOptions.ModuleDetection; - - /** - Allows TypeScript files to import each other with a TypeScript-specific extension like .ts, .mts, or .tsx. - - @default false - */ - allowImportingTsExtensions?: boolean; - - /** - Forces TypeScript to consult the exports field of package.json files if it ever reads from a package in node_modules. - - @default false - */ - resolvePackageJsonExports?: boolean; - - /** - Forces TypeScript to consult the imports field of package.json files when performing a lookup that starts with # from a file whose ancestor directory contains a package.json. - - @default false - */ - resolvePackageJsonImports?: boolean; - - /** - Suppress errors for file formats that TypeScript does not understand. - - @default false - */ - allowArbitraryExtensions?: boolean; - - /** - List of additional conditions that should succeed when TypeScript resolves from package.json. - */ - customConditions?: string[]; - - /** - Anything that uses the type modifier is dropped entirely. - - @default false - */ - verbatimModuleSyntax?: boolean; - - /** - Suppress deprecation warnings - */ - ignoreDeprecations?: CompilerOptions.IgnoreDeprecations; - - /** - Do not allow runtime constructs that are not part of ECMAScript. - - @default false - */ - erasableSyntaxOnly?: boolean; - - /** - Enable lib replacement. - - @default true - */ - libReplacement?: boolean; - }; - - namespace WatchOptions { - type WatchFileKind = - | 'FixedPollingInterval' - | 'PriorityPollingInterval' - | 'DynamicPriorityPolling' - | 'FixedChunkSizePolling' - | 'UseFsEvents' - | 'UseFsEventsOnParentDirectory'; - - type WatchDirectoryKind = - | 'UseFsEvents' - | 'FixedPollingInterval' - | 'DynamicPriorityPolling' - | 'FixedChunkSizePolling'; - - type PollingWatchKind = - | 'FixedInterval' - | 'PriorityInterval' - | 'DynamicPriority' - | 'FixedChunkSize'; - } - - type WatchOptions = { - - /** - Specify the strategy for watching individual files. - - @default 'UseFsEvents' - */ - watchFile?: WatchOptions.WatchFileKind | Lowercase; - - /** - Specify the strategy for watching directories under systems that lack recursive file-watching functionality. - - @default 'UseFsEvents' - */ - watchDirectory?: WatchOptions.WatchDirectoryKind | Lowercase; - - /** - Specify the polling strategy to use when the system runs out of or doesn't support native file watchers. - */ - fallbackPolling?: WatchOptions.PollingWatchKind | Lowercase; - - /** - Enable synchronous updates on directory watchers for platforms that don't support recursive watching natively. - */ - synchronousWatchDirectory?: boolean; - - /** - Specifies a list of directories to exclude from watch. - */ - excludeDirectories?: string[]; - - /** - Specifies a list of files to exclude from watch. - */ - excludeFiles?: string[]; - }; - - /** - Auto type (.d.ts) acquisition options for this project. - */ - type TypeAcquisition = { - /** - Enable auto type acquisition. - */ - enable?: boolean; - - /** - Specifies a list of type declarations to be included in auto type acquisition. For example, `['jquery', 'lodash']`. - */ - include?: string[]; - - /** - Specifies a list of type declarations to be excluded from auto type acquisition. For example, `['jquery', 'lodash']`. - */ - exclude?: string[]; - - /** - Disable infering what types should be added based on filenames in a project. - */ - disableFilenameBasedTypeAcquisition?: boolean; - }; - - type References = { - /** - A normalized path on disk. - */ - path: string; - - /** - The path as the user originally wrote it. - */ - originalPath?: string; - - /** - True if the output of this reference should be prepended to the output of this project. - - Only valid for `--outFile` compilations. - @deprecated This option will be removed in TypeScript 5.5. - */ - prepend?: boolean; - - /** - True if it is intended that this reference form a circularity. - */ - circular?: boolean; - }; -} - -/** -Type for [TypeScript's `tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (TypeScript 3.7). - -@category File -*/ -type TsConfigJson = { - /** - Instructs the TypeScript compiler how to compile `.ts` files. - */ - compilerOptions?: TsConfigJson.CompilerOptions; - - /** - Instructs the TypeScript compiler how to watch files. - */ - watchOptions?: TsConfigJson.WatchOptions; - - /** - Auto type (.d.ts) acquisition options for this project. - */ - typeAcquisition?: TsConfigJson.TypeAcquisition; - - /** - Enable Compile-on-Save for this project. - */ - compileOnSave?: boolean; - - /** - Path to base configuration file to inherit from. - */ - extends?: string | string[]; - - /** - If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. When a `files` property is specified, only those files and those specified by `include` are included. - */ - files?: string[]; - - /** - Specifies a list of files to be excluded from compilation. The `exclude` property only affects the files included via the `include` property and not the `files` property. - - Glob patterns require TypeScript version 2.0 or later. - */ - exclude?: string[]; - - /** - Specifies a list of glob patterns that match files to be included in compilation. - - If no `files` or `include` property is present in a `tsconfig.json`, the compiler defaults to including all files in the containing directory and subdirectories except those specified by `exclude`. - */ - include?: string[]; - - /** - Referenced projects. - */ - references?: TsConfigJson.References[]; -}; - -type TsConfigJsonResolved = Except; -type TsConfigResult = { - /** - * The path to the tsconfig.json file - */ - path: string; - /** - * The resolved tsconfig.json file - */ - config: TsConfigJsonResolved; -}; -type Cache = Map; - -/** - * Finds a tsconfig file, defaulting to `tsconfig.json`, starting from a given path. - * - * @param searchPath Starting directory (default: `process.cwd()`). - * @param configName Config file name (default: `tsconfig.json`). - * @param cache Cache for previous results (default: new `Map()`). - * @returns The tsconfig file path and parsed contents, or `null` if not found. - */ -declare const getTsconfig: (searchPath?: string, configName?: string, cache?: Cache) => TsConfigResult | null; - -/** - * Parses a tsconfig file at a given path - * - * @param tsconfigPath - Path to the tsconfig file. - * @param cache - Cache for storing parsed tsconfig results (default: new `Map()`). - * @returns The parsed and resolved tsconfig JSON. - */ -declare const parseTsconfig: (tsconfigPath: string, cache?: Cache) => TsConfigJsonResolved; - -/** - * Reference: - * https://github.com/microsoft/TypeScript/blob/3ccbe804f850f40d228d3c875be952d94d39aa1d/src/compiler/moduleNameResolver.ts#L2465 - */ -declare const createPathsMatcher: (tsconfig: TsConfigResult) => ((specifier: string) => string[]) | null; - -type FileMatcher = (filePath: string) => (TsConfigJsonResolved | undefined); -declare const createFilesMatcher: ({ config, path: tsconfigPath, }: TsConfigResult, caseSensitivePaths?: boolean) => FileMatcher; - -export { type Cache, type FileMatcher, TsConfigJson, type TsConfigJsonResolved, type TsConfigResult, createFilesMatcher, createPathsMatcher, getTsconfig, parseTsconfig }; diff --git a/skills/flight-finder/node_modules/get-tsconfig/dist/index.mjs b/skills/flight-finder/node_modules/get-tsconfig/dist/index.mjs deleted file mode 100755 index ef29eff..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/dist/index.mjs +++ /dev/null @@ -1,7 +0,0 @@ -var Le=Object.defineProperty;var i=(e,t)=>Le(e,"name",{value:t,configurable:!0});import m from"node:path";import re from"node:fs";import he from"node:module";import{resolveExports as Ee}from"resolve-pkg-maps";import xe from"fs";import Be from"os";import Ie from"path";function h(e){return e.startsWith("\\\\?\\")?e:e.replace(/\\/g,"/")}i(h,"slash");const Z=i(e=>{const t=re[e];return(s,...n)=>{const o=`${e}:${n.join(":")}`;let l=s==null?void 0:s.get(o);return l===void 0&&(l=Reflect.apply(t,re,n),s==null||s.set(o,l)),l}},"cacheFs"),E=Z("existsSync"),$e=Z("readFileSync"),G=Z("statSync"),fe=i((e,t,s)=>{for(;;){const n=m.posix.join(e,t);if(E(s,n))return n;const o=m.dirname(e);if(o===e)return;e=o}},"findUp"),q=/^\.{1,2}(\/.*)?$/,K=i(e=>{const t=h(e);return q.test(t)?t:`./${t}`},"normalizeRelativePath");function Ue(e,t=!1){const s=e.length;let n=0,o="",l=0,u=16,a=0,r=0,g=0,v=0,d=0;function _(c,y){let A=0,b=0;for(;A=48&&k<=57)b=b*16+k-48;else if(k>=65&&k<=70)b=b*16+k-65+10;else if(k>=97&&k<=102)b=b*16+k-97+10;else break;n++,A++}return A=s){c+=e.substring(y,n),d=2;break}const A=e.charCodeAt(n);if(A===34){c+=e.substring(y,n),n++;break}if(A===92){if(c+=e.substring(y,n),n++,n>=s){d=2;break}switch(e.charCodeAt(n++)){case 34:c+='"';break;case 92:c+="\\";break;case 47:c+="/";break;case 98:c+="\b";break;case 102:c+="\f";break;case 110:c+=` -`;break;case 114:c+="\r";break;case 116:c+=" ";break;case 117:const k=_(4);k>=0?c+=String.fromCharCode(k):d=4;break;default:d=5}y=n;continue}if(A>=0&&A<=31)if(J(A)){c+=e.substring(y,n),d=2;break}else d=6;n++}return c}i(L,"scanString");function T(){if(o="",d=0,l=n,r=a,v=g,n>=s)return l=s,u=17;let c=e.charCodeAt(n);if(O(c)){do n++,o+=String.fromCharCode(c),c=e.charCodeAt(n);while(O(c));return u=15}if(J(c))return n++,o+=String.fromCharCode(c),c===13&&e.charCodeAt(n)===10&&(n++,o+=` -`),a++,g=n,u=14;switch(c){case 123:return n++,u=1;case 125:return n++,u=2;case 91:return n++,u=3;case 93:return n++,u=4;case 58:return n++,u=6;case 44:return n++,u=5;case 34:return n++,o=L(),u=10;case 47:const y=n-1;if(e.charCodeAt(n+1)===47){for(n+=2;n=12&&c<=15);return c}return i(x,"scanNextNonTrivia"),{setPosition:p,getPosition:i(()=>n,"getPosition"),scan:t?x:T,getToken:i(()=>u,"getToken"),getTokenValue:i(()=>o,"getTokenValue"),getTokenOffset:i(()=>l,"getTokenOffset"),getTokenLength:i(()=>n-l,"getTokenLength"),getTokenStartLine:i(()=>r,"getTokenStartLine"),getTokenStartCharacter:i(()=>l-v,"getTokenStartCharacter"),getTokenError:i(()=>d,"getTokenError")}}i(Ue,"createScanner");function O(e){return e===32||e===9}i(O,"isWhiteSpace");function J(e){return e===10||e===13}i(J,"isLineBreak");function N(e){return e>=48&&e<=57}i(N,"isDigit");var ae;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(ae||(ae={})),new Array(20).fill(0).map((e,t)=>" ".repeat(t));const P=200;new Array(P).fill(0).map((e,t)=>` -`+" ".repeat(t)),new Array(P).fill(0).map((e,t)=>"\r"+" ".repeat(t)),new Array(P).fill(0).map((e,t)=>`\r -`+" ".repeat(t)),new Array(P).fill(0).map((e,t)=>` -`+" ".repeat(t)),new Array(P).fill(0).map((e,t)=>"\r"+" ".repeat(t)),new Array(P).fill(0).map((e,t)=>`\r -`+" ".repeat(t));var Q;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Q||(Q={}));function Ne(e,t=[],s=Q.DEFAULT){let n=null,o=[];const l=[];function u(r){Array.isArray(o)?o.push(r):n!==null&&(o[n]=r)}return i(u,"onValue"),Pe(e,{onObjectBegin:i(()=>{const r={};u(r),l.push(o),o=r,n=null},"onObjectBegin"),onObjectProperty:i(r=>{n=r},"onObjectProperty"),onObjectEnd:i(()=>{o=l.pop()},"onObjectEnd"),onArrayBegin:i(()=>{const r=[];u(r),l.push(o),o=r,n=null},"onArrayBegin"),onArrayEnd:i(()=>{o=l.pop()},"onArrayEnd"),onLiteralValue:u,onError:i((r,g,v)=>{t.push({error:r,offset:g,length:v})},"onError")},s),o[0]}i(Ne,"parse$1");function Pe(e,t,s=Q.DEFAULT){const n=Ue(e,!1),o=[];let l=0;function u(w){return w?()=>l===0&&w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}i(u,"toNoArgVisit");function a(w){return w?j=>l===0&&w(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}i(a,"toOneArgVisit");function r(w){return w?j=>l===0&&w(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice()):()=>!0}i(r,"toOneArgVisitWithPath");function g(w){return w?()=>{l>0?l++:w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>o.slice())===!1&&(l=1)}:()=>!0}i(g,"toBeginVisit");function v(w){return w?()=>{l>0&&l--,l===0&&w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}i(v,"toEndVisit");const d=g(t.onObjectBegin),_=r(t.onObjectProperty),p=v(t.onObjectEnd),D=g(t.onArrayBegin),L=v(t.onArrayEnd),T=r(t.onLiteralValue),F=a(t.onSeparator),x=u(t.onComment),c=a(t.onError),y=s&&s.disallowComments,A=s&&s.allowTrailingComma;function b(){for(;;){const w=n.scan();switch(n.getTokenError()){case 4:k(14);break;case 5:k(15);break;case 3:k(13);break;case 1:y||k(11);break;case 2:k(12);break;case 6:k(16);break}switch(w){case 12:case 13:y?k(10):x();break;case 16:k(1);break;case 15:case 14:break;default:return w}}}i(b,"scanNext");function k(w,j=[],S=[]){if(c(w),j.length+S.length>0){let $=n.getToken();for(;$!==17;){if(j.indexOf($)!==-1){b();break}else if(S.indexOf($)!==-1)break;$=b()}}}i(k,"handleError");function R(w){const j=n.getTokenValue();return w?T(j):(_(j),o.push(j)),b(),!0}i(R,"parseString");function W(){switch(n.getToken()){case 11:const w=n.getTokenValue();let j=Number(w);isNaN(j)&&(k(2),j=0),T(j);break;case 7:T(null);break;case 8:T(!0);break;case 9:T(!1);break;default:return!1}return b(),!0}i(W,"parseLiteral");function V(){return n.getToken()!==10?(k(3,[],[2,5]),!1):(R(!1),n.getToken()===6?(F(":"),b(),U()||k(4,[],[2,5])):k(5,[],[2,5]),o.pop(),!0)}i(V,"parseProperty");function M(){d(),b();let w=!1;for(;n.getToken()!==2&&n.getToken()!==17;){if(n.getToken()===5){if(w||k(4,[],[]),F(","),b(),n.getToken()===2&&A)break}else w&&k(6,[],[]);V()||k(4,[],[2,5]),w=!0}return p(),n.getToken()!==2?k(7,[2],[]):b(),!0}i(M,"parseObject");function z(){D(),b();let w=!0,j=!1;for(;n.getToken()!==4&&n.getToken()!==17;){if(n.getToken()===5){if(j||k(4,[],[]),F(","),b(),n.getToken()===4&&A)break}else j&&k(6,[],[]);w?(o.push(0),w=!1):o[o.length-1]++,U()||k(4,[],[4,5]),j=!0}return L(),w||o.pop(),n.getToken()!==4?k(8,[4],[]):b(),!0}i(z,"parseArray");function U(){switch(n.getToken()){case 3:return z();case 1:return M();case 10:return R(!0);default:return W()}}return i(U,"parseValue"),b(),n.getToken()===17?s.allowEmptyContent?!0:(k(4,[],[]),!1):U()?(n.getToken()!==17&&k(9,[],[]),!0):(k(4,[],[]),!1)}i(Pe,"visit");var ce;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(ce||(ce={}));var ge;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(ge||(ge={}));const Re=Ne;var ke;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(ke||(ke={}));const me=i((e,t)=>Re($e(t,e,"utf8")),"readJsonc"),C=Symbol("implicitBaseUrl"),I="${configDir}",Se=i(()=>{const{findPnpApi:e}=he;return e&&e(process.cwd())},"getPnpApi"),ee=i((e,t,s,n)=>{const o=`resolveFromPackageJsonPath:${e}:${t}:${s}`;if(n!=null&&n.has(o))return n.get(o);const l=me(e,n);if(!l)return;let u=t||"tsconfig.json";if(!s&&l.exports)try{const[a]=Ee(l.exports,t,["require","types"]);u=a}catch{return!1}else!t&&l.tsconfig&&(u=l.tsconfig);return u=m.join(e,"..",u),n==null||n.set(o,u),u},"resolveFromPackageJsonPath"),ne="package.json",te="tsconfig.json",Je=i((e,t,s)=>{let n=e;if(e===".."&&(n=m.join(n,te)),e[0]==="."&&(n=m.resolve(t,n)),m.isAbsolute(n)){if(E(s,n)){if(G(s,n).isFile())return n}else if(!n.endsWith(".json")){const p=`${n}.json`;if(E(s,p))return p}return}const[o,...l]=e.split("/"),u=o[0]==="@"?`${o}/${l.shift()}`:o,a=l.join("/"),r=Se();if(r){const{resolveRequest:p}=r;try{if(u===e){const D=p(m.join(u,ne),t);if(D){const L=ee(D,a,!1,s);if(L&&E(s,L))return L}}else{let D;try{D=p(e,t,{extensions:[".json"]})}catch{D=p(m.join(e,te),t)}if(D)return D}}catch{}}const g=fe(m.resolve(t),m.join("node_modules",u),s);if(!g||!G(s,g).isDirectory())return;const v=m.join(g,ne);if(E(s,v)){const p=ee(v,a,!1,s);if(p===!1)return;if(p&&E(s,p)&&G(s,p).isFile())return p}const d=m.join(g,a),_=d.endsWith(".json");if(!_){const p=`${d}.json`;if(E(s,p))return p}if(E(s,d)){if(G(s,d).isDirectory()){const p=m.join(d,ne);if(E(s,p)){const L=ee(p,"",!0,s);if(L&&E(s,L))return L}const D=m.join(d,te);if(E(s,D))return D}else if(_)return d}},"resolveExtendsPath"),se=i((e,t)=>K(m.relative(e,t)),"pathRelative"),we=["files","include","exclude"],de=i((e,t,s)=>{const n=m.join(t,s),o=m.relative(e,n);return h(o)||"./"},"resolveAndRelativize"),We=i((e,t,s)=>{const n=m.relative(e,t);if(!n)return s;const o=s.startsWith("./")?s.slice(2):s;return h(`${n}/${o}`)},"prefixPattern"),Ve=i((e,t,s,n)=>{const o=Je(e,t,n);if(!o)throw new Error(`File '${e}' not found.`);if(s.has(o))throw new Error(`Circularity detected while resolving configuration: ${o}`);s.add(o);const l=m.dirname(o),u=ve(o,n,s);delete u.references;const{compilerOptions:a}=u;if(a){const{baseUrl:r}=a;r&&!r.startsWith(I)&&(a.baseUrl=de(t,l,r));const{outDir:g}=a;g&&!g.startsWith(I)&&(a.outDir=de(t,l,g))}for(const r of we){const g=u[r];g&&(u[r]=g.map(v=>v.startsWith(I)?v:We(t,l,v)))}return u},"resolveExtends"),be=["outDir","declarationDir"],ve=i((e,t,s=new Set)=>{let n;try{n=me(e,t)||{}}catch{throw new Error(`Cannot resolve tsconfig at path: ${e}`)}if(typeof n!="object")throw new SyntaxError(`Failed to parse tsconfig at: ${e}`);const o=m.dirname(e);if(n.compilerOptions){const{compilerOptions:l}=n;l.paths&&!l.baseUrl&&(l[C]=o)}if(n.extends){const l=Array.isArray(n.extends)?n.extends:[n.extends];delete n.extends;for(const u of l.reverse()){const a=Ve(u,o,new Set(s),t),r={...a,...n,compilerOptions:{...a.compilerOptions,...n.compilerOptions}};a.watchOptions&&(r.watchOptions={...a.watchOptions,...n.watchOptions}),n=r}}if(n.compilerOptions){const{compilerOptions:l}=n,u=["baseUrl","rootDir"];for(const a of u){const r=l[a];if(r&&!r.startsWith(I)){const g=m.resolve(o,r),v=se(o,g);l[a]=v}}for(const a of be){let r=l[a];r&&(Array.isArray(n.exclude)||(n.exclude=be.map(g=>l[g]).filter(Boolean)),r.startsWith(I)||(r=K(r)),l[a]=r)}}else n.compilerOptions={};if(n.include&&(n.include=n.include.map(h)),n.files&&(n.files=n.files.map(l=>l.startsWith(I)?l:K(l))),n.watchOptions){const{watchOptions:l}=n;l.excludeDirectories&&(l.excludeDirectories=l.excludeDirectories.map(u=>h(m.resolve(o,u)))),l.excludeFiles&&(l.excludeFiles=l.excludeFiles.map(u=>h(m.resolve(o,u)))),l.watchFile&&(l.watchFile=l.watchFile.toLowerCase()),l.watchDirectory&&(l.watchDirectory=l.watchDirectory.toLowerCase()),l.fallbackPolling&&(l.fallbackPolling=l.fallbackPolling.toLowerCase())}return n},"_parseTsconfig"),H=i((e,t)=>{if(e.startsWith(I))return h(m.join(t,e.slice(I.length)))},"interpolateConfigDir"),Me=["outDir","declarationDir","outFile","rootDir","baseUrl","tsBuildInfoFile"],ze=i(e=>{var t,s,n,o,l,u,a,r,g,v,d,_,p,D,L,T,F,x,c,y,A,b,k,R,W,V,M,z,U,w,j,S,$;if(e.strict){const f=["noImplicitAny","noImplicitThis","strictNullChecks","strictFunctionTypes","strictBindCallApply","strictPropertyInitialization","strictBuiltinIteratorReturn","alwaysStrict","useUnknownInCatchVariables"];for(const B of f)e[B]===void 0&&(e[B]=!0)}if(e.composite&&((t=e.declaration)!=null||(e.declaration=!0),(s=e.incremental)!=null||(e.incremental=!0)),e.target){let f=e.target.toLowerCase();f==="es2015"&&(f="es6"),e.target=f,f==="esnext"&&((n=e.module)!=null||(e.module="es6"),(o=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0)),(f==="es6"||f==="es2016"||f==="es2017"||f==="es2018"||f==="es2019"||f==="es2020"||f==="es2021"||f==="es2022"||f==="es2023"||f==="es2024")&&((l=e.module)!=null||(e.module="es6")),(f==="es2022"||f==="es2023"||f==="es2024")&&((u=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0))}if(e.module){let f=e.module.toLowerCase();if(f==="es2015"&&(f="es6"),e.module=f,(f==="es6"||f==="es2020"||f==="es2022"||f==="esnext"||f==="none"||f==="system"||f==="umd"||f==="amd")&&((a=e.moduleResolution)!=null||(e.moduleResolution="classic")),f==="system"&&((r=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),(f==="node16"||f==="node18"||f==="node20"||f==="nodenext"||f==="preserve")&&((g=e.esModuleInterop)!=null||(e.esModuleInterop=!0),(v=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),(f==="node16"||f==="node18"||f==="node20"||f==="nodenext")&&((d=e.moduleDetection)!=null||(e.moduleDetection="force")),f==="node16"&&((_=e.target)!=null||(e.target="es2022"),(p=e.moduleResolution)!=null||(e.moduleResolution="node16")),f==="node18"&&((D=e.target)!=null||(e.target="es2022"),(L=e.moduleResolution)!=null||(e.moduleResolution="node16")),f==="node20"&&((T=e.target)!=null||(e.target="es2023"),(F=e.moduleResolution)!=null||(e.moduleResolution="node16"),(x=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0)),f==="nodenext"&&((c=e.target)!=null||(e.target="esnext"),(y=e.moduleResolution)!=null||(e.moduleResolution="nodenext"),(A=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0)),f==="node16"||f==="node18"||f==="node20"||f==="nodenext"){const B=e.target;(B==="es3"||B==="es2022"||B==="es2023"||B==="es2024"||B==="esnext")&&((b=e.useDefineForClassFields)!=null||(e.useDefineForClassFields=!0))}f==="preserve"&&((k=e.moduleResolution)!=null||(e.moduleResolution="bundler"))}if(e.moduleResolution){let f=e.moduleResolution.toLowerCase();f==="node"&&(f="node10"),e.moduleResolution=f,(f==="node16"||f==="nodenext"||f==="bundler")&&((R=e.resolvePackageJsonExports)!=null||(e.resolvePackageJsonExports=!0),(W=e.resolvePackageJsonImports)!=null||(e.resolvePackageJsonImports=!0)),f==="bundler"&&((V=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0),(M=e.resolveJsonModule)!=null||(e.resolveJsonModule=!0))}e.jsx&&(e.jsx=e.jsx.toLowerCase()),e.moduleDetection&&(e.moduleDetection=e.moduleDetection.toLowerCase()),e.importsNotUsedAsValues&&(e.importsNotUsedAsValues=e.importsNotUsedAsValues.toLowerCase()),e.newLine&&(e.newLine=e.newLine.toLowerCase()),e.esModuleInterop&&((z=e.allowSyntheticDefaultImports)!=null||(e.allowSyntheticDefaultImports=!0)),e.verbatimModuleSyntax&&((U=e.isolatedModules)!=null||(e.isolatedModules=!0),(w=e.preserveConstEnums)!=null||(e.preserveConstEnums=!0)),e.isolatedModules&&((j=e.preserveConstEnums)!=null||(e.preserveConstEnums=!0)),e.rewriteRelativeImportExtensions&&((S=e.allowImportingTsExtensions)!=null||(e.allowImportingTsExtensions=!0)),e.lib&&(e.lib=e.lib.map(f=>f.toLowerCase())),e.checkJs&&(($=e.allowJs)!=null||(e.allowJs=!0))},"normalizeCompilerOptions"),pe=i((e,t=new Map)=>{const s=m.resolve(e),n=ve(s,t),o=m.dirname(s),{compilerOptions:l}=n;if(l){for(const a of Me){const r=l[a];if(r){const g=H(r,o);l[a]=g?se(o,g):r}}for(const a of["rootDirs","typeRoots"]){const r=l[a];r&&(l[a]=r.map(g=>{const v=H(g,o);return v?se(o,v):g}))}const{paths:u}=l;if(u)for(const a of Object.keys(u))u[a]=u[a].map(r=>{var g;return(g=H(r,o))!=null?g:r});ze(l)}for(const u of we){const a=n[u];a&&(n[u]=a.map(r=>{var g;return(g=H(r,o))!=null?g:r}))}return n},"parseTsconfig"),Ge=i((e=process.cwd(),t="tsconfig.json",s=new Map)=>{const n=fe(h(e),t,s);if(!n)return null;const o=pe(n,s);return{path:n,config:o}},"getTsconfig"),Qe=/\*/g,Te=i((e,t)=>{const s=e.match(Qe);if(s&&s.length>1)throw new Error(t)},"assertStarCount"),He=i(e=>{if(e.includes("*")){const[t,s]=e.split("*");return{prefix:t,suffix:s}}return e},"parsePattern"),Xe=i(({prefix:e,suffix:t},s)=>s.startsWith(e)&&s.endsWith(t),"isPatternMatch"),Ye=i((e,t,s)=>Object.entries(e).map(([n,o])=>(Te(n,`Pattern '${n}' can have at most one '*' character.`),{pattern:He(n),substitutions:o.map(l=>{if(Te(l,`Substitution '${l}' in pattern '${n}' can have at most one '*' character.`),!t&&!q.test(l)&&!m.isAbsolute(l))throw new Error("Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?");return m.resolve(s,l)})})),"parsePaths"),Ze=i(e=>{const{compilerOptions:t}=e.config;if(!t)return null;const{baseUrl:s,paths:n}=t;if(!s&&!n)return null;const o=C in t&&t[C],l=m.resolve(m.dirname(e.path),s||o||"."),u=n?Ye(n,s,l):[];return a=>{if(q.test(a))return[];const r=[];for(const _ of u){if(_.pattern===a)return _.substitutions.map(h);typeof _.pattern!="string"&&r.push(_)}let g,v=-1;for(const _ of r)Xe(_.pattern,a)&&_.pattern.prefix.length>v&&(v=_.pattern.prefix.length,g=_);if(!g)return s?[h(m.join(l,a))]:[];const d=a.slice(g.pattern.prefix.length,a.length-g.pattern.suffix.length);return g.substitutions.map(_=>h(_.replace("*",d)))}},"createPathsMatcher");var qe=Object.defineProperty,X=i((e,t)=>qe(e,"name",{value:t,configurable:!0}),"s");const Ae=X(e=>{let t="";for(let s=0;s{const s=Ie.join(e,`.is-fs-case-sensitive-test-${process.pid}`);try{return t.writeFileSync(s,""),!t.existsSync(Ae(s))}finally{try{t.unlinkSync(s)}catch{}}},"checkDirectoryCaseWithWrite"),Ke=X((e,t,s)=>{try{return _e(e,s)}catch(n){if(t===void 0)return _e(Be.tmpdir(),s);throw n}},"checkDirectoryCaseWithFallback"),Oe=X((e,t=xe,s=!0)=>{const n=e!=null?e:process.cwd();if(s&&le.has(n))return le.get(n);let o;const l=Ae(n);return l!==n&&t.existsSync(n)?o=!t.existsSync(l):o=Ke(n,e,t),s&&le.set(n,o),o},"isFsCaseSensitive"),{join:ye}=m.posix,oe={ts:[".ts",".tsx",".d.ts"],cts:[".cts",".d.cts"],mts:[".mts",".d.mts"]},Ce=i(e=>{const t=[...oe.ts],s=[...oe.cts],n=[...oe.mts];return e!=null&&e.allowJs&&(t.push(".js",".jsx"),s.push(".cjs"),n.push(".mjs")),[...t,...s,...n]},"getSupportedExtensions"),en=i(e=>{const t=[];if(!e)return t;const{outDir:s,declarationDir:n}=e;return s&&t.push(s),n&&t.push(n),t},"getDefaultExcludeSpec"),je=i(e=>e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),"escapeForRegexp"),nn=["node_modules","bower_components","jspm_packages"],ie=`(?!(${nn.join("|")})(/|$))`,tn=/(?:^|\/)[^.*?]+$/,Fe="**/*",Y="[^/]",ue="[^./]",De=process.platform==="win32",sn=i(({config:e,path:t},s=Oe())=>{if("extends"in e)throw new Error("tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.");if(!m.isAbsolute(t))throw new Error("The tsconfig path must be absolute");De&&(t=h(t));const n=m.dirname(t),{files:o,include:l,exclude:u,compilerOptions:a}=e,r=i(T=>m.isAbsolute(T)?T:ye(n,T),"resolvePattern"),g=o==null?void 0:o.map(r),v=Ce(a),d=s?"":"i",p=(u||en(a)).map(T=>{const F=r(T),x=je(F).replaceAll(String.raw`\*\*/`,"(.+/)?").replaceAll(String.raw`\*`,`${Y}*`).replaceAll(String.raw`\?`,Y);return new RegExp(`^${x}($|/)`,d)}),D=o||l?l:[Fe],L=D?D.map(T=>{let F=r(T);tn.test(F)&&(F=ye(F,Fe));const x=je(F).replaceAll(String.raw`/\*\*`,`(/${ie}${ue}${Y}*)*?`).replaceAll(/(\/)?\\\*/g,(c,y)=>{const A=`(${ue}|(\\.(?!min\\.js$))?)*`;return y?`/${ie}${ue}${A}`:A}).replaceAll(/(\/)?\\\?/g,(c,y)=>{const A=Y;return y?`/${ie}${A}`:A});return new RegExp(`^${x}$`,d)}):void 0;return T=>{if(!m.isAbsolute(T))throw new Error("filePath must be absolute");if(De&&(T=h(T)),g!=null&&g.includes(T))return e;if(!(!v.some(F=>T.endsWith(F))||p.some(F=>F.test(T)))&&L&&L.some(F=>F.test(T)))return e}},"createFilesMatcher");export{sn as createFilesMatcher,Ze as createPathsMatcher,Ge as getTsconfig,pe as parseTsconfig}; diff --git a/skills/flight-finder/node_modules/get-tsconfig/package.json b/skills/flight-finder/node_modules/get-tsconfig/package.json deleted file mode 100644 index fc78eca..0000000 --- a/skills/flight-finder/node_modules/get-tsconfig/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "get-tsconfig", - "version": "4.13.7", - "description": "Find and parse the tsconfig.json file from a directory path", - "keywords": [ - "get-tsconfig", - "get", - "typescript", - "tsconfig", - "tsconfig.json" - ], - "license": "MIT", - "repository": "privatenumber/get-tsconfig", - "funding": "https://github.com/privatenumber/get-tsconfig?sponsor=1", - "author": { - "name": "Hiroki Osame", - "email": "hiroki.osame@gmail.com" - }, - "files": [ - "dist" - ], - "type": "module", - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.cts", - "exports": { - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - }, - "import": { - "types": "./dist/index.d.mts", - "default": "./dist/index.mjs" - } - }, - "imports": { - "#get-tsconfig": { - "types": "./src/index.ts", - "development": "./src/index.ts", - "default": "./dist/index.mjs" - } - }, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - } -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/.babelrc b/skills/flight-finder/node_modules/jpeg-exif/.babelrc deleted file mode 100644 index 6a9be79..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - "env" - ] -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/.eslintrc.json b/skills/flight-finder/node_modules/jpeg-exif/.eslintrc.json deleted file mode 100644 index 6f67564..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "airbnb-base" -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/.travis.yml b/skills/flight-finder/node_modules/jpeg-exif/.travis.yml deleted file mode 100644 index 3af24ca..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - "10" -before_script: - - "npm i mocha chai coveralls istanbul" -after_success: - - "rm -rf ./coverage && npm r mocha chai istanbul coveralls" diff --git a/skills/flight-finder/node_modules/jpeg-exif/LICENSE.txt b/skills/flight-finder/node_modules/jpeg-exif/LICENSE.txt deleted file mode 100644 index 772b520..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 邵振华 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/skills/flight-finder/node_modules/jpeg-exif/README.md b/skills/flight-finder/node_modules/jpeg-exif/README.md deleted file mode 100644 index d852604..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# jpeg-exif -Get exif information from jpeg format file. Works with TIFF too! - -[![npm](https://img.shields.io/npm/dm/jpeg-exif.svg)][npm-url] [![Inline docs](http://inch-ci.org/github/zhso/jpeg-exif.svg?branch=master&style=shields)](http://inch-ci.org/github/zhso/jpeg-exif) [![Build Status](https://travis-ci.org/zhso/jpeg-exif.svg?branch=master)](https://travis-ci.org/zhso/jpeg-exif) [![Coverage Status](https://coveralls.io/repos/github/zhso/jpeg-exif/badge.svg?branch=master)](https://coveralls.io/github/zhso/jpeg-exif?branch=master) - -[npm-url]: https://npmjs.org/package/jpeg-exif -### Async - -```js -import exif from "jpeg-exif"; - -const filePath = "~/Photo/IMG_0001.JPG"; - -exif.parse(filePath, (err, data) => { - if (err) { - console.log(err); - } else { - console.log(data); - } -}); -``` - -### Sync - -```js -import exif from "jpeg-exif"; - -const filePath = "~/Photo/IMG_0001.JPG"; -const data = exif.parseSync(filePath); - -console.log(data); -``` - -## From Buffer - -```js -import fs from "fs"; -import exif from "jpeg-exif"; - -const filePath = "~/Documents/DOC_0001.TIFF"; -const buffer = fs.readFileSync(filePath); -const data = exif.fromBuffer(buffer); - -console.log(data); -``` - -## Features - -* Support All CP3451 Standard Tags (Include GPS & SubExif Tags) -* Support Sync, Async -* Support pass Buffer Type - -## Installation - -```bash -$ npm i jpeg-exif -``` - -## Callback Data Format - -```js -{ - "Make": "Apple", - "Model": "Apple", - //... - "SubExif": [ - "DateTimeOriginal": "2015:10:06 17:19:36", - "CreateDate": "2015:10:06 17:19:36", - //... - ], - "GPSInfo":[ - "GPSLatitudeRef": "N", - "GPSLatitude": [ 35, 39, 40.08 ], - //... - ] -} -``` diff --git a/skills/flight-finder/node_modules/jpeg-exif/lib/index.js b/skills/flight-finder/node_modules/jpeg-exif/lib/index.js deleted file mode 100644 index cccf1bb..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/lib/index.js +++ /dev/null @@ -1,376 +0,0 @@ -'use strict'; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tags = require('./tags.json'); - -/* - unsignedByte, - asciiStrings, - unsignedShort, - unsignedLong, - unsignedRational, - signedByte, - undefined, - signedShort, - signedLong, - signedRational, - singleFloat, - doubleFloat - */ -var bytes = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8]; -var SOIMarkerLength = 2; -var JPEGSOIMarker = 0xffd8; -var TIFFINTEL = 0x4949; -var TIFFMOTOROLA = 0x4d4d; -var APPMarkerLength = 2; -var APPMarkerBegin = 0xffe0; -var APPMarkerEnd = 0xffef; -var data = void 0; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var isImage = isValid(content); - * console.log(isImage); - */ -var isValid = function isValid(buffer) { - try { - var SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === JPEGSOIMarker; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - */ -var isTiff = function isTiff(buffer) { - try { - var SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === TIFFINTEL || SOIMarker === TIFFMOTOROLA; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Number} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var APPNumber = checkAPPn(content); - * console.log(APPNumber); - */ -var checkAPPn = function checkAPPn(buffer) { - try { - var APPMarkerTag = buffer.readUInt16BE(0); - var isInRange = APPMarkerTag >= APPMarkerBegin && APPMarkerTag <= APPMarkerEnd; - return isInRange ? APPMarkerTag - APPMarkerBegin : false; - } catch (e) { - throw new Error('Invalid APP Tag.'); - } -}; -/** - * @param buffer {Buffer} - * @param tagCollection {Object} - * @param order {Boolean} - * @param offset {Number} - * @returns {Object} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = IFDHandler(content, 0, true, 8); - * console.log(exifFragments.value); - */ -var IFDHandler = function IFDHandler(buffer, tagCollection, order, offset) { - var entriesNumber = order ? buffer.readUInt16BE(0) : buffer.readUInt16LE(0); - - if (entriesNumber === 0) { - return {}; - } - - var entriesNumberLength = 2; - var entries = buffer.slice(entriesNumberLength); - var entryLength = 12; - // let nextIFDPointerBegin = entriesNumberLength + entryLength * entriesNumber; - // let bigNextIFDPointer= buffer.readUInt32BE(nextIFDPointerBegin) ; - // let littleNextIFDPointer= buffer.readUInt32LE(nextIFDPointerBegin); - // let nextIFDPointer = order ?bigNextIFDPointer:littleNextIFDPointer; - var exif = {}; - var entryCount = 0; - - for (entryCount; entryCount < entriesNumber; entryCount += 1) { - var entryBegin = entryCount * entryLength; - var entry = entries.slice(entryBegin, entryBegin + entryLength); - var tagBegin = 0; - var tagLength = 2; - var dataFormatBegin = tagBegin + tagLength; - var dataFormatLength = 2; - var componentsBegin = dataFormatBegin + dataFormatLength; - var componentsNumberLength = 4; - var dataValueBegin = componentsBegin + componentsNumberLength; - var dataValueLength = 4; - var tagAddress = entry.slice(tagBegin, dataFormatBegin); - var tagNumber = order ? tagAddress.toString('hex') : tagAddress.reverse().toString('hex'); - var tagName = tagCollection[tagNumber]; - var bigDataFormat = entry.readUInt16BE(dataFormatBegin); - var littleDataFormat = entry.readUInt16LE(dataFormatBegin); - var dataFormat = order ? bigDataFormat : littleDataFormat; - var componentsByte = bytes[dataFormat]; - var bigComponentsNumber = entry.readUInt32BE(componentsBegin); - var littleComponentNumber = entry.readUInt32LE(componentsBegin); - var componentsNumber = order ? bigComponentsNumber : littleComponentNumber; - var dataLength = componentsNumber * componentsByte; - var dataValue = entry.slice(dataValueBegin, dataValueBegin + dataValueLength); - - if (dataLength > 4) { - var dataOffset = (order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0)) - offset; - dataValue = buffer.slice(dataOffset, dataOffset + dataLength); - } - - var tagValue = void 0; - - if (tagName) { - switch (dataFormat) { - case 1: - tagValue = dataValue.readUInt8(0); - break; - case 2: - tagValue = dataValue.toString('ascii').replace(/\0+$/, ''); - break; - case 3: - tagValue = order ? dataValue.readUInt16BE(0) : dataValue.readUInt16LE(0); - break; - case 4: - tagValue = order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0); - break; - case 5: - tagValue = []; - - for (var i = 0; i < dataValue.length; i += 8) { - var bigTagValue = dataValue.readUInt32BE(i) / dataValue.readUInt32BE(i + 4); - var littleTagValue = dataValue.readUInt32LE(i) / dataValue.readUInt32LE(i + 4); - tagValue.push(order ? bigTagValue : littleTagValue); - } - - break; - case 7: - switch (tagName) { - case 'ExifVersion': - tagValue = dataValue.toString(); - break; - case 'FlashPixVersion': - tagValue = dataValue.toString(); - break; - case 'SceneType': - tagValue = dataValue.readUInt8(0); - break; - default: - tagValue = '0x' + dataValue.toString('hex', 0, 15); - break; - } - break; - case 10: - { - var bigOrder = dataValue.readInt32BE(0) / dataValue.readInt32BE(4); - var littleOrder = dataValue.readInt32LE(0) / dataValue.readInt32LE(4); - tagValue = order ? bigOrder : littleOrder; - break; - } - default: - tagValue = '0x' + dataValue.toString('hex'); - break; - } - exif[tagName] = tagValue; - } - /* - else { - console.log(`Unkown Tag [0x${tagNumber}].`); - } - */ - } - return exif; -}; - -/** - * @param buf {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = EXIFHandler(content); - */ -var EXIFHandler = function EXIFHandler(buf) { - var pad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - var buffer = buf; - - if (pad) { - buffer = buf.slice(APPMarkerLength); - var length = buffer.readUInt16BE(0); - buffer = buffer.slice(0, length); - var lengthLength = 2; - buffer = buffer.slice(lengthLength); - var identifierLength = 5; - buffer = buffer.slice(identifierLength); - var padLength = 1; - buffer = buffer.slice(padLength); - } - - var byteOrderLength = 2; - var byteOrder = buffer.toString('ascii', 0, byteOrderLength) === 'MM'; - var fortyTwoLength = 2; - var fortyTwoEnd = byteOrderLength + fortyTwoLength; - var big42 = buffer.readUInt32BE(fortyTwoEnd); - var little42 = buffer.readUInt32LE(fortyTwoEnd); - var offsetOfIFD = byteOrder ? big42 : little42; - - buffer = buffer.slice(offsetOfIFD); - - if (buffer.length > 0) { - data = IFDHandler(buffer, tags.ifd, byteOrder, offsetOfIFD); - - if (data.ExifIFDPointer) { - buffer = buffer.slice(data.ExifIFDPointer - offsetOfIFD); - data.SubExif = IFDHandler(buffer, tags.ifd, byteOrder, data.ExifIFDPointer); - } - - if (data.GPSInfoIFDPointer) { - var gps = data.GPSInfoIFDPointer; - buffer = buffer.slice(data.ExifIFDPointer ? gps - data.ExifIFDPointer : gps - offsetOfIFD); - data.GPSInfo = IFDHandler(buffer, tags.gps, byteOrder, gps); - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = APPnHandler(content); - */ -var APPnHandler = function APPnHandler(buffer) { - var APPMarkerTag = checkAPPn(buffer); - - if (APPMarkerTag !== false) { - // APP0 is 0, and 0==false - var length = buffer.readUInt16BE(APPMarkerLength); - - switch (APPMarkerTag) { - case 1: - // EXIF - EXIFHandler(buffer); - break; - default: - APPnHandler(buffer.slice(APPMarkerLength + length)); - break; - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Object} - * @example - */ -var fromBuffer = function fromBuffer(buffer) { - if (!buffer) { - throw new Error('buffer not found'); - } - - data = undefined; - - if (isValid(buffer)) { - buffer = buffer.slice(SOIMarkerLength); - data = {}; - APPnHandler(buffer); - } else if (isTiff(buffer)) { - data = {}; - EXIFHandler(buffer, false); - } - - return data; -}; - -/** - * @param file {String} - * @returns {Object} - * @example - * var exif = sync("~/Picture/IMG_1981.JPG"); - * console.log(exif.createTime); - */ -var sync = function sync(file) { - if (!file) { - throw new Error('File not found'); - } - - var buffer = _fs2.default.readFileSync(file); - - return fromBuffer(buffer); -}; - -/** - * @param file {String} - * @param callback {Function} - * @example - * async("~/Picture/IMG_0707.JPG", (err, data) => { - * if(err) { - * console.log(err); - * } - * if(data) { - * console.log(data.ExifOffset.createTime); - * } - * } - */ -var async = function async(file, callback) { - data = undefined; - - new Promise(function (resolve, reject) { - if (!file) { - reject(new Error('❓File not found.')); - } - - _fs2.default.readFile(file, function (err, buffer) { - if (err) { - reject(err); - } else { - try { - if (isValid(buffer)) { - var buf = buffer.slice(SOIMarkerLength); - - data = {}; - - APPnHandler(buf); - resolve(data); - } else if (isTiff(buffer)) { - data = {}; - - EXIFHandler(buffer, false); - resolve(data); - } else { - reject(new Error('😱Unsupport file type.')); - } - } catch (e) { - reject(e); - } - } - }); - }, function (error) { - callback(error, undefined); - }).then(function (d) { - callback(undefined, d); - }).catch(function (error) { - callback(error, undefined); - }); -}; - -exports.fromBuffer = fromBuffer; -exports.parse = async; -exports.parseSync = sync; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/lib/index.js.map b/skills/flight-finder/node_modules/jpeg-exif/lib/index.js.map deleted file mode 100644 index c11fb8f..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/index.js"],"names":["tags","require","bytes","SOIMarkerLength","JPEGSOIMarker","TIFFINTEL","TIFFMOTOROLA","APPMarkerLength","APPMarkerBegin","APPMarkerEnd","data","isValid","buffer","SOIMarker","readUInt16BE","e","Error","isTiff","checkAPPn","APPMarkerTag","isInRange","IFDHandler","tagCollection","order","offset","entriesNumber","readUInt16LE","entriesNumberLength","entries","slice","entryLength","exif","entryCount","entryBegin","entry","tagBegin","tagLength","dataFormatBegin","dataFormatLength","componentsBegin","componentsNumberLength","dataValueBegin","dataValueLength","tagAddress","tagNumber","toString","reverse","tagName","bigDataFormat","littleDataFormat","dataFormat","componentsByte","bigComponentsNumber","readUInt32BE","littleComponentNumber","readUInt32LE","componentsNumber","dataLength","dataValue","dataOffset","tagValue","readUInt8","replace","i","length","bigTagValue","littleTagValue","push","bigOrder","readInt32BE","littleOrder","readInt32LE","EXIFHandler","buf","pad","lengthLength","identifierLength","padLength","byteOrderLength","byteOrder","fortyTwoLength","fortyTwoEnd","big42","little42","offsetOfIFD","ifd","ExifIFDPointer","SubExif","GPSInfoIFDPointer","gps","GPSInfo","APPnHandler","fromBuffer","undefined","sync","file","fs","readFileSync","async","callback","Promise","resolve","reject","readFile","err","error","then","d","catch","exports","parse","parseSync"],"mappings":"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","file":"index.js","sourcesContent":["import fs from 'fs';\n\nconst tags = require('./tags.json');\n\n/*\n unsignedByte,\n asciiStrings,\n unsignedShort,\n unsignedLong,\n unsignedRational,\n signedByte,\n undefined,\n signedShort,\n signedLong,\n signedRational,\n singleFloat,\n doubleFloat\n */\nconst bytes = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8];\nconst SOIMarkerLength = 2;\nconst JPEGSOIMarker = 0xffd8;\nconst TIFFINTEL = 0x4949;\nconst TIFFMOTOROLA = 0x4d4d;\nconst APPMarkerLength = 2;\nconst APPMarkerBegin = 0xffe0;\nconst APPMarkerEnd = 0xffef;\nlet data;\n/**\n * @param buffer {Buffer}\n * @returns {Boolean}\n * @example\n * var content = fs.readFileSync(\"~/Picture/IMG_0911.JPG\");\n * var isImage = isValid(content);\n * console.log(isImage);\n */\nconst isValid = (buffer) => {\n try {\n const SOIMarker = buffer.readUInt16BE(0);\n return SOIMarker === JPEGSOIMarker;\n } catch (e) {\n throw new Error('Unsupport file format.');\n }\n};\n/**\n * @param buffer {Buffer}\n * @returns {Boolean}\n * @example\n */\nconst isTiff = (buffer) => {\n try {\n const SOIMarker = buffer.readUInt16BE(0);\n return SOIMarker === TIFFINTEL || SOIMarker === TIFFMOTOROLA;\n } catch (e) {\n throw new Error('Unsupport file format.');\n }\n};\n/**\n * @param buffer {Buffer}\n * @returns {Number}\n * @example\n * var content = fs.readFileSync(\"~/Picture/IMG_0911.JPG\");\n * var APPNumber = checkAPPn(content);\n * console.log(APPNumber);\n */\nconst checkAPPn = (buffer) => {\n try {\n const APPMarkerTag = buffer.readUInt16BE(0);\n const isInRange = APPMarkerTag >= APPMarkerBegin && APPMarkerTag <= APPMarkerEnd;\n return isInRange ? APPMarkerTag - APPMarkerBegin : false;\n } catch (e) {\n throw new Error('Invalid APP Tag.');\n }\n};\n/**\n * @param buffer {Buffer}\n * @param tagCollection {Object}\n * @param order {Boolean}\n * @param offset {Number}\n * @returns {Object}\n * @example\n * var content = fs.readFileSync(\"~/Picture/IMG_0911.JPG\");\n * var exifFragments = IFDHandler(content, 0, true, 8);\n * console.log(exifFragments.value);\n */\nconst IFDHandler = (buffer, tagCollection, order, offset) => {\n const entriesNumber = order ? buffer.readUInt16BE(0) : buffer.readUInt16LE(0);\n\n if (entriesNumber === 0) {\n return {};\n }\n\n const entriesNumberLength = 2;\n const entries = buffer.slice(entriesNumberLength);\n const entryLength = 12;\n // let nextIFDPointerBegin = entriesNumberLength + entryLength * entriesNumber;\n // let bigNextIFDPointer= buffer.readUInt32BE(nextIFDPointerBegin) ;\n // let littleNextIFDPointer= buffer.readUInt32LE(nextIFDPointerBegin);\n // let nextIFDPointer = order ?bigNextIFDPointer:littleNextIFDPointer;\n const exif = {};\n let entryCount = 0;\n\n for (entryCount; entryCount < entriesNumber; entryCount += 1) {\n const entryBegin = entryCount * entryLength;\n const entry = entries.slice(entryBegin, entryBegin + entryLength);\n const tagBegin = 0;\n const tagLength = 2;\n const dataFormatBegin = tagBegin + tagLength;\n const dataFormatLength = 2;\n const componentsBegin = dataFormatBegin + dataFormatLength;\n const componentsNumberLength = 4;\n const dataValueBegin = componentsBegin + componentsNumberLength;\n const dataValueLength = 4;\n const tagAddress = entry.slice(tagBegin, dataFormatBegin);\n const tagNumber = order ? tagAddress.toString('hex') : tagAddress.reverse().toString('hex');\n const tagName = tagCollection[tagNumber];\n const bigDataFormat = entry.readUInt16BE(dataFormatBegin);\n const littleDataFormat = entry.readUInt16LE(dataFormatBegin);\n const dataFormat = order ? bigDataFormat : littleDataFormat;\n const componentsByte = bytes[dataFormat];\n const bigComponentsNumber = entry.readUInt32BE(componentsBegin);\n const littleComponentNumber = entry.readUInt32LE(componentsBegin);\n const componentsNumber = order ? bigComponentsNumber : littleComponentNumber;\n const dataLength = componentsNumber * componentsByte;\n let dataValue = entry.slice(dataValueBegin, dataValueBegin + dataValueLength);\n\n if (dataLength > 4) {\n const dataOffset = (order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0)) - offset;\n dataValue = buffer.slice(dataOffset, dataOffset + dataLength);\n }\n\n let tagValue;\n\n if (tagName) {\n switch (dataFormat) {\n case 1:\n tagValue = dataValue.readUInt8(0);\n break;\n case 2:\n tagValue = dataValue.toString('ascii').replace(/\\0+$/, '');\n break;\n case 3:\n tagValue = order ? dataValue.readUInt16BE(0) : dataValue.readUInt16LE(0);\n break;\n case 4:\n tagValue = order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0);\n break;\n case 5:\n tagValue = [];\n\n for (let i = 0; i < dataValue.length; i += 8) {\n const bigTagValue = dataValue.readUInt32BE(i) / dataValue.readUInt32BE(i + 4);\n const littleTagValue = dataValue.readUInt32LE(i) / dataValue.readUInt32LE(i + 4);\n tagValue.push(order ? bigTagValue : littleTagValue);\n }\n\n break;\n case 7:\n switch (tagName) {\n case 'ExifVersion':\n tagValue = dataValue.toString();\n break;\n case 'FlashPixVersion':\n tagValue = dataValue.toString();\n break;\n case 'SceneType':\n tagValue = dataValue.readUInt8(0);\n break;\n default:\n tagValue = `0x${dataValue.toString('hex', 0, 15)}`;\n break;\n }\n break;\n case 10: {\n const bigOrder = dataValue.readInt32BE(0) / dataValue.readInt32BE(4);\n const littleOrder = dataValue.readInt32LE(0) / dataValue.readInt32LE(4);\n tagValue = order ? bigOrder : littleOrder;\n break;\n }\n default:\n tagValue = `0x${dataValue.toString('hex')}`;\n break;\n }\n exif[tagName] = tagValue;\n }\n /*\n else {\n console.log(`Unkown Tag [0x${tagNumber}].`);\n }\n */\n }\n return exif;\n};\n\n/**\n * @param buf {Buffer}\n * @returns {Undefined}\n * @example\n * var content = fs.readFileSync(\"~/Picture/IMG_0911.JPG\");\n * var exifFragments = EXIFHandler(content);\n */\nconst EXIFHandler = (buf, pad = true) => {\n let buffer = buf;\n\n if (pad) {\n buffer = buf.slice(APPMarkerLength);\n const length = buffer.readUInt16BE(0);\n buffer = buffer.slice(0, length);\n const lengthLength = 2;\n buffer = buffer.slice(lengthLength);\n const identifierLength = 5;\n buffer = buffer.slice(identifierLength);\n const padLength = 1;\n buffer = buffer.slice(padLength);\n }\n\n const byteOrderLength = 2;\n const byteOrder = buffer.toString('ascii', 0, byteOrderLength) === 'MM';\n const fortyTwoLength = 2;\n const fortyTwoEnd = byteOrderLength + fortyTwoLength;\n const big42 = buffer.readUInt32BE(fortyTwoEnd);\n const little42 = buffer.readUInt32LE(fortyTwoEnd);\n const offsetOfIFD = byteOrder ? big42 : little42;\n\n buffer = buffer.slice(offsetOfIFD);\n\n if (buffer.length > 0) {\n data = IFDHandler(buffer, tags.ifd, byteOrder, offsetOfIFD);\n\n if (data.ExifIFDPointer) {\n buffer = buffer.slice(data.ExifIFDPointer - offsetOfIFD);\n data.SubExif = IFDHandler(buffer, tags.ifd, byteOrder, data.ExifIFDPointer);\n }\n\n if (data.GPSInfoIFDPointer) {\n const gps = data.GPSInfoIFDPointer;\n buffer = buffer.slice(data.ExifIFDPointer ? gps - data.ExifIFDPointer : gps - offsetOfIFD);\n data.GPSInfo = IFDHandler(buffer, tags.gps, byteOrder, gps);\n }\n }\n};\n\n/**\n * @param buffer {Buffer}\n * @returns {Undefined}\n * @example\n * var content = fs.readFileSync(\"~/Picture/IMG_0911.JPG\");\n * var exifFragments = APPnHandler(content);\n */\nconst APPnHandler = (buffer) => {\n const APPMarkerTag = checkAPPn(buffer);\n\n if (APPMarkerTag !== false) { // APP0 is 0, and 0==false\n const length = buffer.readUInt16BE(APPMarkerLength);\n\n switch (APPMarkerTag) {\n case 1: // EXIF\n EXIFHandler(buffer);\n break;\n default:\n APPnHandler(buffer.slice(APPMarkerLength + length));\n break;\n }\n }\n};\n\n/**\n * @param buffer {Buffer}\n * @returns {Object}\n * @example\n */\nconst fromBuffer = (buffer) => {\n if (!buffer) {\n throw new Error('buffer not found');\n }\n\n data = undefined;\n\n if (isValid(buffer)) {\n buffer = buffer.slice(SOIMarkerLength);\n data = {};\n APPnHandler(buffer);\n } else if (isTiff(buffer)) {\n data = {};\n EXIFHandler(buffer, false);\n }\n\n return data;\n};\n\n/**\n * @param file {String}\n * @returns {Object}\n * @example\n * var exif = sync(\"~/Picture/IMG_1981.JPG\");\n * console.log(exif.createTime);\n */\nconst sync = (file) => {\n if (!file) {\n throw new Error('File not found');\n }\n\n const buffer = fs.readFileSync(file);\n\n return fromBuffer(buffer);\n};\n\n/**\n * @param file {String}\n * @param callback {Function}\n * @example\n * async(\"~/Picture/IMG_0707.JPG\", (err, data) => {\n * if(err) {\n * console.log(err);\n * }\n * if(data) {\n * console.log(data.ExifOffset.createTime);\n * }\n * }\n */\nconst async = (file, callback) => {\n data = undefined;\n\n new Promise((resolve, reject) => {\n if (!file) {\n reject(new Error('❓File not found.'));\n }\n\n fs.readFile(file, (err, buffer) => {\n if (err) {\n reject(err);\n } else {\n try {\n if (isValid(buffer)) {\n const buf = buffer.slice(SOIMarkerLength);\n\n data = {};\n\n APPnHandler(buf);\n resolve(data);\n } else if (isTiff(buffer)) {\n data = {};\n\n EXIFHandler(buffer, false);\n resolve(data);\n } else {\n reject(new Error('😱Unsupport file type.'));\n }\n } catch (e) {\n reject(e);\n }\n }\n });\n }, (error) => {\n callback(error, undefined);\n }).then((d) => {\n callback(undefined, d);\n }).catch((error) => {\n callback(error, undefined);\n });\n};\n\nexports.fromBuffer = fromBuffer;\nexports.parse = async;\nexports.parseSync = sync;\n"]} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/lib/plus.json b/skills/flight-finder/node_modules/jpeg-exif/lib/plus.json deleted file mode 100644 index 2a4017c..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/lib/plus.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "00fe": "SubfileType", - "00ff": "OldSubfileType", - "000b": "ProcessingSoftware", - "0001": "InteropIndex", - "01b1": "Decode", - "01b2": "DefaultImageColor", - "01b3": "T82Options", - "01b5": "JPEGTables", - "0002": "InteropVersion", - "02bc": "XMP", - "03e7": "USPTOMiscellaneous", - "9c9b": "XPTitle", - "9c9c": "XPComment", - "9c9d": "XPAuthor", - "9c9e": "XPKeywords", - "9c9f": "XPSubject", - "010a": "FillOrder", - "010d": "DocumentName", - "011d": "PageName", - "011e": "XPosition", - "011f": "YPosition", - "012c": "ColorResponseUnit", - "013c": "HostComputer", - "013d": "Predictor", - "014a": "SubIFD", - "014c": "InkSet", - "014d": "InkNames", - "014e": "NumberOfInks", - "015a": "Indexed", - "015b": "JPEGTables", - "015f": "OPIProxy", - "022f": "StripRowCounts", - "80a3": "WangTag1", - "80a4": "WangAnnotation", - "80a5": "WangTag3", - "80a6": "WangTag4", - "80b8": "ImageReferencePoints", - "80b9": "RegionXformTackPoint", - "80ba": "WarpQuadrilateral", - "80bb": "AffineTransformMat", - "80e3": "Matteing", - "80e4": "DataType", - "80e5": "ImageDepth", - "80e6": "TileDepth", - "82a5": "MDFileTag", - "82a6": "MDScalePixel", - "82a7": "MDColorTable", - "82a8": "MDLabName", - "82a9": "MDSampleInfo", - "82aa": "MDPrepDate", - "82ab": "MDPrepTime", - "82ac": "MDFileUnits", - "83bb": "IPTC-NAA", - "84e0": "Site", - "84e1": "ColorSequence", - "84e2": "IT8Header", - "84e3": "RasterPadding", - "84e4": "BitsPerRunLength", - "84e5": "BitsPerExtendedRunLength", - "84e6": "ColorTable", - "84e7": "ImageColorIndicator", - "84e8": "BackgroundColorIndicator", - "84e9": "ImageColorValue", - "84ea": "BackgroundColorValue", - "84eb": "PixelIntensityRange", - "84ec": "TransparencyIndicator", - "84ed": "ColorCharacterization", - "84ee": "HCUsage", - "84ef": "TrapIndicator", - "84f0": "CMYKEquivalent", - "85b8": "PixelMagicJBIGOptions", - "85d7": "JPLCartoIFD", - "85d8": "ModelTransform", - "87ac": "ImageLayer", - "87af": "GeoTiffDirectory", - "87b0": "GeoTiffDoubleParams", - "87b1": "GeoTiffAsciiParams", - "87be": "JBIGOptions", - "0107": "Thresholding", - "0108": "CellWidth", - "0109": "CellLength", - "0118": "MinSampleValue", - "0119": "MaxSampleValue", - "0120": "FreeOffsets", - "0121": "FreeByteCounts", - "0122": "GrayResponseUnit", - "0123": "GrayResponseCurve", - "0124": "T4Options", - "0125": "T6Options", - "0129": "PageNumber", - "0140": "ColorMap", - "0141": "HalftoneHints", - "0142": "TileWidth", - "0143": "TileLength", - "0144": "TileOffsets", - "0145": "TileByteCounts", - "0146": "BadFaxLines", - "0147": "CleanFaxData", - "0148": "ConsecutiveBadFaxLines", - "0150": "DotRange", - "0151": "TargetPrinter", - "0152": "ExtraSamples", - "0153": "SampleFormat", - "0154": "SMinSampleValue", - "0155": "SMaxSampleValue", - "0156": "TransferRange", - "0157": "ClipPath", - "0158": "XClipPathUnits", - "0159": "YClipPathUnits", - "0190": "GlobalParametersIFD", - "0191": "ProfileType", - "0192": "FaxProfile", - "0193": "CodingMethods", - "0194": "VersionYear", - "0195": "ModeNumber", - "0200": "JPEGProc", - "0203": "JPEGRestartInterval", - "0205": "JPEGLosslessPredictors", - "0206": "JPEGPointTransforms", - "0207": "JPEGQTables", - "0208": "JPEGDCTables", - "0209": "JPEGACTables", - "800d": "ImageID", - "821a": "MatrixWorldToCamera", - "827d": "Model2", - "828d": "CFARepeatPatternDim", - "828e": "CFAPattern2", - "828f": "BatteryLevel", - "830e": "PixelScale", - "835c": "UIC1Tag", - "835d": "UIC2Tag", - "835e": "UIC3Tag", - "835f": "UIC4Tag", - "847e": "IntergraphPacketData", - "847f": "IntergraphFlagRegisters", - "877f": "TIFF_FXExtensions", - "882a": "TimeZoneOffset", - "882b": "SelfTimerMode", - "885c": "FaxRecvParams", - "885d": "FaxSubAddress", - "885e": "FaxRecvTime", - "888a": "LeafSubIFD", - "920b": "FlashEnergy", - "920c": "SpatialFrequencyResponse", - "920d": "Noise", - "920e": "FocalPlaneXResolution", - "920f": "FocalPlaneYResolution", - "923a": "CIP3DataFile", - "923b": "CIP3Sheet", - "923c": "CIP3Side", - "923f": "StoNits", - "932f": "MSDocumentText", - "935c": "ImageSourceData", - "1000": "RelatedImageFileFormat", - "1001": "RelatedImageWidth", - "1002": "RelatedImageHeight", - "4746": "Rating", - "4747": "XP_DIP_XML", - "4748": "StitchInfo", - "4749": "RatingPercent", - "7035": "ChromaticAberrationCorrParams", - "7037": "DistortionCorrParams", - "8214": "ImageFullWidth", - "8215": "ImageFullHeight", - "8216": "TextureFormat", - "8217": "WrapModes", - "8218": "FovCot", - "8219": "MatrixWorldToScreen", - "8290": "KodakIFD", - "8335": "AdventScale", - "8336": "AdventRevision", - "8480": "IntergraphMatrix", - "8481": "INGRReserved", - "8482": "ModelTiePoint", - "8546": "SEMInfo", - "8568": "AFCP_IPTC", - "8602": "WB_GRGBLevels", - "8606": "LeafData", - "8649": "PhotoshopSettings", - "8773": "ICC_Profile", - "8780": "MultiProfiles", - "8781": "SharedData", - "8782": "T88Options", - "8829": "Interlace", - "8871": "FedexEDR", - "9009": "GooglePlusUploadCode", - "9210": "FocalPlaneResolutionUnit", - "9211": "ImageNumber", - "9212": "SecurityClassification", - "9213": "ImageHistory", - "9215": "ExposureIndex", - "9216": "TIFF-EPStandardID", - "9217": "SensingMethod", - "9330": "MSPropertySetStorage", - "9331": "MSDocumentTextPosition", - "a20d": "Noise", - "a211": "ImageNumber", - "a212": "SecurityClassification", - "a213": "ImageHistory", - "a216": "TIFF-EPStandardID", - "a480": "GDALMetadata", - "a481": "GDALNoData", - "afc0": "ExpandSoftware", - "afc1": "ExpandLens", - "afc2": "ExpandFilm", - "afc3": "ExpandFilterLens", - "afc4": "ExpandScanner", - "afc5": "ExpandFlashLamp", - "bc01": "PixelFormat", - "bc02": "Transformation", - "bc03": "Uncompressed", - "bc04": "ImageType", - "bc80": "ImageWidth", - "bc81": "ImageHeight", - "bc82": "WidthResolution", - "bc83": "HeightResolution", - "bcc0": "ImageOffset", - "bcc1": "ImageByteCount", - "bcc2": "AlphaOffset", - "bcc3": "AlphaByteCount", - "bcc4": "ImageDataDiscard", - "bcc5": "AlphaDataDiscard", - "c4a5": "PrintIM", - "c6bf": "ColorimetricReference", - "c6c5": "SRawType", - "c6d2": "PanasonicTitle", - "c6d3": "PanasonicTitle2", - "c6f3": "CameraCalibrationSig", - "c6f4": "ProfileCalibrationSig", - "c6f5": "ProfileIFD", - "c6f6": "AsShotProfileName", - "c6f7": "NoiseReductionApplied", - "c6f8": "ProfileName", - "c6f9": "ProfileHueSatMapDims", - "c6fa": "ProfileHueSatMapData1", - "c6fb": "ProfileHueSatMapData2", - "c6fc": "ProfileToneCurve", - "c6fd": "ProfileEmbedPolicy", - "c6fe": "ProfileCopyright", - "c7a1": "CameraLabel", - "c7a3": "ProfileHueSatMapEncoding", - "c7a4": "ProfileLookTableEncoding", - "c7a5": "BaselineExposureOffset", - "c7a6": "DefaultBlackRender", - "c7a7": "NewRawImageDigest", - "c7a8": "RawToPreviewGain", - "c7b5": "DefaultUserCrop", - "c42a": "OceImageLogic", - "c44f": "Annotations", - "c61a": "BlackLevel", - "c61b": "BlackLevelDeltaH", - "c61c": "BlackLevelDeltaV", - "c61d": "WhiteLevel", - "c61e": "DefaultScale", - "c61f": "DefaultCropOrigin", - "c62a": "BaselineExposure", - "c62b": "BaselineNoise", - "c62c": "BaselineSharpness", - "c62d": "BayerGreenSplit", - "c62e": "LinearResponseLimit", - "c62f": "CameraSerialNumber", - "c65a": "CalibrationIlluminant1", - "c65b": "CalibrationIlluminant2", - "c65c": "BestQualityScale", - "c65d": "RawDataUniqueID", - "c68b": "OriginalRawFileName", - "c68c": "OriginalRawFileData", - "c68d": "ActiveArea", - "c68e": "MaskedAreas", - "c68f": "AsShotICCProfile", - "c71a": "PreviewColorSpace", - "c71b": "PreviewDateTime", - "c71c": "RawImageDigest", - "c71d": "OriginalRawFileDigest", - "c71e": "SubTileBlockSize", - "c71f": "RowInterleaveFactor", - "c74e": "OpcodeList3", - "c427": "OceScanjobDesc", - "c428": "OceApplicationSelector", - "c429": "OceIDNumber", - "c573": "OriginalFileName", - "c580": "USPTOOriginalContentType", - "c612": "DNGVersion", - "c613": "DNGBackwardVersion", - "c614": "UniqueCameraModel", - "c615": "LocalizedCameraModel", - "c616": "CFAPlaneColor", - "c617": "CFALayout", - "c618": "LinearizationTable", - "c619": "BlackLevelRepeatDim", - "c620": "DefaultCropSize", - "c621": "ColorMatrix1", - "c622": "ColorMatrix2", - "c623": "CameraCalibration1", - "c624": "CameraCalibration2", - "c625": "ReductionMatrix1", - "c626": "ReductionMatrix2", - "c627": "AnalogBalance", - "c628": "AsShotNeutral", - "c629": "AsShotWhiteXY", - "c630": "DNGLensInfo", - "c631": "ChromaBlurRadius", - "c632": "AntiAliasStrength", - "c633": "ShadowScale", - "c634": "SR2Private", - "c635": "MakerNoteSafety", - "c640": "RawImageSegmentation", - "c660": "AliasLayerMetadata", - "c690": "AsShotPreProfileMatrix", - "c691": "CurrentICCProfile", - "c692": "CurrentPreProfileMatrix", - "c714": "ForwardMatrix1", - "c715": "ForwardMatrix2", - "c716": "PreviewApplicationName", - "c717": "PreviewApplicationVersion", - "c718": "PreviewSettingsName", - "c719": "PreviewSettingsDigest", - "c725": "ProfileLookTableDims", - "c726": "ProfileLookTableData", - "c740": "OpcodeList1", - "c741": "OpcodeList2", - "c761": "NoiseProfile", - "c763": "TimeCodes", - "c764": "FrameRate", - "c772": "TStop", - "c789": "ReelName", - "c791": "OriginalDefaultFinalSize", - "c792": "OriginalBestQualitySize", - "c793": "OriginalDefaultCropSize", - "ea1c": "Padding", - "ea1d": "OffsetSchema", - "fde8": "OwnerName", - "fde9": "SerialNumber", - "fdea": "Lens", - "fe00": "KDC_IFD", - "fe4c": "RawFile", - "fe4d": "Converter", - "fe4e": "WhiteBalance", - "fe51": "Exposure", - "fe52": "Shadows", - "fe53": "Brightness", - "fe54": "Contrast", - "fe55": "Saturation", - "fe56": "Sharpness", - "fe57": "Smoothness", - "fe58": "MoireFilter" -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/lib/tags.json b/skills/flight-finder/node_modules/jpeg-exif/lib/tags.json deleted file mode 100644 index d71008f..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/lib/tags.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "ifd": { - "010e": "ImageDescription", - "010f": "Make", - "011a": "XResolution", - "011b": "YResolution", - "011c": "PlanarConfiguration", - "012d": "TransferFunction", - "013b": "Artist", - "013e": "WhitePoint", - "013f": "PrimaryChromaticities", - "0100": "ImageWidth", - "0101": "ImageHeight", - "0102": "BitsPerSample", - "0103": "Compression", - "0106": "PhotometricInterpretation", - "0110": "Model", - "0111": "StripOffsets", - "0112": "Orientation", - "0115": "SamplesPerPixel", - "0116": "RowsPerStrip", - "0117": "StripByteCounts", - "0128": "ResolutionUnit", - "0131": "Software", - "0132": "DateTime", - "0201": "JPEGInterchangeFormat", - "0202": "JPEGInterchangeFormatLength", - "0211": "YCbCrCoefficients", - "0212": "YCbCrSubSampling", - "0213": "YCbCrPositioning", - "0214": "ReferenceBlackWhite", - "829a": "ExposureTime", - "829d": "FNumber", - "920a": "FocalLength", - "927c": "MakerNote", - "8298": "Copyright", - "8769": "ExifIFDPointer", - "8822": "ExposureProgram", - "8824": "SpectralSensitivity", - "8825": "GPSInfoIFDPointer", - "8827": "PhotographicSensitivity", - "8828": "OECF", - "8830": "SensitivityType", - "8831": "StandardOutputSensitivity", - "8832": "RecommendedExposureIndex", - "8833": "ISOSpeed", - "8834": "ISOSpeedLatitudeyyy", - "8835": "ISOSpeedLatitudezzz", - "9000": "ExifVersion", - "9003": "DateTimeOriginal", - "9004": "DateTimeDigitized", - "9101": "ComponentsConfiguration", - "9102": "CompressedBitsPerPixel", - "9201": "ShutterSpeedValue", - "9202": "ApertureValue", - "9203": "BrightnessValue", - "9204": "ExposureBiasValue", - "9205": "MaxApertureValue", - "9206": "SubjectDistance", - "9207": "MeteringMode", - "9208": "LightSource", - "9209": "Flash", - "9214": "SubjectArea", - "9286": "UserComment", - "9290": "SubSecTime", - "9291": "SubSecTimeOriginal", - "9292": "SubSecTimeDigitized", - "a000": "FlashpixVersion", - "a001": "ColorSpace", - "a002": "PixelXDimension", - "a003": "PixelYDimension", - "a004": "RelatedSoundFile", - "a005": "InteroperabilityIFDPointer", - "a20b": "FlashEnergy", - "a20c": "SpatialFrequencyResponse", - "a20e": "FocalPlaneXResolution", - "a20f": "FocalPlaneYResolution", - "a40a": "Sharpness", - "a40b": "DeviceSettingDescription", - "a40c": "SubjectDistanceRange", - "a210": "FocalPlaneResolutionUnit", - "a214": "SubjectLocation", - "a215": "ExposureIndex", - "a217": "SensingMethod", - "a300": "FileSource", - "a301": "SceneType", - "a302": "CFAPattern", - "a401": "CustomRendered", - "a402": "ExposureMode", - "a403": "WhiteBalance", - "a404": "DigitalZoomRatio", - "a405": "FocalLengthIn35mmFilm", - "a406": "SceneCaptureType", - "a407": "GainControl", - "a408": "Contrast", - "a409": "Saturation", - "a420": "ImageUniqueID", - "a430": "CameraOwnerName", - "a431": "BodySerialNumber", - "a432": "LensSpecification", - "a433": "LensMake", - "a434": "LensModel", - "a435": "LensSerialNumber", - "a500": "Gamma" - }, - "gps": { - "0000": "GPSVersionID", - "0001": "GPSLatitudeRef", - "0002": "GPSLatitude", - "0003": "GPSLongitudeRef", - "0004": "GPSLongitude", - "0005": "GPSAltitudeRef", - "0006": "GPSAltitude", - "0007": "GPSTimeStamp", - "0008": "GPSSatellites", - "0009": "GPSStatus", - "000a": "GPSMeasureMode", - "000b": "GPSDOP", - "000c": "GPSSpeedRef", - "000d": "GPSSpeed", - "000e": "GPSTrackRef", - "000f": "GPSTrack", - "0010": "GPSImgDirectionRef", - "0011": "GPSImgDirection", - "0012": "GPSMapDatum", - "0013": "GPSDestLatitudeRef", - "0014": "GPSDestLatitude", - "0015": "GPSDestLongitudeRef", - "0016": "GPSDestLongitude", - "0017": "GPSDestBearingRef", - "0018": "GPSDestBearing", - "0019": "GPSDestDistanceRef", - "001a": "GPSDestDistance", - "001b": "GPSProcessingMethod", - "001c": "GPSAreaInformation", - "001d": "GPSDateStamp", - "001e": "GPSDifferential", - "001f": "GPSHPositioningError" - } -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/package.json b/skills/flight-finder/node_modules/jpeg-exif/package.json deleted file mode 100644 index e84973a..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "jpeg-exif", - "version": "1.1.4", - "description": "Use for parse .jpg file exif info (including GPS info.).", - "main": "lib/index.js", - "scripts": { - "test": "./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", - "lint": "./node_modules/.bin/eslint ./src/index.js ./test/index.test.js --fix", - "build": "babel ./src -d lib --source-maps && cp ./src/*.json ./lib" - }, - "keywords": [ - "jpeg", - "exif", - "gps", - "image", - "picture", - "photo", - "jfif" - ], - "homepage": "https://github.com/zhso/jpeg-exif", - "repository": { - "type": "git", - "url": "https://github.com/zhso/jpeg-exif.git" - }, - "bugs": { - "url": "https://github.com/zhso/jpeg-exif/issues", - "email": "s@zhso.net" - }, - "author": "s@zhso.net", - "license": "MIT", - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-preset-env": "^1.7.0", - "chai": "^4.2.0", - "coveralls": "^3.0.6", - "eslint": "^6.2.0", - "eslint-config-airbnb-base": "^14.0.0", - "eslint-plugin-import": "^2.18.2", - "istanbul": "^0.4.5", - "mocha": "^6.2.0" - } -} diff --git a/skills/flight-finder/node_modules/jpeg-exif/src/index.js b/skills/flight-finder/node_modules/jpeg-exif/src/index.js deleted file mode 100644 index 64201c8..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/src/index.js +++ /dev/null @@ -1,364 +0,0 @@ -import fs from 'fs'; - -const tags = require('./tags.json'); - -/* - unsignedByte, - asciiStrings, - unsignedShort, - unsignedLong, - unsignedRational, - signedByte, - undefined, - signedShort, - signedLong, - signedRational, - singleFloat, - doubleFloat - */ -const bytes = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8]; -const SOIMarkerLength = 2; -const JPEGSOIMarker = 0xffd8; -const TIFFINTEL = 0x4949; -const TIFFMOTOROLA = 0x4d4d; -const APPMarkerLength = 2; -const APPMarkerBegin = 0xffe0; -const APPMarkerEnd = 0xffef; -let data; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var isImage = isValid(content); - * console.log(isImage); - */ -const isValid = (buffer) => { - try { - const SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === JPEGSOIMarker; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - */ -const isTiff = (buffer) => { - try { - const SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === TIFFINTEL || SOIMarker === TIFFMOTOROLA; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Number} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var APPNumber = checkAPPn(content); - * console.log(APPNumber); - */ -const checkAPPn = (buffer) => { - try { - const APPMarkerTag = buffer.readUInt16BE(0); - const isInRange = APPMarkerTag >= APPMarkerBegin && APPMarkerTag <= APPMarkerEnd; - return isInRange ? APPMarkerTag - APPMarkerBegin : false; - } catch (e) { - throw new Error('Invalid APP Tag.'); - } -}; -/** - * @param buffer {Buffer} - * @param tagCollection {Object} - * @param order {Boolean} - * @param offset {Number} - * @returns {Object} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = IFDHandler(content, 0, true, 8); - * console.log(exifFragments.value); - */ -const IFDHandler = (buffer, tagCollection, order, offset) => { - const entriesNumber = order ? buffer.readUInt16BE(0) : buffer.readUInt16LE(0); - - if (entriesNumber === 0) { - return {}; - } - - const entriesNumberLength = 2; - const entries = buffer.slice(entriesNumberLength); - const entryLength = 12; - // let nextIFDPointerBegin = entriesNumberLength + entryLength * entriesNumber; - // let bigNextIFDPointer= buffer.readUInt32BE(nextIFDPointerBegin) ; - // let littleNextIFDPointer= buffer.readUInt32LE(nextIFDPointerBegin); - // let nextIFDPointer = order ?bigNextIFDPointer:littleNextIFDPointer; - const exif = {}; - let entryCount = 0; - - for (entryCount; entryCount < entriesNumber; entryCount += 1) { - const entryBegin = entryCount * entryLength; - const entry = entries.slice(entryBegin, entryBegin + entryLength); - const tagBegin = 0; - const tagLength = 2; - const dataFormatBegin = tagBegin + tagLength; - const dataFormatLength = 2; - const componentsBegin = dataFormatBegin + dataFormatLength; - const componentsNumberLength = 4; - const dataValueBegin = componentsBegin + componentsNumberLength; - const dataValueLength = 4; - const tagAddress = entry.slice(tagBegin, dataFormatBegin); - const tagNumber = order ? tagAddress.toString('hex') : tagAddress.reverse().toString('hex'); - const tagName = tagCollection[tagNumber]; - const bigDataFormat = entry.readUInt16BE(dataFormatBegin); - const littleDataFormat = entry.readUInt16LE(dataFormatBegin); - const dataFormat = order ? bigDataFormat : littleDataFormat; - const componentsByte = bytes[dataFormat]; - const bigComponentsNumber = entry.readUInt32BE(componentsBegin); - const littleComponentNumber = entry.readUInt32LE(componentsBegin); - const componentsNumber = order ? bigComponentsNumber : littleComponentNumber; - const dataLength = componentsNumber * componentsByte; - let dataValue = entry.slice(dataValueBegin, dataValueBegin + dataValueLength); - - if (dataLength > 4) { - const dataOffset = (order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0)) - offset; - dataValue = buffer.slice(dataOffset, dataOffset + dataLength); - } - - let tagValue; - - if (tagName) { - switch (dataFormat) { - case 1: - tagValue = dataValue.readUInt8(0); - break; - case 2: - tagValue = dataValue.toString('ascii').replace(/\0+$/, ''); - break; - case 3: - tagValue = order ? dataValue.readUInt16BE(0) : dataValue.readUInt16LE(0); - break; - case 4: - tagValue = order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0); - break; - case 5: - tagValue = []; - - for (let i = 0; i < dataValue.length; i += 8) { - const bigTagValue = dataValue.readUInt32BE(i) / dataValue.readUInt32BE(i + 4); - const littleTagValue = dataValue.readUInt32LE(i) / dataValue.readUInt32LE(i + 4); - tagValue.push(order ? bigTagValue : littleTagValue); - } - - break; - case 7: - switch (tagName) { - case 'ExifVersion': - tagValue = dataValue.toString(); - break; - case 'FlashPixVersion': - tagValue = dataValue.toString(); - break; - case 'SceneType': - tagValue = dataValue.readUInt8(0); - break; - default: - tagValue = `0x${dataValue.toString('hex', 0, 15)}`; - break; - } - break; - case 10: { - const bigOrder = dataValue.readInt32BE(0) / dataValue.readInt32BE(4); - const littleOrder = dataValue.readInt32LE(0) / dataValue.readInt32LE(4); - tagValue = order ? bigOrder : littleOrder; - break; - } - default: - tagValue = `0x${dataValue.toString('hex')}`; - break; - } - exif[tagName] = tagValue; - } - /* - else { - console.log(`Unkown Tag [0x${tagNumber}].`); - } - */ - } - return exif; -}; - -/** - * @param buf {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = EXIFHandler(content); - */ -const EXIFHandler = (buf, pad = true) => { - let buffer = buf; - - if (pad) { - buffer = buf.slice(APPMarkerLength); - const length = buffer.readUInt16BE(0); - buffer = buffer.slice(0, length); - const lengthLength = 2; - buffer = buffer.slice(lengthLength); - const identifierLength = 5; - buffer = buffer.slice(identifierLength); - const padLength = 1; - buffer = buffer.slice(padLength); - } - - const byteOrderLength = 2; - const byteOrder = buffer.toString('ascii', 0, byteOrderLength) === 'MM'; - const fortyTwoLength = 2; - const fortyTwoEnd = byteOrderLength + fortyTwoLength; - const big42 = buffer.readUInt32BE(fortyTwoEnd); - const little42 = buffer.readUInt32LE(fortyTwoEnd); - const offsetOfIFD = byteOrder ? big42 : little42; - - buffer = buffer.slice(offsetOfIFD); - - if (buffer.length > 0) { - data = IFDHandler(buffer, tags.ifd, byteOrder, offsetOfIFD); - - if (data.ExifIFDPointer) { - buffer = buffer.slice(data.ExifIFDPointer - offsetOfIFD); - data.SubExif = IFDHandler(buffer, tags.ifd, byteOrder, data.ExifIFDPointer); - } - - if (data.GPSInfoIFDPointer) { - const gps = data.GPSInfoIFDPointer; - buffer = buffer.slice(data.ExifIFDPointer ? gps - data.ExifIFDPointer : gps - offsetOfIFD); - data.GPSInfo = IFDHandler(buffer, tags.gps, byteOrder, gps); - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = APPnHandler(content); - */ -const APPnHandler = (buffer) => { - const APPMarkerTag = checkAPPn(buffer); - - if (APPMarkerTag !== false) { // APP0 is 0, and 0==false - const length = buffer.readUInt16BE(APPMarkerLength); - - switch (APPMarkerTag) { - case 1: // EXIF - EXIFHandler(buffer); - break; - default: - APPnHandler(buffer.slice(APPMarkerLength + length)); - break; - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Object} - * @example - */ -const fromBuffer = (buffer) => { - if (!buffer) { - throw new Error('buffer not found'); - } - - data = undefined; - - if (isValid(buffer)) { - buffer = buffer.slice(SOIMarkerLength); - data = {}; - APPnHandler(buffer); - } else if (isTiff(buffer)) { - data = {}; - EXIFHandler(buffer, false); - } - - return data; -}; - -/** - * @param file {String} - * @returns {Object} - * @example - * var exif = sync("~/Picture/IMG_1981.JPG"); - * console.log(exif.createTime); - */ -const sync = (file) => { - if (!file) { - throw new Error('File not found'); - } - - const buffer = fs.readFileSync(file); - - return fromBuffer(buffer); -}; - -/** - * @param file {String} - * @param callback {Function} - * @example - * async("~/Picture/IMG_0707.JPG", (err, data) => { - * if(err) { - * console.log(err); - * } - * if(data) { - * console.log(data.ExifOffset.createTime); - * } - * } - */ -const async = (file, callback) => { - data = undefined; - - new Promise((resolve, reject) => { - if (!file) { - reject(new Error('❓File not found.')); - } - - fs.readFile(file, (err, buffer) => { - if (err) { - reject(err); - } else { - try { - if (isValid(buffer)) { - const buf = buffer.slice(SOIMarkerLength); - - data = {}; - - APPnHandler(buf); - resolve(data); - } else if (isTiff(buffer)) { - data = {}; - - EXIFHandler(buffer, false); - resolve(data); - } else { - reject(new Error('😱Unsupport file type.')); - } - } catch (e) { - reject(e); - } - } - }); - }, (error) => { - callback(error, undefined); - }).then((d) => { - callback(undefined, d); - }).catch((error) => { - callback(error, undefined); - }); -}; - -exports.fromBuffer = fromBuffer; -exports.parse = async; -exports.parseSync = sync; diff --git a/skills/flight-finder/node_modules/jpeg-exif/src/plus.json b/skills/flight-finder/node_modules/jpeg-exif/src/plus.json deleted file mode 100644 index 2a4017c..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/src/plus.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "00fe": "SubfileType", - "00ff": "OldSubfileType", - "000b": "ProcessingSoftware", - "0001": "InteropIndex", - "01b1": "Decode", - "01b2": "DefaultImageColor", - "01b3": "T82Options", - "01b5": "JPEGTables", - "0002": "InteropVersion", - "02bc": "XMP", - "03e7": "USPTOMiscellaneous", - "9c9b": "XPTitle", - "9c9c": "XPComment", - "9c9d": "XPAuthor", - "9c9e": "XPKeywords", - "9c9f": "XPSubject", - "010a": "FillOrder", - "010d": "DocumentName", - "011d": "PageName", - "011e": "XPosition", - "011f": "YPosition", - "012c": "ColorResponseUnit", - "013c": "HostComputer", - "013d": "Predictor", - "014a": "SubIFD", - "014c": "InkSet", - "014d": "InkNames", - "014e": "NumberOfInks", - "015a": "Indexed", - "015b": "JPEGTables", - "015f": "OPIProxy", - "022f": "StripRowCounts", - "80a3": "WangTag1", - "80a4": "WangAnnotation", - "80a5": "WangTag3", - "80a6": "WangTag4", - "80b8": "ImageReferencePoints", - "80b9": "RegionXformTackPoint", - "80ba": "WarpQuadrilateral", - "80bb": "AffineTransformMat", - "80e3": "Matteing", - "80e4": "DataType", - "80e5": "ImageDepth", - "80e6": "TileDepth", - "82a5": "MDFileTag", - "82a6": "MDScalePixel", - "82a7": "MDColorTable", - "82a8": "MDLabName", - "82a9": "MDSampleInfo", - "82aa": "MDPrepDate", - "82ab": "MDPrepTime", - "82ac": "MDFileUnits", - "83bb": "IPTC-NAA", - "84e0": "Site", - "84e1": "ColorSequence", - "84e2": "IT8Header", - "84e3": "RasterPadding", - "84e4": "BitsPerRunLength", - "84e5": "BitsPerExtendedRunLength", - "84e6": "ColorTable", - "84e7": "ImageColorIndicator", - "84e8": "BackgroundColorIndicator", - "84e9": "ImageColorValue", - "84ea": "BackgroundColorValue", - "84eb": "PixelIntensityRange", - "84ec": "TransparencyIndicator", - "84ed": "ColorCharacterization", - "84ee": "HCUsage", - "84ef": "TrapIndicator", - "84f0": "CMYKEquivalent", - "85b8": "PixelMagicJBIGOptions", - "85d7": "JPLCartoIFD", - "85d8": "ModelTransform", - "87ac": "ImageLayer", - "87af": "GeoTiffDirectory", - "87b0": "GeoTiffDoubleParams", - "87b1": "GeoTiffAsciiParams", - "87be": "JBIGOptions", - "0107": "Thresholding", - "0108": "CellWidth", - "0109": "CellLength", - "0118": "MinSampleValue", - "0119": "MaxSampleValue", - "0120": "FreeOffsets", - "0121": "FreeByteCounts", - "0122": "GrayResponseUnit", - "0123": "GrayResponseCurve", - "0124": "T4Options", - "0125": "T6Options", - "0129": "PageNumber", - "0140": "ColorMap", - "0141": "HalftoneHints", - "0142": "TileWidth", - "0143": "TileLength", - "0144": "TileOffsets", - "0145": "TileByteCounts", - "0146": "BadFaxLines", - "0147": "CleanFaxData", - "0148": "ConsecutiveBadFaxLines", - "0150": "DotRange", - "0151": "TargetPrinter", - "0152": "ExtraSamples", - "0153": "SampleFormat", - "0154": "SMinSampleValue", - "0155": "SMaxSampleValue", - "0156": "TransferRange", - "0157": "ClipPath", - "0158": "XClipPathUnits", - "0159": "YClipPathUnits", - "0190": "GlobalParametersIFD", - "0191": "ProfileType", - "0192": "FaxProfile", - "0193": "CodingMethods", - "0194": "VersionYear", - "0195": "ModeNumber", - "0200": "JPEGProc", - "0203": "JPEGRestartInterval", - "0205": "JPEGLosslessPredictors", - "0206": "JPEGPointTransforms", - "0207": "JPEGQTables", - "0208": "JPEGDCTables", - "0209": "JPEGACTables", - "800d": "ImageID", - "821a": "MatrixWorldToCamera", - "827d": "Model2", - "828d": "CFARepeatPatternDim", - "828e": "CFAPattern2", - "828f": "BatteryLevel", - "830e": "PixelScale", - "835c": "UIC1Tag", - "835d": "UIC2Tag", - "835e": "UIC3Tag", - "835f": "UIC4Tag", - "847e": "IntergraphPacketData", - "847f": "IntergraphFlagRegisters", - "877f": "TIFF_FXExtensions", - "882a": "TimeZoneOffset", - "882b": "SelfTimerMode", - "885c": "FaxRecvParams", - "885d": "FaxSubAddress", - "885e": "FaxRecvTime", - "888a": "LeafSubIFD", - "920b": "FlashEnergy", - "920c": "SpatialFrequencyResponse", - "920d": "Noise", - "920e": "FocalPlaneXResolution", - "920f": "FocalPlaneYResolution", - "923a": "CIP3DataFile", - "923b": "CIP3Sheet", - "923c": "CIP3Side", - "923f": "StoNits", - "932f": "MSDocumentText", - "935c": "ImageSourceData", - "1000": "RelatedImageFileFormat", - "1001": "RelatedImageWidth", - "1002": "RelatedImageHeight", - "4746": "Rating", - "4747": "XP_DIP_XML", - "4748": "StitchInfo", - "4749": "RatingPercent", - "7035": "ChromaticAberrationCorrParams", - "7037": "DistortionCorrParams", - "8214": "ImageFullWidth", - "8215": "ImageFullHeight", - "8216": "TextureFormat", - "8217": "WrapModes", - "8218": "FovCot", - "8219": "MatrixWorldToScreen", - "8290": "KodakIFD", - "8335": "AdventScale", - "8336": "AdventRevision", - "8480": "IntergraphMatrix", - "8481": "INGRReserved", - "8482": "ModelTiePoint", - "8546": "SEMInfo", - "8568": "AFCP_IPTC", - "8602": "WB_GRGBLevels", - "8606": "LeafData", - "8649": "PhotoshopSettings", - "8773": "ICC_Profile", - "8780": "MultiProfiles", - "8781": "SharedData", - "8782": "T88Options", - "8829": "Interlace", - "8871": "FedexEDR", - "9009": "GooglePlusUploadCode", - "9210": "FocalPlaneResolutionUnit", - "9211": "ImageNumber", - "9212": "SecurityClassification", - "9213": "ImageHistory", - "9215": "ExposureIndex", - "9216": "TIFF-EPStandardID", - "9217": "SensingMethod", - "9330": "MSPropertySetStorage", - "9331": "MSDocumentTextPosition", - "a20d": "Noise", - "a211": "ImageNumber", - "a212": "SecurityClassification", - "a213": "ImageHistory", - "a216": "TIFF-EPStandardID", - "a480": "GDALMetadata", - "a481": "GDALNoData", - "afc0": "ExpandSoftware", - "afc1": "ExpandLens", - "afc2": "ExpandFilm", - "afc3": "ExpandFilterLens", - "afc4": "ExpandScanner", - "afc5": "ExpandFlashLamp", - "bc01": "PixelFormat", - "bc02": "Transformation", - "bc03": "Uncompressed", - "bc04": "ImageType", - "bc80": "ImageWidth", - "bc81": "ImageHeight", - "bc82": "WidthResolution", - "bc83": "HeightResolution", - "bcc0": "ImageOffset", - "bcc1": "ImageByteCount", - "bcc2": "AlphaOffset", - "bcc3": "AlphaByteCount", - "bcc4": "ImageDataDiscard", - "bcc5": "AlphaDataDiscard", - "c4a5": "PrintIM", - "c6bf": "ColorimetricReference", - "c6c5": "SRawType", - "c6d2": "PanasonicTitle", - "c6d3": "PanasonicTitle2", - "c6f3": "CameraCalibrationSig", - "c6f4": "ProfileCalibrationSig", - "c6f5": "ProfileIFD", - "c6f6": "AsShotProfileName", - "c6f7": "NoiseReductionApplied", - "c6f8": "ProfileName", - "c6f9": "ProfileHueSatMapDims", - "c6fa": "ProfileHueSatMapData1", - "c6fb": "ProfileHueSatMapData2", - "c6fc": "ProfileToneCurve", - "c6fd": "ProfileEmbedPolicy", - "c6fe": "ProfileCopyright", - "c7a1": "CameraLabel", - "c7a3": "ProfileHueSatMapEncoding", - "c7a4": "ProfileLookTableEncoding", - "c7a5": "BaselineExposureOffset", - "c7a6": "DefaultBlackRender", - "c7a7": "NewRawImageDigest", - "c7a8": "RawToPreviewGain", - "c7b5": "DefaultUserCrop", - "c42a": "OceImageLogic", - "c44f": "Annotations", - "c61a": "BlackLevel", - "c61b": "BlackLevelDeltaH", - "c61c": "BlackLevelDeltaV", - "c61d": "WhiteLevel", - "c61e": "DefaultScale", - "c61f": "DefaultCropOrigin", - "c62a": "BaselineExposure", - "c62b": "BaselineNoise", - "c62c": "BaselineSharpness", - "c62d": "BayerGreenSplit", - "c62e": "LinearResponseLimit", - "c62f": "CameraSerialNumber", - "c65a": "CalibrationIlluminant1", - "c65b": "CalibrationIlluminant2", - "c65c": "BestQualityScale", - "c65d": "RawDataUniqueID", - "c68b": "OriginalRawFileName", - "c68c": "OriginalRawFileData", - "c68d": "ActiveArea", - "c68e": "MaskedAreas", - "c68f": "AsShotICCProfile", - "c71a": "PreviewColorSpace", - "c71b": "PreviewDateTime", - "c71c": "RawImageDigest", - "c71d": "OriginalRawFileDigest", - "c71e": "SubTileBlockSize", - "c71f": "RowInterleaveFactor", - "c74e": "OpcodeList3", - "c427": "OceScanjobDesc", - "c428": "OceApplicationSelector", - "c429": "OceIDNumber", - "c573": "OriginalFileName", - "c580": "USPTOOriginalContentType", - "c612": "DNGVersion", - "c613": "DNGBackwardVersion", - "c614": "UniqueCameraModel", - "c615": "LocalizedCameraModel", - "c616": "CFAPlaneColor", - "c617": "CFALayout", - "c618": "LinearizationTable", - "c619": "BlackLevelRepeatDim", - "c620": "DefaultCropSize", - "c621": "ColorMatrix1", - "c622": "ColorMatrix2", - "c623": "CameraCalibration1", - "c624": "CameraCalibration2", - "c625": "ReductionMatrix1", - "c626": "ReductionMatrix2", - "c627": "AnalogBalance", - "c628": "AsShotNeutral", - "c629": "AsShotWhiteXY", - "c630": "DNGLensInfo", - "c631": "ChromaBlurRadius", - "c632": "AntiAliasStrength", - "c633": "ShadowScale", - "c634": "SR2Private", - "c635": "MakerNoteSafety", - "c640": "RawImageSegmentation", - "c660": "AliasLayerMetadata", - "c690": "AsShotPreProfileMatrix", - "c691": "CurrentICCProfile", - "c692": "CurrentPreProfileMatrix", - "c714": "ForwardMatrix1", - "c715": "ForwardMatrix2", - "c716": "PreviewApplicationName", - "c717": "PreviewApplicationVersion", - "c718": "PreviewSettingsName", - "c719": "PreviewSettingsDigest", - "c725": "ProfileLookTableDims", - "c726": "ProfileLookTableData", - "c740": "OpcodeList1", - "c741": "OpcodeList2", - "c761": "NoiseProfile", - "c763": "TimeCodes", - "c764": "FrameRate", - "c772": "TStop", - "c789": "ReelName", - "c791": "OriginalDefaultFinalSize", - "c792": "OriginalBestQualitySize", - "c793": "OriginalDefaultCropSize", - "ea1c": "Padding", - "ea1d": "OffsetSchema", - "fde8": "OwnerName", - "fde9": "SerialNumber", - "fdea": "Lens", - "fe00": "KDC_IFD", - "fe4c": "RawFile", - "fe4d": "Converter", - "fe4e": "WhiteBalance", - "fe51": "Exposure", - "fe52": "Shadows", - "fe53": "Brightness", - "fe54": "Contrast", - "fe55": "Saturation", - "fe56": "Sharpness", - "fe57": "Smoothness", - "fe58": "MoireFilter" -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/src/tags.json b/skills/flight-finder/node_modules/jpeg-exif/src/tags.json deleted file mode 100644 index d71008f..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/src/tags.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "ifd": { - "010e": "ImageDescription", - "010f": "Make", - "011a": "XResolution", - "011b": "YResolution", - "011c": "PlanarConfiguration", - "012d": "TransferFunction", - "013b": "Artist", - "013e": "WhitePoint", - "013f": "PrimaryChromaticities", - "0100": "ImageWidth", - "0101": "ImageHeight", - "0102": "BitsPerSample", - "0103": "Compression", - "0106": "PhotometricInterpretation", - "0110": "Model", - "0111": "StripOffsets", - "0112": "Orientation", - "0115": "SamplesPerPixel", - "0116": "RowsPerStrip", - "0117": "StripByteCounts", - "0128": "ResolutionUnit", - "0131": "Software", - "0132": "DateTime", - "0201": "JPEGInterchangeFormat", - "0202": "JPEGInterchangeFormatLength", - "0211": "YCbCrCoefficients", - "0212": "YCbCrSubSampling", - "0213": "YCbCrPositioning", - "0214": "ReferenceBlackWhite", - "829a": "ExposureTime", - "829d": "FNumber", - "920a": "FocalLength", - "927c": "MakerNote", - "8298": "Copyright", - "8769": "ExifIFDPointer", - "8822": "ExposureProgram", - "8824": "SpectralSensitivity", - "8825": "GPSInfoIFDPointer", - "8827": "PhotographicSensitivity", - "8828": "OECF", - "8830": "SensitivityType", - "8831": "StandardOutputSensitivity", - "8832": "RecommendedExposureIndex", - "8833": "ISOSpeed", - "8834": "ISOSpeedLatitudeyyy", - "8835": "ISOSpeedLatitudezzz", - "9000": "ExifVersion", - "9003": "DateTimeOriginal", - "9004": "DateTimeDigitized", - "9101": "ComponentsConfiguration", - "9102": "CompressedBitsPerPixel", - "9201": "ShutterSpeedValue", - "9202": "ApertureValue", - "9203": "BrightnessValue", - "9204": "ExposureBiasValue", - "9205": "MaxApertureValue", - "9206": "SubjectDistance", - "9207": "MeteringMode", - "9208": "LightSource", - "9209": "Flash", - "9214": "SubjectArea", - "9286": "UserComment", - "9290": "SubSecTime", - "9291": "SubSecTimeOriginal", - "9292": "SubSecTimeDigitized", - "a000": "FlashpixVersion", - "a001": "ColorSpace", - "a002": "PixelXDimension", - "a003": "PixelYDimension", - "a004": "RelatedSoundFile", - "a005": "InteroperabilityIFDPointer", - "a20b": "FlashEnergy", - "a20c": "SpatialFrequencyResponse", - "a20e": "FocalPlaneXResolution", - "a20f": "FocalPlaneYResolution", - "a40a": "Sharpness", - "a40b": "DeviceSettingDescription", - "a40c": "SubjectDistanceRange", - "a210": "FocalPlaneResolutionUnit", - "a214": "SubjectLocation", - "a215": "ExposureIndex", - "a217": "SensingMethod", - "a300": "FileSource", - "a301": "SceneType", - "a302": "CFAPattern", - "a401": "CustomRendered", - "a402": "ExposureMode", - "a403": "WhiteBalance", - "a404": "DigitalZoomRatio", - "a405": "FocalLengthIn35mmFilm", - "a406": "SceneCaptureType", - "a407": "GainControl", - "a408": "Contrast", - "a409": "Saturation", - "a420": "ImageUniqueID", - "a430": "CameraOwnerName", - "a431": "BodySerialNumber", - "a432": "LensSpecification", - "a433": "LensMake", - "a434": "LensModel", - "a435": "LensSerialNumber", - "a500": "Gamma" - }, - "gps": { - "0000": "GPSVersionID", - "0001": "GPSLatitudeRef", - "0002": "GPSLatitude", - "0003": "GPSLongitudeRef", - "0004": "GPSLongitude", - "0005": "GPSAltitudeRef", - "0006": "GPSAltitude", - "0007": "GPSTimeStamp", - "0008": "GPSSatellites", - "0009": "GPSStatus", - "000a": "GPSMeasureMode", - "000b": "GPSDOP", - "000c": "GPSSpeedRef", - "000d": "GPSSpeed", - "000e": "GPSTrackRef", - "000f": "GPSTrack", - "0010": "GPSImgDirectionRef", - "0011": "GPSImgDirection", - "0012": "GPSMapDatum", - "0013": "GPSDestLatitudeRef", - "0014": "GPSDestLatitude", - "0015": "GPSDestLongitudeRef", - "0016": "GPSDestLongitude", - "0017": "GPSDestBearingRef", - "0018": "GPSDestBearing", - "0019": "GPSDestDistanceRef", - "001a": "GPSDestDistance", - "001b": "GPSProcessingMethod", - "001c": "GPSAreaInformation", - "001d": "GPSDateStamp", - "001e": "GPSDifferential", - "001f": "GPSHPositioningError" - } -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/jpeg-exif/test/Arbitro.tiff b/skills/flight-finder/node_modules/jpeg-exif/test/Arbitro.tiff deleted file mode 100644 index 2efe348..0000000 Binary files a/skills/flight-finder/node_modules/jpeg-exif/test/Arbitro.tiff and /dev/null differ diff --git a/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0001.JPG b/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0001.JPG deleted file mode 100644 index f6c68f3..0000000 Binary files a/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0001.JPG and /dev/null differ diff --git a/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0003.JPG b/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0003.JPG deleted file mode 100644 index 9f68396..0000000 Binary files a/skills/flight-finder/node_modules/jpeg-exif/test/IMG_0003.JPG and /dev/null differ diff --git a/skills/flight-finder/node_modules/jpeg-exif/test/index.test.js b/skills/flight-finder/node_modules/jpeg-exif/test/index.test.js deleted file mode 100644 index a77f499..0000000 --- a/skills/flight-finder/node_modules/jpeg-exif/test/index.test.js +++ /dev/null @@ -1,135 +0,0 @@ -/* global it, describe */ -const fs = require('fs'); -const { expect } = require('chai'); -const exif = require('../lib/index.js'); - -describe('.parse()', () => { - it('file {undefined}', () => { - exif.parse(undefined, (err) => { - expect(err).to.throw(Error); - }); - }); - - it('file {null}', () => { - exif.parse('./test/null.jpg', (err) => { - expect(err).to.throw(Error); - }); - }); - - it('APP1:#0xffe1', (done) => { - exif.parse('./test/IMG_0001.JPG', (err, data) => { - expect(data).to.be.an('object'); - done(); - }); - }); - - it('APP0:#0xffe0', (done) => { - exif.parse('./test/IMG_0003.JPG', (err, data) => { - expect(data).to.be.an('undefined'); - done(); - }); - }); - - it('!(APP1:#0xffe1||APP0:#0xffe0)', (done) => { - exif.parse('./test/index.test.js', (err, data) => { - expect(data).to.be.an('undefined'); - done(); - }); - }); - - it('[SubExif]', (done) => { - exif.parse('./test/IMG_0001.JPG', (err, data) => { - expect(data.SubExif).to.be.an('object'); - done(); - }); - }); - - it('[GPSInfo]', (done) => { - exif.parse('./test/IMG_0001.JPG', (err, data) => { - expect(data.GPSInfo).to.be.an('object'); - done(); - }); - }); -}); - -describe('.parseSync()', () => { - it('file {undefined}', () => { - expect(exif.parseSync).to.throw(Error); - }); - - it('file {null}', () => { - expect(exif.parseSync).to.throw(Error); - }); - - it('APP1:#0xffe1', () => { - const data = exif.parseSync('./test/IMG_0001.JPG'); - expect(data).to.be.an('object'); - }); - - it('!APP1:#0xffe1', () => { - const data = exif.parseSync('./test/IMG_0003.JPG'); - expect(data).to.be.an('object'); - }); - - it('[SubExif]', () => { - const data = exif.parseSync('./test/IMG_0001.JPG'); - expect(data.SubExif).to.be.an('object'); - }); - - it('[GPSInfo]', () => { - const data = exif.parseSync('./test/IMG_0001.JPG'); - expect(data.GPSInfo).to.be.an('object'); - }); - - it('TIFF', () => { - const data = exif.parseSync('./test/Arbitro.tiff'); - - expect(data).to.be.eql({ - ImageWidth: 174, - ImageHeight: 38, - BitsPerSample: 8, - Compression: 5, - PhotometricInterpretation: 2, - StripOffsets: 8, - Orientation: 1, - SamplesPerPixel: 4, - RowsPerStrip: 38, - StripByteCounts: 6391, - PlanarConfiguration: 1, - }); - }); -}); - -describe('.fromBuffer()', () => { - it('file {undefined}', () => { - expect(exif.fromBuffer).to.throw(Error); - }); - - it('APP1:#0xffe1', () => { - const buffer = fs.readFileSync('./test/IMG_0001.JPG'); - const data = exif.fromBuffer(buffer); - - expect(data).to.be.an('object'); - }); - - it('!APP1:#0xffe1', () => { - const buffer = fs.readFileSync('./test/IMG_0003.JPG'); - const data = exif.fromBuffer(buffer); - - expect(data).to.be.an('object'); - }); - - it('[SubExif]', () => { - const buffer = fs.readFileSync('./test/IMG_0001.JPG'); - const data = exif.fromBuffer(buffer); - - expect(data.SubExif).to.be.an('object'); - }); - - it('[GPSInfo]', () => { - const buffer = fs.readFileSync('./test/IMG_0001.JPG'); - const data = exif.fromBuffer(buffer); - - expect(data.GPSInfo).to.be.an('object'); - }); -}); diff --git a/skills/flight-finder/node_modules/linebreak/LICENSE b/skills/flight-finder/node_modules/linebreak/LICENSE deleted file mode 100644 index 34d1420..0000000 --- a/skills/flight-finder/node_modules/linebreak/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2014-present Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/linebreak/dist/main.cjs b/skills/flight-finder/node_modules/linebreak/dist/main.cjs deleted file mode 100644 index b29fcb2..0000000 --- a/skills/flight-finder/node_modules/linebreak/dist/main.cjs +++ /dev/null @@ -1,1369 +0,0 @@ -var $kQ2hT$unicodetrie = require("unicode-trie"); -var $kQ2hT$base64js = require("base64-js"); - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} - -"use strict"; - - - -const $60ff486a304db230$export$af862512e23cb54 = 0; // Opening punctuation -const $60ff486a304db230$export$9bf3043cb7503aa1 = 1; // Closing punctuation -const $60ff486a304db230$export$6d0b2a5dd774590a = 2; // Closing parenthesis -const $60ff486a304db230$export$bf0b2277bd569ea1 = 3; // Ambiguous quotation -const $60ff486a304db230$export$bad2a840ccda93b6 = 4; // Glue -const $60ff486a304db230$export$fb4028874a74450 = 5; // Non-starters -const $60ff486a304db230$export$463bd1ce0149c55e = 6; // Exclamation/Interrogation -const $60ff486a304db230$export$2e8caadc521d7cbb = 7; // Symbols allowing break after -const $60ff486a304db230$export$bfe27467c1de9413 = 8; // Infix separator -const $60ff486a304db230$export$af5f8d68aad3cd3a = 9; // Prefix -const $60ff486a304db230$export$6b7e017d6825d38f = 10; // Postfix -const $60ff486a304db230$export$8227ca023eb0daaa = 11; // Numeric -const $60ff486a304db230$export$1bb1140fe1358b00 = 12; // Alphabetic -const $60ff486a304db230$export$f3e416a182673355 = 13; // Hebrew Letter -const $60ff486a304db230$export$8be180ec26319f9f = 14; // Ideographic -const $60ff486a304db230$export$70824c8942178d60 = 15; // Inseparable characters -const $60ff486a304db230$export$24aa617c849a894a = 16; // Hyphen -const $60ff486a304db230$export$a73c4d14459b698d = 17; // Break after -const $60ff486a304db230$export$921068d8846a1559 = 18; // Break before -const $60ff486a304db230$export$8b85a4f193482778 = 19; // Break on either side (but not pair) -const $60ff486a304db230$export$b2fd9c01d360241f = 20; // Zero-width space -const $60ff486a304db230$export$dcd191669c0a595f = 21; // Combining marks -const $60ff486a304db230$export$9e5d732f3676a9ba = 22; // Word joiner -const $60ff486a304db230$export$cb94397127ac9363 = 23; // Hangul LV -const $60ff486a304db230$export$746be9e3a3dfff1f = 24; // Hangul LVT -const $60ff486a304db230$export$96e3e682276c47cf = 25; // Hangul L Jamo -const $60ff486a304db230$export$fc2ff69ee2cb01bf = 26; // Hangul V Jamo -const $60ff486a304db230$export$8999624a7bae9d04 = 27; // Hangul T Jamo -const $60ff486a304db230$export$1dff41d5c0caca01 = 28; // Regional Indicator -const $60ff486a304db230$export$ddb7a6c76d9d93eb = 29; // Emoji Base -const $60ff486a304db230$export$7e93eb3105e4786d = 30; // Emoji Modifier -const $60ff486a304db230$export$30a74a373318dec6 = 31; // Zero Width Joiner -const $60ff486a304db230$export$54caeea5e6dab1f = 32; // Contingent break -const $60ff486a304db230$export$d710c5f50fc7496a = 33; // Ambiguous (Alphabetic or Ideograph) -const $60ff486a304db230$export$66498d28055820a9 = 34; // Break (mandatory) -const $60ff486a304db230$export$eb6c6d0b7c8826f2 = 35; // Conditional Japanese Starter -const $60ff486a304db230$export$de92be486109a1df = 36; // Carriage return -const $60ff486a304db230$export$606cfc2a8896c91f = 37; // Line feed -const $60ff486a304db230$export$e51d3c675bb0140d = 38; // Next line -const $60ff486a304db230$export$da51c6332ad11d7b = 39; // South-East Asian -const $60ff486a304db230$export$bea437c40441867d = 40; // Surrogates -const $60ff486a304db230$export$c4c7eecbfed13dc9 = 41; // Space -const $60ff486a304db230$export$98e1f8a379849661 = 42; // Unknown - - -const $1b6fba3281342923$export$98f50d781a474745 = 0; // Direct break opportunity -const $1b6fba3281342923$export$12ee1f8f5315ca7e = 1; // Indirect break opportunity -const $1b6fba3281342923$export$e4965ce242860454 = 2; // Indirect break opportunity for combining marks -const $1b6fba3281342923$export$8f14048969dcd45e = 3; // Prohibited break for combining marks -const $1b6fba3281342923$export$133eb141bf58aff4 = 4; // Prohibited break -const $1b6fba3281342923$export$5bdb8ccbf5c57afc = [ - //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB - [ - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$8f14048969dcd45e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ] // CB -]; - - -const $f898ea50f3b38ab8$var$data = ($parcel$interopDefault($kQ2hT$base64js)).toByteArray("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"); -const $f898ea50f3b38ab8$var$classTrie = new ($parcel$interopDefault($kQ2hT$unicodetrie))($f898ea50f3b38ab8$var$data); -const $f898ea50f3b38ab8$var$mapClass = function(c) { - switch(c){ - case $60ff486a304db230$export$d710c5f50fc7496a: - return $60ff486a304db230$export$1bb1140fe1358b00; - case $60ff486a304db230$export$da51c6332ad11d7b: - case $60ff486a304db230$export$bea437c40441867d: - case $60ff486a304db230$export$98e1f8a379849661: - return $60ff486a304db230$export$1bb1140fe1358b00; - case $60ff486a304db230$export$eb6c6d0b7c8826f2: - return $60ff486a304db230$export$fb4028874a74450; - default: - return c; - } -}; -const $f898ea50f3b38ab8$var$mapFirst = function(c) { - switch(c){ - case $60ff486a304db230$export$606cfc2a8896c91f: - case $60ff486a304db230$export$e51d3c675bb0140d: - return $60ff486a304db230$export$66498d28055820a9; - case $60ff486a304db230$export$c4c7eecbfed13dc9: - return $60ff486a304db230$export$9e5d732f3676a9ba; - default: - return c; - } -}; -class $f898ea50f3b38ab8$var$Break { - constructor(position, required = false){ - this.position = position; - this.required = required; - } -} -class $f898ea50f3b38ab8$var$LineBreaker { - nextCodePoint() { - const code = this.string.charCodeAt(this.pos++); - const next = this.string.charCodeAt(this.pos); - // If a surrogate pair - if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) { - this.pos++; - return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000; - } - return code; - } - nextCharClass() { - return $f898ea50f3b38ab8$var$mapClass($f898ea50f3b38ab8$var$classTrie.get(this.nextCodePoint())); - } - getSimpleBreak() { - // handle classes not handled by the pair table - switch(this.nextClass){ - case $60ff486a304db230$export$c4c7eecbfed13dc9: - return false; - case $60ff486a304db230$export$66498d28055820a9: - case $60ff486a304db230$export$606cfc2a8896c91f: - case $60ff486a304db230$export$e51d3c675bb0140d: - this.curClass = $60ff486a304db230$export$66498d28055820a9; - return false; - case $60ff486a304db230$export$de92be486109a1df: - this.curClass = $60ff486a304db230$export$de92be486109a1df; - return false; - } - return null; - } - getPairTableBreak(lastClass) { - // if not handled already, use the pair table - let shouldBreak = false; - switch($1b6fba3281342923$export$5bdb8ccbf5c57afc[this.curClass][this.nextClass]){ - case $1b6fba3281342923$export$98f50d781a474745: - shouldBreak = true; - break; - case $1b6fba3281342923$export$12ee1f8f5315ca7e: - shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9; - break; - case $1b6fba3281342923$export$e4965ce242860454: - shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9; - if (!shouldBreak) { - shouldBreak = false; - return shouldBreak; - } - break; - case $1b6fba3281342923$export$8f14048969dcd45e: - if (lastClass !== $60ff486a304db230$export$c4c7eecbfed13dc9) return shouldBreak; - break; - case $1b6fba3281342923$export$133eb141bf58aff4: - break; - } - if (this.LB8a) shouldBreak = false; - // Rule LB21a - if (this.LB21a && (this.curClass === $60ff486a304db230$export$24aa617c849a894a || this.curClass === $60ff486a304db230$export$a73c4d14459b698d)) { - shouldBreak = false; - this.LB21a = false; - } else this.LB21a = this.curClass === $60ff486a304db230$export$f3e416a182673355; - // Rule LB30a - if (this.curClass === $60ff486a304db230$export$1dff41d5c0caca01) { - this.LB30a++; - if (this.LB30a == 2 && this.nextClass === $60ff486a304db230$export$1dff41d5c0caca01) { - shouldBreak = true; - this.LB30a = 0; - } - } else this.LB30a = 0; - this.curClass = this.nextClass; - return shouldBreak; - } - nextBreak() { - // get the first char if we're at the beginning of the string - if (this.curClass == null) { - let firstClass = this.nextCharClass(); - this.curClass = $f898ea50f3b38ab8$var$mapFirst(firstClass); - this.nextClass = firstClass; - this.LB8a = firstClass === $60ff486a304db230$export$30a74a373318dec6; - this.LB30a = 0; - } - while(this.pos < this.string.length){ - this.lastPos = this.pos; - const lastClass = this.nextClass; - this.nextClass = this.nextCharClass(); - // explicit newline - if (this.curClass === $60ff486a304db230$export$66498d28055820a9 || this.curClass === $60ff486a304db230$export$de92be486109a1df && this.nextClass !== $60ff486a304db230$export$606cfc2a8896c91f) { - this.curClass = $f898ea50f3b38ab8$var$mapFirst($f898ea50f3b38ab8$var$mapClass(this.nextClass)); - return new $f898ea50f3b38ab8$var$Break(this.lastPos, true); - } - let shouldBreak = this.getSimpleBreak(); - if (shouldBreak === null) shouldBreak = this.getPairTableBreak(lastClass); - // Rule LB8a - this.LB8a = this.nextClass === $60ff486a304db230$export$30a74a373318dec6; - if (shouldBreak) return new $f898ea50f3b38ab8$var$Break(this.lastPos); - } - if (this.lastPos < this.string.length) { - this.lastPos = this.string.length; - return new $f898ea50f3b38ab8$var$Break(this.string.length); - } - return null; - } - constructor(string){ - this.string = string; - this.pos = 0; - this.lastPos = 0; - this.curClass = null; - this.nextClass = null; - this.LB8a = false; - this.LB21a = false; - this.LB30a = 0; - } -} -module.exports = $f898ea50f3b38ab8$var$LineBreaker; - - -//# sourceMappingURL=main.cjs.map diff --git a/skills/flight-finder/node_modules/linebreak/dist/main.cjs.map b/skills/flight-finder/node_modules/linebreak/dist/main.cjs.map deleted file mode 100644 index 5f8125e..0000000 --- a/skills/flight-finder/node_modules/linebreak/dist/main.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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AAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;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","sources":["src/linebreaker.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","src/classes.js","src/pairs.js"],"sourcesContent":["import UnicodeTrie from 'unicode-trie';\nimport fs from 'fs';\nimport base64 from 'base64-js';\nimport { BK, CR, LF, NL, SG, WJ, SP, ZWJ, BA, HY, NS, AI, AL, CJ, HL, RI, SA, XX } from './classes';\nimport { DI_BRK, IN_BRK, CI_BRK, CP_BRK, PR_BRK, pairTable } from './pairs';\n\nconst data = base64.toByteArray(fs.readFileSync(__dirname + '/classes.trie', 'base64'));\nconst classTrie = new UnicodeTrie(data);\n\nconst mapClass = function (c) {\n switch (c) {\n case AI:\n return AL;\n\n case SA:\n case SG:\n case XX:\n return AL;\n\n case CJ:\n return NS;\n\n default:\n return c;\n }\n};\n\nconst mapFirst = function (c) {\n switch (c) {\n case LF:\n case NL:\n return BK;\n\n case SP:\n return WJ;\n\n default:\n return c;\n }\n};\n\nclass Break {\n constructor(position, required = false) {\n this.position = position;\n this.required = required;\n }\n}\n\nclass LineBreaker {\n constructor(string) {\n this.string = string;\n this.pos = 0;\n this.lastPos = 0;\n this.curClass = null;\n this.nextClass = null;\n this.LB8a = false;\n this.LB21a = false;\n this.LB30a = 0;\n }\n\n nextCodePoint() {\n const code = this.string.charCodeAt(this.pos++);\n const next = this.string.charCodeAt(this.pos);\n\n // If a surrogate pair\n if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {\n this.pos++;\n return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;\n }\n\n return code;\n }\n\n nextCharClass() {\n return mapClass(classTrie.get(this.nextCodePoint()));\n }\n\n getSimpleBreak() {\n // handle classes not handled by the pair table\n switch (this.nextClass) {\n case SP:\n return false;\n\n case BK:\n case LF:\n case NL:\n this.curClass = BK;\n return false;\n\n case CR:\n this.curClass = CR;\n return false;\n }\n\n return null;\n }\n\n getPairTableBreak(lastClass) {\n // if not handled already, use the pair table\n let shouldBreak = false;\n switch (pairTable[this.curClass][this.nextClass]) {\n case DI_BRK: // Direct break\n shouldBreak = true;\n break;\n\n case IN_BRK: // possible indirect break\n shouldBreak = lastClass === SP;\n break;\n\n case CI_BRK:\n shouldBreak = lastClass === SP;\n if (!shouldBreak) {\n shouldBreak = false;\n return shouldBreak;\n }\n break;\n\n case CP_BRK: // prohibited for combining marks\n if (lastClass !== SP) {\n return shouldBreak;\n }\n break;\n\n case PR_BRK:\n break;\n }\n\n if (this.LB8a) {\n shouldBreak = false;\n }\n\n // Rule LB21a\n if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n shouldBreak = false;\n this.LB21a = false;\n } else {\n this.LB21a = (this.curClass === HL);\n }\n\n // Rule LB30a\n if (this.curClass === RI) {\n this.LB30a++;\n if (this.LB30a == 2 && (this.nextClass === RI)) {\n shouldBreak = true;\n this.LB30a = 0;\n }\n } else {\n this.LB30a = 0;\n }\n\n this.curClass = this.nextClass;\n\n return shouldBreak;\n }\n\n nextBreak() {\n // get the first char if we're at the beginning of the string\n if (this.curClass == null) {\n let firstClass = this.nextCharClass();\n this.curClass = mapFirst(firstClass);\n this.nextClass = firstClass;\n this.LB8a = (firstClass === ZWJ);\n this.LB30a = 0;\n }\n\n while (this.pos < this.string.length) {\n this.lastPos = this.pos;\n const lastClass = this.nextClass;\n this.nextClass = this.nextCharClass();\n\n // explicit newline\n if ((this.curClass === BK) || ((this.curClass === CR) && (this.nextClass !== LF))) {\n this.curClass = mapFirst(mapClass(this.nextClass));\n return new Break(this.lastPos, true);\n }\n\n let shouldBreak = this.getSimpleBreak();\n\n if (shouldBreak === null) {\n shouldBreak = this.getPairTableBreak(lastClass);\n }\n\n // Rule LB8a\n this.LB8a = (this.nextClass === ZWJ);\n\n if (shouldBreak) {\n return new Break(this.lastPos);\n }\n }\n\n if (this.lastPos < this.string.length) {\n this.lastPos = this.string.length;\n return new Break(this.string.length);\n }\n\n return null;\n }\n}\n\nmodule.exports = LineBreaker;\n","\"use strict\";","// The following break classes are handled by the pair table\nexport const OP = 0; // Opening punctuation\nexport const CL = 1; // Closing punctuation\nexport const CP = 2; // Closing parenthesis\nexport const QU = 3; // Ambiguous quotation\nexport const GL = 4; // Glue\nexport const NS = 5; // Non-starters\nexport const EX = 6; // Exclamation/Interrogation\nexport const SY = 7; // Symbols allowing break after\nexport const IS = 8; // Infix separator\nexport const PR = 9; // Prefix\nexport const PO = 10; // Postfix\nexport const NU = 11; // Numeric\nexport const AL = 12; // Alphabetic\nexport const HL = 13; // Hebrew Letter\nexport const ID = 14; // Ideographic\nexport const IN = 15; // Inseparable characters\nexport const HY = 16; // Hyphen\nexport const BA = 17; // Break after\nexport const BB = 18; // Break before\nexport const B2 = 19; // Break on either side (but not pair)\nexport const ZW = 20; // Zero-width space\nexport const CM = 21; // Combining marks\nexport const WJ = 22; // Word joiner\nexport const H2 = 23; // Hangul LV\nexport const H3 = 24; // Hangul LVT\nexport const JL = 25; // Hangul L Jamo\nexport const JV = 26; // Hangul V Jamo\nexport const JT = 27; // Hangul T Jamo\nexport const RI = 28; // Regional Indicator\nexport const EB = 29; // Emoji Base\nexport const EM = 30; // Emoji Modifier\nexport const ZWJ = 31; // Zero Width Joiner\nexport const CB = 32; // Contingent break\n\n// The following break classes are not handled by the pair table\nexport const AI = 33; // Ambiguous (Alphabetic or Ideograph)\nexport const BK = 34; // Break (mandatory)\nexport const CJ = 35; // Conditional Japanese Starter\nexport const CR = 36; // Carriage return\nexport const LF = 37; // Line feed\nexport const NL = 38; // Next line\nexport const SA = 39; // South-East Asian\nexport const SG = 40; // Surrogates\nexport const SP = 41; // Space\nexport const XX = 42; // Unknown\n","export const DI_BRK = 0; // Direct break opportunity\nexport const IN_BRK = 1; // Indirect break opportunity\nexport const CI_BRK = 2; // Indirect break opportunity for combining marks\nexport const CP_BRK = 3; // Prohibited break for combining marks\nexport const PR_BRK = 4; // Prohibited break\n\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\n// - ZWJ special processing for LB8a of Revision 41\n// - CB manually added as per Rule LB20\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\nexport const pairTable = [\n //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB\n [PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], // OP\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CP\n [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // QU\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // GL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NS\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EX\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // SY\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IS\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // PR\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // PO\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NU\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // AL\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ID\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IN\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HY\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // BA\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // BB\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // B2\n [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], // ZW\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CM\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // WJ\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H2\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H3\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JV\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JT\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // RI\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], // EB\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EM\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ZWJ\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\n];"],"names":[],"version":3,"file":"main.cjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/linebreak/dist/module.mjs b/skills/flight-finder/node_modules/linebreak/dist/module.mjs deleted file mode 100644 index b4c5c6e..0000000 --- a/skills/flight-finder/node_modules/linebreak/dist/module.mjs +++ /dev/null @@ -1,1368 +0,0 @@ -import $hJqJp$unicodetrie from "unicode-trie"; -import $hJqJp$base64js from "base64-js"; - -var $557adaaeb0c7885f$exports = {}; - -"use strict"; - - - -const $1627905f8be2ef3f$export$af862512e23cb54 = 0; // Opening punctuation -const $1627905f8be2ef3f$export$9bf3043cb7503aa1 = 1; // Closing punctuation -const $1627905f8be2ef3f$export$6d0b2a5dd774590a = 2; // Closing parenthesis -const $1627905f8be2ef3f$export$bf0b2277bd569ea1 = 3; // Ambiguous quotation -const $1627905f8be2ef3f$export$bad2a840ccda93b6 = 4; // Glue -const $1627905f8be2ef3f$export$fb4028874a74450 = 5; // Non-starters -const $1627905f8be2ef3f$export$463bd1ce0149c55e = 6; // Exclamation/Interrogation -const $1627905f8be2ef3f$export$2e8caadc521d7cbb = 7; // Symbols allowing break after -const $1627905f8be2ef3f$export$bfe27467c1de9413 = 8; // Infix separator -const $1627905f8be2ef3f$export$af5f8d68aad3cd3a = 9; // Prefix -const $1627905f8be2ef3f$export$6b7e017d6825d38f = 10; // Postfix -const $1627905f8be2ef3f$export$8227ca023eb0daaa = 11; // Numeric -const $1627905f8be2ef3f$export$1bb1140fe1358b00 = 12; // Alphabetic -const $1627905f8be2ef3f$export$f3e416a182673355 = 13; // Hebrew Letter -const $1627905f8be2ef3f$export$8be180ec26319f9f = 14; // Ideographic -const $1627905f8be2ef3f$export$70824c8942178d60 = 15; // Inseparable characters -const $1627905f8be2ef3f$export$24aa617c849a894a = 16; // Hyphen -const $1627905f8be2ef3f$export$a73c4d14459b698d = 17; // Break after -const $1627905f8be2ef3f$export$921068d8846a1559 = 18; // Break before -const $1627905f8be2ef3f$export$8b85a4f193482778 = 19; // Break on either side (but not pair) -const $1627905f8be2ef3f$export$b2fd9c01d360241f = 20; // Zero-width space -const $1627905f8be2ef3f$export$dcd191669c0a595f = 21; // Combining marks -const $1627905f8be2ef3f$export$9e5d732f3676a9ba = 22; // Word joiner -const $1627905f8be2ef3f$export$cb94397127ac9363 = 23; // Hangul LV -const $1627905f8be2ef3f$export$746be9e3a3dfff1f = 24; // Hangul LVT -const $1627905f8be2ef3f$export$96e3e682276c47cf = 25; // Hangul L Jamo -const $1627905f8be2ef3f$export$fc2ff69ee2cb01bf = 26; // Hangul V Jamo -const $1627905f8be2ef3f$export$8999624a7bae9d04 = 27; // Hangul T Jamo -const $1627905f8be2ef3f$export$1dff41d5c0caca01 = 28; // Regional Indicator -const $1627905f8be2ef3f$export$ddb7a6c76d9d93eb = 29; // Emoji Base -const $1627905f8be2ef3f$export$7e93eb3105e4786d = 30; // Emoji Modifier -const $1627905f8be2ef3f$export$30a74a373318dec6 = 31; // Zero Width Joiner -const $1627905f8be2ef3f$export$54caeea5e6dab1f = 32; // Contingent break -const $1627905f8be2ef3f$export$d710c5f50fc7496a = 33; // Ambiguous (Alphabetic or Ideograph) -const $1627905f8be2ef3f$export$66498d28055820a9 = 34; // Break (mandatory) -const $1627905f8be2ef3f$export$eb6c6d0b7c8826f2 = 35; // Conditional Japanese Starter -const $1627905f8be2ef3f$export$de92be486109a1df = 36; // Carriage return -const $1627905f8be2ef3f$export$606cfc2a8896c91f = 37; // Line feed -const $1627905f8be2ef3f$export$e51d3c675bb0140d = 38; // Next line -const $1627905f8be2ef3f$export$da51c6332ad11d7b = 39; // South-East Asian -const $1627905f8be2ef3f$export$bea437c40441867d = 40; // Surrogates -const $1627905f8be2ef3f$export$c4c7eecbfed13dc9 = 41; // Space -const $1627905f8be2ef3f$export$98e1f8a379849661 = 42; // Unknown - - -const $32627af916ac1b00$export$98f50d781a474745 = 0; // Direct break opportunity -const $32627af916ac1b00$export$12ee1f8f5315ca7e = 1; // Indirect break opportunity -const $32627af916ac1b00$export$e4965ce242860454 = 2; // Indirect break opportunity for combining marks -const $32627af916ac1b00$export$8f14048969dcd45e = 3; // Prohibited break for combining marks -const $32627af916ac1b00$export$133eb141bf58aff4 = 4; // Prohibited break -const $32627af916ac1b00$export$5bdb8ccbf5c57afc = [ - //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB - [ - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$8f14048969dcd45e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ], - [ - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$e4965ce242860454, - $32627af916ac1b00$export$133eb141bf58aff4, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$98f50d781a474745, - $32627af916ac1b00$export$12ee1f8f5315ca7e, - $32627af916ac1b00$export$98f50d781a474745 - ] // CB -]; - - -const $557adaaeb0c7885f$var$data = $hJqJp$base64js.toByteArray("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"); -const $557adaaeb0c7885f$var$classTrie = new $hJqJp$unicodetrie($557adaaeb0c7885f$var$data); -const $557adaaeb0c7885f$var$mapClass = function(c) { - switch(c){ - case $1627905f8be2ef3f$export$d710c5f50fc7496a: - return $1627905f8be2ef3f$export$1bb1140fe1358b00; - case $1627905f8be2ef3f$export$da51c6332ad11d7b: - case $1627905f8be2ef3f$export$bea437c40441867d: - case $1627905f8be2ef3f$export$98e1f8a379849661: - return $1627905f8be2ef3f$export$1bb1140fe1358b00; - case $1627905f8be2ef3f$export$eb6c6d0b7c8826f2: - return $1627905f8be2ef3f$export$fb4028874a74450; - default: - return c; - } -}; -const $557adaaeb0c7885f$var$mapFirst = function(c) { - switch(c){ - case $1627905f8be2ef3f$export$606cfc2a8896c91f: - case $1627905f8be2ef3f$export$e51d3c675bb0140d: - return $1627905f8be2ef3f$export$66498d28055820a9; - case $1627905f8be2ef3f$export$c4c7eecbfed13dc9: - return $1627905f8be2ef3f$export$9e5d732f3676a9ba; - default: - return c; - } -}; -class $557adaaeb0c7885f$var$Break { - constructor(position, required = false){ - this.position = position; - this.required = required; - } -} -class $557adaaeb0c7885f$var$LineBreaker { - nextCodePoint() { - const code = this.string.charCodeAt(this.pos++); - const next = this.string.charCodeAt(this.pos); - // If a surrogate pair - if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) { - this.pos++; - return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000; - } - return code; - } - nextCharClass() { - return $557adaaeb0c7885f$var$mapClass($557adaaeb0c7885f$var$classTrie.get(this.nextCodePoint())); - } - getSimpleBreak() { - // handle classes not handled by the pair table - switch(this.nextClass){ - case $1627905f8be2ef3f$export$c4c7eecbfed13dc9: - return false; - case $1627905f8be2ef3f$export$66498d28055820a9: - case $1627905f8be2ef3f$export$606cfc2a8896c91f: - case $1627905f8be2ef3f$export$e51d3c675bb0140d: - this.curClass = $1627905f8be2ef3f$export$66498d28055820a9; - return false; - case $1627905f8be2ef3f$export$de92be486109a1df: - this.curClass = $1627905f8be2ef3f$export$de92be486109a1df; - return false; - } - return null; - } - getPairTableBreak(lastClass) { - // if not handled already, use the pair table - let shouldBreak = false; - switch($32627af916ac1b00$export$5bdb8ccbf5c57afc[this.curClass][this.nextClass]){ - case $32627af916ac1b00$export$98f50d781a474745: - shouldBreak = true; - break; - case $32627af916ac1b00$export$12ee1f8f5315ca7e: - shouldBreak = lastClass === $1627905f8be2ef3f$export$c4c7eecbfed13dc9; - break; - case $32627af916ac1b00$export$e4965ce242860454: - shouldBreak = lastClass === $1627905f8be2ef3f$export$c4c7eecbfed13dc9; - if (!shouldBreak) { - shouldBreak = false; - return shouldBreak; - } - break; - case $32627af916ac1b00$export$8f14048969dcd45e: - if (lastClass !== $1627905f8be2ef3f$export$c4c7eecbfed13dc9) return shouldBreak; - break; - case $32627af916ac1b00$export$133eb141bf58aff4: - break; - } - if (this.LB8a) shouldBreak = false; - // Rule LB21a - if (this.LB21a && (this.curClass === $1627905f8be2ef3f$export$24aa617c849a894a || this.curClass === $1627905f8be2ef3f$export$a73c4d14459b698d)) { - shouldBreak = false; - this.LB21a = false; - } else this.LB21a = this.curClass === $1627905f8be2ef3f$export$f3e416a182673355; - // Rule LB30a - if (this.curClass === $1627905f8be2ef3f$export$1dff41d5c0caca01) { - this.LB30a++; - if (this.LB30a == 2 && this.nextClass === $1627905f8be2ef3f$export$1dff41d5c0caca01) { - shouldBreak = true; - this.LB30a = 0; - } - } else this.LB30a = 0; - this.curClass = this.nextClass; - return shouldBreak; - } - nextBreak() { - // get the first char if we're at the beginning of the string - if (this.curClass == null) { - let firstClass = this.nextCharClass(); - this.curClass = $557adaaeb0c7885f$var$mapFirst(firstClass); - this.nextClass = firstClass; - this.LB8a = firstClass === $1627905f8be2ef3f$export$30a74a373318dec6; - this.LB30a = 0; - } - while(this.pos < this.string.length){ - this.lastPos = this.pos; - const lastClass = this.nextClass; - this.nextClass = this.nextCharClass(); - // explicit newline - if (this.curClass === $1627905f8be2ef3f$export$66498d28055820a9 || this.curClass === $1627905f8be2ef3f$export$de92be486109a1df && this.nextClass !== $1627905f8be2ef3f$export$606cfc2a8896c91f) { - this.curClass = $557adaaeb0c7885f$var$mapFirst($557adaaeb0c7885f$var$mapClass(this.nextClass)); - return new $557adaaeb0c7885f$var$Break(this.lastPos, true); - } - let shouldBreak = this.getSimpleBreak(); - if (shouldBreak === null) shouldBreak = this.getPairTableBreak(lastClass); - // Rule LB8a - this.LB8a = this.nextClass === $1627905f8be2ef3f$export$30a74a373318dec6; - if (shouldBreak) return new $557adaaeb0c7885f$var$Break(this.lastPos); - } - if (this.lastPos < this.string.length) { - this.lastPos = this.string.length; - return new $557adaaeb0c7885f$var$Break(this.string.length); - } - return null; - } - constructor(string){ - this.string = string; - this.pos = 0; - this.lastPos = 0; - this.curClass = null; - this.nextClass = null; - this.LB8a = false; - this.LB21a = false; - this.LB30a = 0; - } -} -$557adaaeb0c7885f$exports = $557adaaeb0c7885f$var$LineBreaker; - - -export {$557adaaeb0c7885f$exports as default}; -//# sourceMappingURL=module.mjs.map diff --git a/skills/flight-finder/node_modules/linebreak/dist/module.mjs.map b/skills/flight-finder/node_modules/linebreak/dist/module.mjs.map deleted file mode 100644 index 6e8b104..0000000 --- a/skills/flight-finder/node_modules/linebreak/dist/module.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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E,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;KAAC;IACxQ;QAAC,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QAAE,yCAAM;QA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","sources":["src/linebreaker.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","src/classes.js","src/pairs.js"],"sourcesContent":["import UnicodeTrie from 'unicode-trie';\nimport fs from 'fs';\nimport base64 from 'base64-js';\nimport { BK, CR, LF, NL, SG, WJ, SP, ZWJ, BA, HY, NS, AI, AL, CJ, HL, RI, SA, XX } from './classes';\nimport { DI_BRK, IN_BRK, CI_BRK, CP_BRK, PR_BRK, pairTable } from './pairs';\n\nconst data = base64.toByteArray(fs.readFileSync(__dirname + '/classes.trie', 'base64'));\nconst classTrie = new UnicodeTrie(data);\n\nconst mapClass = function (c) {\n switch (c) {\n case AI:\n return AL;\n\n case SA:\n case SG:\n case XX:\n return AL;\n\n case CJ:\n return NS;\n\n default:\n return c;\n }\n};\n\nconst mapFirst = function (c) {\n switch (c) {\n case LF:\n case NL:\n return BK;\n\n case SP:\n return WJ;\n\n default:\n return c;\n }\n};\n\nclass Break {\n constructor(position, required = false) {\n this.position = position;\n this.required = required;\n }\n}\n\nclass LineBreaker {\n constructor(string) {\n this.string = string;\n this.pos = 0;\n this.lastPos = 0;\n this.curClass = null;\n this.nextClass = null;\n this.LB8a = false;\n this.LB21a = false;\n this.LB30a = 0;\n }\n\n nextCodePoint() {\n const code = this.string.charCodeAt(this.pos++);\n const next = this.string.charCodeAt(this.pos);\n\n // If a surrogate pair\n if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {\n this.pos++;\n return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;\n }\n\n return code;\n }\n\n nextCharClass() {\n return mapClass(classTrie.get(this.nextCodePoint()));\n }\n\n getSimpleBreak() {\n // handle classes not handled by the pair table\n switch (this.nextClass) {\n case SP:\n return false;\n\n case BK:\n case LF:\n case NL:\n this.curClass = BK;\n return false;\n\n case CR:\n this.curClass = CR;\n return false;\n }\n\n return null;\n }\n\n getPairTableBreak(lastClass) {\n // if not handled already, use the pair table\n let shouldBreak = false;\n switch (pairTable[this.curClass][this.nextClass]) {\n case DI_BRK: // Direct break\n shouldBreak = true;\n break;\n\n case IN_BRK: // possible indirect break\n shouldBreak = lastClass === SP;\n break;\n\n case CI_BRK:\n shouldBreak = lastClass === SP;\n if (!shouldBreak) {\n shouldBreak = false;\n return shouldBreak;\n }\n break;\n\n case CP_BRK: // prohibited for combining marks\n if (lastClass !== SP) {\n return shouldBreak;\n }\n break;\n\n case PR_BRK:\n break;\n }\n\n if (this.LB8a) {\n shouldBreak = false;\n }\n\n // Rule LB21a\n if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n shouldBreak = false;\n this.LB21a = false;\n } else {\n this.LB21a = (this.curClass === HL);\n }\n\n // Rule LB30a\n if (this.curClass === RI) {\n this.LB30a++;\n if (this.LB30a == 2 && (this.nextClass === RI)) {\n shouldBreak = true;\n this.LB30a = 0;\n }\n } else {\n this.LB30a = 0;\n }\n\n this.curClass = this.nextClass;\n\n return shouldBreak;\n }\n\n nextBreak() {\n // get the first char if we're at the beginning of the string\n if (this.curClass == null) {\n let firstClass = this.nextCharClass();\n this.curClass = mapFirst(firstClass);\n this.nextClass = firstClass;\n this.LB8a = (firstClass === ZWJ);\n this.LB30a = 0;\n }\n\n while (this.pos < this.string.length) {\n this.lastPos = this.pos;\n const lastClass = this.nextClass;\n this.nextClass = this.nextCharClass();\n\n // explicit newline\n if ((this.curClass === BK) || ((this.curClass === CR) && (this.nextClass !== LF))) {\n this.curClass = mapFirst(mapClass(this.nextClass));\n return new Break(this.lastPos, true);\n }\n\n let shouldBreak = this.getSimpleBreak();\n\n if (shouldBreak === null) {\n shouldBreak = this.getPairTableBreak(lastClass);\n }\n\n // Rule LB8a\n this.LB8a = (this.nextClass === ZWJ);\n\n if (shouldBreak) {\n return new Break(this.lastPos);\n }\n }\n\n if (this.lastPos < this.string.length) {\n this.lastPos = this.string.length;\n return new Break(this.string.length);\n }\n\n return null;\n }\n}\n\nmodule.exports = LineBreaker;\n","\"use strict\";","// The following break classes are handled by the pair table\nexport const OP = 0; // Opening punctuation\nexport const CL = 1; // Closing punctuation\nexport const CP = 2; // Closing parenthesis\nexport const QU = 3; // Ambiguous quotation\nexport const GL = 4; // Glue\nexport const NS = 5; // Non-starters\nexport const EX = 6; // Exclamation/Interrogation\nexport const SY = 7; // Symbols allowing break after\nexport const IS = 8; // Infix separator\nexport const PR = 9; // Prefix\nexport const PO = 10; // Postfix\nexport const NU = 11; // Numeric\nexport const AL = 12; // Alphabetic\nexport const HL = 13; // Hebrew Letter\nexport const ID = 14; // Ideographic\nexport const IN = 15; // Inseparable characters\nexport const HY = 16; // Hyphen\nexport const BA = 17; // Break after\nexport const BB = 18; // Break before\nexport const B2 = 19; // Break on either side (but not pair)\nexport const ZW = 20; // Zero-width space\nexport const CM = 21; // Combining marks\nexport const WJ = 22; // Word joiner\nexport const H2 = 23; // Hangul LV\nexport const H3 = 24; // Hangul LVT\nexport const JL = 25; // Hangul L Jamo\nexport const JV = 26; // Hangul V Jamo\nexport const JT = 27; // Hangul T Jamo\nexport const RI = 28; // Regional Indicator\nexport const EB = 29; // Emoji Base\nexport const EM = 30; // Emoji Modifier\nexport const ZWJ = 31; // Zero Width Joiner\nexport const CB = 32; // Contingent break\n\n// The following break classes are not handled by the pair table\nexport const AI = 33; // Ambiguous (Alphabetic or Ideograph)\nexport const BK = 34; // Break (mandatory)\nexport const CJ = 35; // Conditional Japanese Starter\nexport const CR = 36; // Carriage return\nexport const LF = 37; // Line feed\nexport const NL = 38; // Next line\nexport const SA = 39; // South-East Asian\nexport const SG = 40; // Surrogates\nexport const SP = 41; // Space\nexport const XX = 42; // Unknown\n","export const DI_BRK = 0; // Direct break opportunity\nexport const IN_BRK = 1; // Indirect break opportunity\nexport const CI_BRK = 2; // Indirect break opportunity for combining marks\nexport const CP_BRK = 3; // Prohibited break for combining marks\nexport const PR_BRK = 4; // Prohibited break\n\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\n// - ZWJ special processing for LB8a of Revision 41\n// - CB manually added as per Rule LB20\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\nexport const pairTable = [\n //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB\n [PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], // OP\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CP\n [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // QU\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // GL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NS\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EX\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // SY\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IS\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // PR\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // PO\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NU\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // AL\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ID\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IN\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HY\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // BA\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // BB\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // B2\n [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], // ZW\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CM\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // WJ\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H2\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H3\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JL\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JV\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JT\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // RI\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], // EB\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EM\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ZWJ\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\n];"],"names":[],"version":3,"file":"module.mjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/.travis.yml b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/.travis.yml deleted file mode 100644 index 939cb51..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.11" \ No newline at end of file diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/LICENSE.MIT b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/LICENSE.MIT deleted file mode 100644 index 96d3f68..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/LICENSE.MIT +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/README.md b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/README.md deleted file mode 100644 index ed31d1a..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/README.md +++ /dev/null @@ -1,31 +0,0 @@ -base64-js -========= - -`base64-js` does basic base64 encoding/decoding in pure JS. - -[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js) - -[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js) - -Many browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data. - -Sometimes encoding/decoding binary data in the browser is useful, and that is what this module does. - -## install - -With [npm](https://npmjs.org) do: - -`npm install base64-js` - -## methods - -`var base64 = require('base64-js')` - -`base64` has two exposed functions, `toByteArray` and `fromByteArray`, which both take a single argument. - -* `toByteArray` - Takes a base64 string and returns a byte array -* `fromByteArray` - Takes a byte array and returns a base64 string - -## license - -MIT \ No newline at end of file diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/bench/bench.js b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/bench/bench.js deleted file mode 100644 index 0689e08..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/bench/bench.js +++ /dev/null @@ -1,19 +0,0 @@ -var random = require('crypto').pseudoRandomBytes - -var b64 = require('../') -var fs = require('fs') -var path = require('path') -var data = random(1e6).toString('base64') -//fs.readFileSync(path.join(__dirname, 'example.b64'), 'ascii').split('\n').join('') -var start = Date.now() -var raw = b64.toByteArray(data) -var middle = Date.now() -var data = b64.fromByteArray(raw) -var end = Date.now() - -console.log('decode ms, decode ops/ms, encode ms, encode ops/ms') -console.log( - middle - start, data.length / (middle - start), - end - middle, data.length / (end - middle)) -//console.log(data) - diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/lib/b64.js b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/lib/b64.js deleted file mode 100644 index 46001d2..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/lib/b64.js +++ /dev/null @@ -1,124 +0,0 @@ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - var PLUS_URL_SAFE = '-'.charCodeAt(0) - var SLASH_URL_SAFE = '_'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS || - code === PLUS_URL_SAFE) - return 62 // '+' - if (code === SLASH || - code === SLASH_URL_SAFE) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/package.json b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/package.json deleted file mode 100644 index a7e6099..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "author": "T. Jameson Little ", - "name": "base64-js", - "description": "Base64 encoding/decoding in pure JS", - "version": "0.0.8", - "repository": { - "type": "git", - "url": "git://github.com/beatgammit/base64-js.git" - }, - "main": "lib/b64.js", - "scripts": { - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "chrome/4..latest", - "firefox/3..latest", - "safari/5.1..latest", - "opera/11.0..latest", - "iphone/6", - "ipad/6" - ] - }, - "engines": { - "node": ">= 0.4" - }, - "license": "MIT", - "dependencies": {}, - "devDependencies": { - "tape": "~2.3.2" - } -} diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/convert.js b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/convert.js deleted file mode 100644 index 60b09c0..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/convert.js +++ /dev/null @@ -1,51 +0,0 @@ -var test = require('tape'), - b64 = require('../lib/b64'), - checks = [ - 'a', - 'aa', - 'aaa', - 'hi', - 'hi!', - 'hi!!', - 'sup', - 'sup?', - 'sup?!' - ]; - -test('convert to base64 and back', function (t) { - t.plan(checks.length); - - for (var i = 0; i < checks.length; i++) { - var check = checks[i], - b64Str, - arr, - str; - - b64Str = b64.fromByteArray(map(check, function (char) { return char.charCodeAt(0); })); - - arr = b64.toByteArray(b64Str); - str = map(arr, function (byte) { return String.fromCharCode(byte); }).join(''); - - t.equal(check, str, 'Checked ' + check); - } - -}); - -function map (arr, callback) { - var res = [], - kValue, - mappedValue; - - for (var k = 0, len = arr.length; k < len; k++) { - if ((typeof arr === 'string' && !!arr.charAt(k))) { - kValue = arr.charAt(k); - mappedValue = callback(kValue, k, arr); - res[k] = mappedValue; - } else if (typeof arr !== 'string' && k in arr) { - kValue = arr[k]; - mappedValue = callback(kValue, k, arr); - res[k] = mappedValue; - } - } - return res; -} diff --git a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/url-safe.js b/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/url-safe.js deleted file mode 100644 index dc437e9..0000000 --- a/skills/flight-finder/node_modules/linebreak/node_modules/base64-js/test/url-safe.js +++ /dev/null @@ -1,18 +0,0 @@ -var test = require('tape'), - b64 = require('../lib/b64'); - -test('decode url-safe style base64 strings', function (t) { - var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff]; - - var actual = b64.toByteArray('//++/++/++//'); - for (var i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - actual = b64.toByteArray('__--_--_--__'); - for (var i = 0; i < actual.length; i++) { - t.equal(actual[i], expected[i]) - } - - t.end(); -}); diff --git a/skills/flight-finder/node_modules/linebreak/package.json b/skills/flight-finder/node_modules/linebreak/package.json deleted file mode 100644 index 5b22a30..0000000 --- a/skills/flight-finder/node_modules/linebreak/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "linebreak", - "version": "1.1.0", - "description": "An implementation of the Unicode Line Breaking Algorithm (UAX #14)", - "source": "src/linebreaker.js", - "type": "module", - "main": "dist/main.cjs", - "module": "dist/module.mjs", - "exports": { - "require": "./dist/main.cjs", - "import": "./dist/module.mjs" - }, - "files": [ - "dist" - ], - "repository": { - "type": "git", - "url": "https://github.com/devongovett/linebreaker.git" - }, - "keywords": [ - "unicode", - "text", - "wrapping" - ], - "author": "Devon Govett ", - "license": "MIT", - "bugs": { - "url": "https://github.com/devongovett/linebreaker/issues" - }, - "homepage": "https://github.com/devongovett/linebreaker", - "dependencies": { - "base64-js": "0.0.8", - "unicode-trie": "^2.0.0" - }, - "devDependencies": { - "mocha": "^10.0.0", - "parcel": "^2.5.0", - "request": "^2.88.0" - }, - "scripts": { - "test": "parcel build && mocha --reporter landing", - "build": "parcel build", - "prepublishOnly": "parcel build" - }, - "targets": { - "main": { - "includeNodeModules": [ - "fs" - ] - }, - "module": { - "includeNodeModules": [ - "fs" - ] - } - } -} diff --git a/skills/flight-finder/node_modules/linebreak/readme.md b/skills/flight-finder/node_modules/linebreak/readme.md deleted file mode 100644 index 55bb915..0000000 --- a/skills/flight-finder/node_modules/linebreak/readme.md +++ /dev/null @@ -1,62 +0,0 @@ -# linebreak -An implementation of the Unicode Line Breaking Algorithm (UAX #14) - -> Line breaking, also known as word wrapping, is the process of breaking a section of text into lines such that it will fit in the -> available width of a page, window or other display area. The Unicode Line Breaking Algorithm performs part of this process. -> Given an input text, it produces a set of positions called "break opportunities" that are appropriate points to begin a new line. -> The selection of actual line break positions from the set of break opportunities is not covered by the Unicode Line Breaking Algorithm, -> but is in the domain of higher level software with knowledge of the available width and the display size of the text. - -This is a JavaScript implementation of the [Unicode Line Breaking Algorithm](http://www.unicode.org/reports/tr14/#SampleCode) for Node.js -(and browsers I guess). Currently supports Unicode version 13. It is used by [PDFKit](http://github.com/devongovett/pdfkit/) for -line wrapping text in PDF documents, but since the algorithm knows nothing about the actual visual appearance or layout of text, -it could be used for other things as well. - -## Installation - -You can install via npm - - npm install linebreak - -## Example - -```javascript -var LineBreaker = require('linebreak'); - -var lorem = 'lorem ipsum...'; -var breaker = new LineBreaker(lorem); -var last = 0; -var bk; - -while (bk = breaker.nextBreak()) { - // get the string between the last break and this one - var word = lorem.slice(last, bk.position); - console.log(word); - - // you can also check bk.required to see if this was a required break... - if (bk.required) { - console.log('\n\n'); - } - - last = bk.position; -} -``` - -## Development Notes - -In order to use the library, you shouldn't need to know this, but if you're interested in -contributing or fixing bugs, these things might be of interest. - -* The `src/classes.js` file is automatically generated from `LineBreak.txt` in the Unicode - database by `src/generate_data.js`. It should be rare that you need to run this, but - you may if, for instance, you want to change the Unicode version. - -* You can run the tests using `npm test`. They are written using `mocha`, and generated from - `LineBreakTest.txt` from the Unicode database, which is included in the repository for performance - reasons while running them. About 50 of the over 7600 tests are currently skipped due to - implementation differences. It appears that some of the tests may be wrong or use different - tailoring from the spec. - -## License - -MIT diff --git a/skills/flight-finder/node_modules/pako/CHANGELOG.md b/skills/flight-finder/node_modules/pako/CHANGELOG.md deleted file mode 100644 index f985922..0000000 --- a/skills/flight-finder/node_modules/pako/CHANGELOG.md +++ /dev/null @@ -1,90 +0,0 @@ -1.0.2 / 2016-07-21 ------------------- - -- Fixed nasty bug in deflate (wrong `d_buf` offset), which could cause - broken data in some rare cases. -- Also released as 0.2.9 to give chance to old dependents, not updated to 1.x - version. - - -1.0.1 / 2016-04-01 ------------------- - -- Added dictionary support. Thanks to @dignifiedquire. - - -1.0.0 / 2016-02-17 ------------------- - -- Maintenance release (semver, coding style). - - -0.2.8 / 2015-09-14 ------------------- - -- Fixed regression after 0.2.4 for edge conditions in inflate wrapper (#65). - Added more tests to cover possible cases. - - -0.2.7 / 2015-06-09 ------------------- - -- Added Z_SYNC_FLUSH support. Thanks to @TinoLange. - - -0.2.6 / 2015-03-24 ------------------- - -- Allow ArrayBuffer input. - - -0.2.5 / 2014-07-19 ------------------- - -- Workaround for Chrome 38.0.2096.0 script parser bug, #30. - - -0.2.4 / 2014-07-07 ------------------- - -- Fixed bug in inflate wrapper, #29 - - -0.2.3 / 2014-06-09 ------------------- - -- Maintenance release, dependencies update. - - -0.2.2 / 2014-06-04 ------------------- - -- Fixed iOS 5.1 Safary issue with `apply(typed_array)`, #26. - - -0.2.1 / 2014-05-01 ------------------- - -- Fixed collision on switch dynamic/fixed tables. - - -0.2.0 / 2014-04-18 ------------------- - -- Added custom gzip headers support. -- Added strings support. -- Improved memory allocations for small chunks. -- ZStream properties rename/cleanup. -- More coverage tests. - - -0.1.1 / 2014-03-20 ------------------- - -- Bugfixes for inflate/deflate. - - -0.1.0 / 2014-03-15 ------------------- - -- First release. diff --git a/skills/flight-finder/node_modules/pako/LICENSE b/skills/flight-finder/node_modules/pako/LICENSE deleted file mode 100644 index d082ae3..0000000 --- a/skills/flight-finder/node_modules/pako/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (C) 2014-2016 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/skills/flight-finder/node_modules/pako/README.md b/skills/flight-finder/node_modules/pako/README.md deleted file mode 100644 index ef121e7..0000000 --- a/skills/flight-finder/node_modules/pako/README.md +++ /dev/null @@ -1,176 +0,0 @@ -pako - zlib port to javascript, very fast! -========================================== - -[![Build Status](https://travis-ci.org/nodeca/pako.svg?branch=master)](https://travis-ci.org/nodeca/pako) -[![NPM version](https://img.shields.io/npm/v/pako.svg)](https://www.npmjs.org/package/pako) - -__Why pako is cool:__ - -- Almost as fast in modern JS engines as C implementation (see benchmarks). -- Works in browsers, you can browserify any separate component. -- Chunking support for big blobs. -- Results are binary equal to well known [zlib](http://www.zlib.net/) (now v1.2.8 ported). - -This project was done to understand how fast JS can be and is it necessary to -develop native C modules for CPU-intensive tasks. Enjoy the result! - - -__Famous projects, using pako:__ - -- [browserify](http://browserify.org/) (via [browserify-zlib](https://github.com/devongovett/browserify-zlib)) -- [JSZip](http://stuk.github.io/jszip/) -- [mincer](https://github.com/nodeca/mincer) -- [JS-Git](https://github.com/creationix/js-git) and - [Tedit](https://chrome.google.com/webstore/detail/tedit-development-environ/ooekdijbnbbjdfjocaiflnjgoohnblgf) - by [@creatronix](https://github.com/creationix) - - -__Benchmarks:__ - -``` -node v0.10.26, 1mb sample: - - deflate-dankogai x 4.73 ops/sec ±0.82% (15 runs sampled) - deflate-gildas x 4.58 ops/sec ±2.33% (15 runs sampled) - deflate-imaya x 3.22 ops/sec ±3.95% (12 runs sampled) - ! deflate-pako x 6.99 ops/sec ±0.51% (21 runs sampled) - deflate-pako-string x 5.89 ops/sec ±0.77% (18 runs sampled) - deflate-pako-untyped x 4.39 ops/sec ±1.58% (14 runs sampled) - * deflate-zlib x 14.71 ops/sec ±4.23% (59 runs sampled) - inflate-dankogai x 32.16 ops/sec ±0.13% (56 runs sampled) - inflate-imaya x 30.35 ops/sec ±0.92% (53 runs sampled) - ! inflate-pako x 69.89 ops/sec ±1.46% (71 runs sampled) - inflate-pako-string x 19.22 ops/sec ±1.86% (49 runs sampled) - inflate-pako-untyped x 17.19 ops/sec ±0.85% (32 runs sampled) - * inflate-zlib x 70.03 ops/sec ±1.64% (81 runs sampled) - -node v0.11.12, 1mb sample: - - deflate-dankogai x 5.60 ops/sec ±0.49% (17 runs sampled) - deflate-gildas x 5.06 ops/sec ±6.00% (16 runs sampled) - deflate-imaya x 3.52 ops/sec ±3.71% (13 runs sampled) - ! deflate-pako x 11.52 ops/sec ±0.22% (32 runs sampled) - deflate-pako-string x 9.53 ops/sec ±1.12% (27 runs sampled) - deflate-pako-untyped x 5.44 ops/sec ±0.72% (17 runs sampled) - * deflate-zlib x 14.05 ops/sec ±3.34% (63 runs sampled) - inflate-dankogai x 42.19 ops/sec ±0.09% (56 runs sampled) - inflate-imaya x 79.68 ops/sec ±1.07% (68 runs sampled) - ! inflate-pako x 97.52 ops/sec ±0.83% (80 runs sampled) - inflate-pako-string x 45.19 ops/sec ±1.69% (57 runs sampled) - inflate-pako-untyped x 24.35 ops/sec ±2.59% (40 runs sampled) - * inflate-zlib x 60.32 ops/sec ±1.36% (69 runs sampled) -``` - -zlib's test is partialy afferted by marshling (that make sense for inflate only). -You can change deflate level to 0 in benchmark source, to investigate details. -For deflate level 6 results can be considered as correct. - -__Install:__ - -node.js: - -``` -npm install pako -``` - -browser: - -``` -bower install pako -``` - - -Example & API -------------- - -Full docs - http://nodeca.github.io/pako/ - -```javascript -var pako = require('pako'); - -// Deflate -// -var input = new Uint8Array(); -//... fill input data here -var output = pako.deflate(input); - -// Inflate (simple wrapper can throw exception on broken stream) -// -var compressed = new Uint8Array(); -//... fill data to uncompress here -try { - var result = pako.inflate(compressed); -} catch (err) { - console.log(err); -} - -// -// Alternate interface for chunking & without exceptions -// - -var inflator = new pako.Inflate(); - -inflator.push(chunk1, false); -inflator.push(chunk2, false); -... -inflator.push(chunkN, true); // true -> last chunk - -if (inflator.err) { - console.log(inflator.msg); -} - -var output = inflator.result; - -``` - -Sometime you can wish to work with strings. For example, to send -big objects as json to server. Pako detects input data type. You can -force output to be string with option `{ to: 'string' }`. - -```javascript -var pako = require('pako'); - -var test = { my: 'super', puper: [456, 567], awesome: 'pako' }; - -var binaryString = pako.deflate(JSON.stringify(test), { to: 'string' }); - -// -// Here you can do base64 encode, make xhr requests and so on. -// - -var restored = JSON.parse(pako.inflate(binaryString, { to: 'string' })); -``` - - -Notes ------ - -Pako does not contain some specific zlib functions: - -- __deflate__ - methods `deflateCopy`, `deflateBound`, `deflateParams`, - `deflatePending`, `deflatePrime`, `deflateTune`. -- __inflate__ - methods `inflateCopy`, `inflateMark`, - `inflatePrime`, `inflateGetDictionary`, `inflateSync`, `inflateSyncPoint`, `inflateUndermine`. -- High level inflate/deflate wrappers (classes) may not support some flush - modes. Those should work: Z_NO_FLUSH, Z_FINISH, Z_SYNC_FLUSH. - - -Authors -------- - -- Andrey Tupitsin [@anrd83](https://github.com/andr83) -- Vitaly Puzrin [@puzrin](https://github.com/puzrin) - -Personal thanks to: - -- Vyacheslav Egorov ([@mraleph](https://github.com/mraleph)) for his awesome - tutorials about optimising JS code for v8, [IRHydra](http://mrale.ph/irhydra/) - tool and his advices. -- David Duponchel ([@dduponchel](https://github.com/dduponchel)) for help with - testing. - - -License -------- - -MIT diff --git a/skills/flight-finder/node_modules/pako/dist/pako.js b/skills/flight-finder/node_modules/pako/dist/pako.js deleted file mode 100644 index 6d6db94..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako.js +++ /dev/null @@ -1,6606 +0,0 @@ -/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o Array - * - * Chunks of output data, if [[Deflate#onData]] not overriden. - **/ - -/** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - -/** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - -/** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ -function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = utils.assign({ - level: Z_DEFAULT_COMPRESSION, - method: Z_DEFLATED, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY, - to: '' - }, options || {}); - - var opt = this.options; - - if (opt.raw && (opt.windowBits > 0)) { - opt.windowBits = -opt.windowBits; - } - - else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_deflate.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - if (opt.header) { - zlib_deflate.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === 'string') { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = zlib_deflate.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - this._dict_set = true; - } -} - -/** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { return false; } - - _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ - - if (status !== Z_STREAM_END && status !== Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { - if (this.options.to === 'string') { - this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); - - // Finalize on the last chunk. - if (_mode === Z_FINISH) { - status = zlib_deflate.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ -function deflate(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { throw deflator.msg; } - - return deflator.result; -} - - -/** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate(input, options); -} - - -/** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ -function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate(input, options); -} - - -exports.Deflate = Deflate; -exports.deflate = deflate; -exports.deflateRaw = deflateRaw; -exports.gzip = gzip; - -},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(require,module,exports){ -'use strict'; - - -var zlib_inflate = require('./zlib/inflate'); -var utils = require('./utils/common'); -var strings = require('./utils/strings'); -var c = require('./zlib/constants'); -var msg = require('./zlib/messages'); -var ZStream = require('./zlib/zstream'); -var GZheader = require('./zlib/gzheader'); - -var toString = Object.prototype.toString; - -/** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - -/* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overriden. - **/ - -/** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - -/** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - -/** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ -function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = utils.assign({ - chunkSize: 16384, - windowBits: 0, - to: '' - }, options || {}); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_inflate.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== c.Z_OK) { - throw new Error(msg[status]); - } - - this.header = new GZheader(); - - zlib_inflate.inflateGetHeader(this.strm, this.header); -} - -/** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - var dict; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { return false; } - _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ - - if (status === c.Z_NEED_DICT && dictionary) { - // Convert data if needed - if (typeof dictionary === 'string') { - dict = strings.string2buf(dictionary); - } else if (toString.call(dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(dictionary); - } else { - dict = dictionary; - } - - status = zlib_inflate.inflateSetDictionary(this.strm, dict); - - } - - if (status === c.Z_BUF_ERROR && allowBufError === true) { - status = c.Z_OK; - allowBufError = false; - } - - if (status !== c.Z_STREAM_END && status !== c.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { - - if (this.options.to === 'string') { - - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } - - this.onData(utf8str); - - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); - - if (status === c.Z_STREAM_END) { - _mode = c.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === c.Z_FINISH) { - status = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === c.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === c.Z_SYNC_FLUSH) { - this.onEnd(c.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === c.Z_OK) { - if (this.options.to === 'string') { - // Glue & convert here, until we teach pako to send - // utf8 alligned strings to onData - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ -function inflate(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { throw inflator.msg; } - - return inflator.result; -} - - -/** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate(input, options); -} - - -/** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - -exports.Inflate = Inflate; -exports.inflate = inflate; -exports.inflateRaw = inflateRaw; -exports.ungzip = inflate; - -},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(require,module,exports){ -'use strict'; - - -var TYPED_OK = (typeof Uint8Array !== 'undefined') && - (typeof Uint16Array !== 'undefined') && - (typeof Int32Array !== 'undefined'); - - -exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (var p in source) { - if (source.hasOwnProperty(p)) { - obj[p] = source[p]; - } - } - } - - return obj; -}; - - -// reduce buffer size, avoiding mem copy -exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { return buf; } - if (buf.subarray) { return buf.subarray(0, size); } - buf.length = size; - return buf; -}; - - -var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - } -}; - -var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - } -}; - - -// Enable/Disable typed arrays use, for testing -// -exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } -}; - -exports.setTyped(TYPED_OK); - -},{}],4:[function(require,module,exports){ -// String encode/decode helpers -'use strict'; - - -var utils = require('./common'); - - -// Quick check if we can use fast array to bin string conversion -// -// - apply(Array) can fail on Android 2.2 -// - apply(Uint8Array) can fail on iOS 5.1 Safary -// -var STR_APPLY_OK = true; -var STR_APPLY_UIA_OK = true; - -try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } -try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } - - -// Table with utf8 lengths (calculated by first byte of sequence) -// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, -// because max possible codepoint is 0x10ffff -var _utf8len = new utils.Buf8(256); -for (var q = 0; q < 256; q++) { - _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); -} -_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - -// convert string to array (typed, when possible) -exports.string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new utils.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; -}; - -// Helper (used in 2 places) -function buf2binstring(buf, len) { - // use fallback for big arrays to avoid stack overflow - if (len < 65537) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; -} - - -// Convert byte array to binary string -exports.buf2binstring = function (buf) { - return buf2binstring(buf, buf.length); -}; - - -// Convert binary string (typed, when possible) -exports.binstring2buf = function (str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; -}; - - -// convert array to string -exports.buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); -}; - - -// Calculate max possible position in utf8 buffer, -// that will not break sequence. If that's not possible -// - (very small limits) return max size as is. -// -// buf[] - utf8 bytes array -// max - length limit (mandatory); -exports.utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; -}; - -},{"./common":3}],5:[function(require,module,exports){ -'use strict'; - -// Note: adler32 takes 12% for level 0 and 2% for level 6. -// It doesn't worth to make additional optimizationa as in original. -// Small size is preferable. - -function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; -} - - -module.exports = adler32; - -},{}],6:[function(require,module,exports){ -'use strict'; - - -module.exports = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type -}; - -},{}],7:[function(require,module,exports){ -'use strict'; - -// Note: we can't get significant speed boost here. -// So write code to minimize size - no pregenerated tables -// and array tools dependencies. - - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - - -module.exports = crc32; - -},{}],8:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils/common'); -var trees = require('./trees'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var msg = require('./messages'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -var Z_NO_FLUSH = 0; -var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -//var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -//var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -//var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - - -/* compression levels */ -//var Z_NO_COMPRESSION = 0; -//var Z_BEST_SPEED = 1; -//var Z_BEST_COMPRESSION = 9; -var Z_DEFAULT_COMPRESSION = -1; - - -var Z_FILTERED = 1; -var Z_HUFFMAN_ONLY = 2; -var Z_RLE = 3; -var Z_FIXED = 4; -var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -//var Z_BINARY = 0; -//var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - - -/* The deflate compression method */ -var Z_DEFLATED = 8; - -/*============================================================================*/ - - -var MAX_MEM_LEVEL = 9; -/* Maximum value for memLevel in deflateInit2 */ -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_MEM_LEVEL = 8; - - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ -var LITERALS = 256; -/* number of literal bytes 0..255 */ -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ -var D_CODES = 30; -/* number of distance codes */ -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - -var PRESET_DICT = 0x20; - -var INIT_STATE = 42; -var EXTRA_STATE = 69; -var NAME_STATE = 73; -var COMMENT_STATE = 91; -var HCRC_STATE = 103; -var BUSY_STATE = 113; -var FINISH_STATE = 666; - -var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ -var BS_BLOCK_DONE = 2; /* block flush performed */ -var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ -var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - -var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - -function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; -} - -function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); -} - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - -/* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ -function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } -} - - -function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); -} - - -function put_byte(s, b) { - s.pending_buf[s.pending++] = b; -} - - -/* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ -function putShortMSB(s, b) { -// put_byte(s, (Byte)(b >> 8)); -// put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; -} - - -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ -function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; -} - - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ -function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; -} - - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; -//#if MIN_MATCH != 3 -// Call update_hash() MIN_MATCH-3 more times -//#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ -// if (s.high_water < s.window_size) { -// var curr = s.strstart + s.lookahead; -// var init = 0; -// -// if (s.high_water < curr) { -// /* Previous high water mark below current data -- zero WIN_INIT -// * bytes or up to end of window, whichever is less. -// */ -// init = s.window_size - curr; -// if (init > WIN_INIT) -// init = WIN_INIT; -// zmemzero(s->window + curr, (unsigned)init); -// s->high_water = curr + init; -// } -// else if (s->high_water < (ulg)curr + WIN_INIT) { -// /* High water mark at or above current data, but below current data -// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up -// * to end of window, whichever is less. -// */ -// init = (ulg)curr + WIN_INIT - s->high_water; -// if (init > s->window_size - s->high_water) -// init = s->window_size - s->high_water; -// zmemzero(s->window + s->high_water, (unsigned)init); -// s->high_water += init; -// } -// } -// -// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, -// "not enough room for search"); -} - -/* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ -function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); -// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || -// s.block_start >= s.w_size)) { -// throw new Error("slide too late"); -// } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); -// if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; -} - -/* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - -//#if MIN_MATCH != 3 -// Call UPDATE_HASH() MIN_MATCH-3 more times -//#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; -} - - -/* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ -function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ -function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; -} - -var configuration_table; - -configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ -]; - - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; -} - - -function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ - zero(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; - zero(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ -} - - -function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; -} - - -function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; -} - - -function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; -} - - -function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); -} - -function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -} - - -function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - -//#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } -//#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; -} - -function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; -} - - -/* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ -function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; -} - - -exports.deflateInit = deflateInit; -exports.deflateInit2 = deflateInit2; -exports.deflateReset = deflateReset; -exports.deflateResetKeep = deflateResetKeep; -exports.deflateSetHeader = deflateSetHeader; -exports.deflate = deflate; -exports.deflateEnd = deflateEnd; -exports.deflateSetDictionary = deflateSetDictionary; -exports.deflateInfo = 'pako deflate (from Nodeca project)'; - -/* Not implemented -exports.deflateBound = deflateBound; -exports.deflateCopy = deflateCopy; -exports.deflateParams = deflateParams; -exports.deflatePending = deflatePending; -exports.deflatePrime = deflatePrime; -exports.deflateTune = deflateTune; -*/ - -},{"../utils/common":3,"./adler32":5,"./crc32":7,"./messages":13,"./trees":14}],9:[function(require,module,exports){ -'use strict'; - - -function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; -} - -module.exports = GZheader; - -},{}],10:[function(require,module,exports){ -'use strict'; - -// See state defs from inflate.js -var BAD = 30; /* got a data error -- remain here until reset */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - -/* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ -module.exports = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ -//#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ -//#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); -//#ifdef INFLATE_STRICT - dmax = state.dmax; -//#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); -//#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } -//#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// if (len <= op - whave) { -// do { -// output[_out++] = 0; -// } while (--len); -// continue top; -// } -// len -= op - whave; -// do { -// output[_out++] = 0; -// } while (--op > whave); -// if (op === 0) { -// from = _out - dist; -// do { -// output[_out++] = output[from++]; -// } while (--len); -// continue top; -// } -//#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; -}; - -},{}],11:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var inflate_fast = require('./inffast'); -var inflate_table = require('./inftrees'); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -//var Z_NO_FLUSH = 0; -//var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -//var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - -/* The deflate compression method */ -var Z_DEFLATED = 8; - - -/* STATES ====================================================================*/ -/* ===========================================================================*/ - - -var HEAD = 1; /* i: waiting for magic header */ -var FLAGS = 2; /* i: waiting for method and flags (gzip) */ -var TIME = 3; /* i: waiting for modification time (gzip) */ -var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ -var EXLEN = 5; /* i: waiting for extra length (gzip) */ -var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ -var NAME = 7; /* i: waiting for end of file name (gzip) */ -var COMMENT = 8; /* i: waiting for end of comment (gzip) */ -var HCRC = 9; /* i: waiting for header crc (gzip) */ -var DICTID = 10; /* i: waiting for dictionary check value */ -var DICT = 11; /* waiting for inflateSetDictionary() call */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ -var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ -var STORED = 14; /* i: waiting for stored size (length and complement) */ -var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ -var COPY = 16; /* i/o: waiting for input or output to copy stored block */ -var TABLE = 17; /* i: waiting for dynamic block table lengths */ -var LENLENS = 18; /* i: waiting for code length code lengths */ -var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ -var LEN_ = 20; /* i: same as LEN below, but only first time in */ -var LEN = 21; /* i: waiting for length/lit/eob code */ -var LENEXT = 22; /* i: waiting for length extra bits */ -var DIST = 23; /* i: waiting for distance code */ -var DISTEXT = 24; /* i: waiting for distance extra bits */ -var MATCH = 25; /* o: waiting for output space to copy string */ -var LIT = 26; /* o: waiting for output space to write literal */ -var CHECK = 27; /* i: waiting for 32-bit check value */ -var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ -var DONE = 29; /* finished check, done -- remain here until reset */ -var BAD = 30; /* got a data error -- remain here until reset */ -var MEM = 31; /* got an inflate() memory error -- remain here until reset */ -var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - -/* ===========================================================================*/ - - - -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_WBITS = MAX_WBITS; - - -function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); -} - - -function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ - this.work = new utils.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ -} - -function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - -function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - -} - -function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); -} - -function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null/*Z_NULL*/; - } - return ret; -} - -function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); -} - - -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -var virgin = true; - -var lenfix, distfix; // We have no pointers in JS, so keep tables separate - -function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; -} - - -/* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ -function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new utils.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - utils.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - utils.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; -} - -function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR; - } - - state = strm.state; - if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more conveniend processing later - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - utils.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// -//#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD; - break; - } -//#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } -//#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -//#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// Trace((stderr, "inflate.c too far\n")); -// copy -= state.whave; -// if (copy > state.length) { copy = state.length; } -// if (copy > left) { copy = left; } -// left -= copy; -// state.length -= copy; -// do { -// output[put++] = 0; -// } while (--copy); -// if (state.length === 0) { state.mode = LEN; } -// break; -//#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' insdead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { - ret = Z_BUF_ERROR; - } - return ret; -} - -function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; -} - -function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK; -} - -function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; -} - -exports.inflateReset = inflateReset; -exports.inflateReset2 = inflateReset2; -exports.inflateResetKeep = inflateResetKeep; -exports.inflateInit = inflateInit; -exports.inflateInit2 = inflateInit2; -exports.inflate = inflate; -exports.inflateEnd = inflateEnd; -exports.inflateGetHeader = inflateGetHeader; -exports.inflateSetDictionary = inflateSetDictionary; -exports.inflateInfo = 'pako inflate (from Nodeca project)'; - -/* Not implemented -exports.inflateCopy = inflateCopy; -exports.inflateGetDictionary = inflateGetDictionary; -exports.inflateMark = inflateMark; -exports.inflatePrime = inflatePrime; -exports.inflateSync = inflateSync; -exports.inflateSyncPoint = inflateSyncPoint; -exports.inflateUndermine = inflateUndermine; -*/ - -},{"../utils/common":3,"./adler32":5,"./crc32":7,"./inffast":10,"./inftrees":12}],12:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); - -var MAXBITS = 15; -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 -]; - -var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 -]; - -var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 -]; - -var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 -]; - -module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) -{ - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; -// var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - var i = 0; - /* process all codes and make table entries */ - for (;;) { - i++; - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; -}; - -},{"../utils/common":3}],13:[function(require,module,exports){ -'use strict'; - -module.exports = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ -}; - -},{}],14:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -//var Z_FILTERED = 1; -//var Z_HUFFMAN_ONLY = 2; -//var Z_RLE = 3; -var Z_FIXED = 4; -//var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -var Z_BINARY = 0; -var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - -/*============================================================================*/ - - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - -// From zutil.h - -var STORED_BLOCK = 0; -var STATIC_TREES = 1; -var DYN_TREES = 2; -/* The three kinds of block type */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -/* The minimum and maximum match lengths */ - -// From deflate.h -/* =========================================================================== - * Internal compression state. - */ - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ - -var LITERALS = 256; -/* number of literal bytes 0..255 */ - -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ - -var D_CODES = 30; -/* number of distance codes */ - -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ - -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ - -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var Buf_size = 16; -/* size of bit buffer in bi_buf */ - - -/* =========================================================================== - * Constants - */ - -var MAX_BL_BITS = 7; -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -var END_BLOCK = 256; -/* end of block literal code */ - -var REP_3_6 = 16; -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -var REPZ_3_10 = 17; -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -var REPZ_11_138 = 18; -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -/* eslint-disable comma-spacing,array-bracket-spacing */ -var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - -var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - -var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - -var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; -/* eslint-enable comma-spacing,array-bracket-spacing */ - -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -// We pre-fill arrays with 0 to avoid uninitialized gaps - -var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - -// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 -var static_ltree = new Array((L_CODES + 2) * 2); -zero(static_ltree); -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -var static_dtree = new Array(D_CODES * 2); -zero(static_dtree); -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -var _dist_code = new Array(DIST_CODE_LEN); -zero(_dist_code); -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); -zero(_length_code); -/* length code for each normalized match length (0 == MIN_MATCH) */ - -var base_length = new Array(LENGTH_CODES); -zero(base_length); -/* First normalized length for each code (0 = MIN_MATCH) */ - -var base_dist = new Array(D_CODES); -zero(base_dist); -/* First normalized distance for each code (0 = distance of 1) */ - - -function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; -} - - -var static_l_desc; -var static_d_desc; -var static_bl_desc; - - -function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ -} - - - -function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; -} - - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -function put_short(s, w) { -// put_byte(s, (uch)((w) & 0xff)); -// put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; -} - - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } -} - - -function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); -} - - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; -} - - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } -} - - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -function gen_bitlen(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } -} - - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -function gen_codes(tree, max_code, bl_count) -// ct_data *tree; /* the tree to decorate */ -// int max_code; /* largest code with non zero frequency */ -// ushf *bl_count; /* number of codes at each bit length */ -{ - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; -} - - -/* =========================================================================== - * Initialize a new block. - */ -function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; -} - - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -function bi_windup(s) -{ - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -function copy_block(s, buf, len, header) -//DeflateState *s; -//charf *buf; /* the input data */ -//unsigned len; /* its length */ -//int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } -// while (len--) { -// put_byte(s, *buf++); -// } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); -} - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -function pqdownheap(s, tree, k) -// deflate_state *s; -// ct_data *tree; /* the tree to restore */ -// int k; /* node to move down */ -{ - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; -} - - -// inlined manually -// var SMALLEST = 1; - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -function compress_block(s, ltree, dtree) -// deflate_state *s; -// const ct_data *ltree; /* literal tree */ -// const ct_data *dtree; /* distance tree */ -{ - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); -} - - -/* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ -function build_tree(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); -} - - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -function scan_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -function send_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; -} - - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -function send_all_trees(s, lcodes, dcodes, blcodes) -// deflate_state *s; -// int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - - -var static_init_done = false; - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -function _tr_init(s) -{ - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); -} - - -/* =========================================================================== - * Send a stored block - */ -function _tr_stored_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ -} - - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ -function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); -} - - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -function _tr_flush_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block, or NULL if too old */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -function _tr_tally(s, dist, lc) -// deflate_state *s; -// unsigned dist; /* distance of matched string */ -// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility - -//#ifdef TRUNCATE_BLOCK -// /* Try to guess if it is profitable to stop the current block here */ -// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { -// /* Compute an upper bound for the compressed length */ -// out_length = s.last_lit*8; -// in_length = s.strstart - s.block_start; -// -// for (dcode = 0; dcode < D_CODES; dcode++) { -// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); -// } -// out_length >>>= 3; -// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", -// // s->last_lit, in_length, out_length, -// // 100L - out_length*100L/in_length)); -// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { -// return true; -// } -// } -//#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -exports._tr_init = _tr_init; -exports._tr_stored_block = _tr_stored_block; -exports._tr_flush_block = _tr_flush_block; -exports._tr_tally = _tr_tally; -exports._tr_align = _tr_align; - -},{"../utils/common":3}],15:[function(require,module,exports){ -'use strict'; - - -function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; -} - -module.exports = ZStream; - -},{}],"/":[function(require,module,exports){ -// Top level file is just a mixin of submodules & constants -'use strict'; - -var assign = require('./lib/utils/common').assign; - -var deflate = require('./lib/deflate'); -var inflate = require('./lib/inflate'); -var constants = require('./lib/zlib/constants'); - -var pako = {}; - -assign(pako, deflate, inflate, constants); - -module.exports = pako; - -},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/") -}); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pako/dist/pako.min.js b/skills/flight-finder/node_modules/pako/dist/pako.min.js deleted file mode 100644 index c2b86b6..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* pako 0.2.9 nodeca/pako */ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pako=t()}}(function(){return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(r)return r(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var d=a[s]={exports:{}};e[s][0].call(d.exports,function(t){var a=e[s][1][t];return n(a?a:t)},d,d.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=o.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==b)throw new Error(d[a]);if(e.header&&o.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===_.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=o.deflateSetDictionary(this.strm,n),a!==b)throw new Error(d[a]);this._dict_set=!0}}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}function s(t,e){return e=e||{},e.gzip=!0,n(t,e)}var o=t("./zlib/deflate"),l=t("./utils/common"),h=t("./utils/strings"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=Object.prototype.toString,u=0,c=4,b=0,g=1,m=2,w=-1,p=0,v=8;i.prototype.push=function(t,e){var a,i,n=this.strm,r=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:e===!0?c:u,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===_.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new l.Buf8(r),n.next_out=0,n.avail_out=r),a=o.deflate(n,i),a!==g&&a!==b)return this.onEnd(a),this.ended=!0,!1;0!==n.avail_out&&(0!==n.avail_in||i!==c&&i!==m)||("string"===this.options.to?this.onData(h.buf2binstring(l.shrinkBuf(n.output,n.next_out))):this.onData(l.shrinkBuf(n.output,n.next_out)))}while((n.avail_in>0||0===n.avail_out)&&a!==g);return i===c?(a=o.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===b):i!==m||(this.onEnd(b),n.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===b&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=i,a.deflate=n,a.deflateRaw=r,a.gzip=s},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=o.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var a=s.inflateInit2(this.strm,e.windowBits);if(a!==h.Z_OK)throw new Error(d[a]);this.header=new _,s.inflateGetHeader(this.strm,this.header)}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function r(t,e){return e=e||{},e.raw=!0,n(t,e)}var s=t("./zlib/inflate"),o=t("./utils/common"),l=t("./utils/strings"),h=t("./zlib/constants"),d=t("./zlib/messages"),f=t("./zlib/zstream"),_=t("./zlib/gzheader"),u=Object.prototype.toString;i.prototype.push=function(t,e){var a,i,n,r,d,f,_=this.strm,c=this.options.chunkSize,b=this.options.dictionary,g=!1;if(this.ended)return!1;i=e===~~e?e:e===!0?h.Z_FINISH:h.Z_NO_FLUSH,"string"==typeof t?_.input=l.binstring2buf(t):"[object ArrayBuffer]"===u.call(t)?_.input=new Uint8Array(t):_.input=t,_.next_in=0,_.avail_in=_.input.length;do{if(0===_.avail_out&&(_.output=new o.Buf8(c),_.next_out=0,_.avail_out=c),a=s.inflate(_,h.Z_NO_FLUSH),a===h.Z_NEED_DICT&&b&&(f="string"==typeof b?l.string2buf(b):"[object ArrayBuffer]"===u.call(b)?new Uint8Array(b):b,a=s.inflateSetDictionary(this.strm,f)),a===h.Z_BUF_ERROR&&g===!0&&(a=h.Z_OK,g=!1),a!==h.Z_STREAM_END&&a!==h.Z_OK)return this.onEnd(a),this.ended=!0,!1;_.next_out&&(0!==_.avail_out&&a!==h.Z_STREAM_END&&(0!==_.avail_in||i!==h.Z_FINISH&&i!==h.Z_SYNC_FLUSH)||("string"===this.options.to?(n=l.utf8border(_.output,_.next_out),r=_.next_out-n,d=l.buf2string(_.output,n),_.next_out=r,_.avail_out=c-r,r&&o.arraySet(_.output,_.output,n,r,0),this.onData(d)):this.onData(o.shrinkBuf(_.output,_.next_out)))),0===_.avail_in&&0===_.avail_out&&(g=!0)}while((_.avail_in>0||0===_.avail_out)&&a!==h.Z_STREAM_END);return a===h.Z_STREAM_END&&(i=h.Z_FINISH),i===h.Z_FINISH?(a=s.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===h.Z_OK):i!==h.Z_SYNC_FLUSH||(this.onEnd(h.Z_OK),_.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===h.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Inflate=i,a.inflate=n,a.inflateRaw=r,a.ungzip=n},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(t,e,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;a.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var i in a)a.hasOwnProperty(i)&&(t[i]=a[i])}}return t},a.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,a,i,n){if(e.subarray&&t.subarray)return void t.set(e.subarray(a,a+i),n);for(var r=0;r=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;o[254]=o[254]=1,a.string2buf=function(t){var e,a,i,r,s,o=t.length,l=0;for(r=0;r>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return i(t,t.length)},a.binstring2buf=function(t){for(var e=new n.Buf8(t.length),a=0,i=e.length;a4)h[n++]=65533,a+=s-1;else{for(r&=2===s?31:3===s?15:7;s>1&&a1?h[n++]=65533:r<65536?h[n++]=r:(r-=65536,h[n++]=55296|r>>10&1023,h[n++]=56320|1023&r)}return i(h,n)},a.utf8border=function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;a>=0&&128===(192&t[a]);)a--;return a<0?e:0===a?e:a+o[t[a]]>e?a:e}},{"./common":3}],5:[function(t,e,a){"use strict";function i(t,e,a,i){for(var n=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){s=a>2e3?2e3:a,a-=s;do n=n+e[i++]|0,r=r+n|0;while(--s);n%=65521,r%=65521}return n|r<<16|0}e.exports=i},{}],6:[function(t,e,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(t,e,a){"use strict";function i(){for(var t,e=[],a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}function n(t,e,a,i){var n=r,s=i+a;t^=-1;for(var o=i;o>>8^n[255&(t^e[o])];return t^-1}var r=i();e.exports=n},{}],8:[function(t,e,a){"use strict";function i(t,e){return t.msg=D[e],e}function n(t){return(t<<1)-(t>4?9:0)}function r(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(R.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function o(t,e){C._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function d(t,e,a,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,R.arraySet(e,t.input,t.next_in,n,a),1===t.state.wrap?t.adler=N(t.adler,e,n,a):2===t.state.wrap&&(t.adler=O(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)}function f(t,e){var a,i,n=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,h=t.window,d=t.w_mask,f=t.prev,_=t.strstart+dt,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do if(a=e,h[a+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do;while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&r<_);if(i=dt-(_-r),r=_-dt,i>s){if(t.match_start=e,s=i,i>=o)break;u=h[r+s-1],c=h[r+s]}}while((e=f[e&d])>l&&0!==--n);return s<=t.lookahead?s:t.lookahead}function _(t){var e,a,i,n,r,s=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-ft)){R.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,a=t.hash_size,e=a;do i=t.head[--e],t.head[e]=i>=s?i-s:0;while(--a);a=s,e=a;do i=t.prev[--e],t.prev[e]=i>=s?i-s:0;while(--a);n+=s}if(0===t.strm.avail_in)break;if(a=d(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=a,t.lookahead+t.insert>=ht)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(_(t),0===t.lookahead&&e===I)return vt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,o(t,!1),0===t.strm.avail_out))return vt;if(t.strstart-t.block_start>=t.w_size-ft&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.strstart>t.block_start&&(o(t,!1),0===t.strm.avail_out)?vt:vt}function c(t,e){for(var a,i;;){if(t.lookahead=ht&&(t.ins_h=(t.ins_h<=ht)if(i=C._tr_tally(t,t.strstart-t.match_start,t.match_length-ht),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ht){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=ht&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ht-1)),t.prev_length>=ht&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-ht,i=C._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ht),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=n&&(t.ins_h=(t.ins_h<=ht&&t.strstart>0&&(n=t.strstart-1,i=s[n],i===s[++n]&&i===s[++n]&&i===s[++n])){r=t.strstart+dt;do;while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ht?(a=C._tr_tally(t,1,t.match_length-ht),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function m(t,e){for(var a;;){if(0===t.lookahead&&(_(t),0===t.lookahead)){if(e===I)return vt;break}if(t.match_length=0,a=C._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(o(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===F?(o(t,!0),0===t.strm.avail_out?yt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?vt:kt}function w(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}function p(t){t.window_size=2*t.w_size,r(t.head),t.max_lazy_match=Z[t.level].max_lazy,t.good_match=Z[t.level].good_length,t.nice_match=Z[t.level].nice_length,t.max_chain_length=Z[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ht-1,t.match_available=0,t.ins_h=0}function v(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=V,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new R.Buf16(2*ot),this.dyn_dtree=new R.Buf16(2*(2*rt+1)),this.bl_tree=new R.Buf16(2*(2*st+1)),r(this.dyn_ltree),r(this.dyn_dtree),r(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new R.Buf16(lt+1),this.heap=new R.Buf16(2*nt+1),r(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new R.Buf16(2*nt+1),r(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Q,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ut:wt,t.adler=2===e.wrap?0:1,e.last_flush=I,C._tr_init(e),H):i(t,K)}function y(t){var e=k(t);return e===H&&p(t.state),e}function x(t,e){return t&&t.state?2!==t.state.wrap?K:(t.state.gzhead=e,H):K}function z(t,e,a,n,r,s){if(!t)return K;var o=1;if(e===Y&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>$||a!==V||n<8||n>15||e<0||e>9||s<0||s>W)return i(t,K);8===n&&(n=9);var l=new v;return t.state=l,l.strm=t,l.wrap=o,l.gzhead=null,l.w_bits=n,l.w_size=1<L||e<0)return t?i(t,K):K;if(o=t.state,!t.output||!t.input&&0!==t.avail_in||o.status===pt&&e!==F)return i(t,0===t.avail_out?P:K);if(o.strm=t,a=o.last_flush,o.last_flush=e,o.status===ut)if(2===o.wrap)t.adler=0,l(o,31),l(o,139),l(o,8),o.gzhead?(l(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),l(o,255&o.gzhead.time),l(o,o.gzhead.time>>8&255),l(o,o.gzhead.time>>16&255),l(o,o.gzhead.time>>24&255),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(l(o,255&o.gzhead.extra.length),l(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(t.adler=O(t.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=ct):(l(o,0),l(o,0),l(o,0),l(o,0),l(o,0),l(o,9===o.level?2:o.strategy>=G||o.level<2?4:0),l(o,zt),o.status=wt);else{var _=V+(o.w_bits-8<<4)<<8,u=-1;u=o.strategy>=G||o.level<2?0:o.level<6?1:6===o.level?2:3,_|=u<<6,0!==o.strstart&&(_|=_t),_+=31-_%31,o.status=wt,h(o,_),0!==o.strstart&&(h(o,t.adler>>>16),h(o,65535&t.adler)),t.adler=1}if(o.status===ct)if(o.gzhead.extra){for(d=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending!==o.pending_buf_size));)l(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=bt)}else o.status=bt;if(o.status===bt)if(o.gzhead.name){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindexd&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.gzindex=0,o.status=gt)}else o.status=gt;if(o.status===gt)if(o.gzhead.comment){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindexd&&(t.adler=O(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.status=mt)}else o.status=mt;if(o.status===mt&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&s(t),o.pending+2<=o.pending_buf_size&&(l(o,255&t.adler),l(o,t.adler>>8&255),t.adler=0,o.status=wt)):o.status=wt),0!==o.pending){if(s(t),0===t.avail_out)return o.last_flush=-1,H}else if(0===t.avail_in&&n(e)<=n(a)&&e!==F)return i(t,P);if(o.status===pt&&0!==t.avail_in)return i(t,P);if(0!==t.avail_in||0!==o.lookahead||e!==I&&o.status!==pt){var c=o.strategy===G?m(o,e):o.strategy===X?g(o,e):Z[o.level].func(o,e);if(c!==yt&&c!==xt||(o.status=pt),c===vt||c===yt)return 0===t.avail_out&&(o.last_flush=-1),H;if(c===kt&&(e===U?C._tr_align(o):e!==L&&(C._tr_stored_block(o,0,0,!1),e===T&&(r(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),s(t),0===t.avail_out))return o.last_flush=-1,H}return e!==F?H:o.wrap<=0?j:(2===o.wrap?(l(o,255&t.adler),l(o,t.adler>>8&255),l(o,t.adler>>16&255),l(o,t.adler>>24&255),l(o,255&t.total_in),l(o,t.total_in>>8&255),l(o,t.total_in>>16&255),l(o,t.total_in>>24&255)):(h(o,t.adler>>>16),h(o,65535&t.adler)),s(t),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?H:j)}function E(t){var e;return t&&t.state?(e=t.state.status,e!==ut&&e!==ct&&e!==bt&&e!==gt&&e!==mt&&e!==wt&&e!==pt?i(t,K):(t.state=null,e===wt?i(t,M):H)):K}function A(t,e){var a,i,n,s,o,l,h,d,f=e.length;if(!t||!t.state)return K;if(a=t.state,s=a.wrap,2===s||1===s&&a.status!==ut||a.lookahead)return K;for(1===s&&(t.adler=N(t.adler,e,f,0)),a.wrap=0,f>=a.w_size&&(0===s&&(r(a.head),a.strstart=0,a.block_start=0,a.insert=0),d=new R.Buf8(a.w_size),R.arraySet(d,e,f-a.w_size,a.w_size,0),e=d,f=a.w_size),o=t.avail_in,l=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,_(a);a.lookahead>=ht;){i=a.strstart,n=a.lookahead-(ht-1);do a.ins_h=(a.ins_h<>>24,b>>>=y,g-=y,y=k>>>16&255,0===y)A[o++]=65535&k;else{if(!(16&y)){if(0===(64&y)){k=m[(65535&k)+(b&(1<>>=y,g-=y),g<15&&(b+=E[r++]<>>24,b>>>=y,g-=y,y=k>>>16&255,!(16&y)){if(0===(64&y)){k=w[(65535&k)+(b&(1<d){t.msg="invalid distance too far back",a.mode=i;break t}if(b>>>=y,g-=y,y=o-l,z>y){if(y=z-y,y>_&&a.sane){t.msg="invalid distance too far back",a.mode=i;break t}if(B=0,S=c,0===u){if(B+=f-y,y2;)A[o++]=S[B++],A[o++]=S[B++],A[o++]=S[B++],x-=3;x&&(A[o++]=S[B++],x>1&&(A[o++]=S[B++]))}else{B=o-z;do A[o++]=A[B++],A[o++]=A[B++],A[o++]=A[B++],x-=3;while(x>2);x&&(A[o++]=A[B++],x>1&&(A[o++]=A[B++]))}break}}break}}while(r>3,r-=x,g-=x<<3,b&=(1<>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function n(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new w.Buf16(320),this.work=new w.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=T,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new w.Buf32(bt),e.distcode=e.distdyn=new w.Buf32(gt),e.sane=1,e.back=-1,Z):N}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,r(t)):N}function o(t,e){var a,i;return t&&t.state?(i=t.state,e<0?(a=0,e=-e):(a=(e>>4)+1,e<48&&(e&=15)),e&&(e<8||e>15)?N:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,s(t))):N}function l(t,e){var a,i;return t?(i=new n,t.state=i,i.window=null,a=o(t,e),a!==Z&&(t.state=null),a):N}function h(t){return l(t,wt)}function d(t){if(pt){var e;for(g=new w.Buf32(512),m=new w.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(y(z,t.lens,0,288,g,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;y(B,t.lens,0,32,m,0,t.work,{bits:5}),pt=!1}t.lencode=g,t.lenbits=9,t.distcode=m,t.distbits=5}function f(t,e,a,i){var n,r=t.state;return null===r.window&&(r.wsize=1<=r.wsize?(w.arraySet(r.window,e,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n=r.wsize-r.wnext,n>i&&(n=i),w.arraySet(r.window,e,a-i,n,r.wnext),i-=n,i?(w.arraySet(r.window,e,a-i,i,0),r.wnext=i,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=v(a.check,Et,2,0),_=0,u=0,a.mode=F;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&_)<<8)+(_>>8))%31){t.msg="incorrect header check",a.mode=_t;break}if((15&_)!==U){t.msg="unknown compression method",a.mode=_t;break}if(_>>>=4,u-=4,yt=(15&_)+8,0===a.wbits)a.wbits=yt;else if(yt>a.wbits){t.msg="invalid window size",a.mode=_t;break}a.dmax=1<>8&1),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=L;case L:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<>>8&255,Et[2]=_>>>16&255,Et[3]=_>>>24&255,a.check=v(a.check,Et,4,0)),_=0,u=0,a.mode=H;case H:for(;u<16;){if(0===l)break t;l--,_+=n[s++]<>8),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0,a.mode=j;case j:if(1024&a.flags){for(;u<16;){if(0===l)break t;l--,_+=n[s++]<>>8&255,a.check=v(a.check,Et,2,0)),_=0,u=0}else a.head&&(a.head.extra=null);a.mode=K;case K:if(1024&a.flags&&(g=a.length,g>l&&(g=l),g&&(a.head&&(yt=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),w.arraySet(a.head.extra,n,s,g,yt)),512&a.flags&&(a.check=v(a.check,n,g,s)),l-=g,s+=g,a.length-=g),a.length))break t;a.length=0,a.mode=M;case M:if(2048&a.flags){if(0===l)break t;g=0;do yt=n[s+g++],a.head&&yt&&a.length<65536&&(a.head.name+=String.fromCharCode(yt));while(yt&&g>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=X;break;case q:for(;u<32;){if(0===l)break t;l--,_+=n[s++]<>>=7&u,u-=7&u,a.mode=ht;break}for(;u<3;){if(0===l)break t;l--,_+=n[s++]<>>=1,u-=1,3&_){case 0:a.mode=J;break;case 1:if(d(a),a.mode=at,e===A){_>>>=2,u-=2;break t}break;case 2:a.mode=$;break;case 3:t.msg="invalid block type",a.mode=_t}_>>>=2,u-=2;break;case J:for(_>>>=7&u,u-=7&u;u<32;){if(0===l)break t;l--,_+=n[s++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=_t;break}if(a.length=65535&_,_=0,u=0,a.mode=Q,e===A)break t;case Q:a.mode=V;case V:if(g=a.length){if(g>l&&(g=l),g>h&&(g=h),0===g)break t;w.arraySet(r,n,s,g,o),l-=g,s+=g,h-=g,o+=g,a.length-=g;break}a.mode=X;break;case $:for(;u<14;){if(0===l)break t; -l--,_+=n[s++]<>>=5,u-=5,a.ndist=(31&_)+1,_>>>=5,u-=5,a.ncode=(15&_)+4,_>>>=4,u-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=_t;break}a.have=0,a.mode=tt;case tt:for(;a.have>>=3,u-=3}for(;a.have<19;)a.lens[At[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,zt={bits:a.lenbits},xt=y(x,a.lens,0,19,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid code lengths set",a.mode=_t;break}a.have=0,a.mode=et;case et:for(;a.have>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=gt,u-=gt,a.lens[a.have++]=wt;else{if(16===wt){for(Bt=gt+2;u>>=gt,u-=gt,0===a.have){t.msg="invalid bit length repeat",a.mode=_t;break}yt=a.lens[a.have-1],g=3+(3&_),_>>>=2,u-=2}else if(17===wt){for(Bt=gt+3;u>>=gt,u-=gt,yt=0,g=3+(7&_),_>>>=3,u-=3}else{for(Bt=gt+7;u>>=gt,u-=gt,yt=0,g=11+(127&_),_>>>=7,u-=7}if(a.have+g>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=_t;break}for(;g--;)a.lens[a.have++]=yt}}if(a.mode===_t)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=_t;break}if(a.lenbits=9,zt={bits:a.lenbits},xt=y(z,a.lens,0,a.nlen,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid literal/lengths set",a.mode=_t;break}if(a.distbits=6,a.distcode=a.distdyn,zt={bits:a.distbits},xt=y(B,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,zt),a.distbits=zt.bits,xt){t.msg="invalid distances set",a.mode=_t;break}if(a.mode=at,e===A)break t;case at:a.mode=it;case it:if(l>=6&&h>=258){t.next_out=o,t.avail_out=h,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=u,k(t,b),o=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,u=a.bits,a.mode===X&&(a.back=-1);break}for(a.back=0;St=a.lencode[_&(1<>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,a.length=wt,0===mt){a.mode=lt;break}if(32&mt){a.back=-1,a.mode=X;break}if(64&mt){t.msg="invalid literal/length code",a.mode=_t;break}a.extra=15&mt,a.mode=nt;case nt:if(a.extra){for(Bt=a.extra;u>>=a.extra,u-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=rt;case rt:for(;St=a.distcode[_&(1<>>24,mt=St>>>16&255,wt=65535&St,!(gt<=u);){if(0===l)break t;l--,_+=n[s++]<>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=u);){if(0===l)break t;l--,_+=n[s++]<>>=pt,u-=pt,a.back+=pt}if(_>>>=gt,u-=gt,a.back+=gt,64&mt){t.msg="invalid distance code",a.mode=_t;break}a.offset=wt,a.extra=15&mt,a.mode=st;case st:if(a.extra){for(Bt=a.extra;u>>=a.extra,u-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=_t;break}a.mode=ot;case ot:if(0===h)break t;if(g=b-h,a.offset>g){if(g=a.offset-g,g>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=_t;break}g>a.wnext?(g-=a.wnext,m=a.wsize-g):m=a.wnext-g,g>a.length&&(g=a.length),bt=a.window}else bt=r,m=o-a.offset,g=a.length;g>h&&(g=h),h-=g,a.length-=g;do r[o++]=bt[m++];while(--g);0===a.length&&(a.mode=it);break;case lt:if(0===h)break t;r[o++]=a.length,h--,a.mode=it;break;case ht:if(a.wrap){for(;u<32;){if(0===l)break t;l--,_|=n[s++]<=1&&0===j[N];N--);if(O>N&&(O=N),0===N)return b[g++]=20971520,b[g++]=20971520,w.bits=1,0;for(C=1;C0&&(t===o||1!==N))return-1;for(K[1]=0,Z=1;Zr||t===h&&T>s)return 1;for(var Y=0;;){Y++,B=Z-I,m[R]z?(S=M[P+m[R]],E=L[H+m[R]]):(S=96,E=0),p=1<>I)+v]=B<<24|S<<16|E|0;while(0!==v);for(p=1<>=1;if(0!==p?(F&=p-1,F+=p):F=0,R++,0===--j[Z]){if(Z===N)break;Z=e[a+m[R]]}if(Z>O&&(F&y)!==k){for(0===I&&(I=O),x+=C,D=Z-I,U=1<r||t===h&&T>s)return 1;k=F&y,b[k]=O<<24|D<<16|x-g|0}}return 0!==F&&(b[x+F]=Z-I<<24|64<<16|0),w.bits=O,0}},{"../utils/common":3}],13:[function(t,e,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(t,e,a){"use strict";function i(t){for(var e=t.length;--e>=0;)t[e]=0}function n(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function r(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?lt[t]:lt[256+(t>>>7)]}function o(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>W-a?(t.bi_buf|=e<>W-t.bi_valid,t.bi_valid+=a-W):(t.bi_buf|=e<>>=1,a<<=1;while(--e>0);return a>>>1}function f(t){16===t.bi_valid?(o(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function _(t,e){var a,i,n,r,s,o,l=e.dyn_tree,h=e.max_code,d=e.stat_desc.static_tree,f=e.stat_desc.has_stree,_=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,c=e.stat_desc.max_length,b=0;for(r=0;r<=X;r++)t.bl_count[r]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;ac&&(r=c,b++),l[2*i+1]=r,i>h||(t.bl_count[r]++,s=0,i>=u&&(s=_[i-u]),o=l[2*i],t.opt_len+=o*(r+s),f&&(t.static_len+=o*(d[2*i+1]+s)));if(0!==b){do{for(r=c-1;0===t.bl_count[r];)r--;t.bl_count[r]--,t.bl_count[r+1]+=2,t.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(i=t.bl_count[r];0!==i;)n=t.heap[--a],n>h||(l[2*n+1]!==r&&(t.opt_len+=(r-l[2*n+1])*l[2*n],l[2*n+1]=r),i--)}}function u(t,e,a){var i,n,r=new Array(X+1),s=0;for(i=1;i<=X;i++)r[i]=s=s+a[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=d(r[o]++,o))}}function c(){var t,e,a,i,r,s=new Array(X+1);for(a=0,i=0;i>=7;i8?o(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,i){g(t),i&&(o(t,a),o(t,~a)),N.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function w(t,e,a,i){var n=2*e,r=2*a;return t[n]>1;a>=1;a--)p(t,r,a);n=l;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],p(t,r,1),i=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=i,r[2*n]=r[2*a]+r[2*i],t.depth[n]=(t.depth[a]>=t.depth[i]?t.depth[a]:t.depth[i])+1,r[2*a+1]=r[2*i+1]=n,t.heap[1]=n++,p(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],_(t,e),u(r,h,t.bl_count)}function y(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=s,s=e[2*(i+1)+1],++o=3&&0===t.bl_tree[2*nt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,i){var n;for(l(t,e-257,5),l(t,a-1,5),l(t,i-4,4),n=0;n>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return D;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return I;for(e=32;e0?(t.strm.data_type===U&&(t.strm.data_type=S(t)),k(t,t.l_desc),k(t,t.d_desc),s=z(t),n=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=n&&(n=r)):n=r=a+5,a+4<=n&&e!==-1?A(t,e,a,i):t.strategy===O||r===n?(l(t,(F<<1)+(i?1:0),3),v(t,st,ot)):(l(t,(L<<1)+(i?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),b(t),i&&g(t)}function C(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(ht[a]+M+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var N=t("../utils/common"),O=4,D=0,I=1,U=2,T=0,F=1,L=2,H=3,j=258,K=29,M=256,P=M+1+K,Y=30,q=19,G=2*P+1,X=15,W=16,J=7,Q=256,V=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],at=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],it=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],nt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],rt=512,st=new Array(2*(P+2));i(st);var ot=new Array(2*Y);i(ot);var lt=new Array(rt);i(lt);var ht=new Array(j-H+1);i(ht);var dt=new Array(K);i(dt);var ft=new Array(Y);i(ft);var _t,ut,ct,bt=!1;a._tr_init=E,a._tr_stored_block=A,a._tr_flush_block=R,a._tr_tally=C,a._tr_align=Z},{"../utils/common":3}],15:[function(t,e,a){"use strict";function i(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=i},{}],"/":[function(t,e,a){"use strict";var i=t("./lib/utils/common").assign,n=t("./lib/deflate"),r=t("./lib/inflate"),s=t("./lib/zlib/constants"),o={};i(o,n,r,s),e.exports=o},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")}); diff --git a/skills/flight-finder/node_modules/pako/dist/pako_deflate.js b/skills/flight-finder/node_modules/pako/dist/pako_deflate.js deleted file mode 100644 index a5f9572..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako_deflate.js +++ /dev/null @@ -1,3879 +0,0 @@ -/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); -} -_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - -// convert string to array (typed, when possible) -exports.string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new utils.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; -}; - -// Helper (used in 2 places) -function buf2binstring(buf, len) { - // use fallback for big arrays to avoid stack overflow - if (len < 65537) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; -} - - -// Convert byte array to binary string -exports.buf2binstring = function (buf) { - return buf2binstring(buf, buf.length); -}; - - -// Convert binary string (typed, when possible) -exports.binstring2buf = function (str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; -}; - - -// convert array to string -exports.buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); -}; - - -// Calculate max possible position in utf8 buffer, -// that will not break sequence. If that's not possible -// - (very small limits) return max size as is. -// -// buf[] - utf8 bytes array -// max - length limit (mandatory); -exports.utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; -}; - -},{"./common":1}],3:[function(require,module,exports){ -'use strict'; - -// Note: adler32 takes 12% for level 0 and 2% for level 6. -// It doesn't worth to make additional optimizationa as in original. -// Small size is preferable. - -function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; -} - - -module.exports = adler32; - -},{}],4:[function(require,module,exports){ -'use strict'; - -// Note: we can't get significant speed boost here. -// So write code to minimize size - no pregenerated tables -// and array tools dependencies. - - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - - -module.exports = crc32; - -},{}],5:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils/common'); -var trees = require('./trees'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var msg = require('./messages'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -var Z_NO_FLUSH = 0; -var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -//var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -//var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -//var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - - -/* compression levels */ -//var Z_NO_COMPRESSION = 0; -//var Z_BEST_SPEED = 1; -//var Z_BEST_COMPRESSION = 9; -var Z_DEFAULT_COMPRESSION = -1; - - -var Z_FILTERED = 1; -var Z_HUFFMAN_ONLY = 2; -var Z_RLE = 3; -var Z_FIXED = 4; -var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -//var Z_BINARY = 0; -//var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - - -/* The deflate compression method */ -var Z_DEFLATED = 8; - -/*============================================================================*/ - - -var MAX_MEM_LEVEL = 9; -/* Maximum value for memLevel in deflateInit2 */ -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_MEM_LEVEL = 8; - - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ -var LITERALS = 256; -/* number of literal bytes 0..255 */ -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ -var D_CODES = 30; -/* number of distance codes */ -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - -var PRESET_DICT = 0x20; - -var INIT_STATE = 42; -var EXTRA_STATE = 69; -var NAME_STATE = 73; -var COMMENT_STATE = 91; -var HCRC_STATE = 103; -var BUSY_STATE = 113; -var FINISH_STATE = 666; - -var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ -var BS_BLOCK_DONE = 2; /* block flush performed */ -var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ -var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - -var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - -function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; -} - -function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); -} - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - -/* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ -function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } -} - - -function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); -} - - -function put_byte(s, b) { - s.pending_buf[s.pending++] = b; -} - - -/* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ -function putShortMSB(s, b) { -// put_byte(s, (Byte)(b >> 8)); -// put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; -} - - -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ -function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; -} - - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ -function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; -} - - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; -//#if MIN_MATCH != 3 -// Call update_hash() MIN_MATCH-3 more times -//#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ -// if (s.high_water < s.window_size) { -// var curr = s.strstart + s.lookahead; -// var init = 0; -// -// if (s.high_water < curr) { -// /* Previous high water mark below current data -- zero WIN_INIT -// * bytes or up to end of window, whichever is less. -// */ -// init = s.window_size - curr; -// if (init > WIN_INIT) -// init = WIN_INIT; -// zmemzero(s->window + curr, (unsigned)init); -// s->high_water = curr + init; -// } -// else if (s->high_water < (ulg)curr + WIN_INIT) { -// /* High water mark at or above current data, but below current data -// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up -// * to end of window, whichever is less. -// */ -// init = (ulg)curr + WIN_INIT - s->high_water; -// if (init > s->window_size - s->high_water) -// init = s->window_size - s->high_water; -// zmemzero(s->window + s->high_water, (unsigned)init); -// s->high_water += init; -// } -// } -// -// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, -// "not enough room for search"); -} - -/* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ -function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); -// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || -// s.block_start >= s.w_size)) { -// throw new Error("slide too late"); -// } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); -// if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; -} - -/* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - -//#if MIN_MATCH != 3 -// Call UPDATE_HASH() MIN_MATCH-3 more times -//#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; -} - - -/* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ -function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ -function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; -} - -var configuration_table; - -configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ -]; - - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; -} - - -function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ - zero(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; - zero(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ -} - - -function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; -} - - -function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; -} - - -function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; -} - - -function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); -} - -function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -} - - -function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - -//#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } -//#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; -} - -function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; -} - - -/* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ -function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; -} - - -exports.deflateInit = deflateInit; -exports.deflateInit2 = deflateInit2; -exports.deflateReset = deflateReset; -exports.deflateResetKeep = deflateResetKeep; -exports.deflateSetHeader = deflateSetHeader; -exports.deflate = deflate; -exports.deflateEnd = deflateEnd; -exports.deflateSetDictionary = deflateSetDictionary; -exports.deflateInfo = 'pako deflate (from Nodeca project)'; - -/* Not implemented -exports.deflateBound = deflateBound; -exports.deflateCopy = deflateCopy; -exports.deflateParams = deflateParams; -exports.deflatePending = deflatePending; -exports.deflatePrime = deflatePrime; -exports.deflateTune = deflateTune; -*/ - -},{"../utils/common":1,"./adler32":3,"./crc32":4,"./messages":6,"./trees":7}],6:[function(require,module,exports){ -'use strict'; - -module.exports = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ -}; - -},{}],7:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -//var Z_FILTERED = 1; -//var Z_HUFFMAN_ONLY = 2; -//var Z_RLE = 3; -var Z_FIXED = 4; -//var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -var Z_BINARY = 0; -var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - -/*============================================================================*/ - - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - -// From zutil.h - -var STORED_BLOCK = 0; -var STATIC_TREES = 1; -var DYN_TREES = 2; -/* The three kinds of block type */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -/* The minimum and maximum match lengths */ - -// From deflate.h -/* =========================================================================== - * Internal compression state. - */ - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ - -var LITERALS = 256; -/* number of literal bytes 0..255 */ - -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ - -var D_CODES = 30; -/* number of distance codes */ - -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ - -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ - -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var Buf_size = 16; -/* size of bit buffer in bi_buf */ - - -/* =========================================================================== - * Constants - */ - -var MAX_BL_BITS = 7; -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -var END_BLOCK = 256; -/* end of block literal code */ - -var REP_3_6 = 16; -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -var REPZ_3_10 = 17; -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -var REPZ_11_138 = 18; -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -/* eslint-disable comma-spacing,array-bracket-spacing */ -var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - -var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - -var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - -var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; -/* eslint-enable comma-spacing,array-bracket-spacing */ - -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -// We pre-fill arrays with 0 to avoid uninitialized gaps - -var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - -// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 -var static_ltree = new Array((L_CODES + 2) * 2); -zero(static_ltree); -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -var static_dtree = new Array(D_CODES * 2); -zero(static_dtree); -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -var _dist_code = new Array(DIST_CODE_LEN); -zero(_dist_code); -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); -zero(_length_code); -/* length code for each normalized match length (0 == MIN_MATCH) */ - -var base_length = new Array(LENGTH_CODES); -zero(base_length); -/* First normalized length for each code (0 = MIN_MATCH) */ - -var base_dist = new Array(D_CODES); -zero(base_dist); -/* First normalized distance for each code (0 = distance of 1) */ - - -function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; -} - - -var static_l_desc; -var static_d_desc; -var static_bl_desc; - - -function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ -} - - - -function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; -} - - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -function put_short(s, w) { -// put_byte(s, (uch)((w) & 0xff)); -// put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; -} - - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } -} - - -function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); -} - - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; -} - - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } -} - - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -function gen_bitlen(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } -} - - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -function gen_codes(tree, max_code, bl_count) -// ct_data *tree; /* the tree to decorate */ -// int max_code; /* largest code with non zero frequency */ -// ushf *bl_count; /* number of codes at each bit length */ -{ - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; -} - - -/* =========================================================================== - * Initialize a new block. - */ -function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; -} - - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -function bi_windup(s) -{ - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -function copy_block(s, buf, len, header) -//DeflateState *s; -//charf *buf; /* the input data */ -//unsigned len; /* its length */ -//int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } -// while (len--) { -// put_byte(s, *buf++); -// } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); -} - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -function pqdownheap(s, tree, k) -// deflate_state *s; -// ct_data *tree; /* the tree to restore */ -// int k; /* node to move down */ -{ - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; -} - - -// inlined manually -// var SMALLEST = 1; - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -function compress_block(s, ltree, dtree) -// deflate_state *s; -// const ct_data *ltree; /* literal tree */ -// const ct_data *dtree; /* distance tree */ -{ - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); -} - - -/* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ -function build_tree(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); -} - - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -function scan_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -function send_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; -} - - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -function send_all_trees(s, lcodes, dcodes, blcodes) -// deflate_state *s; -// int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - - -var static_init_done = false; - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -function _tr_init(s) -{ - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); -} - - -/* =========================================================================== - * Send a stored block - */ -function _tr_stored_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ -} - - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ -function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); -} - - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -function _tr_flush_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block, or NULL if too old */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -function _tr_tally(s, dist, lc) -// deflate_state *s; -// unsigned dist; /* distance of matched string */ -// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility - -//#ifdef TRUNCATE_BLOCK -// /* Try to guess if it is profitable to stop the current block here */ -// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { -// /* Compute an upper bound for the compressed length */ -// out_length = s.last_lit*8; -// in_length = s.strstart - s.block_start; -// -// for (dcode = 0; dcode < D_CODES; dcode++) { -// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); -// } -// out_length >>>= 3; -// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", -// // s->last_lit, in_length, out_length, -// // 100L - out_length*100L/in_length)); -// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { -// return true; -// } -// } -//#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -exports._tr_init = _tr_init; -exports._tr_stored_block = _tr_stored_block; -exports._tr_flush_block = _tr_flush_block; -exports._tr_tally = _tr_tally; -exports._tr_align = _tr_align; - -},{"../utils/common":1}],8:[function(require,module,exports){ -'use strict'; - - -function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; -} - -module.exports = ZStream; - -},{}],"/lib/deflate.js":[function(require,module,exports){ -'use strict'; - - -var zlib_deflate = require('./zlib/deflate'); -var utils = require('./utils/common'); -var strings = require('./utils/strings'); -var msg = require('./zlib/messages'); -var ZStream = require('./zlib/zstream'); - -var toString = Object.prototype.toString; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - -var Z_NO_FLUSH = 0; -var Z_FINISH = 4; - -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_SYNC_FLUSH = 2; - -var Z_DEFAULT_COMPRESSION = -1; - -var Z_DEFAULT_STRATEGY = 0; - -var Z_DEFLATED = 8; - -/* ===========================================================================*/ - - -/** - * class Deflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[deflate]], - * [[deflateRaw]] and [[gzip]]. - **/ - -/* internal - * Deflate.chunks -> Array - * - * Chunks of output data, if [[Deflate#onData]] not overriden. - **/ - -/** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - -/** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - -/** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ -function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = utils.assign({ - level: Z_DEFAULT_COMPRESSION, - method: Z_DEFLATED, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY, - to: '' - }, options || {}); - - var opt = this.options; - - if (opt.raw && (opt.windowBits > 0)) { - opt.windowBits = -opt.windowBits; - } - - else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_deflate.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - if (opt.header) { - zlib_deflate.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === 'string') { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = zlib_deflate.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - this._dict_set = true; - } -} - -/** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { return false; } - - _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ - - if (status !== Z_STREAM_END && status !== Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { - if (this.options.to === 'string') { - this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); - - // Finalize on the last chunk. - if (_mode === Z_FINISH) { - status = zlib_deflate.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ -function deflate(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { throw deflator.msg; } - - return deflator.result; -} - - -/** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate(input, options); -} - - -/** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ -function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate(input, options); -} - - -exports.Deflate = Deflate; -exports.deflate = deflate; -exports.deflateRaw = deflateRaw; -exports.gzip = gzip; - -},{"./utils/common":1,"./utils/strings":2,"./zlib/deflate":5,"./zlib/messages":6,"./zlib/zstream":8}]},{},[])("/lib/deflate.js") -}); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pako/dist/pako_deflate.min.js b/skills/flight-finder/node_modules/pako/dist/pako_deflate.min.js deleted file mode 100644 index b307f85..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako_deflate.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* pako 0.2.9 nodeca/pako */ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pako=t()}}(function(){return function t(e,a,n){function r(s,h){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!h&&l)return l(s,!0);if(i)return i(s,!0);var o=new Error("Cannot find module '"+s+"'");throw o.code="MODULE_NOT_FOUND",o}var _=a[s]={exports:{}};e[s][0].call(_.exports,function(t){var a=e[s][1][t];return r(a?a:t)},_,_.exports,t,e,a,n)}return a[s].exports}for(var i="function"==typeof require&&require,s=0;s=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;h[254]=h[254]=1,a.string2buf=function(t){var e,a,n,i,s,h=t.length,l=0;for(i=0;i>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return n(t,t.length)},a.binstring2buf=function(t){for(var e=new r.Buf8(t.length),a=0,n=e.length;a4)o[r++]=65533,a+=s-1;else{for(i&=2===s?31:3===s?15:7;s>1&&a1?o[r++]=65533:i<65536?o[r++]=i:(i-=65536,o[r++]=55296|i>>10&1023,o[r++]=56320|1023&i)}return n(o,r)},a.utf8border=function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;a>=0&&128===(192&t[a]);)a--;return a<0?e:0===a?e:a+h[t[a]]>e?a:e}},{"./common":1}],3:[function(t,e,a){"use strict";function n(t,e,a,n){for(var r=65535&t|0,i=t>>>16&65535|0,s=0;0!==a;){s=a>2e3?2e3:a,a-=s;do r=r+e[n++]|0,i=i+r|0;while(--s);r%=65521,i%=65521}return r|i<<16|0}e.exports=n},{}],4:[function(t,e,a){"use strict";function n(){for(var t,e=[],a=0;a<256;a++){t=a;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}function r(t,e,a,n){var r=i,s=n+a;t^=-1;for(var h=n;h>>8^r[255&(t^e[h])];return t^-1}var i=n();e.exports=r},{}],5:[function(t,e,a){"use strict";function n(t,e){return t.msg=O[e],e}function r(t){return(t<<1)-(t>4?9:0)}function i(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(j.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function h(t,e){U._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function o(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function _(t,e,a,n){var r=t.avail_in;return r>n&&(r=n),0===r?0:(t.avail_in-=r,j.arraySet(e,t.input,t.next_in,r,a),1===t.state.wrap?t.adler=D(t.adler,e,r,a):2===t.state.wrap&&(t.adler=I(t.adler,e,r,a)),t.next_in+=r,t.total_in+=r,r)}function d(t,e){var a,n,r=t.max_chain_length,i=t.strstart,s=t.prev_length,h=t.nice_match,l=t.strstart>t.w_size-dt?t.strstart-(t.w_size-dt):0,o=t.window,_=t.w_mask,d=t.prev,u=t.strstart+_t,f=o[i+s-1],c=o[i+s];t.prev_length>=t.good_match&&(r>>=2),h>t.lookahead&&(h=t.lookahead);do if(a=e,o[a+s]===c&&o[a+s-1]===f&&o[a]===o[i]&&o[++a]===o[i+1]){i+=2,a++;do;while(o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&o[++i]===o[++a]&&is){if(t.match_start=e,s=n,n>=h)break;f=o[i+s-1],c=o[i+s]}}while((e=d[e&_])>l&&0!==--r);return s<=t.lookahead?s:t.lookahead}function u(t){var e,a,n,r,i,s=t.w_size;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-dt)){j.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,a=t.hash_size,e=a;do n=t.head[--e],t.head[e]=n>=s?n-s:0;while(--a);a=s,e=a;do n=t.prev[--e],t.prev[e]=n>=s?n-s:0;while(--a);r+=s}if(0===t.strm.avail_in)break;if(a=_(t.strm,t.window,t.strstart+t.lookahead,r),t.lookahead+=a,t.lookahead+t.insert>=ot)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(u(t),0===t.lookahead&&e===q)return vt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+a;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,h(t,!1),0===t.strm.avail_out))return vt;if(t.strstart-t.block_start>=t.w_size-dt&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.strstart>t.block_start&&(h(t,!1),0===t.strm.avail_out)?vt:vt}function c(t,e){for(var a,n;;){if(t.lookahead=ot&&(t.ins_h=(t.ins_h<=ot)if(n=U._tr_tally(t,t.strstart-t.match_start,t.match_length-ot),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ot){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=ot&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ot-1)),t.prev_length>=ot&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-ot,n=U._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ot),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=r&&(t.ins_h=(t.ins_h<=ot&&t.strstart>0&&(r=t.strstart-1,n=s[r],n===s[++r]&&n===s[++r]&&n===s[++r])){i=t.strstart+_t;do;while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=ot?(a=U._tr_tally(t,1,t.match_length-ot),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=U._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.last_lit&&(h(t,!1),0===t.strm.avail_out)?vt:yt}function m(t,e){for(var a;;){if(0===t.lookahead&&(u(t),0===t.lookahead)){if(e===q)return vt;break}if(t.match_length=0,a=U._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(h(t,!1),0===t.strm.avail_out))return vt}return t.insert=0,e===N?(h(t,!0),0===t.strm.avail_out?kt:zt):t.last_lit&&(h(t,!1),0===t.strm.avail_out)?vt:yt}function b(t,e,a,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=n,this.func=r}function w(t){t.window_size=2*t.w_size,i(t.head),t.max_lazy_match=E[t.level].max_lazy,t.good_match=E[t.level].good_length,t.nice_match=E[t.level].nice_length,t.max_chain_length=E[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ot-1,t.match_available=0,t.ins_h=0}function v(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Z,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new j.Buf16(2*ht),this.dyn_dtree=new j.Buf16(2*(2*it+1)),this.bl_tree=new j.Buf16(2*(2*st+1)),i(this.dyn_ltree),i(this.dyn_dtree),i(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new j.Buf16(lt+1),this.heap=new j.Buf16(2*rt+1),i(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new j.Buf16(2*rt+1),i(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function y(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Y,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?ft:bt,t.adler=2===e.wrap?0:1,e.last_flush=q,U._tr_init(e),H):n(t,K)}function k(t){var e=y(t);return e===H&&w(t.state),e}function z(t,e){return t&&t.state?2!==t.state.wrap?K:(t.state.gzhead=e,H):K}function x(t,e,a,r,i,s){if(!t)return K;var h=1;if(e===G&&(e=6),r<0?(h=0,r=-r):r>15&&(h=2,r-=16),i<1||i>$||a!==Z||r<8||r>15||e<0||e>9||s<0||s>W)return n(t,K);8===r&&(r=9);var l=new v;return t.state=l,l.strm=t,l.wrap=h,l.gzhead=null,l.w_bits=r,l.w_size=1<R||e<0)return t?n(t,K):K;if(h=t.state,!t.output||!t.input&&0!==t.avail_in||h.status===wt&&e!==N)return n(t,0===t.avail_out?P:K);if(h.strm=t,a=h.last_flush,h.last_flush=e,h.status===ft)if(2===h.wrap)t.adler=0,l(h,31),l(h,139),l(h,8),h.gzhead?(l(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),l(h,255&h.gzhead.time),l(h,h.gzhead.time>>8&255),l(h,h.gzhead.time>>16&255),l(h,h.gzhead.time>>24&255),l(h,9===h.level?2:h.strategy>=Q||h.level<2?4:0),l(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(l(h,255&h.gzhead.extra.length),l(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(t.adler=I(t.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=ct):(l(h,0),l(h,0),l(h,0),l(h,0),l(h,0),l(h,9===h.level?2:h.strategy>=Q||h.level<2?4:0),l(h,xt),h.status=bt);else{var u=Z+(h.w_bits-8<<4)<<8,f=-1;f=h.strategy>=Q||h.level<2?0:h.level<6?1:6===h.level?2:3,u|=f<<6,0!==h.strstart&&(u|=ut),u+=31-u%31,h.status=bt,o(h,u),0!==h.strstart&&(o(h,t.adler>>>16),o(h,65535&t.adler)),t.adler=1}if(h.status===ct)if(h.gzhead.extra){for(_=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending!==h.pending_buf_size));)l(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=pt)}else h.status=pt;if(h.status===pt)if(h.gzhead.name){_=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending===h.pending_buf_size)){d=1;break}d=h.gzindex_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),0===d&&(h.gzindex=0,h.status=gt)}else h.status=gt;if(h.status===gt)if(h.gzhead.comment){_=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),s(t),_=h.pending,h.pending===h.pending_buf_size)){d=1;break}d=h.gzindex_&&(t.adler=I(t.adler,h.pending_buf,h.pending-_,_)),0===d&&(h.status=mt)}else h.status=mt;if(h.status===mt&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&s(t),h.pending+2<=h.pending_buf_size&&(l(h,255&t.adler),l(h,t.adler>>8&255),t.adler=0,h.status=bt)):h.status=bt),0!==h.pending){if(s(t),0===t.avail_out)return h.last_flush=-1,H}else if(0===t.avail_in&&r(e)<=r(a)&&e!==N)return n(t,P);if(h.status===wt&&0!==t.avail_in)return n(t,P);if(0!==t.avail_in||0!==h.lookahead||e!==q&&h.status!==wt){var c=h.strategy===Q?m(h,e):h.strategy===V?g(h,e):E[h.level].func(h,e);if(c!==kt&&c!==zt||(h.status=wt),c===vt||c===kt)return 0===t.avail_out&&(h.last_flush=-1),H;if(c===yt&&(e===T?U._tr_align(h):e!==R&&(U._tr_stored_block(h,0,0,!1),e===L&&(i(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),s(t),0===t.avail_out))return h.last_flush=-1,H}return e!==N?H:h.wrap<=0?F:(2===h.wrap?(l(h,255&t.adler),l(h,t.adler>>8&255),l(h,t.adler>>16&255),l(h,t.adler>>24&255),l(h,255&t.total_in),l(h,t.total_in>>8&255),l(h,t.total_in>>16&255),l(h,t.total_in>>24&255)):(o(h,t.adler>>>16),o(h,65535&t.adler)),s(t),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?H:F)}function C(t){var e;return t&&t.state?(e=t.state.status,e!==ft&&e!==ct&&e!==pt&&e!==gt&&e!==mt&&e!==bt&&e!==wt?n(t,K):(t.state=null,e===bt?n(t,M):H)):K}function S(t,e){var a,n,r,s,h,l,o,_,d=e.length;if(!t||!t.state)return K;if(a=t.state,s=a.wrap,2===s||1===s&&a.status!==ft||a.lookahead)return K;for(1===s&&(t.adler=D(t.adler,e,d,0)),a.wrap=0,d>=a.w_size&&(0===s&&(i(a.head),a.strstart=0,a.block_start=0,a.insert=0),_=new j.Buf8(a.w_size),j.arraySet(_,e,d-a.w_size,a.w_size,0),e=_,d=a.w_size),h=t.avail_in,l=t.next_in,o=t.input,t.avail_in=d,t.next_in=0,t.input=e,u(a);a.lookahead>=ot;){n=a.strstart,r=a.lookahead-(ot-1);do a.ins_h=(a.ins_h<=0;)t[e]=0}function r(t,e,a,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function i(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?lt[t]:lt[256+(t>>>7)]}function h(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>W-a?(t.bi_buf|=e<>W-t.bi_valid,t.bi_valid+=a-W):(t.bi_buf|=e<>>=1,a<<=1;while(--e>0);return a>>>1}function d(t){16===t.bi_valid?(h(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function u(t,e){var a,n,r,i,s,h,l=e.dyn_tree,o=e.max_code,_=e.stat_desc.static_tree,d=e.stat_desc.has_stree,u=e.stat_desc.extra_bits,f=e.stat_desc.extra_base,c=e.stat_desc.max_length,p=0;for(i=0;i<=V;i++)t.bl_count[i]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;ac&&(i=c,p++),l[2*n+1]=i,n>o||(t.bl_count[i]++,s=0,n>=f&&(s=u[n-f]),h=l[2*n],t.opt_len+=h*(i+s),d&&(t.static_len+=h*(_[2*n+1]+s)));if(0!==p){do{for(i=c-1;0===t.bl_count[i];)i--;t.bl_count[i]--,t.bl_count[i+1]+=2,t.bl_count[c]--,p-=2}while(p>0);for(i=c;0!==i;i--)for(n=t.bl_count[i];0!==n;)r=t.heap[--a],r>o||(l[2*r+1]!==i&&(t.opt_len+=(i-l[2*r+1])*l[2*r],l[2*r+1]=i),n--)}}function f(t,e,a){var n,r,i=new Array(V+1),s=0;for(n=1;n<=V;n++)i[n]=s=s+a[n-1]<<1;for(r=0;r<=e;r++){var h=t[2*r+1];0!==h&&(t[2*r]=_(i[h]++,h))}}function c(){var t,e,a,n,i,s=new Array(V+1);for(a=0,n=0;n>=7;n8?h(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,n){g(t),n&&(h(t,a),h(t,~a)),D.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function b(t,e,a,n){var r=2*e,i=2*a;return t[r]>1;a>=1;a--)w(t,i,a);r=l;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],w(t,i,1),n=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=n,i[2*r]=i[2*a]+i[2*n],t.depth[r]=(t.depth[a]>=t.depth[n]?t.depth[a]:t.depth[n])+1,i[2*a+1]=i[2*n+1]=r,t.heap[1]=r++,w(t,i,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],u(t,e),f(i,o,t.bl_count)}function k(t,e,a){var n,r,i=-1,s=e[1],h=0,l=7,o=4;for(0===s&&(l=138,o=3),e[2*(a+1)+1]=65535,n=0;n<=a;n++)r=s,s=e[2*(n+1)+1],++h=3&&0===t.bl_tree[2*rt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,n){var r;for(l(t,e-257,5),l(t,a-1,5),l(t,n-4,4),r=0;r>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return O;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return q;for(e=32;e0?(t.strm.data_type===T&&(t.strm.data_type=A(t)),y(t,t.l_desc),y(t,t.d_desc),s=x(t),r=t.opt_len+3+7>>>3,i=t.static_len+3+7>>>3,i<=r&&(r=i)):r=i=a+5,a+4<=r&&e!==-1?S(t,e,a,n):t.strategy===I||i===r?(l(t,(N<<1)+(n?1:0),3),v(t,st,ht)):(l(t,(R<<1)+(n?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),p(t),n&&g(t)}function U(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(ot[a]+M+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var D=t("../utils/common"),I=4,O=0,q=1,T=2,L=0,N=1,R=2,H=3,F=258,K=29,M=256,P=M+1+K,G=30,J=19,Q=2*P+1,V=15,W=16,X=7,Y=256,Z=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],at=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],nt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],rt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],it=512,st=new Array(2*(P+2));n(st);var ht=new Array(2*G);n(ht);var lt=new Array(it);n(lt);var ot=new Array(F-H+1);n(ot);var _t=new Array(K);n(_t);var dt=new Array(G);n(dt);var ut,ft,ct,pt=!1;a._tr_init=C,a._tr_stored_block=S,a._tr_flush_block=j,a._tr_tally=U,a._tr_align=E},{"../utils/common":1}],8:[function(t,e,a){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=n},{}],"/lib/deflate.js":[function(t,e,a){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.options=l.assign({level:b,method:v,chunkSize:16384,windowBits:15,memLevel:8,strategy:w,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var a=h.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==p)throw new Error(_[a]);if(e.header&&h.deflateSetHeader(this.strm,e.header),e.dictionary){var r;if(r="string"==typeof e.dictionary?o.string2buf(e.dictionary):"[object ArrayBuffer]"===u.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=h.deflateSetDictionary(this.strm,r),a!==p)throw new Error(_[a]);this._dict_set=!0}}function r(t,e){var a=new n(e);if(a.push(t,!0),a.err)throw a.msg;return a.result}function i(t,e){return e=e||{},e.raw=!0,r(t,e)}function s(t,e){return e=e||{},e.gzip=!0,r(t,e)}var h=t("./zlib/deflate"),l=t("./utils/common"),o=t("./utils/strings"),_=t("./zlib/messages"),d=t("./zlib/zstream"),u=Object.prototype.toString,f=0,c=4,p=0,g=1,m=2,b=-1,w=0,v=8;n.prototype.push=function(t,e){var a,n,r=this.strm,i=this.options.chunkSize;if(this.ended)return!1;n=e===~~e?e:e===!0?c:f,"string"==typeof t?r.input=o.string2buf(t):"[object ArrayBuffer]"===u.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new l.Buf8(i),r.next_out=0,r.avail_out=i),a=h.deflate(r,n),a!==g&&a!==p)return this.onEnd(a),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||n!==c&&n!==m)||("string"===this.options.to?this.onData(o.buf2binstring(l.shrinkBuf(r.output,r.next_out))):this.onData(l.shrinkBuf(r.output,r.next_out)))}while((r.avail_in>0||0===r.avail_out)&&a!==g);return n===c?(a=h.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===p):n!==m||(this.onEnd(p),r.avail_out=0,!0)},n.prototype.onData=function(t){this.chunks.push(t)},n.prototype.onEnd=function(t){t===p&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=l.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=n,a.deflate=r,a.deflateRaw=i,a.gzip=s},{"./utils/common":1,"./utils/strings":2,"./zlib/deflate":5,"./zlib/messages":6,"./zlib/zstream":8}]},{},[])("/lib/deflate.js")}); diff --git a/skills/flight-finder/node_modules/pako/dist/pako_inflate.js b/skills/flight-finder/node_modules/pako/dist/pako_inflate.js deleted file mode 100644 index c3e2e0e..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako_inflate.js +++ /dev/null @@ -1,3127 +0,0 @@ -/* pako 0.2.9 nodeca/pako */(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); -} -_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - -// convert string to array (typed, when possible) -exports.string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new utils.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; -}; - -// Helper (used in 2 places) -function buf2binstring(buf, len) { - // use fallback for big arrays to avoid stack overflow - if (len < 65537) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; -} - - -// Convert byte array to binary string -exports.buf2binstring = function (buf) { - return buf2binstring(buf, buf.length); -}; - - -// Convert binary string (typed, when possible) -exports.binstring2buf = function (str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; -}; - - -// convert array to string -exports.buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); -}; - - -// Calculate max possible position in utf8 buffer, -// that will not break sequence. If that's not possible -// - (very small limits) return max size as is. -// -// buf[] - utf8 bytes array -// max - length limit (mandatory); -exports.utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; -}; - -},{"./common":1}],3:[function(require,module,exports){ -'use strict'; - -// Note: adler32 takes 12% for level 0 and 2% for level 6. -// It doesn't worth to make additional optimizationa as in original. -// Small size is preferable. - -function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; -} - - -module.exports = adler32; - -},{}],4:[function(require,module,exports){ -'use strict'; - - -module.exports = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type -}; - -},{}],5:[function(require,module,exports){ -'use strict'; - -// Note: we can't get significant speed boost here. -// So write code to minimize size - no pregenerated tables -// and array tools dependencies. - - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - - -module.exports = crc32; - -},{}],6:[function(require,module,exports){ -'use strict'; - - -function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; -} - -module.exports = GZheader; - -},{}],7:[function(require,module,exports){ -'use strict'; - -// See state defs from inflate.js -var BAD = 30; /* got a data error -- remain here until reset */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - -/* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ -module.exports = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ -//#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ -//#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); -//#ifdef INFLATE_STRICT - dmax = state.dmax; -//#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); -//#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } -//#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// if (len <= op - whave) { -// do { -// output[_out++] = 0; -// } while (--len); -// continue top; -// } -// len -= op - whave; -// do { -// output[_out++] = 0; -// } while (--op > whave); -// if (op === 0) { -// from = _out - dist; -// do { -// output[_out++] = output[from++]; -// } while (--len); -// continue top; -// } -//#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; -}; - -},{}],8:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var inflate_fast = require('./inffast'); -var inflate_table = require('./inftrees'); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -//var Z_NO_FLUSH = 0; -//var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -//var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - -/* The deflate compression method */ -var Z_DEFLATED = 8; - - -/* STATES ====================================================================*/ -/* ===========================================================================*/ - - -var HEAD = 1; /* i: waiting for magic header */ -var FLAGS = 2; /* i: waiting for method and flags (gzip) */ -var TIME = 3; /* i: waiting for modification time (gzip) */ -var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ -var EXLEN = 5; /* i: waiting for extra length (gzip) */ -var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ -var NAME = 7; /* i: waiting for end of file name (gzip) */ -var COMMENT = 8; /* i: waiting for end of comment (gzip) */ -var HCRC = 9; /* i: waiting for header crc (gzip) */ -var DICTID = 10; /* i: waiting for dictionary check value */ -var DICT = 11; /* waiting for inflateSetDictionary() call */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ -var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ -var STORED = 14; /* i: waiting for stored size (length and complement) */ -var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ -var COPY = 16; /* i/o: waiting for input or output to copy stored block */ -var TABLE = 17; /* i: waiting for dynamic block table lengths */ -var LENLENS = 18; /* i: waiting for code length code lengths */ -var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ -var LEN_ = 20; /* i: same as LEN below, but only first time in */ -var LEN = 21; /* i: waiting for length/lit/eob code */ -var LENEXT = 22; /* i: waiting for length extra bits */ -var DIST = 23; /* i: waiting for distance code */ -var DISTEXT = 24; /* i: waiting for distance extra bits */ -var MATCH = 25; /* o: waiting for output space to copy string */ -var LIT = 26; /* o: waiting for output space to write literal */ -var CHECK = 27; /* i: waiting for 32-bit check value */ -var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ -var DONE = 29; /* finished check, done -- remain here until reset */ -var BAD = 30; /* got a data error -- remain here until reset */ -var MEM = 31; /* got an inflate() memory error -- remain here until reset */ -var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - -/* ===========================================================================*/ - - - -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_WBITS = MAX_WBITS; - - -function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); -} - - -function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ - this.work = new utils.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ -} - -function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - -function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - -} - -function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); -} - -function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null/*Z_NULL*/; - } - return ret; -} - -function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); -} - - -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -var virgin = true; - -var lenfix, distfix; // We have no pointers in JS, so keep tables separate - -function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; -} - - -/* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ -function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new utils.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - utils.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - utils.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; -} - -function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR; - } - - state = strm.state; - if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more conveniend processing later - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - utils.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// -//#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD; - break; - } -//#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } -//#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -//#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// Trace((stderr, "inflate.c too far\n")); -// copy -= state.whave; -// if (copy > state.length) { copy = state.length; } -// if (copy > left) { copy = left; } -// left -= copy; -// state.length -= copy; -// do { -// output[put++] = 0; -// } while (--copy); -// if (state.length === 0) { state.mode = LEN; } -// break; -//#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' insdead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { - ret = Z_BUF_ERROR; - } - return ret; -} - -function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; -} - -function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK; -} - -function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; -} - -exports.inflateReset = inflateReset; -exports.inflateReset2 = inflateReset2; -exports.inflateResetKeep = inflateResetKeep; -exports.inflateInit = inflateInit; -exports.inflateInit2 = inflateInit2; -exports.inflate = inflate; -exports.inflateEnd = inflateEnd; -exports.inflateGetHeader = inflateGetHeader; -exports.inflateSetDictionary = inflateSetDictionary; -exports.inflateInfo = 'pako inflate (from Nodeca project)'; - -/* Not implemented -exports.inflateCopy = inflateCopy; -exports.inflateGetDictionary = inflateGetDictionary; -exports.inflateMark = inflateMark; -exports.inflatePrime = inflatePrime; -exports.inflateSync = inflateSync; -exports.inflateSyncPoint = inflateSyncPoint; -exports.inflateUndermine = inflateUndermine; -*/ - -},{"../utils/common":1,"./adler32":3,"./crc32":5,"./inffast":7,"./inftrees":9}],9:[function(require,module,exports){ -'use strict'; - - -var utils = require('../utils/common'); - -var MAXBITS = 15; -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 -]; - -var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 -]; - -var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 -]; - -var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 -]; - -module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) -{ - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; -// var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - var i = 0; - /* process all codes and make table entries */ - for (;;) { - i++; - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; -}; - -},{"../utils/common":1}],10:[function(require,module,exports){ -'use strict'; - -module.exports = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ -}; - -},{}],11:[function(require,module,exports){ -'use strict'; - - -function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; -} - -module.exports = ZStream; - -},{}],"/lib/inflate.js":[function(require,module,exports){ -'use strict'; - - -var zlib_inflate = require('./zlib/inflate'); -var utils = require('./utils/common'); -var strings = require('./utils/strings'); -var c = require('./zlib/constants'); -var msg = require('./zlib/messages'); -var ZStream = require('./zlib/zstream'); -var GZheader = require('./zlib/gzheader'); - -var toString = Object.prototype.toString; - -/** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - -/* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overriden. - **/ - -/** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - -/** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - -/** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ -function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = utils.assign({ - chunkSize: 16384, - windowBits: 0, - to: '' - }, options || {}); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_inflate.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== c.Z_OK) { - throw new Error(msg[status]); - } - - this.header = new GZheader(); - - zlib_inflate.inflateGetHeader(this.strm, this.header); -} - -/** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - var dict; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { return false; } - _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ - - if (status === c.Z_NEED_DICT && dictionary) { - // Convert data if needed - if (typeof dictionary === 'string') { - dict = strings.string2buf(dictionary); - } else if (toString.call(dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(dictionary); - } else { - dict = dictionary; - } - - status = zlib_inflate.inflateSetDictionary(this.strm, dict); - - } - - if (status === c.Z_BUF_ERROR && allowBufError === true) { - status = c.Z_OK; - allowBufError = false; - } - - if (status !== c.Z_STREAM_END && status !== c.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { - - if (this.options.to === 'string') { - - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } - - this.onData(utf8str); - - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); - - if (status === c.Z_STREAM_END) { - _mode = c.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === c.Z_FINISH) { - status = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === c.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === c.Z_SYNC_FLUSH) { - this.onEnd(c.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === c.Z_OK) { - if (this.options.to === 'string') { - // Glue & convert here, until we teach pako to send - // utf8 alligned strings to onData - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ -function inflate(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { throw inflator.msg; } - - return inflator.result; -} - - -/** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate(input, options); -} - - -/** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - -exports.Inflate = Inflate; -exports.inflate = inflate; -exports.inflateRaw = inflateRaw; -exports.ungzip = inflate; - -},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js") -}); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pako/dist/pako_inflate.min.js b/skills/flight-finder/node_modules/pako/dist/pako_inflate.min.js deleted file mode 100644 index d423de9..0000000 --- a/skills/flight-finder/node_modules/pako/dist/pako_inflate.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* pako 0.2.9 nodeca/pako */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.pako=e()}}(function(){return function e(t,i,n){function a(o,s){if(!i[o]){if(!t[o]){var f="function"==typeof require&&require;if(!s&&f)return f(o,!0);if(r)return r(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var d=i[o]={exports:{}};t[o][0].call(d.exports,function(e){var i=t[o][1][e];return a(i?i:e)},d,d.exports,e,t,i,n)}return i[o].exports}for(var r="function"==typeof require&&require,o=0;o=252?6:f>=248?5:f>=240?4:f>=224?3:f>=192?2:1;s[254]=s[254]=1,i.string2buf=function(e){var t,i,n,r,o,s=e.length,f=0;for(r=0;r>>6,t[o++]=128|63&i):i<65536?(t[o++]=224|i>>>12,t[o++]=128|i>>>6&63,t[o++]=128|63&i):(t[o++]=240|i>>>18,t[o++]=128|i>>>12&63,t[o++]=128|i>>>6&63,t[o++]=128|63&i);return t},i.buf2binstring=function(e){return n(e,e.length)},i.binstring2buf=function(e){for(var t=new a.Buf8(e.length),i=0,n=t.length;i4)l[a++]=65533,i+=o-1;else{for(r&=2===o?31:3===o?15:7;o>1&&i1?l[a++]=65533:r<65536?l[a++]=r:(r-=65536,l[a++]=55296|r>>10&1023,l[a++]=56320|1023&r)}return n(l,a)},i.utf8border=function(e,t){var i;for(t=t||e.length,t>e.length&&(t=e.length),i=t-1;i>=0&&128===(192&e[i]);)i--;return i<0?t:0===i?t:i+s[e[i]]>t?i:t}},{"./common":1}],3:[function(e,t,i){"use strict";function n(e,t,i,n){for(var a=65535&e|0,r=e>>>16&65535|0,o=0;0!==i;){o=i>2e3?2e3:i,i-=o;do a=a+t[n++]|0,r=r+a|0;while(--o);a%=65521,r%=65521}return a|r<<16|0}t.exports=n},{}],4:[function(e,t,i){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],5:[function(e,t,i){"use strict";function n(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t}function a(e,t,i,n){var a=r,o=n+i;e^=-1;for(var s=n;s>>8^a[255&(e^t[s])];return e^-1}var r=n();t.exports=a},{}],6:[function(e,t,i){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}t.exports=n},{}],7:[function(e,t,i){"use strict";var n=30,a=12;t.exports=function(e,t){var i,r,o,s,f,l,d,u,c,h,b,w,m,k,_,g,v,p,x,y,S,E,B,Z,A;i=e.state,r=e.next_in,Z=e.input,o=r+(e.avail_in-5),s=e.next_out,A=e.output,f=s-(t-e.avail_out),l=s+(e.avail_out-257),d=i.dmax,u=i.wsize,c=i.whave,h=i.wnext,b=i.window,w=i.hold,m=i.bits,k=i.lencode,_=i.distcode,g=(1<>>24,w>>>=x,m-=x,x=p>>>16&255,0===x)A[s++]=65535&p;else{if(!(16&x)){if(0===(64&x)){p=k[(65535&p)+(w&(1<>>=x,m-=x),m<15&&(w+=Z[r++]<>>24,w>>>=x,m-=x,x=p>>>16&255,!(16&x)){if(0===(64&x)){p=_[(65535&p)+(w&(1<d){e.msg="invalid distance too far back",i.mode=n;break e}if(w>>>=x,m-=x,x=s-f,S>x){if(x=S-x,x>c&&i.sane){e.msg="invalid distance too far back",i.mode=n;break e}if(E=0,B=b,0===h){if(E+=u-x,x2;)A[s++]=B[E++],A[s++]=B[E++],A[s++]=B[E++],y-=3;y&&(A[s++]=B[E++],y>1&&(A[s++]=B[E++]))}else{E=s-S;do A[s++]=A[E++],A[s++]=A[E++],A[s++]=A[E++],y-=3;while(y>2);y&&(A[s++]=A[E++],y>1&&(A[s++]=A[E++]))}break}}break}}while(r>3,r-=y,m-=y<<3,w&=(1<>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function a(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new _.Buf16(320),this.work=new _.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=D,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new _.Buf32(we),t.distcode=t.distdyn=new _.Buf32(me),t.sane=1,t.back=-1,z):C}function o(e){var t;return e&&e.state?(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,r(e)):C}function s(e,t){var i,n;return e&&e.state?(n=e.state,t<0?(i=0,t=-t):(i=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15)?C:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,o(e))):C}function f(e,t){var i,n;return e?(n=new a,e.state=n,n.window=null,i=s(e,t),i!==z&&(e.state=null),i):C}function l(e){return f(e,_e)}function d(e){if(ge){var t;for(m=new _.Buf32(512),k=new _.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(x(S,e.lens,0,288,m,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;x(E,e.lens,0,32,k,0,e.work,{bits:5}),ge=!1}e.lencode=m,e.lenbits=9,e.distcode=k,e.distbits=5}function u(e,t,i,n){var a,r=e.state;return null===r.window&&(r.wsize=1<=r.wsize?(_.arraySet(r.window,t,i-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),_.arraySet(r.window,t,i-n,a,r.wnext),n-=a,n?(_.arraySet(r.window,t,i-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,i.check=v(i.check,Ze,2,0),c=0,h=0,i.mode=F;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",i.mode=ce;break}if((15&c)!==U){e.msg="unknown compression method",i.mode=ce;break}if(c>>>=4,h-=4,xe=(15&c)+8,0===i.wbits)i.wbits=xe;else if(xe>i.wbits){e.msg="invalid window size",i.mode=ce;break}i.dmax=1<>8&1),512&i.flags&&(Ze[0]=255&c,Ze[1]=c>>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0,i.mode=L;case L:for(;h<32;){if(0===f)break e;f--,c+=a[o++]<>>8&255,Ze[2]=c>>>16&255,Ze[3]=c>>>24&255,i.check=v(i.check,Ze,4,0)),c=0,h=0,i.mode=H;case H:for(;h<16;){if(0===f)break e;f--,c+=a[o++]<>8),512&i.flags&&(Ze[0]=255&c,Ze[1]=c>>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0,i.mode=M;case M:if(1024&i.flags){for(;h<16;){if(0===f)break e;f--,c+=a[o++]<>>8&255,i.check=v(i.check,Ze,2,0)),c=0,h=0}else i.head&&(i.head.extra=null);i.mode=j;case j:if(1024&i.flags&&(m=i.length,m>f&&(m=f),m&&(i.head&&(xe=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),_.arraySet(i.head.extra,a,o,m,xe)),512&i.flags&&(i.check=v(i.check,a,m,o)),f-=m,o+=m,i.length-=m),i.length))break e;i.length=0,i.mode=K;case K:if(2048&i.flags){if(0===f)break e;m=0;do xe=a[o+m++],i.head&&xe&&i.length<65536&&(i.head.name+=String.fromCharCode(xe));while(xe&&m>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=X;break;case q:for(;h<32;){if(0===f)break e;f--,c+=a[o++]<>>=7&h,h-=7&h,i.mode=le;break}for(;h<3;){if(0===f)break e;f--,c+=a[o++]<>>=1,h-=1,3&c){case 0:i.mode=J;break;case 1:if(d(i),i.mode=ie,t===A){c>>>=2,h-=2;break e}break;case 2:i.mode=$;break;case 3:e.msg="invalid block type",i.mode=ce}c>>>=2,h-=2;break;case J:for(c>>>=7&h,h-=7&h;h<32;){if(0===f)break e;f--,c+=a[o++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=ce;break}if(i.length=65535&c,c=0,h=0,i.mode=Q,t===A)break e;case Q:i.mode=V;case V:if(m=i.length){if(m>f&&(m=f),m>l&&(m=l),0===m)break e;_.arraySet(r,a,o,m,s),f-=m,o+=m,l-=m,s+=m,i.length-=m;break}i.mode=X;break;case $:for(;h<14;){if(0===f)break e;f--,c+=a[o++]<>>=5,h-=5,i.ndist=(31&c)+1,c>>>=5,h-=5,i.ncode=(15&c)+4,c>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=ce;break}i.have=0,i.mode=ee;case ee:for(;i.have>>=3,h-=3}for(;i.have<19;)i.lens[Ae[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,Se={bits:i.lenbits},ye=x(y,i.lens,0,19,i.lencode,0,i.work,Se),i.lenbits=Se.bits,ye){e.msg="invalid code lengths set",i.mode=ce;break}i.have=0,i.mode=te;case te:for(;i.have>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=me,h-=me,i.lens[i.have++]=_e;else{if(16===_e){for(Ee=me+2;h>>=me,h-=me,0===i.have){e.msg="invalid bit length repeat",i.mode=ce;break}xe=i.lens[i.have-1],m=3+(3&c),c>>>=2,h-=2}else if(17===_e){for(Ee=me+3;h>>=me,h-=me,xe=0,m=3+(7&c),c>>>=3,h-=3}else{for(Ee=me+7;h>>=me,h-=me,xe=0,m=11+(127&c),c>>>=7,h-=7}if(i.have+m>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=ce;break}for(;m--;)i.lens[i.have++]=xe}}if(i.mode===ce)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=ce;break}if(i.lenbits=9,Se={bits:i.lenbits},ye=x(S,i.lens,0,i.nlen,i.lencode,0,i.work,Se),i.lenbits=Se.bits,ye){e.msg="invalid literal/lengths set",i.mode=ce;break}if(i.distbits=6,i.distcode=i.distdyn,Se={bits:i.distbits},ye=x(E,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,Se),i.distbits=Se.bits,ye){e.msg="invalid distances set",i.mode=ce;break}if(i.mode=ie,t===A)break e;case ie:i.mode=ne;case ne:if(f>=6&&l>=258){e.next_out=s,e.avail_out=l,e.next_in=o,e.avail_in=f,i.hold=c,i.bits=h,p(e,w),s=e.next_out,r=e.output,l=e.avail_out,o=e.next_in,a=e.input,f=e.avail_in,c=i.hold,h=i.bits,i.mode===X&&(i.back=-1);break}for(i.back=0;Be=i.lencode[c&(1<>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>ge)],me=Be>>>24,ke=Be>>>16&255,_e=65535&Be,!(ge+me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=ge,h-=ge,i.back+=ge}if(c>>>=me,h-=me,i.back+=me,i.length=_e,0===ke){i.mode=fe;break}if(32&ke){i.back=-1,i.mode=X;break}if(64&ke){e.msg="invalid literal/length code",i.mode=ce;break}i.extra=15&ke,i.mode=ae;case ae:if(i.extra){for(Ee=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=re;case re:for(;Be=i.distcode[c&(1<>>24,ke=Be>>>16&255,_e=65535&Be,!(me<=h);){if(0===f)break e;f--,c+=a[o++]<>ge)],me=Be>>>24,ke=Be>>>16&255,_e=65535&Be,!(ge+me<=h);){if(0===f)break e;f--,c+=a[o++]<>>=ge,h-=ge,i.back+=ge}if(c>>>=me,h-=me,i.back+=me,64&ke){e.msg="invalid distance code",i.mode=ce;break}i.offset=_e,i.extra=15&ke,i.mode=oe;case oe:if(i.extra){for(Ee=i.extra;h>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=ce;break}i.mode=se;case se:if(0===l)break e;if(m=w-l,i.offset>m){if(m=i.offset-m,m>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=ce;break}m>i.wnext?(m-=i.wnext,k=i.wsize-m):k=i.wnext-m,m>i.length&&(m=i.length),we=i.window}else we=r,k=s-i.offset,m=i.length;m>l&&(m=l),l-=m,i.length-=m;do r[s++]=we[k++];while(--m);0===i.length&&(i.mode=ne);break;case fe:if(0===l)break e;r[s++]=i.length,l--,i.mode=ne;break;case le:if(i.wrap){for(;h<32;){if(0===f)break e;f--,c|=a[o++]<=1&&0===M[C];C--);if(O>C&&(O=C),0===C)return w[m++]=20971520,w[m++]=20971520,_.bits=1,0;for(N=1;N0&&(e===s||1!==C))return-1;for(j[1]=0,z=1;zr||e===l&&D>o)return 1;for(var Y=0;;){Y++,E=z-T,k[R]S?(B=K[P+k[R]],Z=L[H+k[R]]):(B=96,Z=0),g=1<>T)+v]=E<<24|B<<16|Z|0;while(0!==v);for(g=1<>=1;if(0!==g?(F&=g-1,F+=g):F=0,R++,0===--M[z]){if(z===C)break;z=t[i+k[R]]}if(z>O&&(F&x)!==p){for(0===T&&(T=O),y+=N,I=z-T,U=1<r||e===l&&D>o)return 1;p=F&x,w[p]=O<<24|I<<16|y-m|0}}return 0!==F&&(w[y+F]=z-T<<24|64<<16|0),_.bits=O,0}},{"../utils/common":1}],10:[function(e,t,i){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],11:[function(e,t,i){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}t.exports=n},{}],"/lib/inflate.js":[function(e,t,i){"use strict";function n(e){if(!(this instanceof n))return new n(e);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0===(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new u,this.strm.avail_out=0;var i=o.inflateInit2(this.strm,t.windowBits);if(i!==l.Z_OK)throw new Error(d[i]);this.header=new c,o.inflateGetHeader(this.strm,this.header)}function a(e,t){var i=new n(t);if(i.push(e,!0),i.err)throw i.msg;return i.result}function r(e,t){return t=t||{},t.raw=!0,a(e,t)}var o=e("./zlib/inflate"),s=e("./utils/common"),f=e("./utils/strings"),l=e("./zlib/constants"),d=e("./zlib/messages"),u=e("./zlib/zstream"),c=e("./zlib/gzheader"),h=Object.prototype.toString;n.prototype.push=function(e,t){var i,n,a,r,d,u,c=this.strm,b=this.options.chunkSize,w=this.options.dictionary,m=!1;if(this.ended)return!1;n=t===~~t?t:t===!0?l.Z_FINISH:l.Z_NO_FLUSH,"string"==typeof e?c.input=f.binstring2buf(e):"[object ArrayBuffer]"===h.call(e)?c.input=new Uint8Array(e):c.input=e,c.next_in=0,c.avail_in=c.input.length;do{if(0===c.avail_out&&(c.output=new s.Buf8(b),c.next_out=0,c.avail_out=b),i=o.inflate(c,l.Z_NO_FLUSH),i===l.Z_NEED_DICT&&w&&(u="string"==typeof w?f.string2buf(w):"[object ArrayBuffer]"===h.call(w)?new Uint8Array(w):w,i=o.inflateSetDictionary(this.strm,u)),i===l.Z_BUF_ERROR&&m===!0&&(i=l.Z_OK,m=!1),i!==l.Z_STREAM_END&&i!==l.Z_OK)return this.onEnd(i),this.ended=!0,!1;c.next_out&&(0!==c.avail_out&&i!==l.Z_STREAM_END&&(0!==c.avail_in||n!==l.Z_FINISH&&n!==l.Z_SYNC_FLUSH)||("string"===this.options.to?(a=f.utf8border(c.output,c.next_out),r=c.next_out-a,d=f.buf2string(c.output,a),c.next_out=r,c.avail_out=b-r,r&&s.arraySet(c.output,c.output,a,r,0),this.onData(d)):this.onData(s.shrinkBuf(c.output,c.next_out)))),0===c.avail_in&&0===c.avail_out&&(m=!0)}while((c.avail_in>0||0===c.avail_out)&&i!==l.Z_STREAM_END);return i===l.Z_STREAM_END&&(n=l.Z_FINISH),n===l.Z_FINISH?(i=o.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===l.Z_OK):n!==l.Z_SYNC_FLUSH||(this.onEnd(l.Z_OK),c.avail_out=0,!0)},n.prototype.onData=function(e){this.chunks.push(e)},n.prototype.onEnd=function(e){e===l.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},i.Inflate=n,i.inflate=a,i.inflateRaw=r,i.ungzip=a},{"./utils/common":1,"./utils/strings":2,"./zlib/constants":4,"./zlib/gzheader":6,"./zlib/inflate":8,"./zlib/messages":10,"./zlib/zstream":11}]},{},[])("/lib/inflate.js")}); diff --git a/skills/flight-finder/node_modules/pako/index.js b/skills/flight-finder/node_modules/pako/index.js deleted file mode 100644 index cd07251..0000000 --- a/skills/flight-finder/node_modules/pako/index.js +++ /dev/null @@ -1,14 +0,0 @@ -// Top level file is just a mixin of submodules & constants -'use strict'; - -var assign = require('./lib/utils/common').assign; - -var deflate = require('./lib/deflate'); -var inflate = require('./lib/inflate'); -var constants = require('./lib/zlib/constants'); - -var pako = {}; - -assign(pako, deflate, inflate, constants); - -module.exports = pako; diff --git a/skills/flight-finder/node_modules/pako/lib/deflate.js b/skills/flight-finder/node_modules/pako/lib/deflate.js deleted file mode 100644 index 11040d4..0000000 --- a/skills/flight-finder/node_modules/pako/lib/deflate.js +++ /dev/null @@ -1,400 +0,0 @@ -'use strict'; - - -var zlib_deflate = require('./zlib/deflate'); -var utils = require('./utils/common'); -var strings = require('./utils/strings'); -var msg = require('./zlib/messages'); -var ZStream = require('./zlib/zstream'); - -var toString = Object.prototype.toString; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - -var Z_NO_FLUSH = 0; -var Z_FINISH = 4; - -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_SYNC_FLUSH = 2; - -var Z_DEFAULT_COMPRESSION = -1; - -var Z_DEFAULT_STRATEGY = 0; - -var Z_DEFLATED = 8; - -/* ===========================================================================*/ - - -/** - * class Deflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[deflate]], - * [[deflateRaw]] and [[gzip]]. - **/ - -/* internal - * Deflate.chunks -> Array - * - * Chunks of output data, if [[Deflate#onData]] not overriden. - **/ - -/** - * Deflate.result -> Uint8Array|Array - * - * Compressed result, generated by default [[Deflate#onData]] - * and [[Deflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Deflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Deflate.err -> Number - * - * Error code after deflate finished. 0 (Z_OK) on success. - * You will not need it in real life, because deflate errors - * are possible only on wrong options or bad `onData` / `onEnd` - * custom handlers. - **/ - -/** - * Deflate.msg -> String - * - * Error message, if [[Deflate.err]] != 0 - **/ - - -/** - * new Deflate(options) - * - options (Object): zlib deflate options. - * - * Creates new deflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `level` - * - `windowBits` - * - `memLevel` - * - `strategy` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw deflate - * - `gzip` (Boolean) - create gzip wrapper - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - `header` (Object) - custom header for gzip - * - `text` (Boolean) - true if compressed data believed to be text - * - `time` (Number) - modification time, unix timestamp - * - `os` (Number) - operation system code - * - `extra` (Array) - array of bytes with extra data (max 65536) - * - `name` (String) - file name (binary string) - * - `comment` (String) - comment (binary string) - * - `hcrc` (Boolean) - true if header crc should be added - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var deflate = new pako.Deflate({ level: 3}); - * - * deflate.push(chunk1, false); - * deflate.push(chunk2, true); // true -> last chunk - * - * if (deflate.err) { throw new Error(deflate.err); } - * - * console.log(deflate.result); - * ``` - **/ -function Deflate(options) { - if (!(this instanceof Deflate)) return new Deflate(options); - - this.options = utils.assign({ - level: Z_DEFAULT_COMPRESSION, - method: Z_DEFLATED, - chunkSize: 16384, - windowBits: 15, - memLevel: 8, - strategy: Z_DEFAULT_STRATEGY, - to: '' - }, options || {}); - - var opt = this.options; - - if (opt.raw && (opt.windowBits > 0)) { - opt.windowBits = -opt.windowBits; - } - - else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { - opt.windowBits += 16; - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_deflate.deflateInit2( - this.strm, - opt.level, - opt.method, - opt.windowBits, - opt.memLevel, - opt.strategy - ); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - if (opt.header) { - zlib_deflate.deflateSetHeader(this.strm, opt.header); - } - - if (opt.dictionary) { - var dict; - // Convert data if needed - if (typeof opt.dictionary === 'string') { - // If we need to compress text, change encoding to utf8. - dict = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(opt.dictionary); - } else { - dict = opt.dictionary; - } - - status = zlib_deflate.deflateSetDictionary(this.strm, dict); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - this._dict_set = true; - } -} - -/** - * Deflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be - * converted to utf8 byte sequence. - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with - * new compressed chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the compression context. - * - * On fail call [[Deflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * array format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Deflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var status, _mode; - - if (this.ended) { return false; } - - _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // If we need to compress text, change encoding to utf8. - strm.input = strings.string2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ - - if (status !== Z_STREAM_END && status !== Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { - if (this.options.to === 'string') { - this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); - - // Finalize on the last chunk. - if (_mode === Z_FINISH) { - status = zlib_deflate.deflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === Z_SYNC_FLUSH) { - this.onEnd(Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Deflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Deflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Deflate#onEnd(status) -> Void - * - status (Number): deflate status. 0 (Z_OK) on success, - * other if not. - * - * Called once after you tell deflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Deflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * deflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * Compress `data` with deflate algorithm and `options`. - * - * Supported options are: - * - * - level - * - windowBits - * - memLevel - * - strategy - * - dictionary - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be "binary string" - * (each char code [0..255]) - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); - * - * console.log(pako.deflate(data)); - * ``` - **/ -function deflate(input, options) { - var deflator = new Deflate(options); - - deflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (deflator.err) { throw deflator.msg; } - - return deflator.result; -} - - -/** - * deflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function deflateRaw(input, options) { - options = options || {}; - options.raw = true; - return deflate(input, options); -} - - -/** - * gzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to compress. - * - options (Object): zlib deflate options. - * - * The same as [[deflate]], but create gzip wrapper instead of - * deflate one. - **/ -function gzip(input, options) { - options = options || {}; - options.gzip = true; - return deflate(input, options); -} - - -exports.Deflate = Deflate; -exports.deflate = deflate; -exports.deflateRaw = deflateRaw; -exports.gzip = gzip; diff --git a/skills/flight-finder/node_modules/pako/lib/inflate.js b/skills/flight-finder/node_modules/pako/lib/inflate.js deleted file mode 100644 index 0ed4999..0000000 --- a/skills/flight-finder/node_modules/pako/lib/inflate.js +++ /dev/null @@ -1,418 +0,0 @@ -'use strict'; - - -var zlib_inflate = require('./zlib/inflate'); -var utils = require('./utils/common'); -var strings = require('./utils/strings'); -var c = require('./zlib/constants'); -var msg = require('./zlib/messages'); -var ZStream = require('./zlib/zstream'); -var GZheader = require('./zlib/gzheader'); - -var toString = Object.prototype.toString; - -/** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - -/* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overriden. - **/ - -/** - * Inflate.result -> Uint8Array|Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you - * push a chunk with explicit flush (call [[Inflate#push]] with - * `Z_SYNC_FLUSH` param). - **/ - -/** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - -/** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - -/** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) - * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * var inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ -function Inflate(options) { - if (!(this instanceof Inflate)) return new Inflate(options); - - this.options = utils.assign({ - chunkSize: 16384, - windowBits: 0, - to: '' - }, options || {}); - - var opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - var status = zlib_inflate.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== c.Z_OK) { - throw new Error(msg[status]); - } - - this.header = new GZheader(); - - zlib_inflate.inflateGetHeader(this.strm, this.header); -} - -/** - * Inflate#push(data[, mode]) -> Boolean - * - data (Uint8Array|Array|ArrayBuffer|String): input data - * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. - * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. The last data block must have - * mode Z_FINISH (or `true`). That will flush internal pending buffers and call - * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you - * can use mode Z_SYNC_FLUSH, keeping the decompression context. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * We strongly recommend to use `Uint8Array` on input for best speed (output - * format is detected automatically). Also, don't skip last param and always - * use the same type in your code (boolean or number). That will improve JS speed. - * - * For regular `Array`-s make sure all elements are [0..255]. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ -Inflate.prototype.push = function (data, mode) { - var strm = this.strm; - var chunkSize = this.options.chunkSize; - var dictionary = this.options.dictionary; - var status, _mode; - var next_out_utf8, tail, utf8str; - var dict; - - // Flag to properly process Z_BUF_ERROR on testing inflate call - // when we check that all output data was flushed. - var allowBufError = false; - - if (this.ended) { return false; } - _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); - - // Convert data if needed - if (typeof data === 'string') { - // Only binary strings can be decompressed on practice - strm.input = strings.binstring2buf(data); - } else if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - do { - if (strm.avail_out === 0) { - strm.output = new utils.Buf8(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ - - if (status === c.Z_NEED_DICT && dictionary) { - // Convert data if needed - if (typeof dictionary === 'string') { - dict = strings.string2buf(dictionary); - } else if (toString.call(dictionary) === '[object ArrayBuffer]') { - dict = new Uint8Array(dictionary); - } else { - dict = dictionary; - } - - status = zlib_inflate.inflateSetDictionary(this.strm, dict); - - } - - if (status === c.Z_BUF_ERROR && allowBufError === true) { - status = c.Z_OK; - allowBufError = false; - } - - if (status !== c.Z_STREAM_END && status !== c.Z_OK) { - this.onEnd(status); - this.ended = true; - return false; - } - - if (strm.next_out) { - if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { - - if (this.options.to === 'string') { - - next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - tail = strm.next_out - next_out_utf8; - utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } - - this.onData(utf8str); - - } else { - this.onData(utils.shrinkBuf(strm.output, strm.next_out)); - } - } - } - - // When no more input data, we should check that internal inflate buffers - // are flushed. The only way to do it when avail_out = 0 - run one more - // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. - // Here we set flag to process this error properly. - // - // NOTE. Deflate does not return error in this case and does not needs such - // logic. - if (strm.avail_in === 0 && strm.avail_out === 0) { - allowBufError = true; - } - - } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); - - if (status === c.Z_STREAM_END) { - _mode = c.Z_FINISH; - } - - // Finalize on the last chunk. - if (_mode === c.Z_FINISH) { - status = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return status === c.Z_OK; - } - - // callback interim results if Z_SYNC_FLUSH. - if (_mode === c.Z_SYNC_FLUSH) { - this.onEnd(c.Z_OK); - strm.avail_out = 0; - return true; - } - - return true; -}; - - -/** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|Array|String): ouput data. Type of array depends - * on js engine support. When string output requested, each chunk - * will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ -Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); -}; - - -/** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) - * or if an error happened. By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ -Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === c.Z_OK) { - if (this.options.to === 'string') { - // Glue & convert here, until we teach pako to send - // utf8 alligned strings to onData - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; -}; - - -/** - * inflate(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * var pako = require('pako') - * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) - * , output; - * - * try { - * output = pako.inflate(input); - * } catch (err) - * console.log(err); - * } - * ``` - **/ -function inflate(input, options) { - var inflator = new Inflate(options); - - inflator.push(input, true); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) { throw inflator.msg; } - - return inflator.result; -} - - -/** - * inflateRaw(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ -function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate(input, options); -} - - -/** - * ungzip(data[, options]) -> Uint8Array|Array|String - * - data (Uint8Array|Array|String): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - -exports.Inflate = Inflate; -exports.inflate = inflate; -exports.inflateRaw = inflateRaw; -exports.ungzip = inflate; diff --git a/skills/flight-finder/node_modules/pako/lib/utils/common.js b/skills/flight-finder/node_modules/pako/lib/utils/common.js deleted file mode 100644 index 1e159fe..0000000 --- a/skills/flight-finder/node_modules/pako/lib/utils/common.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; - - -var TYPED_OK = (typeof Uint8Array !== 'undefined') && - (typeof Uint16Array !== 'undefined') && - (typeof Int32Array !== 'undefined'); - - -exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (var p in source) { - if (source.hasOwnProperty(p)) { - obj[p] = source[p]; - } - } - } - - return obj; -}; - - -// reduce buffer size, avoiding mem copy -exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { return buf; } - if (buf.subarray) { return buf.subarray(0, size); } - buf.length = size; - return buf; -}; - - -var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - } -}; - -var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - } -}; - - -// Enable/Disable typed arrays use, for testing -// -exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } -}; - -exports.setTyped(TYPED_OK); diff --git a/skills/flight-finder/node_modules/pako/lib/utils/strings.js b/skills/flight-finder/node_modules/pako/lib/utils/strings.js deleted file mode 100644 index 1a0499c..0000000 --- a/skills/flight-finder/node_modules/pako/lib/utils/strings.js +++ /dev/null @@ -1,185 +0,0 @@ -// String encode/decode helpers -'use strict'; - - -var utils = require('./common'); - - -// Quick check if we can use fast array to bin string conversion -// -// - apply(Array) can fail on Android 2.2 -// - apply(Uint8Array) can fail on iOS 5.1 Safary -// -var STR_APPLY_OK = true; -var STR_APPLY_UIA_OK = true; - -try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } -try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } - - -// Table with utf8 lengths (calculated by first byte of sequence) -// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, -// because max possible codepoint is 0x10ffff -var _utf8len = new utils.Buf8(256); -for (var q = 0; q < 256; q++) { - _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); -} -_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - -// convert string to array (typed, when possible) -exports.string2buf = function (str) { - var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new utils.Buf8(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; -}; - -// Helper (used in 2 places) -function buf2binstring(buf, len) { - // use fallback for big arrays to avoid stack overflow - if (len < 65537) { - if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { - return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); - } - } - - var result = ''; - for (var i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; -} - - -// Convert byte array to binary string -exports.buf2binstring = function (buf) { - return buf2binstring(buf, buf.length); -}; - - -// Convert binary string (typed, when possible) -exports.binstring2buf = function (str) { - var buf = new utils.Buf8(str.length); - for (var i = 0, len = buf.length; i < len; i++) { - buf[i] = str.charCodeAt(i); - } - return buf; -}; - - -// convert array to string -exports.buf2string = function (buf, max) { - var i, out, c, c_len; - var len = max || buf.length; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - var utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); -}; - - -// Calculate max possible position in utf8 buffer, -// that will not break sequence. If that's not possible -// - (very small limits) return max size as is. -// -// buf[] - utf8 bytes array -// max - length limit (mandatory); -exports.utf8border = function (buf, max) { - var pos; - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Fuckup - very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means vuffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; -}; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/adler32.js b/skills/flight-finder/node_modules/pako/lib/zlib/adler32.js deleted file mode 100644 index dcefe93..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/adler32.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -// Note: adler32 takes 12% for level 0 and 2% for level 6. -// It doesn't worth to make additional optimizationa as in original. -// Small size is preferable. - -function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; -} - - -module.exports = adler32; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/constants.js b/skills/flight-finder/node_modules/pako/lib/zlib/constants.js deleted file mode 100644 index ece6700..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/constants.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict'; - - -module.exports = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type -}; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/crc32.js b/skills/flight-finder/node_modules/pako/lib/zlib/crc32.js deleted file mode 100644 index 0768b1c..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/crc32.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict'; - -// Note: we can't get significant speed boost here. -// So write code to minimize size - no pregenerated tables -// and array tools dependencies. - - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - - -module.exports = crc32; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/deflate.js b/skills/flight-finder/node_modules/pako/lib/zlib/deflate.js deleted file mode 100644 index e461fb8..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/deflate.js +++ /dev/null @@ -1,1855 +0,0 @@ -'use strict'; - -var utils = require('../utils/common'); -var trees = require('./trees'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var msg = require('./messages'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -var Z_NO_FLUSH = 0; -var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -//var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -//var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -//var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - - -/* compression levels */ -//var Z_NO_COMPRESSION = 0; -//var Z_BEST_SPEED = 1; -//var Z_BEST_COMPRESSION = 9; -var Z_DEFAULT_COMPRESSION = -1; - - -var Z_FILTERED = 1; -var Z_HUFFMAN_ONLY = 2; -var Z_RLE = 3; -var Z_FIXED = 4; -var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -//var Z_BINARY = 0; -//var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - - -/* The deflate compression method */ -var Z_DEFLATED = 8; - -/*============================================================================*/ - - -var MAX_MEM_LEVEL = 9; -/* Maximum value for memLevel in deflateInit2 */ -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_MEM_LEVEL = 8; - - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ -var LITERALS = 256; -/* number of literal bytes 0..255 */ -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ -var D_CODES = 30; -/* number of distance codes */ -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - -var PRESET_DICT = 0x20; - -var INIT_STATE = 42; -var EXTRA_STATE = 69; -var NAME_STATE = 73; -var COMMENT_STATE = 91; -var HCRC_STATE = 103; -var BUSY_STATE = 113; -var FINISH_STATE = 666; - -var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ -var BS_BLOCK_DONE = 2; /* block flush performed */ -var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ -var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - -var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - -function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; -} - -function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); -} - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - -/* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ -function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } -} - - -function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); -} - - -function put_byte(s, b) { - s.pending_buf[s.pending++] = b; -} - - -/* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ -function putShortMSB(s, b) { -// put_byte(s, (Byte)(b >> 8)); -// put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; -} - - -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ -function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; -} - - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ -function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; -} - - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; -//#if MIN_MATCH != 3 -// Call update_hash() MIN_MATCH-3 more times -//#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ -// if (s.high_water < s.window_size) { -// var curr = s.strstart + s.lookahead; -// var init = 0; -// -// if (s.high_water < curr) { -// /* Previous high water mark below current data -- zero WIN_INIT -// * bytes or up to end of window, whichever is less. -// */ -// init = s.window_size - curr; -// if (init > WIN_INIT) -// init = WIN_INIT; -// zmemzero(s->window + curr, (unsigned)init); -// s->high_water = curr + init; -// } -// else if (s->high_water < (ulg)curr + WIN_INIT) { -// /* High water mark at or above current data, but below current data -// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up -// * to end of window, whichever is less. -// */ -// init = (ulg)curr + WIN_INIT - s->high_water; -// if (init > s->window_size - s->high_water) -// init = s->window_size - s->high_water; -// zmemzero(s->window + s->high_water, (unsigned)init); -// s->high_water += init; -// } -// } -// -// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, -// "not enough room for search"); -} - -/* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ -function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); -// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || -// s.block_start >= s.w_size)) { -// throw new Error("slide too late"); -// } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); -// if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; -} - -/* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - -//#if MIN_MATCH != 3 -// Call UPDATE_HASH() MIN_MATCH-3 more times -//#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; -} - - -/* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ -function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ -function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; -} - -var configuration_table; - -configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ -]; - - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; -} - - -function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ - zero(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; - zero(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ -} - - -function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; -} - - -function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; -} - - -function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; -} - - -function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); -} - -function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -} - - -function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - -//#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } -//#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; -} - -function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; -} - - -/* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ -function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; -} - - -exports.deflateInit = deflateInit; -exports.deflateInit2 = deflateInit2; -exports.deflateReset = deflateReset; -exports.deflateResetKeep = deflateResetKeep; -exports.deflateSetHeader = deflateSetHeader; -exports.deflate = deflate; -exports.deflateEnd = deflateEnd; -exports.deflateSetDictionary = deflateSetDictionary; -exports.deflateInfo = 'pako deflate (from Nodeca project)'; - -/* Not implemented -exports.deflateBound = deflateBound; -exports.deflateCopy = deflateCopy; -exports.deflateParams = deflateParams; -exports.deflatePending = deflatePending; -exports.deflatePrime = deflatePrime; -exports.deflateTune = deflateTune; -*/ diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/gzheader.js b/skills/flight-finder/node_modules/pako/lib/zlib/gzheader.js deleted file mode 100644 index 300bdee..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/gzheader.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - - -function GZheader() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; -} - -module.exports = GZheader; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/inffast.js b/skills/flight-finder/node_modules/pako/lib/zlib/inffast.js deleted file mode 100644 index a419f65..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/inffast.js +++ /dev/null @@ -1,326 +0,0 @@ -'use strict'; - -// See state defs from inflate.js -var BAD = 30; /* got a data error -- remain here until reset */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - -/* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ -module.exports = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ -//#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ -//#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); -//#ifdef INFLATE_STRICT - dmax = state.dmax; -//#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); -//#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } -//#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// if (len <= op - whave) { -// do { -// output[_out++] = 0; -// } while (--len); -// continue top; -// } -// len -= op - whave; -// do { -// output[_out++] = 0; -// } while (--op > whave); -// if (op === 0) { -// from = _out - dist; -// do { -// output[_out++] = output[from++]; -// } while (--len); -// continue top; -// } -//#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; -}; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/inflate.js b/skills/flight-finder/node_modules/pako/lib/zlib/inflate.js deleted file mode 100644 index 3be8b62..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/inflate.js +++ /dev/null @@ -1,1538 +0,0 @@ -'use strict'; - - -var utils = require('../utils/common'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var inflate_fast = require('./inffast'); -var inflate_table = require('./inftrees'); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -//var Z_NO_FLUSH = 0; -//var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -//var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - -/* The deflate compression method */ -var Z_DEFLATED = 8; - - -/* STATES ====================================================================*/ -/* ===========================================================================*/ - - -var HEAD = 1; /* i: waiting for magic header */ -var FLAGS = 2; /* i: waiting for method and flags (gzip) */ -var TIME = 3; /* i: waiting for modification time (gzip) */ -var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ -var EXLEN = 5; /* i: waiting for extra length (gzip) */ -var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ -var NAME = 7; /* i: waiting for end of file name (gzip) */ -var COMMENT = 8; /* i: waiting for end of comment (gzip) */ -var HCRC = 9; /* i: waiting for header crc (gzip) */ -var DICTID = 10; /* i: waiting for dictionary check value */ -var DICT = 11; /* waiting for inflateSetDictionary() call */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ -var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ -var STORED = 14; /* i: waiting for stored size (length and complement) */ -var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ -var COPY = 16; /* i/o: waiting for input or output to copy stored block */ -var TABLE = 17; /* i: waiting for dynamic block table lengths */ -var LENLENS = 18; /* i: waiting for code length code lengths */ -var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ -var LEN_ = 20; /* i: same as LEN below, but only first time in */ -var LEN = 21; /* i: waiting for length/lit/eob code */ -var LENEXT = 22; /* i: waiting for length extra bits */ -var DIST = 23; /* i: waiting for distance code */ -var DISTEXT = 24; /* i: waiting for distance extra bits */ -var MATCH = 25; /* o: waiting for output space to copy string */ -var LIT = 26; /* o: waiting for output space to write literal */ -var CHECK = 27; /* i: waiting for 32-bit check value */ -var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ -var DONE = 29; /* finished check, done -- remain here until reset */ -var BAD = 30; /* got a data error -- remain here until reset */ -var MEM = 31; /* got an inflate() memory error -- remain here until reset */ -var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - -/* ===========================================================================*/ - - - -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_WBITS = MAX_WBITS; - - -function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); -} - - -function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ - this.work = new utils.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ -} - -function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - -function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - -} - -function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); -} - -function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null/*Z_NULL*/; - } - return ret; -} - -function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); -} - - -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -var virgin = true; - -var lenfix, distfix; // We have no pointers in JS, so keep tables separate - -function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; -} - - -/* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ -function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new utils.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - utils.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - utils.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; -} - -function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR; - } - - state = strm.state; - if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more conveniend processing later - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - utils.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// -//#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD; - break; - } -//#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } -//#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -//#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// Trace((stderr, "inflate.c too far\n")); -// copy -= state.whave; -// if (copy > state.length) { copy = state.length; } -// if (copy > left) { copy = left; } -// left -= copy; -// state.length -= copy; -// do { -// output[put++] = 0; -// } while (--copy); -// if (state.length === 0) { state.mode = LEN; } -// break; -//#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' insdead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { - ret = Z_BUF_ERROR; - } - return ret; -} - -function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; -} - -function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK; -} - -function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; -} - -exports.inflateReset = inflateReset; -exports.inflateReset2 = inflateReset2; -exports.inflateResetKeep = inflateResetKeep; -exports.inflateInit = inflateInit; -exports.inflateInit2 = inflateInit2; -exports.inflate = inflate; -exports.inflateEnd = inflateEnd; -exports.inflateGetHeader = inflateGetHeader; -exports.inflateSetDictionary = inflateSetDictionary; -exports.inflateInfo = 'pako inflate (from Nodeca project)'; - -/* Not implemented -exports.inflateCopy = inflateCopy; -exports.inflateGetDictionary = inflateGetDictionary; -exports.inflateMark = inflateMark; -exports.inflatePrime = inflatePrime; -exports.inflateSync = inflateSync; -exports.inflateSyncPoint = inflateSyncPoint; -exports.inflateUndermine = inflateUndermine; -*/ diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/inftrees.js b/skills/flight-finder/node_modules/pako/lib/zlib/inftrees.js deleted file mode 100644 index 16e4d52..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/inftrees.js +++ /dev/null @@ -1,327 +0,0 @@ -'use strict'; - - -var utils = require('../utils/common'); - -var MAXBITS = 15; -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 -]; - -var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 -]; - -var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 -]; - -var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 -]; - -module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) -{ - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; -// var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - var i = 0; - /* process all codes and make table entries */ - for (;;) { - i++; - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; -}; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/messages.js b/skills/flight-finder/node_modules/pako/lib/zlib/messages.js deleted file mode 100644 index d022f0f..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/messages.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -module.exports = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ -}; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/trees.js b/skills/flight-finder/node_modules/pako/lib/zlib/trees.js deleted file mode 100644 index cef5f15..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/trees.js +++ /dev/null @@ -1,1202 +0,0 @@ -'use strict'; - - -var utils = require('../utils/common'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -//var Z_FILTERED = 1; -//var Z_HUFFMAN_ONLY = 2; -//var Z_RLE = 3; -var Z_FIXED = 4; -//var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -var Z_BINARY = 0; -var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - -/*============================================================================*/ - - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - -// From zutil.h - -var STORED_BLOCK = 0; -var STATIC_TREES = 1; -var DYN_TREES = 2; -/* The three kinds of block type */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -/* The minimum and maximum match lengths */ - -// From deflate.h -/* =========================================================================== - * Internal compression state. - */ - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ - -var LITERALS = 256; -/* number of literal bytes 0..255 */ - -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ - -var D_CODES = 30; -/* number of distance codes */ - -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ - -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ - -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var Buf_size = 16; -/* size of bit buffer in bi_buf */ - - -/* =========================================================================== - * Constants - */ - -var MAX_BL_BITS = 7; -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -var END_BLOCK = 256; -/* end of block literal code */ - -var REP_3_6 = 16; -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -var REPZ_3_10 = 17; -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -var REPZ_11_138 = 18; -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -/* eslint-disable comma-spacing,array-bracket-spacing */ -var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - -var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - -var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - -var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; -/* eslint-enable comma-spacing,array-bracket-spacing */ - -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -// We pre-fill arrays with 0 to avoid uninitialized gaps - -var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - -// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 -var static_ltree = new Array((L_CODES + 2) * 2); -zero(static_ltree); -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -var static_dtree = new Array(D_CODES * 2); -zero(static_dtree); -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -var _dist_code = new Array(DIST_CODE_LEN); -zero(_dist_code); -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); -zero(_length_code); -/* length code for each normalized match length (0 == MIN_MATCH) */ - -var base_length = new Array(LENGTH_CODES); -zero(base_length); -/* First normalized length for each code (0 = MIN_MATCH) */ - -var base_dist = new Array(D_CODES); -zero(base_dist); -/* First normalized distance for each code (0 = distance of 1) */ - - -function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; -} - - -var static_l_desc; -var static_d_desc; -var static_bl_desc; - - -function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ -} - - - -function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; -} - - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -function put_short(s, w) { -// put_byte(s, (uch)((w) & 0xff)); -// put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; -} - - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } -} - - -function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); -} - - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; -} - - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } -} - - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -function gen_bitlen(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } -} - - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -function gen_codes(tree, max_code, bl_count) -// ct_data *tree; /* the tree to decorate */ -// int max_code; /* largest code with non zero frequency */ -// ushf *bl_count; /* number of codes at each bit length */ -{ - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; -} - - -/* =========================================================================== - * Initialize a new block. - */ -function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; -} - - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -function bi_windup(s) -{ - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -function copy_block(s, buf, len, header) -//DeflateState *s; -//charf *buf; /* the input data */ -//unsigned len; /* its length */ -//int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } -// while (len--) { -// put_byte(s, *buf++); -// } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); -} - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -function pqdownheap(s, tree, k) -// deflate_state *s; -// ct_data *tree; /* the tree to restore */ -// int k; /* node to move down */ -{ - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; -} - - -// inlined manually -// var SMALLEST = 1; - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -function compress_block(s, ltree, dtree) -// deflate_state *s; -// const ct_data *ltree; /* literal tree */ -// const ct_data *dtree; /* distance tree */ -{ - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); -} - - -/* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ -function build_tree(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); -} - - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -function scan_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -function send_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; -} - - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -function send_all_trees(s, lcodes, dcodes, blcodes) -// deflate_state *s; -// int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - - -var static_init_done = false; - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -function _tr_init(s) -{ - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); -} - - -/* =========================================================================== - * Send a stored block - */ -function _tr_stored_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ -} - - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ -function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); -} - - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -function _tr_flush_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block, or NULL if too old */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -function _tr_tally(s, dist, lc) -// deflate_state *s; -// unsigned dist; /* distance of matched string */ -// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - -// (!) This block is disabled in zlib defailts, -// don't enable it for binary compatibility - -//#ifdef TRUNCATE_BLOCK -// /* Try to guess if it is profitable to stop the current block here */ -// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { -// /* Compute an upper bound for the compressed length */ -// out_length = s.last_lit*8; -// in_length = s.strstart - s.block_start; -// -// for (dcode = 0; dcode < D_CODES; dcode++) { -// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); -// } -// out_length >>>= 3; -// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", -// // s->last_lit, in_length, out_length, -// // 100L - out_length*100L/in_length)); -// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { -// return true; -// } -// } -//#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -exports._tr_init = _tr_init; -exports._tr_stored_block = _tr_stored_block; -exports._tr_flush_block = _tr_flush_block; -exports._tr_tally = _tr_tally; -exports._tr_align = _tr_align; diff --git a/skills/flight-finder/node_modules/pako/lib/zlib/zstream.js b/skills/flight-finder/node_modules/pako/lib/zlib/zstream.js deleted file mode 100644 index 2d93a39..0000000 --- a/skills/flight-finder/node_modules/pako/lib/zlib/zstream.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - - -function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; -} - -module.exports = ZStream; diff --git a/skills/flight-finder/node_modules/pako/package.json b/skills/flight-finder/node_modules/pako/package.json deleted file mode 100644 index 83ff566..0000000 --- a/skills/flight-finder/node_modules/pako/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "pako", - "description": "zlib port to javascript - fast, modularized, with browser support", - "version": "0.2.9", - "keywords": [ - "zlib", - "deflate", - "inflate", - "gzip" - ], - "homepage": "https://github.com/nodeca/pako", - "contributors": [ - "Andrei Tuputcyn (https://github.com/andr83)", - "Vitaly Puzrin (https://github.com/puzrin)" - ], - "files": [ - "index.js", - "dist/", - "lib/" - ], - "license": "MIT", - "repository": "nodeca/pako", - "devDependencies": { - "mocha": "1.21.5", - "benchmark": "*", - "ansi": "*", - "browserify": "*", - "eslint": "^2.1.0", - "eslint-plugin-nodeca": "~1.0.3", - "uglify-js": "*", - "istanbul": "*", - "ndoc": "*", - "lodash": "*", - "async": "*", - "grunt": "~0.4.4", - "grunt-cli": "~0.1.13", - "grunt-saucelabs": "~8.6.0", - "grunt-contrib-connect": "~0.9.0" - } -} diff --git a/skills/flight-finder/node_modules/pdfkit/CHANGELOG.md b/skills/flight-finder/node_modules/pdfkit/CHANGELOG.md deleted file mode 100644 index a7babc9..0000000 --- a/skills/flight-finder/node_modules/pdfkit/CHANGELOG.md +++ /dev/null @@ -1,134 +0,0 @@ -## pdfkit changelog - -### Unreleased - -### [v0.17.2] - 2025-08-30 - -- Fix rendering lists that spans across pages - -### [v0.17.1] - 2025-05-02 - -- Fix null values in table cells rendering as `[object Object]` -- Fix further LineWrapper precision issues -- Optmize standard font handling. Less code, less memory usage - -### [v0.17.0] - 2025-04-12 - -- Fix precision rounding issues in LineWrapper -- Fix fonts without a postscriptName -- Add support for dynamic sizing -- Add support for rotatable text -- Fix page cascade options when text overflows -- Add table generation -- Fix y position when using `image()` without x and y coordinates -- Improve Prettier configuration - -### [v0.16.0] - 2024-12-29 - -- Update fontkit to 2.0 -- Update linebreak to 1.1 -- Add support for spot colors -- Add support to scale text horizontally -- Add an option to keep the indentation after a new line starts and allow to indent a whole paragraph/text element -- Add `Name` property for set custom icon for `note()` -- Fix sets tab order to "Structure" when a document is tagged -- Fix font cache collision for fonts with missing postscript name or bad TTF metadata or identical metadata for different fonts -- Fix for embedding fonts into PDF (font name must not contain spaces) -- Fix measuring text when OpenType features are passed in to .text() - -### [v0.15.2] - 2024-12-15 - -- Fix index not counting when rendering ordered lists (#1517) -- Fix PDF/A3 compliance of attachments -- Fix CIDSet generation only for PDF/A1 subset -- Fix missing acroform font dictionary -- Fix modify time comparison check equality embedded files - -### [v0.15.1] - 2024-10-30 - -- Fix browserify transform sRGB_IEC61966_2_1.icc file -- Fix time comparison check equality embedded files - -### [v0.15.0] - 2024-03-23 - -- Add subset for PDF/UA -- Fix for line breaks in list items (#1486) -- Fix for soft hyphen not being replaced by visible hyphen if necessary (#457) -- Optimize output files by ignoring identity transforms -- Fix for Acroforms - setting an option to false will still apply the flag (#1495) -- Fix for text extraction in PDFium-based viewers due to invalid ToUnicodeMap (#1498) -- Remove deprecated `write` method -- Drop support for Node.js < 18 and for browsers released before 2020 - -### [v0.14.0] - 2023-11-09 - -- Add support for PDF/A-1b, PDF/A-1a, PDF/A-2b, PDF/A-2a, PDF/A-3b, PDF/A-3a -- Update crypto-js to v4.2.0 (properly fix security issue) - -- Add support for EXIF orientation on JPEG images (#626 and #1353) - -### [v0.13.0] - 2021-10-24 - -- Add tiling pattern support - -### [v0.12.3] - 2021-08-01 - -- Remove examples from published package - -### [v0.12.2] - 2021-08-01 - -- Fix for PDF accessibility check. (#1265) -- Allow applying 'underline' and 'strike' text styling together on a text -- Allow to specify the AcroForm text fontSize -- Update crypto-js to v4.0 (properly fix security issue) - -### [v0.12.1] - 2021-04-10 - -- Update crypto-js to v3.3 (fix security issue) -- Update fontkit to 1.8.1 - -### [v0.12.0] - 2021-04-04 - -- Add support for Embedded Files and File Attachment Annotations -- Accessibility support -- Replace integration tests by visual regression tests -- Fix access permissions in PDF version 1.7ext3 -- Fix Buffer() is deprecation warning -- Add `forms.md` to generate documentation files -- Fix "@" in FontName - -### [v0.11.0] - 2019-12-03 - -- Fix infinite loop when an individual character is bigger than the width of the text. -- Fix infinite loop when text is positioned after page right margin -- Allow links in continued text to be stopped by setting link to null -- Add support to interlaced PNG files -- Do not emit \_interopDefault helper in commonjs build -- Fix gradient with multiple stops (#1045) -- Set link annotation flag to print by default -- Add support for AcroForms -- Drop support for (uncommon) cid less fonts on standalone build (reduces bundle size) - -### [v0.10.0] - 2019-06-06 - -- Fix links to pages within the document -- Add support for named destinations -- Throw errors when `dash(...)` is passed invalid lengths -- Remove PDFDocument#output method -- Add standalone build (js/pdfkit.standalone.js) - -### [v0.9.1] - 2019-04-30 - -- Fix setting printing permission -- Fix corruption of string objects in browser -- Add option to set default font -- Remove call to fontkit.openSync -- Add standalone virtual file system implementation -- Add option (fontLayoutCache) to disable font layout cache - -### [v0.9.0] - 2019-01-28 - -- Convert to code base from coffescript to ES6+ -- Fix loading grayscale / transparent PNG files -- Reduce number of calls to async functions -- Implement encryption / access control diff --git a/skills/flight-finder/node_modules/pdfkit/LICENSE b/skills/flight-finder/node_modules/pdfkit/LICENSE deleted file mode 100644 index 48a2007..0000000 --- a/skills/flight-finder/node_modules/pdfkit/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -MIT LICENSE -Copyright (c) 2014 Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/README.md b/skills/flight-finder/node_modules/pdfkit/README.md deleted file mode 100644 index 35fc883..0000000 --- a/skills/flight-finder/node_modules/pdfkit/README.md +++ /dev/null @@ -1,182 +0,0 @@ -# PDFKit - -A JavaScript PDF generation library for Node and the browser. - -## Description - -PDFKit is a PDF document generation library for Node and the browser that makes creating complex, multi-page, printable -documents easy. The API embraces chainability, and includes both low level functions as well as abstractions for higher -level functionality. The PDFKit API is designed to be simple, so generating complex documents is often as simple as -a few function calls. - -Check out some of the [documentation and examples](http://pdfkit.org/docs/getting_started.html) to see for yourself! -You can also read the guide as a [self-generated PDF](http://pdfkit.org/docs/guide.pdf) with example output displayed inline. -If you'd like to see how it was generated, check out the README in the [docs](https://github.com/foliojs/pdfkit/tree/master/docs) -folder. - -You can also try out an interactive in-browser demo of PDFKit [here](http://pdfkit.org/demo/browser.html). - -## Installation - -Installation uses the [npm](http://npmjs.org/) package manager. Just type the following command after installing npm. - - npm install pdfkit - -## Features - -- Vector graphics - - HTML5 canvas-like API - - Path operations - - SVG path parser for easy path creation - - Transformations - - Linear and radial gradients -- Text - - Line wrapping (with soft hyphen recognition) - - Text alignments - - Bulleted lists -- Font embedding - - Supports TrueType (.ttf), OpenType (.otf), WOFF, WOFF2, TrueType Collections (.ttc), and Datafork TrueType (.dfont) fonts - - Font subsetting - - See [fontkit](http://github.com/foliojs/fontkit) for more details on advanced glyph layout support. -- Image embedding - - Supports JPEG and PNG files (including indexed PNGs, and PNGs with transparency) -- Annotations - - Links - - Notes - - Highlights - - Underlines - - etc. -- AcroForms -- Outlines -- PDF security - - Encryption - - Access privileges (printing, copying, modifying, annotating, form filling, content accessibility, document assembly) -- Accessibility support (marked content, logical structure, Tagged PDF, PDF/UA) - -## Coming soon! - -- Patterns fills -- Higher level APIs for creating tables and laying out content -- More performance optimizations -- Even more awesomeness, perhaps written by you! Please fork this repository and send me pull requests. - -## Example - -```javascript -const PDFDocument = require('pdfkit'); -const fs = require('fs'); - -// Create a document -const doc = new PDFDocument(); - -// Pipe its output somewhere, like to a file or HTTP response -// See below for browser usage -doc.pipe(fs.createWriteStream('output.pdf')); - -// Embed a font, set the font size, and render some text -doc - .font('fonts/PalatinoBold.ttf') - .fontSize(25) - .text('Some text with an embedded font!', 100, 100); - -// Add an image, constrain it to a given size, and center it vertically and horizontally -doc.image('path/to/image.png', { - fit: [250, 300], - align: 'center', - valign: 'center' -}); - -// Add another page -doc - .addPage() - .fontSize(25) - .text('Here is some vector graphics...', 100, 100); - -// Draw a triangle -doc - .save() - .moveTo(100, 150) - .lineTo(100, 250) - .lineTo(200, 250) - .fill('#FF3300'); - -// Apply some transforms and render an SVG path with the 'even-odd' fill rule -doc - .scale(0.6) - .translate(470, -380) - .path('M 250,75 L 323,301 131,161 369,161 177,301 z') - .fill('red', 'even-odd') - .restore(); - -// Add some text with annotations -doc - .addPage() - .fillColor('blue') - .text('Here is a link!', 100, 100) - .underline(100, 100, 160, 27, { color: '#0000FF' }) - .link(100, 100, 160, 27, 'http://google.com/'); - -// Finalize PDF file -doc.end(); -``` - -[The PDF output from this example](http://pdfkit.org/demo/out.pdf) (with a few additions) shows the power of PDFKit — producing -complex documents with a very small amount of code. For more, see the `demo` folder and the -[PDFKit programming guide](http://pdfkit.org/docs/getting_started.html). - -## Browser Usage - -There are three ways to use PDFKit in the browser: - -- Use [Browserify](http://browserify.org/). See demo [source code](https://github.com/foliojs/pdfkit/blob/master/examples/browserify/browser.js) and [build script](https://github.com/foliojs/pdfkit/blob/master/package.json#L62) -- Use [webpack](https://webpack.js.org/). See [complete example](https://github.com/foliojs/pdfkit/blob/master/examples/webpack). -- Use prebuilt version. Distributed as `pdfkit.standalone.js` file in the [releases](https://github.com/foliojs/pdfkit/releases) or in the package `js` folder. - -In addition to PDFKit, you'll need somewhere to stream the output to. HTML5 has a -[Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) object which can be used to store binary data, and -get URLs to this data in order to display PDF output inside an iframe, or upload to a server, etc. In order to -get a Blob from the output of PDFKit, you can use the [blob-stream](https://github.com/devongovett/blob-stream) -module. - -The following example uses Browserify or webpack to load `PDFKit` and `blob-stream`. See [here](https://codepen.io/blikblum/pen/gJNWMg?editors=1010) and [here](https://codepen.io/blikblum/pen/YboVNq?editors=1010) for examples -of prebuilt version usage. - -```javascript -// require dependencies -const PDFDocument = require('pdfkit'); -const blobStream = require('blob-stream'); - -// create a document the same way as above -const doc = new PDFDocument(); - -// pipe the document to a blob -const stream = doc.pipe(blobStream()); - -// add your content to the document here, as usual - -// get a blob when you are done -doc.end(); -stream.on('finish', function() { - // get a blob you can do whatever you like with - const blob = stream.toBlob('application/pdf'); - - // or get a blob URL for display in the browser - const url = stream.toBlobURL('application/pdf'); - iframe.src = url; -}); -``` - -You can see an interactive in-browser demo of PDFKit [here](http://pdfkit.org/demo/browser.html). - -Note that in order to Browserify a project using PDFKit, you need to install the `brfs` module with npm, -which is used to load built-in font data into the package. It is listed as a `devDependency` in -PDFKit's `package.json`, so it isn't installed by default for Node users. -If you forget to install it, Browserify will print an error message. - -## Documentation - -For complete API documentation and more examples, see the [PDFKit website](http://pdfkit.org/). - -## License - -PDFKit is available under the MIT license. diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Bold.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Bold.afm deleted file mode 100644 index d25d776..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Bold.afm +++ /dev/null @@ -1,342 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Mon Jun 23 16:28:00 1997 -Comment UniqueID 43048 -Comment VMusage 41139 52164 -FontName Courier-Bold -FullName Courier Bold -FamilyName Courier -Weight Bold -ItalicAngle 0 -IsFixedPitch true -CharacterSet ExtendedRoman -FontBBox -113 -250 749 801 -UnderlinePosition -100 -UnderlineThickness 50 -Version 003.000 -Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -EncodingScheme AdobeStandardEncoding -CapHeight 562 -XHeight 439 -Ascender 629 -Descender -157 -StdHW 84 -StdVW 106 -StartCharMetrics 315 -C 32 ; WX 600 ; N space ; B 0 0 0 0 ; -C 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ; -C 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ; -C 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ; -C 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ; -C 37 ; WX 600 ; N percent ; B 5 -15 595 616 ; -C 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ; -C 39 ; WX 600 ; N quoteright ; B 171 277 423 562 ; -C 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ; -C 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ; -C 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ; -C 43 ; WX 600 ; N plus ; B 71 39 529 478 ; -C 44 ; WX 600 ; N comma ; B 123 -111 393 174 ; -C 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ; -C 46 ; WX 600 ; N period ; B 192 -15 408 171 ; -C 47 ; WX 600 ; N slash ; B 98 -77 502 626 ; -C 48 ; WX 600 ; N zero ; B 87 -15 513 616 ; -C 49 ; WX 600 ; N one ; B 81 0 539 616 ; -C 50 ; WX 600 ; N two ; B 61 0 499 616 ; -C 51 ; WX 600 ; N three ; B 63 -15 501 616 ; -C 52 ; WX 600 ; N four ; B 53 0 507 616 ; -C 53 ; WX 600 ; N five ; B 70 -15 521 601 ; -C 54 ; WX 600 ; N six ; B 90 -15 521 616 ; -C 55 ; WX 600 ; N seven ; B 55 0 494 601 ; -C 56 ; WX 600 ; N eight ; B 83 -15 517 616 ; -C 57 ; WX 600 ; N nine ; B 79 -15 510 616 ; -C 58 ; WX 600 ; N colon ; B 191 -15 407 425 ; -C 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ; -C 60 ; WX 600 ; N less ; B 66 15 523 501 ; -C 61 ; WX 600 ; N equal ; B 71 118 529 398 ; -C 62 ; WX 600 ; N greater ; B 77 15 534 501 ; -C 63 ; WX 600 ; N question ; B 98 -14 501 580 ; -C 64 ; WX 600 ; N at ; B 16 -15 584 616 ; -C 65 ; WX 600 ; N A ; B -9 0 609 562 ; -C 66 ; WX 600 ; N B ; B 30 0 573 562 ; -C 67 ; WX 600 ; N C ; B 22 -18 560 580 ; -C 68 ; WX 600 ; N D ; B 30 0 594 562 ; -C 69 ; WX 600 ; N E ; B 25 0 560 562 ; -C 70 ; WX 600 ; N F ; B 39 0 570 562 ; -C 71 ; WX 600 ; N G ; B 22 -18 594 580 ; -C 72 ; WX 600 ; N H ; B 20 0 580 562 ; -C 73 ; WX 600 ; N I ; B 77 0 523 562 ; -C 74 ; WX 600 ; N J ; B 37 -18 601 562 ; -C 75 ; WX 600 ; N K ; B 21 0 599 562 ; -C 76 ; WX 600 ; N L ; B 39 0 578 562 ; -C 77 ; WX 600 ; N M ; B -2 0 602 562 ; -C 78 ; WX 600 ; N N ; B 8 -12 610 562 ; -C 79 ; WX 600 ; N O ; B 22 -18 578 580 ; -C 80 ; WX 600 ; N P ; B 48 0 559 562 ; -C 81 ; WX 600 ; N Q ; B 32 -138 578 580 ; -C 82 ; WX 600 ; N R ; B 24 0 599 562 ; -C 83 ; WX 600 ; N S ; B 47 -22 553 582 ; -C 84 ; WX 600 ; N T ; B 21 0 579 562 ; -C 85 ; WX 600 ; N U ; B 4 -18 596 562 ; -C 86 ; WX 600 ; N V ; B -13 0 613 562 ; -C 87 ; WX 600 ; N W ; B -18 0 618 562 ; -C 88 ; WX 600 ; N X ; B 12 0 588 562 ; -C 89 ; WX 600 ; N Y ; B 12 0 589 562 ; -C 90 ; WX 600 ; N Z ; B 62 0 539 562 ; -C 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ; -C 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ; -C 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ; -C 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ; -C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; -C 96 ; WX 600 ; N quoteleft ; B 178 277 428 562 ; -C 97 ; WX 600 ; N a ; B 35 -15 570 454 ; -C 98 ; WX 600 ; N b ; B 0 -15 584 626 ; -C 99 ; WX 600 ; N c ; B 40 -15 545 459 ; -C 100 ; WX 600 ; N d ; B 20 -15 591 626 ; -C 101 ; WX 600 ; N e ; B 40 -15 563 454 ; -C 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ; -C 103 ; WX 600 ; N g ; B 30 -146 580 454 ; -C 104 ; WX 600 ; N h ; B 5 0 592 626 ; -C 105 ; WX 600 ; N i ; B 77 0 523 658 ; -C 106 ; WX 600 ; N j ; B 63 -146 440 658 ; -C 107 ; WX 600 ; N k ; B 20 0 585 626 ; -C 108 ; WX 600 ; N l ; B 77 0 523 626 ; -C 109 ; WX 600 ; N m ; B -22 0 626 454 ; -C 110 ; WX 600 ; N n ; B 18 0 592 454 ; -C 111 ; WX 600 ; N o ; B 30 -15 570 454 ; -C 112 ; WX 600 ; N p ; B -1 -142 570 454 ; -C 113 ; WX 600 ; N q ; B 20 -142 591 454 ; -C 114 ; WX 600 ; N r ; B 47 0 580 454 ; -C 115 ; WX 600 ; N s ; B 68 -17 535 459 ; -C 116 ; WX 600 ; N t ; B 47 -15 532 562 ; -C 117 ; WX 600 ; N u ; B -1 -15 569 439 ; -C 118 ; WX 600 ; N v ; B -1 0 601 439 ; -C 119 ; WX 600 ; N w ; B -18 0 618 439 ; -C 120 ; WX 600 ; N x ; B 6 0 594 439 ; -C 121 ; WX 600 ; N y ; B -4 -142 601 439 ; -C 122 ; WX 600 ; N z ; B 81 0 520 439 ; -C 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ; -C 124 ; WX 600 ; N bar ; B 255 -250 345 750 ; -C 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ; -C 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ; -C 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ; -C 162 ; WX 600 ; N cent ; B 66 -49 518 614 ; -C 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ; -C 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ; -C 165 ; WX 600 ; N yen ; B 10 0 590 562 ; -C 166 ; WX 600 ; N florin ; B -30 -131 572 616 ; -C 167 ; WX 600 ; N section ; B 83 -70 517 580 ; -C 168 ; WX 600 ; N currency ; B 54 49 546 517 ; -C 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ; -C 174 ; WX 600 ; N fi ; B 12 0 593 626 ; -C 175 ; WX 600 ; N fl ; B 12 0 593 626 ; -C 177 ; WX 600 ; N endash ; B 65 203 535 313 ; -C 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ; -C 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ; -C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ; -C 183 ; WX 600 ; N bullet ; B 140 132 460 430 ; -C 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ; -C 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ; -C 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ; -C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ; -C 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ; -C 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ; -C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ; -C 193 ; WX 600 ; N grave ; B 132 508 395 661 ; -C 194 ; WX 600 ; N acute ; B 205 508 468 661 ; -C 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ; -C 196 ; WX 600 ; N tilde ; B 89 493 512 636 ; -C 197 ; WX 600 ; N macron ; B 88 505 512 585 ; -C 198 ; WX 600 ; N breve ; B 83 468 517 631 ; -C 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ; -C 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ; -C 202 ; WX 600 ; N ring ; B 198 481 402 678 ; -C 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ; -C 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ; -C 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ; -C 207 ; WX 600 ; N caron ; B 103 493 497 667 ; -C 208 ; WX 600 ; N emdash ; B -10 203 610 313 ; -C 225 ; WX 600 ; N AE ; B -29 0 602 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ; -C 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ; -C 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ; -C 234 ; WX 600 ; N OE ; B -25 0 595 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ; -C 241 ; WX 600 ; N ae ; B -4 -15 601 454 ; -C 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ; -C 248 ; WX 600 ; N lslash ; B 77 0 523 626 ; -C 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ; -C 250 ; WX 600 ; N oe ; B -18 -15 611 454 ; -C 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ; -C -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ; -C -1 ; WX 600 ; N eacute ; B 40 -15 563 661 ; -C -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ; -C -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ; -C -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ; -C -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ; -C -1 ; WX 600 ; N divide ; B 71 16 529 500 ; -C -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ; -C -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ; -C -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ; -C -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ; -C -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ; -C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ; -C -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ; -C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ; -C -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ; -C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ; -C -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ; -C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ; -C -1 ; WX 600 ; N Edieresis ; B 25 0 560 761 ; -C -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ; -C -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ; -C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; -C -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ; -C -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ; -C -1 ; WX 600 ; N aring ; B 35 -15 570 678 ; -C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ; -C -1 ; WX 600 ; N lacute ; B 77 0 523 801 ; -C -1 ; WX 600 ; N agrave ; B 35 -15 570 661 ; -C -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ; -C -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ; -C -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ; -C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ; -C -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ; -C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ; -C -1 ; WX 600 ; N iacute ; B 77 0 523 661 ; -C -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ; -C -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ; -C -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ; -C -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ; -C -1 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ; -C -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ; -C -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ; -C -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ; -C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ; -C -1 ; WX 600 ; N Thorn ; B 48 0 557 562 ; -C -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ; -C -1 ; WX 600 ; N Racute ; B 24 0 599 784 ; -C -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ; -C -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ; -C -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ; -C -1 ; WX 600 ; N uring ; B -1 -15 569 678 ; -C -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ; -C -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ; -C -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ; -C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ; -C -1 ; WX 600 ; N multiply ; B 81 39 520 478 ; -C -1 ; WX 600 ; N uacute ; B -1 -15 569 661 ; -C -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ; -C -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ; -C -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ; -C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ; -C -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ; -C -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ; -C -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ; -C -1 ; WX 600 ; N edieresis ; B 40 -15 563 638 ; -C -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ; -C -1 ; WX 600 ; N nacute ; B 18 0 592 661 ; -C -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ; -C -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ; -C -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ; -C -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ; -C -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ; -C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; -C -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ; -C -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ; -C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; -C -1 ; WX 600 ; N Egrave ; B 25 0 560 784 ; -C -1 ; WX 600 ; N racute ; B 47 0 580 661 ; -C -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ; -C -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ; -C -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ; -C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ; -C -1 ; WX 600 ; N Eth ; B 30 0 594 562 ; -C -1 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ; -C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ; -C -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ; -C -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ; -C -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ; -C -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ; -C -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ; -C -1 ; WX 600 ; N egrave ; B 40 -15 563 661 ; -C -1 ; WX 600 ; N zacute ; B 81 0 520 661 ; -C -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ; -C -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ; -C -1 ; WX 600 ; N oacute ; B 30 -15 570 661 ; -C -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ; -C -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ; -C -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ; -C -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ; -C -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ; -C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; -C -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ; -C -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ; -C -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ; -C -1 ; WX 600 ; N mu ; B -1 -142 569 439 ; -C -1 ; WX 600 ; N igrave ; B 77 0 523 661 ; -C -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ; -C -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ; -C -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ; -C -1 ; WX 600 ; N threequarters ; B -47 -60 648 661 ; -C -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ; -C -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ; -C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ; -C -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ; -C -1 ; WX 600 ; N trademark ; B -9 230 749 562 ; -C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ; -C -1 ; WX 600 ; N Igrave ; B 77 0 523 784 ; -C -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ; -C -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ; -C -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ; -C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ; -C -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ; -C -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ; -C -1 ; WX 600 ; N Eacute ; B 25 0 560 784 ; -C -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ; -C -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ; -C -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ; -C -1 ; WX 600 ; N Scaron ; B 47 -22 553 790 ; -C -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ; -C -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ; -C -1 ; WX 600 ; N degree ; B 86 243 474 616 ; -C -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ; -C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ; -C -1 ; WX 600 ; N ugrave ; B -1 -15 569 661 ; -C -1 ; WX 600 ; N radical ; B -19 -104 473 778 ; -C -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ; -C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ; -C -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ; -C -1 ; WX 600 ; N otilde ; B 30 -15 570 636 ; -C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ; -C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ; -C -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ; -C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ; -C -1 ; WX 600 ; N Aring ; B -9 0 609 801 ; -C -1 ; WX 600 ; N Otilde ; B 22 -18 578 759 ; -C -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ; -C -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ; -C -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ; -C -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ; -C -1 ; WX 600 ; N minus ; B 71 203 529 313 ; -C -1 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ; -C -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ; -C -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ; -C -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ; -C -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ; -C -1 ; WX 600 ; N udieresis ; B -1 -15 569 638 ; -C -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ; -C -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ; -C -1 ; WX 600 ; N eth ; B 58 -27 543 626 ; -C -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ; -C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ; -C -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ; -C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ; -C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-BoldOblique.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Courier-BoldOblique.afm deleted file mode 100644 index 9f365ee..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-BoldOblique.afm +++ /dev/null @@ -1,342 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Mon Jun 23 16:28:46 1997 -Comment UniqueID 43049 -Comment VMusage 17529 79244 -FontName Courier-BoldOblique -FullName Courier Bold Oblique -FamilyName Courier -Weight Bold -ItalicAngle -12 -IsFixedPitch true -CharacterSet ExtendedRoman -FontBBox -57 -250 869 801 -UnderlinePosition -100 -UnderlineThickness 50 -Version 003.000 -Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -EncodingScheme AdobeStandardEncoding -CapHeight 562 -XHeight 439 -Ascender 629 -Descender -157 -StdHW 84 -StdVW 106 -StartCharMetrics 315 -C 32 ; WX 600 ; N space ; B 0 0 0 0 ; -C 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ; -C 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ; -C 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ; -C 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ; -C 37 ; WX 600 ; N percent ; B 101 -15 625 616 ; -C 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ; -C 39 ; WX 600 ; N quoteright ; B 229 277 543 562 ; -C 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ; -C 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ; -C 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ; -C 43 ; WX 600 ; N plus ; B 114 39 596 478 ; -C 44 ; WX 600 ; N comma ; B 99 -111 430 174 ; -C 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ; -C 46 ; WX 600 ; N period ; B 206 -15 427 171 ; -C 47 ; WX 600 ; N slash ; B 90 -77 626 626 ; -C 48 ; WX 600 ; N zero ; B 135 -15 593 616 ; -C 49 ; WX 600 ; N one ; B 93 0 562 616 ; -C 50 ; WX 600 ; N two ; B 61 0 594 616 ; -C 51 ; WX 600 ; N three ; B 71 -15 571 616 ; -C 52 ; WX 600 ; N four ; B 81 0 559 616 ; -C 53 ; WX 600 ; N five ; B 77 -15 621 601 ; -C 54 ; WX 600 ; N six ; B 135 -15 652 616 ; -C 55 ; WX 600 ; N seven ; B 147 0 622 601 ; -C 56 ; WX 600 ; N eight ; B 115 -15 604 616 ; -C 57 ; WX 600 ; N nine ; B 75 -15 592 616 ; -C 58 ; WX 600 ; N colon ; B 205 -15 480 425 ; -C 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ; -C 60 ; WX 600 ; N less ; B 120 15 613 501 ; -C 61 ; WX 600 ; N equal ; B 96 118 614 398 ; -C 62 ; WX 600 ; N greater ; B 97 15 589 501 ; -C 63 ; WX 600 ; N question ; B 183 -14 592 580 ; -C 64 ; WX 600 ; N at ; B 65 -15 642 616 ; -C 65 ; WX 600 ; N A ; B -9 0 632 562 ; -C 66 ; WX 600 ; N B ; B 30 0 630 562 ; -C 67 ; WX 600 ; N C ; B 74 -18 675 580 ; -C 68 ; WX 600 ; N D ; B 30 0 664 562 ; -C 69 ; WX 600 ; N E ; B 25 0 670 562 ; -C 70 ; WX 600 ; N F ; B 39 0 684 562 ; -C 71 ; WX 600 ; N G ; B 74 -18 675 580 ; -C 72 ; WX 600 ; N H ; B 20 0 700 562 ; -C 73 ; WX 600 ; N I ; B 77 0 643 562 ; -C 74 ; WX 600 ; N J ; B 58 -18 721 562 ; -C 75 ; WX 600 ; N K ; B 21 0 692 562 ; -C 76 ; WX 600 ; N L ; B 39 0 636 562 ; -C 77 ; WX 600 ; N M ; B -2 0 722 562 ; -C 78 ; WX 600 ; N N ; B 8 -12 730 562 ; -C 79 ; WX 600 ; N O ; B 74 -18 645 580 ; -C 80 ; WX 600 ; N P ; B 48 0 643 562 ; -C 81 ; WX 600 ; N Q ; B 83 -138 636 580 ; -C 82 ; WX 600 ; N R ; B 24 0 617 562 ; -C 83 ; WX 600 ; N S ; B 54 -22 673 582 ; -C 84 ; WX 600 ; N T ; B 86 0 679 562 ; -C 85 ; WX 600 ; N U ; B 101 -18 716 562 ; -C 86 ; WX 600 ; N V ; B 84 0 733 562 ; -C 87 ; WX 600 ; N W ; B 79 0 738 562 ; -C 88 ; WX 600 ; N X ; B 12 0 690 562 ; -C 89 ; WX 600 ; N Y ; B 109 0 709 562 ; -C 90 ; WX 600 ; N Z ; B 62 0 637 562 ; -C 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ; -C 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ; -C 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ; -C 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ; -C 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ; -C 96 ; WX 600 ; N quoteleft ; B 297 277 487 562 ; -C 97 ; WX 600 ; N a ; B 61 -15 593 454 ; -C 98 ; WX 600 ; N b ; B 13 -15 636 626 ; -C 99 ; WX 600 ; N c ; B 81 -15 631 459 ; -C 100 ; WX 600 ; N d ; B 60 -15 645 626 ; -C 101 ; WX 600 ; N e ; B 81 -15 605 454 ; -C 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ; -C 103 ; WX 600 ; N g ; B 40 -146 674 454 ; -C 104 ; WX 600 ; N h ; B 18 0 615 626 ; -C 105 ; WX 600 ; N i ; B 77 0 546 658 ; -C 106 ; WX 600 ; N j ; B 36 -146 580 658 ; -C 107 ; WX 600 ; N k ; B 33 0 643 626 ; -C 108 ; WX 600 ; N l ; B 77 0 546 626 ; -C 109 ; WX 600 ; N m ; B -22 0 649 454 ; -C 110 ; WX 600 ; N n ; B 18 0 615 454 ; -C 111 ; WX 600 ; N o ; B 71 -15 622 454 ; -C 112 ; WX 600 ; N p ; B -32 -142 622 454 ; -C 113 ; WX 600 ; N q ; B 60 -142 685 454 ; -C 114 ; WX 600 ; N r ; B 47 0 655 454 ; -C 115 ; WX 600 ; N s ; B 66 -17 608 459 ; -C 116 ; WX 600 ; N t ; B 118 -15 567 562 ; -C 117 ; WX 600 ; N u ; B 70 -15 592 439 ; -C 118 ; WX 600 ; N v ; B 70 0 695 439 ; -C 119 ; WX 600 ; N w ; B 53 0 712 439 ; -C 120 ; WX 600 ; N x ; B 6 0 671 439 ; -C 121 ; WX 600 ; N y ; B -21 -142 695 439 ; -C 122 ; WX 600 ; N z ; B 81 0 614 439 ; -C 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ; -C 124 ; WX 600 ; N bar ; B 201 -250 505 750 ; -C 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ; -C 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ; -C 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ; -C 162 ; WX 600 ; N cent ; B 121 -49 605 614 ; -C 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ; -C 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ; -C 165 ; WX 600 ; N yen ; B 98 0 710 562 ; -C 166 ; WX 600 ; N florin ; B -57 -131 702 616 ; -C 167 ; WX 600 ; N section ; B 74 -70 620 580 ; -C 168 ; WX 600 ; N currency ; B 77 49 644 517 ; -C 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ; -C 174 ; WX 600 ; N fi ; B 12 0 644 626 ; -C 175 ; WX 600 ; N fl ; B 12 0 644 626 ; -C 177 ; WX 600 ; N endash ; B 108 203 602 313 ; -C 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ; -C 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ; -C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ; -C 183 ; WX 600 ; N bullet ; B 196 132 523 430 ; -C 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ; -C 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ; -C 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ; -C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ; -C 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ; -C 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ; -C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ; -C 193 ; WX 600 ; N grave ; B 272 508 503 661 ; -C 194 ; WX 600 ; N acute ; B 312 508 609 661 ; -C 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ; -C 196 ; WX 600 ; N tilde ; B 199 493 643 636 ; -C 197 ; WX 600 ; N macron ; B 195 505 637 585 ; -C 198 ; WX 600 ; N breve ; B 217 468 652 631 ; -C 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ; -C 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ; -C 202 ; WX 600 ; N ring ; B 319 481 528 678 ; -C 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ; -C 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ; -C 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ; -C 207 ; WX 600 ; N caron ; B 238 493 633 667 ; -C 208 ; WX 600 ; N emdash ; B 33 203 677 313 ; -C 225 ; WX 600 ; N AE ; B -29 0 708 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ; -C 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ; -C 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ; -C 234 ; WX 600 ; N OE ; B 26 0 701 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ; -C 241 ; WX 600 ; N ae ; B 21 -15 652 454 ; -C 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ; -C 248 ; WX 600 ; N lslash ; B 77 0 587 626 ; -C 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ; -C 250 ; WX 600 ; N oe ; B 18 -15 662 454 ; -C 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ; -C -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ; -C -1 ; WX 600 ; N eacute ; B 81 -15 609 661 ; -C -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ; -C -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ; -C -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ; -C -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ; -C -1 ; WX 600 ; N divide ; B 114 16 596 500 ; -C -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ; -C -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ; -C -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ; -C -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ; -C -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ; -C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ; -C -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ; -C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ; -C -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ; -C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ; -C -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ; -C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ; -C -1 ; WX 600 ; N Edieresis ; B 25 0 670 761 ; -C -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ; -C -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ; -C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; -C -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ; -C -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ; -C -1 ; WX 600 ; N aring ; B 61 -15 593 678 ; -C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ; -C -1 ; WX 600 ; N lacute ; B 77 0 639 801 ; -C -1 ; WX 600 ; N agrave ; B 61 -15 593 661 ; -C -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ; -C -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ; -C -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ; -C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ; -C -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ; -C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ; -C -1 ; WX 600 ; N iacute ; B 77 0 609 661 ; -C -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ; -C -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ; -C -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ; -C -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ; -C -1 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ; -C -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ; -C -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ; -C -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ; -C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ; -C -1 ; WX 600 ; N Thorn ; B 48 0 620 562 ; -C -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ; -C -1 ; WX 600 ; N Racute ; B 24 0 665 784 ; -C -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ; -C -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ; -C -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ; -C -1 ; WX 600 ; N uring ; B 70 -15 592 678 ; -C -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ; -C -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ; -C -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ; -C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ; -C -1 ; WX 600 ; N multiply ; B 104 39 606 478 ; -C -1 ; WX 600 ; N uacute ; B 70 -15 599 661 ; -C -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ; -C -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ; -C -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ; -C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ; -C -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ; -C -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ; -C -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ; -C -1 ; WX 600 ; N edieresis ; B 81 -15 605 638 ; -C -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ; -C -1 ; WX 600 ; N nacute ; B 18 0 639 661 ; -C -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ; -C -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ; -C -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ; -C -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ; -C -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ; -C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; -C -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ; -C -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ; -C -1 ; WX 600 ; N summation ; B 15 -10 672 706 ; -C -1 ; WX 600 ; N Egrave ; B 25 0 670 784 ; -C -1 ; WX 600 ; N racute ; B 47 0 655 661 ; -C -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ; -C -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ; -C -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ; -C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ; -C -1 ; WX 600 ; N Eth ; B 30 0 664 562 ; -C -1 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ; -C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ; -C -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ; -C -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ; -C -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ; -C -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ; -C -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ; -C -1 ; WX 600 ; N egrave ; B 81 -15 605 661 ; -C -1 ; WX 600 ; N zacute ; B 81 0 614 661 ; -C -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ; -C -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ; -C -1 ; WX 600 ; N oacute ; B 71 -15 649 661 ; -C -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ; -C -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ; -C -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ; -C -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ; -C -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ; -C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ; -C -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ; -C -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ; -C -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ; -C -1 ; WX 600 ; N mu ; B 49 -142 592 439 ; -C -1 ; WX 600 ; N igrave ; B 77 0 546 661 ; -C -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ; -C -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ; -C -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ; -C -1 ; WX 600 ; N threequarters ; B 8 -60 699 661 ; -C -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ; -C -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ; -C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ; -C -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ; -C -1 ; WX 600 ; N trademark ; B 86 230 869 562 ; -C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ; -C -1 ; WX 600 ; N Igrave ; B 77 0 643 784 ; -C -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ; -C -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ; -C -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ; -C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ; -C -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ; -C -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ; -C -1 ; WX 600 ; N Eacute ; B 25 0 670 784 ; -C -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ; -C -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ; -C -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ; -C -1 ; WX 600 ; N Scaron ; B 54 -22 689 790 ; -C -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ; -C -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ; -C -1 ; WX 600 ; N degree ; B 173 243 570 616 ; -C -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ; -C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ; -C -1 ; WX 600 ; N ugrave ; B 70 -15 592 661 ; -C -1 ; WX 600 ; N radical ; B 67 -104 635 778 ; -C -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ; -C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ; -C -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ; -C -1 ; WX 600 ; N otilde ; B 71 -15 643 636 ; -C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ; -C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ; -C -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ; -C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ; -C -1 ; WX 600 ; N Aring ; B -9 0 632 801 ; -C -1 ; WX 600 ; N Otilde ; B 74 -18 669 759 ; -C -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ; -C -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ; -C -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ; -C -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ; -C -1 ; WX 600 ; N minus ; B 114 203 596 313 ; -C -1 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ; -C -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ; -C -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ; -C -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ; -C -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ; -C -1 ; WX 600 ; N udieresis ; B 70 -15 595 638 ; -C -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ; -C -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ; -C -1 ; WX 600 ; N eth ; B 93 -27 661 626 ; -C -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ; -C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ; -C -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ; -C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ; -C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Oblique.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Oblique.afm deleted file mode 100644 index acacb3d..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Courier-Oblique.afm +++ /dev/null @@ -1,342 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 17:37:52 1997 -Comment UniqueID 43051 -Comment VMusage 16248 75829 -FontName Courier-Oblique -FullName Courier Oblique -FamilyName Courier -Weight Medium -ItalicAngle -12 -IsFixedPitch true -CharacterSet ExtendedRoman -FontBBox -27 -250 849 805 -UnderlinePosition -100 -UnderlineThickness 50 -Version 003.000 -Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -EncodingScheme AdobeStandardEncoding -CapHeight 562 -XHeight 426 -Ascender 629 -Descender -157 -StdHW 51 -StdVW 51 -StartCharMetrics 315 -C 32 ; WX 600 ; N space ; B 0 0 0 0 ; -C 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ; -C 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ; -C 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ; -C 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ; -C 37 ; WX 600 ; N percent ; B 134 -15 599 622 ; -C 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ; -C 39 ; WX 600 ; N quoteright ; B 283 328 495 562 ; -C 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ; -C 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ; -C 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ; -C 43 ; WX 600 ; N plus ; B 129 44 580 470 ; -C 44 ; WX 600 ; N comma ; B 157 -112 370 122 ; -C 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ; -C 46 ; WX 600 ; N period ; B 238 -15 382 109 ; -C 47 ; WX 600 ; N slash ; B 112 -80 604 629 ; -C 48 ; WX 600 ; N zero ; B 154 -15 575 622 ; -C 49 ; WX 600 ; N one ; B 98 0 515 622 ; -C 50 ; WX 600 ; N two ; B 70 0 568 622 ; -C 51 ; WX 600 ; N three ; B 82 -15 538 622 ; -C 52 ; WX 600 ; N four ; B 108 0 541 622 ; -C 53 ; WX 600 ; N five ; B 99 -15 589 607 ; -C 54 ; WX 600 ; N six ; B 155 -15 629 622 ; -C 55 ; WX 600 ; N seven ; B 182 0 612 607 ; -C 56 ; WX 600 ; N eight ; B 132 -15 588 622 ; -C 57 ; WX 600 ; N nine ; B 93 -15 574 622 ; -C 58 ; WX 600 ; N colon ; B 238 -15 441 385 ; -C 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ; -C 60 ; WX 600 ; N less ; B 96 42 610 472 ; -C 61 ; WX 600 ; N equal ; B 109 138 600 376 ; -C 62 ; WX 600 ; N greater ; B 85 42 599 472 ; -C 63 ; WX 600 ; N question ; B 222 -15 583 572 ; -C 64 ; WX 600 ; N at ; B 127 -15 582 622 ; -C 65 ; WX 600 ; N A ; B 3 0 607 562 ; -C 66 ; WX 600 ; N B ; B 43 0 616 562 ; -C 67 ; WX 600 ; N C ; B 93 -18 655 580 ; -C 68 ; WX 600 ; N D ; B 43 0 645 562 ; -C 69 ; WX 600 ; N E ; B 53 0 660 562 ; -C 70 ; WX 600 ; N F ; B 53 0 660 562 ; -C 71 ; WX 600 ; N G ; B 83 -18 645 580 ; -C 72 ; WX 600 ; N H ; B 32 0 687 562 ; -C 73 ; WX 600 ; N I ; B 96 0 623 562 ; -C 74 ; WX 600 ; N J ; B 52 -18 685 562 ; -C 75 ; WX 600 ; N K ; B 38 0 671 562 ; -C 76 ; WX 600 ; N L ; B 47 0 607 562 ; -C 77 ; WX 600 ; N M ; B 4 0 715 562 ; -C 78 ; WX 600 ; N N ; B 7 -13 712 562 ; -C 79 ; WX 600 ; N O ; B 94 -18 625 580 ; -C 80 ; WX 600 ; N P ; B 79 0 644 562 ; -C 81 ; WX 600 ; N Q ; B 95 -138 625 580 ; -C 82 ; WX 600 ; N R ; B 38 0 598 562 ; -C 83 ; WX 600 ; N S ; B 76 -20 650 580 ; -C 84 ; WX 600 ; N T ; B 108 0 665 562 ; -C 85 ; WX 600 ; N U ; B 125 -18 702 562 ; -C 86 ; WX 600 ; N V ; B 105 -13 723 562 ; -C 87 ; WX 600 ; N W ; B 106 -13 722 562 ; -C 88 ; WX 600 ; N X ; B 23 0 675 562 ; -C 89 ; WX 600 ; N Y ; B 133 0 695 562 ; -C 90 ; WX 600 ; N Z ; B 86 0 610 562 ; -C 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ; -C 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ; -C 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ; -C 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ; -C 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ; -C 96 ; WX 600 ; N quoteleft ; B 343 328 457 562 ; -C 97 ; WX 600 ; N a ; B 76 -15 569 441 ; -C 98 ; WX 600 ; N b ; B 29 -15 625 629 ; -C 99 ; WX 600 ; N c ; B 106 -15 608 441 ; -C 100 ; WX 600 ; N d ; B 85 -15 640 629 ; -C 101 ; WX 600 ; N e ; B 106 -15 598 441 ; -C 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ; -C 103 ; WX 600 ; N g ; B 61 -157 657 441 ; -C 104 ; WX 600 ; N h ; B 33 0 592 629 ; -C 105 ; WX 600 ; N i ; B 95 0 515 657 ; -C 106 ; WX 600 ; N j ; B 52 -157 550 657 ; -C 107 ; WX 600 ; N k ; B 58 0 633 629 ; -C 108 ; WX 600 ; N l ; B 95 0 515 629 ; -C 109 ; WX 600 ; N m ; B -5 0 615 441 ; -C 110 ; WX 600 ; N n ; B 26 0 585 441 ; -C 111 ; WX 600 ; N o ; B 102 -15 588 441 ; -C 112 ; WX 600 ; N p ; B -24 -157 605 441 ; -C 113 ; WX 600 ; N q ; B 85 -157 682 441 ; -C 114 ; WX 600 ; N r ; B 60 0 636 441 ; -C 115 ; WX 600 ; N s ; B 78 -15 584 441 ; -C 116 ; WX 600 ; N t ; B 167 -15 561 561 ; -C 117 ; WX 600 ; N u ; B 101 -15 572 426 ; -C 118 ; WX 600 ; N v ; B 90 -10 681 426 ; -C 119 ; WX 600 ; N w ; B 76 -10 695 426 ; -C 120 ; WX 600 ; N x ; B 20 0 655 426 ; -C 121 ; WX 600 ; N y ; B -4 -157 683 426 ; -C 122 ; WX 600 ; N z ; B 99 0 593 426 ; -C 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ; -C 124 ; WX 600 ; N bar ; B 222 -250 485 750 ; -C 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ; -C 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ; -C 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ; -C 162 ; WX 600 ; N cent ; B 151 -49 588 614 ; -C 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ; -C 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ; -C 165 ; WX 600 ; N yen ; B 120 0 693 562 ; -C 166 ; WX 600 ; N florin ; B -26 -143 671 622 ; -C 167 ; WX 600 ; N section ; B 104 -78 590 580 ; -C 168 ; WX 600 ; N currency ; B 94 58 628 506 ; -C 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ; -C 174 ; WX 600 ; N fi ; B 3 0 619 629 ; -C 175 ; WX 600 ; N fl ; B 3 0 619 629 ; -C 177 ; WX 600 ; N endash ; B 124 231 586 285 ; -C 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ; -C 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ; -C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ; -C 183 ; WX 600 ; N bullet ; B 224 130 485 383 ; -C 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ; -C 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ; -C 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ; -C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ; -C 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ; -C 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ; -C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ; -C 193 ; WX 600 ; N grave ; B 294 497 484 672 ; -C 194 ; WX 600 ; N acute ; B 348 497 612 672 ; -C 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ; -C 196 ; WX 600 ; N tilde ; B 212 489 629 606 ; -C 197 ; WX 600 ; N macron ; B 232 525 600 565 ; -C 198 ; WX 600 ; N breve ; B 279 501 576 609 ; -C 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ; -C 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ; -C 202 ; WX 600 ; N ring ; B 332 463 500 627 ; -C 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ; -C 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ; -C 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ; -C 207 ; WX 600 ; N caron ; B 262 492 614 669 ; -C 208 ; WX 600 ; N emdash ; B 49 231 661 285 ; -C 225 ; WX 600 ; N AE ; B 3 0 655 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ; -C 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ; -C 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ; -C 234 ; WX 600 ; N OE ; B 59 0 672 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ; -C 241 ; WX 600 ; N ae ; B 41 -15 626 441 ; -C 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ; -C 248 ; WX 600 ; N lslash ; B 95 0 587 629 ; -C 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ; -C 250 ; WX 600 ; N oe ; B 54 -15 615 441 ; -C 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ; -C -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ; -C -1 ; WX 600 ; N eacute ; B 106 -15 612 672 ; -C -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ; -C -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ; -C -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ; -C -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ; -C -1 ; WX 600 ; N divide ; B 136 48 573 467 ; -C -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ; -C -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ; -C -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ; -C -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ; -C -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ; -C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ; -C -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ; -C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ; -C -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ; -C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ; -C -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ; -C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ; -C -1 ; WX 600 ; N Edieresis ; B 53 0 660 753 ; -C -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ; -C -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ; -C -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ; -C -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ; -C -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ; -C -1 ; WX 600 ; N aring ; B 76 -15 569 627 ; -C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ; -C -1 ; WX 600 ; N lacute ; B 95 0 640 805 ; -C -1 ; WX 600 ; N agrave ; B 76 -15 569 672 ; -C -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ; -C -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ; -C -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ; -C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ; -C -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ; -C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ; -C -1 ; WX 600 ; N iacute ; B 95 0 612 672 ; -C -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ; -C -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ; -C -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ; -C -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ; -C -1 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ; -C -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ; -C -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ; -C -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ; -C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ; -C -1 ; WX 600 ; N Thorn ; B 79 0 606 562 ; -C -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ; -C -1 ; WX 600 ; N Racute ; B 38 0 670 805 ; -C -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ; -C -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ; -C -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ; -C -1 ; WX 600 ; N uring ; B 101 -15 572 627 ; -C -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ; -C -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ; -C -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ; -C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ; -C -1 ; WX 600 ; N multiply ; B 103 43 607 470 ; -C -1 ; WX 600 ; N uacute ; B 101 -15 602 672 ; -C -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ; -C -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ; -C -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ; -C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ; -C -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ; -C -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ; -C -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ; -C -1 ; WX 600 ; N edieresis ; B 106 -15 598 620 ; -C -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ; -C -1 ; WX 600 ; N nacute ; B 26 0 602 672 ; -C -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ; -C -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ; -C -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ; -C -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ; -C -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ; -C -1 ; WX 600 ; N registered ; B 53 -18 667 580 ; -C -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ; -C -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ; -C -1 ; WX 600 ; N summation ; B 15 -10 670 706 ; -C -1 ; WX 600 ; N Egrave ; B 53 0 660 805 ; -C -1 ; WX 600 ; N racute ; B 60 0 636 672 ; -C -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ; -C -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ; -C -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ; -C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ; -C -1 ; WX 600 ; N Eth ; B 43 0 645 562 ; -C -1 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ; -C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ; -C -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ; -C -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ; -C -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ; -C -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ; -C -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ; -C -1 ; WX 600 ; N egrave ; B 106 -15 598 672 ; -C -1 ; WX 600 ; N zacute ; B 99 0 612 672 ; -C -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ; -C -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ; -C -1 ; WX 600 ; N oacute ; B 102 -15 612 672 ; -C -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ; -C -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ; -C -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ; -C -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ; -C -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ; -C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; -C -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ; -C -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ; -C -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ; -C -1 ; WX 600 ; N mu ; B 72 -157 572 426 ; -C -1 ; WX 600 ; N igrave ; B 95 0 515 672 ; -C -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ; -C -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ; -C -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ; -C -1 ; WX 600 ; N threequarters ; B 73 -56 659 666 ; -C -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ; -C -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ; -C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ; -C -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ; -C -1 ; WX 600 ; N trademark ; B 75 263 742 562 ; -C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ; -C -1 ; WX 600 ; N Igrave ; B 96 0 623 805 ; -C -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ; -C -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ; -C -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ; -C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ; -C -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ; -C -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ; -C -1 ; WX 600 ; N Eacute ; B 53 0 670 805 ; -C -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ; -C -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ; -C -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ; -C -1 ; WX 600 ; N Scaron ; B 76 -20 672 802 ; -C -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ; -C -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ; -C -1 ; WX 600 ; N degree ; B 214 269 576 622 ; -C -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ; -C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ; -C -1 ; WX 600 ; N ugrave ; B 101 -15 572 672 ; -C -1 ; WX 600 ; N radical ; B 85 -15 765 792 ; -C -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ; -C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ; -C -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ; -C -1 ; WX 600 ; N otilde ; B 102 -15 629 606 ; -C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ; -C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ; -C -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ; -C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ; -C -1 ; WX 600 ; N Aring ; B 3 0 607 750 ; -C -1 ; WX 600 ; N Otilde ; B 94 -18 655 729 ; -C -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ; -C -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ; -C -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ; -C -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ; -C -1 ; WX 600 ; N minus ; B 129 232 580 283 ; -C -1 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ; -C -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ; -C -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ; -C -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ; -C -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ; -C -1 ; WX 600 ; N udieresis ; B 101 -15 575 620 ; -C -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ; -C -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ; -C -1 ; WX 600 ; N eth ; B 102 -15 639 629 ; -C -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ; -C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ; -C -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ; -C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ; -C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Courier.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Courier.afm deleted file mode 100644 index be84b6b..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Courier.afm +++ /dev/null @@ -1,342 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 17:27:09 1997 -Comment UniqueID 43050 -Comment VMusage 39754 50779 -FontName Courier -FullName Courier -FamilyName Courier -Weight Medium -ItalicAngle 0 -IsFixedPitch true -CharacterSet ExtendedRoman -FontBBox -23 -250 715 805 -UnderlinePosition -100 -UnderlineThickness 50 -Version 003.000 -Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -EncodingScheme AdobeStandardEncoding -CapHeight 562 -XHeight 426 -Ascender 629 -Descender -157 -StdHW 51 -StdVW 51 -StartCharMetrics 315 -C 32 ; WX 600 ; N space ; B 0 0 0 0 ; -C 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ; -C 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ; -C 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ; -C 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ; -C 37 ; WX 600 ; N percent ; B 81 -15 518 622 ; -C 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ; -C 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ; -C 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ; -C 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ; -C 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ; -C 43 ; WX 600 ; N plus ; B 80 44 520 470 ; -C 44 ; WX 600 ; N comma ; B 181 -112 344 122 ; -C 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ; -C 46 ; WX 600 ; N period ; B 229 -15 371 109 ; -C 47 ; WX 600 ; N slash ; B 125 -80 475 629 ; -C 48 ; WX 600 ; N zero ; B 106 -15 494 622 ; -C 49 ; WX 600 ; N one ; B 96 0 505 622 ; -C 50 ; WX 600 ; N two ; B 70 0 471 622 ; -C 51 ; WX 600 ; N three ; B 75 -15 466 622 ; -C 52 ; WX 600 ; N four ; B 78 0 500 622 ; -C 53 ; WX 600 ; N five ; B 92 -15 497 607 ; -C 54 ; WX 600 ; N six ; B 111 -15 497 622 ; -C 55 ; WX 600 ; N seven ; B 82 0 483 607 ; -C 56 ; WX 600 ; N eight ; B 102 -15 498 622 ; -C 57 ; WX 600 ; N nine ; B 96 -15 489 622 ; -C 58 ; WX 600 ; N colon ; B 229 -15 371 385 ; -C 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ; -C 60 ; WX 600 ; N less ; B 41 42 519 472 ; -C 61 ; WX 600 ; N equal ; B 80 138 520 376 ; -C 62 ; WX 600 ; N greater ; B 66 42 544 472 ; -C 63 ; WX 600 ; N question ; B 129 -15 492 572 ; -C 64 ; WX 600 ; N at ; B 77 -15 533 622 ; -C 65 ; WX 600 ; N A ; B 3 0 597 562 ; -C 66 ; WX 600 ; N B ; B 43 0 559 562 ; -C 67 ; WX 600 ; N C ; B 41 -18 540 580 ; -C 68 ; WX 600 ; N D ; B 43 0 574 562 ; -C 69 ; WX 600 ; N E ; B 53 0 550 562 ; -C 70 ; WX 600 ; N F ; B 53 0 545 562 ; -C 71 ; WX 600 ; N G ; B 31 -18 575 580 ; -C 72 ; WX 600 ; N H ; B 32 0 568 562 ; -C 73 ; WX 600 ; N I ; B 96 0 504 562 ; -C 74 ; WX 600 ; N J ; B 34 -18 566 562 ; -C 75 ; WX 600 ; N K ; B 38 0 582 562 ; -C 76 ; WX 600 ; N L ; B 47 0 554 562 ; -C 77 ; WX 600 ; N M ; B 4 0 596 562 ; -C 78 ; WX 600 ; N N ; B 7 -13 593 562 ; -C 79 ; WX 600 ; N O ; B 43 -18 557 580 ; -C 80 ; WX 600 ; N P ; B 79 0 558 562 ; -C 81 ; WX 600 ; N Q ; B 43 -138 557 580 ; -C 82 ; WX 600 ; N R ; B 38 0 588 562 ; -C 83 ; WX 600 ; N S ; B 72 -20 529 580 ; -C 84 ; WX 600 ; N T ; B 38 0 563 562 ; -C 85 ; WX 600 ; N U ; B 17 -18 583 562 ; -C 86 ; WX 600 ; N V ; B -4 -13 604 562 ; -C 87 ; WX 600 ; N W ; B -3 -13 603 562 ; -C 88 ; WX 600 ; N X ; B 23 0 577 562 ; -C 89 ; WX 600 ; N Y ; B 24 0 576 562 ; -C 90 ; WX 600 ; N Z ; B 86 0 514 562 ; -C 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ; -C 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ; -C 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ; -C 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ; -C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ; -C 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ; -C 97 ; WX 600 ; N a ; B 53 -15 559 441 ; -C 98 ; WX 600 ; N b ; B 14 -15 575 629 ; -C 99 ; WX 600 ; N c ; B 66 -15 529 441 ; -C 100 ; WX 600 ; N d ; B 45 -15 591 629 ; -C 101 ; WX 600 ; N e ; B 66 -15 548 441 ; -C 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ; -C 103 ; WX 600 ; N g ; B 45 -157 566 441 ; -C 104 ; WX 600 ; N h ; B 18 0 582 629 ; -C 105 ; WX 600 ; N i ; B 95 0 505 657 ; -C 106 ; WX 600 ; N j ; B 82 -157 410 657 ; -C 107 ; WX 600 ; N k ; B 43 0 580 629 ; -C 108 ; WX 600 ; N l ; B 95 0 505 629 ; -C 109 ; WX 600 ; N m ; B -5 0 605 441 ; -C 110 ; WX 600 ; N n ; B 26 0 575 441 ; -C 111 ; WX 600 ; N o ; B 62 -15 538 441 ; -C 112 ; WX 600 ; N p ; B 9 -157 555 441 ; -C 113 ; WX 600 ; N q ; B 45 -157 591 441 ; -C 114 ; WX 600 ; N r ; B 60 0 559 441 ; -C 115 ; WX 600 ; N s ; B 80 -15 513 441 ; -C 116 ; WX 600 ; N t ; B 87 -15 530 561 ; -C 117 ; WX 600 ; N u ; B 21 -15 562 426 ; -C 118 ; WX 600 ; N v ; B 10 -10 590 426 ; -C 119 ; WX 600 ; N w ; B -4 -10 604 426 ; -C 120 ; WX 600 ; N x ; B 20 0 580 426 ; -C 121 ; WX 600 ; N y ; B 7 -157 592 426 ; -C 122 ; WX 600 ; N z ; B 99 0 502 426 ; -C 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ; -C 124 ; WX 600 ; N bar ; B 275 -250 326 750 ; -C 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ; -C 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ; -C 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ; -C 162 ; WX 600 ; N cent ; B 96 -49 500 614 ; -C 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ; -C 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ; -C 165 ; WX 600 ; N yen ; B 26 0 574 562 ; -C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ; -C 167 ; WX 600 ; N section ; B 113 -78 488 580 ; -C 168 ; WX 600 ; N currency ; B 73 58 527 506 ; -C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ; -C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ; -C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ; -C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ; -C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ; -C 174 ; WX 600 ; N fi ; B 3 0 597 629 ; -C 175 ; WX 600 ; N fl ; B 3 0 597 629 ; -C 177 ; WX 600 ; N endash ; B 75 231 525 285 ; -C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ; -C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ; -C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ; -C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ; -C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ; -C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ; -C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ; -C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ; -C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ; -C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ; -C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ; -C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ; -C 193 ; WX 600 ; N grave ; B 151 497 378 672 ; -C 194 ; WX 600 ; N acute ; B 242 497 469 672 ; -C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ; -C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ; -C 197 ; WX 600 ; N macron ; B 120 525 480 565 ; -C 198 ; WX 600 ; N breve ; B 153 501 447 609 ; -C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ; -C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ; -C 202 ; WX 600 ; N ring ; B 218 463 382 627 ; -C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ; -C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ; -C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ; -C 207 ; WX 600 ; N caron ; B 124 492 476 669 ; -C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ; -C 225 ; WX 600 ; N AE ; B 3 0 550 562 ; -C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ; -C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ; -C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ; -C 234 ; WX 600 ; N OE ; B 7 0 567 562 ; -C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ; -C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ; -C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ; -C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ; -C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ; -C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ; -C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ; -C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ; -C -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ; -C -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ; -C -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ; -C -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ; -C -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ; -C -1 ; WX 600 ; N divide ; B 87 48 513 467 ; -C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ; -C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ; -C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ; -C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ; -C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ; -C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ; -C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ; -C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ; -C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ; -C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ; -C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ; -C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ; -C -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ; -C -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ; -C -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ; -C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ; -C -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ; -C -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ; -C -1 ; WX 600 ; N aring ; B 53 -15 559 627 ; -C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ; -C -1 ; WX 600 ; N lacute ; B 95 0 505 805 ; -C -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ; -C -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ; -C -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ; -C -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ; -C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ; -C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ; -C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ; -C -1 ; WX 600 ; N iacute ; B 95 0 505 672 ; -C -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ; -C -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ; -C -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ; -C -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ; -C -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ; -C -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ; -C -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ; -C -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ; -C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ; -C -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ; -C -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ; -C -1 ; WX 600 ; N Racute ; B 38 0 588 805 ; -C -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ; -C -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ; -C -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ; -C -1 ; WX 600 ; N uring ; B 21 -15 562 627 ; -C -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ; -C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ; -C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ; -C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ; -C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ; -C -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ; -C -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ; -C -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ; -C -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ; -C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ; -C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ; -C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ; -C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ; -C -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ; -C -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ; -C -1 ; WX 600 ; N nacute ; B 26 0 575 672 ; -C -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ; -C -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ; -C -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ; -C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ; -C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ; -C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ; -C -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ; -C -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ; -C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; -C -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ; -C -1 ; WX 600 ; N racute ; B 60 0 559 672 ; -C -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ; -C -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ; -C -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ; -C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ; -C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ; -C -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ; -C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ; -C -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ; -C -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ; -C -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ; -C -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ; -C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ; -C -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ; -C -1 ; WX 600 ; N zacute ; B 99 0 502 672 ; -C -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ; -C -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ; -C -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ; -C -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ; -C -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ; -C -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ; -C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ; -C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ; -C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ; -C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ; -C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ; -C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ; -C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ; -C -1 ; WX 600 ; N igrave ; B 95 0 505 672 ; -C -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ; -C -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ; -C -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ; -C -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ; -C -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ; -C -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ; -C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ; -C -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ; -C -1 ; WX 600 ; N trademark ; B -23 263 623 562 ; -C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ; -C -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ; -C -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ; -C -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ; -C -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ; -C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ; -C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ; -C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ; -C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ; -C -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ; -C -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ; -C -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ; -C -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ; -C -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ; -C -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ; -C -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ; -C -1 ; WX 600 ; N degree ; B 123 269 477 622 ; -C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ; -C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ; -C -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ; -C -1 ; WX 600 ; N radical ; B 3 -15 597 792 ; -C -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ; -C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ; -C -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ; -C -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ; -C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ; -C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ; -C -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ; -C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ; -C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ; -C -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ; -C -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ; -C -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ; -C -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ; -C -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ; -C -1 ; WX 600 ; N minus ; B 80 232 520 283 ; -C -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ; -C -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ; -C -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ; -C -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ; -C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ; -C -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ; -C -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ; -C -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ; -C -1 ; WX 600 ; N eth ; B 62 -15 538 629 ; -C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ; -C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ; -C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ; -C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ; -C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Bold.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Bold.afm deleted file mode 100644 index 0d41049..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Bold.afm +++ /dev/null @@ -1,2827 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:43:52 1997 -Comment UniqueID 43052 -Comment VMusage 37169 48194 -FontName Helvetica-Bold -FullName Helvetica Bold -FamilyName Helvetica -Weight Bold -ItalicAngle 0 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -170 -228 1003 962 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 718 -XHeight 532 -Ascender 718 -Descender -207 -StdHW 118 -StdVW 140 -StartCharMetrics 315 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 90 0 244 718 ; -C 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ; -C 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ; -C 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ; -C 37 ; WX 889 ; N percent ; B 28 -19 861 710 ; -C 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ; -C 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ; -C 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ; -C 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ; -C 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ; -C 43 ; WX 584 ; N plus ; B 40 0 544 506 ; -C 44 ; WX 278 ; N comma ; B 64 -168 214 146 ; -C 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ; -C 46 ; WX 278 ; N period ; B 64 0 214 146 ; -C 47 ; WX 278 ; N slash ; B -33 -19 311 737 ; -C 48 ; WX 556 ; N zero ; B 32 -19 524 710 ; -C 49 ; WX 556 ; N one ; B 69 0 378 710 ; -C 50 ; WX 556 ; N two ; B 26 0 511 710 ; -C 51 ; WX 556 ; N three ; B 27 -19 516 710 ; -C 52 ; WX 556 ; N four ; B 27 0 526 710 ; -C 53 ; WX 556 ; N five ; B 27 -19 516 698 ; -C 54 ; WX 556 ; N six ; B 31 -19 520 710 ; -C 55 ; WX 556 ; N seven ; B 25 0 528 698 ; -C 56 ; WX 556 ; N eight ; B 32 -19 524 710 ; -C 57 ; WX 556 ; N nine ; B 30 -19 522 710 ; -C 58 ; WX 333 ; N colon ; B 92 0 242 512 ; -C 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ; -C 60 ; WX 584 ; N less ; B 38 -8 546 514 ; -C 61 ; WX 584 ; N equal ; B 40 87 544 419 ; -C 62 ; WX 584 ; N greater ; B 38 -8 546 514 ; -C 63 ; WX 611 ; N question ; B 60 0 556 727 ; -C 64 ; WX 975 ; N at ; B 118 -19 856 737 ; -C 65 ; WX 722 ; N A ; B 20 0 702 718 ; -C 66 ; WX 722 ; N B ; B 76 0 669 718 ; -C 67 ; WX 722 ; N C ; B 44 -19 684 737 ; -C 68 ; WX 722 ; N D ; B 76 0 685 718 ; -C 69 ; WX 667 ; N E ; B 76 0 621 718 ; -C 70 ; WX 611 ; N F ; B 76 0 587 718 ; -C 71 ; WX 778 ; N G ; B 44 -19 713 737 ; -C 72 ; WX 722 ; N H ; B 71 0 651 718 ; -C 73 ; WX 278 ; N I ; B 64 0 214 718 ; -C 74 ; WX 556 ; N J ; B 22 -18 484 718 ; -C 75 ; WX 722 ; N K ; B 87 0 722 718 ; -C 76 ; WX 611 ; N L ; B 76 0 583 718 ; -C 77 ; WX 833 ; N M ; B 69 0 765 718 ; -C 78 ; WX 722 ; N N ; B 69 0 654 718 ; -C 79 ; WX 778 ; N O ; B 44 -19 734 737 ; -C 80 ; WX 667 ; N P ; B 76 0 627 718 ; -C 81 ; WX 778 ; N Q ; B 44 -52 737 737 ; -C 82 ; WX 722 ; N R ; B 76 0 677 718 ; -C 83 ; WX 667 ; N S ; B 39 -19 629 737 ; -C 84 ; WX 611 ; N T ; B 14 0 598 718 ; -C 85 ; WX 722 ; N U ; B 72 -19 651 718 ; -C 86 ; WX 667 ; N V ; B 19 0 648 718 ; -C 87 ; WX 944 ; N W ; B 16 0 929 718 ; -C 88 ; WX 667 ; N X ; B 14 0 653 718 ; -C 89 ; WX 667 ; N Y ; B 15 0 653 718 ; -C 90 ; WX 611 ; N Z ; B 25 0 586 718 ; -C 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ; -C 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ; -C 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ; -C 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ; -C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; -C 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ; -C 97 ; WX 556 ; N a ; B 29 -14 527 546 ; -C 98 ; WX 611 ; N b ; B 61 -14 578 718 ; -C 99 ; WX 556 ; N c ; B 34 -14 524 546 ; -C 100 ; WX 611 ; N d ; B 34 -14 551 718 ; -C 101 ; WX 556 ; N e ; B 23 -14 528 546 ; -C 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ; -C 103 ; WX 611 ; N g ; B 40 -217 553 546 ; -C 104 ; WX 611 ; N h ; B 65 0 546 718 ; -C 105 ; WX 278 ; N i ; B 69 0 209 725 ; -C 106 ; WX 278 ; N j ; B 3 -214 209 725 ; -C 107 ; WX 556 ; N k ; B 69 0 562 718 ; -C 108 ; WX 278 ; N l ; B 69 0 209 718 ; -C 109 ; WX 889 ; N m ; B 64 0 826 546 ; -C 110 ; WX 611 ; N n ; B 65 0 546 546 ; -C 111 ; WX 611 ; N o ; B 34 -14 578 546 ; -C 112 ; WX 611 ; N p ; B 62 -207 578 546 ; -C 113 ; WX 611 ; N q ; B 34 -207 552 546 ; -C 114 ; WX 389 ; N r ; B 64 0 373 546 ; -C 115 ; WX 556 ; N s ; B 30 -14 519 546 ; -C 116 ; WX 333 ; N t ; B 10 -6 309 676 ; -C 117 ; WX 611 ; N u ; B 66 -14 545 532 ; -C 118 ; WX 556 ; N v ; B 13 0 543 532 ; -C 119 ; WX 778 ; N w ; B 10 0 769 532 ; -C 120 ; WX 556 ; N x ; B 15 0 541 532 ; -C 121 ; WX 556 ; N y ; B 10 -214 539 532 ; -C 122 ; WX 500 ; N z ; B 20 0 480 532 ; -C 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ; -C 124 ; WX 280 ; N bar ; B 84 -225 196 775 ; -C 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ; -C 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ; -C 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ; -C 162 ; WX 556 ; N cent ; B 34 -118 524 628 ; -C 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ; -C 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ; -C 165 ; WX 556 ; N yen ; B -9 0 565 698 ; -C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ; -C 167 ; WX 556 ; N section ; B 34 -184 522 727 ; -C 168 ; WX 556 ; N currency ; B -3 76 559 636 ; -C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ; -C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ; -C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ; -C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ; -C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ; -C 174 ; WX 611 ; N fi ; B 10 0 542 727 ; -C 175 ; WX 611 ; N fl ; B 10 0 542 727 ; -C 177 ; WX 556 ; N endash ; B 0 227 556 333 ; -C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ; -C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ; -C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ; -C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ; -C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ; -C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ; -C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ; -C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ; -C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ; -C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ; -C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ; -C 193 ; WX 333 ; N grave ; B -23 604 225 750 ; -C 194 ; WX 333 ; N acute ; B 108 604 356 750 ; -C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ; -C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ; -C 197 ; WX 333 ; N macron ; B -6 604 339 678 ; -C 198 ; WX 333 ; N breve ; B -2 604 335 750 ; -C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ; -C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ; -C 202 ; WX 333 ; N ring ; B 59 568 275 776 ; -C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ; -C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ; -C 207 ; WX 333 ; N caron ; B -10 604 343 750 ; -C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ; -C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ; -C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ; -C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ; -C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ; -C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ; -C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ; -C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ; -C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ; -C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ; -C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ; -C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ; -C -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ; -C -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ; -C -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ; -C -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ; -C -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ; -C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ; -C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ; -C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ; -C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ; -C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ; -C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ; -C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ; -C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ; -C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ; -C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ; -C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ; -C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ; -C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ; -C -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ; -C -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ; -C -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ; -C -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ; -C -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ; -C -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ; -C -1 ; WX 556 ; N aring ; B 29 -14 527 776 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ; -C -1 ; WX 278 ; N lacute ; B 69 0 329 936 ; -C -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ; -C -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ; -C -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ; -C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ; -C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ; -C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ; -C -1 ; WX 278 ; N iacute ; B 69 0 329 750 ; -C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; -C -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ; -C -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ; -C -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ; -C -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ; -C -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ; -C -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ; -C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ; -C -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ; -C -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ; -C -1 ; WX 722 ; N Racute ; B 76 0 677 936 ; -C -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ; -C -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ; -C -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ; -C -1 ; WX 611 ; N uring ; B 66 -14 545 776 ; -C -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ; -C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ; -C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ; -C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ; -C -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ; -C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ; -C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; -C -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ; -C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ; -C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ; -C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ; -C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ; -C -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ; -C -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ; -C -1 ; WX 611 ; N nacute ; B 65 0 546 750 ; -C -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ; -C -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ; -C -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ; -C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ; -C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ; -C -1 ; WX 737 ; N registered ; B -11 -19 748 737 ; -C -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ; -C -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ; -C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; -C -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ; -C -1 ; WX 389 ; N racute ; B 64 0 384 750 ; -C -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ; -C -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ; -C -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ; -C -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ; -C -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ; -C -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ; -C -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ; -C -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ; -C -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ; -C -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ; -C -1 ; WX 500 ; N zacute ; B 20 0 480 750 ; -C -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ; -C -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ; -C -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ; -C -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ; -C -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ; -C -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ; -C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ; -C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ; -C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ; -C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ; -C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ; -C -1 ; WX 278 ; N igrave ; B -50 0 209 750 ; -C -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ; -C -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ; -C -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ; -C -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ; -C -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ; -C -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ; -C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ; -C -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ; -C -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ; -C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ; -C -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ; -C -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ; -C -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ; -C -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ; -C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ; -C -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ; -C -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ; -C -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ; -C -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ; -C -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ; -C -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ; -C -1 ; WX 400 ; N degree ; B 57 426 343 712 ; -C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ; -C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ; -C -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ; -C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; -C -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ; -C -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ; -C -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ; -C -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ; -C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ; -C -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ; -C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ; -C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; -C -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ; -C -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ; -C -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ; -C -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ; -C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ; -C -1 ; WX 584 ; N minus ; B 40 197 544 309 ; -C -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ; -C -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ; -C -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ; -C -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ; -C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ; -C -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ; -C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; -C -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ; -C -1 ; WX 611 ; N eth ; B 34 -14 578 737 ; -C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ; -C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ; -C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ; -C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ; -C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2481 -KPX A C -40 -KPX A Cacute -40 -KPX A Ccaron -40 -KPX A Ccedilla -40 -KPX A G -50 -KPX A Gbreve -50 -KPX A Gcommaaccent -50 -KPX A O -40 -KPX A Oacute -40 -KPX A Ocircumflex -40 -KPX A Odieresis -40 -KPX A Ograve -40 -KPX A Ohungarumlaut -40 -KPX A Omacron -40 -KPX A Oslash -40 -KPX A Otilde -40 -KPX A Q -40 -KPX A T -90 -KPX A Tcaron -90 -KPX A Tcommaaccent -90 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -80 -KPX A W -60 -KPX A Y -110 -KPX A Yacute -110 -KPX A Ydieresis -110 -KPX A u -30 -KPX A uacute -30 -KPX A ucircumflex -30 -KPX A udieresis -30 -KPX A ugrave -30 -KPX A uhungarumlaut -30 -KPX A umacron -30 -KPX A uogonek -30 -KPX A uring -30 -KPX A v -40 -KPX A w -30 -KPX A y -30 -KPX A yacute -30 -KPX A ydieresis -30 -KPX Aacute C -40 -KPX Aacute Cacute -40 -KPX Aacute Ccaron -40 -KPX Aacute Ccedilla -40 -KPX Aacute G -50 -KPX Aacute Gbreve -50 -KPX Aacute Gcommaaccent -50 -KPX Aacute O -40 -KPX Aacute Oacute -40 -KPX Aacute Ocircumflex -40 -KPX Aacute Odieresis -40 -KPX Aacute Ograve -40 -KPX Aacute Ohungarumlaut -40 -KPX Aacute Omacron -40 -KPX Aacute Oslash -40 -KPX Aacute Otilde -40 -KPX Aacute Q -40 -KPX Aacute T -90 -KPX Aacute Tcaron -90 -KPX Aacute Tcommaaccent -90 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -80 -KPX Aacute W -60 -KPX Aacute Y -110 -KPX Aacute Yacute -110 -KPX Aacute Ydieresis -110 -KPX Aacute u -30 -KPX Aacute uacute -30 -KPX Aacute ucircumflex -30 -KPX Aacute udieresis -30 -KPX Aacute ugrave -30 -KPX Aacute uhungarumlaut -30 -KPX Aacute umacron -30 -KPX Aacute uogonek -30 -KPX Aacute uring -30 -KPX Aacute v -40 -KPX Aacute w -30 -KPX Aacute y -30 -KPX Aacute yacute -30 -KPX Aacute ydieresis -30 -KPX Abreve C -40 -KPX Abreve Cacute -40 -KPX Abreve Ccaron -40 -KPX Abreve Ccedilla -40 -KPX Abreve G -50 -KPX Abreve Gbreve -50 -KPX Abreve Gcommaaccent -50 -KPX Abreve O -40 -KPX Abreve Oacute -40 -KPX Abreve Ocircumflex -40 -KPX Abreve Odieresis -40 -KPX Abreve Ograve -40 -KPX Abreve Ohungarumlaut -40 -KPX Abreve Omacron -40 -KPX Abreve Oslash -40 -KPX Abreve Otilde -40 -KPX Abreve Q -40 -KPX Abreve T -90 -KPX Abreve Tcaron -90 -KPX Abreve Tcommaaccent -90 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -80 -KPX Abreve W -60 -KPX Abreve Y -110 -KPX Abreve Yacute -110 -KPX Abreve Ydieresis -110 -KPX Abreve u -30 -KPX Abreve uacute -30 -KPX Abreve ucircumflex -30 -KPX Abreve udieresis -30 -KPX Abreve ugrave -30 -KPX Abreve uhungarumlaut -30 -KPX Abreve umacron -30 -KPX Abreve uogonek -30 -KPX Abreve uring -30 -KPX Abreve v -40 -KPX Abreve w -30 -KPX Abreve y -30 -KPX Abreve yacute -30 -KPX Abreve ydieresis -30 -KPX Acircumflex C -40 -KPX Acircumflex Cacute -40 -KPX Acircumflex Ccaron -40 -KPX Acircumflex Ccedilla -40 -KPX Acircumflex G -50 -KPX Acircumflex Gbreve -50 -KPX Acircumflex Gcommaaccent -50 -KPX Acircumflex O -40 -KPX Acircumflex Oacute -40 -KPX Acircumflex Ocircumflex -40 -KPX Acircumflex Odieresis -40 -KPX Acircumflex Ograve -40 -KPX Acircumflex Ohungarumlaut -40 -KPX Acircumflex Omacron -40 -KPX Acircumflex Oslash -40 -KPX Acircumflex Otilde -40 -KPX Acircumflex Q -40 -KPX Acircumflex T -90 -KPX Acircumflex Tcaron -90 -KPX Acircumflex Tcommaaccent -90 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -80 -KPX Acircumflex W -60 -KPX Acircumflex Y -110 -KPX Acircumflex Yacute -110 -KPX Acircumflex Ydieresis -110 -KPX Acircumflex u -30 -KPX Acircumflex uacute -30 -KPX Acircumflex ucircumflex -30 -KPX Acircumflex udieresis -30 -KPX Acircumflex ugrave -30 -KPX Acircumflex uhungarumlaut -30 -KPX Acircumflex umacron -30 -KPX Acircumflex uogonek -30 -KPX Acircumflex uring -30 -KPX Acircumflex v -40 -KPX Acircumflex w -30 -KPX Acircumflex y -30 -KPX Acircumflex yacute -30 -KPX Acircumflex ydieresis -30 -KPX Adieresis C -40 -KPX Adieresis Cacute -40 -KPX Adieresis Ccaron -40 -KPX Adieresis Ccedilla -40 -KPX Adieresis G -50 -KPX Adieresis Gbreve -50 -KPX Adieresis Gcommaaccent -50 -KPX Adieresis O -40 -KPX Adieresis Oacute -40 -KPX Adieresis Ocircumflex -40 -KPX Adieresis Odieresis -40 -KPX Adieresis Ograve -40 -KPX Adieresis Ohungarumlaut -40 -KPX Adieresis Omacron -40 -KPX Adieresis Oslash -40 -KPX Adieresis Otilde -40 -KPX Adieresis Q -40 -KPX Adieresis T -90 -KPX Adieresis Tcaron -90 -KPX Adieresis Tcommaaccent -90 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -80 -KPX Adieresis W -60 -KPX Adieresis Y -110 -KPX Adieresis Yacute -110 -KPX Adieresis Ydieresis -110 -KPX Adieresis u -30 -KPX Adieresis uacute -30 -KPX Adieresis ucircumflex -30 -KPX Adieresis udieresis -30 -KPX Adieresis ugrave -30 -KPX Adieresis uhungarumlaut -30 -KPX Adieresis umacron -30 -KPX Adieresis uogonek -30 -KPX Adieresis uring -30 -KPX Adieresis v -40 -KPX Adieresis w -30 -KPX Adieresis y -30 -KPX Adieresis yacute -30 -KPX Adieresis ydieresis -30 -KPX Agrave C -40 -KPX Agrave Cacute -40 -KPX Agrave Ccaron -40 -KPX Agrave Ccedilla -40 -KPX Agrave G -50 -KPX Agrave Gbreve -50 -KPX Agrave Gcommaaccent -50 -KPX Agrave O -40 -KPX Agrave Oacute -40 -KPX Agrave Ocircumflex -40 -KPX Agrave Odieresis -40 -KPX Agrave Ograve -40 -KPX Agrave Ohungarumlaut -40 -KPX Agrave Omacron -40 -KPX Agrave Oslash -40 -KPX Agrave Otilde -40 -KPX Agrave Q -40 -KPX Agrave T -90 -KPX Agrave Tcaron -90 -KPX Agrave Tcommaaccent -90 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -80 -KPX Agrave W -60 -KPX Agrave Y -110 -KPX Agrave Yacute -110 -KPX Agrave Ydieresis -110 -KPX Agrave u -30 -KPX Agrave uacute -30 -KPX Agrave ucircumflex -30 -KPX Agrave udieresis -30 -KPX Agrave ugrave -30 -KPX Agrave uhungarumlaut -30 -KPX Agrave umacron -30 -KPX Agrave uogonek -30 -KPX Agrave uring -30 -KPX Agrave v -40 -KPX Agrave w -30 -KPX Agrave y -30 -KPX Agrave yacute -30 -KPX Agrave ydieresis -30 -KPX Amacron C -40 -KPX Amacron Cacute -40 -KPX Amacron Ccaron -40 -KPX Amacron Ccedilla -40 -KPX Amacron G -50 -KPX Amacron Gbreve -50 -KPX Amacron Gcommaaccent -50 -KPX Amacron O -40 -KPX Amacron Oacute -40 -KPX Amacron Ocircumflex -40 -KPX Amacron Odieresis -40 -KPX Amacron Ograve -40 -KPX Amacron Ohungarumlaut -40 -KPX Amacron Omacron -40 -KPX Amacron Oslash -40 -KPX Amacron Otilde -40 -KPX Amacron Q -40 -KPX Amacron T -90 -KPX Amacron Tcaron -90 -KPX Amacron Tcommaaccent -90 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -80 -KPX Amacron W -60 -KPX Amacron Y -110 -KPX Amacron Yacute -110 -KPX Amacron Ydieresis -110 -KPX Amacron u -30 -KPX Amacron uacute -30 -KPX Amacron ucircumflex -30 -KPX Amacron udieresis -30 -KPX Amacron ugrave -30 -KPX Amacron uhungarumlaut -30 -KPX Amacron umacron -30 -KPX Amacron uogonek -30 -KPX Amacron uring -30 -KPX Amacron v -40 -KPX Amacron w -30 -KPX Amacron y -30 -KPX Amacron yacute -30 -KPX Amacron ydieresis -30 -KPX Aogonek C -40 -KPX Aogonek Cacute -40 -KPX Aogonek Ccaron -40 -KPX Aogonek Ccedilla -40 -KPX Aogonek G -50 -KPX Aogonek Gbreve -50 -KPX Aogonek Gcommaaccent -50 -KPX Aogonek O -40 -KPX Aogonek Oacute -40 -KPX Aogonek Ocircumflex -40 -KPX Aogonek Odieresis -40 -KPX Aogonek Ograve -40 -KPX Aogonek Ohungarumlaut -40 -KPX Aogonek Omacron -40 -KPX Aogonek Oslash -40 -KPX Aogonek Otilde -40 -KPX Aogonek Q -40 -KPX Aogonek T -90 -KPX Aogonek Tcaron -90 -KPX Aogonek Tcommaaccent -90 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -80 -KPX Aogonek W -60 -KPX Aogonek Y -110 -KPX Aogonek Yacute -110 -KPX Aogonek Ydieresis -110 -KPX Aogonek u -30 -KPX Aogonek uacute -30 -KPX Aogonek ucircumflex -30 -KPX Aogonek udieresis -30 -KPX Aogonek ugrave -30 -KPX Aogonek uhungarumlaut -30 -KPX Aogonek umacron -30 -KPX Aogonek uogonek -30 -KPX Aogonek uring -30 -KPX Aogonek v -40 -KPX Aogonek w -30 -KPX Aogonek y -30 -KPX Aogonek yacute -30 -KPX Aogonek ydieresis -30 -KPX Aring C -40 -KPX Aring Cacute -40 -KPX Aring Ccaron -40 -KPX Aring Ccedilla -40 -KPX Aring G -50 -KPX Aring Gbreve -50 -KPX Aring Gcommaaccent -50 -KPX Aring O -40 -KPX Aring Oacute -40 -KPX Aring Ocircumflex -40 -KPX Aring Odieresis -40 -KPX Aring Ograve -40 -KPX Aring Ohungarumlaut -40 -KPX Aring Omacron -40 -KPX Aring Oslash -40 -KPX Aring Otilde -40 -KPX Aring Q -40 -KPX Aring T -90 -KPX Aring Tcaron -90 -KPX Aring Tcommaaccent -90 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -80 -KPX Aring W -60 -KPX Aring Y -110 -KPX Aring Yacute -110 -KPX Aring Ydieresis -110 -KPX Aring u -30 -KPX Aring uacute -30 -KPX Aring ucircumflex -30 -KPX Aring udieresis -30 -KPX Aring ugrave -30 -KPX Aring uhungarumlaut -30 -KPX Aring umacron -30 -KPX Aring uogonek -30 -KPX Aring uring -30 -KPX Aring v -40 -KPX Aring w -30 -KPX Aring y -30 -KPX Aring yacute -30 -KPX Aring ydieresis -30 -KPX Atilde C -40 -KPX Atilde Cacute -40 -KPX Atilde Ccaron -40 -KPX Atilde Ccedilla -40 -KPX Atilde G -50 -KPX Atilde Gbreve -50 -KPX Atilde Gcommaaccent -50 -KPX Atilde O -40 -KPX Atilde Oacute -40 -KPX Atilde Ocircumflex -40 -KPX Atilde Odieresis -40 -KPX Atilde Ograve -40 -KPX Atilde Ohungarumlaut -40 -KPX Atilde Omacron -40 -KPX Atilde Oslash -40 -KPX Atilde Otilde -40 -KPX Atilde Q -40 -KPX Atilde T -90 -KPX Atilde Tcaron -90 -KPX Atilde Tcommaaccent -90 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -80 -KPX Atilde W -60 -KPX Atilde Y -110 -KPX Atilde Yacute -110 -KPX Atilde Ydieresis -110 -KPX Atilde u -30 -KPX Atilde uacute -30 -KPX Atilde ucircumflex -30 -KPX Atilde udieresis -30 -KPX Atilde ugrave -30 -KPX Atilde uhungarumlaut -30 -KPX Atilde umacron -30 -KPX Atilde uogonek -30 -KPX Atilde uring -30 -KPX Atilde v -40 -KPX Atilde w -30 -KPX Atilde y -30 -KPX Atilde yacute -30 -KPX Atilde ydieresis -30 -KPX B A -30 -KPX B Aacute -30 -KPX B Abreve -30 -KPX B Acircumflex -30 -KPX B Adieresis -30 -KPX B Agrave -30 -KPX B Amacron -30 -KPX B Aogonek -30 -KPX B Aring -30 -KPX B Atilde -30 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -40 -KPX D Aacute -40 -KPX D Abreve -40 -KPX D Acircumflex -40 -KPX D Adieresis -40 -KPX D Agrave -40 -KPX D Amacron -40 -KPX D Aogonek -40 -KPX D Aring -40 -KPX D Atilde -40 -KPX D V -40 -KPX D W -40 -KPX D Y -70 -KPX D Yacute -70 -KPX D Ydieresis -70 -KPX D comma -30 -KPX D period -30 -KPX Dcaron A -40 -KPX Dcaron Aacute -40 -KPX Dcaron Abreve -40 -KPX Dcaron Acircumflex -40 -KPX Dcaron Adieresis -40 -KPX Dcaron Agrave -40 -KPX Dcaron Amacron -40 -KPX Dcaron Aogonek -40 -KPX Dcaron Aring -40 -KPX Dcaron Atilde -40 -KPX Dcaron V -40 -KPX Dcaron W -40 -KPX Dcaron Y -70 -KPX Dcaron Yacute -70 -KPX Dcaron Ydieresis -70 -KPX Dcaron comma -30 -KPX Dcaron period -30 -KPX Dcroat A -40 -KPX Dcroat Aacute -40 -KPX Dcroat Abreve -40 -KPX Dcroat Acircumflex -40 -KPX Dcroat Adieresis -40 -KPX Dcroat Agrave -40 -KPX Dcroat Amacron -40 -KPX Dcroat Aogonek -40 -KPX Dcroat Aring -40 -KPX Dcroat Atilde -40 -KPX Dcroat V -40 -KPX Dcroat W -40 -KPX Dcroat Y -70 -KPX Dcroat Yacute -70 -KPX Dcroat Ydieresis -70 -KPX Dcroat comma -30 -KPX Dcroat period -30 -KPX F A -80 -KPX F Aacute -80 -KPX F Abreve -80 -KPX F Acircumflex -80 -KPX F Adieresis -80 -KPX F Agrave -80 -KPX F Amacron -80 -KPX F Aogonek -80 -KPX F Aring -80 -KPX F Atilde -80 -KPX F a -20 -KPX F aacute -20 -KPX F abreve -20 -KPX F acircumflex -20 -KPX F adieresis -20 -KPX F agrave -20 -KPX F amacron -20 -KPX F aogonek -20 -KPX F aring -20 -KPX F atilde -20 -KPX F comma -100 -KPX F period -100 -KPX J A -20 -KPX J Aacute -20 -KPX J Abreve -20 -KPX J Acircumflex -20 -KPX J Adieresis -20 -KPX J Agrave -20 -KPX J Amacron -20 -KPX J Aogonek -20 -KPX J Aring -20 -KPX J Atilde -20 -KPX J comma -20 -KPX J period -20 -KPX J u -20 -KPX J uacute -20 -KPX J ucircumflex -20 -KPX J udieresis -20 -KPX J ugrave -20 -KPX J uhungarumlaut -20 -KPX J umacron -20 -KPX J uogonek -20 -KPX J uring -20 -KPX K O -30 -KPX K Oacute -30 -KPX K Ocircumflex -30 -KPX K Odieresis -30 -KPX K Ograve -30 -KPX K Ohungarumlaut -30 -KPX K Omacron -30 -KPX K Oslash -30 -KPX K Otilde -30 -KPX K e -15 -KPX K eacute -15 -KPX K ecaron -15 -KPX K ecircumflex -15 -KPX K edieresis -15 -KPX K edotaccent -15 -KPX K egrave -15 -KPX K emacron -15 -KPX K eogonek -15 -KPX K o -35 -KPX K oacute -35 -KPX K ocircumflex -35 -KPX K odieresis -35 -KPX K ograve -35 -KPX K ohungarumlaut -35 -KPX K omacron -35 -KPX K oslash -35 -KPX K otilde -35 -KPX K u -30 -KPX K uacute -30 -KPX K ucircumflex -30 -KPX K udieresis -30 -KPX K ugrave -30 -KPX K uhungarumlaut -30 -KPX K umacron -30 -KPX K uogonek -30 -KPX K uring -30 -KPX K y -40 -KPX K yacute -40 -KPX K ydieresis -40 -KPX Kcommaaccent O -30 -KPX Kcommaaccent Oacute -30 -KPX Kcommaaccent Ocircumflex -30 -KPX Kcommaaccent Odieresis -30 -KPX Kcommaaccent Ograve -30 -KPX Kcommaaccent Ohungarumlaut -30 -KPX Kcommaaccent Omacron -30 -KPX Kcommaaccent Oslash -30 -KPX Kcommaaccent Otilde -30 -KPX Kcommaaccent e -15 -KPX Kcommaaccent eacute -15 -KPX Kcommaaccent ecaron -15 -KPX Kcommaaccent ecircumflex -15 -KPX Kcommaaccent edieresis -15 -KPX Kcommaaccent edotaccent -15 -KPX Kcommaaccent egrave -15 -KPX Kcommaaccent emacron -15 -KPX Kcommaaccent eogonek -15 -KPX Kcommaaccent o -35 -KPX Kcommaaccent oacute -35 -KPX Kcommaaccent ocircumflex -35 -KPX Kcommaaccent odieresis -35 -KPX Kcommaaccent ograve -35 -KPX Kcommaaccent ohungarumlaut -35 -KPX Kcommaaccent omacron -35 -KPX Kcommaaccent oslash -35 -KPX Kcommaaccent otilde -35 -KPX Kcommaaccent u -30 -KPX Kcommaaccent uacute -30 -KPX Kcommaaccent ucircumflex -30 -KPX Kcommaaccent udieresis -30 -KPX Kcommaaccent ugrave -30 -KPX Kcommaaccent uhungarumlaut -30 -KPX Kcommaaccent umacron -30 -KPX Kcommaaccent uogonek -30 -KPX Kcommaaccent uring -30 -KPX Kcommaaccent y -40 -KPX Kcommaaccent yacute -40 -KPX Kcommaaccent ydieresis -40 -KPX L T -90 -KPX L Tcaron -90 -KPX L Tcommaaccent -90 -KPX L V -110 -KPX L W -80 -KPX L Y -120 -KPX L Yacute -120 -KPX L Ydieresis -120 -KPX L quotedblright -140 -KPX L quoteright -140 -KPX L y -30 -KPX L yacute -30 -KPX L ydieresis -30 -KPX Lacute T -90 -KPX Lacute Tcaron -90 -KPX Lacute Tcommaaccent -90 -KPX Lacute V -110 -KPX Lacute W -80 -KPX Lacute Y -120 -KPX Lacute Yacute -120 -KPX Lacute Ydieresis -120 -KPX Lacute quotedblright -140 -KPX Lacute quoteright -140 -KPX Lacute y -30 -KPX Lacute yacute -30 -KPX Lacute ydieresis -30 -KPX Lcommaaccent T -90 -KPX Lcommaaccent Tcaron -90 -KPX Lcommaaccent Tcommaaccent -90 -KPX Lcommaaccent V -110 -KPX Lcommaaccent W -80 -KPX Lcommaaccent Y -120 -KPX Lcommaaccent Yacute -120 -KPX Lcommaaccent Ydieresis -120 -KPX Lcommaaccent quotedblright -140 -KPX Lcommaaccent quoteright -140 -KPX Lcommaaccent y -30 -KPX Lcommaaccent yacute -30 -KPX Lcommaaccent ydieresis -30 -KPX Lslash T -90 -KPX Lslash Tcaron -90 -KPX Lslash Tcommaaccent -90 -KPX Lslash V -110 -KPX Lslash W -80 -KPX Lslash Y -120 -KPX Lslash Yacute -120 -KPX Lslash Ydieresis -120 -KPX Lslash quotedblright -140 -KPX Lslash quoteright -140 -KPX Lslash y -30 -KPX Lslash yacute -30 -KPX Lslash ydieresis -30 -KPX O A -50 -KPX O Aacute -50 -KPX O Abreve -50 -KPX O Acircumflex -50 -KPX O Adieresis -50 -KPX O Agrave -50 -KPX O Amacron -50 -KPX O Aogonek -50 -KPX O Aring -50 -KPX O Atilde -50 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -50 -KPX O X -50 -KPX O Y -70 -KPX O Yacute -70 -KPX O Ydieresis -70 -KPX O comma -40 -KPX O period -40 -KPX Oacute A -50 -KPX Oacute Aacute -50 -KPX Oacute Abreve -50 -KPX Oacute Acircumflex -50 -KPX Oacute Adieresis -50 -KPX Oacute Agrave -50 -KPX Oacute Amacron -50 -KPX Oacute Aogonek -50 -KPX Oacute Aring -50 -KPX Oacute Atilde -50 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -50 -KPX Oacute X -50 -KPX Oacute Y -70 -KPX Oacute Yacute -70 -KPX Oacute Ydieresis -70 -KPX Oacute comma -40 -KPX Oacute period -40 -KPX Ocircumflex A -50 -KPX Ocircumflex Aacute -50 -KPX Ocircumflex Abreve -50 -KPX Ocircumflex Acircumflex -50 -KPX Ocircumflex Adieresis -50 -KPX Ocircumflex Agrave -50 -KPX Ocircumflex Amacron -50 -KPX Ocircumflex Aogonek -50 -KPX Ocircumflex Aring -50 -KPX Ocircumflex Atilde -50 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -50 -KPX Ocircumflex X -50 -KPX Ocircumflex Y -70 -KPX Ocircumflex Yacute -70 -KPX Ocircumflex Ydieresis -70 -KPX Ocircumflex comma -40 -KPX Ocircumflex period -40 -KPX Odieresis A -50 -KPX Odieresis Aacute -50 -KPX Odieresis Abreve -50 -KPX Odieresis Acircumflex -50 -KPX Odieresis Adieresis -50 -KPX Odieresis Agrave -50 -KPX Odieresis Amacron -50 -KPX Odieresis Aogonek -50 -KPX Odieresis Aring -50 -KPX Odieresis Atilde -50 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -50 -KPX Odieresis X -50 -KPX Odieresis Y -70 -KPX Odieresis Yacute -70 -KPX Odieresis Ydieresis -70 -KPX Odieresis comma -40 -KPX Odieresis period -40 -KPX Ograve A -50 -KPX Ograve Aacute -50 -KPX Ograve Abreve -50 -KPX Ograve Acircumflex -50 -KPX Ograve Adieresis -50 -KPX Ograve Agrave -50 -KPX Ograve Amacron -50 -KPX Ograve Aogonek -50 -KPX Ograve Aring -50 -KPX Ograve Atilde -50 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -50 -KPX Ograve X -50 -KPX Ograve Y -70 -KPX Ograve Yacute -70 -KPX Ograve Ydieresis -70 -KPX Ograve comma -40 -KPX Ograve period -40 -KPX Ohungarumlaut A -50 -KPX Ohungarumlaut Aacute -50 -KPX Ohungarumlaut Abreve -50 -KPX Ohungarumlaut Acircumflex -50 -KPX Ohungarumlaut Adieresis -50 -KPX Ohungarumlaut Agrave -50 -KPX Ohungarumlaut Amacron -50 -KPX Ohungarumlaut Aogonek -50 -KPX Ohungarumlaut Aring -50 -KPX Ohungarumlaut Atilde -50 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -50 -KPX Ohungarumlaut X -50 -KPX Ohungarumlaut Y -70 -KPX Ohungarumlaut Yacute -70 -KPX Ohungarumlaut Ydieresis -70 -KPX Ohungarumlaut comma -40 -KPX Ohungarumlaut period -40 -KPX Omacron A -50 -KPX Omacron Aacute -50 -KPX Omacron Abreve -50 -KPX Omacron Acircumflex -50 -KPX Omacron Adieresis -50 -KPX Omacron Agrave -50 -KPX Omacron Amacron -50 -KPX Omacron Aogonek -50 -KPX Omacron Aring -50 -KPX Omacron Atilde -50 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -50 -KPX Omacron X -50 -KPX Omacron Y -70 -KPX Omacron Yacute -70 -KPX Omacron Ydieresis -70 -KPX Omacron comma -40 -KPX Omacron period -40 -KPX Oslash A -50 -KPX Oslash Aacute -50 -KPX Oslash Abreve -50 -KPX Oslash Acircumflex -50 -KPX Oslash Adieresis -50 -KPX Oslash Agrave -50 -KPX Oslash Amacron -50 -KPX Oslash Aogonek -50 -KPX Oslash Aring -50 -KPX Oslash Atilde -50 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -50 -KPX Oslash X -50 -KPX Oslash Y -70 -KPX Oslash Yacute -70 -KPX Oslash Ydieresis -70 -KPX Oslash comma -40 -KPX Oslash period -40 -KPX Otilde A -50 -KPX Otilde Aacute -50 -KPX Otilde Abreve -50 -KPX Otilde Acircumflex -50 -KPX Otilde Adieresis -50 -KPX Otilde Agrave -50 -KPX Otilde Amacron -50 -KPX Otilde Aogonek -50 -KPX Otilde Aring -50 -KPX Otilde Atilde -50 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -50 -KPX Otilde X -50 -KPX Otilde Y -70 -KPX Otilde Yacute -70 -KPX Otilde Ydieresis -70 -KPX Otilde comma -40 -KPX Otilde period -40 -KPX P A -100 -KPX P Aacute -100 -KPX P Abreve -100 -KPX P Acircumflex -100 -KPX P Adieresis -100 -KPX P Agrave -100 -KPX P Amacron -100 -KPX P Aogonek -100 -KPX P Aring -100 -KPX P Atilde -100 -KPX P a -30 -KPX P aacute -30 -KPX P abreve -30 -KPX P acircumflex -30 -KPX P adieresis -30 -KPX P agrave -30 -KPX P amacron -30 -KPX P aogonek -30 -KPX P aring -30 -KPX P atilde -30 -KPX P comma -120 -KPX P e -30 -KPX P eacute -30 -KPX P ecaron -30 -KPX P ecircumflex -30 -KPX P edieresis -30 -KPX P edotaccent -30 -KPX P egrave -30 -KPX P emacron -30 -KPX P eogonek -30 -KPX P o -40 -KPX P oacute -40 -KPX P ocircumflex -40 -KPX P odieresis -40 -KPX P ograve -40 -KPX P ohungarumlaut -40 -KPX P omacron -40 -KPX P oslash -40 -KPX P otilde -40 -KPX P period -120 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX Q comma 20 -KPX Q period 20 -KPX R O -20 -KPX R Oacute -20 -KPX R Ocircumflex -20 -KPX R Odieresis -20 -KPX R Ograve -20 -KPX R Ohungarumlaut -20 -KPX R Omacron -20 -KPX R Oslash -20 -KPX R Otilde -20 -KPX R T -20 -KPX R Tcaron -20 -KPX R Tcommaaccent -20 -KPX R U -20 -KPX R Uacute -20 -KPX R Ucircumflex -20 -KPX R Udieresis -20 -KPX R Ugrave -20 -KPX R Uhungarumlaut -20 -KPX R Umacron -20 -KPX R Uogonek -20 -KPX R Uring -20 -KPX R V -50 -KPX R W -40 -KPX R Y -50 -KPX R Yacute -50 -KPX R Ydieresis -50 -KPX Racute O -20 -KPX Racute Oacute -20 -KPX Racute Ocircumflex -20 -KPX Racute Odieresis -20 -KPX Racute Ograve -20 -KPX Racute Ohungarumlaut -20 -KPX Racute Omacron -20 -KPX Racute Oslash -20 -KPX Racute Otilde -20 -KPX Racute T -20 -KPX Racute Tcaron -20 -KPX Racute Tcommaaccent -20 -KPX Racute U -20 -KPX Racute Uacute -20 -KPX Racute Ucircumflex -20 -KPX Racute Udieresis -20 -KPX Racute Ugrave -20 -KPX Racute Uhungarumlaut -20 -KPX Racute Umacron -20 -KPX Racute Uogonek -20 -KPX Racute Uring -20 -KPX Racute V -50 -KPX Racute W -40 -KPX Racute Y -50 -KPX Racute Yacute -50 -KPX Racute Ydieresis -50 -KPX Rcaron O -20 -KPX Rcaron Oacute -20 -KPX Rcaron Ocircumflex -20 -KPX Rcaron Odieresis -20 -KPX Rcaron Ograve -20 -KPX Rcaron Ohungarumlaut -20 -KPX Rcaron Omacron -20 -KPX Rcaron Oslash -20 -KPX Rcaron Otilde -20 -KPX Rcaron T -20 -KPX Rcaron Tcaron -20 -KPX Rcaron Tcommaaccent -20 -KPX Rcaron U -20 -KPX Rcaron Uacute -20 -KPX Rcaron Ucircumflex -20 -KPX Rcaron Udieresis -20 -KPX Rcaron Ugrave -20 -KPX Rcaron Uhungarumlaut -20 -KPX Rcaron Umacron -20 -KPX Rcaron Uogonek -20 -KPX Rcaron Uring -20 -KPX Rcaron V -50 -KPX Rcaron W -40 -KPX Rcaron Y -50 -KPX Rcaron Yacute -50 -KPX Rcaron Ydieresis -50 -KPX Rcommaaccent O -20 -KPX Rcommaaccent Oacute -20 -KPX Rcommaaccent Ocircumflex -20 -KPX Rcommaaccent Odieresis -20 -KPX Rcommaaccent Ograve -20 -KPX Rcommaaccent Ohungarumlaut -20 -KPX Rcommaaccent Omacron -20 -KPX Rcommaaccent Oslash -20 -KPX Rcommaaccent Otilde -20 -KPX Rcommaaccent T -20 -KPX Rcommaaccent Tcaron -20 -KPX Rcommaaccent Tcommaaccent -20 -KPX Rcommaaccent U -20 -KPX Rcommaaccent Uacute -20 -KPX Rcommaaccent Ucircumflex -20 -KPX Rcommaaccent Udieresis -20 -KPX Rcommaaccent Ugrave -20 -KPX Rcommaaccent Uhungarumlaut -20 -KPX Rcommaaccent Umacron -20 -KPX Rcommaaccent Uogonek -20 -KPX Rcommaaccent Uring -20 -KPX Rcommaaccent V -50 -KPX Rcommaaccent W -40 -KPX Rcommaaccent Y -50 -KPX Rcommaaccent Yacute -50 -KPX Rcommaaccent Ydieresis -50 -KPX T A -90 -KPX T Aacute -90 -KPX T Abreve -90 -KPX T Acircumflex -90 -KPX T Adieresis -90 -KPX T Agrave -90 -KPX T Amacron -90 -KPX T Aogonek -90 -KPX T Aring -90 -KPX T Atilde -90 -KPX T O -40 -KPX T Oacute -40 -KPX T Ocircumflex -40 -KPX T Odieresis -40 -KPX T Ograve -40 -KPX T Ohungarumlaut -40 -KPX T Omacron -40 -KPX T Oslash -40 -KPX T Otilde -40 -KPX T a -80 -KPX T aacute -80 -KPX T abreve -80 -KPX T acircumflex -80 -KPX T adieresis -80 -KPX T agrave -80 -KPX T amacron -80 -KPX T aogonek -80 -KPX T aring -80 -KPX T atilde -80 -KPX T colon -40 -KPX T comma -80 -KPX T e -60 -KPX T eacute -60 -KPX T ecaron -60 -KPX T ecircumflex -60 -KPX T edieresis -60 -KPX T edotaccent -60 -KPX T egrave -60 -KPX T emacron -60 -KPX T eogonek -60 -KPX T hyphen -120 -KPX T o -80 -KPX T oacute -80 -KPX T ocircumflex -80 -KPX T odieresis -80 -KPX T ograve -80 -KPX T ohungarumlaut -80 -KPX T omacron -80 -KPX T oslash -80 -KPX T otilde -80 -KPX T period -80 -KPX T r -80 -KPX T racute -80 -KPX T rcommaaccent -80 -KPX T semicolon -40 -KPX T u -90 -KPX T uacute -90 -KPX T ucircumflex -90 -KPX T udieresis -90 -KPX T ugrave -90 -KPX T uhungarumlaut -90 -KPX T umacron -90 -KPX T uogonek -90 -KPX T uring -90 -KPX T w -60 -KPX T y -60 -KPX T yacute -60 -KPX T ydieresis -60 -KPX Tcaron A -90 -KPX Tcaron Aacute -90 -KPX Tcaron Abreve -90 -KPX Tcaron Acircumflex -90 -KPX Tcaron Adieresis -90 -KPX Tcaron Agrave -90 -KPX Tcaron Amacron -90 -KPX Tcaron Aogonek -90 -KPX Tcaron Aring -90 -KPX Tcaron Atilde -90 -KPX Tcaron O -40 -KPX Tcaron Oacute -40 -KPX Tcaron Ocircumflex -40 -KPX Tcaron Odieresis -40 -KPX Tcaron Ograve -40 -KPX Tcaron Ohungarumlaut -40 -KPX Tcaron Omacron -40 -KPX Tcaron Oslash -40 -KPX Tcaron Otilde -40 -KPX Tcaron a -80 -KPX Tcaron aacute -80 -KPX Tcaron abreve -80 -KPX Tcaron acircumflex -80 -KPX Tcaron adieresis -80 -KPX Tcaron agrave -80 -KPX Tcaron amacron -80 -KPX Tcaron aogonek -80 -KPX Tcaron aring -80 -KPX Tcaron atilde -80 -KPX Tcaron colon -40 -KPX Tcaron comma -80 -KPX Tcaron e -60 -KPX Tcaron eacute -60 -KPX Tcaron ecaron -60 -KPX Tcaron ecircumflex -60 -KPX Tcaron edieresis -60 -KPX Tcaron edotaccent -60 -KPX Tcaron egrave -60 -KPX Tcaron emacron -60 -KPX Tcaron eogonek -60 -KPX Tcaron hyphen -120 -KPX Tcaron o -80 -KPX Tcaron oacute -80 -KPX Tcaron ocircumflex -80 -KPX Tcaron odieresis -80 -KPX Tcaron ograve -80 -KPX Tcaron ohungarumlaut -80 -KPX Tcaron omacron -80 -KPX Tcaron oslash -80 -KPX Tcaron otilde -80 -KPX Tcaron period -80 -KPX Tcaron r -80 -KPX Tcaron racute -80 -KPX Tcaron rcommaaccent -80 -KPX Tcaron semicolon -40 -KPX Tcaron u -90 -KPX Tcaron uacute -90 -KPX Tcaron ucircumflex -90 -KPX Tcaron udieresis -90 -KPX Tcaron ugrave -90 -KPX Tcaron uhungarumlaut -90 -KPX Tcaron umacron -90 -KPX Tcaron uogonek -90 -KPX Tcaron uring -90 -KPX Tcaron w -60 -KPX Tcaron y -60 -KPX Tcaron yacute -60 -KPX Tcaron ydieresis -60 -KPX Tcommaaccent A -90 -KPX Tcommaaccent Aacute -90 -KPX Tcommaaccent Abreve -90 -KPX Tcommaaccent Acircumflex -90 -KPX Tcommaaccent Adieresis -90 -KPX Tcommaaccent Agrave -90 -KPX Tcommaaccent Amacron -90 -KPX Tcommaaccent Aogonek -90 -KPX Tcommaaccent Aring -90 -KPX Tcommaaccent Atilde -90 -KPX Tcommaaccent O -40 -KPX Tcommaaccent Oacute -40 -KPX Tcommaaccent Ocircumflex -40 -KPX Tcommaaccent Odieresis -40 -KPX Tcommaaccent Ograve -40 -KPX Tcommaaccent Ohungarumlaut -40 -KPX Tcommaaccent Omacron -40 -KPX Tcommaaccent Oslash -40 -KPX Tcommaaccent Otilde -40 -KPX Tcommaaccent a -80 -KPX Tcommaaccent aacute -80 -KPX Tcommaaccent abreve -80 -KPX Tcommaaccent acircumflex -80 -KPX Tcommaaccent adieresis -80 -KPX Tcommaaccent agrave -80 -KPX Tcommaaccent amacron -80 -KPX Tcommaaccent aogonek -80 -KPX Tcommaaccent aring -80 -KPX Tcommaaccent atilde -80 -KPX Tcommaaccent colon -40 -KPX Tcommaaccent comma -80 -KPX Tcommaaccent e -60 -KPX Tcommaaccent eacute -60 -KPX Tcommaaccent ecaron -60 -KPX Tcommaaccent ecircumflex -60 -KPX Tcommaaccent edieresis -60 -KPX Tcommaaccent edotaccent -60 -KPX Tcommaaccent egrave -60 -KPX Tcommaaccent emacron -60 -KPX Tcommaaccent eogonek -60 -KPX Tcommaaccent hyphen -120 -KPX Tcommaaccent o -80 -KPX Tcommaaccent oacute -80 -KPX Tcommaaccent ocircumflex -80 -KPX Tcommaaccent odieresis -80 -KPX Tcommaaccent ograve -80 -KPX Tcommaaccent ohungarumlaut -80 -KPX Tcommaaccent omacron -80 -KPX Tcommaaccent oslash -80 -KPX Tcommaaccent otilde -80 -KPX Tcommaaccent period -80 -KPX Tcommaaccent r -80 -KPX Tcommaaccent racute -80 -KPX Tcommaaccent rcommaaccent -80 -KPX Tcommaaccent semicolon -40 -KPX Tcommaaccent u -90 -KPX Tcommaaccent uacute -90 -KPX Tcommaaccent ucircumflex -90 -KPX Tcommaaccent udieresis -90 -KPX Tcommaaccent ugrave -90 -KPX Tcommaaccent uhungarumlaut -90 -KPX Tcommaaccent umacron -90 -KPX Tcommaaccent uogonek -90 -KPX Tcommaaccent uring -90 -KPX Tcommaaccent w -60 -KPX Tcommaaccent y -60 -KPX Tcommaaccent yacute -60 -KPX Tcommaaccent ydieresis -60 -KPX U A -50 -KPX U Aacute -50 -KPX U Abreve -50 -KPX U Acircumflex -50 -KPX U Adieresis -50 -KPX U Agrave -50 -KPX U Amacron -50 -KPX U Aogonek -50 -KPX U Aring -50 -KPX U Atilde -50 -KPX U comma -30 -KPX U period -30 -KPX Uacute A -50 -KPX Uacute Aacute -50 -KPX Uacute Abreve -50 -KPX Uacute Acircumflex -50 -KPX Uacute Adieresis -50 -KPX Uacute Agrave -50 -KPX Uacute Amacron -50 -KPX Uacute Aogonek -50 -KPX Uacute Aring -50 -KPX Uacute Atilde -50 -KPX Uacute comma -30 -KPX Uacute period -30 -KPX Ucircumflex A -50 -KPX Ucircumflex Aacute -50 -KPX Ucircumflex Abreve -50 -KPX Ucircumflex Acircumflex -50 -KPX Ucircumflex Adieresis -50 -KPX Ucircumflex Agrave -50 -KPX Ucircumflex Amacron -50 -KPX Ucircumflex Aogonek -50 -KPX Ucircumflex Aring -50 -KPX Ucircumflex Atilde -50 -KPX Ucircumflex comma -30 -KPX Ucircumflex period -30 -KPX Udieresis A -50 -KPX Udieresis Aacute -50 -KPX Udieresis Abreve -50 -KPX Udieresis Acircumflex -50 -KPX Udieresis Adieresis -50 -KPX Udieresis Agrave -50 -KPX Udieresis Amacron -50 -KPX Udieresis Aogonek -50 -KPX Udieresis Aring -50 -KPX Udieresis Atilde -50 -KPX Udieresis comma -30 -KPX Udieresis period -30 -KPX Ugrave A -50 -KPX Ugrave Aacute -50 -KPX Ugrave Abreve -50 -KPX Ugrave Acircumflex -50 -KPX Ugrave Adieresis -50 -KPX Ugrave Agrave -50 -KPX Ugrave Amacron -50 -KPX Ugrave Aogonek -50 -KPX Ugrave Aring -50 -KPX Ugrave Atilde -50 -KPX Ugrave comma -30 -KPX Ugrave period -30 -KPX Uhungarumlaut A -50 -KPX Uhungarumlaut Aacute -50 -KPX Uhungarumlaut Abreve -50 -KPX Uhungarumlaut Acircumflex -50 -KPX Uhungarumlaut Adieresis -50 -KPX Uhungarumlaut Agrave -50 -KPX Uhungarumlaut Amacron -50 -KPX Uhungarumlaut Aogonek -50 -KPX Uhungarumlaut Aring -50 -KPX Uhungarumlaut Atilde -50 -KPX Uhungarumlaut comma -30 -KPX Uhungarumlaut period -30 -KPX Umacron A -50 -KPX Umacron Aacute -50 -KPX Umacron Abreve -50 -KPX Umacron Acircumflex -50 -KPX Umacron Adieresis -50 -KPX Umacron Agrave -50 -KPX Umacron Amacron -50 -KPX Umacron Aogonek -50 -KPX Umacron Aring -50 -KPX Umacron Atilde -50 -KPX Umacron comma -30 -KPX Umacron period -30 -KPX Uogonek A -50 -KPX Uogonek Aacute -50 -KPX Uogonek Abreve -50 -KPX Uogonek Acircumflex -50 -KPX Uogonek Adieresis -50 -KPX Uogonek Agrave -50 -KPX Uogonek Amacron -50 -KPX Uogonek Aogonek -50 -KPX Uogonek Aring -50 -KPX Uogonek Atilde -50 -KPX Uogonek comma -30 -KPX Uogonek period -30 -KPX Uring A -50 -KPX Uring Aacute -50 -KPX Uring Abreve -50 -KPX Uring Acircumflex -50 -KPX Uring Adieresis -50 -KPX Uring Agrave -50 -KPX Uring Amacron -50 -KPX Uring Aogonek -50 -KPX Uring Aring -50 -KPX Uring Atilde -50 -KPX Uring comma -30 -KPX Uring period -30 -KPX V A -80 -KPX V Aacute -80 -KPX V Abreve -80 -KPX V Acircumflex -80 -KPX V Adieresis -80 -KPX V Agrave -80 -KPX V Amacron -80 -KPX V Aogonek -80 -KPX V Aring -80 -KPX V Atilde -80 -KPX V G -50 -KPX V Gbreve -50 -KPX V Gcommaaccent -50 -KPX V O -50 -KPX V Oacute -50 -KPX V Ocircumflex -50 -KPX V Odieresis -50 -KPX V Ograve -50 -KPX V Ohungarumlaut -50 -KPX V Omacron -50 -KPX V Oslash -50 -KPX V Otilde -50 -KPX V a -60 -KPX V aacute -60 -KPX V abreve -60 -KPX V acircumflex -60 -KPX V adieresis -60 -KPX V agrave -60 -KPX V amacron -60 -KPX V aogonek -60 -KPX V aring -60 -KPX V atilde -60 -KPX V colon -40 -KPX V comma -120 -KPX V e -50 -KPX V eacute -50 -KPX V ecaron -50 -KPX V ecircumflex -50 -KPX V edieresis -50 -KPX V edotaccent -50 -KPX V egrave -50 -KPX V emacron -50 -KPX V eogonek -50 -KPX V hyphen -80 -KPX V o -90 -KPX V oacute -90 -KPX V ocircumflex -90 -KPX V odieresis -90 -KPX V ograve -90 -KPX V ohungarumlaut -90 -KPX V omacron -90 -KPX V oslash -90 -KPX V otilde -90 -KPX V period -120 -KPX V semicolon -40 -KPX V u -60 -KPX V uacute -60 -KPX V ucircumflex -60 -KPX V udieresis -60 -KPX V ugrave -60 -KPX V uhungarumlaut -60 -KPX V umacron -60 -KPX V uogonek -60 -KPX V uring -60 -KPX W A -60 -KPX W Aacute -60 -KPX W Abreve -60 -KPX W Acircumflex -60 -KPX W Adieresis -60 -KPX W Agrave -60 -KPX W Amacron -60 -KPX W Aogonek -60 -KPX W Aring -60 -KPX W Atilde -60 -KPX W O -20 -KPX W Oacute -20 -KPX W Ocircumflex -20 -KPX W Odieresis -20 -KPX W Ograve -20 -KPX W Ohungarumlaut -20 -KPX W Omacron -20 -KPX W Oslash -20 -KPX W Otilde -20 -KPX W a -40 -KPX W aacute -40 -KPX W abreve -40 -KPX W acircumflex -40 -KPX W adieresis -40 -KPX W agrave -40 -KPX W amacron -40 -KPX W aogonek -40 -KPX W aring -40 -KPX W atilde -40 -KPX W colon -10 -KPX W comma -80 -KPX W e -35 -KPX W eacute -35 -KPX W ecaron -35 -KPX W ecircumflex -35 -KPX W edieresis -35 -KPX W edotaccent -35 -KPX W egrave -35 -KPX W emacron -35 -KPX W eogonek -35 -KPX W hyphen -40 -KPX W o -60 -KPX W oacute -60 -KPX W ocircumflex -60 -KPX W odieresis -60 -KPX W ograve -60 -KPX W ohungarumlaut -60 -KPX W omacron -60 -KPX W oslash -60 -KPX W otilde -60 -KPX W period -80 -KPX W semicolon -10 -KPX W u -45 -KPX W uacute -45 -KPX W ucircumflex -45 -KPX W udieresis -45 -KPX W ugrave -45 -KPX W uhungarumlaut -45 -KPX W umacron -45 -KPX W uogonek -45 -KPX W uring -45 -KPX W y -20 -KPX W yacute -20 -KPX W ydieresis -20 -KPX Y A -110 -KPX Y Aacute -110 -KPX Y Abreve -110 -KPX Y Acircumflex -110 -KPX Y Adieresis -110 -KPX Y Agrave -110 -KPX Y Amacron -110 -KPX Y Aogonek -110 -KPX Y Aring -110 -KPX Y Atilde -110 -KPX Y O -70 -KPX Y Oacute -70 -KPX Y Ocircumflex -70 -KPX Y Odieresis -70 -KPX Y Ograve -70 -KPX Y Ohungarumlaut -70 -KPX Y Omacron -70 -KPX Y Oslash -70 -KPX Y Otilde -70 -KPX Y a -90 -KPX Y aacute -90 -KPX Y abreve -90 -KPX Y acircumflex -90 -KPX Y adieresis -90 -KPX Y agrave -90 -KPX Y amacron -90 -KPX Y aogonek -90 -KPX Y aring -90 -KPX Y atilde -90 -KPX Y colon -50 -KPX Y comma -100 -KPX Y e -80 -KPX Y eacute -80 -KPX Y ecaron -80 -KPX Y ecircumflex -80 -KPX Y edieresis -80 -KPX Y edotaccent -80 -KPX Y egrave -80 -KPX Y emacron -80 -KPX Y eogonek -80 -KPX Y o -100 -KPX Y oacute -100 -KPX Y ocircumflex -100 -KPX Y odieresis -100 -KPX Y ograve -100 -KPX Y ohungarumlaut -100 -KPX Y omacron -100 -KPX Y oslash -100 -KPX Y otilde -100 -KPX Y period -100 -KPX Y semicolon -50 -KPX Y u -100 -KPX Y uacute -100 -KPX Y ucircumflex -100 -KPX Y udieresis -100 -KPX Y ugrave -100 -KPX Y uhungarumlaut -100 -KPX Y umacron -100 -KPX Y uogonek -100 -KPX Y uring -100 -KPX Yacute A -110 -KPX Yacute Aacute -110 -KPX Yacute Abreve -110 -KPX Yacute Acircumflex -110 -KPX Yacute Adieresis -110 -KPX Yacute Agrave -110 -KPX Yacute Amacron -110 -KPX Yacute Aogonek -110 -KPX Yacute Aring -110 -KPX Yacute Atilde -110 -KPX Yacute O -70 -KPX Yacute Oacute -70 -KPX Yacute Ocircumflex -70 -KPX Yacute Odieresis -70 -KPX Yacute Ograve -70 -KPX Yacute Ohungarumlaut -70 -KPX Yacute Omacron -70 -KPX Yacute Oslash -70 -KPX Yacute Otilde -70 -KPX Yacute a -90 -KPX Yacute aacute -90 -KPX Yacute abreve -90 -KPX Yacute acircumflex -90 -KPX Yacute adieresis -90 -KPX Yacute agrave -90 -KPX Yacute amacron -90 -KPX Yacute aogonek -90 -KPX Yacute aring -90 -KPX Yacute atilde -90 -KPX Yacute colon -50 -KPX Yacute comma -100 -KPX Yacute e -80 -KPX Yacute eacute -80 -KPX Yacute ecaron -80 -KPX Yacute ecircumflex -80 -KPX Yacute edieresis -80 -KPX Yacute edotaccent -80 -KPX Yacute egrave -80 -KPX Yacute emacron -80 -KPX Yacute eogonek -80 -KPX Yacute o -100 -KPX Yacute oacute -100 -KPX Yacute ocircumflex -100 -KPX Yacute odieresis -100 -KPX Yacute ograve -100 -KPX Yacute ohungarumlaut -100 -KPX Yacute omacron -100 -KPX Yacute oslash -100 -KPX Yacute otilde -100 -KPX Yacute period -100 -KPX Yacute semicolon -50 -KPX Yacute u -100 -KPX Yacute uacute -100 -KPX Yacute ucircumflex -100 -KPX Yacute udieresis -100 -KPX Yacute ugrave -100 -KPX Yacute uhungarumlaut -100 -KPX Yacute umacron -100 -KPX Yacute uogonek -100 -KPX Yacute uring -100 -KPX Ydieresis A -110 -KPX Ydieresis Aacute -110 -KPX Ydieresis Abreve -110 -KPX Ydieresis Acircumflex -110 -KPX Ydieresis Adieresis -110 -KPX Ydieresis Agrave -110 -KPX Ydieresis Amacron -110 -KPX Ydieresis Aogonek -110 -KPX Ydieresis Aring -110 -KPX Ydieresis Atilde -110 -KPX Ydieresis O -70 -KPX Ydieresis Oacute -70 -KPX Ydieresis Ocircumflex -70 -KPX Ydieresis Odieresis -70 -KPX Ydieresis Ograve -70 -KPX Ydieresis Ohungarumlaut -70 -KPX Ydieresis Omacron -70 -KPX Ydieresis Oslash -70 -KPX Ydieresis Otilde -70 -KPX Ydieresis a -90 -KPX Ydieresis aacute -90 -KPX Ydieresis abreve -90 -KPX Ydieresis acircumflex -90 -KPX Ydieresis adieresis -90 -KPX Ydieresis agrave -90 -KPX Ydieresis amacron -90 -KPX Ydieresis aogonek -90 -KPX Ydieresis aring -90 -KPX Ydieresis atilde -90 -KPX Ydieresis colon -50 -KPX Ydieresis comma -100 -KPX Ydieresis e -80 -KPX Ydieresis eacute -80 -KPX Ydieresis ecaron -80 -KPX Ydieresis ecircumflex -80 -KPX Ydieresis edieresis -80 -KPX Ydieresis edotaccent -80 -KPX Ydieresis egrave -80 -KPX Ydieresis emacron -80 -KPX Ydieresis eogonek -80 -KPX Ydieresis o -100 -KPX Ydieresis oacute -100 -KPX Ydieresis ocircumflex -100 -KPX Ydieresis odieresis -100 -KPX Ydieresis ograve -100 -KPX Ydieresis ohungarumlaut -100 -KPX Ydieresis omacron -100 -KPX Ydieresis oslash -100 -KPX Ydieresis otilde -100 -KPX Ydieresis period -100 -KPX Ydieresis semicolon -50 -KPX Ydieresis u -100 -KPX Ydieresis uacute -100 -KPX Ydieresis ucircumflex -100 -KPX Ydieresis udieresis -100 -KPX Ydieresis ugrave -100 -KPX Ydieresis uhungarumlaut -100 -KPX Ydieresis umacron -100 -KPX Ydieresis uogonek -100 -KPX Ydieresis uring -100 -KPX a g -10 -KPX a gbreve -10 -KPX a gcommaaccent -10 -KPX a v -15 -KPX a w -15 -KPX a y -20 -KPX a yacute -20 -KPX a ydieresis -20 -KPX aacute g -10 -KPX aacute gbreve -10 -KPX aacute gcommaaccent -10 -KPX aacute v -15 -KPX aacute w -15 -KPX aacute y -20 -KPX aacute yacute -20 -KPX aacute ydieresis -20 -KPX abreve g -10 -KPX abreve gbreve -10 -KPX abreve gcommaaccent -10 -KPX abreve v -15 -KPX abreve w -15 -KPX abreve y -20 -KPX abreve yacute -20 -KPX abreve ydieresis -20 -KPX acircumflex g -10 -KPX acircumflex gbreve -10 -KPX acircumflex gcommaaccent -10 -KPX acircumflex v -15 -KPX acircumflex w -15 -KPX acircumflex y -20 -KPX acircumflex yacute -20 -KPX acircumflex ydieresis -20 -KPX adieresis g -10 -KPX adieresis gbreve -10 -KPX adieresis gcommaaccent -10 -KPX adieresis v -15 -KPX adieresis w -15 -KPX adieresis y -20 -KPX adieresis yacute -20 -KPX adieresis ydieresis -20 -KPX agrave g -10 -KPX agrave gbreve -10 -KPX agrave gcommaaccent -10 -KPX agrave v -15 -KPX agrave w -15 -KPX agrave y -20 -KPX agrave yacute -20 -KPX agrave ydieresis -20 -KPX amacron g -10 -KPX amacron gbreve -10 -KPX amacron gcommaaccent -10 -KPX amacron v -15 -KPX amacron w -15 -KPX amacron y -20 -KPX amacron yacute -20 -KPX amacron ydieresis -20 -KPX aogonek g -10 -KPX aogonek gbreve -10 -KPX aogonek gcommaaccent -10 -KPX aogonek v -15 -KPX aogonek w -15 -KPX aogonek y -20 -KPX aogonek yacute -20 -KPX aogonek ydieresis -20 -KPX aring g -10 -KPX aring gbreve -10 -KPX aring gcommaaccent -10 -KPX aring v -15 -KPX aring w -15 -KPX aring y -20 -KPX aring yacute -20 -KPX aring ydieresis -20 -KPX atilde g -10 -KPX atilde gbreve -10 -KPX atilde gcommaaccent -10 -KPX atilde v -15 -KPX atilde w -15 -KPX atilde y -20 -KPX atilde yacute -20 -KPX atilde ydieresis -20 -KPX b l -10 -KPX b lacute -10 -KPX b lcommaaccent -10 -KPX b lslash -10 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -20 -KPX b y -20 -KPX b yacute -20 -KPX b ydieresis -20 -KPX c h -10 -KPX c k -20 -KPX c kcommaaccent -20 -KPX c l -20 -KPX c lacute -20 -KPX c lcommaaccent -20 -KPX c lslash -20 -KPX c y -10 -KPX c yacute -10 -KPX c ydieresis -10 -KPX cacute h -10 -KPX cacute k -20 -KPX cacute kcommaaccent -20 -KPX cacute l -20 -KPX cacute lacute -20 -KPX cacute lcommaaccent -20 -KPX cacute lslash -20 -KPX cacute y -10 -KPX cacute yacute -10 -KPX cacute ydieresis -10 -KPX ccaron h -10 -KPX ccaron k -20 -KPX ccaron kcommaaccent -20 -KPX ccaron l -20 -KPX ccaron lacute -20 -KPX ccaron lcommaaccent -20 -KPX ccaron lslash -20 -KPX ccaron y -10 -KPX ccaron yacute -10 -KPX ccaron ydieresis -10 -KPX ccedilla h -10 -KPX ccedilla k -20 -KPX ccedilla kcommaaccent -20 -KPX ccedilla l -20 -KPX ccedilla lacute -20 -KPX ccedilla lcommaaccent -20 -KPX ccedilla lslash -20 -KPX ccedilla y -10 -KPX ccedilla yacute -10 -KPX ccedilla ydieresis -10 -KPX colon space -40 -KPX comma quotedblright -120 -KPX comma quoteright -120 -KPX comma space -40 -KPX d d -10 -KPX d dcroat -10 -KPX d v -15 -KPX d w -15 -KPX d y -15 -KPX d yacute -15 -KPX d ydieresis -15 -KPX dcroat d -10 -KPX dcroat dcroat -10 -KPX dcroat v -15 -KPX dcroat w -15 -KPX dcroat y -15 -KPX dcroat yacute -15 -KPX dcroat ydieresis -15 -KPX e comma 10 -KPX e period 20 -KPX e v -15 -KPX e w -15 -KPX e x -15 -KPX e y -15 -KPX e yacute -15 -KPX e ydieresis -15 -KPX eacute comma 10 -KPX eacute period 20 -KPX eacute v -15 -KPX eacute w -15 -KPX eacute x -15 -KPX eacute y -15 -KPX eacute yacute -15 -KPX eacute ydieresis -15 -KPX ecaron comma 10 -KPX ecaron period 20 -KPX ecaron v -15 -KPX ecaron w -15 -KPX ecaron x -15 -KPX ecaron y -15 -KPX ecaron yacute -15 -KPX ecaron ydieresis -15 -KPX ecircumflex comma 10 -KPX ecircumflex period 20 -KPX ecircumflex v -15 -KPX ecircumflex w -15 -KPX ecircumflex x -15 -KPX ecircumflex y -15 -KPX ecircumflex yacute -15 -KPX ecircumflex ydieresis -15 -KPX edieresis comma 10 -KPX edieresis period 20 -KPX edieresis v -15 -KPX edieresis w -15 -KPX edieresis x -15 -KPX edieresis y -15 -KPX edieresis yacute -15 -KPX edieresis ydieresis -15 -KPX edotaccent comma 10 -KPX edotaccent period 20 -KPX edotaccent v -15 -KPX edotaccent w -15 -KPX edotaccent x -15 -KPX edotaccent y -15 -KPX edotaccent yacute -15 -KPX edotaccent ydieresis -15 -KPX egrave comma 10 -KPX egrave period 20 -KPX egrave v -15 -KPX egrave w -15 -KPX egrave x -15 -KPX egrave y -15 -KPX egrave yacute -15 -KPX egrave ydieresis -15 -KPX emacron comma 10 -KPX emacron period 20 -KPX emacron v -15 -KPX emacron w -15 -KPX emacron x -15 -KPX emacron y -15 -KPX emacron yacute -15 -KPX emacron ydieresis -15 -KPX eogonek comma 10 -KPX eogonek period 20 -KPX eogonek v -15 -KPX eogonek w -15 -KPX eogonek x -15 -KPX eogonek y -15 -KPX eogonek yacute -15 -KPX eogonek ydieresis -15 -KPX f comma -10 -KPX f e -10 -KPX f eacute -10 -KPX f ecaron -10 -KPX f ecircumflex -10 -KPX f edieresis -10 -KPX f edotaccent -10 -KPX f egrave -10 -KPX f emacron -10 -KPX f eogonek -10 -KPX f o -20 -KPX f oacute -20 -KPX f ocircumflex -20 -KPX f odieresis -20 -KPX f ograve -20 -KPX f ohungarumlaut -20 -KPX f omacron -20 -KPX f oslash -20 -KPX f otilde -20 -KPX f period -10 -KPX f quotedblright 30 -KPX f quoteright 30 -KPX g e 10 -KPX g eacute 10 -KPX g ecaron 10 -KPX g ecircumflex 10 -KPX g edieresis 10 -KPX g edotaccent 10 -KPX g egrave 10 -KPX g emacron 10 -KPX g eogonek 10 -KPX g g -10 -KPX g gbreve -10 -KPX g gcommaaccent -10 -KPX gbreve e 10 -KPX gbreve eacute 10 -KPX gbreve ecaron 10 -KPX gbreve ecircumflex 10 -KPX gbreve edieresis 10 -KPX gbreve edotaccent 10 -KPX gbreve egrave 10 -KPX gbreve emacron 10 -KPX gbreve eogonek 10 -KPX gbreve g -10 -KPX gbreve gbreve -10 -KPX gbreve gcommaaccent -10 -KPX gcommaaccent e 10 -KPX gcommaaccent eacute 10 -KPX gcommaaccent ecaron 10 -KPX gcommaaccent ecircumflex 10 -KPX gcommaaccent edieresis 10 -KPX gcommaaccent edotaccent 10 -KPX gcommaaccent egrave 10 -KPX gcommaaccent emacron 10 -KPX gcommaaccent eogonek 10 -KPX gcommaaccent g -10 -KPX gcommaaccent gbreve -10 -KPX gcommaaccent gcommaaccent -10 -KPX h y -20 -KPX h yacute -20 -KPX h ydieresis -20 -KPX k o -15 -KPX k oacute -15 -KPX k ocircumflex -15 -KPX k odieresis -15 -KPX k ograve -15 -KPX k ohungarumlaut -15 -KPX k omacron -15 -KPX k oslash -15 -KPX k otilde -15 -KPX kcommaaccent o -15 -KPX kcommaaccent oacute -15 -KPX kcommaaccent ocircumflex -15 -KPX kcommaaccent odieresis -15 -KPX kcommaaccent ograve -15 -KPX kcommaaccent ohungarumlaut -15 -KPX kcommaaccent omacron -15 -KPX kcommaaccent oslash -15 -KPX kcommaaccent otilde -15 -KPX l w -15 -KPX l y -15 -KPX l yacute -15 -KPX l ydieresis -15 -KPX lacute w -15 -KPX lacute y -15 -KPX lacute yacute -15 -KPX lacute ydieresis -15 -KPX lcommaaccent w -15 -KPX lcommaaccent y -15 -KPX lcommaaccent yacute -15 -KPX lcommaaccent ydieresis -15 -KPX lslash w -15 -KPX lslash y -15 -KPX lslash yacute -15 -KPX lslash ydieresis -15 -KPX m u -20 -KPX m uacute -20 -KPX m ucircumflex -20 -KPX m udieresis -20 -KPX m ugrave -20 -KPX m uhungarumlaut -20 -KPX m umacron -20 -KPX m uogonek -20 -KPX m uring -20 -KPX m y -30 -KPX m yacute -30 -KPX m ydieresis -30 -KPX n u -10 -KPX n uacute -10 -KPX n ucircumflex -10 -KPX n udieresis -10 -KPX n ugrave -10 -KPX n uhungarumlaut -10 -KPX n umacron -10 -KPX n uogonek -10 -KPX n uring -10 -KPX n v -40 -KPX n y -20 -KPX n yacute -20 -KPX n ydieresis -20 -KPX nacute u -10 -KPX nacute uacute -10 -KPX nacute ucircumflex -10 -KPX nacute udieresis -10 -KPX nacute ugrave -10 -KPX nacute uhungarumlaut -10 -KPX nacute umacron -10 -KPX nacute uogonek -10 -KPX nacute uring -10 -KPX nacute v -40 -KPX nacute y -20 -KPX nacute yacute -20 -KPX nacute ydieresis -20 -KPX ncaron u -10 -KPX ncaron uacute -10 -KPX ncaron ucircumflex -10 -KPX ncaron udieresis -10 -KPX ncaron ugrave -10 -KPX ncaron uhungarumlaut -10 -KPX ncaron umacron -10 -KPX ncaron uogonek -10 -KPX ncaron uring -10 -KPX ncaron v -40 -KPX ncaron y -20 -KPX ncaron yacute -20 -KPX ncaron ydieresis -20 -KPX ncommaaccent u -10 -KPX ncommaaccent uacute -10 -KPX ncommaaccent ucircumflex -10 -KPX ncommaaccent udieresis -10 -KPX ncommaaccent ugrave -10 -KPX ncommaaccent uhungarumlaut -10 -KPX ncommaaccent umacron -10 -KPX ncommaaccent uogonek -10 -KPX ncommaaccent uring -10 -KPX ncommaaccent v -40 -KPX ncommaaccent y -20 -KPX ncommaaccent yacute -20 -KPX ncommaaccent ydieresis -20 -KPX ntilde u -10 -KPX ntilde uacute -10 -KPX ntilde ucircumflex -10 -KPX ntilde udieresis -10 -KPX ntilde ugrave -10 -KPX ntilde uhungarumlaut -10 -KPX ntilde umacron -10 -KPX ntilde uogonek -10 -KPX ntilde uring -10 -KPX ntilde v -40 -KPX ntilde y -20 -KPX ntilde yacute -20 -KPX ntilde ydieresis -20 -KPX o v -20 -KPX o w -15 -KPX o x -30 -KPX o y -20 -KPX o yacute -20 -KPX o ydieresis -20 -KPX oacute v -20 -KPX oacute w -15 -KPX oacute x -30 -KPX oacute y -20 -KPX oacute yacute -20 -KPX oacute ydieresis -20 -KPX ocircumflex v -20 -KPX ocircumflex w -15 -KPX ocircumflex x -30 -KPX ocircumflex y -20 -KPX ocircumflex yacute -20 -KPX ocircumflex ydieresis -20 -KPX odieresis v -20 -KPX odieresis w -15 -KPX odieresis x -30 -KPX odieresis y -20 -KPX odieresis yacute -20 -KPX odieresis ydieresis -20 -KPX ograve v -20 -KPX ograve w -15 -KPX ograve x -30 -KPX ograve y -20 -KPX ograve yacute -20 -KPX ograve ydieresis -20 -KPX ohungarumlaut v -20 -KPX ohungarumlaut w -15 -KPX ohungarumlaut x -30 -KPX ohungarumlaut y -20 -KPX ohungarumlaut yacute -20 -KPX ohungarumlaut ydieresis -20 -KPX omacron v -20 -KPX omacron w -15 -KPX omacron x -30 -KPX omacron y -20 -KPX omacron yacute -20 -KPX omacron ydieresis -20 -KPX oslash v -20 -KPX oslash w -15 -KPX oslash x -30 -KPX oslash y -20 -KPX oslash yacute -20 -KPX oslash ydieresis -20 -KPX otilde v -20 -KPX otilde w -15 -KPX otilde x -30 -KPX otilde y -20 -KPX otilde yacute -20 -KPX otilde ydieresis -20 -KPX p y -15 -KPX p yacute -15 -KPX p ydieresis -15 -KPX period quotedblright -120 -KPX period quoteright -120 -KPX period space -40 -KPX quotedblright space -80 -KPX quoteleft quoteleft -46 -KPX quoteright d -80 -KPX quoteright dcroat -80 -KPX quoteright l -20 -KPX quoteright lacute -20 -KPX quoteright lcommaaccent -20 -KPX quoteright lslash -20 -KPX quoteright quoteright -46 -KPX quoteright r -40 -KPX quoteright racute -40 -KPX quoteright rcaron -40 -KPX quoteright rcommaaccent -40 -KPX quoteright s -60 -KPX quoteright sacute -60 -KPX quoteright scaron -60 -KPX quoteright scedilla -60 -KPX quoteright scommaaccent -60 -KPX quoteright space -80 -KPX quoteright v -20 -KPX r c -20 -KPX r cacute -20 -KPX r ccaron -20 -KPX r ccedilla -20 -KPX r comma -60 -KPX r d -20 -KPX r dcroat -20 -KPX r g -15 -KPX r gbreve -15 -KPX r gcommaaccent -15 -KPX r hyphen -20 -KPX r o -20 -KPX r oacute -20 -KPX r ocircumflex -20 -KPX r odieresis -20 -KPX r ograve -20 -KPX r ohungarumlaut -20 -KPX r omacron -20 -KPX r oslash -20 -KPX r otilde -20 -KPX r period -60 -KPX r q -20 -KPX r s -15 -KPX r sacute -15 -KPX r scaron -15 -KPX r scedilla -15 -KPX r scommaaccent -15 -KPX r t 20 -KPX r tcommaaccent 20 -KPX r v 10 -KPX r y 10 -KPX r yacute 10 -KPX r ydieresis 10 -KPX racute c -20 -KPX racute cacute -20 -KPX racute ccaron -20 -KPX racute ccedilla -20 -KPX racute comma -60 -KPX racute d -20 -KPX racute dcroat -20 -KPX racute g -15 -KPX racute gbreve -15 -KPX racute gcommaaccent -15 -KPX racute hyphen -20 -KPX racute o -20 -KPX racute oacute -20 -KPX racute ocircumflex -20 -KPX racute odieresis -20 -KPX racute ograve -20 -KPX racute ohungarumlaut -20 -KPX racute omacron -20 -KPX racute oslash -20 -KPX racute otilde -20 -KPX racute period -60 -KPX racute q -20 -KPX racute s -15 -KPX racute sacute -15 -KPX racute scaron -15 -KPX racute scedilla -15 -KPX racute scommaaccent -15 -KPX racute t 20 -KPX racute tcommaaccent 20 -KPX racute v 10 -KPX racute y 10 -KPX racute yacute 10 -KPX racute ydieresis 10 -KPX rcaron c -20 -KPX rcaron cacute -20 -KPX rcaron ccaron -20 -KPX rcaron ccedilla -20 -KPX rcaron comma -60 -KPX rcaron d -20 -KPX rcaron dcroat -20 -KPX rcaron g -15 -KPX rcaron gbreve -15 -KPX rcaron gcommaaccent -15 -KPX rcaron hyphen -20 -KPX rcaron o -20 -KPX rcaron oacute -20 -KPX rcaron ocircumflex -20 -KPX rcaron odieresis -20 -KPX rcaron ograve -20 -KPX rcaron ohungarumlaut -20 -KPX rcaron omacron -20 -KPX rcaron oslash -20 -KPX rcaron otilde -20 -KPX rcaron period -60 -KPX rcaron q -20 -KPX rcaron s -15 -KPX rcaron sacute -15 -KPX rcaron scaron -15 -KPX rcaron scedilla -15 -KPX rcaron scommaaccent -15 -KPX rcaron t 20 -KPX rcaron tcommaaccent 20 -KPX rcaron v 10 -KPX rcaron y 10 -KPX rcaron yacute 10 -KPX rcaron ydieresis 10 -KPX rcommaaccent c -20 -KPX rcommaaccent cacute -20 -KPX rcommaaccent ccaron -20 -KPX rcommaaccent ccedilla -20 -KPX rcommaaccent comma -60 -KPX rcommaaccent d -20 -KPX rcommaaccent dcroat -20 -KPX rcommaaccent g -15 -KPX rcommaaccent gbreve -15 -KPX rcommaaccent gcommaaccent -15 -KPX rcommaaccent hyphen -20 -KPX rcommaaccent o -20 -KPX rcommaaccent oacute -20 -KPX rcommaaccent ocircumflex -20 -KPX rcommaaccent odieresis -20 -KPX rcommaaccent ograve -20 -KPX rcommaaccent ohungarumlaut -20 -KPX rcommaaccent omacron -20 -KPX rcommaaccent oslash -20 -KPX rcommaaccent otilde -20 -KPX rcommaaccent period -60 -KPX rcommaaccent q -20 -KPX rcommaaccent s -15 -KPX rcommaaccent sacute -15 -KPX rcommaaccent scaron -15 -KPX rcommaaccent scedilla -15 -KPX rcommaaccent scommaaccent -15 -KPX rcommaaccent t 20 -KPX rcommaaccent tcommaaccent 20 -KPX rcommaaccent v 10 -KPX rcommaaccent y 10 -KPX rcommaaccent yacute 10 -KPX rcommaaccent ydieresis 10 -KPX s w -15 -KPX sacute w -15 -KPX scaron w -15 -KPX scedilla w -15 -KPX scommaaccent w -15 -KPX semicolon space -40 -KPX space T -100 -KPX space Tcaron -100 -KPX space Tcommaaccent -100 -KPX space V -80 -KPX space W -80 -KPX space Y -120 -KPX space Yacute -120 -KPX space Ydieresis -120 -KPX space quotedblleft -80 -KPX space quoteleft -60 -KPX v a -20 -KPX v aacute -20 -KPX v abreve -20 -KPX v acircumflex -20 -KPX v adieresis -20 -KPX v agrave -20 -KPX v amacron -20 -KPX v aogonek -20 -KPX v aring -20 -KPX v atilde -20 -KPX v comma -80 -KPX v o -30 -KPX v oacute -30 -KPX v ocircumflex -30 -KPX v odieresis -30 -KPX v ograve -30 -KPX v ohungarumlaut -30 -KPX v omacron -30 -KPX v oslash -30 -KPX v otilde -30 -KPX v period -80 -KPX w comma -40 -KPX w o -20 -KPX w oacute -20 -KPX w ocircumflex -20 -KPX w odieresis -20 -KPX w ograve -20 -KPX w ohungarumlaut -20 -KPX w omacron -20 -KPX w oslash -20 -KPX w otilde -20 -KPX w period -40 -KPX x e -10 -KPX x eacute -10 -KPX x ecaron -10 -KPX x ecircumflex -10 -KPX x edieresis -10 -KPX x edotaccent -10 -KPX x egrave -10 -KPX x emacron -10 -KPX x eogonek -10 -KPX y a -30 -KPX y aacute -30 -KPX y abreve -30 -KPX y acircumflex -30 -KPX y adieresis -30 -KPX y agrave -30 -KPX y amacron -30 -KPX y aogonek -30 -KPX y aring -30 -KPX y atilde -30 -KPX y comma -80 -KPX y e -10 -KPX y eacute -10 -KPX y ecaron -10 -KPX y ecircumflex -10 -KPX y edieresis -10 -KPX y edotaccent -10 -KPX y egrave -10 -KPX y emacron -10 -KPX y eogonek -10 -KPX y o -25 -KPX y oacute -25 -KPX y ocircumflex -25 -KPX y odieresis -25 -KPX y ograve -25 -KPX y ohungarumlaut -25 -KPX y omacron -25 -KPX y oslash -25 -KPX y otilde -25 -KPX y period -80 -KPX yacute a -30 -KPX yacute aacute -30 -KPX yacute abreve -30 -KPX yacute acircumflex -30 -KPX yacute adieresis -30 -KPX yacute agrave -30 -KPX yacute amacron -30 -KPX yacute aogonek -30 -KPX yacute aring -30 -KPX yacute atilde -30 -KPX yacute comma -80 -KPX yacute e -10 -KPX yacute eacute -10 -KPX yacute ecaron -10 -KPX yacute ecircumflex -10 -KPX yacute edieresis -10 -KPX yacute edotaccent -10 -KPX yacute egrave -10 -KPX yacute emacron -10 -KPX yacute eogonek -10 -KPX yacute o -25 -KPX yacute oacute -25 -KPX yacute ocircumflex -25 -KPX yacute odieresis -25 -KPX yacute ograve -25 -KPX yacute ohungarumlaut -25 -KPX yacute omacron -25 -KPX yacute oslash -25 -KPX yacute otilde -25 -KPX yacute period -80 -KPX ydieresis a -30 -KPX ydieresis aacute -30 -KPX ydieresis abreve -30 -KPX ydieresis acircumflex -30 -KPX ydieresis adieresis -30 -KPX ydieresis agrave -30 -KPX ydieresis amacron -30 -KPX ydieresis aogonek -30 -KPX ydieresis aring -30 -KPX ydieresis atilde -30 -KPX ydieresis comma -80 -KPX ydieresis e -10 -KPX ydieresis eacute -10 -KPX ydieresis ecaron -10 -KPX ydieresis ecircumflex -10 -KPX ydieresis edieresis -10 -KPX ydieresis edotaccent -10 -KPX ydieresis egrave -10 -KPX ydieresis emacron -10 -KPX ydieresis eogonek -10 -KPX ydieresis o -25 -KPX ydieresis oacute -25 -KPX ydieresis ocircumflex -25 -KPX ydieresis odieresis -25 -KPX ydieresis ograve -25 -KPX ydieresis ohungarumlaut -25 -KPX ydieresis omacron -25 -KPX ydieresis oslash -25 -KPX ydieresis otilde -25 -KPX ydieresis period -80 -KPX z e 10 -KPX z eacute 10 -KPX z ecaron 10 -KPX z ecircumflex 10 -KPX z edieresis 10 -KPX z edotaccent 10 -KPX z egrave 10 -KPX z emacron 10 -KPX z eogonek 10 -KPX zacute e 10 -KPX zacute eacute 10 -KPX zacute ecaron 10 -KPX zacute ecircumflex 10 -KPX zacute edieresis 10 -KPX zacute edotaccent 10 -KPX zacute egrave 10 -KPX zacute emacron 10 -KPX zacute eogonek 10 -KPX zcaron e 10 -KPX zcaron eacute 10 -KPX zcaron ecaron 10 -KPX zcaron ecircumflex 10 -KPX zcaron edieresis 10 -KPX zcaron edotaccent 10 -KPX zcaron egrave 10 -KPX zcaron emacron 10 -KPX zcaron eogonek 10 -KPX zdotaccent e 10 -KPX zdotaccent eacute 10 -KPX zdotaccent ecaron 10 -KPX zdotaccent ecircumflex 10 -KPX zdotaccent edieresis 10 -KPX zdotaccent edotaccent 10 -KPX zdotaccent egrave 10 -KPX zdotaccent emacron 10 -KPX zdotaccent eogonek 10 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-BoldOblique.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-BoldOblique.afm deleted file mode 100644 index 16845ae..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-BoldOblique.afm +++ /dev/null @@ -1,2827 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:45:12 1997 -Comment UniqueID 43053 -Comment VMusage 14482 68586 -FontName Helvetica-BoldOblique -FullName Helvetica Bold Oblique -FamilyName Helvetica -Weight Bold -ItalicAngle -12 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -174 -228 1114 962 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 718 -XHeight 532 -Ascender 718 -Descender -207 -StdHW 118 -StdVW 140 -StartCharMetrics 315 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 94 0 397 718 ; -C 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ; -C 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ; -C 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ; -C 37 ; WX 889 ; N percent ; B 136 -19 901 710 ; -C 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ; -C 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ; -C 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ; -C 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ; -C 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ; -C 43 ; WX 584 ; N plus ; B 82 0 610 506 ; -C 44 ; WX 278 ; N comma ; B 28 -168 245 146 ; -C 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ; -C 46 ; WX 278 ; N period ; B 64 0 245 146 ; -C 47 ; WX 278 ; N slash ; B -37 -19 468 737 ; -C 48 ; WX 556 ; N zero ; B 86 -19 617 710 ; -C 49 ; WX 556 ; N one ; B 173 0 529 710 ; -C 50 ; WX 556 ; N two ; B 26 0 619 710 ; -C 51 ; WX 556 ; N three ; B 65 -19 608 710 ; -C 52 ; WX 556 ; N four ; B 60 0 598 710 ; -C 53 ; WX 556 ; N five ; B 64 -19 636 698 ; -C 54 ; WX 556 ; N six ; B 85 -19 619 710 ; -C 55 ; WX 556 ; N seven ; B 125 0 676 698 ; -C 56 ; WX 556 ; N eight ; B 69 -19 616 710 ; -C 57 ; WX 556 ; N nine ; B 78 -19 615 710 ; -C 58 ; WX 333 ; N colon ; B 92 0 351 512 ; -C 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ; -C 60 ; WX 584 ; N less ; B 82 -8 655 514 ; -C 61 ; WX 584 ; N equal ; B 58 87 633 419 ; -C 62 ; WX 584 ; N greater ; B 36 -8 609 514 ; -C 63 ; WX 611 ; N question ; B 165 0 671 727 ; -C 64 ; WX 975 ; N at ; B 186 -19 954 737 ; -C 65 ; WX 722 ; N A ; B 20 0 702 718 ; -C 66 ; WX 722 ; N B ; B 76 0 764 718 ; -C 67 ; WX 722 ; N C ; B 107 -19 789 737 ; -C 68 ; WX 722 ; N D ; B 76 0 777 718 ; -C 69 ; WX 667 ; N E ; B 76 0 757 718 ; -C 70 ; WX 611 ; N F ; B 76 0 740 718 ; -C 71 ; WX 778 ; N G ; B 108 -19 817 737 ; -C 72 ; WX 722 ; N H ; B 71 0 804 718 ; -C 73 ; WX 278 ; N I ; B 64 0 367 718 ; -C 74 ; WX 556 ; N J ; B 60 -18 637 718 ; -C 75 ; WX 722 ; N K ; B 87 0 858 718 ; -C 76 ; WX 611 ; N L ; B 76 0 611 718 ; -C 77 ; WX 833 ; N M ; B 69 0 918 718 ; -C 78 ; WX 722 ; N N ; B 69 0 807 718 ; -C 79 ; WX 778 ; N O ; B 107 -19 823 737 ; -C 80 ; WX 667 ; N P ; B 76 0 738 718 ; -C 81 ; WX 778 ; N Q ; B 107 -52 823 737 ; -C 82 ; WX 722 ; N R ; B 76 0 778 718 ; -C 83 ; WX 667 ; N S ; B 81 -19 718 737 ; -C 84 ; WX 611 ; N T ; B 140 0 751 718 ; -C 85 ; WX 722 ; N U ; B 116 -19 804 718 ; -C 86 ; WX 667 ; N V ; B 172 0 801 718 ; -C 87 ; WX 944 ; N W ; B 169 0 1082 718 ; -C 88 ; WX 667 ; N X ; B 14 0 791 718 ; -C 89 ; WX 667 ; N Y ; B 168 0 806 718 ; -C 90 ; WX 611 ; N Z ; B 25 0 737 718 ; -C 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ; -C 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ; -C 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ; -C 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ; -C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; -C 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ; -C 97 ; WX 556 ; N a ; B 55 -14 583 546 ; -C 98 ; WX 611 ; N b ; B 61 -14 645 718 ; -C 99 ; WX 556 ; N c ; B 79 -14 599 546 ; -C 100 ; WX 611 ; N d ; B 82 -14 704 718 ; -C 101 ; WX 556 ; N e ; B 70 -14 593 546 ; -C 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ; -C 103 ; WX 611 ; N g ; B 38 -217 666 546 ; -C 104 ; WX 611 ; N h ; B 65 0 629 718 ; -C 105 ; WX 278 ; N i ; B 69 0 363 725 ; -C 106 ; WX 278 ; N j ; B -42 -214 363 725 ; -C 107 ; WX 556 ; N k ; B 69 0 670 718 ; -C 108 ; WX 278 ; N l ; B 69 0 362 718 ; -C 109 ; WX 889 ; N m ; B 64 0 909 546 ; -C 110 ; WX 611 ; N n ; B 65 0 629 546 ; -C 111 ; WX 611 ; N o ; B 82 -14 643 546 ; -C 112 ; WX 611 ; N p ; B 18 -207 645 546 ; -C 113 ; WX 611 ; N q ; B 80 -207 665 546 ; -C 114 ; WX 389 ; N r ; B 64 0 489 546 ; -C 115 ; WX 556 ; N s ; B 63 -14 584 546 ; -C 116 ; WX 333 ; N t ; B 100 -6 422 676 ; -C 117 ; WX 611 ; N u ; B 98 -14 658 532 ; -C 118 ; WX 556 ; N v ; B 126 0 656 532 ; -C 119 ; WX 778 ; N w ; B 123 0 882 532 ; -C 120 ; WX 556 ; N x ; B 15 0 648 532 ; -C 121 ; WX 556 ; N y ; B 42 -214 652 532 ; -C 122 ; WX 500 ; N z ; B 20 0 583 532 ; -C 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ; -C 124 ; WX 280 ; N bar ; B 36 -225 361 775 ; -C 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ; -C 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ; -C 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ; -C 162 ; WX 556 ; N cent ; B 79 -118 599 628 ; -C 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ; -C 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ; -C 165 ; WX 556 ; N yen ; B 60 0 713 698 ; -C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ; -C 167 ; WX 556 ; N section ; B 61 -184 598 727 ; -C 168 ; WX 556 ; N currency ; B 27 76 680 636 ; -C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ; -C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ; -C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ; -C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ; -C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ; -C 174 ; WX 611 ; N fi ; B 87 0 696 727 ; -C 175 ; WX 611 ; N fl ; B 87 0 695 727 ; -C 177 ; WX 556 ; N endash ; B 48 227 627 333 ; -C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ; -C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ; -C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ; -C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ; -C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ; -C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ; -C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ; -C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ; -C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ; -C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ; -C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ; -C 193 ; WX 333 ; N grave ; B 136 604 353 750 ; -C 194 ; WX 333 ; N acute ; B 236 604 515 750 ; -C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ; -C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ; -C 197 ; WX 333 ; N macron ; B 122 604 483 678 ; -C 198 ; WX 333 ; N breve ; B 156 604 494 750 ; -C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ; -C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ; -C 202 ; WX 333 ; N ring ; B 200 568 420 776 ; -C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ; -C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ; -C 207 ; WX 333 ; N caron ; B 149 604 502 750 ; -C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ; -C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ; -C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ; -C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ; -C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ; -C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ; -C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ; -C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ; -C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ; -C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ; -C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ; -C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ; -C -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ; -C -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ; -C -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ; -C -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ; -C -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ; -C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ; -C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ; -C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ; -C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ; -C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ; -C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ; -C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ; -C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ; -C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ; -C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ; -C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ; -C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ; -C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ; -C -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ; -C -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ; -C -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ; -C -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ; -C -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ; -C -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ; -C -1 ; WX 556 ; N aring ; B 55 -14 583 776 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ; -C -1 ; WX 278 ; N lacute ; B 69 0 528 936 ; -C -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ; -C -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ; -C -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ; -C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ; -C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ; -C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ; -C -1 ; WX 278 ; N iacute ; B 69 0 488 750 ; -C -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ; -C -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ; -C -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ; -C -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ; -C -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ; -C -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ; -C -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ; -C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ; -C -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ; -C -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ; -C -1 ; WX 722 ; N Racute ; B 76 0 778 936 ; -C -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ; -C -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ; -C -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ; -C -1 ; WX 611 ; N uring ; B 98 -14 658 776 ; -C -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ; -C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ; -C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ; -C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ; -C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ; -C -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ; -C -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ; -C -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ; -C -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ; -C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ; -C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ; -C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ; -C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ; -C -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ; -C -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ; -C -1 ; WX 611 ; N nacute ; B 65 0 654 750 ; -C -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ; -C -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ; -C -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ; -C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ; -C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ; -C -1 ; WX 737 ; N registered ; B 55 -19 834 737 ; -C -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ; -C -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ; -C -1 ; WX 600 ; N summation ; B 14 -10 670 706 ; -C -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ; -C -1 ; WX 389 ; N racute ; B 64 0 543 750 ; -C -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ; -C -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ; -C -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ; -C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ; -C -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ; -C -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ; -C -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ; -C -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ; -C -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ; -C -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ; -C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ; -C -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ; -C -1 ; WX 500 ; N zacute ; B 20 0 599 750 ; -C -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ; -C -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ; -C -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ; -C -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ; -C -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ; -C -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ; -C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ; -C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ; -C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ; -C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ; -C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ; -C -1 ; WX 278 ; N igrave ; B 69 0 326 750 ; -C -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ; -C -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ; -C -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ; -C -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ; -C -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ; -C -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ; -C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ; -C -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ; -C -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ; -C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ; -C -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ; -C -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ; -C -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ; -C -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ; -C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ; -C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ; -C -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ; -C -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ; -C -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ; -C -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ; -C -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ; -C -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ; -C -1 ; WX 400 ; N degree ; B 175 426 467 712 ; -C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ; -C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ; -C -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ; -C -1 ; WX 549 ; N radical ; B 112 -46 689 850 ; -C -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ; -C -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ; -C -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ; -C -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ; -C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ; -C -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ; -C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ; -C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ; -C -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ; -C -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ; -C -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ; -C -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ; -C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ; -C -1 ; WX 584 ; N minus ; B 82 197 610 309 ; -C -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ; -C -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ; -C -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ; -C -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ; -C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ; -C -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ; -C -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ; -C -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ; -C -1 ; WX 611 ; N eth ; B 82 -14 670 737 ; -C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ; -C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ; -C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ; -C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ; -C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2481 -KPX A C -40 -KPX A Cacute -40 -KPX A Ccaron -40 -KPX A Ccedilla -40 -KPX A G -50 -KPX A Gbreve -50 -KPX A Gcommaaccent -50 -KPX A O -40 -KPX A Oacute -40 -KPX A Ocircumflex -40 -KPX A Odieresis -40 -KPX A Ograve -40 -KPX A Ohungarumlaut -40 -KPX A Omacron -40 -KPX A Oslash -40 -KPX A Otilde -40 -KPX A Q -40 -KPX A T -90 -KPX A Tcaron -90 -KPX A Tcommaaccent -90 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -80 -KPX A W -60 -KPX A Y -110 -KPX A Yacute -110 -KPX A Ydieresis -110 -KPX A u -30 -KPX A uacute -30 -KPX A ucircumflex -30 -KPX A udieresis -30 -KPX A ugrave -30 -KPX A uhungarumlaut -30 -KPX A umacron -30 -KPX A uogonek -30 -KPX A uring -30 -KPX A v -40 -KPX A w -30 -KPX A y -30 -KPX A yacute -30 -KPX A ydieresis -30 -KPX Aacute C -40 -KPX Aacute Cacute -40 -KPX Aacute Ccaron -40 -KPX Aacute Ccedilla -40 -KPX Aacute G -50 -KPX Aacute Gbreve -50 -KPX Aacute Gcommaaccent -50 -KPX Aacute O -40 -KPX Aacute Oacute -40 -KPX Aacute Ocircumflex -40 -KPX Aacute Odieresis -40 -KPX Aacute Ograve -40 -KPX Aacute Ohungarumlaut -40 -KPX Aacute Omacron -40 -KPX Aacute Oslash -40 -KPX Aacute Otilde -40 -KPX Aacute Q -40 -KPX Aacute T -90 -KPX Aacute Tcaron -90 -KPX Aacute Tcommaaccent -90 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -80 -KPX Aacute W -60 -KPX Aacute Y -110 -KPX Aacute Yacute -110 -KPX Aacute Ydieresis -110 -KPX Aacute u -30 -KPX Aacute uacute -30 -KPX Aacute ucircumflex -30 -KPX Aacute udieresis -30 -KPX Aacute ugrave -30 -KPX Aacute uhungarumlaut -30 -KPX Aacute umacron -30 -KPX Aacute uogonek -30 -KPX Aacute uring -30 -KPX Aacute v -40 -KPX Aacute w -30 -KPX Aacute y -30 -KPX Aacute yacute -30 -KPX Aacute ydieresis -30 -KPX Abreve C -40 -KPX Abreve Cacute -40 -KPX Abreve Ccaron -40 -KPX Abreve Ccedilla -40 -KPX Abreve G -50 -KPX Abreve Gbreve -50 -KPX Abreve Gcommaaccent -50 -KPX Abreve O -40 -KPX Abreve Oacute -40 -KPX Abreve Ocircumflex -40 -KPX Abreve Odieresis -40 -KPX Abreve Ograve -40 -KPX Abreve Ohungarumlaut -40 -KPX Abreve Omacron -40 -KPX Abreve Oslash -40 -KPX Abreve Otilde -40 -KPX Abreve Q -40 -KPX Abreve T -90 -KPX Abreve Tcaron -90 -KPX Abreve Tcommaaccent -90 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -80 -KPX Abreve W -60 -KPX Abreve Y -110 -KPX Abreve Yacute -110 -KPX Abreve Ydieresis -110 -KPX Abreve u -30 -KPX Abreve uacute -30 -KPX Abreve ucircumflex -30 -KPX Abreve udieresis -30 -KPX Abreve ugrave -30 -KPX Abreve uhungarumlaut -30 -KPX Abreve umacron -30 -KPX Abreve uogonek -30 -KPX Abreve uring -30 -KPX Abreve v -40 -KPX Abreve w -30 -KPX Abreve y -30 -KPX Abreve yacute -30 -KPX Abreve ydieresis -30 -KPX Acircumflex C -40 -KPX Acircumflex Cacute -40 -KPX Acircumflex Ccaron -40 -KPX Acircumflex Ccedilla -40 -KPX Acircumflex G -50 -KPX Acircumflex Gbreve -50 -KPX Acircumflex Gcommaaccent -50 -KPX Acircumflex O -40 -KPX Acircumflex Oacute -40 -KPX Acircumflex Ocircumflex -40 -KPX Acircumflex Odieresis -40 -KPX Acircumflex Ograve -40 -KPX Acircumflex Ohungarumlaut -40 -KPX Acircumflex Omacron -40 -KPX Acircumflex Oslash -40 -KPX Acircumflex Otilde -40 -KPX Acircumflex Q -40 -KPX Acircumflex T -90 -KPX Acircumflex Tcaron -90 -KPX Acircumflex Tcommaaccent -90 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -80 -KPX Acircumflex W -60 -KPX Acircumflex Y -110 -KPX Acircumflex Yacute -110 -KPX Acircumflex Ydieresis -110 -KPX Acircumflex u -30 -KPX Acircumflex uacute -30 -KPX Acircumflex ucircumflex -30 -KPX Acircumflex udieresis -30 -KPX Acircumflex ugrave -30 -KPX Acircumflex uhungarumlaut -30 -KPX Acircumflex umacron -30 -KPX Acircumflex uogonek -30 -KPX Acircumflex uring -30 -KPX Acircumflex v -40 -KPX Acircumflex w -30 -KPX Acircumflex y -30 -KPX Acircumflex yacute -30 -KPX Acircumflex ydieresis -30 -KPX Adieresis C -40 -KPX Adieresis Cacute -40 -KPX Adieresis Ccaron -40 -KPX Adieresis Ccedilla -40 -KPX Adieresis G -50 -KPX Adieresis Gbreve -50 -KPX Adieresis Gcommaaccent -50 -KPX Adieresis O -40 -KPX Adieresis Oacute -40 -KPX Adieresis Ocircumflex -40 -KPX Adieresis Odieresis -40 -KPX Adieresis Ograve -40 -KPX Adieresis Ohungarumlaut -40 -KPX Adieresis Omacron -40 -KPX Adieresis Oslash -40 -KPX Adieresis Otilde -40 -KPX Adieresis Q -40 -KPX Adieresis T -90 -KPX Adieresis Tcaron -90 -KPX Adieresis Tcommaaccent -90 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -80 -KPX Adieresis W -60 -KPX Adieresis Y -110 -KPX Adieresis Yacute -110 -KPX Adieresis Ydieresis -110 -KPX Adieresis u -30 -KPX Adieresis uacute -30 -KPX Adieresis ucircumflex -30 -KPX Adieresis udieresis -30 -KPX Adieresis ugrave -30 -KPX Adieresis uhungarumlaut -30 -KPX Adieresis umacron -30 -KPX Adieresis uogonek -30 -KPX Adieresis uring -30 -KPX Adieresis v -40 -KPX Adieresis w -30 -KPX Adieresis y -30 -KPX Adieresis yacute -30 -KPX Adieresis ydieresis -30 -KPX Agrave C -40 -KPX Agrave Cacute -40 -KPX Agrave Ccaron -40 -KPX Agrave Ccedilla -40 -KPX Agrave G -50 -KPX Agrave Gbreve -50 -KPX Agrave Gcommaaccent -50 -KPX Agrave O -40 -KPX Agrave Oacute -40 -KPX Agrave Ocircumflex -40 -KPX Agrave Odieresis -40 -KPX Agrave Ograve -40 -KPX Agrave Ohungarumlaut -40 -KPX Agrave Omacron -40 -KPX Agrave Oslash -40 -KPX Agrave Otilde -40 -KPX Agrave Q -40 -KPX Agrave T -90 -KPX Agrave Tcaron -90 -KPX Agrave Tcommaaccent -90 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -80 -KPX Agrave W -60 -KPX Agrave Y -110 -KPX Agrave Yacute -110 -KPX Agrave Ydieresis -110 -KPX Agrave u -30 -KPX Agrave uacute -30 -KPX Agrave ucircumflex -30 -KPX Agrave udieresis -30 -KPX Agrave ugrave -30 -KPX Agrave uhungarumlaut -30 -KPX Agrave umacron -30 -KPX Agrave uogonek -30 -KPX Agrave uring -30 -KPX Agrave v -40 -KPX Agrave w -30 -KPX Agrave y -30 -KPX Agrave yacute -30 -KPX Agrave ydieresis -30 -KPX Amacron C -40 -KPX Amacron Cacute -40 -KPX Amacron Ccaron -40 -KPX Amacron Ccedilla -40 -KPX Amacron G -50 -KPX Amacron Gbreve -50 -KPX Amacron Gcommaaccent -50 -KPX Amacron O -40 -KPX Amacron Oacute -40 -KPX Amacron Ocircumflex -40 -KPX Amacron Odieresis -40 -KPX Amacron Ograve -40 -KPX Amacron Ohungarumlaut -40 -KPX Amacron Omacron -40 -KPX Amacron Oslash -40 -KPX Amacron Otilde -40 -KPX Amacron Q -40 -KPX Amacron T -90 -KPX Amacron Tcaron -90 -KPX Amacron Tcommaaccent -90 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -80 -KPX Amacron W -60 -KPX Amacron Y -110 -KPX Amacron Yacute -110 -KPX Amacron Ydieresis -110 -KPX Amacron u -30 -KPX Amacron uacute -30 -KPX Amacron ucircumflex -30 -KPX Amacron udieresis -30 -KPX Amacron ugrave -30 -KPX Amacron uhungarumlaut -30 -KPX Amacron umacron -30 -KPX Amacron uogonek -30 -KPX Amacron uring -30 -KPX Amacron v -40 -KPX Amacron w -30 -KPX Amacron y -30 -KPX Amacron yacute -30 -KPX Amacron ydieresis -30 -KPX Aogonek C -40 -KPX Aogonek Cacute -40 -KPX Aogonek Ccaron -40 -KPX Aogonek Ccedilla -40 -KPX Aogonek G -50 -KPX Aogonek Gbreve -50 -KPX Aogonek Gcommaaccent -50 -KPX Aogonek O -40 -KPX Aogonek Oacute -40 -KPX Aogonek Ocircumflex -40 -KPX Aogonek Odieresis -40 -KPX Aogonek Ograve -40 -KPX Aogonek Ohungarumlaut -40 -KPX Aogonek Omacron -40 -KPX Aogonek Oslash -40 -KPX Aogonek Otilde -40 -KPX Aogonek Q -40 -KPX Aogonek T -90 -KPX Aogonek Tcaron -90 -KPX Aogonek Tcommaaccent -90 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -80 -KPX Aogonek W -60 -KPX Aogonek Y -110 -KPX Aogonek Yacute -110 -KPX Aogonek Ydieresis -110 -KPX Aogonek u -30 -KPX Aogonek uacute -30 -KPX Aogonek ucircumflex -30 -KPX Aogonek udieresis -30 -KPX Aogonek ugrave -30 -KPX Aogonek uhungarumlaut -30 -KPX Aogonek umacron -30 -KPX Aogonek uogonek -30 -KPX Aogonek uring -30 -KPX Aogonek v -40 -KPX Aogonek w -30 -KPX Aogonek y -30 -KPX Aogonek yacute -30 -KPX Aogonek ydieresis -30 -KPX Aring C -40 -KPX Aring Cacute -40 -KPX Aring Ccaron -40 -KPX Aring Ccedilla -40 -KPX Aring G -50 -KPX Aring Gbreve -50 -KPX Aring Gcommaaccent -50 -KPX Aring O -40 -KPX Aring Oacute -40 -KPX Aring Ocircumflex -40 -KPX Aring Odieresis -40 -KPX Aring Ograve -40 -KPX Aring Ohungarumlaut -40 -KPX Aring Omacron -40 -KPX Aring Oslash -40 -KPX Aring Otilde -40 -KPX Aring Q -40 -KPX Aring T -90 -KPX Aring Tcaron -90 -KPX Aring Tcommaaccent -90 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -80 -KPX Aring W -60 -KPX Aring Y -110 -KPX Aring Yacute -110 -KPX Aring Ydieresis -110 -KPX Aring u -30 -KPX Aring uacute -30 -KPX Aring ucircumflex -30 -KPX Aring udieresis -30 -KPX Aring ugrave -30 -KPX Aring uhungarumlaut -30 -KPX Aring umacron -30 -KPX Aring uogonek -30 -KPX Aring uring -30 -KPX Aring v -40 -KPX Aring w -30 -KPX Aring y -30 -KPX Aring yacute -30 -KPX Aring ydieresis -30 -KPX Atilde C -40 -KPX Atilde Cacute -40 -KPX Atilde Ccaron -40 -KPX Atilde Ccedilla -40 -KPX Atilde G -50 -KPX Atilde Gbreve -50 -KPX Atilde Gcommaaccent -50 -KPX Atilde O -40 -KPX Atilde Oacute -40 -KPX Atilde Ocircumflex -40 -KPX Atilde Odieresis -40 -KPX Atilde Ograve -40 -KPX Atilde Ohungarumlaut -40 -KPX Atilde Omacron -40 -KPX Atilde Oslash -40 -KPX Atilde Otilde -40 -KPX Atilde Q -40 -KPX Atilde T -90 -KPX Atilde Tcaron -90 -KPX Atilde Tcommaaccent -90 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -80 -KPX Atilde W -60 -KPX Atilde Y -110 -KPX Atilde Yacute -110 -KPX Atilde Ydieresis -110 -KPX Atilde u -30 -KPX Atilde uacute -30 -KPX Atilde ucircumflex -30 -KPX Atilde udieresis -30 -KPX Atilde ugrave -30 -KPX Atilde uhungarumlaut -30 -KPX Atilde umacron -30 -KPX Atilde uogonek -30 -KPX Atilde uring -30 -KPX Atilde v -40 -KPX Atilde w -30 -KPX Atilde y -30 -KPX Atilde yacute -30 -KPX Atilde ydieresis -30 -KPX B A -30 -KPX B Aacute -30 -KPX B Abreve -30 -KPX B Acircumflex -30 -KPX B Adieresis -30 -KPX B Agrave -30 -KPX B Amacron -30 -KPX B Aogonek -30 -KPX B Aring -30 -KPX B Atilde -30 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -40 -KPX D Aacute -40 -KPX D Abreve -40 -KPX D Acircumflex -40 -KPX D Adieresis -40 -KPX D Agrave -40 -KPX D Amacron -40 -KPX D Aogonek -40 -KPX D Aring -40 -KPX D Atilde -40 -KPX D V -40 -KPX D W -40 -KPX D Y -70 -KPX D Yacute -70 -KPX D Ydieresis -70 -KPX D comma -30 -KPX D period -30 -KPX Dcaron A -40 -KPX Dcaron Aacute -40 -KPX Dcaron Abreve -40 -KPX Dcaron Acircumflex -40 -KPX Dcaron Adieresis -40 -KPX Dcaron Agrave -40 -KPX Dcaron Amacron -40 -KPX Dcaron Aogonek -40 -KPX Dcaron Aring -40 -KPX Dcaron Atilde -40 -KPX Dcaron V -40 -KPX Dcaron W -40 -KPX Dcaron Y -70 -KPX Dcaron Yacute -70 -KPX Dcaron Ydieresis -70 -KPX Dcaron comma -30 -KPX Dcaron period -30 -KPX Dcroat A -40 -KPX Dcroat Aacute -40 -KPX Dcroat Abreve -40 -KPX Dcroat Acircumflex -40 -KPX Dcroat Adieresis -40 -KPX Dcroat Agrave -40 -KPX Dcroat Amacron -40 -KPX Dcroat Aogonek -40 -KPX Dcroat Aring -40 -KPX Dcroat Atilde -40 -KPX Dcroat V -40 -KPX Dcroat W -40 -KPX Dcroat Y -70 -KPX Dcroat Yacute -70 -KPX Dcroat Ydieresis -70 -KPX Dcroat comma -30 -KPX Dcroat period -30 -KPX F A -80 -KPX F Aacute -80 -KPX F Abreve -80 -KPX F Acircumflex -80 -KPX F Adieresis -80 -KPX F Agrave -80 -KPX F Amacron -80 -KPX F Aogonek -80 -KPX F Aring -80 -KPX F Atilde -80 -KPX F a -20 -KPX F aacute -20 -KPX F abreve -20 -KPX F acircumflex -20 -KPX F adieresis -20 -KPX F agrave -20 -KPX F amacron -20 -KPX F aogonek -20 -KPX F aring -20 -KPX F atilde -20 -KPX F comma -100 -KPX F period -100 -KPX J A -20 -KPX J Aacute -20 -KPX J Abreve -20 -KPX J Acircumflex -20 -KPX J Adieresis -20 -KPX J Agrave -20 -KPX J Amacron -20 -KPX J Aogonek -20 -KPX J Aring -20 -KPX J Atilde -20 -KPX J comma -20 -KPX J period -20 -KPX J u -20 -KPX J uacute -20 -KPX J ucircumflex -20 -KPX J udieresis -20 -KPX J ugrave -20 -KPX J uhungarumlaut -20 -KPX J umacron -20 -KPX J uogonek -20 -KPX J uring -20 -KPX K O -30 -KPX K Oacute -30 -KPX K Ocircumflex -30 -KPX K Odieresis -30 -KPX K Ograve -30 -KPX K Ohungarumlaut -30 -KPX K Omacron -30 -KPX K Oslash -30 -KPX K Otilde -30 -KPX K e -15 -KPX K eacute -15 -KPX K ecaron -15 -KPX K ecircumflex -15 -KPX K edieresis -15 -KPX K edotaccent -15 -KPX K egrave -15 -KPX K emacron -15 -KPX K eogonek -15 -KPX K o -35 -KPX K oacute -35 -KPX K ocircumflex -35 -KPX K odieresis -35 -KPX K ograve -35 -KPX K ohungarumlaut -35 -KPX K omacron -35 -KPX K oslash -35 -KPX K otilde -35 -KPX K u -30 -KPX K uacute -30 -KPX K ucircumflex -30 -KPX K udieresis -30 -KPX K ugrave -30 -KPX K uhungarumlaut -30 -KPX K umacron -30 -KPX K uogonek -30 -KPX K uring -30 -KPX K y -40 -KPX K yacute -40 -KPX K ydieresis -40 -KPX Kcommaaccent O -30 -KPX Kcommaaccent Oacute -30 -KPX Kcommaaccent Ocircumflex -30 -KPX Kcommaaccent Odieresis -30 -KPX Kcommaaccent Ograve -30 -KPX Kcommaaccent Ohungarumlaut -30 -KPX Kcommaaccent Omacron -30 -KPX Kcommaaccent Oslash -30 -KPX Kcommaaccent Otilde -30 -KPX Kcommaaccent e -15 -KPX Kcommaaccent eacute -15 -KPX Kcommaaccent ecaron -15 -KPX Kcommaaccent ecircumflex -15 -KPX Kcommaaccent edieresis -15 -KPX Kcommaaccent edotaccent -15 -KPX Kcommaaccent egrave -15 -KPX Kcommaaccent emacron -15 -KPX Kcommaaccent eogonek -15 -KPX Kcommaaccent o -35 -KPX Kcommaaccent oacute -35 -KPX Kcommaaccent ocircumflex -35 -KPX Kcommaaccent odieresis -35 -KPX Kcommaaccent ograve -35 -KPX Kcommaaccent ohungarumlaut -35 -KPX Kcommaaccent omacron -35 -KPX Kcommaaccent oslash -35 -KPX Kcommaaccent otilde -35 -KPX Kcommaaccent u -30 -KPX Kcommaaccent uacute -30 -KPX Kcommaaccent ucircumflex -30 -KPX Kcommaaccent udieresis -30 -KPX Kcommaaccent ugrave -30 -KPX Kcommaaccent uhungarumlaut -30 -KPX Kcommaaccent umacron -30 -KPX Kcommaaccent uogonek -30 -KPX Kcommaaccent uring -30 -KPX Kcommaaccent y -40 -KPX Kcommaaccent yacute -40 -KPX Kcommaaccent ydieresis -40 -KPX L T -90 -KPX L Tcaron -90 -KPX L Tcommaaccent -90 -KPX L V -110 -KPX L W -80 -KPX L Y -120 -KPX L Yacute -120 -KPX L Ydieresis -120 -KPX L quotedblright -140 -KPX L quoteright -140 -KPX L y -30 -KPX L yacute -30 -KPX L ydieresis -30 -KPX Lacute T -90 -KPX Lacute Tcaron -90 -KPX Lacute Tcommaaccent -90 -KPX Lacute V -110 -KPX Lacute W -80 -KPX Lacute Y -120 -KPX Lacute Yacute -120 -KPX Lacute Ydieresis -120 -KPX Lacute quotedblright -140 -KPX Lacute quoteright -140 -KPX Lacute y -30 -KPX Lacute yacute -30 -KPX Lacute ydieresis -30 -KPX Lcommaaccent T -90 -KPX Lcommaaccent Tcaron -90 -KPX Lcommaaccent Tcommaaccent -90 -KPX Lcommaaccent V -110 -KPX Lcommaaccent W -80 -KPX Lcommaaccent Y -120 -KPX Lcommaaccent Yacute -120 -KPX Lcommaaccent Ydieresis -120 -KPX Lcommaaccent quotedblright -140 -KPX Lcommaaccent quoteright -140 -KPX Lcommaaccent y -30 -KPX Lcommaaccent yacute -30 -KPX Lcommaaccent ydieresis -30 -KPX Lslash T -90 -KPX Lslash Tcaron -90 -KPX Lslash Tcommaaccent -90 -KPX Lslash V -110 -KPX Lslash W -80 -KPX Lslash Y -120 -KPX Lslash Yacute -120 -KPX Lslash Ydieresis -120 -KPX Lslash quotedblright -140 -KPX Lslash quoteright -140 -KPX Lslash y -30 -KPX Lslash yacute -30 -KPX Lslash ydieresis -30 -KPX O A -50 -KPX O Aacute -50 -KPX O Abreve -50 -KPX O Acircumflex -50 -KPX O Adieresis -50 -KPX O Agrave -50 -KPX O Amacron -50 -KPX O Aogonek -50 -KPX O Aring -50 -KPX O Atilde -50 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -50 -KPX O X -50 -KPX O Y -70 -KPX O Yacute -70 -KPX O Ydieresis -70 -KPX O comma -40 -KPX O period -40 -KPX Oacute A -50 -KPX Oacute Aacute -50 -KPX Oacute Abreve -50 -KPX Oacute Acircumflex -50 -KPX Oacute Adieresis -50 -KPX Oacute Agrave -50 -KPX Oacute Amacron -50 -KPX Oacute Aogonek -50 -KPX Oacute Aring -50 -KPX Oacute Atilde -50 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -50 -KPX Oacute X -50 -KPX Oacute Y -70 -KPX Oacute Yacute -70 -KPX Oacute Ydieresis -70 -KPX Oacute comma -40 -KPX Oacute period -40 -KPX Ocircumflex A -50 -KPX Ocircumflex Aacute -50 -KPX Ocircumflex Abreve -50 -KPX Ocircumflex Acircumflex -50 -KPX Ocircumflex Adieresis -50 -KPX Ocircumflex Agrave -50 -KPX Ocircumflex Amacron -50 -KPX Ocircumflex Aogonek -50 -KPX Ocircumflex Aring -50 -KPX Ocircumflex Atilde -50 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -50 -KPX Ocircumflex X -50 -KPX Ocircumflex Y -70 -KPX Ocircumflex Yacute -70 -KPX Ocircumflex Ydieresis -70 -KPX Ocircumflex comma -40 -KPX Ocircumflex period -40 -KPX Odieresis A -50 -KPX Odieresis Aacute -50 -KPX Odieresis Abreve -50 -KPX Odieresis Acircumflex -50 -KPX Odieresis Adieresis -50 -KPX Odieresis Agrave -50 -KPX Odieresis Amacron -50 -KPX Odieresis Aogonek -50 -KPX Odieresis Aring -50 -KPX Odieresis Atilde -50 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -50 -KPX Odieresis X -50 -KPX Odieresis Y -70 -KPX Odieresis Yacute -70 -KPX Odieresis Ydieresis -70 -KPX Odieresis comma -40 -KPX Odieresis period -40 -KPX Ograve A -50 -KPX Ograve Aacute -50 -KPX Ograve Abreve -50 -KPX Ograve Acircumflex -50 -KPX Ograve Adieresis -50 -KPX Ograve Agrave -50 -KPX Ograve Amacron -50 -KPX Ograve Aogonek -50 -KPX Ograve Aring -50 -KPX Ograve Atilde -50 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -50 -KPX Ograve X -50 -KPX Ograve Y -70 -KPX Ograve Yacute -70 -KPX Ograve Ydieresis -70 -KPX Ograve comma -40 -KPX Ograve period -40 -KPX Ohungarumlaut A -50 -KPX Ohungarumlaut Aacute -50 -KPX Ohungarumlaut Abreve -50 -KPX Ohungarumlaut Acircumflex -50 -KPX Ohungarumlaut Adieresis -50 -KPX Ohungarumlaut Agrave -50 -KPX Ohungarumlaut Amacron -50 -KPX Ohungarumlaut Aogonek -50 -KPX Ohungarumlaut Aring -50 -KPX Ohungarumlaut Atilde -50 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -50 -KPX Ohungarumlaut X -50 -KPX Ohungarumlaut Y -70 -KPX Ohungarumlaut Yacute -70 -KPX Ohungarumlaut Ydieresis -70 -KPX Ohungarumlaut comma -40 -KPX Ohungarumlaut period -40 -KPX Omacron A -50 -KPX Omacron Aacute -50 -KPX Omacron Abreve -50 -KPX Omacron Acircumflex -50 -KPX Omacron Adieresis -50 -KPX Omacron Agrave -50 -KPX Omacron Amacron -50 -KPX Omacron Aogonek -50 -KPX Omacron Aring -50 -KPX Omacron Atilde -50 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -50 -KPX Omacron X -50 -KPX Omacron Y -70 -KPX Omacron Yacute -70 -KPX Omacron Ydieresis -70 -KPX Omacron comma -40 -KPX Omacron period -40 -KPX Oslash A -50 -KPX Oslash Aacute -50 -KPX Oslash Abreve -50 -KPX Oslash Acircumflex -50 -KPX Oslash Adieresis -50 -KPX Oslash Agrave -50 -KPX Oslash Amacron -50 -KPX Oslash Aogonek -50 -KPX Oslash Aring -50 -KPX Oslash Atilde -50 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -50 -KPX Oslash X -50 -KPX Oslash Y -70 -KPX Oslash Yacute -70 -KPX Oslash Ydieresis -70 -KPX Oslash comma -40 -KPX Oslash period -40 -KPX Otilde A -50 -KPX Otilde Aacute -50 -KPX Otilde Abreve -50 -KPX Otilde Acircumflex -50 -KPX Otilde Adieresis -50 -KPX Otilde Agrave -50 -KPX Otilde Amacron -50 -KPX Otilde Aogonek -50 -KPX Otilde Aring -50 -KPX Otilde Atilde -50 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -50 -KPX Otilde X -50 -KPX Otilde Y -70 -KPX Otilde Yacute -70 -KPX Otilde Ydieresis -70 -KPX Otilde comma -40 -KPX Otilde period -40 -KPX P A -100 -KPX P Aacute -100 -KPX P Abreve -100 -KPX P Acircumflex -100 -KPX P Adieresis -100 -KPX P Agrave -100 -KPX P Amacron -100 -KPX P Aogonek -100 -KPX P Aring -100 -KPX P Atilde -100 -KPX P a -30 -KPX P aacute -30 -KPX P abreve -30 -KPX P acircumflex -30 -KPX P adieresis -30 -KPX P agrave -30 -KPX P amacron -30 -KPX P aogonek -30 -KPX P aring -30 -KPX P atilde -30 -KPX P comma -120 -KPX P e -30 -KPX P eacute -30 -KPX P ecaron -30 -KPX P ecircumflex -30 -KPX P edieresis -30 -KPX P edotaccent -30 -KPX P egrave -30 -KPX P emacron -30 -KPX P eogonek -30 -KPX P o -40 -KPX P oacute -40 -KPX P ocircumflex -40 -KPX P odieresis -40 -KPX P ograve -40 -KPX P ohungarumlaut -40 -KPX P omacron -40 -KPX P oslash -40 -KPX P otilde -40 -KPX P period -120 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX Q comma 20 -KPX Q period 20 -KPX R O -20 -KPX R Oacute -20 -KPX R Ocircumflex -20 -KPX R Odieresis -20 -KPX R Ograve -20 -KPX R Ohungarumlaut -20 -KPX R Omacron -20 -KPX R Oslash -20 -KPX R Otilde -20 -KPX R T -20 -KPX R Tcaron -20 -KPX R Tcommaaccent -20 -KPX R U -20 -KPX R Uacute -20 -KPX R Ucircumflex -20 -KPX R Udieresis -20 -KPX R Ugrave -20 -KPX R Uhungarumlaut -20 -KPX R Umacron -20 -KPX R Uogonek -20 -KPX R Uring -20 -KPX R V -50 -KPX R W -40 -KPX R Y -50 -KPX R Yacute -50 -KPX R Ydieresis -50 -KPX Racute O -20 -KPX Racute Oacute -20 -KPX Racute Ocircumflex -20 -KPX Racute Odieresis -20 -KPX Racute Ograve -20 -KPX Racute Ohungarumlaut -20 -KPX Racute Omacron -20 -KPX Racute Oslash -20 -KPX Racute Otilde -20 -KPX Racute T -20 -KPX Racute Tcaron -20 -KPX Racute Tcommaaccent -20 -KPX Racute U -20 -KPX Racute Uacute -20 -KPX Racute Ucircumflex -20 -KPX Racute Udieresis -20 -KPX Racute Ugrave -20 -KPX Racute Uhungarumlaut -20 -KPX Racute Umacron -20 -KPX Racute Uogonek -20 -KPX Racute Uring -20 -KPX Racute V -50 -KPX Racute W -40 -KPX Racute Y -50 -KPX Racute Yacute -50 -KPX Racute Ydieresis -50 -KPX Rcaron O -20 -KPX Rcaron Oacute -20 -KPX Rcaron Ocircumflex -20 -KPX Rcaron Odieresis -20 -KPX Rcaron Ograve -20 -KPX Rcaron Ohungarumlaut -20 -KPX Rcaron Omacron -20 -KPX Rcaron Oslash -20 -KPX Rcaron Otilde -20 -KPX Rcaron T -20 -KPX Rcaron Tcaron -20 -KPX Rcaron Tcommaaccent -20 -KPX Rcaron U -20 -KPX Rcaron Uacute -20 -KPX Rcaron Ucircumflex -20 -KPX Rcaron Udieresis -20 -KPX Rcaron Ugrave -20 -KPX Rcaron Uhungarumlaut -20 -KPX Rcaron Umacron -20 -KPX Rcaron Uogonek -20 -KPX Rcaron Uring -20 -KPX Rcaron V -50 -KPX Rcaron W -40 -KPX Rcaron Y -50 -KPX Rcaron Yacute -50 -KPX Rcaron Ydieresis -50 -KPX Rcommaaccent O -20 -KPX Rcommaaccent Oacute -20 -KPX Rcommaaccent Ocircumflex -20 -KPX Rcommaaccent Odieresis -20 -KPX Rcommaaccent Ograve -20 -KPX Rcommaaccent Ohungarumlaut -20 -KPX Rcommaaccent Omacron -20 -KPX Rcommaaccent Oslash -20 -KPX Rcommaaccent Otilde -20 -KPX Rcommaaccent T -20 -KPX Rcommaaccent Tcaron -20 -KPX Rcommaaccent Tcommaaccent -20 -KPX Rcommaaccent U -20 -KPX Rcommaaccent Uacute -20 -KPX Rcommaaccent Ucircumflex -20 -KPX Rcommaaccent Udieresis -20 -KPX Rcommaaccent Ugrave -20 -KPX Rcommaaccent Uhungarumlaut -20 -KPX Rcommaaccent Umacron -20 -KPX Rcommaaccent Uogonek -20 -KPX Rcommaaccent Uring -20 -KPX Rcommaaccent V -50 -KPX Rcommaaccent W -40 -KPX Rcommaaccent Y -50 -KPX Rcommaaccent Yacute -50 -KPX Rcommaaccent Ydieresis -50 -KPX T A -90 -KPX T Aacute -90 -KPX T Abreve -90 -KPX T Acircumflex -90 -KPX T Adieresis -90 -KPX T Agrave -90 -KPX T Amacron -90 -KPX T Aogonek -90 -KPX T Aring -90 -KPX T Atilde -90 -KPX T O -40 -KPX T Oacute -40 -KPX T Ocircumflex -40 -KPX T Odieresis -40 -KPX T Ograve -40 -KPX T Ohungarumlaut -40 -KPX T Omacron -40 -KPX T Oslash -40 -KPX T Otilde -40 -KPX T a -80 -KPX T aacute -80 -KPX T abreve -80 -KPX T acircumflex -80 -KPX T adieresis -80 -KPX T agrave -80 -KPX T amacron -80 -KPX T aogonek -80 -KPX T aring -80 -KPX T atilde -80 -KPX T colon -40 -KPX T comma -80 -KPX T e -60 -KPX T eacute -60 -KPX T ecaron -60 -KPX T ecircumflex -60 -KPX T edieresis -60 -KPX T edotaccent -60 -KPX T egrave -60 -KPX T emacron -60 -KPX T eogonek -60 -KPX T hyphen -120 -KPX T o -80 -KPX T oacute -80 -KPX T ocircumflex -80 -KPX T odieresis -80 -KPX T ograve -80 -KPX T ohungarumlaut -80 -KPX T omacron -80 -KPX T oslash -80 -KPX T otilde -80 -KPX T period -80 -KPX T r -80 -KPX T racute -80 -KPX T rcommaaccent -80 -KPX T semicolon -40 -KPX T u -90 -KPX T uacute -90 -KPX T ucircumflex -90 -KPX T udieresis -90 -KPX T ugrave -90 -KPX T uhungarumlaut -90 -KPX T umacron -90 -KPX T uogonek -90 -KPX T uring -90 -KPX T w -60 -KPX T y -60 -KPX T yacute -60 -KPX T ydieresis -60 -KPX Tcaron A -90 -KPX Tcaron Aacute -90 -KPX Tcaron Abreve -90 -KPX Tcaron Acircumflex -90 -KPX Tcaron Adieresis -90 -KPX Tcaron Agrave -90 -KPX Tcaron Amacron -90 -KPX Tcaron Aogonek -90 -KPX Tcaron Aring -90 -KPX Tcaron Atilde -90 -KPX Tcaron O -40 -KPX Tcaron Oacute -40 -KPX Tcaron Ocircumflex -40 -KPX Tcaron Odieresis -40 -KPX Tcaron Ograve -40 -KPX Tcaron Ohungarumlaut -40 -KPX Tcaron Omacron -40 -KPX Tcaron Oslash -40 -KPX Tcaron Otilde -40 -KPX Tcaron a -80 -KPX Tcaron aacute -80 -KPX Tcaron abreve -80 -KPX Tcaron acircumflex -80 -KPX Tcaron adieresis -80 -KPX Tcaron agrave -80 -KPX Tcaron amacron -80 -KPX Tcaron aogonek -80 -KPX Tcaron aring -80 -KPX Tcaron atilde -80 -KPX Tcaron colon -40 -KPX Tcaron comma -80 -KPX Tcaron e -60 -KPX Tcaron eacute -60 -KPX Tcaron ecaron -60 -KPX Tcaron ecircumflex -60 -KPX Tcaron edieresis -60 -KPX Tcaron edotaccent -60 -KPX Tcaron egrave -60 -KPX Tcaron emacron -60 -KPX Tcaron eogonek -60 -KPX Tcaron hyphen -120 -KPX Tcaron o -80 -KPX Tcaron oacute -80 -KPX Tcaron ocircumflex -80 -KPX Tcaron odieresis -80 -KPX Tcaron ograve -80 -KPX Tcaron ohungarumlaut -80 -KPX Tcaron omacron -80 -KPX Tcaron oslash -80 -KPX Tcaron otilde -80 -KPX Tcaron period -80 -KPX Tcaron r -80 -KPX Tcaron racute -80 -KPX Tcaron rcommaaccent -80 -KPX Tcaron semicolon -40 -KPX Tcaron u -90 -KPX Tcaron uacute -90 -KPX Tcaron ucircumflex -90 -KPX Tcaron udieresis -90 -KPX Tcaron ugrave -90 -KPX Tcaron uhungarumlaut -90 -KPX Tcaron umacron -90 -KPX Tcaron uogonek -90 -KPX Tcaron uring -90 -KPX Tcaron w -60 -KPX Tcaron y -60 -KPX Tcaron yacute -60 -KPX Tcaron ydieresis -60 -KPX Tcommaaccent A -90 -KPX Tcommaaccent Aacute -90 -KPX Tcommaaccent Abreve -90 -KPX Tcommaaccent Acircumflex -90 -KPX Tcommaaccent Adieresis -90 -KPX Tcommaaccent Agrave -90 -KPX Tcommaaccent Amacron -90 -KPX Tcommaaccent Aogonek -90 -KPX Tcommaaccent Aring -90 -KPX Tcommaaccent Atilde -90 -KPX Tcommaaccent O -40 -KPX Tcommaaccent Oacute -40 -KPX Tcommaaccent Ocircumflex -40 -KPX Tcommaaccent Odieresis -40 -KPX Tcommaaccent Ograve -40 -KPX Tcommaaccent Ohungarumlaut -40 -KPX Tcommaaccent Omacron -40 -KPX Tcommaaccent Oslash -40 -KPX Tcommaaccent Otilde -40 -KPX Tcommaaccent a -80 -KPX Tcommaaccent aacute -80 -KPX Tcommaaccent abreve -80 -KPX Tcommaaccent acircumflex -80 -KPX Tcommaaccent adieresis -80 -KPX Tcommaaccent agrave -80 -KPX Tcommaaccent amacron -80 -KPX Tcommaaccent aogonek -80 -KPX Tcommaaccent aring -80 -KPX Tcommaaccent atilde -80 -KPX Tcommaaccent colon -40 -KPX Tcommaaccent comma -80 -KPX Tcommaaccent e -60 -KPX Tcommaaccent eacute -60 -KPX Tcommaaccent ecaron -60 -KPX Tcommaaccent ecircumflex -60 -KPX Tcommaaccent edieresis -60 -KPX Tcommaaccent edotaccent -60 -KPX Tcommaaccent egrave -60 -KPX Tcommaaccent emacron -60 -KPX Tcommaaccent eogonek -60 -KPX Tcommaaccent hyphen -120 -KPX Tcommaaccent o -80 -KPX Tcommaaccent oacute -80 -KPX Tcommaaccent ocircumflex -80 -KPX Tcommaaccent odieresis -80 -KPX Tcommaaccent ograve -80 -KPX Tcommaaccent ohungarumlaut -80 -KPX Tcommaaccent omacron -80 -KPX Tcommaaccent oslash -80 -KPX Tcommaaccent otilde -80 -KPX Tcommaaccent period -80 -KPX Tcommaaccent r -80 -KPX Tcommaaccent racute -80 -KPX Tcommaaccent rcommaaccent -80 -KPX Tcommaaccent semicolon -40 -KPX Tcommaaccent u -90 -KPX Tcommaaccent uacute -90 -KPX Tcommaaccent ucircumflex -90 -KPX Tcommaaccent udieresis -90 -KPX Tcommaaccent ugrave -90 -KPX Tcommaaccent uhungarumlaut -90 -KPX Tcommaaccent umacron -90 -KPX Tcommaaccent uogonek -90 -KPX Tcommaaccent uring -90 -KPX Tcommaaccent w -60 -KPX Tcommaaccent y -60 -KPX Tcommaaccent yacute -60 -KPX Tcommaaccent ydieresis -60 -KPX U A -50 -KPX U Aacute -50 -KPX U Abreve -50 -KPX U Acircumflex -50 -KPX U Adieresis -50 -KPX U Agrave -50 -KPX U Amacron -50 -KPX U Aogonek -50 -KPX U Aring -50 -KPX U Atilde -50 -KPX U comma -30 -KPX U period -30 -KPX Uacute A -50 -KPX Uacute Aacute -50 -KPX Uacute Abreve -50 -KPX Uacute Acircumflex -50 -KPX Uacute Adieresis -50 -KPX Uacute Agrave -50 -KPX Uacute Amacron -50 -KPX Uacute Aogonek -50 -KPX Uacute Aring -50 -KPX Uacute Atilde -50 -KPX Uacute comma -30 -KPX Uacute period -30 -KPX Ucircumflex A -50 -KPX Ucircumflex Aacute -50 -KPX Ucircumflex Abreve -50 -KPX Ucircumflex Acircumflex -50 -KPX Ucircumflex Adieresis -50 -KPX Ucircumflex Agrave -50 -KPX Ucircumflex Amacron -50 -KPX Ucircumflex Aogonek -50 -KPX Ucircumflex Aring -50 -KPX Ucircumflex Atilde -50 -KPX Ucircumflex comma -30 -KPX Ucircumflex period -30 -KPX Udieresis A -50 -KPX Udieresis Aacute -50 -KPX Udieresis Abreve -50 -KPX Udieresis Acircumflex -50 -KPX Udieresis Adieresis -50 -KPX Udieresis Agrave -50 -KPX Udieresis Amacron -50 -KPX Udieresis Aogonek -50 -KPX Udieresis Aring -50 -KPX Udieresis Atilde -50 -KPX Udieresis comma -30 -KPX Udieresis period -30 -KPX Ugrave A -50 -KPX Ugrave Aacute -50 -KPX Ugrave Abreve -50 -KPX Ugrave Acircumflex -50 -KPX Ugrave Adieresis -50 -KPX Ugrave Agrave -50 -KPX Ugrave Amacron -50 -KPX Ugrave Aogonek -50 -KPX Ugrave Aring -50 -KPX Ugrave Atilde -50 -KPX Ugrave comma -30 -KPX Ugrave period -30 -KPX Uhungarumlaut A -50 -KPX Uhungarumlaut Aacute -50 -KPX Uhungarumlaut Abreve -50 -KPX Uhungarumlaut Acircumflex -50 -KPX Uhungarumlaut Adieresis -50 -KPX Uhungarumlaut Agrave -50 -KPX Uhungarumlaut Amacron -50 -KPX Uhungarumlaut Aogonek -50 -KPX Uhungarumlaut Aring -50 -KPX Uhungarumlaut Atilde -50 -KPX Uhungarumlaut comma -30 -KPX Uhungarumlaut period -30 -KPX Umacron A -50 -KPX Umacron Aacute -50 -KPX Umacron Abreve -50 -KPX Umacron Acircumflex -50 -KPX Umacron Adieresis -50 -KPX Umacron Agrave -50 -KPX Umacron Amacron -50 -KPX Umacron Aogonek -50 -KPX Umacron Aring -50 -KPX Umacron Atilde -50 -KPX Umacron comma -30 -KPX Umacron period -30 -KPX Uogonek A -50 -KPX Uogonek Aacute -50 -KPX Uogonek Abreve -50 -KPX Uogonek Acircumflex -50 -KPX Uogonek Adieresis -50 -KPX Uogonek Agrave -50 -KPX Uogonek Amacron -50 -KPX Uogonek Aogonek -50 -KPX Uogonek Aring -50 -KPX Uogonek Atilde -50 -KPX Uogonek comma -30 -KPX Uogonek period -30 -KPX Uring A -50 -KPX Uring Aacute -50 -KPX Uring Abreve -50 -KPX Uring Acircumflex -50 -KPX Uring Adieresis -50 -KPX Uring Agrave -50 -KPX Uring Amacron -50 -KPX Uring Aogonek -50 -KPX Uring Aring -50 -KPX Uring Atilde -50 -KPX Uring comma -30 -KPX Uring period -30 -KPX V A -80 -KPX V Aacute -80 -KPX V Abreve -80 -KPX V Acircumflex -80 -KPX V Adieresis -80 -KPX V Agrave -80 -KPX V Amacron -80 -KPX V Aogonek -80 -KPX V Aring -80 -KPX V Atilde -80 -KPX V G -50 -KPX V Gbreve -50 -KPX V Gcommaaccent -50 -KPX V O -50 -KPX V Oacute -50 -KPX V Ocircumflex -50 -KPX V Odieresis -50 -KPX V Ograve -50 -KPX V Ohungarumlaut -50 -KPX V Omacron -50 -KPX V Oslash -50 -KPX V Otilde -50 -KPX V a -60 -KPX V aacute -60 -KPX V abreve -60 -KPX V acircumflex -60 -KPX V adieresis -60 -KPX V agrave -60 -KPX V amacron -60 -KPX V aogonek -60 -KPX V aring -60 -KPX V atilde -60 -KPX V colon -40 -KPX V comma -120 -KPX V e -50 -KPX V eacute -50 -KPX V ecaron -50 -KPX V ecircumflex -50 -KPX V edieresis -50 -KPX V edotaccent -50 -KPX V egrave -50 -KPX V emacron -50 -KPX V eogonek -50 -KPX V hyphen -80 -KPX V o -90 -KPX V oacute -90 -KPX V ocircumflex -90 -KPX V odieresis -90 -KPX V ograve -90 -KPX V ohungarumlaut -90 -KPX V omacron -90 -KPX V oslash -90 -KPX V otilde -90 -KPX V period -120 -KPX V semicolon -40 -KPX V u -60 -KPX V uacute -60 -KPX V ucircumflex -60 -KPX V udieresis -60 -KPX V ugrave -60 -KPX V uhungarumlaut -60 -KPX V umacron -60 -KPX V uogonek -60 -KPX V uring -60 -KPX W A -60 -KPX W Aacute -60 -KPX W Abreve -60 -KPX W Acircumflex -60 -KPX W Adieresis -60 -KPX W Agrave -60 -KPX W Amacron -60 -KPX W Aogonek -60 -KPX W Aring -60 -KPX W Atilde -60 -KPX W O -20 -KPX W Oacute -20 -KPX W Ocircumflex -20 -KPX W Odieresis -20 -KPX W Ograve -20 -KPX W Ohungarumlaut -20 -KPX W Omacron -20 -KPX W Oslash -20 -KPX W Otilde -20 -KPX W a -40 -KPX W aacute -40 -KPX W abreve -40 -KPX W acircumflex -40 -KPX W adieresis -40 -KPX W agrave -40 -KPX W amacron -40 -KPX W aogonek -40 -KPX W aring -40 -KPX W atilde -40 -KPX W colon -10 -KPX W comma -80 -KPX W e -35 -KPX W eacute -35 -KPX W ecaron -35 -KPX W ecircumflex -35 -KPX W edieresis -35 -KPX W edotaccent -35 -KPX W egrave -35 -KPX W emacron -35 -KPX W eogonek -35 -KPX W hyphen -40 -KPX W o -60 -KPX W oacute -60 -KPX W ocircumflex -60 -KPX W odieresis -60 -KPX W ograve -60 -KPX W ohungarumlaut -60 -KPX W omacron -60 -KPX W oslash -60 -KPX W otilde -60 -KPX W period -80 -KPX W semicolon -10 -KPX W u -45 -KPX W uacute -45 -KPX W ucircumflex -45 -KPX W udieresis -45 -KPX W ugrave -45 -KPX W uhungarumlaut -45 -KPX W umacron -45 -KPX W uogonek -45 -KPX W uring -45 -KPX W y -20 -KPX W yacute -20 -KPX W ydieresis -20 -KPX Y A -110 -KPX Y Aacute -110 -KPX Y Abreve -110 -KPX Y Acircumflex -110 -KPX Y Adieresis -110 -KPX Y Agrave -110 -KPX Y Amacron -110 -KPX Y Aogonek -110 -KPX Y Aring -110 -KPX Y Atilde -110 -KPX Y O -70 -KPX Y Oacute -70 -KPX Y Ocircumflex -70 -KPX Y Odieresis -70 -KPX Y Ograve -70 -KPX Y Ohungarumlaut -70 -KPX Y Omacron -70 -KPX Y Oslash -70 -KPX Y Otilde -70 -KPX Y a -90 -KPX Y aacute -90 -KPX Y abreve -90 -KPX Y acircumflex -90 -KPX Y adieresis -90 -KPX Y agrave -90 -KPX Y amacron -90 -KPX Y aogonek -90 -KPX Y aring -90 -KPX Y atilde -90 -KPX Y colon -50 -KPX Y comma -100 -KPX Y e -80 -KPX Y eacute -80 -KPX Y ecaron -80 -KPX Y ecircumflex -80 -KPX Y edieresis -80 -KPX Y edotaccent -80 -KPX Y egrave -80 -KPX Y emacron -80 -KPX Y eogonek -80 -KPX Y o -100 -KPX Y oacute -100 -KPX Y ocircumflex -100 -KPX Y odieresis -100 -KPX Y ograve -100 -KPX Y ohungarumlaut -100 -KPX Y omacron -100 -KPX Y oslash -100 -KPX Y otilde -100 -KPX Y period -100 -KPX Y semicolon -50 -KPX Y u -100 -KPX Y uacute -100 -KPX Y ucircumflex -100 -KPX Y udieresis -100 -KPX Y ugrave -100 -KPX Y uhungarumlaut -100 -KPX Y umacron -100 -KPX Y uogonek -100 -KPX Y uring -100 -KPX Yacute A -110 -KPX Yacute Aacute -110 -KPX Yacute Abreve -110 -KPX Yacute Acircumflex -110 -KPX Yacute Adieresis -110 -KPX Yacute Agrave -110 -KPX Yacute Amacron -110 -KPX Yacute Aogonek -110 -KPX Yacute Aring -110 -KPX Yacute Atilde -110 -KPX Yacute O -70 -KPX Yacute Oacute -70 -KPX Yacute Ocircumflex -70 -KPX Yacute Odieresis -70 -KPX Yacute Ograve -70 -KPX Yacute Ohungarumlaut -70 -KPX Yacute Omacron -70 -KPX Yacute Oslash -70 -KPX Yacute Otilde -70 -KPX Yacute a -90 -KPX Yacute aacute -90 -KPX Yacute abreve -90 -KPX Yacute acircumflex -90 -KPX Yacute adieresis -90 -KPX Yacute agrave -90 -KPX Yacute amacron -90 -KPX Yacute aogonek -90 -KPX Yacute aring -90 -KPX Yacute atilde -90 -KPX Yacute colon -50 -KPX Yacute comma -100 -KPX Yacute e -80 -KPX Yacute eacute -80 -KPX Yacute ecaron -80 -KPX Yacute ecircumflex -80 -KPX Yacute edieresis -80 -KPX Yacute edotaccent -80 -KPX Yacute egrave -80 -KPX Yacute emacron -80 -KPX Yacute eogonek -80 -KPX Yacute o -100 -KPX Yacute oacute -100 -KPX Yacute ocircumflex -100 -KPX Yacute odieresis -100 -KPX Yacute ograve -100 -KPX Yacute ohungarumlaut -100 -KPX Yacute omacron -100 -KPX Yacute oslash -100 -KPX Yacute otilde -100 -KPX Yacute period -100 -KPX Yacute semicolon -50 -KPX Yacute u -100 -KPX Yacute uacute -100 -KPX Yacute ucircumflex -100 -KPX Yacute udieresis -100 -KPX Yacute ugrave -100 -KPX Yacute uhungarumlaut -100 -KPX Yacute umacron -100 -KPX Yacute uogonek -100 -KPX Yacute uring -100 -KPX Ydieresis A -110 -KPX Ydieresis Aacute -110 -KPX Ydieresis Abreve -110 -KPX Ydieresis Acircumflex -110 -KPX Ydieresis Adieresis -110 -KPX Ydieresis Agrave -110 -KPX Ydieresis Amacron -110 -KPX Ydieresis Aogonek -110 -KPX Ydieresis Aring -110 -KPX Ydieresis Atilde -110 -KPX Ydieresis O -70 -KPX Ydieresis Oacute -70 -KPX Ydieresis Ocircumflex -70 -KPX Ydieresis Odieresis -70 -KPX Ydieresis Ograve -70 -KPX Ydieresis Ohungarumlaut -70 -KPX Ydieresis Omacron -70 -KPX Ydieresis Oslash -70 -KPX Ydieresis Otilde -70 -KPX Ydieresis a -90 -KPX Ydieresis aacute -90 -KPX Ydieresis abreve -90 -KPX Ydieresis acircumflex -90 -KPX Ydieresis adieresis -90 -KPX Ydieresis agrave -90 -KPX Ydieresis amacron -90 -KPX Ydieresis aogonek -90 -KPX Ydieresis aring -90 -KPX Ydieresis atilde -90 -KPX Ydieresis colon -50 -KPX Ydieresis comma -100 -KPX Ydieresis e -80 -KPX Ydieresis eacute -80 -KPX Ydieresis ecaron -80 -KPX Ydieresis ecircumflex -80 -KPX Ydieresis edieresis -80 -KPX Ydieresis edotaccent -80 -KPX Ydieresis egrave -80 -KPX Ydieresis emacron -80 -KPX Ydieresis eogonek -80 -KPX Ydieresis o -100 -KPX Ydieresis oacute -100 -KPX Ydieresis ocircumflex -100 -KPX Ydieresis odieresis -100 -KPX Ydieresis ograve -100 -KPX Ydieresis ohungarumlaut -100 -KPX Ydieresis omacron -100 -KPX Ydieresis oslash -100 -KPX Ydieresis otilde -100 -KPX Ydieresis period -100 -KPX Ydieresis semicolon -50 -KPX Ydieresis u -100 -KPX Ydieresis uacute -100 -KPX Ydieresis ucircumflex -100 -KPX Ydieresis udieresis -100 -KPX Ydieresis ugrave -100 -KPX Ydieresis uhungarumlaut -100 -KPX Ydieresis umacron -100 -KPX Ydieresis uogonek -100 -KPX Ydieresis uring -100 -KPX a g -10 -KPX a gbreve -10 -KPX a gcommaaccent -10 -KPX a v -15 -KPX a w -15 -KPX a y -20 -KPX a yacute -20 -KPX a ydieresis -20 -KPX aacute g -10 -KPX aacute gbreve -10 -KPX aacute gcommaaccent -10 -KPX aacute v -15 -KPX aacute w -15 -KPX aacute y -20 -KPX aacute yacute -20 -KPX aacute ydieresis -20 -KPX abreve g -10 -KPX abreve gbreve -10 -KPX abreve gcommaaccent -10 -KPX abreve v -15 -KPX abreve w -15 -KPX abreve y -20 -KPX abreve yacute -20 -KPX abreve ydieresis -20 -KPX acircumflex g -10 -KPX acircumflex gbreve -10 -KPX acircumflex gcommaaccent -10 -KPX acircumflex v -15 -KPX acircumflex w -15 -KPX acircumflex y -20 -KPX acircumflex yacute -20 -KPX acircumflex ydieresis -20 -KPX adieresis g -10 -KPX adieresis gbreve -10 -KPX adieresis gcommaaccent -10 -KPX adieresis v -15 -KPX adieresis w -15 -KPX adieresis y -20 -KPX adieresis yacute -20 -KPX adieresis ydieresis -20 -KPX agrave g -10 -KPX agrave gbreve -10 -KPX agrave gcommaaccent -10 -KPX agrave v -15 -KPX agrave w -15 -KPX agrave y -20 -KPX agrave yacute -20 -KPX agrave ydieresis -20 -KPX amacron g -10 -KPX amacron gbreve -10 -KPX amacron gcommaaccent -10 -KPX amacron v -15 -KPX amacron w -15 -KPX amacron y -20 -KPX amacron yacute -20 -KPX amacron ydieresis -20 -KPX aogonek g -10 -KPX aogonek gbreve -10 -KPX aogonek gcommaaccent -10 -KPX aogonek v -15 -KPX aogonek w -15 -KPX aogonek y -20 -KPX aogonek yacute -20 -KPX aogonek ydieresis -20 -KPX aring g -10 -KPX aring gbreve -10 -KPX aring gcommaaccent -10 -KPX aring v -15 -KPX aring w -15 -KPX aring y -20 -KPX aring yacute -20 -KPX aring ydieresis -20 -KPX atilde g -10 -KPX atilde gbreve -10 -KPX atilde gcommaaccent -10 -KPX atilde v -15 -KPX atilde w -15 -KPX atilde y -20 -KPX atilde yacute -20 -KPX atilde ydieresis -20 -KPX b l -10 -KPX b lacute -10 -KPX b lcommaaccent -10 -KPX b lslash -10 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -20 -KPX b y -20 -KPX b yacute -20 -KPX b ydieresis -20 -KPX c h -10 -KPX c k -20 -KPX c kcommaaccent -20 -KPX c l -20 -KPX c lacute -20 -KPX c lcommaaccent -20 -KPX c lslash -20 -KPX c y -10 -KPX c yacute -10 -KPX c ydieresis -10 -KPX cacute h -10 -KPX cacute k -20 -KPX cacute kcommaaccent -20 -KPX cacute l -20 -KPX cacute lacute -20 -KPX cacute lcommaaccent -20 -KPX cacute lslash -20 -KPX cacute y -10 -KPX cacute yacute -10 -KPX cacute ydieresis -10 -KPX ccaron h -10 -KPX ccaron k -20 -KPX ccaron kcommaaccent -20 -KPX ccaron l -20 -KPX ccaron lacute -20 -KPX ccaron lcommaaccent -20 -KPX ccaron lslash -20 -KPX ccaron y -10 -KPX ccaron yacute -10 -KPX ccaron ydieresis -10 -KPX ccedilla h -10 -KPX ccedilla k -20 -KPX ccedilla kcommaaccent -20 -KPX ccedilla l -20 -KPX ccedilla lacute -20 -KPX ccedilla lcommaaccent -20 -KPX ccedilla lslash -20 -KPX ccedilla y -10 -KPX ccedilla yacute -10 -KPX ccedilla ydieresis -10 -KPX colon space -40 -KPX comma quotedblright -120 -KPX comma quoteright -120 -KPX comma space -40 -KPX d d -10 -KPX d dcroat -10 -KPX d v -15 -KPX d w -15 -KPX d y -15 -KPX d yacute -15 -KPX d ydieresis -15 -KPX dcroat d -10 -KPX dcroat dcroat -10 -KPX dcroat v -15 -KPX dcroat w -15 -KPX dcroat y -15 -KPX dcroat yacute -15 -KPX dcroat ydieresis -15 -KPX e comma 10 -KPX e period 20 -KPX e v -15 -KPX e w -15 -KPX e x -15 -KPX e y -15 -KPX e yacute -15 -KPX e ydieresis -15 -KPX eacute comma 10 -KPX eacute period 20 -KPX eacute v -15 -KPX eacute w -15 -KPX eacute x -15 -KPX eacute y -15 -KPX eacute yacute -15 -KPX eacute ydieresis -15 -KPX ecaron comma 10 -KPX ecaron period 20 -KPX ecaron v -15 -KPX ecaron w -15 -KPX ecaron x -15 -KPX ecaron y -15 -KPX ecaron yacute -15 -KPX ecaron ydieresis -15 -KPX ecircumflex comma 10 -KPX ecircumflex period 20 -KPX ecircumflex v -15 -KPX ecircumflex w -15 -KPX ecircumflex x -15 -KPX ecircumflex y -15 -KPX ecircumflex yacute -15 -KPX ecircumflex ydieresis -15 -KPX edieresis comma 10 -KPX edieresis period 20 -KPX edieresis v -15 -KPX edieresis w -15 -KPX edieresis x -15 -KPX edieresis y -15 -KPX edieresis yacute -15 -KPX edieresis ydieresis -15 -KPX edotaccent comma 10 -KPX edotaccent period 20 -KPX edotaccent v -15 -KPX edotaccent w -15 -KPX edotaccent x -15 -KPX edotaccent y -15 -KPX edotaccent yacute -15 -KPX edotaccent ydieresis -15 -KPX egrave comma 10 -KPX egrave period 20 -KPX egrave v -15 -KPX egrave w -15 -KPX egrave x -15 -KPX egrave y -15 -KPX egrave yacute -15 -KPX egrave ydieresis -15 -KPX emacron comma 10 -KPX emacron period 20 -KPX emacron v -15 -KPX emacron w -15 -KPX emacron x -15 -KPX emacron y -15 -KPX emacron yacute -15 -KPX emacron ydieresis -15 -KPX eogonek comma 10 -KPX eogonek period 20 -KPX eogonek v -15 -KPX eogonek w -15 -KPX eogonek x -15 -KPX eogonek y -15 -KPX eogonek yacute -15 -KPX eogonek ydieresis -15 -KPX f comma -10 -KPX f e -10 -KPX f eacute -10 -KPX f ecaron -10 -KPX f ecircumflex -10 -KPX f edieresis -10 -KPX f edotaccent -10 -KPX f egrave -10 -KPX f emacron -10 -KPX f eogonek -10 -KPX f o -20 -KPX f oacute -20 -KPX f ocircumflex -20 -KPX f odieresis -20 -KPX f ograve -20 -KPX f ohungarumlaut -20 -KPX f omacron -20 -KPX f oslash -20 -KPX f otilde -20 -KPX f period -10 -KPX f quotedblright 30 -KPX f quoteright 30 -KPX g e 10 -KPX g eacute 10 -KPX g ecaron 10 -KPX g ecircumflex 10 -KPX g edieresis 10 -KPX g edotaccent 10 -KPX g egrave 10 -KPX g emacron 10 -KPX g eogonek 10 -KPX g g -10 -KPX g gbreve -10 -KPX g gcommaaccent -10 -KPX gbreve e 10 -KPX gbreve eacute 10 -KPX gbreve ecaron 10 -KPX gbreve ecircumflex 10 -KPX gbreve edieresis 10 -KPX gbreve edotaccent 10 -KPX gbreve egrave 10 -KPX gbreve emacron 10 -KPX gbreve eogonek 10 -KPX gbreve g -10 -KPX gbreve gbreve -10 -KPX gbreve gcommaaccent -10 -KPX gcommaaccent e 10 -KPX gcommaaccent eacute 10 -KPX gcommaaccent ecaron 10 -KPX gcommaaccent ecircumflex 10 -KPX gcommaaccent edieresis 10 -KPX gcommaaccent edotaccent 10 -KPX gcommaaccent egrave 10 -KPX gcommaaccent emacron 10 -KPX gcommaaccent eogonek 10 -KPX gcommaaccent g -10 -KPX gcommaaccent gbreve -10 -KPX gcommaaccent gcommaaccent -10 -KPX h y -20 -KPX h yacute -20 -KPX h ydieresis -20 -KPX k o -15 -KPX k oacute -15 -KPX k ocircumflex -15 -KPX k odieresis -15 -KPX k ograve -15 -KPX k ohungarumlaut -15 -KPX k omacron -15 -KPX k oslash -15 -KPX k otilde -15 -KPX kcommaaccent o -15 -KPX kcommaaccent oacute -15 -KPX kcommaaccent ocircumflex -15 -KPX kcommaaccent odieresis -15 -KPX kcommaaccent ograve -15 -KPX kcommaaccent ohungarumlaut -15 -KPX kcommaaccent omacron -15 -KPX kcommaaccent oslash -15 -KPX kcommaaccent otilde -15 -KPX l w -15 -KPX l y -15 -KPX l yacute -15 -KPX l ydieresis -15 -KPX lacute w -15 -KPX lacute y -15 -KPX lacute yacute -15 -KPX lacute ydieresis -15 -KPX lcommaaccent w -15 -KPX lcommaaccent y -15 -KPX lcommaaccent yacute -15 -KPX lcommaaccent ydieresis -15 -KPX lslash w -15 -KPX lslash y -15 -KPX lslash yacute -15 -KPX lslash ydieresis -15 -KPX m u -20 -KPX m uacute -20 -KPX m ucircumflex -20 -KPX m udieresis -20 -KPX m ugrave -20 -KPX m uhungarumlaut -20 -KPX m umacron -20 -KPX m uogonek -20 -KPX m uring -20 -KPX m y -30 -KPX m yacute -30 -KPX m ydieresis -30 -KPX n u -10 -KPX n uacute -10 -KPX n ucircumflex -10 -KPX n udieresis -10 -KPX n ugrave -10 -KPX n uhungarumlaut -10 -KPX n umacron -10 -KPX n uogonek -10 -KPX n uring -10 -KPX n v -40 -KPX n y -20 -KPX n yacute -20 -KPX n ydieresis -20 -KPX nacute u -10 -KPX nacute uacute -10 -KPX nacute ucircumflex -10 -KPX nacute udieresis -10 -KPX nacute ugrave -10 -KPX nacute uhungarumlaut -10 -KPX nacute umacron -10 -KPX nacute uogonek -10 -KPX nacute uring -10 -KPX nacute v -40 -KPX nacute y -20 -KPX nacute yacute -20 -KPX nacute ydieresis -20 -KPX ncaron u -10 -KPX ncaron uacute -10 -KPX ncaron ucircumflex -10 -KPX ncaron udieresis -10 -KPX ncaron ugrave -10 -KPX ncaron uhungarumlaut -10 -KPX ncaron umacron -10 -KPX ncaron uogonek -10 -KPX ncaron uring -10 -KPX ncaron v -40 -KPX ncaron y -20 -KPX ncaron yacute -20 -KPX ncaron ydieresis -20 -KPX ncommaaccent u -10 -KPX ncommaaccent uacute -10 -KPX ncommaaccent ucircumflex -10 -KPX ncommaaccent udieresis -10 -KPX ncommaaccent ugrave -10 -KPX ncommaaccent uhungarumlaut -10 -KPX ncommaaccent umacron -10 -KPX ncommaaccent uogonek -10 -KPX ncommaaccent uring -10 -KPX ncommaaccent v -40 -KPX ncommaaccent y -20 -KPX ncommaaccent yacute -20 -KPX ncommaaccent ydieresis -20 -KPX ntilde u -10 -KPX ntilde uacute -10 -KPX ntilde ucircumflex -10 -KPX ntilde udieresis -10 -KPX ntilde ugrave -10 -KPX ntilde uhungarumlaut -10 -KPX ntilde umacron -10 -KPX ntilde uogonek -10 -KPX ntilde uring -10 -KPX ntilde v -40 -KPX ntilde y -20 -KPX ntilde yacute -20 -KPX ntilde ydieresis -20 -KPX o v -20 -KPX o w -15 -KPX o x -30 -KPX o y -20 -KPX o yacute -20 -KPX o ydieresis -20 -KPX oacute v -20 -KPX oacute w -15 -KPX oacute x -30 -KPX oacute y -20 -KPX oacute yacute -20 -KPX oacute ydieresis -20 -KPX ocircumflex v -20 -KPX ocircumflex w -15 -KPX ocircumflex x -30 -KPX ocircumflex y -20 -KPX ocircumflex yacute -20 -KPX ocircumflex ydieresis -20 -KPX odieresis v -20 -KPX odieresis w -15 -KPX odieresis x -30 -KPX odieresis y -20 -KPX odieresis yacute -20 -KPX odieresis ydieresis -20 -KPX ograve v -20 -KPX ograve w -15 -KPX ograve x -30 -KPX ograve y -20 -KPX ograve yacute -20 -KPX ograve ydieresis -20 -KPX ohungarumlaut v -20 -KPX ohungarumlaut w -15 -KPX ohungarumlaut x -30 -KPX ohungarumlaut y -20 -KPX ohungarumlaut yacute -20 -KPX ohungarumlaut ydieresis -20 -KPX omacron v -20 -KPX omacron w -15 -KPX omacron x -30 -KPX omacron y -20 -KPX omacron yacute -20 -KPX omacron ydieresis -20 -KPX oslash v -20 -KPX oslash w -15 -KPX oslash x -30 -KPX oslash y -20 -KPX oslash yacute -20 -KPX oslash ydieresis -20 -KPX otilde v -20 -KPX otilde w -15 -KPX otilde x -30 -KPX otilde y -20 -KPX otilde yacute -20 -KPX otilde ydieresis -20 -KPX p y -15 -KPX p yacute -15 -KPX p ydieresis -15 -KPX period quotedblright -120 -KPX period quoteright -120 -KPX period space -40 -KPX quotedblright space -80 -KPX quoteleft quoteleft -46 -KPX quoteright d -80 -KPX quoteright dcroat -80 -KPX quoteright l -20 -KPX quoteright lacute -20 -KPX quoteright lcommaaccent -20 -KPX quoteright lslash -20 -KPX quoteright quoteright -46 -KPX quoteright r -40 -KPX quoteright racute -40 -KPX quoteright rcaron -40 -KPX quoteright rcommaaccent -40 -KPX quoteright s -60 -KPX quoteright sacute -60 -KPX quoteright scaron -60 -KPX quoteright scedilla -60 -KPX quoteright scommaaccent -60 -KPX quoteright space -80 -KPX quoteright v -20 -KPX r c -20 -KPX r cacute -20 -KPX r ccaron -20 -KPX r ccedilla -20 -KPX r comma -60 -KPX r d -20 -KPX r dcroat -20 -KPX r g -15 -KPX r gbreve -15 -KPX r gcommaaccent -15 -KPX r hyphen -20 -KPX r o -20 -KPX r oacute -20 -KPX r ocircumflex -20 -KPX r odieresis -20 -KPX r ograve -20 -KPX r ohungarumlaut -20 -KPX r omacron -20 -KPX r oslash -20 -KPX r otilde -20 -KPX r period -60 -KPX r q -20 -KPX r s -15 -KPX r sacute -15 -KPX r scaron -15 -KPX r scedilla -15 -KPX r scommaaccent -15 -KPX r t 20 -KPX r tcommaaccent 20 -KPX r v 10 -KPX r y 10 -KPX r yacute 10 -KPX r ydieresis 10 -KPX racute c -20 -KPX racute cacute -20 -KPX racute ccaron -20 -KPX racute ccedilla -20 -KPX racute comma -60 -KPX racute d -20 -KPX racute dcroat -20 -KPX racute g -15 -KPX racute gbreve -15 -KPX racute gcommaaccent -15 -KPX racute hyphen -20 -KPX racute o -20 -KPX racute oacute -20 -KPX racute ocircumflex -20 -KPX racute odieresis -20 -KPX racute ograve -20 -KPX racute ohungarumlaut -20 -KPX racute omacron -20 -KPX racute oslash -20 -KPX racute otilde -20 -KPX racute period -60 -KPX racute q -20 -KPX racute s -15 -KPX racute sacute -15 -KPX racute scaron -15 -KPX racute scedilla -15 -KPX racute scommaaccent -15 -KPX racute t 20 -KPX racute tcommaaccent 20 -KPX racute v 10 -KPX racute y 10 -KPX racute yacute 10 -KPX racute ydieresis 10 -KPX rcaron c -20 -KPX rcaron cacute -20 -KPX rcaron ccaron -20 -KPX rcaron ccedilla -20 -KPX rcaron comma -60 -KPX rcaron d -20 -KPX rcaron dcroat -20 -KPX rcaron g -15 -KPX rcaron gbreve -15 -KPX rcaron gcommaaccent -15 -KPX rcaron hyphen -20 -KPX rcaron o -20 -KPX rcaron oacute -20 -KPX rcaron ocircumflex -20 -KPX rcaron odieresis -20 -KPX rcaron ograve -20 -KPX rcaron ohungarumlaut -20 -KPX rcaron omacron -20 -KPX rcaron oslash -20 -KPX rcaron otilde -20 -KPX rcaron period -60 -KPX rcaron q -20 -KPX rcaron s -15 -KPX rcaron sacute -15 -KPX rcaron scaron -15 -KPX rcaron scedilla -15 -KPX rcaron scommaaccent -15 -KPX rcaron t 20 -KPX rcaron tcommaaccent 20 -KPX rcaron v 10 -KPX rcaron y 10 -KPX rcaron yacute 10 -KPX rcaron ydieresis 10 -KPX rcommaaccent c -20 -KPX rcommaaccent cacute -20 -KPX rcommaaccent ccaron -20 -KPX rcommaaccent ccedilla -20 -KPX rcommaaccent comma -60 -KPX rcommaaccent d -20 -KPX rcommaaccent dcroat -20 -KPX rcommaaccent g -15 -KPX rcommaaccent gbreve -15 -KPX rcommaaccent gcommaaccent -15 -KPX rcommaaccent hyphen -20 -KPX rcommaaccent o -20 -KPX rcommaaccent oacute -20 -KPX rcommaaccent ocircumflex -20 -KPX rcommaaccent odieresis -20 -KPX rcommaaccent ograve -20 -KPX rcommaaccent ohungarumlaut -20 -KPX rcommaaccent omacron -20 -KPX rcommaaccent oslash -20 -KPX rcommaaccent otilde -20 -KPX rcommaaccent period -60 -KPX rcommaaccent q -20 -KPX rcommaaccent s -15 -KPX rcommaaccent sacute -15 -KPX rcommaaccent scaron -15 -KPX rcommaaccent scedilla -15 -KPX rcommaaccent scommaaccent -15 -KPX rcommaaccent t 20 -KPX rcommaaccent tcommaaccent 20 -KPX rcommaaccent v 10 -KPX rcommaaccent y 10 -KPX rcommaaccent yacute 10 -KPX rcommaaccent ydieresis 10 -KPX s w -15 -KPX sacute w -15 -KPX scaron w -15 -KPX scedilla w -15 -KPX scommaaccent w -15 -KPX semicolon space -40 -KPX space T -100 -KPX space Tcaron -100 -KPX space Tcommaaccent -100 -KPX space V -80 -KPX space W -80 -KPX space Y -120 -KPX space Yacute -120 -KPX space Ydieresis -120 -KPX space quotedblleft -80 -KPX space quoteleft -60 -KPX v a -20 -KPX v aacute -20 -KPX v abreve -20 -KPX v acircumflex -20 -KPX v adieresis -20 -KPX v agrave -20 -KPX v amacron -20 -KPX v aogonek -20 -KPX v aring -20 -KPX v atilde -20 -KPX v comma -80 -KPX v o -30 -KPX v oacute -30 -KPX v ocircumflex -30 -KPX v odieresis -30 -KPX v ograve -30 -KPX v ohungarumlaut -30 -KPX v omacron -30 -KPX v oslash -30 -KPX v otilde -30 -KPX v period -80 -KPX w comma -40 -KPX w o -20 -KPX w oacute -20 -KPX w ocircumflex -20 -KPX w odieresis -20 -KPX w ograve -20 -KPX w ohungarumlaut -20 -KPX w omacron -20 -KPX w oslash -20 -KPX w otilde -20 -KPX w period -40 -KPX x e -10 -KPX x eacute -10 -KPX x ecaron -10 -KPX x ecircumflex -10 -KPX x edieresis -10 -KPX x edotaccent -10 -KPX x egrave -10 -KPX x emacron -10 -KPX x eogonek -10 -KPX y a -30 -KPX y aacute -30 -KPX y abreve -30 -KPX y acircumflex -30 -KPX y adieresis -30 -KPX y agrave -30 -KPX y amacron -30 -KPX y aogonek -30 -KPX y aring -30 -KPX y atilde -30 -KPX y comma -80 -KPX y e -10 -KPX y eacute -10 -KPX y ecaron -10 -KPX y ecircumflex -10 -KPX y edieresis -10 -KPX y edotaccent -10 -KPX y egrave -10 -KPX y emacron -10 -KPX y eogonek -10 -KPX y o -25 -KPX y oacute -25 -KPX y ocircumflex -25 -KPX y odieresis -25 -KPX y ograve -25 -KPX y ohungarumlaut -25 -KPX y omacron -25 -KPX y oslash -25 -KPX y otilde -25 -KPX y period -80 -KPX yacute a -30 -KPX yacute aacute -30 -KPX yacute abreve -30 -KPX yacute acircumflex -30 -KPX yacute adieresis -30 -KPX yacute agrave -30 -KPX yacute amacron -30 -KPX yacute aogonek -30 -KPX yacute aring -30 -KPX yacute atilde -30 -KPX yacute comma -80 -KPX yacute e -10 -KPX yacute eacute -10 -KPX yacute ecaron -10 -KPX yacute ecircumflex -10 -KPX yacute edieresis -10 -KPX yacute edotaccent -10 -KPX yacute egrave -10 -KPX yacute emacron -10 -KPX yacute eogonek -10 -KPX yacute o -25 -KPX yacute oacute -25 -KPX yacute ocircumflex -25 -KPX yacute odieresis -25 -KPX yacute ograve -25 -KPX yacute ohungarumlaut -25 -KPX yacute omacron -25 -KPX yacute oslash -25 -KPX yacute otilde -25 -KPX yacute period -80 -KPX ydieresis a -30 -KPX ydieresis aacute -30 -KPX ydieresis abreve -30 -KPX ydieresis acircumflex -30 -KPX ydieresis adieresis -30 -KPX ydieresis agrave -30 -KPX ydieresis amacron -30 -KPX ydieresis aogonek -30 -KPX ydieresis aring -30 -KPX ydieresis atilde -30 -KPX ydieresis comma -80 -KPX ydieresis e -10 -KPX ydieresis eacute -10 -KPX ydieresis ecaron -10 -KPX ydieresis ecircumflex -10 -KPX ydieresis edieresis -10 -KPX ydieresis edotaccent -10 -KPX ydieresis egrave -10 -KPX ydieresis emacron -10 -KPX ydieresis eogonek -10 -KPX ydieresis o -25 -KPX ydieresis oacute -25 -KPX ydieresis ocircumflex -25 -KPX ydieresis odieresis -25 -KPX ydieresis ograve -25 -KPX ydieresis ohungarumlaut -25 -KPX ydieresis omacron -25 -KPX ydieresis oslash -25 -KPX ydieresis otilde -25 -KPX ydieresis period -80 -KPX z e 10 -KPX z eacute 10 -KPX z ecaron 10 -KPX z ecircumflex 10 -KPX z edieresis 10 -KPX z edotaccent 10 -KPX z egrave 10 -KPX z emacron 10 -KPX z eogonek 10 -KPX zacute e 10 -KPX zacute eacute 10 -KPX zacute ecaron 10 -KPX zacute ecircumflex 10 -KPX zacute edieresis 10 -KPX zacute edotaccent 10 -KPX zacute egrave 10 -KPX zacute emacron 10 -KPX zacute eogonek 10 -KPX zcaron e 10 -KPX zcaron eacute 10 -KPX zcaron ecaron 10 -KPX zcaron ecircumflex 10 -KPX zcaron edieresis 10 -KPX zcaron edotaccent 10 -KPX zcaron egrave 10 -KPX zcaron emacron 10 -KPX zcaron eogonek 10 -KPX zdotaccent e 10 -KPX zdotaccent eacute 10 -KPX zdotaccent ecaron 10 -KPX zdotaccent ecircumflex 10 -KPX zdotaccent edieresis 10 -KPX zdotaccent edotaccent 10 -KPX zdotaccent egrave 10 -KPX zdotaccent emacron 10 -KPX zdotaccent eogonek 10 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Oblique.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Oblique.afm deleted file mode 100644 index 57bf472..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica-Oblique.afm +++ /dev/null @@ -1,3051 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:44:31 1997 -Comment UniqueID 43055 -Comment VMusage 14960 69346 -FontName Helvetica-Oblique -FullName Helvetica Oblique -FamilyName Helvetica -Weight Medium -ItalicAngle -12 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -170 -225 1116 931 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 718 -XHeight 523 -Ascender 718 -Descender -207 -StdHW 76 -StdVW 88 -StartCharMetrics 315 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 278 ; N exclam ; B 90 0 340 718 ; -C 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ; -C 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ; -C 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ; -C 37 ; WX 889 ; N percent ; B 147 -19 889 703 ; -C 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ; -C 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ; -C 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ; -C 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ; -C 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ; -C 43 ; WX 584 ; N plus ; B 85 0 606 505 ; -C 44 ; WX 278 ; N comma ; B 56 -147 214 106 ; -C 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ; -C 46 ; WX 278 ; N period ; B 87 0 214 106 ; -C 47 ; WX 278 ; N slash ; B -21 -19 452 737 ; -C 48 ; WX 556 ; N zero ; B 93 -19 608 703 ; -C 49 ; WX 556 ; N one ; B 207 0 508 703 ; -C 50 ; WX 556 ; N two ; B 26 0 617 703 ; -C 51 ; WX 556 ; N three ; B 75 -19 610 703 ; -C 52 ; WX 556 ; N four ; B 61 0 576 703 ; -C 53 ; WX 556 ; N five ; B 68 -19 621 688 ; -C 54 ; WX 556 ; N six ; B 91 -19 615 703 ; -C 55 ; WX 556 ; N seven ; B 137 0 669 688 ; -C 56 ; WX 556 ; N eight ; B 74 -19 607 703 ; -C 57 ; WX 556 ; N nine ; B 82 -19 609 703 ; -C 58 ; WX 278 ; N colon ; B 87 0 301 516 ; -C 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ; -C 60 ; WX 584 ; N less ; B 94 11 641 495 ; -C 61 ; WX 584 ; N equal ; B 63 115 628 390 ; -C 62 ; WX 584 ; N greater ; B 50 11 597 495 ; -C 63 ; WX 556 ; N question ; B 161 0 610 727 ; -C 64 ; WX 1015 ; N at ; B 215 -19 965 737 ; -C 65 ; WX 667 ; N A ; B 14 0 654 718 ; -C 66 ; WX 667 ; N B ; B 74 0 712 718 ; -C 67 ; WX 722 ; N C ; B 108 -19 782 737 ; -C 68 ; WX 722 ; N D ; B 81 0 764 718 ; -C 69 ; WX 667 ; N E ; B 86 0 762 718 ; -C 70 ; WX 611 ; N F ; B 86 0 736 718 ; -C 71 ; WX 778 ; N G ; B 111 -19 799 737 ; -C 72 ; WX 722 ; N H ; B 77 0 799 718 ; -C 73 ; WX 278 ; N I ; B 91 0 341 718 ; -C 74 ; WX 500 ; N J ; B 47 -19 581 718 ; -C 75 ; WX 667 ; N K ; B 76 0 808 718 ; -C 76 ; WX 556 ; N L ; B 76 0 555 718 ; -C 77 ; WX 833 ; N M ; B 73 0 914 718 ; -C 78 ; WX 722 ; N N ; B 76 0 799 718 ; -C 79 ; WX 778 ; N O ; B 105 -19 826 737 ; -C 80 ; WX 667 ; N P ; B 86 0 737 718 ; -C 81 ; WX 778 ; N Q ; B 105 -56 826 737 ; -C 82 ; WX 722 ; N R ; B 88 0 773 718 ; -C 83 ; WX 667 ; N S ; B 90 -19 713 737 ; -C 84 ; WX 611 ; N T ; B 148 0 750 718 ; -C 85 ; WX 722 ; N U ; B 123 -19 797 718 ; -C 86 ; WX 667 ; N V ; B 173 0 800 718 ; -C 87 ; WX 944 ; N W ; B 169 0 1081 718 ; -C 88 ; WX 667 ; N X ; B 19 0 790 718 ; -C 89 ; WX 667 ; N Y ; B 167 0 806 718 ; -C 90 ; WX 611 ; N Z ; B 23 0 741 718 ; -C 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ; -C 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ; -C 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ; -C 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ; -C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ; -C 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ; -C 97 ; WX 556 ; N a ; B 61 -15 559 538 ; -C 98 ; WX 556 ; N b ; B 58 -15 584 718 ; -C 99 ; WX 500 ; N c ; B 74 -15 553 538 ; -C 100 ; WX 556 ; N d ; B 84 -15 652 718 ; -C 101 ; WX 556 ; N e ; B 84 -15 578 538 ; -C 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ; -C 103 ; WX 556 ; N g ; B 42 -220 610 538 ; -C 104 ; WX 556 ; N h ; B 65 0 573 718 ; -C 105 ; WX 222 ; N i ; B 67 0 308 718 ; -C 106 ; WX 222 ; N j ; B -60 -210 308 718 ; -C 107 ; WX 500 ; N k ; B 67 0 600 718 ; -C 108 ; WX 222 ; N l ; B 67 0 308 718 ; -C 109 ; WX 833 ; N m ; B 65 0 852 538 ; -C 110 ; WX 556 ; N n ; B 65 0 573 538 ; -C 111 ; WX 556 ; N o ; B 83 -14 585 538 ; -C 112 ; WX 556 ; N p ; B 14 -207 584 538 ; -C 113 ; WX 556 ; N q ; B 84 -207 605 538 ; -C 114 ; WX 333 ; N r ; B 77 0 446 538 ; -C 115 ; WX 500 ; N s ; B 63 -15 529 538 ; -C 116 ; WX 278 ; N t ; B 102 -7 368 669 ; -C 117 ; WX 556 ; N u ; B 94 -15 600 523 ; -C 118 ; WX 500 ; N v ; B 119 0 603 523 ; -C 119 ; WX 722 ; N w ; B 125 0 820 523 ; -C 120 ; WX 500 ; N x ; B 11 0 594 523 ; -C 121 ; WX 500 ; N y ; B 15 -214 600 523 ; -C 122 ; WX 500 ; N z ; B 31 0 571 523 ; -C 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ; -C 124 ; WX 260 ; N bar ; B 46 -225 332 775 ; -C 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ; -C 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ; -C 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ; -C 162 ; WX 556 ; N cent ; B 95 -115 584 623 ; -C 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ; -C 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ; -C 165 ; WX 556 ; N yen ; B 81 0 699 688 ; -C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ; -C 167 ; WX 556 ; N section ; B 76 -191 584 737 ; -C 168 ; WX 556 ; N currency ; B 60 99 646 603 ; -C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ; -C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ; -C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ; -C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ; -C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ; -C 174 ; WX 500 ; N fi ; B 86 0 587 728 ; -C 175 ; WX 500 ; N fl ; B 86 0 585 728 ; -C 177 ; WX 556 ; N endash ; B 51 240 623 313 ; -C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ; -C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ; -C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ; -C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ; -C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ; -C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ; -C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ; -C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ; -C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ; -C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ; -C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ; -C 193 ; WX 333 ; N grave ; B 170 593 337 734 ; -C 194 ; WX 333 ; N acute ; B 248 593 475 734 ; -C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ; -C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ; -C 197 ; WX 333 ; N macron ; B 143 627 468 684 ; -C 198 ; WX 333 ; N breve ; B 167 595 476 731 ; -C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ; -C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ; -C 202 ; WX 333 ; N ring ; B 214 572 402 756 ; -C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ; -C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ; -C 207 ; WX 333 ; N caron ; B 177 593 468 734 ; -C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ; -C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ; -C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ; -C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ; -C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ; -C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ; -C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ; -C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ; -C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ; -C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ; -C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ; -C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ; -C -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ; -C -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ; -C -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ; -C -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ; -C -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ; -C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ; -C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ; -C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; -C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ; -C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ; -C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ; -C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ; -C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ; -C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ; -C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ; -C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ; -C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ; -C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ; -C -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ; -C -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ; -C -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ; -C -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ; -C -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ; -C -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ; -C -1 ; WX 556 ; N aring ; B 61 -15 559 756 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ; -C -1 ; WX 222 ; N lacute ; B 67 0 461 929 ; -C -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ; -C -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ; -C -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ; -C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ; -C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ; -C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ; -C -1 ; WX 278 ; N iacute ; B 95 0 448 734 ; -C -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ; -C -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ; -C -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ; -C -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ; -C -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ; -C -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ; -C -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ; -C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ; -C -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ; -C -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ; -C -1 ; WX 722 ; N Racute ; B 88 0 773 929 ; -C -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ; -C -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ; -C -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ; -C -1 ; WX 556 ; N uring ; B 94 -15 600 756 ; -C -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ; -C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ; -C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ; -C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ; -C -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ; -C -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ; -C -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ; -C -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ; -C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ; -C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ; -C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ; -C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ; -C -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ; -C -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ; -C -1 ; WX 556 ; N nacute ; B 65 0 587 734 ; -C -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ; -C -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ; -C -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ; -C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ; -C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ; -C -1 ; WX 737 ; N registered ; B 54 -19 837 737 ; -C -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ; -C -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ; -C -1 ; WX 600 ; N summation ; B 15 -10 671 706 ; -C -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ; -C -1 ; WX 333 ; N racute ; B 77 0 475 734 ; -C -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ; -C -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ; -C -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ; -C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ; -C -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ; -C -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ; -C -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ; -C -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ; -C -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ; -C -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ; -C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; -C -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ; -C -1 ; WX 500 ; N zacute ; B 31 0 571 734 ; -C -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ; -C -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ; -C -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ; -C -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ; -C -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ; -C -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ; -C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ; -C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ; -C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ; -C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ; -C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ; -C -1 ; WX 278 ; N igrave ; B 95 0 310 734 ; -C -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ; -C -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ; -C -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ; -C -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ; -C -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ; -C -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ; -C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ; -C -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ; -C -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ; -C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ; -C -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ; -C -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ; -C -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ; -C -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ; -C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ; -C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ; -C -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ; -C -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ; -C -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ; -C -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ; -C -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ; -C -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ; -C -1 ; WX 400 ; N degree ; B 169 411 468 703 ; -C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ; -C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ; -C -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ; -C -1 ; WX 453 ; N radical ; B 79 -80 617 762 ; -C -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ; -C -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ; -C -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ; -C -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ; -C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ; -C -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ; -C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; -C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; -C -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ; -C -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ; -C -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ; -C -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ; -C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ; -C -1 ; WX 584 ; N minus ; B 85 216 606 289 ; -C -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ; -C -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ; -C -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ; -C -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ; -C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ; -C -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ; -C -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ; -C -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ; -C -1 ; WX 556 ; N eth ; B 81 -15 617 737 ; -C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ; -C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ; -C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ; -C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ; -C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2705 -KPX A C -30 -KPX A Cacute -30 -KPX A Ccaron -30 -KPX A Ccedilla -30 -KPX A G -30 -KPX A Gbreve -30 -KPX A Gcommaaccent -30 -KPX A O -30 -KPX A Oacute -30 -KPX A Ocircumflex -30 -KPX A Odieresis -30 -KPX A Ograve -30 -KPX A Ohungarumlaut -30 -KPX A Omacron -30 -KPX A Oslash -30 -KPX A Otilde -30 -KPX A Q -30 -KPX A T -120 -KPX A Tcaron -120 -KPX A Tcommaaccent -120 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -70 -KPX A W -50 -KPX A Y -100 -KPX A Yacute -100 -KPX A Ydieresis -100 -KPX A u -30 -KPX A uacute -30 -KPX A ucircumflex -30 -KPX A udieresis -30 -KPX A ugrave -30 -KPX A uhungarumlaut -30 -KPX A umacron -30 -KPX A uogonek -30 -KPX A uring -30 -KPX A v -40 -KPX A w -40 -KPX A y -40 -KPX A yacute -40 -KPX A ydieresis -40 -KPX Aacute C -30 -KPX Aacute Cacute -30 -KPX Aacute Ccaron -30 -KPX Aacute Ccedilla -30 -KPX Aacute G -30 -KPX Aacute Gbreve -30 -KPX Aacute Gcommaaccent -30 -KPX Aacute O -30 -KPX Aacute Oacute -30 -KPX Aacute Ocircumflex -30 -KPX Aacute Odieresis -30 -KPX Aacute Ograve -30 -KPX Aacute Ohungarumlaut -30 -KPX Aacute Omacron -30 -KPX Aacute Oslash -30 -KPX Aacute Otilde -30 -KPX Aacute Q -30 -KPX Aacute T -120 -KPX Aacute Tcaron -120 -KPX Aacute Tcommaaccent -120 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -70 -KPX Aacute W -50 -KPX Aacute Y -100 -KPX Aacute Yacute -100 -KPX Aacute Ydieresis -100 -KPX Aacute u -30 -KPX Aacute uacute -30 -KPX Aacute ucircumflex -30 -KPX Aacute udieresis -30 -KPX Aacute ugrave -30 -KPX Aacute uhungarumlaut -30 -KPX Aacute umacron -30 -KPX Aacute uogonek -30 -KPX Aacute uring -30 -KPX Aacute v -40 -KPX Aacute w -40 -KPX Aacute y -40 -KPX Aacute yacute -40 -KPX Aacute ydieresis -40 -KPX Abreve C -30 -KPX Abreve Cacute -30 -KPX Abreve Ccaron -30 -KPX Abreve Ccedilla -30 -KPX Abreve G -30 -KPX Abreve Gbreve -30 -KPX Abreve Gcommaaccent -30 -KPX Abreve O -30 -KPX Abreve Oacute -30 -KPX Abreve Ocircumflex -30 -KPX Abreve Odieresis -30 -KPX Abreve Ograve -30 -KPX Abreve Ohungarumlaut -30 -KPX Abreve Omacron -30 -KPX Abreve Oslash -30 -KPX Abreve Otilde -30 -KPX Abreve Q -30 -KPX Abreve T -120 -KPX Abreve Tcaron -120 -KPX Abreve Tcommaaccent -120 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -70 -KPX Abreve W -50 -KPX Abreve Y -100 -KPX Abreve Yacute -100 -KPX Abreve Ydieresis -100 -KPX Abreve u -30 -KPX Abreve uacute -30 -KPX Abreve ucircumflex -30 -KPX Abreve udieresis -30 -KPX Abreve ugrave -30 -KPX Abreve uhungarumlaut -30 -KPX Abreve umacron -30 -KPX Abreve uogonek -30 -KPX Abreve uring -30 -KPX Abreve v -40 -KPX Abreve w -40 -KPX Abreve y -40 -KPX Abreve yacute -40 -KPX Abreve ydieresis -40 -KPX Acircumflex C -30 -KPX Acircumflex Cacute -30 -KPX Acircumflex Ccaron -30 -KPX Acircumflex Ccedilla -30 -KPX Acircumflex G -30 -KPX Acircumflex Gbreve -30 -KPX Acircumflex Gcommaaccent -30 -KPX Acircumflex O -30 -KPX Acircumflex Oacute -30 -KPX Acircumflex Ocircumflex -30 -KPX Acircumflex Odieresis -30 -KPX Acircumflex Ograve -30 -KPX Acircumflex Ohungarumlaut -30 -KPX Acircumflex Omacron -30 -KPX Acircumflex Oslash -30 -KPX Acircumflex Otilde -30 -KPX Acircumflex Q -30 -KPX Acircumflex T -120 -KPX Acircumflex Tcaron -120 -KPX Acircumflex Tcommaaccent -120 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -70 -KPX Acircumflex W -50 -KPX Acircumflex Y -100 -KPX Acircumflex Yacute -100 -KPX Acircumflex Ydieresis -100 -KPX Acircumflex u -30 -KPX Acircumflex uacute -30 -KPX Acircumflex ucircumflex -30 -KPX Acircumflex udieresis -30 -KPX Acircumflex ugrave -30 -KPX Acircumflex uhungarumlaut -30 -KPX Acircumflex umacron -30 -KPX Acircumflex uogonek -30 -KPX Acircumflex uring -30 -KPX Acircumflex v -40 -KPX Acircumflex w -40 -KPX Acircumflex y -40 -KPX Acircumflex yacute -40 -KPX Acircumflex ydieresis -40 -KPX Adieresis C -30 -KPX Adieresis Cacute -30 -KPX Adieresis Ccaron -30 -KPX Adieresis Ccedilla -30 -KPX Adieresis G -30 -KPX Adieresis Gbreve -30 -KPX Adieresis Gcommaaccent -30 -KPX Adieresis O -30 -KPX Adieresis Oacute -30 -KPX Adieresis Ocircumflex -30 -KPX Adieresis Odieresis -30 -KPX Adieresis Ograve -30 -KPX Adieresis Ohungarumlaut -30 -KPX Adieresis Omacron -30 -KPX Adieresis Oslash -30 -KPX Adieresis Otilde -30 -KPX Adieresis Q -30 -KPX Adieresis T -120 -KPX Adieresis Tcaron -120 -KPX Adieresis Tcommaaccent -120 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -70 -KPX Adieresis W -50 -KPX Adieresis Y -100 -KPX Adieresis Yacute -100 -KPX Adieresis Ydieresis -100 -KPX Adieresis u -30 -KPX Adieresis uacute -30 -KPX Adieresis ucircumflex -30 -KPX Adieresis udieresis -30 -KPX Adieresis ugrave -30 -KPX Adieresis uhungarumlaut -30 -KPX Adieresis umacron -30 -KPX Adieresis uogonek -30 -KPX Adieresis uring -30 -KPX Adieresis v -40 -KPX Adieresis w -40 -KPX Adieresis y -40 -KPX Adieresis yacute -40 -KPX Adieresis ydieresis -40 -KPX Agrave C -30 -KPX Agrave Cacute -30 -KPX Agrave Ccaron -30 -KPX Agrave Ccedilla -30 -KPX Agrave G -30 -KPX Agrave Gbreve -30 -KPX Agrave Gcommaaccent -30 -KPX Agrave O -30 -KPX Agrave Oacute -30 -KPX Agrave Ocircumflex -30 -KPX Agrave Odieresis -30 -KPX Agrave Ograve -30 -KPX Agrave Ohungarumlaut -30 -KPX Agrave Omacron -30 -KPX Agrave Oslash -30 -KPX Agrave Otilde -30 -KPX Agrave Q -30 -KPX Agrave T -120 -KPX Agrave Tcaron -120 -KPX Agrave Tcommaaccent -120 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -70 -KPX Agrave W -50 -KPX Agrave Y -100 -KPX Agrave Yacute -100 -KPX Agrave Ydieresis -100 -KPX Agrave u -30 -KPX Agrave uacute -30 -KPX Agrave ucircumflex -30 -KPX Agrave udieresis -30 -KPX Agrave ugrave -30 -KPX Agrave uhungarumlaut -30 -KPX Agrave umacron -30 -KPX Agrave uogonek -30 -KPX Agrave uring -30 -KPX Agrave v -40 -KPX Agrave w -40 -KPX Agrave y -40 -KPX Agrave yacute -40 -KPX Agrave ydieresis -40 -KPX Amacron C -30 -KPX Amacron Cacute -30 -KPX Amacron Ccaron -30 -KPX Amacron Ccedilla -30 -KPX Amacron G -30 -KPX Amacron Gbreve -30 -KPX Amacron Gcommaaccent -30 -KPX Amacron O -30 -KPX Amacron Oacute -30 -KPX Amacron Ocircumflex -30 -KPX Amacron Odieresis -30 -KPX Amacron Ograve -30 -KPX Amacron Ohungarumlaut -30 -KPX Amacron Omacron -30 -KPX Amacron Oslash -30 -KPX Amacron Otilde -30 -KPX Amacron Q -30 -KPX Amacron T -120 -KPX Amacron Tcaron -120 -KPX Amacron Tcommaaccent -120 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -70 -KPX Amacron W -50 -KPX Amacron Y -100 -KPX Amacron Yacute -100 -KPX Amacron Ydieresis -100 -KPX Amacron u -30 -KPX Amacron uacute -30 -KPX Amacron ucircumflex -30 -KPX Amacron udieresis -30 -KPX Amacron ugrave -30 -KPX Amacron uhungarumlaut -30 -KPX Amacron umacron -30 -KPX Amacron uogonek -30 -KPX Amacron uring -30 -KPX Amacron v -40 -KPX Amacron w -40 -KPX Amacron y -40 -KPX Amacron yacute -40 -KPX Amacron ydieresis -40 -KPX Aogonek C -30 -KPX Aogonek Cacute -30 -KPX Aogonek Ccaron -30 -KPX Aogonek Ccedilla -30 -KPX Aogonek G -30 -KPX Aogonek Gbreve -30 -KPX Aogonek Gcommaaccent -30 -KPX Aogonek O -30 -KPX Aogonek Oacute -30 -KPX Aogonek Ocircumflex -30 -KPX Aogonek Odieresis -30 -KPX Aogonek Ograve -30 -KPX Aogonek Ohungarumlaut -30 -KPX Aogonek Omacron -30 -KPX Aogonek Oslash -30 -KPX Aogonek Otilde -30 -KPX Aogonek Q -30 -KPX Aogonek T -120 -KPX Aogonek Tcaron -120 -KPX Aogonek Tcommaaccent -120 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -70 -KPX Aogonek W -50 -KPX Aogonek Y -100 -KPX Aogonek Yacute -100 -KPX Aogonek Ydieresis -100 -KPX Aogonek u -30 -KPX Aogonek uacute -30 -KPX Aogonek ucircumflex -30 -KPX Aogonek udieresis -30 -KPX Aogonek ugrave -30 -KPX Aogonek uhungarumlaut -30 -KPX Aogonek umacron -30 -KPX Aogonek uogonek -30 -KPX Aogonek uring -30 -KPX Aogonek v -40 -KPX Aogonek w -40 -KPX Aogonek y -40 -KPX Aogonek yacute -40 -KPX Aogonek ydieresis -40 -KPX Aring C -30 -KPX Aring Cacute -30 -KPX Aring Ccaron -30 -KPX Aring Ccedilla -30 -KPX Aring G -30 -KPX Aring Gbreve -30 -KPX Aring Gcommaaccent -30 -KPX Aring O -30 -KPX Aring Oacute -30 -KPX Aring Ocircumflex -30 -KPX Aring Odieresis -30 -KPX Aring Ograve -30 -KPX Aring Ohungarumlaut -30 -KPX Aring Omacron -30 -KPX Aring Oslash -30 -KPX Aring Otilde -30 -KPX Aring Q -30 -KPX Aring T -120 -KPX Aring Tcaron -120 -KPX Aring Tcommaaccent -120 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -70 -KPX Aring W -50 -KPX Aring Y -100 -KPX Aring Yacute -100 -KPX Aring Ydieresis -100 -KPX Aring u -30 -KPX Aring uacute -30 -KPX Aring ucircumflex -30 -KPX Aring udieresis -30 -KPX Aring ugrave -30 -KPX Aring uhungarumlaut -30 -KPX Aring umacron -30 -KPX Aring uogonek -30 -KPX Aring uring -30 -KPX Aring v -40 -KPX Aring w -40 -KPX Aring y -40 -KPX Aring yacute -40 -KPX Aring ydieresis -40 -KPX Atilde C -30 -KPX Atilde Cacute -30 -KPX Atilde Ccaron -30 -KPX Atilde Ccedilla -30 -KPX Atilde G -30 -KPX Atilde Gbreve -30 -KPX Atilde Gcommaaccent -30 -KPX Atilde O -30 -KPX Atilde Oacute -30 -KPX Atilde Ocircumflex -30 -KPX Atilde Odieresis -30 -KPX Atilde Ograve -30 -KPX Atilde Ohungarumlaut -30 -KPX Atilde Omacron -30 -KPX Atilde Oslash -30 -KPX Atilde Otilde -30 -KPX Atilde Q -30 -KPX Atilde T -120 -KPX Atilde Tcaron -120 -KPX Atilde Tcommaaccent -120 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -70 -KPX Atilde W -50 -KPX Atilde Y -100 -KPX Atilde Yacute -100 -KPX Atilde Ydieresis -100 -KPX Atilde u -30 -KPX Atilde uacute -30 -KPX Atilde ucircumflex -30 -KPX Atilde udieresis -30 -KPX Atilde ugrave -30 -KPX Atilde uhungarumlaut -30 -KPX Atilde umacron -30 -KPX Atilde uogonek -30 -KPX Atilde uring -30 -KPX Atilde v -40 -KPX Atilde w -40 -KPX Atilde y -40 -KPX Atilde yacute -40 -KPX Atilde ydieresis -40 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX B comma -20 -KPX B period -20 -KPX C comma -30 -KPX C period -30 -KPX Cacute comma -30 -KPX Cacute period -30 -KPX Ccaron comma -30 -KPX Ccaron period -30 -KPX Ccedilla comma -30 -KPX Ccedilla period -30 -KPX D A -40 -KPX D Aacute -40 -KPX D Abreve -40 -KPX D Acircumflex -40 -KPX D Adieresis -40 -KPX D Agrave -40 -KPX D Amacron -40 -KPX D Aogonek -40 -KPX D Aring -40 -KPX D Atilde -40 -KPX D V -70 -KPX D W -40 -KPX D Y -90 -KPX D Yacute -90 -KPX D Ydieresis -90 -KPX D comma -70 -KPX D period -70 -KPX Dcaron A -40 -KPX Dcaron Aacute -40 -KPX Dcaron Abreve -40 -KPX Dcaron Acircumflex -40 -KPX Dcaron Adieresis -40 -KPX Dcaron Agrave -40 -KPX Dcaron Amacron -40 -KPX Dcaron Aogonek -40 -KPX Dcaron Aring -40 -KPX Dcaron Atilde -40 -KPX Dcaron V -70 -KPX Dcaron W -40 -KPX Dcaron Y -90 -KPX Dcaron Yacute -90 -KPX Dcaron Ydieresis -90 -KPX Dcaron comma -70 -KPX Dcaron period -70 -KPX Dcroat A -40 -KPX Dcroat Aacute -40 -KPX Dcroat Abreve -40 -KPX Dcroat Acircumflex -40 -KPX Dcroat Adieresis -40 -KPX Dcroat Agrave -40 -KPX Dcroat Amacron -40 -KPX Dcroat Aogonek -40 -KPX Dcroat Aring -40 -KPX Dcroat Atilde -40 -KPX Dcroat V -70 -KPX Dcroat W -40 -KPX Dcroat Y -90 -KPX Dcroat Yacute -90 -KPX Dcroat Ydieresis -90 -KPX Dcroat comma -70 -KPX Dcroat period -70 -KPX F A -80 -KPX F Aacute -80 -KPX F Abreve -80 -KPX F Acircumflex -80 -KPX F Adieresis -80 -KPX F Agrave -80 -KPX F Amacron -80 -KPX F Aogonek -80 -KPX F Aring -80 -KPX F Atilde -80 -KPX F a -50 -KPX F aacute -50 -KPX F abreve -50 -KPX F acircumflex -50 -KPX F adieresis -50 -KPX F agrave -50 -KPX F amacron -50 -KPX F aogonek -50 -KPX F aring -50 -KPX F atilde -50 -KPX F comma -150 -KPX F e -30 -KPX F eacute -30 -KPX F ecaron -30 -KPX F ecircumflex -30 -KPX F edieresis -30 -KPX F edotaccent -30 -KPX F egrave -30 -KPX F emacron -30 -KPX F eogonek -30 -KPX F o -30 -KPX F oacute -30 -KPX F ocircumflex -30 -KPX F odieresis -30 -KPX F ograve -30 -KPX F ohungarumlaut -30 -KPX F omacron -30 -KPX F oslash -30 -KPX F otilde -30 -KPX F period -150 -KPX F r -45 -KPX F racute -45 -KPX F rcaron -45 -KPX F rcommaaccent -45 -KPX J A -20 -KPX J Aacute -20 -KPX J Abreve -20 -KPX J Acircumflex -20 -KPX J Adieresis -20 -KPX J Agrave -20 -KPX J Amacron -20 -KPX J Aogonek -20 -KPX J Aring -20 -KPX J Atilde -20 -KPX J a -20 -KPX J aacute -20 -KPX J abreve -20 -KPX J acircumflex -20 -KPX J adieresis -20 -KPX J agrave -20 -KPX J amacron -20 -KPX J aogonek -20 -KPX J aring -20 -KPX J atilde -20 -KPX J comma -30 -KPX J period -30 -KPX J u -20 -KPX J uacute -20 -KPX J ucircumflex -20 -KPX J udieresis -20 -KPX J ugrave -20 -KPX J uhungarumlaut -20 -KPX J umacron -20 -KPX J uogonek -20 -KPX J uring -20 -KPX K O -50 -KPX K Oacute -50 -KPX K Ocircumflex -50 -KPX K Odieresis -50 -KPX K Ograve -50 -KPX K Ohungarumlaut -50 -KPX K Omacron -50 -KPX K Oslash -50 -KPX K Otilde -50 -KPX K e -40 -KPX K eacute -40 -KPX K ecaron -40 -KPX K ecircumflex -40 -KPX K edieresis -40 -KPX K edotaccent -40 -KPX K egrave -40 -KPX K emacron -40 -KPX K eogonek -40 -KPX K o -40 -KPX K oacute -40 -KPX K ocircumflex -40 -KPX K odieresis -40 -KPX K ograve -40 -KPX K ohungarumlaut -40 -KPX K omacron -40 -KPX K oslash -40 -KPX K otilde -40 -KPX K u -30 -KPX K uacute -30 -KPX K ucircumflex -30 -KPX K udieresis -30 -KPX K ugrave -30 -KPX K uhungarumlaut -30 -KPX K umacron -30 -KPX K uogonek -30 -KPX K uring -30 -KPX K y -50 -KPX K yacute -50 -KPX K ydieresis -50 -KPX Kcommaaccent O -50 -KPX Kcommaaccent Oacute -50 -KPX Kcommaaccent Ocircumflex -50 -KPX Kcommaaccent Odieresis -50 -KPX Kcommaaccent Ograve -50 -KPX Kcommaaccent Ohungarumlaut -50 -KPX Kcommaaccent Omacron -50 -KPX Kcommaaccent Oslash -50 -KPX Kcommaaccent Otilde -50 -KPX Kcommaaccent e -40 -KPX Kcommaaccent eacute -40 -KPX Kcommaaccent ecaron -40 -KPX Kcommaaccent ecircumflex -40 -KPX Kcommaaccent edieresis -40 -KPX Kcommaaccent edotaccent -40 -KPX Kcommaaccent egrave -40 -KPX Kcommaaccent emacron -40 -KPX Kcommaaccent eogonek -40 -KPX Kcommaaccent o -40 -KPX Kcommaaccent oacute -40 -KPX Kcommaaccent ocircumflex -40 -KPX Kcommaaccent odieresis -40 -KPX Kcommaaccent ograve -40 -KPX Kcommaaccent ohungarumlaut -40 -KPX Kcommaaccent omacron -40 -KPX Kcommaaccent oslash -40 -KPX Kcommaaccent otilde -40 -KPX Kcommaaccent u -30 -KPX Kcommaaccent uacute -30 -KPX Kcommaaccent ucircumflex -30 -KPX Kcommaaccent udieresis -30 -KPX Kcommaaccent ugrave -30 -KPX Kcommaaccent uhungarumlaut -30 -KPX Kcommaaccent umacron -30 -KPX Kcommaaccent uogonek -30 -KPX Kcommaaccent uring -30 -KPX Kcommaaccent y -50 -KPX Kcommaaccent yacute -50 -KPX Kcommaaccent ydieresis -50 -KPX L T -110 -KPX L Tcaron -110 -KPX L Tcommaaccent -110 -KPX L V -110 -KPX L W -70 -KPX L Y -140 -KPX L Yacute -140 -KPX L Ydieresis -140 -KPX L quotedblright -140 -KPX L quoteright -160 -KPX L y -30 -KPX L yacute -30 -KPX L ydieresis -30 -KPX Lacute T -110 -KPX Lacute Tcaron -110 -KPX Lacute Tcommaaccent -110 -KPX Lacute V -110 -KPX Lacute W -70 -KPX Lacute Y -140 -KPX Lacute Yacute -140 -KPX Lacute Ydieresis -140 -KPX Lacute quotedblright -140 -KPX Lacute quoteright -160 -KPX Lacute y -30 -KPX Lacute yacute -30 -KPX Lacute ydieresis -30 -KPX Lcaron T -110 -KPX Lcaron Tcaron -110 -KPX Lcaron Tcommaaccent -110 -KPX Lcaron V -110 -KPX Lcaron W -70 -KPX Lcaron Y -140 -KPX Lcaron Yacute -140 -KPX Lcaron Ydieresis -140 -KPX Lcaron quotedblright -140 -KPX Lcaron quoteright -160 -KPX Lcaron y -30 -KPX Lcaron yacute -30 -KPX Lcaron ydieresis -30 -KPX Lcommaaccent T -110 -KPX Lcommaaccent Tcaron -110 -KPX Lcommaaccent Tcommaaccent -110 -KPX Lcommaaccent V -110 -KPX Lcommaaccent W -70 -KPX Lcommaaccent Y -140 -KPX Lcommaaccent Yacute -140 -KPX Lcommaaccent Ydieresis -140 -KPX Lcommaaccent quotedblright -140 -KPX Lcommaaccent quoteright -160 -KPX Lcommaaccent y -30 -KPX Lcommaaccent yacute -30 -KPX Lcommaaccent ydieresis -30 -KPX Lslash T -110 -KPX Lslash Tcaron -110 -KPX Lslash Tcommaaccent -110 -KPX Lslash V -110 -KPX Lslash W -70 -KPX Lslash Y -140 -KPX Lslash Yacute -140 -KPX Lslash Ydieresis -140 -KPX Lslash quotedblright -140 -KPX Lslash quoteright -160 -KPX Lslash y -30 -KPX Lslash yacute -30 -KPX Lslash ydieresis -30 -KPX O A -20 -KPX O Aacute -20 -KPX O Abreve -20 -KPX O Acircumflex -20 -KPX O Adieresis -20 -KPX O Agrave -20 -KPX O Amacron -20 -KPX O Aogonek -20 -KPX O Aring -20 -KPX O Atilde -20 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -30 -KPX O X -60 -KPX O Y -70 -KPX O Yacute -70 -KPX O Ydieresis -70 -KPX O comma -40 -KPX O period -40 -KPX Oacute A -20 -KPX Oacute Aacute -20 -KPX Oacute Abreve -20 -KPX Oacute Acircumflex -20 -KPX Oacute Adieresis -20 -KPX Oacute Agrave -20 -KPX Oacute Amacron -20 -KPX Oacute Aogonek -20 -KPX Oacute Aring -20 -KPX Oacute Atilde -20 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -30 -KPX Oacute X -60 -KPX Oacute Y -70 -KPX Oacute Yacute -70 -KPX Oacute Ydieresis -70 -KPX Oacute comma -40 -KPX Oacute period -40 -KPX Ocircumflex A -20 -KPX Ocircumflex Aacute -20 -KPX Ocircumflex Abreve -20 -KPX Ocircumflex Acircumflex -20 -KPX Ocircumflex Adieresis -20 -KPX Ocircumflex Agrave -20 -KPX Ocircumflex Amacron -20 -KPX Ocircumflex Aogonek -20 -KPX Ocircumflex Aring -20 -KPX Ocircumflex Atilde -20 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -30 -KPX Ocircumflex X -60 -KPX Ocircumflex Y -70 -KPX Ocircumflex Yacute -70 -KPX Ocircumflex Ydieresis -70 -KPX Ocircumflex comma -40 -KPX Ocircumflex period -40 -KPX Odieresis A -20 -KPX Odieresis Aacute -20 -KPX Odieresis Abreve -20 -KPX Odieresis Acircumflex -20 -KPX Odieresis Adieresis -20 -KPX Odieresis Agrave -20 -KPX Odieresis Amacron -20 -KPX Odieresis Aogonek -20 -KPX Odieresis Aring -20 -KPX Odieresis Atilde -20 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -30 -KPX Odieresis X -60 -KPX Odieresis Y -70 -KPX Odieresis Yacute -70 -KPX Odieresis Ydieresis -70 -KPX Odieresis comma -40 -KPX Odieresis period -40 -KPX Ograve A -20 -KPX Ograve Aacute -20 -KPX Ograve Abreve -20 -KPX Ograve Acircumflex -20 -KPX Ograve Adieresis -20 -KPX Ograve Agrave -20 -KPX Ograve Amacron -20 -KPX Ograve Aogonek -20 -KPX Ograve Aring -20 -KPX Ograve Atilde -20 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -30 -KPX Ograve X -60 -KPX Ograve Y -70 -KPX Ograve Yacute -70 -KPX Ograve Ydieresis -70 -KPX Ograve comma -40 -KPX Ograve period -40 -KPX Ohungarumlaut A -20 -KPX Ohungarumlaut Aacute -20 -KPX Ohungarumlaut Abreve -20 -KPX Ohungarumlaut Acircumflex -20 -KPX Ohungarumlaut Adieresis -20 -KPX Ohungarumlaut Agrave -20 -KPX Ohungarumlaut Amacron -20 -KPX Ohungarumlaut Aogonek -20 -KPX Ohungarumlaut Aring -20 -KPX Ohungarumlaut Atilde -20 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -30 -KPX Ohungarumlaut X -60 -KPX Ohungarumlaut Y -70 -KPX Ohungarumlaut Yacute -70 -KPX Ohungarumlaut Ydieresis -70 -KPX Ohungarumlaut comma -40 -KPX Ohungarumlaut period -40 -KPX Omacron A -20 -KPX Omacron Aacute -20 -KPX Omacron Abreve -20 -KPX Omacron Acircumflex -20 -KPX Omacron Adieresis -20 -KPX Omacron Agrave -20 -KPX Omacron Amacron -20 -KPX Omacron Aogonek -20 -KPX Omacron Aring -20 -KPX Omacron Atilde -20 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -30 -KPX Omacron X -60 -KPX Omacron Y -70 -KPX Omacron Yacute -70 -KPX Omacron Ydieresis -70 -KPX Omacron comma -40 -KPX Omacron period -40 -KPX Oslash A -20 -KPX Oslash Aacute -20 -KPX Oslash Abreve -20 -KPX Oslash Acircumflex -20 -KPX Oslash Adieresis -20 -KPX Oslash Agrave -20 -KPX Oslash Amacron -20 -KPX Oslash Aogonek -20 -KPX Oslash Aring -20 -KPX Oslash Atilde -20 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -30 -KPX Oslash X -60 -KPX Oslash Y -70 -KPX Oslash Yacute -70 -KPX Oslash Ydieresis -70 -KPX Oslash comma -40 -KPX Oslash period -40 -KPX Otilde A -20 -KPX Otilde Aacute -20 -KPX Otilde Abreve -20 -KPX Otilde Acircumflex -20 -KPX Otilde Adieresis -20 -KPX Otilde Agrave -20 -KPX Otilde Amacron -20 -KPX Otilde Aogonek -20 -KPX Otilde Aring -20 -KPX Otilde Atilde -20 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -30 -KPX Otilde X -60 -KPX Otilde Y -70 -KPX Otilde Yacute -70 -KPX Otilde Ydieresis -70 -KPX Otilde comma -40 -KPX Otilde period -40 -KPX P A -120 -KPX P Aacute -120 -KPX P Abreve -120 -KPX P Acircumflex -120 -KPX P Adieresis -120 -KPX P Agrave -120 -KPX P Amacron -120 -KPX P Aogonek -120 -KPX P Aring -120 -KPX P Atilde -120 -KPX P a -40 -KPX P aacute -40 -KPX P abreve -40 -KPX P acircumflex -40 -KPX P adieresis -40 -KPX P agrave -40 -KPX P amacron -40 -KPX P aogonek -40 -KPX P aring -40 -KPX P atilde -40 -KPX P comma -180 -KPX P e -50 -KPX P eacute -50 -KPX P ecaron -50 -KPX P ecircumflex -50 -KPX P edieresis -50 -KPX P edotaccent -50 -KPX P egrave -50 -KPX P emacron -50 -KPX P eogonek -50 -KPX P o -50 -KPX P oacute -50 -KPX P ocircumflex -50 -KPX P odieresis -50 -KPX P ograve -50 -KPX P ohungarumlaut -50 -KPX P omacron -50 -KPX P oslash -50 -KPX P otilde -50 -KPX P period -180 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX R O -20 -KPX R Oacute -20 -KPX R Ocircumflex -20 -KPX R Odieresis -20 -KPX R Ograve -20 -KPX R Ohungarumlaut -20 -KPX R Omacron -20 -KPX R Oslash -20 -KPX R Otilde -20 -KPX R T -30 -KPX R Tcaron -30 -KPX R Tcommaaccent -30 -KPX R U -40 -KPX R Uacute -40 -KPX R Ucircumflex -40 -KPX R Udieresis -40 -KPX R Ugrave -40 -KPX R Uhungarumlaut -40 -KPX R Umacron -40 -KPX R Uogonek -40 -KPX R Uring -40 -KPX R V -50 -KPX R W -30 -KPX R Y -50 -KPX R Yacute -50 -KPX R Ydieresis -50 -KPX Racute O -20 -KPX Racute Oacute -20 -KPX Racute Ocircumflex -20 -KPX Racute Odieresis -20 -KPX Racute Ograve -20 -KPX Racute Ohungarumlaut -20 -KPX Racute Omacron -20 -KPX Racute Oslash -20 -KPX Racute Otilde -20 -KPX Racute T -30 -KPX Racute Tcaron -30 -KPX Racute Tcommaaccent -30 -KPX Racute U -40 -KPX Racute Uacute -40 -KPX Racute Ucircumflex -40 -KPX Racute Udieresis -40 -KPX Racute Ugrave -40 -KPX Racute Uhungarumlaut -40 -KPX Racute Umacron -40 -KPX Racute Uogonek -40 -KPX Racute Uring -40 -KPX Racute V -50 -KPX Racute W -30 -KPX Racute Y -50 -KPX Racute Yacute -50 -KPX Racute Ydieresis -50 -KPX Rcaron O -20 -KPX Rcaron Oacute -20 -KPX Rcaron Ocircumflex -20 -KPX Rcaron Odieresis -20 -KPX Rcaron Ograve -20 -KPX Rcaron Ohungarumlaut -20 -KPX Rcaron Omacron -20 -KPX Rcaron Oslash -20 -KPX Rcaron Otilde -20 -KPX Rcaron T -30 -KPX Rcaron Tcaron -30 -KPX Rcaron Tcommaaccent -30 -KPX Rcaron U -40 -KPX Rcaron Uacute -40 -KPX Rcaron Ucircumflex -40 -KPX Rcaron Udieresis -40 -KPX Rcaron Ugrave -40 -KPX Rcaron Uhungarumlaut -40 -KPX Rcaron Umacron -40 -KPX Rcaron Uogonek -40 -KPX Rcaron Uring -40 -KPX Rcaron V -50 -KPX Rcaron W -30 -KPX Rcaron Y -50 -KPX Rcaron Yacute -50 -KPX Rcaron Ydieresis -50 -KPX Rcommaaccent O -20 -KPX Rcommaaccent Oacute -20 -KPX Rcommaaccent Ocircumflex -20 -KPX Rcommaaccent Odieresis -20 -KPX Rcommaaccent Ograve -20 -KPX Rcommaaccent Ohungarumlaut -20 -KPX Rcommaaccent Omacron -20 -KPX Rcommaaccent Oslash -20 -KPX Rcommaaccent Otilde -20 -KPX Rcommaaccent T -30 -KPX Rcommaaccent Tcaron -30 -KPX Rcommaaccent Tcommaaccent -30 -KPX Rcommaaccent U -40 -KPX Rcommaaccent Uacute -40 -KPX Rcommaaccent Ucircumflex -40 -KPX Rcommaaccent Udieresis -40 -KPX Rcommaaccent Ugrave -40 -KPX Rcommaaccent Uhungarumlaut -40 -KPX Rcommaaccent Umacron -40 -KPX Rcommaaccent Uogonek -40 -KPX Rcommaaccent Uring -40 -KPX Rcommaaccent V -50 -KPX Rcommaaccent W -30 -KPX Rcommaaccent Y -50 -KPX Rcommaaccent Yacute -50 -KPX Rcommaaccent Ydieresis -50 -KPX S comma -20 -KPX S period -20 -KPX Sacute comma -20 -KPX Sacute period -20 -KPX Scaron comma -20 -KPX Scaron period -20 -KPX Scedilla comma -20 -KPX Scedilla period -20 -KPX Scommaaccent comma -20 -KPX Scommaaccent period -20 -KPX T A -120 -KPX T Aacute -120 -KPX T Abreve -120 -KPX T Acircumflex -120 -KPX T Adieresis -120 -KPX T Agrave -120 -KPX T Amacron -120 -KPX T Aogonek -120 -KPX T Aring -120 -KPX T Atilde -120 -KPX T O -40 -KPX T Oacute -40 -KPX T Ocircumflex -40 -KPX T Odieresis -40 -KPX T Ograve -40 -KPX T Ohungarumlaut -40 -KPX T Omacron -40 -KPX T Oslash -40 -KPX T Otilde -40 -KPX T a -120 -KPX T aacute -120 -KPX T abreve -60 -KPX T acircumflex -120 -KPX T adieresis -120 -KPX T agrave -120 -KPX T amacron -60 -KPX T aogonek -120 -KPX T aring -120 -KPX T atilde -60 -KPX T colon -20 -KPX T comma -120 -KPX T e -120 -KPX T eacute -120 -KPX T ecaron -120 -KPX T ecircumflex -120 -KPX T edieresis -120 -KPX T edotaccent -120 -KPX T egrave -60 -KPX T emacron -60 -KPX T eogonek -120 -KPX T hyphen -140 -KPX T o -120 -KPX T oacute -120 -KPX T ocircumflex -120 -KPX T odieresis -120 -KPX T ograve -120 -KPX T ohungarumlaut -120 -KPX T omacron -60 -KPX T oslash -120 -KPX T otilde -60 -KPX T period -120 -KPX T r -120 -KPX T racute -120 -KPX T rcaron -120 -KPX T rcommaaccent -120 -KPX T semicolon -20 -KPX T u -120 -KPX T uacute -120 -KPX T ucircumflex -120 -KPX T udieresis -120 -KPX T ugrave -120 -KPX T uhungarumlaut -120 -KPX T umacron -60 -KPX T uogonek -120 -KPX T uring -120 -KPX T w -120 -KPX T y -120 -KPX T yacute -120 -KPX T ydieresis -60 -KPX Tcaron A -120 -KPX Tcaron Aacute -120 -KPX Tcaron Abreve -120 -KPX Tcaron Acircumflex -120 -KPX Tcaron Adieresis -120 -KPX Tcaron Agrave -120 -KPX Tcaron Amacron -120 -KPX Tcaron Aogonek -120 -KPX Tcaron Aring -120 -KPX Tcaron Atilde -120 -KPX Tcaron O -40 -KPX Tcaron Oacute -40 -KPX Tcaron Ocircumflex -40 -KPX Tcaron Odieresis -40 -KPX Tcaron Ograve -40 -KPX Tcaron Ohungarumlaut -40 -KPX Tcaron Omacron -40 -KPX Tcaron Oslash -40 -KPX Tcaron Otilde -40 -KPX Tcaron a -120 -KPX Tcaron aacute -120 -KPX Tcaron abreve -60 -KPX Tcaron acircumflex -120 -KPX Tcaron adieresis -120 -KPX Tcaron agrave -120 -KPX Tcaron amacron -60 -KPX Tcaron aogonek -120 -KPX Tcaron aring -120 -KPX Tcaron atilde -60 -KPX Tcaron colon -20 -KPX Tcaron comma -120 -KPX Tcaron e -120 -KPX Tcaron eacute -120 -KPX Tcaron ecaron -120 -KPX Tcaron ecircumflex -120 -KPX Tcaron edieresis -120 -KPX Tcaron edotaccent -120 -KPX Tcaron egrave -60 -KPX Tcaron emacron -60 -KPX Tcaron eogonek -120 -KPX Tcaron hyphen -140 -KPX Tcaron o -120 -KPX Tcaron oacute -120 -KPX Tcaron ocircumflex -120 -KPX Tcaron odieresis -120 -KPX Tcaron ograve -120 -KPX Tcaron ohungarumlaut -120 -KPX Tcaron omacron -60 -KPX Tcaron oslash -120 -KPX Tcaron otilde -60 -KPX Tcaron period -120 -KPX Tcaron r -120 -KPX Tcaron racute -120 -KPX Tcaron rcaron -120 -KPX Tcaron rcommaaccent -120 -KPX Tcaron semicolon -20 -KPX Tcaron u -120 -KPX Tcaron uacute -120 -KPX Tcaron ucircumflex -120 -KPX Tcaron udieresis -120 -KPX Tcaron ugrave -120 -KPX Tcaron uhungarumlaut -120 -KPX Tcaron umacron -60 -KPX Tcaron uogonek -120 -KPX Tcaron uring -120 -KPX Tcaron w -120 -KPX Tcaron y -120 -KPX Tcaron yacute -120 -KPX Tcaron ydieresis -60 -KPX Tcommaaccent A -120 -KPX Tcommaaccent Aacute -120 -KPX Tcommaaccent Abreve -120 -KPX Tcommaaccent Acircumflex -120 -KPX Tcommaaccent Adieresis -120 -KPX Tcommaaccent Agrave -120 -KPX Tcommaaccent Amacron -120 -KPX Tcommaaccent Aogonek -120 -KPX Tcommaaccent Aring -120 -KPX Tcommaaccent Atilde -120 -KPX Tcommaaccent O -40 -KPX Tcommaaccent Oacute -40 -KPX Tcommaaccent Ocircumflex -40 -KPX Tcommaaccent Odieresis -40 -KPX Tcommaaccent Ograve -40 -KPX Tcommaaccent Ohungarumlaut -40 -KPX Tcommaaccent Omacron -40 -KPX Tcommaaccent Oslash -40 -KPX Tcommaaccent Otilde -40 -KPX Tcommaaccent a -120 -KPX Tcommaaccent aacute -120 -KPX Tcommaaccent abreve -60 -KPX Tcommaaccent acircumflex -120 -KPX Tcommaaccent adieresis -120 -KPX Tcommaaccent agrave -120 -KPX Tcommaaccent amacron -60 -KPX Tcommaaccent aogonek -120 -KPX Tcommaaccent aring -120 -KPX Tcommaaccent atilde -60 -KPX Tcommaaccent colon -20 -KPX Tcommaaccent comma -120 -KPX Tcommaaccent e -120 -KPX Tcommaaccent eacute -120 -KPX Tcommaaccent ecaron -120 -KPX Tcommaaccent ecircumflex -120 -KPX Tcommaaccent edieresis -120 -KPX Tcommaaccent edotaccent -120 -KPX Tcommaaccent egrave -60 -KPX Tcommaaccent emacron -60 -KPX Tcommaaccent eogonek -120 -KPX Tcommaaccent hyphen -140 -KPX Tcommaaccent o -120 -KPX Tcommaaccent oacute -120 -KPX Tcommaaccent ocircumflex -120 -KPX Tcommaaccent odieresis -120 -KPX Tcommaaccent ograve -120 -KPX Tcommaaccent ohungarumlaut -120 -KPX Tcommaaccent omacron -60 -KPX Tcommaaccent oslash -120 -KPX Tcommaaccent otilde -60 -KPX Tcommaaccent period -120 -KPX Tcommaaccent r -120 -KPX Tcommaaccent racute -120 -KPX Tcommaaccent rcaron -120 -KPX Tcommaaccent rcommaaccent -120 -KPX Tcommaaccent semicolon -20 -KPX Tcommaaccent u -120 -KPX Tcommaaccent uacute -120 -KPX Tcommaaccent ucircumflex -120 -KPX Tcommaaccent udieresis -120 -KPX Tcommaaccent ugrave -120 -KPX Tcommaaccent uhungarumlaut -120 -KPX Tcommaaccent umacron -60 -KPX Tcommaaccent uogonek -120 -KPX Tcommaaccent uring -120 -KPX Tcommaaccent w -120 -KPX Tcommaaccent y -120 -KPX Tcommaaccent yacute -120 -KPX Tcommaaccent ydieresis -60 -KPX U A -40 -KPX U Aacute -40 -KPX U Abreve -40 -KPX U Acircumflex -40 -KPX U Adieresis -40 -KPX U Agrave -40 -KPX U Amacron -40 -KPX U Aogonek -40 -KPX U Aring -40 -KPX U Atilde -40 -KPX U comma -40 -KPX U period -40 -KPX Uacute A -40 -KPX Uacute Aacute -40 -KPX Uacute Abreve -40 -KPX Uacute Acircumflex -40 -KPX Uacute Adieresis -40 -KPX Uacute Agrave -40 -KPX Uacute Amacron -40 -KPX Uacute Aogonek -40 -KPX Uacute Aring -40 -KPX Uacute Atilde -40 -KPX Uacute comma -40 -KPX Uacute period -40 -KPX Ucircumflex A -40 -KPX Ucircumflex Aacute -40 -KPX Ucircumflex Abreve -40 -KPX Ucircumflex Acircumflex -40 -KPX Ucircumflex Adieresis -40 -KPX Ucircumflex Agrave -40 -KPX Ucircumflex Amacron -40 -KPX Ucircumflex Aogonek -40 -KPX Ucircumflex Aring -40 -KPX Ucircumflex Atilde -40 -KPX Ucircumflex comma -40 -KPX Ucircumflex period -40 -KPX Udieresis A -40 -KPX Udieresis Aacute -40 -KPX Udieresis Abreve -40 -KPX Udieresis Acircumflex -40 -KPX Udieresis Adieresis -40 -KPX Udieresis Agrave -40 -KPX Udieresis Amacron -40 -KPX Udieresis Aogonek -40 -KPX Udieresis Aring -40 -KPX Udieresis Atilde -40 -KPX Udieresis comma -40 -KPX Udieresis period -40 -KPX Ugrave A -40 -KPX Ugrave Aacute -40 -KPX Ugrave Abreve -40 -KPX Ugrave Acircumflex -40 -KPX Ugrave Adieresis -40 -KPX Ugrave Agrave -40 -KPX Ugrave Amacron -40 -KPX Ugrave Aogonek -40 -KPX Ugrave Aring -40 -KPX Ugrave Atilde -40 -KPX Ugrave comma -40 -KPX Ugrave period -40 -KPX Uhungarumlaut A -40 -KPX Uhungarumlaut Aacute -40 -KPX Uhungarumlaut Abreve -40 -KPX Uhungarumlaut Acircumflex -40 -KPX Uhungarumlaut Adieresis -40 -KPX Uhungarumlaut Agrave -40 -KPX Uhungarumlaut Amacron -40 -KPX Uhungarumlaut Aogonek -40 -KPX Uhungarumlaut Aring -40 -KPX Uhungarumlaut Atilde -40 -KPX Uhungarumlaut comma -40 -KPX Uhungarumlaut period -40 -KPX Umacron A -40 -KPX Umacron Aacute -40 -KPX Umacron Abreve -40 -KPX Umacron Acircumflex -40 -KPX Umacron Adieresis -40 -KPX Umacron Agrave -40 -KPX Umacron Amacron -40 -KPX Umacron Aogonek -40 -KPX Umacron Aring -40 -KPX Umacron Atilde -40 -KPX Umacron comma -40 -KPX Umacron period -40 -KPX Uogonek A -40 -KPX Uogonek Aacute -40 -KPX Uogonek Abreve -40 -KPX Uogonek Acircumflex -40 -KPX Uogonek Adieresis -40 -KPX Uogonek Agrave -40 -KPX Uogonek Amacron -40 -KPX Uogonek Aogonek -40 -KPX Uogonek Aring -40 -KPX Uogonek Atilde -40 -KPX Uogonek comma -40 -KPX Uogonek period -40 -KPX Uring A -40 -KPX Uring Aacute -40 -KPX Uring Abreve -40 -KPX Uring Acircumflex -40 -KPX Uring Adieresis -40 -KPX Uring Agrave -40 -KPX Uring Amacron -40 -KPX Uring Aogonek -40 -KPX Uring Aring -40 -KPX Uring Atilde -40 -KPX Uring comma -40 -KPX Uring period -40 -KPX V A -80 -KPX V Aacute -80 -KPX V Abreve -80 -KPX V Acircumflex -80 -KPX V Adieresis -80 -KPX V Agrave -80 -KPX V Amacron -80 -KPX V Aogonek -80 -KPX V Aring -80 -KPX V Atilde -80 -KPX V G -40 -KPX V Gbreve -40 -KPX V Gcommaaccent -40 -KPX V O -40 -KPX V Oacute -40 -KPX V Ocircumflex -40 -KPX V Odieresis -40 -KPX V Ograve -40 -KPX V Ohungarumlaut -40 -KPX V Omacron -40 -KPX V Oslash -40 -KPX V Otilde -40 -KPX V a -70 -KPX V aacute -70 -KPX V abreve -70 -KPX V acircumflex -70 -KPX V adieresis -70 -KPX V agrave -70 -KPX V amacron -70 -KPX V aogonek -70 -KPX V aring -70 -KPX V atilde -70 -KPX V colon -40 -KPX V comma -125 -KPX V e -80 -KPX V eacute -80 -KPX V ecaron -80 -KPX V ecircumflex -80 -KPX V edieresis -80 -KPX V edotaccent -80 -KPX V egrave -80 -KPX V emacron -80 -KPX V eogonek -80 -KPX V hyphen -80 -KPX V o -80 -KPX V oacute -80 -KPX V ocircumflex -80 -KPX V odieresis -80 -KPX V ograve -80 -KPX V ohungarumlaut -80 -KPX V omacron -80 -KPX V oslash -80 -KPX V otilde -80 -KPX V period -125 -KPX V semicolon -40 -KPX V u -70 -KPX V uacute -70 -KPX V ucircumflex -70 -KPX V udieresis -70 -KPX V ugrave -70 -KPX V uhungarumlaut -70 -KPX V umacron -70 -KPX V uogonek -70 -KPX V uring -70 -KPX W A -50 -KPX W Aacute -50 -KPX W Abreve -50 -KPX W Acircumflex -50 -KPX W Adieresis -50 -KPX W Agrave -50 -KPX W Amacron -50 -KPX W Aogonek -50 -KPX W Aring -50 -KPX W Atilde -50 -KPX W O -20 -KPX W Oacute -20 -KPX W Ocircumflex -20 -KPX W Odieresis -20 -KPX W Ograve -20 -KPX W Ohungarumlaut -20 -KPX W Omacron -20 -KPX W Oslash -20 -KPX W Otilde -20 -KPX W a -40 -KPX W aacute -40 -KPX W abreve -40 -KPX W acircumflex -40 -KPX W adieresis -40 -KPX W agrave -40 -KPX W amacron -40 -KPX W aogonek -40 -KPX W aring -40 -KPX W atilde -40 -KPX W comma -80 -KPX W e -30 -KPX W eacute -30 -KPX W ecaron -30 -KPX W ecircumflex -30 -KPX W edieresis -30 -KPX W edotaccent -30 -KPX W egrave -30 -KPX W emacron -30 -KPX W eogonek -30 -KPX W hyphen -40 -KPX W o -30 -KPX W oacute -30 -KPX W ocircumflex -30 -KPX W odieresis -30 -KPX W ograve -30 -KPX W ohungarumlaut -30 -KPX W omacron -30 -KPX W oslash -30 -KPX W otilde -30 -KPX W period -80 -KPX W u -30 -KPX W uacute -30 -KPX W ucircumflex -30 -KPX W udieresis -30 -KPX W ugrave -30 -KPX W uhungarumlaut -30 -KPX W umacron -30 -KPX W uogonek -30 -KPX W uring -30 -KPX W y -20 -KPX W yacute -20 -KPX W ydieresis -20 -KPX Y A -110 -KPX Y Aacute -110 -KPX Y Abreve -110 -KPX Y Acircumflex -110 -KPX Y Adieresis -110 -KPX Y Agrave -110 -KPX Y Amacron -110 -KPX Y Aogonek -110 -KPX Y Aring -110 -KPX Y Atilde -110 -KPX Y O -85 -KPX Y Oacute -85 -KPX Y Ocircumflex -85 -KPX Y Odieresis -85 -KPX Y Ograve -85 -KPX Y Ohungarumlaut -85 -KPX Y Omacron -85 -KPX Y Oslash -85 -KPX Y Otilde -85 -KPX Y a -140 -KPX Y aacute -140 -KPX Y abreve -70 -KPX Y acircumflex -140 -KPX Y adieresis -140 -KPX Y agrave -140 -KPX Y amacron -70 -KPX Y aogonek -140 -KPX Y aring -140 -KPX Y atilde -140 -KPX Y colon -60 -KPX Y comma -140 -KPX Y e -140 -KPX Y eacute -140 -KPX Y ecaron -140 -KPX Y ecircumflex -140 -KPX Y edieresis -140 -KPX Y edotaccent -140 -KPX Y egrave -140 -KPX Y emacron -70 -KPX Y eogonek -140 -KPX Y hyphen -140 -KPX Y i -20 -KPX Y iacute -20 -KPX Y iogonek -20 -KPX Y o -140 -KPX Y oacute -140 -KPX Y ocircumflex -140 -KPX Y odieresis -140 -KPX Y ograve -140 -KPX Y ohungarumlaut -140 -KPX Y omacron -140 -KPX Y oslash -140 -KPX Y otilde -140 -KPX Y period -140 -KPX Y semicolon -60 -KPX Y u -110 -KPX Y uacute -110 -KPX Y ucircumflex -110 -KPX Y udieresis -110 -KPX Y ugrave -110 -KPX Y uhungarumlaut -110 -KPX Y umacron -110 -KPX Y uogonek -110 -KPX Y uring -110 -KPX Yacute A -110 -KPX Yacute Aacute -110 -KPX Yacute Abreve -110 -KPX Yacute Acircumflex -110 -KPX Yacute Adieresis -110 -KPX Yacute Agrave -110 -KPX Yacute Amacron -110 -KPX Yacute Aogonek -110 -KPX Yacute Aring -110 -KPX Yacute Atilde -110 -KPX Yacute O -85 -KPX Yacute Oacute -85 -KPX Yacute Ocircumflex -85 -KPX Yacute Odieresis -85 -KPX Yacute Ograve -85 -KPX Yacute Ohungarumlaut -85 -KPX Yacute Omacron -85 -KPX Yacute Oslash -85 -KPX Yacute Otilde -85 -KPX Yacute a -140 -KPX Yacute aacute -140 -KPX Yacute abreve -70 -KPX Yacute acircumflex -140 -KPX Yacute adieresis -140 -KPX Yacute agrave -140 -KPX Yacute amacron -70 -KPX Yacute aogonek -140 -KPX Yacute aring -140 -KPX Yacute atilde -70 -KPX Yacute colon -60 -KPX Yacute comma -140 -KPX Yacute e -140 -KPX Yacute eacute -140 -KPX Yacute ecaron -140 -KPX Yacute ecircumflex -140 -KPX Yacute edieresis -140 -KPX Yacute edotaccent -140 -KPX Yacute egrave -140 -KPX Yacute emacron -70 -KPX Yacute eogonek -140 -KPX Yacute hyphen -140 -KPX Yacute i -20 -KPX Yacute iacute -20 -KPX Yacute iogonek -20 -KPX Yacute o -140 -KPX Yacute oacute -140 -KPX Yacute ocircumflex -140 -KPX Yacute odieresis -140 -KPX Yacute ograve -140 -KPX Yacute ohungarumlaut -140 -KPX Yacute omacron -70 -KPX Yacute oslash -140 -KPX Yacute otilde -140 -KPX Yacute period -140 -KPX Yacute semicolon -60 -KPX Yacute u -110 -KPX Yacute uacute -110 -KPX Yacute ucircumflex -110 -KPX Yacute udieresis -110 -KPX Yacute ugrave -110 -KPX Yacute uhungarumlaut -110 -KPX Yacute umacron -110 -KPX Yacute uogonek -110 -KPX Yacute uring -110 -KPX Ydieresis A -110 -KPX Ydieresis Aacute -110 -KPX Ydieresis Abreve -110 -KPX Ydieresis Acircumflex -110 -KPX Ydieresis Adieresis -110 -KPX Ydieresis Agrave -110 -KPX Ydieresis Amacron -110 -KPX Ydieresis Aogonek -110 -KPX Ydieresis Aring -110 -KPX Ydieresis Atilde -110 -KPX Ydieresis O -85 -KPX Ydieresis Oacute -85 -KPX Ydieresis Ocircumflex -85 -KPX Ydieresis Odieresis -85 -KPX Ydieresis Ograve -85 -KPX Ydieresis Ohungarumlaut -85 -KPX Ydieresis Omacron -85 -KPX Ydieresis Oslash -85 -KPX Ydieresis Otilde -85 -KPX Ydieresis a -140 -KPX Ydieresis aacute -140 -KPX Ydieresis abreve -70 -KPX Ydieresis acircumflex -140 -KPX Ydieresis adieresis -140 -KPX Ydieresis agrave -140 -KPX Ydieresis amacron -70 -KPX Ydieresis aogonek -140 -KPX Ydieresis aring -140 -KPX Ydieresis atilde -70 -KPX Ydieresis colon -60 -KPX Ydieresis comma -140 -KPX Ydieresis e -140 -KPX Ydieresis eacute -140 -KPX Ydieresis ecaron -140 -KPX Ydieresis ecircumflex -140 -KPX Ydieresis edieresis -140 -KPX Ydieresis edotaccent -140 -KPX Ydieresis egrave -140 -KPX Ydieresis emacron -70 -KPX Ydieresis eogonek -140 -KPX Ydieresis hyphen -140 -KPX Ydieresis i -20 -KPX Ydieresis iacute -20 -KPX Ydieresis iogonek -20 -KPX Ydieresis o -140 -KPX Ydieresis oacute -140 -KPX Ydieresis ocircumflex -140 -KPX Ydieresis odieresis -140 -KPX Ydieresis ograve -140 -KPX Ydieresis ohungarumlaut -140 -KPX Ydieresis omacron -140 -KPX Ydieresis oslash -140 -KPX Ydieresis otilde -140 -KPX Ydieresis period -140 -KPX Ydieresis semicolon -60 -KPX Ydieresis u -110 -KPX Ydieresis uacute -110 -KPX Ydieresis ucircumflex -110 -KPX Ydieresis udieresis -110 -KPX Ydieresis ugrave -110 -KPX Ydieresis uhungarumlaut -110 -KPX Ydieresis umacron -110 -KPX Ydieresis uogonek -110 -KPX Ydieresis uring -110 -KPX a v -20 -KPX a w -20 -KPX a y -30 -KPX a yacute -30 -KPX a ydieresis -30 -KPX aacute v -20 -KPX aacute w -20 -KPX aacute y -30 -KPX aacute yacute -30 -KPX aacute ydieresis -30 -KPX abreve v -20 -KPX abreve w -20 -KPX abreve y -30 -KPX abreve yacute -30 -KPX abreve ydieresis -30 -KPX acircumflex v -20 -KPX acircumflex w -20 -KPX acircumflex y -30 -KPX acircumflex yacute -30 -KPX acircumflex ydieresis -30 -KPX adieresis v -20 -KPX adieresis w -20 -KPX adieresis y -30 -KPX adieresis yacute -30 -KPX adieresis ydieresis -30 -KPX agrave v -20 -KPX agrave w -20 -KPX agrave y -30 -KPX agrave yacute -30 -KPX agrave ydieresis -30 -KPX amacron v -20 -KPX amacron w -20 -KPX amacron y -30 -KPX amacron yacute -30 -KPX amacron ydieresis -30 -KPX aogonek v -20 -KPX aogonek w -20 -KPX aogonek y -30 -KPX aogonek yacute -30 -KPX aogonek ydieresis -30 -KPX aring v -20 -KPX aring w -20 -KPX aring y -30 -KPX aring yacute -30 -KPX aring ydieresis -30 -KPX atilde v -20 -KPX atilde w -20 -KPX atilde y -30 -KPX atilde yacute -30 -KPX atilde ydieresis -30 -KPX b b -10 -KPX b comma -40 -KPX b l -20 -KPX b lacute -20 -KPX b lcommaaccent -20 -KPX b lslash -20 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -20 -KPX b y -20 -KPX b yacute -20 -KPX b ydieresis -20 -KPX c comma -15 -KPX c k -20 -KPX c kcommaaccent -20 -KPX cacute comma -15 -KPX cacute k -20 -KPX cacute kcommaaccent -20 -KPX ccaron comma -15 -KPX ccaron k -20 -KPX ccaron kcommaaccent -20 -KPX ccedilla comma -15 -KPX ccedilla k -20 -KPX ccedilla kcommaaccent -20 -KPX colon space -50 -KPX comma quotedblright -100 -KPX comma quoteright -100 -KPX e comma -15 -KPX e period -15 -KPX e v -30 -KPX e w -20 -KPX e x -30 -KPX e y -20 -KPX e yacute -20 -KPX e ydieresis -20 -KPX eacute comma -15 -KPX eacute period -15 -KPX eacute v -30 -KPX eacute w -20 -KPX eacute x -30 -KPX eacute y -20 -KPX eacute yacute -20 -KPX eacute ydieresis -20 -KPX ecaron comma -15 -KPX ecaron period -15 -KPX ecaron v -30 -KPX ecaron w -20 -KPX ecaron x -30 -KPX ecaron y -20 -KPX ecaron yacute -20 -KPX ecaron ydieresis -20 -KPX ecircumflex comma -15 -KPX ecircumflex period -15 -KPX ecircumflex v -30 -KPX ecircumflex w -20 -KPX ecircumflex x -30 -KPX ecircumflex y -20 -KPX ecircumflex yacute -20 -KPX ecircumflex ydieresis -20 -KPX edieresis comma -15 -KPX edieresis period -15 -KPX edieresis v -30 -KPX edieresis w -20 -KPX edieresis x -30 -KPX edieresis y -20 -KPX edieresis yacute -20 -KPX edieresis ydieresis -20 -KPX edotaccent comma -15 -KPX edotaccent period -15 -KPX edotaccent v -30 -KPX edotaccent w -20 -KPX edotaccent x -30 -KPX edotaccent y -20 -KPX edotaccent yacute -20 -KPX edotaccent ydieresis -20 -KPX egrave comma -15 -KPX egrave period -15 -KPX egrave v -30 -KPX egrave w -20 -KPX egrave x -30 -KPX egrave y -20 -KPX egrave yacute -20 -KPX egrave ydieresis -20 -KPX emacron comma -15 -KPX emacron period -15 -KPX emacron v -30 -KPX emacron w -20 -KPX emacron x -30 -KPX emacron y -20 -KPX emacron yacute -20 -KPX emacron ydieresis -20 -KPX eogonek comma -15 -KPX eogonek period -15 -KPX eogonek v -30 -KPX eogonek w -20 -KPX eogonek x -30 -KPX eogonek y -20 -KPX eogonek yacute -20 -KPX eogonek ydieresis -20 -KPX f a -30 -KPX f aacute -30 -KPX f abreve -30 -KPX f acircumflex -30 -KPX f adieresis -30 -KPX f agrave -30 -KPX f amacron -30 -KPX f aogonek -30 -KPX f aring -30 -KPX f atilde -30 -KPX f comma -30 -KPX f dotlessi -28 -KPX f e -30 -KPX f eacute -30 -KPX f ecaron -30 -KPX f ecircumflex -30 -KPX f edieresis -30 -KPX f edotaccent -30 -KPX f egrave -30 -KPX f emacron -30 -KPX f eogonek -30 -KPX f o -30 -KPX f oacute -30 -KPX f ocircumflex -30 -KPX f odieresis -30 -KPX f ograve -30 -KPX f ohungarumlaut -30 -KPX f omacron -30 -KPX f oslash -30 -KPX f otilde -30 -KPX f period -30 -KPX f quotedblright 60 -KPX f quoteright 50 -KPX g r -10 -KPX g racute -10 -KPX g rcaron -10 -KPX g rcommaaccent -10 -KPX gbreve r -10 -KPX gbreve racute -10 -KPX gbreve rcaron -10 -KPX gbreve rcommaaccent -10 -KPX gcommaaccent r -10 -KPX gcommaaccent racute -10 -KPX gcommaaccent rcaron -10 -KPX gcommaaccent rcommaaccent -10 -KPX h y -30 -KPX h yacute -30 -KPX h ydieresis -30 -KPX k e -20 -KPX k eacute -20 -KPX k ecaron -20 -KPX k ecircumflex -20 -KPX k edieresis -20 -KPX k edotaccent -20 -KPX k egrave -20 -KPX k emacron -20 -KPX k eogonek -20 -KPX k o -20 -KPX k oacute -20 -KPX k ocircumflex -20 -KPX k odieresis -20 -KPX k ograve -20 -KPX k ohungarumlaut -20 -KPX k omacron -20 -KPX k oslash -20 -KPX k otilde -20 -KPX kcommaaccent e -20 -KPX kcommaaccent eacute -20 -KPX kcommaaccent ecaron -20 -KPX kcommaaccent ecircumflex -20 -KPX kcommaaccent edieresis -20 -KPX kcommaaccent edotaccent -20 -KPX kcommaaccent egrave -20 -KPX kcommaaccent emacron -20 -KPX kcommaaccent eogonek -20 -KPX kcommaaccent o -20 -KPX kcommaaccent oacute -20 -KPX kcommaaccent ocircumflex -20 -KPX kcommaaccent odieresis -20 -KPX kcommaaccent ograve -20 -KPX kcommaaccent ohungarumlaut -20 -KPX kcommaaccent omacron -20 -KPX kcommaaccent oslash -20 -KPX kcommaaccent otilde -20 -KPX m u -10 -KPX m uacute -10 -KPX m ucircumflex -10 -KPX m udieresis -10 -KPX m ugrave -10 -KPX m uhungarumlaut -10 -KPX m umacron -10 -KPX m uogonek -10 -KPX m uring -10 -KPX m y -15 -KPX m yacute -15 -KPX m ydieresis -15 -KPX n u -10 -KPX n uacute -10 -KPX n ucircumflex -10 -KPX n udieresis -10 -KPX n ugrave -10 -KPX n uhungarumlaut -10 -KPX n umacron -10 -KPX n uogonek -10 -KPX n uring -10 -KPX n v -20 -KPX n y -15 -KPX n yacute -15 -KPX n ydieresis -15 -KPX nacute u -10 -KPX nacute uacute -10 -KPX nacute ucircumflex -10 -KPX nacute udieresis -10 -KPX nacute ugrave -10 -KPX nacute uhungarumlaut -10 -KPX nacute umacron -10 -KPX nacute uogonek -10 -KPX nacute uring -10 -KPX nacute v -20 -KPX nacute y -15 -KPX nacute yacute -15 -KPX nacute ydieresis -15 -KPX ncaron u -10 -KPX ncaron uacute -10 -KPX ncaron ucircumflex -10 -KPX ncaron udieresis -10 -KPX ncaron ugrave -10 -KPX ncaron uhungarumlaut -10 -KPX ncaron umacron -10 -KPX ncaron uogonek -10 -KPX ncaron uring -10 -KPX ncaron v -20 -KPX ncaron y -15 -KPX ncaron yacute -15 -KPX ncaron ydieresis -15 -KPX ncommaaccent u -10 -KPX ncommaaccent uacute -10 -KPX ncommaaccent ucircumflex -10 -KPX ncommaaccent udieresis -10 -KPX ncommaaccent ugrave -10 -KPX ncommaaccent uhungarumlaut -10 -KPX ncommaaccent umacron -10 -KPX ncommaaccent uogonek -10 -KPX ncommaaccent uring -10 -KPX ncommaaccent v -20 -KPX ncommaaccent y -15 -KPX ncommaaccent yacute -15 -KPX ncommaaccent ydieresis -15 -KPX ntilde u -10 -KPX ntilde uacute -10 -KPX ntilde ucircumflex -10 -KPX ntilde udieresis -10 -KPX ntilde ugrave -10 -KPX ntilde uhungarumlaut -10 -KPX ntilde umacron -10 -KPX ntilde uogonek -10 -KPX ntilde uring -10 -KPX ntilde v -20 -KPX ntilde y -15 -KPX ntilde yacute -15 -KPX ntilde ydieresis -15 -KPX o comma -40 -KPX o period -40 -KPX o v -15 -KPX o w -15 -KPX o x -30 -KPX o y -30 -KPX o yacute -30 -KPX o ydieresis -30 -KPX oacute comma -40 -KPX oacute period -40 -KPX oacute v -15 -KPX oacute w -15 -KPX oacute x -30 -KPX oacute y -30 -KPX oacute yacute -30 -KPX oacute ydieresis -30 -KPX ocircumflex comma -40 -KPX ocircumflex period -40 -KPX ocircumflex v -15 -KPX ocircumflex w -15 -KPX ocircumflex x -30 -KPX ocircumflex y -30 -KPX ocircumflex yacute -30 -KPX ocircumflex ydieresis -30 -KPX odieresis comma -40 -KPX odieresis period -40 -KPX odieresis v -15 -KPX odieresis w -15 -KPX odieresis x -30 -KPX odieresis y -30 -KPX odieresis yacute -30 -KPX odieresis ydieresis -30 -KPX ograve comma -40 -KPX ograve period -40 -KPX ograve v -15 -KPX ograve w -15 -KPX ograve x -30 -KPX ograve y -30 -KPX ograve yacute -30 -KPX ograve ydieresis -30 -KPX ohungarumlaut comma -40 -KPX ohungarumlaut period -40 -KPX ohungarumlaut v -15 -KPX ohungarumlaut w -15 -KPX ohungarumlaut x -30 -KPX ohungarumlaut y -30 -KPX ohungarumlaut yacute -30 -KPX ohungarumlaut ydieresis -30 -KPX omacron comma -40 -KPX omacron period -40 -KPX omacron v -15 -KPX omacron w -15 -KPX omacron x -30 -KPX omacron y -30 -KPX omacron yacute -30 -KPX omacron ydieresis -30 -KPX oslash a -55 -KPX oslash aacute -55 -KPX oslash abreve -55 -KPX oslash acircumflex -55 -KPX oslash adieresis -55 -KPX oslash agrave -55 -KPX oslash amacron -55 -KPX oslash aogonek -55 -KPX oslash aring -55 -KPX oslash atilde -55 -KPX oslash b -55 -KPX oslash c -55 -KPX oslash cacute -55 -KPX oslash ccaron -55 -KPX oslash ccedilla -55 -KPX oslash comma -95 -KPX oslash d -55 -KPX oslash dcroat -55 -KPX oslash e -55 -KPX oslash eacute -55 -KPX oslash ecaron -55 -KPX oslash ecircumflex -55 -KPX oslash edieresis -55 -KPX oslash edotaccent -55 -KPX oslash egrave -55 -KPX oslash emacron -55 -KPX oslash eogonek -55 -KPX oslash f -55 -KPX oslash g -55 -KPX oslash gbreve -55 -KPX oslash gcommaaccent -55 -KPX oslash h -55 -KPX oslash i -55 -KPX oslash iacute -55 -KPX oslash icircumflex -55 -KPX oslash idieresis -55 -KPX oslash igrave -55 -KPX oslash imacron -55 -KPX oslash iogonek -55 -KPX oslash j -55 -KPX oslash k -55 -KPX oslash kcommaaccent -55 -KPX oslash l -55 -KPX oslash lacute -55 -KPX oslash lcommaaccent -55 -KPX oslash lslash -55 -KPX oslash m -55 -KPX oslash n -55 -KPX oslash nacute -55 -KPX oslash ncaron -55 -KPX oslash ncommaaccent -55 -KPX oslash ntilde -55 -KPX oslash o -55 -KPX oslash oacute -55 -KPX oslash ocircumflex -55 -KPX oslash odieresis -55 -KPX oslash ograve -55 -KPX oslash ohungarumlaut -55 -KPX oslash omacron -55 -KPX oslash oslash -55 -KPX oslash otilde -55 -KPX oslash p -55 -KPX oslash period -95 -KPX oslash q -55 -KPX oslash r -55 -KPX oslash racute -55 -KPX oslash rcaron -55 -KPX oslash rcommaaccent -55 -KPX oslash s -55 -KPX oslash sacute -55 -KPX oslash scaron -55 -KPX oslash scedilla -55 -KPX oslash scommaaccent -55 -KPX oslash t -55 -KPX oslash tcommaaccent -55 -KPX oslash u -55 -KPX oslash uacute -55 -KPX oslash ucircumflex -55 -KPX oslash udieresis -55 -KPX oslash ugrave -55 -KPX oslash uhungarumlaut -55 -KPX oslash umacron -55 -KPX oslash uogonek -55 -KPX oslash uring -55 -KPX oslash v -70 -KPX oslash w -70 -KPX oslash x -85 -KPX oslash y -70 -KPX oslash yacute -70 -KPX oslash ydieresis -70 -KPX oslash z -55 -KPX oslash zacute -55 -KPX oslash zcaron -55 -KPX oslash zdotaccent -55 -KPX otilde comma -40 -KPX otilde period -40 -KPX otilde v -15 -KPX otilde w -15 -KPX otilde x -30 -KPX otilde y -30 -KPX otilde yacute -30 -KPX otilde ydieresis -30 -KPX p comma -35 -KPX p period -35 -KPX p y -30 -KPX p yacute -30 -KPX p ydieresis -30 -KPX period quotedblright -100 -KPX period quoteright -100 -KPX period space -60 -KPX quotedblright space -40 -KPX quoteleft quoteleft -57 -KPX quoteright d -50 -KPX quoteright dcroat -50 -KPX quoteright quoteright -57 -KPX quoteright r -50 -KPX quoteright racute -50 -KPX quoteright rcaron -50 -KPX quoteright rcommaaccent -50 -KPX quoteright s -50 -KPX quoteright sacute -50 -KPX quoteright scaron -50 -KPX quoteright scedilla -50 -KPX quoteright scommaaccent -50 -KPX quoteright space -70 -KPX r a -10 -KPX r aacute -10 -KPX r abreve -10 -KPX r acircumflex -10 -KPX r adieresis -10 -KPX r agrave -10 -KPX r amacron -10 -KPX r aogonek -10 -KPX r aring -10 -KPX r atilde -10 -KPX r colon 30 -KPX r comma -50 -KPX r i 15 -KPX r iacute 15 -KPX r icircumflex 15 -KPX r idieresis 15 -KPX r igrave 15 -KPX r imacron 15 -KPX r iogonek 15 -KPX r k 15 -KPX r kcommaaccent 15 -KPX r l 15 -KPX r lacute 15 -KPX r lcommaaccent 15 -KPX r lslash 15 -KPX r m 25 -KPX r n 25 -KPX r nacute 25 -KPX r ncaron 25 -KPX r ncommaaccent 25 -KPX r ntilde 25 -KPX r p 30 -KPX r period -50 -KPX r semicolon 30 -KPX r t 40 -KPX r tcommaaccent 40 -KPX r u 15 -KPX r uacute 15 -KPX r ucircumflex 15 -KPX r udieresis 15 -KPX r ugrave 15 -KPX r uhungarumlaut 15 -KPX r umacron 15 -KPX r uogonek 15 -KPX r uring 15 -KPX r v 30 -KPX r y 30 -KPX r yacute 30 -KPX r ydieresis 30 -KPX racute a -10 -KPX racute aacute -10 -KPX racute abreve -10 -KPX racute acircumflex -10 -KPX racute adieresis -10 -KPX racute agrave -10 -KPX racute amacron -10 -KPX racute aogonek -10 -KPX racute aring -10 -KPX racute atilde -10 -KPX racute colon 30 -KPX racute comma -50 -KPX racute i 15 -KPX racute iacute 15 -KPX racute icircumflex 15 -KPX racute idieresis 15 -KPX racute igrave 15 -KPX racute imacron 15 -KPX racute iogonek 15 -KPX racute k 15 -KPX racute kcommaaccent 15 -KPX racute l 15 -KPX racute lacute 15 -KPX racute lcommaaccent 15 -KPX racute lslash 15 -KPX racute m 25 -KPX racute n 25 -KPX racute nacute 25 -KPX racute ncaron 25 -KPX racute ncommaaccent 25 -KPX racute ntilde 25 -KPX racute p 30 -KPX racute period -50 -KPX racute semicolon 30 -KPX racute t 40 -KPX racute tcommaaccent 40 -KPX racute u 15 -KPX racute uacute 15 -KPX racute ucircumflex 15 -KPX racute udieresis 15 -KPX racute ugrave 15 -KPX racute uhungarumlaut 15 -KPX racute umacron 15 -KPX racute uogonek 15 -KPX racute uring 15 -KPX racute v 30 -KPX racute y 30 -KPX racute yacute 30 -KPX racute ydieresis 30 -KPX rcaron a -10 -KPX rcaron aacute -10 -KPX rcaron abreve -10 -KPX rcaron acircumflex -10 -KPX rcaron adieresis -10 -KPX rcaron agrave -10 -KPX rcaron amacron -10 -KPX rcaron aogonek -10 -KPX rcaron aring -10 -KPX rcaron atilde -10 -KPX rcaron colon 30 -KPX rcaron comma -50 -KPX rcaron i 15 -KPX rcaron iacute 15 -KPX rcaron icircumflex 15 -KPX rcaron idieresis 15 -KPX rcaron igrave 15 -KPX rcaron imacron 15 -KPX rcaron iogonek 15 -KPX rcaron k 15 -KPX rcaron kcommaaccent 15 -KPX rcaron l 15 -KPX rcaron lacute 15 -KPX rcaron lcommaaccent 15 -KPX rcaron lslash 15 -KPX rcaron m 25 -KPX rcaron n 25 -KPX rcaron nacute 25 -KPX rcaron ncaron 25 -KPX rcaron ncommaaccent 25 -KPX rcaron ntilde 25 -KPX rcaron p 30 -KPX rcaron period -50 -KPX rcaron semicolon 30 -KPX rcaron t 40 -KPX rcaron tcommaaccent 40 -KPX rcaron u 15 -KPX rcaron uacute 15 -KPX rcaron ucircumflex 15 -KPX rcaron udieresis 15 -KPX rcaron ugrave 15 -KPX rcaron uhungarumlaut 15 -KPX rcaron umacron 15 -KPX rcaron uogonek 15 -KPX rcaron uring 15 -KPX rcaron v 30 -KPX rcaron y 30 -KPX rcaron yacute 30 -KPX rcaron ydieresis 30 -KPX rcommaaccent a -10 -KPX rcommaaccent aacute -10 -KPX rcommaaccent abreve -10 -KPX rcommaaccent acircumflex -10 -KPX rcommaaccent adieresis -10 -KPX rcommaaccent agrave -10 -KPX rcommaaccent amacron -10 -KPX rcommaaccent aogonek -10 -KPX rcommaaccent aring -10 -KPX rcommaaccent atilde -10 -KPX rcommaaccent colon 30 -KPX rcommaaccent comma -50 -KPX rcommaaccent i 15 -KPX rcommaaccent iacute 15 -KPX rcommaaccent icircumflex 15 -KPX rcommaaccent idieresis 15 -KPX rcommaaccent igrave 15 -KPX rcommaaccent imacron 15 -KPX rcommaaccent iogonek 15 -KPX rcommaaccent k 15 -KPX rcommaaccent kcommaaccent 15 -KPX rcommaaccent l 15 -KPX rcommaaccent lacute 15 -KPX rcommaaccent lcommaaccent 15 -KPX rcommaaccent lslash 15 -KPX rcommaaccent m 25 -KPX rcommaaccent n 25 -KPX rcommaaccent nacute 25 -KPX rcommaaccent ncaron 25 -KPX rcommaaccent ncommaaccent 25 -KPX rcommaaccent ntilde 25 -KPX rcommaaccent p 30 -KPX rcommaaccent period -50 -KPX rcommaaccent semicolon 30 -KPX rcommaaccent t 40 -KPX rcommaaccent tcommaaccent 40 -KPX rcommaaccent u 15 -KPX rcommaaccent uacute 15 -KPX rcommaaccent ucircumflex 15 -KPX rcommaaccent udieresis 15 -KPX rcommaaccent ugrave 15 -KPX rcommaaccent uhungarumlaut 15 -KPX rcommaaccent umacron 15 -KPX rcommaaccent uogonek 15 -KPX rcommaaccent uring 15 -KPX rcommaaccent v 30 -KPX rcommaaccent y 30 -KPX rcommaaccent yacute 30 -KPX rcommaaccent ydieresis 30 -KPX s comma -15 -KPX s period -15 -KPX s w -30 -KPX sacute comma -15 -KPX sacute period -15 -KPX sacute w -30 -KPX scaron comma -15 -KPX scaron period -15 -KPX scaron w -30 -KPX scedilla comma -15 -KPX scedilla period -15 -KPX scedilla w -30 -KPX scommaaccent comma -15 -KPX scommaaccent period -15 -KPX scommaaccent w -30 -KPX semicolon space -50 -KPX space T -50 -KPX space Tcaron -50 -KPX space Tcommaaccent -50 -KPX space V -50 -KPX space W -40 -KPX space Y -90 -KPX space Yacute -90 -KPX space Ydieresis -90 -KPX space quotedblleft -30 -KPX space quoteleft -60 -KPX v a -25 -KPX v aacute -25 -KPX v abreve -25 -KPX v acircumflex -25 -KPX v adieresis -25 -KPX v agrave -25 -KPX v amacron -25 -KPX v aogonek -25 -KPX v aring -25 -KPX v atilde -25 -KPX v comma -80 -KPX v e -25 -KPX v eacute -25 -KPX v ecaron -25 -KPX v ecircumflex -25 -KPX v edieresis -25 -KPX v edotaccent -25 -KPX v egrave -25 -KPX v emacron -25 -KPX v eogonek -25 -KPX v o -25 -KPX v oacute -25 -KPX v ocircumflex -25 -KPX v odieresis -25 -KPX v ograve -25 -KPX v ohungarumlaut -25 -KPX v omacron -25 -KPX v oslash -25 -KPX v otilde -25 -KPX v period -80 -KPX w a -15 -KPX w aacute -15 -KPX w abreve -15 -KPX w acircumflex -15 -KPX w adieresis -15 -KPX w agrave -15 -KPX w amacron -15 -KPX w aogonek -15 -KPX w aring -15 -KPX w atilde -15 -KPX w comma -60 -KPX w e -10 -KPX w eacute -10 -KPX w ecaron -10 -KPX w ecircumflex -10 -KPX w edieresis -10 -KPX w edotaccent -10 -KPX w egrave -10 -KPX w emacron -10 -KPX w eogonek -10 -KPX w o -10 -KPX w oacute -10 -KPX w ocircumflex -10 -KPX w odieresis -10 -KPX w ograve -10 -KPX w ohungarumlaut -10 -KPX w omacron -10 -KPX w oslash -10 -KPX w otilde -10 -KPX w period -60 -KPX x e -30 -KPX x eacute -30 -KPX x ecaron -30 -KPX x ecircumflex -30 -KPX x edieresis -30 -KPX x edotaccent -30 -KPX x egrave -30 -KPX x emacron -30 -KPX x eogonek -30 -KPX y a -20 -KPX y aacute -20 -KPX y abreve -20 -KPX y acircumflex -20 -KPX y adieresis -20 -KPX y agrave -20 -KPX y amacron -20 -KPX y aogonek -20 -KPX y aring -20 -KPX y atilde -20 -KPX y comma -100 -KPX y e -20 -KPX y eacute -20 -KPX y ecaron -20 -KPX y ecircumflex -20 -KPX y edieresis -20 -KPX y edotaccent -20 -KPX y egrave -20 -KPX y emacron -20 -KPX y eogonek -20 -KPX y o -20 -KPX y oacute -20 -KPX y ocircumflex -20 -KPX y odieresis -20 -KPX y ograve -20 -KPX y ohungarumlaut -20 -KPX y omacron -20 -KPX y oslash -20 -KPX y otilde -20 -KPX y period -100 -KPX yacute a -20 -KPX yacute aacute -20 -KPX yacute abreve -20 -KPX yacute acircumflex -20 -KPX yacute adieresis -20 -KPX yacute agrave -20 -KPX yacute amacron -20 -KPX yacute aogonek -20 -KPX yacute aring -20 -KPX yacute atilde -20 -KPX yacute comma -100 -KPX yacute e -20 -KPX yacute eacute -20 -KPX yacute ecaron -20 -KPX yacute ecircumflex -20 -KPX yacute edieresis -20 -KPX yacute edotaccent -20 -KPX yacute egrave -20 -KPX yacute emacron -20 -KPX yacute eogonek -20 -KPX yacute o -20 -KPX yacute oacute -20 -KPX yacute ocircumflex -20 -KPX yacute odieresis -20 -KPX yacute ograve -20 -KPX yacute ohungarumlaut -20 -KPX yacute omacron -20 -KPX yacute oslash -20 -KPX yacute otilde -20 -KPX yacute period -100 -KPX ydieresis a -20 -KPX ydieresis aacute -20 -KPX ydieresis abreve -20 -KPX ydieresis acircumflex -20 -KPX ydieresis adieresis -20 -KPX ydieresis agrave -20 -KPX ydieresis amacron -20 -KPX ydieresis aogonek -20 -KPX ydieresis aring -20 -KPX ydieresis atilde -20 -KPX ydieresis comma -100 -KPX ydieresis e -20 -KPX ydieresis eacute -20 -KPX ydieresis ecaron -20 -KPX ydieresis ecircumflex -20 -KPX ydieresis edieresis -20 -KPX ydieresis edotaccent -20 -KPX ydieresis egrave -20 -KPX ydieresis emacron -20 -KPX ydieresis eogonek -20 -KPX ydieresis o -20 -KPX ydieresis oacute -20 -KPX ydieresis ocircumflex -20 -KPX ydieresis odieresis -20 -KPX ydieresis ograve -20 -KPX ydieresis ohungarumlaut -20 -KPX ydieresis omacron -20 -KPX ydieresis oslash -20 -KPX ydieresis otilde -20 -KPX ydieresis period -100 -KPX z e -15 -KPX z eacute -15 -KPX z ecaron -15 -KPX z ecircumflex -15 -KPX z edieresis -15 -KPX z edotaccent -15 -KPX z egrave -15 -KPX z emacron -15 -KPX z eogonek -15 -KPX z o -15 -KPX z oacute -15 -KPX z ocircumflex -15 -KPX z odieresis -15 -KPX z ograve -15 -KPX z ohungarumlaut -15 -KPX z omacron -15 -KPX z oslash -15 -KPX z otilde -15 -KPX zacute e -15 -KPX zacute eacute -15 -KPX zacute ecaron -15 -KPX zacute ecircumflex -15 -KPX zacute edieresis -15 -KPX zacute edotaccent -15 -KPX zacute egrave -15 -KPX zacute emacron -15 -KPX zacute eogonek -15 -KPX zacute o -15 -KPX zacute oacute -15 -KPX zacute ocircumflex -15 -KPX zacute odieresis -15 -KPX zacute ograve -15 -KPX zacute ohungarumlaut -15 -KPX zacute omacron -15 -KPX zacute oslash -15 -KPX zacute otilde -15 -KPX zcaron e -15 -KPX zcaron eacute -15 -KPX zcaron ecaron -15 -KPX zcaron ecircumflex -15 -KPX zcaron edieresis -15 -KPX zcaron edotaccent -15 -KPX zcaron egrave -15 -KPX zcaron emacron -15 -KPX zcaron eogonek -15 -KPX zcaron o -15 -KPX zcaron oacute -15 -KPX zcaron ocircumflex -15 -KPX zcaron odieresis -15 -KPX zcaron ograve -15 -KPX zcaron ohungarumlaut -15 -KPX zcaron omacron -15 -KPX zcaron oslash -15 -KPX zcaron otilde -15 -KPX zdotaccent e -15 -KPX zdotaccent eacute -15 -KPX zdotaccent ecaron -15 -KPX zdotaccent ecircumflex -15 -KPX zdotaccent edieresis -15 -KPX zdotaccent edotaccent -15 -KPX zdotaccent egrave -15 -KPX zdotaccent emacron -15 -KPX zdotaccent eogonek -15 -KPX zdotaccent o -15 -KPX zdotaccent oacute -15 -KPX zdotaccent ocircumflex -15 -KPX zdotaccent odieresis -15 -KPX zdotaccent ograve -15 -KPX zdotaccent ohungarumlaut -15 -KPX zdotaccent omacron -15 -KPX zdotaccent oslash -15 -KPX zdotaccent otilde -15 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica.afm deleted file mode 100644 index 9492d8f..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Helvetica.afm +++ /dev/null @@ -1,3051 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:38:23 1997 -Comment UniqueID 43054 -Comment VMusage 37069 48094 -FontName Helvetica -FullName Helvetica -FamilyName Helvetica -Weight Medium -ItalicAngle 0 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -166 -225 1000 931 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 718 -XHeight 523 -Ascender 718 -Descender -207 -StdHW 76 -StdVW 88 -StartCharMetrics 315 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 278 ; N exclam ; B 90 0 187 718 ; -C 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ; -C 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ; -C 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ; -C 37 ; WX 889 ; N percent ; B 39 -19 850 703 ; -C 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ; -C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ; -C 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ; -C 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ; -C 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ; -C 43 ; WX 584 ; N plus ; B 39 0 545 505 ; -C 44 ; WX 278 ; N comma ; B 87 -147 191 106 ; -C 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ; -C 46 ; WX 278 ; N period ; B 87 0 191 106 ; -C 47 ; WX 278 ; N slash ; B -17 -19 295 737 ; -C 48 ; WX 556 ; N zero ; B 37 -19 519 703 ; -C 49 ; WX 556 ; N one ; B 101 0 359 703 ; -C 50 ; WX 556 ; N two ; B 26 0 507 703 ; -C 51 ; WX 556 ; N three ; B 34 -19 522 703 ; -C 52 ; WX 556 ; N four ; B 25 0 523 703 ; -C 53 ; WX 556 ; N five ; B 32 -19 514 688 ; -C 54 ; WX 556 ; N six ; B 38 -19 518 703 ; -C 55 ; WX 556 ; N seven ; B 37 0 523 688 ; -C 56 ; WX 556 ; N eight ; B 38 -19 517 703 ; -C 57 ; WX 556 ; N nine ; B 42 -19 514 703 ; -C 58 ; WX 278 ; N colon ; B 87 0 191 516 ; -C 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ; -C 60 ; WX 584 ; N less ; B 48 11 536 495 ; -C 61 ; WX 584 ; N equal ; B 39 115 545 390 ; -C 62 ; WX 584 ; N greater ; B 48 11 536 495 ; -C 63 ; WX 556 ; N question ; B 56 0 492 727 ; -C 64 ; WX 1015 ; N at ; B 147 -19 868 737 ; -C 65 ; WX 667 ; N A ; B 14 0 654 718 ; -C 66 ; WX 667 ; N B ; B 74 0 627 718 ; -C 67 ; WX 722 ; N C ; B 44 -19 681 737 ; -C 68 ; WX 722 ; N D ; B 81 0 674 718 ; -C 69 ; WX 667 ; N E ; B 86 0 616 718 ; -C 70 ; WX 611 ; N F ; B 86 0 583 718 ; -C 71 ; WX 778 ; N G ; B 48 -19 704 737 ; -C 72 ; WX 722 ; N H ; B 77 0 646 718 ; -C 73 ; WX 278 ; N I ; B 91 0 188 718 ; -C 74 ; WX 500 ; N J ; B 17 -19 428 718 ; -C 75 ; WX 667 ; N K ; B 76 0 663 718 ; -C 76 ; WX 556 ; N L ; B 76 0 537 718 ; -C 77 ; WX 833 ; N M ; B 73 0 761 718 ; -C 78 ; WX 722 ; N N ; B 76 0 646 718 ; -C 79 ; WX 778 ; N O ; B 39 -19 739 737 ; -C 80 ; WX 667 ; N P ; B 86 0 622 718 ; -C 81 ; WX 778 ; N Q ; B 39 -56 739 737 ; -C 82 ; WX 722 ; N R ; B 88 0 684 718 ; -C 83 ; WX 667 ; N S ; B 49 -19 620 737 ; -C 84 ; WX 611 ; N T ; B 14 0 597 718 ; -C 85 ; WX 722 ; N U ; B 79 -19 644 718 ; -C 86 ; WX 667 ; N V ; B 20 0 647 718 ; -C 87 ; WX 944 ; N W ; B 16 0 928 718 ; -C 88 ; WX 667 ; N X ; B 19 0 648 718 ; -C 89 ; WX 667 ; N Y ; B 14 0 653 718 ; -C 90 ; WX 611 ; N Z ; B 23 0 588 718 ; -C 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ; -C 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ; -C 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ; -C 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ; -C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ; -C 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ; -C 97 ; WX 556 ; N a ; B 36 -15 530 538 ; -C 98 ; WX 556 ; N b ; B 58 -15 517 718 ; -C 99 ; WX 500 ; N c ; B 30 -15 477 538 ; -C 100 ; WX 556 ; N d ; B 35 -15 499 718 ; -C 101 ; WX 556 ; N e ; B 40 -15 516 538 ; -C 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ; -C 103 ; WX 556 ; N g ; B 40 -220 499 538 ; -C 104 ; WX 556 ; N h ; B 65 0 491 718 ; -C 105 ; WX 222 ; N i ; B 67 0 155 718 ; -C 106 ; WX 222 ; N j ; B -16 -210 155 718 ; -C 107 ; WX 500 ; N k ; B 67 0 501 718 ; -C 108 ; WX 222 ; N l ; B 67 0 155 718 ; -C 109 ; WX 833 ; N m ; B 65 0 769 538 ; -C 110 ; WX 556 ; N n ; B 65 0 491 538 ; -C 111 ; WX 556 ; N o ; B 35 -14 521 538 ; -C 112 ; WX 556 ; N p ; B 58 -207 517 538 ; -C 113 ; WX 556 ; N q ; B 35 -207 494 538 ; -C 114 ; WX 333 ; N r ; B 77 0 332 538 ; -C 115 ; WX 500 ; N s ; B 32 -15 464 538 ; -C 116 ; WX 278 ; N t ; B 14 -7 257 669 ; -C 117 ; WX 556 ; N u ; B 68 -15 489 523 ; -C 118 ; WX 500 ; N v ; B 8 0 492 523 ; -C 119 ; WX 722 ; N w ; B 14 0 709 523 ; -C 120 ; WX 500 ; N x ; B 11 0 490 523 ; -C 121 ; WX 500 ; N y ; B 11 -214 489 523 ; -C 122 ; WX 500 ; N z ; B 31 0 469 523 ; -C 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ; -C 124 ; WX 260 ; N bar ; B 94 -225 167 775 ; -C 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ; -C 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ; -C 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ; -C 162 ; WX 556 ; N cent ; B 51 -115 513 623 ; -C 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ; -C 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ; -C 165 ; WX 556 ; N yen ; B 3 0 553 688 ; -C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ; -C 167 ; WX 556 ; N section ; B 43 -191 512 737 ; -C 168 ; WX 556 ; N currency ; B 28 99 528 603 ; -C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ; -C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ; -C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ; -C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ; -C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ; -C 174 ; WX 500 ; N fi ; B 14 0 434 728 ; -C 175 ; WX 500 ; N fl ; B 14 0 432 728 ; -C 177 ; WX 556 ; N endash ; B 0 240 556 313 ; -C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ; -C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ; -C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ; -C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ; -C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ; -C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ; -C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ; -C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ; -C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ; -C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ; -C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ; -C 193 ; WX 333 ; N grave ; B 14 593 211 734 ; -C 194 ; WX 333 ; N acute ; B 122 593 319 734 ; -C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ; -C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ; -C 197 ; WX 333 ; N macron ; B 10 627 323 684 ; -C 198 ; WX 333 ; N breve ; B 13 595 321 731 ; -C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ; -C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ; -C 202 ; WX 333 ; N ring ; B 75 572 259 756 ; -C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ; -C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ; -C 207 ; WX 333 ; N caron ; B 21 593 312 734 ; -C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ; -C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ; -C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ; -C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ; -C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ; -C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ; -C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ; -C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ; -C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ; -C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ; -C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ; -C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ; -C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ; -C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ; -C -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ; -C -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ; -C -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ; -C -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ; -C -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ; -C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ; -C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ; -C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ; -C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ; -C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ; -C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ; -C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ; -C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ; -C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ; -C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ; -C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ; -C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ; -C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ; -C -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ; -C -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ; -C -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ; -C -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ; -C -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ; -C -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ; -C -1 ; WX 556 ; N aring ; B 36 -15 530 756 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ; -C -1 ; WX 222 ; N lacute ; B 67 0 264 929 ; -C -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ; -C -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ; -C -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ; -C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ; -C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ; -C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ; -C -1 ; WX 278 ; N iacute ; B 95 0 292 734 ; -C -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ; -C -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ; -C -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ; -C -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ; -C -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ; -C -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ; -C -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ; -C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ; -C -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ; -C -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ; -C -1 ; WX 722 ; N Racute ; B 88 0 684 929 ; -C -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ; -C -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ; -C -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ; -C -1 ; WX 556 ; N uring ; B 68 -15 489 756 ; -C -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ; -C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ; -C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ; -C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ; -C -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ; -C -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ; -C -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ; -C -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ; -C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ; -C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ; -C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ; -C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ; -C -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ; -C -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ; -C -1 ; WX 556 ; N nacute ; B 65 0 491 734 ; -C -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ; -C -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ; -C -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ; -C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ; -C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ; -C -1 ; WX 737 ; N registered ; B -14 -19 752 737 ; -C -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ; -C -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ; -C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ; -C -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ; -C -1 ; WX 333 ; N racute ; B 77 0 332 734 ; -C -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ; -C -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ; -C -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ; -C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ; -C -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ; -C -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ; -C -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ; -C -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ; -C -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ; -C -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ; -C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ; -C -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ; -C -1 ; WX 500 ; N zacute ; B 31 0 469 734 ; -C -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ; -C -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ; -C -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ; -C -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ; -C -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ; -C -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ; -C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ; -C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ; -C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ; -C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ; -C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ; -C -1 ; WX 278 ; N igrave ; B -13 0 184 734 ; -C -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ; -C -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ; -C -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ; -C -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ; -C -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ; -C -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ; -C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ; -C -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ; -C -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ; -C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ; -C -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ; -C -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ; -C -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ; -C -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ; -C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ; -C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ; -C -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ; -C -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ; -C -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ; -C -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ; -C -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ; -C -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ; -C -1 ; WX 400 ; N degree ; B 54 411 346 703 ; -C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ; -C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ; -C -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ; -C -1 ; WX 453 ; N radical ; B -4 -80 458 762 ; -C -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ; -C -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ; -C -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ; -C -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ; -C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ; -C -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ; -C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ; -C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ; -C -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ; -C -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ; -C -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ; -C -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ; -C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ; -C -1 ; WX 584 ; N minus ; B 39 216 545 289 ; -C -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ; -C -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ; -C -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ; -C -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ; -C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ; -C -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ; -C -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ; -C -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ; -C -1 ; WX 556 ; N eth ; B 35 -15 522 737 ; -C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ; -C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ; -C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ; -C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ; -C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2705 -KPX A C -30 -KPX A Cacute -30 -KPX A Ccaron -30 -KPX A Ccedilla -30 -KPX A G -30 -KPX A Gbreve -30 -KPX A Gcommaaccent -30 -KPX A O -30 -KPX A Oacute -30 -KPX A Ocircumflex -30 -KPX A Odieresis -30 -KPX A Ograve -30 -KPX A Ohungarumlaut -30 -KPX A Omacron -30 -KPX A Oslash -30 -KPX A Otilde -30 -KPX A Q -30 -KPX A T -120 -KPX A Tcaron -120 -KPX A Tcommaaccent -120 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -70 -KPX A W -50 -KPX A Y -100 -KPX A Yacute -100 -KPX A Ydieresis -100 -KPX A u -30 -KPX A uacute -30 -KPX A ucircumflex -30 -KPX A udieresis -30 -KPX A ugrave -30 -KPX A uhungarumlaut -30 -KPX A umacron -30 -KPX A uogonek -30 -KPX A uring -30 -KPX A v -40 -KPX A w -40 -KPX A y -40 -KPX A yacute -40 -KPX A ydieresis -40 -KPX Aacute C -30 -KPX Aacute Cacute -30 -KPX Aacute Ccaron -30 -KPX Aacute Ccedilla -30 -KPX Aacute G -30 -KPX Aacute Gbreve -30 -KPX Aacute Gcommaaccent -30 -KPX Aacute O -30 -KPX Aacute Oacute -30 -KPX Aacute Ocircumflex -30 -KPX Aacute Odieresis -30 -KPX Aacute Ograve -30 -KPX Aacute Ohungarumlaut -30 -KPX Aacute Omacron -30 -KPX Aacute Oslash -30 -KPX Aacute Otilde -30 -KPX Aacute Q -30 -KPX Aacute T -120 -KPX Aacute Tcaron -120 -KPX Aacute Tcommaaccent -120 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -70 -KPX Aacute W -50 -KPX Aacute Y -100 -KPX Aacute Yacute -100 -KPX Aacute Ydieresis -100 -KPX Aacute u -30 -KPX Aacute uacute -30 -KPX Aacute ucircumflex -30 -KPX Aacute udieresis -30 -KPX Aacute ugrave -30 -KPX Aacute uhungarumlaut -30 -KPX Aacute umacron -30 -KPX Aacute uogonek -30 -KPX Aacute uring -30 -KPX Aacute v -40 -KPX Aacute w -40 -KPX Aacute y -40 -KPX Aacute yacute -40 -KPX Aacute ydieresis -40 -KPX Abreve C -30 -KPX Abreve Cacute -30 -KPX Abreve Ccaron -30 -KPX Abreve Ccedilla -30 -KPX Abreve G -30 -KPX Abreve Gbreve -30 -KPX Abreve Gcommaaccent -30 -KPX Abreve O -30 -KPX Abreve Oacute -30 -KPX Abreve Ocircumflex -30 -KPX Abreve Odieresis -30 -KPX Abreve Ograve -30 -KPX Abreve Ohungarumlaut -30 -KPX Abreve Omacron -30 -KPX Abreve Oslash -30 -KPX Abreve Otilde -30 -KPX Abreve Q -30 -KPX Abreve T -120 -KPX Abreve Tcaron -120 -KPX Abreve Tcommaaccent -120 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -70 -KPX Abreve W -50 -KPX Abreve Y -100 -KPX Abreve Yacute -100 -KPX Abreve Ydieresis -100 -KPX Abreve u -30 -KPX Abreve uacute -30 -KPX Abreve ucircumflex -30 -KPX Abreve udieresis -30 -KPX Abreve ugrave -30 -KPX Abreve uhungarumlaut -30 -KPX Abreve umacron -30 -KPX Abreve uogonek -30 -KPX Abreve uring -30 -KPX Abreve v -40 -KPX Abreve w -40 -KPX Abreve y -40 -KPX Abreve yacute -40 -KPX Abreve ydieresis -40 -KPX Acircumflex C -30 -KPX Acircumflex Cacute -30 -KPX Acircumflex Ccaron -30 -KPX Acircumflex Ccedilla -30 -KPX Acircumflex G -30 -KPX Acircumflex Gbreve -30 -KPX Acircumflex Gcommaaccent -30 -KPX Acircumflex O -30 -KPX Acircumflex Oacute -30 -KPX Acircumflex Ocircumflex -30 -KPX Acircumflex Odieresis -30 -KPX Acircumflex Ograve -30 -KPX Acircumflex Ohungarumlaut -30 -KPX Acircumflex Omacron -30 -KPX Acircumflex Oslash -30 -KPX Acircumflex Otilde -30 -KPX Acircumflex Q -30 -KPX Acircumflex T -120 -KPX Acircumflex Tcaron -120 -KPX Acircumflex Tcommaaccent -120 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -70 -KPX Acircumflex W -50 -KPX Acircumflex Y -100 -KPX Acircumflex Yacute -100 -KPX Acircumflex Ydieresis -100 -KPX Acircumflex u -30 -KPX Acircumflex uacute -30 -KPX Acircumflex ucircumflex -30 -KPX Acircumflex udieresis -30 -KPX Acircumflex ugrave -30 -KPX Acircumflex uhungarumlaut -30 -KPX Acircumflex umacron -30 -KPX Acircumflex uogonek -30 -KPX Acircumflex uring -30 -KPX Acircumflex v -40 -KPX Acircumflex w -40 -KPX Acircumflex y -40 -KPX Acircumflex yacute -40 -KPX Acircumflex ydieresis -40 -KPX Adieresis C -30 -KPX Adieresis Cacute -30 -KPX Adieresis Ccaron -30 -KPX Adieresis Ccedilla -30 -KPX Adieresis G -30 -KPX Adieresis Gbreve -30 -KPX Adieresis Gcommaaccent -30 -KPX Adieresis O -30 -KPX Adieresis Oacute -30 -KPX Adieresis Ocircumflex -30 -KPX Adieresis Odieresis -30 -KPX Adieresis Ograve -30 -KPX Adieresis Ohungarumlaut -30 -KPX Adieresis Omacron -30 -KPX Adieresis Oslash -30 -KPX Adieresis Otilde -30 -KPX Adieresis Q -30 -KPX Adieresis T -120 -KPX Adieresis Tcaron -120 -KPX Adieresis Tcommaaccent -120 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -70 -KPX Adieresis W -50 -KPX Adieresis Y -100 -KPX Adieresis Yacute -100 -KPX Adieresis Ydieresis -100 -KPX Adieresis u -30 -KPX Adieresis uacute -30 -KPX Adieresis ucircumflex -30 -KPX Adieresis udieresis -30 -KPX Adieresis ugrave -30 -KPX Adieresis uhungarumlaut -30 -KPX Adieresis umacron -30 -KPX Adieresis uogonek -30 -KPX Adieresis uring -30 -KPX Adieresis v -40 -KPX Adieresis w -40 -KPX Adieresis y -40 -KPX Adieresis yacute -40 -KPX Adieresis ydieresis -40 -KPX Agrave C -30 -KPX Agrave Cacute -30 -KPX Agrave Ccaron -30 -KPX Agrave Ccedilla -30 -KPX Agrave G -30 -KPX Agrave Gbreve -30 -KPX Agrave Gcommaaccent -30 -KPX Agrave O -30 -KPX Agrave Oacute -30 -KPX Agrave Ocircumflex -30 -KPX Agrave Odieresis -30 -KPX Agrave Ograve -30 -KPX Agrave Ohungarumlaut -30 -KPX Agrave Omacron -30 -KPX Agrave Oslash -30 -KPX Agrave Otilde -30 -KPX Agrave Q -30 -KPX Agrave T -120 -KPX Agrave Tcaron -120 -KPX Agrave Tcommaaccent -120 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -70 -KPX Agrave W -50 -KPX Agrave Y -100 -KPX Agrave Yacute -100 -KPX Agrave Ydieresis -100 -KPX Agrave u -30 -KPX Agrave uacute -30 -KPX Agrave ucircumflex -30 -KPX Agrave udieresis -30 -KPX Agrave ugrave -30 -KPX Agrave uhungarumlaut -30 -KPX Agrave umacron -30 -KPX Agrave uogonek -30 -KPX Agrave uring -30 -KPX Agrave v -40 -KPX Agrave w -40 -KPX Agrave y -40 -KPX Agrave yacute -40 -KPX Agrave ydieresis -40 -KPX Amacron C -30 -KPX Amacron Cacute -30 -KPX Amacron Ccaron -30 -KPX Amacron Ccedilla -30 -KPX Amacron G -30 -KPX Amacron Gbreve -30 -KPX Amacron Gcommaaccent -30 -KPX Amacron O -30 -KPX Amacron Oacute -30 -KPX Amacron Ocircumflex -30 -KPX Amacron Odieresis -30 -KPX Amacron Ograve -30 -KPX Amacron Ohungarumlaut -30 -KPX Amacron Omacron -30 -KPX Amacron Oslash -30 -KPX Amacron Otilde -30 -KPX Amacron Q -30 -KPX Amacron T -120 -KPX Amacron Tcaron -120 -KPX Amacron Tcommaaccent -120 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -70 -KPX Amacron W -50 -KPX Amacron Y -100 -KPX Amacron Yacute -100 -KPX Amacron Ydieresis -100 -KPX Amacron u -30 -KPX Amacron uacute -30 -KPX Amacron ucircumflex -30 -KPX Amacron udieresis -30 -KPX Amacron ugrave -30 -KPX Amacron uhungarumlaut -30 -KPX Amacron umacron -30 -KPX Amacron uogonek -30 -KPX Amacron uring -30 -KPX Amacron v -40 -KPX Amacron w -40 -KPX Amacron y -40 -KPX Amacron yacute -40 -KPX Amacron ydieresis -40 -KPX Aogonek C -30 -KPX Aogonek Cacute -30 -KPX Aogonek Ccaron -30 -KPX Aogonek Ccedilla -30 -KPX Aogonek G -30 -KPX Aogonek Gbreve -30 -KPX Aogonek Gcommaaccent -30 -KPX Aogonek O -30 -KPX Aogonek Oacute -30 -KPX Aogonek Ocircumflex -30 -KPX Aogonek Odieresis -30 -KPX Aogonek Ograve -30 -KPX Aogonek Ohungarumlaut -30 -KPX Aogonek Omacron -30 -KPX Aogonek Oslash -30 -KPX Aogonek Otilde -30 -KPX Aogonek Q -30 -KPX Aogonek T -120 -KPX Aogonek Tcaron -120 -KPX Aogonek Tcommaaccent -120 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -70 -KPX Aogonek W -50 -KPX Aogonek Y -100 -KPX Aogonek Yacute -100 -KPX Aogonek Ydieresis -100 -KPX Aogonek u -30 -KPX Aogonek uacute -30 -KPX Aogonek ucircumflex -30 -KPX Aogonek udieresis -30 -KPX Aogonek ugrave -30 -KPX Aogonek uhungarumlaut -30 -KPX Aogonek umacron -30 -KPX Aogonek uogonek -30 -KPX Aogonek uring -30 -KPX Aogonek v -40 -KPX Aogonek w -40 -KPX Aogonek y -40 -KPX Aogonek yacute -40 -KPX Aogonek ydieresis -40 -KPX Aring C -30 -KPX Aring Cacute -30 -KPX Aring Ccaron -30 -KPX Aring Ccedilla -30 -KPX Aring G -30 -KPX Aring Gbreve -30 -KPX Aring Gcommaaccent -30 -KPX Aring O -30 -KPX Aring Oacute -30 -KPX Aring Ocircumflex -30 -KPX Aring Odieresis -30 -KPX Aring Ograve -30 -KPX Aring Ohungarumlaut -30 -KPX Aring Omacron -30 -KPX Aring Oslash -30 -KPX Aring Otilde -30 -KPX Aring Q -30 -KPX Aring T -120 -KPX Aring Tcaron -120 -KPX Aring Tcommaaccent -120 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -70 -KPX Aring W -50 -KPX Aring Y -100 -KPX Aring Yacute -100 -KPX Aring Ydieresis -100 -KPX Aring u -30 -KPX Aring uacute -30 -KPX Aring ucircumflex -30 -KPX Aring udieresis -30 -KPX Aring ugrave -30 -KPX Aring uhungarumlaut -30 -KPX Aring umacron -30 -KPX Aring uogonek -30 -KPX Aring uring -30 -KPX Aring v -40 -KPX Aring w -40 -KPX Aring y -40 -KPX Aring yacute -40 -KPX Aring ydieresis -40 -KPX Atilde C -30 -KPX Atilde Cacute -30 -KPX Atilde Ccaron -30 -KPX Atilde Ccedilla -30 -KPX Atilde G -30 -KPX Atilde Gbreve -30 -KPX Atilde Gcommaaccent -30 -KPX Atilde O -30 -KPX Atilde Oacute -30 -KPX Atilde Ocircumflex -30 -KPX Atilde Odieresis -30 -KPX Atilde Ograve -30 -KPX Atilde Ohungarumlaut -30 -KPX Atilde Omacron -30 -KPX Atilde Oslash -30 -KPX Atilde Otilde -30 -KPX Atilde Q -30 -KPX Atilde T -120 -KPX Atilde Tcaron -120 -KPX Atilde Tcommaaccent -120 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -70 -KPX Atilde W -50 -KPX Atilde Y -100 -KPX Atilde Yacute -100 -KPX Atilde Ydieresis -100 -KPX Atilde u -30 -KPX Atilde uacute -30 -KPX Atilde ucircumflex -30 -KPX Atilde udieresis -30 -KPX Atilde ugrave -30 -KPX Atilde uhungarumlaut -30 -KPX Atilde umacron -30 -KPX Atilde uogonek -30 -KPX Atilde uring -30 -KPX Atilde v -40 -KPX Atilde w -40 -KPX Atilde y -40 -KPX Atilde yacute -40 -KPX Atilde ydieresis -40 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX B comma -20 -KPX B period -20 -KPX C comma -30 -KPX C period -30 -KPX Cacute comma -30 -KPX Cacute period -30 -KPX Ccaron comma -30 -KPX Ccaron period -30 -KPX Ccedilla comma -30 -KPX Ccedilla period -30 -KPX D A -40 -KPX D Aacute -40 -KPX D Abreve -40 -KPX D Acircumflex -40 -KPX D Adieresis -40 -KPX D Agrave -40 -KPX D Amacron -40 -KPX D Aogonek -40 -KPX D Aring -40 -KPX D Atilde -40 -KPX D V -70 -KPX D W -40 -KPX D Y -90 -KPX D Yacute -90 -KPX D Ydieresis -90 -KPX D comma -70 -KPX D period -70 -KPX Dcaron A -40 -KPX Dcaron Aacute -40 -KPX Dcaron Abreve -40 -KPX Dcaron Acircumflex -40 -KPX Dcaron Adieresis -40 -KPX Dcaron Agrave -40 -KPX Dcaron Amacron -40 -KPX Dcaron Aogonek -40 -KPX Dcaron Aring -40 -KPX Dcaron Atilde -40 -KPX Dcaron V -70 -KPX Dcaron W -40 -KPX Dcaron Y -90 -KPX Dcaron Yacute -90 -KPX Dcaron Ydieresis -90 -KPX Dcaron comma -70 -KPX Dcaron period -70 -KPX Dcroat A -40 -KPX Dcroat Aacute -40 -KPX Dcroat Abreve -40 -KPX Dcroat Acircumflex -40 -KPX Dcroat Adieresis -40 -KPX Dcroat Agrave -40 -KPX Dcroat Amacron -40 -KPX Dcroat Aogonek -40 -KPX Dcroat Aring -40 -KPX Dcroat Atilde -40 -KPX Dcroat V -70 -KPX Dcroat W -40 -KPX Dcroat Y -90 -KPX Dcroat Yacute -90 -KPX Dcroat Ydieresis -90 -KPX Dcroat comma -70 -KPX Dcroat period -70 -KPX F A -80 -KPX F Aacute -80 -KPX F Abreve -80 -KPX F Acircumflex -80 -KPX F Adieresis -80 -KPX F Agrave -80 -KPX F Amacron -80 -KPX F Aogonek -80 -KPX F Aring -80 -KPX F Atilde -80 -KPX F a -50 -KPX F aacute -50 -KPX F abreve -50 -KPX F acircumflex -50 -KPX F adieresis -50 -KPX F agrave -50 -KPX F amacron -50 -KPX F aogonek -50 -KPX F aring -50 -KPX F atilde -50 -KPX F comma -150 -KPX F e -30 -KPX F eacute -30 -KPX F ecaron -30 -KPX F ecircumflex -30 -KPX F edieresis -30 -KPX F edotaccent -30 -KPX F egrave -30 -KPX F emacron -30 -KPX F eogonek -30 -KPX F o -30 -KPX F oacute -30 -KPX F ocircumflex -30 -KPX F odieresis -30 -KPX F ograve -30 -KPX F ohungarumlaut -30 -KPX F omacron -30 -KPX F oslash -30 -KPX F otilde -30 -KPX F period -150 -KPX F r -45 -KPX F racute -45 -KPX F rcaron -45 -KPX F rcommaaccent -45 -KPX J A -20 -KPX J Aacute -20 -KPX J Abreve -20 -KPX J Acircumflex -20 -KPX J Adieresis -20 -KPX J Agrave -20 -KPX J Amacron -20 -KPX J Aogonek -20 -KPX J Aring -20 -KPX J Atilde -20 -KPX J a -20 -KPX J aacute -20 -KPX J abreve -20 -KPX J acircumflex -20 -KPX J adieresis -20 -KPX J agrave -20 -KPX J amacron -20 -KPX J aogonek -20 -KPX J aring -20 -KPX J atilde -20 -KPX J comma -30 -KPX J period -30 -KPX J u -20 -KPX J uacute -20 -KPX J ucircumflex -20 -KPX J udieresis -20 -KPX J ugrave -20 -KPX J uhungarumlaut -20 -KPX J umacron -20 -KPX J uogonek -20 -KPX J uring -20 -KPX K O -50 -KPX K Oacute -50 -KPX K Ocircumflex -50 -KPX K Odieresis -50 -KPX K Ograve -50 -KPX K Ohungarumlaut -50 -KPX K Omacron -50 -KPX K Oslash -50 -KPX K Otilde -50 -KPX K e -40 -KPX K eacute -40 -KPX K ecaron -40 -KPX K ecircumflex -40 -KPX K edieresis -40 -KPX K edotaccent -40 -KPX K egrave -40 -KPX K emacron -40 -KPX K eogonek -40 -KPX K o -40 -KPX K oacute -40 -KPX K ocircumflex -40 -KPX K odieresis -40 -KPX K ograve -40 -KPX K ohungarumlaut -40 -KPX K omacron -40 -KPX K oslash -40 -KPX K otilde -40 -KPX K u -30 -KPX K uacute -30 -KPX K ucircumflex -30 -KPX K udieresis -30 -KPX K ugrave -30 -KPX K uhungarumlaut -30 -KPX K umacron -30 -KPX K uogonek -30 -KPX K uring -30 -KPX K y -50 -KPX K yacute -50 -KPX K ydieresis -50 -KPX Kcommaaccent O -50 -KPX Kcommaaccent Oacute -50 -KPX Kcommaaccent Ocircumflex -50 -KPX Kcommaaccent Odieresis -50 -KPX Kcommaaccent Ograve -50 -KPX Kcommaaccent Ohungarumlaut -50 -KPX Kcommaaccent Omacron -50 -KPX Kcommaaccent Oslash -50 -KPX Kcommaaccent Otilde -50 -KPX Kcommaaccent e -40 -KPX Kcommaaccent eacute -40 -KPX Kcommaaccent ecaron -40 -KPX Kcommaaccent ecircumflex -40 -KPX Kcommaaccent edieresis -40 -KPX Kcommaaccent edotaccent -40 -KPX Kcommaaccent egrave -40 -KPX Kcommaaccent emacron -40 -KPX Kcommaaccent eogonek -40 -KPX Kcommaaccent o -40 -KPX Kcommaaccent oacute -40 -KPX Kcommaaccent ocircumflex -40 -KPX Kcommaaccent odieresis -40 -KPX Kcommaaccent ograve -40 -KPX Kcommaaccent ohungarumlaut -40 -KPX Kcommaaccent omacron -40 -KPX Kcommaaccent oslash -40 -KPX Kcommaaccent otilde -40 -KPX Kcommaaccent u -30 -KPX Kcommaaccent uacute -30 -KPX Kcommaaccent ucircumflex -30 -KPX Kcommaaccent udieresis -30 -KPX Kcommaaccent ugrave -30 -KPX Kcommaaccent uhungarumlaut -30 -KPX Kcommaaccent umacron -30 -KPX Kcommaaccent uogonek -30 -KPX Kcommaaccent uring -30 -KPX Kcommaaccent y -50 -KPX Kcommaaccent yacute -50 -KPX Kcommaaccent ydieresis -50 -KPX L T -110 -KPX L Tcaron -110 -KPX L Tcommaaccent -110 -KPX L V -110 -KPX L W -70 -KPX L Y -140 -KPX L Yacute -140 -KPX L Ydieresis -140 -KPX L quotedblright -140 -KPX L quoteright -160 -KPX L y -30 -KPX L yacute -30 -KPX L ydieresis -30 -KPX Lacute T -110 -KPX Lacute Tcaron -110 -KPX Lacute Tcommaaccent -110 -KPX Lacute V -110 -KPX Lacute W -70 -KPX Lacute Y -140 -KPX Lacute Yacute -140 -KPX Lacute Ydieresis -140 -KPX Lacute quotedblright -140 -KPX Lacute quoteright -160 -KPX Lacute y -30 -KPX Lacute yacute -30 -KPX Lacute ydieresis -30 -KPX Lcaron T -110 -KPX Lcaron Tcaron -110 -KPX Lcaron Tcommaaccent -110 -KPX Lcaron V -110 -KPX Lcaron W -70 -KPX Lcaron Y -140 -KPX Lcaron Yacute -140 -KPX Lcaron Ydieresis -140 -KPX Lcaron quotedblright -140 -KPX Lcaron quoteright -160 -KPX Lcaron y -30 -KPX Lcaron yacute -30 -KPX Lcaron ydieresis -30 -KPX Lcommaaccent T -110 -KPX Lcommaaccent Tcaron -110 -KPX Lcommaaccent Tcommaaccent -110 -KPX Lcommaaccent V -110 -KPX Lcommaaccent W -70 -KPX Lcommaaccent Y -140 -KPX Lcommaaccent Yacute -140 -KPX Lcommaaccent Ydieresis -140 -KPX Lcommaaccent quotedblright -140 -KPX Lcommaaccent quoteright -160 -KPX Lcommaaccent y -30 -KPX Lcommaaccent yacute -30 -KPX Lcommaaccent ydieresis -30 -KPX Lslash T -110 -KPX Lslash Tcaron -110 -KPX Lslash Tcommaaccent -110 -KPX Lslash V -110 -KPX Lslash W -70 -KPX Lslash Y -140 -KPX Lslash Yacute -140 -KPX Lslash Ydieresis -140 -KPX Lslash quotedblright -140 -KPX Lslash quoteright -160 -KPX Lslash y -30 -KPX Lslash yacute -30 -KPX Lslash ydieresis -30 -KPX O A -20 -KPX O Aacute -20 -KPX O Abreve -20 -KPX O Acircumflex -20 -KPX O Adieresis -20 -KPX O Agrave -20 -KPX O Amacron -20 -KPX O Aogonek -20 -KPX O Aring -20 -KPX O Atilde -20 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -30 -KPX O X -60 -KPX O Y -70 -KPX O Yacute -70 -KPX O Ydieresis -70 -KPX O comma -40 -KPX O period -40 -KPX Oacute A -20 -KPX Oacute Aacute -20 -KPX Oacute Abreve -20 -KPX Oacute Acircumflex -20 -KPX Oacute Adieresis -20 -KPX Oacute Agrave -20 -KPX Oacute Amacron -20 -KPX Oacute Aogonek -20 -KPX Oacute Aring -20 -KPX Oacute Atilde -20 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -30 -KPX Oacute X -60 -KPX Oacute Y -70 -KPX Oacute Yacute -70 -KPX Oacute Ydieresis -70 -KPX Oacute comma -40 -KPX Oacute period -40 -KPX Ocircumflex A -20 -KPX Ocircumflex Aacute -20 -KPX Ocircumflex Abreve -20 -KPX Ocircumflex Acircumflex -20 -KPX Ocircumflex Adieresis -20 -KPX Ocircumflex Agrave -20 -KPX Ocircumflex Amacron -20 -KPX Ocircumflex Aogonek -20 -KPX Ocircumflex Aring -20 -KPX Ocircumflex Atilde -20 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -30 -KPX Ocircumflex X -60 -KPX Ocircumflex Y -70 -KPX Ocircumflex Yacute -70 -KPX Ocircumflex Ydieresis -70 -KPX Ocircumflex comma -40 -KPX Ocircumflex period -40 -KPX Odieresis A -20 -KPX Odieresis Aacute -20 -KPX Odieresis Abreve -20 -KPX Odieresis Acircumflex -20 -KPX Odieresis Adieresis -20 -KPX Odieresis Agrave -20 -KPX Odieresis Amacron -20 -KPX Odieresis Aogonek -20 -KPX Odieresis Aring -20 -KPX Odieresis Atilde -20 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -30 -KPX Odieresis X -60 -KPX Odieresis Y -70 -KPX Odieresis Yacute -70 -KPX Odieresis Ydieresis -70 -KPX Odieresis comma -40 -KPX Odieresis period -40 -KPX Ograve A -20 -KPX Ograve Aacute -20 -KPX Ograve Abreve -20 -KPX Ograve Acircumflex -20 -KPX Ograve Adieresis -20 -KPX Ograve Agrave -20 -KPX Ograve Amacron -20 -KPX Ograve Aogonek -20 -KPX Ograve Aring -20 -KPX Ograve Atilde -20 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -30 -KPX Ograve X -60 -KPX Ograve Y -70 -KPX Ograve Yacute -70 -KPX Ograve Ydieresis -70 -KPX Ograve comma -40 -KPX Ograve period -40 -KPX Ohungarumlaut A -20 -KPX Ohungarumlaut Aacute -20 -KPX Ohungarumlaut Abreve -20 -KPX Ohungarumlaut Acircumflex -20 -KPX Ohungarumlaut Adieresis -20 -KPX Ohungarumlaut Agrave -20 -KPX Ohungarumlaut Amacron -20 -KPX Ohungarumlaut Aogonek -20 -KPX Ohungarumlaut Aring -20 -KPX Ohungarumlaut Atilde -20 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -30 -KPX Ohungarumlaut X -60 -KPX Ohungarumlaut Y -70 -KPX Ohungarumlaut Yacute -70 -KPX Ohungarumlaut Ydieresis -70 -KPX Ohungarumlaut comma -40 -KPX Ohungarumlaut period -40 -KPX Omacron A -20 -KPX Omacron Aacute -20 -KPX Omacron Abreve -20 -KPX Omacron Acircumflex -20 -KPX Omacron Adieresis -20 -KPX Omacron Agrave -20 -KPX Omacron Amacron -20 -KPX Omacron Aogonek -20 -KPX Omacron Aring -20 -KPX Omacron Atilde -20 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -30 -KPX Omacron X -60 -KPX Omacron Y -70 -KPX Omacron Yacute -70 -KPX Omacron Ydieresis -70 -KPX Omacron comma -40 -KPX Omacron period -40 -KPX Oslash A -20 -KPX Oslash Aacute -20 -KPX Oslash Abreve -20 -KPX Oslash Acircumflex -20 -KPX Oslash Adieresis -20 -KPX Oslash Agrave -20 -KPX Oslash Amacron -20 -KPX Oslash Aogonek -20 -KPX Oslash Aring -20 -KPX Oslash Atilde -20 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -30 -KPX Oslash X -60 -KPX Oslash Y -70 -KPX Oslash Yacute -70 -KPX Oslash Ydieresis -70 -KPX Oslash comma -40 -KPX Oslash period -40 -KPX Otilde A -20 -KPX Otilde Aacute -20 -KPX Otilde Abreve -20 -KPX Otilde Acircumflex -20 -KPX Otilde Adieresis -20 -KPX Otilde Agrave -20 -KPX Otilde Amacron -20 -KPX Otilde Aogonek -20 -KPX Otilde Aring -20 -KPX Otilde Atilde -20 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -30 -KPX Otilde X -60 -KPX Otilde Y -70 -KPX Otilde Yacute -70 -KPX Otilde Ydieresis -70 -KPX Otilde comma -40 -KPX Otilde period -40 -KPX P A -120 -KPX P Aacute -120 -KPX P Abreve -120 -KPX P Acircumflex -120 -KPX P Adieresis -120 -KPX P Agrave -120 -KPX P Amacron -120 -KPX P Aogonek -120 -KPX P Aring -120 -KPX P Atilde -120 -KPX P a -40 -KPX P aacute -40 -KPX P abreve -40 -KPX P acircumflex -40 -KPX P adieresis -40 -KPX P agrave -40 -KPX P amacron -40 -KPX P aogonek -40 -KPX P aring -40 -KPX P atilde -40 -KPX P comma -180 -KPX P e -50 -KPX P eacute -50 -KPX P ecaron -50 -KPX P ecircumflex -50 -KPX P edieresis -50 -KPX P edotaccent -50 -KPX P egrave -50 -KPX P emacron -50 -KPX P eogonek -50 -KPX P o -50 -KPX P oacute -50 -KPX P ocircumflex -50 -KPX P odieresis -50 -KPX P ograve -50 -KPX P ohungarumlaut -50 -KPX P omacron -50 -KPX P oslash -50 -KPX P otilde -50 -KPX P period -180 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX R O -20 -KPX R Oacute -20 -KPX R Ocircumflex -20 -KPX R Odieresis -20 -KPX R Ograve -20 -KPX R Ohungarumlaut -20 -KPX R Omacron -20 -KPX R Oslash -20 -KPX R Otilde -20 -KPX R T -30 -KPX R Tcaron -30 -KPX R Tcommaaccent -30 -KPX R U -40 -KPX R Uacute -40 -KPX R Ucircumflex -40 -KPX R Udieresis -40 -KPX R Ugrave -40 -KPX R Uhungarumlaut -40 -KPX R Umacron -40 -KPX R Uogonek -40 -KPX R Uring -40 -KPX R V -50 -KPX R W -30 -KPX R Y -50 -KPX R Yacute -50 -KPX R Ydieresis -50 -KPX Racute O -20 -KPX Racute Oacute -20 -KPX Racute Ocircumflex -20 -KPX Racute Odieresis -20 -KPX Racute Ograve -20 -KPX Racute Ohungarumlaut -20 -KPX Racute Omacron -20 -KPX Racute Oslash -20 -KPX Racute Otilde -20 -KPX Racute T -30 -KPX Racute Tcaron -30 -KPX Racute Tcommaaccent -30 -KPX Racute U -40 -KPX Racute Uacute -40 -KPX Racute Ucircumflex -40 -KPX Racute Udieresis -40 -KPX Racute Ugrave -40 -KPX Racute Uhungarumlaut -40 -KPX Racute Umacron -40 -KPX Racute Uogonek -40 -KPX Racute Uring -40 -KPX Racute V -50 -KPX Racute W -30 -KPX Racute Y -50 -KPX Racute Yacute -50 -KPX Racute Ydieresis -50 -KPX Rcaron O -20 -KPX Rcaron Oacute -20 -KPX Rcaron Ocircumflex -20 -KPX Rcaron Odieresis -20 -KPX Rcaron Ograve -20 -KPX Rcaron Ohungarumlaut -20 -KPX Rcaron Omacron -20 -KPX Rcaron Oslash -20 -KPX Rcaron Otilde -20 -KPX Rcaron T -30 -KPX Rcaron Tcaron -30 -KPX Rcaron Tcommaaccent -30 -KPX Rcaron U -40 -KPX Rcaron Uacute -40 -KPX Rcaron Ucircumflex -40 -KPX Rcaron Udieresis -40 -KPX Rcaron Ugrave -40 -KPX Rcaron Uhungarumlaut -40 -KPX Rcaron Umacron -40 -KPX Rcaron Uogonek -40 -KPX Rcaron Uring -40 -KPX Rcaron V -50 -KPX Rcaron W -30 -KPX Rcaron Y -50 -KPX Rcaron Yacute -50 -KPX Rcaron Ydieresis -50 -KPX Rcommaaccent O -20 -KPX Rcommaaccent Oacute -20 -KPX Rcommaaccent Ocircumflex -20 -KPX Rcommaaccent Odieresis -20 -KPX Rcommaaccent Ograve -20 -KPX Rcommaaccent Ohungarumlaut -20 -KPX Rcommaaccent Omacron -20 -KPX Rcommaaccent Oslash -20 -KPX Rcommaaccent Otilde -20 -KPX Rcommaaccent T -30 -KPX Rcommaaccent Tcaron -30 -KPX Rcommaaccent Tcommaaccent -30 -KPX Rcommaaccent U -40 -KPX Rcommaaccent Uacute -40 -KPX Rcommaaccent Ucircumflex -40 -KPX Rcommaaccent Udieresis -40 -KPX Rcommaaccent Ugrave -40 -KPX Rcommaaccent Uhungarumlaut -40 -KPX Rcommaaccent Umacron -40 -KPX Rcommaaccent Uogonek -40 -KPX Rcommaaccent Uring -40 -KPX Rcommaaccent V -50 -KPX Rcommaaccent W -30 -KPX Rcommaaccent Y -50 -KPX Rcommaaccent Yacute -50 -KPX Rcommaaccent Ydieresis -50 -KPX S comma -20 -KPX S period -20 -KPX Sacute comma -20 -KPX Sacute period -20 -KPX Scaron comma -20 -KPX Scaron period -20 -KPX Scedilla comma -20 -KPX Scedilla period -20 -KPX Scommaaccent comma -20 -KPX Scommaaccent period -20 -KPX T A -120 -KPX T Aacute -120 -KPX T Abreve -120 -KPX T Acircumflex -120 -KPX T Adieresis -120 -KPX T Agrave -120 -KPX T Amacron -120 -KPX T Aogonek -120 -KPX T Aring -120 -KPX T Atilde -120 -KPX T O -40 -KPX T Oacute -40 -KPX T Ocircumflex -40 -KPX T Odieresis -40 -KPX T Ograve -40 -KPX T Ohungarumlaut -40 -KPX T Omacron -40 -KPX T Oslash -40 -KPX T Otilde -40 -KPX T a -120 -KPX T aacute -120 -KPX T abreve -60 -KPX T acircumflex -120 -KPX T adieresis -120 -KPX T agrave -120 -KPX T amacron -60 -KPX T aogonek -120 -KPX T aring -120 -KPX T atilde -60 -KPX T colon -20 -KPX T comma -120 -KPX T e -120 -KPX T eacute -120 -KPX T ecaron -120 -KPX T ecircumflex -120 -KPX T edieresis -120 -KPX T edotaccent -120 -KPX T egrave -60 -KPX T emacron -60 -KPX T eogonek -120 -KPX T hyphen -140 -KPX T o -120 -KPX T oacute -120 -KPX T ocircumflex -120 -KPX T odieresis -120 -KPX T ograve -120 -KPX T ohungarumlaut -120 -KPX T omacron -60 -KPX T oslash -120 -KPX T otilde -60 -KPX T period -120 -KPX T r -120 -KPX T racute -120 -KPX T rcaron -120 -KPX T rcommaaccent -120 -KPX T semicolon -20 -KPX T u -120 -KPX T uacute -120 -KPX T ucircumflex -120 -KPX T udieresis -120 -KPX T ugrave -120 -KPX T uhungarumlaut -120 -KPX T umacron -60 -KPX T uogonek -120 -KPX T uring -120 -KPX T w -120 -KPX T y -120 -KPX T yacute -120 -KPX T ydieresis -60 -KPX Tcaron A -120 -KPX Tcaron Aacute -120 -KPX Tcaron Abreve -120 -KPX Tcaron Acircumflex -120 -KPX Tcaron Adieresis -120 -KPX Tcaron Agrave -120 -KPX Tcaron Amacron -120 -KPX Tcaron Aogonek -120 -KPX Tcaron Aring -120 -KPX Tcaron Atilde -120 -KPX Tcaron O -40 -KPX Tcaron Oacute -40 -KPX Tcaron Ocircumflex -40 -KPX Tcaron Odieresis -40 -KPX Tcaron Ograve -40 -KPX Tcaron Ohungarumlaut -40 -KPX Tcaron Omacron -40 -KPX Tcaron Oslash -40 -KPX Tcaron Otilde -40 -KPX Tcaron a -120 -KPX Tcaron aacute -120 -KPX Tcaron abreve -60 -KPX Tcaron acircumflex -120 -KPX Tcaron adieresis -120 -KPX Tcaron agrave -120 -KPX Tcaron amacron -60 -KPX Tcaron aogonek -120 -KPX Tcaron aring -120 -KPX Tcaron atilde -60 -KPX Tcaron colon -20 -KPX Tcaron comma -120 -KPX Tcaron e -120 -KPX Tcaron eacute -120 -KPX Tcaron ecaron -120 -KPX Tcaron ecircumflex -120 -KPX Tcaron edieresis -120 -KPX Tcaron edotaccent -120 -KPX Tcaron egrave -60 -KPX Tcaron emacron -60 -KPX Tcaron eogonek -120 -KPX Tcaron hyphen -140 -KPX Tcaron o -120 -KPX Tcaron oacute -120 -KPX Tcaron ocircumflex -120 -KPX Tcaron odieresis -120 -KPX Tcaron ograve -120 -KPX Tcaron ohungarumlaut -120 -KPX Tcaron omacron -60 -KPX Tcaron oslash -120 -KPX Tcaron otilde -60 -KPX Tcaron period -120 -KPX Tcaron r -120 -KPX Tcaron racute -120 -KPX Tcaron rcaron -120 -KPX Tcaron rcommaaccent -120 -KPX Tcaron semicolon -20 -KPX Tcaron u -120 -KPX Tcaron uacute -120 -KPX Tcaron ucircumflex -120 -KPX Tcaron udieresis -120 -KPX Tcaron ugrave -120 -KPX Tcaron uhungarumlaut -120 -KPX Tcaron umacron -60 -KPX Tcaron uogonek -120 -KPX Tcaron uring -120 -KPX Tcaron w -120 -KPX Tcaron y -120 -KPX Tcaron yacute -120 -KPX Tcaron ydieresis -60 -KPX Tcommaaccent A -120 -KPX Tcommaaccent Aacute -120 -KPX Tcommaaccent Abreve -120 -KPX Tcommaaccent Acircumflex -120 -KPX Tcommaaccent Adieresis -120 -KPX Tcommaaccent Agrave -120 -KPX Tcommaaccent Amacron -120 -KPX Tcommaaccent Aogonek -120 -KPX Tcommaaccent Aring -120 -KPX Tcommaaccent Atilde -120 -KPX Tcommaaccent O -40 -KPX Tcommaaccent Oacute -40 -KPX Tcommaaccent Ocircumflex -40 -KPX Tcommaaccent Odieresis -40 -KPX Tcommaaccent Ograve -40 -KPX Tcommaaccent Ohungarumlaut -40 -KPX Tcommaaccent Omacron -40 -KPX Tcommaaccent Oslash -40 -KPX Tcommaaccent Otilde -40 -KPX Tcommaaccent a -120 -KPX Tcommaaccent aacute -120 -KPX Tcommaaccent abreve -60 -KPX Tcommaaccent acircumflex -120 -KPX Tcommaaccent adieresis -120 -KPX Tcommaaccent agrave -120 -KPX Tcommaaccent amacron -60 -KPX Tcommaaccent aogonek -120 -KPX Tcommaaccent aring -120 -KPX Tcommaaccent atilde -60 -KPX Tcommaaccent colon -20 -KPX Tcommaaccent comma -120 -KPX Tcommaaccent e -120 -KPX Tcommaaccent eacute -120 -KPX Tcommaaccent ecaron -120 -KPX Tcommaaccent ecircumflex -120 -KPX Tcommaaccent edieresis -120 -KPX Tcommaaccent edotaccent -120 -KPX Tcommaaccent egrave -60 -KPX Tcommaaccent emacron -60 -KPX Tcommaaccent eogonek -120 -KPX Tcommaaccent hyphen -140 -KPX Tcommaaccent o -120 -KPX Tcommaaccent oacute -120 -KPX Tcommaaccent ocircumflex -120 -KPX Tcommaaccent odieresis -120 -KPX Tcommaaccent ograve -120 -KPX Tcommaaccent ohungarumlaut -120 -KPX Tcommaaccent omacron -60 -KPX Tcommaaccent oslash -120 -KPX Tcommaaccent otilde -60 -KPX Tcommaaccent period -120 -KPX Tcommaaccent r -120 -KPX Tcommaaccent racute -120 -KPX Tcommaaccent rcaron -120 -KPX Tcommaaccent rcommaaccent -120 -KPX Tcommaaccent semicolon -20 -KPX Tcommaaccent u -120 -KPX Tcommaaccent uacute -120 -KPX Tcommaaccent ucircumflex -120 -KPX Tcommaaccent udieresis -120 -KPX Tcommaaccent ugrave -120 -KPX Tcommaaccent uhungarumlaut -120 -KPX Tcommaaccent umacron -60 -KPX Tcommaaccent uogonek -120 -KPX Tcommaaccent uring -120 -KPX Tcommaaccent w -120 -KPX Tcommaaccent y -120 -KPX Tcommaaccent yacute -120 -KPX Tcommaaccent ydieresis -60 -KPX U A -40 -KPX U Aacute -40 -KPX U Abreve -40 -KPX U Acircumflex -40 -KPX U Adieresis -40 -KPX U Agrave -40 -KPX U Amacron -40 -KPX U Aogonek -40 -KPX U Aring -40 -KPX U Atilde -40 -KPX U comma -40 -KPX U period -40 -KPX Uacute A -40 -KPX Uacute Aacute -40 -KPX Uacute Abreve -40 -KPX Uacute Acircumflex -40 -KPX Uacute Adieresis -40 -KPX Uacute Agrave -40 -KPX Uacute Amacron -40 -KPX Uacute Aogonek -40 -KPX Uacute Aring -40 -KPX Uacute Atilde -40 -KPX Uacute comma -40 -KPX Uacute period -40 -KPX Ucircumflex A -40 -KPX Ucircumflex Aacute -40 -KPX Ucircumflex Abreve -40 -KPX Ucircumflex Acircumflex -40 -KPX Ucircumflex Adieresis -40 -KPX Ucircumflex Agrave -40 -KPX Ucircumflex Amacron -40 -KPX Ucircumflex Aogonek -40 -KPX Ucircumflex Aring -40 -KPX Ucircumflex Atilde -40 -KPX Ucircumflex comma -40 -KPX Ucircumflex period -40 -KPX Udieresis A -40 -KPX Udieresis Aacute -40 -KPX Udieresis Abreve -40 -KPX Udieresis Acircumflex -40 -KPX Udieresis Adieresis -40 -KPX Udieresis Agrave -40 -KPX Udieresis Amacron -40 -KPX Udieresis Aogonek -40 -KPX Udieresis Aring -40 -KPX Udieresis Atilde -40 -KPX Udieresis comma -40 -KPX Udieresis period -40 -KPX Ugrave A -40 -KPX Ugrave Aacute -40 -KPX Ugrave Abreve -40 -KPX Ugrave Acircumflex -40 -KPX Ugrave Adieresis -40 -KPX Ugrave Agrave -40 -KPX Ugrave Amacron -40 -KPX Ugrave Aogonek -40 -KPX Ugrave Aring -40 -KPX Ugrave Atilde -40 -KPX Ugrave comma -40 -KPX Ugrave period -40 -KPX Uhungarumlaut A -40 -KPX Uhungarumlaut Aacute -40 -KPX Uhungarumlaut Abreve -40 -KPX Uhungarumlaut Acircumflex -40 -KPX Uhungarumlaut Adieresis -40 -KPX Uhungarumlaut Agrave -40 -KPX Uhungarumlaut Amacron -40 -KPX Uhungarumlaut Aogonek -40 -KPX Uhungarumlaut Aring -40 -KPX Uhungarumlaut Atilde -40 -KPX Uhungarumlaut comma -40 -KPX Uhungarumlaut period -40 -KPX Umacron A -40 -KPX Umacron Aacute -40 -KPX Umacron Abreve -40 -KPX Umacron Acircumflex -40 -KPX Umacron Adieresis -40 -KPX Umacron Agrave -40 -KPX Umacron Amacron -40 -KPX Umacron Aogonek -40 -KPX Umacron Aring -40 -KPX Umacron Atilde -40 -KPX Umacron comma -40 -KPX Umacron period -40 -KPX Uogonek A -40 -KPX Uogonek Aacute -40 -KPX Uogonek Abreve -40 -KPX Uogonek Acircumflex -40 -KPX Uogonek Adieresis -40 -KPX Uogonek Agrave -40 -KPX Uogonek Amacron -40 -KPX Uogonek Aogonek -40 -KPX Uogonek Aring -40 -KPX Uogonek Atilde -40 -KPX Uogonek comma -40 -KPX Uogonek period -40 -KPX Uring A -40 -KPX Uring Aacute -40 -KPX Uring Abreve -40 -KPX Uring Acircumflex -40 -KPX Uring Adieresis -40 -KPX Uring Agrave -40 -KPX Uring Amacron -40 -KPX Uring Aogonek -40 -KPX Uring Aring -40 -KPX Uring Atilde -40 -KPX Uring comma -40 -KPX Uring period -40 -KPX V A -80 -KPX V Aacute -80 -KPX V Abreve -80 -KPX V Acircumflex -80 -KPX V Adieresis -80 -KPX V Agrave -80 -KPX V Amacron -80 -KPX V Aogonek -80 -KPX V Aring -80 -KPX V Atilde -80 -KPX V G -40 -KPX V Gbreve -40 -KPX V Gcommaaccent -40 -KPX V O -40 -KPX V Oacute -40 -KPX V Ocircumflex -40 -KPX V Odieresis -40 -KPX V Ograve -40 -KPX V Ohungarumlaut -40 -KPX V Omacron -40 -KPX V Oslash -40 -KPX V Otilde -40 -KPX V a -70 -KPX V aacute -70 -KPX V abreve -70 -KPX V acircumflex -70 -KPX V adieresis -70 -KPX V agrave -70 -KPX V amacron -70 -KPX V aogonek -70 -KPX V aring -70 -KPX V atilde -70 -KPX V colon -40 -KPX V comma -125 -KPX V e -80 -KPX V eacute -80 -KPX V ecaron -80 -KPX V ecircumflex -80 -KPX V edieresis -80 -KPX V edotaccent -80 -KPX V egrave -80 -KPX V emacron -80 -KPX V eogonek -80 -KPX V hyphen -80 -KPX V o -80 -KPX V oacute -80 -KPX V ocircumflex -80 -KPX V odieresis -80 -KPX V ograve -80 -KPX V ohungarumlaut -80 -KPX V omacron -80 -KPX V oslash -80 -KPX V otilde -80 -KPX V period -125 -KPX V semicolon -40 -KPX V u -70 -KPX V uacute -70 -KPX V ucircumflex -70 -KPX V udieresis -70 -KPX V ugrave -70 -KPX V uhungarumlaut -70 -KPX V umacron -70 -KPX V uogonek -70 -KPX V uring -70 -KPX W A -50 -KPX W Aacute -50 -KPX W Abreve -50 -KPX W Acircumflex -50 -KPX W Adieresis -50 -KPX W Agrave -50 -KPX W Amacron -50 -KPX W Aogonek -50 -KPX W Aring -50 -KPX W Atilde -50 -KPX W O -20 -KPX W Oacute -20 -KPX W Ocircumflex -20 -KPX W Odieresis -20 -KPX W Ograve -20 -KPX W Ohungarumlaut -20 -KPX W Omacron -20 -KPX W Oslash -20 -KPX W Otilde -20 -KPX W a -40 -KPX W aacute -40 -KPX W abreve -40 -KPX W acircumflex -40 -KPX W adieresis -40 -KPX W agrave -40 -KPX W amacron -40 -KPX W aogonek -40 -KPX W aring -40 -KPX W atilde -40 -KPX W comma -80 -KPX W e -30 -KPX W eacute -30 -KPX W ecaron -30 -KPX W ecircumflex -30 -KPX W edieresis -30 -KPX W edotaccent -30 -KPX W egrave -30 -KPX W emacron -30 -KPX W eogonek -30 -KPX W hyphen -40 -KPX W o -30 -KPX W oacute -30 -KPX W ocircumflex -30 -KPX W odieresis -30 -KPX W ograve -30 -KPX W ohungarumlaut -30 -KPX W omacron -30 -KPX W oslash -30 -KPX W otilde -30 -KPX W period -80 -KPX W u -30 -KPX W uacute -30 -KPX W ucircumflex -30 -KPX W udieresis -30 -KPX W ugrave -30 -KPX W uhungarumlaut -30 -KPX W umacron -30 -KPX W uogonek -30 -KPX W uring -30 -KPX W y -20 -KPX W yacute -20 -KPX W ydieresis -20 -KPX Y A -110 -KPX Y Aacute -110 -KPX Y Abreve -110 -KPX Y Acircumflex -110 -KPX Y Adieresis -110 -KPX Y Agrave -110 -KPX Y Amacron -110 -KPX Y Aogonek -110 -KPX Y Aring -110 -KPX Y Atilde -110 -KPX Y O -85 -KPX Y Oacute -85 -KPX Y Ocircumflex -85 -KPX Y Odieresis -85 -KPX Y Ograve -85 -KPX Y Ohungarumlaut -85 -KPX Y Omacron -85 -KPX Y Oslash -85 -KPX Y Otilde -85 -KPX Y a -140 -KPX Y aacute -140 -KPX Y abreve -70 -KPX Y acircumflex -140 -KPX Y adieresis -140 -KPX Y agrave -140 -KPX Y amacron -70 -KPX Y aogonek -140 -KPX Y aring -140 -KPX Y atilde -140 -KPX Y colon -60 -KPX Y comma -140 -KPX Y e -140 -KPX Y eacute -140 -KPX Y ecaron -140 -KPX Y ecircumflex -140 -KPX Y edieresis -140 -KPX Y edotaccent -140 -KPX Y egrave -140 -KPX Y emacron -70 -KPX Y eogonek -140 -KPX Y hyphen -140 -KPX Y i -20 -KPX Y iacute -20 -KPX Y iogonek -20 -KPX Y o -140 -KPX Y oacute -140 -KPX Y ocircumflex -140 -KPX Y odieresis -140 -KPX Y ograve -140 -KPX Y ohungarumlaut -140 -KPX Y omacron -140 -KPX Y oslash -140 -KPX Y otilde -140 -KPX Y period -140 -KPX Y semicolon -60 -KPX Y u -110 -KPX Y uacute -110 -KPX Y ucircumflex -110 -KPX Y udieresis -110 -KPX Y ugrave -110 -KPX Y uhungarumlaut -110 -KPX Y umacron -110 -KPX Y uogonek -110 -KPX Y uring -110 -KPX Yacute A -110 -KPX Yacute Aacute -110 -KPX Yacute Abreve -110 -KPX Yacute Acircumflex -110 -KPX Yacute Adieresis -110 -KPX Yacute Agrave -110 -KPX Yacute Amacron -110 -KPX Yacute Aogonek -110 -KPX Yacute Aring -110 -KPX Yacute Atilde -110 -KPX Yacute O -85 -KPX Yacute Oacute -85 -KPX Yacute Ocircumflex -85 -KPX Yacute Odieresis -85 -KPX Yacute Ograve -85 -KPX Yacute Ohungarumlaut -85 -KPX Yacute Omacron -85 -KPX Yacute Oslash -85 -KPX Yacute Otilde -85 -KPX Yacute a -140 -KPX Yacute aacute -140 -KPX Yacute abreve -70 -KPX Yacute acircumflex -140 -KPX Yacute adieresis -140 -KPX Yacute agrave -140 -KPX Yacute amacron -70 -KPX Yacute aogonek -140 -KPX Yacute aring -140 -KPX Yacute atilde -70 -KPX Yacute colon -60 -KPX Yacute comma -140 -KPX Yacute e -140 -KPX Yacute eacute -140 -KPX Yacute ecaron -140 -KPX Yacute ecircumflex -140 -KPX Yacute edieresis -140 -KPX Yacute edotaccent -140 -KPX Yacute egrave -140 -KPX Yacute emacron -70 -KPX Yacute eogonek -140 -KPX Yacute hyphen -140 -KPX Yacute i -20 -KPX Yacute iacute -20 -KPX Yacute iogonek -20 -KPX Yacute o -140 -KPX Yacute oacute -140 -KPX Yacute ocircumflex -140 -KPX Yacute odieresis -140 -KPX Yacute ograve -140 -KPX Yacute ohungarumlaut -140 -KPX Yacute omacron -70 -KPX Yacute oslash -140 -KPX Yacute otilde -140 -KPX Yacute period -140 -KPX Yacute semicolon -60 -KPX Yacute u -110 -KPX Yacute uacute -110 -KPX Yacute ucircumflex -110 -KPX Yacute udieresis -110 -KPX Yacute ugrave -110 -KPX Yacute uhungarumlaut -110 -KPX Yacute umacron -110 -KPX Yacute uogonek -110 -KPX Yacute uring -110 -KPX Ydieresis A -110 -KPX Ydieresis Aacute -110 -KPX Ydieresis Abreve -110 -KPX Ydieresis Acircumflex -110 -KPX Ydieresis Adieresis -110 -KPX Ydieresis Agrave -110 -KPX Ydieresis Amacron -110 -KPX Ydieresis Aogonek -110 -KPX Ydieresis Aring -110 -KPX Ydieresis Atilde -110 -KPX Ydieresis O -85 -KPX Ydieresis Oacute -85 -KPX Ydieresis Ocircumflex -85 -KPX Ydieresis Odieresis -85 -KPX Ydieresis Ograve -85 -KPX Ydieresis Ohungarumlaut -85 -KPX Ydieresis Omacron -85 -KPX Ydieresis Oslash -85 -KPX Ydieresis Otilde -85 -KPX Ydieresis a -140 -KPX Ydieresis aacute -140 -KPX Ydieresis abreve -70 -KPX Ydieresis acircumflex -140 -KPX Ydieresis adieresis -140 -KPX Ydieresis agrave -140 -KPX Ydieresis amacron -70 -KPX Ydieresis aogonek -140 -KPX Ydieresis aring -140 -KPX Ydieresis atilde -70 -KPX Ydieresis colon -60 -KPX Ydieresis comma -140 -KPX Ydieresis e -140 -KPX Ydieresis eacute -140 -KPX Ydieresis ecaron -140 -KPX Ydieresis ecircumflex -140 -KPX Ydieresis edieresis -140 -KPX Ydieresis edotaccent -140 -KPX Ydieresis egrave -140 -KPX Ydieresis emacron -70 -KPX Ydieresis eogonek -140 -KPX Ydieresis hyphen -140 -KPX Ydieresis i -20 -KPX Ydieresis iacute -20 -KPX Ydieresis iogonek -20 -KPX Ydieresis o -140 -KPX Ydieresis oacute -140 -KPX Ydieresis ocircumflex -140 -KPX Ydieresis odieresis -140 -KPX Ydieresis ograve -140 -KPX Ydieresis ohungarumlaut -140 -KPX Ydieresis omacron -140 -KPX Ydieresis oslash -140 -KPX Ydieresis otilde -140 -KPX Ydieresis period -140 -KPX Ydieresis semicolon -60 -KPX Ydieresis u -110 -KPX Ydieresis uacute -110 -KPX Ydieresis ucircumflex -110 -KPX Ydieresis udieresis -110 -KPX Ydieresis ugrave -110 -KPX Ydieresis uhungarumlaut -110 -KPX Ydieresis umacron -110 -KPX Ydieresis uogonek -110 -KPX Ydieresis uring -110 -KPX a v -20 -KPX a w -20 -KPX a y -30 -KPX a yacute -30 -KPX a ydieresis -30 -KPX aacute v -20 -KPX aacute w -20 -KPX aacute y -30 -KPX aacute yacute -30 -KPX aacute ydieresis -30 -KPX abreve v -20 -KPX abreve w -20 -KPX abreve y -30 -KPX abreve yacute -30 -KPX abreve ydieresis -30 -KPX acircumflex v -20 -KPX acircumflex w -20 -KPX acircumflex y -30 -KPX acircumflex yacute -30 -KPX acircumflex ydieresis -30 -KPX adieresis v -20 -KPX adieresis w -20 -KPX adieresis y -30 -KPX adieresis yacute -30 -KPX adieresis ydieresis -30 -KPX agrave v -20 -KPX agrave w -20 -KPX agrave y -30 -KPX agrave yacute -30 -KPX agrave ydieresis -30 -KPX amacron v -20 -KPX amacron w -20 -KPX amacron y -30 -KPX amacron yacute -30 -KPX amacron ydieresis -30 -KPX aogonek v -20 -KPX aogonek w -20 -KPX aogonek y -30 -KPX aogonek yacute -30 -KPX aogonek ydieresis -30 -KPX aring v -20 -KPX aring w -20 -KPX aring y -30 -KPX aring yacute -30 -KPX aring ydieresis -30 -KPX atilde v -20 -KPX atilde w -20 -KPX atilde y -30 -KPX atilde yacute -30 -KPX atilde ydieresis -30 -KPX b b -10 -KPX b comma -40 -KPX b l -20 -KPX b lacute -20 -KPX b lcommaaccent -20 -KPX b lslash -20 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -20 -KPX b y -20 -KPX b yacute -20 -KPX b ydieresis -20 -KPX c comma -15 -KPX c k -20 -KPX c kcommaaccent -20 -KPX cacute comma -15 -KPX cacute k -20 -KPX cacute kcommaaccent -20 -KPX ccaron comma -15 -KPX ccaron k -20 -KPX ccaron kcommaaccent -20 -KPX ccedilla comma -15 -KPX ccedilla k -20 -KPX ccedilla kcommaaccent -20 -KPX colon space -50 -KPX comma quotedblright -100 -KPX comma quoteright -100 -KPX e comma -15 -KPX e period -15 -KPX e v -30 -KPX e w -20 -KPX e x -30 -KPX e y -20 -KPX e yacute -20 -KPX e ydieresis -20 -KPX eacute comma -15 -KPX eacute period -15 -KPX eacute v -30 -KPX eacute w -20 -KPX eacute x -30 -KPX eacute y -20 -KPX eacute yacute -20 -KPX eacute ydieresis -20 -KPX ecaron comma -15 -KPX ecaron period -15 -KPX ecaron v -30 -KPX ecaron w -20 -KPX ecaron x -30 -KPX ecaron y -20 -KPX ecaron yacute -20 -KPX ecaron ydieresis -20 -KPX ecircumflex comma -15 -KPX ecircumflex period -15 -KPX ecircumflex v -30 -KPX ecircumflex w -20 -KPX ecircumflex x -30 -KPX ecircumflex y -20 -KPX ecircumflex yacute -20 -KPX ecircumflex ydieresis -20 -KPX edieresis comma -15 -KPX edieresis period -15 -KPX edieresis v -30 -KPX edieresis w -20 -KPX edieresis x -30 -KPX edieresis y -20 -KPX edieresis yacute -20 -KPX edieresis ydieresis -20 -KPX edotaccent comma -15 -KPX edotaccent period -15 -KPX edotaccent v -30 -KPX edotaccent w -20 -KPX edotaccent x -30 -KPX edotaccent y -20 -KPX edotaccent yacute -20 -KPX edotaccent ydieresis -20 -KPX egrave comma -15 -KPX egrave period -15 -KPX egrave v -30 -KPX egrave w -20 -KPX egrave x -30 -KPX egrave y -20 -KPX egrave yacute -20 -KPX egrave ydieresis -20 -KPX emacron comma -15 -KPX emacron period -15 -KPX emacron v -30 -KPX emacron w -20 -KPX emacron x -30 -KPX emacron y -20 -KPX emacron yacute -20 -KPX emacron ydieresis -20 -KPX eogonek comma -15 -KPX eogonek period -15 -KPX eogonek v -30 -KPX eogonek w -20 -KPX eogonek x -30 -KPX eogonek y -20 -KPX eogonek yacute -20 -KPX eogonek ydieresis -20 -KPX f a -30 -KPX f aacute -30 -KPX f abreve -30 -KPX f acircumflex -30 -KPX f adieresis -30 -KPX f agrave -30 -KPX f amacron -30 -KPX f aogonek -30 -KPX f aring -30 -KPX f atilde -30 -KPX f comma -30 -KPX f dotlessi -28 -KPX f e -30 -KPX f eacute -30 -KPX f ecaron -30 -KPX f ecircumflex -30 -KPX f edieresis -30 -KPX f edotaccent -30 -KPX f egrave -30 -KPX f emacron -30 -KPX f eogonek -30 -KPX f o -30 -KPX f oacute -30 -KPX f ocircumflex -30 -KPX f odieresis -30 -KPX f ograve -30 -KPX f ohungarumlaut -30 -KPX f omacron -30 -KPX f oslash -30 -KPX f otilde -30 -KPX f period -30 -KPX f quotedblright 60 -KPX f quoteright 50 -KPX g r -10 -KPX g racute -10 -KPX g rcaron -10 -KPX g rcommaaccent -10 -KPX gbreve r -10 -KPX gbreve racute -10 -KPX gbreve rcaron -10 -KPX gbreve rcommaaccent -10 -KPX gcommaaccent r -10 -KPX gcommaaccent racute -10 -KPX gcommaaccent rcaron -10 -KPX gcommaaccent rcommaaccent -10 -KPX h y -30 -KPX h yacute -30 -KPX h ydieresis -30 -KPX k e -20 -KPX k eacute -20 -KPX k ecaron -20 -KPX k ecircumflex -20 -KPX k edieresis -20 -KPX k edotaccent -20 -KPX k egrave -20 -KPX k emacron -20 -KPX k eogonek -20 -KPX k o -20 -KPX k oacute -20 -KPX k ocircumflex -20 -KPX k odieresis -20 -KPX k ograve -20 -KPX k ohungarumlaut -20 -KPX k omacron -20 -KPX k oslash -20 -KPX k otilde -20 -KPX kcommaaccent e -20 -KPX kcommaaccent eacute -20 -KPX kcommaaccent ecaron -20 -KPX kcommaaccent ecircumflex -20 -KPX kcommaaccent edieresis -20 -KPX kcommaaccent edotaccent -20 -KPX kcommaaccent egrave -20 -KPX kcommaaccent emacron -20 -KPX kcommaaccent eogonek -20 -KPX kcommaaccent o -20 -KPX kcommaaccent oacute -20 -KPX kcommaaccent ocircumflex -20 -KPX kcommaaccent odieresis -20 -KPX kcommaaccent ograve -20 -KPX kcommaaccent ohungarumlaut -20 -KPX kcommaaccent omacron -20 -KPX kcommaaccent oslash -20 -KPX kcommaaccent otilde -20 -KPX m u -10 -KPX m uacute -10 -KPX m ucircumflex -10 -KPX m udieresis -10 -KPX m ugrave -10 -KPX m uhungarumlaut -10 -KPX m umacron -10 -KPX m uogonek -10 -KPX m uring -10 -KPX m y -15 -KPX m yacute -15 -KPX m ydieresis -15 -KPX n u -10 -KPX n uacute -10 -KPX n ucircumflex -10 -KPX n udieresis -10 -KPX n ugrave -10 -KPX n uhungarumlaut -10 -KPX n umacron -10 -KPX n uogonek -10 -KPX n uring -10 -KPX n v -20 -KPX n y -15 -KPX n yacute -15 -KPX n ydieresis -15 -KPX nacute u -10 -KPX nacute uacute -10 -KPX nacute ucircumflex -10 -KPX nacute udieresis -10 -KPX nacute ugrave -10 -KPX nacute uhungarumlaut -10 -KPX nacute umacron -10 -KPX nacute uogonek -10 -KPX nacute uring -10 -KPX nacute v -20 -KPX nacute y -15 -KPX nacute yacute -15 -KPX nacute ydieresis -15 -KPX ncaron u -10 -KPX ncaron uacute -10 -KPX ncaron ucircumflex -10 -KPX ncaron udieresis -10 -KPX ncaron ugrave -10 -KPX ncaron uhungarumlaut -10 -KPX ncaron umacron -10 -KPX ncaron uogonek -10 -KPX ncaron uring -10 -KPX ncaron v -20 -KPX ncaron y -15 -KPX ncaron yacute -15 -KPX ncaron ydieresis -15 -KPX ncommaaccent u -10 -KPX ncommaaccent uacute -10 -KPX ncommaaccent ucircumflex -10 -KPX ncommaaccent udieresis -10 -KPX ncommaaccent ugrave -10 -KPX ncommaaccent uhungarumlaut -10 -KPX ncommaaccent umacron -10 -KPX ncommaaccent uogonek -10 -KPX ncommaaccent uring -10 -KPX ncommaaccent v -20 -KPX ncommaaccent y -15 -KPX ncommaaccent yacute -15 -KPX ncommaaccent ydieresis -15 -KPX ntilde u -10 -KPX ntilde uacute -10 -KPX ntilde ucircumflex -10 -KPX ntilde udieresis -10 -KPX ntilde ugrave -10 -KPX ntilde uhungarumlaut -10 -KPX ntilde umacron -10 -KPX ntilde uogonek -10 -KPX ntilde uring -10 -KPX ntilde v -20 -KPX ntilde y -15 -KPX ntilde yacute -15 -KPX ntilde ydieresis -15 -KPX o comma -40 -KPX o period -40 -KPX o v -15 -KPX o w -15 -KPX o x -30 -KPX o y -30 -KPX o yacute -30 -KPX o ydieresis -30 -KPX oacute comma -40 -KPX oacute period -40 -KPX oacute v -15 -KPX oacute w -15 -KPX oacute x -30 -KPX oacute y -30 -KPX oacute yacute -30 -KPX oacute ydieresis -30 -KPX ocircumflex comma -40 -KPX ocircumflex period -40 -KPX ocircumflex v -15 -KPX ocircumflex w -15 -KPX ocircumflex x -30 -KPX ocircumflex y -30 -KPX ocircumflex yacute -30 -KPX ocircumflex ydieresis -30 -KPX odieresis comma -40 -KPX odieresis period -40 -KPX odieresis v -15 -KPX odieresis w -15 -KPX odieresis x -30 -KPX odieresis y -30 -KPX odieresis yacute -30 -KPX odieresis ydieresis -30 -KPX ograve comma -40 -KPX ograve period -40 -KPX ograve v -15 -KPX ograve w -15 -KPX ograve x -30 -KPX ograve y -30 -KPX ograve yacute -30 -KPX ograve ydieresis -30 -KPX ohungarumlaut comma -40 -KPX ohungarumlaut period -40 -KPX ohungarumlaut v -15 -KPX ohungarumlaut w -15 -KPX ohungarumlaut x -30 -KPX ohungarumlaut y -30 -KPX ohungarumlaut yacute -30 -KPX ohungarumlaut ydieresis -30 -KPX omacron comma -40 -KPX omacron period -40 -KPX omacron v -15 -KPX omacron w -15 -KPX omacron x -30 -KPX omacron y -30 -KPX omacron yacute -30 -KPX omacron ydieresis -30 -KPX oslash a -55 -KPX oslash aacute -55 -KPX oslash abreve -55 -KPX oslash acircumflex -55 -KPX oslash adieresis -55 -KPX oslash agrave -55 -KPX oslash amacron -55 -KPX oslash aogonek -55 -KPX oslash aring -55 -KPX oslash atilde -55 -KPX oslash b -55 -KPX oslash c -55 -KPX oslash cacute -55 -KPX oslash ccaron -55 -KPX oslash ccedilla -55 -KPX oslash comma -95 -KPX oslash d -55 -KPX oslash dcroat -55 -KPX oslash e -55 -KPX oslash eacute -55 -KPX oslash ecaron -55 -KPX oslash ecircumflex -55 -KPX oslash edieresis -55 -KPX oslash edotaccent -55 -KPX oslash egrave -55 -KPX oslash emacron -55 -KPX oslash eogonek -55 -KPX oslash f -55 -KPX oslash g -55 -KPX oslash gbreve -55 -KPX oslash gcommaaccent -55 -KPX oslash h -55 -KPX oslash i -55 -KPX oslash iacute -55 -KPX oslash icircumflex -55 -KPX oslash idieresis -55 -KPX oslash igrave -55 -KPX oslash imacron -55 -KPX oslash iogonek -55 -KPX oslash j -55 -KPX oslash k -55 -KPX oslash kcommaaccent -55 -KPX oslash l -55 -KPX oslash lacute -55 -KPX oslash lcommaaccent -55 -KPX oslash lslash -55 -KPX oslash m -55 -KPX oslash n -55 -KPX oslash nacute -55 -KPX oslash ncaron -55 -KPX oslash ncommaaccent -55 -KPX oslash ntilde -55 -KPX oslash o -55 -KPX oslash oacute -55 -KPX oslash ocircumflex -55 -KPX oslash odieresis -55 -KPX oslash ograve -55 -KPX oslash ohungarumlaut -55 -KPX oslash omacron -55 -KPX oslash oslash -55 -KPX oslash otilde -55 -KPX oslash p -55 -KPX oslash period -95 -KPX oslash q -55 -KPX oslash r -55 -KPX oslash racute -55 -KPX oslash rcaron -55 -KPX oslash rcommaaccent -55 -KPX oslash s -55 -KPX oslash sacute -55 -KPX oslash scaron -55 -KPX oslash scedilla -55 -KPX oslash scommaaccent -55 -KPX oslash t -55 -KPX oslash tcommaaccent -55 -KPX oslash u -55 -KPX oslash uacute -55 -KPX oslash ucircumflex -55 -KPX oslash udieresis -55 -KPX oslash ugrave -55 -KPX oslash uhungarumlaut -55 -KPX oslash umacron -55 -KPX oslash uogonek -55 -KPX oslash uring -55 -KPX oslash v -70 -KPX oslash w -70 -KPX oslash x -85 -KPX oslash y -70 -KPX oslash yacute -70 -KPX oslash ydieresis -70 -KPX oslash z -55 -KPX oslash zacute -55 -KPX oslash zcaron -55 -KPX oslash zdotaccent -55 -KPX otilde comma -40 -KPX otilde period -40 -KPX otilde v -15 -KPX otilde w -15 -KPX otilde x -30 -KPX otilde y -30 -KPX otilde yacute -30 -KPX otilde ydieresis -30 -KPX p comma -35 -KPX p period -35 -KPX p y -30 -KPX p yacute -30 -KPX p ydieresis -30 -KPX period quotedblright -100 -KPX period quoteright -100 -KPX period space -60 -KPX quotedblright space -40 -KPX quoteleft quoteleft -57 -KPX quoteright d -50 -KPX quoteright dcroat -50 -KPX quoteright quoteright -57 -KPX quoteright r -50 -KPX quoteright racute -50 -KPX quoteright rcaron -50 -KPX quoteright rcommaaccent -50 -KPX quoteright s -50 -KPX quoteright sacute -50 -KPX quoteright scaron -50 -KPX quoteright scedilla -50 -KPX quoteright scommaaccent -50 -KPX quoteright space -70 -KPX r a -10 -KPX r aacute -10 -KPX r abreve -10 -KPX r acircumflex -10 -KPX r adieresis -10 -KPX r agrave -10 -KPX r amacron -10 -KPX r aogonek -10 -KPX r aring -10 -KPX r atilde -10 -KPX r colon 30 -KPX r comma -50 -KPX r i 15 -KPX r iacute 15 -KPX r icircumflex 15 -KPX r idieresis 15 -KPX r igrave 15 -KPX r imacron 15 -KPX r iogonek 15 -KPX r k 15 -KPX r kcommaaccent 15 -KPX r l 15 -KPX r lacute 15 -KPX r lcommaaccent 15 -KPX r lslash 15 -KPX r m 25 -KPX r n 25 -KPX r nacute 25 -KPX r ncaron 25 -KPX r ncommaaccent 25 -KPX r ntilde 25 -KPX r p 30 -KPX r period -50 -KPX r semicolon 30 -KPX r t 40 -KPX r tcommaaccent 40 -KPX r u 15 -KPX r uacute 15 -KPX r ucircumflex 15 -KPX r udieresis 15 -KPX r ugrave 15 -KPX r uhungarumlaut 15 -KPX r umacron 15 -KPX r uogonek 15 -KPX r uring 15 -KPX r v 30 -KPX r y 30 -KPX r yacute 30 -KPX r ydieresis 30 -KPX racute a -10 -KPX racute aacute -10 -KPX racute abreve -10 -KPX racute acircumflex -10 -KPX racute adieresis -10 -KPX racute agrave -10 -KPX racute amacron -10 -KPX racute aogonek -10 -KPX racute aring -10 -KPX racute atilde -10 -KPX racute colon 30 -KPX racute comma -50 -KPX racute i 15 -KPX racute iacute 15 -KPX racute icircumflex 15 -KPX racute idieresis 15 -KPX racute igrave 15 -KPX racute imacron 15 -KPX racute iogonek 15 -KPX racute k 15 -KPX racute kcommaaccent 15 -KPX racute l 15 -KPX racute lacute 15 -KPX racute lcommaaccent 15 -KPX racute lslash 15 -KPX racute m 25 -KPX racute n 25 -KPX racute nacute 25 -KPX racute ncaron 25 -KPX racute ncommaaccent 25 -KPX racute ntilde 25 -KPX racute p 30 -KPX racute period -50 -KPX racute semicolon 30 -KPX racute t 40 -KPX racute tcommaaccent 40 -KPX racute u 15 -KPX racute uacute 15 -KPX racute ucircumflex 15 -KPX racute udieresis 15 -KPX racute ugrave 15 -KPX racute uhungarumlaut 15 -KPX racute umacron 15 -KPX racute uogonek 15 -KPX racute uring 15 -KPX racute v 30 -KPX racute y 30 -KPX racute yacute 30 -KPX racute ydieresis 30 -KPX rcaron a -10 -KPX rcaron aacute -10 -KPX rcaron abreve -10 -KPX rcaron acircumflex -10 -KPX rcaron adieresis -10 -KPX rcaron agrave -10 -KPX rcaron amacron -10 -KPX rcaron aogonek -10 -KPX rcaron aring -10 -KPX rcaron atilde -10 -KPX rcaron colon 30 -KPX rcaron comma -50 -KPX rcaron i 15 -KPX rcaron iacute 15 -KPX rcaron icircumflex 15 -KPX rcaron idieresis 15 -KPX rcaron igrave 15 -KPX rcaron imacron 15 -KPX rcaron iogonek 15 -KPX rcaron k 15 -KPX rcaron kcommaaccent 15 -KPX rcaron l 15 -KPX rcaron lacute 15 -KPX rcaron lcommaaccent 15 -KPX rcaron lslash 15 -KPX rcaron m 25 -KPX rcaron n 25 -KPX rcaron nacute 25 -KPX rcaron ncaron 25 -KPX rcaron ncommaaccent 25 -KPX rcaron ntilde 25 -KPX rcaron p 30 -KPX rcaron period -50 -KPX rcaron semicolon 30 -KPX rcaron t 40 -KPX rcaron tcommaaccent 40 -KPX rcaron u 15 -KPX rcaron uacute 15 -KPX rcaron ucircumflex 15 -KPX rcaron udieresis 15 -KPX rcaron ugrave 15 -KPX rcaron uhungarumlaut 15 -KPX rcaron umacron 15 -KPX rcaron uogonek 15 -KPX rcaron uring 15 -KPX rcaron v 30 -KPX rcaron y 30 -KPX rcaron yacute 30 -KPX rcaron ydieresis 30 -KPX rcommaaccent a -10 -KPX rcommaaccent aacute -10 -KPX rcommaaccent abreve -10 -KPX rcommaaccent acircumflex -10 -KPX rcommaaccent adieresis -10 -KPX rcommaaccent agrave -10 -KPX rcommaaccent amacron -10 -KPX rcommaaccent aogonek -10 -KPX rcommaaccent aring -10 -KPX rcommaaccent atilde -10 -KPX rcommaaccent colon 30 -KPX rcommaaccent comma -50 -KPX rcommaaccent i 15 -KPX rcommaaccent iacute 15 -KPX rcommaaccent icircumflex 15 -KPX rcommaaccent idieresis 15 -KPX rcommaaccent igrave 15 -KPX rcommaaccent imacron 15 -KPX rcommaaccent iogonek 15 -KPX rcommaaccent k 15 -KPX rcommaaccent kcommaaccent 15 -KPX rcommaaccent l 15 -KPX rcommaaccent lacute 15 -KPX rcommaaccent lcommaaccent 15 -KPX rcommaaccent lslash 15 -KPX rcommaaccent m 25 -KPX rcommaaccent n 25 -KPX rcommaaccent nacute 25 -KPX rcommaaccent ncaron 25 -KPX rcommaaccent ncommaaccent 25 -KPX rcommaaccent ntilde 25 -KPX rcommaaccent p 30 -KPX rcommaaccent period -50 -KPX rcommaaccent semicolon 30 -KPX rcommaaccent t 40 -KPX rcommaaccent tcommaaccent 40 -KPX rcommaaccent u 15 -KPX rcommaaccent uacute 15 -KPX rcommaaccent ucircumflex 15 -KPX rcommaaccent udieresis 15 -KPX rcommaaccent ugrave 15 -KPX rcommaaccent uhungarumlaut 15 -KPX rcommaaccent umacron 15 -KPX rcommaaccent uogonek 15 -KPX rcommaaccent uring 15 -KPX rcommaaccent v 30 -KPX rcommaaccent y 30 -KPX rcommaaccent yacute 30 -KPX rcommaaccent ydieresis 30 -KPX s comma -15 -KPX s period -15 -KPX s w -30 -KPX sacute comma -15 -KPX sacute period -15 -KPX sacute w -30 -KPX scaron comma -15 -KPX scaron period -15 -KPX scaron w -30 -KPX scedilla comma -15 -KPX scedilla period -15 -KPX scedilla w -30 -KPX scommaaccent comma -15 -KPX scommaaccent period -15 -KPX scommaaccent w -30 -KPX semicolon space -50 -KPX space T -50 -KPX space Tcaron -50 -KPX space Tcommaaccent -50 -KPX space V -50 -KPX space W -40 -KPX space Y -90 -KPX space Yacute -90 -KPX space Ydieresis -90 -KPX space quotedblleft -30 -KPX space quoteleft -60 -KPX v a -25 -KPX v aacute -25 -KPX v abreve -25 -KPX v acircumflex -25 -KPX v adieresis -25 -KPX v agrave -25 -KPX v amacron -25 -KPX v aogonek -25 -KPX v aring -25 -KPX v atilde -25 -KPX v comma -80 -KPX v e -25 -KPX v eacute -25 -KPX v ecaron -25 -KPX v ecircumflex -25 -KPX v edieresis -25 -KPX v edotaccent -25 -KPX v egrave -25 -KPX v emacron -25 -KPX v eogonek -25 -KPX v o -25 -KPX v oacute -25 -KPX v ocircumflex -25 -KPX v odieresis -25 -KPX v ograve -25 -KPX v ohungarumlaut -25 -KPX v omacron -25 -KPX v oslash -25 -KPX v otilde -25 -KPX v period -80 -KPX w a -15 -KPX w aacute -15 -KPX w abreve -15 -KPX w acircumflex -15 -KPX w adieresis -15 -KPX w agrave -15 -KPX w amacron -15 -KPX w aogonek -15 -KPX w aring -15 -KPX w atilde -15 -KPX w comma -60 -KPX w e -10 -KPX w eacute -10 -KPX w ecaron -10 -KPX w ecircumflex -10 -KPX w edieresis -10 -KPX w edotaccent -10 -KPX w egrave -10 -KPX w emacron -10 -KPX w eogonek -10 -KPX w o -10 -KPX w oacute -10 -KPX w ocircumflex -10 -KPX w odieresis -10 -KPX w ograve -10 -KPX w ohungarumlaut -10 -KPX w omacron -10 -KPX w oslash -10 -KPX w otilde -10 -KPX w period -60 -KPX x e -30 -KPX x eacute -30 -KPX x ecaron -30 -KPX x ecircumflex -30 -KPX x edieresis -30 -KPX x edotaccent -30 -KPX x egrave -30 -KPX x emacron -30 -KPX x eogonek -30 -KPX y a -20 -KPX y aacute -20 -KPX y abreve -20 -KPX y acircumflex -20 -KPX y adieresis -20 -KPX y agrave -20 -KPX y amacron -20 -KPX y aogonek -20 -KPX y aring -20 -KPX y atilde -20 -KPX y comma -100 -KPX y e -20 -KPX y eacute -20 -KPX y ecaron -20 -KPX y ecircumflex -20 -KPX y edieresis -20 -KPX y edotaccent -20 -KPX y egrave -20 -KPX y emacron -20 -KPX y eogonek -20 -KPX y o -20 -KPX y oacute -20 -KPX y ocircumflex -20 -KPX y odieresis -20 -KPX y ograve -20 -KPX y ohungarumlaut -20 -KPX y omacron -20 -KPX y oslash -20 -KPX y otilde -20 -KPX y period -100 -KPX yacute a -20 -KPX yacute aacute -20 -KPX yacute abreve -20 -KPX yacute acircumflex -20 -KPX yacute adieresis -20 -KPX yacute agrave -20 -KPX yacute amacron -20 -KPX yacute aogonek -20 -KPX yacute aring -20 -KPX yacute atilde -20 -KPX yacute comma -100 -KPX yacute e -20 -KPX yacute eacute -20 -KPX yacute ecaron -20 -KPX yacute ecircumflex -20 -KPX yacute edieresis -20 -KPX yacute edotaccent -20 -KPX yacute egrave -20 -KPX yacute emacron -20 -KPX yacute eogonek -20 -KPX yacute o -20 -KPX yacute oacute -20 -KPX yacute ocircumflex -20 -KPX yacute odieresis -20 -KPX yacute ograve -20 -KPX yacute ohungarumlaut -20 -KPX yacute omacron -20 -KPX yacute oslash -20 -KPX yacute otilde -20 -KPX yacute period -100 -KPX ydieresis a -20 -KPX ydieresis aacute -20 -KPX ydieresis abreve -20 -KPX ydieresis acircumflex -20 -KPX ydieresis adieresis -20 -KPX ydieresis agrave -20 -KPX ydieresis amacron -20 -KPX ydieresis aogonek -20 -KPX ydieresis aring -20 -KPX ydieresis atilde -20 -KPX ydieresis comma -100 -KPX ydieresis e -20 -KPX ydieresis eacute -20 -KPX ydieresis ecaron -20 -KPX ydieresis ecircumflex -20 -KPX ydieresis edieresis -20 -KPX ydieresis edotaccent -20 -KPX ydieresis egrave -20 -KPX ydieresis emacron -20 -KPX ydieresis eogonek -20 -KPX ydieresis o -20 -KPX ydieresis oacute -20 -KPX ydieresis ocircumflex -20 -KPX ydieresis odieresis -20 -KPX ydieresis ograve -20 -KPX ydieresis ohungarumlaut -20 -KPX ydieresis omacron -20 -KPX ydieresis oslash -20 -KPX ydieresis otilde -20 -KPX ydieresis period -100 -KPX z e -15 -KPX z eacute -15 -KPX z ecaron -15 -KPX z ecircumflex -15 -KPX z edieresis -15 -KPX z edotaccent -15 -KPX z egrave -15 -KPX z emacron -15 -KPX z eogonek -15 -KPX z o -15 -KPX z oacute -15 -KPX z ocircumflex -15 -KPX z odieresis -15 -KPX z ograve -15 -KPX z ohungarumlaut -15 -KPX z omacron -15 -KPX z oslash -15 -KPX z otilde -15 -KPX zacute e -15 -KPX zacute eacute -15 -KPX zacute ecaron -15 -KPX zacute ecircumflex -15 -KPX zacute edieresis -15 -KPX zacute edotaccent -15 -KPX zacute egrave -15 -KPX zacute emacron -15 -KPX zacute eogonek -15 -KPX zacute o -15 -KPX zacute oacute -15 -KPX zacute ocircumflex -15 -KPX zacute odieresis -15 -KPX zacute ograve -15 -KPX zacute ohungarumlaut -15 -KPX zacute omacron -15 -KPX zacute oslash -15 -KPX zacute otilde -15 -KPX zcaron e -15 -KPX zcaron eacute -15 -KPX zcaron ecaron -15 -KPX zcaron ecircumflex -15 -KPX zcaron edieresis -15 -KPX zcaron edotaccent -15 -KPX zcaron egrave -15 -KPX zcaron emacron -15 -KPX zcaron eogonek -15 -KPX zcaron o -15 -KPX zcaron oacute -15 -KPX zcaron ocircumflex -15 -KPX zcaron odieresis -15 -KPX zcaron ograve -15 -KPX zcaron ohungarumlaut -15 -KPX zcaron omacron -15 -KPX zcaron oslash -15 -KPX zcaron otilde -15 -KPX zdotaccent e -15 -KPX zdotaccent eacute -15 -KPX zdotaccent ecaron -15 -KPX zdotaccent ecircumflex -15 -KPX zdotaccent edieresis -15 -KPX zdotaccent edotaccent -15 -KPX zdotaccent egrave -15 -KPX zdotaccent emacron -15 -KPX zdotaccent eogonek -15 -KPX zdotaccent o -15 -KPX zdotaccent oacute -15 -KPX zdotaccent ocircumflex -15 -KPX zdotaccent odieresis -15 -KPX zdotaccent ograve -15 -KPX zdotaccent ohungarumlaut -15 -KPX zdotaccent omacron -15 -KPX zdotaccent oslash -15 -KPX zdotaccent otilde -15 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Symbol.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Symbol.afm deleted file mode 100644 index 524cfb6..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Symbol.afm +++ /dev/null @@ -1,213 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. -Comment Creation Date: Thu May 1 15:12:25 1997 -Comment UniqueID 43064 -Comment VMusage 30820 39997 -FontName Symbol -FullName Symbol -FamilyName Symbol -Weight Medium -ItalicAngle 0 -IsFixedPitch false -CharacterSet Special -FontBBox -180 -293 1090 1010 -UnderlinePosition -100 -UnderlineThickness 50 -Version 001.008 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. -EncodingScheme FontSpecific -StdHW 92 -StdVW 85 -StartCharMetrics 190 -C 32 ; WX 250 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ; -C 34 ; WX 713 ; N universal ; B 31 0 681 705 ; -C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ; -C 36 ; WX 549 ; N existential ; B 25 0 478 707 ; -C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ; -C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ; -C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ; -C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ; -C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ; -C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ; -C 43 ; WX 549 ; N plus ; B 10 0 539 533 ; -C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ; -C 45 ; WX 549 ; N minus ; B 11 233 535 288 ; -C 46 ; WX 250 ; N period ; B 69 -17 181 95 ; -C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ; -C 48 ; WX 500 ; N zero ; B 24 -14 476 685 ; -C 49 ; WX 500 ; N one ; B 117 0 390 673 ; -C 50 ; WX 500 ; N two ; B 25 0 475 685 ; -C 51 ; WX 500 ; N three ; B 43 -14 435 685 ; -C 52 ; WX 500 ; N four ; B 15 0 469 685 ; -C 53 ; WX 500 ; N five ; B 32 -14 445 690 ; -C 54 ; WX 500 ; N six ; B 34 -14 468 685 ; -C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ; -C 56 ; WX 500 ; N eight ; B 56 -14 445 685 ; -C 57 ; WX 500 ; N nine ; B 30 -18 459 685 ; -C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ; -C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ; -C 60 ; WX 549 ; N less ; B 26 0 523 522 ; -C 61 ; WX 549 ; N equal ; B 11 141 537 390 ; -C 62 ; WX 549 ; N greater ; B 26 0 523 522 ; -C 63 ; WX 444 ; N question ; B 70 -17 412 686 ; -C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ; -C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ; -C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ; -C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ; -C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ; -C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ; -C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ; -C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ; -C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ; -C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ; -C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ; -C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ; -C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ; -C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ; -C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ; -C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ; -C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ; -C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ; -C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ; -C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ; -C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ; -C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ; -C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ; -C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; -C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ; -C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; -C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ; -C 92 ; WX 863 ; N therefore ; B 163 0 701 487 ; -C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ; -C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ; -C 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ; -C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ; -C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ; -C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ; -C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ; -C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ; -C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ; -C 102 ; WX 521 ; N phi ; B 28 -224 492 673 ; -C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ; -C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ; -C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ; -C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ; -C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ; -C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ; -C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ; -C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ; -C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ; -C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ; -C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ; -C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ; -C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ; -C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ; -C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ; -C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ; -C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ; -C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ; -C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ; -C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ; -C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ; -C 124 ; WX 200 ; N bar ; B 65 -293 135 707 ; -C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ; -C 126 ; WX 549 ; N similar ; B 17 203 529 307 ; -C 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ; -C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ; -C 162 ; WX 247 ; N minute ; B 27 459 228 735 ; -C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; -C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ; -C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ; -C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ; -C 167 ; WX 753 ; N club ; B 86 -26 660 533 ; -C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ; -C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ; -C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ; -C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ; -C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ; -C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ; -C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ; -C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ; -C 176 ; WX 400 ; N degree ; B 50 385 350 685 ; -C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ; -C 178 ; WX 411 ; N second ; B 20 459 413 737 ; -C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ; -C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ; -C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ; -C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ; -C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ; -C 184 ; WX 549 ; N divide ; B 10 71 536 456 ; -C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ; -C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ; -C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ; -C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ; -C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ; -C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ; -C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ; -C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ; -C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ; -C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ; -C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ; -C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ; -C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ; -C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ; -C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ; -C 200 ; WX 768 ; N union ; B 40 -17 732 492 ; -C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ; -C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ; -C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ; -C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ; -C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ; -C 206 ; WX 713 ; N element ; B 45 0 505 468 ; -C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ; -C 208 ; WX 768 ; N angle ; B 26 0 738 673 ; -C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ; -C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ; -C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ; -C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ; -C 213 ; WX 823 ; N product ; B 25 -101 803 751 ; -C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ; -C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ; -C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ; -C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ; -C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ; -C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ; -C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ; -C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ; -C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ; -C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ; -C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ; -C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ; -C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ; -C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ; -C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ; -C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ; -C 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ; -C 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ; -C 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ; -C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ; -C 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ; -C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ; -C 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ; -C 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ; -C 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ; -C 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ; -C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ; -C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; -C 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ; -C 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ; -C 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ; -C 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ; -C 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ; -C 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ; -C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ; -C 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ; -C 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ; -C 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ; -C 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ; -C 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ; -C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Bold.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Times-Bold.afm deleted file mode 100644 index ee718a2..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Bold.afm +++ /dev/null @@ -1,2588 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:52:56 1997 -Comment UniqueID 43065 -Comment VMusage 41636 52661 -FontName Times-Bold -FullName Times Bold -FamilyName Times -Weight Bold -ItalicAngle 0 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -168 -218 1000 935 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 676 -XHeight 461 -Ascender 683 -Descender -217 -StdHW 44 -StdVW 139 -StartCharMetrics 315 -C 32 ; WX 250 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ; -C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ; -C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ; -C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ; -C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ; -C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ; -C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ; -C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ; -C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ; -C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ; -C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; -C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ; -C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ; -C 46 ; WX 250 ; N period ; B 41 -13 210 156 ; -C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ; -C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ; -C 49 ; WX 500 ; N one ; B 65 0 442 688 ; -C 50 ; WX 500 ; N two ; B 17 0 478 688 ; -C 51 ; WX 500 ; N three ; B 16 -14 468 688 ; -C 52 ; WX 500 ; N four ; B 19 0 475 688 ; -C 53 ; WX 500 ; N five ; B 22 -8 470 676 ; -C 54 ; WX 500 ; N six ; B 28 -13 475 688 ; -C 55 ; WX 500 ; N seven ; B 17 0 477 676 ; -C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ; -C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ; -C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ; -C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ; -C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; -C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; -C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; -C 63 ; WX 500 ; N question ; B 57 -13 445 689 ; -C 64 ; WX 930 ; N at ; B 108 -19 822 691 ; -C 65 ; WX 722 ; N A ; B 9 0 689 690 ; -C 66 ; WX 667 ; N B ; B 16 0 619 676 ; -C 67 ; WX 722 ; N C ; B 49 -19 687 691 ; -C 68 ; WX 722 ; N D ; B 14 0 690 676 ; -C 69 ; WX 667 ; N E ; B 16 0 641 676 ; -C 70 ; WX 611 ; N F ; B 16 0 583 676 ; -C 71 ; WX 778 ; N G ; B 37 -19 755 691 ; -C 72 ; WX 778 ; N H ; B 21 0 759 676 ; -C 73 ; WX 389 ; N I ; B 20 0 370 676 ; -C 74 ; WX 500 ; N J ; B 3 -96 479 676 ; -C 75 ; WX 778 ; N K ; B 30 0 769 676 ; -C 76 ; WX 667 ; N L ; B 19 0 638 676 ; -C 77 ; WX 944 ; N M ; B 14 0 921 676 ; -C 78 ; WX 722 ; N N ; B 16 -18 701 676 ; -C 79 ; WX 778 ; N O ; B 35 -19 743 691 ; -C 80 ; WX 611 ; N P ; B 16 0 600 676 ; -C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ; -C 82 ; WX 722 ; N R ; B 26 0 715 676 ; -C 83 ; WX 556 ; N S ; B 35 -19 513 692 ; -C 84 ; WX 667 ; N T ; B 31 0 636 676 ; -C 85 ; WX 722 ; N U ; B 16 -19 701 676 ; -C 86 ; WX 722 ; N V ; B 16 -18 701 676 ; -C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ; -C 88 ; WX 722 ; N X ; B 16 0 699 676 ; -C 89 ; WX 722 ; N Y ; B 15 0 699 676 ; -C 90 ; WX 667 ; N Z ; B 28 0 634 676 ; -C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ; -C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ; -C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ; -C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ; -C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; -C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ; -C 97 ; WX 500 ; N a ; B 25 -14 488 473 ; -C 98 ; WX 556 ; N b ; B 17 -14 521 676 ; -C 99 ; WX 444 ; N c ; B 25 -14 430 473 ; -C 100 ; WX 556 ; N d ; B 25 -14 534 676 ; -C 101 ; WX 444 ; N e ; B 25 -14 426 473 ; -C 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ; -C 103 ; WX 500 ; N g ; B 28 -206 483 473 ; -C 104 ; WX 556 ; N h ; B 16 0 534 676 ; -C 105 ; WX 278 ; N i ; B 16 0 255 691 ; -C 106 ; WX 333 ; N j ; B -57 -203 263 691 ; -C 107 ; WX 556 ; N k ; B 22 0 543 676 ; -C 108 ; WX 278 ; N l ; B 16 0 255 676 ; -C 109 ; WX 833 ; N m ; B 16 0 814 473 ; -C 110 ; WX 556 ; N n ; B 21 0 539 473 ; -C 111 ; WX 500 ; N o ; B 25 -14 476 473 ; -C 112 ; WX 556 ; N p ; B 19 -205 524 473 ; -C 113 ; WX 556 ; N q ; B 34 -205 536 473 ; -C 114 ; WX 444 ; N r ; B 29 0 434 473 ; -C 115 ; WX 389 ; N s ; B 25 -14 361 473 ; -C 116 ; WX 333 ; N t ; B 20 -12 332 630 ; -C 117 ; WX 556 ; N u ; B 16 -14 537 461 ; -C 118 ; WX 500 ; N v ; B 21 -14 485 461 ; -C 119 ; WX 722 ; N w ; B 23 -14 707 461 ; -C 120 ; WX 500 ; N x ; B 12 0 484 461 ; -C 121 ; WX 500 ; N y ; B 16 -205 480 461 ; -C 122 ; WX 444 ; N z ; B 21 0 420 461 ; -C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ; -C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; -C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ; -C 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ; -C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ; -C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ; -C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ; -C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ; -C 165 ; WX 500 ; N yen ; B -64 0 547 676 ; -C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ; -C 167 ; WX 500 ; N section ; B 57 -132 443 691 ; -C 168 ; WX 500 ; N currency ; B -26 61 526 613 ; -C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ; -C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ; -C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ; -C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ; -C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ; -C 174 ; WX 556 ; N fi ; B 14 0 536 691 ; -C 175 ; WX 556 ; N fl ; B 14 0 536 691 ; -C 177 ; WX 500 ; N endash ; B 0 181 500 271 ; -C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ; -C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ; -C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ; -C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ; -C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ; -C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ; -C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ; -C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ; -C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ; -C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ; -C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ; -C 193 ; WX 333 ; N grave ; B 8 528 246 713 ; -C 194 ; WX 333 ; N acute ; B 86 528 324 713 ; -C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ; -C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ; -C 197 ; WX 333 ; N macron ; B 1 565 331 637 ; -C 198 ; WX 333 ; N breve ; B 15 528 318 691 ; -C 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ; -C 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ; -C 202 ; WX 333 ; N ring ; B 60 527 273 740 ; -C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ; -C 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ; -C 207 ; WX 333 ; N caron ; B -2 528 335 704 ; -C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ; -C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ; -C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ; -C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ; -C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ; -C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ; -C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ; -C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ; -C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ; -C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ; -C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ; -C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ; -C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ; -C -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ; -C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ; -C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ; -C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ; -C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ; -C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ; -C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ; -C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ; -C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ; -C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ; -C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ; -C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ; -C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ; -C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ; -C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ; -C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ; -C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ; -C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ; -C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ; -C -1 ; WX 667 ; N Edieresis ; B 16 0 641 877 ; -C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ; -C -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ; -C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ; -C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ; -C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ; -C -1 ; WX 500 ; N aring ; B 25 -14 488 740 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ; -C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ; -C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ; -C -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ; -C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ; -C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ; -C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ; -C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ; -C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ; -C -1 ; WX 278 ; N iacute ; B 16 0 289 713 ; -C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; -C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ; -C -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ; -C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ; -C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ; -C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ; -C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ; -C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ; -C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ; -C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ; -C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ; -C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ; -C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ; -C -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ; -C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ; -C -1 ; WX 556 ; N uring ; B 16 -14 537 740 ; -C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ; -C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ; -C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ; -C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ; -C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; -C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ; -C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ; -C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; -C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ; -C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ; -C -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ; -C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ; -C -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ; -C -1 ; WX 444 ; N edieresis ; B 25 -14 426 667 ; -C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ; -C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ; -C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ; -C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ; -C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ; -C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; -C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; -C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ; -C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ; -C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ; -C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; -C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ; -C -1 ; WX 444 ; N racute ; B 29 0 434 713 ; -C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ; -C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ; -C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ; -C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ; -C -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ; -C -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ; -C -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ; -C -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ; -C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ; -C -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ; -C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ; -C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ; -C -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ; -C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ; -C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ; -C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ; -C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ; -C -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ; -C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ; -C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ; -C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ; -C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ; -C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ; -C -1 ; WX 278 ; N igrave ; B -27 0 255 713 ; -C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ; -C -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ; -C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ; -C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ; -C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ; -C -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ; -C -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ; -C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ; -C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ; -C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ; -C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ; -C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ; -C -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ; -C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ; -C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ; -C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ; -C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ; -C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ; -C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ; -C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ; -C -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ; -C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ; -C -1 ; WX 400 ; N degree ; B 57 402 343 688 ; -C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ; -C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ; -C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ; -C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; -C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ; -C -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ; -C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ; -C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ; -C -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ; -C -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ; -C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ; -C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ; -C -1 ; WX 722 ; N Aring ; B 9 0 689 935 ; -C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ; -C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ; -C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ; -C -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ; -C -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ; -C -1 ; WX 570 ; N minus ; B 33 209 537 297 ; -C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ; -C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ; -C -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ; -C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ; -C -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ; -C -1 ; WX 556 ; N udieresis ; B 16 -14 537 667 ; -C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; -C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ; -C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ; -C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ; -C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ; -C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ; -C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ; -C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2242 -KPX A C -55 -KPX A Cacute -55 -KPX A Ccaron -55 -KPX A Ccedilla -55 -KPX A G -55 -KPX A Gbreve -55 -KPX A Gcommaaccent -55 -KPX A O -45 -KPX A Oacute -45 -KPX A Ocircumflex -45 -KPX A Odieresis -45 -KPX A Ograve -45 -KPX A Ohungarumlaut -45 -KPX A Omacron -45 -KPX A Oslash -45 -KPX A Otilde -45 -KPX A Q -45 -KPX A T -95 -KPX A Tcaron -95 -KPX A Tcommaaccent -95 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -145 -KPX A W -130 -KPX A Y -100 -KPX A Yacute -100 -KPX A Ydieresis -100 -KPX A p -25 -KPX A quoteright -74 -KPX A u -50 -KPX A uacute -50 -KPX A ucircumflex -50 -KPX A udieresis -50 -KPX A ugrave -50 -KPX A uhungarumlaut -50 -KPX A umacron -50 -KPX A uogonek -50 -KPX A uring -50 -KPX A v -100 -KPX A w -90 -KPX A y -74 -KPX A yacute -74 -KPX A ydieresis -74 -KPX Aacute C -55 -KPX Aacute Cacute -55 -KPX Aacute Ccaron -55 -KPX Aacute Ccedilla -55 -KPX Aacute G -55 -KPX Aacute Gbreve -55 -KPX Aacute Gcommaaccent -55 -KPX Aacute O -45 -KPX Aacute Oacute -45 -KPX Aacute Ocircumflex -45 -KPX Aacute Odieresis -45 -KPX Aacute Ograve -45 -KPX Aacute Ohungarumlaut -45 -KPX Aacute Omacron -45 -KPX Aacute Oslash -45 -KPX Aacute Otilde -45 -KPX Aacute Q -45 -KPX Aacute T -95 -KPX Aacute Tcaron -95 -KPX Aacute Tcommaaccent -95 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -145 -KPX Aacute W -130 -KPX Aacute Y -100 -KPX Aacute Yacute -100 -KPX Aacute Ydieresis -100 -KPX Aacute p -25 -KPX Aacute quoteright -74 -KPX Aacute u -50 -KPX Aacute uacute -50 -KPX Aacute ucircumflex -50 -KPX Aacute udieresis -50 -KPX Aacute ugrave -50 -KPX Aacute uhungarumlaut -50 -KPX Aacute umacron -50 -KPX Aacute uogonek -50 -KPX Aacute uring -50 -KPX Aacute v -100 -KPX Aacute w -90 -KPX Aacute y -74 -KPX Aacute yacute -74 -KPX Aacute ydieresis -74 -KPX Abreve C -55 -KPX Abreve Cacute -55 -KPX Abreve Ccaron -55 -KPX Abreve Ccedilla -55 -KPX Abreve G -55 -KPX Abreve Gbreve -55 -KPX Abreve Gcommaaccent -55 -KPX Abreve O -45 -KPX Abreve Oacute -45 -KPX Abreve Ocircumflex -45 -KPX Abreve Odieresis -45 -KPX Abreve Ograve -45 -KPX Abreve Ohungarumlaut -45 -KPX Abreve Omacron -45 -KPX Abreve Oslash -45 -KPX Abreve Otilde -45 -KPX Abreve Q -45 -KPX Abreve T -95 -KPX Abreve Tcaron -95 -KPX Abreve Tcommaaccent -95 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -145 -KPX Abreve W -130 -KPX Abreve Y -100 -KPX Abreve Yacute -100 -KPX Abreve Ydieresis -100 -KPX Abreve p -25 -KPX Abreve quoteright -74 -KPX Abreve u -50 -KPX Abreve uacute -50 -KPX Abreve ucircumflex -50 -KPX Abreve udieresis -50 -KPX Abreve ugrave -50 -KPX Abreve uhungarumlaut -50 -KPX Abreve umacron -50 -KPX Abreve uogonek -50 -KPX Abreve uring -50 -KPX Abreve v -100 -KPX Abreve w -90 -KPX Abreve y -74 -KPX Abreve yacute -74 -KPX Abreve ydieresis -74 -KPX Acircumflex C -55 -KPX Acircumflex Cacute -55 -KPX Acircumflex Ccaron -55 -KPX Acircumflex Ccedilla -55 -KPX Acircumflex G -55 -KPX Acircumflex Gbreve -55 -KPX Acircumflex Gcommaaccent -55 -KPX Acircumflex O -45 -KPX Acircumflex Oacute -45 -KPX Acircumflex Ocircumflex -45 -KPX Acircumflex Odieresis -45 -KPX Acircumflex Ograve -45 -KPX Acircumflex Ohungarumlaut -45 -KPX Acircumflex Omacron -45 -KPX Acircumflex Oslash -45 -KPX Acircumflex Otilde -45 -KPX Acircumflex Q -45 -KPX Acircumflex T -95 -KPX Acircumflex Tcaron -95 -KPX Acircumflex Tcommaaccent -95 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -145 -KPX Acircumflex W -130 -KPX Acircumflex Y -100 -KPX Acircumflex Yacute -100 -KPX Acircumflex Ydieresis -100 -KPX Acircumflex p -25 -KPX Acircumflex quoteright -74 -KPX Acircumflex u -50 -KPX Acircumflex uacute -50 -KPX Acircumflex ucircumflex -50 -KPX Acircumflex udieresis -50 -KPX Acircumflex ugrave -50 -KPX Acircumflex uhungarumlaut -50 -KPX Acircumflex umacron -50 -KPX Acircumflex uogonek -50 -KPX Acircumflex uring -50 -KPX Acircumflex v -100 -KPX Acircumflex w -90 -KPX Acircumflex y -74 -KPX Acircumflex yacute -74 -KPX Acircumflex ydieresis -74 -KPX Adieresis C -55 -KPX Adieresis Cacute -55 -KPX Adieresis Ccaron -55 -KPX Adieresis Ccedilla -55 -KPX Adieresis G -55 -KPX Adieresis Gbreve -55 -KPX Adieresis Gcommaaccent -55 -KPX Adieresis O -45 -KPX Adieresis Oacute -45 -KPX Adieresis Ocircumflex -45 -KPX Adieresis Odieresis -45 -KPX Adieresis Ograve -45 -KPX Adieresis Ohungarumlaut -45 -KPX Adieresis Omacron -45 -KPX Adieresis Oslash -45 -KPX Adieresis Otilde -45 -KPX Adieresis Q -45 -KPX Adieresis T -95 -KPX Adieresis Tcaron -95 -KPX Adieresis Tcommaaccent -95 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -145 -KPX Adieresis W -130 -KPX Adieresis Y -100 -KPX Adieresis Yacute -100 -KPX Adieresis Ydieresis -100 -KPX Adieresis p -25 -KPX Adieresis quoteright -74 -KPX Adieresis u -50 -KPX Adieresis uacute -50 -KPX Adieresis ucircumflex -50 -KPX Adieresis udieresis -50 -KPX Adieresis ugrave -50 -KPX Adieresis uhungarumlaut -50 -KPX Adieresis umacron -50 -KPX Adieresis uogonek -50 -KPX Adieresis uring -50 -KPX Adieresis v -100 -KPX Adieresis w -90 -KPX Adieresis y -74 -KPX Adieresis yacute -74 -KPX Adieresis ydieresis -74 -KPX Agrave C -55 -KPX Agrave Cacute -55 -KPX Agrave Ccaron -55 -KPX Agrave Ccedilla -55 -KPX Agrave G -55 -KPX Agrave Gbreve -55 -KPX Agrave Gcommaaccent -55 -KPX Agrave O -45 -KPX Agrave Oacute -45 -KPX Agrave Ocircumflex -45 -KPX Agrave Odieresis -45 -KPX Agrave Ograve -45 -KPX Agrave Ohungarumlaut -45 -KPX Agrave Omacron -45 -KPX Agrave Oslash -45 -KPX Agrave Otilde -45 -KPX Agrave Q -45 -KPX Agrave T -95 -KPX Agrave Tcaron -95 -KPX Agrave Tcommaaccent -95 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -145 -KPX Agrave W -130 -KPX Agrave Y -100 -KPX Agrave Yacute -100 -KPX Agrave Ydieresis -100 -KPX Agrave p -25 -KPX Agrave quoteright -74 -KPX Agrave u -50 -KPX Agrave uacute -50 -KPX Agrave ucircumflex -50 -KPX Agrave udieresis -50 -KPX Agrave ugrave -50 -KPX Agrave uhungarumlaut -50 -KPX Agrave umacron -50 -KPX Agrave uogonek -50 -KPX Agrave uring -50 -KPX Agrave v -100 -KPX Agrave w -90 -KPX Agrave y -74 -KPX Agrave yacute -74 -KPX Agrave ydieresis -74 -KPX Amacron C -55 -KPX Amacron Cacute -55 -KPX Amacron Ccaron -55 -KPX Amacron Ccedilla -55 -KPX Amacron G -55 -KPX Amacron Gbreve -55 -KPX Amacron Gcommaaccent -55 -KPX Amacron O -45 -KPX Amacron Oacute -45 -KPX Amacron Ocircumflex -45 -KPX Amacron Odieresis -45 -KPX Amacron Ograve -45 -KPX Amacron Ohungarumlaut -45 -KPX Amacron Omacron -45 -KPX Amacron Oslash -45 -KPX Amacron Otilde -45 -KPX Amacron Q -45 -KPX Amacron T -95 -KPX Amacron Tcaron -95 -KPX Amacron Tcommaaccent -95 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -145 -KPX Amacron W -130 -KPX Amacron Y -100 -KPX Amacron Yacute -100 -KPX Amacron Ydieresis -100 -KPX Amacron p -25 -KPX Amacron quoteright -74 -KPX Amacron u -50 -KPX Amacron uacute -50 -KPX Amacron ucircumflex -50 -KPX Amacron udieresis -50 -KPX Amacron ugrave -50 -KPX Amacron uhungarumlaut -50 -KPX Amacron umacron -50 -KPX Amacron uogonek -50 -KPX Amacron uring -50 -KPX Amacron v -100 -KPX Amacron w -90 -KPX Amacron y -74 -KPX Amacron yacute -74 -KPX Amacron ydieresis -74 -KPX Aogonek C -55 -KPX Aogonek Cacute -55 -KPX Aogonek Ccaron -55 -KPX Aogonek Ccedilla -55 -KPX Aogonek G -55 -KPX Aogonek Gbreve -55 -KPX Aogonek Gcommaaccent -55 -KPX Aogonek O -45 -KPX Aogonek Oacute -45 -KPX Aogonek Ocircumflex -45 -KPX Aogonek Odieresis -45 -KPX Aogonek Ograve -45 -KPX Aogonek Ohungarumlaut -45 -KPX Aogonek Omacron -45 -KPX Aogonek Oslash -45 -KPX Aogonek Otilde -45 -KPX Aogonek Q -45 -KPX Aogonek T -95 -KPX Aogonek Tcaron -95 -KPX Aogonek Tcommaaccent -95 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -145 -KPX Aogonek W -130 -KPX Aogonek Y -100 -KPX Aogonek Yacute -100 -KPX Aogonek Ydieresis -100 -KPX Aogonek p -25 -KPX Aogonek quoteright -74 -KPX Aogonek u -50 -KPX Aogonek uacute -50 -KPX Aogonek ucircumflex -50 -KPX Aogonek udieresis -50 -KPX Aogonek ugrave -50 -KPX Aogonek uhungarumlaut -50 -KPX Aogonek umacron -50 -KPX Aogonek uogonek -50 -KPX Aogonek uring -50 -KPX Aogonek v -100 -KPX Aogonek w -90 -KPX Aogonek y -34 -KPX Aogonek yacute -34 -KPX Aogonek ydieresis -34 -KPX Aring C -55 -KPX Aring Cacute -55 -KPX Aring Ccaron -55 -KPX Aring Ccedilla -55 -KPX Aring G -55 -KPX Aring Gbreve -55 -KPX Aring Gcommaaccent -55 -KPX Aring O -45 -KPX Aring Oacute -45 -KPX Aring Ocircumflex -45 -KPX Aring Odieresis -45 -KPX Aring Ograve -45 -KPX Aring Ohungarumlaut -45 -KPX Aring Omacron -45 -KPX Aring Oslash -45 -KPX Aring Otilde -45 -KPX Aring Q -45 -KPX Aring T -95 -KPX Aring Tcaron -95 -KPX Aring Tcommaaccent -95 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -145 -KPX Aring W -130 -KPX Aring Y -100 -KPX Aring Yacute -100 -KPX Aring Ydieresis -100 -KPX Aring p -25 -KPX Aring quoteright -74 -KPX Aring u -50 -KPX Aring uacute -50 -KPX Aring ucircumflex -50 -KPX Aring udieresis -50 -KPX Aring ugrave -50 -KPX Aring uhungarumlaut -50 -KPX Aring umacron -50 -KPX Aring uogonek -50 -KPX Aring uring -50 -KPX Aring v -100 -KPX Aring w -90 -KPX Aring y -74 -KPX Aring yacute -74 -KPX Aring ydieresis -74 -KPX Atilde C -55 -KPX Atilde Cacute -55 -KPX Atilde Ccaron -55 -KPX Atilde Ccedilla -55 -KPX Atilde G -55 -KPX Atilde Gbreve -55 -KPX Atilde Gcommaaccent -55 -KPX Atilde O -45 -KPX Atilde Oacute -45 -KPX Atilde Ocircumflex -45 -KPX Atilde Odieresis -45 -KPX Atilde Ograve -45 -KPX Atilde Ohungarumlaut -45 -KPX Atilde Omacron -45 -KPX Atilde Oslash -45 -KPX Atilde Otilde -45 -KPX Atilde Q -45 -KPX Atilde T -95 -KPX Atilde Tcaron -95 -KPX Atilde Tcommaaccent -95 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -145 -KPX Atilde W -130 -KPX Atilde Y -100 -KPX Atilde Yacute -100 -KPX Atilde Ydieresis -100 -KPX Atilde p -25 -KPX Atilde quoteright -74 -KPX Atilde u -50 -KPX Atilde uacute -50 -KPX Atilde ucircumflex -50 -KPX Atilde udieresis -50 -KPX Atilde ugrave -50 -KPX Atilde uhungarumlaut -50 -KPX Atilde umacron -50 -KPX Atilde uogonek -50 -KPX Atilde uring -50 -KPX Atilde v -100 -KPX Atilde w -90 -KPX Atilde y -74 -KPX Atilde yacute -74 -KPX Atilde ydieresis -74 -KPX B A -30 -KPX B Aacute -30 -KPX B Abreve -30 -KPX B Acircumflex -30 -KPX B Adieresis -30 -KPX B Agrave -30 -KPX B Amacron -30 -KPX B Aogonek -30 -KPX B Aring -30 -KPX B Atilde -30 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -35 -KPX D Aacute -35 -KPX D Abreve -35 -KPX D Acircumflex -35 -KPX D Adieresis -35 -KPX D Agrave -35 -KPX D Amacron -35 -KPX D Aogonek -35 -KPX D Aring -35 -KPX D Atilde -35 -KPX D V -40 -KPX D W -40 -KPX D Y -40 -KPX D Yacute -40 -KPX D Ydieresis -40 -KPX D period -20 -KPX Dcaron A -35 -KPX Dcaron Aacute -35 -KPX Dcaron Abreve -35 -KPX Dcaron Acircumflex -35 -KPX Dcaron Adieresis -35 -KPX Dcaron Agrave -35 -KPX Dcaron Amacron -35 -KPX Dcaron Aogonek -35 -KPX Dcaron Aring -35 -KPX Dcaron Atilde -35 -KPX Dcaron V -40 -KPX Dcaron W -40 -KPX Dcaron Y -40 -KPX Dcaron Yacute -40 -KPX Dcaron Ydieresis -40 -KPX Dcaron period -20 -KPX Dcroat A -35 -KPX Dcroat Aacute -35 -KPX Dcroat Abreve -35 -KPX Dcroat Acircumflex -35 -KPX Dcroat Adieresis -35 -KPX Dcroat Agrave -35 -KPX Dcroat Amacron -35 -KPX Dcroat Aogonek -35 -KPX Dcroat Aring -35 -KPX Dcroat Atilde -35 -KPX Dcroat V -40 -KPX Dcroat W -40 -KPX Dcroat Y -40 -KPX Dcroat Yacute -40 -KPX Dcroat Ydieresis -40 -KPX Dcroat period -20 -KPX F A -90 -KPX F Aacute -90 -KPX F Abreve -90 -KPX F Acircumflex -90 -KPX F Adieresis -90 -KPX F Agrave -90 -KPX F Amacron -90 -KPX F Aogonek -90 -KPX F Aring -90 -KPX F Atilde -90 -KPX F a -25 -KPX F aacute -25 -KPX F abreve -25 -KPX F acircumflex -25 -KPX F adieresis -25 -KPX F agrave -25 -KPX F amacron -25 -KPX F aogonek -25 -KPX F aring -25 -KPX F atilde -25 -KPX F comma -92 -KPX F e -25 -KPX F eacute -25 -KPX F ecaron -25 -KPX F ecircumflex -25 -KPX F edieresis -25 -KPX F edotaccent -25 -KPX F egrave -25 -KPX F emacron -25 -KPX F eogonek -25 -KPX F o -25 -KPX F oacute -25 -KPX F ocircumflex -25 -KPX F odieresis -25 -KPX F ograve -25 -KPX F ohungarumlaut -25 -KPX F omacron -25 -KPX F oslash -25 -KPX F otilde -25 -KPX F period -110 -KPX J A -30 -KPX J Aacute -30 -KPX J Abreve -30 -KPX J Acircumflex -30 -KPX J Adieresis -30 -KPX J Agrave -30 -KPX J Amacron -30 -KPX J Aogonek -30 -KPX J Aring -30 -KPX J Atilde -30 -KPX J a -15 -KPX J aacute -15 -KPX J abreve -15 -KPX J acircumflex -15 -KPX J adieresis -15 -KPX J agrave -15 -KPX J amacron -15 -KPX J aogonek -15 -KPX J aring -15 -KPX J atilde -15 -KPX J e -15 -KPX J eacute -15 -KPX J ecaron -15 -KPX J ecircumflex -15 -KPX J edieresis -15 -KPX J edotaccent -15 -KPX J egrave -15 -KPX J emacron -15 -KPX J eogonek -15 -KPX J o -15 -KPX J oacute -15 -KPX J ocircumflex -15 -KPX J odieresis -15 -KPX J ograve -15 -KPX J ohungarumlaut -15 -KPX J omacron -15 -KPX J oslash -15 -KPX J otilde -15 -KPX J period -20 -KPX J u -15 -KPX J uacute -15 -KPX J ucircumflex -15 -KPX J udieresis -15 -KPX J ugrave -15 -KPX J uhungarumlaut -15 -KPX J umacron -15 -KPX J uogonek -15 -KPX J uring -15 -KPX K O -30 -KPX K Oacute -30 -KPX K Ocircumflex -30 -KPX K Odieresis -30 -KPX K Ograve -30 -KPX K Ohungarumlaut -30 -KPX K Omacron -30 -KPX K Oslash -30 -KPX K Otilde -30 -KPX K e -25 -KPX K eacute -25 -KPX K ecaron -25 -KPX K ecircumflex -25 -KPX K edieresis -25 -KPX K edotaccent -25 -KPX K egrave -25 -KPX K emacron -25 -KPX K eogonek -25 -KPX K o -25 -KPX K oacute -25 -KPX K ocircumflex -25 -KPX K odieresis -25 -KPX K ograve -25 -KPX K ohungarumlaut -25 -KPX K omacron -25 -KPX K oslash -25 -KPX K otilde -25 -KPX K u -15 -KPX K uacute -15 -KPX K ucircumflex -15 -KPX K udieresis -15 -KPX K ugrave -15 -KPX K uhungarumlaut -15 -KPX K umacron -15 -KPX K uogonek -15 -KPX K uring -15 -KPX K y -45 -KPX K yacute -45 -KPX K ydieresis -45 -KPX Kcommaaccent O -30 -KPX Kcommaaccent Oacute -30 -KPX Kcommaaccent Ocircumflex -30 -KPX Kcommaaccent Odieresis -30 -KPX Kcommaaccent Ograve -30 -KPX Kcommaaccent Ohungarumlaut -30 -KPX Kcommaaccent Omacron -30 -KPX Kcommaaccent Oslash -30 -KPX Kcommaaccent Otilde -30 -KPX Kcommaaccent e -25 -KPX Kcommaaccent eacute -25 -KPX Kcommaaccent ecaron -25 -KPX Kcommaaccent ecircumflex -25 -KPX Kcommaaccent edieresis -25 -KPX Kcommaaccent edotaccent -25 -KPX Kcommaaccent egrave -25 -KPX Kcommaaccent emacron -25 -KPX Kcommaaccent eogonek -25 -KPX Kcommaaccent o -25 -KPX Kcommaaccent oacute -25 -KPX Kcommaaccent ocircumflex -25 -KPX Kcommaaccent odieresis -25 -KPX Kcommaaccent ograve -25 -KPX Kcommaaccent ohungarumlaut -25 -KPX Kcommaaccent omacron -25 -KPX Kcommaaccent oslash -25 -KPX Kcommaaccent otilde -25 -KPX Kcommaaccent u -15 -KPX Kcommaaccent uacute -15 -KPX Kcommaaccent ucircumflex -15 -KPX Kcommaaccent udieresis -15 -KPX Kcommaaccent ugrave -15 -KPX Kcommaaccent uhungarumlaut -15 -KPX Kcommaaccent umacron -15 -KPX Kcommaaccent uogonek -15 -KPX Kcommaaccent uring -15 -KPX Kcommaaccent y -45 -KPX Kcommaaccent yacute -45 -KPX Kcommaaccent ydieresis -45 -KPX L T -92 -KPX L Tcaron -92 -KPX L Tcommaaccent -92 -KPX L V -92 -KPX L W -92 -KPX L Y -92 -KPX L Yacute -92 -KPX L Ydieresis -92 -KPX L quotedblright -20 -KPX L quoteright -110 -KPX L y -55 -KPX L yacute -55 -KPX L ydieresis -55 -KPX Lacute T -92 -KPX Lacute Tcaron -92 -KPX Lacute Tcommaaccent -92 -KPX Lacute V -92 -KPX Lacute W -92 -KPX Lacute Y -92 -KPX Lacute Yacute -92 -KPX Lacute Ydieresis -92 -KPX Lacute quotedblright -20 -KPX Lacute quoteright -110 -KPX Lacute y -55 -KPX Lacute yacute -55 -KPX Lacute ydieresis -55 -KPX Lcommaaccent T -92 -KPX Lcommaaccent Tcaron -92 -KPX Lcommaaccent Tcommaaccent -92 -KPX Lcommaaccent V -92 -KPX Lcommaaccent W -92 -KPX Lcommaaccent Y -92 -KPX Lcommaaccent Yacute -92 -KPX Lcommaaccent Ydieresis -92 -KPX Lcommaaccent quotedblright -20 -KPX Lcommaaccent quoteright -110 -KPX Lcommaaccent y -55 -KPX Lcommaaccent yacute -55 -KPX Lcommaaccent ydieresis -55 -KPX Lslash T -92 -KPX Lslash Tcaron -92 -KPX Lslash Tcommaaccent -92 -KPX Lslash V -92 -KPX Lslash W -92 -KPX Lslash Y -92 -KPX Lslash Yacute -92 -KPX Lslash Ydieresis -92 -KPX Lslash quotedblright -20 -KPX Lslash quoteright -110 -KPX Lslash y -55 -KPX Lslash yacute -55 -KPX Lslash ydieresis -55 -KPX N A -20 -KPX N Aacute -20 -KPX N Abreve -20 -KPX N Acircumflex -20 -KPX N Adieresis -20 -KPX N Agrave -20 -KPX N Amacron -20 -KPX N Aogonek -20 -KPX N Aring -20 -KPX N Atilde -20 -KPX Nacute A -20 -KPX Nacute Aacute -20 -KPX Nacute Abreve -20 -KPX Nacute Acircumflex -20 -KPX Nacute Adieresis -20 -KPX Nacute Agrave -20 -KPX Nacute Amacron -20 -KPX Nacute Aogonek -20 -KPX Nacute Aring -20 -KPX Nacute Atilde -20 -KPX Ncaron A -20 -KPX Ncaron Aacute -20 -KPX Ncaron Abreve -20 -KPX Ncaron Acircumflex -20 -KPX Ncaron Adieresis -20 -KPX Ncaron Agrave -20 -KPX Ncaron Amacron -20 -KPX Ncaron Aogonek -20 -KPX Ncaron Aring -20 -KPX Ncaron Atilde -20 -KPX Ncommaaccent A -20 -KPX Ncommaaccent Aacute -20 -KPX Ncommaaccent Abreve -20 -KPX Ncommaaccent Acircumflex -20 -KPX Ncommaaccent Adieresis -20 -KPX Ncommaaccent Agrave -20 -KPX Ncommaaccent Amacron -20 -KPX Ncommaaccent Aogonek -20 -KPX Ncommaaccent Aring -20 -KPX Ncommaaccent Atilde -20 -KPX Ntilde A -20 -KPX Ntilde Aacute -20 -KPX Ntilde Abreve -20 -KPX Ntilde Acircumflex -20 -KPX Ntilde Adieresis -20 -KPX Ntilde Agrave -20 -KPX Ntilde Amacron -20 -KPX Ntilde Aogonek -20 -KPX Ntilde Aring -20 -KPX Ntilde Atilde -20 -KPX O A -40 -KPX O Aacute -40 -KPX O Abreve -40 -KPX O Acircumflex -40 -KPX O Adieresis -40 -KPX O Agrave -40 -KPX O Amacron -40 -KPX O Aogonek -40 -KPX O Aring -40 -KPX O Atilde -40 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -50 -KPX O X -40 -KPX O Y -50 -KPX O Yacute -50 -KPX O Ydieresis -50 -KPX Oacute A -40 -KPX Oacute Aacute -40 -KPX Oacute Abreve -40 -KPX Oacute Acircumflex -40 -KPX Oacute Adieresis -40 -KPX Oacute Agrave -40 -KPX Oacute Amacron -40 -KPX Oacute Aogonek -40 -KPX Oacute Aring -40 -KPX Oacute Atilde -40 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -50 -KPX Oacute X -40 -KPX Oacute Y -50 -KPX Oacute Yacute -50 -KPX Oacute Ydieresis -50 -KPX Ocircumflex A -40 -KPX Ocircumflex Aacute -40 -KPX Ocircumflex Abreve -40 -KPX Ocircumflex Acircumflex -40 -KPX Ocircumflex Adieresis -40 -KPX Ocircumflex Agrave -40 -KPX Ocircumflex Amacron -40 -KPX Ocircumflex Aogonek -40 -KPX Ocircumflex Aring -40 -KPX Ocircumflex Atilde -40 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -50 -KPX Ocircumflex X -40 -KPX Ocircumflex Y -50 -KPX Ocircumflex Yacute -50 -KPX Ocircumflex Ydieresis -50 -KPX Odieresis A -40 -KPX Odieresis Aacute -40 -KPX Odieresis Abreve -40 -KPX Odieresis Acircumflex -40 -KPX Odieresis Adieresis -40 -KPX Odieresis Agrave -40 -KPX Odieresis Amacron -40 -KPX Odieresis Aogonek -40 -KPX Odieresis Aring -40 -KPX Odieresis Atilde -40 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -50 -KPX Odieresis X -40 -KPX Odieresis Y -50 -KPX Odieresis Yacute -50 -KPX Odieresis Ydieresis -50 -KPX Ograve A -40 -KPX Ograve Aacute -40 -KPX Ograve Abreve -40 -KPX Ograve Acircumflex -40 -KPX Ograve Adieresis -40 -KPX Ograve Agrave -40 -KPX Ograve Amacron -40 -KPX Ograve Aogonek -40 -KPX Ograve Aring -40 -KPX Ograve Atilde -40 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -50 -KPX Ograve X -40 -KPX Ograve Y -50 -KPX Ograve Yacute -50 -KPX Ograve Ydieresis -50 -KPX Ohungarumlaut A -40 -KPX Ohungarumlaut Aacute -40 -KPX Ohungarumlaut Abreve -40 -KPX Ohungarumlaut Acircumflex -40 -KPX Ohungarumlaut Adieresis -40 -KPX Ohungarumlaut Agrave -40 -KPX Ohungarumlaut Amacron -40 -KPX Ohungarumlaut Aogonek -40 -KPX Ohungarumlaut Aring -40 -KPX Ohungarumlaut Atilde -40 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -50 -KPX Ohungarumlaut X -40 -KPX Ohungarumlaut Y -50 -KPX Ohungarumlaut Yacute -50 -KPX Ohungarumlaut Ydieresis -50 -KPX Omacron A -40 -KPX Omacron Aacute -40 -KPX Omacron Abreve -40 -KPX Omacron Acircumflex -40 -KPX Omacron Adieresis -40 -KPX Omacron Agrave -40 -KPX Omacron Amacron -40 -KPX Omacron Aogonek -40 -KPX Omacron Aring -40 -KPX Omacron Atilde -40 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -50 -KPX Omacron X -40 -KPX Omacron Y -50 -KPX Omacron Yacute -50 -KPX Omacron Ydieresis -50 -KPX Oslash A -40 -KPX Oslash Aacute -40 -KPX Oslash Abreve -40 -KPX Oslash Acircumflex -40 -KPX Oslash Adieresis -40 -KPX Oslash Agrave -40 -KPX Oslash Amacron -40 -KPX Oslash Aogonek -40 -KPX Oslash Aring -40 -KPX Oslash Atilde -40 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -50 -KPX Oslash X -40 -KPX Oslash Y -50 -KPX Oslash Yacute -50 -KPX Oslash Ydieresis -50 -KPX Otilde A -40 -KPX Otilde Aacute -40 -KPX Otilde Abreve -40 -KPX Otilde Acircumflex -40 -KPX Otilde Adieresis -40 -KPX Otilde Agrave -40 -KPX Otilde Amacron -40 -KPX Otilde Aogonek -40 -KPX Otilde Aring -40 -KPX Otilde Atilde -40 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -50 -KPX Otilde X -40 -KPX Otilde Y -50 -KPX Otilde Yacute -50 -KPX Otilde Ydieresis -50 -KPX P A -74 -KPX P Aacute -74 -KPX P Abreve -74 -KPX P Acircumflex -74 -KPX P Adieresis -74 -KPX P Agrave -74 -KPX P Amacron -74 -KPX P Aogonek -74 -KPX P Aring -74 -KPX P Atilde -74 -KPX P a -10 -KPX P aacute -10 -KPX P abreve -10 -KPX P acircumflex -10 -KPX P adieresis -10 -KPX P agrave -10 -KPX P amacron -10 -KPX P aogonek -10 -KPX P aring -10 -KPX P atilde -10 -KPX P comma -92 -KPX P e -20 -KPX P eacute -20 -KPX P ecaron -20 -KPX P ecircumflex -20 -KPX P edieresis -20 -KPX P edotaccent -20 -KPX P egrave -20 -KPX P emacron -20 -KPX P eogonek -20 -KPX P o -20 -KPX P oacute -20 -KPX P ocircumflex -20 -KPX P odieresis -20 -KPX P ograve -20 -KPX P ohungarumlaut -20 -KPX P omacron -20 -KPX P oslash -20 -KPX P otilde -20 -KPX P period -110 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX Q period -20 -KPX R O -30 -KPX R Oacute -30 -KPX R Ocircumflex -30 -KPX R Odieresis -30 -KPX R Ograve -30 -KPX R Ohungarumlaut -30 -KPX R Omacron -30 -KPX R Oslash -30 -KPX R Otilde -30 -KPX R T -40 -KPX R Tcaron -40 -KPX R Tcommaaccent -40 -KPX R U -30 -KPX R Uacute -30 -KPX R Ucircumflex -30 -KPX R Udieresis -30 -KPX R Ugrave -30 -KPX R Uhungarumlaut -30 -KPX R Umacron -30 -KPX R Uogonek -30 -KPX R Uring -30 -KPX R V -55 -KPX R W -35 -KPX R Y -35 -KPX R Yacute -35 -KPX R Ydieresis -35 -KPX Racute O -30 -KPX Racute Oacute -30 -KPX Racute Ocircumflex -30 -KPX Racute Odieresis -30 -KPX Racute Ograve -30 -KPX Racute Ohungarumlaut -30 -KPX Racute Omacron -30 -KPX Racute Oslash -30 -KPX Racute Otilde -30 -KPX Racute T -40 -KPX Racute Tcaron -40 -KPX Racute Tcommaaccent -40 -KPX Racute U -30 -KPX Racute Uacute -30 -KPX Racute Ucircumflex -30 -KPX Racute Udieresis -30 -KPX Racute Ugrave -30 -KPX Racute Uhungarumlaut -30 -KPX Racute Umacron -30 -KPX Racute Uogonek -30 -KPX Racute Uring -30 -KPX Racute V -55 -KPX Racute W -35 -KPX Racute Y -35 -KPX Racute Yacute -35 -KPX Racute Ydieresis -35 -KPX Rcaron O -30 -KPX Rcaron Oacute -30 -KPX Rcaron Ocircumflex -30 -KPX Rcaron Odieresis -30 -KPX Rcaron Ograve -30 -KPX Rcaron Ohungarumlaut -30 -KPX Rcaron Omacron -30 -KPX Rcaron Oslash -30 -KPX Rcaron Otilde -30 -KPX Rcaron T -40 -KPX Rcaron Tcaron -40 -KPX Rcaron Tcommaaccent -40 -KPX Rcaron U -30 -KPX Rcaron Uacute -30 -KPX Rcaron Ucircumflex -30 -KPX Rcaron Udieresis -30 -KPX Rcaron Ugrave -30 -KPX Rcaron Uhungarumlaut -30 -KPX Rcaron Umacron -30 -KPX Rcaron Uogonek -30 -KPX Rcaron Uring -30 -KPX Rcaron V -55 -KPX Rcaron W -35 -KPX Rcaron Y -35 -KPX Rcaron Yacute -35 -KPX Rcaron Ydieresis -35 -KPX Rcommaaccent O -30 -KPX Rcommaaccent Oacute -30 -KPX Rcommaaccent Ocircumflex -30 -KPX Rcommaaccent Odieresis -30 -KPX Rcommaaccent Ograve -30 -KPX Rcommaaccent Ohungarumlaut -30 -KPX Rcommaaccent Omacron -30 -KPX Rcommaaccent Oslash -30 -KPX Rcommaaccent Otilde -30 -KPX Rcommaaccent T -40 -KPX Rcommaaccent Tcaron -40 -KPX Rcommaaccent Tcommaaccent -40 -KPX Rcommaaccent U -30 -KPX Rcommaaccent Uacute -30 -KPX Rcommaaccent Ucircumflex -30 -KPX Rcommaaccent Udieresis -30 -KPX Rcommaaccent Ugrave -30 -KPX Rcommaaccent Uhungarumlaut -30 -KPX Rcommaaccent Umacron -30 -KPX Rcommaaccent Uogonek -30 -KPX Rcommaaccent Uring -30 -KPX Rcommaaccent V -55 -KPX Rcommaaccent W -35 -KPX Rcommaaccent Y -35 -KPX Rcommaaccent Yacute -35 -KPX Rcommaaccent Ydieresis -35 -KPX T A -90 -KPX T Aacute -90 -KPX T Abreve -90 -KPX T Acircumflex -90 -KPX T Adieresis -90 -KPX T Agrave -90 -KPX T Amacron -90 -KPX T Aogonek -90 -KPX T Aring -90 -KPX T Atilde -90 -KPX T O -18 -KPX T Oacute -18 -KPX T Ocircumflex -18 -KPX T Odieresis -18 -KPX T Ograve -18 -KPX T Ohungarumlaut -18 -KPX T Omacron -18 -KPX T Oslash -18 -KPX T Otilde -18 -KPX T a -92 -KPX T aacute -92 -KPX T abreve -52 -KPX T acircumflex -52 -KPX T adieresis -52 -KPX T agrave -52 -KPX T amacron -52 -KPX T aogonek -92 -KPX T aring -92 -KPX T atilde -52 -KPX T colon -74 -KPX T comma -74 -KPX T e -92 -KPX T eacute -92 -KPX T ecaron -92 -KPX T ecircumflex -92 -KPX T edieresis -52 -KPX T edotaccent -92 -KPX T egrave -52 -KPX T emacron -52 -KPX T eogonek -92 -KPX T hyphen -92 -KPX T i -18 -KPX T iacute -18 -KPX T iogonek -18 -KPX T o -92 -KPX T oacute -92 -KPX T ocircumflex -92 -KPX T odieresis -92 -KPX T ograve -92 -KPX T ohungarumlaut -92 -KPX T omacron -92 -KPX T oslash -92 -KPX T otilde -92 -KPX T period -90 -KPX T r -74 -KPX T racute -74 -KPX T rcaron -74 -KPX T rcommaaccent -74 -KPX T semicolon -74 -KPX T u -92 -KPX T uacute -92 -KPX T ucircumflex -92 -KPX T udieresis -92 -KPX T ugrave -92 -KPX T uhungarumlaut -92 -KPX T umacron -92 -KPX T uogonek -92 -KPX T uring -92 -KPX T w -74 -KPX T y -34 -KPX T yacute -34 -KPX T ydieresis -34 -KPX Tcaron A -90 -KPX Tcaron Aacute -90 -KPX Tcaron Abreve -90 -KPX Tcaron Acircumflex -90 -KPX Tcaron Adieresis -90 -KPX Tcaron Agrave -90 -KPX Tcaron Amacron -90 -KPX Tcaron Aogonek -90 -KPX Tcaron Aring -90 -KPX Tcaron Atilde -90 -KPX Tcaron O -18 -KPX Tcaron Oacute -18 -KPX Tcaron Ocircumflex -18 -KPX Tcaron Odieresis -18 -KPX Tcaron Ograve -18 -KPX Tcaron Ohungarumlaut -18 -KPX Tcaron Omacron -18 -KPX Tcaron Oslash -18 -KPX Tcaron Otilde -18 -KPX Tcaron a -92 -KPX Tcaron aacute -92 -KPX Tcaron abreve -52 -KPX Tcaron acircumflex -52 -KPX Tcaron adieresis -52 -KPX Tcaron agrave -52 -KPX Tcaron amacron -52 -KPX Tcaron aogonek -92 -KPX Tcaron aring -92 -KPX Tcaron atilde -52 -KPX Tcaron colon -74 -KPX Tcaron comma -74 -KPX Tcaron e -92 -KPX Tcaron eacute -92 -KPX Tcaron ecaron -92 -KPX Tcaron ecircumflex -92 -KPX Tcaron edieresis -52 -KPX Tcaron edotaccent -92 -KPX Tcaron egrave -52 -KPX Tcaron emacron -52 -KPX Tcaron eogonek -92 -KPX Tcaron hyphen -92 -KPX Tcaron i -18 -KPX Tcaron iacute -18 -KPX Tcaron iogonek -18 -KPX Tcaron o -92 -KPX Tcaron oacute -92 -KPX Tcaron ocircumflex -92 -KPX Tcaron odieresis -92 -KPX Tcaron ograve -92 -KPX Tcaron ohungarumlaut -92 -KPX Tcaron omacron -92 -KPX Tcaron oslash -92 -KPX Tcaron otilde -92 -KPX Tcaron period -90 -KPX Tcaron r -74 -KPX Tcaron racute -74 -KPX Tcaron rcaron -74 -KPX Tcaron rcommaaccent -74 -KPX Tcaron semicolon -74 -KPX Tcaron u -92 -KPX Tcaron uacute -92 -KPX Tcaron ucircumflex -92 -KPX Tcaron udieresis -92 -KPX Tcaron ugrave -92 -KPX Tcaron uhungarumlaut -92 -KPX Tcaron umacron -92 -KPX Tcaron uogonek -92 -KPX Tcaron uring -92 -KPX Tcaron w -74 -KPX Tcaron y -34 -KPX Tcaron yacute -34 -KPX Tcaron ydieresis -34 -KPX Tcommaaccent A -90 -KPX Tcommaaccent Aacute -90 -KPX Tcommaaccent Abreve -90 -KPX Tcommaaccent Acircumflex -90 -KPX Tcommaaccent Adieresis -90 -KPX Tcommaaccent Agrave -90 -KPX Tcommaaccent Amacron -90 -KPX Tcommaaccent Aogonek -90 -KPX Tcommaaccent Aring -90 -KPX Tcommaaccent Atilde -90 -KPX Tcommaaccent O -18 -KPX Tcommaaccent Oacute -18 -KPX Tcommaaccent Ocircumflex -18 -KPX Tcommaaccent Odieresis -18 -KPX Tcommaaccent Ograve -18 -KPX Tcommaaccent Ohungarumlaut -18 -KPX Tcommaaccent Omacron -18 -KPX Tcommaaccent Oslash -18 -KPX Tcommaaccent Otilde -18 -KPX Tcommaaccent a -92 -KPX Tcommaaccent aacute -92 -KPX Tcommaaccent abreve -52 -KPX Tcommaaccent acircumflex -52 -KPX Tcommaaccent adieresis -52 -KPX Tcommaaccent agrave -52 -KPX Tcommaaccent amacron -52 -KPX Tcommaaccent aogonek -92 -KPX Tcommaaccent aring -92 -KPX Tcommaaccent atilde -52 -KPX Tcommaaccent colon -74 -KPX Tcommaaccent comma -74 -KPX Tcommaaccent e -92 -KPX Tcommaaccent eacute -92 -KPX Tcommaaccent ecaron -92 -KPX Tcommaaccent ecircumflex -92 -KPX Tcommaaccent edieresis -52 -KPX Tcommaaccent edotaccent -92 -KPX Tcommaaccent egrave -52 -KPX Tcommaaccent emacron -52 -KPX Tcommaaccent eogonek -92 -KPX Tcommaaccent hyphen -92 -KPX Tcommaaccent i -18 -KPX Tcommaaccent iacute -18 -KPX Tcommaaccent iogonek -18 -KPX Tcommaaccent o -92 -KPX Tcommaaccent oacute -92 -KPX Tcommaaccent ocircumflex -92 -KPX Tcommaaccent odieresis -92 -KPX Tcommaaccent ograve -92 -KPX Tcommaaccent ohungarumlaut -92 -KPX Tcommaaccent omacron -92 -KPX Tcommaaccent oslash -92 -KPX Tcommaaccent otilde -92 -KPX Tcommaaccent period -90 -KPX Tcommaaccent r -74 -KPX Tcommaaccent racute -74 -KPX Tcommaaccent rcaron -74 -KPX Tcommaaccent rcommaaccent -74 -KPX Tcommaaccent semicolon -74 -KPX Tcommaaccent u -92 -KPX Tcommaaccent uacute -92 -KPX Tcommaaccent ucircumflex -92 -KPX Tcommaaccent udieresis -92 -KPX Tcommaaccent ugrave -92 -KPX Tcommaaccent uhungarumlaut -92 -KPX Tcommaaccent umacron -92 -KPX Tcommaaccent uogonek -92 -KPX Tcommaaccent uring -92 -KPX Tcommaaccent w -74 -KPX Tcommaaccent y -34 -KPX Tcommaaccent yacute -34 -KPX Tcommaaccent ydieresis -34 -KPX U A -60 -KPX U Aacute -60 -KPX U Abreve -60 -KPX U Acircumflex -60 -KPX U Adieresis -60 -KPX U Agrave -60 -KPX U Amacron -60 -KPX U Aogonek -60 -KPX U Aring -60 -KPX U Atilde -60 -KPX U comma -50 -KPX U period -50 -KPX Uacute A -60 -KPX Uacute Aacute -60 -KPX Uacute Abreve -60 -KPX Uacute Acircumflex -60 -KPX Uacute Adieresis -60 -KPX Uacute Agrave -60 -KPX Uacute Amacron -60 -KPX Uacute Aogonek -60 -KPX Uacute Aring -60 -KPX Uacute Atilde -60 -KPX Uacute comma -50 -KPX Uacute period -50 -KPX Ucircumflex A -60 -KPX Ucircumflex Aacute -60 -KPX Ucircumflex Abreve -60 -KPX Ucircumflex Acircumflex -60 -KPX Ucircumflex Adieresis -60 -KPX Ucircumflex Agrave -60 -KPX Ucircumflex Amacron -60 -KPX Ucircumflex Aogonek -60 -KPX Ucircumflex Aring -60 -KPX Ucircumflex Atilde -60 -KPX Ucircumflex comma -50 -KPX Ucircumflex period -50 -KPX Udieresis A -60 -KPX Udieresis Aacute -60 -KPX Udieresis Abreve -60 -KPX Udieresis Acircumflex -60 -KPX Udieresis Adieresis -60 -KPX Udieresis Agrave -60 -KPX Udieresis Amacron -60 -KPX Udieresis Aogonek -60 -KPX Udieresis Aring -60 -KPX Udieresis Atilde -60 -KPX Udieresis comma -50 -KPX Udieresis period -50 -KPX Ugrave A -60 -KPX Ugrave Aacute -60 -KPX Ugrave Abreve -60 -KPX Ugrave Acircumflex -60 -KPX Ugrave Adieresis -60 -KPX Ugrave Agrave -60 -KPX Ugrave Amacron -60 -KPX Ugrave Aogonek -60 -KPX Ugrave Aring -60 -KPX Ugrave Atilde -60 -KPX Ugrave comma -50 -KPX Ugrave period -50 -KPX Uhungarumlaut A -60 -KPX Uhungarumlaut Aacute -60 -KPX Uhungarumlaut Abreve -60 -KPX Uhungarumlaut Acircumflex -60 -KPX Uhungarumlaut Adieresis -60 -KPX Uhungarumlaut Agrave -60 -KPX Uhungarumlaut Amacron -60 -KPX Uhungarumlaut Aogonek -60 -KPX Uhungarumlaut Aring -60 -KPX Uhungarumlaut Atilde -60 -KPX Uhungarumlaut comma -50 -KPX Uhungarumlaut period -50 -KPX Umacron A -60 -KPX Umacron Aacute -60 -KPX Umacron Abreve -60 -KPX Umacron Acircumflex -60 -KPX Umacron Adieresis -60 -KPX Umacron Agrave -60 -KPX Umacron Amacron -60 -KPX Umacron Aogonek -60 -KPX Umacron Aring -60 -KPX Umacron Atilde -60 -KPX Umacron comma -50 -KPX Umacron period -50 -KPX Uogonek A -60 -KPX Uogonek Aacute -60 -KPX Uogonek Abreve -60 -KPX Uogonek Acircumflex -60 -KPX Uogonek Adieresis -60 -KPX Uogonek Agrave -60 -KPX Uogonek Amacron -60 -KPX Uogonek Aogonek -60 -KPX Uogonek Aring -60 -KPX Uogonek Atilde -60 -KPX Uogonek comma -50 -KPX Uogonek period -50 -KPX Uring A -60 -KPX Uring Aacute -60 -KPX Uring Abreve -60 -KPX Uring Acircumflex -60 -KPX Uring Adieresis -60 -KPX Uring Agrave -60 -KPX Uring Amacron -60 -KPX Uring Aogonek -60 -KPX Uring Aring -60 -KPX Uring Atilde -60 -KPX Uring comma -50 -KPX Uring period -50 -KPX V A -135 -KPX V Aacute -135 -KPX V Abreve -135 -KPX V Acircumflex -135 -KPX V Adieresis -135 -KPX V Agrave -135 -KPX V Amacron -135 -KPX V Aogonek -135 -KPX V Aring -135 -KPX V Atilde -135 -KPX V G -30 -KPX V Gbreve -30 -KPX V Gcommaaccent -30 -KPX V O -45 -KPX V Oacute -45 -KPX V Ocircumflex -45 -KPX V Odieresis -45 -KPX V Ograve -45 -KPX V Ohungarumlaut -45 -KPX V Omacron -45 -KPX V Oslash -45 -KPX V Otilde -45 -KPX V a -92 -KPX V aacute -92 -KPX V abreve -92 -KPX V acircumflex -92 -KPX V adieresis -92 -KPX V agrave -92 -KPX V amacron -92 -KPX V aogonek -92 -KPX V aring -92 -KPX V atilde -92 -KPX V colon -92 -KPX V comma -129 -KPX V e -100 -KPX V eacute -100 -KPX V ecaron -100 -KPX V ecircumflex -100 -KPX V edieresis -100 -KPX V edotaccent -100 -KPX V egrave -100 -KPX V emacron -100 -KPX V eogonek -100 -KPX V hyphen -74 -KPX V i -37 -KPX V iacute -37 -KPX V icircumflex -37 -KPX V idieresis -37 -KPX V igrave -37 -KPX V imacron -37 -KPX V iogonek -37 -KPX V o -100 -KPX V oacute -100 -KPX V ocircumflex -100 -KPX V odieresis -100 -KPX V ograve -100 -KPX V ohungarumlaut -100 -KPX V omacron -100 -KPX V oslash -100 -KPX V otilde -100 -KPX V period -145 -KPX V semicolon -92 -KPX V u -92 -KPX V uacute -92 -KPX V ucircumflex -92 -KPX V udieresis -92 -KPX V ugrave -92 -KPX V uhungarumlaut -92 -KPX V umacron -92 -KPX V uogonek -92 -KPX V uring -92 -KPX W A -120 -KPX W Aacute -120 -KPX W Abreve -120 -KPX W Acircumflex -120 -KPX W Adieresis -120 -KPX W Agrave -120 -KPX W Amacron -120 -KPX W Aogonek -120 -KPX W Aring -120 -KPX W Atilde -120 -KPX W O -10 -KPX W Oacute -10 -KPX W Ocircumflex -10 -KPX W Odieresis -10 -KPX W Ograve -10 -KPX W Ohungarumlaut -10 -KPX W Omacron -10 -KPX W Oslash -10 -KPX W Otilde -10 -KPX W a -65 -KPX W aacute -65 -KPX W abreve -65 -KPX W acircumflex -65 -KPX W adieresis -65 -KPX W agrave -65 -KPX W amacron -65 -KPX W aogonek -65 -KPX W aring -65 -KPX W atilde -65 -KPX W colon -55 -KPX W comma -92 -KPX W e -65 -KPX W eacute -65 -KPX W ecaron -65 -KPX W ecircumflex -65 -KPX W edieresis -65 -KPX W edotaccent -65 -KPX W egrave -65 -KPX W emacron -65 -KPX W eogonek -65 -KPX W hyphen -37 -KPX W i -18 -KPX W iacute -18 -KPX W iogonek -18 -KPX W o -75 -KPX W oacute -75 -KPX W ocircumflex -75 -KPX W odieresis -75 -KPX W ograve -75 -KPX W ohungarumlaut -75 -KPX W omacron -75 -KPX W oslash -75 -KPX W otilde -75 -KPX W period -92 -KPX W semicolon -55 -KPX W u -50 -KPX W uacute -50 -KPX W ucircumflex -50 -KPX W udieresis -50 -KPX W ugrave -50 -KPX W uhungarumlaut -50 -KPX W umacron -50 -KPX W uogonek -50 -KPX W uring -50 -KPX W y -60 -KPX W yacute -60 -KPX W ydieresis -60 -KPX Y A -110 -KPX Y Aacute -110 -KPX Y Abreve -110 -KPX Y Acircumflex -110 -KPX Y Adieresis -110 -KPX Y Agrave -110 -KPX Y Amacron -110 -KPX Y Aogonek -110 -KPX Y Aring -110 -KPX Y Atilde -110 -KPX Y O -35 -KPX Y Oacute -35 -KPX Y Ocircumflex -35 -KPX Y Odieresis -35 -KPX Y Ograve -35 -KPX Y Ohungarumlaut -35 -KPX Y Omacron -35 -KPX Y Oslash -35 -KPX Y Otilde -35 -KPX Y a -85 -KPX Y aacute -85 -KPX Y abreve -85 -KPX Y acircumflex -85 -KPX Y adieresis -85 -KPX Y agrave -85 -KPX Y amacron -85 -KPX Y aogonek -85 -KPX Y aring -85 -KPX Y atilde -85 -KPX Y colon -92 -KPX Y comma -92 -KPX Y e -111 -KPX Y eacute -111 -KPX Y ecaron -111 -KPX Y ecircumflex -111 -KPX Y edieresis -71 -KPX Y edotaccent -111 -KPX Y egrave -71 -KPX Y emacron -71 -KPX Y eogonek -111 -KPX Y hyphen -92 -KPX Y i -37 -KPX Y iacute -37 -KPX Y iogonek -37 -KPX Y o -111 -KPX Y oacute -111 -KPX Y ocircumflex -111 -KPX Y odieresis -111 -KPX Y ograve -111 -KPX Y ohungarumlaut -111 -KPX Y omacron -111 -KPX Y oslash -111 -KPX Y otilde -111 -KPX Y period -92 -KPX Y semicolon -92 -KPX Y u -92 -KPX Y uacute -92 -KPX Y ucircumflex -92 -KPX Y udieresis -92 -KPX Y ugrave -92 -KPX Y uhungarumlaut -92 -KPX Y umacron -92 -KPX Y uogonek -92 -KPX Y uring -92 -KPX Yacute A -110 -KPX Yacute Aacute -110 -KPX Yacute Abreve -110 -KPX Yacute Acircumflex -110 -KPX Yacute Adieresis -110 -KPX Yacute Agrave -110 -KPX Yacute Amacron -110 -KPX Yacute Aogonek -110 -KPX Yacute Aring -110 -KPX Yacute Atilde -110 -KPX Yacute O -35 -KPX Yacute Oacute -35 -KPX Yacute Ocircumflex -35 -KPX Yacute Odieresis -35 -KPX Yacute Ograve -35 -KPX Yacute Ohungarumlaut -35 -KPX Yacute Omacron -35 -KPX Yacute Oslash -35 -KPX Yacute Otilde -35 -KPX Yacute a -85 -KPX Yacute aacute -85 -KPX Yacute abreve -85 -KPX Yacute acircumflex -85 -KPX Yacute adieresis -85 -KPX Yacute agrave -85 -KPX Yacute amacron -85 -KPX Yacute aogonek -85 -KPX Yacute aring -85 -KPX Yacute atilde -85 -KPX Yacute colon -92 -KPX Yacute comma -92 -KPX Yacute e -111 -KPX Yacute eacute -111 -KPX Yacute ecaron -111 -KPX Yacute ecircumflex -111 -KPX Yacute edieresis -71 -KPX Yacute edotaccent -111 -KPX Yacute egrave -71 -KPX Yacute emacron -71 -KPX Yacute eogonek -111 -KPX Yacute hyphen -92 -KPX Yacute i -37 -KPX Yacute iacute -37 -KPX Yacute iogonek -37 -KPX Yacute o -111 -KPX Yacute oacute -111 -KPX Yacute ocircumflex -111 -KPX Yacute odieresis -111 -KPX Yacute ograve -111 -KPX Yacute ohungarumlaut -111 -KPX Yacute omacron -111 -KPX Yacute oslash -111 -KPX Yacute otilde -111 -KPX Yacute period -92 -KPX Yacute semicolon -92 -KPX Yacute u -92 -KPX Yacute uacute -92 -KPX Yacute ucircumflex -92 -KPX Yacute udieresis -92 -KPX Yacute ugrave -92 -KPX Yacute uhungarumlaut -92 -KPX Yacute umacron -92 -KPX Yacute uogonek -92 -KPX Yacute uring -92 -KPX Ydieresis A -110 -KPX Ydieresis Aacute -110 -KPX Ydieresis Abreve -110 -KPX Ydieresis Acircumflex -110 -KPX Ydieresis Adieresis -110 -KPX Ydieresis Agrave -110 -KPX Ydieresis Amacron -110 -KPX Ydieresis Aogonek -110 -KPX Ydieresis Aring -110 -KPX Ydieresis Atilde -110 -KPX Ydieresis O -35 -KPX Ydieresis Oacute -35 -KPX Ydieresis Ocircumflex -35 -KPX Ydieresis Odieresis -35 -KPX Ydieresis Ograve -35 -KPX Ydieresis Ohungarumlaut -35 -KPX Ydieresis Omacron -35 -KPX Ydieresis Oslash -35 -KPX Ydieresis Otilde -35 -KPX Ydieresis a -85 -KPX Ydieresis aacute -85 -KPX Ydieresis abreve -85 -KPX Ydieresis acircumflex -85 -KPX Ydieresis adieresis -85 -KPX Ydieresis agrave -85 -KPX Ydieresis amacron -85 -KPX Ydieresis aogonek -85 -KPX Ydieresis aring -85 -KPX Ydieresis atilde -85 -KPX Ydieresis colon -92 -KPX Ydieresis comma -92 -KPX Ydieresis e -111 -KPX Ydieresis eacute -111 -KPX Ydieresis ecaron -111 -KPX Ydieresis ecircumflex -111 -KPX Ydieresis edieresis -71 -KPX Ydieresis edotaccent -111 -KPX Ydieresis egrave -71 -KPX Ydieresis emacron -71 -KPX Ydieresis eogonek -111 -KPX Ydieresis hyphen -92 -KPX Ydieresis i -37 -KPX Ydieresis iacute -37 -KPX Ydieresis iogonek -37 -KPX Ydieresis o -111 -KPX Ydieresis oacute -111 -KPX Ydieresis ocircumflex -111 -KPX Ydieresis odieresis -111 -KPX Ydieresis ograve -111 -KPX Ydieresis ohungarumlaut -111 -KPX Ydieresis omacron -111 -KPX Ydieresis oslash -111 -KPX Ydieresis otilde -111 -KPX Ydieresis period -92 -KPX Ydieresis semicolon -92 -KPX Ydieresis u -92 -KPX Ydieresis uacute -92 -KPX Ydieresis ucircumflex -92 -KPX Ydieresis udieresis -92 -KPX Ydieresis ugrave -92 -KPX Ydieresis uhungarumlaut -92 -KPX Ydieresis umacron -92 -KPX Ydieresis uogonek -92 -KPX Ydieresis uring -92 -KPX a v -25 -KPX aacute v -25 -KPX abreve v -25 -KPX acircumflex v -25 -KPX adieresis v -25 -KPX agrave v -25 -KPX amacron v -25 -KPX aogonek v -25 -KPX aring v -25 -KPX atilde v -25 -KPX b b -10 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -15 -KPX comma quotedblright -45 -KPX comma quoteright -55 -KPX d w -15 -KPX dcroat w -15 -KPX e v -15 -KPX eacute v -15 -KPX ecaron v -15 -KPX ecircumflex v -15 -KPX edieresis v -15 -KPX edotaccent v -15 -KPX egrave v -15 -KPX emacron v -15 -KPX eogonek v -15 -KPX f comma -15 -KPX f dotlessi -35 -KPX f i -25 -KPX f o -25 -KPX f oacute -25 -KPX f ocircumflex -25 -KPX f odieresis -25 -KPX f ograve -25 -KPX f ohungarumlaut -25 -KPX f omacron -25 -KPX f oslash -25 -KPX f otilde -25 -KPX f period -15 -KPX f quotedblright 50 -KPX f quoteright 55 -KPX g period -15 -KPX gbreve period -15 -KPX gcommaaccent period -15 -KPX h y -15 -KPX h yacute -15 -KPX h ydieresis -15 -KPX i v -10 -KPX iacute v -10 -KPX icircumflex v -10 -KPX idieresis v -10 -KPX igrave v -10 -KPX imacron v -10 -KPX iogonek v -10 -KPX k e -10 -KPX k eacute -10 -KPX k ecaron -10 -KPX k ecircumflex -10 -KPX k edieresis -10 -KPX k edotaccent -10 -KPX k egrave -10 -KPX k emacron -10 -KPX k eogonek -10 -KPX k o -15 -KPX k oacute -15 -KPX k ocircumflex -15 -KPX k odieresis -15 -KPX k ograve -15 -KPX k ohungarumlaut -15 -KPX k omacron -15 -KPX k oslash -15 -KPX k otilde -15 -KPX k y -15 -KPX k yacute -15 -KPX k ydieresis -15 -KPX kcommaaccent e -10 -KPX kcommaaccent eacute -10 -KPX kcommaaccent ecaron -10 -KPX kcommaaccent ecircumflex -10 -KPX kcommaaccent edieresis -10 -KPX kcommaaccent edotaccent -10 -KPX kcommaaccent egrave -10 -KPX kcommaaccent emacron -10 -KPX kcommaaccent eogonek -10 -KPX kcommaaccent o -15 -KPX kcommaaccent oacute -15 -KPX kcommaaccent ocircumflex -15 -KPX kcommaaccent odieresis -15 -KPX kcommaaccent ograve -15 -KPX kcommaaccent ohungarumlaut -15 -KPX kcommaaccent omacron -15 -KPX kcommaaccent oslash -15 -KPX kcommaaccent otilde -15 -KPX kcommaaccent y -15 -KPX kcommaaccent yacute -15 -KPX kcommaaccent ydieresis -15 -KPX n v -40 -KPX nacute v -40 -KPX ncaron v -40 -KPX ncommaaccent v -40 -KPX ntilde v -40 -KPX o v -10 -KPX o w -10 -KPX oacute v -10 -KPX oacute w -10 -KPX ocircumflex v -10 -KPX ocircumflex w -10 -KPX odieresis v -10 -KPX odieresis w -10 -KPX ograve v -10 -KPX ograve w -10 -KPX ohungarumlaut v -10 -KPX ohungarumlaut w -10 -KPX omacron v -10 -KPX omacron w -10 -KPX oslash v -10 -KPX oslash w -10 -KPX otilde v -10 -KPX otilde w -10 -KPX period quotedblright -55 -KPX period quoteright -55 -KPX quotedblleft A -10 -KPX quotedblleft Aacute -10 -KPX quotedblleft Abreve -10 -KPX quotedblleft Acircumflex -10 -KPX quotedblleft Adieresis -10 -KPX quotedblleft Agrave -10 -KPX quotedblleft Amacron -10 -KPX quotedblleft Aogonek -10 -KPX quotedblleft Aring -10 -KPX quotedblleft Atilde -10 -KPX quoteleft A -10 -KPX quoteleft Aacute -10 -KPX quoteleft Abreve -10 -KPX quoteleft Acircumflex -10 -KPX quoteleft Adieresis -10 -KPX quoteleft Agrave -10 -KPX quoteleft Amacron -10 -KPX quoteleft Aogonek -10 -KPX quoteleft Aring -10 -KPX quoteleft Atilde -10 -KPX quoteleft quoteleft -63 -KPX quoteright d -20 -KPX quoteright dcroat -20 -KPX quoteright quoteright -63 -KPX quoteright r -20 -KPX quoteright racute -20 -KPX quoteright rcaron -20 -KPX quoteright rcommaaccent -20 -KPX quoteright s -37 -KPX quoteright sacute -37 -KPX quoteright scaron -37 -KPX quoteright scedilla -37 -KPX quoteright scommaaccent -37 -KPX quoteright space -74 -KPX quoteright v -20 -KPX r c -18 -KPX r cacute -18 -KPX r ccaron -18 -KPX r ccedilla -18 -KPX r comma -92 -KPX r e -18 -KPX r eacute -18 -KPX r ecaron -18 -KPX r ecircumflex -18 -KPX r edieresis -18 -KPX r edotaccent -18 -KPX r egrave -18 -KPX r emacron -18 -KPX r eogonek -18 -KPX r g -10 -KPX r gbreve -10 -KPX r gcommaaccent -10 -KPX r hyphen -37 -KPX r n -15 -KPX r nacute -15 -KPX r ncaron -15 -KPX r ncommaaccent -15 -KPX r ntilde -15 -KPX r o -18 -KPX r oacute -18 -KPX r ocircumflex -18 -KPX r odieresis -18 -KPX r ograve -18 -KPX r ohungarumlaut -18 -KPX r omacron -18 -KPX r oslash -18 -KPX r otilde -18 -KPX r p -10 -KPX r period -100 -KPX r q -18 -KPX r v -10 -KPX racute c -18 -KPX racute cacute -18 -KPX racute ccaron -18 -KPX racute ccedilla -18 -KPX racute comma -92 -KPX racute e -18 -KPX racute eacute -18 -KPX racute ecaron -18 -KPX racute ecircumflex -18 -KPX racute edieresis -18 -KPX racute edotaccent -18 -KPX racute egrave -18 -KPX racute emacron -18 -KPX racute eogonek -18 -KPX racute g -10 -KPX racute gbreve -10 -KPX racute gcommaaccent -10 -KPX racute hyphen -37 -KPX racute n -15 -KPX racute nacute -15 -KPX racute ncaron -15 -KPX racute ncommaaccent -15 -KPX racute ntilde -15 -KPX racute o -18 -KPX racute oacute -18 -KPX racute ocircumflex -18 -KPX racute odieresis -18 -KPX racute ograve -18 -KPX racute ohungarumlaut -18 -KPX racute omacron -18 -KPX racute oslash -18 -KPX racute otilde -18 -KPX racute p -10 -KPX racute period -100 -KPX racute q -18 -KPX racute v -10 -KPX rcaron c -18 -KPX rcaron cacute -18 -KPX rcaron ccaron -18 -KPX rcaron ccedilla -18 -KPX rcaron comma -92 -KPX rcaron e -18 -KPX rcaron eacute -18 -KPX rcaron ecaron -18 -KPX rcaron ecircumflex -18 -KPX rcaron edieresis -18 -KPX rcaron edotaccent -18 -KPX rcaron egrave -18 -KPX rcaron emacron -18 -KPX rcaron eogonek -18 -KPX rcaron g -10 -KPX rcaron gbreve -10 -KPX rcaron gcommaaccent -10 -KPX rcaron hyphen -37 -KPX rcaron n -15 -KPX rcaron nacute -15 -KPX rcaron ncaron -15 -KPX rcaron ncommaaccent -15 -KPX rcaron ntilde -15 -KPX rcaron o -18 -KPX rcaron oacute -18 -KPX rcaron ocircumflex -18 -KPX rcaron odieresis -18 -KPX rcaron ograve -18 -KPX rcaron ohungarumlaut -18 -KPX rcaron omacron -18 -KPX rcaron oslash -18 -KPX rcaron otilde -18 -KPX rcaron p -10 -KPX rcaron period -100 -KPX rcaron q -18 -KPX rcaron v -10 -KPX rcommaaccent c -18 -KPX rcommaaccent cacute -18 -KPX rcommaaccent ccaron -18 -KPX rcommaaccent ccedilla -18 -KPX rcommaaccent comma -92 -KPX rcommaaccent e -18 -KPX rcommaaccent eacute -18 -KPX rcommaaccent ecaron -18 -KPX rcommaaccent ecircumflex -18 -KPX rcommaaccent edieresis -18 -KPX rcommaaccent edotaccent -18 -KPX rcommaaccent egrave -18 -KPX rcommaaccent emacron -18 -KPX rcommaaccent eogonek -18 -KPX rcommaaccent g -10 -KPX rcommaaccent gbreve -10 -KPX rcommaaccent gcommaaccent -10 -KPX rcommaaccent hyphen -37 -KPX rcommaaccent n -15 -KPX rcommaaccent nacute -15 -KPX rcommaaccent ncaron -15 -KPX rcommaaccent ncommaaccent -15 -KPX rcommaaccent ntilde -15 -KPX rcommaaccent o -18 -KPX rcommaaccent oacute -18 -KPX rcommaaccent ocircumflex -18 -KPX rcommaaccent odieresis -18 -KPX rcommaaccent ograve -18 -KPX rcommaaccent ohungarumlaut -18 -KPX rcommaaccent omacron -18 -KPX rcommaaccent oslash -18 -KPX rcommaaccent otilde -18 -KPX rcommaaccent p -10 -KPX rcommaaccent period -100 -KPX rcommaaccent q -18 -KPX rcommaaccent v -10 -KPX space A -55 -KPX space Aacute -55 -KPX space Abreve -55 -KPX space Acircumflex -55 -KPX space Adieresis -55 -KPX space Agrave -55 -KPX space Amacron -55 -KPX space Aogonek -55 -KPX space Aring -55 -KPX space Atilde -55 -KPX space T -30 -KPX space Tcaron -30 -KPX space Tcommaaccent -30 -KPX space V -45 -KPX space W -30 -KPX space Y -55 -KPX space Yacute -55 -KPX space Ydieresis -55 -KPX v a -10 -KPX v aacute -10 -KPX v abreve -10 -KPX v acircumflex -10 -KPX v adieresis -10 -KPX v agrave -10 -KPX v amacron -10 -KPX v aogonek -10 -KPX v aring -10 -KPX v atilde -10 -KPX v comma -55 -KPX v e -10 -KPX v eacute -10 -KPX v ecaron -10 -KPX v ecircumflex -10 -KPX v edieresis -10 -KPX v edotaccent -10 -KPX v egrave -10 -KPX v emacron -10 -KPX v eogonek -10 -KPX v o -10 -KPX v oacute -10 -KPX v ocircumflex -10 -KPX v odieresis -10 -KPX v ograve -10 -KPX v ohungarumlaut -10 -KPX v omacron -10 -KPX v oslash -10 -KPX v otilde -10 -KPX v period -70 -KPX w comma -55 -KPX w o -10 -KPX w oacute -10 -KPX w ocircumflex -10 -KPX w odieresis -10 -KPX w ograve -10 -KPX w ohungarumlaut -10 -KPX w omacron -10 -KPX w oslash -10 -KPX w otilde -10 -KPX w period -70 -KPX y comma -55 -KPX y e -10 -KPX y eacute -10 -KPX y ecaron -10 -KPX y ecircumflex -10 -KPX y edieresis -10 -KPX y edotaccent -10 -KPX y egrave -10 -KPX y emacron -10 -KPX y eogonek -10 -KPX y o -25 -KPX y oacute -25 -KPX y ocircumflex -25 -KPX y odieresis -25 -KPX y ograve -25 -KPX y ohungarumlaut -25 -KPX y omacron -25 -KPX y oslash -25 -KPX y otilde -25 -KPX y period -70 -KPX yacute comma -55 -KPX yacute e -10 -KPX yacute eacute -10 -KPX yacute ecaron -10 -KPX yacute ecircumflex -10 -KPX yacute edieresis -10 -KPX yacute edotaccent -10 -KPX yacute egrave -10 -KPX yacute emacron -10 -KPX yacute eogonek -10 -KPX yacute o -25 -KPX yacute oacute -25 -KPX yacute ocircumflex -25 -KPX yacute odieresis -25 -KPX yacute ograve -25 -KPX yacute ohungarumlaut -25 -KPX yacute omacron -25 -KPX yacute oslash -25 -KPX yacute otilde -25 -KPX yacute period -70 -KPX ydieresis comma -55 -KPX ydieresis e -10 -KPX ydieresis eacute -10 -KPX ydieresis ecaron -10 -KPX ydieresis ecircumflex -10 -KPX ydieresis edieresis -10 -KPX ydieresis edotaccent -10 -KPX ydieresis egrave -10 -KPX ydieresis emacron -10 -KPX ydieresis eogonek -10 -KPX ydieresis o -25 -KPX ydieresis oacute -25 -KPX ydieresis ocircumflex -25 -KPX ydieresis odieresis -25 -KPX ydieresis ograve -25 -KPX ydieresis ohungarumlaut -25 -KPX ydieresis omacron -25 -KPX ydieresis oslash -25 -KPX ydieresis otilde -25 -KPX ydieresis period -70 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Times-BoldItalic.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Times-BoldItalic.afm deleted file mode 100644 index 6da5178..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Times-BoldItalic.afm +++ /dev/null @@ -1,2384 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 13:04:06 1997 -Comment UniqueID 43066 -Comment VMusage 45874 56899 -FontName Times-BoldItalic -FullName Times Bold Italic -FamilyName Times -Weight Bold -ItalicAngle -15 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -200 -218 996 921 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 669 -XHeight 462 -Ascender 683 -Descender -217 -StdHW 42 -StdVW 121 -StartCharMetrics 315 -C 32 ; WX 250 ; N space ; B 0 0 0 0 ; -C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ; -C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ; -C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ; -C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ; -C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ; -C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ; -C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ; -C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ; -C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ; -C 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ; -C 43 ; WX 570 ; N plus ; B 33 0 537 506 ; -C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ; -C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ; -C 46 ; WX 250 ; N period ; B -9 -13 139 135 ; -C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ; -C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ; -C 49 ; WX 500 ; N one ; B 5 0 419 683 ; -C 50 ; WX 500 ; N two ; B -27 0 446 683 ; -C 51 ; WX 500 ; N three ; B -15 -13 450 683 ; -C 52 ; WX 500 ; N four ; B -15 0 503 683 ; -C 53 ; WX 500 ; N five ; B -11 -13 487 669 ; -C 54 ; WX 500 ; N six ; B 23 -15 509 679 ; -C 55 ; WX 500 ; N seven ; B 52 0 525 669 ; -C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ; -C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ; -C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ; -C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ; -C 60 ; WX 570 ; N less ; B 31 -8 539 514 ; -C 61 ; WX 570 ; N equal ; B 33 107 537 399 ; -C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ; -C 63 ; WX 500 ; N question ; B 79 -13 470 684 ; -C 64 ; WX 832 ; N at ; B 63 -18 770 685 ; -C 65 ; WX 667 ; N A ; B -67 0 593 683 ; -C 66 ; WX 667 ; N B ; B -24 0 624 669 ; -C 67 ; WX 667 ; N C ; B 32 -18 677 685 ; -C 68 ; WX 722 ; N D ; B -46 0 685 669 ; -C 69 ; WX 667 ; N E ; B -27 0 653 669 ; -C 70 ; WX 667 ; N F ; B -13 0 660 669 ; -C 71 ; WX 722 ; N G ; B 21 -18 706 685 ; -C 72 ; WX 778 ; N H ; B -24 0 799 669 ; -C 73 ; WX 389 ; N I ; B -32 0 406 669 ; -C 74 ; WX 500 ; N J ; B -46 -99 524 669 ; -C 75 ; WX 667 ; N K ; B -21 0 702 669 ; -C 76 ; WX 611 ; N L ; B -22 0 590 669 ; -C 77 ; WX 889 ; N M ; B -29 -12 917 669 ; -C 78 ; WX 722 ; N N ; B -27 -15 748 669 ; -C 79 ; WX 722 ; N O ; B 27 -18 691 685 ; -C 80 ; WX 611 ; N P ; B -27 0 613 669 ; -C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ; -C 82 ; WX 667 ; N R ; B -29 0 623 669 ; -C 83 ; WX 556 ; N S ; B 2 -18 526 685 ; -C 84 ; WX 611 ; N T ; B 50 0 650 669 ; -C 85 ; WX 722 ; N U ; B 67 -18 744 669 ; -C 86 ; WX 667 ; N V ; B 65 -18 715 669 ; -C 87 ; WX 889 ; N W ; B 65 -18 940 669 ; -C 88 ; WX 667 ; N X ; B -24 0 694 669 ; -C 89 ; WX 611 ; N Y ; B 73 0 659 669 ; -C 90 ; WX 611 ; N Z ; B -11 0 590 669 ; -C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ; -C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ; -C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ; -C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ; -C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; -C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ; -C 97 ; WX 500 ; N a ; B -21 -14 455 462 ; -C 98 ; WX 500 ; N b ; B -14 -13 444 699 ; -C 99 ; WX 444 ; N c ; B -5 -13 392 462 ; -C 100 ; WX 500 ; N d ; B -21 -13 517 699 ; -C 101 ; WX 444 ; N e ; B 5 -13 398 462 ; -C 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ; -C 103 ; WX 500 ; N g ; B -52 -203 478 462 ; -C 104 ; WX 556 ; N h ; B -13 -9 498 699 ; -C 105 ; WX 278 ; N i ; B 2 -9 263 684 ; -C 106 ; WX 278 ; N j ; B -189 -207 279 684 ; -C 107 ; WX 500 ; N k ; B -23 -8 483 699 ; -C 108 ; WX 278 ; N l ; B 2 -9 290 699 ; -C 109 ; WX 778 ; N m ; B -14 -9 722 462 ; -C 110 ; WX 556 ; N n ; B -6 -9 493 462 ; -C 111 ; WX 500 ; N o ; B -3 -13 441 462 ; -C 112 ; WX 500 ; N p ; B -120 -205 446 462 ; -C 113 ; WX 500 ; N q ; B 1 -205 471 462 ; -C 114 ; WX 389 ; N r ; B -21 0 389 462 ; -C 115 ; WX 389 ; N s ; B -19 -13 333 462 ; -C 116 ; WX 278 ; N t ; B -11 -9 281 594 ; -C 117 ; WX 556 ; N u ; B 15 -9 492 462 ; -C 118 ; WX 444 ; N v ; B 16 -13 401 462 ; -C 119 ; WX 667 ; N w ; B 16 -13 614 462 ; -C 120 ; WX 500 ; N x ; B -46 -13 469 462 ; -C 121 ; WX 444 ; N y ; B -94 -205 392 462 ; -C 122 ; WX 389 ; N z ; B -43 -78 368 449 ; -C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ; -C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ; -C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ; -C 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ; -C 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ; -C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ; -C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ; -C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ; -C 165 ; WX 500 ; N yen ; B 33 0 628 669 ; -C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ; -C 167 ; WX 500 ; N section ; B 36 -143 459 685 ; -C 168 ; WX 500 ; N currency ; B -26 34 526 586 ; -C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ; -C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ; -C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ; -C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ; -C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ; -C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ; -C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ; -C 177 ; WX 500 ; N endash ; B -40 178 477 269 ; -C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ; -C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ; -C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ; -C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ; -C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ; -C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ; -C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ; -C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ; -C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ; -C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ; -C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ; -C 193 ; WX 333 ; N grave ; B 85 516 297 697 ; -C 194 ; WX 333 ; N acute ; B 139 516 379 697 ; -C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ; -C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ; -C 197 ; WX 333 ; N macron ; B 51 553 393 623 ; -C 198 ; WX 333 ; N breve ; B 71 516 387 678 ; -C 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ; -C 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ; -C 202 ; WX 333 ; N ring ; B 127 516 340 729 ; -C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ; -C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ; -C 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ; -C 207 ; WX 333 ; N caron ; B 79 516 411 690 ; -C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ; -C 225 ; WX 944 ; N AE ; B -64 0 918 669 ; -C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ; -C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ; -C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ; -C 234 ; WX 944 ; N OE ; B 23 -8 946 677 ; -C 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ; -C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ; -C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ; -C 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ; -C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ; -C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ; -C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ; -C -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ; -C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ; -C -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ; -C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ; -C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ; -C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ; -C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ; -C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ; -C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ; -C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ; -C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ; -C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ; -C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ; -C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ; -C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ; -C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ; -C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ; -C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ; -C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ; -C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ; -C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ; -C -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ; -C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ; -C -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ; -C -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ; -C -1 ; WX 500 ; N aring ; B -21 -14 455 729 ; -C -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ; -C -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ; -C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ; -C -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ; -C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ; -C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ; -C -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ; -C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ; -C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ; -C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ; -C -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ; -C -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ; -C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ; -C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ; -C -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ; -C -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ; -C -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ; -C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ; -C -1 ; WX 611 ; N Thorn ; B -27 0 573 669 ; -C -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ; -C -1 ; WX 667 ; N Racute ; B -29 0 623 904 ; -C -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ; -C -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ; -C -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ; -C -1 ; WX 556 ; N uring ; B 15 -9 492 729 ; -C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ; -C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ; -C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ; -C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ; -C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ; -C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ; -C -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ; -C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ; -C -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ; -C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ; -C -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ; -C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ; -C -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ; -C -1 ; WX 444 ; N edieresis ; B 5 -13 448 655 ; -C -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ; -C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ; -C -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ; -C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ; -C -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ; -C -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ; -C -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ; -C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ; -C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ; -C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ; -C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ; -C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ; -C -1 ; WX 389 ; N racute ; B -21 0 407 697 ; -C -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ; -C -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ; -C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ; -C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ; -C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ; -C -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ; -C -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ; -C -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ; -C -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ; -C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ; -C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ; -C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ; -C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ; -C -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ; -C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ; -C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ; -C -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ; -C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ; -C -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ; -C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ; -C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ; -C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ; -C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ; -C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ; -C -1 ; WX 278 ; N igrave ; B 2 -9 259 697 ; -C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ; -C -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ; -C -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ; -C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ; -C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ; -C -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ; -C -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ; -C -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ; -C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ; -C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ; -C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ; -C -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ; -C -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ; -C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ; -C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ; -C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ; -C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ; -C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ; -C -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ; -C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ; -C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ; -C -1 ; WX 556 ; N Scaron ; B 2 -18 553 897 ; -C -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ; -C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ; -C -1 ; WX 400 ; N degree ; B 83 397 369 683 ; -C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ; -C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ; -C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ; -C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ; -C -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ; -C -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ; -C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ; -C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ; -C -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ; -C -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ; -C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ; -C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ; -C -1 ; WX 667 ; N Aring ; B -67 0 593 921 ; -C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ; -C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ; -C -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ; -C -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ; -C -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ; -C -1 ; WX 606 ; N minus ; B 51 209 555 297 ; -C -1 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ; -C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ; -C -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ; -C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ; -C -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ; -C -1 ; WX 556 ; N udieresis ; B 15 -9 499 655 ; -C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ; -C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ; -C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ; -C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ; -C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ; -C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ; -C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ; -C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2038 -KPX A C -65 -KPX A Cacute -65 -KPX A Ccaron -65 -KPX A Ccedilla -65 -KPX A G -60 -KPX A Gbreve -60 -KPX A Gcommaaccent -60 -KPX A O -50 -KPX A Oacute -50 -KPX A Ocircumflex -50 -KPX A Odieresis -50 -KPX A Ograve -50 -KPX A Ohungarumlaut -50 -KPX A Omacron -50 -KPX A Oslash -50 -KPX A Otilde -50 -KPX A Q -55 -KPX A T -55 -KPX A Tcaron -55 -KPX A Tcommaaccent -55 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -95 -KPX A W -100 -KPX A Y -70 -KPX A Yacute -70 -KPX A Ydieresis -70 -KPX A quoteright -74 -KPX A u -30 -KPX A uacute -30 -KPX A ucircumflex -30 -KPX A udieresis -30 -KPX A ugrave -30 -KPX A uhungarumlaut -30 -KPX A umacron -30 -KPX A uogonek -30 -KPX A uring -30 -KPX A v -74 -KPX A w -74 -KPX A y -74 -KPX A yacute -74 -KPX A ydieresis -74 -KPX Aacute C -65 -KPX Aacute Cacute -65 -KPX Aacute Ccaron -65 -KPX Aacute Ccedilla -65 -KPX Aacute G -60 -KPX Aacute Gbreve -60 -KPX Aacute Gcommaaccent -60 -KPX Aacute O -50 -KPX Aacute Oacute -50 -KPX Aacute Ocircumflex -50 -KPX Aacute Odieresis -50 -KPX Aacute Ograve -50 -KPX Aacute Ohungarumlaut -50 -KPX Aacute Omacron -50 -KPX Aacute Oslash -50 -KPX Aacute Otilde -50 -KPX Aacute Q -55 -KPX Aacute T -55 -KPX Aacute Tcaron -55 -KPX Aacute Tcommaaccent -55 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -95 -KPX Aacute W -100 -KPX Aacute Y -70 -KPX Aacute Yacute -70 -KPX Aacute Ydieresis -70 -KPX Aacute quoteright -74 -KPX Aacute u -30 -KPX Aacute uacute -30 -KPX Aacute ucircumflex -30 -KPX Aacute udieresis -30 -KPX Aacute ugrave -30 -KPX Aacute uhungarumlaut -30 -KPX Aacute umacron -30 -KPX Aacute uogonek -30 -KPX Aacute uring -30 -KPX Aacute v -74 -KPX Aacute w -74 -KPX Aacute y -74 -KPX Aacute yacute -74 -KPX Aacute ydieresis -74 -KPX Abreve C -65 -KPX Abreve Cacute -65 -KPX Abreve Ccaron -65 -KPX Abreve Ccedilla -65 -KPX Abreve G -60 -KPX Abreve Gbreve -60 -KPX Abreve Gcommaaccent -60 -KPX Abreve O -50 -KPX Abreve Oacute -50 -KPX Abreve Ocircumflex -50 -KPX Abreve Odieresis -50 -KPX Abreve Ograve -50 -KPX Abreve Ohungarumlaut -50 -KPX Abreve Omacron -50 -KPX Abreve Oslash -50 -KPX Abreve Otilde -50 -KPX Abreve Q -55 -KPX Abreve T -55 -KPX Abreve Tcaron -55 -KPX Abreve Tcommaaccent -55 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -95 -KPX Abreve W -100 -KPX Abreve Y -70 -KPX Abreve Yacute -70 -KPX Abreve Ydieresis -70 -KPX Abreve quoteright -74 -KPX Abreve u -30 -KPX Abreve uacute -30 -KPX Abreve ucircumflex -30 -KPX Abreve udieresis -30 -KPX Abreve ugrave -30 -KPX Abreve uhungarumlaut -30 -KPX Abreve umacron -30 -KPX Abreve uogonek -30 -KPX Abreve uring -30 -KPX Abreve v -74 -KPX Abreve w -74 -KPX Abreve y -74 -KPX Abreve yacute -74 -KPX Abreve ydieresis -74 -KPX Acircumflex C -65 -KPX Acircumflex Cacute -65 -KPX Acircumflex Ccaron -65 -KPX Acircumflex Ccedilla -65 -KPX Acircumflex G -60 -KPX Acircumflex Gbreve -60 -KPX Acircumflex Gcommaaccent -60 -KPX Acircumflex O -50 -KPX Acircumflex Oacute -50 -KPX Acircumflex Ocircumflex -50 -KPX Acircumflex Odieresis -50 -KPX Acircumflex Ograve -50 -KPX Acircumflex Ohungarumlaut -50 -KPX Acircumflex Omacron -50 -KPX Acircumflex Oslash -50 -KPX Acircumflex Otilde -50 -KPX Acircumflex Q -55 -KPX Acircumflex T -55 -KPX Acircumflex Tcaron -55 -KPX Acircumflex Tcommaaccent -55 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -95 -KPX Acircumflex W -100 -KPX Acircumflex Y -70 -KPX Acircumflex Yacute -70 -KPX Acircumflex Ydieresis -70 -KPX Acircumflex quoteright -74 -KPX Acircumflex u -30 -KPX Acircumflex uacute -30 -KPX Acircumflex ucircumflex -30 -KPX Acircumflex udieresis -30 -KPX Acircumflex ugrave -30 -KPX Acircumflex uhungarumlaut -30 -KPX Acircumflex umacron -30 -KPX Acircumflex uogonek -30 -KPX Acircumflex uring -30 -KPX Acircumflex v -74 -KPX Acircumflex w -74 -KPX Acircumflex y -74 -KPX Acircumflex yacute -74 -KPX Acircumflex ydieresis -74 -KPX Adieresis C -65 -KPX Adieresis Cacute -65 -KPX Adieresis Ccaron -65 -KPX Adieresis Ccedilla -65 -KPX Adieresis G -60 -KPX Adieresis Gbreve -60 -KPX Adieresis Gcommaaccent -60 -KPX Adieresis O -50 -KPX Adieresis Oacute -50 -KPX Adieresis Ocircumflex -50 -KPX Adieresis Odieresis -50 -KPX Adieresis Ograve -50 -KPX Adieresis Ohungarumlaut -50 -KPX Adieresis Omacron -50 -KPX Adieresis Oslash -50 -KPX Adieresis Otilde -50 -KPX Adieresis Q -55 -KPX Adieresis T -55 -KPX Adieresis Tcaron -55 -KPX Adieresis Tcommaaccent -55 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -95 -KPX Adieresis W -100 -KPX Adieresis Y -70 -KPX Adieresis Yacute -70 -KPX Adieresis Ydieresis -70 -KPX Adieresis quoteright -74 -KPX Adieresis u -30 -KPX Adieresis uacute -30 -KPX Adieresis ucircumflex -30 -KPX Adieresis udieresis -30 -KPX Adieresis ugrave -30 -KPX Adieresis uhungarumlaut -30 -KPX Adieresis umacron -30 -KPX Adieresis uogonek -30 -KPX Adieresis uring -30 -KPX Adieresis v -74 -KPX Adieresis w -74 -KPX Adieresis y -74 -KPX Adieresis yacute -74 -KPX Adieresis ydieresis -74 -KPX Agrave C -65 -KPX Agrave Cacute -65 -KPX Agrave Ccaron -65 -KPX Agrave Ccedilla -65 -KPX Agrave G -60 -KPX Agrave Gbreve -60 -KPX Agrave Gcommaaccent -60 -KPX Agrave O -50 -KPX Agrave Oacute -50 -KPX Agrave Ocircumflex -50 -KPX Agrave Odieresis -50 -KPX Agrave Ograve -50 -KPX Agrave Ohungarumlaut -50 -KPX Agrave Omacron -50 -KPX Agrave Oslash -50 -KPX Agrave Otilde -50 -KPX Agrave Q -55 -KPX Agrave T -55 -KPX Agrave Tcaron -55 -KPX Agrave Tcommaaccent -55 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -95 -KPX Agrave W -100 -KPX Agrave Y -70 -KPX Agrave Yacute -70 -KPX Agrave Ydieresis -70 -KPX Agrave quoteright -74 -KPX Agrave u -30 -KPX Agrave uacute -30 -KPX Agrave ucircumflex -30 -KPX Agrave udieresis -30 -KPX Agrave ugrave -30 -KPX Agrave uhungarumlaut -30 -KPX Agrave umacron -30 -KPX Agrave uogonek -30 -KPX Agrave uring -30 -KPX Agrave v -74 -KPX Agrave w -74 -KPX Agrave y -74 -KPX Agrave yacute -74 -KPX Agrave ydieresis -74 -KPX Amacron C -65 -KPX Amacron Cacute -65 -KPX Amacron Ccaron -65 -KPX Amacron Ccedilla -65 -KPX Amacron G -60 -KPX Amacron Gbreve -60 -KPX Amacron Gcommaaccent -60 -KPX Amacron O -50 -KPX Amacron Oacute -50 -KPX Amacron Ocircumflex -50 -KPX Amacron Odieresis -50 -KPX Amacron Ograve -50 -KPX Amacron Ohungarumlaut -50 -KPX Amacron Omacron -50 -KPX Amacron Oslash -50 -KPX Amacron Otilde -50 -KPX Amacron Q -55 -KPX Amacron T -55 -KPX Amacron Tcaron -55 -KPX Amacron Tcommaaccent -55 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -95 -KPX Amacron W -100 -KPX Amacron Y -70 -KPX Amacron Yacute -70 -KPX Amacron Ydieresis -70 -KPX Amacron quoteright -74 -KPX Amacron u -30 -KPX Amacron uacute -30 -KPX Amacron ucircumflex -30 -KPX Amacron udieresis -30 -KPX Amacron ugrave -30 -KPX Amacron uhungarumlaut -30 -KPX Amacron umacron -30 -KPX Amacron uogonek -30 -KPX Amacron uring -30 -KPX Amacron v -74 -KPX Amacron w -74 -KPX Amacron y -74 -KPX Amacron yacute -74 -KPX Amacron ydieresis -74 -KPX Aogonek C -65 -KPX Aogonek Cacute -65 -KPX Aogonek Ccaron -65 -KPX Aogonek Ccedilla -65 -KPX Aogonek G -60 -KPX Aogonek Gbreve -60 -KPX Aogonek Gcommaaccent -60 -KPX Aogonek O -50 -KPX Aogonek Oacute -50 -KPX Aogonek Ocircumflex -50 -KPX Aogonek Odieresis -50 -KPX Aogonek Ograve -50 -KPX Aogonek Ohungarumlaut -50 -KPX Aogonek Omacron -50 -KPX Aogonek Oslash -50 -KPX Aogonek Otilde -50 -KPX Aogonek Q -55 -KPX Aogonek T -55 -KPX Aogonek Tcaron -55 -KPX Aogonek Tcommaaccent -55 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -95 -KPX Aogonek W -100 -KPX Aogonek Y -70 -KPX Aogonek Yacute -70 -KPX Aogonek Ydieresis -70 -KPX Aogonek quoteright -74 -KPX Aogonek u -30 -KPX Aogonek uacute -30 -KPX Aogonek ucircumflex -30 -KPX Aogonek udieresis -30 -KPX Aogonek ugrave -30 -KPX Aogonek uhungarumlaut -30 -KPX Aogonek umacron -30 -KPX Aogonek uogonek -30 -KPX Aogonek uring -30 -KPX Aogonek v -74 -KPX Aogonek w -74 -KPX Aogonek y -34 -KPX Aogonek yacute -34 -KPX Aogonek ydieresis -34 -KPX Aring C -65 -KPX Aring Cacute -65 -KPX Aring Ccaron -65 -KPX Aring Ccedilla -65 -KPX Aring G -60 -KPX Aring Gbreve -60 -KPX Aring Gcommaaccent -60 -KPX Aring O -50 -KPX Aring Oacute -50 -KPX Aring Ocircumflex -50 -KPX Aring Odieresis -50 -KPX Aring Ograve -50 -KPX Aring Ohungarumlaut -50 -KPX Aring Omacron -50 -KPX Aring Oslash -50 -KPX Aring Otilde -50 -KPX Aring Q -55 -KPX Aring T -55 -KPX Aring Tcaron -55 -KPX Aring Tcommaaccent -55 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -95 -KPX Aring W -100 -KPX Aring Y -70 -KPX Aring Yacute -70 -KPX Aring Ydieresis -70 -KPX Aring quoteright -74 -KPX Aring u -30 -KPX Aring uacute -30 -KPX Aring ucircumflex -30 -KPX Aring udieresis -30 -KPX Aring ugrave -30 -KPX Aring uhungarumlaut -30 -KPX Aring umacron -30 -KPX Aring uogonek -30 -KPX Aring uring -30 -KPX Aring v -74 -KPX Aring w -74 -KPX Aring y -74 -KPX Aring yacute -74 -KPX Aring ydieresis -74 -KPX Atilde C -65 -KPX Atilde Cacute -65 -KPX Atilde Ccaron -65 -KPX Atilde Ccedilla -65 -KPX Atilde G -60 -KPX Atilde Gbreve -60 -KPX Atilde Gcommaaccent -60 -KPX Atilde O -50 -KPX Atilde Oacute -50 -KPX Atilde Ocircumflex -50 -KPX Atilde Odieresis -50 -KPX Atilde Ograve -50 -KPX Atilde Ohungarumlaut -50 -KPX Atilde Omacron -50 -KPX Atilde Oslash -50 -KPX Atilde Otilde -50 -KPX Atilde Q -55 -KPX Atilde T -55 -KPX Atilde Tcaron -55 -KPX Atilde Tcommaaccent -55 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -95 -KPX Atilde W -100 -KPX Atilde Y -70 -KPX Atilde Yacute -70 -KPX Atilde Ydieresis -70 -KPX Atilde quoteright -74 -KPX Atilde u -30 -KPX Atilde uacute -30 -KPX Atilde ucircumflex -30 -KPX Atilde udieresis -30 -KPX Atilde ugrave -30 -KPX Atilde uhungarumlaut -30 -KPX Atilde umacron -30 -KPX Atilde uogonek -30 -KPX Atilde uring -30 -KPX Atilde v -74 -KPX Atilde w -74 -KPX Atilde y -74 -KPX Atilde yacute -74 -KPX Atilde ydieresis -74 -KPX B A -25 -KPX B Aacute -25 -KPX B Abreve -25 -KPX B Acircumflex -25 -KPX B Adieresis -25 -KPX B Agrave -25 -KPX B Amacron -25 -KPX B Aogonek -25 -KPX B Aring -25 -KPX B Atilde -25 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -25 -KPX D Aacute -25 -KPX D Abreve -25 -KPX D Acircumflex -25 -KPX D Adieresis -25 -KPX D Agrave -25 -KPX D Amacron -25 -KPX D Aogonek -25 -KPX D Aring -25 -KPX D Atilde -25 -KPX D V -50 -KPX D W -40 -KPX D Y -50 -KPX D Yacute -50 -KPX D Ydieresis -50 -KPX Dcaron A -25 -KPX Dcaron Aacute -25 -KPX Dcaron Abreve -25 -KPX Dcaron Acircumflex -25 -KPX Dcaron Adieresis -25 -KPX Dcaron Agrave -25 -KPX Dcaron Amacron -25 -KPX Dcaron Aogonek -25 -KPX Dcaron Aring -25 -KPX Dcaron Atilde -25 -KPX Dcaron V -50 -KPX Dcaron W -40 -KPX Dcaron Y -50 -KPX Dcaron Yacute -50 -KPX Dcaron Ydieresis -50 -KPX Dcroat A -25 -KPX Dcroat Aacute -25 -KPX Dcroat Abreve -25 -KPX Dcroat Acircumflex -25 -KPX Dcroat Adieresis -25 -KPX Dcroat Agrave -25 -KPX Dcroat Amacron -25 -KPX Dcroat Aogonek -25 -KPX Dcroat Aring -25 -KPX Dcroat Atilde -25 -KPX Dcroat V -50 -KPX Dcroat W -40 -KPX Dcroat Y -50 -KPX Dcroat Yacute -50 -KPX Dcroat Ydieresis -50 -KPX F A -100 -KPX F Aacute -100 -KPX F Abreve -100 -KPX F Acircumflex -100 -KPX F Adieresis -100 -KPX F Agrave -100 -KPX F Amacron -100 -KPX F Aogonek -100 -KPX F Aring -100 -KPX F Atilde -100 -KPX F a -95 -KPX F aacute -95 -KPX F abreve -95 -KPX F acircumflex -95 -KPX F adieresis -95 -KPX F agrave -95 -KPX F amacron -95 -KPX F aogonek -95 -KPX F aring -95 -KPX F atilde -95 -KPX F comma -129 -KPX F e -100 -KPX F eacute -100 -KPX F ecaron -100 -KPX F ecircumflex -100 -KPX F edieresis -100 -KPX F edotaccent -100 -KPX F egrave -100 -KPX F emacron -100 -KPX F eogonek -100 -KPX F i -40 -KPX F iacute -40 -KPX F icircumflex -40 -KPX F idieresis -40 -KPX F igrave -40 -KPX F imacron -40 -KPX F iogonek -40 -KPX F o -70 -KPX F oacute -70 -KPX F ocircumflex -70 -KPX F odieresis -70 -KPX F ograve -70 -KPX F ohungarumlaut -70 -KPX F omacron -70 -KPX F oslash -70 -KPX F otilde -70 -KPX F period -129 -KPX F r -50 -KPX F racute -50 -KPX F rcaron -50 -KPX F rcommaaccent -50 -KPX J A -25 -KPX J Aacute -25 -KPX J Abreve -25 -KPX J Acircumflex -25 -KPX J Adieresis -25 -KPX J Agrave -25 -KPX J Amacron -25 -KPX J Aogonek -25 -KPX J Aring -25 -KPX J Atilde -25 -KPX J a -40 -KPX J aacute -40 -KPX J abreve -40 -KPX J acircumflex -40 -KPX J adieresis -40 -KPX J agrave -40 -KPX J amacron -40 -KPX J aogonek -40 -KPX J aring -40 -KPX J atilde -40 -KPX J comma -10 -KPX J e -40 -KPX J eacute -40 -KPX J ecaron -40 -KPX J ecircumflex -40 -KPX J edieresis -40 -KPX J edotaccent -40 -KPX J egrave -40 -KPX J emacron -40 -KPX J eogonek -40 -KPX J o -40 -KPX J oacute -40 -KPX J ocircumflex -40 -KPX J odieresis -40 -KPX J ograve -40 -KPX J ohungarumlaut -40 -KPX J omacron -40 -KPX J oslash -40 -KPX J otilde -40 -KPX J period -10 -KPX J u -40 -KPX J uacute -40 -KPX J ucircumflex -40 -KPX J udieresis -40 -KPX J ugrave -40 -KPX J uhungarumlaut -40 -KPX J umacron -40 -KPX J uogonek -40 -KPX J uring -40 -KPX K O -30 -KPX K Oacute -30 -KPX K Ocircumflex -30 -KPX K Odieresis -30 -KPX K Ograve -30 -KPX K Ohungarumlaut -30 -KPX K Omacron -30 -KPX K Oslash -30 -KPX K Otilde -30 -KPX K e -25 -KPX K eacute -25 -KPX K ecaron -25 -KPX K ecircumflex -25 -KPX K edieresis -25 -KPX K edotaccent -25 -KPX K egrave -25 -KPX K emacron -25 -KPX K eogonek -25 -KPX K o -25 -KPX K oacute -25 -KPX K ocircumflex -25 -KPX K odieresis -25 -KPX K ograve -25 -KPX K ohungarumlaut -25 -KPX K omacron -25 -KPX K oslash -25 -KPX K otilde -25 -KPX K u -20 -KPX K uacute -20 -KPX K ucircumflex -20 -KPX K udieresis -20 -KPX K ugrave -20 -KPX K uhungarumlaut -20 -KPX K umacron -20 -KPX K uogonek -20 -KPX K uring -20 -KPX K y -20 -KPX K yacute -20 -KPX K ydieresis -20 -KPX Kcommaaccent O -30 -KPX Kcommaaccent Oacute -30 -KPX Kcommaaccent Ocircumflex -30 -KPX Kcommaaccent Odieresis -30 -KPX Kcommaaccent Ograve -30 -KPX Kcommaaccent Ohungarumlaut -30 -KPX Kcommaaccent Omacron -30 -KPX Kcommaaccent Oslash -30 -KPX Kcommaaccent Otilde -30 -KPX Kcommaaccent e -25 -KPX Kcommaaccent eacute -25 -KPX Kcommaaccent ecaron -25 -KPX Kcommaaccent ecircumflex -25 -KPX Kcommaaccent edieresis -25 -KPX Kcommaaccent edotaccent -25 -KPX Kcommaaccent egrave -25 -KPX Kcommaaccent emacron -25 -KPX Kcommaaccent eogonek -25 -KPX Kcommaaccent o -25 -KPX Kcommaaccent oacute -25 -KPX Kcommaaccent ocircumflex -25 -KPX Kcommaaccent odieresis -25 -KPX Kcommaaccent ograve -25 -KPX Kcommaaccent ohungarumlaut -25 -KPX Kcommaaccent omacron -25 -KPX Kcommaaccent oslash -25 -KPX Kcommaaccent otilde -25 -KPX Kcommaaccent u -20 -KPX Kcommaaccent uacute -20 -KPX Kcommaaccent ucircumflex -20 -KPX Kcommaaccent udieresis -20 -KPX Kcommaaccent ugrave -20 -KPX Kcommaaccent uhungarumlaut -20 -KPX Kcommaaccent umacron -20 -KPX Kcommaaccent uogonek -20 -KPX Kcommaaccent uring -20 -KPX Kcommaaccent y -20 -KPX Kcommaaccent yacute -20 -KPX Kcommaaccent ydieresis -20 -KPX L T -18 -KPX L Tcaron -18 -KPX L Tcommaaccent -18 -KPX L V -37 -KPX L W -37 -KPX L Y -37 -KPX L Yacute -37 -KPX L Ydieresis -37 -KPX L quoteright -55 -KPX L y -37 -KPX L yacute -37 -KPX L ydieresis -37 -KPX Lacute T -18 -KPX Lacute Tcaron -18 -KPX Lacute Tcommaaccent -18 -KPX Lacute V -37 -KPX Lacute W -37 -KPX Lacute Y -37 -KPX Lacute Yacute -37 -KPX Lacute Ydieresis -37 -KPX Lacute quoteright -55 -KPX Lacute y -37 -KPX Lacute yacute -37 -KPX Lacute ydieresis -37 -KPX Lcommaaccent T -18 -KPX Lcommaaccent Tcaron -18 -KPX Lcommaaccent Tcommaaccent -18 -KPX Lcommaaccent V -37 -KPX Lcommaaccent W -37 -KPX Lcommaaccent Y -37 -KPX Lcommaaccent Yacute -37 -KPX Lcommaaccent Ydieresis -37 -KPX Lcommaaccent quoteright -55 -KPX Lcommaaccent y -37 -KPX Lcommaaccent yacute -37 -KPX Lcommaaccent ydieresis -37 -KPX Lslash T -18 -KPX Lslash Tcaron -18 -KPX Lslash Tcommaaccent -18 -KPX Lslash V -37 -KPX Lslash W -37 -KPX Lslash Y -37 -KPX Lslash Yacute -37 -KPX Lslash Ydieresis -37 -KPX Lslash quoteright -55 -KPX Lslash y -37 -KPX Lslash yacute -37 -KPX Lslash ydieresis -37 -KPX N A -30 -KPX N Aacute -30 -KPX N Abreve -30 -KPX N Acircumflex -30 -KPX N Adieresis -30 -KPX N Agrave -30 -KPX N Amacron -30 -KPX N Aogonek -30 -KPX N Aring -30 -KPX N Atilde -30 -KPX Nacute A -30 -KPX Nacute Aacute -30 -KPX Nacute Abreve -30 -KPX Nacute Acircumflex -30 -KPX Nacute Adieresis -30 -KPX Nacute Agrave -30 -KPX Nacute Amacron -30 -KPX Nacute Aogonek -30 -KPX Nacute Aring -30 -KPX Nacute Atilde -30 -KPX Ncaron A -30 -KPX Ncaron Aacute -30 -KPX Ncaron Abreve -30 -KPX Ncaron Acircumflex -30 -KPX Ncaron Adieresis -30 -KPX Ncaron Agrave -30 -KPX Ncaron Amacron -30 -KPX Ncaron Aogonek -30 -KPX Ncaron Aring -30 -KPX Ncaron Atilde -30 -KPX Ncommaaccent A -30 -KPX Ncommaaccent Aacute -30 -KPX Ncommaaccent Abreve -30 -KPX Ncommaaccent Acircumflex -30 -KPX Ncommaaccent Adieresis -30 -KPX Ncommaaccent Agrave -30 -KPX Ncommaaccent Amacron -30 -KPX Ncommaaccent Aogonek -30 -KPX Ncommaaccent Aring -30 -KPX Ncommaaccent Atilde -30 -KPX Ntilde A -30 -KPX Ntilde Aacute -30 -KPX Ntilde Abreve -30 -KPX Ntilde Acircumflex -30 -KPX Ntilde Adieresis -30 -KPX Ntilde Agrave -30 -KPX Ntilde Amacron -30 -KPX Ntilde Aogonek -30 -KPX Ntilde Aring -30 -KPX Ntilde Atilde -30 -KPX O A -40 -KPX O Aacute -40 -KPX O Abreve -40 -KPX O Acircumflex -40 -KPX O Adieresis -40 -KPX O Agrave -40 -KPX O Amacron -40 -KPX O Aogonek -40 -KPX O Aring -40 -KPX O Atilde -40 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -50 -KPX O X -40 -KPX O Y -50 -KPX O Yacute -50 -KPX O Ydieresis -50 -KPX Oacute A -40 -KPX Oacute Aacute -40 -KPX Oacute Abreve -40 -KPX Oacute Acircumflex -40 -KPX Oacute Adieresis -40 -KPX Oacute Agrave -40 -KPX Oacute Amacron -40 -KPX Oacute Aogonek -40 -KPX Oacute Aring -40 -KPX Oacute Atilde -40 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -50 -KPX Oacute X -40 -KPX Oacute Y -50 -KPX Oacute Yacute -50 -KPX Oacute Ydieresis -50 -KPX Ocircumflex A -40 -KPX Ocircumflex Aacute -40 -KPX Ocircumflex Abreve -40 -KPX Ocircumflex Acircumflex -40 -KPX Ocircumflex Adieresis -40 -KPX Ocircumflex Agrave -40 -KPX Ocircumflex Amacron -40 -KPX Ocircumflex Aogonek -40 -KPX Ocircumflex Aring -40 -KPX Ocircumflex Atilde -40 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -50 -KPX Ocircumflex X -40 -KPX Ocircumflex Y -50 -KPX Ocircumflex Yacute -50 -KPX Ocircumflex Ydieresis -50 -KPX Odieresis A -40 -KPX Odieresis Aacute -40 -KPX Odieresis Abreve -40 -KPX Odieresis Acircumflex -40 -KPX Odieresis Adieresis -40 -KPX Odieresis Agrave -40 -KPX Odieresis Amacron -40 -KPX Odieresis Aogonek -40 -KPX Odieresis Aring -40 -KPX Odieresis Atilde -40 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -50 -KPX Odieresis X -40 -KPX Odieresis Y -50 -KPX Odieresis Yacute -50 -KPX Odieresis Ydieresis -50 -KPX Ograve A -40 -KPX Ograve Aacute -40 -KPX Ograve Abreve -40 -KPX Ograve Acircumflex -40 -KPX Ograve Adieresis -40 -KPX Ograve Agrave -40 -KPX Ograve Amacron -40 -KPX Ograve Aogonek -40 -KPX Ograve Aring -40 -KPX Ograve Atilde -40 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -50 -KPX Ograve X -40 -KPX Ograve Y -50 -KPX Ograve Yacute -50 -KPX Ograve Ydieresis -50 -KPX Ohungarumlaut A -40 -KPX Ohungarumlaut Aacute -40 -KPX Ohungarumlaut Abreve -40 -KPX Ohungarumlaut Acircumflex -40 -KPX Ohungarumlaut Adieresis -40 -KPX Ohungarumlaut Agrave -40 -KPX Ohungarumlaut Amacron -40 -KPX Ohungarumlaut Aogonek -40 -KPX Ohungarumlaut Aring -40 -KPX Ohungarumlaut Atilde -40 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -50 -KPX Ohungarumlaut X -40 -KPX Ohungarumlaut Y -50 -KPX Ohungarumlaut Yacute -50 -KPX Ohungarumlaut Ydieresis -50 -KPX Omacron A -40 -KPX Omacron Aacute -40 -KPX Omacron Abreve -40 -KPX Omacron Acircumflex -40 -KPX Omacron Adieresis -40 -KPX Omacron Agrave -40 -KPX Omacron Amacron -40 -KPX Omacron Aogonek -40 -KPX Omacron Aring -40 -KPX Omacron Atilde -40 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -50 -KPX Omacron X -40 -KPX Omacron Y -50 -KPX Omacron Yacute -50 -KPX Omacron Ydieresis -50 -KPX Oslash A -40 -KPX Oslash Aacute -40 -KPX Oslash Abreve -40 -KPX Oslash Acircumflex -40 -KPX Oslash Adieresis -40 -KPX Oslash Agrave -40 -KPX Oslash Amacron -40 -KPX Oslash Aogonek -40 -KPX Oslash Aring -40 -KPX Oslash Atilde -40 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -50 -KPX Oslash X -40 -KPX Oslash Y -50 -KPX Oslash Yacute -50 -KPX Oslash Ydieresis -50 -KPX Otilde A -40 -KPX Otilde Aacute -40 -KPX Otilde Abreve -40 -KPX Otilde Acircumflex -40 -KPX Otilde Adieresis -40 -KPX Otilde Agrave -40 -KPX Otilde Amacron -40 -KPX Otilde Aogonek -40 -KPX Otilde Aring -40 -KPX Otilde Atilde -40 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -50 -KPX Otilde X -40 -KPX Otilde Y -50 -KPX Otilde Yacute -50 -KPX Otilde Ydieresis -50 -KPX P A -85 -KPX P Aacute -85 -KPX P Abreve -85 -KPX P Acircumflex -85 -KPX P Adieresis -85 -KPX P Agrave -85 -KPX P Amacron -85 -KPX P Aogonek -85 -KPX P Aring -85 -KPX P Atilde -85 -KPX P a -40 -KPX P aacute -40 -KPX P abreve -40 -KPX P acircumflex -40 -KPX P adieresis -40 -KPX P agrave -40 -KPX P amacron -40 -KPX P aogonek -40 -KPX P aring -40 -KPX P atilde -40 -KPX P comma -129 -KPX P e -50 -KPX P eacute -50 -KPX P ecaron -50 -KPX P ecircumflex -50 -KPX P edieresis -50 -KPX P edotaccent -50 -KPX P egrave -50 -KPX P emacron -50 -KPX P eogonek -50 -KPX P o -55 -KPX P oacute -55 -KPX P ocircumflex -55 -KPX P odieresis -55 -KPX P ograve -55 -KPX P ohungarumlaut -55 -KPX P omacron -55 -KPX P oslash -55 -KPX P otilde -55 -KPX P period -129 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX R O -40 -KPX R Oacute -40 -KPX R Ocircumflex -40 -KPX R Odieresis -40 -KPX R Ograve -40 -KPX R Ohungarumlaut -40 -KPX R Omacron -40 -KPX R Oslash -40 -KPX R Otilde -40 -KPX R T -30 -KPX R Tcaron -30 -KPX R Tcommaaccent -30 -KPX R U -40 -KPX R Uacute -40 -KPX R Ucircumflex -40 -KPX R Udieresis -40 -KPX R Ugrave -40 -KPX R Uhungarumlaut -40 -KPX R Umacron -40 -KPX R Uogonek -40 -KPX R Uring -40 -KPX R V -18 -KPX R W -18 -KPX R Y -18 -KPX R Yacute -18 -KPX R Ydieresis -18 -KPX Racute O -40 -KPX Racute Oacute -40 -KPX Racute Ocircumflex -40 -KPX Racute Odieresis -40 -KPX Racute Ograve -40 -KPX Racute Ohungarumlaut -40 -KPX Racute Omacron -40 -KPX Racute Oslash -40 -KPX Racute Otilde -40 -KPX Racute T -30 -KPX Racute Tcaron -30 -KPX Racute Tcommaaccent -30 -KPX Racute U -40 -KPX Racute Uacute -40 -KPX Racute Ucircumflex -40 -KPX Racute Udieresis -40 -KPX Racute Ugrave -40 -KPX Racute Uhungarumlaut -40 -KPX Racute Umacron -40 -KPX Racute Uogonek -40 -KPX Racute Uring -40 -KPX Racute V -18 -KPX Racute W -18 -KPX Racute Y -18 -KPX Racute Yacute -18 -KPX Racute Ydieresis -18 -KPX Rcaron O -40 -KPX Rcaron Oacute -40 -KPX Rcaron Ocircumflex -40 -KPX Rcaron Odieresis -40 -KPX Rcaron Ograve -40 -KPX Rcaron Ohungarumlaut -40 -KPX Rcaron Omacron -40 -KPX Rcaron Oslash -40 -KPX Rcaron Otilde -40 -KPX Rcaron T -30 -KPX Rcaron Tcaron -30 -KPX Rcaron Tcommaaccent -30 -KPX Rcaron U -40 -KPX Rcaron Uacute -40 -KPX Rcaron Ucircumflex -40 -KPX Rcaron Udieresis -40 -KPX Rcaron Ugrave -40 -KPX Rcaron Uhungarumlaut -40 -KPX Rcaron Umacron -40 -KPX Rcaron Uogonek -40 -KPX Rcaron Uring -40 -KPX Rcaron V -18 -KPX Rcaron W -18 -KPX Rcaron Y -18 -KPX Rcaron Yacute -18 -KPX Rcaron Ydieresis -18 -KPX Rcommaaccent O -40 -KPX Rcommaaccent Oacute -40 -KPX Rcommaaccent Ocircumflex -40 -KPX Rcommaaccent Odieresis -40 -KPX Rcommaaccent Ograve -40 -KPX Rcommaaccent Ohungarumlaut -40 -KPX Rcommaaccent Omacron -40 -KPX Rcommaaccent Oslash -40 -KPX Rcommaaccent Otilde -40 -KPX Rcommaaccent T -30 -KPX Rcommaaccent Tcaron -30 -KPX Rcommaaccent Tcommaaccent -30 -KPX Rcommaaccent U -40 -KPX Rcommaaccent Uacute -40 -KPX Rcommaaccent Ucircumflex -40 -KPX Rcommaaccent Udieresis -40 -KPX Rcommaaccent Ugrave -40 -KPX Rcommaaccent Uhungarumlaut -40 -KPX Rcommaaccent Umacron -40 -KPX Rcommaaccent Uogonek -40 -KPX Rcommaaccent Uring -40 -KPX Rcommaaccent V -18 -KPX Rcommaaccent W -18 -KPX Rcommaaccent Y -18 -KPX Rcommaaccent Yacute -18 -KPX Rcommaaccent Ydieresis -18 -KPX T A -55 -KPX T Aacute -55 -KPX T Abreve -55 -KPX T Acircumflex -55 -KPX T Adieresis -55 -KPX T Agrave -55 -KPX T Amacron -55 -KPX T Aogonek -55 -KPX T Aring -55 -KPX T Atilde -55 -KPX T O -18 -KPX T Oacute -18 -KPX T Ocircumflex -18 -KPX T Odieresis -18 -KPX T Ograve -18 -KPX T Ohungarumlaut -18 -KPX T Omacron -18 -KPX T Oslash -18 -KPX T Otilde -18 -KPX T a -92 -KPX T aacute -92 -KPX T abreve -92 -KPX T acircumflex -92 -KPX T adieresis -92 -KPX T agrave -92 -KPX T amacron -92 -KPX T aogonek -92 -KPX T aring -92 -KPX T atilde -92 -KPX T colon -74 -KPX T comma -92 -KPX T e -92 -KPX T eacute -92 -KPX T ecaron -92 -KPX T ecircumflex -92 -KPX T edieresis -52 -KPX T edotaccent -92 -KPX T egrave -52 -KPX T emacron -52 -KPX T eogonek -92 -KPX T hyphen -92 -KPX T i -37 -KPX T iacute -37 -KPX T iogonek -37 -KPX T o -95 -KPX T oacute -95 -KPX T ocircumflex -95 -KPX T odieresis -95 -KPX T ograve -95 -KPX T ohungarumlaut -95 -KPX T omacron -95 -KPX T oslash -95 -KPX T otilde -95 -KPX T period -92 -KPX T r -37 -KPX T racute -37 -KPX T rcaron -37 -KPX T rcommaaccent -37 -KPX T semicolon -74 -KPX T u -37 -KPX T uacute -37 -KPX T ucircumflex -37 -KPX T udieresis -37 -KPX T ugrave -37 -KPX T uhungarumlaut -37 -KPX T umacron -37 -KPX T uogonek -37 -KPX T uring -37 -KPX T w -37 -KPX T y -37 -KPX T yacute -37 -KPX T ydieresis -37 -KPX Tcaron A -55 -KPX Tcaron Aacute -55 -KPX Tcaron Abreve -55 -KPX Tcaron Acircumflex -55 -KPX Tcaron Adieresis -55 -KPX Tcaron Agrave -55 -KPX Tcaron Amacron -55 -KPX Tcaron Aogonek -55 -KPX Tcaron Aring -55 -KPX Tcaron Atilde -55 -KPX Tcaron O -18 -KPX Tcaron Oacute -18 -KPX Tcaron Ocircumflex -18 -KPX Tcaron Odieresis -18 -KPX Tcaron Ograve -18 -KPX Tcaron Ohungarumlaut -18 -KPX Tcaron Omacron -18 -KPX Tcaron Oslash -18 -KPX Tcaron Otilde -18 -KPX Tcaron a -92 -KPX Tcaron aacute -92 -KPX Tcaron abreve -92 -KPX Tcaron acircumflex -92 -KPX Tcaron adieresis -92 -KPX Tcaron agrave -92 -KPX Tcaron amacron -92 -KPX Tcaron aogonek -92 -KPX Tcaron aring -92 -KPX Tcaron atilde -92 -KPX Tcaron colon -74 -KPX Tcaron comma -92 -KPX Tcaron e -92 -KPX Tcaron eacute -92 -KPX Tcaron ecaron -92 -KPX Tcaron ecircumflex -92 -KPX Tcaron edieresis -52 -KPX Tcaron edotaccent -92 -KPX Tcaron egrave -52 -KPX Tcaron emacron -52 -KPX Tcaron eogonek -92 -KPX Tcaron hyphen -92 -KPX Tcaron i -37 -KPX Tcaron iacute -37 -KPX Tcaron iogonek -37 -KPX Tcaron o -95 -KPX Tcaron oacute -95 -KPX Tcaron ocircumflex -95 -KPX Tcaron odieresis -95 -KPX Tcaron ograve -95 -KPX Tcaron ohungarumlaut -95 -KPX Tcaron omacron -95 -KPX Tcaron oslash -95 -KPX Tcaron otilde -95 -KPX Tcaron period -92 -KPX Tcaron r -37 -KPX Tcaron racute -37 -KPX Tcaron rcaron -37 -KPX Tcaron rcommaaccent -37 -KPX Tcaron semicolon -74 -KPX Tcaron u -37 -KPX Tcaron uacute -37 -KPX Tcaron ucircumflex -37 -KPX Tcaron udieresis -37 -KPX Tcaron ugrave -37 -KPX Tcaron uhungarumlaut -37 -KPX Tcaron umacron -37 -KPX Tcaron uogonek -37 -KPX Tcaron uring -37 -KPX Tcaron w -37 -KPX Tcaron y -37 -KPX Tcaron yacute -37 -KPX Tcaron ydieresis -37 -KPX Tcommaaccent A -55 -KPX Tcommaaccent Aacute -55 -KPX Tcommaaccent Abreve -55 -KPX Tcommaaccent Acircumflex -55 -KPX Tcommaaccent Adieresis -55 -KPX Tcommaaccent Agrave -55 -KPX Tcommaaccent Amacron -55 -KPX Tcommaaccent Aogonek -55 -KPX Tcommaaccent Aring -55 -KPX Tcommaaccent Atilde -55 -KPX Tcommaaccent O -18 -KPX Tcommaaccent Oacute -18 -KPX Tcommaaccent Ocircumflex -18 -KPX Tcommaaccent Odieresis -18 -KPX Tcommaaccent Ograve -18 -KPX Tcommaaccent Ohungarumlaut -18 -KPX Tcommaaccent Omacron -18 -KPX Tcommaaccent Oslash -18 -KPX Tcommaaccent Otilde -18 -KPX Tcommaaccent a -92 -KPX Tcommaaccent aacute -92 -KPX Tcommaaccent abreve -92 -KPX Tcommaaccent acircumflex -92 -KPX Tcommaaccent adieresis -92 -KPX Tcommaaccent agrave -92 -KPX Tcommaaccent amacron -92 -KPX Tcommaaccent aogonek -92 -KPX Tcommaaccent aring -92 -KPX Tcommaaccent atilde -92 -KPX Tcommaaccent colon -74 -KPX Tcommaaccent comma -92 -KPX Tcommaaccent e -92 -KPX Tcommaaccent eacute -92 -KPX Tcommaaccent ecaron -92 -KPX Tcommaaccent ecircumflex -92 -KPX Tcommaaccent edieresis -52 -KPX Tcommaaccent edotaccent -92 -KPX Tcommaaccent egrave -52 -KPX Tcommaaccent emacron -52 -KPX Tcommaaccent eogonek -92 -KPX Tcommaaccent hyphen -92 -KPX Tcommaaccent i -37 -KPX Tcommaaccent iacute -37 -KPX Tcommaaccent iogonek -37 -KPX Tcommaaccent o -95 -KPX Tcommaaccent oacute -95 -KPX Tcommaaccent ocircumflex -95 -KPX Tcommaaccent odieresis -95 -KPX Tcommaaccent ograve -95 -KPX Tcommaaccent ohungarumlaut -95 -KPX Tcommaaccent omacron -95 -KPX Tcommaaccent oslash -95 -KPX Tcommaaccent otilde -95 -KPX Tcommaaccent period -92 -KPX Tcommaaccent r -37 -KPX Tcommaaccent racute -37 -KPX Tcommaaccent rcaron -37 -KPX Tcommaaccent rcommaaccent -37 -KPX Tcommaaccent semicolon -74 -KPX Tcommaaccent u -37 -KPX Tcommaaccent uacute -37 -KPX Tcommaaccent ucircumflex -37 -KPX Tcommaaccent udieresis -37 -KPX Tcommaaccent ugrave -37 -KPX Tcommaaccent uhungarumlaut -37 -KPX Tcommaaccent umacron -37 -KPX Tcommaaccent uogonek -37 -KPX Tcommaaccent uring -37 -KPX Tcommaaccent w -37 -KPX Tcommaaccent y -37 -KPX Tcommaaccent yacute -37 -KPX Tcommaaccent ydieresis -37 -KPX U A -45 -KPX U Aacute -45 -KPX U Abreve -45 -KPX U Acircumflex -45 -KPX U Adieresis -45 -KPX U Agrave -45 -KPX U Amacron -45 -KPX U Aogonek -45 -KPX U Aring -45 -KPX U Atilde -45 -KPX Uacute A -45 -KPX Uacute Aacute -45 -KPX Uacute Abreve -45 -KPX Uacute Acircumflex -45 -KPX Uacute Adieresis -45 -KPX Uacute Agrave -45 -KPX Uacute Amacron -45 -KPX Uacute Aogonek -45 -KPX Uacute Aring -45 -KPX Uacute Atilde -45 -KPX Ucircumflex A -45 -KPX Ucircumflex Aacute -45 -KPX Ucircumflex Abreve -45 -KPX Ucircumflex Acircumflex -45 -KPX Ucircumflex Adieresis -45 -KPX Ucircumflex Agrave -45 -KPX Ucircumflex Amacron -45 -KPX Ucircumflex Aogonek -45 -KPX Ucircumflex Aring -45 -KPX Ucircumflex Atilde -45 -KPX Udieresis A -45 -KPX Udieresis Aacute -45 -KPX Udieresis Abreve -45 -KPX Udieresis Acircumflex -45 -KPX Udieresis Adieresis -45 -KPX Udieresis Agrave -45 -KPX Udieresis Amacron -45 -KPX Udieresis Aogonek -45 -KPX Udieresis Aring -45 -KPX Udieresis Atilde -45 -KPX Ugrave A -45 -KPX Ugrave Aacute -45 -KPX Ugrave Abreve -45 -KPX Ugrave Acircumflex -45 -KPX Ugrave Adieresis -45 -KPX Ugrave Agrave -45 -KPX Ugrave Amacron -45 -KPX Ugrave Aogonek -45 -KPX Ugrave Aring -45 -KPX Ugrave Atilde -45 -KPX Uhungarumlaut A -45 -KPX Uhungarumlaut Aacute -45 -KPX Uhungarumlaut Abreve -45 -KPX Uhungarumlaut Acircumflex -45 -KPX Uhungarumlaut Adieresis -45 -KPX Uhungarumlaut Agrave -45 -KPX Uhungarumlaut Amacron -45 -KPX Uhungarumlaut Aogonek -45 -KPX Uhungarumlaut Aring -45 -KPX Uhungarumlaut Atilde -45 -KPX Umacron A -45 -KPX Umacron Aacute -45 -KPX Umacron Abreve -45 -KPX Umacron Acircumflex -45 -KPX Umacron Adieresis -45 -KPX Umacron Agrave -45 -KPX Umacron Amacron -45 -KPX Umacron Aogonek -45 -KPX Umacron Aring -45 -KPX Umacron Atilde -45 -KPX Uogonek A -45 -KPX Uogonek Aacute -45 -KPX Uogonek Abreve -45 -KPX Uogonek Acircumflex -45 -KPX Uogonek Adieresis -45 -KPX Uogonek Agrave -45 -KPX Uogonek Amacron -45 -KPX Uogonek Aogonek -45 -KPX Uogonek Aring -45 -KPX Uogonek Atilde -45 -KPX Uring A -45 -KPX Uring Aacute -45 -KPX Uring Abreve -45 -KPX Uring Acircumflex -45 -KPX Uring Adieresis -45 -KPX Uring Agrave -45 -KPX Uring Amacron -45 -KPX Uring Aogonek -45 -KPX Uring Aring -45 -KPX Uring Atilde -45 -KPX V A -85 -KPX V Aacute -85 -KPX V Abreve -85 -KPX V Acircumflex -85 -KPX V Adieresis -85 -KPX V Agrave -85 -KPX V Amacron -85 -KPX V Aogonek -85 -KPX V Aring -85 -KPX V Atilde -85 -KPX V G -10 -KPX V Gbreve -10 -KPX V Gcommaaccent -10 -KPX V O -30 -KPX V Oacute -30 -KPX V Ocircumflex -30 -KPX V Odieresis -30 -KPX V Ograve -30 -KPX V Ohungarumlaut -30 -KPX V Omacron -30 -KPX V Oslash -30 -KPX V Otilde -30 -KPX V a -111 -KPX V aacute -111 -KPX V abreve -111 -KPX V acircumflex -111 -KPX V adieresis -111 -KPX V agrave -111 -KPX V amacron -111 -KPX V aogonek -111 -KPX V aring -111 -KPX V atilde -111 -KPX V colon -74 -KPX V comma -129 -KPX V e -111 -KPX V eacute -111 -KPX V ecaron -111 -KPX V ecircumflex -111 -KPX V edieresis -71 -KPX V edotaccent -111 -KPX V egrave -71 -KPX V emacron -71 -KPX V eogonek -111 -KPX V hyphen -70 -KPX V i -55 -KPX V iacute -55 -KPX V iogonek -55 -KPX V o -111 -KPX V oacute -111 -KPX V ocircumflex -111 -KPX V odieresis -111 -KPX V ograve -111 -KPX V ohungarumlaut -111 -KPX V omacron -111 -KPX V oslash -111 -KPX V otilde -111 -KPX V period -129 -KPX V semicolon -74 -KPX V u -55 -KPX V uacute -55 -KPX V ucircumflex -55 -KPX V udieresis -55 -KPX V ugrave -55 -KPX V uhungarumlaut -55 -KPX V umacron -55 -KPX V uogonek -55 -KPX V uring -55 -KPX W A -74 -KPX W Aacute -74 -KPX W Abreve -74 -KPX W Acircumflex -74 -KPX W Adieresis -74 -KPX W Agrave -74 -KPX W Amacron -74 -KPX W Aogonek -74 -KPX W Aring -74 -KPX W Atilde -74 -KPX W O -15 -KPX W Oacute -15 -KPX W Ocircumflex -15 -KPX W Odieresis -15 -KPX W Ograve -15 -KPX W Ohungarumlaut -15 -KPX W Omacron -15 -KPX W Oslash -15 -KPX W Otilde -15 -KPX W a -85 -KPX W aacute -85 -KPX W abreve -85 -KPX W acircumflex -85 -KPX W adieresis -85 -KPX W agrave -85 -KPX W amacron -85 -KPX W aogonek -85 -KPX W aring -85 -KPX W atilde -85 -KPX W colon -55 -KPX W comma -74 -KPX W e -90 -KPX W eacute -90 -KPX W ecaron -90 -KPX W ecircumflex -90 -KPX W edieresis -50 -KPX W edotaccent -90 -KPX W egrave -50 -KPX W emacron -50 -KPX W eogonek -90 -KPX W hyphen -50 -KPX W i -37 -KPX W iacute -37 -KPX W iogonek -37 -KPX W o -80 -KPX W oacute -80 -KPX W ocircumflex -80 -KPX W odieresis -80 -KPX W ograve -80 -KPX W ohungarumlaut -80 -KPX W omacron -80 -KPX W oslash -80 -KPX W otilde -80 -KPX W period -74 -KPX W semicolon -55 -KPX W u -55 -KPX W uacute -55 -KPX W ucircumflex -55 -KPX W udieresis -55 -KPX W ugrave -55 -KPX W uhungarumlaut -55 -KPX W umacron -55 -KPX W uogonek -55 -KPX W uring -55 -KPX W y -55 -KPX W yacute -55 -KPX W ydieresis -55 -KPX Y A -74 -KPX Y Aacute -74 -KPX Y Abreve -74 -KPX Y Acircumflex -74 -KPX Y Adieresis -74 -KPX Y Agrave -74 -KPX Y Amacron -74 -KPX Y Aogonek -74 -KPX Y Aring -74 -KPX Y Atilde -74 -KPX Y O -25 -KPX Y Oacute -25 -KPX Y Ocircumflex -25 -KPX Y Odieresis -25 -KPX Y Ograve -25 -KPX Y Ohungarumlaut -25 -KPX Y Omacron -25 -KPX Y Oslash -25 -KPX Y Otilde -25 -KPX Y a -92 -KPX Y aacute -92 -KPX Y abreve -92 -KPX Y acircumflex -92 -KPX Y adieresis -92 -KPX Y agrave -92 -KPX Y amacron -92 -KPX Y aogonek -92 -KPX Y aring -92 -KPX Y atilde -92 -KPX Y colon -92 -KPX Y comma -92 -KPX Y e -111 -KPX Y eacute -111 -KPX Y ecaron -111 -KPX Y ecircumflex -71 -KPX Y edieresis -71 -KPX Y edotaccent -111 -KPX Y egrave -71 -KPX Y emacron -71 -KPX Y eogonek -111 -KPX Y hyphen -92 -KPX Y i -55 -KPX Y iacute -55 -KPX Y iogonek -55 -KPX Y o -111 -KPX Y oacute -111 -KPX Y ocircumflex -111 -KPX Y odieresis -111 -KPX Y ograve -111 -KPX Y ohungarumlaut -111 -KPX Y omacron -111 -KPX Y oslash -111 -KPX Y otilde -111 -KPX Y period -74 -KPX Y semicolon -92 -KPX Y u -92 -KPX Y uacute -92 -KPX Y ucircumflex -92 -KPX Y udieresis -92 -KPX Y ugrave -92 -KPX Y uhungarumlaut -92 -KPX Y umacron -92 -KPX Y uogonek -92 -KPX Y uring -92 -KPX Yacute A -74 -KPX Yacute Aacute -74 -KPX Yacute Abreve -74 -KPX Yacute Acircumflex -74 -KPX Yacute Adieresis -74 -KPX Yacute Agrave -74 -KPX Yacute Amacron -74 -KPX Yacute Aogonek -74 -KPX Yacute Aring -74 -KPX Yacute Atilde -74 -KPX Yacute O -25 -KPX Yacute Oacute -25 -KPX Yacute Ocircumflex -25 -KPX Yacute Odieresis -25 -KPX Yacute Ograve -25 -KPX Yacute Ohungarumlaut -25 -KPX Yacute Omacron -25 -KPX Yacute Oslash -25 -KPX Yacute Otilde -25 -KPX Yacute a -92 -KPX Yacute aacute -92 -KPX Yacute abreve -92 -KPX Yacute acircumflex -92 -KPX Yacute adieresis -92 -KPX Yacute agrave -92 -KPX Yacute amacron -92 -KPX Yacute aogonek -92 -KPX Yacute aring -92 -KPX Yacute atilde -92 -KPX Yacute colon -92 -KPX Yacute comma -92 -KPX Yacute e -111 -KPX Yacute eacute -111 -KPX Yacute ecaron -111 -KPX Yacute ecircumflex -71 -KPX Yacute edieresis -71 -KPX Yacute edotaccent -111 -KPX Yacute egrave -71 -KPX Yacute emacron -71 -KPX Yacute eogonek -111 -KPX Yacute hyphen -92 -KPX Yacute i -55 -KPX Yacute iacute -55 -KPX Yacute iogonek -55 -KPX Yacute o -111 -KPX Yacute oacute -111 -KPX Yacute ocircumflex -111 -KPX Yacute odieresis -111 -KPX Yacute ograve -111 -KPX Yacute ohungarumlaut -111 -KPX Yacute omacron -111 -KPX Yacute oslash -111 -KPX Yacute otilde -111 -KPX Yacute period -74 -KPX Yacute semicolon -92 -KPX Yacute u -92 -KPX Yacute uacute -92 -KPX Yacute ucircumflex -92 -KPX Yacute udieresis -92 -KPX Yacute ugrave -92 -KPX Yacute uhungarumlaut -92 -KPX Yacute umacron -92 -KPX Yacute uogonek -92 -KPX Yacute uring -92 -KPX Ydieresis A -74 -KPX Ydieresis Aacute -74 -KPX Ydieresis Abreve -74 -KPX Ydieresis Acircumflex -74 -KPX Ydieresis Adieresis -74 -KPX Ydieresis Agrave -74 -KPX Ydieresis Amacron -74 -KPX Ydieresis Aogonek -74 -KPX Ydieresis Aring -74 -KPX Ydieresis Atilde -74 -KPX Ydieresis O -25 -KPX Ydieresis Oacute -25 -KPX Ydieresis Ocircumflex -25 -KPX Ydieresis Odieresis -25 -KPX Ydieresis Ograve -25 -KPX Ydieresis Ohungarumlaut -25 -KPX Ydieresis Omacron -25 -KPX Ydieresis Oslash -25 -KPX Ydieresis Otilde -25 -KPX Ydieresis a -92 -KPX Ydieresis aacute -92 -KPX Ydieresis abreve -92 -KPX Ydieresis acircumflex -92 -KPX Ydieresis adieresis -92 -KPX Ydieresis agrave -92 -KPX Ydieresis amacron -92 -KPX Ydieresis aogonek -92 -KPX Ydieresis aring -92 -KPX Ydieresis atilde -92 -KPX Ydieresis colon -92 -KPX Ydieresis comma -92 -KPX Ydieresis e -111 -KPX Ydieresis eacute -111 -KPX Ydieresis ecaron -111 -KPX Ydieresis ecircumflex -71 -KPX Ydieresis edieresis -71 -KPX Ydieresis edotaccent -111 -KPX Ydieresis egrave -71 -KPX Ydieresis emacron -71 -KPX Ydieresis eogonek -111 -KPX Ydieresis hyphen -92 -KPX Ydieresis i -55 -KPX Ydieresis iacute -55 -KPX Ydieresis iogonek -55 -KPX Ydieresis o -111 -KPX Ydieresis oacute -111 -KPX Ydieresis ocircumflex -111 -KPX Ydieresis odieresis -111 -KPX Ydieresis ograve -111 -KPX Ydieresis ohungarumlaut -111 -KPX Ydieresis omacron -111 -KPX Ydieresis oslash -111 -KPX Ydieresis otilde -111 -KPX Ydieresis period -74 -KPX Ydieresis semicolon -92 -KPX Ydieresis u -92 -KPX Ydieresis uacute -92 -KPX Ydieresis ucircumflex -92 -KPX Ydieresis udieresis -92 -KPX Ydieresis ugrave -92 -KPX Ydieresis uhungarumlaut -92 -KPX Ydieresis umacron -92 -KPX Ydieresis uogonek -92 -KPX Ydieresis uring -92 -KPX b b -10 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX c h -10 -KPX c k -10 -KPX c kcommaaccent -10 -KPX cacute h -10 -KPX cacute k -10 -KPX cacute kcommaaccent -10 -KPX ccaron h -10 -KPX ccaron k -10 -KPX ccaron kcommaaccent -10 -KPX ccedilla h -10 -KPX ccedilla k -10 -KPX ccedilla kcommaaccent -10 -KPX comma quotedblright -95 -KPX comma quoteright -95 -KPX e b -10 -KPX eacute b -10 -KPX ecaron b -10 -KPX ecircumflex b -10 -KPX edieresis b -10 -KPX edotaccent b -10 -KPX egrave b -10 -KPX emacron b -10 -KPX eogonek b -10 -KPX f comma -10 -KPX f dotlessi -30 -KPX f e -10 -KPX f eacute -10 -KPX f edotaccent -10 -KPX f eogonek -10 -KPX f f -18 -KPX f o -10 -KPX f oacute -10 -KPX f ocircumflex -10 -KPX f ograve -10 -KPX f ohungarumlaut -10 -KPX f oslash -10 -KPX f otilde -10 -KPX f period -10 -KPX f quoteright 55 -KPX k e -30 -KPX k eacute -30 -KPX k ecaron -30 -KPX k ecircumflex -30 -KPX k edieresis -30 -KPX k edotaccent -30 -KPX k egrave -30 -KPX k emacron -30 -KPX k eogonek -30 -KPX k o -10 -KPX k oacute -10 -KPX k ocircumflex -10 -KPX k odieresis -10 -KPX k ograve -10 -KPX k ohungarumlaut -10 -KPX k omacron -10 -KPX k oslash -10 -KPX k otilde -10 -KPX kcommaaccent e -30 -KPX kcommaaccent eacute -30 -KPX kcommaaccent ecaron -30 -KPX kcommaaccent ecircumflex -30 -KPX kcommaaccent edieresis -30 -KPX kcommaaccent edotaccent -30 -KPX kcommaaccent egrave -30 -KPX kcommaaccent emacron -30 -KPX kcommaaccent eogonek -30 -KPX kcommaaccent o -10 -KPX kcommaaccent oacute -10 -KPX kcommaaccent ocircumflex -10 -KPX kcommaaccent odieresis -10 -KPX kcommaaccent ograve -10 -KPX kcommaaccent ohungarumlaut -10 -KPX kcommaaccent omacron -10 -KPX kcommaaccent oslash -10 -KPX kcommaaccent otilde -10 -KPX n v -40 -KPX nacute v -40 -KPX ncaron v -40 -KPX ncommaaccent v -40 -KPX ntilde v -40 -KPX o v -15 -KPX o w -25 -KPX o x -10 -KPX o y -10 -KPX o yacute -10 -KPX o ydieresis -10 -KPX oacute v -15 -KPX oacute w -25 -KPX oacute x -10 -KPX oacute y -10 -KPX oacute yacute -10 -KPX oacute ydieresis -10 -KPX ocircumflex v -15 -KPX ocircumflex w -25 -KPX ocircumflex x -10 -KPX ocircumflex y -10 -KPX ocircumflex yacute -10 -KPX ocircumflex ydieresis -10 -KPX odieresis v -15 -KPX odieresis w -25 -KPX odieresis x -10 -KPX odieresis y -10 -KPX odieresis yacute -10 -KPX odieresis ydieresis -10 -KPX ograve v -15 -KPX ograve w -25 -KPX ograve x -10 -KPX ograve y -10 -KPX ograve yacute -10 -KPX ograve ydieresis -10 -KPX ohungarumlaut v -15 -KPX ohungarumlaut w -25 -KPX ohungarumlaut x -10 -KPX ohungarumlaut y -10 -KPX ohungarumlaut yacute -10 -KPX ohungarumlaut ydieresis -10 -KPX omacron v -15 -KPX omacron w -25 -KPX omacron x -10 -KPX omacron y -10 -KPX omacron yacute -10 -KPX omacron ydieresis -10 -KPX oslash v -15 -KPX oslash w -25 -KPX oslash x -10 -KPX oslash y -10 -KPX oslash yacute -10 -KPX oslash ydieresis -10 -KPX otilde v -15 -KPX otilde w -25 -KPX otilde x -10 -KPX otilde y -10 -KPX otilde yacute -10 -KPX otilde ydieresis -10 -KPX period quotedblright -95 -KPX period quoteright -95 -KPX quoteleft quoteleft -74 -KPX quoteright d -15 -KPX quoteright dcroat -15 -KPX quoteright quoteright -74 -KPX quoteright r -15 -KPX quoteright racute -15 -KPX quoteright rcaron -15 -KPX quoteright rcommaaccent -15 -KPX quoteright s -74 -KPX quoteright sacute -74 -KPX quoteright scaron -74 -KPX quoteright scedilla -74 -KPX quoteright scommaaccent -74 -KPX quoteright space -74 -KPX quoteright t -37 -KPX quoteright tcommaaccent -37 -KPX quoteright v -15 -KPX r comma -65 -KPX r period -65 -KPX racute comma -65 -KPX racute period -65 -KPX rcaron comma -65 -KPX rcaron period -65 -KPX rcommaaccent comma -65 -KPX rcommaaccent period -65 -KPX space A -37 -KPX space Aacute -37 -KPX space Abreve -37 -KPX space Acircumflex -37 -KPX space Adieresis -37 -KPX space Agrave -37 -KPX space Amacron -37 -KPX space Aogonek -37 -KPX space Aring -37 -KPX space Atilde -37 -KPX space V -70 -KPX space W -70 -KPX space Y -70 -KPX space Yacute -70 -KPX space Ydieresis -70 -KPX v comma -37 -KPX v e -15 -KPX v eacute -15 -KPX v ecaron -15 -KPX v ecircumflex -15 -KPX v edieresis -15 -KPX v edotaccent -15 -KPX v egrave -15 -KPX v emacron -15 -KPX v eogonek -15 -KPX v o -15 -KPX v oacute -15 -KPX v ocircumflex -15 -KPX v odieresis -15 -KPX v ograve -15 -KPX v ohungarumlaut -15 -KPX v omacron -15 -KPX v oslash -15 -KPX v otilde -15 -KPX v period -37 -KPX w a -10 -KPX w aacute -10 -KPX w abreve -10 -KPX w acircumflex -10 -KPX w adieresis -10 -KPX w agrave -10 -KPX w amacron -10 -KPX w aogonek -10 -KPX w aring -10 -KPX w atilde -10 -KPX w comma -37 -KPX w e -10 -KPX w eacute -10 -KPX w ecaron -10 -KPX w ecircumflex -10 -KPX w edieresis -10 -KPX w edotaccent -10 -KPX w egrave -10 -KPX w emacron -10 -KPX w eogonek -10 -KPX w o -15 -KPX w oacute -15 -KPX w ocircumflex -15 -KPX w odieresis -15 -KPX w ograve -15 -KPX w ohungarumlaut -15 -KPX w omacron -15 -KPX w oslash -15 -KPX w otilde -15 -KPX w period -37 -KPX x e -10 -KPX x eacute -10 -KPX x ecaron -10 -KPX x ecircumflex -10 -KPX x edieresis -10 -KPX x edotaccent -10 -KPX x egrave -10 -KPX x emacron -10 -KPX x eogonek -10 -KPX y comma -37 -KPX y period -37 -KPX yacute comma -37 -KPX yacute period -37 -KPX ydieresis comma -37 -KPX ydieresis period -37 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Italic.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Times-Italic.afm deleted file mode 100644 index 8de6e42..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Italic.afm +++ /dev/null @@ -1,2667 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:56:55 1997 -Comment UniqueID 43067 -Comment VMusage 47727 58752 -FontName Times-Italic -FullName Times Italic -FamilyName Times -Weight Medium -ItalicAngle -15.5 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -169 -217 1010 883 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 653 -XHeight 441 -Ascender 683 -Descender -217 -StdHW 32 -StdVW 76 -StartCharMetrics 315 -C 32 ; WX 250 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ; -C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ; -C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ; -C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ; -C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ; -C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ; -C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ; -C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ; -C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ; -C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ; -C 43 ; WX 675 ; N plus ; B 86 0 590 506 ; -C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ; -C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ; -C 46 ; WX 250 ; N period ; B 27 -11 138 100 ; -C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ; -C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ; -C 49 ; WX 500 ; N one ; B 49 0 409 676 ; -C 50 ; WX 500 ; N two ; B 12 0 452 676 ; -C 51 ; WX 500 ; N three ; B 15 -7 465 676 ; -C 52 ; WX 500 ; N four ; B 1 0 479 676 ; -C 53 ; WX 500 ; N five ; B 15 -7 491 666 ; -C 54 ; WX 500 ; N six ; B 30 -7 521 686 ; -C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ; -C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ; -C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ; -C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ; -C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ; -C 60 ; WX 675 ; N less ; B 84 -8 592 514 ; -C 61 ; WX 675 ; N equal ; B 86 120 590 386 ; -C 62 ; WX 675 ; N greater ; B 84 -8 592 514 ; -C 63 ; WX 500 ; N question ; B 132 -12 472 664 ; -C 64 ; WX 920 ; N at ; B 118 -18 806 666 ; -C 65 ; WX 611 ; N A ; B -51 0 564 668 ; -C 66 ; WX 611 ; N B ; B -8 0 588 653 ; -C 67 ; WX 667 ; N C ; B 66 -18 689 666 ; -C 68 ; WX 722 ; N D ; B -8 0 700 653 ; -C 69 ; WX 611 ; N E ; B -1 0 634 653 ; -C 70 ; WX 611 ; N F ; B 8 0 645 653 ; -C 71 ; WX 722 ; N G ; B 52 -18 722 666 ; -C 72 ; WX 722 ; N H ; B -8 0 767 653 ; -C 73 ; WX 333 ; N I ; B -8 0 384 653 ; -C 74 ; WX 444 ; N J ; B -6 -18 491 653 ; -C 75 ; WX 667 ; N K ; B 7 0 722 653 ; -C 76 ; WX 556 ; N L ; B -8 0 559 653 ; -C 77 ; WX 833 ; N M ; B -18 0 873 653 ; -C 78 ; WX 667 ; N N ; B -20 -15 727 653 ; -C 79 ; WX 722 ; N O ; B 60 -18 699 666 ; -C 80 ; WX 611 ; N P ; B 0 0 605 653 ; -C 81 ; WX 722 ; N Q ; B 59 -182 699 666 ; -C 82 ; WX 611 ; N R ; B -13 0 588 653 ; -C 83 ; WX 500 ; N S ; B 17 -18 508 667 ; -C 84 ; WX 556 ; N T ; B 59 0 633 653 ; -C 85 ; WX 722 ; N U ; B 102 -18 765 653 ; -C 86 ; WX 611 ; N V ; B 76 -18 688 653 ; -C 87 ; WX 833 ; N W ; B 71 -18 906 653 ; -C 88 ; WX 611 ; N X ; B -29 0 655 653 ; -C 89 ; WX 556 ; N Y ; B 78 0 633 653 ; -C 90 ; WX 556 ; N Z ; B -6 0 606 653 ; -C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ; -C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ; -C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ; -C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ; -C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; -C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ; -C 97 ; WX 500 ; N a ; B 17 -11 476 441 ; -C 98 ; WX 500 ; N b ; B 23 -11 473 683 ; -C 99 ; WX 444 ; N c ; B 30 -11 425 441 ; -C 100 ; WX 500 ; N d ; B 15 -13 527 683 ; -C 101 ; WX 444 ; N e ; B 31 -11 412 441 ; -C 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ; -C 103 ; WX 500 ; N g ; B 8 -206 472 441 ; -C 104 ; WX 500 ; N h ; B 19 -9 478 683 ; -C 105 ; WX 278 ; N i ; B 49 -11 264 654 ; -C 106 ; WX 278 ; N j ; B -124 -207 276 654 ; -C 107 ; WX 444 ; N k ; B 14 -11 461 683 ; -C 108 ; WX 278 ; N l ; B 41 -11 279 683 ; -C 109 ; WX 722 ; N m ; B 12 -9 704 441 ; -C 110 ; WX 500 ; N n ; B 14 -9 474 441 ; -C 111 ; WX 500 ; N o ; B 27 -11 468 441 ; -C 112 ; WX 500 ; N p ; B -75 -205 469 441 ; -C 113 ; WX 500 ; N q ; B 25 -209 483 441 ; -C 114 ; WX 389 ; N r ; B 45 0 412 441 ; -C 115 ; WX 389 ; N s ; B 16 -13 366 442 ; -C 116 ; WX 278 ; N t ; B 37 -11 296 546 ; -C 117 ; WX 500 ; N u ; B 42 -11 475 441 ; -C 118 ; WX 444 ; N v ; B 21 -18 426 441 ; -C 119 ; WX 667 ; N w ; B 16 -18 648 441 ; -C 120 ; WX 444 ; N x ; B -27 -11 447 441 ; -C 121 ; WX 444 ; N y ; B -24 -206 426 441 ; -C 122 ; WX 389 ; N z ; B -2 -81 380 428 ; -C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ; -C 124 ; WX 275 ; N bar ; B 105 -217 171 783 ; -C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ; -C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; -C 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ; -C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ; -C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ; -C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ; -C 165 ; WX 500 ; N yen ; B 27 0 603 653 ; -C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ; -C 167 ; WX 500 ; N section ; B 53 -162 461 666 ; -C 168 ; WX 500 ; N currency ; B -22 53 522 597 ; -C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ; -C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ; -C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ; -C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ; -C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ; -C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ; -C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ; -C 177 ; WX 500 ; N endash ; B -6 197 505 243 ; -C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ; -C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ; -C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; -C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ; -C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ; -C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ; -C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ; -C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ; -C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ; -C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ; -C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ; -C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ; -C 193 ; WX 333 ; N grave ; B 121 492 311 664 ; -C 194 ; WX 333 ; N acute ; B 180 494 403 664 ; -C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ; -C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ; -C 197 ; WX 333 ; N macron ; B 99 532 411 583 ; -C 198 ; WX 333 ; N breve ; B 117 492 418 650 ; -C 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ; -C 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ; -C 202 ; WX 333 ; N ring ; B 155 492 355 691 ; -C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ; -C 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ; -C 207 ; WX 333 ; N caron ; B 121 492 426 661 ; -C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ; -C 225 ; WX 889 ; N AE ; B -27 0 911 653 ; -C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ; -C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ; -C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ; -C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ; -C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ; -C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ; -C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ; -C 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ; -C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ; -C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ; -C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ; -C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ; -C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ; -C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ; -C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ; -C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ; -C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ; -C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ; -C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ; -C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ; -C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ; -C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ; -C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ; -C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ; -C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ; -C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ; -C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ; -C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ; -C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ; -C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ; -C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ; -C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ; -C -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ; -C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ; -C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ; -C -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ; -C -1 ; WX 500 ; N aring ; B 17 -11 476 691 ; -C -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ; -C -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ; -C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ; -C -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ; -C -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ; -C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ; -C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ; -C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ; -C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ; -C -1 ; WX 278 ; N iacute ; B 49 -11 355 664 ; -C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; -C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ; -C -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ; -C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ; -C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ; -C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ; -C -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ; -C -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ; -C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ; -C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ; -C -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ; -C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ; -C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ; -C -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ; -C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ; -C -1 ; WX 500 ; N uring ; B 42 -11 475 691 ; -C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ; -C -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ; -C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ; -C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ; -C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ; -C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ; -C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ; -C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; -C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ; -C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ; -C -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ; -C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ; -C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ; -C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ; -C -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ; -C -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ; -C -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ; -C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ; -C -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ; -C -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ; -C -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ; -C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ; -C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ; -C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ; -C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; -C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ; -C -1 ; WX 389 ; N racute ; B 45 0 431 664 ; -C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ; -C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ; -C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ; -C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ; -C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ; -C -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ; -C -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ; -C -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ; -C -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ; -C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ; -C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ; -C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ; -C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ; -C -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ; -C -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ; -C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ; -C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ; -C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ; -C -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ; -C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ; -C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ; -C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ; -C -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ; -C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ; -C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ; -C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ; -C -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ; -C -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ; -C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ; -C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ; -C -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ; -C -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ; -C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ; -C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ; -C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ; -C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ; -C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ; -C -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ; -C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ; -C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ; -C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ; -C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ; -C -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ; -C -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ; -C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ; -C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ; -C -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ; -C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ; -C -1 ; WX 400 ; N degree ; B 101 390 387 676 ; -C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ; -C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ; -C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ; -C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; -C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ; -C -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ; -C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ; -C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ; -C -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ; -C -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ; -C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ; -C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ; -C -1 ; WX 611 ; N Aring ; B -51 0 564 883 ; -C -1 ; WX 722 ; N Otilde ; B 60 -18 699 836 ; -C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ; -C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ; -C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ; -C -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ; -C -1 ; WX 675 ; N minus ; B 86 220 590 286 ; -C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ; -C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ; -C -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ; -C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ; -C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ; -C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ; -C -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ; -C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ; -C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ; -C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ; -C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ; -C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ; -C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ; -C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2321 -KPX A C -30 -KPX A Cacute -30 -KPX A Ccaron -30 -KPX A Ccedilla -30 -KPX A G -35 -KPX A Gbreve -35 -KPX A Gcommaaccent -35 -KPX A O -40 -KPX A Oacute -40 -KPX A Ocircumflex -40 -KPX A Odieresis -40 -KPX A Ograve -40 -KPX A Ohungarumlaut -40 -KPX A Omacron -40 -KPX A Oslash -40 -KPX A Otilde -40 -KPX A Q -40 -KPX A T -37 -KPX A Tcaron -37 -KPX A Tcommaaccent -37 -KPX A U -50 -KPX A Uacute -50 -KPX A Ucircumflex -50 -KPX A Udieresis -50 -KPX A Ugrave -50 -KPX A Uhungarumlaut -50 -KPX A Umacron -50 -KPX A Uogonek -50 -KPX A Uring -50 -KPX A V -105 -KPX A W -95 -KPX A Y -55 -KPX A Yacute -55 -KPX A Ydieresis -55 -KPX A quoteright -37 -KPX A u -20 -KPX A uacute -20 -KPX A ucircumflex -20 -KPX A udieresis -20 -KPX A ugrave -20 -KPX A uhungarumlaut -20 -KPX A umacron -20 -KPX A uogonek -20 -KPX A uring -20 -KPX A v -55 -KPX A w -55 -KPX A y -55 -KPX A yacute -55 -KPX A ydieresis -55 -KPX Aacute C -30 -KPX Aacute Cacute -30 -KPX Aacute Ccaron -30 -KPX Aacute Ccedilla -30 -KPX Aacute G -35 -KPX Aacute Gbreve -35 -KPX Aacute Gcommaaccent -35 -KPX Aacute O -40 -KPX Aacute Oacute -40 -KPX Aacute Ocircumflex -40 -KPX Aacute Odieresis -40 -KPX Aacute Ograve -40 -KPX Aacute Ohungarumlaut -40 -KPX Aacute Omacron -40 -KPX Aacute Oslash -40 -KPX Aacute Otilde -40 -KPX Aacute Q -40 -KPX Aacute T -37 -KPX Aacute Tcaron -37 -KPX Aacute Tcommaaccent -37 -KPX Aacute U -50 -KPX Aacute Uacute -50 -KPX Aacute Ucircumflex -50 -KPX Aacute Udieresis -50 -KPX Aacute Ugrave -50 -KPX Aacute Uhungarumlaut -50 -KPX Aacute Umacron -50 -KPX Aacute Uogonek -50 -KPX Aacute Uring -50 -KPX Aacute V -105 -KPX Aacute W -95 -KPX Aacute Y -55 -KPX Aacute Yacute -55 -KPX Aacute Ydieresis -55 -KPX Aacute quoteright -37 -KPX Aacute u -20 -KPX Aacute uacute -20 -KPX Aacute ucircumflex -20 -KPX Aacute udieresis -20 -KPX Aacute ugrave -20 -KPX Aacute uhungarumlaut -20 -KPX Aacute umacron -20 -KPX Aacute uogonek -20 -KPX Aacute uring -20 -KPX Aacute v -55 -KPX Aacute w -55 -KPX Aacute y -55 -KPX Aacute yacute -55 -KPX Aacute ydieresis -55 -KPX Abreve C -30 -KPX Abreve Cacute -30 -KPX Abreve Ccaron -30 -KPX Abreve Ccedilla -30 -KPX Abreve G -35 -KPX Abreve Gbreve -35 -KPX Abreve Gcommaaccent -35 -KPX Abreve O -40 -KPX Abreve Oacute -40 -KPX Abreve Ocircumflex -40 -KPX Abreve Odieresis -40 -KPX Abreve Ograve -40 -KPX Abreve Ohungarumlaut -40 -KPX Abreve Omacron -40 -KPX Abreve Oslash -40 -KPX Abreve Otilde -40 -KPX Abreve Q -40 -KPX Abreve T -37 -KPX Abreve Tcaron -37 -KPX Abreve Tcommaaccent -37 -KPX Abreve U -50 -KPX Abreve Uacute -50 -KPX Abreve Ucircumflex -50 -KPX Abreve Udieresis -50 -KPX Abreve Ugrave -50 -KPX Abreve Uhungarumlaut -50 -KPX Abreve Umacron -50 -KPX Abreve Uogonek -50 -KPX Abreve Uring -50 -KPX Abreve V -105 -KPX Abreve W -95 -KPX Abreve Y -55 -KPX Abreve Yacute -55 -KPX Abreve Ydieresis -55 -KPX Abreve quoteright -37 -KPX Abreve u -20 -KPX Abreve uacute -20 -KPX Abreve ucircumflex -20 -KPX Abreve udieresis -20 -KPX Abreve ugrave -20 -KPX Abreve uhungarumlaut -20 -KPX Abreve umacron -20 -KPX Abreve uogonek -20 -KPX Abreve uring -20 -KPX Abreve v -55 -KPX Abreve w -55 -KPX Abreve y -55 -KPX Abreve yacute -55 -KPX Abreve ydieresis -55 -KPX Acircumflex C -30 -KPX Acircumflex Cacute -30 -KPX Acircumflex Ccaron -30 -KPX Acircumflex Ccedilla -30 -KPX Acircumflex G -35 -KPX Acircumflex Gbreve -35 -KPX Acircumflex Gcommaaccent -35 -KPX Acircumflex O -40 -KPX Acircumflex Oacute -40 -KPX Acircumflex Ocircumflex -40 -KPX Acircumflex Odieresis -40 -KPX Acircumflex Ograve -40 -KPX Acircumflex Ohungarumlaut -40 -KPX Acircumflex Omacron -40 -KPX Acircumflex Oslash -40 -KPX Acircumflex Otilde -40 -KPX Acircumflex Q -40 -KPX Acircumflex T -37 -KPX Acircumflex Tcaron -37 -KPX Acircumflex Tcommaaccent -37 -KPX Acircumflex U -50 -KPX Acircumflex Uacute -50 -KPX Acircumflex Ucircumflex -50 -KPX Acircumflex Udieresis -50 -KPX Acircumflex Ugrave -50 -KPX Acircumflex Uhungarumlaut -50 -KPX Acircumflex Umacron -50 -KPX Acircumflex Uogonek -50 -KPX Acircumflex Uring -50 -KPX Acircumflex V -105 -KPX Acircumflex W -95 -KPX Acircumflex Y -55 -KPX Acircumflex Yacute -55 -KPX Acircumflex Ydieresis -55 -KPX Acircumflex quoteright -37 -KPX Acircumflex u -20 -KPX Acircumflex uacute -20 -KPX Acircumflex ucircumflex -20 -KPX Acircumflex udieresis -20 -KPX Acircumflex ugrave -20 -KPX Acircumflex uhungarumlaut -20 -KPX Acircumflex umacron -20 -KPX Acircumflex uogonek -20 -KPX Acircumflex uring -20 -KPX Acircumflex v -55 -KPX Acircumflex w -55 -KPX Acircumflex y -55 -KPX Acircumflex yacute -55 -KPX Acircumflex ydieresis -55 -KPX Adieresis C -30 -KPX Adieresis Cacute -30 -KPX Adieresis Ccaron -30 -KPX Adieresis Ccedilla -30 -KPX Adieresis G -35 -KPX Adieresis Gbreve -35 -KPX Adieresis Gcommaaccent -35 -KPX Adieresis O -40 -KPX Adieresis Oacute -40 -KPX Adieresis Ocircumflex -40 -KPX Adieresis Odieresis -40 -KPX Adieresis Ograve -40 -KPX Adieresis Ohungarumlaut -40 -KPX Adieresis Omacron -40 -KPX Adieresis Oslash -40 -KPX Adieresis Otilde -40 -KPX Adieresis Q -40 -KPX Adieresis T -37 -KPX Adieresis Tcaron -37 -KPX Adieresis Tcommaaccent -37 -KPX Adieresis U -50 -KPX Adieresis Uacute -50 -KPX Adieresis Ucircumflex -50 -KPX Adieresis Udieresis -50 -KPX Adieresis Ugrave -50 -KPX Adieresis Uhungarumlaut -50 -KPX Adieresis Umacron -50 -KPX Adieresis Uogonek -50 -KPX Adieresis Uring -50 -KPX Adieresis V -105 -KPX Adieresis W -95 -KPX Adieresis Y -55 -KPX Adieresis Yacute -55 -KPX Adieresis Ydieresis -55 -KPX Adieresis quoteright -37 -KPX Adieresis u -20 -KPX Adieresis uacute -20 -KPX Adieresis ucircumflex -20 -KPX Adieresis udieresis -20 -KPX Adieresis ugrave -20 -KPX Adieresis uhungarumlaut -20 -KPX Adieresis umacron -20 -KPX Adieresis uogonek -20 -KPX Adieresis uring -20 -KPX Adieresis v -55 -KPX Adieresis w -55 -KPX Adieresis y -55 -KPX Adieresis yacute -55 -KPX Adieresis ydieresis -55 -KPX Agrave C -30 -KPX Agrave Cacute -30 -KPX Agrave Ccaron -30 -KPX Agrave Ccedilla -30 -KPX Agrave G -35 -KPX Agrave Gbreve -35 -KPX Agrave Gcommaaccent -35 -KPX Agrave O -40 -KPX Agrave Oacute -40 -KPX Agrave Ocircumflex -40 -KPX Agrave Odieresis -40 -KPX Agrave Ograve -40 -KPX Agrave Ohungarumlaut -40 -KPX Agrave Omacron -40 -KPX Agrave Oslash -40 -KPX Agrave Otilde -40 -KPX Agrave Q -40 -KPX Agrave T -37 -KPX Agrave Tcaron -37 -KPX Agrave Tcommaaccent -37 -KPX Agrave U -50 -KPX Agrave Uacute -50 -KPX Agrave Ucircumflex -50 -KPX Agrave Udieresis -50 -KPX Agrave Ugrave -50 -KPX Agrave Uhungarumlaut -50 -KPX Agrave Umacron -50 -KPX Agrave Uogonek -50 -KPX Agrave Uring -50 -KPX Agrave V -105 -KPX Agrave W -95 -KPX Agrave Y -55 -KPX Agrave Yacute -55 -KPX Agrave Ydieresis -55 -KPX Agrave quoteright -37 -KPX Agrave u -20 -KPX Agrave uacute -20 -KPX Agrave ucircumflex -20 -KPX Agrave udieresis -20 -KPX Agrave ugrave -20 -KPX Agrave uhungarumlaut -20 -KPX Agrave umacron -20 -KPX Agrave uogonek -20 -KPX Agrave uring -20 -KPX Agrave v -55 -KPX Agrave w -55 -KPX Agrave y -55 -KPX Agrave yacute -55 -KPX Agrave ydieresis -55 -KPX Amacron C -30 -KPX Amacron Cacute -30 -KPX Amacron Ccaron -30 -KPX Amacron Ccedilla -30 -KPX Amacron G -35 -KPX Amacron Gbreve -35 -KPX Amacron Gcommaaccent -35 -KPX Amacron O -40 -KPX Amacron Oacute -40 -KPX Amacron Ocircumflex -40 -KPX Amacron Odieresis -40 -KPX Amacron Ograve -40 -KPX Amacron Ohungarumlaut -40 -KPX Amacron Omacron -40 -KPX Amacron Oslash -40 -KPX Amacron Otilde -40 -KPX Amacron Q -40 -KPX Amacron T -37 -KPX Amacron Tcaron -37 -KPX Amacron Tcommaaccent -37 -KPX Amacron U -50 -KPX Amacron Uacute -50 -KPX Amacron Ucircumflex -50 -KPX Amacron Udieresis -50 -KPX Amacron Ugrave -50 -KPX Amacron Uhungarumlaut -50 -KPX Amacron Umacron -50 -KPX Amacron Uogonek -50 -KPX Amacron Uring -50 -KPX Amacron V -105 -KPX Amacron W -95 -KPX Amacron Y -55 -KPX Amacron Yacute -55 -KPX Amacron Ydieresis -55 -KPX Amacron quoteright -37 -KPX Amacron u -20 -KPX Amacron uacute -20 -KPX Amacron ucircumflex -20 -KPX Amacron udieresis -20 -KPX Amacron ugrave -20 -KPX Amacron uhungarumlaut -20 -KPX Amacron umacron -20 -KPX Amacron uogonek -20 -KPX Amacron uring -20 -KPX Amacron v -55 -KPX Amacron w -55 -KPX Amacron y -55 -KPX Amacron yacute -55 -KPX Amacron ydieresis -55 -KPX Aogonek C -30 -KPX Aogonek Cacute -30 -KPX Aogonek Ccaron -30 -KPX Aogonek Ccedilla -30 -KPX Aogonek G -35 -KPX Aogonek Gbreve -35 -KPX Aogonek Gcommaaccent -35 -KPX Aogonek O -40 -KPX Aogonek Oacute -40 -KPX Aogonek Ocircumflex -40 -KPX Aogonek Odieresis -40 -KPX Aogonek Ograve -40 -KPX Aogonek Ohungarumlaut -40 -KPX Aogonek Omacron -40 -KPX Aogonek Oslash -40 -KPX Aogonek Otilde -40 -KPX Aogonek Q -40 -KPX Aogonek T -37 -KPX Aogonek Tcaron -37 -KPX Aogonek Tcommaaccent -37 -KPX Aogonek U -50 -KPX Aogonek Uacute -50 -KPX Aogonek Ucircumflex -50 -KPX Aogonek Udieresis -50 -KPX Aogonek Ugrave -50 -KPX Aogonek Uhungarumlaut -50 -KPX Aogonek Umacron -50 -KPX Aogonek Uogonek -50 -KPX Aogonek Uring -50 -KPX Aogonek V -105 -KPX Aogonek W -95 -KPX Aogonek Y -55 -KPX Aogonek Yacute -55 -KPX Aogonek Ydieresis -55 -KPX Aogonek quoteright -37 -KPX Aogonek u -20 -KPX Aogonek uacute -20 -KPX Aogonek ucircumflex -20 -KPX Aogonek udieresis -20 -KPX Aogonek ugrave -20 -KPX Aogonek uhungarumlaut -20 -KPX Aogonek umacron -20 -KPX Aogonek uogonek -20 -KPX Aogonek uring -20 -KPX Aogonek v -55 -KPX Aogonek w -55 -KPX Aogonek y -55 -KPX Aogonek yacute -55 -KPX Aogonek ydieresis -55 -KPX Aring C -30 -KPX Aring Cacute -30 -KPX Aring Ccaron -30 -KPX Aring Ccedilla -30 -KPX Aring G -35 -KPX Aring Gbreve -35 -KPX Aring Gcommaaccent -35 -KPX Aring O -40 -KPX Aring Oacute -40 -KPX Aring Ocircumflex -40 -KPX Aring Odieresis -40 -KPX Aring Ograve -40 -KPX Aring Ohungarumlaut -40 -KPX Aring Omacron -40 -KPX Aring Oslash -40 -KPX Aring Otilde -40 -KPX Aring Q -40 -KPX Aring T -37 -KPX Aring Tcaron -37 -KPX Aring Tcommaaccent -37 -KPX Aring U -50 -KPX Aring Uacute -50 -KPX Aring Ucircumflex -50 -KPX Aring Udieresis -50 -KPX Aring Ugrave -50 -KPX Aring Uhungarumlaut -50 -KPX Aring Umacron -50 -KPX Aring Uogonek -50 -KPX Aring Uring -50 -KPX Aring V -105 -KPX Aring W -95 -KPX Aring Y -55 -KPX Aring Yacute -55 -KPX Aring Ydieresis -55 -KPX Aring quoteright -37 -KPX Aring u -20 -KPX Aring uacute -20 -KPX Aring ucircumflex -20 -KPX Aring udieresis -20 -KPX Aring ugrave -20 -KPX Aring uhungarumlaut -20 -KPX Aring umacron -20 -KPX Aring uogonek -20 -KPX Aring uring -20 -KPX Aring v -55 -KPX Aring w -55 -KPX Aring y -55 -KPX Aring yacute -55 -KPX Aring ydieresis -55 -KPX Atilde C -30 -KPX Atilde Cacute -30 -KPX Atilde Ccaron -30 -KPX Atilde Ccedilla -30 -KPX Atilde G -35 -KPX Atilde Gbreve -35 -KPX Atilde Gcommaaccent -35 -KPX Atilde O -40 -KPX Atilde Oacute -40 -KPX Atilde Ocircumflex -40 -KPX Atilde Odieresis -40 -KPX Atilde Ograve -40 -KPX Atilde Ohungarumlaut -40 -KPX Atilde Omacron -40 -KPX Atilde Oslash -40 -KPX Atilde Otilde -40 -KPX Atilde Q -40 -KPX Atilde T -37 -KPX Atilde Tcaron -37 -KPX Atilde Tcommaaccent -37 -KPX Atilde U -50 -KPX Atilde Uacute -50 -KPX Atilde Ucircumflex -50 -KPX Atilde Udieresis -50 -KPX Atilde Ugrave -50 -KPX Atilde Uhungarumlaut -50 -KPX Atilde Umacron -50 -KPX Atilde Uogonek -50 -KPX Atilde Uring -50 -KPX Atilde V -105 -KPX Atilde W -95 -KPX Atilde Y -55 -KPX Atilde Yacute -55 -KPX Atilde Ydieresis -55 -KPX Atilde quoteright -37 -KPX Atilde u -20 -KPX Atilde uacute -20 -KPX Atilde ucircumflex -20 -KPX Atilde udieresis -20 -KPX Atilde ugrave -20 -KPX Atilde uhungarumlaut -20 -KPX Atilde umacron -20 -KPX Atilde uogonek -20 -KPX Atilde uring -20 -KPX Atilde v -55 -KPX Atilde w -55 -KPX Atilde y -55 -KPX Atilde yacute -55 -KPX Atilde ydieresis -55 -KPX B A -25 -KPX B Aacute -25 -KPX B Abreve -25 -KPX B Acircumflex -25 -KPX B Adieresis -25 -KPX B Agrave -25 -KPX B Amacron -25 -KPX B Aogonek -25 -KPX B Aring -25 -KPX B Atilde -25 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -35 -KPX D Aacute -35 -KPX D Abreve -35 -KPX D Acircumflex -35 -KPX D Adieresis -35 -KPX D Agrave -35 -KPX D Amacron -35 -KPX D Aogonek -35 -KPX D Aring -35 -KPX D Atilde -35 -KPX D V -40 -KPX D W -40 -KPX D Y -40 -KPX D Yacute -40 -KPX D Ydieresis -40 -KPX Dcaron A -35 -KPX Dcaron Aacute -35 -KPX Dcaron Abreve -35 -KPX Dcaron Acircumflex -35 -KPX Dcaron Adieresis -35 -KPX Dcaron Agrave -35 -KPX Dcaron Amacron -35 -KPX Dcaron Aogonek -35 -KPX Dcaron Aring -35 -KPX Dcaron Atilde -35 -KPX Dcaron V -40 -KPX Dcaron W -40 -KPX Dcaron Y -40 -KPX Dcaron Yacute -40 -KPX Dcaron Ydieresis -40 -KPX Dcroat A -35 -KPX Dcroat Aacute -35 -KPX Dcroat Abreve -35 -KPX Dcroat Acircumflex -35 -KPX Dcroat Adieresis -35 -KPX Dcroat Agrave -35 -KPX Dcroat Amacron -35 -KPX Dcroat Aogonek -35 -KPX Dcroat Aring -35 -KPX Dcroat Atilde -35 -KPX Dcroat V -40 -KPX Dcroat W -40 -KPX Dcroat Y -40 -KPX Dcroat Yacute -40 -KPX Dcroat Ydieresis -40 -KPX F A -115 -KPX F Aacute -115 -KPX F Abreve -115 -KPX F Acircumflex -115 -KPX F Adieresis -115 -KPX F Agrave -115 -KPX F Amacron -115 -KPX F Aogonek -115 -KPX F Aring -115 -KPX F Atilde -115 -KPX F a -75 -KPX F aacute -75 -KPX F abreve -75 -KPX F acircumflex -75 -KPX F adieresis -75 -KPX F agrave -75 -KPX F amacron -75 -KPX F aogonek -75 -KPX F aring -75 -KPX F atilde -75 -KPX F comma -135 -KPX F e -75 -KPX F eacute -75 -KPX F ecaron -75 -KPX F ecircumflex -75 -KPX F edieresis -75 -KPX F edotaccent -75 -KPX F egrave -75 -KPX F emacron -75 -KPX F eogonek -75 -KPX F i -45 -KPX F iacute -45 -KPX F icircumflex -45 -KPX F idieresis -45 -KPX F igrave -45 -KPX F imacron -45 -KPX F iogonek -45 -KPX F o -105 -KPX F oacute -105 -KPX F ocircumflex -105 -KPX F odieresis -105 -KPX F ograve -105 -KPX F ohungarumlaut -105 -KPX F omacron -105 -KPX F oslash -105 -KPX F otilde -105 -KPX F period -135 -KPX F r -55 -KPX F racute -55 -KPX F rcaron -55 -KPX F rcommaaccent -55 -KPX J A -40 -KPX J Aacute -40 -KPX J Abreve -40 -KPX J Acircumflex -40 -KPX J Adieresis -40 -KPX J Agrave -40 -KPX J Amacron -40 -KPX J Aogonek -40 -KPX J Aring -40 -KPX J Atilde -40 -KPX J a -35 -KPX J aacute -35 -KPX J abreve -35 -KPX J acircumflex -35 -KPX J adieresis -35 -KPX J agrave -35 -KPX J amacron -35 -KPX J aogonek -35 -KPX J aring -35 -KPX J atilde -35 -KPX J comma -25 -KPX J e -25 -KPX J eacute -25 -KPX J ecaron -25 -KPX J ecircumflex -25 -KPX J edieresis -25 -KPX J edotaccent -25 -KPX J egrave -25 -KPX J emacron -25 -KPX J eogonek -25 -KPX J o -25 -KPX J oacute -25 -KPX J ocircumflex -25 -KPX J odieresis -25 -KPX J ograve -25 -KPX J ohungarumlaut -25 -KPX J omacron -25 -KPX J oslash -25 -KPX J otilde -25 -KPX J period -25 -KPX J u -35 -KPX J uacute -35 -KPX J ucircumflex -35 -KPX J udieresis -35 -KPX J ugrave -35 -KPX J uhungarumlaut -35 -KPX J umacron -35 -KPX J uogonek -35 -KPX J uring -35 -KPX K O -50 -KPX K Oacute -50 -KPX K Ocircumflex -50 -KPX K Odieresis -50 -KPX K Ograve -50 -KPX K Ohungarumlaut -50 -KPX K Omacron -50 -KPX K Oslash -50 -KPX K Otilde -50 -KPX K e -35 -KPX K eacute -35 -KPX K ecaron -35 -KPX K ecircumflex -35 -KPX K edieresis -35 -KPX K edotaccent -35 -KPX K egrave -35 -KPX K emacron -35 -KPX K eogonek -35 -KPX K o -40 -KPX K oacute -40 -KPX K ocircumflex -40 -KPX K odieresis -40 -KPX K ograve -40 -KPX K ohungarumlaut -40 -KPX K omacron -40 -KPX K oslash -40 -KPX K otilde -40 -KPX K u -40 -KPX K uacute -40 -KPX K ucircumflex -40 -KPX K udieresis -40 -KPX K ugrave -40 -KPX K uhungarumlaut -40 -KPX K umacron -40 -KPX K uogonek -40 -KPX K uring -40 -KPX K y -40 -KPX K yacute -40 -KPX K ydieresis -40 -KPX Kcommaaccent O -50 -KPX Kcommaaccent Oacute -50 -KPX Kcommaaccent Ocircumflex -50 -KPX Kcommaaccent Odieresis -50 -KPX Kcommaaccent Ograve -50 -KPX Kcommaaccent Ohungarumlaut -50 -KPX Kcommaaccent Omacron -50 -KPX Kcommaaccent Oslash -50 -KPX Kcommaaccent Otilde -50 -KPX Kcommaaccent e -35 -KPX Kcommaaccent eacute -35 -KPX Kcommaaccent ecaron -35 -KPX Kcommaaccent ecircumflex -35 -KPX Kcommaaccent edieresis -35 -KPX Kcommaaccent edotaccent -35 -KPX Kcommaaccent egrave -35 -KPX Kcommaaccent emacron -35 -KPX Kcommaaccent eogonek -35 -KPX Kcommaaccent o -40 -KPX Kcommaaccent oacute -40 -KPX Kcommaaccent ocircumflex -40 -KPX Kcommaaccent odieresis -40 -KPX Kcommaaccent ograve -40 -KPX Kcommaaccent ohungarumlaut -40 -KPX Kcommaaccent omacron -40 -KPX Kcommaaccent oslash -40 -KPX Kcommaaccent otilde -40 -KPX Kcommaaccent u -40 -KPX Kcommaaccent uacute -40 -KPX Kcommaaccent ucircumflex -40 -KPX Kcommaaccent udieresis -40 -KPX Kcommaaccent ugrave -40 -KPX Kcommaaccent uhungarumlaut -40 -KPX Kcommaaccent umacron -40 -KPX Kcommaaccent uogonek -40 -KPX Kcommaaccent uring -40 -KPX Kcommaaccent y -40 -KPX Kcommaaccent yacute -40 -KPX Kcommaaccent ydieresis -40 -KPX L T -20 -KPX L Tcaron -20 -KPX L Tcommaaccent -20 -KPX L V -55 -KPX L W -55 -KPX L Y -20 -KPX L Yacute -20 -KPX L Ydieresis -20 -KPX L quoteright -37 -KPX L y -30 -KPX L yacute -30 -KPX L ydieresis -30 -KPX Lacute T -20 -KPX Lacute Tcaron -20 -KPX Lacute Tcommaaccent -20 -KPX Lacute V -55 -KPX Lacute W -55 -KPX Lacute Y -20 -KPX Lacute Yacute -20 -KPX Lacute Ydieresis -20 -KPX Lacute quoteright -37 -KPX Lacute y -30 -KPX Lacute yacute -30 -KPX Lacute ydieresis -30 -KPX Lcommaaccent T -20 -KPX Lcommaaccent Tcaron -20 -KPX Lcommaaccent Tcommaaccent -20 -KPX Lcommaaccent V -55 -KPX Lcommaaccent W -55 -KPX Lcommaaccent Y -20 -KPX Lcommaaccent Yacute -20 -KPX Lcommaaccent Ydieresis -20 -KPX Lcommaaccent quoteright -37 -KPX Lcommaaccent y -30 -KPX Lcommaaccent yacute -30 -KPX Lcommaaccent ydieresis -30 -KPX Lslash T -20 -KPX Lslash Tcaron -20 -KPX Lslash Tcommaaccent -20 -KPX Lslash V -55 -KPX Lslash W -55 -KPX Lslash Y -20 -KPX Lslash Yacute -20 -KPX Lslash Ydieresis -20 -KPX Lslash quoteright -37 -KPX Lslash y -30 -KPX Lslash yacute -30 -KPX Lslash ydieresis -30 -KPX N A -27 -KPX N Aacute -27 -KPX N Abreve -27 -KPX N Acircumflex -27 -KPX N Adieresis -27 -KPX N Agrave -27 -KPX N Amacron -27 -KPX N Aogonek -27 -KPX N Aring -27 -KPX N Atilde -27 -KPX Nacute A -27 -KPX Nacute Aacute -27 -KPX Nacute Abreve -27 -KPX Nacute Acircumflex -27 -KPX Nacute Adieresis -27 -KPX Nacute Agrave -27 -KPX Nacute Amacron -27 -KPX Nacute Aogonek -27 -KPX Nacute Aring -27 -KPX Nacute Atilde -27 -KPX Ncaron A -27 -KPX Ncaron Aacute -27 -KPX Ncaron Abreve -27 -KPX Ncaron Acircumflex -27 -KPX Ncaron Adieresis -27 -KPX Ncaron Agrave -27 -KPX Ncaron Amacron -27 -KPX Ncaron Aogonek -27 -KPX Ncaron Aring -27 -KPX Ncaron Atilde -27 -KPX Ncommaaccent A -27 -KPX Ncommaaccent Aacute -27 -KPX Ncommaaccent Abreve -27 -KPX Ncommaaccent Acircumflex -27 -KPX Ncommaaccent Adieresis -27 -KPX Ncommaaccent Agrave -27 -KPX Ncommaaccent Amacron -27 -KPX Ncommaaccent Aogonek -27 -KPX Ncommaaccent Aring -27 -KPX Ncommaaccent Atilde -27 -KPX Ntilde A -27 -KPX Ntilde Aacute -27 -KPX Ntilde Abreve -27 -KPX Ntilde Acircumflex -27 -KPX Ntilde Adieresis -27 -KPX Ntilde Agrave -27 -KPX Ntilde Amacron -27 -KPX Ntilde Aogonek -27 -KPX Ntilde Aring -27 -KPX Ntilde Atilde -27 -KPX O A -55 -KPX O Aacute -55 -KPX O Abreve -55 -KPX O Acircumflex -55 -KPX O Adieresis -55 -KPX O Agrave -55 -KPX O Amacron -55 -KPX O Aogonek -55 -KPX O Aring -55 -KPX O Atilde -55 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -50 -KPX O X -40 -KPX O Y -50 -KPX O Yacute -50 -KPX O Ydieresis -50 -KPX Oacute A -55 -KPX Oacute Aacute -55 -KPX Oacute Abreve -55 -KPX Oacute Acircumflex -55 -KPX Oacute Adieresis -55 -KPX Oacute Agrave -55 -KPX Oacute Amacron -55 -KPX Oacute Aogonek -55 -KPX Oacute Aring -55 -KPX Oacute Atilde -55 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -50 -KPX Oacute X -40 -KPX Oacute Y -50 -KPX Oacute Yacute -50 -KPX Oacute Ydieresis -50 -KPX Ocircumflex A -55 -KPX Ocircumflex Aacute -55 -KPX Ocircumflex Abreve -55 -KPX Ocircumflex Acircumflex -55 -KPX Ocircumflex Adieresis -55 -KPX Ocircumflex Agrave -55 -KPX Ocircumflex Amacron -55 -KPX Ocircumflex Aogonek -55 -KPX Ocircumflex Aring -55 -KPX Ocircumflex Atilde -55 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -50 -KPX Ocircumflex X -40 -KPX Ocircumflex Y -50 -KPX Ocircumflex Yacute -50 -KPX Ocircumflex Ydieresis -50 -KPX Odieresis A -55 -KPX Odieresis Aacute -55 -KPX Odieresis Abreve -55 -KPX Odieresis Acircumflex -55 -KPX Odieresis Adieresis -55 -KPX Odieresis Agrave -55 -KPX Odieresis Amacron -55 -KPX Odieresis Aogonek -55 -KPX Odieresis Aring -55 -KPX Odieresis Atilde -55 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -50 -KPX Odieresis X -40 -KPX Odieresis Y -50 -KPX Odieresis Yacute -50 -KPX Odieresis Ydieresis -50 -KPX Ograve A -55 -KPX Ograve Aacute -55 -KPX Ograve Abreve -55 -KPX Ograve Acircumflex -55 -KPX Ograve Adieresis -55 -KPX Ograve Agrave -55 -KPX Ograve Amacron -55 -KPX Ograve Aogonek -55 -KPX Ograve Aring -55 -KPX Ograve Atilde -55 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -50 -KPX Ograve X -40 -KPX Ograve Y -50 -KPX Ograve Yacute -50 -KPX Ograve Ydieresis -50 -KPX Ohungarumlaut A -55 -KPX Ohungarumlaut Aacute -55 -KPX Ohungarumlaut Abreve -55 -KPX Ohungarumlaut Acircumflex -55 -KPX Ohungarumlaut Adieresis -55 -KPX Ohungarumlaut Agrave -55 -KPX Ohungarumlaut Amacron -55 -KPX Ohungarumlaut Aogonek -55 -KPX Ohungarumlaut Aring -55 -KPX Ohungarumlaut Atilde -55 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -50 -KPX Ohungarumlaut X -40 -KPX Ohungarumlaut Y -50 -KPX Ohungarumlaut Yacute -50 -KPX Ohungarumlaut Ydieresis -50 -KPX Omacron A -55 -KPX Omacron Aacute -55 -KPX Omacron Abreve -55 -KPX Omacron Acircumflex -55 -KPX Omacron Adieresis -55 -KPX Omacron Agrave -55 -KPX Omacron Amacron -55 -KPX Omacron Aogonek -55 -KPX Omacron Aring -55 -KPX Omacron Atilde -55 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -50 -KPX Omacron X -40 -KPX Omacron Y -50 -KPX Omacron Yacute -50 -KPX Omacron Ydieresis -50 -KPX Oslash A -55 -KPX Oslash Aacute -55 -KPX Oslash Abreve -55 -KPX Oslash Acircumflex -55 -KPX Oslash Adieresis -55 -KPX Oslash Agrave -55 -KPX Oslash Amacron -55 -KPX Oslash Aogonek -55 -KPX Oslash Aring -55 -KPX Oslash Atilde -55 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -50 -KPX Oslash X -40 -KPX Oslash Y -50 -KPX Oslash Yacute -50 -KPX Oslash Ydieresis -50 -KPX Otilde A -55 -KPX Otilde Aacute -55 -KPX Otilde Abreve -55 -KPX Otilde Acircumflex -55 -KPX Otilde Adieresis -55 -KPX Otilde Agrave -55 -KPX Otilde Amacron -55 -KPX Otilde Aogonek -55 -KPX Otilde Aring -55 -KPX Otilde Atilde -55 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -50 -KPX Otilde X -40 -KPX Otilde Y -50 -KPX Otilde Yacute -50 -KPX Otilde Ydieresis -50 -KPX P A -90 -KPX P Aacute -90 -KPX P Abreve -90 -KPX P Acircumflex -90 -KPX P Adieresis -90 -KPX P Agrave -90 -KPX P Amacron -90 -KPX P Aogonek -90 -KPX P Aring -90 -KPX P Atilde -90 -KPX P a -80 -KPX P aacute -80 -KPX P abreve -80 -KPX P acircumflex -80 -KPX P adieresis -80 -KPX P agrave -80 -KPX P amacron -80 -KPX P aogonek -80 -KPX P aring -80 -KPX P atilde -80 -KPX P comma -135 -KPX P e -80 -KPX P eacute -80 -KPX P ecaron -80 -KPX P ecircumflex -80 -KPX P edieresis -80 -KPX P edotaccent -80 -KPX P egrave -80 -KPX P emacron -80 -KPX P eogonek -80 -KPX P o -80 -KPX P oacute -80 -KPX P ocircumflex -80 -KPX P odieresis -80 -KPX P ograve -80 -KPX P ohungarumlaut -80 -KPX P omacron -80 -KPX P oslash -80 -KPX P otilde -80 -KPX P period -135 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX R O -40 -KPX R Oacute -40 -KPX R Ocircumflex -40 -KPX R Odieresis -40 -KPX R Ograve -40 -KPX R Ohungarumlaut -40 -KPX R Omacron -40 -KPX R Oslash -40 -KPX R Otilde -40 -KPX R U -40 -KPX R Uacute -40 -KPX R Ucircumflex -40 -KPX R Udieresis -40 -KPX R Ugrave -40 -KPX R Uhungarumlaut -40 -KPX R Umacron -40 -KPX R Uogonek -40 -KPX R Uring -40 -KPX R V -18 -KPX R W -18 -KPX R Y -18 -KPX R Yacute -18 -KPX R Ydieresis -18 -KPX Racute O -40 -KPX Racute Oacute -40 -KPX Racute Ocircumflex -40 -KPX Racute Odieresis -40 -KPX Racute Ograve -40 -KPX Racute Ohungarumlaut -40 -KPX Racute Omacron -40 -KPX Racute Oslash -40 -KPX Racute Otilde -40 -KPX Racute U -40 -KPX Racute Uacute -40 -KPX Racute Ucircumflex -40 -KPX Racute Udieresis -40 -KPX Racute Ugrave -40 -KPX Racute Uhungarumlaut -40 -KPX Racute Umacron -40 -KPX Racute Uogonek -40 -KPX Racute Uring -40 -KPX Racute V -18 -KPX Racute W -18 -KPX Racute Y -18 -KPX Racute Yacute -18 -KPX Racute Ydieresis -18 -KPX Rcaron O -40 -KPX Rcaron Oacute -40 -KPX Rcaron Ocircumflex -40 -KPX Rcaron Odieresis -40 -KPX Rcaron Ograve -40 -KPX Rcaron Ohungarumlaut -40 -KPX Rcaron Omacron -40 -KPX Rcaron Oslash -40 -KPX Rcaron Otilde -40 -KPX Rcaron U -40 -KPX Rcaron Uacute -40 -KPX Rcaron Ucircumflex -40 -KPX Rcaron Udieresis -40 -KPX Rcaron Ugrave -40 -KPX Rcaron Uhungarumlaut -40 -KPX Rcaron Umacron -40 -KPX Rcaron Uogonek -40 -KPX Rcaron Uring -40 -KPX Rcaron V -18 -KPX Rcaron W -18 -KPX Rcaron Y -18 -KPX Rcaron Yacute -18 -KPX Rcaron Ydieresis -18 -KPX Rcommaaccent O -40 -KPX Rcommaaccent Oacute -40 -KPX Rcommaaccent Ocircumflex -40 -KPX Rcommaaccent Odieresis -40 -KPX Rcommaaccent Ograve -40 -KPX Rcommaaccent Ohungarumlaut -40 -KPX Rcommaaccent Omacron -40 -KPX Rcommaaccent Oslash -40 -KPX Rcommaaccent Otilde -40 -KPX Rcommaaccent U -40 -KPX Rcommaaccent Uacute -40 -KPX Rcommaaccent Ucircumflex -40 -KPX Rcommaaccent Udieresis -40 -KPX Rcommaaccent Ugrave -40 -KPX Rcommaaccent Uhungarumlaut -40 -KPX Rcommaaccent Umacron -40 -KPX Rcommaaccent Uogonek -40 -KPX Rcommaaccent Uring -40 -KPX Rcommaaccent V -18 -KPX Rcommaaccent W -18 -KPX Rcommaaccent Y -18 -KPX Rcommaaccent Yacute -18 -KPX Rcommaaccent Ydieresis -18 -KPX T A -50 -KPX T Aacute -50 -KPX T Abreve -50 -KPX T Acircumflex -50 -KPX T Adieresis -50 -KPX T Agrave -50 -KPX T Amacron -50 -KPX T Aogonek -50 -KPX T Aring -50 -KPX T Atilde -50 -KPX T O -18 -KPX T Oacute -18 -KPX T Ocircumflex -18 -KPX T Odieresis -18 -KPX T Ograve -18 -KPX T Ohungarumlaut -18 -KPX T Omacron -18 -KPX T Oslash -18 -KPX T Otilde -18 -KPX T a -92 -KPX T aacute -92 -KPX T abreve -92 -KPX T acircumflex -92 -KPX T adieresis -92 -KPX T agrave -92 -KPX T amacron -92 -KPX T aogonek -92 -KPX T aring -92 -KPX T atilde -92 -KPX T colon -55 -KPX T comma -74 -KPX T e -92 -KPX T eacute -92 -KPX T ecaron -92 -KPX T ecircumflex -52 -KPX T edieresis -52 -KPX T edotaccent -92 -KPX T egrave -52 -KPX T emacron -52 -KPX T eogonek -92 -KPX T hyphen -74 -KPX T i -55 -KPX T iacute -55 -KPX T iogonek -55 -KPX T o -92 -KPX T oacute -92 -KPX T ocircumflex -92 -KPX T odieresis -92 -KPX T ograve -92 -KPX T ohungarumlaut -92 -KPX T omacron -92 -KPX T oslash -92 -KPX T otilde -92 -KPX T period -74 -KPX T r -55 -KPX T racute -55 -KPX T rcaron -55 -KPX T rcommaaccent -55 -KPX T semicolon -65 -KPX T u -55 -KPX T uacute -55 -KPX T ucircumflex -55 -KPX T udieresis -55 -KPX T ugrave -55 -KPX T uhungarumlaut -55 -KPX T umacron -55 -KPX T uogonek -55 -KPX T uring -55 -KPX T w -74 -KPX T y -74 -KPX T yacute -74 -KPX T ydieresis -34 -KPX Tcaron A -50 -KPX Tcaron Aacute -50 -KPX Tcaron Abreve -50 -KPX Tcaron Acircumflex -50 -KPX Tcaron Adieresis -50 -KPX Tcaron Agrave -50 -KPX Tcaron Amacron -50 -KPX Tcaron Aogonek -50 -KPX Tcaron Aring -50 -KPX Tcaron Atilde -50 -KPX Tcaron O -18 -KPX Tcaron Oacute -18 -KPX Tcaron Ocircumflex -18 -KPX Tcaron Odieresis -18 -KPX Tcaron Ograve -18 -KPX Tcaron Ohungarumlaut -18 -KPX Tcaron Omacron -18 -KPX Tcaron Oslash -18 -KPX Tcaron Otilde -18 -KPX Tcaron a -92 -KPX Tcaron aacute -92 -KPX Tcaron abreve -92 -KPX Tcaron acircumflex -92 -KPX Tcaron adieresis -92 -KPX Tcaron agrave -92 -KPX Tcaron amacron -92 -KPX Tcaron aogonek -92 -KPX Tcaron aring -92 -KPX Tcaron atilde -92 -KPX Tcaron colon -55 -KPX Tcaron comma -74 -KPX Tcaron e -92 -KPX Tcaron eacute -92 -KPX Tcaron ecaron -92 -KPX Tcaron ecircumflex -52 -KPX Tcaron edieresis -52 -KPX Tcaron edotaccent -92 -KPX Tcaron egrave -52 -KPX Tcaron emacron -52 -KPX Tcaron eogonek -92 -KPX Tcaron hyphen -74 -KPX Tcaron i -55 -KPX Tcaron iacute -55 -KPX Tcaron iogonek -55 -KPX Tcaron o -92 -KPX Tcaron oacute -92 -KPX Tcaron ocircumflex -92 -KPX Tcaron odieresis -92 -KPX Tcaron ograve -92 -KPX Tcaron ohungarumlaut -92 -KPX Tcaron omacron -92 -KPX Tcaron oslash -92 -KPX Tcaron otilde -92 -KPX Tcaron period -74 -KPX Tcaron r -55 -KPX Tcaron racute -55 -KPX Tcaron rcaron -55 -KPX Tcaron rcommaaccent -55 -KPX Tcaron semicolon -65 -KPX Tcaron u -55 -KPX Tcaron uacute -55 -KPX Tcaron ucircumflex -55 -KPX Tcaron udieresis -55 -KPX Tcaron ugrave -55 -KPX Tcaron uhungarumlaut -55 -KPX Tcaron umacron -55 -KPX Tcaron uogonek -55 -KPX Tcaron uring -55 -KPX Tcaron w -74 -KPX Tcaron y -74 -KPX Tcaron yacute -74 -KPX Tcaron ydieresis -34 -KPX Tcommaaccent A -50 -KPX Tcommaaccent Aacute -50 -KPX Tcommaaccent Abreve -50 -KPX Tcommaaccent Acircumflex -50 -KPX Tcommaaccent Adieresis -50 -KPX Tcommaaccent Agrave -50 -KPX Tcommaaccent Amacron -50 -KPX Tcommaaccent Aogonek -50 -KPX Tcommaaccent Aring -50 -KPX Tcommaaccent Atilde -50 -KPX Tcommaaccent O -18 -KPX Tcommaaccent Oacute -18 -KPX Tcommaaccent Ocircumflex -18 -KPX Tcommaaccent Odieresis -18 -KPX Tcommaaccent Ograve -18 -KPX Tcommaaccent Ohungarumlaut -18 -KPX Tcommaaccent Omacron -18 -KPX Tcommaaccent Oslash -18 -KPX Tcommaaccent Otilde -18 -KPX Tcommaaccent a -92 -KPX Tcommaaccent aacute -92 -KPX Tcommaaccent abreve -92 -KPX Tcommaaccent acircumflex -92 -KPX Tcommaaccent adieresis -92 -KPX Tcommaaccent agrave -92 -KPX Tcommaaccent amacron -92 -KPX Tcommaaccent aogonek -92 -KPX Tcommaaccent aring -92 -KPX Tcommaaccent atilde -92 -KPX Tcommaaccent colon -55 -KPX Tcommaaccent comma -74 -KPX Tcommaaccent e -92 -KPX Tcommaaccent eacute -92 -KPX Tcommaaccent ecaron -92 -KPX Tcommaaccent ecircumflex -52 -KPX Tcommaaccent edieresis -52 -KPX Tcommaaccent edotaccent -92 -KPX Tcommaaccent egrave -52 -KPX Tcommaaccent emacron -52 -KPX Tcommaaccent eogonek -92 -KPX Tcommaaccent hyphen -74 -KPX Tcommaaccent i -55 -KPX Tcommaaccent iacute -55 -KPX Tcommaaccent iogonek -55 -KPX Tcommaaccent o -92 -KPX Tcommaaccent oacute -92 -KPX Tcommaaccent ocircumflex -92 -KPX Tcommaaccent odieresis -92 -KPX Tcommaaccent ograve -92 -KPX Tcommaaccent ohungarumlaut -92 -KPX Tcommaaccent omacron -92 -KPX Tcommaaccent oslash -92 -KPX Tcommaaccent otilde -92 -KPX Tcommaaccent period -74 -KPX Tcommaaccent r -55 -KPX Tcommaaccent racute -55 -KPX Tcommaaccent rcaron -55 -KPX Tcommaaccent rcommaaccent -55 -KPX Tcommaaccent semicolon -65 -KPX Tcommaaccent u -55 -KPX Tcommaaccent uacute -55 -KPX Tcommaaccent ucircumflex -55 -KPX Tcommaaccent udieresis -55 -KPX Tcommaaccent ugrave -55 -KPX Tcommaaccent uhungarumlaut -55 -KPX Tcommaaccent umacron -55 -KPX Tcommaaccent uogonek -55 -KPX Tcommaaccent uring -55 -KPX Tcommaaccent w -74 -KPX Tcommaaccent y -74 -KPX Tcommaaccent yacute -74 -KPX Tcommaaccent ydieresis -34 -KPX U A -40 -KPX U Aacute -40 -KPX U Abreve -40 -KPX U Acircumflex -40 -KPX U Adieresis -40 -KPX U Agrave -40 -KPX U Amacron -40 -KPX U Aogonek -40 -KPX U Aring -40 -KPX U Atilde -40 -KPX U comma -25 -KPX U period -25 -KPX Uacute A -40 -KPX Uacute Aacute -40 -KPX Uacute Abreve -40 -KPX Uacute Acircumflex -40 -KPX Uacute Adieresis -40 -KPX Uacute Agrave -40 -KPX Uacute Amacron -40 -KPX Uacute Aogonek -40 -KPX Uacute Aring -40 -KPX Uacute Atilde -40 -KPX Uacute comma -25 -KPX Uacute period -25 -KPX Ucircumflex A -40 -KPX Ucircumflex Aacute -40 -KPX Ucircumflex Abreve -40 -KPX Ucircumflex Acircumflex -40 -KPX Ucircumflex Adieresis -40 -KPX Ucircumflex Agrave -40 -KPX Ucircumflex Amacron -40 -KPX Ucircumflex Aogonek -40 -KPX Ucircumflex Aring -40 -KPX Ucircumflex Atilde -40 -KPX Ucircumflex comma -25 -KPX Ucircumflex period -25 -KPX Udieresis A -40 -KPX Udieresis Aacute -40 -KPX Udieresis Abreve -40 -KPX Udieresis Acircumflex -40 -KPX Udieresis Adieresis -40 -KPX Udieresis Agrave -40 -KPX Udieresis Amacron -40 -KPX Udieresis Aogonek -40 -KPX Udieresis Aring -40 -KPX Udieresis Atilde -40 -KPX Udieresis comma -25 -KPX Udieresis period -25 -KPX Ugrave A -40 -KPX Ugrave Aacute -40 -KPX Ugrave Abreve -40 -KPX Ugrave Acircumflex -40 -KPX Ugrave Adieresis -40 -KPX Ugrave Agrave -40 -KPX Ugrave Amacron -40 -KPX Ugrave Aogonek -40 -KPX Ugrave Aring -40 -KPX Ugrave Atilde -40 -KPX Ugrave comma -25 -KPX Ugrave period -25 -KPX Uhungarumlaut A -40 -KPX Uhungarumlaut Aacute -40 -KPX Uhungarumlaut Abreve -40 -KPX Uhungarumlaut Acircumflex -40 -KPX Uhungarumlaut Adieresis -40 -KPX Uhungarumlaut Agrave -40 -KPX Uhungarumlaut Amacron -40 -KPX Uhungarumlaut Aogonek -40 -KPX Uhungarumlaut Aring -40 -KPX Uhungarumlaut Atilde -40 -KPX Uhungarumlaut comma -25 -KPX Uhungarumlaut period -25 -KPX Umacron A -40 -KPX Umacron Aacute -40 -KPX Umacron Abreve -40 -KPX Umacron Acircumflex -40 -KPX Umacron Adieresis -40 -KPX Umacron Agrave -40 -KPX Umacron Amacron -40 -KPX Umacron Aogonek -40 -KPX Umacron Aring -40 -KPX Umacron Atilde -40 -KPX Umacron comma -25 -KPX Umacron period -25 -KPX Uogonek A -40 -KPX Uogonek Aacute -40 -KPX Uogonek Abreve -40 -KPX Uogonek Acircumflex -40 -KPX Uogonek Adieresis -40 -KPX Uogonek Agrave -40 -KPX Uogonek Amacron -40 -KPX Uogonek Aogonek -40 -KPX Uogonek Aring -40 -KPX Uogonek Atilde -40 -KPX Uogonek comma -25 -KPX Uogonek period -25 -KPX Uring A -40 -KPX Uring Aacute -40 -KPX Uring Abreve -40 -KPX Uring Acircumflex -40 -KPX Uring Adieresis -40 -KPX Uring Agrave -40 -KPX Uring Amacron -40 -KPX Uring Aogonek -40 -KPX Uring Aring -40 -KPX Uring Atilde -40 -KPX Uring comma -25 -KPX Uring period -25 -KPX V A -60 -KPX V Aacute -60 -KPX V Abreve -60 -KPX V Acircumflex -60 -KPX V Adieresis -60 -KPX V Agrave -60 -KPX V Amacron -60 -KPX V Aogonek -60 -KPX V Aring -60 -KPX V Atilde -60 -KPX V O -30 -KPX V Oacute -30 -KPX V Ocircumflex -30 -KPX V Odieresis -30 -KPX V Ograve -30 -KPX V Ohungarumlaut -30 -KPX V Omacron -30 -KPX V Oslash -30 -KPX V Otilde -30 -KPX V a -111 -KPX V aacute -111 -KPX V abreve -111 -KPX V acircumflex -111 -KPX V adieresis -111 -KPX V agrave -111 -KPX V amacron -111 -KPX V aogonek -111 -KPX V aring -111 -KPX V atilde -111 -KPX V colon -65 -KPX V comma -129 -KPX V e -111 -KPX V eacute -111 -KPX V ecaron -111 -KPX V ecircumflex -111 -KPX V edieresis -71 -KPX V edotaccent -111 -KPX V egrave -71 -KPX V emacron -71 -KPX V eogonek -111 -KPX V hyphen -55 -KPX V i -74 -KPX V iacute -74 -KPX V icircumflex -34 -KPX V idieresis -34 -KPX V igrave -34 -KPX V imacron -34 -KPX V iogonek -74 -KPX V o -111 -KPX V oacute -111 -KPX V ocircumflex -111 -KPX V odieresis -111 -KPX V ograve -111 -KPX V ohungarumlaut -111 -KPX V omacron -111 -KPX V oslash -111 -KPX V otilde -111 -KPX V period -129 -KPX V semicolon -74 -KPX V u -74 -KPX V uacute -74 -KPX V ucircumflex -74 -KPX V udieresis -74 -KPX V ugrave -74 -KPX V uhungarumlaut -74 -KPX V umacron -74 -KPX V uogonek -74 -KPX V uring -74 -KPX W A -60 -KPX W Aacute -60 -KPX W Abreve -60 -KPX W Acircumflex -60 -KPX W Adieresis -60 -KPX W Agrave -60 -KPX W Amacron -60 -KPX W Aogonek -60 -KPX W Aring -60 -KPX W Atilde -60 -KPX W O -25 -KPX W Oacute -25 -KPX W Ocircumflex -25 -KPX W Odieresis -25 -KPX W Ograve -25 -KPX W Ohungarumlaut -25 -KPX W Omacron -25 -KPX W Oslash -25 -KPX W Otilde -25 -KPX W a -92 -KPX W aacute -92 -KPX W abreve -92 -KPX W acircumflex -92 -KPX W adieresis -92 -KPX W agrave -92 -KPX W amacron -92 -KPX W aogonek -92 -KPX W aring -92 -KPX W atilde -92 -KPX W colon -65 -KPX W comma -92 -KPX W e -92 -KPX W eacute -92 -KPX W ecaron -92 -KPX W ecircumflex -92 -KPX W edieresis -52 -KPX W edotaccent -92 -KPX W egrave -52 -KPX W emacron -52 -KPX W eogonek -92 -KPX W hyphen -37 -KPX W i -55 -KPX W iacute -55 -KPX W iogonek -55 -KPX W o -92 -KPX W oacute -92 -KPX W ocircumflex -92 -KPX W odieresis -92 -KPX W ograve -92 -KPX W ohungarumlaut -92 -KPX W omacron -92 -KPX W oslash -92 -KPX W otilde -92 -KPX W period -92 -KPX W semicolon -65 -KPX W u -55 -KPX W uacute -55 -KPX W ucircumflex -55 -KPX W udieresis -55 -KPX W ugrave -55 -KPX W uhungarumlaut -55 -KPX W umacron -55 -KPX W uogonek -55 -KPX W uring -55 -KPX W y -70 -KPX W yacute -70 -KPX W ydieresis -70 -KPX Y A -50 -KPX Y Aacute -50 -KPX Y Abreve -50 -KPX Y Acircumflex -50 -KPX Y Adieresis -50 -KPX Y Agrave -50 -KPX Y Amacron -50 -KPX Y Aogonek -50 -KPX Y Aring -50 -KPX Y Atilde -50 -KPX Y O -15 -KPX Y Oacute -15 -KPX Y Ocircumflex -15 -KPX Y Odieresis -15 -KPX Y Ograve -15 -KPX Y Ohungarumlaut -15 -KPX Y Omacron -15 -KPX Y Oslash -15 -KPX Y Otilde -15 -KPX Y a -92 -KPX Y aacute -92 -KPX Y abreve -92 -KPX Y acircumflex -92 -KPX Y adieresis -92 -KPX Y agrave -92 -KPX Y amacron -92 -KPX Y aogonek -92 -KPX Y aring -92 -KPX Y atilde -92 -KPX Y colon -65 -KPX Y comma -92 -KPX Y e -92 -KPX Y eacute -92 -KPX Y ecaron -92 -KPX Y ecircumflex -92 -KPX Y edieresis -52 -KPX Y edotaccent -92 -KPX Y egrave -52 -KPX Y emacron -52 -KPX Y eogonek -92 -KPX Y hyphen -74 -KPX Y i -74 -KPX Y iacute -74 -KPX Y icircumflex -34 -KPX Y idieresis -34 -KPX Y igrave -34 -KPX Y imacron -34 -KPX Y iogonek -74 -KPX Y o -92 -KPX Y oacute -92 -KPX Y ocircumflex -92 -KPX Y odieresis -92 -KPX Y ograve -92 -KPX Y ohungarumlaut -92 -KPX Y omacron -92 -KPX Y oslash -92 -KPX Y otilde -92 -KPX Y period -92 -KPX Y semicolon -65 -KPX Y u -92 -KPX Y uacute -92 -KPX Y ucircumflex -92 -KPX Y udieresis -92 -KPX Y ugrave -92 -KPX Y uhungarumlaut -92 -KPX Y umacron -92 -KPX Y uogonek -92 -KPX Y uring -92 -KPX Yacute A -50 -KPX Yacute Aacute -50 -KPX Yacute Abreve -50 -KPX Yacute Acircumflex -50 -KPX Yacute Adieresis -50 -KPX Yacute Agrave -50 -KPX Yacute Amacron -50 -KPX Yacute Aogonek -50 -KPX Yacute Aring -50 -KPX Yacute Atilde -50 -KPX Yacute O -15 -KPX Yacute Oacute -15 -KPX Yacute Ocircumflex -15 -KPX Yacute Odieresis -15 -KPX Yacute Ograve -15 -KPX Yacute Ohungarumlaut -15 -KPX Yacute Omacron -15 -KPX Yacute Oslash -15 -KPX Yacute Otilde -15 -KPX Yacute a -92 -KPX Yacute aacute -92 -KPX Yacute abreve -92 -KPX Yacute acircumflex -92 -KPX Yacute adieresis -92 -KPX Yacute agrave -92 -KPX Yacute amacron -92 -KPX Yacute aogonek -92 -KPX Yacute aring -92 -KPX Yacute atilde -92 -KPX Yacute colon -65 -KPX Yacute comma -92 -KPX Yacute e -92 -KPX Yacute eacute -92 -KPX Yacute ecaron -92 -KPX Yacute ecircumflex -92 -KPX Yacute edieresis -52 -KPX Yacute edotaccent -92 -KPX Yacute egrave -52 -KPX Yacute emacron -52 -KPX Yacute eogonek -92 -KPX Yacute hyphen -74 -KPX Yacute i -74 -KPX Yacute iacute -74 -KPX Yacute icircumflex -34 -KPX Yacute idieresis -34 -KPX Yacute igrave -34 -KPX Yacute imacron -34 -KPX Yacute iogonek -74 -KPX Yacute o -92 -KPX Yacute oacute -92 -KPX Yacute ocircumflex -92 -KPX Yacute odieresis -92 -KPX Yacute ograve -92 -KPX Yacute ohungarumlaut -92 -KPX Yacute omacron -92 -KPX Yacute oslash -92 -KPX Yacute otilde -92 -KPX Yacute period -92 -KPX Yacute semicolon -65 -KPX Yacute u -92 -KPX Yacute uacute -92 -KPX Yacute ucircumflex -92 -KPX Yacute udieresis -92 -KPX Yacute ugrave -92 -KPX Yacute uhungarumlaut -92 -KPX Yacute umacron -92 -KPX Yacute uogonek -92 -KPX Yacute uring -92 -KPX Ydieresis A -50 -KPX Ydieresis Aacute -50 -KPX Ydieresis Abreve -50 -KPX Ydieresis Acircumflex -50 -KPX Ydieresis Adieresis -50 -KPX Ydieresis Agrave -50 -KPX Ydieresis Amacron -50 -KPX Ydieresis Aogonek -50 -KPX Ydieresis Aring -50 -KPX Ydieresis Atilde -50 -KPX Ydieresis O -15 -KPX Ydieresis Oacute -15 -KPX Ydieresis Ocircumflex -15 -KPX Ydieresis Odieresis -15 -KPX Ydieresis Ograve -15 -KPX Ydieresis Ohungarumlaut -15 -KPX Ydieresis Omacron -15 -KPX Ydieresis Oslash -15 -KPX Ydieresis Otilde -15 -KPX Ydieresis a -92 -KPX Ydieresis aacute -92 -KPX Ydieresis abreve -92 -KPX Ydieresis acircumflex -92 -KPX Ydieresis adieresis -92 -KPX Ydieresis agrave -92 -KPX Ydieresis amacron -92 -KPX Ydieresis aogonek -92 -KPX Ydieresis aring -92 -KPX Ydieresis atilde -92 -KPX Ydieresis colon -65 -KPX Ydieresis comma -92 -KPX Ydieresis e -92 -KPX Ydieresis eacute -92 -KPX Ydieresis ecaron -92 -KPX Ydieresis ecircumflex -92 -KPX Ydieresis edieresis -52 -KPX Ydieresis edotaccent -92 -KPX Ydieresis egrave -52 -KPX Ydieresis emacron -52 -KPX Ydieresis eogonek -92 -KPX Ydieresis hyphen -74 -KPX Ydieresis i -74 -KPX Ydieresis iacute -74 -KPX Ydieresis icircumflex -34 -KPX Ydieresis idieresis -34 -KPX Ydieresis igrave -34 -KPX Ydieresis imacron -34 -KPX Ydieresis iogonek -74 -KPX Ydieresis o -92 -KPX Ydieresis oacute -92 -KPX Ydieresis ocircumflex -92 -KPX Ydieresis odieresis -92 -KPX Ydieresis ograve -92 -KPX Ydieresis ohungarumlaut -92 -KPX Ydieresis omacron -92 -KPX Ydieresis oslash -92 -KPX Ydieresis otilde -92 -KPX Ydieresis period -92 -KPX Ydieresis semicolon -65 -KPX Ydieresis u -92 -KPX Ydieresis uacute -92 -KPX Ydieresis ucircumflex -92 -KPX Ydieresis udieresis -92 -KPX Ydieresis ugrave -92 -KPX Ydieresis uhungarumlaut -92 -KPX Ydieresis umacron -92 -KPX Ydieresis uogonek -92 -KPX Ydieresis uring -92 -KPX a g -10 -KPX a gbreve -10 -KPX a gcommaaccent -10 -KPX aacute g -10 -KPX aacute gbreve -10 -KPX aacute gcommaaccent -10 -KPX abreve g -10 -KPX abreve gbreve -10 -KPX abreve gcommaaccent -10 -KPX acircumflex g -10 -KPX acircumflex gbreve -10 -KPX acircumflex gcommaaccent -10 -KPX adieresis g -10 -KPX adieresis gbreve -10 -KPX adieresis gcommaaccent -10 -KPX agrave g -10 -KPX agrave gbreve -10 -KPX agrave gcommaaccent -10 -KPX amacron g -10 -KPX amacron gbreve -10 -KPX amacron gcommaaccent -10 -KPX aogonek g -10 -KPX aogonek gbreve -10 -KPX aogonek gcommaaccent -10 -KPX aring g -10 -KPX aring gbreve -10 -KPX aring gcommaaccent -10 -KPX atilde g -10 -KPX atilde gbreve -10 -KPX atilde gcommaaccent -10 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX c h -15 -KPX c k -20 -KPX c kcommaaccent -20 -KPX cacute h -15 -KPX cacute k -20 -KPX cacute kcommaaccent -20 -KPX ccaron h -15 -KPX ccaron k -20 -KPX ccaron kcommaaccent -20 -KPX ccedilla h -15 -KPX ccedilla k -20 -KPX ccedilla kcommaaccent -20 -KPX comma quotedblright -140 -KPX comma quoteright -140 -KPX e comma -10 -KPX e g -40 -KPX e gbreve -40 -KPX e gcommaaccent -40 -KPX e period -15 -KPX e v -15 -KPX e w -15 -KPX e x -20 -KPX e y -30 -KPX e yacute -30 -KPX e ydieresis -30 -KPX eacute comma -10 -KPX eacute g -40 -KPX eacute gbreve -40 -KPX eacute gcommaaccent -40 -KPX eacute period -15 -KPX eacute v -15 -KPX eacute w -15 -KPX eacute x -20 -KPX eacute y -30 -KPX eacute yacute -30 -KPX eacute ydieresis -30 -KPX ecaron comma -10 -KPX ecaron g -40 -KPX ecaron gbreve -40 -KPX ecaron gcommaaccent -40 -KPX ecaron period -15 -KPX ecaron v -15 -KPX ecaron w -15 -KPX ecaron x -20 -KPX ecaron y -30 -KPX ecaron yacute -30 -KPX ecaron ydieresis -30 -KPX ecircumflex comma -10 -KPX ecircumflex g -40 -KPX ecircumflex gbreve -40 -KPX ecircumflex gcommaaccent -40 -KPX ecircumflex period -15 -KPX ecircumflex v -15 -KPX ecircumflex w -15 -KPX ecircumflex x -20 -KPX ecircumflex y -30 -KPX ecircumflex yacute -30 -KPX ecircumflex ydieresis -30 -KPX edieresis comma -10 -KPX edieresis g -40 -KPX edieresis gbreve -40 -KPX edieresis gcommaaccent -40 -KPX edieresis period -15 -KPX edieresis v -15 -KPX edieresis w -15 -KPX edieresis x -20 -KPX edieresis y -30 -KPX edieresis yacute -30 -KPX edieresis ydieresis -30 -KPX edotaccent comma -10 -KPX edotaccent g -40 -KPX edotaccent gbreve -40 -KPX edotaccent gcommaaccent -40 -KPX edotaccent period -15 -KPX edotaccent v -15 -KPX edotaccent w -15 -KPX edotaccent x -20 -KPX edotaccent y -30 -KPX edotaccent yacute -30 -KPX edotaccent ydieresis -30 -KPX egrave comma -10 -KPX egrave g -40 -KPX egrave gbreve -40 -KPX egrave gcommaaccent -40 -KPX egrave period -15 -KPX egrave v -15 -KPX egrave w -15 -KPX egrave x -20 -KPX egrave y -30 -KPX egrave yacute -30 -KPX egrave ydieresis -30 -KPX emacron comma -10 -KPX emacron g -40 -KPX emacron gbreve -40 -KPX emacron gcommaaccent -40 -KPX emacron period -15 -KPX emacron v -15 -KPX emacron w -15 -KPX emacron x -20 -KPX emacron y -30 -KPX emacron yacute -30 -KPX emacron ydieresis -30 -KPX eogonek comma -10 -KPX eogonek g -40 -KPX eogonek gbreve -40 -KPX eogonek gcommaaccent -40 -KPX eogonek period -15 -KPX eogonek v -15 -KPX eogonek w -15 -KPX eogonek x -20 -KPX eogonek y -30 -KPX eogonek yacute -30 -KPX eogonek ydieresis -30 -KPX f comma -10 -KPX f dotlessi -60 -KPX f f -18 -KPX f i -20 -KPX f iogonek -20 -KPX f period -15 -KPX f quoteright 92 -KPX g comma -10 -KPX g e -10 -KPX g eacute -10 -KPX g ecaron -10 -KPX g ecircumflex -10 -KPX g edieresis -10 -KPX g edotaccent -10 -KPX g egrave -10 -KPX g emacron -10 -KPX g eogonek -10 -KPX g g -10 -KPX g gbreve -10 -KPX g gcommaaccent -10 -KPX g period -15 -KPX gbreve comma -10 -KPX gbreve e -10 -KPX gbreve eacute -10 -KPX gbreve ecaron -10 -KPX gbreve ecircumflex -10 -KPX gbreve edieresis -10 -KPX gbreve edotaccent -10 -KPX gbreve egrave -10 -KPX gbreve emacron -10 -KPX gbreve eogonek -10 -KPX gbreve g -10 -KPX gbreve gbreve -10 -KPX gbreve gcommaaccent -10 -KPX gbreve period -15 -KPX gcommaaccent comma -10 -KPX gcommaaccent e -10 -KPX gcommaaccent eacute -10 -KPX gcommaaccent ecaron -10 -KPX gcommaaccent ecircumflex -10 -KPX gcommaaccent edieresis -10 -KPX gcommaaccent edotaccent -10 -KPX gcommaaccent egrave -10 -KPX gcommaaccent emacron -10 -KPX gcommaaccent eogonek -10 -KPX gcommaaccent g -10 -KPX gcommaaccent gbreve -10 -KPX gcommaaccent gcommaaccent -10 -KPX gcommaaccent period -15 -KPX k e -10 -KPX k eacute -10 -KPX k ecaron -10 -KPX k ecircumflex -10 -KPX k edieresis -10 -KPX k edotaccent -10 -KPX k egrave -10 -KPX k emacron -10 -KPX k eogonek -10 -KPX k o -10 -KPX k oacute -10 -KPX k ocircumflex -10 -KPX k odieresis -10 -KPX k ograve -10 -KPX k ohungarumlaut -10 -KPX k omacron -10 -KPX k oslash -10 -KPX k otilde -10 -KPX k y -10 -KPX k yacute -10 -KPX k ydieresis -10 -KPX kcommaaccent e -10 -KPX kcommaaccent eacute -10 -KPX kcommaaccent ecaron -10 -KPX kcommaaccent ecircumflex -10 -KPX kcommaaccent edieresis -10 -KPX kcommaaccent edotaccent -10 -KPX kcommaaccent egrave -10 -KPX kcommaaccent emacron -10 -KPX kcommaaccent eogonek -10 -KPX kcommaaccent o -10 -KPX kcommaaccent oacute -10 -KPX kcommaaccent ocircumflex -10 -KPX kcommaaccent odieresis -10 -KPX kcommaaccent ograve -10 -KPX kcommaaccent ohungarumlaut -10 -KPX kcommaaccent omacron -10 -KPX kcommaaccent oslash -10 -KPX kcommaaccent otilde -10 -KPX kcommaaccent y -10 -KPX kcommaaccent yacute -10 -KPX kcommaaccent ydieresis -10 -KPX n v -40 -KPX nacute v -40 -KPX ncaron v -40 -KPX ncommaaccent v -40 -KPX ntilde v -40 -KPX o g -10 -KPX o gbreve -10 -KPX o gcommaaccent -10 -KPX o v -10 -KPX oacute g -10 -KPX oacute gbreve -10 -KPX oacute gcommaaccent -10 -KPX oacute v -10 -KPX ocircumflex g -10 -KPX ocircumflex gbreve -10 -KPX ocircumflex gcommaaccent -10 -KPX ocircumflex v -10 -KPX odieresis g -10 -KPX odieresis gbreve -10 -KPX odieresis gcommaaccent -10 -KPX odieresis v -10 -KPX ograve g -10 -KPX ograve gbreve -10 -KPX ograve gcommaaccent -10 -KPX ograve v -10 -KPX ohungarumlaut g -10 -KPX ohungarumlaut gbreve -10 -KPX ohungarumlaut gcommaaccent -10 -KPX ohungarumlaut v -10 -KPX omacron g -10 -KPX omacron gbreve -10 -KPX omacron gcommaaccent -10 -KPX omacron v -10 -KPX oslash g -10 -KPX oslash gbreve -10 -KPX oslash gcommaaccent -10 -KPX oslash v -10 -KPX otilde g -10 -KPX otilde gbreve -10 -KPX otilde gcommaaccent -10 -KPX otilde v -10 -KPX period quotedblright -140 -KPX period quoteright -140 -KPX quoteleft quoteleft -111 -KPX quoteright d -25 -KPX quoteright dcroat -25 -KPX quoteright quoteright -111 -KPX quoteright r -25 -KPX quoteright racute -25 -KPX quoteright rcaron -25 -KPX quoteright rcommaaccent -25 -KPX quoteright s -40 -KPX quoteright sacute -40 -KPX quoteright scaron -40 -KPX quoteright scedilla -40 -KPX quoteright scommaaccent -40 -KPX quoteright space -111 -KPX quoteright t -30 -KPX quoteright tcommaaccent -30 -KPX quoteright v -10 -KPX r a -15 -KPX r aacute -15 -KPX r abreve -15 -KPX r acircumflex -15 -KPX r adieresis -15 -KPX r agrave -15 -KPX r amacron -15 -KPX r aogonek -15 -KPX r aring -15 -KPX r atilde -15 -KPX r c -37 -KPX r cacute -37 -KPX r ccaron -37 -KPX r ccedilla -37 -KPX r comma -111 -KPX r d -37 -KPX r dcroat -37 -KPX r e -37 -KPX r eacute -37 -KPX r ecaron -37 -KPX r ecircumflex -37 -KPX r edieresis -37 -KPX r edotaccent -37 -KPX r egrave -37 -KPX r emacron -37 -KPX r eogonek -37 -KPX r g -37 -KPX r gbreve -37 -KPX r gcommaaccent -37 -KPX r hyphen -20 -KPX r o -45 -KPX r oacute -45 -KPX r ocircumflex -45 -KPX r odieresis -45 -KPX r ograve -45 -KPX r ohungarumlaut -45 -KPX r omacron -45 -KPX r oslash -45 -KPX r otilde -45 -KPX r period -111 -KPX r q -37 -KPX r s -10 -KPX r sacute -10 -KPX r scaron -10 -KPX r scedilla -10 -KPX r scommaaccent -10 -KPX racute a -15 -KPX racute aacute -15 -KPX racute abreve -15 -KPX racute acircumflex -15 -KPX racute adieresis -15 -KPX racute agrave -15 -KPX racute amacron -15 -KPX racute aogonek -15 -KPX racute aring -15 -KPX racute atilde -15 -KPX racute c -37 -KPX racute cacute -37 -KPX racute ccaron -37 -KPX racute ccedilla -37 -KPX racute comma -111 -KPX racute d -37 -KPX racute dcroat -37 -KPX racute e -37 -KPX racute eacute -37 -KPX racute ecaron -37 -KPX racute ecircumflex -37 -KPX racute edieresis -37 -KPX racute edotaccent -37 -KPX racute egrave -37 -KPX racute emacron -37 -KPX racute eogonek -37 -KPX racute g -37 -KPX racute gbreve -37 -KPX racute gcommaaccent -37 -KPX racute hyphen -20 -KPX racute o -45 -KPX racute oacute -45 -KPX racute ocircumflex -45 -KPX racute odieresis -45 -KPX racute ograve -45 -KPX racute ohungarumlaut -45 -KPX racute omacron -45 -KPX racute oslash -45 -KPX racute otilde -45 -KPX racute period -111 -KPX racute q -37 -KPX racute s -10 -KPX racute sacute -10 -KPX racute scaron -10 -KPX racute scedilla -10 -KPX racute scommaaccent -10 -KPX rcaron a -15 -KPX rcaron aacute -15 -KPX rcaron abreve -15 -KPX rcaron acircumflex -15 -KPX rcaron adieresis -15 -KPX rcaron agrave -15 -KPX rcaron amacron -15 -KPX rcaron aogonek -15 -KPX rcaron aring -15 -KPX rcaron atilde -15 -KPX rcaron c -37 -KPX rcaron cacute -37 -KPX rcaron ccaron -37 -KPX rcaron ccedilla -37 -KPX rcaron comma -111 -KPX rcaron d -37 -KPX rcaron dcroat -37 -KPX rcaron e -37 -KPX rcaron eacute -37 -KPX rcaron ecaron -37 -KPX rcaron ecircumflex -37 -KPX rcaron edieresis -37 -KPX rcaron edotaccent -37 -KPX rcaron egrave -37 -KPX rcaron emacron -37 -KPX rcaron eogonek -37 -KPX rcaron g -37 -KPX rcaron gbreve -37 -KPX rcaron gcommaaccent -37 -KPX rcaron hyphen -20 -KPX rcaron o -45 -KPX rcaron oacute -45 -KPX rcaron ocircumflex -45 -KPX rcaron odieresis -45 -KPX rcaron ograve -45 -KPX rcaron ohungarumlaut -45 -KPX rcaron omacron -45 -KPX rcaron oslash -45 -KPX rcaron otilde -45 -KPX rcaron period -111 -KPX rcaron q -37 -KPX rcaron s -10 -KPX rcaron sacute -10 -KPX rcaron scaron -10 -KPX rcaron scedilla -10 -KPX rcaron scommaaccent -10 -KPX rcommaaccent a -15 -KPX rcommaaccent aacute -15 -KPX rcommaaccent abreve -15 -KPX rcommaaccent acircumflex -15 -KPX rcommaaccent adieresis -15 -KPX rcommaaccent agrave -15 -KPX rcommaaccent amacron -15 -KPX rcommaaccent aogonek -15 -KPX rcommaaccent aring -15 -KPX rcommaaccent atilde -15 -KPX rcommaaccent c -37 -KPX rcommaaccent cacute -37 -KPX rcommaaccent ccaron -37 -KPX rcommaaccent ccedilla -37 -KPX rcommaaccent comma -111 -KPX rcommaaccent d -37 -KPX rcommaaccent dcroat -37 -KPX rcommaaccent e -37 -KPX rcommaaccent eacute -37 -KPX rcommaaccent ecaron -37 -KPX rcommaaccent ecircumflex -37 -KPX rcommaaccent edieresis -37 -KPX rcommaaccent edotaccent -37 -KPX rcommaaccent egrave -37 -KPX rcommaaccent emacron -37 -KPX rcommaaccent eogonek -37 -KPX rcommaaccent g -37 -KPX rcommaaccent gbreve -37 -KPX rcommaaccent gcommaaccent -37 -KPX rcommaaccent hyphen -20 -KPX rcommaaccent o -45 -KPX rcommaaccent oacute -45 -KPX rcommaaccent ocircumflex -45 -KPX rcommaaccent odieresis -45 -KPX rcommaaccent ograve -45 -KPX rcommaaccent ohungarumlaut -45 -KPX rcommaaccent omacron -45 -KPX rcommaaccent oslash -45 -KPX rcommaaccent otilde -45 -KPX rcommaaccent period -111 -KPX rcommaaccent q -37 -KPX rcommaaccent s -10 -KPX rcommaaccent sacute -10 -KPX rcommaaccent scaron -10 -KPX rcommaaccent scedilla -10 -KPX rcommaaccent scommaaccent -10 -KPX space A -18 -KPX space Aacute -18 -KPX space Abreve -18 -KPX space Acircumflex -18 -KPX space Adieresis -18 -KPX space Agrave -18 -KPX space Amacron -18 -KPX space Aogonek -18 -KPX space Aring -18 -KPX space Atilde -18 -KPX space T -18 -KPX space Tcaron -18 -KPX space Tcommaaccent -18 -KPX space V -35 -KPX space W -40 -KPX space Y -75 -KPX space Yacute -75 -KPX space Ydieresis -75 -KPX v comma -74 -KPX v period -74 -KPX w comma -74 -KPX w period -74 -KPX y comma -55 -KPX y period -55 -KPX yacute comma -55 -KPX yacute period -55 -KPX ydieresis comma -55 -KPX ydieresis period -55 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Roman.afm b/skills/flight-finder/node_modules/pdfkit/js/data/Times-Roman.afm deleted file mode 100644 index 2680669..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/Times-Roman.afm +++ /dev/null @@ -1,2419 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 12:49:17 1997 -Comment UniqueID 43068 -Comment VMusage 43909 54934 -FontName Times-Roman -FullName Times Roman -FamilyName Times -Weight Roman -ItalicAngle 0 -IsFixedPitch false -CharacterSet ExtendedRoman -FontBBox -168 -218 1000 898 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. -EncodingScheme AdobeStandardEncoding -CapHeight 662 -XHeight 450 -Ascender 683 -Descender -217 -StdHW 28 -StdVW 84 -StartCharMetrics 315 -C 32 ; WX 250 ; N space ; B 0 0 0 0 ; -C 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ; -C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ; -C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ; -C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ; -C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ; -C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ; -C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ; -C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ; -C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ; -C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ; -C 43 ; WX 564 ; N plus ; B 30 0 534 506 ; -C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ; -C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ; -C 46 ; WX 250 ; N period ; B 70 -11 181 100 ; -C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ; -C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ; -C 49 ; WX 500 ; N one ; B 111 0 394 676 ; -C 50 ; WX 500 ; N two ; B 30 0 475 676 ; -C 51 ; WX 500 ; N three ; B 43 -14 431 676 ; -C 52 ; WX 500 ; N four ; B 12 0 472 676 ; -C 53 ; WX 500 ; N five ; B 32 -14 438 688 ; -C 54 ; WX 500 ; N six ; B 34 -14 468 684 ; -C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ; -C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ; -C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ; -C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ; -C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ; -C 60 ; WX 564 ; N less ; B 28 -8 536 514 ; -C 61 ; WX 564 ; N equal ; B 30 120 534 386 ; -C 62 ; WX 564 ; N greater ; B 28 -8 536 514 ; -C 63 ; WX 444 ; N question ; B 68 -8 414 676 ; -C 64 ; WX 921 ; N at ; B 116 -14 809 676 ; -C 65 ; WX 722 ; N A ; B 15 0 706 674 ; -C 66 ; WX 667 ; N B ; B 17 0 593 662 ; -C 67 ; WX 667 ; N C ; B 28 -14 633 676 ; -C 68 ; WX 722 ; N D ; B 16 0 685 662 ; -C 69 ; WX 611 ; N E ; B 12 0 597 662 ; -C 70 ; WX 556 ; N F ; B 12 0 546 662 ; -C 71 ; WX 722 ; N G ; B 32 -14 709 676 ; -C 72 ; WX 722 ; N H ; B 19 0 702 662 ; -C 73 ; WX 333 ; N I ; B 18 0 315 662 ; -C 74 ; WX 389 ; N J ; B 10 -14 370 662 ; -C 75 ; WX 722 ; N K ; B 34 0 723 662 ; -C 76 ; WX 611 ; N L ; B 12 0 598 662 ; -C 77 ; WX 889 ; N M ; B 12 0 863 662 ; -C 78 ; WX 722 ; N N ; B 12 -11 707 662 ; -C 79 ; WX 722 ; N O ; B 34 -14 688 676 ; -C 80 ; WX 556 ; N P ; B 16 0 542 662 ; -C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ; -C 82 ; WX 667 ; N R ; B 17 0 659 662 ; -C 83 ; WX 556 ; N S ; B 42 -14 491 676 ; -C 84 ; WX 611 ; N T ; B 17 0 593 662 ; -C 85 ; WX 722 ; N U ; B 14 -14 705 662 ; -C 86 ; WX 722 ; N V ; B 16 -11 697 662 ; -C 87 ; WX 944 ; N W ; B 5 -11 932 662 ; -C 88 ; WX 722 ; N X ; B 10 0 704 662 ; -C 89 ; WX 722 ; N Y ; B 22 0 703 662 ; -C 90 ; WX 611 ; N Z ; B 9 0 597 662 ; -C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ; -C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ; -C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ; -C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ; -C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; -C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ; -C 97 ; WX 444 ; N a ; B 37 -10 442 460 ; -C 98 ; WX 500 ; N b ; B 3 -10 468 683 ; -C 99 ; WX 444 ; N c ; B 25 -10 412 460 ; -C 100 ; WX 500 ; N d ; B 27 -10 491 683 ; -C 101 ; WX 444 ; N e ; B 25 -10 424 460 ; -C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ; -C 103 ; WX 500 ; N g ; B 28 -218 470 460 ; -C 104 ; WX 500 ; N h ; B 9 0 487 683 ; -C 105 ; WX 278 ; N i ; B 16 0 253 683 ; -C 106 ; WX 278 ; N j ; B -70 -218 194 683 ; -C 107 ; WX 500 ; N k ; B 7 0 505 683 ; -C 108 ; WX 278 ; N l ; B 19 0 257 683 ; -C 109 ; WX 778 ; N m ; B 16 0 775 460 ; -C 110 ; WX 500 ; N n ; B 16 0 485 460 ; -C 111 ; WX 500 ; N o ; B 29 -10 470 460 ; -C 112 ; WX 500 ; N p ; B 5 -217 470 460 ; -C 113 ; WX 500 ; N q ; B 24 -217 488 460 ; -C 114 ; WX 333 ; N r ; B 5 0 335 460 ; -C 115 ; WX 389 ; N s ; B 51 -10 348 460 ; -C 116 ; WX 278 ; N t ; B 13 -10 279 579 ; -C 117 ; WX 500 ; N u ; B 9 -10 479 450 ; -C 118 ; WX 500 ; N v ; B 19 -14 477 450 ; -C 119 ; WX 722 ; N w ; B 21 -14 694 450 ; -C 120 ; WX 500 ; N x ; B 17 0 479 450 ; -C 121 ; WX 500 ; N y ; B 14 -218 475 450 ; -C 122 ; WX 444 ; N z ; B 27 0 418 450 ; -C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ; -C 124 ; WX 200 ; N bar ; B 67 -218 133 782 ; -C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ; -C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; -C 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ; -C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ; -C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ; -C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; -C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; -C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; -C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; -C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; -C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; -C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; -C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; -C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; -C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; -C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; -C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; -C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; -C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; -C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; -C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; -C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; -C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; -C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; -C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; -C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; -C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; -C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; -C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; -C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; -C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; -C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; -C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; -C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; -C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; -C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; -C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; -C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; -C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; -C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; -C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; -C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; -C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; -C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; -C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; -C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; -C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; -C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; -C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; -C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; -C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; -C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; -C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; -C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; -C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; -C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; -C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; -C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ; -C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ; -C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ; -C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ; -C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; -C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; -C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; -C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; -C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; -C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; -C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; -C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; -C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; -C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; -C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; -C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; -C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; -C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; -C -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ; -C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ; -C -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ; -C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ; -C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ; -C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ; -C -1 ; WX 444 ; N aring ; B 37 -10 442 711 ; -C -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ; -C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ; -C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ; -C -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ; -C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ; -C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; -C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; -C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; -C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; -C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ; -C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; -C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ; -C -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ; -C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; -C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ; -C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ; -C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ; -C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; -C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; -C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ; -C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ; -C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ; -C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ; -C -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ; -C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ; -C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ; -C -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; -C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; -C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; -C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; -C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; -C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ; -C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ; -C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; -C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; -C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; -C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; -C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; -C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; -C -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ; -C -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ; -C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ; -C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ; -C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ; -C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; -C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; -C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; -C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ; -C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ; -C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ; -C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; -C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ; -C -1 ; WX 333 ; N racute ; B 5 0 335 678 ; -C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ; -C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ; -C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; -C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; -C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; -C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ; -C -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ; -C -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ; -C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ; -C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ; -C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; -C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; -C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ; -C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ; -C -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ; -C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; -C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ; -C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ; -C -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ; -C -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; -C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; -C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; -C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; -C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; -C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; -C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; -C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; -C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ; -C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ; -C -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ; -C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ; -C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ; -C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ; -C -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ; -C -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ; -C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ; -C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; -C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; -C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ; -C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ; -C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ; -C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; -C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; -C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; -C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; -C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; -C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ; -C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ; -C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ; -C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; -C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ; -C -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ; -C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ; -C -1 ; WX 400 ; N degree ; B 57 390 343 676 ; -C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; -C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; -C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ; -C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; -C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ; -C -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ; -C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; -C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ; -C -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ; -C -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ; -C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; -C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; -C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; -C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ; -C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ; -C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ; -C -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ; -C -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ; -C -1 ; WX 564 ; N minus ; B 30 220 534 286 ; -C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ; -C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ; -C -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ; -C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; -C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; -C -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ; -C -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ; -C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ; -C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; -C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; -C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; -C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; -C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; -C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; -EndCharMetrics -StartKernData -StartKernPairs 2073 -KPX A C -40 -KPX A Cacute -40 -KPX A Ccaron -40 -KPX A Ccedilla -40 -KPX A G -40 -KPX A Gbreve -40 -KPX A Gcommaaccent -40 -KPX A O -55 -KPX A Oacute -55 -KPX A Ocircumflex -55 -KPX A Odieresis -55 -KPX A Ograve -55 -KPX A Ohungarumlaut -55 -KPX A Omacron -55 -KPX A Oslash -55 -KPX A Otilde -55 -KPX A Q -55 -KPX A T -111 -KPX A Tcaron -111 -KPX A Tcommaaccent -111 -KPX A U -55 -KPX A Uacute -55 -KPX A Ucircumflex -55 -KPX A Udieresis -55 -KPX A Ugrave -55 -KPX A Uhungarumlaut -55 -KPX A Umacron -55 -KPX A Uogonek -55 -KPX A Uring -55 -KPX A V -135 -KPX A W -90 -KPX A Y -105 -KPX A Yacute -105 -KPX A Ydieresis -105 -KPX A quoteright -111 -KPX A v -74 -KPX A w -92 -KPX A y -92 -KPX A yacute -92 -KPX A ydieresis -92 -KPX Aacute C -40 -KPX Aacute Cacute -40 -KPX Aacute Ccaron -40 -KPX Aacute Ccedilla -40 -KPX Aacute G -40 -KPX Aacute Gbreve -40 -KPX Aacute Gcommaaccent -40 -KPX Aacute O -55 -KPX Aacute Oacute -55 -KPX Aacute Ocircumflex -55 -KPX Aacute Odieresis -55 -KPX Aacute Ograve -55 -KPX Aacute Ohungarumlaut -55 -KPX Aacute Omacron -55 -KPX Aacute Oslash -55 -KPX Aacute Otilde -55 -KPX Aacute Q -55 -KPX Aacute T -111 -KPX Aacute Tcaron -111 -KPX Aacute Tcommaaccent -111 -KPX Aacute U -55 -KPX Aacute Uacute -55 -KPX Aacute Ucircumflex -55 -KPX Aacute Udieresis -55 -KPX Aacute Ugrave -55 -KPX Aacute Uhungarumlaut -55 -KPX Aacute Umacron -55 -KPX Aacute Uogonek -55 -KPX Aacute Uring -55 -KPX Aacute V -135 -KPX Aacute W -90 -KPX Aacute Y -105 -KPX Aacute Yacute -105 -KPX Aacute Ydieresis -105 -KPX Aacute quoteright -111 -KPX Aacute v -74 -KPX Aacute w -92 -KPX Aacute y -92 -KPX Aacute yacute -92 -KPX Aacute ydieresis -92 -KPX Abreve C -40 -KPX Abreve Cacute -40 -KPX Abreve Ccaron -40 -KPX Abreve Ccedilla -40 -KPX Abreve G -40 -KPX Abreve Gbreve -40 -KPX Abreve Gcommaaccent -40 -KPX Abreve O -55 -KPX Abreve Oacute -55 -KPX Abreve Ocircumflex -55 -KPX Abreve Odieresis -55 -KPX Abreve Ograve -55 -KPX Abreve Ohungarumlaut -55 -KPX Abreve Omacron -55 -KPX Abreve Oslash -55 -KPX Abreve Otilde -55 -KPX Abreve Q -55 -KPX Abreve T -111 -KPX Abreve Tcaron -111 -KPX Abreve Tcommaaccent -111 -KPX Abreve U -55 -KPX Abreve Uacute -55 -KPX Abreve Ucircumflex -55 -KPX Abreve Udieresis -55 -KPX Abreve Ugrave -55 -KPX Abreve Uhungarumlaut -55 -KPX Abreve Umacron -55 -KPX Abreve Uogonek -55 -KPX Abreve Uring -55 -KPX Abreve V -135 -KPX Abreve W -90 -KPX Abreve Y -105 -KPX Abreve Yacute -105 -KPX Abreve Ydieresis -105 -KPX Abreve quoteright -111 -KPX Abreve v -74 -KPX Abreve w -92 -KPX Abreve y -92 -KPX Abreve yacute -92 -KPX Abreve ydieresis -92 -KPX Acircumflex C -40 -KPX Acircumflex Cacute -40 -KPX Acircumflex Ccaron -40 -KPX Acircumflex Ccedilla -40 -KPX Acircumflex G -40 -KPX Acircumflex Gbreve -40 -KPX Acircumflex Gcommaaccent -40 -KPX Acircumflex O -55 -KPX Acircumflex Oacute -55 -KPX Acircumflex Ocircumflex -55 -KPX Acircumflex Odieresis -55 -KPX Acircumflex Ograve -55 -KPX Acircumflex Ohungarumlaut -55 -KPX Acircumflex Omacron -55 -KPX Acircumflex Oslash -55 -KPX Acircumflex Otilde -55 -KPX Acircumflex Q -55 -KPX Acircumflex T -111 -KPX Acircumflex Tcaron -111 -KPX Acircumflex Tcommaaccent -111 -KPX Acircumflex U -55 -KPX Acircumflex Uacute -55 -KPX Acircumflex Ucircumflex -55 -KPX Acircumflex Udieresis -55 -KPX Acircumflex Ugrave -55 -KPX Acircumflex Uhungarumlaut -55 -KPX Acircumflex Umacron -55 -KPX Acircumflex Uogonek -55 -KPX Acircumflex Uring -55 -KPX Acircumflex V -135 -KPX Acircumflex W -90 -KPX Acircumflex Y -105 -KPX Acircumflex Yacute -105 -KPX Acircumflex Ydieresis -105 -KPX Acircumflex quoteright -111 -KPX Acircumflex v -74 -KPX Acircumflex w -92 -KPX Acircumflex y -92 -KPX Acircumflex yacute -92 -KPX Acircumflex ydieresis -92 -KPX Adieresis C -40 -KPX Adieresis Cacute -40 -KPX Adieresis Ccaron -40 -KPX Adieresis Ccedilla -40 -KPX Adieresis G -40 -KPX Adieresis Gbreve -40 -KPX Adieresis Gcommaaccent -40 -KPX Adieresis O -55 -KPX Adieresis Oacute -55 -KPX Adieresis Ocircumflex -55 -KPX Adieresis Odieresis -55 -KPX Adieresis Ograve -55 -KPX Adieresis Ohungarumlaut -55 -KPX Adieresis Omacron -55 -KPX Adieresis Oslash -55 -KPX Adieresis Otilde -55 -KPX Adieresis Q -55 -KPX Adieresis T -111 -KPX Adieresis Tcaron -111 -KPX Adieresis Tcommaaccent -111 -KPX Adieresis U -55 -KPX Adieresis Uacute -55 -KPX Adieresis Ucircumflex -55 -KPX Adieresis Udieresis -55 -KPX Adieresis Ugrave -55 -KPX Adieresis Uhungarumlaut -55 -KPX Adieresis Umacron -55 -KPX Adieresis Uogonek -55 -KPX Adieresis Uring -55 -KPX Adieresis V -135 -KPX Adieresis W -90 -KPX Adieresis Y -105 -KPX Adieresis Yacute -105 -KPX Adieresis Ydieresis -105 -KPX Adieresis quoteright -111 -KPX Adieresis v -74 -KPX Adieresis w -92 -KPX Adieresis y -92 -KPX Adieresis yacute -92 -KPX Adieresis ydieresis -92 -KPX Agrave C -40 -KPX Agrave Cacute -40 -KPX Agrave Ccaron -40 -KPX Agrave Ccedilla -40 -KPX Agrave G -40 -KPX Agrave Gbreve -40 -KPX Agrave Gcommaaccent -40 -KPX Agrave O -55 -KPX Agrave Oacute -55 -KPX Agrave Ocircumflex -55 -KPX Agrave Odieresis -55 -KPX Agrave Ograve -55 -KPX Agrave Ohungarumlaut -55 -KPX Agrave Omacron -55 -KPX Agrave Oslash -55 -KPX Agrave Otilde -55 -KPX Agrave Q -55 -KPX Agrave T -111 -KPX Agrave Tcaron -111 -KPX Agrave Tcommaaccent -111 -KPX Agrave U -55 -KPX Agrave Uacute -55 -KPX Agrave Ucircumflex -55 -KPX Agrave Udieresis -55 -KPX Agrave Ugrave -55 -KPX Agrave Uhungarumlaut -55 -KPX Agrave Umacron -55 -KPX Agrave Uogonek -55 -KPX Agrave Uring -55 -KPX Agrave V -135 -KPX Agrave W -90 -KPX Agrave Y -105 -KPX Agrave Yacute -105 -KPX Agrave Ydieresis -105 -KPX Agrave quoteright -111 -KPX Agrave v -74 -KPX Agrave w -92 -KPX Agrave y -92 -KPX Agrave yacute -92 -KPX Agrave ydieresis -92 -KPX Amacron C -40 -KPX Amacron Cacute -40 -KPX Amacron Ccaron -40 -KPX Amacron Ccedilla -40 -KPX Amacron G -40 -KPX Amacron Gbreve -40 -KPX Amacron Gcommaaccent -40 -KPX Amacron O -55 -KPX Amacron Oacute -55 -KPX Amacron Ocircumflex -55 -KPX Amacron Odieresis -55 -KPX Amacron Ograve -55 -KPX Amacron Ohungarumlaut -55 -KPX Amacron Omacron -55 -KPX Amacron Oslash -55 -KPX Amacron Otilde -55 -KPX Amacron Q -55 -KPX Amacron T -111 -KPX Amacron Tcaron -111 -KPX Amacron Tcommaaccent -111 -KPX Amacron U -55 -KPX Amacron Uacute -55 -KPX Amacron Ucircumflex -55 -KPX Amacron Udieresis -55 -KPX Amacron Ugrave -55 -KPX Amacron Uhungarumlaut -55 -KPX Amacron Umacron -55 -KPX Amacron Uogonek -55 -KPX Amacron Uring -55 -KPX Amacron V -135 -KPX Amacron W -90 -KPX Amacron Y -105 -KPX Amacron Yacute -105 -KPX Amacron Ydieresis -105 -KPX Amacron quoteright -111 -KPX Amacron v -74 -KPX Amacron w -92 -KPX Amacron y -92 -KPX Amacron yacute -92 -KPX Amacron ydieresis -92 -KPX Aogonek C -40 -KPX Aogonek Cacute -40 -KPX Aogonek Ccaron -40 -KPX Aogonek Ccedilla -40 -KPX Aogonek G -40 -KPX Aogonek Gbreve -40 -KPX Aogonek Gcommaaccent -40 -KPX Aogonek O -55 -KPX Aogonek Oacute -55 -KPX Aogonek Ocircumflex -55 -KPX Aogonek Odieresis -55 -KPX Aogonek Ograve -55 -KPX Aogonek Ohungarumlaut -55 -KPX Aogonek Omacron -55 -KPX Aogonek Oslash -55 -KPX Aogonek Otilde -55 -KPX Aogonek Q -55 -KPX Aogonek T -111 -KPX Aogonek Tcaron -111 -KPX Aogonek Tcommaaccent -111 -KPX Aogonek U -55 -KPX Aogonek Uacute -55 -KPX Aogonek Ucircumflex -55 -KPX Aogonek Udieresis -55 -KPX Aogonek Ugrave -55 -KPX Aogonek Uhungarumlaut -55 -KPX Aogonek Umacron -55 -KPX Aogonek Uogonek -55 -KPX Aogonek Uring -55 -KPX Aogonek V -135 -KPX Aogonek W -90 -KPX Aogonek Y -105 -KPX Aogonek Yacute -105 -KPX Aogonek Ydieresis -105 -KPX Aogonek quoteright -111 -KPX Aogonek v -74 -KPX Aogonek w -52 -KPX Aogonek y -52 -KPX Aogonek yacute -52 -KPX Aogonek ydieresis -52 -KPX Aring C -40 -KPX Aring Cacute -40 -KPX Aring Ccaron -40 -KPX Aring Ccedilla -40 -KPX Aring G -40 -KPX Aring Gbreve -40 -KPX Aring Gcommaaccent -40 -KPX Aring O -55 -KPX Aring Oacute -55 -KPX Aring Ocircumflex -55 -KPX Aring Odieresis -55 -KPX Aring Ograve -55 -KPX Aring Ohungarumlaut -55 -KPX Aring Omacron -55 -KPX Aring Oslash -55 -KPX Aring Otilde -55 -KPX Aring Q -55 -KPX Aring T -111 -KPX Aring Tcaron -111 -KPX Aring Tcommaaccent -111 -KPX Aring U -55 -KPX Aring Uacute -55 -KPX Aring Ucircumflex -55 -KPX Aring Udieresis -55 -KPX Aring Ugrave -55 -KPX Aring Uhungarumlaut -55 -KPX Aring Umacron -55 -KPX Aring Uogonek -55 -KPX Aring Uring -55 -KPX Aring V -135 -KPX Aring W -90 -KPX Aring Y -105 -KPX Aring Yacute -105 -KPX Aring Ydieresis -105 -KPX Aring quoteright -111 -KPX Aring v -74 -KPX Aring w -92 -KPX Aring y -92 -KPX Aring yacute -92 -KPX Aring ydieresis -92 -KPX Atilde C -40 -KPX Atilde Cacute -40 -KPX Atilde Ccaron -40 -KPX Atilde Ccedilla -40 -KPX Atilde G -40 -KPX Atilde Gbreve -40 -KPX Atilde Gcommaaccent -40 -KPX Atilde O -55 -KPX Atilde Oacute -55 -KPX Atilde Ocircumflex -55 -KPX Atilde Odieresis -55 -KPX Atilde Ograve -55 -KPX Atilde Ohungarumlaut -55 -KPX Atilde Omacron -55 -KPX Atilde Oslash -55 -KPX Atilde Otilde -55 -KPX Atilde Q -55 -KPX Atilde T -111 -KPX Atilde Tcaron -111 -KPX Atilde Tcommaaccent -111 -KPX Atilde U -55 -KPX Atilde Uacute -55 -KPX Atilde Ucircumflex -55 -KPX Atilde Udieresis -55 -KPX Atilde Ugrave -55 -KPX Atilde Uhungarumlaut -55 -KPX Atilde Umacron -55 -KPX Atilde Uogonek -55 -KPX Atilde Uring -55 -KPX Atilde V -135 -KPX Atilde W -90 -KPX Atilde Y -105 -KPX Atilde Yacute -105 -KPX Atilde Ydieresis -105 -KPX Atilde quoteright -111 -KPX Atilde v -74 -KPX Atilde w -92 -KPX Atilde y -92 -KPX Atilde yacute -92 -KPX Atilde ydieresis -92 -KPX B A -35 -KPX B Aacute -35 -KPX B Abreve -35 -KPX B Acircumflex -35 -KPX B Adieresis -35 -KPX B Agrave -35 -KPX B Amacron -35 -KPX B Aogonek -35 -KPX B Aring -35 -KPX B Atilde -35 -KPX B U -10 -KPX B Uacute -10 -KPX B Ucircumflex -10 -KPX B Udieresis -10 -KPX B Ugrave -10 -KPX B Uhungarumlaut -10 -KPX B Umacron -10 -KPX B Uogonek -10 -KPX B Uring -10 -KPX D A -40 -KPX D Aacute -40 -KPX D Abreve -40 -KPX D Acircumflex -40 -KPX D Adieresis -40 -KPX D Agrave -40 -KPX D Amacron -40 -KPX D Aogonek -40 -KPX D Aring -40 -KPX D Atilde -40 -KPX D V -40 -KPX D W -30 -KPX D Y -55 -KPX D Yacute -55 -KPX D Ydieresis -55 -KPX Dcaron A -40 -KPX Dcaron Aacute -40 -KPX Dcaron Abreve -40 -KPX Dcaron Acircumflex -40 -KPX Dcaron Adieresis -40 -KPX Dcaron Agrave -40 -KPX Dcaron Amacron -40 -KPX Dcaron Aogonek -40 -KPX Dcaron Aring -40 -KPX Dcaron Atilde -40 -KPX Dcaron V -40 -KPX Dcaron W -30 -KPX Dcaron Y -55 -KPX Dcaron Yacute -55 -KPX Dcaron Ydieresis -55 -KPX Dcroat A -40 -KPX Dcroat Aacute -40 -KPX Dcroat Abreve -40 -KPX Dcroat Acircumflex -40 -KPX Dcroat Adieresis -40 -KPX Dcroat Agrave -40 -KPX Dcroat Amacron -40 -KPX Dcroat Aogonek -40 -KPX Dcroat Aring -40 -KPX Dcroat Atilde -40 -KPX Dcroat V -40 -KPX Dcroat W -30 -KPX Dcroat Y -55 -KPX Dcroat Yacute -55 -KPX Dcroat Ydieresis -55 -KPX F A -74 -KPX F Aacute -74 -KPX F Abreve -74 -KPX F Acircumflex -74 -KPX F Adieresis -74 -KPX F Agrave -74 -KPX F Amacron -74 -KPX F Aogonek -74 -KPX F Aring -74 -KPX F Atilde -74 -KPX F a -15 -KPX F aacute -15 -KPX F abreve -15 -KPX F acircumflex -15 -KPX F adieresis -15 -KPX F agrave -15 -KPX F amacron -15 -KPX F aogonek -15 -KPX F aring -15 -KPX F atilde -15 -KPX F comma -80 -KPX F o -15 -KPX F oacute -15 -KPX F ocircumflex -15 -KPX F odieresis -15 -KPX F ograve -15 -KPX F ohungarumlaut -15 -KPX F omacron -15 -KPX F oslash -15 -KPX F otilde -15 -KPX F period -80 -KPX J A -60 -KPX J Aacute -60 -KPX J Abreve -60 -KPX J Acircumflex -60 -KPX J Adieresis -60 -KPX J Agrave -60 -KPX J Amacron -60 -KPX J Aogonek -60 -KPX J Aring -60 -KPX J Atilde -60 -KPX K O -30 -KPX K Oacute -30 -KPX K Ocircumflex -30 -KPX K Odieresis -30 -KPX K Ograve -30 -KPX K Ohungarumlaut -30 -KPX K Omacron -30 -KPX K Oslash -30 -KPX K Otilde -30 -KPX K e -25 -KPX K eacute -25 -KPX K ecaron -25 -KPX K ecircumflex -25 -KPX K edieresis -25 -KPX K edotaccent -25 -KPX K egrave -25 -KPX K emacron -25 -KPX K eogonek -25 -KPX K o -35 -KPX K oacute -35 -KPX K ocircumflex -35 -KPX K odieresis -35 -KPX K ograve -35 -KPX K ohungarumlaut -35 -KPX K omacron -35 -KPX K oslash -35 -KPX K otilde -35 -KPX K u -15 -KPX K uacute -15 -KPX K ucircumflex -15 -KPX K udieresis -15 -KPX K ugrave -15 -KPX K uhungarumlaut -15 -KPX K umacron -15 -KPX K uogonek -15 -KPX K uring -15 -KPX K y -25 -KPX K yacute -25 -KPX K ydieresis -25 -KPX Kcommaaccent O -30 -KPX Kcommaaccent Oacute -30 -KPX Kcommaaccent Ocircumflex -30 -KPX Kcommaaccent Odieresis -30 -KPX Kcommaaccent Ograve -30 -KPX Kcommaaccent Ohungarumlaut -30 -KPX Kcommaaccent Omacron -30 -KPX Kcommaaccent Oslash -30 -KPX Kcommaaccent Otilde -30 -KPX Kcommaaccent e -25 -KPX Kcommaaccent eacute -25 -KPX Kcommaaccent ecaron -25 -KPX Kcommaaccent ecircumflex -25 -KPX Kcommaaccent edieresis -25 -KPX Kcommaaccent edotaccent -25 -KPX Kcommaaccent egrave -25 -KPX Kcommaaccent emacron -25 -KPX Kcommaaccent eogonek -25 -KPX Kcommaaccent o -35 -KPX Kcommaaccent oacute -35 -KPX Kcommaaccent ocircumflex -35 -KPX Kcommaaccent odieresis -35 -KPX Kcommaaccent ograve -35 -KPX Kcommaaccent ohungarumlaut -35 -KPX Kcommaaccent omacron -35 -KPX Kcommaaccent oslash -35 -KPX Kcommaaccent otilde -35 -KPX Kcommaaccent u -15 -KPX Kcommaaccent uacute -15 -KPX Kcommaaccent ucircumflex -15 -KPX Kcommaaccent udieresis -15 -KPX Kcommaaccent ugrave -15 -KPX Kcommaaccent uhungarumlaut -15 -KPX Kcommaaccent umacron -15 -KPX Kcommaaccent uogonek -15 -KPX Kcommaaccent uring -15 -KPX Kcommaaccent y -25 -KPX Kcommaaccent yacute -25 -KPX Kcommaaccent ydieresis -25 -KPX L T -92 -KPX L Tcaron -92 -KPX L Tcommaaccent -92 -KPX L V -100 -KPX L W -74 -KPX L Y -100 -KPX L Yacute -100 -KPX L Ydieresis -100 -KPX L quoteright -92 -KPX L y -55 -KPX L yacute -55 -KPX L ydieresis -55 -KPX Lacute T -92 -KPX Lacute Tcaron -92 -KPX Lacute Tcommaaccent -92 -KPX Lacute V -100 -KPX Lacute W -74 -KPX Lacute Y -100 -KPX Lacute Yacute -100 -KPX Lacute Ydieresis -100 -KPX Lacute quoteright -92 -KPX Lacute y -55 -KPX Lacute yacute -55 -KPX Lacute ydieresis -55 -KPX Lcaron quoteright -92 -KPX Lcaron y -55 -KPX Lcaron yacute -55 -KPX Lcaron ydieresis -55 -KPX Lcommaaccent T -92 -KPX Lcommaaccent Tcaron -92 -KPX Lcommaaccent Tcommaaccent -92 -KPX Lcommaaccent V -100 -KPX Lcommaaccent W -74 -KPX Lcommaaccent Y -100 -KPX Lcommaaccent Yacute -100 -KPX Lcommaaccent Ydieresis -100 -KPX Lcommaaccent quoteright -92 -KPX Lcommaaccent y -55 -KPX Lcommaaccent yacute -55 -KPX Lcommaaccent ydieresis -55 -KPX Lslash T -92 -KPX Lslash Tcaron -92 -KPX Lslash Tcommaaccent -92 -KPX Lslash V -100 -KPX Lslash W -74 -KPX Lslash Y -100 -KPX Lslash Yacute -100 -KPX Lslash Ydieresis -100 -KPX Lslash quoteright -92 -KPX Lslash y -55 -KPX Lslash yacute -55 -KPX Lslash ydieresis -55 -KPX N A -35 -KPX N Aacute -35 -KPX N Abreve -35 -KPX N Acircumflex -35 -KPX N Adieresis -35 -KPX N Agrave -35 -KPX N Amacron -35 -KPX N Aogonek -35 -KPX N Aring -35 -KPX N Atilde -35 -KPX Nacute A -35 -KPX Nacute Aacute -35 -KPX Nacute Abreve -35 -KPX Nacute Acircumflex -35 -KPX Nacute Adieresis -35 -KPX Nacute Agrave -35 -KPX Nacute Amacron -35 -KPX Nacute Aogonek -35 -KPX Nacute Aring -35 -KPX Nacute Atilde -35 -KPX Ncaron A -35 -KPX Ncaron Aacute -35 -KPX Ncaron Abreve -35 -KPX Ncaron Acircumflex -35 -KPX Ncaron Adieresis -35 -KPX Ncaron Agrave -35 -KPX Ncaron Amacron -35 -KPX Ncaron Aogonek -35 -KPX Ncaron Aring -35 -KPX Ncaron Atilde -35 -KPX Ncommaaccent A -35 -KPX Ncommaaccent Aacute -35 -KPX Ncommaaccent Abreve -35 -KPX Ncommaaccent Acircumflex -35 -KPX Ncommaaccent Adieresis -35 -KPX Ncommaaccent Agrave -35 -KPX Ncommaaccent Amacron -35 -KPX Ncommaaccent Aogonek -35 -KPX Ncommaaccent Aring -35 -KPX Ncommaaccent Atilde -35 -KPX Ntilde A -35 -KPX Ntilde Aacute -35 -KPX Ntilde Abreve -35 -KPX Ntilde Acircumflex -35 -KPX Ntilde Adieresis -35 -KPX Ntilde Agrave -35 -KPX Ntilde Amacron -35 -KPX Ntilde Aogonek -35 -KPX Ntilde Aring -35 -KPX Ntilde Atilde -35 -KPX O A -35 -KPX O Aacute -35 -KPX O Abreve -35 -KPX O Acircumflex -35 -KPX O Adieresis -35 -KPX O Agrave -35 -KPX O Amacron -35 -KPX O Aogonek -35 -KPX O Aring -35 -KPX O Atilde -35 -KPX O T -40 -KPX O Tcaron -40 -KPX O Tcommaaccent -40 -KPX O V -50 -KPX O W -35 -KPX O X -40 -KPX O Y -50 -KPX O Yacute -50 -KPX O Ydieresis -50 -KPX Oacute A -35 -KPX Oacute Aacute -35 -KPX Oacute Abreve -35 -KPX Oacute Acircumflex -35 -KPX Oacute Adieresis -35 -KPX Oacute Agrave -35 -KPX Oacute Amacron -35 -KPX Oacute Aogonek -35 -KPX Oacute Aring -35 -KPX Oacute Atilde -35 -KPX Oacute T -40 -KPX Oacute Tcaron -40 -KPX Oacute Tcommaaccent -40 -KPX Oacute V -50 -KPX Oacute W -35 -KPX Oacute X -40 -KPX Oacute Y -50 -KPX Oacute Yacute -50 -KPX Oacute Ydieresis -50 -KPX Ocircumflex A -35 -KPX Ocircumflex Aacute -35 -KPX Ocircumflex Abreve -35 -KPX Ocircumflex Acircumflex -35 -KPX Ocircumflex Adieresis -35 -KPX Ocircumflex Agrave -35 -KPX Ocircumflex Amacron -35 -KPX Ocircumflex Aogonek -35 -KPX Ocircumflex Aring -35 -KPX Ocircumflex Atilde -35 -KPX Ocircumflex T -40 -KPX Ocircumflex Tcaron -40 -KPX Ocircumflex Tcommaaccent -40 -KPX Ocircumflex V -50 -KPX Ocircumflex W -35 -KPX Ocircumflex X -40 -KPX Ocircumflex Y -50 -KPX Ocircumflex Yacute -50 -KPX Ocircumflex Ydieresis -50 -KPX Odieresis A -35 -KPX Odieresis Aacute -35 -KPX Odieresis Abreve -35 -KPX Odieresis Acircumflex -35 -KPX Odieresis Adieresis -35 -KPX Odieresis Agrave -35 -KPX Odieresis Amacron -35 -KPX Odieresis Aogonek -35 -KPX Odieresis Aring -35 -KPX Odieresis Atilde -35 -KPX Odieresis T -40 -KPX Odieresis Tcaron -40 -KPX Odieresis Tcommaaccent -40 -KPX Odieresis V -50 -KPX Odieresis W -35 -KPX Odieresis X -40 -KPX Odieresis Y -50 -KPX Odieresis Yacute -50 -KPX Odieresis Ydieresis -50 -KPX Ograve A -35 -KPX Ograve Aacute -35 -KPX Ograve Abreve -35 -KPX Ograve Acircumflex -35 -KPX Ograve Adieresis -35 -KPX Ograve Agrave -35 -KPX Ograve Amacron -35 -KPX Ograve Aogonek -35 -KPX Ograve Aring -35 -KPX Ograve Atilde -35 -KPX Ograve T -40 -KPX Ograve Tcaron -40 -KPX Ograve Tcommaaccent -40 -KPX Ograve V -50 -KPX Ograve W -35 -KPX Ograve X -40 -KPX Ograve Y -50 -KPX Ograve Yacute -50 -KPX Ograve Ydieresis -50 -KPX Ohungarumlaut A -35 -KPX Ohungarumlaut Aacute -35 -KPX Ohungarumlaut Abreve -35 -KPX Ohungarumlaut Acircumflex -35 -KPX Ohungarumlaut Adieresis -35 -KPX Ohungarumlaut Agrave -35 -KPX Ohungarumlaut Amacron -35 -KPX Ohungarumlaut Aogonek -35 -KPX Ohungarumlaut Aring -35 -KPX Ohungarumlaut Atilde -35 -KPX Ohungarumlaut T -40 -KPX Ohungarumlaut Tcaron -40 -KPX Ohungarumlaut Tcommaaccent -40 -KPX Ohungarumlaut V -50 -KPX Ohungarumlaut W -35 -KPX Ohungarumlaut X -40 -KPX Ohungarumlaut Y -50 -KPX Ohungarumlaut Yacute -50 -KPX Ohungarumlaut Ydieresis -50 -KPX Omacron A -35 -KPX Omacron Aacute -35 -KPX Omacron Abreve -35 -KPX Omacron Acircumflex -35 -KPX Omacron Adieresis -35 -KPX Omacron Agrave -35 -KPX Omacron Amacron -35 -KPX Omacron Aogonek -35 -KPX Omacron Aring -35 -KPX Omacron Atilde -35 -KPX Omacron T -40 -KPX Omacron Tcaron -40 -KPX Omacron Tcommaaccent -40 -KPX Omacron V -50 -KPX Omacron W -35 -KPX Omacron X -40 -KPX Omacron Y -50 -KPX Omacron Yacute -50 -KPX Omacron Ydieresis -50 -KPX Oslash A -35 -KPX Oslash Aacute -35 -KPX Oslash Abreve -35 -KPX Oslash Acircumflex -35 -KPX Oslash Adieresis -35 -KPX Oslash Agrave -35 -KPX Oslash Amacron -35 -KPX Oslash Aogonek -35 -KPX Oslash Aring -35 -KPX Oslash Atilde -35 -KPX Oslash T -40 -KPX Oslash Tcaron -40 -KPX Oslash Tcommaaccent -40 -KPX Oslash V -50 -KPX Oslash W -35 -KPX Oslash X -40 -KPX Oslash Y -50 -KPX Oslash Yacute -50 -KPX Oslash Ydieresis -50 -KPX Otilde A -35 -KPX Otilde Aacute -35 -KPX Otilde Abreve -35 -KPX Otilde Acircumflex -35 -KPX Otilde Adieresis -35 -KPX Otilde Agrave -35 -KPX Otilde Amacron -35 -KPX Otilde Aogonek -35 -KPX Otilde Aring -35 -KPX Otilde Atilde -35 -KPX Otilde T -40 -KPX Otilde Tcaron -40 -KPX Otilde Tcommaaccent -40 -KPX Otilde V -50 -KPX Otilde W -35 -KPX Otilde X -40 -KPX Otilde Y -50 -KPX Otilde Yacute -50 -KPX Otilde Ydieresis -50 -KPX P A -92 -KPX P Aacute -92 -KPX P Abreve -92 -KPX P Acircumflex -92 -KPX P Adieresis -92 -KPX P Agrave -92 -KPX P Amacron -92 -KPX P Aogonek -92 -KPX P Aring -92 -KPX P Atilde -92 -KPX P a -15 -KPX P aacute -15 -KPX P abreve -15 -KPX P acircumflex -15 -KPX P adieresis -15 -KPX P agrave -15 -KPX P amacron -15 -KPX P aogonek -15 -KPX P aring -15 -KPX P atilde -15 -KPX P comma -111 -KPX P period -111 -KPX Q U -10 -KPX Q Uacute -10 -KPX Q Ucircumflex -10 -KPX Q Udieresis -10 -KPX Q Ugrave -10 -KPX Q Uhungarumlaut -10 -KPX Q Umacron -10 -KPX Q Uogonek -10 -KPX Q Uring -10 -KPX R O -40 -KPX R Oacute -40 -KPX R Ocircumflex -40 -KPX R Odieresis -40 -KPX R Ograve -40 -KPX R Ohungarumlaut -40 -KPX R Omacron -40 -KPX R Oslash -40 -KPX R Otilde -40 -KPX R T -60 -KPX R Tcaron -60 -KPX R Tcommaaccent -60 -KPX R U -40 -KPX R Uacute -40 -KPX R Ucircumflex -40 -KPX R Udieresis -40 -KPX R Ugrave -40 -KPX R Uhungarumlaut -40 -KPX R Umacron -40 -KPX R Uogonek -40 -KPX R Uring -40 -KPX R V -80 -KPX R W -55 -KPX R Y -65 -KPX R Yacute -65 -KPX R Ydieresis -65 -KPX Racute O -40 -KPX Racute Oacute -40 -KPX Racute Ocircumflex -40 -KPX Racute Odieresis -40 -KPX Racute Ograve -40 -KPX Racute Ohungarumlaut -40 -KPX Racute Omacron -40 -KPX Racute Oslash -40 -KPX Racute Otilde -40 -KPX Racute T -60 -KPX Racute Tcaron -60 -KPX Racute Tcommaaccent -60 -KPX Racute U -40 -KPX Racute Uacute -40 -KPX Racute Ucircumflex -40 -KPX Racute Udieresis -40 -KPX Racute Ugrave -40 -KPX Racute Uhungarumlaut -40 -KPX Racute Umacron -40 -KPX Racute Uogonek -40 -KPX Racute Uring -40 -KPX Racute V -80 -KPX Racute W -55 -KPX Racute Y -65 -KPX Racute Yacute -65 -KPX Racute Ydieresis -65 -KPX Rcaron O -40 -KPX Rcaron Oacute -40 -KPX Rcaron Ocircumflex -40 -KPX Rcaron Odieresis -40 -KPX Rcaron Ograve -40 -KPX Rcaron Ohungarumlaut -40 -KPX Rcaron Omacron -40 -KPX Rcaron Oslash -40 -KPX Rcaron Otilde -40 -KPX Rcaron T -60 -KPX Rcaron Tcaron -60 -KPX Rcaron Tcommaaccent -60 -KPX Rcaron U -40 -KPX Rcaron Uacute -40 -KPX Rcaron Ucircumflex -40 -KPX Rcaron Udieresis -40 -KPX Rcaron Ugrave -40 -KPX Rcaron Uhungarumlaut -40 -KPX Rcaron Umacron -40 -KPX Rcaron Uogonek -40 -KPX Rcaron Uring -40 -KPX Rcaron V -80 -KPX Rcaron W -55 -KPX Rcaron Y -65 -KPX Rcaron Yacute -65 -KPX Rcaron Ydieresis -65 -KPX Rcommaaccent O -40 -KPX Rcommaaccent Oacute -40 -KPX Rcommaaccent Ocircumflex -40 -KPX Rcommaaccent Odieresis -40 -KPX Rcommaaccent Ograve -40 -KPX Rcommaaccent Ohungarumlaut -40 -KPX Rcommaaccent Omacron -40 -KPX Rcommaaccent Oslash -40 -KPX Rcommaaccent Otilde -40 -KPX Rcommaaccent T -60 -KPX Rcommaaccent Tcaron -60 -KPX Rcommaaccent Tcommaaccent -60 -KPX Rcommaaccent U -40 -KPX Rcommaaccent Uacute -40 -KPX Rcommaaccent Ucircumflex -40 -KPX Rcommaaccent Udieresis -40 -KPX Rcommaaccent Ugrave -40 -KPX Rcommaaccent Uhungarumlaut -40 -KPX Rcommaaccent Umacron -40 -KPX Rcommaaccent Uogonek -40 -KPX Rcommaaccent Uring -40 -KPX Rcommaaccent V -80 -KPX Rcommaaccent W -55 -KPX Rcommaaccent Y -65 -KPX Rcommaaccent Yacute -65 -KPX Rcommaaccent Ydieresis -65 -KPX T A -93 -KPX T Aacute -93 -KPX T Abreve -93 -KPX T Acircumflex -93 -KPX T Adieresis -93 -KPX T Agrave -93 -KPX T Amacron -93 -KPX T Aogonek -93 -KPX T Aring -93 -KPX T Atilde -93 -KPX T O -18 -KPX T Oacute -18 -KPX T Ocircumflex -18 -KPX T Odieresis -18 -KPX T Ograve -18 -KPX T Ohungarumlaut -18 -KPX T Omacron -18 -KPX T Oslash -18 -KPX T Otilde -18 -KPX T a -80 -KPX T aacute -80 -KPX T abreve -80 -KPX T acircumflex -80 -KPX T adieresis -40 -KPX T agrave -40 -KPX T amacron -40 -KPX T aogonek -80 -KPX T aring -80 -KPX T atilde -40 -KPX T colon -50 -KPX T comma -74 -KPX T e -70 -KPX T eacute -70 -KPX T ecaron -70 -KPX T ecircumflex -70 -KPX T edieresis -30 -KPX T edotaccent -70 -KPX T egrave -70 -KPX T emacron -30 -KPX T eogonek -70 -KPX T hyphen -92 -KPX T i -35 -KPX T iacute -35 -KPX T iogonek -35 -KPX T o -80 -KPX T oacute -80 -KPX T ocircumflex -80 -KPX T odieresis -80 -KPX T ograve -80 -KPX T ohungarumlaut -80 -KPX T omacron -80 -KPX T oslash -80 -KPX T otilde -80 -KPX T period -74 -KPX T r -35 -KPX T racute -35 -KPX T rcaron -35 -KPX T rcommaaccent -35 -KPX T semicolon -55 -KPX T u -45 -KPX T uacute -45 -KPX T ucircumflex -45 -KPX T udieresis -45 -KPX T ugrave -45 -KPX T uhungarumlaut -45 -KPX T umacron -45 -KPX T uogonek -45 -KPX T uring -45 -KPX T w -80 -KPX T y -80 -KPX T yacute -80 -KPX T ydieresis -80 -KPX Tcaron A -93 -KPX Tcaron Aacute -93 -KPX Tcaron Abreve -93 -KPX Tcaron Acircumflex -93 -KPX Tcaron Adieresis -93 -KPX Tcaron Agrave -93 -KPX Tcaron Amacron -93 -KPX Tcaron Aogonek -93 -KPX Tcaron Aring -93 -KPX Tcaron Atilde -93 -KPX Tcaron O -18 -KPX Tcaron Oacute -18 -KPX Tcaron Ocircumflex -18 -KPX Tcaron Odieresis -18 -KPX Tcaron Ograve -18 -KPX Tcaron Ohungarumlaut -18 -KPX Tcaron Omacron -18 -KPX Tcaron Oslash -18 -KPX Tcaron Otilde -18 -KPX Tcaron a -80 -KPX Tcaron aacute -80 -KPX Tcaron abreve -80 -KPX Tcaron acircumflex -80 -KPX Tcaron adieresis -40 -KPX Tcaron agrave -40 -KPX Tcaron amacron -40 -KPX Tcaron aogonek -80 -KPX Tcaron aring -80 -KPX Tcaron atilde -40 -KPX Tcaron colon -50 -KPX Tcaron comma -74 -KPX Tcaron e -70 -KPX Tcaron eacute -70 -KPX Tcaron ecaron -70 -KPX Tcaron ecircumflex -30 -KPX Tcaron edieresis -30 -KPX Tcaron edotaccent -70 -KPX Tcaron egrave -70 -KPX Tcaron emacron -30 -KPX Tcaron eogonek -70 -KPX Tcaron hyphen -92 -KPX Tcaron i -35 -KPX Tcaron iacute -35 -KPX Tcaron iogonek -35 -KPX Tcaron o -80 -KPX Tcaron oacute -80 -KPX Tcaron ocircumflex -80 -KPX Tcaron odieresis -80 -KPX Tcaron ograve -80 -KPX Tcaron ohungarumlaut -80 -KPX Tcaron omacron -80 -KPX Tcaron oslash -80 -KPX Tcaron otilde -80 -KPX Tcaron period -74 -KPX Tcaron r -35 -KPX Tcaron racute -35 -KPX Tcaron rcaron -35 -KPX Tcaron rcommaaccent -35 -KPX Tcaron semicolon -55 -KPX Tcaron u -45 -KPX Tcaron uacute -45 -KPX Tcaron ucircumflex -45 -KPX Tcaron udieresis -45 -KPX Tcaron ugrave -45 -KPX Tcaron uhungarumlaut -45 -KPX Tcaron umacron -45 -KPX Tcaron uogonek -45 -KPX Tcaron uring -45 -KPX Tcaron w -80 -KPX Tcaron y -80 -KPX Tcaron yacute -80 -KPX Tcaron ydieresis -80 -KPX Tcommaaccent A -93 -KPX Tcommaaccent Aacute -93 -KPX Tcommaaccent Abreve -93 -KPX Tcommaaccent Acircumflex -93 -KPX Tcommaaccent Adieresis -93 -KPX Tcommaaccent Agrave -93 -KPX Tcommaaccent Amacron -93 -KPX Tcommaaccent Aogonek -93 -KPX Tcommaaccent Aring -93 -KPX Tcommaaccent Atilde -93 -KPX Tcommaaccent O -18 -KPX Tcommaaccent Oacute -18 -KPX Tcommaaccent Ocircumflex -18 -KPX Tcommaaccent Odieresis -18 -KPX Tcommaaccent Ograve -18 -KPX Tcommaaccent Ohungarumlaut -18 -KPX Tcommaaccent Omacron -18 -KPX Tcommaaccent Oslash -18 -KPX Tcommaaccent Otilde -18 -KPX Tcommaaccent a -80 -KPX Tcommaaccent aacute -80 -KPX Tcommaaccent abreve -80 -KPX Tcommaaccent acircumflex -80 -KPX Tcommaaccent adieresis -40 -KPX Tcommaaccent agrave -40 -KPX Tcommaaccent amacron -40 -KPX Tcommaaccent aogonek -80 -KPX Tcommaaccent aring -80 -KPX Tcommaaccent atilde -40 -KPX Tcommaaccent colon -50 -KPX Tcommaaccent comma -74 -KPX Tcommaaccent e -70 -KPX Tcommaaccent eacute -70 -KPX Tcommaaccent ecaron -70 -KPX Tcommaaccent ecircumflex -30 -KPX Tcommaaccent edieresis -30 -KPX Tcommaaccent edotaccent -70 -KPX Tcommaaccent egrave -30 -KPX Tcommaaccent emacron -70 -KPX Tcommaaccent eogonek -70 -KPX Tcommaaccent hyphen -92 -KPX Tcommaaccent i -35 -KPX Tcommaaccent iacute -35 -KPX Tcommaaccent iogonek -35 -KPX Tcommaaccent o -80 -KPX Tcommaaccent oacute -80 -KPX Tcommaaccent ocircumflex -80 -KPX Tcommaaccent odieresis -80 -KPX Tcommaaccent ograve -80 -KPX Tcommaaccent ohungarumlaut -80 -KPX Tcommaaccent omacron -80 -KPX Tcommaaccent oslash -80 -KPX Tcommaaccent otilde -80 -KPX Tcommaaccent period -74 -KPX Tcommaaccent r -35 -KPX Tcommaaccent racute -35 -KPX Tcommaaccent rcaron -35 -KPX Tcommaaccent rcommaaccent -35 -KPX Tcommaaccent semicolon -55 -KPX Tcommaaccent u -45 -KPX Tcommaaccent uacute -45 -KPX Tcommaaccent ucircumflex -45 -KPX Tcommaaccent udieresis -45 -KPX Tcommaaccent ugrave -45 -KPX Tcommaaccent uhungarumlaut -45 -KPX Tcommaaccent umacron -45 -KPX Tcommaaccent uogonek -45 -KPX Tcommaaccent uring -45 -KPX Tcommaaccent w -80 -KPX Tcommaaccent y -80 -KPX Tcommaaccent yacute -80 -KPX Tcommaaccent ydieresis -80 -KPX U A -40 -KPX U Aacute -40 -KPX U Abreve -40 -KPX U Acircumflex -40 -KPX U Adieresis -40 -KPX U Agrave -40 -KPX U Amacron -40 -KPX U Aogonek -40 -KPX U Aring -40 -KPX U Atilde -40 -KPX Uacute A -40 -KPX Uacute Aacute -40 -KPX Uacute Abreve -40 -KPX Uacute Acircumflex -40 -KPX Uacute Adieresis -40 -KPX Uacute Agrave -40 -KPX Uacute Amacron -40 -KPX Uacute Aogonek -40 -KPX Uacute Aring -40 -KPX Uacute Atilde -40 -KPX Ucircumflex A -40 -KPX Ucircumflex Aacute -40 -KPX Ucircumflex Abreve -40 -KPX Ucircumflex Acircumflex -40 -KPX Ucircumflex Adieresis -40 -KPX Ucircumflex Agrave -40 -KPX Ucircumflex Amacron -40 -KPX Ucircumflex Aogonek -40 -KPX Ucircumflex Aring -40 -KPX Ucircumflex Atilde -40 -KPX Udieresis A -40 -KPX Udieresis Aacute -40 -KPX Udieresis Abreve -40 -KPX Udieresis Acircumflex -40 -KPX Udieresis Adieresis -40 -KPX Udieresis Agrave -40 -KPX Udieresis Amacron -40 -KPX Udieresis Aogonek -40 -KPX Udieresis Aring -40 -KPX Udieresis Atilde -40 -KPX Ugrave A -40 -KPX Ugrave Aacute -40 -KPX Ugrave Abreve -40 -KPX Ugrave Acircumflex -40 -KPX Ugrave Adieresis -40 -KPX Ugrave Agrave -40 -KPX Ugrave Amacron -40 -KPX Ugrave Aogonek -40 -KPX Ugrave Aring -40 -KPX Ugrave Atilde -40 -KPX Uhungarumlaut A -40 -KPX Uhungarumlaut Aacute -40 -KPX Uhungarumlaut Abreve -40 -KPX Uhungarumlaut Acircumflex -40 -KPX Uhungarumlaut Adieresis -40 -KPX Uhungarumlaut Agrave -40 -KPX Uhungarumlaut Amacron -40 -KPX Uhungarumlaut Aogonek -40 -KPX Uhungarumlaut Aring -40 -KPX Uhungarumlaut Atilde -40 -KPX Umacron A -40 -KPX Umacron Aacute -40 -KPX Umacron Abreve -40 -KPX Umacron Acircumflex -40 -KPX Umacron Adieresis -40 -KPX Umacron Agrave -40 -KPX Umacron Amacron -40 -KPX Umacron Aogonek -40 -KPX Umacron Aring -40 -KPX Umacron Atilde -40 -KPX Uogonek A -40 -KPX Uogonek Aacute -40 -KPX Uogonek Abreve -40 -KPX Uogonek Acircumflex -40 -KPX Uogonek Adieresis -40 -KPX Uogonek Agrave -40 -KPX Uogonek Amacron -40 -KPX Uogonek Aogonek -40 -KPX Uogonek Aring -40 -KPX Uogonek Atilde -40 -KPX Uring A -40 -KPX Uring Aacute -40 -KPX Uring Abreve -40 -KPX Uring Acircumflex -40 -KPX Uring Adieresis -40 -KPX Uring Agrave -40 -KPX Uring Amacron -40 -KPX Uring Aogonek -40 -KPX Uring Aring -40 -KPX Uring Atilde -40 -KPX V A -135 -KPX V Aacute -135 -KPX V Abreve -135 -KPX V Acircumflex -135 -KPX V Adieresis -135 -KPX V Agrave -135 -KPX V Amacron -135 -KPX V Aogonek -135 -KPX V Aring -135 -KPX V Atilde -135 -KPX V G -15 -KPX V Gbreve -15 -KPX V Gcommaaccent -15 -KPX V O -40 -KPX V Oacute -40 -KPX V Ocircumflex -40 -KPX V Odieresis -40 -KPX V Ograve -40 -KPX V Ohungarumlaut -40 -KPX V Omacron -40 -KPX V Oslash -40 -KPX V Otilde -40 -KPX V a -111 -KPX V aacute -111 -KPX V abreve -111 -KPX V acircumflex -71 -KPX V adieresis -71 -KPX V agrave -71 -KPX V amacron -71 -KPX V aogonek -111 -KPX V aring -111 -KPX V atilde -71 -KPX V colon -74 -KPX V comma -129 -KPX V e -111 -KPX V eacute -111 -KPX V ecaron -71 -KPX V ecircumflex -71 -KPX V edieresis -71 -KPX V edotaccent -111 -KPX V egrave -71 -KPX V emacron -71 -KPX V eogonek -111 -KPX V hyphen -100 -KPX V i -60 -KPX V iacute -60 -KPX V icircumflex -20 -KPX V idieresis -20 -KPX V igrave -20 -KPX V imacron -20 -KPX V iogonek -60 -KPX V o -129 -KPX V oacute -129 -KPX V ocircumflex -129 -KPX V odieresis -89 -KPX V ograve -89 -KPX V ohungarumlaut -129 -KPX V omacron -89 -KPX V oslash -129 -KPX V otilde -89 -KPX V period -129 -KPX V semicolon -74 -KPX V u -75 -KPX V uacute -75 -KPX V ucircumflex -75 -KPX V udieresis -75 -KPX V ugrave -75 -KPX V uhungarumlaut -75 -KPX V umacron -75 -KPX V uogonek -75 -KPX V uring -75 -KPX W A -120 -KPX W Aacute -120 -KPX W Abreve -120 -KPX W Acircumflex -120 -KPX W Adieresis -120 -KPX W Agrave -120 -KPX W Amacron -120 -KPX W Aogonek -120 -KPX W Aring -120 -KPX W Atilde -120 -KPX W O -10 -KPX W Oacute -10 -KPX W Ocircumflex -10 -KPX W Odieresis -10 -KPX W Ograve -10 -KPX W Ohungarumlaut -10 -KPX W Omacron -10 -KPX W Oslash -10 -KPX W Otilde -10 -KPX W a -80 -KPX W aacute -80 -KPX W abreve -80 -KPX W acircumflex -80 -KPX W adieresis -80 -KPX W agrave -80 -KPX W amacron -80 -KPX W aogonek -80 -KPX W aring -80 -KPX W atilde -80 -KPX W colon -37 -KPX W comma -92 -KPX W e -80 -KPX W eacute -80 -KPX W ecaron -80 -KPX W ecircumflex -80 -KPX W edieresis -40 -KPX W edotaccent -80 -KPX W egrave -40 -KPX W emacron -40 -KPX W eogonek -80 -KPX W hyphen -65 -KPX W i -40 -KPX W iacute -40 -KPX W iogonek -40 -KPX W o -80 -KPX W oacute -80 -KPX W ocircumflex -80 -KPX W odieresis -80 -KPX W ograve -80 -KPX W ohungarumlaut -80 -KPX W omacron -80 -KPX W oslash -80 -KPX W otilde -80 -KPX W period -92 -KPX W semicolon -37 -KPX W u -50 -KPX W uacute -50 -KPX W ucircumflex -50 -KPX W udieresis -50 -KPX W ugrave -50 -KPX W uhungarumlaut -50 -KPX W umacron -50 -KPX W uogonek -50 -KPX W uring -50 -KPX W y -73 -KPX W yacute -73 -KPX W ydieresis -73 -KPX Y A -120 -KPX Y Aacute -120 -KPX Y Abreve -120 -KPX Y Acircumflex -120 -KPX Y Adieresis -120 -KPX Y Agrave -120 -KPX Y Amacron -120 -KPX Y Aogonek -120 -KPX Y Aring -120 -KPX Y Atilde -120 -KPX Y O -30 -KPX Y Oacute -30 -KPX Y Ocircumflex -30 -KPX Y Odieresis -30 -KPX Y Ograve -30 -KPX Y Ohungarumlaut -30 -KPX Y Omacron -30 -KPX Y Oslash -30 -KPX Y Otilde -30 -KPX Y a -100 -KPX Y aacute -100 -KPX Y abreve -100 -KPX Y acircumflex -100 -KPX Y adieresis -60 -KPX Y agrave -60 -KPX Y amacron -60 -KPX Y aogonek -100 -KPX Y aring -100 -KPX Y atilde -60 -KPX Y colon -92 -KPX Y comma -129 -KPX Y e -100 -KPX Y eacute -100 -KPX Y ecaron -100 -KPX Y ecircumflex -100 -KPX Y edieresis -60 -KPX Y edotaccent -100 -KPX Y egrave -60 -KPX Y emacron -60 -KPX Y eogonek -100 -KPX Y hyphen -111 -KPX Y i -55 -KPX Y iacute -55 -KPX Y iogonek -55 -KPX Y o -110 -KPX Y oacute -110 -KPX Y ocircumflex -110 -KPX Y odieresis -70 -KPX Y ograve -70 -KPX Y ohungarumlaut -110 -KPX Y omacron -70 -KPX Y oslash -110 -KPX Y otilde -70 -KPX Y period -129 -KPX Y semicolon -92 -KPX Y u -111 -KPX Y uacute -111 -KPX Y ucircumflex -111 -KPX Y udieresis -71 -KPX Y ugrave -71 -KPX Y uhungarumlaut -111 -KPX Y umacron -71 -KPX Y uogonek -111 -KPX Y uring -111 -KPX Yacute A -120 -KPX Yacute Aacute -120 -KPX Yacute Abreve -120 -KPX Yacute Acircumflex -120 -KPX Yacute Adieresis -120 -KPX Yacute Agrave -120 -KPX Yacute Amacron -120 -KPX Yacute Aogonek -120 -KPX Yacute Aring -120 -KPX Yacute Atilde -120 -KPX Yacute O -30 -KPX Yacute Oacute -30 -KPX Yacute Ocircumflex -30 -KPX Yacute Odieresis -30 -KPX Yacute Ograve -30 -KPX Yacute Ohungarumlaut -30 -KPX Yacute Omacron -30 -KPX Yacute Oslash -30 -KPX Yacute Otilde -30 -KPX Yacute a -100 -KPX Yacute aacute -100 -KPX Yacute abreve -100 -KPX Yacute acircumflex -100 -KPX Yacute adieresis -60 -KPX Yacute agrave -60 -KPX Yacute amacron -60 -KPX Yacute aogonek -100 -KPX Yacute aring -100 -KPX Yacute atilde -60 -KPX Yacute colon -92 -KPX Yacute comma -129 -KPX Yacute e -100 -KPX Yacute eacute -100 -KPX Yacute ecaron -100 -KPX Yacute ecircumflex -100 -KPX Yacute edieresis -60 -KPX Yacute edotaccent -100 -KPX Yacute egrave -60 -KPX Yacute emacron -60 -KPX Yacute eogonek -100 -KPX Yacute hyphen -111 -KPX Yacute i -55 -KPX Yacute iacute -55 -KPX Yacute iogonek -55 -KPX Yacute o -110 -KPX Yacute oacute -110 -KPX Yacute ocircumflex -110 -KPX Yacute odieresis -70 -KPX Yacute ograve -70 -KPX Yacute ohungarumlaut -110 -KPX Yacute omacron -70 -KPX Yacute oslash -110 -KPX Yacute otilde -70 -KPX Yacute period -129 -KPX Yacute semicolon -92 -KPX Yacute u -111 -KPX Yacute uacute -111 -KPX Yacute ucircumflex -111 -KPX Yacute udieresis -71 -KPX Yacute ugrave -71 -KPX Yacute uhungarumlaut -111 -KPX Yacute umacron -71 -KPX Yacute uogonek -111 -KPX Yacute uring -111 -KPX Ydieresis A -120 -KPX Ydieresis Aacute -120 -KPX Ydieresis Abreve -120 -KPX Ydieresis Acircumflex -120 -KPX Ydieresis Adieresis -120 -KPX Ydieresis Agrave -120 -KPX Ydieresis Amacron -120 -KPX Ydieresis Aogonek -120 -KPX Ydieresis Aring -120 -KPX Ydieresis Atilde -120 -KPX Ydieresis O -30 -KPX Ydieresis Oacute -30 -KPX Ydieresis Ocircumflex -30 -KPX Ydieresis Odieresis -30 -KPX Ydieresis Ograve -30 -KPX Ydieresis Ohungarumlaut -30 -KPX Ydieresis Omacron -30 -KPX Ydieresis Oslash -30 -KPX Ydieresis Otilde -30 -KPX Ydieresis a -100 -KPX Ydieresis aacute -100 -KPX Ydieresis abreve -100 -KPX Ydieresis acircumflex -100 -KPX Ydieresis adieresis -60 -KPX Ydieresis agrave -60 -KPX Ydieresis amacron -60 -KPX Ydieresis aogonek -100 -KPX Ydieresis aring -100 -KPX Ydieresis atilde -100 -KPX Ydieresis colon -92 -KPX Ydieresis comma -129 -KPX Ydieresis e -100 -KPX Ydieresis eacute -100 -KPX Ydieresis ecaron -100 -KPX Ydieresis ecircumflex -100 -KPX Ydieresis edieresis -60 -KPX Ydieresis edotaccent -100 -KPX Ydieresis egrave -60 -KPX Ydieresis emacron -60 -KPX Ydieresis eogonek -100 -KPX Ydieresis hyphen -111 -KPX Ydieresis i -55 -KPX Ydieresis iacute -55 -KPX Ydieresis iogonek -55 -KPX Ydieresis o -110 -KPX Ydieresis oacute -110 -KPX Ydieresis ocircumflex -110 -KPX Ydieresis odieresis -70 -KPX Ydieresis ograve -70 -KPX Ydieresis ohungarumlaut -110 -KPX Ydieresis omacron -70 -KPX Ydieresis oslash -110 -KPX Ydieresis otilde -70 -KPX Ydieresis period -129 -KPX Ydieresis semicolon -92 -KPX Ydieresis u -111 -KPX Ydieresis uacute -111 -KPX Ydieresis ucircumflex -111 -KPX Ydieresis udieresis -71 -KPX Ydieresis ugrave -71 -KPX Ydieresis uhungarumlaut -111 -KPX Ydieresis umacron -71 -KPX Ydieresis uogonek -111 -KPX Ydieresis uring -111 -KPX a v -20 -KPX a w -15 -KPX aacute v -20 -KPX aacute w -15 -KPX abreve v -20 -KPX abreve w -15 -KPX acircumflex v -20 -KPX acircumflex w -15 -KPX adieresis v -20 -KPX adieresis w -15 -KPX agrave v -20 -KPX agrave w -15 -KPX amacron v -20 -KPX amacron w -15 -KPX aogonek v -20 -KPX aogonek w -15 -KPX aring v -20 -KPX aring w -15 -KPX atilde v -20 -KPX atilde w -15 -KPX b period -40 -KPX b u -20 -KPX b uacute -20 -KPX b ucircumflex -20 -KPX b udieresis -20 -KPX b ugrave -20 -KPX b uhungarumlaut -20 -KPX b umacron -20 -KPX b uogonek -20 -KPX b uring -20 -KPX b v -15 -KPX c y -15 -KPX c yacute -15 -KPX c ydieresis -15 -KPX cacute y -15 -KPX cacute yacute -15 -KPX cacute ydieresis -15 -KPX ccaron y -15 -KPX ccaron yacute -15 -KPX ccaron ydieresis -15 -KPX ccedilla y -15 -KPX ccedilla yacute -15 -KPX ccedilla ydieresis -15 -KPX comma quotedblright -70 -KPX comma quoteright -70 -KPX e g -15 -KPX e gbreve -15 -KPX e gcommaaccent -15 -KPX e v -25 -KPX e w -25 -KPX e x -15 -KPX e y -15 -KPX e yacute -15 -KPX e ydieresis -15 -KPX eacute g -15 -KPX eacute gbreve -15 -KPX eacute gcommaaccent -15 -KPX eacute v -25 -KPX eacute w -25 -KPX eacute x -15 -KPX eacute y -15 -KPX eacute yacute -15 -KPX eacute ydieresis -15 -KPX ecaron g -15 -KPX ecaron gbreve -15 -KPX ecaron gcommaaccent -15 -KPX ecaron v -25 -KPX ecaron w -25 -KPX ecaron x -15 -KPX ecaron y -15 -KPX ecaron yacute -15 -KPX ecaron ydieresis -15 -KPX ecircumflex g -15 -KPX ecircumflex gbreve -15 -KPX ecircumflex gcommaaccent -15 -KPX ecircumflex v -25 -KPX ecircumflex w -25 -KPX ecircumflex x -15 -KPX ecircumflex y -15 -KPX ecircumflex yacute -15 -KPX ecircumflex ydieresis -15 -KPX edieresis g -15 -KPX edieresis gbreve -15 -KPX edieresis gcommaaccent -15 -KPX edieresis v -25 -KPX edieresis w -25 -KPX edieresis x -15 -KPX edieresis y -15 -KPX edieresis yacute -15 -KPX edieresis ydieresis -15 -KPX edotaccent g -15 -KPX edotaccent gbreve -15 -KPX edotaccent gcommaaccent -15 -KPX edotaccent v -25 -KPX edotaccent w -25 -KPX edotaccent x -15 -KPX edotaccent y -15 -KPX edotaccent yacute -15 -KPX edotaccent ydieresis -15 -KPX egrave g -15 -KPX egrave gbreve -15 -KPX egrave gcommaaccent -15 -KPX egrave v -25 -KPX egrave w -25 -KPX egrave x -15 -KPX egrave y -15 -KPX egrave yacute -15 -KPX egrave ydieresis -15 -KPX emacron g -15 -KPX emacron gbreve -15 -KPX emacron gcommaaccent -15 -KPX emacron v -25 -KPX emacron w -25 -KPX emacron x -15 -KPX emacron y -15 -KPX emacron yacute -15 -KPX emacron ydieresis -15 -KPX eogonek g -15 -KPX eogonek gbreve -15 -KPX eogonek gcommaaccent -15 -KPX eogonek v -25 -KPX eogonek w -25 -KPX eogonek x -15 -KPX eogonek y -15 -KPX eogonek yacute -15 -KPX eogonek ydieresis -15 -KPX f a -10 -KPX f aacute -10 -KPX f abreve -10 -KPX f acircumflex -10 -KPX f adieresis -10 -KPX f agrave -10 -KPX f amacron -10 -KPX f aogonek -10 -KPX f aring -10 -KPX f atilde -10 -KPX f dotlessi -50 -KPX f f -25 -KPX f i -20 -KPX f iacute -20 -KPX f quoteright 55 -KPX g a -5 -KPX g aacute -5 -KPX g abreve -5 -KPX g acircumflex -5 -KPX g adieresis -5 -KPX g agrave -5 -KPX g amacron -5 -KPX g aogonek -5 -KPX g aring -5 -KPX g atilde -5 -KPX gbreve a -5 -KPX gbreve aacute -5 -KPX gbreve abreve -5 -KPX gbreve acircumflex -5 -KPX gbreve adieresis -5 -KPX gbreve agrave -5 -KPX gbreve amacron -5 -KPX gbreve aogonek -5 -KPX gbreve aring -5 -KPX gbreve atilde -5 -KPX gcommaaccent a -5 -KPX gcommaaccent aacute -5 -KPX gcommaaccent abreve -5 -KPX gcommaaccent acircumflex -5 -KPX gcommaaccent adieresis -5 -KPX gcommaaccent agrave -5 -KPX gcommaaccent amacron -5 -KPX gcommaaccent aogonek -5 -KPX gcommaaccent aring -5 -KPX gcommaaccent atilde -5 -KPX h y -5 -KPX h yacute -5 -KPX h ydieresis -5 -KPX i v -25 -KPX iacute v -25 -KPX icircumflex v -25 -KPX idieresis v -25 -KPX igrave v -25 -KPX imacron v -25 -KPX iogonek v -25 -KPX k e -10 -KPX k eacute -10 -KPX k ecaron -10 -KPX k ecircumflex -10 -KPX k edieresis -10 -KPX k edotaccent -10 -KPX k egrave -10 -KPX k emacron -10 -KPX k eogonek -10 -KPX k o -10 -KPX k oacute -10 -KPX k ocircumflex -10 -KPX k odieresis -10 -KPX k ograve -10 -KPX k ohungarumlaut -10 -KPX k omacron -10 -KPX k oslash -10 -KPX k otilde -10 -KPX k y -15 -KPX k yacute -15 -KPX k ydieresis -15 -KPX kcommaaccent e -10 -KPX kcommaaccent eacute -10 -KPX kcommaaccent ecaron -10 -KPX kcommaaccent ecircumflex -10 -KPX kcommaaccent edieresis -10 -KPX kcommaaccent edotaccent -10 -KPX kcommaaccent egrave -10 -KPX kcommaaccent emacron -10 -KPX kcommaaccent eogonek -10 -KPX kcommaaccent o -10 -KPX kcommaaccent oacute -10 -KPX kcommaaccent ocircumflex -10 -KPX kcommaaccent odieresis -10 -KPX kcommaaccent ograve -10 -KPX kcommaaccent ohungarumlaut -10 -KPX kcommaaccent omacron -10 -KPX kcommaaccent oslash -10 -KPX kcommaaccent otilde -10 -KPX kcommaaccent y -15 -KPX kcommaaccent yacute -15 -KPX kcommaaccent ydieresis -15 -KPX l w -10 -KPX lacute w -10 -KPX lcommaaccent w -10 -KPX lslash w -10 -KPX n v -40 -KPX n y -15 -KPX n yacute -15 -KPX n ydieresis -15 -KPX nacute v -40 -KPX nacute y -15 -KPX nacute yacute -15 -KPX nacute ydieresis -15 -KPX ncaron v -40 -KPX ncaron y -15 -KPX ncaron yacute -15 -KPX ncaron ydieresis -15 -KPX ncommaaccent v -40 -KPX ncommaaccent y -15 -KPX ncommaaccent yacute -15 -KPX ncommaaccent ydieresis -15 -KPX ntilde v -40 -KPX ntilde y -15 -KPX ntilde yacute -15 -KPX ntilde ydieresis -15 -KPX o v -15 -KPX o w -25 -KPX o y -10 -KPX o yacute -10 -KPX o ydieresis -10 -KPX oacute v -15 -KPX oacute w -25 -KPX oacute y -10 -KPX oacute yacute -10 -KPX oacute ydieresis -10 -KPX ocircumflex v -15 -KPX ocircumflex w -25 -KPX ocircumflex y -10 -KPX ocircumflex yacute -10 -KPX ocircumflex ydieresis -10 -KPX odieresis v -15 -KPX odieresis w -25 -KPX odieresis y -10 -KPX odieresis yacute -10 -KPX odieresis ydieresis -10 -KPX ograve v -15 -KPX ograve w -25 -KPX ograve y -10 -KPX ograve yacute -10 -KPX ograve ydieresis -10 -KPX ohungarumlaut v -15 -KPX ohungarumlaut w -25 -KPX ohungarumlaut y -10 -KPX ohungarumlaut yacute -10 -KPX ohungarumlaut ydieresis -10 -KPX omacron v -15 -KPX omacron w -25 -KPX omacron y -10 -KPX omacron yacute -10 -KPX omacron ydieresis -10 -KPX oslash v -15 -KPX oslash w -25 -KPX oslash y -10 -KPX oslash yacute -10 -KPX oslash ydieresis -10 -KPX otilde v -15 -KPX otilde w -25 -KPX otilde y -10 -KPX otilde yacute -10 -KPX otilde ydieresis -10 -KPX p y -10 -KPX p yacute -10 -KPX p ydieresis -10 -KPX period quotedblright -70 -KPX period quoteright -70 -KPX quotedblleft A -80 -KPX quotedblleft Aacute -80 -KPX quotedblleft Abreve -80 -KPX quotedblleft Acircumflex -80 -KPX quotedblleft Adieresis -80 -KPX quotedblleft Agrave -80 -KPX quotedblleft Amacron -80 -KPX quotedblleft Aogonek -80 -KPX quotedblleft Aring -80 -KPX quotedblleft Atilde -80 -KPX quoteleft A -80 -KPX quoteleft Aacute -80 -KPX quoteleft Abreve -80 -KPX quoteleft Acircumflex -80 -KPX quoteleft Adieresis -80 -KPX quoteleft Agrave -80 -KPX quoteleft Amacron -80 -KPX quoteleft Aogonek -80 -KPX quoteleft Aring -80 -KPX quoteleft Atilde -80 -KPX quoteleft quoteleft -74 -KPX quoteright d -50 -KPX quoteright dcroat -50 -KPX quoteright l -10 -KPX quoteright lacute -10 -KPX quoteright lcommaaccent -10 -KPX quoteright lslash -10 -KPX quoteright quoteright -74 -KPX quoteright r -50 -KPX quoteright racute -50 -KPX quoteright rcaron -50 -KPX quoteright rcommaaccent -50 -KPX quoteright s -55 -KPX quoteright sacute -55 -KPX quoteright scaron -55 -KPX quoteright scedilla -55 -KPX quoteright scommaaccent -55 -KPX quoteright space -74 -KPX quoteright t -18 -KPX quoteright tcommaaccent -18 -KPX quoteright v -50 -KPX r comma -40 -KPX r g -18 -KPX r gbreve -18 -KPX r gcommaaccent -18 -KPX r hyphen -20 -KPX r period -55 -KPX racute comma -40 -KPX racute g -18 -KPX racute gbreve -18 -KPX racute gcommaaccent -18 -KPX racute hyphen -20 -KPX racute period -55 -KPX rcaron comma -40 -KPX rcaron g -18 -KPX rcaron gbreve -18 -KPX rcaron gcommaaccent -18 -KPX rcaron hyphen -20 -KPX rcaron period -55 -KPX rcommaaccent comma -40 -KPX rcommaaccent g -18 -KPX rcommaaccent gbreve -18 -KPX rcommaaccent gcommaaccent -18 -KPX rcommaaccent hyphen -20 -KPX rcommaaccent period -55 -KPX space A -55 -KPX space Aacute -55 -KPX space Abreve -55 -KPX space Acircumflex -55 -KPX space Adieresis -55 -KPX space Agrave -55 -KPX space Amacron -55 -KPX space Aogonek -55 -KPX space Aring -55 -KPX space Atilde -55 -KPX space T -18 -KPX space Tcaron -18 -KPX space Tcommaaccent -18 -KPX space V -50 -KPX space W -30 -KPX space Y -90 -KPX space Yacute -90 -KPX space Ydieresis -90 -KPX v a -25 -KPX v aacute -25 -KPX v abreve -25 -KPX v acircumflex -25 -KPX v adieresis -25 -KPX v agrave -25 -KPX v amacron -25 -KPX v aogonek -25 -KPX v aring -25 -KPX v atilde -25 -KPX v comma -65 -KPX v e -15 -KPX v eacute -15 -KPX v ecaron -15 -KPX v ecircumflex -15 -KPX v edieresis -15 -KPX v edotaccent -15 -KPX v egrave -15 -KPX v emacron -15 -KPX v eogonek -15 -KPX v o -20 -KPX v oacute -20 -KPX v ocircumflex -20 -KPX v odieresis -20 -KPX v ograve -20 -KPX v ohungarumlaut -20 -KPX v omacron -20 -KPX v oslash -20 -KPX v otilde -20 -KPX v period -65 -KPX w a -10 -KPX w aacute -10 -KPX w abreve -10 -KPX w acircumflex -10 -KPX w adieresis -10 -KPX w agrave -10 -KPX w amacron -10 -KPX w aogonek -10 -KPX w aring -10 -KPX w atilde -10 -KPX w comma -65 -KPX w o -10 -KPX w oacute -10 -KPX w ocircumflex -10 -KPX w odieresis -10 -KPX w ograve -10 -KPX w ohungarumlaut -10 -KPX w omacron -10 -KPX w oslash -10 -KPX w otilde -10 -KPX w period -65 -KPX x e -15 -KPX x eacute -15 -KPX x ecaron -15 -KPX x ecircumflex -15 -KPX x edieresis -15 -KPX x edotaccent -15 -KPX x egrave -15 -KPX x emacron -15 -KPX x eogonek -15 -KPX y comma -65 -KPX y period -65 -KPX yacute comma -65 -KPX yacute period -65 -KPX ydieresis comma -65 -KPX ydieresis period -65 -EndKernPairs -EndKernData -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/ZapfDingbats.afm b/skills/flight-finder/node_modules/pdfkit/js/data/ZapfDingbats.afm deleted file mode 100644 index dc5662e..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/data/ZapfDingbats.afm +++ /dev/null @@ -1,225 +0,0 @@ -StartFontMetrics 4.1 -Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. -Comment Creation Date: Thu May 1 15:14:13 1997 -Comment UniqueID 43082 -Comment VMusage 45775 55535 -FontName ZapfDingbats -FullName ITC Zapf Dingbats -FamilyName ZapfDingbats -Weight Medium -ItalicAngle 0 -IsFixedPitch false -CharacterSet Special -FontBBox -1 -143 981 820 -UnderlinePosition -100 -UnderlineThickness 50 -Version 002.000 -Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. -EncodingScheme FontSpecific -StdHW 28 -StdVW 90 -StartCharMetrics 202 -C 32 ; WX 278 ; N space ; B 0 0 0 0 ; -C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ; -C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ; -C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ; -C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ; -C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ; -C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ; -C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ; -C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ; -C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ; -C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ; -C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ; -C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ; -C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ; -C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ; -C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ; -C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ; -C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ; -C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ; -C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ; -C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ; -C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ; -C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ; -C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ; -C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ; -C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ; -C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ; -C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ; -C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ; -C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ; -C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ; -C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ; -C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ; -C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ; -C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ; -C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ; -C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ; -C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ; -C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ; -C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ; -C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ; -C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ; -C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ; -C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ; -C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ; -C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ; -C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ; -C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ; -C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ; -C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ; -C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ; -C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ; -C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ; -C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ; -C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ; -C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ; -C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ; -C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ; -C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ; -C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ; -C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ; -C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ; -C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ; -C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ; -C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ; -C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ; -C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ; -C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ; -C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ; -C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ; -C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ; -C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ; -C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ; -C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ; -C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ; -C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ; -C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ; -C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ; -C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ; -C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ; -C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ; -C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ; -C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ; -C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ; -C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ; -C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ; -C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ; -C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ; -C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ; -C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ; -C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ; -C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ; -C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ; -C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ; -C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ; -C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ; -C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ; -C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ; -C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ; -C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ; -C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ; -C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ; -C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ; -C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ; -C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ; -C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ; -C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ; -C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ; -C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ; -C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ; -C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ; -C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ; -C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ; -C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ; -C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ; -C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ; -C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ; -C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ; -C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ; -C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ; -C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ; -C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ; -C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ; -C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ; -C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ; -C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ; -C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ; -C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ; -C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ; -C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ; -C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ; -C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ; -C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ; -C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ; -C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ; -C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ; -C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ; -C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ; -C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ; -C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ; -C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ; -C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ; -C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ; -C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ; -C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ; -C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ; -C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ; -C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ; -C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ; -C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ; -C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ; -C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ; -C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ; -C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ; -C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ; -C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ; -C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ; -C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ; -C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ; -C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ; -C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ; -C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ; -C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ; -C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ; -C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ; -C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ; -C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ; -C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ; -C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ; -C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ; -C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ; -C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ; -C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ; -C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ; -C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ; -C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ; -C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ; -C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ; -C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ; -C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ; -C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ; -C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ; -C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ; -C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ; -C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ; -C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ; -C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ; -C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ; -C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ; -C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ; -C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ; -C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ; -C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ; -C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ; -C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ; -C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ; -C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ; -C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ; -C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ; -C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ; -C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ; -C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ; -EndCharMetrics -EndFontMetrics diff --git a/skills/flight-finder/node_modules/pdfkit/js/data/sRGB_IEC61966_2_1.icc b/skills/flight-finder/node_modules/pdfkit/js/data/sRGB_IEC61966_2_1.icc deleted file mode 100644 index 49afbfe..0000000 Binary files a/skills/flight-finder/node_modules/pdfkit/js/data/sRGB_IEC61966_2_1.icc and /dev/null differ diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js deleted file mode 100644 index c897348..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js +++ /dev/null @@ -1,6083 +0,0 @@ -import stream from 'stream'; -import zlib from 'zlib'; -import CryptoJS from 'crypto-js'; -import fs from 'fs'; -import * as fontkit from 'fontkit'; -import { EventEmitter } from 'events'; -import LineBreaker from 'linebreak'; -import exif from 'jpeg-exif'; -import PNG from 'png-js'; - -class PDFAbstractReference { - toString() { - throw new Error('Must be implemented by subclasses'); - } -} - -class PDFTree { - constructor() { - let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - this._items = {}; - this.limits = typeof options.limits === 'boolean' ? options.limits : true; - } - add(key, val) { - return this._items[key] = val; - } - get(key) { - return this._items[key]; - } - toString() { - const sortedKeys = Object.keys(this._items).sort((a, b) => this._compareKeys(a, b)); - const out = ['<<']; - if (this.limits && sortedKeys.length > 1) { - const first = sortedKeys[0], - last = sortedKeys[sortedKeys.length - 1]; - out.push(` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`); - } - out.push(` /${this._keysName()} [`); - for (let key of sortedKeys) { - out.push(` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(this._items[key])}`); - } - out.push(']'); - out.push('>>'); - return out.join('\n'); - } - _compareKeys() { - throw new Error('Must be implemented by subclasses'); - } - _keysName() { - throw new Error('Must be implemented by subclasses'); - } - _dataForKey() { - throw new Error('Must be implemented by subclasses'); - } -} - -class SpotColor { - constructor(doc, name, C, M, Y, K) { - this.id = 'CS' + Object.keys(doc.spotColors).length; - this.name = name; - this.values = [C, M, Y, K]; - this.ref = doc.ref(['Separation', this.name, 'DeviceCMYK', { - Range: [0, 1, 0, 1, 0, 1, 0, 1], - C0: [0, 0, 0, 0], - C1: this.values.map(value => value / 100), - FunctionType: 2, - Domain: [0, 1], - N: 1 - }]); - this.ref.end(); - } - toString() { - return `${this.ref.id} 0 R`; - } -} - -const pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length); -const escapableRe = /[\n\r\t\b\f()\\]/g; -const escapable = { - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\b': '\\b', - '\f': '\\f', - '\\': '\\\\', - '(': '\\(', - ')': '\\)' -}; -const swapBytes = function (buff) { - const l = buff.length; - if (l & 0x01) { - throw new Error('Buffer length must be even'); - } else { - for (let i = 0, end = l - 1; i < end; i += 2) { - const a = buff[i]; - buff[i] = buff[i + 1]; - buff[i + 1] = a; - } - } - return buff; -}; -class PDFObject { - static convert(object) { - let encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - if (typeof object === 'string') { - return `/${object}`; - } else if (object instanceof String) { - let string = object; - let isUnicode = false; - for (let i = 0, end = string.length; i < end; i++) { - if (string.charCodeAt(i) > 0x7f) { - isUnicode = true; - break; - } - } - let stringBuffer; - if (isUnicode) { - stringBuffer = swapBytes(Buffer.from(`\ufeff${string}`, 'utf16le')); - } else { - stringBuffer = Buffer.from(string.valueOf(), 'ascii'); - } - if (encryptFn) { - string = encryptFn(stringBuffer).toString('binary'); - } else { - string = stringBuffer.toString('binary'); - } - string = string.replace(escapableRe, c => escapable[c]); - return `(${string})`; - } else if (Buffer.isBuffer(object)) { - return `<${object.toString('hex')}>`; - } else if (object instanceof PDFAbstractReference || object instanceof PDFTree || object instanceof SpotColor) { - return object.toString(); - } else if (object instanceof Date) { - let string = `D:${pad(object.getUTCFullYear(), 4)}` + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; - if (encryptFn) { - string = encryptFn(Buffer.from(string, 'ascii')).toString('binary'); - string = string.replace(escapableRe, c => escapable[c]); - } - return `(${string})`; - } else if (Array.isArray(object)) { - const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' '); - return `[${items}]`; - } else if ({}.toString.call(object) === '[object Object]') { - const out = ['<<']; - for (let key in object) { - const val = object[key]; - out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`); - } - out.push('>>'); - return out.join('\n'); - } else if (typeof object === 'number') { - return PDFObject.number(object); - } else { - return `${object}`; - } - } - static number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - throw new Error(`unsupported number: ${n}`); - } -} - -class PDFReference extends PDFAbstractReference { - constructor(document, id) { - let data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - super(); - this.document = document; - this.id = id; - this.data = data; - this.gen = 0; - this.compress = this.document.compress && !this.data.Filter; - this.uncompressedLength = 0; - this.buffer = []; - } - write(chunk) { - if (!(chunk instanceof Uint8Array)) { - chunk = Buffer.from(chunk + '\n', 'binary'); - } - this.uncompressedLength += chunk.length; - if (this.data.Length == null) { - this.data.Length = 0; - } - this.buffer.push(chunk); - this.data.Length += chunk.length; - if (this.compress) { - this.data.Filter = 'FlateDecode'; - } - } - end(chunk) { - if (chunk) { - this.write(chunk); - } - this.finalize(); - } - finalize() { - this.offset = this.document._offset; - const encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null; - if (this.buffer.length) { - this.buffer = Buffer.concat(this.buffer); - if (this.compress) { - this.buffer = zlib.deflateSync(this.buffer); - } - if (encryptFn) { - this.buffer = encryptFn(this.buffer); - } - this.data.Length = this.buffer.length; - } - this.document._write(`${this.id} ${this.gen} obj`); - this.document._write(PDFObject.convert(this.data, encryptFn)); - if (this.buffer.length) { - this.document._write('stream'); - this.document._write(this.buffer); - this.buffer = []; - this.document._write('\nendstream'); - } - this.document._write('endobj'); - this.document._refEnd(this); - } - toString() { - return `${this.id} ${this.gen} R`; - } -} - -const fArray = new Float32Array(1); -const uArray = new Uint32Array(fArray.buffer); -function PDFNumber(n) { - const rounded = Math.fround(n); - if (rounded <= n) return rounded; - fArray[0] = n; - if (n <= 0) { - uArray[0] += 1; - } else { - uArray[0] -= 1; - } - return fArray[0]; -} -function normalizeSides(sides) { - let defaultDefinition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - let transformer = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : v => v; - if (sides == null || typeof sides === 'object' && Object.keys(sides).length === 0) { - sides = defaultDefinition; - } - if (sides == null || typeof sides !== 'object') { - sides = { - top: sides, - right: sides, - bottom: sides, - left: sides - }; - } else if (Array.isArray(sides)) { - if (sides.length === 2) { - sides = { - vertical: sides[0], - horizontal: sides[1] - }; - } else { - sides = { - top: sides[0], - right: sides[1], - bottom: sides[2], - left: sides[3] - }; - } - } - if ('vertical' in sides || 'horizontal' in sides) { - sides = { - top: sides.vertical, - right: sides.horizontal, - bottom: sides.vertical, - left: sides.horizontal - }; - } - return { - top: transformer(sides.top), - right: transformer(sides.right), - bottom: transformer(sides.bottom), - left: transformer(sides.left) - }; -} -const MM_TO_CM = 1 / 10; -const CM_TO_IN = 1 / 2.54; -const PX_TO_IN = 1 / 96; -const IN_TO_PT = 72; -const PC_TO_PT = 12; -function cosine(a) { - if (a === 0) return 1; - if (a === 90) return 0; - if (a === 180) return -1; - if (a === 270) return 0; - return Math.cos(a * Math.PI / 180); -} -function sine(a) { - if (a === 0) return 0; - if (a === 90) return 1; - if (a === 180) return 0; - if (a === 270) return -1; - return Math.sin(a * Math.PI / 180); -} - -const DEFAULT_MARGINS = { - top: 72, - left: 72, - bottom: 72, - right: 72 -}; -const SIZES = { - '4A0': [4767.87, 6740.79], - '2A0': [3370.39, 4767.87], - A0: [2383.94, 3370.39], - A1: [1683.78, 2383.94], - A2: [1190.55, 1683.78], - A3: [841.89, 1190.55], - A4: [595.28, 841.89], - A5: [419.53, 595.28], - A6: [297.64, 419.53], - A7: [209.76, 297.64], - A8: [147.4, 209.76], - A9: [104.88, 147.4], - A10: [73.7, 104.88], - B0: [2834.65, 4008.19], - B1: [2004.09, 2834.65], - B2: [1417.32, 2004.09], - B3: [1000.63, 1417.32], - B4: [708.66, 1000.63], - B5: [498.9, 708.66], - B6: [354.33, 498.9], - B7: [249.45, 354.33], - B8: [175.75, 249.45], - B9: [124.72, 175.75], - B10: [87.87, 124.72], - C0: [2599.37, 3676.54], - C1: [1836.85, 2599.37], - C2: [1298.27, 1836.85], - C3: [918.43, 1298.27], - C4: [649.13, 918.43], - C5: [459.21, 649.13], - C6: [323.15, 459.21], - C7: [229.61, 323.15], - C8: [161.57, 229.61], - C9: [113.39, 161.57], - C10: [79.37, 113.39], - RA0: [2437.8, 3458.27], - RA1: [1729.13, 2437.8], - RA2: [1218.9, 1729.13], - RA3: [864.57, 1218.9], - RA4: [609.45, 864.57], - SRA0: [2551.18, 3628.35], - SRA1: [1814.17, 2551.18], - SRA2: [1275.59, 1814.17], - SRA3: [907.09, 1275.59], - SRA4: [637.8, 907.09], - EXECUTIVE: [521.86, 756.0], - FOLIO: [612.0, 936.0], - LEGAL: [612.0, 1008.0], - LETTER: [612.0, 792.0], - TABLOID: [792.0, 1224.0] -}; -class PDFPage { - constructor(document) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - this.document = document; - this._options = options; - this.size = options.size || 'letter'; - this.layout = options.layout || 'portrait'; - const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; - this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; - this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; - this.content = this.document.ref(); - if (options.font) document.font(options.font, options.fontFamily); - if (options.fontSize) document.fontSize(options.fontSize); - this.margins = normalizeSides(options.margin ?? options.margins, DEFAULT_MARGINS, x => document.sizeToPoint(x, 0, this)); - this.resources = this.document.ref({ - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] - }); - this.dictionary = this.document.ref({ - Type: 'Page', - Parent: this.document._root.data.Pages, - MediaBox: [0, 0, this.width, this.height], - Contents: this.content, - Resources: this.resources - }); - this.markings = []; - } - get fonts() { - const data = this.resources.data; - return data.Font != null ? data.Font : data.Font = {}; - } - get xobjects() { - const data = this.resources.data; - return data.XObject != null ? data.XObject : data.XObject = {}; - } - get ext_gstates() { - const data = this.resources.data; - return data.ExtGState != null ? data.ExtGState : data.ExtGState = {}; - } - get patterns() { - const data = this.resources.data; - return data.Pattern != null ? data.Pattern : data.Pattern = {}; - } - get colorSpaces() { - const data = this.resources.data; - return data.ColorSpace || (data.ColorSpace = {}); - } - get annotations() { - const data = this.dictionary.data; - return data.Annots != null ? data.Annots : data.Annots = []; - } - get structParentTreeKey() { - const data = this.dictionary.data; - return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey(); - } - get contentWidth() { - return this.width - this.margins.left - this.margins.right; - } - get contentHeight() { - return this.height - this.margins.top - this.margins.bottom; - } - maxY() { - return this.height - this.margins.bottom; - } - write(chunk) { - return this.content.write(chunk); - } - _setTabOrder() { - if (!this.dictionary.Tabs && this.document.hasMarkInfoDictionary()) { - this.dictionary.data.Tabs = 'S'; - } - } - end() { - this._setTabOrder(); - this.dictionary.end(); - this.resources.data.ColorSpace = this.resources.data.ColorSpace || {}; - for (let color of Object.values(this.document.spotColors)) { - this.resources.data.ColorSpace[color.id] = color; - } - this.resources.end(); - return this.content.end(); - } -} - -class PDFNameTree extends PDFTree { - _compareKeys(a, b) { - return a.localeCompare(b); - } - _keysName() { - return 'Names'; - } - _dataForKey(k) { - return new String(k); - } -} - -function inRange(value, rangeGroup) { - if (value < rangeGroup[0]) return false; - let startRange = 0; - let endRange = rangeGroup.length / 2; - while (startRange <= endRange) { - const middleRange = Math.floor((startRange + endRange) / 2); - const arrayIndex = middleRange * 2; - if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) { - return true; - } - if (value > rangeGroup[arrayIndex + 1]) { - startRange = middleRange + 1; - } else { - endRange = middleRange - 1; - } - } - return false; -} - -const unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; -const isUnassignedCodePoint = character => inRange(character, unassigned_code_points); -const commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; -const isCommonlyMappedToNothing = character => inRange(character, commonly_mapped_to_nothing); -const non_ASCII_space_characters = [0x00a0, 0x00a0, 0x1680, 0x1680, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, 0x2003, 0x2003, 0x2004, 0x2004, 0x2005, 0x2005, 0x2006, 0x2006, 0x2007, 0x2007, 0x2008, 0x2008, 0x2009, 0x2009, 0x200a, 0x200a, 0x200b, 0x200b, 0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000]; -const isNonASCIISpaceCharacter = character => inRange(character, non_ASCII_space_characters); -const non_ASCII_controls_characters = [0x0080, 0x009f, 0x06dd, 0x06dd, 0x070f, 0x070f, 0x180e, 0x180e, 0x200c, 0x200c, 0x200d, 0x200d, 0x2028, 0x2028, 0x2029, 0x2029, 0x2060, 0x2060, 0x2061, 0x2061, 0x2062, 0x2062, 0x2063, 0x2063, 0x206a, 0x206f, 0xfeff, 0xfeff, 0xfff9, 0xfffc, 0x1d173, 0x1d17a]; -const non_character_codepoints = [0xfdd0, 0xfdef, 0xfffe, 0xffff, 0x1fffe, 0x1ffff, 0x2fffe, 0x2ffff, 0x3fffe, 0x3ffff, 0x4fffe, 0x4ffff, 0x5fffe, 0x5ffff, 0x6fffe, 0x6ffff, 0x7fffe, 0x7ffff, 0x8fffe, 0x8ffff, 0x9fffe, 0x9ffff, 0xafffe, 0xaffff, 0xbfffe, 0xbffff, 0xcfffe, 0xcffff, 0xdfffe, 0xdffff, 0xefffe, 0xeffff, 0x10fffe, 0x10ffff]; -const prohibited_characters = [0, 0x001f, 0x007f, 0x007f, 0x0340, 0x0340, 0x0341, 0x0341, 0x200e, 0x200e, 0x200f, 0x200f, 0x202a, 0x202a, 0x202b, 0x202b, 0x202c, 0x202c, 0x202d, 0x202d, 0x202e, 0x202e, 0x206a, 0x206a, 0x206b, 0x206b, 0x206c, 0x206c, 0x206d, 0x206d, 0x206e, 0x206e, 0x206f, 0x206f, 0x2ff0, 0x2ffb, 0xd800, 0xdfff, 0xe000, 0xf8ff, 0xfff9, 0xfff9, 0xfffa, 0xfffa, 0xfffb, 0xfffb, 0xfffc, 0xfffc, 0xfffd, 0xfffd, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isProhibitedCharacter = character => inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints); -const bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; -const isBidirectionalRAL = character => inRange(character, bidirectional_r_al); -const bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isBidirectionalL = character => inRange(character, bidirectional_l); - -const mapping2space = isNonASCIISpaceCharacter; -const mapping2nothing = isCommonlyMappedToNothing; -const getCodePoint = character => character.codePointAt(0); -const first = x => x[0]; -const last = x => x[x.length - 1]; -function toCodePoints(input) { - const codepoints = []; - const size = input.length; - for (let i = 0; i < size; i += 1) { - const before = input.charCodeAt(i); - if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { - const next = input.charCodeAt(i + 1); - if (next >= 0xdc00 && next <= 0xdfff) { - codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); - i += 1; - continue; - } - } - codepoints.push(before); - } - return codepoints; -} -function saslprep(input) { - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (typeof input !== 'string') { - throw new TypeError('Expected string.'); - } - if (input.length === 0) { - return ''; - } - const mapped_input = toCodePoints(input).map(character => mapping2space(character) ? 0x20 : character).filter(character => !mapping2nothing(character)); - const normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC'); - const normalized_map = toCodePoints(normalized_input); - const hasProhibited = normalized_map.some(isProhibitedCharacter); - if (hasProhibited) { - throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); - } - if (opts.allowUnassigned !== true) { - const hasUnassigned = normalized_map.some(isUnassignedCodePoint); - if (hasUnassigned) { - throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); - } - } - const hasBidiRAL = normalized_map.some(isBidirectionalRAL); - const hasBidiL = normalized_map.some(isBidirectionalL); - if (hasBidiRAL && hasBidiL) { - throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6'); - } - const isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input))); - const isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input))); - if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { - throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); - } - return normalized_input; -} - -class PDFSecurity { - static generateFileID() { - let info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let infoStr = `${info.CreationDate.getTime()}\n`; - for (let key in info) { - if (!info.hasOwnProperty(key)) { - continue; - } - infoStr += `${key}: ${info[key].valueOf()}\n`; - } - return wordArrayToBuffer(CryptoJS.MD5(infoStr)); - } - static generateRandomWordArray(bytes) { - return CryptoJS.lib.WordArray.random(bytes); - } - static create(document) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (!options.ownerPassword && !options.userPassword) { - return null; - } - return new PDFSecurity(document, options); - } - constructor(document) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (!options.ownerPassword && !options.userPassword) { - throw new Error('None of owner password and user password is defined.'); - } - this.document = document; - this._setupEncryption(options); - } - _setupEncryption(options) { - switch (options.pdfVersion) { - case '1.4': - case '1.5': - this.version = 2; - break; - case '1.6': - case '1.7': - this.version = 4; - break; - case '1.7ext3': - this.version = 5; - break; - default: - this.version = 1; - break; - } - const encDict = { - Filter: 'Standard' - }; - switch (this.version) { - case 1: - case 2: - case 4: - this._setupEncryptionV1V2V4(this.version, encDict, options); - break; - case 5: - this._setupEncryptionV5(encDict, options); - break; - } - this.dictionary = this.document.ref(encDict); - } - _setupEncryptionV1V2V4(v, encDict, options) { - let r, permissions; - switch (v) { - case 1: - r = 2; - this.keyBits = 40; - permissions = getPermissionsR2(options.permissions); - break; - case 2: - r = 3; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - case 4: - r = 4; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - } - const paddedUserPassword = processPasswordR2R3R4(options.userPassword); - const paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword; - const ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword); - this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions); - let userPasswordEntry; - if (r === 2) { - userPasswordEntry = getUserPasswordR2(this.encryptionKey); - } else { - userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey); - } - encDict.V = v; - if (v >= 2) { - encDict.Length = this.keyBits; - } - if (v === 4) { - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV2', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - } - encDict.R = r; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.P = permissions; - } - _setupEncryptionV5(encDict, options) { - this.keyBits = 256; - const permissions = getPermissionsR3(options.permissions); - const processedUserPassword = processPasswordR5(options.userPassword); - const processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword; - this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray); - const userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray); - const userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8); - const userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey); - const ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray); - const ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8); - const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey); - const permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray); - encDict.V = 5; - encDict.Length = this.keyBits; - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV3', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - encDict.R = 5; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry); - encDict.P = permissions; - encDict.Perms = wordArrayToBuffer(permsEntry); - } - getEncryptFn(obj, gen) { - let digest; - if (this.version < 5) { - digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5)); - } - if (this.version === 1 || this.version === 2) { - let key = CryptoJS.MD5(digest); - key.sigBytes = Math.min(16, this.keyBits / 8 + 5); - return buffer => wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key).ciphertext); - } - let key; - if (this.version === 4) { - key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))); - } else { - key = this.encryptionKey; - } - const iv = PDFSecurity.generateRandomWordArray(16); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - iv - }; - return buffer => wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext)); - } - end() { - this.dictionary.end(); - } -} -function getPermissionsR2() { - let permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let permissions = 0xffffffc0 >> 0; - if (permissionObject.printing) { - permissions |= 0b000000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - return permissions; -} -function getPermissionsR3() { - let permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let permissions = 0xfffff0c0 >> 0; - if (permissionObject.printing === 'lowResolution') { - permissions |= 0b000000000100; - } - if (permissionObject.printing === 'highResolution') { - permissions |= 0b100000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - if (permissionObject.fillingForms) { - permissions |= 0b000100000000; - } - if (permissionObject.contentAccessibility) { - permissions |= 0b001000000000; - } - if (permissionObject.documentAssembly) { - permissions |= 0b010000000000; - } - return permissions; -} -function getUserPasswordR2(encryptionKey) { - return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext; -} -function getUserPasswordR3R4(documentId, encryptionKey) { - const key = encryptionKey.clone(); - let cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))); - for (let i = 0; i < 20; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher.concat(CryptoJS.lib.WordArray.create(null, 16)); -} -function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) { - let digest = paddedOwnerPassword; - let round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - digest = CryptoJS.MD5(digest); - } - const key = digest.clone(); - key.sigBytes = keyBits / 8; - let cipher = paddedUserPassword; - round = r >= 3 ? 20 : 1; - for (let i = 0; i < round; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = digest.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher; -} -function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) { - let key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId)); - const round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - key = CryptoJS.MD5(key); - key.sigBytes = keyBits / 8; - } - return key; -} -function getUserPasswordR5(processedUserPassword, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt); -} -function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) { - const key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt); -} -function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) { - const key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getEncryptionKeyR5(generateRandomWordArray) { - return generateRandomWordArray(32); -} -function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) { - const cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4)); - const options = { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding - }; - return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext; -} -function processPasswordR2R3R4() { - let password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - const out = Buffer.alloc(32); - const length = password.length; - let index = 0; - while (index < length && index < 32) { - const code = password.charCodeAt(index); - if (code > 0xff) { - throw new Error('Password contains one or more invalid characters.'); - } - out[index] = code; - index++; - } - while (index < 32) { - out[index] = PASSWORD_PADDING[index - length]; - index++; - } - return CryptoJS.lib.WordArray.create(out); -} -function processPasswordR5() { - let password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - password = unescape(encodeURIComponent(saslprep(password))); - const length = Math.min(127, password.length); - const out = Buffer.alloc(length); - for (let i = 0; i < length; i++) { - out[i] = password.charCodeAt(i); - } - return CryptoJS.lib.WordArray.create(out); -} -function lsbFirstWord(data) { - return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff; -} -function wordArrayToBuffer(wordArray) { - const byteArray = []; - for (let i = 0; i < wordArray.sigBytes; i++) { - byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff); - } - return Buffer.from(byteArray); -} -const PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]; - -const { - number: number$2 -} = PDFObject; -class PDFGradient$1 { - constructor(doc) { - this.doc = doc; - this.stops = []; - this.embedded = false; - this.transform = [1, 0, 0, 1, 0, 0]; - } - stop(pos, color, opacity) { - if (opacity == null) { - opacity = 1; - } - color = this.doc._normalizeColor(color); - if (this.stops.length === 0) { - if (color.length === 3) { - this._colorSpace = 'DeviceRGB'; - } else if (color.length === 4) { - this._colorSpace = 'DeviceCMYK'; - } else if (color.length === 1) { - this._colorSpace = 'DeviceGray'; - } else { - throw new Error('Unknown color space'); - } - } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) { - throw new Error('All gradient stops must use the same color space'); - } - opacity = Math.max(0, Math.min(1, opacity)); - this.stops.push([pos, color, opacity]); - return this; - } - setTransform(m11, m12, m21, m22, dx, dy) { - this.transform = [m11, m12, m21, m22, dx, dy]; - return this; - } - embed(m) { - let fn; - const stopsLength = this.stops.length; - if (stopsLength === 0) { - return; - } - this.embedded = true; - this.matrix = m; - const last = this.stops[stopsLength - 1]; - if (last[0] < 1) { - this.stops.push([1, last[1], last[2]]); - } - const bounds = []; - const encode = []; - const stops = []; - for (let i = 0; i < stopsLength - 1; i++) { - encode.push(0, 1); - if (i + 2 !== stopsLength) { - bounds.push(this.stops[i + 1][0]); - } - fn = this.doc.ref({ - FunctionType: 2, - Domain: [0, 1], - C0: this.stops[i + 0][1], - C1: this.stops[i + 1][1], - N: 1 - }); - stops.push(fn); - fn.end(); - } - if (stopsLength === 1) { - fn = stops[0]; - } else { - fn = this.doc.ref({ - FunctionType: 3, - Domain: [0, 1], - Functions: stops, - Bounds: bounds, - Encode: encode - }); - fn.end(); - } - this.id = `Sh${++this.doc._gradCount}`; - const shader = this.shader(fn); - shader.end(); - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 2, - Shading: shader, - Matrix: this.matrix.map(number$2) - }); - pattern.end(); - if (this.stops.some(stop => stop[2] < 1)) { - let grad = this.opacityGradient(); - grad._colorSpace = 'DeviceGray'; - for (let stop of this.stops) { - grad.stop(stop[0], [stop[2]]); - } - grad = grad.embed(this.matrix); - const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; - const form = this.doc.ref({ - Type: 'XObject', - Subtype: 'Form', - FormType: 1, - BBox: pageBBox, - Group: { - Type: 'Group', - S: 'Transparency', - CS: 'DeviceGray' - }, - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: grad - } - } - }); - form.write('/Pattern cs /Sh1 scn'); - form.end(`${pageBBox.join(' ')} re f`); - const gstate = this.doc.ref({ - Type: 'ExtGState', - SMask: { - Type: 'Mask', - S: 'Luminosity', - G: form - } - }); - gstate.end(); - const opacityPattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 1, - TilingType: 2, - BBox: pageBBox, - XStep: pageBBox[2], - YStep: pageBBox[3], - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: pattern - }, - ExtGState: { - Gs1: gstate - } - } - }); - opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn'); - opacityPattern.end(`${pageBBox.join(' ')} re f`); - this.doc.page.patterns[this.id] = opacityPattern; - } else { - this.doc.page.patterns[this.id] = pattern; - } - return pattern; - } - apply(stroke) { - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = this.transform; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) { - this.embed(m); - } - this.doc._setColorSpace('Pattern', stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`/${this.id} ${op}`); - } -} -class PDFLinearGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, x2, y2) { - super(doc); - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 2, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.x2, this.y2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFLinearGradient$1(this.doc, this.x1, this.y1, this.x2, this.y2); - } -} -class PDFRadialGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, r1, x2, y2, r2) { - super(doc); - this.doc = doc; - this.x1 = x1; - this.y1 = y1; - this.r1 = r1; - this.x2 = x2; - this.y2 = y2; - this.r2 = r2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 3, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFRadialGradient$1(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); - } -} -var Gradient = { - PDFGradient: PDFGradient$1, - PDFLinearGradient: PDFLinearGradient$1, - PDFRadialGradient: PDFRadialGradient$1 -}; - -const underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB']; -class PDFTilingPattern$1 { - constructor(doc, bBox, xStep, yStep, stream) { - this.doc = doc; - this.bBox = bBox; - this.xStep = xStep; - this.yStep = yStep; - this.stream = stream; - } - createPattern() { - const resources = this.doc.ref(); - resources.end(); - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0]; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 2, - TilingType: 2, - BBox: this.bBox, - XStep: this.xStep, - YStep: this.yStep, - Matrix: m.map(v => +v.toFixed(5)), - Resources: resources - }); - pattern.end(this.stream); - return pattern; - } - embedPatternColorSpaces() { - underlyingColorSpaces.forEach(csName => { - const csId = this.getPatternColorSpaceId(csName); - if (this.doc.page.colorSpaces[csId]) return; - const cs = this.doc.ref(['Pattern', csName]); - cs.end(); - this.doc.page.colorSpaces[csId] = cs; - }); - } - getPatternColorSpaceId(underlyingColorspace) { - return `CsP${underlyingColorspace}`; - } - embed() { - if (!this.id) { - this.doc._patternCount = this.doc._patternCount + 1; - this.id = 'P' + this.doc._patternCount; - this.pattern = this.createPattern(); - } - if (!this.doc.page.patterns[this.id]) { - this.doc.page.patterns[this.id] = this.pattern; - } - } - apply(stroke, patternColor) { - this.embedPatternColorSpaces(); - this.embed(); - const normalizedColor = this.doc._normalizeColor(patternColor); - if (!normalizedColor) throw Error(`invalid pattern color. (value: ${patternColor})`); - const csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor)); - this.doc._setColorSpace(csId, stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`${normalizedColor.join(' ')} /${this.id} ${op}`); - } -} -var pattern = { - PDFTilingPattern: PDFTilingPattern$1 -}; - -const { - PDFGradient, - PDFLinearGradient, - PDFRadialGradient -} = Gradient; -const { - PDFTilingPattern -} = pattern; -var ColorMixin = { - initColor() { - this.spotColors = {}; - this._opacityRegistry = {}; - this._opacityCount = 0; - this._patternCount = 0; - this._gradCount = 0; - }, - _normalizeColor(color) { - if (typeof color === 'string') { - if (color.charAt(0) === '#') { - if (color.length === 4) { - color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3'); - } - const hex = parseInt(color.slice(1), 16); - color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; - } else if (namedColors[color]) { - color = namedColors[color]; - } else if (this.spotColors[color]) { - return this.spotColors[color]; - } - } - if (Array.isArray(color)) { - if (color.length === 3) { - color = color.map(part => part / 255); - } else if (color.length === 4) { - color = color.map(part => part / 100); - } - return color; - } - return null; - }, - _setColor(color, stroke) { - if (color instanceof PDFGradient) { - color.apply(stroke); - return true; - } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) { - color[0].apply(stroke, color[1]); - return true; - } - return this._setColorCore(color, stroke); - }, - _setColorCore(color, stroke) { - color = this._normalizeColor(color); - if (!color) { - return false; - } - const op = stroke ? 'SCN' : 'scn'; - const space = this._getColorSpace(color); - this._setColorSpace(space, stroke); - if (color instanceof SpotColor) { - this.page.colorSpaces[color.id] = color.ref; - this.addContent(`1 ${op}`); - } else { - this.addContent(`${color.join(' ')} ${op}`); - } - return true; - }, - _setColorSpace(space, stroke) { - const op = stroke ? 'CS' : 'cs'; - return this.addContent(`/${space} ${op}`); - }, - _getColorSpace(color) { - if (color instanceof SpotColor) { - return color.id; - } - return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; - }, - fillColor(color, opacity) { - const set = this._setColor(color, false); - if (set) { - this.fillOpacity(opacity); - } - this._fillColor = [color, opacity]; - return this; - }, - strokeColor(color, opacity) { - const set = this._setColor(color, true); - if (set) { - this.strokeOpacity(opacity); - } - return this; - }, - opacity(opacity) { - this._doOpacity(opacity, opacity); - return this; - }, - fillOpacity(opacity) { - this._doOpacity(opacity, null); - return this; - }, - strokeOpacity(opacity) { - this._doOpacity(null, opacity); - return this; - }, - _doOpacity(fillOpacity, strokeOpacity) { - let dictionary, name; - if (fillOpacity == null && strokeOpacity == null) { - return; - } - if (fillOpacity != null) { - fillOpacity = Math.max(0, Math.min(1, fillOpacity)); - } - if (strokeOpacity != null) { - strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); - } - const key = `${fillOpacity}_${strokeOpacity}`; - if (this._opacityRegistry[key]) { - [dictionary, name] = this._opacityRegistry[key]; - } else { - dictionary = { - Type: 'ExtGState' - }; - if (fillOpacity != null) { - dictionary.ca = fillOpacity; - } - if (strokeOpacity != null) { - dictionary.CA = strokeOpacity; - } - dictionary = this.ref(dictionary); - dictionary.end(); - const id = ++this._opacityCount; - name = `Gs${id}`; - this._opacityRegistry[key] = [dictionary, name]; - } - this.page.ext_gstates[name] = dictionary; - return this.addContent(`/${name} gs`); - }, - linearGradient(x1, y1, x2, y2) { - return new PDFLinearGradient(this, x1, y1, x2, y2); - }, - radialGradient(x1, y1, r1, x2, y2, r2) { - return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2); - }, - pattern(bbox, xStep, yStep, stream) { - return new PDFTilingPattern(this, bbox, xStep, yStep, stream); - }, - addSpotColor(name, C, M, Y, K) { - const color = new SpotColor(this, name, C, M, Y, K); - this.spotColors[name] = color; - return this; - } -}; -var namedColors = { - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -let cx, cy, px, py, sx, sy; -cx = cy = px = py = sx = sy = 0; -const parameters = { - A: 7, - a: 7, - C: 6, - c: 6, - H: 1, - h: 1, - L: 2, - l: 2, - M: 2, - m: 2, - Q: 4, - q: 4, - S: 4, - s: 4, - T: 2, - t: 2, - V: 1, - v: 1, - Z: 0, - z: 0 -}; -const parse = function (path) { - let cmd; - const ret = []; - let args = []; - let curArg = ''; - let foundDecimal = false; - let params = 0; - for (let c of path) { - if (parameters[c] != null) { - params = parameters[c]; - if (cmd) { - if (curArg.length > 0) { - args[args.length] = +curArg; - } - ret[ret.length] = { - cmd, - args - }; - args = []; - curArg = ''; - foundDecimal = false; - } - cmd = c; - } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) { - if (curArg.length === 0) { - continue; - } - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - foundDecimal = c === '.'; - curArg = ['-', '.'].includes(c) ? c : ''; - } else { - curArg += c; - if (c === '.') { - foundDecimal = true; - } - } - } - if (curArg.length > 0) { - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - } - ret[ret.length] = { - cmd, - args - }; - return ret; -}; -const apply = function (commands, doc) { - cx = cy = px = py = sx = sy = 0; - for (let i = 0; i < commands.length; i++) { - const c = commands[i]; - if (typeof runners[c.cmd] === 'function') { - runners[c.cmd](doc, c.args); - } - } -}; -const runners = { - M(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - m(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - C(doc, a) { - cx = a[4]; - cy = a[5]; - px = a[2]; - py = a[3]; - return doc.bezierCurveTo(...a); - }, - c(doc, a) { - doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); - px = cx + a[2]; - py = cy + a[3]; - cx += a[4]; - return cy += a[5]; - }, - S(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); - px = a[0]; - py = a[1]; - cx = a[2]; - return cy = a[3]; - }, - s(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - Q(doc, a) { - px = a[0]; - py = a[1]; - cx = a[2]; - cy = a[3]; - return doc.quadraticCurveTo(a[0], a[1], cx, cy); - }, - q(doc, a) { - doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - T(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, a[0], a[1]); - px = cx - (px - cx); - py = cy - (py - cy); - cx = a[0]; - return cy = a[1]; - }, - t(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); - cx += a[0]; - return cy += a[1]; - }, - A(doc, a) { - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - a(doc, a) { - a[5] += cx; - a[6] += cy; - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - L(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - l(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - H(doc, a) { - cx = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - h(doc, a) { - cx += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - V(doc, a) { - cy = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - v(doc, a) { - cy += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - Z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - }, - z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - } -}; -const solveArc = function (doc, x, y, coords) { - const [rx, ry, rot, large, sweep, ex, ey] = coords; - const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (let seg of segs) { - const bez = segmentToBezier(...seg); - doc.bezierCurveTo(...bez); - } -}; -const arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) { - const th = rotateX * (Math.PI / 180); - const sin_th = Math.sin(th); - const cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - let pl = px * px / (rx * rx) + py * py / (ry * ry); - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - const a00 = cos_th / rx; - const a01 = sin_th / rx; - const a10 = -sin_th / ry; - const a11 = cos_th / ry; - const x0 = a00 * ox + a01 * oy; - const y0 = a10 * ox + a11 * oy; - const x1 = a00 * x + a01 * y; - const y1 = a10 * x + a11 * y; - const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); - let sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) { - sfactor_sq = 0; - } - let sfactor = Math.sqrt(sfactor_sq); - if (sweep === large) { - sfactor = -sfactor; - } - const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); - const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); - const th0 = Math.atan2(y0 - yc, x0 - xc); - const th1 = Math.atan2(y1 - yc, x1 - xc); - let th_arc = th1 - th0; - if (th_arc < 0 && sweep === 1) { - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - const result = []; - for (let i = 0; i < segments; i++) { - const th2 = th0 + i * th_arc / segments; - const th3 = th0 + (i + 1) * th_arc / segments; - result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; - } - return result; -}; -const segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) { - const a00 = cos_th * rx; - const a01 = -sin_th * ry; - const a10 = sin_th * rx; - const a11 = cos_th * ry; - const th_half = 0.5 * (th1 - th0); - const t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); - const x1 = cx + Math.cos(th0) - t * Math.sin(th0); - const y1 = cy + Math.sin(th0) + t * Math.cos(th0); - const x3 = cx + Math.cos(th1); - const y3 = cy + Math.sin(th1); - const x2 = x3 + t * Math.sin(th1); - const y2 = y3 - t * Math.cos(th1); - return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; -}; -class SVGPath { - static apply(doc, path) { - const commands = parse(path); - apply(commands, doc); - } -} - -const { - number: number$1 -} = PDFObject; -const KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); -var VectorMixin = { - initVector() { - this._ctm = [1, 0, 0, 1, 0, 0]; - this._ctmStack = []; - }, - save() { - this._ctmStack.push(this._ctm.slice()); - return this.addContent('q'); - }, - restore() { - this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; - return this.addContent('Q'); - }, - closePath() { - return this.addContent('h'); - }, - lineWidth(w) { - return this.addContent(`${number$1(w)} w`); - }, - _CAP_STYLES: { - BUTT: 0, - ROUND: 1, - SQUARE: 2 - }, - lineCap(c) { - if (typeof c === 'string') { - c = this._CAP_STYLES[c.toUpperCase()]; - } - return this.addContent(`${c} J`); - }, - _JOIN_STYLES: { - MITER: 0, - ROUND: 1, - BEVEL: 2 - }, - lineJoin(j) { - if (typeof j === 'string') { - j = this._JOIN_STYLES[j.toUpperCase()]; - } - return this.addContent(`${j} j`); - }, - miterLimit(m) { - return this.addContent(`${number$1(m)} M`); - }, - dash(length) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - const originalLength = length; - if (!Array.isArray(length)) { - length = [length, options.space || length]; - } - const valid = length.every(x => Number.isFinite(x) && x > 0); - if (!valid) { - throw new Error(`dash(${JSON.stringify(originalLength)}, ${JSON.stringify(options)}) invalid, lengths must be numeric and greater than zero`); - } - length = length.map(number$1).join(' '); - return this.addContent(`[${length}] ${number$1(options.phase || 0)} d`); - }, - undash() { - return this.addContent('[] 0 d'); - }, - moveTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} m`); - }, - lineTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} l`); - }, - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - return this.addContent(`${number$1(cp1x)} ${number$1(cp1y)} ${number$1(cp2x)} ${number$1(cp2y)} ${number$1(x)} ${number$1(y)} c`); - }, - quadraticCurveTo(cpx, cpy, x, y) { - return this.addContent(`${number$1(cpx)} ${number$1(cpy)} ${number$1(x)} ${number$1(y)} v`); - }, - rect(x, y, w, h) { - return this.addContent(`${number$1(x)} ${number$1(y)} ${number$1(w)} ${number$1(h)} re`); - }, - roundedRect(x, y, w, h, r) { - if (r == null) { - r = 0; - } - r = Math.min(r, 0.5 * w, 0.5 * h); - const c = r * (1.0 - KAPPA); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); - this.lineTo(x + w, y + h - r); - this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); - this.lineTo(x + r, y + h); - this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); - this.lineTo(x, y + r); - this.bezierCurveTo(x, y + c, x + c, y, x + r, y); - return this.closePath(); - }, - ellipse(x, y, r1, r2) { - if (r2 == null) { - r2 = r1; - } - x -= r1; - y -= r2; - const ox = r1 * KAPPA; - const oy = r2 * KAPPA; - const xe = x + r1 * 2; - const ye = y + r2 * 2; - const xm = x + r1; - const ym = y + r2; - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - return this.closePath(); - }, - circle(x, y, radius) { - return this.ellipse(x, y, radius); - }, - arc(x, y, radius, startAngle, endAngle, anticlockwise) { - if (anticlockwise == null) { - anticlockwise = false; - } - const TWO_PI = 2.0 * Math.PI; - const HALF_PI = 0.5 * Math.PI; - let deltaAng = endAngle - startAngle; - if (Math.abs(deltaAng) > TWO_PI) { - deltaAng = TWO_PI; - } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) { - const dir = anticlockwise ? -1 : 1; - deltaAng = dir * TWO_PI + deltaAng; - } - const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); - const segAng = deltaAng / numSegs; - const handleLen = segAng / HALF_PI * KAPPA * radius; - let curAng = startAngle; - let deltaCx = -Math.sin(curAng) * handleLen; - let deltaCy = Math.cos(curAng) * handleLen; - let ax = x + Math.cos(curAng) * radius; - let ay = y + Math.sin(curAng) * radius; - this.moveTo(ax, ay); - for (let segIdx = 0; segIdx < numSegs; segIdx++) { - const cp1x = ax + deltaCx; - const cp1y = ay + deltaCy; - curAng += segAng; - ax = x + Math.cos(curAng) * radius; - ay = y + Math.sin(curAng) * radius; - deltaCx = -Math.sin(curAng) * handleLen; - deltaCy = Math.cos(curAng) * handleLen; - const cp2x = ax - deltaCx; - const cp2y = ay - deltaCy; - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); - } - return this; - }, - polygon() { - for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) { - points[_key] = arguments[_key]; - } - this.moveTo(...(points.shift() || [])); - for (let point of points) { - this.lineTo(...(point || [])); - } - return this.closePath(); - }, - path(path) { - SVGPath.apply(this, path); - return this; - }, - _windingRule(rule) { - if (/even-?odd/.test(rule)) { - return '*'; - } - return ''; - }, - fill(color, rule) { - if (/(even-?odd)|(non-?zero)/.test(color)) { - rule = color; - color = null; - } - if (color) { - this.fillColor(color); - } - return this.addContent(`f${this._windingRule(rule)}`); - }, - stroke(color) { - if (color) { - this.strokeColor(color); - } - return this.addContent('S'); - }, - fillAndStroke(fillColor, strokeColor, rule) { - if (strokeColor == null) { - strokeColor = fillColor; - } - const isFillRule = /(even-?odd)|(non-?zero)/; - if (isFillRule.test(fillColor)) { - rule = fillColor; - fillColor = null; - } - if (isFillRule.test(strokeColor)) { - rule = strokeColor; - strokeColor = fillColor; - } - if (fillColor) { - this.fillColor(fillColor); - this.strokeColor(strokeColor); - } - return this.addContent(`B${this._windingRule(rule)}`); - }, - clip(rule) { - return this.addContent(`W${this._windingRule(rule)} n`); - }, - transform(m11, m12, m21, m22, dx, dy) { - if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) { - return this; - } - const m = this._ctm; - const [m0, m1, m2, m3, m4, m5] = m; - m[0] = m0 * m11 + m2 * m12; - m[1] = m1 * m11 + m3 * m12; - m[2] = m0 * m21 + m2 * m22; - m[3] = m1 * m21 + m3 * m22; - m[4] = m0 * dx + m2 * dy + m4; - m[5] = m1 * dx + m3 * dy + m5; - const values = [m11, m12, m21, m22, dx, dy].map(v => number$1(v)).join(' '); - return this.addContent(`${values} cm`); - }, - translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - }, - rotate(angle) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let y; - const rad = angle * Math.PI / 180; - const cos = Math.cos(rad); - const sin = Math.sin(rad); - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - const x1 = x * cos - y * sin; - const y1 = x * sin + y * cos; - x -= x1; - y -= y1; - } - return this.transform(cos, sin, -sin, cos, x, y); - }, - scale(xFactor, yFactor) { - let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - let y; - if (yFactor == null) { - yFactor = xFactor; - } - if (typeof yFactor === 'object') { - options = yFactor; - yFactor = xFactor; - } - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - x -= xFactor * x; - y -= yFactor * y; - } - return this.transform(xFactor, 0, 0, yFactor, x, y); - } -}; - -const WIN_ANSI_MAP = { - 402: 131, - 8211: 150, - 8212: 151, - 8216: 145, - 8217: 146, - 8218: 130, - 8220: 147, - 8221: 148, - 8222: 132, - 8224: 134, - 8225: 135, - 8226: 149, - 8230: 133, - 8364: 128, - 8240: 137, - 8249: 139, - 8250: 155, - 710: 136, - 8482: 153, - 338: 140, - 339: 156, - 732: 152, - 352: 138, - 353: 154, - 376: 159, - 381: 142, - 382: 158 -}; -const characters = `\ -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef - -space exclam quotedbl numbersign -dollar percent ampersand quotesingle -parenleft parenright asterisk plus -comma hyphen period slash -zero one two three -four five six seven -eight nine colon semicolon -less equal greater question - -at A B C -D E F G -H I J K -L M N O -P Q R S -T U V W -X Y Z bracketleft -backslash bracketright asciicircum underscore - -grave a b c -d e f g -h i j k -l m n o -p q r s -t u v w -x y z braceleft -bar braceright asciitilde .notdef - -Euro .notdef quotesinglbase florin -quotedblbase ellipsis dagger daggerdbl -circumflex perthousand Scaron guilsinglleft -OE .notdef Zcaron .notdef -.notdef quoteleft quoteright quotedblleft -quotedblright bullet endash emdash -tilde trademark scaron guilsinglright -oe .notdef zcaron ydieresis - -space exclamdown cent sterling -currency yen brokenbar section -dieresis copyright ordfeminine guillemotleft -logicalnot hyphen registered macron -degree plusminus twosuperior threesuperior -acute mu paragraph periodcentered -cedilla onesuperior ordmasculine guillemotright -onequarter onehalf threequarters questiondown - -Agrave Aacute Acircumflex Atilde -Adieresis Aring AE Ccedilla -Egrave Eacute Ecircumflex Edieresis -Igrave Iacute Icircumflex Idieresis -Eth Ntilde Ograve Oacute -Ocircumflex Otilde Odieresis multiply -Oslash Ugrave Uacute Ucircumflex -Udieresis Yacute Thorn germandbls - -agrave aacute acircumflex atilde -adieresis aring ae ccedilla -egrave eacute ecircumflex edieresis -igrave iacute icircumflex idieresis -eth ntilde ograve oacute -ocircumflex otilde odieresis divide -oslash ugrave uacute ucircumflex -udieresis yacute thorn ydieresis\ -`.split(/\s+/); -class AFMFont { - constructor(contents) { - this.attributes = {}; - this.glyphWidths = {}; - this.boundingBoxes = {}; - this.kernPairs = {}; - this.parse(contents); - this.bbox = this.attributes['FontBBox'].split(/\s+/).map(e => +e); - this.ascender = +(this.attributes['Ascender'] || 0); - this.descender = +(this.attributes['Descender'] || 0); - this.xHeight = +(this.attributes['XHeight'] || 0); - this.capHeight = +(this.attributes['CapHeight'] || 0); - this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender); - } - parse(contents) { - let section = ''; - for (let line of contents.split('\n')) { - var match; - var a; - if (match = line.match(/^Start(\w+)/)) { - section = match[1]; - continue; - } else if (match = line.match(/^End(\w+)/)) { - section = ''; - continue; - } - switch (section) { - case 'FontMetrics': - match = line.match(/(^\w+)\s+(.*)/); - var key = match[1]; - var value = match[2]; - if (a = this.attributes[key]) { - if (!Array.isArray(a)) { - a = this.attributes[key] = [a]; - } - a.push(value); - } else { - this.attributes[key] = value; - } - break; - case 'CharMetrics': - if (!/^CH?\s/.test(line)) { - continue; - } - var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; - this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; - break; - case 'KernPairs': - match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); - if (match) { - this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); - } - break; - } - } - } - encodeText(text) { - const res = []; - for (let i = 0, len = text.length; i < len; i++) { - let char = text.charCodeAt(i); - char = WIN_ANSI_MAP[char] || char; - res.push(char.toString(16)); - } - return res; - } - glyphsForString(string) { - const glyphs = []; - for (let i = 0, len = string.length; i < len; i++) { - const charCode = string.charCodeAt(i); - glyphs.push(this.characterToGlyph(charCode)); - } - return glyphs; - } - characterToGlyph(character) { - return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; - } - widthOfGlyph(glyph) { - return this.glyphWidths[glyph] || 0; - } - getKernPair(left, right) { - return this.kernPairs[left + '\0' + right] || 0; - } - advancesForGlyphs(glyphs) { - const advances = []; - for (let index = 0; index < glyphs.length; index++) { - const left = glyphs[index]; - const right = glyphs[index + 1]; - advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); - } - return advances; - } -} - -class PDFFont { - constructor() {} - encode() { - throw new Error('Must be implemented by subclasses'); - } - widthOfString() { - throw new Error('Must be implemented by subclasses'); - } - ref() { - return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); - } - finalize() { - if (this.embedded || this.dictionary == null) { - return; - } - this.embed(); - this.embedded = true; - } - embed() { - throw new Error('Must be implemented by subclasses'); - } - lineHeight(size) { - let includeGap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - const gap = includeGap ? this.lineGap : 0; - return (this.ascender + gap - this.descender) / 1000 * size; - } -} - -const STANDARD_FONTS = { - Courier() { - return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8'); - }, - 'Courier-Bold'() { - return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8'); - }, - 'Courier-Oblique'() { - return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8'); - }, - 'Courier-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8'); - }, - Helvetica() { - return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8'); - }, - 'Helvetica-Bold'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8'); - }, - 'Helvetica-Oblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8'); - }, - 'Helvetica-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8'); - }, - 'Times-Roman'() { - return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8'); - }, - 'Times-Bold'() { - return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8'); - }, - 'Times-Italic'() { - return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8'); - }, - 'Times-BoldItalic'() { - return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8'); - }, - Symbol() { - return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8'); - }, - ZapfDingbats() { - return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8'); - } -}; -class StandardFont extends PDFFont { - constructor(document, name, id) { - super(); - this.document = document; - this.name = name; - this.id = id; - this.font = new AFMFont(STANDARD_FONTS[this.name]()); - ({ - ascender: this.ascender, - descender: this.descender, - bbox: this.bbox, - lineGap: this.lineGap, - xHeight: this.xHeight, - capHeight: this.capHeight - } = this.font); - } - embed() { - this.dictionary.data = { - Type: 'Font', - BaseFont: this.name, - Subtype: 'Type1', - Encoding: 'WinAnsiEncoding' - }; - return this.dictionary.end(); - } - encode(text) { - const encoded = this.font.encodeText(text); - const glyphs = this.font.glyphsForString(`${text}`); - const advances = this.font.advancesForGlyphs(glyphs); - const positions = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - positions.push({ - xAdvance: advances[i], - yAdvance: 0, - xOffset: 0, - yOffset: 0, - advanceWidth: this.font.widthOfGlyph(glyph) - }); - } - return [encoded, positions]; - } - widthOfString(string, size) { - const glyphs = this.font.glyphsForString(`${string}`); - const advances = this.font.advancesForGlyphs(glyphs); - let width = 0; - for (let advance of advances) { - width += advance; - } - const scale = size / 1000; - return width * scale; - } - static isStandardFont(name) { - return name in STANDARD_FONTS; - } -} - -const toHex = function (num) { - return `0000${num.toString(16)}`.slice(-4); -}; -class EmbeddedFont extends PDFFont { - constructor(document, font, id) { - super(); - this.document = document; - this.font = font; - this.id = id; - this.subset = this.font.createSubset(); - this.unicode = [[0]]; - this.widths = [this.font.getGlyph(0).advanceWidth]; - this.name = this.font.postscriptName; - this.scale = 1000 / this.font.unitsPerEm; - this.ascender = this.font.ascent * this.scale; - this.descender = this.font.descent * this.scale; - this.xHeight = this.font.xHeight * this.scale; - this.capHeight = this.font.capHeight * this.scale; - this.lineGap = this.font.lineGap * this.scale; - this.bbox = this.font.bbox; - if (document.options.fontLayoutCache !== false) { - this.layoutCache = Object.create(null); - } - } - layoutRun(text, features) { - const run = this.font.layout(text, features); - for (let i = 0; i < run.positions.length; i++) { - const position = run.positions[i]; - for (let key in position) { - position[key] *= this.scale; - } - position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; - } - return run; - } - layoutCached(text) { - if (!this.layoutCache) { - return this.layoutRun(text); - } - let cached; - if (cached = this.layoutCache[text]) { - return cached; - } - const run = this.layoutRun(text); - this.layoutCache[text] = run; - return run; - } - layout(text, features, onlyWidth) { - if (features) { - return this.layoutRun(text, features); - } - let glyphs = onlyWidth ? null : []; - let positions = onlyWidth ? null : []; - let advanceWidth = 0; - let last = 0; - let index = 0; - while (index <= text.length) { - var needle; - if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) { - const run = this.layoutCached(text.slice(last, ++index)); - if (!onlyWidth) { - glyphs = glyphs.concat(run.glyphs); - positions = positions.concat(run.positions); - } - advanceWidth += run.advanceWidth; - last = index; - } else { - index++; - } - } - return { - glyphs, - positions, - advanceWidth - }; - } - encode(text, features) { - const { - glyphs, - positions - } = this.layout(text, features); - const res = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - const gid = this.subset.includeGlyph(glyph.id); - res.push(`0000${gid.toString(16)}`.slice(-4)); - if (this.widths[gid] == null) { - this.widths[gid] = glyph.advanceWidth * this.scale; - } - if (this.unicode[gid] == null) { - this.unicode[gid] = glyph.codePoints; - } - } - return [res, positions]; - } - widthOfString(string, size, features) { - const width = this.layout(string, features, true).advanceWidth; - const scale = size / 1000; - return width * scale; - } - embed() { - const isCFF = this.subset.cff != null; - const fontFile = this.document.ref(); - if (isCFF) { - fontFile.data.Subtype = 'CIDFontType0C'; - } - fontFile.end(this.subset.encode()); - const familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8; - let flags = 0; - if (this.font.post.isFixedPitch) { - flags |= 1 << 0; - } - if (1 <= familyClass && familyClass <= 7) { - flags |= 1 << 1; - } - flags |= 1 << 2; - if (familyClass === 10) { - flags |= 1 << 3; - } - if (this.font.head.macStyle.italic) { - flags |= 1 << 6; - } - const tag = [1, 2, 3, 4, 5, 6].map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17)).join(''); - const name = tag + '+' + this.font.postscriptName?.replaceAll(' ', '_'); - const { - bbox - } = this.font; - const descriptor = this.document.ref({ - Type: 'FontDescriptor', - FontName: name, - Flags: flags, - FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], - ItalicAngle: this.font.italicAngle, - Ascent: this.ascender, - Descent: this.descender, - CapHeight: (this.font.capHeight || this.font.ascent) * this.scale, - XHeight: (this.font.xHeight || 0) * this.scale, - StemV: 0 - }); - if (isCFF) { - descriptor.data.FontFile3 = fontFile; - } else { - descriptor.data.FontFile2 = fontFile; - } - if (this.document.subset && this.document.subset === 1) { - const CIDSet = Buffer.from('FFFFFFFFC0', 'hex'); - const CIDSetRef = this.document.ref(); - CIDSetRef.write(CIDSet); - CIDSetRef.end(); - descriptor.data.CIDSet = CIDSetRef; - } - descriptor.end(); - const descendantFontData = { - Type: 'Font', - Subtype: 'CIDFontType0', - BaseFont: name, - CIDSystemInfo: { - Registry: new String('Adobe'), - Ordering: new String('Identity'), - Supplement: 0 - }, - FontDescriptor: descriptor, - W: [0, this.widths] - }; - if (!isCFF) { - descendantFontData.Subtype = 'CIDFontType2'; - descendantFontData.CIDToGIDMap = 'Identity'; - } - const descendantFont = this.document.ref(descendantFontData); - descendantFont.end(); - this.dictionary.data = { - Type: 'Font', - Subtype: 'Type0', - BaseFont: name, - Encoding: 'Identity-H', - DescendantFonts: [descendantFont], - ToUnicode: this.toUnicodeCmap() - }; - return this.dictionary.end(); - } - toUnicodeCmap() { - const cmap = this.document.ref(); - const entries = []; - for (let codePoints of this.unicode) { - const encoded = []; - for (let value of codePoints) { - if (value > 0xffff) { - value -= 0x10000; - encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); - value = 0xdc00 | value & 0x3ff; - } - encoded.push(toHex(value)); - } - entries.push(`<${encoded.join(' ')}>`); - } - const chunkSize = 256; - const chunks = Math.ceil(entries.length / chunkSize); - const ranges = []; - for (let i = 0; i < chunks; i++) { - const start = i * chunkSize; - const end = Math.min((i + 1) * chunkSize, entries.length); - ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`); - } - cmap.end(`\ -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo << - /Registry (Adobe) - /Ordering (UCS) - /Supplement 0 ->> def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<0000> -endcodespacerange -1 beginbfrange -${ranges.join('\n')} -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end\ -`); - return cmap; - } -} - -class PDFFontFactory { - static open(document, src, family, id) { - let font; - if (typeof src === 'string') { - if (StandardFont.isStandardFont(src)) { - return new StandardFont(document, src, id); - } - src = fs.readFileSync(src); - } - if (src instanceof Uint8Array) { - font = fontkit.create(src, family); - } else if (src instanceof ArrayBuffer) { - font = fontkit.create(new Uint8Array(src), family); - } - if (font == null) { - throw new Error('Not a supported font format or standard PDF font.'); - } - return new EmbeddedFont(document, font, id); - } -} - -const isEqualFont = (font1, font2) => { - if (font1.font._tables?.head?.checkSumAdjustment !== font2.font._tables?.head?.checkSumAdjustment) { - return false; - } - if (JSON.stringify(font1.font._tables?.name?.records) !== JSON.stringify(font2.font._tables?.name?.records)) { - return false; - } - return true; -}; -var FontsMixin = { - initFonts() { - let defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica'; - let defaultFontFamily = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - let defaultFontSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 12; - this._fontFamilies = {}; - this._fontCount = 0; - this._fontSource = defaultFont; - this._fontFamily = defaultFontFamily; - this._fontSize = defaultFontSize; - this._font = null; - this._remSize = defaultFontSize; - this._registeredFonts = {}; - if (defaultFont) { - this.font(defaultFont, defaultFontFamily); - } - }, - font(src, family, size) { - let cacheKey, font; - if (typeof family === 'number') { - size = family; - family = null; - } - if (typeof src === 'string' && this._registeredFonts[src]) { - cacheKey = src; - ({ - src, - family - } = this._registeredFonts[src]); - } else { - cacheKey = family || src; - if (typeof cacheKey !== 'string') { - cacheKey = null; - } - } - this._fontSource = src; - this._fontFamily = family; - if (size != null) { - this.fontSize(size); - } - if (font = this._fontFamilies[cacheKey]) { - this._font = font; - return this; - } - const id = `F${++this._fontCount}`; - this._font = PDFFontFactory.open(this, src, family, id); - if ((font = this._fontFamilies[this._font.name]) && isEqualFont(this._font, font)) { - this._font = font; - return this; - } - if (cacheKey) { - this._fontFamilies[cacheKey] = this._font; - } - if (this._font.name) { - this._fontFamilies[this._font.name] = this._font; - } - return this; - }, - fontSize(_fontSize) { - this._fontSize = this.sizeToPoint(_fontSize); - return this; - }, - currentLineHeight(includeGap) { - return this._font.lineHeight(this._fontSize, includeGap); - }, - registerFont(name, src, family) { - this._registeredFonts[name] = { - src, - family - }; - return this; - }, - sizeToPoint(size) { - let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - let page = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.page; - let percentageWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined; - if (!percentageWidth) percentageWidth = this._fontSize; - if (typeof defaultValue !== 'number') defaultValue = this.sizeToPoint(defaultValue); - if (size === undefined) return defaultValue; - if (typeof size === 'number') return size; - if (typeof size === 'boolean') return Number(size); - const match = String(size).match(/((\d+)?(\.\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/); - if (!match) throw new Error(`Unsupported size '${size}'`); - let multiplier; - switch (match[4]) { - case 'em': - multiplier = this._fontSize; - break; - case 'in': - multiplier = IN_TO_PT; - break; - case 'px': - multiplier = PX_TO_IN * IN_TO_PT; - break; - case 'cm': - multiplier = CM_TO_IN * IN_TO_PT; - break; - case 'mm': - multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT; - break; - case 'pc': - multiplier = PC_TO_PT; - break; - case 'ex': - multiplier = this.currentLineHeight(); - break; - case 'ch': - multiplier = this.widthOfString('0'); - break; - case 'rem': - multiplier = this._remSize; - break; - case 'vw': - multiplier = page.width / 100; - break; - case 'vh': - multiplier = page.height / 100; - break; - case 'vmin': - multiplier = Math.min(page.width, page.height) / 100; - break; - case 'vmax': - multiplier = Math.max(page.width, page.height) / 100; - break; - case '%': - multiplier = percentageWidth / 100; - break; - case 'pt': - default: - multiplier = 1; - } - return multiplier * Number(match[1]); - } -}; - -const SOFT_HYPHEN = '\u00AD'; -const HYPHEN = '-'; -class LineWrapper extends EventEmitter { - constructor(document, options) { - super(); - this.document = document; - this.horizontalScaling = options.horizontalScaling || 100; - this.indent = (options.indent || 0) * this.horizontalScaling / 100; - this.characterSpacing = (options.characterSpacing || 0) * this.horizontalScaling / 100; - this.wordSpacing = (options.wordSpacing === 0) * this.horizontalScaling / 100; - this.columns = options.columns || 1; - this.columnGap = (options.columnGap != null ? options.columnGap : 18) * this.horizontalScaling / 100; - this.lineWidth = (options.width * this.horizontalScaling / 100 - this.columnGap * (this.columns - 1)) / this.columns; - this.spaceLeft = this.lineWidth; - this.startX = this.document.x; - this.startY = this.document.y; - this.column = 1; - this.ellipsis = options.ellipsis; - this.continuedX = 0; - this.features = options.features; - if (options.height != null) { - this.height = options.height; - this.maxY = PDFNumber(this.startY + options.height); - } else { - this.maxY = PDFNumber(this.document.page.maxY()); - } - this.on('firstLine', options => { - const indent = this.continuedX || this.indent; - this.document.x += indent; - this.lineWidth -= indent; - if (options.indentAllLines) { - return; - } - this.once('line', () => { - this.document.x -= indent; - this.lineWidth += indent; - if (options.continued && !this.continuedX) { - this.continuedX = this.indent; - } - if (!options.continued) { - this.continuedX = 0; - } - }); - }); - this.on('lastLine', options => { - const { - align - } = options; - if (align === 'justify') { - options.align = 'left'; - } - this.lastLine = true; - this.once('line', () => { - this.document.y += options.paragraphGap || 0; - options.align = align; - return this.lastLine = false; - }); - }); - } - wordWidth(word) { - return PDFNumber(this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing); - } - canFit(word, w) { - if (word[word.length - 1] != SOFT_HYPHEN) { - return w <= this.spaceLeft; - } - return w + this.wordWidth(HYPHEN) <= this.spaceLeft; - } - eachWord(text, fn) { - let bk; - const breaker = new LineBreaker(text); - let last = null; - const wordWidths = Object.create(null); - while (bk = breaker.nextBreak()) { - var shouldContinue; - let word = text.slice((last != null ? last.position : undefined) || 0, bk.position); - let w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); - if (w > this.lineWidth + this.continuedX) { - let lbk = last; - const fbk = {}; - while (word.length) { - var l, mightGrow; - if (w > this.spaceLeft) { - l = Math.ceil(this.spaceLeft / (w / word.length)); - w = this.wordWidth(word.slice(0, l)); - mightGrow = w <= this.spaceLeft && l < word.length; - } else { - l = word.length; - } - let mustShrink = w > this.spaceLeft && l > 0; - while (mustShrink || mightGrow) { - if (mustShrink) { - w = this.wordWidth(word.slice(0, --l)); - mustShrink = w > this.spaceLeft && l > 0; - } else { - w = this.wordWidth(word.slice(0, ++l)); - mustShrink = w > this.spaceLeft && l > 0; - mightGrow = w <= this.spaceLeft && l < word.length; - } - } - if (l === 0 && this.spaceLeft === this.lineWidth) { - l = 1; - } - fbk.required = bk.required || l < word.length; - shouldContinue = fn(word.slice(0, l), w, fbk, lbk); - lbk = { - required: false - }; - word = word.slice(l); - w = this.wordWidth(word); - if (shouldContinue === false) { - break; - } - } - } else { - shouldContinue = fn(word, w, bk, last); - } - if (shouldContinue === false) { - break; - } - last = bk; - } - } - wrap(text, options) { - this.horizontalScaling = options.horizontalScaling || 100; - if (options.indent != null) { - this.indent = options.indent * this.horizontalScaling / 100; - } - if (options.characterSpacing != null) { - this.characterSpacing = options.characterSpacing * this.horizontalScaling / 100; - } - if (options.wordSpacing != null) { - this.wordSpacing = options.wordSpacing * this.horizontalScaling / 100; - } - if (options.ellipsis != null) { - this.ellipsis = options.ellipsis; - } - const nextY = this.document.y + this.document.currentLineHeight(true); - if (this.document.y > this.maxY || nextY > this.maxY) { - this.nextSection(); - } - let buffer = ''; - let textWidth = 0; - let wc = 0; - let lc = 0; - let { - y - } = this.document; - const emitLine = () => { - options.textWidth = textWidth + this.wordSpacing * (wc - 1); - options.wordCount = wc; - options.lineWidth = this.lineWidth; - ({ - y - } = this.document); - this.emit('line', buffer, options, this); - return lc++; - }; - this.emit('sectionStart', options, this); - this.eachWord(text, (word, w, bk, last) => { - if (last == null || last.required) { - this.emit('firstLine', options, this); - this.spaceLeft = this.lineWidth; - } - if (this.canFit(word, w)) { - buffer += word; - textWidth += w; - wc++; - } - if (bk.required || !this.canFit(word, w)) { - const lh = this.document.currentLineHeight(true); - if (this.height != null && this.ellipsis && PDFNumber(this.document.y + lh * 2) > this.maxY && this.column >= this.columns) { - if (this.ellipsis === true) { - this.ellipsis = '…'; - } - buffer = buffer.replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - while (buffer && textWidth > this.lineWidth) { - buffer = buffer.slice(0, -1).replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - } - if (textWidth <= this.lineWidth) { - buffer = buffer + this.ellipsis; - } - textWidth = this.wordWidth(buffer); - } - if (bk.required) { - if (w > this.spaceLeft) { - emitLine(); - buffer = word; - textWidth = w; - wc = 1; - } - this.emit('lastLine', options, this); - } - if (buffer[buffer.length - 1] == SOFT_HYPHEN) { - buffer = buffer.slice(0, -1) + HYPHEN; - this.spaceLeft -= this.wordWidth(HYPHEN); - } - emitLine(); - if (PDFNumber(this.document.y + lh) > this.maxY) { - this.emit('sectionEnd', options, this); - const shouldContinue = this.nextSection(); - if (!shouldContinue) { - wc = 0; - buffer = ''; - return false; - } - this.emit('sectionStart', options, this); - } - if (bk.required) { - this.spaceLeft = this.lineWidth; - buffer = ''; - textWidth = 0; - return wc = 0; - } else { - this.spaceLeft = this.lineWidth - w; - buffer = word; - textWidth = w; - return wc = 1; - } - } else { - return this.spaceLeft -= w; - } - }); - if (wc > 0) { - this.emit('lastLine', options, this); - emitLine(); - } - this.emit('sectionEnd', options, this); - if (options.continued === true) { - if (lc > 1) { - this.continuedX = 0; - } - this.continuedX += options.textWidth || 0; - this.document.y = y; - } else { - this.document.x = this.startX; - } - } - nextSection(options) { - if (++this.column > this.columns) { - if (this.height != null) { - return false; - } - this.document.continueOnNewPage(); - this.column = 1; - this.startY = this.document.page.margins.top; - this.maxY = this.document.page.maxY(); - this.document.x = this.startX; - if (this.document._fillColor) { - this.document.fillColor(...this.document._fillColor); - } - this.emit('pageBreak', options, this); - } else { - this.document.x += this.lineWidth + this.columnGap; - this.document.y = this.startY; - this.emit('columnBreak', options, this); - } - return true; - } -} - -const { - number -} = PDFObject; -function formatListLabel(n, listType) { - if (listType === 'numbered') { - return `${n}.`; - } - var letter = String.fromCharCode((n - 1) % 26 + 65); - var times = Math.floor((n - 1) / 26 + 1); - var text = Array(times + 1).join(letter); - return `${text}.`; -} -var TextMixin = { - initText() { - this._line = this._line.bind(this); - this.x = 0; - this.y = 0; - this._lineGap = 0; - }, - lineGap(_lineGap) { - this._lineGap = _lineGap; - return this; - }, - moveDown(lines) { - if (lines == null) { - lines = 1; - } - this.y += this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - moveUp(lines) { - if (lines == null) { - lines = 1; - } - this.y -= this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - _text(text, x, y, options, lineCallback) { - options = this._initOptions(x, y, options); - text = text == null ? '' : `${text}`; - if (options.wordSpacing) { - text = text.replace(/\s{2,}/g, ' '); - } - const addStructure = () => { - if (options.structParent) { - options.structParent.add(this.struct(options.structType || 'P', [this.markStructureContent(options.structType || 'P')])); - } - }; - if (options.rotation !== 0) { - this.save(); - this.rotate(-options.rotation, { - origin: [this.x, this.y] - }); - } - if (options.width) { - let wrapper = this._wrapper; - if (!wrapper) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', lineCallback); - wrapper.on('firstLine', addStructure); - } - this._wrapper = options.continued ? wrapper : null; - this._textOptions = options.continued ? options : null; - wrapper.wrap(text, options); - } else { - for (let line of text.split('\n')) { - addStructure(); - lineCallback(line, options); - } - } - if (options.rotation !== 0) this.restore(); - return this; - }, - text(text, x, y, options) { - return this._text(text, x, y, options, this._line); - }, - widthOfString(string) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - const horizontalScaling = options.horizontalScaling || 100; - return (this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1)) * horizontalScaling / 100; - }, - boundsOfString(string, x, y, options) { - options = this._initOptions(x, y, options); - ({ - x, - y - } = this); - const lineGap = options.lineGap ?? this._lineGap ?? 0; - const lineHeight = this.currentLineHeight(true) + lineGap; - let contentWidth = 0; - string = String(string ?? ''); - if (options.wordSpacing) { - string = string.replace(/\s{2,}/g, ' '); - } - if (options.width) { - let wrapper = new LineWrapper(this, options); - wrapper.on('line', (text, options) => { - this.y += lineHeight; - text = text.replace(/\n/g, ''); - if (text.length) { - let wordSpacing = options.wordSpacing ?? 0; - const characterSpacing = options.characterSpacing ?? 0; - if (options.width && options.align === 'justify') { - const words = text.trim().split(/\s+/); - const textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - const spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - } - contentWidth = Math.max(contentWidth, options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1)); - } - }); - wrapper.wrap(string, options); - } else { - for (let line of string.split('\n')) { - const lineWidth = this.widthOfString(line, options); - this.y += lineHeight; - contentWidth = Math.max(contentWidth, lineWidth); - } - } - let contentHeight = this.y - y; - if (options.height) contentHeight = Math.min(contentHeight, options.height); - this.x = x; - this.y = y; - if (options.rotation === 0) { - return { - x, - y, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 90) { - return { - x: x, - y: y - contentWidth, - width: contentHeight, - height: contentWidth - }; - } else if (options.rotation === 180) { - return { - x: x - contentWidth, - y: y - contentHeight, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 270) { - return { - x: x - contentHeight, - y: y, - width: contentHeight, - height: contentWidth - }; - } - const cos = cosine(options.rotation); - const sin = sine(options.rotation); - const x1 = x; - const y1 = y; - const x2 = x + contentWidth * cos; - const y2 = y - contentWidth * sin; - const x3 = x + contentWidth * cos + contentHeight * sin; - const y3 = y - contentWidth * sin + contentHeight * cos; - const x4 = x + contentHeight * sin; - const y4 = y + contentHeight * cos; - const xMin = Math.min(x1, x2, x3, x4); - const xMax = Math.max(x1, x2, x3, x4); - const yMin = Math.min(y1, y2, y3, y4); - const yMax = Math.max(y1, y2, y3, y4); - return { - x: xMin, - y: yMin, - width: xMax - xMin, - height: yMax - yMin - }; - }, - heightOfString(text, options) { - const { - x, - y - } = this; - options = this._initOptions(options); - options.height = Infinity; - const lineGap = options.lineGap || this._lineGap || 0; - this._text(text, this.x, this.y, options, () => { - this.y += this.currentLineHeight(true) + lineGap; - }); - const height = this.y - y; - this.x = x; - this.y = y; - return height; - }, - list(list, x, y, options) { - options = this._initOptions(x, y, options); - const listType = options.listType || 'bullet'; - const unit = Math.round(this._font.ascender / 1000 * this._fontSize); - const midLine = unit / 2; - const r = options.bulletRadius || unit / 3; - const indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2); - const itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2); - let level = 1; - const items = []; - const levels = []; - const numbers = []; - var flatten = function (list) { - let n = 1; - for (let i = 0; i < list.length; i++) { - const item = list[i]; - if (Array.isArray(item)) { - level++; - flatten(item); - level--; - } else { - items.push(item); - levels.push(level); - if (listType !== 'bullet') { - numbers.push(n++); - } - } - } - }; - flatten(list); - const drawListItem = function (listItem, i) { - const wrapper = new LineWrapper(this, options); - wrapper.on('line', this._line); - level = 1; - wrapper.once('firstLine', () => { - let item, itemType, labelType, bodyType; - if (options.structParent) { - if (options.structTypes) { - [itemType, labelType, bodyType] = options.structTypes; - } else { - [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody']; - } - } - if (itemType) { - item = this.struct(itemType); - options.structParent.add(item); - } else if (options.structParent) { - item = options.structParent; - } - let l; - if ((l = levels[i++]) !== level) { - const diff = itemIndent * (l - level); - this.x += diff; - wrapper.lineWidth -= diff; - level = l; - } - if (item && (labelType || bodyType)) { - item.add(this.struct(labelType || bodyType, [this.markStructureContent(labelType || bodyType)])); - } - switch (listType) { - case 'bullet': - this.circle(this.x - indent + r, this.y + midLine, r); - this.fill(); - break; - case 'numbered': - case 'lettered': - var text = formatListLabel(numbers[i - 1], listType); - this._fragment(text, this.x - indent, this.y, options); - break; - } - if (item && labelType && bodyType) { - item.add(this.struct(bodyType, [this.markStructureContent(bodyType)])); - } - if (item && item !== options.structParent) { - item.end(); - } - }); - wrapper.on('sectionStart', () => { - const pos = indent + itemIndent * (level - 1); - this.x += pos; - wrapper.lineWidth -= pos; - }); - wrapper.on('sectionEnd', () => { - const pos = indent + itemIndent * (level - 1); - this.x -= pos; - wrapper.lineWidth += pos; - }); - wrapper.wrap(listItem, options); - }; - for (let i = 0; i < items.length; i++) { - drawListItem.call(this, items[i], i); - } - return this; - }, - _initOptions() { - let x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - let y = arguments.length > 1 ? arguments[1] : undefined; - let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - if (typeof x === 'object') { - options = x; - x = null; - } - const result = Object.assign({}, options); - if (this._textOptions) { - for (let key in this._textOptions) { - const val = this._textOptions[key]; - if (key !== 'continued') { - if (result[key] === undefined) { - result[key] = val; - } - } - } - } - if (x != null) { - this.x = x; - } - if (y != null) { - this.y = y; - } - if (result.lineBreak !== false) { - if (result.width == null) { - result.width = this.page.width - this.x - this.page.margins.right; - } - result.width = Math.max(result.width, 0); - } - if (!result.columns) { - result.columns = 0; - } - if (result.columnGap == null) { - result.columnGap = 18; - } - result.rotation = Number(options.rotation ?? 0) % 360; - if (result.rotation < 0) result.rotation += 360; - return result; - }, - _line(text) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let wrapper = arguments.length > 2 ? arguments[2] : undefined; - this._fragment(text, this.x, this.y, options); - if (wrapper) { - const lineGap = options.lineGap || this._lineGap || 0; - this.y += this.currentLineHeight(true) + lineGap; - } else { - this.x += this.widthOfString(text, options); - } - }, - _fragment(text, x, y, options) { - let dy, encoded, i, positions, textWidth, words; - text = `${text}`.replace(/\n/g, ''); - if (text.length === 0) { - return; - } - const align = options.align || 'left'; - let wordSpacing = options.wordSpacing || 0; - const characterSpacing = options.characterSpacing || 0; - const horizontalScaling = options.horizontalScaling || 100; - if (options.width) { - switch (align) { - case 'right': - textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); - x += options.lineWidth - textWidth; - break; - case 'center': - x += options.lineWidth / 2 - options.textWidth / 2; - break; - case 'justify': - words = text.trim().split(/\s+/); - textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - var spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - break; - } - } - if (typeof options.baseline === 'number') { - dy = -options.baseline; - } else { - switch (options.baseline) { - case 'svg-middle': - dy = 0.5 * this._font.xHeight; - break; - case 'middle': - case 'svg-central': - dy = 0.5 * (this._font.descender + this._font.ascender); - break; - case 'bottom': - case 'ideographic': - dy = this._font.descender; - break; - case 'alphabetic': - dy = 0; - break; - case 'mathematical': - dy = 0.5 * this._font.ascender; - break; - case 'hanging': - dy = 0.8 * this._font.ascender; - break; - case 'top': - dy = this._font.ascender; - break; - default: - dy = this._font.ascender; - } - dy = dy / 1000 * this._fontSize; - } - const renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); - if (options.link != null) { - this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); - } - if (options.goTo != null) { - this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (options.underline) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() - lineWidth; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - if (options.strike) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() / 2; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - this.save(); - if (options.oblique) { - let skew; - if (typeof options.oblique === 'number') { - skew = -Math.tan(options.oblique * Math.PI / 180); - } else { - skew = -0.25; - } - this.transform(1, 0, 0, 1, x, y); - this.transform(1, 0, skew, 1, -skew * dy, 0); - this.transform(1, 0, 0, 1, -x, -y); - } - this.transform(1, 0, 0, -1, 0, this.page.height); - y = this.page.height - y - dy; - if (this.page.fonts[this._font.id] == null) { - this.page.fonts[this._font.id] = this._font.ref(); - } - this.addContent('BT'); - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`); - const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; - if (mode) { - this.addContent(`${mode} Tr`); - } - if (characterSpacing) { - this.addContent(`${number(characterSpacing)} Tc`); - } - if (horizontalScaling !== 100) { - this.addContent(`${horizontalScaling} Tz`); - } - if (wordSpacing) { - words = text.trim().split(/\s+/); - wordSpacing += this.widthOfString(' ') + characterSpacing; - wordSpacing *= 1000 / this._fontSize; - encoded = []; - positions = []; - for (let word of words) { - const [encodedWord, positionsWord] = this._font.encode(word, options.features); - encoded = encoded.concat(encodedWord); - positions = positions.concat(positionsWord); - const space = {}; - const object = positions[positions.length - 1]; - for (let key in object) { - const val = object[key]; - space[key] = val; - } - space.xAdvance += wordSpacing; - positions[positions.length - 1] = space; - } - } else { - [encoded, positions] = this._font.encode(text, options.features); - } - const scale = this._fontSize / 1000; - const commands = []; - let last = 0; - let hadOffset = false; - const addSegment = cur => { - if (last < cur) { - const hex = encoded.slice(last, cur).join(''); - const advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; - commands.push(`<${hex}> ${number(-advance)}`); - } - last = cur; - }; - const flush = i => { - addSegment(i); - if (commands.length > 0) { - this.addContent(`[${commands.join(' ')}] TJ`); - commands.length = 0; - } - }; - for (i = 0; i < positions.length; i++) { - const pos = positions[i]; - if (pos.xOffset || pos.yOffset) { - flush(i); - this.addContent(`1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(y + pos.yOffset * scale)} Tm`); - flush(i + 1); - hadOffset = true; - } else { - if (hadOffset) { - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - hadOffset = false; - } - if (pos.xAdvance - pos.advanceWidth !== 0) { - addSegment(i + 1); - } - } - x += pos.xAdvance * scale; - } - flush(i); - this.addContent('ET'); - this.restore(); - } -}; - -const MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf]; -const COLOR_SPACE_MAP = { - 1: 'DeviceGray', - 3: 'DeviceRGB', - 4: 'DeviceCMYK' -}; -class JPEG { - constructor(data, label) { - let marker; - this.data = data; - this.label = label; - if (this.data.readUInt16BE(0) !== 0xffd8) { - throw 'SOI not found in JPEG'; - } - this.orientation = exif.fromBuffer(this.data).Orientation || 1; - let pos = 2; - while (pos < this.data.length) { - marker = this.data.readUInt16BE(pos); - pos += 2; - if (MARKERS.includes(marker)) { - break; - } - pos += this.data.readUInt16BE(pos); - } - if (!MARKERS.includes(marker)) { - throw 'Invalid JPEG.'; - } - pos += 2; - this.bits = this.data[pos++]; - this.height = this.data.readUInt16BE(pos); - pos += 2; - this.width = this.data.readUInt16BE(pos); - pos += 2; - const channels = this.data[pos++]; - this.colorSpace = COLOR_SPACE_MAP[channels]; - this.obj = null; - } - embed(document) { - if (this.obj) { - return; - } - this.obj = document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: this.bits, - Width: this.width, - Height: this.height, - ColorSpace: this.colorSpace, - Filter: 'DCTDecode' - }); - if (this.colorSpace === 'DeviceCMYK') { - this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; - } - this.obj.end(this.data); - return this.data = null; - } -} - -class PNGImage { - constructor(data, label) { - this.label = label; - this.image = new PNG(data); - this.width = this.image.width; - this.height = this.image.height; - this.imgData = this.image.imgData; - this.obj = null; - } - embed(document) { - let dataDecoded = false; - this.document = document; - if (this.obj) { - return; - } - const hasAlphaChannel = this.image.hasAlphaChannel; - const isInterlaced = this.image.interlaceMethod === 1; - this.obj = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits, - Width: this.width, - Height: this.height, - Filter: 'FlateDecode' - }); - if (!hasAlphaChannel) { - const params = this.document.ref({ - Predictor: isInterlaced ? 1 : 15, - Colors: this.image.colors, - BitsPerComponent: this.image.bits, - Columns: this.width - }); - this.obj.data['DecodeParms'] = params; - params.end(); - } - if (this.image.palette.length === 0) { - this.obj.data['ColorSpace'] = this.image.colorSpace; - } else { - const palette = this.document.ref(); - palette.end(Buffer.from(this.image.palette)); - this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette]; - } - if (this.image.transparency.grayscale != null) { - const val = this.image.transparency.grayscale; - this.obj.data['Mask'] = [val, val]; - } else if (this.image.transparency.rgb) { - const { - rgb - } = this.image.transparency; - const mask = []; - for (let x of rgb) { - mask.push(x, x); - } - this.obj.data['Mask'] = mask; - } else if (this.image.transparency.indexed) { - dataDecoded = true; - return this.loadIndexedAlphaChannel(); - } else if (hasAlphaChannel) { - dataDecoded = true; - return this.splitAlphaChannel(); - } - if (isInterlaced && !dataDecoded) { - return this.decodeData(); - } - this.finalize(); - } - finalize() { - if (this.alphaChannel) { - const sMask = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - Height: this.height, - Width: this.width, - BitsPerComponent: 8, - Filter: 'FlateDecode', - ColorSpace: 'DeviceGray', - Decode: [0, 1] - }); - sMask.end(this.alphaChannel); - this.obj.data['SMask'] = sMask; - } - this.obj.end(this.imgData); - this.image = null; - return this.imgData = null; - } - splitAlphaChannel() { - return this.image.decodePixels(pixels => { - let a, p; - const colorCount = this.image.colors; - const pixelCount = this.width * this.height; - const imgData = Buffer.alloc(pixelCount * colorCount); - const alphaChannel = Buffer.alloc(pixelCount); - let i = p = a = 0; - const len = pixels.length; - const skipByteCount = this.image.bits === 16 ? 1 : 0; - while (i < len) { - for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) { - imgData[p++] = pixels[i++]; - i += skipByteCount; - } - alphaChannel[a++] = pixels[i++]; - i += skipByteCount; - } - this.imgData = zlib.deflateSync(imgData); - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - loadIndexedAlphaChannel() { - const transparency = this.image.transparency.indexed; - return this.image.decodePixels(pixels => { - const alphaChannel = Buffer.alloc(this.width * this.height); - let i = 0; - for (let j = 0, end = pixels.length; j < end; j++) { - alphaChannel[i++] = transparency[pixels[j]]; - } - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - decodeData() { - this.image.decodePixels(pixels => { - this.imgData = zlib.deflateSync(pixels); - this.finalize(); - }); - } -} - -class PDFImage { - static open(src, label) { - let data; - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:.+?;base64,(.*)$/.exec(src); - if (match) { - data = Buffer.from(match[1], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - return; - } - } - } - if (data[0] === 0xff && data[1] === 0xd8) { - return new JPEG(data, label); - } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { - return new PNGImage(data, label); - } else { - throw new Error('Unknown image format.'); - } - } -} - -var ImagesMixin = { - initImages() { - this._imageRegistry = {}; - this._imageCount = 0; - }, - image(src, x, y) { - let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - let bh, bp, bw, image, ip, left, left1, originX, originY; - if (typeof x === 'object') { - options = x; - x = null; - } - const ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation; - const inDocumentFlow = typeof y !== 'number'; - x = (left = x != null ? x : options.x) != null ? left : this.x; - y = (left1 = y != null ? y : options.y) != null ? left1 : this.y; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - if (src.width && src.height) { - image = src; - } else { - image = this.openImage(src); - } - } - if (!image.obj) { - image.embed(this); - } - if (this.page.xobjects[image.label] == null) { - this.page.xobjects[image.label] = image.obj; - } - let { - width, - height - } = image; - if (!ignoreOrientation && image.orientation > 4) { - [width, height] = [height, width]; - } - let w = options.width || width; - let h = options.height || height; - if (options.width && !options.height) { - const wp = w / width; - w = width * wp; - h = height * wp; - } else if (options.height && !options.width) { - const hp = h / height; - w = width * hp; - h = height * hp; - } else if (options.scale) { - w = width * options.scale; - h = height * options.scale; - } else if (options.fit) { - [bw, bh] = options.fit; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - w = bw; - h = bw / ip; - } else { - h = bh; - w = bh * ip; - } - } else if (options.cover) { - [bw, bh] = options.cover; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - h = bh; - w = bh * ip; - } else { - w = bw; - h = bw / ip; - } - } - if (options.fit || options.cover) { - if (options.align === 'center') { - x = x + bw / 2 - w / 2; - } else if (options.align === 'right') { - x = x + bw - w; - } - if (options.valign === 'center') { - y = y + bh / 2 - h / 2; - } else if (options.valign === 'bottom') { - y = y + bh - h; - } - } - let rotateAngle = 0; - let xTransform = x; - let yTransform = y; - let hTransform = h; - let wTransform = w; - if (!ignoreOrientation) { - switch (image.orientation) { - default: - case 1: - hTransform = -h; - yTransform += h; - break; - case 2: - wTransform = -w; - hTransform = -h; - xTransform += w; - yTransform += h; - break; - case 3: - originX = x; - originY = y; - hTransform = -h; - xTransform -= w; - rotateAngle = 180; - break; - case 4: - break; - case 5: - originX = x; - originY = y; - wTransform = h; - hTransform = w; - yTransform -= hTransform; - rotateAngle = 90; - break; - case 6: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - rotateAngle = 90; - break; - case 7: - originX = x; - originY = y; - hTransform = -w; - wTransform = -h; - xTransform += h; - rotateAngle = 90; - break; - case 8: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - xTransform -= h; - yTransform += w; - rotateAngle = -90; - break; - } - } else { - hTransform = -h; - yTransform += h; - } - if (options.link != null) { - this.link(x, y, w, h, options.link); - } - if (options.goTo != null) { - this.goTo(x, y, w, h, options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (inDocumentFlow) { - this.y += h; - } - this.save(); - if (rotateAngle) { - this.rotate(rotateAngle, { - origin: [originX, originY] - }); - } - this.transform(wTransform, 0, 0, hTransform, xTransform, yTransform); - this.addContent(`/${image.label} Do`); - this.restore(); - return this; - }, - openImage(src) { - let image; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - image = PDFImage.open(src, `I${++this._imageCount}`); - if (typeof src === 'string') { - this._imageRegistry[src] = image; - } - } - return image; - } -}; - -var AnnotationsMixin = { - annotate(x, y, w, h, options) { - options.Type = 'Annot'; - options.Rect = this._convertRect(x, y, w, h); - options.Border = [0, 0, 0]; - if (options.Subtype === 'Link' && typeof options.F === 'undefined') { - options.F = 1 << 2; - } - if (options.Subtype !== 'Link') { - if (options.C == null) { - options.C = this._normalizeColor(options.color || [0, 0, 0]); - } - } - delete options.color; - if (typeof options.Dest === 'string') { - options.Dest = new String(options.Dest); - } - for (let key in options) { - const val = options[key]; - options[key[0].toUpperCase() + key.slice(1)] = val; - } - const ref = this.ref(options); - this.page.annotations.push(ref); - ref.end(); - return this; - }, - note(x, y, w, h, contents) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Text'; - options.Contents = new String(contents); - if (options.Name == null) { - options.Name = 'Comment'; - } - if (options.color == null) { - options.color = [243, 223, 92]; - } - return this.annotate(x, y, w, h, options); - }, - goTo(x, y, w, h, name) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - options.A = this.ref({ - S: 'GoTo', - D: new String(name) - }); - options.A.end(); - return this.annotate(x, y, w, h, options); - }, - link(x, y, w, h, url) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - if (typeof url === 'number') { - const pages = this._root.data.Pages.data; - if (url >= 0 && url < pages.Kids.length) { - options.A = this.ref({ - S: 'GoTo', - D: [pages.Kids[url], 'XYZ', null, null, null] - }); - options.A.end(); - } else { - throw new Error(`The document has no page ${url}`); - } - } else { - options.A = this.ref({ - S: 'URI', - URI: new String(url) - }); - options.A.end(); - } - return this.annotate(x, y, w, h, options); - }, - _markup(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - const [x1, y1, x2, y2] = this._convertRect(x, y, w, h); - options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - highlight(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Highlight'; - if (options.color == null) { - options.color = [241, 238, 148]; - } - return this._markup(x, y, w, h, options); - }, - underline(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Underline'; - return this._markup(x, y, w, h, options); - }, - strike(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'StrikeOut'; - return this._markup(x, y, w, h, options); - }, - lineAnnotation(x1, y1, x2, y2) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Line'; - options.Contents = new String(); - options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; - return this.annotate(x1, y1, x2, y2, options); - }, - rectAnnotation(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Square'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - ellipseAnnotation(x, y, w, h) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Circle'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - textAnnotation(x, y, w, h, text) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'FreeText'; - options.Contents = new String(text); - options.DA = new String(); - return this.annotate(x, y, w, h, options); - }, - fileAnnotation(x, y, w, h) { - let file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - const filespec = this.file(file.src, Object.assign({ - hidden: true - }, file)); - options.Subtype = 'FileAttachment'; - options.FS = filespec; - if (options.Contents) { - options.Contents = new String(options.Contents); - } else if (filespec.data.Desc) { - options.Contents = filespec.data.Desc; - } - return this.annotate(x, y, w, h, options); - }, - _convertRect(x1, y1, w, h) { - let y2 = y1; - y1 += h; - let x2 = x1 + w; - const [m0, m1, m2, m3, m4, m5] = this._ctm; - x1 = m0 * x1 + m2 * y1 + m4; - y1 = m1 * x1 + m3 * y1 + m5; - x2 = m0 * x2 + m2 * y2 + m4; - y2 = m1 * x2 + m3 * y2 + m5; - return [x1, y1, x2, y2]; - } -}; - -class PDFOutline { - constructor(document, parent, title, dest) { - let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { - expanded: false - }; - this.document = document; - this.options = options; - this.outlineData = {}; - if (dest !== null) { - this.outlineData['Dest'] = [dest.dictionary, 'Fit']; - } - if (parent !== null) { - this.outlineData['Parent'] = parent; - } - if (title !== null) { - this.outlineData['Title'] = new String(title); - } - this.dictionary = this.document.ref(this.outlineData); - this.children = []; - } - addItem(title) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { - expanded: false - }; - const result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options); - this.children.push(result); - return result; - } - endOutline() { - if (this.children.length > 0) { - if (this.options.expanded) { - this.outlineData.Count = this.children.length; - } - const first = this.children[0], - last = this.children[this.children.length - 1]; - this.outlineData.First = first.dictionary; - this.outlineData.Last = last.dictionary; - for (let i = 0, len = this.children.length; i < len; i++) { - const child = this.children[i]; - if (i > 0) { - child.outlineData.Prev = this.children[i - 1].dictionary; - } - if (i < this.children.length - 1) { - child.outlineData.Next = this.children[i + 1].dictionary; - } - child.endOutline(); - } - } - return this.dictionary.end(); - } -} - -var OutlineMixin = { - initOutline() { - this.outline = new PDFOutline(this, null, null, null); - }, - endOutline() { - this.outline.endOutline(); - if (this.outline.children.length > 0) { - this._root.data.Outlines = this.outline.dictionary; - return this._root.data.PageMode = 'UseOutlines'; - } - } -}; - -class PDFStructureContent { - constructor(pageRef, mcid) { - this.refs = [{ - pageRef, - mcid - }]; - } - push(structContent) { - structContent.refs.forEach(ref => this.refs.push(ref)); - } -} - -class PDFStructureElement { - constructor(document, type) { - let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - let children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - this.document = document; - this._attached = false; - this._ended = false; - this._flushed = false; - this.dictionary = document.ref({ - S: type - }); - const data = this.dictionary.data; - if (Array.isArray(options) || this._isValidChild(options)) { - children = options; - options = {}; - } - if (typeof options.title !== 'undefined') { - data.T = new String(options.title); - } - if (typeof options.lang !== 'undefined') { - data.Lang = new String(options.lang); - } - if (typeof options.alt !== 'undefined') { - data.Alt = new String(options.alt); - } - if (typeof options.expanded !== 'undefined') { - data.E = new String(options.expanded); - } - if (typeof options.actual !== 'undefined') { - data.ActualText = new String(options.actual); - } - this._children = []; - if (children) { - if (!Array.isArray(children)) { - children = [children]; - } - children.forEach(child => this.add(child)); - this.end(); - } - } - add(child) { - if (this._ended) { - throw new Error(`Cannot add child to already-ended structure element`); - } - if (!this._isValidChild(child)) { - throw new Error(`Invalid structure element child`); - } - if (child instanceof PDFStructureElement) { - child.setParent(this.dictionary); - if (this._attached) { - child.setAttached(); - } - } - if (child instanceof PDFStructureContent) { - this._addContentToParentTree(child); - } - if (typeof child === 'function' && this._attached) { - child = this._contentForClosure(child); - } - this._children.push(child); - return this; - } - _addContentToParentTree(content) { - content.refs.forEach(_ref => { - let { - pageRef, - mcid - } = _ref; - const pageStructParents = this.document.getStructParentTree().get(pageRef.data.StructParents); - pageStructParents[mcid] = this.dictionary; - }); - } - setParent(parentRef) { - if (this.dictionary.data.P) { - throw new Error(`Structure element added to more than one parent`); - } - this.dictionary.data.P = parentRef; - this._flush(); - } - setAttached() { - if (this._attached) { - return; - } - this._children.forEach((child, index) => { - if (child instanceof PDFStructureElement) { - child.setAttached(); - } - if (typeof child === 'function') { - this._children[index] = this._contentForClosure(child); - } - }); - this._attached = true; - this._flush(); - } - end() { - if (this._ended) { - return; - } - this._children.filter(child => child instanceof PDFStructureElement).forEach(child => child.end()); - this._ended = true; - this._flush(); - } - _isValidChild(child) { - return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function'; - } - _contentForClosure(closure) { - const content = this.document.markStructureContent(this.dictionary.data.S); - closure(); - this.document.endMarkedContent(); - this._addContentToParentTree(content); - return content; - } - _isFlushable() { - if (!this.dictionary.data.P || !this._ended) { - return false; - } - return this._children.every(child => { - if (typeof child === 'function') { - return false; - } - if (child instanceof PDFStructureElement) { - return child._isFlushable(); - } - return true; - }); - } - _flush() { - if (this._flushed || !this._isFlushable()) { - return; - } - this.dictionary.data.K = []; - this._children.forEach(child => this._flushChild(child)); - this.dictionary.end(); - this._children = []; - this.dictionary.data.K = null; - this._flushed = true; - } - _flushChild(child) { - if (child instanceof PDFStructureElement) { - this.dictionary.data.K.push(child.dictionary); - } - if (child instanceof PDFStructureContent) { - child.refs.forEach(_ref2 => { - let { - pageRef, - mcid - } = _ref2; - if (!this.dictionary.data.Pg) { - this.dictionary.data.Pg = pageRef; - } - if (this.dictionary.data.Pg === pageRef) { - this.dictionary.data.K.push(mcid); - } else { - this.dictionary.data.K.push({ - Type: 'MCR', - Pg: pageRef, - MCID: mcid - }); - } - }); - } - } -} - -class PDFNumberTree extends PDFTree { - _compareKeys(a, b) { - return parseInt(a) - parseInt(b); - } - _keysName() { - return 'Nums'; - } - _dataForKey(k) { - return parseInt(k); - } -} - -var MarkingsMixin = { - initMarkings(options) { - this.structChildren = []; - if (options.tagged) { - this.getMarkInfoDictionary().data.Marked = true; - this.getStructTreeRoot(); - } - }, - markContent(tag) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - if (tag === 'Artifact' || options && options.mcid) { - let toClose = 0; - this.page.markings.forEach(marking => { - if (toClose || marking.structContent || marking.tag === 'Artifact') { - toClose++; - } - }); - while (toClose--) { - this.endMarkedContent(); - } - } - if (!options) { - this.page.markings.push({ - tag - }); - this.addContent(`/${tag} BMC`); - return this; - } - this.page.markings.push({ - tag, - options - }); - const dictionary = {}; - if (typeof options.mcid !== 'undefined') { - dictionary.MCID = options.mcid; - } - if (tag === 'Artifact') { - if (typeof options.type === 'string') { - dictionary.Type = options.type; - } - if (Array.isArray(options.bbox)) { - dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]]; - } - if (Array.isArray(options.attached) && options.attached.every(val => typeof val === 'string')) { - dictionary.Attached = options.attached; - } - } - if (tag === 'Span') { - if (options.lang) { - dictionary.Lang = new String(options.lang); - } - if (options.alt) { - dictionary.Alt = new String(options.alt); - } - if (options.expanded) { - dictionary.E = new String(options.expanded); - } - if (options.actual) { - dictionary.ActualText = new String(options.actual); - } - } - this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`); - return this; - }, - markStructureContent(tag) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey); - const mcid = pageStructParents.length; - pageStructParents.push(null); - this.markContent(tag, { - ...options, - mcid - }); - const structContent = new PDFStructureContent(this.page.dictionary, mcid); - this.page.markings.slice(-1)[0].structContent = structContent; - return structContent; - }, - endMarkedContent() { - this.page.markings.pop(); - this.addContent('EMC'); - return this; - }, - struct(type) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - return new PDFStructureElement(this, type, options, children); - }, - addStructure(structElem) { - const structTreeRoot = this.getStructTreeRoot(); - structElem.setParent(structTreeRoot); - structElem.setAttached(); - this.structChildren.push(structElem); - if (!structTreeRoot.data.K) { - structTreeRoot.data.K = []; - } - structTreeRoot.data.K.push(structElem.dictionary); - return this; - }, - initPageMarkings(pageMarkings) { - pageMarkings.forEach(marking => { - if (marking.structContent) { - const structContent = marking.structContent; - const newStructContent = this.markStructureContent(marking.tag, marking.options); - structContent.push(newStructContent); - this.page.markings.slice(-1)[0].structContent = structContent; - } else { - this.markContent(marking.tag, marking.options); - } - }); - }, - endPageMarkings(page) { - const pageMarkings = page.markings; - pageMarkings.forEach(() => page.write('EMC')); - page.markings = []; - return pageMarkings; - }, - getMarkInfoDictionary() { - if (!this._root.data.MarkInfo) { - this._root.data.MarkInfo = this.ref({}); - } - return this._root.data.MarkInfo; - }, - hasMarkInfoDictionary() { - return !!this._root.data.MarkInfo; - }, - getStructTreeRoot() { - if (!this._root.data.StructTreeRoot) { - this._root.data.StructTreeRoot = this.ref({ - Type: 'StructTreeRoot', - ParentTree: new PDFNumberTree(), - ParentTreeNextKey: 0 - }); - } - return this._root.data.StructTreeRoot; - }, - getStructParentTree() { - return this.getStructTreeRoot().data.ParentTree; - }, - createStructParentTreeNextKey() { - this.getMarkInfoDictionary(); - const structTreeRoot = this.getStructTreeRoot(); - const key = structTreeRoot.data.ParentTreeNextKey++; - structTreeRoot.data.ParentTree.add(key, []); - return key; - }, - endMarkings() { - const structTreeRoot = this._root.data.StructTreeRoot; - if (structTreeRoot) { - structTreeRoot.end(); - this.structChildren.forEach(structElem => structElem.end()); - } - if (this._root.data.MarkInfo) { - this._root.data.MarkInfo.end(); - } - } -}; - -const FIELD_FLAGS = { - readOnly: 1, - required: 2, - noExport: 4, - multiline: 0x1000, - password: 0x2000, - toggleToOffButton: 0x4000, - radioButton: 0x8000, - pushButton: 0x10000, - combo: 0x20000, - edit: 0x40000, - sort: 0x80000, - multiSelect: 0x200000, - noSpell: 0x400000 -}; -const FIELD_JUSTIFY = { - left: 0, - center: 1, - right: 2 -}; -const VALUE_MAP = { - value: 'V', - defaultValue: 'DV' -}; -const FORMAT_SPECIAL = { - zip: '0', - zipPlus4: '1', - zip4: '1', - phone: '2', - ssn: '3' -}; -const FORMAT_DEFAULT = { - number: { - nDec: 0, - sepComma: false, - negStyle: 'MinusBlack', - currency: '', - currencyPrepend: true - }, - percent: { - nDec: 0, - sepComma: false - } -}; -var AcroFormMixin = { - initForm() { - if (!this._font) { - throw new Error('Must set a font before calling initForm method'); - } - this._acroform = { - fonts: {}, - defaultFont: this._font.name - }; - this._acroform.fonts[this._font.id] = this._font.ref(); - let data = { - Fields: [], - NeedAppearances: true, - DA: new String(`/${this._font.id} 0 Tf 0 g`), - DR: { - Font: {} - } - }; - data.DR.Font[this._font.id] = this._font.ref(); - const AcroForm = this.ref(data); - this._root.data.AcroForm = AcroForm; - return this; - }, - endAcroForm() { - if (this._root.data.AcroForm) { - if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) { - throw new Error('No fonts specified for PDF form'); - } - let fontDict = this._root.data.AcroForm.data.DR.Font; - Object.keys(this._acroform.fonts).forEach(name => { - fontDict[name] = this._acroform.fonts[name]; - }); - this._root.data.AcroForm.data.Fields.forEach(fieldRef => { - this._endChild(fieldRef); - }); - this._root.data.AcroForm.end(); - } - return this; - }, - _endChild(ref) { - if (Array.isArray(ref.data.Kids)) { - ref.data.Kids.forEach(childRef => { - this._endChild(childRef); - }); - ref.end(); - } - return this; - }, - formField(name) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let fieldDict = this._fieldDict(name, null, options); - let fieldRef = this.ref(fieldDict); - this._addToParent(fieldRef); - return fieldRef; - }, - formAnnotation(name, type, x, y, w, h) { - let options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; - let fieldDict = this._fieldDict(name, type, options); - fieldDict.Subtype = 'Widget'; - if (fieldDict.F === undefined) { - fieldDict.F = 4; - } - this.annotate(x, y, w, h, fieldDict); - let annotRef = this.page.annotations[this.page.annotations.length - 1]; - return this._addToParent(annotRef); - }, - formText(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'text', x, y, w, h, options); - }, - formPushButton(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'pushButton', x, y, w, h, options); - }, - formCombo(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'combo', x, y, w, h, options); - }, - formList(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'list', x, y, w, h, options); - }, - formRadioButton(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'radioButton', x, y, w, h, options); - }, - formCheckbox(name, x, y, w, h) { - let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'checkbox', x, y, w, h, options); - }, - _addToParent(fieldRef) { - let parent = fieldRef.data.Parent; - if (parent) { - if (!parent.data.Kids) { - parent.data.Kids = []; - } - parent.data.Kids.push(fieldRef); - } else { - this._root.data.AcroForm.data.Fields.push(fieldRef); - } - return this; - }, - _fieldDict(name, type) { - let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - if (!this._acroform) { - throw new Error('Call document.initForm() method before adding form elements to document'); - } - let opts = Object.assign({}, options); - if (type !== null) { - opts = this._resolveType(type, options); - } - opts = this._resolveFlags(opts); - opts = this._resolveJustify(opts); - opts = this._resolveFont(opts); - opts = this._resolveStrings(opts); - opts = this._resolveColors(opts); - opts = this._resolveFormat(opts); - opts.T = new String(name); - if (opts.parent) { - opts.Parent = opts.parent; - delete opts.parent; - } - return opts; - }, - _resolveType(type, opts) { - if (type === 'text') { - opts.FT = 'Tx'; - } else if (type === 'pushButton') { - opts.FT = 'Btn'; - opts.pushButton = true; - } else if (type === 'radioButton') { - opts.FT = 'Btn'; - opts.radioButton = true; - } else if (type === 'checkbox') { - opts.FT = 'Btn'; - } else if (type === 'combo') { - opts.FT = 'Ch'; - opts.combo = true; - } else if (type === 'list') { - opts.FT = 'Ch'; - } else { - throw new Error(`Invalid form annotation type '${type}'`); - } - return opts; - }, - _resolveFormat(opts) { - const f = opts.format; - if (f && f.type) { - let fnKeystroke; - let fnFormat; - let params = ''; - if (FORMAT_SPECIAL[f.type] !== undefined) { - fnKeystroke = `AFSpecial_Keystroke`; - fnFormat = `AFSpecial_Format`; - params = FORMAT_SPECIAL[f.type]; - } else { - let format = f.type.charAt(0).toUpperCase() + f.type.slice(1); - fnKeystroke = `AF${format}_Keystroke`; - fnFormat = `AF${format}_Format`; - if (f.type === 'date') { - fnKeystroke += 'Ex'; - params = String(f.param); - } else if (f.type === 'time') { - params = String(f.param); - } else if (f.type === 'number') { - let p = Object.assign({}, FORMAT_DEFAULT.number, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(',')); - } else if (f.type === 'percent') { - let p = Object.assign({}, FORMAT_DEFAULT.percent, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(',')); - } - } - opts.AA = opts.AA ? opts.AA : {}; - opts.AA.K = { - S: 'JavaScript', - JS: new String(`${fnKeystroke}(${params});`) - }; - opts.AA.F = { - S: 'JavaScript', - JS: new String(`${fnFormat}(${params});`) - }; - } - delete opts.format; - return opts; - }, - _resolveColors(opts) { - let color = this._normalizeColor(opts.backgroundColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BG = color; - } - color = this._normalizeColor(opts.borderColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BC = color; - } - delete opts.backgroundColor; - delete opts.borderColor; - return opts; - }, - _resolveFlags(options) { - let result = 0; - Object.keys(options).forEach(key => { - if (FIELD_FLAGS[key]) { - if (options[key]) { - result |= FIELD_FLAGS[key]; - } - delete options[key]; - } - }); - if (result !== 0) { - options.Ff = options.Ff ? options.Ff : 0; - options.Ff |= result; - } - return options; - }, - _resolveJustify(options) { - let result = 0; - if (options.align !== undefined) { - if (typeof FIELD_JUSTIFY[options.align] === 'number') { - result = FIELD_JUSTIFY[options.align]; - } - delete options.align; - } - if (result !== 0) { - options.Q = result; - } - return options; - }, - _resolveFont(options) { - if (this._acroform.fonts[this._font.id] == null) { - this._acroform.fonts[this._font.id] = this._font.ref(); - } - if (this._acroform.defaultFont !== this._font.name) { - options.DR = { - Font: {} - }; - const fontSize = options.fontSize || 0; - options.DR.Font[this._font.id] = this._font.ref(); - options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`); - } - return options; - }, - _resolveStrings(options) { - let select = []; - function appendChoices(a) { - if (Array.isArray(a)) { - for (let idx = 0; idx < a.length; idx++) { - if (typeof a[idx] === 'string') { - select.push(new String(a[idx])); - } else { - select.push(a[idx]); - } - } - } - } - appendChoices(options.Opt); - if (options.select) { - appendChoices(options.select); - delete options.select; - } - if (select.length) { - options.Opt = select; - } - Object.keys(VALUE_MAP).forEach(key => { - if (options[key] !== undefined) { - options[VALUE_MAP[key]] = options[key]; - delete options[key]; - } - }); - ['V', 'DV'].forEach(key => { - if (typeof options[key] === 'string') { - options[key] = new String(options[key]); - } - }); - if (options.MK && options.MK.CA) { - options.MK.CA = new String(options.MK.CA); - } - if (options.label) { - options.MK = options.MK ? options.MK : {}; - options.MK.CA = new String(options.label); - delete options.label; - } - return options; - } -}; - -var AttachmentsMixin = { - file(src) { - let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - options.name = options.name || src; - options.relationship = options.relationship || 'Unspecified'; - const refBody = { - Type: 'EmbeddedFile', - Params: {} - }; - let data; - if (!src) { - throw new Error('No src specified'); - } - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:(.*?);base64,(.*)$/.exec(src); - if (match) { - if (match[1]) { - refBody.Subtype = match[1].replace('/', '#2F'); - } - data = Buffer.from(match[2], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - throw new Error(`Could not read contents of file at filepath ${src}`); - } - const { - birthtime, - ctime - } = fs.statSync(src); - refBody.Params.CreationDate = birthtime; - refBody.Params.ModDate = ctime; - } - } - if (options.creationDate instanceof Date) { - refBody.Params.CreationDate = options.creationDate; - } - if (options.modifiedDate instanceof Date) { - refBody.Params.ModDate = options.modifiedDate; - } - if (options.type) { - refBody.Subtype = options.type.replace('/', '#2F'); - } - const checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data))); - refBody.Params.CheckSum = new String(checksum); - refBody.Params.Size = data.byteLength; - let ref; - if (!this._fileRegistry) this._fileRegistry = {}; - let file = this._fileRegistry[options.name]; - if (file && isEqual(refBody, file)) { - ref = file.ref; - } else { - ref = this.ref(refBody); - ref.end(data); - this._fileRegistry[options.name] = { - ...refBody, - ref - }; - } - const fileSpecBody = { - Type: 'Filespec', - AFRelationship: options.relationship, - F: new String(options.name), - EF: { - F: ref - }, - UF: new String(options.name) - }; - if (options.description) { - fileSpecBody.Desc = new String(options.description); - } - const filespec = this.ref(fileSpecBody); - filespec.end(); - if (!options.hidden) { - this.addNamedEmbeddedFile(options.name, filespec); - } - if (this._root.data.AF) { - this._root.data.AF.push(filespec); - } else { - this._root.data.AF = [filespec]; - } - return filespec; - } -}; -function isEqual(a, b) { - return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate.getTime() === b.Params.CreationDate.getTime() && (a.Params.ModDate === undefined && b.Params.ModDate === undefined || a.Params.ModDate.getTime() === b.Params.ModDate.getTime()); -} - -var PDFA = { - initPDFA(pSubset) { - if (pSubset.charAt(pSubset.length - 3) === '-') { - this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase(); - this.subset = parseInt(pSubset.charAt(pSubset.length - 2)); - } else { - this.subset_conformance = 'B'; - this.subset = parseInt(pSubset.charAt(pSubset.length - 1)); - } - }, - endSubset() { - this._addPdfaMetadata(); - this._addColorOutputIntent(); - }, - _addColorOutputIntent() { - const iccProfile = fs.readFileSync(`${__dirname}/data/sRGB_IEC61966_2_1.icc`); - const colorProfileRef = this.ref({ - Length: iccProfile.length, - N: 3 - }); - colorProfileRef.write(iccProfile); - colorProfileRef.end(); - const intentRef = this.ref({ - Type: 'OutputIntent', - S: 'GTS_PDFA1', - Info: new String('sRGB IEC61966-2.1'), - OutputConditionIdentifier: new String('sRGB IEC61966-2.1'), - DestOutputProfile: colorProfileRef - }); - intentRef.end(); - this._root.data.OutputIntents = [intentRef]; - }, - _getPdfaid() { - return ` - - ${this.subset} - ${this.subset_conformance} - - `; - }, - _addPdfaMetadata() { - this.appendXML(this._getPdfaid()); - } -}; - -var PDFUA = { - initPDFUA() { - this.subset = 1; - }, - endSubset() { - this._addPdfuaMetadata(); - }, - _addPdfuaMetadata() { - this.appendXML(this._getPdfuaid()); - }, - _getPdfuaid() { - return ` - - ${this.subset} - - `; - } -}; - -var SubsetMixin = { - _importSubset(subset) { - Object.assign(this, subset); - }, - initSubset(options) { - switch (options.subset) { - case 'PDF/A-1': - case 'PDF/A-1a': - case 'PDF/A-1b': - case 'PDF/A-2': - case 'PDF/A-2a': - case 'PDF/A-2b': - case 'PDF/A-3': - case 'PDF/A-3a': - case 'PDF/A-3b': - this._importSubset(PDFA); - this.initPDFA(options.subset); - break; - case 'PDF/UA': - this._importSubset(PDFUA); - this.initPDFUA(); - break; - } - } -}; - -const ROW_FIELDS = ['height', 'minHeight', 'maxHeight']; -const COLUMN_FIELDS = ['width', 'minWidth', 'maxWidth']; -function memoize(fn, maxSize) { - const cache = new Map(); - return function () { - const key = arguments.length <= 0 ? undefined : arguments[0]; - if (!cache.has(key)) { - cache.set(key, fn(...arguments)); - if (cache.size > maxSize) cache.delete(cache.keys().next()); - } - return cache.get(key); - }; -} -function isObject(item) { - return item && typeof item === 'object' && !Array.isArray(item); -} -function deepMerge(target) { - if (!isObject(target)) return target; - target = deepClone(target); - for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - sources[_key - 1] = arguments[_key]; - } - for (const source of sources) { - if (isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!(key in target)) target[key] = {}; - target[key] = deepMerge(target[key], source[key]); - } else if (source[key] !== undefined) { - target[key] = deepClone(source[key]); - } - } - } - } - return target; -} -function deepClone(obj) { - let result = obj; - if (obj && typeof obj == 'object') { - result = Array.isArray(obj) ? [] : {}; - for (const key in obj) result[key] = deepClone(obj[key]); - } - return result; -} - -function normalizedDefaultStyle(defaultStyleInternal) { - let defaultStyle = defaultStyleInternal; - if (typeof defaultStyle !== 'object') defaultStyle = { - text: defaultStyle - }; - const defaultRowStyle = Object.fromEntries(Object.entries(defaultStyle).filter(_ref => { - let [k] = _ref; - return ROW_FIELDS.includes(k); - })); - const defaultColStyle = Object.fromEntries(Object.entries(defaultStyle).filter(_ref2 => { - let [k] = _ref2; - return COLUMN_FIELDS.includes(k); - })); - defaultStyle.padding = normalizeSides(defaultStyle.padding); - defaultStyle.border = normalizeSides(defaultStyle.border); - defaultStyle.borderColor = normalizeSides(defaultStyle.borderColor); - defaultStyle.align = normalizeAlignment(defaultStyle.align); - return { - defaultStyle, - defaultRowStyle, - defaultColStyle - }; -} -function normalizedRowStyle(defaultRowStyle, rowStyleInternal, i) { - let rowStyle = rowStyleInternal(i); - if (rowStyle == null || typeof rowStyle !== 'object') { - rowStyle = { - height: rowStyle - }; - } - rowStyle.padding = normalizeSides(rowStyle.padding); - rowStyle.border = normalizeSides(rowStyle.border); - rowStyle.borderColor = normalizeSides(rowStyle.borderColor); - rowStyle.align = normalizeAlignment(rowStyle.align); - rowStyle = deepMerge(defaultRowStyle, rowStyle); - const document = this.document; - const page = document.page; - const contentHeight = page.contentHeight; - if (rowStyle.height == null || rowStyle.height === 'auto') { - rowStyle.height = 'auto'; - } else { - rowStyle.height = document.sizeToPoint(rowStyle.height, 0, page, contentHeight); - } - rowStyle.minHeight = document.sizeToPoint(rowStyle.minHeight, 0, page, contentHeight); - rowStyle.maxHeight = document.sizeToPoint(rowStyle.maxHeight, 0, page, contentHeight); - return rowStyle; -} -function normalizedColumnStyle(defaultColStyle, colStyleInternal, i) { - let colStyle = colStyleInternal(i); - if (colStyle == null || typeof colStyle !== 'object') { - colStyle = { - width: colStyle - }; - } - colStyle.padding = normalizeSides(colStyle.padding); - colStyle.border = normalizeSides(colStyle.border); - colStyle.borderColor = normalizeSides(colStyle.borderColor); - colStyle.align = normalizeAlignment(colStyle.align); - colStyle = deepMerge(defaultColStyle, colStyle); - if (colStyle.width == null || colStyle.width === '*') { - colStyle.width = '*'; - } else { - colStyle.width = this.document.sizeToPoint(colStyle.width, 0, this.document.page, this._maxWidth); - } - colStyle.minWidth = this.document.sizeToPoint(colStyle.minWidth, 0, this.document.page, this._maxWidth); - colStyle.maxWidth = this.document.sizeToPoint(colStyle.maxWidth, 0, this.document.page, this._maxWidth); - return colStyle; -} -function normalizeAlignment(align) { - return align == null || typeof align === 'string' ? { - x: align, - y: align - } : align; -} - -function normalizeTable() { - const doc = this.document; - const opts = this.opts; - let index = doc._tableIndex++; - this._id = new String(opts.id ?? `table-${index}`); - this._position = { - x: doc.sizeToPoint(opts.position?.x, doc.x), - y: doc.sizeToPoint(opts.position?.y, doc.y) - }; - this._maxWidth = doc.sizeToPoint(opts.maxWidth, doc.page.width - doc.page.margins.right - this._position.x); - const { - defaultStyle, - defaultColStyle, - defaultRowStyle - } = normalizedDefaultStyle(opts.defaultStyle); - this._defaultStyle = defaultStyle; - let colStyle; - if (opts.columnStyles) { - if (Array.isArray(opts.columnStyles)) { - colStyle = i => opts.columnStyles[i]; - } else if (typeof opts.columnStyles === 'function') { - colStyle = memoize(i => opts.columnStyles(i), Infinity); - } else if (typeof opts.columnStyles === 'object') { - colStyle = () => opts.columnStyles; - } - } - if (!colStyle) colStyle = () => ({}); - this._colStyle = normalizedColumnStyle.bind(this, defaultColStyle, colStyle); - let rowStyle; - if (opts.rowStyles) { - if (Array.isArray(opts.rowStyles)) { - rowStyle = i => opts.rowStyles[i]; - } else if (typeof opts.rowStyles === 'function') { - rowStyle = memoize(i => opts.rowStyles(i), 10); - } else if (typeof opts.rowStyles === 'object') { - rowStyle = () => opts.rowStyles; - } - } - if (!rowStyle) rowStyle = () => ({}); - this._rowStyle = normalizedRowStyle.bind(this, defaultRowStyle, rowStyle); -} -function normalizeText(text) { - if (text != null) text = `${text}`; - return text; -} -function normalizeCell(cell, rowIndex, colIndex) { - const colStyle = this._colStyle(colIndex); - let rowStyle = this._rowStyle(rowIndex); - const font = deepMerge({}, colStyle.font, rowStyle.font, cell.font); - const customFont = Object.values(font).filter(v => v != null).length > 0; - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (customFont) { - if (font.src) doc.font(font.src, font.family); - if (font.size) doc.fontSize(font.size); - rowStyle = this._rowStyle(rowIndex); - } - cell.padding = normalizeSides(cell.padding); - cell.border = normalizeSides(cell.border); - cell.borderColor = normalizeSides(cell.borderColor); - const config = deepMerge(this._defaultStyle, colStyle, rowStyle, cell); - config.rowIndex = rowIndex; - config.colIndex = colIndex; - config.font = font ?? {}; - config.customFont = customFont; - config.text = normalizeText(config.text); - config.rowSpan = config.rowSpan ?? 1; - config.colSpan = config.colSpan ?? 1; - config.padding = normalizeSides(config.padding, '0.25em', x => doc.sizeToPoint(x, '0.25em')); - config.border = normalizeSides(config.border, 1, x => doc.sizeToPoint(x, 1)); - config.borderColor = normalizeSides(config.borderColor, 'black', x => x ?? 'black'); - config.align = normalizeAlignment(config.align); - config.align.x = config.align.x ?? 'left'; - config.align.y = config.align.y ?? 'top'; - config.textStroke = doc.sizeToPoint(config.textStroke, 0); - config.textStrokeColor = config.textStrokeColor ?? 'black'; - config.textColor = config.textColor ?? 'black'; - config.textOptions = config.textOptions ?? {}; - config.id = new String(config.id ?? `${this._id}-${rowIndex}-${colIndex}`); - config.type = config.type?.toUpperCase() === 'TH' ? 'TH' : 'TD'; - if (config.scope) { - config.scope = config.scope.toLowerCase(); - if (config.scope === 'row') config.scope = 'Row';else if (config.scope === 'both') config.scope = 'Both';else if (config.scope === 'column') config.scope = 'Column'; - } - if (typeof this.opts.debug === 'boolean') config.debug = this.opts.debug; - if (customFont) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - return config; -} -function normalizeRow(row, rowIndex) { - if (!this._cellClaim) this._cellClaim = new Set(); - let colIndex = 0; - return row.map(cell => { - if (cell == null || typeof cell !== 'object') cell = { - text: cell - }; - while (this._cellClaim.has(`${rowIndex},${colIndex}`)) { - colIndex++; - } - cell = normalizeCell.call(this, cell, rowIndex, colIndex); - for (let i = 0; i < cell.rowSpan; i++) { - for (let j = 0; j < cell.colSpan; j++) { - this._cellClaim.add(`${rowIndex + i},${colIndex + j}`); - } - } - colIndex += cell.colSpan; - return cell; - }); -} - -function ensure(row) { - this._columnWidths = []; - ensureColumnWidths.call(this, row.reduce((a, cell) => a + cell.colSpan, 0)); - this._rowHeights = []; - this._rowYPos = [this._position.y]; - this._rowBuffer = new Set(); -} -function ensureColumnWidths(numCols) { - let starColumnIndexes = []; - let starMinAcc = 0; - let unclaimedWidth = this._maxWidth; - for (let i = 0; i < numCols; i++) { - let col = this._colStyle(i); - if (col.width === '*') { - starColumnIndexes[i] = col; - starMinAcc += col.minWidth; - } else { - unclaimedWidth -= col.width; - this._columnWidths[i] = col.width; - } - } - let starColCount = starColumnIndexes.reduce(x => x + 1, 0); - if (starMinAcc >= unclaimedWidth) { - starColumnIndexes.forEach((cell, i) => { - this._columnWidths[i] = cell.minWidth; - }); - } else if (starColCount > 0) { - starColumnIndexes.forEach((col, i) => { - let starSize = unclaimedWidth / starColCount; - this._columnWidths[i] = Math.max(starSize, col.minWidth); - if (col.maxWidth > 0) { - this._columnWidths[i] = Math.min(this._columnWidths[i], col.maxWidth); - } - unclaimedWidth -= this._columnWidths[i]; - starColCount--; - }); - } - let tempX = this._position.x; - this._columnXPos = Array.from(this._columnWidths, v => { - const t = tempX; - tempX += v; - return t; - }); -} -function measure(row, rowIndex) { - row.forEach(cell => this._rowBuffer.add(cell)); - if (rowIndex > 0) { - this._rowYPos[rowIndex] = this._rowYPos[rowIndex - 1] + this._rowHeights[rowIndex - 1]; - } - const rowStyle = this._rowStyle(rowIndex); - let toRender = []; - this._rowBuffer.forEach(cell => { - if (cell.rowIndex + cell.rowSpan - 1 === rowIndex) { - toRender.push(measureCell.call(this, cell, rowStyle.height)); - this._rowBuffer.delete(cell); - } - }); - let rowHeight = rowStyle.height; - if (rowHeight === 'auto') { - rowHeight = toRender.reduce((acc, cell) => { - let minHeight = cell.textBounds.height + cell.padding.top + cell.padding.bottom; - for (let i = 0; i < cell.rowSpan - 1; i++) { - minHeight -= this._rowHeights[cell.rowIndex + i]; - } - return Math.max(acc, minHeight); - }, 0); - } - rowHeight = Math.max(rowHeight, rowStyle.minHeight); - if (rowStyle.maxHeight > 0) { - rowHeight = Math.min(rowHeight, rowStyle.maxHeight); - } - this._rowHeights[rowIndex] = rowHeight; - let newPage = false; - if (rowHeight > this.document.page.contentHeight) { - console.warn(new Error(`Row ${rowIndex} requested more than the safe page height, row has been clamped`).stack.slice(7)); - this._rowHeights[rowIndex] = this.document.page.maxY() - this._rowYPos[rowIndex]; - } else if (this._rowYPos[rowIndex] + rowHeight >= this.document.page.maxY()) { - this._rowYPos[rowIndex] = this.document.page.margins.top; - newPage = true; - } - return { - newPage, - toRender: toRender.map(cell => measureCell.call(this, cell, rowHeight)) - }; -} -function measureCell(cell, rowHeight) { - let cellWidth = 0; - for (let i = 0; i < cell.colSpan; i++) { - cellWidth += this._columnWidths[cell.colIndex + i]; - } - let cellHeight = rowHeight; - if (cellHeight === 'auto') { - cellHeight = this.document.page.contentHeight; - } else { - for (let i = 0; i < cell.rowSpan - 1; i++) { - cellHeight += this._rowHeights[cell.rowIndex + i]; - } - } - const textAllocatedWidth = cellWidth - cell.padding.left - cell.padding.right; - const textAllocatedHeight = cellHeight - cell.padding.top - cell.padding.bottom; - const rotation = cell.textOptions.rotation ?? 0; - const { - width: textMaxWidth, - height: textMaxHeight - } = computeBounds(rotation, textAllocatedWidth, textAllocatedHeight); - const textOptions = { - align: cell.align.x, - ellipsis: true, - stroke: cell.textStroke > 0, - fill: true, - width: textMaxWidth, - height: textMaxHeight, - rotation, - ...cell.textOptions - }; - let textBounds = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - if (cell.text) { - const rollbackFont = this.document._fontSource; - const rollbackFontSize = this.document._fontSize; - const rollbackFontFamily = this.document._fontFamily; - if (cell.font?.src) this.document.font(cell.font.src, cell.font?.family); - if (cell.font?.size) this.document.fontSize(cell.font.size); - const unRotatedTextBounds = this.document.boundsOfString(cell.text, 0, 0, { - ...textOptions, - rotation: 0 - }); - textOptions.width = unRotatedTextBounds.width; - textOptions.height = unRotatedTextBounds.height; - textBounds = this.document.boundsOfString(cell.text, 0, 0, textOptions); - this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - } - return { - ...cell, - textOptions, - x: this._columnXPos[cell.colIndex], - y: this._rowYPos[cell.rowIndex], - textX: this._columnXPos[cell.colIndex] + cell.padding.left, - textY: this._rowYPos[cell.rowIndex] + cell.padding.top, - width: cellWidth, - height: cellHeight, - textAllocatedHeight, - textAllocatedWidth, - textBounds - }; -} -function computeBounds(rotation, allocWidth, allocHeight) { - let textMaxWidth, textMaxHeight; - const cos = cosine(rotation); - const sin = sine(rotation); - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = allocWidth / (2 * cos); - textMaxHeight = allocWidth / (2 * sin); - } else { - textMaxHeight = allocWidth / (2 * cos); - textMaxWidth = allocWidth / (2 * sin); - } - const EF = sin * textMaxWidth; - const FG = cos * textMaxHeight; - if (EF + FG > allocHeight) { - const denominator = cos * cos - sin * sin; - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxHeight = (allocHeight * cos - allocWidth * sin) / denominator; - } else { - textMaxHeight = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxWidth = (allocHeight * cos - allocWidth * sin) / denominator; - } - } - return { - width: Math.abs(textMaxWidth), - height: Math.abs(textMaxHeight) - }; -} - -function accommodateTable() { - const structParent = this.opts.structParent; - if (structParent) { - this._tableStruct = this.document.struct('Table'); - this._tableStruct.dictionary.data.ID = this._id; - if (structParent instanceof PDFStructureElement) { - structParent.add(this._tableStruct); - } else if (structParent instanceof PDFDocument) { - structParent.addStructure(this._tableStruct); - } - this._headerRowLookup = {}; - this._headerColumnLookup = {}; - } -} -function accommodateCleanup() { - if (this._tableStruct) this._tableStruct.end(); -} -function accessibleRow(row, rowIndex, renderCell) { - const rowStruct = this.document.struct('TR'); - rowStruct.dictionary.data.ID = new String(`${this._id}-${rowIndex}`); - this._tableStruct.add(rowStruct); - row.forEach(cell => renderCell(cell, rowStruct)); - rowStruct.end(); -} -function accessibleCell(cell, rowStruct, callback) { - const doc = this.document; - const cellStruct = doc.struct(cell.type, { - title: cell.title - }); - cellStruct.dictionary.data.ID = cell.id; - rowStruct.add(cellStruct); - const padding = cell.padding; - const border = cell.border; - const attributes = { - O: 'Table', - Width: cell.width, - Height: cell.height, - Padding: [padding.top, padding.bottom, padding.left, padding.right], - RowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined, - ColSpan: cell.colSpan > 1 ? cell.colSpan : undefined, - BorderThickness: [border.top, border.bottom, border.left, border.right] - }; - if (cell.type === 'TH') { - if (cell.scope === 'Row' || cell.scope === 'Both') { - for (let i = 0; i < cell.rowSpan; i++) { - if (!this._headerRowLookup[cell.rowIndex + i]) { - this._headerRowLookup[cell.rowIndex + i] = []; - } - this._headerRowLookup[cell.rowIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - if (cell.scope === 'Column' || cell.scope === 'Both') { - for (let i = 0; i < cell.colSpan; i++) { - if (!this._headerColumnLookup[cell.colIndex + i]) { - this._headerColumnLookup[cell.colIndex + i] = []; - } - this._headerColumnLookup[cell.colIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - } - const Headers = new Set([...Array.from({ - length: cell.colSpan - }, (_, i) => this._headerColumnLookup[cell.colIndex + i]).flat(), ...Array.from({ - length: cell.rowSpan - }, (_, i) => this._headerRowLookup[cell.rowIndex + i]).flat()].filter(Boolean)); - if (Headers.size) attributes.Headers = Array.from(Headers); - const normalizeColor = doc._normalizeColor; - if (cell.backgroundColor != null) { - attributes.BackgroundColor = normalizeColor(cell.backgroundColor); - } - const hasBorder = [border.top, border.bottom, border.left, border.right]; - if (hasBorder.some(x => x)) { - const borderColor = cell.borderColor; - attributes.BorderColor = [hasBorder[0] ? normalizeColor(borderColor.top) : null, hasBorder[1] ? normalizeColor(borderColor.bottom) : null, hasBorder[2] ? normalizeColor(borderColor.left) : null, hasBorder[3] ? normalizeColor(borderColor.right) : null]; - } - Object.keys(attributes).forEach(key => attributes[key] === undefined && delete attributes[key]); - cellStruct.dictionary.data.A = doc.ref(attributes); - cellStruct.add(callback); - cellStruct.end(); - cellStruct.dictionary.data.A.end(); -} - -function renderRow(row, rowIndex) { - if (this._tableStruct) { - accessibleRow.call(this, row, rowIndex, renderCell.bind(this)); - } else { - row.forEach(cell => renderCell.call(this, cell)); - } - return this._rowYPos[rowIndex] + this._rowHeights[rowIndex]; -} -function renderCell(cell, rowStruct) { - const cellRenderer = () => { - if (cell.backgroundColor != null) { - this.document.save().rect(cell.x, cell.y, cell.width, cell.height).fill(cell.backgroundColor).restore(); - } - renderBorder.call(this, cell.border, cell.borderColor, cell.x, cell.y, cell.width, cell.height); - if (cell.debug) { - this.document.save(); - this.document.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - this.document.rect(cell.x, cell.y, cell.width, cell.height).stroke('green'); - this.document.restore(); - } - if (cell.text) renderCellText.call(this, cell); - }; - if (rowStruct) accessibleCell.call(this, cell, rowStruct, cellRenderer);else cellRenderer(); -} -function renderCellText(cell) { - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (cell.customFont) { - if (cell.font.src) doc.font(cell.font.src, cell.font.family); - if (cell.font.size) doc.fontSize(cell.font.size); - } - const x = cell.textX; - const y = cell.textY; - const Ah = cell.textAllocatedHeight; - const Aw = cell.textAllocatedWidth; - const Cw = cell.textBounds.width; - const Ch = cell.textBounds.height; - const Ox = -cell.textBounds.x; - const Oy = -cell.textBounds.y; - const PxScale = cell.align.x === 'right' ? 1 : cell.align.x === 'center' ? 0.5 : 0; - const Px = (Aw - Cw) * PxScale; - const PyScale = cell.align.y === 'bottom' ? 1 : cell.align.y === 'center' ? 0.5 : 0; - const Py = (Ah - Ch) * PyScale; - const dx = Px + Ox; - const dy = Py + Oy; - if (cell.debug) { - doc.save(); - doc.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - if (cell.text) { - doc.moveTo(x + Px, y).lineTo(x + Px, y + Ah).moveTo(x + Px + Cw, y).lineTo(x + Px + Cw, y + Ah).stroke('blue').moveTo(x, y + Py).lineTo(x + Aw, y + Py).moveTo(x, y + Py + Ch).lineTo(x + Aw, y + Py + Ch).stroke('green'); - } - doc.rect(x, y, Aw, Ah).stroke('orange'); - doc.restore(); - } - doc.save().rect(x, y, Aw, Ah).clip(); - doc.fillColor(cell.textColor).strokeColor(cell.textStrokeColor); - if (cell.textStroke > 0) doc.lineWidth(cell.textStroke); - doc.text(cell.text, x + dx, y + dy, cell.textOptions); - doc.restore(); - if (cell.font) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); -} -function renderBorder(border, borderColor, x, y, width, height, mask) { - border = Object.fromEntries(Object.entries(border).map(_ref => { - let [k, v] = _ref; - return [k, mask && !mask[k] ? 0 : v]; - })); - const doc = this.document; - if ([border.right, border.bottom, border.left].every(val => val === border.top)) { - if (border.top > 0) { - doc.save().lineWidth(border.top).rect(x, y, width, height).stroke(borderColor.top).restore(); - } - } else { - if (border.top > 0) { - doc.save().lineWidth(border.top).moveTo(x, y).lineTo(x + width, y).stroke(borderColor.top).restore(); - } - if (border.right > 0) { - doc.save().lineWidth(border.right).moveTo(x + width, y).lineTo(x + width, y + height).stroke(borderColor.right).restore(); - } - if (border.bottom > 0) { - doc.save().lineWidth(border.bottom).moveTo(x + width, y + height).lineTo(x, y + height).stroke(borderColor.bottom).restore(); - } - if (border.left > 0) { - doc.save().lineWidth(border.left).moveTo(x, y + height).lineTo(x, y).stroke(borderColor.left).restore(); - } - } -} - -class PDFTable { - constructor(document) { - let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - this.document = document; - this.opts = Object.freeze(opts); - normalizeTable.call(this); - accommodateTable.call(this); - this._currRowIndex = 0; - this._ended = false; - if (opts.data) { - for (const row of opts.data) this.row(row); - return this.end(); - } - } - row(row) { - let lastRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - if (this._ended) { - throw new Error(`Table was marked as ended on row ${this._currRowIndex}`); - } - row = Array.from(row); - row = normalizeRow.call(this, row, this._currRowIndex); - if (this._currRowIndex === 0) ensure.call(this, row); - const { - newPage, - toRender - } = measure.call(this, row, this._currRowIndex); - if (newPage) this.document.continueOnNewPage(); - const yPos = renderRow.call(this, toRender, this._currRowIndex); - this.document.x = this._position.x; - this.document.y = yPos; - if (lastRow) return this.end(); - this._currRowIndex++; - return this; - } - end() { - while (this._rowBuffer?.size) this.row([]); - this._ended = true; - accommodateCleanup.call(this); - return this.document; - } -} - -var TableMixin = { - initTables() { - this._tableIndex = 0; - }, - table(opts) { - return new PDFTable(this, opts); - } -}; - -class PDFMetadata { - constructor() { - this._metadata = ` - - - - `; - } - _closeTags() { - this._metadata = this._metadata.concat(` - - - - `); - } - append(xml) { - let newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this._metadata = this._metadata.concat(xml); - if (newline) this._metadata = this._metadata.concat('\n'); - } - getXML() { - return this._metadata; - } - getLength() { - return this._metadata.length; - } - end() { - this._closeTags(); - this._metadata = this._metadata.trim(); - } -} - -var MetadataMixin = { - initMetadata() { - this.metadata = new PDFMetadata(); - }, - appendXML(xml) { - let newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this.metadata.append(xml, newline); - }, - _addInfo() { - this.appendXML(` - - ${this.info.CreationDate.toISOString().split('.')[0] + 'Z'} - ${this.info.Creator} - - `); - if (this.info.Title || this.info.Author || this.info.Subject) { - this.appendXML(` - - `); - if (this.info.Title) { - this.appendXML(` - - - ${this.info.Title} - - - `); - } - if (this.info.Author) { - this.appendXML(` - - - ${this.info.Author} - - - `); - } - if (this.info.Subject) { - this.appendXML(` - - - ${this.info.Subject} - - - `); - } - this.appendXML(` - - `); - } - this.appendXML(` - - ${this.info.Creator}`, false); - if (this.info.Keywords) { - this.appendXML(` - ${this.info.Keywords}`, false); - } - this.appendXML(` - - `); - }, - endMetadata() { - this._addInfo(); - this.metadata.end(); - if (this.version != 1.3) { - this.metadataRef = this.ref({ - length: this.metadata.getLength(), - Type: 'Metadata', - Subtype: 'XML' - }); - this.metadataRef.compress = false; - this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8')); - this.metadataRef.end(); - this._root.data.Metadata = this.metadataRef; - } - } -}; - -class PDFDocument extends stream.Readable { - constructor() { - let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - super(options); - this.options = options; - switch (options.pdfVersion) { - case '1.4': - this.version = 1.4; - break; - case '1.5': - this.version = 1.5; - break; - case '1.6': - this.version = 1.6; - break; - case '1.7': - case '1.7ext3': - this.version = 1.7; - break; - default: - this.version = 1.3; - break; - } - this.compress = this.options.compress != null ? this.options.compress : true; - this._pageBuffer = []; - this._pageBufferStart = 0; - this._offsets = []; - this._waiting = 0; - this._ended = false; - this._offset = 0; - const Pages = this.ref({ - Type: 'Pages', - Count: 0, - Kids: [] - }); - const Names = this.ref({ - Dests: new PDFNameTree() - }); - this._root = this.ref({ - Type: 'Catalog', - Pages, - Names - }); - if (this.options.lang) { - this._root.data.Lang = new String(this.options.lang); - } - this.page = null; - this.initMetadata(); - this.initColor(); - this.initVector(); - this.initFonts(options.font); - this.initText(); - this.initImages(); - this.initOutline(); - this.initMarkings(options); - this.initTables(); - this.initSubset(options); - this.info = { - Producer: 'PDFKit', - Creator: 'PDFKit', - CreationDate: new Date() - }; - if (this.options.info) { - for (let key in this.options.info) { - const val = this.options.info[key]; - this.info[key] = val; - } - } - if (this.options.displayTitle) { - this._root.data.ViewerPreferences = this.ref({ - DisplayDocTitle: true - }); - } - this._id = PDFSecurity.generateFileID(this.info); - this._security = PDFSecurity.create(this, options); - this._write(`%PDF-${this.version}`); - this._write('%\xFF\xFF\xFF\xFF'); - if (this.options.autoFirstPage !== false) { - this.addPage(); - } - } - addPage(options) { - if (options == null) { - ({ - options - } = this); - } - if (!this.options.bufferPages) { - this.flushPages(); - } - this.page = new PDFPage(this, options); - this._pageBuffer.push(this.page); - const pages = this._root.data.Pages.data; - pages.Kids.push(this.page.dictionary); - pages.Count++; - this.x = this.page.margins.left; - this.y = this.page.margins.top; - this._ctm = [1, 0, 0, 1, 0, 0]; - this.transform(1, 0, 0, -1, 0, this.page.height); - this.emit('pageAdded'); - return this; - } - continueOnNewPage(options) { - const pageMarkings = this.endPageMarkings(this.page); - this.addPage(options ?? this.page._options); - this.initPageMarkings(pageMarkings); - return this; - } - bufferedPageRange() { - return { - start: this._pageBufferStart, - count: this._pageBuffer.length - }; - } - switchToPage(n) { - let page; - if (!(page = this._pageBuffer[n - this._pageBufferStart])) { - throw new Error(`switchToPage(${n}) out of bounds, current buffer covers pages ${this._pageBufferStart} to ${this._pageBufferStart + this._pageBuffer.length - 1}`); - } - return this.page = page; - } - flushPages() { - const pages = this._pageBuffer; - this._pageBuffer = []; - this._pageBufferStart += pages.length; - for (let page of pages) { - this.endPageMarkings(page); - page.end(); - } - } - addNamedDestination(name) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - if (args.length === 0) { - args = ['XYZ', null, null, null]; - } - if (args[0] === 'XYZ' && args[2] !== null) { - args[2] = this.page.height - args[2]; - } - args.unshift(this.page.dictionary); - this._root.data.Names.data.Dests.add(name, args); - } - addNamedEmbeddedFile(name, ref) { - if (!this._root.data.Names.data.EmbeddedFiles) { - this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ - limits: false - }); - } - this._root.data.Names.data.EmbeddedFiles.add(name, ref); - } - addNamedJavaScript(name, js) { - if (!this._root.data.Names.data.JavaScript) { - this._root.data.Names.data.JavaScript = new PDFNameTree(); - } - let data = { - JS: new String(js), - S: 'JavaScript' - }; - this._root.data.Names.data.JavaScript.add(name, data); - } - ref(data) { - const ref = new PDFReference(this, this._offsets.length + 1, data); - this._offsets.push(null); - this._waiting++; - return ref; - } - _read() {} - _write(data) { - if (!Buffer.isBuffer(data)) { - data = Buffer.from(data + '\n', 'binary'); - } - this.push(data); - this._offset += data.length; - } - addContent(data) { - this.page.write(data); - return this; - } - _refEnd(ref) { - this._offsets[ref.id - 1] = ref.offset; - if (--this._waiting === 0 && this._ended) { - this._finalize(); - this._ended = false; - } - } - end() { - this.flushPages(); - this._info = this.ref(); - for (let key in this.info) { - let val = this.info[key]; - if (typeof val === 'string') { - val = new String(val); - } - let entry = this.ref(val); - entry.end(); - this._info.data[key] = entry; - } - this._info.end(); - for (let name in this._fontFamilies) { - const font = this._fontFamilies[name]; - font.finalize(); - } - this.endOutline(); - this.endMarkings(); - if (this.subset) { - this.endSubset(); - } - this.endMetadata(); - this._root.end(); - this._root.data.Pages.end(); - this._root.data.Names.end(); - this.endAcroForm(); - if (this._root.data.ViewerPreferences) { - this._root.data.ViewerPreferences.end(); - } - if (this._security) { - this._security.end(); - } - if (this._waiting === 0) { - this._finalize(); - } else { - this._ended = true; - } - } - _finalize() { - const xRefOffset = this._offset; - this._write('xref'); - this._write(`0 ${this._offsets.length + 1}`); - this._write('0000000000 65535 f '); - for (let offset of this._offsets) { - offset = `0000000000${offset}`.slice(-10); - this._write(offset + ' 00000 n '); - } - const trailer = { - Size: this._offsets.length + 1, - Root: this._root, - Info: this._info, - ID: [this._id, this._id] - }; - if (this._security) { - trailer.Encrypt = this._security.dictionary; - } - this._write('trailer'); - this._write(PDFObject.convert(trailer)); - this._write('startxref'); - this._write(`${xRefOffset}`); - this._write('%%EOF'); - this.push(null); - } - toString() { - return '[object PDFDocument]'; - } -} -const mixin = methods => { - Object.assign(PDFDocument.prototype, methods); -}; -mixin(MetadataMixin); -mixin(ColorMixin); -mixin(VectorMixin); -mixin(FontsMixin); -mixin(TextMixin); -mixin(ImagesMixin); -mixin(AnnotationsMixin); -mixin(OutlineMixin); -mixin(MarkingsMixin); -mixin(AcroFormMixin); -mixin(AttachmentsMixin); -mixin(SubsetMixin); -mixin(TableMixin); -PDFDocument.LineWrapper = LineWrapper; - -export { PDFDocument as default }; -//# sourceMappingURL=pdfkit.es.js.map diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js.map b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js.map deleted file mode 100644 index 7e63995..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pdfkit.es.js","sources":["../lib/abstract_reference.js","../lib/tree.js","../lib/spotcolor.js","../lib/object.js","../lib/reference.js","../lib/utils.js","../lib/page.js","../lib/name_tree.js","../lib/saslprep/lib/util.js","../lib/saslprep/lib/code-points.js","../lib/saslprep/index.js","../lib/security.js","../lib/gradient.js","../lib/pattern.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/structure_content.js","../lib/structure_element.js","../lib/number_tree.js","../lib/mixins/markings.js","../lib/mixins/acroform.js","../lib/mixins/attachments.js","../lib/mixins/pdfa.js","../lib/mixins/pdfua.js","../lib/mixins/subsets.js","../lib/table/utils.js","../lib/table/style.js","../lib/table/normalize.js","../lib/table/size.js","../lib/table/accessibility.js","../lib/table/render.js","../lib/table/index.js","../lib/mixins/table.js","../lib/metadata.js","../lib/mixins/metadata.js","../lib/document.js"],"sourcesContent":["/*\nPDFAbstractReference - abstract class for PDF reference\n*/\n\nclass PDFAbstractReference {\n toString() {\n throw new Error('Must be implemented by subclasses');\n }\n}\n\nexport default PDFAbstractReference;\n","/*\nPDFTree - abstract base class for name and number tree objects\n*/\n\nimport PDFObject from './object';\n\nclass PDFTree {\n constructor(options = {}) {\n this._items = {};\n // disable /Limits output for this tree\n this.limits = typeof options.limits === 'boolean' ? options.limits : true;\n }\n\n add(key, val) {\n return (this._items[key] = val);\n }\n\n get(key) {\n return this._items[key];\n }\n\n toString() {\n // Needs to be sorted by key\n const sortedKeys = Object.keys(this._items).sort((a, b) =>\n this._compareKeys(a, b),\n );\n\n const out = ['<<'];\n if (this.limits && sortedKeys.length > 1) {\n const first = sortedKeys[0],\n last = sortedKeys[sortedKeys.length - 1];\n out.push(\n ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`,\n );\n }\n out.push(` /${this._keysName()} [`);\n for (let key of sortedKeys) {\n out.push(\n ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\n this._items[key],\n )}`,\n );\n }\n out.push(']');\n out.push('>>');\n return out.join('\\n');\n }\n\n _compareKeys(/*a, b*/) {\n throw new Error('Must be implemented by subclasses');\n }\n\n _keysName() {\n throw new Error('Must be implemented by subclasses');\n }\n\n _dataForKey(/*k*/) {\n throw new Error('Must be implemented by subclasses');\n }\n}\n\nexport default PDFTree;\n","export default class SpotColor {\n constructor(doc, name, C, M, Y, K) {\n this.id = 'CS' + Object.keys(doc.spotColors).length;\n this.name = name;\n this.values = [C, M, Y, K];\n this.ref = doc.ref([\n 'Separation',\n this.name,\n 'DeviceCMYK',\n {\n Range: [0, 1, 0, 1, 0, 1, 0, 1],\n C0: [0, 0, 0, 0],\n C1: this.values.map((value) => value / 100),\n FunctionType: 2,\n Domain: [0, 1],\n N: 1,\n },\n ]);\n this.ref.end();\n }\n\n toString() {\n return `${this.ref.id} 0 R`;\n }\n}\n","/*\nPDFObject - converts JavaScript types into their corresponding PDF types.\nBy Devon Govett\n*/\n\nimport PDFAbstractReference from './abstract_reference';\nimport PDFTree from './tree';\nimport SpotColor from './spotcolor';\n\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\n\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\nconst escapable = {\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\\\': '\\\\\\\\',\n '(': '\\\\(',\n ')': '\\\\)',\n};\n\n// Convert little endian UTF-16 to big endian\nconst swapBytes = function (buff) {\n const l = buff.length;\n if (l & 0x01) {\n throw new Error('Buffer length must be even');\n } else {\n for (let i = 0, end = l - 1; i < end; i += 2) {\n const a = buff[i];\n buff[i] = buff[i + 1];\n buff[i + 1] = a;\n }\n }\n\n return buff;\n};\n\nclass PDFObject {\n static convert(object, encryptFn = null) {\n // String literals are converted to the PDF name type\n if (typeof object === 'string') {\n return `/${object}`;\n\n // String objects are converted to PDF strings (UTF-16)\n } else if (object instanceof String) {\n let string = object;\n // Detect if this is a unicode string\n let isUnicode = false;\n for (let i = 0, end = string.length; i < end; i++) {\n if (string.charCodeAt(i) > 0x7f) {\n isUnicode = true;\n break;\n }\n }\n\n // If so, encode it as big endian UTF-16\n let stringBuffer;\n if (isUnicode) {\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\n } else {\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\n }\n\n // Encrypt the string when necessary\n if (encryptFn) {\n string = encryptFn(stringBuffer).toString('binary');\n } else {\n string = stringBuffer.toString('binary');\n }\n\n // Escape characters as required by the spec\n string = string.replace(escapableRe, (c) => escapable[c]);\n\n return `(${string})`;\n\n // Buffers are converted to PDF hex strings\n } else if (Buffer.isBuffer(object)) {\n return `<${object.toString('hex')}>`;\n } else if (\n object instanceof PDFAbstractReference ||\n object instanceof PDFTree ||\n object instanceof SpotColor\n ) {\n return object.toString();\n } else if (object instanceof Date) {\n let string =\n `D:${pad(object.getUTCFullYear(), 4)}` +\n pad(object.getUTCMonth() + 1, 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n 'Z';\n\n // Encrypt the string when necessary\n if (encryptFn) {\n string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\n\n // Escape characters as required by the spec\n string = string.replace(escapableRe, (c) => escapable[c]);\n }\n\n return `(${string})`;\n } else if (Array.isArray(object)) {\n const items = object\n .map((e) => PDFObject.convert(e, encryptFn))\n .join(' ');\n return `[${items}]`;\n } else if ({}.toString.call(object) === '[object Object]') {\n const out = ['<<'];\n for (let key in object) {\n const val = object[key];\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\n }\n\n out.push('>>');\n return out.join('\\n');\n } else if (typeof object === 'number') {\n return PDFObject.number(object);\n } else {\n return `${object}`;\n }\n }\n\n static number(n) {\n if (n > -1e21 && n < 1e21) {\n return Math.round(n * 1e6) / 1e6;\n }\n\n throw new Error(`unsupported number: ${n}`);\n }\n}\n\nexport default PDFObject;\n","/*\nPDFReference - represents a reference to another object in the PDF object heirarchy\nBy Devon Govett\n*/\n\nimport zlib from 'zlib';\nimport PDFAbstractReference from './abstract_reference';\nimport PDFObject from './object';\n\nclass PDFReference extends PDFAbstractReference {\n constructor(document, id, data = {}) {\n super();\n this.document = document;\n this.id = id;\n this.data = data;\n this.gen = 0;\n this.compress = this.document.compress && !this.data.Filter;\n this.uncompressedLength = 0;\n this.buffer = [];\n }\n\n write(chunk) {\n if (!(chunk instanceof Uint8Array)) {\n chunk = Buffer.from(chunk + '\\n', 'binary');\n }\n\n this.uncompressedLength += chunk.length;\n if (this.data.Length == null) {\n this.data.Length = 0;\n }\n this.buffer.push(chunk);\n this.data.Length += chunk.length;\n if (this.compress) {\n this.data.Filter = 'FlateDecode';\n }\n }\n\n end(chunk) {\n if (chunk) {\n this.write(chunk);\n }\n this.finalize();\n }\n\n finalize() {\n this.offset = this.document._offset;\n\n const encryptFn = this.document._security\n ? this.document._security.getEncryptFn(this.id, this.gen)\n : null;\n\n if (this.buffer.length) {\n this.buffer = Buffer.concat(this.buffer);\n if (this.compress) {\n this.buffer = zlib.deflateSync(this.buffer);\n }\n\n if (encryptFn) {\n this.buffer = encryptFn(this.buffer);\n }\n\n this.data.Length = this.buffer.length;\n }\n\n this.document._write(`${this.id} ${this.gen} obj`);\n this.document._write(PDFObject.convert(this.data, encryptFn));\n\n if (this.buffer.length) {\n this.document._write('stream');\n this.document._write(this.buffer);\n\n this.buffer = []; // free up memory\n this.document._write('\\nendstream');\n }\n\n this.document._write('endobj');\n this.document._refEnd(this);\n }\n toString() {\n return `${this.id} ${this.gen} R`;\n }\n}\n\nexport default PDFReference;\n","const fArray = new Float32Array(1);\r\nconst uArray = new Uint32Array(fArray.buffer);\r\n\r\nexport function PDFNumber(n) {\r\n // PDF numbers are strictly 32bit\r\n // so convert this number to a 32bit number\r\n // @see ISO 32000-1 Annex C.2 (real numbers)\r\n const rounded = Math.fround(n);\r\n if (rounded <= n) return rounded;\r\n\r\n // Will have to perform 32bit float truncation\r\n fArray[0] = n;\r\n\r\n // Get the 32-bit representation as integer and shift bits\r\n if (n <= 0) {\r\n uArray[0] += 1;\r\n } else {\r\n uArray[0] -= 1;\r\n }\r\n\r\n // Return the float value\r\n return fArray[0];\r\n}\r\n\r\n/**\r\n * Measurement of size\r\n *\r\n * @typedef {number | `${number}` | `${number}${'em' | 'in' | 'px' | 'cm' | 'mm' | 'pc' | 'ex' | 'ch' | 'rem' | 'vw' | 'vmin' | 'vmax' | '%' | 'pt'}`} Size\r\n */\r\n\r\n/**\r\n * @typedef {Array | string | Array} PDFColor\r\n */\r\n\r\n/** @typedef {string | Buffer | Uint8Array | ArrayBuffer} PDFFontSource */\r\n/**\r\n * Side definitions\r\n * - To define all sides, use a single value\r\n * - To define up-down left-right, use a `[Y, X]` array\r\n * - To define each side, use `[top, right, bottom, left]` array\r\n * - Or `{vertical: SideValue, horizontal: SideValue}`\r\n * - Or `{top: SideValue, right: SideValue, bottom: SideValue, left: SideValue}`\r\n *\r\n * @template T\r\n * @typedef {T | [T, T] | [T, T, T, T] | { vertical: T; horizontal: T } | ExpandedSideDefinition} SideDefinition\r\n **/\r\n\r\n/**\r\n * @template T\r\n * @typedef {{ top: T; right: T; bottom: T; left: T }} ExpandedSideDefinition\r\n */\r\n\r\n/**\r\n * Convert any side definition into a static structure\r\n *\r\n * @template S\r\n * @template D\r\n * @template O\r\n * @template {S | D} T\r\n * @param {SideDefinition} sides - The sides to convert\r\n * @param {SideDefinition} defaultDefinition - The value to use when no definition is provided\r\n * @param {function(T): O} transformer - The transformation to apply to the sides once normalized\r\n * @returns {ExpandedSideDefinition}\r\n */\r\nexport function normalizeSides(\r\n sides,\r\n defaultDefinition = undefined,\r\n transformer = (v) => v,\r\n) {\r\n if (\r\n sides == null ||\r\n (typeof sides === 'object' && Object.keys(sides).length === 0)\r\n ) {\r\n sides = defaultDefinition;\r\n }\r\n if (sides == null || typeof sides !== 'object') {\r\n sides = { top: sides, right: sides, bottom: sides, left: sides };\r\n } else if (Array.isArray(sides)) {\r\n if (sides.length === 2) {\r\n sides = { vertical: sides[0], horizontal: sides[1] };\r\n } else {\r\n sides = {\r\n top: sides[0],\r\n right: sides[1],\r\n bottom: sides[2],\r\n left: sides[3],\r\n };\r\n }\r\n }\r\n\r\n if ('vertical' in sides || 'horizontal' in sides) {\r\n sides = {\r\n top: sides.vertical,\r\n right: sides.horizontal,\r\n bottom: sides.vertical,\r\n left: sides.horizontal,\r\n };\r\n }\r\n\r\n return {\r\n top: transformer(sides.top),\r\n right: transformer(sides.right),\r\n bottom: transformer(sides.bottom),\r\n left: transformer(sides.left),\r\n };\r\n}\r\n\r\nexport const MM_TO_CM = 1 / 10; // 1MM = 1CM\r\nexport const CM_TO_IN = 1 / 2.54; // 1CM = 1/2.54 IN\r\nexport const PX_TO_IN = 1 / 96; // 1 PX = 1/96 IN\r\nexport const IN_TO_PT = 72; // 1 IN = 72 PT\r\nexport const PC_TO_PT = 12; // 1 PC = 12 PT\r\n\r\n/**\r\n * Get cosine in degrees of a\r\n *\r\n * Rounding errors are handled\r\n * @param a\r\n * @returns {number}\r\n */\r\nexport function cosine(a) {\r\n if (a === 0) return 1;\r\n if (a === 90) return 0;\r\n if (a === 180) return -1;\r\n if (a === 270) return 0;\r\n return Math.cos((a * Math.PI) / 180);\r\n}\r\n\r\n/**\r\n * Get sine in degrees of a\r\n *\r\n * Rounding errors are handled\r\n * @param a\r\n * @returns {number}\r\n */\r\nexport function sine(a) {\r\n if (a === 0) return 0;\r\n if (a === 90) return 1;\r\n if (a === 180) return 0;\r\n if (a === 270) return -1;\r\n return Math.sin((a * Math.PI) / 180);\r\n}\r\n","/*\nPDFPage - represents a single page in the PDF document\nBy Devon Govett\n*/\n\nimport { normalizeSides } from './utils';\n\n/**\n * @type {SideDefinition}\n */\nconst DEFAULT_MARGINS = {\n top: 72,\n left: 72,\n bottom: 72,\n right: 72,\n};\n\nconst SIZES = {\n '4A0': [4767.87, 6740.79],\n '2A0': [3370.39, 4767.87],\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n A7: [209.76, 297.64],\n A8: [147.4, 209.76],\n A9: [104.88, 147.4],\n A10: [73.7, 104.88],\n B0: [2834.65, 4008.19],\n B1: [2004.09, 2834.65],\n B2: [1417.32, 2004.09],\n B3: [1000.63, 1417.32],\n B4: [708.66, 1000.63],\n B5: [498.9, 708.66],\n B6: [354.33, 498.9],\n B7: [249.45, 354.33],\n B8: [175.75, 249.45],\n B9: [124.72, 175.75],\n B10: [87.87, 124.72],\n C0: [2599.37, 3676.54],\n C1: [1836.85, 2599.37],\n C2: [1298.27, 1836.85],\n C3: [918.43, 1298.27],\n C4: [649.13, 918.43],\n C5: [459.21, 649.13],\n C6: [323.15, 459.21],\n C7: [229.61, 323.15],\n C8: [161.57, 229.61],\n C9: [113.39, 161.57],\n C10: [79.37, 113.39],\n RA0: [2437.8, 3458.27],\n RA1: [1729.13, 2437.8],\n RA2: [1218.9, 1729.13],\n RA3: [864.57, 1218.9],\n RA4: [609.45, 864.57],\n SRA0: [2551.18, 3628.35],\n SRA1: [1814.17, 2551.18],\n SRA2: [1275.59, 1814.17],\n SRA3: [907.09, 1275.59],\n SRA4: [637.8, 907.09],\n EXECUTIVE: [521.86, 756.0],\n FOLIO: [612.0, 936.0],\n LEGAL: [612.0, 1008.0],\n LETTER: [612.0, 792.0],\n TABLOID: [792.0, 1224.0],\n};\n\nclass PDFPage {\n constructor(document, options = {}) {\n this.document = document;\n this._options = options;\n this.size = options.size || 'letter';\n this.layout = options.layout || 'portrait';\n\n // calculate page dimensions\n const dimensions = Array.isArray(this.size)\n ? this.size\n : SIZES[this.size.toUpperCase()];\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n\n this.content = this.document.ref();\n\n if (options.font) document.font(options.font, options.fontFamily);\n if (options.fontSize) document.fontSize(options.fontSize);\n\n // process margins\n // Margin calculation must occur after font assignment to ensure any dynamic sizes are calculated correctly\n this.margins = normalizeSides(\n options.margin ?? options.margins,\n DEFAULT_MARGINS,\n (x) => document.sizeToPoint(x, 0, this),\n );\n\n // Initialize the Font, XObject, and ExtGState dictionaries\n this.resources = this.document.ref({\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n });\n\n // The page dictionary\n this.dictionary = this.document.ref({\n Type: 'Page',\n Parent: this.document._root.data.Pages,\n MediaBox: [0, 0, this.width, this.height],\n Contents: this.content,\n Resources: this.resources,\n });\n\n this.markings = [];\n }\n\n // Lazily create these objects\n get fonts() {\n const data = this.resources.data;\n return data.Font != null ? data.Font : (data.Font = {});\n }\n\n get xobjects() {\n const data = this.resources.data;\n return data.XObject != null ? data.XObject : (data.XObject = {});\n }\n\n get ext_gstates() {\n const data = this.resources.data;\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\n }\n\n get patterns() {\n const data = this.resources.data;\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\n }\n\n get colorSpaces() {\n const data = this.resources.data;\n return data.ColorSpace || (data.ColorSpace = {});\n }\n\n get annotations() {\n const data = this.dictionary.data;\n return data.Annots != null ? data.Annots : (data.Annots = []);\n }\n\n get structParentTreeKey() {\n const data = this.dictionary.data;\n return data.StructParents != null\n ? data.StructParents\n : (data.StructParents = this.document.createStructParentTreeNextKey());\n }\n\n /**\n * The width of the safe contents of a page\n *\n * @returns {number}\n */\n get contentWidth() {\n return this.width - this.margins.left - this.margins.right;\n }\n\n /**\n * The height of the safe contents of a page\n *\n * @returns {number}\n */\n get contentHeight() {\n return this.height - this.margins.top - this.margins.bottom;\n }\n\n maxY() {\n return this.height - this.margins.bottom;\n }\n\n write(chunk) {\n return this.content.write(chunk);\n }\n\n // Set tab order if document is tagged for accessibility.\n _setTabOrder() {\n if (!this.dictionary.Tabs && this.document.hasMarkInfoDictionary()) {\n this.dictionary.data.Tabs = 'S';\n }\n }\n\n end() {\n this._setTabOrder();\n this.dictionary.end();\n this.resources.data.ColorSpace = this.resources.data.ColorSpace || {};\n for (let color of Object.values(this.document.spotColors)) {\n this.resources.data.ColorSpace[color.id] = color;\n }\n this.resources.end();\n return this.content.end();\n }\n}\n\nexport default PDFPage;\n","/*\nPDFNameTree - represents a name tree object\n*/\n\nimport PDFTree from './tree';\n\nclass PDFNameTree extends PDFTree {\n _compareKeys(a, b) {\n return a.localeCompare(b);\n }\n\n _keysName() {\n return 'Names';\n }\n\n _dataForKey(k) {\n return new String(k);\n }\n}\n\nexport default PDFNameTree;\n","/**\n * Check if value is in a range group.\n * @param {number} value\n * @param {number[]} rangeGroup\n * @returns {boolean}\n */\nfunction inRange(value, rangeGroup) {\n if (value < rangeGroup[0]) return false;\n let startRange = 0;\n let endRange = rangeGroup.length / 2;\n while (startRange <= endRange) {\n const middleRange = Math.floor((startRange + endRange) / 2);\n\n // actual array index\n const arrayIndex = middleRange * 2;\n\n // Check if value is in range pointed by actual index\n if (\n value >= rangeGroup[arrayIndex] &&\n value <= rangeGroup[arrayIndex + 1]\n ) {\n return true;\n }\n\n if (value > rangeGroup[arrayIndex + 1]) {\n // Search Right Side Of Array\n startRange = middleRange + 1;\n } else {\n // Search Left Side Of Array\n endRange = middleRange - 1;\n }\n }\n return false;\n}\n\nexport { inRange };\n","import { inRange } from './util';\n\n// prettier-ignore-start\n/**\n * A.1 Unassigned code points in Unicode 3.2\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\n */\nconst unassigned_code_points = [\n 0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350,\n 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383,\n 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7,\n 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff,\n 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b,\n 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef,\n 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b,\n 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e,\n 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a,\n 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984,\n 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3,\n 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca,\n 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb,\n 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29,\n 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d,\n 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d,\n 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e,\n 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4,\n 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1,\n 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e,\n 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a,\n 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b,\n 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b,\n 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d,\n 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba,\n 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6,\n 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29,\n 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49,\n 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84,\n 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4,\n 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7,\n 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04,\n 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44,\n 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65,\n 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc,\n 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5,\n 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c,\n 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c,\n 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6,\n 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf,\n 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede,\n 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98,\n 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028,\n 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f,\n 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3,\n 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249,\n 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287,\n 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1,\n 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf,\n 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311,\n 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d,\n 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff,\n 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d,\n 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff,\n 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c,\n 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47,\n 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e,\n 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5,\n 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053,\n 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f,\n 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184,\n 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff,\n 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705,\n 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e,\n 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0,\n 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a,\n 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097,\n 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef,\n 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff,\n 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff,\n 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e,\n 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37,\n 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2,\n 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff,\n 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67,\n 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00,\n 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd,\n 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f,\n 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff,\n 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455,\n 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8,\n 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1,\n 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515,\n 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545,\n 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd,\n 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd,\n 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd,\n 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd,\n 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f,\n 0xe0080, 0xefffd,\n];\n// prettier-ignore-end\n\nconst isUnassignedCodePoint = (character) =>\n inRange(character, unassigned_code_points);\n\n// prettier-ignore-start\n/**\n * B.1 Commonly mapped to nothing\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\n */\nconst commonly_mapped_to_nothing = [\n 0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c,\n 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d,\n 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03,\n 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07,\n 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c,\n 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff,\n];\n// prettier-ignore-end\n\nconst isCommonlyMappedToNothing = (character) =>\n inRange(character, commonly_mapped_to_nothing);\n\n// prettier-ignore-start\n/**\n * C.1.2 Non-ASCII space characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\n */\nconst non_ASCII_space_characters = [\n 0x00a0, 0x00a0 /* NO-BREAK SPACE */, 0x1680, 0x1680 /* OGHAM SPACE MARK */,\n 0x2000, 0x2000 /* EN QUAD */, 0x2001, 0x2001 /* EM QUAD */, 0x2002,\n 0x2002 /* EN SPACE */, 0x2003, 0x2003 /* EM SPACE */, 0x2004,\n 0x2004 /* THREE-PER-EM SPACE */, 0x2005, 0x2005 /* FOUR-PER-EM SPACE */,\n 0x2006, 0x2006 /* SIX-PER-EM SPACE */, 0x2007, 0x2007 /* FIGURE SPACE */,\n 0x2008, 0x2008 /* PUNCTUATION SPACE */, 0x2009, 0x2009 /* THIN SPACE */,\n 0x200a, 0x200a /* HAIR SPACE */, 0x200b, 0x200b /* ZERO WIDTH SPACE */,\n 0x202f, 0x202f /* NARROW NO-BREAK SPACE */, 0x205f,\n 0x205f /* MEDIUM MATHEMATICAL SPACE */, 0x3000,\n 0x3000 /* IDEOGRAPHIC SPACE */,\n];\n// prettier-ignore-end\n\nconst isNonASCIISpaceCharacter = (character) =>\n inRange(character, non_ASCII_space_characters);\n\n// prettier-ignore-start\nconst non_ASCII_controls_characters = [\n /**\n * C.2.2 Non-ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\n */\n 0x0080, 0x009f /* [CONTROL CHARACTERS] */, 0x06dd,\n 0x06dd /* ARABIC END OF AYAH */, 0x070f,\n 0x070f /* SYRIAC ABBREVIATION MARK */, 0x180e,\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */, 0x200c,\n 0x200c /* ZERO WIDTH NON-JOINER */, 0x200d, 0x200d /* ZERO WIDTH JOINER */,\n 0x2028, 0x2028 /* LINE SEPARATOR */, 0x2029, 0x2029 /* PARAGRAPH SEPARATOR */,\n 0x2060, 0x2060 /* WORD JOINER */, 0x2061, 0x2061 /* FUNCTION APPLICATION */,\n 0x2062, 0x2062 /* INVISIBLE TIMES */, 0x2063,\n 0x2063 /* INVISIBLE SEPARATOR */, 0x206a, 0x206f /* [CONTROL CHARACTERS] */,\n 0xfeff, 0xfeff /* ZERO WIDTH NO-BREAK SPACE */, 0xfff9,\n 0xfffc /* [CONTROL CHARACTERS] */, 0x1d173,\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */,\n];\n\nconst non_character_codepoints = [\n /**\n * C.4 Non-character code points\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\n */\n 0xfdd0, 0xfdef /* [NONCHARACTER CODE POINTS] */, 0xfffe,\n 0xffff /* [NONCHARACTER CODE POINTS] */, 0x1fffe,\n 0x1ffff /* [NONCHARACTER CODE POINTS] */, 0x2fffe,\n 0x2ffff /* [NONCHARACTER CODE POINTS] */, 0x3fffe,\n 0x3ffff /* [NONCHARACTER CODE POINTS] */, 0x4fffe,\n 0x4ffff /* [NONCHARACTER CODE POINTS] */, 0x5fffe,\n 0x5ffff /* [NONCHARACTER CODE POINTS] */, 0x6fffe,\n 0x6ffff /* [NONCHARACTER CODE POINTS] */, 0x7fffe,\n 0x7ffff /* [NONCHARACTER CODE POINTS] */, 0x8fffe,\n 0x8ffff /* [NONCHARACTER CODE POINTS] */, 0x9fffe,\n 0x9ffff /* [NONCHARACTER CODE POINTS] */, 0xafffe,\n 0xaffff /* [NONCHARACTER CODE POINTS] */, 0xbfffe,\n 0xbffff /* [NONCHARACTER CODE POINTS] */, 0xcfffe,\n 0xcffff /* [NONCHARACTER CODE POINTS] */, 0xdfffe,\n 0xdffff /* [NONCHARACTER CODE POINTS] */, 0xefffe,\n 0xeffff /* [NONCHARACTER CODE POINTS] */, 0x10fffe,\n 0x10ffff /* [NONCHARACTER CODE POINTS] */,\n];\n\n/**\n * 2.3. Prohibited Output\n */\nconst prohibited_characters = [\n /**\n * C.2.1 ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\n */\n 0, 0x001f /* [CONTROL CHARACTERS] */, 0x007f, 0x007f /* DELETE */,\n\n /**\n * C.8 Change display properties or are deprecated\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\n */\n 0x0340, 0x0340 /* COMBINING GRAVE TONE MARK */, 0x0341,\n 0x0341 /* COMBINING ACUTE TONE MARK */, 0x200e,\n 0x200e /* LEFT-TO-RIGHT MARK */, 0x200f, 0x200f /* RIGHT-TO-LEFT MARK */,\n 0x202a, 0x202a /* LEFT-TO-RIGHT EMBEDDING */, 0x202b,\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */, 0x202c,\n 0x202c /* POP DIRECTIONAL FORMATTING */, 0x202d,\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */, 0x202e,\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */, 0x206a,\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */, 0x206b,\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */, 0x206c,\n 0x206c /* INHIBIT ARABIC FORM SHAPING */, 0x206d,\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */, 0x206e,\n 0x206e /* NATIONAL DIGIT SHAPES */, 0x206f, 0x206f /* NOMINAL DIGIT SHAPES */,\n\n /**\n * C.7 Inappropriate for canonical representation\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\n */\n 0x2ff0, 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\n\n /**\n * C.5 Surrogate codes\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\n */\n 0xd800, 0xdfff,\n\n /**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n 0xe000, 0xf8ff /* [PRIVATE USE, PLANE 0] */,\n\n /**\n * C.6 Inappropriate for plain text\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\n */\n 0xfff9, 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */, 0xfffa,\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */, 0xfffb,\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */, 0xfffc,\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */, 0xfffd,\n 0xfffd /* REPLACEMENT CHARACTER */,\n\n /**\n * C.9 Tagging characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\n */\n 0xe0001, 0xe0001 /* LANGUAGE TAG */, 0xe0020,\n 0xe007f /* [TAGGING CHARACTERS] */,\n\n /**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n\n 0xf0000, 0xffffd /* [PRIVATE USE, PLANE 15] */, 0x100000,\n 0x10fffd /* [PRIVATE USE, PLANE 16] */,\n];\n// prettier-ignore-end\n\nconst isProhibitedCharacter = (character) =>\n inRange(character, non_ASCII_space_characters) ||\n inRange(character, prohibited_characters) ||\n inRange(character, non_ASCII_controls_characters) ||\n inRange(character, non_character_codepoints);\n\n// prettier-ignore-start\n/**\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\n */\nconst bidirectional_r_al = [\n 0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0,\n 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a,\n 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa,\n 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5,\n 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a,\n 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44,\n 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0,\n 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc,\n];\n// prettier-ignore-end\n\nconst isBidirectionalRAL = (character) =>\n inRange(character, bidirectional_r_al);\n\n// prettier-ignore-start\n/**\n * D.2 Characters with bidirectional property \"L\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\n */\nconst bidirectional_l = [\n 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba,\n 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233,\n 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0,\n 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a,\n 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400,\n 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f,\n 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903,\n 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950,\n 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f,\n 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9,\n 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc,\n 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a,\n 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35,\n 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e,\n 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d,\n 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3,\n 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0,\n 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c,\n 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36,\n 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c,\n 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83,\n 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a,\n 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae,\n 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8,\n 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05,\n 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39,\n 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85,\n 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9,\n 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5,\n 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03,\n 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e,\n 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61,\n 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3,\n 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf,\n 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f,\n 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a,\n 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5,\n 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3,\n 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc,\n 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38,\n 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88,\n 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021,\n 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038,\n 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb,\n 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208,\n 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258,\n 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290,\n 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0,\n 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0,\n 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346,\n 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681,\n 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731,\n 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780,\n 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc,\n 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00,\n 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45,\n 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d,\n 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe,\n 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0,\n 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071,\n 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115,\n 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,\n 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145,\n 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9,\n 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041,\n 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c,\n 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260,\n 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376,\n 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000,\n 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06,\n 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2,\n 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e,\n 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d,\n 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172,\n 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454,\n 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6,\n 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0,\n 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514,\n 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544,\n 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9,\n 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd,\n];\n// prettier-ignore-end\n\nconst isBidirectionalL = (character) => inRange(character, bidirectional_l);\n\nexport {\n isUnassignedCodePoint,\n isCommonlyMappedToNothing,\n isNonASCIISpaceCharacter,\n isProhibitedCharacter,\n isBidirectionalRAL,\n isBidirectionalL,\n};\n","import {\n isUnassignedCodePoint,\n isCommonlyMappedToNothing,\n isNonASCIISpaceCharacter,\n isProhibitedCharacter,\n isBidirectionalRAL,\n isBidirectionalL,\n} from './lib/code-points';\n\n// 2.1. Mapping\n\n/**\n * non-ASCII space characters [StringPrep, C.1.2] that can be\n * mapped to SPACE (U+0020)\n */\nconst mapping2space = isNonASCIISpaceCharacter;\n\n/**\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n * that can be mapped to nothing.\n */\nconst mapping2nothing = isCommonlyMappedToNothing;\n\n// utils\nconst getCodePoint = (character) => character.codePointAt(0);\nconst first = (x) => x[0];\nconst last = (x) => x[x.length - 1];\n\n/**\n * Convert provided string into an array of Unicode Code Points.\n * Based on https://stackoverflow.com/a/21409165/1556249\n * and https://www.npmjs.com/package/code-point-at.\n * @param {string} input\n * @returns {number[]}\n */\nfunction toCodePoints(input) {\n const codepoints = [];\n const size = input.length;\n\n for (let i = 0; i < size; i += 1) {\n const before = input.charCodeAt(i);\n\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\n const next = input.charCodeAt(i + 1);\n\n if (next >= 0xdc00 && next <= 0xdfff) {\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\n i += 1;\n continue;\n }\n }\n\n codepoints.push(before);\n }\n\n return codepoints;\n}\n\n/**\n * SASLprep.\n * @param {string} input\n * @param {Object} opts\n * @param {boolean} opts.allowUnassigned\n * @returns {string}\n */\nfunction saslprep(input, opts = {}) {\n if (typeof input !== 'string') {\n throw new TypeError('Expected string.');\n }\n\n if (input.length === 0) {\n return '';\n }\n\n // 1. Map\n const mapped_input = toCodePoints(input)\n // 1.1 mapping to space\n .map((character) => (mapping2space(character) ? 0x20 : character))\n // 1.2 mapping to nothing\n .filter((character) => !mapping2nothing(character));\n\n // 2. Normalize\n const normalized_input = String.fromCodePoint\n .apply(null, mapped_input)\n .normalize('NFKC');\n\n const normalized_map = toCodePoints(normalized_input);\n\n // 3. Prohibit\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\n\n if (hasProhibited) {\n throw new Error(\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3',\n );\n }\n\n // Unassigned Code Points\n if (opts.allowUnassigned !== true) {\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\n\n if (hasUnassigned) {\n throw new Error(\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5',\n );\n }\n }\n\n // 4. check bidi\n\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\n\n const hasBidiL = normalized_map.some(isBidirectionalL);\n\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\n // contain any LCat character.\n if (hasBidiRAL && hasBidiL) {\n throw new Error(\n 'String must not contain RandALCat and LCat at the same time,' +\n ' see https://tools.ietf.org/html/rfc3454#section-6',\n );\n }\n\n /**\n * 4.2 If a string contains any RandALCat character, a RandALCat\n * character MUST be the first character of the string, and a\n * RandALCat character MUST be the last character of the string.\n */\n\n const isFirstBidiRAL = isBidirectionalRAL(\n getCodePoint(first(normalized_input)),\n );\n const isLastBidiRAL = isBidirectionalRAL(\n getCodePoint(last(normalized_input)),\n );\n\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\n throw new Error(\n 'Bidirectional RandALCat character must be the first and the last' +\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6',\n );\n }\n\n return normalized_input;\n}\n\nexport default saslprep;\n","/*\n PDFSecurity - represents PDF security settings\n By Yang Liu \n */\n\nimport CryptoJS from 'crypto-js';\nimport saslprep from './saslprep/index';\n\nclass PDFSecurity {\n static generateFileID(info = {}) {\n let infoStr = `${info.CreationDate.getTime()}\\n`;\n\n for (let key in info) {\n // eslint-disable-next-line no-prototype-builtins\n if (!info.hasOwnProperty(key)) {\n continue;\n }\n infoStr += `${key}: ${info[key].valueOf()}\\n`;\n }\n\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\n }\n\n static generateRandomWordArray(bytes) {\n return CryptoJS.lib.WordArray.random(bytes);\n }\n\n static create(document, options = {}) {\n if (!options.ownerPassword && !options.userPassword) {\n return null;\n }\n return new PDFSecurity(document, options);\n }\n\n constructor(document, options = {}) {\n if (!options.ownerPassword && !options.userPassword) {\n throw new Error('None of owner password and user password is defined.');\n }\n\n this.document = document;\n this._setupEncryption(options);\n }\n\n _setupEncryption(options) {\n switch (options.pdfVersion) {\n case '1.4':\n case '1.5':\n this.version = 2;\n break;\n case '1.6':\n case '1.7':\n this.version = 4;\n break;\n case '1.7ext3':\n this.version = 5;\n break;\n default:\n this.version = 1;\n break;\n }\n\n const encDict = {\n Filter: 'Standard',\n };\n\n switch (this.version) {\n case 1:\n case 2:\n case 4:\n this._setupEncryptionV1V2V4(this.version, encDict, options);\n break;\n case 5:\n this._setupEncryptionV5(encDict, options);\n break;\n }\n\n this.dictionary = this.document.ref(encDict);\n }\n\n _setupEncryptionV1V2V4(v, encDict, options) {\n let r, permissions;\n switch (v) {\n case 1:\n r = 2;\n this.keyBits = 40;\n permissions = getPermissionsR2(options.permissions);\n break;\n case 2:\n r = 3;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n case 4:\n r = 4;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n }\n\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\n const paddedOwnerPassword = options.ownerPassword\n ? processPasswordR2R3R4(options.ownerPassword)\n : paddedUserPassword;\n\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\n r,\n this.keyBits,\n paddedUserPassword,\n paddedOwnerPassword,\n );\n this.encryptionKey = getEncryptionKeyR2R3R4(\n r,\n this.keyBits,\n this.document._id,\n paddedUserPassword,\n ownerPasswordEntry,\n permissions,\n );\n let userPasswordEntry;\n if (r === 2) {\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\n } else {\n userPasswordEntry = getUserPasswordR3R4(\n this.document._id,\n this.encryptionKey,\n );\n }\n\n encDict.V = v;\n if (v >= 2) {\n encDict.Length = this.keyBits;\n }\n if (v === 4) {\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV2',\n Length: this.keyBits / 8,\n },\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n }\n encDict.R = r;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.P = permissions;\n }\n\n _setupEncryptionV5(encDict, options) {\n this.keyBits = 256;\n const permissions = getPermissionsR3(options.permissions);\n\n const processedUserPassword = processPasswordR5(options.userPassword);\n const processedOwnerPassword = options.ownerPassword\n ? processPasswordR5(options.ownerPassword)\n : processedUserPassword;\n\n this.encryptionKey = getEncryptionKeyR5(\n PDFSecurity.generateRandomWordArray,\n );\n const userPasswordEntry = getUserPasswordR5(\n processedUserPassword,\n PDFSecurity.generateRandomWordArray,\n );\n const userKeySalt = CryptoJS.lib.WordArray.create(\n userPasswordEntry.words.slice(10, 12),\n 8,\n );\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\n processedUserPassword,\n userKeySalt,\n this.encryptionKey,\n );\n const ownerPasswordEntry = getOwnerPasswordR5(\n processedOwnerPassword,\n userPasswordEntry,\n PDFSecurity.generateRandomWordArray,\n );\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\n ownerPasswordEntry.words.slice(10, 12),\n 8,\n );\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\n processedOwnerPassword,\n ownerKeySalt,\n userPasswordEntry,\n this.encryptionKey,\n );\n const permsEntry = getEncryptedPermissionsR5(\n permissions,\n this.encryptionKey,\n PDFSecurity.generateRandomWordArray,\n );\n\n encDict.V = 5;\n encDict.Length = this.keyBits;\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV3',\n Length: this.keyBits / 8,\n },\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n encDict.R = 5;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\n encDict.P = permissions;\n encDict.Perms = wordArrayToBuffer(permsEntry);\n }\n\n getEncryptFn(obj, gen) {\n let digest;\n if (this.version < 5) {\n digest = this.encryptionKey\n .clone()\n .concat(\n CryptoJS.lib.WordArray.create(\n [\n ((obj & 0xff) << 24) |\n ((obj & 0xff00) << 8) |\n ((obj >> 8) & 0xff00) |\n (gen & 0xff),\n (gen & 0xff00) << 16,\n ],\n 5,\n ),\n );\n }\n\n if (this.version === 1 || this.version === 2) {\n let key = CryptoJS.MD5(digest);\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\n return (buffer) =>\n wordArrayToBuffer(\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\n .ciphertext,\n );\n }\n\n let key;\n if (this.version === 4) {\n key = CryptoJS.MD5(\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4)),\n );\n } else {\n key = this.encryptionKey;\n }\n\n const iv = PDFSecurity.generateRandomWordArray(16);\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n iv,\n };\n\n return (buffer) =>\n wordArrayToBuffer(\n iv\n .clone()\n .concat(\n CryptoJS.AES.encrypt(\n CryptoJS.lib.WordArray.create(buffer),\n key,\n options,\n ).ciphertext,\n ),\n );\n }\n\n end() {\n this.dictionary.end();\n }\n}\n\nfunction getPermissionsR2(permissionObject = {}) {\n let permissions = 0xffffffc0 >> 0;\n if (permissionObject.printing) {\n permissions |= 0b000000000100;\n }\n if (permissionObject.modifying) {\n permissions |= 0b000000001000;\n }\n if (permissionObject.copying) {\n permissions |= 0b000000010000;\n }\n if (permissionObject.annotating) {\n permissions |= 0b000000100000;\n }\n return permissions;\n}\n\nfunction getPermissionsR3(permissionObject = {}) {\n let permissions = 0xfffff0c0 >> 0;\n if (permissionObject.printing === 'lowResolution') {\n permissions |= 0b000000000100;\n }\n if (permissionObject.printing === 'highResolution') {\n permissions |= 0b100000000100;\n }\n if (permissionObject.modifying) {\n permissions |= 0b000000001000;\n }\n if (permissionObject.copying) {\n permissions |= 0b000000010000;\n }\n if (permissionObject.annotating) {\n permissions |= 0b000000100000;\n }\n if (permissionObject.fillingForms) {\n permissions |= 0b000100000000;\n }\n if (permissionObject.contentAccessibility) {\n permissions |= 0b001000000000;\n }\n if (permissionObject.documentAssembly) {\n permissions |= 0b010000000000;\n }\n return permissions;\n}\n\nfunction getUserPasswordR2(encryptionKey) {\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\n .ciphertext;\n}\n\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\n const key = encryptionKey.clone();\n let cipher = CryptoJS.MD5(\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId)),\n );\n for (let i = 0; i < 20; i++) {\n const xorRound = Math.ceil(key.sigBytes / 4);\n for (let j = 0; j < xorRound; j++) {\n key.words[j] =\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\n }\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\n }\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\n}\n\nfunction getOwnerPasswordR2R3R4(\n r,\n keyBits,\n paddedUserPassword,\n paddedOwnerPassword,\n) {\n let digest = paddedOwnerPassword;\n let round = r >= 3 ? 51 : 1;\n for (let i = 0; i < round; i++) {\n digest = CryptoJS.MD5(digest);\n }\n\n const key = digest.clone();\n key.sigBytes = keyBits / 8;\n let cipher = paddedUserPassword;\n round = r >= 3 ? 20 : 1;\n for (let i = 0; i < round; i++) {\n const xorRound = Math.ceil(key.sigBytes / 4);\n for (let j = 0; j < xorRound; j++) {\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\n }\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\n }\n return cipher;\n}\n\nfunction getEncryptionKeyR2R3R4(\n r,\n keyBits,\n documentId,\n paddedUserPassword,\n ownerPasswordEntry,\n permissions,\n) {\n let key = paddedUserPassword\n .clone()\n .concat(ownerPasswordEntry)\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\n .concat(CryptoJS.lib.WordArray.create(documentId));\n const round = r >= 3 ? 51 : 1;\n for (let i = 0; i < round; i++) {\n key = CryptoJS.MD5(key);\n key.sigBytes = keyBits / 8;\n }\n return key;\n}\n\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\n const validationSalt = generateRandomWordArray(8);\n const keySalt = generateRandomWordArray(8);\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\n .concat(validationSalt)\n .concat(keySalt);\n}\n\nfunction getUserEncryptionKeyR5(\n processedUserPassword,\n userKeySalt,\n encryptionKey,\n) {\n const key = CryptoJS.SHA256(\n processedUserPassword.clone().concat(userKeySalt),\n );\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.NoPadding,\n iv: CryptoJS.lib.WordArray.create(null, 16),\n };\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getOwnerPasswordR5(\n processedOwnerPassword,\n userPasswordEntry,\n generateRandomWordArray,\n) {\n const validationSalt = generateRandomWordArray(8);\n const keySalt = generateRandomWordArray(8);\n return CryptoJS.SHA256(\n processedOwnerPassword\n .clone()\n .concat(validationSalt)\n .concat(userPasswordEntry),\n )\n .concat(validationSalt)\n .concat(keySalt);\n}\n\nfunction getOwnerEncryptionKeyR5(\n processedOwnerPassword,\n ownerKeySalt,\n userPasswordEntry,\n encryptionKey,\n) {\n const key = CryptoJS.SHA256(\n processedOwnerPassword\n .clone()\n .concat(ownerKeySalt)\n .concat(userPasswordEntry),\n );\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.NoPadding,\n iv: CryptoJS.lib.WordArray.create(null, 16),\n };\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getEncryptionKeyR5(generateRandomWordArray) {\n return generateRandomWordArray(32);\n}\n\nfunction getEncryptedPermissionsR5(\n permissions,\n encryptionKey,\n generateRandomWordArray,\n) {\n const cipher = CryptoJS.lib.WordArray.create(\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\n 12,\n ).concat(generateRandomWordArray(4));\n const options = {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.NoPadding,\n };\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\n}\n\nfunction processPasswordR2R3R4(password = '') {\n const out = Buffer.alloc(32);\n const length = password.length;\n let index = 0;\n while (index < length && index < 32) {\n const code = password.charCodeAt(index);\n if (code > 0xff) {\n throw new Error('Password contains one or more invalid characters.');\n }\n out[index] = code;\n index++;\n }\n while (index < 32) {\n out[index] = PASSWORD_PADDING[index - length];\n index++;\n }\n return CryptoJS.lib.WordArray.create(out);\n}\n\nfunction processPasswordR5(password = '') {\n password = unescape(encodeURIComponent(saslprep(password)));\n const length = Math.min(127, password.length);\n const out = Buffer.alloc(length);\n\n for (let i = 0; i < length; i++) {\n out[i] = password.charCodeAt(i);\n }\n\n return CryptoJS.lib.WordArray.create(out);\n}\n\nfunction lsbFirstWord(data) {\n return (\n ((data & 0xff) << 24) |\n ((data & 0xff00) << 8) |\n ((data >> 8) & 0xff00) |\n ((data >> 24) & 0xff)\n );\n}\n\nfunction wordArrayToBuffer(wordArray) {\n const byteArray = [];\n for (let i = 0; i < wordArray.sigBytes; i++) {\n byteArray.push(\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff,\n );\n }\n return Buffer.from(byteArray);\n}\n\nconst PASSWORD_PADDING = [\n 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff,\n 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c,\n 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a,\n];\n\nexport default PDFSecurity;\n","import PDFObject from './object';\n\nconst { number } = PDFObject;\n\nclass PDFGradient {\n constructor(doc) {\n this.doc = doc;\n this.stops = [];\n this.embedded = false;\n this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n stop(pos, color, opacity) {\n if (opacity == null) {\n opacity = 1;\n }\n color = this.doc._normalizeColor(color);\n\n if (this.stops.length === 0) {\n if (color.length === 3) {\n this._colorSpace = 'DeviceRGB';\n } else if (color.length === 4) {\n this._colorSpace = 'DeviceCMYK';\n } else if (color.length === 1) {\n this._colorSpace = 'DeviceGray';\n } else {\n throw new Error('Unknown color space');\n }\n } else if (\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\n ) {\n throw new Error('All gradient stops must use the same color space');\n }\n\n opacity = Math.max(0, Math.min(1, opacity));\n this.stops.push([pos, color, opacity]);\n return this;\n }\n\n setTransform(m11, m12, m21, m22, dx, dy) {\n this.transform = [m11, m12, m21, m22, dx, dy];\n return this;\n }\n\n embed(m) {\n let fn;\n const stopsLength = this.stops.length;\n if (stopsLength === 0) {\n return;\n }\n this.embedded = true;\n this.matrix = m;\n\n // if the last stop comes before 100%, add a copy at 100%\n const last = this.stops[stopsLength - 1];\n if (last[0] < 1) {\n this.stops.push([1, last[1], last[2]]);\n }\n\n const bounds = [];\n const encode = [];\n const stops = [];\n\n for (let i = 0; i < stopsLength - 1; i++) {\n encode.push(0, 1);\n if (i + 2 !== stopsLength) {\n bounds.push(this.stops[i + 1][0]);\n }\n\n fn = this.doc.ref({\n FunctionType: 2,\n Domain: [0, 1],\n C0: this.stops[i + 0][1],\n C1: this.stops[i + 1][1],\n N: 1,\n });\n\n stops.push(fn);\n fn.end();\n }\n\n // if there are only two stops, we don't need a stitching function\n if (stopsLength === 1) {\n fn = stops[0];\n } else {\n fn = this.doc.ref({\n FunctionType: 3, // stitching function\n Domain: [0, 1],\n Functions: stops,\n Bounds: bounds,\n Encode: encode,\n });\n\n fn.end();\n }\n\n this.id = `Sh${++this.doc._gradCount}`;\n\n const shader = this.shader(fn);\n shader.end();\n\n const pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 2,\n Shading: shader,\n Matrix: this.matrix.map(number),\n });\n\n pattern.end();\n\n if (this.stops.some((stop) => stop[2] < 1)) {\n let grad = this.opacityGradient();\n grad._colorSpace = 'DeviceGray';\n\n for (let stop of this.stops) {\n grad.stop(stop[0], [stop[2]]);\n }\n\n grad = grad.embed(this.matrix);\n\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\n\n const form = this.doc.ref({\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: pageBBox,\n Group: {\n Type: 'Group',\n S: 'Transparency',\n CS: 'DeviceGray',\n },\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: grad,\n },\n },\n });\n\n form.write('/Pattern cs /Sh1 scn');\n form.end(`${pageBBox.join(' ')} re f`);\n\n const gstate = this.doc.ref({\n Type: 'ExtGState',\n SMask: {\n Type: 'Mask',\n S: 'Luminosity',\n G: form,\n },\n });\n\n gstate.end();\n\n const opacityPattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1,\n PaintType: 1,\n TilingType: 2,\n BBox: pageBBox,\n XStep: pageBBox[2],\n YStep: pageBBox[3],\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: pattern,\n },\n ExtGState: {\n Gs1: gstate,\n },\n },\n });\n\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\n\n this.doc.page.patterns[this.id] = opacityPattern;\n } else {\n this.doc.page.patterns[this.id] = pattern;\n }\n\n return pattern;\n }\n\n apply(stroke) {\n // apply gradient transform to existing document ctm\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\n const [m11, m12, m21, m22, dx, dy] = this.transform;\n const m = [\n m0 * m11 + m2 * m12,\n m1 * m11 + m3 * m12,\n m0 * m21 + m2 * m22,\n m1 * m21 + m3 * m22,\n m0 * dx + m2 * dy + m4,\n m1 * dx + m3 * dy + m5,\n ];\n\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\n this.embed(m);\n }\n this.doc._setColorSpace('Pattern', stroke);\n const op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(`/${this.id} ${op}`);\n }\n}\n\nclass PDFLinearGradient extends PDFGradient {\n constructor(doc, x1, y1, x2, y2) {\n super(doc);\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n\n shader(fn) {\n return this.doc.ref({\n ShadingType: 2,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.x2, this.y2],\n Function: fn,\n Extend: [true, true],\n });\n }\n\n opacityGradient() {\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\n }\n}\n\nclass PDFRadialGradient extends PDFGradient {\n constructor(doc, x1, y1, r1, x2, y2, r2) {\n super(doc);\n this.doc = doc;\n this.x1 = x1;\n this.y1 = y1;\n this.r1 = r1;\n this.x2 = x2;\n this.y2 = y2;\n this.r2 = r2;\n }\n\n shader(fn) {\n return this.doc.ref({\n ShadingType: 3,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\n Function: fn,\n Extend: [true, true],\n });\n }\n\n opacityGradient() {\n return new PDFRadialGradient(\n this.doc,\n this.x1,\n this.y1,\n this.r1,\n this.x2,\n this.y2,\n this.r2,\n );\n }\n}\n\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\n","/*\nPDF tiling pattern support. Uncolored only.\n */\n\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\n\nclass PDFTilingPattern {\n constructor(doc, bBox, xStep, yStep, stream) {\n this.doc = doc;\n this.bBox = bBox;\n this.xStep = xStep;\n this.yStep = yStep;\n this.stream = stream;\n }\n\n createPattern() {\n // no resources needed for our current usage\n // required entry\n const resources = this.doc.ref();\n resources.end();\n // apply default transform matrix (flipped in the default doc._ctm)\n // see document.js & gradient.js\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\n const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\n const m = [\n m0 * m11 + m2 * m12,\n m1 * m11 + m3 * m12,\n m0 * m21 + m2 * m22,\n m1 * m21 + m3 * m22,\n m0 * dx + m2 * dy + m4,\n m1 * dx + m3 * dy + m5,\n ];\n const pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1, // tiling\n PaintType: 2, // 1-colored, 2-uncolored\n TilingType: 2, // 2-no distortion\n BBox: this.bBox,\n XStep: this.xStep,\n YStep: this.yStep,\n Matrix: m.map((v) => +v.toFixed(5)),\n Resources: resources,\n });\n pattern.end(this.stream);\n return pattern;\n }\n\n embedPatternColorSpaces() {\n // map each pattern to an underlying color space\n // and embed on each page\n underlyingColorSpaces.forEach((csName) => {\n const csId = this.getPatternColorSpaceId(csName);\n\n if (this.doc.page.colorSpaces[csId]) return;\n const cs = this.doc.ref(['Pattern', csName]);\n cs.end();\n this.doc.page.colorSpaces[csId] = cs;\n });\n }\n\n getPatternColorSpaceId(underlyingColorspace) {\n return `CsP${underlyingColorspace}`;\n }\n\n embed() {\n if (!this.id) {\n this.doc._patternCount = this.doc._patternCount + 1;\n this.id = 'P' + this.doc._patternCount;\n this.pattern = this.createPattern();\n }\n\n // patterns are embedded in each page\n if (!this.doc.page.patterns[this.id]) {\n this.doc.page.patterns[this.id] = this.pattern;\n }\n }\n\n apply(stroke, patternColor) {\n // do any embedding/creating that might be needed\n this.embedPatternColorSpaces();\n this.embed();\n\n const normalizedColor = this.doc._normalizeColor(patternColor);\n if (!normalizedColor)\n throw Error(`invalid pattern color. (value: ${patternColor})`);\n\n // select one of the pattern color spaces\n const csId = this.getPatternColorSpaceId(\n this.doc._getColorSpace(normalizedColor),\n );\n this.doc._setColorSpace(csId, stroke);\n\n // stroke/fill using the pattern and color (in the above underlying color space)\n const op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(\n `${normalizedColor.join(' ')} /${this.id} ${op}`,\n );\n }\n}\n\nexport default { PDFTilingPattern };\n","import Gradient from '../gradient';\nimport pattern from '../pattern';\nimport SpotColor from '../spotcolor';\n\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\nconst { PDFTilingPattern } = pattern;\n\nexport default {\n initColor() {\n this.spotColors = {};\n // The opacity dictionaries\n this._opacityRegistry = {};\n this._opacityCount = 0;\n this._patternCount = 0;\n this._gradCount = 0;\n },\n\n _normalizeColor(color) {\n if (typeof color === 'string') {\n if (color.charAt(0) === '#') {\n if (color.length === 4) {\n color = color.replace(\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\n '#$1$1$2$2$3$3',\n );\n }\n const hex = parseInt(color.slice(1), 16);\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\n } else if (namedColors[color]) {\n color = namedColors[color];\n } else if (this.spotColors[color]) {\n return this.spotColors[color];\n }\n }\n\n if (Array.isArray(color)) {\n // RGB\n if (color.length === 3) {\n color = color.map((part) => part / 255);\n // CMYK\n } else if (color.length === 4) {\n color = color.map((part) => part / 100);\n }\n return color;\n }\n\n return null;\n },\n\n _setColor(color, stroke) {\n if (color instanceof PDFGradient) {\n color.apply(stroke);\n return true;\n // see if tiling pattern, decode & apply it it\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\n color[0].apply(stroke, color[1]);\n return true;\n }\n // any other case should be a normal color and not a pattern\n return this._setColorCore(color, stroke);\n },\n\n _setColorCore(color, stroke) {\n color = this._normalizeColor(color);\n if (!color) {\n return false;\n }\n\n const op = stroke ? 'SCN' : 'scn';\n const space = this._getColorSpace(color);\n this._setColorSpace(space, stroke);\n\n if (color instanceof SpotColor) {\n this.page.colorSpaces[color.id] = color.ref;\n this.addContent(`1 ${op}`);\n } else {\n this.addContent(`${color.join(' ')} ${op}`);\n }\n\n return true;\n },\n\n _setColorSpace(space, stroke) {\n const op = stroke ? 'CS' : 'cs';\n return this.addContent(`/${space} ${op}`);\n },\n\n _getColorSpace(color) {\n if (color instanceof SpotColor) {\n return color.id;\n }\n\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\n },\n\n fillColor(color, opacity) {\n const set = this._setColor(color, false);\n if (set) {\n this.fillOpacity(opacity);\n }\n\n // save this for text wrapper, which needs to reset\n // the fill color on new pages\n this._fillColor = [color, opacity];\n return this;\n },\n\n strokeColor(color, opacity) {\n const set = this._setColor(color, true);\n if (set) {\n this.strokeOpacity(opacity);\n }\n return this;\n },\n\n opacity(opacity) {\n this._doOpacity(opacity, opacity);\n return this;\n },\n\n fillOpacity(opacity) {\n this._doOpacity(opacity, null);\n return this;\n },\n\n strokeOpacity(opacity) {\n this._doOpacity(null, opacity);\n return this;\n },\n\n _doOpacity(fillOpacity, strokeOpacity) {\n let dictionary, name;\n if (fillOpacity == null && strokeOpacity == null) {\n return;\n }\n\n if (fillOpacity != null) {\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\n }\n if (strokeOpacity != null) {\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\n }\n const key = `${fillOpacity}_${strokeOpacity}`;\n\n if (this._opacityRegistry[key]) {\n [dictionary, name] = this._opacityRegistry[key];\n } else {\n dictionary = { Type: 'ExtGState' };\n\n if (fillOpacity != null) {\n dictionary.ca = fillOpacity;\n }\n if (strokeOpacity != null) {\n dictionary.CA = strokeOpacity;\n }\n\n dictionary = this.ref(dictionary);\n dictionary.end();\n const id = ++this._opacityCount;\n name = `Gs${id}`;\n this._opacityRegistry[key] = [dictionary, name];\n }\n\n this.page.ext_gstates[name] = dictionary;\n return this.addContent(`/${name} gs`);\n },\n\n linearGradient(x1, y1, x2, y2) {\n return new PDFLinearGradient(this, x1, y1, x2, y2);\n },\n\n radialGradient(x1, y1, r1, x2, y2, r2) {\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\n },\n\n pattern(bbox, xStep, yStep, stream) {\n return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\n },\n\n addSpotColor(name, C, M, Y, K) {\n const color = new SpotColor(this, name, C, M, Y, K);\n this.spotColors[name] = color;\n return this;\n },\n};\n\nvar namedColors = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50],\n};\n","let cx, cy, px, py, sx, sy;\n\ncx = cy = px = py = sx = sy = 0;\n\nconst parameters = {\n A: 7,\n a: 7,\n C: 6,\n c: 6,\n H: 1,\n h: 1,\n L: 2,\n l: 2,\n M: 2,\n m: 2,\n Q: 4,\n q: 4,\n S: 4,\n s: 4,\n T: 2,\n t: 2,\n V: 1,\n v: 1,\n Z: 0,\n z: 0,\n};\n\nconst parse = function (path) {\n let cmd;\n const ret = [];\n let args = [];\n let curArg = '';\n let foundDecimal = false;\n let params = 0;\n\n for (let c of path) {\n if (parameters[c] != null) {\n params = parameters[c];\n if (cmd) {\n // save existing command\n if (curArg.length > 0) {\n args[args.length] = +curArg;\n }\n ret[ret.length] = { cmd, args };\n\n args = [];\n curArg = '';\n foundDecimal = false;\n }\n\n cmd = c;\n } else if (\n [' ', ','].includes(c) ||\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\n (c === '.' && foundDecimal)\n ) {\n if (curArg.length === 0) {\n continue;\n }\n\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n\n foundDecimal = c === '.';\n\n // fix for negative numbers or repeated decimals with no delimeter between commands\n curArg = ['-', '.'].includes(c) ? c : '';\n } else {\n curArg += c;\n if (c === '.') {\n foundDecimal = true;\n }\n }\n }\n\n // add the last command\n if (curArg.length > 0) {\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n }\n\n ret[ret.length] = { cmd, args };\n\n return ret;\n};\n\nconst apply = function (commands, doc) {\n // current point, control point, and subpath starting point\n cx = cy = px = py = sx = sy = 0;\n\n // run the commands\n for (let i = 0; i < commands.length; i++) {\n const c = commands[i];\n if (typeof runners[c.cmd] === 'function') {\n runners[c.cmd](doc, c.args);\n }\n }\n};\n\nconst runners = {\n M(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n\n m(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n\n C(doc, a) {\n cx = a[4];\n cy = a[5];\n px = a[2];\n py = a[3];\n return doc.bezierCurveTo(...a);\n },\n\n c(doc, a) {\n doc.bezierCurveTo(\n a[0] + cx,\n a[1] + cy,\n a[2] + cx,\n a[3] + cy,\n a[4] + cx,\n a[5] + cy,\n );\n px = cx + a[2];\n py = cy + a[3];\n cx += a[4];\n return (cy += a[5]);\n },\n\n S(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n px = a[0];\n py = a[1];\n cx = a[2];\n return (cy = a[3]);\n },\n\n s(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(\n cx - (px - cx),\n cy - (py - cy),\n cx + a[0],\n cy + a[1],\n cx + a[2],\n cy + a[3],\n );\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return (cy += a[3]);\n },\n\n Q(doc, a) {\n px = a[0];\n py = a[1];\n cx = a[2];\n cy = a[3];\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\n },\n\n q(doc, a) {\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return (cy += a[3]);\n },\n\n T(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, a[0], a[1]);\n px = cx - (px - cx);\n py = cy - (py - cy);\n cx = a[0];\n return (cy = a[1]);\n },\n\n t(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\n cx += a[0];\n return (cy += a[1]);\n },\n\n A(doc, a) {\n solveArc(doc, cx, cy, a);\n cx = a[5];\n return (cy = a[6]);\n },\n\n a(doc, a) {\n a[5] += cx;\n a[6] += cy;\n solveArc(doc, cx, cy, a);\n cx = a[5];\n return (cy = a[6]);\n },\n\n L(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n l(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n H(doc, a) {\n cx = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n h(doc, a) {\n cx += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n V(doc, a) {\n cy = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n v(doc, a) {\n cy += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n Z(doc) {\n doc.closePath();\n cx = sx;\n return (cy = sy);\n },\n\n z(doc) {\n doc.closePath();\n cx = sx;\n return (cy = sy);\n },\n};\n\nconst solveArc = function (doc, x, y, coords) {\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n\n for (let seg of segs) {\n const bez = segmentToBezier(...seg);\n doc.bezierCurveTo(...bez);\n }\n};\n\n// from Inkscape svgtopdf, thanks!\nconst arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const th = rotateX * (Math.PI / 180);\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) {\n sfactor_sq = 0;\n }\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep === large) {\n sfactor = -sfactor;\n }\n\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += 2 * Math.PI;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= 2 * Math.PI;\n }\n\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n const result = [];\n\n for (let i = 0; i < segments; i++) {\n const th2 = th0 + (i * th_arc) / segments;\n const th3 = th0 + ((i + 1) * th_arc) / segments;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return result;\n};\n\nconst segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n\n const th_half = 0.5 * (th1 - th0);\n const t =\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\n Math.sin(th_half);\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\n const x3 = cx + Math.cos(th1);\n const y3 = cy + Math.sin(th1);\n const x2 = x3 + t * Math.sin(th1);\n const y2 = y3 - t * Math.cos(th1);\n\n return [\n a00 * x1 + a01 * y1,\n a10 * x1 + a11 * y1,\n a00 * x2 + a01 * y2,\n a10 * x2 + a11 * y2,\n a00 * x3 + a01 * y3,\n a10 * x3 + a11 * y3,\n ];\n};\n\nclass SVGPath {\n static apply(doc, path) {\n const commands = parse(path);\n apply(commands, doc);\n }\n}\n\nexport default SVGPath;\n","import SVGPath from '../path';\nimport PDFObject from '../object';\n\nconst { number } = PDFObject;\n\n// This constant is used to approximate a symmetrical arc using a cubic\n// Bezier curve.\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\nexport default {\n initVector() {\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\n this._ctmStack = [];\n },\n\n save() {\n this._ctmStack.push(this._ctm.slice());\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\n return this.addContent('q');\n },\n\n restore() {\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\n return this.addContent('Q');\n },\n\n closePath() {\n return this.addContent('h');\n },\n\n lineWidth(w) {\n return this.addContent(`${number(w)} w`);\n },\n\n _CAP_STYLES: {\n BUTT: 0,\n ROUND: 1,\n SQUARE: 2,\n },\n\n lineCap(c) {\n if (typeof c === 'string') {\n c = this._CAP_STYLES[c.toUpperCase()];\n }\n return this.addContent(`${c} J`);\n },\n\n _JOIN_STYLES: {\n MITER: 0,\n ROUND: 1,\n BEVEL: 2,\n },\n\n lineJoin(j) {\n if (typeof j === 'string') {\n j = this._JOIN_STYLES[j.toUpperCase()];\n }\n return this.addContent(`${j} j`);\n },\n\n miterLimit(m) {\n return this.addContent(`${number(m)} M`);\n },\n\n dash(length, options = {}) {\n const originalLength = length;\n if (!Array.isArray(length)) {\n length = [length, options.space || length];\n }\n\n const valid = length.every((x) => Number.isFinite(x) && x > 0);\n if (!valid) {\n throw new Error(\n `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\n options,\n )}) invalid, lengths must be numeric and greater than zero`,\n );\n }\n\n length = length.map(number).join(' ');\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\n },\n\n undash() {\n return this.addContent('[] 0 d');\n },\n\n moveTo(x, y) {\n return this.addContent(`${number(x)} ${number(y)} m`);\n },\n\n lineTo(x, y) {\n return this.addContent(`${number(x)} ${number(y)} l`);\n },\n\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n return this.addContent(\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\n x,\n )} ${number(y)} c`,\n );\n },\n\n quadraticCurveTo(cpx, cpy, x, y) {\n return this.addContent(\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`,\n );\n },\n\n rect(x, y, w, h) {\n return this.addContent(\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`,\n );\n },\n\n roundedRect(x, y, w, h, r) {\n if (r == null) {\n r = 0;\n }\n r = Math.min(r, 0.5 * w, 0.5 * h);\n\n // amount to inset control points from corners (see `ellipse`)\n const c = r * (1.0 - KAPPA);\n\n this.moveTo(x + r, y);\n this.lineTo(x + w - r, y);\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\n this.lineTo(x + w, y + h - r);\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\n this.lineTo(x + r, y + h);\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\n this.lineTo(x, y + r);\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\n return this.closePath();\n },\n\n ellipse(x, y, r1, r2) {\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\n if (r2 == null) {\n r2 = r1;\n }\n x -= r1;\n y -= r2;\n const ox = r1 * KAPPA;\n const oy = r2 * KAPPA;\n const xe = x + r1 * 2;\n const ye = y + r2 * 2;\n const xm = x + r1;\n const ym = y + r2;\n\n this.moveTo(x, ym);\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n return this.closePath();\n },\n\n circle(x, y, radius) {\n return this.ellipse(x, y, radius);\n },\n\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\n if (anticlockwise == null) {\n anticlockwise = false;\n }\n const TWO_PI = 2.0 * Math.PI;\n const HALF_PI = 0.5 * Math.PI;\n\n let deltaAng = endAngle - startAngle;\n\n if (Math.abs(deltaAng) > TWO_PI) {\n // draw only full circle if more than that is specified\n deltaAng = TWO_PI;\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\n // necessary to flip direction of rendering\n const dir = anticlockwise ? -1 : 1;\n deltaAng = dir * TWO_PI + deltaAng;\n }\n\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\n const segAng = deltaAng / numSegs;\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\n let curAng = startAngle;\n\n // component distances between anchor point and control point\n let deltaCx = -Math.sin(curAng) * handleLen;\n let deltaCy = Math.cos(curAng) * handleLen;\n\n // anchor point\n let ax = x + Math.cos(curAng) * radius;\n let ay = y + Math.sin(curAng) * radius;\n\n // calculate and render segments\n this.moveTo(ax, ay);\n\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\n // starting control point\n const cp1x = ax + deltaCx;\n const cp1y = ay + deltaCy;\n\n // step angle\n curAng += segAng;\n\n // next anchor point\n ax = x + Math.cos(curAng) * radius;\n ay = y + Math.sin(curAng) * radius;\n\n // next control point delta\n deltaCx = -Math.sin(curAng) * handleLen;\n deltaCy = Math.cos(curAng) * handleLen;\n\n // ending control point\n const cp2x = ax - deltaCx;\n const cp2y = ay - deltaCy;\n\n // render segment\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\n }\n\n return this;\n },\n\n polygon(...points) {\n this.moveTo(...(points.shift() || []));\n for (let point of points) {\n this.lineTo(...(point || []));\n }\n return this.closePath();\n },\n\n path(path) {\n SVGPath.apply(this, path);\n return this;\n },\n\n _windingRule(rule) {\n if (/even-?odd/.test(rule)) {\n return '*';\n }\n\n return '';\n },\n\n fill(color, rule) {\n if (/(even-?odd)|(non-?zero)/.test(color)) {\n rule = color;\n color = null;\n }\n\n if (color) {\n this.fillColor(color);\n }\n return this.addContent(`f${this._windingRule(rule)}`);\n },\n\n stroke(color) {\n if (color) {\n this.strokeColor(color);\n }\n return this.addContent('S');\n },\n\n fillAndStroke(fillColor, strokeColor, rule) {\n if (strokeColor == null) {\n strokeColor = fillColor;\n }\n const isFillRule = /(even-?odd)|(non-?zero)/;\n if (isFillRule.test(fillColor)) {\n rule = fillColor;\n fillColor = null;\n }\n\n if (isFillRule.test(strokeColor)) {\n rule = strokeColor;\n strokeColor = fillColor;\n }\n\n if (fillColor) {\n this.fillColor(fillColor);\n this.strokeColor(strokeColor);\n }\n\n return this.addContent(`B${this._windingRule(rule)}`);\n },\n\n clip(rule) {\n return this.addContent(`W${this._windingRule(rule)} n`);\n },\n\n transform(m11, m12, m21, m22, dx, dy) {\n // keep track of the current transformation matrix\n if (\n m11 === 1 &&\n m12 === 0 &&\n m21 === 0 &&\n m22 === 1 &&\n dx === 0 &&\n dy === 0\n ) {\n // Ignore identity transforms\n return this;\n }\n const m = this._ctm;\n const [m0, m1, m2, m3, m4, m5] = m;\n m[0] = m0 * m11 + m2 * m12;\n m[1] = m1 * m11 + m3 * m12;\n m[2] = m0 * m21 + m2 * m22;\n m[3] = m1 * m21 + m3 * m22;\n m[4] = m0 * dx + m2 * dy + m4;\n m[5] = m1 * dx + m3 * dy + m5;\n\n const values = [m11, m12, m21, m22, dx, dy].map((v) => number(v)).join(' ');\n return this.addContent(`${values} cm`);\n },\n\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n },\n\n rotate(angle, options = {}) {\n let y;\n const rad = (angle * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n let x = (y = 0);\n\n if (options.origin != null) {\n [x, y] = options.origin;\n const x1 = x * cos - y * sin;\n const y1 = x * sin + y * cos;\n x -= x1;\n y -= y1;\n }\n\n return this.transform(cos, sin, -sin, cos, x, y);\n },\n\n scale(xFactor, yFactor, options = {}) {\n let y;\n if (yFactor == null) {\n yFactor = xFactor;\n }\n if (typeof yFactor === 'object') {\n options = yFactor;\n yFactor = xFactor;\n }\n\n let x = (y = 0);\n if (options.origin != null) {\n [x, y] = options.origin;\n x -= xFactor * x;\n y -= yFactor * y;\n }\n\n return this.transform(xFactor, 0, 0, yFactor, x, y);\n },\n};\n","const WIN_ANSI_MAP = {\n 402: 131,\n 8211: 150,\n 8212: 151,\n 8216: 145,\n 8217: 146,\n 8218: 130,\n 8220: 147,\n 8221: 148,\n 8222: 132,\n 8224: 134,\n 8225: 135,\n 8226: 149,\n 8230: 133,\n 8364: 128,\n 8240: 137,\n 8249: 139,\n 8250: 155,\n 710: 136,\n 8482: 153,\n 338: 140,\n 339: 156,\n 732: 152,\n 352: 138,\n 353: 154,\n 376: 159,\n 381: 142,\n 382: 158,\n};\n\nconst characters = `\\\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n \nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n \nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n \ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n \nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n \nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n \nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n \nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis\\\n`.split(/\\s+/);\n\nclass AFMFont {\n /**\n * @param {string} contents\n */\n constructor(contents) {\n this.attributes = {};\n this.glyphWidths = {};\n this.boundingBoxes = {};\n this.kernPairs = {};\n\n this.parse(contents);\n\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map((e) => +e);\n this.ascender = +(this.attributes['Ascender'] || 0);\n this.descender = +(this.attributes['Descender'] || 0);\n this.xHeight = +(this.attributes['XHeight'] || 0);\n this.capHeight = +(this.attributes['CapHeight'] || 0);\n this.lineGap =\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\n }\n\n /**\n * @param {string} contents\n */\n parse(contents) {\n let section = '';\n for (let line of contents.split('\\n')) {\n var match;\n var a;\n if ((match = line.match(/^Start(\\w+)/))) {\n section = match[1];\n continue;\n } else if ((match = line.match(/^End(\\w+)/))) {\n section = '';\n continue;\n }\n\n switch (section) {\n case 'FontMetrics':\n match = line.match(/(^\\w+)\\s+(.*)/);\n var key = match[1];\n var value = match[2];\n\n if ((a = this.attributes[key])) {\n if (!Array.isArray(a)) {\n a = this.attributes[key] = [a];\n }\n a.push(value);\n } else {\n this.attributes[key] = value;\n }\n break;\n\n case 'CharMetrics':\n if (!/^CH?\\s/.test(line)) {\n continue;\n }\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\n break;\n\n case 'KernPairs':\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\n if (match) {\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\n }\n break;\n }\n }\n }\n\n /**\n * @param {string} text\n * @returns\n */\n encodeText(text) {\n const res = [];\n for (let i = 0, len = text.length; i < len; i++) {\n let char = text.charCodeAt(i);\n char = WIN_ANSI_MAP[char] || char;\n res.push(char.toString(16));\n }\n\n return res;\n }\n\n glyphsForString(string) {\n const glyphs = [];\n\n for (let i = 0, len = string.length; i < len; i++) {\n const charCode = string.charCodeAt(i);\n glyphs.push(this.characterToGlyph(charCode));\n }\n\n return glyphs;\n }\n\n characterToGlyph(character) {\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\n }\n\n widthOfGlyph(glyph) {\n return this.glyphWidths[glyph] || 0;\n }\n\n getKernPair(left, right) {\n return this.kernPairs[left + '\\0' + right] || 0;\n }\n\n advancesForGlyphs(glyphs) {\n const advances = [];\n\n for (let index = 0; index < glyphs.length; index++) {\n const left = glyphs[index];\n const right = glyphs[index + 1];\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\n }\n\n return advances;\n }\n}\n\nexport default AFMFont;\n","class PDFFont {\n constructor() {}\n\n encode() {\n throw new Error('Must be implemented by subclasses');\n }\n\n widthOfString() {\n throw new Error('Must be implemented by subclasses');\n }\n\n ref() {\n return this.dictionary != null\n ? this.dictionary\n : (this.dictionary = this.document.ref());\n }\n\n finalize() {\n if (this.embedded || this.dictionary == null) {\n return;\n }\n\n this.embed();\n this.embedded = true;\n }\n\n embed() {\n throw new Error('Must be implemented by subclasses');\n }\n\n lineHeight(size, includeGap = false) {\n const gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.descender) / 1000) * size;\n }\n}\n\nexport default PDFFont;\n","import AFMFont from './afm';\nimport PDFFont from '../font';\nimport fs from 'fs';\n\n// This insanity is so bundlers can inline the font files\nconst STANDARD_FONTS = {\n Courier() {\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\n },\n 'Courier-Bold'() {\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\n },\n 'Courier-Oblique'() {\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\n },\n 'Courier-BoldOblique'() {\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\n },\n Helvetica() {\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\n },\n 'Helvetica-Bold'() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\n },\n 'Helvetica-Oblique'() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\n },\n 'Helvetica-BoldOblique'() {\n return fs.readFileSync(\n __dirname + '/data/Helvetica-BoldOblique.afm',\n 'utf8',\n );\n },\n 'Times-Roman'() {\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\n },\n 'Times-Bold'() {\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\n },\n 'Times-Italic'() {\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\n },\n 'Times-BoldItalic'() {\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\n },\n Symbol() {\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\n },\n ZapfDingbats() {\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\n },\n};\n\nclass StandardFont extends PDFFont {\n constructor(document, name, id) {\n super();\n this.document = document;\n this.name = name;\n this.id = id;\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\n ({\n ascender: this.ascender,\n descender: this.descender,\n bbox: this.bbox,\n lineGap: this.lineGap,\n xHeight: this.xHeight,\n capHeight: this.capHeight,\n } = this.font);\n }\n\n embed() {\n this.dictionary.data = {\n Type: 'Font',\n BaseFont: this.name,\n Subtype: 'Type1',\n Encoding: 'WinAnsiEncoding',\n };\n\n return this.dictionary.end();\n }\n\n encode(text) {\n const encoded = this.font.encodeText(text);\n const glyphs = this.font.glyphsForString(`${text}`);\n const advances = this.font.advancesForGlyphs(glyphs);\n const positions = [];\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n positions.push({\n xAdvance: advances[i],\n yAdvance: 0,\n xOffset: 0,\n yOffset: 0,\n advanceWidth: this.font.widthOfGlyph(glyph),\n });\n }\n\n return [encoded, positions];\n }\n\n widthOfString(string, size) {\n const glyphs = this.font.glyphsForString(`${string}`);\n const advances = this.font.advancesForGlyphs(glyphs);\n\n let width = 0;\n for (let advance of advances) {\n width += advance;\n }\n\n const scale = size / 1000;\n return width * scale;\n }\n\n static isStandardFont(name) {\n return name in STANDARD_FONTS;\n }\n}\n\nexport default StandardFont;\n","import PDFFont from '../font';\n\nconst toHex = function (num) {\n return `0000${num.toString(16)}`.slice(-4);\n};\n\nclass EmbeddedFont extends PDFFont {\n constructor(document, font, id) {\n super();\n this.document = document;\n this.font = font;\n this.id = id;\n this.subset = this.font.createSubset();\n this.unicode = [[0]];\n this.widths = [this.font.getGlyph(0).advanceWidth];\n\n this.name = this.font.postscriptName;\n this.scale = 1000 / this.font.unitsPerEm;\n this.ascender = this.font.ascent * this.scale;\n this.descender = this.font.descent * this.scale;\n this.xHeight = this.font.xHeight * this.scale;\n this.capHeight = this.font.capHeight * this.scale;\n this.lineGap = this.font.lineGap * this.scale;\n this.bbox = this.font.bbox;\n\n if (document.options.fontLayoutCache !== false) {\n this.layoutCache = Object.create(null);\n }\n }\n\n layoutRun(text, features) {\n const run = this.font.layout(text, features);\n\n // Normalize position values\n for (let i = 0; i < run.positions.length; i++) {\n const position = run.positions[i];\n for (let key in position) {\n position[key] *= this.scale;\n }\n\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\n }\n\n return run;\n }\n\n layoutCached(text) {\n if (!this.layoutCache) {\n return this.layoutRun(text);\n }\n let cached;\n if ((cached = this.layoutCache[text])) {\n return cached;\n }\n\n const run = this.layoutRun(text);\n this.layoutCache[text] = run;\n return run;\n }\n\n layout(text, features, onlyWidth) {\n // Skip the cache if any user defined features are applied\n if (features) {\n return this.layoutRun(text, features);\n }\n\n let glyphs = onlyWidth ? null : [];\n let positions = onlyWidth ? null : [];\n let advanceWidth = 0;\n\n // Split the string by words to increase cache efficiency.\n // For this purpose, spaces and tabs are a good enough delimeter.\n let last = 0;\n let index = 0;\n while (index <= text.length) {\n var needle;\n if (\n (index === text.length && last < index) ||\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\n ) {\n const run = this.layoutCached(text.slice(last, ++index));\n if (!onlyWidth) {\n glyphs = glyphs.concat(run.glyphs);\n positions = positions.concat(run.positions);\n }\n\n advanceWidth += run.advanceWidth;\n last = index;\n } else {\n index++;\n }\n }\n\n return { glyphs, positions, advanceWidth };\n }\n\n encode(text, features) {\n const { glyphs, positions } = this.layout(text, features);\n\n const res = [];\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n const gid = this.subset.includeGlyph(glyph.id);\n res.push(`0000${gid.toString(16)}`.slice(-4));\n\n if (this.widths[gid] == null) {\n this.widths[gid] = glyph.advanceWidth * this.scale;\n }\n if (this.unicode[gid] == null) {\n this.unicode[gid] = glyph.codePoints;\n }\n }\n\n return [res, positions];\n }\n\n widthOfString(string, size, features) {\n const width = this.layout(string, features, true).advanceWidth;\n const scale = size / 1000;\n return width * scale;\n }\n\n embed() {\n const isCFF = this.subset.cff != null;\n const fontFile = this.document.ref();\n\n if (isCFF) {\n fontFile.data.Subtype = 'CIDFontType0C';\n }\n\n fontFile.end(this.subset.encode());\n\n const familyClass =\n ((this.font['OS/2'] != null\n ? this.font['OS/2'].sFamilyClass\n : undefined) || 0) >> 8;\n let flags = 0;\n if (this.font.post.isFixedPitch) {\n flags |= 1 << 0;\n }\n if (1 <= familyClass && familyClass <= 7) {\n flags |= 1 << 1;\n }\n flags |= 1 << 2; // assume the font uses non-latin characters\n if (familyClass === 10) {\n flags |= 1 << 3;\n }\n if (this.font.head.macStyle.italic) {\n flags |= 1 << 6;\n }\n\n // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\n const tag = [1, 2, 3, 4, 5, 6]\n .map((i) => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\n .join('');\n const name = tag + '+' + this.font.postscriptName?.replaceAll(' ', '_');\n\n const { bbox } = this.font;\n const descriptor = this.document.ref({\n Type: 'FontDescriptor',\n FontName: name,\n Flags: flags,\n FontBBox: [\n bbox.minX * this.scale,\n bbox.minY * this.scale,\n bbox.maxX * this.scale,\n bbox.maxY * this.scale,\n ],\n ItalicAngle: this.font.italicAngle,\n Ascent: this.ascender,\n Descent: this.descender,\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\n XHeight: (this.font.xHeight || 0) * this.scale,\n StemV: 0,\n }); // not sure how to calculate this\n\n if (isCFF) {\n descriptor.data.FontFile3 = fontFile;\n } else {\n descriptor.data.FontFile2 = fontFile;\n }\n\n if (this.document.subset && this.document.subset === 1) {\n const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\n const CIDSetRef = this.document.ref();\n CIDSetRef.write(CIDSet);\n CIDSetRef.end();\n\n descriptor.data.CIDSet = CIDSetRef;\n }\n\n descriptor.end();\n\n const descendantFontData = {\n Type: 'Font',\n Subtype: 'CIDFontType0',\n BaseFont: name,\n CIDSystemInfo: {\n Registry: new String('Adobe'),\n Ordering: new String('Identity'),\n Supplement: 0,\n },\n FontDescriptor: descriptor,\n W: [0, this.widths],\n };\n\n if (!isCFF) {\n descendantFontData.Subtype = 'CIDFontType2';\n descendantFontData.CIDToGIDMap = 'Identity';\n }\n\n const descendantFont = this.document.ref(descendantFontData);\n\n descendantFont.end();\n\n this.dictionary.data = {\n Type: 'Font',\n Subtype: 'Type0',\n BaseFont: name,\n Encoding: 'Identity-H',\n DescendantFonts: [descendantFont],\n ToUnicode: this.toUnicodeCmap(),\n };\n\n return this.dictionary.end();\n }\n\n // Maps the glyph ids encoded in the PDF back to unicode strings\n // Because of ligature substitutions and the like, there may be one or more\n // unicode characters represented by each glyph.\n toUnicodeCmap() {\n const cmap = this.document.ref();\n\n const entries = [];\n for (let codePoints of this.unicode) {\n const encoded = [];\n\n // encode codePoints to utf16\n for (let value of codePoints) {\n if (value > 0xffff) {\n value -= 0x10000;\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\n value = 0xdc00 | (value & 0x3ff);\n }\n\n encoded.push(toHex(value));\n }\n\n entries.push(`<${encoded.join(' ')}>`);\n }\n\n const chunkSize = 256;\n const chunks = Math.ceil(entries.length / chunkSize);\n const ranges = [];\n for (let i = 0; i < chunks; i++) {\n const start = i * chunkSize;\n const end = Math.min((i + 1) * chunkSize, entries.length);\n ranges.push(\n `<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`,\n );\n }\n\n cmap.end(`\\\n/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n1 beginbfrange\n${ranges.join('\\n')}\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend\\\n`);\n\n return cmap;\n }\n}\n\nexport default EmbeddedFont;\n","import fs from 'fs';\nimport * as fontkit from 'fontkit';\nimport StandardFont from './font/standard';\nimport EmbeddedFont from './font/embedded';\n\nclass PDFFontFactory {\n static open(document, src, family, id) {\n let font;\n if (typeof src === 'string') {\n if (StandardFont.isStandardFont(src)) {\n return new StandardFont(document, src, id);\n }\n\n src = fs.readFileSync(src);\n }\n if (src instanceof Uint8Array) {\n font = fontkit.create(src, family);\n } else if (src instanceof ArrayBuffer) {\n font = fontkit.create(new Uint8Array(src), family);\n }\n\n if (font == null) {\n throw new Error('Not a supported font format or standard PDF font.');\n }\n\n return new EmbeddedFont(document, font, id);\n }\n}\n\nexport default PDFFontFactory;\n","import PDFFontFactory from '../font_factory';\nimport { CM_TO_IN, IN_TO_PT, MM_TO_CM, PC_TO_PT, PX_TO_IN } from '../utils';\n\nconst isEqualFont = (font1, font2) => {\n // compare font checksum\n if (\n font1.font._tables?.head?.checkSumAdjustment !==\n font2.font._tables?.head?.checkSumAdjustment\n ) {\n return false;\n }\n\n // compare font name table\n if (\n JSON.stringify(font1.font._tables?.name?.records) !==\n JSON.stringify(font2.font._tables?.name?.records)\n ) {\n return false;\n }\n\n return true;\n};\n\nexport default {\n initFonts(\n defaultFont = 'Helvetica',\n defaultFontFamily = null,\n defaultFontSize = 12,\n ) {\n // Lookup table for embedded fonts\n this._fontFamilies = {};\n this._fontCount = 0;\n\n // Font state\n // Useful to export the font builder so that someone can create a snapshot of the current state\n // (e.g. Reverting back to the previous font)\n this._fontSource = defaultFont;\n this._fontFamily = defaultFontFamily;\n this._fontSize = defaultFontSize;\n this._font = null;\n\n // rem size is fixed per document as the document is the root element\n this._remSize = defaultFontSize;\n\n this._registeredFonts = {};\n\n // Set the default font\n if (defaultFont) {\n this.font(defaultFont, defaultFontFamily);\n }\n },\n\n font(src, family, size) {\n let cacheKey, font;\n if (typeof family === 'number') {\n size = family;\n family = null;\n }\n\n // check registered fonts if src is a string\n if (typeof src === 'string' && this._registeredFonts[src]) {\n cacheKey = src;\n ({ src, family } = this._registeredFonts[src]);\n } else {\n cacheKey = family || src;\n if (typeof cacheKey !== 'string') {\n cacheKey = null;\n }\n }\n\n this._fontSource = src;\n this._fontFamily = family;\n if (size != null) {\n this.fontSize(size);\n }\n\n // fast path: check if the font is already in the PDF\n if ((font = this._fontFamilies[cacheKey])) {\n this._font = font;\n return this;\n }\n\n // load the font\n const id = `F${++this._fontCount}`;\n this._font = PDFFontFactory.open(this, src, family, id);\n\n // check for existing font familes with the same name already in the PDF\n // useful if the font was passed as a buffer\n if (\n (font = this._fontFamilies[this._font.name]) &&\n isEqualFont(this._font, font)\n ) {\n this._font = font;\n return this;\n }\n\n // save the font for reuse later\n if (cacheKey) {\n this._fontFamilies[cacheKey] = this._font;\n }\n\n if (this._font.name) {\n this._fontFamilies[this._font.name] = this._font;\n }\n\n return this;\n },\n\n fontSize(_fontSize) {\n this._fontSize = this.sizeToPoint(_fontSize);\n return this;\n },\n\n currentLineHeight(includeGap) {\n return this._font.lineHeight(this._fontSize, includeGap);\n },\n\n registerFont(name, src, family) {\n this._registeredFonts[name] = {\n src,\n family,\n };\n\n return this;\n },\n\n /**\n * Convert a {@link Size} into a point measurement\n *\n * @param {Size | boolean | undefined} size - The size to convert\n * @param {Size | boolean | undefined} defaultValue - The default value when undefined\n * @param {PDFPage} page - The page used for computing font sizes\n * @param {number} [percentageWidth] - The value to use for computing size based on `%`\n *\n * @returns number\n */\n sizeToPoint(\n size,\n defaultValue = 0,\n page = this.page,\n percentageWidth = undefined,\n ) {\n if (!percentageWidth) percentageWidth = this._fontSize;\n if (typeof defaultValue !== 'number')\n defaultValue = this.sizeToPoint(defaultValue);\n if (size === undefined) return defaultValue;\n if (typeof size === 'number') return size;\n if (typeof size === 'boolean') return Number(size);\n\n const match = String(size).match(\n /((\\d+)?(\\.\\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/,\n );\n if (!match) throw new Error(`Unsupported size '${size}'`);\n let multiplier;\n switch (match[4]) {\n case 'em':\n multiplier = this._fontSize;\n break;\n case 'in':\n multiplier = IN_TO_PT;\n break;\n case 'px':\n multiplier = PX_TO_IN * IN_TO_PT;\n break;\n case 'cm':\n multiplier = CM_TO_IN * IN_TO_PT;\n break;\n case 'mm':\n multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT;\n break;\n case 'pc':\n multiplier = PC_TO_PT;\n break;\n case 'ex':\n multiplier = this.currentLineHeight();\n break;\n case 'ch':\n multiplier = this.widthOfString('0');\n break;\n case 'rem':\n multiplier = this._remSize;\n break;\n case 'vw':\n multiplier = page.width / 100;\n break;\n case 'vh':\n multiplier = page.height / 100;\n break;\n case 'vmin':\n multiplier = Math.min(page.width, page.height) / 100;\n break;\n case 'vmax':\n multiplier = Math.max(page.width, page.height) / 100;\n break;\n case '%':\n multiplier = percentageWidth / 100;\n break;\n case 'pt':\n default:\n multiplier = 1;\n }\n\n return multiplier * Number(match[1]);\n },\n};\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\nimport { PDFNumber } from './utils';\r\n\r\nconst SOFT_HYPHEN = '\\u00AD';\r\nconst HYPHEN = '-';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.horizontalScaling = options.horizontalScaling || 100;\r\n this.indent = ((options.indent || 0) * this.horizontalScaling) / 100;\r\n this.characterSpacing =\r\n ((options.characterSpacing || 0) * this.horizontalScaling) / 100;\r\n this.wordSpacing =\r\n ((options.wordSpacing === 0) * this.horizontalScaling) / 100;\r\n this.columns = options.columns || 1;\r\n this.columnGap =\r\n ((options.columnGap != null ? options.columnGap : 18) *\r\n this.horizontalScaling) /\r\n 100; // 1/4 inch\r\n this.lineWidth =\r\n ((options.width * this.horizontalScaling) / 100 -\r\n this.columnGap * (this.columns - 1)) /\r\n this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = PDFNumber(this.startY + options.height);\r\n } else {\r\n this.maxY = PDFNumber(this.document.page.maxY());\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', (options) => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n // if indentAllLines is set to true\r\n // we're not resetting the indentation for this paragraph after the first line\r\n if (options.indentAllLines) {\r\n return;\r\n }\r\n\r\n // otherwise we start the next line without indent\r\n this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n this.continuedX = 0;\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', (options) => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return PDFNumber(\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing,\r\n );\r\n }\r\n\r\n canFit(word, w) {\r\n if (word[word.length - 1] != SOFT_HYPHEN) {\r\n return w <= this.spaceLeft;\r\n }\r\n return w + this.wordWidth(HYPHEN) <= this.spaceLeft;\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position,\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // check for the edge case where a single character cannot fit into a line.\r\n if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n l = 1;\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n this.horizontalScaling = options.horizontalScaling || 100;\r\n if (options.indent != null) {\r\n this.indent = (options.indent * this.horizontalScaling) / 100;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing =\r\n (options.characterSpacing * this.horizontalScaling) / 100;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = (options.wordSpacing * this.horizontalScaling) / 100;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (this.canFit(word, w)) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || !this.canFit(word, w)) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n PDFNumber(this.document.y + lh * 2) > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n // Previous entry is a soft hyphen - add visible hyphen.\r\n if (buffer[buffer.length - 1] == SOFT_HYPHEN) {\r\n buffer = buffer.slice(0, -1) + HYPHEN;\r\n this.spaceLeft -= this.wordWidth(HYPHEN);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (PDFNumber(this.document.y + lh) > this.maxY) {\r\n this.emit('sectionEnd', options, this);\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n this.emit('sectionStart', options, this);\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n this.document.y = y;\r\n } else {\r\n this.document.x = this.startX;\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.continueOnNewPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...this.document._fillColor);\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\nimport PDFObject from '../object';\nimport { cosine, sine } from '../utils';\n\nconst { number } = PDFObject;\n\n/**\n * Format a list label based on the list type\n * @param {number} n\n * @param {'numbered' | 'lettered'} listType\n * @returns {string}\n */\nfunction formatListLabel(n, listType) {\n if (listType === 'numbered') {\n return `${n}.`;\n }\n\n // lettered\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\n var times = Math.floor((n - 1) / 26 + 1);\n var text = Array(times + 1).join(letter);\n return `${text}.`;\n}\n\nexport default {\n initText() {\n this._line = this._line.bind(this);\n // Current coordinates\n this.x = 0;\n this.y = 0;\n this._lineGap = 0;\n },\n\n lineGap(_lineGap) {\n this._lineGap = _lineGap;\n return this;\n },\n\n moveDown(lines) {\n if (lines == null) {\n lines = 1;\n }\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n\n moveUp(lines) {\n if (lines == null) {\n lines = 1;\n }\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n\n _text(text, x, y, options, lineCallback) {\n options = this._initOptions(x, y, options);\n\n // Convert text to a string\n text = text == null ? '' : `${text}`;\n\n // if the wordSpacing option is specified, remove multiple consecutive spaces\n if (options.wordSpacing) {\n text = text.replace(/\\s{2,}/g, ' ');\n }\n\n const addStructure = () => {\n if (options.structParent) {\n options.structParent.add(\n this.struct(options.structType || 'P', [\n this.markStructureContent(options.structType || 'P'),\n ]),\n );\n }\n };\n\n // We can save some bytes if there is no rotation\n if (options.rotation !== 0) {\n this.save();\n this.rotate(-options.rotation, { origin: [this.x, this.y] });\n }\n\n // word wrapping\n if (options.width) {\n let wrapper = this._wrapper;\n if (!wrapper) {\n wrapper = new LineWrapper(this, options);\n wrapper.on('line', lineCallback);\n wrapper.on('firstLine', addStructure);\n }\n\n this._wrapper = options.continued ? wrapper : null;\n this._textOptions = options.continued ? options : null;\n wrapper.wrap(text, options);\n\n // render paragraphs as single lines\n } else {\n for (let line of text.split('\\n')) {\n addStructure();\n lineCallback(line, options);\n }\n }\n\n // Cleanup if there was a rotation\n if (options.rotation !== 0) this.restore();\n\n return this;\n },\n\n text(text, x, y, options) {\n return this._text(text, x, y, options, this._line);\n },\n\n widthOfString(string, options = {}) {\n const horizontalScaling = options.horizontalScaling || 100;\n return (\n ((this._font.widthOfString(string, this._fontSize, options.features) +\n (options.characterSpacing || 0) * (string.length - 1)) *\n horizontalScaling) /\n 100\n );\n },\n\n /**\n * Compute the bounding box of a string\n * based on what will actually be rendered by `doc.text()`\n *\n * @param string - The string\n * @param x - X position of text (defaults to this.x)\n * @param y - Y position of text (defaults to this.y)\n * @param options - Any text options (The same you would apply to `doc.text()`)\n * @returns {{x: number, y: number, width: number, height: number}}\n */\n boundsOfString(string, x, y, options) {\n options = this._initOptions(x, y, options);\n ({ x, y } = this);\n const lineGap = options.lineGap ?? this._lineGap ?? 0;\n const lineHeight = this.currentLineHeight(true) + lineGap;\n let contentWidth = 0;\n // Convert text to a string\n string = String(string ?? '');\n\n // if the wordSpacing option is specified, remove multiple consecutive spaces\n if (options.wordSpacing) {\n string = string.replace(/\\s{2,}/g, ' ');\n }\n\n // word wrapping\n if (options.width) {\n let wrapper = new LineWrapper(this, options);\n wrapper.on('line', (text, options) => {\n this.y += lineHeight;\n text = text.replace(/\\n/g, '');\n\n if (text.length) {\n // handle options\n let wordSpacing = options.wordSpacing ?? 0;\n const characterSpacing = options.characterSpacing ?? 0;\n\n // justify alignments\n if (options.width && options.align === 'justify') {\n // calculate the word spacing value\n const words = text.trim().split(/\\s+/);\n const textWidth = this.widthOfString(\n text.replace(/\\s+/g, ''),\n options,\n );\n const spaceWidth = this.widthOfString(' ') + characterSpacing;\n wordSpacing = Math.max(\n 0,\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\n spaceWidth,\n );\n }\n\n // calculate the actual rendered width of the string after word and character spacing\n contentWidth = Math.max(\n contentWidth,\n options.textWidth +\n wordSpacing * (options.wordCount - 1) +\n characterSpacing * (text.length - 1),\n );\n }\n });\n wrapper.wrap(string, options);\n } else {\n // render paragraphs as single lines\n for (let line of string.split('\\n')) {\n const lineWidth = this.widthOfString(line, options);\n this.y += lineHeight;\n contentWidth = Math.max(contentWidth, lineWidth);\n }\n }\n\n let contentHeight = this.y - y;\n // Clamp height to max height\n if (options.height) contentHeight = Math.min(contentHeight, options.height);\n\n this.x = x;\n this.y = y;\n\n /**\n * Rotates around top left corner\n * [x1,y1] > [x2,y2]\n * ⌃ ⌄\n * [x4,y4] < [x3,y3]\n */\n if (options.rotation === 0) {\n // No rotation so we can use the existing values\n return { x, y, width: contentWidth, height: contentHeight };\n // Use fast computation without explicit trig\n } else if (options.rotation === 90) {\n return {\n x: x,\n y: y - contentWidth,\n width: contentHeight,\n height: contentWidth,\n };\n } else if (options.rotation === 180) {\n return {\n x: x - contentWidth,\n y: y - contentHeight,\n width: contentWidth,\n height: contentHeight,\n };\n } else if (options.rotation === 270) {\n return {\n x: x - contentHeight,\n y: y,\n width: contentHeight,\n height: contentWidth,\n };\n }\n\n // Non-trivial values so time for trig\n const cos = cosine(options.rotation);\n const sin = sine(options.rotation);\n\n const x1 = x;\n const y1 = y;\n const x2 = x + contentWidth * cos;\n const y2 = y - contentWidth * sin;\n const x3 = x + contentWidth * cos + contentHeight * sin;\n const y3 = y - contentWidth * sin + contentHeight * cos;\n const x4 = x + contentHeight * sin;\n const y4 = y + contentHeight * cos;\n\n const xMin = Math.min(x1, x2, x3, x4);\n const xMax = Math.max(x1, x2, x3, x4);\n const yMin = Math.min(y1, y2, y3, y4);\n const yMax = Math.max(y1, y2, y3, y4);\n\n return { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n },\n\n heightOfString(text, options) {\n const { x, y } = this;\n\n options = this._initOptions(options);\n options.height = Infinity; // don't break pages\n\n const lineGap = options.lineGap || this._lineGap || 0;\n this._text(text, this.x, this.y, options, () => {\n this.y += this.currentLineHeight(true) + lineGap;\n });\n\n const height = this.y - y;\n this.x = x;\n this.y = y;\n\n return height;\n },\n\n list(list, x, y, options) {\n options = this._initOptions(x, y, options);\n\n const listType = options.listType || 'bullet';\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\n const midLine = unit / 2;\n const r = options.bulletRadius || unit / 3;\n const indent =\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\n const itemIndent =\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\n\n let level = 1;\n const items = [];\n const levels = [];\n const numbers = [];\n\n var flatten = function (list) {\n let n = 1;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) {\n level++;\n flatten(item);\n level--;\n } else {\n items.push(item);\n levels.push(level);\n if (listType !== 'bullet') {\n numbers.push(n++);\n }\n }\n }\n };\n\n flatten(list);\n\n const drawListItem = function (listItem, i) {\n const wrapper = new LineWrapper(this, options);\n wrapper.on('line', this._line);\n\n level = 1;\n wrapper.once('firstLine', () => {\n let item, itemType, labelType, bodyType;\n if (options.structParent) {\n if (options.structTypes) {\n [itemType, labelType, bodyType] = options.structTypes;\n } else {\n [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody'];\n }\n }\n\n if (itemType) {\n item = this.struct(itemType);\n options.structParent.add(item);\n } else if (options.structParent) {\n item = options.structParent;\n }\n\n let l;\n if ((l = levels[i++]) !== level) {\n const diff = itemIndent * (l - level);\n this.x += diff;\n wrapper.lineWidth -= diff;\n level = l;\n }\n\n if (item && (labelType || bodyType)) {\n item.add(\n this.struct(labelType || bodyType, [\n this.markStructureContent(labelType || bodyType),\n ]),\n );\n }\n switch (listType) {\n case 'bullet':\n this.circle(this.x - indent + r, this.y + midLine, r);\n this.fill();\n break;\n case 'numbered':\n case 'lettered':\n var text = formatListLabel(numbers[i - 1], listType);\n this._fragment(text, this.x - indent, this.y, options);\n break;\n }\n\n if (item && labelType && bodyType) {\n item.add(\n this.struct(bodyType, [this.markStructureContent(bodyType)]),\n );\n }\n if (item && item !== options.structParent) {\n item.end();\n }\n });\n\n wrapper.on('sectionStart', () => {\n const pos = indent + itemIndent * (level - 1);\n this.x += pos;\n wrapper.lineWidth -= pos;\n });\n\n wrapper.on('sectionEnd', () => {\n const pos = indent + itemIndent * (level - 1);\n this.x -= pos;\n wrapper.lineWidth += pos;\n });\n\n wrapper.wrap(listItem, options);\n };\n\n for (let i = 0; i < items.length; i++) {\n drawListItem.call(this, items[i], i);\n }\n\n return this;\n },\n\n _initOptions(x = {}, y, options = {}) {\n if (typeof x === 'object') {\n options = x;\n x = null;\n }\n\n // clone options object\n const result = Object.assign({}, options);\n\n // extend options with previous values for continued text\n if (this._textOptions) {\n for (let key in this._textOptions) {\n const val = this._textOptions[key];\n if (key !== 'continued') {\n if (result[key] === undefined) {\n result[key] = val;\n }\n }\n }\n }\n\n // Update the current position\n if (x != null) {\n this.x = x;\n }\n if (y != null) {\n this.y = y;\n }\n\n // wrap to margins if no x or y position passed\n if (result.lineBreak !== false) {\n if (result.width == null) {\n result.width = this.page.width - this.x - this.page.margins.right;\n }\n result.width = Math.max(result.width, 0);\n }\n\n if (!result.columns) {\n result.columns = 0;\n }\n if (result.columnGap == null) {\n result.columnGap = 18;\n } // 1/4 inch\n\n // Normalize rotation to between 0 - 360\n result.rotation = Number(options.rotation ?? 0) % 360;\n if (result.rotation < 0) result.rotation += 360;\n\n return result;\n },\n\n _line(text, options = {}, wrapper) {\n this._fragment(text, this.x, this.y, options);\n\n if (wrapper) {\n const lineGap = options.lineGap || this._lineGap || 0;\n this.y += this.currentLineHeight(true) + lineGap;\n } else {\n this.x += this.widthOfString(text, options);\n }\n },\n\n _fragment(text, x, y, options) {\n let dy, encoded, i, positions, textWidth, words;\n text = `${text}`.replace(/\\n/g, '');\n if (text.length === 0) {\n return;\n }\n\n // handle options\n const align = options.align || 'left';\n let wordSpacing = options.wordSpacing || 0;\n const characterSpacing = options.characterSpacing || 0;\n const horizontalScaling = options.horizontalScaling || 100;\n\n // text alignments\n if (options.width) {\n switch (align) {\n case 'right':\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\n x += options.lineWidth - textWidth;\n break;\n\n case 'center':\n x += options.lineWidth / 2 - options.textWidth / 2;\n break;\n\n case 'justify':\n // calculate the word spacing value\n words = text.trim().split(/\\s+/);\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\n wordSpacing = Math.max(\n 0,\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\n spaceWidth,\n );\n break;\n }\n }\n\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\n if (typeof options.baseline === 'number') {\n dy = -options.baseline;\n } else {\n switch (options.baseline) {\n case 'svg-middle':\n dy = 0.5 * this._font.xHeight;\n break;\n case 'middle':\n case 'svg-central':\n dy = 0.5 * (this._font.descender + this._font.ascender);\n break;\n case 'bottom':\n case 'ideographic':\n dy = this._font.descender;\n break;\n case 'alphabetic':\n dy = 0;\n break;\n case 'mathematical':\n dy = 0.5 * this._font.ascender;\n break;\n case 'hanging':\n dy = 0.8 * this._font.ascender;\n break;\n case 'top':\n dy = this._font.ascender;\n break;\n default:\n dy = this._font.ascender;\n }\n dy = (dy / 1000) * this._fontSize;\n }\n\n // calculate the actual rendered width of the string after word and character spacing\n const renderedWidth =\n options.textWidth +\n wordSpacing * (options.wordCount - 1) +\n characterSpacing * (text.length - 1);\n\n // create link annotations if the link option is given\n if (options.link != null) {\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\n }\n if (options.goTo != null) {\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\n }\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n }\n\n // create underline\n if (options.underline) {\n this.save();\n if (!options.stroke) {\n this.strokeColor(...(this._fillColor || []));\n }\n\n const lineWidth =\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n this.lineWidth(lineWidth);\n\n let lineY = y + this.currentLineHeight() - lineWidth;\n this.moveTo(x, lineY);\n this.lineTo(x + renderedWidth, lineY);\n this.stroke();\n this.restore();\n }\n\n // create strikethrough line\n if (options.strike) {\n this.save();\n if (!options.stroke) {\n this.strokeColor(...(this._fillColor || []));\n }\n\n const lineWidth =\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n this.lineWidth(lineWidth);\n\n let lineY = y + this.currentLineHeight() / 2;\n this.moveTo(x, lineY);\n this.lineTo(x + renderedWidth, lineY);\n this.stroke();\n this.restore();\n }\n\n this.save();\n\n // oblique (angle in degrees or boolean)\n if (options.oblique) {\n let skew;\n if (typeof options.oblique === 'number') {\n skew = -Math.tan((options.oblique * Math.PI) / 180);\n } else {\n skew = -0.25;\n }\n this.transform(1, 0, 0, 1, x, y);\n this.transform(1, 0, skew, 1, -skew * dy, 0);\n this.transform(1, 0, 0, 1, -x, -y);\n }\n\n // flip coordinate system\n this.transform(1, 0, 0, -1, 0, this.page.height);\n y = this.page.height - y - dy;\n\n // add current font to page if necessary\n if (this.page.fonts[this._font.id] == null) {\n this.page.fonts[this._font.id] = this._font.ref();\n }\n\n // begin the text object\n this.addContent('BT');\n\n // text position\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\n\n // font and font size\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\n\n // rendering mode\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\n if (mode) {\n this.addContent(`${mode} Tr`);\n }\n\n // Character spacing\n if (characterSpacing) {\n this.addContent(`${number(characterSpacing)} Tc`);\n }\n\n // Horizontal scaling\n if (horizontalScaling !== 100) {\n this.addContent(`${horizontalScaling} Tz`);\n }\n\n // Add the actual text\n // If we have a word spacing value, we need to encode each word separately\n // since the normal Tw operator only works on character code 32, which isn't\n // used for embedded fonts.\n if (wordSpacing) {\n words = text.trim().split(/\\s+/);\n wordSpacing += this.widthOfString(' ') + characterSpacing;\n wordSpacing *= 1000 / this._fontSize;\n\n encoded = [];\n positions = [];\n for (let word of words) {\n const [encodedWord, positionsWord] = this._font.encode(\n word,\n options.features,\n );\n encoded = encoded.concat(encodedWord);\n positions = positions.concat(positionsWord);\n\n // add the word spacing to the end of the word\n // clone object because of cache\n const space = {};\n const object = positions[positions.length - 1];\n for (let key in object) {\n const val = object[key];\n space[key] = val;\n }\n space.xAdvance += wordSpacing;\n positions[positions.length - 1] = space;\n }\n } else {\n [encoded, positions] = this._font.encode(text, options.features);\n }\n\n const scale = this._fontSize / 1000;\n const commands = [];\n let last = 0;\n let hadOffset = false;\n\n // Adds a segment of text to the TJ command buffer\n const addSegment = (cur) => {\n if (last < cur) {\n const hex = encoded.slice(last, cur).join('');\n const advance =\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\n commands.push(`<${hex}> ${number(-advance)}`);\n }\n\n last = cur;\n };\n\n // Flushes the current TJ commands to the output stream\n const flush = (i) => {\n addSegment(i);\n\n if (commands.length > 0) {\n this.addContent(`[${commands.join(' ')}] TJ`);\n commands.length = 0;\n }\n };\n\n for (i = 0; i < positions.length; i++) {\n // If we have an x or y offset, we have to break out of the current TJ command\n // so we can move the text position.\n const pos = positions[i];\n if (pos.xOffset || pos.yOffset) {\n // Flush the current buffer\n flush(i);\n\n // Move the text position and flush just the current character\n this.addContent(\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\n y + pos.yOffset * scale,\n )} Tm`,\n );\n flush(i + 1);\n\n hadOffset = true;\n } else {\n // If the last character had an offset, reset the text position\n if (hadOffset) {\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\n hadOffset = false;\n }\n\n // Group segments that don't have any advance adjustments\n if (pos.xAdvance - pos.advanceWidth !== 0) {\n addSegment(i + 1);\n }\n }\n\n x += pos.xAdvance * scale;\n }\n\n // Flush any remaining commands\n flush(i);\n\n // end the text object\n this.addContent('ET');\n\n // restore flipped coordinate system\n this.restore();\n },\n};\n","import exif from 'jpeg-exif';\n\nconst MARKERS = [\n 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9,\n 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf,\n];\n\nconst COLOR_SPACE_MAP = {\n 1: 'DeviceGray',\n 3: 'DeviceRGB',\n 4: 'DeviceCMYK',\n};\n\nclass JPEG {\n constructor(data, label) {\n let marker;\n this.data = data;\n this.label = label;\n if (this.data.readUInt16BE(0) !== 0xffd8) {\n throw 'SOI not found in JPEG';\n }\n\n // Parse the EXIF orientation\n this.orientation = exif.fromBuffer(this.data).Orientation || 1;\n\n let pos = 2;\n while (pos < this.data.length) {\n marker = this.data.readUInt16BE(pos);\n pos += 2;\n if (MARKERS.includes(marker)) {\n break;\n }\n pos += this.data.readUInt16BE(pos);\n }\n\n if (!MARKERS.includes(marker)) {\n throw 'Invalid JPEG.';\n }\n pos += 2;\n\n this.bits = this.data[pos++];\n this.height = this.data.readUInt16BE(pos);\n pos += 2;\n\n this.width = this.data.readUInt16BE(pos);\n pos += 2;\n\n const channels = this.data[pos++];\n this.colorSpace = COLOR_SPACE_MAP[channels];\n\n this.obj = null;\n }\n\n embed(document) {\n if (this.obj) {\n return;\n }\n\n this.obj = document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: this.bits,\n Width: this.width,\n Height: this.height,\n ColorSpace: this.colorSpace,\n Filter: 'DCTDecode',\n });\n\n // add extra decode params for CMYK images. By swapping the\n // min and max values from the default, we invert the colors. See\n // section 4.8.4 of the spec.\n if (this.colorSpace === 'DeviceCMYK') {\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\n }\n\n this.obj.end(this.data);\n\n // free memory\n return (this.data = null);\n }\n}\n\nexport default JPEG;\n","import zlib from 'zlib';\nimport PNG from 'png-js';\n\nclass PNGImage {\n constructor(data, label) {\n this.label = label;\n this.image = new PNG(data);\n this.width = this.image.width;\n this.height = this.image.height;\n this.imgData = this.image.imgData;\n this.obj = null;\n }\n\n embed(document) {\n let dataDecoded = false;\n\n this.document = document;\n if (this.obj) {\n return;\n }\n\n const hasAlphaChannel = this.image.hasAlphaChannel;\n const isInterlaced = this.image.interlaceMethod === 1;\n\n this.obj = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\n Width: this.width,\n Height: this.height,\n Filter: 'FlateDecode',\n });\n\n if (!hasAlphaChannel) {\n const params = this.document.ref({\n Predictor: isInterlaced ? 1 : 15,\n Colors: this.image.colors,\n BitsPerComponent: this.image.bits,\n Columns: this.width,\n });\n\n this.obj.data['DecodeParms'] = params;\n params.end();\n }\n\n if (this.image.palette.length === 0) {\n this.obj.data['ColorSpace'] = this.image.colorSpace;\n } else {\n // embed the color palette in the PDF as an object stream\n const palette = this.document.ref();\n palette.end(Buffer.from(this.image.palette));\n\n // build the color space array for the image\n this.obj.data['ColorSpace'] = [\n 'Indexed',\n 'DeviceRGB',\n this.image.palette.length / 3 - 1,\n palette,\n ];\n }\n\n // For PNG color types 0, 2 and 3, the transparency data is stored in\n // a dedicated PNG chunk.\n if (this.image.transparency.grayscale != null) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n const val = this.image.transparency.grayscale;\n this.obj.data['Mask'] = [val, val];\n } else if (this.image.transparency.rgb) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n const { rgb } = this.image.transparency;\n const mask = [];\n for (let x of rgb) {\n mask.push(x, x);\n }\n\n this.obj.data['Mask'] = mask;\n } else if (this.image.transparency.indexed) {\n // Create a transparency SMask for the image based on the data\n // in the PLTE and tRNS sections. See below for details on SMasks.\n dataDecoded = true;\n return this.loadIndexedAlphaChannel();\n } else if (hasAlphaChannel) {\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\n // channel mixed in with the main image data. Separate this data out into an\n // SMask object and store it separately in the PDF.\n dataDecoded = true;\n return this.splitAlphaChannel();\n }\n\n if (isInterlaced && !dataDecoded) {\n return this.decodeData();\n }\n\n this.finalize();\n }\n\n finalize() {\n if (this.alphaChannel) {\n const sMask = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n Height: this.height,\n Width: this.width,\n BitsPerComponent: 8,\n Filter: 'FlateDecode',\n ColorSpace: 'DeviceGray',\n Decode: [0, 1],\n });\n\n sMask.end(this.alphaChannel);\n this.obj.data['SMask'] = sMask;\n }\n\n // add the actual image data\n this.obj.end(this.imgData);\n\n // free memory\n this.image = null;\n return (this.imgData = null);\n }\n\n splitAlphaChannel() {\n return this.image.decodePixels((pixels) => {\n let a, p;\n const colorCount = this.image.colors;\n const pixelCount = this.width * this.height;\n const imgData = Buffer.alloc(pixelCount * colorCount);\n const alphaChannel = Buffer.alloc(pixelCount);\n\n let i = (p = a = 0);\n const len = pixels.length;\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\n while (i < len) {\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\n imgData[p++] = pixels[i++];\n i += skipByteCount;\n }\n alphaChannel[a++] = pixels[i++];\n i += skipByteCount;\n }\n\n this.imgData = zlib.deflateSync(imgData);\n this.alphaChannel = zlib.deflateSync(alphaChannel);\n return this.finalize();\n });\n }\n\n loadIndexedAlphaChannel() {\n const transparency = this.image.transparency.indexed;\n return this.image.decodePixels((pixels) => {\n const alphaChannel = Buffer.alloc(this.width * this.height);\n\n let i = 0;\n for (let j = 0, end = pixels.length; j < end; j++) {\n alphaChannel[i++] = transparency[pixels[j]];\n }\n\n this.alphaChannel = zlib.deflateSync(alphaChannel);\n return this.finalize();\n });\n }\n\n decodeData() {\n this.image.decodePixels((pixels) => {\n this.imgData = zlib.deflateSync(pixels);\n this.finalize();\n });\n }\n}\n\nexport default PNGImage;\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n const match = /^data:.+?;base64,(.*)$/.exec(src);\r\n if (match) {\r\n data = Buffer.from(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\n\nexport default {\n initImages() {\n this._imageRegistry = {};\n this._imageCount = 0;\n },\n\n image(src, x, y, options = {}) {\n let bh, bp, bw, image, ip, left, left1, originX, originY;\n if (typeof x === 'object') {\n options = x;\n x = null;\n }\n\n // Ignore orientation based on document options or image options\n const ignoreOrientation =\n options.ignoreOrientation ||\n (options.ignoreOrientation !== false && this.options.ignoreOrientation);\n\n const inDocumentFlow = typeof y !== 'number';\n\n x = (left = x != null ? x : options.x) != null ? left : this.x;\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\n\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n if (src.width && src.height) {\n image = src;\n } else {\n image = this.openImage(src);\n }\n }\n\n if (!image.obj) {\n image.embed(this);\n }\n\n if (this.page.xobjects[image.label] == null) {\n this.page.xobjects[image.label] = image.obj;\n }\n\n let { width, height } = image;\n\n // If EXIF orientation calls for it, swap width and height\n if (!ignoreOrientation && image.orientation > 4) {\n [width, height] = [height, width];\n }\n\n let w = options.width || width;\n let h = options.height || height;\n\n if (options.width && !options.height) {\n const wp = w / width;\n w = width * wp;\n h = height * wp;\n } else if (options.height && !options.width) {\n const hp = h / height;\n w = width * hp;\n h = height * hp;\n } else if (options.scale) {\n w = width * options.scale;\n h = height * options.scale;\n } else if (options.fit) {\n [bw, bh] = options.fit;\n bp = bw / bh;\n ip = width / height;\n if (ip > bp) {\n w = bw;\n h = bw / ip;\n } else {\n h = bh;\n w = bh * ip;\n }\n } else if (options.cover) {\n [bw, bh] = options.cover;\n bp = bw / bh;\n ip = width / height;\n if (ip > bp) {\n h = bh;\n w = bh * ip;\n } else {\n w = bw;\n h = bw / ip;\n }\n }\n\n if (options.fit || options.cover) {\n if (options.align === 'center') {\n x = x + bw / 2 - w / 2;\n } else if (options.align === 'right') {\n x = x + bw - w;\n }\n\n if (options.valign === 'center') {\n y = y + bh / 2 - h / 2;\n } else if (options.valign === 'bottom') {\n y = y + bh - h;\n }\n }\n\n // need to flip image by default because of the default transform matrix on the document\n let rotateAngle = 0;\n let xTransform = x;\n let yTransform = y;\n let hTransform = h;\n let wTransform = w;\n\n if (!ignoreOrientation) {\n switch (image.orientation) {\n // No orientation (need to flip image, though, because of the default transform matrix on the document)\n default:\n case 1:\n hTransform = -h;\n yTransform += h;\n\n break;\n // Flip Horizontal\n case 2:\n wTransform = -w;\n hTransform = -h;\n xTransform += w;\n yTransform += h;\n\n break;\n // Rotate 180 degrees\n case 3:\n originX = x;\n originY = y;\n\n hTransform = -h;\n xTransform -= w;\n\n rotateAngle = 180;\n break;\n // Flip vertical\n case 4:\n // Do nothing, image will be flipped\n\n break;\n // Flip horizontally and rotate 270 degrees CW\n case 5:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = w;\n yTransform -= hTransform;\n\n rotateAngle = 90;\n break;\n // Rotate 90 degrees CW\n case 6:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = -w;\n\n rotateAngle = 90;\n break;\n // Flip horizontally and rotate 90 degrees CW\n case 7:\n originX = x;\n originY = y;\n\n hTransform = -w;\n wTransform = -h;\n xTransform += h;\n\n rotateAngle = 90;\n break;\n // Rotate 270 degrees CW\n case 8:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = -w;\n xTransform -= h;\n yTransform += w;\n\n rotateAngle = -90;\n break;\n }\n } else {\n hTransform = -h;\n yTransform += h;\n }\n\n // create link annotations if the link option is given\n if (options.link != null) {\n this.link(x, y, w, h, options.link);\n }\n if (options.goTo != null) {\n this.goTo(x, y, w, h, options.goTo);\n }\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n }\n\n // Set the current y position to below the image if it is in the document flow\n if (inDocumentFlow) {\n this.y += h;\n }\n\n this.save();\n\n if (rotateAngle) {\n this.rotate(rotateAngle, {\n origin: [originX, originY],\n });\n }\n\n this.transform(wTransform, 0, 0, hTransform, xTransform, yTransform);\n this.addContent(`/${image.label} Do`);\n this.restore();\n\n return this;\n },\n\n openImage(src) {\n let image;\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n image = PDFImage.open(src, `I${++this._imageCount}`);\n if (typeof src === 'string') {\n this._imageRegistry[src] = image;\n }\n }\n\n return image;\n },\n};\n","export default {\n annotate(x, y, w, h, options) {\n options.Type = 'Annot';\n options.Rect = this._convertRect(x, y, w, h);\n options.Border = [0, 0, 0];\n\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\n options.F = 1 << 2; // Print Annotation Flag\n }\n\n if (options.Subtype !== 'Link') {\n if (options.C == null) {\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\n }\n } // convert colors\n delete options.color;\n\n if (typeof options.Dest === 'string') {\n options.Dest = new String(options.Dest);\n }\n\n // Capitalize keys\n for (let key in options) {\n const val = options[key];\n options[key[0].toUpperCase() + key.slice(1)] = val;\n }\n\n const ref = this.ref(options);\n this.page.annotations.push(ref);\n ref.end();\n return this;\n },\n\n note(x, y, w, h, contents, options = {}) {\n options.Subtype = 'Text';\n options.Contents = new String(contents);\n if (options.Name == null) {\n options.Name = 'Comment';\n }\n if (options.color == null) {\n options.color = [243, 223, 92];\n }\n return this.annotate(x, y, w, h, options);\n },\n\n goTo(x, y, w, h, name, options = {}) {\n options.Subtype = 'Link';\n options.A = this.ref({\n S: 'GoTo',\n D: new String(name),\n });\n options.A.end();\n return this.annotate(x, y, w, h, options);\n },\n\n link(x, y, w, h, url, options = {}) {\n options.Subtype = 'Link';\n\n if (typeof url === 'number') {\n // Link to a page in the document (the page must already exist)\n const pages = this._root.data.Pages.data;\n if (url >= 0 && url < pages.Kids.length) {\n options.A = this.ref({\n S: 'GoTo',\n D: [pages.Kids[url], 'XYZ', null, null, null],\n });\n options.A.end();\n } else {\n throw new Error(`The document has no page ${url}`);\n }\n } else {\n // Link to an external url\n options.A = this.ref({\n S: 'URI',\n URI: new String(url),\n });\n options.A.end();\n }\n\n return this.annotate(x, y, w, h, options);\n },\n\n _markup(x, y, w, h, options = {}) {\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n highlight(x, y, w, h, options = {}) {\n options.Subtype = 'Highlight';\n if (options.color == null) {\n options.color = [241, 238, 148];\n }\n return this._markup(x, y, w, h, options);\n },\n\n underline(x, y, w, h, options = {}) {\n options.Subtype = 'Underline';\n return this._markup(x, y, w, h, options);\n },\n\n strike(x, y, w, h, options = {}) {\n options.Subtype = 'StrikeOut';\n return this._markup(x, y, w, h, options);\n },\n\n lineAnnotation(x1, y1, x2, y2, options = {}) {\n options.Subtype = 'Line';\n options.Contents = new String();\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\n return this.annotate(x1, y1, x2, y2, options);\n },\n\n rectAnnotation(x, y, w, h, options = {}) {\n options.Subtype = 'Square';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n ellipseAnnotation(x, y, w, h, options = {}) {\n options.Subtype = 'Circle';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n textAnnotation(x, y, w, h, text, options = {}) {\n options.Subtype = 'FreeText';\n options.Contents = new String(text);\n options.DA = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n fileAnnotation(x, y, w, h, file = {}, options = {}) {\n // create hidden file\n const filespec = this.file(file.src, Object.assign({ hidden: true }, file));\n\n options.Subtype = 'FileAttachment';\n options.FS = filespec;\n\n // add description from filespec unless description (Contents) has already been set\n if (options.Contents) {\n options.Contents = new String(options.Contents);\n } else if (filespec.data.Desc) {\n options.Contents = filespec.data.Desc;\n }\n\n return this.annotate(x, y, w, h, options);\n },\n\n _convertRect(x1, y1, w, h) {\n // flip y1 and y2\n let y2 = y1;\n y1 += h;\n\n // make x2\n let x2 = x1 + w;\n\n // apply current transformation matrix to points\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\n x1 = m0 * x1 + m2 * y1 + m4;\n y1 = m1 * x1 + m3 * y1 + m5;\n x2 = m0 * x2 + m2 * y2 + m4;\n y2 = m1 * x2 + m3 * y2 + m5;\n\n return [x1, y1, x2, y2];\n },\n};\n","class PDFOutline {\n constructor(document, parent, title, dest, options = { expanded: false }) {\n this.document = document;\n this.options = options;\n this.outlineData = {};\n\n if (dest !== null) {\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\n }\n\n if (parent !== null) {\n this.outlineData['Parent'] = parent;\n }\n\n if (title !== null) {\n this.outlineData['Title'] = new String(title);\n }\n\n this.dictionary = this.document.ref(this.outlineData);\n this.children = [];\n }\n\n addItem(title, options = { expanded: false }) {\n const result = new PDFOutline(\n this.document,\n this.dictionary,\n title,\n this.document.page,\n options,\n );\n this.children.push(result);\n\n return result;\n }\n\n endOutline() {\n if (this.children.length > 0) {\n if (this.options.expanded) {\n this.outlineData.Count = this.children.length;\n }\n\n const first = this.children[0],\n last = this.children[this.children.length - 1];\n this.outlineData.First = first.dictionary;\n this.outlineData.Last = last.dictionary;\n\n for (let i = 0, len = this.children.length; i < len; i++) {\n const child = this.children[i];\n if (i > 0) {\n child.outlineData.Prev = this.children[i - 1].dictionary;\n }\n if (i < this.children.length - 1) {\n child.outlineData.Next = this.children[i + 1].dictionary;\n }\n child.endOutline();\n }\n }\n\n return this.dictionary.end();\n }\n}\n\nexport default PDFOutline;\n","import PDFOutline from '../outline';\n\nexport default {\n initOutline() {\n this.outline = new PDFOutline(this, null, null, null);\n },\n\n endOutline() {\n this.outline.endOutline();\n if (this.outline.children.length > 0) {\n this._root.data.Outlines = this.outline.dictionary;\n return (this._root.data.PageMode = 'UseOutlines');\n }\n },\n};\n","/*\nPDFStructureContent - a reference to a marked structure content\nBy Ben Schmidt\n*/\n\nclass PDFStructureContent {\n constructor(pageRef, mcid) {\n this.refs = [{ pageRef, mcid }];\n }\n\n push(structContent) {\n structContent.refs.forEach((ref) => this.refs.push(ref));\n }\n}\n\nexport default PDFStructureContent;\n","/*\nPDFStructureElement - represents an element in the PDF logical structure tree\nBy Ben Schmidt\n*/\n\nimport PDFStructureContent from './structure_content';\n\nclass PDFStructureElement {\n constructor(document, type, options = {}, children = null) {\n this.document = document;\n\n this._attached = false;\n this._ended = false;\n this._flushed = false;\n this.dictionary = document.ref({\n // Type: \"StructElem\",\n S: type,\n });\n\n const data = this.dictionary.data;\n\n if (Array.isArray(options) || this._isValidChild(options)) {\n children = options;\n options = {};\n }\n\n if (typeof options.title !== 'undefined') {\n data.T = new String(options.title);\n }\n if (typeof options.lang !== 'undefined') {\n data.Lang = new String(options.lang);\n }\n if (typeof options.alt !== 'undefined') {\n data.Alt = new String(options.alt);\n }\n if (typeof options.expanded !== 'undefined') {\n data.E = new String(options.expanded);\n }\n if (typeof options.actual !== 'undefined') {\n data.ActualText = new String(options.actual);\n }\n\n this._children = [];\n\n if (children) {\n if (!Array.isArray(children)) {\n children = [children];\n }\n children.forEach((child) => this.add(child));\n this.end();\n }\n }\n\n add(child) {\n if (this._ended) {\n throw new Error(`Cannot add child to already-ended structure element`);\n }\n\n if (!this._isValidChild(child)) {\n throw new Error(`Invalid structure element child`);\n }\n\n if (child instanceof PDFStructureElement) {\n child.setParent(this.dictionary);\n if (this._attached) {\n child.setAttached();\n }\n }\n\n if (child instanceof PDFStructureContent) {\n this._addContentToParentTree(child);\n }\n\n if (typeof child === 'function' && this._attached) {\n // _contentForClosure() adds the content to the parent tree\n child = this._contentForClosure(child);\n }\n\n this._children.push(child);\n\n return this;\n }\n\n _addContentToParentTree(content) {\n content.refs.forEach(({ pageRef, mcid }) => {\n const pageStructParents = this.document\n .getStructParentTree()\n .get(pageRef.data.StructParents);\n pageStructParents[mcid] = this.dictionary;\n });\n }\n\n setParent(parentRef) {\n if (this.dictionary.data.P) {\n throw new Error(`Structure element added to more than one parent`);\n }\n\n this.dictionary.data.P = parentRef;\n\n this._flush();\n }\n\n setAttached() {\n if (this._attached) {\n return;\n }\n\n this._children.forEach((child, index) => {\n if (child instanceof PDFStructureElement) {\n child.setAttached();\n }\n if (typeof child === 'function') {\n this._children[index] = this._contentForClosure(child);\n }\n });\n\n this._attached = true;\n\n this._flush();\n }\n\n end() {\n if (this._ended) {\n return;\n }\n\n this._children\n .filter((child) => child instanceof PDFStructureElement)\n .forEach((child) => child.end());\n\n this._ended = true;\n\n this._flush();\n }\n\n _isValidChild(child) {\n return (\n child instanceof PDFStructureElement ||\n child instanceof PDFStructureContent ||\n typeof child === 'function'\n );\n }\n\n _contentForClosure(closure) {\n const content = this.document.markStructureContent(this.dictionary.data.S);\n closure();\n this.document.endMarkedContent();\n\n this._addContentToParentTree(content);\n\n return content;\n }\n\n _isFlushable() {\n if (!this.dictionary.data.P || !this._ended) {\n return false;\n }\n\n return this._children.every((child) => {\n if (typeof child === 'function') {\n return false;\n }\n if (child instanceof PDFStructureElement) {\n return child._isFlushable();\n }\n return true;\n });\n }\n\n _flush() {\n if (this._flushed || !this._isFlushable()) {\n return;\n }\n\n this.dictionary.data.K = [];\n\n this._children.forEach((child) => this._flushChild(child));\n\n this.dictionary.end();\n\n // free memory used by children; the dictionary itself may still be\n // referenced by a parent structure element or root, but we can\n // at least trim the tree here\n this._children = [];\n this.dictionary.data.K = null;\n\n this._flushed = true;\n }\n\n _flushChild(child) {\n if (child instanceof PDFStructureElement) {\n this.dictionary.data.K.push(child.dictionary);\n }\n\n if (child instanceof PDFStructureContent) {\n child.refs.forEach(({ pageRef, mcid }) => {\n if (!this.dictionary.data.Pg) {\n this.dictionary.data.Pg = pageRef;\n }\n\n if (this.dictionary.data.Pg === pageRef) {\n this.dictionary.data.K.push(mcid);\n } else {\n this.dictionary.data.K.push({\n Type: 'MCR',\n Pg: pageRef,\n MCID: mcid,\n });\n }\n });\n }\n }\n}\n\nexport default PDFStructureElement;\n","/*\nPDFNumberTree - represents a number tree object\n*/\n\nimport PDFTree from './tree';\n\nclass PDFNumberTree extends PDFTree {\n _compareKeys(a, b) {\n return parseInt(a) - parseInt(b);\n }\n\n _keysName() {\n return 'Nums';\n }\n\n _dataForKey(k) {\n return parseInt(k);\n }\n}\n\nexport default PDFNumberTree;\n","/*\nMarkings mixin - support marked content sequences in content streams\nBy Ben Schmidt\n*/\n\nimport PDFStructureElement from '../structure_element';\nimport PDFStructureContent from '../structure_content';\nimport PDFNumberTree from '../number_tree';\nimport PDFObject from '../object';\n\nexport default {\n initMarkings(options) {\n this.structChildren = [];\n\n if (options.tagged) {\n this.getMarkInfoDictionary().data.Marked = true;\n this.getStructTreeRoot();\n }\n },\n\n markContent(tag, options = null) {\n if (tag === 'Artifact' || (options && options.mcid)) {\n let toClose = 0;\n this.page.markings.forEach((marking) => {\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\n toClose++;\n }\n });\n while (toClose--) {\n this.endMarkedContent();\n }\n }\n\n if (!options) {\n this.page.markings.push({ tag });\n this.addContent(`/${tag} BMC`);\n return this;\n }\n\n this.page.markings.push({ tag, options });\n\n const dictionary = {};\n\n if (typeof options.mcid !== 'undefined') {\n dictionary.MCID = options.mcid;\n }\n if (tag === 'Artifact') {\n if (typeof options.type === 'string') {\n dictionary.Type = options.type;\n }\n if (Array.isArray(options.bbox)) {\n dictionary.BBox = [\n options.bbox[0],\n this.page.height - options.bbox[3],\n options.bbox[2],\n this.page.height - options.bbox[1],\n ];\n }\n if (\n Array.isArray(options.attached) &&\n options.attached.every((val) => typeof val === 'string')\n ) {\n dictionary.Attached = options.attached;\n }\n }\n if (tag === 'Span') {\n if (options.lang) {\n dictionary.Lang = new String(options.lang);\n }\n if (options.alt) {\n dictionary.Alt = new String(options.alt);\n }\n if (options.expanded) {\n dictionary.E = new String(options.expanded);\n }\n if (options.actual) {\n dictionary.ActualText = new String(options.actual);\n }\n }\n\n this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\n return this;\n },\n\n markStructureContent(tag, options = {}) {\n const pageStructParents = this.getStructParentTree().get(\n this.page.structParentTreeKey,\n );\n const mcid = pageStructParents.length;\n pageStructParents.push(null);\n\n this.markContent(tag, { ...options, mcid });\n\n const structContent = new PDFStructureContent(this.page.dictionary, mcid);\n this.page.markings.slice(-1)[0].structContent = structContent;\n return structContent;\n },\n\n endMarkedContent() {\n this.page.markings.pop();\n this.addContent('EMC');\n return this;\n },\n\n struct(type, options = {}, children = null) {\n return new PDFStructureElement(this, type, options, children);\n },\n\n addStructure(structElem) {\n const structTreeRoot = this.getStructTreeRoot();\n structElem.setParent(structTreeRoot);\n structElem.setAttached();\n this.structChildren.push(structElem);\n if (!structTreeRoot.data.K) {\n structTreeRoot.data.K = [];\n }\n structTreeRoot.data.K.push(structElem.dictionary);\n return this;\n },\n\n initPageMarkings(pageMarkings) {\n pageMarkings.forEach((marking) => {\n if (marking.structContent) {\n const structContent = marking.structContent;\n const newStructContent = this.markStructureContent(\n marking.tag,\n marking.options,\n );\n structContent.push(newStructContent);\n this.page.markings.slice(-1)[0].structContent = structContent;\n } else {\n this.markContent(marking.tag, marking.options);\n }\n });\n },\n\n endPageMarkings(page) {\n const pageMarkings = page.markings;\n pageMarkings.forEach(() => page.write('EMC'));\n page.markings = [];\n return pageMarkings;\n },\n\n getMarkInfoDictionary() {\n if (!this._root.data.MarkInfo) {\n this._root.data.MarkInfo = this.ref({});\n }\n return this._root.data.MarkInfo;\n },\n\n hasMarkInfoDictionary() {\n return !!this._root.data.MarkInfo;\n },\n\n getStructTreeRoot() {\n if (!this._root.data.StructTreeRoot) {\n this._root.data.StructTreeRoot = this.ref({\n Type: 'StructTreeRoot',\n ParentTree: new PDFNumberTree(),\n ParentTreeNextKey: 0,\n });\n }\n return this._root.data.StructTreeRoot;\n },\n\n getStructParentTree() {\n return this.getStructTreeRoot().data.ParentTree;\n },\n\n createStructParentTreeNextKey() {\n // initialise the MarkInfo dictionary\n this.getMarkInfoDictionary();\n\n const structTreeRoot = this.getStructTreeRoot();\n const key = structTreeRoot.data.ParentTreeNextKey++;\n structTreeRoot.data.ParentTree.add(key, []);\n return key;\n },\n\n endMarkings() {\n const structTreeRoot = this._root.data.StructTreeRoot;\n if (structTreeRoot) {\n structTreeRoot.end();\n this.structChildren.forEach((structElem) => structElem.end());\n }\n if (this._root.data.MarkInfo) {\n this._root.data.MarkInfo.end();\n }\n },\n};\n","const FIELD_FLAGS = {\n readOnly: 1,\n required: 2,\n noExport: 4,\n multiline: 0x1000,\n password: 0x2000,\n toggleToOffButton: 0x4000,\n radioButton: 0x8000,\n pushButton: 0x10000,\n combo: 0x20000,\n edit: 0x40000,\n sort: 0x80000,\n multiSelect: 0x200000,\n noSpell: 0x400000,\n};\nconst FIELD_JUSTIFY = {\n left: 0,\n center: 1,\n right: 2,\n};\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\nconst FORMAT_SPECIAL = {\n zip: '0',\n zipPlus4: '1',\n zip4: '1',\n phone: '2',\n ssn: '3',\n};\nconst FORMAT_DEFAULT = {\n number: {\n nDec: 0,\n sepComma: false,\n negStyle: 'MinusBlack',\n currency: '',\n currencyPrepend: true,\n },\n percent: {\n nDec: 0,\n sepComma: false,\n },\n};\n\nexport default {\n /**\n * Must call if adding AcroForms to a document. Must also call font() before\n * this method to set the default font.\n */\n initForm() {\n if (!this._font) {\n throw new Error('Must set a font before calling initForm method');\n }\n this._acroform = {\n fonts: {},\n defaultFont: this._font.name,\n };\n this._acroform.fonts[this._font.id] = this._font.ref();\n\n let data = {\n Fields: [],\n NeedAppearances: true,\n DA: new String(`/${this._font.id} 0 Tf 0 g`),\n DR: {\n Font: {},\n },\n };\n data.DR.Font[this._font.id] = this._font.ref();\n const AcroForm = this.ref(data);\n this._root.data.AcroForm = AcroForm;\n return this;\n },\n\n /**\n * Called automatically by document.js\n */\n endAcroForm() {\n if (this._root.data.AcroForm) {\n if (\n !Object.keys(this._acroform.fonts).length &&\n !this._acroform.defaultFont\n ) {\n throw new Error('No fonts specified for PDF form');\n }\n let fontDict = this._root.data.AcroForm.data.DR.Font;\n Object.keys(this._acroform.fonts).forEach((name) => {\n fontDict[name] = this._acroform.fonts[name];\n });\n this._root.data.AcroForm.data.Fields.forEach((fieldRef) => {\n this._endChild(fieldRef);\n });\n this._root.data.AcroForm.end();\n }\n return this;\n },\n\n _endChild(ref) {\n if (Array.isArray(ref.data.Kids)) {\n ref.data.Kids.forEach((childRef) => {\n this._endChild(childRef);\n });\n ref.end();\n }\n return this;\n },\n\n /**\n * Creates and adds a form field to the document. Form fields are intermediate\n * nodes in a PDF form that are used to specify form name heirarchy and form\n * value defaults.\n * @param {string} name - field name (T attribute in field dictionary)\n * @param {object} options - other attributes to include in field dictionary\n */\n formField(name, options = {}) {\n let fieldDict = this._fieldDict(name, null, options);\n let fieldRef = this.ref(fieldDict);\n this._addToParent(fieldRef);\n return fieldRef;\n },\n\n /**\n * Creates and adds a Form Annotation to the document. Form annotations are\n * called Widget annotations internally within a PDF file.\n * @param {string} name - form field name (T attribute of widget annotation\n * dictionary)\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {object} options\n */\n formAnnotation(name, type, x, y, w, h, options = {}) {\n let fieldDict = this._fieldDict(name, type, options);\n fieldDict.Subtype = 'Widget';\n if (fieldDict.F === undefined) {\n fieldDict.F = 4; // print the annotation\n }\n\n // Add Field annot to page, and get it's ref\n this.annotate(x, y, w, h, fieldDict);\n let annotRef = this.page.annotations[this.page.annotations.length - 1];\n\n return this._addToParent(annotRef);\n },\n\n formText(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'text', x, y, w, h, options);\n },\n\n formPushButton(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\n },\n\n formCombo(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\n },\n\n formList(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'list', x, y, w, h, options);\n },\n\n formRadioButton(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\n },\n\n formCheckbox(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\n },\n\n _addToParent(fieldRef) {\n let parent = fieldRef.data.Parent;\n if (parent) {\n if (!parent.data.Kids) {\n parent.data.Kids = [];\n }\n parent.data.Kids.push(fieldRef);\n } else {\n this._root.data.AcroForm.data.Fields.push(fieldRef);\n }\n return this;\n },\n\n _fieldDict(name, type, options = {}) {\n if (!this._acroform) {\n throw new Error(\n 'Call document.initForm() method before adding form elements to document',\n );\n }\n let opts = Object.assign({}, options);\n if (type !== null) {\n opts = this._resolveType(type, options);\n }\n opts = this._resolveFlags(opts);\n opts = this._resolveJustify(opts);\n opts = this._resolveFont(opts);\n opts = this._resolveStrings(opts);\n opts = this._resolveColors(opts);\n opts = this._resolveFormat(opts);\n opts.T = new String(name);\n if (opts.parent) {\n opts.Parent = opts.parent;\n delete opts.parent;\n }\n return opts;\n },\n\n _resolveType(type, opts) {\n if (type === 'text') {\n opts.FT = 'Tx';\n } else if (type === 'pushButton') {\n opts.FT = 'Btn';\n opts.pushButton = true;\n } else if (type === 'radioButton') {\n opts.FT = 'Btn';\n opts.radioButton = true;\n } else if (type === 'checkbox') {\n opts.FT = 'Btn';\n } else if (type === 'combo') {\n opts.FT = 'Ch';\n opts.combo = true;\n } else if (type === 'list') {\n opts.FT = 'Ch';\n } else {\n throw new Error(`Invalid form annotation type '${type}'`);\n }\n return opts;\n },\n\n _resolveFormat(opts) {\n const f = opts.format;\n if (f && f.type) {\n let fnKeystroke;\n let fnFormat;\n let params = '';\n if (FORMAT_SPECIAL[f.type] !== undefined) {\n fnKeystroke = `AFSpecial_Keystroke`;\n fnFormat = `AFSpecial_Format`;\n params = FORMAT_SPECIAL[f.type];\n } else {\n let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\n fnKeystroke = `AF${format}_Keystroke`;\n fnFormat = `AF${format}_Format`;\n\n if (f.type === 'date') {\n fnKeystroke += 'Ex';\n params = String(f.param);\n } else if (f.type === 'time') {\n params = String(f.param);\n } else if (f.type === 'number') {\n let p = Object.assign({}, FORMAT_DEFAULT.number, f);\n params = String(\n [\n String(p.nDec),\n p.sepComma ? '0' : '1',\n '\"' + p.negStyle + '\"',\n 'null',\n '\"' + p.currency + '\"',\n String(p.currencyPrepend),\n ].join(','),\n );\n } else if (f.type === 'percent') {\n let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\n params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\n }\n }\n opts.AA = opts.AA ? opts.AA : {};\n opts.AA.K = {\n S: 'JavaScript',\n JS: new String(`${fnKeystroke}(${params});`),\n };\n opts.AA.F = {\n S: 'JavaScript',\n JS: new String(`${fnFormat}(${params});`),\n };\n }\n delete opts.format;\n return opts;\n },\n\n _resolveColors(opts) {\n let color = this._normalizeColor(opts.backgroundColor);\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n opts.MK.BG = color;\n }\n color = this._normalizeColor(opts.borderColor);\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n opts.MK.BC = color;\n }\n delete opts.backgroundColor;\n delete opts.borderColor;\n return opts;\n },\n\n _resolveFlags(options) {\n let result = 0;\n Object.keys(options).forEach((key) => {\n if (FIELD_FLAGS[key]) {\n if (options[key]) {\n result |= FIELD_FLAGS[key];\n }\n delete options[key];\n }\n });\n if (result !== 0) {\n options.Ff = options.Ff ? options.Ff : 0;\n options.Ff |= result;\n }\n return options;\n },\n\n _resolveJustify(options) {\n let result = 0;\n if (options.align !== undefined) {\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\n result = FIELD_JUSTIFY[options.align];\n }\n delete options.align;\n }\n if (result !== 0) {\n options.Q = result; // default\n }\n return options;\n },\n\n _resolveFont(options) {\n // add current font to document-level AcroForm dict if necessary\n if (this._acroform.fonts[this._font.id] == null) {\n this._acroform.fonts[this._font.id] = this._font.ref();\n }\n\n // add current font to field's resource dict (RD) if not the default acroform font\n if (this._acroform.defaultFont !== this._font.name) {\n options.DR = { Font: {} };\n\n // Get the fontSize option. If not set use auto sizing\n const fontSize = options.fontSize || 0;\n\n options.DR.Font[this._font.id] = this._font.ref();\n options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\n }\n return options;\n },\n\n _resolveStrings(options) {\n let select = [];\n function appendChoices(a) {\n if (Array.isArray(a)) {\n for (let idx = 0; idx < a.length; idx++) {\n if (typeof a[idx] === 'string') {\n select.push(new String(a[idx]));\n } else {\n select.push(a[idx]);\n }\n }\n }\n }\n appendChoices(options.Opt);\n if (options.select) {\n appendChoices(options.select);\n delete options.select;\n }\n if (select.length) {\n options.Opt = select;\n }\n\n Object.keys(VALUE_MAP).forEach((key) => {\n if (options[key] !== undefined) {\n options[VALUE_MAP[key]] = options[key];\n delete options[key];\n }\n });\n ['V', 'DV'].forEach((key) => {\n if (typeof options[key] === 'string') {\n options[key] = new String(options[key]);\n }\n });\n\n if (options.MK && options.MK.CA) {\n options.MK.CA = new String(options.MK.CA);\n }\n if (options.label) {\n options.MK = options.MK ? options.MK : {};\n options.MK.CA = new String(options.label);\n delete options.label;\n }\n return options;\n },\n};\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * * options.relationship: Relationship between the PDF document and its attached file. Can be 'Alternative', 'Data', 'Source', 'Supplement' or 'Unspecified'.\r\n * @returns filespec reference\r\n */\r\n file(src, options = {}) {\r\n options.name = options.name || src;\r\n options.relationship = options.relationship || 'Unspecified';\r\n\r\n const refBody = {\r\n Type: 'EmbeddedFile',\r\n Params: {},\r\n };\r\n let data;\r\n\r\n if (!src) {\r\n throw new Error('No src specified');\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n const match = /^data:(.*?);base64,(.*)$/.exec(src);\r\n if (match) {\r\n if (match[1]) {\r\n refBody.Subtype = match[1].replace('/', '#2F');\r\n }\r\n data = Buffer.from(match[2], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n throw new Error(`Could not read contents of file at filepath ${src}`);\r\n }\r\n\r\n // update CreationDate and ModDate\r\n const { birthtime, ctime } = fs.statSync(src);\r\n refBody.Params.CreationDate = birthtime;\r\n refBody.Params.ModDate = ctime;\r\n }\r\n }\r\n\r\n // override creation date and modified date\r\n if (options.creationDate instanceof Date) {\r\n refBody.Params.CreationDate = options.creationDate;\r\n }\r\n if (options.modifiedDate instanceof Date) {\r\n refBody.Params.ModDate = options.modifiedDate;\r\n }\r\n // add optional subtype\r\n if (options.type) {\r\n refBody.Subtype = options.type.replace('/', '#2F');\r\n }\r\n\r\n // add checksum and size information\r\n const checksum = CryptoJS.MD5(\r\n CryptoJS.lib.WordArray.create(new Uint8Array(data)),\r\n );\r\n refBody.Params.CheckSum = new String(checksum);\r\n refBody.Params.Size = data.byteLength;\r\n\r\n // save some space when embedding the same file again\r\n // if a file with the same name and metadata exists, reuse its reference\r\n let ref;\r\n if (!this._fileRegistry) this._fileRegistry = {};\r\n let file = this._fileRegistry[options.name];\r\n if (file && isEqual(refBody, file)) {\r\n ref = file.ref;\r\n } else {\r\n ref = this.ref(refBody);\r\n ref.end(data);\r\n\r\n this._fileRegistry[options.name] = { ...refBody, ref };\r\n }\r\n // add filespec for embedded file\r\n const fileSpecBody = {\r\n Type: 'Filespec',\r\n AFRelationship: options.relationship,\r\n F: new String(options.name),\r\n EF: { F: ref },\r\n UF: new String(options.name),\r\n };\r\n if (options.description) {\r\n fileSpecBody.Desc = new String(options.description);\r\n }\r\n const filespec = this.ref(fileSpecBody);\r\n filespec.end();\r\n\r\n if (!options.hidden) {\r\n this.addNamedEmbeddedFile(options.name, filespec);\r\n }\r\n\r\n // Add file to the catalogue to be PDF/A3 compliant\r\n if (this._root.data.AF) {\r\n this._root.data.AF.push(filespec);\r\n } else {\r\n this._root.data.AF = [filespec];\r\n }\r\n\r\n return filespec;\r\n },\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n return (\r\n a.Subtype === b.Subtype &&\r\n a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n a.Params.Size === b.Params.Size &&\r\n a.Params.CreationDate.getTime() === b.Params.CreationDate.getTime() &&\r\n ((a.Params.ModDate === undefined && b.Params.ModDate === undefined) ||\r\n a.Params.ModDate.getTime() === b.Params.ModDate.getTime())\r\n );\r\n}\r\n","import fs from 'fs';\n\nexport default {\n initPDFA(pSubset) {\n if (pSubset.charAt(pSubset.length - 3) === '-') {\n this.subset_conformance = pSubset\n .charAt(pSubset.length - 1)\n .toUpperCase();\n this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\n } else {\n // Default to Basic conformance when user doesn't specify\n this.subset_conformance = 'B';\n this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\n }\n },\n\n endSubset() {\n this._addPdfaMetadata();\n this._addColorOutputIntent();\n },\n\n _addColorOutputIntent() {\n const iccProfile = fs.readFileSync(\n `${__dirname}/data/sRGB_IEC61966_2_1.icc`,\n );\n\n const colorProfileRef = this.ref({\n Length: iccProfile.length,\n N: 3,\n });\n colorProfileRef.write(iccProfile);\n colorProfileRef.end();\n\n const intentRef = this.ref({\n Type: 'OutputIntent',\n S: 'GTS_PDFA1',\n Info: new String('sRGB IEC61966-2.1'),\n OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\n DestOutputProfile: colorProfileRef,\n });\n intentRef.end();\n\n this._root.data.OutputIntents = [intentRef];\n },\n\n _getPdfaid() {\n return `\n \n ${this.subset}\n ${this.subset_conformance}\n \n `;\n },\n\n _addPdfaMetadata() {\n this.appendXML(this._getPdfaid());\n },\n};\n","export default {\n initPDFUA() {\n this.subset = 1;\n },\n\n endSubset() {\n this._addPdfuaMetadata();\n },\n\n _addPdfuaMetadata() {\n this.appendXML(this._getPdfuaid());\n },\n\n _getPdfuaid() {\n return `\n \n ${this.subset}\n \n `;\n },\n};\n","import PDFA from './pdfa';\nimport PDFUA from './pdfua';\n\nexport default {\n _importSubset(subset) {\n Object.assign(this, subset);\n },\n\n initSubset(options) {\n switch (options.subset) {\n case 'PDF/A-1':\n case 'PDF/A-1a':\n case 'PDF/A-1b':\n case 'PDF/A-2':\n case 'PDF/A-2a':\n case 'PDF/A-2b':\n case 'PDF/A-3':\n case 'PDF/A-3a':\n case 'PDF/A-3b':\n this._importSubset(PDFA);\n this.initPDFA(options.subset);\n break;\n case 'PDF/UA':\n this._importSubset(PDFUA);\n this.initPDFUA();\n break;\n }\n },\n};\n","/**\r\n * @template T\r\n * @typedef {function(number): T} Dynamic\r\n */\r\n\r\n/**\r\n * @typedef {Object} Font\r\n * @property {PDFFontSource} [src]\r\n * The name of the font\r\n *\r\n * Defaults to the current document font source `doc._fontSrc`\r\n * @property {string} [family]\r\n * The font family of the font\r\n *\r\n * Defaults to the current document font family `doc._fontFamily`\r\n * @property {Size} [size]\r\n * The size of the font\r\n *\r\n * Defaults to the current document font size `doc._fontSize`\r\n */\r\n\r\n/**\r\n * Measurement of how wide something is, false means 0 and true means 1\r\n *\r\n * @typedef {Size | boolean} Wideness\r\n */\r\n\r\n/**\r\n * The value of the text of a cell\r\n * @typedef {string | null | undefined} TableCellText\r\n */\r\n\r\n/** @typedef {Object} TableCellStyle\r\n *\r\n * @property {TableCellText} [text]\r\n * The text of the table cell\r\n * @property {number} [rowSpan]\r\n * Number of rows the cell spans.\r\n *\r\n * Defaults to `1`.\r\n * @property {number} [colSpan]\r\n * Number of columns the cell spans.\r\n *\r\n * Defaults to `1`.\r\n * @property {SideDefinition} [padding]\r\n * Controls the padding of the cell text\r\n *\r\n * Defaults to `0.25em`\r\n * @property {SideDefinition} [border]\r\n * Controls the thickness of the cells borders.\r\n *\r\n * Defaults to `[1, 1, 1, 1]`.\r\n * @property {SideDefinition} [borderColor]\r\n * Color of the border on each side of the cell.\r\n *\r\n * Defaults to the border color defined by the given table layout, or `black` on all sides.\r\n * @property {Font} [font]\r\n * Font options for the cell\r\n *\r\n * Defaults to the documents current font\r\n * @property {PDFColor} [backgroundColor]\r\n * Set the background color of the cell\r\n *\r\n * Defaults to transparent\r\n * @property {'center' | ExpandedAlign} [align]\r\n * Sets the text alignment of the cells text\r\n *\r\n * Defaults to `{x: 'left', y: 'top'}`\r\n * @property {Size} [textStroke]\r\n * Sets the text stroke width of the cells text\r\n *\r\n * Defaults to `0`\r\n * @property {PDFColor} [textStrokeColor]\r\n * Sets the text stroke color of the cells text\r\n *\r\n * Defaults to `black`\r\n * @property {PDFColor} [textColor]\r\n * Sets the text color of the cells text\r\n *\r\n * Defaults to `black`\r\n * @property {'TH' | 'TD'} [type]\r\n * Sets the cell type (for accessibility)\r\n *\r\n * Defaults to `TD`\r\n * @property {Object} [textOptions]\r\n * Sets any advanced text options passed into the cell renderer\r\n *\r\n * Same as the options you pass to `doc.text()`\r\n *\r\n * Will override any defaults set by the cell if set\r\n * @property {string} [title]\r\n * Sets the accessible title for the cell\r\n * @property {'Column' | 'Row' | 'Both'} [scope]\r\n * Sets the accessible scope for the cell\r\n * @property {string} [id]\r\n * Sets the accessible id for the cell\r\n *\r\n * Defaults to `--`\r\n * @property {boolean} [debug]\r\n * Whether to show the debug lines for the cell\r\n *\r\n * Defaults to `false`\r\n */\r\n/** @typedef {TableCellText | TableCellStyle} TableCell **/\r\n\r\n/**\r\n * The width of the column\r\n *\r\n * - `*` distributes equally, filling the whole available space\r\n * - `%` computes the proportion of the max size\r\n *\r\n * Defaults to `*`\r\n * @typedef {Size | '*'} ColumnWidth\r\n */\r\n\r\n/**\r\n * @typedef {Object} ColumnStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {ColumnWidth} [width]\r\n * @property {Size} [minWidth]\r\n * The minimum width of the column\r\n *\r\n * Defaults to `0`\r\n * @property {Size} [maxWidth]\r\n * The maximum width of the column\r\n *\r\n * Defaults to `undefined` meaning no max\r\n */\r\n/** @typedef {ColumnStyle | ColumnWidth} Column **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedColumnStyle\r\n * @extends ColumnStyle\r\n *\r\n * @property {number | '*'} width\r\n * @property {number} minWidth\r\n * @property {number} maxWidth\r\n */\r\n\r\n/**\r\n * The height of the row\r\n *\r\n * - A fixed value sets an absolute height for every row.\r\n * - `auto` sets the height based on the text.\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `auto`\r\n * @typedef {Size | 'auto'} RowHeight\r\n */\r\n\r\n/**\r\n * @typedef {Object} RowStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {RowHeight} [height]\r\n * @property {Size} [minHeight]\r\n * The minimum height of the row\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `0`\r\n * @property {Size} [maxHeight]\r\n * The maximum height of the row\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `undefined` meaning no max\r\n */\r\n/** @typedef {RowStyle | RowHeight} Row **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedRowStyle\r\n * @extends RowStyle\r\n *\r\n * @property {number | 'auto'} height\r\n * @property {number} minHeight\r\n * @property {number} maxHeight\r\n */\r\n\r\n/** @typedef {'left' | 'center' | 'right' | 'justify'} AlignX **/\r\n/** @typedef {'top' | 'center' | 'bottom'} AlignY **/\r\n/**\r\n * @typedef {Object} ExpandedAlign\r\n * @property {AlignX} [x]\r\n * @property {AlignY} [y]\r\n */\r\n\r\n/**\r\n * @typedef {Object} DefaultTableCellStyle\r\n *\r\n * @extends ColumnStyle\r\n * @extends RowStyle\r\n * @extends TableCellStyle\r\n */\r\n/** @typedef {TableCellText | DefaultTableCellStyle} DefaultTableCell **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedDefaultTableCellStyle\r\n *\r\n * @extends NormalizedColumnStyle\r\n * @extends NormalizedRowStyle\r\n * @extends TableCellStyle\r\n */\r\n\r\n/**\r\n * @typedef {Object} NormalizedTableCellStyle\r\n *\r\n * @extends NormalizedColumnStyle\r\n * @extends NormalizedRowStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {number} rowIndex\r\n * @property {number} rowSpan\r\n * @property {number} colIndex\r\n * @property {number} colSpan\r\n *\r\n * @property {string} text\r\n * @property {Font} font\r\n * @property {boolean} customFont\r\n * @property {ExpandedSideDefinition} padding\r\n * @property {ExpandedSideDefinition} border\r\n * @property {ExpandedSideDefinition} borderColor\r\n * @property {ExpandedAlign} align\r\n * @property {number} textStroke\r\n * @property {PDFColor} textStrokeColor\r\n * @property {PDFColor} textColor\r\n * @property {number} minWidth\r\n * @property {number} maxWidth\r\n * @property {number} minHeight\r\n * @property {number} maxHeight\r\n * @property {Object} textOptions\r\n */\r\n\r\n/**\r\n * @typedef {Object} SizedNormalizedTableCellStyle\r\n *\r\n * @extends {NormalizedTableCellStyle}\r\n *\r\n * @property {number} x\r\n * @property {number} y\r\n * @property {number} textX\r\n * @property {number} textY\r\n * @property {number} width\r\n * @property {number} height\r\n * @property {number} textAllocatedWidth\r\n * @property {number} textAllocatedHeight\r\n * @property {{x: number, y: number, width: number, height: number}} textBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} Table\r\n *\r\n * @property {Position} [position]\r\n * The position of the table\r\n *\r\n * Defaults to the current document position `{x: doc.x, y: doc.y}`\r\n * @property {Size} [maxWidth]\r\n * The maximum width the table can expand to\r\n *\r\n * Defaults to the remaining content width (offset from the tables position)\r\n * @property {Column | Column[] | Dynamic} [columnStyles]\r\n * Column definitions of the table.\r\n * - A fixed value sets the config for every column\r\n * - Use an array or a callback function to control the column config for each column individually.\r\n *\r\n * Defaults to `auto`\r\n * @property {Row | Row[] | Dynamic} [rowStyles]\r\n * Row definitions of the table.\r\n * - A fixed value sets the config for every column\r\n * - Use an array or a callback function to control the row config of each row individually.\r\n *\r\n * The given values are ignored for rows whose text is higher.\r\n *\r\n * Defaults to `*`.\r\n * @property {DefaultTableCell} [defaultStyle]\r\n * Defaults to apply to every cell\r\n * @property {Iterable>} [data]\r\n * Two-dimensional iterable that defines the table's data.\r\n *\r\n * With the first dimension being the row, and the second being the column\r\n *\r\n * If provided the table will be automatically ended after the last row has been written,\r\n * Otherwise it is up to the user to call `table.end()` or `table.row([], true)`\r\n * @property {PDFStructureElement} [structParent]\r\n * The parent structure to mount to\r\n *\r\n * This will cause the entire table to be enclosed in a Table structure\r\n * with TR and TD/TH for cells\r\n * @property {string} [id]\r\n * Sets the accessible id for the table\r\n *\r\n * Defaults to `table-`\r\n * @property {boolean} [debug]\r\n * Whether to show the debug lines for all the cells\r\n *\r\n * Defaults to `false`\r\n */\r\n\r\n/**\r\n * Fields exclusive to row styles\r\n * @type {string[]}\r\n */\r\nexport const ROW_FIELDS = ['height', 'minHeight', 'maxHeight'];\r\n/**\r\n * Fields exclusive to column styles\r\n * @type {string[]}\r\n */\r\nexport const COLUMN_FIELDS = ['width', 'minWidth', 'maxWidth'];\r\n\r\nexport function memoize(fn, maxSize) {\r\n const cache = new Map();\r\n return function (...args) {\r\n const key = args[0];\r\n if (!cache.has(key)) {\r\n cache.set(key, fn(...args));\r\n if (cache.size > maxSize) cache.delete(cache.keys().next());\r\n }\r\n return cache.get(key);\r\n };\r\n}\r\n\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nfunction isObject(item) {\r\n return item && typeof item === 'object' && !Array.isArray(item);\r\n}\r\n\r\n/**\r\n * Deep merge two objects.\r\n *\r\n * @template T\r\n * @param {T} target\r\n * @param sources\r\n * @returns {T}\r\n */\r\nexport function deepMerge(target, ...sources) {\r\n if (!isObject(target)) return target;\r\n target = deepClone(target);\r\n\r\n for (const source of sources) {\r\n if (isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n if (!(key in target)) target[key] = {};\r\n target[key] = deepMerge(target[key], source[key]);\r\n } else if (source[key] !== undefined) {\r\n target[key] = deepClone(source[key]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n}\r\n\r\nfunction deepClone(obj) {\r\n let result = obj;\r\n if (obj && typeof obj == 'object') {\r\n result = Array.isArray(obj) ? [] : {};\r\n for (const key in obj) result[key] = deepClone(obj[key]);\r\n }\r\n return result;\r\n}\r\n","import { COLUMN_FIELDS, deepMerge, ROW_FIELDS } from './utils';\nimport { normalizeSides } from '../utils';\n\n/**\n * Normalize the row config\n * @note The context here is the cell not the document\n *\n * @param {DefaultTableCell} [defaultStyleInternal]\n * @returns {{\n * defaultStyle: TableCellStyle,\n * defaultRowStyle: RowStyle,\n * defaultColStyle: ColumnStyle\n * }}\n * @private\n */\nexport function normalizedDefaultStyle(defaultStyleInternal) {\n let defaultStyle = defaultStyleInternal;\n // Force object form\n if (typeof defaultStyle !== 'object') defaultStyle = { text: defaultStyle };\n\n const defaultRowStyle = Object.fromEntries(\n Object.entries(defaultStyle).filter(([k]) => ROW_FIELDS.includes(k)),\n );\n const defaultColStyle = Object.fromEntries(\n Object.entries(defaultStyle).filter(([k]) => COLUMN_FIELDS.includes(k)),\n );\n\n defaultStyle.padding = normalizeSides(defaultStyle.padding);\n defaultStyle.border = normalizeSides(defaultStyle.border);\n defaultStyle.borderColor = normalizeSides(defaultStyle.borderColor);\n defaultStyle.align = normalizeAlignment(defaultStyle.align);\n\n return { defaultStyle, defaultRowStyle, defaultColStyle };\n}\n\n/**\n * Normalize the row config\n *\n * @note The context here is the cell not the document\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {RowStyle} defaultRowStyle\n * @param {Dynamic} rowStyleInternal\n * @param {number} i The target row\n * @returns {NormalizedRowStyle}\n * @private\n */\nexport function normalizedRowStyle(defaultRowStyle, rowStyleInternal, i) {\n let rowStyle = rowStyleInternal(i);\n // Force object form\n if (rowStyle == null || typeof rowStyle !== 'object') {\n rowStyle = { height: rowStyle };\n }\n // Normalize\n rowStyle.padding = normalizeSides(rowStyle.padding);\n rowStyle.border = normalizeSides(rowStyle.border);\n rowStyle.borderColor = normalizeSides(rowStyle.borderColor);\n rowStyle.align = normalizeAlignment(rowStyle.align);\n\n // Merge defaults\n rowStyle = deepMerge(defaultRowStyle, rowStyle);\n\n const document = this.document;\n const page = document.page;\n const contentHeight = page.contentHeight;\n\n if (rowStyle.height == null || rowStyle.height === 'auto') {\n rowStyle.height = 'auto';\n } else {\n rowStyle.height = document.sizeToPoint(\n rowStyle.height,\n 0,\n page,\n contentHeight,\n );\n }\n rowStyle.minHeight = document.sizeToPoint(\n rowStyle.minHeight,\n 0,\n page,\n contentHeight,\n );\n rowStyle.maxHeight = document.sizeToPoint(\n rowStyle.maxHeight,\n 0,\n page,\n contentHeight,\n );\n\n return rowStyle;\n}\n\n/**\n * Normalize the column config\n *\n * @note The context here is the document not the cell\n *\n * @param {ColumnStyle} defaultColStyle\n * @param {Dynamic} colStyleInternal\n * @param {number} i - The target column\n * @returns {NormalizedColumnStyle}\n * @private\n */\nexport function normalizedColumnStyle(defaultColStyle, colStyleInternal, i) {\n let colStyle = colStyleInternal(i);\n // Force object form\n if (colStyle == null || typeof colStyle !== 'object') {\n colStyle = { width: colStyle };\n }\n // Normalize\n colStyle.padding = normalizeSides(colStyle.padding);\n colStyle.border = normalizeSides(colStyle.border);\n colStyle.borderColor = normalizeSides(colStyle.borderColor);\n colStyle.align = normalizeAlignment(colStyle.align);\n\n // Merge defaults\n colStyle = deepMerge(defaultColStyle, colStyle);\n\n if (colStyle.width == null || colStyle.width === '*') {\n colStyle.width = '*';\n } else {\n colStyle.width = this.document.sizeToPoint(\n colStyle.width,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n }\n colStyle.minWidth = this.document.sizeToPoint(\n colStyle.minWidth,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n colStyle.maxWidth = this.document.sizeToPoint(\n colStyle.maxWidth,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n\n return colStyle;\n}\n\nexport function normalizeAlignment(align) {\n return align == null || typeof align === 'string'\n ? { x: align, y: align }\n : align;\n}\n","import { deepMerge, memoize } from './utils';\nimport {\n normalizeAlignment,\n normalizedColumnStyle,\n normalizedDefaultStyle,\n normalizedRowStyle,\n} from './style';\nimport { normalizeSides } from '../utils';\n\n/**\n * Normalize a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function normalizeTable() {\n const doc = this.document;\n const opts = this.opts;\n\n // Normalize config\n let index = doc._tableIndex++;\n this._id = new String(opts.id ?? `table-${index}`);\n this._position = {\n x: doc.sizeToPoint(opts.position?.x, doc.x),\n y: doc.sizeToPoint(opts.position?.y, doc.y),\n };\n this._maxWidth = doc.sizeToPoint(\n opts.maxWidth,\n doc.page.width - doc.page.margins.right - this._position.x,\n );\n\n const { defaultStyle, defaultColStyle, defaultRowStyle } =\n normalizedDefaultStyle(opts.defaultStyle);\n this._defaultStyle = defaultStyle;\n\n let colStyle;\n if (opts.columnStyles) {\n if (Array.isArray(opts.columnStyles)) {\n colStyle = (i) => opts.columnStyles[i];\n } else if (typeof opts.columnStyles === 'function') {\n // memoize all columns\n colStyle = memoize((i) => opts.columnStyles(i), Infinity);\n } else if (typeof opts.columnStyles === 'object') {\n colStyle = () => opts.columnStyles;\n }\n }\n if (!colStyle) colStyle = () => ({});\n this._colStyle = normalizedColumnStyle.bind(this, defaultColStyle, colStyle);\n\n let rowStyle;\n if (opts.rowStyles) {\n if (Array.isArray(opts.rowStyles)) {\n rowStyle = (i) => opts.rowStyles[i];\n } else if (typeof opts.rowStyles === 'function') {\n // Memoize the row configs in a rolling buffer\n rowStyle = memoize((i) => opts.rowStyles(i), 10);\n } else if (typeof opts.rowStyles === 'object') {\n rowStyle = () => opts.rowStyles;\n }\n }\n if (!rowStyle) rowStyle = () => ({});\n this._rowStyle = normalizedRowStyle.bind(this, defaultRowStyle, rowStyle);\n}\n\n/**\n * Convert text into a string\n * - null and undefined are preserved (as they will be ignored)\n * - everything else is run through `String()`\n *\n * @param {*} text\n * @returns {string}\n * @private\n */\nexport function normalizeText(text) {\n // Parse out text\n if (text != null) text = `${text}`;\n return text;\n}\n\n/**\n * Normalize a cell config\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {TableCellStyle} cell - The cell to mutate\n * @param {number} rowIndex - The cells row\n * @param {number} colIndex - The cells column\n * @returns {NormalizedTableCellStyle}\n * @private\n */\nexport function normalizeCell(cell, rowIndex, colIndex) {\n const colStyle = this._colStyle(colIndex);\n let rowStyle = this._rowStyle(rowIndex);\n\n const font = deepMerge({}, colStyle.font, rowStyle.font, cell.font);\n const customFont = Object.values(font).filter((v) => v != null).length > 0;\n const doc = this.document;\n\n // Initialize cell context\n const rollbackFont = doc._fontSource;\n const rollbackFontSize = doc._fontSize;\n const rollbackFontFamily = doc._fontFamily;\n if (customFont) {\n if (font.src) doc.font(font.src, font.family);\n if (font.size) doc.fontSize(font.size);\n\n // Refetch rowStyle to reflect font changes\n rowStyle = this._rowStyle(rowIndex);\n }\n\n cell.padding = normalizeSides(cell.padding);\n cell.border = normalizeSides(cell.border);\n cell.borderColor = normalizeSides(cell.borderColor);\n\n // Cell takes highest priority, then row, then column, then defaultConfig\n const config = deepMerge(this._defaultStyle, colStyle, rowStyle, cell);\n config.rowIndex = rowIndex;\n config.colIndex = colIndex;\n config.font = font ?? {};\n config.customFont = customFont;\n\n // Normalize config\n config.text = normalizeText(config.text);\n config.rowSpan = config.rowSpan ?? 1;\n config.colSpan = config.colSpan ?? 1;\n config.padding = normalizeSides(config.padding, '0.25em', (x) =>\n doc.sizeToPoint(x, '0.25em'),\n );\n config.border = normalizeSides(config.border, 1, (x) =>\n doc.sizeToPoint(x, 1),\n );\n config.borderColor = normalizeSides(\n config.borderColor,\n 'black',\n (x) => x ?? 'black',\n );\n config.align = normalizeAlignment(config.align);\n config.align.x = config.align.x ?? 'left';\n config.align.y = config.align.y ?? 'top';\n config.textStroke = doc.sizeToPoint(config.textStroke, 0);\n config.textStrokeColor = config.textStrokeColor ?? 'black';\n config.textColor = config.textColor ?? 'black';\n config.textOptions = config.textOptions ?? {};\n\n // Accessibility settings\n config.id = new String(config.id ?? `${this._id}-${rowIndex}-${colIndex}`);\n config.type = config.type?.toUpperCase() === 'TH' ? 'TH' : 'TD';\n if (config.scope) {\n config.scope = config.scope.toLowerCase();\n if (config.scope === 'row') config.scope = 'Row';\n else if (config.scope === 'both') config.scope = 'Both';\n else if (config.scope === 'column') config.scope = 'Column';\n }\n\n if (typeof this.opts.debug === 'boolean') config.debug = this.opts.debug;\n\n // Rollback font\n if (customFont) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n\n return config;\n}\n\n/**\n * Normalize a row\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {TableCell[]} row\n * @param {number} rowIndex\n * @returns {NormalizedTableCellStyle[]}\n * @private\n */\nexport function normalizeRow(row, rowIndex) {\n if (!this._cellClaim) this._cellClaim = new Set();\n\n let colIndex = 0;\n return row.map((cell) => {\n // Ensure TableCell\n if (cell == null || typeof cell !== 'object') cell = { text: cell };\n\n // Find the starting column of the cell\n // Skipping over the claimed cells\n while (this._cellClaim.has(`${rowIndex},${colIndex}`)) {\n colIndex++;\n }\n\n cell = normalizeCell.call(this, cell, rowIndex, colIndex);\n\n // Claim any spanning cells\n for (let i = 0; i < cell.rowSpan; i++) {\n for (let j = 0; j < cell.colSpan; j++) {\n this._cellClaim.add(`${rowIndex + i},${colIndex + j}`);\n }\n }\n\n colIndex += cell.colSpan;\n return cell;\n });\n}\n","import { cosine, sine } from '../utils';\n\n/**\n * Compute the widths of the columns, ensuring to distribute the star widths\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle[]} row\n * @private\n */\nexport function ensure(row) {\n // Width init\n /** @type number[] **/\n this._columnWidths = [];\n ensureColumnWidths.call(\n this,\n row.reduce((a, cell) => a + cell.colSpan, 0),\n );\n\n // Height init\n /** @type number[] **/\n this._rowHeights = [];\n /** @type number[] **/\n this._rowYPos = [this._position.y];\n /** @type {Set} **/\n this._rowBuffer = new Set();\n}\n\n/**\n * Compute the widths of the columns, ensuring to distribute the star widths\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {number} numCols\n * @private\n */\nfunction ensureColumnWidths(numCols) {\n // Compute the widths\n let starColumnIndexes = [];\n let starMinAcc = 0;\n let unclaimedWidth = this._maxWidth;\n\n for (let i = 0; i < numCols; i++) {\n let col = this._colStyle(i);\n if (col.width === '*') {\n starColumnIndexes[i] = col;\n starMinAcc += col.minWidth;\n } else {\n unclaimedWidth -= col.width;\n this._columnWidths[i] = col.width;\n }\n }\n\n let starColCount = starColumnIndexes.reduce((x) => x + 1, 0);\n\n if (starMinAcc >= unclaimedWidth) {\n // case 1 - there's no way to fit all columns within available width\n // that's actually pretty bad situation with PDF as we have no horizontal scroll\n starColumnIndexes.forEach((cell, i) => {\n this._columnWidths[i] = cell.minWidth;\n });\n } else if (starColCount > 0) {\n // Otherwise we distribute evenly factoring in the cell bounds\n starColumnIndexes.forEach((col, i) => {\n let starSize = unclaimedWidth / starColCount;\n this._columnWidths[i] = Math.max(starSize, col.minWidth);\n if (col.maxWidth > 0) {\n this._columnWidths[i] = Math.min(this._columnWidths[i], col.maxWidth);\n }\n unclaimedWidth -= this._columnWidths[i];\n starColCount--;\n });\n }\n\n let tempX = this._position.x;\n this._columnXPos = Array.from(this._columnWidths, (v) => {\n const t = tempX;\n tempX += v;\n return t;\n });\n}\n\n/**\n * Compute the dimensions of the cells\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @returns {{newPage: boolean, toRender: SizedNormalizedTableCellStyle[]}}\n * @private\n */\nexport function measure(row, rowIndex) {\n // ===================\n // Add cells to buffer\n // ===================\n row.forEach((cell) => this._rowBuffer.add(cell));\n\n if (rowIndex > 0) {\n this._rowYPos[rowIndex] =\n this._rowYPos[rowIndex - 1] + this._rowHeights[rowIndex - 1];\n }\n\n const rowStyle = this._rowStyle(rowIndex);\n\n // ========================================================\n // Find any cells which are to finish rendering on this row\n // ========================================================\n /** @type {SizedNormalizedTableCellStyle[]} */\n let toRender = [];\n this._rowBuffer.forEach((cell) => {\n if (cell.rowIndex + cell.rowSpan - 1 === rowIndex) {\n toRender.push(measureCell.call(this, cell, rowStyle.height));\n this._rowBuffer.delete(cell);\n }\n });\n\n // =====================================================\n // Find the shared height for the row based on the cells\n // =====================================================\n let rowHeight = rowStyle.height;\n if (rowHeight === 'auto') {\n // Compute remaining height on cells\n rowHeight = toRender.reduce((acc, cell) => {\n let minHeight =\n cell.textBounds.height + cell.padding.top + cell.padding.bottom;\n for (let i = 0; i < cell.rowSpan - 1; i++) {\n minHeight -= this._rowHeights[cell.rowIndex + i];\n }\n return Math.max(acc, minHeight);\n }, 0);\n }\n\n rowHeight = Math.max(rowHeight, rowStyle.minHeight);\n if (rowStyle.maxHeight > 0) {\n rowHeight = Math.min(rowHeight, rowStyle.maxHeight);\n }\n this._rowHeights[rowIndex] = rowHeight;\n\n let newPage = false;\n if (rowHeight > this.document.page.contentHeight) {\n // We are unable to render this row on a single page, for now we log a warning and disable the newPage\n console.warn(\n new Error(\n `Row ${rowIndex} requested more than the safe page height, row has been clamped`,\n ).stack.slice(7),\n );\n this._rowHeights[rowIndex] =\n this.document.page.maxY() - this._rowYPos[rowIndex];\n } else if (this._rowYPos[rowIndex] + rowHeight >= this.document.page.maxY()) {\n // If row is going to go over the safe page height then move it over to new page\n this._rowYPos[rowIndex] = this.document.page.margins.top;\n newPage = true;\n }\n\n // =====================================================\n // Re-measure the cells using the know known height\n // =====================================================\n return {\n newPage,\n toRender: toRender.map((cell) => measureCell.call(this, cell, rowHeight)),\n };\n}\n\n/**\n * Compute the dimensions of the cell and its text\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle} cell\n * @param {number | 'auto'} rowHeight\n * @returns {SizedNormalizedTableCellStyle}\n * @private\n */\nfunction measureCell(cell, rowHeight) {\n // ====================\n // Calculate cell width\n // ====================\n let cellWidth = 0;\n\n // Traverse all the columns of the cell\n for (let i = 0; i < cell.colSpan; i++) {\n cellWidth += this._columnWidths[cell.colIndex + i];\n }\n\n // =====================\n // Calculate cell height\n // =====================\n let cellHeight = rowHeight;\n if (cellHeight === 'auto') {\n // The cells height is effectively infinite\n // (although we clamp it to the page content size)\n cellHeight = this.document.page.contentHeight;\n } else {\n // Add all the spanning rows heights to the cell\n for (let i = 0; i < cell.rowSpan - 1; i++) {\n cellHeight += this._rowHeights[cell.rowIndex + i];\n }\n }\n\n // Allocated text space\n const textAllocatedWidth = cellWidth - cell.padding.left - cell.padding.right;\n\n const textAllocatedHeight =\n cellHeight - cell.padding.top - cell.padding.bottom;\n\n // Compute the text bounds\n const rotation = cell.textOptions.rotation ?? 0;\n const { width: textMaxWidth, height: textMaxHeight } = computeBounds(\n rotation,\n textAllocatedWidth,\n textAllocatedHeight,\n );\n\n const textOptions = {\n // Alignment is handled internally\n align: cell.align.x,\n ellipsis: true, // Default make overflowing text ellipsis\n stroke: cell.textStroke > 0,\n fill: true, // To fix the stroke issue\n width: textMaxWidth,\n height: textMaxHeight,\n rotation,\n // Allow the user to define any custom fields\n ...cell.textOptions,\n };\n\n // ========================\n // Calculate text height\n // ========================\n\n // Compute rendered bounds of the text given the constraints of the cell\n let textBounds = { x: 0, y: 0, width: 0, height: 0 };\n if (cell.text) {\n const rollbackFont = this.document._fontSource;\n const rollbackFontSize = this.document._fontSize;\n const rollbackFontFamily = this.document._fontFamily;\n if (cell.font?.src) this.document.font(cell.font.src, cell.font?.family);\n if (cell.font?.size) this.document.fontSize(cell.font.size);\n\n // We first compute the un-rotated bounds so that we can calculate the width of the text\n const unRotatedTextBounds = this.document.boundsOfString(cell.text, 0, 0, {\n ...textOptions,\n rotation: 0,\n });\n textOptions.width = unRotatedTextBounds.width;\n textOptions.height = unRotatedTextBounds.height;\n\n // Then compute the rendered bounds\n textBounds = this.document.boundsOfString(cell.text, 0, 0, textOptions);\n\n this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n }\n\n return {\n ...cell,\n textOptions,\n x: this._columnXPos[cell.colIndex],\n y: this._rowYPos[cell.rowIndex],\n textX: this._columnXPos[cell.colIndex] + cell.padding.left,\n textY: this._rowYPos[cell.rowIndex] + cell.padding.top,\n width: cellWidth,\n height: cellHeight,\n textAllocatedHeight,\n textAllocatedWidth,\n textBounds,\n };\n}\n\n/**\n * Compute the horizon-locked bounding box of a rect\n *\n * @param {number} rotation\n * @param {number} allocWidth\n * @param {number} allocHeight\n *\n * @returns {{width: number, height: number}}\n */\nfunction computeBounds(rotation, allocWidth, allocHeight) {\n let textMaxWidth, textMaxHeight;\n\n // We use these a lot so pre-compute\n const cos = cosine(rotation);\n const sin = sine(rotation);\n\n // <---------------allocWidth---------------->\n // A════════════════════F════════════════════B\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■░░ ■ ║\n // ║ ■■ ░ ■ ║\n // ║ ■■ Θ ░ ■ ║\n // ║■■ ░ ■ ║\n // E- - - - - - - - - - - - - ■ - - - - - - -║\n // ║■ ■ ║\n // ║■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■║\n // ║ ■ ■║\n // ║ ■ G\n // ║ ■ ■■║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■■ ║\n // D════════════════════H════════════════════C\n //\n // Given a rectangle ABCD with a fixed side AB of width allocWidth.\n // Find the largest (by area) inscribed rectangle EFGH,\n // where the angle Θ is equal to rotation (between 0-90 degrees)\n //\n // From above we can infer\n // > AF = EF * cos(Θ)\n // > FB = AB - AF\n // > FB = FG * sin(Θ)\n // Rearrange\n // > FG = FB / sin(Θ)\n // Substitute\n // > FG = (AB - EF*cos(Θ)) / sin(Θ)\n // Area of a rectangle\n // > A = EF * FG\n // Substitute\n // > A = EF * (AB - EF*cos(Θ)) / sin(Θ)\n // > dA/dEF = (AB - 2*EF*cos(Θ)) / sin(Θ)\n // Find peak at dA/dEF = 0\n // > 0 = (AB - 2*EF*cos(Θ)) / sin(Θ)\n // > EF = AB / (2*cos(Θ))\n // Substitute\n // > FG = (AB - (AB*cos(Θ)) / (2*cos(Θ))) / sin(Θ)\n // > FG = AB / (2*sin(Θ))\n //\n // Final outcome\n // Length EF = AB / (2*cos(Θ))\n // Length FG = AB / (2*sin(Θ))\n if (rotation === 0 || rotation === 180) {\n textMaxWidth = allocWidth;\n textMaxHeight = allocHeight;\n } else if (rotation === 90 || rotation === 270) {\n textMaxWidth = allocHeight;\n textMaxHeight = allocWidth;\n } else if (rotation < 90 || (rotation > 180 && rotation < 270)) {\n textMaxWidth = allocWidth / (2 * cos);\n textMaxHeight = allocWidth / (2 * sin);\n } else {\n textMaxHeight = allocWidth / (2 * cos);\n textMaxWidth = allocWidth / (2 * sin);\n }\n\n // If The bounding box of the text is beyond the allocHeight\n // then we need to clamp it and recompute the bounds\n // This time we are computing the sizes based on the outer box ABCD\n const EF = sin * textMaxWidth;\n const FG = cos * textMaxHeight;\n if (EF + FG > allocHeight) {\n // > AB = EF * cos(Θ) + FG * sin(Θ)\n // > BC = BG + GC\n // > BG = FG * cos(Θ)\n // > GC = EF * sin(Θ)\n // > BC = FG * cos(Θ) + EF * sin(Θ)\n // > AB = EF * cos(Θ) + FG * sin(Θ)\n // Substitution solve\n // > EF = (AB*cos(Θ) - BC*sin(Θ)) / (cos^2(Θ)-sin^2(Θ))\n // > FG = (BC*cos(Θ) - AB*sin(Θ)) / (cos^2(Θ)-sin^2(Θ))\n const denominator = cos * cos - sin * sin;\n\n if (rotation === 0 || rotation === 180) {\n textMaxWidth = allocWidth;\n textMaxHeight = allocHeight;\n } else if (rotation === 90 || rotation === 270) {\n textMaxWidth = allocHeight;\n textMaxHeight = allocWidth;\n } else if (rotation < 90 || (rotation > 180 && rotation < 270)) {\n textMaxWidth = (allocWidth * cos - allocHeight * sin) / denominator;\n textMaxHeight = (allocHeight * cos - allocWidth * sin) / denominator;\n } else {\n textMaxHeight = (allocWidth * cos - allocHeight * sin) / denominator;\n textMaxWidth = (allocHeight * cos - allocWidth * sin) / denominator;\n }\n }\n\n return { width: Math.abs(textMaxWidth), height: Math.abs(textMaxHeight) };\n}\n","import PDFStructureElement from '../structure_element';\nimport PDFDocument from '../document';\n\n/**\n * Add accessibility to a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function accommodateTable() {\n const structParent = this.opts.structParent;\n if (structParent) {\n this._tableStruct = this.document.struct('Table');\n this._tableStruct.dictionary.data.ID = this._id;\n if (structParent instanceof PDFStructureElement) {\n structParent.add(this._tableStruct);\n } else if (structParent instanceof PDFDocument) {\n structParent.addStructure(this._tableStruct);\n }\n this._headerRowLookup = {};\n this._headerColumnLookup = {};\n }\n}\n\n/**\n * Cleanup accessibility on a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function accommodateCleanup() {\n if (this._tableStruct) this._tableStruct.end();\n}\n\n/**\n * Render a row with all its accessibility features\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @param {Function} renderCell\n * @private\n */\nexport function accessibleRow(row, rowIndex, renderCell) {\n const rowStruct = this.document.struct('TR');\n rowStruct.dictionary.data.ID = new String(`${this._id}-${rowIndex}`);\n this._tableStruct.add(rowStruct);\n row.forEach((cell) => renderCell(cell, rowStruct));\n rowStruct.end();\n}\n\n/**\n * Render a cell with all its accessibility features\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n * @param {PDFStructureElement} rowStruct\n * @param {Function} callback\n * @private\n */\nexport function accessibleCell(cell, rowStruct, callback) {\n const doc = this.document;\n\n const cellStruct = doc.struct(cell.type, { title: cell.title });\n cellStruct.dictionary.data.ID = cell.id;\n\n rowStruct.add(cellStruct);\n\n const padding = cell.padding;\n const border = cell.border;\n const attributes = {\n O: 'Table',\n Width: cell.width,\n Height: cell.height,\n Padding: [padding.top, padding.bottom, padding.left, padding.right],\n RowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined,\n ColSpan: cell.colSpan > 1 ? cell.colSpan : undefined,\n BorderThickness: [border.top, border.bottom, border.left, border.right],\n };\n\n // Claim row Headers\n if (cell.type === 'TH') {\n if (cell.scope === 'Row' || cell.scope === 'Both') {\n for (let i = 0; i < cell.rowSpan; i++) {\n if (!this._headerRowLookup[cell.rowIndex + i]) {\n this._headerRowLookup[cell.rowIndex + i] = [];\n }\n this._headerRowLookup[cell.rowIndex + i].push(cell.id);\n }\n attributes.Scope = cell.scope;\n }\n if (cell.scope === 'Column' || cell.scope === 'Both') {\n for (let i = 0; i < cell.colSpan; i++) {\n if (!this._headerColumnLookup[cell.colIndex + i]) {\n this._headerColumnLookup[cell.colIndex + i] = [];\n }\n this._headerColumnLookup[cell.colIndex + i].push(cell.id);\n }\n attributes.Scope = cell.scope;\n }\n }\n\n // Find any cells which are marked as headers for this cell\n const Headers = new Set(\n [\n ...Array.from(\n { length: cell.colSpan },\n (_, i) => this._headerColumnLookup[cell.colIndex + i],\n ).flat(),\n ...Array.from(\n { length: cell.rowSpan },\n (_, i) => this._headerRowLookup[cell.rowIndex + i],\n ).flat(),\n ].filter(Boolean),\n );\n if (Headers.size) attributes.Headers = Array.from(Headers);\n\n const normalizeColor = doc._normalizeColor;\n if (cell.backgroundColor != null) {\n attributes.BackgroundColor = normalizeColor(cell.backgroundColor);\n }\n const hasBorder = [border.top, border.bottom, border.left, border.right];\n if (hasBorder.some((x) => x)) {\n const borderColor = cell.borderColor;\n attributes.BorderColor = [\n hasBorder[0] ? normalizeColor(borderColor.top) : null,\n hasBorder[1] ? normalizeColor(borderColor.bottom) : null,\n hasBorder[2] ? normalizeColor(borderColor.left) : null,\n hasBorder[3] ? normalizeColor(borderColor.right) : null,\n ];\n }\n\n // Remove any undefined attributes\n Object.keys(attributes).forEach(\n (key) => attributes[key] === undefined && delete attributes[key],\n );\n cellStruct.dictionary.data.A = doc.ref(attributes);\n cellStruct.add(callback);\n cellStruct.end();\n cellStruct.dictionary.data.A.end();\n}\n","import { accessibleCell, accessibleRow } from './accessibility';\n\n/**\n * Render a cell\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @private\n */\nexport function renderRow(row, rowIndex) {\n if (this._tableStruct) {\n accessibleRow.call(this, row, rowIndex, renderCell.bind(this));\n } else {\n row.forEach((cell) => renderCell.call(this, cell));\n }\n\n return this._rowYPos[rowIndex] + this._rowHeights[rowIndex];\n}\n\n/**\n * Render a cell\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n * @param {PDFStructureElement} rowStruct\n * @private\n */\nfunction renderCell(cell, rowStruct) {\n const cellRenderer = () => {\n // Render cell background\n if (cell.backgroundColor != null) {\n this.document\n .save()\n .rect(cell.x, cell.y, cell.width, cell.height)\n .fill(cell.backgroundColor)\n .restore();\n }\n\n // Render border\n renderBorder.call(\n this,\n cell.border,\n cell.borderColor,\n cell.x,\n cell.y,\n cell.width,\n cell.height,\n );\n\n // Debug cell borders\n if (cell.debug) {\n this.document.save();\n this.document.dash(1, { space: 1 }).lineWidth(1).strokeOpacity(0.3);\n\n // Debug cell bounds\n this.document\n .rect(cell.x, cell.y, cell.width, cell.height)\n .stroke('green');\n\n this.document.restore();\n }\n\n // Render text\n if (cell.text) renderCellText.call(this, cell);\n };\n\n if (rowStruct) accessibleCell.call(this, cell, rowStruct, cellRenderer);\n else cellRenderer();\n}\n\n/**\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n */\nfunction renderCellText(cell) {\n const doc = this.document;\n\n // Configure fonts\n const rollbackFont = doc._fontSource;\n const rollbackFontSize = doc._fontSize;\n const rollbackFontFamily = doc._fontFamily;\n if (cell.customFont) {\n if (cell.font.src) doc.font(cell.font.src, cell.font.family);\n if (cell.font.size) doc.fontSize(cell.font.size);\n }\n\n const x = cell.textX;\n const y = cell.textY;\n const Ah = cell.textAllocatedHeight;\n const Aw = cell.textAllocatedWidth;\n const Cw = cell.textBounds.width;\n const Ch = cell.textBounds.height;\n const Ox = -cell.textBounds.x;\n const Oy = -cell.textBounds.y;\n\n const PxScale =\n cell.align.x === 'right' ? 1 : cell.align.x === 'center' ? 0.5 : 0;\n const Px = (Aw - Cw) * PxScale;\n const PyScale =\n cell.align.y === 'bottom' ? 1 : cell.align.y === 'center' ? 0.5 : 0;\n const Py = (Ah - Ch) * PyScale;\n\n const dx = Px + Ox;\n const dy = Py + Oy;\n\n if (cell.debug) {\n doc.save();\n doc.dash(1, { space: 1 }).lineWidth(1).strokeOpacity(0.3);\n\n // Debug actual text bounds\n if (cell.text) {\n doc\n .moveTo(x + Px, y)\n .lineTo(x + Px, y + Ah)\n .moveTo(x + Px + Cw, y)\n .lineTo(x + Px + Cw, y + Ah)\n .stroke('blue')\n .moveTo(x, y + Py)\n .lineTo(x + Aw, y + Py)\n .moveTo(x, y + Py + Ch)\n .lineTo(x + Aw, y + Py + Ch)\n .stroke('green');\n }\n // Debug allocated text bounds\n doc.rect(x, y, Aw, Ah).stroke('orange');\n\n doc.restore();\n }\n\n // Create text mask to cut off any overflowing text\n // Mask cuts off at the padding not the actual cell, this is intentional!\n doc.save().rect(x, y, Aw, Ah).clip();\n\n doc.fillColor(cell.textColor).strokeColor(cell.textStrokeColor);\n if (cell.textStroke > 0) doc.lineWidth(cell.textStroke);\n\n // Render the text\n doc.text(cell.text, x + dx, y + dy, cell.textOptions);\n\n // Cleanup\n doc.restore();\n if (cell.font) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n}\n\n/**\n * @this PDFTable\n * @memberOf PDFTable\n * @param {ExpandedSideDefinition} border\n * @param {ExpandedSideDefinition} borderColor\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number[]} [mask]\n * @private\n */\nfunction renderBorder(border, borderColor, x, y, width, height, mask) {\n border = Object.fromEntries(\n Object.entries(border).map(([k, v]) => [k, mask && !mask[k] ? 0 : v]),\n );\n\n const doc = this.document;\n if (\n [border.right, border.bottom, border.left].every(\n (val) => val === border.top,\n )\n ) {\n if (border.top > 0) {\n doc\n .save()\n .lineWidth(border.top)\n .rect(x, y, width, height)\n .stroke(borderColor.top)\n .restore();\n }\n } else {\n // Top\n if (border.top > 0) {\n doc\n .save()\n .lineWidth(border.top)\n .moveTo(x, y)\n .lineTo(x + width, y)\n .stroke(borderColor.top)\n .restore();\n }\n // Right\n if (border.right > 0) {\n doc\n .save()\n .lineWidth(border.right)\n .moveTo(x + width, y)\n .lineTo(x + width, y + height)\n .stroke(borderColor.right)\n .restore();\n }\n // Bottom\n if (border.bottom > 0) {\n doc\n .save()\n .lineWidth(border.bottom)\n .moveTo(x + width, y + height)\n .lineTo(x, y + height)\n .stroke(borderColor.bottom)\n .restore();\n }\n // Left\n if (border.left > 0) {\n doc\n .save()\n .lineWidth(border.left)\n .moveTo(x, y + height)\n .lineTo(x, y)\n .stroke(borderColor.left)\n .restore();\n }\n }\n}\n","import { normalizeRow, normalizeTable } from './normalize';\nimport { measure, ensure } from './size';\nimport { renderRow } from './render';\nimport { accommodateCleanup, accommodateTable } from './accessibility';\n\nclass PDFTable {\n /**\n * @param {PDFDocument} document\n * @param {Table} [opts]\n */\n constructor(document, opts = {}) {\n this.document = document;\n this.opts = Object.freeze(opts);\n\n normalizeTable.call(this);\n accommodateTable.call(this);\n\n this._currRowIndex = 0;\n this._ended = false;\n\n // Render cells if present\n if (opts.data) {\n for (const row of opts.data) this.row(row);\n return this.end();\n }\n }\n\n /**\n * Render a new row in the table\n *\n * @param {Iterable} row - The cells to render\n * @param {boolean} lastRow - Whether this row is the last row\n * @returns {this} returns the table, unless lastRow is `true` then returns the `PDFDocument`\n */\n row(row, lastRow = false) {\n if (this._ended) {\n throw new Error(`Table was marked as ended on row ${this._currRowIndex}`);\n }\n\n // Convert the iterable into an array\n row = Array.from(row);\n // Transform row\n row = normalizeRow.call(this, row, this._currRowIndex);\n if (this._currRowIndex === 0) ensure.call(this, row);\n const { newPage, toRender } = measure.call(this, row, this._currRowIndex);\n if (newPage) this.document.continueOnNewPage();\n const yPos = renderRow.call(this, toRender, this._currRowIndex);\n\n // Position document at base of new row\n this.document.x = this._position.x;\n this.document.y = yPos;\n\n if (lastRow) return this.end();\n\n this._currRowIndex++;\n return this;\n }\n\n /**\n * Indicates to the table that it is finished,\n * allowing the table to flush its cell buffer (which should be empty unless there is rowSpans)\n *\n * @returns {PDFDocument} the document\n */\n end() {\n // Flush any remaining cells\n while (this._rowBuffer?.size) this.row([]);\n this._ended = true;\n accommodateCleanup.call(this);\n return this.document;\n }\n}\n\nexport default PDFTable;\n","import PDFTable from '../table/index';\n\nexport default {\n initTables() {\n this._tableIndex = 0;\n },\n /**\n * @param {Table} [opts]\n * @returns {PDFTable} returns the table object unless `data` is set,\n * then it returns the underlying document\n */\n table(opts) {\n return new PDFTable(this, opts);\n },\n};\n","class PDFMetadata {\n constructor() {\n this._metadata = `\n \n \n \n `;\n }\n\n _closeTags() {\n this._metadata = this._metadata.concat(`\n \n \n \n `);\n }\n\n append(xml, newline = true) {\n this._metadata = this._metadata.concat(xml);\n if (newline) this._metadata = this._metadata.concat('\\n');\n }\n\n getXML() {\n return this._metadata;\n }\n\n getLength() {\n return this._metadata.length;\n }\n\n end() {\n this._closeTags();\n this._metadata = this._metadata.trim();\n }\n}\n\nexport default PDFMetadata;\n","import PDFMetadata from '../metadata';\n\nexport default {\n initMetadata() {\n this.metadata = new PDFMetadata();\n },\n\n appendXML(xml, newline = true) {\n this.metadata.append(xml, newline);\n },\n\n _addInfo() {\n this.appendXML(`\n \n ${this.info.CreationDate.toISOString().split('.')[0] + 'Z'}\n ${this.info.Creator}\n \n `);\n\n if (this.info.Title || this.info.Author || this.info.Subject) {\n this.appendXML(`\n \n `);\n\n if (this.info.Title) {\n this.appendXML(`\n \n \n ${this.info.Title}\n \n \n `);\n }\n\n if (this.info.Author) {\n this.appendXML(`\n \n \n ${this.info.Author}\n \n \n `);\n }\n\n if (this.info.Subject) {\n this.appendXML(`\n \n \n ${this.info.Subject}\n \n \n `);\n }\n\n this.appendXML(`\n \n `);\n }\n\n this.appendXML(\n `\n \n ${this.info.Creator}`,\n false,\n );\n\n if (this.info.Keywords) {\n this.appendXML(\n `\n ${this.info.Keywords}`,\n false,\n );\n }\n\n this.appendXML(`\n \n `);\n },\n\n endMetadata() {\n this._addInfo();\n\n this.metadata.end();\n\n /*\n Metadata was introduced in PDF 1.4, so adding it to 1.3 \n will likely only take up more space.\n */\n if (this.version != 1.3) {\n this.metadataRef = this.ref({\n length: this.metadata.getLength(),\n Type: 'Metadata',\n Subtype: 'XML',\n });\n this.metadataRef.compress = false;\n this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\n this.metadataRef.end();\n this._root.data.Metadata = this.metadataRef;\n }\n },\n};\n","/*\nPDFDocument - represents an entire PDF document\nBy Devon Govett\n*/\n\nimport stream from 'stream';\nimport PDFObject from './object';\nimport PDFReference from './reference';\nimport PDFPage from './page';\nimport PDFNameTree from './name_tree';\nimport PDFSecurity from './security';\nimport ColorMixin from './mixins/color';\nimport VectorMixin from './mixins/vector';\nimport FontsMixin from './mixins/fonts';\nimport TextMixin from './mixins/text';\nimport ImagesMixin from './mixins/images';\nimport AnnotationsMixin from './mixins/annotations';\nimport OutlineMixin from './mixins/outline';\nimport MarkingsMixin from './mixins/markings';\nimport AcroFormMixin from './mixins/acroform';\nimport AttachmentsMixin from './mixins/attachments';\nimport LineWrapper from './line_wrapper';\nimport SubsetMixin from './mixins/subsets';\nimport TableMixin from './mixins/table';\nimport MetadataMixin from './mixins/metadata';\n\nclass PDFDocument extends stream.Readable {\n constructor(options = {}) {\n super(options);\n this.options = options;\n\n // PDF version\n switch (options.pdfVersion) {\n case '1.4':\n this.version = 1.4;\n break;\n case '1.5':\n this.version = 1.5;\n break;\n case '1.6':\n this.version = 1.6;\n break;\n case '1.7':\n case '1.7ext3':\n this.version = 1.7;\n break;\n default:\n this.version = 1.3;\n break;\n }\n\n // Whether streams should be compressed\n this.compress =\n this.options.compress != null ? this.options.compress : true;\n\n this._pageBuffer = [];\n this._pageBufferStart = 0;\n\n // The PDF object store\n this._offsets = [];\n this._waiting = 0;\n this._ended = false;\n this._offset = 0;\n const Pages = this.ref({\n Type: 'Pages',\n Count: 0,\n Kids: [],\n });\n\n const Names = this.ref({\n Dests: new PDFNameTree(),\n });\n\n this._root = this.ref({\n Type: 'Catalog',\n Pages,\n Names,\n });\n\n if (this.options.lang) {\n this._root.data.Lang = new String(this.options.lang);\n }\n\n // The current page\n this.page = null;\n\n // Initialize mixins\n this.initMetadata();\n this.initColor();\n this.initVector();\n this.initFonts(options.font);\n this.initText();\n this.initImages();\n this.initOutline();\n this.initMarkings(options);\n this.initTables();\n this.initSubset(options);\n\n // Initialize the metadata\n this.info = {\n Producer: 'PDFKit',\n Creator: 'PDFKit',\n CreationDate: new Date(),\n };\n\n if (this.options.info) {\n for (let key in this.options.info) {\n const val = this.options.info[key];\n this.info[key] = val;\n }\n }\n\n if (this.options.displayTitle) {\n this._root.data.ViewerPreferences = this.ref({\n DisplayDocTitle: true,\n });\n }\n\n // Generate file ID\n this._id = PDFSecurity.generateFileID(this.info);\n\n // Initialize security settings\n this._security = PDFSecurity.create(this, options);\n\n // Write the header\n // PDF version\n this._write(`%PDF-${this.version}`);\n\n // 4 binary chars, as recommended by the spec\n this._write('%\\xFF\\xFF\\xFF\\xFF');\n\n // Add the first page\n if (this.options.autoFirstPage !== false) {\n this.addPage();\n }\n }\n\n addPage(options) {\n if (options == null) {\n ({ options } = this);\n }\n\n // end the current page if needed\n if (!this.options.bufferPages) {\n this.flushPages();\n }\n\n // create a page object\n this.page = new PDFPage(this, options);\n this._pageBuffer.push(this.page);\n\n // add the page to the object store\n const pages = this._root.data.Pages.data;\n pages.Kids.push(this.page.dictionary);\n pages.Count++;\n\n // reset x and y coordinates\n this.x = this.page.margins.left;\n this.y = this.page.margins.top;\n\n // flip PDF coordinate system so that the origin is in\n // the top left rather than the bottom left\n this._ctm = [1, 0, 0, 1, 0, 0];\n this.transform(1, 0, 0, -1, 0, this.page.height);\n\n this.emit('pageAdded');\n\n return this;\n }\n\n continueOnNewPage(options) {\n const pageMarkings = this.endPageMarkings(this.page);\n\n this.addPage(options ?? this.page._options);\n\n this.initPageMarkings(pageMarkings);\n\n return this;\n }\n\n bufferedPageRange() {\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\n }\n\n switchToPage(n) {\n let page;\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\n throw new Error(\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\n this._pageBufferStart\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`,\n );\n }\n\n return (this.page = page);\n }\n\n flushPages() {\n // this local variable exists so we're future-proof against\n // reentrant calls to flushPages.\n const pages = this._pageBuffer;\n this._pageBuffer = [];\n this._pageBufferStart += pages.length;\n for (let page of pages) {\n this.endPageMarkings(page);\n page.end();\n }\n }\n\n addNamedDestination(name, ...args) {\n if (args.length === 0) {\n args = ['XYZ', null, null, null];\n }\n if (args[0] === 'XYZ' && args[2] !== null) {\n args[2] = this.page.height - args[2];\n }\n args.unshift(this.page.dictionary);\n this._root.data.Names.data.Dests.add(name, args);\n }\n\n addNamedEmbeddedFile(name, ref) {\n if (!this._root.data.Names.data.EmbeddedFiles) {\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({\n limits: false,\n });\n }\n\n // add filespec to EmbeddedFiles\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\n }\n\n addNamedJavaScript(name, js) {\n if (!this._root.data.Names.data.JavaScript) {\n this._root.data.Names.data.JavaScript = new PDFNameTree();\n }\n let data = {\n JS: new String(js),\n S: 'JavaScript',\n };\n this._root.data.Names.data.JavaScript.add(name, data);\n }\n\n ref(data) {\n const ref = new PDFReference(this, this._offsets.length + 1, data);\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\n this._waiting++;\n return ref;\n }\n\n _read() {}\n // do nothing, but this method is required by node\n\n _write(data) {\n if (!Buffer.isBuffer(data)) {\n data = Buffer.from(data + '\\n', 'binary');\n }\n\n this.push(data);\n this._offset += data.length;\n }\n\n addContent(data) {\n this.page.write(data);\n return this;\n }\n\n _refEnd(ref) {\n this._offsets[ref.id - 1] = ref.offset;\n if (--this._waiting === 0 && this._ended) {\n this._finalize();\n this._ended = false;\n }\n }\n\n end() {\n this.flushPages();\n\n this._info = this.ref();\n for (let key in this.info) {\n let val = this.info[key];\n if (typeof val === 'string') {\n val = new String(val);\n }\n\n let entry = this.ref(val);\n entry.end();\n\n this._info.data[key] = entry;\n }\n\n this._info.end();\n\n for (let name in this._fontFamilies) {\n const font = this._fontFamilies[name];\n font.finalize();\n }\n\n this.endOutline();\n this.endMarkings();\n\n if (this.subset) {\n this.endSubset();\n }\n\n this.endMetadata();\n\n this._root.end();\n this._root.data.Pages.end();\n this._root.data.Names.end();\n this.endAcroForm();\n\n if (this._root.data.ViewerPreferences) {\n this._root.data.ViewerPreferences.end();\n }\n\n if (this._security) {\n this._security.end();\n }\n\n if (this._waiting === 0) {\n this._finalize();\n } else {\n this._ended = true;\n }\n }\n\n _finalize() {\n // generate xref\n const xRefOffset = this._offset;\n this._write('xref');\n this._write(`0 ${this._offsets.length + 1}`);\n this._write('0000000000 65535 f ');\n\n for (let offset of this._offsets) {\n offset = `0000000000${offset}`.slice(-10);\n this._write(offset + ' 00000 n ');\n }\n\n // trailer\n const trailer = {\n Size: this._offsets.length + 1,\n Root: this._root,\n Info: this._info,\n ID: [this._id, this._id],\n };\n if (this._security) {\n trailer.Encrypt = this._security.dictionary;\n }\n\n this._write('trailer');\n this._write(PDFObject.convert(trailer));\n\n this._write('startxref');\n this._write(`${xRefOffset}`);\n this._write('%%EOF');\n\n // end the stream\n this.push(null);\n }\n\n toString() {\n return '[object PDFDocument]';\n }\n}\n\nconst mixin = (methods) => {\n Object.assign(PDFDocument.prototype, methods);\n};\n\nmixin(MetadataMixin);\nmixin(ColorMixin);\nmixin(VectorMixin);\nmixin(FontsMixin);\nmixin(TextMixin);\nmixin(ImagesMixin);\nmixin(AnnotationsMixin);\nmixin(OutlineMixin);\nmixin(MarkingsMixin);\nmixin(AcroFormMixin);\nmixin(AttachmentsMixin);\nmixin(SubsetMixin);\nmixin(TableMixin);\n\nPDFDocument.LineWrapper = LineWrapper;\n\nexport default PDFDocument;\n"],"names":["PDFAbstractReference","toString","Error","PDFTree","constructor","options","arguments","length","undefined","_items","limits","add","key","val","get","sortedKeys","Object","keys","sort","a","b","_compareKeys","out","first","last","push","PDFObject","convert","_dataForKey","_keysName","join","SpotColor","doc","name","C","M","Y","K","id","spotColors","values","ref","Range","C0","C1","map","value","FunctionType","Domain","N","end","pad","str","Array","slice","escapableRe","escapable","swapBytes","buff","l","i","object","encryptFn","String","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","e","call","number","n","Math","round","PDFReference","document","data","gen","compress","Filter","uncompressedLength","buffer","write","chunk","Uint8Array","Length","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","fArray","Float32Array","uArray","Uint32Array","PDFNumber","rounded","fround","normalizeSides","sides","defaultDefinition","transformer","v","top","right","bottom","left","vertical","horizontal","MM_TO_CM","CM_TO_IN","PX_TO_IN","IN_TO_PT","PC_TO_PT","cosine","cos","PI","sine","sin","DEFAULT_MARGINS","SIZES","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","_options","size","layout","dimensions","toUpperCase","width","height","content","font","fontFamily","fontSize","margins","margin","x","sizeToPoint","resources","ProcSet","dictionary","Type","Parent","_root","Pages","MediaBox","Contents","Resources","markings","fonts","Font","xobjects","XObject","ext_gstates","ExtGState","patterns","Pattern","colorSpaces","ColorSpace","annotations","Annots","structParentTreeKey","StructParents","createStructParentTreeNextKey","contentWidth","contentHeight","maxY","_setTabOrder","Tabs","hasMarkInfoDictionary","color","PDFNameTree","localeCompare","k","inRange","rangeGroup","startRange","endRange","middleRange","floor","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","isCommonlyMappedToNothing","non_ASCII_space_characters","isNonASCIISpaceCharacter","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","toCodePoints","input","codepoints","before","next","saslprep","opts","TypeError","mapped_input","filter","normalized_input","fromCodePoint","apply","normalize","normalized_map","hasProhibited","some","allowUnassigned","hasUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","PDFSecurity","generateFileID","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","generateRandomWordArray","bytes","lib","WordArray","random","create","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","getUserPasswordR5","userKeySalt","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","padding","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","alloc","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","wordArray","byteArray","PDFGradient","stops","embedded","transform","stop","pos","opacity","_normalizeColor","_colorSpace","max","setTransform","m11","m12","m21","m22","dx","dy","embed","m","fn","stopsLength","matrix","bounds","encode","Functions","Bounds","Encode","_gradCount","shader","pattern","PatternType","Shading","Matrix","grad","opacityGradient","pageBBox","page","form","Subtype","FormType","BBox","Group","S","CS","Sh1","gstate","SMask","G","opacityPattern","PaintType","TilingType","XStep","YStep","Gs1","stroke","m0","m1","m2","m3","m4","m5","_ctm","_setColorSpace","op","addContent","PDFLinearGradient","x1","y1","x2","y2","ShadingType","Coords","Function","Extend","PDFRadialGradient","r1","r2","underlyingColorSpaces","PDFTilingPattern","bBox","xStep","yStep","stream","createPattern","toFixed","embedPatternColorSpaces","forEach","csName","csId","getPatternColorSpaceId","cs","underlyingColorspace","_patternCount","patternColor","normalizedColor","_getColorSpace","Gradient","initColor","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","_setColor","_setColorCore","space","fillColor","set","fillOpacity","_fillColor","strokeColor","strokeOpacity","_doOpacity","ca","CA","linearGradient","radialGradient","bbox","addSpotColor","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","cx","cy","px","py","sx","sy","parameters","A","H","h","L","Q","q","s","T","t","Z","z","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","solveArc","lineTo","closePath","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","sin_th","cos_th","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","x3","y3","SVGPath","KAPPA","initVector","_ctmStack","save","restore","pop","lineWidth","w","_CAP_STYLES","BUTT","ROUND","SQUARE","lineCap","_JOIN_STYLES","MITER","BEVEL","lineJoin","miterLimit","dash","originalLength","valid","every","Number","isFinite","JSON","stringify","phase","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","rect","roundedRect","ellipse","xe","ye","xm","ym","circle","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","_len","points","_key","shift","point","_windingRule","rule","test","fill","fillAndStroke","isFillRule","clip","translate","rotate","angle","rad","origin","scale","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","contents","attributes","glyphWidths","boundingBoxes","kernPairs","ascender","descender","xHeight","capHeight","lineGap","section","line","match","encodeText","text","res","len","char","glyphsForString","glyphs","charCode","characterToGlyph","widthOfGlyph","glyph","getKernPair","advancesForGlyphs","advances","PDFFont","widthOfString","lineHeight","includeGap","gap","STANDARD_FONTS","Courier","fs","readFileSync","__dirname","Courier-Bold","Courier-Oblique","Courier-BoldOblique","Helvetica","Helvetica-Bold","Helvetica-Oblique","Helvetica-BoldOblique","Times-Roman","Times-Bold","Times-Italic","Times-BoldItalic","Symbol","ZapfDingbats","StandardFont","BaseFont","Encoding","encoded","positions","xAdvance","yAdvance","xOffset","yOffset","advanceWidth","advance","isStandardFont","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","layoutRun","features","run","position","layoutCached","cached","onlyWidth","needle","gid","includeGlyph","codePoints","isCFF","cff","fontFile","familyClass","sFamilyClass","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","replaceAll","descriptor","FontName","Flags","FontBBox","minX","minY","maxX","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","W","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","chunkSize","chunks","ranges","start","PDFFontFactory","open","src","family","fontkit","ArrayBuffer","isEqualFont","font1","font2","_tables","checkSumAdjustment","records","initFonts","defaultFont","defaultFontFamily","defaultFontSize","_fontFamilies","_fontCount","_fontSource","_fontFamily","_fontSize","_font","_remSize","_registeredFonts","cacheKey","currentLineHeight","registerFont","defaultValue","percentageWidth","multiplier","SOFT_HYPHEN","HYPHEN","LineWrapper","EventEmitter","horizontalScaling","indent","characterSpacing","wordSpacing","columns","columnGap","spaceLeft","startX","startY","column","ellipsis","continuedX","on","indentAllLines","once","continued","align","lastLine","paragraphGap","wordWidth","word","canFit","eachWord","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","lbk","fbk","mightGrow","mustShrink","required","wrap","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","lh","continueOnNewPage","formatListLabel","listType","letter","times","initText","_line","bind","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","struct","structType","markStructureContent","rotation","wrapper","_wrapper","_textOptions","boundsOfString","trim","spaceWidth","x4","y4","xMin","xMax","yMin","yMax","heightOfString","Infinity","list","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","drawListItem","listItem","itemType","labelType","bodyType","structTypes","diff","_fragment","assign","lineBreak","baseline","renderedWidth","link","goTo","destination","addNamedDestination","underline","lineY","strike","oblique","skew","encodedWord","positionsWord","hadOffset","addSegment","cur","flush","MARKERS","COLOR_SPACE_MAP","JPEG","label","marker","readUInt16BE","orientation","exif","fromBuffer","Orientation","bits","channels","colorSpace","BitsPerComponent","Width","Height","PNGImage","image","PNG","imgData","dataDecoded","hasAlphaChannel","isInterlaced","interlaceMethod","Predictor","Colors","colors","Columns","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","initImages","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","originX","originY","ignoreOrientation","inDocumentFlow","openImage","wp","hp","fit","cover","valign","rotateAngle","xTransform","yTransform","hTransform","wTransform","annotate","Rect","_convertRect","Border","F","Dest","note","Name","D","url","pages","Kids","URI","_markup","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","file","filespec","hidden","FS","Desc","PDFOutline","parent","title","dest","expanded","outlineData","children","addItem","endOutline","Count","First","Last","child","Prev","Next","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","type","_attached","_ended","_flushed","_isValidChild","lang","Lang","alt","Alt","E","actual","ActualText","_children","setParent","setAttached","_addContentToParentTree","_contentForClosure","_ref","pageStructParents","getStructParentTree","parentRef","_flush","closure","endMarkedContent","_isFlushable","_flushChild","_ref2","Pg","MCID","PDFNumberTree","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","readOnly","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","center","VALUE_MAP","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","percent","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","f","format","fnKeystroke","fnFormat","param","AA","JS","backgroundColor","MK","BG","borderColor","BC","Ff","select","appendChoices","idx","Opt","relationship","refBody","Params","birthtime","ctime","statSync","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","byteLength","_fileRegistry","isEqual","fileSpecBody","AFRelationship","EF","UF","description","addNamedEmbeddedFile","AF","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","_addColorOutputIntent","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","initPDFUA","_addPdfuaMetadata","_getPdfuaid","_importSubset","initSubset","PDFA","PDFUA","ROW_FIELDS","COLUMN_FIELDS","memoize","maxSize","cache","Map","has","delete","isObject","deepMerge","target","deepClone","sources","source","normalizedDefaultStyle","defaultStyleInternal","defaultStyle","defaultRowStyle","fromEntries","defaultColStyle","border","normalizeAlignment","normalizedRowStyle","rowStyleInternal","rowStyle","minHeight","maxHeight","normalizedColumnStyle","colStyleInternal","colStyle","_maxWidth","minWidth","maxWidth","normalizeTable","_tableIndex","_position","_defaultStyle","columnStyles","_colStyle","rowStyles","_rowStyle","normalizeText","normalizeCell","cell","rowIndex","colIndex","customFont","rollbackFont","rollbackFontSize","rollbackFontFamily","config","rowSpan","colSpan","textStroke","textStrokeColor","textColor","textOptions","scope","toLowerCase","debug","normalizeRow","row","_cellClaim","Set","ensure","_columnWidths","ensureColumnWidths","reduce","_rowHeights","_rowYPos","_rowBuffer","numCols","starColumnIndexes","starMinAcc","unclaimedWidth","col","starColCount","starSize","tempX","_columnXPos","measure","toRender","measureCell","rowHeight","acc","textBounds","newPage","console","warn","stack","cellWidth","cellHeight","textAllocatedWidth","textAllocatedHeight","textMaxWidth","textMaxHeight","computeBounds","unRotatedTextBounds","textX","textY","allocWidth","allocHeight","FG","denominator","accommodateTable","_tableStruct","ID","PDFDocument","_headerRowLookup","_headerColumnLookup","accommodateCleanup","accessibleRow","renderCell","rowStruct","accessibleCell","callback","cellStruct","Padding","RowSpan","ColSpan","BorderThickness","Scope","Headers","_","flat","Boolean","normalizeColor","BackgroundColor","hasBorder","BorderColor","renderRow","cellRenderer","renderBorder","renderCellText","Ah","Aw","Cw","Ch","Ox","Oy","PxScale","Px","PyScale","Py","PDFTable","freeze","_currRowIndex","lastRow","yPos","initTables","table","PDFMetadata","_metadata","_closeTags","append","xml","newline","getXML","getLength","initMetadata","metadata","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","Metadata","Readable","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","autoFirstPage","addPage","bufferPages","flushPages","bufferedPageRange","count","switchToPage","unshift","EmbeddedFiles","addNamedJavaScript","js","JavaScript","_read","_finalize","_info","entry","xRefOffset","trailer","Root","Encrypt","mixin","methods","prototype","MetadataMixin","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin","MarkingsMixin","AcroFormMixin","AttachmentsMixin","SubsetMixin","TableMixin"],"mappings":"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AAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,E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,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAA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"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js deleted file mode 100644 index a180c24..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js +++ /dev/null @@ -1,7493 +0,0 @@ -import stream from 'stream'; -import fs from 'fs'; -import zlib from 'zlib'; -import CryptoJS from 'crypto-js'; -import fontkit from 'fontkit'; -import { EventEmitter } from 'events'; -import LineBreaker from 'linebreak'; -import exif from 'jpeg-exif'; -import PNG from 'png-js'; - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); -} - -function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); -} - -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); -} - -function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); - return true; - } catch (e) { - return false; - } -} - -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; -} - -function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); -} - -function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), - result; - - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possibleConstructorReturn(this, result); - }; -} - -function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); -} - -function _iterableToArrayLimit(arr, i) { - if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _createForOfIteratorHelper(o, allowArrayLike) { - var it; - - if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - var i = 0; - - var F = function () {}; - - return { - s: F, - n: function () { - if (i >= o.length) return { - done: true - }; - return { - done: false, - value: o[i++] - }; - }, - e: function (e) { - throw e; - }, - f: F - }; - } - - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - var normalCompletion = true, - didErr = false, - err; - return { - s: function () { - it = o[Symbol.iterator](); - }, - n: function () { - var step = it.next(); - normalCompletion = step.done; - return step; - }, - e: function (e) { - didErr = true; - err = e; - }, - f: function () { - try { - if (!normalCompletion && it.return != null) it.return(); - } finally { - if (didErr) throw err; - } - } - }; -} - -/* -PDFAbstractReference - abstract class for PDF reference -*/ -var PDFAbstractReference = /*#__PURE__*/function () { - function PDFAbstractReference() { - _classCallCheck(this, PDFAbstractReference); - } - - _createClass(PDFAbstractReference, [{ - key: "toString", - value: function toString() { - throw new Error('Must be implemented by subclasses'); - } - }]); - - return PDFAbstractReference; -}(); - -var PDFTree = /*#__PURE__*/function () { - function PDFTree() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, PDFTree); - - this._items = {}; // disable /Limits output for this tree - - this.limits = typeof options.limits === 'boolean' ? options.limits : true; - } - - _createClass(PDFTree, [{ - key: "add", - value: function add(key, val) { - return this._items[key] = val; - } - }, { - key: "get", - value: function get(key) { - return this._items[key]; - } - }, { - key: "toString", - value: function toString() { - var _this = this; - - // Needs to be sorted by key - var sortedKeys = Object.keys(this._items).sort(function (a, b) { - return _this._compareKeys(a, b); - }); - var out = ['<<']; - - if (this.limits && sortedKeys.length > 1) { - var first = sortedKeys[0], - last = sortedKeys[sortedKeys.length - 1]; - out.push(" /Limits ".concat(PDFObject.convert([this._dataForKey(first), this._dataForKey(last)]))); - } - - out.push(" /".concat(this._keysName(), " [")); - - var _iterator = _createForOfIteratorHelper(sortedKeys), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var key = _step.value; - out.push(" ".concat(PDFObject.convert(this._dataForKey(key)), " ").concat(PDFObject.convert(this._items[key]))); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - out.push(']'); - out.push('>>'); - return out.join('\n'); - } - }, { - key: "_compareKeys", - value: function _compareKeys() - /*a, b*/ - { - throw new Error('Must be implemented by subclasses'); - } - }, { - key: "_keysName", - value: function _keysName() { - throw new Error('Must be implemented by subclasses'); - } - }, { - key: "_dataForKey", - value: function _dataForKey() - /*k*/ - { - throw new Error('Must be implemented by subclasses'); - } - }]); - - return PDFTree; -}(); - -var pad = function pad(str, length) { - return (Array(length + 1).join('0') + str).slice(-length); -}; - -var escapableRe = /[\n\r\t\b\f()\\]/g; -var escapable = { - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\b': '\\b', - '\f': '\\f', - '\\': '\\\\', - '(': '\\(', - ')': '\\)' -}; // Convert little endian UTF-16 to big endian - -var swapBytes = function swapBytes(buff) { - var l = buff.length; - - if (l & 0x01) { - throw new Error('Buffer length must be even'); - } else { - for (var i = 0, end = l - 1; i < end; i += 2) { - var a = buff[i]; - buff[i] = buff[i + 1]; - buff[i + 1] = a; - } - } - - return buff; -}; - -var PDFObject = /*#__PURE__*/function () { - function PDFObject() { - _classCallCheck(this, PDFObject); - } - - _createClass(PDFObject, null, [{ - key: "convert", - value: function convert(object) { - var encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - // String literals are converted to the PDF name type - if (typeof object === 'string') { - return "/".concat(object); // String objects are converted to PDF strings (UTF-16) - } else if (object instanceof String) { - var string = object; // Detect if this is a unicode string - - var isUnicode = false; - - for (var i = 0, end = string.length; i < end; i++) { - if (string.charCodeAt(i) > 0x7f) { - isUnicode = true; - break; - } - } // If so, encode it as big endian UTF-16 - - - var stringBuffer; - - if (isUnicode) { - stringBuffer = swapBytes(Buffer.from("\uFEFF".concat(string), 'utf16le')); - } else { - stringBuffer = Buffer.from(string.valueOf(), 'ascii'); - } // Encrypt the string when necessary - - - if (encryptFn) { - string = encryptFn(stringBuffer).toString('binary'); - } else { - string = stringBuffer.toString('binary'); - } // Escape characters as required by the spec - - - string = string.replace(escapableRe, function (c) { - return escapable[c]; - }); - return "(".concat(string, ")"); // Buffers are converted to PDF hex strings - } else if (Buffer.isBuffer(object)) { - return "<".concat(object.toString('hex'), ">"); - } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) { - return object.toString(); - } else if (object instanceof Date) { - var _string = "D:".concat(pad(object.getUTCFullYear(), 4)) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; // Encrypt the string when necessary - - - if (encryptFn) { - _string = encryptFn(Buffer.from(_string, 'ascii')).toString('binary'); // Escape characters as required by the spec - - _string = _string.replace(escapableRe, function (c) { - return escapable[c]; - }); - } - - return "(".concat(_string, ")"); - } else if (Array.isArray(object)) { - var items = object.map(function (e) { - return PDFObject.convert(e, encryptFn); - }).join(' '); - return "[".concat(items, "]"); - } else if ({}.toString.call(object) === '[object Object]') { - var out = ['<<']; - - for (var key in object) { - var val = object[key]; - out.push("/".concat(key, " ").concat(PDFObject.convert(val, encryptFn))); - } - - out.push('>>'); - return out.join('\n'); - } else if (typeof object === 'number') { - return PDFObject.number(object); - } else { - return "".concat(object); - } - } - }, { - key: "number", - value: function number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - - throw new Error("unsupported number: ".concat(n)); - } - }]); - - return PDFObject; -}(); - -var PDFReference = /*#__PURE__*/function (_PDFAbstractReference) { - _inherits(PDFReference, _PDFAbstractReference); - - var _super = _createSuper(PDFReference); - - function PDFReference(document, id) { - var _this; - - var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - _classCallCheck(this, PDFReference); - - _this = _super.call(this); - _this.document = document; - _this.id = id; - _this.data = data; - _this.gen = 0; - _this.compress = _this.document.compress && !_this.data.Filter; - _this.uncompressedLength = 0; - _this.buffer = []; - return _this; - } - - _createClass(PDFReference, [{ - key: "write", - value: function write(chunk) { - if (!Buffer.isBuffer(chunk)) { - chunk = Buffer.from(chunk + '\n', 'binary'); - } - - this.uncompressedLength += chunk.length; - - if (this.data.Length == null) { - this.data.Length = 0; - } - - this.buffer.push(chunk); - this.data.Length += chunk.length; - - if (this.compress) { - return this.data.Filter = 'FlateDecode'; - } - } - }, { - key: "end", - value: function end(chunk) { - if (chunk) { - this.write(chunk); - } - - return this.finalize(); - } - }, { - key: "finalize", - value: function finalize() { - this.offset = this.document._offset; - var encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null; - - if (this.buffer.length) { - this.buffer = Buffer.concat(this.buffer); - - if (this.compress) { - this.buffer = zlib.deflateSync(this.buffer); - } - - if (encryptFn) { - this.buffer = encryptFn(this.buffer); - } - - this.data.Length = this.buffer.length; - } - - this.document._write("".concat(this.id, " ").concat(this.gen, " obj")); - - this.document._write(PDFObject.convert(this.data, encryptFn)); - - if (this.buffer.length) { - this.document._write('stream'); - - this.document._write(this.buffer); - - this.buffer = []; // free up memory - - this.document._write('\nendstream'); - } - - this.document._write('endobj'); - - this.document._refEnd(this); - } - }, { - key: "toString", - value: function toString() { - return "".concat(this.id, " ").concat(this.gen, " R"); - } - }]); - - return PDFReference; -}(PDFAbstractReference); - -/* -PDFPage - represents a single page in the PDF document -By Devon Govett -*/ -var DEFAULT_MARGINS = { - top: 72, - left: 72, - bottom: 72, - right: 72 -}; -var SIZES = { - '4A0': [4767.87, 6740.79], - '2A0': [3370.39, 4767.87], - A0: [2383.94, 3370.39], - A1: [1683.78, 2383.94], - A2: [1190.55, 1683.78], - A3: [841.89, 1190.55], - A4: [595.28, 841.89], - A5: [419.53, 595.28], - A6: [297.64, 419.53], - A7: [209.76, 297.64], - A8: [147.4, 209.76], - A9: [104.88, 147.4], - A10: [73.7, 104.88], - B0: [2834.65, 4008.19], - B1: [2004.09, 2834.65], - B2: [1417.32, 2004.09], - B3: [1000.63, 1417.32], - B4: [708.66, 1000.63], - B5: [498.9, 708.66], - B6: [354.33, 498.9], - B7: [249.45, 354.33], - B8: [175.75, 249.45], - B9: [124.72, 175.75], - B10: [87.87, 124.72], - C0: [2599.37, 3676.54], - C1: [1836.85, 2599.37], - C2: [1298.27, 1836.85], - C3: [918.43, 1298.27], - C4: [649.13, 918.43], - C5: [459.21, 649.13], - C6: [323.15, 459.21], - C7: [229.61, 323.15], - C8: [161.57, 229.61], - C9: [113.39, 161.57], - C10: [79.37, 113.39], - RA0: [2437.8, 3458.27], - RA1: [1729.13, 2437.8], - RA2: [1218.9, 1729.13], - RA3: [864.57, 1218.9], - RA4: [609.45, 864.57], - SRA0: [2551.18, 3628.35], - SRA1: [1814.17, 2551.18], - SRA2: [1275.59, 1814.17], - SRA3: [907.09, 1275.59], - SRA4: [637.8, 907.09], - EXECUTIVE: [521.86, 756.0], - FOLIO: [612.0, 936.0], - LEGAL: [612.0, 1008.0], - LETTER: [612.0, 792.0], - TABLOID: [792.0, 1224.0] -}; - -var PDFPage = /*#__PURE__*/function () { - function PDFPage(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, PDFPage); - - this.document = document; - this.size = options.size || 'letter'; - this.layout = options.layout || 'portrait'; // process margins - - if (typeof options.margin === 'number') { - this.margins = { - top: options.margin, - left: options.margin, - bottom: options.margin, - right: options.margin - }; // default to 1 inch margins - } else { - this.margins = options.margins || DEFAULT_MARGINS; - } // calculate page dimensions - - - var dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; - this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; - this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; - this.content = this.document.ref(); // Initialize the Font, XObject, and ExtGState dictionaries - - this.resources = this.document.ref({ - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] - }); // The page dictionary - - this.dictionary = this.document.ref({ - Type: 'Page', - Parent: this.document._root.data.Pages, - MediaBox: [0, 0, this.width, this.height], - Contents: this.content, - Resources: this.resources - }); - this.markings = []; - } // Lazily create these objects - - - _createClass(PDFPage, [{ - key: "maxY", - value: function maxY() { - return this.height - this.margins.bottom; - } - }, { - key: "write", - value: function write(chunk) { - return this.content.write(chunk); - } - }, { - key: "end", - value: function end() { - this.dictionary.end(); - this.resources.end(); - return this.content.end(); - } - }, { - key: "fonts", - get: function get() { - var data = this.resources.data; - return data.Font != null ? data.Font : data.Font = {}; - } - }, { - key: "xobjects", - get: function get() { - var data = this.resources.data; - return data.XObject != null ? data.XObject : data.XObject = {}; - } - }, { - key: "ext_gstates", - get: function get() { - var data = this.resources.data; - return data.ExtGState != null ? data.ExtGState : data.ExtGState = {}; - } - }, { - key: "patterns", - get: function get() { - var data = this.resources.data; - return data.Pattern != null ? data.Pattern : data.Pattern = {}; - } - }, { - key: "colorSpaces", - get: function get() { - var data = this.resources.data; - return data.ColorSpace || (data.ColorSpace = {}); - } - }, { - key: "annotations", - get: function get() { - var data = this.dictionary.data; - return data.Annots != null ? data.Annots : data.Annots = []; - } - }, { - key: "structParentTreeKey", - get: function get() { - var data = this.dictionary.data; - return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey(); - } - }]); - - return PDFPage; -}(); - -var PDFNameTree = /*#__PURE__*/function (_PDFTree) { - _inherits(PDFNameTree, _PDFTree); - - var _super = _createSuper(PDFNameTree); - - function PDFNameTree() { - _classCallCheck(this, PDFNameTree); - - return _super.apply(this, arguments); - } - - _createClass(PDFNameTree, [{ - key: "_compareKeys", - value: function _compareKeys(a, b) { - return a.localeCompare(b); - } - }, { - key: "_keysName", - value: function _keysName() { - return "Names"; - } - }, { - key: "_dataForKey", - value: function _dataForKey(k) { - return new String(k); - } - }]); - - return PDFNameTree; -}(PDFTree); - -/** - * Check if value is in a range group. - * @param {number} value - * @param {number[]} rangeGroup - * @returns {boolean} - */ -function inRange(value, rangeGroup) { - if (value < rangeGroup[0]) return false; - var startRange = 0; - var endRange = rangeGroup.length / 2; - - while (startRange <= endRange) { - var middleRange = Math.floor((startRange + endRange) / 2); // actual array index - - var arrayIndex = middleRange * 2; // Check if value is in range pointed by actual index - - if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) { - return true; - } - - if (value > rangeGroup[arrayIndex + 1]) { - // Search Right Side Of Array - startRange = middleRange + 1; - } else { - // Search Left Side Of Array - endRange = middleRange - 1; - } - } - - return false; -} - -/** - * A.1 Unassigned code points in Unicode 3.2 - * @link https://tools.ietf.org/html/rfc3454#appendix-A.1 - */ - -var unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; // prettier-ignore-end - -var isUnassignedCodePoint = function isUnassignedCodePoint(character) { - return inRange(character, unassigned_code_points); -}; // prettier-ignore-start - -/** - * B.1 Commonly mapped to nothing - * @link https://tools.ietf.org/html/rfc3454#appendix-B.1 - */ - - -var commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; // prettier-ignore-end - -var isCommonlyMappedToNothing = function isCommonlyMappedToNothing(character) { - return inRange(character, commonly_mapped_to_nothing); -}; // prettier-ignore-start - -/** - * C.1.2 Non-ASCII space characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2 - */ - - -var non_ASCII_space_characters = [0x00a0, 0x00a0 -/* NO-BREAK SPACE */ -, 0x1680, 0x1680 -/* OGHAM SPACE MARK */ -, 0x2000, 0x2000 -/* EN QUAD */ -, 0x2001, 0x2001 -/* EM QUAD */ -, 0x2002, 0x2002 -/* EN SPACE */ -, 0x2003, 0x2003 -/* EM SPACE */ -, 0x2004, 0x2004 -/* THREE-PER-EM SPACE */ -, 0x2005, 0x2005 -/* FOUR-PER-EM SPACE */ -, 0x2006, 0x2006 -/* SIX-PER-EM SPACE */ -, 0x2007, 0x2007 -/* FIGURE SPACE */ -, 0x2008, 0x2008 -/* PUNCTUATION SPACE */ -, 0x2009, 0x2009 -/* THIN SPACE */ -, 0x200a, 0x200a -/* HAIR SPACE */ -, 0x200b, 0x200b -/* ZERO WIDTH SPACE */ -, 0x202f, 0x202f -/* NARROW NO-BREAK SPACE */ -, 0x205f, 0x205f -/* MEDIUM MATHEMATICAL SPACE */ -, 0x3000, 0x3000 -/* IDEOGRAPHIC SPACE */ -]; // prettier-ignore-end - -var isNonASCIISpaceCharacter = function isNonASCIISpaceCharacter(character) { - return inRange(character, non_ASCII_space_characters); -}; // prettier-ignore-start - - -var non_ASCII_controls_characters = [ -/** - * C.2.2 Non-ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2 - */ -0x0080, 0x009f -/* [CONTROL CHARACTERS] */ -, 0x06dd, 0x06dd -/* ARABIC END OF AYAH */ -, 0x070f, 0x070f -/* SYRIAC ABBREVIATION MARK */ -, 0x180e, 0x180e -/* MONGOLIAN VOWEL SEPARATOR */ -, 0x200c, 0x200c -/* ZERO WIDTH NON-JOINER */ -, 0x200d, 0x200d -/* ZERO WIDTH JOINER */ -, 0x2028, 0x2028 -/* LINE SEPARATOR */ -, 0x2029, 0x2029 -/* PARAGRAPH SEPARATOR */ -, 0x2060, 0x2060 -/* WORD JOINER */ -, 0x2061, 0x2061 -/* FUNCTION APPLICATION */ -, 0x2062, 0x2062 -/* INVISIBLE TIMES */ -, 0x2063, 0x2063 -/* INVISIBLE SEPARATOR */ -, 0x206a, 0x206f -/* [CONTROL CHARACTERS] */ -, 0xfeff, 0xfeff -/* ZERO WIDTH NO-BREAK SPACE */ -, 0xfff9, 0xfffc -/* [CONTROL CHARACTERS] */ -, 0x1d173, 0x1d17a -/* [MUSICAL CONTROL CHARACTERS] */ -]; -var non_character_codepoints = [ -/** - * C.4 Non-character code points - * @link https://tools.ietf.org/html/rfc3454#appendix-C.4 - */ -0xfdd0, 0xfdef -/* [NONCHARACTER CODE POINTS] */ -, 0xfffe, 0xffff -/* [NONCHARACTER CODE POINTS] */ -, 0x1fffe, 0x1ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x2fffe, 0x2ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x3fffe, 0x3ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x4fffe, 0x4ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x5fffe, 0x5ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x6fffe, 0x6ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x7fffe, 0x7ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x8fffe, 0x8ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x9fffe, 0x9ffff -/* [NONCHARACTER CODE POINTS] */ -, 0xafffe, 0xaffff -/* [NONCHARACTER CODE POINTS] */ -, 0xbfffe, 0xbffff -/* [NONCHARACTER CODE POINTS] */ -, 0xcfffe, 0xcffff -/* [NONCHARACTER CODE POINTS] */ -, 0xdfffe, 0xdffff -/* [NONCHARACTER CODE POINTS] */ -, 0xefffe, 0xeffff -/* [NONCHARACTER CODE POINTS] */ -, 0x10fffe, 0x10ffff -/* [NONCHARACTER CODE POINTS] */ -]; -/** - * 2.3. Prohibited Output - */ - -var prohibited_characters = [ -/** - * C.2.1 ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1 - */ -0, 0x001f -/* [CONTROL CHARACTERS] */ -, 0x007f, 0x007f -/* DELETE */ -, -/** - * C.8 Change display properties or are deprecated - * @link https://tools.ietf.org/html/rfc3454#appendix-C.8 - */ -0x0340, 0x0340 -/* COMBINING GRAVE TONE MARK */ -, 0x0341, 0x0341 -/* COMBINING ACUTE TONE MARK */ -, 0x200e, 0x200e -/* LEFT-TO-RIGHT MARK */ -, 0x200f, 0x200f -/* RIGHT-TO-LEFT MARK */ -, 0x202a, 0x202a -/* LEFT-TO-RIGHT EMBEDDING */ -, 0x202b, 0x202b -/* RIGHT-TO-LEFT EMBEDDING */ -, 0x202c, 0x202c -/* POP DIRECTIONAL FORMATTING */ -, 0x202d, 0x202d -/* LEFT-TO-RIGHT OVERRIDE */ -, 0x202e, 0x202e -/* RIGHT-TO-LEFT OVERRIDE */ -, 0x206a, 0x206a -/* INHIBIT SYMMETRIC SWAPPING */ -, 0x206b, 0x206b -/* ACTIVATE SYMMETRIC SWAPPING */ -, 0x206c, 0x206c -/* INHIBIT ARABIC FORM SHAPING */ -, 0x206d, 0x206d -/* ACTIVATE ARABIC FORM SHAPING */ -, 0x206e, 0x206e -/* NATIONAL DIGIT SHAPES */ -, 0x206f, 0x206f -/* NOMINAL DIGIT SHAPES */ -, -/** - * C.7 Inappropriate for canonical representation - * @link https://tools.ietf.org/html/rfc3454#appendix-C.7 - */ -0x2ff0, 0x2ffb -/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */ -, -/** - * C.5 Surrogate codes - * @link https://tools.ietf.org/html/rfc3454#appendix-C.5 - */ -0xd800, 0xdfff, -/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 - */ -0xe000, 0xf8ff -/* [PRIVATE USE, PLANE 0] */ -, -/** - * C.6 Inappropriate for plain text - * @link https://tools.ietf.org/html/rfc3454#appendix-C.6 - */ -0xfff9, 0xfff9 -/* INTERLINEAR ANNOTATION ANCHOR */ -, 0xfffa, 0xfffa -/* INTERLINEAR ANNOTATION SEPARATOR */ -, 0xfffb, 0xfffb -/* INTERLINEAR ANNOTATION TERMINATOR */ -, 0xfffc, 0xfffc -/* OBJECT REPLACEMENT CHARACTER */ -, 0xfffd, 0xfffd -/* REPLACEMENT CHARACTER */ -, -/** - * C.9 Tagging characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.9 - */ -0xe0001, 0xe0001 -/* LANGUAGE TAG */ -, 0xe0020, 0xe007f -/* [TAGGING CHARACTERS] */ -, -/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 - */ -0xf0000, 0xffffd -/* [PRIVATE USE, PLANE 15] */ -, 0x100000, 0x10fffd -/* [PRIVATE USE, PLANE 16] */ -]; // prettier-ignore-end - -var isProhibitedCharacter = function isProhibitedCharacter(character) { - return inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints); -}; // prettier-ignore-start - -/** - * D.1 Characters with bidirectional property "R" or "AL" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.1 - */ - - -var bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; // prettier-ignore-end - -var isBidirectionalRAL = function isBidirectionalRAL(character) { - return inRange(character, bidirectional_r_al); -}; // prettier-ignore-start - -/** - * D.2 Characters with bidirectional property "L" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.2 - */ - - -var bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; // prettier-ignore-end - -var isBidirectionalL = function isBidirectionalL(character) { - return inRange(character, bidirectional_l); -}; - -/** - * non-ASCII space characters [StringPrep, C.1.2] that can be - * mapped to SPACE (U+0020) - */ - -var mapping2space = isNonASCIISpaceCharacter; -/** - * the "commonly mapped to nothing" characters [StringPrep, B.1] - * that can be mapped to nothing. - */ - -var mapping2nothing = isCommonlyMappedToNothing; // utils - -var getCodePoint = function getCodePoint(character) { - return character.codePointAt(0); -}; - -var first = function first(x) { - return x[0]; -}; - -var last = function last(x) { - return x[x.length - 1]; -}; -/** - * Convert provided string into an array of Unicode Code Points. - * Based on https://stackoverflow.com/a/21409165/1556249 - * and https://www.npmjs.com/package/code-point-at. - * @param {string} input - * @returns {number[]} - */ - - -function toCodePoints(input) { - var codepoints = []; - var size = input.length; - - for (var i = 0; i < size; i += 1) { - var before = input.charCodeAt(i); - - if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { - var next = input.charCodeAt(i + 1); - - if (next >= 0xdc00 && next <= 0xdfff) { - codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); - i += 1; - continue; - } - } - - codepoints.push(before); - } - - return codepoints; -} -/** - * SASLprep. - * @param {string} input - * @param {Object} opts - * @param {boolean} opts.allowUnassigned - * @returns {string} - */ - - -function saslprep(input) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (typeof input !== 'string') { - throw new TypeError('Expected string.'); - } - - if (input.length === 0) { - return ''; - } // 1. Map - - - var mapped_input = toCodePoints(input) // 1.1 mapping to space - .map(function (character) { - return mapping2space(character) ? 0x20 : character; - }) // 1.2 mapping to nothing - .filter(function (character) { - return !mapping2nothing(character); - }); // 2. Normalize - - var normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC'); - var normalized_map = toCodePoints(normalized_input); // 3. Prohibit - - var hasProhibited = normalized_map.some(isProhibitedCharacter); - - if (hasProhibited) { - throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); - } // Unassigned Code Points - - - if (opts.allowUnassigned !== true) { - var hasUnassigned = normalized_map.some(isUnassignedCodePoint); - - if (hasUnassigned) { - throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); - } - } // 4. check bidi - - - var hasBidiRAL = normalized_map.some(isBidirectionalRAL); - var hasBidiL = normalized_map.some(isBidirectionalL); // 4.1 If a string contains any RandALCat character, the string MUST NOT - // contain any LCat character. - - if (hasBidiRAL && hasBidiL) { - throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6'); - } - /** - * 4.2 If a string contains any RandALCat character, a RandALCat - * character MUST be the first character of the string, and a - * RandALCat character MUST be the last character of the string. - */ - - - var isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input))); - var isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input))); - - if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { - throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); - } - - return normalized_input; -} - -var PDFSecurity = /*#__PURE__*/function () { - _createClass(PDFSecurity, null, [{ - key: "generateFileID", - value: function generateFileID() { - var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var infoStr = "".concat(info.CreationDate.getTime(), "\n"); - - for (var key in info) { - // eslint-disable-next-line no-prototype-builtins - if (!info.hasOwnProperty(key)) { - continue; - } - - infoStr += "".concat(key, ": ").concat(info[key].valueOf(), "\n"); - } - - return wordArrayToBuffer(CryptoJS.MD5(infoStr)); - } - }, { - key: "generateRandomWordArray", - value: function generateRandomWordArray(bytes) { - return CryptoJS.lib.WordArray.random(bytes); - } - }, { - key: "create", - value: function create(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!options.ownerPassword && !options.userPassword) { - return null; - } - - return new PDFSecurity(document, options); - } - }]); - - function PDFSecurity(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck(this, PDFSecurity); - - if (!options.ownerPassword && !options.userPassword) { - throw new Error('None of owner password and user password is defined.'); - } - - this.document = document; - - this._setupEncryption(options); - } - - _createClass(PDFSecurity, [{ - key: "_setupEncryption", - value: function _setupEncryption(options) { - switch (options.pdfVersion) { - case '1.4': - case '1.5': - this.version = 2; - break; - - case '1.6': - case '1.7': - this.version = 4; - break; - - case '1.7ext3': - this.version = 5; - break; - - default: - this.version = 1; - break; - } - - var encDict = { - Filter: 'Standard' - }; - - switch (this.version) { - case 1: - case 2: - case 4: - this._setupEncryptionV1V2V4(this.version, encDict, options); - - break; - - case 5: - this._setupEncryptionV5(encDict, options); - - break; - } - - this.dictionary = this.document.ref(encDict); - } - }, { - key: "_setupEncryptionV1V2V4", - value: function _setupEncryptionV1V2V4(v, encDict, options) { - var r, permissions; - - switch (v) { - case 1: - r = 2; - this.keyBits = 40; - permissions = getPermissionsR2(options.permissions); - break; - - case 2: - r = 3; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - - case 4: - r = 4; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - } - - var paddedUserPassword = processPasswordR2R3R4(options.userPassword); - var paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword; - var ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword); - this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions); - var userPasswordEntry; - - if (r === 2) { - userPasswordEntry = getUserPasswordR2(this.encryptionKey); - } else { - userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey); - } - - encDict.V = v; - - if (v >= 2) { - encDict.Length = this.keyBits; - } - - if (v === 4) { - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV2', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - } - - encDict.R = r; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.P = permissions; - } - }, { - key: "_setupEncryptionV5", - value: function _setupEncryptionV5(encDict, options) { - this.keyBits = 256; - var permissions = getPermissionsR3(options.permissions); - var processedUserPassword = processPasswordR5(options.userPassword); - var processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword; - this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray); - var userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray); - var userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8); - var userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey); - var ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray); - var ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8); - var ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey); - var permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray); - encDict.V = 5; - encDict.Length = this.keyBits; - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV3', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - encDict.R = 5; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry); - encDict.P = permissions; - encDict.Perms = wordArrayToBuffer(permsEntry); - } - }, { - key: "getEncryptFn", - value: function getEncryptFn(obj, gen) { - var digest; - - if (this.version < 5) { - digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5)); - } - - if (this.version === 1 || this.version === 2) { - var _key = CryptoJS.MD5(digest); - - _key.sigBytes = Math.min(16, this.keyBits / 8 + 5); - return function (buffer) { - return wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), _key).ciphertext); - }; - } - - var key; - - if (this.version === 4) { - key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))); - } else { - key = this.encryptionKey; - } - - var iv = PDFSecurity.generateRandomWordArray(16); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - iv: iv - }; - return function (buffer) { - return wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext)); - }; - } - }, { - key: "end", - value: function end() { - this.dictionary.end(); - } - }]); - - return PDFSecurity; -}(); - -function getPermissionsR2() { - var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var permissions = 0xffffffc0 >> 0; - - if (permissionObject.printing) { - permissions |= 4; - } - - if (permissionObject.modifying) { - permissions |= 8; - } - - if (permissionObject.copying) { - permissions |= 16; - } - - if (permissionObject.annotating) { - permissions |= 32; - } - - return permissions; -} - -function getPermissionsR3() { - var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var permissions = 0xfffff0c0 >> 0; - - if (permissionObject.printing === 'lowResolution') { - permissions |= 4; - } - - if (permissionObject.printing === 'highResolution') { - permissions |= 2052; - } - - if (permissionObject.modifying) { - permissions |= 8; - } - - if (permissionObject.copying) { - permissions |= 16; - } - - if (permissionObject.annotating) { - permissions |= 32; - } - - if (permissionObject.fillingForms) { - permissions |= 256; - } - - if (permissionObject.contentAccessibility) { - permissions |= 512; - } - - if (permissionObject.documentAssembly) { - permissions |= 1024; - } - - return permissions; -} - -function getUserPasswordR2(encryptionKey) { - return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext; -} - -function getUserPasswordR3R4(documentId, encryptionKey) { - var key = encryptionKey.clone(); - var cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))); - - for (var i = 0; i < 20; i++) { - var xorRound = Math.ceil(key.sigBytes / 4); - - for (var j = 0; j < xorRound; j++) { - key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - - return cipher.concat(CryptoJS.lib.WordArray.create(null, 16)); -} - -function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) { - var digest = paddedOwnerPassword; - var round = r >= 3 ? 51 : 1; - - for (var i = 0; i < round; i++) { - digest = CryptoJS.MD5(digest); - } - - var key = digest.clone(); - key.sigBytes = keyBits / 8; - var cipher = paddedUserPassword; - round = r >= 3 ? 20 : 1; - - for (var _i = 0; _i < round; _i++) { - var xorRound = Math.ceil(key.sigBytes / 4); - - for (var j = 0; j < xorRound; j++) { - key.words[j] = digest.words[j] ^ (_i | _i << 8 | _i << 16 | _i << 24); - } - - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - - return cipher; -} - -function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) { - var key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId)); - var round = r >= 3 ? 51 : 1; - - for (var i = 0; i < round; i++) { - key = CryptoJS.MD5(key); - key.sigBytes = keyBits / 8; - } - - return key; -} - -function getUserPasswordR5(processedUserPassword, generateRandomWordArray) { - var validationSalt = generateRandomWordArray(8); - var keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt); -} - -function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) { - var key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt)); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} - -function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) { - var validationSalt = generateRandomWordArray(8); - var keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt); -} - -function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) { - var key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry)); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} - -function getEncryptionKeyR5(generateRandomWordArray) { - return generateRandomWordArray(32); -} - -function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) { - var cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4)); - var options = { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding - }; - return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext; -} - -function processPasswordR2R3R4() { - var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var out = Buffer.alloc(32); - var length = password.length; - var index = 0; - - while (index < length && index < 32) { - var code = password.charCodeAt(index); - - if (code > 0xff) { - throw new Error('Password contains one or more invalid characters.'); - } - - out[index] = code; - index++; - } - - while (index < 32) { - out[index] = PASSWORD_PADDING[index - length]; - index++; - } - - return CryptoJS.lib.WordArray.create(out); -} - -function processPasswordR5() { - var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - password = unescape(encodeURIComponent(saslprep(password))); - var length = Math.min(127, password.length); - var out = Buffer.alloc(length); - - for (var i = 0; i < length; i++) { - out[i] = password.charCodeAt(i); - } - - return CryptoJS.lib.WordArray.create(out); -} - -function lsbFirstWord(data) { - return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff; -} - -function wordArrayToBuffer(wordArray) { - var byteArray = []; - - for (var i = 0; i < wordArray.sigBytes; i++) { - byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff); - } - - return Buffer.from(byteArray); -} - -var PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]; - -var number = PDFObject.number; - -var PDFGradient = /*#__PURE__*/function () { - function PDFGradient(doc) { - _classCallCheck(this, PDFGradient); - - this.doc = doc; - this.stops = []; - this.embedded = false; - this.transform = [1, 0, 0, 1, 0, 0]; - } - - _createClass(PDFGradient, [{ - key: "stop", - value: function stop(pos, color, opacity) { - if (opacity == null) { - opacity = 1; - } - - color = this.doc._normalizeColor(color); - - if (this.stops.length === 0) { - if (color.length === 3) { - this._colorSpace = 'DeviceRGB'; - } else if (color.length === 4) { - this._colorSpace = 'DeviceCMYK'; - } else if (color.length === 1) { - this._colorSpace = 'DeviceGray'; - } else { - throw new Error('Unknown color space'); - } - } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) { - throw new Error('All gradient stops must use the same color space'); - } - - opacity = Math.max(0, Math.min(1, opacity)); - this.stops.push([pos, color, opacity]); - return this; - } - }, { - key: "setTransform", - value: function setTransform(m11, m12, m21, m22, dx, dy) { - this.transform = [m11, m12, m21, m22, dx, dy]; - return this; - } - }, { - key: "embed", - value: function embed(m) { - var fn; - var stopsLength = this.stops.length; - - if (stopsLength === 0) { - return; - } - - this.embedded = true; - this.matrix = m; // if the last stop comes before 100%, add a copy at 100% - - var last = this.stops[stopsLength - 1]; - - if (last[0] < 1) { - this.stops.push([1, last[1], last[2]]); - } - - var bounds = []; - var encode = []; - var stops = []; - - for (var i = 0; i < stopsLength - 1; i++) { - encode.push(0, 1); - - if (i + 2 !== stopsLength) { - bounds.push(this.stops[i + 1][0]); - } - - fn = this.doc.ref({ - FunctionType: 2, - Domain: [0, 1], - C0: this.stops[i + 0][1], - C1: this.stops[i + 1][1], - N: 1 - }); - stops.push(fn); - fn.end(); - } // if there are only two stops, we don't need a stitching function - - - if (stopsLength === 1) { - fn = stops[0]; - } else { - fn = this.doc.ref({ - FunctionType: 3, - // stitching function - Domain: [0, 1], - Functions: stops, - Bounds: bounds, - Encode: encode - }); - fn.end(); - } - - this.id = "Sh".concat(++this.doc._gradCount); - var shader = this.shader(fn); - shader.end(); - var pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 2, - Shading: shader, - Matrix: this.matrix.map(number) - }); - pattern.end(); - - if (this.stops.some(function (stop) { - return stop[2] < 1; - })) { - var grad = this.opacityGradient(); - grad._colorSpace = 'DeviceGray'; - - var _iterator = _createForOfIteratorHelper(this.stops), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var stop = _step.value; - grad.stop(stop[0], [stop[2]]); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - grad = grad.embed(this.matrix); - var pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; - var form = this.doc.ref({ - Type: 'XObject', - Subtype: 'Form', - FormType: 1, - BBox: pageBBox, - Group: { - Type: 'Group', - S: 'Transparency', - CS: 'DeviceGray' - }, - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: grad - } - } - }); - form.write('/Pattern cs /Sh1 scn'); - form.end("".concat(pageBBox.join(' '), " re f")); - var gstate = this.doc.ref({ - Type: 'ExtGState', - SMask: { - Type: 'Mask', - S: 'Luminosity', - G: form - } - }); - gstate.end(); - var opacityPattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 1, - TilingType: 2, - BBox: pageBBox, - XStep: pageBBox[2], - YStep: pageBBox[3], - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: pattern - }, - ExtGState: { - Gs1: gstate - } - } - }); - opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn'); - opacityPattern.end("".concat(pageBBox.join(' '), " re f")); - this.doc.page.patterns[this.id] = opacityPattern; - } else { - this.doc.page.patterns[this.id] = pattern; - } - - return pattern; - } - }, { - key: "apply", - value: function apply(stroke) { - // apply gradient transform to existing document ctm - var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6), - m0 = _this$doc$_ctm[0], - m1 = _this$doc$_ctm[1], - m2 = _this$doc$_ctm[2], - m3 = _this$doc$_ctm[3], - m4 = _this$doc$_ctm[4], - m5 = _this$doc$_ctm[5]; - - var _this$transform = _slicedToArray(this.transform, 6), - m11 = _this$transform[0], - m12 = _this$transform[1], - m21 = _this$transform[2], - m22 = _this$transform[3], - dx = _this$transform[4], - dy = _this$transform[5]; - - var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - - if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) { - this.embed(m); - } - - this.doc._setColorSpace('Pattern', stroke); - - var op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent("/".concat(this.id, " ").concat(op)); - } - }]); - - return PDFGradient; -}(); - -var PDFLinearGradient = /*#__PURE__*/function (_PDFGradient) { - _inherits(PDFLinearGradient, _PDFGradient); - - var _super = _createSuper(PDFLinearGradient); - - function PDFLinearGradient(doc, x1, y1, x2, y2) { - var _this; - - _classCallCheck(this, PDFLinearGradient); - - _this = _super.call(this, doc); - _this.x1 = x1; - _this.y1 = y1; - _this.x2 = x2; - _this.y2 = y2; - return _this; - } - - _createClass(PDFLinearGradient, [{ - key: "shader", - value: function shader(fn) { - return this.doc.ref({ - ShadingType: 2, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.x2, this.y2], - Function: fn, - Extend: [true, true] - }); - } - }, { - key: "opacityGradient", - value: function opacityGradient() { - return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2); - } - }]); - - return PDFLinearGradient; -}(PDFGradient); - -var PDFRadialGradient = /*#__PURE__*/function (_PDFGradient2) { - _inherits(PDFRadialGradient, _PDFGradient2); - - var _super2 = _createSuper(PDFRadialGradient); - - function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) { - var _this2; - - _classCallCheck(this, PDFRadialGradient); - - _this2 = _super2.call(this, doc); - _this2.doc = doc; - _this2.x1 = x1; - _this2.y1 = y1; - _this2.r1 = r1; - _this2.x2 = x2; - _this2.y2 = y2; - _this2.r2 = r2; - return _this2; - } - - _createClass(PDFRadialGradient, [{ - key: "shader", - value: function shader(fn) { - return this.doc.ref({ - ShadingType: 3, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], - Function: fn, - Extend: [true, true] - }); - } - }, { - key: "opacityGradient", - value: function opacityGradient() { - return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); - } - }]); - - return PDFRadialGradient; -}(PDFGradient); - -var Gradient = { - PDFGradient: PDFGradient, - PDFLinearGradient: PDFLinearGradient, - PDFRadialGradient: PDFRadialGradient -}; - -/* -PDF tiling pattern support. Uncolored only. - */ -var underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB']; - -var PDFTilingPattern = /*#__PURE__*/function () { - function PDFTilingPattern(doc, bBox, xStep, yStep, stream) { - _classCallCheck(this, PDFTilingPattern); - - this.doc = doc; - this.bBox = bBox; - this.xStep = xStep; - this.yStep = yStep; - this.stream = stream; - } - - _createClass(PDFTilingPattern, [{ - key: "createPattern", - value: function createPattern() { - // no resources needed for our current usage - // required entry - var resources = this.doc.ref(); - resources.end(); // apply default transform matrix (flipped in the default doc._ctm) - // see document.js & gradient.js - - var _this$doc$_ctm = _slicedToArray(this.doc._ctm, 6), - m0 = _this$doc$_ctm[0], - m1 = _this$doc$_ctm[1], - m2 = _this$doc$_ctm[2], - m3 = _this$doc$_ctm[3], - m4 = _this$doc$_ctm[4], - m5 = _this$doc$_ctm[5]; - - var m11 = 1, - m12 = 0, - m21 = 0, - m22 = 1, - dx = 0, - dy = 0; - var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - var pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - // tiling - PaintType: 2, - // 1-colored, 2-uncolored - TilingType: 2, - // 2-no distortion - BBox: this.bBox, - XStep: this.xStep, - YStep: this.yStep, - Matrix: m.map(function (v) { - return +v.toFixed(5); - }), - Resources: resources - }); - pattern.end(this.stream); - return pattern; - } - }, { - key: "embedPatternColorSpaces", - value: function embedPatternColorSpaces() { - var _this = this; - - // map each pattern to an underlying color space - // and embed on each page - underlyingColorSpaces.forEach(function (csName) { - var csId = _this.getPatternColorSpaceId(csName); - - if (_this.doc.page.colorSpaces[csId]) return; - - var cs = _this.doc.ref(['Pattern', csName]); - - cs.end(); - _this.doc.page.colorSpaces[csId] = cs; - }); - } - }, { - key: "getPatternColorSpaceId", - value: function getPatternColorSpaceId(underlyingColorspace) { - return "CsP".concat(underlyingColorspace); - } - }, { - key: "embed", - value: function embed() { - if (!this.id) { - this.doc._patternCount = this.doc._patternCount + 1; - this.id = 'P' + this.doc._patternCount; - this.pattern = this.createPattern(); - } // patterns are embedded in each page - - - if (!this.doc.page.patterns[this.id]) { - this.doc.page.patterns[this.id] = this.pattern; - } - } - }, { - key: "apply", - value: function apply(stroke, patternColor) { - // do any embedding/creating that might be needed - this.embedPatternColorSpaces(); - this.embed(); - - var normalizedColor = this.doc._normalizeColor(patternColor); - - if (!normalizedColor) throw Error("invalid pattern color. (value: ".concat(patternColor, ")")); // select one of the pattern color spaces - - var csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor)); - - this.doc._setColorSpace(csId, stroke); // stroke/fill using the pattern and color (in the above underlying color space) - - - var op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent("".concat(normalizedColor.join(' '), " /").concat(this.id, " ").concat(op)); - } - }]); - - return PDFTilingPattern; -}(); - -var pattern = { - PDFTilingPattern: PDFTilingPattern -}; - -var PDFGradient$1 = Gradient.PDFGradient, - PDFLinearGradient$1 = Gradient.PDFLinearGradient, - PDFRadialGradient$1 = Gradient.PDFRadialGradient; -var PDFTilingPattern$1 = pattern.PDFTilingPattern; -var ColorMixin = { - initColor: function initColor() { - // The opacity dictionaries - this._opacityRegistry = {}; - this._opacityCount = 0; - this._patternCount = 0; - return this._gradCount = 0; - }, - _normalizeColor: function _normalizeColor(color) { - if (typeof color === 'string') { - if (color.charAt(0) === '#') { - if (color.length === 4) { - color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3'); - } - - var hex = parseInt(color.slice(1), 16); - color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; - } else if (namedColors[color]) { - color = namedColors[color]; - } - } - - if (Array.isArray(color)) { - // RGB - if (color.length === 3) { - color = color.map(function (part) { - return part / 255; - }); // CMYK - } else if (color.length === 4) { - color = color.map(function (part) { - return part / 100; - }); - } - - return color; - } - - return null; - }, - _setColor: function _setColor(color, stroke) { - if (color instanceof PDFGradient$1) { - color.apply(stroke); - return true; // see if tiling pattern, decode & apply it it - } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) { - color[0].apply(stroke, color[1]); - return true; - } // any other case should be a normal color and not a pattern - - - return this._setColorCore(color, stroke); - }, - _setColorCore: function _setColorCore(color, stroke) { - color = this._normalizeColor(color); - - if (!color) { - return false; - } - - var op = stroke ? 'SCN' : 'scn'; - - var space = this._getColorSpace(color); - - this._setColorSpace(space, stroke); - - color = color.join(' '); - this.addContent("".concat(color, " ").concat(op)); - return true; - }, - _setColorSpace: function _setColorSpace(space, stroke) { - var op = stroke ? 'CS' : 'cs'; - return this.addContent("/".concat(space, " ").concat(op)); - }, - _getColorSpace: function _getColorSpace(color) { - return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; - }, - fillColor: function fillColor(color, opacity) { - var set = this._setColor(color, false); - - if (set) { - this.fillOpacity(opacity); - } // save this for text wrapper, which needs to reset - // the fill color on new pages - - - this._fillColor = [color, opacity]; - return this; - }, - strokeColor: function strokeColor(color, opacity) { - var set = this._setColor(color, true); - - if (set) { - this.strokeOpacity(opacity); - } - - return this; - }, - opacity: function opacity(_opacity) { - this._doOpacity(_opacity, _opacity); - - return this; - }, - fillOpacity: function fillOpacity(opacity) { - this._doOpacity(opacity, null); - - return this; - }, - strokeOpacity: function strokeOpacity(opacity) { - this._doOpacity(null, opacity); - - return this; - }, - _doOpacity: function _doOpacity(fillOpacity, strokeOpacity) { - var dictionary, name; - - if (fillOpacity == null && strokeOpacity == null) { - return; - } - - if (fillOpacity != null) { - fillOpacity = Math.max(0, Math.min(1, fillOpacity)); - } - - if (strokeOpacity != null) { - strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); - } - - var key = "".concat(fillOpacity, "_").concat(strokeOpacity); - - if (this._opacityRegistry[key]) { - var _this$_opacityRegistr = _slicedToArray(this._opacityRegistry[key], 2); - - dictionary = _this$_opacityRegistr[0]; - name = _this$_opacityRegistr[1]; - } else { - dictionary = { - Type: 'ExtGState' - }; - - if (fillOpacity != null) { - dictionary.ca = fillOpacity; - } - - if (strokeOpacity != null) { - dictionary.CA = strokeOpacity; - } - - dictionary = this.ref(dictionary); - dictionary.end(); - var id = ++this._opacityCount; - name = "Gs".concat(id); - this._opacityRegistry[key] = [dictionary, name]; - } - - this.page.ext_gstates[name] = dictionary; - return this.addContent("/".concat(name, " gs")); - }, - linearGradient: function linearGradient(x1, y1, x2, y2) { - return new PDFLinearGradient$1(this, x1, y1, x2, y2); - }, - radialGradient: function radialGradient(x1, y1, r1, x2, y2, r2) { - return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2); - }, - pattern: function pattern(bbox, xStep, yStep, stream) { - return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream); - } -}; -var namedColors = { - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -var cx, cy, px, py, sx, sy; -cx = cy = px = py = sx = sy = 0; -var parameters = { - A: 7, - a: 7, - C: 6, - c: 6, - H: 1, - h: 1, - L: 2, - l: 2, - M: 2, - m: 2, - Q: 4, - q: 4, - S: 4, - s: 4, - T: 2, - t: 2, - V: 1, - v: 1, - Z: 0, - z: 0 -}; - -var parse = function parse(path) { - var cmd; - var ret = []; - var args = []; - var curArg = ''; - var foundDecimal = false; - var params = 0; - - var _iterator = _createForOfIteratorHelper(path), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var c = _step.value; - - if (parameters[c] != null) { - params = parameters[c]; - - if (cmd) { - // save existing command - if (curArg.length > 0) { - args[args.length] = +curArg; - } - - ret[ret.length] = { - cmd: cmd, - args: args - }; - args = []; - curArg = ''; - foundDecimal = false; - } - - cmd = c; - } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) { - if (curArg.length === 0) { - continue; - } - - if (args.length === params) { - // handle reused commands - ret[ret.length] = { - cmd: cmd, - args: args - }; - args = [+curArg]; // handle assumed commands - - if (cmd === 'M') { - cmd = 'L'; - } - - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - - foundDecimal = c === '.'; // fix for negative numbers or repeated decimals with no delimeter between commands - - curArg = ['-', '.'].includes(c) ? c : ''; - } else { - curArg += c; - - if (c === '.') { - foundDecimal = true; - } - } - } // add the last command - - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - if (curArg.length > 0) { - if (args.length === params) { - // handle reused commands - ret[ret.length] = { - cmd: cmd, - args: args - }; - args = [+curArg]; // handle assumed commands - - if (cmd === 'M') { - cmd = 'L'; - } - - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - } - - ret[ret.length] = { - cmd: cmd, - args: args - }; - return ret; -}; - -var _apply = function apply(commands, doc) { - // current point, control point, and subpath starting point - cx = cy = px = py = sx = sy = 0; // run the commands - - for (var i = 0; i < commands.length; i++) { - var c = commands[i]; - - if (typeof runners[c.cmd] === 'function') { - runners[c.cmd](doc, c.args); - } - } -}; - -var runners = { - M: function M(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - m: function m(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - C: function C(doc, a) { - cx = a[4]; - cy = a[5]; - px = a[2]; - py = a[3]; - return doc.bezierCurveTo.apply(doc, _toConsumableArray(a)); - }, - c: function c(doc, a) { - doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); - px = cx + a[2]; - py = cy + a[3]; - cx += a[4]; - return cy += a[5]; - }, - S: function S(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); - px = a[0]; - py = a[1]; - cx = a[2]; - return cy = a[3]; - }, - s: function s(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - Q: function Q(doc, a) { - px = a[0]; - py = a[1]; - cx = a[2]; - cy = a[3]; - return doc.quadraticCurveTo(a[0], a[1], cx, cy); - }, - q: function q(doc, a) { - doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - T: function T(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - - doc.quadraticCurveTo(px, py, a[0], a[1]); - px = cx - (px - cx); - py = cy - (py - cy); - cx = a[0]; - return cy = a[1]; - }, - t: function t(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - - doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); - cx += a[0]; - return cy += a[1]; - }, - A: function A(doc, a) { - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - a: function a(doc, _a) { - _a[5] += cx; - _a[6] += cy; - solveArc(doc, cx, cy, _a); - cx = _a[5]; - return cy = _a[6]; - }, - L: function L(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - l: function l(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - H: function H(doc, a) { - cx = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - h: function h(doc, a) { - cx += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - V: function V(doc, a) { - cy = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - v: function v(doc, a) { - cy += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - Z: function Z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - }, - z: function z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - } -}; - -var solveArc = function solveArc(doc, x, y, coords) { - var _coords = _slicedToArray(coords, 7), - rx = _coords[0], - ry = _coords[1], - rot = _coords[2], - large = _coords[3], - sweep = _coords[4], - ex = _coords[5], - ey = _coords[6]; - - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - - var _iterator2 = _createForOfIteratorHelper(segs), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var seg = _step2.value; - var bez = segmentToBezier.apply(void 0, _toConsumableArray(seg)); - doc.bezierCurveTo.apply(doc, _toConsumableArray(bez)); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } -}; // from Inkscape svgtopdf, thanks! - - -var arcToSegments = function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) { - var th = rotateX * (Math.PI / 180); - var sin_th = Math.sin(th); - var cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - var pl = px * px / (rx * rx) + py * py / (ry * ry); - - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = -sin_th / ry; - var a11 = cos_th / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); - var sfactor_sq = 1 / d - 0.25; - - if (sfactor_sq < 0) { - sfactor_sq = 0; - } - - var sfactor = Math.sqrt(sfactor_sq); - - if (sweep === large) { - sfactor = -sfactor; - } - - var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); - var th0 = Math.atan2(y0 - yc, x0 - xc); - var th1 = Math.atan2(y1 - yc, x1 - xc); - var th_arc = th1 - th0; - - if (th_arc < 0 && sweep === 1) { - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - - for (var i = 0; i < segments; i++) { - var th2 = th0 + i * th_arc / segments; - var th3 = th0 + (i + 1) * th_arc / segments; - result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; - } - - return result; -}; - -var segmentToBezier = function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) { - var a00 = cos_th * rx; - var a01 = -sin_th * ry; - var a10 = sin_th * rx; - var a11 = cos_th * ry; - var th_half = 0.5 * (th1 - th0); - var t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); - var x1 = cx + Math.cos(th0) - t * Math.sin(th0); - var y1 = cy + Math.sin(th0) + t * Math.cos(th0); - var x3 = cx + Math.cos(th1); - var y3 = cy + Math.sin(th1); - var x2 = x3 + t * Math.sin(th1); - var y2 = y3 - t * Math.cos(th1); - return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; -}; - -var SVGPath = /*#__PURE__*/function () { - function SVGPath() { - _classCallCheck(this, SVGPath); - } - - _createClass(SVGPath, null, [{ - key: "apply", - value: function apply(doc, path) { - var commands = parse(path); - - _apply(commands, doc); - } - }]); - - return SVGPath; -}(); - -var number$1 = PDFObject.number; // This constant is used to approximate a symmetrical arc using a cubic -// Bezier curve. - -var KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); -var VectorMixin = { - initVector: function initVector() { - this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix - - return this._ctmStack = []; - }, - save: function save() { - this._ctmStack.push(this._ctm.slice()); // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time? - - - return this.addContent('q'); - }, - restore: function restore() { - this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; - return this.addContent('Q'); - }, - closePath: function closePath() { - return this.addContent('h'); - }, - lineWidth: function lineWidth(w) { - return this.addContent("".concat(number$1(w), " w")); - }, - _CAP_STYLES: { - BUTT: 0, - ROUND: 1, - SQUARE: 2 - }, - lineCap: function lineCap(c) { - if (typeof c === 'string') { - c = this._CAP_STYLES[c.toUpperCase()]; - } - - return this.addContent("".concat(c, " J")); - }, - _JOIN_STYLES: { - MITER: 0, - ROUND: 1, - BEVEL: 2 - }, - lineJoin: function lineJoin(j) { - if (typeof j === 'string') { - j = this._JOIN_STYLES[j.toUpperCase()]; - } - - return this.addContent("".concat(j, " j")); - }, - miterLimit: function miterLimit(m) { - return this.addContent("".concat(number$1(m), " M")); - }, - dash: function dash(length) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var originalLength = length; - - if (!Array.isArray(length)) { - length = [length, options.space || length]; - } - - var valid = length.every(function (x) { - return Number.isFinite(x) && x > 0; - }); - - if (!valid) { - throw new Error("dash(".concat(JSON.stringify(originalLength), ", ").concat(JSON.stringify(options), ") invalid, lengths must be numeric and greater than zero")); - } - - length = length.map(number$1).join(' '); - return this.addContent("[".concat(length, "] ").concat(number$1(options.phase || 0), " d")); - }, - undash: function undash() { - return this.addContent('[] 0 d'); - }, - moveTo: function moveTo(x, y) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " m")); - }, - lineTo: function lineTo(x, y) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " l")); - }, - bezierCurveTo: function bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - return this.addContent("".concat(number$1(cp1x), " ").concat(number$1(cp1y), " ").concat(number$1(cp2x), " ").concat(number$1(cp2y), " ").concat(number$1(x), " ").concat(number$1(y), " c")); - }, - quadraticCurveTo: function quadraticCurveTo(cpx, cpy, x, y) { - return this.addContent("".concat(number$1(cpx), " ").concat(number$1(cpy), " ").concat(number$1(x), " ").concat(number$1(y), " v")); - }, - rect: function rect(x, y, w, h) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " ").concat(number$1(w), " ").concat(number$1(h), " re")); - }, - roundedRect: function roundedRect(x, y, w, h, r) { - if (r == null) { - r = 0; - } - - r = Math.min(r, 0.5 * w, 0.5 * h); // amount to inset control points from corners (see `ellipse`) - - var c = r * (1.0 - KAPPA); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); - this.lineTo(x + w, y + h - r); - this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); - this.lineTo(x + r, y + h); - this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); - this.lineTo(x, y + r); - this.bezierCurveTo(x, y + c, x + c, y, x + r, y); - return this.closePath(); - }, - ellipse: function ellipse(x, y, r1, r2) { - // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084 - if (r2 == null) { - r2 = r1; - } - - x -= r1; - y -= r2; - var ox = r1 * KAPPA; - var oy = r2 * KAPPA; - var xe = x + r1 * 2; - var ye = y + r2 * 2; - var xm = x + r1; - var ym = y + r2; - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - return this.closePath(); - }, - circle: function circle(x, y, radius) { - return this.ellipse(x, y, radius); - }, - arc: function arc(x, y, radius, startAngle, endAngle, anticlockwise) { - if (anticlockwise == null) { - anticlockwise = false; - } - - var TWO_PI = 2.0 * Math.PI; - var HALF_PI = 0.5 * Math.PI; - var deltaAng = endAngle - startAngle; - - if (Math.abs(deltaAng) > TWO_PI) { - // draw only full circle if more than that is specified - deltaAng = TWO_PI; - } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) { - // necessary to flip direction of rendering - var dir = anticlockwise ? -1 : 1; - deltaAng = dir * TWO_PI + deltaAng; - } - - var numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); - var segAng = deltaAng / numSegs; - var handleLen = segAng / HALF_PI * KAPPA * radius; - var curAng = startAngle; // component distances between anchor point and control point - - var deltaCx = -Math.sin(curAng) * handleLen; - var deltaCy = Math.cos(curAng) * handleLen; // anchor point - - var ax = x + Math.cos(curAng) * radius; - var ay = y + Math.sin(curAng) * radius; // calculate and render segments - - this.moveTo(ax, ay); - - for (var segIdx = 0; segIdx < numSegs; segIdx++) { - // starting control point - var cp1x = ax + deltaCx; - var cp1y = ay + deltaCy; // step angle - - curAng += segAng; // next anchor point - - ax = x + Math.cos(curAng) * radius; - ay = y + Math.sin(curAng) * radius; // next control point delta - - deltaCx = -Math.sin(curAng) * handleLen; - deltaCy = Math.cos(curAng) * handleLen; // ending control point - - var cp2x = ax - deltaCx; - var cp2y = ay - deltaCy; // render segment - - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); - } - - return this; - }, - polygon: function polygon() { - for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) { - points[_key] = arguments[_key]; - } - - this.moveTo.apply(this, _toConsumableArray(points.shift() || [])); - - for (var _i = 0, _points = points; _i < _points.length; _i++) { - var point = _points[_i]; - this.lineTo.apply(this, _toConsumableArray(point || [])); - } - - return this.closePath(); - }, - path: function path(_path) { - SVGPath.apply(this, _path); - return this; - }, - _windingRule: function _windingRule(rule) { - if (/even-?odd/.test(rule)) { - return '*'; - } - - return ''; - }, - fill: function fill(color, rule) { - if (/(even-?odd)|(non-?zero)/.test(color)) { - rule = color; - color = null; - } - - if (color) { - this.fillColor(color); - } - - return this.addContent("f".concat(this._windingRule(rule))); - }, - stroke: function stroke(color) { - if (color) { - this.strokeColor(color); - } - - return this.addContent('S'); - }, - fillAndStroke: function fillAndStroke(fillColor, strokeColor, rule) { - if (strokeColor == null) { - strokeColor = fillColor; - } - - var isFillRule = /(even-?odd)|(non-?zero)/; - - if (isFillRule.test(fillColor)) { - rule = fillColor; - fillColor = null; - } - - if (isFillRule.test(strokeColor)) { - rule = strokeColor; - strokeColor = fillColor; - } - - if (fillColor) { - this.fillColor(fillColor); - this.strokeColor(strokeColor); - } - - return this.addContent("B".concat(this._windingRule(rule))); - }, - clip: function clip(rule) { - return this.addContent("W".concat(this._windingRule(rule), " n")); - }, - transform: function transform(m11, m12, m21, m22, dx, dy) { - // keep track of the current transformation matrix - if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) { - // Ignore identity transforms - return this; - } - - var m = this._ctm; - - var _m = _slicedToArray(m, 6), - m0 = _m[0], - m1 = _m[1], - m2 = _m[2], - m3 = _m[3], - m4 = _m[4], - m5 = _m[5]; - - m[0] = m0 * m11 + m2 * m12; - m[1] = m1 * m11 + m3 * m12; - m[2] = m0 * m21 + m2 * m22; - m[3] = m1 * m21 + m3 * m22; - m[4] = m0 * dx + m2 * dy + m4; - m[5] = m1 * dx + m3 * dy + m5; - var values = [m11, m12, m21, m22, dx, dy].map(function (v) { - return number$1(v); - }).join(' '); - return this.addContent("".concat(values, " cm")); - }, - translate: function translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - }, - rotate: function rotate(angle) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var y; - var rad = angle * Math.PI / 180; - var cos = Math.cos(rad); - var sin = Math.sin(rad); - var x = y = 0; - - if (options.origin != null) { - var _options$origin = _slicedToArray(options.origin, 2); - - x = _options$origin[0]; - y = _options$origin[1]; - var x1 = x * cos - y * sin; - var y1 = x * sin + y * cos; - x -= x1; - y -= y1; - } - - return this.transform(cos, sin, -sin, cos, x, y); - }, - scale: function scale(xFactor, yFactor) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var y; - - if (yFactor == null) { - yFactor = xFactor; - } - - if (typeof yFactor === 'object') { - options = yFactor; - yFactor = xFactor; - } - - var x = y = 0; - - if (options.origin != null) { - var _options$origin2 = _slicedToArray(options.origin, 2); - - x = _options$origin2[0]; - y = _options$origin2[1]; - x -= xFactor * x; - y -= yFactor * y; - } - - return this.transform(xFactor, 0, 0, yFactor, x, y); - } -}; - -var WIN_ANSI_MAP = { - 402: 131, - 8211: 150, - 8212: 151, - 8216: 145, - 8217: 146, - 8218: 130, - 8220: 147, - 8221: 148, - 8222: 132, - 8224: 134, - 8225: 135, - 8226: 149, - 8230: 133, - 8364: 128, - 8240: 137, - 8249: 139, - 8250: 155, - 710: 136, - 8482: 153, - 338: 140, - 339: 156, - 732: 152, - 352: 138, - 353: 154, - 376: 159, - 381: 142, - 382: 158 -}; -var characters = ".notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n \nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n \nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n \ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n \nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n \nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n \nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n \nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis".split(/\s+/); - -var AFMFont = /*#__PURE__*/function () { - _createClass(AFMFont, null, [{ - key: "open", - value: function open(filename) { - return new AFMFont(fs.readFileSync(filename, 'utf8')); - } - }]); - - function AFMFont(contents) { - _classCallCheck(this, AFMFont); - - this.contents = contents; - this.attributes = {}; - this.glyphWidths = {}; - this.boundingBoxes = {}; - this.kernPairs = {}; - this.parse(); // todo: remove charWidths since appears to not be used - - this.charWidths = new Array(256); - - for (var char = 0; char <= 255; char++) { - this.charWidths[char] = this.glyphWidths[characters[char]]; - } - - this.bbox = this.attributes['FontBBox'].split(/\s+/).map(function (e) { - return +e; - }); - this.ascender = +(this.attributes['Ascender'] || 0); - this.descender = +(this.attributes['Descender'] || 0); - this.xHeight = +(this.attributes['XHeight'] || 0); - this.capHeight = +(this.attributes['CapHeight'] || 0); - this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender); - } - - _createClass(AFMFont, [{ - key: "parse", - value: function parse() { - var section = ''; - - var _iterator = _createForOfIteratorHelper(this.contents.split('\n')), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var line = _step.value; - var match; - var a; - - if (match = line.match(/^Start(\w+)/)) { - section = match[1]; - continue; - } else if (match = line.match(/^End(\w+)/)) { - section = ''; - continue; - } - - switch (section) { - case 'FontMetrics': - match = line.match(/(^\w+)\s+(.*)/); - var key = match[1]; - var value = match[2]; - - if (a = this.attributes[key]) { - if (!Array.isArray(a)) { - a = this.attributes[key] = [a]; - } - - a.push(value); - } else { - this.attributes[key] = value; - } - - break; - - case 'CharMetrics': - if (!/^CH?\s/.test(line)) { - continue; - } - - var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; - this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; - break; - - case 'KernPairs': - match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); - - if (match) { - this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); - } - - break; - } - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - }, { - key: "encodeText", - value: function encodeText(text) { - var res = []; - - for (var i = 0, len = text.length; i < len; i++) { - var char = text.charCodeAt(i); - char = WIN_ANSI_MAP[char] || char; - res.push(char.toString(16)); - } - - return res; - } - }, { - key: "glyphsForString", - value: function glyphsForString(string) { - var glyphs = []; - - for (var i = 0, len = string.length; i < len; i++) { - var charCode = string.charCodeAt(i); - glyphs.push(this.characterToGlyph(charCode)); - } - - return glyphs; - } - }, { - key: "characterToGlyph", - value: function characterToGlyph(character) { - return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; - } - }, { - key: "widthOfGlyph", - value: function widthOfGlyph(glyph) { - return this.glyphWidths[glyph] || 0; - } - }, { - key: "getKernPair", - value: function getKernPair(left, right) { - return this.kernPairs[left + '\0' + right] || 0; - } - }, { - key: "advancesForGlyphs", - value: function advancesForGlyphs(glyphs) { - var advances = []; - - for (var index = 0; index < glyphs.length; index++) { - var left = glyphs[index]; - var right = glyphs[index + 1]; - advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); - } - - return advances; - } - }]); - - return AFMFont; -}(); - -var PDFFont = /*#__PURE__*/function () { - function PDFFont() { - _classCallCheck(this, PDFFont); - } - - _createClass(PDFFont, [{ - key: "encode", - value: function encode() { - throw new Error('Must be implemented by subclasses'); - } - }, { - key: "widthOfString", - value: function widthOfString() { - throw new Error('Must be implemented by subclasses'); - } - }, { - key: "ref", - value: function ref() { - return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); - } - }, { - key: "finalize", - value: function finalize() { - if (this.embedded || this.dictionary == null) { - return; - } - - this.embed(); - return this.embedded = true; - } - }, { - key: "embed", - value: function embed() { - throw new Error('Must be implemented by subclasses'); - } - }, { - key: "lineHeight", - value: function lineHeight(size, includeGap) { - if (includeGap == null) { - includeGap = false; - } - - var gap = includeGap ? this.lineGap : 0; - return (this.ascender + gap - this.descender) / 1000 * size; - } - }]); - - return PDFFont; -}(); - -var STANDARD_FONTS = { - Courier: function Courier() { - return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8'); - }, - 'Courier-Bold': function CourierBold() { - return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8'); - }, - 'Courier-Oblique': function CourierOblique() { - return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8'); - }, - 'Courier-BoldOblique': function CourierBoldOblique() { - return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8'); - }, - Helvetica: function Helvetica() { - return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8'); - }, - 'Helvetica-Bold': function HelveticaBold() { - return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8'); - }, - 'Helvetica-Oblique': function HelveticaOblique() { - return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8'); - }, - 'Helvetica-BoldOblique': function HelveticaBoldOblique() { - return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8'); - }, - 'Times-Roman': function TimesRoman() { - return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8'); - }, - 'Times-Bold': function TimesBold() { - return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8'); - }, - 'Times-Italic': function TimesItalic() { - return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8'); - }, - 'Times-BoldItalic': function TimesBoldItalic() { - return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8'); - }, - Symbol: function Symbol() { - return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8'); - }, - ZapfDingbats: function ZapfDingbats() { - return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8'); - } -}; - -var StandardFont = /*#__PURE__*/function (_PDFFont) { - _inherits(StandardFont, _PDFFont); - - var _super = _createSuper(StandardFont); - - function StandardFont(document, name, id) { - var _this; - - _classCallCheck(this, StandardFont); - - _this = _super.call(this); - _this.document = document; - _this.name = name; - _this.id = id; - _this.font = new AFMFont(STANDARD_FONTS[_this.name]()); - var _this$font = _this.font; - _this.ascender = _this$font.ascender; - _this.descender = _this$font.descender; - _this.bbox = _this$font.bbox; - _this.lineGap = _this$font.lineGap; - _this.xHeight = _this$font.xHeight; - _this.capHeight = _this$font.capHeight; - return _this; - } - - _createClass(StandardFont, [{ - key: "embed", - value: function embed() { - this.dictionary.data = { - Type: 'Font', - BaseFont: this.name, - Subtype: 'Type1', - Encoding: 'WinAnsiEncoding' - }; - return this.dictionary.end(); - } - }, { - key: "encode", - value: function encode(text) { - var encoded = this.font.encodeText(text); - var glyphs = this.font.glyphsForString("".concat(text)); - var advances = this.font.advancesForGlyphs(glyphs); - var positions = []; - - for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - positions.push({ - xAdvance: advances[i], - yAdvance: 0, - xOffset: 0, - yOffset: 0, - advanceWidth: this.font.widthOfGlyph(glyph) - }); - } - - return [encoded, positions]; - } - }, { - key: "widthOfString", - value: function widthOfString(string, size) { - var glyphs = this.font.glyphsForString("".concat(string)); - var advances = this.font.advancesForGlyphs(glyphs); - var width = 0; - - var _iterator = _createForOfIteratorHelper(advances), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var advance = _step.value; - width += advance; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - var scale = size / 1000; - return width * scale; - } - }], [{ - key: "isStandardFont", - value: function isStandardFont(name) { - return name in STANDARD_FONTS; - } - }]); - - return StandardFont; -}(PDFFont); - -var toHex = function toHex(num) { - return "0000".concat(num.toString(16)).slice(-4); -}; - -var EmbeddedFont = /*#__PURE__*/function (_PDFFont) { - _inherits(EmbeddedFont, _PDFFont); - - var _super = _createSuper(EmbeddedFont); - - function EmbeddedFont(document, font, id) { - var _this; - - _classCallCheck(this, EmbeddedFont); - - _this = _super.call(this); - _this.document = document; - _this.font = font; - _this.id = id; - _this.subset = _this.font.createSubset(); - _this.unicode = [[0]]; - _this.widths = [_this.font.getGlyph(0).advanceWidth]; - _this.name = _this.font.postscriptName; - _this.scale = 1000 / _this.font.unitsPerEm; - _this.ascender = _this.font.ascent * _this.scale; - _this.descender = _this.font.descent * _this.scale; - _this.xHeight = _this.font.xHeight * _this.scale; - _this.capHeight = _this.font.capHeight * _this.scale; - _this.lineGap = _this.font.lineGap * _this.scale; - _this.bbox = _this.font.bbox; - - if (document.options.fontLayoutCache !== false) { - _this.layoutCache = Object.create(null); - } - - return _this; - } - - _createClass(EmbeddedFont, [{ - key: "layoutRun", - value: function layoutRun(text, features) { - var run = this.font.layout(text, features); // Normalize position values - - for (var i = 0; i < run.positions.length; i++) { - var position = run.positions[i]; - - for (var key in position) { - position[key] *= this.scale; - } - - position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; - } - - return run; - } - }, { - key: "layoutCached", - value: function layoutCached(text) { - if (!this.layoutCache) { - return this.layoutRun(text); - } - - var cached; - - if (cached = this.layoutCache[text]) { - return cached; - } - - var run = this.layoutRun(text); - this.layoutCache[text] = run; - return run; - } - }, { - key: "layout", - value: function layout(text, features, onlyWidth) { - // Skip the cache if any user defined features are applied - if (features) { - return this.layoutRun(text, features); - } - - var glyphs = onlyWidth ? null : []; - var positions = onlyWidth ? null : []; - var advanceWidth = 0; // Split the string by words to increase cache efficiency. - // For this purpose, spaces and tabs are a good enough delimeter. - - var last = 0; - var index = 0; - - while (index <= text.length) { - var needle; - - if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) { - var run = this.layoutCached(text.slice(last, ++index)); - - if (!onlyWidth) { - glyphs = glyphs.concat(run.glyphs); - positions = positions.concat(run.positions); - } - - advanceWidth += run.advanceWidth; - last = index; - } else { - index++; - } - } - - return { - glyphs: glyphs, - positions: positions, - advanceWidth: advanceWidth - }; - } - }, { - key: "encode", - value: function encode(text, features) { - var _this$layout = this.layout(text, features), - glyphs = _this$layout.glyphs, - positions = _this$layout.positions; - - var res = []; - - for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - var gid = this.subset.includeGlyph(glyph.id); - res.push("0000".concat(gid.toString(16)).slice(-4)); - - if (this.widths[gid] == null) { - this.widths[gid] = glyph.advanceWidth * this.scale; - } - - if (this.unicode[gid] == null) { - this.unicode[gid] = glyph.codePoints; - } - } - - return [res, positions]; - } - }, { - key: "widthOfString", - value: function widthOfString(string, size, features) { - var width = this.layout(string, features, true).advanceWidth; - var scale = size / 1000; - return width * scale; - } - }, { - key: "embed", - value: function embed() { - var _this2 = this; - - var isCFF = this.subset.cff != null; - var fontFile = this.document.ref(); - - if (isCFF) { - fontFile.data.Subtype = 'CIDFontType0C'; - } - - this.subset.encodeStream().on('data', function (data) { - return fontFile.write(data); - }).on('end', function () { - return fontFile.end(); - }); - var familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8; - var flags = 0; - - if (this.font.post.isFixedPitch) { - flags |= 1 << 0; - } - - if (1 <= familyClass && familyClass <= 7) { - flags |= 1 << 1; - } - - flags |= 1 << 2; // assume the font uses non-latin characters - - if (familyClass === 10) { - flags |= 1 << 3; - } - - if (this.font.head.macStyle.italic) { - flags |= 1 << 6; - } // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z') - - - var tag = [1, 2, 3, 4, 5, 6].map(function (i) { - return String.fromCharCode((_this2.id.charCodeAt(i) || 73) + 17); - }).join(''); - var name = tag + '+' + this.font.postscriptName; - var bbox = this.font.bbox; - var descriptor = this.document.ref({ - Type: 'FontDescriptor', - FontName: name, - Flags: flags, - FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], - ItalicAngle: this.font.italicAngle, - Ascent: this.ascender, - Descent: this.descender, - CapHeight: (this.font.capHeight || this.font.ascent) * this.scale, - XHeight: (this.font.xHeight || 0) * this.scale, - StemV: 0 - }); // not sure how to calculate this - - if (isCFF) { - descriptor.data.FontFile3 = fontFile; - } else { - descriptor.data.FontFile2 = fontFile; - } - - if (this.document.subset) { - var CIDSet = Buffer.from('FFFFFFFFC0', 'hex'); - var CIDSetRef = this.document.ref(); - CIDSetRef.write(CIDSet); - CIDSetRef.end(); - descriptor.data.CIDSet = CIDSetRef; - } - - descriptor.end(); - var descendantFontData = { - Type: 'Font', - Subtype: 'CIDFontType0', - BaseFont: name, - CIDSystemInfo: { - Registry: new String('Adobe'), - Ordering: new String('Identity'), - Supplement: 0 - }, - FontDescriptor: descriptor, - W: [0, this.widths] - }; - - if (!isCFF) { - descendantFontData.Subtype = 'CIDFontType2'; - descendantFontData.CIDToGIDMap = 'Identity'; - } - - var descendantFont = this.document.ref(descendantFontData); - descendantFont.end(); - this.dictionary.data = { - Type: 'Font', - Subtype: 'Type0', - BaseFont: name, - Encoding: 'Identity-H', - DescendantFonts: [descendantFont], - ToUnicode: this.toUnicodeCmap() - }; - return this.dictionary.end(); - } // Maps the glyph ids encoded in the PDF back to unicode strings - // Because of ligature substitutions and the like, there may be one or more - // unicode characters represented by each glyph. - - }, { - key: "toUnicodeCmap", - value: function toUnicodeCmap() { - var cmap = this.document.ref(); - var entries = []; - - var _iterator = _createForOfIteratorHelper(this.unicode), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var codePoints = _step.value; - var encoded = []; // encode codePoints to utf16 - - var _iterator2 = _createForOfIteratorHelper(codePoints), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var value = _step2.value; - - if (value > 0xffff) { - value -= 0x10000; - encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); - value = 0xdc00 | value & 0x3ff; - } - - encoded.push(toHex(value)); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - - entries.push("<".concat(encoded.join(' '), ">")); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - var chunkSize = 256; - var chunks = Math.ceil(entries.length / chunkSize); - var ranges = []; - - for (var i = 0; i < chunks; i++) { - var start = i * chunkSize; - var end = Math.min((i + 1) * chunkSize, entries.length); - ranges.push("<".concat(toHex(start), "> <").concat(toHex(end - 1), "> [").concat(entries.slice(start, end).join(' '), "]")); - } - - cmap.end("/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n1 beginbfrange\n".concat(ranges.join('\n'), "\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend")); - return cmap; - } - }]); - - return EmbeddedFont; -}(PDFFont); - -var PDFFontFactory = /*#__PURE__*/function () { - function PDFFontFactory() { - _classCallCheck(this, PDFFontFactory); - } - - _createClass(PDFFontFactory, null, [{ - key: "open", - value: function open(document, src, family, id) { - var font; - - if (typeof src === 'string') { - if (StandardFont.isStandardFont(src)) { - return new StandardFont(document, src, id); - } - - src = fs.readFileSync(src); - } - - if (Buffer.isBuffer(src)) { - font = fontkit.create(src, family); - } else if (src instanceof Uint8Array) { - font = fontkit.create(Buffer.from(src), family); - } else if (src instanceof ArrayBuffer) { - font = fontkit.create(Buffer.from(new Uint8Array(src)), family); - } - - if (font == null) { - throw new Error('Not a supported font format or standard PDF font.'); - } - - return new EmbeddedFont(document, font, id); - } - }]); - - return PDFFontFactory; -}(); - -var FontsMixin = { - initFonts: function initFonts() { - var defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica'; - // Lookup table for embedded fonts - this._fontFamilies = {}; - this._fontCount = 0; // Font state - - this._fontSize = 12; - this._font = null; - this._registeredFonts = {}; // Set the default font - - if (defaultFont) { - this.font(defaultFont); - } - }, - font: function font(src, family, size) { - var cacheKey, font; - - if (typeof family === 'number') { - size = family; - family = null; - } // check registered fonts if src is a string - - - if (typeof src === 'string' && this._registeredFonts[src]) { - cacheKey = src; - var _this$_registeredFont = this._registeredFonts[src]; - src = _this$_registeredFont.src; - family = _this$_registeredFont.family; - } else { - cacheKey = family || src; - - if (typeof cacheKey !== 'string') { - cacheKey = null; - } - } - - if (size != null) { - this.fontSize(size); - } // fast path: check if the font is already in the PDF - - - if (font = this._fontFamilies[cacheKey]) { - this._font = font; - return this; - } // load the font - - - var id = "F".concat(++this._fontCount); - this._font = PDFFontFactory.open(this, src, family, id); // check for existing font familes with the same name already in the PDF - // useful if the font was passed as a buffer - - if (font = this._fontFamilies[this._font.name]) { - this._font = font; - return this; - } // save the font for reuse later - - - if (cacheKey) { - this._fontFamilies[cacheKey] = this._font; - } - - if (this._font.name) { - this._fontFamilies[this._font.name] = this._font; - } - - return this; - }, - fontSize: function fontSize(_fontSize) { - this._fontSize = _fontSize; - return this; - }, - currentLineHeight: function currentLineHeight(includeGap) { - if (includeGap == null) { - includeGap = false; - } - - return this._font.lineHeight(this._fontSize, includeGap); - }, - registerFont: function registerFont(name, src, family) { - this._registeredFonts[name] = { - src: src, - family: family - }; - return this; - } -}; - -var SOFT_HYPHEN = "\xAD"; -var HYPHEN = '-'; - -var LineWrapper = /*#__PURE__*/function (_EventEmitter) { - _inherits(LineWrapper, _EventEmitter); - - var _super = _createSuper(LineWrapper); - - function LineWrapper(document, options) { - var _this; - - _classCallCheck(this, LineWrapper); - - _this = _super.call(this); - _this.document = document; - _this.indent = options.indent || 0; - _this.characterSpacing = options.characterSpacing || 0; - _this.wordSpacing = options.wordSpacing === 0; - _this.columns = options.columns || 1; - _this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch - - _this.lineWidth = (options.width - _this.columnGap * (_this.columns - 1)) / _this.columns; - _this.spaceLeft = _this.lineWidth; - _this.startX = _this.document.x; - _this.startY = _this.document.y; - _this.column = 1; - _this.ellipsis = options.ellipsis; - _this.continuedX = 0; - _this.features = options.features; // calculate the maximum Y position the text can appear at - - if (options.height != null) { - _this.height = options.height; - _this.maxY = _this.startY + options.height; - } else { - _this.maxY = _this.document.page.maxY(); - } // handle paragraph indents - - - _this.on('firstLine', function (options) { - // if this is the first line of the text segment, and - // we're continuing where we left off, indent that much - // otherwise use the user specified indent option - var indent = _this.continuedX || _this.indent; - _this.document.x += indent; - _this.lineWidth -= indent; - return _this.once('line', function () { - _this.document.x -= indent; - _this.lineWidth += indent; - - if (options.continued && !_this.continuedX) { - _this.continuedX = _this.indent; - } - - if (!options.continued) { - return _this.continuedX = 0; - } - }); - }); // handle left aligning last lines of paragraphs - - - _this.on('lastLine', function (options) { - var align = options.align; - - if (align === 'justify') { - options.align = 'left'; - } - - _this.lastLine = true; - return _this.once('line', function () { - _this.document.y += options.paragraphGap || 0; - options.align = align; - return _this.lastLine = false; - }); - }); - - return _this; - } - - _createClass(LineWrapper, [{ - key: "wordWidth", - value: function wordWidth(word) { - return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing; - } - }, { - key: "canFit", - value: function canFit(word, w) { - if (word[word.length - 1] != SOFT_HYPHEN) { - return w <= this.spaceLeft; - } - - return w + this.wordWidth(HYPHEN) <= this.spaceLeft; - } - }, { - key: "eachWord", - value: function eachWord(text, fn) { - // setup a unicode line breaker - var bk; - var breaker = new LineBreaker(text); - var last = null; - var wordWidths = Object.create(null); - - while (bk = breaker.nextBreak()) { - var shouldContinue; - var word = text.slice((last != null ? last.position : undefined) || 0, bk.position); - var w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); // if the word is longer than the whole line, chop it up - // TODO: break by grapheme clusters, not JS string characters - - if (w > this.lineWidth + this.continuedX) { - // make some fake break objects - var lbk = last; - var fbk = {}; - - while (word.length) { - // fit as much of the word as possible into the space we have - var l, mightGrow; - - if (w > this.spaceLeft) { - // start our check at the end of our available space - this method is faster than a loop of each character and it resolves - // an issue with long loops when processing massive words, such as a huge number of spaces - l = Math.ceil(this.spaceLeft / (w / word.length)); - w = this.wordWidth(word.slice(0, l)); - mightGrow = w <= this.spaceLeft && l < word.length; - } else { - l = word.length; - } - - var mustShrink = w > this.spaceLeft && l > 0; // shrink or grow word as necessary after our near-guess above - - while (mustShrink || mightGrow) { - if (mustShrink) { - w = this.wordWidth(word.slice(0, --l)); - mustShrink = w > this.spaceLeft && l > 0; - } else { - w = this.wordWidth(word.slice(0, ++l)); - mustShrink = w > this.spaceLeft && l > 0; - mightGrow = w <= this.spaceLeft && l < word.length; - } - } // check for the edge case where a single character cannot fit into a line. - - - if (l === 0 && this.spaceLeft === this.lineWidth) { - l = 1; - } // send a required break unless this is the last piece and a linebreak is not specified - - - fbk.required = bk.required || l < word.length; - shouldContinue = fn(word.slice(0, l), w, fbk, lbk); - lbk = { - required: false - }; // get the remaining piece of the word - - word = word.slice(l); - w = this.wordWidth(word); - - if (shouldContinue === false) { - break; - } - } - } else { - // otherwise just emit the break as it was given to us - shouldContinue = fn(word, w, bk, last); - } - - if (shouldContinue === false) { - break; - } - - last = bk; - } - } - }, { - key: "wrap", - value: function wrap(text, options) { - var _this2 = this; - - // override options from previous continued fragments - if (options.indent != null) { - this.indent = options.indent; - } - - if (options.characterSpacing != null) { - this.characterSpacing = options.characterSpacing; - } - - if (options.wordSpacing != null) { - this.wordSpacing = options.wordSpacing; - } - - if (options.ellipsis != null) { - this.ellipsis = options.ellipsis; - } // make sure we're actually on the page - // and that the first line of is never by - // itself at the bottom of a page (orphans) - - - var nextY = this.document.y + this.document.currentLineHeight(true); - - if (this.document.y > this.maxY || nextY > this.maxY) { - this.nextSection(); - } - - var buffer = ''; - var textWidth = 0; - var wc = 0; - var lc = 0; - var y = this.document.y; // used to reset Y pos if options.continued (below) - - var emitLine = function emitLine() { - options.textWidth = textWidth + _this2.wordSpacing * (wc - 1); - options.wordCount = wc; - options.lineWidth = _this2.lineWidth; - y = _this2.document.y; - - _this2.emit('line', buffer, options, _this2); - - return lc++; - }; - - this.emit('sectionStart', options, this); - this.eachWord(text, function (word, w, bk, last) { - if (last == null || last.required) { - _this2.emit('firstLine', options, _this2); - - _this2.spaceLeft = _this2.lineWidth; - } - - if (_this2.canFit(word, w)) { - buffer += word; - textWidth += w; - wc++; - } - - if (bk.required || !_this2.canFit(word, w)) { - // if the user specified a max height and an ellipsis, and is about to pass the - // max height and max columns after the next line, append the ellipsis - var lh = _this2.document.currentLineHeight(true); - - if (_this2.height != null && _this2.ellipsis && _this2.document.y + lh * 2 > _this2.maxY && _this2.column >= _this2.columns) { - if (_this2.ellipsis === true) { - _this2.ellipsis = '…'; - } // map default ellipsis character - - - buffer = buffer.replace(/\s+$/, ''); - textWidth = _this2.wordWidth(buffer + _this2.ellipsis); // remove characters from the buffer until the ellipsis fits - // to avoid infinite loop need to stop while-loop if buffer is empty string - - while (buffer && textWidth > _this2.lineWidth) { - buffer = buffer.slice(0, -1).replace(/\s+$/, ''); - textWidth = _this2.wordWidth(buffer + _this2.ellipsis); - } // need to add ellipsis only if there is enough space for it - - - if (textWidth <= _this2.lineWidth) { - buffer = buffer + _this2.ellipsis; - } - - textWidth = _this2.wordWidth(buffer); - } - - if (bk.required) { - if (w > _this2.spaceLeft) { - emitLine(); - buffer = word; - textWidth = w; - wc = 1; - } - - _this2.emit('lastLine', options, _this2); - } // Previous entry is a soft hyphen - add visible hyphen. - - - if (buffer[buffer.length - 1] == SOFT_HYPHEN) { - buffer = buffer.slice(0, -1) + HYPHEN; - _this2.spaceLeft -= _this2.wordWidth(HYPHEN); - } - - emitLine(); // if we've reached the edge of the page, - // continue on a new page or column - - if (_this2.document.y + lh > _this2.maxY) { - var shouldContinue = _this2.nextSection(); // stop if we reached the maximum height - - - if (!shouldContinue) { - wc = 0; - buffer = ''; - return false; - } - } // reset the space left and buffer - - - if (bk.required) { - _this2.spaceLeft = _this2.lineWidth; - buffer = ''; - textWidth = 0; - return wc = 0; - } else { - // reset the space left and buffer - _this2.spaceLeft = _this2.lineWidth - w; - buffer = word; - textWidth = w; - return wc = 1; - } - } else { - return _this2.spaceLeft -= w; - } - }); - - if (wc > 0) { - this.emit('lastLine', options, this); - emitLine(); - } - - this.emit('sectionEnd', options, this); // if the wrap is set to be continued, save the X position - // to start the first line of the next segment at, and reset - // the y position - - if (options.continued === true) { - if (lc > 1) { - this.continuedX = 0; - } - - this.continuedX += options.textWidth || 0; - return this.document.y = y; - } else { - return this.document.x = this.startX; - } - } - }, { - key: "nextSection", - value: function nextSection(options) { - this.emit('sectionEnd', options, this); - - if (++this.column > this.columns) { - // if a max height was specified by the user, we're done. - // otherwise, the default is to make a new page at the bottom. - if (this.height != null) { - return false; - } - - this.document.continueOnNewPage(); - this.column = 1; - this.startY = this.document.page.margins.top; - this.maxY = this.document.page.maxY(); - this.document.x = this.startX; - - if (this.document._fillColor) { - var _this$document; - - (_this$document = this.document).fillColor.apply(_this$document, _toConsumableArray(this.document._fillColor)); - } - - this.emit('pageBreak', options, this); - } else { - this.document.x += this.lineWidth + this.columnGap; - this.document.y = this.startY; - this.emit('columnBreak', options, this); - } - - this.emit('sectionStart', options, this); - return true; - } - }]); - - return LineWrapper; -}(EventEmitter); - -var number$2 = PDFObject.number; -var TextMixin = { - initText: function initText() { - this._line = this._line.bind(this); // Current coordinates - - this.x = 0; - this.y = 0; - return this._lineGap = 0; - }, - lineGap: function lineGap(_lineGap) { - this._lineGap = _lineGap; - return this; - }, - moveDown: function moveDown(lines) { - if (lines == null) { - lines = 1; - } - - this.y += this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - moveUp: function moveUp(lines) { - if (lines == null) { - lines = 1; - } - - this.y -= this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - _text: function _text(text, x, y, options, lineCallback) { - var _this = this; - - options = this._initOptions(x, y, options); // Convert text to a string - - text = text == null ? '' : "".concat(text); // if the wordSpacing option is specified, remove multiple consecutive spaces - - if (options.wordSpacing) { - text = text.replace(/\s{2,}/g, ' '); - } - - var addStructure = function addStructure() { - if (options.structParent) { - options.structParent.add(_this.struct(options.structType || 'P', [_this.markStructureContent(options.structType || 'P')])); - } - }; // word wrapping - - - if (options.width) { - var wrapper = this._wrapper; - - if (!wrapper) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', lineCallback); - wrapper.on('firstLine', addStructure); - } - - this._wrapper = options.continued ? wrapper : null; - this._textOptions = options.continued ? options : null; - wrapper.wrap(text, options); // render paragraphs as single lines - } else { - var _iterator = _createForOfIteratorHelper(text.split('\n')), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var line = _step.value; - addStructure(); - lineCallback(line, options); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - - return this; - }, - text: function text(_text2, x, y, options) { - return this._text(_text2, x, y, options, this._line); - }, - widthOfString: function widthOfString(string) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1); - }, - heightOfString: function heightOfString(text, options) { - var _this2 = this; - - var x = this.x, - y = this.y; - options = this._initOptions(options); - options.height = Infinity; // don't break pages - - var lineGap = options.lineGap || this._lineGap || 0; - - this._text(text, this.x, this.y, options, function () { - return _this2.y += _this2.currentLineHeight(true) + lineGap; - }); - - var height = this.y - y; - this.x = x; - this.y = y; - return height; - }, - list: function list(_list, x, y, options, wrapper) { - options = this._initOptions(x, y, options); - var listType = options.listType || 'bullet'; - var unit = Math.round(this._font.ascender / 1000 * this._fontSize); - var midLine = unit / 2; - var r = options.bulletRadius || unit / 3; - var indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2); - var itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2); - var level = 1; - var items = []; - var levels = []; - var numbers = []; - - var flatten = function flatten(list) { - var n = 1; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - - if (Array.isArray(item)) { - level++; - flatten(item); - level--; - } else { - items.push(item); - levels.push(level); - - if (listType !== 'bullet') { - numbers.push(n++); - } - } - } - }; - - flatten(_list); - - var label = function label(n) { - switch (listType) { - case 'numbered': - return "".concat(n, "."); - - case 'lettered': - var letter = String.fromCharCode((n - 1) % 26 + 65); - var times = Math.floor((n - 1) / 26 + 1); - var text = Array(times + 1).join(letter); - return "".concat(text, "."); - } - }; - - var drawListItem = function drawListItem(listItem) { - var _this3 = this; - - wrapper = new LineWrapper(this, options); - wrapper.on('line', this._line); - level = 1; - var i = 0; - wrapper.once('firstLine', function () { - var item, itemType, labelType, bodyType; - - if (options.structParent) { - if (options.structTypes) { - var _options$structTypes = _slicedToArray(options.structTypes, 3); - - itemType = _options$structTypes[0]; - labelType = _options$structTypes[1]; - bodyType = _options$structTypes[2]; - } else { - itemType = 'LI'; - labelType = 'Lbl'; - bodyType = 'LBody'; - } - } - - if (itemType) { - item = _this3.struct(itemType); - options.structParent.add(item); - } else if (options.structParent) { - item = options.structParent; - } - - var l; - - if ((l = levels[i++]) !== level) { - var diff = itemIndent * (l - level); - _this3.x += diff; - wrapper.lineWidth -= diff; - level = l; - } - - if (item && (labelType || bodyType)) { - item.add(_this3.struct(labelType || bodyType, [_this3.markStructureContent(labelType || bodyType)])); - } - - switch (listType) { - case 'bullet': - _this3.circle(_this3.x - indent + r, _this3.y + midLine, r); - - _this3.fill(); - - break; - - case 'numbered': - case 'lettered': - var text = label(numbers[i - 1]); - - _this3._fragment(text, _this3.x - indent, _this3.y, options); - - break; - } - - if (item && labelType && bodyType) { - item.add(_this3.struct(bodyType, [_this3.markStructureContent(bodyType)])); - } - - if (item && item !== options.structParent) { - item.end(); - } - }); - wrapper.on('sectionStart', function () { - var pos = indent + itemIndent * (level - 1); - _this3.x += pos; - return wrapper.lineWidth -= pos; - }); - wrapper.on('sectionEnd', function () { - var pos = indent + itemIndent * (level - 1); - _this3.x -= pos; - return wrapper.lineWidth += pos; - }); - wrapper.wrap(listItem, options); - }; - - for (var i = 0; i < items.length; i++) { - drawListItem.call(this, items[i]); - } - - return this; - }, - _initOptions: function _initOptions() { - var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var y = arguments.length > 1 ? arguments[1] : undefined; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (typeof x === 'object') { - options = x; - x = null; - } // clone options object - - - var result = Object.assign({}, options); // extend options with previous values for continued text - - if (this._textOptions) { - for (var key in this._textOptions) { - var val = this._textOptions[key]; - - if (key !== 'continued') { - if (result[key] === undefined) { - result[key] = val; - } - } - } - } // Update the current position - - - if (x != null) { - this.x = x; - } - - if (y != null) { - this.y = y; - } // wrap to margins if no x or y position passed - - - if (result.lineBreak !== false) { - if (result.width == null) { - result.width = this.page.width - this.x - this.page.margins.right; - } - - result.width = Math.max(result.width, 0); - } - - if (!result.columns) { - result.columns = 0; - } - - if (result.columnGap == null) { - result.columnGap = 18; - } // 1/4 inch - - - return result; - }, - _line: function _line(text) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var wrapper = arguments.length > 2 ? arguments[2] : undefined; - - this._fragment(text, this.x, this.y, options); - - var lineGap = options.lineGap || this._lineGap || 0; - - if (!wrapper) { - return this.x += this.widthOfString(text); - } else { - return this.y += this.currentLineHeight(true) + lineGap; - } - }, - _fragment: function _fragment(text, x, y, options) { - var _this4 = this; - - var dy, encoded, i, positions, textWidth, words; - text = "".concat(text).replace(/\n/g, ''); - - if (text.length === 0) { - return; - } // handle options - - - var align = options.align || 'left'; - var wordSpacing = options.wordSpacing || 0; - var characterSpacing = options.characterSpacing || 0; // text alignments - - if (options.width) { - switch (align) { - case 'right': - textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); - x += options.lineWidth - textWidth; - break; - - case 'center': - x += options.lineWidth / 2 - options.textWidth / 2; - break; - - case 'justify': - // calculate the word spacing value - words = text.trim().split(/\s+/); - textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - var spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - break; - } - } // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling - - - if (typeof options.baseline === 'number') { - dy = -options.baseline; - } else { - switch (options.baseline) { - case 'svg-middle': - dy = 0.5 * this._font.xHeight; - break; - - case 'middle': - case 'svg-central': - dy = 0.5 * (this._font.descender + this._font.ascender); - break; - - case 'bottom': - case 'ideographic': - dy = this._font.descender; - break; - - case 'alphabetic': - dy = 0; - break; - - case 'mathematical': - dy = 0.5 * this._font.ascender; - break; - - case 'hanging': - dy = 0.8 * this._font.ascender; - break; - - case 'top': - dy = this._font.ascender; - break; - - default: - dy = this._font.ascender; - } - - dy = dy / 1000 * this._fontSize; - } // calculate the actual rendered width of the string after word and character spacing - - - var renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); // create link annotations if the link option is given - - if (options.link != null) { - this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); - } - - if (options.goTo != null) { - this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo); - } - - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } // create underline - - - if (options.underline) { - this.save(); - - if (!options.stroke) { - this.strokeColor.apply(this, _toConsumableArray(this._fillColor || [])); - } - - var lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - var lineY = y + this.currentLineHeight() - lineWidth; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } // create strikethrough line - - - if (options.strike) { - this.save(); - - if (!options.stroke) { - this.strokeColor.apply(this, _toConsumableArray(this._fillColor || [])); - } - - var _lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - - this.lineWidth(_lineWidth); - - var _lineY = y + this.currentLineHeight() / 2; - - this.moveTo(x, _lineY); - this.lineTo(x + renderedWidth, _lineY); - this.stroke(); - this.restore(); - } - - this.save(); // oblique (angle in degrees or boolean) - - if (options.oblique) { - var skew; - - if (typeof options.oblique === 'number') { - skew = -Math.tan(options.oblique * Math.PI / 180); - } else { - skew = -0.25; - } - - this.transform(1, 0, 0, 1, x, y); - this.transform(1, 0, skew, 1, -skew * dy, 0); - this.transform(1, 0, 0, 1, -x, -y); - } // flip coordinate system - - - this.transform(1, 0, 0, -1, 0, this.page.height); - y = this.page.height - y - dy; // add current font to page if necessary - - if (this.page.fonts[this._font.id] == null) { - this.page.fonts[this._font.id] = this._font.ref(); - } // begin the text object - - - this.addContent('BT'); // text position - - this.addContent("1 0 0 1 ".concat(number$2(x), " ").concat(number$2(y), " Tm")); // font and font size - - this.addContent("/".concat(this._font.id, " ").concat(number$2(this._fontSize), " Tf")); // rendering mode - - var mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; - - if (mode) { - this.addContent("".concat(mode, " Tr")); - } // Character spacing - - - if (characterSpacing) { - this.addContent("".concat(number$2(characterSpacing), " Tc")); - } // Add the actual text - // If we have a word spacing value, we need to encode each word separately - // since the normal Tw operator only works on character code 32, which isn't - // used for embedded fonts. - - - if (wordSpacing) { - words = text.trim().split(/\s+/); - wordSpacing += this.widthOfString(' ') + characterSpacing; - wordSpacing *= 1000 / this._fontSize; - encoded = []; - positions = []; - - var _iterator2 = _createForOfIteratorHelper(words), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var word = _step2.value; - - var _this$_font$encode = this._font.encode(word, options.features), - _this$_font$encode2 = _slicedToArray(_this$_font$encode, 2), - encodedWord = _this$_font$encode2[0], - positionsWord = _this$_font$encode2[1]; - - encoded = encoded.concat(encodedWord); - positions = positions.concat(positionsWord); // add the word spacing to the end of the word - // clone object because of cache - - var space = {}; - var object = positions[positions.length - 1]; - - for (var key in object) { - var val = object[key]; - space[key] = val; - } - - space.xAdvance += wordSpacing; - positions[positions.length - 1] = space; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } else { - var _this$_font$encode3 = this._font.encode(text, options.features); - - var _this$_font$encode4 = _slicedToArray(_this$_font$encode3, 2); - - encoded = _this$_font$encode4[0]; - positions = _this$_font$encode4[1]; - } - - var scale = this._fontSize / 1000; - var commands = []; - var last = 0; - var hadOffset = false; // Adds a segment of text to the TJ command buffer - - var addSegment = function addSegment(cur) { - if (last < cur) { - var hex = encoded.slice(last, cur).join(''); - var advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; - commands.push("<".concat(hex, "> ").concat(number$2(-advance))); - } - - return last = cur; - }; // Flushes the current TJ commands to the output stream - - - var flush = function flush(i) { - addSegment(i); - - if (commands.length > 0) { - _this4.addContent("[".concat(commands.join(' '), "] TJ")); - - return commands.length = 0; - } - }; - - for (i = 0; i < positions.length; i++) { - // If we have an x or y offset, we have to break out of the current TJ command - // so we can move the text position. - var pos = positions[i]; - - if (pos.xOffset || pos.yOffset) { - // Flush the current buffer - flush(i); // Move the text position and flush just the current character - - this.addContent("1 0 0 1 ".concat(number$2(x + pos.xOffset * scale), " ").concat(number$2(y + pos.yOffset * scale), " Tm")); - flush(i + 1); - hadOffset = true; - } else { - // If the last character had an offset, reset the text position - if (hadOffset) { - this.addContent("1 0 0 1 ".concat(number$2(x), " ").concat(number$2(y), " Tm")); - hadOffset = false; - } // Group segments that don't have any advance adjustments - - - if (pos.xAdvance - pos.advanceWidth !== 0) { - addSegment(i + 1); - } - } - - x += pos.xAdvance * scale; - } // Flush any remaining commands - - - flush(i); // end the text object - - this.addContent('ET'); // restore flipped coordinate system - - return this.restore(); - } -}; - -var MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf]; -var COLOR_SPACE_MAP = { - 1: 'DeviceGray', - 3: 'DeviceRGB', - 4: 'DeviceCMYK' -}; - -var JPEG = /*#__PURE__*/function () { - function JPEG(data, label) { - _classCallCheck(this, JPEG); - - var marker; - this.data = data; - this.label = label; - - if (this.data.readUInt16BE(0) !== 0xffd8) { - throw 'SOI not found in JPEG'; - } // Parse the EXIF orientation - - - this.orientation = exif.fromBuffer(this.data).Orientation || 1; - var pos = 2; - - while (pos < this.data.length) { - marker = this.data.readUInt16BE(pos); - pos += 2; - - if (MARKERS.includes(marker)) { - break; - } - - pos += this.data.readUInt16BE(pos); - } - - if (!MARKERS.includes(marker)) { - throw 'Invalid JPEG.'; - } - - pos += 2; - this.bits = this.data[pos++]; - this.height = this.data.readUInt16BE(pos); - pos += 2; - this.width = this.data.readUInt16BE(pos); - pos += 2; - var channels = this.data[pos++]; - this.colorSpace = COLOR_SPACE_MAP[channels]; - this.obj = null; - } - - _createClass(JPEG, [{ - key: "embed", - value: function embed(document) { - if (this.obj) { - return; - } - - this.obj = document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: this.bits, - Width: this.width, - Height: this.height, - ColorSpace: this.colorSpace, - Filter: 'DCTDecode' - }); // add extra decode params for CMYK images. By swapping the - // min and max values from the default, we invert the colors. See - // section 4.8.4 of the spec. - - if (this.colorSpace === 'DeviceCMYK') { - this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; - } - - this.obj.end(this.data); // free memory - - return this.data = null; - } - }]); - - return JPEG; -}(); - -var PNGImage = /*#__PURE__*/function () { - function PNGImage(data, label) { - _classCallCheck(this, PNGImage); - - this.label = label; - this.image = new PNG(data); - this.width = this.image.width; - this.height = this.image.height; - this.imgData = this.image.imgData; - this.obj = null; - } - - _createClass(PNGImage, [{ - key: "embed", - value: function embed(document) { - var dataDecoded = false; - this.document = document; - - if (this.obj) { - return; - } - - var hasAlphaChannel = this.image.hasAlphaChannel; - var isInterlaced = this.image.interlaceMethod === 1; - this.obj = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits, - Width: this.width, - Height: this.height, - Filter: 'FlateDecode' - }); - - if (!hasAlphaChannel) { - var params = this.document.ref({ - Predictor: isInterlaced ? 1 : 15, - Colors: this.image.colors, - BitsPerComponent: this.image.bits, - Columns: this.width - }); - this.obj.data['DecodeParms'] = params; - params.end(); - } - - if (this.image.palette.length === 0) { - this.obj.data['ColorSpace'] = this.image.colorSpace; - } else { - // embed the color palette in the PDF as an object stream - var palette = this.document.ref(); - palette.end(Buffer.from(this.image.palette)); // build the color space array for the image - - this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette]; - } // For PNG color types 0, 2 and 3, the transparency data is stored in - // a dedicated PNG chunk. - - - if (this.image.transparency.grayscale != null) { - // Use Color Key Masking (spec section 4.8.5) - // An array with N elements, where N is two times the number of color components. - var val = this.image.transparency.grayscale; - this.obj.data['Mask'] = [val, val]; - } else if (this.image.transparency.rgb) { - // Use Color Key Masking (spec section 4.8.5) - // An array with N elements, where N is two times the number of color components. - var rgb = this.image.transparency.rgb; - var mask = []; - - var _iterator = _createForOfIteratorHelper(rgb), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var x = _step.value; - mask.push(x, x); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - this.obj.data['Mask'] = mask; - } else if (this.image.transparency.indexed) { - // Create a transparency SMask for the image based on the data - // in the PLTE and tRNS sections. See below for details on SMasks. - dataDecoded = true; - return this.loadIndexedAlphaChannel(); - } else if (hasAlphaChannel) { - // For PNG color types 4 and 6, the transparency data is stored as a alpha - // channel mixed in with the main image data. Separate this data out into an - // SMask object and store it separately in the PDF. - dataDecoded = true; - return this.splitAlphaChannel(); - } - - if (isInterlaced && !dataDecoded) { - return this.decodeData(); - } - - this.finalize(); - } - }, { - key: "finalize", - value: function finalize() { - if (this.alphaChannel) { - var sMask = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - Height: this.height, - Width: this.width, - BitsPerComponent: 8, - Filter: 'FlateDecode', - ColorSpace: 'DeviceGray', - Decode: [0, 1] - }); - sMask.end(this.alphaChannel); - this.obj.data['SMask'] = sMask; - } // add the actual image data - - - this.obj.end(this.imgData); // free memory - - this.image = null; - return this.imgData = null; - } - }, { - key: "splitAlphaChannel", - value: function splitAlphaChannel() { - var _this = this; - - return this.image.decodePixels(function (pixels) { - var a, p; - var colorCount = _this.image.colors; - var pixelCount = _this.width * _this.height; - var imgData = Buffer.alloc(pixelCount * colorCount); - var alphaChannel = Buffer.alloc(pixelCount); - var i = p = a = 0; - var len = pixels.length; // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first) - - var skipByteCount = _this.image.bits === 16 ? 1 : 0; - - while (i < len) { - for (var colorIndex = 0; colorIndex < colorCount; colorIndex++) { - imgData[p++] = pixels[i++]; - i += skipByteCount; - } - - alphaChannel[a++] = pixels[i++]; - i += skipByteCount; - } - - _this.imgData = zlib.deflateSync(imgData); - _this.alphaChannel = zlib.deflateSync(alphaChannel); - return _this.finalize(); - }); - } - }, { - key: "loadIndexedAlphaChannel", - value: function loadIndexedAlphaChannel() { - var _this2 = this; - - var transparency = this.image.transparency.indexed; - return this.image.decodePixels(function (pixels) { - var alphaChannel = Buffer.alloc(_this2.width * _this2.height); - var i = 0; - - for (var j = 0, end = pixels.length; j < end; j++) { - alphaChannel[i++] = transparency[pixels[j]]; - } - - _this2.alphaChannel = zlib.deflateSync(alphaChannel); - return _this2.finalize(); - }); - } - }, { - key: "decodeData", - value: function decodeData() { - var _this3 = this; - - this.image.decodePixels(function (pixels) { - _this3.imgData = zlib.deflateSync(pixels); - - _this3.finalize(); - }); - } - }]); - - return PNGImage; -}(); - -var PDFImage = /*#__PURE__*/function () { - function PDFImage() { - _classCallCheck(this, PDFImage); - } - - _createClass(PDFImage, null, [{ - key: "open", - value: function open(src, label) { - var data; - - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - var match; - - if (match = /^data:.+?;base64,(.*)$/.exec(src)) { - data = Buffer.from(match[1], 'base64'); - } else { - data = fs.readFileSync(src); - - if (!data) { - return; - } - } - } - - if (data[0] === 0xff && data[1] === 0xd8) { - return new JPEG(data, label); - } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { - return new PNGImage(data, label); - } else { - throw new Error('Unknown image format.'); - } - } - }]); - - return PDFImage; -}(); - -var ImagesMixin = { - initImages: function initImages() { - this._imageRegistry = {}; - return this._imageCount = 0; - }, - image: function image(src, x, y) { - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - var bh, bp, bw, image, ip, left, left1, rotateAngle, originX, originY; - - if (typeof x === 'object') { - options = x; - x = null; - } // Ignore orientation based on document options or image options - - - var ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation; - x = (left = x != null ? x : options.x) != null ? left : this.x; - y = (left1 = y != null ? y : options.y) != null ? left1 : this.y; - - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - - if (!image) { - if (src.width && src.height) { - image = src; - } else { - image = this.openImage(src); - } - } - - if (!image.obj) { - image.embed(this); - } - - if (this.page.xobjects[image.label] == null) { - this.page.xobjects[image.label] = image.obj; - } - - var _image = image, - width = _image.width, - height = _image.height; // If EXIF orientation calls for it, swap width and height - - if (!ignoreOrientation && image.orientation > 4) { - var _ref = [height, width]; - width = _ref[0]; - height = _ref[1]; - } - - var w = options.width || width; - var h = options.height || height; - - if (options.width && !options.height) { - var wp = w / width; - w = width * wp; - h = height * wp; - } else if (options.height && !options.width) { - var hp = h / height; - w = width * hp; - h = height * hp; - } else if (options.scale) { - w = width * options.scale; - h = height * options.scale; - } else if (options.fit) { - var _options$fit = _slicedToArray(options.fit, 2); - - bw = _options$fit[0]; - bh = _options$fit[1]; - bp = bw / bh; - ip = width / height; - - if (ip > bp) { - w = bw; - h = bw / ip; - } else { - h = bh; - w = bh * ip; - } - } else if (options.cover) { - var _options$cover = _slicedToArray(options.cover, 2); - - bw = _options$cover[0]; - bh = _options$cover[1]; - bp = bw / bh; - ip = width / height; - - if (ip > bp) { - h = bh; - w = bh * ip; - } else { - w = bw; - h = bw / ip; - } - } - - if (options.fit || options.cover) { - if (options.align === 'center') { - x = x + bw / 2 - w / 2; - } else if (options.align === 'right') { - x = x + bw - w; - } - - if (options.valign === 'center') { - y = y + bh / 2 - h / 2; - } else if (options.valign === 'bottom') { - y = y + bh - h; - } - } - - if (!ignoreOrientation) { - switch (image.orientation) { - // No orientation (need to flip image, though, because of the default transform matrix on the document) - default: - case 1: - h = -h; - y -= h; - rotateAngle = 0; - break; - // Flip Horizontal - - case 2: - w = -w; - h = -h; - x -= w; - y -= h; - rotateAngle = 0; - break; - // Rotate 180 degrees - - case 3: - originX = x; - originY = y; - h = -h; - x -= w; - rotateAngle = 180; - break; - // Flip vertical - - case 4: - // Do nothing, image will be flipped - break; - // Flip horizontally and rotate 270 degrees CW - - case 5: - originX = x; - originY = y; - var _ref2 = [h, w]; - w = _ref2[0]; - h = _ref2[1]; - y -= h; - rotateAngle = 90; - break; - // Rotate 90 degrees CW - - case 6: - originX = x; - originY = y; - var _ref3 = [h, w]; - w = _ref3[0]; - h = _ref3[1]; - h = -h; - rotateAngle = 90; - break; - // Flip horizontally and rotate 90 degrees CW - - case 7: - originX = x; - originY = y; - var _ref4 = [h, w]; - w = _ref4[0]; - h = _ref4[1]; - h = -h; - w = -w; - x -= w; - rotateAngle = 90; - break; - // Rotate 270 degrees CW - - case 8: - originX = x; - originY = y; - var _ref5 = [h, w]; - w = _ref5[0]; - h = _ref5[1]; - h = -h; - x -= w; - y -= h; - rotateAngle = -90; - break; - } - } else { - h = -h; - y -= h; - rotateAngle = 0; - } // create link annotations if the link option is given - - - if (options.link != null) { - this.link(x, y, w, h, options.link); - } - - if (options.goTo != null) { - this.goTo(x, y, w, h, options.goTo); - } - - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } // Set the current y position to below the image if it is in the document flow - - - if (this.y === y) { - this.y += h; - } - - this.save(); - - if (rotateAngle) { - this.rotate(rotateAngle, { - origin: [originX, originY] - }); - } - - this.transform(w, 0, 0, h, x, y); - this.addContent("/".concat(image.label, " Do")); - this.restore(); - return this; - }, - openImage: function openImage(src) { - var image; - - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - - if (!image) { - image = PDFImage.open(src, "I".concat(++this._imageCount)); - - if (typeof src === 'string') { - this._imageRegistry[src] = image; - } - } - - return image; - } -}; - -var AnnotationsMixin = { - annotate: function annotate(x, y, w, h, options) { - options.Type = 'Annot'; - options.Rect = this._convertRect(x, y, w, h); - options.Border = [0, 0, 0]; - - if (options.Subtype === 'Link' && typeof options.F === 'undefined') { - options.F = 1 << 2; // Print Annotation Flag - } - - if (options.Subtype !== 'Link') { - if (options.C == null) { - options.C = this._normalizeColor(options.color || [0, 0, 0]); - } - } // convert colors - - - delete options.color; - - if (typeof options.Dest === 'string') { - options.Dest = new String(options.Dest); - } // Capitalize keys - - - for (var key in options) { - var val = options[key]; - options[key[0].toUpperCase() + key.slice(1)] = val; - } - - var ref = this.ref(options); - this.page.annotations.push(ref); - ref.end(); - return this; - }, - note: function note(x, y, w, h, contents) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Text'; - options.Contents = new String(contents); - options.Name = 'Comment'; - - if (options.color == null) { - options.color = [243, 223, 92]; - } - - return this.annotate(x, y, w, h, options); - }, - goTo: function goTo(x, y, w, h, name) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - options.A = this.ref({ - S: 'GoTo', - D: new String(name) - }); - options.A.end(); - return this.annotate(x, y, w, h, options); - }, - link: function link(x, y, w, h, url) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - - if (typeof url === 'number') { - // Link to a page in the document (the page must already exist) - var pages = this._root.data.Pages.data; - - if (url >= 0 && url < pages.Kids.length) { - options.A = this.ref({ - S: 'GoTo', - D: [pages.Kids[url], 'XYZ', null, null, null] - }); - options.A.end(); - } else { - throw new Error("The document has no page ".concat(url)); - } - } else { - // Link to an external url - options.A = this.ref({ - S: 'URI', - URI: new String(url) - }); - options.A.end(); - } - - return this.annotate(x, y, w, h, options); - }, - _markup: function _markup(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - - var _this$_convertRect = this._convertRect(x, y, w, h), - _this$_convertRect2 = _slicedToArray(_this$_convertRect, 4), - x1 = _this$_convertRect2[0], - y1 = _this$_convertRect2[1], - x2 = _this$_convertRect2[2], - y2 = _this$_convertRect2[3]; - - options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - highlight: function highlight(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Highlight'; - - if (options.color == null) { - options.color = [241, 238, 148]; - } - - return this._markup(x, y, w, h, options); - }, - underline: function underline(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Underline'; - return this._markup(x, y, w, h, options); - }, - strike: function strike(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'StrikeOut'; - return this._markup(x, y, w, h, options); - }, - lineAnnotation: function lineAnnotation(x1, y1, x2, y2) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Line'; - options.Contents = new String(); - options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; - return this.annotate(x1, y1, x2, y2, options); - }, - rectAnnotation: function rectAnnotation(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Square'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - ellipseAnnotation: function ellipseAnnotation(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Circle'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - textAnnotation: function textAnnotation(x, y, w, h, text) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'FreeText'; - options.Contents = new String(text); - options.DA = new String(); - return this.annotate(x, y, w, h, options); - }, - fileAnnotation: function fileAnnotation(x, y, w, h) { - var file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - // create hidden file - var filespec = this.file(file.src, Object.assign({ - hidden: true - }, file)); - options.Subtype = 'FileAttachment'; - options.FS = filespec; // add description from filespec unless description (Contents) has already been set - - if (options.Contents) { - options.Contents = new String(options.Contents); - } else if (filespec.data.Desc) { - options.Contents = filespec.data.Desc; - } - - return this.annotate(x, y, w, h, options); - }, - _convertRect: function _convertRect(x1, y1, w, h) { - // flip y1 and y2 - var y2 = y1; - y1 += h; // make x2 - - var x2 = x1 + w; // apply current transformation matrix to points - - var _this$_ctm = _slicedToArray(this._ctm, 6), - m0 = _this$_ctm[0], - m1 = _this$_ctm[1], - m2 = _this$_ctm[2], - m3 = _this$_ctm[3], - m4 = _this$_ctm[4], - m5 = _this$_ctm[5]; - - x1 = m0 * x1 + m2 * y1 + m4; - y1 = m1 * x1 + m3 * y1 + m5; - x2 = m0 * x2 + m2 * y2 + m4; - y2 = m1 * x2 + m3 * y2 + m5; - return [x1, y1, x2, y2]; - } -}; - -var PDFOutline = /*#__PURE__*/function () { - function PDFOutline(document, parent, title, dest) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { - expanded: false - }; - - _classCallCheck(this, PDFOutline); - - this.document = document; - this.options = options; - this.outlineData = {}; - - if (dest !== null) { - this.outlineData['Dest'] = [dest.dictionary, 'Fit']; - } - - if (parent !== null) { - this.outlineData['Parent'] = parent; - } - - if (title !== null) { - this.outlineData['Title'] = new String(title); - } - - this.dictionary = this.document.ref(this.outlineData); - this.children = []; - } - - _createClass(PDFOutline, [{ - key: "addItem", - value: function addItem(title) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { - expanded: false - }; - var result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options); - this.children.push(result); - return result; - } - }, { - key: "endOutline", - value: function endOutline() { - if (this.children.length > 0) { - if (this.options.expanded) { - this.outlineData.Count = this.children.length; - } - - var first = this.children[0], - last = this.children[this.children.length - 1]; - this.outlineData.First = first.dictionary; - this.outlineData.Last = last.dictionary; - - for (var i = 0, len = this.children.length; i < len; i++) { - var child = this.children[i]; - - if (i > 0) { - child.outlineData.Prev = this.children[i - 1].dictionary; - } - - if (i < this.children.length - 1) { - child.outlineData.Next = this.children[i + 1].dictionary; - } - - child.endOutline(); - } - } - - return this.dictionary.end(); - } - }]); - - return PDFOutline; -}(); - -var OutlineMixin = { - initOutline: function initOutline() { - return this.outline = new PDFOutline(this, null, null, null); - }, - endOutline: function endOutline() { - this.outline.endOutline(); - - if (this.outline.children.length > 0) { - this._root.data.Outlines = this.outline.dictionary; - return this._root.data.PageMode = 'UseOutlines'; - } - } -}; - -/* -PDFStructureContent - a reference to a marked structure content -By Ben Schmidt -*/ -var PDFStructureContent = /*#__PURE__*/function () { - function PDFStructureContent(pageRef, mcid) { - _classCallCheck(this, PDFStructureContent); - - this.refs = [{ - pageRef: pageRef, - mcid: mcid - }]; - } - - _createClass(PDFStructureContent, [{ - key: "push", - value: function push(structContent) { - var _this = this; - - structContent.refs.forEach(function (ref) { - return _this.refs.push(ref); - }); - } - }]); - - return PDFStructureContent; -}(); - -var PDFStructureElement = /*#__PURE__*/function () { - function PDFStructureElement(document, type) { - var _this = this; - - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - - _classCallCheck(this, PDFStructureElement); - - this.document = document; - this._attached = false; - this._ended = false; - this._flushed = false; - this.dictionary = document.ref({ - // Type: "StructElem", - S: type - }); - var data = this.dictionary.data; - - if (Array.isArray(options) || this._isValidChild(options)) { - children = options; - options = {}; - } - - if (typeof options.title !== 'undefined') { - data.T = new String(options.title); - } - - if (typeof options.lang !== 'undefined') { - data.Lang = new String(options.lang); - } - - if (typeof options.alt !== 'undefined') { - data.Alt = new String(options.alt); - } - - if (typeof options.expanded !== 'undefined') { - data.E = new String(options.expanded); - } - - if (typeof options.actual !== 'undefined') { - data.ActualText = new String(options.actual); - } - - this._children = []; - - if (children) { - if (!Array.isArray(children)) { - children = [children]; - } - - children.forEach(function (child) { - return _this.add(child); - }); - this.end(); - } - } - - _createClass(PDFStructureElement, [{ - key: "add", - value: function add(child) { - if (this._ended) { - throw new Error("Cannot add child to already-ended structure element"); - } - - if (!this._isValidChild(child)) { - throw new Error("Invalid structure element child"); - } - - if (child instanceof PDFStructureElement) { - child.setParent(this.dictionary); - - if (this._attached) { - child.setAttached(); - } - } - - if (child instanceof PDFStructureContent) { - this._addContentToParentTree(child); - } - - if (typeof child === 'function' && this._attached) { - // _contentForClosure() adds the content to the parent tree - child = this._contentForClosure(child); - } - - this._children.push(child); - - return this; - } - }, { - key: "_addContentToParentTree", - value: function _addContentToParentTree(content) { - var _this2 = this; - - content.refs.forEach(function (_ref) { - var pageRef = _ref.pageRef, - mcid = _ref.mcid; - - var pageStructParents = _this2.document.getStructParentTree().get(pageRef.data.StructParents); - - pageStructParents[mcid] = _this2.dictionary; - }); - } - }, { - key: "setParent", - value: function setParent(parentRef) { - if (this.dictionary.data.P) { - throw new Error("Structure element added to more than one parent"); - } - - this.dictionary.data.P = parentRef; - - this._flush(); - } - }, { - key: "setAttached", - value: function setAttached() { - var _this3 = this; - - if (this._attached) { - return; - } - - this._children.forEach(function (child, index) { - if (child instanceof PDFStructureElement) { - child.setAttached(); - } - - if (typeof child === 'function') { - _this3._children[index] = _this3._contentForClosure(child); - } - }); - - this._attached = true; - - this._flush(); - } - }, { - key: "end", - value: function end() { - if (this._ended) { - return; - } - - this._children.filter(function (child) { - return child instanceof PDFStructureElement; - }).forEach(function (child) { - return child.end(); - }); - - this._ended = true; - - this._flush(); - } - }, { - key: "_isValidChild", - value: function _isValidChild(child) { - return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function'; - } - }, { - key: "_contentForClosure", - value: function _contentForClosure(closure) { - var content = this.document.markStructureContent(this.dictionary.data.S); - closure(); - this.document.endMarkedContent(); - - this._addContentToParentTree(content); - - return content; - } - }, { - key: "_isFlushable", - value: function _isFlushable() { - if (!this.dictionary.data.P || !this._ended) { - return false; - } - - return this._children.every(function (child) { - if (typeof child === 'function') { - return false; - } - - if (child instanceof PDFStructureElement) { - return child._isFlushable(); - } - - return true; - }); - } - }, { - key: "_flush", - value: function _flush() { - var _this4 = this; - - if (this._flushed || !this._isFlushable()) { - return; - } - - this.dictionary.data.K = []; - - this._children.forEach(function (child) { - return _this4._flushChild(child); - }); - - this.dictionary.end(); // free memory used by children; the dictionary itself may still be - // referenced by a parent structure element or root, but we can - // at least trim the tree here - - this._children = []; - this.dictionary.data.K = null; - this._flushed = true; - } - }, { - key: "_flushChild", - value: function _flushChild(child) { - var _this5 = this; - - if (child instanceof PDFStructureElement) { - this.dictionary.data.K.push(child.dictionary); - } - - if (child instanceof PDFStructureContent) { - child.refs.forEach(function (_ref2) { - var pageRef = _ref2.pageRef, - mcid = _ref2.mcid; - - if (!_this5.dictionary.data.Pg) { - _this5.dictionary.data.Pg = pageRef; - } - - if (_this5.dictionary.data.Pg === pageRef) { - _this5.dictionary.data.K.push(mcid); - } else { - _this5.dictionary.data.K.push({ - Type: "MCR", - Pg: pageRef, - MCID: mcid - }); - } - }); - } - } - }]); - - return PDFStructureElement; -}(); - -var PDFNumberTree = /*#__PURE__*/function (_PDFTree) { - _inherits(PDFNumberTree, _PDFTree); - - var _super = _createSuper(PDFNumberTree); - - function PDFNumberTree() { - _classCallCheck(this, PDFNumberTree); - - return _super.apply(this, arguments); - } - - _createClass(PDFNumberTree, [{ - key: "_compareKeys", - value: function _compareKeys(a, b) { - return parseInt(a) - parseInt(b); - } - }, { - key: "_keysName", - value: function _keysName() { - return "Nums"; - } - }, { - key: "_dataForKey", - value: function _dataForKey(k) { - return parseInt(k); - } - }]); - - return PDFNumberTree; -}(PDFTree); - -var MarkingsMixin = { - initMarkings: function initMarkings(options) { - this.structChildren = []; - - if (options.tagged) { - this.getMarkInfoDictionary().data.Marked = true; - this.getStructTreeRoot(); - } - }, - markContent: function markContent(tag) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - if (tag === 'Artifact' || options && options.mcid) { - var toClose = 0; - this.page.markings.forEach(function (marking) { - if (toClose || marking.structContent || marking.tag === 'Artifact') { - toClose++; - } - }); - - while (toClose--) { - this.endMarkedContent(); - } - } - - if (!options) { - this.page.markings.push({ - tag: tag - }); - this.addContent("/".concat(tag, " BMC")); - return this; - } - - this.page.markings.push({ - tag: tag, - options: options - }); - var dictionary = {}; - - if (typeof options.mcid !== 'undefined') { - dictionary.MCID = options.mcid; - } - - if (tag === 'Artifact') { - if (typeof options.type === 'string') { - dictionary.Type = options.type; - } - - if (Array.isArray(options.bbox)) { - dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]]; - } - - if (Array.isArray(options.attached) && options.attached.every(function (val) { - return typeof val === 'string'; - })) { - dictionary.Attached = options.attached; - } - } - - if (tag === 'Span') { - if (options.lang) { - dictionary.Lang = new String(options.lang); - } - - if (options.alt) { - dictionary.Alt = new String(options.alt); - } - - if (options.expanded) { - dictionary.E = new String(options.expanded); - } - - if (options.actual) { - dictionary.ActualText = new String(options.actual); - } - } - - this.addContent("/".concat(tag, " ").concat(PDFObject.convert(dictionary), " BDC")); - return this; - }, - markStructureContent: function markStructureContent(tag) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey); - var mcid = pageStructParents.length; - pageStructParents.push(null); - this.markContent(tag, _objectSpread2(_objectSpread2({}, options), {}, { - mcid: mcid - })); - var structContent = new PDFStructureContent(this.page.dictionary, mcid); - this.page.markings.slice(-1)[0].structContent = structContent; - return structContent; - }, - endMarkedContent: function endMarkedContent() { - this.page.markings.pop(); - this.addContent('EMC'); - return this; - }, - struct: function struct(type) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - return new PDFStructureElement(this, type, options, children); - }, - addStructure: function addStructure(structElem) { - var structTreeRoot = this.getStructTreeRoot(); - structElem.setParent(structTreeRoot); - structElem.setAttached(); - this.structChildren.push(structElem); - - if (!structTreeRoot.data.K) { - structTreeRoot.data.K = []; - } - - structTreeRoot.data.K.push(structElem.dictionary); - return this; - }, - initPageMarkings: function initPageMarkings(pageMarkings) { - var _this = this; - - pageMarkings.forEach(function (marking) { - if (marking.structContent) { - var structContent = marking.structContent; - - var newStructContent = _this.markStructureContent(marking.tag, marking.options); - - structContent.push(newStructContent); - _this.page.markings.slice(-1)[0].structContent = structContent; - } else { - _this.markContent(marking.tag, marking.options); - } - }); - }, - endPageMarkings: function endPageMarkings(page) { - var pageMarkings = page.markings; - pageMarkings.forEach(function () { - return page.write('EMC'); - }); - page.markings = []; - return pageMarkings; - }, - getMarkInfoDictionary: function getMarkInfoDictionary() { - if (!this._root.data.MarkInfo) { - this._root.data.MarkInfo = this.ref({}); - } - - return this._root.data.MarkInfo; - }, - getStructTreeRoot: function getStructTreeRoot() { - if (!this._root.data.StructTreeRoot) { - this._root.data.StructTreeRoot = this.ref({ - Type: 'StructTreeRoot', - ParentTree: new PDFNumberTree(), - ParentTreeNextKey: 0 - }); - } - - return this._root.data.StructTreeRoot; - }, - getStructParentTree: function getStructParentTree() { - return this.getStructTreeRoot().data.ParentTree; - }, - createStructParentTreeNextKey: function createStructParentTreeNextKey() { - // initialise the MarkInfo dictionary - this.getMarkInfoDictionary(); - var structTreeRoot = this.getStructTreeRoot(); - var key = structTreeRoot.data.ParentTreeNextKey++; - structTreeRoot.data.ParentTree.add(key, []); - return key; - }, - endMarkings: function endMarkings() { - var structTreeRoot = this._root.data.StructTreeRoot; - - if (structTreeRoot) { - structTreeRoot.end(); - this.structChildren.forEach(function (structElem) { - return structElem.end(); - }); - } - - if (this._root.data.MarkInfo) { - this._root.data.MarkInfo.end(); - } - } -}; - -var FIELD_FLAGS = { - readOnly: 1, - required: 2, - noExport: 4, - multiline: 0x1000, - password: 0x2000, - toggleToOffButton: 0x4000, - radioButton: 0x8000, - pushButton: 0x10000, - combo: 0x20000, - edit: 0x40000, - sort: 0x80000, - multiSelect: 0x200000, - noSpell: 0x400000 -}; -var FIELD_JUSTIFY = { - left: 0, - center: 1, - right: 2 -}; -var VALUE_MAP = { - value: 'V', - defaultValue: 'DV' -}; -var FORMAT_SPECIAL = { - zip: '0', - zipPlus4: '1', - zip4: '1', - phone: '2', - ssn: '3' -}; -var FORMAT_DEFAULT = { - number: { - nDec: 0, - sepComma: false, - negStyle: 'MinusBlack', - currency: '', - currencyPrepend: true - }, - percent: { - nDec: 0, - sepComma: false - } -}; -var AcroFormMixin = { - /** - * Must call if adding AcroForms to a document. Must also call font() before - * this method to set the default font. - */ - initForm: function initForm() { - if (!this._font) { - throw new Error('Must set a font before calling initForm method'); - } - - this._acroform = { - fonts: {}, - defaultFont: this._font.name - }; - this._acroform.fonts[this._font.id] = this._font.ref(); - var data = { - Fields: [], - NeedAppearances: true, - DA: new String("/".concat(this._font.id, " 0 Tf 0 g")), - DR: { - Font: {} - } - }; - data.DR.Font[this._font.id] = this._font.ref(); - var AcroForm = this.ref(data); - this._root.data.AcroForm = AcroForm; - return this; - }, - - /** - * Called automatically by document.js - */ - endAcroForm: function endAcroForm() { - var _this = this; - - if (this._root.data.AcroForm) { - if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) { - throw new Error('No fonts specified for PDF form'); - } - - var fontDict = this._root.data.AcroForm.data.DR.Font; - Object.keys(this._acroform.fonts).forEach(function (name) { - fontDict[name] = _this._acroform.fonts[name]; - }); - - this._root.data.AcroForm.data.Fields.forEach(function (fieldRef) { - _this._endChild(fieldRef); - }); - - this._root.data.AcroForm.end(); - } - - return this; - }, - _endChild: function _endChild(ref) { - var _this2 = this; - - if (Array.isArray(ref.data.Kids)) { - ref.data.Kids.forEach(function (childRef) { - _this2._endChild(childRef); - }); - ref.end(); - } - - return this; - }, - - /** - * Creates and adds a form field to the document. Form fields are intermediate - * nodes in a PDF form that are used to specify form name heirarchy and form - * value defaults. - * @param {string} name - field name (T attribute in field dictionary) - * @param {object} options - other attributes to include in field dictionary - */ - formField: function formField(name) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var fieldDict = this._fieldDict(name, null, options); - - var fieldRef = this.ref(fieldDict); - - this._addToParent(fieldRef); - - return fieldRef; - }, - - /** - * Creates and adds a Form Annotation to the document. Form annotations are - * called Widget annotations internally within a PDF file. - * @param {string} name - form field name (T attribute of widget annotation - * dictionary) - * @param {number} x - * @param {number} y - * @param {number} w - * @param {number} h - * @param {object} options - */ - formAnnotation: function formAnnotation(name, type, x, y, w, h) { - var options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; - - var fieldDict = this._fieldDict(name, type, options); - - fieldDict.Subtype = 'Widget'; - - if (fieldDict.F === undefined) { - fieldDict.F = 4; // print the annotation - } // Add Field annot to page, and get it's ref - - - this.annotate(x, y, w, h, fieldDict); - var annotRef = this.page.annotations[this.page.annotations.length - 1]; - return this._addToParent(annotRef); - }, - formText: function formText(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'text', x, y, w, h, options); - }, - formPushButton: function formPushButton(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'pushButton', x, y, w, h, options); - }, - formCombo: function formCombo(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'combo', x, y, w, h, options); - }, - formList: function formList(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'list', x, y, w, h, options); - }, - formRadioButton: function formRadioButton(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'radioButton', x, y, w, h, options); - }, - formCheckbox: function formCheckbox(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'checkbox', x, y, w, h, options); - }, - _addToParent: function _addToParent(fieldRef) { - var parent = fieldRef.data.Parent; - - if (parent) { - if (!parent.data.Kids) { - parent.data.Kids = []; - } - - parent.data.Kids.push(fieldRef); - } else { - this._root.data.AcroForm.data.Fields.push(fieldRef); - } - - return this; - }, - _fieldDict: function _fieldDict(name, type) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (!this._acroform) { - throw new Error('Call document.initForms() method before adding form elements to document'); - } - - var opts = Object.assign({}, options); - - if (type !== null) { - opts = this._resolveType(type, options); - } - - opts = this._resolveFlags(opts); - opts = this._resolveJustify(opts); - opts = this._resolveFont(opts); - opts = this._resolveStrings(opts); - opts = this._resolveColors(opts); - opts = this._resolveFormat(opts); - opts.T = new String(name); - - if (opts.parent) { - opts.Parent = opts.parent; - delete opts.parent; - } - - return opts; - }, - _resolveType: function _resolveType(type, opts) { - if (type === 'text') { - opts.FT = 'Tx'; - } else if (type === 'pushButton') { - opts.FT = 'Btn'; - opts.pushButton = true; - } else if (type === 'radioButton') { - opts.FT = 'Btn'; - opts.radioButton = true; - } else if (type === 'checkbox') { - opts.FT = 'Btn'; - } else if (type === 'combo') { - opts.FT = 'Ch'; - opts.combo = true; - } else if (type === 'list') { - opts.FT = 'Ch'; - } else { - throw new Error("Invalid form annotation type '".concat(type, "'")); - } - - return opts; - }, - _resolveFormat: function _resolveFormat(opts) { - var f = opts.format; - - if (f && f.type) { - var fnKeystroke; - var fnFormat; - var params = ''; - - if (FORMAT_SPECIAL[f.type] !== undefined) { - fnKeystroke = "AFSpecial_Keystroke"; - fnFormat = "AFSpecial_Format"; - params = FORMAT_SPECIAL[f.type]; - } else { - var format = f.type.charAt(0).toUpperCase() + f.type.slice(1); - fnKeystroke = "AF".concat(format, "_Keystroke"); - fnFormat = "AF".concat(format, "_Format"); - - if (f.type === 'date') { - fnKeystroke += 'Ex'; - params = String(f.param); - } else if (f.type === 'time') { - params = String(f.param); - } else if (f.type === 'number') { - var p = Object.assign({}, FORMAT_DEFAULT.number, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(',')); - } else if (f.type === 'percent') { - var _p = Object.assign({}, FORMAT_DEFAULT.percent, f); - - params = String([String(_p.nDec), _p.sepComma ? '0' : '1'].join(',')); - } - } - - opts.AA = opts.AA ? opts.AA : {}; - opts.AA.K = { - S: 'JavaScript', - JS: new String("".concat(fnKeystroke, "(").concat(params, ");")) - }; - opts.AA.F = { - S: 'JavaScript', - JS: new String("".concat(fnFormat, "(").concat(params, ");")) - }; - } - - delete opts.format; - return opts; - }, - _resolveColors: function _resolveColors(opts) { - var color = this._normalizeColor(opts.backgroundColor); - - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - - opts.MK.BG = color; - } - - color = this._normalizeColor(opts.borderColor); - - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - - opts.MK.BC = color; - } - - delete opts.backgroundColor; - delete opts.borderColor; - return opts; - }, - _resolveFlags: function _resolveFlags(options) { - var result = 0; - Object.keys(options).forEach(function (key) { - if (FIELD_FLAGS[key]) { - if (options[key]) { - result |= FIELD_FLAGS[key]; - } - - delete options[key]; - } - }); - - if (result !== 0) { - options.Ff = options.Ff ? options.Ff : 0; - options.Ff |= result; - } - - return options; - }, - _resolveJustify: function _resolveJustify(options) { - var result = 0; - - if (options.align !== undefined) { - if (typeof FIELD_JUSTIFY[options.align] === 'number') { - result = FIELD_JUSTIFY[options.align]; - } - - delete options.align; - } - - if (result !== 0) { - options.Q = result; // default - } - - return options; - }, - _resolveFont: function _resolveFont(options) { - // add current font to document-level AcroForm dict if necessary - if (this._acroform.fonts[this._font.id] === null) { - this._acroform.fonts[this._font.id] = this._font.ref(); - } // add current font to field's resource dict (RD) if not the default acroform font - - - if (this._acroform.defaultFont !== this._font.name) { - options.DR = { - Font: {} - }; // Get the fontSize option. If not set use auto sizing - - var fontSize = options.fontSize || 0; - options.DR.Font[this._font.id] = this._font.ref(); - options.DA = new String("/".concat(this._font.id, " ").concat(fontSize, " Tf 0 g")); - } - - return options; - }, - _resolveStrings: function _resolveStrings(options) { - var select = []; - - function appendChoices(a) { - if (Array.isArray(a)) { - for (var idx = 0; idx < a.length; idx++) { - if (typeof a[idx] === 'string') { - select.push(new String(a[idx])); - } else { - select.push(a[idx]); - } - } - } - } - - appendChoices(options.Opt); - - if (options.select) { - appendChoices(options.select); - delete options.select; - } - - if (select.length) { - options.Opt = select; - } - - Object.keys(VALUE_MAP).forEach(function (key) { - if (options[key] !== undefined) { - options[VALUE_MAP[key]] = options[key]; - delete options[key]; - } - }); - ['V', 'DV'].forEach(function (key) { - if (typeof options[key] === 'string') { - options[key] = new String(options[key]); - } - }); - - if (options.MK && options.MK.CA) { - options.MK.CA = new String(options.MK.CA); - } - - if (options.label) { - options.MK = options.MK ? options.MK : {}; - options.MK.CA = new String(options.label); - delete options.label; - } - - return options; - } -}; - -var AttachmentsMixin = { - /** - * Embed contents of `src` in PDF - * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file - * @param {object} options - * * options.name: filename to be shown in PDF, will use `src` if none set - * * options.type: filetype to be shown in PDF - * * options.description: description to be shown in PDF - * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations - * * options.creationDate: override creation date - * * options.modifiedDate: override modified date - * @returns filespec reference - */ - file: function file(src) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - options.name = options.name || src; - var refBody = { - Type: 'EmbeddedFile', - Params: {} - }; - var data; - - if (!src) { - throw new Error('No src specified'); - } - - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - var match; - - if (match = /^data:(.*?);base64,(.*)$/.exec(src)) { - if (match[1]) { - refBody.Subtype = match[1].replace('/', '#2F'); - } - - data = Buffer.from(match[2], 'base64'); - } else { - data = fs.readFileSync(src); - - if (!data) { - throw new Error("Could not read contents of file at filepath ".concat(src)); - } // update CreationDate and ModDate - - - var _fs$statSync = fs.statSync(src), - birthtime = _fs$statSync.birthtime, - ctime = _fs$statSync.ctime; - - refBody.Params.CreationDate = birthtime; - refBody.Params.ModDate = ctime; - } - } // override creation date and modified date - - - if (options.creationDate instanceof Date) { - refBody.Params.CreationDate = options.creationDate; - } - - if (options.modifiedDate instanceof Date) { - refBody.Params.ModDate = options.modifiedDate; - } // add optional subtype - - - if (options.type) { - refBody.Subtype = options.type.replace('/', '#2F'); - } // add checksum and size information - - - var checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data))); - refBody.Params.CheckSum = new String(checksum); - refBody.Params.Size = data.byteLength; // save some space when embedding the same file again - // if a file with the same name and metadata exists, reuse its reference - - var ref; - if (!this._fileRegistry) this._fileRegistry = {}; - var file = this._fileRegistry[options.name]; - - if (file && isEqual(refBody, file)) { - ref = file.ref; - } else { - ref = this.ref(refBody); - ref.end(data); - this._fileRegistry[options.name] = _objectSpread2(_objectSpread2({}, refBody), {}, { - ref: ref - }); - } // add filespec for embedded file - - - var fileSpecBody = { - Type: 'Filespec', - F: new String(options.name), - EF: { - F: ref - }, - UF: new String(options.name) - }; - - if (options.description) { - fileSpecBody.Desc = new String(options.description); - } - - var filespec = this.ref(fileSpecBody); - filespec.end(); - - if (!options.hidden) { - this.addNamedEmbeddedFile(options.name, filespec); - } - - return filespec; - } -}; -/** check two embedded file metadata objects for equality */ - -function isEqual(a, b) { - return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate; -} - -var PDFA = { - initPDFA: function initPDFA(pSubset) { - if (pSubset.charAt(pSubset.length - 3) === '-') { - this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase(); - this.subset = parseInt(pSubset.charAt(pSubset.length - 2)); - } else { - // Default to Basic conformance when user doesn't specify - this.subset_conformance = 'B'; - this.subset = parseInt(pSubset.charAt(pSubset.length - 1)); - } - }, - endSubset: function endSubset() { - this._addPdfaMetadata(); - - var jsPath = "".concat(__dirname, "/data/sRGB_IEC61966_2_1.icc"); - var jestPath = "".concat(__dirname, "/../color_profiles/sRGB_IEC61966_2_1.icc"); - - this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath); - }, - _addColorOutputIntent: function _addColorOutputIntent(pICCPath) { - var iccProfile = fs.readFileSync(pICCPath); - var colorProfileRef = this.ref({ - Length: iccProfile.length, - N: 3 - }); - colorProfileRef.write(iccProfile); - colorProfileRef.end(); - var intentRef = this.ref({ - Type: 'OutputIntent', - S: 'GTS_PDFA1', - Info: new String('sRGB IEC61966-2.1'), - OutputConditionIdentifier: new String('sRGB IEC61966-2.1'), - DestOutputProfile: colorProfileRef - }); - intentRef.end(); - this._root.data.OutputIntents = [intentRef]; - }, - _getPdfaid: function _getPdfaid() { - return "\n \n ".concat(this.subset, "\n ").concat(this.subset_conformance, "\n \n "); - }, - _addPdfaMetadata: function _addPdfaMetadata() { - this.appendXML(this._getPdfaid()); - } -}; - -var PDFUA = { - initPDFUA: function initPDFUA() { - this.subset = 1; - }, - endSubset: function endSubset() { - this._addPdfuaMetadata(); - }, - _addPdfuaMetadata: function _addPdfuaMetadata() { - this.appendXML(this._getPdfuaid()); - }, - _getPdfuaid: function _getPdfuaid() { - return "\n \n ".concat(this.subset, "\n \n "); - } -}; - -var SubsetMixin = { - _importSubset: function _importSubset(subset) { - Object.assign(this, subset); - }, - initSubset: function initSubset(options) { - switch (options.subset) { - case 'PDF/A-1': - case 'PDF/A-1a': - case 'PDF/A-1b': - case 'PDF/A-2': - case 'PDF/A-2a': - case 'PDF/A-2b': - case 'PDF/A-3': - case 'PDF/A-3a': - case 'PDF/A-3b': - this._importSubset(PDFA); - - this.initPDFA(options.subset); - break; - - case 'PDF/UA': - this._importSubset(PDFUA); - - this.initPDFUA(); - break; - } - } -}; - -var PDFMetadata = /*#__PURE__*/function () { - function PDFMetadata() { - _classCallCheck(this, PDFMetadata); - - this._metadata = "\n \n \n \n "; - } - - _createClass(PDFMetadata, [{ - key: "_closeTags", - value: function _closeTags() { - this._metadata = this._metadata.concat("\n \n \n \n "); - } - }, { - key: "append", - value: function append(xml) { - var newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this._metadata = this._metadata.concat(xml); - if (newline) this._metadata = this._metadata.concat('\n'); - } - }, { - key: "getXML", - value: function getXML() { - return this._metadata; - } - }, { - key: "getLength", - value: function getLength() { - return this._metadata.length; - } - }, { - key: "end", - value: function end() { - this._closeTags(); - - this._metadata = this._metadata.trim(); - } - }]); - - return PDFMetadata; -}(); - -var MetadataMixin = { - initMetadata: function initMetadata() { - this.metadata = new PDFMetadata(); - }, - appendXML: function appendXML(xml) { - var newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this.metadata.append(xml, newline); - }, - _addInfo: function _addInfo() { - this.appendXML("\n \n ".concat(this.info.CreationDate.toISOString().split('.')[0] + "Z", "\n ").concat(this.info.Creator, "\n \n ")); - - if (this.info.Title || this.info.Author || this.info.Subject) { - this.appendXML("\n \n "); - - if (this.info.Title) { - this.appendXML("\n \n \n ".concat(this.info.Title, "\n \n \n ")); - } - - if (this.info.Author) { - this.appendXML("\n \n \n ".concat(this.info.Author, "\n \n \n ")); - } - - if (this.info.Subject) { - this.appendXML("\n \n \n ".concat(this.info.Subject, "\n \n \n ")); - } - - this.appendXML("\n \n "); - } - - this.appendXML("\n \n ".concat(this.info.Creator, ""), false); - - if (this.info.Keywords) { - this.appendXML("\n ".concat(this.info.Keywords, ""), false); - } - - this.appendXML("\n \n "); - }, - endMetadata: function endMetadata() { - this._addInfo(); - - this.metadata.end(); - /* - Metadata was introduced in PDF 1.4, so adding it to 1.3 - will likely only take up more space. - */ - - if (this.version != 1.3) { - this.metadataRef = this.ref({ - length: this.metadata.getLength(), - Type: 'Metadata', - Subtype: 'XML' - }); - this.metadataRef.compress = false; - this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8')); - this.metadataRef.end(); - this._root.data.Metadata = this.metadataRef; - } - } -}; - -var PDFDocument = /*#__PURE__*/function (_stream$Readable) { - _inherits(PDFDocument, _stream$Readable); - - var _super = _createSuper(PDFDocument); - - function PDFDocument() { - var _this; - - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, PDFDocument); - - _this = _super.call(this, options); - _this.options = options; // PDF version - - switch (options.pdfVersion) { - case '1.4': - _this.version = 1.4; - break; - - case '1.5': - _this.version = 1.5; - break; - - case '1.6': - _this.version = 1.6; - break; - - case '1.7': - case '1.7ext3': - _this.version = 1.7; - break; - - default: - _this.version = 1.3; - break; - } // Whether streams should be compressed - - - _this.compress = _this.options.compress != null ? _this.options.compress : true; - _this._pageBuffer = []; - _this._pageBufferStart = 0; // The PDF object store - - _this._offsets = []; - _this._waiting = 0; - _this._ended = false; - _this._offset = 0; - - var Pages = _this.ref({ - Type: 'Pages', - Count: 0, - Kids: [] - }); - - var Names = _this.ref({ - Dests: new PDFNameTree() - }); - - _this._root = _this.ref({ - Type: 'Catalog', - Pages: Pages, - Names: Names - }); - - if (_this.options.lang) { - _this._root.data.Lang = new String(_this.options.lang); - } // The current page - - - _this.page = null; // Initialize mixins - - _this.initMetadata(); - - _this.initColor(); - - _this.initVector(); - - _this.initFonts(options.font); - - _this.initText(); - - _this.initImages(); - - _this.initOutline(); - - _this.initMarkings(options); - - _this.initSubset(options); // Initialize the metadata - - - _this.info = { - Producer: 'PDFKit', - Creator: 'PDFKit', - CreationDate: new Date() - }; - - if (_this.options.info) { - for (var key in _this.options.info) { - var val = _this.options.info[key]; - _this.info[key] = val; - } - } - - if (_this.options.displayTitle) { - _this._root.data.ViewerPreferences = _this.ref({ - DisplayDocTitle: true - }); - } // Generate file ID - - - _this._id = PDFSecurity.generateFileID(_this.info); // Initialize security settings - - _this._security = PDFSecurity.create(_assertThisInitialized(_this), options); // Write the header - // PDF version - - _this._write("%PDF-".concat(_this.version)); // 4 binary chars, as recommended by the spec - - - _this._write('%\xFF\xFF\xFF\xFF'); // Add the first page - - - if (_this.options.autoFirstPage !== false) { - _this.addPage(); - } - - return _this; - } - - _createClass(PDFDocument, [{ - key: "addPage", - value: function addPage(options) { - if (options == null) { - options = this.options; - } // end the current page if needed - - - if (!this.options.bufferPages) { - this.flushPages(); - } // create a page object - - - this.page = new PDFPage(this, options); - - this._pageBuffer.push(this.page); // add the page to the object store - - - var pages = this._root.data.Pages.data; - pages.Kids.push(this.page.dictionary); - pages.Count++; // reset x and y coordinates - - this.x = this.page.margins.left; - this.y = this.page.margins.top; // flip PDF coordinate system so that the origin is in - // the top left rather than the bottom left - - this._ctm = [1, 0, 0, 1, 0, 0]; - this.transform(1, 0, 0, -1, 0, this.page.height); - this.emit('pageAdded'); - return this; - } - }, { - key: "continueOnNewPage", - value: function continueOnNewPage(options) { - var pageMarkings = this.endPageMarkings(this.page); - this.addPage(options); - this.initPageMarkings(pageMarkings); - return this; - } - }, { - key: "bufferedPageRange", - value: function bufferedPageRange() { - return { - start: this._pageBufferStart, - count: this._pageBuffer.length - }; - } - }, { - key: "switchToPage", - value: function switchToPage(n) { - var page; - - if (!(page = this._pageBuffer[n - this._pageBufferStart])) { - throw new Error("switchToPage(".concat(n, ") out of bounds, current buffer covers pages ").concat(this._pageBufferStart, " to ").concat(this._pageBufferStart + this._pageBuffer.length - 1)); - } - - return this.page = page; - } - }, { - key: "flushPages", - value: function flushPages() { - // this local variable exists so we're future-proof against - // reentrant calls to flushPages. - var pages = this._pageBuffer; - this._pageBuffer = []; - this._pageBufferStart += pages.length; - - var _iterator = _createForOfIteratorHelper(pages), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var page = _step.value; - this.endPageMarkings(page); - page.end(); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - }, { - key: "addNamedDestination", - value: function addNamedDestination(name) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - if (args.length === 0) { - args = ['XYZ', null, null, null]; - } - - if (args[0] === 'XYZ' && args[2] !== null) { - args[2] = this.page.height - args[2]; - } - - args.unshift(this.page.dictionary); - - this._root.data.Names.data.Dests.add(name, args); - } - }, { - key: "addNamedEmbeddedFile", - value: function addNamedEmbeddedFile(name, ref) { - if (!this._root.data.Names.data.EmbeddedFiles) { - // disabling /Limits for this tree fixes attachments not showing in Adobe Reader - this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ - limits: false - }); - } // add filespec to EmbeddedFiles - - - this._root.data.Names.data.EmbeddedFiles.add(name, ref); - } - }, { - key: "addNamedJavaScript", - value: function addNamedJavaScript(name, js) { - if (!this._root.data.Names.data.JavaScript) { - this._root.data.Names.data.JavaScript = new PDFNameTree(); - } - - var data = { - JS: new String(js), - S: 'JavaScript' - }; - - this._root.data.Names.data.JavaScript.add(name, data); - } - }, { - key: "ref", - value: function ref(data) { - var ref = new PDFReference(this, this._offsets.length + 1, data); - - this._offsets.push(null); // placeholder for this object's offset once it is finalized - - - this._waiting++; - return ref; - } - }, { - key: "_read", - value: function _read() {} // do nothing, but this method is required by node - - }, { - key: "_write", - value: function _write(data) { - if (!Buffer.isBuffer(data)) { - data = Buffer.from(data + '\n', 'binary'); - } - - this.push(data); - return this._offset += data.length; - } - }, { - key: "addContent", - value: function addContent(data) { - this.page.write(data); - return this; - } - }, { - key: "_refEnd", - value: function _refEnd(ref) { - this._offsets[ref.id - 1] = ref.offset; - - if (--this._waiting === 0 && this._ended) { - this._finalize(); - - return this._ended = false; - } - } - }, { - key: "write", - value: function write(filename, fn) { - // print a deprecation warning with a stacktrace - var err = new Error("PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream."); - console.warn(err.stack); - this.pipe(fs.createWriteStream(filename)); - this.end(); - return this.once('end', fn); - } - }, { - key: "end", - value: function end() { - this.flushPages(); - this._info = this.ref(); - - for (var key in this.info) { - var val = this.info[key]; - - if (typeof val === 'string') { - val = new String(val); - } - - var entry = this.ref(val); - entry.end(); - this._info.data[key] = entry; - } - - this._info.end(); - - for (var name in this._fontFamilies) { - var font = this._fontFamilies[name]; - font.finalize(); - } - - this.endOutline(); - this.endMarkings(); - - if (this.subset) { - this.endSubset(); - } - - this.endMetadata(); - - this._root.end(); - - this._root.data.Pages.end(); - - this._root.data.Names.end(); - - this.endAcroForm(); - - if (this._root.data.ViewerPreferences) { - this._root.data.ViewerPreferences.end(); - } - - if (this._security) { - this._security.end(); - } - - if (this._waiting === 0) { - return this._finalize(); - } else { - return this._ended = true; - } - } - }, { - key: "_finalize", - value: function _finalize() { - // generate xref - var xRefOffset = this._offset; - - this._write('xref'); - - this._write("0 ".concat(this._offsets.length + 1)); - - this._write('0000000000 65535 f '); - - var _iterator2 = _createForOfIteratorHelper(this._offsets), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var offset = _step2.value; - offset = "0000000000".concat(offset).slice(-10); - - this._write(offset + ' 00000 n '); - } // trailer - - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - - var trailer = { - Size: this._offsets.length + 1, - Root: this._root, - Info: this._info, - ID: [this._id, this._id] - }; - - if (this._security) { - trailer.Encrypt = this._security.dictionary; - } - - this._write('trailer'); - - this._write(PDFObject.convert(trailer)); - - this._write('startxref'); - - this._write("".concat(xRefOffset)); - - this._write('%%EOF'); // end the stream - - - return this.push(null); - } - }, { - key: "toString", - value: function toString() { - return '[object PDFDocument]'; - } - }]); - - return PDFDocument; -}(stream.Readable); - -var mixin = function mixin(methods) { - Object.assign(PDFDocument.prototype, methods); -}; - -mixin(MetadataMixin); -mixin(ColorMixin); -mixin(VectorMixin); -mixin(FontsMixin); -mixin(TextMixin); -mixin(ImagesMixin); -mixin(AnnotationsMixin); -mixin(OutlineMixin); -mixin(MarkingsMixin); -mixin(AcroFormMixin); -mixin(AttachmentsMixin); -mixin(SubsetMixin); -PDFDocument.LineWrapper = LineWrapper; - -export default PDFDocument; -//# sourceMappingURL=pdfkit.es5.js.map diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js.map b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js.map deleted file mode 100644 index dec6d1b..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.es5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pdfkit.es5.js","sources":["../lib/abstract_reference.js","../lib/tree.js","../lib/object.js","../lib/reference.js","../lib/page.js","../lib/name_tree.js","../lib/saslprep/lib/util.js","../lib/saslprep/lib/code-points.js","../lib/saslprep/index.js","../lib/security.js","../lib/gradient.js","../lib/pattern.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/structure_content.js","../lib/structure_element.js","../lib/number_tree.js","../lib/mixins/markings.js","../lib/mixins/acroform.js","../lib/mixins/attachments.js","../lib/mixins/pdfa.js","../lib/mixins/pdfua.js","../lib/mixins/subsets.js","../lib/metadata.js","../lib/mixins/metadata.js","../lib/document.js"],"sourcesContent":["/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n toString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFTree - abstract base class for name and number tree objects\r\n*/\r\n\r\nimport PDFObject from './object';\r\n\r\nclass PDFTree {\r\n constructor(options = {}) {\r\n this._items = {};\r\n // disable /Limits output for this tree\r\n this.limits =\r\n typeof options.limits === 'boolean' ? options.limits : true;\r\n }\r\n\r\n add(key, val) {\r\n return (this._items[key] = val);\r\n }\r\n\r\n get(key) {\r\n return this._items[key];\r\n }\r\n\r\n toString() {\r\n // Needs to be sorted by key\r\n const sortedKeys = Object.keys(this._items).sort((a, b) =>\r\n this._compareKeys(a, b)\r\n );\r\n\r\n const out = ['<<'];\r\n if (this.limits && sortedKeys.length > 1) {\r\n const first = sortedKeys[0],\r\n last = sortedKeys[sortedKeys.length - 1];\r\n out.push(\r\n ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`\r\n );\r\n }\r\n out.push(` /${this._keysName()} [`);\r\n for (let key of sortedKeys) {\r\n out.push(\r\n ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\r\n this._items[key]\r\n )}`\r\n );\r\n }\r\n out.push(']');\r\n out.push('>>');\r\n return out.join('\\n');\r\n }\r\n\r\n _compareKeys(/*a, b*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _keysName() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _dataForKey(/*k*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFTree;\r\n","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFTree from './tree';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\r\nconst escapable = {\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t',\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\\\': '\\\\\\\\',\r\n '(': '\\\\(',\r\n ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n const l = buff.length;\r\n if (l & 0x01) {\r\n throw new Error('Buffer length must be even');\r\n } else {\r\n for (let i = 0, end = l - 1; i < end; i += 2) {\r\n const a = buff[i];\r\n buff[i] = buff[i + 1];\r\n buff[i + 1] = a;\r\n }\r\n }\r\n\r\n return buff;\r\n};\r\n\r\nclass PDFObject {\r\n static convert(object, encryptFn = null) {\r\n // String literals are converted to the PDF name type\r\n if (typeof object === 'string') {\r\n return `/${object}`;\r\n\r\n // String objects are converted to PDF strings (UTF-16)\r\n } else if (object instanceof String) {\r\n let string = object;\r\n // Detect if this is a unicode string\r\n let isUnicode = false;\r\n for (let i = 0, end = string.length; i < end; i++) {\r\n if (string.charCodeAt(i) > 0x7f) {\r\n isUnicode = true;\r\n break;\r\n }\r\n }\r\n\r\n // If so, encode it as big endian UTF-16\r\n let stringBuffer;\r\n if (isUnicode) {\r\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n } else {\r\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n }\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(stringBuffer).toString('binary');\r\n } else {\r\n string = stringBuffer.toString('binary');\r\n }\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n return `(${string})`;\r\n\r\n // Buffers are converted to PDF hex strings\r\n } else if (Buffer.isBuffer(object)) {\r\n return `<${object.toString('hex')}>`;\r\n } else if (\r\n object instanceof PDFAbstractReference ||\r\n object instanceof PDFTree\r\n ) {\r\n return object.toString();\r\n } else if (object instanceof Date) {\r\n let string =\r\n `D:${pad(object.getUTCFullYear(), 4)}` +\r\n pad(object.getUTCMonth() + 1, 2) +\r\n pad(object.getUTCDate(), 2) +\r\n pad(object.getUTCHours(), 2) +\r\n pad(object.getUTCMinutes(), 2) +\r\n pad(object.getUTCSeconds(), 2) +\r\n 'Z';\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n }\r\n\r\n return `(${string})`;\r\n } else if (Array.isArray(object)) {\r\n const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n return `[${items}]`;\r\n } else if ({}.toString.call(object) === '[object Object]') {\r\n const out = ['<<'];\r\n for (let key in object) {\r\n const val = object[key];\r\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n }\r\n\r\n out.push('>>');\r\n return out.join('\\n');\r\n } else if (typeof object === 'number') {\r\n return PDFObject.number(object);\r\n } else {\r\n return `${object}`;\r\n }\r\n }\r\n\r\n static number(n) {\r\n if (n > -1e21 && n < 1e21) {\r\n return Math.round(n * 1e6) / 1e6;\r\n }\r\n\r\n throw new Error(`unsupported number: ${n}`);\r\n }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n constructor(document, id, data = {}) {\r\n super();\r\n this.document = document;\r\n this.id = id;\r\n this.data = data;\r\n this.gen = 0;\r\n this.compress = this.document.compress && !this.data.Filter;\r\n this.uncompressedLength = 0;\r\n this.buffer = [];\r\n }\r\n\r\n write(chunk) {\r\n if (!Buffer.isBuffer(chunk)) {\r\n chunk = Buffer.from(chunk + '\\n', 'binary');\r\n }\r\n\r\n this.uncompressedLength += chunk.length;\r\n if (this.data.Length == null) {\r\n this.data.Length = 0;\r\n }\r\n this.buffer.push(chunk);\r\n this.data.Length += chunk.length;\r\n if (this.compress) {\r\n return (this.data.Filter = 'FlateDecode');\r\n }\r\n }\r\n\r\n end(chunk) {\r\n if (chunk) {\r\n this.write(chunk);\r\n }\r\n return this.finalize();\r\n }\r\n\r\n finalize() {\r\n this.offset = this.document._offset;\r\n\r\n const encryptFn = this.document._security\r\n ? this.document._security.getEncryptFn(this.id, this.gen)\r\n : null;\r\n\r\n if (this.buffer.length) {\r\n this.buffer = Buffer.concat(this.buffer);\r\n if (this.compress) {\r\n this.buffer = zlib.deflateSync(this.buffer);\r\n }\r\n\r\n if (encryptFn) {\r\n this.buffer = encryptFn(this.buffer);\r\n }\r\n\r\n this.data.Length = this.buffer.length;\r\n }\r\n\r\n this.document._write(`${this.id} ${this.gen} obj`);\r\n this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n if (this.buffer.length) {\r\n this.document._write('stream');\r\n this.document._write(this.buffer);\r\n\r\n this.buffer = []; // free up memory\r\n this.document._write('\\nendstream');\r\n }\r\n\r\n this.document._write('endobj');\r\n this.document._refEnd(this);\r\n }\r\n toString() {\r\n return `${this.id} ${this.gen} R`;\r\n }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n top: 72,\r\n left: 72,\r\n bottom: 72,\r\n right: 72\r\n};\r\n\r\nconst SIZES = {\r\n '4A0': [4767.87, 6740.79],\r\n '2A0': [3370.39, 4767.87],\r\n A0: [2383.94, 3370.39],\r\n A1: [1683.78, 2383.94],\r\n A2: [1190.55, 1683.78],\r\n A3: [841.89, 1190.55],\r\n A4: [595.28, 841.89],\r\n A5: [419.53, 595.28],\r\n A6: [297.64, 419.53],\r\n A7: [209.76, 297.64],\r\n A8: [147.4, 209.76],\r\n A9: [104.88, 147.4],\r\n A10: [73.7, 104.88],\r\n B0: [2834.65, 4008.19],\r\n B1: [2004.09, 2834.65],\r\n B2: [1417.32, 2004.09],\r\n B3: [1000.63, 1417.32],\r\n B4: [708.66, 1000.63],\r\n B5: [498.9, 708.66],\r\n B6: [354.33, 498.9],\r\n B7: [249.45, 354.33],\r\n B8: [175.75, 249.45],\r\n B9: [124.72, 175.75],\r\n B10: [87.87, 124.72],\r\n C0: [2599.37, 3676.54],\r\n C1: [1836.85, 2599.37],\r\n C2: [1298.27, 1836.85],\r\n C3: [918.43, 1298.27],\r\n C4: [649.13, 918.43],\r\n C5: [459.21, 649.13],\r\n C6: [323.15, 459.21],\r\n C7: [229.61, 323.15],\r\n C8: [161.57, 229.61],\r\n C9: [113.39, 161.57],\r\n C10: [79.37, 113.39],\r\n RA0: [2437.8, 3458.27],\r\n RA1: [1729.13, 2437.8],\r\n RA2: [1218.9, 1729.13],\r\n RA3: [864.57, 1218.9],\r\n RA4: [609.45, 864.57],\r\n SRA0: [2551.18, 3628.35],\r\n SRA1: [1814.17, 2551.18],\r\n SRA2: [1275.59, 1814.17],\r\n SRA3: [907.09, 1275.59],\r\n SRA4: [637.8, 907.09],\r\n EXECUTIVE: [521.86, 756.0],\r\n FOLIO: [612.0, 936.0],\r\n LEGAL: [612.0, 1008.0],\r\n LETTER: [612.0, 792.0],\r\n TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n constructor(document, options = {}) {\r\n this.document = document;\r\n this.size = options.size || 'letter';\r\n this.layout = options.layout || 'portrait';\r\n\r\n // process margins\r\n if (typeof options.margin === 'number') {\r\n this.margins = {\r\n top: options.margin,\r\n left: options.margin,\r\n bottom: options.margin,\r\n right: options.margin\r\n };\r\n\r\n // default to 1 inch margins\r\n } else {\r\n this.margins = options.margins || DEFAULT_MARGINS;\r\n }\r\n\r\n // calculate page dimensions\r\n const dimensions = Array.isArray(this.size)\r\n ? this.size\r\n : SIZES[this.size.toUpperCase()];\r\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n this.content = this.document.ref();\r\n\r\n // Initialize the Font, XObject, and ExtGState dictionaries\r\n this.resources = this.document.ref({\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n });\r\n\r\n // The page dictionary\r\n this.dictionary = this.document.ref({\r\n Type: 'Page',\r\n Parent: this.document._root.data.Pages,\r\n MediaBox: [0, 0, this.width, this.height],\r\n Contents: this.content,\r\n Resources: this.resources\r\n });\r\n\r\n this.markings = [];\r\n }\r\n\r\n // Lazily create these objects\r\n get fonts() {\r\n const data = this.resources.data;\r\n return data.Font != null ? data.Font : (data.Font = {});\r\n }\r\n\r\n get xobjects() {\r\n const data = this.resources.data;\r\n return data.XObject != null ? data.XObject : (data.XObject = {});\r\n }\r\n\r\n get ext_gstates() {\r\n const data = this.resources.data;\r\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n }\r\n\r\n get patterns() {\r\n const data = this.resources.data;\r\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n }\r\n\r\n get colorSpaces() {\r\n const data = this.resources.data;\r\n return data.ColorSpace || (data.ColorSpace = {});\r\n }\r\n\r\n get annotations() {\r\n const data = this.dictionary.data;\r\n return data.Annots != null ? data.Annots : (data.Annots = []);\r\n }\r\n\r\n get structParentTreeKey() {\r\n const data = this.dictionary.data;\r\n return data.StructParents != null\r\n ? data.StructParents\r\n : (data.StructParents = this.document.createStructParentTreeNextKey());\r\n }\r\n\r\n maxY() {\r\n return this.height - this.margins.bottom;\r\n }\r\n\r\n write(chunk) {\r\n return this.content.write(chunk);\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n this.resources.end();\r\n return this.content.end();\r\n }\r\n}\r\n\r\nexport default PDFPage;\r\n","/*\r\nPDFNameTree - represents a name tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNameTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return a.localeCompare(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Names\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return new String(k);\r\n }\r\n}\r\n\r\nexport default PDFNameTree;\r\n","/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\r\nfunction inRange(value, rangeGroup) {\r\n if (value < rangeGroup[0]) return false;\r\n let startRange = 0;\r\n let endRange = rangeGroup.length / 2;\r\n while (startRange <= endRange) {\r\n const middleRange = Math.floor((startRange + endRange) / 2);\r\n\r\n // actual array index\r\n const arrayIndex = middleRange * 2;\r\n\r\n // Check if value is in range pointed by actual index\r\n if (\r\n value >= rangeGroup[arrayIndex] &&\r\n value <= rangeGroup[arrayIndex + 1]\r\n ) {\r\n return true;\r\n }\r\n\r\n if (value > rangeGroup[arrayIndex + 1]) {\r\n // Search Right Side Of Array\r\n startRange = middleRange + 1;\r\n } else {\r\n // Search Left Side Of Array\r\n endRange = middleRange - 1;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport { inRange };\r\n","import { inRange } from './util';\r\n\r\n// prettier-ignore-start\r\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\r\nconst unassigned_code_points = [\r\n 0x0221,\r\n 0x0221,\r\n 0x0234,\r\n 0x024f,\r\n 0x02ae,\r\n 0x02af,\r\n 0x02ef,\r\n 0x02ff,\r\n 0x0350,\r\n 0x035f,\r\n 0x0370,\r\n 0x0373,\r\n 0x0376,\r\n 0x0379,\r\n 0x037b,\r\n 0x037d,\r\n 0x037f,\r\n 0x0383,\r\n 0x038b,\r\n 0x038b,\r\n 0x038d,\r\n 0x038d,\r\n 0x03a2,\r\n 0x03a2,\r\n 0x03cf,\r\n 0x03cf,\r\n 0x03f7,\r\n 0x03ff,\r\n 0x0487,\r\n 0x0487,\r\n 0x04cf,\r\n 0x04cf,\r\n 0x04f6,\r\n 0x04f7,\r\n 0x04fa,\r\n 0x04ff,\r\n 0x0510,\r\n 0x0530,\r\n 0x0557,\r\n 0x0558,\r\n 0x0560,\r\n 0x0560,\r\n 0x0588,\r\n 0x0588,\r\n 0x058b,\r\n 0x0590,\r\n 0x05a2,\r\n 0x05a2,\r\n 0x05ba,\r\n 0x05ba,\r\n 0x05c5,\r\n 0x05cf,\r\n 0x05eb,\r\n 0x05ef,\r\n 0x05f5,\r\n 0x060b,\r\n 0x060d,\r\n 0x061a,\r\n 0x061c,\r\n 0x061e,\r\n 0x0620,\r\n 0x0620,\r\n 0x063b,\r\n 0x063f,\r\n 0x0656,\r\n 0x065f,\r\n 0x06ee,\r\n 0x06ef,\r\n 0x06ff,\r\n 0x06ff,\r\n 0x070e,\r\n 0x070e,\r\n 0x072d,\r\n 0x072f,\r\n 0x074b,\r\n 0x077f,\r\n 0x07b2,\r\n 0x0900,\r\n 0x0904,\r\n 0x0904,\r\n 0x093a,\r\n 0x093b,\r\n 0x094e,\r\n 0x094f,\r\n 0x0955,\r\n 0x0957,\r\n 0x0971,\r\n 0x0980,\r\n 0x0984,\r\n 0x0984,\r\n 0x098d,\r\n 0x098e,\r\n 0x0991,\r\n 0x0992,\r\n 0x09a9,\r\n 0x09a9,\r\n 0x09b1,\r\n 0x09b1,\r\n 0x09b3,\r\n 0x09b5,\r\n 0x09ba,\r\n 0x09bb,\r\n 0x09bd,\r\n 0x09bd,\r\n 0x09c5,\r\n 0x09c6,\r\n 0x09c9,\r\n 0x09ca,\r\n 0x09ce,\r\n 0x09d6,\r\n 0x09d8,\r\n 0x09db,\r\n 0x09de,\r\n 0x09de,\r\n 0x09e4,\r\n 0x09e5,\r\n 0x09fb,\r\n 0x0a01,\r\n 0x0a03,\r\n 0x0a04,\r\n 0x0a0b,\r\n 0x0a0e,\r\n 0x0a11,\r\n 0x0a12,\r\n 0x0a29,\r\n 0x0a29,\r\n 0x0a31,\r\n 0x0a31,\r\n 0x0a34,\r\n 0x0a34,\r\n 0x0a37,\r\n 0x0a37,\r\n 0x0a3a,\r\n 0x0a3b,\r\n 0x0a3d,\r\n 0x0a3d,\r\n 0x0a43,\r\n 0x0a46,\r\n 0x0a49,\r\n 0x0a4a,\r\n 0x0a4e,\r\n 0x0a58,\r\n 0x0a5d,\r\n 0x0a5d,\r\n 0x0a5f,\r\n 0x0a65,\r\n 0x0a75,\r\n 0x0a80,\r\n 0x0a84,\r\n 0x0a84,\r\n 0x0a8c,\r\n 0x0a8c,\r\n 0x0a8e,\r\n 0x0a8e,\r\n 0x0a92,\r\n 0x0a92,\r\n 0x0aa9,\r\n 0x0aa9,\r\n 0x0ab1,\r\n 0x0ab1,\r\n 0x0ab4,\r\n 0x0ab4,\r\n 0x0aba,\r\n 0x0abb,\r\n 0x0ac6,\r\n 0x0ac6,\r\n 0x0aca,\r\n 0x0aca,\r\n 0x0ace,\r\n 0x0acf,\r\n 0x0ad1,\r\n 0x0adf,\r\n 0x0ae1,\r\n 0x0ae5,\r\n 0x0af0,\r\n 0x0b00,\r\n 0x0b04,\r\n 0x0b04,\r\n 0x0b0d,\r\n 0x0b0e,\r\n 0x0b11,\r\n 0x0b12,\r\n 0x0b29,\r\n 0x0b29,\r\n 0x0b31,\r\n 0x0b31,\r\n 0x0b34,\r\n 0x0b35,\r\n 0x0b3a,\r\n 0x0b3b,\r\n 0x0b44,\r\n 0x0b46,\r\n 0x0b49,\r\n 0x0b4a,\r\n 0x0b4e,\r\n 0x0b55,\r\n 0x0b58,\r\n 0x0b5b,\r\n 0x0b5e,\r\n 0x0b5e,\r\n 0x0b62,\r\n 0x0b65,\r\n 0x0b71,\r\n 0x0b81,\r\n 0x0b84,\r\n 0x0b84,\r\n 0x0b8b,\r\n 0x0b8d,\r\n 0x0b91,\r\n 0x0b91,\r\n 0x0b96,\r\n 0x0b98,\r\n 0x0b9b,\r\n 0x0b9b,\r\n 0x0b9d,\r\n 0x0b9d,\r\n 0x0ba0,\r\n 0x0ba2,\r\n 0x0ba5,\r\n 0x0ba7,\r\n 0x0bab,\r\n 0x0bad,\r\n 0x0bb6,\r\n 0x0bb6,\r\n 0x0bba,\r\n 0x0bbd,\r\n 0x0bc3,\r\n 0x0bc5,\r\n 0x0bc9,\r\n 0x0bc9,\r\n 0x0bce,\r\n 0x0bd6,\r\n 0x0bd8,\r\n 0x0be6,\r\n 0x0bf3,\r\n 0x0c00,\r\n 0x0c04,\r\n 0x0c04,\r\n 0x0c0d,\r\n 0x0c0d,\r\n 0x0c11,\r\n 0x0c11,\r\n 0x0c29,\r\n 0x0c29,\r\n 0x0c34,\r\n 0x0c34,\r\n 0x0c3a,\r\n 0x0c3d,\r\n 0x0c45,\r\n 0x0c45,\r\n 0x0c49,\r\n 0x0c49,\r\n 0x0c4e,\r\n 0x0c54,\r\n 0x0c57,\r\n 0x0c5f,\r\n 0x0c62,\r\n 0x0c65,\r\n 0x0c70,\r\n 0x0c81,\r\n 0x0c84,\r\n 0x0c84,\r\n 0x0c8d,\r\n 0x0c8d,\r\n 0x0c91,\r\n 0x0c91,\r\n 0x0ca9,\r\n 0x0ca9,\r\n 0x0cb4,\r\n 0x0cb4,\r\n 0x0cba,\r\n 0x0cbd,\r\n 0x0cc5,\r\n 0x0cc5,\r\n 0x0cc9,\r\n 0x0cc9,\r\n 0x0cce,\r\n 0x0cd4,\r\n 0x0cd7,\r\n 0x0cdd,\r\n 0x0cdf,\r\n 0x0cdf,\r\n 0x0ce2,\r\n 0x0ce5,\r\n 0x0cf0,\r\n 0x0d01,\r\n 0x0d04,\r\n 0x0d04,\r\n 0x0d0d,\r\n 0x0d0d,\r\n 0x0d11,\r\n 0x0d11,\r\n 0x0d29,\r\n 0x0d29,\r\n 0x0d3a,\r\n 0x0d3d,\r\n 0x0d44,\r\n 0x0d45,\r\n 0x0d49,\r\n 0x0d49,\r\n 0x0d4e,\r\n 0x0d56,\r\n 0x0d58,\r\n 0x0d5f,\r\n 0x0d62,\r\n 0x0d65,\r\n 0x0d70,\r\n 0x0d81,\r\n 0x0d84,\r\n 0x0d84,\r\n 0x0d97,\r\n 0x0d99,\r\n 0x0db2,\r\n 0x0db2,\r\n 0x0dbc,\r\n 0x0dbc,\r\n 0x0dbe,\r\n 0x0dbf,\r\n 0x0dc7,\r\n 0x0dc9,\r\n 0x0dcb,\r\n 0x0dce,\r\n 0x0dd5,\r\n 0x0dd5,\r\n 0x0dd7,\r\n 0x0dd7,\r\n 0x0de0,\r\n 0x0df1,\r\n 0x0df5,\r\n 0x0e00,\r\n 0x0e3b,\r\n 0x0e3e,\r\n 0x0e5c,\r\n 0x0e80,\r\n 0x0e83,\r\n 0x0e83,\r\n 0x0e85,\r\n 0x0e86,\r\n 0x0e89,\r\n 0x0e89,\r\n 0x0e8b,\r\n 0x0e8c,\r\n 0x0e8e,\r\n 0x0e93,\r\n 0x0e98,\r\n 0x0e98,\r\n 0x0ea0,\r\n 0x0ea0,\r\n 0x0ea4,\r\n 0x0ea4,\r\n 0x0ea6,\r\n 0x0ea6,\r\n 0x0ea8,\r\n 0x0ea9,\r\n 0x0eac,\r\n 0x0eac,\r\n 0x0eba,\r\n 0x0eba,\r\n 0x0ebe,\r\n 0x0ebf,\r\n 0x0ec5,\r\n 0x0ec5,\r\n 0x0ec7,\r\n 0x0ec7,\r\n 0x0ece,\r\n 0x0ecf,\r\n 0x0eda,\r\n 0x0edb,\r\n 0x0ede,\r\n 0x0eff,\r\n 0x0f48,\r\n 0x0f48,\r\n 0x0f6b,\r\n 0x0f70,\r\n 0x0f8c,\r\n 0x0f8f,\r\n 0x0f98,\r\n 0x0f98,\r\n 0x0fbd,\r\n 0x0fbd,\r\n 0x0fcd,\r\n 0x0fce,\r\n 0x0fd0,\r\n 0x0fff,\r\n 0x1022,\r\n 0x1022,\r\n 0x1028,\r\n 0x1028,\r\n 0x102b,\r\n 0x102b,\r\n 0x1033,\r\n 0x1035,\r\n 0x103a,\r\n 0x103f,\r\n 0x105a,\r\n 0x109f,\r\n 0x10c6,\r\n 0x10cf,\r\n 0x10f9,\r\n 0x10fa,\r\n 0x10fc,\r\n 0x10ff,\r\n 0x115a,\r\n 0x115e,\r\n 0x11a3,\r\n 0x11a7,\r\n 0x11fa,\r\n 0x11ff,\r\n 0x1207,\r\n 0x1207,\r\n 0x1247,\r\n 0x1247,\r\n 0x1249,\r\n 0x1249,\r\n 0x124e,\r\n 0x124f,\r\n 0x1257,\r\n 0x1257,\r\n 0x1259,\r\n 0x1259,\r\n 0x125e,\r\n 0x125f,\r\n 0x1287,\r\n 0x1287,\r\n 0x1289,\r\n 0x1289,\r\n 0x128e,\r\n 0x128f,\r\n 0x12af,\r\n 0x12af,\r\n 0x12b1,\r\n 0x12b1,\r\n 0x12b6,\r\n 0x12b7,\r\n 0x12bf,\r\n 0x12bf,\r\n 0x12c1,\r\n 0x12c1,\r\n 0x12c6,\r\n 0x12c7,\r\n 0x12cf,\r\n 0x12cf,\r\n 0x12d7,\r\n 0x12d7,\r\n 0x12ef,\r\n 0x12ef,\r\n 0x130f,\r\n 0x130f,\r\n 0x1311,\r\n 0x1311,\r\n 0x1316,\r\n 0x1317,\r\n 0x131f,\r\n 0x131f,\r\n 0x1347,\r\n 0x1347,\r\n 0x135b,\r\n 0x1360,\r\n 0x137d,\r\n 0x139f,\r\n 0x13f5,\r\n 0x1400,\r\n 0x1677,\r\n 0x167f,\r\n 0x169d,\r\n 0x169f,\r\n 0x16f1,\r\n 0x16ff,\r\n 0x170d,\r\n 0x170d,\r\n 0x1715,\r\n 0x171f,\r\n 0x1737,\r\n 0x173f,\r\n 0x1754,\r\n 0x175f,\r\n 0x176d,\r\n 0x176d,\r\n 0x1771,\r\n 0x1771,\r\n 0x1774,\r\n 0x177f,\r\n 0x17dd,\r\n 0x17df,\r\n 0x17ea,\r\n 0x17ff,\r\n 0x180f,\r\n 0x180f,\r\n 0x181a,\r\n 0x181f,\r\n 0x1878,\r\n 0x187f,\r\n 0x18aa,\r\n 0x1dff,\r\n 0x1e9c,\r\n 0x1e9f,\r\n 0x1efa,\r\n 0x1eff,\r\n 0x1f16,\r\n 0x1f17,\r\n 0x1f1e,\r\n 0x1f1f,\r\n 0x1f46,\r\n 0x1f47,\r\n 0x1f4e,\r\n 0x1f4f,\r\n 0x1f58,\r\n 0x1f58,\r\n 0x1f5a,\r\n 0x1f5a,\r\n 0x1f5c,\r\n 0x1f5c,\r\n 0x1f5e,\r\n 0x1f5e,\r\n 0x1f7e,\r\n 0x1f7f,\r\n 0x1fb5,\r\n 0x1fb5,\r\n 0x1fc5,\r\n 0x1fc5,\r\n 0x1fd4,\r\n 0x1fd5,\r\n 0x1fdc,\r\n 0x1fdc,\r\n 0x1ff0,\r\n 0x1ff1,\r\n 0x1ff5,\r\n 0x1ff5,\r\n 0x1fff,\r\n 0x1fff,\r\n 0x2053,\r\n 0x2056,\r\n 0x2058,\r\n 0x205e,\r\n 0x2064,\r\n 0x2069,\r\n 0x2072,\r\n 0x2073,\r\n 0x208f,\r\n 0x209f,\r\n 0x20b2,\r\n 0x20cf,\r\n 0x20eb,\r\n 0x20ff,\r\n 0x213b,\r\n 0x213c,\r\n 0x214c,\r\n 0x2152,\r\n 0x2184,\r\n 0x218f,\r\n 0x23cf,\r\n 0x23ff,\r\n 0x2427,\r\n 0x243f,\r\n 0x244b,\r\n 0x245f,\r\n 0x24ff,\r\n 0x24ff,\r\n 0x2614,\r\n 0x2615,\r\n 0x2618,\r\n 0x2618,\r\n 0x267e,\r\n 0x267f,\r\n 0x268a,\r\n 0x2700,\r\n 0x2705,\r\n 0x2705,\r\n 0x270a,\r\n 0x270b,\r\n 0x2728,\r\n 0x2728,\r\n 0x274c,\r\n 0x274c,\r\n 0x274e,\r\n 0x274e,\r\n 0x2753,\r\n 0x2755,\r\n 0x2757,\r\n 0x2757,\r\n 0x275f,\r\n 0x2760,\r\n 0x2795,\r\n 0x2797,\r\n 0x27b0,\r\n 0x27b0,\r\n 0x27bf,\r\n 0x27cf,\r\n 0x27ec,\r\n 0x27ef,\r\n 0x2b00,\r\n 0x2e7f,\r\n 0x2e9a,\r\n 0x2e9a,\r\n 0x2ef4,\r\n 0x2eff,\r\n 0x2fd6,\r\n 0x2fef,\r\n 0x2ffc,\r\n 0x2fff,\r\n 0x3040,\r\n 0x3040,\r\n 0x3097,\r\n 0x3098,\r\n 0x3100,\r\n 0x3104,\r\n 0x312d,\r\n 0x3130,\r\n 0x318f,\r\n 0x318f,\r\n 0x31b8,\r\n 0x31ef,\r\n 0x321d,\r\n 0x321f,\r\n 0x3244,\r\n 0x3250,\r\n 0x327c,\r\n 0x327e,\r\n 0x32cc,\r\n 0x32cf,\r\n 0x32ff,\r\n 0x32ff,\r\n 0x3377,\r\n 0x337a,\r\n 0x33de,\r\n 0x33df,\r\n 0x33ff,\r\n 0x33ff,\r\n 0x4db6,\r\n 0x4dff,\r\n 0x9fa6,\r\n 0x9fff,\r\n 0xa48d,\r\n 0xa48f,\r\n 0xa4c7,\r\n 0xabff,\r\n 0xd7a4,\r\n 0xd7ff,\r\n 0xfa2e,\r\n 0xfa2f,\r\n 0xfa6b,\r\n 0xfaff,\r\n 0xfb07,\r\n 0xfb12,\r\n 0xfb18,\r\n 0xfb1c,\r\n 0xfb37,\r\n 0xfb37,\r\n 0xfb3d,\r\n 0xfb3d,\r\n 0xfb3f,\r\n 0xfb3f,\r\n 0xfb42,\r\n 0xfb42,\r\n 0xfb45,\r\n 0xfb45,\r\n 0xfbb2,\r\n 0xfbd2,\r\n 0xfd40,\r\n 0xfd4f,\r\n 0xfd90,\r\n 0xfd91,\r\n 0xfdc8,\r\n 0xfdcf,\r\n 0xfdfd,\r\n 0xfdff,\r\n 0xfe10,\r\n 0xfe1f,\r\n 0xfe24,\r\n 0xfe2f,\r\n 0xfe47,\r\n 0xfe48,\r\n 0xfe53,\r\n 0xfe53,\r\n 0xfe67,\r\n 0xfe67,\r\n 0xfe6c,\r\n 0xfe6f,\r\n 0xfe75,\r\n 0xfe75,\r\n 0xfefd,\r\n 0xfefe,\r\n 0xff00,\r\n 0xff00,\r\n 0xffbf,\r\n 0xffc1,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffd0,\r\n 0xffd1,\r\n 0xffd8,\r\n 0xffd9,\r\n 0xffdd,\r\n 0xffdf,\r\n 0xffe7,\r\n 0xffe7,\r\n 0xffef,\r\n 0xfff8,\r\n 0x10000,\r\n 0x102ff,\r\n 0x1031f,\r\n 0x1031f,\r\n 0x10324,\r\n 0x1032f,\r\n 0x1034b,\r\n 0x103ff,\r\n 0x10426,\r\n 0x10427,\r\n 0x1044e,\r\n 0x1cfff,\r\n 0x1d0f6,\r\n 0x1d0ff,\r\n 0x1d127,\r\n 0x1d129,\r\n 0x1d1de,\r\n 0x1d3ff,\r\n 0x1d455,\r\n 0x1d455,\r\n 0x1d49d,\r\n 0x1d49d,\r\n 0x1d4a0,\r\n 0x1d4a1,\r\n 0x1d4a3,\r\n 0x1d4a4,\r\n 0x1d4a7,\r\n 0x1d4a8,\r\n 0x1d4ad,\r\n 0x1d4ad,\r\n 0x1d4ba,\r\n 0x1d4ba,\r\n 0x1d4bc,\r\n 0x1d4bc,\r\n 0x1d4c1,\r\n 0x1d4c1,\r\n 0x1d4c4,\r\n 0x1d4c4,\r\n 0x1d506,\r\n 0x1d506,\r\n 0x1d50b,\r\n 0x1d50c,\r\n 0x1d515,\r\n 0x1d515,\r\n 0x1d51d,\r\n 0x1d51d,\r\n 0x1d53a,\r\n 0x1d53a,\r\n 0x1d53f,\r\n 0x1d53f,\r\n 0x1d545,\r\n 0x1d545,\r\n 0x1d547,\r\n 0x1d549,\r\n 0x1d551,\r\n 0x1d551,\r\n 0x1d6a4,\r\n 0x1d6a7,\r\n 0x1d7ca,\r\n 0x1d7cd,\r\n 0x1d800,\r\n 0x1fffd,\r\n 0x2a6d7,\r\n 0x2f7ff,\r\n 0x2fa1e,\r\n 0x2fffd,\r\n 0x30000,\r\n 0x3fffd,\r\n 0x40000,\r\n 0x4fffd,\r\n 0x50000,\r\n 0x5fffd,\r\n 0x60000,\r\n 0x6fffd,\r\n 0x70000,\r\n 0x7fffd,\r\n 0x80000,\r\n 0x8fffd,\r\n 0x90000,\r\n 0x9fffd,\r\n 0xa0000,\r\n 0xafffd,\r\n 0xb0000,\r\n 0xbfffd,\r\n 0xc0000,\r\n 0xcfffd,\r\n 0xd0000,\r\n 0xdfffd,\r\n 0xe0000,\r\n 0xe0000,\r\n 0xe0002,\r\n 0xe001f,\r\n 0xe0080,\r\n 0xefffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isUnassignedCodePoint = character =>\r\n inRange(character, unassigned_code_points);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\r\nconst commonly_mapped_to_nothing = [\r\n 0x00ad,\r\n 0x00ad,\r\n 0x034f,\r\n 0x034f,\r\n 0x1806,\r\n 0x1806,\r\n 0x180b,\r\n 0x180b,\r\n 0x180c,\r\n 0x180c,\r\n 0x180d,\r\n 0x180d,\r\n 0x200b,\r\n 0x200b,\r\n 0x200c,\r\n 0x200c,\r\n 0x200d,\r\n 0x200d,\r\n 0x2060,\r\n 0x2060,\r\n 0xfe00,\r\n 0xfe00,\r\n 0xfe01,\r\n 0xfe01,\r\n 0xfe02,\r\n 0xfe02,\r\n 0xfe03,\r\n 0xfe03,\r\n 0xfe04,\r\n 0xfe04,\r\n 0xfe05,\r\n 0xfe05,\r\n 0xfe06,\r\n 0xfe06,\r\n 0xfe07,\r\n 0xfe07,\r\n 0xfe08,\r\n 0xfe08,\r\n 0xfe09,\r\n 0xfe09,\r\n 0xfe0a,\r\n 0xfe0a,\r\n 0xfe0b,\r\n 0xfe0b,\r\n 0xfe0c,\r\n 0xfe0c,\r\n 0xfe0d,\r\n 0xfe0d,\r\n 0xfe0e,\r\n 0xfe0e,\r\n 0xfe0f,\r\n 0xfe0f,\r\n 0xfeff,\r\n 0xfeff\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isCommonlyMappedToNothing = character =>\r\n inRange(character, commonly_mapped_to_nothing);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\r\nconst non_ASCII_space_characters = [\r\n 0x00a0,\r\n 0x00a0 /* NO-BREAK SPACE */,\r\n 0x1680,\r\n 0x1680 /* OGHAM SPACE MARK */,\r\n 0x2000,\r\n 0x2000 /* EN QUAD */,\r\n 0x2001,\r\n 0x2001 /* EM QUAD */,\r\n 0x2002,\r\n 0x2002 /* EN SPACE */,\r\n 0x2003,\r\n 0x2003 /* EM SPACE */,\r\n 0x2004,\r\n 0x2004 /* THREE-PER-EM SPACE */,\r\n 0x2005,\r\n 0x2005 /* FOUR-PER-EM SPACE */,\r\n 0x2006,\r\n 0x2006 /* SIX-PER-EM SPACE */,\r\n 0x2007,\r\n 0x2007 /* FIGURE SPACE */,\r\n 0x2008,\r\n 0x2008 /* PUNCTUATION SPACE */,\r\n 0x2009,\r\n 0x2009 /* THIN SPACE */,\r\n 0x200a,\r\n 0x200a /* HAIR SPACE */,\r\n 0x200b,\r\n 0x200b /* ZERO WIDTH SPACE */,\r\n 0x202f,\r\n 0x202f /* NARROW NO-BREAK SPACE */,\r\n 0x205f,\r\n 0x205f /* MEDIUM MATHEMATICAL SPACE */,\r\n 0x3000,\r\n 0x3000 /* IDEOGRAPHIC SPACE */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isNonASCIISpaceCharacter = character =>\r\n inRange(character, non_ASCII_space_characters);\r\n\r\n// prettier-ignore-start\r\nconst non_ASCII_controls_characters = [\r\n /**\r\n * C.2.2 Non-ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n */\r\n 0x0080,\r\n 0x009f /* [CONTROL CHARACTERS] */,\r\n 0x06dd,\r\n 0x06dd /* ARABIC END OF AYAH */,\r\n 0x070f,\r\n 0x070f /* SYRIAC ABBREVIATION MARK */,\r\n 0x180e,\r\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */,\r\n 0x200c,\r\n 0x200c /* ZERO WIDTH NON-JOINER */,\r\n 0x200d,\r\n 0x200d /* ZERO WIDTH JOINER */,\r\n 0x2028,\r\n 0x2028 /* LINE SEPARATOR */,\r\n 0x2029,\r\n 0x2029 /* PARAGRAPH SEPARATOR */,\r\n 0x2060,\r\n 0x2060 /* WORD JOINER */,\r\n 0x2061,\r\n 0x2061 /* FUNCTION APPLICATION */,\r\n 0x2062,\r\n 0x2062 /* INVISIBLE TIMES */,\r\n 0x2063,\r\n 0x2063 /* INVISIBLE SEPARATOR */,\r\n 0x206a,\r\n 0x206f /* [CONTROL CHARACTERS] */,\r\n 0xfeff,\r\n 0xfeff /* ZERO WIDTH NO-BREAK SPACE */,\r\n 0xfff9,\r\n 0xfffc /* [CONTROL CHARACTERS] */,\r\n 0x1d173,\r\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */\r\n];\r\n\r\nconst non_character_codepoints = [\r\n /**\r\n * C.4 Non-character code points\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n */\r\n 0xfdd0,\r\n 0xfdef /* [NONCHARACTER CODE POINTS] */,\r\n 0xfffe,\r\n 0xffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x1fffe,\r\n 0x1ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x2fffe,\r\n 0x2ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x3fffe,\r\n 0x3ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x4fffe,\r\n 0x4ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x5fffe,\r\n 0x5ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x6fffe,\r\n 0x6ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x7fffe,\r\n 0x7ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x8fffe,\r\n 0x8ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x9fffe,\r\n 0x9ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xafffe,\r\n 0xaffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xbfffe,\r\n 0xbffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xcfffe,\r\n 0xcffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xdfffe,\r\n 0xdffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xefffe,\r\n 0xeffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x10fffe,\r\n 0x10ffff /* [NONCHARACTER CODE POINTS] */\r\n];\r\n\r\n/**\r\n * 2.3. Prohibited Output\r\n */\r\nconst prohibited_characters = [\r\n /**\r\n * C.2.1 ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n */\r\n 0,\r\n 0x001f /* [CONTROL CHARACTERS] */,\r\n 0x007f,\r\n 0x007f /* DELETE */,\r\n\r\n /**\r\n * C.8 Change display properties or are deprecated\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n */\r\n 0x0340,\r\n 0x0340 /* COMBINING GRAVE TONE MARK */,\r\n 0x0341,\r\n 0x0341 /* COMBINING ACUTE TONE MARK */,\r\n 0x200e,\r\n 0x200e /* LEFT-TO-RIGHT MARK */,\r\n 0x200f,\r\n 0x200f /* RIGHT-TO-LEFT MARK */,\r\n 0x202a,\r\n 0x202a /* LEFT-TO-RIGHT EMBEDDING */,\r\n 0x202b,\r\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */,\r\n 0x202c,\r\n 0x202c /* POP DIRECTIONAL FORMATTING */,\r\n 0x202d,\r\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */,\r\n 0x202e,\r\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */,\r\n 0x206a,\r\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */,\r\n 0x206b,\r\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */,\r\n 0x206c,\r\n 0x206c /* INHIBIT ARABIC FORM SHAPING */,\r\n 0x206d,\r\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */,\r\n 0x206e,\r\n 0x206e /* NATIONAL DIGIT SHAPES */,\r\n 0x206f,\r\n 0x206f /* NOMINAL DIGIT SHAPES */,\r\n\r\n /**\r\n * C.7 Inappropriate for canonical representation\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n */\r\n 0x2ff0,\r\n 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\r\n\r\n /**\r\n * C.5 Surrogate codes\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n */\r\n 0xd800,\r\n 0xdfff,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n 0xe000,\r\n 0xf8ff /* [PRIVATE USE, PLANE 0] */,\r\n\r\n /**\r\n * C.6 Inappropriate for plain text\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n */\r\n 0xfff9,\r\n 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */,\r\n 0xfffa,\r\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */,\r\n 0xfffb,\r\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */,\r\n 0xfffc,\r\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */,\r\n 0xfffd,\r\n 0xfffd /* REPLACEMENT CHARACTER */,\r\n\r\n /**\r\n * C.9 Tagging characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n */\r\n 0xe0001,\r\n 0xe0001 /* LANGUAGE TAG */,\r\n 0xe0020,\r\n 0xe007f /* [TAGGING CHARACTERS] */,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n\r\n 0xf0000,\r\n 0xffffd /* [PRIVATE USE, PLANE 15] */,\r\n 0x100000,\r\n 0x10fffd /* [PRIVATE USE, PLANE 16] */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isProhibitedCharacter = character =>\r\n inRange(character, non_ASCII_space_characters) ||\r\n inRange(character, prohibited_characters) ||\r\n inRange(character, non_ASCII_controls_characters) ||\r\n inRange(character, non_character_codepoints);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\r\nconst bidirectional_r_al = [\r\n 0x05be,\r\n 0x05be,\r\n 0x05c0,\r\n 0x05c0,\r\n 0x05c3,\r\n 0x05c3,\r\n 0x05d0,\r\n 0x05ea,\r\n 0x05f0,\r\n 0x05f4,\r\n 0x061b,\r\n 0x061b,\r\n 0x061f,\r\n 0x061f,\r\n 0x0621,\r\n 0x063a,\r\n 0x0640,\r\n 0x064a,\r\n 0x066d,\r\n 0x066f,\r\n 0x0671,\r\n 0x06d5,\r\n 0x06dd,\r\n 0x06dd,\r\n 0x06e5,\r\n 0x06e6,\r\n 0x06fa,\r\n 0x06fe,\r\n 0x0700,\r\n 0x070d,\r\n 0x0710,\r\n 0x0710,\r\n 0x0712,\r\n 0x072c,\r\n 0x0780,\r\n 0x07a5,\r\n 0x07b1,\r\n 0x07b1,\r\n 0x200f,\r\n 0x200f,\r\n 0xfb1d,\r\n 0xfb1d,\r\n 0xfb1f,\r\n 0xfb28,\r\n 0xfb2a,\r\n 0xfb36,\r\n 0xfb38,\r\n 0xfb3c,\r\n 0xfb3e,\r\n 0xfb3e,\r\n 0xfb40,\r\n 0xfb41,\r\n 0xfb43,\r\n 0xfb44,\r\n 0xfb46,\r\n 0xfbb1,\r\n 0xfbd3,\r\n 0xfd3d,\r\n 0xfd50,\r\n 0xfd8f,\r\n 0xfd92,\r\n 0xfdc7,\r\n 0xfdf0,\r\n 0xfdfc,\r\n 0xfe70,\r\n 0xfe74,\r\n 0xfe76,\r\n 0xfefc\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalRAL = character => inRange(character, bidirectional_r_al);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\r\nconst bidirectional_l = [\r\n 0x0041,\r\n 0x005a,\r\n 0x0061,\r\n 0x007a,\r\n 0x00aa,\r\n 0x00aa,\r\n 0x00b5,\r\n 0x00b5,\r\n 0x00ba,\r\n 0x00ba,\r\n 0x00c0,\r\n 0x00d6,\r\n 0x00d8,\r\n 0x00f6,\r\n 0x00f8,\r\n 0x0220,\r\n 0x0222,\r\n 0x0233,\r\n 0x0250,\r\n 0x02ad,\r\n 0x02b0,\r\n 0x02b8,\r\n 0x02bb,\r\n 0x02c1,\r\n 0x02d0,\r\n 0x02d1,\r\n 0x02e0,\r\n 0x02e4,\r\n 0x02ee,\r\n 0x02ee,\r\n 0x037a,\r\n 0x037a,\r\n 0x0386,\r\n 0x0386,\r\n 0x0388,\r\n 0x038a,\r\n 0x038c,\r\n 0x038c,\r\n 0x038e,\r\n 0x03a1,\r\n 0x03a3,\r\n 0x03ce,\r\n 0x03d0,\r\n 0x03f5,\r\n 0x0400,\r\n 0x0482,\r\n 0x048a,\r\n 0x04ce,\r\n 0x04d0,\r\n 0x04f5,\r\n 0x04f8,\r\n 0x04f9,\r\n 0x0500,\r\n 0x050f,\r\n 0x0531,\r\n 0x0556,\r\n 0x0559,\r\n 0x055f,\r\n 0x0561,\r\n 0x0587,\r\n 0x0589,\r\n 0x0589,\r\n 0x0903,\r\n 0x0903,\r\n 0x0905,\r\n 0x0939,\r\n 0x093d,\r\n 0x0940,\r\n 0x0949,\r\n 0x094c,\r\n 0x0950,\r\n 0x0950,\r\n 0x0958,\r\n 0x0961,\r\n 0x0964,\r\n 0x0970,\r\n 0x0982,\r\n 0x0983,\r\n 0x0985,\r\n 0x098c,\r\n 0x098f,\r\n 0x0990,\r\n 0x0993,\r\n 0x09a8,\r\n 0x09aa,\r\n 0x09b0,\r\n 0x09b2,\r\n 0x09b2,\r\n 0x09b6,\r\n 0x09b9,\r\n 0x09be,\r\n 0x09c0,\r\n 0x09c7,\r\n 0x09c8,\r\n 0x09cb,\r\n 0x09cc,\r\n 0x09d7,\r\n 0x09d7,\r\n 0x09dc,\r\n 0x09dd,\r\n 0x09df,\r\n 0x09e1,\r\n 0x09e6,\r\n 0x09f1,\r\n 0x09f4,\r\n 0x09fa,\r\n 0x0a05,\r\n 0x0a0a,\r\n 0x0a0f,\r\n 0x0a10,\r\n 0x0a13,\r\n 0x0a28,\r\n 0x0a2a,\r\n 0x0a30,\r\n 0x0a32,\r\n 0x0a33,\r\n 0x0a35,\r\n 0x0a36,\r\n 0x0a38,\r\n 0x0a39,\r\n 0x0a3e,\r\n 0x0a40,\r\n 0x0a59,\r\n 0x0a5c,\r\n 0x0a5e,\r\n 0x0a5e,\r\n 0x0a66,\r\n 0x0a6f,\r\n 0x0a72,\r\n 0x0a74,\r\n 0x0a83,\r\n 0x0a83,\r\n 0x0a85,\r\n 0x0a8b,\r\n 0x0a8d,\r\n 0x0a8d,\r\n 0x0a8f,\r\n 0x0a91,\r\n 0x0a93,\r\n 0x0aa8,\r\n 0x0aaa,\r\n 0x0ab0,\r\n 0x0ab2,\r\n 0x0ab3,\r\n 0x0ab5,\r\n 0x0ab9,\r\n 0x0abd,\r\n 0x0ac0,\r\n 0x0ac9,\r\n 0x0ac9,\r\n 0x0acb,\r\n 0x0acc,\r\n 0x0ad0,\r\n 0x0ad0,\r\n 0x0ae0,\r\n 0x0ae0,\r\n 0x0ae6,\r\n 0x0aef,\r\n 0x0b02,\r\n 0x0b03,\r\n 0x0b05,\r\n 0x0b0c,\r\n 0x0b0f,\r\n 0x0b10,\r\n 0x0b13,\r\n 0x0b28,\r\n 0x0b2a,\r\n 0x0b30,\r\n 0x0b32,\r\n 0x0b33,\r\n 0x0b36,\r\n 0x0b39,\r\n 0x0b3d,\r\n 0x0b3e,\r\n 0x0b40,\r\n 0x0b40,\r\n 0x0b47,\r\n 0x0b48,\r\n 0x0b4b,\r\n 0x0b4c,\r\n 0x0b57,\r\n 0x0b57,\r\n 0x0b5c,\r\n 0x0b5d,\r\n 0x0b5f,\r\n 0x0b61,\r\n 0x0b66,\r\n 0x0b70,\r\n 0x0b83,\r\n 0x0b83,\r\n 0x0b85,\r\n 0x0b8a,\r\n 0x0b8e,\r\n 0x0b90,\r\n 0x0b92,\r\n 0x0b95,\r\n 0x0b99,\r\n 0x0b9a,\r\n 0x0b9c,\r\n 0x0b9c,\r\n 0x0b9e,\r\n 0x0b9f,\r\n 0x0ba3,\r\n 0x0ba4,\r\n 0x0ba8,\r\n 0x0baa,\r\n 0x0bae,\r\n 0x0bb5,\r\n 0x0bb7,\r\n 0x0bb9,\r\n 0x0bbe,\r\n 0x0bbf,\r\n 0x0bc1,\r\n 0x0bc2,\r\n 0x0bc6,\r\n 0x0bc8,\r\n 0x0bca,\r\n 0x0bcc,\r\n 0x0bd7,\r\n 0x0bd7,\r\n 0x0be7,\r\n 0x0bf2,\r\n 0x0c01,\r\n 0x0c03,\r\n 0x0c05,\r\n 0x0c0c,\r\n 0x0c0e,\r\n 0x0c10,\r\n 0x0c12,\r\n 0x0c28,\r\n 0x0c2a,\r\n 0x0c33,\r\n 0x0c35,\r\n 0x0c39,\r\n 0x0c41,\r\n 0x0c44,\r\n 0x0c60,\r\n 0x0c61,\r\n 0x0c66,\r\n 0x0c6f,\r\n 0x0c82,\r\n 0x0c83,\r\n 0x0c85,\r\n 0x0c8c,\r\n 0x0c8e,\r\n 0x0c90,\r\n 0x0c92,\r\n 0x0ca8,\r\n 0x0caa,\r\n 0x0cb3,\r\n 0x0cb5,\r\n 0x0cb9,\r\n 0x0cbe,\r\n 0x0cbe,\r\n 0x0cc0,\r\n 0x0cc4,\r\n 0x0cc7,\r\n 0x0cc8,\r\n 0x0cca,\r\n 0x0ccb,\r\n 0x0cd5,\r\n 0x0cd6,\r\n 0x0cde,\r\n 0x0cde,\r\n 0x0ce0,\r\n 0x0ce1,\r\n 0x0ce6,\r\n 0x0cef,\r\n 0x0d02,\r\n 0x0d03,\r\n 0x0d05,\r\n 0x0d0c,\r\n 0x0d0e,\r\n 0x0d10,\r\n 0x0d12,\r\n 0x0d28,\r\n 0x0d2a,\r\n 0x0d39,\r\n 0x0d3e,\r\n 0x0d40,\r\n 0x0d46,\r\n 0x0d48,\r\n 0x0d4a,\r\n 0x0d4c,\r\n 0x0d57,\r\n 0x0d57,\r\n 0x0d60,\r\n 0x0d61,\r\n 0x0d66,\r\n 0x0d6f,\r\n 0x0d82,\r\n 0x0d83,\r\n 0x0d85,\r\n 0x0d96,\r\n 0x0d9a,\r\n 0x0db1,\r\n 0x0db3,\r\n 0x0dbb,\r\n 0x0dbd,\r\n 0x0dbd,\r\n 0x0dc0,\r\n 0x0dc6,\r\n 0x0dcf,\r\n 0x0dd1,\r\n 0x0dd8,\r\n 0x0ddf,\r\n 0x0df2,\r\n 0x0df4,\r\n 0x0e01,\r\n 0x0e30,\r\n 0x0e32,\r\n 0x0e33,\r\n 0x0e40,\r\n 0x0e46,\r\n 0x0e4f,\r\n 0x0e5b,\r\n 0x0e81,\r\n 0x0e82,\r\n 0x0e84,\r\n 0x0e84,\r\n 0x0e87,\r\n 0x0e88,\r\n 0x0e8a,\r\n 0x0e8a,\r\n 0x0e8d,\r\n 0x0e8d,\r\n 0x0e94,\r\n 0x0e97,\r\n 0x0e99,\r\n 0x0e9f,\r\n 0x0ea1,\r\n 0x0ea3,\r\n 0x0ea5,\r\n 0x0ea5,\r\n 0x0ea7,\r\n 0x0ea7,\r\n 0x0eaa,\r\n 0x0eab,\r\n 0x0ead,\r\n 0x0eb0,\r\n 0x0eb2,\r\n 0x0eb3,\r\n 0x0ebd,\r\n 0x0ebd,\r\n 0x0ec0,\r\n 0x0ec4,\r\n 0x0ec6,\r\n 0x0ec6,\r\n 0x0ed0,\r\n 0x0ed9,\r\n 0x0edc,\r\n 0x0edd,\r\n 0x0f00,\r\n 0x0f17,\r\n 0x0f1a,\r\n 0x0f34,\r\n 0x0f36,\r\n 0x0f36,\r\n 0x0f38,\r\n 0x0f38,\r\n 0x0f3e,\r\n 0x0f47,\r\n 0x0f49,\r\n 0x0f6a,\r\n 0x0f7f,\r\n 0x0f7f,\r\n 0x0f85,\r\n 0x0f85,\r\n 0x0f88,\r\n 0x0f8b,\r\n 0x0fbe,\r\n 0x0fc5,\r\n 0x0fc7,\r\n 0x0fcc,\r\n 0x0fcf,\r\n 0x0fcf,\r\n 0x1000,\r\n 0x1021,\r\n 0x1023,\r\n 0x1027,\r\n 0x1029,\r\n 0x102a,\r\n 0x102c,\r\n 0x102c,\r\n 0x1031,\r\n 0x1031,\r\n 0x1038,\r\n 0x1038,\r\n 0x1040,\r\n 0x1057,\r\n 0x10a0,\r\n 0x10c5,\r\n 0x10d0,\r\n 0x10f8,\r\n 0x10fb,\r\n 0x10fb,\r\n 0x1100,\r\n 0x1159,\r\n 0x115f,\r\n 0x11a2,\r\n 0x11a8,\r\n 0x11f9,\r\n 0x1200,\r\n 0x1206,\r\n 0x1208,\r\n 0x1246,\r\n 0x1248,\r\n 0x1248,\r\n 0x124a,\r\n 0x124d,\r\n 0x1250,\r\n 0x1256,\r\n 0x1258,\r\n 0x1258,\r\n 0x125a,\r\n 0x125d,\r\n 0x1260,\r\n 0x1286,\r\n 0x1288,\r\n 0x1288,\r\n 0x128a,\r\n 0x128d,\r\n 0x1290,\r\n 0x12ae,\r\n 0x12b0,\r\n 0x12b0,\r\n 0x12b2,\r\n 0x12b5,\r\n 0x12b8,\r\n 0x12be,\r\n 0x12c0,\r\n 0x12c0,\r\n 0x12c2,\r\n 0x12c5,\r\n 0x12c8,\r\n 0x12ce,\r\n 0x12d0,\r\n 0x12d6,\r\n 0x12d8,\r\n 0x12ee,\r\n 0x12f0,\r\n 0x130e,\r\n 0x1310,\r\n 0x1310,\r\n 0x1312,\r\n 0x1315,\r\n 0x1318,\r\n 0x131e,\r\n 0x1320,\r\n 0x1346,\r\n 0x1348,\r\n 0x135a,\r\n 0x1361,\r\n 0x137c,\r\n 0x13a0,\r\n 0x13f4,\r\n 0x1401,\r\n 0x1676,\r\n 0x1681,\r\n 0x169a,\r\n 0x16a0,\r\n 0x16f0,\r\n 0x1700,\r\n 0x170c,\r\n 0x170e,\r\n 0x1711,\r\n 0x1720,\r\n 0x1731,\r\n 0x1735,\r\n 0x1736,\r\n 0x1740,\r\n 0x1751,\r\n 0x1760,\r\n 0x176c,\r\n 0x176e,\r\n 0x1770,\r\n 0x1780,\r\n 0x17b6,\r\n 0x17be,\r\n 0x17c5,\r\n 0x17c7,\r\n 0x17c8,\r\n 0x17d4,\r\n 0x17da,\r\n 0x17dc,\r\n 0x17dc,\r\n 0x17e0,\r\n 0x17e9,\r\n 0x1810,\r\n 0x1819,\r\n 0x1820,\r\n 0x1877,\r\n 0x1880,\r\n 0x18a8,\r\n 0x1e00,\r\n 0x1e9b,\r\n 0x1ea0,\r\n 0x1ef9,\r\n 0x1f00,\r\n 0x1f15,\r\n 0x1f18,\r\n 0x1f1d,\r\n 0x1f20,\r\n 0x1f45,\r\n 0x1f48,\r\n 0x1f4d,\r\n 0x1f50,\r\n 0x1f57,\r\n 0x1f59,\r\n 0x1f59,\r\n 0x1f5b,\r\n 0x1f5b,\r\n 0x1f5d,\r\n 0x1f5d,\r\n 0x1f5f,\r\n 0x1f7d,\r\n 0x1f80,\r\n 0x1fb4,\r\n 0x1fb6,\r\n 0x1fbc,\r\n 0x1fbe,\r\n 0x1fbe,\r\n 0x1fc2,\r\n 0x1fc4,\r\n 0x1fc6,\r\n 0x1fcc,\r\n 0x1fd0,\r\n 0x1fd3,\r\n 0x1fd6,\r\n 0x1fdb,\r\n 0x1fe0,\r\n 0x1fec,\r\n 0x1ff2,\r\n 0x1ff4,\r\n 0x1ff6,\r\n 0x1ffc,\r\n 0x200e,\r\n 0x200e,\r\n 0x2071,\r\n 0x2071,\r\n 0x207f,\r\n 0x207f,\r\n 0x2102,\r\n 0x2102,\r\n 0x2107,\r\n 0x2107,\r\n 0x210a,\r\n 0x2113,\r\n 0x2115,\r\n 0x2115,\r\n 0x2119,\r\n 0x211d,\r\n 0x2124,\r\n 0x2124,\r\n 0x2126,\r\n 0x2126,\r\n 0x2128,\r\n 0x2128,\r\n 0x212a,\r\n 0x212d,\r\n 0x212f,\r\n 0x2131,\r\n 0x2133,\r\n 0x2139,\r\n 0x213d,\r\n 0x213f,\r\n 0x2145,\r\n 0x2149,\r\n 0x2160,\r\n 0x2183,\r\n 0x2336,\r\n 0x237a,\r\n 0x2395,\r\n 0x2395,\r\n 0x249c,\r\n 0x24e9,\r\n 0x3005,\r\n 0x3007,\r\n 0x3021,\r\n 0x3029,\r\n 0x3031,\r\n 0x3035,\r\n 0x3038,\r\n 0x303c,\r\n 0x3041,\r\n 0x3096,\r\n 0x309d,\r\n 0x309f,\r\n 0x30a1,\r\n 0x30fa,\r\n 0x30fc,\r\n 0x30ff,\r\n 0x3105,\r\n 0x312c,\r\n 0x3131,\r\n 0x318e,\r\n 0x3190,\r\n 0x31b7,\r\n 0x31f0,\r\n 0x321c,\r\n 0x3220,\r\n 0x3243,\r\n 0x3260,\r\n 0x327b,\r\n 0x327f,\r\n 0x32b0,\r\n 0x32c0,\r\n 0x32cb,\r\n 0x32d0,\r\n 0x32fe,\r\n 0x3300,\r\n 0x3376,\r\n 0x337b,\r\n 0x33dd,\r\n 0x33e0,\r\n 0x33fe,\r\n 0x3400,\r\n 0x4db5,\r\n 0x4e00,\r\n 0x9fa5,\r\n 0xa000,\r\n 0xa48c,\r\n 0xac00,\r\n 0xd7a3,\r\n 0xd800,\r\n 0xfa2d,\r\n 0xfa30,\r\n 0xfa6a,\r\n 0xfb00,\r\n 0xfb06,\r\n 0xfb13,\r\n 0xfb17,\r\n 0xff21,\r\n 0xff3a,\r\n 0xff41,\r\n 0xff5a,\r\n 0xff66,\r\n 0xffbe,\r\n 0xffc2,\r\n 0xffc7,\r\n 0xffca,\r\n 0xffcf,\r\n 0xffd2,\r\n 0xffd7,\r\n 0xffda,\r\n 0xffdc,\r\n 0x10300,\r\n 0x1031e,\r\n 0x10320,\r\n 0x10323,\r\n 0x10330,\r\n 0x1034a,\r\n 0x10400,\r\n 0x10425,\r\n 0x10428,\r\n 0x1044d,\r\n 0x1d000,\r\n 0x1d0f5,\r\n 0x1d100,\r\n 0x1d126,\r\n 0x1d12a,\r\n 0x1d166,\r\n 0x1d16a,\r\n 0x1d172,\r\n 0x1d183,\r\n 0x1d184,\r\n 0x1d18c,\r\n 0x1d1a9,\r\n 0x1d1ae,\r\n 0x1d1dd,\r\n 0x1d400,\r\n 0x1d454,\r\n 0x1d456,\r\n 0x1d49c,\r\n 0x1d49e,\r\n 0x1d49f,\r\n 0x1d4a2,\r\n 0x1d4a2,\r\n 0x1d4a5,\r\n 0x1d4a6,\r\n 0x1d4a9,\r\n 0x1d4ac,\r\n 0x1d4ae,\r\n 0x1d4b9,\r\n 0x1d4bb,\r\n 0x1d4bb,\r\n 0x1d4bd,\r\n 0x1d4c0,\r\n 0x1d4c2,\r\n 0x1d4c3,\r\n 0x1d4c5,\r\n 0x1d505,\r\n 0x1d507,\r\n 0x1d50a,\r\n 0x1d50d,\r\n 0x1d514,\r\n 0x1d516,\r\n 0x1d51c,\r\n 0x1d51e,\r\n 0x1d539,\r\n 0x1d53b,\r\n 0x1d53e,\r\n 0x1d540,\r\n 0x1d544,\r\n 0x1d546,\r\n 0x1d546,\r\n 0x1d54a,\r\n 0x1d550,\r\n 0x1d552,\r\n 0x1d6a3,\r\n 0x1d6a8,\r\n 0x1d7c9,\r\n 0x20000,\r\n 0x2a6d6,\r\n 0x2f800,\r\n 0x2fa1d,\r\n 0xf0000,\r\n 0xffffd,\r\n 0x100000,\r\n 0x10fffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalL = character => inRange(character, bidirectional_l);\r\n\r\nexport {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n};\r\n","import {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n} from './lib/code-points';\r\n\r\n// 2.1. Mapping\r\n\r\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\r\nconst mapping2space = isNonASCIISpaceCharacter;\r\n\r\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\r\nconst mapping2nothing = isCommonlyMappedToNothing;\r\n\r\n// utils\r\nconst getCodePoint = character => character.codePointAt(0);\r\nconst first = x => x[0];\r\nconst last = x => x[x.length - 1];\r\n\r\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\r\nfunction toCodePoints(input) {\r\n const codepoints = [];\r\n const size = input.length;\r\n\r\n for (let i = 0; i < size; i += 1) {\r\n const before = input.charCodeAt(i);\r\n\r\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\r\n const next = input.charCodeAt(i + 1);\r\n\r\n if (next >= 0xdc00 && next <= 0xdfff) {\r\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\r\n i += 1;\r\n continue;\r\n }\r\n }\r\n\r\n codepoints.push(before);\r\n }\r\n\r\n return codepoints;\r\n}\r\n\r\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\r\nfunction saslprep(input, opts = {}) {\r\n if (typeof input !== 'string') {\r\n throw new TypeError('Expected string.');\r\n }\r\n\r\n if (input.length === 0) {\r\n return '';\r\n }\r\n\r\n // 1. Map\r\n const mapped_input = toCodePoints(input)\r\n // 1.1 mapping to space\r\n .map(character => (mapping2space(character) ? 0x20 : character))\r\n // 1.2 mapping to nothing\r\n .filter(character => !mapping2nothing(character));\r\n\r\n // 2. Normalize\r\n const normalized_input = String.fromCodePoint\r\n .apply(null, mapped_input)\r\n .normalize('NFKC');\r\n\r\n const normalized_map = toCodePoints(normalized_input);\r\n\r\n // 3. Prohibit\r\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\r\n\r\n if (hasProhibited) {\r\n throw new Error(\r\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'\r\n );\r\n }\r\n\r\n // Unassigned Code Points\r\n if (opts.allowUnassigned !== true) {\r\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\r\n\r\n if (hasUnassigned) {\r\n throw new Error(\r\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'\r\n );\r\n }\r\n }\r\n\r\n // 4. check bidi\r\n\r\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\r\n\r\n const hasBidiL = normalized_map.some(isBidirectionalL);\r\n\r\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\r\n // contain any LCat character.\r\n if (hasBidiRAL && hasBidiL) {\r\n throw new Error(\r\n 'String must not contain RandALCat and LCat at the same time,' +\r\n ' see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n /**\r\n * 4.2 If a string contains any RandALCat character, a RandALCat\r\n * character MUST be the first character of the string, and a\r\n * RandALCat character MUST be the last character of the string.\r\n */\r\n\r\n const isFirstBidiRAL = isBidirectionalRAL(\r\n getCodePoint(first(normalized_input))\r\n );\r\n const isLastBidiRAL = isBidirectionalRAL(\r\n getCodePoint(last(normalized_input))\r\n );\r\n\r\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\r\n throw new Error(\r\n 'Bidirectional RandALCat character must be the first and the last' +\r\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n return normalized_input;\r\n}\r\n\r\nexport default saslprep;\r\n","/*\r\n PDFSecurity - represents PDF security settings\r\n By Yang Liu \r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from './saslprep/index';\r\n\r\nclass PDFSecurity {\r\n static generateFileID(info = {}) {\r\n let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n for (let key in info) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!info.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n infoStr += `${key}: ${info[key].valueOf()}\\n`;\r\n }\r\n\r\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n }\r\n\r\n static generateRandomWordArray(bytes) {\r\n return CryptoJS.lib.WordArray.random(bytes);\r\n }\r\n\r\n static create(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n return null;\r\n }\r\n return new PDFSecurity(document, options);\r\n }\r\n\r\n constructor(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n throw new Error('None of owner password and user password is defined.');\r\n }\r\n\r\n this.document = document;\r\n this._setupEncryption(options);\r\n }\r\n\r\n _setupEncryption(options) {\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n case '1.5':\r\n this.version = 2;\r\n break;\r\n case '1.6':\r\n case '1.7':\r\n this.version = 4;\r\n break;\r\n case '1.7ext3':\r\n this.version = 5;\r\n break;\r\n default:\r\n this.version = 1;\r\n break;\r\n }\r\n\r\n const encDict = {\r\n Filter: 'Standard'\r\n };\r\n\r\n switch (this.version) {\r\n case 1:\r\n case 2:\r\n case 4:\r\n this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n break;\r\n case 5:\r\n this._setupEncryptionV5(encDict, options);\r\n break;\r\n }\r\n\r\n this.dictionary = this.document.ref(encDict);\r\n }\r\n\r\n _setupEncryptionV1V2V4(v, encDict, options) {\r\n let r, permissions;\r\n switch (v) {\r\n case 1:\r\n r = 2;\r\n this.keyBits = 40;\r\n permissions = getPermissionsR2(options.permissions);\r\n break;\r\n case 2:\r\n r = 3;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n case 4:\r\n r = 4;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n }\r\n\r\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n const paddedOwnerPassword = options.ownerPassword\r\n ? processPasswordR2R3R4(options.ownerPassword)\r\n : paddedUserPassword;\r\n\r\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n r,\r\n this.keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n );\r\n this.encryptionKey = getEncryptionKeyR2R3R4(\r\n r,\r\n this.keyBits,\r\n this.document._id,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n );\r\n let userPasswordEntry;\r\n if (r === 2) {\r\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n } else {\r\n userPasswordEntry = getUserPasswordR3R4(\r\n this.document._id,\r\n this.encryptionKey\r\n );\r\n }\r\n\r\n encDict.V = v;\r\n if (v >= 2) {\r\n encDict.Length = this.keyBits;\r\n }\r\n if (v === 4) {\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV2',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n }\r\n encDict.R = r;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.P = permissions;\r\n }\r\n\r\n _setupEncryptionV5(encDict, options) {\r\n this.keyBits = 256;\r\n const permissions = getPermissionsR3(options.permissions);\r\n\r\n const processedUserPassword = processPasswordR5(options.userPassword);\r\n const processedOwnerPassword = options.ownerPassword\r\n ? processPasswordR5(options.ownerPassword)\r\n : processedUserPassword;\r\n\r\n this.encryptionKey = getEncryptionKeyR5(\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userPasswordEntry = getUserPasswordR5(\r\n processedUserPassword,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userKeySalt = CryptoJS.lib.WordArray.create(\r\n userPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n this.encryptionKey\r\n );\r\n const ownerPasswordEntry = getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n ownerPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n this.encryptionKey\r\n );\r\n const permsEntry = getEncryptedPermissionsR5(\r\n permissions,\r\n this.encryptionKey,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n\r\n encDict.V = 5;\r\n encDict.Length = this.keyBits;\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV3',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n encDict.R = 5;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n encDict.P = permissions;\r\n encDict.Perms = wordArrayToBuffer(permsEntry);\r\n }\r\n\r\n getEncryptFn(obj, gen) {\r\n let digest;\r\n if (this.version < 5) {\r\n digest = this.encryptionKey\r\n .clone()\r\n .concat(\r\n CryptoJS.lib.WordArray.create(\r\n [\r\n ((obj & 0xff) << 24) |\r\n ((obj & 0xff00) << 8) |\r\n ((obj >> 8) & 0xff00) |\r\n (gen & 0xff),\r\n (gen & 0xff00) << 16\r\n ],\r\n 5\r\n )\r\n );\r\n }\r\n\r\n if (this.version === 1 || this.version === 2) {\r\n let key = CryptoJS.MD5(digest);\r\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n return buffer =>\r\n wordArrayToBuffer(\r\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n .ciphertext\r\n );\r\n }\r\n\r\n let key;\r\n if (this.version === 4) {\r\n key = CryptoJS.MD5(\r\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n );\r\n } else {\r\n key = this.encryptionKey;\r\n }\r\n\r\n const iv = PDFSecurity.generateRandomWordArray(16);\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7,\r\n iv\r\n };\r\n\r\n return buffer =>\r\n wordArrayToBuffer(\r\n iv\r\n .clone()\r\n .concat(\r\n CryptoJS.AES.encrypt(\r\n CryptoJS.lib.WordArray.create(buffer),\r\n key,\r\n options\r\n ).ciphertext\r\n )\r\n );\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n let permissions = 0xffffffc0 >> 0;\r\n if (permissionObject.printing) {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n let permissions = 0xfffff0c0 >> 0;\r\n if (permissionObject.printing === 'lowResolution') {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.printing === 'highResolution') {\r\n permissions |= 0b100000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n if (permissionObject.fillingForms) {\r\n permissions |= 0b000100000000;\r\n }\r\n if (permissionObject.contentAccessibility) {\r\n permissions |= 0b001000000000;\r\n }\r\n if (permissionObject.documentAssembly) {\r\n permissions |= 0b010000000000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n const key = encryptionKey.clone();\r\n let cipher = CryptoJS.MD5(\r\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n );\r\n for (let i = 0; i < 20; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] =\r\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n r,\r\n keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let digest = paddedOwnerPassword;\r\n let round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n digest = CryptoJS.MD5(digest);\r\n }\r\n\r\n const key = digest.clone();\r\n key.sigBytes = keyBits / 8;\r\n let cipher = paddedUserPassword;\r\n round = r >= 3 ? 20 : 1;\r\n for (let i = 0; i < round; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n r,\r\n keyBits,\r\n documentId,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n) {\r\n let key = paddedUserPassword\r\n .clone()\r\n .concat(ownerPasswordEntry)\r\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n .concat(CryptoJS.lib.WordArray.create(documentId));\r\n const round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n key = CryptoJS.MD5(key);\r\n key.sigBytes = keyBits / 8;\r\n }\r\n return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedUserPassword.clone().concat(userKeySalt)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n generateRandomWordArray\r\n) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(validationSalt)\r\n .concat(userPasswordEntry)\r\n )\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(ownerKeySalt)\r\n .concat(userPasswordEntry)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n permissions,\r\n encryptionKey,\r\n generateRandomWordArray\r\n) {\r\n const cipher = CryptoJS.lib.WordArray.create(\r\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n 12\r\n ).concat(generateRandomWordArray(4));\r\n const options = {\r\n mode: CryptoJS.mode.ECB,\r\n padding: CryptoJS.pad.NoPadding\r\n };\r\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n const out = Buffer.alloc(32);\r\n const length = password.length;\r\n let index = 0;\r\n while (index < length && index < 32) {\r\n const code = password.charCodeAt(index);\r\n if (code > 0xff) {\r\n throw new Error('Password contains one or more invalid characters.');\r\n }\r\n out[index] = code;\r\n index++;\r\n }\r\n while (index < 32) {\r\n out[index] = PASSWORD_PADDING[index - length];\r\n index++;\r\n }\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n password = unescape(encodeURIComponent(saslprep(password)));\r\n const length = Math.min(127, password.length);\r\n const out = Buffer.alloc(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n out[i] = password.charCodeAt(i);\r\n }\r\n\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n return (\r\n ((data & 0xff) << 24) |\r\n ((data & 0xff00) << 8) |\r\n ((data >> 8) & 0xff00) |\r\n ((data >> 24) & 0xff)\r\n );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n const byteArray = [];\r\n for (let i = 0; i < wordArray.sigBytes; i++) {\r\n byteArray.push(\r\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n );\r\n }\r\n return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n 0x28,\r\n 0xbf,\r\n 0x4e,\r\n 0x5e,\r\n 0x4e,\r\n 0x75,\r\n 0x8a,\r\n 0x41,\r\n 0x64,\r\n 0x00,\r\n 0x4e,\r\n 0x56,\r\n 0xff,\r\n 0xfa,\r\n 0x01,\r\n 0x08,\r\n 0x2e,\r\n 0x2e,\r\n 0x00,\r\n 0xb6,\r\n 0xd0,\r\n 0x68,\r\n 0x3e,\r\n 0x80,\r\n 0x2f,\r\n 0x0c,\r\n 0xa9,\r\n 0xfe,\r\n 0x64,\r\n 0x53,\r\n 0x69,\r\n 0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n constructor(doc) {\r\n this.doc = doc;\r\n this.stops = [];\r\n this.embedded = false;\r\n this.transform = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n stop(pos, color, opacity) {\r\n if (opacity == null) {\r\n opacity = 1;\r\n }\r\n color = this.doc._normalizeColor(color);\r\n\r\n if (this.stops.length === 0) {\r\n if (color.length === 3) {\r\n this._colorSpace = 'DeviceRGB';\r\n } else if (color.length === 4) {\r\n this._colorSpace = 'DeviceCMYK';\r\n } else if (color.length === 1) {\r\n this._colorSpace = 'DeviceGray';\r\n } else {\r\n throw new Error('Unknown color space');\r\n }\r\n } else if (\r\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n ) {\r\n throw new Error('All gradient stops must use the same color space');\r\n }\r\n\r\n opacity = Math.max(0, Math.min(1, opacity));\r\n this.stops.push([pos, color, opacity]);\r\n return this;\r\n }\r\n\r\n setTransform(m11, m12, m21, m22, dx, dy) {\r\n this.transform = [m11, m12, m21, m22, dx, dy];\r\n return this;\r\n }\r\n\r\n embed(m) {\r\n let fn;\r\n const stopsLength = this.stops.length;\r\n if (stopsLength === 0) {\r\n return;\r\n }\r\n this.embedded = true;\r\n this.matrix = m;\r\n\r\n // if the last stop comes before 100%, add a copy at 100%\r\n const last = this.stops[stopsLength - 1];\r\n if (last[0] < 1) {\r\n this.stops.push([1, last[1], last[2]]);\r\n }\r\n\r\n const bounds = [];\r\n const encode = [];\r\n const stops = [];\r\n\r\n for (let i = 0; i < stopsLength - 1; i++) {\r\n encode.push(0, 1);\r\n if (i + 2 !== stopsLength) {\r\n bounds.push(this.stops[i + 1][0]);\r\n }\r\n\r\n fn = this.doc.ref({\r\n FunctionType: 2,\r\n Domain: [0, 1],\r\n C0: this.stops[i + 0][1],\r\n C1: this.stops[i + 1][1],\r\n N: 1\r\n });\r\n\r\n stops.push(fn);\r\n fn.end();\r\n }\r\n\r\n // if there are only two stops, we don't need a stitching function\r\n if (stopsLength === 1) {\r\n fn = stops[0];\r\n } else {\r\n fn = this.doc.ref({\r\n FunctionType: 3, // stitching function\r\n Domain: [0, 1],\r\n Functions: stops,\r\n Bounds: bounds,\r\n Encode: encode\r\n });\r\n\r\n fn.end();\r\n }\r\n\r\n this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n const shader = this.shader(fn);\r\n shader.end();\r\n\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 2,\r\n Shading: shader,\r\n Matrix: this.matrix.map(number)\r\n });\r\n\r\n pattern.end();\r\n\r\n if (this.stops.some(stop => stop[2] < 1)) {\r\n let grad = this.opacityGradient();\r\n grad._colorSpace = 'DeviceGray';\r\n\r\n for (let stop of this.stops) {\r\n grad.stop(stop[0], [stop[2]]);\r\n }\r\n\r\n grad = grad.embed(this.matrix);\r\n\r\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n const form = this.doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: pageBBox,\r\n Group: {\r\n Type: 'Group',\r\n S: 'Transparency',\r\n CS: 'DeviceGray'\r\n },\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: grad\r\n }\r\n }\r\n });\r\n\r\n form.write('/Pattern cs /Sh1 scn');\r\n form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n const gstate = this.doc.ref({\r\n Type: 'ExtGState',\r\n SMask: {\r\n Type: 'Mask',\r\n S: 'Luminosity',\r\n G: form\r\n }\r\n });\r\n\r\n gstate.end();\r\n\r\n const opacityPattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1,\r\n PaintType: 1,\r\n TilingType: 2,\r\n BBox: pageBBox,\r\n XStep: pageBBox[2],\r\n YStep: pageBBox[3],\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: pattern\r\n },\r\n ExtGState: {\r\n Gs1: gstate\r\n }\r\n }\r\n });\r\n\r\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n this.doc.page.patterns[this.id] = opacityPattern;\r\n } else {\r\n this.doc.page.patterns[this.id] = pattern;\r\n }\r\n\r\n return pattern;\r\n }\r\n\r\n apply(stroke) {\r\n // apply gradient transform to existing document ctm\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n\r\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n this.embed(m);\r\n }\r\n this.doc._setColorSpace('Pattern', stroke);\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(`/${this.id} ${op}`);\r\n }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n constructor(doc, x1, y1, x2, y2) {\r\n super(doc);\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 2,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.x2, this.y2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n super(doc);\r\n this.doc = doc;\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.r1 = r1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n this.r2 = r2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 3,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFRadialGradient(\r\n this.doc,\r\n this.x1,\r\n this.y1,\r\n this.r1,\r\n this.x2,\r\n this.y2,\r\n this.r2\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","/*\r\nPDF tiling pattern support. Uncolored only.\r\n */\r\n\r\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\r\n\r\nclass PDFTilingPattern {\r\n constructor(doc, bBox, xStep, yStep, stream) {\r\n this.doc = doc;\r\n this.bBox = bBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n this.stream = stream;\r\n }\r\n\r\n createPattern() {\r\n // no resources needed for our current usage\r\n // required entry\r\n const resources = this.doc.ref();\r\n resources.end();\r\n // apply default transform matrix (flipped in the default doc._ctm)\r\n // see document.js & gradient.js\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1, // tiling\r\n PaintType: 2, // 1-colored, 2-uncolored\r\n TilingType: 2, // 2-no distortion\r\n BBox: this.bBox,\r\n XStep: this.xStep,\r\n YStep: this.yStep,\r\n Matrix: m.map(v => +v.toFixed(5)),\r\n Resources: resources\r\n });\r\n pattern.end(this.stream);\r\n return pattern;\r\n }\r\n\r\n embedPatternColorSpaces() {\r\n // map each pattern to an underlying color space\r\n // and embed on each page\r\n underlyingColorSpaces.forEach(csName => {\r\n const csId = this.getPatternColorSpaceId(csName);\r\n\r\n if (this.doc.page.colorSpaces[csId]) return;\r\n const cs = this.doc.ref(['Pattern', csName]);\r\n cs.end();\r\n this.doc.page.colorSpaces[csId] = cs;\r\n });\r\n }\r\n\r\n getPatternColorSpaceId(underlyingColorspace) {\r\n return `CsP${underlyingColorspace}`;\r\n }\r\n\r\n embed() {\r\n if (!this.id) {\r\n this.doc._patternCount = this.doc._patternCount + 1;\r\n this.id = 'P' + this.doc._patternCount;\r\n this.pattern = this.createPattern();\r\n }\r\n\r\n // patterns are embedded in each page\r\n if (!this.doc.page.patterns[this.id]) {\r\n this.doc.page.patterns[this.id] = this.pattern;\r\n }\r\n }\r\n\r\n apply(stroke, patternColor) {\r\n // do any embedding/creating that might be needed\r\n this.embedPatternColorSpaces();\r\n this.embed();\r\n\r\n const normalizedColor = this.doc._normalizeColor(patternColor);\r\n if (!normalizedColor)\r\n throw Error(`invalid pattern color. (value: ${patternColor})`);\r\n\r\n // select one of the pattern color spaces\r\n const csId = this.getPatternColorSpaceId(\r\n this.doc._getColorSpace(normalizedColor)\r\n );\r\n this.doc._setColorSpace(csId, stroke);\r\n\r\n // stroke/fill using the pattern and color (in the above underlying color space)\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(\r\n `${normalizedColor.join(' ')} /${this.id} ${op}`\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFTilingPattern };\r\n","import Gradient from '../gradient';\r\nimport pattern from '../pattern';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\nconst { PDFTilingPattern } = pattern;\r\n\r\nexport default {\r\n initColor() {\r\n // The opacity dictionaries\r\n this._opacityRegistry = {};\r\n this._opacityCount = 0;\r\n this._patternCount = 0;\r\n return (this._gradCount = 0);\r\n },\r\n\r\n _normalizeColor(color) {\r\n if (typeof color === 'string') {\r\n if (color.charAt(0) === '#') {\r\n if (color.length === 4) {\r\n color = color.replace(\r\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n '#$1$1$2$2$3$3'\r\n );\r\n }\r\n const hex = parseInt(color.slice(1), 16);\r\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n } else if (namedColors[color]) {\r\n color = namedColors[color];\r\n }\r\n }\r\n\r\n if (Array.isArray(color)) {\r\n // RGB\r\n if (color.length === 3) {\r\n color = color.map(part => part / 255);\r\n // CMYK\r\n } else if (color.length === 4) {\r\n color = color.map(part => part / 100);\r\n }\r\n return color;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n _setColor(color, stroke) {\r\n if (color instanceof PDFGradient) {\r\n color.apply(stroke);\r\n return true;\r\n // see if tiling pattern, decode & apply it it\r\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\r\n color[0].apply(stroke, color[1]);\r\n return true;\r\n }\r\n // any other case should be a normal color and not a pattern\r\n return this._setColorCore(color, stroke);\r\n },\r\n\r\n _setColorCore(color, stroke) {\r\n color = this._normalizeColor(color);\r\n if (!color) {\r\n return false;\r\n }\r\n\r\n const op = stroke ? 'SCN' : 'scn';\r\n const space = this._getColorSpace(color);\r\n this._setColorSpace(space, stroke);\r\n\r\n color = color.join(' ');\r\n this.addContent(`${color} ${op}`);\r\n\r\n return true;\r\n },\r\n\r\n _setColorSpace(space, stroke) {\r\n const op = stroke ? 'CS' : 'cs';\r\n return this.addContent(`/${space} ${op}`);\r\n },\r\n\r\n _getColorSpace(color) {\r\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n },\r\n\r\n fillColor(color, opacity) {\r\n const set = this._setColor(color, false);\r\n if (set) {\r\n this.fillOpacity(opacity);\r\n }\r\n\r\n // save this for text wrapper, which needs to reset\r\n // the fill color on new pages\r\n this._fillColor = [color, opacity];\r\n return this;\r\n },\r\n\r\n strokeColor(color, opacity) {\r\n const set = this._setColor(color, true);\r\n if (set) {\r\n this.strokeOpacity(opacity);\r\n }\r\n return this;\r\n },\r\n\r\n opacity(opacity) {\r\n this._doOpacity(opacity, opacity);\r\n return this;\r\n },\r\n\r\n fillOpacity(opacity) {\r\n this._doOpacity(opacity, null);\r\n return this;\r\n },\r\n\r\n strokeOpacity(opacity) {\r\n this._doOpacity(null, opacity);\r\n return this;\r\n },\r\n\r\n _doOpacity(fillOpacity, strokeOpacity) {\r\n let dictionary, name;\r\n if (fillOpacity == null && strokeOpacity == null) {\r\n return;\r\n }\r\n\r\n if (fillOpacity != null) {\r\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n }\r\n if (strokeOpacity != null) {\r\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n }\r\n const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n if (this._opacityRegistry[key]) {\r\n [dictionary, name] = this._opacityRegistry[key];\r\n } else {\r\n dictionary = { Type: 'ExtGState' };\r\n\r\n if (fillOpacity != null) {\r\n dictionary.ca = fillOpacity;\r\n }\r\n if (strokeOpacity != null) {\r\n dictionary.CA = strokeOpacity;\r\n }\r\n\r\n dictionary = this.ref(dictionary);\r\n dictionary.end();\r\n const id = ++this._opacityCount;\r\n name = `Gs${id}`;\r\n this._opacityRegistry[key] = [dictionary, name];\r\n }\r\n\r\n this.page.ext_gstates[name] = dictionary;\r\n return this.addContent(`/${name} gs`);\r\n },\r\n\r\n linearGradient(x1, y1, x2, y2) {\r\n return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n },\r\n\r\n radialGradient(x1, y1, r1, x2, y2, r2) {\r\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n },\r\n\r\n pattern(bbox, xStep, yStep, stream) {\r\n return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\r\n }\r\n};\r\n\r\nvar namedColors = {\r\n aliceblue: [240, 248, 255],\r\n antiquewhite: [250, 235, 215],\r\n aqua: [0, 255, 255],\r\n aquamarine: [127, 255, 212],\r\n azure: [240, 255, 255],\r\n beige: [245, 245, 220],\r\n bisque: [255, 228, 196],\r\n black: [0, 0, 0],\r\n blanchedalmond: [255, 235, 205],\r\n blue: [0, 0, 255],\r\n blueviolet: [138, 43, 226],\r\n brown: [165, 42, 42],\r\n burlywood: [222, 184, 135],\r\n cadetblue: [95, 158, 160],\r\n chartreuse: [127, 255, 0],\r\n chocolate: [210, 105, 30],\r\n coral: [255, 127, 80],\r\n cornflowerblue: [100, 149, 237],\r\n cornsilk: [255, 248, 220],\r\n crimson: [220, 20, 60],\r\n cyan: [0, 255, 255],\r\n darkblue: [0, 0, 139],\r\n darkcyan: [0, 139, 139],\r\n darkgoldenrod: [184, 134, 11],\r\n darkgray: [169, 169, 169],\r\n darkgreen: [0, 100, 0],\r\n darkgrey: [169, 169, 169],\r\n darkkhaki: [189, 183, 107],\r\n darkmagenta: [139, 0, 139],\r\n darkolivegreen: [85, 107, 47],\r\n darkorange: [255, 140, 0],\r\n darkorchid: [153, 50, 204],\r\n darkred: [139, 0, 0],\r\n darksalmon: [233, 150, 122],\r\n darkseagreen: [143, 188, 143],\r\n darkslateblue: [72, 61, 139],\r\n darkslategray: [47, 79, 79],\r\n darkslategrey: [47, 79, 79],\r\n darkturquoise: [0, 206, 209],\r\n darkviolet: [148, 0, 211],\r\n deeppink: [255, 20, 147],\r\n deepskyblue: [0, 191, 255],\r\n dimgray: [105, 105, 105],\r\n dimgrey: [105, 105, 105],\r\n dodgerblue: [30, 144, 255],\r\n firebrick: [178, 34, 34],\r\n floralwhite: [255, 250, 240],\r\n forestgreen: [34, 139, 34],\r\n fuchsia: [255, 0, 255],\r\n gainsboro: [220, 220, 220],\r\n ghostwhite: [248, 248, 255],\r\n gold: [255, 215, 0],\r\n goldenrod: [218, 165, 32],\r\n gray: [128, 128, 128],\r\n grey: [128, 128, 128],\r\n green: [0, 128, 0],\r\n greenyellow: [173, 255, 47],\r\n honeydew: [240, 255, 240],\r\n hotpink: [255, 105, 180],\r\n indianred: [205, 92, 92],\r\n indigo: [75, 0, 130],\r\n ivory: [255, 255, 240],\r\n khaki: [240, 230, 140],\r\n lavender: [230, 230, 250],\r\n lavenderblush: [255, 240, 245],\r\n lawngreen: [124, 252, 0],\r\n lemonchiffon: [255, 250, 205],\r\n lightblue: [173, 216, 230],\r\n lightcoral: [240, 128, 128],\r\n lightcyan: [224, 255, 255],\r\n lightgoldenrodyellow: [250, 250, 210],\r\n lightgray: [211, 211, 211],\r\n lightgreen: [144, 238, 144],\r\n lightgrey: [211, 211, 211],\r\n lightpink: [255, 182, 193],\r\n lightsalmon: [255, 160, 122],\r\n lightseagreen: [32, 178, 170],\r\n lightskyblue: [135, 206, 250],\r\n lightslategray: [119, 136, 153],\r\n lightslategrey: [119, 136, 153],\r\n lightsteelblue: [176, 196, 222],\r\n lightyellow: [255, 255, 224],\r\n lime: [0, 255, 0],\r\n limegreen: [50, 205, 50],\r\n linen: [250, 240, 230],\r\n magenta: [255, 0, 255],\r\n maroon: [128, 0, 0],\r\n mediumaquamarine: [102, 205, 170],\r\n mediumblue: [0, 0, 205],\r\n mediumorchid: [186, 85, 211],\r\n mediumpurple: [147, 112, 219],\r\n mediumseagreen: [60, 179, 113],\r\n mediumslateblue: [123, 104, 238],\r\n mediumspringgreen: [0, 250, 154],\r\n mediumturquoise: [72, 209, 204],\r\n mediumvioletred: [199, 21, 133],\r\n midnightblue: [25, 25, 112],\r\n mintcream: [245, 255, 250],\r\n mistyrose: [255, 228, 225],\r\n moccasin: [255, 228, 181],\r\n navajowhite: [255, 222, 173],\r\n navy: [0, 0, 128],\r\n oldlace: [253, 245, 230],\r\n olive: [128, 128, 0],\r\n olivedrab: [107, 142, 35],\r\n orange: [255, 165, 0],\r\n orangered: [255, 69, 0],\r\n orchid: [218, 112, 214],\r\n palegoldenrod: [238, 232, 170],\r\n palegreen: [152, 251, 152],\r\n paleturquoise: [175, 238, 238],\r\n palevioletred: [219, 112, 147],\r\n papayawhip: [255, 239, 213],\r\n peachpuff: [255, 218, 185],\r\n peru: [205, 133, 63],\r\n pink: [255, 192, 203],\r\n plum: [221, 160, 221],\r\n powderblue: [176, 224, 230],\r\n purple: [128, 0, 128],\r\n red: [255, 0, 0],\r\n rosybrown: [188, 143, 143],\r\n royalblue: [65, 105, 225],\r\n saddlebrown: [139, 69, 19],\r\n salmon: [250, 128, 114],\r\n sandybrown: [244, 164, 96],\r\n seagreen: [46, 139, 87],\r\n seashell: [255, 245, 238],\r\n sienna: [160, 82, 45],\r\n silver: [192, 192, 192],\r\n skyblue: [135, 206, 235],\r\n slateblue: [106, 90, 205],\r\n slategray: [112, 128, 144],\r\n slategrey: [112, 128, 144],\r\n snow: [255, 250, 250],\r\n springgreen: [0, 255, 127],\r\n steelblue: [70, 130, 180],\r\n tan: [210, 180, 140],\r\n teal: [0, 128, 128],\r\n thistle: [216, 191, 216],\r\n tomato: [255, 99, 71],\r\n turquoise: [64, 224, 208],\r\n violet: [238, 130, 238],\r\n wheat: [245, 222, 179],\r\n white: [255, 255, 255],\r\n whitesmoke: [245, 245, 245],\r\n yellow: [255, 255, 0],\r\n yellowgreen: [154, 205, 50]\r\n};\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n A: 7,\r\n a: 7,\r\n C: 6,\r\n c: 6,\r\n H: 1,\r\n h: 1,\r\n L: 2,\r\n l: 2,\r\n M: 2,\r\n m: 2,\r\n Q: 4,\r\n q: 4,\r\n S: 4,\r\n s: 4,\r\n T: 2,\r\n t: 2,\r\n V: 1,\r\n v: 1,\r\n Z: 0,\r\n z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n let cmd;\r\n const ret = [];\r\n let args = [];\r\n let curArg = '';\r\n let foundDecimal = false;\r\n let params = 0;\r\n\r\n for (let c of path) {\r\n if (parameters[c] != null) {\r\n params = parameters[c];\r\n if (cmd) {\r\n // save existing command\r\n if (curArg.length > 0) {\r\n args[args.length] = +curArg;\r\n }\r\n ret[ret.length] = { cmd, args };\r\n\r\n args = [];\r\n curArg = '';\r\n foundDecimal = false;\r\n }\r\n\r\n cmd = c;\r\n } else if (\r\n [' ', ','].includes(c) ||\r\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n (c === '.' && foundDecimal)\r\n ) {\r\n if (curArg.length === 0) {\r\n continue;\r\n }\r\n\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n\r\n foundDecimal = c === '.';\r\n\r\n // fix for negative numbers or repeated decimals with no delimeter between commands\r\n curArg = ['-', '.'].includes(c) ? c : '';\r\n } else {\r\n curArg += c;\r\n if (c === '.') {\r\n foundDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n // add the last command\r\n if (curArg.length > 0) {\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n }\r\n\r\n ret[ret.length] = { cmd, args };\r\n\r\n return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n // current point, control point, and subpath starting point\r\n cx = cy = px = py = sx = sy = 0;\r\n\r\n // run the commands\r\n for (let i = 0; i < commands.length; i++) {\r\n const c = commands[i];\r\n if (typeof runners[c.cmd] === 'function') {\r\n runners[c.cmd](doc, c.args);\r\n }\r\n }\r\n};\r\n\r\nconst runners = {\r\n M(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n m(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n C(doc, a) {\r\n cx = a[4];\r\n cy = a[5];\r\n px = a[2];\r\n py = a[3];\r\n return doc.bezierCurveTo(...a);\r\n },\r\n\r\n c(doc, a) {\r\n doc.bezierCurveTo(\r\n a[0] + cx,\r\n a[1] + cy,\r\n a[2] + cx,\r\n a[3] + cy,\r\n a[4] + cx,\r\n a[5] + cy\r\n );\r\n px = cx + a[2];\r\n py = cy + a[3];\r\n cx += a[4];\r\n return (cy += a[5]);\r\n },\r\n\r\n S(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n return (cy = a[3]);\r\n },\r\n\r\n s(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(\r\n cx - (px - cx),\r\n cy - (py - cy),\r\n cx + a[0],\r\n cy + a[1],\r\n cx + a[2],\r\n cy + a[3]\r\n );\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n Q(doc, a) {\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n cy = a[3];\r\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n },\r\n\r\n q(doc, a) {\r\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n T(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n cx = a[0];\r\n return (cy = a[1]);\r\n },\r\n\r\n t(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n cx += a[0];\r\n return (cy += a[1]);\r\n },\r\n\r\n A(doc, a) {\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n a(doc, a) {\r\n a[5] += cx;\r\n a[6] += cy;\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n L(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n l(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n H(doc, a) {\r\n cx = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n h(doc, a) {\r\n cx += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n V(doc, a) {\r\n cy = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n v(doc, a) {\r\n cy += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n Z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n },\r\n\r\n z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n for (let seg of segs) {\r\n const bez = segmentToBezier(...seg);\r\n doc.bezierCurveTo(...bez);\r\n }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n const th = rotateX * (Math.PI / 180);\r\n const sin_th = Math.sin(th);\r\n const cos_th = Math.cos(th);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n if (pl > 1) {\r\n pl = Math.sqrt(pl);\r\n rx *= pl;\r\n ry *= pl;\r\n }\r\n\r\n const a00 = cos_th / rx;\r\n const a01 = sin_th / rx;\r\n const a10 = -sin_th / ry;\r\n const a11 = cos_th / ry;\r\n const x0 = a00 * ox + a01 * oy;\r\n const y0 = a10 * ox + a11 * oy;\r\n const x1 = a00 * x + a01 * y;\r\n const y1 = a10 * x + a11 * y;\r\n\r\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n let sfactor_sq = 1 / d - 0.25;\r\n if (sfactor_sq < 0) {\r\n sfactor_sq = 0;\r\n }\r\n let sfactor = Math.sqrt(sfactor_sq);\r\n if (sweep === large) {\r\n sfactor = -sfactor;\r\n }\r\n\r\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n let th_arc = th1 - th0;\r\n if (th_arc < 0 && sweep === 1) {\r\n th_arc += 2 * Math.PI;\r\n } else if (th_arc > 0 && sweep === 0) {\r\n th_arc -= 2 * Math.PI;\r\n }\r\n\r\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n const result = [];\r\n\r\n for (let i = 0; i < segments; i++) {\r\n const th2 = th0 + (i * th_arc) / segments;\r\n const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n const a00 = cos_th * rx;\r\n const a01 = -sin_th * ry;\r\n const a10 = sin_th * rx;\r\n const a11 = cos_th * ry;\r\n\r\n const th_half = 0.5 * (th1 - th0);\r\n const t =\r\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n Math.sin(th_half);\r\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n const x3 = cx + Math.cos(th1);\r\n const y3 = cy + Math.sin(th1);\r\n const x2 = x3 + t * Math.sin(th1);\r\n const y2 = y3 - t * Math.cos(th1);\r\n\r\n return [\r\n a00 * x1 + a01 * y1,\r\n a10 * x1 + a11 * y1,\r\n a00 * x2 + a01 * y2,\r\n a10 * x2 + a11 * y2,\r\n a00 * x3 + a01 * y3,\r\n a10 * x3 + a11 * y3\r\n ];\r\n};\r\n\r\nclass SVGPath {\r\n static apply(doc, path) {\r\n const commands = parse(path);\r\n apply(commands, doc);\r\n }\r\n}\r\n\r\nexport default SVGPath;\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n initVector() {\r\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n return (this._ctmStack = []);\r\n },\r\n\r\n save() {\r\n this._ctmStack.push(this._ctm.slice());\r\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n return this.addContent('q');\r\n },\r\n\r\n restore() {\r\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n return this.addContent('Q');\r\n },\r\n\r\n closePath() {\r\n return this.addContent('h');\r\n },\r\n\r\n lineWidth(w) {\r\n return this.addContent(`${number(w)} w`);\r\n },\r\n\r\n _CAP_STYLES: {\r\n BUTT: 0,\r\n ROUND: 1,\r\n SQUARE: 2\r\n },\r\n\r\n lineCap(c) {\r\n if (typeof c === 'string') {\r\n c = this._CAP_STYLES[c.toUpperCase()];\r\n }\r\n return this.addContent(`${c} J`);\r\n },\r\n\r\n _JOIN_STYLES: {\r\n MITER: 0,\r\n ROUND: 1,\r\n BEVEL: 2\r\n },\r\n\r\n lineJoin(j) {\r\n if (typeof j === 'string') {\r\n j = this._JOIN_STYLES[j.toUpperCase()];\r\n }\r\n return this.addContent(`${j} j`);\r\n },\r\n\r\n miterLimit(m) {\r\n return this.addContent(`${number(m)} M`);\r\n },\r\n\r\n dash(length, options = {}) {\r\n const originalLength = length;\r\n if (!Array.isArray(length)) {\r\n length = [length, options.space || length];\r\n }\r\n\r\n const valid = length.every(x => Number.isFinite(x) && x > 0);\r\n if (!valid) {\r\n throw new Error(\r\n `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\r\n options\r\n )}) invalid, lengths must be numeric and greater than zero`\r\n );\r\n }\r\n\r\n length = length.map(number).join(' ');\r\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\r\n },\r\n\r\n undash() {\r\n return this.addContent('[] 0 d');\r\n },\r\n\r\n moveTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} m`);\r\n },\r\n\r\n lineTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} l`);\r\n },\r\n\r\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n return this.addContent(\r\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n x\r\n )} ${number(y)} c`\r\n );\r\n },\r\n\r\n quadraticCurveTo(cpx, cpy, x, y) {\r\n return this.addContent(\r\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n );\r\n },\r\n\r\n rect(x, y, w, h) {\r\n return this.addContent(\r\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n );\r\n },\r\n\r\n roundedRect(x, y, w, h, r) {\r\n if (r == null) {\r\n r = 0;\r\n }\r\n r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n // amount to inset control points from corners (see `ellipse`)\r\n const c = r * (1.0 - KAPPA);\r\n\r\n this.moveTo(x + r, y);\r\n this.lineTo(x + w - r, y);\r\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n this.lineTo(x + w, y + h - r);\r\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n this.lineTo(x + r, y + h);\r\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n this.lineTo(x, y + r);\r\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n return this.closePath();\r\n },\r\n\r\n ellipse(x, y, r1, r2) {\r\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n if (r2 == null) {\r\n r2 = r1;\r\n }\r\n x -= r1;\r\n y -= r2;\r\n const ox = r1 * KAPPA;\r\n const oy = r2 * KAPPA;\r\n const xe = x + r1 * 2;\r\n const ye = y + r2 * 2;\r\n const xm = x + r1;\r\n const ym = y + r2;\r\n\r\n this.moveTo(x, ym);\r\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n return this.closePath();\r\n },\r\n\r\n circle(x, y, radius) {\r\n return this.ellipse(x, y, radius);\r\n },\r\n\r\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n if (anticlockwise == null) {\r\n anticlockwise = false;\r\n }\r\n const TWO_PI = 2.0 * Math.PI;\r\n const HALF_PI = 0.5 * Math.PI;\r\n\r\n let deltaAng = endAngle - startAngle;\r\n\r\n if (Math.abs(deltaAng) > TWO_PI) {\r\n // draw only full circle if more than that is specified\r\n deltaAng = TWO_PI;\r\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n // necessary to flip direction of rendering\r\n const dir = anticlockwise ? -1 : 1;\r\n deltaAng = dir * TWO_PI + deltaAng;\r\n }\r\n\r\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n const segAng = deltaAng / numSegs;\r\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n let curAng = startAngle;\r\n\r\n // component distances between anchor point and control point\r\n let deltaCx = -Math.sin(curAng) * handleLen;\r\n let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // anchor point\r\n let ax = x + Math.cos(curAng) * radius;\r\n let ay = y + Math.sin(curAng) * radius;\r\n\r\n // calculate and render segments\r\n this.moveTo(ax, ay);\r\n\r\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n // starting control point\r\n const cp1x = ax + deltaCx;\r\n const cp1y = ay + deltaCy;\r\n\r\n // step angle\r\n curAng += segAng;\r\n\r\n // next anchor point\r\n ax = x + Math.cos(curAng) * radius;\r\n ay = y + Math.sin(curAng) * radius;\r\n\r\n // next control point delta\r\n deltaCx = -Math.sin(curAng) * handleLen;\r\n deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // ending control point\r\n const cp2x = ax - deltaCx;\r\n const cp2y = ay - deltaCy;\r\n\r\n // render segment\r\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n polygon(...points) {\r\n this.moveTo(...(points.shift() || []));\r\n for (let point of points) {\r\n this.lineTo(...(point || []));\r\n }\r\n return this.closePath();\r\n },\r\n\r\n path(path) {\r\n SVGPath.apply(this, path);\r\n return this;\r\n },\r\n\r\n _windingRule(rule) {\r\n if (/even-?odd/.test(rule)) {\r\n return '*';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n fill(color, rule) {\r\n if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n rule = color;\r\n color = null;\r\n }\r\n\r\n if (color) {\r\n this.fillColor(color);\r\n }\r\n return this.addContent(`f${this._windingRule(rule)}`);\r\n },\r\n\r\n stroke(color) {\r\n if (color) {\r\n this.strokeColor(color);\r\n }\r\n return this.addContent('S');\r\n },\r\n\r\n fillAndStroke(fillColor, strokeColor, rule) {\r\n if (strokeColor == null) {\r\n strokeColor = fillColor;\r\n }\r\n const isFillRule = /(even-?odd)|(non-?zero)/;\r\n if (isFillRule.test(fillColor)) {\r\n rule = fillColor;\r\n fillColor = null;\r\n }\r\n\r\n if (isFillRule.test(strokeColor)) {\r\n rule = strokeColor;\r\n strokeColor = fillColor;\r\n }\r\n\r\n if (fillColor) {\r\n this.fillColor(fillColor);\r\n this.strokeColor(strokeColor);\r\n }\r\n\r\n return this.addContent(`B${this._windingRule(rule)}`);\r\n },\r\n\r\n clip(rule) {\r\n return this.addContent(`W${this._windingRule(rule)} n`);\r\n },\r\n\r\n transform(m11, m12, m21, m22, dx, dy) {\r\n // keep track of the current transformation matrix\r\n if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) {\r\n // Ignore identity transforms\r\n return this;\r\n }\r\n const m = this._ctm;\r\n const [m0, m1, m2, m3, m4, m5] = m;\r\n m[0] = m0 * m11 + m2 * m12;\r\n m[1] = m1 * m11 + m3 * m12;\r\n m[2] = m0 * m21 + m2 * m22;\r\n m[3] = m1 * m21 + m3 * m22;\r\n m[4] = m0 * dx + m2 * dy + m4;\r\n m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n return this.addContent(`${values} cm`);\r\n },\r\n\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n },\r\n\r\n rotate(angle, options = {}) {\r\n let y;\r\n const rad = (angle * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n let x = (y = 0);\r\n\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n const x1 = x * cos - y * sin;\r\n const y1 = x * sin + y * cos;\r\n x -= x1;\r\n y -= y1;\r\n }\r\n\r\n return this.transform(cos, sin, -sin, cos, x, y);\r\n },\r\n\r\n scale(xFactor, yFactor, options = {}) {\r\n let y;\r\n if (yFactor == null) {\r\n yFactor = xFactor;\r\n }\r\n if (typeof yFactor === 'object') {\r\n options = yFactor;\r\n yFactor = xFactor;\r\n }\r\n\r\n let x = (y = 0);\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n x -= xFactor * x;\r\n y -= yFactor * y;\r\n }\r\n\r\n return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n 402: 131,\r\n 8211: 150,\r\n 8212: 151,\r\n 8216: 145,\r\n 8217: 146,\r\n 8218: 130,\r\n 8220: 147,\r\n 8221: 148,\r\n 8222: 132,\r\n 8224: 134,\r\n 8225: 135,\r\n 8226: 149,\r\n 8230: 133,\r\n 8364: 128,\r\n 8240: 137,\r\n 8249: 139,\r\n 8250: 155,\r\n 710: 136,\r\n 8482: 153,\r\n 338: 140,\r\n 339: 156,\r\n 732: 152,\r\n 352: 138,\r\n 353: 154,\r\n 376: 159,\r\n 381: 142,\r\n 382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n \r\nspace exclam quotedbl numbersign\r\ndollar percent ampersand quotesingle\r\nparenleft parenright asterisk plus\r\ncomma hyphen period slash\r\nzero one two three\r\nfour five six seven\r\neight nine colon semicolon\r\nless equal greater question\r\n \r\nat A B C\r\nD E F G\r\nH I J K\r\nL M N O\r\nP Q R S\r\nT U V W\r\nX Y Z bracketleft\r\nbackslash bracketright asciicircum underscore\r\n \r\ngrave a b c\r\nd e f g\r\nh i j k\r\nl m n o\r\np q r s\r\nt u v w\r\nx y z braceleft\r\nbar braceright asciitilde .notdef\r\n \r\nEuro .notdef quotesinglbase florin\r\nquotedblbase ellipsis dagger daggerdbl\r\ncircumflex perthousand Scaron guilsinglleft\r\nOE .notdef Zcaron .notdef\r\n.notdef quoteleft quoteright quotedblleft\r\nquotedblright bullet endash emdash\r\ntilde trademark scaron guilsinglright\r\noe .notdef zcaron ydieresis\r\n \r\nspace exclamdown cent sterling\r\ncurrency yen brokenbar section\r\ndieresis copyright ordfeminine guillemotleft\r\nlogicalnot hyphen registered macron\r\ndegree plusminus twosuperior threesuperior\r\nacute mu paragraph periodcentered\r\ncedilla onesuperior ordmasculine guillemotright\r\nonequarter onehalf threequarters questiondown\r\n \r\nAgrave Aacute Acircumflex Atilde\r\nAdieresis Aring AE Ccedilla\r\nEgrave Eacute Ecircumflex Edieresis\r\nIgrave Iacute Icircumflex Idieresis\r\nEth Ntilde Ograve Oacute\r\nOcircumflex Otilde Odieresis multiply\r\nOslash Ugrave Uacute Ucircumflex\r\nUdieresis Yacute Thorn germandbls\r\n \r\nagrave aacute acircumflex atilde\r\nadieresis aring ae ccedilla\r\negrave eacute ecircumflex edieresis\r\nigrave iacute icircumflex idieresis\r\neth ntilde ograve oacute\r\nocircumflex otilde odieresis divide\r\noslash ugrave uacute ucircumflex\r\nudieresis yacute thorn ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n static open(filename) {\r\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n }\r\n\r\n constructor(contents) {\r\n this.contents = contents;\r\n this.attributes = {};\r\n this.glyphWidths = {};\r\n this.boundingBoxes = {};\r\n this.kernPairs = {};\r\n\r\n this.parse();\r\n // todo: remove charWidths since appears to not be used\r\n this.charWidths = new Array(256);\r\n for (let char = 0; char <= 255; char++) {\r\n this.charWidths[char] = this.glyphWidths[characters[char]];\r\n }\r\n\r\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n this.ascender = +(this.attributes['Ascender'] || 0);\r\n this.descender = +(this.attributes['Descender'] || 0);\r\n this.xHeight = +(this.attributes['XHeight'] || 0);\r\n this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n this.lineGap =\r\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n }\r\n\r\n parse() {\r\n let section = '';\r\n for (let line of this.contents.split('\\n')) {\r\n var match;\r\n var a;\r\n if ((match = line.match(/^Start(\\w+)/))) {\r\n section = match[1];\r\n continue;\r\n } else if ((match = line.match(/^End(\\w+)/))) {\r\n section = '';\r\n continue;\r\n }\r\n\r\n switch (section) {\r\n case 'FontMetrics':\r\n match = line.match(/(^\\w+)\\s+(.*)/);\r\n var key = match[1];\r\n var value = match[2];\r\n\r\n if ((a = this.attributes[key])) {\r\n if (!Array.isArray(a)) {\r\n a = this.attributes[key] = [a];\r\n }\r\n a.push(value);\r\n } else {\r\n this.attributes[key] = value;\r\n }\r\n break;\r\n\r\n case 'CharMetrics':\r\n if (!/^CH?\\s/.test(line)) {\r\n continue;\r\n }\r\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n break;\r\n\r\n case 'KernPairs':\r\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n if (match) {\r\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n encodeText(text) {\r\n const res = [];\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n let char = text.charCodeAt(i);\r\n char = WIN_ANSI_MAP[char] || char;\r\n res.push(char.toString(16));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n glyphsForString(string) {\r\n const glyphs = [];\r\n\r\n for (let i = 0, len = string.length; i < len; i++) {\r\n const charCode = string.charCodeAt(i);\r\n glyphs.push(this.characterToGlyph(charCode));\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n characterToGlyph(character) {\r\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n }\r\n\r\n widthOfGlyph(glyph) {\r\n return this.glyphWidths[glyph] || 0;\r\n }\r\n\r\n getKernPair(left, right) {\r\n return this.kernPairs[left + '\\0' + right] || 0;\r\n }\r\n\r\n advancesForGlyphs(glyphs) {\r\n const advances = [];\r\n\r\n for (let index = 0; index < glyphs.length; index++) {\r\n const left = glyphs[index];\r\n const right = glyphs[index + 1];\r\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n }\r\n\r\n return advances;\r\n }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n constructor() {}\r\n\r\n encode() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n widthOfString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n ref() {\r\n return this.dictionary != null\r\n ? this.dictionary\r\n : (this.dictionary = this.document.ref());\r\n }\r\n\r\n finalize() {\r\n if (this.embedded || this.dictionary == null) {\r\n return;\r\n }\r\n\r\n this.embed();\r\n return (this.embedded = true);\r\n }\r\n\r\n embed() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n lineHeight(size, includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n const gap = includeGap ? this.lineGap : 0;\r\n return ((this.ascender + gap - this.descender) / 1000) * size;\r\n }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n Courier() {\r\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n },\r\n 'Courier-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n },\r\n 'Courier-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n },\r\n 'Courier-BoldOblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n },\r\n Helvetica() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n },\r\n 'Helvetica-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n },\r\n 'Helvetica-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n },\r\n 'Helvetica-BoldOblique'() {\r\n return fs.readFileSync(\r\n __dirname + '/data/Helvetica-BoldOblique.afm',\r\n 'utf8'\r\n );\r\n },\r\n 'Times-Roman'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n },\r\n 'Times-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n },\r\n 'Times-Italic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n },\r\n 'Times-BoldItalic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n },\r\n Symbol() {\r\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n },\r\n ZapfDingbats() {\r\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n constructor(document, name, id) {\r\n super();\r\n this.document = document;\r\n this.name = name;\r\n this.id = id;\r\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n ({\r\n ascender: this.ascender,\r\n descender: this.descender,\r\n bbox: this.bbox,\r\n lineGap: this.lineGap,\r\n xHeight: this.xHeight,\r\n capHeight: this.capHeight\r\n } = this.font);\r\n }\r\n\r\n embed() {\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n BaseFont: this.name,\r\n Subtype: 'Type1',\r\n Encoding: 'WinAnsiEncoding'\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n encode(text) {\r\n const encoded = this.font.encodeText(text);\r\n const glyphs = this.font.glyphsForString(`${text}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n const positions = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n positions.push({\r\n xAdvance: advances[i],\r\n yAdvance: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n advanceWidth: this.font.widthOfGlyph(glyph)\r\n });\r\n }\r\n\r\n return [encoded, positions];\r\n }\r\n\r\n widthOfString(string, size) {\r\n const glyphs = this.font.glyphsForString(`${string}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n let width = 0;\r\n for (let advance of advances) {\r\n width += advance;\r\n }\r\n\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n static isStandardFont(name) {\r\n return name in STANDARD_FONTS;\r\n }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n constructor(document, font, id) {\r\n super();\r\n this.document = document;\r\n this.font = font;\r\n this.id = id;\r\n this.subset = this.font.createSubset();\r\n this.unicode = [[0]];\r\n this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n this.name = this.font.postscriptName;\r\n this.scale = 1000 / this.font.unitsPerEm;\r\n this.ascender = this.font.ascent * this.scale;\r\n this.descender = this.font.descent * this.scale;\r\n this.xHeight = this.font.xHeight * this.scale;\r\n this.capHeight = this.font.capHeight * this.scale;\r\n this.lineGap = this.font.lineGap * this.scale;\r\n this.bbox = this.font.bbox;\r\n\r\n if (document.options.fontLayoutCache !== false) {\r\n this.layoutCache = Object.create(null);\r\n }\r\n }\r\n\r\n layoutRun(text, features) {\r\n const run = this.font.layout(text, features);\r\n\r\n // Normalize position values\r\n for (let i = 0; i < run.positions.length; i++) {\r\n const position = run.positions[i];\r\n for (let key in position) {\r\n position[key] *= this.scale;\r\n }\r\n\r\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n }\r\n\r\n return run;\r\n }\r\n\r\n layoutCached(text) {\r\n if (!this.layoutCache) {\r\n return this.layoutRun(text);\r\n }\r\n let cached;\r\n if ((cached = this.layoutCache[text])) {\r\n return cached;\r\n }\r\n\r\n const run = this.layoutRun(text);\r\n this.layoutCache[text] = run;\r\n return run;\r\n }\r\n\r\n layout(text, features, onlyWidth) {\r\n // Skip the cache if any user defined features are applied\r\n if (features) {\r\n return this.layoutRun(text, features);\r\n }\r\n\r\n let glyphs = onlyWidth ? null : [];\r\n let positions = onlyWidth ? null : [];\r\n let advanceWidth = 0;\r\n\r\n // Split the string by words to increase cache efficiency.\r\n // For this purpose, spaces and tabs are a good enough delimeter.\r\n let last = 0;\r\n let index = 0;\r\n while (index <= text.length) {\r\n var needle;\r\n if (\r\n (index === text.length && last < index) ||\r\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n ) {\r\n const run = this.layoutCached(text.slice(last, ++index));\r\n if (!onlyWidth) {\r\n glyphs = glyphs.concat(run.glyphs);\r\n positions = positions.concat(run.positions);\r\n }\r\n\r\n advanceWidth += run.advanceWidth;\r\n last = index;\r\n } else {\r\n index++;\r\n }\r\n }\r\n\r\n return { glyphs, positions, advanceWidth };\r\n }\r\n\r\n encode(text, features) {\r\n const { glyphs, positions } = this.layout(text, features);\r\n\r\n const res = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n const gid = this.subset.includeGlyph(glyph.id);\r\n res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n if (this.widths[gid] == null) {\r\n this.widths[gid] = glyph.advanceWidth * this.scale;\r\n }\r\n if (this.unicode[gid] == null) {\r\n this.unicode[gid] = glyph.codePoints;\r\n }\r\n }\r\n\r\n return [res, positions];\r\n }\r\n\r\n widthOfString(string, size, features) {\r\n const width = this.layout(string, features, true).advanceWidth;\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n embed() {\r\n const isCFF = this.subset.cff != null;\r\n const fontFile = this.document.ref();\r\n\r\n if (isCFF) {\r\n fontFile.data.Subtype = 'CIDFontType0C';\r\n }\r\n\r\n this.subset\r\n .encodeStream()\r\n .on('data', data => fontFile.write(data))\r\n .on('end', () => fontFile.end());\r\n\r\n const familyClass =\r\n ((this.font['OS/2'] != null\r\n ? this.font['OS/2'].sFamilyClass\r\n : undefined) || 0) >> 8;\r\n let flags = 0;\r\n if (this.font.post.isFixedPitch) {\r\n flags |= 1 << 0;\r\n }\r\n if (1 <= familyClass && familyClass <= 7) {\r\n flags |= 1 << 1;\r\n }\r\n flags |= 1 << 2; // assume the font uses non-latin characters\r\n if (familyClass === 10) {\r\n flags |= 1 << 3;\r\n }\r\n if (this.font.head.macStyle.italic) {\r\n flags |= 1 << 6;\r\n }\r\n\r\n // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\r\n const tag = [1, 2, 3, 4, 5, 6]\r\n .map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\r\n .join('');\r\n const name = tag + '+' + this.font.postscriptName;\r\n\r\n const { bbox } = this.font;\r\n const descriptor = this.document.ref({\r\n Type: 'FontDescriptor',\r\n FontName: name,\r\n Flags: flags,\r\n FontBBox: [\r\n bbox.minX * this.scale,\r\n bbox.minY * this.scale,\r\n bbox.maxX * this.scale,\r\n bbox.maxY * this.scale\r\n ],\r\n ItalicAngle: this.font.italicAngle,\r\n Ascent: this.ascender,\r\n Descent: this.descender,\r\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n XHeight: (this.font.xHeight || 0) * this.scale,\r\n StemV: 0\r\n }); // not sure how to calculate this\r\n\r\n if (isCFF) {\r\n descriptor.data.FontFile3 = fontFile;\r\n } else {\r\n descriptor.data.FontFile2 = fontFile;\r\n }\r\n\r\n if (this.document.subset) {\r\n const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\r\n const CIDSetRef = this.document.ref();\r\n CIDSetRef.write(CIDSet);\r\n CIDSetRef.end();\r\n\r\n descriptor.data.CIDSet = CIDSetRef;\r\n }\r\n\r\n descriptor.end();\r\n\r\n const descendantFontData = {\r\n Type: 'Font',\r\n Subtype: 'CIDFontType0',\r\n BaseFont: name,\r\n CIDSystemInfo: {\r\n Registry: new String('Adobe'),\r\n Ordering: new String('Identity'),\r\n Supplement: 0\r\n },\r\n FontDescriptor: descriptor,\r\n W: [0, this.widths]\r\n };\r\n\r\n if (!isCFF) {\r\n descendantFontData.Subtype = 'CIDFontType2';\r\n descendantFontData.CIDToGIDMap = 'Identity';\r\n }\r\n\r\n const descendantFont = this.document.ref(descendantFontData);\r\n\r\n descendantFont.end();\r\n\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n Subtype: 'Type0',\r\n BaseFont: name,\r\n Encoding: 'Identity-H',\r\n DescendantFonts: [descendantFont],\r\n ToUnicode: this.toUnicodeCmap()\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n // Maps the glyph ids encoded in the PDF back to unicode strings\r\n // Because of ligature substitutions and the like, there may be one or more\r\n // unicode characters represented by each glyph.\r\n toUnicodeCmap() {\r\n const cmap = this.document.ref();\r\n\r\n const entries = [];\r\n for (let codePoints of this.unicode) {\r\n const encoded = [];\r\n\r\n // encode codePoints to utf16\r\n for (let value of codePoints) {\r\n if (value > 0xffff) {\r\n value -= 0x10000;\r\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n value = 0xdc00 | (value & 0x3ff);\r\n }\r\n\r\n encoded.push(toHex(value));\r\n }\r\n\r\n entries.push(`<${encoded.join(' ')}>`);\r\n }\r\n\r\n const chunkSize = 256;\r\n const chunks = Math.ceil(entries.length / chunkSize);\r\n const ranges = [];\r\n for (let i = 0; i < chunks; i++) {\r\n const start = i * chunkSize;\r\n const end = Math.min((i + 1) * chunkSize, entries.length);\r\n ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`);\r\n }\r\n\r\n cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n /Registry (Adobe)\r\n /Ordering (UCS)\r\n /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000>\r\nendcodespacerange\r\n1 beginbfrange\r\n${ranges.join('\\n')}\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n return cmap;\r\n }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from 'fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n static open(document, src, family, id) {\r\n let font;\r\n if (typeof src === 'string') {\r\n if (StandardFont.isStandardFont(src)) {\r\n return new StandardFont(document, src, id);\r\n }\r\n\r\n src = fs.readFileSync(src);\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n font = fontkit.create(src, family);\r\n } else if (src instanceof Uint8Array) {\r\n font = fontkit.create(Buffer.from(src), family);\r\n } else if (src instanceof ArrayBuffer) {\r\n font = fontkit.create(Buffer.from(new Uint8Array(src)), family);\r\n }\r\n\r\n if (font == null) {\r\n throw new Error('Not a supported font format or standard PDF font.');\r\n }\r\n\r\n return new EmbeddedFont(document, font, id);\r\n }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n initFonts(defaultFont = 'Helvetica') {\r\n // Lookup table for embedded fonts\r\n this._fontFamilies = {};\r\n this._fontCount = 0;\r\n\r\n // Font state\r\n this._fontSize = 12;\r\n this._font = null;\r\n\r\n this._registeredFonts = {};\r\n\r\n // Set the default font\r\n if (defaultFont) {\r\n this.font(defaultFont);\r\n }\r\n },\r\n\r\n font(src, family, size) {\r\n let cacheKey, font;\r\n if (typeof family === 'number') {\r\n size = family;\r\n family = null;\r\n }\r\n\r\n // check registered fonts if src is a string\r\n if (typeof src === 'string' && this._registeredFonts[src]) {\r\n cacheKey = src;\r\n ({ src, family } = this._registeredFonts[src]);\r\n } else {\r\n cacheKey = family || src;\r\n if (typeof cacheKey !== 'string') {\r\n cacheKey = null;\r\n }\r\n }\r\n\r\n if (size != null) {\r\n this.fontSize(size);\r\n }\r\n\r\n // fast path: check if the font is already in the PDF\r\n if ((font = this._fontFamilies[cacheKey])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // load the font\r\n const id = `F${++this._fontCount}`;\r\n this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n // check for existing font familes with the same name already in the PDF\r\n // useful if the font was passed as a buffer\r\n if ((font = this._fontFamilies[this._font.name])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // save the font for reuse later\r\n if (cacheKey) {\r\n this._fontFamilies[cacheKey] = this._font;\r\n }\r\n\r\n if (this._font.name) {\r\n this._fontFamilies[this._font.name] = this._font;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n fontSize(_fontSize) {\r\n this._fontSize = _fontSize;\r\n return this;\r\n },\r\n\r\n currentLineHeight(includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n return this._font.lineHeight(this._fontSize, includeGap);\r\n },\r\n\r\n registerFont(name, src, family) {\r\n this._registeredFonts[name] = {\r\n src,\r\n family\r\n };\r\n\r\n return this;\r\n }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\n\r\nconst SOFT_HYPHEN = '\\u00AD';\r\nconst HYPHEN = '-';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.indent = options.indent || 0;\r\n this.characterSpacing = options.characterSpacing || 0;\r\n this.wordSpacing = options.wordSpacing === 0;\r\n this.columns = options.columns || 1;\r\n this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n this.lineWidth =\r\n (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = this.startY + options.height;\r\n } else {\r\n this.maxY = this.document.page.maxY();\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', options => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n return this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n return (this.continuedX = 0);\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', options => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n return this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return (\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing\r\n );\r\n }\r\n\r\n canFit(word, w) {\r\n if (word[word.length - 1] != SOFT_HYPHEN) {\r\n return w <= this.spaceLeft;\r\n }\r\n return w + this.wordWidth(HYPHEN) <= this.spaceLeft;\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // check for the edge case where a single character cannot fit into a line.\r\n if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n l = 1;\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n if (options.indent != null) {\r\n this.indent = options.indent;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing = options.characterSpacing;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = options.wordSpacing;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (this.canFit(word, w)) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || !this.canFit(word, w)) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n this.document.y + lh * 2 > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n // Previous entry is a soft hyphen - add visible hyphen.\r\n if (buffer[buffer.length - 1] == SOFT_HYPHEN) {\r\n buffer = buffer.slice(0, -1) + HYPHEN;\r\n this.spaceLeft -= this.wordWidth(HYPHEN);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (this.document.y + lh > this.maxY) {\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n return (this.document.y = y);\r\n } else {\r\n return (this.document.x = this.startX);\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n this.emit('sectionEnd', options, this);\r\n\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.continueOnNewPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...this.document._fillColor);\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n this.emit('sectionStart', options, this);\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n initText() {\r\n this._line = this._line.bind(this);\r\n // Current coordinates\r\n this.x = 0;\r\n this.y = 0;\r\n return (this._lineGap = 0);\r\n },\r\n\r\n lineGap(_lineGap) {\r\n this._lineGap = _lineGap;\r\n return this;\r\n },\r\n\r\n moveDown(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n moveUp(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n _text(text, x, y, options, lineCallback) {\r\n options = this._initOptions(x, y, options);\r\n\r\n // Convert text to a string\r\n text = text == null ? '' : `${text}`;\r\n\r\n // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n if (options.wordSpacing) {\r\n text = text.replace(/\\s{2,}/g, ' ');\r\n }\r\n\r\n const addStructure = () => {\r\n if (options.structParent) {\r\n options.structParent.add(this.struct(options.structType || 'P',\r\n [ this.markStructureContent(options.structType || 'P') ]));\r\n }\r\n };\r\n\r\n // word wrapping\r\n if (options.width) {\r\n let wrapper = this._wrapper;\r\n if (!wrapper) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', lineCallback);\r\n wrapper.on('firstLine', addStructure);\r\n }\r\n\r\n this._wrapper = options.continued ? wrapper : null;\r\n this._textOptions = options.continued ? options : null;\r\n wrapper.wrap(text, options);\r\n\r\n // render paragraphs as single lines\r\n } else {\r\n for (let line of text.split('\\n')) {\r\n addStructure();\r\n lineCallback(line, options);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n text(text, x, y, options) {\r\n return this._text(text, x, y, options, this._line);\r\n },\r\n\r\n widthOfString(string, options = {}) {\r\n return (\r\n this._font.widthOfString(string, this._fontSize, options.features) +\r\n (options.characterSpacing || 0) * (string.length - 1)\r\n );\r\n },\r\n\r\n heightOfString(text, options) {\r\n const { x, y } = this;\r\n\r\n options = this._initOptions(options);\r\n options.height = Infinity; // don't break pages\r\n\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n this._text(text, this.x, this.y, options, () => {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n });\r\n\r\n const height = this.y - y;\r\n this.x = x;\r\n this.y = y;\r\n\r\n return height;\r\n },\r\n\r\n list(list, x, y, options, wrapper) {\r\n options = this._initOptions(x, y, options);\r\n\r\n const listType = options.listType || 'bullet';\r\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n const midLine = unit / 2;\r\n const r = options.bulletRadius || unit / 3;\r\n const indent =\r\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n const itemIndent =\r\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n let level = 1;\r\n const items = [];\r\n const levels = [];\r\n const numbers = [];\r\n\r\n var flatten = function(list) {\r\n let n = 1;\r\n for (let i = 0; i < list.length; i++) {\r\n const item = list[i];\r\n if (Array.isArray(item)) {\r\n level++;\r\n flatten(item);\r\n level--;\r\n } else {\r\n items.push(item);\r\n levels.push(level);\r\n if (listType !== 'bullet') {\r\n numbers.push(n++);\r\n }\r\n }\r\n }\r\n };\r\n\r\n flatten(list);\r\n\r\n const label = function(n) {\r\n switch (listType) {\r\n case 'numbered':\r\n return `${n}.`;\r\n case 'lettered':\r\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n var times = Math.floor((n - 1) / 26 + 1);\r\n var text = Array(times + 1).join(letter);\r\n return `${text}.`;\r\n }\r\n };\r\n\r\n const drawListItem = function(listItem) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', this._line);\r\n\r\n level = 1;\r\n let i = 0;\r\n wrapper.once('firstLine', () => {\r\n let item, itemType, labelType, bodyType;\r\n if (options.structParent) {\r\n if (options.structTypes) {\r\n [itemType, labelType, bodyType] = options.structTypes;\r\n } else {\r\n [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody'];\r\n }\r\n }\r\n\r\n if (itemType) {\r\n item = this.struct(itemType);\r\n options.structParent.add(item);\r\n } else if (options.structParent) {\r\n item = options.structParent;\r\n }\r\n\r\n let l;\r\n if ((l = levels[i++]) !== level) {\r\n const diff = itemIndent * (l - level);\r\n this.x += diff;\r\n wrapper.lineWidth -= diff;\r\n level = l;\r\n }\r\n\r\n if (item && (labelType || bodyType)) {\r\n item.add(this.struct(labelType || bodyType,\r\n [this.markStructureContent(labelType || bodyType)]));\r\n }\r\n switch (listType) {\r\n case 'bullet':\r\n this.circle(this.x - indent + r, this.y + midLine, r);\r\n this.fill();\r\n break;\r\n case 'numbered':\r\n case 'lettered':\r\n var text = label(numbers[i - 1]);\r\n this._fragment(text, this.x - indent, this.y, options);\r\n break;\r\n }\r\n\r\n if (item && labelType && bodyType) {\r\n item.add(this.struct(bodyType, [this.markStructureContent(bodyType)]));\r\n }\r\n if (item && item !== options.structParent) {\r\n item.end();\r\n }\r\n });\r\n\r\n wrapper.on('sectionStart', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x += pos;\r\n return (wrapper.lineWidth -= pos);\r\n });\r\n\r\n wrapper.on('sectionEnd', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x -= pos;\r\n return (wrapper.lineWidth += pos);\r\n });\r\n\r\n wrapper.wrap(listItem, options);\r\n };\r\n\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n drawListItem.call(this, items[i]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n _initOptions(x = {}, y, options = {}) {\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // clone options object\r\n const result = Object.assign({}, options);\r\n\r\n // extend options with previous values for continued text\r\n if (this._textOptions) {\r\n for (let key in this._textOptions) {\r\n const val = this._textOptions[key];\r\n if (key !== 'continued') {\r\n if (result[key] === undefined) {\r\n result[key] = val;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the current position\r\n if (x != null) {\r\n this.x = x;\r\n }\r\n if (y != null) {\r\n this.y = y;\r\n }\r\n\r\n // wrap to margins if no x or y position passed\r\n if (result.lineBreak !== false) {\r\n if (result.width == null) {\r\n result.width = this.page.width - this.x - this.page.margins.right;\r\n }\r\n result.width = Math.max(result.width, 0);\r\n }\r\n\r\n if (!result.columns) {\r\n result.columns = 0;\r\n }\r\n if (result.columnGap == null) {\r\n result.columnGap = 18;\r\n } // 1/4 inch\r\n\r\n return result;\r\n },\r\n\r\n _line(text, options = {}, wrapper) {\r\n this._fragment(text, this.x, this.y, options);\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n if (!wrapper) {\r\n return (this.x += this.widthOfString(text));\r\n } else {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n }\r\n },\r\n\r\n _fragment(text, x, y, options) {\r\n let dy, encoded, i, positions, textWidth, words;\r\n text = `${text}`.replace(/\\n/g, '');\r\n if (text.length === 0) {\r\n return;\r\n }\r\n\r\n // handle options\r\n const align = options.align || 'left';\r\n let wordSpacing = options.wordSpacing || 0;\r\n const characterSpacing = options.characterSpacing || 0;\r\n\r\n // text alignments\r\n if (options.width) {\r\n switch (align) {\r\n case 'right':\r\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n x += options.lineWidth - textWidth;\r\n break;\r\n\r\n case 'center':\r\n x += options.lineWidth / 2 - options.textWidth / 2;\r\n break;\r\n\r\n case 'justify':\r\n // calculate the word spacing value\r\n words = text.trim().split(/\\s+/);\r\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n wordSpacing = Math.max(\r\n 0,\r\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n spaceWidth\r\n );\r\n break;\r\n }\r\n }\r\n\r\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n if (typeof options.baseline === 'number') {\r\n dy = -options.baseline;\r\n } else {\r\n switch (options.baseline) {\r\n case 'svg-middle':\r\n dy = 0.5 * this._font.xHeight;\r\n break;\r\n case 'middle':\r\n case 'svg-central':\r\n dy = 0.5 * (this._font.descender + this._font.ascender);\r\n break;\r\n case 'bottom':\r\n case 'ideographic':\r\n dy = this._font.descender;\r\n break;\r\n case 'alphabetic':\r\n dy = 0;\r\n break;\r\n case 'mathematical':\r\n dy = 0.5 * this._font.ascender;\r\n break;\r\n case 'hanging':\r\n dy = 0.8 * this._font.ascender;\r\n break;\r\n case 'top':\r\n dy = this._font.ascender;\r\n break;\r\n default:\r\n dy = this._font.ascender;\r\n }\r\n dy = (dy / 1000) * this._fontSize;\r\n }\r\n\r\n // calculate the actual rendered width of the string after word and character spacing\r\n const renderedWidth =\r\n options.textWidth +\r\n wordSpacing * (options.wordCount - 1) +\r\n characterSpacing * (text.length - 1);\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // create underline\r\n if (options.underline) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = (y + this.currentLineHeight()) - lineWidth\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n \r\n // create strikethrough line\r\n if (options.strike) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = y + this.currentLineHeight() / 2;\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n\r\n this.save();\r\n\r\n // oblique (angle in degrees or boolean)\r\n if (options.oblique) {\r\n let skew;\r\n if (typeof options.oblique === 'number') {\r\n skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n } else {\r\n skew = -0.25;\r\n }\r\n this.transform(1, 0, 0, 1, x, y);\r\n this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n this.transform(1, 0, 0, 1, -x, -y);\r\n }\r\n\r\n // flip coordinate system\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n y = this.page.height - y - dy;\r\n\r\n // add current font to page if necessary\r\n if (this.page.fonts[this._font.id] == null) {\r\n this.page.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // begin the text object\r\n this.addContent('BT');\r\n\r\n // text position\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n // font and font size\r\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n // rendering mode\r\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n if (mode) {\r\n this.addContent(`${mode} Tr`);\r\n }\r\n\r\n // Character spacing\r\n if (characterSpacing) {\r\n this.addContent(`${number(characterSpacing)} Tc`);\r\n }\r\n\r\n // Add the actual text\r\n // If we have a word spacing value, we need to encode each word separately\r\n // since the normal Tw operator only works on character code 32, which isn't\r\n // used for embedded fonts.\r\n if (wordSpacing) {\r\n words = text.trim().split(/\\s+/);\r\n wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n wordSpacing *= 1000 / this._fontSize;\r\n\r\n encoded = [];\r\n positions = [];\r\n for (let word of words) {\r\n const [encodedWord, positionsWord] = this._font.encode(\r\n word,\r\n options.features\r\n );\r\n encoded = encoded.concat(encodedWord);\r\n positions = positions.concat(positionsWord);\r\n\r\n // add the word spacing to the end of the word\r\n // clone object because of cache\r\n const space = {};\r\n const object = positions[positions.length - 1];\r\n for (let key in object) {\r\n const val = object[key];\r\n space[key] = val;\r\n }\r\n space.xAdvance += wordSpacing;\r\n positions[positions.length - 1] = space;\r\n }\r\n } else {\r\n [encoded, positions] = this._font.encode(text, options.features);\r\n }\r\n\r\n const scale = this._fontSize / 1000;\r\n const commands = [];\r\n let last = 0;\r\n let hadOffset = false;\r\n\r\n // Adds a segment of text to the TJ command buffer\r\n const addSegment = cur => {\r\n if (last < cur) {\r\n const hex = encoded.slice(last, cur).join('');\r\n const advance =\r\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n commands.push(`<${hex}> ${number(-advance)}`);\r\n }\r\n\r\n return (last = cur);\r\n };\r\n\r\n // Flushes the current TJ commands to the output stream\r\n const flush = i => {\r\n addSegment(i);\r\n\r\n if (commands.length > 0) {\r\n this.addContent(`[${commands.join(' ')}] TJ`);\r\n return (commands.length = 0);\r\n }\r\n };\r\n\r\n for (i = 0; i < positions.length; i++) {\r\n // If we have an x or y offset, we have to break out of the current TJ command\r\n // so we can move the text position.\r\n const pos = positions[i];\r\n if (pos.xOffset || pos.yOffset) {\r\n // Flush the current buffer\r\n flush(i);\r\n\r\n // Move the text position and flush just the current character\r\n this.addContent(\r\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n y + pos.yOffset * scale\r\n )} Tm`\r\n );\r\n flush(i + 1);\r\n\r\n hadOffset = true;\r\n } else {\r\n // If the last character had an offset, reset the text position\r\n if (hadOffset) {\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n hadOffset = false;\r\n }\r\n\r\n // Group segments that don't have any advance adjustments\r\n if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n addSegment(i + 1);\r\n }\r\n }\r\n\r\n x += pos.xAdvance * scale;\r\n }\r\n\r\n // Flush any remaining commands\r\n flush(i);\r\n\r\n // end the text object\r\n this.addContent('ET');\r\n\r\n // restore flipped coordinate system\r\n return this.restore();\r\n }\r\n};\r\n","import exif from 'jpeg-exif';\r\n\r\nconst MARKERS = [\r\n 0xffc0,\r\n 0xffc1,\r\n 0xffc2,\r\n 0xffc3,\r\n 0xffc5,\r\n 0xffc6,\r\n 0xffc7,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffca,\r\n 0xffcb,\r\n 0xffcc,\r\n 0xffcd,\r\n 0xffce,\r\n 0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n 1: 'DeviceGray',\r\n 3: 'DeviceRGB',\r\n 4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n constructor(data, label) {\r\n let marker;\r\n this.data = data;\r\n this.label = label;\r\n if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n throw 'SOI not found in JPEG';\r\n }\r\n\r\n // Parse the EXIF orientation\r\n this.orientation = exif.fromBuffer(this.data).Orientation || 1;\r\n\r\n let pos = 2;\r\n while (pos < this.data.length) {\r\n marker = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n if (MARKERS.includes(marker)) {\r\n break;\r\n }\r\n pos += this.data.readUInt16BE(pos);\r\n }\r\n\r\n if (!MARKERS.includes(marker)) {\r\n throw 'Invalid JPEG.';\r\n }\r\n pos += 2;\r\n\r\n this.bits = this.data[pos++];\r\n this.height = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n this.width = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n const channels = this.data[pos++];\r\n this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n this.obj = document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: this.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n ColorSpace: this.colorSpace,\r\n Filter: 'DCTDecode'\r\n });\r\n\r\n // add extra decode params for CMYK images. By swapping the\r\n // min and max values from the default, we invert the colors. See\r\n // section 4.8.4 of the spec.\r\n if (this.colorSpace === 'DeviceCMYK') {\r\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n }\r\n\r\n this.obj.end(this.data);\r\n\r\n // free memory\r\n return (this.data = null);\r\n }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n constructor(data, label) {\r\n this.label = label;\r\n this.image = new PNG(data);\r\n this.width = this.image.width;\r\n this.height = this.image.height;\r\n this.imgData = this.image.imgData;\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n let dataDecoded = false;\r\n\r\n this.document = document;\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n const hasAlphaChannel = this.image.hasAlphaChannel;\r\n const isInterlaced = this.image.interlaceMethod === 1;\r\n\r\n this.obj = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n Filter: 'FlateDecode'\r\n });\r\n\r\n if (!hasAlphaChannel) {\r\n const params = this.document.ref({\r\n Predictor: isInterlaced ? 1 : 15,\r\n Colors: this.image.colors,\r\n BitsPerComponent: this.image.bits,\r\n Columns: this.width\r\n });\r\n\r\n this.obj.data['DecodeParms'] = params;\r\n params.end();\r\n }\r\n\r\n if (this.image.palette.length === 0) {\r\n this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n } else {\r\n // embed the color palette in the PDF as an object stream\r\n const palette = this.document.ref();\r\n palette.end(Buffer.from(this.image.palette));\r\n\r\n // build the color space array for the image\r\n this.obj.data['ColorSpace'] = [\r\n 'Indexed',\r\n 'DeviceRGB',\r\n this.image.palette.length / 3 - 1,\r\n palette\r\n ];\r\n }\r\n\r\n // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n // a dedicated PNG chunk.\r\n if (this.image.transparency.grayscale != null) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const val = this.image.transparency.grayscale;\r\n this.obj.data['Mask'] = [val, val];\r\n } else if (this.image.transparency.rgb) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const { rgb } = this.image.transparency;\r\n const mask = [];\r\n for (let x of rgb) {\r\n mask.push(x, x);\r\n }\r\n\r\n this.obj.data['Mask'] = mask;\r\n } else if (this.image.transparency.indexed) {\r\n // Create a transparency SMask for the image based on the data\r\n // in the PLTE and tRNS sections. See below for details on SMasks.\r\n dataDecoded = true;\r\n return this.loadIndexedAlphaChannel();\r\n } else if (hasAlphaChannel) {\r\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n // channel mixed in with the main image data. Separate this data out into an\r\n // SMask object and store it separately in the PDF.\r\n dataDecoded = true;\r\n return this.splitAlphaChannel();\r\n }\r\n\r\n if (isInterlaced && !dataDecoded) {\r\n return this.decodeData();\r\n }\r\n\r\n this.finalize();\r\n }\r\n\r\n finalize() {\r\n if (this.alphaChannel) {\r\n const sMask = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n Height: this.height,\r\n Width: this.width,\r\n BitsPerComponent: 8,\r\n Filter: 'FlateDecode',\r\n ColorSpace: 'DeviceGray',\r\n Decode: [0, 1]\r\n });\r\n\r\n sMask.end(this.alphaChannel);\r\n this.obj.data['SMask'] = sMask;\r\n }\r\n\r\n // add the actual image data\r\n this.obj.end(this.imgData);\r\n\r\n // free memory\r\n this.image = null;\r\n return (this.imgData = null);\r\n }\r\n\r\n splitAlphaChannel() {\r\n return this.image.decodePixels(pixels => {\r\n let a, p;\r\n const colorCount = this.image.colors;\r\n const pixelCount = this.width * this.height;\r\n const imgData = Buffer.alloc(pixelCount * colorCount);\r\n const alphaChannel = Buffer.alloc(pixelCount);\r\n\r\n let i = (p = a = 0);\r\n const len = pixels.length;\r\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n while (i < len) {\r\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n imgData[p++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n alphaChannel[a++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n\r\n this.imgData = zlib.deflateSync(imgData);\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n loadIndexedAlphaChannel() {\r\n const transparency = this.image.transparency.indexed;\r\n return this.image.decodePixels(pixels => {\r\n const alphaChannel = Buffer.alloc(this.width * this.height);\r\n\r\n let i = 0;\r\n for (let j = 0, end = pixels.length; j < end; j++) {\r\n alphaChannel[i++] = transparency[pixels[j]];\r\n }\r\n\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n decodeData() {\r\n this.image.decodePixels(pixels => {\r\n this.imgData = zlib.deflateSync(pixels);\r\n this.finalize();\r\n });\r\n }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:.+?;base64,(.*)$/.exec(src))) {\r\n data = Buffer.from(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n initImages() {\r\n this._imageRegistry = {};\r\n return (this._imageCount = 0);\r\n },\r\n\r\n image(src, x, y, options = {}) {\r\n let bh, bp, bw, image, ip, left, left1, rotateAngle, originX, originY;\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // Ignore orientation based on document options or image options\r\n const ignoreOrientation =\r\n options.ignoreOrientation ||\r\n (options.ignoreOrientation !== false && this.options.ignoreOrientation);\r\n\r\n x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n if (src.width && src.height) {\r\n image = src;\r\n } else {\r\n image = this.openImage(src);\r\n }\r\n }\r\n\r\n if (!image.obj) {\r\n image.embed(this);\r\n }\r\n\r\n if (this.page.xobjects[image.label] == null) {\r\n this.page.xobjects[image.label] = image.obj;\r\n }\r\n\r\n let { width, height } = image;\r\n\r\n // If EXIF orientation calls for it, swap width and height\r\n if (!ignoreOrientation && image.orientation > 4) {\r\n [width, height] = [height, width];\r\n }\r\n\r\n let w = options.width || width;\r\n let h = options.height || height;\r\n\r\n if (options.width && !options.height) {\r\n const wp = w / width;\r\n w = width * wp;\r\n h = height * wp;\r\n } else if (options.height && !options.width) {\r\n const hp = h / height;\r\n w = width * hp;\r\n h = height * hp;\r\n } else if (options.scale) {\r\n w = width * options.scale;\r\n h = height * options.scale;\r\n } else if (options.fit) {\r\n [bw, bh] = options.fit;\r\n bp = bw / bh;\r\n ip = width / height;\r\n if (ip > bp) {\r\n w = bw;\r\n h = bw / ip;\r\n } else {\r\n h = bh;\r\n w = bh * ip;\r\n }\r\n } else if (options.cover) {\r\n [bw, bh] = options.cover;\r\n bp = bw / bh;\r\n ip = width / height;\r\n if (ip > bp) {\r\n h = bh;\r\n w = bh * ip;\r\n } else {\r\n w = bw;\r\n h = bw / ip;\r\n }\r\n }\r\n\r\n if (options.fit || options.cover) {\r\n if (options.align === 'center') {\r\n x = x + bw / 2 - w / 2;\r\n } else if (options.align === 'right') {\r\n x = x + bw - w;\r\n }\r\n\r\n if (options.valign === 'center') {\r\n y = y + bh / 2 - h / 2;\r\n } else if (options.valign === 'bottom') {\r\n y = y + bh - h;\r\n }\r\n }\r\n\r\n if (!ignoreOrientation) {\r\n switch (image.orientation) {\r\n // No orientation (need to flip image, though, because of the default transform matrix on the document)\r\n default:\r\n case 1:\r\n h = -h;\r\n y -= h;\r\n\r\n rotateAngle = 0;\r\n break;\r\n // Flip Horizontal\r\n case 2:\r\n w = -w;\r\n h = -h;\r\n x -= w;\r\n y -= h;\r\n\r\n rotateAngle = 0;\r\n break;\r\n // Rotate 180 degrees\r\n case 3:\r\n originX = x;\r\n originY = y;\r\n\r\n h = -h;\r\n x -= w;\r\n\r\n rotateAngle = 180;\r\n break;\r\n // Flip vertical\r\n case 4:\r\n // Do nothing, image will be flipped\r\n\r\n break;\r\n // Flip horizontally and rotate 270 degrees CW\r\n case 5:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n y -= h;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Rotate 90 degrees CW\r\n case 6:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Flip horizontally and rotate 90 degrees CW\r\n case 7:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n w = -w;\r\n x -= w;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Rotate 270 degrees CW\r\n case 8:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n x -= w;\r\n y -= h;\r\n\r\n rotateAngle = -90;\r\n break;\r\n }\r\n } else {\r\n h = -h;\r\n y -= h;\r\n rotateAngle = 0;\r\n }\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, w, h, options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, w, h, options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // Set the current y position to below the image if it is in the document flow\r\n if (this.y === y) {\r\n this.y += h;\r\n }\r\n\r\n this.save();\r\n\r\n if (rotateAngle) {\r\n this.rotate(rotateAngle, {\r\n origin: [originX, originY]\r\n });\r\n }\r\n\r\n this.transform(w, 0, 0, h, x, y);\r\n this.addContent(`/${image.label} Do`);\r\n this.restore();\r\n\r\n return this;\r\n },\r\n\r\n openImage(src) {\r\n let image;\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n image = PDFImage.open(src, `I${++this._imageCount}`);\r\n if (typeof src === 'string') {\r\n this._imageRegistry[src] = image;\r\n }\r\n }\r\n\r\n return image;\r\n }\r\n};\r\n","export default {\r\n annotate(x, y, w, h, options) {\r\n options.Type = 'Annot';\r\n options.Rect = this._convertRect(x, y, w, h);\r\n options.Border = [0, 0, 0];\r\n\r\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\r\n options.F = 1 << 2; // Print Annotation Flag\r\n }\r\n\r\n if (options.Subtype !== 'Link') {\r\n if (options.C == null) {\r\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n }\r\n } // convert colors\r\n delete options.color;\r\n\r\n if (typeof options.Dest === 'string') {\r\n options.Dest = new String(options.Dest);\r\n }\r\n\r\n // Capitalize keys\r\n for (let key in options) {\r\n const val = options[key];\r\n options[key[0].toUpperCase() + key.slice(1)] = val;\r\n }\r\n\r\n const ref = this.ref(options);\r\n this.page.annotations.push(ref);\r\n ref.end();\r\n return this;\r\n },\r\n\r\n note(x, y, w, h, contents, options = {}) {\r\n options.Subtype = 'Text';\r\n options.Contents = new String(contents);\r\n options.Name = 'Comment';\r\n if (options.color == null) {\r\n options.color = [243, 223, 92];\r\n }\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n goTo(x, y, w, h, name, options = {}) {\r\n options.Subtype = 'Link';\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: new String(name)\r\n });\r\n options.A.end();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n link(x, y, w, h, url, options = {}) {\r\n options.Subtype = 'Link';\r\n\r\n if (typeof url === 'number') {\r\n // Link to a page in the document (the page must already exist)\r\n const pages = this._root.data.Pages.data;\r\n if (url >= 0 && url < pages.Kids.length) {\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: [pages.Kids[url], 'XYZ', null, null, null]\r\n });\r\n options.A.end();\r\n } else {\r\n throw new Error(`The document has no page ${url}`);\r\n }\r\n } else {\r\n // Link to an external url\r\n options.A = this.ref({\r\n S: 'URI',\r\n URI: new String(url)\r\n });\r\n options.A.end();\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _markup(x, y, w, h, options = {}) {\r\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n highlight(x, y, w, h, options = {}) {\r\n options.Subtype = 'Highlight';\r\n if (options.color == null) {\r\n options.color = [241, 238, 148];\r\n }\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n underline(x, y, w, h, options = {}) {\r\n options.Subtype = 'Underline';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n strike(x, y, w, h, options = {}) {\r\n options.Subtype = 'StrikeOut';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n lineAnnotation(x1, y1, x2, y2, options = {}) {\r\n options.Subtype = 'Line';\r\n options.Contents = new String();\r\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n return this.annotate(x1, y1, x2, y2, options);\r\n },\r\n\r\n rectAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Square';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n ellipseAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Circle';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n textAnnotation(x, y, w, h, text, options = {}) {\r\n options.Subtype = 'FreeText';\r\n options.Contents = new String(text);\r\n options.DA = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n fileAnnotation(x, y, w, h, file = {}, options = {}) {\r\n // create hidden file\r\n const filespec = this.file(\r\n file.src,\r\n Object.assign({ hidden: true }, file)\r\n );\r\n\r\n options.Subtype = 'FileAttachment';\r\n options.FS = filespec;\r\n\r\n // add description from filespec unless description (Contents) has already been set\r\n if (options.Contents) {\r\n options.Contents = new String(options.Contents);\r\n } else if (filespec.data.Desc) {\r\n options.Contents = filespec.data.Desc;\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _convertRect(x1, y1, w, h) {\r\n // flip y1 and y2\r\n let y2 = y1;\r\n y1 += h;\r\n\r\n // make x2\r\n let x2 = x1 + w;\r\n\r\n // apply current transformation matrix to points\r\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n x1 = m0 * x1 + m2 * y1 + m4;\r\n y1 = m1 * x1 + m3 * y1 + m5;\r\n x2 = m0 * x2 + m2 * y2 + m4;\r\n y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n return [x1, y1, x2, y2];\r\n }\r\n};\r\n","class PDFOutline {\r\n constructor(document, parent, title, dest, options = { expanded: false }) {\r\n this.document = document;\r\n this.options = options;\r\n this.outlineData = {};\r\n\r\n if (dest !== null) {\r\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n }\r\n\r\n if (parent !== null) {\r\n this.outlineData['Parent'] = parent;\r\n }\r\n\r\n if (title !== null) {\r\n this.outlineData['Title'] = new String(title);\r\n }\r\n\r\n this.dictionary = this.document.ref(this.outlineData);\r\n this.children = [];\r\n }\r\n\r\n addItem(title, options = { expanded: false }) {\r\n const result = new PDFOutline(\r\n this.document,\r\n this.dictionary,\r\n title,\r\n this.document.page,\r\n options\r\n );\r\n this.children.push(result);\r\n\r\n return result;\r\n }\r\n\r\n endOutline() {\r\n if (this.children.length > 0) {\r\n if (this.options.expanded) {\r\n this.outlineData.Count = this.children.length;\r\n }\r\n\r\n const first = this.children[0],\r\n last = this.children[this.children.length - 1];\r\n this.outlineData.First = first.dictionary;\r\n this.outlineData.Last = last.dictionary;\r\n\r\n for (let i = 0, len = this.children.length; i < len; i++) {\r\n const child = this.children[i];\r\n if (i > 0) {\r\n child.outlineData.Prev = this.children[i - 1].dictionary;\r\n }\r\n if (i < this.children.length - 1) {\r\n child.outlineData.Next = this.children[i + 1].dictionary;\r\n }\r\n child.endOutline();\r\n }\r\n }\r\n\r\n return this.dictionary.end();\r\n }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n initOutline() {\r\n return (this.outline = new PDFOutline(this, null, null, null));\r\n },\r\n\r\n endOutline() {\r\n this.outline.endOutline();\r\n if (this.outline.children.length > 0) {\r\n this._root.data.Outlines = this.outline.dictionary;\r\n return (this._root.data.PageMode = 'UseOutlines');\r\n }\r\n }\r\n};\r\n","/*\r\nPDFStructureContent - a reference to a marked structure content\r\nBy Ben Schmidt\r\n*/\r\n\r\nclass PDFStructureContent {\r\n constructor(pageRef, mcid) {\r\n this.refs = [{ pageRef, mcid }];\r\n }\r\n\r\n push(structContent) {\r\n structContent.refs.forEach((ref) => this.refs.push(ref));\r\n }\r\n}\r\n\r\nexport default PDFStructureContent;\r\n","/*\r\nPDFStructureElement - represents an element in the PDF logical structure tree\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureContent from \"./structure_content\";\r\n\r\nclass PDFStructureElement {\r\n constructor(document, type, options = {}, children = null) {\r\n this.document = document;\r\n\r\n this._attached = false;\r\n this._ended = false;\r\n this._flushed = false;\r\n this.dictionary = document.ref({\r\n // Type: \"StructElem\",\r\n S: type\r\n });\r\n\r\n const data = this.dictionary.data;\r\n\r\n if (Array.isArray(options) || this._isValidChild(options)) {\r\n children = options;\r\n options = {};\r\n }\r\n\r\n if (typeof options.title !== 'undefined') {\r\n data.T = new String(options.title);\r\n }\r\n if (typeof options.lang !== 'undefined') {\r\n data.Lang = new String(options.lang);\r\n }\r\n if (typeof options.alt !== 'undefined') {\r\n data.Alt = new String(options.alt);\r\n }\r\n if (typeof options.expanded !== 'undefined') {\r\n data.E = new String(options.expanded);\r\n }\r\n if (typeof options.actual !== 'undefined') {\r\n data.ActualText = new String(options.actual);\r\n }\r\n\r\n this._children = [];\r\n\r\n if (children) {\r\n if (!Array.isArray(children)) {\r\n children = [children];\r\n }\r\n children.forEach((child) => this.add(child));\r\n this.end();\r\n }\r\n }\r\n\r\n add(child) {\r\n if (this._ended) {\r\n throw new Error(`Cannot add child to already-ended structure element`);\r\n }\r\n\r\n if (!this._isValidChild(child)) {\r\n throw new Error(`Invalid structure element child`);\r\n }\r\n\r\n if (child instanceof PDFStructureElement) {\r\n child.setParent(this.dictionary);\r\n if (this._attached) {\r\n child.setAttached();\r\n }\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n this._addContentToParentTree(child);\r\n }\r\n\r\n if (typeof child === 'function' && this._attached) {\r\n // _contentForClosure() adds the content to the parent tree\r\n child = this._contentForClosure(child);\r\n }\r\n\r\n this._children.push(child);\r\n\r\n return this;\r\n }\r\n\r\n _addContentToParentTree(content) {\r\n content.refs.forEach(({ pageRef, mcid }) => {\r\n const pageStructParents = this.document.getStructParentTree()\r\n .get(pageRef.data.StructParents);\r\n pageStructParents[mcid] = this.dictionary;\r\n });\r\n }\r\n\r\n setParent(parentRef) {\r\n if (this.dictionary.data.P) {\r\n throw new Error(`Structure element added to more than one parent`);\r\n }\r\n\r\n this.dictionary.data.P = parentRef;\r\n\r\n this._flush();\r\n }\r\n\r\n setAttached() {\r\n if (this._attached) {\r\n return;\r\n }\r\n\r\n this._children.forEach((child, index) => {\r\n if (child instanceof PDFStructureElement) {\r\n child.setAttached();\r\n }\r\n if (typeof child === 'function') {\r\n this._children[index] = this._contentForClosure(child);\r\n }\r\n });\r\n\r\n this._attached = true;\r\n\r\n this._flush();\r\n }\r\n\r\n end() {\r\n if (this._ended) {\r\n return;\r\n }\r\n\r\n this._children\r\n .filter((child) => child instanceof PDFStructureElement)\r\n .forEach((child) => child.end());\r\n\r\n this._ended = true;\r\n\r\n this._flush();\r\n }\r\n\r\n _isValidChild(child) {\r\n return child instanceof PDFStructureElement ||\r\n child instanceof PDFStructureContent ||\r\n typeof child === 'function';\r\n }\r\n\r\n _contentForClosure(closure) {\r\n const content = this.document.markStructureContent(this.dictionary.data.S);\r\n closure();\r\n this.document.endMarkedContent();\r\n\r\n this._addContentToParentTree(content);\r\n\r\n return content;\r\n }\r\n\r\n _isFlushable() {\r\n if (!this.dictionary.data.P || !this._ended) {\r\n return false;\r\n }\r\n\r\n return this._children.every((child) => {\r\n if (typeof child === 'function') {\r\n return false;\r\n }\r\n if (child instanceof PDFStructureElement) {\r\n return child._isFlushable();\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n _flush() {\r\n if (this._flushed || !this._isFlushable()) {\r\n return;\r\n }\r\n\r\n this.dictionary.data.K = [];\r\n\r\n this._children.forEach((child) => this._flushChild(child));\r\n\r\n this.dictionary.end();\r\n\r\n // free memory used by children; the dictionary itself may still be\r\n // referenced by a parent structure element or root, but we can\r\n // at least trim the tree here\r\n this._children = [];\r\n this.dictionary.data.K = null;\r\n\r\n this._flushed = true;\r\n }\r\n\r\n _flushChild(child) {\r\n if (child instanceof PDFStructureElement) {\r\n this.dictionary.data.K.push(child.dictionary);\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n child.refs.forEach(({ pageRef, mcid }) => {\r\n if (!this.dictionary.data.Pg) {\r\n this.dictionary.data.Pg = pageRef;\r\n }\r\n\r\n if (this.dictionary.data.Pg === pageRef) {\r\n this.dictionary.data.K.push(mcid);\r\n } else {\r\n this.dictionary.data.K.push({\r\n Type: \"MCR\",\r\n Pg: pageRef,\r\n MCID: mcid\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default PDFStructureElement;\r\n","/*\r\nPDFNumberTree - represents a number tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNumberTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return parseInt(a) - parseInt(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Nums\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return parseInt(k);\r\n }\r\n}\r\n\r\nexport default PDFNumberTree;\r\n","/*\r\nMarkings mixin - support marked content sequences in content streams\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureElement from \"../structure_element\";\r\nimport PDFStructureContent from \"../structure_content\";\r\nimport PDFNumberTree from \"../number_tree\";\r\nimport PDFObject from \"../object\";\r\n\r\nexport default {\r\n\r\n initMarkings(options) {\r\n this.structChildren = [];\r\n\r\n if (options.tagged) {\r\n this.getMarkInfoDictionary().data.Marked = true;\r\n this.getStructTreeRoot();\r\n }\r\n },\r\n\r\n markContent(tag, options = null) {\r\n if (tag === 'Artifact' || (options && options.mcid)) {\r\n let toClose = 0;\r\n this.page.markings.forEach((marking) => {\r\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\r\n toClose++;\r\n }\r\n });\r\n while (toClose--) {\r\n this.endMarkedContent();\r\n }\r\n }\r\n\r\n if (!options) {\r\n this.page.markings.push({ tag });\r\n this.addContent(`/${tag} BMC`);\r\n return this;\r\n }\r\n\r\n this.page.markings.push({ tag, options });\r\n\r\n const dictionary = {};\r\n\r\n if (typeof options.mcid !== 'undefined') {\r\n dictionary.MCID = options.mcid;\r\n }\r\n if (tag === 'Artifact') {\r\n if (typeof options.type === 'string') {\r\n dictionary.Type = options.type;\r\n }\r\n if (Array.isArray(options.bbox)) {\r\n dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3],\r\n options.bbox[2], this.page.height - options.bbox[1]];\r\n }\r\n if (Array.isArray(options.attached) &&\r\n options.attached.every(val => typeof val === 'string')) {\r\n dictionary.Attached = options.attached;\r\n }\r\n }\r\n if (tag === 'Span') {\r\n if (options.lang) {\r\n dictionary.Lang = new String(options.lang);\r\n }\r\n if (options.alt) {\r\n dictionary.Alt = new String(options.alt);\r\n }\r\n if (options.expanded) {\r\n dictionary.E = new String(options.expanded);\r\n }\r\n if (options.actual) {\r\n dictionary.ActualText = new String(options.actual);\r\n }\r\n }\r\n\r\n this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\r\n return this;\r\n },\r\n\r\n markStructureContent(tag, options = {}) {\r\n const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\r\n const mcid = pageStructParents.length;\r\n pageStructParents.push(null);\r\n\r\n this.markContent(tag, { ...options, mcid });\r\n\r\n const structContent = new PDFStructureContent(this.page.dictionary, mcid);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n return structContent;\r\n },\r\n\r\n endMarkedContent() {\r\n this.page.markings.pop();\r\n this.addContent('EMC');\r\n return this;\r\n },\r\n\r\n struct(type, options = {}, children = null) {\r\n return new PDFStructureElement(this, type, options, children);\r\n },\r\n\r\n addStructure(structElem) {\r\n const structTreeRoot = this.getStructTreeRoot();\r\n structElem.setParent(structTreeRoot);\r\n structElem.setAttached();\r\n this.structChildren.push(structElem);\r\n if (!structTreeRoot.data.K) {\r\n structTreeRoot.data.K = [];\r\n }\r\n structTreeRoot.data.K.push(structElem.dictionary);\r\n return this;\r\n },\r\n\r\n initPageMarkings(pageMarkings) {\r\n pageMarkings.forEach((marking) => {\r\n if (marking.structContent) {\r\n const structContent = marking.structContent;\r\n const newStructContent = this.markStructureContent(marking.tag, marking.options);\r\n structContent.push(newStructContent);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n } else {\r\n this.markContent(marking.tag, marking.options);\r\n }\r\n });\r\n },\r\n\r\n endPageMarkings(page) {\r\n const pageMarkings = page.markings;\r\n pageMarkings.forEach(() => page.write('EMC'));\r\n page.markings = [];\r\n return pageMarkings;\r\n },\r\n\r\n getMarkInfoDictionary() {\r\n if (!this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo = this.ref({});\r\n }\r\n return this._root.data.MarkInfo;\r\n },\r\n\r\n getStructTreeRoot() {\r\n if (!this._root.data.StructTreeRoot) {\r\n this._root.data.StructTreeRoot = this.ref({\r\n Type: 'StructTreeRoot',\r\n ParentTree: new PDFNumberTree(),\r\n ParentTreeNextKey: 0\r\n });\r\n }\r\n return this._root.data.StructTreeRoot;\r\n },\r\n\r\n getStructParentTree() {\r\n return this.getStructTreeRoot().data.ParentTree;\r\n },\r\n\r\n createStructParentTreeNextKey() {\r\n // initialise the MarkInfo dictionary\r\n this.getMarkInfoDictionary();\r\n\r\n const structTreeRoot = this.getStructTreeRoot();\r\n const key = structTreeRoot.data.ParentTreeNextKey++;\r\n structTreeRoot.data.ParentTree.add(key, []);\r\n return key;\r\n },\r\n\r\n endMarkings() {\r\n const structTreeRoot = this._root.data.StructTreeRoot;\r\n if (structTreeRoot) {\r\n structTreeRoot.end();\r\n this.structChildren.forEach((structElem) => structElem.end());\r\n }\r\n if (this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo.end();\r\n }\r\n }\r\n\r\n};\r\n","const FIELD_FLAGS = {\r\n readOnly: 1,\r\n required: 2,\r\n noExport: 4,\r\n multiline: 0x1000,\r\n password: 0x2000,\r\n toggleToOffButton: 0x4000,\r\n radioButton: 0x8000,\r\n pushButton: 0x10000,\r\n combo: 0x20000,\r\n edit: 0x40000,\r\n sort: 0x80000,\r\n multiSelect: 0x200000,\r\n noSpell: 0x400000\r\n};\r\nconst FIELD_JUSTIFY = {\r\n left: 0,\r\n center: 1,\r\n right: 2\r\n};\r\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\r\nconst FORMAT_SPECIAL = {\r\n zip: '0',\r\n zipPlus4: '1',\r\n zip4: '1',\r\n phone: '2',\r\n ssn: '3'\r\n};\r\nconst FORMAT_DEFAULT = {\r\n number: {\r\n nDec: 0,\r\n sepComma: false,\r\n negStyle: 'MinusBlack',\r\n currency: '',\r\n currencyPrepend: true\r\n },\r\n percent: {\r\n nDec: 0,\r\n sepComma: false\r\n }\r\n};\r\n\r\nexport default {\r\n /**\r\n * Must call if adding AcroForms to a document. Must also call font() before\r\n * this method to set the default font.\r\n */\r\n initForm() {\r\n if (!this._font) {\r\n throw new Error('Must set a font before calling initForm method');\r\n }\r\n this._acroform = {\r\n fonts: {},\r\n defaultFont: this._font.name\r\n };\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n\r\n let data = {\r\n Fields: [],\r\n NeedAppearances: true,\r\n DA: new String(`/${this._font.id} 0 Tf 0 g`),\r\n DR: {\r\n Font: {}\r\n }\r\n };\r\n data.DR.Font[this._font.id] = this._font.ref();\r\n const AcroForm = this.ref(data);\r\n this._root.data.AcroForm = AcroForm;\r\n return this;\r\n },\r\n\r\n /**\r\n * Called automatically by document.js\r\n */\r\n endAcroForm() {\r\n if (this._root.data.AcroForm) {\r\n if (\r\n !Object.keys(this._acroform.fonts).length &&\r\n !this._acroform.defaultFont\r\n ) {\r\n throw new Error('No fonts specified for PDF form');\r\n }\r\n let fontDict = this._root.data.AcroForm.data.DR.Font;\r\n Object.keys(this._acroform.fonts).forEach(name => {\r\n fontDict[name] = this._acroform.fonts[name];\r\n });\r\n this._root.data.AcroForm.data.Fields.forEach(fieldRef => {\r\n this._endChild(fieldRef);\r\n });\r\n this._root.data.AcroForm.end();\r\n }\r\n return this;\r\n },\r\n\r\n _endChild(ref) {\r\n if (Array.isArray(ref.data.Kids)) {\r\n ref.data.Kids.forEach(childRef => {\r\n this._endChild(childRef);\r\n });\r\n ref.end();\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates and adds a form field to the document. Form fields are intermediate\r\n * nodes in a PDF form that are used to specify form name heirarchy and form\r\n * value defaults.\r\n * @param {string} name - field name (T attribute in field dictionary)\r\n * @param {object} options - other attributes to include in field dictionary\r\n */\r\n formField(name, options = {}) {\r\n let fieldDict = this._fieldDict(name, null, options);\r\n let fieldRef = this.ref(fieldDict);\r\n this._addToParent(fieldRef);\r\n return fieldRef;\r\n },\r\n\r\n /**\r\n * Creates and adds a Form Annotation to the document. Form annotations are\r\n * called Widget annotations internally within a PDF file.\r\n * @param {string} name - form field name (T attribute of widget annotation\r\n * dictionary)\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} w\r\n * @param {number} h\r\n * @param {object} options\r\n */\r\n formAnnotation(name, type, x, y, w, h, options = {}) {\r\n let fieldDict = this._fieldDict(name, type, options);\r\n fieldDict.Subtype = 'Widget';\r\n if (fieldDict.F === undefined) {\r\n fieldDict.F = 4; // print the annotation\r\n }\r\n\r\n // Add Field annot to page, and get it's ref\r\n this.annotate(x, y, w, h, fieldDict);\r\n let annotRef = this.page.annotations[this.page.annotations.length - 1];\r\n\r\n return this._addToParent(annotRef);\r\n },\r\n\r\n formText(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'text', x, y, w, h, options);\r\n },\r\n\r\n formPushButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\r\n },\r\n\r\n formCombo(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\r\n },\r\n\r\n formList(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'list', x, y, w, h, options);\r\n },\r\n\r\n formRadioButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\r\n },\r\n\r\n formCheckbox(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\r\n },\r\n\r\n _addToParent(fieldRef) {\r\n let parent = fieldRef.data.Parent;\r\n if (parent) {\r\n if (!parent.data.Kids) {\r\n parent.data.Kids = [];\r\n }\r\n parent.data.Kids.push(fieldRef);\r\n } else {\r\n this._root.data.AcroForm.data.Fields.push(fieldRef);\r\n }\r\n return this;\r\n },\r\n\r\n _fieldDict(name, type, options = {}) {\r\n if (!this._acroform) {\r\n throw new Error(\r\n 'Call document.initForms() method before adding form elements to document'\r\n );\r\n }\r\n let opts = Object.assign({}, options);\r\n if (type !== null) {\r\n opts = this._resolveType(type, options);\r\n }\r\n opts = this._resolveFlags(opts);\r\n opts = this._resolveJustify(opts);\r\n opts = this._resolveFont(opts);\r\n opts = this._resolveStrings(opts);\r\n opts = this._resolveColors(opts);\r\n opts = this._resolveFormat(opts);\r\n opts.T = new String(name);\r\n if (opts.parent) {\r\n opts.Parent = opts.parent;\r\n delete opts.parent;\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveType(type, opts) {\r\n if (type === 'text') {\r\n opts.FT = 'Tx';\r\n } else if (type === 'pushButton') {\r\n opts.FT = 'Btn';\r\n opts.pushButton = true;\r\n } else if (type === 'radioButton') {\r\n opts.FT = 'Btn';\r\n opts.radioButton = true;\r\n } else if (type === 'checkbox') {\r\n opts.FT = 'Btn';\r\n } else if (type === 'combo') {\r\n opts.FT = 'Ch';\r\n opts.combo = true;\r\n } else if (type === 'list') {\r\n opts.FT = 'Ch';\r\n } else {\r\n throw new Error(`Invalid form annotation type '${type}'`);\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveFormat(opts) {\r\n const f = opts.format;\r\n if (f && f.type) {\r\n let fnKeystroke;\r\n let fnFormat;\r\n let params = '';\r\n if (FORMAT_SPECIAL[f.type] !== undefined) {\r\n fnKeystroke = `AFSpecial_Keystroke`;\r\n fnFormat = `AFSpecial_Format`;\r\n params = FORMAT_SPECIAL[f.type];\r\n } else {\r\n let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\r\n fnKeystroke = `AF${format}_Keystroke`;\r\n fnFormat = `AF${format}_Format`;\r\n\r\n if (f.type === 'date') {\r\n fnKeystroke += 'Ex';\r\n params = String(f.param);\r\n } else if (f.type === 'time') {\r\n params = String(f.param);\r\n } else if (f.type === 'number') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.number, f);\r\n params = String(\r\n [\r\n String(p.nDec),\r\n p.sepComma ? '0' : '1',\r\n '\"' + p.negStyle + '\"',\r\n 'null',\r\n '\"' + p.currency + '\"',\r\n String(p.currencyPrepend)\r\n ].join(',')\r\n );\r\n } else if (f.type === 'percent') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\r\n params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\r\n }\r\n }\r\n opts.AA = opts.AA ? opts.AA : {};\r\n opts.AA.K = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnKeystroke}(${params});`)\r\n };\r\n opts.AA.F = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnFormat}(${params});`)\r\n };\r\n }\r\n delete opts.format;\r\n return opts;\r\n },\r\n\r\n _resolveColors(opts) {\r\n let color = this._normalizeColor(opts.backgroundColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BG = color;\r\n }\r\n color = this._normalizeColor(opts.borderColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BC = color;\r\n }\r\n delete opts.backgroundColor;\r\n delete opts.borderColor;\r\n return opts;\r\n },\r\n\r\n _resolveFlags(options) {\r\n let result = 0;\r\n Object.keys(options).forEach(key => {\r\n if (FIELD_FLAGS[key]) {\r\n if (options[key]) {\r\n result |= FIELD_FLAGS[key];\r\n }\r\n delete options[key];\r\n }\r\n });\r\n if (result !== 0) {\r\n options.Ff = options.Ff ? options.Ff : 0;\r\n options.Ff |= result;\r\n }\r\n return options;\r\n },\r\n\r\n _resolveJustify(options) {\r\n let result = 0;\r\n if (options.align !== undefined) {\r\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\r\n result = FIELD_JUSTIFY[options.align];\r\n }\r\n delete options.align;\r\n }\r\n if (result !== 0) {\r\n options.Q = result; // default\r\n }\r\n return options;\r\n },\r\n\r\n _resolveFont(options) {\r\n // add current font to document-level AcroForm dict if necessary\r\n if (this._acroform.fonts[this._font.id] === null) {\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // add current font to field's resource dict (RD) if not the default acroform font\r\n if (this._acroform.defaultFont !== this._font.name) {\r\n options.DR = { Font: {} };\r\n\r\n // Get the fontSize option. If not set use auto sizing\r\n const fontSize = options.fontSize || 0;\r\n\r\n options.DR.Font[this._font.id] = this._font.ref();\r\n options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\r\n }\r\n return options;\r\n },\r\n\r\n _resolveStrings(options) {\r\n let select = [];\r\n function appendChoices(a) {\r\n if (Array.isArray(a)) {\r\n for (let idx = 0; idx < a.length; idx++) {\r\n if (typeof a[idx] === 'string') {\r\n select.push(new String(a[idx]));\r\n } else {\r\n select.push(a[idx]);\r\n }\r\n }\r\n }\r\n }\r\n appendChoices(options.Opt);\r\n if (options.select) {\r\n appendChoices(options.select);\r\n delete options.select;\r\n }\r\n if (select.length) {\r\n options.Opt = select;\r\n }\r\n\r\n Object.keys(VALUE_MAP).forEach(key => {\r\n if (options[key] !== undefined) {\r\n options[VALUE_MAP[key]] = options[key];\r\n delete options[key];\r\n }\r\n });\r\n ['V', 'DV'].forEach(key => {\r\n if (typeof options[key] === 'string') {\r\n options[key] = new String(options[key]);\r\n }\r\n });\r\n\r\n if (options.MK && options.MK.CA) {\r\n options.MK.CA = new String(options.MK.CA);\r\n }\r\n if (options.label) {\r\n options.MK = options.MK ? options.MK : {};\r\n options.MK.CA = new String(options.label);\r\n delete options.label;\r\n }\r\n return options;\r\n }\r\n};\r\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * @returns filespec reference\r\n */\r\n file(src, options = {}) {\r\n options.name = options.name || src;\r\n\r\n const refBody = {\r\n Type: 'EmbeddedFile',\r\n Params: {}\r\n };\r\n let data;\r\n\r\n if (!src) {\r\n throw new Error('No src specified');\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:(.*?);base64,(.*)$/.exec(src))) {\r\n if (match[1]) {\r\n refBody.Subtype = match[1].replace('/', '#2F');\r\n }\r\n data = Buffer.from(match[2], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n throw new Error(`Could not read contents of file at filepath ${src}`);\r\n }\r\n\r\n // update CreationDate and ModDate\r\n const { birthtime, ctime } = fs.statSync(src);\r\n refBody.Params.CreationDate = birthtime;\r\n refBody.Params.ModDate = ctime;\r\n }\r\n }\r\n\r\n // override creation date and modified date\r\n if (options.creationDate instanceof Date) {\r\n refBody.Params.CreationDate = options.creationDate;\r\n }\r\n if (options.modifiedDate instanceof Date) {\r\n refBody.Params.ModDate = options.modifiedDate;\r\n }\r\n // add optional subtype\r\n if (options.type) {\r\n refBody.Subtype = options.type.replace('/', '#2F');\r\n }\r\n\r\n // add checksum and size information\r\n const checksum = CryptoJS.MD5(\r\n CryptoJS.lib.WordArray.create(new Uint8Array(data))\r\n );\r\n refBody.Params.CheckSum = new String(checksum);\r\n refBody.Params.Size = data.byteLength;\r\n\r\n // save some space when embedding the same file again\r\n // if a file with the same name and metadata exists, reuse its reference\r\n let ref;\r\n if (!this._fileRegistry) this._fileRegistry = {};\r\n let file = this._fileRegistry[options.name];\r\n if (file && isEqual(refBody, file)) {\r\n ref = file.ref;\r\n } else {\r\n ref = this.ref(refBody);\r\n ref.end(data);\r\n\r\n this._fileRegistry[options.name] = { ...refBody, ref };\r\n }\r\n // add filespec for embedded file\r\n const fileSpecBody = {\r\n Type: 'Filespec',\r\n F: new String(options.name),\r\n EF: { F: ref },\r\n UF: new String(options.name)\r\n };\r\n if (options.description) {\r\n fileSpecBody.Desc = new String(options.description);\r\n }\r\n const filespec = this.ref(fileSpecBody);\r\n filespec.end();\r\n\r\n if (!options.hidden) {\r\n this.addNamedEmbeddedFile(options.name, filespec);\r\n }\r\n\r\n return filespec;\r\n }\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n return (\r\n a.Subtype === b.Subtype &&\r\n a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n a.Params.Size === b.Params.Size &&\r\n a.Params.CreationDate === b.Params.CreationDate &&\r\n a.Params.ModDate === b.Params.ModDate\r\n );\r\n}\r\n","import fs from 'fs';\r\n\r\nexport default {\r\n\r\n initPDFA(pSubset) {\r\n if (pSubset.charAt(pSubset.length - 3) === '-') {\r\n this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase();\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\r\n } else {\r\n // Default to Basic conformance when user doesn't specify\r\n this.subset_conformance = 'B';\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\r\n }\r\n },\r\n\r\n endSubset() {\r\n this._addPdfaMetadata();\r\n const jsPath = `${__dirname}/data/sRGB_IEC61966_2_1.icc`\r\n const jestPath = `${__dirname}/../color_profiles/sRGB_IEC61966_2_1.icc`\r\n this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath);\r\n },\r\n\r\n _addColorOutputIntent(pICCPath) {\r\n const iccProfile = fs.readFileSync(pICCPath);\r\n\r\n const colorProfileRef = this.ref({\r\n Length: iccProfile.length,\r\n N: 3\r\n });\r\n colorProfileRef.write(iccProfile);\r\n colorProfileRef.end();\r\n\r\n const intentRef = this.ref({\r\n Type: 'OutputIntent',\r\n S: 'GTS_PDFA1',\r\n Info: new String('sRGB IEC61966-2.1'),\r\n OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\r\n DestOutputProfile: colorProfileRef,\r\n });\r\n intentRef.end();\r\n\r\n this._root.data.OutputIntents = [intentRef];\r\n },\r\n\r\n _getPdfaid() {\r\n return `\r\n \r\n ${this.subset}\r\n ${this.subset_conformance}\r\n \r\n `;\r\n },\r\n\r\n _addPdfaMetadata() {\r\n this.appendXML(this._getPdfaid());\r\n },\r\n\r\n}","\r\nexport default {\r\n\r\n initPDFUA() {\r\n this.subset = 1;\r\n },\r\n\r\n endSubset() {\r\n this._addPdfuaMetadata();\r\n },\r\n\r\n _addPdfuaMetadata() {\r\n this.appendXML(this._getPdfuaid());\r\n },\r\n\r\n _getPdfuaid() {\r\n return `\r\n \r\n ${this.subset}\r\n \r\n `;\r\n },\r\n\r\n}","import PDFA from './pdfa';\r\nimport PDFUA from './pdfua';\r\n\r\nexport default {\r\n _importSubset(subset) {\r\n Object.assign(this, subset)\r\n },\r\n\r\n initSubset(options) {\r\n\r\n switch (options.subset) {\r\n case 'PDF/A-1':\r\n case 'PDF/A-1a':\r\n case 'PDF/A-1b':\r\n case 'PDF/A-2':\r\n case 'PDF/A-2a':\r\n case 'PDF/A-2b':\r\n case 'PDF/A-3':\r\n case 'PDF/A-3a':\r\n case 'PDF/A-3b':\r\n this._importSubset(PDFA);\r\n this.initPDFA(options.subset);\r\n break;\r\n case 'PDF/UA':\r\n this._importSubset(PDFUA);\r\n this.initPDFUA();\r\n break;\r\n }\r\n }\r\n}","\r\nclass PDFMetadata {\r\n constructor() {\r\n this._metadata = `\r\n \r\n \r\n \r\n `;\r\n }\r\n \r\n _closeTags() {\r\n this._metadata = this._metadata.concat(`\r\n \r\n \r\n \r\n `);\r\n }\r\n\r\n append(xml, newline=true) {\r\n this._metadata = this._metadata.concat(xml); \r\n if (newline)\r\n this._metadata = this._metadata.concat('\\n'); \r\n }\r\n\r\n getXML() { return this._metadata; }\r\n\r\n getLength() { return this._metadata.length; }\r\n\r\n end() {\r\n this._closeTags();\r\n this._metadata = this._metadata.trim();\r\n }\r\n}\r\n\r\nexport default PDFMetadata;","import PDFMetadata from \"../metadata\"\r\n\r\nexport default {\r\n initMetadata() {\r\n this.metadata = new PDFMetadata();\r\n },\r\n\r\n appendXML(xml, newline=true) { this.metadata.append(xml,newline); },\r\n\r\n _addInfo() {\r\n this.appendXML(`\r\n \r\n ${this.info.CreationDate.toISOString().split('.')[0]+\"Z\"}\r\n ${this.info.Creator}\r\n \r\n `\r\n );\r\n\r\n if (this.info.Title || this.info.Author || this.info.Subject) {\r\n this.appendXML(`\r\n \r\n `);\r\n \r\n if (this.info.Title) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Title}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Author) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Author}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Subject) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Subject}\r\n \r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n ${this.info.Creator}`, false);\r\n\r\n if (this.info.Keywords) {\r\n this.appendXML(`\r\n ${this.info.Keywords}`, false);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n },\r\n\r\n endMetadata() {\r\n this._addInfo();\r\n \r\n this.metadata.end();\r\n\r\n /*\r\n Metadata was introduced in PDF 1.4, so adding it to 1.3 \r\n will likely only take up more space.\r\n */\r\n if (this.version != 1.3) {\r\n this.metadataRef = this.ref({\r\n length: this.metadata.getLength(),\r\n Type: 'Metadata',\r\n Subtype: 'XML'\r\n });\r\n this.metadataRef.compress = false;\r\n this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\r\n this.metadataRef.end();\r\n this._root.data.Metadata = this.metadataRef;\r\n }\r\n }\r\n}","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFNameTree from './name_tree';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\nimport MarkingsMixin from './mixins/markings';\r\nimport AcroFormMixin from './mixins/acroform';\r\nimport AttachmentsMixin from './mixins/attachments';\r\nimport LineWrapper from './line_wrapper';\r\nimport SubsetMixin from './mixins/subsets';\r\nimport MetadataMixin from './mixins/metadata';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = options;\r\n\r\n // PDF version\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n this.version = 1.4;\r\n break;\r\n case '1.5':\r\n this.version = 1.5;\r\n break;\r\n case '1.6':\r\n this.version = 1.6;\r\n break;\r\n case '1.7':\r\n case '1.7ext3':\r\n this.version = 1.7;\r\n break;\r\n default:\r\n this.version = 1.3;\r\n break;\r\n }\r\n\r\n // Whether streams should be compressed\r\n this.compress =\r\n this.options.compress != null ? this.options.compress : true;\r\n\r\n this._pageBuffer = [];\r\n this._pageBufferStart = 0;\r\n\r\n // The PDF object store\r\n this._offsets = [];\r\n this._waiting = 0;\r\n this._ended = false;\r\n this._offset = 0;\r\n const Pages = this.ref({\r\n Type: 'Pages',\r\n Count: 0,\r\n Kids: []\r\n });\r\n\r\n const Names = this.ref({\r\n Dests: new PDFNameTree()\r\n });\r\n\r\n this._root = this.ref({\r\n Type: 'Catalog',\r\n Pages,\r\n Names\r\n });\r\n\r\n if (this.options.lang) {\r\n this._root.data.Lang = new String(this.options.lang);\r\n }\r\n\r\n // The current page\r\n this.page = null;\r\n\r\n // Initialize mixins\r\n this.initMetadata();\r\n this.initColor();\r\n this.initVector();\r\n this.initFonts(options.font);\r\n this.initText();\r\n this.initImages();\r\n this.initOutline();\r\n this.initMarkings(options);\r\n this.initSubset(options);\r\n\r\n // Initialize the metadata\r\n this.info = {\r\n Producer: 'PDFKit',\r\n Creator: 'PDFKit',\r\n CreationDate: new Date()\r\n };\r\n\r\n if (this.options.info) {\r\n for (let key in this.options.info) {\r\n const val = this.options.info[key];\r\n this.info[key] = val;\r\n }\r\n }\r\n\r\n if (this.options.displayTitle) {\r\n this._root.data.ViewerPreferences = this.ref({\r\n DisplayDocTitle: true\r\n });\r\n }\r\n\r\n // Generate file ID\r\n this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n // Initialize security settings\r\n this._security = PDFSecurity.create(this, options);\r\n\r\n // Write the header\r\n // PDF version\r\n this._write(`%PDF-${this.version}`);\r\n\r\n // 4 binary chars, as recommended by the spec\r\n this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n // Add the first page\r\n if (this.options.autoFirstPage !== false) {\r\n this.addPage();\r\n }\r\n }\r\n\r\n addPage(options) {\r\n if (options == null) {\r\n ({ options } = this);\r\n }\r\n\r\n // end the current page if needed\r\n if (!this.options.bufferPages) {\r\n this.flushPages();\r\n }\r\n\r\n // create a page object\r\n this.page = new PDFPage(this, options);\r\n this._pageBuffer.push(this.page);\r\n\r\n // add the page to the object store\r\n const pages = this._root.data.Pages.data;\r\n pages.Kids.push(this.page.dictionary);\r\n pages.Count++;\r\n\r\n // reset x and y coordinates\r\n this.x = this.page.margins.left;\r\n this.y = this.page.margins.top;\r\n\r\n // flip PDF coordinate system so that the origin is in\r\n // the top left rather than the bottom left\r\n this._ctm = [1, 0, 0, 1, 0, 0];\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n this.emit('pageAdded');\r\n\r\n return this;\r\n }\r\n\r\n continueOnNewPage(options) {\r\n const pageMarkings = this.endPageMarkings(this.page);\r\n\r\n this.addPage(options);\r\n\r\n this.initPageMarkings(pageMarkings);\r\n\r\n return this;\r\n }\r\n\r\n bufferedPageRange() {\r\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n }\r\n\r\n switchToPage(n) {\r\n let page;\r\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n throw new Error(\r\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n this._pageBufferStart\r\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n );\r\n }\r\n\r\n return (this.page = page);\r\n }\r\n\r\n flushPages() {\r\n // this local variable exists so we're future-proof against\r\n // reentrant calls to flushPages.\r\n const pages = this._pageBuffer;\r\n this._pageBuffer = [];\r\n this._pageBufferStart += pages.length;\r\n for (let page of pages) {\r\n this.endPageMarkings(page);\r\n page.end();\r\n }\r\n }\r\n\r\n addNamedDestination(name, ...args) {\r\n if (args.length === 0) {\r\n args = ['XYZ', null, null, null];\r\n }\r\n if (args[0] === 'XYZ' && args[2] !== null) {\r\n args[2] = this.page.height - args[2];\r\n }\r\n args.unshift(this.page.dictionary);\r\n this._root.data.Names.data.Dests.add(name, args);\r\n }\r\n\r\n addNamedEmbeddedFile(name, ref) {\r\n if (!this._root.data.Names.data.EmbeddedFiles) {\r\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\r\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ limits: false });\r\n }\r\n\r\n // add filespec to EmbeddedFiles\r\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\r\n }\r\n\r\n addNamedJavaScript(name, js) {\r\n if (!this._root.data.Names.data.JavaScript) {\r\n this._root.data.Names.data.JavaScript = new PDFNameTree();\r\n }\r\n let data = {\r\n JS: new String(js),\r\n S: 'JavaScript'\r\n };\r\n this._root.data.Names.data.JavaScript.add(name, data);\r\n }\r\n\r\n ref(data) {\r\n const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n this._waiting++;\r\n return ref;\r\n }\r\n\r\n _read() {}\r\n // do nothing, but this method is required by node\r\n\r\n _write(data) {\r\n if (!Buffer.isBuffer(data)) {\r\n data = Buffer.from(data + '\\n', 'binary');\r\n }\r\n\r\n this.push(data);\r\n return (this._offset += data.length);\r\n }\r\n\r\n addContent(data) {\r\n this.page.write(data);\r\n return this;\r\n }\r\n\r\n _refEnd(ref) {\r\n this._offsets[ref.id - 1] = ref.offset;\r\n if (--this._waiting === 0 && this._ended) {\r\n this._finalize();\r\n return (this._ended = false);\r\n }\r\n }\r\n\r\n write(filename, fn) {\r\n // print a deprecation warning with a stacktrace\r\n const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n console.warn(err.stack);\r\n\r\n this.pipe(fs.createWriteStream(filename));\r\n this.end();\r\n return this.once('end', fn);\r\n }\r\n\r\n end() {\r\n this.flushPages();\r\n\r\n this._info = this.ref();\r\n for (let key in this.info) {\r\n let val = this.info[key];\r\n if (typeof val === 'string') {\r\n val = new String(val);\r\n }\r\n\r\n let entry = this.ref(val);\r\n entry.end();\r\n\r\n this._info.data[key] = entry;\r\n }\r\n\r\n this._info.end();\r\n\r\n for (let name in this._fontFamilies) {\r\n const font = this._fontFamilies[name];\r\n font.finalize();\r\n }\r\n\r\n this.endOutline();\r\n this.endMarkings();\r\n\r\n if (this.subset) {\r\n this.endSubset();\r\n }\r\n\r\n this.endMetadata();\r\n\r\n this._root.end();\r\n this._root.data.Pages.end();\r\n this._root.data.Names.end();\r\n this.endAcroForm();\r\n\r\n if (this._root.data.ViewerPreferences) {\r\n this._root.data.ViewerPreferences.end();\r\n }\r\n\r\n if (this._security) {\r\n this._security.end();\r\n }\r\n\r\n if (this._waiting === 0) {\r\n return this._finalize();\r\n } else {\r\n return (this._ended = true);\r\n }\r\n }\r\n\r\n _finalize() {\r\n // generate xref\r\n const xRefOffset = this._offset;\r\n this._write('xref');\r\n this._write(`0 ${this._offsets.length + 1}`);\r\n this._write('0000000000 65535 f ');\r\n\r\n for (let offset of this._offsets) {\r\n offset = `0000000000${offset}`.slice(-10);\r\n this._write(offset + ' 00000 n ');\r\n }\r\n\r\n // trailer\r\n const trailer = {\r\n Size: this._offsets.length + 1,\r\n Root: this._root,\r\n Info: this._info,\r\n ID: [this._id, this._id]\r\n };\r\n if (this._security) {\r\n trailer.Encrypt = this._security.dictionary;\r\n }\r\n\r\n this._write('trailer');\r\n this._write(PDFObject.convert(trailer));\r\n\r\n this._write('startxref');\r\n this._write(`${xRefOffset}`);\r\n this._write('%%EOF');\r\n\r\n // end the stream\r\n return this.push(null);\r\n }\r\n\r\n toString() {\r\n return '[object PDFDocument]';\r\n }\r\n}\r\n\r\nconst mixin = methods => {\r\n Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(MetadataMixin);\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\nmixin(MarkingsMixin);\r\nmixin(AcroFormMixin);\r\nmixin(AttachmentsMixin);\r\nmixin(SubsetMixin);\r\n\r\nPDFDocument.LineWrapper = LineWrapper;\r\n\r\nexport default PDFDocument;\r\n"],"names":["PDFAbstractReference","Error","PDFTree","options","_items","limits","key","val","sortedKeys","Object","keys","sort","a","b","_compareKeys","out","length","first","last","push","PDFObject","convert","_dataForKey","_keysName","join","pad","str","Array","slice","escapableRe","escapable","swapBytes","buff","l","i","end","object","encryptFn","String","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","toString","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","map","e","call","number","n","Math","round","PDFReference","document","id","data","gen","compress","Filter","uncompressedLength","buffer","chunk","Length","write","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","DEFAULT_MARGINS","top","left","bottom","right","SIZES","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","size","layout","margin","margins","dimensions","toUpperCase","width","height","content","ref","resources","ProcSet","dictionary","Type","Parent","_root","Pages","MediaBox","Contents","Resources","markings","Font","XObject","ExtGState","Pattern","ColorSpace","Annots","StructParents","createStructParentTreeNextKey","PDFNameTree","localeCompare","k","inRange","value","rangeGroup","startRange","endRange","middleRange","floor","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","isCommonlyMappedToNothing","non_ASCII_space_characters","isNonASCIISpaceCharacter","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","x","toCodePoints","input","codepoints","before","next","saslprep","opts","TypeError","mapped_input","filter","normalized_input","fromCodePoint","apply","normalize","normalized_map","hasProhibited","some","allowUnassigned","hasUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","PDFSecurity","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","bytes","lib","WordArray","random","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","v","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","generateRandomWordArray","getUserPasswordR5","userKeySalt","create","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","padding","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","alloc","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","wordArray","byteArray","PDFGradient","doc","stops","embedded","transform","pos","color","opacity","_normalizeColor","_colorSpace","max","m11","m12","m21","m22","dx","dy","m","fn","stopsLength","matrix","bounds","encode","FunctionType","Domain","N","Functions","Bounds","Encode","_gradCount","shader","pattern","PatternType","Shading","Matrix","stop","grad","opacityGradient","embed","pageBBox","page","form","Subtype","FormType","BBox","Group","S","CS","Sh1","gstate","SMask","G","opacityPattern","PaintType","TilingType","XStep","YStep","Gs1","patterns","stroke","_ctm","m0","m1","m2","m3","m4","m5","_setColorSpace","op","addContent","PDFLinearGradient","x1","y1","x2","y2","ShadingType","Coords","Function","Extend","PDFRadialGradient","r1","r2","underlyingColorSpaces","PDFTilingPattern","bBox","xStep","yStep","stream","toFixed","forEach","csName","csId","getPatternColorSpaceId","colorSpaces","cs","underlyingColorspace","_patternCount","createPattern","patternColor","embedPatternColorSpaces","normalizedColor","_getColorSpace","Gradient","initColor","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","_setColor","_setColorCore","space","fillColor","set","fillOpacity","_fillColor","strokeColor","strokeOpacity","_doOpacity","name","ca","CA","ext_gstates","linearGradient","radialGradient","bbox","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","cx","cy","px","py","sx","sy","parameters","A","C","H","h","L","M","Q","q","s","T","t","Z","z","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","solveArc","lineTo","closePath","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","PI","sin_th","sin","cos_th","cos","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","x3","y3","SVGPath","KAPPA","initVector","_ctmStack","save","restore","pop","lineWidth","w","_CAP_STYLES","BUTT","ROUND","SQUARE","lineCap","_JOIN_STYLES","MITER","BEVEL","lineJoin","miterLimit","dash","originalLength","valid","every","Number","isFinite","JSON","stringify","phase","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","rect","roundedRect","ellipse","xe","ye","xm","ym","circle","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","points","shift","point","_windingRule","rule","test","fill","fillAndStroke","isFillRule","clip","values","translate","rotate","angle","rad","origin","scale","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","filename","fs","readFileSync","contents","attributes","glyphWidths","boundingBoxes","kernPairs","charWidths","char","ascender","descender","xHeight","capHeight","lineGap","section","line","match","text","res","len","glyphs","charCode","characterToGlyph","glyph","advances","widthOfGlyph","getKernPair","PDFFont","includeGap","gap","STANDARD_FONTS","Courier","__dirname","Helvetica","Symbol","ZapfDingbats","StandardFont","font","BaseFont","Encoding","encoded","encodeText","glyphsForString","advancesForGlyphs","positions","xAdvance","yAdvance","xOffset","yOffset","advanceWidth","advance","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","features","run","position","layoutRun","cached","onlyWidth","needle","layoutCached","gid","includeGlyph","codePoints","isCFF","cff","fontFile","encodeStream","on","familyClass","sFamilyClass","undefined","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","descriptor","FontName","Flags","FontBBox","minX","minY","maxX","maxY","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","W","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","chunkSize","chunks","ranges","start","PDFFontFactory","src","family","isStandardFont","fontkit","Uint8Array","ArrayBuffer","initFonts","defaultFont","_fontFamilies","_fontCount","_fontSize","_font","_registeredFonts","cacheKey","fontSize","open","currentLineHeight","lineHeight","registerFont","SOFT_HYPHEN","HYPHEN","LineWrapper","indent","characterSpacing","wordSpacing","columns","columnGap","spaceLeft","startX","startY","column","ellipsis","continuedX","once","continued","align","lastLine","paragraphGap","word","widthOfString","wordWidth","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","lbk","fbk","mightGrow","mustShrink","required","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","eachWord","canFit","lh","continueOnNewPage","EventEmitter","initText","_line","bind","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","add","struct","structType","markStructureContent","wrapper","_wrapper","_textOptions","wrap","heightOfString","Infinity","list","listType","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","label","letter","times","drawListItem","listItem","itemType","labelType","bodyType","structTypes","diff","_fragment","assign","lineBreak","trim","spaceWidth","baseline","renderedWidth","link","goTo","destination","addNamedDestination","underline","lineY","strike","oblique","skew","fonts","encodedWord","positionsWord","hadOffset","addSegment","cur","flush","MARKERS","COLOR_SPACE_MAP","JPEG","marker","readUInt16BE","orientation","exif","fromBuffer","Orientation","bits","channels","colorSpace","BitsPerComponent","Width","Height","PNGImage","image","PNG","imgData","dataDecoded","hasAlphaChannel","isInterlaced","interlaceMethod","Predictor","Colors","colors","Columns","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","initImages","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","rotateAngle","originX","originY","ignoreOrientation","openImage","xobjects","wp","hp","fit","cover","valign","annotate","Rect","_convertRect","Border","F","Dest","annotations","note","Name","D","url","pages","Kids","URI","_markup","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","file","filespec","hidden","FS","Desc","PDFOutline","parent","title","dest","expanded","outlineData","children","Count","First","Last","child","Prev","Next","endOutline","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","type","_attached","_ended","_flushed","_isValidChild","lang","Lang","alt","Alt","E","actual","ActualText","_children","setParent","setAttached","_addContentToParentTree","_contentForClosure","pageStructParents","getStructParentTree","get","parentRef","_flush","closure","endMarkedContent","_isFlushable","K","_flushChild","Pg","MCID","PDFNumberTree","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","structParentTreeKey","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","readOnly","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","center","VALUE_MAP","defaultValue","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","percent","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","f","format","fnKeystroke","fnFormat","param","AA","JS","backgroundColor","MK","BG","borderColor","BC","Ff","select","appendChoices","idx","Opt","refBody","Params","statSync","birthtime","ctime","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","byteLength","_fileRegistry","isEqual","fileSpecBody","EF","UF","description","addNamedEmbeddedFile","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","jsPath","jestPath","_addColorOutputIntent","existsSync","pICCPath","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","initPDFUA","_addPdfuaMetadata","_getPdfuaid","_importSubset","initSubset","PDFA","PDFUA","PDFMetadata","_metadata","xml","newline","_closeTags","initMetadata","metadata","append","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","getLength","getXML","Metadata","PDFDocument","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","generateFileID","autoFirstPage","addPage","bufferPages","flushPages","count","unshift","EmbeddedFiles","js","JavaScript","_finalize","err","console","warn","stack","pipe","createWriteStream","_info","entry","xRefOffset","trailer","Root","ID","Encrypt","Readable","mixin","methods","prototype","MetadataMixin","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin","MarkingsMixin","AcroFormMixin","AttachmentsMixin","SubsetMixin"],"mappings":"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EA8ZtB,MA9ZsB,EA+ZtB,MA/ZsB,EAgatB,MAhasB,EAiatB,MAjasB,EAkatB,MAlasB,EAmatB,MAnasB,EAoatB,MApasB,EAqatB,MArasB,EAsatB,MAtasB,EAuatB,MAvasB,EAwatB,MAxasB,EAyatB,MAzasB,EA0atB,MA1asB,EA2atB,MA3asB,EA4atB,MA5asB,EA6atB,MA7asB,EA8atB,MA9asB,EA+atB,MA/asB,EAgbtB,MAhbsB,EAibtB,MAjbsB,EAkbtB,MAlbsB,EAmbtB,MAnbsB,EAobtB,MApbsB,EAqbtB,MArbsB,EAsbtB,MAtbsB,EAubtB,MAvbsB,EAwbtB,MAxbsB,EAybtB,MAzbsB,EA0btB,MA1bsB,EA2btB,MA3bsB,EA4btB,MA5bsB,EA6btB,MA7bsB,EA8btB,MA9bsB,EA+btB,MA/bsB,EAgctB,MAhcsB,EAictB,MAjcsB,EAkctB,MAlcsB,EAmctB,MAncsB,EAoctB,MApcsB,EAqctB,MArcsB,EAsctB,MAtcsB,EAuctB,MAvcsB,EAwctB,MAxcsB,EAyctB,MAzcsB,EA0ctB,MA1csB,EA2ctB,MA3csB,EA4ctB,MA5csB,EA6ctB,MA7csB,EA8ctB,MA9csB,EA+ctB,MA/csB,EAgdtB,MAhdsB,EAidtB,MAjdsB,EAkdtB,MAldsB,EAmdtB,MAndsB,EAodtB,MApdsB,EAqdtB,MArdsB,EAsdtB,MAtdsB,EAudtB,MAvdsB,EAwdtB,MAxdsB,EAydtB,MAzdsB,EA0dtB,MA1dsB,EA2dtB,MA3dsB,EA4dtB,MA5dsB,EA6dtB,MA7dsB,EA8dtB,MA9dsB,EA+dtB,MA/dsB,EAgetB,MAhesB,EAietB,MAjesB,EAketB,MAlesB,EAmetB,MAnesB,EAoetB,MApesB,EAqetB,MAresB,EAsetB,MAtesB,EAuetB,MAvesB,EAwetB,MAxesB,EAyetB,MAzesB,EA0etB,MA1esB,EA2etB,MA3esB,EA4etB,MA5esB,EA6etB,MA7esB,EA8etB,MA9esB,EA+etB,MA/esB,EAgftB,MAhfsB,EAiftB,MAjfsB,EAkftB,MAlfsB,EAmftB,MAn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"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js deleted file mode 100644 index 67cd75b..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js +++ /dev/null @@ -1,6782 +0,0 @@ -import stream from 'stream'; -import fs from 'fs'; -import zlib from 'zlib'; -import CryptoJS from 'crypto-js'; -import fontkit from 'fontkit'; -import { EventEmitter } from 'events'; -import LineBreaker from 'linebreak'; -import exif from 'jpeg-exif'; -import PNG from 'png-js'; - -/* -PDFAbstractReference - abstract class for PDF reference -*/ -class PDFAbstractReference { - toString() { - throw new Error('Must be implemented by subclasses'); - } - -} - -/* -PDFTree - abstract base class for name and number tree objects -*/ - -class PDFTree { - constructor() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - this._items = {}; // disable /Limits output for this tree - - this.limits = typeof options.limits === 'boolean' ? options.limits : true; - } - - add(key, val) { - return this._items[key] = val; - } - - get(key) { - return this._items[key]; - } - - toString() { - // Needs to be sorted by key - var sortedKeys = Object.keys(this._items).sort((a, b) => this._compareKeys(a, b)); - var out = ['<<']; - - if (this.limits && sortedKeys.length > 1) { - var first = sortedKeys[0], - last = sortedKeys[sortedKeys.length - 1]; - out.push(" /Limits ".concat(PDFObject.convert([this._dataForKey(first), this._dataForKey(last)]))); - } - - out.push(" /".concat(this._keysName(), " [")); - - for (var key of sortedKeys) { - out.push(" ".concat(PDFObject.convert(this._dataForKey(key)), " ").concat(PDFObject.convert(this._items[key]))); - } - - out.push(']'); - out.push('>>'); - return out.join('\n'); - } - - _compareKeys() - /*a, b*/ - { - throw new Error('Must be implemented by subclasses'); - } - - _keysName() { - throw new Error('Must be implemented by subclasses'); - } - - _dataForKey() - /*k*/ - { - throw new Error('Must be implemented by subclasses'); - } - -} - -/* -PDFObject - converts JavaScript types into their corresponding PDF types. -By Devon Govett -*/ - -var pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length); - -var escapableRe = /[\n\r\t\b\f()\\]/g; -var escapable = { - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\b': '\\b', - '\f': '\\f', - '\\': '\\\\', - '(': '\\(', - ')': '\\)' -}; // Convert little endian UTF-16 to big endian - -var swapBytes = function swapBytes(buff) { - var l = buff.length; - - if (l & 0x01) { - throw new Error('Buffer length must be even'); - } else { - for (var i = 0, end = l - 1; i < end; i += 2) { - var a = buff[i]; - buff[i] = buff[i + 1]; - buff[i + 1] = a; - } - } - - return buff; -}; - -class PDFObject { - static convert(object) { - var encryptFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - // String literals are converted to the PDF name type - if (typeof object === 'string') { - return "/".concat(object); // String objects are converted to PDF strings (UTF-16) - } else if (object instanceof String) { - var string = object; // Detect if this is a unicode string - - var isUnicode = false; - - for (var i = 0, end = string.length; i < end; i++) { - if (string.charCodeAt(i) > 0x7f) { - isUnicode = true; - break; - } - } // If so, encode it as big endian UTF-16 - - - var stringBuffer; - - if (isUnicode) { - stringBuffer = swapBytes(Buffer.from("\uFEFF".concat(string), 'utf16le')); - } else { - stringBuffer = Buffer.from(string.valueOf(), 'ascii'); - } // Encrypt the string when necessary - - - if (encryptFn) { - string = encryptFn(stringBuffer).toString('binary'); - } else { - string = stringBuffer.toString('binary'); - } // Escape characters as required by the spec - - - string = string.replace(escapableRe, c => escapable[c]); - return "(".concat(string, ")"); // Buffers are converted to PDF hex strings - } else if (Buffer.isBuffer(object)) { - return "<".concat(object.toString('hex'), ">"); - } else if (object instanceof PDFAbstractReference || object instanceof PDFTree) { - return object.toString(); - } else if (object instanceof Date) { - var _string = "D:".concat(pad(object.getUTCFullYear(), 4)) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; // Encrypt the string when necessary - - - if (encryptFn) { - _string = encryptFn(Buffer.from(_string, 'ascii')).toString('binary'); // Escape characters as required by the spec - - _string = _string.replace(escapableRe, c => escapable[c]); - } - - return "(".concat(_string, ")"); - } else if (Array.isArray(object)) { - var items = object.map(e => PDFObject.convert(e, encryptFn)).join(' '); - return "[".concat(items, "]"); - } else if ({}.toString.call(object) === '[object Object]') { - var out = ['<<']; - - for (var key in object) { - var val = object[key]; - out.push("/".concat(key, " ").concat(PDFObject.convert(val, encryptFn))); - } - - out.push('>>'); - return out.join('\n'); - } else if (typeof object === 'number') { - return PDFObject.number(object); - } else { - return "".concat(object); - } - } - - static number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - - throw new Error("unsupported number: ".concat(n)); - } - -} - -/* -PDFReference - represents a reference to another object in the PDF object heirarchy -By Devon Govett -*/ - -class PDFReference extends PDFAbstractReference { - constructor(document, id) { - var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - super(); - this.document = document; - this.id = id; - this.data = data; - this.gen = 0; - this.compress = this.document.compress && !this.data.Filter; - this.uncompressedLength = 0; - this.buffer = []; - } - - write(chunk) { - if (!Buffer.isBuffer(chunk)) { - chunk = Buffer.from(chunk + '\n', 'binary'); - } - - this.uncompressedLength += chunk.length; - - if (this.data.Length == null) { - this.data.Length = 0; - } - - this.buffer.push(chunk); - this.data.Length += chunk.length; - - if (this.compress) { - return this.data.Filter = 'FlateDecode'; - } - } - - end(chunk) { - if (chunk) { - this.write(chunk); - } - - return this.finalize(); - } - - finalize() { - this.offset = this.document._offset; - var encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null; - - if (this.buffer.length) { - this.buffer = Buffer.concat(this.buffer); - - if (this.compress) { - this.buffer = zlib.deflateSync(this.buffer); - } - - if (encryptFn) { - this.buffer = encryptFn(this.buffer); - } - - this.data.Length = this.buffer.length; - } - - this.document._write("".concat(this.id, " ").concat(this.gen, " obj")); - - this.document._write(PDFObject.convert(this.data, encryptFn)); - - if (this.buffer.length) { - this.document._write('stream'); - - this.document._write(this.buffer); - - this.buffer = []; // free up memory - - this.document._write('\nendstream'); - } - - this.document._write('endobj'); - - this.document._refEnd(this); - } - - toString() { - return "".concat(this.id, " ").concat(this.gen, " R"); - } - -} - -/* -PDFPage - represents a single page in the PDF document -By Devon Govett -*/ -var DEFAULT_MARGINS = { - top: 72, - left: 72, - bottom: 72, - right: 72 -}; -var SIZES = { - '4A0': [4767.87, 6740.79], - '2A0': [3370.39, 4767.87], - A0: [2383.94, 3370.39], - A1: [1683.78, 2383.94], - A2: [1190.55, 1683.78], - A3: [841.89, 1190.55], - A4: [595.28, 841.89], - A5: [419.53, 595.28], - A6: [297.64, 419.53], - A7: [209.76, 297.64], - A8: [147.4, 209.76], - A9: [104.88, 147.4], - A10: [73.7, 104.88], - B0: [2834.65, 4008.19], - B1: [2004.09, 2834.65], - B2: [1417.32, 2004.09], - B3: [1000.63, 1417.32], - B4: [708.66, 1000.63], - B5: [498.9, 708.66], - B6: [354.33, 498.9], - B7: [249.45, 354.33], - B8: [175.75, 249.45], - B9: [124.72, 175.75], - B10: [87.87, 124.72], - C0: [2599.37, 3676.54], - C1: [1836.85, 2599.37], - C2: [1298.27, 1836.85], - C3: [918.43, 1298.27], - C4: [649.13, 918.43], - C5: [459.21, 649.13], - C6: [323.15, 459.21], - C7: [229.61, 323.15], - C8: [161.57, 229.61], - C9: [113.39, 161.57], - C10: [79.37, 113.39], - RA0: [2437.8, 3458.27], - RA1: [1729.13, 2437.8], - RA2: [1218.9, 1729.13], - RA3: [864.57, 1218.9], - RA4: [609.45, 864.57], - SRA0: [2551.18, 3628.35], - SRA1: [1814.17, 2551.18], - SRA2: [1275.59, 1814.17], - SRA3: [907.09, 1275.59], - SRA4: [637.8, 907.09], - EXECUTIVE: [521.86, 756.0], - FOLIO: [612.0, 936.0], - LEGAL: [612.0, 1008.0], - LETTER: [612.0, 792.0], - TABLOID: [792.0, 1224.0] -}; - -class PDFPage { - constructor(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - this.document = document; - this.size = options.size || 'letter'; - this.layout = options.layout || 'portrait'; // process margins - - if (typeof options.margin === 'number') { - this.margins = { - top: options.margin, - left: options.margin, - bottom: options.margin, - right: options.margin - }; // default to 1 inch margins - } else { - this.margins = options.margins || DEFAULT_MARGINS; - } // calculate page dimensions - - - var dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; - this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; - this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; - this.content = this.document.ref(); // Initialize the Font, XObject, and ExtGState dictionaries - - this.resources = this.document.ref({ - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] - }); // The page dictionary - - this.dictionary = this.document.ref({ - Type: 'Page', - Parent: this.document._root.data.Pages, - MediaBox: [0, 0, this.width, this.height], - Contents: this.content, - Resources: this.resources - }); - this.markings = []; - } // Lazily create these objects - - - get fonts() { - var data = this.resources.data; - return data.Font != null ? data.Font : data.Font = {}; - } - - get xobjects() { - var data = this.resources.data; - return data.XObject != null ? data.XObject : data.XObject = {}; - } - - get ext_gstates() { - var data = this.resources.data; - return data.ExtGState != null ? data.ExtGState : data.ExtGState = {}; - } - - get patterns() { - var data = this.resources.data; - return data.Pattern != null ? data.Pattern : data.Pattern = {}; - } - - get colorSpaces() { - var data = this.resources.data; - return data.ColorSpace || (data.ColorSpace = {}); - } - - get annotations() { - var data = this.dictionary.data; - return data.Annots != null ? data.Annots : data.Annots = []; - } - - get structParentTreeKey() { - var data = this.dictionary.data; - return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey(); - } - - maxY() { - return this.height - this.margins.bottom; - } - - write(chunk) { - return this.content.write(chunk); - } - - end() { - this.dictionary.end(); - this.resources.end(); - return this.content.end(); - } - -} - -/* -PDFNameTree - represents a name tree object -*/ - -class PDFNameTree extends PDFTree { - _compareKeys(a, b) { - return a.localeCompare(b); - } - - _keysName() { - return "Names"; - } - - _dataForKey(k) { - return new String(k); - } - -} - -/** - * Check if value is in a range group. - * @param {number} value - * @param {number[]} rangeGroup - * @returns {boolean} - */ -function inRange(value, rangeGroup) { - if (value < rangeGroup[0]) return false; - var startRange = 0; - var endRange = rangeGroup.length / 2; - - while (startRange <= endRange) { - var middleRange = Math.floor((startRange + endRange) / 2); // actual array index - - var arrayIndex = middleRange * 2; // Check if value is in range pointed by actual index - - if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) { - return true; - } - - if (value > rangeGroup[arrayIndex + 1]) { - // Search Right Side Of Array - startRange = middleRange + 1; - } else { - // Search Left Side Of Array - endRange = middleRange - 1; - } - } - - return false; -} - -/** - * A.1 Unassigned code points in Unicode 3.2 - * @link https://tools.ietf.org/html/rfc3454#appendix-A.1 - */ - -var unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; // prettier-ignore-end - -var isUnassignedCodePoint = character => inRange(character, unassigned_code_points); // prettier-ignore-start - -/** - * B.1 Commonly mapped to nothing - * @link https://tools.ietf.org/html/rfc3454#appendix-B.1 - */ - - -var commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; // prettier-ignore-end - -var isCommonlyMappedToNothing = character => inRange(character, commonly_mapped_to_nothing); // prettier-ignore-start - -/** - * C.1.2 Non-ASCII space characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2 - */ - - -var non_ASCII_space_characters = [0x00a0, 0x00a0 -/* NO-BREAK SPACE */ -, 0x1680, 0x1680 -/* OGHAM SPACE MARK */ -, 0x2000, 0x2000 -/* EN QUAD */ -, 0x2001, 0x2001 -/* EM QUAD */ -, 0x2002, 0x2002 -/* EN SPACE */ -, 0x2003, 0x2003 -/* EM SPACE */ -, 0x2004, 0x2004 -/* THREE-PER-EM SPACE */ -, 0x2005, 0x2005 -/* FOUR-PER-EM SPACE */ -, 0x2006, 0x2006 -/* SIX-PER-EM SPACE */ -, 0x2007, 0x2007 -/* FIGURE SPACE */ -, 0x2008, 0x2008 -/* PUNCTUATION SPACE */ -, 0x2009, 0x2009 -/* THIN SPACE */ -, 0x200a, 0x200a -/* HAIR SPACE */ -, 0x200b, 0x200b -/* ZERO WIDTH SPACE */ -, 0x202f, 0x202f -/* NARROW NO-BREAK SPACE */ -, 0x205f, 0x205f -/* MEDIUM MATHEMATICAL SPACE */ -, 0x3000, 0x3000 -/* IDEOGRAPHIC SPACE */ -]; // prettier-ignore-end - -var isNonASCIISpaceCharacter = character => inRange(character, non_ASCII_space_characters); // prettier-ignore-start - - -var non_ASCII_controls_characters = [ -/** - * C.2.2 Non-ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2 - */ -0x0080, 0x009f -/* [CONTROL CHARACTERS] */ -, 0x06dd, 0x06dd -/* ARABIC END OF AYAH */ -, 0x070f, 0x070f -/* SYRIAC ABBREVIATION MARK */ -, 0x180e, 0x180e -/* MONGOLIAN VOWEL SEPARATOR */ -, 0x200c, 0x200c -/* ZERO WIDTH NON-JOINER */ -, 0x200d, 0x200d -/* ZERO WIDTH JOINER */ -, 0x2028, 0x2028 -/* LINE SEPARATOR */ -, 0x2029, 0x2029 -/* PARAGRAPH SEPARATOR */ -, 0x2060, 0x2060 -/* WORD JOINER */ -, 0x2061, 0x2061 -/* FUNCTION APPLICATION */ -, 0x2062, 0x2062 -/* INVISIBLE TIMES */ -, 0x2063, 0x2063 -/* INVISIBLE SEPARATOR */ -, 0x206a, 0x206f -/* [CONTROL CHARACTERS] */ -, 0xfeff, 0xfeff -/* ZERO WIDTH NO-BREAK SPACE */ -, 0xfff9, 0xfffc -/* [CONTROL CHARACTERS] */ -, 0x1d173, 0x1d17a -/* [MUSICAL CONTROL CHARACTERS] */ -]; -var non_character_codepoints = [ -/** - * C.4 Non-character code points - * @link https://tools.ietf.org/html/rfc3454#appendix-C.4 - */ -0xfdd0, 0xfdef -/* [NONCHARACTER CODE POINTS] */ -, 0xfffe, 0xffff -/* [NONCHARACTER CODE POINTS] */ -, 0x1fffe, 0x1ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x2fffe, 0x2ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x3fffe, 0x3ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x4fffe, 0x4ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x5fffe, 0x5ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x6fffe, 0x6ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x7fffe, 0x7ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x8fffe, 0x8ffff -/* [NONCHARACTER CODE POINTS] */ -, 0x9fffe, 0x9ffff -/* [NONCHARACTER CODE POINTS] */ -, 0xafffe, 0xaffff -/* [NONCHARACTER CODE POINTS] */ -, 0xbfffe, 0xbffff -/* [NONCHARACTER CODE POINTS] */ -, 0xcfffe, 0xcffff -/* [NONCHARACTER CODE POINTS] */ -, 0xdfffe, 0xdffff -/* [NONCHARACTER CODE POINTS] */ -, 0xefffe, 0xeffff -/* [NONCHARACTER CODE POINTS] */ -, 0x10fffe, 0x10ffff -/* [NONCHARACTER CODE POINTS] */ -]; -/** - * 2.3. Prohibited Output - */ - -var prohibited_characters = [ -/** - * C.2.1 ASCII control characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1 - */ -0, 0x001f -/* [CONTROL CHARACTERS] */ -, 0x007f, 0x007f -/* DELETE */ -, -/** - * C.8 Change display properties or are deprecated - * @link https://tools.ietf.org/html/rfc3454#appendix-C.8 - */ -0x0340, 0x0340 -/* COMBINING GRAVE TONE MARK */ -, 0x0341, 0x0341 -/* COMBINING ACUTE TONE MARK */ -, 0x200e, 0x200e -/* LEFT-TO-RIGHT MARK */ -, 0x200f, 0x200f -/* RIGHT-TO-LEFT MARK */ -, 0x202a, 0x202a -/* LEFT-TO-RIGHT EMBEDDING */ -, 0x202b, 0x202b -/* RIGHT-TO-LEFT EMBEDDING */ -, 0x202c, 0x202c -/* POP DIRECTIONAL FORMATTING */ -, 0x202d, 0x202d -/* LEFT-TO-RIGHT OVERRIDE */ -, 0x202e, 0x202e -/* RIGHT-TO-LEFT OVERRIDE */ -, 0x206a, 0x206a -/* INHIBIT SYMMETRIC SWAPPING */ -, 0x206b, 0x206b -/* ACTIVATE SYMMETRIC SWAPPING */ -, 0x206c, 0x206c -/* INHIBIT ARABIC FORM SHAPING */ -, 0x206d, 0x206d -/* ACTIVATE ARABIC FORM SHAPING */ -, 0x206e, 0x206e -/* NATIONAL DIGIT SHAPES */ -, 0x206f, 0x206f -/* NOMINAL DIGIT SHAPES */ -, -/** - * C.7 Inappropriate for canonical representation - * @link https://tools.ietf.org/html/rfc3454#appendix-C.7 - */ -0x2ff0, 0x2ffb -/* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */ -, -/** - * C.5 Surrogate codes - * @link https://tools.ietf.org/html/rfc3454#appendix-C.5 - */ -0xd800, 0xdfff, -/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 - */ -0xe000, 0xf8ff -/* [PRIVATE USE, PLANE 0] */ -, -/** - * C.6 Inappropriate for plain text - * @link https://tools.ietf.org/html/rfc3454#appendix-C.6 - */ -0xfff9, 0xfff9 -/* INTERLINEAR ANNOTATION ANCHOR */ -, 0xfffa, 0xfffa -/* INTERLINEAR ANNOTATION SEPARATOR */ -, 0xfffb, 0xfffb -/* INTERLINEAR ANNOTATION TERMINATOR */ -, 0xfffc, 0xfffc -/* OBJECT REPLACEMENT CHARACTER */ -, 0xfffd, 0xfffd -/* REPLACEMENT CHARACTER */ -, -/** - * C.9 Tagging characters - * @link https://tools.ietf.org/html/rfc3454#appendix-C.9 - */ -0xe0001, 0xe0001 -/* LANGUAGE TAG */ -, 0xe0020, 0xe007f -/* [TAGGING CHARACTERS] */ -, -/** - * C.3 Private use - * @link https://tools.ietf.org/html/rfc3454#appendix-C.3 - */ -0xf0000, 0xffffd -/* [PRIVATE USE, PLANE 15] */ -, 0x100000, 0x10fffd -/* [PRIVATE USE, PLANE 16] */ -]; // prettier-ignore-end - -var isProhibitedCharacter = character => inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints); // prettier-ignore-start - -/** - * D.1 Characters with bidirectional property "R" or "AL" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.1 - */ - - -var bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; // prettier-ignore-end - -var isBidirectionalRAL = character => inRange(character, bidirectional_r_al); // prettier-ignore-start - -/** - * D.2 Characters with bidirectional property "L" - * @link https://tools.ietf.org/html/rfc3454#appendix-D.2 - */ - - -var bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; // prettier-ignore-end - -var isBidirectionalL = character => inRange(character, bidirectional_l); - -/** - * non-ASCII space characters [StringPrep, C.1.2] that can be - * mapped to SPACE (U+0020) - */ - -var mapping2space = isNonASCIISpaceCharacter; -/** - * the "commonly mapped to nothing" characters [StringPrep, B.1] - * that can be mapped to nothing. - */ - -var mapping2nothing = isCommonlyMappedToNothing; // utils - -var getCodePoint = character => character.codePointAt(0); - -var first = x => x[0]; - -var last = x => x[x.length - 1]; -/** - * Convert provided string into an array of Unicode Code Points. - * Based on https://stackoverflow.com/a/21409165/1556249 - * and https://www.npmjs.com/package/code-point-at. - * @param {string} input - * @returns {number[]} - */ - - -function toCodePoints(input) { - var codepoints = []; - var size = input.length; - - for (var i = 0; i < size; i += 1) { - var before = input.charCodeAt(i); - - if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { - var next = input.charCodeAt(i + 1); - - if (next >= 0xdc00 && next <= 0xdfff) { - codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); - i += 1; - continue; - } - } - - codepoints.push(before); - } - - return codepoints; -} -/** - * SASLprep. - * @param {string} input - * @param {Object} opts - * @param {boolean} opts.allowUnassigned - * @returns {string} - */ - - -function saslprep(input) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (typeof input !== 'string') { - throw new TypeError('Expected string.'); - } - - if (input.length === 0) { - return ''; - } // 1. Map - - - var mapped_input = toCodePoints(input) // 1.1 mapping to space - .map(character => mapping2space(character) ? 0x20 : character) // 1.2 mapping to nothing - .filter(character => !mapping2nothing(character)); // 2. Normalize - - var normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC'); - var normalized_map = toCodePoints(normalized_input); // 3. Prohibit - - var hasProhibited = normalized_map.some(isProhibitedCharacter); - - if (hasProhibited) { - throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); - } // Unassigned Code Points - - - if (opts.allowUnassigned !== true) { - var hasUnassigned = normalized_map.some(isUnassignedCodePoint); - - if (hasUnassigned) { - throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); - } - } // 4. check bidi - - - var hasBidiRAL = normalized_map.some(isBidirectionalRAL); - var hasBidiL = normalized_map.some(isBidirectionalL); // 4.1 If a string contains any RandALCat character, the string MUST NOT - // contain any LCat character. - - if (hasBidiRAL && hasBidiL) { - throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6'); - } - /** - * 4.2 If a string contains any RandALCat character, a RandALCat - * character MUST be the first character of the string, and a - * RandALCat character MUST be the last character of the string. - */ - - - var isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input))); - var isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input))); - - if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { - throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); - } - - return normalized_input; -} - -/* - PDFSecurity - represents PDF security settings - By Yang Liu - */ - -class PDFSecurity { - static generateFileID() { - var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var infoStr = "".concat(info.CreationDate.getTime(), "\n"); - - for (var key in info) { - // eslint-disable-next-line no-prototype-builtins - if (!info.hasOwnProperty(key)) { - continue; - } - - infoStr += "".concat(key, ": ").concat(info[key].valueOf(), "\n"); - } - - return wordArrayToBuffer(CryptoJS.MD5(infoStr)); - } - - static generateRandomWordArray(bytes) { - return CryptoJS.lib.WordArray.random(bytes); - } - - static create(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!options.ownerPassword && !options.userPassword) { - return null; - } - - return new PDFSecurity(document, options); - } - - constructor(document) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!options.ownerPassword && !options.userPassword) { - throw new Error('None of owner password and user password is defined.'); - } - - this.document = document; - - this._setupEncryption(options); - } - - _setupEncryption(options) { - switch (options.pdfVersion) { - case '1.4': - case '1.5': - this.version = 2; - break; - - case '1.6': - case '1.7': - this.version = 4; - break; - - case '1.7ext3': - this.version = 5; - break; - - default: - this.version = 1; - break; - } - - var encDict = { - Filter: 'Standard' - }; - - switch (this.version) { - case 1: - case 2: - case 4: - this._setupEncryptionV1V2V4(this.version, encDict, options); - - break; - - case 5: - this._setupEncryptionV5(encDict, options); - - break; - } - - this.dictionary = this.document.ref(encDict); - } - - _setupEncryptionV1V2V4(v, encDict, options) { - var r, permissions; - - switch (v) { - case 1: - r = 2; - this.keyBits = 40; - permissions = getPermissionsR2(options.permissions); - break; - - case 2: - r = 3; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - - case 4: - r = 4; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - } - - var paddedUserPassword = processPasswordR2R3R4(options.userPassword); - var paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword; - var ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword); - this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions); - var userPasswordEntry; - - if (r === 2) { - userPasswordEntry = getUserPasswordR2(this.encryptionKey); - } else { - userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey); - } - - encDict.V = v; - - if (v >= 2) { - encDict.Length = this.keyBits; - } - - if (v === 4) { - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV2', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - } - - encDict.R = r; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.P = permissions; - } - - _setupEncryptionV5(encDict, options) { - this.keyBits = 256; - var permissions = getPermissionsR3(options.permissions); - var processedUserPassword = processPasswordR5(options.userPassword); - var processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword; - this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray); - var userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray); - var userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8); - var userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey); - var ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray); - var ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8); - var ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey); - var permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray); - encDict.V = 5; - encDict.Length = this.keyBits; - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV3', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - encDict.R = 5; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry); - encDict.P = permissions; - encDict.Perms = wordArrayToBuffer(permsEntry); - } - - getEncryptFn(obj, gen) { - var digest; - - if (this.version < 5) { - digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5)); - } - - if (this.version === 1 || this.version === 2) { - var _key = CryptoJS.MD5(digest); - - _key.sigBytes = Math.min(16, this.keyBits / 8 + 5); - return buffer => wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), _key).ciphertext); - } - - var key; - - if (this.version === 4) { - key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))); - } else { - key = this.encryptionKey; - } - - var iv = PDFSecurity.generateRandomWordArray(16); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - iv - }; - return buffer => wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext)); - } - - end() { - this.dictionary.end(); - } - -} - -function getPermissionsR2() { - var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var permissions = 0xffffffc0 >> 0; - - if (permissionObject.printing) { - permissions |= 0b000000000100; - } - - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - - return permissions; -} - -function getPermissionsR3() { - var permissionObject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var permissions = 0xfffff0c0 >> 0; - - if (permissionObject.printing === 'lowResolution') { - permissions |= 0b000000000100; - } - - if (permissionObject.printing === 'highResolution') { - permissions |= 0b100000000100; - } - - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - - if (permissionObject.fillingForms) { - permissions |= 0b000100000000; - } - - if (permissionObject.contentAccessibility) { - permissions |= 0b001000000000; - } - - if (permissionObject.documentAssembly) { - permissions |= 0b010000000000; - } - - return permissions; -} - -function getUserPasswordR2(encryptionKey) { - return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext; -} - -function getUserPasswordR3R4(documentId, encryptionKey) { - var key = encryptionKey.clone(); - var cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))); - - for (var i = 0; i < 20; i++) { - var xorRound = Math.ceil(key.sigBytes / 4); - - for (var j = 0; j < xorRound; j++) { - key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - - return cipher.concat(CryptoJS.lib.WordArray.create(null, 16)); -} - -function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) { - var digest = paddedOwnerPassword; - var round = r >= 3 ? 51 : 1; - - for (var i = 0; i < round; i++) { - digest = CryptoJS.MD5(digest); - } - - var key = digest.clone(); - key.sigBytes = keyBits / 8; - var cipher = paddedUserPassword; - round = r >= 3 ? 20 : 1; - - for (var _i = 0; _i < round; _i++) { - var xorRound = Math.ceil(key.sigBytes / 4); - - for (var j = 0; j < xorRound; j++) { - key.words[j] = digest.words[j] ^ (_i | _i << 8 | _i << 16 | _i << 24); - } - - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - - return cipher; -} - -function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) { - var key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId)); - var round = r >= 3 ? 51 : 1; - - for (var i = 0; i < round; i++) { - key = CryptoJS.MD5(key); - key.sigBytes = keyBits / 8; - } - - return key; -} - -function getUserPasswordR5(processedUserPassword, generateRandomWordArray) { - var validationSalt = generateRandomWordArray(8); - var keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt); -} - -function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) { - var key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt)); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} - -function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) { - var validationSalt = generateRandomWordArray(8); - var keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt); -} - -function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) { - var key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry)); - var options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} - -function getEncryptionKeyR5(generateRandomWordArray) { - return generateRandomWordArray(32); -} - -function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) { - var cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4)); - var options = { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding - }; - return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext; -} - -function processPasswordR2R3R4() { - var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var out = Buffer.alloc(32); - var length = password.length; - var index = 0; - - while (index < length && index < 32) { - var code = password.charCodeAt(index); - - if (code > 0xff) { - throw new Error('Password contains one or more invalid characters.'); - } - - out[index] = code; - index++; - } - - while (index < 32) { - out[index] = PASSWORD_PADDING[index - length]; - index++; - } - - return CryptoJS.lib.WordArray.create(out); -} - -function processPasswordR5() { - var password = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - password = unescape(encodeURIComponent(saslprep(password))); - var length = Math.min(127, password.length); - var out = Buffer.alloc(length); - - for (var i = 0; i < length; i++) { - out[i] = password.charCodeAt(i); - } - - return CryptoJS.lib.WordArray.create(out); -} - -function lsbFirstWord(data) { - return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff; -} - -function wordArrayToBuffer(wordArray) { - var byteArray = []; - - for (var i = 0; i < wordArray.sigBytes; i++) { - byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff); - } - - return Buffer.from(byteArray); -} - -var PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]; - -var { - number -} = PDFObject; - -class PDFGradient { - constructor(doc) { - this.doc = doc; - this.stops = []; - this.embedded = false; - this.transform = [1, 0, 0, 1, 0, 0]; - } - - stop(pos, color, opacity) { - if (opacity == null) { - opacity = 1; - } - - color = this.doc._normalizeColor(color); - - if (this.stops.length === 0) { - if (color.length === 3) { - this._colorSpace = 'DeviceRGB'; - } else if (color.length === 4) { - this._colorSpace = 'DeviceCMYK'; - } else if (color.length === 1) { - this._colorSpace = 'DeviceGray'; - } else { - throw new Error('Unknown color space'); - } - } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) { - throw new Error('All gradient stops must use the same color space'); - } - - opacity = Math.max(0, Math.min(1, opacity)); - this.stops.push([pos, color, opacity]); - return this; - } - - setTransform(m11, m12, m21, m22, dx, dy) { - this.transform = [m11, m12, m21, m22, dx, dy]; - return this; - } - - embed(m) { - var fn; - var stopsLength = this.stops.length; - - if (stopsLength === 0) { - return; - } - - this.embedded = true; - this.matrix = m; // if the last stop comes before 100%, add a copy at 100% - - var last = this.stops[stopsLength - 1]; - - if (last[0] < 1) { - this.stops.push([1, last[1], last[2]]); - } - - var bounds = []; - var encode = []; - var stops = []; - - for (var i = 0; i < stopsLength - 1; i++) { - encode.push(0, 1); - - if (i + 2 !== stopsLength) { - bounds.push(this.stops[i + 1][0]); - } - - fn = this.doc.ref({ - FunctionType: 2, - Domain: [0, 1], - C0: this.stops[i + 0][1], - C1: this.stops[i + 1][1], - N: 1 - }); - stops.push(fn); - fn.end(); - } // if there are only two stops, we don't need a stitching function - - - if (stopsLength === 1) { - fn = stops[0]; - } else { - fn = this.doc.ref({ - FunctionType: 3, - // stitching function - Domain: [0, 1], - Functions: stops, - Bounds: bounds, - Encode: encode - }); - fn.end(); - } - - this.id = "Sh".concat(++this.doc._gradCount); - var shader = this.shader(fn); - shader.end(); - var pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 2, - Shading: shader, - Matrix: this.matrix.map(number) - }); - pattern.end(); - - if (this.stops.some(stop => stop[2] < 1)) { - var grad = this.opacityGradient(); - grad._colorSpace = 'DeviceGray'; - - for (var stop of this.stops) { - grad.stop(stop[0], [stop[2]]); - } - - grad = grad.embed(this.matrix); - var pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; - var form = this.doc.ref({ - Type: 'XObject', - Subtype: 'Form', - FormType: 1, - BBox: pageBBox, - Group: { - Type: 'Group', - S: 'Transparency', - CS: 'DeviceGray' - }, - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: grad - } - } - }); - form.write('/Pattern cs /Sh1 scn'); - form.end("".concat(pageBBox.join(' '), " re f")); - var gstate = this.doc.ref({ - Type: 'ExtGState', - SMask: { - Type: 'Mask', - S: 'Luminosity', - G: form - } - }); - gstate.end(); - var opacityPattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 1, - TilingType: 2, - BBox: pageBBox, - XStep: pageBBox[2], - YStep: pageBBox[3], - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: pattern - }, - ExtGState: { - Gs1: gstate - } - } - }); - opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn'); - opacityPattern.end("".concat(pageBBox.join(' '), " re f")); - this.doc.page.patterns[this.id] = opacityPattern; - } else { - this.doc.page.patterns[this.id] = pattern; - } - - return pattern; - } - - apply(stroke) { - // apply gradient transform to existing document ctm - var [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - var [m11, m12, m21, m22, dx, dy] = this.transform; - var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - - if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) { - this.embed(m); - } - - this.doc._setColorSpace('Pattern', stroke); - - var op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent("/".concat(this.id, " ").concat(op)); - } - -} - -class PDFLinearGradient extends PDFGradient { - constructor(doc, x1, y1, x2, y2) { - super(doc); - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - } - - shader(fn) { - return this.doc.ref({ - ShadingType: 2, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.x2, this.y2], - Function: fn, - Extend: [true, true] - }); - } - - opacityGradient() { - return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2); - } - -} - -class PDFRadialGradient extends PDFGradient { - constructor(doc, x1, y1, r1, x2, y2, r2) { - super(doc); - this.doc = doc; - this.x1 = x1; - this.y1 = y1; - this.r1 = r1; - this.x2 = x2; - this.y2 = y2; - this.r2 = r2; - } - - shader(fn) { - return this.doc.ref({ - ShadingType: 3, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], - Function: fn, - Extend: [true, true] - }); - } - - opacityGradient() { - return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); - } - -} - -var Gradient = { - PDFGradient, - PDFLinearGradient, - PDFRadialGradient -}; - -/* -PDF tiling pattern support. Uncolored only. - */ -var underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB']; - -class PDFTilingPattern { - constructor(doc, bBox, xStep, yStep, stream) { - this.doc = doc; - this.bBox = bBox; - this.xStep = xStep; - this.yStep = yStep; - this.stream = stream; - } - - createPattern() { - // no resources needed for our current usage - // required entry - var resources = this.doc.ref(); - resources.end(); // apply default transform matrix (flipped in the default doc._ctm) - // see document.js & gradient.js - - var [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - var [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0]; - var m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - var pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - // tiling - PaintType: 2, - // 1-colored, 2-uncolored - TilingType: 2, - // 2-no distortion - BBox: this.bBox, - XStep: this.xStep, - YStep: this.yStep, - Matrix: m.map(v => +v.toFixed(5)), - Resources: resources - }); - pattern.end(this.stream); - return pattern; - } - - embedPatternColorSpaces() { - // map each pattern to an underlying color space - // and embed on each page - underlyingColorSpaces.forEach(csName => { - var csId = this.getPatternColorSpaceId(csName); - if (this.doc.page.colorSpaces[csId]) return; - var cs = this.doc.ref(['Pattern', csName]); - cs.end(); - this.doc.page.colorSpaces[csId] = cs; - }); - } - - getPatternColorSpaceId(underlyingColorspace) { - return "CsP".concat(underlyingColorspace); - } - - embed() { - if (!this.id) { - this.doc._patternCount = this.doc._patternCount + 1; - this.id = 'P' + this.doc._patternCount; - this.pattern = this.createPattern(); - } // patterns are embedded in each page - - - if (!this.doc.page.patterns[this.id]) { - this.doc.page.patterns[this.id] = this.pattern; - } - } - - apply(stroke, patternColor) { - // do any embedding/creating that might be needed - this.embedPatternColorSpaces(); - this.embed(); - - var normalizedColor = this.doc._normalizeColor(patternColor); - - if (!normalizedColor) throw Error("invalid pattern color. (value: ".concat(patternColor, ")")); // select one of the pattern color spaces - - var csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor)); - - this.doc._setColorSpace(csId, stroke); // stroke/fill using the pattern and color (in the above underlying color space) - - - var op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent("".concat(normalizedColor.join(' '), " /").concat(this.id, " ").concat(op)); - } - -} - -var pattern = { - PDFTilingPattern -}; - -var { - PDFGradient: PDFGradient$1, - PDFLinearGradient: PDFLinearGradient$1, - PDFRadialGradient: PDFRadialGradient$1 -} = Gradient; -var { - PDFTilingPattern: PDFTilingPattern$1 -} = pattern; -var ColorMixin = { - initColor() { - // The opacity dictionaries - this._opacityRegistry = {}; - this._opacityCount = 0; - this._patternCount = 0; - return this._gradCount = 0; - }, - - _normalizeColor(color) { - if (typeof color === 'string') { - if (color.charAt(0) === '#') { - if (color.length === 4) { - color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3'); - } - - var hex = parseInt(color.slice(1), 16); - color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; - } else if (namedColors[color]) { - color = namedColors[color]; - } - } - - if (Array.isArray(color)) { - // RGB - if (color.length === 3) { - color = color.map(part => part / 255); // CMYK - } else if (color.length === 4) { - color = color.map(part => part / 100); - } - - return color; - } - - return null; - }, - - _setColor(color, stroke) { - if (color instanceof PDFGradient$1) { - color.apply(stroke); - return true; // see if tiling pattern, decode & apply it it - } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern$1) { - color[0].apply(stroke, color[1]); - return true; - } // any other case should be a normal color and not a pattern - - - return this._setColorCore(color, stroke); - }, - - _setColorCore(color, stroke) { - color = this._normalizeColor(color); - - if (!color) { - return false; - } - - var op = stroke ? 'SCN' : 'scn'; - - var space = this._getColorSpace(color); - - this._setColorSpace(space, stroke); - - color = color.join(' '); - this.addContent("".concat(color, " ").concat(op)); - return true; - }, - - _setColorSpace(space, stroke) { - var op = stroke ? 'CS' : 'cs'; - return this.addContent("/".concat(space, " ").concat(op)); - }, - - _getColorSpace(color) { - return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; - }, - - fillColor(color, opacity) { - var set = this._setColor(color, false); - - if (set) { - this.fillOpacity(opacity); - } // save this for text wrapper, which needs to reset - // the fill color on new pages - - - this._fillColor = [color, opacity]; - return this; - }, - - strokeColor(color, opacity) { - var set = this._setColor(color, true); - - if (set) { - this.strokeOpacity(opacity); - } - - return this; - }, - - opacity(opacity) { - this._doOpacity(opacity, opacity); - - return this; - }, - - fillOpacity(opacity) { - this._doOpacity(opacity, null); - - return this; - }, - - strokeOpacity(opacity) { - this._doOpacity(null, opacity); - - return this; - }, - - _doOpacity(fillOpacity, strokeOpacity) { - var dictionary, name; - - if (fillOpacity == null && strokeOpacity == null) { - return; - } - - if (fillOpacity != null) { - fillOpacity = Math.max(0, Math.min(1, fillOpacity)); - } - - if (strokeOpacity != null) { - strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); - } - - var key = "".concat(fillOpacity, "_").concat(strokeOpacity); - - if (this._opacityRegistry[key]) { - [dictionary, name] = this._opacityRegistry[key]; - } else { - dictionary = { - Type: 'ExtGState' - }; - - if (fillOpacity != null) { - dictionary.ca = fillOpacity; - } - - if (strokeOpacity != null) { - dictionary.CA = strokeOpacity; - } - - dictionary = this.ref(dictionary); - dictionary.end(); - var id = ++this._opacityCount; - name = "Gs".concat(id); - this._opacityRegistry[key] = [dictionary, name]; - } - - this.page.ext_gstates[name] = dictionary; - return this.addContent("/".concat(name, " gs")); - }, - - linearGradient(x1, y1, x2, y2) { - return new PDFLinearGradient$1(this, x1, y1, x2, y2); - }, - - radialGradient(x1, y1, r1, x2, y2, r2) { - return new PDFRadialGradient$1(this, x1, y1, r1, x2, y2, r2); - }, - - pattern(bbox, xStep, yStep, stream) { - return new PDFTilingPattern$1(this, bbox, xStep, yStep, stream); - } - -}; -var namedColors = { - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -var cx, cy, px, py, sx, sy; -cx = cy = px = py = sx = sy = 0; -var parameters = { - A: 7, - a: 7, - C: 6, - c: 6, - H: 1, - h: 1, - L: 2, - l: 2, - M: 2, - m: 2, - Q: 4, - q: 4, - S: 4, - s: 4, - T: 2, - t: 2, - V: 1, - v: 1, - Z: 0, - z: 0 -}; - -var parse = function parse(path) { - var cmd; - var ret = []; - var args = []; - var curArg = ''; - var foundDecimal = false; - var params = 0; - - for (var c of path) { - if (parameters[c] != null) { - params = parameters[c]; - - if (cmd) { - // save existing command - if (curArg.length > 0) { - args[args.length] = +curArg; - } - - ret[ret.length] = { - cmd, - args - }; - args = []; - curArg = ''; - foundDecimal = false; - } - - cmd = c; - } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) { - if (curArg.length === 0) { - continue; - } - - if (args.length === params) { - // handle reused commands - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; // handle assumed commands - - if (cmd === 'M') { - cmd = 'L'; - } - - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - - foundDecimal = c === '.'; // fix for negative numbers or repeated decimals with no delimeter between commands - - curArg = ['-', '.'].includes(c) ? c : ''; - } else { - curArg += c; - - if (c === '.') { - foundDecimal = true; - } - } - } // add the last command - - - if (curArg.length > 0) { - if (args.length === params) { - // handle reused commands - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; // handle assumed commands - - if (cmd === 'M') { - cmd = 'L'; - } - - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - } - - ret[ret.length] = { - cmd, - args - }; - return ret; -}; - -var apply = function apply(commands, doc) { - // current point, control point, and subpath starting point - cx = cy = px = py = sx = sy = 0; // run the commands - - for (var i = 0; i < commands.length; i++) { - var c = commands[i]; - - if (typeof runners[c.cmd] === 'function') { - runners[c.cmd](doc, c.args); - } - } -}; - -var runners = { - M(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - - m(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - - C(doc, a) { - cx = a[4]; - cy = a[5]; - px = a[2]; - py = a[3]; - return doc.bezierCurveTo(...a); - }, - - c(doc, a) { - doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); - px = cx + a[2]; - py = cy + a[3]; - cx += a[4]; - return cy += a[5]; - }, - - S(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); - px = a[0]; - py = a[1]; - cx = a[2]; - return cy = a[3]; - }, - - s(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - - Q(doc, a) { - px = a[0]; - py = a[1]; - cx = a[2]; - cy = a[3]; - return doc.quadraticCurveTo(a[0], a[1], cx, cy); - }, - - q(doc, a) { - doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - - T(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - - doc.quadraticCurveTo(px, py, a[0], a[1]); - px = cx - (px - cx); - py = cy - (py - cy); - cx = a[0]; - return cy = a[1]; - }, - - t(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - - doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); - cx += a[0]; - return cy += a[1]; - }, - - A(doc, a) { - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - - a(doc, a) { - a[5] += cx; - a[6] += cy; - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - - L(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - l(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - H(doc, a) { - cx = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - h(doc, a) { - cx += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - V(doc, a) { - cy = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - v(doc, a) { - cy += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - - Z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - }, - - z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - } - -}; - -var solveArc = function solveArc(doc, x, y, coords) { - var [rx, ry, rot, large, sweep, ex, ey] = coords; - var segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - - for (var seg of segs) { - var bez = segmentToBezier(...seg); - doc.bezierCurveTo(...bez); - } -}; // from Inkscape svgtopdf, thanks! - - -var arcToSegments = function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) { - var th = rotateX * (Math.PI / 180); - var sin_th = Math.sin(th); - var cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - var pl = px * px / (rx * rx) + py * py / (ry * ry); - - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = -sin_th / ry; - var a11 = cos_th / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - var d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); - var sfactor_sq = 1 / d - 0.25; - - if (sfactor_sq < 0) { - sfactor_sq = 0; - } - - var sfactor = Math.sqrt(sfactor_sq); - - if (sweep === large) { - sfactor = -sfactor; - } - - var xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); - var th0 = Math.atan2(y0 - yc, x0 - xc); - var th1 = Math.atan2(y1 - yc, x1 - xc); - var th_arc = th1 - th0; - - if (th_arc < 0 && sweep === 1) { - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - var result = []; - - for (var i = 0; i < segments; i++) { - var th2 = th0 + i * th_arc / segments; - var th3 = th0 + (i + 1) * th_arc / segments; - result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; - } - - return result; -}; - -var segmentToBezier = function segmentToBezier(cx, cy, th0, th1, rx, ry, sin_th, cos_th) { - var a00 = cos_th * rx; - var a01 = -sin_th * ry; - var a10 = sin_th * rx; - var a11 = cos_th * ry; - var th_half = 0.5 * (th1 - th0); - var t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); - var x1 = cx + Math.cos(th0) - t * Math.sin(th0); - var y1 = cy + Math.sin(th0) + t * Math.cos(th0); - var x3 = cx + Math.cos(th1); - var y3 = cy + Math.sin(th1); - var x2 = x3 + t * Math.sin(th1); - var y2 = y3 - t * Math.cos(th1); - return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; -}; - -class SVGPath { - static apply(doc, path) { - var commands = parse(path); - apply(commands, doc); - } - -} - -var { - number: number$1 -} = PDFObject; // This constant is used to approximate a symmetrical arc using a cubic -// Bezier curve. - -var KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); -var VectorMixin = { - initVector() { - this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix - - return this._ctmStack = []; - }, - - save() { - this._ctmStack.push(this._ctm.slice()); // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time? - - - return this.addContent('q'); - }, - - restore() { - this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; - return this.addContent('Q'); - }, - - closePath() { - return this.addContent('h'); - }, - - lineWidth(w) { - return this.addContent("".concat(number$1(w), " w")); - }, - - _CAP_STYLES: { - BUTT: 0, - ROUND: 1, - SQUARE: 2 - }, - - lineCap(c) { - if (typeof c === 'string') { - c = this._CAP_STYLES[c.toUpperCase()]; - } - - return this.addContent("".concat(c, " J")); - }, - - _JOIN_STYLES: { - MITER: 0, - ROUND: 1, - BEVEL: 2 - }, - - lineJoin(j) { - if (typeof j === 'string') { - j = this._JOIN_STYLES[j.toUpperCase()]; - } - - return this.addContent("".concat(j, " j")); - }, - - miterLimit(m) { - return this.addContent("".concat(number$1(m), " M")); - }, - - dash(length) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var originalLength = length; - - if (!Array.isArray(length)) { - length = [length, options.space || length]; - } - - var valid = length.every(x => Number.isFinite(x) && x > 0); - - if (!valid) { - throw new Error("dash(".concat(JSON.stringify(originalLength), ", ").concat(JSON.stringify(options), ") invalid, lengths must be numeric and greater than zero")); - } - - length = length.map(number$1).join(' '); - return this.addContent("[".concat(length, "] ").concat(number$1(options.phase || 0), " d")); - }, - - undash() { - return this.addContent('[] 0 d'); - }, - - moveTo(x, y) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " m")); - }, - - lineTo(x, y) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " l")); - }, - - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - return this.addContent("".concat(number$1(cp1x), " ").concat(number$1(cp1y), " ").concat(number$1(cp2x), " ").concat(number$1(cp2y), " ").concat(number$1(x), " ").concat(number$1(y), " c")); - }, - - quadraticCurveTo(cpx, cpy, x, y) { - return this.addContent("".concat(number$1(cpx), " ").concat(number$1(cpy), " ").concat(number$1(x), " ").concat(number$1(y), " v")); - }, - - rect(x, y, w, h) { - return this.addContent("".concat(number$1(x), " ").concat(number$1(y), " ").concat(number$1(w), " ").concat(number$1(h), " re")); - }, - - roundedRect(x, y, w, h, r) { - if (r == null) { - r = 0; - } - - r = Math.min(r, 0.5 * w, 0.5 * h); // amount to inset control points from corners (see `ellipse`) - - var c = r * (1.0 - KAPPA); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); - this.lineTo(x + w, y + h - r); - this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); - this.lineTo(x + r, y + h); - this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); - this.lineTo(x, y + r); - this.bezierCurveTo(x, y + c, x + c, y, x + r, y); - return this.closePath(); - }, - - ellipse(x, y, r1, r2) { - // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084 - if (r2 == null) { - r2 = r1; - } - - x -= r1; - y -= r2; - var ox = r1 * KAPPA; - var oy = r2 * KAPPA; - var xe = x + r1 * 2; - var ye = y + r2 * 2; - var xm = x + r1; - var ym = y + r2; - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - return this.closePath(); - }, - - circle(x, y, radius) { - return this.ellipse(x, y, radius); - }, - - arc(x, y, radius, startAngle, endAngle, anticlockwise) { - if (anticlockwise == null) { - anticlockwise = false; - } - - var TWO_PI = 2.0 * Math.PI; - var HALF_PI = 0.5 * Math.PI; - var deltaAng = endAngle - startAngle; - - if (Math.abs(deltaAng) > TWO_PI) { - // draw only full circle if more than that is specified - deltaAng = TWO_PI; - } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) { - // necessary to flip direction of rendering - var dir = anticlockwise ? -1 : 1; - deltaAng = dir * TWO_PI + deltaAng; - } - - var numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); - var segAng = deltaAng / numSegs; - var handleLen = segAng / HALF_PI * KAPPA * radius; - var curAng = startAngle; // component distances between anchor point and control point - - var deltaCx = -Math.sin(curAng) * handleLen; - var deltaCy = Math.cos(curAng) * handleLen; // anchor point - - var ax = x + Math.cos(curAng) * radius; - var ay = y + Math.sin(curAng) * radius; // calculate and render segments - - this.moveTo(ax, ay); - - for (var segIdx = 0; segIdx < numSegs; segIdx++) { - // starting control point - var cp1x = ax + deltaCx; - var cp1y = ay + deltaCy; // step angle - - curAng += segAng; // next anchor point - - ax = x + Math.cos(curAng) * radius; - ay = y + Math.sin(curAng) * radius; // next control point delta - - deltaCx = -Math.sin(curAng) * handleLen; - deltaCy = Math.cos(curAng) * handleLen; // ending control point - - var cp2x = ax - deltaCx; - var cp2y = ay - deltaCy; // render segment - - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); - } - - return this; - }, - - polygon() { - for (var _len = arguments.length, points = new Array(_len), _key = 0; _key < _len; _key++) { - points[_key] = arguments[_key]; - } - - this.moveTo(...(points.shift() || [])); - - for (var point of points) { - this.lineTo(...(point || [])); - } - - return this.closePath(); - }, - - path(path) { - SVGPath.apply(this, path); - return this; - }, - - _windingRule(rule) { - if (/even-?odd/.test(rule)) { - return '*'; - } - - return ''; - }, - - fill(color, rule) { - if (/(even-?odd)|(non-?zero)/.test(color)) { - rule = color; - color = null; - } - - if (color) { - this.fillColor(color); - } - - return this.addContent("f".concat(this._windingRule(rule))); - }, - - stroke(color) { - if (color) { - this.strokeColor(color); - } - - return this.addContent('S'); - }, - - fillAndStroke(fillColor, strokeColor, rule) { - if (strokeColor == null) { - strokeColor = fillColor; - } - - var isFillRule = /(even-?odd)|(non-?zero)/; - - if (isFillRule.test(fillColor)) { - rule = fillColor; - fillColor = null; - } - - if (isFillRule.test(strokeColor)) { - rule = strokeColor; - strokeColor = fillColor; - } - - if (fillColor) { - this.fillColor(fillColor); - this.strokeColor(strokeColor); - } - - return this.addContent("B".concat(this._windingRule(rule))); - }, - - clip(rule) { - return this.addContent("W".concat(this._windingRule(rule), " n")); - }, - - transform(m11, m12, m21, m22, dx, dy) { - // keep track of the current transformation matrix - if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) { - // Ignore identity transforms - return this; - } - - var m = this._ctm; - var [m0, m1, m2, m3, m4, m5] = m; - m[0] = m0 * m11 + m2 * m12; - m[1] = m1 * m11 + m3 * m12; - m[2] = m0 * m21 + m2 * m22; - m[3] = m1 * m21 + m3 * m22; - m[4] = m0 * dx + m2 * dy + m4; - m[5] = m1 * dx + m3 * dy + m5; - var values = [m11, m12, m21, m22, dx, dy].map(v => number$1(v)).join(' '); - return this.addContent("".concat(values, " cm")); - }, - - translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - }, - - rotate(angle) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var y; - var rad = angle * Math.PI / 180; - var cos = Math.cos(rad); - var sin = Math.sin(rad); - var x = y = 0; - - if (options.origin != null) { - [x, y] = options.origin; - var x1 = x * cos - y * sin; - var y1 = x * sin + y * cos; - x -= x1; - y -= y1; - } - - return this.transform(cos, sin, -sin, cos, x, y); - }, - - scale(xFactor, yFactor) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var y; - - if (yFactor == null) { - yFactor = xFactor; - } - - if (typeof yFactor === 'object') { - options = yFactor; - yFactor = xFactor; - } - - var x = y = 0; - - if (options.origin != null) { - [x, y] = options.origin; - x -= xFactor * x; - y -= yFactor * y; - } - - return this.transform(xFactor, 0, 0, yFactor, x, y); - } - -}; - -var WIN_ANSI_MAP = { - 402: 131, - 8211: 150, - 8212: 151, - 8216: 145, - 8217: 146, - 8218: 130, - 8220: 147, - 8221: 148, - 8222: 132, - 8224: 134, - 8225: 135, - 8226: 149, - 8230: 133, - 8364: 128, - 8240: 137, - 8249: 139, - 8250: 155, - 710: 136, - 8482: 153, - 338: 140, - 339: 156, - 732: 152, - 352: 138, - 353: 154, - 376: 159, - 381: 142, - 382: 158 -}; -var characters = ".notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n \nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n \nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n \ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n \nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n \nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n \nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n \nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis".split(/\s+/); - -class AFMFont { - static open(filename) { - return new AFMFont(fs.readFileSync(filename, 'utf8')); - } - - constructor(contents) { - this.contents = contents; - this.attributes = {}; - this.glyphWidths = {}; - this.boundingBoxes = {}; - this.kernPairs = {}; - this.parse(); // todo: remove charWidths since appears to not be used - - this.charWidths = new Array(256); - - for (var char = 0; char <= 255; char++) { - this.charWidths[char] = this.glyphWidths[characters[char]]; - } - - this.bbox = this.attributes['FontBBox'].split(/\s+/).map(e => +e); - this.ascender = +(this.attributes['Ascender'] || 0); - this.descender = +(this.attributes['Descender'] || 0); - this.xHeight = +(this.attributes['XHeight'] || 0); - this.capHeight = +(this.attributes['CapHeight'] || 0); - this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender); - } - - parse() { - var section = ''; - - for (var line of this.contents.split('\n')) { - var match; - var a; - - if (match = line.match(/^Start(\w+)/)) { - section = match[1]; - continue; - } else if (match = line.match(/^End(\w+)/)) { - section = ''; - continue; - } - - switch (section) { - case 'FontMetrics': - match = line.match(/(^\w+)\s+(.*)/); - var key = match[1]; - var value = match[2]; - - if (a = this.attributes[key]) { - if (!Array.isArray(a)) { - a = this.attributes[key] = [a]; - } - - a.push(value); - } else { - this.attributes[key] = value; - } - - break; - - case 'CharMetrics': - if (!/^CH?\s/.test(line)) { - continue; - } - - var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; - this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; - break; - - case 'KernPairs': - match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); - - if (match) { - this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); - } - - break; - } - } - } - - encodeText(text) { - var res = []; - - for (var i = 0, len = text.length; i < len; i++) { - var char = text.charCodeAt(i); - char = WIN_ANSI_MAP[char] || char; - res.push(char.toString(16)); - } - - return res; - } - - glyphsForString(string) { - var glyphs = []; - - for (var i = 0, len = string.length; i < len; i++) { - var charCode = string.charCodeAt(i); - glyphs.push(this.characterToGlyph(charCode)); - } - - return glyphs; - } - - characterToGlyph(character) { - return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; - } - - widthOfGlyph(glyph) { - return this.glyphWidths[glyph] || 0; - } - - getKernPair(left, right) { - return this.kernPairs[left + '\0' + right] || 0; - } - - advancesForGlyphs(glyphs) { - var advances = []; - - for (var index = 0; index < glyphs.length; index++) { - var left = glyphs[index]; - var right = glyphs[index + 1]; - advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); - } - - return advances; - } - -} - -class PDFFont { - constructor() {} - - encode() { - throw new Error('Must be implemented by subclasses'); - } - - widthOfString() { - throw new Error('Must be implemented by subclasses'); - } - - ref() { - return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); - } - - finalize() { - if (this.embedded || this.dictionary == null) { - return; - } - - this.embed(); - return this.embedded = true; - } - - embed() { - throw new Error('Must be implemented by subclasses'); - } - - lineHeight(size, includeGap) { - if (includeGap == null) { - includeGap = false; - } - - var gap = includeGap ? this.lineGap : 0; - return (this.ascender + gap - this.descender) / 1000 * size; - } - -} - -var STANDARD_FONTS = { - Courier() { - return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8'); - }, - - 'Courier-Bold'() { - return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8'); - }, - - 'Courier-Oblique'() { - return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8'); - }, - - 'Courier-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8'); - }, - - Helvetica() { - return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8'); - }, - - 'Helvetica-Bold'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8'); - }, - - 'Helvetica-Oblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8'); - }, - - 'Helvetica-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8'); - }, - - 'Times-Roman'() { - return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8'); - }, - - 'Times-Bold'() { - return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8'); - }, - - 'Times-Italic'() { - return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8'); - }, - - 'Times-BoldItalic'() { - return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8'); - }, - - Symbol() { - return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8'); - }, - - ZapfDingbats() { - return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8'); - } - -}; - -class StandardFont extends PDFFont { - constructor(document, name, id) { - super(); - this.document = document; - this.name = name; - this.id = id; - this.font = new AFMFont(STANDARD_FONTS[this.name]()); - ({ - ascender: this.ascender, - descender: this.descender, - bbox: this.bbox, - lineGap: this.lineGap, - xHeight: this.xHeight, - capHeight: this.capHeight - } = this.font); - } - - embed() { - this.dictionary.data = { - Type: 'Font', - BaseFont: this.name, - Subtype: 'Type1', - Encoding: 'WinAnsiEncoding' - }; - return this.dictionary.end(); - } - - encode(text) { - var encoded = this.font.encodeText(text); - var glyphs = this.font.glyphsForString("".concat(text)); - var advances = this.font.advancesForGlyphs(glyphs); - var positions = []; - - for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - positions.push({ - xAdvance: advances[i], - yAdvance: 0, - xOffset: 0, - yOffset: 0, - advanceWidth: this.font.widthOfGlyph(glyph) - }); - } - - return [encoded, positions]; - } - - widthOfString(string, size) { - var glyphs = this.font.glyphsForString("".concat(string)); - var advances = this.font.advancesForGlyphs(glyphs); - var width = 0; - - for (var advance of advances) { - width += advance; - } - - var scale = size / 1000; - return width * scale; - } - - static isStandardFont(name) { - return name in STANDARD_FONTS; - } - -} - -var toHex = function toHex(num) { - return "0000".concat(num.toString(16)).slice(-4); -}; - -class EmbeddedFont extends PDFFont { - constructor(document, font, id) { - super(); - this.document = document; - this.font = font; - this.id = id; - this.subset = this.font.createSubset(); - this.unicode = [[0]]; - this.widths = [this.font.getGlyph(0).advanceWidth]; - this.name = this.font.postscriptName; - this.scale = 1000 / this.font.unitsPerEm; - this.ascender = this.font.ascent * this.scale; - this.descender = this.font.descent * this.scale; - this.xHeight = this.font.xHeight * this.scale; - this.capHeight = this.font.capHeight * this.scale; - this.lineGap = this.font.lineGap * this.scale; - this.bbox = this.font.bbox; - - if (document.options.fontLayoutCache !== false) { - this.layoutCache = Object.create(null); - } - } - - layoutRun(text, features) { - var run = this.font.layout(text, features); // Normalize position values - - for (var i = 0; i < run.positions.length; i++) { - var position = run.positions[i]; - - for (var key in position) { - position[key] *= this.scale; - } - - position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; - } - - return run; - } - - layoutCached(text) { - if (!this.layoutCache) { - return this.layoutRun(text); - } - - var cached; - - if (cached = this.layoutCache[text]) { - return cached; - } - - var run = this.layoutRun(text); - this.layoutCache[text] = run; - return run; - } - - layout(text, features, onlyWidth) { - // Skip the cache if any user defined features are applied - if (features) { - return this.layoutRun(text, features); - } - - var glyphs = onlyWidth ? null : []; - var positions = onlyWidth ? null : []; - var advanceWidth = 0; // Split the string by words to increase cache efficiency. - // For this purpose, spaces and tabs are a good enough delimeter. - - var last = 0; - var index = 0; - - while (index <= text.length) { - var needle; - - if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) { - var run = this.layoutCached(text.slice(last, ++index)); - - if (!onlyWidth) { - glyphs = glyphs.concat(run.glyphs); - positions = positions.concat(run.positions); - } - - advanceWidth += run.advanceWidth; - last = index; - } else { - index++; - } - } - - return { - glyphs, - positions, - advanceWidth - }; - } - - encode(text, features) { - var { - glyphs, - positions - } = this.layout(text, features); - var res = []; - - for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - var gid = this.subset.includeGlyph(glyph.id); - res.push("0000".concat(gid.toString(16)).slice(-4)); - - if (this.widths[gid] == null) { - this.widths[gid] = glyph.advanceWidth * this.scale; - } - - if (this.unicode[gid] == null) { - this.unicode[gid] = glyph.codePoints; - } - } - - return [res, positions]; - } - - widthOfString(string, size, features) { - var width = this.layout(string, features, true).advanceWidth; - var scale = size / 1000; - return width * scale; - } - - embed() { - var isCFF = this.subset.cff != null; - var fontFile = this.document.ref(); - - if (isCFF) { - fontFile.data.Subtype = 'CIDFontType0C'; - } - - this.subset.encodeStream().on('data', data => fontFile.write(data)).on('end', () => fontFile.end()); - var familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8; - var flags = 0; - - if (this.font.post.isFixedPitch) { - flags |= 1 << 0; - } - - if (1 <= familyClass && familyClass <= 7) { - flags |= 1 << 1; - } - - flags |= 1 << 2; // assume the font uses non-latin characters - - if (familyClass === 10) { - flags |= 1 << 3; - } - - if (this.font.head.macStyle.italic) { - flags |= 1 << 6; - } // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z') - - - var tag = [1, 2, 3, 4, 5, 6].map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17)).join(''); - var name = tag + '+' + this.font.postscriptName; - var { - bbox - } = this.font; - var descriptor = this.document.ref({ - Type: 'FontDescriptor', - FontName: name, - Flags: flags, - FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], - ItalicAngle: this.font.italicAngle, - Ascent: this.ascender, - Descent: this.descender, - CapHeight: (this.font.capHeight || this.font.ascent) * this.scale, - XHeight: (this.font.xHeight || 0) * this.scale, - StemV: 0 - }); // not sure how to calculate this - - if (isCFF) { - descriptor.data.FontFile3 = fontFile; - } else { - descriptor.data.FontFile2 = fontFile; - } - - if (this.document.subset) { - var CIDSet = Buffer.from('FFFFFFFFC0', 'hex'); - var CIDSetRef = this.document.ref(); - CIDSetRef.write(CIDSet); - CIDSetRef.end(); - descriptor.data.CIDSet = CIDSetRef; - } - - descriptor.end(); - var descendantFontData = { - Type: 'Font', - Subtype: 'CIDFontType0', - BaseFont: name, - CIDSystemInfo: { - Registry: new String('Adobe'), - Ordering: new String('Identity'), - Supplement: 0 - }, - FontDescriptor: descriptor, - W: [0, this.widths] - }; - - if (!isCFF) { - descendantFontData.Subtype = 'CIDFontType2'; - descendantFontData.CIDToGIDMap = 'Identity'; - } - - var descendantFont = this.document.ref(descendantFontData); - descendantFont.end(); - this.dictionary.data = { - Type: 'Font', - Subtype: 'Type0', - BaseFont: name, - Encoding: 'Identity-H', - DescendantFonts: [descendantFont], - ToUnicode: this.toUnicodeCmap() - }; - return this.dictionary.end(); - } // Maps the glyph ids encoded in the PDF back to unicode strings - // Because of ligature substitutions and the like, there may be one or more - // unicode characters represented by each glyph. - - - toUnicodeCmap() { - var cmap = this.document.ref(); - var entries = []; - - for (var codePoints of this.unicode) { - var encoded = []; // encode codePoints to utf16 - - for (var value of codePoints) { - if (value > 0xffff) { - value -= 0x10000; - encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); - value = 0xdc00 | value & 0x3ff; - } - - encoded.push(toHex(value)); - } - - entries.push("<".concat(encoded.join(' '), ">")); - } - - var chunkSize = 256; - var chunks = Math.ceil(entries.length / chunkSize); - var ranges = []; - - for (var i = 0; i < chunks; i++) { - var start = i * chunkSize; - var end = Math.min((i + 1) * chunkSize, entries.length); - ranges.push("<".concat(toHex(start), "> <").concat(toHex(end - 1), "> [").concat(entries.slice(start, end).join(' '), "]")); - } - - cmap.end("/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n1 beginbfrange\n".concat(ranges.join('\n'), "\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend")); - return cmap; - } - -} - -class PDFFontFactory { - static open(document, src, family, id) { - var font; - - if (typeof src === 'string') { - if (StandardFont.isStandardFont(src)) { - return new StandardFont(document, src, id); - } - - src = fs.readFileSync(src); - } - - if (Buffer.isBuffer(src)) { - font = fontkit.create(src, family); - } else if (src instanceof Uint8Array) { - font = fontkit.create(Buffer.from(src), family); - } else if (src instanceof ArrayBuffer) { - font = fontkit.create(Buffer.from(new Uint8Array(src)), family); - } - - if (font == null) { - throw new Error('Not a supported font format or standard PDF font.'); - } - - return new EmbeddedFont(document, font, id); - } - -} - -var FontsMixin = { - initFonts() { - var defaultFont = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Helvetica'; - // Lookup table for embedded fonts - this._fontFamilies = {}; - this._fontCount = 0; // Font state - - this._fontSize = 12; - this._font = null; - this._registeredFonts = {}; // Set the default font - - if (defaultFont) { - this.font(defaultFont); - } - }, - - font(src, family, size) { - var cacheKey, font; - - if (typeof family === 'number') { - size = family; - family = null; - } // check registered fonts if src is a string - - - if (typeof src === 'string' && this._registeredFonts[src]) { - cacheKey = src; - ({ - src, - family - } = this._registeredFonts[src]); - } else { - cacheKey = family || src; - - if (typeof cacheKey !== 'string') { - cacheKey = null; - } - } - - if (size != null) { - this.fontSize(size); - } // fast path: check if the font is already in the PDF - - - if (font = this._fontFamilies[cacheKey]) { - this._font = font; - return this; - } // load the font - - - var id = "F".concat(++this._fontCount); - this._font = PDFFontFactory.open(this, src, family, id); // check for existing font familes with the same name already in the PDF - // useful if the font was passed as a buffer - - if (font = this._fontFamilies[this._font.name]) { - this._font = font; - return this; - } // save the font for reuse later - - - if (cacheKey) { - this._fontFamilies[cacheKey] = this._font; - } - - if (this._font.name) { - this._fontFamilies[this._font.name] = this._font; - } - - return this; - }, - - fontSize(_fontSize) { - this._fontSize = _fontSize; - return this; - }, - - currentLineHeight(includeGap) { - if (includeGap == null) { - includeGap = false; - } - - return this._font.lineHeight(this._fontSize, includeGap); - }, - - registerFont(name, src, family) { - this._registeredFonts[name] = { - src, - family - }; - return this; - } - -}; - -var SOFT_HYPHEN = '\u00AD'; -var HYPHEN = '-'; - -class LineWrapper extends EventEmitter { - constructor(document, options) { - super(); - this.document = document; - this.indent = options.indent || 0; - this.characterSpacing = options.characterSpacing || 0; - this.wordSpacing = options.wordSpacing === 0; - this.columns = options.columns || 1; - this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch - - this.lineWidth = (options.width - this.columnGap * (this.columns - 1)) / this.columns; - this.spaceLeft = this.lineWidth; - this.startX = this.document.x; - this.startY = this.document.y; - this.column = 1; - this.ellipsis = options.ellipsis; - this.continuedX = 0; - this.features = options.features; // calculate the maximum Y position the text can appear at - - if (options.height != null) { - this.height = options.height; - this.maxY = this.startY + options.height; - } else { - this.maxY = this.document.page.maxY(); - } // handle paragraph indents - - - this.on('firstLine', options => { - // if this is the first line of the text segment, and - // we're continuing where we left off, indent that much - // otherwise use the user specified indent option - var indent = this.continuedX || this.indent; - this.document.x += indent; - this.lineWidth -= indent; - return this.once('line', () => { - this.document.x -= indent; - this.lineWidth += indent; - - if (options.continued && !this.continuedX) { - this.continuedX = this.indent; - } - - if (!options.continued) { - return this.continuedX = 0; - } - }); - }); // handle left aligning last lines of paragraphs - - this.on('lastLine', options => { - var { - align - } = options; - - if (align === 'justify') { - options.align = 'left'; - } - - this.lastLine = true; - return this.once('line', () => { - this.document.y += options.paragraphGap || 0; - options.align = align; - return this.lastLine = false; - }); - }); - } - - wordWidth(word) { - return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing; - } - - canFit(word, w) { - if (word[word.length - 1] != SOFT_HYPHEN) { - return w <= this.spaceLeft; - } - - return w + this.wordWidth(HYPHEN) <= this.spaceLeft; - } - - eachWord(text, fn) { - // setup a unicode line breaker - var bk; - var breaker = new LineBreaker(text); - var last = null; - var wordWidths = Object.create(null); - - while (bk = breaker.nextBreak()) { - var shouldContinue; - var word = text.slice((last != null ? last.position : undefined) || 0, bk.position); - var w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); // if the word is longer than the whole line, chop it up - // TODO: break by grapheme clusters, not JS string characters - - if (w > this.lineWidth + this.continuedX) { - // make some fake break objects - var lbk = last; - var fbk = {}; - - while (word.length) { - // fit as much of the word as possible into the space we have - var l, mightGrow; - - if (w > this.spaceLeft) { - // start our check at the end of our available space - this method is faster than a loop of each character and it resolves - // an issue with long loops when processing massive words, such as a huge number of spaces - l = Math.ceil(this.spaceLeft / (w / word.length)); - w = this.wordWidth(word.slice(0, l)); - mightGrow = w <= this.spaceLeft && l < word.length; - } else { - l = word.length; - } - - var mustShrink = w > this.spaceLeft && l > 0; // shrink or grow word as necessary after our near-guess above - - while (mustShrink || mightGrow) { - if (mustShrink) { - w = this.wordWidth(word.slice(0, --l)); - mustShrink = w > this.spaceLeft && l > 0; - } else { - w = this.wordWidth(word.slice(0, ++l)); - mustShrink = w > this.spaceLeft && l > 0; - mightGrow = w <= this.spaceLeft && l < word.length; - } - } // check for the edge case where a single character cannot fit into a line. - - - if (l === 0 && this.spaceLeft === this.lineWidth) { - l = 1; - } // send a required break unless this is the last piece and a linebreak is not specified - - - fbk.required = bk.required || l < word.length; - shouldContinue = fn(word.slice(0, l), w, fbk, lbk); - lbk = { - required: false - }; // get the remaining piece of the word - - word = word.slice(l); - w = this.wordWidth(word); - - if (shouldContinue === false) { - break; - } - } - } else { - // otherwise just emit the break as it was given to us - shouldContinue = fn(word, w, bk, last); - } - - if (shouldContinue === false) { - break; - } - - last = bk; - } - } - - wrap(text, options) { - // override options from previous continued fragments - if (options.indent != null) { - this.indent = options.indent; - } - - if (options.characterSpacing != null) { - this.characterSpacing = options.characterSpacing; - } - - if (options.wordSpacing != null) { - this.wordSpacing = options.wordSpacing; - } - - if (options.ellipsis != null) { - this.ellipsis = options.ellipsis; - } // make sure we're actually on the page - // and that the first line of is never by - // itself at the bottom of a page (orphans) - - - var nextY = this.document.y + this.document.currentLineHeight(true); - - if (this.document.y > this.maxY || nextY > this.maxY) { - this.nextSection(); - } - - var buffer = ''; - var textWidth = 0; - var wc = 0; - var lc = 0; - var { - y - } = this.document; // used to reset Y pos if options.continued (below) - - var emitLine = () => { - options.textWidth = textWidth + this.wordSpacing * (wc - 1); - options.wordCount = wc; - options.lineWidth = this.lineWidth; - ({ - y - } = this.document); - this.emit('line', buffer, options, this); - return lc++; - }; - - this.emit('sectionStart', options, this); - this.eachWord(text, (word, w, bk, last) => { - if (last == null || last.required) { - this.emit('firstLine', options, this); - this.spaceLeft = this.lineWidth; - } - - if (this.canFit(word, w)) { - buffer += word; - textWidth += w; - wc++; - } - - if (bk.required || !this.canFit(word, w)) { - // if the user specified a max height and an ellipsis, and is about to pass the - // max height and max columns after the next line, append the ellipsis - var lh = this.document.currentLineHeight(true); - - if (this.height != null && this.ellipsis && this.document.y + lh * 2 > this.maxY && this.column >= this.columns) { - if (this.ellipsis === true) { - this.ellipsis = '…'; - } // map default ellipsis character - - - buffer = buffer.replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); // remove characters from the buffer until the ellipsis fits - // to avoid infinite loop need to stop while-loop if buffer is empty string - - while (buffer && textWidth > this.lineWidth) { - buffer = buffer.slice(0, -1).replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - } // need to add ellipsis only if there is enough space for it - - - if (textWidth <= this.lineWidth) { - buffer = buffer + this.ellipsis; - } - - textWidth = this.wordWidth(buffer); - } - - if (bk.required) { - if (w > this.spaceLeft) { - emitLine(); - buffer = word; - textWidth = w; - wc = 1; - } - - this.emit('lastLine', options, this); - } // Previous entry is a soft hyphen - add visible hyphen. - - - if (buffer[buffer.length - 1] == SOFT_HYPHEN) { - buffer = buffer.slice(0, -1) + HYPHEN; - this.spaceLeft -= this.wordWidth(HYPHEN); - } - - emitLine(); // if we've reached the edge of the page, - // continue on a new page or column - - if (this.document.y + lh > this.maxY) { - var shouldContinue = this.nextSection(); // stop if we reached the maximum height - - if (!shouldContinue) { - wc = 0; - buffer = ''; - return false; - } - } // reset the space left and buffer - - - if (bk.required) { - this.spaceLeft = this.lineWidth; - buffer = ''; - textWidth = 0; - return wc = 0; - } else { - // reset the space left and buffer - this.spaceLeft = this.lineWidth - w; - buffer = word; - textWidth = w; - return wc = 1; - } - } else { - return this.spaceLeft -= w; - } - }); - - if (wc > 0) { - this.emit('lastLine', options, this); - emitLine(); - } - - this.emit('sectionEnd', options, this); // if the wrap is set to be continued, save the X position - // to start the first line of the next segment at, and reset - // the y position - - if (options.continued === true) { - if (lc > 1) { - this.continuedX = 0; - } - - this.continuedX += options.textWidth || 0; - return this.document.y = y; - } else { - return this.document.x = this.startX; - } - } - - nextSection(options) { - this.emit('sectionEnd', options, this); - - if (++this.column > this.columns) { - // if a max height was specified by the user, we're done. - // otherwise, the default is to make a new page at the bottom. - if (this.height != null) { - return false; - } - - this.document.continueOnNewPage(); - this.column = 1; - this.startY = this.document.page.margins.top; - this.maxY = this.document.page.maxY(); - this.document.x = this.startX; - - if (this.document._fillColor) { - this.document.fillColor(...this.document._fillColor); - } - - this.emit('pageBreak', options, this); - } else { - this.document.x += this.lineWidth + this.columnGap; - this.document.y = this.startY; - this.emit('columnBreak', options, this); - } - - this.emit('sectionStart', options, this); - return true; - } - -} - -var { - number: number$2 -} = PDFObject; -var TextMixin = { - initText() { - this._line = this._line.bind(this); // Current coordinates - - this.x = 0; - this.y = 0; - return this._lineGap = 0; - }, - - lineGap(_lineGap) { - this._lineGap = _lineGap; - return this; - }, - - moveDown(lines) { - if (lines == null) { - lines = 1; - } - - this.y += this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - - moveUp(lines) { - if (lines == null) { - lines = 1; - } - - this.y -= this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - - _text(text, x, y, options, lineCallback) { - options = this._initOptions(x, y, options); // Convert text to a string - - text = text == null ? '' : "".concat(text); // if the wordSpacing option is specified, remove multiple consecutive spaces - - if (options.wordSpacing) { - text = text.replace(/\s{2,}/g, ' '); - } - - var addStructure = () => { - if (options.structParent) { - options.structParent.add(this.struct(options.structType || 'P', [this.markStructureContent(options.structType || 'P')])); - } - }; // word wrapping - - - if (options.width) { - var wrapper = this._wrapper; - - if (!wrapper) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', lineCallback); - wrapper.on('firstLine', addStructure); - } - - this._wrapper = options.continued ? wrapper : null; - this._textOptions = options.continued ? options : null; - wrapper.wrap(text, options); // render paragraphs as single lines - } else { - for (var line of text.split('\n')) { - addStructure(); - lineCallback(line, options); - } - } - - return this; - }, - - text(text, x, y, options) { - return this._text(text, x, y, options, this._line); - }, - - widthOfString(string) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1); - }, - - heightOfString(text, options) { - var { - x, - y - } = this; - options = this._initOptions(options); - options.height = Infinity; // don't break pages - - var lineGap = options.lineGap || this._lineGap || 0; - - this._text(text, this.x, this.y, options, () => { - return this.y += this.currentLineHeight(true) + lineGap; - }); - - var height = this.y - y; - this.x = x; - this.y = y; - return height; - }, - - list(list, x, y, options, wrapper) { - options = this._initOptions(x, y, options); - var listType = options.listType || 'bullet'; - var unit = Math.round(this._font.ascender / 1000 * this._fontSize); - var midLine = unit / 2; - var r = options.bulletRadius || unit / 3; - var indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2); - var itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2); - var level = 1; - var items = []; - var levels = []; - var numbers = []; - - var flatten = function flatten(list) { - var n = 1; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - - if (Array.isArray(item)) { - level++; - flatten(item); - level--; - } else { - items.push(item); - levels.push(level); - - if (listType !== 'bullet') { - numbers.push(n++); - } - } - } - }; - - flatten(list); - - var label = function label(n) { - switch (listType) { - case 'numbered': - return "".concat(n, "."); - - case 'lettered': - var letter = String.fromCharCode((n - 1) % 26 + 65); - var times = Math.floor((n - 1) / 26 + 1); - var text = Array(times + 1).join(letter); - return "".concat(text, "."); - } - }; - - var drawListItem = function drawListItem(listItem) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', this._line); - level = 1; - var i = 0; - wrapper.once('firstLine', () => { - var item, itemType, labelType, bodyType; - - if (options.structParent) { - if (options.structTypes) { - [itemType, labelType, bodyType] = options.structTypes; - } else { - [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody']; - } - } - - if (itemType) { - item = this.struct(itemType); - options.structParent.add(item); - } else if (options.structParent) { - item = options.structParent; - } - - var l; - - if ((l = levels[i++]) !== level) { - var diff = itemIndent * (l - level); - this.x += diff; - wrapper.lineWidth -= diff; - level = l; - } - - if (item && (labelType || bodyType)) { - item.add(this.struct(labelType || bodyType, [this.markStructureContent(labelType || bodyType)])); - } - - switch (listType) { - case 'bullet': - this.circle(this.x - indent + r, this.y + midLine, r); - this.fill(); - break; - - case 'numbered': - case 'lettered': - var text = label(numbers[i - 1]); - - this._fragment(text, this.x - indent, this.y, options); - - break; - } - - if (item && labelType && bodyType) { - item.add(this.struct(bodyType, [this.markStructureContent(bodyType)])); - } - - if (item && item !== options.structParent) { - item.end(); - } - }); - wrapper.on('sectionStart', () => { - var pos = indent + itemIndent * (level - 1); - this.x += pos; - return wrapper.lineWidth -= pos; - }); - wrapper.on('sectionEnd', () => { - var pos = indent + itemIndent * (level - 1); - this.x -= pos; - return wrapper.lineWidth += pos; - }); - wrapper.wrap(listItem, options); - }; - - for (var i = 0; i < items.length; i++) { - drawListItem.call(this, items[i]); - } - - return this; - }, - - _initOptions() { - var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var y = arguments.length > 1 ? arguments[1] : undefined; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (typeof x === 'object') { - options = x; - x = null; - } // clone options object - - - var result = Object.assign({}, options); // extend options with previous values for continued text - - if (this._textOptions) { - for (var key in this._textOptions) { - var val = this._textOptions[key]; - - if (key !== 'continued') { - if (result[key] === undefined) { - result[key] = val; - } - } - } - } // Update the current position - - - if (x != null) { - this.x = x; - } - - if (y != null) { - this.y = y; - } // wrap to margins if no x or y position passed - - - if (result.lineBreak !== false) { - if (result.width == null) { - result.width = this.page.width - this.x - this.page.margins.right; - } - - result.width = Math.max(result.width, 0); - } - - if (!result.columns) { - result.columns = 0; - } - - if (result.columnGap == null) { - result.columnGap = 18; - } // 1/4 inch - - - return result; - }, - - _line(text) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var wrapper = arguments.length > 2 ? arguments[2] : undefined; - - this._fragment(text, this.x, this.y, options); - - var lineGap = options.lineGap || this._lineGap || 0; - - if (!wrapper) { - return this.x += this.widthOfString(text); - } else { - return this.y += this.currentLineHeight(true) + lineGap; - } - }, - - _fragment(text, x, y, options) { - var dy, encoded, i, positions, textWidth, words; - text = "".concat(text).replace(/\n/g, ''); - - if (text.length === 0) { - return; - } // handle options - - - var align = options.align || 'left'; - var wordSpacing = options.wordSpacing || 0; - var characterSpacing = options.characterSpacing || 0; // text alignments - - if (options.width) { - switch (align) { - case 'right': - textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); - x += options.lineWidth - textWidth; - break; - - case 'center': - x += options.lineWidth / 2 - options.textWidth / 2; - break; - - case 'justify': - // calculate the word spacing value - words = text.trim().split(/\s+/); - textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - var spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - break; - } - } // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling - - - if (typeof options.baseline === 'number') { - dy = -options.baseline; - } else { - switch (options.baseline) { - case 'svg-middle': - dy = 0.5 * this._font.xHeight; - break; - - case 'middle': - case 'svg-central': - dy = 0.5 * (this._font.descender + this._font.ascender); - break; - - case 'bottom': - case 'ideographic': - dy = this._font.descender; - break; - - case 'alphabetic': - dy = 0; - break; - - case 'mathematical': - dy = 0.5 * this._font.ascender; - break; - - case 'hanging': - dy = 0.8 * this._font.ascender; - break; - - case 'top': - dy = this._font.ascender; - break; - - default: - dy = this._font.ascender; - } - - dy = dy / 1000 * this._fontSize; - } // calculate the actual rendered width of the string after word and character spacing - - - var renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); // create link annotations if the link option is given - - if (options.link != null) { - this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); - } - - if (options.goTo != null) { - this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo); - } - - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } // create underline - - - if (options.underline) { - this.save(); - - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - - var lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - var lineY = y + this.currentLineHeight() - lineWidth; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } // create strikethrough line - - - if (options.strike) { - this.save(); - - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - - var _lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - - this.lineWidth(_lineWidth); - - var _lineY = y + this.currentLineHeight() / 2; - - this.moveTo(x, _lineY); - this.lineTo(x + renderedWidth, _lineY); - this.stroke(); - this.restore(); - } - - this.save(); // oblique (angle in degrees or boolean) - - if (options.oblique) { - var skew; - - if (typeof options.oblique === 'number') { - skew = -Math.tan(options.oblique * Math.PI / 180); - } else { - skew = -0.25; - } - - this.transform(1, 0, 0, 1, x, y); - this.transform(1, 0, skew, 1, -skew * dy, 0); - this.transform(1, 0, 0, 1, -x, -y); - } // flip coordinate system - - - this.transform(1, 0, 0, -1, 0, this.page.height); - y = this.page.height - y - dy; // add current font to page if necessary - - if (this.page.fonts[this._font.id] == null) { - this.page.fonts[this._font.id] = this._font.ref(); - } // begin the text object - - - this.addContent('BT'); // text position - - this.addContent("1 0 0 1 ".concat(number$2(x), " ").concat(number$2(y), " Tm")); // font and font size - - this.addContent("/".concat(this._font.id, " ").concat(number$2(this._fontSize), " Tf")); // rendering mode - - var mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; - - if (mode) { - this.addContent("".concat(mode, " Tr")); - } // Character spacing - - - if (characterSpacing) { - this.addContent("".concat(number$2(characterSpacing), " Tc")); - } // Add the actual text - // If we have a word spacing value, we need to encode each word separately - // since the normal Tw operator only works on character code 32, which isn't - // used for embedded fonts. - - - if (wordSpacing) { - words = text.trim().split(/\s+/); - wordSpacing += this.widthOfString(' ') + characterSpacing; - wordSpacing *= 1000 / this._fontSize; - encoded = []; - positions = []; - - for (var word of words) { - var [encodedWord, positionsWord] = this._font.encode(word, options.features); - - encoded = encoded.concat(encodedWord); - positions = positions.concat(positionsWord); // add the word spacing to the end of the word - // clone object because of cache - - var space = {}; - var object = positions[positions.length - 1]; - - for (var key in object) { - var val = object[key]; - space[key] = val; - } - - space.xAdvance += wordSpacing; - positions[positions.length - 1] = space; - } - } else { - [encoded, positions] = this._font.encode(text, options.features); - } - - var scale = this._fontSize / 1000; - var commands = []; - var last = 0; - var hadOffset = false; // Adds a segment of text to the TJ command buffer - - var addSegment = cur => { - if (last < cur) { - var hex = encoded.slice(last, cur).join(''); - var advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; - commands.push("<".concat(hex, "> ").concat(number$2(-advance))); - } - - return last = cur; - }; // Flushes the current TJ commands to the output stream - - - var flush = i => { - addSegment(i); - - if (commands.length > 0) { - this.addContent("[".concat(commands.join(' '), "] TJ")); - return commands.length = 0; - } - }; - - for (i = 0; i < positions.length; i++) { - // If we have an x or y offset, we have to break out of the current TJ command - // so we can move the text position. - var pos = positions[i]; - - if (pos.xOffset || pos.yOffset) { - // Flush the current buffer - flush(i); // Move the text position and flush just the current character - - this.addContent("1 0 0 1 ".concat(number$2(x + pos.xOffset * scale), " ").concat(number$2(y + pos.yOffset * scale), " Tm")); - flush(i + 1); - hadOffset = true; - } else { - // If the last character had an offset, reset the text position - if (hadOffset) { - this.addContent("1 0 0 1 ".concat(number$2(x), " ").concat(number$2(y), " Tm")); - hadOffset = false; - } // Group segments that don't have any advance adjustments - - - if (pos.xAdvance - pos.advanceWidth !== 0) { - addSegment(i + 1); - } - } - - x += pos.xAdvance * scale; - } // Flush any remaining commands - - - flush(i); // end the text object - - this.addContent('ET'); // restore flipped coordinate system - - return this.restore(); - } - -}; - -var MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf]; -var COLOR_SPACE_MAP = { - 1: 'DeviceGray', - 3: 'DeviceRGB', - 4: 'DeviceCMYK' -}; - -class JPEG { - constructor(data, label) { - var marker; - this.data = data; - this.label = label; - - if (this.data.readUInt16BE(0) !== 0xffd8) { - throw 'SOI not found in JPEG'; - } // Parse the EXIF orientation - - - this.orientation = exif.fromBuffer(this.data).Orientation || 1; - var pos = 2; - - while (pos < this.data.length) { - marker = this.data.readUInt16BE(pos); - pos += 2; - - if (MARKERS.includes(marker)) { - break; - } - - pos += this.data.readUInt16BE(pos); - } - - if (!MARKERS.includes(marker)) { - throw 'Invalid JPEG.'; - } - - pos += 2; - this.bits = this.data[pos++]; - this.height = this.data.readUInt16BE(pos); - pos += 2; - this.width = this.data.readUInt16BE(pos); - pos += 2; - var channels = this.data[pos++]; - this.colorSpace = COLOR_SPACE_MAP[channels]; - this.obj = null; - } - - embed(document) { - if (this.obj) { - return; - } - - this.obj = document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: this.bits, - Width: this.width, - Height: this.height, - ColorSpace: this.colorSpace, - Filter: 'DCTDecode' - }); // add extra decode params for CMYK images. By swapping the - // min and max values from the default, we invert the colors. See - // section 4.8.4 of the spec. - - if (this.colorSpace === 'DeviceCMYK') { - this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; - } - - this.obj.end(this.data); // free memory - - return this.data = null; - } - -} - -class PNGImage { - constructor(data, label) { - this.label = label; - this.image = new PNG(data); - this.width = this.image.width; - this.height = this.image.height; - this.imgData = this.image.imgData; - this.obj = null; - } - - embed(document) { - var dataDecoded = false; - this.document = document; - - if (this.obj) { - return; - } - - var hasAlphaChannel = this.image.hasAlphaChannel; - var isInterlaced = this.image.interlaceMethod === 1; - this.obj = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits, - Width: this.width, - Height: this.height, - Filter: 'FlateDecode' - }); - - if (!hasAlphaChannel) { - var params = this.document.ref({ - Predictor: isInterlaced ? 1 : 15, - Colors: this.image.colors, - BitsPerComponent: this.image.bits, - Columns: this.width - }); - this.obj.data['DecodeParms'] = params; - params.end(); - } - - if (this.image.palette.length === 0) { - this.obj.data['ColorSpace'] = this.image.colorSpace; - } else { - // embed the color palette in the PDF as an object stream - var palette = this.document.ref(); - palette.end(Buffer.from(this.image.palette)); // build the color space array for the image - - this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette]; - } // For PNG color types 0, 2 and 3, the transparency data is stored in - // a dedicated PNG chunk. - - - if (this.image.transparency.grayscale != null) { - // Use Color Key Masking (spec section 4.8.5) - // An array with N elements, where N is two times the number of color components. - var val = this.image.transparency.grayscale; - this.obj.data['Mask'] = [val, val]; - } else if (this.image.transparency.rgb) { - // Use Color Key Masking (spec section 4.8.5) - // An array with N elements, where N is two times the number of color components. - var { - rgb - } = this.image.transparency; - var mask = []; - - for (var x of rgb) { - mask.push(x, x); - } - - this.obj.data['Mask'] = mask; - } else if (this.image.transparency.indexed) { - // Create a transparency SMask for the image based on the data - // in the PLTE and tRNS sections. See below for details on SMasks. - dataDecoded = true; - return this.loadIndexedAlphaChannel(); - } else if (hasAlphaChannel) { - // For PNG color types 4 and 6, the transparency data is stored as a alpha - // channel mixed in with the main image data. Separate this data out into an - // SMask object and store it separately in the PDF. - dataDecoded = true; - return this.splitAlphaChannel(); - } - - if (isInterlaced && !dataDecoded) { - return this.decodeData(); - } - - this.finalize(); - } - - finalize() { - if (this.alphaChannel) { - var sMask = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - Height: this.height, - Width: this.width, - BitsPerComponent: 8, - Filter: 'FlateDecode', - ColorSpace: 'DeviceGray', - Decode: [0, 1] - }); - sMask.end(this.alphaChannel); - this.obj.data['SMask'] = sMask; - } // add the actual image data - - - this.obj.end(this.imgData); // free memory - - this.image = null; - return this.imgData = null; - } - - splitAlphaChannel() { - return this.image.decodePixels(pixels => { - var a, p; - var colorCount = this.image.colors; - var pixelCount = this.width * this.height; - var imgData = Buffer.alloc(pixelCount * colorCount); - var alphaChannel = Buffer.alloc(pixelCount); - var i = p = a = 0; - var len = pixels.length; // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first) - - var skipByteCount = this.image.bits === 16 ? 1 : 0; - - while (i < len) { - for (var colorIndex = 0; colorIndex < colorCount; colorIndex++) { - imgData[p++] = pixels[i++]; - i += skipByteCount; - } - - alphaChannel[a++] = pixels[i++]; - i += skipByteCount; - } - - this.imgData = zlib.deflateSync(imgData); - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - - loadIndexedAlphaChannel() { - var transparency = this.image.transparency.indexed; - return this.image.decodePixels(pixels => { - var alphaChannel = Buffer.alloc(this.width * this.height); - var i = 0; - - for (var j = 0, end = pixels.length; j < end; j++) { - alphaChannel[i++] = transparency[pixels[j]]; - } - - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - - decodeData() { - this.image.decodePixels(pixels => { - this.imgData = zlib.deflateSync(pixels); - this.finalize(); - }); - } - -} - -/* -PDFImage - embeds images in PDF documents -By Devon Govett -*/ - -class PDFImage { - static open(src, label) { - var data; - - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - var match; - - if (match = /^data:.+?;base64,(.*)$/.exec(src)) { - data = Buffer.from(match[1], 'base64'); - } else { - data = fs.readFileSync(src); - - if (!data) { - return; - } - } - } - - if (data[0] === 0xff && data[1] === 0xd8) { - return new JPEG(data, label); - } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { - return new PNGImage(data, label); - } else { - throw new Error('Unknown image format.'); - } - } - -} - -var ImagesMixin = { - initImages() { - this._imageRegistry = {}; - return this._imageCount = 0; - }, - - image(src, x, y) { - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - var bh, bp, bw, image, ip, left, left1, rotateAngle, originX, originY; - - if (typeof x === 'object') { - options = x; - x = null; - } // Ignore orientation based on document options or image options - - - var ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation; - x = (left = x != null ? x : options.x) != null ? left : this.x; - y = (left1 = y != null ? y : options.y) != null ? left1 : this.y; - - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - - if (!image) { - if (src.width && src.height) { - image = src; - } else { - image = this.openImage(src); - } - } - - if (!image.obj) { - image.embed(this); - } - - if (this.page.xobjects[image.label] == null) { - this.page.xobjects[image.label] = image.obj; - } - - var { - width, - height - } = image; // If EXIF orientation calls for it, swap width and height - - if (!ignoreOrientation && image.orientation > 4) { - [width, height] = [height, width]; - } - - var w = options.width || width; - var h = options.height || height; - - if (options.width && !options.height) { - var wp = w / width; - w = width * wp; - h = height * wp; - } else if (options.height && !options.width) { - var hp = h / height; - w = width * hp; - h = height * hp; - } else if (options.scale) { - w = width * options.scale; - h = height * options.scale; - } else if (options.fit) { - [bw, bh] = options.fit; - bp = bw / bh; - ip = width / height; - - if (ip > bp) { - w = bw; - h = bw / ip; - } else { - h = bh; - w = bh * ip; - } - } else if (options.cover) { - [bw, bh] = options.cover; - bp = bw / bh; - ip = width / height; - - if (ip > bp) { - h = bh; - w = bh * ip; - } else { - w = bw; - h = bw / ip; - } - } - - if (options.fit || options.cover) { - if (options.align === 'center') { - x = x + bw / 2 - w / 2; - } else if (options.align === 'right') { - x = x + bw - w; - } - - if (options.valign === 'center') { - y = y + bh / 2 - h / 2; - } else if (options.valign === 'bottom') { - y = y + bh - h; - } - } - - if (!ignoreOrientation) { - switch (image.orientation) { - // No orientation (need to flip image, though, because of the default transform matrix on the document) - default: - case 1: - h = -h; - y -= h; - rotateAngle = 0; - break; - // Flip Horizontal - - case 2: - w = -w; - h = -h; - x -= w; - y -= h; - rotateAngle = 0; - break; - // Rotate 180 degrees - - case 3: - originX = x; - originY = y; - h = -h; - x -= w; - rotateAngle = 180; - break; - // Flip vertical - - case 4: - // Do nothing, image will be flipped - break; - // Flip horizontally and rotate 270 degrees CW - - case 5: - originX = x; - originY = y; - [w, h] = [h, w]; - y -= h; - rotateAngle = 90; - break; - // Rotate 90 degrees CW - - case 6: - originX = x; - originY = y; - [w, h] = [h, w]; - h = -h; - rotateAngle = 90; - break; - // Flip horizontally and rotate 90 degrees CW - - case 7: - originX = x; - originY = y; - [w, h] = [h, w]; - h = -h; - w = -w; - x -= w; - rotateAngle = 90; - break; - // Rotate 270 degrees CW - - case 8: - originX = x; - originY = y; - [w, h] = [h, w]; - h = -h; - x -= w; - y -= h; - rotateAngle = -90; - break; - } - } else { - h = -h; - y -= h; - rotateAngle = 0; - } // create link annotations if the link option is given - - - if (options.link != null) { - this.link(x, y, w, h, options.link); - } - - if (options.goTo != null) { - this.goTo(x, y, w, h, options.goTo); - } - - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } // Set the current y position to below the image if it is in the document flow - - - if (this.y === y) { - this.y += h; - } - - this.save(); - - if (rotateAngle) { - this.rotate(rotateAngle, { - origin: [originX, originY] - }); - } - - this.transform(w, 0, 0, h, x, y); - this.addContent("/".concat(image.label, " Do")); - this.restore(); - return this; - }, - - openImage(src) { - var image; - - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - - if (!image) { - image = PDFImage.open(src, "I".concat(++this._imageCount)); - - if (typeof src === 'string') { - this._imageRegistry[src] = image; - } - } - - return image; - } - -}; - -var AnnotationsMixin = { - annotate(x, y, w, h, options) { - options.Type = 'Annot'; - options.Rect = this._convertRect(x, y, w, h); - options.Border = [0, 0, 0]; - - if (options.Subtype === 'Link' && typeof options.F === 'undefined') { - options.F = 1 << 2; // Print Annotation Flag - } - - if (options.Subtype !== 'Link') { - if (options.C == null) { - options.C = this._normalizeColor(options.color || [0, 0, 0]); - } - } // convert colors - - - delete options.color; - - if (typeof options.Dest === 'string') { - options.Dest = new String(options.Dest); - } // Capitalize keys - - - for (var key in options) { - var val = options[key]; - options[key[0].toUpperCase() + key.slice(1)] = val; - } - - var ref = this.ref(options); - this.page.annotations.push(ref); - ref.end(); - return this; - }, - - note(x, y, w, h, contents) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Text'; - options.Contents = new String(contents); - options.Name = 'Comment'; - - if (options.color == null) { - options.color = [243, 223, 92]; - } - - return this.annotate(x, y, w, h, options); - }, - - goTo(x, y, w, h, name) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - options.A = this.ref({ - S: 'GoTo', - D: new String(name) - }); - options.A.end(); - return this.annotate(x, y, w, h, options); - }, - - link(x, y, w, h, url) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'Link'; - - if (typeof url === 'number') { - // Link to a page in the document (the page must already exist) - var pages = this._root.data.Pages.data; - - if (url >= 0 && url < pages.Kids.length) { - options.A = this.ref({ - S: 'GoTo', - D: [pages.Kids[url], 'XYZ', null, null, null] - }); - options.A.end(); - } else { - throw new Error("The document has no page ".concat(url)); - } - } else { - // Link to an external url - options.A = this.ref({ - S: 'URI', - URI: new String(url) - }); - options.A.end(); - } - - return this.annotate(x, y, w, h, options); - }, - - _markup(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - - var [x1, y1, x2, y2] = this._convertRect(x, y, w, h); - - options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - - highlight(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Highlight'; - - if (options.color == null) { - options.color = [241, 238, 148]; - } - - return this._markup(x, y, w, h, options); - }, - - underline(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Underline'; - return this._markup(x, y, w, h, options); - }, - - strike(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'StrikeOut'; - return this._markup(x, y, w, h, options); - }, - - lineAnnotation(x1, y1, x2, y2) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Line'; - options.Contents = new String(); - options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; - return this.annotate(x1, y1, x2, y2, options); - }, - - rectAnnotation(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Square'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - - ellipseAnnotation(x, y, w, h) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - options.Subtype = 'Circle'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - - textAnnotation(x, y, w, h, text) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - options.Subtype = 'FreeText'; - options.Contents = new String(text); - options.DA = new String(); - return this.annotate(x, y, w, h, options); - }, - - fileAnnotation(x, y, w, h) { - var file = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - // create hidden file - var filespec = this.file(file.src, Object.assign({ - hidden: true - }, file)); - options.Subtype = 'FileAttachment'; - options.FS = filespec; // add description from filespec unless description (Contents) has already been set - - if (options.Contents) { - options.Contents = new String(options.Contents); - } else if (filespec.data.Desc) { - options.Contents = filespec.data.Desc; - } - - return this.annotate(x, y, w, h, options); - }, - - _convertRect(x1, y1, w, h) { - // flip y1 and y2 - var y2 = y1; - y1 += h; // make x2 - - var x2 = x1 + w; // apply current transformation matrix to points - - var [m0, m1, m2, m3, m4, m5] = this._ctm; - x1 = m0 * x1 + m2 * y1 + m4; - y1 = m1 * x1 + m3 * y1 + m5; - x2 = m0 * x2 + m2 * y2 + m4; - y2 = m1 * x2 + m3 * y2 + m5; - return [x1, y1, x2, y2]; - } - -}; - -class PDFOutline { - constructor(document, parent, title, dest) { - var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { - expanded: false - }; - this.document = document; - this.options = options; - this.outlineData = {}; - - if (dest !== null) { - this.outlineData['Dest'] = [dest.dictionary, 'Fit']; - } - - if (parent !== null) { - this.outlineData['Parent'] = parent; - } - - if (title !== null) { - this.outlineData['Title'] = new String(title); - } - - this.dictionary = this.document.ref(this.outlineData); - this.children = []; - } - - addItem(title) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { - expanded: false - }; - var result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options); - this.children.push(result); - return result; - } - - endOutline() { - if (this.children.length > 0) { - if (this.options.expanded) { - this.outlineData.Count = this.children.length; - } - - var first = this.children[0], - last = this.children[this.children.length - 1]; - this.outlineData.First = first.dictionary; - this.outlineData.Last = last.dictionary; - - for (var i = 0, len = this.children.length; i < len; i++) { - var child = this.children[i]; - - if (i > 0) { - child.outlineData.Prev = this.children[i - 1].dictionary; - } - - if (i < this.children.length - 1) { - child.outlineData.Next = this.children[i + 1].dictionary; - } - - child.endOutline(); - } - } - - return this.dictionary.end(); - } - -} - -var OutlineMixin = { - initOutline() { - return this.outline = new PDFOutline(this, null, null, null); - }, - - endOutline() { - this.outline.endOutline(); - - if (this.outline.children.length > 0) { - this._root.data.Outlines = this.outline.dictionary; - return this._root.data.PageMode = 'UseOutlines'; - } - } - -}; - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -/* -PDFStructureContent - a reference to a marked structure content -By Ben Schmidt -*/ -class PDFStructureContent { - constructor(pageRef, mcid) { - this.refs = [{ - pageRef, - mcid - }]; - } - - push(structContent) { - structContent.refs.forEach(ref => this.refs.push(ref)); - } - -} - -/* -PDFStructureElement - represents an element in the PDF logical structure tree -By Ben Schmidt -*/ - -class PDFStructureElement { - constructor(document, type) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var children = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; - this.document = document; - this._attached = false; - this._ended = false; - this._flushed = false; - this.dictionary = document.ref({ - // Type: "StructElem", - S: type - }); - var data = this.dictionary.data; - - if (Array.isArray(options) || this._isValidChild(options)) { - children = options; - options = {}; - } - - if (typeof options.title !== 'undefined') { - data.T = new String(options.title); - } - - if (typeof options.lang !== 'undefined') { - data.Lang = new String(options.lang); - } - - if (typeof options.alt !== 'undefined') { - data.Alt = new String(options.alt); - } - - if (typeof options.expanded !== 'undefined') { - data.E = new String(options.expanded); - } - - if (typeof options.actual !== 'undefined') { - data.ActualText = new String(options.actual); - } - - this._children = []; - - if (children) { - if (!Array.isArray(children)) { - children = [children]; - } - - children.forEach(child => this.add(child)); - this.end(); - } - } - - add(child) { - if (this._ended) { - throw new Error("Cannot add child to already-ended structure element"); - } - - if (!this._isValidChild(child)) { - throw new Error("Invalid structure element child"); - } - - if (child instanceof PDFStructureElement) { - child.setParent(this.dictionary); - - if (this._attached) { - child.setAttached(); - } - } - - if (child instanceof PDFStructureContent) { - this._addContentToParentTree(child); - } - - if (typeof child === 'function' && this._attached) { - // _contentForClosure() adds the content to the parent tree - child = this._contentForClosure(child); - } - - this._children.push(child); - - return this; - } - - _addContentToParentTree(content) { - content.refs.forEach((_ref) => { - var { - pageRef, - mcid - } = _ref; - var pageStructParents = this.document.getStructParentTree().get(pageRef.data.StructParents); - pageStructParents[mcid] = this.dictionary; - }); - } - - setParent(parentRef) { - if (this.dictionary.data.P) { - throw new Error("Structure element added to more than one parent"); - } - - this.dictionary.data.P = parentRef; - - this._flush(); - } - - setAttached() { - if (this._attached) { - return; - } - - this._children.forEach((child, index) => { - if (child instanceof PDFStructureElement) { - child.setAttached(); - } - - if (typeof child === 'function') { - this._children[index] = this._contentForClosure(child); - } - }); - - this._attached = true; - - this._flush(); - } - - end() { - if (this._ended) { - return; - } - - this._children.filter(child => child instanceof PDFStructureElement).forEach(child => child.end()); - - this._ended = true; - - this._flush(); - } - - _isValidChild(child) { - return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function'; - } - - _contentForClosure(closure) { - var content = this.document.markStructureContent(this.dictionary.data.S); - closure(); - this.document.endMarkedContent(); - - this._addContentToParentTree(content); - - return content; - } - - _isFlushable() { - if (!this.dictionary.data.P || !this._ended) { - return false; - } - - return this._children.every(child => { - if (typeof child === 'function') { - return false; - } - - if (child instanceof PDFStructureElement) { - return child._isFlushable(); - } - - return true; - }); - } - - _flush() { - if (this._flushed || !this._isFlushable()) { - return; - } - - this.dictionary.data.K = []; - - this._children.forEach(child => this._flushChild(child)); - - this.dictionary.end(); // free memory used by children; the dictionary itself may still be - // referenced by a parent structure element or root, but we can - // at least trim the tree here - - this._children = []; - this.dictionary.data.K = null; - this._flushed = true; - } - - _flushChild(child) { - if (child instanceof PDFStructureElement) { - this.dictionary.data.K.push(child.dictionary); - } - - if (child instanceof PDFStructureContent) { - child.refs.forEach((_ref2) => { - var { - pageRef, - mcid - } = _ref2; - - if (!this.dictionary.data.Pg) { - this.dictionary.data.Pg = pageRef; - } - - if (this.dictionary.data.Pg === pageRef) { - this.dictionary.data.K.push(mcid); - } else { - this.dictionary.data.K.push({ - Type: "MCR", - Pg: pageRef, - MCID: mcid - }); - } - }); - } - } - -} - -/* -PDFNumberTree - represents a number tree object -*/ - -class PDFNumberTree extends PDFTree { - _compareKeys(a, b) { - return parseInt(a) - parseInt(b); - } - - _keysName() { - return "Nums"; - } - - _dataForKey(k) { - return parseInt(k); - } - -} - -var MarkingsMixin = { - initMarkings(options) { - this.structChildren = []; - - if (options.tagged) { - this.getMarkInfoDictionary().data.Marked = true; - this.getStructTreeRoot(); - } - }, - - markContent(tag) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - if (tag === 'Artifact' || options && options.mcid) { - var toClose = 0; - this.page.markings.forEach(marking => { - if (toClose || marking.structContent || marking.tag === 'Artifact') { - toClose++; - } - }); - - while (toClose--) { - this.endMarkedContent(); - } - } - - if (!options) { - this.page.markings.push({ - tag - }); - this.addContent("/".concat(tag, " BMC")); - return this; - } - - this.page.markings.push({ - tag, - options - }); - var dictionary = {}; - - if (typeof options.mcid !== 'undefined') { - dictionary.MCID = options.mcid; - } - - if (tag === 'Artifact') { - if (typeof options.type === 'string') { - dictionary.Type = options.type; - } - - if (Array.isArray(options.bbox)) { - dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]]; - } - - if (Array.isArray(options.attached) && options.attached.every(val => typeof val === 'string')) { - dictionary.Attached = options.attached; - } - } - - if (tag === 'Span') { - if (options.lang) { - dictionary.Lang = new String(options.lang); - } - - if (options.alt) { - dictionary.Alt = new String(options.alt); - } - - if (options.expanded) { - dictionary.E = new String(options.expanded); - } - - if (options.actual) { - dictionary.ActualText = new String(options.actual); - } - } - - this.addContent("/".concat(tag, " ").concat(PDFObject.convert(dictionary), " BDC")); - return this; - }, - - markStructureContent(tag) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey); - var mcid = pageStructParents.length; - pageStructParents.push(null); - this.markContent(tag, _objectSpread2(_objectSpread2({}, options), {}, { - mcid - })); - var structContent = new PDFStructureContent(this.page.dictionary, mcid); - this.page.markings.slice(-1)[0].structContent = structContent; - return structContent; - }, - - endMarkedContent() { - this.page.markings.pop(); - this.addContent('EMC'); - return this; - }, - - struct(type) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - return new PDFStructureElement(this, type, options, children); - }, - - addStructure(structElem) { - var structTreeRoot = this.getStructTreeRoot(); - structElem.setParent(structTreeRoot); - structElem.setAttached(); - this.structChildren.push(structElem); - - if (!structTreeRoot.data.K) { - structTreeRoot.data.K = []; - } - - structTreeRoot.data.K.push(structElem.dictionary); - return this; - }, - - initPageMarkings(pageMarkings) { - pageMarkings.forEach(marking => { - if (marking.structContent) { - var structContent = marking.structContent; - var newStructContent = this.markStructureContent(marking.tag, marking.options); - structContent.push(newStructContent); - this.page.markings.slice(-1)[0].structContent = structContent; - } else { - this.markContent(marking.tag, marking.options); - } - }); - }, - - endPageMarkings(page) { - var pageMarkings = page.markings; - pageMarkings.forEach(() => page.write('EMC')); - page.markings = []; - return pageMarkings; - }, - - getMarkInfoDictionary() { - if (!this._root.data.MarkInfo) { - this._root.data.MarkInfo = this.ref({}); - } - - return this._root.data.MarkInfo; - }, - - getStructTreeRoot() { - if (!this._root.data.StructTreeRoot) { - this._root.data.StructTreeRoot = this.ref({ - Type: 'StructTreeRoot', - ParentTree: new PDFNumberTree(), - ParentTreeNextKey: 0 - }); - } - - return this._root.data.StructTreeRoot; - }, - - getStructParentTree() { - return this.getStructTreeRoot().data.ParentTree; - }, - - createStructParentTreeNextKey() { - // initialise the MarkInfo dictionary - this.getMarkInfoDictionary(); - var structTreeRoot = this.getStructTreeRoot(); - var key = structTreeRoot.data.ParentTreeNextKey++; - structTreeRoot.data.ParentTree.add(key, []); - return key; - }, - - endMarkings() { - var structTreeRoot = this._root.data.StructTreeRoot; - - if (structTreeRoot) { - structTreeRoot.end(); - this.structChildren.forEach(structElem => structElem.end()); - } - - if (this._root.data.MarkInfo) { - this._root.data.MarkInfo.end(); - } - } - -}; - -var FIELD_FLAGS = { - readOnly: 1, - required: 2, - noExport: 4, - multiline: 0x1000, - password: 0x2000, - toggleToOffButton: 0x4000, - radioButton: 0x8000, - pushButton: 0x10000, - combo: 0x20000, - edit: 0x40000, - sort: 0x80000, - multiSelect: 0x200000, - noSpell: 0x400000 -}; -var FIELD_JUSTIFY = { - left: 0, - center: 1, - right: 2 -}; -var VALUE_MAP = { - value: 'V', - defaultValue: 'DV' -}; -var FORMAT_SPECIAL = { - zip: '0', - zipPlus4: '1', - zip4: '1', - phone: '2', - ssn: '3' -}; -var FORMAT_DEFAULT = { - number: { - nDec: 0, - sepComma: false, - negStyle: 'MinusBlack', - currency: '', - currencyPrepend: true - }, - percent: { - nDec: 0, - sepComma: false - } -}; -var AcroFormMixin = { - /** - * Must call if adding AcroForms to a document. Must also call font() before - * this method to set the default font. - */ - initForm() { - if (!this._font) { - throw new Error('Must set a font before calling initForm method'); - } - - this._acroform = { - fonts: {}, - defaultFont: this._font.name - }; - this._acroform.fonts[this._font.id] = this._font.ref(); - var data = { - Fields: [], - NeedAppearances: true, - DA: new String("/".concat(this._font.id, " 0 Tf 0 g")), - DR: { - Font: {} - } - }; - data.DR.Font[this._font.id] = this._font.ref(); - var AcroForm = this.ref(data); - this._root.data.AcroForm = AcroForm; - return this; - }, - - /** - * Called automatically by document.js - */ - endAcroForm() { - if (this._root.data.AcroForm) { - if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) { - throw new Error('No fonts specified for PDF form'); - } - - var fontDict = this._root.data.AcroForm.data.DR.Font; - Object.keys(this._acroform.fonts).forEach(name => { - fontDict[name] = this._acroform.fonts[name]; - }); - - this._root.data.AcroForm.data.Fields.forEach(fieldRef => { - this._endChild(fieldRef); - }); - - this._root.data.AcroForm.end(); - } - - return this; - }, - - _endChild(ref) { - if (Array.isArray(ref.data.Kids)) { - ref.data.Kids.forEach(childRef => { - this._endChild(childRef); - }); - ref.end(); - } - - return this; - }, - - /** - * Creates and adds a form field to the document. Form fields are intermediate - * nodes in a PDF form that are used to specify form name heirarchy and form - * value defaults. - * @param {string} name - field name (T attribute in field dictionary) - * @param {object} options - other attributes to include in field dictionary - */ - formField(name) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var fieldDict = this._fieldDict(name, null, options); - - var fieldRef = this.ref(fieldDict); - - this._addToParent(fieldRef); - - return fieldRef; - }, - - /** - * Creates and adds a Form Annotation to the document. Form annotations are - * called Widget annotations internally within a PDF file. - * @param {string} name - form field name (T attribute of widget annotation - * dictionary) - * @param {number} x - * @param {number} y - * @param {number} w - * @param {number} h - * @param {object} options - */ - formAnnotation(name, type, x, y, w, h) { - var options = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; - - var fieldDict = this._fieldDict(name, type, options); - - fieldDict.Subtype = 'Widget'; - - if (fieldDict.F === undefined) { - fieldDict.F = 4; // print the annotation - } // Add Field annot to page, and get it's ref - - - this.annotate(x, y, w, h, fieldDict); - var annotRef = this.page.annotations[this.page.annotations.length - 1]; - return this._addToParent(annotRef); - }, - - formText(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'text', x, y, w, h, options); - }, - - formPushButton(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'pushButton', x, y, w, h, options); - }, - - formCombo(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'combo', x, y, w, h, options); - }, - - formList(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'list', x, y, w, h, options); - }, - - formRadioButton(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'radioButton', x, y, w, h, options); - }, - - formCheckbox(name, x, y, w, h) { - var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - return this.formAnnotation(name, 'checkbox', x, y, w, h, options); - }, - - _addToParent(fieldRef) { - var parent = fieldRef.data.Parent; - - if (parent) { - if (!parent.data.Kids) { - parent.data.Kids = []; - } - - parent.data.Kids.push(fieldRef); - } else { - this._root.data.AcroForm.data.Fields.push(fieldRef); - } - - return this; - }, - - _fieldDict(name, type) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (!this._acroform) { - throw new Error('Call document.initForms() method before adding form elements to document'); - } - - var opts = Object.assign({}, options); - - if (type !== null) { - opts = this._resolveType(type, options); - } - - opts = this._resolveFlags(opts); - opts = this._resolveJustify(opts); - opts = this._resolveFont(opts); - opts = this._resolveStrings(opts); - opts = this._resolveColors(opts); - opts = this._resolveFormat(opts); - opts.T = new String(name); - - if (opts.parent) { - opts.Parent = opts.parent; - delete opts.parent; - } - - return opts; - }, - - _resolveType(type, opts) { - if (type === 'text') { - opts.FT = 'Tx'; - } else if (type === 'pushButton') { - opts.FT = 'Btn'; - opts.pushButton = true; - } else if (type === 'radioButton') { - opts.FT = 'Btn'; - opts.radioButton = true; - } else if (type === 'checkbox') { - opts.FT = 'Btn'; - } else if (type === 'combo') { - opts.FT = 'Ch'; - opts.combo = true; - } else if (type === 'list') { - opts.FT = 'Ch'; - } else { - throw new Error("Invalid form annotation type '".concat(type, "'")); - } - - return opts; - }, - - _resolveFormat(opts) { - var f = opts.format; - - if (f && f.type) { - var fnKeystroke; - var fnFormat; - var params = ''; - - if (FORMAT_SPECIAL[f.type] !== undefined) { - fnKeystroke = "AFSpecial_Keystroke"; - fnFormat = "AFSpecial_Format"; - params = FORMAT_SPECIAL[f.type]; - } else { - var format = f.type.charAt(0).toUpperCase() + f.type.slice(1); - fnKeystroke = "AF".concat(format, "_Keystroke"); - fnFormat = "AF".concat(format, "_Format"); - - if (f.type === 'date') { - fnKeystroke += 'Ex'; - params = String(f.param); - } else if (f.type === 'time') { - params = String(f.param); - } else if (f.type === 'number') { - var p = Object.assign({}, FORMAT_DEFAULT.number, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(',')); - } else if (f.type === 'percent') { - var _p = Object.assign({}, FORMAT_DEFAULT.percent, f); - - params = String([String(_p.nDec), _p.sepComma ? '0' : '1'].join(',')); - } - } - - opts.AA = opts.AA ? opts.AA : {}; - opts.AA.K = { - S: 'JavaScript', - JS: new String("".concat(fnKeystroke, "(").concat(params, ");")) - }; - opts.AA.F = { - S: 'JavaScript', - JS: new String("".concat(fnFormat, "(").concat(params, ");")) - }; - } - - delete opts.format; - return opts; - }, - - _resolveColors(opts) { - var color = this._normalizeColor(opts.backgroundColor); - - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - - opts.MK.BG = color; - } - - color = this._normalizeColor(opts.borderColor); - - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - - opts.MK.BC = color; - } - - delete opts.backgroundColor; - delete opts.borderColor; - return opts; - }, - - _resolveFlags(options) { - var result = 0; - Object.keys(options).forEach(key => { - if (FIELD_FLAGS[key]) { - if (options[key]) { - result |= FIELD_FLAGS[key]; - } - - delete options[key]; - } - }); - - if (result !== 0) { - options.Ff = options.Ff ? options.Ff : 0; - options.Ff |= result; - } - - return options; - }, - - _resolveJustify(options) { - var result = 0; - - if (options.align !== undefined) { - if (typeof FIELD_JUSTIFY[options.align] === 'number') { - result = FIELD_JUSTIFY[options.align]; - } - - delete options.align; - } - - if (result !== 0) { - options.Q = result; // default - } - - return options; - }, - - _resolveFont(options) { - // add current font to document-level AcroForm dict if necessary - if (this._acroform.fonts[this._font.id] === null) { - this._acroform.fonts[this._font.id] = this._font.ref(); - } // add current font to field's resource dict (RD) if not the default acroform font - - - if (this._acroform.defaultFont !== this._font.name) { - options.DR = { - Font: {} - }; // Get the fontSize option. If not set use auto sizing - - var fontSize = options.fontSize || 0; - options.DR.Font[this._font.id] = this._font.ref(); - options.DA = new String("/".concat(this._font.id, " ").concat(fontSize, " Tf 0 g")); - } - - return options; - }, - - _resolveStrings(options) { - var select = []; - - function appendChoices(a) { - if (Array.isArray(a)) { - for (var idx = 0; idx < a.length; idx++) { - if (typeof a[idx] === 'string') { - select.push(new String(a[idx])); - } else { - select.push(a[idx]); - } - } - } - } - - appendChoices(options.Opt); - - if (options.select) { - appendChoices(options.select); - delete options.select; - } - - if (select.length) { - options.Opt = select; - } - - Object.keys(VALUE_MAP).forEach(key => { - if (options[key] !== undefined) { - options[VALUE_MAP[key]] = options[key]; - delete options[key]; - } - }); - ['V', 'DV'].forEach(key => { - if (typeof options[key] === 'string') { - options[key] = new String(options[key]); - } - }); - - if (options.MK && options.MK.CA) { - options.MK.CA = new String(options.MK.CA); - } - - if (options.label) { - options.MK = options.MK ? options.MK : {}; - options.MK.CA = new String(options.label); - delete options.label; - } - - return options; - } - -}; - -var AttachmentsMixin = { - /** - * Embed contents of `src` in PDF - * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file - * @param {object} options - * * options.name: filename to be shown in PDF, will use `src` if none set - * * options.type: filetype to be shown in PDF - * * options.description: description to be shown in PDF - * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations - * * options.creationDate: override creation date - * * options.modifiedDate: override modified date - * @returns filespec reference - */ - file(src) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - options.name = options.name || src; - var refBody = { - Type: 'EmbeddedFile', - Params: {} - }; - var data; - - if (!src) { - throw new Error('No src specified'); - } - - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - var match; - - if (match = /^data:(.*?);base64,(.*)$/.exec(src)) { - if (match[1]) { - refBody.Subtype = match[1].replace('/', '#2F'); - } - - data = Buffer.from(match[2], 'base64'); - } else { - data = fs.readFileSync(src); - - if (!data) { - throw new Error("Could not read contents of file at filepath ".concat(src)); - } // update CreationDate and ModDate - - - var { - birthtime, - ctime - } = fs.statSync(src); - refBody.Params.CreationDate = birthtime; - refBody.Params.ModDate = ctime; - } - } // override creation date and modified date - - - if (options.creationDate instanceof Date) { - refBody.Params.CreationDate = options.creationDate; - } - - if (options.modifiedDate instanceof Date) { - refBody.Params.ModDate = options.modifiedDate; - } // add optional subtype - - - if (options.type) { - refBody.Subtype = options.type.replace('/', '#2F'); - } // add checksum and size information - - - var checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data))); - refBody.Params.CheckSum = new String(checksum); - refBody.Params.Size = data.byteLength; // save some space when embedding the same file again - // if a file with the same name and metadata exists, reuse its reference - - var ref; - if (!this._fileRegistry) this._fileRegistry = {}; - var file = this._fileRegistry[options.name]; - - if (file && isEqual(refBody, file)) { - ref = file.ref; - } else { - ref = this.ref(refBody); - ref.end(data); - this._fileRegistry[options.name] = _objectSpread2(_objectSpread2({}, refBody), {}, { - ref - }); - } // add filespec for embedded file - - - var fileSpecBody = { - Type: 'Filespec', - F: new String(options.name), - EF: { - F: ref - }, - UF: new String(options.name) - }; - - if (options.description) { - fileSpecBody.Desc = new String(options.description); - } - - var filespec = this.ref(fileSpecBody); - filespec.end(); - - if (!options.hidden) { - this.addNamedEmbeddedFile(options.name, filespec); - } - - return filespec; - } - -}; -/** check two embedded file metadata objects for equality */ - -function isEqual(a, b) { - return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate === b.Params.CreationDate && a.Params.ModDate === b.Params.ModDate; -} - -var PDFA = { - initPDFA(pSubset) { - if (pSubset.charAt(pSubset.length - 3) === '-') { - this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase(); - this.subset = parseInt(pSubset.charAt(pSubset.length - 2)); - } else { - // Default to Basic conformance when user doesn't specify - this.subset_conformance = 'B'; - this.subset = parseInt(pSubset.charAt(pSubset.length - 1)); - } - }, - - endSubset() { - this._addPdfaMetadata(); - - var jsPath = "".concat(__dirname, "/data/sRGB_IEC61966_2_1.icc"); - var jestPath = "".concat(__dirname, "/../color_profiles/sRGB_IEC61966_2_1.icc"); - - this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath); - }, - - _addColorOutputIntent(pICCPath) { - var iccProfile = fs.readFileSync(pICCPath); - var colorProfileRef = this.ref({ - Length: iccProfile.length, - N: 3 - }); - colorProfileRef.write(iccProfile); - colorProfileRef.end(); - var intentRef = this.ref({ - Type: 'OutputIntent', - S: 'GTS_PDFA1', - Info: new String('sRGB IEC61966-2.1'), - OutputConditionIdentifier: new String('sRGB IEC61966-2.1'), - DestOutputProfile: colorProfileRef - }); - intentRef.end(); - this._root.data.OutputIntents = [intentRef]; - }, - - _getPdfaid() { - return "\n \n ".concat(this.subset, "\n ").concat(this.subset_conformance, "\n \n "); - }, - - _addPdfaMetadata() { - this.appendXML(this._getPdfaid()); - } - -}; - -var PDFUA = { - initPDFUA() { - this.subset = 1; - }, - - endSubset() { - this._addPdfuaMetadata(); - }, - - _addPdfuaMetadata() { - this.appendXML(this._getPdfuaid()); - }, - - _getPdfuaid() { - return "\n \n ".concat(this.subset, "\n \n "); - } - -}; - -var SubsetMixin = { - _importSubset(subset) { - Object.assign(this, subset); - }, - - initSubset(options) { - switch (options.subset) { - case 'PDF/A-1': - case 'PDF/A-1a': - case 'PDF/A-1b': - case 'PDF/A-2': - case 'PDF/A-2a': - case 'PDF/A-2b': - case 'PDF/A-3': - case 'PDF/A-3a': - case 'PDF/A-3b': - this._importSubset(PDFA); - - this.initPDFA(options.subset); - break; - - case 'PDF/UA': - this._importSubset(PDFUA); - - this.initPDFUA(); - break; - } - } - -}; - -class PDFMetadata { - constructor() { - this._metadata = "\n \n \n \n "; - } - - _closeTags() { - this._metadata = this._metadata.concat("\n \n \n \n "); - } - - append(xml) { - var newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this._metadata = this._metadata.concat(xml); - if (newline) this._metadata = this._metadata.concat('\n'); - } - - getXML() { - return this._metadata; - } - - getLength() { - return this._metadata.length; - } - - end() { - this._closeTags(); - - this._metadata = this._metadata.trim(); - } - -} - -var MetadataMixin = { - initMetadata() { - this.metadata = new PDFMetadata(); - }, - - appendXML(xml) { - var newline = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - this.metadata.append(xml, newline); - }, - - _addInfo() { - this.appendXML("\n \n ".concat(this.info.CreationDate.toISOString().split('.')[0] + "Z", "\n ").concat(this.info.Creator, "\n \n ")); - - if (this.info.Title || this.info.Author || this.info.Subject) { - this.appendXML("\n \n "); - - if (this.info.Title) { - this.appendXML("\n \n \n ".concat(this.info.Title, "\n \n \n ")); - } - - if (this.info.Author) { - this.appendXML("\n \n \n ".concat(this.info.Author, "\n \n \n ")); - } - - if (this.info.Subject) { - this.appendXML("\n \n \n ".concat(this.info.Subject, "\n \n \n ")); - } - - this.appendXML("\n \n "); - } - - this.appendXML("\n \n ".concat(this.info.Creator, ""), false); - - if (this.info.Keywords) { - this.appendXML("\n ".concat(this.info.Keywords, ""), false); - } - - this.appendXML("\n \n "); - }, - - endMetadata() { - this._addInfo(); - - this.metadata.end(); - /* - Metadata was introduced in PDF 1.4, so adding it to 1.3 - will likely only take up more space. - */ - - if (this.version != 1.3) { - this.metadataRef = this.ref({ - length: this.metadata.getLength(), - Type: 'Metadata', - Subtype: 'XML' - }); - this.metadataRef.compress = false; - this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8')); - this.metadataRef.end(); - this._root.data.Metadata = this.metadataRef; - } - } - -}; - -/* -PDFDocument - represents an entire PDF document -By Devon Govett -*/ - -class PDFDocument extends stream.Readable { - constructor() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - super(options); - this.options = options; // PDF version - - switch (options.pdfVersion) { - case '1.4': - this.version = 1.4; - break; - - case '1.5': - this.version = 1.5; - break; - - case '1.6': - this.version = 1.6; - break; - - case '1.7': - case '1.7ext3': - this.version = 1.7; - break; - - default: - this.version = 1.3; - break; - } // Whether streams should be compressed - - - this.compress = this.options.compress != null ? this.options.compress : true; - this._pageBuffer = []; - this._pageBufferStart = 0; // The PDF object store - - this._offsets = []; - this._waiting = 0; - this._ended = false; - this._offset = 0; - var Pages = this.ref({ - Type: 'Pages', - Count: 0, - Kids: [] - }); - var Names = this.ref({ - Dests: new PDFNameTree() - }); - this._root = this.ref({ - Type: 'Catalog', - Pages, - Names - }); - - if (this.options.lang) { - this._root.data.Lang = new String(this.options.lang); - } // The current page - - - this.page = null; // Initialize mixins - - this.initMetadata(); - this.initColor(); - this.initVector(); - this.initFonts(options.font); - this.initText(); - this.initImages(); - this.initOutline(); - this.initMarkings(options); - this.initSubset(options); // Initialize the metadata - - this.info = { - Producer: 'PDFKit', - Creator: 'PDFKit', - CreationDate: new Date() - }; - - if (this.options.info) { - for (var key in this.options.info) { - var val = this.options.info[key]; - this.info[key] = val; - } - } - - if (this.options.displayTitle) { - this._root.data.ViewerPreferences = this.ref({ - DisplayDocTitle: true - }); - } // Generate file ID - - - this._id = PDFSecurity.generateFileID(this.info); // Initialize security settings - - this._security = PDFSecurity.create(this, options); // Write the header - // PDF version - - this._write("%PDF-".concat(this.version)); // 4 binary chars, as recommended by the spec - - - this._write('%\xFF\xFF\xFF\xFF'); // Add the first page - - - if (this.options.autoFirstPage !== false) { - this.addPage(); - } - } - - addPage(options) { - if (options == null) { - ({ - options - } = this); - } // end the current page if needed - - - if (!this.options.bufferPages) { - this.flushPages(); - } // create a page object - - - this.page = new PDFPage(this, options); - - this._pageBuffer.push(this.page); // add the page to the object store - - - var pages = this._root.data.Pages.data; - pages.Kids.push(this.page.dictionary); - pages.Count++; // reset x and y coordinates - - this.x = this.page.margins.left; - this.y = this.page.margins.top; // flip PDF coordinate system so that the origin is in - // the top left rather than the bottom left - - this._ctm = [1, 0, 0, 1, 0, 0]; - this.transform(1, 0, 0, -1, 0, this.page.height); - this.emit('pageAdded'); - return this; - } - - continueOnNewPage(options) { - var pageMarkings = this.endPageMarkings(this.page); - this.addPage(options); - this.initPageMarkings(pageMarkings); - return this; - } - - bufferedPageRange() { - return { - start: this._pageBufferStart, - count: this._pageBuffer.length - }; - } - - switchToPage(n) { - var page; - - if (!(page = this._pageBuffer[n - this._pageBufferStart])) { - throw new Error("switchToPage(".concat(n, ") out of bounds, current buffer covers pages ").concat(this._pageBufferStart, " to ").concat(this._pageBufferStart + this._pageBuffer.length - 1)); - } - - return this.page = page; - } - - flushPages() { - // this local variable exists so we're future-proof against - // reentrant calls to flushPages. - var pages = this._pageBuffer; - this._pageBuffer = []; - this._pageBufferStart += pages.length; - - for (var page of pages) { - this.endPageMarkings(page); - page.end(); - } - } - - addNamedDestination(name) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - if (args.length === 0) { - args = ['XYZ', null, null, null]; - } - - if (args[0] === 'XYZ' && args[2] !== null) { - args[2] = this.page.height - args[2]; - } - - args.unshift(this.page.dictionary); - - this._root.data.Names.data.Dests.add(name, args); - } - - addNamedEmbeddedFile(name, ref) { - if (!this._root.data.Names.data.EmbeddedFiles) { - // disabling /Limits for this tree fixes attachments not showing in Adobe Reader - this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ - limits: false - }); - } // add filespec to EmbeddedFiles - - - this._root.data.Names.data.EmbeddedFiles.add(name, ref); - } - - addNamedJavaScript(name, js) { - if (!this._root.data.Names.data.JavaScript) { - this._root.data.Names.data.JavaScript = new PDFNameTree(); - } - - var data = { - JS: new String(js), - S: 'JavaScript' - }; - - this._root.data.Names.data.JavaScript.add(name, data); - } - - ref(data) { - var ref = new PDFReference(this, this._offsets.length + 1, data); - - this._offsets.push(null); // placeholder for this object's offset once it is finalized - - - this._waiting++; - return ref; - } - - _read() {} // do nothing, but this method is required by node - - - _write(data) { - if (!Buffer.isBuffer(data)) { - data = Buffer.from(data + '\n', 'binary'); - } - - this.push(data); - return this._offset += data.length; - } - - addContent(data) { - this.page.write(data); - return this; - } - - _refEnd(ref) { - this._offsets[ref.id - 1] = ref.offset; - - if (--this._waiting === 0 && this._ended) { - this._finalize(); - - return this._ended = false; - } - } - - write(filename, fn) { - // print a deprecation warning with a stacktrace - var err = new Error("PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream."); - console.warn(err.stack); - this.pipe(fs.createWriteStream(filename)); - this.end(); - return this.once('end', fn); - } - - end() { - this.flushPages(); - this._info = this.ref(); - - for (var key in this.info) { - var val = this.info[key]; - - if (typeof val === 'string') { - val = new String(val); - } - - var entry = this.ref(val); - entry.end(); - this._info.data[key] = entry; - } - - this._info.end(); - - for (var name in this._fontFamilies) { - var font = this._fontFamilies[name]; - font.finalize(); - } - - this.endOutline(); - this.endMarkings(); - - if (this.subset) { - this.endSubset(); - } - - this.endMetadata(); - - this._root.end(); - - this._root.data.Pages.end(); - - this._root.data.Names.end(); - - this.endAcroForm(); - - if (this._root.data.ViewerPreferences) { - this._root.data.ViewerPreferences.end(); - } - - if (this._security) { - this._security.end(); - } - - if (this._waiting === 0) { - return this._finalize(); - } else { - return this._ended = true; - } - } - - _finalize() { - // generate xref - var xRefOffset = this._offset; - - this._write('xref'); - - this._write("0 ".concat(this._offsets.length + 1)); - - this._write('0000000000 65535 f '); - - for (var offset of this._offsets) { - offset = "0000000000".concat(offset).slice(-10); - - this._write(offset + ' 00000 n '); - } // trailer - - - var trailer = { - Size: this._offsets.length + 1, - Root: this._root, - Info: this._info, - ID: [this._id, this._id] - }; - - if (this._security) { - trailer.Encrypt = this._security.dictionary; - } - - this._write('trailer'); - - this._write(PDFObject.convert(trailer)); - - this._write('startxref'); - - this._write("".concat(xRefOffset)); - - this._write('%%EOF'); // end the stream - - - return this.push(null); - } - - toString() { - return '[object PDFDocument]'; - } - -} - -var mixin = methods => { - Object.assign(PDFDocument.prototype, methods); -}; - -mixin(MetadataMixin); -mixin(ColorMixin); -mixin(VectorMixin); -mixin(FontsMixin); -mixin(TextMixin); -mixin(ImagesMixin); -mixin(AnnotationsMixin); -mixin(OutlineMixin); -mixin(MarkingsMixin); -mixin(AcroFormMixin); -mixin(AttachmentsMixin); -mixin(SubsetMixin); -PDFDocument.LineWrapper = LineWrapper; - -export default PDFDocument; -//# sourceMappingURL=pdfkit.esnext.js.map diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js.map b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js.map deleted file mode 100644 index 7a1c975..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.esnext.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pdfkit.esnext.js","sources":["../lib/abstract_reference.js","../lib/tree.js","../lib/object.js","../lib/reference.js","../lib/page.js","../lib/name_tree.js","../lib/saslprep/lib/util.js","../lib/saslprep/lib/code-points.js","../lib/saslprep/index.js","../lib/security.js","../lib/gradient.js","../lib/pattern.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/structure_content.js","../lib/structure_element.js","../lib/number_tree.js","../lib/mixins/markings.js","../lib/mixins/acroform.js","../lib/mixins/attachments.js","../lib/mixins/pdfa.js","../lib/mixins/pdfua.js","../lib/mixins/subsets.js","../lib/metadata.js","../lib/mixins/metadata.js","../lib/document.js"],"sourcesContent":["/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n toString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFTree - abstract base class for name and number tree objects\r\n*/\r\n\r\nimport PDFObject from './object';\r\n\r\nclass PDFTree {\r\n constructor(options = {}) {\r\n this._items = {};\r\n // disable /Limits output for this tree\r\n this.limits =\r\n typeof options.limits === 'boolean' ? options.limits : true;\r\n }\r\n\r\n add(key, val) {\r\n return (this._items[key] = val);\r\n }\r\n\r\n get(key) {\r\n return this._items[key];\r\n }\r\n\r\n toString() {\r\n // Needs to be sorted by key\r\n const sortedKeys = Object.keys(this._items).sort((a, b) =>\r\n this._compareKeys(a, b)\r\n );\r\n\r\n const out = ['<<'];\r\n if (this.limits && sortedKeys.length > 1) {\r\n const first = sortedKeys[0],\r\n last = sortedKeys[sortedKeys.length - 1];\r\n out.push(\r\n ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`\r\n );\r\n }\r\n out.push(` /${this._keysName()} [`);\r\n for (let key of sortedKeys) {\r\n out.push(\r\n ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\r\n this._items[key]\r\n )}`\r\n );\r\n }\r\n out.push(']');\r\n out.push('>>');\r\n return out.join('\\n');\r\n }\r\n\r\n _compareKeys(/*a, b*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _keysName() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _dataForKey(/*k*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFTree;\r\n","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFTree from './tree';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\r\nconst escapable = {\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t',\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\\\': '\\\\\\\\',\r\n '(': '\\\\(',\r\n ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n const l = buff.length;\r\n if (l & 0x01) {\r\n throw new Error('Buffer length must be even');\r\n } else {\r\n for (let i = 0, end = l - 1; i < end; i += 2) {\r\n const a = buff[i];\r\n buff[i] = buff[i + 1];\r\n buff[i + 1] = a;\r\n }\r\n }\r\n\r\n return buff;\r\n};\r\n\r\nclass PDFObject {\r\n static convert(object, encryptFn = null) {\r\n // String literals are converted to the PDF name type\r\n if (typeof object === 'string') {\r\n return `/${object}`;\r\n\r\n // String objects are converted to PDF strings (UTF-16)\r\n } else if (object instanceof String) {\r\n let string = object;\r\n // Detect if this is a unicode string\r\n let isUnicode = false;\r\n for (let i = 0, end = string.length; i < end; i++) {\r\n if (string.charCodeAt(i) > 0x7f) {\r\n isUnicode = true;\r\n break;\r\n }\r\n }\r\n\r\n // If so, encode it as big endian UTF-16\r\n let stringBuffer;\r\n if (isUnicode) {\r\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n } else {\r\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n }\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(stringBuffer).toString('binary');\r\n } else {\r\n string = stringBuffer.toString('binary');\r\n }\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n return `(${string})`;\r\n\r\n // Buffers are converted to PDF hex strings\r\n } else if (Buffer.isBuffer(object)) {\r\n return `<${object.toString('hex')}>`;\r\n } else if (\r\n object instanceof PDFAbstractReference ||\r\n object instanceof PDFTree\r\n ) {\r\n return object.toString();\r\n } else if (object instanceof Date) {\r\n let string =\r\n `D:${pad(object.getUTCFullYear(), 4)}` +\r\n pad(object.getUTCMonth() + 1, 2) +\r\n pad(object.getUTCDate(), 2) +\r\n pad(object.getUTCHours(), 2) +\r\n pad(object.getUTCMinutes(), 2) +\r\n pad(object.getUTCSeconds(), 2) +\r\n 'Z';\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n }\r\n\r\n return `(${string})`;\r\n } else if (Array.isArray(object)) {\r\n const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n return `[${items}]`;\r\n } else if ({}.toString.call(object) === '[object Object]') {\r\n const out = ['<<'];\r\n for (let key in object) {\r\n const val = object[key];\r\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n }\r\n\r\n out.push('>>');\r\n return out.join('\\n');\r\n } else if (typeof object === 'number') {\r\n return PDFObject.number(object);\r\n } else {\r\n return `${object}`;\r\n }\r\n }\r\n\r\n static number(n) {\r\n if (n > -1e21 && n < 1e21) {\r\n return Math.round(n * 1e6) / 1e6;\r\n }\r\n\r\n throw new Error(`unsupported number: ${n}`);\r\n }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n constructor(document, id, data = {}) {\r\n super();\r\n this.document = document;\r\n this.id = id;\r\n this.data = data;\r\n this.gen = 0;\r\n this.compress = this.document.compress && !this.data.Filter;\r\n this.uncompressedLength = 0;\r\n this.buffer = [];\r\n }\r\n\r\n write(chunk) {\r\n if (!Buffer.isBuffer(chunk)) {\r\n chunk = Buffer.from(chunk + '\\n', 'binary');\r\n }\r\n\r\n this.uncompressedLength += chunk.length;\r\n if (this.data.Length == null) {\r\n this.data.Length = 0;\r\n }\r\n this.buffer.push(chunk);\r\n this.data.Length += chunk.length;\r\n if (this.compress) {\r\n return (this.data.Filter = 'FlateDecode');\r\n }\r\n }\r\n\r\n end(chunk) {\r\n if (chunk) {\r\n this.write(chunk);\r\n }\r\n return this.finalize();\r\n }\r\n\r\n finalize() {\r\n this.offset = this.document._offset;\r\n\r\n const encryptFn = this.document._security\r\n ? this.document._security.getEncryptFn(this.id, this.gen)\r\n : null;\r\n\r\n if (this.buffer.length) {\r\n this.buffer = Buffer.concat(this.buffer);\r\n if (this.compress) {\r\n this.buffer = zlib.deflateSync(this.buffer);\r\n }\r\n\r\n if (encryptFn) {\r\n this.buffer = encryptFn(this.buffer);\r\n }\r\n\r\n this.data.Length = this.buffer.length;\r\n }\r\n\r\n this.document._write(`${this.id} ${this.gen} obj`);\r\n this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n if (this.buffer.length) {\r\n this.document._write('stream');\r\n this.document._write(this.buffer);\r\n\r\n this.buffer = []; // free up memory\r\n this.document._write('\\nendstream');\r\n }\r\n\r\n this.document._write('endobj');\r\n this.document._refEnd(this);\r\n }\r\n toString() {\r\n return `${this.id} ${this.gen} R`;\r\n }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n top: 72,\r\n left: 72,\r\n bottom: 72,\r\n right: 72\r\n};\r\n\r\nconst SIZES = {\r\n '4A0': [4767.87, 6740.79],\r\n '2A0': [3370.39, 4767.87],\r\n A0: [2383.94, 3370.39],\r\n A1: [1683.78, 2383.94],\r\n A2: [1190.55, 1683.78],\r\n A3: [841.89, 1190.55],\r\n A4: [595.28, 841.89],\r\n A5: [419.53, 595.28],\r\n A6: [297.64, 419.53],\r\n A7: [209.76, 297.64],\r\n A8: [147.4, 209.76],\r\n A9: [104.88, 147.4],\r\n A10: [73.7, 104.88],\r\n B0: [2834.65, 4008.19],\r\n B1: [2004.09, 2834.65],\r\n B2: [1417.32, 2004.09],\r\n B3: [1000.63, 1417.32],\r\n B4: [708.66, 1000.63],\r\n B5: [498.9, 708.66],\r\n B6: [354.33, 498.9],\r\n B7: [249.45, 354.33],\r\n B8: [175.75, 249.45],\r\n B9: [124.72, 175.75],\r\n B10: [87.87, 124.72],\r\n C0: [2599.37, 3676.54],\r\n C1: [1836.85, 2599.37],\r\n C2: [1298.27, 1836.85],\r\n C3: [918.43, 1298.27],\r\n C4: [649.13, 918.43],\r\n C5: [459.21, 649.13],\r\n C6: [323.15, 459.21],\r\n C7: [229.61, 323.15],\r\n C8: [161.57, 229.61],\r\n C9: [113.39, 161.57],\r\n C10: [79.37, 113.39],\r\n RA0: [2437.8, 3458.27],\r\n RA1: [1729.13, 2437.8],\r\n RA2: [1218.9, 1729.13],\r\n RA3: [864.57, 1218.9],\r\n RA4: [609.45, 864.57],\r\n SRA0: [2551.18, 3628.35],\r\n SRA1: [1814.17, 2551.18],\r\n SRA2: [1275.59, 1814.17],\r\n SRA3: [907.09, 1275.59],\r\n SRA4: [637.8, 907.09],\r\n EXECUTIVE: [521.86, 756.0],\r\n FOLIO: [612.0, 936.0],\r\n LEGAL: [612.0, 1008.0],\r\n LETTER: [612.0, 792.0],\r\n TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n constructor(document, options = {}) {\r\n this.document = document;\r\n this.size = options.size || 'letter';\r\n this.layout = options.layout || 'portrait';\r\n\r\n // process margins\r\n if (typeof options.margin === 'number') {\r\n this.margins = {\r\n top: options.margin,\r\n left: options.margin,\r\n bottom: options.margin,\r\n right: options.margin\r\n };\r\n\r\n // default to 1 inch margins\r\n } else {\r\n this.margins = options.margins || DEFAULT_MARGINS;\r\n }\r\n\r\n // calculate page dimensions\r\n const dimensions = Array.isArray(this.size)\r\n ? this.size\r\n : SIZES[this.size.toUpperCase()];\r\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n this.content = this.document.ref();\r\n\r\n // Initialize the Font, XObject, and ExtGState dictionaries\r\n this.resources = this.document.ref({\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n });\r\n\r\n // The page dictionary\r\n this.dictionary = this.document.ref({\r\n Type: 'Page',\r\n Parent: this.document._root.data.Pages,\r\n MediaBox: [0, 0, this.width, this.height],\r\n Contents: this.content,\r\n Resources: this.resources\r\n });\r\n\r\n this.markings = [];\r\n }\r\n\r\n // Lazily create these objects\r\n get fonts() {\r\n const data = this.resources.data;\r\n return data.Font != null ? data.Font : (data.Font = {});\r\n }\r\n\r\n get xobjects() {\r\n const data = this.resources.data;\r\n return data.XObject != null ? data.XObject : (data.XObject = {});\r\n }\r\n\r\n get ext_gstates() {\r\n const data = this.resources.data;\r\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n }\r\n\r\n get patterns() {\r\n const data = this.resources.data;\r\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n }\r\n\r\n get colorSpaces() {\r\n const data = this.resources.data;\r\n return data.ColorSpace || (data.ColorSpace = {});\r\n }\r\n\r\n get annotations() {\r\n const data = this.dictionary.data;\r\n return data.Annots != null ? data.Annots : (data.Annots = []);\r\n }\r\n\r\n get structParentTreeKey() {\r\n const data = this.dictionary.data;\r\n return data.StructParents != null\r\n ? data.StructParents\r\n : (data.StructParents = this.document.createStructParentTreeNextKey());\r\n }\r\n\r\n maxY() {\r\n return this.height - this.margins.bottom;\r\n }\r\n\r\n write(chunk) {\r\n return this.content.write(chunk);\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n this.resources.end();\r\n return this.content.end();\r\n }\r\n}\r\n\r\nexport default PDFPage;\r\n","/*\r\nPDFNameTree - represents a name tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNameTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return a.localeCompare(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Names\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return new String(k);\r\n }\r\n}\r\n\r\nexport default PDFNameTree;\r\n","/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\r\nfunction inRange(value, rangeGroup) {\r\n if (value < rangeGroup[0]) return false;\r\n let startRange = 0;\r\n let endRange = rangeGroup.length / 2;\r\n while (startRange <= endRange) {\r\n const middleRange = Math.floor((startRange + endRange) / 2);\r\n\r\n // actual array index\r\n const arrayIndex = middleRange * 2;\r\n\r\n // Check if value is in range pointed by actual index\r\n if (\r\n value >= rangeGroup[arrayIndex] &&\r\n value <= rangeGroup[arrayIndex + 1]\r\n ) {\r\n return true;\r\n }\r\n\r\n if (value > rangeGroup[arrayIndex + 1]) {\r\n // Search Right Side Of Array\r\n startRange = middleRange + 1;\r\n } else {\r\n // Search Left Side Of Array\r\n endRange = middleRange - 1;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport { inRange };\r\n","import { inRange } from './util';\r\n\r\n// prettier-ignore-start\r\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\r\nconst unassigned_code_points = [\r\n 0x0221,\r\n 0x0221,\r\n 0x0234,\r\n 0x024f,\r\n 0x02ae,\r\n 0x02af,\r\n 0x02ef,\r\n 0x02ff,\r\n 0x0350,\r\n 0x035f,\r\n 0x0370,\r\n 0x0373,\r\n 0x0376,\r\n 0x0379,\r\n 0x037b,\r\n 0x037d,\r\n 0x037f,\r\n 0x0383,\r\n 0x038b,\r\n 0x038b,\r\n 0x038d,\r\n 0x038d,\r\n 0x03a2,\r\n 0x03a2,\r\n 0x03cf,\r\n 0x03cf,\r\n 0x03f7,\r\n 0x03ff,\r\n 0x0487,\r\n 0x0487,\r\n 0x04cf,\r\n 0x04cf,\r\n 0x04f6,\r\n 0x04f7,\r\n 0x04fa,\r\n 0x04ff,\r\n 0x0510,\r\n 0x0530,\r\n 0x0557,\r\n 0x0558,\r\n 0x0560,\r\n 0x0560,\r\n 0x0588,\r\n 0x0588,\r\n 0x058b,\r\n 0x0590,\r\n 0x05a2,\r\n 0x05a2,\r\n 0x05ba,\r\n 0x05ba,\r\n 0x05c5,\r\n 0x05cf,\r\n 0x05eb,\r\n 0x05ef,\r\n 0x05f5,\r\n 0x060b,\r\n 0x060d,\r\n 0x061a,\r\n 0x061c,\r\n 0x061e,\r\n 0x0620,\r\n 0x0620,\r\n 0x063b,\r\n 0x063f,\r\n 0x0656,\r\n 0x065f,\r\n 0x06ee,\r\n 0x06ef,\r\n 0x06ff,\r\n 0x06ff,\r\n 0x070e,\r\n 0x070e,\r\n 0x072d,\r\n 0x072f,\r\n 0x074b,\r\n 0x077f,\r\n 0x07b2,\r\n 0x0900,\r\n 0x0904,\r\n 0x0904,\r\n 0x093a,\r\n 0x093b,\r\n 0x094e,\r\n 0x094f,\r\n 0x0955,\r\n 0x0957,\r\n 0x0971,\r\n 0x0980,\r\n 0x0984,\r\n 0x0984,\r\n 0x098d,\r\n 0x098e,\r\n 0x0991,\r\n 0x0992,\r\n 0x09a9,\r\n 0x09a9,\r\n 0x09b1,\r\n 0x09b1,\r\n 0x09b3,\r\n 0x09b5,\r\n 0x09ba,\r\n 0x09bb,\r\n 0x09bd,\r\n 0x09bd,\r\n 0x09c5,\r\n 0x09c6,\r\n 0x09c9,\r\n 0x09ca,\r\n 0x09ce,\r\n 0x09d6,\r\n 0x09d8,\r\n 0x09db,\r\n 0x09de,\r\n 0x09de,\r\n 0x09e4,\r\n 0x09e5,\r\n 0x09fb,\r\n 0x0a01,\r\n 0x0a03,\r\n 0x0a04,\r\n 0x0a0b,\r\n 0x0a0e,\r\n 0x0a11,\r\n 0x0a12,\r\n 0x0a29,\r\n 0x0a29,\r\n 0x0a31,\r\n 0x0a31,\r\n 0x0a34,\r\n 0x0a34,\r\n 0x0a37,\r\n 0x0a37,\r\n 0x0a3a,\r\n 0x0a3b,\r\n 0x0a3d,\r\n 0x0a3d,\r\n 0x0a43,\r\n 0x0a46,\r\n 0x0a49,\r\n 0x0a4a,\r\n 0x0a4e,\r\n 0x0a58,\r\n 0x0a5d,\r\n 0x0a5d,\r\n 0x0a5f,\r\n 0x0a65,\r\n 0x0a75,\r\n 0x0a80,\r\n 0x0a84,\r\n 0x0a84,\r\n 0x0a8c,\r\n 0x0a8c,\r\n 0x0a8e,\r\n 0x0a8e,\r\n 0x0a92,\r\n 0x0a92,\r\n 0x0aa9,\r\n 0x0aa9,\r\n 0x0ab1,\r\n 0x0ab1,\r\n 0x0ab4,\r\n 0x0ab4,\r\n 0x0aba,\r\n 0x0abb,\r\n 0x0ac6,\r\n 0x0ac6,\r\n 0x0aca,\r\n 0x0aca,\r\n 0x0ace,\r\n 0x0acf,\r\n 0x0ad1,\r\n 0x0adf,\r\n 0x0ae1,\r\n 0x0ae5,\r\n 0x0af0,\r\n 0x0b00,\r\n 0x0b04,\r\n 0x0b04,\r\n 0x0b0d,\r\n 0x0b0e,\r\n 0x0b11,\r\n 0x0b12,\r\n 0x0b29,\r\n 0x0b29,\r\n 0x0b31,\r\n 0x0b31,\r\n 0x0b34,\r\n 0x0b35,\r\n 0x0b3a,\r\n 0x0b3b,\r\n 0x0b44,\r\n 0x0b46,\r\n 0x0b49,\r\n 0x0b4a,\r\n 0x0b4e,\r\n 0x0b55,\r\n 0x0b58,\r\n 0x0b5b,\r\n 0x0b5e,\r\n 0x0b5e,\r\n 0x0b62,\r\n 0x0b65,\r\n 0x0b71,\r\n 0x0b81,\r\n 0x0b84,\r\n 0x0b84,\r\n 0x0b8b,\r\n 0x0b8d,\r\n 0x0b91,\r\n 0x0b91,\r\n 0x0b96,\r\n 0x0b98,\r\n 0x0b9b,\r\n 0x0b9b,\r\n 0x0b9d,\r\n 0x0b9d,\r\n 0x0ba0,\r\n 0x0ba2,\r\n 0x0ba5,\r\n 0x0ba7,\r\n 0x0bab,\r\n 0x0bad,\r\n 0x0bb6,\r\n 0x0bb6,\r\n 0x0bba,\r\n 0x0bbd,\r\n 0x0bc3,\r\n 0x0bc5,\r\n 0x0bc9,\r\n 0x0bc9,\r\n 0x0bce,\r\n 0x0bd6,\r\n 0x0bd8,\r\n 0x0be6,\r\n 0x0bf3,\r\n 0x0c00,\r\n 0x0c04,\r\n 0x0c04,\r\n 0x0c0d,\r\n 0x0c0d,\r\n 0x0c11,\r\n 0x0c11,\r\n 0x0c29,\r\n 0x0c29,\r\n 0x0c34,\r\n 0x0c34,\r\n 0x0c3a,\r\n 0x0c3d,\r\n 0x0c45,\r\n 0x0c45,\r\n 0x0c49,\r\n 0x0c49,\r\n 0x0c4e,\r\n 0x0c54,\r\n 0x0c57,\r\n 0x0c5f,\r\n 0x0c62,\r\n 0x0c65,\r\n 0x0c70,\r\n 0x0c81,\r\n 0x0c84,\r\n 0x0c84,\r\n 0x0c8d,\r\n 0x0c8d,\r\n 0x0c91,\r\n 0x0c91,\r\n 0x0ca9,\r\n 0x0ca9,\r\n 0x0cb4,\r\n 0x0cb4,\r\n 0x0cba,\r\n 0x0cbd,\r\n 0x0cc5,\r\n 0x0cc5,\r\n 0x0cc9,\r\n 0x0cc9,\r\n 0x0cce,\r\n 0x0cd4,\r\n 0x0cd7,\r\n 0x0cdd,\r\n 0x0cdf,\r\n 0x0cdf,\r\n 0x0ce2,\r\n 0x0ce5,\r\n 0x0cf0,\r\n 0x0d01,\r\n 0x0d04,\r\n 0x0d04,\r\n 0x0d0d,\r\n 0x0d0d,\r\n 0x0d11,\r\n 0x0d11,\r\n 0x0d29,\r\n 0x0d29,\r\n 0x0d3a,\r\n 0x0d3d,\r\n 0x0d44,\r\n 0x0d45,\r\n 0x0d49,\r\n 0x0d49,\r\n 0x0d4e,\r\n 0x0d56,\r\n 0x0d58,\r\n 0x0d5f,\r\n 0x0d62,\r\n 0x0d65,\r\n 0x0d70,\r\n 0x0d81,\r\n 0x0d84,\r\n 0x0d84,\r\n 0x0d97,\r\n 0x0d99,\r\n 0x0db2,\r\n 0x0db2,\r\n 0x0dbc,\r\n 0x0dbc,\r\n 0x0dbe,\r\n 0x0dbf,\r\n 0x0dc7,\r\n 0x0dc9,\r\n 0x0dcb,\r\n 0x0dce,\r\n 0x0dd5,\r\n 0x0dd5,\r\n 0x0dd7,\r\n 0x0dd7,\r\n 0x0de0,\r\n 0x0df1,\r\n 0x0df5,\r\n 0x0e00,\r\n 0x0e3b,\r\n 0x0e3e,\r\n 0x0e5c,\r\n 0x0e80,\r\n 0x0e83,\r\n 0x0e83,\r\n 0x0e85,\r\n 0x0e86,\r\n 0x0e89,\r\n 0x0e89,\r\n 0x0e8b,\r\n 0x0e8c,\r\n 0x0e8e,\r\n 0x0e93,\r\n 0x0e98,\r\n 0x0e98,\r\n 0x0ea0,\r\n 0x0ea0,\r\n 0x0ea4,\r\n 0x0ea4,\r\n 0x0ea6,\r\n 0x0ea6,\r\n 0x0ea8,\r\n 0x0ea9,\r\n 0x0eac,\r\n 0x0eac,\r\n 0x0eba,\r\n 0x0eba,\r\n 0x0ebe,\r\n 0x0ebf,\r\n 0x0ec5,\r\n 0x0ec5,\r\n 0x0ec7,\r\n 0x0ec7,\r\n 0x0ece,\r\n 0x0ecf,\r\n 0x0eda,\r\n 0x0edb,\r\n 0x0ede,\r\n 0x0eff,\r\n 0x0f48,\r\n 0x0f48,\r\n 0x0f6b,\r\n 0x0f70,\r\n 0x0f8c,\r\n 0x0f8f,\r\n 0x0f98,\r\n 0x0f98,\r\n 0x0fbd,\r\n 0x0fbd,\r\n 0x0fcd,\r\n 0x0fce,\r\n 0x0fd0,\r\n 0x0fff,\r\n 0x1022,\r\n 0x1022,\r\n 0x1028,\r\n 0x1028,\r\n 0x102b,\r\n 0x102b,\r\n 0x1033,\r\n 0x1035,\r\n 0x103a,\r\n 0x103f,\r\n 0x105a,\r\n 0x109f,\r\n 0x10c6,\r\n 0x10cf,\r\n 0x10f9,\r\n 0x10fa,\r\n 0x10fc,\r\n 0x10ff,\r\n 0x115a,\r\n 0x115e,\r\n 0x11a3,\r\n 0x11a7,\r\n 0x11fa,\r\n 0x11ff,\r\n 0x1207,\r\n 0x1207,\r\n 0x1247,\r\n 0x1247,\r\n 0x1249,\r\n 0x1249,\r\n 0x124e,\r\n 0x124f,\r\n 0x1257,\r\n 0x1257,\r\n 0x1259,\r\n 0x1259,\r\n 0x125e,\r\n 0x125f,\r\n 0x1287,\r\n 0x1287,\r\n 0x1289,\r\n 0x1289,\r\n 0x128e,\r\n 0x128f,\r\n 0x12af,\r\n 0x12af,\r\n 0x12b1,\r\n 0x12b1,\r\n 0x12b6,\r\n 0x12b7,\r\n 0x12bf,\r\n 0x12bf,\r\n 0x12c1,\r\n 0x12c1,\r\n 0x12c6,\r\n 0x12c7,\r\n 0x12cf,\r\n 0x12cf,\r\n 0x12d7,\r\n 0x12d7,\r\n 0x12ef,\r\n 0x12ef,\r\n 0x130f,\r\n 0x130f,\r\n 0x1311,\r\n 0x1311,\r\n 0x1316,\r\n 0x1317,\r\n 0x131f,\r\n 0x131f,\r\n 0x1347,\r\n 0x1347,\r\n 0x135b,\r\n 0x1360,\r\n 0x137d,\r\n 0x139f,\r\n 0x13f5,\r\n 0x1400,\r\n 0x1677,\r\n 0x167f,\r\n 0x169d,\r\n 0x169f,\r\n 0x16f1,\r\n 0x16ff,\r\n 0x170d,\r\n 0x170d,\r\n 0x1715,\r\n 0x171f,\r\n 0x1737,\r\n 0x173f,\r\n 0x1754,\r\n 0x175f,\r\n 0x176d,\r\n 0x176d,\r\n 0x1771,\r\n 0x1771,\r\n 0x1774,\r\n 0x177f,\r\n 0x17dd,\r\n 0x17df,\r\n 0x17ea,\r\n 0x17ff,\r\n 0x180f,\r\n 0x180f,\r\n 0x181a,\r\n 0x181f,\r\n 0x1878,\r\n 0x187f,\r\n 0x18aa,\r\n 0x1dff,\r\n 0x1e9c,\r\n 0x1e9f,\r\n 0x1efa,\r\n 0x1eff,\r\n 0x1f16,\r\n 0x1f17,\r\n 0x1f1e,\r\n 0x1f1f,\r\n 0x1f46,\r\n 0x1f47,\r\n 0x1f4e,\r\n 0x1f4f,\r\n 0x1f58,\r\n 0x1f58,\r\n 0x1f5a,\r\n 0x1f5a,\r\n 0x1f5c,\r\n 0x1f5c,\r\n 0x1f5e,\r\n 0x1f5e,\r\n 0x1f7e,\r\n 0x1f7f,\r\n 0x1fb5,\r\n 0x1fb5,\r\n 0x1fc5,\r\n 0x1fc5,\r\n 0x1fd4,\r\n 0x1fd5,\r\n 0x1fdc,\r\n 0x1fdc,\r\n 0x1ff0,\r\n 0x1ff1,\r\n 0x1ff5,\r\n 0x1ff5,\r\n 0x1fff,\r\n 0x1fff,\r\n 0x2053,\r\n 0x2056,\r\n 0x2058,\r\n 0x205e,\r\n 0x2064,\r\n 0x2069,\r\n 0x2072,\r\n 0x2073,\r\n 0x208f,\r\n 0x209f,\r\n 0x20b2,\r\n 0x20cf,\r\n 0x20eb,\r\n 0x20ff,\r\n 0x213b,\r\n 0x213c,\r\n 0x214c,\r\n 0x2152,\r\n 0x2184,\r\n 0x218f,\r\n 0x23cf,\r\n 0x23ff,\r\n 0x2427,\r\n 0x243f,\r\n 0x244b,\r\n 0x245f,\r\n 0x24ff,\r\n 0x24ff,\r\n 0x2614,\r\n 0x2615,\r\n 0x2618,\r\n 0x2618,\r\n 0x267e,\r\n 0x267f,\r\n 0x268a,\r\n 0x2700,\r\n 0x2705,\r\n 0x2705,\r\n 0x270a,\r\n 0x270b,\r\n 0x2728,\r\n 0x2728,\r\n 0x274c,\r\n 0x274c,\r\n 0x274e,\r\n 0x274e,\r\n 0x2753,\r\n 0x2755,\r\n 0x2757,\r\n 0x2757,\r\n 0x275f,\r\n 0x2760,\r\n 0x2795,\r\n 0x2797,\r\n 0x27b0,\r\n 0x27b0,\r\n 0x27bf,\r\n 0x27cf,\r\n 0x27ec,\r\n 0x27ef,\r\n 0x2b00,\r\n 0x2e7f,\r\n 0x2e9a,\r\n 0x2e9a,\r\n 0x2ef4,\r\n 0x2eff,\r\n 0x2fd6,\r\n 0x2fef,\r\n 0x2ffc,\r\n 0x2fff,\r\n 0x3040,\r\n 0x3040,\r\n 0x3097,\r\n 0x3098,\r\n 0x3100,\r\n 0x3104,\r\n 0x312d,\r\n 0x3130,\r\n 0x318f,\r\n 0x318f,\r\n 0x31b8,\r\n 0x31ef,\r\n 0x321d,\r\n 0x321f,\r\n 0x3244,\r\n 0x3250,\r\n 0x327c,\r\n 0x327e,\r\n 0x32cc,\r\n 0x32cf,\r\n 0x32ff,\r\n 0x32ff,\r\n 0x3377,\r\n 0x337a,\r\n 0x33de,\r\n 0x33df,\r\n 0x33ff,\r\n 0x33ff,\r\n 0x4db6,\r\n 0x4dff,\r\n 0x9fa6,\r\n 0x9fff,\r\n 0xa48d,\r\n 0xa48f,\r\n 0xa4c7,\r\n 0xabff,\r\n 0xd7a4,\r\n 0xd7ff,\r\n 0xfa2e,\r\n 0xfa2f,\r\n 0xfa6b,\r\n 0xfaff,\r\n 0xfb07,\r\n 0xfb12,\r\n 0xfb18,\r\n 0xfb1c,\r\n 0xfb37,\r\n 0xfb37,\r\n 0xfb3d,\r\n 0xfb3d,\r\n 0xfb3f,\r\n 0xfb3f,\r\n 0xfb42,\r\n 0xfb42,\r\n 0xfb45,\r\n 0xfb45,\r\n 0xfbb2,\r\n 0xfbd2,\r\n 0xfd40,\r\n 0xfd4f,\r\n 0xfd90,\r\n 0xfd91,\r\n 0xfdc8,\r\n 0xfdcf,\r\n 0xfdfd,\r\n 0xfdff,\r\n 0xfe10,\r\n 0xfe1f,\r\n 0xfe24,\r\n 0xfe2f,\r\n 0xfe47,\r\n 0xfe48,\r\n 0xfe53,\r\n 0xfe53,\r\n 0xfe67,\r\n 0xfe67,\r\n 0xfe6c,\r\n 0xfe6f,\r\n 0xfe75,\r\n 0xfe75,\r\n 0xfefd,\r\n 0xfefe,\r\n 0xff00,\r\n 0xff00,\r\n 0xffbf,\r\n 0xffc1,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffd0,\r\n 0xffd1,\r\n 0xffd8,\r\n 0xffd9,\r\n 0xffdd,\r\n 0xffdf,\r\n 0xffe7,\r\n 0xffe7,\r\n 0xffef,\r\n 0xfff8,\r\n 0x10000,\r\n 0x102ff,\r\n 0x1031f,\r\n 0x1031f,\r\n 0x10324,\r\n 0x1032f,\r\n 0x1034b,\r\n 0x103ff,\r\n 0x10426,\r\n 0x10427,\r\n 0x1044e,\r\n 0x1cfff,\r\n 0x1d0f6,\r\n 0x1d0ff,\r\n 0x1d127,\r\n 0x1d129,\r\n 0x1d1de,\r\n 0x1d3ff,\r\n 0x1d455,\r\n 0x1d455,\r\n 0x1d49d,\r\n 0x1d49d,\r\n 0x1d4a0,\r\n 0x1d4a1,\r\n 0x1d4a3,\r\n 0x1d4a4,\r\n 0x1d4a7,\r\n 0x1d4a8,\r\n 0x1d4ad,\r\n 0x1d4ad,\r\n 0x1d4ba,\r\n 0x1d4ba,\r\n 0x1d4bc,\r\n 0x1d4bc,\r\n 0x1d4c1,\r\n 0x1d4c1,\r\n 0x1d4c4,\r\n 0x1d4c4,\r\n 0x1d506,\r\n 0x1d506,\r\n 0x1d50b,\r\n 0x1d50c,\r\n 0x1d515,\r\n 0x1d515,\r\n 0x1d51d,\r\n 0x1d51d,\r\n 0x1d53a,\r\n 0x1d53a,\r\n 0x1d53f,\r\n 0x1d53f,\r\n 0x1d545,\r\n 0x1d545,\r\n 0x1d547,\r\n 0x1d549,\r\n 0x1d551,\r\n 0x1d551,\r\n 0x1d6a4,\r\n 0x1d6a7,\r\n 0x1d7ca,\r\n 0x1d7cd,\r\n 0x1d800,\r\n 0x1fffd,\r\n 0x2a6d7,\r\n 0x2f7ff,\r\n 0x2fa1e,\r\n 0x2fffd,\r\n 0x30000,\r\n 0x3fffd,\r\n 0x40000,\r\n 0x4fffd,\r\n 0x50000,\r\n 0x5fffd,\r\n 0x60000,\r\n 0x6fffd,\r\n 0x70000,\r\n 0x7fffd,\r\n 0x80000,\r\n 0x8fffd,\r\n 0x90000,\r\n 0x9fffd,\r\n 0xa0000,\r\n 0xafffd,\r\n 0xb0000,\r\n 0xbfffd,\r\n 0xc0000,\r\n 0xcfffd,\r\n 0xd0000,\r\n 0xdfffd,\r\n 0xe0000,\r\n 0xe0000,\r\n 0xe0002,\r\n 0xe001f,\r\n 0xe0080,\r\n 0xefffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isUnassignedCodePoint = character =>\r\n inRange(character, unassigned_code_points);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\r\nconst commonly_mapped_to_nothing = [\r\n 0x00ad,\r\n 0x00ad,\r\n 0x034f,\r\n 0x034f,\r\n 0x1806,\r\n 0x1806,\r\n 0x180b,\r\n 0x180b,\r\n 0x180c,\r\n 0x180c,\r\n 0x180d,\r\n 0x180d,\r\n 0x200b,\r\n 0x200b,\r\n 0x200c,\r\n 0x200c,\r\n 0x200d,\r\n 0x200d,\r\n 0x2060,\r\n 0x2060,\r\n 0xfe00,\r\n 0xfe00,\r\n 0xfe01,\r\n 0xfe01,\r\n 0xfe02,\r\n 0xfe02,\r\n 0xfe03,\r\n 0xfe03,\r\n 0xfe04,\r\n 0xfe04,\r\n 0xfe05,\r\n 0xfe05,\r\n 0xfe06,\r\n 0xfe06,\r\n 0xfe07,\r\n 0xfe07,\r\n 0xfe08,\r\n 0xfe08,\r\n 0xfe09,\r\n 0xfe09,\r\n 0xfe0a,\r\n 0xfe0a,\r\n 0xfe0b,\r\n 0xfe0b,\r\n 0xfe0c,\r\n 0xfe0c,\r\n 0xfe0d,\r\n 0xfe0d,\r\n 0xfe0e,\r\n 0xfe0e,\r\n 0xfe0f,\r\n 0xfe0f,\r\n 0xfeff,\r\n 0xfeff\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isCommonlyMappedToNothing = character =>\r\n inRange(character, commonly_mapped_to_nothing);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\r\nconst non_ASCII_space_characters = [\r\n 0x00a0,\r\n 0x00a0 /* NO-BREAK SPACE */,\r\n 0x1680,\r\n 0x1680 /* OGHAM SPACE MARK */,\r\n 0x2000,\r\n 0x2000 /* EN QUAD */,\r\n 0x2001,\r\n 0x2001 /* EM QUAD */,\r\n 0x2002,\r\n 0x2002 /* EN SPACE */,\r\n 0x2003,\r\n 0x2003 /* EM SPACE */,\r\n 0x2004,\r\n 0x2004 /* THREE-PER-EM SPACE */,\r\n 0x2005,\r\n 0x2005 /* FOUR-PER-EM SPACE */,\r\n 0x2006,\r\n 0x2006 /* SIX-PER-EM SPACE */,\r\n 0x2007,\r\n 0x2007 /* FIGURE SPACE */,\r\n 0x2008,\r\n 0x2008 /* PUNCTUATION SPACE */,\r\n 0x2009,\r\n 0x2009 /* THIN SPACE */,\r\n 0x200a,\r\n 0x200a /* HAIR SPACE */,\r\n 0x200b,\r\n 0x200b /* ZERO WIDTH SPACE */,\r\n 0x202f,\r\n 0x202f /* NARROW NO-BREAK SPACE */,\r\n 0x205f,\r\n 0x205f /* MEDIUM MATHEMATICAL SPACE */,\r\n 0x3000,\r\n 0x3000 /* IDEOGRAPHIC SPACE */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isNonASCIISpaceCharacter = character =>\r\n inRange(character, non_ASCII_space_characters);\r\n\r\n// prettier-ignore-start\r\nconst non_ASCII_controls_characters = [\r\n /**\r\n * C.2.2 Non-ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n */\r\n 0x0080,\r\n 0x009f /* [CONTROL CHARACTERS] */,\r\n 0x06dd,\r\n 0x06dd /* ARABIC END OF AYAH */,\r\n 0x070f,\r\n 0x070f /* SYRIAC ABBREVIATION MARK */,\r\n 0x180e,\r\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */,\r\n 0x200c,\r\n 0x200c /* ZERO WIDTH NON-JOINER */,\r\n 0x200d,\r\n 0x200d /* ZERO WIDTH JOINER */,\r\n 0x2028,\r\n 0x2028 /* LINE SEPARATOR */,\r\n 0x2029,\r\n 0x2029 /* PARAGRAPH SEPARATOR */,\r\n 0x2060,\r\n 0x2060 /* WORD JOINER */,\r\n 0x2061,\r\n 0x2061 /* FUNCTION APPLICATION */,\r\n 0x2062,\r\n 0x2062 /* INVISIBLE TIMES */,\r\n 0x2063,\r\n 0x2063 /* INVISIBLE SEPARATOR */,\r\n 0x206a,\r\n 0x206f /* [CONTROL CHARACTERS] */,\r\n 0xfeff,\r\n 0xfeff /* ZERO WIDTH NO-BREAK SPACE */,\r\n 0xfff9,\r\n 0xfffc /* [CONTROL CHARACTERS] */,\r\n 0x1d173,\r\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */\r\n];\r\n\r\nconst non_character_codepoints = [\r\n /**\r\n * C.4 Non-character code points\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n */\r\n 0xfdd0,\r\n 0xfdef /* [NONCHARACTER CODE POINTS] */,\r\n 0xfffe,\r\n 0xffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x1fffe,\r\n 0x1ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x2fffe,\r\n 0x2ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x3fffe,\r\n 0x3ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x4fffe,\r\n 0x4ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x5fffe,\r\n 0x5ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x6fffe,\r\n 0x6ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x7fffe,\r\n 0x7ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x8fffe,\r\n 0x8ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x9fffe,\r\n 0x9ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xafffe,\r\n 0xaffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xbfffe,\r\n 0xbffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xcfffe,\r\n 0xcffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xdfffe,\r\n 0xdffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xefffe,\r\n 0xeffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x10fffe,\r\n 0x10ffff /* [NONCHARACTER CODE POINTS] */\r\n];\r\n\r\n/**\r\n * 2.3. Prohibited Output\r\n */\r\nconst prohibited_characters = [\r\n /**\r\n * C.2.1 ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n */\r\n 0,\r\n 0x001f /* [CONTROL CHARACTERS] */,\r\n 0x007f,\r\n 0x007f /* DELETE */,\r\n\r\n /**\r\n * C.8 Change display properties or are deprecated\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n */\r\n 0x0340,\r\n 0x0340 /* COMBINING GRAVE TONE MARK */,\r\n 0x0341,\r\n 0x0341 /* COMBINING ACUTE TONE MARK */,\r\n 0x200e,\r\n 0x200e /* LEFT-TO-RIGHT MARK */,\r\n 0x200f,\r\n 0x200f /* RIGHT-TO-LEFT MARK */,\r\n 0x202a,\r\n 0x202a /* LEFT-TO-RIGHT EMBEDDING */,\r\n 0x202b,\r\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */,\r\n 0x202c,\r\n 0x202c /* POP DIRECTIONAL FORMATTING */,\r\n 0x202d,\r\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */,\r\n 0x202e,\r\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */,\r\n 0x206a,\r\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */,\r\n 0x206b,\r\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */,\r\n 0x206c,\r\n 0x206c /* INHIBIT ARABIC FORM SHAPING */,\r\n 0x206d,\r\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */,\r\n 0x206e,\r\n 0x206e /* NATIONAL DIGIT SHAPES */,\r\n 0x206f,\r\n 0x206f /* NOMINAL DIGIT SHAPES */,\r\n\r\n /**\r\n * C.7 Inappropriate for canonical representation\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n */\r\n 0x2ff0,\r\n 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\r\n\r\n /**\r\n * C.5 Surrogate codes\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n */\r\n 0xd800,\r\n 0xdfff,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n 0xe000,\r\n 0xf8ff /* [PRIVATE USE, PLANE 0] */,\r\n\r\n /**\r\n * C.6 Inappropriate for plain text\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n */\r\n 0xfff9,\r\n 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */,\r\n 0xfffa,\r\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */,\r\n 0xfffb,\r\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */,\r\n 0xfffc,\r\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */,\r\n 0xfffd,\r\n 0xfffd /* REPLACEMENT CHARACTER */,\r\n\r\n /**\r\n * C.9 Tagging characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n */\r\n 0xe0001,\r\n 0xe0001 /* LANGUAGE TAG */,\r\n 0xe0020,\r\n 0xe007f /* [TAGGING CHARACTERS] */,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n\r\n 0xf0000,\r\n 0xffffd /* [PRIVATE USE, PLANE 15] */,\r\n 0x100000,\r\n 0x10fffd /* [PRIVATE USE, PLANE 16] */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isProhibitedCharacter = character =>\r\n inRange(character, non_ASCII_space_characters) ||\r\n inRange(character, prohibited_characters) ||\r\n inRange(character, non_ASCII_controls_characters) ||\r\n inRange(character, non_character_codepoints);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\r\nconst bidirectional_r_al = [\r\n 0x05be,\r\n 0x05be,\r\n 0x05c0,\r\n 0x05c0,\r\n 0x05c3,\r\n 0x05c3,\r\n 0x05d0,\r\n 0x05ea,\r\n 0x05f0,\r\n 0x05f4,\r\n 0x061b,\r\n 0x061b,\r\n 0x061f,\r\n 0x061f,\r\n 0x0621,\r\n 0x063a,\r\n 0x0640,\r\n 0x064a,\r\n 0x066d,\r\n 0x066f,\r\n 0x0671,\r\n 0x06d5,\r\n 0x06dd,\r\n 0x06dd,\r\n 0x06e5,\r\n 0x06e6,\r\n 0x06fa,\r\n 0x06fe,\r\n 0x0700,\r\n 0x070d,\r\n 0x0710,\r\n 0x0710,\r\n 0x0712,\r\n 0x072c,\r\n 0x0780,\r\n 0x07a5,\r\n 0x07b1,\r\n 0x07b1,\r\n 0x200f,\r\n 0x200f,\r\n 0xfb1d,\r\n 0xfb1d,\r\n 0xfb1f,\r\n 0xfb28,\r\n 0xfb2a,\r\n 0xfb36,\r\n 0xfb38,\r\n 0xfb3c,\r\n 0xfb3e,\r\n 0xfb3e,\r\n 0xfb40,\r\n 0xfb41,\r\n 0xfb43,\r\n 0xfb44,\r\n 0xfb46,\r\n 0xfbb1,\r\n 0xfbd3,\r\n 0xfd3d,\r\n 0xfd50,\r\n 0xfd8f,\r\n 0xfd92,\r\n 0xfdc7,\r\n 0xfdf0,\r\n 0xfdfc,\r\n 0xfe70,\r\n 0xfe74,\r\n 0xfe76,\r\n 0xfefc\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalRAL = character => inRange(character, bidirectional_r_al);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\r\nconst bidirectional_l = [\r\n 0x0041,\r\n 0x005a,\r\n 0x0061,\r\n 0x007a,\r\n 0x00aa,\r\n 0x00aa,\r\n 0x00b5,\r\n 0x00b5,\r\n 0x00ba,\r\n 0x00ba,\r\n 0x00c0,\r\n 0x00d6,\r\n 0x00d8,\r\n 0x00f6,\r\n 0x00f8,\r\n 0x0220,\r\n 0x0222,\r\n 0x0233,\r\n 0x0250,\r\n 0x02ad,\r\n 0x02b0,\r\n 0x02b8,\r\n 0x02bb,\r\n 0x02c1,\r\n 0x02d0,\r\n 0x02d1,\r\n 0x02e0,\r\n 0x02e4,\r\n 0x02ee,\r\n 0x02ee,\r\n 0x037a,\r\n 0x037a,\r\n 0x0386,\r\n 0x0386,\r\n 0x0388,\r\n 0x038a,\r\n 0x038c,\r\n 0x038c,\r\n 0x038e,\r\n 0x03a1,\r\n 0x03a3,\r\n 0x03ce,\r\n 0x03d0,\r\n 0x03f5,\r\n 0x0400,\r\n 0x0482,\r\n 0x048a,\r\n 0x04ce,\r\n 0x04d0,\r\n 0x04f5,\r\n 0x04f8,\r\n 0x04f9,\r\n 0x0500,\r\n 0x050f,\r\n 0x0531,\r\n 0x0556,\r\n 0x0559,\r\n 0x055f,\r\n 0x0561,\r\n 0x0587,\r\n 0x0589,\r\n 0x0589,\r\n 0x0903,\r\n 0x0903,\r\n 0x0905,\r\n 0x0939,\r\n 0x093d,\r\n 0x0940,\r\n 0x0949,\r\n 0x094c,\r\n 0x0950,\r\n 0x0950,\r\n 0x0958,\r\n 0x0961,\r\n 0x0964,\r\n 0x0970,\r\n 0x0982,\r\n 0x0983,\r\n 0x0985,\r\n 0x098c,\r\n 0x098f,\r\n 0x0990,\r\n 0x0993,\r\n 0x09a8,\r\n 0x09aa,\r\n 0x09b0,\r\n 0x09b2,\r\n 0x09b2,\r\n 0x09b6,\r\n 0x09b9,\r\n 0x09be,\r\n 0x09c0,\r\n 0x09c7,\r\n 0x09c8,\r\n 0x09cb,\r\n 0x09cc,\r\n 0x09d7,\r\n 0x09d7,\r\n 0x09dc,\r\n 0x09dd,\r\n 0x09df,\r\n 0x09e1,\r\n 0x09e6,\r\n 0x09f1,\r\n 0x09f4,\r\n 0x09fa,\r\n 0x0a05,\r\n 0x0a0a,\r\n 0x0a0f,\r\n 0x0a10,\r\n 0x0a13,\r\n 0x0a28,\r\n 0x0a2a,\r\n 0x0a30,\r\n 0x0a32,\r\n 0x0a33,\r\n 0x0a35,\r\n 0x0a36,\r\n 0x0a38,\r\n 0x0a39,\r\n 0x0a3e,\r\n 0x0a40,\r\n 0x0a59,\r\n 0x0a5c,\r\n 0x0a5e,\r\n 0x0a5e,\r\n 0x0a66,\r\n 0x0a6f,\r\n 0x0a72,\r\n 0x0a74,\r\n 0x0a83,\r\n 0x0a83,\r\n 0x0a85,\r\n 0x0a8b,\r\n 0x0a8d,\r\n 0x0a8d,\r\n 0x0a8f,\r\n 0x0a91,\r\n 0x0a93,\r\n 0x0aa8,\r\n 0x0aaa,\r\n 0x0ab0,\r\n 0x0ab2,\r\n 0x0ab3,\r\n 0x0ab5,\r\n 0x0ab9,\r\n 0x0abd,\r\n 0x0ac0,\r\n 0x0ac9,\r\n 0x0ac9,\r\n 0x0acb,\r\n 0x0acc,\r\n 0x0ad0,\r\n 0x0ad0,\r\n 0x0ae0,\r\n 0x0ae0,\r\n 0x0ae6,\r\n 0x0aef,\r\n 0x0b02,\r\n 0x0b03,\r\n 0x0b05,\r\n 0x0b0c,\r\n 0x0b0f,\r\n 0x0b10,\r\n 0x0b13,\r\n 0x0b28,\r\n 0x0b2a,\r\n 0x0b30,\r\n 0x0b32,\r\n 0x0b33,\r\n 0x0b36,\r\n 0x0b39,\r\n 0x0b3d,\r\n 0x0b3e,\r\n 0x0b40,\r\n 0x0b40,\r\n 0x0b47,\r\n 0x0b48,\r\n 0x0b4b,\r\n 0x0b4c,\r\n 0x0b57,\r\n 0x0b57,\r\n 0x0b5c,\r\n 0x0b5d,\r\n 0x0b5f,\r\n 0x0b61,\r\n 0x0b66,\r\n 0x0b70,\r\n 0x0b83,\r\n 0x0b83,\r\n 0x0b85,\r\n 0x0b8a,\r\n 0x0b8e,\r\n 0x0b90,\r\n 0x0b92,\r\n 0x0b95,\r\n 0x0b99,\r\n 0x0b9a,\r\n 0x0b9c,\r\n 0x0b9c,\r\n 0x0b9e,\r\n 0x0b9f,\r\n 0x0ba3,\r\n 0x0ba4,\r\n 0x0ba8,\r\n 0x0baa,\r\n 0x0bae,\r\n 0x0bb5,\r\n 0x0bb7,\r\n 0x0bb9,\r\n 0x0bbe,\r\n 0x0bbf,\r\n 0x0bc1,\r\n 0x0bc2,\r\n 0x0bc6,\r\n 0x0bc8,\r\n 0x0bca,\r\n 0x0bcc,\r\n 0x0bd7,\r\n 0x0bd7,\r\n 0x0be7,\r\n 0x0bf2,\r\n 0x0c01,\r\n 0x0c03,\r\n 0x0c05,\r\n 0x0c0c,\r\n 0x0c0e,\r\n 0x0c10,\r\n 0x0c12,\r\n 0x0c28,\r\n 0x0c2a,\r\n 0x0c33,\r\n 0x0c35,\r\n 0x0c39,\r\n 0x0c41,\r\n 0x0c44,\r\n 0x0c60,\r\n 0x0c61,\r\n 0x0c66,\r\n 0x0c6f,\r\n 0x0c82,\r\n 0x0c83,\r\n 0x0c85,\r\n 0x0c8c,\r\n 0x0c8e,\r\n 0x0c90,\r\n 0x0c92,\r\n 0x0ca8,\r\n 0x0caa,\r\n 0x0cb3,\r\n 0x0cb5,\r\n 0x0cb9,\r\n 0x0cbe,\r\n 0x0cbe,\r\n 0x0cc0,\r\n 0x0cc4,\r\n 0x0cc7,\r\n 0x0cc8,\r\n 0x0cca,\r\n 0x0ccb,\r\n 0x0cd5,\r\n 0x0cd6,\r\n 0x0cde,\r\n 0x0cde,\r\n 0x0ce0,\r\n 0x0ce1,\r\n 0x0ce6,\r\n 0x0cef,\r\n 0x0d02,\r\n 0x0d03,\r\n 0x0d05,\r\n 0x0d0c,\r\n 0x0d0e,\r\n 0x0d10,\r\n 0x0d12,\r\n 0x0d28,\r\n 0x0d2a,\r\n 0x0d39,\r\n 0x0d3e,\r\n 0x0d40,\r\n 0x0d46,\r\n 0x0d48,\r\n 0x0d4a,\r\n 0x0d4c,\r\n 0x0d57,\r\n 0x0d57,\r\n 0x0d60,\r\n 0x0d61,\r\n 0x0d66,\r\n 0x0d6f,\r\n 0x0d82,\r\n 0x0d83,\r\n 0x0d85,\r\n 0x0d96,\r\n 0x0d9a,\r\n 0x0db1,\r\n 0x0db3,\r\n 0x0dbb,\r\n 0x0dbd,\r\n 0x0dbd,\r\n 0x0dc0,\r\n 0x0dc6,\r\n 0x0dcf,\r\n 0x0dd1,\r\n 0x0dd8,\r\n 0x0ddf,\r\n 0x0df2,\r\n 0x0df4,\r\n 0x0e01,\r\n 0x0e30,\r\n 0x0e32,\r\n 0x0e33,\r\n 0x0e40,\r\n 0x0e46,\r\n 0x0e4f,\r\n 0x0e5b,\r\n 0x0e81,\r\n 0x0e82,\r\n 0x0e84,\r\n 0x0e84,\r\n 0x0e87,\r\n 0x0e88,\r\n 0x0e8a,\r\n 0x0e8a,\r\n 0x0e8d,\r\n 0x0e8d,\r\n 0x0e94,\r\n 0x0e97,\r\n 0x0e99,\r\n 0x0e9f,\r\n 0x0ea1,\r\n 0x0ea3,\r\n 0x0ea5,\r\n 0x0ea5,\r\n 0x0ea7,\r\n 0x0ea7,\r\n 0x0eaa,\r\n 0x0eab,\r\n 0x0ead,\r\n 0x0eb0,\r\n 0x0eb2,\r\n 0x0eb3,\r\n 0x0ebd,\r\n 0x0ebd,\r\n 0x0ec0,\r\n 0x0ec4,\r\n 0x0ec6,\r\n 0x0ec6,\r\n 0x0ed0,\r\n 0x0ed9,\r\n 0x0edc,\r\n 0x0edd,\r\n 0x0f00,\r\n 0x0f17,\r\n 0x0f1a,\r\n 0x0f34,\r\n 0x0f36,\r\n 0x0f36,\r\n 0x0f38,\r\n 0x0f38,\r\n 0x0f3e,\r\n 0x0f47,\r\n 0x0f49,\r\n 0x0f6a,\r\n 0x0f7f,\r\n 0x0f7f,\r\n 0x0f85,\r\n 0x0f85,\r\n 0x0f88,\r\n 0x0f8b,\r\n 0x0fbe,\r\n 0x0fc5,\r\n 0x0fc7,\r\n 0x0fcc,\r\n 0x0fcf,\r\n 0x0fcf,\r\n 0x1000,\r\n 0x1021,\r\n 0x1023,\r\n 0x1027,\r\n 0x1029,\r\n 0x102a,\r\n 0x102c,\r\n 0x102c,\r\n 0x1031,\r\n 0x1031,\r\n 0x1038,\r\n 0x1038,\r\n 0x1040,\r\n 0x1057,\r\n 0x10a0,\r\n 0x10c5,\r\n 0x10d0,\r\n 0x10f8,\r\n 0x10fb,\r\n 0x10fb,\r\n 0x1100,\r\n 0x1159,\r\n 0x115f,\r\n 0x11a2,\r\n 0x11a8,\r\n 0x11f9,\r\n 0x1200,\r\n 0x1206,\r\n 0x1208,\r\n 0x1246,\r\n 0x1248,\r\n 0x1248,\r\n 0x124a,\r\n 0x124d,\r\n 0x1250,\r\n 0x1256,\r\n 0x1258,\r\n 0x1258,\r\n 0x125a,\r\n 0x125d,\r\n 0x1260,\r\n 0x1286,\r\n 0x1288,\r\n 0x1288,\r\n 0x128a,\r\n 0x128d,\r\n 0x1290,\r\n 0x12ae,\r\n 0x12b0,\r\n 0x12b0,\r\n 0x12b2,\r\n 0x12b5,\r\n 0x12b8,\r\n 0x12be,\r\n 0x12c0,\r\n 0x12c0,\r\n 0x12c2,\r\n 0x12c5,\r\n 0x12c8,\r\n 0x12ce,\r\n 0x12d0,\r\n 0x12d6,\r\n 0x12d8,\r\n 0x12ee,\r\n 0x12f0,\r\n 0x130e,\r\n 0x1310,\r\n 0x1310,\r\n 0x1312,\r\n 0x1315,\r\n 0x1318,\r\n 0x131e,\r\n 0x1320,\r\n 0x1346,\r\n 0x1348,\r\n 0x135a,\r\n 0x1361,\r\n 0x137c,\r\n 0x13a0,\r\n 0x13f4,\r\n 0x1401,\r\n 0x1676,\r\n 0x1681,\r\n 0x169a,\r\n 0x16a0,\r\n 0x16f0,\r\n 0x1700,\r\n 0x170c,\r\n 0x170e,\r\n 0x1711,\r\n 0x1720,\r\n 0x1731,\r\n 0x1735,\r\n 0x1736,\r\n 0x1740,\r\n 0x1751,\r\n 0x1760,\r\n 0x176c,\r\n 0x176e,\r\n 0x1770,\r\n 0x1780,\r\n 0x17b6,\r\n 0x17be,\r\n 0x17c5,\r\n 0x17c7,\r\n 0x17c8,\r\n 0x17d4,\r\n 0x17da,\r\n 0x17dc,\r\n 0x17dc,\r\n 0x17e0,\r\n 0x17e9,\r\n 0x1810,\r\n 0x1819,\r\n 0x1820,\r\n 0x1877,\r\n 0x1880,\r\n 0x18a8,\r\n 0x1e00,\r\n 0x1e9b,\r\n 0x1ea0,\r\n 0x1ef9,\r\n 0x1f00,\r\n 0x1f15,\r\n 0x1f18,\r\n 0x1f1d,\r\n 0x1f20,\r\n 0x1f45,\r\n 0x1f48,\r\n 0x1f4d,\r\n 0x1f50,\r\n 0x1f57,\r\n 0x1f59,\r\n 0x1f59,\r\n 0x1f5b,\r\n 0x1f5b,\r\n 0x1f5d,\r\n 0x1f5d,\r\n 0x1f5f,\r\n 0x1f7d,\r\n 0x1f80,\r\n 0x1fb4,\r\n 0x1fb6,\r\n 0x1fbc,\r\n 0x1fbe,\r\n 0x1fbe,\r\n 0x1fc2,\r\n 0x1fc4,\r\n 0x1fc6,\r\n 0x1fcc,\r\n 0x1fd0,\r\n 0x1fd3,\r\n 0x1fd6,\r\n 0x1fdb,\r\n 0x1fe0,\r\n 0x1fec,\r\n 0x1ff2,\r\n 0x1ff4,\r\n 0x1ff6,\r\n 0x1ffc,\r\n 0x200e,\r\n 0x200e,\r\n 0x2071,\r\n 0x2071,\r\n 0x207f,\r\n 0x207f,\r\n 0x2102,\r\n 0x2102,\r\n 0x2107,\r\n 0x2107,\r\n 0x210a,\r\n 0x2113,\r\n 0x2115,\r\n 0x2115,\r\n 0x2119,\r\n 0x211d,\r\n 0x2124,\r\n 0x2124,\r\n 0x2126,\r\n 0x2126,\r\n 0x2128,\r\n 0x2128,\r\n 0x212a,\r\n 0x212d,\r\n 0x212f,\r\n 0x2131,\r\n 0x2133,\r\n 0x2139,\r\n 0x213d,\r\n 0x213f,\r\n 0x2145,\r\n 0x2149,\r\n 0x2160,\r\n 0x2183,\r\n 0x2336,\r\n 0x237a,\r\n 0x2395,\r\n 0x2395,\r\n 0x249c,\r\n 0x24e9,\r\n 0x3005,\r\n 0x3007,\r\n 0x3021,\r\n 0x3029,\r\n 0x3031,\r\n 0x3035,\r\n 0x3038,\r\n 0x303c,\r\n 0x3041,\r\n 0x3096,\r\n 0x309d,\r\n 0x309f,\r\n 0x30a1,\r\n 0x30fa,\r\n 0x30fc,\r\n 0x30ff,\r\n 0x3105,\r\n 0x312c,\r\n 0x3131,\r\n 0x318e,\r\n 0x3190,\r\n 0x31b7,\r\n 0x31f0,\r\n 0x321c,\r\n 0x3220,\r\n 0x3243,\r\n 0x3260,\r\n 0x327b,\r\n 0x327f,\r\n 0x32b0,\r\n 0x32c0,\r\n 0x32cb,\r\n 0x32d0,\r\n 0x32fe,\r\n 0x3300,\r\n 0x3376,\r\n 0x337b,\r\n 0x33dd,\r\n 0x33e0,\r\n 0x33fe,\r\n 0x3400,\r\n 0x4db5,\r\n 0x4e00,\r\n 0x9fa5,\r\n 0xa000,\r\n 0xa48c,\r\n 0xac00,\r\n 0xd7a3,\r\n 0xd800,\r\n 0xfa2d,\r\n 0xfa30,\r\n 0xfa6a,\r\n 0xfb00,\r\n 0xfb06,\r\n 0xfb13,\r\n 0xfb17,\r\n 0xff21,\r\n 0xff3a,\r\n 0xff41,\r\n 0xff5a,\r\n 0xff66,\r\n 0xffbe,\r\n 0xffc2,\r\n 0xffc7,\r\n 0xffca,\r\n 0xffcf,\r\n 0xffd2,\r\n 0xffd7,\r\n 0xffda,\r\n 0xffdc,\r\n 0x10300,\r\n 0x1031e,\r\n 0x10320,\r\n 0x10323,\r\n 0x10330,\r\n 0x1034a,\r\n 0x10400,\r\n 0x10425,\r\n 0x10428,\r\n 0x1044d,\r\n 0x1d000,\r\n 0x1d0f5,\r\n 0x1d100,\r\n 0x1d126,\r\n 0x1d12a,\r\n 0x1d166,\r\n 0x1d16a,\r\n 0x1d172,\r\n 0x1d183,\r\n 0x1d184,\r\n 0x1d18c,\r\n 0x1d1a9,\r\n 0x1d1ae,\r\n 0x1d1dd,\r\n 0x1d400,\r\n 0x1d454,\r\n 0x1d456,\r\n 0x1d49c,\r\n 0x1d49e,\r\n 0x1d49f,\r\n 0x1d4a2,\r\n 0x1d4a2,\r\n 0x1d4a5,\r\n 0x1d4a6,\r\n 0x1d4a9,\r\n 0x1d4ac,\r\n 0x1d4ae,\r\n 0x1d4b9,\r\n 0x1d4bb,\r\n 0x1d4bb,\r\n 0x1d4bd,\r\n 0x1d4c0,\r\n 0x1d4c2,\r\n 0x1d4c3,\r\n 0x1d4c5,\r\n 0x1d505,\r\n 0x1d507,\r\n 0x1d50a,\r\n 0x1d50d,\r\n 0x1d514,\r\n 0x1d516,\r\n 0x1d51c,\r\n 0x1d51e,\r\n 0x1d539,\r\n 0x1d53b,\r\n 0x1d53e,\r\n 0x1d540,\r\n 0x1d544,\r\n 0x1d546,\r\n 0x1d546,\r\n 0x1d54a,\r\n 0x1d550,\r\n 0x1d552,\r\n 0x1d6a3,\r\n 0x1d6a8,\r\n 0x1d7c9,\r\n 0x20000,\r\n 0x2a6d6,\r\n 0x2f800,\r\n 0x2fa1d,\r\n 0xf0000,\r\n 0xffffd,\r\n 0x100000,\r\n 0x10fffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalL = character => inRange(character, bidirectional_l);\r\n\r\nexport {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n};\r\n","import {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n} from './lib/code-points';\r\n\r\n// 2.1. Mapping\r\n\r\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\r\nconst mapping2space = isNonASCIISpaceCharacter;\r\n\r\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\r\nconst mapping2nothing = isCommonlyMappedToNothing;\r\n\r\n// utils\r\nconst getCodePoint = character => character.codePointAt(0);\r\nconst first = x => x[0];\r\nconst last = x => x[x.length - 1];\r\n\r\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\r\nfunction toCodePoints(input) {\r\n const codepoints = [];\r\n const size = input.length;\r\n\r\n for (let i = 0; i < size; i += 1) {\r\n const before = input.charCodeAt(i);\r\n\r\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\r\n const next = input.charCodeAt(i + 1);\r\n\r\n if (next >= 0xdc00 && next <= 0xdfff) {\r\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\r\n i += 1;\r\n continue;\r\n }\r\n }\r\n\r\n codepoints.push(before);\r\n }\r\n\r\n return codepoints;\r\n}\r\n\r\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\r\nfunction saslprep(input, opts = {}) {\r\n if (typeof input !== 'string') {\r\n throw new TypeError('Expected string.');\r\n }\r\n\r\n if (input.length === 0) {\r\n return '';\r\n }\r\n\r\n // 1. Map\r\n const mapped_input = toCodePoints(input)\r\n // 1.1 mapping to space\r\n .map(character => (mapping2space(character) ? 0x20 : character))\r\n // 1.2 mapping to nothing\r\n .filter(character => !mapping2nothing(character));\r\n\r\n // 2. Normalize\r\n const normalized_input = String.fromCodePoint\r\n .apply(null, mapped_input)\r\n .normalize('NFKC');\r\n\r\n const normalized_map = toCodePoints(normalized_input);\r\n\r\n // 3. Prohibit\r\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\r\n\r\n if (hasProhibited) {\r\n throw new Error(\r\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'\r\n );\r\n }\r\n\r\n // Unassigned Code Points\r\n if (opts.allowUnassigned !== true) {\r\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\r\n\r\n if (hasUnassigned) {\r\n throw new Error(\r\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'\r\n );\r\n }\r\n }\r\n\r\n // 4. check bidi\r\n\r\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\r\n\r\n const hasBidiL = normalized_map.some(isBidirectionalL);\r\n\r\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\r\n // contain any LCat character.\r\n if (hasBidiRAL && hasBidiL) {\r\n throw new Error(\r\n 'String must not contain RandALCat and LCat at the same time,' +\r\n ' see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n /**\r\n * 4.2 If a string contains any RandALCat character, a RandALCat\r\n * character MUST be the first character of the string, and a\r\n * RandALCat character MUST be the last character of the string.\r\n */\r\n\r\n const isFirstBidiRAL = isBidirectionalRAL(\r\n getCodePoint(first(normalized_input))\r\n );\r\n const isLastBidiRAL = isBidirectionalRAL(\r\n getCodePoint(last(normalized_input))\r\n );\r\n\r\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\r\n throw new Error(\r\n 'Bidirectional RandALCat character must be the first and the last' +\r\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n return normalized_input;\r\n}\r\n\r\nexport default saslprep;\r\n","/*\r\n PDFSecurity - represents PDF security settings\r\n By Yang Liu \r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from './saslprep/index';\r\n\r\nclass PDFSecurity {\r\n static generateFileID(info = {}) {\r\n let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n for (let key in info) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!info.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n infoStr += `${key}: ${info[key].valueOf()}\\n`;\r\n }\r\n\r\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n }\r\n\r\n static generateRandomWordArray(bytes) {\r\n return CryptoJS.lib.WordArray.random(bytes);\r\n }\r\n\r\n static create(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n return null;\r\n }\r\n return new PDFSecurity(document, options);\r\n }\r\n\r\n constructor(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n throw new Error('None of owner password and user password is defined.');\r\n }\r\n\r\n this.document = document;\r\n this._setupEncryption(options);\r\n }\r\n\r\n _setupEncryption(options) {\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n case '1.5':\r\n this.version = 2;\r\n break;\r\n case '1.6':\r\n case '1.7':\r\n this.version = 4;\r\n break;\r\n case '1.7ext3':\r\n this.version = 5;\r\n break;\r\n default:\r\n this.version = 1;\r\n break;\r\n }\r\n\r\n const encDict = {\r\n Filter: 'Standard'\r\n };\r\n\r\n switch (this.version) {\r\n case 1:\r\n case 2:\r\n case 4:\r\n this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n break;\r\n case 5:\r\n this._setupEncryptionV5(encDict, options);\r\n break;\r\n }\r\n\r\n this.dictionary = this.document.ref(encDict);\r\n }\r\n\r\n _setupEncryptionV1V2V4(v, encDict, options) {\r\n let r, permissions;\r\n switch (v) {\r\n case 1:\r\n r = 2;\r\n this.keyBits = 40;\r\n permissions = getPermissionsR2(options.permissions);\r\n break;\r\n case 2:\r\n r = 3;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n case 4:\r\n r = 4;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n }\r\n\r\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n const paddedOwnerPassword = options.ownerPassword\r\n ? processPasswordR2R3R4(options.ownerPassword)\r\n : paddedUserPassword;\r\n\r\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n r,\r\n this.keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n );\r\n this.encryptionKey = getEncryptionKeyR2R3R4(\r\n r,\r\n this.keyBits,\r\n this.document._id,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n );\r\n let userPasswordEntry;\r\n if (r === 2) {\r\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n } else {\r\n userPasswordEntry = getUserPasswordR3R4(\r\n this.document._id,\r\n this.encryptionKey\r\n );\r\n }\r\n\r\n encDict.V = v;\r\n if (v >= 2) {\r\n encDict.Length = this.keyBits;\r\n }\r\n if (v === 4) {\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV2',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n }\r\n encDict.R = r;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.P = permissions;\r\n }\r\n\r\n _setupEncryptionV5(encDict, options) {\r\n this.keyBits = 256;\r\n const permissions = getPermissionsR3(options.permissions);\r\n\r\n const processedUserPassword = processPasswordR5(options.userPassword);\r\n const processedOwnerPassword = options.ownerPassword\r\n ? processPasswordR5(options.ownerPassword)\r\n : processedUserPassword;\r\n\r\n this.encryptionKey = getEncryptionKeyR5(\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userPasswordEntry = getUserPasswordR5(\r\n processedUserPassword,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userKeySalt = CryptoJS.lib.WordArray.create(\r\n userPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n this.encryptionKey\r\n );\r\n const ownerPasswordEntry = getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n ownerPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n this.encryptionKey\r\n );\r\n const permsEntry = getEncryptedPermissionsR5(\r\n permissions,\r\n this.encryptionKey,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n\r\n encDict.V = 5;\r\n encDict.Length = this.keyBits;\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV3',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n encDict.R = 5;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n encDict.P = permissions;\r\n encDict.Perms = wordArrayToBuffer(permsEntry);\r\n }\r\n\r\n getEncryptFn(obj, gen) {\r\n let digest;\r\n if (this.version < 5) {\r\n digest = this.encryptionKey\r\n .clone()\r\n .concat(\r\n CryptoJS.lib.WordArray.create(\r\n [\r\n ((obj & 0xff) << 24) |\r\n ((obj & 0xff00) << 8) |\r\n ((obj >> 8) & 0xff00) |\r\n (gen & 0xff),\r\n (gen & 0xff00) << 16\r\n ],\r\n 5\r\n )\r\n );\r\n }\r\n\r\n if (this.version === 1 || this.version === 2) {\r\n let key = CryptoJS.MD5(digest);\r\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n return buffer =>\r\n wordArrayToBuffer(\r\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n .ciphertext\r\n );\r\n }\r\n\r\n let key;\r\n if (this.version === 4) {\r\n key = CryptoJS.MD5(\r\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n );\r\n } else {\r\n key = this.encryptionKey;\r\n }\r\n\r\n const iv = PDFSecurity.generateRandomWordArray(16);\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7,\r\n iv\r\n };\r\n\r\n return buffer =>\r\n wordArrayToBuffer(\r\n iv\r\n .clone()\r\n .concat(\r\n CryptoJS.AES.encrypt(\r\n CryptoJS.lib.WordArray.create(buffer),\r\n key,\r\n options\r\n ).ciphertext\r\n )\r\n );\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n let permissions = 0xffffffc0 >> 0;\r\n if (permissionObject.printing) {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n let permissions = 0xfffff0c0 >> 0;\r\n if (permissionObject.printing === 'lowResolution') {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.printing === 'highResolution') {\r\n permissions |= 0b100000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n if (permissionObject.fillingForms) {\r\n permissions |= 0b000100000000;\r\n }\r\n if (permissionObject.contentAccessibility) {\r\n permissions |= 0b001000000000;\r\n }\r\n if (permissionObject.documentAssembly) {\r\n permissions |= 0b010000000000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n const key = encryptionKey.clone();\r\n let cipher = CryptoJS.MD5(\r\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n );\r\n for (let i = 0; i < 20; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] =\r\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n r,\r\n keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let digest = paddedOwnerPassword;\r\n let round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n digest = CryptoJS.MD5(digest);\r\n }\r\n\r\n const key = digest.clone();\r\n key.sigBytes = keyBits / 8;\r\n let cipher = paddedUserPassword;\r\n round = r >= 3 ? 20 : 1;\r\n for (let i = 0; i < round; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n r,\r\n keyBits,\r\n documentId,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n) {\r\n let key = paddedUserPassword\r\n .clone()\r\n .concat(ownerPasswordEntry)\r\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n .concat(CryptoJS.lib.WordArray.create(documentId));\r\n const round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n key = CryptoJS.MD5(key);\r\n key.sigBytes = keyBits / 8;\r\n }\r\n return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedUserPassword.clone().concat(userKeySalt)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n generateRandomWordArray\r\n) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(validationSalt)\r\n .concat(userPasswordEntry)\r\n )\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(ownerKeySalt)\r\n .concat(userPasswordEntry)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n permissions,\r\n encryptionKey,\r\n generateRandomWordArray\r\n) {\r\n const cipher = CryptoJS.lib.WordArray.create(\r\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n 12\r\n ).concat(generateRandomWordArray(4));\r\n const options = {\r\n mode: CryptoJS.mode.ECB,\r\n padding: CryptoJS.pad.NoPadding\r\n };\r\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n const out = Buffer.alloc(32);\r\n const length = password.length;\r\n let index = 0;\r\n while (index < length && index < 32) {\r\n const code = password.charCodeAt(index);\r\n if (code > 0xff) {\r\n throw new Error('Password contains one or more invalid characters.');\r\n }\r\n out[index] = code;\r\n index++;\r\n }\r\n while (index < 32) {\r\n out[index] = PASSWORD_PADDING[index - length];\r\n index++;\r\n }\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n password = unescape(encodeURIComponent(saslprep(password)));\r\n const length = Math.min(127, password.length);\r\n const out = Buffer.alloc(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n out[i] = password.charCodeAt(i);\r\n }\r\n\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n return (\r\n ((data & 0xff) << 24) |\r\n ((data & 0xff00) << 8) |\r\n ((data >> 8) & 0xff00) |\r\n ((data >> 24) & 0xff)\r\n );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n const byteArray = [];\r\n for (let i = 0; i < wordArray.sigBytes; i++) {\r\n byteArray.push(\r\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n );\r\n }\r\n return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n 0x28,\r\n 0xbf,\r\n 0x4e,\r\n 0x5e,\r\n 0x4e,\r\n 0x75,\r\n 0x8a,\r\n 0x41,\r\n 0x64,\r\n 0x00,\r\n 0x4e,\r\n 0x56,\r\n 0xff,\r\n 0xfa,\r\n 0x01,\r\n 0x08,\r\n 0x2e,\r\n 0x2e,\r\n 0x00,\r\n 0xb6,\r\n 0xd0,\r\n 0x68,\r\n 0x3e,\r\n 0x80,\r\n 0x2f,\r\n 0x0c,\r\n 0xa9,\r\n 0xfe,\r\n 0x64,\r\n 0x53,\r\n 0x69,\r\n 0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n constructor(doc) {\r\n this.doc = doc;\r\n this.stops = [];\r\n this.embedded = false;\r\n this.transform = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n stop(pos, color, opacity) {\r\n if (opacity == null) {\r\n opacity = 1;\r\n }\r\n color = this.doc._normalizeColor(color);\r\n\r\n if (this.stops.length === 0) {\r\n if (color.length === 3) {\r\n this._colorSpace = 'DeviceRGB';\r\n } else if (color.length === 4) {\r\n this._colorSpace = 'DeviceCMYK';\r\n } else if (color.length === 1) {\r\n this._colorSpace = 'DeviceGray';\r\n } else {\r\n throw new Error('Unknown color space');\r\n }\r\n } else if (\r\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n ) {\r\n throw new Error('All gradient stops must use the same color space');\r\n }\r\n\r\n opacity = Math.max(0, Math.min(1, opacity));\r\n this.stops.push([pos, color, opacity]);\r\n return this;\r\n }\r\n\r\n setTransform(m11, m12, m21, m22, dx, dy) {\r\n this.transform = [m11, m12, m21, m22, dx, dy];\r\n return this;\r\n }\r\n\r\n embed(m) {\r\n let fn;\r\n const stopsLength = this.stops.length;\r\n if (stopsLength === 0) {\r\n return;\r\n }\r\n this.embedded = true;\r\n this.matrix = m;\r\n\r\n // if the last stop comes before 100%, add a copy at 100%\r\n const last = this.stops[stopsLength - 1];\r\n if (last[0] < 1) {\r\n this.stops.push([1, last[1], last[2]]);\r\n }\r\n\r\n const bounds = [];\r\n const encode = [];\r\n const stops = [];\r\n\r\n for (let i = 0; i < stopsLength - 1; i++) {\r\n encode.push(0, 1);\r\n if (i + 2 !== stopsLength) {\r\n bounds.push(this.stops[i + 1][0]);\r\n }\r\n\r\n fn = this.doc.ref({\r\n FunctionType: 2,\r\n Domain: [0, 1],\r\n C0: this.stops[i + 0][1],\r\n C1: this.stops[i + 1][1],\r\n N: 1\r\n });\r\n\r\n stops.push(fn);\r\n fn.end();\r\n }\r\n\r\n // if there are only two stops, we don't need a stitching function\r\n if (stopsLength === 1) {\r\n fn = stops[0];\r\n } else {\r\n fn = this.doc.ref({\r\n FunctionType: 3, // stitching function\r\n Domain: [0, 1],\r\n Functions: stops,\r\n Bounds: bounds,\r\n Encode: encode\r\n });\r\n\r\n fn.end();\r\n }\r\n\r\n this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n const shader = this.shader(fn);\r\n shader.end();\r\n\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 2,\r\n Shading: shader,\r\n Matrix: this.matrix.map(number)\r\n });\r\n\r\n pattern.end();\r\n\r\n if (this.stops.some(stop => stop[2] < 1)) {\r\n let grad = this.opacityGradient();\r\n grad._colorSpace = 'DeviceGray';\r\n\r\n for (let stop of this.stops) {\r\n grad.stop(stop[0], [stop[2]]);\r\n }\r\n\r\n grad = grad.embed(this.matrix);\r\n\r\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n const form = this.doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: pageBBox,\r\n Group: {\r\n Type: 'Group',\r\n S: 'Transparency',\r\n CS: 'DeviceGray'\r\n },\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: grad\r\n }\r\n }\r\n });\r\n\r\n form.write('/Pattern cs /Sh1 scn');\r\n form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n const gstate = this.doc.ref({\r\n Type: 'ExtGState',\r\n SMask: {\r\n Type: 'Mask',\r\n S: 'Luminosity',\r\n G: form\r\n }\r\n });\r\n\r\n gstate.end();\r\n\r\n const opacityPattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1,\r\n PaintType: 1,\r\n TilingType: 2,\r\n BBox: pageBBox,\r\n XStep: pageBBox[2],\r\n YStep: pageBBox[3],\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: pattern\r\n },\r\n ExtGState: {\r\n Gs1: gstate\r\n }\r\n }\r\n });\r\n\r\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n this.doc.page.patterns[this.id] = opacityPattern;\r\n } else {\r\n this.doc.page.patterns[this.id] = pattern;\r\n }\r\n\r\n return pattern;\r\n }\r\n\r\n apply(stroke) {\r\n // apply gradient transform to existing document ctm\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n\r\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n this.embed(m);\r\n }\r\n this.doc._setColorSpace('Pattern', stroke);\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(`/${this.id} ${op}`);\r\n }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n constructor(doc, x1, y1, x2, y2) {\r\n super(doc);\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 2,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.x2, this.y2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n super(doc);\r\n this.doc = doc;\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.r1 = r1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n this.r2 = r2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 3,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFRadialGradient(\r\n this.doc,\r\n this.x1,\r\n this.y1,\r\n this.r1,\r\n this.x2,\r\n this.y2,\r\n this.r2\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","/*\r\nPDF tiling pattern support. Uncolored only.\r\n */\r\n\r\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\r\n\r\nclass PDFTilingPattern {\r\n constructor(doc, bBox, xStep, yStep, stream) {\r\n this.doc = doc;\r\n this.bBox = bBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n this.stream = stream;\r\n }\r\n\r\n createPattern() {\r\n // no resources needed for our current usage\r\n // required entry\r\n const resources = this.doc.ref();\r\n resources.end();\r\n // apply default transform matrix (flipped in the default doc._ctm)\r\n // see document.js & gradient.js\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1, // tiling\r\n PaintType: 2, // 1-colored, 2-uncolored\r\n TilingType: 2, // 2-no distortion\r\n BBox: this.bBox,\r\n XStep: this.xStep,\r\n YStep: this.yStep,\r\n Matrix: m.map(v => +v.toFixed(5)),\r\n Resources: resources\r\n });\r\n pattern.end(this.stream);\r\n return pattern;\r\n }\r\n\r\n embedPatternColorSpaces() {\r\n // map each pattern to an underlying color space\r\n // and embed on each page\r\n underlyingColorSpaces.forEach(csName => {\r\n const csId = this.getPatternColorSpaceId(csName);\r\n\r\n if (this.doc.page.colorSpaces[csId]) return;\r\n const cs = this.doc.ref(['Pattern', csName]);\r\n cs.end();\r\n this.doc.page.colorSpaces[csId] = cs;\r\n });\r\n }\r\n\r\n getPatternColorSpaceId(underlyingColorspace) {\r\n return `CsP${underlyingColorspace}`;\r\n }\r\n\r\n embed() {\r\n if (!this.id) {\r\n this.doc._patternCount = this.doc._patternCount + 1;\r\n this.id = 'P' + this.doc._patternCount;\r\n this.pattern = this.createPattern();\r\n }\r\n\r\n // patterns are embedded in each page\r\n if (!this.doc.page.patterns[this.id]) {\r\n this.doc.page.patterns[this.id] = this.pattern;\r\n }\r\n }\r\n\r\n apply(stroke, patternColor) {\r\n // do any embedding/creating that might be needed\r\n this.embedPatternColorSpaces();\r\n this.embed();\r\n\r\n const normalizedColor = this.doc._normalizeColor(patternColor);\r\n if (!normalizedColor)\r\n throw Error(`invalid pattern color. (value: ${patternColor})`);\r\n\r\n // select one of the pattern color spaces\r\n const csId = this.getPatternColorSpaceId(\r\n this.doc._getColorSpace(normalizedColor)\r\n );\r\n this.doc._setColorSpace(csId, stroke);\r\n\r\n // stroke/fill using the pattern and color (in the above underlying color space)\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(\r\n `${normalizedColor.join(' ')} /${this.id} ${op}`\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFTilingPattern };\r\n","import Gradient from '../gradient';\r\nimport pattern from '../pattern';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\nconst { PDFTilingPattern } = pattern;\r\n\r\nexport default {\r\n initColor() {\r\n // The opacity dictionaries\r\n this._opacityRegistry = {};\r\n this._opacityCount = 0;\r\n this._patternCount = 0;\r\n return (this._gradCount = 0);\r\n },\r\n\r\n _normalizeColor(color) {\r\n if (typeof color === 'string') {\r\n if (color.charAt(0) === '#') {\r\n if (color.length === 4) {\r\n color = color.replace(\r\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n '#$1$1$2$2$3$3'\r\n );\r\n }\r\n const hex = parseInt(color.slice(1), 16);\r\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n } else if (namedColors[color]) {\r\n color = namedColors[color];\r\n }\r\n }\r\n\r\n if (Array.isArray(color)) {\r\n // RGB\r\n if (color.length === 3) {\r\n color = color.map(part => part / 255);\r\n // CMYK\r\n } else if (color.length === 4) {\r\n color = color.map(part => part / 100);\r\n }\r\n return color;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n _setColor(color, stroke) {\r\n if (color instanceof PDFGradient) {\r\n color.apply(stroke);\r\n return true;\r\n // see if tiling pattern, decode & apply it it\r\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\r\n color[0].apply(stroke, color[1]);\r\n return true;\r\n }\r\n // any other case should be a normal color and not a pattern\r\n return this._setColorCore(color, stroke);\r\n },\r\n\r\n _setColorCore(color, stroke) {\r\n color = this._normalizeColor(color);\r\n if (!color) {\r\n return false;\r\n }\r\n\r\n const op = stroke ? 'SCN' : 'scn';\r\n const space = this._getColorSpace(color);\r\n this._setColorSpace(space, stroke);\r\n\r\n color = color.join(' ');\r\n this.addContent(`${color} ${op}`);\r\n\r\n return true;\r\n },\r\n\r\n _setColorSpace(space, stroke) {\r\n const op = stroke ? 'CS' : 'cs';\r\n return this.addContent(`/${space} ${op}`);\r\n },\r\n\r\n _getColorSpace(color) {\r\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n },\r\n\r\n fillColor(color, opacity) {\r\n const set = this._setColor(color, false);\r\n if (set) {\r\n this.fillOpacity(opacity);\r\n }\r\n\r\n // save this for text wrapper, which needs to reset\r\n // the fill color on new pages\r\n this._fillColor = [color, opacity];\r\n return this;\r\n },\r\n\r\n strokeColor(color, opacity) {\r\n const set = this._setColor(color, true);\r\n if (set) {\r\n this.strokeOpacity(opacity);\r\n }\r\n return this;\r\n },\r\n\r\n opacity(opacity) {\r\n this._doOpacity(opacity, opacity);\r\n return this;\r\n },\r\n\r\n fillOpacity(opacity) {\r\n this._doOpacity(opacity, null);\r\n return this;\r\n },\r\n\r\n strokeOpacity(opacity) {\r\n this._doOpacity(null, opacity);\r\n return this;\r\n },\r\n\r\n _doOpacity(fillOpacity, strokeOpacity) {\r\n let dictionary, name;\r\n if (fillOpacity == null && strokeOpacity == null) {\r\n return;\r\n }\r\n\r\n if (fillOpacity != null) {\r\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n }\r\n if (strokeOpacity != null) {\r\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n }\r\n const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n if (this._opacityRegistry[key]) {\r\n [dictionary, name] = this._opacityRegistry[key];\r\n } else {\r\n dictionary = { Type: 'ExtGState' };\r\n\r\n if (fillOpacity != null) {\r\n dictionary.ca = fillOpacity;\r\n }\r\n if (strokeOpacity != null) {\r\n dictionary.CA = strokeOpacity;\r\n }\r\n\r\n dictionary = this.ref(dictionary);\r\n dictionary.end();\r\n const id = ++this._opacityCount;\r\n name = `Gs${id}`;\r\n this._opacityRegistry[key] = [dictionary, name];\r\n }\r\n\r\n this.page.ext_gstates[name] = dictionary;\r\n return this.addContent(`/${name} gs`);\r\n },\r\n\r\n linearGradient(x1, y1, x2, y2) {\r\n return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n },\r\n\r\n radialGradient(x1, y1, r1, x2, y2, r2) {\r\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n },\r\n\r\n pattern(bbox, xStep, yStep, stream) {\r\n return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\r\n }\r\n};\r\n\r\nvar namedColors = {\r\n aliceblue: [240, 248, 255],\r\n antiquewhite: [250, 235, 215],\r\n aqua: [0, 255, 255],\r\n aquamarine: [127, 255, 212],\r\n azure: [240, 255, 255],\r\n beige: [245, 245, 220],\r\n bisque: [255, 228, 196],\r\n black: [0, 0, 0],\r\n blanchedalmond: [255, 235, 205],\r\n blue: [0, 0, 255],\r\n blueviolet: [138, 43, 226],\r\n brown: [165, 42, 42],\r\n burlywood: [222, 184, 135],\r\n cadetblue: [95, 158, 160],\r\n chartreuse: [127, 255, 0],\r\n chocolate: [210, 105, 30],\r\n coral: [255, 127, 80],\r\n cornflowerblue: [100, 149, 237],\r\n cornsilk: [255, 248, 220],\r\n crimson: [220, 20, 60],\r\n cyan: [0, 255, 255],\r\n darkblue: [0, 0, 139],\r\n darkcyan: [0, 139, 139],\r\n darkgoldenrod: [184, 134, 11],\r\n darkgray: [169, 169, 169],\r\n darkgreen: [0, 100, 0],\r\n darkgrey: [169, 169, 169],\r\n darkkhaki: [189, 183, 107],\r\n darkmagenta: [139, 0, 139],\r\n darkolivegreen: [85, 107, 47],\r\n darkorange: [255, 140, 0],\r\n darkorchid: [153, 50, 204],\r\n darkred: [139, 0, 0],\r\n darksalmon: [233, 150, 122],\r\n darkseagreen: [143, 188, 143],\r\n darkslateblue: [72, 61, 139],\r\n darkslategray: [47, 79, 79],\r\n darkslategrey: [47, 79, 79],\r\n darkturquoise: [0, 206, 209],\r\n darkviolet: [148, 0, 211],\r\n deeppink: [255, 20, 147],\r\n deepskyblue: [0, 191, 255],\r\n dimgray: [105, 105, 105],\r\n dimgrey: [105, 105, 105],\r\n dodgerblue: [30, 144, 255],\r\n firebrick: [178, 34, 34],\r\n floralwhite: [255, 250, 240],\r\n forestgreen: [34, 139, 34],\r\n fuchsia: [255, 0, 255],\r\n gainsboro: [220, 220, 220],\r\n ghostwhite: [248, 248, 255],\r\n gold: [255, 215, 0],\r\n goldenrod: [218, 165, 32],\r\n gray: [128, 128, 128],\r\n grey: [128, 128, 128],\r\n green: [0, 128, 0],\r\n greenyellow: [173, 255, 47],\r\n honeydew: [240, 255, 240],\r\n hotpink: [255, 105, 180],\r\n indianred: [205, 92, 92],\r\n indigo: [75, 0, 130],\r\n ivory: [255, 255, 240],\r\n khaki: [240, 230, 140],\r\n lavender: [230, 230, 250],\r\n lavenderblush: [255, 240, 245],\r\n lawngreen: [124, 252, 0],\r\n lemonchiffon: [255, 250, 205],\r\n lightblue: [173, 216, 230],\r\n lightcoral: [240, 128, 128],\r\n lightcyan: [224, 255, 255],\r\n lightgoldenrodyellow: [250, 250, 210],\r\n lightgray: [211, 211, 211],\r\n lightgreen: [144, 238, 144],\r\n lightgrey: [211, 211, 211],\r\n lightpink: [255, 182, 193],\r\n lightsalmon: [255, 160, 122],\r\n lightseagreen: [32, 178, 170],\r\n lightskyblue: [135, 206, 250],\r\n lightslategray: [119, 136, 153],\r\n lightslategrey: [119, 136, 153],\r\n lightsteelblue: [176, 196, 222],\r\n lightyellow: [255, 255, 224],\r\n lime: [0, 255, 0],\r\n limegreen: [50, 205, 50],\r\n linen: [250, 240, 230],\r\n magenta: [255, 0, 255],\r\n maroon: [128, 0, 0],\r\n mediumaquamarine: [102, 205, 170],\r\n mediumblue: [0, 0, 205],\r\n mediumorchid: [186, 85, 211],\r\n mediumpurple: [147, 112, 219],\r\n mediumseagreen: [60, 179, 113],\r\n mediumslateblue: [123, 104, 238],\r\n mediumspringgreen: [0, 250, 154],\r\n mediumturquoise: [72, 209, 204],\r\n mediumvioletred: [199, 21, 133],\r\n midnightblue: [25, 25, 112],\r\n mintcream: [245, 255, 250],\r\n mistyrose: [255, 228, 225],\r\n moccasin: [255, 228, 181],\r\n navajowhite: [255, 222, 173],\r\n navy: [0, 0, 128],\r\n oldlace: [253, 245, 230],\r\n olive: [128, 128, 0],\r\n olivedrab: [107, 142, 35],\r\n orange: [255, 165, 0],\r\n orangered: [255, 69, 0],\r\n orchid: [218, 112, 214],\r\n palegoldenrod: [238, 232, 170],\r\n palegreen: [152, 251, 152],\r\n paleturquoise: [175, 238, 238],\r\n palevioletred: [219, 112, 147],\r\n papayawhip: [255, 239, 213],\r\n peachpuff: [255, 218, 185],\r\n peru: [205, 133, 63],\r\n pink: [255, 192, 203],\r\n plum: [221, 160, 221],\r\n powderblue: [176, 224, 230],\r\n purple: [128, 0, 128],\r\n red: [255, 0, 0],\r\n rosybrown: [188, 143, 143],\r\n royalblue: [65, 105, 225],\r\n saddlebrown: [139, 69, 19],\r\n salmon: [250, 128, 114],\r\n sandybrown: [244, 164, 96],\r\n seagreen: [46, 139, 87],\r\n seashell: [255, 245, 238],\r\n sienna: [160, 82, 45],\r\n silver: [192, 192, 192],\r\n skyblue: [135, 206, 235],\r\n slateblue: [106, 90, 205],\r\n slategray: [112, 128, 144],\r\n slategrey: [112, 128, 144],\r\n snow: [255, 250, 250],\r\n springgreen: [0, 255, 127],\r\n steelblue: [70, 130, 180],\r\n tan: [210, 180, 140],\r\n teal: [0, 128, 128],\r\n thistle: [216, 191, 216],\r\n tomato: [255, 99, 71],\r\n turquoise: [64, 224, 208],\r\n violet: [238, 130, 238],\r\n wheat: [245, 222, 179],\r\n white: [255, 255, 255],\r\n whitesmoke: [245, 245, 245],\r\n yellow: [255, 255, 0],\r\n yellowgreen: [154, 205, 50]\r\n};\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n A: 7,\r\n a: 7,\r\n C: 6,\r\n c: 6,\r\n H: 1,\r\n h: 1,\r\n L: 2,\r\n l: 2,\r\n M: 2,\r\n m: 2,\r\n Q: 4,\r\n q: 4,\r\n S: 4,\r\n s: 4,\r\n T: 2,\r\n t: 2,\r\n V: 1,\r\n v: 1,\r\n Z: 0,\r\n z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n let cmd;\r\n const ret = [];\r\n let args = [];\r\n let curArg = '';\r\n let foundDecimal = false;\r\n let params = 0;\r\n\r\n for (let c of path) {\r\n if (parameters[c] != null) {\r\n params = parameters[c];\r\n if (cmd) {\r\n // save existing command\r\n if (curArg.length > 0) {\r\n args[args.length] = +curArg;\r\n }\r\n ret[ret.length] = { cmd, args };\r\n\r\n args = [];\r\n curArg = '';\r\n foundDecimal = false;\r\n }\r\n\r\n cmd = c;\r\n } else if (\r\n [' ', ','].includes(c) ||\r\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n (c === '.' && foundDecimal)\r\n ) {\r\n if (curArg.length === 0) {\r\n continue;\r\n }\r\n\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n\r\n foundDecimal = c === '.';\r\n\r\n // fix for negative numbers or repeated decimals with no delimeter between commands\r\n curArg = ['-', '.'].includes(c) ? c : '';\r\n } else {\r\n curArg += c;\r\n if (c === '.') {\r\n foundDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n // add the last command\r\n if (curArg.length > 0) {\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n }\r\n\r\n ret[ret.length] = { cmd, args };\r\n\r\n return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n // current point, control point, and subpath starting point\r\n cx = cy = px = py = sx = sy = 0;\r\n\r\n // run the commands\r\n for (let i = 0; i < commands.length; i++) {\r\n const c = commands[i];\r\n if (typeof runners[c.cmd] === 'function') {\r\n runners[c.cmd](doc, c.args);\r\n }\r\n }\r\n};\r\n\r\nconst runners = {\r\n M(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n m(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n C(doc, a) {\r\n cx = a[4];\r\n cy = a[5];\r\n px = a[2];\r\n py = a[3];\r\n return doc.bezierCurveTo(...a);\r\n },\r\n\r\n c(doc, a) {\r\n doc.bezierCurveTo(\r\n a[0] + cx,\r\n a[1] + cy,\r\n a[2] + cx,\r\n a[3] + cy,\r\n a[4] + cx,\r\n a[5] + cy\r\n );\r\n px = cx + a[2];\r\n py = cy + a[3];\r\n cx += a[4];\r\n return (cy += a[5]);\r\n },\r\n\r\n S(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n return (cy = a[3]);\r\n },\r\n\r\n s(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(\r\n cx - (px - cx),\r\n cy - (py - cy),\r\n cx + a[0],\r\n cy + a[1],\r\n cx + a[2],\r\n cy + a[3]\r\n );\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n Q(doc, a) {\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n cy = a[3];\r\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n },\r\n\r\n q(doc, a) {\r\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n T(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n cx = a[0];\r\n return (cy = a[1]);\r\n },\r\n\r\n t(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n cx += a[0];\r\n return (cy += a[1]);\r\n },\r\n\r\n A(doc, a) {\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n a(doc, a) {\r\n a[5] += cx;\r\n a[6] += cy;\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n L(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n l(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n H(doc, a) {\r\n cx = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n h(doc, a) {\r\n cx += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n V(doc, a) {\r\n cy = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n v(doc, a) {\r\n cy += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n Z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n },\r\n\r\n z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n for (let seg of segs) {\r\n const bez = segmentToBezier(...seg);\r\n doc.bezierCurveTo(...bez);\r\n }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n const th = rotateX * (Math.PI / 180);\r\n const sin_th = Math.sin(th);\r\n const cos_th = Math.cos(th);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n if (pl > 1) {\r\n pl = Math.sqrt(pl);\r\n rx *= pl;\r\n ry *= pl;\r\n }\r\n\r\n const a00 = cos_th / rx;\r\n const a01 = sin_th / rx;\r\n const a10 = -sin_th / ry;\r\n const a11 = cos_th / ry;\r\n const x0 = a00 * ox + a01 * oy;\r\n const y0 = a10 * ox + a11 * oy;\r\n const x1 = a00 * x + a01 * y;\r\n const y1 = a10 * x + a11 * y;\r\n\r\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n let sfactor_sq = 1 / d - 0.25;\r\n if (sfactor_sq < 0) {\r\n sfactor_sq = 0;\r\n }\r\n let sfactor = Math.sqrt(sfactor_sq);\r\n if (sweep === large) {\r\n sfactor = -sfactor;\r\n }\r\n\r\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n let th_arc = th1 - th0;\r\n if (th_arc < 0 && sweep === 1) {\r\n th_arc += 2 * Math.PI;\r\n } else if (th_arc > 0 && sweep === 0) {\r\n th_arc -= 2 * Math.PI;\r\n }\r\n\r\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n const result = [];\r\n\r\n for (let i = 0; i < segments; i++) {\r\n const th2 = th0 + (i * th_arc) / segments;\r\n const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n const a00 = cos_th * rx;\r\n const a01 = -sin_th * ry;\r\n const a10 = sin_th * rx;\r\n const a11 = cos_th * ry;\r\n\r\n const th_half = 0.5 * (th1 - th0);\r\n const t =\r\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n Math.sin(th_half);\r\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n const x3 = cx + Math.cos(th1);\r\n const y3 = cy + Math.sin(th1);\r\n const x2 = x3 + t * Math.sin(th1);\r\n const y2 = y3 - t * Math.cos(th1);\r\n\r\n return [\r\n a00 * x1 + a01 * y1,\r\n a10 * x1 + a11 * y1,\r\n a00 * x2 + a01 * y2,\r\n a10 * x2 + a11 * y2,\r\n a00 * x3 + a01 * y3,\r\n a10 * x3 + a11 * y3\r\n ];\r\n};\r\n\r\nclass SVGPath {\r\n static apply(doc, path) {\r\n const commands = parse(path);\r\n apply(commands, doc);\r\n }\r\n}\r\n\r\nexport default SVGPath;\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n initVector() {\r\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n return (this._ctmStack = []);\r\n },\r\n\r\n save() {\r\n this._ctmStack.push(this._ctm.slice());\r\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n return this.addContent('q');\r\n },\r\n\r\n restore() {\r\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n return this.addContent('Q');\r\n },\r\n\r\n closePath() {\r\n return this.addContent('h');\r\n },\r\n\r\n lineWidth(w) {\r\n return this.addContent(`${number(w)} w`);\r\n },\r\n\r\n _CAP_STYLES: {\r\n BUTT: 0,\r\n ROUND: 1,\r\n SQUARE: 2\r\n },\r\n\r\n lineCap(c) {\r\n if (typeof c === 'string') {\r\n c = this._CAP_STYLES[c.toUpperCase()];\r\n }\r\n return this.addContent(`${c} J`);\r\n },\r\n\r\n _JOIN_STYLES: {\r\n MITER: 0,\r\n ROUND: 1,\r\n BEVEL: 2\r\n },\r\n\r\n lineJoin(j) {\r\n if (typeof j === 'string') {\r\n j = this._JOIN_STYLES[j.toUpperCase()];\r\n }\r\n return this.addContent(`${j} j`);\r\n },\r\n\r\n miterLimit(m) {\r\n return this.addContent(`${number(m)} M`);\r\n },\r\n\r\n dash(length, options = {}) {\r\n const originalLength = length;\r\n if (!Array.isArray(length)) {\r\n length = [length, options.space || length];\r\n }\r\n\r\n const valid = length.every(x => Number.isFinite(x) && x > 0);\r\n if (!valid) {\r\n throw new Error(\r\n `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\r\n options\r\n )}) invalid, lengths must be numeric and greater than zero`\r\n );\r\n }\r\n\r\n length = length.map(number).join(' ');\r\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\r\n },\r\n\r\n undash() {\r\n return this.addContent('[] 0 d');\r\n },\r\n\r\n moveTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} m`);\r\n },\r\n\r\n lineTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} l`);\r\n },\r\n\r\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n return this.addContent(\r\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n x\r\n )} ${number(y)} c`\r\n );\r\n },\r\n\r\n quadraticCurveTo(cpx, cpy, x, y) {\r\n return this.addContent(\r\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n );\r\n },\r\n\r\n rect(x, y, w, h) {\r\n return this.addContent(\r\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n );\r\n },\r\n\r\n roundedRect(x, y, w, h, r) {\r\n if (r == null) {\r\n r = 0;\r\n }\r\n r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n // amount to inset control points from corners (see `ellipse`)\r\n const c = r * (1.0 - KAPPA);\r\n\r\n this.moveTo(x + r, y);\r\n this.lineTo(x + w - r, y);\r\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n this.lineTo(x + w, y + h - r);\r\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n this.lineTo(x + r, y + h);\r\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n this.lineTo(x, y + r);\r\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n return this.closePath();\r\n },\r\n\r\n ellipse(x, y, r1, r2) {\r\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n if (r2 == null) {\r\n r2 = r1;\r\n }\r\n x -= r1;\r\n y -= r2;\r\n const ox = r1 * KAPPA;\r\n const oy = r2 * KAPPA;\r\n const xe = x + r1 * 2;\r\n const ye = y + r2 * 2;\r\n const xm = x + r1;\r\n const ym = y + r2;\r\n\r\n this.moveTo(x, ym);\r\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n return this.closePath();\r\n },\r\n\r\n circle(x, y, radius) {\r\n return this.ellipse(x, y, radius);\r\n },\r\n\r\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n if (anticlockwise == null) {\r\n anticlockwise = false;\r\n }\r\n const TWO_PI = 2.0 * Math.PI;\r\n const HALF_PI = 0.5 * Math.PI;\r\n\r\n let deltaAng = endAngle - startAngle;\r\n\r\n if (Math.abs(deltaAng) > TWO_PI) {\r\n // draw only full circle if more than that is specified\r\n deltaAng = TWO_PI;\r\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n // necessary to flip direction of rendering\r\n const dir = anticlockwise ? -1 : 1;\r\n deltaAng = dir * TWO_PI + deltaAng;\r\n }\r\n\r\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n const segAng = deltaAng / numSegs;\r\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n let curAng = startAngle;\r\n\r\n // component distances between anchor point and control point\r\n let deltaCx = -Math.sin(curAng) * handleLen;\r\n let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // anchor point\r\n let ax = x + Math.cos(curAng) * radius;\r\n let ay = y + Math.sin(curAng) * radius;\r\n\r\n // calculate and render segments\r\n this.moveTo(ax, ay);\r\n\r\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n // starting control point\r\n const cp1x = ax + deltaCx;\r\n const cp1y = ay + deltaCy;\r\n\r\n // step angle\r\n curAng += segAng;\r\n\r\n // next anchor point\r\n ax = x + Math.cos(curAng) * radius;\r\n ay = y + Math.sin(curAng) * radius;\r\n\r\n // next control point delta\r\n deltaCx = -Math.sin(curAng) * handleLen;\r\n deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // ending control point\r\n const cp2x = ax - deltaCx;\r\n const cp2y = ay - deltaCy;\r\n\r\n // render segment\r\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n polygon(...points) {\r\n this.moveTo(...(points.shift() || []));\r\n for (let point of points) {\r\n this.lineTo(...(point || []));\r\n }\r\n return this.closePath();\r\n },\r\n\r\n path(path) {\r\n SVGPath.apply(this, path);\r\n return this;\r\n },\r\n\r\n _windingRule(rule) {\r\n if (/even-?odd/.test(rule)) {\r\n return '*';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n fill(color, rule) {\r\n if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n rule = color;\r\n color = null;\r\n }\r\n\r\n if (color) {\r\n this.fillColor(color);\r\n }\r\n return this.addContent(`f${this._windingRule(rule)}`);\r\n },\r\n\r\n stroke(color) {\r\n if (color) {\r\n this.strokeColor(color);\r\n }\r\n return this.addContent('S');\r\n },\r\n\r\n fillAndStroke(fillColor, strokeColor, rule) {\r\n if (strokeColor == null) {\r\n strokeColor = fillColor;\r\n }\r\n const isFillRule = /(even-?odd)|(non-?zero)/;\r\n if (isFillRule.test(fillColor)) {\r\n rule = fillColor;\r\n fillColor = null;\r\n }\r\n\r\n if (isFillRule.test(strokeColor)) {\r\n rule = strokeColor;\r\n strokeColor = fillColor;\r\n }\r\n\r\n if (fillColor) {\r\n this.fillColor(fillColor);\r\n this.strokeColor(strokeColor);\r\n }\r\n\r\n return this.addContent(`B${this._windingRule(rule)}`);\r\n },\r\n\r\n clip(rule) {\r\n return this.addContent(`W${this._windingRule(rule)} n`);\r\n },\r\n\r\n transform(m11, m12, m21, m22, dx, dy) {\r\n // keep track of the current transformation matrix\r\n if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) {\r\n // Ignore identity transforms\r\n return this;\r\n }\r\n const m = this._ctm;\r\n const [m0, m1, m2, m3, m4, m5] = m;\r\n m[0] = m0 * m11 + m2 * m12;\r\n m[1] = m1 * m11 + m3 * m12;\r\n m[2] = m0 * m21 + m2 * m22;\r\n m[3] = m1 * m21 + m3 * m22;\r\n m[4] = m0 * dx + m2 * dy + m4;\r\n m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n return this.addContent(`${values} cm`);\r\n },\r\n\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n },\r\n\r\n rotate(angle, options = {}) {\r\n let y;\r\n const rad = (angle * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n let x = (y = 0);\r\n\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n const x1 = x * cos - y * sin;\r\n const y1 = x * sin + y * cos;\r\n x -= x1;\r\n y -= y1;\r\n }\r\n\r\n return this.transform(cos, sin, -sin, cos, x, y);\r\n },\r\n\r\n scale(xFactor, yFactor, options = {}) {\r\n let y;\r\n if (yFactor == null) {\r\n yFactor = xFactor;\r\n }\r\n if (typeof yFactor === 'object') {\r\n options = yFactor;\r\n yFactor = xFactor;\r\n }\r\n\r\n let x = (y = 0);\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n x -= xFactor * x;\r\n y -= yFactor * y;\r\n }\r\n\r\n return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n 402: 131,\r\n 8211: 150,\r\n 8212: 151,\r\n 8216: 145,\r\n 8217: 146,\r\n 8218: 130,\r\n 8220: 147,\r\n 8221: 148,\r\n 8222: 132,\r\n 8224: 134,\r\n 8225: 135,\r\n 8226: 149,\r\n 8230: 133,\r\n 8364: 128,\r\n 8240: 137,\r\n 8249: 139,\r\n 8250: 155,\r\n 710: 136,\r\n 8482: 153,\r\n 338: 140,\r\n 339: 156,\r\n 732: 152,\r\n 352: 138,\r\n 353: 154,\r\n 376: 159,\r\n 381: 142,\r\n 382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n \r\nspace exclam quotedbl numbersign\r\ndollar percent ampersand quotesingle\r\nparenleft parenright asterisk plus\r\ncomma hyphen period slash\r\nzero one two three\r\nfour five six seven\r\neight nine colon semicolon\r\nless equal greater question\r\n \r\nat A B C\r\nD E F G\r\nH I J K\r\nL M N O\r\nP Q R S\r\nT U V W\r\nX Y Z bracketleft\r\nbackslash bracketright asciicircum underscore\r\n \r\ngrave a b c\r\nd e f g\r\nh i j k\r\nl m n o\r\np q r s\r\nt u v w\r\nx y z braceleft\r\nbar braceright asciitilde .notdef\r\n \r\nEuro .notdef quotesinglbase florin\r\nquotedblbase ellipsis dagger daggerdbl\r\ncircumflex perthousand Scaron guilsinglleft\r\nOE .notdef Zcaron .notdef\r\n.notdef quoteleft quoteright quotedblleft\r\nquotedblright bullet endash emdash\r\ntilde trademark scaron guilsinglright\r\noe .notdef zcaron ydieresis\r\n \r\nspace exclamdown cent sterling\r\ncurrency yen brokenbar section\r\ndieresis copyright ordfeminine guillemotleft\r\nlogicalnot hyphen registered macron\r\ndegree plusminus twosuperior threesuperior\r\nacute mu paragraph periodcentered\r\ncedilla onesuperior ordmasculine guillemotright\r\nonequarter onehalf threequarters questiondown\r\n \r\nAgrave Aacute Acircumflex Atilde\r\nAdieresis Aring AE Ccedilla\r\nEgrave Eacute Ecircumflex Edieresis\r\nIgrave Iacute Icircumflex Idieresis\r\nEth Ntilde Ograve Oacute\r\nOcircumflex Otilde Odieresis multiply\r\nOslash Ugrave Uacute Ucircumflex\r\nUdieresis Yacute Thorn germandbls\r\n \r\nagrave aacute acircumflex atilde\r\nadieresis aring ae ccedilla\r\negrave eacute ecircumflex edieresis\r\nigrave iacute icircumflex idieresis\r\neth ntilde ograve oacute\r\nocircumflex otilde odieresis divide\r\noslash ugrave uacute ucircumflex\r\nudieresis yacute thorn ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n static open(filename) {\r\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n }\r\n\r\n constructor(contents) {\r\n this.contents = contents;\r\n this.attributes = {};\r\n this.glyphWidths = {};\r\n this.boundingBoxes = {};\r\n this.kernPairs = {};\r\n\r\n this.parse();\r\n // todo: remove charWidths since appears to not be used\r\n this.charWidths = new Array(256);\r\n for (let char = 0; char <= 255; char++) {\r\n this.charWidths[char] = this.glyphWidths[characters[char]];\r\n }\r\n\r\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n this.ascender = +(this.attributes['Ascender'] || 0);\r\n this.descender = +(this.attributes['Descender'] || 0);\r\n this.xHeight = +(this.attributes['XHeight'] || 0);\r\n this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n this.lineGap =\r\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n }\r\n\r\n parse() {\r\n let section = '';\r\n for (let line of this.contents.split('\\n')) {\r\n var match;\r\n var a;\r\n if ((match = line.match(/^Start(\\w+)/))) {\r\n section = match[1];\r\n continue;\r\n } else if ((match = line.match(/^End(\\w+)/))) {\r\n section = '';\r\n continue;\r\n }\r\n\r\n switch (section) {\r\n case 'FontMetrics':\r\n match = line.match(/(^\\w+)\\s+(.*)/);\r\n var key = match[1];\r\n var value = match[2];\r\n\r\n if ((a = this.attributes[key])) {\r\n if (!Array.isArray(a)) {\r\n a = this.attributes[key] = [a];\r\n }\r\n a.push(value);\r\n } else {\r\n this.attributes[key] = value;\r\n }\r\n break;\r\n\r\n case 'CharMetrics':\r\n if (!/^CH?\\s/.test(line)) {\r\n continue;\r\n }\r\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n break;\r\n\r\n case 'KernPairs':\r\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n if (match) {\r\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n encodeText(text) {\r\n const res = [];\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n let char = text.charCodeAt(i);\r\n char = WIN_ANSI_MAP[char] || char;\r\n res.push(char.toString(16));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n glyphsForString(string) {\r\n const glyphs = [];\r\n\r\n for (let i = 0, len = string.length; i < len; i++) {\r\n const charCode = string.charCodeAt(i);\r\n glyphs.push(this.characterToGlyph(charCode));\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n characterToGlyph(character) {\r\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n }\r\n\r\n widthOfGlyph(glyph) {\r\n return this.glyphWidths[glyph] || 0;\r\n }\r\n\r\n getKernPair(left, right) {\r\n return this.kernPairs[left + '\\0' + right] || 0;\r\n }\r\n\r\n advancesForGlyphs(glyphs) {\r\n const advances = [];\r\n\r\n for (let index = 0; index < glyphs.length; index++) {\r\n const left = glyphs[index];\r\n const right = glyphs[index + 1];\r\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n }\r\n\r\n return advances;\r\n }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n constructor() {}\r\n\r\n encode() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n widthOfString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n ref() {\r\n return this.dictionary != null\r\n ? this.dictionary\r\n : (this.dictionary = this.document.ref());\r\n }\r\n\r\n finalize() {\r\n if (this.embedded || this.dictionary == null) {\r\n return;\r\n }\r\n\r\n this.embed();\r\n return (this.embedded = true);\r\n }\r\n\r\n embed() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n lineHeight(size, includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n const gap = includeGap ? this.lineGap : 0;\r\n return ((this.ascender + gap - this.descender) / 1000) * size;\r\n }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n Courier() {\r\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n },\r\n 'Courier-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n },\r\n 'Courier-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n },\r\n 'Courier-BoldOblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n },\r\n Helvetica() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n },\r\n 'Helvetica-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n },\r\n 'Helvetica-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n },\r\n 'Helvetica-BoldOblique'() {\r\n return fs.readFileSync(\r\n __dirname + '/data/Helvetica-BoldOblique.afm',\r\n 'utf8'\r\n );\r\n },\r\n 'Times-Roman'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n },\r\n 'Times-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n },\r\n 'Times-Italic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n },\r\n 'Times-BoldItalic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n },\r\n Symbol() {\r\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n },\r\n ZapfDingbats() {\r\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n constructor(document, name, id) {\r\n super();\r\n this.document = document;\r\n this.name = name;\r\n this.id = id;\r\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n ({\r\n ascender: this.ascender,\r\n descender: this.descender,\r\n bbox: this.bbox,\r\n lineGap: this.lineGap,\r\n xHeight: this.xHeight,\r\n capHeight: this.capHeight\r\n } = this.font);\r\n }\r\n\r\n embed() {\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n BaseFont: this.name,\r\n Subtype: 'Type1',\r\n Encoding: 'WinAnsiEncoding'\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n encode(text) {\r\n const encoded = this.font.encodeText(text);\r\n const glyphs = this.font.glyphsForString(`${text}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n const positions = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n positions.push({\r\n xAdvance: advances[i],\r\n yAdvance: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n advanceWidth: this.font.widthOfGlyph(glyph)\r\n });\r\n }\r\n\r\n return [encoded, positions];\r\n }\r\n\r\n widthOfString(string, size) {\r\n const glyphs = this.font.glyphsForString(`${string}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n let width = 0;\r\n for (let advance of advances) {\r\n width += advance;\r\n }\r\n\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n static isStandardFont(name) {\r\n return name in STANDARD_FONTS;\r\n }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n constructor(document, font, id) {\r\n super();\r\n this.document = document;\r\n this.font = font;\r\n this.id = id;\r\n this.subset = this.font.createSubset();\r\n this.unicode = [[0]];\r\n this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n this.name = this.font.postscriptName;\r\n this.scale = 1000 / this.font.unitsPerEm;\r\n this.ascender = this.font.ascent * this.scale;\r\n this.descender = this.font.descent * this.scale;\r\n this.xHeight = this.font.xHeight * this.scale;\r\n this.capHeight = this.font.capHeight * this.scale;\r\n this.lineGap = this.font.lineGap * this.scale;\r\n this.bbox = this.font.bbox;\r\n\r\n if (document.options.fontLayoutCache !== false) {\r\n this.layoutCache = Object.create(null);\r\n }\r\n }\r\n\r\n layoutRun(text, features) {\r\n const run = this.font.layout(text, features);\r\n\r\n // Normalize position values\r\n for (let i = 0; i < run.positions.length; i++) {\r\n const position = run.positions[i];\r\n for (let key in position) {\r\n position[key] *= this.scale;\r\n }\r\n\r\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n }\r\n\r\n return run;\r\n }\r\n\r\n layoutCached(text) {\r\n if (!this.layoutCache) {\r\n return this.layoutRun(text);\r\n }\r\n let cached;\r\n if ((cached = this.layoutCache[text])) {\r\n return cached;\r\n }\r\n\r\n const run = this.layoutRun(text);\r\n this.layoutCache[text] = run;\r\n return run;\r\n }\r\n\r\n layout(text, features, onlyWidth) {\r\n // Skip the cache if any user defined features are applied\r\n if (features) {\r\n return this.layoutRun(text, features);\r\n }\r\n\r\n let glyphs = onlyWidth ? null : [];\r\n let positions = onlyWidth ? null : [];\r\n let advanceWidth = 0;\r\n\r\n // Split the string by words to increase cache efficiency.\r\n // For this purpose, spaces and tabs are a good enough delimeter.\r\n let last = 0;\r\n let index = 0;\r\n while (index <= text.length) {\r\n var needle;\r\n if (\r\n (index === text.length && last < index) ||\r\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n ) {\r\n const run = this.layoutCached(text.slice(last, ++index));\r\n if (!onlyWidth) {\r\n glyphs = glyphs.concat(run.glyphs);\r\n positions = positions.concat(run.positions);\r\n }\r\n\r\n advanceWidth += run.advanceWidth;\r\n last = index;\r\n } else {\r\n index++;\r\n }\r\n }\r\n\r\n return { glyphs, positions, advanceWidth };\r\n }\r\n\r\n encode(text, features) {\r\n const { glyphs, positions } = this.layout(text, features);\r\n\r\n const res = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n const gid = this.subset.includeGlyph(glyph.id);\r\n res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n if (this.widths[gid] == null) {\r\n this.widths[gid] = glyph.advanceWidth * this.scale;\r\n }\r\n if (this.unicode[gid] == null) {\r\n this.unicode[gid] = glyph.codePoints;\r\n }\r\n }\r\n\r\n return [res, positions];\r\n }\r\n\r\n widthOfString(string, size, features) {\r\n const width = this.layout(string, features, true).advanceWidth;\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n embed() {\r\n const isCFF = this.subset.cff != null;\r\n const fontFile = this.document.ref();\r\n\r\n if (isCFF) {\r\n fontFile.data.Subtype = 'CIDFontType0C';\r\n }\r\n\r\n this.subset\r\n .encodeStream()\r\n .on('data', data => fontFile.write(data))\r\n .on('end', () => fontFile.end());\r\n\r\n const familyClass =\r\n ((this.font['OS/2'] != null\r\n ? this.font['OS/2'].sFamilyClass\r\n : undefined) || 0) >> 8;\r\n let flags = 0;\r\n if (this.font.post.isFixedPitch) {\r\n flags |= 1 << 0;\r\n }\r\n if (1 <= familyClass && familyClass <= 7) {\r\n flags |= 1 << 1;\r\n }\r\n flags |= 1 << 2; // assume the font uses non-latin characters\r\n if (familyClass === 10) {\r\n flags |= 1 << 3;\r\n }\r\n if (this.font.head.macStyle.italic) {\r\n flags |= 1 << 6;\r\n }\r\n\r\n // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\r\n const tag = [1, 2, 3, 4, 5, 6]\r\n .map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\r\n .join('');\r\n const name = tag + '+' + this.font.postscriptName;\r\n\r\n const { bbox } = this.font;\r\n const descriptor = this.document.ref({\r\n Type: 'FontDescriptor',\r\n FontName: name,\r\n Flags: flags,\r\n FontBBox: [\r\n bbox.minX * this.scale,\r\n bbox.minY * this.scale,\r\n bbox.maxX * this.scale,\r\n bbox.maxY * this.scale\r\n ],\r\n ItalicAngle: this.font.italicAngle,\r\n Ascent: this.ascender,\r\n Descent: this.descender,\r\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n XHeight: (this.font.xHeight || 0) * this.scale,\r\n StemV: 0\r\n }); // not sure how to calculate this\r\n\r\n if (isCFF) {\r\n descriptor.data.FontFile3 = fontFile;\r\n } else {\r\n descriptor.data.FontFile2 = fontFile;\r\n }\r\n\r\n if (this.document.subset) {\r\n const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\r\n const CIDSetRef = this.document.ref();\r\n CIDSetRef.write(CIDSet);\r\n CIDSetRef.end();\r\n\r\n descriptor.data.CIDSet = CIDSetRef;\r\n }\r\n\r\n descriptor.end();\r\n\r\n const descendantFontData = {\r\n Type: 'Font',\r\n Subtype: 'CIDFontType0',\r\n BaseFont: name,\r\n CIDSystemInfo: {\r\n Registry: new String('Adobe'),\r\n Ordering: new String('Identity'),\r\n Supplement: 0\r\n },\r\n FontDescriptor: descriptor,\r\n W: [0, this.widths]\r\n };\r\n\r\n if (!isCFF) {\r\n descendantFontData.Subtype = 'CIDFontType2';\r\n descendantFontData.CIDToGIDMap = 'Identity';\r\n }\r\n\r\n const descendantFont = this.document.ref(descendantFontData);\r\n\r\n descendantFont.end();\r\n\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n Subtype: 'Type0',\r\n BaseFont: name,\r\n Encoding: 'Identity-H',\r\n DescendantFonts: [descendantFont],\r\n ToUnicode: this.toUnicodeCmap()\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n // Maps the glyph ids encoded in the PDF back to unicode strings\r\n // Because of ligature substitutions and the like, there may be one or more\r\n // unicode characters represented by each glyph.\r\n toUnicodeCmap() {\r\n const cmap = this.document.ref();\r\n\r\n const entries = [];\r\n for (let codePoints of this.unicode) {\r\n const encoded = [];\r\n\r\n // encode codePoints to utf16\r\n for (let value of codePoints) {\r\n if (value > 0xffff) {\r\n value -= 0x10000;\r\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n value = 0xdc00 | (value & 0x3ff);\r\n }\r\n\r\n encoded.push(toHex(value));\r\n }\r\n\r\n entries.push(`<${encoded.join(' ')}>`);\r\n }\r\n\r\n const chunkSize = 256;\r\n const chunks = Math.ceil(entries.length / chunkSize);\r\n const ranges = [];\r\n for (let i = 0; i < chunks; i++) {\r\n const start = i * chunkSize;\r\n const end = Math.min((i + 1) * chunkSize, entries.length);\r\n ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`);\r\n }\r\n\r\n cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n /Registry (Adobe)\r\n /Ordering (UCS)\r\n /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000>\r\nendcodespacerange\r\n1 beginbfrange\r\n${ranges.join('\\n')}\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n return cmap;\r\n }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from 'fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n static open(document, src, family, id) {\r\n let font;\r\n if (typeof src === 'string') {\r\n if (StandardFont.isStandardFont(src)) {\r\n return new StandardFont(document, src, id);\r\n }\r\n\r\n src = fs.readFileSync(src);\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n font = fontkit.create(src, family);\r\n } else if (src instanceof Uint8Array) {\r\n font = fontkit.create(Buffer.from(src), family);\r\n } else if (src instanceof ArrayBuffer) {\r\n font = fontkit.create(Buffer.from(new Uint8Array(src)), family);\r\n }\r\n\r\n if (font == null) {\r\n throw new Error('Not a supported font format or standard PDF font.');\r\n }\r\n\r\n return new EmbeddedFont(document, font, id);\r\n }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n initFonts(defaultFont = 'Helvetica') {\r\n // Lookup table for embedded fonts\r\n this._fontFamilies = {};\r\n this._fontCount = 0;\r\n\r\n // Font state\r\n this._fontSize = 12;\r\n this._font = null;\r\n\r\n this._registeredFonts = {};\r\n\r\n // Set the default font\r\n if (defaultFont) {\r\n this.font(defaultFont);\r\n }\r\n },\r\n\r\n font(src, family, size) {\r\n let cacheKey, font;\r\n if (typeof family === 'number') {\r\n size = family;\r\n family = null;\r\n }\r\n\r\n // check registered fonts if src is a string\r\n if (typeof src === 'string' && this._registeredFonts[src]) {\r\n cacheKey = src;\r\n ({ src, family } = this._registeredFonts[src]);\r\n } else {\r\n cacheKey = family || src;\r\n if (typeof cacheKey !== 'string') {\r\n cacheKey = null;\r\n }\r\n }\r\n\r\n if (size != null) {\r\n this.fontSize(size);\r\n }\r\n\r\n // fast path: check if the font is already in the PDF\r\n if ((font = this._fontFamilies[cacheKey])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // load the font\r\n const id = `F${++this._fontCount}`;\r\n this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n // check for existing font familes with the same name already in the PDF\r\n // useful if the font was passed as a buffer\r\n if ((font = this._fontFamilies[this._font.name])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // save the font for reuse later\r\n if (cacheKey) {\r\n this._fontFamilies[cacheKey] = this._font;\r\n }\r\n\r\n if (this._font.name) {\r\n this._fontFamilies[this._font.name] = this._font;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n fontSize(_fontSize) {\r\n this._fontSize = _fontSize;\r\n return this;\r\n },\r\n\r\n currentLineHeight(includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n return this._font.lineHeight(this._fontSize, includeGap);\r\n },\r\n\r\n registerFont(name, src, family) {\r\n this._registeredFonts[name] = {\r\n src,\r\n family\r\n };\r\n\r\n return this;\r\n }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\n\r\nconst SOFT_HYPHEN = '\\u00AD';\r\nconst HYPHEN = '-';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.indent = options.indent || 0;\r\n this.characterSpacing = options.characterSpacing || 0;\r\n this.wordSpacing = options.wordSpacing === 0;\r\n this.columns = options.columns || 1;\r\n this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n this.lineWidth =\r\n (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = this.startY + options.height;\r\n } else {\r\n this.maxY = this.document.page.maxY();\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', options => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n return this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n return (this.continuedX = 0);\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', options => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n return this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return (\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing\r\n );\r\n }\r\n\r\n canFit(word, w) {\r\n if (word[word.length - 1] != SOFT_HYPHEN) {\r\n return w <= this.spaceLeft;\r\n }\r\n return w + this.wordWidth(HYPHEN) <= this.spaceLeft;\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // check for the edge case where a single character cannot fit into a line.\r\n if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n l = 1;\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n if (options.indent != null) {\r\n this.indent = options.indent;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing = options.characterSpacing;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = options.wordSpacing;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (this.canFit(word, w)) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || !this.canFit(word, w)) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n this.document.y + lh * 2 > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n // Previous entry is a soft hyphen - add visible hyphen.\r\n if (buffer[buffer.length - 1] == SOFT_HYPHEN) {\r\n buffer = buffer.slice(0, -1) + HYPHEN;\r\n this.spaceLeft -= this.wordWidth(HYPHEN);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (this.document.y + lh > this.maxY) {\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n return (this.document.y = y);\r\n } else {\r\n return (this.document.x = this.startX);\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n this.emit('sectionEnd', options, this);\r\n\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.continueOnNewPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...this.document._fillColor);\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n this.emit('sectionStart', options, this);\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n initText() {\r\n this._line = this._line.bind(this);\r\n // Current coordinates\r\n this.x = 0;\r\n this.y = 0;\r\n return (this._lineGap = 0);\r\n },\r\n\r\n lineGap(_lineGap) {\r\n this._lineGap = _lineGap;\r\n return this;\r\n },\r\n\r\n moveDown(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n moveUp(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n _text(text, x, y, options, lineCallback) {\r\n options = this._initOptions(x, y, options);\r\n\r\n // Convert text to a string\r\n text = text == null ? '' : `${text}`;\r\n\r\n // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n if (options.wordSpacing) {\r\n text = text.replace(/\\s{2,}/g, ' ');\r\n }\r\n\r\n const addStructure = () => {\r\n if (options.structParent) {\r\n options.structParent.add(this.struct(options.structType || 'P',\r\n [ this.markStructureContent(options.structType || 'P') ]));\r\n }\r\n };\r\n\r\n // word wrapping\r\n if (options.width) {\r\n let wrapper = this._wrapper;\r\n if (!wrapper) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', lineCallback);\r\n wrapper.on('firstLine', addStructure);\r\n }\r\n\r\n this._wrapper = options.continued ? wrapper : null;\r\n this._textOptions = options.continued ? options : null;\r\n wrapper.wrap(text, options);\r\n\r\n // render paragraphs as single lines\r\n } else {\r\n for (let line of text.split('\\n')) {\r\n addStructure();\r\n lineCallback(line, options);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n text(text, x, y, options) {\r\n return this._text(text, x, y, options, this._line);\r\n },\r\n\r\n widthOfString(string, options = {}) {\r\n return (\r\n this._font.widthOfString(string, this._fontSize, options.features) +\r\n (options.characterSpacing || 0) * (string.length - 1)\r\n );\r\n },\r\n\r\n heightOfString(text, options) {\r\n const { x, y } = this;\r\n\r\n options = this._initOptions(options);\r\n options.height = Infinity; // don't break pages\r\n\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n this._text(text, this.x, this.y, options, () => {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n });\r\n\r\n const height = this.y - y;\r\n this.x = x;\r\n this.y = y;\r\n\r\n return height;\r\n },\r\n\r\n list(list, x, y, options, wrapper) {\r\n options = this._initOptions(x, y, options);\r\n\r\n const listType = options.listType || 'bullet';\r\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n const midLine = unit / 2;\r\n const r = options.bulletRadius || unit / 3;\r\n const indent =\r\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n const itemIndent =\r\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n let level = 1;\r\n const items = [];\r\n const levels = [];\r\n const numbers = [];\r\n\r\n var flatten = function(list) {\r\n let n = 1;\r\n for (let i = 0; i < list.length; i++) {\r\n const item = list[i];\r\n if (Array.isArray(item)) {\r\n level++;\r\n flatten(item);\r\n level--;\r\n } else {\r\n items.push(item);\r\n levels.push(level);\r\n if (listType !== 'bullet') {\r\n numbers.push(n++);\r\n }\r\n }\r\n }\r\n };\r\n\r\n flatten(list);\r\n\r\n const label = function(n) {\r\n switch (listType) {\r\n case 'numbered':\r\n return `${n}.`;\r\n case 'lettered':\r\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n var times = Math.floor((n - 1) / 26 + 1);\r\n var text = Array(times + 1).join(letter);\r\n return `${text}.`;\r\n }\r\n };\r\n\r\n const drawListItem = function(listItem) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', this._line);\r\n\r\n level = 1;\r\n let i = 0;\r\n wrapper.once('firstLine', () => {\r\n let item, itemType, labelType, bodyType;\r\n if (options.structParent) {\r\n if (options.structTypes) {\r\n [itemType, labelType, bodyType] = options.structTypes;\r\n } else {\r\n [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody'];\r\n }\r\n }\r\n\r\n if (itemType) {\r\n item = this.struct(itemType);\r\n options.structParent.add(item);\r\n } else if (options.structParent) {\r\n item = options.structParent;\r\n }\r\n\r\n let l;\r\n if ((l = levels[i++]) !== level) {\r\n const diff = itemIndent * (l - level);\r\n this.x += diff;\r\n wrapper.lineWidth -= diff;\r\n level = l;\r\n }\r\n\r\n if (item && (labelType || bodyType)) {\r\n item.add(this.struct(labelType || bodyType,\r\n [this.markStructureContent(labelType || bodyType)]));\r\n }\r\n switch (listType) {\r\n case 'bullet':\r\n this.circle(this.x - indent + r, this.y + midLine, r);\r\n this.fill();\r\n break;\r\n case 'numbered':\r\n case 'lettered':\r\n var text = label(numbers[i - 1]);\r\n this._fragment(text, this.x - indent, this.y, options);\r\n break;\r\n }\r\n\r\n if (item && labelType && bodyType) {\r\n item.add(this.struct(bodyType, [this.markStructureContent(bodyType)]));\r\n }\r\n if (item && item !== options.structParent) {\r\n item.end();\r\n }\r\n });\r\n\r\n wrapper.on('sectionStart', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x += pos;\r\n return (wrapper.lineWidth -= pos);\r\n });\r\n\r\n wrapper.on('sectionEnd', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x -= pos;\r\n return (wrapper.lineWidth += pos);\r\n });\r\n\r\n wrapper.wrap(listItem, options);\r\n };\r\n\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n drawListItem.call(this, items[i]);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n _initOptions(x = {}, y, options = {}) {\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // clone options object\r\n const result = Object.assign({}, options);\r\n\r\n // extend options with previous values for continued text\r\n if (this._textOptions) {\r\n for (let key in this._textOptions) {\r\n const val = this._textOptions[key];\r\n if (key !== 'continued') {\r\n if (result[key] === undefined) {\r\n result[key] = val;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the current position\r\n if (x != null) {\r\n this.x = x;\r\n }\r\n if (y != null) {\r\n this.y = y;\r\n }\r\n\r\n // wrap to margins if no x or y position passed\r\n if (result.lineBreak !== false) {\r\n if (result.width == null) {\r\n result.width = this.page.width - this.x - this.page.margins.right;\r\n }\r\n result.width = Math.max(result.width, 0);\r\n }\r\n\r\n if (!result.columns) {\r\n result.columns = 0;\r\n }\r\n if (result.columnGap == null) {\r\n result.columnGap = 18;\r\n } // 1/4 inch\r\n\r\n return result;\r\n },\r\n\r\n _line(text, options = {}, wrapper) {\r\n this._fragment(text, this.x, this.y, options);\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n if (!wrapper) {\r\n return (this.x += this.widthOfString(text));\r\n } else {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n }\r\n },\r\n\r\n _fragment(text, x, y, options) {\r\n let dy, encoded, i, positions, textWidth, words;\r\n text = `${text}`.replace(/\\n/g, '');\r\n if (text.length === 0) {\r\n return;\r\n }\r\n\r\n // handle options\r\n const align = options.align || 'left';\r\n let wordSpacing = options.wordSpacing || 0;\r\n const characterSpacing = options.characterSpacing || 0;\r\n\r\n // text alignments\r\n if (options.width) {\r\n switch (align) {\r\n case 'right':\r\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n x += options.lineWidth - textWidth;\r\n break;\r\n\r\n case 'center':\r\n x += options.lineWidth / 2 - options.textWidth / 2;\r\n break;\r\n\r\n case 'justify':\r\n // calculate the word spacing value\r\n words = text.trim().split(/\\s+/);\r\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n wordSpacing = Math.max(\r\n 0,\r\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n spaceWidth\r\n );\r\n break;\r\n }\r\n }\r\n\r\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n if (typeof options.baseline === 'number') {\r\n dy = -options.baseline;\r\n } else {\r\n switch (options.baseline) {\r\n case 'svg-middle':\r\n dy = 0.5 * this._font.xHeight;\r\n break;\r\n case 'middle':\r\n case 'svg-central':\r\n dy = 0.5 * (this._font.descender + this._font.ascender);\r\n break;\r\n case 'bottom':\r\n case 'ideographic':\r\n dy = this._font.descender;\r\n break;\r\n case 'alphabetic':\r\n dy = 0;\r\n break;\r\n case 'mathematical':\r\n dy = 0.5 * this._font.ascender;\r\n break;\r\n case 'hanging':\r\n dy = 0.8 * this._font.ascender;\r\n break;\r\n case 'top':\r\n dy = this._font.ascender;\r\n break;\r\n default:\r\n dy = this._font.ascender;\r\n }\r\n dy = (dy / 1000) * this._fontSize;\r\n }\r\n\r\n // calculate the actual rendered width of the string after word and character spacing\r\n const renderedWidth =\r\n options.textWidth +\r\n wordSpacing * (options.wordCount - 1) +\r\n characterSpacing * (text.length - 1);\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // create underline\r\n if (options.underline) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = (y + this.currentLineHeight()) - lineWidth\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n \r\n // create strikethrough line\r\n if (options.strike) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = y + this.currentLineHeight() / 2;\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n\r\n this.save();\r\n\r\n // oblique (angle in degrees or boolean)\r\n if (options.oblique) {\r\n let skew;\r\n if (typeof options.oblique === 'number') {\r\n skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n } else {\r\n skew = -0.25;\r\n }\r\n this.transform(1, 0, 0, 1, x, y);\r\n this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n this.transform(1, 0, 0, 1, -x, -y);\r\n }\r\n\r\n // flip coordinate system\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n y = this.page.height - y - dy;\r\n\r\n // add current font to page if necessary\r\n if (this.page.fonts[this._font.id] == null) {\r\n this.page.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // begin the text object\r\n this.addContent('BT');\r\n\r\n // text position\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n // font and font size\r\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n // rendering mode\r\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n if (mode) {\r\n this.addContent(`${mode} Tr`);\r\n }\r\n\r\n // Character spacing\r\n if (characterSpacing) {\r\n this.addContent(`${number(characterSpacing)} Tc`);\r\n }\r\n\r\n // Add the actual text\r\n // If we have a word spacing value, we need to encode each word separately\r\n // since the normal Tw operator only works on character code 32, which isn't\r\n // used for embedded fonts.\r\n if (wordSpacing) {\r\n words = text.trim().split(/\\s+/);\r\n wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n wordSpacing *= 1000 / this._fontSize;\r\n\r\n encoded = [];\r\n positions = [];\r\n for (let word of words) {\r\n const [encodedWord, positionsWord] = this._font.encode(\r\n word,\r\n options.features\r\n );\r\n encoded = encoded.concat(encodedWord);\r\n positions = positions.concat(positionsWord);\r\n\r\n // add the word spacing to the end of the word\r\n // clone object because of cache\r\n const space = {};\r\n const object = positions[positions.length - 1];\r\n for (let key in object) {\r\n const val = object[key];\r\n space[key] = val;\r\n }\r\n space.xAdvance += wordSpacing;\r\n positions[positions.length - 1] = space;\r\n }\r\n } else {\r\n [encoded, positions] = this._font.encode(text, options.features);\r\n }\r\n\r\n const scale = this._fontSize / 1000;\r\n const commands = [];\r\n let last = 0;\r\n let hadOffset = false;\r\n\r\n // Adds a segment of text to the TJ command buffer\r\n const addSegment = cur => {\r\n if (last < cur) {\r\n const hex = encoded.slice(last, cur).join('');\r\n const advance =\r\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n commands.push(`<${hex}> ${number(-advance)}`);\r\n }\r\n\r\n return (last = cur);\r\n };\r\n\r\n // Flushes the current TJ commands to the output stream\r\n const flush = i => {\r\n addSegment(i);\r\n\r\n if (commands.length > 0) {\r\n this.addContent(`[${commands.join(' ')}] TJ`);\r\n return (commands.length = 0);\r\n }\r\n };\r\n\r\n for (i = 0; i < positions.length; i++) {\r\n // If we have an x or y offset, we have to break out of the current TJ command\r\n // so we can move the text position.\r\n const pos = positions[i];\r\n if (pos.xOffset || pos.yOffset) {\r\n // Flush the current buffer\r\n flush(i);\r\n\r\n // Move the text position and flush just the current character\r\n this.addContent(\r\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n y + pos.yOffset * scale\r\n )} Tm`\r\n );\r\n flush(i + 1);\r\n\r\n hadOffset = true;\r\n } else {\r\n // If the last character had an offset, reset the text position\r\n if (hadOffset) {\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n hadOffset = false;\r\n }\r\n\r\n // Group segments that don't have any advance adjustments\r\n if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n addSegment(i + 1);\r\n }\r\n }\r\n\r\n x += pos.xAdvance * scale;\r\n }\r\n\r\n // Flush any remaining commands\r\n flush(i);\r\n\r\n // end the text object\r\n this.addContent('ET');\r\n\r\n // restore flipped coordinate system\r\n return this.restore();\r\n }\r\n};\r\n","import exif from 'jpeg-exif';\r\n\r\nconst MARKERS = [\r\n 0xffc0,\r\n 0xffc1,\r\n 0xffc2,\r\n 0xffc3,\r\n 0xffc5,\r\n 0xffc6,\r\n 0xffc7,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffca,\r\n 0xffcb,\r\n 0xffcc,\r\n 0xffcd,\r\n 0xffce,\r\n 0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n 1: 'DeviceGray',\r\n 3: 'DeviceRGB',\r\n 4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n constructor(data, label) {\r\n let marker;\r\n this.data = data;\r\n this.label = label;\r\n if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n throw 'SOI not found in JPEG';\r\n }\r\n\r\n // Parse the EXIF orientation\r\n this.orientation = exif.fromBuffer(this.data).Orientation || 1;\r\n\r\n let pos = 2;\r\n while (pos < this.data.length) {\r\n marker = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n if (MARKERS.includes(marker)) {\r\n break;\r\n }\r\n pos += this.data.readUInt16BE(pos);\r\n }\r\n\r\n if (!MARKERS.includes(marker)) {\r\n throw 'Invalid JPEG.';\r\n }\r\n pos += 2;\r\n\r\n this.bits = this.data[pos++];\r\n this.height = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n this.width = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n const channels = this.data[pos++];\r\n this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n this.obj = document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: this.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n ColorSpace: this.colorSpace,\r\n Filter: 'DCTDecode'\r\n });\r\n\r\n // add extra decode params for CMYK images. By swapping the\r\n // min and max values from the default, we invert the colors. See\r\n // section 4.8.4 of the spec.\r\n if (this.colorSpace === 'DeviceCMYK') {\r\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n }\r\n\r\n this.obj.end(this.data);\r\n\r\n // free memory\r\n return (this.data = null);\r\n }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n constructor(data, label) {\r\n this.label = label;\r\n this.image = new PNG(data);\r\n this.width = this.image.width;\r\n this.height = this.image.height;\r\n this.imgData = this.image.imgData;\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n let dataDecoded = false;\r\n\r\n this.document = document;\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n const hasAlphaChannel = this.image.hasAlphaChannel;\r\n const isInterlaced = this.image.interlaceMethod === 1;\r\n\r\n this.obj = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n Filter: 'FlateDecode'\r\n });\r\n\r\n if (!hasAlphaChannel) {\r\n const params = this.document.ref({\r\n Predictor: isInterlaced ? 1 : 15,\r\n Colors: this.image.colors,\r\n BitsPerComponent: this.image.bits,\r\n Columns: this.width\r\n });\r\n\r\n this.obj.data['DecodeParms'] = params;\r\n params.end();\r\n }\r\n\r\n if (this.image.palette.length === 0) {\r\n this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n } else {\r\n // embed the color palette in the PDF as an object stream\r\n const palette = this.document.ref();\r\n palette.end(Buffer.from(this.image.palette));\r\n\r\n // build the color space array for the image\r\n this.obj.data['ColorSpace'] = [\r\n 'Indexed',\r\n 'DeviceRGB',\r\n this.image.palette.length / 3 - 1,\r\n palette\r\n ];\r\n }\r\n\r\n // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n // a dedicated PNG chunk.\r\n if (this.image.transparency.grayscale != null) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const val = this.image.transparency.grayscale;\r\n this.obj.data['Mask'] = [val, val];\r\n } else if (this.image.transparency.rgb) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const { rgb } = this.image.transparency;\r\n const mask = [];\r\n for (let x of rgb) {\r\n mask.push(x, x);\r\n }\r\n\r\n this.obj.data['Mask'] = mask;\r\n } else if (this.image.transparency.indexed) {\r\n // Create a transparency SMask for the image based on the data\r\n // in the PLTE and tRNS sections. See below for details on SMasks.\r\n dataDecoded = true;\r\n return this.loadIndexedAlphaChannel();\r\n } else if (hasAlphaChannel) {\r\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n // channel mixed in with the main image data. Separate this data out into an\r\n // SMask object and store it separately in the PDF.\r\n dataDecoded = true;\r\n return this.splitAlphaChannel();\r\n }\r\n\r\n if (isInterlaced && !dataDecoded) {\r\n return this.decodeData();\r\n }\r\n\r\n this.finalize();\r\n }\r\n\r\n finalize() {\r\n if (this.alphaChannel) {\r\n const sMask = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n Height: this.height,\r\n Width: this.width,\r\n BitsPerComponent: 8,\r\n Filter: 'FlateDecode',\r\n ColorSpace: 'DeviceGray',\r\n Decode: [0, 1]\r\n });\r\n\r\n sMask.end(this.alphaChannel);\r\n this.obj.data['SMask'] = sMask;\r\n }\r\n\r\n // add the actual image data\r\n this.obj.end(this.imgData);\r\n\r\n // free memory\r\n this.image = null;\r\n return (this.imgData = null);\r\n }\r\n\r\n splitAlphaChannel() {\r\n return this.image.decodePixels(pixels => {\r\n let a, p;\r\n const colorCount = this.image.colors;\r\n const pixelCount = this.width * this.height;\r\n const imgData = Buffer.alloc(pixelCount * colorCount);\r\n const alphaChannel = Buffer.alloc(pixelCount);\r\n\r\n let i = (p = a = 0);\r\n const len = pixels.length;\r\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n while (i < len) {\r\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n imgData[p++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n alphaChannel[a++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n\r\n this.imgData = zlib.deflateSync(imgData);\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n loadIndexedAlphaChannel() {\r\n const transparency = this.image.transparency.indexed;\r\n return this.image.decodePixels(pixels => {\r\n const alphaChannel = Buffer.alloc(this.width * this.height);\r\n\r\n let i = 0;\r\n for (let j = 0, end = pixels.length; j < end; j++) {\r\n alphaChannel[i++] = transparency[pixels[j]];\r\n }\r\n\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n decodeData() {\r\n this.image.decodePixels(pixels => {\r\n this.imgData = zlib.deflateSync(pixels);\r\n this.finalize();\r\n });\r\n }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:.+?;base64,(.*)$/.exec(src))) {\r\n data = Buffer.from(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n initImages() {\r\n this._imageRegistry = {};\r\n return (this._imageCount = 0);\r\n },\r\n\r\n image(src, x, y, options = {}) {\r\n let bh, bp, bw, image, ip, left, left1, rotateAngle, originX, originY;\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // Ignore orientation based on document options or image options\r\n const ignoreOrientation =\r\n options.ignoreOrientation ||\r\n (options.ignoreOrientation !== false && this.options.ignoreOrientation);\r\n\r\n x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n if (src.width && src.height) {\r\n image = src;\r\n } else {\r\n image = this.openImage(src);\r\n }\r\n }\r\n\r\n if (!image.obj) {\r\n image.embed(this);\r\n }\r\n\r\n if (this.page.xobjects[image.label] == null) {\r\n this.page.xobjects[image.label] = image.obj;\r\n }\r\n\r\n let { width, height } = image;\r\n\r\n // If EXIF orientation calls for it, swap width and height\r\n if (!ignoreOrientation && image.orientation > 4) {\r\n [width, height] = [height, width];\r\n }\r\n\r\n let w = options.width || width;\r\n let h = options.height || height;\r\n\r\n if (options.width && !options.height) {\r\n const wp = w / width;\r\n w = width * wp;\r\n h = height * wp;\r\n } else if (options.height && !options.width) {\r\n const hp = h / height;\r\n w = width * hp;\r\n h = height * hp;\r\n } else if (options.scale) {\r\n w = width * options.scale;\r\n h = height * options.scale;\r\n } else if (options.fit) {\r\n [bw, bh] = options.fit;\r\n bp = bw / bh;\r\n ip = width / height;\r\n if (ip > bp) {\r\n w = bw;\r\n h = bw / ip;\r\n } else {\r\n h = bh;\r\n w = bh * ip;\r\n }\r\n } else if (options.cover) {\r\n [bw, bh] = options.cover;\r\n bp = bw / bh;\r\n ip = width / height;\r\n if (ip > bp) {\r\n h = bh;\r\n w = bh * ip;\r\n } else {\r\n w = bw;\r\n h = bw / ip;\r\n }\r\n }\r\n\r\n if (options.fit || options.cover) {\r\n if (options.align === 'center') {\r\n x = x + bw / 2 - w / 2;\r\n } else if (options.align === 'right') {\r\n x = x + bw - w;\r\n }\r\n\r\n if (options.valign === 'center') {\r\n y = y + bh / 2 - h / 2;\r\n } else if (options.valign === 'bottom') {\r\n y = y + bh - h;\r\n }\r\n }\r\n\r\n if (!ignoreOrientation) {\r\n switch (image.orientation) {\r\n // No orientation (need to flip image, though, because of the default transform matrix on the document)\r\n default:\r\n case 1:\r\n h = -h;\r\n y -= h;\r\n\r\n rotateAngle = 0;\r\n break;\r\n // Flip Horizontal\r\n case 2:\r\n w = -w;\r\n h = -h;\r\n x -= w;\r\n y -= h;\r\n\r\n rotateAngle = 0;\r\n break;\r\n // Rotate 180 degrees\r\n case 3:\r\n originX = x;\r\n originY = y;\r\n\r\n h = -h;\r\n x -= w;\r\n\r\n rotateAngle = 180;\r\n break;\r\n // Flip vertical\r\n case 4:\r\n // Do nothing, image will be flipped\r\n\r\n break;\r\n // Flip horizontally and rotate 270 degrees CW\r\n case 5:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n y -= h;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Rotate 90 degrees CW\r\n case 6:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Flip horizontally and rotate 90 degrees CW\r\n case 7:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n w = -w;\r\n x -= w;\r\n\r\n rotateAngle = 90;\r\n break;\r\n // Rotate 270 degrees CW\r\n case 8:\r\n originX = x;\r\n originY = y;\r\n\r\n [w, h] = [h, w];\r\n h = -h;\r\n x -= w;\r\n y -= h;\r\n\r\n rotateAngle = -90;\r\n break;\r\n }\r\n } else {\r\n h = -h;\r\n y -= h;\r\n rotateAngle = 0;\r\n }\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, w, h, options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, w, h, options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // Set the current y position to below the image if it is in the document flow\r\n if (this.y === y) {\r\n this.y += h;\r\n }\r\n\r\n this.save();\r\n\r\n if (rotateAngle) {\r\n this.rotate(rotateAngle, {\r\n origin: [originX, originY]\r\n });\r\n }\r\n\r\n this.transform(w, 0, 0, h, x, y);\r\n this.addContent(`/${image.label} Do`);\r\n this.restore();\r\n\r\n return this;\r\n },\r\n\r\n openImage(src) {\r\n let image;\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n image = PDFImage.open(src, `I${++this._imageCount}`);\r\n if (typeof src === 'string') {\r\n this._imageRegistry[src] = image;\r\n }\r\n }\r\n\r\n return image;\r\n }\r\n};\r\n","export default {\r\n annotate(x, y, w, h, options) {\r\n options.Type = 'Annot';\r\n options.Rect = this._convertRect(x, y, w, h);\r\n options.Border = [0, 0, 0];\r\n\r\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\r\n options.F = 1 << 2; // Print Annotation Flag\r\n }\r\n\r\n if (options.Subtype !== 'Link') {\r\n if (options.C == null) {\r\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n }\r\n } // convert colors\r\n delete options.color;\r\n\r\n if (typeof options.Dest === 'string') {\r\n options.Dest = new String(options.Dest);\r\n }\r\n\r\n // Capitalize keys\r\n for (let key in options) {\r\n const val = options[key];\r\n options[key[0].toUpperCase() + key.slice(1)] = val;\r\n }\r\n\r\n const ref = this.ref(options);\r\n this.page.annotations.push(ref);\r\n ref.end();\r\n return this;\r\n },\r\n\r\n note(x, y, w, h, contents, options = {}) {\r\n options.Subtype = 'Text';\r\n options.Contents = new String(contents);\r\n options.Name = 'Comment';\r\n if (options.color == null) {\r\n options.color = [243, 223, 92];\r\n }\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n goTo(x, y, w, h, name, options = {}) {\r\n options.Subtype = 'Link';\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: new String(name)\r\n });\r\n options.A.end();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n link(x, y, w, h, url, options = {}) {\r\n options.Subtype = 'Link';\r\n\r\n if (typeof url === 'number') {\r\n // Link to a page in the document (the page must already exist)\r\n const pages = this._root.data.Pages.data;\r\n if (url >= 0 && url < pages.Kids.length) {\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: [pages.Kids[url], 'XYZ', null, null, null]\r\n });\r\n options.A.end();\r\n } else {\r\n throw new Error(`The document has no page ${url}`);\r\n }\r\n } else {\r\n // Link to an external url\r\n options.A = this.ref({\r\n S: 'URI',\r\n URI: new String(url)\r\n });\r\n options.A.end();\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _markup(x, y, w, h, options = {}) {\r\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n highlight(x, y, w, h, options = {}) {\r\n options.Subtype = 'Highlight';\r\n if (options.color == null) {\r\n options.color = [241, 238, 148];\r\n }\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n underline(x, y, w, h, options = {}) {\r\n options.Subtype = 'Underline';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n strike(x, y, w, h, options = {}) {\r\n options.Subtype = 'StrikeOut';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n lineAnnotation(x1, y1, x2, y2, options = {}) {\r\n options.Subtype = 'Line';\r\n options.Contents = new String();\r\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n return this.annotate(x1, y1, x2, y2, options);\r\n },\r\n\r\n rectAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Square';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n ellipseAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Circle';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n textAnnotation(x, y, w, h, text, options = {}) {\r\n options.Subtype = 'FreeText';\r\n options.Contents = new String(text);\r\n options.DA = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n fileAnnotation(x, y, w, h, file = {}, options = {}) {\r\n // create hidden file\r\n const filespec = this.file(\r\n file.src,\r\n Object.assign({ hidden: true }, file)\r\n );\r\n\r\n options.Subtype = 'FileAttachment';\r\n options.FS = filespec;\r\n\r\n // add description from filespec unless description (Contents) has already been set\r\n if (options.Contents) {\r\n options.Contents = new String(options.Contents);\r\n } else if (filespec.data.Desc) {\r\n options.Contents = filespec.data.Desc;\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _convertRect(x1, y1, w, h) {\r\n // flip y1 and y2\r\n let y2 = y1;\r\n y1 += h;\r\n\r\n // make x2\r\n let x2 = x1 + w;\r\n\r\n // apply current transformation matrix to points\r\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n x1 = m0 * x1 + m2 * y1 + m4;\r\n y1 = m1 * x1 + m3 * y1 + m5;\r\n x2 = m0 * x2 + m2 * y2 + m4;\r\n y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n return [x1, y1, x2, y2];\r\n }\r\n};\r\n","class PDFOutline {\r\n constructor(document, parent, title, dest, options = { expanded: false }) {\r\n this.document = document;\r\n this.options = options;\r\n this.outlineData = {};\r\n\r\n if (dest !== null) {\r\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n }\r\n\r\n if (parent !== null) {\r\n this.outlineData['Parent'] = parent;\r\n }\r\n\r\n if (title !== null) {\r\n this.outlineData['Title'] = new String(title);\r\n }\r\n\r\n this.dictionary = this.document.ref(this.outlineData);\r\n this.children = [];\r\n }\r\n\r\n addItem(title, options = { expanded: false }) {\r\n const result = new PDFOutline(\r\n this.document,\r\n this.dictionary,\r\n title,\r\n this.document.page,\r\n options\r\n );\r\n this.children.push(result);\r\n\r\n return result;\r\n }\r\n\r\n endOutline() {\r\n if (this.children.length > 0) {\r\n if (this.options.expanded) {\r\n this.outlineData.Count = this.children.length;\r\n }\r\n\r\n const first = this.children[0],\r\n last = this.children[this.children.length - 1];\r\n this.outlineData.First = first.dictionary;\r\n this.outlineData.Last = last.dictionary;\r\n\r\n for (let i = 0, len = this.children.length; i < len; i++) {\r\n const child = this.children[i];\r\n if (i > 0) {\r\n child.outlineData.Prev = this.children[i - 1].dictionary;\r\n }\r\n if (i < this.children.length - 1) {\r\n child.outlineData.Next = this.children[i + 1].dictionary;\r\n }\r\n child.endOutline();\r\n }\r\n }\r\n\r\n return this.dictionary.end();\r\n }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n initOutline() {\r\n return (this.outline = new PDFOutline(this, null, null, null));\r\n },\r\n\r\n endOutline() {\r\n this.outline.endOutline();\r\n if (this.outline.children.length > 0) {\r\n this._root.data.Outlines = this.outline.dictionary;\r\n return (this._root.data.PageMode = 'UseOutlines');\r\n }\r\n }\r\n};\r\n","/*\r\nPDFStructureContent - a reference to a marked structure content\r\nBy Ben Schmidt\r\n*/\r\n\r\nclass PDFStructureContent {\r\n constructor(pageRef, mcid) {\r\n this.refs = [{ pageRef, mcid }];\r\n }\r\n\r\n push(structContent) {\r\n structContent.refs.forEach((ref) => this.refs.push(ref));\r\n }\r\n}\r\n\r\nexport default PDFStructureContent;\r\n","/*\r\nPDFStructureElement - represents an element in the PDF logical structure tree\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureContent from \"./structure_content\";\r\n\r\nclass PDFStructureElement {\r\n constructor(document, type, options = {}, children = null) {\r\n this.document = document;\r\n\r\n this._attached = false;\r\n this._ended = false;\r\n this._flushed = false;\r\n this.dictionary = document.ref({\r\n // Type: \"StructElem\",\r\n S: type\r\n });\r\n\r\n const data = this.dictionary.data;\r\n\r\n if (Array.isArray(options) || this._isValidChild(options)) {\r\n children = options;\r\n options = {};\r\n }\r\n\r\n if (typeof options.title !== 'undefined') {\r\n data.T = new String(options.title);\r\n }\r\n if (typeof options.lang !== 'undefined') {\r\n data.Lang = new String(options.lang);\r\n }\r\n if (typeof options.alt !== 'undefined') {\r\n data.Alt = new String(options.alt);\r\n }\r\n if (typeof options.expanded !== 'undefined') {\r\n data.E = new String(options.expanded);\r\n }\r\n if (typeof options.actual !== 'undefined') {\r\n data.ActualText = new String(options.actual);\r\n }\r\n\r\n this._children = [];\r\n\r\n if (children) {\r\n if (!Array.isArray(children)) {\r\n children = [children];\r\n }\r\n children.forEach((child) => this.add(child));\r\n this.end();\r\n }\r\n }\r\n\r\n add(child) {\r\n if (this._ended) {\r\n throw new Error(`Cannot add child to already-ended structure element`);\r\n }\r\n\r\n if (!this._isValidChild(child)) {\r\n throw new Error(`Invalid structure element child`);\r\n }\r\n\r\n if (child instanceof PDFStructureElement) {\r\n child.setParent(this.dictionary);\r\n if (this._attached) {\r\n child.setAttached();\r\n }\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n this._addContentToParentTree(child);\r\n }\r\n\r\n if (typeof child === 'function' && this._attached) {\r\n // _contentForClosure() adds the content to the parent tree\r\n child = this._contentForClosure(child);\r\n }\r\n\r\n this._children.push(child);\r\n\r\n return this;\r\n }\r\n\r\n _addContentToParentTree(content) {\r\n content.refs.forEach(({ pageRef, mcid }) => {\r\n const pageStructParents = this.document.getStructParentTree()\r\n .get(pageRef.data.StructParents);\r\n pageStructParents[mcid] = this.dictionary;\r\n });\r\n }\r\n\r\n setParent(parentRef) {\r\n if (this.dictionary.data.P) {\r\n throw new Error(`Structure element added to more than one parent`);\r\n }\r\n\r\n this.dictionary.data.P = parentRef;\r\n\r\n this._flush();\r\n }\r\n\r\n setAttached() {\r\n if (this._attached) {\r\n return;\r\n }\r\n\r\n this._children.forEach((child, index) => {\r\n if (child instanceof PDFStructureElement) {\r\n child.setAttached();\r\n }\r\n if (typeof child === 'function') {\r\n this._children[index] = this._contentForClosure(child);\r\n }\r\n });\r\n\r\n this._attached = true;\r\n\r\n this._flush();\r\n }\r\n\r\n end() {\r\n if (this._ended) {\r\n return;\r\n }\r\n\r\n this._children\r\n .filter((child) => child instanceof PDFStructureElement)\r\n .forEach((child) => child.end());\r\n\r\n this._ended = true;\r\n\r\n this._flush();\r\n }\r\n\r\n _isValidChild(child) {\r\n return child instanceof PDFStructureElement ||\r\n child instanceof PDFStructureContent ||\r\n typeof child === 'function';\r\n }\r\n\r\n _contentForClosure(closure) {\r\n const content = this.document.markStructureContent(this.dictionary.data.S);\r\n closure();\r\n this.document.endMarkedContent();\r\n\r\n this._addContentToParentTree(content);\r\n\r\n return content;\r\n }\r\n\r\n _isFlushable() {\r\n if (!this.dictionary.data.P || !this._ended) {\r\n return false;\r\n }\r\n\r\n return this._children.every((child) => {\r\n if (typeof child === 'function') {\r\n return false;\r\n }\r\n if (child instanceof PDFStructureElement) {\r\n return child._isFlushable();\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n _flush() {\r\n if (this._flushed || !this._isFlushable()) {\r\n return;\r\n }\r\n\r\n this.dictionary.data.K = [];\r\n\r\n this._children.forEach((child) => this._flushChild(child));\r\n\r\n this.dictionary.end();\r\n\r\n // free memory used by children; the dictionary itself may still be\r\n // referenced by a parent structure element or root, but we can\r\n // at least trim the tree here\r\n this._children = [];\r\n this.dictionary.data.K = null;\r\n\r\n this._flushed = true;\r\n }\r\n\r\n _flushChild(child) {\r\n if (child instanceof PDFStructureElement) {\r\n this.dictionary.data.K.push(child.dictionary);\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n child.refs.forEach(({ pageRef, mcid }) => {\r\n if (!this.dictionary.data.Pg) {\r\n this.dictionary.data.Pg = pageRef;\r\n }\r\n\r\n if (this.dictionary.data.Pg === pageRef) {\r\n this.dictionary.data.K.push(mcid);\r\n } else {\r\n this.dictionary.data.K.push({\r\n Type: \"MCR\",\r\n Pg: pageRef,\r\n MCID: mcid\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default PDFStructureElement;\r\n","/*\r\nPDFNumberTree - represents a number tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNumberTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return parseInt(a) - parseInt(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Nums\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return parseInt(k);\r\n }\r\n}\r\n\r\nexport default PDFNumberTree;\r\n","/*\r\nMarkings mixin - support marked content sequences in content streams\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureElement from \"../structure_element\";\r\nimport PDFStructureContent from \"../structure_content\";\r\nimport PDFNumberTree from \"../number_tree\";\r\nimport PDFObject from \"../object\";\r\n\r\nexport default {\r\n\r\n initMarkings(options) {\r\n this.structChildren = [];\r\n\r\n if (options.tagged) {\r\n this.getMarkInfoDictionary().data.Marked = true;\r\n this.getStructTreeRoot();\r\n }\r\n },\r\n\r\n markContent(tag, options = null) {\r\n if (tag === 'Artifact' || (options && options.mcid)) {\r\n let toClose = 0;\r\n this.page.markings.forEach((marking) => {\r\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\r\n toClose++;\r\n }\r\n });\r\n while (toClose--) {\r\n this.endMarkedContent();\r\n }\r\n }\r\n\r\n if (!options) {\r\n this.page.markings.push({ tag });\r\n this.addContent(`/${tag} BMC`);\r\n return this;\r\n }\r\n\r\n this.page.markings.push({ tag, options });\r\n\r\n const dictionary = {};\r\n\r\n if (typeof options.mcid !== 'undefined') {\r\n dictionary.MCID = options.mcid;\r\n }\r\n if (tag === 'Artifact') {\r\n if (typeof options.type === 'string') {\r\n dictionary.Type = options.type;\r\n }\r\n if (Array.isArray(options.bbox)) {\r\n dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3],\r\n options.bbox[2], this.page.height - options.bbox[1]];\r\n }\r\n if (Array.isArray(options.attached) &&\r\n options.attached.every(val => typeof val === 'string')) {\r\n dictionary.Attached = options.attached;\r\n }\r\n }\r\n if (tag === 'Span') {\r\n if (options.lang) {\r\n dictionary.Lang = new String(options.lang);\r\n }\r\n if (options.alt) {\r\n dictionary.Alt = new String(options.alt);\r\n }\r\n if (options.expanded) {\r\n dictionary.E = new String(options.expanded);\r\n }\r\n if (options.actual) {\r\n dictionary.ActualText = new String(options.actual);\r\n }\r\n }\r\n\r\n this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\r\n return this;\r\n },\r\n\r\n markStructureContent(tag, options = {}) {\r\n const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\r\n const mcid = pageStructParents.length;\r\n pageStructParents.push(null);\r\n\r\n this.markContent(tag, { ...options, mcid });\r\n\r\n const structContent = new PDFStructureContent(this.page.dictionary, mcid);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n return structContent;\r\n },\r\n\r\n endMarkedContent() {\r\n this.page.markings.pop();\r\n this.addContent('EMC');\r\n return this;\r\n },\r\n\r\n struct(type, options = {}, children = null) {\r\n return new PDFStructureElement(this, type, options, children);\r\n },\r\n\r\n addStructure(structElem) {\r\n const structTreeRoot = this.getStructTreeRoot();\r\n structElem.setParent(structTreeRoot);\r\n structElem.setAttached();\r\n this.structChildren.push(structElem);\r\n if (!structTreeRoot.data.K) {\r\n structTreeRoot.data.K = [];\r\n }\r\n structTreeRoot.data.K.push(structElem.dictionary);\r\n return this;\r\n },\r\n\r\n initPageMarkings(pageMarkings) {\r\n pageMarkings.forEach((marking) => {\r\n if (marking.structContent) {\r\n const structContent = marking.structContent;\r\n const newStructContent = this.markStructureContent(marking.tag, marking.options);\r\n structContent.push(newStructContent);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n } else {\r\n this.markContent(marking.tag, marking.options);\r\n }\r\n });\r\n },\r\n\r\n endPageMarkings(page) {\r\n const pageMarkings = page.markings;\r\n pageMarkings.forEach(() => page.write('EMC'));\r\n page.markings = [];\r\n return pageMarkings;\r\n },\r\n\r\n getMarkInfoDictionary() {\r\n if (!this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo = this.ref({});\r\n }\r\n return this._root.data.MarkInfo;\r\n },\r\n\r\n getStructTreeRoot() {\r\n if (!this._root.data.StructTreeRoot) {\r\n this._root.data.StructTreeRoot = this.ref({\r\n Type: 'StructTreeRoot',\r\n ParentTree: new PDFNumberTree(),\r\n ParentTreeNextKey: 0\r\n });\r\n }\r\n return this._root.data.StructTreeRoot;\r\n },\r\n\r\n getStructParentTree() {\r\n return this.getStructTreeRoot().data.ParentTree;\r\n },\r\n\r\n createStructParentTreeNextKey() {\r\n // initialise the MarkInfo dictionary\r\n this.getMarkInfoDictionary();\r\n\r\n const structTreeRoot = this.getStructTreeRoot();\r\n const key = structTreeRoot.data.ParentTreeNextKey++;\r\n structTreeRoot.data.ParentTree.add(key, []);\r\n return key;\r\n },\r\n\r\n endMarkings() {\r\n const structTreeRoot = this._root.data.StructTreeRoot;\r\n if (structTreeRoot) {\r\n structTreeRoot.end();\r\n this.structChildren.forEach((structElem) => structElem.end());\r\n }\r\n if (this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo.end();\r\n }\r\n }\r\n\r\n};\r\n","const FIELD_FLAGS = {\r\n readOnly: 1,\r\n required: 2,\r\n noExport: 4,\r\n multiline: 0x1000,\r\n password: 0x2000,\r\n toggleToOffButton: 0x4000,\r\n radioButton: 0x8000,\r\n pushButton: 0x10000,\r\n combo: 0x20000,\r\n edit: 0x40000,\r\n sort: 0x80000,\r\n multiSelect: 0x200000,\r\n noSpell: 0x400000\r\n};\r\nconst FIELD_JUSTIFY = {\r\n left: 0,\r\n center: 1,\r\n right: 2\r\n};\r\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\r\nconst FORMAT_SPECIAL = {\r\n zip: '0',\r\n zipPlus4: '1',\r\n zip4: '1',\r\n phone: '2',\r\n ssn: '3'\r\n};\r\nconst FORMAT_DEFAULT = {\r\n number: {\r\n nDec: 0,\r\n sepComma: false,\r\n negStyle: 'MinusBlack',\r\n currency: '',\r\n currencyPrepend: true\r\n },\r\n percent: {\r\n nDec: 0,\r\n sepComma: false\r\n }\r\n};\r\n\r\nexport default {\r\n /**\r\n * Must call if adding AcroForms to a document. Must also call font() before\r\n * this method to set the default font.\r\n */\r\n initForm() {\r\n if (!this._font) {\r\n throw new Error('Must set a font before calling initForm method');\r\n }\r\n this._acroform = {\r\n fonts: {},\r\n defaultFont: this._font.name\r\n };\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n\r\n let data = {\r\n Fields: [],\r\n NeedAppearances: true,\r\n DA: new String(`/${this._font.id} 0 Tf 0 g`),\r\n DR: {\r\n Font: {}\r\n }\r\n };\r\n data.DR.Font[this._font.id] = this._font.ref();\r\n const AcroForm = this.ref(data);\r\n this._root.data.AcroForm = AcroForm;\r\n return this;\r\n },\r\n\r\n /**\r\n * Called automatically by document.js\r\n */\r\n endAcroForm() {\r\n if (this._root.data.AcroForm) {\r\n if (\r\n !Object.keys(this._acroform.fonts).length &&\r\n !this._acroform.defaultFont\r\n ) {\r\n throw new Error('No fonts specified for PDF form');\r\n }\r\n let fontDict = this._root.data.AcroForm.data.DR.Font;\r\n Object.keys(this._acroform.fonts).forEach(name => {\r\n fontDict[name] = this._acroform.fonts[name];\r\n });\r\n this._root.data.AcroForm.data.Fields.forEach(fieldRef => {\r\n this._endChild(fieldRef);\r\n });\r\n this._root.data.AcroForm.end();\r\n }\r\n return this;\r\n },\r\n\r\n _endChild(ref) {\r\n if (Array.isArray(ref.data.Kids)) {\r\n ref.data.Kids.forEach(childRef => {\r\n this._endChild(childRef);\r\n });\r\n ref.end();\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates and adds a form field to the document. Form fields are intermediate\r\n * nodes in a PDF form that are used to specify form name heirarchy and form\r\n * value defaults.\r\n * @param {string} name - field name (T attribute in field dictionary)\r\n * @param {object} options - other attributes to include in field dictionary\r\n */\r\n formField(name, options = {}) {\r\n let fieldDict = this._fieldDict(name, null, options);\r\n let fieldRef = this.ref(fieldDict);\r\n this._addToParent(fieldRef);\r\n return fieldRef;\r\n },\r\n\r\n /**\r\n * Creates and adds a Form Annotation to the document. Form annotations are\r\n * called Widget annotations internally within a PDF file.\r\n * @param {string} name - form field name (T attribute of widget annotation\r\n * dictionary)\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} w\r\n * @param {number} h\r\n * @param {object} options\r\n */\r\n formAnnotation(name, type, x, y, w, h, options = {}) {\r\n let fieldDict = this._fieldDict(name, type, options);\r\n fieldDict.Subtype = 'Widget';\r\n if (fieldDict.F === undefined) {\r\n fieldDict.F = 4; // print the annotation\r\n }\r\n\r\n // Add Field annot to page, and get it's ref\r\n this.annotate(x, y, w, h, fieldDict);\r\n let annotRef = this.page.annotations[this.page.annotations.length - 1];\r\n\r\n return this._addToParent(annotRef);\r\n },\r\n\r\n formText(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'text', x, y, w, h, options);\r\n },\r\n\r\n formPushButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\r\n },\r\n\r\n formCombo(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\r\n },\r\n\r\n formList(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'list', x, y, w, h, options);\r\n },\r\n\r\n formRadioButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\r\n },\r\n\r\n formCheckbox(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\r\n },\r\n\r\n _addToParent(fieldRef) {\r\n let parent = fieldRef.data.Parent;\r\n if (parent) {\r\n if (!parent.data.Kids) {\r\n parent.data.Kids = [];\r\n }\r\n parent.data.Kids.push(fieldRef);\r\n } else {\r\n this._root.data.AcroForm.data.Fields.push(fieldRef);\r\n }\r\n return this;\r\n },\r\n\r\n _fieldDict(name, type, options = {}) {\r\n if (!this._acroform) {\r\n throw new Error(\r\n 'Call document.initForms() method before adding form elements to document'\r\n );\r\n }\r\n let opts = Object.assign({}, options);\r\n if (type !== null) {\r\n opts = this._resolveType(type, options);\r\n }\r\n opts = this._resolveFlags(opts);\r\n opts = this._resolveJustify(opts);\r\n opts = this._resolveFont(opts);\r\n opts = this._resolveStrings(opts);\r\n opts = this._resolveColors(opts);\r\n opts = this._resolveFormat(opts);\r\n opts.T = new String(name);\r\n if (opts.parent) {\r\n opts.Parent = opts.parent;\r\n delete opts.parent;\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveType(type, opts) {\r\n if (type === 'text') {\r\n opts.FT = 'Tx';\r\n } else if (type === 'pushButton') {\r\n opts.FT = 'Btn';\r\n opts.pushButton = true;\r\n } else if (type === 'radioButton') {\r\n opts.FT = 'Btn';\r\n opts.radioButton = true;\r\n } else if (type === 'checkbox') {\r\n opts.FT = 'Btn';\r\n } else if (type === 'combo') {\r\n opts.FT = 'Ch';\r\n opts.combo = true;\r\n } else if (type === 'list') {\r\n opts.FT = 'Ch';\r\n } else {\r\n throw new Error(`Invalid form annotation type '${type}'`);\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveFormat(opts) {\r\n const f = opts.format;\r\n if (f && f.type) {\r\n let fnKeystroke;\r\n let fnFormat;\r\n let params = '';\r\n if (FORMAT_SPECIAL[f.type] !== undefined) {\r\n fnKeystroke = `AFSpecial_Keystroke`;\r\n fnFormat = `AFSpecial_Format`;\r\n params = FORMAT_SPECIAL[f.type];\r\n } else {\r\n let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\r\n fnKeystroke = `AF${format}_Keystroke`;\r\n fnFormat = `AF${format}_Format`;\r\n\r\n if (f.type === 'date') {\r\n fnKeystroke += 'Ex';\r\n params = String(f.param);\r\n } else if (f.type === 'time') {\r\n params = String(f.param);\r\n } else if (f.type === 'number') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.number, f);\r\n params = String(\r\n [\r\n String(p.nDec),\r\n p.sepComma ? '0' : '1',\r\n '\"' + p.negStyle + '\"',\r\n 'null',\r\n '\"' + p.currency + '\"',\r\n String(p.currencyPrepend)\r\n ].join(',')\r\n );\r\n } else if (f.type === 'percent') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\r\n params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\r\n }\r\n }\r\n opts.AA = opts.AA ? opts.AA : {};\r\n opts.AA.K = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnKeystroke}(${params});`)\r\n };\r\n opts.AA.F = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnFormat}(${params});`)\r\n };\r\n }\r\n delete opts.format;\r\n return opts;\r\n },\r\n\r\n _resolveColors(opts) {\r\n let color = this._normalizeColor(opts.backgroundColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BG = color;\r\n }\r\n color = this._normalizeColor(opts.borderColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BC = color;\r\n }\r\n delete opts.backgroundColor;\r\n delete opts.borderColor;\r\n return opts;\r\n },\r\n\r\n _resolveFlags(options) {\r\n let result = 0;\r\n Object.keys(options).forEach(key => {\r\n if (FIELD_FLAGS[key]) {\r\n if (options[key]) {\r\n result |= FIELD_FLAGS[key];\r\n }\r\n delete options[key];\r\n }\r\n });\r\n if (result !== 0) {\r\n options.Ff = options.Ff ? options.Ff : 0;\r\n options.Ff |= result;\r\n }\r\n return options;\r\n },\r\n\r\n _resolveJustify(options) {\r\n let result = 0;\r\n if (options.align !== undefined) {\r\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\r\n result = FIELD_JUSTIFY[options.align];\r\n }\r\n delete options.align;\r\n }\r\n if (result !== 0) {\r\n options.Q = result; // default\r\n }\r\n return options;\r\n },\r\n\r\n _resolveFont(options) {\r\n // add current font to document-level AcroForm dict if necessary\r\n if (this._acroform.fonts[this._font.id] === null) {\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // add current font to field's resource dict (RD) if not the default acroform font\r\n if (this._acroform.defaultFont !== this._font.name) {\r\n options.DR = { Font: {} };\r\n\r\n // Get the fontSize option. If not set use auto sizing\r\n const fontSize = options.fontSize || 0;\r\n\r\n options.DR.Font[this._font.id] = this._font.ref();\r\n options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\r\n }\r\n return options;\r\n },\r\n\r\n _resolveStrings(options) {\r\n let select = [];\r\n function appendChoices(a) {\r\n if (Array.isArray(a)) {\r\n for (let idx = 0; idx < a.length; idx++) {\r\n if (typeof a[idx] === 'string') {\r\n select.push(new String(a[idx]));\r\n } else {\r\n select.push(a[idx]);\r\n }\r\n }\r\n }\r\n }\r\n appendChoices(options.Opt);\r\n if (options.select) {\r\n appendChoices(options.select);\r\n delete options.select;\r\n }\r\n if (select.length) {\r\n options.Opt = select;\r\n }\r\n\r\n Object.keys(VALUE_MAP).forEach(key => {\r\n if (options[key] !== undefined) {\r\n options[VALUE_MAP[key]] = options[key];\r\n delete options[key];\r\n }\r\n });\r\n ['V', 'DV'].forEach(key => {\r\n if (typeof options[key] === 'string') {\r\n options[key] = new String(options[key]);\r\n }\r\n });\r\n\r\n if (options.MK && options.MK.CA) {\r\n options.MK.CA = new String(options.MK.CA);\r\n }\r\n if (options.label) {\r\n options.MK = options.MK ? options.MK : {};\r\n options.MK.CA = new String(options.label);\r\n delete options.label;\r\n }\r\n return options;\r\n }\r\n};\r\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * @returns filespec reference\r\n */\r\n file(src, options = {}) {\r\n options.name = options.name || src;\r\n\r\n const refBody = {\r\n Type: 'EmbeddedFile',\r\n Params: {}\r\n };\r\n let data;\r\n\r\n if (!src) {\r\n throw new Error('No src specified');\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:(.*?);base64,(.*)$/.exec(src))) {\r\n if (match[1]) {\r\n refBody.Subtype = match[1].replace('/', '#2F');\r\n }\r\n data = Buffer.from(match[2], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n throw new Error(`Could not read contents of file at filepath ${src}`);\r\n }\r\n\r\n // update CreationDate and ModDate\r\n const { birthtime, ctime } = fs.statSync(src);\r\n refBody.Params.CreationDate = birthtime;\r\n refBody.Params.ModDate = ctime;\r\n }\r\n }\r\n\r\n // override creation date and modified date\r\n if (options.creationDate instanceof Date) {\r\n refBody.Params.CreationDate = options.creationDate;\r\n }\r\n if (options.modifiedDate instanceof Date) {\r\n refBody.Params.ModDate = options.modifiedDate;\r\n }\r\n // add optional subtype\r\n if (options.type) {\r\n refBody.Subtype = options.type.replace('/', '#2F');\r\n }\r\n\r\n // add checksum and size information\r\n const checksum = CryptoJS.MD5(\r\n CryptoJS.lib.WordArray.create(new Uint8Array(data))\r\n );\r\n refBody.Params.CheckSum = new String(checksum);\r\n refBody.Params.Size = data.byteLength;\r\n\r\n // save some space when embedding the same file again\r\n // if a file with the same name and metadata exists, reuse its reference\r\n let ref;\r\n if (!this._fileRegistry) this._fileRegistry = {};\r\n let file = this._fileRegistry[options.name];\r\n if (file && isEqual(refBody, file)) {\r\n ref = file.ref;\r\n } else {\r\n ref = this.ref(refBody);\r\n ref.end(data);\r\n\r\n this._fileRegistry[options.name] = { ...refBody, ref };\r\n }\r\n // add filespec for embedded file\r\n const fileSpecBody = {\r\n Type: 'Filespec',\r\n F: new String(options.name),\r\n EF: { F: ref },\r\n UF: new String(options.name)\r\n };\r\n if (options.description) {\r\n fileSpecBody.Desc = new String(options.description);\r\n }\r\n const filespec = this.ref(fileSpecBody);\r\n filespec.end();\r\n\r\n if (!options.hidden) {\r\n this.addNamedEmbeddedFile(options.name, filespec);\r\n }\r\n\r\n return filespec;\r\n }\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n return (\r\n a.Subtype === b.Subtype &&\r\n a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n a.Params.Size === b.Params.Size &&\r\n a.Params.CreationDate === b.Params.CreationDate &&\r\n a.Params.ModDate === b.Params.ModDate\r\n );\r\n}\r\n","import fs from 'fs';\r\n\r\nexport default {\r\n\r\n initPDFA(pSubset) {\r\n if (pSubset.charAt(pSubset.length - 3) === '-') {\r\n this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase();\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\r\n } else {\r\n // Default to Basic conformance when user doesn't specify\r\n this.subset_conformance = 'B';\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\r\n }\r\n },\r\n\r\n endSubset() {\r\n this._addPdfaMetadata();\r\n const jsPath = `${__dirname}/data/sRGB_IEC61966_2_1.icc`\r\n const jestPath = `${__dirname}/../color_profiles/sRGB_IEC61966_2_1.icc`\r\n this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath);\r\n },\r\n\r\n _addColorOutputIntent(pICCPath) {\r\n const iccProfile = fs.readFileSync(pICCPath);\r\n\r\n const colorProfileRef = this.ref({\r\n Length: iccProfile.length,\r\n N: 3\r\n });\r\n colorProfileRef.write(iccProfile);\r\n colorProfileRef.end();\r\n\r\n const intentRef = this.ref({\r\n Type: 'OutputIntent',\r\n S: 'GTS_PDFA1',\r\n Info: new String('sRGB IEC61966-2.1'),\r\n OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\r\n DestOutputProfile: colorProfileRef,\r\n });\r\n intentRef.end();\r\n\r\n this._root.data.OutputIntents = [intentRef];\r\n },\r\n\r\n _getPdfaid() {\r\n return `\r\n \r\n ${this.subset}\r\n ${this.subset_conformance}\r\n \r\n `;\r\n },\r\n\r\n _addPdfaMetadata() {\r\n this.appendXML(this._getPdfaid());\r\n },\r\n\r\n}","\r\nexport default {\r\n\r\n initPDFUA() {\r\n this.subset = 1;\r\n },\r\n\r\n endSubset() {\r\n this._addPdfuaMetadata();\r\n },\r\n\r\n _addPdfuaMetadata() {\r\n this.appendXML(this._getPdfuaid());\r\n },\r\n\r\n _getPdfuaid() {\r\n return `\r\n \r\n ${this.subset}\r\n \r\n `;\r\n },\r\n\r\n}","import PDFA from './pdfa';\r\nimport PDFUA from './pdfua';\r\n\r\nexport default {\r\n _importSubset(subset) {\r\n Object.assign(this, subset)\r\n },\r\n\r\n initSubset(options) {\r\n\r\n switch (options.subset) {\r\n case 'PDF/A-1':\r\n case 'PDF/A-1a':\r\n case 'PDF/A-1b':\r\n case 'PDF/A-2':\r\n case 'PDF/A-2a':\r\n case 'PDF/A-2b':\r\n case 'PDF/A-3':\r\n case 'PDF/A-3a':\r\n case 'PDF/A-3b':\r\n this._importSubset(PDFA);\r\n this.initPDFA(options.subset);\r\n break;\r\n case 'PDF/UA':\r\n this._importSubset(PDFUA);\r\n this.initPDFUA();\r\n break;\r\n }\r\n }\r\n}","\r\nclass PDFMetadata {\r\n constructor() {\r\n this._metadata = `\r\n \r\n \r\n \r\n `;\r\n }\r\n \r\n _closeTags() {\r\n this._metadata = this._metadata.concat(`\r\n \r\n \r\n \r\n `);\r\n }\r\n\r\n append(xml, newline=true) {\r\n this._metadata = this._metadata.concat(xml); \r\n if (newline)\r\n this._metadata = this._metadata.concat('\\n'); \r\n }\r\n\r\n getXML() { return this._metadata; }\r\n\r\n getLength() { return this._metadata.length; }\r\n\r\n end() {\r\n this._closeTags();\r\n this._metadata = this._metadata.trim();\r\n }\r\n}\r\n\r\nexport default PDFMetadata;","import PDFMetadata from \"../metadata\"\r\n\r\nexport default {\r\n initMetadata() {\r\n this.metadata = new PDFMetadata();\r\n },\r\n\r\n appendXML(xml, newline=true) { this.metadata.append(xml,newline); },\r\n\r\n _addInfo() {\r\n this.appendXML(`\r\n \r\n ${this.info.CreationDate.toISOString().split('.')[0]+\"Z\"}\r\n ${this.info.Creator}\r\n \r\n `\r\n );\r\n\r\n if (this.info.Title || this.info.Author || this.info.Subject) {\r\n this.appendXML(`\r\n \r\n `);\r\n \r\n if (this.info.Title) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Title}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Author) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Author}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Subject) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Subject}\r\n \r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n ${this.info.Creator}`, false);\r\n\r\n if (this.info.Keywords) {\r\n this.appendXML(`\r\n ${this.info.Keywords}`, false);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n },\r\n\r\n endMetadata() {\r\n this._addInfo();\r\n \r\n this.metadata.end();\r\n\r\n /*\r\n Metadata was introduced in PDF 1.4, so adding it to 1.3 \r\n will likely only take up more space.\r\n */\r\n if (this.version != 1.3) {\r\n this.metadataRef = this.ref({\r\n length: this.metadata.getLength(),\r\n Type: 'Metadata',\r\n Subtype: 'XML'\r\n });\r\n this.metadataRef.compress = false;\r\n this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\r\n this.metadataRef.end();\r\n this._root.data.Metadata = this.metadataRef;\r\n }\r\n }\r\n}","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFNameTree from './name_tree';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\nimport MarkingsMixin from './mixins/markings';\r\nimport AcroFormMixin from './mixins/acroform';\r\nimport AttachmentsMixin from './mixins/attachments';\r\nimport LineWrapper from './line_wrapper';\r\nimport SubsetMixin from './mixins/subsets';\r\nimport MetadataMixin from './mixins/metadata';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = options;\r\n\r\n // PDF version\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n this.version = 1.4;\r\n break;\r\n case '1.5':\r\n this.version = 1.5;\r\n break;\r\n case '1.6':\r\n this.version = 1.6;\r\n break;\r\n case '1.7':\r\n case '1.7ext3':\r\n this.version = 1.7;\r\n break;\r\n default:\r\n this.version = 1.3;\r\n break;\r\n }\r\n\r\n // Whether streams should be compressed\r\n this.compress =\r\n this.options.compress != null ? this.options.compress : true;\r\n\r\n this._pageBuffer = [];\r\n this._pageBufferStart = 0;\r\n\r\n // The PDF object store\r\n this._offsets = [];\r\n this._waiting = 0;\r\n this._ended = false;\r\n this._offset = 0;\r\n const Pages = this.ref({\r\n Type: 'Pages',\r\n Count: 0,\r\n Kids: []\r\n });\r\n\r\n const Names = this.ref({\r\n Dests: new PDFNameTree()\r\n });\r\n\r\n this._root = this.ref({\r\n Type: 'Catalog',\r\n Pages,\r\n Names\r\n });\r\n\r\n if (this.options.lang) {\r\n this._root.data.Lang = new String(this.options.lang);\r\n }\r\n\r\n // The current page\r\n this.page = null;\r\n\r\n // Initialize mixins\r\n this.initMetadata();\r\n this.initColor();\r\n this.initVector();\r\n this.initFonts(options.font);\r\n this.initText();\r\n this.initImages();\r\n this.initOutline();\r\n this.initMarkings(options);\r\n this.initSubset(options);\r\n\r\n // Initialize the metadata\r\n this.info = {\r\n Producer: 'PDFKit',\r\n Creator: 'PDFKit',\r\n CreationDate: new Date()\r\n };\r\n\r\n if (this.options.info) {\r\n for (let key in this.options.info) {\r\n const val = this.options.info[key];\r\n this.info[key] = val;\r\n }\r\n }\r\n\r\n if (this.options.displayTitle) {\r\n this._root.data.ViewerPreferences = this.ref({\r\n DisplayDocTitle: true\r\n });\r\n }\r\n\r\n // Generate file ID\r\n this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n // Initialize security settings\r\n this._security = PDFSecurity.create(this, options);\r\n\r\n // Write the header\r\n // PDF version\r\n this._write(`%PDF-${this.version}`);\r\n\r\n // 4 binary chars, as recommended by the spec\r\n this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n // Add the first page\r\n if (this.options.autoFirstPage !== false) {\r\n this.addPage();\r\n }\r\n }\r\n\r\n addPage(options) {\r\n if (options == null) {\r\n ({ options } = this);\r\n }\r\n\r\n // end the current page if needed\r\n if (!this.options.bufferPages) {\r\n this.flushPages();\r\n }\r\n\r\n // create a page object\r\n this.page = new PDFPage(this, options);\r\n this._pageBuffer.push(this.page);\r\n\r\n // add the page to the object store\r\n const pages = this._root.data.Pages.data;\r\n pages.Kids.push(this.page.dictionary);\r\n pages.Count++;\r\n\r\n // reset x and y coordinates\r\n this.x = this.page.margins.left;\r\n this.y = this.page.margins.top;\r\n\r\n // flip PDF coordinate system so that the origin is in\r\n // the top left rather than the bottom left\r\n this._ctm = [1, 0, 0, 1, 0, 0];\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n this.emit('pageAdded');\r\n\r\n return this;\r\n }\r\n\r\n continueOnNewPage(options) {\r\n const pageMarkings = this.endPageMarkings(this.page);\r\n\r\n this.addPage(options);\r\n\r\n this.initPageMarkings(pageMarkings);\r\n\r\n return this;\r\n }\r\n\r\n bufferedPageRange() {\r\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n }\r\n\r\n switchToPage(n) {\r\n let page;\r\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n throw new Error(\r\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n this._pageBufferStart\r\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n );\r\n }\r\n\r\n return (this.page = page);\r\n }\r\n\r\n flushPages() {\r\n // this local variable exists so we're future-proof against\r\n // reentrant calls to flushPages.\r\n const pages = this._pageBuffer;\r\n this._pageBuffer = [];\r\n this._pageBufferStart += pages.length;\r\n for (let page of pages) {\r\n this.endPageMarkings(page);\r\n page.end();\r\n }\r\n }\r\n\r\n addNamedDestination(name, ...args) {\r\n if (args.length === 0) {\r\n args = ['XYZ', null, null, null];\r\n }\r\n if (args[0] === 'XYZ' && args[2] !== null) {\r\n args[2] = this.page.height - args[2];\r\n }\r\n args.unshift(this.page.dictionary);\r\n this._root.data.Names.data.Dests.add(name, args);\r\n }\r\n\r\n addNamedEmbeddedFile(name, ref) {\r\n if (!this._root.data.Names.data.EmbeddedFiles) {\r\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\r\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ limits: false });\r\n }\r\n\r\n // add filespec to EmbeddedFiles\r\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\r\n }\r\n\r\n addNamedJavaScript(name, js) {\r\n if (!this._root.data.Names.data.JavaScript) {\r\n this._root.data.Names.data.JavaScript = new PDFNameTree();\r\n }\r\n let data = {\r\n JS: new String(js),\r\n S: 'JavaScript'\r\n };\r\n this._root.data.Names.data.JavaScript.add(name, data);\r\n }\r\n\r\n ref(data) {\r\n const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n this._waiting++;\r\n return ref;\r\n }\r\n\r\n _read() {}\r\n // do nothing, but this method is required by node\r\n\r\n _write(data) {\r\n if (!Buffer.isBuffer(data)) {\r\n data = Buffer.from(data + '\\n', 'binary');\r\n }\r\n\r\n this.push(data);\r\n return (this._offset += data.length);\r\n }\r\n\r\n addContent(data) {\r\n this.page.write(data);\r\n return this;\r\n }\r\n\r\n _refEnd(ref) {\r\n this._offsets[ref.id - 1] = ref.offset;\r\n if (--this._waiting === 0 && this._ended) {\r\n this._finalize();\r\n return (this._ended = false);\r\n }\r\n }\r\n\r\n write(filename, fn) {\r\n // print a deprecation warning with a stacktrace\r\n const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n console.warn(err.stack);\r\n\r\n this.pipe(fs.createWriteStream(filename));\r\n this.end();\r\n return this.once('end', fn);\r\n }\r\n\r\n end() {\r\n this.flushPages();\r\n\r\n this._info = this.ref();\r\n for (let key in this.info) {\r\n let val = this.info[key];\r\n if (typeof val === 'string') {\r\n val = new String(val);\r\n }\r\n\r\n let entry = this.ref(val);\r\n entry.end();\r\n\r\n this._info.data[key] = entry;\r\n }\r\n\r\n this._info.end();\r\n\r\n for (let name in this._fontFamilies) {\r\n const font = this._fontFamilies[name];\r\n font.finalize();\r\n }\r\n\r\n this.endOutline();\r\n this.endMarkings();\r\n\r\n if (this.subset) {\r\n this.endSubset();\r\n }\r\n\r\n this.endMetadata();\r\n\r\n this._root.end();\r\n this._root.data.Pages.end();\r\n this._root.data.Names.end();\r\n this.endAcroForm();\r\n\r\n if (this._root.data.ViewerPreferences) {\r\n this._root.data.ViewerPreferences.end();\r\n }\r\n\r\n if (this._security) {\r\n this._security.end();\r\n }\r\n\r\n if (this._waiting === 0) {\r\n return this._finalize();\r\n } else {\r\n return (this._ended = true);\r\n }\r\n }\r\n\r\n _finalize() {\r\n // generate xref\r\n const xRefOffset = this._offset;\r\n this._write('xref');\r\n this._write(`0 ${this._offsets.length + 1}`);\r\n this._write('0000000000 65535 f ');\r\n\r\n for (let offset of this._offsets) {\r\n offset = `0000000000${offset}`.slice(-10);\r\n this._write(offset + ' 00000 n ');\r\n }\r\n\r\n // trailer\r\n const trailer = {\r\n Size: this._offsets.length + 1,\r\n Root: this._root,\r\n Info: this._info,\r\n ID: [this._id, this._id]\r\n };\r\n if (this._security) {\r\n trailer.Encrypt = this._security.dictionary;\r\n }\r\n\r\n this._write('trailer');\r\n this._write(PDFObject.convert(trailer));\r\n\r\n this._write('startxref');\r\n this._write(`${xRefOffset}`);\r\n this._write('%%EOF');\r\n\r\n // end the stream\r\n return this.push(null);\r\n }\r\n\r\n toString() {\r\n return '[object PDFDocument]';\r\n }\r\n}\r\n\r\nconst mixin = methods => {\r\n Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(MetadataMixin);\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\nmixin(MarkingsMixin);\r\nmixin(AcroFormMixin);\r\nmixin(AttachmentsMixin);\r\nmixin(SubsetMixin);\r\n\r\nPDFDocument.LineWrapper = LineWrapper;\r\n\r\nexport default PDFDocument;\r\n"],"names":["PDFAbstractReference","toString","Error","PDFTree","constructor","options","_items","limits","add","key","val","get","sortedKeys","Object","keys","sort","a","b","_compareKeys","out","length","first","last","push","PDFObject","convert","_dataForKey","_keysName","join","pad","str","Array","slice","escapableRe","escapable","swapBytes","buff","l","i","end","object","encryptFn","String","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","map","e","call","number","n","Math","round","PDFReference","document","id","data","gen","compress","Filter","uncompressedLength","buffer","write","chunk","Length","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","DEFAULT_MARGINS","top","left","bottom","right","SIZES","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","size","layout","margin","margins","dimensions","toUpperCase","width","height","content","ref","resources","ProcSet","dictionary","Type","Parent","_root","Pages","MediaBox","Contents","Resources","markings","fonts","Font","xobjects","XObject","ext_gstates","ExtGState","patterns","Pattern","colorSpaces","ColorSpace","annotations","Annots","structParentTreeKey","StructParents","createStructParentTreeNextKey","maxY","PDFNameTree","localeCompare","k","inRange","value","rangeGroup","startRange","endRange","middleRange","floor","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","isCommonlyMappedToNothing","non_ASCII_space_characters","isNonASCIISpaceCharacter","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","x","toCodePoints","input","codepoints","before","next","saslprep","opts","TypeError","mapped_input","filter","normalized_input","fromCodePoint","apply","normalize","normalized_map","hasProhibited","some","allowUnassigned","hasUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","PDFSecurity","generateFileID","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","generateRandomWordArray","bytes","lib","WordArray","random","create","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","v","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","getUserPasswordR5","userKeySalt","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","padding","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","alloc","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","wordArray","byteArray","PDFGradient","doc","stops","embedded","transform","stop","pos","color","opacity","_normalizeColor","_colorSpace","max","setTransform","m11","m12","m21","m22","dx","dy","embed","m","fn","stopsLength","matrix","bounds","encode","FunctionType","Domain","N","Functions","Bounds","Encode","_gradCount","shader","pattern","PatternType","Shading","Matrix","grad","opacityGradient","pageBBox","page","form","Subtype","FormType","BBox","Group","S","CS","Sh1","gstate","SMask","G","opacityPattern","PaintType","TilingType","XStep","YStep","Gs1","stroke","m0","m1","m2","m3","m4","m5","_ctm","_setColorSpace","op","addContent","PDFLinearGradient","x1","y1","x2","y2","ShadingType","Coords","Function","Extend","PDFRadialGradient","r1","r2","underlyingColorSpaces","PDFTilingPattern","bBox","xStep","yStep","stream","createPattern","toFixed","embedPatternColorSpaces","forEach","csName","csId","getPatternColorSpaceId","cs","underlyingColorspace","_patternCount","patternColor","normalizedColor","_getColorSpace","Gradient","initColor","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","_setColor","_setColorCore","space","fillColor","set","fillOpacity","_fillColor","strokeColor","strokeOpacity","_doOpacity","name","ca","CA","linearGradient","radialGradient","bbox","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","cx","cy","px","py","sx","sy","parameters","A","C","H","h","L","M","Q","q","s","T","t","Z","z","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","solveArc","lineTo","closePath","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","PI","sin_th","sin","cos_th","cos","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","x3","y3","SVGPath","KAPPA","initVector","_ctmStack","save","restore","pop","lineWidth","w","_CAP_STYLES","BUTT","ROUND","SQUARE","lineCap","_JOIN_STYLES","MITER","BEVEL","lineJoin","miterLimit","dash","originalLength","valid","every","Number","isFinite","JSON","stringify","phase","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","rect","roundedRect","ellipse","xe","ye","xm","ym","circle","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","points","shift","point","_windingRule","rule","test","fill","fillAndStroke","isFillRule","clip","values","translate","rotate","angle","rad","origin","scale","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","open","filename","fs","readFileSync","contents","attributes","glyphWidths","boundingBoxes","kernPairs","charWidths","char","ascender","descender","xHeight","capHeight","lineGap","section","line","match","encodeText","text","res","len","glyphsForString","glyphs","charCode","characterToGlyph","widthOfGlyph","glyph","getKernPair","advancesForGlyphs","advances","PDFFont","widthOfString","lineHeight","includeGap","gap","STANDARD_FONTS","Courier","__dirname","Helvetica","Symbol","ZapfDingbats","StandardFont","font","BaseFont","Encoding","encoded","positions","xAdvance","yAdvance","xOffset","yOffset","advanceWidth","advance","isStandardFont","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","layoutRun","features","run","position","layoutCached","cached","onlyWidth","needle","gid","includeGlyph","codePoints","isCFF","cff","fontFile","encodeStream","on","familyClass","sFamilyClass","undefined","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","descriptor","FontName","Flags","FontBBox","minX","minY","maxX","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","W","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","chunkSize","chunks","ranges","start","PDFFontFactory","src","family","fontkit","Uint8Array","ArrayBuffer","initFonts","defaultFont","_fontFamilies","_fontCount","_fontSize","_font","_registeredFonts","cacheKey","fontSize","currentLineHeight","registerFont","SOFT_HYPHEN","HYPHEN","LineWrapper","EventEmitter","indent","characterSpacing","wordSpacing","columns","columnGap","spaceLeft","startX","startY","column","ellipsis","continuedX","once","continued","align","lastLine","paragraphGap","wordWidth","word","canFit","eachWord","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","lbk","fbk","mightGrow","mustShrink","required","wrap","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","lh","continueOnNewPage","initText","_line","bind","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","struct","structType","markStructureContent","wrapper","_wrapper","_textOptions","heightOfString","Infinity","list","listType","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","label","letter","times","drawListItem","listItem","itemType","labelType","bodyType","structTypes","diff","_fragment","assign","lineBreak","trim","spaceWidth","baseline","renderedWidth","link","goTo","destination","addNamedDestination","underline","lineY","strike","oblique","skew","encodedWord","positionsWord","hadOffset","addSegment","cur","flush","MARKERS","COLOR_SPACE_MAP","JPEG","marker","readUInt16BE","orientation","exif","fromBuffer","Orientation","bits","channels","colorSpace","BitsPerComponent","Width","Height","PNGImage","image","PNG","imgData","dataDecoded","hasAlphaChannel","isInterlaced","interlaceMethod","Predictor","Colors","colors","Columns","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","initImages","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","rotateAngle","originX","originY","ignoreOrientation","openImage","wp","hp","fit","cover","valign","annotate","Rect","_convertRect","Border","F","Dest","note","Name","D","url","pages","Kids","URI","_markup","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","file","filespec","hidden","FS","Desc","PDFOutline","parent","title","dest","expanded","outlineData","children","addItem","endOutline","Count","First","Last","child","Prev","Next","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","type","_attached","_ended","_flushed","_isValidChild","lang","Lang","alt","Alt","E","actual","ActualText","_children","setParent","setAttached","_addContentToParentTree","_contentForClosure","pageStructParents","getStructParentTree","parentRef","_flush","closure","endMarkedContent","_isFlushable","K","_flushChild","Pg","MCID","PDFNumberTree","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","readOnly","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","center","VALUE_MAP","defaultValue","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","percent","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","f","format","fnKeystroke","fnFormat","param","AA","JS","backgroundColor","MK","BG","borderColor","BC","Ff","select","appendChoices","idx","Opt","refBody","Params","birthtime","ctime","statSync","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","byteLength","_fileRegistry","isEqual","fileSpecBody","EF","UF","description","addNamedEmbeddedFile","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","jsPath","jestPath","_addColorOutputIntent","existsSync","pICCPath","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","initPDFUA","_addPdfuaMetadata","_getPdfuaid","_importSubset","initSubset","PDFA","PDFUA","PDFMetadata","_metadata","_closeTags","append","xml","newline","getXML","getLength","initMetadata","metadata","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","Metadata","PDFDocument","Readable","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","autoFirstPage","addPage","bufferPages","flushPages","bufferedPageRange","count","switchToPage","unshift","EmbeddedFiles","addNamedJavaScript","js","JavaScript","_read","_finalize","err","console","warn","stack","pipe","createWriteStream","_info","entry","xRefOffset","trailer","Root","ID","Encrypt","mixin","methods","prototype","MetadataMixin","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin","MarkingsMixin","AcroFormMixin","AttachmentsMixin","SubsetMixin"],"mappings":"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MA/ZsB,EAgatB,MAhasB,EAiatB,MAjasB,EAkatB,MAlasB,EAmatB,MAnasB,EAoatB,MApasB,EAqatB,MArasB,EAsatB,MAtasB,EAuatB,MAvasB,EAwatB,MAxasB,EAyatB,MAzasB,EA0atB,MA1asB,EA2atB,MA3asB,EA4atB,MA5asB,EA6atB,MA7asB,EA8atB,MA9asB,EA+atB,MA/asB,EAgbtB,MAhbsB,EAibtB,MAjbsB,EAkbtB,MAlbsB,EAmbtB,MAnbsB,EAobtB,MApbsB,EAqbtB,MArbsB,EAsbtB,MAtbsB,EAubtB,MAvbsB,EAwbtB,MAxbsB,EAybtB,MAzbsB,EA0btB,MA1bsB,EA2btB,MA3bsB,EA4btB,MA5bsB,EA6btB,MA7bsB,EA8btB,MA9bsB,EA+btB,MA/bsB,EAgctB,MAhcsB,EAictB,MAjcsB,EAkctB,MAlcsB,EAmctB,MAncsB,EAoctB,MApcsB,EAqctB,MArcsB,EAsctB,MAtcsB,EAuctB,MAvcsB,EAwctB,MAxcsB,EAyctB,MAzcsB,EA0ctB,MA1csB,EA2ctB,MA3csB,EA4ctB,MA5csB,EA6ctB,MA7csB,EA8ctB,MA9csB,EA+ctB,MA/csB,EAgdtB,MAhdsB,EAidtB,MAjdsB,EAkdtB,MAldsB,EAmdtB,MAndsB,EAodtB,MApdsB,EAqdtB,MArdsB,EAsdtB,MAtdsB,EAudtB,MAvdsB,EAwdtB,MAxdsB,EAydtB,MAzdsB,EA0dtB,MA1dsB,EA2dtB,MA3dsB,EA4dtB,MA5dsB,EA6dtB,MA7dsB,EA8dtB,MA9dsB,EA+dtB,MA/dsB,EAgetB,MAhesB,EAietB,MAjesB,EAketB,MAlesB,EAmetB,MAnesB,EAoetB,MApesB,EAqetB,MAresB,EAsetB,MAtesB,EAuetB,MAvesB,EAwetB,MAxesB,EAyetB,MAzesB,EA0etB,MA1esB,EA2etB,MA3esB,EA4etB,MA5esB,EA6etB,MA7esB,EA8etB,MA9esB,EA+etB,MA/esB,EAgftB,MAhfsB,EAiftB,MAjfsB,EAkftB,MAlfsB,EAmftB,MAnfsB,EAoftB,MApfsB,EAq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"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js deleted file mode 100644 index bba8028..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js +++ /dev/null @@ -1,5998 +0,0 @@ -'use strict'; - -var stream = require('stream'); -var zlib = require('zlib'); -var CryptoJS = require('crypto-js'); -var fs = require('fs'); -var fontkit = require('fontkit'); -var events = require('events'); -var LineBreaker = require('linebreak'); -var exif = require('jpeg-exif'); -var PNG = require('png-js'); - -class PDFAbstractReference { - toString() { - throw new Error('Must be implemented by subclasses'); - } -} - -class PDFTree { - constructor(options = {}) { - this._items = {}; - this.limits = typeof options.limits === 'boolean' ? options.limits : true; - } - add(key, val) { - return this._items[key] = val; - } - get(key) { - return this._items[key]; - } - toString() { - const sortedKeys = Object.keys(this._items).sort((a, b) => this._compareKeys(a, b)); - const out = ['<<']; - if (this.limits && sortedKeys.length > 1) { - const first = sortedKeys[0], - last = sortedKeys[sortedKeys.length - 1]; - out.push(` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`); - } - out.push(` /${this._keysName()} [`); - for (let key of sortedKeys) { - out.push(` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(this._items[key])}`); - } - out.push(']'); - out.push('>>'); - return out.join('\n'); - } - _compareKeys() { - throw new Error('Must be implemented by subclasses'); - } - _keysName() { - throw new Error('Must be implemented by subclasses'); - } - _dataForKey() { - throw new Error('Must be implemented by subclasses'); - } -} - -class SpotColor { - constructor(doc, name, C, M, Y, K) { - this.id = 'CS' + Object.keys(doc.spotColors).length; - this.name = name; - this.values = [C, M, Y, K]; - this.ref = doc.ref(['Separation', this.name, 'DeviceCMYK', { - Range: [0, 1, 0, 1, 0, 1, 0, 1], - C0: [0, 0, 0, 0], - C1: this.values.map(value => value / 100), - FunctionType: 2, - Domain: [0, 1], - N: 1 - }]); - this.ref.end(); - } - toString() { - return `${this.ref.id} 0 R`; - } -} - -const pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length); -const escapableRe = /[\n\r\t\b\f()\\]/g; -const escapable = { - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\b': '\\b', - '\f': '\\f', - '\\': '\\\\', - '(': '\\(', - ')': '\\)' -}; -const swapBytes = function (buff) { - const l = buff.length; - if (l & 0x01) { - throw new Error('Buffer length must be even'); - } else { - for (let i = 0, end = l - 1; i < end; i += 2) { - const a = buff[i]; - buff[i] = buff[i + 1]; - buff[i + 1] = a; - } - } - return buff; -}; -class PDFObject { - static convert(object, encryptFn = null) { - if (typeof object === 'string') { - return `/${object}`; - } else if (object instanceof String) { - let string = object; - let isUnicode = false; - for (let i = 0, end = string.length; i < end; i++) { - if (string.charCodeAt(i) > 0x7f) { - isUnicode = true; - break; - } - } - let stringBuffer; - if (isUnicode) { - stringBuffer = swapBytes(Buffer.from(`\ufeff${string}`, 'utf16le')); - } else { - stringBuffer = Buffer.from(string.valueOf(), 'ascii'); - } - if (encryptFn) { - string = encryptFn(stringBuffer).toString('binary'); - } else { - string = stringBuffer.toString('binary'); - } - string = string.replace(escapableRe, c => escapable[c]); - return `(${string})`; - } else if (Buffer.isBuffer(object)) { - return `<${object.toString('hex')}>`; - } else if (object instanceof PDFAbstractReference || object instanceof PDFTree || object instanceof SpotColor) { - return object.toString(); - } else if (object instanceof Date) { - let string = `D:${pad(object.getUTCFullYear(), 4)}` + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; - if (encryptFn) { - string = encryptFn(Buffer.from(string, 'ascii')).toString('binary'); - string = string.replace(escapableRe, c => escapable[c]); - } - return `(${string})`; - } else if (Array.isArray(object)) { - const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' '); - return `[${items}]`; - } else if ({}.toString.call(object) === '[object Object]') { - const out = ['<<']; - for (let key in object) { - const val = object[key]; - out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`); - } - out.push('>>'); - return out.join('\n'); - } else if (typeof object === 'number') { - return PDFObject.number(object); - } else { - return `${object}`; - } - } - static number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - throw new Error(`unsupported number: ${n}`); - } -} - -class PDFReference extends PDFAbstractReference { - constructor(document, id, data = {}) { - super(); - this.document = document; - this.id = id; - this.data = data; - this.gen = 0; - this.compress = this.document.compress && !this.data.Filter; - this.uncompressedLength = 0; - this.buffer = []; - } - write(chunk) { - if (!(chunk instanceof Uint8Array)) { - chunk = Buffer.from(chunk + '\n', 'binary'); - } - this.uncompressedLength += chunk.length; - if (this.data.Length == null) { - this.data.Length = 0; - } - this.buffer.push(chunk); - this.data.Length += chunk.length; - if (this.compress) { - this.data.Filter = 'FlateDecode'; - } - } - end(chunk) { - if (chunk) { - this.write(chunk); - } - this.finalize(); - } - finalize() { - this.offset = this.document._offset; - const encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null; - if (this.buffer.length) { - this.buffer = Buffer.concat(this.buffer); - if (this.compress) { - this.buffer = zlib.deflateSync(this.buffer); - } - if (encryptFn) { - this.buffer = encryptFn(this.buffer); - } - this.data.Length = this.buffer.length; - } - this.document._write(`${this.id} ${this.gen} obj`); - this.document._write(PDFObject.convert(this.data, encryptFn)); - if (this.buffer.length) { - this.document._write('stream'); - this.document._write(this.buffer); - this.buffer = []; - this.document._write('\nendstream'); - } - this.document._write('endobj'); - this.document._refEnd(this); - } - toString() { - return `${this.id} ${this.gen} R`; - } -} - -const fArray = new Float32Array(1); -const uArray = new Uint32Array(fArray.buffer); -function PDFNumber(n) { - const rounded = Math.fround(n); - if (rounded <= n) return rounded; - fArray[0] = n; - if (n <= 0) { - uArray[0] += 1; - } else { - uArray[0] -= 1; - } - return fArray[0]; -} -function normalizeSides(sides, defaultDefinition = undefined, transformer = v => v) { - if (sides == null || typeof sides === 'object' && Object.keys(sides).length === 0) { - sides = defaultDefinition; - } - if (sides == null || typeof sides !== 'object') { - sides = { - top: sides, - right: sides, - bottom: sides, - left: sides - }; - } else if (Array.isArray(sides)) { - if (sides.length === 2) { - sides = { - vertical: sides[0], - horizontal: sides[1] - }; - } else { - sides = { - top: sides[0], - right: sides[1], - bottom: sides[2], - left: sides[3] - }; - } - } - if ('vertical' in sides || 'horizontal' in sides) { - sides = { - top: sides.vertical, - right: sides.horizontal, - bottom: sides.vertical, - left: sides.horizontal - }; - } - return { - top: transformer(sides.top), - right: transformer(sides.right), - bottom: transformer(sides.bottom), - left: transformer(sides.left) - }; -} -const MM_TO_CM = 1 / 10; -const CM_TO_IN = 1 / 2.54; -const PX_TO_IN = 1 / 96; -const IN_TO_PT = 72; -const PC_TO_PT = 12; -function cosine(a) { - if (a === 0) return 1; - if (a === 90) return 0; - if (a === 180) return -1; - if (a === 270) return 0; - return Math.cos(a * Math.PI / 180); -} -function sine(a) { - if (a === 0) return 0; - if (a === 90) return 1; - if (a === 180) return 0; - if (a === 270) return -1; - return Math.sin(a * Math.PI / 180); -} - -const DEFAULT_MARGINS = { - top: 72, - left: 72, - bottom: 72, - right: 72 -}; -const SIZES = { - '4A0': [4767.87, 6740.79], - '2A0': [3370.39, 4767.87], - A0: [2383.94, 3370.39], - A1: [1683.78, 2383.94], - A2: [1190.55, 1683.78], - A3: [841.89, 1190.55], - A4: [595.28, 841.89], - A5: [419.53, 595.28], - A6: [297.64, 419.53], - A7: [209.76, 297.64], - A8: [147.4, 209.76], - A9: [104.88, 147.4], - A10: [73.7, 104.88], - B0: [2834.65, 4008.19], - B1: [2004.09, 2834.65], - B2: [1417.32, 2004.09], - B3: [1000.63, 1417.32], - B4: [708.66, 1000.63], - B5: [498.9, 708.66], - B6: [354.33, 498.9], - B7: [249.45, 354.33], - B8: [175.75, 249.45], - B9: [124.72, 175.75], - B10: [87.87, 124.72], - C0: [2599.37, 3676.54], - C1: [1836.85, 2599.37], - C2: [1298.27, 1836.85], - C3: [918.43, 1298.27], - C4: [649.13, 918.43], - C5: [459.21, 649.13], - C6: [323.15, 459.21], - C7: [229.61, 323.15], - C8: [161.57, 229.61], - C9: [113.39, 161.57], - C10: [79.37, 113.39], - RA0: [2437.8, 3458.27], - RA1: [1729.13, 2437.8], - RA2: [1218.9, 1729.13], - RA3: [864.57, 1218.9], - RA4: [609.45, 864.57], - SRA0: [2551.18, 3628.35], - SRA1: [1814.17, 2551.18], - SRA2: [1275.59, 1814.17], - SRA3: [907.09, 1275.59], - SRA4: [637.8, 907.09], - EXECUTIVE: [521.86, 756.0], - FOLIO: [612.0, 936.0], - LEGAL: [612.0, 1008.0], - LETTER: [612.0, 792.0], - TABLOID: [792.0, 1224.0] -}; -class PDFPage { - constructor(document, options = {}) { - this.document = document; - this._options = options; - this.size = options.size || 'letter'; - this.layout = options.layout || 'portrait'; - const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; - this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; - this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; - this.content = this.document.ref(); - if (options.font) document.font(options.font, options.fontFamily); - if (options.fontSize) document.fontSize(options.fontSize); - this.margins = normalizeSides(options.margin ?? options.margins, DEFAULT_MARGINS, x => document.sizeToPoint(x, 0, this)); - this.resources = this.document.ref({ - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] - }); - this.dictionary = this.document.ref({ - Type: 'Page', - Parent: this.document._root.data.Pages, - MediaBox: [0, 0, this.width, this.height], - Contents: this.content, - Resources: this.resources - }); - this.markings = []; - } - get fonts() { - const data = this.resources.data; - return data.Font != null ? data.Font : data.Font = {}; - } - get xobjects() { - const data = this.resources.data; - return data.XObject != null ? data.XObject : data.XObject = {}; - } - get ext_gstates() { - const data = this.resources.data; - return data.ExtGState != null ? data.ExtGState : data.ExtGState = {}; - } - get patterns() { - const data = this.resources.data; - return data.Pattern != null ? data.Pattern : data.Pattern = {}; - } - get colorSpaces() { - const data = this.resources.data; - return data.ColorSpace || (data.ColorSpace = {}); - } - get annotations() { - const data = this.dictionary.data; - return data.Annots != null ? data.Annots : data.Annots = []; - } - get structParentTreeKey() { - const data = this.dictionary.data; - return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey(); - } - get contentWidth() { - return this.width - this.margins.left - this.margins.right; - } - get contentHeight() { - return this.height - this.margins.top - this.margins.bottom; - } - maxY() { - return this.height - this.margins.bottom; - } - write(chunk) { - return this.content.write(chunk); - } - _setTabOrder() { - if (!this.dictionary.Tabs && this.document.hasMarkInfoDictionary()) { - this.dictionary.data.Tabs = 'S'; - } - } - end() { - this._setTabOrder(); - this.dictionary.end(); - this.resources.data.ColorSpace = this.resources.data.ColorSpace || {}; - for (let color of Object.values(this.document.spotColors)) { - this.resources.data.ColorSpace[color.id] = color; - } - this.resources.end(); - return this.content.end(); - } -} - -class PDFNameTree extends PDFTree { - _compareKeys(a, b) { - return a.localeCompare(b); - } - _keysName() { - return 'Names'; - } - _dataForKey(k) { - return new String(k); - } -} - -function inRange(value, rangeGroup) { - if (value < rangeGroup[0]) return false; - let startRange = 0; - let endRange = rangeGroup.length / 2; - while (startRange <= endRange) { - const middleRange = Math.floor((startRange + endRange) / 2); - const arrayIndex = middleRange * 2; - if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) { - return true; - } - if (value > rangeGroup[arrayIndex + 1]) { - startRange = middleRange + 1; - } else { - endRange = middleRange - 1; - } - } - return false; -} - -const unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; -const isUnassignedCodePoint = character => inRange(character, unassigned_code_points); -const commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; -const isCommonlyMappedToNothing = character => inRange(character, commonly_mapped_to_nothing); -const non_ASCII_space_characters = [0x00a0, 0x00a0, 0x1680, 0x1680, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, 0x2003, 0x2003, 0x2004, 0x2004, 0x2005, 0x2005, 0x2006, 0x2006, 0x2007, 0x2007, 0x2008, 0x2008, 0x2009, 0x2009, 0x200a, 0x200a, 0x200b, 0x200b, 0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000]; -const isNonASCIISpaceCharacter = character => inRange(character, non_ASCII_space_characters); -const non_ASCII_controls_characters = [0x0080, 0x009f, 0x06dd, 0x06dd, 0x070f, 0x070f, 0x180e, 0x180e, 0x200c, 0x200c, 0x200d, 0x200d, 0x2028, 0x2028, 0x2029, 0x2029, 0x2060, 0x2060, 0x2061, 0x2061, 0x2062, 0x2062, 0x2063, 0x2063, 0x206a, 0x206f, 0xfeff, 0xfeff, 0xfff9, 0xfffc, 0x1d173, 0x1d17a]; -const non_character_codepoints = [0xfdd0, 0xfdef, 0xfffe, 0xffff, 0x1fffe, 0x1ffff, 0x2fffe, 0x2ffff, 0x3fffe, 0x3ffff, 0x4fffe, 0x4ffff, 0x5fffe, 0x5ffff, 0x6fffe, 0x6ffff, 0x7fffe, 0x7ffff, 0x8fffe, 0x8ffff, 0x9fffe, 0x9ffff, 0xafffe, 0xaffff, 0xbfffe, 0xbffff, 0xcfffe, 0xcffff, 0xdfffe, 0xdffff, 0xefffe, 0xeffff, 0x10fffe, 0x10ffff]; -const prohibited_characters = [0, 0x001f, 0x007f, 0x007f, 0x0340, 0x0340, 0x0341, 0x0341, 0x200e, 0x200e, 0x200f, 0x200f, 0x202a, 0x202a, 0x202b, 0x202b, 0x202c, 0x202c, 0x202d, 0x202d, 0x202e, 0x202e, 0x206a, 0x206a, 0x206b, 0x206b, 0x206c, 0x206c, 0x206d, 0x206d, 0x206e, 0x206e, 0x206f, 0x206f, 0x2ff0, 0x2ffb, 0xd800, 0xdfff, 0xe000, 0xf8ff, 0xfff9, 0xfff9, 0xfffa, 0xfffa, 0xfffb, 0xfffb, 0xfffc, 0xfffc, 0xfffd, 0xfffd, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isProhibitedCharacter = character => inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints); -const bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; -const isBidirectionalRAL = character => inRange(character, bidirectional_r_al); -const bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isBidirectionalL = character => inRange(character, bidirectional_l); - -const mapping2space = isNonASCIISpaceCharacter; -const mapping2nothing = isCommonlyMappedToNothing; -const getCodePoint = character => character.codePointAt(0); -const first = x => x[0]; -const last = x => x[x.length - 1]; -function toCodePoints(input) { - const codepoints = []; - const size = input.length; - for (let i = 0; i < size; i += 1) { - const before = input.charCodeAt(i); - if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { - const next = input.charCodeAt(i + 1); - if (next >= 0xdc00 && next <= 0xdfff) { - codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); - i += 1; - continue; - } - } - codepoints.push(before); - } - return codepoints; -} -function saslprep(input, opts = {}) { - if (typeof input !== 'string') { - throw new TypeError('Expected string.'); - } - if (input.length === 0) { - return ''; - } - const mapped_input = toCodePoints(input).map(character => mapping2space(character) ? 0x20 : character).filter(character => !mapping2nothing(character)); - const normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC'); - const normalized_map = toCodePoints(normalized_input); - const hasProhibited = normalized_map.some(isProhibitedCharacter); - if (hasProhibited) { - throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); - } - if (opts.allowUnassigned !== true) { - const hasUnassigned = normalized_map.some(isUnassignedCodePoint); - if (hasUnassigned) { - throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); - } - } - const hasBidiRAL = normalized_map.some(isBidirectionalRAL); - const hasBidiL = normalized_map.some(isBidirectionalL); - if (hasBidiRAL && hasBidiL) { - throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6'); - } - const isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input))); - const isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input))); - if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { - throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); - } - return normalized_input; -} - -class PDFSecurity { - static generateFileID(info = {}) { - let infoStr = `${info.CreationDate.getTime()}\n`; - for (let key in info) { - if (!info.hasOwnProperty(key)) { - continue; - } - infoStr += `${key}: ${info[key].valueOf()}\n`; - } - return wordArrayToBuffer(CryptoJS.MD5(infoStr)); - } - static generateRandomWordArray(bytes) { - return CryptoJS.lib.WordArray.random(bytes); - } - static create(document, options = {}) { - if (!options.ownerPassword && !options.userPassword) { - return null; - } - return new PDFSecurity(document, options); - } - constructor(document, options = {}) { - if (!options.ownerPassword && !options.userPassword) { - throw new Error('None of owner password and user password is defined.'); - } - this.document = document; - this._setupEncryption(options); - } - _setupEncryption(options) { - switch (options.pdfVersion) { - case '1.4': - case '1.5': - this.version = 2; - break; - case '1.6': - case '1.7': - this.version = 4; - break; - case '1.7ext3': - this.version = 5; - break; - default: - this.version = 1; - break; - } - const encDict = { - Filter: 'Standard' - }; - switch (this.version) { - case 1: - case 2: - case 4: - this._setupEncryptionV1V2V4(this.version, encDict, options); - break; - case 5: - this._setupEncryptionV5(encDict, options); - break; - } - this.dictionary = this.document.ref(encDict); - } - _setupEncryptionV1V2V4(v, encDict, options) { - let r, permissions; - switch (v) { - case 1: - r = 2; - this.keyBits = 40; - permissions = getPermissionsR2(options.permissions); - break; - case 2: - r = 3; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - case 4: - r = 4; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - } - const paddedUserPassword = processPasswordR2R3R4(options.userPassword); - const paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword; - const ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword); - this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions); - let userPasswordEntry; - if (r === 2) { - userPasswordEntry = getUserPasswordR2(this.encryptionKey); - } else { - userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey); - } - encDict.V = v; - if (v >= 2) { - encDict.Length = this.keyBits; - } - if (v === 4) { - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV2', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - } - encDict.R = r; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.P = permissions; - } - _setupEncryptionV5(encDict, options) { - this.keyBits = 256; - const permissions = getPermissionsR3(options.permissions); - const processedUserPassword = processPasswordR5(options.userPassword); - const processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword; - this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray); - const userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray); - const userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8); - const userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey); - const ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray); - const ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8); - const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey); - const permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray); - encDict.V = 5; - encDict.Length = this.keyBits; - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV3', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - encDict.R = 5; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry); - encDict.P = permissions; - encDict.Perms = wordArrayToBuffer(permsEntry); - } - getEncryptFn(obj, gen) { - let digest; - if (this.version < 5) { - digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5)); - } - if (this.version === 1 || this.version === 2) { - let key = CryptoJS.MD5(digest); - key.sigBytes = Math.min(16, this.keyBits / 8 + 5); - return buffer => wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key).ciphertext); - } - let key; - if (this.version === 4) { - key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))); - } else { - key = this.encryptionKey; - } - const iv = PDFSecurity.generateRandomWordArray(16); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - iv - }; - return buffer => wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext)); - } - end() { - this.dictionary.end(); - } -} -function getPermissionsR2(permissionObject = {}) { - let permissions = 0xffffffc0 >> 0; - if (permissionObject.printing) { - permissions |= 0b000000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - return permissions; -} -function getPermissionsR3(permissionObject = {}) { - let permissions = 0xfffff0c0 >> 0; - if (permissionObject.printing === 'lowResolution') { - permissions |= 0b000000000100; - } - if (permissionObject.printing === 'highResolution') { - permissions |= 0b100000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - if (permissionObject.fillingForms) { - permissions |= 0b000100000000; - } - if (permissionObject.contentAccessibility) { - permissions |= 0b001000000000; - } - if (permissionObject.documentAssembly) { - permissions |= 0b010000000000; - } - return permissions; -} -function getUserPasswordR2(encryptionKey) { - return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext; -} -function getUserPasswordR3R4(documentId, encryptionKey) { - const key = encryptionKey.clone(); - let cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))); - for (let i = 0; i < 20; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher.concat(CryptoJS.lib.WordArray.create(null, 16)); -} -function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) { - let digest = paddedOwnerPassword; - let round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - digest = CryptoJS.MD5(digest); - } - const key = digest.clone(); - key.sigBytes = keyBits / 8; - let cipher = paddedUserPassword; - round = r >= 3 ? 20 : 1; - for (let i = 0; i < round; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = digest.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher; -} -function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) { - let key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId)); - const round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - key = CryptoJS.MD5(key); - key.sigBytes = keyBits / 8; - } - return key; -} -function getUserPasswordR5(processedUserPassword, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt); -} -function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) { - const key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt); -} -function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) { - const key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getEncryptionKeyR5(generateRandomWordArray) { - return generateRandomWordArray(32); -} -function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) { - const cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4)); - const options = { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding - }; - return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext; -} -function processPasswordR2R3R4(password = '') { - const out = Buffer.alloc(32); - const length = password.length; - let index = 0; - while (index < length && index < 32) { - const code = password.charCodeAt(index); - if (code > 0xff) { - throw new Error('Password contains one or more invalid characters.'); - } - out[index] = code; - index++; - } - while (index < 32) { - out[index] = PASSWORD_PADDING[index - length]; - index++; - } - return CryptoJS.lib.WordArray.create(out); -} -function processPasswordR5(password = '') { - password = unescape(encodeURIComponent(saslprep(password))); - const length = Math.min(127, password.length); - const out = Buffer.alloc(length); - for (let i = 0; i < length; i++) { - out[i] = password.charCodeAt(i); - } - return CryptoJS.lib.WordArray.create(out); -} -function lsbFirstWord(data) { - return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff; -} -function wordArrayToBuffer(wordArray) { - const byteArray = []; - for (let i = 0; i < wordArray.sigBytes; i++) { - byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff); - } - return Buffer.from(byteArray); -} -const PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]; - -const { - number: number$2 -} = PDFObject; -class PDFGradient$1 { - constructor(doc) { - this.doc = doc; - this.stops = []; - this.embedded = false; - this.transform = [1, 0, 0, 1, 0, 0]; - } - stop(pos, color, opacity) { - if (opacity == null) { - opacity = 1; - } - color = this.doc._normalizeColor(color); - if (this.stops.length === 0) { - if (color.length === 3) { - this._colorSpace = 'DeviceRGB'; - } else if (color.length === 4) { - this._colorSpace = 'DeviceCMYK'; - } else if (color.length === 1) { - this._colorSpace = 'DeviceGray'; - } else { - throw new Error('Unknown color space'); - } - } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) { - throw new Error('All gradient stops must use the same color space'); - } - opacity = Math.max(0, Math.min(1, opacity)); - this.stops.push([pos, color, opacity]); - return this; - } - setTransform(m11, m12, m21, m22, dx, dy) { - this.transform = [m11, m12, m21, m22, dx, dy]; - return this; - } - embed(m) { - let fn; - const stopsLength = this.stops.length; - if (stopsLength === 0) { - return; - } - this.embedded = true; - this.matrix = m; - const last = this.stops[stopsLength - 1]; - if (last[0] < 1) { - this.stops.push([1, last[1], last[2]]); - } - const bounds = []; - const encode = []; - const stops = []; - for (let i = 0; i < stopsLength - 1; i++) { - encode.push(0, 1); - if (i + 2 !== stopsLength) { - bounds.push(this.stops[i + 1][0]); - } - fn = this.doc.ref({ - FunctionType: 2, - Domain: [0, 1], - C0: this.stops[i + 0][1], - C1: this.stops[i + 1][1], - N: 1 - }); - stops.push(fn); - fn.end(); - } - if (stopsLength === 1) { - fn = stops[0]; - } else { - fn = this.doc.ref({ - FunctionType: 3, - Domain: [0, 1], - Functions: stops, - Bounds: bounds, - Encode: encode - }); - fn.end(); - } - this.id = `Sh${++this.doc._gradCount}`; - const shader = this.shader(fn); - shader.end(); - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 2, - Shading: shader, - Matrix: this.matrix.map(number$2) - }); - pattern.end(); - if (this.stops.some(stop => stop[2] < 1)) { - let grad = this.opacityGradient(); - grad._colorSpace = 'DeviceGray'; - for (let stop of this.stops) { - grad.stop(stop[0], [stop[2]]); - } - grad = grad.embed(this.matrix); - const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; - const form = this.doc.ref({ - Type: 'XObject', - Subtype: 'Form', - FormType: 1, - BBox: pageBBox, - Group: { - Type: 'Group', - S: 'Transparency', - CS: 'DeviceGray' - }, - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: grad - } - } - }); - form.write('/Pattern cs /Sh1 scn'); - form.end(`${pageBBox.join(' ')} re f`); - const gstate = this.doc.ref({ - Type: 'ExtGState', - SMask: { - Type: 'Mask', - S: 'Luminosity', - G: form - } - }); - gstate.end(); - const opacityPattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 1, - TilingType: 2, - BBox: pageBBox, - XStep: pageBBox[2], - YStep: pageBBox[3], - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: pattern - }, - ExtGState: { - Gs1: gstate - } - } - }); - opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn'); - opacityPattern.end(`${pageBBox.join(' ')} re f`); - this.doc.page.patterns[this.id] = opacityPattern; - } else { - this.doc.page.patterns[this.id] = pattern; - } - return pattern; - } - apply(stroke) { - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = this.transform; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) { - this.embed(m); - } - this.doc._setColorSpace('Pattern', stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`/${this.id} ${op}`); - } -} -class PDFLinearGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, x2, y2) { - super(doc); - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 2, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.x2, this.y2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFLinearGradient$1(this.doc, this.x1, this.y1, this.x2, this.y2); - } -} -class PDFRadialGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, r1, x2, y2, r2) { - super(doc); - this.doc = doc; - this.x1 = x1; - this.y1 = y1; - this.r1 = r1; - this.x2 = x2; - this.y2 = y2; - this.r2 = r2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 3, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFRadialGradient$1(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); - } -} -var Gradient = { - PDFGradient: PDFGradient$1, - PDFLinearGradient: PDFLinearGradient$1, - PDFRadialGradient: PDFRadialGradient$1 -}; - -const underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB']; -class PDFTilingPattern$1 { - constructor(doc, bBox, xStep, yStep, stream) { - this.doc = doc; - this.bBox = bBox; - this.xStep = xStep; - this.yStep = yStep; - this.stream = stream; - } - createPattern() { - const resources = this.doc.ref(); - resources.end(); - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0]; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 2, - TilingType: 2, - BBox: this.bBox, - XStep: this.xStep, - YStep: this.yStep, - Matrix: m.map(v => +v.toFixed(5)), - Resources: resources - }); - pattern.end(this.stream); - return pattern; - } - embedPatternColorSpaces() { - underlyingColorSpaces.forEach(csName => { - const csId = this.getPatternColorSpaceId(csName); - if (this.doc.page.colorSpaces[csId]) return; - const cs = this.doc.ref(['Pattern', csName]); - cs.end(); - this.doc.page.colorSpaces[csId] = cs; - }); - } - getPatternColorSpaceId(underlyingColorspace) { - return `CsP${underlyingColorspace}`; - } - embed() { - if (!this.id) { - this.doc._patternCount = this.doc._patternCount + 1; - this.id = 'P' + this.doc._patternCount; - this.pattern = this.createPattern(); - } - if (!this.doc.page.patterns[this.id]) { - this.doc.page.patterns[this.id] = this.pattern; - } - } - apply(stroke, patternColor) { - this.embedPatternColorSpaces(); - this.embed(); - const normalizedColor = this.doc._normalizeColor(patternColor); - if (!normalizedColor) throw Error(`invalid pattern color. (value: ${patternColor})`); - const csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor)); - this.doc._setColorSpace(csId, stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`${normalizedColor.join(' ')} /${this.id} ${op}`); - } -} -var pattern = { - PDFTilingPattern: PDFTilingPattern$1 -}; - -const { - PDFGradient, - PDFLinearGradient, - PDFRadialGradient -} = Gradient; -const { - PDFTilingPattern -} = pattern; -var ColorMixin = { - initColor() { - this.spotColors = {}; - this._opacityRegistry = {}; - this._opacityCount = 0; - this._patternCount = 0; - this._gradCount = 0; - }, - _normalizeColor(color) { - if (typeof color === 'string') { - if (color.charAt(0) === '#') { - if (color.length === 4) { - color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3'); - } - const hex = parseInt(color.slice(1), 16); - color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; - } else if (namedColors[color]) { - color = namedColors[color]; - } else if (this.spotColors[color]) { - return this.spotColors[color]; - } - } - if (Array.isArray(color)) { - if (color.length === 3) { - color = color.map(part => part / 255); - } else if (color.length === 4) { - color = color.map(part => part / 100); - } - return color; - } - return null; - }, - _setColor(color, stroke) { - if (color instanceof PDFGradient) { - color.apply(stroke); - return true; - } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) { - color[0].apply(stroke, color[1]); - return true; - } - return this._setColorCore(color, stroke); - }, - _setColorCore(color, stroke) { - color = this._normalizeColor(color); - if (!color) { - return false; - } - const op = stroke ? 'SCN' : 'scn'; - const space = this._getColorSpace(color); - this._setColorSpace(space, stroke); - if (color instanceof SpotColor) { - this.page.colorSpaces[color.id] = color.ref; - this.addContent(`1 ${op}`); - } else { - this.addContent(`${color.join(' ')} ${op}`); - } - return true; - }, - _setColorSpace(space, stroke) { - const op = stroke ? 'CS' : 'cs'; - return this.addContent(`/${space} ${op}`); - }, - _getColorSpace(color) { - if (color instanceof SpotColor) { - return color.id; - } - return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; - }, - fillColor(color, opacity) { - const set = this._setColor(color, false); - if (set) { - this.fillOpacity(opacity); - } - this._fillColor = [color, opacity]; - return this; - }, - strokeColor(color, opacity) { - const set = this._setColor(color, true); - if (set) { - this.strokeOpacity(opacity); - } - return this; - }, - opacity(opacity) { - this._doOpacity(opacity, opacity); - return this; - }, - fillOpacity(opacity) { - this._doOpacity(opacity, null); - return this; - }, - strokeOpacity(opacity) { - this._doOpacity(null, opacity); - return this; - }, - _doOpacity(fillOpacity, strokeOpacity) { - let dictionary, name; - if (fillOpacity == null && strokeOpacity == null) { - return; - } - if (fillOpacity != null) { - fillOpacity = Math.max(0, Math.min(1, fillOpacity)); - } - if (strokeOpacity != null) { - strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); - } - const key = `${fillOpacity}_${strokeOpacity}`; - if (this._opacityRegistry[key]) { - [dictionary, name] = this._opacityRegistry[key]; - } else { - dictionary = { - Type: 'ExtGState' - }; - if (fillOpacity != null) { - dictionary.ca = fillOpacity; - } - if (strokeOpacity != null) { - dictionary.CA = strokeOpacity; - } - dictionary = this.ref(dictionary); - dictionary.end(); - const id = ++this._opacityCount; - name = `Gs${id}`; - this._opacityRegistry[key] = [dictionary, name]; - } - this.page.ext_gstates[name] = dictionary; - return this.addContent(`/${name} gs`); - }, - linearGradient(x1, y1, x2, y2) { - return new PDFLinearGradient(this, x1, y1, x2, y2); - }, - radialGradient(x1, y1, r1, x2, y2, r2) { - return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2); - }, - pattern(bbox, xStep, yStep, stream) { - return new PDFTilingPattern(this, bbox, xStep, yStep, stream); - }, - addSpotColor(name, C, M, Y, K) { - const color = new SpotColor(this, name, C, M, Y, K); - this.spotColors[name] = color; - return this; - } -}; -var namedColors = { - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -let cx, cy, px, py, sx, sy; -cx = cy = px = py = sx = sy = 0; -const parameters = { - A: 7, - a: 7, - C: 6, - c: 6, - H: 1, - h: 1, - L: 2, - l: 2, - M: 2, - m: 2, - Q: 4, - q: 4, - S: 4, - s: 4, - T: 2, - t: 2, - V: 1, - v: 1, - Z: 0, - z: 0 -}; -const parse = function (path) { - let cmd; - const ret = []; - let args = []; - let curArg = ''; - let foundDecimal = false; - let params = 0; - for (let c of path) { - if (parameters[c] != null) { - params = parameters[c]; - if (cmd) { - if (curArg.length > 0) { - args[args.length] = +curArg; - } - ret[ret.length] = { - cmd, - args - }; - args = []; - curArg = ''; - foundDecimal = false; - } - cmd = c; - } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) { - if (curArg.length === 0) { - continue; - } - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - foundDecimal = c === '.'; - curArg = ['-', '.'].includes(c) ? c : ''; - } else { - curArg += c; - if (c === '.') { - foundDecimal = true; - } - } - } - if (curArg.length > 0) { - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - } - ret[ret.length] = { - cmd, - args - }; - return ret; -}; -const apply = function (commands, doc) { - cx = cy = px = py = sx = sy = 0; - for (let i = 0; i < commands.length; i++) { - const c = commands[i]; - if (typeof runners[c.cmd] === 'function') { - runners[c.cmd](doc, c.args); - } - } -}; -const runners = { - M(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - m(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - C(doc, a) { - cx = a[4]; - cy = a[5]; - px = a[2]; - py = a[3]; - return doc.bezierCurveTo(...a); - }, - c(doc, a) { - doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); - px = cx + a[2]; - py = cy + a[3]; - cx += a[4]; - return cy += a[5]; - }, - S(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); - px = a[0]; - py = a[1]; - cx = a[2]; - return cy = a[3]; - }, - s(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - Q(doc, a) { - px = a[0]; - py = a[1]; - cx = a[2]; - cy = a[3]; - return doc.quadraticCurveTo(a[0], a[1], cx, cy); - }, - q(doc, a) { - doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - T(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, a[0], a[1]); - px = cx - (px - cx); - py = cy - (py - cy); - cx = a[0]; - return cy = a[1]; - }, - t(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); - cx += a[0]; - return cy += a[1]; - }, - A(doc, a) { - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - a(doc, a) { - a[5] += cx; - a[6] += cy; - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - L(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - l(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - H(doc, a) { - cx = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - h(doc, a) { - cx += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - V(doc, a) { - cy = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - v(doc, a) { - cy += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - Z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - }, - z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - } -}; -const solveArc = function (doc, x, y, coords) { - const [rx, ry, rot, large, sweep, ex, ey] = coords; - const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (let seg of segs) { - const bez = segmentToBezier(...seg); - doc.bezierCurveTo(...bez); - } -}; -const arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) { - const th = rotateX * (Math.PI / 180); - const sin_th = Math.sin(th); - const cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - let pl = px * px / (rx * rx) + py * py / (ry * ry); - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - const a00 = cos_th / rx; - const a01 = sin_th / rx; - const a10 = -sin_th / ry; - const a11 = cos_th / ry; - const x0 = a00 * ox + a01 * oy; - const y0 = a10 * ox + a11 * oy; - const x1 = a00 * x + a01 * y; - const y1 = a10 * x + a11 * y; - const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); - let sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) { - sfactor_sq = 0; - } - let sfactor = Math.sqrt(sfactor_sq); - if (sweep === large) { - sfactor = -sfactor; - } - const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); - const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); - const th0 = Math.atan2(y0 - yc, x0 - xc); - const th1 = Math.atan2(y1 - yc, x1 - xc); - let th_arc = th1 - th0; - if (th_arc < 0 && sweep === 1) { - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - const result = []; - for (let i = 0; i < segments; i++) { - const th2 = th0 + i * th_arc / segments; - const th3 = th0 + (i + 1) * th_arc / segments; - result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; - } - return result; -}; -const segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) { - const a00 = cos_th * rx; - const a01 = -sin_th * ry; - const a10 = sin_th * rx; - const a11 = cos_th * ry; - const th_half = 0.5 * (th1 - th0); - const t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); - const x1 = cx + Math.cos(th0) - t * Math.sin(th0); - const y1 = cy + Math.sin(th0) + t * Math.cos(th0); - const x3 = cx + Math.cos(th1); - const y3 = cy + Math.sin(th1); - const x2 = x3 + t * Math.sin(th1); - const y2 = y3 - t * Math.cos(th1); - return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; -}; -class SVGPath { - static apply(doc, path) { - const commands = parse(path); - apply(commands, doc); - } -} - -const { - number: number$1 -} = PDFObject; -const KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); -var VectorMixin = { - initVector() { - this._ctm = [1, 0, 0, 1, 0, 0]; - this._ctmStack = []; - }, - save() { - this._ctmStack.push(this._ctm.slice()); - return this.addContent('q'); - }, - restore() { - this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; - return this.addContent('Q'); - }, - closePath() { - return this.addContent('h'); - }, - lineWidth(w) { - return this.addContent(`${number$1(w)} w`); - }, - _CAP_STYLES: { - BUTT: 0, - ROUND: 1, - SQUARE: 2 - }, - lineCap(c) { - if (typeof c === 'string') { - c = this._CAP_STYLES[c.toUpperCase()]; - } - return this.addContent(`${c} J`); - }, - _JOIN_STYLES: { - MITER: 0, - ROUND: 1, - BEVEL: 2 - }, - lineJoin(j) { - if (typeof j === 'string') { - j = this._JOIN_STYLES[j.toUpperCase()]; - } - return this.addContent(`${j} j`); - }, - miterLimit(m) { - return this.addContent(`${number$1(m)} M`); - }, - dash(length, options = {}) { - const originalLength = length; - if (!Array.isArray(length)) { - length = [length, options.space || length]; - } - const valid = length.every(x => Number.isFinite(x) && x > 0); - if (!valid) { - throw new Error(`dash(${JSON.stringify(originalLength)}, ${JSON.stringify(options)}) invalid, lengths must be numeric and greater than zero`); - } - length = length.map(number$1).join(' '); - return this.addContent(`[${length}] ${number$1(options.phase || 0)} d`); - }, - undash() { - return this.addContent('[] 0 d'); - }, - moveTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} m`); - }, - lineTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} l`); - }, - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - return this.addContent(`${number$1(cp1x)} ${number$1(cp1y)} ${number$1(cp2x)} ${number$1(cp2y)} ${number$1(x)} ${number$1(y)} c`); - }, - quadraticCurveTo(cpx, cpy, x, y) { - return this.addContent(`${number$1(cpx)} ${number$1(cpy)} ${number$1(x)} ${number$1(y)} v`); - }, - rect(x, y, w, h) { - return this.addContent(`${number$1(x)} ${number$1(y)} ${number$1(w)} ${number$1(h)} re`); - }, - roundedRect(x, y, w, h, r) { - if (r == null) { - r = 0; - } - r = Math.min(r, 0.5 * w, 0.5 * h); - const c = r * (1.0 - KAPPA); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); - this.lineTo(x + w, y + h - r); - this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); - this.lineTo(x + r, y + h); - this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); - this.lineTo(x, y + r); - this.bezierCurveTo(x, y + c, x + c, y, x + r, y); - return this.closePath(); - }, - ellipse(x, y, r1, r2) { - if (r2 == null) { - r2 = r1; - } - x -= r1; - y -= r2; - const ox = r1 * KAPPA; - const oy = r2 * KAPPA; - const xe = x + r1 * 2; - const ye = y + r2 * 2; - const xm = x + r1; - const ym = y + r2; - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - return this.closePath(); - }, - circle(x, y, radius) { - return this.ellipse(x, y, radius); - }, - arc(x, y, radius, startAngle, endAngle, anticlockwise) { - if (anticlockwise == null) { - anticlockwise = false; - } - const TWO_PI = 2.0 * Math.PI; - const HALF_PI = 0.5 * Math.PI; - let deltaAng = endAngle - startAngle; - if (Math.abs(deltaAng) > TWO_PI) { - deltaAng = TWO_PI; - } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) { - const dir = anticlockwise ? -1 : 1; - deltaAng = dir * TWO_PI + deltaAng; - } - const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); - const segAng = deltaAng / numSegs; - const handleLen = segAng / HALF_PI * KAPPA * radius; - let curAng = startAngle; - let deltaCx = -Math.sin(curAng) * handleLen; - let deltaCy = Math.cos(curAng) * handleLen; - let ax = x + Math.cos(curAng) * radius; - let ay = y + Math.sin(curAng) * radius; - this.moveTo(ax, ay); - for (let segIdx = 0; segIdx < numSegs; segIdx++) { - const cp1x = ax + deltaCx; - const cp1y = ay + deltaCy; - curAng += segAng; - ax = x + Math.cos(curAng) * radius; - ay = y + Math.sin(curAng) * radius; - deltaCx = -Math.sin(curAng) * handleLen; - deltaCy = Math.cos(curAng) * handleLen; - const cp2x = ax - deltaCx; - const cp2y = ay - deltaCy; - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); - } - return this; - }, - polygon(...points) { - this.moveTo(...(points.shift() || [])); - for (let point of points) { - this.lineTo(...(point || [])); - } - return this.closePath(); - }, - path(path) { - SVGPath.apply(this, path); - return this; - }, - _windingRule(rule) { - if (/even-?odd/.test(rule)) { - return '*'; - } - return ''; - }, - fill(color, rule) { - if (/(even-?odd)|(non-?zero)/.test(color)) { - rule = color; - color = null; - } - if (color) { - this.fillColor(color); - } - return this.addContent(`f${this._windingRule(rule)}`); - }, - stroke(color) { - if (color) { - this.strokeColor(color); - } - return this.addContent('S'); - }, - fillAndStroke(fillColor, strokeColor, rule) { - if (strokeColor == null) { - strokeColor = fillColor; - } - const isFillRule = /(even-?odd)|(non-?zero)/; - if (isFillRule.test(fillColor)) { - rule = fillColor; - fillColor = null; - } - if (isFillRule.test(strokeColor)) { - rule = strokeColor; - strokeColor = fillColor; - } - if (fillColor) { - this.fillColor(fillColor); - this.strokeColor(strokeColor); - } - return this.addContent(`B${this._windingRule(rule)}`); - }, - clip(rule) { - return this.addContent(`W${this._windingRule(rule)} n`); - }, - transform(m11, m12, m21, m22, dx, dy) { - if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) { - return this; - } - const m = this._ctm; - const [m0, m1, m2, m3, m4, m5] = m; - m[0] = m0 * m11 + m2 * m12; - m[1] = m1 * m11 + m3 * m12; - m[2] = m0 * m21 + m2 * m22; - m[3] = m1 * m21 + m3 * m22; - m[4] = m0 * dx + m2 * dy + m4; - m[5] = m1 * dx + m3 * dy + m5; - const values = [m11, m12, m21, m22, dx, dy].map(v => number$1(v)).join(' '); - return this.addContent(`${values} cm`); - }, - translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - }, - rotate(angle, options = {}) { - let y; - const rad = angle * Math.PI / 180; - const cos = Math.cos(rad); - const sin = Math.sin(rad); - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - const x1 = x * cos - y * sin; - const y1 = x * sin + y * cos; - x -= x1; - y -= y1; - } - return this.transform(cos, sin, -sin, cos, x, y); - }, - scale(xFactor, yFactor, options = {}) { - let y; - if (yFactor == null) { - yFactor = xFactor; - } - if (typeof yFactor === 'object') { - options = yFactor; - yFactor = xFactor; - } - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - x -= xFactor * x; - y -= yFactor * y; - } - return this.transform(xFactor, 0, 0, yFactor, x, y); - } -}; - -const WIN_ANSI_MAP = { - 402: 131, - 8211: 150, - 8212: 151, - 8216: 145, - 8217: 146, - 8218: 130, - 8220: 147, - 8221: 148, - 8222: 132, - 8224: 134, - 8225: 135, - 8226: 149, - 8230: 133, - 8364: 128, - 8240: 137, - 8249: 139, - 8250: 155, - 710: 136, - 8482: 153, - 338: 140, - 339: 156, - 732: 152, - 352: 138, - 353: 154, - 376: 159, - 381: 142, - 382: 158 -}; -const characters = `\ -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef - -space exclam quotedbl numbersign -dollar percent ampersand quotesingle -parenleft parenright asterisk plus -comma hyphen period slash -zero one two three -four five six seven -eight nine colon semicolon -less equal greater question - -at A B C -D E F G -H I J K -L M N O -P Q R S -T U V W -X Y Z bracketleft -backslash bracketright asciicircum underscore - -grave a b c -d e f g -h i j k -l m n o -p q r s -t u v w -x y z braceleft -bar braceright asciitilde .notdef - -Euro .notdef quotesinglbase florin -quotedblbase ellipsis dagger daggerdbl -circumflex perthousand Scaron guilsinglleft -OE .notdef Zcaron .notdef -.notdef quoteleft quoteright quotedblleft -quotedblright bullet endash emdash -tilde trademark scaron guilsinglright -oe .notdef zcaron ydieresis - -space exclamdown cent sterling -currency yen brokenbar section -dieresis copyright ordfeminine guillemotleft -logicalnot hyphen registered macron -degree plusminus twosuperior threesuperior -acute mu paragraph periodcentered -cedilla onesuperior ordmasculine guillemotright -onequarter onehalf threequarters questiondown - -Agrave Aacute Acircumflex Atilde -Adieresis Aring AE Ccedilla -Egrave Eacute Ecircumflex Edieresis -Igrave Iacute Icircumflex Idieresis -Eth Ntilde Ograve Oacute -Ocircumflex Otilde Odieresis multiply -Oslash Ugrave Uacute Ucircumflex -Udieresis Yacute Thorn germandbls - -agrave aacute acircumflex atilde -adieresis aring ae ccedilla -egrave eacute ecircumflex edieresis -igrave iacute icircumflex idieresis -eth ntilde ograve oacute -ocircumflex otilde odieresis divide -oslash ugrave uacute ucircumflex -udieresis yacute thorn ydieresis\ -`.split(/\s+/); -class AFMFont { - constructor(contents) { - this.attributes = {}; - this.glyphWidths = {}; - this.boundingBoxes = {}; - this.kernPairs = {}; - this.parse(contents); - this.bbox = this.attributes['FontBBox'].split(/\s+/).map(e => +e); - this.ascender = +(this.attributes['Ascender'] || 0); - this.descender = +(this.attributes['Descender'] || 0); - this.xHeight = +(this.attributes['XHeight'] || 0); - this.capHeight = +(this.attributes['CapHeight'] || 0); - this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender); - } - parse(contents) { - let section = ''; - for (let line of contents.split('\n')) { - var match; - var a; - if (match = line.match(/^Start(\w+)/)) { - section = match[1]; - continue; - } else if (match = line.match(/^End(\w+)/)) { - section = ''; - continue; - } - switch (section) { - case 'FontMetrics': - match = line.match(/(^\w+)\s+(.*)/); - var key = match[1]; - var value = match[2]; - if (a = this.attributes[key]) { - if (!Array.isArray(a)) { - a = this.attributes[key] = [a]; - } - a.push(value); - } else { - this.attributes[key] = value; - } - break; - case 'CharMetrics': - if (!/^CH?\s/.test(line)) { - continue; - } - var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; - this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; - break; - case 'KernPairs': - match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); - if (match) { - this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); - } - break; - } - } - } - encodeText(text) { - const res = []; - for (let i = 0, len = text.length; i < len; i++) { - let char = text.charCodeAt(i); - char = WIN_ANSI_MAP[char] || char; - res.push(char.toString(16)); - } - return res; - } - glyphsForString(string) { - const glyphs = []; - for (let i = 0, len = string.length; i < len; i++) { - const charCode = string.charCodeAt(i); - glyphs.push(this.characterToGlyph(charCode)); - } - return glyphs; - } - characterToGlyph(character) { - return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; - } - widthOfGlyph(glyph) { - return this.glyphWidths[glyph] || 0; - } - getKernPair(left, right) { - return this.kernPairs[left + '\0' + right] || 0; - } - advancesForGlyphs(glyphs) { - const advances = []; - for (let index = 0; index < glyphs.length; index++) { - const left = glyphs[index]; - const right = glyphs[index + 1]; - advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); - } - return advances; - } -} - -class PDFFont { - constructor() {} - encode() { - throw new Error('Must be implemented by subclasses'); - } - widthOfString() { - throw new Error('Must be implemented by subclasses'); - } - ref() { - return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); - } - finalize() { - if (this.embedded || this.dictionary == null) { - return; - } - this.embed(); - this.embedded = true; - } - embed() { - throw new Error('Must be implemented by subclasses'); - } - lineHeight(size, includeGap = false) { - const gap = includeGap ? this.lineGap : 0; - return (this.ascender + gap - this.descender) / 1000 * size; - } -} - -const STANDARD_FONTS = { - Courier() { - return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8'); - }, - 'Courier-Bold'() { - return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8'); - }, - 'Courier-Oblique'() { - return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8'); - }, - 'Courier-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8'); - }, - Helvetica() { - return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8'); - }, - 'Helvetica-Bold'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8'); - }, - 'Helvetica-Oblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8'); - }, - 'Helvetica-BoldOblique'() { - return fs.readFileSync(__dirname + '/data/Helvetica-BoldOblique.afm', 'utf8'); - }, - 'Times-Roman'() { - return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8'); - }, - 'Times-Bold'() { - return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8'); - }, - 'Times-Italic'() { - return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8'); - }, - 'Times-BoldItalic'() { - return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8'); - }, - Symbol() { - return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8'); - }, - ZapfDingbats() { - return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8'); - } -}; -class StandardFont extends PDFFont { - constructor(document, name, id) { - super(); - this.document = document; - this.name = name; - this.id = id; - this.font = new AFMFont(STANDARD_FONTS[this.name]()); - ({ - ascender: this.ascender, - descender: this.descender, - bbox: this.bbox, - lineGap: this.lineGap, - xHeight: this.xHeight, - capHeight: this.capHeight - } = this.font); - } - embed() { - this.dictionary.data = { - Type: 'Font', - BaseFont: this.name, - Subtype: 'Type1', - Encoding: 'WinAnsiEncoding' - }; - return this.dictionary.end(); - } - encode(text) { - const encoded = this.font.encodeText(text); - const glyphs = this.font.glyphsForString(`${text}`); - const advances = this.font.advancesForGlyphs(glyphs); - const positions = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - positions.push({ - xAdvance: advances[i], - yAdvance: 0, - xOffset: 0, - yOffset: 0, - advanceWidth: this.font.widthOfGlyph(glyph) - }); - } - return [encoded, positions]; - } - widthOfString(string, size) { - const glyphs = this.font.glyphsForString(`${string}`); - const advances = this.font.advancesForGlyphs(glyphs); - let width = 0; - for (let advance of advances) { - width += advance; - } - const scale = size / 1000; - return width * scale; - } - static isStandardFont(name) { - return name in STANDARD_FONTS; - } -} - -const toHex = function (num) { - return `0000${num.toString(16)}`.slice(-4); -}; -class EmbeddedFont extends PDFFont { - constructor(document, font, id) { - super(); - this.document = document; - this.font = font; - this.id = id; - this.subset = this.font.createSubset(); - this.unicode = [[0]]; - this.widths = [this.font.getGlyph(0).advanceWidth]; - this.name = this.font.postscriptName; - this.scale = 1000 / this.font.unitsPerEm; - this.ascender = this.font.ascent * this.scale; - this.descender = this.font.descent * this.scale; - this.xHeight = this.font.xHeight * this.scale; - this.capHeight = this.font.capHeight * this.scale; - this.lineGap = this.font.lineGap * this.scale; - this.bbox = this.font.bbox; - if (document.options.fontLayoutCache !== false) { - this.layoutCache = Object.create(null); - } - } - layoutRun(text, features) { - const run = this.font.layout(text, features); - for (let i = 0; i < run.positions.length; i++) { - const position = run.positions[i]; - for (let key in position) { - position[key] *= this.scale; - } - position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; - } - return run; - } - layoutCached(text) { - if (!this.layoutCache) { - return this.layoutRun(text); - } - let cached; - if (cached = this.layoutCache[text]) { - return cached; - } - const run = this.layoutRun(text); - this.layoutCache[text] = run; - return run; - } - layout(text, features, onlyWidth) { - if (features) { - return this.layoutRun(text, features); - } - let glyphs = onlyWidth ? null : []; - let positions = onlyWidth ? null : []; - let advanceWidth = 0; - let last = 0; - let index = 0; - while (index <= text.length) { - var needle; - if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) { - const run = this.layoutCached(text.slice(last, ++index)); - if (!onlyWidth) { - glyphs = glyphs.concat(run.glyphs); - positions = positions.concat(run.positions); - } - advanceWidth += run.advanceWidth; - last = index; - } else { - index++; - } - } - return { - glyphs, - positions, - advanceWidth - }; - } - encode(text, features) { - const { - glyphs, - positions - } = this.layout(text, features); - const res = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - const gid = this.subset.includeGlyph(glyph.id); - res.push(`0000${gid.toString(16)}`.slice(-4)); - if (this.widths[gid] == null) { - this.widths[gid] = glyph.advanceWidth * this.scale; - } - if (this.unicode[gid] == null) { - this.unicode[gid] = glyph.codePoints; - } - } - return [res, positions]; - } - widthOfString(string, size, features) { - const width = this.layout(string, features, true).advanceWidth; - const scale = size / 1000; - return width * scale; - } - embed() { - const isCFF = this.subset.cff != null; - const fontFile = this.document.ref(); - if (isCFF) { - fontFile.data.Subtype = 'CIDFontType0C'; - } - fontFile.end(this.subset.encode()); - const familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8; - let flags = 0; - if (this.font.post.isFixedPitch) { - flags |= 1 << 0; - } - if (1 <= familyClass && familyClass <= 7) { - flags |= 1 << 1; - } - flags |= 1 << 2; - if (familyClass === 10) { - flags |= 1 << 3; - } - if (this.font.head.macStyle.italic) { - flags |= 1 << 6; - } - const tag = [1, 2, 3, 4, 5, 6].map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17)).join(''); - const name = tag + '+' + this.font.postscriptName?.replaceAll(' ', '_'); - const { - bbox - } = this.font; - const descriptor = this.document.ref({ - Type: 'FontDescriptor', - FontName: name, - Flags: flags, - FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], - ItalicAngle: this.font.italicAngle, - Ascent: this.ascender, - Descent: this.descender, - CapHeight: (this.font.capHeight || this.font.ascent) * this.scale, - XHeight: (this.font.xHeight || 0) * this.scale, - StemV: 0 - }); - if (isCFF) { - descriptor.data.FontFile3 = fontFile; - } else { - descriptor.data.FontFile2 = fontFile; - } - if (this.document.subset && this.document.subset === 1) { - const CIDSet = Buffer.from('FFFFFFFFC0', 'hex'); - const CIDSetRef = this.document.ref(); - CIDSetRef.write(CIDSet); - CIDSetRef.end(); - descriptor.data.CIDSet = CIDSetRef; - } - descriptor.end(); - const descendantFontData = { - Type: 'Font', - Subtype: 'CIDFontType0', - BaseFont: name, - CIDSystemInfo: { - Registry: new String('Adobe'), - Ordering: new String('Identity'), - Supplement: 0 - }, - FontDescriptor: descriptor, - W: [0, this.widths] - }; - if (!isCFF) { - descendantFontData.Subtype = 'CIDFontType2'; - descendantFontData.CIDToGIDMap = 'Identity'; - } - const descendantFont = this.document.ref(descendantFontData); - descendantFont.end(); - this.dictionary.data = { - Type: 'Font', - Subtype: 'Type0', - BaseFont: name, - Encoding: 'Identity-H', - DescendantFonts: [descendantFont], - ToUnicode: this.toUnicodeCmap() - }; - return this.dictionary.end(); - } - toUnicodeCmap() { - const cmap = this.document.ref(); - const entries = []; - for (let codePoints of this.unicode) { - const encoded = []; - for (let value of codePoints) { - if (value > 0xffff) { - value -= 0x10000; - encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); - value = 0xdc00 | value & 0x3ff; - } - encoded.push(toHex(value)); - } - entries.push(`<${encoded.join(' ')}>`); - } - const chunkSize = 256; - const chunks = Math.ceil(entries.length / chunkSize); - const ranges = []; - for (let i = 0; i < chunks; i++) { - const start = i * chunkSize; - const end = Math.min((i + 1) * chunkSize, entries.length); - ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`); - } - cmap.end(`\ -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo << - /Registry (Adobe) - /Ordering (UCS) - /Supplement 0 ->> def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<0000> -endcodespacerange -1 beginbfrange -${ranges.join('\n')} -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end\ -`); - return cmap; - } -} - -class PDFFontFactory { - static open(document, src, family, id) { - let font; - if (typeof src === 'string') { - if (StandardFont.isStandardFont(src)) { - return new StandardFont(document, src, id); - } - src = fs.readFileSync(src); - } - if (src instanceof Uint8Array) { - font = fontkit.create(src, family); - } else if (src instanceof ArrayBuffer) { - font = fontkit.create(new Uint8Array(src), family); - } - if (font == null) { - throw new Error('Not a supported font format or standard PDF font.'); - } - return new EmbeddedFont(document, font, id); - } -} - -const isEqualFont = (font1, font2) => { - if (font1.font._tables?.head?.checkSumAdjustment !== font2.font._tables?.head?.checkSumAdjustment) { - return false; - } - if (JSON.stringify(font1.font._tables?.name?.records) !== JSON.stringify(font2.font._tables?.name?.records)) { - return false; - } - return true; -}; -var FontsMixin = { - initFonts(defaultFont = 'Helvetica', defaultFontFamily = null, defaultFontSize = 12) { - this._fontFamilies = {}; - this._fontCount = 0; - this._fontSource = defaultFont; - this._fontFamily = defaultFontFamily; - this._fontSize = defaultFontSize; - this._font = null; - this._remSize = defaultFontSize; - this._registeredFonts = {}; - if (defaultFont) { - this.font(defaultFont, defaultFontFamily); - } - }, - font(src, family, size) { - let cacheKey, font; - if (typeof family === 'number') { - size = family; - family = null; - } - if (typeof src === 'string' && this._registeredFonts[src]) { - cacheKey = src; - ({ - src, - family - } = this._registeredFonts[src]); - } else { - cacheKey = family || src; - if (typeof cacheKey !== 'string') { - cacheKey = null; - } - } - this._fontSource = src; - this._fontFamily = family; - if (size != null) { - this.fontSize(size); - } - if (font = this._fontFamilies[cacheKey]) { - this._font = font; - return this; - } - const id = `F${++this._fontCount}`; - this._font = PDFFontFactory.open(this, src, family, id); - if ((font = this._fontFamilies[this._font.name]) && isEqualFont(this._font, font)) { - this._font = font; - return this; - } - if (cacheKey) { - this._fontFamilies[cacheKey] = this._font; - } - if (this._font.name) { - this._fontFamilies[this._font.name] = this._font; - } - return this; - }, - fontSize(_fontSize) { - this._fontSize = this.sizeToPoint(_fontSize); - return this; - }, - currentLineHeight(includeGap) { - return this._font.lineHeight(this._fontSize, includeGap); - }, - registerFont(name, src, family) { - this._registeredFonts[name] = { - src, - family - }; - return this; - }, - sizeToPoint(size, defaultValue = 0, page = this.page, percentageWidth = undefined) { - if (!percentageWidth) percentageWidth = this._fontSize; - if (typeof defaultValue !== 'number') defaultValue = this.sizeToPoint(defaultValue); - if (size === undefined) return defaultValue; - if (typeof size === 'number') return size; - if (typeof size === 'boolean') return Number(size); - const match = String(size).match(/((\d+)?(\.\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/); - if (!match) throw new Error(`Unsupported size '${size}'`); - let multiplier; - switch (match[4]) { - case 'em': - multiplier = this._fontSize; - break; - case 'in': - multiplier = IN_TO_PT; - break; - case 'px': - multiplier = PX_TO_IN * IN_TO_PT; - break; - case 'cm': - multiplier = CM_TO_IN * IN_TO_PT; - break; - case 'mm': - multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT; - break; - case 'pc': - multiplier = PC_TO_PT; - break; - case 'ex': - multiplier = this.currentLineHeight(); - break; - case 'ch': - multiplier = this.widthOfString('0'); - break; - case 'rem': - multiplier = this._remSize; - break; - case 'vw': - multiplier = page.width / 100; - break; - case 'vh': - multiplier = page.height / 100; - break; - case 'vmin': - multiplier = Math.min(page.width, page.height) / 100; - break; - case 'vmax': - multiplier = Math.max(page.width, page.height) / 100; - break; - case '%': - multiplier = percentageWidth / 100; - break; - case 'pt': - default: - multiplier = 1; - } - return multiplier * Number(match[1]); - } -}; - -const SOFT_HYPHEN = '\u00AD'; -const HYPHEN = '-'; -class LineWrapper extends events.EventEmitter { - constructor(document, options) { - super(); - this.document = document; - this.horizontalScaling = options.horizontalScaling || 100; - this.indent = (options.indent || 0) * this.horizontalScaling / 100; - this.characterSpacing = (options.characterSpacing || 0) * this.horizontalScaling / 100; - this.wordSpacing = (options.wordSpacing === 0) * this.horizontalScaling / 100; - this.columns = options.columns || 1; - this.columnGap = (options.columnGap != null ? options.columnGap : 18) * this.horizontalScaling / 100; - this.lineWidth = (options.width * this.horizontalScaling / 100 - this.columnGap * (this.columns - 1)) / this.columns; - this.spaceLeft = this.lineWidth; - this.startX = this.document.x; - this.startY = this.document.y; - this.column = 1; - this.ellipsis = options.ellipsis; - this.continuedX = 0; - this.features = options.features; - if (options.height != null) { - this.height = options.height; - this.maxY = PDFNumber(this.startY + options.height); - } else { - this.maxY = PDFNumber(this.document.page.maxY()); - } - this.on('firstLine', options => { - const indent = this.continuedX || this.indent; - this.document.x += indent; - this.lineWidth -= indent; - if (options.indentAllLines) { - return; - } - this.once('line', () => { - this.document.x -= indent; - this.lineWidth += indent; - if (options.continued && !this.continuedX) { - this.continuedX = this.indent; - } - if (!options.continued) { - this.continuedX = 0; - } - }); - }); - this.on('lastLine', options => { - const { - align - } = options; - if (align === 'justify') { - options.align = 'left'; - } - this.lastLine = true; - this.once('line', () => { - this.document.y += options.paragraphGap || 0; - options.align = align; - return this.lastLine = false; - }); - }); - } - wordWidth(word) { - return PDFNumber(this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing); - } - canFit(word, w) { - if (word[word.length - 1] != SOFT_HYPHEN) { - return w <= this.spaceLeft; - } - return w + this.wordWidth(HYPHEN) <= this.spaceLeft; - } - eachWord(text, fn) { - let bk; - const breaker = new LineBreaker(text); - let last = null; - const wordWidths = Object.create(null); - while (bk = breaker.nextBreak()) { - var shouldContinue; - let word = text.slice((last != null ? last.position : undefined) || 0, bk.position); - let w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); - if (w > this.lineWidth + this.continuedX) { - let lbk = last; - const fbk = {}; - while (word.length) { - var l, mightGrow; - if (w > this.spaceLeft) { - l = Math.ceil(this.spaceLeft / (w / word.length)); - w = this.wordWidth(word.slice(0, l)); - mightGrow = w <= this.spaceLeft && l < word.length; - } else { - l = word.length; - } - let mustShrink = w > this.spaceLeft && l > 0; - while (mustShrink || mightGrow) { - if (mustShrink) { - w = this.wordWidth(word.slice(0, --l)); - mustShrink = w > this.spaceLeft && l > 0; - } else { - w = this.wordWidth(word.slice(0, ++l)); - mustShrink = w > this.spaceLeft && l > 0; - mightGrow = w <= this.spaceLeft && l < word.length; - } - } - if (l === 0 && this.spaceLeft === this.lineWidth) { - l = 1; - } - fbk.required = bk.required || l < word.length; - shouldContinue = fn(word.slice(0, l), w, fbk, lbk); - lbk = { - required: false - }; - word = word.slice(l); - w = this.wordWidth(word); - if (shouldContinue === false) { - break; - } - } - } else { - shouldContinue = fn(word, w, bk, last); - } - if (shouldContinue === false) { - break; - } - last = bk; - } - } - wrap(text, options) { - this.horizontalScaling = options.horizontalScaling || 100; - if (options.indent != null) { - this.indent = options.indent * this.horizontalScaling / 100; - } - if (options.characterSpacing != null) { - this.characterSpacing = options.characterSpacing * this.horizontalScaling / 100; - } - if (options.wordSpacing != null) { - this.wordSpacing = options.wordSpacing * this.horizontalScaling / 100; - } - if (options.ellipsis != null) { - this.ellipsis = options.ellipsis; - } - const nextY = this.document.y + this.document.currentLineHeight(true); - if (this.document.y > this.maxY || nextY > this.maxY) { - this.nextSection(); - } - let buffer = ''; - let textWidth = 0; - let wc = 0; - let lc = 0; - let { - y - } = this.document; - const emitLine = () => { - options.textWidth = textWidth + this.wordSpacing * (wc - 1); - options.wordCount = wc; - options.lineWidth = this.lineWidth; - ({ - y - } = this.document); - this.emit('line', buffer, options, this); - return lc++; - }; - this.emit('sectionStart', options, this); - this.eachWord(text, (word, w, bk, last) => { - if (last == null || last.required) { - this.emit('firstLine', options, this); - this.spaceLeft = this.lineWidth; - } - if (this.canFit(word, w)) { - buffer += word; - textWidth += w; - wc++; - } - if (bk.required || !this.canFit(word, w)) { - const lh = this.document.currentLineHeight(true); - if (this.height != null && this.ellipsis && PDFNumber(this.document.y + lh * 2) > this.maxY && this.column >= this.columns) { - if (this.ellipsis === true) { - this.ellipsis = '…'; - } - buffer = buffer.replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - while (buffer && textWidth > this.lineWidth) { - buffer = buffer.slice(0, -1).replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - } - if (textWidth <= this.lineWidth) { - buffer = buffer + this.ellipsis; - } - textWidth = this.wordWidth(buffer); - } - if (bk.required) { - if (w > this.spaceLeft) { - emitLine(); - buffer = word; - textWidth = w; - wc = 1; - } - this.emit('lastLine', options, this); - } - if (buffer[buffer.length - 1] == SOFT_HYPHEN) { - buffer = buffer.slice(0, -1) + HYPHEN; - this.spaceLeft -= this.wordWidth(HYPHEN); - } - emitLine(); - if (PDFNumber(this.document.y + lh) > this.maxY) { - this.emit('sectionEnd', options, this); - const shouldContinue = this.nextSection(); - if (!shouldContinue) { - wc = 0; - buffer = ''; - return false; - } - this.emit('sectionStart', options, this); - } - if (bk.required) { - this.spaceLeft = this.lineWidth; - buffer = ''; - textWidth = 0; - return wc = 0; - } else { - this.spaceLeft = this.lineWidth - w; - buffer = word; - textWidth = w; - return wc = 1; - } - } else { - return this.spaceLeft -= w; - } - }); - if (wc > 0) { - this.emit('lastLine', options, this); - emitLine(); - } - this.emit('sectionEnd', options, this); - if (options.continued === true) { - if (lc > 1) { - this.continuedX = 0; - } - this.continuedX += options.textWidth || 0; - this.document.y = y; - } else { - this.document.x = this.startX; - } - } - nextSection(options) { - if (++this.column > this.columns) { - if (this.height != null) { - return false; - } - this.document.continueOnNewPage(); - this.column = 1; - this.startY = this.document.page.margins.top; - this.maxY = this.document.page.maxY(); - this.document.x = this.startX; - if (this.document._fillColor) { - this.document.fillColor(...this.document._fillColor); - } - this.emit('pageBreak', options, this); - } else { - this.document.x += this.lineWidth + this.columnGap; - this.document.y = this.startY; - this.emit('columnBreak', options, this); - } - return true; - } -} - -const { - number -} = PDFObject; -function formatListLabel(n, listType) { - if (listType === 'numbered') { - return `${n}.`; - } - var letter = String.fromCharCode((n - 1) % 26 + 65); - var times = Math.floor((n - 1) / 26 + 1); - var text = Array(times + 1).join(letter); - return `${text}.`; -} -var TextMixin = { - initText() { - this._line = this._line.bind(this); - this.x = 0; - this.y = 0; - this._lineGap = 0; - }, - lineGap(_lineGap) { - this._lineGap = _lineGap; - return this; - }, - moveDown(lines) { - if (lines == null) { - lines = 1; - } - this.y += this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - moveUp(lines) { - if (lines == null) { - lines = 1; - } - this.y -= this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - _text(text, x, y, options, lineCallback) { - options = this._initOptions(x, y, options); - text = text == null ? '' : `${text}`; - if (options.wordSpacing) { - text = text.replace(/\s{2,}/g, ' '); - } - const addStructure = () => { - if (options.structParent) { - options.structParent.add(this.struct(options.structType || 'P', [this.markStructureContent(options.structType || 'P')])); - } - }; - if (options.rotation !== 0) { - this.save(); - this.rotate(-options.rotation, { - origin: [this.x, this.y] - }); - } - if (options.width) { - let wrapper = this._wrapper; - if (!wrapper) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', lineCallback); - wrapper.on('firstLine', addStructure); - } - this._wrapper = options.continued ? wrapper : null; - this._textOptions = options.continued ? options : null; - wrapper.wrap(text, options); - } else { - for (let line of text.split('\n')) { - addStructure(); - lineCallback(line, options); - } - } - if (options.rotation !== 0) this.restore(); - return this; - }, - text(text, x, y, options) { - return this._text(text, x, y, options, this._line); - }, - widthOfString(string, options = {}) { - const horizontalScaling = options.horizontalScaling || 100; - return (this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1)) * horizontalScaling / 100; - }, - boundsOfString(string, x, y, options) { - options = this._initOptions(x, y, options); - ({ - x, - y - } = this); - const lineGap = options.lineGap ?? this._lineGap ?? 0; - const lineHeight = this.currentLineHeight(true) + lineGap; - let contentWidth = 0; - string = String(string ?? ''); - if (options.wordSpacing) { - string = string.replace(/\s{2,}/g, ' '); - } - if (options.width) { - let wrapper = new LineWrapper(this, options); - wrapper.on('line', (text, options) => { - this.y += lineHeight; - text = text.replace(/\n/g, ''); - if (text.length) { - let wordSpacing = options.wordSpacing ?? 0; - const characterSpacing = options.characterSpacing ?? 0; - if (options.width && options.align === 'justify') { - const words = text.trim().split(/\s+/); - const textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - const spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - } - contentWidth = Math.max(contentWidth, options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1)); - } - }); - wrapper.wrap(string, options); - } else { - for (let line of string.split('\n')) { - const lineWidth = this.widthOfString(line, options); - this.y += lineHeight; - contentWidth = Math.max(contentWidth, lineWidth); - } - } - let contentHeight = this.y - y; - if (options.height) contentHeight = Math.min(contentHeight, options.height); - this.x = x; - this.y = y; - if (options.rotation === 0) { - return { - x, - y, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 90) { - return { - x: x, - y: y - contentWidth, - width: contentHeight, - height: contentWidth - }; - } else if (options.rotation === 180) { - return { - x: x - contentWidth, - y: y - contentHeight, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 270) { - return { - x: x - contentHeight, - y: y, - width: contentHeight, - height: contentWidth - }; - } - const cos = cosine(options.rotation); - const sin = sine(options.rotation); - const x1 = x; - const y1 = y; - const x2 = x + contentWidth * cos; - const y2 = y - contentWidth * sin; - const x3 = x + contentWidth * cos + contentHeight * sin; - const y3 = y - contentWidth * sin + contentHeight * cos; - const x4 = x + contentHeight * sin; - const y4 = y + contentHeight * cos; - const xMin = Math.min(x1, x2, x3, x4); - const xMax = Math.max(x1, x2, x3, x4); - const yMin = Math.min(y1, y2, y3, y4); - const yMax = Math.max(y1, y2, y3, y4); - return { - x: xMin, - y: yMin, - width: xMax - xMin, - height: yMax - yMin - }; - }, - heightOfString(text, options) { - const { - x, - y - } = this; - options = this._initOptions(options); - options.height = Infinity; - const lineGap = options.lineGap || this._lineGap || 0; - this._text(text, this.x, this.y, options, () => { - this.y += this.currentLineHeight(true) + lineGap; - }); - const height = this.y - y; - this.x = x; - this.y = y; - return height; - }, - list(list, x, y, options) { - options = this._initOptions(x, y, options); - const listType = options.listType || 'bullet'; - const unit = Math.round(this._font.ascender / 1000 * this._fontSize); - const midLine = unit / 2; - const r = options.bulletRadius || unit / 3; - const indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2); - const itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2); - let level = 1; - const items = []; - const levels = []; - const numbers = []; - var flatten = function (list) { - let n = 1; - for (let i = 0; i < list.length; i++) { - const item = list[i]; - if (Array.isArray(item)) { - level++; - flatten(item); - level--; - } else { - items.push(item); - levels.push(level); - if (listType !== 'bullet') { - numbers.push(n++); - } - } - } - }; - flatten(list); - const drawListItem = function (listItem, i) { - const wrapper = new LineWrapper(this, options); - wrapper.on('line', this._line); - level = 1; - wrapper.once('firstLine', () => { - let item, itemType, labelType, bodyType; - if (options.structParent) { - if (options.structTypes) { - [itemType, labelType, bodyType] = options.structTypes; - } else { - [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody']; - } - } - if (itemType) { - item = this.struct(itemType); - options.structParent.add(item); - } else if (options.structParent) { - item = options.structParent; - } - let l; - if ((l = levels[i++]) !== level) { - const diff = itemIndent * (l - level); - this.x += diff; - wrapper.lineWidth -= diff; - level = l; - } - if (item && (labelType || bodyType)) { - item.add(this.struct(labelType || bodyType, [this.markStructureContent(labelType || bodyType)])); - } - switch (listType) { - case 'bullet': - this.circle(this.x - indent + r, this.y + midLine, r); - this.fill(); - break; - case 'numbered': - case 'lettered': - var text = formatListLabel(numbers[i - 1], listType); - this._fragment(text, this.x - indent, this.y, options); - break; - } - if (item && labelType && bodyType) { - item.add(this.struct(bodyType, [this.markStructureContent(bodyType)])); - } - if (item && item !== options.structParent) { - item.end(); - } - }); - wrapper.on('sectionStart', () => { - const pos = indent + itemIndent * (level - 1); - this.x += pos; - wrapper.lineWidth -= pos; - }); - wrapper.on('sectionEnd', () => { - const pos = indent + itemIndent * (level - 1); - this.x -= pos; - wrapper.lineWidth += pos; - }); - wrapper.wrap(listItem, options); - }; - for (let i = 0; i < items.length; i++) { - drawListItem.call(this, items[i], i); - } - return this; - }, - _initOptions(x = {}, y, options = {}) { - if (typeof x === 'object') { - options = x; - x = null; - } - const result = Object.assign({}, options); - if (this._textOptions) { - for (let key in this._textOptions) { - const val = this._textOptions[key]; - if (key !== 'continued') { - if (result[key] === undefined) { - result[key] = val; - } - } - } - } - if (x != null) { - this.x = x; - } - if (y != null) { - this.y = y; - } - if (result.lineBreak !== false) { - if (result.width == null) { - result.width = this.page.width - this.x - this.page.margins.right; - } - result.width = Math.max(result.width, 0); - } - if (!result.columns) { - result.columns = 0; - } - if (result.columnGap == null) { - result.columnGap = 18; - } - result.rotation = Number(options.rotation ?? 0) % 360; - if (result.rotation < 0) result.rotation += 360; - return result; - }, - _line(text, options = {}, wrapper) { - this._fragment(text, this.x, this.y, options); - if (wrapper) { - const lineGap = options.lineGap || this._lineGap || 0; - this.y += this.currentLineHeight(true) + lineGap; - } else { - this.x += this.widthOfString(text, options); - } - }, - _fragment(text, x, y, options) { - let dy, encoded, i, positions, textWidth, words; - text = `${text}`.replace(/\n/g, ''); - if (text.length === 0) { - return; - } - const align = options.align || 'left'; - let wordSpacing = options.wordSpacing || 0; - const characterSpacing = options.characterSpacing || 0; - const horizontalScaling = options.horizontalScaling || 100; - if (options.width) { - switch (align) { - case 'right': - textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); - x += options.lineWidth - textWidth; - break; - case 'center': - x += options.lineWidth / 2 - options.textWidth / 2; - break; - case 'justify': - words = text.trim().split(/\s+/); - textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - var spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - break; - } - } - if (typeof options.baseline === 'number') { - dy = -options.baseline; - } else { - switch (options.baseline) { - case 'svg-middle': - dy = 0.5 * this._font.xHeight; - break; - case 'middle': - case 'svg-central': - dy = 0.5 * (this._font.descender + this._font.ascender); - break; - case 'bottom': - case 'ideographic': - dy = this._font.descender; - break; - case 'alphabetic': - dy = 0; - break; - case 'mathematical': - dy = 0.5 * this._font.ascender; - break; - case 'hanging': - dy = 0.8 * this._font.ascender; - break; - case 'top': - dy = this._font.ascender; - break; - default: - dy = this._font.ascender; - } - dy = dy / 1000 * this._fontSize; - } - const renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); - if (options.link != null) { - this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); - } - if (options.goTo != null) { - this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (options.underline) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() - lineWidth; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - if (options.strike) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() / 2; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - this.save(); - if (options.oblique) { - let skew; - if (typeof options.oblique === 'number') { - skew = -Math.tan(options.oblique * Math.PI / 180); - } else { - skew = -0.25; - } - this.transform(1, 0, 0, 1, x, y); - this.transform(1, 0, skew, 1, -skew * dy, 0); - this.transform(1, 0, 0, 1, -x, -y); - } - this.transform(1, 0, 0, -1, 0, this.page.height); - y = this.page.height - y - dy; - if (this.page.fonts[this._font.id] == null) { - this.page.fonts[this._font.id] = this._font.ref(); - } - this.addContent('BT'); - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`); - const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; - if (mode) { - this.addContent(`${mode} Tr`); - } - if (characterSpacing) { - this.addContent(`${number(characterSpacing)} Tc`); - } - if (horizontalScaling !== 100) { - this.addContent(`${horizontalScaling} Tz`); - } - if (wordSpacing) { - words = text.trim().split(/\s+/); - wordSpacing += this.widthOfString(' ') + characterSpacing; - wordSpacing *= 1000 / this._fontSize; - encoded = []; - positions = []; - for (let word of words) { - const [encodedWord, positionsWord] = this._font.encode(word, options.features); - encoded = encoded.concat(encodedWord); - positions = positions.concat(positionsWord); - const space = {}; - const object = positions[positions.length - 1]; - for (let key in object) { - const val = object[key]; - space[key] = val; - } - space.xAdvance += wordSpacing; - positions[positions.length - 1] = space; - } - } else { - [encoded, positions] = this._font.encode(text, options.features); - } - const scale = this._fontSize / 1000; - const commands = []; - let last = 0; - let hadOffset = false; - const addSegment = cur => { - if (last < cur) { - const hex = encoded.slice(last, cur).join(''); - const advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; - commands.push(`<${hex}> ${number(-advance)}`); - } - last = cur; - }; - const flush = i => { - addSegment(i); - if (commands.length > 0) { - this.addContent(`[${commands.join(' ')}] TJ`); - commands.length = 0; - } - }; - for (i = 0; i < positions.length; i++) { - const pos = positions[i]; - if (pos.xOffset || pos.yOffset) { - flush(i); - this.addContent(`1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(y + pos.yOffset * scale)} Tm`); - flush(i + 1); - hadOffset = true; - } else { - if (hadOffset) { - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - hadOffset = false; - } - if (pos.xAdvance - pos.advanceWidth !== 0) { - addSegment(i + 1); - } - } - x += pos.xAdvance * scale; - } - flush(i); - this.addContent('ET'); - this.restore(); - } -}; - -const MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf]; -const COLOR_SPACE_MAP = { - 1: 'DeviceGray', - 3: 'DeviceRGB', - 4: 'DeviceCMYK' -}; -class JPEG { - constructor(data, label) { - let marker; - this.data = data; - this.label = label; - if (this.data.readUInt16BE(0) !== 0xffd8) { - throw 'SOI not found in JPEG'; - } - this.orientation = exif.fromBuffer(this.data).Orientation || 1; - let pos = 2; - while (pos < this.data.length) { - marker = this.data.readUInt16BE(pos); - pos += 2; - if (MARKERS.includes(marker)) { - break; - } - pos += this.data.readUInt16BE(pos); - } - if (!MARKERS.includes(marker)) { - throw 'Invalid JPEG.'; - } - pos += 2; - this.bits = this.data[pos++]; - this.height = this.data.readUInt16BE(pos); - pos += 2; - this.width = this.data.readUInt16BE(pos); - pos += 2; - const channels = this.data[pos++]; - this.colorSpace = COLOR_SPACE_MAP[channels]; - this.obj = null; - } - embed(document) { - if (this.obj) { - return; - } - this.obj = document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: this.bits, - Width: this.width, - Height: this.height, - ColorSpace: this.colorSpace, - Filter: 'DCTDecode' - }); - if (this.colorSpace === 'DeviceCMYK') { - this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; - } - this.obj.end(this.data); - return this.data = null; - } -} - -class PNGImage { - constructor(data, label) { - this.label = label; - this.image = new PNG(data); - this.width = this.image.width; - this.height = this.image.height; - this.imgData = this.image.imgData; - this.obj = null; - } - embed(document) { - let dataDecoded = false; - this.document = document; - if (this.obj) { - return; - } - const hasAlphaChannel = this.image.hasAlphaChannel; - const isInterlaced = this.image.interlaceMethod === 1; - this.obj = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits, - Width: this.width, - Height: this.height, - Filter: 'FlateDecode' - }); - if (!hasAlphaChannel) { - const params = this.document.ref({ - Predictor: isInterlaced ? 1 : 15, - Colors: this.image.colors, - BitsPerComponent: this.image.bits, - Columns: this.width - }); - this.obj.data['DecodeParms'] = params; - params.end(); - } - if (this.image.palette.length === 0) { - this.obj.data['ColorSpace'] = this.image.colorSpace; - } else { - const palette = this.document.ref(); - palette.end(Buffer.from(this.image.palette)); - this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette]; - } - if (this.image.transparency.grayscale != null) { - const val = this.image.transparency.grayscale; - this.obj.data['Mask'] = [val, val]; - } else if (this.image.transparency.rgb) { - const { - rgb - } = this.image.transparency; - const mask = []; - for (let x of rgb) { - mask.push(x, x); - } - this.obj.data['Mask'] = mask; - } else if (this.image.transparency.indexed) { - dataDecoded = true; - return this.loadIndexedAlphaChannel(); - } else if (hasAlphaChannel) { - dataDecoded = true; - return this.splitAlphaChannel(); - } - if (isInterlaced && !dataDecoded) { - return this.decodeData(); - } - this.finalize(); - } - finalize() { - if (this.alphaChannel) { - const sMask = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - Height: this.height, - Width: this.width, - BitsPerComponent: 8, - Filter: 'FlateDecode', - ColorSpace: 'DeviceGray', - Decode: [0, 1] - }); - sMask.end(this.alphaChannel); - this.obj.data['SMask'] = sMask; - } - this.obj.end(this.imgData); - this.image = null; - return this.imgData = null; - } - splitAlphaChannel() { - return this.image.decodePixels(pixels => { - let a, p; - const colorCount = this.image.colors; - const pixelCount = this.width * this.height; - const imgData = Buffer.alloc(pixelCount * colorCount); - const alphaChannel = Buffer.alloc(pixelCount); - let i = p = a = 0; - const len = pixels.length; - const skipByteCount = this.image.bits === 16 ? 1 : 0; - while (i < len) { - for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) { - imgData[p++] = pixels[i++]; - i += skipByteCount; - } - alphaChannel[a++] = pixels[i++]; - i += skipByteCount; - } - this.imgData = zlib.deflateSync(imgData); - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - loadIndexedAlphaChannel() { - const transparency = this.image.transparency.indexed; - return this.image.decodePixels(pixels => { - const alphaChannel = Buffer.alloc(this.width * this.height); - let i = 0; - for (let j = 0, end = pixels.length; j < end; j++) { - alphaChannel[i++] = transparency[pixels[j]]; - } - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - decodeData() { - this.image.decodePixels(pixels => { - this.imgData = zlib.deflateSync(pixels); - this.finalize(); - }); - } -} - -class PDFImage { - static open(src, label) { - let data; - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:.+?;base64,(.*)$/.exec(src); - if (match) { - data = Buffer.from(match[1], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - return; - } - } - } - if (data[0] === 0xff && data[1] === 0xd8) { - return new JPEG(data, label); - } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { - return new PNGImage(data, label); - } else { - throw new Error('Unknown image format.'); - } - } -} - -var ImagesMixin = { - initImages() { - this._imageRegistry = {}; - this._imageCount = 0; - }, - image(src, x, y, options = {}) { - let bh, bp, bw, image, ip, left, left1, originX, originY; - if (typeof x === 'object') { - options = x; - x = null; - } - const ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation; - const inDocumentFlow = typeof y !== 'number'; - x = (left = x != null ? x : options.x) != null ? left : this.x; - y = (left1 = y != null ? y : options.y) != null ? left1 : this.y; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - if (src.width && src.height) { - image = src; - } else { - image = this.openImage(src); - } - } - if (!image.obj) { - image.embed(this); - } - if (this.page.xobjects[image.label] == null) { - this.page.xobjects[image.label] = image.obj; - } - let { - width, - height - } = image; - if (!ignoreOrientation && image.orientation > 4) { - [width, height] = [height, width]; - } - let w = options.width || width; - let h = options.height || height; - if (options.width && !options.height) { - const wp = w / width; - w = width * wp; - h = height * wp; - } else if (options.height && !options.width) { - const hp = h / height; - w = width * hp; - h = height * hp; - } else if (options.scale) { - w = width * options.scale; - h = height * options.scale; - } else if (options.fit) { - [bw, bh] = options.fit; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - w = bw; - h = bw / ip; - } else { - h = bh; - w = bh * ip; - } - } else if (options.cover) { - [bw, bh] = options.cover; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - h = bh; - w = bh * ip; - } else { - w = bw; - h = bw / ip; - } - } - if (options.fit || options.cover) { - if (options.align === 'center') { - x = x + bw / 2 - w / 2; - } else if (options.align === 'right') { - x = x + bw - w; - } - if (options.valign === 'center') { - y = y + bh / 2 - h / 2; - } else if (options.valign === 'bottom') { - y = y + bh - h; - } - } - let rotateAngle = 0; - let xTransform = x; - let yTransform = y; - let hTransform = h; - let wTransform = w; - if (!ignoreOrientation) { - switch (image.orientation) { - default: - case 1: - hTransform = -h; - yTransform += h; - break; - case 2: - wTransform = -w; - hTransform = -h; - xTransform += w; - yTransform += h; - break; - case 3: - originX = x; - originY = y; - hTransform = -h; - xTransform -= w; - rotateAngle = 180; - break; - case 4: - break; - case 5: - originX = x; - originY = y; - wTransform = h; - hTransform = w; - yTransform -= hTransform; - rotateAngle = 90; - break; - case 6: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - rotateAngle = 90; - break; - case 7: - originX = x; - originY = y; - hTransform = -w; - wTransform = -h; - xTransform += h; - rotateAngle = 90; - break; - case 8: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - xTransform -= h; - yTransform += w; - rotateAngle = -90; - break; - } - } else { - hTransform = -h; - yTransform += h; - } - if (options.link != null) { - this.link(x, y, w, h, options.link); - } - if (options.goTo != null) { - this.goTo(x, y, w, h, options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (inDocumentFlow) { - this.y += h; - } - this.save(); - if (rotateAngle) { - this.rotate(rotateAngle, { - origin: [originX, originY] - }); - } - this.transform(wTransform, 0, 0, hTransform, xTransform, yTransform); - this.addContent(`/${image.label} Do`); - this.restore(); - return this; - }, - openImage(src) { - let image; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - image = PDFImage.open(src, `I${++this._imageCount}`); - if (typeof src === 'string') { - this._imageRegistry[src] = image; - } - } - return image; - } -}; - -var AnnotationsMixin = { - annotate(x, y, w, h, options) { - options.Type = 'Annot'; - options.Rect = this._convertRect(x, y, w, h); - options.Border = [0, 0, 0]; - if (options.Subtype === 'Link' && typeof options.F === 'undefined') { - options.F = 1 << 2; - } - if (options.Subtype !== 'Link') { - if (options.C == null) { - options.C = this._normalizeColor(options.color || [0, 0, 0]); - } - } - delete options.color; - if (typeof options.Dest === 'string') { - options.Dest = new String(options.Dest); - } - for (let key in options) { - const val = options[key]; - options[key[0].toUpperCase() + key.slice(1)] = val; - } - const ref = this.ref(options); - this.page.annotations.push(ref); - ref.end(); - return this; - }, - note(x, y, w, h, contents, options = {}) { - options.Subtype = 'Text'; - options.Contents = new String(contents); - if (options.Name == null) { - options.Name = 'Comment'; - } - if (options.color == null) { - options.color = [243, 223, 92]; - } - return this.annotate(x, y, w, h, options); - }, - goTo(x, y, w, h, name, options = {}) { - options.Subtype = 'Link'; - options.A = this.ref({ - S: 'GoTo', - D: new String(name) - }); - options.A.end(); - return this.annotate(x, y, w, h, options); - }, - link(x, y, w, h, url, options = {}) { - options.Subtype = 'Link'; - if (typeof url === 'number') { - const pages = this._root.data.Pages.data; - if (url >= 0 && url < pages.Kids.length) { - options.A = this.ref({ - S: 'GoTo', - D: [pages.Kids[url], 'XYZ', null, null, null] - }); - options.A.end(); - } else { - throw new Error(`The document has no page ${url}`); - } - } else { - options.A = this.ref({ - S: 'URI', - URI: new String(url) - }); - options.A.end(); - } - return this.annotate(x, y, w, h, options); - }, - _markup(x, y, w, h, options = {}) { - const [x1, y1, x2, y2] = this._convertRect(x, y, w, h); - options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - highlight(x, y, w, h, options = {}) { - options.Subtype = 'Highlight'; - if (options.color == null) { - options.color = [241, 238, 148]; - } - return this._markup(x, y, w, h, options); - }, - underline(x, y, w, h, options = {}) { - options.Subtype = 'Underline'; - return this._markup(x, y, w, h, options); - }, - strike(x, y, w, h, options = {}) { - options.Subtype = 'StrikeOut'; - return this._markup(x, y, w, h, options); - }, - lineAnnotation(x1, y1, x2, y2, options = {}) { - options.Subtype = 'Line'; - options.Contents = new String(); - options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; - return this.annotate(x1, y1, x2, y2, options); - }, - rectAnnotation(x, y, w, h, options = {}) { - options.Subtype = 'Square'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - ellipseAnnotation(x, y, w, h, options = {}) { - options.Subtype = 'Circle'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - textAnnotation(x, y, w, h, text, options = {}) { - options.Subtype = 'FreeText'; - options.Contents = new String(text); - options.DA = new String(); - return this.annotate(x, y, w, h, options); - }, - fileAnnotation(x, y, w, h, file = {}, options = {}) { - const filespec = this.file(file.src, Object.assign({ - hidden: true - }, file)); - options.Subtype = 'FileAttachment'; - options.FS = filespec; - if (options.Contents) { - options.Contents = new String(options.Contents); - } else if (filespec.data.Desc) { - options.Contents = filespec.data.Desc; - } - return this.annotate(x, y, w, h, options); - }, - _convertRect(x1, y1, w, h) { - let y2 = y1; - y1 += h; - let x2 = x1 + w; - const [m0, m1, m2, m3, m4, m5] = this._ctm; - x1 = m0 * x1 + m2 * y1 + m4; - y1 = m1 * x1 + m3 * y1 + m5; - x2 = m0 * x2 + m2 * y2 + m4; - y2 = m1 * x2 + m3 * y2 + m5; - return [x1, y1, x2, y2]; - } -}; - -class PDFOutline { - constructor(document, parent, title, dest, options = { - expanded: false - }) { - this.document = document; - this.options = options; - this.outlineData = {}; - if (dest !== null) { - this.outlineData['Dest'] = [dest.dictionary, 'Fit']; - } - if (parent !== null) { - this.outlineData['Parent'] = parent; - } - if (title !== null) { - this.outlineData['Title'] = new String(title); - } - this.dictionary = this.document.ref(this.outlineData); - this.children = []; - } - addItem(title, options = { - expanded: false - }) { - const result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options); - this.children.push(result); - return result; - } - endOutline() { - if (this.children.length > 0) { - if (this.options.expanded) { - this.outlineData.Count = this.children.length; - } - const first = this.children[0], - last = this.children[this.children.length - 1]; - this.outlineData.First = first.dictionary; - this.outlineData.Last = last.dictionary; - for (let i = 0, len = this.children.length; i < len; i++) { - const child = this.children[i]; - if (i > 0) { - child.outlineData.Prev = this.children[i - 1].dictionary; - } - if (i < this.children.length - 1) { - child.outlineData.Next = this.children[i + 1].dictionary; - } - child.endOutline(); - } - } - return this.dictionary.end(); - } -} - -var OutlineMixin = { - initOutline() { - this.outline = new PDFOutline(this, null, null, null); - }, - endOutline() { - this.outline.endOutline(); - if (this.outline.children.length > 0) { - this._root.data.Outlines = this.outline.dictionary; - return this._root.data.PageMode = 'UseOutlines'; - } - } -}; - -class PDFStructureContent { - constructor(pageRef, mcid) { - this.refs = [{ - pageRef, - mcid - }]; - } - push(structContent) { - structContent.refs.forEach(ref => this.refs.push(ref)); - } -} - -class PDFStructureElement { - constructor(document, type, options = {}, children = null) { - this.document = document; - this._attached = false; - this._ended = false; - this._flushed = false; - this.dictionary = document.ref({ - S: type - }); - const data = this.dictionary.data; - if (Array.isArray(options) || this._isValidChild(options)) { - children = options; - options = {}; - } - if (typeof options.title !== 'undefined') { - data.T = new String(options.title); - } - if (typeof options.lang !== 'undefined') { - data.Lang = new String(options.lang); - } - if (typeof options.alt !== 'undefined') { - data.Alt = new String(options.alt); - } - if (typeof options.expanded !== 'undefined') { - data.E = new String(options.expanded); - } - if (typeof options.actual !== 'undefined') { - data.ActualText = new String(options.actual); - } - this._children = []; - if (children) { - if (!Array.isArray(children)) { - children = [children]; - } - children.forEach(child => this.add(child)); - this.end(); - } - } - add(child) { - if (this._ended) { - throw new Error(`Cannot add child to already-ended structure element`); - } - if (!this._isValidChild(child)) { - throw new Error(`Invalid structure element child`); - } - if (child instanceof PDFStructureElement) { - child.setParent(this.dictionary); - if (this._attached) { - child.setAttached(); - } - } - if (child instanceof PDFStructureContent) { - this._addContentToParentTree(child); - } - if (typeof child === 'function' && this._attached) { - child = this._contentForClosure(child); - } - this._children.push(child); - return this; - } - _addContentToParentTree(content) { - content.refs.forEach(({ - pageRef, - mcid - }) => { - const pageStructParents = this.document.getStructParentTree().get(pageRef.data.StructParents); - pageStructParents[mcid] = this.dictionary; - }); - } - setParent(parentRef) { - if (this.dictionary.data.P) { - throw new Error(`Structure element added to more than one parent`); - } - this.dictionary.data.P = parentRef; - this._flush(); - } - setAttached() { - if (this._attached) { - return; - } - this._children.forEach((child, index) => { - if (child instanceof PDFStructureElement) { - child.setAttached(); - } - if (typeof child === 'function') { - this._children[index] = this._contentForClosure(child); - } - }); - this._attached = true; - this._flush(); - } - end() { - if (this._ended) { - return; - } - this._children.filter(child => child instanceof PDFStructureElement).forEach(child => child.end()); - this._ended = true; - this._flush(); - } - _isValidChild(child) { - return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function'; - } - _contentForClosure(closure) { - const content = this.document.markStructureContent(this.dictionary.data.S); - closure(); - this.document.endMarkedContent(); - this._addContentToParentTree(content); - return content; - } - _isFlushable() { - if (!this.dictionary.data.P || !this._ended) { - return false; - } - return this._children.every(child => { - if (typeof child === 'function') { - return false; - } - if (child instanceof PDFStructureElement) { - return child._isFlushable(); - } - return true; - }); - } - _flush() { - if (this._flushed || !this._isFlushable()) { - return; - } - this.dictionary.data.K = []; - this._children.forEach(child => this._flushChild(child)); - this.dictionary.end(); - this._children = []; - this.dictionary.data.K = null; - this._flushed = true; - } - _flushChild(child) { - if (child instanceof PDFStructureElement) { - this.dictionary.data.K.push(child.dictionary); - } - if (child instanceof PDFStructureContent) { - child.refs.forEach(({ - pageRef, - mcid - }) => { - if (!this.dictionary.data.Pg) { - this.dictionary.data.Pg = pageRef; - } - if (this.dictionary.data.Pg === pageRef) { - this.dictionary.data.K.push(mcid); - } else { - this.dictionary.data.K.push({ - Type: 'MCR', - Pg: pageRef, - MCID: mcid - }); - } - }); - } - } -} - -class PDFNumberTree extends PDFTree { - _compareKeys(a, b) { - return parseInt(a) - parseInt(b); - } - _keysName() { - return 'Nums'; - } - _dataForKey(k) { - return parseInt(k); - } -} - -var MarkingsMixin = { - initMarkings(options) { - this.structChildren = []; - if (options.tagged) { - this.getMarkInfoDictionary().data.Marked = true; - this.getStructTreeRoot(); - } - }, - markContent(tag, options = null) { - if (tag === 'Artifact' || options && options.mcid) { - let toClose = 0; - this.page.markings.forEach(marking => { - if (toClose || marking.structContent || marking.tag === 'Artifact') { - toClose++; - } - }); - while (toClose--) { - this.endMarkedContent(); - } - } - if (!options) { - this.page.markings.push({ - tag - }); - this.addContent(`/${tag} BMC`); - return this; - } - this.page.markings.push({ - tag, - options - }); - const dictionary = {}; - if (typeof options.mcid !== 'undefined') { - dictionary.MCID = options.mcid; - } - if (tag === 'Artifact') { - if (typeof options.type === 'string') { - dictionary.Type = options.type; - } - if (Array.isArray(options.bbox)) { - dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]]; - } - if (Array.isArray(options.attached) && options.attached.every(val => typeof val === 'string')) { - dictionary.Attached = options.attached; - } - } - if (tag === 'Span') { - if (options.lang) { - dictionary.Lang = new String(options.lang); - } - if (options.alt) { - dictionary.Alt = new String(options.alt); - } - if (options.expanded) { - dictionary.E = new String(options.expanded); - } - if (options.actual) { - dictionary.ActualText = new String(options.actual); - } - } - this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`); - return this; - }, - markStructureContent(tag, options = {}) { - const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey); - const mcid = pageStructParents.length; - pageStructParents.push(null); - this.markContent(tag, { - ...options, - mcid - }); - const structContent = new PDFStructureContent(this.page.dictionary, mcid); - this.page.markings.slice(-1)[0].structContent = structContent; - return structContent; - }, - endMarkedContent() { - this.page.markings.pop(); - this.addContent('EMC'); - return this; - }, - struct(type, options = {}, children = null) { - return new PDFStructureElement(this, type, options, children); - }, - addStructure(structElem) { - const structTreeRoot = this.getStructTreeRoot(); - structElem.setParent(structTreeRoot); - structElem.setAttached(); - this.structChildren.push(structElem); - if (!structTreeRoot.data.K) { - structTreeRoot.data.K = []; - } - structTreeRoot.data.K.push(structElem.dictionary); - return this; - }, - initPageMarkings(pageMarkings) { - pageMarkings.forEach(marking => { - if (marking.structContent) { - const structContent = marking.structContent; - const newStructContent = this.markStructureContent(marking.tag, marking.options); - structContent.push(newStructContent); - this.page.markings.slice(-1)[0].structContent = structContent; - } else { - this.markContent(marking.tag, marking.options); - } - }); - }, - endPageMarkings(page) { - const pageMarkings = page.markings; - pageMarkings.forEach(() => page.write('EMC')); - page.markings = []; - return pageMarkings; - }, - getMarkInfoDictionary() { - if (!this._root.data.MarkInfo) { - this._root.data.MarkInfo = this.ref({}); - } - return this._root.data.MarkInfo; - }, - hasMarkInfoDictionary() { - return !!this._root.data.MarkInfo; - }, - getStructTreeRoot() { - if (!this._root.data.StructTreeRoot) { - this._root.data.StructTreeRoot = this.ref({ - Type: 'StructTreeRoot', - ParentTree: new PDFNumberTree(), - ParentTreeNextKey: 0 - }); - } - return this._root.data.StructTreeRoot; - }, - getStructParentTree() { - return this.getStructTreeRoot().data.ParentTree; - }, - createStructParentTreeNextKey() { - this.getMarkInfoDictionary(); - const structTreeRoot = this.getStructTreeRoot(); - const key = structTreeRoot.data.ParentTreeNextKey++; - structTreeRoot.data.ParentTree.add(key, []); - return key; - }, - endMarkings() { - const structTreeRoot = this._root.data.StructTreeRoot; - if (structTreeRoot) { - structTreeRoot.end(); - this.structChildren.forEach(structElem => structElem.end()); - } - if (this._root.data.MarkInfo) { - this._root.data.MarkInfo.end(); - } - } -}; - -const FIELD_FLAGS = { - readOnly: 1, - required: 2, - noExport: 4, - multiline: 0x1000, - password: 0x2000, - toggleToOffButton: 0x4000, - radioButton: 0x8000, - pushButton: 0x10000, - combo: 0x20000, - edit: 0x40000, - sort: 0x80000, - multiSelect: 0x200000, - noSpell: 0x400000 -}; -const FIELD_JUSTIFY = { - left: 0, - center: 1, - right: 2 -}; -const VALUE_MAP = { - value: 'V', - defaultValue: 'DV' -}; -const FORMAT_SPECIAL = { - zip: '0', - zipPlus4: '1', - zip4: '1', - phone: '2', - ssn: '3' -}; -const FORMAT_DEFAULT = { - number: { - nDec: 0, - sepComma: false, - negStyle: 'MinusBlack', - currency: '', - currencyPrepend: true - }, - percent: { - nDec: 0, - sepComma: false - } -}; -var AcroFormMixin = { - initForm() { - if (!this._font) { - throw new Error('Must set a font before calling initForm method'); - } - this._acroform = { - fonts: {}, - defaultFont: this._font.name - }; - this._acroform.fonts[this._font.id] = this._font.ref(); - let data = { - Fields: [], - NeedAppearances: true, - DA: new String(`/${this._font.id} 0 Tf 0 g`), - DR: { - Font: {} - } - }; - data.DR.Font[this._font.id] = this._font.ref(); - const AcroForm = this.ref(data); - this._root.data.AcroForm = AcroForm; - return this; - }, - endAcroForm() { - if (this._root.data.AcroForm) { - if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) { - throw new Error('No fonts specified for PDF form'); - } - let fontDict = this._root.data.AcroForm.data.DR.Font; - Object.keys(this._acroform.fonts).forEach(name => { - fontDict[name] = this._acroform.fonts[name]; - }); - this._root.data.AcroForm.data.Fields.forEach(fieldRef => { - this._endChild(fieldRef); - }); - this._root.data.AcroForm.end(); - } - return this; - }, - _endChild(ref) { - if (Array.isArray(ref.data.Kids)) { - ref.data.Kids.forEach(childRef => { - this._endChild(childRef); - }); - ref.end(); - } - return this; - }, - formField(name, options = {}) { - let fieldDict = this._fieldDict(name, null, options); - let fieldRef = this.ref(fieldDict); - this._addToParent(fieldRef); - return fieldRef; - }, - formAnnotation(name, type, x, y, w, h, options = {}) { - let fieldDict = this._fieldDict(name, type, options); - fieldDict.Subtype = 'Widget'; - if (fieldDict.F === undefined) { - fieldDict.F = 4; - } - this.annotate(x, y, w, h, fieldDict); - let annotRef = this.page.annotations[this.page.annotations.length - 1]; - return this._addToParent(annotRef); - }, - formText(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'text', x, y, w, h, options); - }, - formPushButton(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'pushButton', x, y, w, h, options); - }, - formCombo(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'combo', x, y, w, h, options); - }, - formList(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'list', x, y, w, h, options); - }, - formRadioButton(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'radioButton', x, y, w, h, options); - }, - formCheckbox(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'checkbox', x, y, w, h, options); - }, - _addToParent(fieldRef) { - let parent = fieldRef.data.Parent; - if (parent) { - if (!parent.data.Kids) { - parent.data.Kids = []; - } - parent.data.Kids.push(fieldRef); - } else { - this._root.data.AcroForm.data.Fields.push(fieldRef); - } - return this; - }, - _fieldDict(name, type, options = {}) { - if (!this._acroform) { - throw new Error('Call document.initForm() method before adding form elements to document'); - } - let opts = Object.assign({}, options); - if (type !== null) { - opts = this._resolveType(type, options); - } - opts = this._resolveFlags(opts); - opts = this._resolveJustify(opts); - opts = this._resolveFont(opts); - opts = this._resolveStrings(opts); - opts = this._resolveColors(opts); - opts = this._resolveFormat(opts); - opts.T = new String(name); - if (opts.parent) { - opts.Parent = opts.parent; - delete opts.parent; - } - return opts; - }, - _resolveType(type, opts) { - if (type === 'text') { - opts.FT = 'Tx'; - } else if (type === 'pushButton') { - opts.FT = 'Btn'; - opts.pushButton = true; - } else if (type === 'radioButton') { - opts.FT = 'Btn'; - opts.radioButton = true; - } else if (type === 'checkbox') { - opts.FT = 'Btn'; - } else if (type === 'combo') { - opts.FT = 'Ch'; - opts.combo = true; - } else if (type === 'list') { - opts.FT = 'Ch'; - } else { - throw new Error(`Invalid form annotation type '${type}'`); - } - return opts; - }, - _resolveFormat(opts) { - const f = opts.format; - if (f && f.type) { - let fnKeystroke; - let fnFormat; - let params = ''; - if (FORMAT_SPECIAL[f.type] !== undefined) { - fnKeystroke = `AFSpecial_Keystroke`; - fnFormat = `AFSpecial_Format`; - params = FORMAT_SPECIAL[f.type]; - } else { - let format = f.type.charAt(0).toUpperCase() + f.type.slice(1); - fnKeystroke = `AF${format}_Keystroke`; - fnFormat = `AF${format}_Format`; - if (f.type === 'date') { - fnKeystroke += 'Ex'; - params = String(f.param); - } else if (f.type === 'time') { - params = String(f.param); - } else if (f.type === 'number') { - let p = Object.assign({}, FORMAT_DEFAULT.number, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(',')); - } else if (f.type === 'percent') { - let p = Object.assign({}, FORMAT_DEFAULT.percent, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(',')); - } - } - opts.AA = opts.AA ? opts.AA : {}; - opts.AA.K = { - S: 'JavaScript', - JS: new String(`${fnKeystroke}(${params});`) - }; - opts.AA.F = { - S: 'JavaScript', - JS: new String(`${fnFormat}(${params});`) - }; - } - delete opts.format; - return opts; - }, - _resolveColors(opts) { - let color = this._normalizeColor(opts.backgroundColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BG = color; - } - color = this._normalizeColor(opts.borderColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BC = color; - } - delete opts.backgroundColor; - delete opts.borderColor; - return opts; - }, - _resolveFlags(options) { - let result = 0; - Object.keys(options).forEach(key => { - if (FIELD_FLAGS[key]) { - if (options[key]) { - result |= FIELD_FLAGS[key]; - } - delete options[key]; - } - }); - if (result !== 0) { - options.Ff = options.Ff ? options.Ff : 0; - options.Ff |= result; - } - return options; - }, - _resolveJustify(options) { - let result = 0; - if (options.align !== undefined) { - if (typeof FIELD_JUSTIFY[options.align] === 'number') { - result = FIELD_JUSTIFY[options.align]; - } - delete options.align; - } - if (result !== 0) { - options.Q = result; - } - return options; - }, - _resolveFont(options) { - if (this._acroform.fonts[this._font.id] == null) { - this._acroform.fonts[this._font.id] = this._font.ref(); - } - if (this._acroform.defaultFont !== this._font.name) { - options.DR = { - Font: {} - }; - const fontSize = options.fontSize || 0; - options.DR.Font[this._font.id] = this._font.ref(); - options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`); - } - return options; - }, - _resolveStrings(options) { - let select = []; - function appendChoices(a) { - if (Array.isArray(a)) { - for (let idx = 0; idx < a.length; idx++) { - if (typeof a[idx] === 'string') { - select.push(new String(a[idx])); - } else { - select.push(a[idx]); - } - } - } - } - appendChoices(options.Opt); - if (options.select) { - appendChoices(options.select); - delete options.select; - } - if (select.length) { - options.Opt = select; - } - Object.keys(VALUE_MAP).forEach(key => { - if (options[key] !== undefined) { - options[VALUE_MAP[key]] = options[key]; - delete options[key]; - } - }); - ['V', 'DV'].forEach(key => { - if (typeof options[key] === 'string') { - options[key] = new String(options[key]); - } - }); - if (options.MK && options.MK.CA) { - options.MK.CA = new String(options.MK.CA); - } - if (options.label) { - options.MK = options.MK ? options.MK : {}; - options.MK.CA = new String(options.label); - delete options.label; - } - return options; - } -}; - -var AttachmentsMixin = { - file(src, options = {}) { - options.name = options.name || src; - options.relationship = options.relationship || 'Unspecified'; - const refBody = { - Type: 'EmbeddedFile', - Params: {} - }; - let data; - if (!src) { - throw new Error('No src specified'); - } - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:(.*?);base64,(.*)$/.exec(src); - if (match) { - if (match[1]) { - refBody.Subtype = match[1].replace('/', '#2F'); - } - data = Buffer.from(match[2], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - throw new Error(`Could not read contents of file at filepath ${src}`); - } - const { - birthtime, - ctime - } = fs.statSync(src); - refBody.Params.CreationDate = birthtime; - refBody.Params.ModDate = ctime; - } - } - if (options.creationDate instanceof Date) { - refBody.Params.CreationDate = options.creationDate; - } - if (options.modifiedDate instanceof Date) { - refBody.Params.ModDate = options.modifiedDate; - } - if (options.type) { - refBody.Subtype = options.type.replace('/', '#2F'); - } - const checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data))); - refBody.Params.CheckSum = new String(checksum); - refBody.Params.Size = data.byteLength; - let ref; - if (!this._fileRegistry) this._fileRegistry = {}; - let file = this._fileRegistry[options.name]; - if (file && isEqual(refBody, file)) { - ref = file.ref; - } else { - ref = this.ref(refBody); - ref.end(data); - this._fileRegistry[options.name] = { - ...refBody, - ref - }; - } - const fileSpecBody = { - Type: 'Filespec', - AFRelationship: options.relationship, - F: new String(options.name), - EF: { - F: ref - }, - UF: new String(options.name) - }; - if (options.description) { - fileSpecBody.Desc = new String(options.description); - } - const filespec = this.ref(fileSpecBody); - filespec.end(); - if (!options.hidden) { - this.addNamedEmbeddedFile(options.name, filespec); - } - if (this._root.data.AF) { - this._root.data.AF.push(filespec); - } else { - this._root.data.AF = [filespec]; - } - return filespec; - } -}; -function isEqual(a, b) { - return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate.getTime() === b.Params.CreationDate.getTime() && (a.Params.ModDate === undefined && b.Params.ModDate === undefined || a.Params.ModDate.getTime() === b.Params.ModDate.getTime()); -} - -var PDFA = { - initPDFA(pSubset) { - if (pSubset.charAt(pSubset.length - 3) === '-') { - this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase(); - this.subset = parseInt(pSubset.charAt(pSubset.length - 2)); - } else { - this.subset_conformance = 'B'; - this.subset = parseInt(pSubset.charAt(pSubset.length - 1)); - } - }, - endSubset() { - this._addPdfaMetadata(); - this._addColorOutputIntent(); - }, - _addColorOutputIntent() { - const iccProfile = fs.readFileSync(`${__dirname}/data/sRGB_IEC61966_2_1.icc`); - const colorProfileRef = this.ref({ - Length: iccProfile.length, - N: 3 - }); - colorProfileRef.write(iccProfile); - colorProfileRef.end(); - const intentRef = this.ref({ - Type: 'OutputIntent', - S: 'GTS_PDFA1', - Info: new String('sRGB IEC61966-2.1'), - OutputConditionIdentifier: new String('sRGB IEC61966-2.1'), - DestOutputProfile: colorProfileRef - }); - intentRef.end(); - this._root.data.OutputIntents = [intentRef]; - }, - _getPdfaid() { - return ` - - ${this.subset} - ${this.subset_conformance} - - `; - }, - _addPdfaMetadata() { - this.appendXML(this._getPdfaid()); - } -}; - -var PDFUA = { - initPDFUA() { - this.subset = 1; - }, - endSubset() { - this._addPdfuaMetadata(); - }, - _addPdfuaMetadata() { - this.appendXML(this._getPdfuaid()); - }, - _getPdfuaid() { - return ` - - ${this.subset} - - `; - } -}; - -var SubsetMixin = { - _importSubset(subset) { - Object.assign(this, subset); - }, - initSubset(options) { - switch (options.subset) { - case 'PDF/A-1': - case 'PDF/A-1a': - case 'PDF/A-1b': - case 'PDF/A-2': - case 'PDF/A-2a': - case 'PDF/A-2b': - case 'PDF/A-3': - case 'PDF/A-3a': - case 'PDF/A-3b': - this._importSubset(PDFA); - this.initPDFA(options.subset); - break; - case 'PDF/UA': - this._importSubset(PDFUA); - this.initPDFUA(); - break; - } - } -}; - -const ROW_FIELDS = ['height', 'minHeight', 'maxHeight']; -const COLUMN_FIELDS = ['width', 'minWidth', 'maxWidth']; -function memoize(fn, maxSize) { - const cache = new Map(); - return function (...args) { - const key = args[0]; - if (!cache.has(key)) { - cache.set(key, fn(...args)); - if (cache.size > maxSize) cache.delete(cache.keys().next()); - } - return cache.get(key); - }; -} -function isObject(item) { - return item && typeof item === 'object' && !Array.isArray(item); -} -function deepMerge(target, ...sources) { - if (!isObject(target)) return target; - target = deepClone(target); - for (const source of sources) { - if (isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!(key in target)) target[key] = {}; - target[key] = deepMerge(target[key], source[key]); - } else if (source[key] !== undefined) { - target[key] = deepClone(source[key]); - } - } - } - } - return target; -} -function deepClone(obj) { - let result = obj; - if (obj && typeof obj == 'object') { - result = Array.isArray(obj) ? [] : {}; - for (const key in obj) result[key] = deepClone(obj[key]); - } - return result; -} - -function normalizedDefaultStyle(defaultStyleInternal) { - let defaultStyle = defaultStyleInternal; - if (typeof defaultStyle !== 'object') defaultStyle = { - text: defaultStyle - }; - const defaultRowStyle = Object.fromEntries(Object.entries(defaultStyle).filter(([k]) => ROW_FIELDS.includes(k))); - const defaultColStyle = Object.fromEntries(Object.entries(defaultStyle).filter(([k]) => COLUMN_FIELDS.includes(k))); - defaultStyle.padding = normalizeSides(defaultStyle.padding); - defaultStyle.border = normalizeSides(defaultStyle.border); - defaultStyle.borderColor = normalizeSides(defaultStyle.borderColor); - defaultStyle.align = normalizeAlignment(defaultStyle.align); - return { - defaultStyle, - defaultRowStyle, - defaultColStyle - }; -} -function normalizedRowStyle(defaultRowStyle, rowStyleInternal, i) { - let rowStyle = rowStyleInternal(i); - if (rowStyle == null || typeof rowStyle !== 'object') { - rowStyle = { - height: rowStyle - }; - } - rowStyle.padding = normalizeSides(rowStyle.padding); - rowStyle.border = normalizeSides(rowStyle.border); - rowStyle.borderColor = normalizeSides(rowStyle.borderColor); - rowStyle.align = normalizeAlignment(rowStyle.align); - rowStyle = deepMerge(defaultRowStyle, rowStyle); - const document = this.document; - const page = document.page; - const contentHeight = page.contentHeight; - if (rowStyle.height == null || rowStyle.height === 'auto') { - rowStyle.height = 'auto'; - } else { - rowStyle.height = document.sizeToPoint(rowStyle.height, 0, page, contentHeight); - } - rowStyle.minHeight = document.sizeToPoint(rowStyle.minHeight, 0, page, contentHeight); - rowStyle.maxHeight = document.sizeToPoint(rowStyle.maxHeight, 0, page, contentHeight); - return rowStyle; -} -function normalizedColumnStyle(defaultColStyle, colStyleInternal, i) { - let colStyle = colStyleInternal(i); - if (colStyle == null || typeof colStyle !== 'object') { - colStyle = { - width: colStyle - }; - } - colStyle.padding = normalizeSides(colStyle.padding); - colStyle.border = normalizeSides(colStyle.border); - colStyle.borderColor = normalizeSides(colStyle.borderColor); - colStyle.align = normalizeAlignment(colStyle.align); - colStyle = deepMerge(defaultColStyle, colStyle); - if (colStyle.width == null || colStyle.width === '*') { - colStyle.width = '*'; - } else { - colStyle.width = this.document.sizeToPoint(colStyle.width, 0, this.document.page, this._maxWidth); - } - colStyle.minWidth = this.document.sizeToPoint(colStyle.minWidth, 0, this.document.page, this._maxWidth); - colStyle.maxWidth = this.document.sizeToPoint(colStyle.maxWidth, 0, this.document.page, this._maxWidth); - return colStyle; -} -function normalizeAlignment(align) { - return align == null || typeof align === 'string' ? { - x: align, - y: align - } : align; -} - -function normalizeTable() { - const doc = this.document; - const opts = this.opts; - let index = doc._tableIndex++; - this._id = new String(opts.id ?? `table-${index}`); - this._position = { - x: doc.sizeToPoint(opts.position?.x, doc.x), - y: doc.sizeToPoint(opts.position?.y, doc.y) - }; - this._maxWidth = doc.sizeToPoint(opts.maxWidth, doc.page.width - doc.page.margins.right - this._position.x); - const { - defaultStyle, - defaultColStyle, - defaultRowStyle - } = normalizedDefaultStyle(opts.defaultStyle); - this._defaultStyle = defaultStyle; - let colStyle; - if (opts.columnStyles) { - if (Array.isArray(opts.columnStyles)) { - colStyle = i => opts.columnStyles[i]; - } else if (typeof opts.columnStyles === 'function') { - colStyle = memoize(i => opts.columnStyles(i), Infinity); - } else if (typeof opts.columnStyles === 'object') { - colStyle = () => opts.columnStyles; - } - } - if (!colStyle) colStyle = () => ({}); - this._colStyle = normalizedColumnStyle.bind(this, defaultColStyle, colStyle); - let rowStyle; - if (opts.rowStyles) { - if (Array.isArray(opts.rowStyles)) { - rowStyle = i => opts.rowStyles[i]; - } else if (typeof opts.rowStyles === 'function') { - rowStyle = memoize(i => opts.rowStyles(i), 10); - } else if (typeof opts.rowStyles === 'object') { - rowStyle = () => opts.rowStyles; - } - } - if (!rowStyle) rowStyle = () => ({}); - this._rowStyle = normalizedRowStyle.bind(this, defaultRowStyle, rowStyle); -} -function normalizeText(text) { - if (text != null) text = `${text}`; - return text; -} -function normalizeCell(cell, rowIndex, colIndex) { - const colStyle = this._colStyle(colIndex); - let rowStyle = this._rowStyle(rowIndex); - const font = deepMerge({}, colStyle.font, rowStyle.font, cell.font); - const customFont = Object.values(font).filter(v => v != null).length > 0; - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (customFont) { - if (font.src) doc.font(font.src, font.family); - if (font.size) doc.fontSize(font.size); - rowStyle = this._rowStyle(rowIndex); - } - cell.padding = normalizeSides(cell.padding); - cell.border = normalizeSides(cell.border); - cell.borderColor = normalizeSides(cell.borderColor); - const config = deepMerge(this._defaultStyle, colStyle, rowStyle, cell); - config.rowIndex = rowIndex; - config.colIndex = colIndex; - config.font = font ?? {}; - config.customFont = customFont; - config.text = normalizeText(config.text); - config.rowSpan = config.rowSpan ?? 1; - config.colSpan = config.colSpan ?? 1; - config.padding = normalizeSides(config.padding, '0.25em', x => doc.sizeToPoint(x, '0.25em')); - config.border = normalizeSides(config.border, 1, x => doc.sizeToPoint(x, 1)); - config.borderColor = normalizeSides(config.borderColor, 'black', x => x ?? 'black'); - config.align = normalizeAlignment(config.align); - config.align.x = config.align.x ?? 'left'; - config.align.y = config.align.y ?? 'top'; - config.textStroke = doc.sizeToPoint(config.textStroke, 0); - config.textStrokeColor = config.textStrokeColor ?? 'black'; - config.textColor = config.textColor ?? 'black'; - config.textOptions = config.textOptions ?? {}; - config.id = new String(config.id ?? `${this._id}-${rowIndex}-${colIndex}`); - config.type = config.type?.toUpperCase() === 'TH' ? 'TH' : 'TD'; - if (config.scope) { - config.scope = config.scope.toLowerCase(); - if (config.scope === 'row') config.scope = 'Row';else if (config.scope === 'both') config.scope = 'Both';else if (config.scope === 'column') config.scope = 'Column'; - } - if (typeof this.opts.debug === 'boolean') config.debug = this.opts.debug; - if (customFont) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - return config; -} -function normalizeRow(row, rowIndex) { - if (!this._cellClaim) this._cellClaim = new Set(); - let colIndex = 0; - return row.map(cell => { - if (cell == null || typeof cell !== 'object') cell = { - text: cell - }; - while (this._cellClaim.has(`${rowIndex},${colIndex}`)) { - colIndex++; - } - cell = normalizeCell.call(this, cell, rowIndex, colIndex); - for (let i = 0; i < cell.rowSpan; i++) { - for (let j = 0; j < cell.colSpan; j++) { - this._cellClaim.add(`${rowIndex + i},${colIndex + j}`); - } - } - colIndex += cell.colSpan; - return cell; - }); -} - -function ensure(row) { - this._columnWidths = []; - ensureColumnWidths.call(this, row.reduce((a, cell) => a + cell.colSpan, 0)); - this._rowHeights = []; - this._rowYPos = [this._position.y]; - this._rowBuffer = new Set(); -} -function ensureColumnWidths(numCols) { - let starColumnIndexes = []; - let starMinAcc = 0; - let unclaimedWidth = this._maxWidth; - for (let i = 0; i < numCols; i++) { - let col = this._colStyle(i); - if (col.width === '*') { - starColumnIndexes[i] = col; - starMinAcc += col.minWidth; - } else { - unclaimedWidth -= col.width; - this._columnWidths[i] = col.width; - } - } - let starColCount = starColumnIndexes.reduce(x => x + 1, 0); - if (starMinAcc >= unclaimedWidth) { - starColumnIndexes.forEach((cell, i) => { - this._columnWidths[i] = cell.minWidth; - }); - } else if (starColCount > 0) { - starColumnIndexes.forEach((col, i) => { - let starSize = unclaimedWidth / starColCount; - this._columnWidths[i] = Math.max(starSize, col.minWidth); - if (col.maxWidth > 0) { - this._columnWidths[i] = Math.min(this._columnWidths[i], col.maxWidth); - } - unclaimedWidth -= this._columnWidths[i]; - starColCount--; - }); - } - let tempX = this._position.x; - this._columnXPos = Array.from(this._columnWidths, v => { - const t = tempX; - tempX += v; - return t; - }); -} -function measure(row, rowIndex) { - row.forEach(cell => this._rowBuffer.add(cell)); - if (rowIndex > 0) { - this._rowYPos[rowIndex] = this._rowYPos[rowIndex - 1] + this._rowHeights[rowIndex - 1]; - } - const rowStyle = this._rowStyle(rowIndex); - let toRender = []; - this._rowBuffer.forEach(cell => { - if (cell.rowIndex + cell.rowSpan - 1 === rowIndex) { - toRender.push(measureCell.call(this, cell, rowStyle.height)); - this._rowBuffer.delete(cell); - } - }); - let rowHeight = rowStyle.height; - if (rowHeight === 'auto') { - rowHeight = toRender.reduce((acc, cell) => { - let minHeight = cell.textBounds.height + cell.padding.top + cell.padding.bottom; - for (let i = 0; i < cell.rowSpan - 1; i++) { - minHeight -= this._rowHeights[cell.rowIndex + i]; - } - return Math.max(acc, minHeight); - }, 0); - } - rowHeight = Math.max(rowHeight, rowStyle.minHeight); - if (rowStyle.maxHeight > 0) { - rowHeight = Math.min(rowHeight, rowStyle.maxHeight); - } - this._rowHeights[rowIndex] = rowHeight; - let newPage = false; - if (rowHeight > this.document.page.contentHeight) { - console.warn(new Error(`Row ${rowIndex} requested more than the safe page height, row has been clamped`).stack.slice(7)); - this._rowHeights[rowIndex] = this.document.page.maxY() - this._rowYPos[rowIndex]; - } else if (this._rowYPos[rowIndex] + rowHeight >= this.document.page.maxY()) { - this._rowYPos[rowIndex] = this.document.page.margins.top; - newPage = true; - } - return { - newPage, - toRender: toRender.map(cell => measureCell.call(this, cell, rowHeight)) - }; -} -function measureCell(cell, rowHeight) { - let cellWidth = 0; - for (let i = 0; i < cell.colSpan; i++) { - cellWidth += this._columnWidths[cell.colIndex + i]; - } - let cellHeight = rowHeight; - if (cellHeight === 'auto') { - cellHeight = this.document.page.contentHeight; - } else { - for (let i = 0; i < cell.rowSpan - 1; i++) { - cellHeight += this._rowHeights[cell.rowIndex + i]; - } - } - const textAllocatedWidth = cellWidth - cell.padding.left - cell.padding.right; - const textAllocatedHeight = cellHeight - cell.padding.top - cell.padding.bottom; - const rotation = cell.textOptions.rotation ?? 0; - const { - width: textMaxWidth, - height: textMaxHeight - } = computeBounds(rotation, textAllocatedWidth, textAllocatedHeight); - const textOptions = { - align: cell.align.x, - ellipsis: true, - stroke: cell.textStroke > 0, - fill: true, - width: textMaxWidth, - height: textMaxHeight, - rotation, - ...cell.textOptions - }; - let textBounds = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - if (cell.text) { - const rollbackFont = this.document._fontSource; - const rollbackFontSize = this.document._fontSize; - const rollbackFontFamily = this.document._fontFamily; - if (cell.font?.src) this.document.font(cell.font.src, cell.font?.family); - if (cell.font?.size) this.document.fontSize(cell.font.size); - const unRotatedTextBounds = this.document.boundsOfString(cell.text, 0, 0, { - ...textOptions, - rotation: 0 - }); - textOptions.width = unRotatedTextBounds.width; - textOptions.height = unRotatedTextBounds.height; - textBounds = this.document.boundsOfString(cell.text, 0, 0, textOptions); - this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - } - return { - ...cell, - textOptions, - x: this._columnXPos[cell.colIndex], - y: this._rowYPos[cell.rowIndex], - textX: this._columnXPos[cell.colIndex] + cell.padding.left, - textY: this._rowYPos[cell.rowIndex] + cell.padding.top, - width: cellWidth, - height: cellHeight, - textAllocatedHeight, - textAllocatedWidth, - textBounds - }; -} -function computeBounds(rotation, allocWidth, allocHeight) { - let textMaxWidth, textMaxHeight; - const cos = cosine(rotation); - const sin = sine(rotation); - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = allocWidth / (2 * cos); - textMaxHeight = allocWidth / (2 * sin); - } else { - textMaxHeight = allocWidth / (2 * cos); - textMaxWidth = allocWidth / (2 * sin); - } - const EF = sin * textMaxWidth; - const FG = cos * textMaxHeight; - if (EF + FG > allocHeight) { - const denominator = cos * cos - sin * sin; - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxHeight = (allocHeight * cos - allocWidth * sin) / denominator; - } else { - textMaxHeight = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxWidth = (allocHeight * cos - allocWidth * sin) / denominator; - } - } - return { - width: Math.abs(textMaxWidth), - height: Math.abs(textMaxHeight) - }; -} - -function accommodateTable() { - const structParent = this.opts.structParent; - if (structParent) { - this._tableStruct = this.document.struct('Table'); - this._tableStruct.dictionary.data.ID = this._id; - if (structParent instanceof PDFStructureElement) { - structParent.add(this._tableStruct); - } else if (structParent instanceof PDFDocument) { - structParent.addStructure(this._tableStruct); - } - this._headerRowLookup = {}; - this._headerColumnLookup = {}; - } -} -function accommodateCleanup() { - if (this._tableStruct) this._tableStruct.end(); -} -function accessibleRow(row, rowIndex, renderCell) { - const rowStruct = this.document.struct('TR'); - rowStruct.dictionary.data.ID = new String(`${this._id}-${rowIndex}`); - this._tableStruct.add(rowStruct); - row.forEach(cell => renderCell(cell, rowStruct)); - rowStruct.end(); -} -function accessibleCell(cell, rowStruct, callback) { - const doc = this.document; - const cellStruct = doc.struct(cell.type, { - title: cell.title - }); - cellStruct.dictionary.data.ID = cell.id; - rowStruct.add(cellStruct); - const padding = cell.padding; - const border = cell.border; - const attributes = { - O: 'Table', - Width: cell.width, - Height: cell.height, - Padding: [padding.top, padding.bottom, padding.left, padding.right], - RowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined, - ColSpan: cell.colSpan > 1 ? cell.colSpan : undefined, - BorderThickness: [border.top, border.bottom, border.left, border.right] - }; - if (cell.type === 'TH') { - if (cell.scope === 'Row' || cell.scope === 'Both') { - for (let i = 0; i < cell.rowSpan; i++) { - if (!this._headerRowLookup[cell.rowIndex + i]) { - this._headerRowLookup[cell.rowIndex + i] = []; - } - this._headerRowLookup[cell.rowIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - if (cell.scope === 'Column' || cell.scope === 'Both') { - for (let i = 0; i < cell.colSpan; i++) { - if (!this._headerColumnLookup[cell.colIndex + i]) { - this._headerColumnLookup[cell.colIndex + i] = []; - } - this._headerColumnLookup[cell.colIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - } - const Headers = new Set([...Array.from({ - length: cell.colSpan - }, (_, i) => this._headerColumnLookup[cell.colIndex + i]).flat(), ...Array.from({ - length: cell.rowSpan - }, (_, i) => this._headerRowLookup[cell.rowIndex + i]).flat()].filter(Boolean)); - if (Headers.size) attributes.Headers = Array.from(Headers); - const normalizeColor = doc._normalizeColor; - if (cell.backgroundColor != null) { - attributes.BackgroundColor = normalizeColor(cell.backgroundColor); - } - const hasBorder = [border.top, border.bottom, border.left, border.right]; - if (hasBorder.some(x => x)) { - const borderColor = cell.borderColor; - attributes.BorderColor = [hasBorder[0] ? normalizeColor(borderColor.top) : null, hasBorder[1] ? normalizeColor(borderColor.bottom) : null, hasBorder[2] ? normalizeColor(borderColor.left) : null, hasBorder[3] ? normalizeColor(borderColor.right) : null]; - } - Object.keys(attributes).forEach(key => attributes[key] === undefined && delete attributes[key]); - cellStruct.dictionary.data.A = doc.ref(attributes); - cellStruct.add(callback); - cellStruct.end(); - cellStruct.dictionary.data.A.end(); -} - -function renderRow(row, rowIndex) { - if (this._tableStruct) { - accessibleRow.call(this, row, rowIndex, renderCell.bind(this)); - } else { - row.forEach(cell => renderCell.call(this, cell)); - } - return this._rowYPos[rowIndex] + this._rowHeights[rowIndex]; -} -function renderCell(cell, rowStruct) { - const cellRenderer = () => { - if (cell.backgroundColor != null) { - this.document.save().rect(cell.x, cell.y, cell.width, cell.height).fill(cell.backgroundColor).restore(); - } - renderBorder.call(this, cell.border, cell.borderColor, cell.x, cell.y, cell.width, cell.height); - if (cell.debug) { - this.document.save(); - this.document.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - this.document.rect(cell.x, cell.y, cell.width, cell.height).stroke('green'); - this.document.restore(); - } - if (cell.text) renderCellText.call(this, cell); - }; - if (rowStruct) accessibleCell.call(this, cell, rowStruct, cellRenderer);else cellRenderer(); -} -function renderCellText(cell) { - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (cell.customFont) { - if (cell.font.src) doc.font(cell.font.src, cell.font.family); - if (cell.font.size) doc.fontSize(cell.font.size); - } - const x = cell.textX; - const y = cell.textY; - const Ah = cell.textAllocatedHeight; - const Aw = cell.textAllocatedWidth; - const Cw = cell.textBounds.width; - const Ch = cell.textBounds.height; - const Ox = -cell.textBounds.x; - const Oy = -cell.textBounds.y; - const PxScale = cell.align.x === 'right' ? 1 : cell.align.x === 'center' ? 0.5 : 0; - const Px = (Aw - Cw) * PxScale; - const PyScale = cell.align.y === 'bottom' ? 1 : cell.align.y === 'center' ? 0.5 : 0; - const Py = (Ah - Ch) * PyScale; - const dx = Px + Ox; - const dy = Py + Oy; - if (cell.debug) { - doc.save(); - doc.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - if (cell.text) { - doc.moveTo(x + Px, y).lineTo(x + Px, y + Ah).moveTo(x + Px + Cw, y).lineTo(x + Px + Cw, y + Ah).stroke('blue').moveTo(x, y + Py).lineTo(x + Aw, y + Py).moveTo(x, y + Py + Ch).lineTo(x + Aw, y + Py + Ch).stroke('green'); - } - doc.rect(x, y, Aw, Ah).stroke('orange'); - doc.restore(); - } - doc.save().rect(x, y, Aw, Ah).clip(); - doc.fillColor(cell.textColor).strokeColor(cell.textStrokeColor); - if (cell.textStroke > 0) doc.lineWidth(cell.textStroke); - doc.text(cell.text, x + dx, y + dy, cell.textOptions); - doc.restore(); - if (cell.font) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); -} -function renderBorder(border, borderColor, x, y, width, height, mask) { - border = Object.fromEntries(Object.entries(border).map(([k, v]) => [k, mask && !mask[k] ? 0 : v])); - const doc = this.document; - if ([border.right, border.bottom, border.left].every(val => val === border.top)) { - if (border.top > 0) { - doc.save().lineWidth(border.top).rect(x, y, width, height).stroke(borderColor.top).restore(); - } - } else { - if (border.top > 0) { - doc.save().lineWidth(border.top).moveTo(x, y).lineTo(x + width, y).stroke(borderColor.top).restore(); - } - if (border.right > 0) { - doc.save().lineWidth(border.right).moveTo(x + width, y).lineTo(x + width, y + height).stroke(borderColor.right).restore(); - } - if (border.bottom > 0) { - doc.save().lineWidth(border.bottom).moveTo(x + width, y + height).lineTo(x, y + height).stroke(borderColor.bottom).restore(); - } - if (border.left > 0) { - doc.save().lineWidth(border.left).moveTo(x, y + height).lineTo(x, y).stroke(borderColor.left).restore(); - } - } -} - -class PDFTable { - constructor(document, opts = {}) { - this.document = document; - this.opts = Object.freeze(opts); - normalizeTable.call(this); - accommodateTable.call(this); - this._currRowIndex = 0; - this._ended = false; - if (opts.data) { - for (const row of opts.data) this.row(row); - return this.end(); - } - } - row(row, lastRow = false) { - if (this._ended) { - throw new Error(`Table was marked as ended on row ${this._currRowIndex}`); - } - row = Array.from(row); - row = normalizeRow.call(this, row, this._currRowIndex); - if (this._currRowIndex === 0) ensure.call(this, row); - const { - newPage, - toRender - } = measure.call(this, row, this._currRowIndex); - if (newPage) this.document.continueOnNewPage(); - const yPos = renderRow.call(this, toRender, this._currRowIndex); - this.document.x = this._position.x; - this.document.y = yPos; - if (lastRow) return this.end(); - this._currRowIndex++; - return this; - } - end() { - while (this._rowBuffer?.size) this.row([]); - this._ended = true; - accommodateCleanup.call(this); - return this.document; - } -} - -var TableMixin = { - initTables() { - this._tableIndex = 0; - }, - table(opts) { - return new PDFTable(this, opts); - } -}; - -class PDFMetadata { - constructor() { - this._metadata = ` - - - - `; - } - _closeTags() { - this._metadata = this._metadata.concat(` - - - - `); - } - append(xml, newline = true) { - this._metadata = this._metadata.concat(xml); - if (newline) this._metadata = this._metadata.concat('\n'); - } - getXML() { - return this._metadata; - } - getLength() { - return this._metadata.length; - } - end() { - this._closeTags(); - this._metadata = this._metadata.trim(); - } -} - -var MetadataMixin = { - initMetadata() { - this.metadata = new PDFMetadata(); - }, - appendXML(xml, newline = true) { - this.metadata.append(xml, newline); - }, - _addInfo() { - this.appendXML(` - - ${this.info.CreationDate.toISOString().split('.')[0] + 'Z'} - ${this.info.Creator} - - `); - if (this.info.Title || this.info.Author || this.info.Subject) { - this.appendXML(` - - `); - if (this.info.Title) { - this.appendXML(` - - - ${this.info.Title} - - - `); - } - if (this.info.Author) { - this.appendXML(` - - - ${this.info.Author} - - - `); - } - if (this.info.Subject) { - this.appendXML(` - - - ${this.info.Subject} - - - `); - } - this.appendXML(` - - `); - } - this.appendXML(` - - ${this.info.Creator}`, false); - if (this.info.Keywords) { - this.appendXML(` - ${this.info.Keywords}`, false); - } - this.appendXML(` - - `); - }, - endMetadata() { - this._addInfo(); - this.metadata.end(); - if (this.version != 1.3) { - this.metadataRef = this.ref({ - length: this.metadata.getLength(), - Type: 'Metadata', - Subtype: 'XML' - }); - this.metadataRef.compress = false; - this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8')); - this.metadataRef.end(); - this._root.data.Metadata = this.metadataRef; - } - } -}; - -class PDFDocument extends stream.Readable { - constructor(options = {}) { - super(options); - this.options = options; - switch (options.pdfVersion) { - case '1.4': - this.version = 1.4; - break; - case '1.5': - this.version = 1.5; - break; - case '1.6': - this.version = 1.6; - break; - case '1.7': - case '1.7ext3': - this.version = 1.7; - break; - default: - this.version = 1.3; - break; - } - this.compress = this.options.compress != null ? this.options.compress : true; - this._pageBuffer = []; - this._pageBufferStart = 0; - this._offsets = []; - this._waiting = 0; - this._ended = false; - this._offset = 0; - const Pages = this.ref({ - Type: 'Pages', - Count: 0, - Kids: [] - }); - const Names = this.ref({ - Dests: new PDFNameTree() - }); - this._root = this.ref({ - Type: 'Catalog', - Pages, - Names - }); - if (this.options.lang) { - this._root.data.Lang = new String(this.options.lang); - } - this.page = null; - this.initMetadata(); - this.initColor(); - this.initVector(); - this.initFonts(options.font); - this.initText(); - this.initImages(); - this.initOutline(); - this.initMarkings(options); - this.initTables(); - this.initSubset(options); - this.info = { - Producer: 'PDFKit', - Creator: 'PDFKit', - CreationDate: new Date() - }; - if (this.options.info) { - for (let key in this.options.info) { - const val = this.options.info[key]; - this.info[key] = val; - } - } - if (this.options.displayTitle) { - this._root.data.ViewerPreferences = this.ref({ - DisplayDocTitle: true - }); - } - this._id = PDFSecurity.generateFileID(this.info); - this._security = PDFSecurity.create(this, options); - this._write(`%PDF-${this.version}`); - this._write('%\xFF\xFF\xFF\xFF'); - if (this.options.autoFirstPage !== false) { - this.addPage(); - } - } - addPage(options) { - if (options == null) { - ({ - options - } = this); - } - if (!this.options.bufferPages) { - this.flushPages(); - } - this.page = new PDFPage(this, options); - this._pageBuffer.push(this.page); - const pages = this._root.data.Pages.data; - pages.Kids.push(this.page.dictionary); - pages.Count++; - this.x = this.page.margins.left; - this.y = this.page.margins.top; - this._ctm = [1, 0, 0, 1, 0, 0]; - this.transform(1, 0, 0, -1, 0, this.page.height); - this.emit('pageAdded'); - return this; - } - continueOnNewPage(options) { - const pageMarkings = this.endPageMarkings(this.page); - this.addPage(options ?? this.page._options); - this.initPageMarkings(pageMarkings); - return this; - } - bufferedPageRange() { - return { - start: this._pageBufferStart, - count: this._pageBuffer.length - }; - } - switchToPage(n) { - let page; - if (!(page = this._pageBuffer[n - this._pageBufferStart])) { - throw new Error(`switchToPage(${n}) out of bounds, current buffer covers pages ${this._pageBufferStart} to ${this._pageBufferStart + this._pageBuffer.length - 1}`); - } - return this.page = page; - } - flushPages() { - const pages = this._pageBuffer; - this._pageBuffer = []; - this._pageBufferStart += pages.length; - for (let page of pages) { - this.endPageMarkings(page); - page.end(); - } - } - addNamedDestination(name, ...args) { - if (args.length === 0) { - args = ['XYZ', null, null, null]; - } - if (args[0] === 'XYZ' && args[2] !== null) { - args[2] = this.page.height - args[2]; - } - args.unshift(this.page.dictionary); - this._root.data.Names.data.Dests.add(name, args); - } - addNamedEmbeddedFile(name, ref) { - if (!this._root.data.Names.data.EmbeddedFiles) { - this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ - limits: false - }); - } - this._root.data.Names.data.EmbeddedFiles.add(name, ref); - } - addNamedJavaScript(name, js) { - if (!this._root.data.Names.data.JavaScript) { - this._root.data.Names.data.JavaScript = new PDFNameTree(); - } - let data = { - JS: new String(js), - S: 'JavaScript' - }; - this._root.data.Names.data.JavaScript.add(name, data); - } - ref(data) { - const ref = new PDFReference(this, this._offsets.length + 1, data); - this._offsets.push(null); - this._waiting++; - return ref; - } - _read() {} - _write(data) { - if (!Buffer.isBuffer(data)) { - data = Buffer.from(data + '\n', 'binary'); - } - this.push(data); - this._offset += data.length; - } - addContent(data) { - this.page.write(data); - return this; - } - _refEnd(ref) { - this._offsets[ref.id - 1] = ref.offset; - if (--this._waiting === 0 && this._ended) { - this._finalize(); - this._ended = false; - } - } - end() { - this.flushPages(); - this._info = this.ref(); - for (let key in this.info) { - let val = this.info[key]; - if (typeof val === 'string') { - val = new String(val); - } - let entry = this.ref(val); - entry.end(); - this._info.data[key] = entry; - } - this._info.end(); - for (let name in this._fontFamilies) { - const font = this._fontFamilies[name]; - font.finalize(); - } - this.endOutline(); - this.endMarkings(); - if (this.subset) { - this.endSubset(); - } - this.endMetadata(); - this._root.end(); - this._root.data.Pages.end(); - this._root.data.Names.end(); - this.endAcroForm(); - if (this._root.data.ViewerPreferences) { - this._root.data.ViewerPreferences.end(); - } - if (this._security) { - this._security.end(); - } - if (this._waiting === 0) { - this._finalize(); - } else { - this._ended = true; - } - } - _finalize() { - const xRefOffset = this._offset; - this._write('xref'); - this._write(`0 ${this._offsets.length + 1}`); - this._write('0000000000 65535 f '); - for (let offset of this._offsets) { - offset = `0000000000${offset}`.slice(-10); - this._write(offset + ' 00000 n '); - } - const trailer = { - Size: this._offsets.length + 1, - Root: this._root, - Info: this._info, - ID: [this._id, this._id] - }; - if (this._security) { - trailer.Encrypt = this._security.dictionary; - } - this._write('trailer'); - this._write(PDFObject.convert(trailer)); - this._write('startxref'); - this._write(`${xRefOffset}`); - this._write('%%EOF'); - this.push(null); - } - toString() { - return '[object PDFDocument]'; - } -} -const mixin = methods => { - Object.assign(PDFDocument.prototype, methods); -}; -mixin(MetadataMixin); -mixin(ColorMixin); -mixin(VectorMixin); -mixin(FontsMixin); -mixin(TextMixin); -mixin(ImagesMixin); -mixin(AnnotationsMixin); -mixin(OutlineMixin); -mixin(MarkingsMixin); -mixin(AcroFormMixin); -mixin(AttachmentsMixin); -mixin(SubsetMixin); -mixin(TableMixin); -PDFDocument.LineWrapper = LineWrapper; - -module.exports = PDFDocument; -//# sourceMappingURL=pdfkit.js.map diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js.map b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js.map deleted file mode 100644 index 8338e06..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pdfkit.js","sources":["../lib/abstract_reference.js","../lib/tree.js","../lib/spotcolor.js","../lib/object.js","../lib/reference.js","../lib/utils.js","../lib/page.js","../lib/name_tree.js","../lib/saslprep/lib/util.js","../lib/saslprep/lib/code-points.js","../lib/saslprep/index.js","../lib/security.js","../lib/gradient.js","../lib/pattern.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/structure_content.js","../lib/structure_element.js","../lib/number_tree.js","../lib/mixins/markings.js","../lib/mixins/acroform.js","../lib/mixins/attachments.js","../lib/mixins/pdfa.js","../lib/mixins/pdfua.js","../lib/mixins/subsets.js","../lib/table/utils.js","../lib/table/style.js","../lib/table/normalize.js","../lib/table/size.js","../lib/table/accessibility.js","../lib/table/render.js","../lib/table/index.js","../lib/mixins/table.js","../lib/metadata.js","../lib/mixins/metadata.js","../lib/document.js"],"sourcesContent":["/*\nPDFAbstractReference - abstract class for PDF reference\n*/\n\nclass PDFAbstractReference {\n toString() {\n throw new Error('Must be implemented by subclasses');\n }\n}\n\nexport default PDFAbstractReference;\n","/*\nPDFTree - abstract base class for name and number tree objects\n*/\n\nimport PDFObject from './object';\n\nclass PDFTree {\n constructor(options = {}) {\n this._items = {};\n // disable /Limits output for this tree\n this.limits = typeof options.limits === 'boolean' ? options.limits : true;\n }\n\n add(key, val) {\n return (this._items[key] = val);\n }\n\n get(key) {\n return this._items[key];\n }\n\n toString() {\n // Needs to be sorted by key\n const sortedKeys = Object.keys(this._items).sort((a, b) =>\n this._compareKeys(a, b),\n );\n\n const out = ['<<'];\n if (this.limits && sortedKeys.length > 1) {\n const first = sortedKeys[0],\n last = sortedKeys[sortedKeys.length - 1];\n out.push(\n ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`,\n );\n }\n out.push(` /${this._keysName()} [`);\n for (let key of sortedKeys) {\n out.push(\n ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\n this._items[key],\n )}`,\n );\n }\n out.push(']');\n out.push('>>');\n return out.join('\\n');\n }\n\n _compareKeys(/*a, b*/) {\n throw new Error('Must be implemented by subclasses');\n }\n\n _keysName() {\n throw new Error('Must be implemented by subclasses');\n }\n\n _dataForKey(/*k*/) {\n throw new Error('Must be implemented by subclasses');\n }\n}\n\nexport default PDFTree;\n","export default class SpotColor {\n constructor(doc, name, C, M, Y, K) {\n this.id = 'CS' + Object.keys(doc.spotColors).length;\n this.name = name;\n this.values = [C, M, Y, K];\n this.ref = doc.ref([\n 'Separation',\n this.name,\n 'DeviceCMYK',\n {\n Range: [0, 1, 0, 1, 0, 1, 0, 1],\n C0: [0, 0, 0, 0],\n C1: this.values.map((value) => value / 100),\n FunctionType: 2,\n Domain: [0, 1],\n N: 1,\n },\n ]);\n this.ref.end();\n }\n\n toString() {\n return `${this.ref.id} 0 R`;\n }\n}\n","/*\nPDFObject - converts JavaScript types into their corresponding PDF types.\nBy Devon Govett\n*/\n\nimport PDFAbstractReference from './abstract_reference';\nimport PDFTree from './tree';\nimport SpotColor from './spotcolor';\n\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\n\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\nconst escapable = {\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\\\': '\\\\\\\\',\n '(': '\\\\(',\n ')': '\\\\)',\n};\n\n// Convert little endian UTF-16 to big endian\nconst swapBytes = function (buff) {\n const l = buff.length;\n if (l & 0x01) {\n throw new Error('Buffer length must be even');\n } else {\n for (let i = 0, end = l - 1; i < end; i += 2) {\n const a = buff[i];\n buff[i] = buff[i + 1];\n buff[i + 1] = a;\n }\n }\n\n return buff;\n};\n\nclass PDFObject {\n static convert(object, encryptFn = null) {\n // String literals are converted to the PDF name type\n if (typeof object === 'string') {\n return `/${object}`;\n\n // String objects are converted to PDF strings (UTF-16)\n } else if (object instanceof String) {\n let string = object;\n // Detect if this is a unicode string\n let isUnicode = false;\n for (let i = 0, end = string.length; i < end; i++) {\n if (string.charCodeAt(i) > 0x7f) {\n isUnicode = true;\n break;\n }\n }\n\n // If so, encode it as big endian UTF-16\n let stringBuffer;\n if (isUnicode) {\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\n } else {\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\n }\n\n // Encrypt the string when necessary\n if (encryptFn) {\n string = encryptFn(stringBuffer).toString('binary');\n } else {\n string = stringBuffer.toString('binary');\n }\n\n // Escape characters as required by the spec\n string = string.replace(escapableRe, (c) => escapable[c]);\n\n return `(${string})`;\n\n // Buffers are converted to PDF hex strings\n } else if (Buffer.isBuffer(object)) {\n return `<${object.toString('hex')}>`;\n } else if (\n object instanceof PDFAbstractReference ||\n object instanceof PDFTree ||\n object instanceof SpotColor\n ) {\n return object.toString();\n } else if (object instanceof Date) {\n let string =\n `D:${pad(object.getUTCFullYear(), 4)}` +\n pad(object.getUTCMonth() + 1, 2) +\n pad(object.getUTCDate(), 2) +\n pad(object.getUTCHours(), 2) +\n pad(object.getUTCMinutes(), 2) +\n pad(object.getUTCSeconds(), 2) +\n 'Z';\n\n // Encrypt the string when necessary\n if (encryptFn) {\n string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\n\n // Escape characters as required by the spec\n string = string.replace(escapableRe, (c) => escapable[c]);\n }\n\n return `(${string})`;\n } else if (Array.isArray(object)) {\n const items = object\n .map((e) => PDFObject.convert(e, encryptFn))\n .join(' ');\n return `[${items}]`;\n } else if ({}.toString.call(object) === '[object Object]') {\n const out = ['<<'];\n for (let key in object) {\n const val = object[key];\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\n }\n\n out.push('>>');\n return out.join('\\n');\n } else if (typeof object === 'number') {\n return PDFObject.number(object);\n } else {\n return `${object}`;\n }\n }\n\n static number(n) {\n if (n > -1e21 && n < 1e21) {\n return Math.round(n * 1e6) / 1e6;\n }\n\n throw new Error(`unsupported number: ${n}`);\n }\n}\n\nexport default PDFObject;\n","/*\nPDFReference - represents a reference to another object in the PDF object heirarchy\nBy Devon Govett\n*/\n\nimport zlib from 'zlib';\nimport PDFAbstractReference from './abstract_reference';\nimport PDFObject from './object';\n\nclass PDFReference extends PDFAbstractReference {\n constructor(document, id, data = {}) {\n super();\n this.document = document;\n this.id = id;\n this.data = data;\n this.gen = 0;\n this.compress = this.document.compress && !this.data.Filter;\n this.uncompressedLength = 0;\n this.buffer = [];\n }\n\n write(chunk) {\n if (!(chunk instanceof Uint8Array)) {\n chunk = Buffer.from(chunk + '\\n', 'binary');\n }\n\n this.uncompressedLength += chunk.length;\n if (this.data.Length == null) {\n this.data.Length = 0;\n }\n this.buffer.push(chunk);\n this.data.Length += chunk.length;\n if (this.compress) {\n this.data.Filter = 'FlateDecode';\n }\n }\n\n end(chunk) {\n if (chunk) {\n this.write(chunk);\n }\n this.finalize();\n }\n\n finalize() {\n this.offset = this.document._offset;\n\n const encryptFn = this.document._security\n ? this.document._security.getEncryptFn(this.id, this.gen)\n : null;\n\n if (this.buffer.length) {\n this.buffer = Buffer.concat(this.buffer);\n if (this.compress) {\n this.buffer = zlib.deflateSync(this.buffer);\n }\n\n if (encryptFn) {\n this.buffer = encryptFn(this.buffer);\n }\n\n this.data.Length = this.buffer.length;\n }\n\n this.document._write(`${this.id} ${this.gen} obj`);\n this.document._write(PDFObject.convert(this.data, encryptFn));\n\n if (this.buffer.length) {\n this.document._write('stream');\n this.document._write(this.buffer);\n\n this.buffer = []; // free up memory\n this.document._write('\\nendstream');\n }\n\n this.document._write('endobj');\n this.document._refEnd(this);\n }\n toString() {\n return `${this.id} ${this.gen} R`;\n }\n}\n\nexport default PDFReference;\n","const fArray = new Float32Array(1);\r\nconst uArray = new Uint32Array(fArray.buffer);\r\n\r\nexport function PDFNumber(n) {\r\n // PDF numbers are strictly 32bit\r\n // so convert this number to a 32bit number\r\n // @see ISO 32000-1 Annex C.2 (real numbers)\r\n const rounded = Math.fround(n);\r\n if (rounded <= n) return rounded;\r\n\r\n // Will have to perform 32bit float truncation\r\n fArray[0] = n;\r\n\r\n // Get the 32-bit representation as integer and shift bits\r\n if (n <= 0) {\r\n uArray[0] += 1;\r\n } else {\r\n uArray[0] -= 1;\r\n }\r\n\r\n // Return the float value\r\n return fArray[0];\r\n}\r\n\r\n/**\r\n * Measurement of size\r\n *\r\n * @typedef {number | `${number}` | `${number}${'em' | 'in' | 'px' | 'cm' | 'mm' | 'pc' | 'ex' | 'ch' | 'rem' | 'vw' | 'vmin' | 'vmax' | '%' | 'pt'}`} Size\r\n */\r\n\r\n/**\r\n * @typedef {Array | string | Array} PDFColor\r\n */\r\n\r\n/** @typedef {string | Buffer | Uint8Array | ArrayBuffer} PDFFontSource */\r\n/**\r\n * Side definitions\r\n * - To define all sides, use a single value\r\n * - To define up-down left-right, use a `[Y, X]` array\r\n * - To define each side, use `[top, right, bottom, left]` array\r\n * - Or `{vertical: SideValue, horizontal: SideValue}`\r\n * - Or `{top: SideValue, right: SideValue, bottom: SideValue, left: SideValue}`\r\n *\r\n * @template T\r\n * @typedef {T | [T, T] | [T, T, T, T] | { vertical: T; horizontal: T } | ExpandedSideDefinition} SideDefinition\r\n **/\r\n\r\n/**\r\n * @template T\r\n * @typedef {{ top: T; right: T; bottom: T; left: T }} ExpandedSideDefinition\r\n */\r\n\r\n/**\r\n * Convert any side definition into a static structure\r\n *\r\n * @template S\r\n * @template D\r\n * @template O\r\n * @template {S | D} T\r\n * @param {SideDefinition} sides - The sides to convert\r\n * @param {SideDefinition} defaultDefinition - The value to use when no definition is provided\r\n * @param {function(T): O} transformer - The transformation to apply to the sides once normalized\r\n * @returns {ExpandedSideDefinition}\r\n */\r\nexport function normalizeSides(\r\n sides,\r\n defaultDefinition = undefined,\r\n transformer = (v) => v,\r\n) {\r\n if (\r\n sides == null ||\r\n (typeof sides === 'object' && Object.keys(sides).length === 0)\r\n ) {\r\n sides = defaultDefinition;\r\n }\r\n if (sides == null || typeof sides !== 'object') {\r\n sides = { top: sides, right: sides, bottom: sides, left: sides };\r\n } else if (Array.isArray(sides)) {\r\n if (sides.length === 2) {\r\n sides = { vertical: sides[0], horizontal: sides[1] };\r\n } else {\r\n sides = {\r\n top: sides[0],\r\n right: sides[1],\r\n bottom: sides[2],\r\n left: sides[3],\r\n };\r\n }\r\n }\r\n\r\n if ('vertical' in sides || 'horizontal' in sides) {\r\n sides = {\r\n top: sides.vertical,\r\n right: sides.horizontal,\r\n bottom: sides.vertical,\r\n left: sides.horizontal,\r\n };\r\n }\r\n\r\n return {\r\n top: transformer(sides.top),\r\n right: transformer(sides.right),\r\n bottom: transformer(sides.bottom),\r\n left: transformer(sides.left),\r\n };\r\n}\r\n\r\nexport const MM_TO_CM = 1 / 10; // 1MM = 1CM\r\nexport const CM_TO_IN = 1 / 2.54; // 1CM = 1/2.54 IN\r\nexport const PX_TO_IN = 1 / 96; // 1 PX = 1/96 IN\r\nexport const IN_TO_PT = 72; // 1 IN = 72 PT\r\nexport const PC_TO_PT = 12; // 1 PC = 12 PT\r\n\r\n/**\r\n * Get cosine in degrees of a\r\n *\r\n * Rounding errors are handled\r\n * @param a\r\n * @returns {number}\r\n */\r\nexport function cosine(a) {\r\n if (a === 0) return 1;\r\n if (a === 90) return 0;\r\n if (a === 180) return -1;\r\n if (a === 270) return 0;\r\n return Math.cos((a * Math.PI) / 180);\r\n}\r\n\r\n/**\r\n * Get sine in degrees of a\r\n *\r\n * Rounding errors are handled\r\n * @param a\r\n * @returns {number}\r\n */\r\nexport function sine(a) {\r\n if (a === 0) return 0;\r\n if (a === 90) return 1;\r\n if (a === 180) return 0;\r\n if (a === 270) return -1;\r\n return Math.sin((a * Math.PI) / 180);\r\n}\r\n","/*\nPDFPage - represents a single page in the PDF document\nBy Devon Govett\n*/\n\nimport { normalizeSides } from './utils';\n\n/**\n * @type {SideDefinition}\n */\nconst DEFAULT_MARGINS = {\n top: 72,\n left: 72,\n bottom: 72,\n right: 72,\n};\n\nconst SIZES = {\n '4A0': [4767.87, 6740.79],\n '2A0': [3370.39, 4767.87],\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n A7: [209.76, 297.64],\n A8: [147.4, 209.76],\n A9: [104.88, 147.4],\n A10: [73.7, 104.88],\n B0: [2834.65, 4008.19],\n B1: [2004.09, 2834.65],\n B2: [1417.32, 2004.09],\n B3: [1000.63, 1417.32],\n B4: [708.66, 1000.63],\n B5: [498.9, 708.66],\n B6: [354.33, 498.9],\n B7: [249.45, 354.33],\n B8: [175.75, 249.45],\n B9: [124.72, 175.75],\n B10: [87.87, 124.72],\n C0: [2599.37, 3676.54],\n C1: [1836.85, 2599.37],\n C2: [1298.27, 1836.85],\n C3: [918.43, 1298.27],\n C4: [649.13, 918.43],\n C5: [459.21, 649.13],\n C6: [323.15, 459.21],\n C7: [229.61, 323.15],\n C8: [161.57, 229.61],\n C9: [113.39, 161.57],\n C10: [79.37, 113.39],\n RA0: [2437.8, 3458.27],\n RA1: [1729.13, 2437.8],\n RA2: [1218.9, 1729.13],\n RA3: [864.57, 1218.9],\n RA4: [609.45, 864.57],\n SRA0: [2551.18, 3628.35],\n SRA1: [1814.17, 2551.18],\n SRA2: [1275.59, 1814.17],\n SRA3: [907.09, 1275.59],\n SRA4: [637.8, 907.09],\n EXECUTIVE: [521.86, 756.0],\n FOLIO: [612.0, 936.0],\n LEGAL: [612.0, 1008.0],\n LETTER: [612.0, 792.0],\n TABLOID: [792.0, 1224.0],\n};\n\nclass PDFPage {\n constructor(document, options = {}) {\n this.document = document;\n this._options = options;\n this.size = options.size || 'letter';\n this.layout = options.layout || 'portrait';\n\n // calculate page dimensions\n const dimensions = Array.isArray(this.size)\n ? this.size\n : SIZES[this.size.toUpperCase()];\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\n\n this.content = this.document.ref();\n\n if (options.font) document.font(options.font, options.fontFamily);\n if (options.fontSize) document.fontSize(options.fontSize);\n\n // process margins\n // Margin calculation must occur after font assignment to ensure any dynamic sizes are calculated correctly\n this.margins = normalizeSides(\n options.margin ?? options.margins,\n DEFAULT_MARGINS,\n (x) => document.sizeToPoint(x, 0, this),\n );\n\n // Initialize the Font, XObject, and ExtGState dictionaries\n this.resources = this.document.ref({\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n });\n\n // The page dictionary\n this.dictionary = this.document.ref({\n Type: 'Page',\n Parent: this.document._root.data.Pages,\n MediaBox: [0, 0, this.width, this.height],\n Contents: this.content,\n Resources: this.resources,\n });\n\n this.markings = [];\n }\n\n // Lazily create these objects\n get fonts() {\n const data = this.resources.data;\n return data.Font != null ? data.Font : (data.Font = {});\n }\n\n get xobjects() {\n const data = this.resources.data;\n return data.XObject != null ? data.XObject : (data.XObject = {});\n }\n\n get ext_gstates() {\n const data = this.resources.data;\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\n }\n\n get patterns() {\n const data = this.resources.data;\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\n }\n\n get colorSpaces() {\n const data = this.resources.data;\n return data.ColorSpace || (data.ColorSpace = {});\n }\n\n get annotations() {\n const data = this.dictionary.data;\n return data.Annots != null ? data.Annots : (data.Annots = []);\n }\n\n get structParentTreeKey() {\n const data = this.dictionary.data;\n return data.StructParents != null\n ? data.StructParents\n : (data.StructParents = this.document.createStructParentTreeNextKey());\n }\n\n /**\n * The width of the safe contents of a page\n *\n * @returns {number}\n */\n get contentWidth() {\n return this.width - this.margins.left - this.margins.right;\n }\n\n /**\n * The height of the safe contents of a page\n *\n * @returns {number}\n */\n get contentHeight() {\n return this.height - this.margins.top - this.margins.bottom;\n }\n\n maxY() {\n return this.height - this.margins.bottom;\n }\n\n write(chunk) {\n return this.content.write(chunk);\n }\n\n // Set tab order if document is tagged for accessibility.\n _setTabOrder() {\n if (!this.dictionary.Tabs && this.document.hasMarkInfoDictionary()) {\n this.dictionary.data.Tabs = 'S';\n }\n }\n\n end() {\n this._setTabOrder();\n this.dictionary.end();\n this.resources.data.ColorSpace = this.resources.data.ColorSpace || {};\n for (let color of Object.values(this.document.spotColors)) {\n this.resources.data.ColorSpace[color.id] = color;\n }\n this.resources.end();\n return this.content.end();\n }\n}\n\nexport default PDFPage;\n","/*\nPDFNameTree - represents a name tree object\n*/\n\nimport PDFTree from './tree';\n\nclass PDFNameTree extends PDFTree {\n _compareKeys(a, b) {\n return a.localeCompare(b);\n }\n\n _keysName() {\n return 'Names';\n }\n\n _dataForKey(k) {\n return new String(k);\n }\n}\n\nexport default PDFNameTree;\n","/**\n * Check if value is in a range group.\n * @param {number} value\n * @param {number[]} rangeGroup\n * @returns {boolean}\n */\nfunction inRange(value, rangeGroup) {\n if (value < rangeGroup[0]) return false;\n let startRange = 0;\n let endRange = rangeGroup.length / 2;\n while (startRange <= endRange) {\n const middleRange = Math.floor((startRange + endRange) / 2);\n\n // actual array index\n const arrayIndex = middleRange * 2;\n\n // Check if value is in range pointed by actual index\n if (\n value >= rangeGroup[arrayIndex] &&\n value <= rangeGroup[arrayIndex + 1]\n ) {\n return true;\n }\n\n if (value > rangeGroup[arrayIndex + 1]) {\n // Search Right Side Of Array\n startRange = middleRange + 1;\n } else {\n // Search Left Side Of Array\n endRange = middleRange - 1;\n }\n }\n return false;\n}\n\nexport { inRange };\n","import { inRange } from './util';\n\n// prettier-ignore-start\n/**\n * A.1 Unassigned code points in Unicode 3.2\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\n */\nconst unassigned_code_points = [\n 0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350,\n 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383,\n 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7,\n 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff,\n 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b,\n 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef,\n 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b,\n 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e,\n 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a,\n 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984,\n 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3,\n 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca,\n 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb,\n 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29,\n 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d,\n 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d,\n 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e,\n 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4,\n 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1,\n 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e,\n 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a,\n 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b,\n 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b,\n 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d,\n 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba,\n 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6,\n 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29,\n 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49,\n 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84,\n 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4,\n 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7,\n 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04,\n 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44,\n 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65,\n 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc,\n 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5,\n 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c,\n 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c,\n 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6,\n 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf,\n 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede,\n 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98,\n 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028,\n 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f,\n 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3,\n 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249,\n 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287,\n 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1,\n 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf,\n 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311,\n 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d,\n 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff,\n 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d,\n 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff,\n 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c,\n 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47,\n 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e,\n 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5,\n 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053,\n 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f,\n 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184,\n 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff,\n 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705,\n 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e,\n 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0,\n 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a,\n 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097,\n 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef,\n 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff,\n 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff,\n 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e,\n 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37,\n 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2,\n 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff,\n 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67,\n 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00,\n 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd,\n 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f,\n 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff,\n 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455,\n 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8,\n 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1,\n 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515,\n 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545,\n 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd,\n 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd,\n 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd,\n 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd,\n 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f,\n 0xe0080, 0xefffd,\n];\n// prettier-ignore-end\n\nconst isUnassignedCodePoint = (character) =>\n inRange(character, unassigned_code_points);\n\n// prettier-ignore-start\n/**\n * B.1 Commonly mapped to nothing\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\n */\nconst commonly_mapped_to_nothing = [\n 0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c,\n 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d,\n 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03,\n 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07,\n 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c,\n 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff,\n];\n// prettier-ignore-end\n\nconst isCommonlyMappedToNothing = (character) =>\n inRange(character, commonly_mapped_to_nothing);\n\n// prettier-ignore-start\n/**\n * C.1.2 Non-ASCII space characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\n */\nconst non_ASCII_space_characters = [\n 0x00a0, 0x00a0 /* NO-BREAK SPACE */, 0x1680, 0x1680 /* OGHAM SPACE MARK */,\n 0x2000, 0x2000 /* EN QUAD */, 0x2001, 0x2001 /* EM QUAD */, 0x2002,\n 0x2002 /* EN SPACE */, 0x2003, 0x2003 /* EM SPACE */, 0x2004,\n 0x2004 /* THREE-PER-EM SPACE */, 0x2005, 0x2005 /* FOUR-PER-EM SPACE */,\n 0x2006, 0x2006 /* SIX-PER-EM SPACE */, 0x2007, 0x2007 /* FIGURE SPACE */,\n 0x2008, 0x2008 /* PUNCTUATION SPACE */, 0x2009, 0x2009 /* THIN SPACE */,\n 0x200a, 0x200a /* HAIR SPACE */, 0x200b, 0x200b /* ZERO WIDTH SPACE */,\n 0x202f, 0x202f /* NARROW NO-BREAK SPACE */, 0x205f,\n 0x205f /* MEDIUM MATHEMATICAL SPACE */, 0x3000,\n 0x3000 /* IDEOGRAPHIC SPACE */,\n];\n// prettier-ignore-end\n\nconst isNonASCIISpaceCharacter = (character) =>\n inRange(character, non_ASCII_space_characters);\n\n// prettier-ignore-start\nconst non_ASCII_controls_characters = [\n /**\n * C.2.2 Non-ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\n */\n 0x0080, 0x009f /* [CONTROL CHARACTERS] */, 0x06dd,\n 0x06dd /* ARABIC END OF AYAH */, 0x070f,\n 0x070f /* SYRIAC ABBREVIATION MARK */, 0x180e,\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */, 0x200c,\n 0x200c /* ZERO WIDTH NON-JOINER */, 0x200d, 0x200d /* ZERO WIDTH JOINER */,\n 0x2028, 0x2028 /* LINE SEPARATOR */, 0x2029, 0x2029 /* PARAGRAPH SEPARATOR */,\n 0x2060, 0x2060 /* WORD JOINER */, 0x2061, 0x2061 /* FUNCTION APPLICATION */,\n 0x2062, 0x2062 /* INVISIBLE TIMES */, 0x2063,\n 0x2063 /* INVISIBLE SEPARATOR */, 0x206a, 0x206f /* [CONTROL CHARACTERS] */,\n 0xfeff, 0xfeff /* ZERO WIDTH NO-BREAK SPACE */, 0xfff9,\n 0xfffc /* [CONTROL CHARACTERS] */, 0x1d173,\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */,\n];\n\nconst non_character_codepoints = [\n /**\n * C.4 Non-character code points\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\n */\n 0xfdd0, 0xfdef /* [NONCHARACTER CODE POINTS] */, 0xfffe,\n 0xffff /* [NONCHARACTER CODE POINTS] */, 0x1fffe,\n 0x1ffff /* [NONCHARACTER CODE POINTS] */, 0x2fffe,\n 0x2ffff /* [NONCHARACTER CODE POINTS] */, 0x3fffe,\n 0x3ffff /* [NONCHARACTER CODE POINTS] */, 0x4fffe,\n 0x4ffff /* [NONCHARACTER CODE POINTS] */, 0x5fffe,\n 0x5ffff /* [NONCHARACTER CODE POINTS] */, 0x6fffe,\n 0x6ffff /* [NONCHARACTER CODE POINTS] */, 0x7fffe,\n 0x7ffff /* [NONCHARACTER CODE POINTS] */, 0x8fffe,\n 0x8ffff /* [NONCHARACTER CODE POINTS] */, 0x9fffe,\n 0x9ffff /* [NONCHARACTER CODE POINTS] */, 0xafffe,\n 0xaffff /* [NONCHARACTER CODE POINTS] */, 0xbfffe,\n 0xbffff /* [NONCHARACTER CODE POINTS] */, 0xcfffe,\n 0xcffff /* [NONCHARACTER CODE POINTS] */, 0xdfffe,\n 0xdffff /* [NONCHARACTER CODE POINTS] */, 0xefffe,\n 0xeffff /* [NONCHARACTER CODE POINTS] */, 0x10fffe,\n 0x10ffff /* [NONCHARACTER CODE POINTS] */,\n];\n\n/**\n * 2.3. Prohibited Output\n */\nconst prohibited_characters = [\n /**\n * C.2.1 ASCII control characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\n */\n 0, 0x001f /* [CONTROL CHARACTERS] */, 0x007f, 0x007f /* DELETE */,\n\n /**\n * C.8 Change display properties or are deprecated\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\n */\n 0x0340, 0x0340 /* COMBINING GRAVE TONE MARK */, 0x0341,\n 0x0341 /* COMBINING ACUTE TONE MARK */, 0x200e,\n 0x200e /* LEFT-TO-RIGHT MARK */, 0x200f, 0x200f /* RIGHT-TO-LEFT MARK */,\n 0x202a, 0x202a /* LEFT-TO-RIGHT EMBEDDING */, 0x202b,\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */, 0x202c,\n 0x202c /* POP DIRECTIONAL FORMATTING */, 0x202d,\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */, 0x202e,\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */, 0x206a,\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */, 0x206b,\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */, 0x206c,\n 0x206c /* INHIBIT ARABIC FORM SHAPING */, 0x206d,\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */, 0x206e,\n 0x206e /* NATIONAL DIGIT SHAPES */, 0x206f, 0x206f /* NOMINAL DIGIT SHAPES */,\n\n /**\n * C.7 Inappropriate for canonical representation\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\n */\n 0x2ff0, 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\n\n /**\n * C.5 Surrogate codes\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\n */\n 0xd800, 0xdfff,\n\n /**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n 0xe000, 0xf8ff /* [PRIVATE USE, PLANE 0] */,\n\n /**\n * C.6 Inappropriate for plain text\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\n */\n 0xfff9, 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */, 0xfffa,\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */, 0xfffb,\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */, 0xfffc,\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */, 0xfffd,\n 0xfffd /* REPLACEMENT CHARACTER */,\n\n /**\n * C.9 Tagging characters\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\n */\n 0xe0001, 0xe0001 /* LANGUAGE TAG */, 0xe0020,\n 0xe007f /* [TAGGING CHARACTERS] */,\n\n /**\n * C.3 Private use\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\n */\n\n 0xf0000, 0xffffd /* [PRIVATE USE, PLANE 15] */, 0x100000,\n 0x10fffd /* [PRIVATE USE, PLANE 16] */,\n];\n// prettier-ignore-end\n\nconst isProhibitedCharacter = (character) =>\n inRange(character, non_ASCII_space_characters) ||\n inRange(character, prohibited_characters) ||\n inRange(character, non_ASCII_controls_characters) ||\n inRange(character, non_character_codepoints);\n\n// prettier-ignore-start\n/**\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\n */\nconst bidirectional_r_al = [\n 0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0,\n 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a,\n 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa,\n 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5,\n 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a,\n 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44,\n 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0,\n 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc,\n];\n// prettier-ignore-end\n\nconst isBidirectionalRAL = (character) =>\n inRange(character, bidirectional_r_al);\n\n// prettier-ignore-start\n/**\n * D.2 Characters with bidirectional property \"L\"\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\n */\nconst bidirectional_l = [\n 0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba,\n 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233,\n 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0,\n 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a,\n 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400,\n 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f,\n 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903,\n 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950,\n 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f,\n 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9,\n 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc,\n 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a,\n 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35,\n 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e,\n 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d,\n 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3,\n 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0,\n 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c,\n 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36,\n 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c,\n 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83,\n 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a,\n 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae,\n 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8,\n 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05,\n 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39,\n 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85,\n 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9,\n 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5,\n 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03,\n 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e,\n 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61,\n 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3,\n 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf,\n 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f,\n 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a,\n 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5,\n 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3,\n 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc,\n 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38,\n 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88,\n 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021,\n 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038,\n 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb,\n 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208,\n 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258,\n 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290,\n 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0,\n 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0,\n 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346,\n 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681,\n 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731,\n 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780,\n 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc,\n 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00,\n 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45,\n 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d,\n 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe,\n 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0,\n 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071,\n 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115,\n 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,\n 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145,\n 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9,\n 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041,\n 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c,\n 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260,\n 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376,\n 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000,\n 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06,\n 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2,\n 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e,\n 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d,\n 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172,\n 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454,\n 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6,\n 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0,\n 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514,\n 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544,\n 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9,\n 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd,\n];\n// prettier-ignore-end\n\nconst isBidirectionalL = (character) => inRange(character, bidirectional_l);\n\nexport {\n isUnassignedCodePoint,\n isCommonlyMappedToNothing,\n isNonASCIISpaceCharacter,\n isProhibitedCharacter,\n isBidirectionalRAL,\n isBidirectionalL,\n};\n","import {\n isUnassignedCodePoint,\n isCommonlyMappedToNothing,\n isNonASCIISpaceCharacter,\n isProhibitedCharacter,\n isBidirectionalRAL,\n isBidirectionalL,\n} from './lib/code-points';\n\n// 2.1. Mapping\n\n/**\n * non-ASCII space characters [StringPrep, C.1.2] that can be\n * mapped to SPACE (U+0020)\n */\nconst mapping2space = isNonASCIISpaceCharacter;\n\n/**\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\n * that can be mapped to nothing.\n */\nconst mapping2nothing = isCommonlyMappedToNothing;\n\n// utils\nconst getCodePoint = (character) => character.codePointAt(0);\nconst first = (x) => x[0];\nconst last = (x) => x[x.length - 1];\n\n/**\n * Convert provided string into an array of Unicode Code Points.\n * Based on https://stackoverflow.com/a/21409165/1556249\n * and https://www.npmjs.com/package/code-point-at.\n * @param {string} input\n * @returns {number[]}\n */\nfunction toCodePoints(input) {\n const codepoints = [];\n const size = input.length;\n\n for (let i = 0; i < size; i += 1) {\n const before = input.charCodeAt(i);\n\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\n const next = input.charCodeAt(i + 1);\n\n if (next >= 0xdc00 && next <= 0xdfff) {\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\n i += 1;\n continue;\n }\n }\n\n codepoints.push(before);\n }\n\n return codepoints;\n}\n\n/**\n * SASLprep.\n * @param {string} input\n * @param {Object} opts\n * @param {boolean} opts.allowUnassigned\n * @returns {string}\n */\nfunction saslprep(input, opts = {}) {\n if (typeof input !== 'string') {\n throw new TypeError('Expected string.');\n }\n\n if (input.length === 0) {\n return '';\n }\n\n // 1. Map\n const mapped_input = toCodePoints(input)\n // 1.1 mapping to space\n .map((character) => (mapping2space(character) ? 0x20 : character))\n // 1.2 mapping to nothing\n .filter((character) => !mapping2nothing(character));\n\n // 2. Normalize\n const normalized_input = String.fromCodePoint\n .apply(null, mapped_input)\n .normalize('NFKC');\n\n const normalized_map = toCodePoints(normalized_input);\n\n // 3. Prohibit\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\n\n if (hasProhibited) {\n throw new Error(\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3',\n );\n }\n\n // Unassigned Code Points\n if (opts.allowUnassigned !== true) {\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\n\n if (hasUnassigned) {\n throw new Error(\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5',\n );\n }\n }\n\n // 4. check bidi\n\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\n\n const hasBidiL = normalized_map.some(isBidirectionalL);\n\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\n // contain any LCat character.\n if (hasBidiRAL && hasBidiL) {\n throw new Error(\n 'String must not contain RandALCat and LCat at the same time,' +\n ' see https://tools.ietf.org/html/rfc3454#section-6',\n );\n }\n\n /**\n * 4.2 If a string contains any RandALCat character, a RandALCat\n * character MUST be the first character of the string, and a\n * RandALCat character MUST be the last character of the string.\n */\n\n const isFirstBidiRAL = isBidirectionalRAL(\n getCodePoint(first(normalized_input)),\n );\n const isLastBidiRAL = isBidirectionalRAL(\n getCodePoint(last(normalized_input)),\n );\n\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\n throw new Error(\n 'Bidirectional RandALCat character must be the first and the last' +\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6',\n );\n }\n\n return normalized_input;\n}\n\nexport default saslprep;\n","/*\n PDFSecurity - represents PDF security settings\n By Yang Liu \n */\n\nimport CryptoJS from 'crypto-js';\nimport saslprep from './saslprep/index';\n\nclass PDFSecurity {\n static generateFileID(info = {}) {\n let infoStr = `${info.CreationDate.getTime()}\\n`;\n\n for (let key in info) {\n // eslint-disable-next-line no-prototype-builtins\n if (!info.hasOwnProperty(key)) {\n continue;\n }\n infoStr += `${key}: ${info[key].valueOf()}\\n`;\n }\n\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\n }\n\n static generateRandomWordArray(bytes) {\n return CryptoJS.lib.WordArray.random(bytes);\n }\n\n static create(document, options = {}) {\n if (!options.ownerPassword && !options.userPassword) {\n return null;\n }\n return new PDFSecurity(document, options);\n }\n\n constructor(document, options = {}) {\n if (!options.ownerPassword && !options.userPassword) {\n throw new Error('None of owner password and user password is defined.');\n }\n\n this.document = document;\n this._setupEncryption(options);\n }\n\n _setupEncryption(options) {\n switch (options.pdfVersion) {\n case '1.4':\n case '1.5':\n this.version = 2;\n break;\n case '1.6':\n case '1.7':\n this.version = 4;\n break;\n case '1.7ext3':\n this.version = 5;\n break;\n default:\n this.version = 1;\n break;\n }\n\n const encDict = {\n Filter: 'Standard',\n };\n\n switch (this.version) {\n case 1:\n case 2:\n case 4:\n this._setupEncryptionV1V2V4(this.version, encDict, options);\n break;\n case 5:\n this._setupEncryptionV5(encDict, options);\n break;\n }\n\n this.dictionary = this.document.ref(encDict);\n }\n\n _setupEncryptionV1V2V4(v, encDict, options) {\n let r, permissions;\n switch (v) {\n case 1:\n r = 2;\n this.keyBits = 40;\n permissions = getPermissionsR2(options.permissions);\n break;\n case 2:\n r = 3;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n case 4:\n r = 4;\n this.keyBits = 128;\n permissions = getPermissionsR3(options.permissions);\n break;\n }\n\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\n const paddedOwnerPassword = options.ownerPassword\n ? processPasswordR2R3R4(options.ownerPassword)\n : paddedUserPassword;\n\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\n r,\n this.keyBits,\n paddedUserPassword,\n paddedOwnerPassword,\n );\n this.encryptionKey = getEncryptionKeyR2R3R4(\n r,\n this.keyBits,\n this.document._id,\n paddedUserPassword,\n ownerPasswordEntry,\n permissions,\n );\n let userPasswordEntry;\n if (r === 2) {\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\n } else {\n userPasswordEntry = getUserPasswordR3R4(\n this.document._id,\n this.encryptionKey,\n );\n }\n\n encDict.V = v;\n if (v >= 2) {\n encDict.Length = this.keyBits;\n }\n if (v === 4) {\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV2',\n Length: this.keyBits / 8,\n },\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n }\n encDict.R = r;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.P = permissions;\n }\n\n _setupEncryptionV5(encDict, options) {\n this.keyBits = 256;\n const permissions = getPermissionsR3(options.permissions);\n\n const processedUserPassword = processPasswordR5(options.userPassword);\n const processedOwnerPassword = options.ownerPassword\n ? processPasswordR5(options.ownerPassword)\n : processedUserPassword;\n\n this.encryptionKey = getEncryptionKeyR5(\n PDFSecurity.generateRandomWordArray,\n );\n const userPasswordEntry = getUserPasswordR5(\n processedUserPassword,\n PDFSecurity.generateRandomWordArray,\n );\n const userKeySalt = CryptoJS.lib.WordArray.create(\n userPasswordEntry.words.slice(10, 12),\n 8,\n );\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\n processedUserPassword,\n userKeySalt,\n this.encryptionKey,\n );\n const ownerPasswordEntry = getOwnerPasswordR5(\n processedOwnerPassword,\n userPasswordEntry,\n PDFSecurity.generateRandomWordArray,\n );\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\n ownerPasswordEntry.words.slice(10, 12),\n 8,\n );\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\n processedOwnerPassword,\n ownerKeySalt,\n userPasswordEntry,\n this.encryptionKey,\n );\n const permsEntry = getEncryptedPermissionsR5(\n permissions,\n this.encryptionKey,\n PDFSecurity.generateRandomWordArray,\n );\n\n encDict.V = 5;\n encDict.Length = this.keyBits;\n encDict.CF = {\n StdCF: {\n AuthEvent: 'DocOpen',\n CFM: 'AESV3',\n Length: this.keyBits / 8,\n },\n };\n encDict.StmF = 'StdCF';\n encDict.StrF = 'StdCF';\n encDict.R = 5;\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\n encDict.U = wordArrayToBuffer(userPasswordEntry);\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\n encDict.P = permissions;\n encDict.Perms = wordArrayToBuffer(permsEntry);\n }\n\n getEncryptFn(obj, gen) {\n let digest;\n if (this.version < 5) {\n digest = this.encryptionKey\n .clone()\n .concat(\n CryptoJS.lib.WordArray.create(\n [\n ((obj & 0xff) << 24) |\n ((obj & 0xff00) << 8) |\n ((obj >> 8) & 0xff00) |\n (gen & 0xff),\n (gen & 0xff00) << 16,\n ],\n 5,\n ),\n );\n }\n\n if (this.version === 1 || this.version === 2) {\n let key = CryptoJS.MD5(digest);\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\n return (buffer) =>\n wordArrayToBuffer(\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\n .ciphertext,\n );\n }\n\n let key;\n if (this.version === 4) {\n key = CryptoJS.MD5(\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4)),\n );\n } else {\n key = this.encryptionKey;\n }\n\n const iv = PDFSecurity.generateRandomWordArray(16);\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.Pkcs7,\n iv,\n };\n\n return (buffer) =>\n wordArrayToBuffer(\n iv\n .clone()\n .concat(\n CryptoJS.AES.encrypt(\n CryptoJS.lib.WordArray.create(buffer),\n key,\n options,\n ).ciphertext,\n ),\n );\n }\n\n end() {\n this.dictionary.end();\n }\n}\n\nfunction getPermissionsR2(permissionObject = {}) {\n let permissions = 0xffffffc0 >> 0;\n if (permissionObject.printing) {\n permissions |= 0b000000000100;\n }\n if (permissionObject.modifying) {\n permissions |= 0b000000001000;\n }\n if (permissionObject.copying) {\n permissions |= 0b000000010000;\n }\n if (permissionObject.annotating) {\n permissions |= 0b000000100000;\n }\n return permissions;\n}\n\nfunction getPermissionsR3(permissionObject = {}) {\n let permissions = 0xfffff0c0 >> 0;\n if (permissionObject.printing === 'lowResolution') {\n permissions |= 0b000000000100;\n }\n if (permissionObject.printing === 'highResolution') {\n permissions |= 0b100000000100;\n }\n if (permissionObject.modifying) {\n permissions |= 0b000000001000;\n }\n if (permissionObject.copying) {\n permissions |= 0b000000010000;\n }\n if (permissionObject.annotating) {\n permissions |= 0b000000100000;\n }\n if (permissionObject.fillingForms) {\n permissions |= 0b000100000000;\n }\n if (permissionObject.contentAccessibility) {\n permissions |= 0b001000000000;\n }\n if (permissionObject.documentAssembly) {\n permissions |= 0b010000000000;\n }\n return permissions;\n}\n\nfunction getUserPasswordR2(encryptionKey) {\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\n .ciphertext;\n}\n\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\n const key = encryptionKey.clone();\n let cipher = CryptoJS.MD5(\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId)),\n );\n for (let i = 0; i < 20; i++) {\n const xorRound = Math.ceil(key.sigBytes / 4);\n for (let j = 0; j < xorRound; j++) {\n key.words[j] =\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\n }\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\n }\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\n}\n\nfunction getOwnerPasswordR2R3R4(\n r,\n keyBits,\n paddedUserPassword,\n paddedOwnerPassword,\n) {\n let digest = paddedOwnerPassword;\n let round = r >= 3 ? 51 : 1;\n for (let i = 0; i < round; i++) {\n digest = CryptoJS.MD5(digest);\n }\n\n const key = digest.clone();\n key.sigBytes = keyBits / 8;\n let cipher = paddedUserPassword;\n round = r >= 3 ? 20 : 1;\n for (let i = 0; i < round; i++) {\n const xorRound = Math.ceil(key.sigBytes / 4);\n for (let j = 0; j < xorRound; j++) {\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\n }\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\n }\n return cipher;\n}\n\nfunction getEncryptionKeyR2R3R4(\n r,\n keyBits,\n documentId,\n paddedUserPassword,\n ownerPasswordEntry,\n permissions,\n) {\n let key = paddedUserPassword\n .clone()\n .concat(ownerPasswordEntry)\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\n .concat(CryptoJS.lib.WordArray.create(documentId));\n const round = r >= 3 ? 51 : 1;\n for (let i = 0; i < round; i++) {\n key = CryptoJS.MD5(key);\n key.sigBytes = keyBits / 8;\n }\n return key;\n}\n\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\n const validationSalt = generateRandomWordArray(8);\n const keySalt = generateRandomWordArray(8);\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\n .concat(validationSalt)\n .concat(keySalt);\n}\n\nfunction getUserEncryptionKeyR5(\n processedUserPassword,\n userKeySalt,\n encryptionKey,\n) {\n const key = CryptoJS.SHA256(\n processedUserPassword.clone().concat(userKeySalt),\n );\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.NoPadding,\n iv: CryptoJS.lib.WordArray.create(null, 16),\n };\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getOwnerPasswordR5(\n processedOwnerPassword,\n userPasswordEntry,\n generateRandomWordArray,\n) {\n const validationSalt = generateRandomWordArray(8);\n const keySalt = generateRandomWordArray(8);\n return CryptoJS.SHA256(\n processedOwnerPassword\n .clone()\n .concat(validationSalt)\n .concat(userPasswordEntry),\n )\n .concat(validationSalt)\n .concat(keySalt);\n}\n\nfunction getOwnerEncryptionKeyR5(\n processedOwnerPassword,\n ownerKeySalt,\n userPasswordEntry,\n encryptionKey,\n) {\n const key = CryptoJS.SHA256(\n processedOwnerPassword\n .clone()\n .concat(ownerKeySalt)\n .concat(userPasswordEntry),\n );\n const options = {\n mode: CryptoJS.mode.CBC,\n padding: CryptoJS.pad.NoPadding,\n iv: CryptoJS.lib.WordArray.create(null, 16),\n };\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\n}\n\nfunction getEncryptionKeyR5(generateRandomWordArray) {\n return generateRandomWordArray(32);\n}\n\nfunction getEncryptedPermissionsR5(\n permissions,\n encryptionKey,\n generateRandomWordArray,\n) {\n const cipher = CryptoJS.lib.WordArray.create(\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\n 12,\n ).concat(generateRandomWordArray(4));\n const options = {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.NoPadding,\n };\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\n}\n\nfunction processPasswordR2R3R4(password = '') {\n const out = Buffer.alloc(32);\n const length = password.length;\n let index = 0;\n while (index < length && index < 32) {\n const code = password.charCodeAt(index);\n if (code > 0xff) {\n throw new Error('Password contains one or more invalid characters.');\n }\n out[index] = code;\n index++;\n }\n while (index < 32) {\n out[index] = PASSWORD_PADDING[index - length];\n index++;\n }\n return CryptoJS.lib.WordArray.create(out);\n}\n\nfunction processPasswordR5(password = '') {\n password = unescape(encodeURIComponent(saslprep(password)));\n const length = Math.min(127, password.length);\n const out = Buffer.alloc(length);\n\n for (let i = 0; i < length; i++) {\n out[i] = password.charCodeAt(i);\n }\n\n return CryptoJS.lib.WordArray.create(out);\n}\n\nfunction lsbFirstWord(data) {\n return (\n ((data & 0xff) << 24) |\n ((data & 0xff00) << 8) |\n ((data >> 8) & 0xff00) |\n ((data >> 24) & 0xff)\n );\n}\n\nfunction wordArrayToBuffer(wordArray) {\n const byteArray = [];\n for (let i = 0; i < wordArray.sigBytes; i++) {\n byteArray.push(\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff,\n );\n }\n return Buffer.from(byteArray);\n}\n\nconst PASSWORD_PADDING = [\n 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff,\n 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c,\n 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a,\n];\n\nexport default PDFSecurity;\n","import PDFObject from './object';\n\nconst { number } = PDFObject;\n\nclass PDFGradient {\n constructor(doc) {\n this.doc = doc;\n this.stops = [];\n this.embedded = false;\n this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n stop(pos, color, opacity) {\n if (opacity == null) {\n opacity = 1;\n }\n color = this.doc._normalizeColor(color);\n\n if (this.stops.length === 0) {\n if (color.length === 3) {\n this._colorSpace = 'DeviceRGB';\n } else if (color.length === 4) {\n this._colorSpace = 'DeviceCMYK';\n } else if (color.length === 1) {\n this._colorSpace = 'DeviceGray';\n } else {\n throw new Error('Unknown color space');\n }\n } else if (\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\n ) {\n throw new Error('All gradient stops must use the same color space');\n }\n\n opacity = Math.max(0, Math.min(1, opacity));\n this.stops.push([pos, color, opacity]);\n return this;\n }\n\n setTransform(m11, m12, m21, m22, dx, dy) {\n this.transform = [m11, m12, m21, m22, dx, dy];\n return this;\n }\n\n embed(m) {\n let fn;\n const stopsLength = this.stops.length;\n if (stopsLength === 0) {\n return;\n }\n this.embedded = true;\n this.matrix = m;\n\n // if the last stop comes before 100%, add a copy at 100%\n const last = this.stops[stopsLength - 1];\n if (last[0] < 1) {\n this.stops.push([1, last[1], last[2]]);\n }\n\n const bounds = [];\n const encode = [];\n const stops = [];\n\n for (let i = 0; i < stopsLength - 1; i++) {\n encode.push(0, 1);\n if (i + 2 !== stopsLength) {\n bounds.push(this.stops[i + 1][0]);\n }\n\n fn = this.doc.ref({\n FunctionType: 2,\n Domain: [0, 1],\n C0: this.stops[i + 0][1],\n C1: this.stops[i + 1][1],\n N: 1,\n });\n\n stops.push(fn);\n fn.end();\n }\n\n // if there are only two stops, we don't need a stitching function\n if (stopsLength === 1) {\n fn = stops[0];\n } else {\n fn = this.doc.ref({\n FunctionType: 3, // stitching function\n Domain: [0, 1],\n Functions: stops,\n Bounds: bounds,\n Encode: encode,\n });\n\n fn.end();\n }\n\n this.id = `Sh${++this.doc._gradCount}`;\n\n const shader = this.shader(fn);\n shader.end();\n\n const pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 2,\n Shading: shader,\n Matrix: this.matrix.map(number),\n });\n\n pattern.end();\n\n if (this.stops.some((stop) => stop[2] < 1)) {\n let grad = this.opacityGradient();\n grad._colorSpace = 'DeviceGray';\n\n for (let stop of this.stops) {\n grad.stop(stop[0], [stop[2]]);\n }\n\n grad = grad.embed(this.matrix);\n\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\n\n const form = this.doc.ref({\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: pageBBox,\n Group: {\n Type: 'Group',\n S: 'Transparency',\n CS: 'DeviceGray',\n },\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: grad,\n },\n },\n });\n\n form.write('/Pattern cs /Sh1 scn');\n form.end(`${pageBBox.join(' ')} re f`);\n\n const gstate = this.doc.ref({\n Type: 'ExtGState',\n SMask: {\n Type: 'Mask',\n S: 'Luminosity',\n G: form,\n },\n });\n\n gstate.end();\n\n const opacityPattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1,\n PaintType: 1,\n TilingType: 2,\n BBox: pageBBox,\n XStep: pageBBox[2],\n YStep: pageBBox[3],\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n Pattern: {\n Sh1: pattern,\n },\n ExtGState: {\n Gs1: gstate,\n },\n },\n });\n\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\n\n this.doc.page.patterns[this.id] = opacityPattern;\n } else {\n this.doc.page.patterns[this.id] = pattern;\n }\n\n return pattern;\n }\n\n apply(stroke) {\n // apply gradient transform to existing document ctm\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\n const [m11, m12, m21, m22, dx, dy] = this.transform;\n const m = [\n m0 * m11 + m2 * m12,\n m1 * m11 + m3 * m12,\n m0 * m21 + m2 * m22,\n m1 * m21 + m3 * m22,\n m0 * dx + m2 * dy + m4,\n m1 * dx + m3 * dy + m5,\n ];\n\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\n this.embed(m);\n }\n this.doc._setColorSpace('Pattern', stroke);\n const op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(`/${this.id} ${op}`);\n }\n}\n\nclass PDFLinearGradient extends PDFGradient {\n constructor(doc, x1, y1, x2, y2) {\n super(doc);\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n\n shader(fn) {\n return this.doc.ref({\n ShadingType: 2,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.x2, this.y2],\n Function: fn,\n Extend: [true, true],\n });\n }\n\n opacityGradient() {\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\n }\n}\n\nclass PDFRadialGradient extends PDFGradient {\n constructor(doc, x1, y1, r1, x2, y2, r2) {\n super(doc);\n this.doc = doc;\n this.x1 = x1;\n this.y1 = y1;\n this.r1 = r1;\n this.x2 = x2;\n this.y2 = y2;\n this.r2 = r2;\n }\n\n shader(fn) {\n return this.doc.ref({\n ShadingType: 3,\n ColorSpace: this._colorSpace,\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\n Function: fn,\n Extend: [true, true],\n });\n }\n\n opacityGradient() {\n return new PDFRadialGradient(\n this.doc,\n this.x1,\n this.y1,\n this.r1,\n this.x2,\n this.y2,\n this.r2,\n );\n }\n}\n\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\n","/*\nPDF tiling pattern support. Uncolored only.\n */\n\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\n\nclass PDFTilingPattern {\n constructor(doc, bBox, xStep, yStep, stream) {\n this.doc = doc;\n this.bBox = bBox;\n this.xStep = xStep;\n this.yStep = yStep;\n this.stream = stream;\n }\n\n createPattern() {\n // no resources needed for our current usage\n // required entry\n const resources = this.doc.ref();\n resources.end();\n // apply default transform matrix (flipped in the default doc._ctm)\n // see document.js & gradient.js\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\n const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\n const m = [\n m0 * m11 + m2 * m12,\n m1 * m11 + m3 * m12,\n m0 * m21 + m2 * m22,\n m1 * m21 + m3 * m22,\n m0 * dx + m2 * dy + m4,\n m1 * dx + m3 * dy + m5,\n ];\n const pattern = this.doc.ref({\n Type: 'Pattern',\n PatternType: 1, // tiling\n PaintType: 2, // 1-colored, 2-uncolored\n TilingType: 2, // 2-no distortion\n BBox: this.bBox,\n XStep: this.xStep,\n YStep: this.yStep,\n Matrix: m.map((v) => +v.toFixed(5)),\n Resources: resources,\n });\n pattern.end(this.stream);\n return pattern;\n }\n\n embedPatternColorSpaces() {\n // map each pattern to an underlying color space\n // and embed on each page\n underlyingColorSpaces.forEach((csName) => {\n const csId = this.getPatternColorSpaceId(csName);\n\n if (this.doc.page.colorSpaces[csId]) return;\n const cs = this.doc.ref(['Pattern', csName]);\n cs.end();\n this.doc.page.colorSpaces[csId] = cs;\n });\n }\n\n getPatternColorSpaceId(underlyingColorspace) {\n return `CsP${underlyingColorspace}`;\n }\n\n embed() {\n if (!this.id) {\n this.doc._patternCount = this.doc._patternCount + 1;\n this.id = 'P' + this.doc._patternCount;\n this.pattern = this.createPattern();\n }\n\n // patterns are embedded in each page\n if (!this.doc.page.patterns[this.id]) {\n this.doc.page.patterns[this.id] = this.pattern;\n }\n }\n\n apply(stroke, patternColor) {\n // do any embedding/creating that might be needed\n this.embedPatternColorSpaces();\n this.embed();\n\n const normalizedColor = this.doc._normalizeColor(patternColor);\n if (!normalizedColor)\n throw Error(`invalid pattern color. (value: ${patternColor})`);\n\n // select one of the pattern color spaces\n const csId = this.getPatternColorSpaceId(\n this.doc._getColorSpace(normalizedColor),\n );\n this.doc._setColorSpace(csId, stroke);\n\n // stroke/fill using the pattern and color (in the above underlying color space)\n const op = stroke ? 'SCN' : 'scn';\n return this.doc.addContent(\n `${normalizedColor.join(' ')} /${this.id} ${op}`,\n );\n }\n}\n\nexport default { PDFTilingPattern };\n","import Gradient from '../gradient';\nimport pattern from '../pattern';\nimport SpotColor from '../spotcolor';\n\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\nconst { PDFTilingPattern } = pattern;\n\nexport default {\n initColor() {\n this.spotColors = {};\n // The opacity dictionaries\n this._opacityRegistry = {};\n this._opacityCount = 0;\n this._patternCount = 0;\n this._gradCount = 0;\n },\n\n _normalizeColor(color) {\n if (typeof color === 'string') {\n if (color.charAt(0) === '#') {\n if (color.length === 4) {\n color = color.replace(\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\n '#$1$1$2$2$3$3',\n );\n }\n const hex = parseInt(color.slice(1), 16);\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\n } else if (namedColors[color]) {\n color = namedColors[color];\n } else if (this.spotColors[color]) {\n return this.spotColors[color];\n }\n }\n\n if (Array.isArray(color)) {\n // RGB\n if (color.length === 3) {\n color = color.map((part) => part / 255);\n // CMYK\n } else if (color.length === 4) {\n color = color.map((part) => part / 100);\n }\n return color;\n }\n\n return null;\n },\n\n _setColor(color, stroke) {\n if (color instanceof PDFGradient) {\n color.apply(stroke);\n return true;\n // see if tiling pattern, decode & apply it it\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\n color[0].apply(stroke, color[1]);\n return true;\n }\n // any other case should be a normal color and not a pattern\n return this._setColorCore(color, stroke);\n },\n\n _setColorCore(color, stroke) {\n color = this._normalizeColor(color);\n if (!color) {\n return false;\n }\n\n const op = stroke ? 'SCN' : 'scn';\n const space = this._getColorSpace(color);\n this._setColorSpace(space, stroke);\n\n if (color instanceof SpotColor) {\n this.page.colorSpaces[color.id] = color.ref;\n this.addContent(`1 ${op}`);\n } else {\n this.addContent(`${color.join(' ')} ${op}`);\n }\n\n return true;\n },\n\n _setColorSpace(space, stroke) {\n const op = stroke ? 'CS' : 'cs';\n return this.addContent(`/${space} ${op}`);\n },\n\n _getColorSpace(color) {\n if (color instanceof SpotColor) {\n return color.id;\n }\n\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\n },\n\n fillColor(color, opacity) {\n const set = this._setColor(color, false);\n if (set) {\n this.fillOpacity(opacity);\n }\n\n // save this for text wrapper, which needs to reset\n // the fill color on new pages\n this._fillColor = [color, opacity];\n return this;\n },\n\n strokeColor(color, opacity) {\n const set = this._setColor(color, true);\n if (set) {\n this.strokeOpacity(opacity);\n }\n return this;\n },\n\n opacity(opacity) {\n this._doOpacity(opacity, opacity);\n return this;\n },\n\n fillOpacity(opacity) {\n this._doOpacity(opacity, null);\n return this;\n },\n\n strokeOpacity(opacity) {\n this._doOpacity(null, opacity);\n return this;\n },\n\n _doOpacity(fillOpacity, strokeOpacity) {\n let dictionary, name;\n if (fillOpacity == null && strokeOpacity == null) {\n return;\n }\n\n if (fillOpacity != null) {\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\n }\n if (strokeOpacity != null) {\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\n }\n const key = `${fillOpacity}_${strokeOpacity}`;\n\n if (this._opacityRegistry[key]) {\n [dictionary, name] = this._opacityRegistry[key];\n } else {\n dictionary = { Type: 'ExtGState' };\n\n if (fillOpacity != null) {\n dictionary.ca = fillOpacity;\n }\n if (strokeOpacity != null) {\n dictionary.CA = strokeOpacity;\n }\n\n dictionary = this.ref(dictionary);\n dictionary.end();\n const id = ++this._opacityCount;\n name = `Gs${id}`;\n this._opacityRegistry[key] = [dictionary, name];\n }\n\n this.page.ext_gstates[name] = dictionary;\n return this.addContent(`/${name} gs`);\n },\n\n linearGradient(x1, y1, x2, y2) {\n return new PDFLinearGradient(this, x1, y1, x2, y2);\n },\n\n radialGradient(x1, y1, r1, x2, y2, r2) {\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\n },\n\n pattern(bbox, xStep, yStep, stream) {\n return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\n },\n\n addSpotColor(name, C, M, Y, K) {\n const color = new SpotColor(this, name, C, M, Y, K);\n this.spotColors[name] = color;\n return this;\n },\n};\n\nvar namedColors = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50],\n};\n","let cx, cy, px, py, sx, sy;\n\ncx = cy = px = py = sx = sy = 0;\n\nconst parameters = {\n A: 7,\n a: 7,\n C: 6,\n c: 6,\n H: 1,\n h: 1,\n L: 2,\n l: 2,\n M: 2,\n m: 2,\n Q: 4,\n q: 4,\n S: 4,\n s: 4,\n T: 2,\n t: 2,\n V: 1,\n v: 1,\n Z: 0,\n z: 0,\n};\n\nconst parse = function (path) {\n let cmd;\n const ret = [];\n let args = [];\n let curArg = '';\n let foundDecimal = false;\n let params = 0;\n\n for (let c of path) {\n if (parameters[c] != null) {\n params = parameters[c];\n if (cmd) {\n // save existing command\n if (curArg.length > 0) {\n args[args.length] = +curArg;\n }\n ret[ret.length] = { cmd, args };\n\n args = [];\n curArg = '';\n foundDecimal = false;\n }\n\n cmd = c;\n } else if (\n [' ', ','].includes(c) ||\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\n (c === '.' && foundDecimal)\n ) {\n if (curArg.length === 0) {\n continue;\n }\n\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n\n foundDecimal = c === '.';\n\n // fix for negative numbers or repeated decimals with no delimeter between commands\n curArg = ['-', '.'].includes(c) ? c : '';\n } else {\n curArg += c;\n if (c === '.') {\n foundDecimal = true;\n }\n }\n }\n\n // add the last command\n if (curArg.length > 0) {\n if (args.length === params) {\n // handle reused commands\n ret[ret.length] = { cmd, args };\n args = [+curArg];\n\n // handle assumed commands\n if (cmd === 'M') {\n cmd = 'L';\n }\n if (cmd === 'm') {\n cmd = 'l';\n }\n } else {\n args[args.length] = +curArg;\n }\n }\n\n ret[ret.length] = { cmd, args };\n\n return ret;\n};\n\nconst apply = function (commands, doc) {\n // current point, control point, and subpath starting point\n cx = cy = px = py = sx = sy = 0;\n\n // run the commands\n for (let i = 0; i < commands.length; i++) {\n const c = commands[i];\n if (typeof runners[c.cmd] === 'function') {\n runners[c.cmd](doc, c.args);\n }\n }\n};\n\nconst runners = {\n M(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n\n m(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n sx = cx;\n sy = cy;\n return doc.moveTo(cx, cy);\n },\n\n C(doc, a) {\n cx = a[4];\n cy = a[5];\n px = a[2];\n py = a[3];\n return doc.bezierCurveTo(...a);\n },\n\n c(doc, a) {\n doc.bezierCurveTo(\n a[0] + cx,\n a[1] + cy,\n a[2] + cx,\n a[3] + cy,\n a[4] + cx,\n a[5] + cy,\n );\n px = cx + a[2];\n py = cy + a[3];\n cx += a[4];\n return (cy += a[5]);\n },\n\n S(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\n px = a[0];\n py = a[1];\n cx = a[2];\n return (cy = a[3]);\n },\n\n s(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n }\n\n doc.bezierCurveTo(\n cx - (px - cx),\n cy - (py - cy),\n cx + a[0],\n cy + a[1],\n cx + a[2],\n cy + a[3],\n );\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return (cy += a[3]);\n },\n\n Q(doc, a) {\n px = a[0];\n py = a[1];\n cx = a[2];\n cy = a[3];\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\n },\n\n q(doc, a) {\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\n px = cx + a[0];\n py = cy + a[1];\n cx += a[2];\n return (cy += a[3]);\n },\n\n T(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, a[0], a[1]);\n px = cx - (px - cx);\n py = cy - (py - cy);\n cx = a[0];\n return (cy = a[1]);\n },\n\n t(doc, a) {\n if (px === null) {\n px = cx;\n py = cy;\n } else {\n px = cx - (px - cx);\n py = cy - (py - cy);\n }\n\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\n cx += a[0];\n return (cy += a[1]);\n },\n\n A(doc, a) {\n solveArc(doc, cx, cy, a);\n cx = a[5];\n return (cy = a[6]);\n },\n\n a(doc, a) {\n a[5] += cx;\n a[6] += cy;\n solveArc(doc, cx, cy, a);\n cx = a[5];\n return (cy = a[6]);\n },\n\n L(doc, a) {\n cx = a[0];\n cy = a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n l(doc, a) {\n cx += a[0];\n cy += a[1];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n H(doc, a) {\n cx = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n h(doc, a) {\n cx += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n V(doc, a) {\n cy = a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n v(doc, a) {\n cy += a[0];\n px = py = null;\n return doc.lineTo(cx, cy);\n },\n\n Z(doc) {\n doc.closePath();\n cx = sx;\n return (cy = sy);\n },\n\n z(doc) {\n doc.closePath();\n cx = sx;\n return (cy = sy);\n },\n};\n\nconst solveArc = function (doc, x, y, coords) {\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\n\n for (let seg of segs) {\n const bez = segmentToBezier(...seg);\n doc.bezierCurveTo(...bez);\n }\n};\n\n// from Inkscape svgtopdf, thanks!\nconst arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const th = rotateX * (Math.PI / 180);\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) {\n sfactor_sq = 0;\n }\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep === large) {\n sfactor = -sfactor;\n }\n\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n\n let th_arc = th1 - th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += 2 * Math.PI;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= 2 * Math.PI;\n }\n\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\n const result = [];\n\n for (let i = 0; i < segments; i++) {\n const th2 = th0 + (i * th_arc) / segments;\n const th3 = th0 + ((i + 1) * th_arc) / segments;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return result;\n};\n\nconst segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n\n const th_half = 0.5 * (th1 - th0);\n const t =\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\n Math.sin(th_half);\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\n const x3 = cx + Math.cos(th1);\n const y3 = cy + Math.sin(th1);\n const x2 = x3 + t * Math.sin(th1);\n const y2 = y3 - t * Math.cos(th1);\n\n return [\n a00 * x1 + a01 * y1,\n a10 * x1 + a11 * y1,\n a00 * x2 + a01 * y2,\n a10 * x2 + a11 * y2,\n a00 * x3 + a01 * y3,\n a10 * x3 + a11 * y3,\n ];\n};\n\nclass SVGPath {\n static apply(doc, path) {\n const commands = parse(path);\n apply(commands, doc);\n }\n}\n\nexport default SVGPath;\n","import SVGPath from '../path';\nimport PDFObject from '../object';\n\nconst { number } = PDFObject;\n\n// This constant is used to approximate a symmetrical arc using a cubic\n// Bezier curve.\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\nexport default {\n initVector() {\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\n this._ctmStack = [];\n },\n\n save() {\n this._ctmStack.push(this._ctm.slice());\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\n return this.addContent('q');\n },\n\n restore() {\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\n return this.addContent('Q');\n },\n\n closePath() {\n return this.addContent('h');\n },\n\n lineWidth(w) {\n return this.addContent(`${number(w)} w`);\n },\n\n _CAP_STYLES: {\n BUTT: 0,\n ROUND: 1,\n SQUARE: 2,\n },\n\n lineCap(c) {\n if (typeof c === 'string') {\n c = this._CAP_STYLES[c.toUpperCase()];\n }\n return this.addContent(`${c} J`);\n },\n\n _JOIN_STYLES: {\n MITER: 0,\n ROUND: 1,\n BEVEL: 2,\n },\n\n lineJoin(j) {\n if (typeof j === 'string') {\n j = this._JOIN_STYLES[j.toUpperCase()];\n }\n return this.addContent(`${j} j`);\n },\n\n miterLimit(m) {\n return this.addContent(`${number(m)} M`);\n },\n\n dash(length, options = {}) {\n const originalLength = length;\n if (!Array.isArray(length)) {\n length = [length, options.space || length];\n }\n\n const valid = length.every((x) => Number.isFinite(x) && x > 0);\n if (!valid) {\n throw new Error(\n `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\n options,\n )}) invalid, lengths must be numeric and greater than zero`,\n );\n }\n\n length = length.map(number).join(' ');\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\n },\n\n undash() {\n return this.addContent('[] 0 d');\n },\n\n moveTo(x, y) {\n return this.addContent(`${number(x)} ${number(y)} m`);\n },\n\n lineTo(x, y) {\n return this.addContent(`${number(x)} ${number(y)} l`);\n },\n\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n return this.addContent(\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\n x,\n )} ${number(y)} c`,\n );\n },\n\n quadraticCurveTo(cpx, cpy, x, y) {\n return this.addContent(\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`,\n );\n },\n\n rect(x, y, w, h) {\n return this.addContent(\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`,\n );\n },\n\n roundedRect(x, y, w, h, r) {\n if (r == null) {\n r = 0;\n }\n r = Math.min(r, 0.5 * w, 0.5 * h);\n\n // amount to inset control points from corners (see `ellipse`)\n const c = r * (1.0 - KAPPA);\n\n this.moveTo(x + r, y);\n this.lineTo(x + w - r, y);\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\n this.lineTo(x + w, y + h - r);\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\n this.lineTo(x + r, y + h);\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\n this.lineTo(x, y + r);\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\n return this.closePath();\n },\n\n ellipse(x, y, r1, r2) {\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\n if (r2 == null) {\n r2 = r1;\n }\n x -= r1;\n y -= r2;\n const ox = r1 * KAPPA;\n const oy = r2 * KAPPA;\n const xe = x + r1 * 2;\n const ye = y + r2 * 2;\n const xm = x + r1;\n const ym = y + r2;\n\n this.moveTo(x, ym);\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n return this.closePath();\n },\n\n circle(x, y, radius) {\n return this.ellipse(x, y, radius);\n },\n\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\n if (anticlockwise == null) {\n anticlockwise = false;\n }\n const TWO_PI = 2.0 * Math.PI;\n const HALF_PI = 0.5 * Math.PI;\n\n let deltaAng = endAngle - startAngle;\n\n if (Math.abs(deltaAng) > TWO_PI) {\n // draw only full circle if more than that is specified\n deltaAng = TWO_PI;\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\n // necessary to flip direction of rendering\n const dir = anticlockwise ? -1 : 1;\n deltaAng = dir * TWO_PI + deltaAng;\n }\n\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\n const segAng = deltaAng / numSegs;\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\n let curAng = startAngle;\n\n // component distances between anchor point and control point\n let deltaCx = -Math.sin(curAng) * handleLen;\n let deltaCy = Math.cos(curAng) * handleLen;\n\n // anchor point\n let ax = x + Math.cos(curAng) * radius;\n let ay = y + Math.sin(curAng) * radius;\n\n // calculate and render segments\n this.moveTo(ax, ay);\n\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\n // starting control point\n const cp1x = ax + deltaCx;\n const cp1y = ay + deltaCy;\n\n // step angle\n curAng += segAng;\n\n // next anchor point\n ax = x + Math.cos(curAng) * radius;\n ay = y + Math.sin(curAng) * radius;\n\n // next control point delta\n deltaCx = -Math.sin(curAng) * handleLen;\n deltaCy = Math.cos(curAng) * handleLen;\n\n // ending control point\n const cp2x = ax - deltaCx;\n const cp2y = ay - deltaCy;\n\n // render segment\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\n }\n\n return this;\n },\n\n polygon(...points) {\n this.moveTo(...(points.shift() || []));\n for (let point of points) {\n this.lineTo(...(point || []));\n }\n return this.closePath();\n },\n\n path(path) {\n SVGPath.apply(this, path);\n return this;\n },\n\n _windingRule(rule) {\n if (/even-?odd/.test(rule)) {\n return '*';\n }\n\n return '';\n },\n\n fill(color, rule) {\n if (/(even-?odd)|(non-?zero)/.test(color)) {\n rule = color;\n color = null;\n }\n\n if (color) {\n this.fillColor(color);\n }\n return this.addContent(`f${this._windingRule(rule)}`);\n },\n\n stroke(color) {\n if (color) {\n this.strokeColor(color);\n }\n return this.addContent('S');\n },\n\n fillAndStroke(fillColor, strokeColor, rule) {\n if (strokeColor == null) {\n strokeColor = fillColor;\n }\n const isFillRule = /(even-?odd)|(non-?zero)/;\n if (isFillRule.test(fillColor)) {\n rule = fillColor;\n fillColor = null;\n }\n\n if (isFillRule.test(strokeColor)) {\n rule = strokeColor;\n strokeColor = fillColor;\n }\n\n if (fillColor) {\n this.fillColor(fillColor);\n this.strokeColor(strokeColor);\n }\n\n return this.addContent(`B${this._windingRule(rule)}`);\n },\n\n clip(rule) {\n return this.addContent(`W${this._windingRule(rule)} n`);\n },\n\n transform(m11, m12, m21, m22, dx, dy) {\n // keep track of the current transformation matrix\n if (\n m11 === 1 &&\n m12 === 0 &&\n m21 === 0 &&\n m22 === 1 &&\n dx === 0 &&\n dy === 0\n ) {\n // Ignore identity transforms\n return this;\n }\n const m = this._ctm;\n const [m0, m1, m2, m3, m4, m5] = m;\n m[0] = m0 * m11 + m2 * m12;\n m[1] = m1 * m11 + m3 * m12;\n m[2] = m0 * m21 + m2 * m22;\n m[3] = m1 * m21 + m3 * m22;\n m[4] = m0 * dx + m2 * dy + m4;\n m[5] = m1 * dx + m3 * dy + m5;\n\n const values = [m11, m12, m21, m22, dx, dy].map((v) => number(v)).join(' ');\n return this.addContent(`${values} cm`);\n },\n\n translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n },\n\n rotate(angle, options = {}) {\n let y;\n const rad = (angle * Math.PI) / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n let x = (y = 0);\n\n if (options.origin != null) {\n [x, y] = options.origin;\n const x1 = x * cos - y * sin;\n const y1 = x * sin + y * cos;\n x -= x1;\n y -= y1;\n }\n\n return this.transform(cos, sin, -sin, cos, x, y);\n },\n\n scale(xFactor, yFactor, options = {}) {\n let y;\n if (yFactor == null) {\n yFactor = xFactor;\n }\n if (typeof yFactor === 'object') {\n options = yFactor;\n yFactor = xFactor;\n }\n\n let x = (y = 0);\n if (options.origin != null) {\n [x, y] = options.origin;\n x -= xFactor * x;\n y -= yFactor * y;\n }\n\n return this.transform(xFactor, 0, 0, yFactor, x, y);\n },\n};\n","const WIN_ANSI_MAP = {\n 402: 131,\n 8211: 150,\n 8212: 151,\n 8216: 145,\n 8217: 146,\n 8218: 130,\n 8220: 147,\n 8221: 148,\n 8222: 132,\n 8224: 134,\n 8225: 135,\n 8226: 149,\n 8230: 133,\n 8364: 128,\n 8240: 137,\n 8249: 139,\n 8250: 155,\n 710: 136,\n 8482: 153,\n 338: 140,\n 339: 156,\n 732: 152,\n 352: 138,\n 353: 154,\n 376: 159,\n 381: 142,\n 382: 158,\n};\n\nconst characters = `\\\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n \nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n \nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n \ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n \nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n \nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n \nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n \nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis\\\n`.split(/\\s+/);\n\nclass AFMFont {\n /**\n * @param {string} contents\n */\n constructor(contents) {\n this.attributes = {};\n this.glyphWidths = {};\n this.boundingBoxes = {};\n this.kernPairs = {};\n\n this.parse(contents);\n\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map((e) => +e);\n this.ascender = +(this.attributes['Ascender'] || 0);\n this.descender = +(this.attributes['Descender'] || 0);\n this.xHeight = +(this.attributes['XHeight'] || 0);\n this.capHeight = +(this.attributes['CapHeight'] || 0);\n this.lineGap =\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\n }\n\n /**\n * @param {string} contents\n */\n parse(contents) {\n let section = '';\n for (let line of contents.split('\\n')) {\n var match;\n var a;\n if ((match = line.match(/^Start(\\w+)/))) {\n section = match[1];\n continue;\n } else if ((match = line.match(/^End(\\w+)/))) {\n section = '';\n continue;\n }\n\n switch (section) {\n case 'FontMetrics':\n match = line.match(/(^\\w+)\\s+(.*)/);\n var key = match[1];\n var value = match[2];\n\n if ((a = this.attributes[key])) {\n if (!Array.isArray(a)) {\n a = this.attributes[key] = [a];\n }\n a.push(value);\n } else {\n this.attributes[key] = value;\n }\n break;\n\n case 'CharMetrics':\n if (!/^CH?\\s/.test(line)) {\n continue;\n }\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\n break;\n\n case 'KernPairs':\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\n if (match) {\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\n }\n break;\n }\n }\n }\n\n /**\n * @param {string} text\n * @returns\n */\n encodeText(text) {\n const res = [];\n for (let i = 0, len = text.length; i < len; i++) {\n let char = text.charCodeAt(i);\n char = WIN_ANSI_MAP[char] || char;\n res.push(char.toString(16));\n }\n\n return res;\n }\n\n glyphsForString(string) {\n const glyphs = [];\n\n for (let i = 0, len = string.length; i < len; i++) {\n const charCode = string.charCodeAt(i);\n glyphs.push(this.characterToGlyph(charCode));\n }\n\n return glyphs;\n }\n\n characterToGlyph(character) {\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\n }\n\n widthOfGlyph(glyph) {\n return this.glyphWidths[glyph] || 0;\n }\n\n getKernPair(left, right) {\n return this.kernPairs[left + '\\0' + right] || 0;\n }\n\n advancesForGlyphs(glyphs) {\n const advances = [];\n\n for (let index = 0; index < glyphs.length; index++) {\n const left = glyphs[index];\n const right = glyphs[index + 1];\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\n }\n\n return advances;\n }\n}\n\nexport default AFMFont;\n","class PDFFont {\n constructor() {}\n\n encode() {\n throw new Error('Must be implemented by subclasses');\n }\n\n widthOfString() {\n throw new Error('Must be implemented by subclasses');\n }\n\n ref() {\n return this.dictionary != null\n ? this.dictionary\n : (this.dictionary = this.document.ref());\n }\n\n finalize() {\n if (this.embedded || this.dictionary == null) {\n return;\n }\n\n this.embed();\n this.embedded = true;\n }\n\n embed() {\n throw new Error('Must be implemented by subclasses');\n }\n\n lineHeight(size, includeGap = false) {\n const gap = includeGap ? this.lineGap : 0;\n return ((this.ascender + gap - this.descender) / 1000) * size;\n }\n}\n\nexport default PDFFont;\n","import AFMFont from './afm';\nimport PDFFont from '../font';\nimport fs from 'fs';\n\n// This insanity is so bundlers can inline the font files\nconst STANDARD_FONTS = {\n Courier() {\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\n },\n 'Courier-Bold'() {\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\n },\n 'Courier-Oblique'() {\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\n },\n 'Courier-BoldOblique'() {\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\n },\n Helvetica() {\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\n },\n 'Helvetica-Bold'() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\n },\n 'Helvetica-Oblique'() {\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\n },\n 'Helvetica-BoldOblique'() {\n return fs.readFileSync(\n __dirname + '/data/Helvetica-BoldOblique.afm',\n 'utf8',\n );\n },\n 'Times-Roman'() {\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\n },\n 'Times-Bold'() {\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\n },\n 'Times-Italic'() {\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\n },\n 'Times-BoldItalic'() {\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\n },\n Symbol() {\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\n },\n ZapfDingbats() {\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\n },\n};\n\nclass StandardFont extends PDFFont {\n constructor(document, name, id) {\n super();\n this.document = document;\n this.name = name;\n this.id = id;\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\n ({\n ascender: this.ascender,\n descender: this.descender,\n bbox: this.bbox,\n lineGap: this.lineGap,\n xHeight: this.xHeight,\n capHeight: this.capHeight,\n } = this.font);\n }\n\n embed() {\n this.dictionary.data = {\n Type: 'Font',\n BaseFont: this.name,\n Subtype: 'Type1',\n Encoding: 'WinAnsiEncoding',\n };\n\n return this.dictionary.end();\n }\n\n encode(text) {\n const encoded = this.font.encodeText(text);\n const glyphs = this.font.glyphsForString(`${text}`);\n const advances = this.font.advancesForGlyphs(glyphs);\n const positions = [];\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n positions.push({\n xAdvance: advances[i],\n yAdvance: 0,\n xOffset: 0,\n yOffset: 0,\n advanceWidth: this.font.widthOfGlyph(glyph),\n });\n }\n\n return [encoded, positions];\n }\n\n widthOfString(string, size) {\n const glyphs = this.font.glyphsForString(`${string}`);\n const advances = this.font.advancesForGlyphs(glyphs);\n\n let width = 0;\n for (let advance of advances) {\n width += advance;\n }\n\n const scale = size / 1000;\n return width * scale;\n }\n\n static isStandardFont(name) {\n return name in STANDARD_FONTS;\n }\n}\n\nexport default StandardFont;\n","import PDFFont from '../font';\n\nconst toHex = function (num) {\n return `0000${num.toString(16)}`.slice(-4);\n};\n\nclass EmbeddedFont extends PDFFont {\n constructor(document, font, id) {\n super();\n this.document = document;\n this.font = font;\n this.id = id;\n this.subset = this.font.createSubset();\n this.unicode = [[0]];\n this.widths = [this.font.getGlyph(0).advanceWidth];\n\n this.name = this.font.postscriptName;\n this.scale = 1000 / this.font.unitsPerEm;\n this.ascender = this.font.ascent * this.scale;\n this.descender = this.font.descent * this.scale;\n this.xHeight = this.font.xHeight * this.scale;\n this.capHeight = this.font.capHeight * this.scale;\n this.lineGap = this.font.lineGap * this.scale;\n this.bbox = this.font.bbox;\n\n if (document.options.fontLayoutCache !== false) {\n this.layoutCache = Object.create(null);\n }\n }\n\n layoutRun(text, features) {\n const run = this.font.layout(text, features);\n\n // Normalize position values\n for (let i = 0; i < run.positions.length; i++) {\n const position = run.positions[i];\n for (let key in position) {\n position[key] *= this.scale;\n }\n\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\n }\n\n return run;\n }\n\n layoutCached(text) {\n if (!this.layoutCache) {\n return this.layoutRun(text);\n }\n let cached;\n if ((cached = this.layoutCache[text])) {\n return cached;\n }\n\n const run = this.layoutRun(text);\n this.layoutCache[text] = run;\n return run;\n }\n\n layout(text, features, onlyWidth) {\n // Skip the cache if any user defined features are applied\n if (features) {\n return this.layoutRun(text, features);\n }\n\n let glyphs = onlyWidth ? null : [];\n let positions = onlyWidth ? null : [];\n let advanceWidth = 0;\n\n // Split the string by words to increase cache efficiency.\n // For this purpose, spaces and tabs are a good enough delimeter.\n let last = 0;\n let index = 0;\n while (index <= text.length) {\n var needle;\n if (\n (index === text.length && last < index) ||\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\n ) {\n const run = this.layoutCached(text.slice(last, ++index));\n if (!onlyWidth) {\n glyphs = glyphs.concat(run.glyphs);\n positions = positions.concat(run.positions);\n }\n\n advanceWidth += run.advanceWidth;\n last = index;\n } else {\n index++;\n }\n }\n\n return { glyphs, positions, advanceWidth };\n }\n\n encode(text, features) {\n const { glyphs, positions } = this.layout(text, features);\n\n const res = [];\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n const gid = this.subset.includeGlyph(glyph.id);\n res.push(`0000${gid.toString(16)}`.slice(-4));\n\n if (this.widths[gid] == null) {\n this.widths[gid] = glyph.advanceWidth * this.scale;\n }\n if (this.unicode[gid] == null) {\n this.unicode[gid] = glyph.codePoints;\n }\n }\n\n return [res, positions];\n }\n\n widthOfString(string, size, features) {\n const width = this.layout(string, features, true).advanceWidth;\n const scale = size / 1000;\n return width * scale;\n }\n\n embed() {\n const isCFF = this.subset.cff != null;\n const fontFile = this.document.ref();\n\n if (isCFF) {\n fontFile.data.Subtype = 'CIDFontType0C';\n }\n\n fontFile.end(this.subset.encode());\n\n const familyClass =\n ((this.font['OS/2'] != null\n ? this.font['OS/2'].sFamilyClass\n : undefined) || 0) >> 8;\n let flags = 0;\n if (this.font.post.isFixedPitch) {\n flags |= 1 << 0;\n }\n if (1 <= familyClass && familyClass <= 7) {\n flags |= 1 << 1;\n }\n flags |= 1 << 2; // assume the font uses non-latin characters\n if (familyClass === 10) {\n flags |= 1 << 3;\n }\n if (this.font.head.macStyle.italic) {\n flags |= 1 << 6;\n }\n\n // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\n const tag = [1, 2, 3, 4, 5, 6]\n .map((i) => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\n .join('');\n const name = tag + '+' + this.font.postscriptName?.replaceAll(' ', '_');\n\n const { bbox } = this.font;\n const descriptor = this.document.ref({\n Type: 'FontDescriptor',\n FontName: name,\n Flags: flags,\n FontBBox: [\n bbox.minX * this.scale,\n bbox.minY * this.scale,\n bbox.maxX * this.scale,\n bbox.maxY * this.scale,\n ],\n ItalicAngle: this.font.italicAngle,\n Ascent: this.ascender,\n Descent: this.descender,\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\n XHeight: (this.font.xHeight || 0) * this.scale,\n StemV: 0,\n }); // not sure how to calculate this\n\n if (isCFF) {\n descriptor.data.FontFile3 = fontFile;\n } else {\n descriptor.data.FontFile2 = fontFile;\n }\n\n if (this.document.subset && this.document.subset === 1) {\n const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\n const CIDSetRef = this.document.ref();\n CIDSetRef.write(CIDSet);\n CIDSetRef.end();\n\n descriptor.data.CIDSet = CIDSetRef;\n }\n\n descriptor.end();\n\n const descendantFontData = {\n Type: 'Font',\n Subtype: 'CIDFontType0',\n BaseFont: name,\n CIDSystemInfo: {\n Registry: new String('Adobe'),\n Ordering: new String('Identity'),\n Supplement: 0,\n },\n FontDescriptor: descriptor,\n W: [0, this.widths],\n };\n\n if (!isCFF) {\n descendantFontData.Subtype = 'CIDFontType2';\n descendantFontData.CIDToGIDMap = 'Identity';\n }\n\n const descendantFont = this.document.ref(descendantFontData);\n\n descendantFont.end();\n\n this.dictionary.data = {\n Type: 'Font',\n Subtype: 'Type0',\n BaseFont: name,\n Encoding: 'Identity-H',\n DescendantFonts: [descendantFont],\n ToUnicode: this.toUnicodeCmap(),\n };\n\n return this.dictionary.end();\n }\n\n // Maps the glyph ids encoded in the PDF back to unicode strings\n // Because of ligature substitutions and the like, there may be one or more\n // unicode characters represented by each glyph.\n toUnicodeCmap() {\n const cmap = this.document.ref();\n\n const entries = [];\n for (let codePoints of this.unicode) {\n const encoded = [];\n\n // encode codePoints to utf16\n for (let value of codePoints) {\n if (value > 0xffff) {\n value -= 0x10000;\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\n value = 0xdc00 | (value & 0x3ff);\n }\n\n encoded.push(toHex(value));\n }\n\n entries.push(`<${encoded.join(' ')}>`);\n }\n\n const chunkSize = 256;\n const chunks = Math.ceil(entries.length / chunkSize);\n const ranges = [];\n for (let i = 0; i < chunks; i++) {\n const start = i * chunkSize;\n const end = Math.min((i + 1) * chunkSize, entries.length);\n ranges.push(\n `<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`,\n );\n }\n\n cmap.end(`\\\n/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n1 beginbfrange\n${ranges.join('\\n')}\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend\\\n`);\n\n return cmap;\n }\n}\n\nexport default EmbeddedFont;\n","import fs from 'fs';\nimport * as fontkit from 'fontkit';\nimport StandardFont from './font/standard';\nimport EmbeddedFont from './font/embedded';\n\nclass PDFFontFactory {\n static open(document, src, family, id) {\n let font;\n if (typeof src === 'string') {\n if (StandardFont.isStandardFont(src)) {\n return new StandardFont(document, src, id);\n }\n\n src = fs.readFileSync(src);\n }\n if (src instanceof Uint8Array) {\n font = fontkit.create(src, family);\n } else if (src instanceof ArrayBuffer) {\n font = fontkit.create(new Uint8Array(src), family);\n }\n\n if (font == null) {\n throw new Error('Not a supported font format or standard PDF font.');\n }\n\n return new EmbeddedFont(document, font, id);\n }\n}\n\nexport default PDFFontFactory;\n","import PDFFontFactory from '../font_factory';\nimport { CM_TO_IN, IN_TO_PT, MM_TO_CM, PC_TO_PT, PX_TO_IN } from '../utils';\n\nconst isEqualFont = (font1, font2) => {\n // compare font checksum\n if (\n font1.font._tables?.head?.checkSumAdjustment !==\n font2.font._tables?.head?.checkSumAdjustment\n ) {\n return false;\n }\n\n // compare font name table\n if (\n JSON.stringify(font1.font._tables?.name?.records) !==\n JSON.stringify(font2.font._tables?.name?.records)\n ) {\n return false;\n }\n\n return true;\n};\n\nexport default {\n initFonts(\n defaultFont = 'Helvetica',\n defaultFontFamily = null,\n defaultFontSize = 12,\n ) {\n // Lookup table for embedded fonts\n this._fontFamilies = {};\n this._fontCount = 0;\n\n // Font state\n // Useful to export the font builder so that someone can create a snapshot of the current state\n // (e.g. Reverting back to the previous font)\n this._fontSource = defaultFont;\n this._fontFamily = defaultFontFamily;\n this._fontSize = defaultFontSize;\n this._font = null;\n\n // rem size is fixed per document as the document is the root element\n this._remSize = defaultFontSize;\n\n this._registeredFonts = {};\n\n // Set the default font\n if (defaultFont) {\n this.font(defaultFont, defaultFontFamily);\n }\n },\n\n font(src, family, size) {\n let cacheKey, font;\n if (typeof family === 'number') {\n size = family;\n family = null;\n }\n\n // check registered fonts if src is a string\n if (typeof src === 'string' && this._registeredFonts[src]) {\n cacheKey = src;\n ({ src, family } = this._registeredFonts[src]);\n } else {\n cacheKey = family || src;\n if (typeof cacheKey !== 'string') {\n cacheKey = null;\n }\n }\n\n this._fontSource = src;\n this._fontFamily = family;\n if (size != null) {\n this.fontSize(size);\n }\n\n // fast path: check if the font is already in the PDF\n if ((font = this._fontFamilies[cacheKey])) {\n this._font = font;\n return this;\n }\n\n // load the font\n const id = `F${++this._fontCount}`;\n this._font = PDFFontFactory.open(this, src, family, id);\n\n // check for existing font familes with the same name already in the PDF\n // useful if the font was passed as a buffer\n if (\n (font = this._fontFamilies[this._font.name]) &&\n isEqualFont(this._font, font)\n ) {\n this._font = font;\n return this;\n }\n\n // save the font for reuse later\n if (cacheKey) {\n this._fontFamilies[cacheKey] = this._font;\n }\n\n if (this._font.name) {\n this._fontFamilies[this._font.name] = this._font;\n }\n\n return this;\n },\n\n fontSize(_fontSize) {\n this._fontSize = this.sizeToPoint(_fontSize);\n return this;\n },\n\n currentLineHeight(includeGap) {\n return this._font.lineHeight(this._fontSize, includeGap);\n },\n\n registerFont(name, src, family) {\n this._registeredFonts[name] = {\n src,\n family,\n };\n\n return this;\n },\n\n /**\n * Convert a {@link Size} into a point measurement\n *\n * @param {Size | boolean | undefined} size - The size to convert\n * @param {Size | boolean | undefined} defaultValue - The default value when undefined\n * @param {PDFPage} page - The page used for computing font sizes\n * @param {number} [percentageWidth] - The value to use for computing size based on `%`\n *\n * @returns number\n */\n sizeToPoint(\n size,\n defaultValue = 0,\n page = this.page,\n percentageWidth = undefined,\n ) {\n if (!percentageWidth) percentageWidth = this._fontSize;\n if (typeof defaultValue !== 'number')\n defaultValue = this.sizeToPoint(defaultValue);\n if (size === undefined) return defaultValue;\n if (typeof size === 'number') return size;\n if (typeof size === 'boolean') return Number(size);\n\n const match = String(size).match(\n /((\\d+)?(\\.\\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/,\n );\n if (!match) throw new Error(`Unsupported size '${size}'`);\n let multiplier;\n switch (match[4]) {\n case 'em':\n multiplier = this._fontSize;\n break;\n case 'in':\n multiplier = IN_TO_PT;\n break;\n case 'px':\n multiplier = PX_TO_IN * IN_TO_PT;\n break;\n case 'cm':\n multiplier = CM_TO_IN * IN_TO_PT;\n break;\n case 'mm':\n multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT;\n break;\n case 'pc':\n multiplier = PC_TO_PT;\n break;\n case 'ex':\n multiplier = this.currentLineHeight();\n break;\n case 'ch':\n multiplier = this.widthOfString('0');\n break;\n case 'rem':\n multiplier = this._remSize;\n break;\n case 'vw':\n multiplier = page.width / 100;\n break;\n case 'vh':\n multiplier = page.height / 100;\n break;\n case 'vmin':\n multiplier = Math.min(page.width, page.height) / 100;\n break;\n case 'vmax':\n multiplier = Math.max(page.width, page.height) / 100;\n break;\n case '%':\n multiplier = percentageWidth / 100;\n break;\n case 'pt':\n default:\n multiplier = 1;\n }\n\n return multiplier * Number(match[1]);\n },\n};\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\nimport { PDFNumber } from './utils';\r\n\r\nconst SOFT_HYPHEN = '\\u00AD';\r\nconst HYPHEN = '-';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.horizontalScaling = options.horizontalScaling || 100;\r\n this.indent = ((options.indent || 0) * this.horizontalScaling) / 100;\r\n this.characterSpacing =\r\n ((options.characterSpacing || 0) * this.horizontalScaling) / 100;\r\n this.wordSpacing =\r\n ((options.wordSpacing === 0) * this.horizontalScaling) / 100;\r\n this.columns = options.columns || 1;\r\n this.columnGap =\r\n ((options.columnGap != null ? options.columnGap : 18) *\r\n this.horizontalScaling) /\r\n 100; // 1/4 inch\r\n this.lineWidth =\r\n ((options.width * this.horizontalScaling) / 100 -\r\n this.columnGap * (this.columns - 1)) /\r\n this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = PDFNumber(this.startY + options.height);\r\n } else {\r\n this.maxY = PDFNumber(this.document.page.maxY());\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', (options) => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n // if indentAllLines is set to true\r\n // we're not resetting the indentation for this paragraph after the first line\r\n if (options.indentAllLines) {\r\n return;\r\n }\r\n\r\n // otherwise we start the next line without indent\r\n this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n this.continuedX = 0;\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', (options) => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return PDFNumber(\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing,\r\n );\r\n }\r\n\r\n canFit(word, w) {\r\n if (word[word.length - 1] != SOFT_HYPHEN) {\r\n return w <= this.spaceLeft;\r\n }\r\n return w + this.wordWidth(HYPHEN) <= this.spaceLeft;\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position,\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // check for the edge case where a single character cannot fit into a line.\r\n if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n l = 1;\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n this.horizontalScaling = options.horizontalScaling || 100;\r\n if (options.indent != null) {\r\n this.indent = (options.indent * this.horizontalScaling) / 100;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing =\r\n (options.characterSpacing * this.horizontalScaling) / 100;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = (options.wordSpacing * this.horizontalScaling) / 100;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (this.canFit(word, w)) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || !this.canFit(word, w)) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n PDFNumber(this.document.y + lh * 2) > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n // Previous entry is a soft hyphen - add visible hyphen.\r\n if (buffer[buffer.length - 1] == SOFT_HYPHEN) {\r\n buffer = buffer.slice(0, -1) + HYPHEN;\r\n this.spaceLeft -= this.wordWidth(HYPHEN);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (PDFNumber(this.document.y + lh) > this.maxY) {\r\n this.emit('sectionEnd', options, this);\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n this.emit('sectionStart', options, this);\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n this.document.y = y;\r\n } else {\r\n this.document.x = this.startX;\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.continueOnNewPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...this.document._fillColor);\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\nimport PDFObject from '../object';\nimport { cosine, sine } from '../utils';\n\nconst { number } = PDFObject;\n\n/**\n * Format a list label based on the list type\n * @param {number} n\n * @param {'numbered' | 'lettered'} listType\n * @returns {string}\n */\nfunction formatListLabel(n, listType) {\n if (listType === 'numbered') {\n return `${n}.`;\n }\n\n // lettered\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\n var times = Math.floor((n - 1) / 26 + 1);\n var text = Array(times + 1).join(letter);\n return `${text}.`;\n}\n\nexport default {\n initText() {\n this._line = this._line.bind(this);\n // Current coordinates\n this.x = 0;\n this.y = 0;\n this._lineGap = 0;\n },\n\n lineGap(_lineGap) {\n this._lineGap = _lineGap;\n return this;\n },\n\n moveDown(lines) {\n if (lines == null) {\n lines = 1;\n }\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n\n moveUp(lines) {\n if (lines == null) {\n lines = 1;\n }\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\n return this;\n },\n\n _text(text, x, y, options, lineCallback) {\n options = this._initOptions(x, y, options);\n\n // Convert text to a string\n text = text == null ? '' : `${text}`;\n\n // if the wordSpacing option is specified, remove multiple consecutive spaces\n if (options.wordSpacing) {\n text = text.replace(/\\s{2,}/g, ' ');\n }\n\n const addStructure = () => {\n if (options.structParent) {\n options.structParent.add(\n this.struct(options.structType || 'P', [\n this.markStructureContent(options.structType || 'P'),\n ]),\n );\n }\n };\n\n // We can save some bytes if there is no rotation\n if (options.rotation !== 0) {\n this.save();\n this.rotate(-options.rotation, { origin: [this.x, this.y] });\n }\n\n // word wrapping\n if (options.width) {\n let wrapper = this._wrapper;\n if (!wrapper) {\n wrapper = new LineWrapper(this, options);\n wrapper.on('line', lineCallback);\n wrapper.on('firstLine', addStructure);\n }\n\n this._wrapper = options.continued ? wrapper : null;\n this._textOptions = options.continued ? options : null;\n wrapper.wrap(text, options);\n\n // render paragraphs as single lines\n } else {\n for (let line of text.split('\\n')) {\n addStructure();\n lineCallback(line, options);\n }\n }\n\n // Cleanup if there was a rotation\n if (options.rotation !== 0) this.restore();\n\n return this;\n },\n\n text(text, x, y, options) {\n return this._text(text, x, y, options, this._line);\n },\n\n widthOfString(string, options = {}) {\n const horizontalScaling = options.horizontalScaling || 100;\n return (\n ((this._font.widthOfString(string, this._fontSize, options.features) +\n (options.characterSpacing || 0) * (string.length - 1)) *\n horizontalScaling) /\n 100\n );\n },\n\n /**\n * Compute the bounding box of a string\n * based on what will actually be rendered by `doc.text()`\n *\n * @param string - The string\n * @param x - X position of text (defaults to this.x)\n * @param y - Y position of text (defaults to this.y)\n * @param options - Any text options (The same you would apply to `doc.text()`)\n * @returns {{x: number, y: number, width: number, height: number}}\n */\n boundsOfString(string, x, y, options) {\n options = this._initOptions(x, y, options);\n ({ x, y } = this);\n const lineGap = options.lineGap ?? this._lineGap ?? 0;\n const lineHeight = this.currentLineHeight(true) + lineGap;\n let contentWidth = 0;\n // Convert text to a string\n string = String(string ?? '');\n\n // if the wordSpacing option is specified, remove multiple consecutive spaces\n if (options.wordSpacing) {\n string = string.replace(/\\s{2,}/g, ' ');\n }\n\n // word wrapping\n if (options.width) {\n let wrapper = new LineWrapper(this, options);\n wrapper.on('line', (text, options) => {\n this.y += lineHeight;\n text = text.replace(/\\n/g, '');\n\n if (text.length) {\n // handle options\n let wordSpacing = options.wordSpacing ?? 0;\n const characterSpacing = options.characterSpacing ?? 0;\n\n // justify alignments\n if (options.width && options.align === 'justify') {\n // calculate the word spacing value\n const words = text.trim().split(/\\s+/);\n const textWidth = this.widthOfString(\n text.replace(/\\s+/g, ''),\n options,\n );\n const spaceWidth = this.widthOfString(' ') + characterSpacing;\n wordSpacing = Math.max(\n 0,\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\n spaceWidth,\n );\n }\n\n // calculate the actual rendered width of the string after word and character spacing\n contentWidth = Math.max(\n contentWidth,\n options.textWidth +\n wordSpacing * (options.wordCount - 1) +\n characterSpacing * (text.length - 1),\n );\n }\n });\n wrapper.wrap(string, options);\n } else {\n // render paragraphs as single lines\n for (let line of string.split('\\n')) {\n const lineWidth = this.widthOfString(line, options);\n this.y += lineHeight;\n contentWidth = Math.max(contentWidth, lineWidth);\n }\n }\n\n let contentHeight = this.y - y;\n // Clamp height to max height\n if (options.height) contentHeight = Math.min(contentHeight, options.height);\n\n this.x = x;\n this.y = y;\n\n /**\n * Rotates around top left corner\n * [x1,y1] > [x2,y2]\n * ⌃ ⌄\n * [x4,y4] < [x3,y3]\n */\n if (options.rotation === 0) {\n // No rotation so we can use the existing values\n return { x, y, width: contentWidth, height: contentHeight };\n // Use fast computation without explicit trig\n } else if (options.rotation === 90) {\n return {\n x: x,\n y: y - contentWidth,\n width: contentHeight,\n height: contentWidth,\n };\n } else if (options.rotation === 180) {\n return {\n x: x - contentWidth,\n y: y - contentHeight,\n width: contentWidth,\n height: contentHeight,\n };\n } else if (options.rotation === 270) {\n return {\n x: x - contentHeight,\n y: y,\n width: contentHeight,\n height: contentWidth,\n };\n }\n\n // Non-trivial values so time for trig\n const cos = cosine(options.rotation);\n const sin = sine(options.rotation);\n\n const x1 = x;\n const y1 = y;\n const x2 = x + contentWidth * cos;\n const y2 = y - contentWidth * sin;\n const x3 = x + contentWidth * cos + contentHeight * sin;\n const y3 = y - contentWidth * sin + contentHeight * cos;\n const x4 = x + contentHeight * sin;\n const y4 = y + contentHeight * cos;\n\n const xMin = Math.min(x1, x2, x3, x4);\n const xMax = Math.max(x1, x2, x3, x4);\n const yMin = Math.min(y1, y2, y3, y4);\n const yMax = Math.max(y1, y2, y3, y4);\n\n return { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n },\n\n heightOfString(text, options) {\n const { x, y } = this;\n\n options = this._initOptions(options);\n options.height = Infinity; // don't break pages\n\n const lineGap = options.lineGap || this._lineGap || 0;\n this._text(text, this.x, this.y, options, () => {\n this.y += this.currentLineHeight(true) + lineGap;\n });\n\n const height = this.y - y;\n this.x = x;\n this.y = y;\n\n return height;\n },\n\n list(list, x, y, options) {\n options = this._initOptions(x, y, options);\n\n const listType = options.listType || 'bullet';\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\n const midLine = unit / 2;\n const r = options.bulletRadius || unit / 3;\n const indent =\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\n const itemIndent =\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\n\n let level = 1;\n const items = [];\n const levels = [];\n const numbers = [];\n\n var flatten = function (list) {\n let n = 1;\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (Array.isArray(item)) {\n level++;\n flatten(item);\n level--;\n } else {\n items.push(item);\n levels.push(level);\n if (listType !== 'bullet') {\n numbers.push(n++);\n }\n }\n }\n };\n\n flatten(list);\n\n const drawListItem = function (listItem, i) {\n const wrapper = new LineWrapper(this, options);\n wrapper.on('line', this._line);\n\n level = 1;\n wrapper.once('firstLine', () => {\n let item, itemType, labelType, bodyType;\n if (options.structParent) {\n if (options.structTypes) {\n [itemType, labelType, bodyType] = options.structTypes;\n } else {\n [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody'];\n }\n }\n\n if (itemType) {\n item = this.struct(itemType);\n options.structParent.add(item);\n } else if (options.structParent) {\n item = options.structParent;\n }\n\n let l;\n if ((l = levels[i++]) !== level) {\n const diff = itemIndent * (l - level);\n this.x += diff;\n wrapper.lineWidth -= diff;\n level = l;\n }\n\n if (item && (labelType || bodyType)) {\n item.add(\n this.struct(labelType || bodyType, [\n this.markStructureContent(labelType || bodyType),\n ]),\n );\n }\n switch (listType) {\n case 'bullet':\n this.circle(this.x - indent + r, this.y + midLine, r);\n this.fill();\n break;\n case 'numbered':\n case 'lettered':\n var text = formatListLabel(numbers[i - 1], listType);\n this._fragment(text, this.x - indent, this.y, options);\n break;\n }\n\n if (item && labelType && bodyType) {\n item.add(\n this.struct(bodyType, [this.markStructureContent(bodyType)]),\n );\n }\n if (item && item !== options.structParent) {\n item.end();\n }\n });\n\n wrapper.on('sectionStart', () => {\n const pos = indent + itemIndent * (level - 1);\n this.x += pos;\n wrapper.lineWidth -= pos;\n });\n\n wrapper.on('sectionEnd', () => {\n const pos = indent + itemIndent * (level - 1);\n this.x -= pos;\n wrapper.lineWidth += pos;\n });\n\n wrapper.wrap(listItem, options);\n };\n\n for (let i = 0; i < items.length; i++) {\n drawListItem.call(this, items[i], i);\n }\n\n return this;\n },\n\n _initOptions(x = {}, y, options = {}) {\n if (typeof x === 'object') {\n options = x;\n x = null;\n }\n\n // clone options object\n const result = Object.assign({}, options);\n\n // extend options with previous values for continued text\n if (this._textOptions) {\n for (let key in this._textOptions) {\n const val = this._textOptions[key];\n if (key !== 'continued') {\n if (result[key] === undefined) {\n result[key] = val;\n }\n }\n }\n }\n\n // Update the current position\n if (x != null) {\n this.x = x;\n }\n if (y != null) {\n this.y = y;\n }\n\n // wrap to margins if no x or y position passed\n if (result.lineBreak !== false) {\n if (result.width == null) {\n result.width = this.page.width - this.x - this.page.margins.right;\n }\n result.width = Math.max(result.width, 0);\n }\n\n if (!result.columns) {\n result.columns = 0;\n }\n if (result.columnGap == null) {\n result.columnGap = 18;\n } // 1/4 inch\n\n // Normalize rotation to between 0 - 360\n result.rotation = Number(options.rotation ?? 0) % 360;\n if (result.rotation < 0) result.rotation += 360;\n\n return result;\n },\n\n _line(text, options = {}, wrapper) {\n this._fragment(text, this.x, this.y, options);\n\n if (wrapper) {\n const lineGap = options.lineGap || this._lineGap || 0;\n this.y += this.currentLineHeight(true) + lineGap;\n } else {\n this.x += this.widthOfString(text, options);\n }\n },\n\n _fragment(text, x, y, options) {\n let dy, encoded, i, positions, textWidth, words;\n text = `${text}`.replace(/\\n/g, '');\n if (text.length === 0) {\n return;\n }\n\n // handle options\n const align = options.align || 'left';\n let wordSpacing = options.wordSpacing || 0;\n const characterSpacing = options.characterSpacing || 0;\n const horizontalScaling = options.horizontalScaling || 100;\n\n // text alignments\n if (options.width) {\n switch (align) {\n case 'right':\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\n x += options.lineWidth - textWidth;\n break;\n\n case 'center':\n x += options.lineWidth / 2 - options.textWidth / 2;\n break;\n\n case 'justify':\n // calculate the word spacing value\n words = text.trim().split(/\\s+/);\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\n wordSpacing = Math.max(\n 0,\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\n spaceWidth,\n );\n break;\n }\n }\n\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\n if (typeof options.baseline === 'number') {\n dy = -options.baseline;\n } else {\n switch (options.baseline) {\n case 'svg-middle':\n dy = 0.5 * this._font.xHeight;\n break;\n case 'middle':\n case 'svg-central':\n dy = 0.5 * (this._font.descender + this._font.ascender);\n break;\n case 'bottom':\n case 'ideographic':\n dy = this._font.descender;\n break;\n case 'alphabetic':\n dy = 0;\n break;\n case 'mathematical':\n dy = 0.5 * this._font.ascender;\n break;\n case 'hanging':\n dy = 0.8 * this._font.ascender;\n break;\n case 'top':\n dy = this._font.ascender;\n break;\n default:\n dy = this._font.ascender;\n }\n dy = (dy / 1000) * this._fontSize;\n }\n\n // calculate the actual rendered width of the string after word and character spacing\n const renderedWidth =\n options.textWidth +\n wordSpacing * (options.wordCount - 1) +\n characterSpacing * (text.length - 1);\n\n // create link annotations if the link option is given\n if (options.link != null) {\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\n }\n if (options.goTo != null) {\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\n }\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n }\n\n // create underline\n if (options.underline) {\n this.save();\n if (!options.stroke) {\n this.strokeColor(...(this._fillColor || []));\n }\n\n const lineWidth =\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n this.lineWidth(lineWidth);\n\n let lineY = y + this.currentLineHeight() - lineWidth;\n this.moveTo(x, lineY);\n this.lineTo(x + renderedWidth, lineY);\n this.stroke();\n this.restore();\n }\n\n // create strikethrough line\n if (options.strike) {\n this.save();\n if (!options.stroke) {\n this.strokeColor(...(this._fillColor || []));\n }\n\n const lineWidth =\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\n this.lineWidth(lineWidth);\n\n let lineY = y + this.currentLineHeight() / 2;\n this.moveTo(x, lineY);\n this.lineTo(x + renderedWidth, lineY);\n this.stroke();\n this.restore();\n }\n\n this.save();\n\n // oblique (angle in degrees or boolean)\n if (options.oblique) {\n let skew;\n if (typeof options.oblique === 'number') {\n skew = -Math.tan((options.oblique * Math.PI) / 180);\n } else {\n skew = -0.25;\n }\n this.transform(1, 0, 0, 1, x, y);\n this.transform(1, 0, skew, 1, -skew * dy, 0);\n this.transform(1, 0, 0, 1, -x, -y);\n }\n\n // flip coordinate system\n this.transform(1, 0, 0, -1, 0, this.page.height);\n y = this.page.height - y - dy;\n\n // add current font to page if necessary\n if (this.page.fonts[this._font.id] == null) {\n this.page.fonts[this._font.id] = this._font.ref();\n }\n\n // begin the text object\n this.addContent('BT');\n\n // text position\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\n\n // font and font size\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\n\n // rendering mode\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\n if (mode) {\n this.addContent(`${mode} Tr`);\n }\n\n // Character spacing\n if (characterSpacing) {\n this.addContent(`${number(characterSpacing)} Tc`);\n }\n\n // Horizontal scaling\n if (horizontalScaling !== 100) {\n this.addContent(`${horizontalScaling} Tz`);\n }\n\n // Add the actual text\n // If we have a word spacing value, we need to encode each word separately\n // since the normal Tw operator only works on character code 32, which isn't\n // used for embedded fonts.\n if (wordSpacing) {\n words = text.trim().split(/\\s+/);\n wordSpacing += this.widthOfString(' ') + characterSpacing;\n wordSpacing *= 1000 / this._fontSize;\n\n encoded = [];\n positions = [];\n for (let word of words) {\n const [encodedWord, positionsWord] = this._font.encode(\n word,\n options.features,\n );\n encoded = encoded.concat(encodedWord);\n positions = positions.concat(positionsWord);\n\n // add the word spacing to the end of the word\n // clone object because of cache\n const space = {};\n const object = positions[positions.length - 1];\n for (let key in object) {\n const val = object[key];\n space[key] = val;\n }\n space.xAdvance += wordSpacing;\n positions[positions.length - 1] = space;\n }\n } else {\n [encoded, positions] = this._font.encode(text, options.features);\n }\n\n const scale = this._fontSize / 1000;\n const commands = [];\n let last = 0;\n let hadOffset = false;\n\n // Adds a segment of text to the TJ command buffer\n const addSegment = (cur) => {\n if (last < cur) {\n const hex = encoded.slice(last, cur).join('');\n const advance =\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\n commands.push(`<${hex}> ${number(-advance)}`);\n }\n\n last = cur;\n };\n\n // Flushes the current TJ commands to the output stream\n const flush = (i) => {\n addSegment(i);\n\n if (commands.length > 0) {\n this.addContent(`[${commands.join(' ')}] TJ`);\n commands.length = 0;\n }\n };\n\n for (i = 0; i < positions.length; i++) {\n // If we have an x or y offset, we have to break out of the current TJ command\n // so we can move the text position.\n const pos = positions[i];\n if (pos.xOffset || pos.yOffset) {\n // Flush the current buffer\n flush(i);\n\n // Move the text position and flush just the current character\n this.addContent(\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\n y + pos.yOffset * scale,\n )} Tm`,\n );\n flush(i + 1);\n\n hadOffset = true;\n } else {\n // If the last character had an offset, reset the text position\n if (hadOffset) {\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\n hadOffset = false;\n }\n\n // Group segments that don't have any advance adjustments\n if (pos.xAdvance - pos.advanceWidth !== 0) {\n addSegment(i + 1);\n }\n }\n\n x += pos.xAdvance * scale;\n }\n\n // Flush any remaining commands\n flush(i);\n\n // end the text object\n this.addContent('ET');\n\n // restore flipped coordinate system\n this.restore();\n },\n};\n","import exif from 'jpeg-exif';\n\nconst MARKERS = [\n 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9,\n 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf,\n];\n\nconst COLOR_SPACE_MAP = {\n 1: 'DeviceGray',\n 3: 'DeviceRGB',\n 4: 'DeviceCMYK',\n};\n\nclass JPEG {\n constructor(data, label) {\n let marker;\n this.data = data;\n this.label = label;\n if (this.data.readUInt16BE(0) !== 0xffd8) {\n throw 'SOI not found in JPEG';\n }\n\n // Parse the EXIF orientation\n this.orientation = exif.fromBuffer(this.data).Orientation || 1;\n\n let pos = 2;\n while (pos < this.data.length) {\n marker = this.data.readUInt16BE(pos);\n pos += 2;\n if (MARKERS.includes(marker)) {\n break;\n }\n pos += this.data.readUInt16BE(pos);\n }\n\n if (!MARKERS.includes(marker)) {\n throw 'Invalid JPEG.';\n }\n pos += 2;\n\n this.bits = this.data[pos++];\n this.height = this.data.readUInt16BE(pos);\n pos += 2;\n\n this.width = this.data.readUInt16BE(pos);\n pos += 2;\n\n const channels = this.data[pos++];\n this.colorSpace = COLOR_SPACE_MAP[channels];\n\n this.obj = null;\n }\n\n embed(document) {\n if (this.obj) {\n return;\n }\n\n this.obj = document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: this.bits,\n Width: this.width,\n Height: this.height,\n ColorSpace: this.colorSpace,\n Filter: 'DCTDecode',\n });\n\n // add extra decode params for CMYK images. By swapping the\n // min and max values from the default, we invert the colors. See\n // section 4.8.4 of the spec.\n if (this.colorSpace === 'DeviceCMYK') {\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\n }\n\n this.obj.end(this.data);\n\n // free memory\n return (this.data = null);\n }\n}\n\nexport default JPEG;\n","import zlib from 'zlib';\nimport PNG from 'png-js';\n\nclass PNGImage {\n constructor(data, label) {\n this.label = label;\n this.image = new PNG(data);\n this.width = this.image.width;\n this.height = this.image.height;\n this.imgData = this.image.imgData;\n this.obj = null;\n }\n\n embed(document) {\n let dataDecoded = false;\n\n this.document = document;\n if (this.obj) {\n return;\n }\n\n const hasAlphaChannel = this.image.hasAlphaChannel;\n const isInterlaced = this.image.interlaceMethod === 1;\n\n this.obj = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\n Width: this.width,\n Height: this.height,\n Filter: 'FlateDecode',\n });\n\n if (!hasAlphaChannel) {\n const params = this.document.ref({\n Predictor: isInterlaced ? 1 : 15,\n Colors: this.image.colors,\n BitsPerComponent: this.image.bits,\n Columns: this.width,\n });\n\n this.obj.data['DecodeParms'] = params;\n params.end();\n }\n\n if (this.image.palette.length === 0) {\n this.obj.data['ColorSpace'] = this.image.colorSpace;\n } else {\n // embed the color palette in the PDF as an object stream\n const palette = this.document.ref();\n palette.end(Buffer.from(this.image.palette));\n\n // build the color space array for the image\n this.obj.data['ColorSpace'] = [\n 'Indexed',\n 'DeviceRGB',\n this.image.palette.length / 3 - 1,\n palette,\n ];\n }\n\n // For PNG color types 0, 2 and 3, the transparency data is stored in\n // a dedicated PNG chunk.\n if (this.image.transparency.grayscale != null) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n const val = this.image.transparency.grayscale;\n this.obj.data['Mask'] = [val, val];\n } else if (this.image.transparency.rgb) {\n // Use Color Key Masking (spec section 4.8.5)\n // An array with N elements, where N is two times the number of color components.\n const { rgb } = this.image.transparency;\n const mask = [];\n for (let x of rgb) {\n mask.push(x, x);\n }\n\n this.obj.data['Mask'] = mask;\n } else if (this.image.transparency.indexed) {\n // Create a transparency SMask for the image based on the data\n // in the PLTE and tRNS sections. See below for details on SMasks.\n dataDecoded = true;\n return this.loadIndexedAlphaChannel();\n } else if (hasAlphaChannel) {\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\n // channel mixed in with the main image data. Separate this data out into an\n // SMask object and store it separately in the PDF.\n dataDecoded = true;\n return this.splitAlphaChannel();\n }\n\n if (isInterlaced && !dataDecoded) {\n return this.decodeData();\n }\n\n this.finalize();\n }\n\n finalize() {\n if (this.alphaChannel) {\n const sMask = this.document.ref({\n Type: 'XObject',\n Subtype: 'Image',\n Height: this.height,\n Width: this.width,\n BitsPerComponent: 8,\n Filter: 'FlateDecode',\n ColorSpace: 'DeviceGray',\n Decode: [0, 1],\n });\n\n sMask.end(this.alphaChannel);\n this.obj.data['SMask'] = sMask;\n }\n\n // add the actual image data\n this.obj.end(this.imgData);\n\n // free memory\n this.image = null;\n return (this.imgData = null);\n }\n\n splitAlphaChannel() {\n return this.image.decodePixels((pixels) => {\n let a, p;\n const colorCount = this.image.colors;\n const pixelCount = this.width * this.height;\n const imgData = Buffer.alloc(pixelCount * colorCount);\n const alphaChannel = Buffer.alloc(pixelCount);\n\n let i = (p = a = 0);\n const len = pixels.length;\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\n while (i < len) {\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\n imgData[p++] = pixels[i++];\n i += skipByteCount;\n }\n alphaChannel[a++] = pixels[i++];\n i += skipByteCount;\n }\n\n this.imgData = zlib.deflateSync(imgData);\n this.alphaChannel = zlib.deflateSync(alphaChannel);\n return this.finalize();\n });\n }\n\n loadIndexedAlphaChannel() {\n const transparency = this.image.transparency.indexed;\n return this.image.decodePixels((pixels) => {\n const alphaChannel = Buffer.alloc(this.width * this.height);\n\n let i = 0;\n for (let j = 0, end = pixels.length; j < end; j++) {\n alphaChannel[i++] = transparency[pixels[j]];\n }\n\n this.alphaChannel = zlib.deflateSync(alphaChannel);\n return this.finalize();\n });\n }\n\n decodeData() {\n this.image.decodePixels((pixels) => {\n this.imgData = zlib.deflateSync(pixels);\n this.finalize();\n });\n }\n}\n\nexport default PNGImage;\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n const match = /^data:.+?;base64,(.*)$/.exec(src);\r\n if (match) {\r\n data = Buffer.from(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\n\nexport default {\n initImages() {\n this._imageRegistry = {};\n this._imageCount = 0;\n },\n\n image(src, x, y, options = {}) {\n let bh, bp, bw, image, ip, left, left1, originX, originY;\n if (typeof x === 'object') {\n options = x;\n x = null;\n }\n\n // Ignore orientation based on document options or image options\n const ignoreOrientation =\n options.ignoreOrientation ||\n (options.ignoreOrientation !== false && this.options.ignoreOrientation);\n\n const inDocumentFlow = typeof y !== 'number';\n\n x = (left = x != null ? x : options.x) != null ? left : this.x;\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\n\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n if (src.width && src.height) {\n image = src;\n } else {\n image = this.openImage(src);\n }\n }\n\n if (!image.obj) {\n image.embed(this);\n }\n\n if (this.page.xobjects[image.label] == null) {\n this.page.xobjects[image.label] = image.obj;\n }\n\n let { width, height } = image;\n\n // If EXIF orientation calls for it, swap width and height\n if (!ignoreOrientation && image.orientation > 4) {\n [width, height] = [height, width];\n }\n\n let w = options.width || width;\n let h = options.height || height;\n\n if (options.width && !options.height) {\n const wp = w / width;\n w = width * wp;\n h = height * wp;\n } else if (options.height && !options.width) {\n const hp = h / height;\n w = width * hp;\n h = height * hp;\n } else if (options.scale) {\n w = width * options.scale;\n h = height * options.scale;\n } else if (options.fit) {\n [bw, bh] = options.fit;\n bp = bw / bh;\n ip = width / height;\n if (ip > bp) {\n w = bw;\n h = bw / ip;\n } else {\n h = bh;\n w = bh * ip;\n }\n } else if (options.cover) {\n [bw, bh] = options.cover;\n bp = bw / bh;\n ip = width / height;\n if (ip > bp) {\n h = bh;\n w = bh * ip;\n } else {\n w = bw;\n h = bw / ip;\n }\n }\n\n if (options.fit || options.cover) {\n if (options.align === 'center') {\n x = x + bw / 2 - w / 2;\n } else if (options.align === 'right') {\n x = x + bw - w;\n }\n\n if (options.valign === 'center') {\n y = y + bh / 2 - h / 2;\n } else if (options.valign === 'bottom') {\n y = y + bh - h;\n }\n }\n\n // need to flip image by default because of the default transform matrix on the document\n let rotateAngle = 0;\n let xTransform = x;\n let yTransform = y;\n let hTransform = h;\n let wTransform = w;\n\n if (!ignoreOrientation) {\n switch (image.orientation) {\n // No orientation (need to flip image, though, because of the default transform matrix on the document)\n default:\n case 1:\n hTransform = -h;\n yTransform += h;\n\n break;\n // Flip Horizontal\n case 2:\n wTransform = -w;\n hTransform = -h;\n xTransform += w;\n yTransform += h;\n\n break;\n // Rotate 180 degrees\n case 3:\n originX = x;\n originY = y;\n\n hTransform = -h;\n xTransform -= w;\n\n rotateAngle = 180;\n break;\n // Flip vertical\n case 4:\n // Do nothing, image will be flipped\n\n break;\n // Flip horizontally and rotate 270 degrees CW\n case 5:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = w;\n yTransform -= hTransform;\n\n rotateAngle = 90;\n break;\n // Rotate 90 degrees CW\n case 6:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = -w;\n\n rotateAngle = 90;\n break;\n // Flip horizontally and rotate 90 degrees CW\n case 7:\n originX = x;\n originY = y;\n\n hTransform = -w;\n wTransform = -h;\n xTransform += h;\n\n rotateAngle = 90;\n break;\n // Rotate 270 degrees CW\n case 8:\n originX = x;\n originY = y;\n\n wTransform = h;\n hTransform = -w;\n xTransform -= h;\n yTransform += w;\n\n rotateAngle = -90;\n break;\n }\n } else {\n hTransform = -h;\n yTransform += h;\n }\n\n // create link annotations if the link option is given\n if (options.link != null) {\n this.link(x, y, w, h, options.link);\n }\n if (options.goTo != null) {\n this.goTo(x, y, w, h, options.goTo);\n }\n if (options.destination != null) {\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\n }\n\n // Set the current y position to below the image if it is in the document flow\n if (inDocumentFlow) {\n this.y += h;\n }\n\n this.save();\n\n if (rotateAngle) {\n this.rotate(rotateAngle, {\n origin: [originX, originY],\n });\n }\n\n this.transform(wTransform, 0, 0, hTransform, xTransform, yTransform);\n this.addContent(`/${image.label} Do`);\n this.restore();\n\n return this;\n },\n\n openImage(src) {\n let image;\n if (typeof src === 'string') {\n image = this._imageRegistry[src];\n }\n\n if (!image) {\n image = PDFImage.open(src, `I${++this._imageCount}`);\n if (typeof src === 'string') {\n this._imageRegistry[src] = image;\n }\n }\n\n return image;\n },\n};\n","export default {\n annotate(x, y, w, h, options) {\n options.Type = 'Annot';\n options.Rect = this._convertRect(x, y, w, h);\n options.Border = [0, 0, 0];\n\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\n options.F = 1 << 2; // Print Annotation Flag\n }\n\n if (options.Subtype !== 'Link') {\n if (options.C == null) {\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\n }\n } // convert colors\n delete options.color;\n\n if (typeof options.Dest === 'string') {\n options.Dest = new String(options.Dest);\n }\n\n // Capitalize keys\n for (let key in options) {\n const val = options[key];\n options[key[0].toUpperCase() + key.slice(1)] = val;\n }\n\n const ref = this.ref(options);\n this.page.annotations.push(ref);\n ref.end();\n return this;\n },\n\n note(x, y, w, h, contents, options = {}) {\n options.Subtype = 'Text';\n options.Contents = new String(contents);\n if (options.Name == null) {\n options.Name = 'Comment';\n }\n if (options.color == null) {\n options.color = [243, 223, 92];\n }\n return this.annotate(x, y, w, h, options);\n },\n\n goTo(x, y, w, h, name, options = {}) {\n options.Subtype = 'Link';\n options.A = this.ref({\n S: 'GoTo',\n D: new String(name),\n });\n options.A.end();\n return this.annotate(x, y, w, h, options);\n },\n\n link(x, y, w, h, url, options = {}) {\n options.Subtype = 'Link';\n\n if (typeof url === 'number') {\n // Link to a page in the document (the page must already exist)\n const pages = this._root.data.Pages.data;\n if (url >= 0 && url < pages.Kids.length) {\n options.A = this.ref({\n S: 'GoTo',\n D: [pages.Kids[url], 'XYZ', null, null, null],\n });\n options.A.end();\n } else {\n throw new Error(`The document has no page ${url}`);\n }\n } else {\n // Link to an external url\n options.A = this.ref({\n S: 'URI',\n URI: new String(url),\n });\n options.A.end();\n }\n\n return this.annotate(x, y, w, h, options);\n },\n\n _markup(x, y, w, h, options = {}) {\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n highlight(x, y, w, h, options = {}) {\n options.Subtype = 'Highlight';\n if (options.color == null) {\n options.color = [241, 238, 148];\n }\n return this._markup(x, y, w, h, options);\n },\n\n underline(x, y, w, h, options = {}) {\n options.Subtype = 'Underline';\n return this._markup(x, y, w, h, options);\n },\n\n strike(x, y, w, h, options = {}) {\n options.Subtype = 'StrikeOut';\n return this._markup(x, y, w, h, options);\n },\n\n lineAnnotation(x1, y1, x2, y2, options = {}) {\n options.Subtype = 'Line';\n options.Contents = new String();\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\n return this.annotate(x1, y1, x2, y2, options);\n },\n\n rectAnnotation(x, y, w, h, options = {}) {\n options.Subtype = 'Square';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n ellipseAnnotation(x, y, w, h, options = {}) {\n options.Subtype = 'Circle';\n options.Contents = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n textAnnotation(x, y, w, h, text, options = {}) {\n options.Subtype = 'FreeText';\n options.Contents = new String(text);\n options.DA = new String();\n return this.annotate(x, y, w, h, options);\n },\n\n fileAnnotation(x, y, w, h, file = {}, options = {}) {\n // create hidden file\n const filespec = this.file(file.src, Object.assign({ hidden: true }, file));\n\n options.Subtype = 'FileAttachment';\n options.FS = filespec;\n\n // add description from filespec unless description (Contents) has already been set\n if (options.Contents) {\n options.Contents = new String(options.Contents);\n } else if (filespec.data.Desc) {\n options.Contents = filespec.data.Desc;\n }\n\n return this.annotate(x, y, w, h, options);\n },\n\n _convertRect(x1, y1, w, h) {\n // flip y1 and y2\n let y2 = y1;\n y1 += h;\n\n // make x2\n let x2 = x1 + w;\n\n // apply current transformation matrix to points\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\n x1 = m0 * x1 + m2 * y1 + m4;\n y1 = m1 * x1 + m3 * y1 + m5;\n x2 = m0 * x2 + m2 * y2 + m4;\n y2 = m1 * x2 + m3 * y2 + m5;\n\n return [x1, y1, x2, y2];\n },\n};\n","class PDFOutline {\n constructor(document, parent, title, dest, options = { expanded: false }) {\n this.document = document;\n this.options = options;\n this.outlineData = {};\n\n if (dest !== null) {\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\n }\n\n if (parent !== null) {\n this.outlineData['Parent'] = parent;\n }\n\n if (title !== null) {\n this.outlineData['Title'] = new String(title);\n }\n\n this.dictionary = this.document.ref(this.outlineData);\n this.children = [];\n }\n\n addItem(title, options = { expanded: false }) {\n const result = new PDFOutline(\n this.document,\n this.dictionary,\n title,\n this.document.page,\n options,\n );\n this.children.push(result);\n\n return result;\n }\n\n endOutline() {\n if (this.children.length > 0) {\n if (this.options.expanded) {\n this.outlineData.Count = this.children.length;\n }\n\n const first = this.children[0],\n last = this.children[this.children.length - 1];\n this.outlineData.First = first.dictionary;\n this.outlineData.Last = last.dictionary;\n\n for (let i = 0, len = this.children.length; i < len; i++) {\n const child = this.children[i];\n if (i > 0) {\n child.outlineData.Prev = this.children[i - 1].dictionary;\n }\n if (i < this.children.length - 1) {\n child.outlineData.Next = this.children[i + 1].dictionary;\n }\n child.endOutline();\n }\n }\n\n return this.dictionary.end();\n }\n}\n\nexport default PDFOutline;\n","import PDFOutline from '../outline';\n\nexport default {\n initOutline() {\n this.outline = new PDFOutline(this, null, null, null);\n },\n\n endOutline() {\n this.outline.endOutline();\n if (this.outline.children.length > 0) {\n this._root.data.Outlines = this.outline.dictionary;\n return (this._root.data.PageMode = 'UseOutlines');\n }\n },\n};\n","/*\nPDFStructureContent - a reference to a marked structure content\nBy Ben Schmidt\n*/\n\nclass PDFStructureContent {\n constructor(pageRef, mcid) {\n this.refs = [{ pageRef, mcid }];\n }\n\n push(structContent) {\n structContent.refs.forEach((ref) => this.refs.push(ref));\n }\n}\n\nexport default PDFStructureContent;\n","/*\nPDFStructureElement - represents an element in the PDF logical structure tree\nBy Ben Schmidt\n*/\n\nimport PDFStructureContent from './structure_content';\n\nclass PDFStructureElement {\n constructor(document, type, options = {}, children = null) {\n this.document = document;\n\n this._attached = false;\n this._ended = false;\n this._flushed = false;\n this.dictionary = document.ref({\n // Type: \"StructElem\",\n S: type,\n });\n\n const data = this.dictionary.data;\n\n if (Array.isArray(options) || this._isValidChild(options)) {\n children = options;\n options = {};\n }\n\n if (typeof options.title !== 'undefined') {\n data.T = new String(options.title);\n }\n if (typeof options.lang !== 'undefined') {\n data.Lang = new String(options.lang);\n }\n if (typeof options.alt !== 'undefined') {\n data.Alt = new String(options.alt);\n }\n if (typeof options.expanded !== 'undefined') {\n data.E = new String(options.expanded);\n }\n if (typeof options.actual !== 'undefined') {\n data.ActualText = new String(options.actual);\n }\n\n this._children = [];\n\n if (children) {\n if (!Array.isArray(children)) {\n children = [children];\n }\n children.forEach((child) => this.add(child));\n this.end();\n }\n }\n\n add(child) {\n if (this._ended) {\n throw new Error(`Cannot add child to already-ended structure element`);\n }\n\n if (!this._isValidChild(child)) {\n throw new Error(`Invalid structure element child`);\n }\n\n if (child instanceof PDFStructureElement) {\n child.setParent(this.dictionary);\n if (this._attached) {\n child.setAttached();\n }\n }\n\n if (child instanceof PDFStructureContent) {\n this._addContentToParentTree(child);\n }\n\n if (typeof child === 'function' && this._attached) {\n // _contentForClosure() adds the content to the parent tree\n child = this._contentForClosure(child);\n }\n\n this._children.push(child);\n\n return this;\n }\n\n _addContentToParentTree(content) {\n content.refs.forEach(({ pageRef, mcid }) => {\n const pageStructParents = this.document\n .getStructParentTree()\n .get(pageRef.data.StructParents);\n pageStructParents[mcid] = this.dictionary;\n });\n }\n\n setParent(parentRef) {\n if (this.dictionary.data.P) {\n throw new Error(`Structure element added to more than one parent`);\n }\n\n this.dictionary.data.P = parentRef;\n\n this._flush();\n }\n\n setAttached() {\n if (this._attached) {\n return;\n }\n\n this._children.forEach((child, index) => {\n if (child instanceof PDFStructureElement) {\n child.setAttached();\n }\n if (typeof child === 'function') {\n this._children[index] = this._contentForClosure(child);\n }\n });\n\n this._attached = true;\n\n this._flush();\n }\n\n end() {\n if (this._ended) {\n return;\n }\n\n this._children\n .filter((child) => child instanceof PDFStructureElement)\n .forEach((child) => child.end());\n\n this._ended = true;\n\n this._flush();\n }\n\n _isValidChild(child) {\n return (\n child instanceof PDFStructureElement ||\n child instanceof PDFStructureContent ||\n typeof child === 'function'\n );\n }\n\n _contentForClosure(closure) {\n const content = this.document.markStructureContent(this.dictionary.data.S);\n closure();\n this.document.endMarkedContent();\n\n this._addContentToParentTree(content);\n\n return content;\n }\n\n _isFlushable() {\n if (!this.dictionary.data.P || !this._ended) {\n return false;\n }\n\n return this._children.every((child) => {\n if (typeof child === 'function') {\n return false;\n }\n if (child instanceof PDFStructureElement) {\n return child._isFlushable();\n }\n return true;\n });\n }\n\n _flush() {\n if (this._flushed || !this._isFlushable()) {\n return;\n }\n\n this.dictionary.data.K = [];\n\n this._children.forEach((child) => this._flushChild(child));\n\n this.dictionary.end();\n\n // free memory used by children; the dictionary itself may still be\n // referenced by a parent structure element or root, but we can\n // at least trim the tree here\n this._children = [];\n this.dictionary.data.K = null;\n\n this._flushed = true;\n }\n\n _flushChild(child) {\n if (child instanceof PDFStructureElement) {\n this.dictionary.data.K.push(child.dictionary);\n }\n\n if (child instanceof PDFStructureContent) {\n child.refs.forEach(({ pageRef, mcid }) => {\n if (!this.dictionary.data.Pg) {\n this.dictionary.data.Pg = pageRef;\n }\n\n if (this.dictionary.data.Pg === pageRef) {\n this.dictionary.data.K.push(mcid);\n } else {\n this.dictionary.data.K.push({\n Type: 'MCR',\n Pg: pageRef,\n MCID: mcid,\n });\n }\n });\n }\n }\n}\n\nexport default PDFStructureElement;\n","/*\nPDFNumberTree - represents a number tree object\n*/\n\nimport PDFTree from './tree';\n\nclass PDFNumberTree extends PDFTree {\n _compareKeys(a, b) {\n return parseInt(a) - parseInt(b);\n }\n\n _keysName() {\n return 'Nums';\n }\n\n _dataForKey(k) {\n return parseInt(k);\n }\n}\n\nexport default PDFNumberTree;\n","/*\nMarkings mixin - support marked content sequences in content streams\nBy Ben Schmidt\n*/\n\nimport PDFStructureElement from '../structure_element';\nimport PDFStructureContent from '../structure_content';\nimport PDFNumberTree from '../number_tree';\nimport PDFObject from '../object';\n\nexport default {\n initMarkings(options) {\n this.structChildren = [];\n\n if (options.tagged) {\n this.getMarkInfoDictionary().data.Marked = true;\n this.getStructTreeRoot();\n }\n },\n\n markContent(tag, options = null) {\n if (tag === 'Artifact' || (options && options.mcid)) {\n let toClose = 0;\n this.page.markings.forEach((marking) => {\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\n toClose++;\n }\n });\n while (toClose--) {\n this.endMarkedContent();\n }\n }\n\n if (!options) {\n this.page.markings.push({ tag });\n this.addContent(`/${tag} BMC`);\n return this;\n }\n\n this.page.markings.push({ tag, options });\n\n const dictionary = {};\n\n if (typeof options.mcid !== 'undefined') {\n dictionary.MCID = options.mcid;\n }\n if (tag === 'Artifact') {\n if (typeof options.type === 'string') {\n dictionary.Type = options.type;\n }\n if (Array.isArray(options.bbox)) {\n dictionary.BBox = [\n options.bbox[0],\n this.page.height - options.bbox[3],\n options.bbox[2],\n this.page.height - options.bbox[1],\n ];\n }\n if (\n Array.isArray(options.attached) &&\n options.attached.every((val) => typeof val === 'string')\n ) {\n dictionary.Attached = options.attached;\n }\n }\n if (tag === 'Span') {\n if (options.lang) {\n dictionary.Lang = new String(options.lang);\n }\n if (options.alt) {\n dictionary.Alt = new String(options.alt);\n }\n if (options.expanded) {\n dictionary.E = new String(options.expanded);\n }\n if (options.actual) {\n dictionary.ActualText = new String(options.actual);\n }\n }\n\n this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\n return this;\n },\n\n markStructureContent(tag, options = {}) {\n const pageStructParents = this.getStructParentTree().get(\n this.page.structParentTreeKey,\n );\n const mcid = pageStructParents.length;\n pageStructParents.push(null);\n\n this.markContent(tag, { ...options, mcid });\n\n const structContent = new PDFStructureContent(this.page.dictionary, mcid);\n this.page.markings.slice(-1)[0].structContent = structContent;\n return structContent;\n },\n\n endMarkedContent() {\n this.page.markings.pop();\n this.addContent('EMC');\n return this;\n },\n\n struct(type, options = {}, children = null) {\n return new PDFStructureElement(this, type, options, children);\n },\n\n addStructure(structElem) {\n const structTreeRoot = this.getStructTreeRoot();\n structElem.setParent(structTreeRoot);\n structElem.setAttached();\n this.structChildren.push(structElem);\n if (!structTreeRoot.data.K) {\n structTreeRoot.data.K = [];\n }\n structTreeRoot.data.K.push(structElem.dictionary);\n return this;\n },\n\n initPageMarkings(pageMarkings) {\n pageMarkings.forEach((marking) => {\n if (marking.structContent) {\n const structContent = marking.structContent;\n const newStructContent = this.markStructureContent(\n marking.tag,\n marking.options,\n );\n structContent.push(newStructContent);\n this.page.markings.slice(-1)[0].structContent = structContent;\n } else {\n this.markContent(marking.tag, marking.options);\n }\n });\n },\n\n endPageMarkings(page) {\n const pageMarkings = page.markings;\n pageMarkings.forEach(() => page.write('EMC'));\n page.markings = [];\n return pageMarkings;\n },\n\n getMarkInfoDictionary() {\n if (!this._root.data.MarkInfo) {\n this._root.data.MarkInfo = this.ref({});\n }\n return this._root.data.MarkInfo;\n },\n\n hasMarkInfoDictionary() {\n return !!this._root.data.MarkInfo;\n },\n\n getStructTreeRoot() {\n if (!this._root.data.StructTreeRoot) {\n this._root.data.StructTreeRoot = this.ref({\n Type: 'StructTreeRoot',\n ParentTree: new PDFNumberTree(),\n ParentTreeNextKey: 0,\n });\n }\n return this._root.data.StructTreeRoot;\n },\n\n getStructParentTree() {\n return this.getStructTreeRoot().data.ParentTree;\n },\n\n createStructParentTreeNextKey() {\n // initialise the MarkInfo dictionary\n this.getMarkInfoDictionary();\n\n const structTreeRoot = this.getStructTreeRoot();\n const key = structTreeRoot.data.ParentTreeNextKey++;\n structTreeRoot.data.ParentTree.add(key, []);\n return key;\n },\n\n endMarkings() {\n const structTreeRoot = this._root.data.StructTreeRoot;\n if (structTreeRoot) {\n structTreeRoot.end();\n this.structChildren.forEach((structElem) => structElem.end());\n }\n if (this._root.data.MarkInfo) {\n this._root.data.MarkInfo.end();\n }\n },\n};\n","const FIELD_FLAGS = {\n readOnly: 1,\n required: 2,\n noExport: 4,\n multiline: 0x1000,\n password: 0x2000,\n toggleToOffButton: 0x4000,\n radioButton: 0x8000,\n pushButton: 0x10000,\n combo: 0x20000,\n edit: 0x40000,\n sort: 0x80000,\n multiSelect: 0x200000,\n noSpell: 0x400000,\n};\nconst FIELD_JUSTIFY = {\n left: 0,\n center: 1,\n right: 2,\n};\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\nconst FORMAT_SPECIAL = {\n zip: '0',\n zipPlus4: '1',\n zip4: '1',\n phone: '2',\n ssn: '3',\n};\nconst FORMAT_DEFAULT = {\n number: {\n nDec: 0,\n sepComma: false,\n negStyle: 'MinusBlack',\n currency: '',\n currencyPrepend: true,\n },\n percent: {\n nDec: 0,\n sepComma: false,\n },\n};\n\nexport default {\n /**\n * Must call if adding AcroForms to a document. Must also call font() before\n * this method to set the default font.\n */\n initForm() {\n if (!this._font) {\n throw new Error('Must set a font before calling initForm method');\n }\n this._acroform = {\n fonts: {},\n defaultFont: this._font.name,\n };\n this._acroform.fonts[this._font.id] = this._font.ref();\n\n let data = {\n Fields: [],\n NeedAppearances: true,\n DA: new String(`/${this._font.id} 0 Tf 0 g`),\n DR: {\n Font: {},\n },\n };\n data.DR.Font[this._font.id] = this._font.ref();\n const AcroForm = this.ref(data);\n this._root.data.AcroForm = AcroForm;\n return this;\n },\n\n /**\n * Called automatically by document.js\n */\n endAcroForm() {\n if (this._root.data.AcroForm) {\n if (\n !Object.keys(this._acroform.fonts).length &&\n !this._acroform.defaultFont\n ) {\n throw new Error('No fonts specified for PDF form');\n }\n let fontDict = this._root.data.AcroForm.data.DR.Font;\n Object.keys(this._acroform.fonts).forEach((name) => {\n fontDict[name] = this._acroform.fonts[name];\n });\n this._root.data.AcroForm.data.Fields.forEach((fieldRef) => {\n this._endChild(fieldRef);\n });\n this._root.data.AcroForm.end();\n }\n return this;\n },\n\n _endChild(ref) {\n if (Array.isArray(ref.data.Kids)) {\n ref.data.Kids.forEach((childRef) => {\n this._endChild(childRef);\n });\n ref.end();\n }\n return this;\n },\n\n /**\n * Creates and adds a form field to the document. Form fields are intermediate\n * nodes in a PDF form that are used to specify form name heirarchy and form\n * value defaults.\n * @param {string} name - field name (T attribute in field dictionary)\n * @param {object} options - other attributes to include in field dictionary\n */\n formField(name, options = {}) {\n let fieldDict = this._fieldDict(name, null, options);\n let fieldRef = this.ref(fieldDict);\n this._addToParent(fieldRef);\n return fieldRef;\n },\n\n /**\n * Creates and adds a Form Annotation to the document. Form annotations are\n * called Widget annotations internally within a PDF file.\n * @param {string} name - form field name (T attribute of widget annotation\n * dictionary)\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {object} options\n */\n formAnnotation(name, type, x, y, w, h, options = {}) {\n let fieldDict = this._fieldDict(name, type, options);\n fieldDict.Subtype = 'Widget';\n if (fieldDict.F === undefined) {\n fieldDict.F = 4; // print the annotation\n }\n\n // Add Field annot to page, and get it's ref\n this.annotate(x, y, w, h, fieldDict);\n let annotRef = this.page.annotations[this.page.annotations.length - 1];\n\n return this._addToParent(annotRef);\n },\n\n formText(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'text', x, y, w, h, options);\n },\n\n formPushButton(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\n },\n\n formCombo(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\n },\n\n formList(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'list', x, y, w, h, options);\n },\n\n formRadioButton(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\n },\n\n formCheckbox(name, x, y, w, h, options = {}) {\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\n },\n\n _addToParent(fieldRef) {\n let parent = fieldRef.data.Parent;\n if (parent) {\n if (!parent.data.Kids) {\n parent.data.Kids = [];\n }\n parent.data.Kids.push(fieldRef);\n } else {\n this._root.data.AcroForm.data.Fields.push(fieldRef);\n }\n return this;\n },\n\n _fieldDict(name, type, options = {}) {\n if (!this._acroform) {\n throw new Error(\n 'Call document.initForm() method before adding form elements to document',\n );\n }\n let opts = Object.assign({}, options);\n if (type !== null) {\n opts = this._resolveType(type, options);\n }\n opts = this._resolveFlags(opts);\n opts = this._resolveJustify(opts);\n opts = this._resolveFont(opts);\n opts = this._resolveStrings(opts);\n opts = this._resolveColors(opts);\n opts = this._resolveFormat(opts);\n opts.T = new String(name);\n if (opts.parent) {\n opts.Parent = opts.parent;\n delete opts.parent;\n }\n return opts;\n },\n\n _resolveType(type, opts) {\n if (type === 'text') {\n opts.FT = 'Tx';\n } else if (type === 'pushButton') {\n opts.FT = 'Btn';\n opts.pushButton = true;\n } else if (type === 'radioButton') {\n opts.FT = 'Btn';\n opts.radioButton = true;\n } else if (type === 'checkbox') {\n opts.FT = 'Btn';\n } else if (type === 'combo') {\n opts.FT = 'Ch';\n opts.combo = true;\n } else if (type === 'list') {\n opts.FT = 'Ch';\n } else {\n throw new Error(`Invalid form annotation type '${type}'`);\n }\n return opts;\n },\n\n _resolveFormat(opts) {\n const f = opts.format;\n if (f && f.type) {\n let fnKeystroke;\n let fnFormat;\n let params = '';\n if (FORMAT_SPECIAL[f.type] !== undefined) {\n fnKeystroke = `AFSpecial_Keystroke`;\n fnFormat = `AFSpecial_Format`;\n params = FORMAT_SPECIAL[f.type];\n } else {\n let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\n fnKeystroke = `AF${format}_Keystroke`;\n fnFormat = `AF${format}_Format`;\n\n if (f.type === 'date') {\n fnKeystroke += 'Ex';\n params = String(f.param);\n } else if (f.type === 'time') {\n params = String(f.param);\n } else if (f.type === 'number') {\n let p = Object.assign({}, FORMAT_DEFAULT.number, f);\n params = String(\n [\n String(p.nDec),\n p.sepComma ? '0' : '1',\n '\"' + p.negStyle + '\"',\n 'null',\n '\"' + p.currency + '\"',\n String(p.currencyPrepend),\n ].join(','),\n );\n } else if (f.type === 'percent') {\n let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\n params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\n }\n }\n opts.AA = opts.AA ? opts.AA : {};\n opts.AA.K = {\n S: 'JavaScript',\n JS: new String(`${fnKeystroke}(${params});`),\n };\n opts.AA.F = {\n S: 'JavaScript',\n JS: new String(`${fnFormat}(${params});`),\n };\n }\n delete opts.format;\n return opts;\n },\n\n _resolveColors(opts) {\n let color = this._normalizeColor(opts.backgroundColor);\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n opts.MK.BG = color;\n }\n color = this._normalizeColor(opts.borderColor);\n if (color) {\n if (!opts.MK) {\n opts.MK = {};\n }\n opts.MK.BC = color;\n }\n delete opts.backgroundColor;\n delete opts.borderColor;\n return opts;\n },\n\n _resolveFlags(options) {\n let result = 0;\n Object.keys(options).forEach((key) => {\n if (FIELD_FLAGS[key]) {\n if (options[key]) {\n result |= FIELD_FLAGS[key];\n }\n delete options[key];\n }\n });\n if (result !== 0) {\n options.Ff = options.Ff ? options.Ff : 0;\n options.Ff |= result;\n }\n return options;\n },\n\n _resolveJustify(options) {\n let result = 0;\n if (options.align !== undefined) {\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\n result = FIELD_JUSTIFY[options.align];\n }\n delete options.align;\n }\n if (result !== 0) {\n options.Q = result; // default\n }\n return options;\n },\n\n _resolveFont(options) {\n // add current font to document-level AcroForm dict if necessary\n if (this._acroform.fonts[this._font.id] == null) {\n this._acroform.fonts[this._font.id] = this._font.ref();\n }\n\n // add current font to field's resource dict (RD) if not the default acroform font\n if (this._acroform.defaultFont !== this._font.name) {\n options.DR = { Font: {} };\n\n // Get the fontSize option. If not set use auto sizing\n const fontSize = options.fontSize || 0;\n\n options.DR.Font[this._font.id] = this._font.ref();\n options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\n }\n return options;\n },\n\n _resolveStrings(options) {\n let select = [];\n function appendChoices(a) {\n if (Array.isArray(a)) {\n for (let idx = 0; idx < a.length; idx++) {\n if (typeof a[idx] === 'string') {\n select.push(new String(a[idx]));\n } else {\n select.push(a[idx]);\n }\n }\n }\n }\n appendChoices(options.Opt);\n if (options.select) {\n appendChoices(options.select);\n delete options.select;\n }\n if (select.length) {\n options.Opt = select;\n }\n\n Object.keys(VALUE_MAP).forEach((key) => {\n if (options[key] !== undefined) {\n options[VALUE_MAP[key]] = options[key];\n delete options[key];\n }\n });\n ['V', 'DV'].forEach((key) => {\n if (typeof options[key] === 'string') {\n options[key] = new String(options[key]);\n }\n });\n\n if (options.MK && options.MK.CA) {\n options.MK.CA = new String(options.MK.CA);\n }\n if (options.label) {\n options.MK = options.MK ? options.MK : {};\n options.MK.CA = new String(options.label);\n delete options.label;\n }\n return options;\n },\n};\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * * options.relationship: Relationship between the PDF document and its attached file. Can be 'Alternative', 'Data', 'Source', 'Supplement' or 'Unspecified'.\r\n * @returns filespec reference\r\n */\r\n file(src, options = {}) {\r\n options.name = options.name || src;\r\n options.relationship = options.relationship || 'Unspecified';\r\n\r\n const refBody = {\r\n Type: 'EmbeddedFile',\r\n Params: {},\r\n };\r\n let data;\r\n\r\n if (!src) {\r\n throw new Error('No src specified');\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n const match = /^data:(.*?);base64,(.*)$/.exec(src);\r\n if (match) {\r\n if (match[1]) {\r\n refBody.Subtype = match[1].replace('/', '#2F');\r\n }\r\n data = Buffer.from(match[2], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n throw new Error(`Could not read contents of file at filepath ${src}`);\r\n }\r\n\r\n // update CreationDate and ModDate\r\n const { birthtime, ctime } = fs.statSync(src);\r\n refBody.Params.CreationDate = birthtime;\r\n refBody.Params.ModDate = ctime;\r\n }\r\n }\r\n\r\n // override creation date and modified date\r\n if (options.creationDate instanceof Date) {\r\n refBody.Params.CreationDate = options.creationDate;\r\n }\r\n if (options.modifiedDate instanceof Date) {\r\n refBody.Params.ModDate = options.modifiedDate;\r\n }\r\n // add optional subtype\r\n if (options.type) {\r\n refBody.Subtype = options.type.replace('/', '#2F');\r\n }\r\n\r\n // add checksum and size information\r\n const checksum = CryptoJS.MD5(\r\n CryptoJS.lib.WordArray.create(new Uint8Array(data)),\r\n );\r\n refBody.Params.CheckSum = new String(checksum);\r\n refBody.Params.Size = data.byteLength;\r\n\r\n // save some space when embedding the same file again\r\n // if a file with the same name and metadata exists, reuse its reference\r\n let ref;\r\n if (!this._fileRegistry) this._fileRegistry = {};\r\n let file = this._fileRegistry[options.name];\r\n if (file && isEqual(refBody, file)) {\r\n ref = file.ref;\r\n } else {\r\n ref = this.ref(refBody);\r\n ref.end(data);\r\n\r\n this._fileRegistry[options.name] = { ...refBody, ref };\r\n }\r\n // add filespec for embedded file\r\n const fileSpecBody = {\r\n Type: 'Filespec',\r\n AFRelationship: options.relationship,\r\n F: new String(options.name),\r\n EF: { F: ref },\r\n UF: new String(options.name),\r\n };\r\n if (options.description) {\r\n fileSpecBody.Desc = new String(options.description);\r\n }\r\n const filespec = this.ref(fileSpecBody);\r\n filespec.end();\r\n\r\n if (!options.hidden) {\r\n this.addNamedEmbeddedFile(options.name, filespec);\r\n }\r\n\r\n // Add file to the catalogue to be PDF/A3 compliant\r\n if (this._root.data.AF) {\r\n this._root.data.AF.push(filespec);\r\n } else {\r\n this._root.data.AF = [filespec];\r\n }\r\n\r\n return filespec;\r\n },\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n return (\r\n a.Subtype === b.Subtype &&\r\n a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n a.Params.Size === b.Params.Size &&\r\n a.Params.CreationDate.getTime() === b.Params.CreationDate.getTime() &&\r\n ((a.Params.ModDate === undefined && b.Params.ModDate === undefined) ||\r\n a.Params.ModDate.getTime() === b.Params.ModDate.getTime())\r\n );\r\n}\r\n","import fs from 'fs';\n\nexport default {\n initPDFA(pSubset) {\n if (pSubset.charAt(pSubset.length - 3) === '-') {\n this.subset_conformance = pSubset\n .charAt(pSubset.length - 1)\n .toUpperCase();\n this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\n } else {\n // Default to Basic conformance when user doesn't specify\n this.subset_conformance = 'B';\n this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\n }\n },\n\n endSubset() {\n this._addPdfaMetadata();\n this._addColorOutputIntent();\n },\n\n _addColorOutputIntent() {\n const iccProfile = fs.readFileSync(\n `${__dirname}/data/sRGB_IEC61966_2_1.icc`,\n );\n\n const colorProfileRef = this.ref({\n Length: iccProfile.length,\n N: 3,\n });\n colorProfileRef.write(iccProfile);\n colorProfileRef.end();\n\n const intentRef = this.ref({\n Type: 'OutputIntent',\n S: 'GTS_PDFA1',\n Info: new String('sRGB IEC61966-2.1'),\n OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\n DestOutputProfile: colorProfileRef,\n });\n intentRef.end();\n\n this._root.data.OutputIntents = [intentRef];\n },\n\n _getPdfaid() {\n return `\n \n ${this.subset}\n ${this.subset_conformance}\n \n `;\n },\n\n _addPdfaMetadata() {\n this.appendXML(this._getPdfaid());\n },\n};\n","export default {\n initPDFUA() {\n this.subset = 1;\n },\n\n endSubset() {\n this._addPdfuaMetadata();\n },\n\n _addPdfuaMetadata() {\n this.appendXML(this._getPdfuaid());\n },\n\n _getPdfuaid() {\n return `\n \n ${this.subset}\n \n `;\n },\n};\n","import PDFA from './pdfa';\nimport PDFUA from './pdfua';\n\nexport default {\n _importSubset(subset) {\n Object.assign(this, subset);\n },\n\n initSubset(options) {\n switch (options.subset) {\n case 'PDF/A-1':\n case 'PDF/A-1a':\n case 'PDF/A-1b':\n case 'PDF/A-2':\n case 'PDF/A-2a':\n case 'PDF/A-2b':\n case 'PDF/A-3':\n case 'PDF/A-3a':\n case 'PDF/A-3b':\n this._importSubset(PDFA);\n this.initPDFA(options.subset);\n break;\n case 'PDF/UA':\n this._importSubset(PDFUA);\n this.initPDFUA();\n break;\n }\n },\n};\n","/**\r\n * @template T\r\n * @typedef {function(number): T} Dynamic\r\n */\r\n\r\n/**\r\n * @typedef {Object} Font\r\n * @property {PDFFontSource} [src]\r\n * The name of the font\r\n *\r\n * Defaults to the current document font source `doc._fontSrc`\r\n * @property {string} [family]\r\n * The font family of the font\r\n *\r\n * Defaults to the current document font family `doc._fontFamily`\r\n * @property {Size} [size]\r\n * The size of the font\r\n *\r\n * Defaults to the current document font size `doc._fontSize`\r\n */\r\n\r\n/**\r\n * Measurement of how wide something is, false means 0 and true means 1\r\n *\r\n * @typedef {Size | boolean} Wideness\r\n */\r\n\r\n/**\r\n * The value of the text of a cell\r\n * @typedef {string | null | undefined} TableCellText\r\n */\r\n\r\n/** @typedef {Object} TableCellStyle\r\n *\r\n * @property {TableCellText} [text]\r\n * The text of the table cell\r\n * @property {number} [rowSpan]\r\n * Number of rows the cell spans.\r\n *\r\n * Defaults to `1`.\r\n * @property {number} [colSpan]\r\n * Number of columns the cell spans.\r\n *\r\n * Defaults to `1`.\r\n * @property {SideDefinition} [padding]\r\n * Controls the padding of the cell text\r\n *\r\n * Defaults to `0.25em`\r\n * @property {SideDefinition} [border]\r\n * Controls the thickness of the cells borders.\r\n *\r\n * Defaults to `[1, 1, 1, 1]`.\r\n * @property {SideDefinition} [borderColor]\r\n * Color of the border on each side of the cell.\r\n *\r\n * Defaults to the border color defined by the given table layout, or `black` on all sides.\r\n * @property {Font} [font]\r\n * Font options for the cell\r\n *\r\n * Defaults to the documents current font\r\n * @property {PDFColor} [backgroundColor]\r\n * Set the background color of the cell\r\n *\r\n * Defaults to transparent\r\n * @property {'center' | ExpandedAlign} [align]\r\n * Sets the text alignment of the cells text\r\n *\r\n * Defaults to `{x: 'left', y: 'top'}`\r\n * @property {Size} [textStroke]\r\n * Sets the text stroke width of the cells text\r\n *\r\n * Defaults to `0`\r\n * @property {PDFColor} [textStrokeColor]\r\n * Sets the text stroke color of the cells text\r\n *\r\n * Defaults to `black`\r\n * @property {PDFColor} [textColor]\r\n * Sets the text color of the cells text\r\n *\r\n * Defaults to `black`\r\n * @property {'TH' | 'TD'} [type]\r\n * Sets the cell type (for accessibility)\r\n *\r\n * Defaults to `TD`\r\n * @property {Object} [textOptions]\r\n * Sets any advanced text options passed into the cell renderer\r\n *\r\n * Same as the options you pass to `doc.text()`\r\n *\r\n * Will override any defaults set by the cell if set\r\n * @property {string} [title]\r\n * Sets the accessible title for the cell\r\n * @property {'Column' | 'Row' | 'Both'} [scope]\r\n * Sets the accessible scope for the cell\r\n * @property {string} [id]\r\n * Sets the accessible id for the cell\r\n *\r\n * Defaults to `--`\r\n * @property {boolean} [debug]\r\n * Whether to show the debug lines for the cell\r\n *\r\n * Defaults to `false`\r\n */\r\n/** @typedef {TableCellText | TableCellStyle} TableCell **/\r\n\r\n/**\r\n * The width of the column\r\n *\r\n * - `*` distributes equally, filling the whole available space\r\n * - `%` computes the proportion of the max size\r\n *\r\n * Defaults to `*`\r\n * @typedef {Size | '*'} ColumnWidth\r\n */\r\n\r\n/**\r\n * @typedef {Object} ColumnStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {ColumnWidth} [width]\r\n * @property {Size} [minWidth]\r\n * The minimum width of the column\r\n *\r\n * Defaults to `0`\r\n * @property {Size} [maxWidth]\r\n * The maximum width of the column\r\n *\r\n * Defaults to `undefined` meaning no max\r\n */\r\n/** @typedef {ColumnStyle | ColumnWidth} Column **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedColumnStyle\r\n * @extends ColumnStyle\r\n *\r\n * @property {number | '*'} width\r\n * @property {number} minWidth\r\n * @property {number} maxWidth\r\n */\r\n\r\n/**\r\n * The height of the row\r\n *\r\n * - A fixed value sets an absolute height for every row.\r\n * - `auto` sets the height based on the text.\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `auto`\r\n * @typedef {Size | 'auto'} RowHeight\r\n */\r\n\r\n/**\r\n * @typedef {Object} RowStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {RowHeight} [height]\r\n * @property {Size} [minHeight]\r\n * The minimum height of the row\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `0`\r\n * @property {Size} [maxHeight]\r\n * The maximum height of the row\r\n *\r\n * `%` values are based on page content height\r\n *\r\n * Defaults to `undefined` meaning no max\r\n */\r\n/** @typedef {RowStyle | RowHeight} Row **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedRowStyle\r\n * @extends RowStyle\r\n *\r\n * @property {number | 'auto'} height\r\n * @property {number} minHeight\r\n * @property {number} maxHeight\r\n */\r\n\r\n/** @typedef {'left' | 'center' | 'right' | 'justify'} AlignX **/\r\n/** @typedef {'top' | 'center' | 'bottom'} AlignY **/\r\n/**\r\n * @typedef {Object} ExpandedAlign\r\n * @property {AlignX} [x]\r\n * @property {AlignY} [y]\r\n */\r\n\r\n/**\r\n * @typedef {Object} DefaultTableCellStyle\r\n *\r\n * @extends ColumnStyle\r\n * @extends RowStyle\r\n * @extends TableCellStyle\r\n */\r\n/** @typedef {TableCellText | DefaultTableCellStyle} DefaultTableCell **/\r\n\r\n/**\r\n * @typedef {Object} NormalizedDefaultTableCellStyle\r\n *\r\n * @extends NormalizedColumnStyle\r\n * @extends NormalizedRowStyle\r\n * @extends TableCellStyle\r\n */\r\n\r\n/**\r\n * @typedef {Object} NormalizedTableCellStyle\r\n *\r\n * @extends NormalizedColumnStyle\r\n * @extends NormalizedRowStyle\r\n * @extends TableCellStyle\r\n *\r\n * @property {number} rowIndex\r\n * @property {number} rowSpan\r\n * @property {number} colIndex\r\n * @property {number} colSpan\r\n *\r\n * @property {string} text\r\n * @property {Font} font\r\n * @property {boolean} customFont\r\n * @property {ExpandedSideDefinition} padding\r\n * @property {ExpandedSideDefinition} border\r\n * @property {ExpandedSideDefinition} borderColor\r\n * @property {ExpandedAlign} align\r\n * @property {number} textStroke\r\n * @property {PDFColor} textStrokeColor\r\n * @property {PDFColor} textColor\r\n * @property {number} minWidth\r\n * @property {number} maxWidth\r\n * @property {number} minHeight\r\n * @property {number} maxHeight\r\n * @property {Object} textOptions\r\n */\r\n\r\n/**\r\n * @typedef {Object} SizedNormalizedTableCellStyle\r\n *\r\n * @extends {NormalizedTableCellStyle}\r\n *\r\n * @property {number} x\r\n * @property {number} y\r\n * @property {number} textX\r\n * @property {number} textY\r\n * @property {number} width\r\n * @property {number} height\r\n * @property {number} textAllocatedWidth\r\n * @property {number} textAllocatedHeight\r\n * @property {{x: number, y: number, width: number, height: number}} textBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} Table\r\n *\r\n * @property {Position} [position]\r\n * The position of the table\r\n *\r\n * Defaults to the current document position `{x: doc.x, y: doc.y}`\r\n * @property {Size} [maxWidth]\r\n * The maximum width the table can expand to\r\n *\r\n * Defaults to the remaining content width (offset from the tables position)\r\n * @property {Column | Column[] | Dynamic} [columnStyles]\r\n * Column definitions of the table.\r\n * - A fixed value sets the config for every column\r\n * - Use an array or a callback function to control the column config for each column individually.\r\n *\r\n * Defaults to `auto`\r\n * @property {Row | Row[] | Dynamic} [rowStyles]\r\n * Row definitions of the table.\r\n * - A fixed value sets the config for every column\r\n * - Use an array or a callback function to control the row config of each row individually.\r\n *\r\n * The given values are ignored for rows whose text is higher.\r\n *\r\n * Defaults to `*`.\r\n * @property {DefaultTableCell} [defaultStyle]\r\n * Defaults to apply to every cell\r\n * @property {Iterable>} [data]\r\n * Two-dimensional iterable that defines the table's data.\r\n *\r\n * With the first dimension being the row, and the second being the column\r\n *\r\n * If provided the table will be automatically ended after the last row has been written,\r\n * Otherwise it is up to the user to call `table.end()` or `table.row([], true)`\r\n * @property {PDFStructureElement} [structParent]\r\n * The parent structure to mount to\r\n *\r\n * This will cause the entire table to be enclosed in a Table structure\r\n * with TR and TD/TH for cells\r\n * @property {string} [id]\r\n * Sets the accessible id for the table\r\n *\r\n * Defaults to `table-`\r\n * @property {boolean} [debug]\r\n * Whether to show the debug lines for all the cells\r\n *\r\n * Defaults to `false`\r\n */\r\n\r\n/**\r\n * Fields exclusive to row styles\r\n * @type {string[]}\r\n */\r\nexport const ROW_FIELDS = ['height', 'minHeight', 'maxHeight'];\r\n/**\r\n * Fields exclusive to column styles\r\n * @type {string[]}\r\n */\r\nexport const COLUMN_FIELDS = ['width', 'minWidth', 'maxWidth'];\r\n\r\nexport function memoize(fn, maxSize) {\r\n const cache = new Map();\r\n return function (...args) {\r\n const key = args[0];\r\n if (!cache.has(key)) {\r\n cache.set(key, fn(...args));\r\n if (cache.size > maxSize) cache.delete(cache.keys().next());\r\n }\r\n return cache.get(key);\r\n };\r\n}\r\n\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nfunction isObject(item) {\r\n return item && typeof item === 'object' && !Array.isArray(item);\r\n}\r\n\r\n/**\r\n * Deep merge two objects.\r\n *\r\n * @template T\r\n * @param {T} target\r\n * @param sources\r\n * @returns {T}\r\n */\r\nexport function deepMerge(target, ...sources) {\r\n if (!isObject(target)) return target;\r\n target = deepClone(target);\r\n\r\n for (const source of sources) {\r\n if (isObject(source)) {\r\n for (const key in source) {\r\n if (isObject(source[key])) {\r\n if (!(key in target)) target[key] = {};\r\n target[key] = deepMerge(target[key], source[key]);\r\n } else if (source[key] !== undefined) {\r\n target[key] = deepClone(source[key]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n}\r\n\r\nfunction deepClone(obj) {\r\n let result = obj;\r\n if (obj && typeof obj == 'object') {\r\n result = Array.isArray(obj) ? [] : {};\r\n for (const key in obj) result[key] = deepClone(obj[key]);\r\n }\r\n return result;\r\n}\r\n","import { COLUMN_FIELDS, deepMerge, ROW_FIELDS } from './utils';\nimport { normalizeSides } from '../utils';\n\n/**\n * Normalize the row config\n * @note The context here is the cell not the document\n *\n * @param {DefaultTableCell} [defaultStyleInternal]\n * @returns {{\n * defaultStyle: TableCellStyle,\n * defaultRowStyle: RowStyle,\n * defaultColStyle: ColumnStyle\n * }}\n * @private\n */\nexport function normalizedDefaultStyle(defaultStyleInternal) {\n let defaultStyle = defaultStyleInternal;\n // Force object form\n if (typeof defaultStyle !== 'object') defaultStyle = { text: defaultStyle };\n\n const defaultRowStyle = Object.fromEntries(\n Object.entries(defaultStyle).filter(([k]) => ROW_FIELDS.includes(k)),\n );\n const defaultColStyle = Object.fromEntries(\n Object.entries(defaultStyle).filter(([k]) => COLUMN_FIELDS.includes(k)),\n );\n\n defaultStyle.padding = normalizeSides(defaultStyle.padding);\n defaultStyle.border = normalizeSides(defaultStyle.border);\n defaultStyle.borderColor = normalizeSides(defaultStyle.borderColor);\n defaultStyle.align = normalizeAlignment(defaultStyle.align);\n\n return { defaultStyle, defaultRowStyle, defaultColStyle };\n}\n\n/**\n * Normalize the row config\n *\n * @note The context here is the cell not the document\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {RowStyle} defaultRowStyle\n * @param {Dynamic} rowStyleInternal\n * @param {number} i The target row\n * @returns {NormalizedRowStyle}\n * @private\n */\nexport function normalizedRowStyle(defaultRowStyle, rowStyleInternal, i) {\n let rowStyle = rowStyleInternal(i);\n // Force object form\n if (rowStyle == null || typeof rowStyle !== 'object') {\n rowStyle = { height: rowStyle };\n }\n // Normalize\n rowStyle.padding = normalizeSides(rowStyle.padding);\n rowStyle.border = normalizeSides(rowStyle.border);\n rowStyle.borderColor = normalizeSides(rowStyle.borderColor);\n rowStyle.align = normalizeAlignment(rowStyle.align);\n\n // Merge defaults\n rowStyle = deepMerge(defaultRowStyle, rowStyle);\n\n const document = this.document;\n const page = document.page;\n const contentHeight = page.contentHeight;\n\n if (rowStyle.height == null || rowStyle.height === 'auto') {\n rowStyle.height = 'auto';\n } else {\n rowStyle.height = document.sizeToPoint(\n rowStyle.height,\n 0,\n page,\n contentHeight,\n );\n }\n rowStyle.minHeight = document.sizeToPoint(\n rowStyle.minHeight,\n 0,\n page,\n contentHeight,\n );\n rowStyle.maxHeight = document.sizeToPoint(\n rowStyle.maxHeight,\n 0,\n page,\n contentHeight,\n );\n\n return rowStyle;\n}\n\n/**\n * Normalize the column config\n *\n * @note The context here is the document not the cell\n *\n * @param {ColumnStyle} defaultColStyle\n * @param {Dynamic} colStyleInternal\n * @param {number} i - The target column\n * @returns {NormalizedColumnStyle}\n * @private\n */\nexport function normalizedColumnStyle(defaultColStyle, colStyleInternal, i) {\n let colStyle = colStyleInternal(i);\n // Force object form\n if (colStyle == null || typeof colStyle !== 'object') {\n colStyle = { width: colStyle };\n }\n // Normalize\n colStyle.padding = normalizeSides(colStyle.padding);\n colStyle.border = normalizeSides(colStyle.border);\n colStyle.borderColor = normalizeSides(colStyle.borderColor);\n colStyle.align = normalizeAlignment(colStyle.align);\n\n // Merge defaults\n colStyle = deepMerge(defaultColStyle, colStyle);\n\n if (colStyle.width == null || colStyle.width === '*') {\n colStyle.width = '*';\n } else {\n colStyle.width = this.document.sizeToPoint(\n colStyle.width,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n }\n colStyle.minWidth = this.document.sizeToPoint(\n colStyle.minWidth,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n colStyle.maxWidth = this.document.sizeToPoint(\n colStyle.maxWidth,\n 0,\n this.document.page,\n this._maxWidth, // Use table width here for percentage scaling\n );\n\n return colStyle;\n}\n\nexport function normalizeAlignment(align) {\n return align == null || typeof align === 'string'\n ? { x: align, y: align }\n : align;\n}\n","import { deepMerge, memoize } from './utils';\nimport {\n normalizeAlignment,\n normalizedColumnStyle,\n normalizedDefaultStyle,\n normalizedRowStyle,\n} from './style';\nimport { normalizeSides } from '../utils';\n\n/**\n * Normalize a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function normalizeTable() {\n const doc = this.document;\n const opts = this.opts;\n\n // Normalize config\n let index = doc._tableIndex++;\n this._id = new String(opts.id ?? `table-${index}`);\n this._position = {\n x: doc.sizeToPoint(opts.position?.x, doc.x),\n y: doc.sizeToPoint(opts.position?.y, doc.y),\n };\n this._maxWidth = doc.sizeToPoint(\n opts.maxWidth,\n doc.page.width - doc.page.margins.right - this._position.x,\n );\n\n const { defaultStyle, defaultColStyle, defaultRowStyle } =\n normalizedDefaultStyle(opts.defaultStyle);\n this._defaultStyle = defaultStyle;\n\n let colStyle;\n if (opts.columnStyles) {\n if (Array.isArray(opts.columnStyles)) {\n colStyle = (i) => opts.columnStyles[i];\n } else if (typeof opts.columnStyles === 'function') {\n // memoize all columns\n colStyle = memoize((i) => opts.columnStyles(i), Infinity);\n } else if (typeof opts.columnStyles === 'object') {\n colStyle = () => opts.columnStyles;\n }\n }\n if (!colStyle) colStyle = () => ({});\n this._colStyle = normalizedColumnStyle.bind(this, defaultColStyle, colStyle);\n\n let rowStyle;\n if (opts.rowStyles) {\n if (Array.isArray(opts.rowStyles)) {\n rowStyle = (i) => opts.rowStyles[i];\n } else if (typeof opts.rowStyles === 'function') {\n // Memoize the row configs in a rolling buffer\n rowStyle = memoize((i) => opts.rowStyles(i), 10);\n } else if (typeof opts.rowStyles === 'object') {\n rowStyle = () => opts.rowStyles;\n }\n }\n if (!rowStyle) rowStyle = () => ({});\n this._rowStyle = normalizedRowStyle.bind(this, defaultRowStyle, rowStyle);\n}\n\n/**\n * Convert text into a string\n * - null and undefined are preserved (as they will be ignored)\n * - everything else is run through `String()`\n *\n * @param {*} text\n * @returns {string}\n * @private\n */\nexport function normalizeText(text) {\n // Parse out text\n if (text != null) text = `${text}`;\n return text;\n}\n\n/**\n * Normalize a cell config\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {TableCellStyle} cell - The cell to mutate\n * @param {number} rowIndex - The cells row\n * @param {number} colIndex - The cells column\n * @returns {NormalizedTableCellStyle}\n * @private\n */\nexport function normalizeCell(cell, rowIndex, colIndex) {\n const colStyle = this._colStyle(colIndex);\n let rowStyle = this._rowStyle(rowIndex);\n\n const font = deepMerge({}, colStyle.font, rowStyle.font, cell.font);\n const customFont = Object.values(font).filter((v) => v != null).length > 0;\n const doc = this.document;\n\n // Initialize cell context\n const rollbackFont = doc._fontSource;\n const rollbackFontSize = doc._fontSize;\n const rollbackFontFamily = doc._fontFamily;\n if (customFont) {\n if (font.src) doc.font(font.src, font.family);\n if (font.size) doc.fontSize(font.size);\n\n // Refetch rowStyle to reflect font changes\n rowStyle = this._rowStyle(rowIndex);\n }\n\n cell.padding = normalizeSides(cell.padding);\n cell.border = normalizeSides(cell.border);\n cell.borderColor = normalizeSides(cell.borderColor);\n\n // Cell takes highest priority, then row, then column, then defaultConfig\n const config = deepMerge(this._defaultStyle, colStyle, rowStyle, cell);\n config.rowIndex = rowIndex;\n config.colIndex = colIndex;\n config.font = font ?? {};\n config.customFont = customFont;\n\n // Normalize config\n config.text = normalizeText(config.text);\n config.rowSpan = config.rowSpan ?? 1;\n config.colSpan = config.colSpan ?? 1;\n config.padding = normalizeSides(config.padding, '0.25em', (x) =>\n doc.sizeToPoint(x, '0.25em'),\n );\n config.border = normalizeSides(config.border, 1, (x) =>\n doc.sizeToPoint(x, 1),\n );\n config.borderColor = normalizeSides(\n config.borderColor,\n 'black',\n (x) => x ?? 'black',\n );\n config.align = normalizeAlignment(config.align);\n config.align.x = config.align.x ?? 'left';\n config.align.y = config.align.y ?? 'top';\n config.textStroke = doc.sizeToPoint(config.textStroke, 0);\n config.textStrokeColor = config.textStrokeColor ?? 'black';\n config.textColor = config.textColor ?? 'black';\n config.textOptions = config.textOptions ?? {};\n\n // Accessibility settings\n config.id = new String(config.id ?? `${this._id}-${rowIndex}-${colIndex}`);\n config.type = config.type?.toUpperCase() === 'TH' ? 'TH' : 'TD';\n if (config.scope) {\n config.scope = config.scope.toLowerCase();\n if (config.scope === 'row') config.scope = 'Row';\n else if (config.scope === 'both') config.scope = 'Both';\n else if (config.scope === 'column') config.scope = 'Column';\n }\n\n if (typeof this.opts.debug === 'boolean') config.debug = this.opts.debug;\n\n // Rollback font\n if (customFont) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n\n return config;\n}\n\n/**\n * Normalize a row\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {TableCell[]} row\n * @param {number} rowIndex\n * @returns {NormalizedTableCellStyle[]}\n * @private\n */\nexport function normalizeRow(row, rowIndex) {\n if (!this._cellClaim) this._cellClaim = new Set();\n\n let colIndex = 0;\n return row.map((cell) => {\n // Ensure TableCell\n if (cell == null || typeof cell !== 'object') cell = { text: cell };\n\n // Find the starting column of the cell\n // Skipping over the claimed cells\n while (this._cellClaim.has(`${rowIndex},${colIndex}`)) {\n colIndex++;\n }\n\n cell = normalizeCell.call(this, cell, rowIndex, colIndex);\n\n // Claim any spanning cells\n for (let i = 0; i < cell.rowSpan; i++) {\n for (let j = 0; j < cell.colSpan; j++) {\n this._cellClaim.add(`${rowIndex + i},${colIndex + j}`);\n }\n }\n\n colIndex += cell.colSpan;\n return cell;\n });\n}\n","import { cosine, sine } from '../utils';\n\n/**\n * Compute the widths of the columns, ensuring to distribute the star widths\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle[]} row\n * @private\n */\nexport function ensure(row) {\n // Width init\n /** @type number[] **/\n this._columnWidths = [];\n ensureColumnWidths.call(\n this,\n row.reduce((a, cell) => a + cell.colSpan, 0),\n );\n\n // Height init\n /** @type number[] **/\n this._rowHeights = [];\n /** @type number[] **/\n this._rowYPos = [this._position.y];\n /** @type {Set} **/\n this._rowBuffer = new Set();\n}\n\n/**\n * Compute the widths of the columns, ensuring to distribute the star widths\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {number} numCols\n * @private\n */\nfunction ensureColumnWidths(numCols) {\n // Compute the widths\n let starColumnIndexes = [];\n let starMinAcc = 0;\n let unclaimedWidth = this._maxWidth;\n\n for (let i = 0; i < numCols; i++) {\n let col = this._colStyle(i);\n if (col.width === '*') {\n starColumnIndexes[i] = col;\n starMinAcc += col.minWidth;\n } else {\n unclaimedWidth -= col.width;\n this._columnWidths[i] = col.width;\n }\n }\n\n let starColCount = starColumnIndexes.reduce((x) => x + 1, 0);\n\n if (starMinAcc >= unclaimedWidth) {\n // case 1 - there's no way to fit all columns within available width\n // that's actually pretty bad situation with PDF as we have no horizontal scroll\n starColumnIndexes.forEach((cell, i) => {\n this._columnWidths[i] = cell.minWidth;\n });\n } else if (starColCount > 0) {\n // Otherwise we distribute evenly factoring in the cell bounds\n starColumnIndexes.forEach((col, i) => {\n let starSize = unclaimedWidth / starColCount;\n this._columnWidths[i] = Math.max(starSize, col.minWidth);\n if (col.maxWidth > 0) {\n this._columnWidths[i] = Math.min(this._columnWidths[i], col.maxWidth);\n }\n unclaimedWidth -= this._columnWidths[i];\n starColCount--;\n });\n }\n\n let tempX = this._position.x;\n this._columnXPos = Array.from(this._columnWidths, (v) => {\n const t = tempX;\n tempX += v;\n return t;\n });\n}\n\n/**\n * Compute the dimensions of the cells\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @returns {{newPage: boolean, toRender: SizedNormalizedTableCellStyle[]}}\n * @private\n */\nexport function measure(row, rowIndex) {\n // ===================\n // Add cells to buffer\n // ===================\n row.forEach((cell) => this._rowBuffer.add(cell));\n\n if (rowIndex > 0) {\n this._rowYPos[rowIndex] =\n this._rowYPos[rowIndex - 1] + this._rowHeights[rowIndex - 1];\n }\n\n const rowStyle = this._rowStyle(rowIndex);\n\n // ========================================================\n // Find any cells which are to finish rendering on this row\n // ========================================================\n /** @type {SizedNormalizedTableCellStyle[]} */\n let toRender = [];\n this._rowBuffer.forEach((cell) => {\n if (cell.rowIndex + cell.rowSpan - 1 === rowIndex) {\n toRender.push(measureCell.call(this, cell, rowStyle.height));\n this._rowBuffer.delete(cell);\n }\n });\n\n // =====================================================\n // Find the shared height for the row based on the cells\n // =====================================================\n let rowHeight = rowStyle.height;\n if (rowHeight === 'auto') {\n // Compute remaining height on cells\n rowHeight = toRender.reduce((acc, cell) => {\n let minHeight =\n cell.textBounds.height + cell.padding.top + cell.padding.bottom;\n for (let i = 0; i < cell.rowSpan - 1; i++) {\n minHeight -= this._rowHeights[cell.rowIndex + i];\n }\n return Math.max(acc, minHeight);\n }, 0);\n }\n\n rowHeight = Math.max(rowHeight, rowStyle.minHeight);\n if (rowStyle.maxHeight > 0) {\n rowHeight = Math.min(rowHeight, rowStyle.maxHeight);\n }\n this._rowHeights[rowIndex] = rowHeight;\n\n let newPage = false;\n if (rowHeight > this.document.page.contentHeight) {\n // We are unable to render this row on a single page, for now we log a warning and disable the newPage\n console.warn(\n new Error(\n `Row ${rowIndex} requested more than the safe page height, row has been clamped`,\n ).stack.slice(7),\n );\n this._rowHeights[rowIndex] =\n this.document.page.maxY() - this._rowYPos[rowIndex];\n } else if (this._rowYPos[rowIndex] + rowHeight >= this.document.page.maxY()) {\n // If row is going to go over the safe page height then move it over to new page\n this._rowYPos[rowIndex] = this.document.page.margins.top;\n newPage = true;\n }\n\n // =====================================================\n // Re-measure the cells using the know known height\n // =====================================================\n return {\n newPage,\n toRender: toRender.map((cell) => measureCell.call(this, cell, rowHeight)),\n };\n}\n\n/**\n * Compute the dimensions of the cell and its text\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {NormalizedTableCellStyle} cell\n * @param {number | 'auto'} rowHeight\n * @returns {SizedNormalizedTableCellStyle}\n * @private\n */\nfunction measureCell(cell, rowHeight) {\n // ====================\n // Calculate cell width\n // ====================\n let cellWidth = 0;\n\n // Traverse all the columns of the cell\n for (let i = 0; i < cell.colSpan; i++) {\n cellWidth += this._columnWidths[cell.colIndex + i];\n }\n\n // =====================\n // Calculate cell height\n // =====================\n let cellHeight = rowHeight;\n if (cellHeight === 'auto') {\n // The cells height is effectively infinite\n // (although we clamp it to the page content size)\n cellHeight = this.document.page.contentHeight;\n } else {\n // Add all the spanning rows heights to the cell\n for (let i = 0; i < cell.rowSpan - 1; i++) {\n cellHeight += this._rowHeights[cell.rowIndex + i];\n }\n }\n\n // Allocated text space\n const textAllocatedWidth = cellWidth - cell.padding.left - cell.padding.right;\n\n const textAllocatedHeight =\n cellHeight - cell.padding.top - cell.padding.bottom;\n\n // Compute the text bounds\n const rotation = cell.textOptions.rotation ?? 0;\n const { width: textMaxWidth, height: textMaxHeight } = computeBounds(\n rotation,\n textAllocatedWidth,\n textAllocatedHeight,\n );\n\n const textOptions = {\n // Alignment is handled internally\n align: cell.align.x,\n ellipsis: true, // Default make overflowing text ellipsis\n stroke: cell.textStroke > 0,\n fill: true, // To fix the stroke issue\n width: textMaxWidth,\n height: textMaxHeight,\n rotation,\n // Allow the user to define any custom fields\n ...cell.textOptions,\n };\n\n // ========================\n // Calculate text height\n // ========================\n\n // Compute rendered bounds of the text given the constraints of the cell\n let textBounds = { x: 0, y: 0, width: 0, height: 0 };\n if (cell.text) {\n const rollbackFont = this.document._fontSource;\n const rollbackFontSize = this.document._fontSize;\n const rollbackFontFamily = this.document._fontFamily;\n if (cell.font?.src) this.document.font(cell.font.src, cell.font?.family);\n if (cell.font?.size) this.document.fontSize(cell.font.size);\n\n // We first compute the un-rotated bounds so that we can calculate the width of the text\n const unRotatedTextBounds = this.document.boundsOfString(cell.text, 0, 0, {\n ...textOptions,\n rotation: 0,\n });\n textOptions.width = unRotatedTextBounds.width;\n textOptions.height = unRotatedTextBounds.height;\n\n // Then compute the rendered bounds\n textBounds = this.document.boundsOfString(cell.text, 0, 0, textOptions);\n\n this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n }\n\n return {\n ...cell,\n textOptions,\n x: this._columnXPos[cell.colIndex],\n y: this._rowYPos[cell.rowIndex],\n textX: this._columnXPos[cell.colIndex] + cell.padding.left,\n textY: this._rowYPos[cell.rowIndex] + cell.padding.top,\n width: cellWidth,\n height: cellHeight,\n textAllocatedHeight,\n textAllocatedWidth,\n textBounds,\n };\n}\n\n/**\n * Compute the horizon-locked bounding box of a rect\n *\n * @param {number} rotation\n * @param {number} allocWidth\n * @param {number} allocHeight\n *\n * @returns {{width: number, height: number}}\n */\nfunction computeBounds(rotation, allocWidth, allocHeight) {\n let textMaxWidth, textMaxHeight;\n\n // We use these a lot so pre-compute\n const cos = cosine(rotation);\n const sin = sine(rotation);\n\n // <---------------allocWidth---------------->\n // A════════════════════F════════════════════B\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■ ■ ║\n // ║ ■■░░ ■ ║\n // ║ ■■ ░ ■ ║\n // ║ ■■ Θ ░ ■ ║\n // ║■■ ░ ■ ║\n // E- - - - - - - - - - - - - ■ - - - - - - -║\n // ║■ ■ ║\n // ║■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■ ║\n // ║ ■ ■║\n // ║ ■ ■║\n // ║ ■ G\n // ║ ■ ■■║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■ ║\n // ║ ■ ■■ ║\n // ║ ■ ■■ ║\n // D════════════════════H════════════════════C\n //\n // Given a rectangle ABCD with a fixed side AB of width allocWidth.\n // Find the largest (by area) inscribed rectangle EFGH,\n // where the angle Θ is equal to rotation (between 0-90 degrees)\n //\n // From above we can infer\n // > AF = EF * cos(Θ)\n // > FB = AB - AF\n // > FB = FG * sin(Θ)\n // Rearrange\n // > FG = FB / sin(Θ)\n // Substitute\n // > FG = (AB - EF*cos(Θ)) / sin(Θ)\n // Area of a rectangle\n // > A = EF * FG\n // Substitute\n // > A = EF * (AB - EF*cos(Θ)) / sin(Θ)\n // > dA/dEF = (AB - 2*EF*cos(Θ)) / sin(Θ)\n // Find peak at dA/dEF = 0\n // > 0 = (AB - 2*EF*cos(Θ)) / sin(Θ)\n // > EF = AB / (2*cos(Θ))\n // Substitute\n // > FG = (AB - (AB*cos(Θ)) / (2*cos(Θ))) / sin(Θ)\n // > FG = AB / (2*sin(Θ))\n //\n // Final outcome\n // Length EF = AB / (2*cos(Θ))\n // Length FG = AB / (2*sin(Θ))\n if (rotation === 0 || rotation === 180) {\n textMaxWidth = allocWidth;\n textMaxHeight = allocHeight;\n } else if (rotation === 90 || rotation === 270) {\n textMaxWidth = allocHeight;\n textMaxHeight = allocWidth;\n } else if (rotation < 90 || (rotation > 180 && rotation < 270)) {\n textMaxWidth = allocWidth / (2 * cos);\n textMaxHeight = allocWidth / (2 * sin);\n } else {\n textMaxHeight = allocWidth / (2 * cos);\n textMaxWidth = allocWidth / (2 * sin);\n }\n\n // If The bounding box of the text is beyond the allocHeight\n // then we need to clamp it and recompute the bounds\n // This time we are computing the sizes based on the outer box ABCD\n const EF = sin * textMaxWidth;\n const FG = cos * textMaxHeight;\n if (EF + FG > allocHeight) {\n // > AB = EF * cos(Θ) + FG * sin(Θ)\n // > BC = BG + GC\n // > BG = FG * cos(Θ)\n // > GC = EF * sin(Θ)\n // > BC = FG * cos(Θ) + EF * sin(Θ)\n // > AB = EF * cos(Θ) + FG * sin(Θ)\n // Substitution solve\n // > EF = (AB*cos(Θ) - BC*sin(Θ)) / (cos^2(Θ)-sin^2(Θ))\n // > FG = (BC*cos(Θ) - AB*sin(Θ)) / (cos^2(Θ)-sin^2(Θ))\n const denominator = cos * cos - sin * sin;\n\n if (rotation === 0 || rotation === 180) {\n textMaxWidth = allocWidth;\n textMaxHeight = allocHeight;\n } else if (rotation === 90 || rotation === 270) {\n textMaxWidth = allocHeight;\n textMaxHeight = allocWidth;\n } else if (rotation < 90 || (rotation > 180 && rotation < 270)) {\n textMaxWidth = (allocWidth * cos - allocHeight * sin) / denominator;\n textMaxHeight = (allocHeight * cos - allocWidth * sin) / denominator;\n } else {\n textMaxHeight = (allocWidth * cos - allocHeight * sin) / denominator;\n textMaxWidth = (allocHeight * cos - allocWidth * sin) / denominator;\n }\n }\n\n return { width: Math.abs(textMaxWidth), height: Math.abs(textMaxHeight) };\n}\n","import PDFStructureElement from '../structure_element';\nimport PDFDocument from '../document';\n\n/**\n * Add accessibility to a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function accommodateTable() {\n const structParent = this.opts.structParent;\n if (structParent) {\n this._tableStruct = this.document.struct('Table');\n this._tableStruct.dictionary.data.ID = this._id;\n if (structParent instanceof PDFStructureElement) {\n structParent.add(this._tableStruct);\n } else if (structParent instanceof PDFDocument) {\n structParent.addStructure(this._tableStruct);\n }\n this._headerRowLookup = {};\n this._headerColumnLookup = {};\n }\n}\n\n/**\n * Cleanup accessibility on a table\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @private\n */\nexport function accommodateCleanup() {\n if (this._tableStruct) this._tableStruct.end();\n}\n\n/**\n * Render a row with all its accessibility features\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @param {Function} renderCell\n * @private\n */\nexport function accessibleRow(row, rowIndex, renderCell) {\n const rowStruct = this.document.struct('TR');\n rowStruct.dictionary.data.ID = new String(`${this._id}-${rowIndex}`);\n this._tableStruct.add(rowStruct);\n row.forEach((cell) => renderCell(cell, rowStruct));\n rowStruct.end();\n}\n\n/**\n * Render a cell with all its accessibility features\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n * @param {PDFStructureElement} rowStruct\n * @param {Function} callback\n * @private\n */\nexport function accessibleCell(cell, rowStruct, callback) {\n const doc = this.document;\n\n const cellStruct = doc.struct(cell.type, { title: cell.title });\n cellStruct.dictionary.data.ID = cell.id;\n\n rowStruct.add(cellStruct);\n\n const padding = cell.padding;\n const border = cell.border;\n const attributes = {\n O: 'Table',\n Width: cell.width,\n Height: cell.height,\n Padding: [padding.top, padding.bottom, padding.left, padding.right],\n RowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined,\n ColSpan: cell.colSpan > 1 ? cell.colSpan : undefined,\n BorderThickness: [border.top, border.bottom, border.left, border.right],\n };\n\n // Claim row Headers\n if (cell.type === 'TH') {\n if (cell.scope === 'Row' || cell.scope === 'Both') {\n for (let i = 0; i < cell.rowSpan; i++) {\n if (!this._headerRowLookup[cell.rowIndex + i]) {\n this._headerRowLookup[cell.rowIndex + i] = [];\n }\n this._headerRowLookup[cell.rowIndex + i].push(cell.id);\n }\n attributes.Scope = cell.scope;\n }\n if (cell.scope === 'Column' || cell.scope === 'Both') {\n for (let i = 0; i < cell.colSpan; i++) {\n if (!this._headerColumnLookup[cell.colIndex + i]) {\n this._headerColumnLookup[cell.colIndex + i] = [];\n }\n this._headerColumnLookup[cell.colIndex + i].push(cell.id);\n }\n attributes.Scope = cell.scope;\n }\n }\n\n // Find any cells which are marked as headers for this cell\n const Headers = new Set(\n [\n ...Array.from(\n { length: cell.colSpan },\n (_, i) => this._headerColumnLookup[cell.colIndex + i],\n ).flat(),\n ...Array.from(\n { length: cell.rowSpan },\n (_, i) => this._headerRowLookup[cell.rowIndex + i],\n ).flat(),\n ].filter(Boolean),\n );\n if (Headers.size) attributes.Headers = Array.from(Headers);\n\n const normalizeColor = doc._normalizeColor;\n if (cell.backgroundColor != null) {\n attributes.BackgroundColor = normalizeColor(cell.backgroundColor);\n }\n const hasBorder = [border.top, border.bottom, border.left, border.right];\n if (hasBorder.some((x) => x)) {\n const borderColor = cell.borderColor;\n attributes.BorderColor = [\n hasBorder[0] ? normalizeColor(borderColor.top) : null,\n hasBorder[1] ? normalizeColor(borderColor.bottom) : null,\n hasBorder[2] ? normalizeColor(borderColor.left) : null,\n hasBorder[3] ? normalizeColor(borderColor.right) : null,\n ];\n }\n\n // Remove any undefined attributes\n Object.keys(attributes).forEach(\n (key) => attributes[key] === undefined && delete attributes[key],\n );\n cellStruct.dictionary.data.A = doc.ref(attributes);\n cellStruct.add(callback);\n cellStruct.end();\n cellStruct.dictionary.data.A.end();\n}\n","import { accessibleCell, accessibleRow } from './accessibility';\n\n/**\n * Render a cell\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle[]} row\n * @param {number} rowIndex\n * @private\n */\nexport function renderRow(row, rowIndex) {\n if (this._tableStruct) {\n accessibleRow.call(this, row, rowIndex, renderCell.bind(this));\n } else {\n row.forEach((cell) => renderCell.call(this, cell));\n }\n\n return this._rowYPos[rowIndex] + this._rowHeights[rowIndex];\n}\n\n/**\n * Render a cell\n *\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n * @param {PDFStructureElement} rowStruct\n * @private\n */\nfunction renderCell(cell, rowStruct) {\n const cellRenderer = () => {\n // Render cell background\n if (cell.backgroundColor != null) {\n this.document\n .save()\n .rect(cell.x, cell.y, cell.width, cell.height)\n .fill(cell.backgroundColor)\n .restore();\n }\n\n // Render border\n renderBorder.call(\n this,\n cell.border,\n cell.borderColor,\n cell.x,\n cell.y,\n cell.width,\n cell.height,\n );\n\n // Debug cell borders\n if (cell.debug) {\n this.document.save();\n this.document.dash(1, { space: 1 }).lineWidth(1).strokeOpacity(0.3);\n\n // Debug cell bounds\n this.document\n .rect(cell.x, cell.y, cell.width, cell.height)\n .stroke('green');\n\n this.document.restore();\n }\n\n // Render text\n if (cell.text) renderCellText.call(this, cell);\n };\n\n if (rowStruct) accessibleCell.call(this, cell, rowStruct, cellRenderer);\n else cellRenderer();\n}\n\n/**\n * @this PDFTable\n * @memberOf PDFTable\n * @param {SizedNormalizedTableCellStyle} cell\n */\nfunction renderCellText(cell) {\n const doc = this.document;\n\n // Configure fonts\n const rollbackFont = doc._fontSource;\n const rollbackFontSize = doc._fontSize;\n const rollbackFontFamily = doc._fontFamily;\n if (cell.customFont) {\n if (cell.font.src) doc.font(cell.font.src, cell.font.family);\n if (cell.font.size) doc.fontSize(cell.font.size);\n }\n\n const x = cell.textX;\n const y = cell.textY;\n const Ah = cell.textAllocatedHeight;\n const Aw = cell.textAllocatedWidth;\n const Cw = cell.textBounds.width;\n const Ch = cell.textBounds.height;\n const Ox = -cell.textBounds.x;\n const Oy = -cell.textBounds.y;\n\n const PxScale =\n cell.align.x === 'right' ? 1 : cell.align.x === 'center' ? 0.5 : 0;\n const Px = (Aw - Cw) * PxScale;\n const PyScale =\n cell.align.y === 'bottom' ? 1 : cell.align.y === 'center' ? 0.5 : 0;\n const Py = (Ah - Ch) * PyScale;\n\n const dx = Px + Ox;\n const dy = Py + Oy;\n\n if (cell.debug) {\n doc.save();\n doc.dash(1, { space: 1 }).lineWidth(1).strokeOpacity(0.3);\n\n // Debug actual text bounds\n if (cell.text) {\n doc\n .moveTo(x + Px, y)\n .lineTo(x + Px, y + Ah)\n .moveTo(x + Px + Cw, y)\n .lineTo(x + Px + Cw, y + Ah)\n .stroke('blue')\n .moveTo(x, y + Py)\n .lineTo(x + Aw, y + Py)\n .moveTo(x, y + Py + Ch)\n .lineTo(x + Aw, y + Py + Ch)\n .stroke('green');\n }\n // Debug allocated text bounds\n doc.rect(x, y, Aw, Ah).stroke('orange');\n\n doc.restore();\n }\n\n // Create text mask to cut off any overflowing text\n // Mask cuts off at the padding not the actual cell, this is intentional!\n doc.save().rect(x, y, Aw, Ah).clip();\n\n doc.fillColor(cell.textColor).strokeColor(cell.textStrokeColor);\n if (cell.textStroke > 0) doc.lineWidth(cell.textStroke);\n\n // Render the text\n doc.text(cell.text, x + dx, y + dy, cell.textOptions);\n\n // Cleanup\n doc.restore();\n if (cell.font) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize);\n}\n\n/**\n * @this PDFTable\n * @memberOf PDFTable\n * @param {ExpandedSideDefinition} border\n * @param {ExpandedSideDefinition} borderColor\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number[]} [mask]\n * @private\n */\nfunction renderBorder(border, borderColor, x, y, width, height, mask) {\n border = Object.fromEntries(\n Object.entries(border).map(([k, v]) => [k, mask && !mask[k] ? 0 : v]),\n );\n\n const doc = this.document;\n if (\n [border.right, border.bottom, border.left].every(\n (val) => val === border.top,\n )\n ) {\n if (border.top > 0) {\n doc\n .save()\n .lineWidth(border.top)\n .rect(x, y, width, height)\n .stroke(borderColor.top)\n .restore();\n }\n } else {\n // Top\n if (border.top > 0) {\n doc\n .save()\n .lineWidth(border.top)\n .moveTo(x, y)\n .lineTo(x + width, y)\n .stroke(borderColor.top)\n .restore();\n }\n // Right\n if (border.right > 0) {\n doc\n .save()\n .lineWidth(border.right)\n .moveTo(x + width, y)\n .lineTo(x + width, y + height)\n .stroke(borderColor.right)\n .restore();\n }\n // Bottom\n if (border.bottom > 0) {\n doc\n .save()\n .lineWidth(border.bottom)\n .moveTo(x + width, y + height)\n .lineTo(x, y + height)\n .stroke(borderColor.bottom)\n .restore();\n }\n // Left\n if (border.left > 0) {\n doc\n .save()\n .lineWidth(border.left)\n .moveTo(x, y + height)\n .lineTo(x, y)\n .stroke(borderColor.left)\n .restore();\n }\n }\n}\n","import { normalizeRow, normalizeTable } from './normalize';\nimport { measure, ensure } from './size';\nimport { renderRow } from './render';\nimport { accommodateCleanup, accommodateTable } from './accessibility';\n\nclass PDFTable {\n /**\n * @param {PDFDocument} document\n * @param {Table} [opts]\n */\n constructor(document, opts = {}) {\n this.document = document;\n this.opts = Object.freeze(opts);\n\n normalizeTable.call(this);\n accommodateTable.call(this);\n\n this._currRowIndex = 0;\n this._ended = false;\n\n // Render cells if present\n if (opts.data) {\n for (const row of opts.data) this.row(row);\n return this.end();\n }\n }\n\n /**\n * Render a new row in the table\n *\n * @param {Iterable} row - The cells to render\n * @param {boolean} lastRow - Whether this row is the last row\n * @returns {this} returns the table, unless lastRow is `true` then returns the `PDFDocument`\n */\n row(row, lastRow = false) {\n if (this._ended) {\n throw new Error(`Table was marked as ended on row ${this._currRowIndex}`);\n }\n\n // Convert the iterable into an array\n row = Array.from(row);\n // Transform row\n row = normalizeRow.call(this, row, this._currRowIndex);\n if (this._currRowIndex === 0) ensure.call(this, row);\n const { newPage, toRender } = measure.call(this, row, this._currRowIndex);\n if (newPage) this.document.continueOnNewPage();\n const yPos = renderRow.call(this, toRender, this._currRowIndex);\n\n // Position document at base of new row\n this.document.x = this._position.x;\n this.document.y = yPos;\n\n if (lastRow) return this.end();\n\n this._currRowIndex++;\n return this;\n }\n\n /**\n * Indicates to the table that it is finished,\n * allowing the table to flush its cell buffer (which should be empty unless there is rowSpans)\n *\n * @returns {PDFDocument} the document\n */\n end() {\n // Flush any remaining cells\n while (this._rowBuffer?.size) this.row([]);\n this._ended = true;\n accommodateCleanup.call(this);\n return this.document;\n }\n}\n\nexport default PDFTable;\n","import PDFTable from '../table/index';\n\nexport default {\n initTables() {\n this._tableIndex = 0;\n },\n /**\n * @param {Table} [opts]\n * @returns {PDFTable} returns the table object unless `data` is set,\n * then it returns the underlying document\n */\n table(opts) {\n return new PDFTable(this, opts);\n },\n};\n","class PDFMetadata {\n constructor() {\n this._metadata = `\n \n \n \n `;\n }\n\n _closeTags() {\n this._metadata = this._metadata.concat(`\n \n \n \n `);\n }\n\n append(xml, newline = true) {\n this._metadata = this._metadata.concat(xml);\n if (newline) this._metadata = this._metadata.concat('\\n');\n }\n\n getXML() {\n return this._metadata;\n }\n\n getLength() {\n return this._metadata.length;\n }\n\n end() {\n this._closeTags();\n this._metadata = this._metadata.trim();\n }\n}\n\nexport default PDFMetadata;\n","import PDFMetadata from '../metadata';\n\nexport default {\n initMetadata() {\n this.metadata = new PDFMetadata();\n },\n\n appendXML(xml, newline = true) {\n this.metadata.append(xml, newline);\n },\n\n _addInfo() {\n this.appendXML(`\n \n ${this.info.CreationDate.toISOString().split('.')[0] + 'Z'}\n ${this.info.Creator}\n \n `);\n\n if (this.info.Title || this.info.Author || this.info.Subject) {\n this.appendXML(`\n \n `);\n\n if (this.info.Title) {\n this.appendXML(`\n \n \n ${this.info.Title}\n \n \n `);\n }\n\n if (this.info.Author) {\n this.appendXML(`\n \n \n ${this.info.Author}\n \n \n `);\n }\n\n if (this.info.Subject) {\n this.appendXML(`\n \n \n ${this.info.Subject}\n \n \n `);\n }\n\n this.appendXML(`\n \n `);\n }\n\n this.appendXML(\n `\n \n ${this.info.Creator}`,\n false,\n );\n\n if (this.info.Keywords) {\n this.appendXML(\n `\n ${this.info.Keywords}`,\n false,\n );\n }\n\n this.appendXML(`\n \n `);\n },\n\n endMetadata() {\n this._addInfo();\n\n this.metadata.end();\n\n /*\n Metadata was introduced in PDF 1.4, so adding it to 1.3 \n will likely only take up more space.\n */\n if (this.version != 1.3) {\n this.metadataRef = this.ref({\n length: this.metadata.getLength(),\n Type: 'Metadata',\n Subtype: 'XML',\n });\n this.metadataRef.compress = false;\n this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\n this.metadataRef.end();\n this._root.data.Metadata = this.metadataRef;\n }\n },\n};\n","/*\nPDFDocument - represents an entire PDF document\nBy Devon Govett\n*/\n\nimport stream from 'stream';\nimport PDFObject from './object';\nimport PDFReference from './reference';\nimport PDFPage from './page';\nimport PDFNameTree from './name_tree';\nimport PDFSecurity from './security';\nimport ColorMixin from './mixins/color';\nimport VectorMixin from './mixins/vector';\nimport FontsMixin from './mixins/fonts';\nimport TextMixin from './mixins/text';\nimport ImagesMixin from './mixins/images';\nimport AnnotationsMixin from './mixins/annotations';\nimport OutlineMixin from './mixins/outline';\nimport MarkingsMixin from './mixins/markings';\nimport AcroFormMixin from './mixins/acroform';\nimport AttachmentsMixin from './mixins/attachments';\nimport LineWrapper from './line_wrapper';\nimport SubsetMixin from './mixins/subsets';\nimport TableMixin from './mixins/table';\nimport MetadataMixin from './mixins/metadata';\n\nclass PDFDocument extends stream.Readable {\n constructor(options = {}) {\n super(options);\n this.options = options;\n\n // PDF version\n switch (options.pdfVersion) {\n case '1.4':\n this.version = 1.4;\n break;\n case '1.5':\n this.version = 1.5;\n break;\n case '1.6':\n this.version = 1.6;\n break;\n case '1.7':\n case '1.7ext3':\n this.version = 1.7;\n break;\n default:\n this.version = 1.3;\n break;\n }\n\n // Whether streams should be compressed\n this.compress =\n this.options.compress != null ? this.options.compress : true;\n\n this._pageBuffer = [];\n this._pageBufferStart = 0;\n\n // The PDF object store\n this._offsets = [];\n this._waiting = 0;\n this._ended = false;\n this._offset = 0;\n const Pages = this.ref({\n Type: 'Pages',\n Count: 0,\n Kids: [],\n });\n\n const Names = this.ref({\n Dests: new PDFNameTree(),\n });\n\n this._root = this.ref({\n Type: 'Catalog',\n Pages,\n Names,\n });\n\n if (this.options.lang) {\n this._root.data.Lang = new String(this.options.lang);\n }\n\n // The current page\n this.page = null;\n\n // Initialize mixins\n this.initMetadata();\n this.initColor();\n this.initVector();\n this.initFonts(options.font);\n this.initText();\n this.initImages();\n this.initOutline();\n this.initMarkings(options);\n this.initTables();\n this.initSubset(options);\n\n // Initialize the metadata\n this.info = {\n Producer: 'PDFKit',\n Creator: 'PDFKit',\n CreationDate: new Date(),\n };\n\n if (this.options.info) {\n for (let key in this.options.info) {\n const val = this.options.info[key];\n this.info[key] = val;\n }\n }\n\n if (this.options.displayTitle) {\n this._root.data.ViewerPreferences = this.ref({\n DisplayDocTitle: true,\n });\n }\n\n // Generate file ID\n this._id = PDFSecurity.generateFileID(this.info);\n\n // Initialize security settings\n this._security = PDFSecurity.create(this, options);\n\n // Write the header\n // PDF version\n this._write(`%PDF-${this.version}`);\n\n // 4 binary chars, as recommended by the spec\n this._write('%\\xFF\\xFF\\xFF\\xFF');\n\n // Add the first page\n if (this.options.autoFirstPage !== false) {\n this.addPage();\n }\n }\n\n addPage(options) {\n if (options == null) {\n ({ options } = this);\n }\n\n // end the current page if needed\n if (!this.options.bufferPages) {\n this.flushPages();\n }\n\n // create a page object\n this.page = new PDFPage(this, options);\n this._pageBuffer.push(this.page);\n\n // add the page to the object store\n const pages = this._root.data.Pages.data;\n pages.Kids.push(this.page.dictionary);\n pages.Count++;\n\n // reset x and y coordinates\n this.x = this.page.margins.left;\n this.y = this.page.margins.top;\n\n // flip PDF coordinate system so that the origin is in\n // the top left rather than the bottom left\n this._ctm = [1, 0, 0, 1, 0, 0];\n this.transform(1, 0, 0, -1, 0, this.page.height);\n\n this.emit('pageAdded');\n\n return this;\n }\n\n continueOnNewPage(options) {\n const pageMarkings = this.endPageMarkings(this.page);\n\n this.addPage(options ?? this.page._options);\n\n this.initPageMarkings(pageMarkings);\n\n return this;\n }\n\n bufferedPageRange() {\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\n }\n\n switchToPage(n) {\n let page;\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\n throw new Error(\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\n this._pageBufferStart\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`,\n );\n }\n\n return (this.page = page);\n }\n\n flushPages() {\n // this local variable exists so we're future-proof against\n // reentrant calls to flushPages.\n const pages = this._pageBuffer;\n this._pageBuffer = [];\n this._pageBufferStart += pages.length;\n for (let page of pages) {\n this.endPageMarkings(page);\n page.end();\n }\n }\n\n addNamedDestination(name, ...args) {\n if (args.length === 0) {\n args = ['XYZ', null, null, null];\n }\n if (args[0] === 'XYZ' && args[2] !== null) {\n args[2] = this.page.height - args[2];\n }\n args.unshift(this.page.dictionary);\n this._root.data.Names.data.Dests.add(name, args);\n }\n\n addNamedEmbeddedFile(name, ref) {\n if (!this._root.data.Names.data.EmbeddedFiles) {\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({\n limits: false,\n });\n }\n\n // add filespec to EmbeddedFiles\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\n }\n\n addNamedJavaScript(name, js) {\n if (!this._root.data.Names.data.JavaScript) {\n this._root.data.Names.data.JavaScript = new PDFNameTree();\n }\n let data = {\n JS: new String(js),\n S: 'JavaScript',\n };\n this._root.data.Names.data.JavaScript.add(name, data);\n }\n\n ref(data) {\n const ref = new PDFReference(this, this._offsets.length + 1, data);\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\n this._waiting++;\n return ref;\n }\n\n _read() {}\n // do nothing, but this method is required by node\n\n _write(data) {\n if (!Buffer.isBuffer(data)) {\n data = Buffer.from(data + '\\n', 'binary');\n }\n\n this.push(data);\n this._offset += data.length;\n }\n\n addContent(data) {\n this.page.write(data);\n return this;\n }\n\n _refEnd(ref) {\n this._offsets[ref.id - 1] = ref.offset;\n if (--this._waiting === 0 && this._ended) {\n this._finalize();\n this._ended = false;\n }\n }\n\n end() {\n this.flushPages();\n\n this._info = this.ref();\n for (let key in this.info) {\n let val = this.info[key];\n if (typeof val === 'string') {\n val = new String(val);\n }\n\n let entry = this.ref(val);\n entry.end();\n\n this._info.data[key] = entry;\n }\n\n this._info.end();\n\n for (let name in this._fontFamilies) {\n const font = this._fontFamilies[name];\n font.finalize();\n }\n\n this.endOutline();\n this.endMarkings();\n\n if (this.subset) {\n this.endSubset();\n }\n\n this.endMetadata();\n\n this._root.end();\n this._root.data.Pages.end();\n this._root.data.Names.end();\n this.endAcroForm();\n\n if (this._root.data.ViewerPreferences) {\n this._root.data.ViewerPreferences.end();\n }\n\n if (this._security) {\n this._security.end();\n }\n\n if (this._waiting === 0) {\n this._finalize();\n } else {\n this._ended = true;\n }\n }\n\n _finalize() {\n // generate xref\n const xRefOffset = this._offset;\n this._write('xref');\n this._write(`0 ${this._offsets.length + 1}`);\n this._write('0000000000 65535 f ');\n\n for (let offset of this._offsets) {\n offset = `0000000000${offset}`.slice(-10);\n this._write(offset + ' 00000 n ');\n }\n\n // trailer\n const trailer = {\n Size: this._offsets.length + 1,\n Root: this._root,\n Info: this._info,\n ID: [this._id, this._id],\n };\n if (this._security) {\n trailer.Encrypt = this._security.dictionary;\n }\n\n this._write('trailer');\n this._write(PDFObject.convert(trailer));\n\n this._write('startxref');\n this._write(`${xRefOffset}`);\n this._write('%%EOF');\n\n // end the stream\n this.push(null);\n }\n\n toString() {\n return '[object PDFDocument]';\n }\n}\n\nconst mixin = (methods) => {\n Object.assign(PDFDocument.prototype, methods);\n};\n\nmixin(MetadataMixin);\nmixin(ColorMixin);\nmixin(VectorMixin);\nmixin(FontsMixin);\nmixin(TextMixin);\nmixin(ImagesMixin);\nmixin(AnnotationsMixin);\nmixin(OutlineMixin);\nmixin(MarkingsMixin);\nmixin(AcroFormMixin);\nmixin(AttachmentsMixin);\nmixin(SubsetMixin);\nmixin(TableMixin);\n\nPDFDocument.LineWrapper = LineWrapper;\n\nexport default PDFDocument;\n"],"names":["PDFAbstractReference","toString","Error","PDFTree","constructor","options","_items","limits","add","key","val","get","sortedKeys","Object","keys","sort","a","b","_compareKeys","out","length","first","last","push","PDFObject","convert","_dataForKey","_keysName","join","SpotColor","doc","name","C","M","Y","K","id","spotColors","values","ref","Range","C0","C1","map","value","FunctionType","Domain","N","end","pad","str","Array","slice","escapableRe","escapable","swapBytes","buff","l","i","object","encryptFn","String","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","e","call","number","n","Math","round","PDFReference","document","data","gen","compress","Filter","uncompressedLength","buffer","write","chunk","Uint8Array","Length","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","fArray","Float32Array","uArray","Uint32Array","PDFNumber","rounded","fround","normalizeSides","sides","defaultDefinition","undefined","transformer","v","top","right","bottom","left","vertical","horizontal","MM_TO_CM","CM_TO_IN","PX_TO_IN","IN_TO_PT","PC_TO_PT","cosine","cos","PI","sine","sin","DEFAULT_MARGINS","SIZES","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","_options","size","layout","dimensions","toUpperCase","width","height","content","font","fontFamily","fontSize","margins","margin","x","sizeToPoint","resources","ProcSet","dictionary","Type","Parent","_root","Pages","MediaBox","Contents","Resources","markings","fonts","Font","xobjects","XObject","ext_gstates","ExtGState","patterns","Pattern","colorSpaces","ColorSpace","annotations","Annots","structParentTreeKey","StructParents","createStructParentTreeNextKey","contentWidth","contentHeight","maxY","_setTabOrder","Tabs","hasMarkInfoDictionary","color","PDFNameTree","localeCompare","k","inRange","rangeGroup","startRange","endRange","middleRange","floor","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","isCommonlyMappedToNothing","non_ASCII_space_characters","isNonASCIISpaceCharacter","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","toCodePoints","input","codepoints","before","next","saslprep","opts","TypeError","mapped_input","filter","normalized_input","fromCodePoint","apply","normalize","normalized_map","hasProhibited","some","allowUnassigned","hasUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","PDFSecurity","generateFileID","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","generateRandomWordArray","bytes","lib","WordArray","random","create","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","getUserPasswordR5","userKeySalt","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","padding","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","alloc","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","wordArray","byteArray","PDFGradient","stops","embedded","transform","stop","pos","opacity","_normalizeColor","_colorSpace","max","setTransform","m11","m12","m21","m22","dx","dy","embed","m","fn","stopsLength","matrix","bounds","encode","Functions","Bounds","Encode","_gradCount","shader","pattern","PatternType","Shading","Matrix","grad","opacityGradient","pageBBox","page","form","Subtype","FormType","BBox","Group","S","CS","Sh1","gstate","SMask","G","opacityPattern","PaintType","TilingType","XStep","YStep","Gs1","stroke","m0","m1","m2","m3","m4","m5","_ctm","_setColorSpace","op","addContent","PDFLinearGradient","x1","y1","x2","y2","ShadingType","Coords","Function","Extend","PDFRadialGradient","r1","r2","underlyingColorSpaces","PDFTilingPattern","bBox","xStep","yStep","stream","createPattern","toFixed","embedPatternColorSpaces","forEach","csName","csId","getPatternColorSpaceId","cs","underlyingColorspace","_patternCount","patternColor","normalizedColor","_getColorSpace","Gradient","initColor","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","_setColor","_setColorCore","space","fillColor","set","fillOpacity","_fillColor","strokeColor","strokeOpacity","_doOpacity","ca","CA","linearGradient","radialGradient","bbox","addSpotColor","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","cx","cy","px","py","sx","sy","parameters","A","H","h","L","Q","q","s","T","t","Z","z","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","solveArc","lineTo","closePath","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","sin_th","cos_th","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","x3","y3","SVGPath","KAPPA","initVector","_ctmStack","save","restore","pop","lineWidth","w","_CAP_STYLES","BUTT","ROUND","SQUARE","lineCap","_JOIN_STYLES","MITER","BEVEL","lineJoin","miterLimit","dash","originalLength","valid","every","Number","isFinite","JSON","stringify","phase","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","rect","roundedRect","ellipse","xe","ye","xm","ym","circle","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","points","shift","point","_windingRule","rule","test","fill","fillAndStroke","isFillRule","clip","translate","rotate","angle","rad","origin","scale","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","contents","attributes","glyphWidths","boundingBoxes","kernPairs","ascender","descender","xHeight","capHeight","lineGap","section","line","match","encodeText","text","res","len","char","glyphsForString","glyphs","charCode","characterToGlyph","widthOfGlyph","glyph","getKernPair","advancesForGlyphs","advances","PDFFont","widthOfString","lineHeight","includeGap","gap","STANDARD_FONTS","Courier","fs","readFileSync","__dirname","Courier-Bold","Courier-Oblique","Courier-BoldOblique","Helvetica","Helvetica-Bold","Helvetica-Oblique","Helvetica-BoldOblique","Times-Roman","Times-Bold","Times-Italic","Times-BoldItalic","Symbol","ZapfDingbats","StandardFont","BaseFont","Encoding","encoded","positions","xAdvance","yAdvance","xOffset","yOffset","advanceWidth","advance","isStandardFont","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","layoutRun","features","run","position","layoutCached","cached","onlyWidth","needle","gid","includeGlyph","codePoints","isCFF","cff","fontFile","familyClass","sFamilyClass","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","replaceAll","descriptor","FontName","Flags","FontBBox","minX","minY","maxX","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","W","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","chunkSize","chunks","ranges","start","PDFFontFactory","open","src","family","fontkit","ArrayBuffer","isEqualFont","font1","font2","_tables","checkSumAdjustment","records","initFonts","defaultFont","defaultFontFamily","defaultFontSize","_fontFamilies","_fontCount","_fontSource","_fontFamily","_fontSize","_font","_remSize","_registeredFonts","cacheKey","currentLineHeight","registerFont","defaultValue","percentageWidth","multiplier","SOFT_HYPHEN","HYPHEN","LineWrapper","EventEmitter","horizontalScaling","indent","characterSpacing","wordSpacing","columns","columnGap","spaceLeft","startX","startY","column","ellipsis","continuedX","on","indentAllLines","once","continued","align","lastLine","paragraphGap","wordWidth","word","canFit","eachWord","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","lbk","fbk","mightGrow","mustShrink","required","wrap","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","lh","continueOnNewPage","formatListLabel","listType","letter","times","initText","_line","bind","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","struct","structType","markStructureContent","rotation","wrapper","_wrapper","_textOptions","boundsOfString","trim","spaceWidth","x4","y4","xMin","xMax","yMin","yMax","heightOfString","Infinity","list","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","drawListItem","listItem","itemType","labelType","bodyType","structTypes","diff","_fragment","assign","lineBreak","baseline","renderedWidth","link","goTo","destination","addNamedDestination","underline","lineY","strike","oblique","skew","encodedWord","positionsWord","hadOffset","addSegment","cur","flush","MARKERS","COLOR_SPACE_MAP","JPEG","label","marker","readUInt16BE","orientation","exif","fromBuffer","Orientation","bits","channels","colorSpace","BitsPerComponent","Width","Height","PNGImage","image","PNG","imgData","dataDecoded","hasAlphaChannel","isInterlaced","interlaceMethod","Predictor","Colors","colors","Columns","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","initImages","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","originX","originY","ignoreOrientation","inDocumentFlow","openImage","wp","hp","fit","cover","valign","rotateAngle","xTransform","yTransform","hTransform","wTransform","annotate","Rect","_convertRect","Border","F","Dest","note","Name","D","url","pages","Kids","URI","_markup","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","file","filespec","hidden","FS","Desc","PDFOutline","parent","title","dest","expanded","outlineData","children","addItem","endOutline","Count","First","Last","child","Prev","Next","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","type","_attached","_ended","_flushed","_isValidChild","lang","Lang","alt","Alt","E","actual","ActualText","_children","setParent","setAttached","_addContentToParentTree","_contentForClosure","pageStructParents","getStructParentTree","parentRef","_flush","closure","endMarkedContent","_isFlushable","_flushChild","Pg","MCID","PDFNumberTree","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","readOnly","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","center","VALUE_MAP","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","percent","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","f","format","fnKeystroke","fnFormat","param","AA","JS","backgroundColor","MK","BG","borderColor","BC","Ff","select","appendChoices","idx","Opt","relationship","refBody","Params","birthtime","ctime","statSync","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","byteLength","_fileRegistry","isEqual","fileSpecBody","AFRelationship","EF","UF","description","addNamedEmbeddedFile","AF","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","_addColorOutputIntent","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","initPDFUA","_addPdfuaMetadata","_getPdfuaid","_importSubset","initSubset","PDFA","PDFUA","ROW_FIELDS","COLUMN_FIELDS","memoize","maxSize","cache","Map","has","delete","isObject","deepMerge","target","sources","deepClone","source","normalizedDefaultStyle","defaultStyleInternal","defaultStyle","defaultRowStyle","fromEntries","defaultColStyle","border","normalizeAlignment","normalizedRowStyle","rowStyleInternal","rowStyle","minHeight","maxHeight","normalizedColumnStyle","colStyleInternal","colStyle","_maxWidth","minWidth","maxWidth","normalizeTable","_tableIndex","_position","_defaultStyle","columnStyles","_colStyle","rowStyles","_rowStyle","normalizeText","normalizeCell","cell","rowIndex","colIndex","customFont","rollbackFont","rollbackFontSize","rollbackFontFamily","config","rowSpan","colSpan","textStroke","textStrokeColor","textColor","textOptions","scope","toLowerCase","debug","normalizeRow","row","_cellClaim","Set","ensure","_columnWidths","ensureColumnWidths","reduce","_rowHeights","_rowYPos","_rowBuffer","numCols","starColumnIndexes","starMinAcc","unclaimedWidth","col","starColCount","starSize","tempX","_columnXPos","measure","toRender","measureCell","rowHeight","acc","textBounds","newPage","console","warn","stack","cellWidth","cellHeight","textAllocatedWidth","textAllocatedHeight","textMaxWidth","textMaxHeight","computeBounds","unRotatedTextBounds","textX","textY","allocWidth","allocHeight","FG","denominator","accommodateTable","_tableStruct","ID","PDFDocument","_headerRowLookup","_headerColumnLookup","accommodateCleanup","accessibleRow","renderCell","rowStruct","accessibleCell","callback","cellStruct","Padding","RowSpan","ColSpan","BorderThickness","Scope","Headers","_","flat","Boolean","normalizeColor","BackgroundColor","hasBorder","BorderColor","renderRow","cellRenderer","renderBorder","renderCellText","Ah","Aw","Cw","Ch","Ox","Oy","PxScale","Px","PyScale","Py","PDFTable","freeze","_currRowIndex","lastRow","yPos","initTables","table","PDFMetadata","_metadata","_closeTags","append","xml","newline","getXML","getLength","initMetadata","metadata","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","Metadata","Readable","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","autoFirstPage","addPage","bufferPages","flushPages","bufferedPageRange","count","switchToPage","unshift","EmbeddedFiles","addNamedJavaScript","js","JavaScript","_read","_finalize","_info","entry","xRefOffset","trailer","Root","Encrypt","mixin","methods","prototype","MetadataMixin","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin","MarkingsMixin","AcroFormMixin","AttachmentsMixin","SubsetMixin","TableMixin"],"mappings":"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M,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EA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EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE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"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.standalone.js b/skills/flight-finder/node_modules/pdfkit/js/pdfkit.standalone.js deleted file mode 100644 index eb9d3e4..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/pdfkit.standalone.js +++ /dev/null @@ -1,50446 +0,0 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.PDFDocument = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i this._compareKeys(a, b)); - const out = ['<<']; - if (this.limits && sortedKeys.length > 1) { - const first = sortedKeys[0], - last = sortedKeys[sortedKeys.length - 1]; - out.push(` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`); - } - out.push(` /${this._keysName()} [`); - for (let key of sortedKeys) { - out.push(` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(this._items[key])}`); - } - out.push(']'); - out.push('>>'); - return out.join('\n'); - } - _compareKeys() { - throw new Error('Must be implemented by subclasses'); - } - _keysName() { - throw new Error('Must be implemented by subclasses'); - } - _dataForKey() { - throw new Error('Must be implemented by subclasses'); - } -} - -class SpotColor { - constructor(doc, name, C, M, Y, K) { - this.id = 'CS' + Object.keys(doc.spotColors).length; - this.name = name; - this.values = [C, M, Y, K]; - this.ref = doc.ref(['Separation', this.name, 'DeviceCMYK', { - Range: [0, 1, 0, 1, 0, 1, 0, 1], - C0: [0, 0, 0, 0], - C1: this.values.map(value => value / 100), - FunctionType: 2, - Domain: [0, 1], - N: 1 - }]); - this.ref.end(); - } - toString() { - return `${this.ref.id} 0 R`; - } -} - -const pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length); -const escapableRe = /[\n\r\t\b\f()\\]/g; -const escapable = { - '\n': '\\n', - '\r': '\\r', - '\t': '\\t', - '\b': '\\b', - '\f': '\\f', - '\\': '\\\\', - '(': '\\(', - ')': '\\)' -}; -const swapBytes = function (buff) { - const l = buff.length; - if (l & 0x01) { - throw new Error('Buffer length must be even'); - } else { - for (let i = 0, end = l - 1; i < end; i += 2) { - const a = buff[i]; - buff[i] = buff[i + 1]; - buff[i + 1] = a; - } - } - return buff; -}; -class PDFObject { - static convert(object, encryptFn = null) { - if (typeof object === 'string') { - return `/${object}`; - } else if (object instanceof String) { - let string = object; - let isUnicode = false; - for (let i = 0, end = string.length; i < end; i++) { - if (string.charCodeAt(i) > 0x7f) { - isUnicode = true; - break; - } - } - let stringBuffer; - if (isUnicode) { - stringBuffer = swapBytes(Buffer.from(`\ufeff${string}`, 'utf16le')); - } else { - stringBuffer = Buffer.from(string.valueOf(), 'ascii'); - } - if (encryptFn) { - string = encryptFn(stringBuffer).toString('binary'); - } else { - string = stringBuffer.toString('binary'); - } - string = string.replace(escapableRe, c => escapable[c]); - return `(${string})`; - } else if (Buffer.isBuffer(object)) { - return `<${object.toString('hex')}>`; - } else if (object instanceof PDFAbstractReference || object instanceof PDFTree || object instanceof SpotColor) { - return object.toString(); - } else if (object instanceof Date) { - let string = `D:${pad(object.getUTCFullYear(), 4)}` + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z'; - if (encryptFn) { - string = encryptFn(Buffer.from(string, 'ascii')).toString('binary'); - string = string.replace(escapableRe, c => escapable[c]); - } - return `(${string})`; - } else if (Array.isArray(object)) { - const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' '); - return `[${items}]`; - } else if ({}.toString.call(object) === '[object Object]') { - const out = ['<<']; - for (let key in object) { - const val = object[key]; - out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`); - } - out.push('>>'); - return out.join('\n'); - } else if (typeof object === 'number') { - return PDFObject.number(object); - } else { - return `${object}`; - } - } - static number(n) { - if (n > -1e21 && n < 1e21) { - return Math.round(n * 1e6) / 1e6; - } - throw new Error(`unsupported number: ${n}`); - } -} - -class PDFReference extends PDFAbstractReference { - constructor(document, id, data = {}) { - super(); - this.document = document; - this.id = id; - this.data = data; - this.gen = 0; - this.compress = this.document.compress && !this.data.Filter; - this.uncompressedLength = 0; - this.buffer = []; - } - write(chunk) { - if (!(chunk instanceof Uint8Array)) { - chunk = Buffer.from(chunk + '\n', 'binary'); - } - this.uncompressedLength += chunk.length; - if (this.data.Length == null) { - this.data.Length = 0; - } - this.buffer.push(chunk); - this.data.Length += chunk.length; - if (this.compress) { - this.data.Filter = 'FlateDecode'; - } - } - end(chunk) { - if (chunk) { - this.write(chunk); - } - this.finalize(); - } - finalize() { - this.offset = this.document._offset; - const encryptFn = this.document._security ? this.document._security.getEncryptFn(this.id, this.gen) : null; - if (this.buffer.length) { - this.buffer = Buffer.concat(this.buffer); - if (this.compress) { - this.buffer = zlib.deflateSync(this.buffer); - } - if (encryptFn) { - this.buffer = encryptFn(this.buffer); - } - this.data.Length = this.buffer.length; - } - this.document._write(`${this.id} ${this.gen} obj`); - this.document._write(PDFObject.convert(this.data, encryptFn)); - if (this.buffer.length) { - this.document._write('stream'); - this.document._write(this.buffer); - this.buffer = []; - this.document._write('\nendstream'); - } - this.document._write('endobj'); - this.document._refEnd(this); - } - toString() { - return `${this.id} ${this.gen} R`; - } -} - -const fArray = new Float32Array(1); -const uArray = new Uint32Array(fArray.buffer); -function PDFNumber(n) { - const rounded = Math.fround(n); - if (rounded <= n) return rounded; - fArray[0] = n; - if (n <= 0) { - uArray[0] += 1; - } else { - uArray[0] -= 1; - } - return fArray[0]; -} -function normalizeSides(sides, defaultDefinition = undefined, transformer = v => v) { - if (sides == null || typeof sides === 'object' && Object.keys(sides).length === 0) { - sides = defaultDefinition; - } - if (sides == null || typeof sides !== 'object') { - sides = { - top: sides, - right: sides, - bottom: sides, - left: sides - }; - } else if (Array.isArray(sides)) { - if (sides.length === 2) { - sides = { - vertical: sides[0], - horizontal: sides[1] - }; - } else { - sides = { - top: sides[0], - right: sides[1], - bottom: sides[2], - left: sides[3] - }; - } - } - if ('vertical' in sides || 'horizontal' in sides) { - sides = { - top: sides.vertical, - right: sides.horizontal, - bottom: sides.vertical, - left: sides.horizontal - }; - } - return { - top: transformer(sides.top), - right: transformer(sides.right), - bottom: transformer(sides.bottom), - left: transformer(sides.left) - }; -} -const MM_TO_CM = 1 / 10; -const CM_TO_IN = 1 / 2.54; -const PX_TO_IN = 1 / 96; -const IN_TO_PT = 72; -const PC_TO_PT = 12; -function cosine(a) { - if (a === 0) return 1; - if (a === 90) return 0; - if (a === 180) return -1; - if (a === 270) return 0; - return Math.cos(a * Math.PI / 180); -} -function sine(a) { - if (a === 0) return 0; - if (a === 90) return 1; - if (a === 180) return 0; - if (a === 270) return -1; - return Math.sin(a * Math.PI / 180); -} - -const DEFAULT_MARGINS = { - top: 72, - left: 72, - bottom: 72, - right: 72 -}; -const SIZES = { - '4A0': [4767.87, 6740.79], - '2A0': [3370.39, 4767.87], - A0: [2383.94, 3370.39], - A1: [1683.78, 2383.94], - A2: [1190.55, 1683.78], - A3: [841.89, 1190.55], - A4: [595.28, 841.89], - A5: [419.53, 595.28], - A6: [297.64, 419.53], - A7: [209.76, 297.64], - A8: [147.4, 209.76], - A9: [104.88, 147.4], - A10: [73.7, 104.88], - B0: [2834.65, 4008.19], - B1: [2004.09, 2834.65], - B2: [1417.32, 2004.09], - B3: [1000.63, 1417.32], - B4: [708.66, 1000.63], - B5: [498.9, 708.66], - B6: [354.33, 498.9], - B7: [249.45, 354.33], - B8: [175.75, 249.45], - B9: [124.72, 175.75], - B10: [87.87, 124.72], - C0: [2599.37, 3676.54], - C1: [1836.85, 2599.37], - C2: [1298.27, 1836.85], - C3: [918.43, 1298.27], - C4: [649.13, 918.43], - C5: [459.21, 649.13], - C6: [323.15, 459.21], - C7: [229.61, 323.15], - C8: [161.57, 229.61], - C9: [113.39, 161.57], - C10: [79.37, 113.39], - RA0: [2437.8, 3458.27], - RA1: [1729.13, 2437.8], - RA2: [1218.9, 1729.13], - RA3: [864.57, 1218.9], - RA4: [609.45, 864.57], - SRA0: [2551.18, 3628.35], - SRA1: [1814.17, 2551.18], - SRA2: [1275.59, 1814.17], - SRA3: [907.09, 1275.59], - SRA4: [637.8, 907.09], - EXECUTIVE: [521.86, 756.0], - FOLIO: [612.0, 936.0], - LEGAL: [612.0, 1008.0], - LETTER: [612.0, 792.0], - TABLOID: [792.0, 1224.0] -}; -class PDFPage { - constructor(document, options = {}) { - this.document = document; - this._options = options; - this.size = options.size || 'letter'; - this.layout = options.layout || 'portrait'; - const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; - this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; - this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; - this.content = this.document.ref(); - if (options.font) document.font(options.font, options.fontFamily); - if (options.fontSize) document.fontSize(options.fontSize); - this.margins = normalizeSides(options.margin ?? options.margins, DEFAULT_MARGINS, x => document.sizeToPoint(x, 0, this)); - this.resources = this.document.ref({ - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] - }); - this.dictionary = this.document.ref({ - Type: 'Page', - Parent: this.document._root.data.Pages, - MediaBox: [0, 0, this.width, this.height], - Contents: this.content, - Resources: this.resources - }); - this.markings = []; - } - get fonts() { - const data = this.resources.data; - return data.Font != null ? data.Font : data.Font = {}; - } - get xobjects() { - const data = this.resources.data; - return data.XObject != null ? data.XObject : data.XObject = {}; - } - get ext_gstates() { - const data = this.resources.data; - return data.ExtGState != null ? data.ExtGState : data.ExtGState = {}; - } - get patterns() { - const data = this.resources.data; - return data.Pattern != null ? data.Pattern : data.Pattern = {}; - } - get colorSpaces() { - const data = this.resources.data; - return data.ColorSpace || (data.ColorSpace = {}); - } - get annotations() { - const data = this.dictionary.data; - return data.Annots != null ? data.Annots : data.Annots = []; - } - get structParentTreeKey() { - const data = this.dictionary.data; - return data.StructParents != null ? data.StructParents : data.StructParents = this.document.createStructParentTreeNextKey(); - } - get contentWidth() { - return this.width - this.margins.left - this.margins.right; - } - get contentHeight() { - return this.height - this.margins.top - this.margins.bottom; - } - maxY() { - return this.height - this.margins.bottom; - } - write(chunk) { - return this.content.write(chunk); - } - _setTabOrder() { - if (!this.dictionary.Tabs && this.document.hasMarkInfoDictionary()) { - this.dictionary.data.Tabs = 'S'; - } - } - end() { - this._setTabOrder(); - this.dictionary.end(); - this.resources.data.ColorSpace = this.resources.data.ColorSpace || {}; - for (let color of Object.values(this.document.spotColors)) { - this.resources.data.ColorSpace[color.id] = color; - } - this.resources.end(); - return this.content.end(); - } -} - -class PDFNameTree extends PDFTree { - _compareKeys(a, b) { - return a.localeCompare(b); - } - _keysName() { - return 'Names'; - } - _dataForKey(k) { - return new String(k); - } -} - -function inRange(value, rangeGroup) { - if (value < rangeGroup[0]) return false; - let startRange = 0; - let endRange = rangeGroup.length / 2; - while (startRange <= endRange) { - const middleRange = Math.floor((startRange + endRange) / 2); - const arrayIndex = middleRange * 2; - if (value >= rangeGroup[arrayIndex] && value <= rangeGroup[arrayIndex + 1]) { - return true; - } - if (value > rangeGroup[arrayIndex + 1]) { - startRange = middleRange + 1; - } else { - endRange = middleRange - 1; - } - } - return false; -} - -const unassigned_code_points = [0x0221, 0x0221, 0x0234, 0x024f, 0x02ae, 0x02af, 0x02ef, 0x02ff, 0x0350, 0x035f, 0x0370, 0x0373, 0x0376, 0x0379, 0x037b, 0x037d, 0x037f, 0x0383, 0x038b, 0x038b, 0x038d, 0x038d, 0x03a2, 0x03a2, 0x03cf, 0x03cf, 0x03f7, 0x03ff, 0x0487, 0x0487, 0x04cf, 0x04cf, 0x04f6, 0x04f7, 0x04fa, 0x04ff, 0x0510, 0x0530, 0x0557, 0x0558, 0x0560, 0x0560, 0x0588, 0x0588, 0x058b, 0x0590, 0x05a2, 0x05a2, 0x05ba, 0x05ba, 0x05c5, 0x05cf, 0x05eb, 0x05ef, 0x05f5, 0x060b, 0x060d, 0x061a, 0x061c, 0x061e, 0x0620, 0x0620, 0x063b, 0x063f, 0x0656, 0x065f, 0x06ee, 0x06ef, 0x06ff, 0x06ff, 0x070e, 0x070e, 0x072d, 0x072f, 0x074b, 0x077f, 0x07b2, 0x0900, 0x0904, 0x0904, 0x093a, 0x093b, 0x094e, 0x094f, 0x0955, 0x0957, 0x0971, 0x0980, 0x0984, 0x0984, 0x098d, 0x098e, 0x0991, 0x0992, 0x09a9, 0x09a9, 0x09b1, 0x09b1, 0x09b3, 0x09b5, 0x09ba, 0x09bb, 0x09bd, 0x09bd, 0x09c5, 0x09c6, 0x09c9, 0x09ca, 0x09ce, 0x09d6, 0x09d8, 0x09db, 0x09de, 0x09de, 0x09e4, 0x09e5, 0x09fb, 0x0a01, 0x0a03, 0x0a04, 0x0a0b, 0x0a0e, 0x0a11, 0x0a12, 0x0a29, 0x0a29, 0x0a31, 0x0a31, 0x0a34, 0x0a34, 0x0a37, 0x0a37, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3d, 0x0a43, 0x0a46, 0x0a49, 0x0a4a, 0x0a4e, 0x0a58, 0x0a5d, 0x0a5d, 0x0a5f, 0x0a65, 0x0a75, 0x0a80, 0x0a84, 0x0a84, 0x0a8c, 0x0a8c, 0x0a8e, 0x0a8e, 0x0a92, 0x0a92, 0x0aa9, 0x0aa9, 0x0ab1, 0x0ab1, 0x0ab4, 0x0ab4, 0x0aba, 0x0abb, 0x0ac6, 0x0ac6, 0x0aca, 0x0aca, 0x0ace, 0x0acf, 0x0ad1, 0x0adf, 0x0ae1, 0x0ae5, 0x0af0, 0x0b00, 0x0b04, 0x0b04, 0x0b0d, 0x0b0e, 0x0b11, 0x0b12, 0x0b29, 0x0b29, 0x0b31, 0x0b31, 0x0b34, 0x0b35, 0x0b3a, 0x0b3b, 0x0b44, 0x0b46, 0x0b49, 0x0b4a, 0x0b4e, 0x0b55, 0x0b58, 0x0b5b, 0x0b5e, 0x0b5e, 0x0b62, 0x0b65, 0x0b71, 0x0b81, 0x0b84, 0x0b84, 0x0b8b, 0x0b8d, 0x0b91, 0x0b91, 0x0b96, 0x0b98, 0x0b9b, 0x0b9b, 0x0b9d, 0x0b9d, 0x0ba0, 0x0ba2, 0x0ba5, 0x0ba7, 0x0bab, 0x0bad, 0x0bb6, 0x0bb6, 0x0bba, 0x0bbd, 0x0bc3, 0x0bc5, 0x0bc9, 0x0bc9, 0x0bce, 0x0bd6, 0x0bd8, 0x0be6, 0x0bf3, 0x0c00, 0x0c04, 0x0c04, 0x0c0d, 0x0c0d, 0x0c11, 0x0c11, 0x0c29, 0x0c29, 0x0c34, 0x0c34, 0x0c3a, 0x0c3d, 0x0c45, 0x0c45, 0x0c49, 0x0c49, 0x0c4e, 0x0c54, 0x0c57, 0x0c5f, 0x0c62, 0x0c65, 0x0c70, 0x0c81, 0x0c84, 0x0c84, 0x0c8d, 0x0c8d, 0x0c91, 0x0c91, 0x0ca9, 0x0ca9, 0x0cb4, 0x0cb4, 0x0cba, 0x0cbd, 0x0cc5, 0x0cc5, 0x0cc9, 0x0cc9, 0x0cce, 0x0cd4, 0x0cd7, 0x0cdd, 0x0cdf, 0x0cdf, 0x0ce2, 0x0ce5, 0x0cf0, 0x0d01, 0x0d04, 0x0d04, 0x0d0d, 0x0d0d, 0x0d11, 0x0d11, 0x0d29, 0x0d29, 0x0d3a, 0x0d3d, 0x0d44, 0x0d45, 0x0d49, 0x0d49, 0x0d4e, 0x0d56, 0x0d58, 0x0d5f, 0x0d62, 0x0d65, 0x0d70, 0x0d81, 0x0d84, 0x0d84, 0x0d97, 0x0d99, 0x0db2, 0x0db2, 0x0dbc, 0x0dbc, 0x0dbe, 0x0dbf, 0x0dc7, 0x0dc9, 0x0dcb, 0x0dce, 0x0dd5, 0x0dd5, 0x0dd7, 0x0dd7, 0x0de0, 0x0df1, 0x0df5, 0x0e00, 0x0e3b, 0x0e3e, 0x0e5c, 0x0e80, 0x0e83, 0x0e83, 0x0e85, 0x0e86, 0x0e89, 0x0e89, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e93, 0x0e98, 0x0e98, 0x0ea0, 0x0ea0, 0x0ea4, 0x0ea4, 0x0ea6, 0x0ea6, 0x0ea8, 0x0ea9, 0x0eac, 0x0eac, 0x0eba, 0x0eba, 0x0ebe, 0x0ebf, 0x0ec5, 0x0ec5, 0x0ec7, 0x0ec7, 0x0ece, 0x0ecf, 0x0eda, 0x0edb, 0x0ede, 0x0eff, 0x0f48, 0x0f48, 0x0f6b, 0x0f70, 0x0f8c, 0x0f8f, 0x0f98, 0x0f98, 0x0fbd, 0x0fbd, 0x0fcd, 0x0fce, 0x0fd0, 0x0fff, 0x1022, 0x1022, 0x1028, 0x1028, 0x102b, 0x102b, 0x1033, 0x1035, 0x103a, 0x103f, 0x105a, 0x109f, 0x10c6, 0x10cf, 0x10f9, 0x10fa, 0x10fc, 0x10ff, 0x115a, 0x115e, 0x11a3, 0x11a7, 0x11fa, 0x11ff, 0x1207, 0x1207, 0x1247, 0x1247, 0x1249, 0x1249, 0x124e, 0x124f, 0x1257, 0x1257, 0x1259, 0x1259, 0x125e, 0x125f, 0x1287, 0x1287, 0x1289, 0x1289, 0x128e, 0x128f, 0x12af, 0x12af, 0x12b1, 0x12b1, 0x12b6, 0x12b7, 0x12bf, 0x12bf, 0x12c1, 0x12c1, 0x12c6, 0x12c7, 0x12cf, 0x12cf, 0x12d7, 0x12d7, 0x12ef, 0x12ef, 0x130f, 0x130f, 0x1311, 0x1311, 0x1316, 0x1317, 0x131f, 0x131f, 0x1347, 0x1347, 0x135b, 0x1360, 0x137d, 0x139f, 0x13f5, 0x1400, 0x1677, 0x167f, 0x169d, 0x169f, 0x16f1, 0x16ff, 0x170d, 0x170d, 0x1715, 0x171f, 0x1737, 0x173f, 0x1754, 0x175f, 0x176d, 0x176d, 0x1771, 0x1771, 0x1774, 0x177f, 0x17dd, 0x17df, 0x17ea, 0x17ff, 0x180f, 0x180f, 0x181a, 0x181f, 0x1878, 0x187f, 0x18aa, 0x1dff, 0x1e9c, 0x1e9f, 0x1efa, 0x1eff, 0x1f16, 0x1f17, 0x1f1e, 0x1f1f, 0x1f46, 0x1f47, 0x1f4e, 0x1f4f, 0x1f58, 0x1f58, 0x1f5a, 0x1f5a, 0x1f5c, 0x1f5c, 0x1f5e, 0x1f5e, 0x1f7e, 0x1f7f, 0x1fb5, 0x1fb5, 0x1fc5, 0x1fc5, 0x1fd4, 0x1fd5, 0x1fdc, 0x1fdc, 0x1ff0, 0x1ff1, 0x1ff5, 0x1ff5, 0x1fff, 0x1fff, 0x2053, 0x2056, 0x2058, 0x205e, 0x2064, 0x2069, 0x2072, 0x2073, 0x208f, 0x209f, 0x20b2, 0x20cf, 0x20eb, 0x20ff, 0x213b, 0x213c, 0x214c, 0x2152, 0x2184, 0x218f, 0x23cf, 0x23ff, 0x2427, 0x243f, 0x244b, 0x245f, 0x24ff, 0x24ff, 0x2614, 0x2615, 0x2618, 0x2618, 0x267e, 0x267f, 0x268a, 0x2700, 0x2705, 0x2705, 0x270a, 0x270b, 0x2728, 0x2728, 0x274c, 0x274c, 0x274e, 0x274e, 0x2753, 0x2755, 0x2757, 0x2757, 0x275f, 0x2760, 0x2795, 0x2797, 0x27b0, 0x27b0, 0x27bf, 0x27cf, 0x27ec, 0x27ef, 0x2b00, 0x2e7f, 0x2e9a, 0x2e9a, 0x2ef4, 0x2eff, 0x2fd6, 0x2fef, 0x2ffc, 0x2fff, 0x3040, 0x3040, 0x3097, 0x3098, 0x3100, 0x3104, 0x312d, 0x3130, 0x318f, 0x318f, 0x31b8, 0x31ef, 0x321d, 0x321f, 0x3244, 0x3250, 0x327c, 0x327e, 0x32cc, 0x32cf, 0x32ff, 0x32ff, 0x3377, 0x337a, 0x33de, 0x33df, 0x33ff, 0x33ff, 0x4db6, 0x4dff, 0x9fa6, 0x9fff, 0xa48d, 0xa48f, 0xa4c7, 0xabff, 0xd7a4, 0xd7ff, 0xfa2e, 0xfa2f, 0xfa6b, 0xfaff, 0xfb07, 0xfb12, 0xfb18, 0xfb1c, 0xfb37, 0xfb37, 0xfb3d, 0xfb3d, 0xfb3f, 0xfb3f, 0xfb42, 0xfb42, 0xfb45, 0xfb45, 0xfbb2, 0xfbd2, 0xfd40, 0xfd4f, 0xfd90, 0xfd91, 0xfdc8, 0xfdcf, 0xfdfd, 0xfdff, 0xfe10, 0xfe1f, 0xfe24, 0xfe2f, 0xfe47, 0xfe48, 0xfe53, 0xfe53, 0xfe67, 0xfe67, 0xfe6c, 0xfe6f, 0xfe75, 0xfe75, 0xfefd, 0xfefe, 0xff00, 0xff00, 0xffbf, 0xffc1, 0xffc8, 0xffc9, 0xffd0, 0xffd1, 0xffd8, 0xffd9, 0xffdd, 0xffdf, 0xffe7, 0xffe7, 0xffef, 0xfff8, 0x10000, 0x102ff, 0x1031f, 0x1031f, 0x10324, 0x1032f, 0x1034b, 0x103ff, 0x10426, 0x10427, 0x1044e, 0x1cfff, 0x1d0f6, 0x1d0ff, 0x1d127, 0x1d129, 0x1d1de, 0x1d3ff, 0x1d455, 0x1d455, 0x1d49d, 0x1d49d, 0x1d4a0, 0x1d4a1, 0x1d4a3, 0x1d4a4, 0x1d4a7, 0x1d4a8, 0x1d4ad, 0x1d4ad, 0x1d4ba, 0x1d4ba, 0x1d4bc, 0x1d4bc, 0x1d4c1, 0x1d4c1, 0x1d4c4, 0x1d4c4, 0x1d506, 0x1d506, 0x1d50b, 0x1d50c, 0x1d515, 0x1d515, 0x1d51d, 0x1d51d, 0x1d53a, 0x1d53a, 0x1d53f, 0x1d53f, 0x1d545, 0x1d545, 0x1d547, 0x1d549, 0x1d551, 0x1d551, 0x1d6a4, 0x1d6a7, 0x1d7ca, 0x1d7cd, 0x1d800, 0x1fffd, 0x2a6d7, 0x2f7ff, 0x2fa1e, 0x2fffd, 0x30000, 0x3fffd, 0x40000, 0x4fffd, 0x50000, 0x5fffd, 0x60000, 0x6fffd, 0x70000, 0x7fffd, 0x80000, 0x8fffd, 0x90000, 0x9fffd, 0xa0000, 0xafffd, 0xb0000, 0xbfffd, 0xc0000, 0xcfffd, 0xd0000, 0xdfffd, 0xe0000, 0xe0000, 0xe0002, 0xe001f, 0xe0080, 0xefffd]; -const isUnassignedCodePoint = character => inRange(character, unassigned_code_points); -const commonly_mapped_to_nothing = [0x00ad, 0x00ad, 0x034f, 0x034f, 0x1806, 0x1806, 0x180b, 0x180b, 0x180c, 0x180c, 0x180d, 0x180d, 0x200b, 0x200b, 0x200c, 0x200c, 0x200d, 0x200d, 0x2060, 0x2060, 0xfe00, 0xfe00, 0xfe01, 0xfe01, 0xfe02, 0xfe02, 0xfe03, 0xfe03, 0xfe04, 0xfe04, 0xfe05, 0xfe05, 0xfe06, 0xfe06, 0xfe07, 0xfe07, 0xfe08, 0xfe08, 0xfe09, 0xfe09, 0xfe0a, 0xfe0a, 0xfe0b, 0xfe0b, 0xfe0c, 0xfe0c, 0xfe0d, 0xfe0d, 0xfe0e, 0xfe0e, 0xfe0f, 0xfe0f, 0xfeff, 0xfeff]; -const isCommonlyMappedToNothing = character => inRange(character, commonly_mapped_to_nothing); -const non_ASCII_space_characters = [0x00a0, 0x00a0, 0x1680, 0x1680, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, 0x2003, 0x2003, 0x2004, 0x2004, 0x2005, 0x2005, 0x2006, 0x2006, 0x2007, 0x2007, 0x2008, 0x2008, 0x2009, 0x2009, 0x200a, 0x200a, 0x200b, 0x200b, 0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000]; -const isNonASCIISpaceCharacter = character => inRange(character, non_ASCII_space_characters); -const non_ASCII_controls_characters = [0x0080, 0x009f, 0x06dd, 0x06dd, 0x070f, 0x070f, 0x180e, 0x180e, 0x200c, 0x200c, 0x200d, 0x200d, 0x2028, 0x2028, 0x2029, 0x2029, 0x2060, 0x2060, 0x2061, 0x2061, 0x2062, 0x2062, 0x2063, 0x2063, 0x206a, 0x206f, 0xfeff, 0xfeff, 0xfff9, 0xfffc, 0x1d173, 0x1d17a]; -const non_character_codepoints = [0xfdd0, 0xfdef, 0xfffe, 0xffff, 0x1fffe, 0x1ffff, 0x2fffe, 0x2ffff, 0x3fffe, 0x3ffff, 0x4fffe, 0x4ffff, 0x5fffe, 0x5ffff, 0x6fffe, 0x6ffff, 0x7fffe, 0x7ffff, 0x8fffe, 0x8ffff, 0x9fffe, 0x9ffff, 0xafffe, 0xaffff, 0xbfffe, 0xbffff, 0xcfffe, 0xcffff, 0xdfffe, 0xdffff, 0xefffe, 0xeffff, 0x10fffe, 0x10ffff]; -const prohibited_characters = [0, 0x001f, 0x007f, 0x007f, 0x0340, 0x0340, 0x0341, 0x0341, 0x200e, 0x200e, 0x200f, 0x200f, 0x202a, 0x202a, 0x202b, 0x202b, 0x202c, 0x202c, 0x202d, 0x202d, 0x202e, 0x202e, 0x206a, 0x206a, 0x206b, 0x206b, 0x206c, 0x206c, 0x206d, 0x206d, 0x206e, 0x206e, 0x206f, 0x206f, 0x2ff0, 0x2ffb, 0xd800, 0xdfff, 0xe000, 0xf8ff, 0xfff9, 0xfff9, 0xfffa, 0xfffa, 0xfffb, 0xfffb, 0xfffc, 0xfffc, 0xfffd, 0xfffd, 0xe0001, 0xe0001, 0xe0020, 0xe007f, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isProhibitedCharacter = character => inRange(character, non_ASCII_space_characters) || inRange(character, prohibited_characters) || inRange(character, non_ASCII_controls_characters) || inRange(character, non_character_codepoints); -const bidirectional_r_al = [0x05be, 0x05be, 0x05c0, 0x05c0, 0x05c3, 0x05c3, 0x05d0, 0x05ea, 0x05f0, 0x05f4, 0x061b, 0x061b, 0x061f, 0x061f, 0x0621, 0x063a, 0x0640, 0x064a, 0x066d, 0x066f, 0x0671, 0x06d5, 0x06dd, 0x06dd, 0x06e5, 0x06e6, 0x06fa, 0x06fe, 0x0700, 0x070d, 0x0710, 0x0710, 0x0712, 0x072c, 0x0780, 0x07a5, 0x07b1, 0x07b1, 0x200f, 0x200f, 0xfb1d, 0xfb1d, 0xfb1f, 0xfb28, 0xfb2a, 0xfb36, 0xfb38, 0xfb3c, 0xfb3e, 0xfb3e, 0xfb40, 0xfb41, 0xfb43, 0xfb44, 0xfb46, 0xfbb1, 0xfbd3, 0xfd3d, 0xfd50, 0xfd8f, 0xfd92, 0xfdc7, 0xfdf0, 0xfdfc, 0xfe70, 0xfe74, 0xfe76, 0xfefc]; -const isBidirectionalRAL = character => inRange(character, bidirectional_r_al); -const bidirectional_l = [0x0041, 0x005a, 0x0061, 0x007a, 0x00aa, 0x00aa, 0x00b5, 0x00b5, 0x00ba, 0x00ba, 0x00c0, 0x00d6, 0x00d8, 0x00f6, 0x00f8, 0x0220, 0x0222, 0x0233, 0x0250, 0x02ad, 0x02b0, 0x02b8, 0x02bb, 0x02c1, 0x02d0, 0x02d1, 0x02e0, 0x02e4, 0x02ee, 0x02ee, 0x037a, 0x037a, 0x0386, 0x0386, 0x0388, 0x038a, 0x038c, 0x038c, 0x038e, 0x03a1, 0x03a3, 0x03ce, 0x03d0, 0x03f5, 0x0400, 0x0482, 0x048a, 0x04ce, 0x04d0, 0x04f5, 0x04f8, 0x04f9, 0x0500, 0x050f, 0x0531, 0x0556, 0x0559, 0x055f, 0x0561, 0x0587, 0x0589, 0x0589, 0x0903, 0x0903, 0x0905, 0x0939, 0x093d, 0x0940, 0x0949, 0x094c, 0x0950, 0x0950, 0x0958, 0x0961, 0x0964, 0x0970, 0x0982, 0x0983, 0x0985, 0x098c, 0x098f, 0x0990, 0x0993, 0x09a8, 0x09aa, 0x09b0, 0x09b2, 0x09b2, 0x09b6, 0x09b9, 0x09be, 0x09c0, 0x09c7, 0x09c8, 0x09cb, 0x09cc, 0x09d7, 0x09d7, 0x09dc, 0x09dd, 0x09df, 0x09e1, 0x09e6, 0x09f1, 0x09f4, 0x09fa, 0x0a05, 0x0a0a, 0x0a0f, 0x0a10, 0x0a13, 0x0a28, 0x0a2a, 0x0a30, 0x0a32, 0x0a33, 0x0a35, 0x0a36, 0x0a38, 0x0a39, 0x0a3e, 0x0a40, 0x0a59, 0x0a5c, 0x0a5e, 0x0a5e, 0x0a66, 0x0a6f, 0x0a72, 0x0a74, 0x0a83, 0x0a83, 0x0a85, 0x0a8b, 0x0a8d, 0x0a8d, 0x0a8f, 0x0a91, 0x0a93, 0x0aa8, 0x0aaa, 0x0ab0, 0x0ab2, 0x0ab3, 0x0ab5, 0x0ab9, 0x0abd, 0x0ac0, 0x0ac9, 0x0ac9, 0x0acb, 0x0acc, 0x0ad0, 0x0ad0, 0x0ae0, 0x0ae0, 0x0ae6, 0x0aef, 0x0b02, 0x0b03, 0x0b05, 0x0b0c, 0x0b0f, 0x0b10, 0x0b13, 0x0b28, 0x0b2a, 0x0b30, 0x0b32, 0x0b33, 0x0b36, 0x0b39, 0x0b3d, 0x0b3e, 0x0b40, 0x0b40, 0x0b47, 0x0b48, 0x0b4b, 0x0b4c, 0x0b57, 0x0b57, 0x0b5c, 0x0b5d, 0x0b5f, 0x0b61, 0x0b66, 0x0b70, 0x0b83, 0x0b83, 0x0b85, 0x0b8a, 0x0b8e, 0x0b90, 0x0b92, 0x0b95, 0x0b99, 0x0b9a, 0x0b9c, 0x0b9c, 0x0b9e, 0x0b9f, 0x0ba3, 0x0ba4, 0x0ba8, 0x0baa, 0x0bae, 0x0bb5, 0x0bb7, 0x0bb9, 0x0bbe, 0x0bbf, 0x0bc1, 0x0bc2, 0x0bc6, 0x0bc8, 0x0bca, 0x0bcc, 0x0bd7, 0x0bd7, 0x0be7, 0x0bf2, 0x0c01, 0x0c03, 0x0c05, 0x0c0c, 0x0c0e, 0x0c10, 0x0c12, 0x0c28, 0x0c2a, 0x0c33, 0x0c35, 0x0c39, 0x0c41, 0x0c44, 0x0c60, 0x0c61, 0x0c66, 0x0c6f, 0x0c82, 0x0c83, 0x0c85, 0x0c8c, 0x0c8e, 0x0c90, 0x0c92, 0x0ca8, 0x0caa, 0x0cb3, 0x0cb5, 0x0cb9, 0x0cbe, 0x0cbe, 0x0cc0, 0x0cc4, 0x0cc7, 0x0cc8, 0x0cca, 0x0ccb, 0x0cd5, 0x0cd6, 0x0cde, 0x0cde, 0x0ce0, 0x0ce1, 0x0ce6, 0x0cef, 0x0d02, 0x0d03, 0x0d05, 0x0d0c, 0x0d0e, 0x0d10, 0x0d12, 0x0d28, 0x0d2a, 0x0d39, 0x0d3e, 0x0d40, 0x0d46, 0x0d48, 0x0d4a, 0x0d4c, 0x0d57, 0x0d57, 0x0d60, 0x0d61, 0x0d66, 0x0d6f, 0x0d82, 0x0d83, 0x0d85, 0x0d96, 0x0d9a, 0x0db1, 0x0db3, 0x0dbb, 0x0dbd, 0x0dbd, 0x0dc0, 0x0dc6, 0x0dcf, 0x0dd1, 0x0dd8, 0x0ddf, 0x0df2, 0x0df4, 0x0e01, 0x0e30, 0x0e32, 0x0e33, 0x0e40, 0x0e46, 0x0e4f, 0x0e5b, 0x0e81, 0x0e82, 0x0e84, 0x0e84, 0x0e87, 0x0e88, 0x0e8a, 0x0e8a, 0x0e8d, 0x0e8d, 0x0e94, 0x0e97, 0x0e99, 0x0e9f, 0x0ea1, 0x0ea3, 0x0ea5, 0x0ea5, 0x0ea7, 0x0ea7, 0x0eaa, 0x0eab, 0x0ead, 0x0eb0, 0x0eb2, 0x0eb3, 0x0ebd, 0x0ebd, 0x0ec0, 0x0ec4, 0x0ec6, 0x0ec6, 0x0ed0, 0x0ed9, 0x0edc, 0x0edd, 0x0f00, 0x0f17, 0x0f1a, 0x0f34, 0x0f36, 0x0f36, 0x0f38, 0x0f38, 0x0f3e, 0x0f47, 0x0f49, 0x0f6a, 0x0f7f, 0x0f7f, 0x0f85, 0x0f85, 0x0f88, 0x0f8b, 0x0fbe, 0x0fc5, 0x0fc7, 0x0fcc, 0x0fcf, 0x0fcf, 0x1000, 0x1021, 0x1023, 0x1027, 0x1029, 0x102a, 0x102c, 0x102c, 0x1031, 0x1031, 0x1038, 0x1038, 0x1040, 0x1057, 0x10a0, 0x10c5, 0x10d0, 0x10f8, 0x10fb, 0x10fb, 0x1100, 0x1159, 0x115f, 0x11a2, 0x11a8, 0x11f9, 0x1200, 0x1206, 0x1208, 0x1246, 0x1248, 0x1248, 0x124a, 0x124d, 0x1250, 0x1256, 0x1258, 0x1258, 0x125a, 0x125d, 0x1260, 0x1286, 0x1288, 0x1288, 0x128a, 0x128d, 0x1290, 0x12ae, 0x12b0, 0x12b0, 0x12b2, 0x12b5, 0x12b8, 0x12be, 0x12c0, 0x12c0, 0x12c2, 0x12c5, 0x12c8, 0x12ce, 0x12d0, 0x12d6, 0x12d8, 0x12ee, 0x12f0, 0x130e, 0x1310, 0x1310, 0x1312, 0x1315, 0x1318, 0x131e, 0x1320, 0x1346, 0x1348, 0x135a, 0x1361, 0x137c, 0x13a0, 0x13f4, 0x1401, 0x1676, 0x1681, 0x169a, 0x16a0, 0x16f0, 0x1700, 0x170c, 0x170e, 0x1711, 0x1720, 0x1731, 0x1735, 0x1736, 0x1740, 0x1751, 0x1760, 0x176c, 0x176e, 0x1770, 0x1780, 0x17b6, 0x17be, 0x17c5, 0x17c7, 0x17c8, 0x17d4, 0x17da, 0x17dc, 0x17dc, 0x17e0, 0x17e9, 0x1810, 0x1819, 0x1820, 0x1877, 0x1880, 0x18a8, 0x1e00, 0x1e9b, 0x1ea0, 0x1ef9, 0x1f00, 0x1f15, 0x1f18, 0x1f1d, 0x1f20, 0x1f45, 0x1f48, 0x1f4d, 0x1f50, 0x1f57, 0x1f59, 0x1f59, 0x1f5b, 0x1f5b, 0x1f5d, 0x1f5d, 0x1f5f, 0x1f7d, 0x1f80, 0x1fb4, 0x1fb6, 0x1fbc, 0x1fbe, 0x1fbe, 0x1fc2, 0x1fc4, 0x1fc6, 0x1fcc, 0x1fd0, 0x1fd3, 0x1fd6, 0x1fdb, 0x1fe0, 0x1fec, 0x1ff2, 0x1ff4, 0x1ff6, 0x1ffc, 0x200e, 0x200e, 0x2071, 0x2071, 0x207f, 0x207f, 0x2102, 0x2102, 0x2107, 0x2107, 0x210a, 0x2113, 0x2115, 0x2115, 0x2119, 0x211d, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212a, 0x212d, 0x212f, 0x2131, 0x2133, 0x2139, 0x213d, 0x213f, 0x2145, 0x2149, 0x2160, 0x2183, 0x2336, 0x237a, 0x2395, 0x2395, 0x249c, 0x24e9, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303c, 0x3041, 0x3096, 0x309d, 0x309f, 0x30a1, 0x30fa, 0x30fc, 0x30ff, 0x3105, 0x312c, 0x3131, 0x318e, 0x3190, 0x31b7, 0x31f0, 0x321c, 0x3220, 0x3243, 0x3260, 0x327b, 0x327f, 0x32b0, 0x32c0, 0x32cb, 0x32d0, 0x32fe, 0x3300, 0x3376, 0x337b, 0x33dd, 0x33e0, 0x33fe, 0x3400, 0x4db5, 0x4e00, 0x9fa5, 0xa000, 0xa48c, 0xac00, 0xd7a3, 0xd800, 0xfa2d, 0xfa30, 0xfa6a, 0xfb00, 0xfb06, 0xfb13, 0xfb17, 0xff21, 0xff3a, 0xff41, 0xff5a, 0xff66, 0xffbe, 0xffc2, 0xffc7, 0xffca, 0xffcf, 0xffd2, 0xffd7, 0xffda, 0xffdc, 0x10300, 0x1031e, 0x10320, 0x10323, 0x10330, 0x1034a, 0x10400, 0x10425, 0x10428, 0x1044d, 0x1d000, 0x1d0f5, 0x1d100, 0x1d126, 0x1d12a, 0x1d166, 0x1d16a, 0x1d172, 0x1d183, 0x1d184, 0x1d18c, 0x1d1a9, 0x1d1ae, 0x1d1dd, 0x1d400, 0x1d454, 0x1d456, 0x1d49c, 0x1d49e, 0x1d49f, 0x1d4a2, 0x1d4a2, 0x1d4a5, 0x1d4a6, 0x1d4a9, 0x1d4ac, 0x1d4ae, 0x1d4b9, 0x1d4bb, 0x1d4bb, 0x1d4bd, 0x1d4c0, 0x1d4c2, 0x1d4c3, 0x1d4c5, 0x1d505, 0x1d507, 0x1d50a, 0x1d50d, 0x1d514, 0x1d516, 0x1d51c, 0x1d51e, 0x1d539, 0x1d53b, 0x1d53e, 0x1d540, 0x1d544, 0x1d546, 0x1d546, 0x1d54a, 0x1d550, 0x1d552, 0x1d6a3, 0x1d6a8, 0x1d7c9, 0x20000, 0x2a6d6, 0x2f800, 0x2fa1d, 0xf0000, 0xffffd, 0x100000, 0x10fffd]; -const isBidirectionalL = character => inRange(character, bidirectional_l); - -const mapping2space = isNonASCIISpaceCharacter; -const mapping2nothing = isCommonlyMappedToNothing; -const getCodePoint = character => character.codePointAt(0); -const first = x => x[0]; -const last = x => x[x.length - 1]; -function toCodePoints(input) { - const codepoints = []; - const size = input.length; - for (let i = 0; i < size; i += 1) { - const before = input.charCodeAt(i); - if (before >= 0xd800 && before <= 0xdbff && size > i + 1) { - const next = input.charCodeAt(i + 1); - if (next >= 0xdc00 && next <= 0xdfff) { - codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000); - i += 1; - continue; - } - } - codepoints.push(before); - } - return codepoints; -} -function saslprep(input, opts = {}) { - if (typeof input !== 'string') { - throw new TypeError('Expected string.'); - } - if (input.length === 0) { - return ''; - } - const mapped_input = toCodePoints(input).map(character => mapping2space(character) ? 0x20 : character).filter(character => !mapping2nothing(character)); - const normalized_input = String.fromCodePoint.apply(null, mapped_input).normalize('NFKC'); - const normalized_map = toCodePoints(normalized_input); - const hasProhibited = normalized_map.some(isProhibitedCharacter); - if (hasProhibited) { - throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'); - } - if (opts.allowUnassigned !== true) { - const hasUnassigned = normalized_map.some(isUnassignedCodePoint); - if (hasUnassigned) { - throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'); - } - } - const hasBidiRAL = normalized_map.some(isBidirectionalRAL); - const hasBidiL = normalized_map.some(isBidirectionalL); - if (hasBidiRAL && hasBidiL) { - throw new Error('String must not contain RandALCat and LCat at the same time,' + ' see https://tools.ietf.org/html/rfc3454#section-6'); - } - const isFirstBidiRAL = isBidirectionalRAL(getCodePoint(first(normalized_input))); - const isLastBidiRAL = isBidirectionalRAL(getCodePoint(last(normalized_input))); - if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) { - throw new Error('Bidirectional RandALCat character must be the first and the last' + ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'); - } - return normalized_input; -} - -class PDFSecurity { - static generateFileID(info = {}) { - let infoStr = `${info.CreationDate.getTime()}\n`; - for (let key in info) { - if (!info.hasOwnProperty(key)) { - continue; - } - infoStr += `${key}: ${info[key].valueOf()}\n`; - } - return wordArrayToBuffer(CryptoJS.MD5(infoStr)); - } - static generateRandomWordArray(bytes) { - return CryptoJS.lib.WordArray.random(bytes); - } - static create(document, options = {}) { - if (!options.ownerPassword && !options.userPassword) { - return null; - } - return new PDFSecurity(document, options); - } - constructor(document, options = {}) { - if (!options.ownerPassword && !options.userPassword) { - throw new Error('None of owner password and user password is defined.'); - } - this.document = document; - this._setupEncryption(options); - } - _setupEncryption(options) { - switch (options.pdfVersion) { - case '1.4': - case '1.5': - this.version = 2; - break; - case '1.6': - case '1.7': - this.version = 4; - break; - case '1.7ext3': - this.version = 5; - break; - default: - this.version = 1; - break; - } - const encDict = { - Filter: 'Standard' - }; - switch (this.version) { - case 1: - case 2: - case 4: - this._setupEncryptionV1V2V4(this.version, encDict, options); - break; - case 5: - this._setupEncryptionV5(encDict, options); - break; - } - this.dictionary = this.document.ref(encDict); - } - _setupEncryptionV1V2V4(v, encDict, options) { - let r, permissions; - switch (v) { - case 1: - r = 2; - this.keyBits = 40; - permissions = getPermissionsR2(options.permissions); - break; - case 2: - r = 3; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - case 4: - r = 4; - this.keyBits = 128; - permissions = getPermissionsR3(options.permissions); - break; - } - const paddedUserPassword = processPasswordR2R3R4(options.userPassword); - const paddedOwnerPassword = options.ownerPassword ? processPasswordR2R3R4(options.ownerPassword) : paddedUserPassword; - const ownerPasswordEntry = getOwnerPasswordR2R3R4(r, this.keyBits, paddedUserPassword, paddedOwnerPassword); - this.encryptionKey = getEncryptionKeyR2R3R4(r, this.keyBits, this.document._id, paddedUserPassword, ownerPasswordEntry, permissions); - let userPasswordEntry; - if (r === 2) { - userPasswordEntry = getUserPasswordR2(this.encryptionKey); - } else { - userPasswordEntry = getUserPasswordR3R4(this.document._id, this.encryptionKey); - } - encDict.V = v; - if (v >= 2) { - encDict.Length = this.keyBits; - } - if (v === 4) { - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV2', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - } - encDict.R = r; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.P = permissions; - } - _setupEncryptionV5(encDict, options) { - this.keyBits = 256; - const permissions = getPermissionsR3(options.permissions); - const processedUserPassword = processPasswordR5(options.userPassword); - const processedOwnerPassword = options.ownerPassword ? processPasswordR5(options.ownerPassword) : processedUserPassword; - this.encryptionKey = getEncryptionKeyR5(PDFSecurity.generateRandomWordArray); - const userPasswordEntry = getUserPasswordR5(processedUserPassword, PDFSecurity.generateRandomWordArray); - const userKeySalt = CryptoJS.lib.WordArray.create(userPasswordEntry.words.slice(10, 12), 8); - const userEncryptionKeyEntry = getUserEncryptionKeyR5(processedUserPassword, userKeySalt, this.encryptionKey); - const ownerPasswordEntry = getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, PDFSecurity.generateRandomWordArray); - const ownerKeySalt = CryptoJS.lib.WordArray.create(ownerPasswordEntry.words.slice(10, 12), 8); - const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, this.encryptionKey); - const permsEntry = getEncryptedPermissionsR5(permissions, this.encryptionKey, PDFSecurity.generateRandomWordArray); - encDict.V = 5; - encDict.Length = this.keyBits; - encDict.CF = { - StdCF: { - AuthEvent: 'DocOpen', - CFM: 'AESV3', - Length: this.keyBits / 8 - } - }; - encDict.StmF = 'StdCF'; - encDict.StrF = 'StdCF'; - encDict.R = 5; - encDict.O = wordArrayToBuffer(ownerPasswordEntry); - encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry); - encDict.U = wordArrayToBuffer(userPasswordEntry); - encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry); - encDict.P = permissions; - encDict.Perms = wordArrayToBuffer(permsEntry); - } - getEncryptFn(obj, gen) { - let digest; - if (this.version < 5) { - digest = this.encryptionKey.clone().concat(CryptoJS.lib.WordArray.create([(obj & 0xff) << 24 | (obj & 0xff00) << 8 | obj >> 8 & 0xff00 | gen & 0xff, (gen & 0xff00) << 16], 5)); - } - if (this.version === 1 || this.version === 2) { - let key = CryptoJS.MD5(digest); - key.sigBytes = Math.min(16, this.keyBits / 8 + 5); - return buffer => wordArrayToBuffer(CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key).ciphertext); - } - let key; - if (this.version === 4) { - key = CryptoJS.MD5(digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))); - } else { - key = this.encryptionKey; - } - const iv = PDFSecurity.generateRandomWordArray(16); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7, - iv - }; - return buffer => wordArrayToBuffer(iv.clone().concat(CryptoJS.AES.encrypt(CryptoJS.lib.WordArray.create(buffer), key, options).ciphertext)); - } - end() { - this.dictionary.end(); - } -} -function getPermissionsR2(permissionObject = {}) { - let permissions = 0xffffffc0 >> 0; - if (permissionObject.printing) { - permissions |= 0b000000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - return permissions; -} -function getPermissionsR3(permissionObject = {}) { - let permissions = 0xfffff0c0 >> 0; - if (permissionObject.printing === 'lowResolution') { - permissions |= 0b000000000100; - } - if (permissionObject.printing === 'highResolution') { - permissions |= 0b100000000100; - } - if (permissionObject.modifying) { - permissions |= 0b000000001000; - } - if (permissionObject.copying) { - permissions |= 0b000000010000; - } - if (permissionObject.annotating) { - permissions |= 0b000000100000; - } - if (permissionObject.fillingForms) { - permissions |= 0b000100000000; - } - if (permissionObject.contentAccessibility) { - permissions |= 0b001000000000; - } - if (permissionObject.documentAssembly) { - permissions |= 0b010000000000; - } - return permissions; -} -function getUserPasswordR2(encryptionKey) { - return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey).ciphertext; -} -function getUserPasswordR3R4(documentId, encryptionKey) { - const key = encryptionKey.clone(); - let cipher = CryptoJS.MD5(processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))); - for (let i = 0; i < 20; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = encryptionKey.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher.concat(CryptoJS.lib.WordArray.create(null, 16)); -} -function getOwnerPasswordR2R3R4(r, keyBits, paddedUserPassword, paddedOwnerPassword) { - let digest = paddedOwnerPassword; - let round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - digest = CryptoJS.MD5(digest); - } - const key = digest.clone(); - key.sigBytes = keyBits / 8; - let cipher = paddedUserPassword; - round = r >= 3 ? 20 : 1; - for (let i = 0; i < round; i++) { - const xorRound = Math.ceil(key.sigBytes / 4); - for (let j = 0; j < xorRound; j++) { - key.words[j] = digest.words[j] ^ (i | i << 8 | i << 16 | i << 24); - } - cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext; - } - return cipher; -} -function getEncryptionKeyR2R3R4(r, keyBits, documentId, paddedUserPassword, ownerPasswordEntry, permissions) { - let key = paddedUserPassword.clone().concat(ownerPasswordEntry).concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4)).concat(CryptoJS.lib.WordArray.create(documentId)); - const round = r >= 3 ? 51 : 1; - for (let i = 0; i < round; i++) { - key = CryptoJS.MD5(key); - key.sigBytes = keyBits / 8; - } - return key; -} -function getUserPasswordR5(processedUserPassword, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt)).concat(validationSalt).concat(keySalt); -} -function getUserEncryptionKeyR5(processedUserPassword, userKeySalt, encryptionKey) { - const key = CryptoJS.SHA256(processedUserPassword.clone().concat(userKeySalt)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getOwnerPasswordR5(processedOwnerPassword, userPasswordEntry, generateRandomWordArray) { - const validationSalt = generateRandomWordArray(8); - const keySalt = generateRandomWordArray(8); - return CryptoJS.SHA256(processedOwnerPassword.clone().concat(validationSalt).concat(userPasswordEntry)).concat(validationSalt).concat(keySalt); -} -function getOwnerEncryptionKeyR5(processedOwnerPassword, ownerKeySalt, userPasswordEntry, encryptionKey) { - const key = CryptoJS.SHA256(processedOwnerPassword.clone().concat(ownerKeySalt).concat(userPasswordEntry)); - const options = { - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.NoPadding, - iv: CryptoJS.lib.WordArray.create(null, 16) - }; - return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext; -} -function getEncryptionKeyR5(generateRandomWordArray) { - return generateRandomWordArray(32); -} -function getEncryptedPermissionsR5(permissions, encryptionKey, generateRandomWordArray) { - const cipher = CryptoJS.lib.WordArray.create([lsbFirstWord(permissions), 0xffffffff, 0x54616462], 12).concat(generateRandomWordArray(4)); - const options = { - mode: CryptoJS.mode.ECB, - padding: CryptoJS.pad.NoPadding - }; - return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext; -} -function processPasswordR2R3R4(password = '') { - const out = Buffer.alloc(32); - const length = password.length; - let index = 0; - while (index < length && index < 32) { - const code = password.charCodeAt(index); - if (code > 0xff) { - throw new Error('Password contains one or more invalid characters.'); - } - out[index] = code; - index++; - } - while (index < 32) { - out[index] = PASSWORD_PADDING[index - length]; - index++; - } - return CryptoJS.lib.WordArray.create(out); -} -function processPasswordR5(password = '') { - password = unescape(encodeURIComponent(saslprep(password))); - const length = Math.min(127, password.length); - const out = Buffer.alloc(length); - for (let i = 0; i < length; i++) { - out[i] = password.charCodeAt(i); - } - return CryptoJS.lib.WordArray.create(out); -} -function lsbFirstWord(data) { - return (data & 0xff) << 24 | (data & 0xff00) << 8 | data >> 8 & 0xff00 | data >> 24 & 0xff; -} -function wordArrayToBuffer(wordArray) { - const byteArray = []; - for (let i = 0; i < wordArray.sigBytes; i++) { - byteArray.push(wordArray.words[Math.floor(i / 4)] >> 8 * (3 - i % 4) & 0xff); - } - return Buffer.from(byteArray); -} -const PASSWORD_PADDING = [0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]; - -const { - number: number$2 -} = PDFObject; -class PDFGradient$1 { - constructor(doc) { - this.doc = doc; - this.stops = []; - this.embedded = false; - this.transform = [1, 0, 0, 1, 0, 0]; - } - stop(pos, color, opacity) { - if (opacity == null) { - opacity = 1; - } - color = this.doc._normalizeColor(color); - if (this.stops.length === 0) { - if (color.length === 3) { - this._colorSpace = 'DeviceRGB'; - } else if (color.length === 4) { - this._colorSpace = 'DeviceCMYK'; - } else if (color.length === 1) { - this._colorSpace = 'DeviceGray'; - } else { - throw new Error('Unknown color space'); - } - } else if (this._colorSpace === 'DeviceRGB' && color.length !== 3 || this._colorSpace === 'DeviceCMYK' && color.length !== 4 || this._colorSpace === 'DeviceGray' && color.length !== 1) { - throw new Error('All gradient stops must use the same color space'); - } - opacity = Math.max(0, Math.min(1, opacity)); - this.stops.push([pos, color, opacity]); - return this; - } - setTransform(m11, m12, m21, m22, dx, dy) { - this.transform = [m11, m12, m21, m22, dx, dy]; - return this; - } - embed(m) { - let fn; - const stopsLength = this.stops.length; - if (stopsLength === 0) { - return; - } - this.embedded = true; - this.matrix = m; - const last = this.stops[stopsLength - 1]; - if (last[0] < 1) { - this.stops.push([1, last[1], last[2]]); - } - const bounds = []; - const encode = []; - const stops = []; - for (let i = 0; i < stopsLength - 1; i++) { - encode.push(0, 1); - if (i + 2 !== stopsLength) { - bounds.push(this.stops[i + 1][0]); - } - fn = this.doc.ref({ - FunctionType: 2, - Domain: [0, 1], - C0: this.stops[i + 0][1], - C1: this.stops[i + 1][1], - N: 1 - }); - stops.push(fn); - fn.end(); - } - if (stopsLength === 1) { - fn = stops[0]; - } else { - fn = this.doc.ref({ - FunctionType: 3, - Domain: [0, 1], - Functions: stops, - Bounds: bounds, - Encode: encode - }); - fn.end(); - } - this.id = `Sh${++this.doc._gradCount}`; - const shader = this.shader(fn); - shader.end(); - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 2, - Shading: shader, - Matrix: this.matrix.map(number$2) - }); - pattern.end(); - if (this.stops.some(stop => stop[2] < 1)) { - let grad = this.opacityGradient(); - grad._colorSpace = 'DeviceGray'; - for (let stop of this.stops) { - grad.stop(stop[0], [stop[2]]); - } - grad = grad.embed(this.matrix); - const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; - const form = this.doc.ref({ - Type: 'XObject', - Subtype: 'Form', - FormType: 1, - BBox: pageBBox, - Group: { - Type: 'Group', - S: 'Transparency', - CS: 'DeviceGray' - }, - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: grad - } - } - }); - form.write('/Pattern cs /Sh1 scn'); - form.end(`${pageBBox.join(' ')} re f`); - const gstate = this.doc.ref({ - Type: 'ExtGState', - SMask: { - Type: 'Mask', - S: 'Luminosity', - G: form - } - }); - gstate.end(); - const opacityPattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 1, - TilingType: 2, - BBox: pageBBox, - XStep: pageBBox[2], - YStep: pageBBox[3], - Resources: { - ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], - Pattern: { - Sh1: pattern - }, - ExtGState: { - Gs1: gstate - } - } - }); - opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn'); - opacityPattern.end(`${pageBBox.join(' ')} re f`); - this.doc.page.patterns[this.id] = opacityPattern; - } else { - this.doc.page.patterns[this.id] = pattern; - } - return pattern; - } - apply(stroke) { - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = this.transform; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) { - this.embed(m); - } - this.doc._setColorSpace('Pattern', stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`/${this.id} ${op}`); - } -} -class PDFLinearGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, x2, y2) { - super(doc); - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 2, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.x2, this.y2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFLinearGradient$1(this.doc, this.x1, this.y1, this.x2, this.y2); - } -} -class PDFRadialGradient$1 extends PDFGradient$1 { - constructor(doc, x1, y1, r1, x2, y2, r2) { - super(doc); - this.doc = doc; - this.x1 = x1; - this.y1 = y1; - this.r1 = r1; - this.x2 = x2; - this.y2 = y2; - this.r2 = r2; - } - shader(fn) { - return this.doc.ref({ - ShadingType: 3, - ColorSpace: this._colorSpace, - Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], - Function: fn, - Extend: [true, true] - }); - } - opacityGradient() { - return new PDFRadialGradient$1(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); - } -} -var Gradient = { - PDFGradient: PDFGradient$1, - PDFLinearGradient: PDFLinearGradient$1, - PDFRadialGradient: PDFRadialGradient$1 -}; - -const underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB']; -class PDFTilingPattern$1 { - constructor(doc, bBox, xStep, yStep, stream) { - this.doc = doc; - this.bBox = bBox; - this.xStep = xStep; - this.yStep = yStep; - this.stream = stream; - } - createPattern() { - const resources = this.doc.ref(); - resources.end(); - const [m0, m1, m2, m3, m4, m5] = this.doc._ctm; - const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0]; - const m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; - const pattern = this.doc.ref({ - Type: 'Pattern', - PatternType: 1, - PaintType: 2, - TilingType: 2, - BBox: this.bBox, - XStep: this.xStep, - YStep: this.yStep, - Matrix: m.map(v => +v.toFixed(5)), - Resources: resources - }); - pattern.end(this.stream); - return pattern; - } - embedPatternColorSpaces() { - underlyingColorSpaces.forEach(csName => { - const csId = this.getPatternColorSpaceId(csName); - if (this.doc.page.colorSpaces[csId]) return; - const cs = this.doc.ref(['Pattern', csName]); - cs.end(); - this.doc.page.colorSpaces[csId] = cs; - }); - } - getPatternColorSpaceId(underlyingColorspace) { - return `CsP${underlyingColorspace}`; - } - embed() { - if (!this.id) { - this.doc._patternCount = this.doc._patternCount + 1; - this.id = 'P' + this.doc._patternCount; - this.pattern = this.createPattern(); - } - if (!this.doc.page.patterns[this.id]) { - this.doc.page.patterns[this.id] = this.pattern; - } - } - apply(stroke, patternColor) { - this.embedPatternColorSpaces(); - this.embed(); - const normalizedColor = this.doc._normalizeColor(patternColor); - if (!normalizedColor) throw Error(`invalid pattern color. (value: ${patternColor})`); - const csId = this.getPatternColorSpaceId(this.doc._getColorSpace(normalizedColor)); - this.doc._setColorSpace(csId, stroke); - const op = stroke ? 'SCN' : 'scn'; - return this.doc.addContent(`${normalizedColor.join(' ')} /${this.id} ${op}`); - } -} -var pattern = { - PDFTilingPattern: PDFTilingPattern$1 -}; - -const { - PDFGradient, - PDFLinearGradient, - PDFRadialGradient -} = Gradient; -const { - PDFTilingPattern -} = pattern; -var ColorMixin = { - initColor() { - this.spotColors = {}; - this._opacityRegistry = {}; - this._opacityCount = 0; - this._patternCount = 0; - this._gradCount = 0; - }, - _normalizeColor(color) { - if (typeof color === 'string') { - if (color.charAt(0) === '#') { - if (color.length === 4) { - color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, '#$1$1$2$2$3$3'); - } - const hex = parseInt(color.slice(1), 16); - color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; - } else if (namedColors[color]) { - color = namedColors[color]; - } else if (this.spotColors[color]) { - return this.spotColors[color]; - } - } - if (Array.isArray(color)) { - if (color.length === 3) { - color = color.map(part => part / 255); - } else if (color.length === 4) { - color = color.map(part => part / 100); - } - return color; - } - return null; - }, - _setColor(color, stroke) { - if (color instanceof PDFGradient) { - color.apply(stroke); - return true; - } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) { - color[0].apply(stroke, color[1]); - return true; - } - return this._setColorCore(color, stroke); - }, - _setColorCore(color, stroke) { - color = this._normalizeColor(color); - if (!color) { - return false; - } - const op = stroke ? 'SCN' : 'scn'; - const space = this._getColorSpace(color); - this._setColorSpace(space, stroke); - if (color instanceof SpotColor) { - this.page.colorSpaces[color.id] = color.ref; - this.addContent(`1 ${op}`); - } else { - this.addContent(`${color.join(' ')} ${op}`); - } - return true; - }, - _setColorSpace(space, stroke) { - const op = stroke ? 'CS' : 'cs'; - return this.addContent(`/${space} ${op}`); - }, - _getColorSpace(color) { - if (color instanceof SpotColor) { - return color.id; - } - return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; - }, - fillColor(color, opacity) { - const set = this._setColor(color, false); - if (set) { - this.fillOpacity(opacity); - } - this._fillColor = [color, opacity]; - return this; - }, - strokeColor(color, opacity) { - const set = this._setColor(color, true); - if (set) { - this.strokeOpacity(opacity); - } - return this; - }, - opacity(opacity) { - this._doOpacity(opacity, opacity); - return this; - }, - fillOpacity(opacity) { - this._doOpacity(opacity, null); - return this; - }, - strokeOpacity(opacity) { - this._doOpacity(null, opacity); - return this; - }, - _doOpacity(fillOpacity, strokeOpacity) { - let dictionary, name; - if (fillOpacity == null && strokeOpacity == null) { - return; - } - if (fillOpacity != null) { - fillOpacity = Math.max(0, Math.min(1, fillOpacity)); - } - if (strokeOpacity != null) { - strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); - } - const key = `${fillOpacity}_${strokeOpacity}`; - if (this._opacityRegistry[key]) { - [dictionary, name] = this._opacityRegistry[key]; - } else { - dictionary = { - Type: 'ExtGState' - }; - if (fillOpacity != null) { - dictionary.ca = fillOpacity; - } - if (strokeOpacity != null) { - dictionary.CA = strokeOpacity; - } - dictionary = this.ref(dictionary); - dictionary.end(); - const id = ++this._opacityCount; - name = `Gs${id}`; - this._opacityRegistry[key] = [dictionary, name]; - } - this.page.ext_gstates[name] = dictionary; - return this.addContent(`/${name} gs`); - }, - linearGradient(x1, y1, x2, y2) { - return new PDFLinearGradient(this, x1, y1, x2, y2); - }, - radialGradient(x1, y1, r1, x2, y2, r2) { - return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2); - }, - pattern(bbox, xStep, yStep, stream) { - return new PDFTilingPattern(this, bbox, xStep, yStep, stream); - }, - addSpotColor(name, C, M, Y, K) { - const color = new SpotColor(this, name, C, M, Y, K); - this.spotColors[name] = color; - return this; - } -}; -var namedColors = { - aliceblue: [240, 248, 255], - antiquewhite: [250, 235, 215], - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - blueviolet: [138, 43, 226], - brown: [165, 42, 42], - burlywood: [222, 184, 135], - cadetblue: [95, 158, 160], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - cornflowerblue: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkblue: [0, 0, 139], - darkcyan: [0, 139, 139], - darkgoldenrod: [184, 134, 11], - darkgray: [169, 169, 169], - darkgreen: [0, 100, 0], - darkgrey: [169, 169, 169], - darkkhaki: [189, 183, 107], - darkmagenta: [139, 0, 139], - darkolivegreen: [85, 107, 47], - darkorange: [255, 140, 0], - darkorchid: [153, 50, 204], - darkred: [139, 0, 0], - darksalmon: [233, 150, 122], - darkseagreen: [143, 188, 143], - darkslateblue: [72, 61, 139], - darkslategray: [47, 79, 79], - darkslategrey: [47, 79, 79], - darkturquoise: [0, 206, 209], - darkviolet: [148, 0, 211], - deeppink: [255, 20, 147], - deepskyblue: [0, 191, 255], - dimgray: [105, 105, 105], - dimgrey: [105, 105, 105], - dodgerblue: [30, 144, 255], - firebrick: [178, 34, 34], - floralwhite: [255, 250, 240], - forestgreen: [34, 139, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - ghostwhite: [248, 248, 255], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - gray: [128, 128, 128], - grey: [128, 128, 128], - green: [0, 128, 0], - greenyellow: [173, 255, 47], - honeydew: [240, 255, 240], - hotpink: [255, 105, 180], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lawngreen: [124, 252, 0], - lemonchiffon: [255, 250, 205], - lightblue: [173, 216, 230], - lightcoral: [240, 128, 128], - lightcyan: [224, 255, 255], - lightgoldenrodyellow: [250, 250, 210], - lightgray: [211, 211, 211], - lightgreen: [144, 238, 144], - lightgrey: [211, 211, 211], - lightpink: [255, 182, 193], - lightsalmon: [255, 160, 122], - lightseagreen: [32, 178, 170], - lightskyblue: [135, 206, 250], - lightslategray: [119, 136, 153], - lightslategrey: [119, 136, 153], - lightsteelblue: [176, 196, 222], - lightyellow: [255, 255, 224], - lime: [0, 255, 0], - limegreen: [50, 205, 50], - linen: [250, 240, 230], - magenta: [255, 0, 255], - maroon: [128, 0, 0], - mediumaquamarine: [102, 205, 170], - mediumblue: [0, 0, 205], - mediumorchid: [186, 85, 211], - mediumpurple: [147, 112, 219], - mediumseagreen: [60, 179, 113], - mediumslateblue: [123, 104, 238], - mediumspringgreen: [0, 250, 154], - mediumturquoise: [72, 209, 204], - mediumvioletred: [199, 21, 133], - midnightblue: [25, 25, 112], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - navajowhite: [255, 222, 173], - navy: [0, 0, 128], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - orangered: [255, 69, 0], - orchid: [218, 112, 214], - palegoldenrod: [238, 232, 170], - palegreen: [152, 251, 152], - paleturquoise: [175, 238, 238], - palevioletred: [219, 112, 147], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - plum: [221, 160, 221], - powderblue: [176, 224, 230], - purple: [128, 0, 128], - red: [255, 0, 0], - rosybrown: [188, 143, 143], - royalblue: [65, 105, 225], - saddlebrown: [139, 69, 19], - salmon: [250, 128, 114], - sandybrown: [244, 164, 96], - seagreen: [46, 139, 87], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - skyblue: [135, 206, 235], - slateblue: [106, 90, 205], - slategray: [112, 128, 144], - slategrey: [112, 128, 144], - snow: [255, 250, 250], - springgreen: [0, 255, 127], - steelblue: [70, 130, 180], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - violet: [238, 130, 238], - wheat: [245, 222, 179], - white: [255, 255, 255], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - yellowgreen: [154, 205, 50] -}; - -let cx, cy, px, py, sx, sy; -cx = cy = px = py = sx = sy = 0; -const parameters = { - A: 7, - a: 7, - C: 6, - c: 6, - H: 1, - h: 1, - L: 2, - l: 2, - M: 2, - m: 2, - Q: 4, - q: 4, - S: 4, - s: 4, - T: 2, - t: 2, - V: 1, - v: 1, - Z: 0, - z: 0 -}; -const parse = function (path) { - let cmd; - const ret = []; - let args = []; - let curArg = ''; - let foundDecimal = false; - let params = 0; - for (let c of path) { - if (parameters[c] != null) { - params = parameters[c]; - if (cmd) { - if (curArg.length > 0) { - args[args.length] = +curArg; - } - ret[ret.length] = { - cmd, - args - }; - args = []; - curArg = ''; - foundDecimal = false; - } - cmd = c; - } else if ([' ', ','].includes(c) || c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e' || c === '.' && foundDecimal) { - if (curArg.length === 0) { - continue; - } - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - foundDecimal = c === '.'; - curArg = ['-', '.'].includes(c) ? c : ''; - } else { - curArg += c; - if (c === '.') { - foundDecimal = true; - } - } - } - if (curArg.length > 0) { - if (args.length === params) { - ret[ret.length] = { - cmd, - args - }; - args = [+curArg]; - if (cmd === 'M') { - cmd = 'L'; - } - if (cmd === 'm') { - cmd = 'l'; - } - } else { - args[args.length] = +curArg; - } - } - ret[ret.length] = { - cmd, - args - }; - return ret; -}; -const apply = function (commands, doc) { - cx = cy = px = py = sx = sy = 0; - for (let i = 0; i < commands.length; i++) { - const c = commands[i]; - if (typeof runners[c.cmd] === 'function') { - runners[c.cmd](doc, c.args); - } - } -}; -const runners = { - M(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - m(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - sx = cx; - sy = cy; - return doc.moveTo(cx, cy); - }, - C(doc, a) { - cx = a[4]; - cy = a[5]; - px = a[2]; - py = a[3]; - return doc.bezierCurveTo(...a); - }, - c(doc, a) { - doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); - px = cx + a[2]; - py = cy + a[3]; - cx += a[4]; - return cy += a[5]; - }, - S(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); - px = a[0]; - py = a[1]; - cx = a[2]; - return cy = a[3]; - }, - s(doc, a) { - if (px === null) { - px = cx; - py = cy; - } - doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - Q(doc, a) { - px = a[0]; - py = a[1]; - cx = a[2]; - cy = a[3]; - return doc.quadraticCurveTo(a[0], a[1], cx, cy); - }, - q(doc, a) { - doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); - px = cx + a[0]; - py = cy + a[1]; - cx += a[2]; - return cy += a[3]; - }, - T(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, a[0], a[1]); - px = cx - (px - cx); - py = cy - (py - cy); - cx = a[0]; - return cy = a[1]; - }, - t(doc, a) { - if (px === null) { - px = cx; - py = cy; - } else { - px = cx - (px - cx); - py = cy - (py - cy); - } - doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); - cx += a[0]; - return cy += a[1]; - }, - A(doc, a) { - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - a(doc, a) { - a[5] += cx; - a[6] += cy; - solveArc(doc, cx, cy, a); - cx = a[5]; - return cy = a[6]; - }, - L(doc, a) { - cx = a[0]; - cy = a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - l(doc, a) { - cx += a[0]; - cy += a[1]; - px = py = null; - return doc.lineTo(cx, cy); - }, - H(doc, a) { - cx = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - h(doc, a) { - cx += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - V(doc, a) { - cy = a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - v(doc, a) { - cy += a[0]; - px = py = null; - return doc.lineTo(cx, cy); - }, - Z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - }, - z(doc) { - doc.closePath(); - cx = sx; - return cy = sy; - } -}; -const solveArc = function (doc, x, y, coords) { - const [rx, ry, rot, large, sweep, ex, ey] = coords; - const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (let seg of segs) { - const bez = segmentToBezier(...seg); - doc.bezierCurveTo(...bez); - } -}; -const arcToSegments = function (x, y, rx, ry, large, sweep, rotateX, ox, oy) { - const th = rotateX * (Math.PI / 180); - const sin_th = Math.sin(th); - const cos_th = Math.cos(th); - rx = Math.abs(rx); - ry = Math.abs(ry); - px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; - py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; - let pl = px * px / (rx * rx) + py * py / (ry * ry); - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - const a00 = cos_th / rx; - const a01 = sin_th / rx; - const a10 = -sin_th / ry; - const a11 = cos_th / ry; - const x0 = a00 * ox + a01 * oy; - const y0 = a10 * ox + a11 * oy; - const x1 = a00 * x + a01 * y; - const y1 = a10 * x + a11 * y; - const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); - let sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) { - sfactor_sq = 0; - } - let sfactor = Math.sqrt(sfactor_sq); - if (sweep === large) { - sfactor = -sfactor; - } - const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); - const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); - const th0 = Math.atan2(y0 - yc, x0 - xc); - const th1 = Math.atan2(y1 - yc, x1 - xc); - let th_arc = th1 - th0; - if (th_arc < 0 && sweep === 1) { - th_arc += 2 * Math.PI; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= 2 * Math.PI; - } - const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); - const result = []; - for (let i = 0; i < segments; i++) { - const th2 = th0 + i * th_arc / segments; - const th3 = th0 + (i + 1) * th_arc / segments; - result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; - } - return result; -}; -const segmentToBezier = function (cx, cy, th0, th1, rx, ry, sin_th, cos_th) { - const a00 = cos_th * rx; - const a01 = -sin_th * ry; - const a10 = sin_th * rx; - const a11 = cos_th * ry; - const th_half = 0.5 * (th1 - th0); - const t = 8 / 3 * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); - const x1 = cx + Math.cos(th0) - t * Math.sin(th0); - const y1 = cy + Math.sin(th0) + t * Math.cos(th0); - const x3 = cx + Math.cos(th1); - const y3 = cy + Math.sin(th1); - const x2 = x3 + t * Math.sin(th1); - const y2 = y3 - t * Math.cos(th1); - return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; -}; -class SVGPath { - static apply(doc, path) { - const commands = parse(path); - apply(commands, doc); - } -} - -const { - number: number$1 -} = PDFObject; -const KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); -var VectorMixin = { - initVector() { - this._ctm = [1, 0, 0, 1, 0, 0]; - this._ctmStack = []; - }, - save() { - this._ctmStack.push(this._ctm.slice()); - return this.addContent('q'); - }, - restore() { - this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; - return this.addContent('Q'); - }, - closePath() { - return this.addContent('h'); - }, - lineWidth(w) { - return this.addContent(`${number$1(w)} w`); - }, - _CAP_STYLES: { - BUTT: 0, - ROUND: 1, - SQUARE: 2 - }, - lineCap(c) { - if (typeof c === 'string') { - c = this._CAP_STYLES[c.toUpperCase()]; - } - return this.addContent(`${c} J`); - }, - _JOIN_STYLES: { - MITER: 0, - ROUND: 1, - BEVEL: 2 - }, - lineJoin(j) { - if (typeof j === 'string') { - j = this._JOIN_STYLES[j.toUpperCase()]; - } - return this.addContent(`${j} j`); - }, - miterLimit(m) { - return this.addContent(`${number$1(m)} M`); - }, - dash(length, options = {}) { - const originalLength = length; - if (!Array.isArray(length)) { - length = [length, options.space || length]; - } - const valid = length.every(x => Number.isFinite(x) && x > 0); - if (!valid) { - throw new Error(`dash(${JSON.stringify(originalLength)}, ${JSON.stringify(options)}) invalid, lengths must be numeric and greater than zero`); - } - length = length.map(number$1).join(' '); - return this.addContent(`[${length}] ${number$1(options.phase || 0)} d`); - }, - undash() { - return this.addContent('[] 0 d'); - }, - moveTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} m`); - }, - lineTo(x, y) { - return this.addContent(`${number$1(x)} ${number$1(y)} l`); - }, - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - return this.addContent(`${number$1(cp1x)} ${number$1(cp1y)} ${number$1(cp2x)} ${number$1(cp2y)} ${number$1(x)} ${number$1(y)} c`); - }, - quadraticCurveTo(cpx, cpy, x, y) { - return this.addContent(`${number$1(cpx)} ${number$1(cpy)} ${number$1(x)} ${number$1(y)} v`); - }, - rect(x, y, w, h) { - return this.addContent(`${number$1(x)} ${number$1(y)} ${number$1(w)} ${number$1(h)} re`); - }, - roundedRect(x, y, w, h, r) { - if (r == null) { - r = 0; - } - r = Math.min(r, 0.5 * w, 0.5 * h); - const c = r * (1.0 - KAPPA); - this.moveTo(x + r, y); - this.lineTo(x + w - r, y); - this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); - this.lineTo(x + w, y + h - r); - this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); - this.lineTo(x + r, y + h); - this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); - this.lineTo(x, y + r); - this.bezierCurveTo(x, y + c, x + c, y, x + r, y); - return this.closePath(); - }, - ellipse(x, y, r1, r2) { - if (r2 == null) { - r2 = r1; - } - x -= r1; - y -= r2; - const ox = r1 * KAPPA; - const oy = r2 * KAPPA; - const xe = x + r1 * 2; - const ye = y + r2 * 2; - const xm = x + r1; - const ym = y + r2; - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - return this.closePath(); - }, - circle(x, y, radius) { - return this.ellipse(x, y, radius); - }, - arc(x, y, radius, startAngle, endAngle, anticlockwise) { - if (anticlockwise == null) { - anticlockwise = false; - } - const TWO_PI = 2.0 * Math.PI; - const HALF_PI = 0.5 * Math.PI; - let deltaAng = endAngle - startAngle; - if (Math.abs(deltaAng) > TWO_PI) { - deltaAng = TWO_PI; - } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) { - const dir = anticlockwise ? -1 : 1; - deltaAng = dir * TWO_PI + deltaAng; - } - const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); - const segAng = deltaAng / numSegs; - const handleLen = segAng / HALF_PI * KAPPA * radius; - let curAng = startAngle; - let deltaCx = -Math.sin(curAng) * handleLen; - let deltaCy = Math.cos(curAng) * handleLen; - let ax = x + Math.cos(curAng) * radius; - let ay = y + Math.sin(curAng) * radius; - this.moveTo(ax, ay); - for (let segIdx = 0; segIdx < numSegs; segIdx++) { - const cp1x = ax + deltaCx; - const cp1y = ay + deltaCy; - curAng += segAng; - ax = x + Math.cos(curAng) * radius; - ay = y + Math.sin(curAng) * radius; - deltaCx = -Math.sin(curAng) * handleLen; - deltaCy = Math.cos(curAng) * handleLen; - const cp2x = ax - deltaCx; - const cp2y = ay - deltaCy; - this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); - } - return this; - }, - polygon(...points) { - this.moveTo(...(points.shift() || [])); - for (let point of points) { - this.lineTo(...(point || [])); - } - return this.closePath(); - }, - path(path) { - SVGPath.apply(this, path); - return this; - }, - _windingRule(rule) { - if (/even-?odd/.test(rule)) { - return '*'; - } - return ''; - }, - fill(color, rule) { - if (/(even-?odd)|(non-?zero)/.test(color)) { - rule = color; - color = null; - } - if (color) { - this.fillColor(color); - } - return this.addContent(`f${this._windingRule(rule)}`); - }, - stroke(color) { - if (color) { - this.strokeColor(color); - } - return this.addContent('S'); - }, - fillAndStroke(fillColor, strokeColor, rule) { - if (strokeColor == null) { - strokeColor = fillColor; - } - const isFillRule = /(even-?odd)|(non-?zero)/; - if (isFillRule.test(fillColor)) { - rule = fillColor; - fillColor = null; - } - if (isFillRule.test(strokeColor)) { - rule = strokeColor; - strokeColor = fillColor; - } - if (fillColor) { - this.fillColor(fillColor); - this.strokeColor(strokeColor); - } - return this.addContent(`B${this._windingRule(rule)}`); - }, - clip(rule) { - return this.addContent(`W${this._windingRule(rule)} n`); - }, - transform(m11, m12, m21, m22, dx, dy) { - if (m11 === 1 && m12 === 0 && m21 === 0 && m22 === 1 && dx === 0 && dy === 0) { - return this; - } - const m = this._ctm; - const [m0, m1, m2, m3, m4, m5] = m; - m[0] = m0 * m11 + m2 * m12; - m[1] = m1 * m11 + m3 * m12; - m[2] = m0 * m21 + m2 * m22; - m[3] = m1 * m21 + m3 * m22; - m[4] = m0 * dx + m2 * dy + m4; - m[5] = m1 * dx + m3 * dy + m5; - const values = [m11, m12, m21, m22, dx, dy].map(v => number$1(v)).join(' '); - return this.addContent(`${values} cm`); - }, - translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - }, - rotate(angle, options = {}) { - let y; - const rad = angle * Math.PI / 180; - const cos = Math.cos(rad); - const sin = Math.sin(rad); - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - const x1 = x * cos - y * sin; - const y1 = x * sin + y * cos; - x -= x1; - y -= y1; - } - return this.transform(cos, sin, -sin, cos, x, y); - }, - scale(xFactor, yFactor, options = {}) { - let y; - if (yFactor == null) { - yFactor = xFactor; - } - if (typeof yFactor === 'object') { - options = yFactor; - yFactor = xFactor; - } - let x = y = 0; - if (options.origin != null) { - [x, y] = options.origin; - x -= xFactor * x; - y -= yFactor * y; - } - return this.transform(xFactor, 0, 0, yFactor, x, y); - } -}; - -const WIN_ANSI_MAP = { - 402: 131, - 8211: 150, - 8212: 151, - 8216: 145, - 8217: 146, - 8218: 130, - 8220: 147, - 8221: 148, - 8222: 132, - 8224: 134, - 8225: 135, - 8226: 149, - 8230: 133, - 8364: 128, - 8240: 137, - 8249: 139, - 8250: 155, - 710: 136, - 8482: 153, - 338: 140, - 339: 156, - 732: 152, - 352: 138, - 353: 154, - 376: 159, - 381: 142, - 382: 158 -}; -const characters = `\ -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef -.notdef .notdef .notdef .notdef - -space exclam quotedbl numbersign -dollar percent ampersand quotesingle -parenleft parenright asterisk plus -comma hyphen period slash -zero one two three -four five six seven -eight nine colon semicolon -less equal greater question - -at A B C -D E F G -H I J K -L M N O -P Q R S -T U V W -X Y Z bracketleft -backslash bracketright asciicircum underscore - -grave a b c -d e f g -h i j k -l m n o -p q r s -t u v w -x y z braceleft -bar braceright asciitilde .notdef - -Euro .notdef quotesinglbase florin -quotedblbase ellipsis dagger daggerdbl -circumflex perthousand Scaron guilsinglleft -OE .notdef Zcaron .notdef -.notdef quoteleft quoteright quotedblleft -quotedblright bullet endash emdash -tilde trademark scaron guilsinglright -oe .notdef zcaron ydieresis - -space exclamdown cent sterling -currency yen brokenbar section -dieresis copyright ordfeminine guillemotleft -logicalnot hyphen registered macron -degree plusminus twosuperior threesuperior -acute mu paragraph periodcentered -cedilla onesuperior ordmasculine guillemotright -onequarter onehalf threequarters questiondown - -Agrave Aacute Acircumflex Atilde -Adieresis Aring AE Ccedilla -Egrave Eacute Ecircumflex Edieresis -Igrave Iacute Icircumflex Idieresis -Eth Ntilde Ograve Oacute -Ocircumflex Otilde Odieresis multiply -Oslash Ugrave Uacute Ucircumflex -Udieresis Yacute Thorn germandbls - -agrave aacute acircumflex atilde -adieresis aring ae ccedilla -egrave eacute ecircumflex edieresis -igrave iacute icircumflex idieresis -eth ntilde ograve oacute -ocircumflex otilde odieresis divide -oslash ugrave uacute ucircumflex -udieresis yacute thorn ydieresis\ -`.split(/\s+/); -class AFMFont { - constructor(contents) { - this.attributes = {}; - this.glyphWidths = {}; - this.boundingBoxes = {}; - this.kernPairs = {}; - this.parse(contents); - this.bbox = this.attributes['FontBBox'].split(/\s+/).map(e => +e); - this.ascender = +(this.attributes['Ascender'] || 0); - this.descender = +(this.attributes['Descender'] || 0); - this.xHeight = +(this.attributes['XHeight'] || 0); - this.capHeight = +(this.attributes['CapHeight'] || 0); - this.lineGap = this.bbox[3] - this.bbox[1] - (this.ascender - this.descender); - } - parse(contents) { - let section = ''; - for (let line of contents.split('\n')) { - var match; - var a; - if (match = line.match(/^Start(\w+)/)) { - section = match[1]; - continue; - } else if (match = line.match(/^End(\w+)/)) { - section = ''; - continue; - } - switch (section) { - case 'FontMetrics': - match = line.match(/(^\w+)\s+(.*)/); - var key = match[1]; - var value = match[2]; - if (a = this.attributes[key]) { - if (!Array.isArray(a)) { - a = this.attributes[key] = [a]; - } - a.push(value); - } else { - this.attributes[key] = value; - } - break; - case 'CharMetrics': - if (!/^CH?\s/.test(line)) { - continue; - } - var name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; - this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; - break; - case 'KernPairs': - match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); - if (match) { - this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); - } - break; - } - } - } - encodeText(text) { - const res = []; - for (let i = 0, len = text.length; i < len; i++) { - let char = text.charCodeAt(i); - char = WIN_ANSI_MAP[char] || char; - res.push(char.toString(16)); - } - return res; - } - glyphsForString(string) { - const glyphs = []; - for (let i = 0, len = string.length; i < len; i++) { - const charCode = string.charCodeAt(i); - glyphs.push(this.characterToGlyph(charCode)); - } - return glyphs; - } - characterToGlyph(character) { - return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; - } - widthOfGlyph(glyph) { - return this.glyphWidths[glyph] || 0; - } - getKernPair(left, right) { - return this.kernPairs[left + '\0' + right] || 0; - } - advancesForGlyphs(glyphs) { - const advances = []; - for (let index = 0; index < glyphs.length; index++) { - const left = glyphs[index]; - const right = glyphs[index + 1]; - advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); - } - return advances; - } -} - -class PDFFont { - constructor() {} - encode() { - throw new Error('Must be implemented by subclasses'); - } - widthOfString() { - throw new Error('Must be implemented by subclasses'); - } - ref() { - return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); - } - finalize() { - if (this.embedded || this.dictionary == null) { - return; - } - this.embed(); - this.embedded = true; - } - embed() { - throw new Error('Must be implemented by subclasses'); - } - lineHeight(size, includeGap = false) { - const gap = includeGap ? this.lineGap : 0; - return (this.ascender + gap - this.descender) / 1000 * size; - } -} - -const STANDARD_FONTS = { - Courier() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 17:27:09 1997\r\nComment UniqueID 43050\r\nComment VMusage 39754 50779\r\nFontName Courier\r\nFullName Courier\r\nFamilyName Courier\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -23 -250 715 805 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 426\r\nAscender 629\r\nDescender -157\r\nStdHW 51\r\nStdVW 51\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ;\r\nC 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ;\r\nC 37 ; WX 600 ; N percent ; B 81 -15 518 622 ;\r\nC 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ;\r\nC 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ;\r\nC 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ;\r\nC 43 ; WX 600 ; N plus ; B 80 44 520 470 ;\r\nC 44 ; WX 600 ; N comma ; B 181 -112 344 122 ;\r\nC 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ;\r\nC 46 ; WX 600 ; N period ; B 229 -15 371 109 ;\r\nC 47 ; WX 600 ; N slash ; B 125 -80 475 629 ;\r\nC 48 ; WX 600 ; N zero ; B 106 -15 494 622 ;\r\nC 49 ; WX 600 ; N one ; B 96 0 505 622 ;\r\nC 50 ; WX 600 ; N two ; B 70 0 471 622 ;\r\nC 51 ; WX 600 ; N three ; B 75 -15 466 622 ;\r\nC 52 ; WX 600 ; N four ; B 78 0 500 622 ;\r\nC 53 ; WX 600 ; N five ; B 92 -15 497 607 ;\r\nC 54 ; WX 600 ; N six ; B 111 -15 497 622 ;\r\nC 55 ; WX 600 ; N seven ; B 82 0 483 607 ;\r\nC 56 ; WX 600 ; N eight ; B 102 -15 498 622 ;\r\nC 57 ; WX 600 ; N nine ; B 96 -15 489 622 ;\r\nC 58 ; WX 600 ; N colon ; B 229 -15 371 385 ;\r\nC 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ;\r\nC 60 ; WX 600 ; N less ; B 41 42 519 472 ;\r\nC 61 ; WX 600 ; N equal ; B 80 138 520 376 ;\r\nC 62 ; WX 600 ; N greater ; B 66 42 544 472 ;\r\nC 63 ; WX 600 ; N question ; B 129 -15 492 572 ;\r\nC 64 ; WX 600 ; N at ; B 77 -15 533 622 ;\r\nC 65 ; WX 600 ; N A ; B 3 0 597 562 ;\r\nC 66 ; WX 600 ; N B ; B 43 0 559 562 ;\r\nC 67 ; WX 600 ; N C ; B 41 -18 540 580 ;\r\nC 68 ; WX 600 ; N D ; B 43 0 574 562 ;\r\nC 69 ; WX 600 ; N E ; B 53 0 550 562 ;\r\nC 70 ; WX 600 ; N F ; B 53 0 545 562 ;\r\nC 71 ; WX 600 ; N G ; B 31 -18 575 580 ;\r\nC 72 ; WX 600 ; N H ; B 32 0 568 562 ;\r\nC 73 ; WX 600 ; N I ; B 96 0 504 562 ;\r\nC 74 ; WX 600 ; N J ; B 34 -18 566 562 ;\r\nC 75 ; WX 600 ; N K ; B 38 0 582 562 ;\r\nC 76 ; WX 600 ; N L ; B 47 0 554 562 ;\r\nC 77 ; WX 600 ; N M ; B 4 0 596 562 ;\r\nC 78 ; WX 600 ; N N ; B 7 -13 593 562 ;\r\nC 79 ; WX 600 ; N O ; B 43 -18 557 580 ;\r\nC 80 ; WX 600 ; N P ; B 79 0 558 562 ;\r\nC 81 ; WX 600 ; N Q ; B 43 -138 557 580 ;\r\nC 82 ; WX 600 ; N R ; B 38 0 588 562 ;\r\nC 83 ; WX 600 ; N S ; B 72 -20 529 580 ;\r\nC 84 ; WX 600 ; N T ; B 38 0 563 562 ;\r\nC 85 ; WX 600 ; N U ; B 17 -18 583 562 ;\r\nC 86 ; WX 600 ; N V ; B -4 -13 604 562 ;\r\nC 87 ; WX 600 ; N W ; B -3 -13 603 562 ;\r\nC 88 ; WX 600 ; N X ; B 23 0 577 562 ;\r\nC 89 ; WX 600 ; N Y ; B 24 0 576 562 ;\r\nC 90 ; WX 600 ; N Z ; B 86 0 514 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ;\r\nC 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ;\r\nC 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ;\r\nC 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ;\r\nC 97 ; WX 600 ; N a ; B 53 -15 559 441 ;\r\nC 98 ; WX 600 ; N b ; B 14 -15 575 629 ;\r\nC 99 ; WX 600 ; N c ; B 66 -15 529 441 ;\r\nC 100 ; WX 600 ; N d ; B 45 -15 591 629 ;\r\nC 101 ; WX 600 ; N e ; B 66 -15 548 441 ;\r\nC 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 45 -157 566 441 ;\r\nC 104 ; WX 600 ; N h ; B 18 0 582 629 ;\r\nC 105 ; WX 600 ; N i ; B 95 0 505 657 ;\r\nC 106 ; WX 600 ; N j ; B 82 -157 410 657 ;\r\nC 107 ; WX 600 ; N k ; B 43 0 580 629 ;\r\nC 108 ; WX 600 ; N l ; B 95 0 505 629 ;\r\nC 109 ; WX 600 ; N m ; B -5 0 605 441 ;\r\nC 110 ; WX 600 ; N n ; B 26 0 575 441 ;\r\nC 111 ; WX 600 ; N o ; B 62 -15 538 441 ;\r\nC 112 ; WX 600 ; N p ; B 9 -157 555 441 ;\r\nC 113 ; WX 600 ; N q ; B 45 -157 591 441 ;\r\nC 114 ; WX 600 ; N r ; B 60 0 559 441 ;\r\nC 115 ; WX 600 ; N s ; B 80 -15 513 441 ;\r\nC 116 ; WX 600 ; N t ; B 87 -15 530 561 ;\r\nC 117 ; WX 600 ; N u ; B 21 -15 562 426 ;\r\nC 118 ; WX 600 ; N v ; B 10 -10 590 426 ;\r\nC 119 ; WX 600 ; N w ; B -4 -10 604 426 ;\r\nC 120 ; WX 600 ; N x ; B 20 0 580 426 ;\r\nC 121 ; WX 600 ; N y ; B 7 -157 592 426 ;\r\nC 122 ; WX 600 ; N z ; B 99 0 502 426 ;\r\nC 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ;\r\nC 124 ; WX 600 ; N bar ; B 275 -250 326 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ;\r\nC 162 ; WX 600 ; N cent ; B 96 -49 500 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ;\r\nC 165 ; WX 600 ; N yen ; B 26 0 574 562 ;\r\nC 166 ; WX 600 ; N florin ; B 4 -143 539 622 ;\r\nC 167 ; WX 600 ; N section ; B 113 -78 488 580 ;\r\nC 168 ; WX 600 ; N currency ; B 73 58 527 506 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ;\r\nC 174 ; WX 600 ; N fi ; B 3 0 597 629 ;\r\nC 175 ; WX 600 ; N fl ; B 3 0 597 629 ;\r\nC 177 ; WX 600 ; N endash ; B 75 231 525 285 ;\r\nC 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ;\r\nC 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ;\r\nC 183 ; WX 600 ; N bullet ; B 172 130 428 383 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ;\r\nC 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ;\r\nC 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ;\r\nC 193 ; WX 600 ; N grave ; B 151 497 378 672 ;\r\nC 194 ; WX 600 ; N acute ; B 242 497 469 672 ;\r\nC 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ;\r\nC 196 ; WX 600 ; N tilde ; B 105 489 503 606 ;\r\nC 197 ; WX 600 ; N macron ; B 120 525 480 565 ;\r\nC 198 ; WX 600 ; N breve ; B 153 501 447 609 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ;\r\nC 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ;\r\nC 202 ; WX 600 ; N ring ; B 218 463 382 627 ;\r\nC 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ;\r\nC 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ;\r\nC 207 ; WX 600 ; N caron ; B 124 492 476 669 ;\r\nC 208 ; WX 600 ; N emdash ; B 0 231 600 285 ;\r\nC 225 ; WX 600 ; N AE ; B 3 0 550 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ;\r\nC 234 ; WX 600 ; N OE ; B 7 0 567 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ;\r\nC 241 ; WX 600 ; N ae ; B 19 -15 570 441 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ;\r\nC 248 ; WX 600 ; N lslash ; B 95 0 505 629 ;\r\nC 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ;\r\nC 250 ; WX 600 ; N oe ; B 19 -15 559 441 ;\r\nC 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ;\r\nC -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ;\r\nC -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ;\r\nC -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ;\r\nC -1 ; WX 600 ; N divide ; B 87 48 513 467 ;\r\nC -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ;\r\nC -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ;\r\nC -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ;\r\nC -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ;\r\nC -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ;\r\nC -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ;\r\nC -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ;\r\nC -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ;\r\nC -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ;\r\nC -1 ; WX 600 ; N aring ; B 53 -15 559 627 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 95 0 505 805 ;\r\nC -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ;\r\nC -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ;\r\nC -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ;\r\nC -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ;\r\nC -1 ; WX 600 ; N iacute ; B 95 0 505 672 ;\r\nC -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ;\r\nC -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ;\r\nC -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ;\r\nC -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ;\r\nC -1 ; WX 600 ; N Racute ; B 38 0 588 805 ;\r\nC -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ;\r\nC -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ;\r\nC -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ;\r\nC -1 ; WX 600 ; N uring ; B 21 -15 562 627 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ;\r\nC -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ;\r\nC -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ;\r\nC -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ;\r\nC -1 ; WX 600 ; N multiply ; B 87 43 515 470 ;\r\nC -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ;\r\nC -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ;\r\nC -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ;\r\nC -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ;\r\nC -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ;\r\nC -1 ; WX 600 ; N nacute ; B 26 0 575 672 ;\r\nC -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ;\r\nC -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ;\r\nC -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ;\r\nC -1 ; WX 600 ; N registered ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ;\r\nC -1 ; WX 600 ; N racute ; B 60 0 559 672 ;\r\nC -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ;\r\nC -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 574 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ;\r\nC -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ;\r\nC -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ;\r\nC -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ;\r\nC -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ;\r\nC -1 ; WX 600 ; N zacute ; B 99 0 502 672 ;\r\nC -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ;\r\nC -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ;\r\nC -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ;\r\nC -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ;\r\nC -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ;\r\nC -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ;\r\nC -1 ; WX 600 ; N mu ; B 21 -157 562 426 ;\r\nC -1 ; WX 600 ; N igrave ; B 95 0 505 672 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ;\r\nC -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ;\r\nC -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ;\r\nC -1 ; WX 600 ; N trademark ; B -23 263 623 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ;\r\nC -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ;\r\nC -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ;\r\nC -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ;\r\nC -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ;\r\nC -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ;\r\nC -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ;\r\nC -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ;\r\nC -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ;\r\nC -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ;\r\nC -1 ; WX 600 ; N degree ; B 123 269 477 622 ;\r\nC -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ;\r\nC -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ;\r\nC -1 ; WX 600 ; N radical ; B 3 -15 597 792 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ;\r\nC -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ;\r\nC -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ;\r\nC -1 ; WX 600 ; N Aring ; B 3 0 597 750 ;\r\nC -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ;\r\nC -1 ; WX 600 ; N minus ; B 80 232 520 283 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ;\r\nC -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ;\r\nC -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ;\r\nC -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ;\r\nC -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ;\r\nC -1 ; WX 600 ; N eth ; B 62 -15 538 629 ;\r\nC -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ;\r\nC -1 ; WX 600 ; N imacron ; B 95 0 505 565 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - }, - 'Courier-Bold'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Mon Jun 23 16:28:00 1997\r\nComment UniqueID 43048\r\nComment VMusage 41139 52164\r\nFontName Courier-Bold\r\nFullName Courier Bold\r\nFamilyName Courier\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -113 -250 749 801 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 439\r\nAscender 629\r\nDescender -157\r\nStdHW 84\r\nStdVW 106\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ;\r\nC 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ;\r\nC 37 ; WX 600 ; N percent ; B 5 -15 595 616 ;\r\nC 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 171 277 423 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ;\r\nC 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ;\r\nC 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ;\r\nC 43 ; WX 600 ; N plus ; B 71 39 529 478 ;\r\nC 44 ; WX 600 ; N comma ; B 123 -111 393 174 ;\r\nC 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ;\r\nC 46 ; WX 600 ; N period ; B 192 -15 408 171 ;\r\nC 47 ; WX 600 ; N slash ; B 98 -77 502 626 ;\r\nC 48 ; WX 600 ; N zero ; B 87 -15 513 616 ;\r\nC 49 ; WX 600 ; N one ; B 81 0 539 616 ;\r\nC 50 ; WX 600 ; N two ; B 61 0 499 616 ;\r\nC 51 ; WX 600 ; N three ; B 63 -15 501 616 ;\r\nC 52 ; WX 600 ; N four ; B 53 0 507 616 ;\r\nC 53 ; WX 600 ; N five ; B 70 -15 521 601 ;\r\nC 54 ; WX 600 ; N six ; B 90 -15 521 616 ;\r\nC 55 ; WX 600 ; N seven ; B 55 0 494 601 ;\r\nC 56 ; WX 600 ; N eight ; B 83 -15 517 616 ;\r\nC 57 ; WX 600 ; N nine ; B 79 -15 510 616 ;\r\nC 58 ; WX 600 ; N colon ; B 191 -15 407 425 ;\r\nC 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ;\r\nC 60 ; WX 600 ; N less ; B 66 15 523 501 ;\r\nC 61 ; WX 600 ; N equal ; B 71 118 529 398 ;\r\nC 62 ; WX 600 ; N greater ; B 77 15 534 501 ;\r\nC 63 ; WX 600 ; N question ; B 98 -14 501 580 ;\r\nC 64 ; WX 600 ; N at ; B 16 -15 584 616 ;\r\nC 65 ; WX 600 ; N A ; B -9 0 609 562 ;\r\nC 66 ; WX 600 ; N B ; B 30 0 573 562 ;\r\nC 67 ; WX 600 ; N C ; B 22 -18 560 580 ;\r\nC 68 ; WX 600 ; N D ; B 30 0 594 562 ;\r\nC 69 ; WX 600 ; N E ; B 25 0 560 562 ;\r\nC 70 ; WX 600 ; N F ; B 39 0 570 562 ;\r\nC 71 ; WX 600 ; N G ; B 22 -18 594 580 ;\r\nC 72 ; WX 600 ; N H ; B 20 0 580 562 ;\r\nC 73 ; WX 600 ; N I ; B 77 0 523 562 ;\r\nC 74 ; WX 600 ; N J ; B 37 -18 601 562 ;\r\nC 75 ; WX 600 ; N K ; B 21 0 599 562 ;\r\nC 76 ; WX 600 ; N L ; B 39 0 578 562 ;\r\nC 77 ; WX 600 ; N M ; B -2 0 602 562 ;\r\nC 78 ; WX 600 ; N N ; B 8 -12 610 562 ;\r\nC 79 ; WX 600 ; N O ; B 22 -18 578 580 ;\r\nC 80 ; WX 600 ; N P ; B 48 0 559 562 ;\r\nC 81 ; WX 600 ; N Q ; B 32 -138 578 580 ;\r\nC 82 ; WX 600 ; N R ; B 24 0 599 562 ;\r\nC 83 ; WX 600 ; N S ; B 47 -22 553 582 ;\r\nC 84 ; WX 600 ; N T ; B 21 0 579 562 ;\r\nC 85 ; WX 600 ; N U ; B 4 -18 596 562 ;\r\nC 86 ; WX 600 ; N V ; B -13 0 613 562 ;\r\nC 87 ; WX 600 ; N W ; B -18 0 618 562 ;\r\nC 88 ; WX 600 ; N X ; B 12 0 588 562 ;\r\nC 89 ; WX 600 ; N Y ; B 12 0 589 562 ;\r\nC 90 ; WX 600 ; N Z ; B 62 0 539 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ;\r\nC 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ;\r\nC 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ;\r\nC 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 178 277 428 562 ;\r\nC 97 ; WX 600 ; N a ; B 35 -15 570 454 ;\r\nC 98 ; WX 600 ; N b ; B 0 -15 584 626 ;\r\nC 99 ; WX 600 ; N c ; B 40 -15 545 459 ;\r\nC 100 ; WX 600 ; N d ; B 20 -15 591 626 ;\r\nC 101 ; WX 600 ; N e ; B 40 -15 563 454 ;\r\nC 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 30 -146 580 454 ;\r\nC 104 ; WX 600 ; N h ; B 5 0 592 626 ;\r\nC 105 ; WX 600 ; N i ; B 77 0 523 658 ;\r\nC 106 ; WX 600 ; N j ; B 63 -146 440 658 ;\r\nC 107 ; WX 600 ; N k ; B 20 0 585 626 ;\r\nC 108 ; WX 600 ; N l ; B 77 0 523 626 ;\r\nC 109 ; WX 600 ; N m ; B -22 0 626 454 ;\r\nC 110 ; WX 600 ; N n ; B 18 0 592 454 ;\r\nC 111 ; WX 600 ; N o ; B 30 -15 570 454 ;\r\nC 112 ; WX 600 ; N p ; B -1 -142 570 454 ;\r\nC 113 ; WX 600 ; N q ; B 20 -142 591 454 ;\r\nC 114 ; WX 600 ; N r ; B 47 0 580 454 ;\r\nC 115 ; WX 600 ; N s ; B 68 -17 535 459 ;\r\nC 116 ; WX 600 ; N t ; B 47 -15 532 562 ;\r\nC 117 ; WX 600 ; N u ; B -1 -15 569 439 ;\r\nC 118 ; WX 600 ; N v ; B -1 0 601 439 ;\r\nC 119 ; WX 600 ; N w ; B -18 0 618 439 ;\r\nC 120 ; WX 600 ; N x ; B 6 0 594 439 ;\r\nC 121 ; WX 600 ; N y ; B -4 -142 601 439 ;\r\nC 122 ; WX 600 ; N z ; B 81 0 520 439 ;\r\nC 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ;\r\nC 124 ; WX 600 ; N bar ; B 255 -250 345 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ;\r\nC 162 ; WX 600 ; N cent ; B 66 -49 518 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 25 -60 576 661 ;\r\nC 165 ; WX 600 ; N yen ; B 10 0 590 562 ;\r\nC 166 ; WX 600 ; N florin ; B -30 -131 572 616 ;\r\nC 167 ; WX 600 ; N section ; B 83 -70 517 580 ;\r\nC 168 ; WX 600 ; N currency ; B 54 49 546 517 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 227 277 373 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ;\r\nC 174 ; WX 600 ; N fi ; B 12 0 593 626 ;\r\nC 175 ; WX 600 ; N fl ; B 12 0 593 626 ;\r\nC 177 ; WX 600 ; N endash ; B 65 203 535 313 ;\r\nC 178 ; WX 600 ; N dagger ; B 106 -70 494 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 196 165 404 351 ;\r\nC 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ;\r\nC 183 ; WX 600 ; N bullet ; B 140 132 460 430 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 61 277 525 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ;\r\nC 189 ; WX 600 ; N perthousand ; B -113 -15 713 616 ;\r\nC 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ;\r\nC 193 ; WX 600 ; N grave ; B 132 508 395 661 ;\r\nC 194 ; WX 600 ; N acute ; B 205 508 468 661 ;\r\nC 195 ; WX 600 ; N circumflex ; B 103 483 497 657 ;\r\nC 196 ; WX 600 ; N tilde ; B 89 493 512 636 ;\r\nC 197 ; WX 600 ; N macron ; B 88 505 512 585 ;\r\nC 198 ; WX 600 ; N breve ; B 83 468 517 631 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 230 498 370 638 ;\r\nC 200 ; WX 600 ; N dieresis ; B 128 498 472 638 ;\r\nC 202 ; WX 600 ; N ring ; B 198 481 402 678 ;\r\nC 203 ; WX 600 ; N cedilla ; B 205 -206 387 0 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ;\r\nC 206 ; WX 600 ; N ogonek ; B 169 -199 400 0 ;\r\nC 207 ; WX 600 ; N caron ; B 103 493 497 667 ;\r\nC 208 ; WX 600 ; N emdash ; B -10 203 610 313 ;\r\nC 225 ; WX 600 ; N AE ; B -29 0 602 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 39 0 578 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 22 -22 578 584 ;\r\nC 234 ; WX 600 ; N OE ; B -25 0 595 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ;\r\nC 241 ; WX 600 ; N ae ; B -4 -15 601 454 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 77 0 523 439 ;\r\nC 248 ; WX 600 ; N lslash ; B 77 0 523 626 ;\r\nC 249 ; WX 600 ; N oslash ; B 30 -24 570 463 ;\r\nC 250 ; WX 600 ; N oe ; B -18 -15 611 454 ;\r\nC 251 ; WX 600 ; N germandbls ; B 22 -15 596 626 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 77 0 523 761 ;\r\nC -1 ; WX 600 ; N eacute ; B 40 -15 563 661 ;\r\nC -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ;\r\nC -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ;\r\nC -1 ; WX 600 ; N divide ; B 71 16 529 500 ;\r\nC -1 ; WX 600 ; N Yacute ; B 12 0 589 784 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ;\r\nC -1 ; WX 600 ; N aacute ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ;\r\nC -1 ; WX 600 ; N yacute ; B -4 -142 601 661 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ;\r\nC -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ;\r\nC -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ;\r\nC -1 ; WX 600 ; N Uacute ; B 4 -18 596 784 ;\r\nC -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 25 0 560 761 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ;\r\nC -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ;\r\nC -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ;\r\nC -1 ; WX 600 ; N aring ; B 35 -15 570 678 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 77 0 523 801 ;\r\nC -1 ; WX 600 ; N agrave ; B 35 -15 570 661 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ;\r\nC -1 ; WX 600 ; N atilde ; B 35 -15 570 636 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ;\r\nC -1 ; WX 600 ; N scaron ; B 68 -17 535 667 ;\r\nC -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ;\r\nC -1 ; WX 600 ; N iacute ; B 77 0 523 661 ;\r\nC -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ;\r\nC -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ;\r\nC -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ;\r\nC -1 ; WX 600 ; N Thorn ; B 48 0 557 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ;\r\nC -1 ; WX 600 ; N Racute ; B 24 0 599 784 ;\r\nC -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ;\r\nC -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ;\r\nC -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ;\r\nC -1 ; WX 600 ; N uring ; B -1 -15 569 678 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 138 222 433 616 ;\r\nC -1 ; WX 600 ; N Ograve ; B 22 -18 578 784 ;\r\nC -1 ; WX 600 ; N Agrave ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N multiply ; B 81 39 520 478 ;\r\nC -1 ; WX 600 ; N uacute ; B -1 -15 569 661 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ;\r\nC -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 73 0 523 657 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ;\r\nC -1 ; WX 600 ; N adieresis ; B 35 -15 570 638 ;\r\nC -1 ; WX 600 ; N edieresis ; B 40 -15 563 638 ;\r\nC -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ;\r\nC -1 ; WX 600 ; N nacute ; B 18 0 592 661 ;\r\nC -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ;\r\nC -1 ; WX 600 ; N Iacute ; B 77 0 523 784 ;\r\nC -1 ; WX 600 ; N plusminus ; B 71 24 529 515 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ;\r\nC -1 ; WX 600 ; N registered ; B 0 -18 600 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 25 0 560 784 ;\r\nC -1 ; WX 600 ; N racute ; B 47 0 580 661 ;\r\nC -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ;\r\nC -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 62 0 539 790 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 594 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ;\r\nC -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ;\r\nC -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B -9 0 609 784 ;\r\nC -1 ; WX 600 ; N Adieresis ; B -9 0 609 761 ;\r\nC -1 ; WX 600 ; N egrave ; B 40 -15 563 661 ;\r\nC -1 ; WX 600 ; N zacute ; B 81 0 520 661 ;\r\nC -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ;\r\nC -1 ; WX 600 ; N Oacute ; B 22 -18 578 784 ;\r\nC -1 ; WX 600 ; N oacute ; B 30 -15 570 661 ;\r\nC -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ;\r\nC -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ;\r\nC -1 ; WX 600 ; N idieresis ; B 77 0 523 618 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -14 -142 570 626 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 143 230 436 616 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ;\r\nC -1 ; WX 600 ; N mu ; B -1 -142 569 439 ;\r\nC -1 ; WX 600 ; N igrave ; B 77 0 523 661 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ;\r\nC -1 ; WX 600 ; N threequarters ; B -47 -60 648 661 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ;\r\nC -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ;\r\nC -1 ; WX 600 ; N trademark ; B -9 230 749 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ;\r\nC -1 ; WX 600 ; N Igrave ; B 77 0 523 784 ;\r\nC -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B -47 -60 648 661 ;\r\nC -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ;\r\nC -1 ; WX 600 ; N ntilde ; B 18 0 592 636 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ;\r\nC -1 ; WX 600 ; N Eacute ; B 25 0 560 784 ;\r\nC -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ;\r\nC -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ;\r\nC -1 ; WX 600 ; N onequarter ; B -56 -60 656 661 ;\r\nC -1 ; WX 600 ; N Scaron ; B 47 -22 553 790 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ;\r\nC -1 ; WX 600 ; N degree ; B 86 243 474 616 ;\r\nC -1 ; WX 600 ; N ograve ; B 30 -15 570 661 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ;\r\nC -1 ; WX 600 ; N ugrave ; B -1 -15 569 661 ;\r\nC -1 ; WX 600 ; N radical ; B -19 -104 473 778 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ;\r\nC -1 ; WX 600 ; N otilde ; B 30 -15 570 636 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B -9 0 609 759 ;\r\nC -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ;\r\nC -1 ; WX 600 ; N Aring ; B -9 0 609 801 ;\r\nC -1 ; WX 600 ; N Otilde ; B 22 -18 578 759 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ;\r\nC -1 ; WX 600 ; N minus ; B 71 203 529 313 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ;\r\nC -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 71 103 529 413 ;\r\nC -1 ; WX 600 ; N odieresis ; B 30 -15 570 638 ;\r\nC -1 ; WX 600 ; N udieresis ; B -1 -15 569 638 ;\r\nC -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ;\r\nC -1 ; WX 600 ; N eth ; B 58 -27 543 626 ;\r\nC -1 ; WX 600 ; N zcaron ; B 81 0 520 667 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 153 230 447 616 ;\r\nC -1 ; WX 600 ; N imacron ; B 77 0 523 585 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - }, - 'Courier-Oblique'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 17:37:52 1997\r\nComment UniqueID 43051\r\nComment VMusage 16248 75829\r\nFontName Courier-Oblique\r\nFullName Courier Oblique\r\nFamilyName Courier\r\nWeight Medium\r\nItalicAngle -12\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -27 -250 849 805 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 426\r\nAscender 629\r\nDescender -157\r\nStdHW 51\r\nStdVW 51\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ;\r\nC 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ;\r\nC 37 ; WX 600 ; N percent ; B 134 -15 599 622 ;\r\nC 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 283 328 495 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ;\r\nC 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ;\r\nC 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ;\r\nC 43 ; WX 600 ; N plus ; B 129 44 580 470 ;\r\nC 44 ; WX 600 ; N comma ; B 157 -112 370 122 ;\r\nC 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ;\r\nC 46 ; WX 600 ; N period ; B 238 -15 382 109 ;\r\nC 47 ; WX 600 ; N slash ; B 112 -80 604 629 ;\r\nC 48 ; WX 600 ; N zero ; B 154 -15 575 622 ;\r\nC 49 ; WX 600 ; N one ; B 98 0 515 622 ;\r\nC 50 ; WX 600 ; N two ; B 70 0 568 622 ;\r\nC 51 ; WX 600 ; N three ; B 82 -15 538 622 ;\r\nC 52 ; WX 600 ; N four ; B 108 0 541 622 ;\r\nC 53 ; WX 600 ; N five ; B 99 -15 589 607 ;\r\nC 54 ; WX 600 ; N six ; B 155 -15 629 622 ;\r\nC 55 ; WX 600 ; N seven ; B 182 0 612 607 ;\r\nC 56 ; WX 600 ; N eight ; B 132 -15 588 622 ;\r\nC 57 ; WX 600 ; N nine ; B 93 -15 574 622 ;\r\nC 58 ; WX 600 ; N colon ; B 238 -15 441 385 ;\r\nC 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ;\r\nC 60 ; WX 600 ; N less ; B 96 42 610 472 ;\r\nC 61 ; WX 600 ; N equal ; B 109 138 600 376 ;\r\nC 62 ; WX 600 ; N greater ; B 85 42 599 472 ;\r\nC 63 ; WX 600 ; N question ; B 222 -15 583 572 ;\r\nC 64 ; WX 600 ; N at ; B 127 -15 582 622 ;\r\nC 65 ; WX 600 ; N A ; B 3 0 607 562 ;\r\nC 66 ; WX 600 ; N B ; B 43 0 616 562 ;\r\nC 67 ; WX 600 ; N C ; B 93 -18 655 580 ;\r\nC 68 ; WX 600 ; N D ; B 43 0 645 562 ;\r\nC 69 ; WX 600 ; N E ; B 53 0 660 562 ;\r\nC 70 ; WX 600 ; N F ; B 53 0 660 562 ;\r\nC 71 ; WX 600 ; N G ; B 83 -18 645 580 ;\r\nC 72 ; WX 600 ; N H ; B 32 0 687 562 ;\r\nC 73 ; WX 600 ; N I ; B 96 0 623 562 ;\r\nC 74 ; WX 600 ; N J ; B 52 -18 685 562 ;\r\nC 75 ; WX 600 ; N K ; B 38 0 671 562 ;\r\nC 76 ; WX 600 ; N L ; B 47 0 607 562 ;\r\nC 77 ; WX 600 ; N M ; B 4 0 715 562 ;\r\nC 78 ; WX 600 ; N N ; B 7 -13 712 562 ;\r\nC 79 ; WX 600 ; N O ; B 94 -18 625 580 ;\r\nC 80 ; WX 600 ; N P ; B 79 0 644 562 ;\r\nC 81 ; WX 600 ; N Q ; B 95 -138 625 580 ;\r\nC 82 ; WX 600 ; N R ; B 38 0 598 562 ;\r\nC 83 ; WX 600 ; N S ; B 76 -20 650 580 ;\r\nC 84 ; WX 600 ; N T ; B 108 0 665 562 ;\r\nC 85 ; WX 600 ; N U ; B 125 -18 702 562 ;\r\nC 86 ; WX 600 ; N V ; B 105 -13 723 562 ;\r\nC 87 ; WX 600 ; N W ; B 106 -13 722 562 ;\r\nC 88 ; WX 600 ; N X ; B 23 0 675 562 ;\r\nC 89 ; WX 600 ; N Y ; B 133 0 695 562 ;\r\nC 90 ; WX 600 ; N Z ; B 86 0 610 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ;\r\nC 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ;\r\nC 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ;\r\nC 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 343 328 457 562 ;\r\nC 97 ; WX 600 ; N a ; B 76 -15 569 441 ;\r\nC 98 ; WX 600 ; N b ; B 29 -15 625 629 ;\r\nC 99 ; WX 600 ; N c ; B 106 -15 608 441 ;\r\nC 100 ; WX 600 ; N d ; B 85 -15 640 629 ;\r\nC 101 ; WX 600 ; N e ; B 106 -15 598 441 ;\r\nC 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 61 -157 657 441 ;\r\nC 104 ; WX 600 ; N h ; B 33 0 592 629 ;\r\nC 105 ; WX 600 ; N i ; B 95 0 515 657 ;\r\nC 106 ; WX 600 ; N j ; B 52 -157 550 657 ;\r\nC 107 ; WX 600 ; N k ; B 58 0 633 629 ;\r\nC 108 ; WX 600 ; N l ; B 95 0 515 629 ;\r\nC 109 ; WX 600 ; N m ; B -5 0 615 441 ;\r\nC 110 ; WX 600 ; N n ; B 26 0 585 441 ;\r\nC 111 ; WX 600 ; N o ; B 102 -15 588 441 ;\r\nC 112 ; WX 600 ; N p ; B -24 -157 605 441 ;\r\nC 113 ; WX 600 ; N q ; B 85 -157 682 441 ;\r\nC 114 ; WX 600 ; N r ; B 60 0 636 441 ;\r\nC 115 ; WX 600 ; N s ; B 78 -15 584 441 ;\r\nC 116 ; WX 600 ; N t ; B 167 -15 561 561 ;\r\nC 117 ; WX 600 ; N u ; B 101 -15 572 426 ;\r\nC 118 ; WX 600 ; N v ; B 90 -10 681 426 ;\r\nC 119 ; WX 600 ; N w ; B 76 -10 695 426 ;\r\nC 120 ; WX 600 ; N x ; B 20 0 655 426 ;\r\nC 121 ; WX 600 ; N y ; B -4 -157 683 426 ;\r\nC 122 ; WX 600 ; N z ; B 99 0 593 426 ;\r\nC 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ;\r\nC 124 ; WX 600 ; N bar ; B 222 -250 485 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ;\r\nC 162 ; WX 600 ; N cent ; B 151 -49 588 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 84 -57 646 665 ;\r\nC 165 ; WX 600 ; N yen ; B 120 0 693 562 ;\r\nC 166 ; WX 600 ; N florin ; B -26 -143 671 622 ;\r\nC 167 ; WX 600 ; N section ; B 104 -78 590 580 ;\r\nC 168 ; WX 600 ; N currency ; B 94 58 628 506 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 345 328 460 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ;\r\nC 174 ; WX 600 ; N fi ; B 3 0 619 629 ;\r\nC 175 ; WX 600 ; N fl ; B 3 0 619 629 ;\r\nC 177 ; WX 600 ; N endash ; B 124 231 586 285 ;\r\nC 178 ; WX 600 ; N dagger ; B 217 -78 546 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 275 189 434 327 ;\r\nC 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ;\r\nC 183 ; WX 600 ; N bullet ; B 224 130 485 383 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 213 328 576 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ;\r\nC 189 ; WX 600 ; N perthousand ; B 59 -15 627 622 ;\r\nC 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ;\r\nC 193 ; WX 600 ; N grave ; B 294 497 484 672 ;\r\nC 194 ; WX 600 ; N acute ; B 348 497 612 672 ;\r\nC 195 ; WX 600 ; N circumflex ; B 229 477 581 654 ;\r\nC 196 ; WX 600 ; N tilde ; B 212 489 629 606 ;\r\nC 197 ; WX 600 ; N macron ; B 232 525 600 565 ;\r\nC 198 ; WX 600 ; N breve ; B 279 501 576 609 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 373 537 478 640 ;\r\nC 200 ; WX 600 ; N dieresis ; B 272 537 579 640 ;\r\nC 202 ; WX 600 ; N ring ; B 332 463 500 627 ;\r\nC 203 ; WX 600 ; N cedilla ; B 197 -151 344 10 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ;\r\nC 206 ; WX 600 ; N ogonek ; B 189 -172 377 4 ;\r\nC 207 ; WX 600 ; N caron ; B 262 492 614 669 ;\r\nC 208 ; WX 600 ; N emdash ; B 49 231 661 285 ;\r\nC 225 ; WX 600 ; N AE ; B 3 0 655 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 47 0 607 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 94 -80 625 629 ;\r\nC 234 ; WX 600 ; N OE ; B 59 0 672 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ;\r\nC 241 ; WX 600 ; N ae ; B 41 -15 626 441 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 95 0 515 426 ;\r\nC 248 ; WX 600 ; N lslash ; B 95 0 587 629 ;\r\nC 249 ; WX 600 ; N oslash ; B 102 -80 588 506 ;\r\nC 250 ; WX 600 ; N oe ; B 54 -15 615 441 ;\r\nC 251 ; WX 600 ; N germandbls ; B 48 -15 617 629 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 96 0 623 753 ;\r\nC -1 ; WX 600 ; N eacute ; B 106 -15 612 672 ;\r\nC -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ;\r\nC -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ;\r\nC -1 ; WX 600 ; N divide ; B 136 48 573 467 ;\r\nC -1 ; WX 600 ; N Yacute ; B 133 0 695 805 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ;\r\nC -1 ; WX 600 ; N aacute ; B 76 -15 612 672 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ;\r\nC -1 ; WX 600 ; N yacute ; B -4 -157 683 672 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ;\r\nC -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ;\r\nC -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ;\r\nC -1 ; WX 600 ; N Uacute ; B 125 -18 702 805 ;\r\nC -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 53 0 660 753 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ;\r\nC -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ;\r\nC -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ;\r\nC -1 ; WX 600 ; N aring ; B 76 -15 569 627 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 95 0 640 805 ;\r\nC -1 ; WX 600 ; N agrave ; B 76 -15 569 672 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ;\r\nC -1 ; WX 600 ; N atilde ; B 76 -15 629 606 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ;\r\nC -1 ; WX 600 ; N scaron ; B 78 -15 614 669 ;\r\nC -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ;\r\nC -1 ; WX 600 ; N iacute ; B 95 0 612 672 ;\r\nC -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ;\r\nC -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ;\r\nC -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ;\r\nC -1 ; WX 600 ; N Thorn ; B 79 0 606 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ;\r\nC -1 ; WX 600 ; N Racute ; B 38 0 670 805 ;\r\nC -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ;\r\nC -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ;\r\nC -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ;\r\nC -1 ; WX 600 ; N uring ; B 101 -15 572 627 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 213 240 501 622 ;\r\nC -1 ; WX 600 ; N Ograve ; B 94 -18 625 805 ;\r\nC -1 ; WX 600 ; N Agrave ; B 3 0 607 805 ;\r\nC -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ;\r\nC -1 ; WX 600 ; N multiply ; B 103 43 607 470 ;\r\nC -1 ; WX 600 ; N uacute ; B 101 -15 602 672 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ;\r\nC -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 95 0 551 654 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ;\r\nC -1 ; WX 600 ; N adieresis ; B 76 -15 575 620 ;\r\nC -1 ; WX 600 ; N edieresis ; B 106 -15 598 620 ;\r\nC -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ;\r\nC -1 ; WX 600 ; N nacute ; B 26 0 602 672 ;\r\nC -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ;\r\nC -1 ; WX 600 ; N Iacute ; B 96 0 640 805 ;\r\nC -1 ; WX 600 ; N plusminus ; B 96 44 594 558 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ;\r\nC -1 ; WX 600 ; N registered ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 670 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 53 0 660 805 ;\r\nC -1 ; WX 600 ; N racute ; B 60 0 636 672 ;\r\nC -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ;\r\nC -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 86 0 642 802 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ;\r\nC -1 ; WX 600 ; N Eth ; B 43 0 645 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ;\r\nC -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ;\r\nC -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B 3 0 660 805 ;\r\nC -1 ; WX 600 ; N Adieresis ; B 3 0 607 753 ;\r\nC -1 ; WX 600 ; N egrave ; B 106 -15 598 672 ;\r\nC -1 ; WX 600 ; N zacute ; B 99 0 612 672 ;\r\nC -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ;\r\nC -1 ; WX 600 ; N Oacute ; B 94 -18 640 805 ;\r\nC -1 ; WX 600 ; N oacute ; B 102 -15 612 672 ;\r\nC -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ;\r\nC -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ;\r\nC -1 ; WX 600 ; N idieresis ; B 95 0 545 620 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -24 -157 605 629 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 230 249 535 622 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ;\r\nC -1 ; WX 600 ; N mu ; B 72 -157 572 426 ;\r\nC -1 ; WX 600 ; N igrave ; B 95 0 515 672 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ;\r\nC -1 ; WX 600 ; N threequarters ; B 73 -56 659 666 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ;\r\nC -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ;\r\nC -1 ; WX 600 ; N trademark ; B 75 263 742 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ;\r\nC -1 ; WX 600 ; N Igrave ; B 96 0 623 805 ;\r\nC -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 65 -57 669 665 ;\r\nC -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ;\r\nC -1 ; WX 600 ; N ntilde ; B 26 0 629 606 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ;\r\nC -1 ; WX 600 ; N Eacute ; B 53 0 670 805 ;\r\nC -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ;\r\nC -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ;\r\nC -1 ; WX 600 ; N onequarter ; B 65 -57 674 665 ;\r\nC -1 ; WX 600 ; N Scaron ; B 76 -20 672 802 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ;\r\nC -1 ; WX 600 ; N degree ; B 214 269 576 622 ;\r\nC -1 ; WX 600 ; N ograve ; B 102 -15 588 672 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ;\r\nC -1 ; WX 600 ; N ugrave ; B 101 -15 572 672 ;\r\nC -1 ; WX 600 ; N radical ; B 85 -15 765 792 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ;\r\nC -1 ; WX 600 ; N otilde ; B 102 -15 629 606 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B 3 0 655 729 ;\r\nC -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ;\r\nC -1 ; WX 600 ; N Aring ; B 3 0 607 750 ;\r\nC -1 ; WX 600 ; N Otilde ; B 94 -18 655 729 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ;\r\nC -1 ; WX 600 ; N minus ; B 129 232 580 283 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ;\r\nC -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 155 108 591 369 ;\r\nC -1 ; WX 600 ; N odieresis ; B 102 -15 588 620 ;\r\nC -1 ; WX 600 ; N udieresis ; B 101 -15 575 620 ;\r\nC -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ;\r\nC -1 ; WX 600 ; N eth ; B 102 -15 639 629 ;\r\nC -1 ; WX 600 ; N zcaron ; B 99 0 624 669 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 231 249 491 622 ;\r\nC -1 ; WX 600 ; N imacron ; B 95 0 543 565 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - }, - 'Courier-BoldOblique'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Mon Jun 23 16:28:46 1997\r\nComment UniqueID 43049\r\nComment VMusage 17529 79244\r\nFontName Courier-BoldOblique\r\nFullName Courier Bold Oblique\r\nFamilyName Courier\r\nWeight Bold\r\nItalicAngle -12\r\nIsFixedPitch true\r\nCharacterSet ExtendedRoman\r\nFontBBox -57 -250 869 801 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 003.000\r\nNotice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 562\r\nXHeight 439\r\nAscender 629\r\nDescender -157\r\nStdHW 84\r\nStdVW 106\r\nStartCharMetrics 315\r\nC 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ;\r\nC 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ;\r\nC 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ;\r\nC 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ;\r\nC 37 ; WX 600 ; N percent ; B 101 -15 625 616 ;\r\nC 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ;\r\nC 39 ; WX 600 ; N quoteright ; B 229 277 543 562 ;\r\nC 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ;\r\nC 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ;\r\nC 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ;\r\nC 43 ; WX 600 ; N plus ; B 114 39 596 478 ;\r\nC 44 ; WX 600 ; N comma ; B 99 -111 430 174 ;\r\nC 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ;\r\nC 46 ; WX 600 ; N period ; B 206 -15 427 171 ;\r\nC 47 ; WX 600 ; N slash ; B 90 -77 626 626 ;\r\nC 48 ; WX 600 ; N zero ; B 135 -15 593 616 ;\r\nC 49 ; WX 600 ; N one ; B 93 0 562 616 ;\r\nC 50 ; WX 600 ; N two ; B 61 0 594 616 ;\r\nC 51 ; WX 600 ; N three ; B 71 -15 571 616 ;\r\nC 52 ; WX 600 ; N four ; B 81 0 559 616 ;\r\nC 53 ; WX 600 ; N five ; B 77 -15 621 601 ;\r\nC 54 ; WX 600 ; N six ; B 135 -15 652 616 ;\r\nC 55 ; WX 600 ; N seven ; B 147 0 622 601 ;\r\nC 56 ; WX 600 ; N eight ; B 115 -15 604 616 ;\r\nC 57 ; WX 600 ; N nine ; B 75 -15 592 616 ;\r\nC 58 ; WX 600 ; N colon ; B 205 -15 480 425 ;\r\nC 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ;\r\nC 60 ; WX 600 ; N less ; B 120 15 613 501 ;\r\nC 61 ; WX 600 ; N equal ; B 96 118 614 398 ;\r\nC 62 ; WX 600 ; N greater ; B 97 15 589 501 ;\r\nC 63 ; WX 600 ; N question ; B 183 -14 592 580 ;\r\nC 64 ; WX 600 ; N at ; B 65 -15 642 616 ;\r\nC 65 ; WX 600 ; N A ; B -9 0 632 562 ;\r\nC 66 ; WX 600 ; N B ; B 30 0 630 562 ;\r\nC 67 ; WX 600 ; N C ; B 74 -18 675 580 ;\r\nC 68 ; WX 600 ; N D ; B 30 0 664 562 ;\r\nC 69 ; WX 600 ; N E ; B 25 0 670 562 ;\r\nC 70 ; WX 600 ; N F ; B 39 0 684 562 ;\r\nC 71 ; WX 600 ; N G ; B 74 -18 675 580 ;\r\nC 72 ; WX 600 ; N H ; B 20 0 700 562 ;\r\nC 73 ; WX 600 ; N I ; B 77 0 643 562 ;\r\nC 74 ; WX 600 ; N J ; B 58 -18 721 562 ;\r\nC 75 ; WX 600 ; N K ; B 21 0 692 562 ;\r\nC 76 ; WX 600 ; N L ; B 39 0 636 562 ;\r\nC 77 ; WX 600 ; N M ; B -2 0 722 562 ;\r\nC 78 ; WX 600 ; N N ; B 8 -12 730 562 ;\r\nC 79 ; WX 600 ; N O ; B 74 -18 645 580 ;\r\nC 80 ; WX 600 ; N P ; B 48 0 643 562 ;\r\nC 81 ; WX 600 ; N Q ; B 83 -138 636 580 ;\r\nC 82 ; WX 600 ; N R ; B 24 0 617 562 ;\r\nC 83 ; WX 600 ; N S ; B 54 -22 673 582 ;\r\nC 84 ; WX 600 ; N T ; B 86 0 679 562 ;\r\nC 85 ; WX 600 ; N U ; B 101 -18 716 562 ;\r\nC 86 ; WX 600 ; N V ; B 84 0 733 562 ;\r\nC 87 ; WX 600 ; N W ; B 79 0 738 562 ;\r\nC 88 ; WX 600 ; N X ; B 12 0 690 562 ;\r\nC 89 ; WX 600 ; N Y ; B 109 0 709 562 ;\r\nC 90 ; WX 600 ; N Z ; B 62 0 637 562 ;\r\nC 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ;\r\nC 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ;\r\nC 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ;\r\nC 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ;\r\nC 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ;\r\nC 96 ; WX 600 ; N quoteleft ; B 297 277 487 562 ;\r\nC 97 ; WX 600 ; N a ; B 61 -15 593 454 ;\r\nC 98 ; WX 600 ; N b ; B 13 -15 636 626 ;\r\nC 99 ; WX 600 ; N c ; B 81 -15 631 459 ;\r\nC 100 ; WX 600 ; N d ; B 60 -15 645 626 ;\r\nC 101 ; WX 600 ; N e ; B 81 -15 605 454 ;\r\nC 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ;\r\nC 103 ; WX 600 ; N g ; B 40 -146 674 454 ;\r\nC 104 ; WX 600 ; N h ; B 18 0 615 626 ;\r\nC 105 ; WX 600 ; N i ; B 77 0 546 658 ;\r\nC 106 ; WX 600 ; N j ; B 36 -146 580 658 ;\r\nC 107 ; WX 600 ; N k ; B 33 0 643 626 ;\r\nC 108 ; WX 600 ; N l ; B 77 0 546 626 ;\r\nC 109 ; WX 600 ; N m ; B -22 0 649 454 ;\r\nC 110 ; WX 600 ; N n ; B 18 0 615 454 ;\r\nC 111 ; WX 600 ; N o ; B 71 -15 622 454 ;\r\nC 112 ; WX 600 ; N p ; B -32 -142 622 454 ;\r\nC 113 ; WX 600 ; N q ; B 60 -142 685 454 ;\r\nC 114 ; WX 600 ; N r ; B 47 0 655 454 ;\r\nC 115 ; WX 600 ; N s ; B 66 -17 608 459 ;\r\nC 116 ; WX 600 ; N t ; B 118 -15 567 562 ;\r\nC 117 ; WX 600 ; N u ; B 70 -15 592 439 ;\r\nC 118 ; WX 600 ; N v ; B 70 0 695 439 ;\r\nC 119 ; WX 600 ; N w ; B 53 0 712 439 ;\r\nC 120 ; WX 600 ; N x ; B 6 0 671 439 ;\r\nC 121 ; WX 600 ; N y ; B -21 -142 695 439 ;\r\nC 122 ; WX 600 ; N z ; B 81 0 614 439 ;\r\nC 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ;\r\nC 124 ; WX 600 ; N bar ; B 201 -250 505 750 ;\r\nC 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ;\r\nC 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ;\r\nC 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ;\r\nC 162 ; WX 600 ; N cent ; B 121 -49 605 614 ;\r\nC 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ;\r\nC 164 ; WX 600 ; N fraction ; B 22 -60 708 661 ;\r\nC 165 ; WX 600 ; N yen ; B 98 0 710 562 ;\r\nC 166 ; WX 600 ; N florin ; B -57 -131 702 616 ;\r\nC 167 ; WX 600 ; N section ; B 74 -70 620 580 ;\r\nC 168 ; WX 600 ; N currency ; B 77 49 644 517 ;\r\nC 169 ; WX 600 ; N quotesingle ; B 303 277 493 562 ;\r\nC 170 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ;\r\nC 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ;\r\nC 172 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ;\r\nC 173 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ;\r\nC 174 ; WX 600 ; N fi ; B 12 0 644 626 ;\r\nC 175 ; WX 600 ; N fl ; B 12 0 644 626 ;\r\nC 177 ; WX 600 ; N endash ; B 108 203 602 313 ;\r\nC 178 ; WX 600 ; N dagger ; B 175 -70 586 580 ;\r\nC 179 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ;\r\nC 180 ; WX 600 ; N periodcentered ; B 248 165 461 351 ;\r\nC 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ;\r\nC 183 ; WX 600 ; N bullet ; B 196 132 523 430 ;\r\nC 184 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ;\r\nC 185 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ;\r\nC 186 ; WX 600 ; N quotedblright ; B 119 277 645 562 ;\r\nC 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ;\r\nC 188 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ;\r\nC 189 ; WX 600 ; N perthousand ; B -45 -15 743 616 ;\r\nC 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ;\r\nC 193 ; WX 600 ; N grave ; B 272 508 503 661 ;\r\nC 194 ; WX 600 ; N acute ; B 312 508 609 661 ;\r\nC 195 ; WX 600 ; N circumflex ; B 212 483 607 657 ;\r\nC 196 ; WX 600 ; N tilde ; B 199 493 643 636 ;\r\nC 197 ; WX 600 ; N macron ; B 195 505 637 585 ;\r\nC 198 ; WX 600 ; N breve ; B 217 468 652 631 ;\r\nC 199 ; WX 600 ; N dotaccent ; B 348 498 493 638 ;\r\nC 200 ; WX 600 ; N dieresis ; B 246 498 595 638 ;\r\nC 202 ; WX 600 ; N ring ; B 319 481 528 678 ;\r\nC 203 ; WX 600 ; N cedilla ; B 168 -206 368 0 ;\r\nC 205 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ;\r\nC 206 ; WX 600 ; N ogonek ; B 143 -199 367 0 ;\r\nC 207 ; WX 600 ; N caron ; B 238 493 633 667 ;\r\nC 208 ; WX 600 ; N emdash ; B 33 203 677 313 ;\r\nC 225 ; WX 600 ; N AE ; B -29 0 708 562 ;\r\nC 227 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ;\r\nC 232 ; WX 600 ; N Lslash ; B 39 0 636 562 ;\r\nC 233 ; WX 600 ; N Oslash ; B 48 -22 673 584 ;\r\nC 234 ; WX 600 ; N OE ; B 26 0 701 562 ;\r\nC 235 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ;\r\nC 241 ; WX 600 ; N ae ; B 21 -15 652 454 ;\r\nC 245 ; WX 600 ; N dotlessi ; B 77 0 546 439 ;\r\nC 248 ; WX 600 ; N lslash ; B 77 0 587 626 ;\r\nC 249 ; WX 600 ; N oslash ; B 54 -24 638 463 ;\r\nC 250 ; WX 600 ; N oe ; B 18 -15 662 454 ;\r\nC 251 ; WX 600 ; N germandbls ; B 22 -15 629 626 ;\r\nC -1 ; WX 600 ; N Idieresis ; B 77 0 643 761 ;\r\nC -1 ; WX 600 ; N eacute ; B 81 -15 609 661 ;\r\nC -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ;\r\nC -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ;\r\nC -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ;\r\nC -1 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ;\r\nC -1 ; WX 600 ; N divide ; B 114 16 596 500 ;\r\nC -1 ; WX 600 ; N Yacute ; B 109 0 709 784 ;\r\nC -1 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ;\r\nC -1 ; WX 600 ; N aacute ; B 61 -15 609 661 ;\r\nC -1 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ;\r\nC -1 ; WX 600 ; N yacute ; B -21 -142 695 661 ;\r\nC -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ;\r\nC -1 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ;\r\nC -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ;\r\nC -1 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ;\r\nC -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ;\r\nC -1 ; WX 600 ; N Uacute ; B 101 -18 716 784 ;\r\nC -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ;\r\nC -1 ; WX 600 ; N Edieresis ; B 25 0 670 761 ;\r\nC -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ;\r\nC -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ;\r\nC -1 ; WX 600 ; N copyright ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ;\r\nC -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ;\r\nC -1 ; WX 600 ; N aring ; B 61 -15 593 678 ;\r\nC -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ;\r\nC -1 ; WX 600 ; N lacute ; B 77 0 639 801 ;\r\nC -1 ; WX 600 ; N agrave ; B 61 -15 593 661 ;\r\nC -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ;\r\nC -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ;\r\nC -1 ; WX 600 ; N atilde ; B 61 -15 643 636 ;\r\nC -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ;\r\nC -1 ; WX 600 ; N scaron ; B 66 -17 633 667 ;\r\nC -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ;\r\nC -1 ; WX 600 ; N iacute ; B 77 0 609 661 ;\r\nC -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ;\r\nC -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ;\r\nC -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ;\r\nC -1 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ;\r\nC -1 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ;\r\nC -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ;\r\nC -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ;\r\nC -1 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ;\r\nC -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ;\r\nC -1 ; WX 600 ; N Thorn ; B 48 0 620 562 ;\r\nC -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ;\r\nC -1 ; WX 600 ; N Racute ; B 24 0 665 784 ;\r\nC -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ;\r\nC -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ;\r\nC -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ;\r\nC -1 ; WX 600 ; N uring ; B 70 -15 592 678 ;\r\nC -1 ; WX 600 ; N threesuperior ; B 193 222 526 616 ;\r\nC -1 ; WX 600 ; N Ograve ; B 74 -18 645 784 ;\r\nC -1 ; WX 600 ; N Agrave ; B -9 0 632 784 ;\r\nC -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ;\r\nC -1 ; WX 600 ; N multiply ; B 104 39 606 478 ;\r\nC -1 ; WX 600 ; N uacute ; B 70 -15 599 661 ;\r\nC -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ;\r\nC -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ;\r\nC -1 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ;\r\nC -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ;\r\nC -1 ; WX 600 ; N icircumflex ; B 77 0 577 657 ;\r\nC -1 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ;\r\nC -1 ; WX 600 ; N adieresis ; B 61 -15 595 638 ;\r\nC -1 ; WX 600 ; N edieresis ; B 81 -15 605 638 ;\r\nC -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ;\r\nC -1 ; WX 600 ; N nacute ; B 18 0 639 661 ;\r\nC -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ;\r\nC -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ;\r\nC -1 ; WX 600 ; N Iacute ; B 77 0 643 784 ;\r\nC -1 ; WX 600 ; N plusminus ; B 76 24 614 515 ;\r\nC -1 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ;\r\nC -1 ; WX 600 ; N registered ; B 53 -18 667 580 ;\r\nC -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ;\r\nC -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 672 706 ;\r\nC -1 ; WX 600 ; N Egrave ; B 25 0 670 784 ;\r\nC -1 ; WX 600 ; N racute ; B 47 0 655 661 ;\r\nC -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ;\r\nC -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ;\r\nC -1 ; WX 600 ; N Zcaron ; B 62 0 659 790 ;\r\nC -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ;\r\nC -1 ; WX 600 ; N Eth ; B 30 0 664 562 ;\r\nC -1 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ;\r\nC -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ;\r\nC -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ;\r\nC -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ;\r\nC -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ;\r\nC -1 ; WX 600 ; N Aacute ; B -9 0 655 784 ;\r\nC -1 ; WX 600 ; N Adieresis ; B -9 0 632 761 ;\r\nC -1 ; WX 600 ; N egrave ; B 81 -15 605 661 ;\r\nC -1 ; WX 600 ; N zacute ; B 81 0 614 661 ;\r\nC -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ;\r\nC -1 ; WX 600 ; N Oacute ; B 74 -18 645 784 ;\r\nC -1 ; WX 600 ; N oacute ; B 71 -15 649 661 ;\r\nC -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ;\r\nC -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ;\r\nC -1 ; WX 600 ; N idieresis ; B 77 0 561 618 ;\r\nC -1 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ;\r\nC -1 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ;\r\nC -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;\r\nC -1 ; WX 600 ; N thorn ; B -32 -142 622 626 ;\r\nC -1 ; WX 600 ; N twosuperior ; B 191 230 542 616 ;\r\nC -1 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ;\r\nC -1 ; WX 600 ; N mu ; B 49 -142 592 439 ;\r\nC -1 ; WX 600 ; N igrave ; B 77 0 546 661 ;\r\nC -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ;\r\nC -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ;\r\nC -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ;\r\nC -1 ; WX 600 ; N threequarters ; B 8 -60 699 661 ;\r\nC -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ;\r\nC -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ;\r\nC -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ;\r\nC -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ;\r\nC -1 ; WX 600 ; N trademark ; B 86 230 869 562 ;\r\nC -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ;\r\nC -1 ; WX 600 ; N Igrave ; B 77 0 643 784 ;\r\nC -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ;\r\nC -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ;\r\nC -1 ; WX 600 ; N onehalf ; B 22 -60 716 661 ;\r\nC -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ;\r\nC -1 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ;\r\nC -1 ; WX 600 ; N ntilde ; B 18 0 643 636 ;\r\nC -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ;\r\nC -1 ; WX 600 ; N Eacute ; B 25 0 670 784 ;\r\nC -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ;\r\nC -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ;\r\nC -1 ; WX 600 ; N onequarter ; B 13 -60 707 661 ;\r\nC -1 ; WX 600 ; N Scaron ; B 54 -22 689 790 ;\r\nC -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ;\r\nC -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ;\r\nC -1 ; WX 600 ; N degree ; B 173 243 570 616 ;\r\nC -1 ; WX 600 ; N ograve ; B 71 -15 622 661 ;\r\nC -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ;\r\nC -1 ; WX 600 ; N ugrave ; B 70 -15 592 661 ;\r\nC -1 ; WX 600 ; N radical ; B 67 -104 635 778 ;\r\nC -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ;\r\nC -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ;\r\nC -1 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ;\r\nC -1 ; WX 600 ; N otilde ; B 71 -15 643 636 ;\r\nC -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ;\r\nC -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ;\r\nC -1 ; WX 600 ; N Atilde ; B -9 0 669 759 ;\r\nC -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ;\r\nC -1 ; WX 600 ; N Aring ; B -9 0 632 801 ;\r\nC -1 ; WX 600 ; N Otilde ; B 74 -18 669 759 ;\r\nC -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ;\r\nC -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ;\r\nC -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ;\r\nC -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ;\r\nC -1 ; WX 600 ; N minus ; B 114 203 596 313 ;\r\nC -1 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ;\r\nC -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ;\r\nC -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ;\r\nC -1 ; WX 600 ; N logicalnot ; B 135 103 617 413 ;\r\nC -1 ; WX 600 ; N odieresis ; B 71 -15 622 638 ;\r\nC -1 ; WX 600 ; N udieresis ; B 70 -15 595 638 ;\r\nC -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ;\r\nC -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ;\r\nC -1 ; WX 600 ; N eth ; B 93 -27 661 626 ;\r\nC -1 ; WX 600 ; N zcaron ; B 81 0 643 667 ;\r\nC -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ;\r\nC -1 ; WX 600 ; N onesuperior ; B 212 230 514 616 ;\r\nC -1 ; WX 600 ; N imacron ; B 77 0 575 585 ;\r\nC -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - }, - Helvetica() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:38:23 1997\r\nComment UniqueID 43054\r\nComment VMusage 37069 48094\r\nFontName Helvetica\r\nFullName Helvetica\r\nFamilyName Helvetica\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -166 -225 1000 931 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 523\r\nAscender 718\r\nDescender -207\r\nStdHW 76\r\nStdVW 88\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 278 ; N exclam ; B 90 0 187 718 ;\r\nC 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ;\r\nC 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ;\r\nC 37 ; WX 889 ; N percent ; B 39 -19 850 703 ;\r\nC 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ;\r\nC 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ;\r\nC 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ;\r\nC 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ;\r\nC 43 ; WX 584 ; N plus ; B 39 0 545 505 ;\r\nC 44 ; WX 278 ; N comma ; B 87 -147 191 106 ;\r\nC 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ;\r\nC 46 ; WX 278 ; N period ; B 87 0 191 106 ;\r\nC 47 ; WX 278 ; N slash ; B -17 -19 295 737 ;\r\nC 48 ; WX 556 ; N zero ; B 37 -19 519 703 ;\r\nC 49 ; WX 556 ; N one ; B 101 0 359 703 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 507 703 ;\r\nC 51 ; WX 556 ; N three ; B 34 -19 522 703 ;\r\nC 52 ; WX 556 ; N four ; B 25 0 523 703 ;\r\nC 53 ; WX 556 ; N five ; B 32 -19 514 688 ;\r\nC 54 ; WX 556 ; N six ; B 38 -19 518 703 ;\r\nC 55 ; WX 556 ; N seven ; B 37 0 523 688 ;\r\nC 56 ; WX 556 ; N eight ; B 38 -19 517 703 ;\r\nC 57 ; WX 556 ; N nine ; B 42 -19 514 703 ;\r\nC 58 ; WX 278 ; N colon ; B 87 0 191 516 ;\r\nC 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ;\r\nC 60 ; WX 584 ; N less ; B 48 11 536 495 ;\r\nC 61 ; WX 584 ; N equal ; B 39 115 545 390 ;\r\nC 62 ; WX 584 ; N greater ; B 48 11 536 495 ;\r\nC 63 ; WX 556 ; N question ; B 56 0 492 727 ;\r\nC 64 ; WX 1015 ; N at ; B 147 -19 868 737 ;\r\nC 65 ; WX 667 ; N A ; B 14 0 654 718 ;\r\nC 66 ; WX 667 ; N B ; B 74 0 627 718 ;\r\nC 67 ; WX 722 ; N C ; B 44 -19 681 737 ;\r\nC 68 ; WX 722 ; N D ; B 81 0 674 718 ;\r\nC 69 ; WX 667 ; N E ; B 86 0 616 718 ;\r\nC 70 ; WX 611 ; N F ; B 86 0 583 718 ;\r\nC 71 ; WX 778 ; N G ; B 48 -19 704 737 ;\r\nC 72 ; WX 722 ; N H ; B 77 0 646 718 ;\r\nC 73 ; WX 278 ; N I ; B 91 0 188 718 ;\r\nC 74 ; WX 500 ; N J ; B 17 -19 428 718 ;\r\nC 75 ; WX 667 ; N K ; B 76 0 663 718 ;\r\nC 76 ; WX 556 ; N L ; B 76 0 537 718 ;\r\nC 77 ; WX 833 ; N M ; B 73 0 761 718 ;\r\nC 78 ; WX 722 ; N N ; B 76 0 646 718 ;\r\nC 79 ; WX 778 ; N O ; B 39 -19 739 737 ;\r\nC 80 ; WX 667 ; N P ; B 86 0 622 718 ;\r\nC 81 ; WX 778 ; N Q ; B 39 -56 739 737 ;\r\nC 82 ; WX 722 ; N R ; B 88 0 684 718 ;\r\nC 83 ; WX 667 ; N S ; B 49 -19 620 737 ;\r\nC 84 ; WX 611 ; N T ; B 14 0 597 718 ;\r\nC 85 ; WX 722 ; N U ; B 79 -19 644 718 ;\r\nC 86 ; WX 667 ; N V ; B 20 0 647 718 ;\r\nC 87 ; WX 944 ; N W ; B 16 0 928 718 ;\r\nC 88 ; WX 667 ; N X ; B 19 0 648 718 ;\r\nC 89 ; WX 667 ; N Y ; B 14 0 653 718 ;\r\nC 90 ; WX 611 ; N Z ; B 23 0 588 718 ;\r\nC 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ;\r\nC 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ;\r\nC 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ;\r\nC 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ;\r\nC 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;\r\nC 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ;\r\nC 97 ; WX 556 ; N a ; B 36 -15 530 538 ;\r\nC 98 ; WX 556 ; N b ; B 58 -15 517 718 ;\r\nC 99 ; WX 500 ; N c ; B 30 -15 477 538 ;\r\nC 100 ; WX 556 ; N d ; B 35 -15 499 718 ;\r\nC 101 ; WX 556 ; N e ; B 40 -15 516 538 ;\r\nC 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ;\r\nC 103 ; WX 556 ; N g ; B 40 -220 499 538 ;\r\nC 104 ; WX 556 ; N h ; B 65 0 491 718 ;\r\nC 105 ; WX 222 ; N i ; B 67 0 155 718 ;\r\nC 106 ; WX 222 ; N j ; B -16 -210 155 718 ;\r\nC 107 ; WX 500 ; N k ; B 67 0 501 718 ;\r\nC 108 ; WX 222 ; N l ; B 67 0 155 718 ;\r\nC 109 ; WX 833 ; N m ; B 65 0 769 538 ;\r\nC 110 ; WX 556 ; N n ; B 65 0 491 538 ;\r\nC 111 ; WX 556 ; N o ; B 35 -14 521 538 ;\r\nC 112 ; WX 556 ; N p ; B 58 -207 517 538 ;\r\nC 113 ; WX 556 ; N q ; B 35 -207 494 538 ;\r\nC 114 ; WX 333 ; N r ; B 77 0 332 538 ;\r\nC 115 ; WX 500 ; N s ; B 32 -15 464 538 ;\r\nC 116 ; WX 278 ; N t ; B 14 -7 257 669 ;\r\nC 117 ; WX 556 ; N u ; B 68 -15 489 523 ;\r\nC 118 ; WX 500 ; N v ; B 8 0 492 523 ;\r\nC 119 ; WX 722 ; N w ; B 14 0 709 523 ;\r\nC 120 ; WX 500 ; N x ; B 11 0 490 523 ;\r\nC 121 ; WX 500 ; N y ; B 11 -214 489 523 ;\r\nC 122 ; WX 500 ; N z ; B 31 0 469 523 ;\r\nC 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ;\r\nC 124 ; WX 260 ; N bar ; B 94 -225 167 775 ;\r\nC 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ;\r\nC 162 ; WX 556 ; N cent ; B 51 -115 513 623 ;\r\nC 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ;\r\nC 165 ; WX 556 ; N yen ; B 3 0 553 688 ;\r\nC 166 ; WX 556 ; N florin ; B -11 -207 501 737 ;\r\nC 167 ; WX 556 ; N section ; B 43 -191 512 737 ;\r\nC 168 ; WX 556 ; N currency ; B 28 99 528 603 ;\r\nC 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ;\r\nC 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ;\r\nC 174 ; WX 500 ; N fi ; B 14 0 434 728 ;\r\nC 175 ; WX 500 ; N fl ; B 14 0 432 728 ;\r\nC 177 ; WX 556 ; N endash ; B 0 240 556 313 ;\r\nC 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ;\r\nC 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ;\r\nC 183 ; WX 350 ; N bullet ; B 18 202 333 517 ;\r\nC 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ;\r\nC 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ;\r\nC 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ;\r\nC 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ;\r\nC 193 ; WX 333 ; N grave ; B 14 593 211 734 ;\r\nC 194 ; WX 333 ; N acute ; B 122 593 319 734 ;\r\nC 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ;\r\nC 196 ; WX 333 ; N tilde ; B -4 606 337 722 ;\r\nC 197 ; WX 333 ; N macron ; B 10 627 323 684 ;\r\nC 198 ; WX 333 ; N breve ; B 13 595 321 731 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ;\r\nC 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ;\r\nC 202 ; WX 333 ; N ring ; B 75 572 259 756 ;\r\nC 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ;\r\nC 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ;\r\nC 207 ; WX 333 ; N caron ; B 21 593 312 734 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ;\r\nC 225 ; WX 1000 ; N AE ; B 8 0 951 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ;\r\nC 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ;\r\nC 241 ; WX 889 ; N ae ; B 36 -15 847 538 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ;\r\nC 248 ; WX 222 ; N lslash ; B -20 0 242 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ;\r\nC 250 ; WX 944 ; N oe ; B 35 -15 902 538 ;\r\nC 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ;\r\nC -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ;\r\nC -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ;\r\nC -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ;\r\nC -1 ; WX 584 ; N divide ; B 39 -19 545 524 ;\r\nC -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;\r\nC -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ;\r\nC -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ;\r\nC -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ;\r\nC -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ;\r\nC -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ;\r\nC -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ;\r\nC -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ;\r\nC -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ;\r\nC -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ;\r\nC -1 ; WX 556 ; N aring ; B 36 -15 530 756 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ;\r\nC -1 ; WX 222 ; N lacute ; B 67 0 264 929 ;\r\nC -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ;\r\nC -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ;\r\nC -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ;\r\nC -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ;\r\nC -1 ; WX 278 ; N iacute ; B 95 0 292 734 ;\r\nC -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ;\r\nC -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ;\r\nC -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ;\r\nC -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ;\r\nC -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ;\r\nC -1 ; WX 722 ; N Racute ; B 88 0 684 929 ;\r\nC -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ;\r\nC -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ;\r\nC -1 ; WX 556 ; N uring ; B 68 -15 489 756 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ;\r\nC -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ;\r\nC -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ;\r\nC -1 ; WX 584 ; N multiply ; B 39 0 545 506 ;\r\nC -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ;\r\nC -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ;\r\nC -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ;\r\nC -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ;\r\nC -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ;\r\nC -1 ; WX 556 ; N nacute ; B 65 0 491 734 ;\r\nC -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ;\r\nC -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ;\r\nC -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ;\r\nC -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ;\r\nC -1 ; WX 737 ; N registered ; B -14 -19 752 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ;\r\nC -1 ; WX 333 ; N racute ; B 77 0 332 734 ;\r\nC -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ;\r\nC -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ;\r\nC -1 ; WX 722 ; N Eth ; B 0 0 674 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ;\r\nC -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ;\r\nC -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ;\r\nC -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ;\r\nC -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;\r\nC -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ;\r\nC -1 ; WX 500 ; N zacute ; B 31 0 469 734 ;\r\nC -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ;\r\nC -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ;\r\nC -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ;\r\nC -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ;\r\nC -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ;\r\nC -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ;\r\nC -1 ; WX 556 ; N mu ; B 68 -207 489 523 ;\r\nC -1 ; WX 278 ; N igrave ; B -13 0 184 734 ;\r\nC -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ;\r\nC -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ;\r\nC -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ;\r\nC -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ;\r\nC -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ;\r\nC -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ;\r\nC -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ;\r\nC -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ;\r\nC -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ;\r\nC -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ;\r\nC -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ;\r\nC -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ;\r\nC -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ;\r\nC -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ;\r\nC -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ;\r\nC -1 ; WX 400 ; N degree ; B 54 411 346 703 ;\r\nC -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ;\r\nC -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ;\r\nC -1 ; WX 453 ; N radical ; B -4 -80 458 762 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ;\r\nC -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ;\r\nC -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ;\r\nC -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;\r\nC -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;\r\nC -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ;\r\nC -1 ; WX 584 ; N minus ; B 39 216 545 289 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ;\r\nC -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ;\r\nC -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ;\r\nC -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ;\r\nC -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ;\r\nC -1 ; WX 556 ; N eth ; B 35 -15 522 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ;\r\nC -1 ; WX 278 ; N imacron ; B 5 0 272 684 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2705\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -30\r\nKPX A Gbreve -30\r\nKPX A Gcommaaccent -30\r\nKPX A O -30\r\nKPX A Oacute -30\r\nKPX A Ocircumflex -30\r\nKPX A Odieresis -30\r\nKPX A Ograve -30\r\nKPX A Ohungarumlaut -30\r\nKPX A Omacron -30\r\nKPX A Oslash -30\r\nKPX A Otilde -30\r\nKPX A Q -30\r\nKPX A T -120\r\nKPX A Tcaron -120\r\nKPX A Tcommaaccent -120\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -70\r\nKPX A W -50\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -40\r\nKPX A y -40\r\nKPX A yacute -40\r\nKPX A ydieresis -40\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -30\r\nKPX Aacute Gbreve -30\r\nKPX Aacute Gcommaaccent -30\r\nKPX Aacute O -30\r\nKPX Aacute Oacute -30\r\nKPX Aacute Ocircumflex -30\r\nKPX Aacute Odieresis -30\r\nKPX Aacute Ograve -30\r\nKPX Aacute Ohungarumlaut -30\r\nKPX Aacute Omacron -30\r\nKPX Aacute Oslash -30\r\nKPX Aacute Otilde -30\r\nKPX Aacute Q -30\r\nKPX Aacute T -120\r\nKPX Aacute Tcaron -120\r\nKPX Aacute Tcommaaccent -120\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -70\r\nKPX Aacute W -50\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -40\r\nKPX Aacute y -40\r\nKPX Aacute yacute -40\r\nKPX Aacute ydieresis -40\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -30\r\nKPX Abreve Gbreve -30\r\nKPX Abreve Gcommaaccent -30\r\nKPX Abreve O -30\r\nKPX Abreve Oacute -30\r\nKPX Abreve Ocircumflex -30\r\nKPX Abreve Odieresis -30\r\nKPX Abreve Ograve -30\r\nKPX Abreve Ohungarumlaut -30\r\nKPX Abreve Omacron -30\r\nKPX Abreve Oslash -30\r\nKPX Abreve Otilde -30\r\nKPX Abreve Q -30\r\nKPX Abreve T -120\r\nKPX Abreve Tcaron -120\r\nKPX Abreve Tcommaaccent -120\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -70\r\nKPX Abreve W -50\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -40\r\nKPX Abreve y -40\r\nKPX Abreve yacute -40\r\nKPX Abreve ydieresis -40\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -30\r\nKPX Acircumflex Gbreve -30\r\nKPX Acircumflex Gcommaaccent -30\r\nKPX Acircumflex O -30\r\nKPX Acircumflex Oacute -30\r\nKPX Acircumflex Ocircumflex -30\r\nKPX Acircumflex Odieresis -30\r\nKPX Acircumflex Ograve -30\r\nKPX Acircumflex Ohungarumlaut -30\r\nKPX Acircumflex Omacron -30\r\nKPX Acircumflex Oslash -30\r\nKPX Acircumflex Otilde -30\r\nKPX Acircumflex Q -30\r\nKPX Acircumflex T -120\r\nKPX Acircumflex Tcaron -120\r\nKPX Acircumflex Tcommaaccent -120\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -70\r\nKPX Acircumflex W -50\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -40\r\nKPX Acircumflex y -40\r\nKPX Acircumflex yacute -40\r\nKPX Acircumflex ydieresis -40\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -30\r\nKPX Adieresis Gbreve -30\r\nKPX Adieresis Gcommaaccent -30\r\nKPX Adieresis O -30\r\nKPX Adieresis Oacute -30\r\nKPX Adieresis Ocircumflex -30\r\nKPX Adieresis Odieresis -30\r\nKPX Adieresis Ograve -30\r\nKPX Adieresis Ohungarumlaut -30\r\nKPX Adieresis Omacron -30\r\nKPX Adieresis Oslash -30\r\nKPX Adieresis Otilde -30\r\nKPX Adieresis Q -30\r\nKPX Adieresis T -120\r\nKPX Adieresis Tcaron -120\r\nKPX Adieresis Tcommaaccent -120\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -70\r\nKPX Adieresis W -50\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -40\r\nKPX Adieresis y -40\r\nKPX Adieresis yacute -40\r\nKPX Adieresis ydieresis -40\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -30\r\nKPX Agrave Gbreve -30\r\nKPX Agrave Gcommaaccent -30\r\nKPX Agrave O -30\r\nKPX Agrave Oacute -30\r\nKPX Agrave Ocircumflex -30\r\nKPX Agrave Odieresis -30\r\nKPX Agrave Ograve -30\r\nKPX Agrave Ohungarumlaut -30\r\nKPX Agrave Omacron -30\r\nKPX Agrave Oslash -30\r\nKPX Agrave Otilde -30\r\nKPX Agrave Q -30\r\nKPX Agrave T -120\r\nKPX Agrave Tcaron -120\r\nKPX Agrave Tcommaaccent -120\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -70\r\nKPX Agrave W -50\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -40\r\nKPX Agrave y -40\r\nKPX Agrave yacute -40\r\nKPX Agrave ydieresis -40\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -30\r\nKPX Amacron Gbreve -30\r\nKPX Amacron Gcommaaccent -30\r\nKPX Amacron O -30\r\nKPX Amacron Oacute -30\r\nKPX Amacron Ocircumflex -30\r\nKPX Amacron Odieresis -30\r\nKPX Amacron Ograve -30\r\nKPX Amacron Ohungarumlaut -30\r\nKPX Amacron Omacron -30\r\nKPX Amacron Oslash -30\r\nKPX Amacron Otilde -30\r\nKPX Amacron Q -30\r\nKPX Amacron T -120\r\nKPX Amacron Tcaron -120\r\nKPX Amacron Tcommaaccent -120\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -70\r\nKPX Amacron W -50\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -40\r\nKPX Amacron y -40\r\nKPX Amacron yacute -40\r\nKPX Amacron ydieresis -40\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -30\r\nKPX Aogonek Gbreve -30\r\nKPX Aogonek Gcommaaccent -30\r\nKPX Aogonek O -30\r\nKPX Aogonek Oacute -30\r\nKPX Aogonek Ocircumflex -30\r\nKPX Aogonek Odieresis -30\r\nKPX Aogonek Ograve -30\r\nKPX Aogonek Ohungarumlaut -30\r\nKPX Aogonek Omacron -30\r\nKPX Aogonek Oslash -30\r\nKPX Aogonek Otilde -30\r\nKPX Aogonek Q -30\r\nKPX Aogonek T -120\r\nKPX Aogonek Tcaron -120\r\nKPX Aogonek Tcommaaccent -120\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -70\r\nKPX Aogonek W -50\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -40\r\nKPX Aogonek y -40\r\nKPX Aogonek yacute -40\r\nKPX Aogonek ydieresis -40\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -30\r\nKPX Aring Gbreve -30\r\nKPX Aring Gcommaaccent -30\r\nKPX Aring O -30\r\nKPX Aring Oacute -30\r\nKPX Aring Ocircumflex -30\r\nKPX Aring Odieresis -30\r\nKPX Aring Ograve -30\r\nKPX Aring Ohungarumlaut -30\r\nKPX Aring Omacron -30\r\nKPX Aring Oslash -30\r\nKPX Aring Otilde -30\r\nKPX Aring Q -30\r\nKPX Aring T -120\r\nKPX Aring Tcaron -120\r\nKPX Aring Tcommaaccent -120\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -70\r\nKPX Aring W -50\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -40\r\nKPX Aring y -40\r\nKPX Aring yacute -40\r\nKPX Aring ydieresis -40\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -30\r\nKPX Atilde Gbreve -30\r\nKPX Atilde Gcommaaccent -30\r\nKPX Atilde O -30\r\nKPX Atilde Oacute -30\r\nKPX Atilde Ocircumflex -30\r\nKPX Atilde Odieresis -30\r\nKPX Atilde Ograve -30\r\nKPX Atilde Ohungarumlaut -30\r\nKPX Atilde Omacron -30\r\nKPX Atilde Oslash -30\r\nKPX Atilde Otilde -30\r\nKPX Atilde Q -30\r\nKPX Atilde T -120\r\nKPX Atilde Tcaron -120\r\nKPX Atilde Tcommaaccent -120\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -70\r\nKPX Atilde W -50\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -40\r\nKPX Atilde y -40\r\nKPX Atilde yacute -40\r\nKPX Atilde ydieresis -40\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX B comma -20\r\nKPX B period -20\r\nKPX C comma -30\r\nKPX C period -30\r\nKPX Cacute comma -30\r\nKPX Cacute period -30\r\nKPX Ccaron comma -30\r\nKPX Ccaron period -30\r\nKPX Ccedilla comma -30\r\nKPX Ccedilla period -30\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -70\r\nKPX D W -40\r\nKPX D Y -90\r\nKPX D Yacute -90\r\nKPX D Ydieresis -90\r\nKPX D comma -70\r\nKPX D period -70\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -70\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -90\r\nKPX Dcaron Yacute -90\r\nKPX Dcaron Ydieresis -90\r\nKPX Dcaron comma -70\r\nKPX Dcaron period -70\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -70\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -90\r\nKPX Dcroat Yacute -90\r\nKPX Dcroat Ydieresis -90\r\nKPX Dcroat comma -70\r\nKPX Dcroat period -70\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -50\r\nKPX F aacute -50\r\nKPX F abreve -50\r\nKPX F acircumflex -50\r\nKPX F adieresis -50\r\nKPX F agrave -50\r\nKPX F amacron -50\r\nKPX F aogonek -50\r\nKPX F aring -50\r\nKPX F atilde -50\r\nKPX F comma -150\r\nKPX F e -30\r\nKPX F eacute -30\r\nKPX F ecaron -30\r\nKPX F ecircumflex -30\r\nKPX F edieresis -30\r\nKPX F edotaccent -30\r\nKPX F egrave -30\r\nKPX F emacron -30\r\nKPX F eogonek -30\r\nKPX F o -30\r\nKPX F oacute -30\r\nKPX F ocircumflex -30\r\nKPX F odieresis -30\r\nKPX F ograve -30\r\nKPX F ohungarumlaut -30\r\nKPX F omacron -30\r\nKPX F oslash -30\r\nKPX F otilde -30\r\nKPX F period -150\r\nKPX F r -45\r\nKPX F racute -45\r\nKPX F rcaron -45\r\nKPX F rcommaaccent -45\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J a -20\r\nKPX J aacute -20\r\nKPX J abreve -20\r\nKPX J acircumflex -20\r\nKPX J adieresis -20\r\nKPX J agrave -20\r\nKPX J amacron -20\r\nKPX J aogonek -20\r\nKPX J aring -20\r\nKPX J atilde -20\r\nKPX J comma -30\r\nKPX J period -30\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -40\r\nKPX K eacute -40\r\nKPX K ecaron -40\r\nKPX K ecircumflex -40\r\nKPX K edieresis -40\r\nKPX K edotaccent -40\r\nKPX K egrave -40\r\nKPX K emacron -40\r\nKPX K eogonek -40\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -50\r\nKPX K yacute -50\r\nKPX K ydieresis -50\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -40\r\nKPX Kcommaaccent eacute -40\r\nKPX Kcommaaccent ecaron -40\r\nKPX Kcommaaccent ecircumflex -40\r\nKPX Kcommaaccent edieresis -40\r\nKPX Kcommaaccent edotaccent -40\r\nKPX Kcommaaccent egrave -40\r\nKPX Kcommaaccent emacron -40\r\nKPX Kcommaaccent eogonek -40\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -50\r\nKPX Kcommaaccent yacute -50\r\nKPX Kcommaaccent ydieresis -50\r\nKPX L T -110\r\nKPX L Tcaron -110\r\nKPX L Tcommaaccent -110\r\nKPX L V -110\r\nKPX L W -70\r\nKPX L Y -140\r\nKPX L Yacute -140\r\nKPX L Ydieresis -140\r\nKPX L quotedblright -140\r\nKPX L quoteright -160\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -110\r\nKPX Lacute Tcaron -110\r\nKPX Lacute Tcommaaccent -110\r\nKPX Lacute V -110\r\nKPX Lacute W -70\r\nKPX Lacute Y -140\r\nKPX Lacute Yacute -140\r\nKPX Lacute Ydieresis -140\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -160\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcaron T -110\r\nKPX Lcaron Tcaron -110\r\nKPX Lcaron Tcommaaccent -110\r\nKPX Lcaron V -110\r\nKPX Lcaron W -70\r\nKPX Lcaron Y -140\r\nKPX Lcaron Yacute -140\r\nKPX Lcaron Ydieresis -140\r\nKPX Lcaron quotedblright -140\r\nKPX Lcaron quoteright -160\r\nKPX Lcaron y -30\r\nKPX Lcaron yacute -30\r\nKPX Lcaron ydieresis -30\r\nKPX Lcommaaccent T -110\r\nKPX Lcommaaccent Tcaron -110\r\nKPX Lcommaaccent Tcommaaccent -110\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -70\r\nKPX Lcommaaccent Y -140\r\nKPX Lcommaaccent Yacute -140\r\nKPX Lcommaaccent Ydieresis -140\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -160\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -110\r\nKPX Lslash Tcaron -110\r\nKPX Lslash Tcommaaccent -110\r\nKPX Lslash V -110\r\nKPX Lslash W -70\r\nKPX Lslash Y -140\r\nKPX Lslash Yacute -140\r\nKPX Lslash Ydieresis -140\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -160\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -20\r\nKPX O Aacute -20\r\nKPX O Abreve -20\r\nKPX O Acircumflex -20\r\nKPX O Adieresis -20\r\nKPX O Agrave -20\r\nKPX O Amacron -20\r\nKPX O Aogonek -20\r\nKPX O Aring -20\r\nKPX O Atilde -20\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -30\r\nKPX O X -60\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -20\r\nKPX Oacute Aacute -20\r\nKPX Oacute Abreve -20\r\nKPX Oacute Acircumflex -20\r\nKPX Oacute Adieresis -20\r\nKPX Oacute Agrave -20\r\nKPX Oacute Amacron -20\r\nKPX Oacute Aogonek -20\r\nKPX Oacute Aring -20\r\nKPX Oacute Atilde -20\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -30\r\nKPX Oacute X -60\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -20\r\nKPX Ocircumflex Aacute -20\r\nKPX Ocircumflex Abreve -20\r\nKPX Ocircumflex Acircumflex -20\r\nKPX Ocircumflex Adieresis -20\r\nKPX Ocircumflex Agrave -20\r\nKPX Ocircumflex Amacron -20\r\nKPX Ocircumflex Aogonek -20\r\nKPX Ocircumflex Aring -20\r\nKPX Ocircumflex Atilde -20\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -30\r\nKPX Ocircumflex X -60\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -20\r\nKPX Odieresis Aacute -20\r\nKPX Odieresis Abreve -20\r\nKPX Odieresis Acircumflex -20\r\nKPX Odieresis Adieresis -20\r\nKPX Odieresis Agrave -20\r\nKPX Odieresis Amacron -20\r\nKPX Odieresis Aogonek -20\r\nKPX Odieresis Aring -20\r\nKPX Odieresis Atilde -20\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -30\r\nKPX Odieresis X -60\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -20\r\nKPX Ograve Aacute -20\r\nKPX Ograve Abreve -20\r\nKPX Ograve Acircumflex -20\r\nKPX Ograve Adieresis -20\r\nKPX Ograve Agrave -20\r\nKPX Ograve Amacron -20\r\nKPX Ograve Aogonek -20\r\nKPX Ograve Aring -20\r\nKPX Ograve Atilde -20\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -30\r\nKPX Ograve X -60\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -20\r\nKPX Ohungarumlaut Aacute -20\r\nKPX Ohungarumlaut Abreve -20\r\nKPX Ohungarumlaut Acircumflex -20\r\nKPX Ohungarumlaut Adieresis -20\r\nKPX Ohungarumlaut Agrave -20\r\nKPX Ohungarumlaut Amacron -20\r\nKPX Ohungarumlaut Aogonek -20\r\nKPX Ohungarumlaut Aring -20\r\nKPX Ohungarumlaut Atilde -20\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -30\r\nKPX Ohungarumlaut X -60\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -20\r\nKPX Omacron Aacute -20\r\nKPX Omacron Abreve -20\r\nKPX Omacron Acircumflex -20\r\nKPX Omacron Adieresis -20\r\nKPX Omacron Agrave -20\r\nKPX Omacron Amacron -20\r\nKPX Omacron Aogonek -20\r\nKPX Omacron Aring -20\r\nKPX Omacron Atilde -20\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -30\r\nKPX Omacron X -60\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -20\r\nKPX Oslash Aacute -20\r\nKPX Oslash Abreve -20\r\nKPX Oslash Acircumflex -20\r\nKPX Oslash Adieresis -20\r\nKPX Oslash Agrave -20\r\nKPX Oslash Amacron -20\r\nKPX Oslash Aogonek -20\r\nKPX Oslash Aring -20\r\nKPX Oslash Atilde -20\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -30\r\nKPX Oslash X -60\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -20\r\nKPX Otilde Aacute -20\r\nKPX Otilde Abreve -20\r\nKPX Otilde Acircumflex -20\r\nKPX Otilde Adieresis -20\r\nKPX Otilde Agrave -20\r\nKPX Otilde Amacron -20\r\nKPX Otilde Aogonek -20\r\nKPX Otilde Aring -20\r\nKPX Otilde Atilde -20\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -30\r\nKPX Otilde X -60\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -120\r\nKPX P Aacute -120\r\nKPX P Abreve -120\r\nKPX P Acircumflex -120\r\nKPX P Adieresis -120\r\nKPX P Agrave -120\r\nKPX P Amacron -120\r\nKPX P Aogonek -120\r\nKPX P Aring -120\r\nKPX P Atilde -120\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -180\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -50\r\nKPX P oacute -50\r\nKPX P ocircumflex -50\r\nKPX P odieresis -50\r\nKPX P ograve -50\r\nKPX P ohungarumlaut -50\r\nKPX P omacron -50\r\nKPX P oslash -50\r\nKPX P otilde -50\r\nKPX P period -180\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -50\r\nKPX R W -30\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -50\r\nKPX Racute W -30\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -50\r\nKPX Rcaron W -30\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -30\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX S comma -20\r\nKPX S period -20\r\nKPX Sacute comma -20\r\nKPX Sacute period -20\r\nKPX Scaron comma -20\r\nKPX Scaron period -20\r\nKPX Scedilla comma -20\r\nKPX Scedilla period -20\r\nKPX Scommaaccent comma -20\r\nKPX Scommaaccent period -20\r\nKPX T A -120\r\nKPX T Aacute -120\r\nKPX T Abreve -120\r\nKPX T Acircumflex -120\r\nKPX T Adieresis -120\r\nKPX T Agrave -120\r\nKPX T Amacron -120\r\nKPX T Aogonek -120\r\nKPX T Aring -120\r\nKPX T Atilde -120\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -120\r\nKPX T aacute -120\r\nKPX T abreve -60\r\nKPX T acircumflex -120\r\nKPX T adieresis -120\r\nKPX T agrave -120\r\nKPX T amacron -60\r\nKPX T aogonek -120\r\nKPX T aring -120\r\nKPX T atilde -60\r\nKPX T colon -20\r\nKPX T comma -120\r\nKPX T e -120\r\nKPX T eacute -120\r\nKPX T ecaron -120\r\nKPX T ecircumflex -120\r\nKPX T edieresis -120\r\nKPX T edotaccent -120\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -120\r\nKPX T hyphen -140\r\nKPX T o -120\r\nKPX T oacute -120\r\nKPX T ocircumflex -120\r\nKPX T odieresis -120\r\nKPX T ograve -120\r\nKPX T ohungarumlaut -120\r\nKPX T omacron -60\r\nKPX T oslash -120\r\nKPX T otilde -60\r\nKPX T period -120\r\nKPX T r -120\r\nKPX T racute -120\r\nKPX T rcaron -120\r\nKPX T rcommaaccent -120\r\nKPX T semicolon -20\r\nKPX T u -120\r\nKPX T uacute -120\r\nKPX T ucircumflex -120\r\nKPX T udieresis -120\r\nKPX T ugrave -120\r\nKPX T uhungarumlaut -120\r\nKPX T umacron -60\r\nKPX T uogonek -120\r\nKPX T uring -120\r\nKPX T w -120\r\nKPX T y -120\r\nKPX T yacute -120\r\nKPX T ydieresis -60\r\nKPX Tcaron A -120\r\nKPX Tcaron Aacute -120\r\nKPX Tcaron Abreve -120\r\nKPX Tcaron Acircumflex -120\r\nKPX Tcaron Adieresis -120\r\nKPX Tcaron Agrave -120\r\nKPX Tcaron Amacron -120\r\nKPX Tcaron Aogonek -120\r\nKPX Tcaron Aring -120\r\nKPX Tcaron Atilde -120\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -120\r\nKPX Tcaron aacute -120\r\nKPX Tcaron abreve -60\r\nKPX Tcaron acircumflex -120\r\nKPX Tcaron adieresis -120\r\nKPX Tcaron agrave -120\r\nKPX Tcaron amacron -60\r\nKPX Tcaron aogonek -120\r\nKPX Tcaron aring -120\r\nKPX Tcaron atilde -60\r\nKPX Tcaron colon -20\r\nKPX Tcaron comma -120\r\nKPX Tcaron e -120\r\nKPX Tcaron eacute -120\r\nKPX Tcaron ecaron -120\r\nKPX Tcaron ecircumflex -120\r\nKPX Tcaron edieresis -120\r\nKPX Tcaron edotaccent -120\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -120\r\nKPX Tcaron hyphen -140\r\nKPX Tcaron o -120\r\nKPX Tcaron oacute -120\r\nKPX Tcaron ocircumflex -120\r\nKPX Tcaron odieresis -120\r\nKPX Tcaron ograve -120\r\nKPX Tcaron ohungarumlaut -120\r\nKPX Tcaron omacron -60\r\nKPX Tcaron oslash -120\r\nKPX Tcaron otilde -60\r\nKPX Tcaron period -120\r\nKPX Tcaron r -120\r\nKPX Tcaron racute -120\r\nKPX Tcaron rcaron -120\r\nKPX Tcaron rcommaaccent -120\r\nKPX Tcaron semicolon -20\r\nKPX Tcaron u -120\r\nKPX Tcaron uacute -120\r\nKPX Tcaron ucircumflex -120\r\nKPX Tcaron udieresis -120\r\nKPX Tcaron ugrave -120\r\nKPX Tcaron uhungarumlaut -120\r\nKPX Tcaron umacron -60\r\nKPX Tcaron uogonek -120\r\nKPX Tcaron uring -120\r\nKPX Tcaron w -120\r\nKPX Tcaron y -120\r\nKPX Tcaron yacute -120\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -120\r\nKPX Tcommaaccent Aacute -120\r\nKPX Tcommaaccent Abreve -120\r\nKPX Tcommaaccent Acircumflex -120\r\nKPX Tcommaaccent Adieresis -120\r\nKPX Tcommaaccent Agrave -120\r\nKPX Tcommaaccent Amacron -120\r\nKPX Tcommaaccent Aogonek -120\r\nKPX Tcommaaccent Aring -120\r\nKPX Tcommaaccent Atilde -120\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -120\r\nKPX Tcommaaccent aacute -120\r\nKPX Tcommaaccent abreve -60\r\nKPX Tcommaaccent acircumflex -120\r\nKPX Tcommaaccent adieresis -120\r\nKPX Tcommaaccent agrave -120\r\nKPX Tcommaaccent amacron -60\r\nKPX Tcommaaccent aogonek -120\r\nKPX Tcommaaccent aring -120\r\nKPX Tcommaaccent atilde -60\r\nKPX Tcommaaccent colon -20\r\nKPX Tcommaaccent comma -120\r\nKPX Tcommaaccent e -120\r\nKPX Tcommaaccent eacute -120\r\nKPX Tcommaaccent ecaron -120\r\nKPX Tcommaaccent ecircumflex -120\r\nKPX Tcommaaccent edieresis -120\r\nKPX Tcommaaccent edotaccent -120\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -120\r\nKPX Tcommaaccent hyphen -140\r\nKPX Tcommaaccent o -120\r\nKPX Tcommaaccent oacute -120\r\nKPX Tcommaaccent ocircumflex -120\r\nKPX Tcommaaccent odieresis -120\r\nKPX Tcommaaccent ograve -120\r\nKPX Tcommaaccent ohungarumlaut -120\r\nKPX Tcommaaccent omacron -60\r\nKPX Tcommaaccent oslash -120\r\nKPX Tcommaaccent otilde -60\r\nKPX Tcommaaccent period -120\r\nKPX Tcommaaccent r -120\r\nKPX Tcommaaccent racute -120\r\nKPX Tcommaaccent rcaron -120\r\nKPX Tcommaaccent rcommaaccent -120\r\nKPX Tcommaaccent semicolon -20\r\nKPX Tcommaaccent u -120\r\nKPX Tcommaaccent uacute -120\r\nKPX Tcommaaccent ucircumflex -120\r\nKPX Tcommaaccent udieresis -120\r\nKPX Tcommaaccent ugrave -120\r\nKPX Tcommaaccent uhungarumlaut -120\r\nKPX Tcommaaccent umacron -60\r\nKPX Tcommaaccent uogonek -120\r\nKPX Tcommaaccent uring -120\r\nKPX Tcommaaccent w -120\r\nKPX Tcommaaccent y -120\r\nKPX Tcommaaccent yacute -120\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -40\r\nKPX U period -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -40\r\nKPX Uacute period -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -40\r\nKPX Ucircumflex period -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -40\r\nKPX Udieresis period -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -40\r\nKPX Ugrave period -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -40\r\nKPX Uhungarumlaut period -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -40\r\nKPX Umacron period -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -40\r\nKPX Uogonek period -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -40\r\nKPX Uring period -40\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -40\r\nKPX V Gbreve -40\r\nKPX V Gcommaaccent -40\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -70\r\nKPX V aacute -70\r\nKPX V abreve -70\r\nKPX V acircumflex -70\r\nKPX V adieresis -70\r\nKPX V agrave -70\r\nKPX V amacron -70\r\nKPX V aogonek -70\r\nKPX V aring -70\r\nKPX V atilde -70\r\nKPX V colon -40\r\nKPX V comma -125\r\nKPX V e -80\r\nKPX V eacute -80\r\nKPX V ecaron -80\r\nKPX V ecircumflex -80\r\nKPX V edieresis -80\r\nKPX V edotaccent -80\r\nKPX V egrave -80\r\nKPX V emacron -80\r\nKPX V eogonek -80\r\nKPX V hyphen -80\r\nKPX V o -80\r\nKPX V oacute -80\r\nKPX V ocircumflex -80\r\nKPX V odieresis -80\r\nKPX V ograve -80\r\nKPX V ohungarumlaut -80\r\nKPX V omacron -80\r\nKPX V oslash -80\r\nKPX V otilde -80\r\nKPX V period -125\r\nKPX V semicolon -40\r\nKPX V u -70\r\nKPX V uacute -70\r\nKPX V ucircumflex -70\r\nKPX V udieresis -70\r\nKPX V ugrave -70\r\nKPX V uhungarumlaut -70\r\nKPX V umacron -70\r\nKPX V uogonek -70\r\nKPX V uring -70\r\nKPX W A -50\r\nKPX W Aacute -50\r\nKPX W Abreve -50\r\nKPX W Acircumflex -50\r\nKPX W Adieresis -50\r\nKPX W Agrave -50\r\nKPX W Amacron -50\r\nKPX W Aogonek -50\r\nKPX W Aring -50\r\nKPX W Atilde -50\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W comma -80\r\nKPX W e -30\r\nKPX W eacute -30\r\nKPX W ecaron -30\r\nKPX W ecircumflex -30\r\nKPX W edieresis -30\r\nKPX W edotaccent -30\r\nKPX W egrave -30\r\nKPX W emacron -30\r\nKPX W eogonek -30\r\nKPX W hyphen -40\r\nKPX W o -30\r\nKPX W oacute -30\r\nKPX W ocircumflex -30\r\nKPX W odieresis -30\r\nKPX W ograve -30\r\nKPX W ohungarumlaut -30\r\nKPX W omacron -30\r\nKPX W oslash -30\r\nKPX W otilde -30\r\nKPX W period -80\r\nKPX W u -30\r\nKPX W uacute -30\r\nKPX W ucircumflex -30\r\nKPX W udieresis -30\r\nKPX W ugrave -30\r\nKPX W uhungarumlaut -30\r\nKPX W umacron -30\r\nKPX W uogonek -30\r\nKPX W uring -30\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -85\r\nKPX Y Oacute -85\r\nKPX Y Ocircumflex -85\r\nKPX Y Odieresis -85\r\nKPX Y Ograve -85\r\nKPX Y Ohungarumlaut -85\r\nKPX Y Omacron -85\r\nKPX Y Oslash -85\r\nKPX Y Otilde -85\r\nKPX Y a -140\r\nKPX Y aacute -140\r\nKPX Y abreve -70\r\nKPX Y acircumflex -140\r\nKPX Y adieresis -140\r\nKPX Y agrave -140\r\nKPX Y amacron -70\r\nKPX Y aogonek -140\r\nKPX Y aring -140\r\nKPX Y atilde -140\r\nKPX Y colon -60\r\nKPX Y comma -140\r\nKPX Y e -140\r\nKPX Y eacute -140\r\nKPX Y ecaron -140\r\nKPX Y ecircumflex -140\r\nKPX Y edieresis -140\r\nKPX Y edotaccent -140\r\nKPX Y egrave -140\r\nKPX Y emacron -70\r\nKPX Y eogonek -140\r\nKPX Y hyphen -140\r\nKPX Y i -20\r\nKPX Y iacute -20\r\nKPX Y iogonek -20\r\nKPX Y o -140\r\nKPX Y oacute -140\r\nKPX Y ocircumflex -140\r\nKPX Y odieresis -140\r\nKPX Y ograve -140\r\nKPX Y ohungarumlaut -140\r\nKPX Y omacron -140\r\nKPX Y oslash -140\r\nKPX Y otilde -140\r\nKPX Y period -140\r\nKPX Y semicolon -60\r\nKPX Y u -110\r\nKPX Y uacute -110\r\nKPX Y ucircumflex -110\r\nKPX Y udieresis -110\r\nKPX Y ugrave -110\r\nKPX Y uhungarumlaut -110\r\nKPX Y umacron -110\r\nKPX Y uogonek -110\r\nKPX Y uring -110\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -85\r\nKPX Yacute Oacute -85\r\nKPX Yacute Ocircumflex -85\r\nKPX Yacute Odieresis -85\r\nKPX Yacute Ograve -85\r\nKPX Yacute Ohungarumlaut -85\r\nKPX Yacute Omacron -85\r\nKPX Yacute Oslash -85\r\nKPX Yacute Otilde -85\r\nKPX Yacute a -140\r\nKPX Yacute aacute -140\r\nKPX Yacute abreve -70\r\nKPX Yacute acircumflex -140\r\nKPX Yacute adieresis -140\r\nKPX Yacute agrave -140\r\nKPX Yacute amacron -70\r\nKPX Yacute aogonek -140\r\nKPX Yacute aring -140\r\nKPX Yacute atilde -70\r\nKPX Yacute colon -60\r\nKPX Yacute comma -140\r\nKPX Yacute e -140\r\nKPX Yacute eacute -140\r\nKPX Yacute ecaron -140\r\nKPX Yacute ecircumflex -140\r\nKPX Yacute edieresis -140\r\nKPX Yacute edotaccent -140\r\nKPX Yacute egrave -140\r\nKPX Yacute emacron -70\r\nKPX Yacute eogonek -140\r\nKPX Yacute hyphen -140\r\nKPX Yacute i -20\r\nKPX Yacute iacute -20\r\nKPX Yacute iogonek -20\r\nKPX Yacute o -140\r\nKPX Yacute oacute -140\r\nKPX Yacute ocircumflex -140\r\nKPX Yacute odieresis -140\r\nKPX Yacute ograve -140\r\nKPX Yacute ohungarumlaut -140\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -140\r\nKPX Yacute otilde -140\r\nKPX Yacute period -140\r\nKPX Yacute semicolon -60\r\nKPX Yacute u -110\r\nKPX Yacute uacute -110\r\nKPX Yacute ucircumflex -110\r\nKPX Yacute udieresis -110\r\nKPX Yacute ugrave -110\r\nKPX Yacute uhungarumlaut -110\r\nKPX Yacute umacron -110\r\nKPX Yacute uogonek -110\r\nKPX Yacute uring -110\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -85\r\nKPX Ydieresis Oacute -85\r\nKPX Ydieresis Ocircumflex -85\r\nKPX Ydieresis Odieresis -85\r\nKPX Ydieresis Ograve -85\r\nKPX Ydieresis Ohungarumlaut -85\r\nKPX Ydieresis Omacron -85\r\nKPX Ydieresis Oslash -85\r\nKPX Ydieresis Otilde -85\r\nKPX Ydieresis a -140\r\nKPX Ydieresis aacute -140\r\nKPX Ydieresis abreve -70\r\nKPX Ydieresis acircumflex -140\r\nKPX Ydieresis adieresis -140\r\nKPX Ydieresis agrave -140\r\nKPX Ydieresis amacron -70\r\nKPX Ydieresis aogonek -140\r\nKPX Ydieresis aring -140\r\nKPX Ydieresis atilde -70\r\nKPX Ydieresis colon -60\r\nKPX Ydieresis comma -140\r\nKPX Ydieresis e -140\r\nKPX Ydieresis eacute -140\r\nKPX Ydieresis ecaron -140\r\nKPX Ydieresis ecircumflex -140\r\nKPX Ydieresis edieresis -140\r\nKPX Ydieresis edotaccent -140\r\nKPX Ydieresis egrave -140\r\nKPX Ydieresis emacron -70\r\nKPX Ydieresis eogonek -140\r\nKPX Ydieresis hyphen -140\r\nKPX Ydieresis i -20\r\nKPX Ydieresis iacute -20\r\nKPX Ydieresis iogonek -20\r\nKPX Ydieresis o -140\r\nKPX Ydieresis oacute -140\r\nKPX Ydieresis ocircumflex -140\r\nKPX Ydieresis odieresis -140\r\nKPX Ydieresis ograve -140\r\nKPX Ydieresis ohungarumlaut -140\r\nKPX Ydieresis omacron -140\r\nKPX Ydieresis oslash -140\r\nKPX Ydieresis otilde -140\r\nKPX Ydieresis period -140\r\nKPX Ydieresis semicolon -60\r\nKPX Ydieresis u -110\r\nKPX Ydieresis uacute -110\r\nKPX Ydieresis ucircumflex -110\r\nKPX Ydieresis udieresis -110\r\nKPX Ydieresis ugrave -110\r\nKPX Ydieresis uhungarumlaut -110\r\nKPX Ydieresis umacron -110\r\nKPX Ydieresis uogonek -110\r\nKPX Ydieresis uring -110\r\nKPX a v -20\r\nKPX a w -20\r\nKPX a y -30\r\nKPX a yacute -30\r\nKPX a ydieresis -30\r\nKPX aacute v -20\r\nKPX aacute w -20\r\nKPX aacute y -30\r\nKPX aacute yacute -30\r\nKPX aacute ydieresis -30\r\nKPX abreve v -20\r\nKPX abreve w -20\r\nKPX abreve y -30\r\nKPX abreve yacute -30\r\nKPX abreve ydieresis -30\r\nKPX acircumflex v -20\r\nKPX acircumflex w -20\r\nKPX acircumflex y -30\r\nKPX acircumflex yacute -30\r\nKPX acircumflex ydieresis -30\r\nKPX adieresis v -20\r\nKPX adieresis w -20\r\nKPX adieresis y -30\r\nKPX adieresis yacute -30\r\nKPX adieresis ydieresis -30\r\nKPX agrave v -20\r\nKPX agrave w -20\r\nKPX agrave y -30\r\nKPX agrave yacute -30\r\nKPX agrave ydieresis -30\r\nKPX amacron v -20\r\nKPX amacron w -20\r\nKPX amacron y -30\r\nKPX amacron yacute -30\r\nKPX amacron ydieresis -30\r\nKPX aogonek v -20\r\nKPX aogonek w -20\r\nKPX aogonek y -30\r\nKPX aogonek yacute -30\r\nKPX aogonek ydieresis -30\r\nKPX aring v -20\r\nKPX aring w -20\r\nKPX aring y -30\r\nKPX aring yacute -30\r\nKPX aring ydieresis -30\r\nKPX atilde v -20\r\nKPX atilde w -20\r\nKPX atilde y -30\r\nKPX atilde yacute -30\r\nKPX atilde ydieresis -30\r\nKPX b b -10\r\nKPX b comma -40\r\nKPX b l -20\r\nKPX b lacute -20\r\nKPX b lcommaaccent -20\r\nKPX b lslash -20\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c comma -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute comma -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron comma -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla comma -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX colon space -50\r\nKPX comma quotedblright -100\r\nKPX comma quoteright -100\r\nKPX e comma -15\r\nKPX e period -15\r\nKPX e v -30\r\nKPX e w -20\r\nKPX e x -30\r\nKPX e y -20\r\nKPX e yacute -20\r\nKPX e ydieresis -20\r\nKPX eacute comma -15\r\nKPX eacute period -15\r\nKPX eacute v -30\r\nKPX eacute w -20\r\nKPX eacute x -30\r\nKPX eacute y -20\r\nKPX eacute yacute -20\r\nKPX eacute ydieresis -20\r\nKPX ecaron comma -15\r\nKPX ecaron period -15\r\nKPX ecaron v -30\r\nKPX ecaron w -20\r\nKPX ecaron x -30\r\nKPX ecaron y -20\r\nKPX ecaron yacute -20\r\nKPX ecaron ydieresis -20\r\nKPX ecircumflex comma -15\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -30\r\nKPX ecircumflex w -20\r\nKPX ecircumflex x -30\r\nKPX ecircumflex y -20\r\nKPX ecircumflex yacute -20\r\nKPX ecircumflex ydieresis -20\r\nKPX edieresis comma -15\r\nKPX edieresis period -15\r\nKPX edieresis v -30\r\nKPX edieresis w -20\r\nKPX edieresis x -30\r\nKPX edieresis y -20\r\nKPX edieresis yacute -20\r\nKPX edieresis ydieresis -20\r\nKPX edotaccent comma -15\r\nKPX edotaccent period -15\r\nKPX edotaccent v -30\r\nKPX edotaccent w -20\r\nKPX edotaccent x -30\r\nKPX edotaccent y -20\r\nKPX edotaccent yacute -20\r\nKPX edotaccent ydieresis -20\r\nKPX egrave comma -15\r\nKPX egrave period -15\r\nKPX egrave v -30\r\nKPX egrave w -20\r\nKPX egrave x -30\r\nKPX egrave y -20\r\nKPX egrave yacute -20\r\nKPX egrave ydieresis -20\r\nKPX emacron comma -15\r\nKPX emacron period -15\r\nKPX emacron v -30\r\nKPX emacron w -20\r\nKPX emacron x -30\r\nKPX emacron y -20\r\nKPX emacron yacute -20\r\nKPX emacron ydieresis -20\r\nKPX eogonek comma -15\r\nKPX eogonek period -15\r\nKPX eogonek v -30\r\nKPX eogonek w -20\r\nKPX eogonek x -30\r\nKPX eogonek y -20\r\nKPX eogonek yacute -20\r\nKPX eogonek ydieresis -20\r\nKPX f a -30\r\nKPX f aacute -30\r\nKPX f abreve -30\r\nKPX f acircumflex -30\r\nKPX f adieresis -30\r\nKPX f agrave -30\r\nKPX f amacron -30\r\nKPX f aogonek -30\r\nKPX f aring -30\r\nKPX f atilde -30\r\nKPX f comma -30\r\nKPX f dotlessi -28\r\nKPX f e -30\r\nKPX f eacute -30\r\nKPX f ecaron -30\r\nKPX f ecircumflex -30\r\nKPX f edieresis -30\r\nKPX f edotaccent -30\r\nKPX f egrave -30\r\nKPX f emacron -30\r\nKPX f eogonek -30\r\nKPX f o -30\r\nKPX f oacute -30\r\nKPX f ocircumflex -30\r\nKPX f odieresis -30\r\nKPX f ograve -30\r\nKPX f ohungarumlaut -30\r\nKPX f omacron -30\r\nKPX f oslash -30\r\nKPX f otilde -30\r\nKPX f period -30\r\nKPX f quotedblright 60\r\nKPX f quoteright 50\r\nKPX g r -10\r\nKPX g racute -10\r\nKPX g rcaron -10\r\nKPX g rcommaaccent -10\r\nKPX gbreve r -10\r\nKPX gbreve racute -10\r\nKPX gbreve rcaron -10\r\nKPX gbreve rcommaaccent -10\r\nKPX gcommaaccent r -10\r\nKPX gcommaaccent racute -10\r\nKPX gcommaaccent rcaron -10\r\nKPX gcommaaccent rcommaaccent -10\r\nKPX h y -30\r\nKPX h yacute -30\r\nKPX h ydieresis -30\r\nKPX k e -20\r\nKPX k eacute -20\r\nKPX k ecaron -20\r\nKPX k ecircumflex -20\r\nKPX k edieresis -20\r\nKPX k edotaccent -20\r\nKPX k egrave -20\r\nKPX k emacron -20\r\nKPX k eogonek -20\r\nKPX k o -20\r\nKPX k oacute -20\r\nKPX k ocircumflex -20\r\nKPX k odieresis -20\r\nKPX k ograve -20\r\nKPX k ohungarumlaut -20\r\nKPX k omacron -20\r\nKPX k oslash -20\r\nKPX k otilde -20\r\nKPX kcommaaccent e -20\r\nKPX kcommaaccent eacute -20\r\nKPX kcommaaccent ecaron -20\r\nKPX kcommaaccent ecircumflex -20\r\nKPX kcommaaccent edieresis -20\r\nKPX kcommaaccent edotaccent -20\r\nKPX kcommaaccent egrave -20\r\nKPX kcommaaccent emacron -20\r\nKPX kcommaaccent eogonek -20\r\nKPX kcommaaccent o -20\r\nKPX kcommaaccent oacute -20\r\nKPX kcommaaccent ocircumflex -20\r\nKPX kcommaaccent odieresis -20\r\nKPX kcommaaccent ograve -20\r\nKPX kcommaaccent ohungarumlaut -20\r\nKPX kcommaaccent omacron -20\r\nKPX kcommaaccent oslash -20\r\nKPX kcommaaccent otilde -20\r\nKPX m u -10\r\nKPX m uacute -10\r\nKPX m ucircumflex -10\r\nKPX m udieresis -10\r\nKPX m ugrave -10\r\nKPX m uhungarumlaut -10\r\nKPX m umacron -10\r\nKPX m uogonek -10\r\nKPX m uring -10\r\nKPX m y -15\r\nKPX m yacute -15\r\nKPX m ydieresis -15\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -20\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -20\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -20\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -20\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -20\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o comma -40\r\nKPX o period -40\r\nKPX o v -15\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -30\r\nKPX o yacute -30\r\nKPX o ydieresis -30\r\nKPX oacute comma -40\r\nKPX oacute period -40\r\nKPX oacute v -15\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -30\r\nKPX oacute yacute -30\r\nKPX oacute ydieresis -30\r\nKPX ocircumflex comma -40\r\nKPX ocircumflex period -40\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -30\r\nKPX ocircumflex yacute -30\r\nKPX ocircumflex ydieresis -30\r\nKPX odieresis comma -40\r\nKPX odieresis period -40\r\nKPX odieresis v -15\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -30\r\nKPX odieresis yacute -30\r\nKPX odieresis ydieresis -30\r\nKPX ograve comma -40\r\nKPX ograve period -40\r\nKPX ograve v -15\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -30\r\nKPX ograve yacute -30\r\nKPX ograve ydieresis -30\r\nKPX ohungarumlaut comma -40\r\nKPX ohungarumlaut period -40\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -30\r\nKPX ohungarumlaut yacute -30\r\nKPX ohungarumlaut ydieresis -30\r\nKPX omacron comma -40\r\nKPX omacron period -40\r\nKPX omacron v -15\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -30\r\nKPX omacron yacute -30\r\nKPX omacron ydieresis -30\r\nKPX oslash a -55\r\nKPX oslash aacute -55\r\nKPX oslash abreve -55\r\nKPX oslash acircumflex -55\r\nKPX oslash adieresis -55\r\nKPX oslash agrave -55\r\nKPX oslash amacron -55\r\nKPX oslash aogonek -55\r\nKPX oslash aring -55\r\nKPX oslash atilde -55\r\nKPX oslash b -55\r\nKPX oslash c -55\r\nKPX oslash cacute -55\r\nKPX oslash ccaron -55\r\nKPX oslash ccedilla -55\r\nKPX oslash comma -95\r\nKPX oslash d -55\r\nKPX oslash dcroat -55\r\nKPX oslash e -55\r\nKPX oslash eacute -55\r\nKPX oslash ecaron -55\r\nKPX oslash ecircumflex -55\r\nKPX oslash edieresis -55\r\nKPX oslash edotaccent -55\r\nKPX oslash egrave -55\r\nKPX oslash emacron -55\r\nKPX oslash eogonek -55\r\nKPX oslash f -55\r\nKPX oslash g -55\r\nKPX oslash gbreve -55\r\nKPX oslash gcommaaccent -55\r\nKPX oslash h -55\r\nKPX oslash i -55\r\nKPX oslash iacute -55\r\nKPX oslash icircumflex -55\r\nKPX oslash idieresis -55\r\nKPX oslash igrave -55\r\nKPX oslash imacron -55\r\nKPX oslash iogonek -55\r\nKPX oslash j -55\r\nKPX oslash k -55\r\nKPX oslash kcommaaccent -55\r\nKPX oslash l -55\r\nKPX oslash lacute -55\r\nKPX oslash lcommaaccent -55\r\nKPX oslash lslash -55\r\nKPX oslash m -55\r\nKPX oslash n -55\r\nKPX oslash nacute -55\r\nKPX oslash ncaron -55\r\nKPX oslash ncommaaccent -55\r\nKPX oslash ntilde -55\r\nKPX oslash o -55\r\nKPX oslash oacute -55\r\nKPX oslash ocircumflex -55\r\nKPX oslash odieresis -55\r\nKPX oslash ograve -55\r\nKPX oslash ohungarumlaut -55\r\nKPX oslash omacron -55\r\nKPX oslash oslash -55\r\nKPX oslash otilde -55\r\nKPX oslash p -55\r\nKPX oslash period -95\r\nKPX oslash q -55\r\nKPX oslash r -55\r\nKPX oslash racute -55\r\nKPX oslash rcaron -55\r\nKPX oslash rcommaaccent -55\r\nKPX oslash s -55\r\nKPX oslash sacute -55\r\nKPX oslash scaron -55\r\nKPX oslash scedilla -55\r\nKPX oslash scommaaccent -55\r\nKPX oslash t -55\r\nKPX oslash tcommaaccent -55\r\nKPX oslash u -55\r\nKPX oslash uacute -55\r\nKPX oslash ucircumflex -55\r\nKPX oslash udieresis -55\r\nKPX oslash ugrave -55\r\nKPX oslash uhungarumlaut -55\r\nKPX oslash umacron -55\r\nKPX oslash uogonek -55\r\nKPX oslash uring -55\r\nKPX oslash v -70\r\nKPX oslash w -70\r\nKPX oslash x -85\r\nKPX oslash y -70\r\nKPX oslash yacute -70\r\nKPX oslash ydieresis -70\r\nKPX oslash z -55\r\nKPX oslash zacute -55\r\nKPX oslash zcaron -55\r\nKPX oslash zdotaccent -55\r\nKPX otilde comma -40\r\nKPX otilde period -40\r\nKPX otilde v -15\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -30\r\nKPX otilde yacute -30\r\nKPX otilde ydieresis -30\r\nKPX p comma -35\r\nKPX p period -35\r\nKPX p y -30\r\nKPX p yacute -30\r\nKPX p ydieresis -30\r\nKPX period quotedblright -100\r\nKPX period quoteright -100\r\nKPX period space -60\r\nKPX quotedblright space -40\r\nKPX quoteleft quoteleft -57\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright quoteright -57\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -50\r\nKPX quoteright sacute -50\r\nKPX quoteright scaron -50\r\nKPX quoteright scedilla -50\r\nKPX quoteright scommaaccent -50\r\nKPX quoteright space -70\r\nKPX r a -10\r\nKPX r aacute -10\r\nKPX r abreve -10\r\nKPX r acircumflex -10\r\nKPX r adieresis -10\r\nKPX r agrave -10\r\nKPX r amacron -10\r\nKPX r aogonek -10\r\nKPX r aring -10\r\nKPX r atilde -10\r\nKPX r colon 30\r\nKPX r comma -50\r\nKPX r i 15\r\nKPX r iacute 15\r\nKPX r icircumflex 15\r\nKPX r idieresis 15\r\nKPX r igrave 15\r\nKPX r imacron 15\r\nKPX r iogonek 15\r\nKPX r k 15\r\nKPX r kcommaaccent 15\r\nKPX r l 15\r\nKPX r lacute 15\r\nKPX r lcommaaccent 15\r\nKPX r lslash 15\r\nKPX r m 25\r\nKPX r n 25\r\nKPX r nacute 25\r\nKPX r ncaron 25\r\nKPX r ncommaaccent 25\r\nKPX r ntilde 25\r\nKPX r p 30\r\nKPX r period -50\r\nKPX r semicolon 30\r\nKPX r t 40\r\nKPX r tcommaaccent 40\r\nKPX r u 15\r\nKPX r uacute 15\r\nKPX r ucircumflex 15\r\nKPX r udieresis 15\r\nKPX r ugrave 15\r\nKPX r uhungarumlaut 15\r\nKPX r umacron 15\r\nKPX r uogonek 15\r\nKPX r uring 15\r\nKPX r v 30\r\nKPX r y 30\r\nKPX r yacute 30\r\nKPX r ydieresis 30\r\nKPX racute a -10\r\nKPX racute aacute -10\r\nKPX racute abreve -10\r\nKPX racute acircumflex -10\r\nKPX racute adieresis -10\r\nKPX racute agrave -10\r\nKPX racute amacron -10\r\nKPX racute aogonek -10\r\nKPX racute aring -10\r\nKPX racute atilde -10\r\nKPX racute colon 30\r\nKPX racute comma -50\r\nKPX racute i 15\r\nKPX racute iacute 15\r\nKPX racute icircumflex 15\r\nKPX racute idieresis 15\r\nKPX racute igrave 15\r\nKPX racute imacron 15\r\nKPX racute iogonek 15\r\nKPX racute k 15\r\nKPX racute kcommaaccent 15\r\nKPX racute l 15\r\nKPX racute lacute 15\r\nKPX racute lcommaaccent 15\r\nKPX racute lslash 15\r\nKPX racute m 25\r\nKPX racute n 25\r\nKPX racute nacute 25\r\nKPX racute ncaron 25\r\nKPX racute ncommaaccent 25\r\nKPX racute ntilde 25\r\nKPX racute p 30\r\nKPX racute period -50\r\nKPX racute semicolon 30\r\nKPX racute t 40\r\nKPX racute tcommaaccent 40\r\nKPX racute u 15\r\nKPX racute uacute 15\r\nKPX racute ucircumflex 15\r\nKPX racute udieresis 15\r\nKPX racute ugrave 15\r\nKPX racute uhungarumlaut 15\r\nKPX racute umacron 15\r\nKPX racute uogonek 15\r\nKPX racute uring 15\r\nKPX racute v 30\r\nKPX racute y 30\r\nKPX racute yacute 30\r\nKPX racute ydieresis 30\r\nKPX rcaron a -10\r\nKPX rcaron aacute -10\r\nKPX rcaron abreve -10\r\nKPX rcaron acircumflex -10\r\nKPX rcaron adieresis -10\r\nKPX rcaron agrave -10\r\nKPX rcaron amacron -10\r\nKPX rcaron aogonek -10\r\nKPX rcaron aring -10\r\nKPX rcaron atilde -10\r\nKPX rcaron colon 30\r\nKPX rcaron comma -50\r\nKPX rcaron i 15\r\nKPX rcaron iacute 15\r\nKPX rcaron icircumflex 15\r\nKPX rcaron idieresis 15\r\nKPX rcaron igrave 15\r\nKPX rcaron imacron 15\r\nKPX rcaron iogonek 15\r\nKPX rcaron k 15\r\nKPX rcaron kcommaaccent 15\r\nKPX rcaron l 15\r\nKPX rcaron lacute 15\r\nKPX rcaron lcommaaccent 15\r\nKPX rcaron lslash 15\r\nKPX rcaron m 25\r\nKPX rcaron n 25\r\nKPX rcaron nacute 25\r\nKPX rcaron ncaron 25\r\nKPX rcaron ncommaaccent 25\r\nKPX rcaron ntilde 25\r\nKPX rcaron p 30\r\nKPX rcaron period -50\r\nKPX rcaron semicolon 30\r\nKPX rcaron t 40\r\nKPX rcaron tcommaaccent 40\r\nKPX rcaron u 15\r\nKPX rcaron uacute 15\r\nKPX rcaron ucircumflex 15\r\nKPX rcaron udieresis 15\r\nKPX rcaron ugrave 15\r\nKPX rcaron uhungarumlaut 15\r\nKPX rcaron umacron 15\r\nKPX rcaron uogonek 15\r\nKPX rcaron uring 15\r\nKPX rcaron v 30\r\nKPX rcaron y 30\r\nKPX rcaron yacute 30\r\nKPX rcaron ydieresis 30\r\nKPX rcommaaccent a -10\r\nKPX rcommaaccent aacute -10\r\nKPX rcommaaccent abreve -10\r\nKPX rcommaaccent acircumflex -10\r\nKPX rcommaaccent adieresis -10\r\nKPX rcommaaccent agrave -10\r\nKPX rcommaaccent amacron -10\r\nKPX rcommaaccent aogonek -10\r\nKPX rcommaaccent aring -10\r\nKPX rcommaaccent atilde -10\r\nKPX rcommaaccent colon 30\r\nKPX rcommaaccent comma -50\r\nKPX rcommaaccent i 15\r\nKPX rcommaaccent iacute 15\r\nKPX rcommaaccent icircumflex 15\r\nKPX rcommaaccent idieresis 15\r\nKPX rcommaaccent igrave 15\r\nKPX rcommaaccent imacron 15\r\nKPX rcommaaccent iogonek 15\r\nKPX rcommaaccent k 15\r\nKPX rcommaaccent kcommaaccent 15\r\nKPX rcommaaccent l 15\r\nKPX rcommaaccent lacute 15\r\nKPX rcommaaccent lcommaaccent 15\r\nKPX rcommaaccent lslash 15\r\nKPX rcommaaccent m 25\r\nKPX rcommaaccent n 25\r\nKPX rcommaaccent nacute 25\r\nKPX rcommaaccent ncaron 25\r\nKPX rcommaaccent ncommaaccent 25\r\nKPX rcommaaccent ntilde 25\r\nKPX rcommaaccent p 30\r\nKPX rcommaaccent period -50\r\nKPX rcommaaccent semicolon 30\r\nKPX rcommaaccent t 40\r\nKPX rcommaaccent tcommaaccent 40\r\nKPX rcommaaccent u 15\r\nKPX rcommaaccent uacute 15\r\nKPX rcommaaccent ucircumflex 15\r\nKPX rcommaaccent udieresis 15\r\nKPX rcommaaccent ugrave 15\r\nKPX rcommaaccent uhungarumlaut 15\r\nKPX rcommaaccent umacron 15\r\nKPX rcommaaccent uogonek 15\r\nKPX rcommaaccent uring 15\r\nKPX rcommaaccent v 30\r\nKPX rcommaaccent y 30\r\nKPX rcommaaccent yacute 30\r\nKPX rcommaaccent ydieresis 30\r\nKPX s comma -15\r\nKPX s period -15\r\nKPX s w -30\r\nKPX sacute comma -15\r\nKPX sacute period -15\r\nKPX sacute w -30\r\nKPX scaron comma -15\r\nKPX scaron period -15\r\nKPX scaron w -30\r\nKPX scedilla comma -15\r\nKPX scedilla period -15\r\nKPX scedilla w -30\r\nKPX scommaaccent comma -15\r\nKPX scommaaccent period -15\r\nKPX scommaaccent w -30\r\nKPX semicolon space -50\r\nKPX space T -50\r\nKPX space Tcaron -50\r\nKPX space Tcommaaccent -50\r\nKPX space V -50\r\nKPX space W -40\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX space quotedblleft -30\r\nKPX space quoteleft -60\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -80\r\nKPX v e -25\r\nKPX v eacute -25\r\nKPX v ecaron -25\r\nKPX v ecircumflex -25\r\nKPX v edieresis -25\r\nKPX v edotaccent -25\r\nKPX v egrave -25\r\nKPX v emacron -25\r\nKPX v eogonek -25\r\nKPX v o -25\r\nKPX v oacute -25\r\nKPX v ocircumflex -25\r\nKPX v odieresis -25\r\nKPX v ograve -25\r\nKPX v ohungarumlaut -25\r\nKPX v omacron -25\r\nKPX v oslash -25\r\nKPX v otilde -25\r\nKPX v period -80\r\nKPX w a -15\r\nKPX w aacute -15\r\nKPX w abreve -15\r\nKPX w acircumflex -15\r\nKPX w adieresis -15\r\nKPX w agrave -15\r\nKPX w amacron -15\r\nKPX w aogonek -15\r\nKPX w aring -15\r\nKPX w atilde -15\r\nKPX w comma -60\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -60\r\nKPX x e -30\r\nKPX x eacute -30\r\nKPX x ecaron -30\r\nKPX x ecircumflex -30\r\nKPX x edieresis -30\r\nKPX x edotaccent -30\r\nKPX x egrave -30\r\nKPX x emacron -30\r\nKPX x eogonek -30\r\nKPX y a -20\r\nKPX y aacute -20\r\nKPX y abreve -20\r\nKPX y acircumflex -20\r\nKPX y adieresis -20\r\nKPX y agrave -20\r\nKPX y amacron -20\r\nKPX y aogonek -20\r\nKPX y aring -20\r\nKPX y atilde -20\r\nKPX y comma -100\r\nKPX y e -20\r\nKPX y eacute -20\r\nKPX y ecaron -20\r\nKPX y ecircumflex -20\r\nKPX y edieresis -20\r\nKPX y edotaccent -20\r\nKPX y egrave -20\r\nKPX y emacron -20\r\nKPX y eogonek -20\r\nKPX y o -20\r\nKPX y oacute -20\r\nKPX y ocircumflex -20\r\nKPX y odieresis -20\r\nKPX y ograve -20\r\nKPX y ohungarumlaut -20\r\nKPX y omacron -20\r\nKPX y oslash -20\r\nKPX y otilde -20\r\nKPX y period -100\r\nKPX yacute a -20\r\nKPX yacute aacute -20\r\nKPX yacute abreve -20\r\nKPX yacute acircumflex -20\r\nKPX yacute adieresis -20\r\nKPX yacute agrave -20\r\nKPX yacute amacron -20\r\nKPX yacute aogonek -20\r\nKPX yacute aring -20\r\nKPX yacute atilde -20\r\nKPX yacute comma -100\r\nKPX yacute e -20\r\nKPX yacute eacute -20\r\nKPX yacute ecaron -20\r\nKPX yacute ecircumflex -20\r\nKPX yacute edieresis -20\r\nKPX yacute edotaccent -20\r\nKPX yacute egrave -20\r\nKPX yacute emacron -20\r\nKPX yacute eogonek -20\r\nKPX yacute o -20\r\nKPX yacute oacute -20\r\nKPX yacute ocircumflex -20\r\nKPX yacute odieresis -20\r\nKPX yacute ograve -20\r\nKPX yacute ohungarumlaut -20\r\nKPX yacute omacron -20\r\nKPX yacute oslash -20\r\nKPX yacute otilde -20\r\nKPX yacute period -100\r\nKPX ydieresis a -20\r\nKPX ydieresis aacute -20\r\nKPX ydieresis abreve -20\r\nKPX ydieresis acircumflex -20\r\nKPX ydieresis adieresis -20\r\nKPX ydieresis agrave -20\r\nKPX ydieresis amacron -20\r\nKPX ydieresis aogonek -20\r\nKPX ydieresis aring -20\r\nKPX ydieresis atilde -20\r\nKPX ydieresis comma -100\r\nKPX ydieresis e -20\r\nKPX ydieresis eacute -20\r\nKPX ydieresis ecaron -20\r\nKPX ydieresis ecircumflex -20\r\nKPX ydieresis edieresis -20\r\nKPX ydieresis edotaccent -20\r\nKPX ydieresis egrave -20\r\nKPX ydieresis emacron -20\r\nKPX ydieresis eogonek -20\r\nKPX ydieresis o -20\r\nKPX ydieresis oacute -20\r\nKPX ydieresis ocircumflex -20\r\nKPX ydieresis odieresis -20\r\nKPX ydieresis ograve -20\r\nKPX ydieresis ohungarumlaut -20\r\nKPX ydieresis omacron -20\r\nKPX ydieresis oslash -20\r\nKPX ydieresis otilde -20\r\nKPX ydieresis period -100\r\nKPX z e -15\r\nKPX z eacute -15\r\nKPX z ecaron -15\r\nKPX z ecircumflex -15\r\nKPX z edieresis -15\r\nKPX z edotaccent -15\r\nKPX z egrave -15\r\nKPX z emacron -15\r\nKPX z eogonek -15\r\nKPX z o -15\r\nKPX z oacute -15\r\nKPX z ocircumflex -15\r\nKPX z odieresis -15\r\nKPX z ograve -15\r\nKPX z ohungarumlaut -15\r\nKPX z omacron -15\r\nKPX z oslash -15\r\nKPX z otilde -15\r\nKPX zacute e -15\r\nKPX zacute eacute -15\r\nKPX zacute ecaron -15\r\nKPX zacute ecircumflex -15\r\nKPX zacute edieresis -15\r\nKPX zacute edotaccent -15\r\nKPX zacute egrave -15\r\nKPX zacute emacron -15\r\nKPX zacute eogonek -15\r\nKPX zacute o -15\r\nKPX zacute oacute -15\r\nKPX zacute ocircumflex -15\r\nKPX zacute odieresis -15\r\nKPX zacute ograve -15\r\nKPX zacute ohungarumlaut -15\r\nKPX zacute omacron -15\r\nKPX zacute oslash -15\r\nKPX zacute otilde -15\r\nKPX zcaron e -15\r\nKPX zcaron eacute -15\r\nKPX zcaron ecaron -15\r\nKPX zcaron ecircumflex -15\r\nKPX zcaron edieresis -15\r\nKPX zcaron edotaccent -15\r\nKPX zcaron egrave -15\r\nKPX zcaron emacron -15\r\nKPX zcaron eogonek -15\r\nKPX zcaron o -15\r\nKPX zcaron oacute -15\r\nKPX zcaron ocircumflex -15\r\nKPX zcaron odieresis -15\r\nKPX zcaron ograve -15\r\nKPX zcaron ohungarumlaut -15\r\nKPX zcaron omacron -15\r\nKPX zcaron oslash -15\r\nKPX zcaron otilde -15\r\nKPX zdotaccent e -15\r\nKPX zdotaccent eacute -15\r\nKPX zdotaccent ecaron -15\r\nKPX zdotaccent ecircumflex -15\r\nKPX zdotaccent edieresis -15\r\nKPX zdotaccent edotaccent -15\r\nKPX zdotaccent egrave -15\r\nKPX zdotaccent emacron -15\r\nKPX zdotaccent eogonek -15\r\nKPX zdotaccent o -15\r\nKPX zdotaccent oacute -15\r\nKPX zdotaccent ocircumflex -15\r\nKPX zdotaccent odieresis -15\r\nKPX zdotaccent ograve -15\r\nKPX zdotaccent ohungarumlaut -15\r\nKPX zdotaccent omacron -15\r\nKPX zdotaccent oslash -15\r\nKPX zdotaccent otilde -15\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Helvetica-Bold'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:43:52 1997\r\nComment UniqueID 43052\r\nComment VMusage 37169 48194\r\nFontName Helvetica-Bold\r\nFullName Helvetica Bold\r\nFamilyName Helvetica\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -170 -228 1003 962 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 532\r\nAscender 718\r\nDescender -207\r\nStdHW 118\r\nStdVW 140\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 90 0 244 718 ;\r\nC 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ;\r\nC 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ;\r\nC 37 ; WX 889 ; N percent ; B 28 -19 861 710 ;\r\nC 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ;\r\nC 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ;\r\nC 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ;\r\nC 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ;\r\nC 43 ; WX 584 ; N plus ; B 40 0 544 506 ;\r\nC 44 ; WX 278 ; N comma ; B 64 -168 214 146 ;\r\nC 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ;\r\nC 46 ; WX 278 ; N period ; B 64 0 214 146 ;\r\nC 47 ; WX 278 ; N slash ; B -33 -19 311 737 ;\r\nC 48 ; WX 556 ; N zero ; B 32 -19 524 710 ;\r\nC 49 ; WX 556 ; N one ; B 69 0 378 710 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 511 710 ;\r\nC 51 ; WX 556 ; N three ; B 27 -19 516 710 ;\r\nC 52 ; WX 556 ; N four ; B 27 0 526 710 ;\r\nC 53 ; WX 556 ; N five ; B 27 -19 516 698 ;\r\nC 54 ; WX 556 ; N six ; B 31 -19 520 710 ;\r\nC 55 ; WX 556 ; N seven ; B 25 0 528 698 ;\r\nC 56 ; WX 556 ; N eight ; B 32 -19 524 710 ;\r\nC 57 ; WX 556 ; N nine ; B 30 -19 522 710 ;\r\nC 58 ; WX 333 ; N colon ; B 92 0 242 512 ;\r\nC 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ;\r\nC 60 ; WX 584 ; N less ; B 38 -8 546 514 ;\r\nC 61 ; WX 584 ; N equal ; B 40 87 544 419 ;\r\nC 62 ; WX 584 ; N greater ; B 38 -8 546 514 ;\r\nC 63 ; WX 611 ; N question ; B 60 0 556 727 ;\r\nC 64 ; WX 975 ; N at ; B 118 -19 856 737 ;\r\nC 65 ; WX 722 ; N A ; B 20 0 702 718 ;\r\nC 66 ; WX 722 ; N B ; B 76 0 669 718 ;\r\nC 67 ; WX 722 ; N C ; B 44 -19 684 737 ;\r\nC 68 ; WX 722 ; N D ; B 76 0 685 718 ;\r\nC 69 ; WX 667 ; N E ; B 76 0 621 718 ;\r\nC 70 ; WX 611 ; N F ; B 76 0 587 718 ;\r\nC 71 ; WX 778 ; N G ; B 44 -19 713 737 ;\r\nC 72 ; WX 722 ; N H ; B 71 0 651 718 ;\r\nC 73 ; WX 278 ; N I ; B 64 0 214 718 ;\r\nC 74 ; WX 556 ; N J ; B 22 -18 484 718 ;\r\nC 75 ; WX 722 ; N K ; B 87 0 722 718 ;\r\nC 76 ; WX 611 ; N L ; B 76 0 583 718 ;\r\nC 77 ; WX 833 ; N M ; B 69 0 765 718 ;\r\nC 78 ; WX 722 ; N N ; B 69 0 654 718 ;\r\nC 79 ; WX 778 ; N O ; B 44 -19 734 737 ;\r\nC 80 ; WX 667 ; N P ; B 76 0 627 718 ;\r\nC 81 ; WX 778 ; N Q ; B 44 -52 737 737 ;\r\nC 82 ; WX 722 ; N R ; B 76 0 677 718 ;\r\nC 83 ; WX 667 ; N S ; B 39 -19 629 737 ;\r\nC 84 ; WX 611 ; N T ; B 14 0 598 718 ;\r\nC 85 ; WX 722 ; N U ; B 72 -19 651 718 ;\r\nC 86 ; WX 667 ; N V ; B 19 0 648 718 ;\r\nC 87 ; WX 944 ; N W ; B 16 0 929 718 ;\r\nC 88 ; WX 667 ; N X ; B 14 0 653 718 ;\r\nC 89 ; WX 667 ; N Y ; B 15 0 653 718 ;\r\nC 90 ; WX 611 ; N Z ; B 25 0 586 718 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ;\r\nC 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ;\r\nC 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ;\r\nC 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ;\r\nC 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;\r\nC 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ;\r\nC 97 ; WX 556 ; N a ; B 29 -14 527 546 ;\r\nC 98 ; WX 611 ; N b ; B 61 -14 578 718 ;\r\nC 99 ; WX 556 ; N c ; B 34 -14 524 546 ;\r\nC 100 ; WX 611 ; N d ; B 34 -14 551 718 ;\r\nC 101 ; WX 556 ; N e ; B 23 -14 528 546 ;\r\nC 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ;\r\nC 103 ; WX 611 ; N g ; B 40 -217 553 546 ;\r\nC 104 ; WX 611 ; N h ; B 65 0 546 718 ;\r\nC 105 ; WX 278 ; N i ; B 69 0 209 725 ;\r\nC 106 ; WX 278 ; N j ; B 3 -214 209 725 ;\r\nC 107 ; WX 556 ; N k ; B 69 0 562 718 ;\r\nC 108 ; WX 278 ; N l ; B 69 0 209 718 ;\r\nC 109 ; WX 889 ; N m ; B 64 0 826 546 ;\r\nC 110 ; WX 611 ; N n ; B 65 0 546 546 ;\r\nC 111 ; WX 611 ; N o ; B 34 -14 578 546 ;\r\nC 112 ; WX 611 ; N p ; B 62 -207 578 546 ;\r\nC 113 ; WX 611 ; N q ; B 34 -207 552 546 ;\r\nC 114 ; WX 389 ; N r ; B 64 0 373 546 ;\r\nC 115 ; WX 556 ; N s ; B 30 -14 519 546 ;\r\nC 116 ; WX 333 ; N t ; B 10 -6 309 676 ;\r\nC 117 ; WX 611 ; N u ; B 66 -14 545 532 ;\r\nC 118 ; WX 556 ; N v ; B 13 0 543 532 ;\r\nC 119 ; WX 778 ; N w ; B 10 0 769 532 ;\r\nC 120 ; WX 556 ; N x ; B 15 0 541 532 ;\r\nC 121 ; WX 556 ; N y ; B 10 -214 539 532 ;\r\nC 122 ; WX 500 ; N z ; B 20 0 480 532 ;\r\nC 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ;\r\nC 124 ; WX 280 ; N bar ; B 84 -225 196 775 ;\r\nC 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ;\r\nC 162 ; WX 556 ; N cent ; B 34 -118 524 628 ;\r\nC 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ;\r\nC 165 ; WX 556 ; N yen ; B -9 0 565 698 ;\r\nC 166 ; WX 556 ; N florin ; B -10 -210 516 737 ;\r\nC 167 ; WX 556 ; N section ; B 34 -184 522 727 ;\r\nC 168 ; WX 556 ; N currency ; B -3 76 559 636 ;\r\nC 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ;\r\nC 174 ; WX 611 ; N fi ; B 10 0 542 727 ;\r\nC 175 ; WX 611 ; N fl ; B 10 0 542 727 ;\r\nC 177 ; WX 556 ; N endash ; B 0 227 556 333 ;\r\nC 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ;\r\nC 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ;\r\nC 183 ; WX 350 ; N bullet ; B 10 194 340 524 ;\r\nC 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;\r\nC 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ;\r\nC 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ;\r\nC 193 ; WX 333 ; N grave ; B -23 604 225 750 ;\r\nC 194 ; WX 333 ; N acute ; B 108 604 356 750 ;\r\nC 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ;\r\nC 196 ; WX 333 ; N tilde ; B -17 610 350 737 ;\r\nC 197 ; WX 333 ; N macron ; B -6 604 339 678 ;\r\nC 198 ; WX 333 ; N breve ; B -2 604 335 750 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ;\r\nC 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ;\r\nC 202 ; WX 333 ; N ring ; B 59 568 275 776 ;\r\nC 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ;\r\nC 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ;\r\nC 207 ; WX 333 ; N caron ; B -10 604 343 750 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ;\r\nC 225 ; WX 1000 ; N AE ; B 5 0 954 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ;\r\nC 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ;\r\nC 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ;\r\nC 241 ; WX 889 ; N ae ; B 29 -14 858 546 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ;\r\nC 248 ; WX 278 ; N lslash ; B -18 0 296 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ;\r\nC 250 ; WX 944 ; N oe ; B 34 -14 912 546 ;\r\nC 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ;\r\nC -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ;\r\nC -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ;\r\nC -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ;\r\nC -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ;\r\nC -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ;\r\nC -1 ; WX 584 ; N divide ; B 40 -42 544 548 ;\r\nC -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ;\r\nC -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ;\r\nC -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ;\r\nC -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ;\r\nC -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ;\r\nC -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ;\r\nC -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ;\r\nC -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ;\r\nC -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ;\r\nC -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ;\r\nC -1 ; WX 556 ; N aring ; B 29 -14 527 776 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ;\r\nC -1 ; WX 278 ; N lacute ; B 69 0 329 936 ;\r\nC -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ;\r\nC -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ;\r\nC -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ;\r\nC -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ;\r\nC -1 ; WX 278 ; N iacute ; B 69 0 329 750 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ;\r\nC -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ;\r\nC -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ;\r\nC -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ;\r\nC -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ;\r\nC -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ;\r\nC -1 ; WX 722 ; N Racute ; B 76 0 677 936 ;\r\nC -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ;\r\nC -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ;\r\nC -1 ; WX 611 ; N uring ; B 66 -14 545 776 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ;\r\nC -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ;\r\nC -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ;\r\nC -1 ; WX 584 ; N multiply ; B 40 1 545 505 ;\r\nC -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ;\r\nC -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ;\r\nC -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ;\r\nC -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ;\r\nC -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ;\r\nC -1 ; WX 611 ; N nacute ; B 65 0 546 750 ;\r\nC -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ;\r\nC -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ;\r\nC -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ;\r\nC -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ;\r\nC -1 ; WX 737 ; N registered ; B -11 -19 748 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ;\r\nC -1 ; WX 389 ; N racute ; B 64 0 384 750 ;\r\nC -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ;\r\nC -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B -5 0 685 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ;\r\nC -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ;\r\nC -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ;\r\nC -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ;\r\nC -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ;\r\nC -1 ; WX 500 ; N zacute ; B 20 0 480 750 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ;\r\nC -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ;\r\nC -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ;\r\nC -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ;\r\nC -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ;\r\nC -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ;\r\nC -1 ; WX 611 ; N mu ; B 66 -207 545 532 ;\r\nC -1 ; WX 278 ; N igrave ; B -50 0 209 750 ;\r\nC -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ;\r\nC -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ;\r\nC -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ;\r\nC -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ;\r\nC -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ;\r\nC -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ;\r\nC -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ;\r\nC -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ;\r\nC -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ;\r\nC -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ;\r\nC -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ;\r\nC -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ;\r\nC -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ;\r\nC -1 ; WX 400 ; N degree ; B 57 426 343 712 ;\r\nC -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ;\r\nC -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ;\r\nC -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ;\r\nC -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ;\r\nC -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;\r\nC -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ;\r\nC -1 ; WX 584 ; N minus ; B 40 197 544 309 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ;\r\nC -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ;\r\nC -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ;\r\nC -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ;\r\nC -1 ; WX 611 ; N eth ; B 34 -14 578 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ;\r\nC -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ;\r\nC -1 ; WX 278 ; N imacron ; B -8 0 285 678 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2481\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -50\r\nKPX A Gbreve -50\r\nKPX A Gcommaaccent -50\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -90\r\nKPX A Tcaron -90\r\nKPX A Tcommaaccent -90\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -80\r\nKPX A W -60\r\nKPX A Y -110\r\nKPX A Yacute -110\r\nKPX A Ydieresis -110\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -30\r\nKPX A y -30\r\nKPX A yacute -30\r\nKPX A ydieresis -30\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -50\r\nKPX Aacute Gbreve -50\r\nKPX Aacute Gcommaaccent -50\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -90\r\nKPX Aacute Tcaron -90\r\nKPX Aacute Tcommaaccent -90\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -80\r\nKPX Aacute W -60\r\nKPX Aacute Y -110\r\nKPX Aacute Yacute -110\r\nKPX Aacute Ydieresis -110\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -30\r\nKPX Aacute y -30\r\nKPX Aacute yacute -30\r\nKPX Aacute ydieresis -30\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -50\r\nKPX Abreve Gbreve -50\r\nKPX Abreve Gcommaaccent -50\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -90\r\nKPX Abreve Tcaron -90\r\nKPX Abreve Tcommaaccent -90\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -80\r\nKPX Abreve W -60\r\nKPX Abreve Y -110\r\nKPX Abreve Yacute -110\r\nKPX Abreve Ydieresis -110\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -30\r\nKPX Abreve y -30\r\nKPX Abreve yacute -30\r\nKPX Abreve ydieresis -30\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -50\r\nKPX Acircumflex Gbreve -50\r\nKPX Acircumflex Gcommaaccent -50\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -90\r\nKPX Acircumflex Tcaron -90\r\nKPX Acircumflex Tcommaaccent -90\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -80\r\nKPX Acircumflex W -60\r\nKPX Acircumflex Y -110\r\nKPX Acircumflex Yacute -110\r\nKPX Acircumflex Ydieresis -110\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -30\r\nKPX Acircumflex y -30\r\nKPX Acircumflex yacute -30\r\nKPX Acircumflex ydieresis -30\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -50\r\nKPX Adieresis Gbreve -50\r\nKPX Adieresis Gcommaaccent -50\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -90\r\nKPX Adieresis Tcaron -90\r\nKPX Adieresis Tcommaaccent -90\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -80\r\nKPX Adieresis W -60\r\nKPX Adieresis Y -110\r\nKPX Adieresis Yacute -110\r\nKPX Adieresis Ydieresis -110\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -30\r\nKPX Adieresis y -30\r\nKPX Adieresis yacute -30\r\nKPX Adieresis ydieresis -30\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -50\r\nKPX Agrave Gbreve -50\r\nKPX Agrave Gcommaaccent -50\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -90\r\nKPX Agrave Tcaron -90\r\nKPX Agrave Tcommaaccent -90\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -80\r\nKPX Agrave W -60\r\nKPX Agrave Y -110\r\nKPX Agrave Yacute -110\r\nKPX Agrave Ydieresis -110\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -30\r\nKPX Agrave y -30\r\nKPX Agrave yacute -30\r\nKPX Agrave ydieresis -30\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -50\r\nKPX Amacron Gbreve -50\r\nKPX Amacron Gcommaaccent -50\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -90\r\nKPX Amacron Tcaron -90\r\nKPX Amacron Tcommaaccent -90\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -80\r\nKPX Amacron W -60\r\nKPX Amacron Y -110\r\nKPX Amacron Yacute -110\r\nKPX Amacron Ydieresis -110\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -30\r\nKPX Amacron y -30\r\nKPX Amacron yacute -30\r\nKPX Amacron ydieresis -30\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -50\r\nKPX Aogonek Gbreve -50\r\nKPX Aogonek Gcommaaccent -50\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -90\r\nKPX Aogonek Tcaron -90\r\nKPX Aogonek Tcommaaccent -90\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -80\r\nKPX Aogonek W -60\r\nKPX Aogonek Y -110\r\nKPX Aogonek Yacute -110\r\nKPX Aogonek Ydieresis -110\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -30\r\nKPX Aogonek y -30\r\nKPX Aogonek yacute -30\r\nKPX Aogonek ydieresis -30\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -50\r\nKPX Aring Gbreve -50\r\nKPX Aring Gcommaaccent -50\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -90\r\nKPX Aring Tcaron -90\r\nKPX Aring Tcommaaccent -90\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -80\r\nKPX Aring W -60\r\nKPX Aring Y -110\r\nKPX Aring Yacute -110\r\nKPX Aring Ydieresis -110\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -30\r\nKPX Aring y -30\r\nKPX Aring yacute -30\r\nKPX Aring ydieresis -30\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -50\r\nKPX Atilde Gbreve -50\r\nKPX Atilde Gcommaaccent -50\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -90\r\nKPX Atilde Tcaron -90\r\nKPX Atilde Tcommaaccent -90\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -80\r\nKPX Atilde W -60\r\nKPX Atilde Y -110\r\nKPX Atilde Yacute -110\r\nKPX Atilde Ydieresis -110\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -30\r\nKPX Atilde y -30\r\nKPX Atilde yacute -30\r\nKPX Atilde ydieresis -30\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -70\r\nKPX D Yacute -70\r\nKPX D Ydieresis -70\r\nKPX D comma -30\r\nKPX D period -30\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -70\r\nKPX Dcaron Yacute -70\r\nKPX Dcaron Ydieresis -70\r\nKPX Dcaron comma -30\r\nKPX Dcaron period -30\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -70\r\nKPX Dcroat Yacute -70\r\nKPX Dcroat Ydieresis -70\r\nKPX Dcroat comma -30\r\nKPX Dcroat period -30\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -20\r\nKPX F aacute -20\r\nKPX F abreve -20\r\nKPX F acircumflex -20\r\nKPX F adieresis -20\r\nKPX F agrave -20\r\nKPX F amacron -20\r\nKPX F aogonek -20\r\nKPX F aring -20\r\nKPX F atilde -20\r\nKPX F comma -100\r\nKPX F period -100\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J comma -20\r\nKPX J period -20\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -15\r\nKPX K eacute -15\r\nKPX K ecaron -15\r\nKPX K ecircumflex -15\r\nKPX K edieresis -15\r\nKPX K edotaccent -15\r\nKPX K egrave -15\r\nKPX K emacron -15\r\nKPX K eogonek -15\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -15\r\nKPX Kcommaaccent eacute -15\r\nKPX Kcommaaccent ecaron -15\r\nKPX Kcommaaccent ecircumflex -15\r\nKPX Kcommaaccent edieresis -15\r\nKPX Kcommaaccent edotaccent -15\r\nKPX Kcommaaccent egrave -15\r\nKPX Kcommaaccent emacron -15\r\nKPX Kcommaaccent eogonek -15\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -90\r\nKPX L Tcaron -90\r\nKPX L Tcommaaccent -90\r\nKPX L V -110\r\nKPX L W -80\r\nKPX L Y -120\r\nKPX L Yacute -120\r\nKPX L Ydieresis -120\r\nKPX L quotedblright -140\r\nKPX L quoteright -140\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -90\r\nKPX Lacute Tcaron -90\r\nKPX Lacute Tcommaaccent -90\r\nKPX Lacute V -110\r\nKPX Lacute W -80\r\nKPX Lacute Y -120\r\nKPX Lacute Yacute -120\r\nKPX Lacute Ydieresis -120\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -140\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -90\r\nKPX Lcommaaccent Tcaron -90\r\nKPX Lcommaaccent Tcommaaccent -90\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -80\r\nKPX Lcommaaccent Y -120\r\nKPX Lcommaaccent Yacute -120\r\nKPX Lcommaaccent Ydieresis -120\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -140\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -90\r\nKPX Lslash Tcaron -90\r\nKPX Lslash Tcommaaccent -90\r\nKPX Lslash V -110\r\nKPX Lslash W -80\r\nKPX Lslash Y -120\r\nKPX Lslash Yacute -120\r\nKPX Lslash Ydieresis -120\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -140\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -50\r\nKPX O Aacute -50\r\nKPX O Abreve -50\r\nKPX O Acircumflex -50\r\nKPX O Adieresis -50\r\nKPX O Agrave -50\r\nKPX O Amacron -50\r\nKPX O Aogonek -50\r\nKPX O Aring -50\r\nKPX O Atilde -50\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -50\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -50\r\nKPX Oacute Aacute -50\r\nKPX Oacute Abreve -50\r\nKPX Oacute Acircumflex -50\r\nKPX Oacute Adieresis -50\r\nKPX Oacute Agrave -50\r\nKPX Oacute Amacron -50\r\nKPX Oacute Aogonek -50\r\nKPX Oacute Aring -50\r\nKPX Oacute Atilde -50\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -50\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -50\r\nKPX Ocircumflex Aacute -50\r\nKPX Ocircumflex Abreve -50\r\nKPX Ocircumflex Acircumflex -50\r\nKPX Ocircumflex Adieresis -50\r\nKPX Ocircumflex Agrave -50\r\nKPX Ocircumflex Amacron -50\r\nKPX Ocircumflex Aogonek -50\r\nKPX Ocircumflex Aring -50\r\nKPX Ocircumflex Atilde -50\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -50\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -50\r\nKPX Odieresis Aacute -50\r\nKPX Odieresis Abreve -50\r\nKPX Odieresis Acircumflex -50\r\nKPX Odieresis Adieresis -50\r\nKPX Odieresis Agrave -50\r\nKPX Odieresis Amacron -50\r\nKPX Odieresis Aogonek -50\r\nKPX Odieresis Aring -50\r\nKPX Odieresis Atilde -50\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -50\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -50\r\nKPX Ograve Aacute -50\r\nKPX Ograve Abreve -50\r\nKPX Ograve Acircumflex -50\r\nKPX Ograve Adieresis -50\r\nKPX Ograve Agrave -50\r\nKPX Ograve Amacron -50\r\nKPX Ograve Aogonek -50\r\nKPX Ograve Aring -50\r\nKPX Ograve Atilde -50\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -50\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -50\r\nKPX Ohungarumlaut Aacute -50\r\nKPX Ohungarumlaut Abreve -50\r\nKPX Ohungarumlaut Acircumflex -50\r\nKPX Ohungarumlaut Adieresis -50\r\nKPX Ohungarumlaut Agrave -50\r\nKPX Ohungarumlaut Amacron -50\r\nKPX Ohungarumlaut Aogonek -50\r\nKPX Ohungarumlaut Aring -50\r\nKPX Ohungarumlaut Atilde -50\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -50\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -50\r\nKPX Omacron Aacute -50\r\nKPX Omacron Abreve -50\r\nKPX Omacron Acircumflex -50\r\nKPX Omacron Adieresis -50\r\nKPX Omacron Agrave -50\r\nKPX Omacron Amacron -50\r\nKPX Omacron Aogonek -50\r\nKPX Omacron Aring -50\r\nKPX Omacron Atilde -50\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -50\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -50\r\nKPX Oslash Aacute -50\r\nKPX Oslash Abreve -50\r\nKPX Oslash Acircumflex -50\r\nKPX Oslash Adieresis -50\r\nKPX Oslash Agrave -50\r\nKPX Oslash Amacron -50\r\nKPX Oslash Aogonek -50\r\nKPX Oslash Aring -50\r\nKPX Oslash Atilde -50\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -50\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -50\r\nKPX Otilde Aacute -50\r\nKPX Otilde Abreve -50\r\nKPX Otilde Acircumflex -50\r\nKPX Otilde Adieresis -50\r\nKPX Otilde Agrave -50\r\nKPX Otilde Amacron -50\r\nKPX Otilde Aogonek -50\r\nKPX Otilde Aring -50\r\nKPX Otilde Atilde -50\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -50\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -100\r\nKPX P Aacute -100\r\nKPX P Abreve -100\r\nKPX P Acircumflex -100\r\nKPX P Adieresis -100\r\nKPX P Agrave -100\r\nKPX P Amacron -100\r\nKPX P Aogonek -100\r\nKPX P Aring -100\r\nKPX P Atilde -100\r\nKPX P a -30\r\nKPX P aacute -30\r\nKPX P abreve -30\r\nKPX P acircumflex -30\r\nKPX P adieresis -30\r\nKPX P agrave -30\r\nKPX P amacron -30\r\nKPX P aogonek -30\r\nKPX P aring -30\r\nKPX P atilde -30\r\nKPX P comma -120\r\nKPX P e -30\r\nKPX P eacute -30\r\nKPX P ecaron -30\r\nKPX P ecircumflex -30\r\nKPX P edieresis -30\r\nKPX P edotaccent -30\r\nKPX P egrave -30\r\nKPX P emacron -30\r\nKPX P eogonek -30\r\nKPX P o -40\r\nKPX P oacute -40\r\nKPX P ocircumflex -40\r\nKPX P odieresis -40\r\nKPX P ograve -40\r\nKPX P ohungarumlaut -40\r\nKPX P omacron -40\r\nKPX P oslash -40\r\nKPX P otilde -40\r\nKPX P period -120\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q comma 20\r\nKPX Q period 20\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -20\r\nKPX R Tcaron -20\r\nKPX R Tcommaaccent -20\r\nKPX R U -20\r\nKPX R Uacute -20\r\nKPX R Ucircumflex -20\r\nKPX R Udieresis -20\r\nKPX R Ugrave -20\r\nKPX R Uhungarumlaut -20\r\nKPX R Umacron -20\r\nKPX R Uogonek -20\r\nKPX R Uring -20\r\nKPX R V -50\r\nKPX R W -40\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -20\r\nKPX Racute Tcaron -20\r\nKPX Racute Tcommaaccent -20\r\nKPX Racute U -20\r\nKPX Racute Uacute -20\r\nKPX Racute Ucircumflex -20\r\nKPX Racute Udieresis -20\r\nKPX Racute Ugrave -20\r\nKPX Racute Uhungarumlaut -20\r\nKPX Racute Umacron -20\r\nKPX Racute Uogonek -20\r\nKPX Racute Uring -20\r\nKPX Racute V -50\r\nKPX Racute W -40\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -20\r\nKPX Rcaron Tcaron -20\r\nKPX Rcaron Tcommaaccent -20\r\nKPX Rcaron U -20\r\nKPX Rcaron Uacute -20\r\nKPX Rcaron Ucircumflex -20\r\nKPX Rcaron Udieresis -20\r\nKPX Rcaron Ugrave -20\r\nKPX Rcaron Uhungarumlaut -20\r\nKPX Rcaron Umacron -20\r\nKPX Rcaron Uogonek -20\r\nKPX Rcaron Uring -20\r\nKPX Rcaron V -50\r\nKPX Rcaron W -40\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -20\r\nKPX Rcommaaccent Tcaron -20\r\nKPX Rcommaaccent Tcommaaccent -20\r\nKPX Rcommaaccent U -20\r\nKPX Rcommaaccent Uacute -20\r\nKPX Rcommaaccent Ucircumflex -20\r\nKPX Rcommaaccent Udieresis -20\r\nKPX Rcommaaccent Ugrave -20\r\nKPX Rcommaaccent Uhungarumlaut -20\r\nKPX Rcommaaccent Umacron -20\r\nKPX Rcommaaccent Uogonek -20\r\nKPX Rcommaaccent Uring -20\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -40\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -80\r\nKPX T agrave -80\r\nKPX T amacron -80\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -80\r\nKPX T colon -40\r\nKPX T comma -80\r\nKPX T e -60\r\nKPX T eacute -60\r\nKPX T ecaron -60\r\nKPX T ecircumflex -60\r\nKPX T edieresis -60\r\nKPX T edotaccent -60\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -60\r\nKPX T hyphen -120\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -80\r\nKPX T r -80\r\nKPX T racute -80\r\nKPX T rcommaaccent -80\r\nKPX T semicolon -40\r\nKPX T u -90\r\nKPX T uacute -90\r\nKPX T ucircumflex -90\r\nKPX T udieresis -90\r\nKPX T ugrave -90\r\nKPX T uhungarumlaut -90\r\nKPX T umacron -90\r\nKPX T uogonek -90\r\nKPX T uring -90\r\nKPX T w -60\r\nKPX T y -60\r\nKPX T yacute -60\r\nKPX T ydieresis -60\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -80\r\nKPX Tcaron agrave -80\r\nKPX Tcaron amacron -80\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -80\r\nKPX Tcaron colon -40\r\nKPX Tcaron comma -80\r\nKPX Tcaron e -60\r\nKPX Tcaron eacute -60\r\nKPX Tcaron ecaron -60\r\nKPX Tcaron ecircumflex -60\r\nKPX Tcaron edieresis -60\r\nKPX Tcaron edotaccent -60\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -60\r\nKPX Tcaron hyphen -120\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -80\r\nKPX Tcaron r -80\r\nKPX Tcaron racute -80\r\nKPX Tcaron rcommaaccent -80\r\nKPX Tcaron semicolon -40\r\nKPX Tcaron u -90\r\nKPX Tcaron uacute -90\r\nKPX Tcaron ucircumflex -90\r\nKPX Tcaron udieresis -90\r\nKPX Tcaron ugrave -90\r\nKPX Tcaron uhungarumlaut -90\r\nKPX Tcaron umacron -90\r\nKPX Tcaron uogonek -90\r\nKPX Tcaron uring -90\r\nKPX Tcaron w -60\r\nKPX Tcaron y -60\r\nKPX Tcaron yacute -60\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -80\r\nKPX Tcommaaccent agrave -80\r\nKPX Tcommaaccent amacron -80\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -80\r\nKPX Tcommaaccent colon -40\r\nKPX Tcommaaccent comma -80\r\nKPX Tcommaaccent e -60\r\nKPX Tcommaaccent eacute -60\r\nKPX Tcommaaccent ecaron -60\r\nKPX Tcommaaccent ecircumflex -60\r\nKPX Tcommaaccent edieresis -60\r\nKPX Tcommaaccent edotaccent -60\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -60\r\nKPX Tcommaaccent hyphen -120\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -80\r\nKPX Tcommaaccent r -80\r\nKPX Tcommaaccent racute -80\r\nKPX Tcommaaccent rcommaaccent -80\r\nKPX Tcommaaccent semicolon -40\r\nKPX Tcommaaccent u -90\r\nKPX Tcommaaccent uacute -90\r\nKPX Tcommaaccent ucircumflex -90\r\nKPX Tcommaaccent udieresis -90\r\nKPX Tcommaaccent ugrave -90\r\nKPX Tcommaaccent uhungarumlaut -90\r\nKPX Tcommaaccent umacron -90\r\nKPX Tcommaaccent uogonek -90\r\nKPX Tcommaaccent uring -90\r\nKPX Tcommaaccent w -60\r\nKPX Tcommaaccent y -60\r\nKPX Tcommaaccent yacute -60\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -50\r\nKPX U Aacute -50\r\nKPX U Abreve -50\r\nKPX U Acircumflex -50\r\nKPX U Adieresis -50\r\nKPX U Agrave -50\r\nKPX U Amacron -50\r\nKPX U Aogonek -50\r\nKPX U Aring -50\r\nKPX U Atilde -50\r\nKPX U comma -30\r\nKPX U period -30\r\nKPX Uacute A -50\r\nKPX Uacute Aacute -50\r\nKPX Uacute Abreve -50\r\nKPX Uacute Acircumflex -50\r\nKPX Uacute Adieresis -50\r\nKPX Uacute Agrave -50\r\nKPX Uacute Amacron -50\r\nKPX Uacute Aogonek -50\r\nKPX Uacute Aring -50\r\nKPX Uacute Atilde -50\r\nKPX Uacute comma -30\r\nKPX Uacute period -30\r\nKPX Ucircumflex A -50\r\nKPX Ucircumflex Aacute -50\r\nKPX Ucircumflex Abreve -50\r\nKPX Ucircumflex Acircumflex -50\r\nKPX Ucircumflex Adieresis -50\r\nKPX Ucircumflex Agrave -50\r\nKPX Ucircumflex Amacron -50\r\nKPX Ucircumflex Aogonek -50\r\nKPX Ucircumflex Aring -50\r\nKPX Ucircumflex Atilde -50\r\nKPX Ucircumflex comma -30\r\nKPX Ucircumflex period -30\r\nKPX Udieresis A -50\r\nKPX Udieresis Aacute -50\r\nKPX Udieresis Abreve -50\r\nKPX Udieresis Acircumflex -50\r\nKPX Udieresis Adieresis -50\r\nKPX Udieresis Agrave -50\r\nKPX Udieresis Amacron -50\r\nKPX Udieresis Aogonek -50\r\nKPX Udieresis Aring -50\r\nKPX Udieresis Atilde -50\r\nKPX Udieresis comma -30\r\nKPX Udieresis period -30\r\nKPX Ugrave A -50\r\nKPX Ugrave Aacute -50\r\nKPX Ugrave Abreve -50\r\nKPX Ugrave Acircumflex -50\r\nKPX Ugrave Adieresis -50\r\nKPX Ugrave Agrave -50\r\nKPX Ugrave Amacron -50\r\nKPX Ugrave Aogonek -50\r\nKPX Ugrave Aring -50\r\nKPX Ugrave Atilde -50\r\nKPX Ugrave comma -30\r\nKPX Ugrave period -30\r\nKPX Uhungarumlaut A -50\r\nKPX Uhungarumlaut Aacute -50\r\nKPX Uhungarumlaut Abreve -50\r\nKPX Uhungarumlaut Acircumflex -50\r\nKPX Uhungarumlaut Adieresis -50\r\nKPX Uhungarumlaut Agrave -50\r\nKPX Uhungarumlaut Amacron -50\r\nKPX Uhungarumlaut Aogonek -50\r\nKPX Uhungarumlaut Aring -50\r\nKPX Uhungarumlaut Atilde -50\r\nKPX Uhungarumlaut comma -30\r\nKPX Uhungarumlaut period -30\r\nKPX Umacron A -50\r\nKPX Umacron Aacute -50\r\nKPX Umacron Abreve -50\r\nKPX Umacron Acircumflex -50\r\nKPX Umacron Adieresis -50\r\nKPX Umacron Agrave -50\r\nKPX Umacron Amacron -50\r\nKPX Umacron Aogonek -50\r\nKPX Umacron Aring -50\r\nKPX Umacron Atilde -50\r\nKPX Umacron comma -30\r\nKPX Umacron period -30\r\nKPX Uogonek A -50\r\nKPX Uogonek Aacute -50\r\nKPX Uogonek Abreve -50\r\nKPX Uogonek Acircumflex -50\r\nKPX Uogonek Adieresis -50\r\nKPX Uogonek Agrave -50\r\nKPX Uogonek Amacron -50\r\nKPX Uogonek Aogonek -50\r\nKPX Uogonek Aring -50\r\nKPX Uogonek Atilde -50\r\nKPX Uogonek comma -30\r\nKPX Uogonek period -30\r\nKPX Uring A -50\r\nKPX Uring Aacute -50\r\nKPX Uring Abreve -50\r\nKPX Uring Acircumflex -50\r\nKPX Uring Adieresis -50\r\nKPX Uring Agrave -50\r\nKPX Uring Amacron -50\r\nKPX Uring Aogonek -50\r\nKPX Uring Aring -50\r\nKPX Uring Atilde -50\r\nKPX Uring comma -30\r\nKPX Uring period -30\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -50\r\nKPX V Gbreve -50\r\nKPX V Gcommaaccent -50\r\nKPX V O -50\r\nKPX V Oacute -50\r\nKPX V Ocircumflex -50\r\nKPX V Odieresis -50\r\nKPX V Ograve -50\r\nKPX V Ohungarumlaut -50\r\nKPX V Omacron -50\r\nKPX V Oslash -50\r\nKPX V Otilde -50\r\nKPX V a -60\r\nKPX V aacute -60\r\nKPX V abreve -60\r\nKPX V acircumflex -60\r\nKPX V adieresis -60\r\nKPX V agrave -60\r\nKPX V amacron -60\r\nKPX V aogonek -60\r\nKPX V aring -60\r\nKPX V atilde -60\r\nKPX V colon -40\r\nKPX V comma -120\r\nKPX V e -50\r\nKPX V eacute -50\r\nKPX V ecaron -50\r\nKPX V ecircumflex -50\r\nKPX V edieresis -50\r\nKPX V edotaccent -50\r\nKPX V egrave -50\r\nKPX V emacron -50\r\nKPX V eogonek -50\r\nKPX V hyphen -80\r\nKPX V o -90\r\nKPX V oacute -90\r\nKPX V ocircumflex -90\r\nKPX V odieresis -90\r\nKPX V ograve -90\r\nKPX V ohungarumlaut -90\r\nKPX V omacron -90\r\nKPX V oslash -90\r\nKPX V otilde -90\r\nKPX V period -120\r\nKPX V semicolon -40\r\nKPX V u -60\r\nKPX V uacute -60\r\nKPX V ucircumflex -60\r\nKPX V udieresis -60\r\nKPX V ugrave -60\r\nKPX V uhungarumlaut -60\r\nKPX V umacron -60\r\nKPX V uogonek -60\r\nKPX V uring -60\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W colon -10\r\nKPX W comma -80\r\nKPX W e -35\r\nKPX W eacute -35\r\nKPX W ecaron -35\r\nKPX W ecircumflex -35\r\nKPX W edieresis -35\r\nKPX W edotaccent -35\r\nKPX W egrave -35\r\nKPX W emacron -35\r\nKPX W eogonek -35\r\nKPX W hyphen -40\r\nKPX W o -60\r\nKPX W oacute -60\r\nKPX W ocircumflex -60\r\nKPX W odieresis -60\r\nKPX W ograve -60\r\nKPX W ohungarumlaut -60\r\nKPX W omacron -60\r\nKPX W oslash -60\r\nKPX W otilde -60\r\nKPX W period -80\r\nKPX W semicolon -10\r\nKPX W u -45\r\nKPX W uacute -45\r\nKPX W ucircumflex -45\r\nKPX W udieresis -45\r\nKPX W ugrave -45\r\nKPX W uhungarumlaut -45\r\nKPX W umacron -45\r\nKPX W uogonek -45\r\nKPX W uring -45\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -70\r\nKPX Y Oacute -70\r\nKPX Y Ocircumflex -70\r\nKPX Y Odieresis -70\r\nKPX Y Ograve -70\r\nKPX Y Ohungarumlaut -70\r\nKPX Y Omacron -70\r\nKPX Y Oslash -70\r\nKPX Y Otilde -70\r\nKPX Y a -90\r\nKPX Y aacute -90\r\nKPX Y abreve -90\r\nKPX Y acircumflex -90\r\nKPX Y adieresis -90\r\nKPX Y agrave -90\r\nKPX Y amacron -90\r\nKPX Y aogonek -90\r\nKPX Y aring -90\r\nKPX Y atilde -90\r\nKPX Y colon -50\r\nKPX Y comma -100\r\nKPX Y e -80\r\nKPX Y eacute -80\r\nKPX Y ecaron -80\r\nKPX Y ecircumflex -80\r\nKPX Y edieresis -80\r\nKPX Y edotaccent -80\r\nKPX Y egrave -80\r\nKPX Y emacron -80\r\nKPX Y eogonek -80\r\nKPX Y o -100\r\nKPX Y oacute -100\r\nKPX Y ocircumflex -100\r\nKPX Y odieresis -100\r\nKPX Y ograve -100\r\nKPX Y ohungarumlaut -100\r\nKPX Y omacron -100\r\nKPX Y oslash -100\r\nKPX Y otilde -100\r\nKPX Y period -100\r\nKPX Y semicolon -50\r\nKPX Y u -100\r\nKPX Y uacute -100\r\nKPX Y ucircumflex -100\r\nKPX Y udieresis -100\r\nKPX Y ugrave -100\r\nKPX Y uhungarumlaut -100\r\nKPX Y umacron -100\r\nKPX Y uogonek -100\r\nKPX Y uring -100\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -70\r\nKPX Yacute Oacute -70\r\nKPX Yacute Ocircumflex -70\r\nKPX Yacute Odieresis -70\r\nKPX Yacute Ograve -70\r\nKPX Yacute Ohungarumlaut -70\r\nKPX Yacute Omacron -70\r\nKPX Yacute Oslash -70\r\nKPX Yacute Otilde -70\r\nKPX Yacute a -90\r\nKPX Yacute aacute -90\r\nKPX Yacute abreve -90\r\nKPX Yacute acircumflex -90\r\nKPX Yacute adieresis -90\r\nKPX Yacute agrave -90\r\nKPX Yacute amacron -90\r\nKPX Yacute aogonek -90\r\nKPX Yacute aring -90\r\nKPX Yacute atilde -90\r\nKPX Yacute colon -50\r\nKPX Yacute comma -100\r\nKPX Yacute e -80\r\nKPX Yacute eacute -80\r\nKPX Yacute ecaron -80\r\nKPX Yacute ecircumflex -80\r\nKPX Yacute edieresis -80\r\nKPX Yacute edotaccent -80\r\nKPX Yacute egrave -80\r\nKPX Yacute emacron -80\r\nKPX Yacute eogonek -80\r\nKPX Yacute o -100\r\nKPX Yacute oacute -100\r\nKPX Yacute ocircumflex -100\r\nKPX Yacute odieresis -100\r\nKPX Yacute ograve -100\r\nKPX Yacute ohungarumlaut -100\r\nKPX Yacute omacron -100\r\nKPX Yacute oslash -100\r\nKPX Yacute otilde -100\r\nKPX Yacute period -100\r\nKPX Yacute semicolon -50\r\nKPX Yacute u -100\r\nKPX Yacute uacute -100\r\nKPX Yacute ucircumflex -100\r\nKPX Yacute udieresis -100\r\nKPX Yacute ugrave -100\r\nKPX Yacute uhungarumlaut -100\r\nKPX Yacute umacron -100\r\nKPX Yacute uogonek -100\r\nKPX Yacute uring -100\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -70\r\nKPX Ydieresis Oacute -70\r\nKPX Ydieresis Ocircumflex -70\r\nKPX Ydieresis Odieresis -70\r\nKPX Ydieresis Ograve -70\r\nKPX Ydieresis Ohungarumlaut -70\r\nKPX Ydieresis Omacron -70\r\nKPX Ydieresis Oslash -70\r\nKPX Ydieresis Otilde -70\r\nKPX Ydieresis a -90\r\nKPX Ydieresis aacute -90\r\nKPX Ydieresis abreve -90\r\nKPX Ydieresis acircumflex -90\r\nKPX Ydieresis adieresis -90\r\nKPX Ydieresis agrave -90\r\nKPX Ydieresis amacron -90\r\nKPX Ydieresis aogonek -90\r\nKPX Ydieresis aring -90\r\nKPX Ydieresis atilde -90\r\nKPX Ydieresis colon -50\r\nKPX Ydieresis comma -100\r\nKPX Ydieresis e -80\r\nKPX Ydieresis eacute -80\r\nKPX Ydieresis ecaron -80\r\nKPX Ydieresis ecircumflex -80\r\nKPX Ydieresis edieresis -80\r\nKPX Ydieresis edotaccent -80\r\nKPX Ydieresis egrave -80\r\nKPX Ydieresis emacron -80\r\nKPX Ydieresis eogonek -80\r\nKPX Ydieresis o -100\r\nKPX Ydieresis oacute -100\r\nKPX Ydieresis ocircumflex -100\r\nKPX Ydieresis odieresis -100\r\nKPX Ydieresis ograve -100\r\nKPX Ydieresis ohungarumlaut -100\r\nKPX Ydieresis omacron -100\r\nKPX Ydieresis oslash -100\r\nKPX Ydieresis otilde -100\r\nKPX Ydieresis period -100\r\nKPX Ydieresis semicolon -50\r\nKPX Ydieresis u -100\r\nKPX Ydieresis uacute -100\r\nKPX Ydieresis ucircumflex -100\r\nKPX Ydieresis udieresis -100\r\nKPX Ydieresis ugrave -100\r\nKPX Ydieresis uhungarumlaut -100\r\nKPX Ydieresis umacron -100\r\nKPX Ydieresis uogonek -100\r\nKPX Ydieresis uring -100\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX a v -15\r\nKPX a w -15\r\nKPX a y -20\r\nKPX a yacute -20\r\nKPX a ydieresis -20\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX aacute v -15\r\nKPX aacute w -15\r\nKPX aacute y -20\r\nKPX aacute yacute -20\r\nKPX aacute ydieresis -20\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX abreve v -15\r\nKPX abreve w -15\r\nKPX abreve y -20\r\nKPX abreve yacute -20\r\nKPX abreve ydieresis -20\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX acircumflex v -15\r\nKPX acircumflex w -15\r\nKPX acircumflex y -20\r\nKPX acircumflex yacute -20\r\nKPX acircumflex ydieresis -20\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX adieresis v -15\r\nKPX adieresis w -15\r\nKPX adieresis y -20\r\nKPX adieresis yacute -20\r\nKPX adieresis ydieresis -20\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX agrave v -15\r\nKPX agrave w -15\r\nKPX agrave y -20\r\nKPX agrave yacute -20\r\nKPX agrave ydieresis -20\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX amacron v -15\r\nKPX amacron w -15\r\nKPX amacron y -20\r\nKPX amacron yacute -20\r\nKPX amacron ydieresis -20\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aogonek v -15\r\nKPX aogonek w -15\r\nKPX aogonek y -20\r\nKPX aogonek yacute -20\r\nKPX aogonek ydieresis -20\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX aring v -15\r\nKPX aring w -15\r\nKPX aring y -20\r\nKPX aring yacute -20\r\nKPX aring ydieresis -20\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX atilde v -15\r\nKPX atilde w -15\r\nKPX atilde y -20\r\nKPX atilde yacute -20\r\nKPX atilde ydieresis -20\r\nKPX b l -10\r\nKPX b lacute -10\r\nKPX b lcommaaccent -10\r\nKPX b lslash -10\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c h -10\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX c l -20\r\nKPX c lacute -20\r\nKPX c lcommaaccent -20\r\nKPX c lslash -20\r\nKPX c y -10\r\nKPX c yacute -10\r\nKPX c ydieresis -10\r\nKPX cacute h -10\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX cacute l -20\r\nKPX cacute lacute -20\r\nKPX cacute lcommaaccent -20\r\nKPX cacute lslash -20\r\nKPX cacute y -10\r\nKPX cacute yacute -10\r\nKPX cacute ydieresis -10\r\nKPX ccaron h -10\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccaron l -20\r\nKPX ccaron lacute -20\r\nKPX ccaron lcommaaccent -20\r\nKPX ccaron lslash -20\r\nKPX ccaron y -10\r\nKPX ccaron yacute -10\r\nKPX ccaron ydieresis -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX ccedilla l -20\r\nKPX ccedilla lacute -20\r\nKPX ccedilla lcommaaccent -20\r\nKPX ccedilla lslash -20\r\nKPX ccedilla y -10\r\nKPX ccedilla yacute -10\r\nKPX ccedilla ydieresis -10\r\nKPX colon space -40\r\nKPX comma quotedblright -120\r\nKPX comma quoteright -120\r\nKPX comma space -40\r\nKPX d d -10\r\nKPX d dcroat -10\r\nKPX d v -15\r\nKPX d w -15\r\nKPX d y -15\r\nKPX d yacute -15\r\nKPX d ydieresis -15\r\nKPX dcroat d -10\r\nKPX dcroat dcroat -10\r\nKPX dcroat v -15\r\nKPX dcroat w -15\r\nKPX dcroat y -15\r\nKPX dcroat yacute -15\r\nKPX dcroat ydieresis -15\r\nKPX e comma 10\r\nKPX e period 20\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute comma 10\r\nKPX eacute period 20\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron comma 10\r\nKPX ecaron period 20\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex comma 10\r\nKPX ecircumflex period 20\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis comma 10\r\nKPX edieresis period 20\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent comma 10\r\nKPX edotaccent period 20\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave comma 10\r\nKPX egrave period 20\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron comma 10\r\nKPX emacron period 20\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek comma 10\r\nKPX eogonek period 20\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f comma -10\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f ecaron -10\r\nKPX f ecircumflex -10\r\nKPX f edieresis -10\r\nKPX f edotaccent -10\r\nKPX f egrave -10\r\nKPX f emacron -10\r\nKPX f eogonek -10\r\nKPX f o -20\r\nKPX f oacute -20\r\nKPX f ocircumflex -20\r\nKPX f odieresis -20\r\nKPX f ograve -20\r\nKPX f ohungarumlaut -20\r\nKPX f omacron -20\r\nKPX f oslash -20\r\nKPX f otilde -20\r\nKPX f period -10\r\nKPX f quotedblright 30\r\nKPX f quoteright 30\r\nKPX g e 10\r\nKPX g eacute 10\r\nKPX g ecaron 10\r\nKPX g ecircumflex 10\r\nKPX g edieresis 10\r\nKPX g edotaccent 10\r\nKPX g egrave 10\r\nKPX g emacron 10\r\nKPX g eogonek 10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX gbreve e 10\r\nKPX gbreve eacute 10\r\nKPX gbreve ecaron 10\r\nKPX gbreve ecircumflex 10\r\nKPX gbreve edieresis 10\r\nKPX gbreve edotaccent 10\r\nKPX gbreve egrave 10\r\nKPX gbreve emacron 10\r\nKPX gbreve eogonek 10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gcommaaccent e 10\r\nKPX gcommaaccent eacute 10\r\nKPX gcommaaccent ecaron 10\r\nKPX gcommaaccent ecircumflex 10\r\nKPX gcommaaccent edieresis 10\r\nKPX gcommaaccent edotaccent 10\r\nKPX gcommaaccent egrave 10\r\nKPX gcommaaccent emacron 10\r\nKPX gcommaaccent eogonek 10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX h y -20\r\nKPX h yacute -20\r\nKPX h ydieresis -20\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX l w -15\r\nKPX l y -15\r\nKPX l yacute -15\r\nKPX l ydieresis -15\r\nKPX lacute w -15\r\nKPX lacute y -15\r\nKPX lacute yacute -15\r\nKPX lacute ydieresis -15\r\nKPX lcommaaccent w -15\r\nKPX lcommaaccent y -15\r\nKPX lcommaaccent yacute -15\r\nKPX lcommaaccent ydieresis -15\r\nKPX lslash w -15\r\nKPX lslash y -15\r\nKPX lslash yacute -15\r\nKPX lslash ydieresis -15\r\nKPX m u -20\r\nKPX m uacute -20\r\nKPX m ucircumflex -20\r\nKPX m udieresis -20\r\nKPX m ugrave -20\r\nKPX m uhungarumlaut -20\r\nKPX m umacron -20\r\nKPX m uogonek -20\r\nKPX m uring -20\r\nKPX m y -30\r\nKPX m yacute -30\r\nKPX m ydieresis -30\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -40\r\nKPX n y -20\r\nKPX n yacute -20\r\nKPX n ydieresis -20\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -40\r\nKPX nacute y -20\r\nKPX nacute yacute -20\r\nKPX nacute ydieresis -20\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -40\r\nKPX ncaron y -20\r\nKPX ncaron yacute -20\r\nKPX ncaron ydieresis -20\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -20\r\nKPX ncommaaccent yacute -20\r\nKPX ncommaaccent ydieresis -20\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -40\r\nKPX ntilde y -20\r\nKPX ntilde yacute -20\r\nKPX ntilde ydieresis -20\r\nKPX o v -20\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -20\r\nKPX o yacute -20\r\nKPX o ydieresis -20\r\nKPX oacute v -20\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -20\r\nKPX oacute yacute -20\r\nKPX oacute ydieresis -20\r\nKPX ocircumflex v -20\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -20\r\nKPX ocircumflex yacute -20\r\nKPX ocircumflex ydieresis -20\r\nKPX odieresis v -20\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -20\r\nKPX odieresis yacute -20\r\nKPX odieresis ydieresis -20\r\nKPX ograve v -20\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -20\r\nKPX ograve yacute -20\r\nKPX ograve ydieresis -20\r\nKPX ohungarumlaut v -20\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -20\r\nKPX ohungarumlaut yacute -20\r\nKPX ohungarumlaut ydieresis -20\r\nKPX omacron v -20\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -20\r\nKPX omacron yacute -20\r\nKPX omacron ydieresis -20\r\nKPX oslash v -20\r\nKPX oslash w -15\r\nKPX oslash x -30\r\nKPX oslash y -20\r\nKPX oslash yacute -20\r\nKPX oslash ydieresis -20\r\nKPX otilde v -20\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -20\r\nKPX otilde yacute -20\r\nKPX otilde ydieresis -20\r\nKPX p y -15\r\nKPX p yacute -15\r\nKPX p ydieresis -15\r\nKPX period quotedblright -120\r\nKPX period quoteright -120\r\nKPX period space -40\r\nKPX quotedblright space -80\r\nKPX quoteleft quoteleft -46\r\nKPX quoteright d -80\r\nKPX quoteright dcroat -80\r\nKPX quoteright l -20\r\nKPX quoteright lacute -20\r\nKPX quoteright lcommaaccent -20\r\nKPX quoteright lslash -20\r\nKPX quoteright quoteright -46\r\nKPX quoteright r -40\r\nKPX quoteright racute -40\r\nKPX quoteright rcaron -40\r\nKPX quoteright rcommaaccent -40\r\nKPX quoteright s -60\r\nKPX quoteright sacute -60\r\nKPX quoteright scaron -60\r\nKPX quoteright scedilla -60\r\nKPX quoteright scommaaccent -60\r\nKPX quoteright space -80\r\nKPX quoteright v -20\r\nKPX r c -20\r\nKPX r cacute -20\r\nKPX r ccaron -20\r\nKPX r ccedilla -20\r\nKPX r comma -60\r\nKPX r d -20\r\nKPX r dcroat -20\r\nKPX r g -15\r\nKPX r gbreve -15\r\nKPX r gcommaaccent -15\r\nKPX r hyphen -20\r\nKPX r o -20\r\nKPX r oacute -20\r\nKPX r ocircumflex -20\r\nKPX r odieresis -20\r\nKPX r ograve -20\r\nKPX r ohungarumlaut -20\r\nKPX r omacron -20\r\nKPX r oslash -20\r\nKPX r otilde -20\r\nKPX r period -60\r\nKPX r q -20\r\nKPX r s -15\r\nKPX r sacute -15\r\nKPX r scaron -15\r\nKPX r scedilla -15\r\nKPX r scommaaccent -15\r\nKPX r t 20\r\nKPX r tcommaaccent 20\r\nKPX r v 10\r\nKPX r y 10\r\nKPX r yacute 10\r\nKPX r ydieresis 10\r\nKPX racute c -20\r\nKPX racute cacute -20\r\nKPX racute ccaron -20\r\nKPX racute ccedilla -20\r\nKPX racute comma -60\r\nKPX racute d -20\r\nKPX racute dcroat -20\r\nKPX racute g -15\r\nKPX racute gbreve -15\r\nKPX racute gcommaaccent -15\r\nKPX racute hyphen -20\r\nKPX racute o -20\r\nKPX racute oacute -20\r\nKPX racute ocircumflex -20\r\nKPX racute odieresis -20\r\nKPX racute ograve -20\r\nKPX racute ohungarumlaut -20\r\nKPX racute omacron -20\r\nKPX racute oslash -20\r\nKPX racute otilde -20\r\nKPX racute period -60\r\nKPX racute q -20\r\nKPX racute s -15\r\nKPX racute sacute -15\r\nKPX racute scaron -15\r\nKPX racute scedilla -15\r\nKPX racute scommaaccent -15\r\nKPX racute t 20\r\nKPX racute tcommaaccent 20\r\nKPX racute v 10\r\nKPX racute y 10\r\nKPX racute yacute 10\r\nKPX racute ydieresis 10\r\nKPX rcaron c -20\r\nKPX rcaron cacute -20\r\nKPX rcaron ccaron -20\r\nKPX rcaron ccedilla -20\r\nKPX rcaron comma -60\r\nKPX rcaron d -20\r\nKPX rcaron dcroat -20\r\nKPX rcaron g -15\r\nKPX rcaron gbreve -15\r\nKPX rcaron gcommaaccent -15\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -20\r\nKPX rcaron oacute -20\r\nKPX rcaron ocircumflex -20\r\nKPX rcaron odieresis -20\r\nKPX rcaron ograve -20\r\nKPX rcaron ohungarumlaut -20\r\nKPX rcaron omacron -20\r\nKPX rcaron oslash -20\r\nKPX rcaron otilde -20\r\nKPX rcaron period -60\r\nKPX rcaron q -20\r\nKPX rcaron s -15\r\nKPX rcaron sacute -15\r\nKPX rcaron scaron -15\r\nKPX rcaron scedilla -15\r\nKPX rcaron scommaaccent -15\r\nKPX rcaron t 20\r\nKPX rcaron tcommaaccent 20\r\nKPX rcaron v 10\r\nKPX rcaron y 10\r\nKPX rcaron yacute 10\r\nKPX rcaron ydieresis 10\r\nKPX rcommaaccent c -20\r\nKPX rcommaaccent cacute -20\r\nKPX rcommaaccent ccaron -20\r\nKPX rcommaaccent ccedilla -20\r\nKPX rcommaaccent comma -60\r\nKPX rcommaaccent d -20\r\nKPX rcommaaccent dcroat -20\r\nKPX rcommaaccent g -15\r\nKPX rcommaaccent gbreve -15\r\nKPX rcommaaccent gcommaaccent -15\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -20\r\nKPX rcommaaccent oacute -20\r\nKPX rcommaaccent ocircumflex -20\r\nKPX rcommaaccent odieresis -20\r\nKPX rcommaaccent ograve -20\r\nKPX rcommaaccent ohungarumlaut -20\r\nKPX rcommaaccent omacron -20\r\nKPX rcommaaccent oslash -20\r\nKPX rcommaaccent otilde -20\r\nKPX rcommaaccent period -60\r\nKPX rcommaaccent q -20\r\nKPX rcommaaccent s -15\r\nKPX rcommaaccent sacute -15\r\nKPX rcommaaccent scaron -15\r\nKPX rcommaaccent scedilla -15\r\nKPX rcommaaccent scommaaccent -15\r\nKPX rcommaaccent t 20\r\nKPX rcommaaccent tcommaaccent 20\r\nKPX rcommaaccent v 10\r\nKPX rcommaaccent y 10\r\nKPX rcommaaccent yacute 10\r\nKPX rcommaaccent ydieresis 10\r\nKPX s w -15\r\nKPX sacute w -15\r\nKPX scaron w -15\r\nKPX scedilla w -15\r\nKPX scommaaccent w -15\r\nKPX semicolon space -40\r\nKPX space T -100\r\nKPX space Tcaron -100\r\nKPX space Tcommaaccent -100\r\nKPX space V -80\r\nKPX space W -80\r\nKPX space Y -120\r\nKPX space Yacute -120\r\nKPX space Ydieresis -120\r\nKPX space quotedblleft -80\r\nKPX space quoteleft -60\r\nKPX v a -20\r\nKPX v aacute -20\r\nKPX v abreve -20\r\nKPX v acircumflex -20\r\nKPX v adieresis -20\r\nKPX v agrave -20\r\nKPX v amacron -20\r\nKPX v aogonek -20\r\nKPX v aring -20\r\nKPX v atilde -20\r\nKPX v comma -80\r\nKPX v o -30\r\nKPX v oacute -30\r\nKPX v ocircumflex -30\r\nKPX v odieresis -30\r\nKPX v ograve -30\r\nKPX v ohungarumlaut -30\r\nKPX v omacron -30\r\nKPX v oslash -30\r\nKPX v otilde -30\r\nKPX v period -80\r\nKPX w comma -40\r\nKPX w o -20\r\nKPX w oacute -20\r\nKPX w ocircumflex -20\r\nKPX w odieresis -20\r\nKPX w ograve -20\r\nKPX w ohungarumlaut -20\r\nKPX w omacron -20\r\nKPX w oslash -20\r\nKPX w otilde -20\r\nKPX w period -40\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y a -30\r\nKPX y aacute -30\r\nKPX y abreve -30\r\nKPX y acircumflex -30\r\nKPX y adieresis -30\r\nKPX y agrave -30\r\nKPX y amacron -30\r\nKPX y aogonek -30\r\nKPX y aring -30\r\nKPX y atilde -30\r\nKPX y comma -80\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -80\r\nKPX yacute a -30\r\nKPX yacute aacute -30\r\nKPX yacute abreve -30\r\nKPX yacute acircumflex -30\r\nKPX yacute adieresis -30\r\nKPX yacute agrave -30\r\nKPX yacute amacron -30\r\nKPX yacute aogonek -30\r\nKPX yacute aring -30\r\nKPX yacute atilde -30\r\nKPX yacute comma -80\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -80\r\nKPX ydieresis a -30\r\nKPX ydieresis aacute -30\r\nKPX ydieresis abreve -30\r\nKPX ydieresis acircumflex -30\r\nKPX ydieresis adieresis -30\r\nKPX ydieresis agrave -30\r\nKPX ydieresis amacron -30\r\nKPX ydieresis aogonek -30\r\nKPX ydieresis aring -30\r\nKPX ydieresis atilde -30\r\nKPX ydieresis comma -80\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -80\r\nKPX z e 10\r\nKPX z eacute 10\r\nKPX z ecaron 10\r\nKPX z ecircumflex 10\r\nKPX z edieresis 10\r\nKPX z edotaccent 10\r\nKPX z egrave 10\r\nKPX z emacron 10\r\nKPX z eogonek 10\r\nKPX zacute e 10\r\nKPX zacute eacute 10\r\nKPX zacute ecaron 10\r\nKPX zacute ecircumflex 10\r\nKPX zacute edieresis 10\r\nKPX zacute edotaccent 10\r\nKPX zacute egrave 10\r\nKPX zacute emacron 10\r\nKPX zacute eogonek 10\r\nKPX zcaron e 10\r\nKPX zcaron eacute 10\r\nKPX zcaron ecaron 10\r\nKPX zcaron ecircumflex 10\r\nKPX zcaron edieresis 10\r\nKPX zcaron edotaccent 10\r\nKPX zcaron egrave 10\r\nKPX zcaron emacron 10\r\nKPX zcaron eogonek 10\r\nKPX zdotaccent e 10\r\nKPX zdotaccent eacute 10\r\nKPX zdotaccent ecaron 10\r\nKPX zdotaccent ecircumflex 10\r\nKPX zdotaccent edieresis 10\r\nKPX zdotaccent edotaccent 10\r\nKPX zdotaccent egrave 10\r\nKPX zdotaccent emacron 10\r\nKPX zdotaccent eogonek 10\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Helvetica-Oblique'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:44:31 1997\r\nComment UniqueID 43055\r\nComment VMusage 14960 69346\r\nFontName Helvetica-Oblique\r\nFullName Helvetica Oblique\r\nFamilyName Helvetica\r\nWeight Medium\r\nItalicAngle -12\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -170 -225 1116 931 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 523\r\nAscender 718\r\nDescender -207\r\nStdHW 76\r\nStdVW 88\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 278 ; N exclam ; B 90 0 340 718 ;\r\nC 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ;\r\nC 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ;\r\nC 37 ; WX 889 ; N percent ; B 147 -19 889 703 ;\r\nC 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ;\r\nC 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ;\r\nC 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ;\r\nC 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ;\r\nC 43 ; WX 584 ; N plus ; B 85 0 606 505 ;\r\nC 44 ; WX 278 ; N comma ; B 56 -147 214 106 ;\r\nC 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ;\r\nC 46 ; WX 278 ; N period ; B 87 0 214 106 ;\r\nC 47 ; WX 278 ; N slash ; B -21 -19 452 737 ;\r\nC 48 ; WX 556 ; N zero ; B 93 -19 608 703 ;\r\nC 49 ; WX 556 ; N one ; B 207 0 508 703 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 617 703 ;\r\nC 51 ; WX 556 ; N three ; B 75 -19 610 703 ;\r\nC 52 ; WX 556 ; N four ; B 61 0 576 703 ;\r\nC 53 ; WX 556 ; N five ; B 68 -19 621 688 ;\r\nC 54 ; WX 556 ; N six ; B 91 -19 615 703 ;\r\nC 55 ; WX 556 ; N seven ; B 137 0 669 688 ;\r\nC 56 ; WX 556 ; N eight ; B 74 -19 607 703 ;\r\nC 57 ; WX 556 ; N nine ; B 82 -19 609 703 ;\r\nC 58 ; WX 278 ; N colon ; B 87 0 301 516 ;\r\nC 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ;\r\nC 60 ; WX 584 ; N less ; B 94 11 641 495 ;\r\nC 61 ; WX 584 ; N equal ; B 63 115 628 390 ;\r\nC 62 ; WX 584 ; N greater ; B 50 11 597 495 ;\r\nC 63 ; WX 556 ; N question ; B 161 0 610 727 ;\r\nC 64 ; WX 1015 ; N at ; B 215 -19 965 737 ;\r\nC 65 ; WX 667 ; N A ; B 14 0 654 718 ;\r\nC 66 ; WX 667 ; N B ; B 74 0 712 718 ;\r\nC 67 ; WX 722 ; N C ; B 108 -19 782 737 ;\r\nC 68 ; WX 722 ; N D ; B 81 0 764 718 ;\r\nC 69 ; WX 667 ; N E ; B 86 0 762 718 ;\r\nC 70 ; WX 611 ; N F ; B 86 0 736 718 ;\r\nC 71 ; WX 778 ; N G ; B 111 -19 799 737 ;\r\nC 72 ; WX 722 ; N H ; B 77 0 799 718 ;\r\nC 73 ; WX 278 ; N I ; B 91 0 341 718 ;\r\nC 74 ; WX 500 ; N J ; B 47 -19 581 718 ;\r\nC 75 ; WX 667 ; N K ; B 76 0 808 718 ;\r\nC 76 ; WX 556 ; N L ; B 76 0 555 718 ;\r\nC 77 ; WX 833 ; N M ; B 73 0 914 718 ;\r\nC 78 ; WX 722 ; N N ; B 76 0 799 718 ;\r\nC 79 ; WX 778 ; N O ; B 105 -19 826 737 ;\r\nC 80 ; WX 667 ; N P ; B 86 0 737 718 ;\r\nC 81 ; WX 778 ; N Q ; B 105 -56 826 737 ;\r\nC 82 ; WX 722 ; N R ; B 88 0 773 718 ;\r\nC 83 ; WX 667 ; N S ; B 90 -19 713 737 ;\r\nC 84 ; WX 611 ; N T ; B 148 0 750 718 ;\r\nC 85 ; WX 722 ; N U ; B 123 -19 797 718 ;\r\nC 86 ; WX 667 ; N V ; B 173 0 800 718 ;\r\nC 87 ; WX 944 ; N W ; B 169 0 1081 718 ;\r\nC 88 ; WX 667 ; N X ; B 19 0 790 718 ;\r\nC 89 ; WX 667 ; N Y ; B 167 0 806 718 ;\r\nC 90 ; WX 611 ; N Z ; B 23 0 741 718 ;\r\nC 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ;\r\nC 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ;\r\nC 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ;\r\nC 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ;\r\nC 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;\r\nC 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ;\r\nC 97 ; WX 556 ; N a ; B 61 -15 559 538 ;\r\nC 98 ; WX 556 ; N b ; B 58 -15 584 718 ;\r\nC 99 ; WX 500 ; N c ; B 74 -15 553 538 ;\r\nC 100 ; WX 556 ; N d ; B 84 -15 652 718 ;\r\nC 101 ; WX 556 ; N e ; B 84 -15 578 538 ;\r\nC 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ;\r\nC 103 ; WX 556 ; N g ; B 42 -220 610 538 ;\r\nC 104 ; WX 556 ; N h ; B 65 0 573 718 ;\r\nC 105 ; WX 222 ; N i ; B 67 0 308 718 ;\r\nC 106 ; WX 222 ; N j ; B -60 -210 308 718 ;\r\nC 107 ; WX 500 ; N k ; B 67 0 600 718 ;\r\nC 108 ; WX 222 ; N l ; B 67 0 308 718 ;\r\nC 109 ; WX 833 ; N m ; B 65 0 852 538 ;\r\nC 110 ; WX 556 ; N n ; B 65 0 573 538 ;\r\nC 111 ; WX 556 ; N o ; B 83 -14 585 538 ;\r\nC 112 ; WX 556 ; N p ; B 14 -207 584 538 ;\r\nC 113 ; WX 556 ; N q ; B 84 -207 605 538 ;\r\nC 114 ; WX 333 ; N r ; B 77 0 446 538 ;\r\nC 115 ; WX 500 ; N s ; B 63 -15 529 538 ;\r\nC 116 ; WX 278 ; N t ; B 102 -7 368 669 ;\r\nC 117 ; WX 556 ; N u ; B 94 -15 600 523 ;\r\nC 118 ; WX 500 ; N v ; B 119 0 603 523 ;\r\nC 119 ; WX 722 ; N w ; B 125 0 820 523 ;\r\nC 120 ; WX 500 ; N x ; B 11 0 594 523 ;\r\nC 121 ; WX 500 ; N y ; B 15 -214 600 523 ;\r\nC 122 ; WX 500 ; N z ; B 31 0 571 523 ;\r\nC 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ;\r\nC 124 ; WX 260 ; N bar ; B 46 -225 332 775 ;\r\nC 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ;\r\nC 162 ; WX 556 ; N cent ; B 95 -115 584 623 ;\r\nC 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ;\r\nC 165 ; WX 556 ; N yen ; B 81 0 699 688 ;\r\nC 166 ; WX 556 ; N florin ; B -52 -207 654 737 ;\r\nC 167 ; WX 556 ; N section ; B 76 -191 584 737 ;\r\nC 168 ; WX 556 ; N currency ; B 60 99 646 603 ;\r\nC 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ;\r\nC 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ;\r\nC 174 ; WX 500 ; N fi ; B 86 0 587 728 ;\r\nC 175 ; WX 500 ; N fl ; B 86 0 585 728 ;\r\nC 177 ; WX 556 ; N endash ; B 51 240 623 313 ;\r\nC 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ;\r\nC 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ;\r\nC 183 ; WX 350 ; N bullet ; B 91 202 413 517 ;\r\nC 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ;\r\nC 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ;\r\nC 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ;\r\nC 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ;\r\nC 193 ; WX 333 ; N grave ; B 170 593 337 734 ;\r\nC 194 ; WX 333 ; N acute ; B 248 593 475 734 ;\r\nC 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ;\r\nC 196 ; WX 333 ; N tilde ; B 125 606 490 722 ;\r\nC 197 ; WX 333 ; N macron ; B 143 627 468 684 ;\r\nC 198 ; WX 333 ; N breve ; B 167 595 476 731 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ;\r\nC 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ;\r\nC 202 ; WX 333 ; N ring ; B 214 572 402 756 ;\r\nC 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ;\r\nC 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ;\r\nC 207 ; WX 333 ; N caron ; B 177 593 468 734 ;\r\nC 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ;\r\nC 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ;\r\nC 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ;\r\nC 241 ; WX 889 ; N ae ; B 61 -15 909 538 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ;\r\nC 248 ; WX 222 ; N lslash ; B 41 0 347 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ;\r\nC 250 ; WX 944 ; N oe ; B 83 -15 964 538 ;\r\nC 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ;\r\nC -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ;\r\nC -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ;\r\nC -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ;\r\nC -1 ; WX 584 ; N divide ; B 85 -19 606 524 ;\r\nC -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;\r\nC -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ;\r\nC -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ;\r\nC -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ;\r\nC -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ;\r\nC -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ;\r\nC -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ;\r\nC -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ;\r\nC -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ;\r\nC -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ;\r\nC -1 ; WX 556 ; N aring ; B 61 -15 559 756 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ;\r\nC -1 ; WX 222 ; N lacute ; B 67 0 461 929 ;\r\nC -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ;\r\nC -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ;\r\nC -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ;\r\nC -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ;\r\nC -1 ; WX 278 ; N iacute ; B 95 0 448 734 ;\r\nC -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ;\r\nC -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ;\r\nC -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ;\r\nC -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ;\r\nC -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ;\r\nC -1 ; WX 722 ; N Racute ; B 88 0 773 929 ;\r\nC -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ;\r\nC -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ;\r\nC -1 ; WX 556 ; N uring ; B 94 -15 600 756 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ;\r\nC -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ;\r\nC -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;\r\nC -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ;\r\nC -1 ; WX 584 ; N multiply ; B 50 0 642 506 ;\r\nC -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ;\r\nC -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ;\r\nC -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ;\r\nC -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ;\r\nC -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ;\r\nC -1 ; WX 556 ; N nacute ; B 65 0 587 734 ;\r\nC -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ;\r\nC -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ;\r\nC -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ;\r\nC -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ;\r\nC -1 ; WX 737 ; N registered ; B 54 -19 837 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 671 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ;\r\nC -1 ; WX 333 ; N racute ; B 77 0 475 734 ;\r\nC -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ;\r\nC -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ;\r\nC -1 ; WX 722 ; N Eth ; B 69 0 764 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ;\r\nC -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ;\r\nC -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ;\r\nC -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ;\r\nC -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ;\r\nC -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;\r\nC -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ;\r\nC -1 ; WX 500 ; N zacute ; B 31 0 571 734 ;\r\nC -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ;\r\nC -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ;\r\nC -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ;\r\nC -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ;\r\nC -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ;\r\nC -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ;\r\nC -1 ; WX 556 ; N mu ; B 24 -207 600 523 ;\r\nC -1 ; WX 278 ; N igrave ; B 95 0 310 734 ;\r\nC -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ;\r\nC -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ;\r\nC -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ;\r\nC -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ;\r\nC -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ;\r\nC -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ;\r\nC -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ;\r\nC -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ;\r\nC -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ;\r\nC -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ;\r\nC -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ;\r\nC -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ;\r\nC -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ;\r\nC -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ;\r\nC -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ;\r\nC -1 ; WX 400 ; N degree ; B 169 411 468 703 ;\r\nC -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ;\r\nC -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ;\r\nC -1 ; WX 453 ; N radical ; B 79 -80 617 762 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ;\r\nC -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ;\r\nC -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ;\r\nC -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;\r\nC -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;\r\nC -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ;\r\nC -1 ; WX 584 ; N minus ; B 85 216 606 289 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ;\r\nC -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ;\r\nC -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ;\r\nC -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ;\r\nC -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ;\r\nC -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ;\r\nC -1 ; WX 556 ; N eth ; B 81 -15 617 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ;\r\nC -1 ; WX 278 ; N imacron ; B 95 0 417 684 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2705\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -30\r\nKPX A Gbreve -30\r\nKPX A Gcommaaccent -30\r\nKPX A O -30\r\nKPX A Oacute -30\r\nKPX A Ocircumflex -30\r\nKPX A Odieresis -30\r\nKPX A Ograve -30\r\nKPX A Ohungarumlaut -30\r\nKPX A Omacron -30\r\nKPX A Oslash -30\r\nKPX A Otilde -30\r\nKPX A Q -30\r\nKPX A T -120\r\nKPX A Tcaron -120\r\nKPX A Tcommaaccent -120\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -70\r\nKPX A W -50\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -40\r\nKPX A y -40\r\nKPX A yacute -40\r\nKPX A ydieresis -40\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -30\r\nKPX Aacute Gbreve -30\r\nKPX Aacute Gcommaaccent -30\r\nKPX Aacute O -30\r\nKPX Aacute Oacute -30\r\nKPX Aacute Ocircumflex -30\r\nKPX Aacute Odieresis -30\r\nKPX Aacute Ograve -30\r\nKPX Aacute Ohungarumlaut -30\r\nKPX Aacute Omacron -30\r\nKPX Aacute Oslash -30\r\nKPX Aacute Otilde -30\r\nKPX Aacute Q -30\r\nKPX Aacute T -120\r\nKPX Aacute Tcaron -120\r\nKPX Aacute Tcommaaccent -120\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -70\r\nKPX Aacute W -50\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -40\r\nKPX Aacute y -40\r\nKPX Aacute yacute -40\r\nKPX Aacute ydieresis -40\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -30\r\nKPX Abreve Gbreve -30\r\nKPX Abreve Gcommaaccent -30\r\nKPX Abreve O -30\r\nKPX Abreve Oacute -30\r\nKPX Abreve Ocircumflex -30\r\nKPX Abreve Odieresis -30\r\nKPX Abreve Ograve -30\r\nKPX Abreve Ohungarumlaut -30\r\nKPX Abreve Omacron -30\r\nKPX Abreve Oslash -30\r\nKPX Abreve Otilde -30\r\nKPX Abreve Q -30\r\nKPX Abreve T -120\r\nKPX Abreve Tcaron -120\r\nKPX Abreve Tcommaaccent -120\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -70\r\nKPX Abreve W -50\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -40\r\nKPX Abreve y -40\r\nKPX Abreve yacute -40\r\nKPX Abreve ydieresis -40\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -30\r\nKPX Acircumflex Gbreve -30\r\nKPX Acircumflex Gcommaaccent -30\r\nKPX Acircumflex O -30\r\nKPX Acircumflex Oacute -30\r\nKPX Acircumflex Ocircumflex -30\r\nKPX Acircumflex Odieresis -30\r\nKPX Acircumflex Ograve -30\r\nKPX Acircumflex Ohungarumlaut -30\r\nKPX Acircumflex Omacron -30\r\nKPX Acircumflex Oslash -30\r\nKPX Acircumflex Otilde -30\r\nKPX Acircumflex Q -30\r\nKPX Acircumflex T -120\r\nKPX Acircumflex Tcaron -120\r\nKPX Acircumflex Tcommaaccent -120\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -70\r\nKPX Acircumflex W -50\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -40\r\nKPX Acircumflex y -40\r\nKPX Acircumflex yacute -40\r\nKPX Acircumflex ydieresis -40\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -30\r\nKPX Adieresis Gbreve -30\r\nKPX Adieresis Gcommaaccent -30\r\nKPX Adieresis O -30\r\nKPX Adieresis Oacute -30\r\nKPX Adieresis Ocircumflex -30\r\nKPX Adieresis Odieresis -30\r\nKPX Adieresis Ograve -30\r\nKPX Adieresis Ohungarumlaut -30\r\nKPX Adieresis Omacron -30\r\nKPX Adieresis Oslash -30\r\nKPX Adieresis Otilde -30\r\nKPX Adieresis Q -30\r\nKPX Adieresis T -120\r\nKPX Adieresis Tcaron -120\r\nKPX Adieresis Tcommaaccent -120\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -70\r\nKPX Adieresis W -50\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -40\r\nKPX Adieresis y -40\r\nKPX Adieresis yacute -40\r\nKPX Adieresis ydieresis -40\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -30\r\nKPX Agrave Gbreve -30\r\nKPX Agrave Gcommaaccent -30\r\nKPX Agrave O -30\r\nKPX Agrave Oacute -30\r\nKPX Agrave Ocircumflex -30\r\nKPX Agrave Odieresis -30\r\nKPX Agrave Ograve -30\r\nKPX Agrave Ohungarumlaut -30\r\nKPX Agrave Omacron -30\r\nKPX Agrave Oslash -30\r\nKPX Agrave Otilde -30\r\nKPX Agrave Q -30\r\nKPX Agrave T -120\r\nKPX Agrave Tcaron -120\r\nKPX Agrave Tcommaaccent -120\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -70\r\nKPX Agrave W -50\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -40\r\nKPX Agrave y -40\r\nKPX Agrave yacute -40\r\nKPX Agrave ydieresis -40\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -30\r\nKPX Amacron Gbreve -30\r\nKPX Amacron Gcommaaccent -30\r\nKPX Amacron O -30\r\nKPX Amacron Oacute -30\r\nKPX Amacron Ocircumflex -30\r\nKPX Amacron Odieresis -30\r\nKPX Amacron Ograve -30\r\nKPX Amacron Ohungarumlaut -30\r\nKPX Amacron Omacron -30\r\nKPX Amacron Oslash -30\r\nKPX Amacron Otilde -30\r\nKPX Amacron Q -30\r\nKPX Amacron T -120\r\nKPX Amacron Tcaron -120\r\nKPX Amacron Tcommaaccent -120\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -70\r\nKPX Amacron W -50\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -40\r\nKPX Amacron y -40\r\nKPX Amacron yacute -40\r\nKPX Amacron ydieresis -40\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -30\r\nKPX Aogonek Gbreve -30\r\nKPX Aogonek Gcommaaccent -30\r\nKPX Aogonek O -30\r\nKPX Aogonek Oacute -30\r\nKPX Aogonek Ocircumflex -30\r\nKPX Aogonek Odieresis -30\r\nKPX Aogonek Ograve -30\r\nKPX Aogonek Ohungarumlaut -30\r\nKPX Aogonek Omacron -30\r\nKPX Aogonek Oslash -30\r\nKPX Aogonek Otilde -30\r\nKPX Aogonek Q -30\r\nKPX Aogonek T -120\r\nKPX Aogonek Tcaron -120\r\nKPX Aogonek Tcommaaccent -120\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -70\r\nKPX Aogonek W -50\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -40\r\nKPX Aogonek y -40\r\nKPX Aogonek yacute -40\r\nKPX Aogonek ydieresis -40\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -30\r\nKPX Aring Gbreve -30\r\nKPX Aring Gcommaaccent -30\r\nKPX Aring O -30\r\nKPX Aring Oacute -30\r\nKPX Aring Ocircumflex -30\r\nKPX Aring Odieresis -30\r\nKPX Aring Ograve -30\r\nKPX Aring Ohungarumlaut -30\r\nKPX Aring Omacron -30\r\nKPX Aring Oslash -30\r\nKPX Aring Otilde -30\r\nKPX Aring Q -30\r\nKPX Aring T -120\r\nKPX Aring Tcaron -120\r\nKPX Aring Tcommaaccent -120\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -70\r\nKPX Aring W -50\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -40\r\nKPX Aring y -40\r\nKPX Aring yacute -40\r\nKPX Aring ydieresis -40\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -30\r\nKPX Atilde Gbreve -30\r\nKPX Atilde Gcommaaccent -30\r\nKPX Atilde O -30\r\nKPX Atilde Oacute -30\r\nKPX Atilde Ocircumflex -30\r\nKPX Atilde Odieresis -30\r\nKPX Atilde Ograve -30\r\nKPX Atilde Ohungarumlaut -30\r\nKPX Atilde Omacron -30\r\nKPX Atilde Oslash -30\r\nKPX Atilde Otilde -30\r\nKPX Atilde Q -30\r\nKPX Atilde T -120\r\nKPX Atilde Tcaron -120\r\nKPX Atilde Tcommaaccent -120\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -70\r\nKPX Atilde W -50\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -40\r\nKPX Atilde y -40\r\nKPX Atilde yacute -40\r\nKPX Atilde ydieresis -40\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX B comma -20\r\nKPX B period -20\r\nKPX C comma -30\r\nKPX C period -30\r\nKPX Cacute comma -30\r\nKPX Cacute period -30\r\nKPX Ccaron comma -30\r\nKPX Ccaron period -30\r\nKPX Ccedilla comma -30\r\nKPX Ccedilla period -30\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -70\r\nKPX D W -40\r\nKPX D Y -90\r\nKPX D Yacute -90\r\nKPX D Ydieresis -90\r\nKPX D comma -70\r\nKPX D period -70\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -70\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -90\r\nKPX Dcaron Yacute -90\r\nKPX Dcaron Ydieresis -90\r\nKPX Dcaron comma -70\r\nKPX Dcaron period -70\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -70\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -90\r\nKPX Dcroat Yacute -90\r\nKPX Dcroat Ydieresis -90\r\nKPX Dcroat comma -70\r\nKPX Dcroat period -70\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -50\r\nKPX F aacute -50\r\nKPX F abreve -50\r\nKPX F acircumflex -50\r\nKPX F adieresis -50\r\nKPX F agrave -50\r\nKPX F amacron -50\r\nKPX F aogonek -50\r\nKPX F aring -50\r\nKPX F atilde -50\r\nKPX F comma -150\r\nKPX F e -30\r\nKPX F eacute -30\r\nKPX F ecaron -30\r\nKPX F ecircumflex -30\r\nKPX F edieresis -30\r\nKPX F edotaccent -30\r\nKPX F egrave -30\r\nKPX F emacron -30\r\nKPX F eogonek -30\r\nKPX F o -30\r\nKPX F oacute -30\r\nKPX F ocircumflex -30\r\nKPX F odieresis -30\r\nKPX F ograve -30\r\nKPX F ohungarumlaut -30\r\nKPX F omacron -30\r\nKPX F oslash -30\r\nKPX F otilde -30\r\nKPX F period -150\r\nKPX F r -45\r\nKPX F racute -45\r\nKPX F rcaron -45\r\nKPX F rcommaaccent -45\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J a -20\r\nKPX J aacute -20\r\nKPX J abreve -20\r\nKPX J acircumflex -20\r\nKPX J adieresis -20\r\nKPX J agrave -20\r\nKPX J amacron -20\r\nKPX J aogonek -20\r\nKPX J aring -20\r\nKPX J atilde -20\r\nKPX J comma -30\r\nKPX J period -30\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -40\r\nKPX K eacute -40\r\nKPX K ecaron -40\r\nKPX K ecircumflex -40\r\nKPX K edieresis -40\r\nKPX K edotaccent -40\r\nKPX K egrave -40\r\nKPX K emacron -40\r\nKPX K eogonek -40\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -50\r\nKPX K yacute -50\r\nKPX K ydieresis -50\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -40\r\nKPX Kcommaaccent eacute -40\r\nKPX Kcommaaccent ecaron -40\r\nKPX Kcommaaccent ecircumflex -40\r\nKPX Kcommaaccent edieresis -40\r\nKPX Kcommaaccent edotaccent -40\r\nKPX Kcommaaccent egrave -40\r\nKPX Kcommaaccent emacron -40\r\nKPX Kcommaaccent eogonek -40\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -50\r\nKPX Kcommaaccent yacute -50\r\nKPX Kcommaaccent ydieresis -50\r\nKPX L T -110\r\nKPX L Tcaron -110\r\nKPX L Tcommaaccent -110\r\nKPX L V -110\r\nKPX L W -70\r\nKPX L Y -140\r\nKPX L Yacute -140\r\nKPX L Ydieresis -140\r\nKPX L quotedblright -140\r\nKPX L quoteright -160\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -110\r\nKPX Lacute Tcaron -110\r\nKPX Lacute Tcommaaccent -110\r\nKPX Lacute V -110\r\nKPX Lacute W -70\r\nKPX Lacute Y -140\r\nKPX Lacute Yacute -140\r\nKPX Lacute Ydieresis -140\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -160\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcaron T -110\r\nKPX Lcaron Tcaron -110\r\nKPX Lcaron Tcommaaccent -110\r\nKPX Lcaron V -110\r\nKPX Lcaron W -70\r\nKPX Lcaron Y -140\r\nKPX Lcaron Yacute -140\r\nKPX Lcaron Ydieresis -140\r\nKPX Lcaron quotedblright -140\r\nKPX Lcaron quoteright -160\r\nKPX Lcaron y -30\r\nKPX Lcaron yacute -30\r\nKPX Lcaron ydieresis -30\r\nKPX Lcommaaccent T -110\r\nKPX Lcommaaccent Tcaron -110\r\nKPX Lcommaaccent Tcommaaccent -110\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -70\r\nKPX Lcommaaccent Y -140\r\nKPX Lcommaaccent Yacute -140\r\nKPX Lcommaaccent Ydieresis -140\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -160\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -110\r\nKPX Lslash Tcaron -110\r\nKPX Lslash Tcommaaccent -110\r\nKPX Lslash V -110\r\nKPX Lslash W -70\r\nKPX Lslash Y -140\r\nKPX Lslash Yacute -140\r\nKPX Lslash Ydieresis -140\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -160\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -20\r\nKPX O Aacute -20\r\nKPX O Abreve -20\r\nKPX O Acircumflex -20\r\nKPX O Adieresis -20\r\nKPX O Agrave -20\r\nKPX O Amacron -20\r\nKPX O Aogonek -20\r\nKPX O Aring -20\r\nKPX O Atilde -20\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -30\r\nKPX O X -60\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -20\r\nKPX Oacute Aacute -20\r\nKPX Oacute Abreve -20\r\nKPX Oacute Acircumflex -20\r\nKPX Oacute Adieresis -20\r\nKPX Oacute Agrave -20\r\nKPX Oacute Amacron -20\r\nKPX Oacute Aogonek -20\r\nKPX Oacute Aring -20\r\nKPX Oacute Atilde -20\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -30\r\nKPX Oacute X -60\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -20\r\nKPX Ocircumflex Aacute -20\r\nKPX Ocircumflex Abreve -20\r\nKPX Ocircumflex Acircumflex -20\r\nKPX Ocircumflex Adieresis -20\r\nKPX Ocircumflex Agrave -20\r\nKPX Ocircumflex Amacron -20\r\nKPX Ocircumflex Aogonek -20\r\nKPX Ocircumflex Aring -20\r\nKPX Ocircumflex Atilde -20\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -30\r\nKPX Ocircumflex X -60\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -20\r\nKPX Odieresis Aacute -20\r\nKPX Odieresis Abreve -20\r\nKPX Odieresis Acircumflex -20\r\nKPX Odieresis Adieresis -20\r\nKPX Odieresis Agrave -20\r\nKPX Odieresis Amacron -20\r\nKPX Odieresis Aogonek -20\r\nKPX Odieresis Aring -20\r\nKPX Odieresis Atilde -20\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -30\r\nKPX Odieresis X -60\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -20\r\nKPX Ograve Aacute -20\r\nKPX Ograve Abreve -20\r\nKPX Ograve Acircumflex -20\r\nKPX Ograve Adieresis -20\r\nKPX Ograve Agrave -20\r\nKPX Ograve Amacron -20\r\nKPX Ograve Aogonek -20\r\nKPX Ograve Aring -20\r\nKPX Ograve Atilde -20\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -30\r\nKPX Ograve X -60\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -20\r\nKPX Ohungarumlaut Aacute -20\r\nKPX Ohungarumlaut Abreve -20\r\nKPX Ohungarumlaut Acircumflex -20\r\nKPX Ohungarumlaut Adieresis -20\r\nKPX Ohungarumlaut Agrave -20\r\nKPX Ohungarumlaut Amacron -20\r\nKPX Ohungarumlaut Aogonek -20\r\nKPX Ohungarumlaut Aring -20\r\nKPX Ohungarumlaut Atilde -20\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -30\r\nKPX Ohungarumlaut X -60\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -20\r\nKPX Omacron Aacute -20\r\nKPX Omacron Abreve -20\r\nKPX Omacron Acircumflex -20\r\nKPX Omacron Adieresis -20\r\nKPX Omacron Agrave -20\r\nKPX Omacron Amacron -20\r\nKPX Omacron Aogonek -20\r\nKPX Omacron Aring -20\r\nKPX Omacron Atilde -20\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -30\r\nKPX Omacron X -60\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -20\r\nKPX Oslash Aacute -20\r\nKPX Oslash Abreve -20\r\nKPX Oslash Acircumflex -20\r\nKPX Oslash Adieresis -20\r\nKPX Oslash Agrave -20\r\nKPX Oslash Amacron -20\r\nKPX Oslash Aogonek -20\r\nKPX Oslash Aring -20\r\nKPX Oslash Atilde -20\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -30\r\nKPX Oslash X -60\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -20\r\nKPX Otilde Aacute -20\r\nKPX Otilde Abreve -20\r\nKPX Otilde Acircumflex -20\r\nKPX Otilde Adieresis -20\r\nKPX Otilde Agrave -20\r\nKPX Otilde Amacron -20\r\nKPX Otilde Aogonek -20\r\nKPX Otilde Aring -20\r\nKPX Otilde Atilde -20\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -30\r\nKPX Otilde X -60\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -120\r\nKPX P Aacute -120\r\nKPX P Abreve -120\r\nKPX P Acircumflex -120\r\nKPX P Adieresis -120\r\nKPX P Agrave -120\r\nKPX P Amacron -120\r\nKPX P Aogonek -120\r\nKPX P Aring -120\r\nKPX P Atilde -120\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -180\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -50\r\nKPX P oacute -50\r\nKPX P ocircumflex -50\r\nKPX P odieresis -50\r\nKPX P ograve -50\r\nKPX P ohungarumlaut -50\r\nKPX P omacron -50\r\nKPX P oslash -50\r\nKPX P otilde -50\r\nKPX P period -180\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -50\r\nKPX R W -30\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -50\r\nKPX Racute W -30\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -50\r\nKPX Rcaron W -30\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -30\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX S comma -20\r\nKPX S period -20\r\nKPX Sacute comma -20\r\nKPX Sacute period -20\r\nKPX Scaron comma -20\r\nKPX Scaron period -20\r\nKPX Scedilla comma -20\r\nKPX Scedilla period -20\r\nKPX Scommaaccent comma -20\r\nKPX Scommaaccent period -20\r\nKPX T A -120\r\nKPX T Aacute -120\r\nKPX T Abreve -120\r\nKPX T Acircumflex -120\r\nKPX T Adieresis -120\r\nKPX T Agrave -120\r\nKPX T Amacron -120\r\nKPX T Aogonek -120\r\nKPX T Aring -120\r\nKPX T Atilde -120\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -120\r\nKPX T aacute -120\r\nKPX T abreve -60\r\nKPX T acircumflex -120\r\nKPX T adieresis -120\r\nKPX T agrave -120\r\nKPX T amacron -60\r\nKPX T aogonek -120\r\nKPX T aring -120\r\nKPX T atilde -60\r\nKPX T colon -20\r\nKPX T comma -120\r\nKPX T e -120\r\nKPX T eacute -120\r\nKPX T ecaron -120\r\nKPX T ecircumflex -120\r\nKPX T edieresis -120\r\nKPX T edotaccent -120\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -120\r\nKPX T hyphen -140\r\nKPX T o -120\r\nKPX T oacute -120\r\nKPX T ocircumflex -120\r\nKPX T odieresis -120\r\nKPX T ograve -120\r\nKPX T ohungarumlaut -120\r\nKPX T omacron -60\r\nKPX T oslash -120\r\nKPX T otilde -60\r\nKPX T period -120\r\nKPX T r -120\r\nKPX T racute -120\r\nKPX T rcaron -120\r\nKPX T rcommaaccent -120\r\nKPX T semicolon -20\r\nKPX T u -120\r\nKPX T uacute -120\r\nKPX T ucircumflex -120\r\nKPX T udieresis -120\r\nKPX T ugrave -120\r\nKPX T uhungarumlaut -120\r\nKPX T umacron -60\r\nKPX T uogonek -120\r\nKPX T uring -120\r\nKPX T w -120\r\nKPX T y -120\r\nKPX T yacute -120\r\nKPX T ydieresis -60\r\nKPX Tcaron A -120\r\nKPX Tcaron Aacute -120\r\nKPX Tcaron Abreve -120\r\nKPX Tcaron Acircumflex -120\r\nKPX Tcaron Adieresis -120\r\nKPX Tcaron Agrave -120\r\nKPX Tcaron Amacron -120\r\nKPX Tcaron Aogonek -120\r\nKPX Tcaron Aring -120\r\nKPX Tcaron Atilde -120\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -120\r\nKPX Tcaron aacute -120\r\nKPX Tcaron abreve -60\r\nKPX Tcaron acircumflex -120\r\nKPX Tcaron adieresis -120\r\nKPX Tcaron agrave -120\r\nKPX Tcaron amacron -60\r\nKPX Tcaron aogonek -120\r\nKPX Tcaron aring -120\r\nKPX Tcaron atilde -60\r\nKPX Tcaron colon -20\r\nKPX Tcaron comma -120\r\nKPX Tcaron e -120\r\nKPX Tcaron eacute -120\r\nKPX Tcaron ecaron -120\r\nKPX Tcaron ecircumflex -120\r\nKPX Tcaron edieresis -120\r\nKPX Tcaron edotaccent -120\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -120\r\nKPX Tcaron hyphen -140\r\nKPX Tcaron o -120\r\nKPX Tcaron oacute -120\r\nKPX Tcaron ocircumflex -120\r\nKPX Tcaron odieresis -120\r\nKPX Tcaron ograve -120\r\nKPX Tcaron ohungarumlaut -120\r\nKPX Tcaron omacron -60\r\nKPX Tcaron oslash -120\r\nKPX Tcaron otilde -60\r\nKPX Tcaron period -120\r\nKPX Tcaron r -120\r\nKPX Tcaron racute -120\r\nKPX Tcaron rcaron -120\r\nKPX Tcaron rcommaaccent -120\r\nKPX Tcaron semicolon -20\r\nKPX Tcaron u -120\r\nKPX Tcaron uacute -120\r\nKPX Tcaron ucircumflex -120\r\nKPX Tcaron udieresis -120\r\nKPX Tcaron ugrave -120\r\nKPX Tcaron uhungarumlaut -120\r\nKPX Tcaron umacron -60\r\nKPX Tcaron uogonek -120\r\nKPX Tcaron uring -120\r\nKPX Tcaron w -120\r\nKPX Tcaron y -120\r\nKPX Tcaron yacute -120\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -120\r\nKPX Tcommaaccent Aacute -120\r\nKPX Tcommaaccent Abreve -120\r\nKPX Tcommaaccent Acircumflex -120\r\nKPX Tcommaaccent Adieresis -120\r\nKPX Tcommaaccent Agrave -120\r\nKPX Tcommaaccent Amacron -120\r\nKPX Tcommaaccent Aogonek -120\r\nKPX Tcommaaccent Aring -120\r\nKPX Tcommaaccent Atilde -120\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -120\r\nKPX Tcommaaccent aacute -120\r\nKPX Tcommaaccent abreve -60\r\nKPX Tcommaaccent acircumflex -120\r\nKPX Tcommaaccent adieresis -120\r\nKPX Tcommaaccent agrave -120\r\nKPX Tcommaaccent amacron -60\r\nKPX Tcommaaccent aogonek -120\r\nKPX Tcommaaccent aring -120\r\nKPX Tcommaaccent atilde -60\r\nKPX Tcommaaccent colon -20\r\nKPX Tcommaaccent comma -120\r\nKPX Tcommaaccent e -120\r\nKPX Tcommaaccent eacute -120\r\nKPX Tcommaaccent ecaron -120\r\nKPX Tcommaaccent ecircumflex -120\r\nKPX Tcommaaccent edieresis -120\r\nKPX Tcommaaccent edotaccent -120\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -120\r\nKPX Tcommaaccent hyphen -140\r\nKPX Tcommaaccent o -120\r\nKPX Tcommaaccent oacute -120\r\nKPX Tcommaaccent ocircumflex -120\r\nKPX Tcommaaccent odieresis -120\r\nKPX Tcommaaccent ograve -120\r\nKPX Tcommaaccent ohungarumlaut -120\r\nKPX Tcommaaccent omacron -60\r\nKPX Tcommaaccent oslash -120\r\nKPX Tcommaaccent otilde -60\r\nKPX Tcommaaccent period -120\r\nKPX Tcommaaccent r -120\r\nKPX Tcommaaccent racute -120\r\nKPX Tcommaaccent rcaron -120\r\nKPX Tcommaaccent rcommaaccent -120\r\nKPX Tcommaaccent semicolon -20\r\nKPX Tcommaaccent u -120\r\nKPX Tcommaaccent uacute -120\r\nKPX Tcommaaccent ucircumflex -120\r\nKPX Tcommaaccent udieresis -120\r\nKPX Tcommaaccent ugrave -120\r\nKPX Tcommaaccent uhungarumlaut -120\r\nKPX Tcommaaccent umacron -60\r\nKPX Tcommaaccent uogonek -120\r\nKPX Tcommaaccent uring -120\r\nKPX Tcommaaccent w -120\r\nKPX Tcommaaccent y -120\r\nKPX Tcommaaccent yacute -120\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -40\r\nKPX U period -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -40\r\nKPX Uacute period -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -40\r\nKPX Ucircumflex period -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -40\r\nKPX Udieresis period -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -40\r\nKPX Ugrave period -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -40\r\nKPX Uhungarumlaut period -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -40\r\nKPX Umacron period -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -40\r\nKPX Uogonek period -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -40\r\nKPX Uring period -40\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -40\r\nKPX V Gbreve -40\r\nKPX V Gcommaaccent -40\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -70\r\nKPX V aacute -70\r\nKPX V abreve -70\r\nKPX V acircumflex -70\r\nKPX V adieresis -70\r\nKPX V agrave -70\r\nKPX V amacron -70\r\nKPX V aogonek -70\r\nKPX V aring -70\r\nKPX V atilde -70\r\nKPX V colon -40\r\nKPX V comma -125\r\nKPX V e -80\r\nKPX V eacute -80\r\nKPX V ecaron -80\r\nKPX V ecircumflex -80\r\nKPX V edieresis -80\r\nKPX V edotaccent -80\r\nKPX V egrave -80\r\nKPX V emacron -80\r\nKPX V eogonek -80\r\nKPX V hyphen -80\r\nKPX V o -80\r\nKPX V oacute -80\r\nKPX V ocircumflex -80\r\nKPX V odieresis -80\r\nKPX V ograve -80\r\nKPX V ohungarumlaut -80\r\nKPX V omacron -80\r\nKPX V oslash -80\r\nKPX V otilde -80\r\nKPX V period -125\r\nKPX V semicolon -40\r\nKPX V u -70\r\nKPX V uacute -70\r\nKPX V ucircumflex -70\r\nKPX V udieresis -70\r\nKPX V ugrave -70\r\nKPX V uhungarumlaut -70\r\nKPX V umacron -70\r\nKPX V uogonek -70\r\nKPX V uring -70\r\nKPX W A -50\r\nKPX W Aacute -50\r\nKPX W Abreve -50\r\nKPX W Acircumflex -50\r\nKPX W Adieresis -50\r\nKPX W Agrave -50\r\nKPX W Amacron -50\r\nKPX W Aogonek -50\r\nKPX W Aring -50\r\nKPX W Atilde -50\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W comma -80\r\nKPX W e -30\r\nKPX W eacute -30\r\nKPX W ecaron -30\r\nKPX W ecircumflex -30\r\nKPX W edieresis -30\r\nKPX W edotaccent -30\r\nKPX W egrave -30\r\nKPX W emacron -30\r\nKPX W eogonek -30\r\nKPX W hyphen -40\r\nKPX W o -30\r\nKPX W oacute -30\r\nKPX W ocircumflex -30\r\nKPX W odieresis -30\r\nKPX W ograve -30\r\nKPX W ohungarumlaut -30\r\nKPX W omacron -30\r\nKPX W oslash -30\r\nKPX W otilde -30\r\nKPX W period -80\r\nKPX W u -30\r\nKPX W uacute -30\r\nKPX W ucircumflex -30\r\nKPX W udieresis -30\r\nKPX W ugrave -30\r\nKPX W uhungarumlaut -30\r\nKPX W umacron -30\r\nKPX W uogonek -30\r\nKPX W uring -30\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -85\r\nKPX Y Oacute -85\r\nKPX Y Ocircumflex -85\r\nKPX Y Odieresis -85\r\nKPX Y Ograve -85\r\nKPX Y Ohungarumlaut -85\r\nKPX Y Omacron -85\r\nKPX Y Oslash -85\r\nKPX Y Otilde -85\r\nKPX Y a -140\r\nKPX Y aacute -140\r\nKPX Y abreve -70\r\nKPX Y acircumflex -140\r\nKPX Y adieresis -140\r\nKPX Y agrave -140\r\nKPX Y amacron -70\r\nKPX Y aogonek -140\r\nKPX Y aring -140\r\nKPX Y atilde -140\r\nKPX Y colon -60\r\nKPX Y comma -140\r\nKPX Y e -140\r\nKPX Y eacute -140\r\nKPX Y ecaron -140\r\nKPX Y ecircumflex -140\r\nKPX Y edieresis -140\r\nKPX Y edotaccent -140\r\nKPX Y egrave -140\r\nKPX Y emacron -70\r\nKPX Y eogonek -140\r\nKPX Y hyphen -140\r\nKPX Y i -20\r\nKPX Y iacute -20\r\nKPX Y iogonek -20\r\nKPX Y o -140\r\nKPX Y oacute -140\r\nKPX Y ocircumflex -140\r\nKPX Y odieresis -140\r\nKPX Y ograve -140\r\nKPX Y ohungarumlaut -140\r\nKPX Y omacron -140\r\nKPX Y oslash -140\r\nKPX Y otilde -140\r\nKPX Y period -140\r\nKPX Y semicolon -60\r\nKPX Y u -110\r\nKPX Y uacute -110\r\nKPX Y ucircumflex -110\r\nKPX Y udieresis -110\r\nKPX Y ugrave -110\r\nKPX Y uhungarumlaut -110\r\nKPX Y umacron -110\r\nKPX Y uogonek -110\r\nKPX Y uring -110\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -85\r\nKPX Yacute Oacute -85\r\nKPX Yacute Ocircumflex -85\r\nKPX Yacute Odieresis -85\r\nKPX Yacute Ograve -85\r\nKPX Yacute Ohungarumlaut -85\r\nKPX Yacute Omacron -85\r\nKPX Yacute Oslash -85\r\nKPX Yacute Otilde -85\r\nKPX Yacute a -140\r\nKPX Yacute aacute -140\r\nKPX Yacute abreve -70\r\nKPX Yacute acircumflex -140\r\nKPX Yacute adieresis -140\r\nKPX Yacute agrave -140\r\nKPX Yacute amacron -70\r\nKPX Yacute aogonek -140\r\nKPX Yacute aring -140\r\nKPX Yacute atilde -70\r\nKPX Yacute colon -60\r\nKPX Yacute comma -140\r\nKPX Yacute e -140\r\nKPX Yacute eacute -140\r\nKPX Yacute ecaron -140\r\nKPX Yacute ecircumflex -140\r\nKPX Yacute edieresis -140\r\nKPX Yacute edotaccent -140\r\nKPX Yacute egrave -140\r\nKPX Yacute emacron -70\r\nKPX Yacute eogonek -140\r\nKPX Yacute hyphen -140\r\nKPX Yacute i -20\r\nKPX Yacute iacute -20\r\nKPX Yacute iogonek -20\r\nKPX Yacute o -140\r\nKPX Yacute oacute -140\r\nKPX Yacute ocircumflex -140\r\nKPX Yacute odieresis -140\r\nKPX Yacute ograve -140\r\nKPX Yacute ohungarumlaut -140\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -140\r\nKPX Yacute otilde -140\r\nKPX Yacute period -140\r\nKPX Yacute semicolon -60\r\nKPX Yacute u -110\r\nKPX Yacute uacute -110\r\nKPX Yacute ucircumflex -110\r\nKPX Yacute udieresis -110\r\nKPX Yacute ugrave -110\r\nKPX Yacute uhungarumlaut -110\r\nKPX Yacute umacron -110\r\nKPX Yacute uogonek -110\r\nKPX Yacute uring -110\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -85\r\nKPX Ydieresis Oacute -85\r\nKPX Ydieresis Ocircumflex -85\r\nKPX Ydieresis Odieresis -85\r\nKPX Ydieresis Ograve -85\r\nKPX Ydieresis Ohungarumlaut -85\r\nKPX Ydieresis Omacron -85\r\nKPX Ydieresis Oslash -85\r\nKPX Ydieresis Otilde -85\r\nKPX Ydieresis a -140\r\nKPX Ydieresis aacute -140\r\nKPX Ydieresis abreve -70\r\nKPX Ydieresis acircumflex -140\r\nKPX Ydieresis adieresis -140\r\nKPX Ydieresis agrave -140\r\nKPX Ydieresis amacron -70\r\nKPX Ydieresis aogonek -140\r\nKPX Ydieresis aring -140\r\nKPX Ydieresis atilde -70\r\nKPX Ydieresis colon -60\r\nKPX Ydieresis comma -140\r\nKPX Ydieresis e -140\r\nKPX Ydieresis eacute -140\r\nKPX Ydieresis ecaron -140\r\nKPX Ydieresis ecircumflex -140\r\nKPX Ydieresis edieresis -140\r\nKPX Ydieresis edotaccent -140\r\nKPX Ydieresis egrave -140\r\nKPX Ydieresis emacron -70\r\nKPX Ydieresis eogonek -140\r\nKPX Ydieresis hyphen -140\r\nKPX Ydieresis i -20\r\nKPX Ydieresis iacute -20\r\nKPX Ydieresis iogonek -20\r\nKPX Ydieresis o -140\r\nKPX Ydieresis oacute -140\r\nKPX Ydieresis ocircumflex -140\r\nKPX Ydieresis odieresis -140\r\nKPX Ydieresis ograve -140\r\nKPX Ydieresis ohungarumlaut -140\r\nKPX Ydieresis omacron -140\r\nKPX Ydieresis oslash -140\r\nKPX Ydieresis otilde -140\r\nKPX Ydieresis period -140\r\nKPX Ydieresis semicolon -60\r\nKPX Ydieresis u -110\r\nKPX Ydieresis uacute -110\r\nKPX Ydieresis ucircumflex -110\r\nKPX Ydieresis udieresis -110\r\nKPX Ydieresis ugrave -110\r\nKPX Ydieresis uhungarumlaut -110\r\nKPX Ydieresis umacron -110\r\nKPX Ydieresis uogonek -110\r\nKPX Ydieresis uring -110\r\nKPX a v -20\r\nKPX a w -20\r\nKPX a y -30\r\nKPX a yacute -30\r\nKPX a ydieresis -30\r\nKPX aacute v -20\r\nKPX aacute w -20\r\nKPX aacute y -30\r\nKPX aacute yacute -30\r\nKPX aacute ydieresis -30\r\nKPX abreve v -20\r\nKPX abreve w -20\r\nKPX abreve y -30\r\nKPX abreve yacute -30\r\nKPX abreve ydieresis -30\r\nKPX acircumflex v -20\r\nKPX acircumflex w -20\r\nKPX acircumflex y -30\r\nKPX acircumflex yacute -30\r\nKPX acircumflex ydieresis -30\r\nKPX adieresis v -20\r\nKPX adieresis w -20\r\nKPX adieresis y -30\r\nKPX adieresis yacute -30\r\nKPX adieresis ydieresis -30\r\nKPX agrave v -20\r\nKPX agrave w -20\r\nKPX agrave y -30\r\nKPX agrave yacute -30\r\nKPX agrave ydieresis -30\r\nKPX amacron v -20\r\nKPX amacron w -20\r\nKPX amacron y -30\r\nKPX amacron yacute -30\r\nKPX amacron ydieresis -30\r\nKPX aogonek v -20\r\nKPX aogonek w -20\r\nKPX aogonek y -30\r\nKPX aogonek yacute -30\r\nKPX aogonek ydieresis -30\r\nKPX aring v -20\r\nKPX aring w -20\r\nKPX aring y -30\r\nKPX aring yacute -30\r\nKPX aring ydieresis -30\r\nKPX atilde v -20\r\nKPX atilde w -20\r\nKPX atilde y -30\r\nKPX atilde yacute -30\r\nKPX atilde ydieresis -30\r\nKPX b b -10\r\nKPX b comma -40\r\nKPX b l -20\r\nKPX b lacute -20\r\nKPX b lcommaaccent -20\r\nKPX b lslash -20\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c comma -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute comma -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron comma -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla comma -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX colon space -50\r\nKPX comma quotedblright -100\r\nKPX comma quoteright -100\r\nKPX e comma -15\r\nKPX e period -15\r\nKPX e v -30\r\nKPX e w -20\r\nKPX e x -30\r\nKPX e y -20\r\nKPX e yacute -20\r\nKPX e ydieresis -20\r\nKPX eacute comma -15\r\nKPX eacute period -15\r\nKPX eacute v -30\r\nKPX eacute w -20\r\nKPX eacute x -30\r\nKPX eacute y -20\r\nKPX eacute yacute -20\r\nKPX eacute ydieresis -20\r\nKPX ecaron comma -15\r\nKPX ecaron period -15\r\nKPX ecaron v -30\r\nKPX ecaron w -20\r\nKPX ecaron x -30\r\nKPX ecaron y -20\r\nKPX ecaron yacute -20\r\nKPX ecaron ydieresis -20\r\nKPX ecircumflex comma -15\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -30\r\nKPX ecircumflex w -20\r\nKPX ecircumflex x -30\r\nKPX ecircumflex y -20\r\nKPX ecircumflex yacute -20\r\nKPX ecircumflex ydieresis -20\r\nKPX edieresis comma -15\r\nKPX edieresis period -15\r\nKPX edieresis v -30\r\nKPX edieresis w -20\r\nKPX edieresis x -30\r\nKPX edieresis y -20\r\nKPX edieresis yacute -20\r\nKPX edieresis ydieresis -20\r\nKPX edotaccent comma -15\r\nKPX edotaccent period -15\r\nKPX edotaccent v -30\r\nKPX edotaccent w -20\r\nKPX edotaccent x -30\r\nKPX edotaccent y -20\r\nKPX edotaccent yacute -20\r\nKPX edotaccent ydieresis -20\r\nKPX egrave comma -15\r\nKPX egrave period -15\r\nKPX egrave v -30\r\nKPX egrave w -20\r\nKPX egrave x -30\r\nKPX egrave y -20\r\nKPX egrave yacute -20\r\nKPX egrave ydieresis -20\r\nKPX emacron comma -15\r\nKPX emacron period -15\r\nKPX emacron v -30\r\nKPX emacron w -20\r\nKPX emacron x -30\r\nKPX emacron y -20\r\nKPX emacron yacute -20\r\nKPX emacron ydieresis -20\r\nKPX eogonek comma -15\r\nKPX eogonek period -15\r\nKPX eogonek v -30\r\nKPX eogonek w -20\r\nKPX eogonek x -30\r\nKPX eogonek y -20\r\nKPX eogonek yacute -20\r\nKPX eogonek ydieresis -20\r\nKPX f a -30\r\nKPX f aacute -30\r\nKPX f abreve -30\r\nKPX f acircumflex -30\r\nKPX f adieresis -30\r\nKPX f agrave -30\r\nKPX f amacron -30\r\nKPX f aogonek -30\r\nKPX f aring -30\r\nKPX f atilde -30\r\nKPX f comma -30\r\nKPX f dotlessi -28\r\nKPX f e -30\r\nKPX f eacute -30\r\nKPX f ecaron -30\r\nKPX f ecircumflex -30\r\nKPX f edieresis -30\r\nKPX f edotaccent -30\r\nKPX f egrave -30\r\nKPX f emacron -30\r\nKPX f eogonek -30\r\nKPX f o -30\r\nKPX f oacute -30\r\nKPX f ocircumflex -30\r\nKPX f odieresis -30\r\nKPX f ograve -30\r\nKPX f ohungarumlaut -30\r\nKPX f omacron -30\r\nKPX f oslash -30\r\nKPX f otilde -30\r\nKPX f period -30\r\nKPX f quotedblright 60\r\nKPX f quoteright 50\r\nKPX g r -10\r\nKPX g racute -10\r\nKPX g rcaron -10\r\nKPX g rcommaaccent -10\r\nKPX gbreve r -10\r\nKPX gbreve racute -10\r\nKPX gbreve rcaron -10\r\nKPX gbreve rcommaaccent -10\r\nKPX gcommaaccent r -10\r\nKPX gcommaaccent racute -10\r\nKPX gcommaaccent rcaron -10\r\nKPX gcommaaccent rcommaaccent -10\r\nKPX h y -30\r\nKPX h yacute -30\r\nKPX h ydieresis -30\r\nKPX k e -20\r\nKPX k eacute -20\r\nKPX k ecaron -20\r\nKPX k ecircumflex -20\r\nKPX k edieresis -20\r\nKPX k edotaccent -20\r\nKPX k egrave -20\r\nKPX k emacron -20\r\nKPX k eogonek -20\r\nKPX k o -20\r\nKPX k oacute -20\r\nKPX k ocircumflex -20\r\nKPX k odieresis -20\r\nKPX k ograve -20\r\nKPX k ohungarumlaut -20\r\nKPX k omacron -20\r\nKPX k oslash -20\r\nKPX k otilde -20\r\nKPX kcommaaccent e -20\r\nKPX kcommaaccent eacute -20\r\nKPX kcommaaccent ecaron -20\r\nKPX kcommaaccent ecircumflex -20\r\nKPX kcommaaccent edieresis -20\r\nKPX kcommaaccent edotaccent -20\r\nKPX kcommaaccent egrave -20\r\nKPX kcommaaccent emacron -20\r\nKPX kcommaaccent eogonek -20\r\nKPX kcommaaccent o -20\r\nKPX kcommaaccent oacute -20\r\nKPX kcommaaccent ocircumflex -20\r\nKPX kcommaaccent odieresis -20\r\nKPX kcommaaccent ograve -20\r\nKPX kcommaaccent ohungarumlaut -20\r\nKPX kcommaaccent omacron -20\r\nKPX kcommaaccent oslash -20\r\nKPX kcommaaccent otilde -20\r\nKPX m u -10\r\nKPX m uacute -10\r\nKPX m ucircumflex -10\r\nKPX m udieresis -10\r\nKPX m ugrave -10\r\nKPX m uhungarumlaut -10\r\nKPX m umacron -10\r\nKPX m uogonek -10\r\nKPX m uring -10\r\nKPX m y -15\r\nKPX m yacute -15\r\nKPX m ydieresis -15\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -20\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -20\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -20\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -20\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -20\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o comma -40\r\nKPX o period -40\r\nKPX o v -15\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -30\r\nKPX o yacute -30\r\nKPX o ydieresis -30\r\nKPX oacute comma -40\r\nKPX oacute period -40\r\nKPX oacute v -15\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -30\r\nKPX oacute yacute -30\r\nKPX oacute ydieresis -30\r\nKPX ocircumflex comma -40\r\nKPX ocircumflex period -40\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -30\r\nKPX ocircumflex yacute -30\r\nKPX ocircumflex ydieresis -30\r\nKPX odieresis comma -40\r\nKPX odieresis period -40\r\nKPX odieresis v -15\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -30\r\nKPX odieresis yacute -30\r\nKPX odieresis ydieresis -30\r\nKPX ograve comma -40\r\nKPX ograve period -40\r\nKPX ograve v -15\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -30\r\nKPX ograve yacute -30\r\nKPX ograve ydieresis -30\r\nKPX ohungarumlaut comma -40\r\nKPX ohungarumlaut period -40\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -30\r\nKPX ohungarumlaut yacute -30\r\nKPX ohungarumlaut ydieresis -30\r\nKPX omacron comma -40\r\nKPX omacron period -40\r\nKPX omacron v -15\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -30\r\nKPX omacron yacute -30\r\nKPX omacron ydieresis -30\r\nKPX oslash a -55\r\nKPX oslash aacute -55\r\nKPX oslash abreve -55\r\nKPX oslash acircumflex -55\r\nKPX oslash adieresis -55\r\nKPX oslash agrave -55\r\nKPX oslash amacron -55\r\nKPX oslash aogonek -55\r\nKPX oslash aring -55\r\nKPX oslash atilde -55\r\nKPX oslash b -55\r\nKPX oslash c -55\r\nKPX oslash cacute -55\r\nKPX oslash ccaron -55\r\nKPX oslash ccedilla -55\r\nKPX oslash comma -95\r\nKPX oslash d -55\r\nKPX oslash dcroat -55\r\nKPX oslash e -55\r\nKPX oslash eacute -55\r\nKPX oslash ecaron -55\r\nKPX oslash ecircumflex -55\r\nKPX oslash edieresis -55\r\nKPX oslash edotaccent -55\r\nKPX oslash egrave -55\r\nKPX oslash emacron -55\r\nKPX oslash eogonek -55\r\nKPX oslash f -55\r\nKPX oslash g -55\r\nKPX oslash gbreve -55\r\nKPX oslash gcommaaccent -55\r\nKPX oslash h -55\r\nKPX oslash i -55\r\nKPX oslash iacute -55\r\nKPX oslash icircumflex -55\r\nKPX oslash idieresis -55\r\nKPX oslash igrave -55\r\nKPX oslash imacron -55\r\nKPX oslash iogonek -55\r\nKPX oslash j -55\r\nKPX oslash k -55\r\nKPX oslash kcommaaccent -55\r\nKPX oslash l -55\r\nKPX oslash lacute -55\r\nKPX oslash lcommaaccent -55\r\nKPX oslash lslash -55\r\nKPX oslash m -55\r\nKPX oslash n -55\r\nKPX oslash nacute -55\r\nKPX oslash ncaron -55\r\nKPX oslash ncommaaccent -55\r\nKPX oslash ntilde -55\r\nKPX oslash o -55\r\nKPX oslash oacute -55\r\nKPX oslash ocircumflex -55\r\nKPX oslash odieresis -55\r\nKPX oslash ograve -55\r\nKPX oslash ohungarumlaut -55\r\nKPX oslash omacron -55\r\nKPX oslash oslash -55\r\nKPX oslash otilde -55\r\nKPX oslash p -55\r\nKPX oslash period -95\r\nKPX oslash q -55\r\nKPX oslash r -55\r\nKPX oslash racute -55\r\nKPX oslash rcaron -55\r\nKPX oslash rcommaaccent -55\r\nKPX oslash s -55\r\nKPX oslash sacute -55\r\nKPX oslash scaron -55\r\nKPX oslash scedilla -55\r\nKPX oslash scommaaccent -55\r\nKPX oslash t -55\r\nKPX oslash tcommaaccent -55\r\nKPX oslash u -55\r\nKPX oslash uacute -55\r\nKPX oslash ucircumflex -55\r\nKPX oslash udieresis -55\r\nKPX oslash ugrave -55\r\nKPX oslash uhungarumlaut -55\r\nKPX oslash umacron -55\r\nKPX oslash uogonek -55\r\nKPX oslash uring -55\r\nKPX oslash v -70\r\nKPX oslash w -70\r\nKPX oslash x -85\r\nKPX oslash y -70\r\nKPX oslash yacute -70\r\nKPX oslash ydieresis -70\r\nKPX oslash z -55\r\nKPX oslash zacute -55\r\nKPX oslash zcaron -55\r\nKPX oslash zdotaccent -55\r\nKPX otilde comma -40\r\nKPX otilde period -40\r\nKPX otilde v -15\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -30\r\nKPX otilde yacute -30\r\nKPX otilde ydieresis -30\r\nKPX p comma -35\r\nKPX p period -35\r\nKPX p y -30\r\nKPX p yacute -30\r\nKPX p ydieresis -30\r\nKPX period quotedblright -100\r\nKPX period quoteright -100\r\nKPX period space -60\r\nKPX quotedblright space -40\r\nKPX quoteleft quoteleft -57\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright quoteright -57\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -50\r\nKPX quoteright sacute -50\r\nKPX quoteright scaron -50\r\nKPX quoteright scedilla -50\r\nKPX quoteright scommaaccent -50\r\nKPX quoteright space -70\r\nKPX r a -10\r\nKPX r aacute -10\r\nKPX r abreve -10\r\nKPX r acircumflex -10\r\nKPX r adieresis -10\r\nKPX r agrave -10\r\nKPX r amacron -10\r\nKPX r aogonek -10\r\nKPX r aring -10\r\nKPX r atilde -10\r\nKPX r colon 30\r\nKPX r comma -50\r\nKPX r i 15\r\nKPX r iacute 15\r\nKPX r icircumflex 15\r\nKPX r idieresis 15\r\nKPX r igrave 15\r\nKPX r imacron 15\r\nKPX r iogonek 15\r\nKPX r k 15\r\nKPX r kcommaaccent 15\r\nKPX r l 15\r\nKPX r lacute 15\r\nKPX r lcommaaccent 15\r\nKPX r lslash 15\r\nKPX r m 25\r\nKPX r n 25\r\nKPX r nacute 25\r\nKPX r ncaron 25\r\nKPX r ncommaaccent 25\r\nKPX r ntilde 25\r\nKPX r p 30\r\nKPX r period -50\r\nKPX r semicolon 30\r\nKPX r t 40\r\nKPX r tcommaaccent 40\r\nKPX r u 15\r\nKPX r uacute 15\r\nKPX r ucircumflex 15\r\nKPX r udieresis 15\r\nKPX r ugrave 15\r\nKPX r uhungarumlaut 15\r\nKPX r umacron 15\r\nKPX r uogonek 15\r\nKPX r uring 15\r\nKPX r v 30\r\nKPX r y 30\r\nKPX r yacute 30\r\nKPX r ydieresis 30\r\nKPX racute a -10\r\nKPX racute aacute -10\r\nKPX racute abreve -10\r\nKPX racute acircumflex -10\r\nKPX racute adieresis -10\r\nKPX racute agrave -10\r\nKPX racute amacron -10\r\nKPX racute aogonek -10\r\nKPX racute aring -10\r\nKPX racute atilde -10\r\nKPX racute colon 30\r\nKPX racute comma -50\r\nKPX racute i 15\r\nKPX racute iacute 15\r\nKPX racute icircumflex 15\r\nKPX racute idieresis 15\r\nKPX racute igrave 15\r\nKPX racute imacron 15\r\nKPX racute iogonek 15\r\nKPX racute k 15\r\nKPX racute kcommaaccent 15\r\nKPX racute l 15\r\nKPX racute lacute 15\r\nKPX racute lcommaaccent 15\r\nKPX racute lslash 15\r\nKPX racute m 25\r\nKPX racute n 25\r\nKPX racute nacute 25\r\nKPX racute ncaron 25\r\nKPX racute ncommaaccent 25\r\nKPX racute ntilde 25\r\nKPX racute p 30\r\nKPX racute period -50\r\nKPX racute semicolon 30\r\nKPX racute t 40\r\nKPX racute tcommaaccent 40\r\nKPX racute u 15\r\nKPX racute uacute 15\r\nKPX racute ucircumflex 15\r\nKPX racute udieresis 15\r\nKPX racute ugrave 15\r\nKPX racute uhungarumlaut 15\r\nKPX racute umacron 15\r\nKPX racute uogonek 15\r\nKPX racute uring 15\r\nKPX racute v 30\r\nKPX racute y 30\r\nKPX racute yacute 30\r\nKPX racute ydieresis 30\r\nKPX rcaron a -10\r\nKPX rcaron aacute -10\r\nKPX rcaron abreve -10\r\nKPX rcaron acircumflex -10\r\nKPX rcaron adieresis -10\r\nKPX rcaron agrave -10\r\nKPX rcaron amacron -10\r\nKPX rcaron aogonek -10\r\nKPX rcaron aring -10\r\nKPX rcaron atilde -10\r\nKPX rcaron colon 30\r\nKPX rcaron comma -50\r\nKPX rcaron i 15\r\nKPX rcaron iacute 15\r\nKPX rcaron icircumflex 15\r\nKPX rcaron idieresis 15\r\nKPX rcaron igrave 15\r\nKPX rcaron imacron 15\r\nKPX rcaron iogonek 15\r\nKPX rcaron k 15\r\nKPX rcaron kcommaaccent 15\r\nKPX rcaron l 15\r\nKPX rcaron lacute 15\r\nKPX rcaron lcommaaccent 15\r\nKPX rcaron lslash 15\r\nKPX rcaron m 25\r\nKPX rcaron n 25\r\nKPX rcaron nacute 25\r\nKPX rcaron ncaron 25\r\nKPX rcaron ncommaaccent 25\r\nKPX rcaron ntilde 25\r\nKPX rcaron p 30\r\nKPX rcaron period -50\r\nKPX rcaron semicolon 30\r\nKPX rcaron t 40\r\nKPX rcaron tcommaaccent 40\r\nKPX rcaron u 15\r\nKPX rcaron uacute 15\r\nKPX rcaron ucircumflex 15\r\nKPX rcaron udieresis 15\r\nKPX rcaron ugrave 15\r\nKPX rcaron uhungarumlaut 15\r\nKPX rcaron umacron 15\r\nKPX rcaron uogonek 15\r\nKPX rcaron uring 15\r\nKPX rcaron v 30\r\nKPX rcaron y 30\r\nKPX rcaron yacute 30\r\nKPX rcaron ydieresis 30\r\nKPX rcommaaccent a -10\r\nKPX rcommaaccent aacute -10\r\nKPX rcommaaccent abreve -10\r\nKPX rcommaaccent acircumflex -10\r\nKPX rcommaaccent adieresis -10\r\nKPX rcommaaccent agrave -10\r\nKPX rcommaaccent amacron -10\r\nKPX rcommaaccent aogonek -10\r\nKPX rcommaaccent aring -10\r\nKPX rcommaaccent atilde -10\r\nKPX rcommaaccent colon 30\r\nKPX rcommaaccent comma -50\r\nKPX rcommaaccent i 15\r\nKPX rcommaaccent iacute 15\r\nKPX rcommaaccent icircumflex 15\r\nKPX rcommaaccent idieresis 15\r\nKPX rcommaaccent igrave 15\r\nKPX rcommaaccent imacron 15\r\nKPX rcommaaccent iogonek 15\r\nKPX rcommaaccent k 15\r\nKPX rcommaaccent kcommaaccent 15\r\nKPX rcommaaccent l 15\r\nKPX rcommaaccent lacute 15\r\nKPX rcommaaccent lcommaaccent 15\r\nKPX rcommaaccent lslash 15\r\nKPX rcommaaccent m 25\r\nKPX rcommaaccent n 25\r\nKPX rcommaaccent nacute 25\r\nKPX rcommaaccent ncaron 25\r\nKPX rcommaaccent ncommaaccent 25\r\nKPX rcommaaccent ntilde 25\r\nKPX rcommaaccent p 30\r\nKPX rcommaaccent period -50\r\nKPX rcommaaccent semicolon 30\r\nKPX rcommaaccent t 40\r\nKPX rcommaaccent tcommaaccent 40\r\nKPX rcommaaccent u 15\r\nKPX rcommaaccent uacute 15\r\nKPX rcommaaccent ucircumflex 15\r\nKPX rcommaaccent udieresis 15\r\nKPX rcommaaccent ugrave 15\r\nKPX rcommaaccent uhungarumlaut 15\r\nKPX rcommaaccent umacron 15\r\nKPX rcommaaccent uogonek 15\r\nKPX rcommaaccent uring 15\r\nKPX rcommaaccent v 30\r\nKPX rcommaaccent y 30\r\nKPX rcommaaccent yacute 30\r\nKPX rcommaaccent ydieresis 30\r\nKPX s comma -15\r\nKPX s period -15\r\nKPX s w -30\r\nKPX sacute comma -15\r\nKPX sacute period -15\r\nKPX sacute w -30\r\nKPX scaron comma -15\r\nKPX scaron period -15\r\nKPX scaron w -30\r\nKPX scedilla comma -15\r\nKPX scedilla period -15\r\nKPX scedilla w -30\r\nKPX scommaaccent comma -15\r\nKPX scommaaccent period -15\r\nKPX scommaaccent w -30\r\nKPX semicolon space -50\r\nKPX space T -50\r\nKPX space Tcaron -50\r\nKPX space Tcommaaccent -50\r\nKPX space V -50\r\nKPX space W -40\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX space quotedblleft -30\r\nKPX space quoteleft -60\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -80\r\nKPX v e -25\r\nKPX v eacute -25\r\nKPX v ecaron -25\r\nKPX v ecircumflex -25\r\nKPX v edieresis -25\r\nKPX v edotaccent -25\r\nKPX v egrave -25\r\nKPX v emacron -25\r\nKPX v eogonek -25\r\nKPX v o -25\r\nKPX v oacute -25\r\nKPX v ocircumflex -25\r\nKPX v odieresis -25\r\nKPX v ograve -25\r\nKPX v ohungarumlaut -25\r\nKPX v omacron -25\r\nKPX v oslash -25\r\nKPX v otilde -25\r\nKPX v period -80\r\nKPX w a -15\r\nKPX w aacute -15\r\nKPX w abreve -15\r\nKPX w acircumflex -15\r\nKPX w adieresis -15\r\nKPX w agrave -15\r\nKPX w amacron -15\r\nKPX w aogonek -15\r\nKPX w aring -15\r\nKPX w atilde -15\r\nKPX w comma -60\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -60\r\nKPX x e -30\r\nKPX x eacute -30\r\nKPX x ecaron -30\r\nKPX x ecircumflex -30\r\nKPX x edieresis -30\r\nKPX x edotaccent -30\r\nKPX x egrave -30\r\nKPX x emacron -30\r\nKPX x eogonek -30\r\nKPX y a -20\r\nKPX y aacute -20\r\nKPX y abreve -20\r\nKPX y acircumflex -20\r\nKPX y adieresis -20\r\nKPX y agrave -20\r\nKPX y amacron -20\r\nKPX y aogonek -20\r\nKPX y aring -20\r\nKPX y atilde -20\r\nKPX y comma -100\r\nKPX y e -20\r\nKPX y eacute -20\r\nKPX y ecaron -20\r\nKPX y ecircumflex -20\r\nKPX y edieresis -20\r\nKPX y edotaccent -20\r\nKPX y egrave -20\r\nKPX y emacron -20\r\nKPX y eogonek -20\r\nKPX y o -20\r\nKPX y oacute -20\r\nKPX y ocircumflex -20\r\nKPX y odieresis -20\r\nKPX y ograve -20\r\nKPX y ohungarumlaut -20\r\nKPX y omacron -20\r\nKPX y oslash -20\r\nKPX y otilde -20\r\nKPX y period -100\r\nKPX yacute a -20\r\nKPX yacute aacute -20\r\nKPX yacute abreve -20\r\nKPX yacute acircumflex -20\r\nKPX yacute adieresis -20\r\nKPX yacute agrave -20\r\nKPX yacute amacron -20\r\nKPX yacute aogonek -20\r\nKPX yacute aring -20\r\nKPX yacute atilde -20\r\nKPX yacute comma -100\r\nKPX yacute e -20\r\nKPX yacute eacute -20\r\nKPX yacute ecaron -20\r\nKPX yacute ecircumflex -20\r\nKPX yacute edieresis -20\r\nKPX yacute edotaccent -20\r\nKPX yacute egrave -20\r\nKPX yacute emacron -20\r\nKPX yacute eogonek -20\r\nKPX yacute o -20\r\nKPX yacute oacute -20\r\nKPX yacute ocircumflex -20\r\nKPX yacute odieresis -20\r\nKPX yacute ograve -20\r\nKPX yacute ohungarumlaut -20\r\nKPX yacute omacron -20\r\nKPX yacute oslash -20\r\nKPX yacute otilde -20\r\nKPX yacute period -100\r\nKPX ydieresis a -20\r\nKPX ydieresis aacute -20\r\nKPX ydieresis abreve -20\r\nKPX ydieresis acircumflex -20\r\nKPX ydieresis adieresis -20\r\nKPX ydieresis agrave -20\r\nKPX ydieresis amacron -20\r\nKPX ydieresis aogonek -20\r\nKPX ydieresis aring -20\r\nKPX ydieresis atilde -20\r\nKPX ydieresis comma -100\r\nKPX ydieresis e -20\r\nKPX ydieresis eacute -20\r\nKPX ydieresis ecaron -20\r\nKPX ydieresis ecircumflex -20\r\nKPX ydieresis edieresis -20\r\nKPX ydieresis edotaccent -20\r\nKPX ydieresis egrave -20\r\nKPX ydieresis emacron -20\r\nKPX ydieresis eogonek -20\r\nKPX ydieresis o -20\r\nKPX ydieresis oacute -20\r\nKPX ydieresis ocircumflex -20\r\nKPX ydieresis odieresis -20\r\nKPX ydieresis ograve -20\r\nKPX ydieresis ohungarumlaut -20\r\nKPX ydieresis omacron -20\r\nKPX ydieresis oslash -20\r\nKPX ydieresis otilde -20\r\nKPX ydieresis period -100\r\nKPX z e -15\r\nKPX z eacute -15\r\nKPX z ecaron -15\r\nKPX z ecircumflex -15\r\nKPX z edieresis -15\r\nKPX z edotaccent -15\r\nKPX z egrave -15\r\nKPX z emacron -15\r\nKPX z eogonek -15\r\nKPX z o -15\r\nKPX z oacute -15\r\nKPX z ocircumflex -15\r\nKPX z odieresis -15\r\nKPX z ograve -15\r\nKPX z ohungarumlaut -15\r\nKPX z omacron -15\r\nKPX z oslash -15\r\nKPX z otilde -15\r\nKPX zacute e -15\r\nKPX zacute eacute -15\r\nKPX zacute ecaron -15\r\nKPX zacute ecircumflex -15\r\nKPX zacute edieresis -15\r\nKPX zacute edotaccent -15\r\nKPX zacute egrave -15\r\nKPX zacute emacron -15\r\nKPX zacute eogonek -15\r\nKPX zacute o -15\r\nKPX zacute oacute -15\r\nKPX zacute ocircumflex -15\r\nKPX zacute odieresis -15\r\nKPX zacute ograve -15\r\nKPX zacute ohungarumlaut -15\r\nKPX zacute omacron -15\r\nKPX zacute oslash -15\r\nKPX zacute otilde -15\r\nKPX zcaron e -15\r\nKPX zcaron eacute -15\r\nKPX zcaron ecaron -15\r\nKPX zcaron ecircumflex -15\r\nKPX zcaron edieresis -15\r\nKPX zcaron edotaccent -15\r\nKPX zcaron egrave -15\r\nKPX zcaron emacron -15\r\nKPX zcaron eogonek -15\r\nKPX zcaron o -15\r\nKPX zcaron oacute -15\r\nKPX zcaron ocircumflex -15\r\nKPX zcaron odieresis -15\r\nKPX zcaron ograve -15\r\nKPX zcaron ohungarumlaut -15\r\nKPX zcaron omacron -15\r\nKPX zcaron oslash -15\r\nKPX zcaron otilde -15\r\nKPX zdotaccent e -15\r\nKPX zdotaccent eacute -15\r\nKPX zdotaccent ecaron -15\r\nKPX zdotaccent ecircumflex -15\r\nKPX zdotaccent edieresis -15\r\nKPX zdotaccent edotaccent -15\r\nKPX zdotaccent egrave -15\r\nKPX zdotaccent emacron -15\r\nKPX zdotaccent eogonek -15\r\nKPX zdotaccent o -15\r\nKPX zdotaccent oacute -15\r\nKPX zdotaccent ocircumflex -15\r\nKPX zdotaccent odieresis -15\r\nKPX zdotaccent ograve -15\r\nKPX zdotaccent ohungarumlaut -15\r\nKPX zdotaccent omacron -15\r\nKPX zdotaccent oslash -15\r\nKPX zdotaccent otilde -15\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Helvetica-BoldOblique'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:45:12 1997\r\nComment UniqueID 43053\r\nComment VMusage 14482 68586\r\nFontName Helvetica-BoldOblique\r\nFullName Helvetica Bold Oblique\r\nFamilyName Helvetica\r\nWeight Bold\r\nItalicAngle -12\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -174 -228 1114 962 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 718\r\nXHeight 532\r\nAscender 718\r\nDescender -207\r\nStdHW 118\r\nStdVW 140\r\nStartCharMetrics 315\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 94 0 397 718 ;\r\nC 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ;\r\nC 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ;\r\nC 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ;\r\nC 37 ; WX 889 ; N percent ; B 136 -19 901 710 ;\r\nC 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ;\r\nC 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ;\r\nC 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ;\r\nC 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ;\r\nC 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ;\r\nC 43 ; WX 584 ; N plus ; B 82 0 610 506 ;\r\nC 44 ; WX 278 ; N comma ; B 28 -168 245 146 ;\r\nC 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ;\r\nC 46 ; WX 278 ; N period ; B 64 0 245 146 ;\r\nC 47 ; WX 278 ; N slash ; B -37 -19 468 737 ;\r\nC 48 ; WX 556 ; N zero ; B 86 -19 617 710 ;\r\nC 49 ; WX 556 ; N one ; B 173 0 529 710 ;\r\nC 50 ; WX 556 ; N two ; B 26 0 619 710 ;\r\nC 51 ; WX 556 ; N three ; B 65 -19 608 710 ;\r\nC 52 ; WX 556 ; N four ; B 60 0 598 710 ;\r\nC 53 ; WX 556 ; N five ; B 64 -19 636 698 ;\r\nC 54 ; WX 556 ; N six ; B 85 -19 619 710 ;\r\nC 55 ; WX 556 ; N seven ; B 125 0 676 698 ;\r\nC 56 ; WX 556 ; N eight ; B 69 -19 616 710 ;\r\nC 57 ; WX 556 ; N nine ; B 78 -19 615 710 ;\r\nC 58 ; WX 333 ; N colon ; B 92 0 351 512 ;\r\nC 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ;\r\nC 60 ; WX 584 ; N less ; B 82 -8 655 514 ;\r\nC 61 ; WX 584 ; N equal ; B 58 87 633 419 ;\r\nC 62 ; WX 584 ; N greater ; B 36 -8 609 514 ;\r\nC 63 ; WX 611 ; N question ; B 165 0 671 727 ;\r\nC 64 ; WX 975 ; N at ; B 186 -19 954 737 ;\r\nC 65 ; WX 722 ; N A ; B 20 0 702 718 ;\r\nC 66 ; WX 722 ; N B ; B 76 0 764 718 ;\r\nC 67 ; WX 722 ; N C ; B 107 -19 789 737 ;\r\nC 68 ; WX 722 ; N D ; B 76 0 777 718 ;\r\nC 69 ; WX 667 ; N E ; B 76 0 757 718 ;\r\nC 70 ; WX 611 ; N F ; B 76 0 740 718 ;\r\nC 71 ; WX 778 ; N G ; B 108 -19 817 737 ;\r\nC 72 ; WX 722 ; N H ; B 71 0 804 718 ;\r\nC 73 ; WX 278 ; N I ; B 64 0 367 718 ;\r\nC 74 ; WX 556 ; N J ; B 60 -18 637 718 ;\r\nC 75 ; WX 722 ; N K ; B 87 0 858 718 ;\r\nC 76 ; WX 611 ; N L ; B 76 0 611 718 ;\r\nC 77 ; WX 833 ; N M ; B 69 0 918 718 ;\r\nC 78 ; WX 722 ; N N ; B 69 0 807 718 ;\r\nC 79 ; WX 778 ; N O ; B 107 -19 823 737 ;\r\nC 80 ; WX 667 ; N P ; B 76 0 738 718 ;\r\nC 81 ; WX 778 ; N Q ; B 107 -52 823 737 ;\r\nC 82 ; WX 722 ; N R ; B 76 0 778 718 ;\r\nC 83 ; WX 667 ; N S ; B 81 -19 718 737 ;\r\nC 84 ; WX 611 ; N T ; B 140 0 751 718 ;\r\nC 85 ; WX 722 ; N U ; B 116 -19 804 718 ;\r\nC 86 ; WX 667 ; N V ; B 172 0 801 718 ;\r\nC 87 ; WX 944 ; N W ; B 169 0 1082 718 ;\r\nC 88 ; WX 667 ; N X ; B 14 0 791 718 ;\r\nC 89 ; WX 667 ; N Y ; B 168 0 806 718 ;\r\nC 90 ; WX 611 ; N Z ; B 25 0 737 718 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ;\r\nC 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ;\r\nC 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ;\r\nC 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ;\r\nC 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;\r\nC 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ;\r\nC 97 ; WX 556 ; N a ; B 55 -14 583 546 ;\r\nC 98 ; WX 611 ; N b ; B 61 -14 645 718 ;\r\nC 99 ; WX 556 ; N c ; B 79 -14 599 546 ;\r\nC 100 ; WX 611 ; N d ; B 82 -14 704 718 ;\r\nC 101 ; WX 556 ; N e ; B 70 -14 593 546 ;\r\nC 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ;\r\nC 103 ; WX 611 ; N g ; B 38 -217 666 546 ;\r\nC 104 ; WX 611 ; N h ; B 65 0 629 718 ;\r\nC 105 ; WX 278 ; N i ; B 69 0 363 725 ;\r\nC 106 ; WX 278 ; N j ; B -42 -214 363 725 ;\r\nC 107 ; WX 556 ; N k ; B 69 0 670 718 ;\r\nC 108 ; WX 278 ; N l ; B 69 0 362 718 ;\r\nC 109 ; WX 889 ; N m ; B 64 0 909 546 ;\r\nC 110 ; WX 611 ; N n ; B 65 0 629 546 ;\r\nC 111 ; WX 611 ; N o ; B 82 -14 643 546 ;\r\nC 112 ; WX 611 ; N p ; B 18 -207 645 546 ;\r\nC 113 ; WX 611 ; N q ; B 80 -207 665 546 ;\r\nC 114 ; WX 389 ; N r ; B 64 0 489 546 ;\r\nC 115 ; WX 556 ; N s ; B 63 -14 584 546 ;\r\nC 116 ; WX 333 ; N t ; B 100 -6 422 676 ;\r\nC 117 ; WX 611 ; N u ; B 98 -14 658 532 ;\r\nC 118 ; WX 556 ; N v ; B 126 0 656 532 ;\r\nC 119 ; WX 778 ; N w ; B 123 0 882 532 ;\r\nC 120 ; WX 556 ; N x ; B 15 0 648 532 ;\r\nC 121 ; WX 556 ; N y ; B 42 -214 652 532 ;\r\nC 122 ; WX 500 ; N z ; B 20 0 583 532 ;\r\nC 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ;\r\nC 124 ; WX 280 ; N bar ; B 36 -225 361 775 ;\r\nC 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ;\r\nC 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ;\r\nC 162 ; WX 556 ; N cent ; B 79 -118 599 628 ;\r\nC 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ;\r\nC 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ;\r\nC 165 ; WX 556 ; N yen ; B 60 0 713 698 ;\r\nC 166 ; WX 556 ; N florin ; B -50 -210 669 737 ;\r\nC 167 ; WX 556 ; N section ; B 61 -184 598 727 ;\r\nC 168 ; WX 556 ; N currency ; B 27 76 680 636 ;\r\nC 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ;\r\nC 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ;\r\nC 174 ; WX 611 ; N fi ; B 87 0 696 727 ;\r\nC 175 ; WX 611 ; N fl ; B 87 0 695 727 ;\r\nC 177 ; WX 556 ; N endash ; B 48 227 627 333 ;\r\nC 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ;\r\nC 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ;\r\nC 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ;\r\nC 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ;\r\nC 183 ; WX 350 ; N bullet ; B 83 194 420 524 ;\r\nC 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ;\r\nC 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ;\r\nC 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ;\r\nC 193 ; WX 333 ; N grave ; B 136 604 353 750 ;\r\nC 194 ; WX 333 ; N acute ; B 236 604 515 750 ;\r\nC 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ;\r\nC 196 ; WX 333 ; N tilde ; B 113 610 507 737 ;\r\nC 197 ; WX 333 ; N macron ; B 122 604 483 678 ;\r\nC 198 ; WX 333 ; N breve ; B 156 604 494 750 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ;\r\nC 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ;\r\nC 202 ; WX 333 ; N ring ; B 200 568 420 776 ;\r\nC 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ;\r\nC 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ;\r\nC 207 ; WX 333 ; N caron ; B 149 604 502 750 ;\r\nC 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ;\r\nC 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ;\r\nC 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ;\r\nC 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ;\r\nC 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ;\r\nC 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ;\r\nC 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ;\r\nC 241 ; WX 889 ; N ae ; B 56 -14 923 546 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ;\r\nC 248 ; WX 278 ; N lslash ; B 40 0 407 718 ;\r\nC 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ;\r\nC 250 ; WX 944 ; N oe ; B 82 -14 977 546 ;\r\nC 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ;\r\nC -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ;\r\nC -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ;\r\nC -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ;\r\nC -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ;\r\nC -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ;\r\nC -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ;\r\nC -1 ; WX 584 ; N divide ; B 82 -42 610 548 ;\r\nC -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ;\r\nC -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ;\r\nC -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ;\r\nC -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ;\r\nC -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ;\r\nC -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ;\r\nC -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ;\r\nC -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ;\r\nC -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ;\r\nC -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ;\r\nC -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ;\r\nC -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ;\r\nC -1 ; WX 556 ; N aring ; B 55 -14 583 776 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ;\r\nC -1 ; WX 278 ; N lacute ; B 69 0 528 936 ;\r\nC -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ;\r\nC -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ;\r\nC -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ;\r\nC -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ;\r\nC -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ;\r\nC -1 ; WX 278 ; N iacute ; B 69 0 488 750 ;\r\nC -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ;\r\nC -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ;\r\nC -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ;\r\nC -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ;\r\nC -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ;\r\nC -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ;\r\nC -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ;\r\nC -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ;\r\nC -1 ; WX 722 ; N Racute ; B 76 0 778 936 ;\r\nC -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ;\r\nC -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ;\r\nC -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ;\r\nC -1 ; WX 611 ; N uring ; B 98 -14 658 776 ;\r\nC -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ;\r\nC -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ;\r\nC -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;\r\nC -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ;\r\nC -1 ; WX 584 ; N multiply ; B 57 1 635 505 ;\r\nC -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ;\r\nC -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ;\r\nC -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ;\r\nC -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ;\r\nC -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ;\r\nC -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ;\r\nC -1 ; WX 611 ; N nacute ; B 65 0 654 750 ;\r\nC -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ;\r\nC -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ;\r\nC -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ;\r\nC -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ;\r\nC -1 ; WX 737 ; N registered ; B 55 -19 834 737 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ;\r\nC -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 670 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ;\r\nC -1 ; WX 389 ; N racute ; B 64 0 543 750 ;\r\nC -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ;\r\nC -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ;\r\nC -1 ; WX 722 ; N Eth ; B 62 0 777 718 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ;\r\nC -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ;\r\nC -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ;\r\nC -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ;\r\nC -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ;\r\nC -1 ; WX 500 ; N zacute ; B 20 0 599 750 ;\r\nC -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ;\r\nC -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ;\r\nC -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ;\r\nC -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ;\r\nC -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ;\r\nC -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ;\r\nC -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ;\r\nC -1 ; WX 611 ; N mu ; B 22 -207 658 532 ;\r\nC -1 ; WX 278 ; N igrave ; B 69 0 326 750 ;\r\nC -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ;\r\nC -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ;\r\nC -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ;\r\nC -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ;\r\nC -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ;\r\nC -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ;\r\nC -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ;\r\nC -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ;\r\nC -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ;\r\nC -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ;\r\nC -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ;\r\nC -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ;\r\nC -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ;\r\nC -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ;\r\nC -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ;\r\nC -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ;\r\nC -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ;\r\nC -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ;\r\nC -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ;\r\nC -1 ; WX 400 ; N degree ; B 175 426 467 712 ;\r\nC -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ;\r\nC -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ;\r\nC -1 ; WX 549 ; N radical ; B 112 -46 689 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ;\r\nC -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ;\r\nC -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ;\r\nC -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;\r\nC -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ;\r\nC -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ;\r\nC -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ;\r\nC -1 ; WX 584 ; N minus ; B 82 197 610 309 ;\r\nC -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ;\r\nC -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ;\r\nC -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ;\r\nC -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ;\r\nC -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ;\r\nC -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ;\r\nC -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ;\r\nC -1 ; WX 611 ; N eth ; B 82 -14 670 737 ;\r\nC -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ;\r\nC -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ;\r\nC -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ;\r\nC -1 ; WX 278 ; N imacron ; B 69 0 429 678 ;\r\nC -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2481\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -50\r\nKPX A Gbreve -50\r\nKPX A Gcommaaccent -50\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -90\r\nKPX A Tcaron -90\r\nKPX A Tcommaaccent -90\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -80\r\nKPX A W -60\r\nKPX A Y -110\r\nKPX A Yacute -110\r\nKPX A Ydieresis -110\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -40\r\nKPX A w -30\r\nKPX A y -30\r\nKPX A yacute -30\r\nKPX A ydieresis -30\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -50\r\nKPX Aacute Gbreve -50\r\nKPX Aacute Gcommaaccent -50\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -90\r\nKPX Aacute Tcaron -90\r\nKPX Aacute Tcommaaccent -90\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -80\r\nKPX Aacute W -60\r\nKPX Aacute Y -110\r\nKPX Aacute Yacute -110\r\nKPX Aacute Ydieresis -110\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -40\r\nKPX Aacute w -30\r\nKPX Aacute y -30\r\nKPX Aacute yacute -30\r\nKPX Aacute ydieresis -30\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -50\r\nKPX Abreve Gbreve -50\r\nKPX Abreve Gcommaaccent -50\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -90\r\nKPX Abreve Tcaron -90\r\nKPX Abreve Tcommaaccent -90\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -80\r\nKPX Abreve W -60\r\nKPX Abreve Y -110\r\nKPX Abreve Yacute -110\r\nKPX Abreve Ydieresis -110\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -40\r\nKPX Abreve w -30\r\nKPX Abreve y -30\r\nKPX Abreve yacute -30\r\nKPX Abreve ydieresis -30\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -50\r\nKPX Acircumflex Gbreve -50\r\nKPX Acircumflex Gcommaaccent -50\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -90\r\nKPX Acircumflex Tcaron -90\r\nKPX Acircumflex Tcommaaccent -90\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -80\r\nKPX Acircumflex W -60\r\nKPX Acircumflex Y -110\r\nKPX Acircumflex Yacute -110\r\nKPX Acircumflex Ydieresis -110\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -40\r\nKPX Acircumflex w -30\r\nKPX Acircumflex y -30\r\nKPX Acircumflex yacute -30\r\nKPX Acircumflex ydieresis -30\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -50\r\nKPX Adieresis Gbreve -50\r\nKPX Adieresis Gcommaaccent -50\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -90\r\nKPX Adieresis Tcaron -90\r\nKPX Adieresis Tcommaaccent -90\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -80\r\nKPX Adieresis W -60\r\nKPX Adieresis Y -110\r\nKPX Adieresis Yacute -110\r\nKPX Adieresis Ydieresis -110\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -40\r\nKPX Adieresis w -30\r\nKPX Adieresis y -30\r\nKPX Adieresis yacute -30\r\nKPX Adieresis ydieresis -30\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -50\r\nKPX Agrave Gbreve -50\r\nKPX Agrave Gcommaaccent -50\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -90\r\nKPX Agrave Tcaron -90\r\nKPX Agrave Tcommaaccent -90\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -80\r\nKPX Agrave W -60\r\nKPX Agrave Y -110\r\nKPX Agrave Yacute -110\r\nKPX Agrave Ydieresis -110\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -40\r\nKPX Agrave w -30\r\nKPX Agrave y -30\r\nKPX Agrave yacute -30\r\nKPX Agrave ydieresis -30\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -50\r\nKPX Amacron Gbreve -50\r\nKPX Amacron Gcommaaccent -50\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -90\r\nKPX Amacron Tcaron -90\r\nKPX Amacron Tcommaaccent -90\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -80\r\nKPX Amacron W -60\r\nKPX Amacron Y -110\r\nKPX Amacron Yacute -110\r\nKPX Amacron Ydieresis -110\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -40\r\nKPX Amacron w -30\r\nKPX Amacron y -30\r\nKPX Amacron yacute -30\r\nKPX Amacron ydieresis -30\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -50\r\nKPX Aogonek Gbreve -50\r\nKPX Aogonek Gcommaaccent -50\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -90\r\nKPX Aogonek Tcaron -90\r\nKPX Aogonek Tcommaaccent -90\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -80\r\nKPX Aogonek W -60\r\nKPX Aogonek Y -110\r\nKPX Aogonek Yacute -110\r\nKPX Aogonek Ydieresis -110\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -40\r\nKPX Aogonek w -30\r\nKPX Aogonek y -30\r\nKPX Aogonek yacute -30\r\nKPX Aogonek ydieresis -30\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -50\r\nKPX Aring Gbreve -50\r\nKPX Aring Gcommaaccent -50\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -90\r\nKPX Aring Tcaron -90\r\nKPX Aring Tcommaaccent -90\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -80\r\nKPX Aring W -60\r\nKPX Aring Y -110\r\nKPX Aring Yacute -110\r\nKPX Aring Ydieresis -110\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -40\r\nKPX Aring w -30\r\nKPX Aring y -30\r\nKPX Aring yacute -30\r\nKPX Aring ydieresis -30\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -50\r\nKPX Atilde Gbreve -50\r\nKPX Atilde Gcommaaccent -50\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -90\r\nKPX Atilde Tcaron -90\r\nKPX Atilde Tcommaaccent -90\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -80\r\nKPX Atilde W -60\r\nKPX Atilde Y -110\r\nKPX Atilde Yacute -110\r\nKPX Atilde Ydieresis -110\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -40\r\nKPX Atilde w -30\r\nKPX Atilde y -30\r\nKPX Atilde yacute -30\r\nKPX Atilde ydieresis -30\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -70\r\nKPX D Yacute -70\r\nKPX D Ydieresis -70\r\nKPX D comma -30\r\nKPX D period -30\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -70\r\nKPX Dcaron Yacute -70\r\nKPX Dcaron Ydieresis -70\r\nKPX Dcaron comma -30\r\nKPX Dcaron period -30\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -70\r\nKPX Dcroat Yacute -70\r\nKPX Dcroat Ydieresis -70\r\nKPX Dcroat comma -30\r\nKPX Dcroat period -30\r\nKPX F A -80\r\nKPX F Aacute -80\r\nKPX F Abreve -80\r\nKPX F Acircumflex -80\r\nKPX F Adieresis -80\r\nKPX F Agrave -80\r\nKPX F Amacron -80\r\nKPX F Aogonek -80\r\nKPX F Aring -80\r\nKPX F Atilde -80\r\nKPX F a -20\r\nKPX F aacute -20\r\nKPX F abreve -20\r\nKPX F acircumflex -20\r\nKPX F adieresis -20\r\nKPX F agrave -20\r\nKPX F amacron -20\r\nKPX F aogonek -20\r\nKPX F aring -20\r\nKPX F atilde -20\r\nKPX F comma -100\r\nKPX F period -100\r\nKPX J A -20\r\nKPX J Aacute -20\r\nKPX J Abreve -20\r\nKPX J Acircumflex -20\r\nKPX J Adieresis -20\r\nKPX J Agrave -20\r\nKPX J Amacron -20\r\nKPX J Aogonek -20\r\nKPX J Aring -20\r\nKPX J Atilde -20\r\nKPX J comma -20\r\nKPX J period -20\r\nKPX J u -20\r\nKPX J uacute -20\r\nKPX J ucircumflex -20\r\nKPX J udieresis -20\r\nKPX J ugrave -20\r\nKPX J uhungarumlaut -20\r\nKPX J umacron -20\r\nKPX J uogonek -20\r\nKPX J uring -20\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -15\r\nKPX K eacute -15\r\nKPX K ecaron -15\r\nKPX K ecircumflex -15\r\nKPX K edieresis -15\r\nKPX K edotaccent -15\r\nKPX K egrave -15\r\nKPX K emacron -15\r\nKPX K eogonek -15\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -30\r\nKPX K uacute -30\r\nKPX K ucircumflex -30\r\nKPX K udieresis -30\r\nKPX K ugrave -30\r\nKPX K uhungarumlaut -30\r\nKPX K umacron -30\r\nKPX K uogonek -30\r\nKPX K uring -30\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -15\r\nKPX Kcommaaccent eacute -15\r\nKPX Kcommaaccent ecaron -15\r\nKPX Kcommaaccent ecircumflex -15\r\nKPX Kcommaaccent edieresis -15\r\nKPX Kcommaaccent edotaccent -15\r\nKPX Kcommaaccent egrave -15\r\nKPX Kcommaaccent emacron -15\r\nKPX Kcommaaccent eogonek -15\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -30\r\nKPX Kcommaaccent uacute -30\r\nKPX Kcommaaccent ucircumflex -30\r\nKPX Kcommaaccent udieresis -30\r\nKPX Kcommaaccent ugrave -30\r\nKPX Kcommaaccent uhungarumlaut -30\r\nKPX Kcommaaccent umacron -30\r\nKPX Kcommaaccent uogonek -30\r\nKPX Kcommaaccent uring -30\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -90\r\nKPX L Tcaron -90\r\nKPX L Tcommaaccent -90\r\nKPX L V -110\r\nKPX L W -80\r\nKPX L Y -120\r\nKPX L Yacute -120\r\nKPX L Ydieresis -120\r\nKPX L quotedblright -140\r\nKPX L quoteright -140\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -90\r\nKPX Lacute Tcaron -90\r\nKPX Lacute Tcommaaccent -90\r\nKPX Lacute V -110\r\nKPX Lacute W -80\r\nKPX Lacute Y -120\r\nKPX Lacute Yacute -120\r\nKPX Lacute Ydieresis -120\r\nKPX Lacute quotedblright -140\r\nKPX Lacute quoteright -140\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -90\r\nKPX Lcommaaccent Tcaron -90\r\nKPX Lcommaaccent Tcommaaccent -90\r\nKPX Lcommaaccent V -110\r\nKPX Lcommaaccent W -80\r\nKPX Lcommaaccent Y -120\r\nKPX Lcommaaccent Yacute -120\r\nKPX Lcommaaccent Ydieresis -120\r\nKPX Lcommaaccent quotedblright -140\r\nKPX Lcommaaccent quoteright -140\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -90\r\nKPX Lslash Tcaron -90\r\nKPX Lslash Tcommaaccent -90\r\nKPX Lslash V -110\r\nKPX Lslash W -80\r\nKPX Lslash Y -120\r\nKPX Lslash Yacute -120\r\nKPX Lslash Ydieresis -120\r\nKPX Lslash quotedblright -140\r\nKPX Lslash quoteright -140\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX O A -50\r\nKPX O Aacute -50\r\nKPX O Abreve -50\r\nKPX O Acircumflex -50\r\nKPX O Adieresis -50\r\nKPX O Agrave -50\r\nKPX O Amacron -50\r\nKPX O Aogonek -50\r\nKPX O Aring -50\r\nKPX O Atilde -50\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -50\r\nKPX O Y -70\r\nKPX O Yacute -70\r\nKPX O Ydieresis -70\r\nKPX O comma -40\r\nKPX O period -40\r\nKPX Oacute A -50\r\nKPX Oacute Aacute -50\r\nKPX Oacute Abreve -50\r\nKPX Oacute Acircumflex -50\r\nKPX Oacute Adieresis -50\r\nKPX Oacute Agrave -50\r\nKPX Oacute Amacron -50\r\nKPX Oacute Aogonek -50\r\nKPX Oacute Aring -50\r\nKPX Oacute Atilde -50\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -50\r\nKPX Oacute Y -70\r\nKPX Oacute Yacute -70\r\nKPX Oacute Ydieresis -70\r\nKPX Oacute comma -40\r\nKPX Oacute period -40\r\nKPX Ocircumflex A -50\r\nKPX Ocircumflex Aacute -50\r\nKPX Ocircumflex Abreve -50\r\nKPX Ocircumflex Acircumflex -50\r\nKPX Ocircumflex Adieresis -50\r\nKPX Ocircumflex Agrave -50\r\nKPX Ocircumflex Amacron -50\r\nKPX Ocircumflex Aogonek -50\r\nKPX Ocircumflex Aring -50\r\nKPX Ocircumflex Atilde -50\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -50\r\nKPX Ocircumflex Y -70\r\nKPX Ocircumflex Yacute -70\r\nKPX Ocircumflex Ydieresis -70\r\nKPX Ocircumflex comma -40\r\nKPX Ocircumflex period -40\r\nKPX Odieresis A -50\r\nKPX Odieresis Aacute -50\r\nKPX Odieresis Abreve -50\r\nKPX Odieresis Acircumflex -50\r\nKPX Odieresis Adieresis -50\r\nKPX Odieresis Agrave -50\r\nKPX Odieresis Amacron -50\r\nKPX Odieresis Aogonek -50\r\nKPX Odieresis Aring -50\r\nKPX Odieresis Atilde -50\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -50\r\nKPX Odieresis Y -70\r\nKPX Odieresis Yacute -70\r\nKPX Odieresis Ydieresis -70\r\nKPX Odieresis comma -40\r\nKPX Odieresis period -40\r\nKPX Ograve A -50\r\nKPX Ograve Aacute -50\r\nKPX Ograve Abreve -50\r\nKPX Ograve Acircumflex -50\r\nKPX Ograve Adieresis -50\r\nKPX Ograve Agrave -50\r\nKPX Ograve Amacron -50\r\nKPX Ograve Aogonek -50\r\nKPX Ograve Aring -50\r\nKPX Ograve Atilde -50\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -50\r\nKPX Ograve Y -70\r\nKPX Ograve Yacute -70\r\nKPX Ograve Ydieresis -70\r\nKPX Ograve comma -40\r\nKPX Ograve period -40\r\nKPX Ohungarumlaut A -50\r\nKPX Ohungarumlaut Aacute -50\r\nKPX Ohungarumlaut Abreve -50\r\nKPX Ohungarumlaut Acircumflex -50\r\nKPX Ohungarumlaut Adieresis -50\r\nKPX Ohungarumlaut Agrave -50\r\nKPX Ohungarumlaut Amacron -50\r\nKPX Ohungarumlaut Aogonek -50\r\nKPX Ohungarumlaut Aring -50\r\nKPX Ohungarumlaut Atilde -50\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -50\r\nKPX Ohungarumlaut Y -70\r\nKPX Ohungarumlaut Yacute -70\r\nKPX Ohungarumlaut Ydieresis -70\r\nKPX Ohungarumlaut comma -40\r\nKPX Ohungarumlaut period -40\r\nKPX Omacron A -50\r\nKPX Omacron Aacute -50\r\nKPX Omacron Abreve -50\r\nKPX Omacron Acircumflex -50\r\nKPX Omacron Adieresis -50\r\nKPX Omacron Agrave -50\r\nKPX Omacron Amacron -50\r\nKPX Omacron Aogonek -50\r\nKPX Omacron Aring -50\r\nKPX Omacron Atilde -50\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -50\r\nKPX Omacron Y -70\r\nKPX Omacron Yacute -70\r\nKPX Omacron Ydieresis -70\r\nKPX Omacron comma -40\r\nKPX Omacron period -40\r\nKPX Oslash A -50\r\nKPX Oslash Aacute -50\r\nKPX Oslash Abreve -50\r\nKPX Oslash Acircumflex -50\r\nKPX Oslash Adieresis -50\r\nKPX Oslash Agrave -50\r\nKPX Oslash Amacron -50\r\nKPX Oslash Aogonek -50\r\nKPX Oslash Aring -50\r\nKPX Oslash Atilde -50\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -50\r\nKPX Oslash Y -70\r\nKPX Oslash Yacute -70\r\nKPX Oslash Ydieresis -70\r\nKPX Oslash comma -40\r\nKPX Oslash period -40\r\nKPX Otilde A -50\r\nKPX Otilde Aacute -50\r\nKPX Otilde Abreve -50\r\nKPX Otilde Acircumflex -50\r\nKPX Otilde Adieresis -50\r\nKPX Otilde Agrave -50\r\nKPX Otilde Amacron -50\r\nKPX Otilde Aogonek -50\r\nKPX Otilde Aring -50\r\nKPX Otilde Atilde -50\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -50\r\nKPX Otilde Y -70\r\nKPX Otilde Yacute -70\r\nKPX Otilde Ydieresis -70\r\nKPX Otilde comma -40\r\nKPX Otilde period -40\r\nKPX P A -100\r\nKPX P Aacute -100\r\nKPX P Abreve -100\r\nKPX P Acircumflex -100\r\nKPX P Adieresis -100\r\nKPX P Agrave -100\r\nKPX P Amacron -100\r\nKPX P Aogonek -100\r\nKPX P Aring -100\r\nKPX P Atilde -100\r\nKPX P a -30\r\nKPX P aacute -30\r\nKPX P abreve -30\r\nKPX P acircumflex -30\r\nKPX P adieresis -30\r\nKPX P agrave -30\r\nKPX P amacron -30\r\nKPX P aogonek -30\r\nKPX P aring -30\r\nKPX P atilde -30\r\nKPX P comma -120\r\nKPX P e -30\r\nKPX P eacute -30\r\nKPX P ecaron -30\r\nKPX P ecircumflex -30\r\nKPX P edieresis -30\r\nKPX P edotaccent -30\r\nKPX P egrave -30\r\nKPX P emacron -30\r\nKPX P eogonek -30\r\nKPX P o -40\r\nKPX P oacute -40\r\nKPX P ocircumflex -40\r\nKPX P odieresis -40\r\nKPX P ograve -40\r\nKPX P ohungarumlaut -40\r\nKPX P omacron -40\r\nKPX P oslash -40\r\nKPX P otilde -40\r\nKPX P period -120\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q comma 20\r\nKPX Q period 20\r\nKPX R O -20\r\nKPX R Oacute -20\r\nKPX R Ocircumflex -20\r\nKPX R Odieresis -20\r\nKPX R Ograve -20\r\nKPX R Ohungarumlaut -20\r\nKPX R Omacron -20\r\nKPX R Oslash -20\r\nKPX R Otilde -20\r\nKPX R T -20\r\nKPX R Tcaron -20\r\nKPX R Tcommaaccent -20\r\nKPX R U -20\r\nKPX R Uacute -20\r\nKPX R Ucircumflex -20\r\nKPX R Udieresis -20\r\nKPX R Ugrave -20\r\nKPX R Uhungarumlaut -20\r\nKPX R Umacron -20\r\nKPX R Uogonek -20\r\nKPX R Uring -20\r\nKPX R V -50\r\nKPX R W -40\r\nKPX R Y -50\r\nKPX R Yacute -50\r\nKPX R Ydieresis -50\r\nKPX Racute O -20\r\nKPX Racute Oacute -20\r\nKPX Racute Ocircumflex -20\r\nKPX Racute Odieresis -20\r\nKPX Racute Ograve -20\r\nKPX Racute Ohungarumlaut -20\r\nKPX Racute Omacron -20\r\nKPX Racute Oslash -20\r\nKPX Racute Otilde -20\r\nKPX Racute T -20\r\nKPX Racute Tcaron -20\r\nKPX Racute Tcommaaccent -20\r\nKPX Racute U -20\r\nKPX Racute Uacute -20\r\nKPX Racute Ucircumflex -20\r\nKPX Racute Udieresis -20\r\nKPX Racute Ugrave -20\r\nKPX Racute Uhungarumlaut -20\r\nKPX Racute Umacron -20\r\nKPX Racute Uogonek -20\r\nKPX Racute Uring -20\r\nKPX Racute V -50\r\nKPX Racute W -40\r\nKPX Racute Y -50\r\nKPX Racute Yacute -50\r\nKPX Racute Ydieresis -50\r\nKPX Rcaron O -20\r\nKPX Rcaron Oacute -20\r\nKPX Rcaron Ocircumflex -20\r\nKPX Rcaron Odieresis -20\r\nKPX Rcaron Ograve -20\r\nKPX Rcaron Ohungarumlaut -20\r\nKPX Rcaron Omacron -20\r\nKPX Rcaron Oslash -20\r\nKPX Rcaron Otilde -20\r\nKPX Rcaron T -20\r\nKPX Rcaron Tcaron -20\r\nKPX Rcaron Tcommaaccent -20\r\nKPX Rcaron U -20\r\nKPX Rcaron Uacute -20\r\nKPX Rcaron Ucircumflex -20\r\nKPX Rcaron Udieresis -20\r\nKPX Rcaron Ugrave -20\r\nKPX Rcaron Uhungarumlaut -20\r\nKPX Rcaron Umacron -20\r\nKPX Rcaron Uogonek -20\r\nKPX Rcaron Uring -20\r\nKPX Rcaron V -50\r\nKPX Rcaron W -40\r\nKPX Rcaron Y -50\r\nKPX Rcaron Yacute -50\r\nKPX Rcaron Ydieresis -50\r\nKPX Rcommaaccent O -20\r\nKPX Rcommaaccent Oacute -20\r\nKPX Rcommaaccent Ocircumflex -20\r\nKPX Rcommaaccent Odieresis -20\r\nKPX Rcommaaccent Ograve -20\r\nKPX Rcommaaccent Ohungarumlaut -20\r\nKPX Rcommaaccent Omacron -20\r\nKPX Rcommaaccent Oslash -20\r\nKPX Rcommaaccent Otilde -20\r\nKPX Rcommaaccent T -20\r\nKPX Rcommaaccent Tcaron -20\r\nKPX Rcommaaccent Tcommaaccent -20\r\nKPX Rcommaaccent U -20\r\nKPX Rcommaaccent Uacute -20\r\nKPX Rcommaaccent Ucircumflex -20\r\nKPX Rcommaaccent Udieresis -20\r\nKPX Rcommaaccent Ugrave -20\r\nKPX Rcommaaccent Uhungarumlaut -20\r\nKPX Rcommaaccent Umacron -20\r\nKPX Rcommaaccent Uogonek -20\r\nKPX Rcommaaccent Uring -20\r\nKPX Rcommaaccent V -50\r\nKPX Rcommaaccent W -40\r\nKPX Rcommaaccent Y -50\r\nKPX Rcommaaccent Yacute -50\r\nKPX Rcommaaccent Ydieresis -50\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -40\r\nKPX T Oacute -40\r\nKPX T Ocircumflex -40\r\nKPX T Odieresis -40\r\nKPX T Ograve -40\r\nKPX T Ohungarumlaut -40\r\nKPX T Omacron -40\r\nKPX T Oslash -40\r\nKPX T Otilde -40\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -80\r\nKPX T agrave -80\r\nKPX T amacron -80\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -80\r\nKPX T colon -40\r\nKPX T comma -80\r\nKPX T e -60\r\nKPX T eacute -60\r\nKPX T ecaron -60\r\nKPX T ecircumflex -60\r\nKPX T edieresis -60\r\nKPX T edotaccent -60\r\nKPX T egrave -60\r\nKPX T emacron -60\r\nKPX T eogonek -60\r\nKPX T hyphen -120\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -80\r\nKPX T r -80\r\nKPX T racute -80\r\nKPX T rcommaaccent -80\r\nKPX T semicolon -40\r\nKPX T u -90\r\nKPX T uacute -90\r\nKPX T ucircumflex -90\r\nKPX T udieresis -90\r\nKPX T ugrave -90\r\nKPX T uhungarumlaut -90\r\nKPX T umacron -90\r\nKPX T uogonek -90\r\nKPX T uring -90\r\nKPX T w -60\r\nKPX T y -60\r\nKPX T yacute -60\r\nKPX T ydieresis -60\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -40\r\nKPX Tcaron Oacute -40\r\nKPX Tcaron Ocircumflex -40\r\nKPX Tcaron Odieresis -40\r\nKPX Tcaron Ograve -40\r\nKPX Tcaron Ohungarumlaut -40\r\nKPX Tcaron Omacron -40\r\nKPX Tcaron Oslash -40\r\nKPX Tcaron Otilde -40\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -80\r\nKPX Tcaron agrave -80\r\nKPX Tcaron amacron -80\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -80\r\nKPX Tcaron colon -40\r\nKPX Tcaron comma -80\r\nKPX Tcaron e -60\r\nKPX Tcaron eacute -60\r\nKPX Tcaron ecaron -60\r\nKPX Tcaron ecircumflex -60\r\nKPX Tcaron edieresis -60\r\nKPX Tcaron edotaccent -60\r\nKPX Tcaron egrave -60\r\nKPX Tcaron emacron -60\r\nKPX Tcaron eogonek -60\r\nKPX Tcaron hyphen -120\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -80\r\nKPX Tcaron r -80\r\nKPX Tcaron racute -80\r\nKPX Tcaron rcommaaccent -80\r\nKPX Tcaron semicolon -40\r\nKPX Tcaron u -90\r\nKPX Tcaron uacute -90\r\nKPX Tcaron ucircumflex -90\r\nKPX Tcaron udieresis -90\r\nKPX Tcaron ugrave -90\r\nKPX Tcaron uhungarumlaut -90\r\nKPX Tcaron umacron -90\r\nKPX Tcaron uogonek -90\r\nKPX Tcaron uring -90\r\nKPX Tcaron w -60\r\nKPX Tcaron y -60\r\nKPX Tcaron yacute -60\r\nKPX Tcaron ydieresis -60\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -40\r\nKPX Tcommaaccent Oacute -40\r\nKPX Tcommaaccent Ocircumflex -40\r\nKPX Tcommaaccent Odieresis -40\r\nKPX Tcommaaccent Ograve -40\r\nKPX Tcommaaccent Ohungarumlaut -40\r\nKPX Tcommaaccent Omacron -40\r\nKPX Tcommaaccent Oslash -40\r\nKPX Tcommaaccent Otilde -40\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -80\r\nKPX Tcommaaccent agrave -80\r\nKPX Tcommaaccent amacron -80\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -80\r\nKPX Tcommaaccent colon -40\r\nKPX Tcommaaccent comma -80\r\nKPX Tcommaaccent e -60\r\nKPX Tcommaaccent eacute -60\r\nKPX Tcommaaccent ecaron -60\r\nKPX Tcommaaccent ecircumflex -60\r\nKPX Tcommaaccent edieresis -60\r\nKPX Tcommaaccent edotaccent -60\r\nKPX Tcommaaccent egrave -60\r\nKPX Tcommaaccent emacron -60\r\nKPX Tcommaaccent eogonek -60\r\nKPX Tcommaaccent hyphen -120\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -80\r\nKPX Tcommaaccent r -80\r\nKPX Tcommaaccent racute -80\r\nKPX Tcommaaccent rcommaaccent -80\r\nKPX Tcommaaccent semicolon -40\r\nKPX Tcommaaccent u -90\r\nKPX Tcommaaccent uacute -90\r\nKPX Tcommaaccent ucircumflex -90\r\nKPX Tcommaaccent udieresis -90\r\nKPX Tcommaaccent ugrave -90\r\nKPX Tcommaaccent uhungarumlaut -90\r\nKPX Tcommaaccent umacron -90\r\nKPX Tcommaaccent uogonek -90\r\nKPX Tcommaaccent uring -90\r\nKPX Tcommaaccent w -60\r\nKPX Tcommaaccent y -60\r\nKPX Tcommaaccent yacute -60\r\nKPX Tcommaaccent ydieresis -60\r\nKPX U A -50\r\nKPX U Aacute -50\r\nKPX U Abreve -50\r\nKPX U Acircumflex -50\r\nKPX U Adieresis -50\r\nKPX U Agrave -50\r\nKPX U Amacron -50\r\nKPX U Aogonek -50\r\nKPX U Aring -50\r\nKPX U Atilde -50\r\nKPX U comma -30\r\nKPX U period -30\r\nKPX Uacute A -50\r\nKPX Uacute Aacute -50\r\nKPX Uacute Abreve -50\r\nKPX Uacute Acircumflex -50\r\nKPX Uacute Adieresis -50\r\nKPX Uacute Agrave -50\r\nKPX Uacute Amacron -50\r\nKPX Uacute Aogonek -50\r\nKPX Uacute Aring -50\r\nKPX Uacute Atilde -50\r\nKPX Uacute comma -30\r\nKPX Uacute period -30\r\nKPX Ucircumflex A -50\r\nKPX Ucircumflex Aacute -50\r\nKPX Ucircumflex Abreve -50\r\nKPX Ucircumflex Acircumflex -50\r\nKPX Ucircumflex Adieresis -50\r\nKPX Ucircumflex Agrave -50\r\nKPX Ucircumflex Amacron -50\r\nKPX Ucircumflex Aogonek -50\r\nKPX Ucircumflex Aring -50\r\nKPX Ucircumflex Atilde -50\r\nKPX Ucircumflex comma -30\r\nKPX Ucircumflex period -30\r\nKPX Udieresis A -50\r\nKPX Udieresis Aacute -50\r\nKPX Udieresis Abreve -50\r\nKPX Udieresis Acircumflex -50\r\nKPX Udieresis Adieresis -50\r\nKPX Udieresis Agrave -50\r\nKPX Udieresis Amacron -50\r\nKPX Udieresis Aogonek -50\r\nKPX Udieresis Aring -50\r\nKPX Udieresis Atilde -50\r\nKPX Udieresis comma -30\r\nKPX Udieresis period -30\r\nKPX Ugrave A -50\r\nKPX Ugrave Aacute -50\r\nKPX Ugrave Abreve -50\r\nKPX Ugrave Acircumflex -50\r\nKPX Ugrave Adieresis -50\r\nKPX Ugrave Agrave -50\r\nKPX Ugrave Amacron -50\r\nKPX Ugrave Aogonek -50\r\nKPX Ugrave Aring -50\r\nKPX Ugrave Atilde -50\r\nKPX Ugrave comma -30\r\nKPX Ugrave period -30\r\nKPX Uhungarumlaut A -50\r\nKPX Uhungarumlaut Aacute -50\r\nKPX Uhungarumlaut Abreve -50\r\nKPX Uhungarumlaut Acircumflex -50\r\nKPX Uhungarumlaut Adieresis -50\r\nKPX Uhungarumlaut Agrave -50\r\nKPX Uhungarumlaut Amacron -50\r\nKPX Uhungarumlaut Aogonek -50\r\nKPX Uhungarumlaut Aring -50\r\nKPX Uhungarumlaut Atilde -50\r\nKPX Uhungarumlaut comma -30\r\nKPX Uhungarumlaut period -30\r\nKPX Umacron A -50\r\nKPX Umacron Aacute -50\r\nKPX Umacron Abreve -50\r\nKPX Umacron Acircumflex -50\r\nKPX Umacron Adieresis -50\r\nKPX Umacron Agrave -50\r\nKPX Umacron Amacron -50\r\nKPX Umacron Aogonek -50\r\nKPX Umacron Aring -50\r\nKPX Umacron Atilde -50\r\nKPX Umacron comma -30\r\nKPX Umacron period -30\r\nKPX Uogonek A -50\r\nKPX Uogonek Aacute -50\r\nKPX Uogonek Abreve -50\r\nKPX Uogonek Acircumflex -50\r\nKPX Uogonek Adieresis -50\r\nKPX Uogonek Agrave -50\r\nKPX Uogonek Amacron -50\r\nKPX Uogonek Aogonek -50\r\nKPX Uogonek Aring -50\r\nKPX Uogonek Atilde -50\r\nKPX Uogonek comma -30\r\nKPX Uogonek period -30\r\nKPX Uring A -50\r\nKPX Uring Aacute -50\r\nKPX Uring Abreve -50\r\nKPX Uring Acircumflex -50\r\nKPX Uring Adieresis -50\r\nKPX Uring Agrave -50\r\nKPX Uring Amacron -50\r\nKPX Uring Aogonek -50\r\nKPX Uring Aring -50\r\nKPX Uring Atilde -50\r\nKPX Uring comma -30\r\nKPX Uring period -30\r\nKPX V A -80\r\nKPX V Aacute -80\r\nKPX V Abreve -80\r\nKPX V Acircumflex -80\r\nKPX V Adieresis -80\r\nKPX V Agrave -80\r\nKPX V Amacron -80\r\nKPX V Aogonek -80\r\nKPX V Aring -80\r\nKPX V Atilde -80\r\nKPX V G -50\r\nKPX V Gbreve -50\r\nKPX V Gcommaaccent -50\r\nKPX V O -50\r\nKPX V Oacute -50\r\nKPX V Ocircumflex -50\r\nKPX V Odieresis -50\r\nKPX V Ograve -50\r\nKPX V Ohungarumlaut -50\r\nKPX V Omacron -50\r\nKPX V Oslash -50\r\nKPX V Otilde -50\r\nKPX V a -60\r\nKPX V aacute -60\r\nKPX V abreve -60\r\nKPX V acircumflex -60\r\nKPX V adieresis -60\r\nKPX V agrave -60\r\nKPX V amacron -60\r\nKPX V aogonek -60\r\nKPX V aring -60\r\nKPX V atilde -60\r\nKPX V colon -40\r\nKPX V comma -120\r\nKPX V e -50\r\nKPX V eacute -50\r\nKPX V ecaron -50\r\nKPX V ecircumflex -50\r\nKPX V edieresis -50\r\nKPX V edotaccent -50\r\nKPX V egrave -50\r\nKPX V emacron -50\r\nKPX V eogonek -50\r\nKPX V hyphen -80\r\nKPX V o -90\r\nKPX V oacute -90\r\nKPX V ocircumflex -90\r\nKPX V odieresis -90\r\nKPX V ograve -90\r\nKPX V ohungarumlaut -90\r\nKPX V omacron -90\r\nKPX V oslash -90\r\nKPX V otilde -90\r\nKPX V period -120\r\nKPX V semicolon -40\r\nKPX V u -60\r\nKPX V uacute -60\r\nKPX V ucircumflex -60\r\nKPX V udieresis -60\r\nKPX V ugrave -60\r\nKPX V uhungarumlaut -60\r\nKPX V umacron -60\r\nKPX V uogonek -60\r\nKPX V uring -60\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -20\r\nKPX W Oacute -20\r\nKPX W Ocircumflex -20\r\nKPX W Odieresis -20\r\nKPX W Ograve -20\r\nKPX W Ohungarumlaut -20\r\nKPX W Omacron -20\r\nKPX W Oslash -20\r\nKPX W Otilde -20\r\nKPX W a -40\r\nKPX W aacute -40\r\nKPX W abreve -40\r\nKPX W acircumflex -40\r\nKPX W adieresis -40\r\nKPX W agrave -40\r\nKPX W amacron -40\r\nKPX W aogonek -40\r\nKPX W aring -40\r\nKPX W atilde -40\r\nKPX W colon -10\r\nKPX W comma -80\r\nKPX W e -35\r\nKPX W eacute -35\r\nKPX W ecaron -35\r\nKPX W ecircumflex -35\r\nKPX W edieresis -35\r\nKPX W edotaccent -35\r\nKPX W egrave -35\r\nKPX W emacron -35\r\nKPX W eogonek -35\r\nKPX W hyphen -40\r\nKPX W o -60\r\nKPX W oacute -60\r\nKPX W ocircumflex -60\r\nKPX W odieresis -60\r\nKPX W ograve -60\r\nKPX W ohungarumlaut -60\r\nKPX W omacron -60\r\nKPX W oslash -60\r\nKPX W otilde -60\r\nKPX W period -80\r\nKPX W semicolon -10\r\nKPX W u -45\r\nKPX W uacute -45\r\nKPX W ucircumflex -45\r\nKPX W udieresis -45\r\nKPX W ugrave -45\r\nKPX W uhungarumlaut -45\r\nKPX W umacron -45\r\nKPX W uogonek -45\r\nKPX W uring -45\r\nKPX W y -20\r\nKPX W yacute -20\r\nKPX W ydieresis -20\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -70\r\nKPX Y Oacute -70\r\nKPX Y Ocircumflex -70\r\nKPX Y Odieresis -70\r\nKPX Y Ograve -70\r\nKPX Y Ohungarumlaut -70\r\nKPX Y Omacron -70\r\nKPX Y Oslash -70\r\nKPX Y Otilde -70\r\nKPX Y a -90\r\nKPX Y aacute -90\r\nKPX Y abreve -90\r\nKPX Y acircumflex -90\r\nKPX Y adieresis -90\r\nKPX Y agrave -90\r\nKPX Y amacron -90\r\nKPX Y aogonek -90\r\nKPX Y aring -90\r\nKPX Y atilde -90\r\nKPX Y colon -50\r\nKPX Y comma -100\r\nKPX Y e -80\r\nKPX Y eacute -80\r\nKPX Y ecaron -80\r\nKPX Y ecircumflex -80\r\nKPX Y edieresis -80\r\nKPX Y edotaccent -80\r\nKPX Y egrave -80\r\nKPX Y emacron -80\r\nKPX Y eogonek -80\r\nKPX Y o -100\r\nKPX Y oacute -100\r\nKPX Y ocircumflex -100\r\nKPX Y odieresis -100\r\nKPX Y ograve -100\r\nKPX Y ohungarumlaut -100\r\nKPX Y omacron -100\r\nKPX Y oslash -100\r\nKPX Y otilde -100\r\nKPX Y period -100\r\nKPX Y semicolon -50\r\nKPX Y u -100\r\nKPX Y uacute -100\r\nKPX Y ucircumflex -100\r\nKPX Y udieresis -100\r\nKPX Y ugrave -100\r\nKPX Y uhungarumlaut -100\r\nKPX Y umacron -100\r\nKPX Y uogonek -100\r\nKPX Y uring -100\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -70\r\nKPX Yacute Oacute -70\r\nKPX Yacute Ocircumflex -70\r\nKPX Yacute Odieresis -70\r\nKPX Yacute Ograve -70\r\nKPX Yacute Ohungarumlaut -70\r\nKPX Yacute Omacron -70\r\nKPX Yacute Oslash -70\r\nKPX Yacute Otilde -70\r\nKPX Yacute a -90\r\nKPX Yacute aacute -90\r\nKPX Yacute abreve -90\r\nKPX Yacute acircumflex -90\r\nKPX Yacute adieresis -90\r\nKPX Yacute agrave -90\r\nKPX Yacute amacron -90\r\nKPX Yacute aogonek -90\r\nKPX Yacute aring -90\r\nKPX Yacute atilde -90\r\nKPX Yacute colon -50\r\nKPX Yacute comma -100\r\nKPX Yacute e -80\r\nKPX Yacute eacute -80\r\nKPX Yacute ecaron -80\r\nKPX Yacute ecircumflex -80\r\nKPX Yacute edieresis -80\r\nKPX Yacute edotaccent -80\r\nKPX Yacute egrave -80\r\nKPX Yacute emacron -80\r\nKPX Yacute eogonek -80\r\nKPX Yacute o -100\r\nKPX Yacute oacute -100\r\nKPX Yacute ocircumflex -100\r\nKPX Yacute odieresis -100\r\nKPX Yacute ograve -100\r\nKPX Yacute ohungarumlaut -100\r\nKPX Yacute omacron -100\r\nKPX Yacute oslash -100\r\nKPX Yacute otilde -100\r\nKPX Yacute period -100\r\nKPX Yacute semicolon -50\r\nKPX Yacute u -100\r\nKPX Yacute uacute -100\r\nKPX Yacute ucircumflex -100\r\nKPX Yacute udieresis -100\r\nKPX Yacute ugrave -100\r\nKPX Yacute uhungarumlaut -100\r\nKPX Yacute umacron -100\r\nKPX Yacute uogonek -100\r\nKPX Yacute uring -100\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -70\r\nKPX Ydieresis Oacute -70\r\nKPX Ydieresis Ocircumflex -70\r\nKPX Ydieresis Odieresis -70\r\nKPX Ydieresis Ograve -70\r\nKPX Ydieresis Ohungarumlaut -70\r\nKPX Ydieresis Omacron -70\r\nKPX Ydieresis Oslash -70\r\nKPX Ydieresis Otilde -70\r\nKPX Ydieresis a -90\r\nKPX Ydieresis aacute -90\r\nKPX Ydieresis abreve -90\r\nKPX Ydieresis acircumflex -90\r\nKPX Ydieresis adieresis -90\r\nKPX Ydieresis agrave -90\r\nKPX Ydieresis amacron -90\r\nKPX Ydieresis aogonek -90\r\nKPX Ydieresis aring -90\r\nKPX Ydieresis atilde -90\r\nKPX Ydieresis colon -50\r\nKPX Ydieresis comma -100\r\nKPX Ydieresis e -80\r\nKPX Ydieresis eacute -80\r\nKPX Ydieresis ecaron -80\r\nKPX Ydieresis ecircumflex -80\r\nKPX Ydieresis edieresis -80\r\nKPX Ydieresis edotaccent -80\r\nKPX Ydieresis egrave -80\r\nKPX Ydieresis emacron -80\r\nKPX Ydieresis eogonek -80\r\nKPX Ydieresis o -100\r\nKPX Ydieresis oacute -100\r\nKPX Ydieresis ocircumflex -100\r\nKPX Ydieresis odieresis -100\r\nKPX Ydieresis ograve -100\r\nKPX Ydieresis ohungarumlaut -100\r\nKPX Ydieresis omacron -100\r\nKPX Ydieresis oslash -100\r\nKPX Ydieresis otilde -100\r\nKPX Ydieresis period -100\r\nKPX Ydieresis semicolon -50\r\nKPX Ydieresis u -100\r\nKPX Ydieresis uacute -100\r\nKPX Ydieresis ucircumflex -100\r\nKPX Ydieresis udieresis -100\r\nKPX Ydieresis ugrave -100\r\nKPX Ydieresis uhungarumlaut -100\r\nKPX Ydieresis umacron -100\r\nKPX Ydieresis uogonek -100\r\nKPX Ydieresis uring -100\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX a v -15\r\nKPX a w -15\r\nKPX a y -20\r\nKPX a yacute -20\r\nKPX a ydieresis -20\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX aacute v -15\r\nKPX aacute w -15\r\nKPX aacute y -20\r\nKPX aacute yacute -20\r\nKPX aacute ydieresis -20\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX abreve v -15\r\nKPX abreve w -15\r\nKPX abreve y -20\r\nKPX abreve yacute -20\r\nKPX abreve ydieresis -20\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX acircumflex v -15\r\nKPX acircumflex w -15\r\nKPX acircumflex y -20\r\nKPX acircumflex yacute -20\r\nKPX acircumflex ydieresis -20\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX adieresis v -15\r\nKPX adieresis w -15\r\nKPX adieresis y -20\r\nKPX adieresis yacute -20\r\nKPX adieresis ydieresis -20\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX agrave v -15\r\nKPX agrave w -15\r\nKPX agrave y -20\r\nKPX agrave yacute -20\r\nKPX agrave ydieresis -20\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX amacron v -15\r\nKPX amacron w -15\r\nKPX amacron y -20\r\nKPX amacron yacute -20\r\nKPX amacron ydieresis -20\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aogonek v -15\r\nKPX aogonek w -15\r\nKPX aogonek y -20\r\nKPX aogonek yacute -20\r\nKPX aogonek ydieresis -20\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX aring v -15\r\nKPX aring w -15\r\nKPX aring y -20\r\nKPX aring yacute -20\r\nKPX aring ydieresis -20\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX atilde v -15\r\nKPX atilde w -15\r\nKPX atilde y -20\r\nKPX atilde yacute -20\r\nKPX atilde ydieresis -20\r\nKPX b l -10\r\nKPX b lacute -10\r\nKPX b lcommaaccent -10\r\nKPX b lslash -10\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -20\r\nKPX b y -20\r\nKPX b yacute -20\r\nKPX b ydieresis -20\r\nKPX c h -10\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX c l -20\r\nKPX c lacute -20\r\nKPX c lcommaaccent -20\r\nKPX c lslash -20\r\nKPX c y -10\r\nKPX c yacute -10\r\nKPX c ydieresis -10\r\nKPX cacute h -10\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX cacute l -20\r\nKPX cacute lacute -20\r\nKPX cacute lcommaaccent -20\r\nKPX cacute lslash -20\r\nKPX cacute y -10\r\nKPX cacute yacute -10\r\nKPX cacute ydieresis -10\r\nKPX ccaron h -10\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccaron l -20\r\nKPX ccaron lacute -20\r\nKPX ccaron lcommaaccent -20\r\nKPX ccaron lslash -20\r\nKPX ccaron y -10\r\nKPX ccaron yacute -10\r\nKPX ccaron ydieresis -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX ccedilla l -20\r\nKPX ccedilla lacute -20\r\nKPX ccedilla lcommaaccent -20\r\nKPX ccedilla lslash -20\r\nKPX ccedilla y -10\r\nKPX ccedilla yacute -10\r\nKPX ccedilla ydieresis -10\r\nKPX colon space -40\r\nKPX comma quotedblright -120\r\nKPX comma quoteright -120\r\nKPX comma space -40\r\nKPX d d -10\r\nKPX d dcroat -10\r\nKPX d v -15\r\nKPX d w -15\r\nKPX d y -15\r\nKPX d yacute -15\r\nKPX d ydieresis -15\r\nKPX dcroat d -10\r\nKPX dcroat dcroat -10\r\nKPX dcroat v -15\r\nKPX dcroat w -15\r\nKPX dcroat y -15\r\nKPX dcroat yacute -15\r\nKPX dcroat ydieresis -15\r\nKPX e comma 10\r\nKPX e period 20\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute comma 10\r\nKPX eacute period 20\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron comma 10\r\nKPX ecaron period 20\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex comma 10\r\nKPX ecircumflex period 20\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis comma 10\r\nKPX edieresis period 20\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent comma 10\r\nKPX edotaccent period 20\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave comma 10\r\nKPX egrave period 20\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron comma 10\r\nKPX emacron period 20\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek comma 10\r\nKPX eogonek period 20\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f comma -10\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f ecaron -10\r\nKPX f ecircumflex -10\r\nKPX f edieresis -10\r\nKPX f edotaccent -10\r\nKPX f egrave -10\r\nKPX f emacron -10\r\nKPX f eogonek -10\r\nKPX f o -20\r\nKPX f oacute -20\r\nKPX f ocircumflex -20\r\nKPX f odieresis -20\r\nKPX f ograve -20\r\nKPX f ohungarumlaut -20\r\nKPX f omacron -20\r\nKPX f oslash -20\r\nKPX f otilde -20\r\nKPX f period -10\r\nKPX f quotedblright 30\r\nKPX f quoteright 30\r\nKPX g e 10\r\nKPX g eacute 10\r\nKPX g ecaron 10\r\nKPX g ecircumflex 10\r\nKPX g edieresis 10\r\nKPX g edotaccent 10\r\nKPX g egrave 10\r\nKPX g emacron 10\r\nKPX g eogonek 10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX gbreve e 10\r\nKPX gbreve eacute 10\r\nKPX gbreve ecaron 10\r\nKPX gbreve ecircumflex 10\r\nKPX gbreve edieresis 10\r\nKPX gbreve edotaccent 10\r\nKPX gbreve egrave 10\r\nKPX gbreve emacron 10\r\nKPX gbreve eogonek 10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gcommaaccent e 10\r\nKPX gcommaaccent eacute 10\r\nKPX gcommaaccent ecaron 10\r\nKPX gcommaaccent ecircumflex 10\r\nKPX gcommaaccent edieresis 10\r\nKPX gcommaaccent edotaccent 10\r\nKPX gcommaaccent egrave 10\r\nKPX gcommaaccent emacron 10\r\nKPX gcommaaccent eogonek 10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX h y -20\r\nKPX h yacute -20\r\nKPX h ydieresis -20\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX l w -15\r\nKPX l y -15\r\nKPX l yacute -15\r\nKPX l ydieresis -15\r\nKPX lacute w -15\r\nKPX lacute y -15\r\nKPX lacute yacute -15\r\nKPX lacute ydieresis -15\r\nKPX lcommaaccent w -15\r\nKPX lcommaaccent y -15\r\nKPX lcommaaccent yacute -15\r\nKPX lcommaaccent ydieresis -15\r\nKPX lslash w -15\r\nKPX lslash y -15\r\nKPX lslash yacute -15\r\nKPX lslash ydieresis -15\r\nKPX m u -20\r\nKPX m uacute -20\r\nKPX m ucircumflex -20\r\nKPX m udieresis -20\r\nKPX m ugrave -20\r\nKPX m uhungarumlaut -20\r\nKPX m umacron -20\r\nKPX m uogonek -20\r\nKPX m uring -20\r\nKPX m y -30\r\nKPX m yacute -30\r\nKPX m ydieresis -30\r\nKPX n u -10\r\nKPX n uacute -10\r\nKPX n ucircumflex -10\r\nKPX n udieresis -10\r\nKPX n ugrave -10\r\nKPX n uhungarumlaut -10\r\nKPX n umacron -10\r\nKPX n uogonek -10\r\nKPX n uring -10\r\nKPX n v -40\r\nKPX n y -20\r\nKPX n yacute -20\r\nKPX n ydieresis -20\r\nKPX nacute u -10\r\nKPX nacute uacute -10\r\nKPX nacute ucircumflex -10\r\nKPX nacute udieresis -10\r\nKPX nacute ugrave -10\r\nKPX nacute uhungarumlaut -10\r\nKPX nacute umacron -10\r\nKPX nacute uogonek -10\r\nKPX nacute uring -10\r\nKPX nacute v -40\r\nKPX nacute y -20\r\nKPX nacute yacute -20\r\nKPX nacute ydieresis -20\r\nKPX ncaron u -10\r\nKPX ncaron uacute -10\r\nKPX ncaron ucircumflex -10\r\nKPX ncaron udieresis -10\r\nKPX ncaron ugrave -10\r\nKPX ncaron uhungarumlaut -10\r\nKPX ncaron umacron -10\r\nKPX ncaron uogonek -10\r\nKPX ncaron uring -10\r\nKPX ncaron v -40\r\nKPX ncaron y -20\r\nKPX ncaron yacute -20\r\nKPX ncaron ydieresis -20\r\nKPX ncommaaccent u -10\r\nKPX ncommaaccent uacute -10\r\nKPX ncommaaccent ucircumflex -10\r\nKPX ncommaaccent udieresis -10\r\nKPX ncommaaccent ugrave -10\r\nKPX ncommaaccent uhungarumlaut -10\r\nKPX ncommaaccent umacron -10\r\nKPX ncommaaccent uogonek -10\r\nKPX ncommaaccent uring -10\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -20\r\nKPX ncommaaccent yacute -20\r\nKPX ncommaaccent ydieresis -20\r\nKPX ntilde u -10\r\nKPX ntilde uacute -10\r\nKPX ntilde ucircumflex -10\r\nKPX ntilde udieresis -10\r\nKPX ntilde ugrave -10\r\nKPX ntilde uhungarumlaut -10\r\nKPX ntilde umacron -10\r\nKPX ntilde uogonek -10\r\nKPX ntilde uring -10\r\nKPX ntilde v -40\r\nKPX ntilde y -20\r\nKPX ntilde yacute -20\r\nKPX ntilde ydieresis -20\r\nKPX o v -20\r\nKPX o w -15\r\nKPX o x -30\r\nKPX o y -20\r\nKPX o yacute -20\r\nKPX o ydieresis -20\r\nKPX oacute v -20\r\nKPX oacute w -15\r\nKPX oacute x -30\r\nKPX oacute y -20\r\nKPX oacute yacute -20\r\nKPX oacute ydieresis -20\r\nKPX ocircumflex v -20\r\nKPX ocircumflex w -15\r\nKPX ocircumflex x -30\r\nKPX ocircumflex y -20\r\nKPX ocircumflex yacute -20\r\nKPX ocircumflex ydieresis -20\r\nKPX odieresis v -20\r\nKPX odieresis w -15\r\nKPX odieresis x -30\r\nKPX odieresis y -20\r\nKPX odieresis yacute -20\r\nKPX odieresis ydieresis -20\r\nKPX ograve v -20\r\nKPX ograve w -15\r\nKPX ograve x -30\r\nKPX ograve y -20\r\nKPX ograve yacute -20\r\nKPX ograve ydieresis -20\r\nKPX ohungarumlaut v -20\r\nKPX ohungarumlaut w -15\r\nKPX ohungarumlaut x -30\r\nKPX ohungarumlaut y -20\r\nKPX ohungarumlaut yacute -20\r\nKPX ohungarumlaut ydieresis -20\r\nKPX omacron v -20\r\nKPX omacron w -15\r\nKPX omacron x -30\r\nKPX omacron y -20\r\nKPX omacron yacute -20\r\nKPX omacron ydieresis -20\r\nKPX oslash v -20\r\nKPX oslash w -15\r\nKPX oslash x -30\r\nKPX oslash y -20\r\nKPX oslash yacute -20\r\nKPX oslash ydieresis -20\r\nKPX otilde v -20\r\nKPX otilde w -15\r\nKPX otilde x -30\r\nKPX otilde y -20\r\nKPX otilde yacute -20\r\nKPX otilde ydieresis -20\r\nKPX p y -15\r\nKPX p yacute -15\r\nKPX p ydieresis -15\r\nKPX period quotedblright -120\r\nKPX period quoteright -120\r\nKPX period space -40\r\nKPX quotedblright space -80\r\nKPX quoteleft quoteleft -46\r\nKPX quoteright d -80\r\nKPX quoteright dcroat -80\r\nKPX quoteright l -20\r\nKPX quoteright lacute -20\r\nKPX quoteright lcommaaccent -20\r\nKPX quoteright lslash -20\r\nKPX quoteright quoteright -46\r\nKPX quoteright r -40\r\nKPX quoteright racute -40\r\nKPX quoteright rcaron -40\r\nKPX quoteright rcommaaccent -40\r\nKPX quoteright s -60\r\nKPX quoteright sacute -60\r\nKPX quoteright scaron -60\r\nKPX quoteright scedilla -60\r\nKPX quoteright scommaaccent -60\r\nKPX quoteright space -80\r\nKPX quoteright v -20\r\nKPX r c -20\r\nKPX r cacute -20\r\nKPX r ccaron -20\r\nKPX r ccedilla -20\r\nKPX r comma -60\r\nKPX r d -20\r\nKPX r dcroat -20\r\nKPX r g -15\r\nKPX r gbreve -15\r\nKPX r gcommaaccent -15\r\nKPX r hyphen -20\r\nKPX r o -20\r\nKPX r oacute -20\r\nKPX r ocircumflex -20\r\nKPX r odieresis -20\r\nKPX r ograve -20\r\nKPX r ohungarumlaut -20\r\nKPX r omacron -20\r\nKPX r oslash -20\r\nKPX r otilde -20\r\nKPX r period -60\r\nKPX r q -20\r\nKPX r s -15\r\nKPX r sacute -15\r\nKPX r scaron -15\r\nKPX r scedilla -15\r\nKPX r scommaaccent -15\r\nKPX r t 20\r\nKPX r tcommaaccent 20\r\nKPX r v 10\r\nKPX r y 10\r\nKPX r yacute 10\r\nKPX r ydieresis 10\r\nKPX racute c -20\r\nKPX racute cacute -20\r\nKPX racute ccaron -20\r\nKPX racute ccedilla -20\r\nKPX racute comma -60\r\nKPX racute d -20\r\nKPX racute dcroat -20\r\nKPX racute g -15\r\nKPX racute gbreve -15\r\nKPX racute gcommaaccent -15\r\nKPX racute hyphen -20\r\nKPX racute o -20\r\nKPX racute oacute -20\r\nKPX racute ocircumflex -20\r\nKPX racute odieresis -20\r\nKPX racute ograve -20\r\nKPX racute ohungarumlaut -20\r\nKPX racute omacron -20\r\nKPX racute oslash -20\r\nKPX racute otilde -20\r\nKPX racute period -60\r\nKPX racute q -20\r\nKPX racute s -15\r\nKPX racute sacute -15\r\nKPX racute scaron -15\r\nKPX racute scedilla -15\r\nKPX racute scommaaccent -15\r\nKPX racute t 20\r\nKPX racute tcommaaccent 20\r\nKPX racute v 10\r\nKPX racute y 10\r\nKPX racute yacute 10\r\nKPX racute ydieresis 10\r\nKPX rcaron c -20\r\nKPX rcaron cacute -20\r\nKPX rcaron ccaron -20\r\nKPX rcaron ccedilla -20\r\nKPX rcaron comma -60\r\nKPX rcaron d -20\r\nKPX rcaron dcroat -20\r\nKPX rcaron g -15\r\nKPX rcaron gbreve -15\r\nKPX rcaron gcommaaccent -15\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -20\r\nKPX rcaron oacute -20\r\nKPX rcaron ocircumflex -20\r\nKPX rcaron odieresis -20\r\nKPX rcaron ograve -20\r\nKPX rcaron ohungarumlaut -20\r\nKPX rcaron omacron -20\r\nKPX rcaron oslash -20\r\nKPX rcaron otilde -20\r\nKPX rcaron period -60\r\nKPX rcaron q -20\r\nKPX rcaron s -15\r\nKPX rcaron sacute -15\r\nKPX rcaron scaron -15\r\nKPX rcaron scedilla -15\r\nKPX rcaron scommaaccent -15\r\nKPX rcaron t 20\r\nKPX rcaron tcommaaccent 20\r\nKPX rcaron v 10\r\nKPX rcaron y 10\r\nKPX rcaron yacute 10\r\nKPX rcaron ydieresis 10\r\nKPX rcommaaccent c -20\r\nKPX rcommaaccent cacute -20\r\nKPX rcommaaccent ccaron -20\r\nKPX rcommaaccent ccedilla -20\r\nKPX rcommaaccent comma -60\r\nKPX rcommaaccent d -20\r\nKPX rcommaaccent dcroat -20\r\nKPX rcommaaccent g -15\r\nKPX rcommaaccent gbreve -15\r\nKPX rcommaaccent gcommaaccent -15\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -20\r\nKPX rcommaaccent oacute -20\r\nKPX rcommaaccent ocircumflex -20\r\nKPX rcommaaccent odieresis -20\r\nKPX rcommaaccent ograve -20\r\nKPX rcommaaccent ohungarumlaut -20\r\nKPX rcommaaccent omacron -20\r\nKPX rcommaaccent oslash -20\r\nKPX rcommaaccent otilde -20\r\nKPX rcommaaccent period -60\r\nKPX rcommaaccent q -20\r\nKPX rcommaaccent s -15\r\nKPX rcommaaccent sacute -15\r\nKPX rcommaaccent scaron -15\r\nKPX rcommaaccent scedilla -15\r\nKPX rcommaaccent scommaaccent -15\r\nKPX rcommaaccent t 20\r\nKPX rcommaaccent tcommaaccent 20\r\nKPX rcommaaccent v 10\r\nKPX rcommaaccent y 10\r\nKPX rcommaaccent yacute 10\r\nKPX rcommaaccent ydieresis 10\r\nKPX s w -15\r\nKPX sacute w -15\r\nKPX scaron w -15\r\nKPX scedilla w -15\r\nKPX scommaaccent w -15\r\nKPX semicolon space -40\r\nKPX space T -100\r\nKPX space Tcaron -100\r\nKPX space Tcommaaccent -100\r\nKPX space V -80\r\nKPX space W -80\r\nKPX space Y -120\r\nKPX space Yacute -120\r\nKPX space Ydieresis -120\r\nKPX space quotedblleft -80\r\nKPX space quoteleft -60\r\nKPX v a -20\r\nKPX v aacute -20\r\nKPX v abreve -20\r\nKPX v acircumflex -20\r\nKPX v adieresis -20\r\nKPX v agrave -20\r\nKPX v amacron -20\r\nKPX v aogonek -20\r\nKPX v aring -20\r\nKPX v atilde -20\r\nKPX v comma -80\r\nKPX v o -30\r\nKPX v oacute -30\r\nKPX v ocircumflex -30\r\nKPX v odieresis -30\r\nKPX v ograve -30\r\nKPX v ohungarumlaut -30\r\nKPX v omacron -30\r\nKPX v oslash -30\r\nKPX v otilde -30\r\nKPX v period -80\r\nKPX w comma -40\r\nKPX w o -20\r\nKPX w oacute -20\r\nKPX w ocircumflex -20\r\nKPX w odieresis -20\r\nKPX w ograve -20\r\nKPX w ohungarumlaut -20\r\nKPX w omacron -20\r\nKPX w oslash -20\r\nKPX w otilde -20\r\nKPX w period -40\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y a -30\r\nKPX y aacute -30\r\nKPX y abreve -30\r\nKPX y acircumflex -30\r\nKPX y adieresis -30\r\nKPX y agrave -30\r\nKPX y amacron -30\r\nKPX y aogonek -30\r\nKPX y aring -30\r\nKPX y atilde -30\r\nKPX y comma -80\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -80\r\nKPX yacute a -30\r\nKPX yacute aacute -30\r\nKPX yacute abreve -30\r\nKPX yacute acircumflex -30\r\nKPX yacute adieresis -30\r\nKPX yacute agrave -30\r\nKPX yacute amacron -30\r\nKPX yacute aogonek -30\r\nKPX yacute aring -30\r\nKPX yacute atilde -30\r\nKPX yacute comma -80\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -80\r\nKPX ydieresis a -30\r\nKPX ydieresis aacute -30\r\nKPX ydieresis abreve -30\r\nKPX ydieresis acircumflex -30\r\nKPX ydieresis adieresis -30\r\nKPX ydieresis agrave -30\r\nKPX ydieresis amacron -30\r\nKPX ydieresis aogonek -30\r\nKPX ydieresis aring -30\r\nKPX ydieresis atilde -30\r\nKPX ydieresis comma -80\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -80\r\nKPX z e 10\r\nKPX z eacute 10\r\nKPX z ecaron 10\r\nKPX z ecircumflex 10\r\nKPX z edieresis 10\r\nKPX z edotaccent 10\r\nKPX z egrave 10\r\nKPX z emacron 10\r\nKPX z eogonek 10\r\nKPX zacute e 10\r\nKPX zacute eacute 10\r\nKPX zacute ecaron 10\r\nKPX zacute ecircumflex 10\r\nKPX zacute edieresis 10\r\nKPX zacute edotaccent 10\r\nKPX zacute egrave 10\r\nKPX zacute emacron 10\r\nKPX zacute eogonek 10\r\nKPX zcaron e 10\r\nKPX zcaron eacute 10\r\nKPX zcaron ecaron 10\r\nKPX zcaron ecircumflex 10\r\nKPX zcaron edieresis 10\r\nKPX zcaron edotaccent 10\r\nKPX zcaron egrave 10\r\nKPX zcaron emacron 10\r\nKPX zcaron eogonek 10\r\nKPX zdotaccent e 10\r\nKPX zdotaccent eacute 10\r\nKPX zdotaccent ecaron 10\r\nKPX zdotaccent ecircumflex 10\r\nKPX zdotaccent edieresis 10\r\nKPX zdotaccent edotaccent 10\r\nKPX zdotaccent egrave 10\r\nKPX zdotaccent emacron 10\r\nKPX zdotaccent eogonek 10\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Times-Roman'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:49:17 1997\r\nComment UniqueID 43068\r\nComment VMusage 43909 54934\r\nFontName Times-Roman\r\nFullName Times Roman\r\nFamilyName Times\r\nWeight Roman\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -168 -218 1000 898 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 662\r\nXHeight 450\r\nAscender 683\r\nDescender -217\r\nStdHW 28\r\nStdVW 84\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ;\r\nC 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;\r\nC 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ;\r\nC 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;\r\nC 37 ; WX 833 ; N percent ; B 61 -13 772 676 ;\r\nC 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ;\r\nC 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ;\r\nC 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ;\r\nC 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;\r\nC 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;\r\nC 43 ; WX 564 ; N plus ; B 30 0 534 506 ;\r\nC 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;\r\nC 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ;\r\nC 46 ; WX 250 ; N period ; B 70 -11 181 100 ;\r\nC 47 ; WX 278 ; N slash ; B -9 -14 287 676 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;\r\nC 49 ; WX 500 ; N one ; B 111 0 394 676 ;\r\nC 50 ; WX 500 ; N two ; B 30 0 475 676 ;\r\nC 51 ; WX 500 ; N three ; B 43 -14 431 676 ;\r\nC 52 ; WX 500 ; N four ; B 12 0 472 676 ;\r\nC 53 ; WX 500 ; N five ; B 32 -14 438 688 ;\r\nC 54 ; WX 500 ; N six ; B 34 -14 468 684 ;\r\nC 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;\r\nC 56 ; WX 500 ; N eight ; B 56 -14 445 676 ;\r\nC 57 ; WX 500 ; N nine ; B 30 -22 459 676 ;\r\nC 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;\r\nC 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;\r\nC 60 ; WX 564 ; N less ; B 28 -8 536 514 ;\r\nC 61 ; WX 564 ; N equal ; B 30 120 534 386 ;\r\nC 62 ; WX 564 ; N greater ; B 28 -8 536 514 ;\r\nC 63 ; WX 444 ; N question ; B 68 -8 414 676 ;\r\nC 64 ; WX 921 ; N at ; B 116 -14 809 676 ;\r\nC 65 ; WX 722 ; N A ; B 15 0 706 674 ;\r\nC 66 ; WX 667 ; N B ; B 17 0 593 662 ;\r\nC 67 ; WX 667 ; N C ; B 28 -14 633 676 ;\r\nC 68 ; WX 722 ; N D ; B 16 0 685 662 ;\r\nC 69 ; WX 611 ; N E ; B 12 0 597 662 ;\r\nC 70 ; WX 556 ; N F ; B 12 0 546 662 ;\r\nC 71 ; WX 722 ; N G ; B 32 -14 709 676 ;\r\nC 72 ; WX 722 ; N H ; B 19 0 702 662 ;\r\nC 73 ; WX 333 ; N I ; B 18 0 315 662 ;\r\nC 74 ; WX 389 ; N J ; B 10 -14 370 662 ;\r\nC 75 ; WX 722 ; N K ; B 34 0 723 662 ;\r\nC 76 ; WX 611 ; N L ; B 12 0 598 662 ;\r\nC 77 ; WX 889 ; N M ; B 12 0 863 662 ;\r\nC 78 ; WX 722 ; N N ; B 12 -11 707 662 ;\r\nC 79 ; WX 722 ; N O ; B 34 -14 688 676 ;\r\nC 80 ; WX 556 ; N P ; B 16 0 542 662 ;\r\nC 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;\r\nC 82 ; WX 667 ; N R ; B 17 0 659 662 ;\r\nC 83 ; WX 556 ; N S ; B 42 -14 491 676 ;\r\nC 84 ; WX 611 ; N T ; B 17 0 593 662 ;\r\nC 85 ; WX 722 ; N U ; B 14 -14 705 662 ;\r\nC 86 ; WX 722 ; N V ; B 16 -11 697 662 ;\r\nC 87 ; WX 944 ; N W ; B 5 -11 932 662 ;\r\nC 88 ; WX 722 ; N X ; B 10 0 704 662 ;\r\nC 89 ; WX 722 ; N Y ; B 22 0 703 662 ;\r\nC 90 ; WX 611 ; N Z ; B 9 0 597 662 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;\r\nC 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;\r\nC 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;\r\nC 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ;\r\nC 97 ; WX 444 ; N a ; B 37 -10 442 460 ;\r\nC 98 ; WX 500 ; N b ; B 3 -10 468 683 ;\r\nC 99 ; WX 444 ; N c ; B 25 -10 412 460 ;\r\nC 100 ; WX 500 ; N d ; B 27 -10 491 683 ;\r\nC 101 ; WX 444 ; N e ; B 25 -10 424 460 ;\r\nC 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 28 -218 470 460 ;\r\nC 104 ; WX 500 ; N h ; B 9 0 487 683 ;\r\nC 105 ; WX 278 ; N i ; B 16 0 253 683 ;\r\nC 106 ; WX 278 ; N j ; B -70 -218 194 683 ;\r\nC 107 ; WX 500 ; N k ; B 7 0 505 683 ;\r\nC 108 ; WX 278 ; N l ; B 19 0 257 683 ;\r\nC 109 ; WX 778 ; N m ; B 16 0 775 460 ;\r\nC 110 ; WX 500 ; N n ; B 16 0 485 460 ;\r\nC 111 ; WX 500 ; N o ; B 29 -10 470 460 ;\r\nC 112 ; WX 500 ; N p ; B 5 -217 470 460 ;\r\nC 113 ; WX 500 ; N q ; B 24 -217 488 460 ;\r\nC 114 ; WX 333 ; N r ; B 5 0 335 460 ;\r\nC 115 ; WX 389 ; N s ; B 51 -10 348 460 ;\r\nC 116 ; WX 278 ; N t ; B 13 -10 279 579 ;\r\nC 117 ; WX 500 ; N u ; B 9 -10 479 450 ;\r\nC 118 ; WX 500 ; N v ; B 19 -14 477 450 ;\r\nC 119 ; WX 722 ; N w ; B 21 -14 694 450 ;\r\nC 120 ; WX 500 ; N x ; B 17 0 479 450 ;\r\nC 121 ; WX 500 ; N y ; B 14 -218 475 450 ;\r\nC 122 ; WX 444 ; N z ; B 27 0 418 450 ;\r\nC 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;\r\nC 124 ; WX 200 ; N bar ; B 67 -218 133 782 ;\r\nC 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;\r\nC 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ;\r\nC 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;\r\nC 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ;\r\nC 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ;\r\nC 165 ; WX 500 ; N yen ; B -53 0 512 662 ;\r\nC 166 ; WX 500 ; N florin ; B 7 -189 490 676 ;\r\nC 167 ; WX 500 ; N section ; B 70 -148 426 676 ;\r\nC 168 ; WX 500 ; N currency ; B -22 58 522 602 ;\r\nC 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ;\r\nC 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;\r\nC 174 ; WX 556 ; N fi ; B 31 0 521 683 ;\r\nC 175 ; WX 556 ; N fl ; B 32 0 521 683 ;\r\nC 177 ; WX 500 ; N endash ; B 0 201 500 250 ;\r\nC 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;\r\nC 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ;\r\nC 183 ; WX 350 ; N bullet ; B 40 196 310 466 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ;\r\nC 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ;\r\nC 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;\r\nC 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ;\r\nC 193 ; WX 333 ; N grave ; B 19 507 242 678 ;\r\nC 194 ; WX 333 ; N acute ; B 93 507 317 678 ;\r\nC 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ;\r\nC 196 ; WX 333 ; N tilde ; B 1 532 331 638 ;\r\nC 197 ; WX 333 ; N macron ; B 11 547 322 601 ;\r\nC 198 ; WX 333 ; N breve ; B 26 507 307 664 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ;\r\nC 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ;\r\nC 202 ; WX 333 ; N ring ; B 67 512 266 711 ;\r\nC 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ;\r\nC 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ;\r\nC 207 ; WX 333 ; N caron ; B 11 507 322 674 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;\r\nC 225 ; WX 889 ; N AE ; B 0 0 863 662 ;\r\nC 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ;\r\nC 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;\r\nC 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ;\r\nC 234 ; WX 889 ; N OE ; B 30 -6 885 668 ;\r\nC 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ;\r\nC 241 ; WX 667 ; N ae ; B 38 -10 632 460 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;\r\nC 248 ; WX 278 ; N lslash ; B 19 0 259 683 ;\r\nC 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ;\r\nC 250 ; WX 722 ; N oe ; B 30 -10 690 460 ;\r\nC 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;\r\nC -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ;\r\nC -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ;\r\nC -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;\r\nC -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ;\r\nC -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ;\r\nC -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ;\r\nC -1 ; WX 564 ; N divide ; B 30 -10 534 516 ;\r\nC -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ;\r\nC -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ;\r\nC -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;\r\nC -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ;\r\nC -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ;\r\nC -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ;\r\nC -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ;\r\nC -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ;\r\nC -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ;\r\nC -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;\r\nC -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;\r\nC -1 ; WX 444 ; N aring ; B 37 -10 442 711 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ;\r\nC -1 ; WX 278 ; N lacute ; B 19 0 290 890 ;\r\nC -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ;\r\nC -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ;\r\nC -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;\r\nC -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ;\r\nC -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ;\r\nC -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ;\r\nC -1 ; WX 278 ; N iacute ; B 16 0 290 678 ;\r\nC -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;\r\nC -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ;\r\nC -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;\r\nC -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;\r\nC -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;\r\nC -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ;\r\nC -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ;\r\nC -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;\r\nC -1 ; WX 667 ; N Racute ; B 17 0 659 890 ;\r\nC -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;\r\nC -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ;\r\nC -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;\r\nC -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ;\r\nC -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ;\r\nC -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ;\r\nC -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ;\r\nC -1 ; WX 564 ; N multiply ; B 38 8 527 497 ;\r\nC -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ;\r\nC -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;\r\nC -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;\r\nC -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ;\r\nC -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ;\r\nC -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ;\r\nC -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;\r\nC -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;\r\nC -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ;\r\nC -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ;\r\nC -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ;\r\nC -1 ; WX 760 ; N registered ; B 38 -14 722 676 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ;\r\nC -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ;\r\nC -1 ; WX 333 ; N racute ; B 5 0 335 678 ;\r\nC -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;\r\nC -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ;\r\nC -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ;\r\nC -1 ; WX 722 ; N Eth ; B 16 0 685 662 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ;\r\nC -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ;\r\nC -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;\r\nC -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ;\r\nC -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ;\r\nC -1 ; WX 444 ; N zacute ; B 27 0 418 678 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ;\r\nC -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ;\r\nC -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ;\r\nC -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ;\r\nC -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ;\r\nC -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ;\r\nC -1 ; WX 500 ; N mu ; B 36 -218 512 450 ;\r\nC -1 ; WX 278 ; N igrave ; B -8 0 253 678 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ;\r\nC -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ;\r\nC -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;\r\nC -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;\r\nC -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ;\r\nC -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ;\r\nC -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;\r\nC -1 ; WX 980 ; N trademark ; B 30 256 957 662 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ;\r\nC -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ;\r\nC -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ;\r\nC -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;\r\nC -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;\r\nC -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ;\r\nC -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ;\r\nC -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;\r\nC -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;\r\nC -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;\r\nC -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;\r\nC -1 ; WX 400 ; N degree ; B 57 390 343 676 ;\r\nC -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;\r\nC -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;\r\nC -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ;\r\nC -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ;\r\nC -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ;\r\nC -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ;\r\nC -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ;\r\nC -1 ; WX 722 ; N Aring ; B 15 0 706 898 ;\r\nC -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ;\r\nC -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ;\r\nC -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ;\r\nC -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ;\r\nC -1 ; WX 564 ; N minus ; B 30 220 534 286 ;\r\nC -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ;\r\nC -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ;\r\nC -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;\r\nC -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ;\r\nC -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ;\r\nC -1 ; WX 500 ; N eth ; B 29 -10 471 686 ;\r\nC -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ;\r\nC -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ;\r\nC -1 ; WX 278 ; N imacron ; B 6 0 271 601 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2073\r\nKPX A C -40\r\nKPX A Cacute -40\r\nKPX A Ccaron -40\r\nKPX A Ccedilla -40\r\nKPX A G -40\r\nKPX A Gbreve -40\r\nKPX A Gcommaaccent -40\r\nKPX A O -55\r\nKPX A Oacute -55\r\nKPX A Ocircumflex -55\r\nKPX A Odieresis -55\r\nKPX A Ograve -55\r\nKPX A Ohungarumlaut -55\r\nKPX A Omacron -55\r\nKPX A Oslash -55\r\nKPX A Otilde -55\r\nKPX A Q -55\r\nKPX A T -111\r\nKPX A Tcaron -111\r\nKPX A Tcommaaccent -111\r\nKPX A U -55\r\nKPX A Uacute -55\r\nKPX A Ucircumflex -55\r\nKPX A Udieresis -55\r\nKPX A Ugrave -55\r\nKPX A Uhungarumlaut -55\r\nKPX A Umacron -55\r\nKPX A Uogonek -55\r\nKPX A Uring -55\r\nKPX A V -135\r\nKPX A W -90\r\nKPX A Y -105\r\nKPX A Yacute -105\r\nKPX A Ydieresis -105\r\nKPX A quoteright -111\r\nKPX A v -74\r\nKPX A w -92\r\nKPX A y -92\r\nKPX A yacute -92\r\nKPX A ydieresis -92\r\nKPX Aacute C -40\r\nKPX Aacute Cacute -40\r\nKPX Aacute Ccaron -40\r\nKPX Aacute Ccedilla -40\r\nKPX Aacute G -40\r\nKPX Aacute Gbreve -40\r\nKPX Aacute Gcommaaccent -40\r\nKPX Aacute O -55\r\nKPX Aacute Oacute -55\r\nKPX Aacute Ocircumflex -55\r\nKPX Aacute Odieresis -55\r\nKPX Aacute Ograve -55\r\nKPX Aacute Ohungarumlaut -55\r\nKPX Aacute Omacron -55\r\nKPX Aacute Oslash -55\r\nKPX Aacute Otilde -55\r\nKPX Aacute Q -55\r\nKPX Aacute T -111\r\nKPX Aacute Tcaron -111\r\nKPX Aacute Tcommaaccent -111\r\nKPX Aacute U -55\r\nKPX Aacute Uacute -55\r\nKPX Aacute Ucircumflex -55\r\nKPX Aacute Udieresis -55\r\nKPX Aacute Ugrave -55\r\nKPX Aacute Uhungarumlaut -55\r\nKPX Aacute Umacron -55\r\nKPX Aacute Uogonek -55\r\nKPX Aacute Uring -55\r\nKPX Aacute V -135\r\nKPX Aacute W -90\r\nKPX Aacute Y -105\r\nKPX Aacute Yacute -105\r\nKPX Aacute Ydieresis -105\r\nKPX Aacute quoteright -111\r\nKPX Aacute v -74\r\nKPX Aacute w -92\r\nKPX Aacute y -92\r\nKPX Aacute yacute -92\r\nKPX Aacute ydieresis -92\r\nKPX Abreve C -40\r\nKPX Abreve Cacute -40\r\nKPX Abreve Ccaron -40\r\nKPX Abreve Ccedilla -40\r\nKPX Abreve G -40\r\nKPX Abreve Gbreve -40\r\nKPX Abreve Gcommaaccent -40\r\nKPX Abreve O -55\r\nKPX Abreve Oacute -55\r\nKPX Abreve Ocircumflex -55\r\nKPX Abreve Odieresis -55\r\nKPX Abreve Ograve -55\r\nKPX Abreve Ohungarumlaut -55\r\nKPX Abreve Omacron -55\r\nKPX Abreve Oslash -55\r\nKPX Abreve Otilde -55\r\nKPX Abreve Q -55\r\nKPX Abreve T -111\r\nKPX Abreve Tcaron -111\r\nKPX Abreve Tcommaaccent -111\r\nKPX Abreve U -55\r\nKPX Abreve Uacute -55\r\nKPX Abreve Ucircumflex -55\r\nKPX Abreve Udieresis -55\r\nKPX Abreve Ugrave -55\r\nKPX Abreve Uhungarumlaut -55\r\nKPX Abreve Umacron -55\r\nKPX Abreve Uogonek -55\r\nKPX Abreve Uring -55\r\nKPX Abreve V -135\r\nKPX Abreve W -90\r\nKPX Abreve Y -105\r\nKPX Abreve Yacute -105\r\nKPX Abreve Ydieresis -105\r\nKPX Abreve quoteright -111\r\nKPX Abreve v -74\r\nKPX Abreve w -92\r\nKPX Abreve y -92\r\nKPX Abreve yacute -92\r\nKPX Abreve ydieresis -92\r\nKPX Acircumflex C -40\r\nKPX Acircumflex Cacute -40\r\nKPX Acircumflex Ccaron -40\r\nKPX Acircumflex Ccedilla -40\r\nKPX Acircumflex G -40\r\nKPX Acircumflex Gbreve -40\r\nKPX Acircumflex Gcommaaccent -40\r\nKPX Acircumflex O -55\r\nKPX Acircumflex Oacute -55\r\nKPX Acircumflex Ocircumflex -55\r\nKPX Acircumflex Odieresis -55\r\nKPX Acircumflex Ograve -55\r\nKPX Acircumflex Ohungarumlaut -55\r\nKPX Acircumflex Omacron -55\r\nKPX Acircumflex Oslash -55\r\nKPX Acircumflex Otilde -55\r\nKPX Acircumflex Q -55\r\nKPX Acircumflex T -111\r\nKPX Acircumflex Tcaron -111\r\nKPX Acircumflex Tcommaaccent -111\r\nKPX Acircumflex U -55\r\nKPX Acircumflex Uacute -55\r\nKPX Acircumflex Ucircumflex -55\r\nKPX Acircumflex Udieresis -55\r\nKPX Acircumflex Ugrave -55\r\nKPX Acircumflex Uhungarumlaut -55\r\nKPX Acircumflex Umacron -55\r\nKPX Acircumflex Uogonek -55\r\nKPX Acircumflex Uring -55\r\nKPX Acircumflex V -135\r\nKPX Acircumflex W -90\r\nKPX Acircumflex Y -105\r\nKPX Acircumflex Yacute -105\r\nKPX Acircumflex Ydieresis -105\r\nKPX Acircumflex quoteright -111\r\nKPX Acircumflex v -74\r\nKPX Acircumflex w -92\r\nKPX Acircumflex y -92\r\nKPX Acircumflex yacute -92\r\nKPX Acircumflex ydieresis -92\r\nKPX Adieresis C -40\r\nKPX Adieresis Cacute -40\r\nKPX Adieresis Ccaron -40\r\nKPX Adieresis Ccedilla -40\r\nKPX Adieresis G -40\r\nKPX Adieresis Gbreve -40\r\nKPX Adieresis Gcommaaccent -40\r\nKPX Adieresis O -55\r\nKPX Adieresis Oacute -55\r\nKPX Adieresis Ocircumflex -55\r\nKPX Adieresis Odieresis -55\r\nKPX Adieresis Ograve -55\r\nKPX Adieresis Ohungarumlaut -55\r\nKPX Adieresis Omacron -55\r\nKPX Adieresis Oslash -55\r\nKPX Adieresis Otilde -55\r\nKPX Adieresis Q -55\r\nKPX Adieresis T -111\r\nKPX Adieresis Tcaron -111\r\nKPX Adieresis Tcommaaccent -111\r\nKPX Adieresis U -55\r\nKPX Adieresis Uacute -55\r\nKPX Adieresis Ucircumflex -55\r\nKPX Adieresis Udieresis -55\r\nKPX Adieresis Ugrave -55\r\nKPX Adieresis Uhungarumlaut -55\r\nKPX Adieresis Umacron -55\r\nKPX Adieresis Uogonek -55\r\nKPX Adieresis Uring -55\r\nKPX Adieresis V -135\r\nKPX Adieresis W -90\r\nKPX Adieresis Y -105\r\nKPX Adieresis Yacute -105\r\nKPX Adieresis Ydieresis -105\r\nKPX Adieresis quoteright -111\r\nKPX Adieresis v -74\r\nKPX Adieresis w -92\r\nKPX Adieresis y -92\r\nKPX Adieresis yacute -92\r\nKPX Adieresis ydieresis -92\r\nKPX Agrave C -40\r\nKPX Agrave Cacute -40\r\nKPX Agrave Ccaron -40\r\nKPX Agrave Ccedilla -40\r\nKPX Agrave G -40\r\nKPX Agrave Gbreve -40\r\nKPX Agrave Gcommaaccent -40\r\nKPX Agrave O -55\r\nKPX Agrave Oacute -55\r\nKPX Agrave Ocircumflex -55\r\nKPX Agrave Odieresis -55\r\nKPX Agrave Ograve -55\r\nKPX Agrave Ohungarumlaut -55\r\nKPX Agrave Omacron -55\r\nKPX Agrave Oslash -55\r\nKPX Agrave Otilde -55\r\nKPX Agrave Q -55\r\nKPX Agrave T -111\r\nKPX Agrave Tcaron -111\r\nKPX Agrave Tcommaaccent -111\r\nKPX Agrave U -55\r\nKPX Agrave Uacute -55\r\nKPX Agrave Ucircumflex -55\r\nKPX Agrave Udieresis -55\r\nKPX Agrave Ugrave -55\r\nKPX Agrave Uhungarumlaut -55\r\nKPX Agrave Umacron -55\r\nKPX Agrave Uogonek -55\r\nKPX Agrave Uring -55\r\nKPX Agrave V -135\r\nKPX Agrave W -90\r\nKPX Agrave Y -105\r\nKPX Agrave Yacute -105\r\nKPX Agrave Ydieresis -105\r\nKPX Agrave quoteright -111\r\nKPX Agrave v -74\r\nKPX Agrave w -92\r\nKPX Agrave y -92\r\nKPX Agrave yacute -92\r\nKPX Agrave ydieresis -92\r\nKPX Amacron C -40\r\nKPX Amacron Cacute -40\r\nKPX Amacron Ccaron -40\r\nKPX Amacron Ccedilla -40\r\nKPX Amacron G -40\r\nKPX Amacron Gbreve -40\r\nKPX Amacron Gcommaaccent -40\r\nKPX Amacron O -55\r\nKPX Amacron Oacute -55\r\nKPX Amacron Ocircumflex -55\r\nKPX Amacron Odieresis -55\r\nKPX Amacron Ograve -55\r\nKPX Amacron Ohungarumlaut -55\r\nKPX Amacron Omacron -55\r\nKPX Amacron Oslash -55\r\nKPX Amacron Otilde -55\r\nKPX Amacron Q -55\r\nKPX Amacron T -111\r\nKPX Amacron Tcaron -111\r\nKPX Amacron Tcommaaccent -111\r\nKPX Amacron U -55\r\nKPX Amacron Uacute -55\r\nKPX Amacron Ucircumflex -55\r\nKPX Amacron Udieresis -55\r\nKPX Amacron Ugrave -55\r\nKPX Amacron Uhungarumlaut -55\r\nKPX Amacron Umacron -55\r\nKPX Amacron Uogonek -55\r\nKPX Amacron Uring -55\r\nKPX Amacron V -135\r\nKPX Amacron W -90\r\nKPX Amacron Y -105\r\nKPX Amacron Yacute -105\r\nKPX Amacron Ydieresis -105\r\nKPX Amacron quoteright -111\r\nKPX Amacron v -74\r\nKPX Amacron w -92\r\nKPX Amacron y -92\r\nKPX Amacron yacute -92\r\nKPX Amacron ydieresis -92\r\nKPX Aogonek C -40\r\nKPX Aogonek Cacute -40\r\nKPX Aogonek Ccaron -40\r\nKPX Aogonek Ccedilla -40\r\nKPX Aogonek G -40\r\nKPX Aogonek Gbreve -40\r\nKPX Aogonek Gcommaaccent -40\r\nKPX Aogonek O -55\r\nKPX Aogonek Oacute -55\r\nKPX Aogonek Ocircumflex -55\r\nKPX Aogonek Odieresis -55\r\nKPX Aogonek Ograve -55\r\nKPX Aogonek Ohungarumlaut -55\r\nKPX Aogonek Omacron -55\r\nKPX Aogonek Oslash -55\r\nKPX Aogonek Otilde -55\r\nKPX Aogonek Q -55\r\nKPX Aogonek T -111\r\nKPX Aogonek Tcaron -111\r\nKPX Aogonek Tcommaaccent -111\r\nKPX Aogonek U -55\r\nKPX Aogonek Uacute -55\r\nKPX Aogonek Ucircumflex -55\r\nKPX Aogonek Udieresis -55\r\nKPX Aogonek Ugrave -55\r\nKPX Aogonek Uhungarumlaut -55\r\nKPX Aogonek Umacron -55\r\nKPX Aogonek Uogonek -55\r\nKPX Aogonek Uring -55\r\nKPX Aogonek V -135\r\nKPX Aogonek W -90\r\nKPX Aogonek Y -105\r\nKPX Aogonek Yacute -105\r\nKPX Aogonek Ydieresis -105\r\nKPX Aogonek quoteright -111\r\nKPX Aogonek v -74\r\nKPX Aogonek w -52\r\nKPX Aogonek y -52\r\nKPX Aogonek yacute -52\r\nKPX Aogonek ydieresis -52\r\nKPX Aring C -40\r\nKPX Aring Cacute -40\r\nKPX Aring Ccaron -40\r\nKPX Aring Ccedilla -40\r\nKPX Aring G -40\r\nKPX Aring Gbreve -40\r\nKPX Aring Gcommaaccent -40\r\nKPX Aring O -55\r\nKPX Aring Oacute -55\r\nKPX Aring Ocircumflex -55\r\nKPX Aring Odieresis -55\r\nKPX Aring Ograve -55\r\nKPX Aring Ohungarumlaut -55\r\nKPX Aring Omacron -55\r\nKPX Aring Oslash -55\r\nKPX Aring Otilde -55\r\nKPX Aring Q -55\r\nKPX Aring T -111\r\nKPX Aring Tcaron -111\r\nKPX Aring Tcommaaccent -111\r\nKPX Aring U -55\r\nKPX Aring Uacute -55\r\nKPX Aring Ucircumflex -55\r\nKPX Aring Udieresis -55\r\nKPX Aring Ugrave -55\r\nKPX Aring Uhungarumlaut -55\r\nKPX Aring Umacron -55\r\nKPX Aring Uogonek -55\r\nKPX Aring Uring -55\r\nKPX Aring V -135\r\nKPX Aring W -90\r\nKPX Aring Y -105\r\nKPX Aring Yacute -105\r\nKPX Aring Ydieresis -105\r\nKPX Aring quoteright -111\r\nKPX Aring v -74\r\nKPX Aring w -92\r\nKPX Aring y -92\r\nKPX Aring yacute -92\r\nKPX Aring ydieresis -92\r\nKPX Atilde C -40\r\nKPX Atilde Cacute -40\r\nKPX Atilde Ccaron -40\r\nKPX Atilde Ccedilla -40\r\nKPX Atilde G -40\r\nKPX Atilde Gbreve -40\r\nKPX Atilde Gcommaaccent -40\r\nKPX Atilde O -55\r\nKPX Atilde Oacute -55\r\nKPX Atilde Ocircumflex -55\r\nKPX Atilde Odieresis -55\r\nKPX Atilde Ograve -55\r\nKPX Atilde Ohungarumlaut -55\r\nKPX Atilde Omacron -55\r\nKPX Atilde Oslash -55\r\nKPX Atilde Otilde -55\r\nKPX Atilde Q -55\r\nKPX Atilde T -111\r\nKPX Atilde Tcaron -111\r\nKPX Atilde Tcommaaccent -111\r\nKPX Atilde U -55\r\nKPX Atilde Uacute -55\r\nKPX Atilde Ucircumflex -55\r\nKPX Atilde Udieresis -55\r\nKPX Atilde Ugrave -55\r\nKPX Atilde Uhungarumlaut -55\r\nKPX Atilde Umacron -55\r\nKPX Atilde Uogonek -55\r\nKPX Atilde Uring -55\r\nKPX Atilde V -135\r\nKPX Atilde W -90\r\nKPX Atilde Y -105\r\nKPX Atilde Yacute -105\r\nKPX Atilde Ydieresis -105\r\nKPX Atilde quoteright -111\r\nKPX Atilde v -74\r\nKPX Atilde w -92\r\nKPX Atilde y -92\r\nKPX Atilde yacute -92\r\nKPX Atilde ydieresis -92\r\nKPX B A -35\r\nKPX B Aacute -35\r\nKPX B Abreve -35\r\nKPX B Acircumflex -35\r\nKPX B Adieresis -35\r\nKPX B Agrave -35\r\nKPX B Amacron -35\r\nKPX B Aogonek -35\r\nKPX B Aring -35\r\nKPX B Atilde -35\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -40\r\nKPX D Aacute -40\r\nKPX D Abreve -40\r\nKPX D Acircumflex -40\r\nKPX D Adieresis -40\r\nKPX D Agrave -40\r\nKPX D Amacron -40\r\nKPX D Aogonek -40\r\nKPX D Aring -40\r\nKPX D Atilde -40\r\nKPX D V -40\r\nKPX D W -30\r\nKPX D Y -55\r\nKPX D Yacute -55\r\nKPX D Ydieresis -55\r\nKPX Dcaron A -40\r\nKPX Dcaron Aacute -40\r\nKPX Dcaron Abreve -40\r\nKPX Dcaron Acircumflex -40\r\nKPX Dcaron Adieresis -40\r\nKPX Dcaron Agrave -40\r\nKPX Dcaron Amacron -40\r\nKPX Dcaron Aogonek -40\r\nKPX Dcaron Aring -40\r\nKPX Dcaron Atilde -40\r\nKPX Dcaron V -40\r\nKPX Dcaron W -30\r\nKPX Dcaron Y -55\r\nKPX Dcaron Yacute -55\r\nKPX Dcaron Ydieresis -55\r\nKPX Dcroat A -40\r\nKPX Dcroat Aacute -40\r\nKPX Dcroat Abreve -40\r\nKPX Dcroat Acircumflex -40\r\nKPX Dcroat Adieresis -40\r\nKPX Dcroat Agrave -40\r\nKPX Dcroat Amacron -40\r\nKPX Dcroat Aogonek -40\r\nKPX Dcroat Aring -40\r\nKPX Dcroat Atilde -40\r\nKPX Dcroat V -40\r\nKPX Dcroat W -30\r\nKPX Dcroat Y -55\r\nKPX Dcroat Yacute -55\r\nKPX Dcroat Ydieresis -55\r\nKPX F A -74\r\nKPX F Aacute -74\r\nKPX F Abreve -74\r\nKPX F Acircumflex -74\r\nKPX F Adieresis -74\r\nKPX F Agrave -74\r\nKPX F Amacron -74\r\nKPX F Aogonek -74\r\nKPX F Aring -74\r\nKPX F Atilde -74\r\nKPX F a -15\r\nKPX F aacute -15\r\nKPX F abreve -15\r\nKPX F acircumflex -15\r\nKPX F adieresis -15\r\nKPX F agrave -15\r\nKPX F amacron -15\r\nKPX F aogonek -15\r\nKPX F aring -15\r\nKPX F atilde -15\r\nKPX F comma -80\r\nKPX F o -15\r\nKPX F oacute -15\r\nKPX F ocircumflex -15\r\nKPX F odieresis -15\r\nKPX F ograve -15\r\nKPX F ohungarumlaut -15\r\nKPX F omacron -15\r\nKPX F oslash -15\r\nKPX F otilde -15\r\nKPX F period -80\r\nKPX J A -60\r\nKPX J Aacute -60\r\nKPX J Abreve -60\r\nKPX J Acircumflex -60\r\nKPX J Adieresis -60\r\nKPX J Agrave -60\r\nKPX J Amacron -60\r\nKPX J Aogonek -60\r\nKPX J Aring -60\r\nKPX J Atilde -60\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -35\r\nKPX K oacute -35\r\nKPX K ocircumflex -35\r\nKPX K odieresis -35\r\nKPX K ograve -35\r\nKPX K ohungarumlaut -35\r\nKPX K omacron -35\r\nKPX K oslash -35\r\nKPX K otilde -35\r\nKPX K u -15\r\nKPX K uacute -15\r\nKPX K ucircumflex -15\r\nKPX K udieresis -15\r\nKPX K ugrave -15\r\nKPX K uhungarumlaut -15\r\nKPX K umacron -15\r\nKPX K uogonek -15\r\nKPX K uring -15\r\nKPX K y -25\r\nKPX K yacute -25\r\nKPX K ydieresis -25\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -35\r\nKPX Kcommaaccent oacute -35\r\nKPX Kcommaaccent ocircumflex -35\r\nKPX Kcommaaccent odieresis -35\r\nKPX Kcommaaccent ograve -35\r\nKPX Kcommaaccent ohungarumlaut -35\r\nKPX Kcommaaccent omacron -35\r\nKPX Kcommaaccent oslash -35\r\nKPX Kcommaaccent otilde -35\r\nKPX Kcommaaccent u -15\r\nKPX Kcommaaccent uacute -15\r\nKPX Kcommaaccent ucircumflex -15\r\nKPX Kcommaaccent udieresis -15\r\nKPX Kcommaaccent ugrave -15\r\nKPX Kcommaaccent uhungarumlaut -15\r\nKPX Kcommaaccent umacron -15\r\nKPX Kcommaaccent uogonek -15\r\nKPX Kcommaaccent uring -15\r\nKPX Kcommaaccent y -25\r\nKPX Kcommaaccent yacute -25\r\nKPX Kcommaaccent ydieresis -25\r\nKPX L T -92\r\nKPX L Tcaron -92\r\nKPX L Tcommaaccent -92\r\nKPX L V -100\r\nKPX L W -74\r\nKPX L Y -100\r\nKPX L Yacute -100\r\nKPX L Ydieresis -100\r\nKPX L quoteright -92\r\nKPX L y -55\r\nKPX L yacute -55\r\nKPX L ydieresis -55\r\nKPX Lacute T -92\r\nKPX Lacute Tcaron -92\r\nKPX Lacute Tcommaaccent -92\r\nKPX Lacute V -100\r\nKPX Lacute W -74\r\nKPX Lacute Y -100\r\nKPX Lacute Yacute -100\r\nKPX Lacute Ydieresis -100\r\nKPX Lacute quoteright -92\r\nKPX Lacute y -55\r\nKPX Lacute yacute -55\r\nKPX Lacute ydieresis -55\r\nKPX Lcaron quoteright -92\r\nKPX Lcaron y -55\r\nKPX Lcaron yacute -55\r\nKPX Lcaron ydieresis -55\r\nKPX Lcommaaccent T -92\r\nKPX Lcommaaccent Tcaron -92\r\nKPX Lcommaaccent Tcommaaccent -92\r\nKPX Lcommaaccent V -100\r\nKPX Lcommaaccent W -74\r\nKPX Lcommaaccent Y -100\r\nKPX Lcommaaccent Yacute -100\r\nKPX Lcommaaccent Ydieresis -100\r\nKPX Lcommaaccent quoteright -92\r\nKPX Lcommaaccent y -55\r\nKPX Lcommaaccent yacute -55\r\nKPX Lcommaaccent ydieresis -55\r\nKPX Lslash T -92\r\nKPX Lslash Tcaron -92\r\nKPX Lslash Tcommaaccent -92\r\nKPX Lslash V -100\r\nKPX Lslash W -74\r\nKPX Lslash Y -100\r\nKPX Lslash Yacute -100\r\nKPX Lslash Ydieresis -100\r\nKPX Lslash quoteright -92\r\nKPX Lslash y -55\r\nKPX Lslash yacute -55\r\nKPX Lslash ydieresis -55\r\nKPX N A -35\r\nKPX N Aacute -35\r\nKPX N Abreve -35\r\nKPX N Acircumflex -35\r\nKPX N Adieresis -35\r\nKPX N Agrave -35\r\nKPX N Amacron -35\r\nKPX N Aogonek -35\r\nKPX N Aring -35\r\nKPX N Atilde -35\r\nKPX Nacute A -35\r\nKPX Nacute Aacute -35\r\nKPX Nacute Abreve -35\r\nKPX Nacute Acircumflex -35\r\nKPX Nacute Adieresis -35\r\nKPX Nacute Agrave -35\r\nKPX Nacute Amacron -35\r\nKPX Nacute Aogonek -35\r\nKPX Nacute Aring -35\r\nKPX Nacute Atilde -35\r\nKPX Ncaron A -35\r\nKPX Ncaron Aacute -35\r\nKPX Ncaron Abreve -35\r\nKPX Ncaron Acircumflex -35\r\nKPX Ncaron Adieresis -35\r\nKPX Ncaron Agrave -35\r\nKPX Ncaron Amacron -35\r\nKPX Ncaron Aogonek -35\r\nKPX Ncaron Aring -35\r\nKPX Ncaron Atilde -35\r\nKPX Ncommaaccent A -35\r\nKPX Ncommaaccent Aacute -35\r\nKPX Ncommaaccent Abreve -35\r\nKPX Ncommaaccent Acircumflex -35\r\nKPX Ncommaaccent Adieresis -35\r\nKPX Ncommaaccent Agrave -35\r\nKPX Ncommaaccent Amacron -35\r\nKPX Ncommaaccent Aogonek -35\r\nKPX Ncommaaccent Aring -35\r\nKPX Ncommaaccent Atilde -35\r\nKPX Ntilde A -35\r\nKPX Ntilde Aacute -35\r\nKPX Ntilde Abreve -35\r\nKPX Ntilde Acircumflex -35\r\nKPX Ntilde Adieresis -35\r\nKPX Ntilde Agrave -35\r\nKPX Ntilde Amacron -35\r\nKPX Ntilde Aogonek -35\r\nKPX Ntilde Aring -35\r\nKPX Ntilde Atilde -35\r\nKPX O A -35\r\nKPX O Aacute -35\r\nKPX O Abreve -35\r\nKPX O Acircumflex -35\r\nKPX O Adieresis -35\r\nKPX O Agrave -35\r\nKPX O Amacron -35\r\nKPX O Aogonek -35\r\nKPX O Aring -35\r\nKPX O Atilde -35\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -35\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -35\r\nKPX Oacute Aacute -35\r\nKPX Oacute Abreve -35\r\nKPX Oacute Acircumflex -35\r\nKPX Oacute Adieresis -35\r\nKPX Oacute Agrave -35\r\nKPX Oacute Amacron -35\r\nKPX Oacute Aogonek -35\r\nKPX Oacute Aring -35\r\nKPX Oacute Atilde -35\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -35\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -35\r\nKPX Ocircumflex Aacute -35\r\nKPX Ocircumflex Abreve -35\r\nKPX Ocircumflex Acircumflex -35\r\nKPX Ocircumflex Adieresis -35\r\nKPX Ocircumflex Agrave -35\r\nKPX Ocircumflex Amacron -35\r\nKPX Ocircumflex Aogonek -35\r\nKPX Ocircumflex Aring -35\r\nKPX Ocircumflex Atilde -35\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -35\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -35\r\nKPX Odieresis Aacute -35\r\nKPX Odieresis Abreve -35\r\nKPX Odieresis Acircumflex -35\r\nKPX Odieresis Adieresis -35\r\nKPX Odieresis Agrave -35\r\nKPX Odieresis Amacron -35\r\nKPX Odieresis Aogonek -35\r\nKPX Odieresis Aring -35\r\nKPX Odieresis Atilde -35\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -35\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -35\r\nKPX Ograve Aacute -35\r\nKPX Ograve Abreve -35\r\nKPX Ograve Acircumflex -35\r\nKPX Ograve Adieresis -35\r\nKPX Ograve Agrave -35\r\nKPX Ograve Amacron -35\r\nKPX Ograve Aogonek -35\r\nKPX Ograve Aring -35\r\nKPX Ograve Atilde -35\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -35\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -35\r\nKPX Ohungarumlaut Aacute -35\r\nKPX Ohungarumlaut Abreve -35\r\nKPX Ohungarumlaut Acircumflex -35\r\nKPX Ohungarumlaut Adieresis -35\r\nKPX Ohungarumlaut Agrave -35\r\nKPX Ohungarumlaut Amacron -35\r\nKPX Ohungarumlaut Aogonek -35\r\nKPX Ohungarumlaut Aring -35\r\nKPX Ohungarumlaut Atilde -35\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -35\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -35\r\nKPX Omacron Aacute -35\r\nKPX Omacron Abreve -35\r\nKPX Omacron Acircumflex -35\r\nKPX Omacron Adieresis -35\r\nKPX Omacron Agrave -35\r\nKPX Omacron Amacron -35\r\nKPX Omacron Aogonek -35\r\nKPX Omacron Aring -35\r\nKPX Omacron Atilde -35\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -35\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -35\r\nKPX Oslash Aacute -35\r\nKPX Oslash Abreve -35\r\nKPX Oslash Acircumflex -35\r\nKPX Oslash Adieresis -35\r\nKPX Oslash Agrave -35\r\nKPX Oslash Amacron -35\r\nKPX Oslash Aogonek -35\r\nKPX Oslash Aring -35\r\nKPX Oslash Atilde -35\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -35\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -35\r\nKPX Otilde Aacute -35\r\nKPX Otilde Abreve -35\r\nKPX Otilde Acircumflex -35\r\nKPX Otilde Adieresis -35\r\nKPX Otilde Agrave -35\r\nKPX Otilde Amacron -35\r\nKPX Otilde Aogonek -35\r\nKPX Otilde Aring -35\r\nKPX Otilde Atilde -35\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -35\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -92\r\nKPX P Aacute -92\r\nKPX P Abreve -92\r\nKPX P Acircumflex -92\r\nKPX P Adieresis -92\r\nKPX P Agrave -92\r\nKPX P Amacron -92\r\nKPX P Aogonek -92\r\nKPX P Aring -92\r\nKPX P Atilde -92\r\nKPX P a -15\r\nKPX P aacute -15\r\nKPX P abreve -15\r\nKPX P acircumflex -15\r\nKPX P adieresis -15\r\nKPX P agrave -15\r\nKPX P amacron -15\r\nKPX P aogonek -15\r\nKPX P aring -15\r\nKPX P atilde -15\r\nKPX P comma -111\r\nKPX P period -111\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R T -60\r\nKPX R Tcaron -60\r\nKPX R Tcommaaccent -60\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -80\r\nKPX R W -55\r\nKPX R Y -65\r\nKPX R Yacute -65\r\nKPX R Ydieresis -65\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute T -60\r\nKPX Racute Tcaron -60\r\nKPX Racute Tcommaaccent -60\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -80\r\nKPX Racute W -55\r\nKPX Racute Y -65\r\nKPX Racute Yacute -65\r\nKPX Racute Ydieresis -65\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron T -60\r\nKPX Rcaron Tcaron -60\r\nKPX Rcaron Tcommaaccent -60\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -80\r\nKPX Rcaron W -55\r\nKPX Rcaron Y -65\r\nKPX Rcaron Yacute -65\r\nKPX Rcaron Ydieresis -65\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent T -60\r\nKPX Rcommaaccent Tcaron -60\r\nKPX Rcommaaccent Tcommaaccent -60\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -80\r\nKPX Rcommaaccent W -55\r\nKPX Rcommaaccent Y -65\r\nKPX Rcommaaccent Yacute -65\r\nKPX Rcommaaccent Ydieresis -65\r\nKPX T A -93\r\nKPX T Aacute -93\r\nKPX T Abreve -93\r\nKPX T Acircumflex -93\r\nKPX T Adieresis -93\r\nKPX T Agrave -93\r\nKPX T Amacron -93\r\nKPX T Aogonek -93\r\nKPX T Aring -93\r\nKPX T Atilde -93\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -80\r\nKPX T aacute -80\r\nKPX T abreve -80\r\nKPX T acircumflex -80\r\nKPX T adieresis -40\r\nKPX T agrave -40\r\nKPX T amacron -40\r\nKPX T aogonek -80\r\nKPX T aring -80\r\nKPX T atilde -40\r\nKPX T colon -50\r\nKPX T comma -74\r\nKPX T e -70\r\nKPX T eacute -70\r\nKPX T ecaron -70\r\nKPX T ecircumflex -70\r\nKPX T edieresis -30\r\nKPX T edotaccent -70\r\nKPX T egrave -70\r\nKPX T emacron -30\r\nKPX T eogonek -70\r\nKPX T hyphen -92\r\nKPX T i -35\r\nKPX T iacute -35\r\nKPX T iogonek -35\r\nKPX T o -80\r\nKPX T oacute -80\r\nKPX T ocircumflex -80\r\nKPX T odieresis -80\r\nKPX T ograve -80\r\nKPX T ohungarumlaut -80\r\nKPX T omacron -80\r\nKPX T oslash -80\r\nKPX T otilde -80\r\nKPX T period -74\r\nKPX T r -35\r\nKPX T racute -35\r\nKPX T rcaron -35\r\nKPX T rcommaaccent -35\r\nKPX T semicolon -55\r\nKPX T u -45\r\nKPX T uacute -45\r\nKPX T ucircumflex -45\r\nKPX T udieresis -45\r\nKPX T ugrave -45\r\nKPX T uhungarumlaut -45\r\nKPX T umacron -45\r\nKPX T uogonek -45\r\nKPX T uring -45\r\nKPX T w -80\r\nKPX T y -80\r\nKPX T yacute -80\r\nKPX T ydieresis -80\r\nKPX Tcaron A -93\r\nKPX Tcaron Aacute -93\r\nKPX Tcaron Abreve -93\r\nKPX Tcaron Acircumflex -93\r\nKPX Tcaron Adieresis -93\r\nKPX Tcaron Agrave -93\r\nKPX Tcaron Amacron -93\r\nKPX Tcaron Aogonek -93\r\nKPX Tcaron Aring -93\r\nKPX Tcaron Atilde -93\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -80\r\nKPX Tcaron aacute -80\r\nKPX Tcaron abreve -80\r\nKPX Tcaron acircumflex -80\r\nKPX Tcaron adieresis -40\r\nKPX Tcaron agrave -40\r\nKPX Tcaron amacron -40\r\nKPX Tcaron aogonek -80\r\nKPX Tcaron aring -80\r\nKPX Tcaron atilde -40\r\nKPX Tcaron colon -50\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -70\r\nKPX Tcaron eacute -70\r\nKPX Tcaron ecaron -70\r\nKPX Tcaron ecircumflex -30\r\nKPX Tcaron edieresis -30\r\nKPX Tcaron edotaccent -70\r\nKPX Tcaron egrave -70\r\nKPX Tcaron emacron -30\r\nKPX Tcaron eogonek -70\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -35\r\nKPX Tcaron iacute -35\r\nKPX Tcaron iogonek -35\r\nKPX Tcaron o -80\r\nKPX Tcaron oacute -80\r\nKPX Tcaron ocircumflex -80\r\nKPX Tcaron odieresis -80\r\nKPX Tcaron ograve -80\r\nKPX Tcaron ohungarumlaut -80\r\nKPX Tcaron omacron -80\r\nKPX Tcaron oslash -80\r\nKPX Tcaron otilde -80\r\nKPX Tcaron period -74\r\nKPX Tcaron r -35\r\nKPX Tcaron racute -35\r\nKPX Tcaron rcaron -35\r\nKPX Tcaron rcommaaccent -35\r\nKPX Tcaron semicolon -55\r\nKPX Tcaron u -45\r\nKPX Tcaron uacute -45\r\nKPX Tcaron ucircumflex -45\r\nKPX Tcaron udieresis -45\r\nKPX Tcaron ugrave -45\r\nKPX Tcaron uhungarumlaut -45\r\nKPX Tcaron umacron -45\r\nKPX Tcaron uogonek -45\r\nKPX Tcaron uring -45\r\nKPX Tcaron w -80\r\nKPX Tcaron y -80\r\nKPX Tcaron yacute -80\r\nKPX Tcaron ydieresis -80\r\nKPX Tcommaaccent A -93\r\nKPX Tcommaaccent Aacute -93\r\nKPX Tcommaaccent Abreve -93\r\nKPX Tcommaaccent Acircumflex -93\r\nKPX Tcommaaccent Adieresis -93\r\nKPX Tcommaaccent Agrave -93\r\nKPX Tcommaaccent Amacron -93\r\nKPX Tcommaaccent Aogonek -93\r\nKPX Tcommaaccent Aring -93\r\nKPX Tcommaaccent Atilde -93\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -80\r\nKPX Tcommaaccent aacute -80\r\nKPX Tcommaaccent abreve -80\r\nKPX Tcommaaccent acircumflex -80\r\nKPX Tcommaaccent adieresis -40\r\nKPX Tcommaaccent agrave -40\r\nKPX Tcommaaccent amacron -40\r\nKPX Tcommaaccent aogonek -80\r\nKPX Tcommaaccent aring -80\r\nKPX Tcommaaccent atilde -40\r\nKPX Tcommaaccent colon -50\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -70\r\nKPX Tcommaaccent eacute -70\r\nKPX Tcommaaccent ecaron -70\r\nKPX Tcommaaccent ecircumflex -30\r\nKPX Tcommaaccent edieresis -30\r\nKPX Tcommaaccent edotaccent -70\r\nKPX Tcommaaccent egrave -30\r\nKPX Tcommaaccent emacron -70\r\nKPX Tcommaaccent eogonek -70\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -35\r\nKPX Tcommaaccent iacute -35\r\nKPX Tcommaaccent iogonek -35\r\nKPX Tcommaaccent o -80\r\nKPX Tcommaaccent oacute -80\r\nKPX Tcommaaccent ocircumflex -80\r\nKPX Tcommaaccent odieresis -80\r\nKPX Tcommaaccent ograve -80\r\nKPX Tcommaaccent ohungarumlaut -80\r\nKPX Tcommaaccent omacron -80\r\nKPX Tcommaaccent oslash -80\r\nKPX Tcommaaccent otilde -80\r\nKPX Tcommaaccent period -74\r\nKPX Tcommaaccent r -35\r\nKPX Tcommaaccent racute -35\r\nKPX Tcommaaccent rcaron -35\r\nKPX Tcommaaccent rcommaaccent -35\r\nKPX Tcommaaccent semicolon -55\r\nKPX Tcommaaccent u -45\r\nKPX Tcommaaccent uacute -45\r\nKPX Tcommaaccent ucircumflex -45\r\nKPX Tcommaaccent udieresis -45\r\nKPX Tcommaaccent ugrave -45\r\nKPX Tcommaaccent uhungarumlaut -45\r\nKPX Tcommaaccent umacron -45\r\nKPX Tcommaaccent uogonek -45\r\nKPX Tcommaaccent uring -45\r\nKPX Tcommaaccent w -80\r\nKPX Tcommaaccent y -80\r\nKPX Tcommaaccent yacute -80\r\nKPX Tcommaaccent ydieresis -80\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX V A -135\r\nKPX V Aacute -135\r\nKPX V Abreve -135\r\nKPX V Acircumflex -135\r\nKPX V Adieresis -135\r\nKPX V Agrave -135\r\nKPX V Amacron -135\r\nKPX V Aogonek -135\r\nKPX V Aring -135\r\nKPX V Atilde -135\r\nKPX V G -15\r\nKPX V Gbreve -15\r\nKPX V Gcommaaccent -15\r\nKPX V O -40\r\nKPX V Oacute -40\r\nKPX V Ocircumflex -40\r\nKPX V Odieresis -40\r\nKPX V Ograve -40\r\nKPX V Ohungarumlaut -40\r\nKPX V Omacron -40\r\nKPX V Oslash -40\r\nKPX V Otilde -40\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -71\r\nKPX V adieresis -71\r\nKPX V agrave -71\r\nKPX V amacron -71\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -71\r\nKPX V colon -74\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -71\r\nKPX V ecircumflex -71\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -100\r\nKPX V i -60\r\nKPX V iacute -60\r\nKPX V icircumflex -20\r\nKPX V idieresis -20\r\nKPX V igrave -20\r\nKPX V imacron -20\r\nKPX V iogonek -60\r\nKPX V o -129\r\nKPX V oacute -129\r\nKPX V ocircumflex -129\r\nKPX V odieresis -89\r\nKPX V ograve -89\r\nKPX V ohungarumlaut -129\r\nKPX V omacron -89\r\nKPX V oslash -129\r\nKPX V otilde -89\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -75\r\nKPX V uacute -75\r\nKPX V ucircumflex -75\r\nKPX V udieresis -75\r\nKPX V ugrave -75\r\nKPX V uhungarumlaut -75\r\nKPX V umacron -75\r\nKPX V uogonek -75\r\nKPX V uring -75\r\nKPX W A -120\r\nKPX W Aacute -120\r\nKPX W Abreve -120\r\nKPX W Acircumflex -120\r\nKPX W Adieresis -120\r\nKPX W Agrave -120\r\nKPX W Amacron -120\r\nKPX W Aogonek -120\r\nKPX W Aring -120\r\nKPX W Atilde -120\r\nKPX W O -10\r\nKPX W Oacute -10\r\nKPX W Ocircumflex -10\r\nKPX W Odieresis -10\r\nKPX W Ograve -10\r\nKPX W Ohungarumlaut -10\r\nKPX W Omacron -10\r\nKPX W Oslash -10\r\nKPX W Otilde -10\r\nKPX W a -80\r\nKPX W aacute -80\r\nKPX W abreve -80\r\nKPX W acircumflex -80\r\nKPX W adieresis -80\r\nKPX W agrave -80\r\nKPX W amacron -80\r\nKPX W aogonek -80\r\nKPX W aring -80\r\nKPX W atilde -80\r\nKPX W colon -37\r\nKPX W comma -92\r\nKPX W e -80\r\nKPX W eacute -80\r\nKPX W ecaron -80\r\nKPX W ecircumflex -80\r\nKPX W edieresis -40\r\nKPX W edotaccent -80\r\nKPX W egrave -40\r\nKPX W emacron -40\r\nKPX W eogonek -80\r\nKPX W hyphen -65\r\nKPX W i -40\r\nKPX W iacute -40\r\nKPX W iogonek -40\r\nKPX W o -80\r\nKPX W oacute -80\r\nKPX W ocircumflex -80\r\nKPX W odieresis -80\r\nKPX W ograve -80\r\nKPX W ohungarumlaut -80\r\nKPX W omacron -80\r\nKPX W oslash -80\r\nKPX W otilde -80\r\nKPX W period -92\r\nKPX W semicolon -37\r\nKPX W u -50\r\nKPX W uacute -50\r\nKPX W ucircumflex -50\r\nKPX W udieresis -50\r\nKPX W ugrave -50\r\nKPX W uhungarumlaut -50\r\nKPX W umacron -50\r\nKPX W uogonek -50\r\nKPX W uring -50\r\nKPX W y -73\r\nKPX W yacute -73\r\nKPX W ydieresis -73\r\nKPX Y A -120\r\nKPX Y Aacute -120\r\nKPX Y Abreve -120\r\nKPX Y Acircumflex -120\r\nKPX Y Adieresis -120\r\nKPX Y Agrave -120\r\nKPX Y Amacron -120\r\nKPX Y Aogonek -120\r\nKPX Y Aring -120\r\nKPX Y Atilde -120\r\nKPX Y O -30\r\nKPX Y Oacute -30\r\nKPX Y Ocircumflex -30\r\nKPX Y Odieresis -30\r\nKPX Y Ograve -30\r\nKPX Y Ohungarumlaut -30\r\nKPX Y Omacron -30\r\nKPX Y Oslash -30\r\nKPX Y Otilde -30\r\nKPX Y a -100\r\nKPX Y aacute -100\r\nKPX Y abreve -100\r\nKPX Y acircumflex -100\r\nKPX Y adieresis -60\r\nKPX Y agrave -60\r\nKPX Y amacron -60\r\nKPX Y aogonek -100\r\nKPX Y aring -100\r\nKPX Y atilde -60\r\nKPX Y colon -92\r\nKPX Y comma -129\r\nKPX Y e -100\r\nKPX Y eacute -100\r\nKPX Y ecaron -100\r\nKPX Y ecircumflex -100\r\nKPX Y edieresis -60\r\nKPX Y edotaccent -100\r\nKPX Y egrave -60\r\nKPX Y emacron -60\r\nKPX Y eogonek -100\r\nKPX Y hyphen -111\r\nKPX Y i -55\r\nKPX Y iacute -55\r\nKPX Y iogonek -55\r\nKPX Y o -110\r\nKPX Y oacute -110\r\nKPX Y ocircumflex -110\r\nKPX Y odieresis -70\r\nKPX Y ograve -70\r\nKPX Y ohungarumlaut -110\r\nKPX Y omacron -70\r\nKPX Y oslash -110\r\nKPX Y otilde -70\r\nKPX Y period -129\r\nKPX Y semicolon -92\r\nKPX Y u -111\r\nKPX Y uacute -111\r\nKPX Y ucircumflex -111\r\nKPX Y udieresis -71\r\nKPX Y ugrave -71\r\nKPX Y uhungarumlaut -111\r\nKPX Y umacron -71\r\nKPX Y uogonek -111\r\nKPX Y uring -111\r\nKPX Yacute A -120\r\nKPX Yacute Aacute -120\r\nKPX Yacute Abreve -120\r\nKPX Yacute Acircumflex -120\r\nKPX Yacute Adieresis -120\r\nKPX Yacute Agrave -120\r\nKPX Yacute Amacron -120\r\nKPX Yacute Aogonek -120\r\nKPX Yacute Aring -120\r\nKPX Yacute Atilde -120\r\nKPX Yacute O -30\r\nKPX Yacute Oacute -30\r\nKPX Yacute Ocircumflex -30\r\nKPX Yacute Odieresis -30\r\nKPX Yacute Ograve -30\r\nKPX Yacute Ohungarumlaut -30\r\nKPX Yacute Omacron -30\r\nKPX Yacute Oslash -30\r\nKPX Yacute Otilde -30\r\nKPX Yacute a -100\r\nKPX Yacute aacute -100\r\nKPX Yacute abreve -100\r\nKPX Yacute acircumflex -100\r\nKPX Yacute adieresis -60\r\nKPX Yacute agrave -60\r\nKPX Yacute amacron -60\r\nKPX Yacute aogonek -100\r\nKPX Yacute aring -100\r\nKPX Yacute atilde -60\r\nKPX Yacute colon -92\r\nKPX Yacute comma -129\r\nKPX Yacute e -100\r\nKPX Yacute eacute -100\r\nKPX Yacute ecaron -100\r\nKPX Yacute ecircumflex -100\r\nKPX Yacute edieresis -60\r\nKPX Yacute edotaccent -100\r\nKPX Yacute egrave -60\r\nKPX Yacute emacron -60\r\nKPX Yacute eogonek -100\r\nKPX Yacute hyphen -111\r\nKPX Yacute i -55\r\nKPX Yacute iacute -55\r\nKPX Yacute iogonek -55\r\nKPX Yacute o -110\r\nKPX Yacute oacute -110\r\nKPX Yacute ocircumflex -110\r\nKPX Yacute odieresis -70\r\nKPX Yacute ograve -70\r\nKPX Yacute ohungarumlaut -110\r\nKPX Yacute omacron -70\r\nKPX Yacute oslash -110\r\nKPX Yacute otilde -70\r\nKPX Yacute period -129\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -111\r\nKPX Yacute uacute -111\r\nKPX Yacute ucircumflex -111\r\nKPX Yacute udieresis -71\r\nKPX Yacute ugrave -71\r\nKPX Yacute uhungarumlaut -111\r\nKPX Yacute umacron -71\r\nKPX Yacute uogonek -111\r\nKPX Yacute uring -111\r\nKPX Ydieresis A -120\r\nKPX Ydieresis Aacute -120\r\nKPX Ydieresis Abreve -120\r\nKPX Ydieresis Acircumflex -120\r\nKPX Ydieresis Adieresis -120\r\nKPX Ydieresis Agrave -120\r\nKPX Ydieresis Amacron -120\r\nKPX Ydieresis Aogonek -120\r\nKPX Ydieresis Aring -120\r\nKPX Ydieresis Atilde -120\r\nKPX Ydieresis O -30\r\nKPX Ydieresis Oacute -30\r\nKPX Ydieresis Ocircumflex -30\r\nKPX Ydieresis Odieresis -30\r\nKPX Ydieresis Ograve -30\r\nKPX Ydieresis Ohungarumlaut -30\r\nKPX Ydieresis Omacron -30\r\nKPX Ydieresis Oslash -30\r\nKPX Ydieresis Otilde -30\r\nKPX Ydieresis a -100\r\nKPX Ydieresis aacute -100\r\nKPX Ydieresis abreve -100\r\nKPX Ydieresis acircumflex -100\r\nKPX Ydieresis adieresis -60\r\nKPX Ydieresis agrave -60\r\nKPX Ydieresis amacron -60\r\nKPX Ydieresis aogonek -100\r\nKPX Ydieresis aring -100\r\nKPX Ydieresis atilde -100\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -129\r\nKPX Ydieresis e -100\r\nKPX Ydieresis eacute -100\r\nKPX Ydieresis ecaron -100\r\nKPX Ydieresis ecircumflex -100\r\nKPX Ydieresis edieresis -60\r\nKPX Ydieresis edotaccent -100\r\nKPX Ydieresis egrave -60\r\nKPX Ydieresis emacron -60\r\nKPX Ydieresis eogonek -100\r\nKPX Ydieresis hyphen -111\r\nKPX Ydieresis i -55\r\nKPX Ydieresis iacute -55\r\nKPX Ydieresis iogonek -55\r\nKPX Ydieresis o -110\r\nKPX Ydieresis oacute -110\r\nKPX Ydieresis ocircumflex -110\r\nKPX Ydieresis odieresis -70\r\nKPX Ydieresis ograve -70\r\nKPX Ydieresis ohungarumlaut -110\r\nKPX Ydieresis omacron -70\r\nKPX Ydieresis oslash -110\r\nKPX Ydieresis otilde -70\r\nKPX Ydieresis period -129\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -111\r\nKPX Ydieresis uacute -111\r\nKPX Ydieresis ucircumflex -111\r\nKPX Ydieresis udieresis -71\r\nKPX Ydieresis ugrave -71\r\nKPX Ydieresis uhungarumlaut -111\r\nKPX Ydieresis umacron -71\r\nKPX Ydieresis uogonek -111\r\nKPX Ydieresis uring -111\r\nKPX a v -20\r\nKPX a w -15\r\nKPX aacute v -20\r\nKPX aacute w -15\r\nKPX abreve v -20\r\nKPX abreve w -15\r\nKPX acircumflex v -20\r\nKPX acircumflex w -15\r\nKPX adieresis v -20\r\nKPX adieresis w -15\r\nKPX agrave v -20\r\nKPX agrave w -15\r\nKPX amacron v -20\r\nKPX amacron w -15\r\nKPX aogonek v -20\r\nKPX aogonek w -15\r\nKPX aring v -20\r\nKPX aring w -15\r\nKPX atilde v -20\r\nKPX atilde w -15\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -15\r\nKPX c y -15\r\nKPX c yacute -15\r\nKPX c ydieresis -15\r\nKPX cacute y -15\r\nKPX cacute yacute -15\r\nKPX cacute ydieresis -15\r\nKPX ccaron y -15\r\nKPX ccaron yacute -15\r\nKPX ccaron ydieresis -15\r\nKPX ccedilla y -15\r\nKPX ccedilla yacute -15\r\nKPX ccedilla ydieresis -15\r\nKPX comma quotedblright -70\r\nKPX comma quoteright -70\r\nKPX e g -15\r\nKPX e gbreve -15\r\nKPX e gcommaaccent -15\r\nKPX e v -25\r\nKPX e w -25\r\nKPX e x -15\r\nKPX e y -15\r\nKPX e yacute -15\r\nKPX e ydieresis -15\r\nKPX eacute g -15\r\nKPX eacute gbreve -15\r\nKPX eacute gcommaaccent -15\r\nKPX eacute v -25\r\nKPX eacute w -25\r\nKPX eacute x -15\r\nKPX eacute y -15\r\nKPX eacute yacute -15\r\nKPX eacute ydieresis -15\r\nKPX ecaron g -15\r\nKPX ecaron gbreve -15\r\nKPX ecaron gcommaaccent -15\r\nKPX ecaron v -25\r\nKPX ecaron w -25\r\nKPX ecaron x -15\r\nKPX ecaron y -15\r\nKPX ecaron yacute -15\r\nKPX ecaron ydieresis -15\r\nKPX ecircumflex g -15\r\nKPX ecircumflex gbreve -15\r\nKPX ecircumflex gcommaaccent -15\r\nKPX ecircumflex v -25\r\nKPX ecircumflex w -25\r\nKPX ecircumflex x -15\r\nKPX ecircumflex y -15\r\nKPX ecircumflex yacute -15\r\nKPX ecircumflex ydieresis -15\r\nKPX edieresis g -15\r\nKPX edieresis gbreve -15\r\nKPX edieresis gcommaaccent -15\r\nKPX edieresis v -25\r\nKPX edieresis w -25\r\nKPX edieresis x -15\r\nKPX edieresis y -15\r\nKPX edieresis yacute -15\r\nKPX edieresis ydieresis -15\r\nKPX edotaccent g -15\r\nKPX edotaccent gbreve -15\r\nKPX edotaccent gcommaaccent -15\r\nKPX edotaccent v -25\r\nKPX edotaccent w -25\r\nKPX edotaccent x -15\r\nKPX edotaccent y -15\r\nKPX edotaccent yacute -15\r\nKPX edotaccent ydieresis -15\r\nKPX egrave g -15\r\nKPX egrave gbreve -15\r\nKPX egrave gcommaaccent -15\r\nKPX egrave v -25\r\nKPX egrave w -25\r\nKPX egrave x -15\r\nKPX egrave y -15\r\nKPX egrave yacute -15\r\nKPX egrave ydieresis -15\r\nKPX emacron g -15\r\nKPX emacron gbreve -15\r\nKPX emacron gcommaaccent -15\r\nKPX emacron v -25\r\nKPX emacron w -25\r\nKPX emacron x -15\r\nKPX emacron y -15\r\nKPX emacron yacute -15\r\nKPX emacron ydieresis -15\r\nKPX eogonek g -15\r\nKPX eogonek gbreve -15\r\nKPX eogonek gcommaaccent -15\r\nKPX eogonek v -25\r\nKPX eogonek w -25\r\nKPX eogonek x -15\r\nKPX eogonek y -15\r\nKPX eogonek yacute -15\r\nKPX eogonek ydieresis -15\r\nKPX f a -10\r\nKPX f aacute -10\r\nKPX f abreve -10\r\nKPX f acircumflex -10\r\nKPX f adieresis -10\r\nKPX f agrave -10\r\nKPX f amacron -10\r\nKPX f aogonek -10\r\nKPX f aring -10\r\nKPX f atilde -10\r\nKPX f dotlessi -50\r\nKPX f f -25\r\nKPX f i -20\r\nKPX f iacute -20\r\nKPX f quoteright 55\r\nKPX g a -5\r\nKPX g aacute -5\r\nKPX g abreve -5\r\nKPX g acircumflex -5\r\nKPX g adieresis -5\r\nKPX g agrave -5\r\nKPX g amacron -5\r\nKPX g aogonek -5\r\nKPX g aring -5\r\nKPX g atilde -5\r\nKPX gbreve a -5\r\nKPX gbreve aacute -5\r\nKPX gbreve abreve -5\r\nKPX gbreve acircumflex -5\r\nKPX gbreve adieresis -5\r\nKPX gbreve agrave -5\r\nKPX gbreve amacron -5\r\nKPX gbreve aogonek -5\r\nKPX gbreve aring -5\r\nKPX gbreve atilde -5\r\nKPX gcommaaccent a -5\r\nKPX gcommaaccent aacute -5\r\nKPX gcommaaccent abreve -5\r\nKPX gcommaaccent acircumflex -5\r\nKPX gcommaaccent adieresis -5\r\nKPX gcommaaccent agrave -5\r\nKPX gcommaaccent amacron -5\r\nKPX gcommaaccent aogonek -5\r\nKPX gcommaaccent aring -5\r\nKPX gcommaaccent atilde -5\r\nKPX h y -5\r\nKPX h yacute -5\r\nKPX h ydieresis -5\r\nKPX i v -25\r\nKPX iacute v -25\r\nKPX icircumflex v -25\r\nKPX idieresis v -25\r\nKPX igrave v -25\r\nKPX imacron v -25\r\nKPX iogonek v -25\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX k y -15\r\nKPX k yacute -15\r\nKPX k ydieresis -15\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX kcommaaccent y -15\r\nKPX kcommaaccent yacute -15\r\nKPX kcommaaccent ydieresis -15\r\nKPX l w -10\r\nKPX lacute w -10\r\nKPX lcommaaccent w -10\r\nKPX lslash w -10\r\nKPX n v -40\r\nKPX n y -15\r\nKPX n yacute -15\r\nKPX n ydieresis -15\r\nKPX nacute v -40\r\nKPX nacute y -15\r\nKPX nacute yacute -15\r\nKPX nacute ydieresis -15\r\nKPX ncaron v -40\r\nKPX ncaron y -15\r\nKPX ncaron yacute -15\r\nKPX ncaron ydieresis -15\r\nKPX ncommaaccent v -40\r\nKPX ncommaaccent y -15\r\nKPX ncommaaccent yacute -15\r\nKPX ncommaaccent ydieresis -15\r\nKPX ntilde v -40\r\nKPX ntilde y -15\r\nKPX ntilde yacute -15\r\nKPX ntilde ydieresis -15\r\nKPX o v -15\r\nKPX o w -25\r\nKPX o y -10\r\nKPX o yacute -10\r\nKPX o ydieresis -10\r\nKPX oacute v -15\r\nKPX oacute w -25\r\nKPX oacute y -10\r\nKPX oacute yacute -10\r\nKPX oacute ydieresis -10\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -25\r\nKPX ocircumflex y -10\r\nKPX ocircumflex yacute -10\r\nKPX ocircumflex ydieresis -10\r\nKPX odieresis v -15\r\nKPX odieresis w -25\r\nKPX odieresis y -10\r\nKPX odieresis yacute -10\r\nKPX odieresis ydieresis -10\r\nKPX ograve v -15\r\nKPX ograve w -25\r\nKPX ograve y -10\r\nKPX ograve yacute -10\r\nKPX ograve ydieresis -10\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -25\r\nKPX ohungarumlaut y -10\r\nKPX ohungarumlaut yacute -10\r\nKPX ohungarumlaut ydieresis -10\r\nKPX omacron v -15\r\nKPX omacron w -25\r\nKPX omacron y -10\r\nKPX omacron yacute -10\r\nKPX omacron ydieresis -10\r\nKPX oslash v -15\r\nKPX oslash w -25\r\nKPX oslash y -10\r\nKPX oslash yacute -10\r\nKPX oslash ydieresis -10\r\nKPX otilde v -15\r\nKPX otilde w -25\r\nKPX otilde y -10\r\nKPX otilde yacute -10\r\nKPX otilde ydieresis -10\r\nKPX p y -10\r\nKPX p yacute -10\r\nKPX p ydieresis -10\r\nKPX period quotedblright -70\r\nKPX period quoteright -70\r\nKPX quotedblleft A -80\r\nKPX quotedblleft Aacute -80\r\nKPX quotedblleft Abreve -80\r\nKPX quotedblleft Acircumflex -80\r\nKPX quotedblleft Adieresis -80\r\nKPX quotedblleft Agrave -80\r\nKPX quotedblleft Amacron -80\r\nKPX quotedblleft Aogonek -80\r\nKPX quotedblleft Aring -80\r\nKPX quotedblleft Atilde -80\r\nKPX quoteleft A -80\r\nKPX quoteleft Aacute -80\r\nKPX quoteleft Abreve -80\r\nKPX quoteleft Acircumflex -80\r\nKPX quoteleft Adieresis -80\r\nKPX quoteleft Agrave -80\r\nKPX quoteleft Amacron -80\r\nKPX quoteleft Aogonek -80\r\nKPX quoteleft Aring -80\r\nKPX quoteleft Atilde -80\r\nKPX quoteleft quoteleft -74\r\nKPX quoteright d -50\r\nKPX quoteright dcroat -50\r\nKPX quoteright l -10\r\nKPX quoteright lacute -10\r\nKPX quoteright lcommaaccent -10\r\nKPX quoteright lslash -10\r\nKPX quoteright quoteright -74\r\nKPX quoteright r -50\r\nKPX quoteright racute -50\r\nKPX quoteright rcaron -50\r\nKPX quoteright rcommaaccent -50\r\nKPX quoteright s -55\r\nKPX quoteright sacute -55\r\nKPX quoteright scaron -55\r\nKPX quoteright scedilla -55\r\nKPX quoteright scommaaccent -55\r\nKPX quoteright space -74\r\nKPX quoteright t -18\r\nKPX quoteright tcommaaccent -18\r\nKPX quoteright v -50\r\nKPX r comma -40\r\nKPX r g -18\r\nKPX r gbreve -18\r\nKPX r gcommaaccent -18\r\nKPX r hyphen -20\r\nKPX r period -55\r\nKPX racute comma -40\r\nKPX racute g -18\r\nKPX racute gbreve -18\r\nKPX racute gcommaaccent -18\r\nKPX racute hyphen -20\r\nKPX racute period -55\r\nKPX rcaron comma -40\r\nKPX rcaron g -18\r\nKPX rcaron gbreve -18\r\nKPX rcaron gcommaaccent -18\r\nKPX rcaron hyphen -20\r\nKPX rcaron period -55\r\nKPX rcommaaccent comma -40\r\nKPX rcommaaccent g -18\r\nKPX rcommaaccent gbreve -18\r\nKPX rcommaaccent gcommaaccent -18\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent period -55\r\nKPX space A -55\r\nKPX space Aacute -55\r\nKPX space Abreve -55\r\nKPX space Acircumflex -55\r\nKPX space Adieresis -55\r\nKPX space Agrave -55\r\nKPX space Amacron -55\r\nKPX space Aogonek -55\r\nKPX space Aring -55\r\nKPX space Atilde -55\r\nKPX space T -18\r\nKPX space Tcaron -18\r\nKPX space Tcommaaccent -18\r\nKPX space V -50\r\nKPX space W -30\r\nKPX space Y -90\r\nKPX space Yacute -90\r\nKPX space Ydieresis -90\r\nKPX v a -25\r\nKPX v aacute -25\r\nKPX v abreve -25\r\nKPX v acircumflex -25\r\nKPX v adieresis -25\r\nKPX v agrave -25\r\nKPX v amacron -25\r\nKPX v aogonek -25\r\nKPX v aring -25\r\nKPX v atilde -25\r\nKPX v comma -65\r\nKPX v e -15\r\nKPX v eacute -15\r\nKPX v ecaron -15\r\nKPX v ecircumflex -15\r\nKPX v edieresis -15\r\nKPX v edotaccent -15\r\nKPX v egrave -15\r\nKPX v emacron -15\r\nKPX v eogonek -15\r\nKPX v o -20\r\nKPX v oacute -20\r\nKPX v ocircumflex -20\r\nKPX v odieresis -20\r\nKPX v ograve -20\r\nKPX v ohungarumlaut -20\r\nKPX v omacron -20\r\nKPX v oslash -20\r\nKPX v otilde -20\r\nKPX v period -65\r\nKPX w a -10\r\nKPX w aacute -10\r\nKPX w abreve -10\r\nKPX w acircumflex -10\r\nKPX w adieresis -10\r\nKPX w agrave -10\r\nKPX w amacron -10\r\nKPX w aogonek -10\r\nKPX w aring -10\r\nKPX w atilde -10\r\nKPX w comma -65\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -65\r\nKPX x e -15\r\nKPX x eacute -15\r\nKPX x ecaron -15\r\nKPX x ecircumflex -15\r\nKPX x edieresis -15\r\nKPX x edotaccent -15\r\nKPX x egrave -15\r\nKPX x emacron -15\r\nKPX x eogonek -15\r\nKPX y comma -65\r\nKPX y period -65\r\nKPX yacute comma -65\r\nKPX yacute period -65\r\nKPX ydieresis comma -65\r\nKPX ydieresis period -65\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Times-Bold'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:52:56 1997\r\nComment UniqueID 43065\r\nComment VMusage 41636 52661\r\nFontName Times-Bold\r\nFullName Times Bold\r\nFamilyName Times\r\nWeight Bold\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -168 -218 1000 935 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 676\r\nXHeight 461\r\nAscender 683\r\nDescender -217\r\nStdHW 44\r\nStdVW 139\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;\r\nC 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;\r\nC 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ;\r\nC 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;\r\nC 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ;\r\nC 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ;\r\nC 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ;\r\nC 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ;\r\nC 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;\r\nC 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;\r\nC 43 ; WX 570 ; N plus ; B 33 0 537 506 ;\r\nC 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;\r\nC 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ;\r\nC 46 ; WX 250 ; N period ; B 41 -13 210 156 ;\r\nC 47 ; WX 278 ; N slash ; B -24 -19 302 691 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -13 476 688 ;\r\nC 49 ; WX 500 ; N one ; B 65 0 442 688 ;\r\nC 50 ; WX 500 ; N two ; B 17 0 478 688 ;\r\nC 51 ; WX 500 ; N three ; B 16 -14 468 688 ;\r\nC 52 ; WX 500 ; N four ; B 19 0 475 688 ;\r\nC 53 ; WX 500 ; N five ; B 22 -8 470 676 ;\r\nC 54 ; WX 500 ; N six ; B 28 -13 475 688 ;\r\nC 55 ; WX 500 ; N seven ; B 17 0 477 676 ;\r\nC 56 ; WX 500 ; N eight ; B 28 -13 472 688 ;\r\nC 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;\r\nC 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;\r\nC 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;\r\nC 60 ; WX 570 ; N less ; B 31 -8 539 514 ;\r\nC 61 ; WX 570 ; N equal ; B 33 107 537 399 ;\r\nC 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;\r\nC 63 ; WX 500 ; N question ; B 57 -13 445 689 ;\r\nC 64 ; WX 930 ; N at ; B 108 -19 822 691 ;\r\nC 65 ; WX 722 ; N A ; B 9 0 689 690 ;\r\nC 66 ; WX 667 ; N B ; B 16 0 619 676 ;\r\nC 67 ; WX 722 ; N C ; B 49 -19 687 691 ;\r\nC 68 ; WX 722 ; N D ; B 14 0 690 676 ;\r\nC 69 ; WX 667 ; N E ; B 16 0 641 676 ;\r\nC 70 ; WX 611 ; N F ; B 16 0 583 676 ;\r\nC 71 ; WX 778 ; N G ; B 37 -19 755 691 ;\r\nC 72 ; WX 778 ; N H ; B 21 0 759 676 ;\r\nC 73 ; WX 389 ; N I ; B 20 0 370 676 ;\r\nC 74 ; WX 500 ; N J ; B 3 -96 479 676 ;\r\nC 75 ; WX 778 ; N K ; B 30 0 769 676 ;\r\nC 76 ; WX 667 ; N L ; B 19 0 638 676 ;\r\nC 77 ; WX 944 ; N M ; B 14 0 921 676 ;\r\nC 78 ; WX 722 ; N N ; B 16 -18 701 676 ;\r\nC 79 ; WX 778 ; N O ; B 35 -19 743 691 ;\r\nC 80 ; WX 611 ; N P ; B 16 0 600 676 ;\r\nC 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;\r\nC 82 ; WX 722 ; N R ; B 26 0 715 676 ;\r\nC 83 ; WX 556 ; N S ; B 35 -19 513 692 ;\r\nC 84 ; WX 667 ; N T ; B 31 0 636 676 ;\r\nC 85 ; WX 722 ; N U ; B 16 -19 701 676 ;\r\nC 86 ; WX 722 ; N V ; B 16 -18 701 676 ;\r\nC 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;\r\nC 88 ; WX 722 ; N X ; B 16 0 699 676 ;\r\nC 89 ; WX 722 ; N Y ; B 15 0 699 676 ;\r\nC 90 ; WX 667 ; N Z ; B 28 0 634 676 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;\r\nC 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;\r\nC 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ;\r\nC 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ;\r\nC 97 ; WX 500 ; N a ; B 25 -14 488 473 ;\r\nC 98 ; WX 556 ; N b ; B 17 -14 521 676 ;\r\nC 99 ; WX 444 ; N c ; B 25 -14 430 473 ;\r\nC 100 ; WX 556 ; N d ; B 25 -14 534 676 ;\r\nC 101 ; WX 444 ; N e ; B 25 -14 426 473 ;\r\nC 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 28 -206 483 473 ;\r\nC 104 ; WX 556 ; N h ; B 16 0 534 676 ;\r\nC 105 ; WX 278 ; N i ; B 16 0 255 691 ;\r\nC 106 ; WX 333 ; N j ; B -57 -203 263 691 ;\r\nC 107 ; WX 556 ; N k ; B 22 0 543 676 ;\r\nC 108 ; WX 278 ; N l ; B 16 0 255 676 ;\r\nC 109 ; WX 833 ; N m ; B 16 0 814 473 ;\r\nC 110 ; WX 556 ; N n ; B 21 0 539 473 ;\r\nC 111 ; WX 500 ; N o ; B 25 -14 476 473 ;\r\nC 112 ; WX 556 ; N p ; B 19 -205 524 473 ;\r\nC 113 ; WX 556 ; N q ; B 34 -205 536 473 ;\r\nC 114 ; WX 444 ; N r ; B 29 0 434 473 ;\r\nC 115 ; WX 389 ; N s ; B 25 -14 361 473 ;\r\nC 116 ; WX 333 ; N t ; B 20 -12 332 630 ;\r\nC 117 ; WX 556 ; N u ; B 16 -14 537 461 ;\r\nC 118 ; WX 500 ; N v ; B 21 -14 485 461 ;\r\nC 119 ; WX 722 ; N w ; B 23 -14 707 461 ;\r\nC 120 ; WX 500 ; N x ; B 12 0 484 461 ;\r\nC 121 ; WX 500 ; N y ; B 16 -205 480 461 ;\r\nC 122 ; WX 444 ; N z ; B 21 0 420 461 ;\r\nC 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;\r\nC 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;\r\nC 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;\r\nC 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ;\r\nC 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ;\r\nC 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;\r\nC 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ;\r\nC 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ;\r\nC 165 ; WX 500 ; N yen ; B -64 0 547 676 ;\r\nC 166 ; WX 500 ; N florin ; B 0 -155 498 706 ;\r\nC 167 ; WX 500 ; N section ; B 57 -132 443 691 ;\r\nC 168 ; WX 500 ; N currency ; B -26 61 526 613 ;\r\nC 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;\r\nC 174 ; WX 556 ; N fi ; B 14 0 536 691 ;\r\nC 175 ; WX 556 ; N fl ; B 14 0 536 691 ;\r\nC 177 ; WX 500 ; N endash ; B 0 181 500 271 ;\r\nC 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ;\r\nC 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ;\r\nC 183 ; WX 350 ; N bullet ; B 35 198 315 478 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ;\r\nC 193 ; WX 333 ; N grave ; B 8 528 246 713 ;\r\nC 194 ; WX 333 ; N acute ; B 86 528 324 713 ;\r\nC 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ;\r\nC 196 ; WX 333 ; N tilde ; B -16 547 349 674 ;\r\nC 197 ; WX 333 ; N macron ; B 1 565 331 637 ;\r\nC 198 ; WX 333 ; N breve ; B 15 528 318 691 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 103 536 258 691 ;\r\nC 200 ; WX 333 ; N dieresis ; B -2 537 335 667 ;\r\nC 202 ; WX 333 ; N ring ; B 60 527 273 740 ;\r\nC 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ;\r\nC 206 ; WX 333 ; N ogonek ; B 90 -193 319 24 ;\r\nC 207 ; WX 333 ; N caron ; B -2 528 335 704 ;\r\nC 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;\r\nC 225 ; WX 1000 ; N AE ; B 4 0 951 676 ;\r\nC 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ;\r\nC 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ;\r\nC 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ;\r\nC 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ;\r\nC 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ;\r\nC 241 ; WX 722 ; N ae ; B 33 -14 693 473 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;\r\nC 248 ; WX 278 ; N lslash ; B -22 0 303 676 ;\r\nC 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ;\r\nC 250 ; WX 722 ; N oe ; B 22 -14 696 473 ;\r\nC 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ;\r\nC -1 ; WX 389 ; N Idieresis ; B 20 0 370 877 ;\r\nC -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ;\r\nC -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ;\r\nC -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;\r\nC -1 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ;\r\nC -1 ; WX 570 ; N divide ; B 33 -31 537 537 ;\r\nC -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ;\r\nC -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ;\r\nC -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;\r\nC -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;\r\nC -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ;\r\nC -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ;\r\nC -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ;\r\nC -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ;\r\nC -1 ; WX 667 ; N Edieresis ; B 16 0 641 877 ;\r\nC -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ;\r\nC -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ;\r\nC -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;\r\nC -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;\r\nC -1 ; WX 500 ; N aring ; B 25 -14 488 740 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ;\r\nC -1 ; WX 278 ; N lacute ; B 16 0 297 923 ;\r\nC -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ;\r\nC -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ;\r\nC -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ;\r\nC -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ;\r\nC -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ;\r\nC -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;\r\nC -1 ; WX 278 ; N iacute ; B 16 0 289 713 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;\r\nC -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;\r\nC -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ;\r\nC -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;\r\nC -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ;\r\nC -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ;\r\nC -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ;\r\nC -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;\r\nC -1 ; WX 722 ; N Racute ; B 26 0 715 923 ;\r\nC -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;\r\nC -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ;\r\nC -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;\r\nC -1 ; WX 556 ; N uring ; B 16 -14 537 740 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;\r\nC -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;\r\nC -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ;\r\nC -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;\r\nC -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;\r\nC -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ;\r\nC -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ;\r\nC -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -37 0 300 704 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;\r\nC -1 ; WX 500 ; N adieresis ; B 25 -14 488 667 ;\r\nC -1 ; WX 444 ; N edieresis ; B 25 -14 426 667 ;\r\nC -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ;\r\nC -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;\r\nC -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ;\r\nC -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;\r\nC -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ;\r\nC -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ;\r\nC -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;\r\nC -1 ; WX 747 ; N registered ; B 26 -19 721 691 ;\r\nC -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ;\r\nC -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ;\r\nC -1 ; WX 444 ; N racute ; B 29 0 434 713 ;\r\nC -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;\r\nC -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;\r\nC -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B 6 0 690 676 ;\r\nC -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ;\r\nC -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ;\r\nC -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ;\r\nC -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ;\r\nC -1 ; WX 722 ; N Adieresis ; B 9 0 689 877 ;\r\nC -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ;\r\nC -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;\r\nC -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ;\r\nC -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ;\r\nC -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ;\r\nC -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;\r\nC -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;\r\nC -1 ; WX 278 ; N idieresis ; B -37 0 300 667 ;\r\nC -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ;\r\nC -1 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ;\r\nC -1 ; WX 556 ; N mu ; B 33 -206 536 461 ;\r\nC -1 ; WX 278 ; N igrave ; B -27 0 255 713 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ;\r\nC -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ;\r\nC -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;\r\nC -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;\r\nC -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ;\r\nC -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ;\r\nC -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;\r\nC -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ;\r\nC -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ;\r\nC -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;\r\nC -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ;\r\nC -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;\r\nC -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ;\r\nC -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ;\r\nC -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ;\r\nC -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;\r\nC -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;\r\nC -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ;\r\nC -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;\r\nC -1 ; WX 400 ; N degree ; B 57 402 343 688 ;\r\nC -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ;\r\nC -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;\r\nC -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;\r\nC -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ;\r\nC -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ;\r\nC -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ;\r\nC -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ;\r\nC -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ;\r\nC -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ;\r\nC -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ;\r\nC -1 ; WX 722 ; N Aring ; B 9 0 689 935 ;\r\nC -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ;\r\nC -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ;\r\nC -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ;\r\nC -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ;\r\nC -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ;\r\nC -1 ; WX 570 ; N minus ; B 33 209 537 297 ;\r\nC -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ;\r\nC -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;\r\nC -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ;\r\nC -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ;\r\nC -1 ; WX 500 ; N odieresis ; B 25 -14 476 667 ;\r\nC -1 ; WX 556 ; N udieresis ; B 16 -14 537 667 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ;\r\nC -1 ; WX 500 ; N eth ; B 25 -14 476 691 ;\r\nC -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;\r\nC -1 ; WX 278 ; N imacron ; B -8 0 272 637 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2242\r\nKPX A C -55\r\nKPX A Cacute -55\r\nKPX A Ccaron -55\r\nKPX A Ccedilla -55\r\nKPX A G -55\r\nKPX A Gbreve -55\r\nKPX A Gcommaaccent -55\r\nKPX A O -45\r\nKPX A Oacute -45\r\nKPX A Ocircumflex -45\r\nKPX A Odieresis -45\r\nKPX A Ograve -45\r\nKPX A Ohungarumlaut -45\r\nKPX A Omacron -45\r\nKPX A Oslash -45\r\nKPX A Otilde -45\r\nKPX A Q -45\r\nKPX A T -95\r\nKPX A Tcaron -95\r\nKPX A Tcommaaccent -95\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -145\r\nKPX A W -130\r\nKPX A Y -100\r\nKPX A Yacute -100\r\nKPX A Ydieresis -100\r\nKPX A p -25\r\nKPX A quoteright -74\r\nKPX A u -50\r\nKPX A uacute -50\r\nKPX A ucircumflex -50\r\nKPX A udieresis -50\r\nKPX A ugrave -50\r\nKPX A uhungarumlaut -50\r\nKPX A umacron -50\r\nKPX A uogonek -50\r\nKPX A uring -50\r\nKPX A v -100\r\nKPX A w -90\r\nKPX A y -74\r\nKPX A yacute -74\r\nKPX A ydieresis -74\r\nKPX Aacute C -55\r\nKPX Aacute Cacute -55\r\nKPX Aacute Ccaron -55\r\nKPX Aacute Ccedilla -55\r\nKPX Aacute G -55\r\nKPX Aacute Gbreve -55\r\nKPX Aacute Gcommaaccent -55\r\nKPX Aacute O -45\r\nKPX Aacute Oacute -45\r\nKPX Aacute Ocircumflex -45\r\nKPX Aacute Odieresis -45\r\nKPX Aacute Ograve -45\r\nKPX Aacute Ohungarumlaut -45\r\nKPX Aacute Omacron -45\r\nKPX Aacute Oslash -45\r\nKPX Aacute Otilde -45\r\nKPX Aacute Q -45\r\nKPX Aacute T -95\r\nKPX Aacute Tcaron -95\r\nKPX Aacute Tcommaaccent -95\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -145\r\nKPX Aacute W -130\r\nKPX Aacute Y -100\r\nKPX Aacute Yacute -100\r\nKPX Aacute Ydieresis -100\r\nKPX Aacute p -25\r\nKPX Aacute quoteright -74\r\nKPX Aacute u -50\r\nKPX Aacute uacute -50\r\nKPX Aacute ucircumflex -50\r\nKPX Aacute udieresis -50\r\nKPX Aacute ugrave -50\r\nKPX Aacute uhungarumlaut -50\r\nKPX Aacute umacron -50\r\nKPX Aacute uogonek -50\r\nKPX Aacute uring -50\r\nKPX Aacute v -100\r\nKPX Aacute w -90\r\nKPX Aacute y -74\r\nKPX Aacute yacute -74\r\nKPX Aacute ydieresis -74\r\nKPX Abreve C -55\r\nKPX Abreve Cacute -55\r\nKPX Abreve Ccaron -55\r\nKPX Abreve Ccedilla -55\r\nKPX Abreve G -55\r\nKPX Abreve Gbreve -55\r\nKPX Abreve Gcommaaccent -55\r\nKPX Abreve O -45\r\nKPX Abreve Oacute -45\r\nKPX Abreve Ocircumflex -45\r\nKPX Abreve Odieresis -45\r\nKPX Abreve Ograve -45\r\nKPX Abreve Ohungarumlaut -45\r\nKPX Abreve Omacron -45\r\nKPX Abreve Oslash -45\r\nKPX Abreve Otilde -45\r\nKPX Abreve Q -45\r\nKPX Abreve T -95\r\nKPX Abreve Tcaron -95\r\nKPX Abreve Tcommaaccent -95\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -145\r\nKPX Abreve W -130\r\nKPX Abreve Y -100\r\nKPX Abreve Yacute -100\r\nKPX Abreve Ydieresis -100\r\nKPX Abreve p -25\r\nKPX Abreve quoteright -74\r\nKPX Abreve u -50\r\nKPX Abreve uacute -50\r\nKPX Abreve ucircumflex -50\r\nKPX Abreve udieresis -50\r\nKPX Abreve ugrave -50\r\nKPX Abreve uhungarumlaut -50\r\nKPX Abreve umacron -50\r\nKPX Abreve uogonek -50\r\nKPX Abreve uring -50\r\nKPX Abreve v -100\r\nKPX Abreve w -90\r\nKPX Abreve y -74\r\nKPX Abreve yacute -74\r\nKPX Abreve ydieresis -74\r\nKPX Acircumflex C -55\r\nKPX Acircumflex Cacute -55\r\nKPX Acircumflex Ccaron -55\r\nKPX Acircumflex Ccedilla -55\r\nKPX Acircumflex G -55\r\nKPX Acircumflex Gbreve -55\r\nKPX Acircumflex Gcommaaccent -55\r\nKPX Acircumflex O -45\r\nKPX Acircumflex Oacute -45\r\nKPX Acircumflex Ocircumflex -45\r\nKPX Acircumflex Odieresis -45\r\nKPX Acircumflex Ograve -45\r\nKPX Acircumflex Ohungarumlaut -45\r\nKPX Acircumflex Omacron -45\r\nKPX Acircumflex Oslash -45\r\nKPX Acircumflex Otilde -45\r\nKPX Acircumflex Q -45\r\nKPX Acircumflex T -95\r\nKPX Acircumflex Tcaron -95\r\nKPX Acircumflex Tcommaaccent -95\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -145\r\nKPX Acircumflex W -130\r\nKPX Acircumflex Y -100\r\nKPX Acircumflex Yacute -100\r\nKPX Acircumflex Ydieresis -100\r\nKPX Acircumflex p -25\r\nKPX Acircumflex quoteright -74\r\nKPX Acircumflex u -50\r\nKPX Acircumflex uacute -50\r\nKPX Acircumflex ucircumflex -50\r\nKPX Acircumflex udieresis -50\r\nKPX Acircumflex ugrave -50\r\nKPX Acircumflex uhungarumlaut -50\r\nKPX Acircumflex umacron -50\r\nKPX Acircumflex uogonek -50\r\nKPX Acircumflex uring -50\r\nKPX Acircumflex v -100\r\nKPX Acircumflex w -90\r\nKPX Acircumflex y -74\r\nKPX Acircumflex yacute -74\r\nKPX Acircumflex ydieresis -74\r\nKPX Adieresis C -55\r\nKPX Adieresis Cacute -55\r\nKPX Adieresis Ccaron -55\r\nKPX Adieresis Ccedilla -55\r\nKPX Adieresis G -55\r\nKPX Adieresis Gbreve -55\r\nKPX Adieresis Gcommaaccent -55\r\nKPX Adieresis O -45\r\nKPX Adieresis Oacute -45\r\nKPX Adieresis Ocircumflex -45\r\nKPX Adieresis Odieresis -45\r\nKPX Adieresis Ograve -45\r\nKPX Adieresis Ohungarumlaut -45\r\nKPX Adieresis Omacron -45\r\nKPX Adieresis Oslash -45\r\nKPX Adieresis Otilde -45\r\nKPX Adieresis Q -45\r\nKPX Adieresis T -95\r\nKPX Adieresis Tcaron -95\r\nKPX Adieresis Tcommaaccent -95\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -145\r\nKPX Adieresis W -130\r\nKPX Adieresis Y -100\r\nKPX Adieresis Yacute -100\r\nKPX Adieresis Ydieresis -100\r\nKPX Adieresis p -25\r\nKPX Adieresis quoteright -74\r\nKPX Adieresis u -50\r\nKPX Adieresis uacute -50\r\nKPX Adieresis ucircumflex -50\r\nKPX Adieresis udieresis -50\r\nKPX Adieresis ugrave -50\r\nKPX Adieresis uhungarumlaut -50\r\nKPX Adieresis umacron -50\r\nKPX Adieresis uogonek -50\r\nKPX Adieresis uring -50\r\nKPX Adieresis v -100\r\nKPX Adieresis w -90\r\nKPX Adieresis y -74\r\nKPX Adieresis yacute -74\r\nKPX Adieresis ydieresis -74\r\nKPX Agrave C -55\r\nKPX Agrave Cacute -55\r\nKPX Agrave Ccaron -55\r\nKPX Agrave Ccedilla -55\r\nKPX Agrave G -55\r\nKPX Agrave Gbreve -55\r\nKPX Agrave Gcommaaccent -55\r\nKPX Agrave O -45\r\nKPX Agrave Oacute -45\r\nKPX Agrave Ocircumflex -45\r\nKPX Agrave Odieresis -45\r\nKPX Agrave Ograve -45\r\nKPX Agrave Ohungarumlaut -45\r\nKPX Agrave Omacron -45\r\nKPX Agrave Oslash -45\r\nKPX Agrave Otilde -45\r\nKPX Agrave Q -45\r\nKPX Agrave T -95\r\nKPX Agrave Tcaron -95\r\nKPX Agrave Tcommaaccent -95\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -145\r\nKPX Agrave W -130\r\nKPX Agrave Y -100\r\nKPX Agrave Yacute -100\r\nKPX Agrave Ydieresis -100\r\nKPX Agrave p -25\r\nKPX Agrave quoteright -74\r\nKPX Agrave u -50\r\nKPX Agrave uacute -50\r\nKPX Agrave ucircumflex -50\r\nKPX Agrave udieresis -50\r\nKPX Agrave ugrave -50\r\nKPX Agrave uhungarumlaut -50\r\nKPX Agrave umacron -50\r\nKPX Agrave uogonek -50\r\nKPX Agrave uring -50\r\nKPX Agrave v -100\r\nKPX Agrave w -90\r\nKPX Agrave y -74\r\nKPX Agrave yacute -74\r\nKPX Agrave ydieresis -74\r\nKPX Amacron C -55\r\nKPX Amacron Cacute -55\r\nKPX Amacron Ccaron -55\r\nKPX Amacron Ccedilla -55\r\nKPX Amacron G -55\r\nKPX Amacron Gbreve -55\r\nKPX Amacron Gcommaaccent -55\r\nKPX Amacron O -45\r\nKPX Amacron Oacute -45\r\nKPX Amacron Ocircumflex -45\r\nKPX Amacron Odieresis -45\r\nKPX Amacron Ograve -45\r\nKPX Amacron Ohungarumlaut -45\r\nKPX Amacron Omacron -45\r\nKPX Amacron Oslash -45\r\nKPX Amacron Otilde -45\r\nKPX Amacron Q -45\r\nKPX Amacron T -95\r\nKPX Amacron Tcaron -95\r\nKPX Amacron Tcommaaccent -95\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -145\r\nKPX Amacron W -130\r\nKPX Amacron Y -100\r\nKPX Amacron Yacute -100\r\nKPX Amacron Ydieresis -100\r\nKPX Amacron p -25\r\nKPX Amacron quoteright -74\r\nKPX Amacron u -50\r\nKPX Amacron uacute -50\r\nKPX Amacron ucircumflex -50\r\nKPX Amacron udieresis -50\r\nKPX Amacron ugrave -50\r\nKPX Amacron uhungarumlaut -50\r\nKPX Amacron umacron -50\r\nKPX Amacron uogonek -50\r\nKPX Amacron uring -50\r\nKPX Amacron v -100\r\nKPX Amacron w -90\r\nKPX Amacron y -74\r\nKPX Amacron yacute -74\r\nKPX Amacron ydieresis -74\r\nKPX Aogonek C -55\r\nKPX Aogonek Cacute -55\r\nKPX Aogonek Ccaron -55\r\nKPX Aogonek Ccedilla -55\r\nKPX Aogonek G -55\r\nKPX Aogonek Gbreve -55\r\nKPX Aogonek Gcommaaccent -55\r\nKPX Aogonek O -45\r\nKPX Aogonek Oacute -45\r\nKPX Aogonek Ocircumflex -45\r\nKPX Aogonek Odieresis -45\r\nKPX Aogonek Ograve -45\r\nKPX Aogonek Ohungarumlaut -45\r\nKPX Aogonek Omacron -45\r\nKPX Aogonek Oslash -45\r\nKPX Aogonek Otilde -45\r\nKPX Aogonek Q -45\r\nKPX Aogonek T -95\r\nKPX Aogonek Tcaron -95\r\nKPX Aogonek Tcommaaccent -95\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -145\r\nKPX Aogonek W -130\r\nKPX Aogonek Y -100\r\nKPX Aogonek Yacute -100\r\nKPX Aogonek Ydieresis -100\r\nKPX Aogonek p -25\r\nKPX Aogonek quoteright -74\r\nKPX Aogonek u -50\r\nKPX Aogonek uacute -50\r\nKPX Aogonek ucircumflex -50\r\nKPX Aogonek udieresis -50\r\nKPX Aogonek ugrave -50\r\nKPX Aogonek uhungarumlaut -50\r\nKPX Aogonek umacron -50\r\nKPX Aogonek uogonek -50\r\nKPX Aogonek uring -50\r\nKPX Aogonek v -100\r\nKPX Aogonek w -90\r\nKPX Aogonek y -34\r\nKPX Aogonek yacute -34\r\nKPX Aogonek ydieresis -34\r\nKPX Aring C -55\r\nKPX Aring Cacute -55\r\nKPX Aring Ccaron -55\r\nKPX Aring Ccedilla -55\r\nKPX Aring G -55\r\nKPX Aring Gbreve -55\r\nKPX Aring Gcommaaccent -55\r\nKPX Aring O -45\r\nKPX Aring Oacute -45\r\nKPX Aring Ocircumflex -45\r\nKPX Aring Odieresis -45\r\nKPX Aring Ograve -45\r\nKPX Aring Ohungarumlaut -45\r\nKPX Aring Omacron -45\r\nKPX Aring Oslash -45\r\nKPX Aring Otilde -45\r\nKPX Aring Q -45\r\nKPX Aring T -95\r\nKPX Aring Tcaron -95\r\nKPX Aring Tcommaaccent -95\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -145\r\nKPX Aring W -130\r\nKPX Aring Y -100\r\nKPX Aring Yacute -100\r\nKPX Aring Ydieresis -100\r\nKPX Aring p -25\r\nKPX Aring quoteright -74\r\nKPX Aring u -50\r\nKPX Aring uacute -50\r\nKPX Aring ucircumflex -50\r\nKPX Aring udieresis -50\r\nKPX Aring ugrave -50\r\nKPX Aring uhungarumlaut -50\r\nKPX Aring umacron -50\r\nKPX Aring uogonek -50\r\nKPX Aring uring -50\r\nKPX Aring v -100\r\nKPX Aring w -90\r\nKPX Aring y -74\r\nKPX Aring yacute -74\r\nKPX Aring ydieresis -74\r\nKPX Atilde C -55\r\nKPX Atilde Cacute -55\r\nKPX Atilde Ccaron -55\r\nKPX Atilde Ccedilla -55\r\nKPX Atilde G -55\r\nKPX Atilde Gbreve -55\r\nKPX Atilde Gcommaaccent -55\r\nKPX Atilde O -45\r\nKPX Atilde Oacute -45\r\nKPX Atilde Ocircumflex -45\r\nKPX Atilde Odieresis -45\r\nKPX Atilde Ograve -45\r\nKPX Atilde Ohungarumlaut -45\r\nKPX Atilde Omacron -45\r\nKPX Atilde Oslash -45\r\nKPX Atilde Otilde -45\r\nKPX Atilde Q -45\r\nKPX Atilde T -95\r\nKPX Atilde Tcaron -95\r\nKPX Atilde Tcommaaccent -95\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -145\r\nKPX Atilde W -130\r\nKPX Atilde Y -100\r\nKPX Atilde Yacute -100\r\nKPX Atilde Ydieresis -100\r\nKPX Atilde p -25\r\nKPX Atilde quoteright -74\r\nKPX Atilde u -50\r\nKPX Atilde uacute -50\r\nKPX Atilde ucircumflex -50\r\nKPX Atilde udieresis -50\r\nKPX Atilde ugrave -50\r\nKPX Atilde uhungarumlaut -50\r\nKPX Atilde umacron -50\r\nKPX Atilde uogonek -50\r\nKPX Atilde uring -50\r\nKPX Atilde v -100\r\nKPX Atilde w -90\r\nKPX Atilde y -74\r\nKPX Atilde yacute -74\r\nKPX Atilde ydieresis -74\r\nKPX B A -30\r\nKPX B Aacute -30\r\nKPX B Abreve -30\r\nKPX B Acircumflex -30\r\nKPX B Adieresis -30\r\nKPX B Agrave -30\r\nKPX B Amacron -30\r\nKPX B Aogonek -30\r\nKPX B Aring -30\r\nKPX B Atilde -30\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -35\r\nKPX D Aacute -35\r\nKPX D Abreve -35\r\nKPX D Acircumflex -35\r\nKPX D Adieresis -35\r\nKPX D Agrave -35\r\nKPX D Amacron -35\r\nKPX D Aogonek -35\r\nKPX D Aring -35\r\nKPX D Atilde -35\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -40\r\nKPX D Yacute -40\r\nKPX D Ydieresis -40\r\nKPX D period -20\r\nKPX Dcaron A -35\r\nKPX Dcaron Aacute -35\r\nKPX Dcaron Abreve -35\r\nKPX Dcaron Acircumflex -35\r\nKPX Dcaron Adieresis -35\r\nKPX Dcaron Agrave -35\r\nKPX Dcaron Amacron -35\r\nKPX Dcaron Aogonek -35\r\nKPX Dcaron Aring -35\r\nKPX Dcaron Atilde -35\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -40\r\nKPX Dcaron Yacute -40\r\nKPX Dcaron Ydieresis -40\r\nKPX Dcaron period -20\r\nKPX Dcroat A -35\r\nKPX Dcroat Aacute -35\r\nKPX Dcroat Abreve -35\r\nKPX Dcroat Acircumflex -35\r\nKPX Dcroat Adieresis -35\r\nKPX Dcroat Agrave -35\r\nKPX Dcroat Amacron -35\r\nKPX Dcroat Aogonek -35\r\nKPX Dcroat Aring -35\r\nKPX Dcroat Atilde -35\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -40\r\nKPX Dcroat Yacute -40\r\nKPX Dcroat Ydieresis -40\r\nKPX Dcroat period -20\r\nKPX F A -90\r\nKPX F Aacute -90\r\nKPX F Abreve -90\r\nKPX F Acircumflex -90\r\nKPX F Adieresis -90\r\nKPX F Agrave -90\r\nKPX F Amacron -90\r\nKPX F Aogonek -90\r\nKPX F Aring -90\r\nKPX F Atilde -90\r\nKPX F a -25\r\nKPX F aacute -25\r\nKPX F abreve -25\r\nKPX F acircumflex -25\r\nKPX F adieresis -25\r\nKPX F agrave -25\r\nKPX F amacron -25\r\nKPX F aogonek -25\r\nKPX F aring -25\r\nKPX F atilde -25\r\nKPX F comma -92\r\nKPX F e -25\r\nKPX F eacute -25\r\nKPX F ecaron -25\r\nKPX F ecircumflex -25\r\nKPX F edieresis -25\r\nKPX F edotaccent -25\r\nKPX F egrave -25\r\nKPX F emacron -25\r\nKPX F eogonek -25\r\nKPX F o -25\r\nKPX F oacute -25\r\nKPX F ocircumflex -25\r\nKPX F odieresis -25\r\nKPX F ograve -25\r\nKPX F ohungarumlaut -25\r\nKPX F omacron -25\r\nKPX F oslash -25\r\nKPX F otilde -25\r\nKPX F period -110\r\nKPX J A -30\r\nKPX J Aacute -30\r\nKPX J Abreve -30\r\nKPX J Acircumflex -30\r\nKPX J Adieresis -30\r\nKPX J Agrave -30\r\nKPX J Amacron -30\r\nKPX J Aogonek -30\r\nKPX J Aring -30\r\nKPX J Atilde -30\r\nKPX J a -15\r\nKPX J aacute -15\r\nKPX J abreve -15\r\nKPX J acircumflex -15\r\nKPX J adieresis -15\r\nKPX J agrave -15\r\nKPX J amacron -15\r\nKPX J aogonek -15\r\nKPX J aring -15\r\nKPX J atilde -15\r\nKPX J e -15\r\nKPX J eacute -15\r\nKPX J ecaron -15\r\nKPX J ecircumflex -15\r\nKPX J edieresis -15\r\nKPX J edotaccent -15\r\nKPX J egrave -15\r\nKPX J emacron -15\r\nKPX J eogonek -15\r\nKPX J o -15\r\nKPX J oacute -15\r\nKPX J ocircumflex -15\r\nKPX J odieresis -15\r\nKPX J ograve -15\r\nKPX J ohungarumlaut -15\r\nKPX J omacron -15\r\nKPX J oslash -15\r\nKPX J otilde -15\r\nKPX J period -20\r\nKPX J u -15\r\nKPX J uacute -15\r\nKPX J ucircumflex -15\r\nKPX J udieresis -15\r\nKPX J ugrave -15\r\nKPX J uhungarumlaut -15\r\nKPX J umacron -15\r\nKPX J uogonek -15\r\nKPX J uring -15\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -25\r\nKPX K oacute -25\r\nKPX K ocircumflex -25\r\nKPX K odieresis -25\r\nKPX K ograve -25\r\nKPX K ohungarumlaut -25\r\nKPX K omacron -25\r\nKPX K oslash -25\r\nKPX K otilde -25\r\nKPX K u -15\r\nKPX K uacute -15\r\nKPX K ucircumflex -15\r\nKPX K udieresis -15\r\nKPX K ugrave -15\r\nKPX K uhungarumlaut -15\r\nKPX K umacron -15\r\nKPX K uogonek -15\r\nKPX K uring -15\r\nKPX K y -45\r\nKPX K yacute -45\r\nKPX K ydieresis -45\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -25\r\nKPX Kcommaaccent oacute -25\r\nKPX Kcommaaccent ocircumflex -25\r\nKPX Kcommaaccent odieresis -25\r\nKPX Kcommaaccent ograve -25\r\nKPX Kcommaaccent ohungarumlaut -25\r\nKPX Kcommaaccent omacron -25\r\nKPX Kcommaaccent oslash -25\r\nKPX Kcommaaccent otilde -25\r\nKPX Kcommaaccent u -15\r\nKPX Kcommaaccent uacute -15\r\nKPX Kcommaaccent ucircumflex -15\r\nKPX Kcommaaccent udieresis -15\r\nKPX Kcommaaccent ugrave -15\r\nKPX Kcommaaccent uhungarumlaut -15\r\nKPX Kcommaaccent umacron -15\r\nKPX Kcommaaccent uogonek -15\r\nKPX Kcommaaccent uring -15\r\nKPX Kcommaaccent y -45\r\nKPX Kcommaaccent yacute -45\r\nKPX Kcommaaccent ydieresis -45\r\nKPX L T -92\r\nKPX L Tcaron -92\r\nKPX L Tcommaaccent -92\r\nKPX L V -92\r\nKPX L W -92\r\nKPX L Y -92\r\nKPX L Yacute -92\r\nKPX L Ydieresis -92\r\nKPX L quotedblright -20\r\nKPX L quoteright -110\r\nKPX L y -55\r\nKPX L yacute -55\r\nKPX L ydieresis -55\r\nKPX Lacute T -92\r\nKPX Lacute Tcaron -92\r\nKPX Lacute Tcommaaccent -92\r\nKPX Lacute V -92\r\nKPX Lacute W -92\r\nKPX Lacute Y -92\r\nKPX Lacute Yacute -92\r\nKPX Lacute Ydieresis -92\r\nKPX Lacute quotedblright -20\r\nKPX Lacute quoteright -110\r\nKPX Lacute y -55\r\nKPX Lacute yacute -55\r\nKPX Lacute ydieresis -55\r\nKPX Lcommaaccent T -92\r\nKPX Lcommaaccent Tcaron -92\r\nKPX Lcommaaccent Tcommaaccent -92\r\nKPX Lcommaaccent V -92\r\nKPX Lcommaaccent W -92\r\nKPX Lcommaaccent Y -92\r\nKPX Lcommaaccent Yacute -92\r\nKPX Lcommaaccent Ydieresis -92\r\nKPX Lcommaaccent quotedblright -20\r\nKPX Lcommaaccent quoteright -110\r\nKPX Lcommaaccent y -55\r\nKPX Lcommaaccent yacute -55\r\nKPX Lcommaaccent ydieresis -55\r\nKPX Lslash T -92\r\nKPX Lslash Tcaron -92\r\nKPX Lslash Tcommaaccent -92\r\nKPX Lslash V -92\r\nKPX Lslash W -92\r\nKPX Lslash Y -92\r\nKPX Lslash Yacute -92\r\nKPX Lslash Ydieresis -92\r\nKPX Lslash quotedblright -20\r\nKPX Lslash quoteright -110\r\nKPX Lslash y -55\r\nKPX Lslash yacute -55\r\nKPX Lslash ydieresis -55\r\nKPX N A -20\r\nKPX N Aacute -20\r\nKPX N Abreve -20\r\nKPX N Acircumflex -20\r\nKPX N Adieresis -20\r\nKPX N Agrave -20\r\nKPX N Amacron -20\r\nKPX N Aogonek -20\r\nKPX N Aring -20\r\nKPX N Atilde -20\r\nKPX Nacute A -20\r\nKPX Nacute Aacute -20\r\nKPX Nacute Abreve -20\r\nKPX Nacute Acircumflex -20\r\nKPX Nacute Adieresis -20\r\nKPX Nacute Agrave -20\r\nKPX Nacute Amacron -20\r\nKPX Nacute Aogonek -20\r\nKPX Nacute Aring -20\r\nKPX Nacute Atilde -20\r\nKPX Ncaron A -20\r\nKPX Ncaron Aacute -20\r\nKPX Ncaron Abreve -20\r\nKPX Ncaron Acircumflex -20\r\nKPX Ncaron Adieresis -20\r\nKPX Ncaron Agrave -20\r\nKPX Ncaron Amacron -20\r\nKPX Ncaron Aogonek -20\r\nKPX Ncaron Aring -20\r\nKPX Ncaron Atilde -20\r\nKPX Ncommaaccent A -20\r\nKPX Ncommaaccent Aacute -20\r\nKPX Ncommaaccent Abreve -20\r\nKPX Ncommaaccent Acircumflex -20\r\nKPX Ncommaaccent Adieresis -20\r\nKPX Ncommaaccent Agrave -20\r\nKPX Ncommaaccent Amacron -20\r\nKPX Ncommaaccent Aogonek -20\r\nKPX Ncommaaccent Aring -20\r\nKPX Ncommaaccent Atilde -20\r\nKPX Ntilde A -20\r\nKPX Ntilde Aacute -20\r\nKPX Ntilde Abreve -20\r\nKPX Ntilde Acircumflex -20\r\nKPX Ntilde Adieresis -20\r\nKPX Ntilde Agrave -20\r\nKPX Ntilde Amacron -20\r\nKPX Ntilde Aogonek -20\r\nKPX Ntilde Aring -20\r\nKPX Ntilde Atilde -20\r\nKPX O A -40\r\nKPX O Aacute -40\r\nKPX O Abreve -40\r\nKPX O Acircumflex -40\r\nKPX O Adieresis -40\r\nKPX O Agrave -40\r\nKPX O Amacron -40\r\nKPX O Aogonek -40\r\nKPX O Aring -40\r\nKPX O Atilde -40\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -40\r\nKPX Oacute Aacute -40\r\nKPX Oacute Abreve -40\r\nKPX Oacute Acircumflex -40\r\nKPX Oacute Adieresis -40\r\nKPX Oacute Agrave -40\r\nKPX Oacute Amacron -40\r\nKPX Oacute Aogonek -40\r\nKPX Oacute Aring -40\r\nKPX Oacute Atilde -40\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -40\r\nKPX Ocircumflex Aacute -40\r\nKPX Ocircumflex Abreve -40\r\nKPX Ocircumflex Acircumflex -40\r\nKPX Ocircumflex Adieresis -40\r\nKPX Ocircumflex Agrave -40\r\nKPX Ocircumflex Amacron -40\r\nKPX Ocircumflex Aogonek -40\r\nKPX Ocircumflex Aring -40\r\nKPX Ocircumflex Atilde -40\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -40\r\nKPX Odieresis Aacute -40\r\nKPX Odieresis Abreve -40\r\nKPX Odieresis Acircumflex -40\r\nKPX Odieresis Adieresis -40\r\nKPX Odieresis Agrave -40\r\nKPX Odieresis Amacron -40\r\nKPX Odieresis Aogonek -40\r\nKPX Odieresis Aring -40\r\nKPX Odieresis Atilde -40\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -40\r\nKPX Ograve Aacute -40\r\nKPX Ograve Abreve -40\r\nKPX Ograve Acircumflex -40\r\nKPX Ograve Adieresis -40\r\nKPX Ograve Agrave -40\r\nKPX Ograve Amacron -40\r\nKPX Ograve Aogonek -40\r\nKPX Ograve Aring -40\r\nKPX Ograve Atilde -40\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -40\r\nKPX Ohungarumlaut Aacute -40\r\nKPX Ohungarumlaut Abreve -40\r\nKPX Ohungarumlaut Acircumflex -40\r\nKPX Ohungarumlaut Adieresis -40\r\nKPX Ohungarumlaut Agrave -40\r\nKPX Ohungarumlaut Amacron -40\r\nKPX Ohungarumlaut Aogonek -40\r\nKPX Ohungarumlaut Aring -40\r\nKPX Ohungarumlaut Atilde -40\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -40\r\nKPX Omacron Aacute -40\r\nKPX Omacron Abreve -40\r\nKPX Omacron Acircumflex -40\r\nKPX Omacron Adieresis -40\r\nKPX Omacron Agrave -40\r\nKPX Omacron Amacron -40\r\nKPX Omacron Aogonek -40\r\nKPX Omacron Aring -40\r\nKPX Omacron Atilde -40\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -40\r\nKPX Oslash Aacute -40\r\nKPX Oslash Abreve -40\r\nKPX Oslash Acircumflex -40\r\nKPX Oslash Adieresis -40\r\nKPX Oslash Agrave -40\r\nKPX Oslash Amacron -40\r\nKPX Oslash Aogonek -40\r\nKPX Oslash Aring -40\r\nKPX Oslash Atilde -40\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -40\r\nKPX Otilde Aacute -40\r\nKPX Otilde Abreve -40\r\nKPX Otilde Acircumflex -40\r\nKPX Otilde Adieresis -40\r\nKPX Otilde Agrave -40\r\nKPX Otilde Amacron -40\r\nKPX Otilde Aogonek -40\r\nKPX Otilde Aring -40\r\nKPX Otilde Atilde -40\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -74\r\nKPX P Aacute -74\r\nKPX P Abreve -74\r\nKPX P Acircumflex -74\r\nKPX P Adieresis -74\r\nKPX P Agrave -74\r\nKPX P Amacron -74\r\nKPX P Aogonek -74\r\nKPX P Aring -74\r\nKPX P Atilde -74\r\nKPX P a -10\r\nKPX P aacute -10\r\nKPX P abreve -10\r\nKPX P acircumflex -10\r\nKPX P adieresis -10\r\nKPX P agrave -10\r\nKPX P amacron -10\r\nKPX P aogonek -10\r\nKPX P aring -10\r\nKPX P atilde -10\r\nKPX P comma -92\r\nKPX P e -20\r\nKPX P eacute -20\r\nKPX P ecaron -20\r\nKPX P ecircumflex -20\r\nKPX P edieresis -20\r\nKPX P edotaccent -20\r\nKPX P egrave -20\r\nKPX P emacron -20\r\nKPX P eogonek -20\r\nKPX P o -20\r\nKPX P oacute -20\r\nKPX P ocircumflex -20\r\nKPX P odieresis -20\r\nKPX P ograve -20\r\nKPX P ohungarumlaut -20\r\nKPX P omacron -20\r\nKPX P oslash -20\r\nKPX P otilde -20\r\nKPX P period -110\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX Q period -20\r\nKPX R O -30\r\nKPX R Oacute -30\r\nKPX R Ocircumflex -30\r\nKPX R Odieresis -30\r\nKPX R Ograve -30\r\nKPX R Ohungarumlaut -30\r\nKPX R Omacron -30\r\nKPX R Oslash -30\r\nKPX R Otilde -30\r\nKPX R T -40\r\nKPX R Tcaron -40\r\nKPX R Tcommaaccent -40\r\nKPX R U -30\r\nKPX R Uacute -30\r\nKPX R Ucircumflex -30\r\nKPX R Udieresis -30\r\nKPX R Ugrave -30\r\nKPX R Uhungarumlaut -30\r\nKPX R Umacron -30\r\nKPX R Uogonek -30\r\nKPX R Uring -30\r\nKPX R V -55\r\nKPX R W -35\r\nKPX R Y -35\r\nKPX R Yacute -35\r\nKPX R Ydieresis -35\r\nKPX Racute O -30\r\nKPX Racute Oacute -30\r\nKPX Racute Ocircumflex -30\r\nKPX Racute Odieresis -30\r\nKPX Racute Ograve -30\r\nKPX Racute Ohungarumlaut -30\r\nKPX Racute Omacron -30\r\nKPX Racute Oslash -30\r\nKPX Racute Otilde -30\r\nKPX Racute T -40\r\nKPX Racute Tcaron -40\r\nKPX Racute Tcommaaccent -40\r\nKPX Racute U -30\r\nKPX Racute Uacute -30\r\nKPX Racute Ucircumflex -30\r\nKPX Racute Udieresis -30\r\nKPX Racute Ugrave -30\r\nKPX Racute Uhungarumlaut -30\r\nKPX Racute Umacron -30\r\nKPX Racute Uogonek -30\r\nKPX Racute Uring -30\r\nKPX Racute V -55\r\nKPX Racute W -35\r\nKPX Racute Y -35\r\nKPX Racute Yacute -35\r\nKPX Racute Ydieresis -35\r\nKPX Rcaron O -30\r\nKPX Rcaron Oacute -30\r\nKPX Rcaron Ocircumflex -30\r\nKPX Rcaron Odieresis -30\r\nKPX Rcaron Ograve -30\r\nKPX Rcaron Ohungarumlaut -30\r\nKPX Rcaron Omacron -30\r\nKPX Rcaron Oslash -30\r\nKPX Rcaron Otilde -30\r\nKPX Rcaron T -40\r\nKPX Rcaron Tcaron -40\r\nKPX Rcaron Tcommaaccent -40\r\nKPX Rcaron U -30\r\nKPX Rcaron Uacute -30\r\nKPX Rcaron Ucircumflex -30\r\nKPX Rcaron Udieresis -30\r\nKPX Rcaron Ugrave -30\r\nKPX Rcaron Uhungarumlaut -30\r\nKPX Rcaron Umacron -30\r\nKPX Rcaron Uogonek -30\r\nKPX Rcaron Uring -30\r\nKPX Rcaron V -55\r\nKPX Rcaron W -35\r\nKPX Rcaron Y -35\r\nKPX Rcaron Yacute -35\r\nKPX Rcaron Ydieresis -35\r\nKPX Rcommaaccent O -30\r\nKPX Rcommaaccent Oacute -30\r\nKPX Rcommaaccent Ocircumflex -30\r\nKPX Rcommaaccent Odieresis -30\r\nKPX Rcommaaccent Ograve -30\r\nKPX Rcommaaccent Ohungarumlaut -30\r\nKPX Rcommaaccent Omacron -30\r\nKPX Rcommaaccent Oslash -30\r\nKPX Rcommaaccent Otilde -30\r\nKPX Rcommaaccent T -40\r\nKPX Rcommaaccent Tcaron -40\r\nKPX Rcommaaccent Tcommaaccent -40\r\nKPX Rcommaaccent U -30\r\nKPX Rcommaaccent Uacute -30\r\nKPX Rcommaaccent Ucircumflex -30\r\nKPX Rcommaaccent Udieresis -30\r\nKPX Rcommaaccent Ugrave -30\r\nKPX Rcommaaccent Uhungarumlaut -30\r\nKPX Rcommaaccent Umacron -30\r\nKPX Rcommaaccent Uogonek -30\r\nKPX Rcommaaccent Uring -30\r\nKPX Rcommaaccent V -55\r\nKPX Rcommaaccent W -35\r\nKPX Rcommaaccent Y -35\r\nKPX Rcommaaccent Yacute -35\r\nKPX Rcommaaccent Ydieresis -35\r\nKPX T A -90\r\nKPX T Aacute -90\r\nKPX T Abreve -90\r\nKPX T Acircumflex -90\r\nKPX T Adieresis -90\r\nKPX T Agrave -90\r\nKPX T Amacron -90\r\nKPX T Aogonek -90\r\nKPX T Aring -90\r\nKPX T Atilde -90\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -52\r\nKPX T acircumflex -52\r\nKPX T adieresis -52\r\nKPX T agrave -52\r\nKPX T amacron -52\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -52\r\nKPX T colon -74\r\nKPX T comma -74\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -92\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -92\r\nKPX T i -18\r\nKPX T iacute -18\r\nKPX T iogonek -18\r\nKPX T o -92\r\nKPX T oacute -92\r\nKPX T ocircumflex -92\r\nKPX T odieresis -92\r\nKPX T ograve -92\r\nKPX T ohungarumlaut -92\r\nKPX T omacron -92\r\nKPX T oslash -92\r\nKPX T otilde -92\r\nKPX T period -90\r\nKPX T r -74\r\nKPX T racute -74\r\nKPX T rcaron -74\r\nKPX T rcommaaccent -74\r\nKPX T semicolon -74\r\nKPX T u -92\r\nKPX T uacute -92\r\nKPX T ucircumflex -92\r\nKPX T udieresis -92\r\nKPX T ugrave -92\r\nKPX T uhungarumlaut -92\r\nKPX T umacron -92\r\nKPX T uogonek -92\r\nKPX T uring -92\r\nKPX T w -74\r\nKPX T y -34\r\nKPX T yacute -34\r\nKPX T ydieresis -34\r\nKPX Tcaron A -90\r\nKPX Tcaron Aacute -90\r\nKPX Tcaron Abreve -90\r\nKPX Tcaron Acircumflex -90\r\nKPX Tcaron Adieresis -90\r\nKPX Tcaron Agrave -90\r\nKPX Tcaron Amacron -90\r\nKPX Tcaron Aogonek -90\r\nKPX Tcaron Aring -90\r\nKPX Tcaron Atilde -90\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -52\r\nKPX Tcaron acircumflex -52\r\nKPX Tcaron adieresis -52\r\nKPX Tcaron agrave -52\r\nKPX Tcaron amacron -52\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -52\r\nKPX Tcaron colon -74\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -92\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -18\r\nKPX Tcaron iacute -18\r\nKPX Tcaron iogonek -18\r\nKPX Tcaron o -92\r\nKPX Tcaron oacute -92\r\nKPX Tcaron ocircumflex -92\r\nKPX Tcaron odieresis -92\r\nKPX Tcaron ograve -92\r\nKPX Tcaron ohungarumlaut -92\r\nKPX Tcaron omacron -92\r\nKPX Tcaron oslash -92\r\nKPX Tcaron otilde -92\r\nKPX Tcaron period -90\r\nKPX Tcaron r -74\r\nKPX Tcaron racute -74\r\nKPX Tcaron rcaron -74\r\nKPX Tcaron rcommaaccent -74\r\nKPX Tcaron semicolon -74\r\nKPX Tcaron u -92\r\nKPX Tcaron uacute -92\r\nKPX Tcaron ucircumflex -92\r\nKPX Tcaron udieresis -92\r\nKPX Tcaron ugrave -92\r\nKPX Tcaron uhungarumlaut -92\r\nKPX Tcaron umacron -92\r\nKPX Tcaron uogonek -92\r\nKPX Tcaron uring -92\r\nKPX Tcaron w -74\r\nKPX Tcaron y -34\r\nKPX Tcaron yacute -34\r\nKPX Tcaron ydieresis -34\r\nKPX Tcommaaccent A -90\r\nKPX Tcommaaccent Aacute -90\r\nKPX Tcommaaccent Abreve -90\r\nKPX Tcommaaccent Acircumflex -90\r\nKPX Tcommaaccent Adieresis -90\r\nKPX Tcommaaccent Agrave -90\r\nKPX Tcommaaccent Amacron -90\r\nKPX Tcommaaccent Aogonek -90\r\nKPX Tcommaaccent Aring -90\r\nKPX Tcommaaccent Atilde -90\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -52\r\nKPX Tcommaaccent acircumflex -52\r\nKPX Tcommaaccent adieresis -52\r\nKPX Tcommaaccent agrave -52\r\nKPX Tcommaaccent amacron -52\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -52\r\nKPX Tcommaaccent colon -74\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -92\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -18\r\nKPX Tcommaaccent iacute -18\r\nKPX Tcommaaccent iogonek -18\r\nKPX Tcommaaccent o -92\r\nKPX Tcommaaccent oacute -92\r\nKPX Tcommaaccent ocircumflex -92\r\nKPX Tcommaaccent odieresis -92\r\nKPX Tcommaaccent ograve -92\r\nKPX Tcommaaccent ohungarumlaut -92\r\nKPX Tcommaaccent omacron -92\r\nKPX Tcommaaccent oslash -92\r\nKPX Tcommaaccent otilde -92\r\nKPX Tcommaaccent period -90\r\nKPX Tcommaaccent r -74\r\nKPX Tcommaaccent racute -74\r\nKPX Tcommaaccent rcaron -74\r\nKPX Tcommaaccent rcommaaccent -74\r\nKPX Tcommaaccent semicolon -74\r\nKPX Tcommaaccent u -92\r\nKPX Tcommaaccent uacute -92\r\nKPX Tcommaaccent ucircumflex -92\r\nKPX Tcommaaccent udieresis -92\r\nKPX Tcommaaccent ugrave -92\r\nKPX Tcommaaccent uhungarumlaut -92\r\nKPX Tcommaaccent umacron -92\r\nKPX Tcommaaccent uogonek -92\r\nKPX Tcommaaccent uring -92\r\nKPX Tcommaaccent w -74\r\nKPX Tcommaaccent y -34\r\nKPX Tcommaaccent yacute -34\r\nKPX Tcommaaccent ydieresis -34\r\nKPX U A -60\r\nKPX U Aacute -60\r\nKPX U Abreve -60\r\nKPX U Acircumflex -60\r\nKPX U Adieresis -60\r\nKPX U Agrave -60\r\nKPX U Amacron -60\r\nKPX U Aogonek -60\r\nKPX U Aring -60\r\nKPX U Atilde -60\r\nKPX U comma -50\r\nKPX U period -50\r\nKPX Uacute A -60\r\nKPX Uacute Aacute -60\r\nKPX Uacute Abreve -60\r\nKPX Uacute Acircumflex -60\r\nKPX Uacute Adieresis -60\r\nKPX Uacute Agrave -60\r\nKPX Uacute Amacron -60\r\nKPX Uacute Aogonek -60\r\nKPX Uacute Aring -60\r\nKPX Uacute Atilde -60\r\nKPX Uacute comma -50\r\nKPX Uacute period -50\r\nKPX Ucircumflex A -60\r\nKPX Ucircumflex Aacute -60\r\nKPX Ucircumflex Abreve -60\r\nKPX Ucircumflex Acircumflex -60\r\nKPX Ucircumflex Adieresis -60\r\nKPX Ucircumflex Agrave -60\r\nKPX Ucircumflex Amacron -60\r\nKPX Ucircumflex Aogonek -60\r\nKPX Ucircumflex Aring -60\r\nKPX Ucircumflex Atilde -60\r\nKPX Ucircumflex comma -50\r\nKPX Ucircumflex period -50\r\nKPX Udieresis A -60\r\nKPX Udieresis Aacute -60\r\nKPX Udieresis Abreve -60\r\nKPX Udieresis Acircumflex -60\r\nKPX Udieresis Adieresis -60\r\nKPX Udieresis Agrave -60\r\nKPX Udieresis Amacron -60\r\nKPX Udieresis Aogonek -60\r\nKPX Udieresis Aring -60\r\nKPX Udieresis Atilde -60\r\nKPX Udieresis comma -50\r\nKPX Udieresis period -50\r\nKPX Ugrave A -60\r\nKPX Ugrave Aacute -60\r\nKPX Ugrave Abreve -60\r\nKPX Ugrave Acircumflex -60\r\nKPX Ugrave Adieresis -60\r\nKPX Ugrave Agrave -60\r\nKPX Ugrave Amacron -60\r\nKPX Ugrave Aogonek -60\r\nKPX Ugrave Aring -60\r\nKPX Ugrave Atilde -60\r\nKPX Ugrave comma -50\r\nKPX Ugrave period -50\r\nKPX Uhungarumlaut A -60\r\nKPX Uhungarumlaut Aacute -60\r\nKPX Uhungarumlaut Abreve -60\r\nKPX Uhungarumlaut Acircumflex -60\r\nKPX Uhungarumlaut Adieresis -60\r\nKPX Uhungarumlaut Agrave -60\r\nKPX Uhungarumlaut Amacron -60\r\nKPX Uhungarumlaut Aogonek -60\r\nKPX Uhungarumlaut Aring -60\r\nKPX Uhungarumlaut Atilde -60\r\nKPX Uhungarumlaut comma -50\r\nKPX Uhungarumlaut period -50\r\nKPX Umacron A -60\r\nKPX Umacron Aacute -60\r\nKPX Umacron Abreve -60\r\nKPX Umacron Acircumflex -60\r\nKPX Umacron Adieresis -60\r\nKPX Umacron Agrave -60\r\nKPX Umacron Amacron -60\r\nKPX Umacron Aogonek -60\r\nKPX Umacron Aring -60\r\nKPX Umacron Atilde -60\r\nKPX Umacron comma -50\r\nKPX Umacron period -50\r\nKPX Uogonek A -60\r\nKPX Uogonek Aacute -60\r\nKPX Uogonek Abreve -60\r\nKPX Uogonek Acircumflex -60\r\nKPX Uogonek Adieresis -60\r\nKPX Uogonek Agrave -60\r\nKPX Uogonek Amacron -60\r\nKPX Uogonek Aogonek -60\r\nKPX Uogonek Aring -60\r\nKPX Uogonek Atilde -60\r\nKPX Uogonek comma -50\r\nKPX Uogonek period -50\r\nKPX Uring A -60\r\nKPX Uring Aacute -60\r\nKPX Uring Abreve -60\r\nKPX Uring Acircumflex -60\r\nKPX Uring Adieresis -60\r\nKPX Uring Agrave -60\r\nKPX Uring Amacron -60\r\nKPX Uring Aogonek -60\r\nKPX Uring Aring -60\r\nKPX Uring Atilde -60\r\nKPX Uring comma -50\r\nKPX Uring period -50\r\nKPX V A -135\r\nKPX V Aacute -135\r\nKPX V Abreve -135\r\nKPX V Acircumflex -135\r\nKPX V Adieresis -135\r\nKPX V Agrave -135\r\nKPX V Amacron -135\r\nKPX V Aogonek -135\r\nKPX V Aring -135\r\nKPX V Atilde -135\r\nKPX V G -30\r\nKPX V Gbreve -30\r\nKPX V Gcommaaccent -30\r\nKPX V O -45\r\nKPX V Oacute -45\r\nKPX V Ocircumflex -45\r\nKPX V Odieresis -45\r\nKPX V Ograve -45\r\nKPX V Ohungarumlaut -45\r\nKPX V Omacron -45\r\nKPX V Oslash -45\r\nKPX V Otilde -45\r\nKPX V a -92\r\nKPX V aacute -92\r\nKPX V abreve -92\r\nKPX V acircumflex -92\r\nKPX V adieresis -92\r\nKPX V agrave -92\r\nKPX V amacron -92\r\nKPX V aogonek -92\r\nKPX V aring -92\r\nKPX V atilde -92\r\nKPX V colon -92\r\nKPX V comma -129\r\nKPX V e -100\r\nKPX V eacute -100\r\nKPX V ecaron -100\r\nKPX V ecircumflex -100\r\nKPX V edieresis -100\r\nKPX V edotaccent -100\r\nKPX V egrave -100\r\nKPX V emacron -100\r\nKPX V eogonek -100\r\nKPX V hyphen -74\r\nKPX V i -37\r\nKPX V iacute -37\r\nKPX V icircumflex -37\r\nKPX V idieresis -37\r\nKPX V igrave -37\r\nKPX V imacron -37\r\nKPX V iogonek -37\r\nKPX V o -100\r\nKPX V oacute -100\r\nKPX V ocircumflex -100\r\nKPX V odieresis -100\r\nKPX V ograve -100\r\nKPX V ohungarumlaut -100\r\nKPX V omacron -100\r\nKPX V oslash -100\r\nKPX V otilde -100\r\nKPX V period -145\r\nKPX V semicolon -92\r\nKPX V u -92\r\nKPX V uacute -92\r\nKPX V ucircumflex -92\r\nKPX V udieresis -92\r\nKPX V ugrave -92\r\nKPX V uhungarumlaut -92\r\nKPX V umacron -92\r\nKPX V uogonek -92\r\nKPX V uring -92\r\nKPX W A -120\r\nKPX W Aacute -120\r\nKPX W Abreve -120\r\nKPX W Acircumflex -120\r\nKPX W Adieresis -120\r\nKPX W Agrave -120\r\nKPX W Amacron -120\r\nKPX W Aogonek -120\r\nKPX W Aring -120\r\nKPX W Atilde -120\r\nKPX W O -10\r\nKPX W Oacute -10\r\nKPX W Ocircumflex -10\r\nKPX W Odieresis -10\r\nKPX W Ograve -10\r\nKPX W Ohungarumlaut -10\r\nKPX W Omacron -10\r\nKPX W Oslash -10\r\nKPX W Otilde -10\r\nKPX W a -65\r\nKPX W aacute -65\r\nKPX W abreve -65\r\nKPX W acircumflex -65\r\nKPX W adieresis -65\r\nKPX W agrave -65\r\nKPX W amacron -65\r\nKPX W aogonek -65\r\nKPX W aring -65\r\nKPX W atilde -65\r\nKPX W colon -55\r\nKPX W comma -92\r\nKPX W e -65\r\nKPX W eacute -65\r\nKPX W ecaron -65\r\nKPX W ecircumflex -65\r\nKPX W edieresis -65\r\nKPX W edotaccent -65\r\nKPX W egrave -65\r\nKPX W emacron -65\r\nKPX W eogonek -65\r\nKPX W hyphen -37\r\nKPX W i -18\r\nKPX W iacute -18\r\nKPX W iogonek -18\r\nKPX W o -75\r\nKPX W oacute -75\r\nKPX W ocircumflex -75\r\nKPX W odieresis -75\r\nKPX W ograve -75\r\nKPX W ohungarumlaut -75\r\nKPX W omacron -75\r\nKPX W oslash -75\r\nKPX W otilde -75\r\nKPX W period -92\r\nKPX W semicolon -55\r\nKPX W u -50\r\nKPX W uacute -50\r\nKPX W ucircumflex -50\r\nKPX W udieresis -50\r\nKPX W ugrave -50\r\nKPX W uhungarumlaut -50\r\nKPX W umacron -50\r\nKPX W uogonek -50\r\nKPX W uring -50\r\nKPX W y -60\r\nKPX W yacute -60\r\nKPX W ydieresis -60\r\nKPX Y A -110\r\nKPX Y Aacute -110\r\nKPX Y Abreve -110\r\nKPX Y Acircumflex -110\r\nKPX Y Adieresis -110\r\nKPX Y Agrave -110\r\nKPX Y Amacron -110\r\nKPX Y Aogonek -110\r\nKPX Y Aring -110\r\nKPX Y Atilde -110\r\nKPX Y O -35\r\nKPX Y Oacute -35\r\nKPX Y Ocircumflex -35\r\nKPX Y Odieresis -35\r\nKPX Y Ograve -35\r\nKPX Y Ohungarumlaut -35\r\nKPX Y Omacron -35\r\nKPX Y Oslash -35\r\nKPX Y Otilde -35\r\nKPX Y a -85\r\nKPX Y aacute -85\r\nKPX Y abreve -85\r\nKPX Y acircumflex -85\r\nKPX Y adieresis -85\r\nKPX Y agrave -85\r\nKPX Y amacron -85\r\nKPX Y aogonek -85\r\nKPX Y aring -85\r\nKPX Y atilde -85\r\nKPX Y colon -92\r\nKPX Y comma -92\r\nKPX Y e -111\r\nKPX Y eacute -111\r\nKPX Y ecaron -111\r\nKPX Y ecircumflex -111\r\nKPX Y edieresis -71\r\nKPX Y edotaccent -111\r\nKPX Y egrave -71\r\nKPX Y emacron -71\r\nKPX Y eogonek -111\r\nKPX Y hyphen -92\r\nKPX Y i -37\r\nKPX Y iacute -37\r\nKPX Y iogonek -37\r\nKPX Y o -111\r\nKPX Y oacute -111\r\nKPX Y ocircumflex -111\r\nKPX Y odieresis -111\r\nKPX Y ograve -111\r\nKPX Y ohungarumlaut -111\r\nKPX Y omacron -111\r\nKPX Y oslash -111\r\nKPX Y otilde -111\r\nKPX Y period -92\r\nKPX Y semicolon -92\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -110\r\nKPX Yacute Aacute -110\r\nKPX Yacute Abreve -110\r\nKPX Yacute Acircumflex -110\r\nKPX Yacute Adieresis -110\r\nKPX Yacute Agrave -110\r\nKPX Yacute Amacron -110\r\nKPX Yacute Aogonek -110\r\nKPX Yacute Aring -110\r\nKPX Yacute Atilde -110\r\nKPX Yacute O -35\r\nKPX Yacute Oacute -35\r\nKPX Yacute Ocircumflex -35\r\nKPX Yacute Odieresis -35\r\nKPX Yacute Ograve -35\r\nKPX Yacute Ohungarumlaut -35\r\nKPX Yacute Omacron -35\r\nKPX Yacute Oslash -35\r\nKPX Yacute Otilde -35\r\nKPX Yacute a -85\r\nKPX Yacute aacute -85\r\nKPX Yacute abreve -85\r\nKPX Yacute acircumflex -85\r\nKPX Yacute adieresis -85\r\nKPX Yacute agrave -85\r\nKPX Yacute amacron -85\r\nKPX Yacute aogonek -85\r\nKPX Yacute aring -85\r\nKPX Yacute atilde -85\r\nKPX Yacute colon -92\r\nKPX Yacute comma -92\r\nKPX Yacute e -111\r\nKPX Yacute eacute -111\r\nKPX Yacute ecaron -111\r\nKPX Yacute ecircumflex -111\r\nKPX Yacute edieresis -71\r\nKPX Yacute edotaccent -111\r\nKPX Yacute egrave -71\r\nKPX Yacute emacron -71\r\nKPX Yacute eogonek -111\r\nKPX Yacute hyphen -92\r\nKPX Yacute i -37\r\nKPX Yacute iacute -37\r\nKPX Yacute iogonek -37\r\nKPX Yacute o -111\r\nKPX Yacute oacute -111\r\nKPX Yacute ocircumflex -111\r\nKPX Yacute odieresis -111\r\nKPX Yacute ograve -111\r\nKPX Yacute ohungarumlaut -111\r\nKPX Yacute omacron -111\r\nKPX Yacute oslash -111\r\nKPX Yacute otilde -111\r\nKPX Yacute period -92\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -110\r\nKPX Ydieresis Aacute -110\r\nKPX Ydieresis Abreve -110\r\nKPX Ydieresis Acircumflex -110\r\nKPX Ydieresis Adieresis -110\r\nKPX Ydieresis Agrave -110\r\nKPX Ydieresis Amacron -110\r\nKPX Ydieresis Aogonek -110\r\nKPX Ydieresis Aring -110\r\nKPX Ydieresis Atilde -110\r\nKPX Ydieresis O -35\r\nKPX Ydieresis Oacute -35\r\nKPX Ydieresis Ocircumflex -35\r\nKPX Ydieresis Odieresis -35\r\nKPX Ydieresis Ograve -35\r\nKPX Ydieresis Ohungarumlaut -35\r\nKPX Ydieresis Omacron -35\r\nKPX Ydieresis Oslash -35\r\nKPX Ydieresis Otilde -35\r\nKPX Ydieresis a -85\r\nKPX Ydieresis aacute -85\r\nKPX Ydieresis abreve -85\r\nKPX Ydieresis acircumflex -85\r\nKPX Ydieresis adieresis -85\r\nKPX Ydieresis agrave -85\r\nKPX Ydieresis amacron -85\r\nKPX Ydieresis aogonek -85\r\nKPX Ydieresis aring -85\r\nKPX Ydieresis atilde -85\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -111\r\nKPX Ydieresis eacute -111\r\nKPX Ydieresis ecaron -111\r\nKPX Ydieresis ecircumflex -111\r\nKPX Ydieresis edieresis -71\r\nKPX Ydieresis edotaccent -111\r\nKPX Ydieresis egrave -71\r\nKPX Ydieresis emacron -71\r\nKPX Ydieresis eogonek -111\r\nKPX Ydieresis hyphen -92\r\nKPX Ydieresis i -37\r\nKPX Ydieresis iacute -37\r\nKPX Ydieresis iogonek -37\r\nKPX Ydieresis o -111\r\nKPX Ydieresis oacute -111\r\nKPX Ydieresis ocircumflex -111\r\nKPX Ydieresis odieresis -111\r\nKPX Ydieresis ograve -111\r\nKPX Ydieresis ohungarumlaut -111\r\nKPX Ydieresis omacron -111\r\nKPX Ydieresis oslash -111\r\nKPX Ydieresis otilde -111\r\nKPX Ydieresis period -92\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX a v -25\r\nKPX aacute v -25\r\nKPX abreve v -25\r\nKPX acircumflex v -25\r\nKPX adieresis v -25\r\nKPX agrave v -25\r\nKPX amacron v -25\r\nKPX aogonek v -25\r\nKPX aring v -25\r\nKPX atilde v -25\r\nKPX b b -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX b v -15\r\nKPX comma quotedblright -45\r\nKPX comma quoteright -55\r\nKPX d w -15\r\nKPX dcroat w -15\r\nKPX e v -15\r\nKPX eacute v -15\r\nKPX ecaron v -15\r\nKPX ecircumflex v -15\r\nKPX edieresis v -15\r\nKPX edotaccent v -15\r\nKPX egrave v -15\r\nKPX emacron v -15\r\nKPX eogonek v -15\r\nKPX f comma -15\r\nKPX f dotlessi -35\r\nKPX f i -25\r\nKPX f o -25\r\nKPX f oacute -25\r\nKPX f ocircumflex -25\r\nKPX f odieresis -25\r\nKPX f ograve -25\r\nKPX f ohungarumlaut -25\r\nKPX f omacron -25\r\nKPX f oslash -25\r\nKPX f otilde -25\r\nKPX f period -15\r\nKPX f quotedblright 50\r\nKPX f quoteright 55\r\nKPX g period -15\r\nKPX gbreve period -15\r\nKPX gcommaaccent period -15\r\nKPX h y -15\r\nKPX h yacute -15\r\nKPX h ydieresis -15\r\nKPX i v -10\r\nKPX iacute v -10\r\nKPX icircumflex v -10\r\nKPX idieresis v -10\r\nKPX igrave v -10\r\nKPX imacron v -10\r\nKPX iogonek v -10\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -15\r\nKPX k oacute -15\r\nKPX k ocircumflex -15\r\nKPX k odieresis -15\r\nKPX k ograve -15\r\nKPX k ohungarumlaut -15\r\nKPX k omacron -15\r\nKPX k oslash -15\r\nKPX k otilde -15\r\nKPX k y -15\r\nKPX k yacute -15\r\nKPX k ydieresis -15\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -15\r\nKPX kcommaaccent oacute -15\r\nKPX kcommaaccent ocircumflex -15\r\nKPX kcommaaccent odieresis -15\r\nKPX kcommaaccent ograve -15\r\nKPX kcommaaccent ohungarumlaut -15\r\nKPX kcommaaccent omacron -15\r\nKPX kcommaaccent oslash -15\r\nKPX kcommaaccent otilde -15\r\nKPX kcommaaccent y -15\r\nKPX kcommaaccent yacute -15\r\nKPX kcommaaccent ydieresis -15\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o v -10\r\nKPX o w -10\r\nKPX oacute v -10\r\nKPX oacute w -10\r\nKPX ocircumflex v -10\r\nKPX ocircumflex w -10\r\nKPX odieresis v -10\r\nKPX odieresis w -10\r\nKPX ograve v -10\r\nKPX ograve w -10\r\nKPX ohungarumlaut v -10\r\nKPX ohungarumlaut w -10\r\nKPX omacron v -10\r\nKPX omacron w -10\r\nKPX oslash v -10\r\nKPX oslash w -10\r\nKPX otilde v -10\r\nKPX otilde w -10\r\nKPX period quotedblright -55\r\nKPX period quoteright -55\r\nKPX quotedblleft A -10\r\nKPX quotedblleft Aacute -10\r\nKPX quotedblleft Abreve -10\r\nKPX quotedblleft Acircumflex -10\r\nKPX quotedblleft Adieresis -10\r\nKPX quotedblleft Agrave -10\r\nKPX quotedblleft Amacron -10\r\nKPX quotedblleft Aogonek -10\r\nKPX quotedblleft Aring -10\r\nKPX quotedblleft Atilde -10\r\nKPX quoteleft A -10\r\nKPX quoteleft Aacute -10\r\nKPX quoteleft Abreve -10\r\nKPX quoteleft Acircumflex -10\r\nKPX quoteleft Adieresis -10\r\nKPX quoteleft Agrave -10\r\nKPX quoteleft Amacron -10\r\nKPX quoteleft Aogonek -10\r\nKPX quoteleft Aring -10\r\nKPX quoteleft Atilde -10\r\nKPX quoteleft quoteleft -63\r\nKPX quoteright d -20\r\nKPX quoteright dcroat -20\r\nKPX quoteright quoteright -63\r\nKPX quoteright r -20\r\nKPX quoteright racute -20\r\nKPX quoteright rcaron -20\r\nKPX quoteright rcommaaccent -20\r\nKPX quoteright s -37\r\nKPX quoteright sacute -37\r\nKPX quoteright scaron -37\r\nKPX quoteright scedilla -37\r\nKPX quoteright scommaaccent -37\r\nKPX quoteright space -74\r\nKPX quoteright v -20\r\nKPX r c -18\r\nKPX r cacute -18\r\nKPX r ccaron -18\r\nKPX r ccedilla -18\r\nKPX r comma -92\r\nKPX r e -18\r\nKPX r eacute -18\r\nKPX r ecaron -18\r\nKPX r ecircumflex -18\r\nKPX r edieresis -18\r\nKPX r edotaccent -18\r\nKPX r egrave -18\r\nKPX r emacron -18\r\nKPX r eogonek -18\r\nKPX r g -10\r\nKPX r gbreve -10\r\nKPX r gcommaaccent -10\r\nKPX r hyphen -37\r\nKPX r n -15\r\nKPX r nacute -15\r\nKPX r ncaron -15\r\nKPX r ncommaaccent -15\r\nKPX r ntilde -15\r\nKPX r o -18\r\nKPX r oacute -18\r\nKPX r ocircumflex -18\r\nKPX r odieresis -18\r\nKPX r ograve -18\r\nKPX r ohungarumlaut -18\r\nKPX r omacron -18\r\nKPX r oslash -18\r\nKPX r otilde -18\r\nKPX r p -10\r\nKPX r period -100\r\nKPX r q -18\r\nKPX r v -10\r\nKPX racute c -18\r\nKPX racute cacute -18\r\nKPX racute ccaron -18\r\nKPX racute ccedilla -18\r\nKPX racute comma -92\r\nKPX racute e -18\r\nKPX racute eacute -18\r\nKPX racute ecaron -18\r\nKPX racute ecircumflex -18\r\nKPX racute edieresis -18\r\nKPX racute edotaccent -18\r\nKPX racute egrave -18\r\nKPX racute emacron -18\r\nKPX racute eogonek -18\r\nKPX racute g -10\r\nKPX racute gbreve -10\r\nKPX racute gcommaaccent -10\r\nKPX racute hyphen -37\r\nKPX racute n -15\r\nKPX racute nacute -15\r\nKPX racute ncaron -15\r\nKPX racute ncommaaccent -15\r\nKPX racute ntilde -15\r\nKPX racute o -18\r\nKPX racute oacute -18\r\nKPX racute ocircumflex -18\r\nKPX racute odieresis -18\r\nKPX racute ograve -18\r\nKPX racute ohungarumlaut -18\r\nKPX racute omacron -18\r\nKPX racute oslash -18\r\nKPX racute otilde -18\r\nKPX racute p -10\r\nKPX racute period -100\r\nKPX racute q -18\r\nKPX racute v -10\r\nKPX rcaron c -18\r\nKPX rcaron cacute -18\r\nKPX rcaron ccaron -18\r\nKPX rcaron ccedilla -18\r\nKPX rcaron comma -92\r\nKPX rcaron e -18\r\nKPX rcaron eacute -18\r\nKPX rcaron ecaron -18\r\nKPX rcaron ecircumflex -18\r\nKPX rcaron edieresis -18\r\nKPX rcaron edotaccent -18\r\nKPX rcaron egrave -18\r\nKPX rcaron emacron -18\r\nKPX rcaron eogonek -18\r\nKPX rcaron g -10\r\nKPX rcaron gbreve -10\r\nKPX rcaron gcommaaccent -10\r\nKPX rcaron hyphen -37\r\nKPX rcaron n -15\r\nKPX rcaron nacute -15\r\nKPX rcaron ncaron -15\r\nKPX rcaron ncommaaccent -15\r\nKPX rcaron ntilde -15\r\nKPX rcaron o -18\r\nKPX rcaron oacute -18\r\nKPX rcaron ocircumflex -18\r\nKPX rcaron odieresis -18\r\nKPX rcaron ograve -18\r\nKPX rcaron ohungarumlaut -18\r\nKPX rcaron omacron -18\r\nKPX rcaron oslash -18\r\nKPX rcaron otilde -18\r\nKPX rcaron p -10\r\nKPX rcaron period -100\r\nKPX rcaron q -18\r\nKPX rcaron v -10\r\nKPX rcommaaccent c -18\r\nKPX rcommaaccent cacute -18\r\nKPX rcommaaccent ccaron -18\r\nKPX rcommaaccent ccedilla -18\r\nKPX rcommaaccent comma -92\r\nKPX rcommaaccent e -18\r\nKPX rcommaaccent eacute -18\r\nKPX rcommaaccent ecaron -18\r\nKPX rcommaaccent ecircumflex -18\r\nKPX rcommaaccent edieresis -18\r\nKPX rcommaaccent edotaccent -18\r\nKPX rcommaaccent egrave -18\r\nKPX rcommaaccent emacron -18\r\nKPX rcommaaccent eogonek -18\r\nKPX rcommaaccent g -10\r\nKPX rcommaaccent gbreve -10\r\nKPX rcommaaccent gcommaaccent -10\r\nKPX rcommaaccent hyphen -37\r\nKPX rcommaaccent n -15\r\nKPX rcommaaccent nacute -15\r\nKPX rcommaaccent ncaron -15\r\nKPX rcommaaccent ncommaaccent -15\r\nKPX rcommaaccent ntilde -15\r\nKPX rcommaaccent o -18\r\nKPX rcommaaccent oacute -18\r\nKPX rcommaaccent ocircumflex -18\r\nKPX rcommaaccent odieresis -18\r\nKPX rcommaaccent ograve -18\r\nKPX rcommaaccent ohungarumlaut -18\r\nKPX rcommaaccent omacron -18\r\nKPX rcommaaccent oslash -18\r\nKPX rcommaaccent otilde -18\r\nKPX rcommaaccent p -10\r\nKPX rcommaaccent period -100\r\nKPX rcommaaccent q -18\r\nKPX rcommaaccent v -10\r\nKPX space A -55\r\nKPX space Aacute -55\r\nKPX space Abreve -55\r\nKPX space Acircumflex -55\r\nKPX space Adieresis -55\r\nKPX space Agrave -55\r\nKPX space Amacron -55\r\nKPX space Aogonek -55\r\nKPX space Aring -55\r\nKPX space Atilde -55\r\nKPX space T -30\r\nKPX space Tcaron -30\r\nKPX space Tcommaaccent -30\r\nKPX space V -45\r\nKPX space W -30\r\nKPX space Y -55\r\nKPX space Yacute -55\r\nKPX space Ydieresis -55\r\nKPX v a -10\r\nKPX v aacute -10\r\nKPX v abreve -10\r\nKPX v acircumflex -10\r\nKPX v adieresis -10\r\nKPX v agrave -10\r\nKPX v amacron -10\r\nKPX v aogonek -10\r\nKPX v aring -10\r\nKPX v atilde -10\r\nKPX v comma -55\r\nKPX v e -10\r\nKPX v eacute -10\r\nKPX v ecaron -10\r\nKPX v ecircumflex -10\r\nKPX v edieresis -10\r\nKPX v edotaccent -10\r\nKPX v egrave -10\r\nKPX v emacron -10\r\nKPX v eogonek -10\r\nKPX v o -10\r\nKPX v oacute -10\r\nKPX v ocircumflex -10\r\nKPX v odieresis -10\r\nKPX v ograve -10\r\nKPX v ohungarumlaut -10\r\nKPX v omacron -10\r\nKPX v oslash -10\r\nKPX v otilde -10\r\nKPX v period -70\r\nKPX w comma -55\r\nKPX w o -10\r\nKPX w oacute -10\r\nKPX w ocircumflex -10\r\nKPX w odieresis -10\r\nKPX w ograve -10\r\nKPX w ohungarumlaut -10\r\nKPX w omacron -10\r\nKPX w oslash -10\r\nKPX w otilde -10\r\nKPX w period -70\r\nKPX y comma -55\r\nKPX y e -10\r\nKPX y eacute -10\r\nKPX y ecaron -10\r\nKPX y ecircumflex -10\r\nKPX y edieresis -10\r\nKPX y edotaccent -10\r\nKPX y egrave -10\r\nKPX y emacron -10\r\nKPX y eogonek -10\r\nKPX y o -25\r\nKPX y oacute -25\r\nKPX y ocircumflex -25\r\nKPX y odieresis -25\r\nKPX y ograve -25\r\nKPX y ohungarumlaut -25\r\nKPX y omacron -25\r\nKPX y oslash -25\r\nKPX y otilde -25\r\nKPX y period -70\r\nKPX yacute comma -55\r\nKPX yacute e -10\r\nKPX yacute eacute -10\r\nKPX yacute ecaron -10\r\nKPX yacute ecircumflex -10\r\nKPX yacute edieresis -10\r\nKPX yacute edotaccent -10\r\nKPX yacute egrave -10\r\nKPX yacute emacron -10\r\nKPX yacute eogonek -10\r\nKPX yacute o -25\r\nKPX yacute oacute -25\r\nKPX yacute ocircumflex -25\r\nKPX yacute odieresis -25\r\nKPX yacute ograve -25\r\nKPX yacute ohungarumlaut -25\r\nKPX yacute omacron -25\r\nKPX yacute oslash -25\r\nKPX yacute otilde -25\r\nKPX yacute period -70\r\nKPX ydieresis comma -55\r\nKPX ydieresis e -10\r\nKPX ydieresis eacute -10\r\nKPX ydieresis ecaron -10\r\nKPX ydieresis ecircumflex -10\r\nKPX ydieresis edieresis -10\r\nKPX ydieresis edotaccent -10\r\nKPX ydieresis egrave -10\r\nKPX ydieresis emacron -10\r\nKPX ydieresis eogonek -10\r\nKPX ydieresis o -25\r\nKPX ydieresis oacute -25\r\nKPX ydieresis ocircumflex -25\r\nKPX ydieresis odieresis -25\r\nKPX ydieresis ograve -25\r\nKPX ydieresis ohungarumlaut -25\r\nKPX ydieresis omacron -25\r\nKPX ydieresis oslash -25\r\nKPX ydieresis otilde -25\r\nKPX ydieresis period -70\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Times-Italic'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 12:56:55 1997\r\nComment UniqueID 43067\r\nComment VMusage 47727 58752\r\nFontName Times-Italic\r\nFullName Times Italic\r\nFamilyName Times\r\nWeight Medium\r\nItalicAngle -15.5\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -169 -217 1010 883 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 653\r\nXHeight 441\r\nAscender 683\r\nDescender -217\r\nStdHW 32\r\nStdVW 76\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ;\r\nC 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;\r\nC 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ;\r\nC 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;\r\nC 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;\r\nC 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ;\r\nC 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ;\r\nC 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ;\r\nC 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ;\r\nC 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;\r\nC 43 ; WX 675 ; N plus ; B 86 0 590 506 ;\r\nC 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;\r\nC 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ;\r\nC 46 ; WX 250 ; N period ; B 27 -11 138 100 ;\r\nC 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;\r\nC 48 ; WX 500 ; N zero ; B 32 -7 497 676 ;\r\nC 49 ; WX 500 ; N one ; B 49 0 409 676 ;\r\nC 50 ; WX 500 ; N two ; B 12 0 452 676 ;\r\nC 51 ; WX 500 ; N three ; B 15 -7 465 676 ;\r\nC 52 ; WX 500 ; N four ; B 1 0 479 676 ;\r\nC 53 ; WX 500 ; N five ; B 15 -7 491 666 ;\r\nC 54 ; WX 500 ; N six ; B 30 -7 521 686 ;\r\nC 55 ; WX 500 ; N seven ; B 75 -8 537 666 ;\r\nC 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;\r\nC 57 ; WX 500 ; N nine ; B 23 -17 492 676 ;\r\nC 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;\r\nC 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ;\r\nC 60 ; WX 675 ; N less ; B 84 -8 592 514 ;\r\nC 61 ; WX 675 ; N equal ; B 86 120 590 386 ;\r\nC 62 ; WX 675 ; N greater ; B 84 -8 592 514 ;\r\nC 63 ; WX 500 ; N question ; B 132 -12 472 664 ;\r\nC 64 ; WX 920 ; N at ; B 118 -18 806 666 ;\r\nC 65 ; WX 611 ; N A ; B -51 0 564 668 ;\r\nC 66 ; WX 611 ; N B ; B -8 0 588 653 ;\r\nC 67 ; WX 667 ; N C ; B 66 -18 689 666 ;\r\nC 68 ; WX 722 ; N D ; B -8 0 700 653 ;\r\nC 69 ; WX 611 ; N E ; B -1 0 634 653 ;\r\nC 70 ; WX 611 ; N F ; B 8 0 645 653 ;\r\nC 71 ; WX 722 ; N G ; B 52 -18 722 666 ;\r\nC 72 ; WX 722 ; N H ; B -8 0 767 653 ;\r\nC 73 ; WX 333 ; N I ; B -8 0 384 653 ;\r\nC 74 ; WX 444 ; N J ; B -6 -18 491 653 ;\r\nC 75 ; WX 667 ; N K ; B 7 0 722 653 ;\r\nC 76 ; WX 556 ; N L ; B -8 0 559 653 ;\r\nC 77 ; WX 833 ; N M ; B -18 0 873 653 ;\r\nC 78 ; WX 667 ; N N ; B -20 -15 727 653 ;\r\nC 79 ; WX 722 ; N O ; B 60 -18 699 666 ;\r\nC 80 ; WX 611 ; N P ; B 0 0 605 653 ;\r\nC 81 ; WX 722 ; N Q ; B 59 -182 699 666 ;\r\nC 82 ; WX 611 ; N R ; B -13 0 588 653 ;\r\nC 83 ; WX 500 ; N S ; B 17 -18 508 667 ;\r\nC 84 ; WX 556 ; N T ; B 59 0 633 653 ;\r\nC 85 ; WX 722 ; N U ; B 102 -18 765 653 ;\r\nC 86 ; WX 611 ; N V ; B 76 -18 688 653 ;\r\nC 87 ; WX 833 ; N W ; B 71 -18 906 653 ;\r\nC 88 ; WX 611 ; N X ; B -29 0 655 653 ;\r\nC 89 ; WX 556 ; N Y ; B 78 0 633 653 ;\r\nC 90 ; WX 556 ; N Z ; B -6 0 606 653 ;\r\nC 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ;\r\nC 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;\r\nC 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ;\r\nC 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ;\r\nC 97 ; WX 500 ; N a ; B 17 -11 476 441 ;\r\nC 98 ; WX 500 ; N b ; B 23 -11 473 683 ;\r\nC 99 ; WX 444 ; N c ; B 30 -11 425 441 ;\r\nC 100 ; WX 500 ; N d ; B 15 -13 527 683 ;\r\nC 101 ; WX 444 ; N e ; B 31 -11 412 441 ;\r\nC 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B 8 -206 472 441 ;\r\nC 104 ; WX 500 ; N h ; B 19 -9 478 683 ;\r\nC 105 ; WX 278 ; N i ; B 49 -11 264 654 ;\r\nC 106 ; WX 278 ; N j ; B -124 -207 276 654 ;\r\nC 107 ; WX 444 ; N k ; B 14 -11 461 683 ;\r\nC 108 ; WX 278 ; N l ; B 41 -11 279 683 ;\r\nC 109 ; WX 722 ; N m ; B 12 -9 704 441 ;\r\nC 110 ; WX 500 ; N n ; B 14 -9 474 441 ;\r\nC 111 ; WX 500 ; N o ; B 27 -11 468 441 ;\r\nC 112 ; WX 500 ; N p ; B -75 -205 469 441 ;\r\nC 113 ; WX 500 ; N q ; B 25 -209 483 441 ;\r\nC 114 ; WX 389 ; N r ; B 45 0 412 441 ;\r\nC 115 ; WX 389 ; N s ; B 16 -13 366 442 ;\r\nC 116 ; WX 278 ; N t ; B 37 -11 296 546 ;\r\nC 117 ; WX 500 ; N u ; B 42 -11 475 441 ;\r\nC 118 ; WX 444 ; N v ; B 21 -18 426 441 ;\r\nC 119 ; WX 667 ; N w ; B 16 -18 648 441 ;\r\nC 120 ; WX 444 ; N x ; B -27 -11 447 441 ;\r\nC 121 ; WX 444 ; N y ; B -24 -206 426 441 ;\r\nC 122 ; WX 389 ; N z ; B -2 -81 380 428 ;\r\nC 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ;\r\nC 124 ; WX 275 ; N bar ; B 105 -217 171 783 ;\r\nC 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ;\r\nC 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;\r\nC 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ;\r\nC 162 ; WX 500 ; N cent ; B 77 -143 472 560 ;\r\nC 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;\r\nC 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ;\r\nC 165 ; WX 500 ; N yen ; B 27 0 603 653 ;\r\nC 166 ; WX 500 ; N florin ; B 25 -182 507 682 ;\r\nC 167 ; WX 500 ; N section ; B 53 -162 461 666 ;\r\nC 168 ; WX 500 ; N currency ; B -22 53 522 597 ;\r\nC 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;\r\nC 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ;\r\nC 174 ; WX 500 ; N fi ; B -141 -207 481 681 ;\r\nC 175 ; WX 500 ; N fl ; B -141 -204 518 682 ;\r\nC 177 ; WX 500 ; N endash ; B -6 197 505 243 ;\r\nC 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;\r\nC 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;\r\nC 183 ; WX 350 ; N bullet ; B 40 191 310 461 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ;\r\nC 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;\r\nC 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ;\r\nC 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ;\r\nC 193 ; WX 333 ; N grave ; B 121 492 311 664 ;\r\nC 194 ; WX 333 ; N acute ; B 180 494 403 664 ;\r\nC 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ;\r\nC 196 ; WX 333 ; N tilde ; B 100 517 427 624 ;\r\nC 197 ; WX 333 ; N macron ; B 99 532 411 583 ;\r\nC 198 ; WX 333 ; N breve ; B 117 492 418 650 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 207 548 305 646 ;\r\nC 200 ; WX 333 ; N dieresis ; B 107 548 405 646 ;\r\nC 202 ; WX 333 ; N ring ; B 155 492 355 691 ;\r\nC 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;\r\nC 206 ; WX 333 ; N ogonek ; B 20 -169 203 40 ;\r\nC 207 ; WX 333 ; N caron ; B 121 492 426 661 ;\r\nC 208 ; WX 889 ; N emdash ; B -6 197 894 243 ;\r\nC 225 ; WX 889 ; N AE ; B -27 0 911 653 ;\r\nC 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;\r\nC 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ;\r\nC 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ;\r\nC 234 ; WX 944 ; N OE ; B 49 -8 964 666 ;\r\nC 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ;\r\nC 241 ; WX 667 ; N ae ; B 23 -11 640 441 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ;\r\nC 248 ; WX 278 ; N lslash ; B 41 -11 312 683 ;\r\nC 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ;\r\nC 250 ; WX 667 ; N oe ; B 20 -12 646 441 ;\r\nC 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;\r\nC -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;\r\nC -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ;\r\nC -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;\r\nC -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ;\r\nC -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;\r\nC -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;\r\nC -1 ; WX 675 ; N divide ; B 86 -11 590 517 ;\r\nC -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ;\r\nC -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;\r\nC -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;\r\nC -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;\r\nC -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;\r\nC -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ;\r\nC -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ;\r\nC -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ;\r\nC -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;\r\nC -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ;\r\nC -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ;\r\nC -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ;\r\nC -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ;\r\nC -1 ; WX 500 ; N aring ; B 17 -11 476 691 ;\r\nC -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ;\r\nC -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ;\r\nC -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ;\r\nC -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ;\r\nC -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ;\r\nC -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ;\r\nC -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;\r\nC -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ;\r\nC -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ;\r\nC -1 ; WX 278 ; N iacute ; B 49 -11 355 664 ;\r\nC -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;\r\nC -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ;\r\nC -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;\r\nC -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ;\r\nC -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ;\r\nC -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ;\r\nC -1 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ;\r\nC -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;\r\nC -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ;\r\nC -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ;\r\nC -1 ; WX 611 ; N Racute ; B -13 0 588 876 ;\r\nC -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;\r\nC -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ;\r\nC -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ;\r\nC -1 ; WX 500 ; N uring ; B 42 -11 475 691 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ;\r\nC -1 ; WX 722 ; N Ograve ; B 60 -18 699 876 ;\r\nC -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ;\r\nC -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;\r\nC -1 ; WX 675 ; N multiply ; B 93 8 582 497 ;\r\nC -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ;\r\nC -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ;\r\nC -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;\r\nC -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ;\r\nC -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;\r\nC -1 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ;\r\nC -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ;\r\nC -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ;\r\nC -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;\r\nC -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ;\r\nC -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ;\r\nC -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ;\r\nC -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ;\r\nC -1 ; WX 333 ; N Iacute ; B -8 0 433 876 ;\r\nC -1 ; WX 675 ; N plusminus ; B 86 0 590 506 ;\r\nC -1 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ;\r\nC -1 ; WX 760 ; N registered ; B 41 -18 719 666 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;\r\nC -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ;\r\nC -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r\nC -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ;\r\nC -1 ; WX 389 ; N racute ; B 45 0 431 664 ;\r\nC -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ;\r\nC -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;\r\nC -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ;\r\nC -1 ; WX 722 ; N Eth ; B -8 0 700 653 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ;\r\nC -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ;\r\nC -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ;\r\nC -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ;\r\nC -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ;\r\nC -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ;\r\nC -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ;\r\nC -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ;\r\nC -1 ; WX 722 ; N Oacute ; B 60 -18 699 876 ;\r\nC -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ;\r\nC -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ;\r\nC -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;\r\nC -1 ; WX 278 ; N idieresis ; B 49 -11 352 606 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ;\r\nC -1 ; WX 500 ; N mu ; B -30 -209 497 428 ;\r\nC -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ;\r\nC -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ;\r\nC -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ;\r\nC -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;\r\nC -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;\r\nC -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ;\r\nC -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;\r\nC -1 ; WX 980 ; N trademark ; B 30 247 957 653 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;\r\nC -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ;\r\nC -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;\r\nC -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ;\r\nC -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ;\r\nC -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ;\r\nC -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ;\r\nC -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ;\r\nC -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ;\r\nC -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ;\r\nC -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ;\r\nC -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;\r\nC -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ;\r\nC -1 ; WX 400 ; N degree ; B 101 390 387 676 ;\r\nC -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;\r\nC -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ;\r\nC -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;\r\nC -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ;\r\nC -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ;\r\nC -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ;\r\nC -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ;\r\nC -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ;\r\nC -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ;\r\nC -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ;\r\nC -1 ; WX 611 ; N Aring ; B -51 0 564 883 ;\r\nC -1 ; WX 722 ; N Otilde ; B 60 -18 699 836 ;\r\nC -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ;\r\nC -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ;\r\nC -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ;\r\nC -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ;\r\nC -1 ; WX 675 ; N minus ; B 86 220 590 286 ;\r\nC -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;\r\nC -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ;\r\nC -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;\r\nC -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;\r\nC -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ;\r\nC -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ;\r\nC -1 ; WX 500 ; N eth ; B 27 -11 482 683 ;\r\nC -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;\r\nC -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;\r\nC -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2321\r\nKPX A C -30\r\nKPX A Cacute -30\r\nKPX A Ccaron -30\r\nKPX A Ccedilla -30\r\nKPX A G -35\r\nKPX A Gbreve -35\r\nKPX A Gcommaaccent -35\r\nKPX A O -40\r\nKPX A Oacute -40\r\nKPX A Ocircumflex -40\r\nKPX A Odieresis -40\r\nKPX A Ograve -40\r\nKPX A Ohungarumlaut -40\r\nKPX A Omacron -40\r\nKPX A Oslash -40\r\nKPX A Otilde -40\r\nKPX A Q -40\r\nKPX A T -37\r\nKPX A Tcaron -37\r\nKPX A Tcommaaccent -37\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -105\r\nKPX A W -95\r\nKPX A Y -55\r\nKPX A Yacute -55\r\nKPX A Ydieresis -55\r\nKPX A quoteright -37\r\nKPX A u -20\r\nKPX A uacute -20\r\nKPX A ucircumflex -20\r\nKPX A udieresis -20\r\nKPX A ugrave -20\r\nKPX A uhungarumlaut -20\r\nKPX A umacron -20\r\nKPX A uogonek -20\r\nKPX A uring -20\r\nKPX A v -55\r\nKPX A w -55\r\nKPX A y -55\r\nKPX A yacute -55\r\nKPX A ydieresis -55\r\nKPX Aacute C -30\r\nKPX Aacute Cacute -30\r\nKPX Aacute Ccaron -30\r\nKPX Aacute Ccedilla -30\r\nKPX Aacute G -35\r\nKPX Aacute Gbreve -35\r\nKPX Aacute Gcommaaccent -35\r\nKPX Aacute O -40\r\nKPX Aacute Oacute -40\r\nKPX Aacute Ocircumflex -40\r\nKPX Aacute Odieresis -40\r\nKPX Aacute Ograve -40\r\nKPX Aacute Ohungarumlaut -40\r\nKPX Aacute Omacron -40\r\nKPX Aacute Oslash -40\r\nKPX Aacute Otilde -40\r\nKPX Aacute Q -40\r\nKPX Aacute T -37\r\nKPX Aacute Tcaron -37\r\nKPX Aacute Tcommaaccent -37\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -105\r\nKPX Aacute W -95\r\nKPX Aacute Y -55\r\nKPX Aacute Yacute -55\r\nKPX Aacute Ydieresis -55\r\nKPX Aacute quoteright -37\r\nKPX Aacute u -20\r\nKPX Aacute uacute -20\r\nKPX Aacute ucircumflex -20\r\nKPX Aacute udieresis -20\r\nKPX Aacute ugrave -20\r\nKPX Aacute uhungarumlaut -20\r\nKPX Aacute umacron -20\r\nKPX Aacute uogonek -20\r\nKPX Aacute uring -20\r\nKPX Aacute v -55\r\nKPX Aacute w -55\r\nKPX Aacute y -55\r\nKPX Aacute yacute -55\r\nKPX Aacute ydieresis -55\r\nKPX Abreve C -30\r\nKPX Abreve Cacute -30\r\nKPX Abreve Ccaron -30\r\nKPX Abreve Ccedilla -30\r\nKPX Abreve G -35\r\nKPX Abreve Gbreve -35\r\nKPX Abreve Gcommaaccent -35\r\nKPX Abreve O -40\r\nKPX Abreve Oacute -40\r\nKPX Abreve Ocircumflex -40\r\nKPX Abreve Odieresis -40\r\nKPX Abreve Ograve -40\r\nKPX Abreve Ohungarumlaut -40\r\nKPX Abreve Omacron -40\r\nKPX Abreve Oslash -40\r\nKPX Abreve Otilde -40\r\nKPX Abreve Q -40\r\nKPX Abreve T -37\r\nKPX Abreve Tcaron -37\r\nKPX Abreve Tcommaaccent -37\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -105\r\nKPX Abreve W -95\r\nKPX Abreve Y -55\r\nKPX Abreve Yacute -55\r\nKPX Abreve Ydieresis -55\r\nKPX Abreve quoteright -37\r\nKPX Abreve u -20\r\nKPX Abreve uacute -20\r\nKPX Abreve ucircumflex -20\r\nKPX Abreve udieresis -20\r\nKPX Abreve ugrave -20\r\nKPX Abreve uhungarumlaut -20\r\nKPX Abreve umacron -20\r\nKPX Abreve uogonek -20\r\nKPX Abreve uring -20\r\nKPX Abreve v -55\r\nKPX Abreve w -55\r\nKPX Abreve y -55\r\nKPX Abreve yacute -55\r\nKPX Abreve ydieresis -55\r\nKPX Acircumflex C -30\r\nKPX Acircumflex Cacute -30\r\nKPX Acircumflex Ccaron -30\r\nKPX Acircumflex Ccedilla -30\r\nKPX Acircumflex G -35\r\nKPX Acircumflex Gbreve -35\r\nKPX Acircumflex Gcommaaccent -35\r\nKPX Acircumflex O -40\r\nKPX Acircumflex Oacute -40\r\nKPX Acircumflex Ocircumflex -40\r\nKPX Acircumflex Odieresis -40\r\nKPX Acircumflex Ograve -40\r\nKPX Acircumflex Ohungarumlaut -40\r\nKPX Acircumflex Omacron -40\r\nKPX Acircumflex Oslash -40\r\nKPX Acircumflex Otilde -40\r\nKPX Acircumflex Q -40\r\nKPX Acircumflex T -37\r\nKPX Acircumflex Tcaron -37\r\nKPX Acircumflex Tcommaaccent -37\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -105\r\nKPX Acircumflex W -95\r\nKPX Acircumflex Y -55\r\nKPX Acircumflex Yacute -55\r\nKPX Acircumflex Ydieresis -55\r\nKPX Acircumflex quoteright -37\r\nKPX Acircumflex u -20\r\nKPX Acircumflex uacute -20\r\nKPX Acircumflex ucircumflex -20\r\nKPX Acircumflex udieresis -20\r\nKPX Acircumflex ugrave -20\r\nKPX Acircumflex uhungarumlaut -20\r\nKPX Acircumflex umacron -20\r\nKPX Acircumflex uogonek -20\r\nKPX Acircumflex uring -20\r\nKPX Acircumflex v -55\r\nKPX Acircumflex w -55\r\nKPX Acircumflex y -55\r\nKPX Acircumflex yacute -55\r\nKPX Acircumflex ydieresis -55\r\nKPX Adieresis C -30\r\nKPX Adieresis Cacute -30\r\nKPX Adieresis Ccaron -30\r\nKPX Adieresis Ccedilla -30\r\nKPX Adieresis G -35\r\nKPX Adieresis Gbreve -35\r\nKPX Adieresis Gcommaaccent -35\r\nKPX Adieresis O -40\r\nKPX Adieresis Oacute -40\r\nKPX Adieresis Ocircumflex -40\r\nKPX Adieresis Odieresis -40\r\nKPX Adieresis Ograve -40\r\nKPX Adieresis Ohungarumlaut -40\r\nKPX Adieresis Omacron -40\r\nKPX Adieresis Oslash -40\r\nKPX Adieresis Otilde -40\r\nKPX Adieresis Q -40\r\nKPX Adieresis T -37\r\nKPX Adieresis Tcaron -37\r\nKPX Adieresis Tcommaaccent -37\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -105\r\nKPX Adieresis W -95\r\nKPX Adieresis Y -55\r\nKPX Adieresis Yacute -55\r\nKPX Adieresis Ydieresis -55\r\nKPX Adieresis quoteright -37\r\nKPX Adieresis u -20\r\nKPX Adieresis uacute -20\r\nKPX Adieresis ucircumflex -20\r\nKPX Adieresis udieresis -20\r\nKPX Adieresis ugrave -20\r\nKPX Adieresis uhungarumlaut -20\r\nKPX Adieresis umacron -20\r\nKPX Adieresis uogonek -20\r\nKPX Adieresis uring -20\r\nKPX Adieresis v -55\r\nKPX Adieresis w -55\r\nKPX Adieresis y -55\r\nKPX Adieresis yacute -55\r\nKPX Adieresis ydieresis -55\r\nKPX Agrave C -30\r\nKPX Agrave Cacute -30\r\nKPX Agrave Ccaron -30\r\nKPX Agrave Ccedilla -30\r\nKPX Agrave G -35\r\nKPX Agrave Gbreve -35\r\nKPX Agrave Gcommaaccent -35\r\nKPX Agrave O -40\r\nKPX Agrave Oacute -40\r\nKPX Agrave Ocircumflex -40\r\nKPX Agrave Odieresis -40\r\nKPX Agrave Ograve -40\r\nKPX Agrave Ohungarumlaut -40\r\nKPX Agrave Omacron -40\r\nKPX Agrave Oslash -40\r\nKPX Agrave Otilde -40\r\nKPX Agrave Q -40\r\nKPX Agrave T -37\r\nKPX Agrave Tcaron -37\r\nKPX Agrave Tcommaaccent -37\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -105\r\nKPX Agrave W -95\r\nKPX Agrave Y -55\r\nKPX Agrave Yacute -55\r\nKPX Agrave Ydieresis -55\r\nKPX Agrave quoteright -37\r\nKPX Agrave u -20\r\nKPX Agrave uacute -20\r\nKPX Agrave ucircumflex -20\r\nKPX Agrave udieresis -20\r\nKPX Agrave ugrave -20\r\nKPX Agrave uhungarumlaut -20\r\nKPX Agrave umacron -20\r\nKPX Agrave uogonek -20\r\nKPX Agrave uring -20\r\nKPX Agrave v -55\r\nKPX Agrave w -55\r\nKPX Agrave y -55\r\nKPX Agrave yacute -55\r\nKPX Agrave ydieresis -55\r\nKPX Amacron C -30\r\nKPX Amacron Cacute -30\r\nKPX Amacron Ccaron -30\r\nKPX Amacron Ccedilla -30\r\nKPX Amacron G -35\r\nKPX Amacron Gbreve -35\r\nKPX Amacron Gcommaaccent -35\r\nKPX Amacron O -40\r\nKPX Amacron Oacute -40\r\nKPX Amacron Ocircumflex -40\r\nKPX Amacron Odieresis -40\r\nKPX Amacron Ograve -40\r\nKPX Amacron Ohungarumlaut -40\r\nKPX Amacron Omacron -40\r\nKPX Amacron Oslash -40\r\nKPX Amacron Otilde -40\r\nKPX Amacron Q -40\r\nKPX Amacron T -37\r\nKPX Amacron Tcaron -37\r\nKPX Amacron Tcommaaccent -37\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -105\r\nKPX Amacron W -95\r\nKPX Amacron Y -55\r\nKPX Amacron Yacute -55\r\nKPX Amacron Ydieresis -55\r\nKPX Amacron quoteright -37\r\nKPX Amacron u -20\r\nKPX Amacron uacute -20\r\nKPX Amacron ucircumflex -20\r\nKPX Amacron udieresis -20\r\nKPX Amacron ugrave -20\r\nKPX Amacron uhungarumlaut -20\r\nKPX Amacron umacron -20\r\nKPX Amacron uogonek -20\r\nKPX Amacron uring -20\r\nKPX Amacron v -55\r\nKPX Amacron w -55\r\nKPX Amacron y -55\r\nKPX Amacron yacute -55\r\nKPX Amacron ydieresis -55\r\nKPX Aogonek C -30\r\nKPX Aogonek Cacute -30\r\nKPX Aogonek Ccaron -30\r\nKPX Aogonek Ccedilla -30\r\nKPX Aogonek G -35\r\nKPX Aogonek Gbreve -35\r\nKPX Aogonek Gcommaaccent -35\r\nKPX Aogonek O -40\r\nKPX Aogonek Oacute -40\r\nKPX Aogonek Ocircumflex -40\r\nKPX Aogonek Odieresis -40\r\nKPX Aogonek Ograve -40\r\nKPX Aogonek Ohungarumlaut -40\r\nKPX Aogonek Omacron -40\r\nKPX Aogonek Oslash -40\r\nKPX Aogonek Otilde -40\r\nKPX Aogonek Q -40\r\nKPX Aogonek T -37\r\nKPX Aogonek Tcaron -37\r\nKPX Aogonek Tcommaaccent -37\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -105\r\nKPX Aogonek W -95\r\nKPX Aogonek Y -55\r\nKPX Aogonek Yacute -55\r\nKPX Aogonek Ydieresis -55\r\nKPX Aogonek quoteright -37\r\nKPX Aogonek u -20\r\nKPX Aogonek uacute -20\r\nKPX Aogonek ucircumflex -20\r\nKPX Aogonek udieresis -20\r\nKPX Aogonek ugrave -20\r\nKPX Aogonek uhungarumlaut -20\r\nKPX Aogonek umacron -20\r\nKPX Aogonek uogonek -20\r\nKPX Aogonek uring -20\r\nKPX Aogonek v -55\r\nKPX Aogonek w -55\r\nKPX Aogonek y -55\r\nKPX Aogonek yacute -55\r\nKPX Aogonek ydieresis -55\r\nKPX Aring C -30\r\nKPX Aring Cacute -30\r\nKPX Aring Ccaron -30\r\nKPX Aring Ccedilla -30\r\nKPX Aring G -35\r\nKPX Aring Gbreve -35\r\nKPX Aring Gcommaaccent -35\r\nKPX Aring O -40\r\nKPX Aring Oacute -40\r\nKPX Aring Ocircumflex -40\r\nKPX Aring Odieresis -40\r\nKPX Aring Ograve -40\r\nKPX Aring Ohungarumlaut -40\r\nKPX Aring Omacron -40\r\nKPX Aring Oslash -40\r\nKPX Aring Otilde -40\r\nKPX Aring Q -40\r\nKPX Aring T -37\r\nKPX Aring Tcaron -37\r\nKPX Aring Tcommaaccent -37\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -105\r\nKPX Aring W -95\r\nKPX Aring Y -55\r\nKPX Aring Yacute -55\r\nKPX Aring Ydieresis -55\r\nKPX Aring quoteright -37\r\nKPX Aring u -20\r\nKPX Aring uacute -20\r\nKPX Aring ucircumflex -20\r\nKPX Aring udieresis -20\r\nKPX Aring ugrave -20\r\nKPX Aring uhungarumlaut -20\r\nKPX Aring umacron -20\r\nKPX Aring uogonek -20\r\nKPX Aring uring -20\r\nKPX Aring v -55\r\nKPX Aring w -55\r\nKPX Aring y -55\r\nKPX Aring yacute -55\r\nKPX Aring ydieresis -55\r\nKPX Atilde C -30\r\nKPX Atilde Cacute -30\r\nKPX Atilde Ccaron -30\r\nKPX Atilde Ccedilla -30\r\nKPX Atilde G -35\r\nKPX Atilde Gbreve -35\r\nKPX Atilde Gcommaaccent -35\r\nKPX Atilde O -40\r\nKPX Atilde Oacute -40\r\nKPX Atilde Ocircumflex -40\r\nKPX Atilde Odieresis -40\r\nKPX Atilde Ograve -40\r\nKPX Atilde Ohungarumlaut -40\r\nKPX Atilde Omacron -40\r\nKPX Atilde Oslash -40\r\nKPX Atilde Otilde -40\r\nKPX Atilde Q -40\r\nKPX Atilde T -37\r\nKPX Atilde Tcaron -37\r\nKPX Atilde Tcommaaccent -37\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -105\r\nKPX Atilde W -95\r\nKPX Atilde Y -55\r\nKPX Atilde Yacute -55\r\nKPX Atilde Ydieresis -55\r\nKPX Atilde quoteright -37\r\nKPX Atilde u -20\r\nKPX Atilde uacute -20\r\nKPX Atilde ucircumflex -20\r\nKPX Atilde udieresis -20\r\nKPX Atilde ugrave -20\r\nKPX Atilde uhungarumlaut -20\r\nKPX Atilde umacron -20\r\nKPX Atilde uogonek -20\r\nKPX Atilde uring -20\r\nKPX Atilde v -55\r\nKPX Atilde w -55\r\nKPX Atilde y -55\r\nKPX Atilde yacute -55\r\nKPX Atilde ydieresis -55\r\nKPX B A -25\r\nKPX B Aacute -25\r\nKPX B Abreve -25\r\nKPX B Acircumflex -25\r\nKPX B Adieresis -25\r\nKPX B Agrave -25\r\nKPX B Amacron -25\r\nKPX B Aogonek -25\r\nKPX B Aring -25\r\nKPX B Atilde -25\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -35\r\nKPX D Aacute -35\r\nKPX D Abreve -35\r\nKPX D Acircumflex -35\r\nKPX D Adieresis -35\r\nKPX D Agrave -35\r\nKPX D Amacron -35\r\nKPX D Aogonek -35\r\nKPX D Aring -35\r\nKPX D Atilde -35\r\nKPX D V -40\r\nKPX D W -40\r\nKPX D Y -40\r\nKPX D Yacute -40\r\nKPX D Ydieresis -40\r\nKPX Dcaron A -35\r\nKPX Dcaron Aacute -35\r\nKPX Dcaron Abreve -35\r\nKPX Dcaron Acircumflex -35\r\nKPX Dcaron Adieresis -35\r\nKPX Dcaron Agrave -35\r\nKPX Dcaron Amacron -35\r\nKPX Dcaron Aogonek -35\r\nKPX Dcaron Aring -35\r\nKPX Dcaron Atilde -35\r\nKPX Dcaron V -40\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -40\r\nKPX Dcaron Yacute -40\r\nKPX Dcaron Ydieresis -40\r\nKPX Dcroat A -35\r\nKPX Dcroat Aacute -35\r\nKPX Dcroat Abreve -35\r\nKPX Dcroat Acircumflex -35\r\nKPX Dcroat Adieresis -35\r\nKPX Dcroat Agrave -35\r\nKPX Dcroat Amacron -35\r\nKPX Dcroat Aogonek -35\r\nKPX Dcroat Aring -35\r\nKPX Dcroat Atilde -35\r\nKPX Dcroat V -40\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -40\r\nKPX Dcroat Yacute -40\r\nKPX Dcroat Ydieresis -40\r\nKPX F A -115\r\nKPX F Aacute -115\r\nKPX F Abreve -115\r\nKPX F Acircumflex -115\r\nKPX F Adieresis -115\r\nKPX F Agrave -115\r\nKPX F Amacron -115\r\nKPX F Aogonek -115\r\nKPX F Aring -115\r\nKPX F Atilde -115\r\nKPX F a -75\r\nKPX F aacute -75\r\nKPX F abreve -75\r\nKPX F acircumflex -75\r\nKPX F adieresis -75\r\nKPX F agrave -75\r\nKPX F amacron -75\r\nKPX F aogonek -75\r\nKPX F aring -75\r\nKPX F atilde -75\r\nKPX F comma -135\r\nKPX F e -75\r\nKPX F eacute -75\r\nKPX F ecaron -75\r\nKPX F ecircumflex -75\r\nKPX F edieresis -75\r\nKPX F edotaccent -75\r\nKPX F egrave -75\r\nKPX F emacron -75\r\nKPX F eogonek -75\r\nKPX F i -45\r\nKPX F iacute -45\r\nKPX F icircumflex -45\r\nKPX F idieresis -45\r\nKPX F igrave -45\r\nKPX F imacron -45\r\nKPX F iogonek -45\r\nKPX F o -105\r\nKPX F oacute -105\r\nKPX F ocircumflex -105\r\nKPX F odieresis -105\r\nKPX F ograve -105\r\nKPX F ohungarumlaut -105\r\nKPX F omacron -105\r\nKPX F oslash -105\r\nKPX F otilde -105\r\nKPX F period -135\r\nKPX F r -55\r\nKPX F racute -55\r\nKPX F rcaron -55\r\nKPX F rcommaaccent -55\r\nKPX J A -40\r\nKPX J Aacute -40\r\nKPX J Abreve -40\r\nKPX J Acircumflex -40\r\nKPX J Adieresis -40\r\nKPX J Agrave -40\r\nKPX J Amacron -40\r\nKPX J Aogonek -40\r\nKPX J Aring -40\r\nKPX J Atilde -40\r\nKPX J a -35\r\nKPX J aacute -35\r\nKPX J abreve -35\r\nKPX J acircumflex -35\r\nKPX J adieresis -35\r\nKPX J agrave -35\r\nKPX J amacron -35\r\nKPX J aogonek -35\r\nKPX J aring -35\r\nKPX J atilde -35\r\nKPX J comma -25\r\nKPX J e -25\r\nKPX J eacute -25\r\nKPX J ecaron -25\r\nKPX J ecircumflex -25\r\nKPX J edieresis -25\r\nKPX J edotaccent -25\r\nKPX J egrave -25\r\nKPX J emacron -25\r\nKPX J eogonek -25\r\nKPX J o -25\r\nKPX J oacute -25\r\nKPX J ocircumflex -25\r\nKPX J odieresis -25\r\nKPX J ograve -25\r\nKPX J ohungarumlaut -25\r\nKPX J omacron -25\r\nKPX J oslash -25\r\nKPX J otilde -25\r\nKPX J period -25\r\nKPX J u -35\r\nKPX J uacute -35\r\nKPX J ucircumflex -35\r\nKPX J udieresis -35\r\nKPX J ugrave -35\r\nKPX J uhungarumlaut -35\r\nKPX J umacron -35\r\nKPX J uogonek -35\r\nKPX J uring -35\r\nKPX K O -50\r\nKPX K Oacute -50\r\nKPX K Ocircumflex -50\r\nKPX K Odieresis -50\r\nKPX K Ograve -50\r\nKPX K Ohungarumlaut -50\r\nKPX K Omacron -50\r\nKPX K Oslash -50\r\nKPX K Otilde -50\r\nKPX K e -35\r\nKPX K eacute -35\r\nKPX K ecaron -35\r\nKPX K ecircumflex -35\r\nKPX K edieresis -35\r\nKPX K edotaccent -35\r\nKPX K egrave -35\r\nKPX K emacron -35\r\nKPX K eogonek -35\r\nKPX K o -40\r\nKPX K oacute -40\r\nKPX K ocircumflex -40\r\nKPX K odieresis -40\r\nKPX K ograve -40\r\nKPX K ohungarumlaut -40\r\nKPX K omacron -40\r\nKPX K oslash -40\r\nKPX K otilde -40\r\nKPX K u -40\r\nKPX K uacute -40\r\nKPX K ucircumflex -40\r\nKPX K udieresis -40\r\nKPX K ugrave -40\r\nKPX K uhungarumlaut -40\r\nKPX K umacron -40\r\nKPX K uogonek -40\r\nKPX K uring -40\r\nKPX K y -40\r\nKPX K yacute -40\r\nKPX K ydieresis -40\r\nKPX Kcommaaccent O -50\r\nKPX Kcommaaccent Oacute -50\r\nKPX Kcommaaccent Ocircumflex -50\r\nKPX Kcommaaccent Odieresis -50\r\nKPX Kcommaaccent Ograve -50\r\nKPX Kcommaaccent Ohungarumlaut -50\r\nKPX Kcommaaccent Omacron -50\r\nKPX Kcommaaccent Oslash -50\r\nKPX Kcommaaccent Otilde -50\r\nKPX Kcommaaccent e -35\r\nKPX Kcommaaccent eacute -35\r\nKPX Kcommaaccent ecaron -35\r\nKPX Kcommaaccent ecircumflex -35\r\nKPX Kcommaaccent edieresis -35\r\nKPX Kcommaaccent edotaccent -35\r\nKPX Kcommaaccent egrave -35\r\nKPX Kcommaaccent emacron -35\r\nKPX Kcommaaccent eogonek -35\r\nKPX Kcommaaccent o -40\r\nKPX Kcommaaccent oacute -40\r\nKPX Kcommaaccent ocircumflex -40\r\nKPX Kcommaaccent odieresis -40\r\nKPX Kcommaaccent ograve -40\r\nKPX Kcommaaccent ohungarumlaut -40\r\nKPX Kcommaaccent omacron -40\r\nKPX Kcommaaccent oslash -40\r\nKPX Kcommaaccent otilde -40\r\nKPX Kcommaaccent u -40\r\nKPX Kcommaaccent uacute -40\r\nKPX Kcommaaccent ucircumflex -40\r\nKPX Kcommaaccent udieresis -40\r\nKPX Kcommaaccent ugrave -40\r\nKPX Kcommaaccent uhungarumlaut -40\r\nKPX Kcommaaccent umacron -40\r\nKPX Kcommaaccent uogonek -40\r\nKPX Kcommaaccent uring -40\r\nKPX Kcommaaccent y -40\r\nKPX Kcommaaccent yacute -40\r\nKPX Kcommaaccent ydieresis -40\r\nKPX L T -20\r\nKPX L Tcaron -20\r\nKPX L Tcommaaccent -20\r\nKPX L V -55\r\nKPX L W -55\r\nKPX L Y -20\r\nKPX L Yacute -20\r\nKPX L Ydieresis -20\r\nKPX L quoteright -37\r\nKPX L y -30\r\nKPX L yacute -30\r\nKPX L ydieresis -30\r\nKPX Lacute T -20\r\nKPX Lacute Tcaron -20\r\nKPX Lacute Tcommaaccent -20\r\nKPX Lacute V -55\r\nKPX Lacute W -55\r\nKPX Lacute Y -20\r\nKPX Lacute Yacute -20\r\nKPX Lacute Ydieresis -20\r\nKPX Lacute quoteright -37\r\nKPX Lacute y -30\r\nKPX Lacute yacute -30\r\nKPX Lacute ydieresis -30\r\nKPX Lcommaaccent T -20\r\nKPX Lcommaaccent Tcaron -20\r\nKPX Lcommaaccent Tcommaaccent -20\r\nKPX Lcommaaccent V -55\r\nKPX Lcommaaccent W -55\r\nKPX Lcommaaccent Y -20\r\nKPX Lcommaaccent Yacute -20\r\nKPX Lcommaaccent Ydieresis -20\r\nKPX Lcommaaccent quoteright -37\r\nKPX Lcommaaccent y -30\r\nKPX Lcommaaccent yacute -30\r\nKPX Lcommaaccent ydieresis -30\r\nKPX Lslash T -20\r\nKPX Lslash Tcaron -20\r\nKPX Lslash Tcommaaccent -20\r\nKPX Lslash V -55\r\nKPX Lslash W -55\r\nKPX Lslash Y -20\r\nKPX Lslash Yacute -20\r\nKPX Lslash Ydieresis -20\r\nKPX Lslash quoteright -37\r\nKPX Lslash y -30\r\nKPX Lslash yacute -30\r\nKPX Lslash ydieresis -30\r\nKPX N A -27\r\nKPX N Aacute -27\r\nKPX N Abreve -27\r\nKPX N Acircumflex -27\r\nKPX N Adieresis -27\r\nKPX N Agrave -27\r\nKPX N Amacron -27\r\nKPX N Aogonek -27\r\nKPX N Aring -27\r\nKPX N Atilde -27\r\nKPX Nacute A -27\r\nKPX Nacute Aacute -27\r\nKPX Nacute Abreve -27\r\nKPX Nacute Acircumflex -27\r\nKPX Nacute Adieresis -27\r\nKPX Nacute Agrave -27\r\nKPX Nacute Amacron -27\r\nKPX Nacute Aogonek -27\r\nKPX Nacute Aring -27\r\nKPX Nacute Atilde -27\r\nKPX Ncaron A -27\r\nKPX Ncaron Aacute -27\r\nKPX Ncaron Abreve -27\r\nKPX Ncaron Acircumflex -27\r\nKPX Ncaron Adieresis -27\r\nKPX Ncaron Agrave -27\r\nKPX Ncaron Amacron -27\r\nKPX Ncaron Aogonek -27\r\nKPX Ncaron Aring -27\r\nKPX Ncaron Atilde -27\r\nKPX Ncommaaccent A -27\r\nKPX Ncommaaccent Aacute -27\r\nKPX Ncommaaccent Abreve -27\r\nKPX Ncommaaccent Acircumflex -27\r\nKPX Ncommaaccent Adieresis -27\r\nKPX Ncommaaccent Agrave -27\r\nKPX Ncommaaccent Amacron -27\r\nKPX Ncommaaccent Aogonek -27\r\nKPX Ncommaaccent Aring -27\r\nKPX Ncommaaccent Atilde -27\r\nKPX Ntilde A -27\r\nKPX Ntilde Aacute -27\r\nKPX Ntilde Abreve -27\r\nKPX Ntilde Acircumflex -27\r\nKPX Ntilde Adieresis -27\r\nKPX Ntilde Agrave -27\r\nKPX Ntilde Amacron -27\r\nKPX Ntilde Aogonek -27\r\nKPX Ntilde Aring -27\r\nKPX Ntilde Atilde -27\r\nKPX O A -55\r\nKPX O Aacute -55\r\nKPX O Abreve -55\r\nKPX O Acircumflex -55\r\nKPX O Adieresis -55\r\nKPX O Agrave -55\r\nKPX O Amacron -55\r\nKPX O Aogonek -55\r\nKPX O Aring -55\r\nKPX O Atilde -55\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -55\r\nKPX Oacute Aacute -55\r\nKPX Oacute Abreve -55\r\nKPX Oacute Acircumflex -55\r\nKPX Oacute Adieresis -55\r\nKPX Oacute Agrave -55\r\nKPX Oacute Amacron -55\r\nKPX Oacute Aogonek -55\r\nKPX Oacute Aring -55\r\nKPX Oacute Atilde -55\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -55\r\nKPX Ocircumflex Aacute -55\r\nKPX Ocircumflex Abreve -55\r\nKPX Ocircumflex Acircumflex -55\r\nKPX Ocircumflex Adieresis -55\r\nKPX Ocircumflex Agrave -55\r\nKPX Ocircumflex Amacron -55\r\nKPX Ocircumflex Aogonek -55\r\nKPX Ocircumflex Aring -55\r\nKPX Ocircumflex Atilde -55\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -55\r\nKPX Odieresis Aacute -55\r\nKPX Odieresis Abreve -55\r\nKPX Odieresis Acircumflex -55\r\nKPX Odieresis Adieresis -55\r\nKPX Odieresis Agrave -55\r\nKPX Odieresis Amacron -55\r\nKPX Odieresis Aogonek -55\r\nKPX Odieresis Aring -55\r\nKPX Odieresis Atilde -55\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -55\r\nKPX Ograve Aacute -55\r\nKPX Ograve Abreve -55\r\nKPX Ograve Acircumflex -55\r\nKPX Ograve Adieresis -55\r\nKPX Ograve Agrave -55\r\nKPX Ograve Amacron -55\r\nKPX Ograve Aogonek -55\r\nKPX Ograve Aring -55\r\nKPX Ograve Atilde -55\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -55\r\nKPX Ohungarumlaut Aacute -55\r\nKPX Ohungarumlaut Abreve -55\r\nKPX Ohungarumlaut Acircumflex -55\r\nKPX Ohungarumlaut Adieresis -55\r\nKPX Ohungarumlaut Agrave -55\r\nKPX Ohungarumlaut Amacron -55\r\nKPX Ohungarumlaut Aogonek -55\r\nKPX Ohungarumlaut Aring -55\r\nKPX Ohungarumlaut Atilde -55\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -55\r\nKPX Omacron Aacute -55\r\nKPX Omacron Abreve -55\r\nKPX Omacron Acircumflex -55\r\nKPX Omacron Adieresis -55\r\nKPX Omacron Agrave -55\r\nKPX Omacron Amacron -55\r\nKPX Omacron Aogonek -55\r\nKPX Omacron Aring -55\r\nKPX Omacron Atilde -55\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -55\r\nKPX Oslash Aacute -55\r\nKPX Oslash Abreve -55\r\nKPX Oslash Acircumflex -55\r\nKPX Oslash Adieresis -55\r\nKPX Oslash Agrave -55\r\nKPX Oslash Amacron -55\r\nKPX Oslash Aogonek -55\r\nKPX Oslash Aring -55\r\nKPX Oslash Atilde -55\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -55\r\nKPX Otilde Aacute -55\r\nKPX Otilde Abreve -55\r\nKPX Otilde Acircumflex -55\r\nKPX Otilde Adieresis -55\r\nKPX Otilde Agrave -55\r\nKPX Otilde Amacron -55\r\nKPX Otilde Aogonek -55\r\nKPX Otilde Aring -55\r\nKPX Otilde Atilde -55\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -90\r\nKPX P Aacute -90\r\nKPX P Abreve -90\r\nKPX P Acircumflex -90\r\nKPX P Adieresis -90\r\nKPX P Agrave -90\r\nKPX P Amacron -90\r\nKPX P Aogonek -90\r\nKPX P Aring -90\r\nKPX P Atilde -90\r\nKPX P a -80\r\nKPX P aacute -80\r\nKPX P abreve -80\r\nKPX P acircumflex -80\r\nKPX P adieresis -80\r\nKPX P agrave -80\r\nKPX P amacron -80\r\nKPX P aogonek -80\r\nKPX P aring -80\r\nKPX P atilde -80\r\nKPX P comma -135\r\nKPX P e -80\r\nKPX P eacute -80\r\nKPX P ecaron -80\r\nKPX P ecircumflex -80\r\nKPX P edieresis -80\r\nKPX P edotaccent -80\r\nKPX P egrave -80\r\nKPX P emacron -80\r\nKPX P eogonek -80\r\nKPX P o -80\r\nKPX P oacute -80\r\nKPX P ocircumflex -80\r\nKPX P odieresis -80\r\nKPX P ograve -80\r\nKPX P ohungarumlaut -80\r\nKPX P omacron -80\r\nKPX P oslash -80\r\nKPX P otilde -80\r\nKPX P period -135\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -18\r\nKPX R W -18\r\nKPX R Y -18\r\nKPX R Yacute -18\r\nKPX R Ydieresis -18\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -18\r\nKPX Racute W -18\r\nKPX Racute Y -18\r\nKPX Racute Yacute -18\r\nKPX Racute Ydieresis -18\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -18\r\nKPX Rcaron W -18\r\nKPX Rcaron Y -18\r\nKPX Rcaron Yacute -18\r\nKPX Rcaron Ydieresis -18\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -18\r\nKPX Rcommaaccent W -18\r\nKPX Rcommaaccent Y -18\r\nKPX Rcommaaccent Yacute -18\r\nKPX Rcommaaccent Ydieresis -18\r\nKPX T A -50\r\nKPX T Aacute -50\r\nKPX T Abreve -50\r\nKPX T Acircumflex -50\r\nKPX T Adieresis -50\r\nKPX T Agrave -50\r\nKPX T Amacron -50\r\nKPX T Aogonek -50\r\nKPX T Aring -50\r\nKPX T Atilde -50\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -92\r\nKPX T acircumflex -92\r\nKPX T adieresis -92\r\nKPX T agrave -92\r\nKPX T amacron -92\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -92\r\nKPX T colon -55\r\nKPX T comma -74\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -52\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -74\r\nKPX T i -55\r\nKPX T iacute -55\r\nKPX T iogonek -55\r\nKPX T o -92\r\nKPX T oacute -92\r\nKPX T ocircumflex -92\r\nKPX T odieresis -92\r\nKPX T ograve -92\r\nKPX T ohungarumlaut -92\r\nKPX T omacron -92\r\nKPX T oslash -92\r\nKPX T otilde -92\r\nKPX T period -74\r\nKPX T r -55\r\nKPX T racute -55\r\nKPX T rcaron -55\r\nKPX T rcommaaccent -55\r\nKPX T semicolon -65\r\nKPX T u -55\r\nKPX T uacute -55\r\nKPX T ucircumflex -55\r\nKPX T udieresis -55\r\nKPX T ugrave -55\r\nKPX T uhungarumlaut -55\r\nKPX T umacron -55\r\nKPX T uogonek -55\r\nKPX T uring -55\r\nKPX T w -74\r\nKPX T y -74\r\nKPX T yacute -74\r\nKPX T ydieresis -34\r\nKPX Tcaron A -50\r\nKPX Tcaron Aacute -50\r\nKPX Tcaron Abreve -50\r\nKPX Tcaron Acircumflex -50\r\nKPX Tcaron Adieresis -50\r\nKPX Tcaron Agrave -50\r\nKPX Tcaron Amacron -50\r\nKPX Tcaron Aogonek -50\r\nKPX Tcaron Aring -50\r\nKPX Tcaron Atilde -50\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -92\r\nKPX Tcaron acircumflex -92\r\nKPX Tcaron adieresis -92\r\nKPX Tcaron agrave -92\r\nKPX Tcaron amacron -92\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -92\r\nKPX Tcaron colon -55\r\nKPX Tcaron comma -74\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -52\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -74\r\nKPX Tcaron i -55\r\nKPX Tcaron iacute -55\r\nKPX Tcaron iogonek -55\r\nKPX Tcaron o -92\r\nKPX Tcaron oacute -92\r\nKPX Tcaron ocircumflex -92\r\nKPX Tcaron odieresis -92\r\nKPX Tcaron ograve -92\r\nKPX Tcaron ohungarumlaut -92\r\nKPX Tcaron omacron -92\r\nKPX Tcaron oslash -92\r\nKPX Tcaron otilde -92\r\nKPX Tcaron period -74\r\nKPX Tcaron r -55\r\nKPX Tcaron racute -55\r\nKPX Tcaron rcaron -55\r\nKPX Tcaron rcommaaccent -55\r\nKPX Tcaron semicolon -65\r\nKPX Tcaron u -55\r\nKPX Tcaron uacute -55\r\nKPX Tcaron ucircumflex -55\r\nKPX Tcaron udieresis -55\r\nKPX Tcaron ugrave -55\r\nKPX Tcaron uhungarumlaut -55\r\nKPX Tcaron umacron -55\r\nKPX Tcaron uogonek -55\r\nKPX Tcaron uring -55\r\nKPX Tcaron w -74\r\nKPX Tcaron y -74\r\nKPX Tcaron yacute -74\r\nKPX Tcaron ydieresis -34\r\nKPX Tcommaaccent A -50\r\nKPX Tcommaaccent Aacute -50\r\nKPX Tcommaaccent Abreve -50\r\nKPX Tcommaaccent Acircumflex -50\r\nKPX Tcommaaccent Adieresis -50\r\nKPX Tcommaaccent Agrave -50\r\nKPX Tcommaaccent Amacron -50\r\nKPX Tcommaaccent Aogonek -50\r\nKPX Tcommaaccent Aring -50\r\nKPX Tcommaaccent Atilde -50\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -92\r\nKPX Tcommaaccent acircumflex -92\r\nKPX Tcommaaccent adieresis -92\r\nKPX Tcommaaccent agrave -92\r\nKPX Tcommaaccent amacron -92\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -92\r\nKPX Tcommaaccent colon -55\r\nKPX Tcommaaccent comma -74\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -52\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -74\r\nKPX Tcommaaccent i -55\r\nKPX Tcommaaccent iacute -55\r\nKPX Tcommaaccent iogonek -55\r\nKPX Tcommaaccent o -92\r\nKPX Tcommaaccent oacute -92\r\nKPX Tcommaaccent ocircumflex -92\r\nKPX Tcommaaccent odieresis -92\r\nKPX Tcommaaccent ograve -92\r\nKPX Tcommaaccent ohungarumlaut -92\r\nKPX Tcommaaccent omacron -92\r\nKPX Tcommaaccent oslash -92\r\nKPX Tcommaaccent otilde -92\r\nKPX Tcommaaccent period -74\r\nKPX Tcommaaccent r -55\r\nKPX Tcommaaccent racute -55\r\nKPX Tcommaaccent rcaron -55\r\nKPX Tcommaaccent rcommaaccent -55\r\nKPX Tcommaaccent semicolon -65\r\nKPX Tcommaaccent u -55\r\nKPX Tcommaaccent uacute -55\r\nKPX Tcommaaccent ucircumflex -55\r\nKPX Tcommaaccent udieresis -55\r\nKPX Tcommaaccent ugrave -55\r\nKPX Tcommaaccent uhungarumlaut -55\r\nKPX Tcommaaccent umacron -55\r\nKPX Tcommaaccent uogonek -55\r\nKPX Tcommaaccent uring -55\r\nKPX Tcommaaccent w -74\r\nKPX Tcommaaccent y -74\r\nKPX Tcommaaccent yacute -74\r\nKPX Tcommaaccent ydieresis -34\r\nKPX U A -40\r\nKPX U Aacute -40\r\nKPX U Abreve -40\r\nKPX U Acircumflex -40\r\nKPX U Adieresis -40\r\nKPX U Agrave -40\r\nKPX U Amacron -40\r\nKPX U Aogonek -40\r\nKPX U Aring -40\r\nKPX U Atilde -40\r\nKPX U comma -25\r\nKPX U period -25\r\nKPX Uacute A -40\r\nKPX Uacute Aacute -40\r\nKPX Uacute Abreve -40\r\nKPX Uacute Acircumflex -40\r\nKPX Uacute Adieresis -40\r\nKPX Uacute Agrave -40\r\nKPX Uacute Amacron -40\r\nKPX Uacute Aogonek -40\r\nKPX Uacute Aring -40\r\nKPX Uacute Atilde -40\r\nKPX Uacute comma -25\r\nKPX Uacute period -25\r\nKPX Ucircumflex A -40\r\nKPX Ucircumflex Aacute -40\r\nKPX Ucircumflex Abreve -40\r\nKPX Ucircumflex Acircumflex -40\r\nKPX Ucircumflex Adieresis -40\r\nKPX Ucircumflex Agrave -40\r\nKPX Ucircumflex Amacron -40\r\nKPX Ucircumflex Aogonek -40\r\nKPX Ucircumflex Aring -40\r\nKPX Ucircumflex Atilde -40\r\nKPX Ucircumflex comma -25\r\nKPX Ucircumflex period -25\r\nKPX Udieresis A -40\r\nKPX Udieresis Aacute -40\r\nKPX Udieresis Abreve -40\r\nKPX Udieresis Acircumflex -40\r\nKPX Udieresis Adieresis -40\r\nKPX Udieresis Agrave -40\r\nKPX Udieresis Amacron -40\r\nKPX Udieresis Aogonek -40\r\nKPX Udieresis Aring -40\r\nKPX Udieresis Atilde -40\r\nKPX Udieresis comma -25\r\nKPX Udieresis period -25\r\nKPX Ugrave A -40\r\nKPX Ugrave Aacute -40\r\nKPX Ugrave Abreve -40\r\nKPX Ugrave Acircumflex -40\r\nKPX Ugrave Adieresis -40\r\nKPX Ugrave Agrave -40\r\nKPX Ugrave Amacron -40\r\nKPX Ugrave Aogonek -40\r\nKPX Ugrave Aring -40\r\nKPX Ugrave Atilde -40\r\nKPX Ugrave comma -25\r\nKPX Ugrave period -25\r\nKPX Uhungarumlaut A -40\r\nKPX Uhungarumlaut Aacute -40\r\nKPX Uhungarumlaut Abreve -40\r\nKPX Uhungarumlaut Acircumflex -40\r\nKPX Uhungarumlaut Adieresis -40\r\nKPX Uhungarumlaut Agrave -40\r\nKPX Uhungarumlaut Amacron -40\r\nKPX Uhungarumlaut Aogonek -40\r\nKPX Uhungarumlaut Aring -40\r\nKPX Uhungarumlaut Atilde -40\r\nKPX Uhungarumlaut comma -25\r\nKPX Uhungarumlaut period -25\r\nKPX Umacron A -40\r\nKPX Umacron Aacute -40\r\nKPX Umacron Abreve -40\r\nKPX Umacron Acircumflex -40\r\nKPX Umacron Adieresis -40\r\nKPX Umacron Agrave -40\r\nKPX Umacron Amacron -40\r\nKPX Umacron Aogonek -40\r\nKPX Umacron Aring -40\r\nKPX Umacron Atilde -40\r\nKPX Umacron comma -25\r\nKPX Umacron period -25\r\nKPX Uogonek A -40\r\nKPX Uogonek Aacute -40\r\nKPX Uogonek Abreve -40\r\nKPX Uogonek Acircumflex -40\r\nKPX Uogonek Adieresis -40\r\nKPX Uogonek Agrave -40\r\nKPX Uogonek Amacron -40\r\nKPX Uogonek Aogonek -40\r\nKPX Uogonek Aring -40\r\nKPX Uogonek Atilde -40\r\nKPX Uogonek comma -25\r\nKPX Uogonek period -25\r\nKPX Uring A -40\r\nKPX Uring Aacute -40\r\nKPX Uring Abreve -40\r\nKPX Uring Acircumflex -40\r\nKPX Uring Adieresis -40\r\nKPX Uring Agrave -40\r\nKPX Uring Amacron -40\r\nKPX Uring Aogonek -40\r\nKPX Uring Aring -40\r\nKPX Uring Atilde -40\r\nKPX Uring comma -25\r\nKPX Uring period -25\r\nKPX V A -60\r\nKPX V Aacute -60\r\nKPX V Abreve -60\r\nKPX V Acircumflex -60\r\nKPX V Adieresis -60\r\nKPX V Agrave -60\r\nKPX V Amacron -60\r\nKPX V Aogonek -60\r\nKPX V Aring -60\r\nKPX V Atilde -60\r\nKPX V O -30\r\nKPX V Oacute -30\r\nKPX V Ocircumflex -30\r\nKPX V Odieresis -30\r\nKPX V Ograve -30\r\nKPX V Ohungarumlaut -30\r\nKPX V Omacron -30\r\nKPX V Oslash -30\r\nKPX V Otilde -30\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -111\r\nKPX V adieresis -111\r\nKPX V agrave -111\r\nKPX V amacron -111\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -111\r\nKPX V colon -65\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -111\r\nKPX V ecircumflex -111\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -55\r\nKPX V i -74\r\nKPX V iacute -74\r\nKPX V icircumflex -34\r\nKPX V idieresis -34\r\nKPX V igrave -34\r\nKPX V imacron -34\r\nKPX V iogonek -74\r\nKPX V o -111\r\nKPX V oacute -111\r\nKPX V ocircumflex -111\r\nKPX V odieresis -111\r\nKPX V ograve -111\r\nKPX V ohungarumlaut -111\r\nKPX V omacron -111\r\nKPX V oslash -111\r\nKPX V otilde -111\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -74\r\nKPX V uacute -74\r\nKPX V ucircumflex -74\r\nKPX V udieresis -74\r\nKPX V ugrave -74\r\nKPX V uhungarumlaut -74\r\nKPX V umacron -74\r\nKPX V uogonek -74\r\nKPX V uring -74\r\nKPX W A -60\r\nKPX W Aacute -60\r\nKPX W Abreve -60\r\nKPX W Acircumflex -60\r\nKPX W Adieresis -60\r\nKPX W Agrave -60\r\nKPX W Amacron -60\r\nKPX W Aogonek -60\r\nKPX W Aring -60\r\nKPX W Atilde -60\r\nKPX W O -25\r\nKPX W Oacute -25\r\nKPX W Ocircumflex -25\r\nKPX W Odieresis -25\r\nKPX W Ograve -25\r\nKPX W Ohungarumlaut -25\r\nKPX W Omacron -25\r\nKPX W Oslash -25\r\nKPX W Otilde -25\r\nKPX W a -92\r\nKPX W aacute -92\r\nKPX W abreve -92\r\nKPX W acircumflex -92\r\nKPX W adieresis -92\r\nKPX W agrave -92\r\nKPX W amacron -92\r\nKPX W aogonek -92\r\nKPX W aring -92\r\nKPX W atilde -92\r\nKPX W colon -65\r\nKPX W comma -92\r\nKPX W e -92\r\nKPX W eacute -92\r\nKPX W ecaron -92\r\nKPX W ecircumflex -92\r\nKPX W edieresis -52\r\nKPX W edotaccent -92\r\nKPX W egrave -52\r\nKPX W emacron -52\r\nKPX W eogonek -92\r\nKPX W hyphen -37\r\nKPX W i -55\r\nKPX W iacute -55\r\nKPX W iogonek -55\r\nKPX W o -92\r\nKPX W oacute -92\r\nKPX W ocircumflex -92\r\nKPX W odieresis -92\r\nKPX W ograve -92\r\nKPX W ohungarumlaut -92\r\nKPX W omacron -92\r\nKPX W oslash -92\r\nKPX W otilde -92\r\nKPX W period -92\r\nKPX W semicolon -65\r\nKPX W u -55\r\nKPX W uacute -55\r\nKPX W ucircumflex -55\r\nKPX W udieresis -55\r\nKPX W ugrave -55\r\nKPX W uhungarumlaut -55\r\nKPX W umacron -55\r\nKPX W uogonek -55\r\nKPX W uring -55\r\nKPX W y -70\r\nKPX W yacute -70\r\nKPX W ydieresis -70\r\nKPX Y A -50\r\nKPX Y Aacute -50\r\nKPX Y Abreve -50\r\nKPX Y Acircumflex -50\r\nKPX Y Adieresis -50\r\nKPX Y Agrave -50\r\nKPX Y Amacron -50\r\nKPX Y Aogonek -50\r\nKPX Y Aring -50\r\nKPX Y Atilde -50\r\nKPX Y O -15\r\nKPX Y Oacute -15\r\nKPX Y Ocircumflex -15\r\nKPX Y Odieresis -15\r\nKPX Y Ograve -15\r\nKPX Y Ohungarumlaut -15\r\nKPX Y Omacron -15\r\nKPX Y Oslash -15\r\nKPX Y Otilde -15\r\nKPX Y a -92\r\nKPX Y aacute -92\r\nKPX Y abreve -92\r\nKPX Y acircumflex -92\r\nKPX Y adieresis -92\r\nKPX Y agrave -92\r\nKPX Y amacron -92\r\nKPX Y aogonek -92\r\nKPX Y aring -92\r\nKPX Y atilde -92\r\nKPX Y colon -65\r\nKPX Y comma -92\r\nKPX Y e -92\r\nKPX Y eacute -92\r\nKPX Y ecaron -92\r\nKPX Y ecircumflex -92\r\nKPX Y edieresis -52\r\nKPX Y edotaccent -92\r\nKPX Y egrave -52\r\nKPX Y emacron -52\r\nKPX Y eogonek -92\r\nKPX Y hyphen -74\r\nKPX Y i -74\r\nKPX Y iacute -74\r\nKPX Y icircumflex -34\r\nKPX Y idieresis -34\r\nKPX Y igrave -34\r\nKPX Y imacron -34\r\nKPX Y iogonek -74\r\nKPX Y o -92\r\nKPX Y oacute -92\r\nKPX Y ocircumflex -92\r\nKPX Y odieresis -92\r\nKPX Y ograve -92\r\nKPX Y ohungarumlaut -92\r\nKPX Y omacron -92\r\nKPX Y oslash -92\r\nKPX Y otilde -92\r\nKPX Y period -92\r\nKPX Y semicolon -65\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -50\r\nKPX Yacute Aacute -50\r\nKPX Yacute Abreve -50\r\nKPX Yacute Acircumflex -50\r\nKPX Yacute Adieresis -50\r\nKPX Yacute Agrave -50\r\nKPX Yacute Amacron -50\r\nKPX Yacute Aogonek -50\r\nKPX Yacute Aring -50\r\nKPX Yacute Atilde -50\r\nKPX Yacute O -15\r\nKPX Yacute Oacute -15\r\nKPX Yacute Ocircumflex -15\r\nKPX Yacute Odieresis -15\r\nKPX Yacute Ograve -15\r\nKPX Yacute Ohungarumlaut -15\r\nKPX Yacute Omacron -15\r\nKPX Yacute Oslash -15\r\nKPX Yacute Otilde -15\r\nKPX Yacute a -92\r\nKPX Yacute aacute -92\r\nKPX Yacute abreve -92\r\nKPX Yacute acircumflex -92\r\nKPX Yacute adieresis -92\r\nKPX Yacute agrave -92\r\nKPX Yacute amacron -92\r\nKPX Yacute aogonek -92\r\nKPX Yacute aring -92\r\nKPX Yacute atilde -92\r\nKPX Yacute colon -65\r\nKPX Yacute comma -92\r\nKPX Yacute e -92\r\nKPX Yacute eacute -92\r\nKPX Yacute ecaron -92\r\nKPX Yacute ecircumflex -92\r\nKPX Yacute edieresis -52\r\nKPX Yacute edotaccent -92\r\nKPX Yacute egrave -52\r\nKPX Yacute emacron -52\r\nKPX Yacute eogonek -92\r\nKPX Yacute hyphen -74\r\nKPX Yacute i -74\r\nKPX Yacute iacute -74\r\nKPX Yacute icircumflex -34\r\nKPX Yacute idieresis -34\r\nKPX Yacute igrave -34\r\nKPX Yacute imacron -34\r\nKPX Yacute iogonek -74\r\nKPX Yacute o -92\r\nKPX Yacute oacute -92\r\nKPX Yacute ocircumflex -92\r\nKPX Yacute odieresis -92\r\nKPX Yacute ograve -92\r\nKPX Yacute ohungarumlaut -92\r\nKPX Yacute omacron -92\r\nKPX Yacute oslash -92\r\nKPX Yacute otilde -92\r\nKPX Yacute period -92\r\nKPX Yacute semicolon -65\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -50\r\nKPX Ydieresis Aacute -50\r\nKPX Ydieresis Abreve -50\r\nKPX Ydieresis Acircumflex -50\r\nKPX Ydieresis Adieresis -50\r\nKPX Ydieresis Agrave -50\r\nKPX Ydieresis Amacron -50\r\nKPX Ydieresis Aogonek -50\r\nKPX Ydieresis Aring -50\r\nKPX Ydieresis Atilde -50\r\nKPX Ydieresis O -15\r\nKPX Ydieresis Oacute -15\r\nKPX Ydieresis Ocircumflex -15\r\nKPX Ydieresis Odieresis -15\r\nKPX Ydieresis Ograve -15\r\nKPX Ydieresis Ohungarumlaut -15\r\nKPX Ydieresis Omacron -15\r\nKPX Ydieresis Oslash -15\r\nKPX Ydieresis Otilde -15\r\nKPX Ydieresis a -92\r\nKPX Ydieresis aacute -92\r\nKPX Ydieresis abreve -92\r\nKPX Ydieresis acircumflex -92\r\nKPX Ydieresis adieresis -92\r\nKPX Ydieresis agrave -92\r\nKPX Ydieresis amacron -92\r\nKPX Ydieresis aogonek -92\r\nKPX Ydieresis aring -92\r\nKPX Ydieresis atilde -92\r\nKPX Ydieresis colon -65\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -92\r\nKPX Ydieresis eacute -92\r\nKPX Ydieresis ecaron -92\r\nKPX Ydieresis ecircumflex -92\r\nKPX Ydieresis edieresis -52\r\nKPX Ydieresis edotaccent -92\r\nKPX Ydieresis egrave -52\r\nKPX Ydieresis emacron -52\r\nKPX Ydieresis eogonek -92\r\nKPX Ydieresis hyphen -74\r\nKPX Ydieresis i -74\r\nKPX Ydieresis iacute -74\r\nKPX Ydieresis icircumflex -34\r\nKPX Ydieresis idieresis -34\r\nKPX Ydieresis igrave -34\r\nKPX Ydieresis imacron -34\r\nKPX Ydieresis iogonek -74\r\nKPX Ydieresis o -92\r\nKPX Ydieresis oacute -92\r\nKPX Ydieresis ocircumflex -92\r\nKPX Ydieresis odieresis -92\r\nKPX Ydieresis ograve -92\r\nKPX Ydieresis ohungarumlaut -92\r\nKPX Ydieresis omacron -92\r\nKPX Ydieresis oslash -92\r\nKPX Ydieresis otilde -92\r\nKPX Ydieresis period -92\r\nKPX Ydieresis semicolon -65\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX a g -10\r\nKPX a gbreve -10\r\nKPX a gcommaaccent -10\r\nKPX aacute g -10\r\nKPX aacute gbreve -10\r\nKPX aacute gcommaaccent -10\r\nKPX abreve g -10\r\nKPX abreve gbreve -10\r\nKPX abreve gcommaaccent -10\r\nKPX acircumflex g -10\r\nKPX acircumflex gbreve -10\r\nKPX acircumflex gcommaaccent -10\r\nKPX adieresis g -10\r\nKPX adieresis gbreve -10\r\nKPX adieresis gcommaaccent -10\r\nKPX agrave g -10\r\nKPX agrave gbreve -10\r\nKPX agrave gcommaaccent -10\r\nKPX amacron g -10\r\nKPX amacron gbreve -10\r\nKPX amacron gcommaaccent -10\r\nKPX aogonek g -10\r\nKPX aogonek gbreve -10\r\nKPX aogonek gcommaaccent -10\r\nKPX aring g -10\r\nKPX aring gbreve -10\r\nKPX aring gcommaaccent -10\r\nKPX atilde g -10\r\nKPX atilde gbreve -10\r\nKPX atilde gcommaaccent -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX c h -15\r\nKPX c k -20\r\nKPX c kcommaaccent -20\r\nKPX cacute h -15\r\nKPX cacute k -20\r\nKPX cacute kcommaaccent -20\r\nKPX ccaron h -15\r\nKPX ccaron k -20\r\nKPX ccaron kcommaaccent -20\r\nKPX ccedilla h -15\r\nKPX ccedilla k -20\r\nKPX ccedilla kcommaaccent -20\r\nKPX comma quotedblright -140\r\nKPX comma quoteright -140\r\nKPX e comma -10\r\nKPX e g -40\r\nKPX e gbreve -40\r\nKPX e gcommaaccent -40\r\nKPX e period -15\r\nKPX e v -15\r\nKPX e w -15\r\nKPX e x -20\r\nKPX e y -30\r\nKPX e yacute -30\r\nKPX e ydieresis -30\r\nKPX eacute comma -10\r\nKPX eacute g -40\r\nKPX eacute gbreve -40\r\nKPX eacute gcommaaccent -40\r\nKPX eacute period -15\r\nKPX eacute v -15\r\nKPX eacute w -15\r\nKPX eacute x -20\r\nKPX eacute y -30\r\nKPX eacute yacute -30\r\nKPX eacute ydieresis -30\r\nKPX ecaron comma -10\r\nKPX ecaron g -40\r\nKPX ecaron gbreve -40\r\nKPX ecaron gcommaaccent -40\r\nKPX ecaron period -15\r\nKPX ecaron v -15\r\nKPX ecaron w -15\r\nKPX ecaron x -20\r\nKPX ecaron y -30\r\nKPX ecaron yacute -30\r\nKPX ecaron ydieresis -30\r\nKPX ecircumflex comma -10\r\nKPX ecircumflex g -40\r\nKPX ecircumflex gbreve -40\r\nKPX ecircumflex gcommaaccent -40\r\nKPX ecircumflex period -15\r\nKPX ecircumflex v -15\r\nKPX ecircumflex w -15\r\nKPX ecircumflex x -20\r\nKPX ecircumflex y -30\r\nKPX ecircumflex yacute -30\r\nKPX ecircumflex ydieresis -30\r\nKPX edieresis comma -10\r\nKPX edieresis g -40\r\nKPX edieresis gbreve -40\r\nKPX edieresis gcommaaccent -40\r\nKPX edieresis period -15\r\nKPX edieresis v -15\r\nKPX edieresis w -15\r\nKPX edieresis x -20\r\nKPX edieresis y -30\r\nKPX edieresis yacute -30\r\nKPX edieresis ydieresis -30\r\nKPX edotaccent comma -10\r\nKPX edotaccent g -40\r\nKPX edotaccent gbreve -40\r\nKPX edotaccent gcommaaccent -40\r\nKPX edotaccent period -15\r\nKPX edotaccent v -15\r\nKPX edotaccent w -15\r\nKPX edotaccent x -20\r\nKPX edotaccent y -30\r\nKPX edotaccent yacute -30\r\nKPX edotaccent ydieresis -30\r\nKPX egrave comma -10\r\nKPX egrave g -40\r\nKPX egrave gbreve -40\r\nKPX egrave gcommaaccent -40\r\nKPX egrave period -15\r\nKPX egrave v -15\r\nKPX egrave w -15\r\nKPX egrave x -20\r\nKPX egrave y -30\r\nKPX egrave yacute -30\r\nKPX egrave ydieresis -30\r\nKPX emacron comma -10\r\nKPX emacron g -40\r\nKPX emacron gbreve -40\r\nKPX emacron gcommaaccent -40\r\nKPX emacron period -15\r\nKPX emacron v -15\r\nKPX emacron w -15\r\nKPX emacron x -20\r\nKPX emacron y -30\r\nKPX emacron yacute -30\r\nKPX emacron ydieresis -30\r\nKPX eogonek comma -10\r\nKPX eogonek g -40\r\nKPX eogonek gbreve -40\r\nKPX eogonek gcommaaccent -40\r\nKPX eogonek period -15\r\nKPX eogonek v -15\r\nKPX eogonek w -15\r\nKPX eogonek x -20\r\nKPX eogonek y -30\r\nKPX eogonek yacute -30\r\nKPX eogonek ydieresis -30\r\nKPX f comma -10\r\nKPX f dotlessi -60\r\nKPX f f -18\r\nKPX f i -20\r\nKPX f iogonek -20\r\nKPX f period -15\r\nKPX f quoteright 92\r\nKPX g comma -10\r\nKPX g e -10\r\nKPX g eacute -10\r\nKPX g ecaron -10\r\nKPX g ecircumflex -10\r\nKPX g edieresis -10\r\nKPX g edotaccent -10\r\nKPX g egrave -10\r\nKPX g emacron -10\r\nKPX g eogonek -10\r\nKPX g g -10\r\nKPX g gbreve -10\r\nKPX g gcommaaccent -10\r\nKPX g period -15\r\nKPX gbreve comma -10\r\nKPX gbreve e -10\r\nKPX gbreve eacute -10\r\nKPX gbreve ecaron -10\r\nKPX gbreve ecircumflex -10\r\nKPX gbreve edieresis -10\r\nKPX gbreve edotaccent -10\r\nKPX gbreve egrave -10\r\nKPX gbreve emacron -10\r\nKPX gbreve eogonek -10\r\nKPX gbreve g -10\r\nKPX gbreve gbreve -10\r\nKPX gbreve gcommaaccent -10\r\nKPX gbreve period -15\r\nKPX gcommaaccent comma -10\r\nKPX gcommaaccent e -10\r\nKPX gcommaaccent eacute -10\r\nKPX gcommaaccent ecaron -10\r\nKPX gcommaaccent ecircumflex -10\r\nKPX gcommaaccent edieresis -10\r\nKPX gcommaaccent edotaccent -10\r\nKPX gcommaaccent egrave -10\r\nKPX gcommaaccent emacron -10\r\nKPX gcommaaccent eogonek -10\r\nKPX gcommaaccent g -10\r\nKPX gcommaaccent gbreve -10\r\nKPX gcommaaccent gcommaaccent -10\r\nKPX gcommaaccent period -15\r\nKPX k e -10\r\nKPX k eacute -10\r\nKPX k ecaron -10\r\nKPX k ecircumflex -10\r\nKPX k edieresis -10\r\nKPX k edotaccent -10\r\nKPX k egrave -10\r\nKPX k emacron -10\r\nKPX k eogonek -10\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX k y -10\r\nKPX k yacute -10\r\nKPX k ydieresis -10\r\nKPX kcommaaccent e -10\r\nKPX kcommaaccent eacute -10\r\nKPX kcommaaccent ecaron -10\r\nKPX kcommaaccent ecircumflex -10\r\nKPX kcommaaccent edieresis -10\r\nKPX kcommaaccent edotaccent -10\r\nKPX kcommaaccent egrave -10\r\nKPX kcommaaccent emacron -10\r\nKPX kcommaaccent eogonek -10\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX kcommaaccent y -10\r\nKPX kcommaaccent yacute -10\r\nKPX kcommaaccent ydieresis -10\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o g -10\r\nKPX o gbreve -10\r\nKPX o gcommaaccent -10\r\nKPX o v -10\r\nKPX oacute g -10\r\nKPX oacute gbreve -10\r\nKPX oacute gcommaaccent -10\r\nKPX oacute v -10\r\nKPX ocircumflex g -10\r\nKPX ocircumflex gbreve -10\r\nKPX ocircumflex gcommaaccent -10\r\nKPX ocircumflex v -10\r\nKPX odieresis g -10\r\nKPX odieresis gbreve -10\r\nKPX odieresis gcommaaccent -10\r\nKPX odieresis v -10\r\nKPX ograve g -10\r\nKPX ograve gbreve -10\r\nKPX ograve gcommaaccent -10\r\nKPX ograve v -10\r\nKPX ohungarumlaut g -10\r\nKPX ohungarumlaut gbreve -10\r\nKPX ohungarumlaut gcommaaccent -10\r\nKPX ohungarumlaut v -10\r\nKPX omacron g -10\r\nKPX omacron gbreve -10\r\nKPX omacron gcommaaccent -10\r\nKPX omacron v -10\r\nKPX oslash g -10\r\nKPX oslash gbreve -10\r\nKPX oslash gcommaaccent -10\r\nKPX oslash v -10\r\nKPX otilde g -10\r\nKPX otilde gbreve -10\r\nKPX otilde gcommaaccent -10\r\nKPX otilde v -10\r\nKPX period quotedblright -140\r\nKPX period quoteright -140\r\nKPX quoteleft quoteleft -111\r\nKPX quoteright d -25\r\nKPX quoteright dcroat -25\r\nKPX quoteright quoteright -111\r\nKPX quoteright r -25\r\nKPX quoteright racute -25\r\nKPX quoteright rcaron -25\r\nKPX quoteright rcommaaccent -25\r\nKPX quoteright s -40\r\nKPX quoteright sacute -40\r\nKPX quoteright scaron -40\r\nKPX quoteright scedilla -40\r\nKPX quoteright scommaaccent -40\r\nKPX quoteright space -111\r\nKPX quoteright t -30\r\nKPX quoteright tcommaaccent -30\r\nKPX quoteright v -10\r\nKPX r a -15\r\nKPX r aacute -15\r\nKPX r abreve -15\r\nKPX r acircumflex -15\r\nKPX r adieresis -15\r\nKPX r agrave -15\r\nKPX r amacron -15\r\nKPX r aogonek -15\r\nKPX r aring -15\r\nKPX r atilde -15\r\nKPX r c -37\r\nKPX r cacute -37\r\nKPX r ccaron -37\r\nKPX r ccedilla -37\r\nKPX r comma -111\r\nKPX r d -37\r\nKPX r dcroat -37\r\nKPX r e -37\r\nKPX r eacute -37\r\nKPX r ecaron -37\r\nKPX r ecircumflex -37\r\nKPX r edieresis -37\r\nKPX r edotaccent -37\r\nKPX r egrave -37\r\nKPX r emacron -37\r\nKPX r eogonek -37\r\nKPX r g -37\r\nKPX r gbreve -37\r\nKPX r gcommaaccent -37\r\nKPX r hyphen -20\r\nKPX r o -45\r\nKPX r oacute -45\r\nKPX r ocircumflex -45\r\nKPX r odieresis -45\r\nKPX r ograve -45\r\nKPX r ohungarumlaut -45\r\nKPX r omacron -45\r\nKPX r oslash -45\r\nKPX r otilde -45\r\nKPX r period -111\r\nKPX r q -37\r\nKPX r s -10\r\nKPX r sacute -10\r\nKPX r scaron -10\r\nKPX r scedilla -10\r\nKPX r scommaaccent -10\r\nKPX racute a -15\r\nKPX racute aacute -15\r\nKPX racute abreve -15\r\nKPX racute acircumflex -15\r\nKPX racute adieresis -15\r\nKPX racute agrave -15\r\nKPX racute amacron -15\r\nKPX racute aogonek -15\r\nKPX racute aring -15\r\nKPX racute atilde -15\r\nKPX racute c -37\r\nKPX racute cacute -37\r\nKPX racute ccaron -37\r\nKPX racute ccedilla -37\r\nKPX racute comma -111\r\nKPX racute d -37\r\nKPX racute dcroat -37\r\nKPX racute e -37\r\nKPX racute eacute -37\r\nKPX racute ecaron -37\r\nKPX racute ecircumflex -37\r\nKPX racute edieresis -37\r\nKPX racute edotaccent -37\r\nKPX racute egrave -37\r\nKPX racute emacron -37\r\nKPX racute eogonek -37\r\nKPX racute g -37\r\nKPX racute gbreve -37\r\nKPX racute gcommaaccent -37\r\nKPX racute hyphen -20\r\nKPX racute o -45\r\nKPX racute oacute -45\r\nKPX racute ocircumflex -45\r\nKPX racute odieresis -45\r\nKPX racute ograve -45\r\nKPX racute ohungarumlaut -45\r\nKPX racute omacron -45\r\nKPX racute oslash -45\r\nKPX racute otilde -45\r\nKPX racute period -111\r\nKPX racute q -37\r\nKPX racute s -10\r\nKPX racute sacute -10\r\nKPX racute scaron -10\r\nKPX racute scedilla -10\r\nKPX racute scommaaccent -10\r\nKPX rcaron a -15\r\nKPX rcaron aacute -15\r\nKPX rcaron abreve -15\r\nKPX rcaron acircumflex -15\r\nKPX rcaron adieresis -15\r\nKPX rcaron agrave -15\r\nKPX rcaron amacron -15\r\nKPX rcaron aogonek -15\r\nKPX rcaron aring -15\r\nKPX rcaron atilde -15\r\nKPX rcaron c -37\r\nKPX rcaron cacute -37\r\nKPX rcaron ccaron -37\r\nKPX rcaron ccedilla -37\r\nKPX rcaron comma -111\r\nKPX rcaron d -37\r\nKPX rcaron dcroat -37\r\nKPX rcaron e -37\r\nKPX rcaron eacute -37\r\nKPX rcaron ecaron -37\r\nKPX rcaron ecircumflex -37\r\nKPX rcaron edieresis -37\r\nKPX rcaron edotaccent -37\r\nKPX rcaron egrave -37\r\nKPX rcaron emacron -37\r\nKPX rcaron eogonek -37\r\nKPX rcaron g -37\r\nKPX rcaron gbreve -37\r\nKPX rcaron gcommaaccent -37\r\nKPX rcaron hyphen -20\r\nKPX rcaron o -45\r\nKPX rcaron oacute -45\r\nKPX rcaron ocircumflex -45\r\nKPX rcaron odieresis -45\r\nKPX rcaron ograve -45\r\nKPX rcaron ohungarumlaut -45\r\nKPX rcaron omacron -45\r\nKPX rcaron oslash -45\r\nKPX rcaron otilde -45\r\nKPX rcaron period -111\r\nKPX rcaron q -37\r\nKPX rcaron s -10\r\nKPX rcaron sacute -10\r\nKPX rcaron scaron -10\r\nKPX rcaron scedilla -10\r\nKPX rcaron scommaaccent -10\r\nKPX rcommaaccent a -15\r\nKPX rcommaaccent aacute -15\r\nKPX rcommaaccent abreve -15\r\nKPX rcommaaccent acircumflex -15\r\nKPX rcommaaccent adieresis -15\r\nKPX rcommaaccent agrave -15\r\nKPX rcommaaccent amacron -15\r\nKPX rcommaaccent aogonek -15\r\nKPX rcommaaccent aring -15\r\nKPX rcommaaccent atilde -15\r\nKPX rcommaaccent c -37\r\nKPX rcommaaccent cacute -37\r\nKPX rcommaaccent ccaron -37\r\nKPX rcommaaccent ccedilla -37\r\nKPX rcommaaccent comma -111\r\nKPX rcommaaccent d -37\r\nKPX rcommaaccent dcroat -37\r\nKPX rcommaaccent e -37\r\nKPX rcommaaccent eacute -37\r\nKPX rcommaaccent ecaron -37\r\nKPX rcommaaccent ecircumflex -37\r\nKPX rcommaaccent edieresis -37\r\nKPX rcommaaccent edotaccent -37\r\nKPX rcommaaccent egrave -37\r\nKPX rcommaaccent emacron -37\r\nKPX rcommaaccent eogonek -37\r\nKPX rcommaaccent g -37\r\nKPX rcommaaccent gbreve -37\r\nKPX rcommaaccent gcommaaccent -37\r\nKPX rcommaaccent hyphen -20\r\nKPX rcommaaccent o -45\r\nKPX rcommaaccent oacute -45\r\nKPX rcommaaccent ocircumflex -45\r\nKPX rcommaaccent odieresis -45\r\nKPX rcommaaccent ograve -45\r\nKPX rcommaaccent ohungarumlaut -45\r\nKPX rcommaaccent omacron -45\r\nKPX rcommaaccent oslash -45\r\nKPX rcommaaccent otilde -45\r\nKPX rcommaaccent period -111\r\nKPX rcommaaccent q -37\r\nKPX rcommaaccent s -10\r\nKPX rcommaaccent sacute -10\r\nKPX rcommaaccent scaron -10\r\nKPX rcommaaccent scedilla -10\r\nKPX rcommaaccent scommaaccent -10\r\nKPX space A -18\r\nKPX space Aacute -18\r\nKPX space Abreve -18\r\nKPX space Acircumflex -18\r\nKPX space Adieresis -18\r\nKPX space Agrave -18\r\nKPX space Amacron -18\r\nKPX space Aogonek -18\r\nKPX space Aring -18\r\nKPX space Atilde -18\r\nKPX space T -18\r\nKPX space Tcaron -18\r\nKPX space Tcommaaccent -18\r\nKPX space V -35\r\nKPX space W -40\r\nKPX space Y -75\r\nKPX space Yacute -75\r\nKPX space Ydieresis -75\r\nKPX v comma -74\r\nKPX v period -74\r\nKPX w comma -74\r\nKPX w period -74\r\nKPX y comma -55\r\nKPX y period -55\r\nKPX yacute comma -55\r\nKPX yacute period -55\r\nKPX ydieresis comma -55\r\nKPX ydieresis period -55\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - 'Times-BoldItalic'() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 13:04:06 1997\r\nComment UniqueID 43066\r\nComment VMusage 45874 56899\r\nFontName Times-BoldItalic\r\nFullName Times Bold Italic\r\nFamilyName Times\r\nWeight Bold\r\nItalicAngle -15\r\nIsFixedPitch false\r\nCharacterSet ExtendedRoman\r\nFontBBox -200 -218 996 921 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.\r\nEncodingScheme AdobeStandardEncoding\r\nCapHeight 669\r\nXHeight 462\r\nAscender 683\r\nDescender -217\r\nStdHW 42\r\nStdVW 121\r\nStartCharMetrics 315\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ;\r\nC 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ;\r\nC 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ;\r\nC 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ;\r\nC 37 ; WX 833 ; N percent ; B 39 -10 793 692 ;\r\nC 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ;\r\nC 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ;\r\nC 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ;\r\nC 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ;\r\nC 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ;\r\nC 43 ; WX 570 ; N plus ; B 33 0 537 506 ;\r\nC 44 ; WX 250 ; N comma ; B -60 -182 144 134 ;\r\nC 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ;\r\nC 46 ; WX 250 ; N period ; B -9 -13 139 135 ;\r\nC 47 ; WX 278 ; N slash ; B -64 -18 342 685 ;\r\nC 48 ; WX 500 ; N zero ; B 17 -14 477 683 ;\r\nC 49 ; WX 500 ; N one ; B 5 0 419 683 ;\r\nC 50 ; WX 500 ; N two ; B -27 0 446 683 ;\r\nC 51 ; WX 500 ; N three ; B -15 -13 450 683 ;\r\nC 52 ; WX 500 ; N four ; B -15 0 503 683 ;\r\nC 53 ; WX 500 ; N five ; B -11 -13 487 669 ;\r\nC 54 ; WX 500 ; N six ; B 23 -15 509 679 ;\r\nC 55 ; WX 500 ; N seven ; B 52 0 525 669 ;\r\nC 56 ; WX 500 ; N eight ; B 3 -13 476 683 ;\r\nC 57 ; WX 500 ; N nine ; B -12 -10 475 683 ;\r\nC 58 ; WX 333 ; N colon ; B 23 -13 264 459 ;\r\nC 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ;\r\nC 60 ; WX 570 ; N less ; B 31 -8 539 514 ;\r\nC 61 ; WX 570 ; N equal ; B 33 107 537 399 ;\r\nC 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;\r\nC 63 ; WX 500 ; N question ; B 79 -13 470 684 ;\r\nC 64 ; WX 832 ; N at ; B 63 -18 770 685 ;\r\nC 65 ; WX 667 ; N A ; B -67 0 593 683 ;\r\nC 66 ; WX 667 ; N B ; B -24 0 624 669 ;\r\nC 67 ; WX 667 ; N C ; B 32 -18 677 685 ;\r\nC 68 ; WX 722 ; N D ; B -46 0 685 669 ;\r\nC 69 ; WX 667 ; N E ; B -27 0 653 669 ;\r\nC 70 ; WX 667 ; N F ; B -13 0 660 669 ;\r\nC 71 ; WX 722 ; N G ; B 21 -18 706 685 ;\r\nC 72 ; WX 778 ; N H ; B -24 0 799 669 ;\r\nC 73 ; WX 389 ; N I ; B -32 0 406 669 ;\r\nC 74 ; WX 500 ; N J ; B -46 -99 524 669 ;\r\nC 75 ; WX 667 ; N K ; B -21 0 702 669 ;\r\nC 76 ; WX 611 ; N L ; B -22 0 590 669 ;\r\nC 77 ; WX 889 ; N M ; B -29 -12 917 669 ;\r\nC 78 ; WX 722 ; N N ; B -27 -15 748 669 ;\r\nC 79 ; WX 722 ; N O ; B 27 -18 691 685 ;\r\nC 80 ; WX 611 ; N P ; B -27 0 613 669 ;\r\nC 81 ; WX 722 ; N Q ; B 27 -208 691 685 ;\r\nC 82 ; WX 667 ; N R ; B -29 0 623 669 ;\r\nC 83 ; WX 556 ; N S ; B 2 -18 526 685 ;\r\nC 84 ; WX 611 ; N T ; B 50 0 650 669 ;\r\nC 85 ; WX 722 ; N U ; B 67 -18 744 669 ;\r\nC 86 ; WX 667 ; N V ; B 65 -18 715 669 ;\r\nC 87 ; WX 889 ; N W ; B 65 -18 940 669 ;\r\nC 88 ; WX 667 ; N X ; B -24 0 694 669 ;\r\nC 89 ; WX 611 ; N Y ; B 73 0 659 669 ;\r\nC 90 ; WX 611 ; N Z ; B -11 0 590 669 ;\r\nC 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ;\r\nC 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ;\r\nC 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ;\r\nC 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ;\r\nC 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;\r\nC 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ;\r\nC 97 ; WX 500 ; N a ; B -21 -14 455 462 ;\r\nC 98 ; WX 500 ; N b ; B -14 -13 444 699 ;\r\nC 99 ; WX 444 ; N c ; B -5 -13 392 462 ;\r\nC 100 ; WX 500 ; N d ; B -21 -13 517 699 ;\r\nC 101 ; WX 444 ; N e ; B 5 -13 398 462 ;\r\nC 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ;\r\nC 103 ; WX 500 ; N g ; B -52 -203 478 462 ;\r\nC 104 ; WX 556 ; N h ; B -13 -9 498 699 ;\r\nC 105 ; WX 278 ; N i ; B 2 -9 263 684 ;\r\nC 106 ; WX 278 ; N j ; B -189 -207 279 684 ;\r\nC 107 ; WX 500 ; N k ; B -23 -8 483 699 ;\r\nC 108 ; WX 278 ; N l ; B 2 -9 290 699 ;\r\nC 109 ; WX 778 ; N m ; B -14 -9 722 462 ;\r\nC 110 ; WX 556 ; N n ; B -6 -9 493 462 ;\r\nC 111 ; WX 500 ; N o ; B -3 -13 441 462 ;\r\nC 112 ; WX 500 ; N p ; B -120 -205 446 462 ;\r\nC 113 ; WX 500 ; N q ; B 1 -205 471 462 ;\r\nC 114 ; WX 389 ; N r ; B -21 0 389 462 ;\r\nC 115 ; WX 389 ; N s ; B -19 -13 333 462 ;\r\nC 116 ; WX 278 ; N t ; B -11 -9 281 594 ;\r\nC 117 ; WX 556 ; N u ; B 15 -9 492 462 ;\r\nC 118 ; WX 444 ; N v ; B 16 -13 401 462 ;\r\nC 119 ; WX 667 ; N w ; B 16 -13 614 462 ;\r\nC 120 ; WX 500 ; N x ; B -46 -13 469 462 ;\r\nC 121 ; WX 444 ; N y ; B -94 -205 392 462 ;\r\nC 122 ; WX 389 ; N z ; B -43 -78 368 449 ;\r\nC 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ;\r\nC 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;\r\nC 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ;\r\nC 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ;\r\nC 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ;\r\nC 162 ; WX 500 ; N cent ; B 42 -143 439 576 ;\r\nC 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ;\r\nC 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ;\r\nC 165 ; WX 500 ; N yen ; B 33 0 628 669 ;\r\nC 166 ; WX 500 ; N florin ; B -87 -156 537 707 ;\r\nC 167 ; WX 500 ; N section ; B 36 -143 459 685 ;\r\nC 168 ; WX 500 ; N currency ; B -26 34 526 586 ;\r\nC 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ;\r\nC 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ;\r\nC 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ;\r\nC 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ;\r\nC 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ;\r\nC 174 ; WX 556 ; N fi ; B -188 -205 514 703 ;\r\nC 175 ; WX 556 ; N fl ; B -186 -205 553 704 ;\r\nC 177 ; WX 500 ; N endash ; B -40 178 477 269 ;\r\nC 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ;\r\nC 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ;\r\nC 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ;\r\nC 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ;\r\nC 183 ; WX 350 ; N bullet ; B 0 175 350 525 ;\r\nC 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ;\r\nC 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ;\r\nC 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ;\r\nC 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ;\r\nC 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ;\r\nC 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ;\r\nC 193 ; WX 333 ; N grave ; B 85 516 297 697 ;\r\nC 194 ; WX 333 ; N acute ; B 139 516 379 697 ;\r\nC 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ;\r\nC 196 ; WX 333 ; N tilde ; B 48 536 407 655 ;\r\nC 197 ; WX 333 ; N macron ; B 51 553 393 623 ;\r\nC 198 ; WX 333 ; N breve ; B 71 516 387 678 ;\r\nC 199 ; WX 333 ; N dotaccent ; B 163 550 298 684 ;\r\nC 200 ; WX 333 ; N dieresis ; B 55 550 402 684 ;\r\nC 202 ; WX 333 ; N ring ; B 127 516 340 729 ;\r\nC 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ;\r\nC 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ;\r\nC 206 ; WX 333 ; N ogonek ; B 15 -183 244 34 ;\r\nC 207 ; WX 333 ; N caron ; B 79 516 411 690 ;\r\nC 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ;\r\nC 225 ; WX 944 ; N AE ; B -64 0 918 669 ;\r\nC 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ;\r\nC 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ;\r\nC 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ;\r\nC 234 ; WX 944 ; N OE ; B 23 -8 946 677 ;\r\nC 235 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ;\r\nC 241 ; WX 722 ; N ae ; B -5 -13 673 462 ;\r\nC 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ;\r\nC 248 ; WX 278 ; N lslash ; B -7 -9 307 699 ;\r\nC 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ;\r\nC 250 ; WX 722 ; N oe ; B 6 -13 674 462 ;\r\nC 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ;\r\nC -1 ; WX 389 ; N Idieresis ; B -32 0 450 862 ;\r\nC -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ;\r\nC -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ;\r\nC -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ;\r\nC -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ;\r\nC -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ;\r\nC -1 ; WX 570 ; N divide ; B 33 -29 537 535 ;\r\nC -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ;\r\nC -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ;\r\nC -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ;\r\nC -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ;\r\nC -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ;\r\nC -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ;\r\nC -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ;\r\nC -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ;\r\nC -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ;\r\nC -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ;\r\nC -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ;\r\nC -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ;\r\nC -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ;\r\nC -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ;\r\nC -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ;\r\nC -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ;\r\nC -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ;\r\nC -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ;\r\nC -1 ; WX 500 ; N aring ; B -21 -14 455 729 ;\r\nC -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ;\r\nC -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ;\r\nC -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ;\r\nC -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ;\r\nC -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ;\r\nC -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ;\r\nC -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ;\r\nC -1 ; WX 389 ; N scaron ; B -19 -13 424 690 ;\r\nC -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ;\r\nC -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ;\r\nC -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;\r\nC -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ;\r\nC -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ;\r\nC -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ;\r\nC -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ;\r\nC -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ;\r\nC -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ;\r\nC -1 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ;\r\nC -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ;\r\nC -1 ; WX 611 ; N Thorn ; B -27 0 573 669 ;\r\nC -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ;\r\nC -1 ; WX 667 ; N Racute ; B -29 0 623 904 ;\r\nC -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ;\r\nC -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ;\r\nC -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ;\r\nC -1 ; WX 556 ; N uring ; B 15 -9 492 729 ;\r\nC -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ;\r\nC -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ;\r\nC -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ;\r\nC -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ;\r\nC -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;\r\nC -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ;\r\nC -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ;\r\nC -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;\r\nC -1 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ;\r\nC -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ;\r\nC -1 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ;\r\nC -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ;\r\nC -1 ; WX 500 ; N adieresis ; B -21 -14 476 655 ;\r\nC -1 ; WX 444 ; N edieresis ; B 5 -13 448 655 ;\r\nC -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ;\r\nC -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ;\r\nC -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ;\r\nC -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ;\r\nC -1 ; WX 389 ; N Iacute ; B -32 0 432 904 ;\r\nC -1 ; WX 570 ; N plusminus ; B 33 0 537 506 ;\r\nC -1 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;\r\nC -1 ; WX 747 ; N registered ; B 30 -18 718 685 ;\r\nC -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ;\r\nC -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ;\r\nC -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;\r\nC -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ;\r\nC -1 ; WX 389 ; N racute ; B -21 0 407 697 ;\r\nC -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ;\r\nC -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ;\r\nC -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ;\r\nC -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;\r\nC -1 ; WX 722 ; N Eth ; B -31 0 700 669 ;\r\nC -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ;\r\nC -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ;\r\nC -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ;\r\nC -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ;\r\nC -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ;\r\nC -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ;\r\nC -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ;\r\nC -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ;\r\nC -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ;\r\nC -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ;\r\nC -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ;\r\nC -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ;\r\nC -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ;\r\nC -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ;\r\nC -1 ; WX 278 ; N idieresis ; B 2 -9 364 655 ;\r\nC -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ;\r\nC -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ;\r\nC -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ;\r\nC -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ;\r\nC -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ;\r\nC -1 ; WX 576 ; N mu ; B -60 -207 516 449 ;\r\nC -1 ; WX 278 ; N igrave ; B 2 -9 259 697 ;\r\nC -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ;\r\nC -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ;\r\nC -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ;\r\nC -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ;\r\nC -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ;\r\nC -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ;\r\nC -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ;\r\nC -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ;\r\nC -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ;\r\nC -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ;\r\nC -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ;\r\nC -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ;\r\nC -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ;\r\nC -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ;\r\nC -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;\r\nC -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ;\r\nC -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ;\r\nC -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ;\r\nC -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ;\r\nC -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ;\r\nC -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ;\r\nC -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ;\r\nC -1 ; WX 556 ; N Scaron ; B 2 -18 553 897 ;\r\nC -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ;\r\nC -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ;\r\nC -1 ; WX 400 ; N degree ; B 83 397 369 683 ;\r\nC -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ;\r\nC -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ;\r\nC -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ;\r\nC -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;\r\nC -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ;\r\nC -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ;\r\nC -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ;\r\nC -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ;\r\nC -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ;\r\nC -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ;\r\nC -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ;\r\nC -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ;\r\nC -1 ; WX 667 ; N Aring ; B -67 0 593 921 ;\r\nC -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ;\r\nC -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ;\r\nC -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ;\r\nC -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ;\r\nC -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ;\r\nC -1 ; WX 606 ; N minus ; B 51 209 555 297 ;\r\nC -1 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ;\r\nC -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ;\r\nC -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ;\r\nC -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ;\r\nC -1 ; WX 500 ; N odieresis ; B -3 -13 471 655 ;\r\nC -1 ; WX 556 ; N udieresis ; B 15 -9 499 655 ;\r\nC -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;\r\nC -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ;\r\nC -1 ; WX 500 ; N eth ; B -3 -13 454 699 ;\r\nC -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ;\r\nC -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ;\r\nC -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ;\r\nC -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ;\r\nC -1 ; WX 500 ; N Euro ; B 0 0 0 0 ;\r\nEndCharMetrics\r\nStartKernData\r\nStartKernPairs 2038\r\nKPX A C -65\r\nKPX A Cacute -65\r\nKPX A Ccaron -65\r\nKPX A Ccedilla -65\r\nKPX A G -60\r\nKPX A Gbreve -60\r\nKPX A Gcommaaccent -60\r\nKPX A O -50\r\nKPX A Oacute -50\r\nKPX A Ocircumflex -50\r\nKPX A Odieresis -50\r\nKPX A Ograve -50\r\nKPX A Ohungarumlaut -50\r\nKPX A Omacron -50\r\nKPX A Oslash -50\r\nKPX A Otilde -50\r\nKPX A Q -55\r\nKPX A T -55\r\nKPX A Tcaron -55\r\nKPX A Tcommaaccent -55\r\nKPX A U -50\r\nKPX A Uacute -50\r\nKPX A Ucircumflex -50\r\nKPX A Udieresis -50\r\nKPX A Ugrave -50\r\nKPX A Uhungarumlaut -50\r\nKPX A Umacron -50\r\nKPX A Uogonek -50\r\nKPX A Uring -50\r\nKPX A V -95\r\nKPX A W -100\r\nKPX A Y -70\r\nKPX A Yacute -70\r\nKPX A Ydieresis -70\r\nKPX A quoteright -74\r\nKPX A u -30\r\nKPX A uacute -30\r\nKPX A ucircumflex -30\r\nKPX A udieresis -30\r\nKPX A ugrave -30\r\nKPX A uhungarumlaut -30\r\nKPX A umacron -30\r\nKPX A uogonek -30\r\nKPX A uring -30\r\nKPX A v -74\r\nKPX A w -74\r\nKPX A y -74\r\nKPX A yacute -74\r\nKPX A ydieresis -74\r\nKPX Aacute C -65\r\nKPX Aacute Cacute -65\r\nKPX Aacute Ccaron -65\r\nKPX Aacute Ccedilla -65\r\nKPX Aacute G -60\r\nKPX Aacute Gbreve -60\r\nKPX Aacute Gcommaaccent -60\r\nKPX Aacute O -50\r\nKPX Aacute Oacute -50\r\nKPX Aacute Ocircumflex -50\r\nKPX Aacute Odieresis -50\r\nKPX Aacute Ograve -50\r\nKPX Aacute Ohungarumlaut -50\r\nKPX Aacute Omacron -50\r\nKPX Aacute Oslash -50\r\nKPX Aacute Otilde -50\r\nKPX Aacute Q -55\r\nKPX Aacute T -55\r\nKPX Aacute Tcaron -55\r\nKPX Aacute Tcommaaccent -55\r\nKPX Aacute U -50\r\nKPX Aacute Uacute -50\r\nKPX Aacute Ucircumflex -50\r\nKPX Aacute Udieresis -50\r\nKPX Aacute Ugrave -50\r\nKPX Aacute Uhungarumlaut -50\r\nKPX Aacute Umacron -50\r\nKPX Aacute Uogonek -50\r\nKPX Aacute Uring -50\r\nKPX Aacute V -95\r\nKPX Aacute W -100\r\nKPX Aacute Y -70\r\nKPX Aacute Yacute -70\r\nKPX Aacute Ydieresis -70\r\nKPX Aacute quoteright -74\r\nKPX Aacute u -30\r\nKPX Aacute uacute -30\r\nKPX Aacute ucircumflex -30\r\nKPX Aacute udieresis -30\r\nKPX Aacute ugrave -30\r\nKPX Aacute uhungarumlaut -30\r\nKPX Aacute umacron -30\r\nKPX Aacute uogonek -30\r\nKPX Aacute uring -30\r\nKPX Aacute v -74\r\nKPX Aacute w -74\r\nKPX Aacute y -74\r\nKPX Aacute yacute -74\r\nKPX Aacute ydieresis -74\r\nKPX Abreve C -65\r\nKPX Abreve Cacute -65\r\nKPX Abreve Ccaron -65\r\nKPX Abreve Ccedilla -65\r\nKPX Abreve G -60\r\nKPX Abreve Gbreve -60\r\nKPX Abreve Gcommaaccent -60\r\nKPX Abreve O -50\r\nKPX Abreve Oacute -50\r\nKPX Abreve Ocircumflex -50\r\nKPX Abreve Odieresis -50\r\nKPX Abreve Ograve -50\r\nKPX Abreve Ohungarumlaut -50\r\nKPX Abreve Omacron -50\r\nKPX Abreve Oslash -50\r\nKPX Abreve Otilde -50\r\nKPX Abreve Q -55\r\nKPX Abreve T -55\r\nKPX Abreve Tcaron -55\r\nKPX Abreve Tcommaaccent -55\r\nKPX Abreve U -50\r\nKPX Abreve Uacute -50\r\nKPX Abreve Ucircumflex -50\r\nKPX Abreve Udieresis -50\r\nKPX Abreve Ugrave -50\r\nKPX Abreve Uhungarumlaut -50\r\nKPX Abreve Umacron -50\r\nKPX Abreve Uogonek -50\r\nKPX Abreve Uring -50\r\nKPX Abreve V -95\r\nKPX Abreve W -100\r\nKPX Abreve Y -70\r\nKPX Abreve Yacute -70\r\nKPX Abreve Ydieresis -70\r\nKPX Abreve quoteright -74\r\nKPX Abreve u -30\r\nKPX Abreve uacute -30\r\nKPX Abreve ucircumflex -30\r\nKPX Abreve udieresis -30\r\nKPX Abreve ugrave -30\r\nKPX Abreve uhungarumlaut -30\r\nKPX Abreve umacron -30\r\nKPX Abreve uogonek -30\r\nKPX Abreve uring -30\r\nKPX Abreve v -74\r\nKPX Abreve w -74\r\nKPX Abreve y -74\r\nKPX Abreve yacute -74\r\nKPX Abreve ydieresis -74\r\nKPX Acircumflex C -65\r\nKPX Acircumflex Cacute -65\r\nKPX Acircumflex Ccaron -65\r\nKPX Acircumflex Ccedilla -65\r\nKPX Acircumflex G -60\r\nKPX Acircumflex Gbreve -60\r\nKPX Acircumflex Gcommaaccent -60\r\nKPX Acircumflex O -50\r\nKPX Acircumflex Oacute -50\r\nKPX Acircumflex Ocircumflex -50\r\nKPX Acircumflex Odieresis -50\r\nKPX Acircumflex Ograve -50\r\nKPX Acircumflex Ohungarumlaut -50\r\nKPX Acircumflex Omacron -50\r\nKPX Acircumflex Oslash -50\r\nKPX Acircumflex Otilde -50\r\nKPX Acircumflex Q -55\r\nKPX Acircumflex T -55\r\nKPX Acircumflex Tcaron -55\r\nKPX Acircumflex Tcommaaccent -55\r\nKPX Acircumflex U -50\r\nKPX Acircumflex Uacute -50\r\nKPX Acircumflex Ucircumflex -50\r\nKPX Acircumflex Udieresis -50\r\nKPX Acircumflex Ugrave -50\r\nKPX Acircumflex Uhungarumlaut -50\r\nKPX Acircumflex Umacron -50\r\nKPX Acircumflex Uogonek -50\r\nKPX Acircumflex Uring -50\r\nKPX Acircumflex V -95\r\nKPX Acircumflex W -100\r\nKPX Acircumflex Y -70\r\nKPX Acircumflex Yacute -70\r\nKPX Acircumflex Ydieresis -70\r\nKPX Acircumflex quoteright -74\r\nKPX Acircumflex u -30\r\nKPX Acircumflex uacute -30\r\nKPX Acircumflex ucircumflex -30\r\nKPX Acircumflex udieresis -30\r\nKPX Acircumflex ugrave -30\r\nKPX Acircumflex uhungarumlaut -30\r\nKPX Acircumflex umacron -30\r\nKPX Acircumflex uogonek -30\r\nKPX Acircumflex uring -30\r\nKPX Acircumflex v -74\r\nKPX Acircumflex w -74\r\nKPX Acircumflex y -74\r\nKPX Acircumflex yacute -74\r\nKPX Acircumflex ydieresis -74\r\nKPX Adieresis C -65\r\nKPX Adieresis Cacute -65\r\nKPX Adieresis Ccaron -65\r\nKPX Adieresis Ccedilla -65\r\nKPX Adieresis G -60\r\nKPX Adieresis Gbreve -60\r\nKPX Adieresis Gcommaaccent -60\r\nKPX Adieresis O -50\r\nKPX Adieresis Oacute -50\r\nKPX Adieresis Ocircumflex -50\r\nKPX Adieresis Odieresis -50\r\nKPX Adieresis Ograve -50\r\nKPX Adieresis Ohungarumlaut -50\r\nKPX Adieresis Omacron -50\r\nKPX Adieresis Oslash -50\r\nKPX Adieresis Otilde -50\r\nKPX Adieresis Q -55\r\nKPX Adieresis T -55\r\nKPX Adieresis Tcaron -55\r\nKPX Adieresis Tcommaaccent -55\r\nKPX Adieresis U -50\r\nKPX Adieresis Uacute -50\r\nKPX Adieresis Ucircumflex -50\r\nKPX Adieresis Udieresis -50\r\nKPX Adieresis Ugrave -50\r\nKPX Adieresis Uhungarumlaut -50\r\nKPX Adieresis Umacron -50\r\nKPX Adieresis Uogonek -50\r\nKPX Adieresis Uring -50\r\nKPX Adieresis V -95\r\nKPX Adieresis W -100\r\nKPX Adieresis Y -70\r\nKPX Adieresis Yacute -70\r\nKPX Adieresis Ydieresis -70\r\nKPX Adieresis quoteright -74\r\nKPX Adieresis u -30\r\nKPX Adieresis uacute -30\r\nKPX Adieresis ucircumflex -30\r\nKPX Adieresis udieresis -30\r\nKPX Adieresis ugrave -30\r\nKPX Adieresis uhungarumlaut -30\r\nKPX Adieresis umacron -30\r\nKPX Adieresis uogonek -30\r\nKPX Adieresis uring -30\r\nKPX Adieresis v -74\r\nKPX Adieresis w -74\r\nKPX Adieresis y -74\r\nKPX Adieresis yacute -74\r\nKPX Adieresis ydieresis -74\r\nKPX Agrave C -65\r\nKPX Agrave Cacute -65\r\nKPX Agrave Ccaron -65\r\nKPX Agrave Ccedilla -65\r\nKPX Agrave G -60\r\nKPX Agrave Gbreve -60\r\nKPX Agrave Gcommaaccent -60\r\nKPX Agrave O -50\r\nKPX Agrave Oacute -50\r\nKPX Agrave Ocircumflex -50\r\nKPX Agrave Odieresis -50\r\nKPX Agrave Ograve -50\r\nKPX Agrave Ohungarumlaut -50\r\nKPX Agrave Omacron -50\r\nKPX Agrave Oslash -50\r\nKPX Agrave Otilde -50\r\nKPX Agrave Q -55\r\nKPX Agrave T -55\r\nKPX Agrave Tcaron -55\r\nKPX Agrave Tcommaaccent -55\r\nKPX Agrave U -50\r\nKPX Agrave Uacute -50\r\nKPX Agrave Ucircumflex -50\r\nKPX Agrave Udieresis -50\r\nKPX Agrave Ugrave -50\r\nKPX Agrave Uhungarumlaut -50\r\nKPX Agrave Umacron -50\r\nKPX Agrave Uogonek -50\r\nKPX Agrave Uring -50\r\nKPX Agrave V -95\r\nKPX Agrave W -100\r\nKPX Agrave Y -70\r\nKPX Agrave Yacute -70\r\nKPX Agrave Ydieresis -70\r\nKPX Agrave quoteright -74\r\nKPX Agrave u -30\r\nKPX Agrave uacute -30\r\nKPX Agrave ucircumflex -30\r\nKPX Agrave udieresis -30\r\nKPX Agrave ugrave -30\r\nKPX Agrave uhungarumlaut -30\r\nKPX Agrave umacron -30\r\nKPX Agrave uogonek -30\r\nKPX Agrave uring -30\r\nKPX Agrave v -74\r\nKPX Agrave w -74\r\nKPX Agrave y -74\r\nKPX Agrave yacute -74\r\nKPX Agrave ydieresis -74\r\nKPX Amacron C -65\r\nKPX Amacron Cacute -65\r\nKPX Amacron Ccaron -65\r\nKPX Amacron Ccedilla -65\r\nKPX Amacron G -60\r\nKPX Amacron Gbreve -60\r\nKPX Amacron Gcommaaccent -60\r\nKPX Amacron O -50\r\nKPX Amacron Oacute -50\r\nKPX Amacron Ocircumflex -50\r\nKPX Amacron Odieresis -50\r\nKPX Amacron Ograve -50\r\nKPX Amacron Ohungarumlaut -50\r\nKPX Amacron Omacron -50\r\nKPX Amacron Oslash -50\r\nKPX Amacron Otilde -50\r\nKPX Amacron Q -55\r\nKPX Amacron T -55\r\nKPX Amacron Tcaron -55\r\nKPX Amacron Tcommaaccent -55\r\nKPX Amacron U -50\r\nKPX Amacron Uacute -50\r\nKPX Amacron Ucircumflex -50\r\nKPX Amacron Udieresis -50\r\nKPX Amacron Ugrave -50\r\nKPX Amacron Uhungarumlaut -50\r\nKPX Amacron Umacron -50\r\nKPX Amacron Uogonek -50\r\nKPX Amacron Uring -50\r\nKPX Amacron V -95\r\nKPX Amacron W -100\r\nKPX Amacron Y -70\r\nKPX Amacron Yacute -70\r\nKPX Amacron Ydieresis -70\r\nKPX Amacron quoteright -74\r\nKPX Amacron u -30\r\nKPX Amacron uacute -30\r\nKPX Amacron ucircumflex -30\r\nKPX Amacron udieresis -30\r\nKPX Amacron ugrave -30\r\nKPX Amacron uhungarumlaut -30\r\nKPX Amacron umacron -30\r\nKPX Amacron uogonek -30\r\nKPX Amacron uring -30\r\nKPX Amacron v -74\r\nKPX Amacron w -74\r\nKPX Amacron y -74\r\nKPX Amacron yacute -74\r\nKPX Amacron ydieresis -74\r\nKPX Aogonek C -65\r\nKPX Aogonek Cacute -65\r\nKPX Aogonek Ccaron -65\r\nKPX Aogonek Ccedilla -65\r\nKPX Aogonek G -60\r\nKPX Aogonek Gbreve -60\r\nKPX Aogonek Gcommaaccent -60\r\nKPX Aogonek O -50\r\nKPX Aogonek Oacute -50\r\nKPX Aogonek Ocircumflex -50\r\nKPX Aogonek Odieresis -50\r\nKPX Aogonek Ograve -50\r\nKPX Aogonek Ohungarumlaut -50\r\nKPX Aogonek Omacron -50\r\nKPX Aogonek Oslash -50\r\nKPX Aogonek Otilde -50\r\nKPX Aogonek Q -55\r\nKPX Aogonek T -55\r\nKPX Aogonek Tcaron -55\r\nKPX Aogonek Tcommaaccent -55\r\nKPX Aogonek U -50\r\nKPX Aogonek Uacute -50\r\nKPX Aogonek Ucircumflex -50\r\nKPX Aogonek Udieresis -50\r\nKPX Aogonek Ugrave -50\r\nKPX Aogonek Uhungarumlaut -50\r\nKPX Aogonek Umacron -50\r\nKPX Aogonek Uogonek -50\r\nKPX Aogonek Uring -50\r\nKPX Aogonek V -95\r\nKPX Aogonek W -100\r\nKPX Aogonek Y -70\r\nKPX Aogonek Yacute -70\r\nKPX Aogonek Ydieresis -70\r\nKPX Aogonek quoteright -74\r\nKPX Aogonek u -30\r\nKPX Aogonek uacute -30\r\nKPX Aogonek ucircumflex -30\r\nKPX Aogonek udieresis -30\r\nKPX Aogonek ugrave -30\r\nKPX Aogonek uhungarumlaut -30\r\nKPX Aogonek umacron -30\r\nKPX Aogonek uogonek -30\r\nKPX Aogonek uring -30\r\nKPX Aogonek v -74\r\nKPX Aogonek w -74\r\nKPX Aogonek y -34\r\nKPX Aogonek yacute -34\r\nKPX Aogonek ydieresis -34\r\nKPX Aring C -65\r\nKPX Aring Cacute -65\r\nKPX Aring Ccaron -65\r\nKPX Aring Ccedilla -65\r\nKPX Aring G -60\r\nKPX Aring Gbreve -60\r\nKPX Aring Gcommaaccent -60\r\nKPX Aring O -50\r\nKPX Aring Oacute -50\r\nKPX Aring Ocircumflex -50\r\nKPX Aring Odieresis -50\r\nKPX Aring Ograve -50\r\nKPX Aring Ohungarumlaut -50\r\nKPX Aring Omacron -50\r\nKPX Aring Oslash -50\r\nKPX Aring Otilde -50\r\nKPX Aring Q -55\r\nKPX Aring T -55\r\nKPX Aring Tcaron -55\r\nKPX Aring Tcommaaccent -55\r\nKPX Aring U -50\r\nKPX Aring Uacute -50\r\nKPX Aring Ucircumflex -50\r\nKPX Aring Udieresis -50\r\nKPX Aring Ugrave -50\r\nKPX Aring Uhungarumlaut -50\r\nKPX Aring Umacron -50\r\nKPX Aring Uogonek -50\r\nKPX Aring Uring -50\r\nKPX Aring V -95\r\nKPX Aring W -100\r\nKPX Aring Y -70\r\nKPX Aring Yacute -70\r\nKPX Aring Ydieresis -70\r\nKPX Aring quoteright -74\r\nKPX Aring u -30\r\nKPX Aring uacute -30\r\nKPX Aring ucircumflex -30\r\nKPX Aring udieresis -30\r\nKPX Aring ugrave -30\r\nKPX Aring uhungarumlaut -30\r\nKPX Aring umacron -30\r\nKPX Aring uogonek -30\r\nKPX Aring uring -30\r\nKPX Aring v -74\r\nKPX Aring w -74\r\nKPX Aring y -74\r\nKPX Aring yacute -74\r\nKPX Aring ydieresis -74\r\nKPX Atilde C -65\r\nKPX Atilde Cacute -65\r\nKPX Atilde Ccaron -65\r\nKPX Atilde Ccedilla -65\r\nKPX Atilde G -60\r\nKPX Atilde Gbreve -60\r\nKPX Atilde Gcommaaccent -60\r\nKPX Atilde O -50\r\nKPX Atilde Oacute -50\r\nKPX Atilde Ocircumflex -50\r\nKPX Atilde Odieresis -50\r\nKPX Atilde Ograve -50\r\nKPX Atilde Ohungarumlaut -50\r\nKPX Atilde Omacron -50\r\nKPX Atilde Oslash -50\r\nKPX Atilde Otilde -50\r\nKPX Atilde Q -55\r\nKPX Atilde T -55\r\nKPX Atilde Tcaron -55\r\nKPX Atilde Tcommaaccent -55\r\nKPX Atilde U -50\r\nKPX Atilde Uacute -50\r\nKPX Atilde Ucircumflex -50\r\nKPX Atilde Udieresis -50\r\nKPX Atilde Ugrave -50\r\nKPX Atilde Uhungarumlaut -50\r\nKPX Atilde Umacron -50\r\nKPX Atilde Uogonek -50\r\nKPX Atilde Uring -50\r\nKPX Atilde V -95\r\nKPX Atilde W -100\r\nKPX Atilde Y -70\r\nKPX Atilde Yacute -70\r\nKPX Atilde Ydieresis -70\r\nKPX Atilde quoteright -74\r\nKPX Atilde u -30\r\nKPX Atilde uacute -30\r\nKPX Atilde ucircumflex -30\r\nKPX Atilde udieresis -30\r\nKPX Atilde ugrave -30\r\nKPX Atilde uhungarumlaut -30\r\nKPX Atilde umacron -30\r\nKPX Atilde uogonek -30\r\nKPX Atilde uring -30\r\nKPX Atilde v -74\r\nKPX Atilde w -74\r\nKPX Atilde y -74\r\nKPX Atilde yacute -74\r\nKPX Atilde ydieresis -74\r\nKPX B A -25\r\nKPX B Aacute -25\r\nKPX B Abreve -25\r\nKPX B Acircumflex -25\r\nKPX B Adieresis -25\r\nKPX B Agrave -25\r\nKPX B Amacron -25\r\nKPX B Aogonek -25\r\nKPX B Aring -25\r\nKPX B Atilde -25\r\nKPX B U -10\r\nKPX B Uacute -10\r\nKPX B Ucircumflex -10\r\nKPX B Udieresis -10\r\nKPX B Ugrave -10\r\nKPX B Uhungarumlaut -10\r\nKPX B Umacron -10\r\nKPX B Uogonek -10\r\nKPX B Uring -10\r\nKPX D A -25\r\nKPX D Aacute -25\r\nKPX D Abreve -25\r\nKPX D Acircumflex -25\r\nKPX D Adieresis -25\r\nKPX D Agrave -25\r\nKPX D Amacron -25\r\nKPX D Aogonek -25\r\nKPX D Aring -25\r\nKPX D Atilde -25\r\nKPX D V -50\r\nKPX D W -40\r\nKPX D Y -50\r\nKPX D Yacute -50\r\nKPX D Ydieresis -50\r\nKPX Dcaron A -25\r\nKPX Dcaron Aacute -25\r\nKPX Dcaron Abreve -25\r\nKPX Dcaron Acircumflex -25\r\nKPX Dcaron Adieresis -25\r\nKPX Dcaron Agrave -25\r\nKPX Dcaron Amacron -25\r\nKPX Dcaron Aogonek -25\r\nKPX Dcaron Aring -25\r\nKPX Dcaron Atilde -25\r\nKPX Dcaron V -50\r\nKPX Dcaron W -40\r\nKPX Dcaron Y -50\r\nKPX Dcaron Yacute -50\r\nKPX Dcaron Ydieresis -50\r\nKPX Dcroat A -25\r\nKPX Dcroat Aacute -25\r\nKPX Dcroat Abreve -25\r\nKPX Dcroat Acircumflex -25\r\nKPX Dcroat Adieresis -25\r\nKPX Dcroat Agrave -25\r\nKPX Dcroat Amacron -25\r\nKPX Dcroat Aogonek -25\r\nKPX Dcroat Aring -25\r\nKPX Dcroat Atilde -25\r\nKPX Dcroat V -50\r\nKPX Dcroat W -40\r\nKPX Dcroat Y -50\r\nKPX Dcroat Yacute -50\r\nKPX Dcroat Ydieresis -50\r\nKPX F A -100\r\nKPX F Aacute -100\r\nKPX F Abreve -100\r\nKPX F Acircumflex -100\r\nKPX F Adieresis -100\r\nKPX F Agrave -100\r\nKPX F Amacron -100\r\nKPX F Aogonek -100\r\nKPX F Aring -100\r\nKPX F Atilde -100\r\nKPX F a -95\r\nKPX F aacute -95\r\nKPX F abreve -95\r\nKPX F acircumflex -95\r\nKPX F adieresis -95\r\nKPX F agrave -95\r\nKPX F amacron -95\r\nKPX F aogonek -95\r\nKPX F aring -95\r\nKPX F atilde -95\r\nKPX F comma -129\r\nKPX F e -100\r\nKPX F eacute -100\r\nKPX F ecaron -100\r\nKPX F ecircumflex -100\r\nKPX F edieresis -100\r\nKPX F edotaccent -100\r\nKPX F egrave -100\r\nKPX F emacron -100\r\nKPX F eogonek -100\r\nKPX F i -40\r\nKPX F iacute -40\r\nKPX F icircumflex -40\r\nKPX F idieresis -40\r\nKPX F igrave -40\r\nKPX F imacron -40\r\nKPX F iogonek -40\r\nKPX F o -70\r\nKPX F oacute -70\r\nKPX F ocircumflex -70\r\nKPX F odieresis -70\r\nKPX F ograve -70\r\nKPX F ohungarumlaut -70\r\nKPX F omacron -70\r\nKPX F oslash -70\r\nKPX F otilde -70\r\nKPX F period -129\r\nKPX F r -50\r\nKPX F racute -50\r\nKPX F rcaron -50\r\nKPX F rcommaaccent -50\r\nKPX J A -25\r\nKPX J Aacute -25\r\nKPX J Abreve -25\r\nKPX J Acircumflex -25\r\nKPX J Adieresis -25\r\nKPX J Agrave -25\r\nKPX J Amacron -25\r\nKPX J Aogonek -25\r\nKPX J Aring -25\r\nKPX J Atilde -25\r\nKPX J a -40\r\nKPX J aacute -40\r\nKPX J abreve -40\r\nKPX J acircumflex -40\r\nKPX J adieresis -40\r\nKPX J agrave -40\r\nKPX J amacron -40\r\nKPX J aogonek -40\r\nKPX J aring -40\r\nKPX J atilde -40\r\nKPX J comma -10\r\nKPX J e -40\r\nKPX J eacute -40\r\nKPX J ecaron -40\r\nKPX J ecircumflex -40\r\nKPX J edieresis -40\r\nKPX J edotaccent -40\r\nKPX J egrave -40\r\nKPX J emacron -40\r\nKPX J eogonek -40\r\nKPX J o -40\r\nKPX J oacute -40\r\nKPX J ocircumflex -40\r\nKPX J odieresis -40\r\nKPX J ograve -40\r\nKPX J ohungarumlaut -40\r\nKPX J omacron -40\r\nKPX J oslash -40\r\nKPX J otilde -40\r\nKPX J period -10\r\nKPX J u -40\r\nKPX J uacute -40\r\nKPX J ucircumflex -40\r\nKPX J udieresis -40\r\nKPX J ugrave -40\r\nKPX J uhungarumlaut -40\r\nKPX J umacron -40\r\nKPX J uogonek -40\r\nKPX J uring -40\r\nKPX K O -30\r\nKPX K Oacute -30\r\nKPX K Ocircumflex -30\r\nKPX K Odieresis -30\r\nKPX K Ograve -30\r\nKPX K Ohungarumlaut -30\r\nKPX K Omacron -30\r\nKPX K Oslash -30\r\nKPX K Otilde -30\r\nKPX K e -25\r\nKPX K eacute -25\r\nKPX K ecaron -25\r\nKPX K ecircumflex -25\r\nKPX K edieresis -25\r\nKPX K edotaccent -25\r\nKPX K egrave -25\r\nKPX K emacron -25\r\nKPX K eogonek -25\r\nKPX K o -25\r\nKPX K oacute -25\r\nKPX K ocircumflex -25\r\nKPX K odieresis -25\r\nKPX K ograve -25\r\nKPX K ohungarumlaut -25\r\nKPX K omacron -25\r\nKPX K oslash -25\r\nKPX K otilde -25\r\nKPX K u -20\r\nKPX K uacute -20\r\nKPX K ucircumflex -20\r\nKPX K udieresis -20\r\nKPX K ugrave -20\r\nKPX K uhungarumlaut -20\r\nKPX K umacron -20\r\nKPX K uogonek -20\r\nKPX K uring -20\r\nKPX K y -20\r\nKPX K yacute -20\r\nKPX K ydieresis -20\r\nKPX Kcommaaccent O -30\r\nKPX Kcommaaccent Oacute -30\r\nKPX Kcommaaccent Ocircumflex -30\r\nKPX Kcommaaccent Odieresis -30\r\nKPX Kcommaaccent Ograve -30\r\nKPX Kcommaaccent Ohungarumlaut -30\r\nKPX Kcommaaccent Omacron -30\r\nKPX Kcommaaccent Oslash -30\r\nKPX Kcommaaccent Otilde -30\r\nKPX Kcommaaccent e -25\r\nKPX Kcommaaccent eacute -25\r\nKPX Kcommaaccent ecaron -25\r\nKPX Kcommaaccent ecircumflex -25\r\nKPX Kcommaaccent edieresis -25\r\nKPX Kcommaaccent edotaccent -25\r\nKPX Kcommaaccent egrave -25\r\nKPX Kcommaaccent emacron -25\r\nKPX Kcommaaccent eogonek -25\r\nKPX Kcommaaccent o -25\r\nKPX Kcommaaccent oacute -25\r\nKPX Kcommaaccent ocircumflex -25\r\nKPX Kcommaaccent odieresis -25\r\nKPX Kcommaaccent ograve -25\r\nKPX Kcommaaccent ohungarumlaut -25\r\nKPX Kcommaaccent omacron -25\r\nKPX Kcommaaccent oslash -25\r\nKPX Kcommaaccent otilde -25\r\nKPX Kcommaaccent u -20\r\nKPX Kcommaaccent uacute -20\r\nKPX Kcommaaccent ucircumflex -20\r\nKPX Kcommaaccent udieresis -20\r\nKPX Kcommaaccent ugrave -20\r\nKPX Kcommaaccent uhungarumlaut -20\r\nKPX Kcommaaccent umacron -20\r\nKPX Kcommaaccent uogonek -20\r\nKPX Kcommaaccent uring -20\r\nKPX Kcommaaccent y -20\r\nKPX Kcommaaccent yacute -20\r\nKPX Kcommaaccent ydieresis -20\r\nKPX L T -18\r\nKPX L Tcaron -18\r\nKPX L Tcommaaccent -18\r\nKPX L V -37\r\nKPX L W -37\r\nKPX L Y -37\r\nKPX L Yacute -37\r\nKPX L Ydieresis -37\r\nKPX L quoteright -55\r\nKPX L y -37\r\nKPX L yacute -37\r\nKPX L ydieresis -37\r\nKPX Lacute T -18\r\nKPX Lacute Tcaron -18\r\nKPX Lacute Tcommaaccent -18\r\nKPX Lacute V -37\r\nKPX Lacute W -37\r\nKPX Lacute Y -37\r\nKPX Lacute Yacute -37\r\nKPX Lacute Ydieresis -37\r\nKPX Lacute quoteright -55\r\nKPX Lacute y -37\r\nKPX Lacute yacute -37\r\nKPX Lacute ydieresis -37\r\nKPX Lcommaaccent T -18\r\nKPX Lcommaaccent Tcaron -18\r\nKPX Lcommaaccent Tcommaaccent -18\r\nKPX Lcommaaccent V -37\r\nKPX Lcommaaccent W -37\r\nKPX Lcommaaccent Y -37\r\nKPX Lcommaaccent Yacute -37\r\nKPX Lcommaaccent Ydieresis -37\r\nKPX Lcommaaccent quoteright -55\r\nKPX Lcommaaccent y -37\r\nKPX Lcommaaccent yacute -37\r\nKPX Lcommaaccent ydieresis -37\r\nKPX Lslash T -18\r\nKPX Lslash Tcaron -18\r\nKPX Lslash Tcommaaccent -18\r\nKPX Lslash V -37\r\nKPX Lslash W -37\r\nKPX Lslash Y -37\r\nKPX Lslash Yacute -37\r\nKPX Lslash Ydieresis -37\r\nKPX Lslash quoteright -55\r\nKPX Lslash y -37\r\nKPX Lslash yacute -37\r\nKPX Lslash ydieresis -37\r\nKPX N A -30\r\nKPX N Aacute -30\r\nKPX N Abreve -30\r\nKPX N Acircumflex -30\r\nKPX N Adieresis -30\r\nKPX N Agrave -30\r\nKPX N Amacron -30\r\nKPX N Aogonek -30\r\nKPX N Aring -30\r\nKPX N Atilde -30\r\nKPX Nacute A -30\r\nKPX Nacute Aacute -30\r\nKPX Nacute Abreve -30\r\nKPX Nacute Acircumflex -30\r\nKPX Nacute Adieresis -30\r\nKPX Nacute Agrave -30\r\nKPX Nacute Amacron -30\r\nKPX Nacute Aogonek -30\r\nKPX Nacute Aring -30\r\nKPX Nacute Atilde -30\r\nKPX Ncaron A -30\r\nKPX Ncaron Aacute -30\r\nKPX Ncaron Abreve -30\r\nKPX Ncaron Acircumflex -30\r\nKPX Ncaron Adieresis -30\r\nKPX Ncaron Agrave -30\r\nKPX Ncaron Amacron -30\r\nKPX Ncaron Aogonek -30\r\nKPX Ncaron Aring -30\r\nKPX Ncaron Atilde -30\r\nKPX Ncommaaccent A -30\r\nKPX Ncommaaccent Aacute -30\r\nKPX Ncommaaccent Abreve -30\r\nKPX Ncommaaccent Acircumflex -30\r\nKPX Ncommaaccent Adieresis -30\r\nKPX Ncommaaccent Agrave -30\r\nKPX Ncommaaccent Amacron -30\r\nKPX Ncommaaccent Aogonek -30\r\nKPX Ncommaaccent Aring -30\r\nKPX Ncommaaccent Atilde -30\r\nKPX Ntilde A -30\r\nKPX Ntilde Aacute -30\r\nKPX Ntilde Abreve -30\r\nKPX Ntilde Acircumflex -30\r\nKPX Ntilde Adieresis -30\r\nKPX Ntilde Agrave -30\r\nKPX Ntilde Amacron -30\r\nKPX Ntilde Aogonek -30\r\nKPX Ntilde Aring -30\r\nKPX Ntilde Atilde -30\r\nKPX O A -40\r\nKPX O Aacute -40\r\nKPX O Abreve -40\r\nKPX O Acircumflex -40\r\nKPX O Adieresis -40\r\nKPX O Agrave -40\r\nKPX O Amacron -40\r\nKPX O Aogonek -40\r\nKPX O Aring -40\r\nKPX O Atilde -40\r\nKPX O T -40\r\nKPX O Tcaron -40\r\nKPX O Tcommaaccent -40\r\nKPX O V -50\r\nKPX O W -50\r\nKPX O X -40\r\nKPX O Y -50\r\nKPX O Yacute -50\r\nKPX O Ydieresis -50\r\nKPX Oacute A -40\r\nKPX Oacute Aacute -40\r\nKPX Oacute Abreve -40\r\nKPX Oacute Acircumflex -40\r\nKPX Oacute Adieresis -40\r\nKPX Oacute Agrave -40\r\nKPX Oacute Amacron -40\r\nKPX Oacute Aogonek -40\r\nKPX Oacute Aring -40\r\nKPX Oacute Atilde -40\r\nKPX Oacute T -40\r\nKPX Oacute Tcaron -40\r\nKPX Oacute Tcommaaccent -40\r\nKPX Oacute V -50\r\nKPX Oacute W -50\r\nKPX Oacute X -40\r\nKPX Oacute Y -50\r\nKPX Oacute Yacute -50\r\nKPX Oacute Ydieresis -50\r\nKPX Ocircumflex A -40\r\nKPX Ocircumflex Aacute -40\r\nKPX Ocircumflex Abreve -40\r\nKPX Ocircumflex Acircumflex -40\r\nKPX Ocircumflex Adieresis -40\r\nKPX Ocircumflex Agrave -40\r\nKPX Ocircumflex Amacron -40\r\nKPX Ocircumflex Aogonek -40\r\nKPX Ocircumflex Aring -40\r\nKPX Ocircumflex Atilde -40\r\nKPX Ocircumflex T -40\r\nKPX Ocircumflex Tcaron -40\r\nKPX Ocircumflex Tcommaaccent -40\r\nKPX Ocircumflex V -50\r\nKPX Ocircumflex W -50\r\nKPX Ocircumflex X -40\r\nKPX Ocircumflex Y -50\r\nKPX Ocircumflex Yacute -50\r\nKPX Ocircumflex Ydieresis -50\r\nKPX Odieresis A -40\r\nKPX Odieresis Aacute -40\r\nKPX Odieresis Abreve -40\r\nKPX Odieresis Acircumflex -40\r\nKPX Odieresis Adieresis -40\r\nKPX Odieresis Agrave -40\r\nKPX Odieresis Amacron -40\r\nKPX Odieresis Aogonek -40\r\nKPX Odieresis Aring -40\r\nKPX Odieresis Atilde -40\r\nKPX Odieresis T -40\r\nKPX Odieresis Tcaron -40\r\nKPX Odieresis Tcommaaccent -40\r\nKPX Odieresis V -50\r\nKPX Odieresis W -50\r\nKPX Odieresis X -40\r\nKPX Odieresis Y -50\r\nKPX Odieresis Yacute -50\r\nKPX Odieresis Ydieresis -50\r\nKPX Ograve A -40\r\nKPX Ograve Aacute -40\r\nKPX Ograve Abreve -40\r\nKPX Ograve Acircumflex -40\r\nKPX Ograve Adieresis -40\r\nKPX Ograve Agrave -40\r\nKPX Ograve Amacron -40\r\nKPX Ograve Aogonek -40\r\nKPX Ograve Aring -40\r\nKPX Ograve Atilde -40\r\nKPX Ograve T -40\r\nKPX Ograve Tcaron -40\r\nKPX Ograve Tcommaaccent -40\r\nKPX Ograve V -50\r\nKPX Ograve W -50\r\nKPX Ograve X -40\r\nKPX Ograve Y -50\r\nKPX Ograve Yacute -50\r\nKPX Ograve Ydieresis -50\r\nKPX Ohungarumlaut A -40\r\nKPX Ohungarumlaut Aacute -40\r\nKPX Ohungarumlaut Abreve -40\r\nKPX Ohungarumlaut Acircumflex -40\r\nKPX Ohungarumlaut Adieresis -40\r\nKPX Ohungarumlaut Agrave -40\r\nKPX Ohungarumlaut Amacron -40\r\nKPX Ohungarumlaut Aogonek -40\r\nKPX Ohungarumlaut Aring -40\r\nKPX Ohungarumlaut Atilde -40\r\nKPX Ohungarumlaut T -40\r\nKPX Ohungarumlaut Tcaron -40\r\nKPX Ohungarumlaut Tcommaaccent -40\r\nKPX Ohungarumlaut V -50\r\nKPX Ohungarumlaut W -50\r\nKPX Ohungarumlaut X -40\r\nKPX Ohungarumlaut Y -50\r\nKPX Ohungarumlaut Yacute -50\r\nKPX Ohungarumlaut Ydieresis -50\r\nKPX Omacron A -40\r\nKPX Omacron Aacute -40\r\nKPX Omacron Abreve -40\r\nKPX Omacron Acircumflex -40\r\nKPX Omacron Adieresis -40\r\nKPX Omacron Agrave -40\r\nKPX Omacron Amacron -40\r\nKPX Omacron Aogonek -40\r\nKPX Omacron Aring -40\r\nKPX Omacron Atilde -40\r\nKPX Omacron T -40\r\nKPX Omacron Tcaron -40\r\nKPX Omacron Tcommaaccent -40\r\nKPX Omacron V -50\r\nKPX Omacron W -50\r\nKPX Omacron X -40\r\nKPX Omacron Y -50\r\nKPX Omacron Yacute -50\r\nKPX Omacron Ydieresis -50\r\nKPX Oslash A -40\r\nKPX Oslash Aacute -40\r\nKPX Oslash Abreve -40\r\nKPX Oslash Acircumflex -40\r\nKPX Oslash Adieresis -40\r\nKPX Oslash Agrave -40\r\nKPX Oslash Amacron -40\r\nKPX Oslash Aogonek -40\r\nKPX Oslash Aring -40\r\nKPX Oslash Atilde -40\r\nKPX Oslash T -40\r\nKPX Oslash Tcaron -40\r\nKPX Oslash Tcommaaccent -40\r\nKPX Oslash V -50\r\nKPX Oslash W -50\r\nKPX Oslash X -40\r\nKPX Oslash Y -50\r\nKPX Oslash Yacute -50\r\nKPX Oslash Ydieresis -50\r\nKPX Otilde A -40\r\nKPX Otilde Aacute -40\r\nKPX Otilde Abreve -40\r\nKPX Otilde Acircumflex -40\r\nKPX Otilde Adieresis -40\r\nKPX Otilde Agrave -40\r\nKPX Otilde Amacron -40\r\nKPX Otilde Aogonek -40\r\nKPX Otilde Aring -40\r\nKPX Otilde Atilde -40\r\nKPX Otilde T -40\r\nKPX Otilde Tcaron -40\r\nKPX Otilde Tcommaaccent -40\r\nKPX Otilde V -50\r\nKPX Otilde W -50\r\nKPX Otilde X -40\r\nKPX Otilde Y -50\r\nKPX Otilde Yacute -50\r\nKPX Otilde Ydieresis -50\r\nKPX P A -85\r\nKPX P Aacute -85\r\nKPX P Abreve -85\r\nKPX P Acircumflex -85\r\nKPX P Adieresis -85\r\nKPX P Agrave -85\r\nKPX P Amacron -85\r\nKPX P Aogonek -85\r\nKPX P Aring -85\r\nKPX P Atilde -85\r\nKPX P a -40\r\nKPX P aacute -40\r\nKPX P abreve -40\r\nKPX P acircumflex -40\r\nKPX P adieresis -40\r\nKPX P agrave -40\r\nKPX P amacron -40\r\nKPX P aogonek -40\r\nKPX P aring -40\r\nKPX P atilde -40\r\nKPX P comma -129\r\nKPX P e -50\r\nKPX P eacute -50\r\nKPX P ecaron -50\r\nKPX P ecircumflex -50\r\nKPX P edieresis -50\r\nKPX P edotaccent -50\r\nKPX P egrave -50\r\nKPX P emacron -50\r\nKPX P eogonek -50\r\nKPX P o -55\r\nKPX P oacute -55\r\nKPX P ocircumflex -55\r\nKPX P odieresis -55\r\nKPX P ograve -55\r\nKPX P ohungarumlaut -55\r\nKPX P omacron -55\r\nKPX P oslash -55\r\nKPX P otilde -55\r\nKPX P period -129\r\nKPX Q U -10\r\nKPX Q Uacute -10\r\nKPX Q Ucircumflex -10\r\nKPX Q Udieresis -10\r\nKPX Q Ugrave -10\r\nKPX Q Uhungarumlaut -10\r\nKPX Q Umacron -10\r\nKPX Q Uogonek -10\r\nKPX Q Uring -10\r\nKPX R O -40\r\nKPX R Oacute -40\r\nKPX R Ocircumflex -40\r\nKPX R Odieresis -40\r\nKPX R Ograve -40\r\nKPX R Ohungarumlaut -40\r\nKPX R Omacron -40\r\nKPX R Oslash -40\r\nKPX R Otilde -40\r\nKPX R T -30\r\nKPX R Tcaron -30\r\nKPX R Tcommaaccent -30\r\nKPX R U -40\r\nKPX R Uacute -40\r\nKPX R Ucircumflex -40\r\nKPX R Udieresis -40\r\nKPX R Ugrave -40\r\nKPX R Uhungarumlaut -40\r\nKPX R Umacron -40\r\nKPX R Uogonek -40\r\nKPX R Uring -40\r\nKPX R V -18\r\nKPX R W -18\r\nKPX R Y -18\r\nKPX R Yacute -18\r\nKPX R Ydieresis -18\r\nKPX Racute O -40\r\nKPX Racute Oacute -40\r\nKPX Racute Ocircumflex -40\r\nKPX Racute Odieresis -40\r\nKPX Racute Ograve -40\r\nKPX Racute Ohungarumlaut -40\r\nKPX Racute Omacron -40\r\nKPX Racute Oslash -40\r\nKPX Racute Otilde -40\r\nKPX Racute T -30\r\nKPX Racute Tcaron -30\r\nKPX Racute Tcommaaccent -30\r\nKPX Racute U -40\r\nKPX Racute Uacute -40\r\nKPX Racute Ucircumflex -40\r\nKPX Racute Udieresis -40\r\nKPX Racute Ugrave -40\r\nKPX Racute Uhungarumlaut -40\r\nKPX Racute Umacron -40\r\nKPX Racute Uogonek -40\r\nKPX Racute Uring -40\r\nKPX Racute V -18\r\nKPX Racute W -18\r\nKPX Racute Y -18\r\nKPX Racute Yacute -18\r\nKPX Racute Ydieresis -18\r\nKPX Rcaron O -40\r\nKPX Rcaron Oacute -40\r\nKPX Rcaron Ocircumflex -40\r\nKPX Rcaron Odieresis -40\r\nKPX Rcaron Ograve -40\r\nKPX Rcaron Ohungarumlaut -40\r\nKPX Rcaron Omacron -40\r\nKPX Rcaron Oslash -40\r\nKPX Rcaron Otilde -40\r\nKPX Rcaron T -30\r\nKPX Rcaron Tcaron -30\r\nKPX Rcaron Tcommaaccent -30\r\nKPX Rcaron U -40\r\nKPX Rcaron Uacute -40\r\nKPX Rcaron Ucircumflex -40\r\nKPX Rcaron Udieresis -40\r\nKPX Rcaron Ugrave -40\r\nKPX Rcaron Uhungarumlaut -40\r\nKPX Rcaron Umacron -40\r\nKPX Rcaron Uogonek -40\r\nKPX Rcaron Uring -40\r\nKPX Rcaron V -18\r\nKPX Rcaron W -18\r\nKPX Rcaron Y -18\r\nKPX Rcaron Yacute -18\r\nKPX Rcaron Ydieresis -18\r\nKPX Rcommaaccent O -40\r\nKPX Rcommaaccent Oacute -40\r\nKPX Rcommaaccent Ocircumflex -40\r\nKPX Rcommaaccent Odieresis -40\r\nKPX Rcommaaccent Ograve -40\r\nKPX Rcommaaccent Ohungarumlaut -40\r\nKPX Rcommaaccent Omacron -40\r\nKPX Rcommaaccent Oslash -40\r\nKPX Rcommaaccent Otilde -40\r\nKPX Rcommaaccent T -30\r\nKPX Rcommaaccent Tcaron -30\r\nKPX Rcommaaccent Tcommaaccent -30\r\nKPX Rcommaaccent U -40\r\nKPX Rcommaaccent Uacute -40\r\nKPX Rcommaaccent Ucircumflex -40\r\nKPX Rcommaaccent Udieresis -40\r\nKPX Rcommaaccent Ugrave -40\r\nKPX Rcommaaccent Uhungarumlaut -40\r\nKPX Rcommaaccent Umacron -40\r\nKPX Rcommaaccent Uogonek -40\r\nKPX Rcommaaccent Uring -40\r\nKPX Rcommaaccent V -18\r\nKPX Rcommaaccent W -18\r\nKPX Rcommaaccent Y -18\r\nKPX Rcommaaccent Yacute -18\r\nKPX Rcommaaccent Ydieresis -18\r\nKPX T A -55\r\nKPX T Aacute -55\r\nKPX T Abreve -55\r\nKPX T Acircumflex -55\r\nKPX T Adieresis -55\r\nKPX T Agrave -55\r\nKPX T Amacron -55\r\nKPX T Aogonek -55\r\nKPX T Aring -55\r\nKPX T Atilde -55\r\nKPX T O -18\r\nKPX T Oacute -18\r\nKPX T Ocircumflex -18\r\nKPX T Odieresis -18\r\nKPX T Ograve -18\r\nKPX T Ohungarumlaut -18\r\nKPX T Omacron -18\r\nKPX T Oslash -18\r\nKPX T Otilde -18\r\nKPX T a -92\r\nKPX T aacute -92\r\nKPX T abreve -92\r\nKPX T acircumflex -92\r\nKPX T adieresis -92\r\nKPX T agrave -92\r\nKPX T amacron -92\r\nKPX T aogonek -92\r\nKPX T aring -92\r\nKPX T atilde -92\r\nKPX T colon -74\r\nKPX T comma -92\r\nKPX T e -92\r\nKPX T eacute -92\r\nKPX T ecaron -92\r\nKPX T ecircumflex -92\r\nKPX T edieresis -52\r\nKPX T edotaccent -92\r\nKPX T egrave -52\r\nKPX T emacron -52\r\nKPX T eogonek -92\r\nKPX T hyphen -92\r\nKPX T i -37\r\nKPX T iacute -37\r\nKPX T iogonek -37\r\nKPX T o -95\r\nKPX T oacute -95\r\nKPX T ocircumflex -95\r\nKPX T odieresis -95\r\nKPX T ograve -95\r\nKPX T ohungarumlaut -95\r\nKPX T omacron -95\r\nKPX T oslash -95\r\nKPX T otilde -95\r\nKPX T period -92\r\nKPX T r -37\r\nKPX T racute -37\r\nKPX T rcaron -37\r\nKPX T rcommaaccent -37\r\nKPX T semicolon -74\r\nKPX T u -37\r\nKPX T uacute -37\r\nKPX T ucircumflex -37\r\nKPX T udieresis -37\r\nKPX T ugrave -37\r\nKPX T uhungarumlaut -37\r\nKPX T umacron -37\r\nKPX T uogonek -37\r\nKPX T uring -37\r\nKPX T w -37\r\nKPX T y -37\r\nKPX T yacute -37\r\nKPX T ydieresis -37\r\nKPX Tcaron A -55\r\nKPX Tcaron Aacute -55\r\nKPX Tcaron Abreve -55\r\nKPX Tcaron Acircumflex -55\r\nKPX Tcaron Adieresis -55\r\nKPX Tcaron Agrave -55\r\nKPX Tcaron Amacron -55\r\nKPX Tcaron Aogonek -55\r\nKPX Tcaron Aring -55\r\nKPX Tcaron Atilde -55\r\nKPX Tcaron O -18\r\nKPX Tcaron Oacute -18\r\nKPX Tcaron Ocircumflex -18\r\nKPX Tcaron Odieresis -18\r\nKPX Tcaron Ograve -18\r\nKPX Tcaron Ohungarumlaut -18\r\nKPX Tcaron Omacron -18\r\nKPX Tcaron Oslash -18\r\nKPX Tcaron Otilde -18\r\nKPX Tcaron a -92\r\nKPX Tcaron aacute -92\r\nKPX Tcaron abreve -92\r\nKPX Tcaron acircumflex -92\r\nKPX Tcaron adieresis -92\r\nKPX Tcaron agrave -92\r\nKPX Tcaron amacron -92\r\nKPX Tcaron aogonek -92\r\nKPX Tcaron aring -92\r\nKPX Tcaron atilde -92\r\nKPX Tcaron colon -74\r\nKPX Tcaron comma -92\r\nKPX Tcaron e -92\r\nKPX Tcaron eacute -92\r\nKPX Tcaron ecaron -92\r\nKPX Tcaron ecircumflex -92\r\nKPX Tcaron edieresis -52\r\nKPX Tcaron edotaccent -92\r\nKPX Tcaron egrave -52\r\nKPX Tcaron emacron -52\r\nKPX Tcaron eogonek -92\r\nKPX Tcaron hyphen -92\r\nKPX Tcaron i -37\r\nKPX Tcaron iacute -37\r\nKPX Tcaron iogonek -37\r\nKPX Tcaron o -95\r\nKPX Tcaron oacute -95\r\nKPX Tcaron ocircumflex -95\r\nKPX Tcaron odieresis -95\r\nKPX Tcaron ograve -95\r\nKPX Tcaron ohungarumlaut -95\r\nKPX Tcaron omacron -95\r\nKPX Tcaron oslash -95\r\nKPX Tcaron otilde -95\r\nKPX Tcaron period -92\r\nKPX Tcaron r -37\r\nKPX Tcaron racute -37\r\nKPX Tcaron rcaron -37\r\nKPX Tcaron rcommaaccent -37\r\nKPX Tcaron semicolon -74\r\nKPX Tcaron u -37\r\nKPX Tcaron uacute -37\r\nKPX Tcaron ucircumflex -37\r\nKPX Tcaron udieresis -37\r\nKPX Tcaron ugrave -37\r\nKPX Tcaron uhungarumlaut -37\r\nKPX Tcaron umacron -37\r\nKPX Tcaron uogonek -37\r\nKPX Tcaron uring -37\r\nKPX Tcaron w -37\r\nKPX Tcaron y -37\r\nKPX Tcaron yacute -37\r\nKPX Tcaron ydieresis -37\r\nKPX Tcommaaccent A -55\r\nKPX Tcommaaccent Aacute -55\r\nKPX Tcommaaccent Abreve -55\r\nKPX Tcommaaccent Acircumflex -55\r\nKPX Tcommaaccent Adieresis -55\r\nKPX Tcommaaccent Agrave -55\r\nKPX Tcommaaccent Amacron -55\r\nKPX Tcommaaccent Aogonek -55\r\nKPX Tcommaaccent Aring -55\r\nKPX Tcommaaccent Atilde -55\r\nKPX Tcommaaccent O -18\r\nKPX Tcommaaccent Oacute -18\r\nKPX Tcommaaccent Ocircumflex -18\r\nKPX Tcommaaccent Odieresis -18\r\nKPX Tcommaaccent Ograve -18\r\nKPX Tcommaaccent Ohungarumlaut -18\r\nKPX Tcommaaccent Omacron -18\r\nKPX Tcommaaccent Oslash -18\r\nKPX Tcommaaccent Otilde -18\r\nKPX Tcommaaccent a -92\r\nKPX Tcommaaccent aacute -92\r\nKPX Tcommaaccent abreve -92\r\nKPX Tcommaaccent acircumflex -92\r\nKPX Tcommaaccent adieresis -92\r\nKPX Tcommaaccent agrave -92\r\nKPX Tcommaaccent amacron -92\r\nKPX Tcommaaccent aogonek -92\r\nKPX Tcommaaccent aring -92\r\nKPX Tcommaaccent atilde -92\r\nKPX Tcommaaccent colon -74\r\nKPX Tcommaaccent comma -92\r\nKPX Tcommaaccent e -92\r\nKPX Tcommaaccent eacute -92\r\nKPX Tcommaaccent ecaron -92\r\nKPX Tcommaaccent ecircumflex -92\r\nKPX Tcommaaccent edieresis -52\r\nKPX Tcommaaccent edotaccent -92\r\nKPX Tcommaaccent egrave -52\r\nKPX Tcommaaccent emacron -52\r\nKPX Tcommaaccent eogonek -92\r\nKPX Tcommaaccent hyphen -92\r\nKPX Tcommaaccent i -37\r\nKPX Tcommaaccent iacute -37\r\nKPX Tcommaaccent iogonek -37\r\nKPX Tcommaaccent o -95\r\nKPX Tcommaaccent oacute -95\r\nKPX Tcommaaccent ocircumflex -95\r\nKPX Tcommaaccent odieresis -95\r\nKPX Tcommaaccent ograve -95\r\nKPX Tcommaaccent ohungarumlaut -95\r\nKPX Tcommaaccent omacron -95\r\nKPX Tcommaaccent oslash -95\r\nKPX Tcommaaccent otilde -95\r\nKPX Tcommaaccent period -92\r\nKPX Tcommaaccent r -37\r\nKPX Tcommaaccent racute -37\r\nKPX Tcommaaccent rcaron -37\r\nKPX Tcommaaccent rcommaaccent -37\r\nKPX Tcommaaccent semicolon -74\r\nKPX Tcommaaccent u -37\r\nKPX Tcommaaccent uacute -37\r\nKPX Tcommaaccent ucircumflex -37\r\nKPX Tcommaaccent udieresis -37\r\nKPX Tcommaaccent ugrave -37\r\nKPX Tcommaaccent uhungarumlaut -37\r\nKPX Tcommaaccent umacron -37\r\nKPX Tcommaaccent uogonek -37\r\nKPX Tcommaaccent uring -37\r\nKPX Tcommaaccent w -37\r\nKPX Tcommaaccent y -37\r\nKPX Tcommaaccent yacute -37\r\nKPX Tcommaaccent ydieresis -37\r\nKPX U A -45\r\nKPX U Aacute -45\r\nKPX U Abreve -45\r\nKPX U Acircumflex -45\r\nKPX U Adieresis -45\r\nKPX U Agrave -45\r\nKPX U Amacron -45\r\nKPX U Aogonek -45\r\nKPX U Aring -45\r\nKPX U Atilde -45\r\nKPX Uacute A -45\r\nKPX Uacute Aacute -45\r\nKPX Uacute Abreve -45\r\nKPX Uacute Acircumflex -45\r\nKPX Uacute Adieresis -45\r\nKPX Uacute Agrave -45\r\nKPX Uacute Amacron -45\r\nKPX Uacute Aogonek -45\r\nKPX Uacute Aring -45\r\nKPX Uacute Atilde -45\r\nKPX Ucircumflex A -45\r\nKPX Ucircumflex Aacute -45\r\nKPX Ucircumflex Abreve -45\r\nKPX Ucircumflex Acircumflex -45\r\nKPX Ucircumflex Adieresis -45\r\nKPX Ucircumflex Agrave -45\r\nKPX Ucircumflex Amacron -45\r\nKPX Ucircumflex Aogonek -45\r\nKPX Ucircumflex Aring -45\r\nKPX Ucircumflex Atilde -45\r\nKPX Udieresis A -45\r\nKPX Udieresis Aacute -45\r\nKPX Udieresis Abreve -45\r\nKPX Udieresis Acircumflex -45\r\nKPX Udieresis Adieresis -45\r\nKPX Udieresis Agrave -45\r\nKPX Udieresis Amacron -45\r\nKPX Udieresis Aogonek -45\r\nKPX Udieresis Aring -45\r\nKPX Udieresis Atilde -45\r\nKPX Ugrave A -45\r\nKPX Ugrave Aacute -45\r\nKPX Ugrave Abreve -45\r\nKPX Ugrave Acircumflex -45\r\nKPX Ugrave Adieresis -45\r\nKPX Ugrave Agrave -45\r\nKPX Ugrave Amacron -45\r\nKPX Ugrave Aogonek -45\r\nKPX Ugrave Aring -45\r\nKPX Ugrave Atilde -45\r\nKPX Uhungarumlaut A -45\r\nKPX Uhungarumlaut Aacute -45\r\nKPX Uhungarumlaut Abreve -45\r\nKPX Uhungarumlaut Acircumflex -45\r\nKPX Uhungarumlaut Adieresis -45\r\nKPX Uhungarumlaut Agrave -45\r\nKPX Uhungarumlaut Amacron -45\r\nKPX Uhungarumlaut Aogonek -45\r\nKPX Uhungarumlaut Aring -45\r\nKPX Uhungarumlaut Atilde -45\r\nKPX Umacron A -45\r\nKPX Umacron Aacute -45\r\nKPX Umacron Abreve -45\r\nKPX Umacron Acircumflex -45\r\nKPX Umacron Adieresis -45\r\nKPX Umacron Agrave -45\r\nKPX Umacron Amacron -45\r\nKPX Umacron Aogonek -45\r\nKPX Umacron Aring -45\r\nKPX Umacron Atilde -45\r\nKPX Uogonek A -45\r\nKPX Uogonek Aacute -45\r\nKPX Uogonek Abreve -45\r\nKPX Uogonek Acircumflex -45\r\nKPX Uogonek Adieresis -45\r\nKPX Uogonek Agrave -45\r\nKPX Uogonek Amacron -45\r\nKPX Uogonek Aogonek -45\r\nKPX Uogonek Aring -45\r\nKPX Uogonek Atilde -45\r\nKPX Uring A -45\r\nKPX Uring Aacute -45\r\nKPX Uring Abreve -45\r\nKPX Uring Acircumflex -45\r\nKPX Uring Adieresis -45\r\nKPX Uring Agrave -45\r\nKPX Uring Amacron -45\r\nKPX Uring Aogonek -45\r\nKPX Uring Aring -45\r\nKPX Uring Atilde -45\r\nKPX V A -85\r\nKPX V Aacute -85\r\nKPX V Abreve -85\r\nKPX V Acircumflex -85\r\nKPX V Adieresis -85\r\nKPX V Agrave -85\r\nKPX V Amacron -85\r\nKPX V Aogonek -85\r\nKPX V Aring -85\r\nKPX V Atilde -85\r\nKPX V G -10\r\nKPX V Gbreve -10\r\nKPX V Gcommaaccent -10\r\nKPX V O -30\r\nKPX V Oacute -30\r\nKPX V Ocircumflex -30\r\nKPX V Odieresis -30\r\nKPX V Ograve -30\r\nKPX V Ohungarumlaut -30\r\nKPX V Omacron -30\r\nKPX V Oslash -30\r\nKPX V Otilde -30\r\nKPX V a -111\r\nKPX V aacute -111\r\nKPX V abreve -111\r\nKPX V acircumflex -111\r\nKPX V adieresis -111\r\nKPX V agrave -111\r\nKPX V amacron -111\r\nKPX V aogonek -111\r\nKPX V aring -111\r\nKPX V atilde -111\r\nKPX V colon -74\r\nKPX V comma -129\r\nKPX V e -111\r\nKPX V eacute -111\r\nKPX V ecaron -111\r\nKPX V ecircumflex -111\r\nKPX V edieresis -71\r\nKPX V edotaccent -111\r\nKPX V egrave -71\r\nKPX V emacron -71\r\nKPX V eogonek -111\r\nKPX V hyphen -70\r\nKPX V i -55\r\nKPX V iacute -55\r\nKPX V iogonek -55\r\nKPX V o -111\r\nKPX V oacute -111\r\nKPX V ocircumflex -111\r\nKPX V odieresis -111\r\nKPX V ograve -111\r\nKPX V ohungarumlaut -111\r\nKPX V omacron -111\r\nKPX V oslash -111\r\nKPX V otilde -111\r\nKPX V period -129\r\nKPX V semicolon -74\r\nKPX V u -55\r\nKPX V uacute -55\r\nKPX V ucircumflex -55\r\nKPX V udieresis -55\r\nKPX V ugrave -55\r\nKPX V uhungarumlaut -55\r\nKPX V umacron -55\r\nKPX V uogonek -55\r\nKPX V uring -55\r\nKPX W A -74\r\nKPX W Aacute -74\r\nKPX W Abreve -74\r\nKPX W Acircumflex -74\r\nKPX W Adieresis -74\r\nKPX W Agrave -74\r\nKPX W Amacron -74\r\nKPX W Aogonek -74\r\nKPX W Aring -74\r\nKPX W Atilde -74\r\nKPX W O -15\r\nKPX W Oacute -15\r\nKPX W Ocircumflex -15\r\nKPX W Odieresis -15\r\nKPX W Ograve -15\r\nKPX W Ohungarumlaut -15\r\nKPX W Omacron -15\r\nKPX W Oslash -15\r\nKPX W Otilde -15\r\nKPX W a -85\r\nKPX W aacute -85\r\nKPX W abreve -85\r\nKPX W acircumflex -85\r\nKPX W adieresis -85\r\nKPX W agrave -85\r\nKPX W amacron -85\r\nKPX W aogonek -85\r\nKPX W aring -85\r\nKPX W atilde -85\r\nKPX W colon -55\r\nKPX W comma -74\r\nKPX W e -90\r\nKPX W eacute -90\r\nKPX W ecaron -90\r\nKPX W ecircumflex -90\r\nKPX W edieresis -50\r\nKPX W edotaccent -90\r\nKPX W egrave -50\r\nKPX W emacron -50\r\nKPX W eogonek -90\r\nKPX W hyphen -50\r\nKPX W i -37\r\nKPX W iacute -37\r\nKPX W iogonek -37\r\nKPX W o -80\r\nKPX W oacute -80\r\nKPX W ocircumflex -80\r\nKPX W odieresis -80\r\nKPX W ograve -80\r\nKPX W ohungarumlaut -80\r\nKPX W omacron -80\r\nKPX W oslash -80\r\nKPX W otilde -80\r\nKPX W period -74\r\nKPX W semicolon -55\r\nKPX W u -55\r\nKPX W uacute -55\r\nKPX W ucircumflex -55\r\nKPX W udieresis -55\r\nKPX W ugrave -55\r\nKPX W uhungarumlaut -55\r\nKPX W umacron -55\r\nKPX W uogonek -55\r\nKPX W uring -55\r\nKPX W y -55\r\nKPX W yacute -55\r\nKPX W ydieresis -55\r\nKPX Y A -74\r\nKPX Y Aacute -74\r\nKPX Y Abreve -74\r\nKPX Y Acircumflex -74\r\nKPX Y Adieresis -74\r\nKPX Y Agrave -74\r\nKPX Y Amacron -74\r\nKPX Y Aogonek -74\r\nKPX Y Aring -74\r\nKPX Y Atilde -74\r\nKPX Y O -25\r\nKPX Y Oacute -25\r\nKPX Y Ocircumflex -25\r\nKPX Y Odieresis -25\r\nKPX Y Ograve -25\r\nKPX Y Ohungarumlaut -25\r\nKPX Y Omacron -25\r\nKPX Y Oslash -25\r\nKPX Y Otilde -25\r\nKPX Y a -92\r\nKPX Y aacute -92\r\nKPX Y abreve -92\r\nKPX Y acircumflex -92\r\nKPX Y adieresis -92\r\nKPX Y agrave -92\r\nKPX Y amacron -92\r\nKPX Y aogonek -92\r\nKPX Y aring -92\r\nKPX Y atilde -92\r\nKPX Y colon -92\r\nKPX Y comma -92\r\nKPX Y e -111\r\nKPX Y eacute -111\r\nKPX Y ecaron -111\r\nKPX Y ecircumflex -71\r\nKPX Y edieresis -71\r\nKPX Y edotaccent -111\r\nKPX Y egrave -71\r\nKPX Y emacron -71\r\nKPX Y eogonek -111\r\nKPX Y hyphen -92\r\nKPX Y i -55\r\nKPX Y iacute -55\r\nKPX Y iogonek -55\r\nKPX Y o -111\r\nKPX Y oacute -111\r\nKPX Y ocircumflex -111\r\nKPX Y odieresis -111\r\nKPX Y ograve -111\r\nKPX Y ohungarumlaut -111\r\nKPX Y omacron -111\r\nKPX Y oslash -111\r\nKPX Y otilde -111\r\nKPX Y period -74\r\nKPX Y semicolon -92\r\nKPX Y u -92\r\nKPX Y uacute -92\r\nKPX Y ucircumflex -92\r\nKPX Y udieresis -92\r\nKPX Y ugrave -92\r\nKPX Y uhungarumlaut -92\r\nKPX Y umacron -92\r\nKPX Y uogonek -92\r\nKPX Y uring -92\r\nKPX Yacute A -74\r\nKPX Yacute Aacute -74\r\nKPX Yacute Abreve -74\r\nKPX Yacute Acircumflex -74\r\nKPX Yacute Adieresis -74\r\nKPX Yacute Agrave -74\r\nKPX Yacute Amacron -74\r\nKPX Yacute Aogonek -74\r\nKPX Yacute Aring -74\r\nKPX Yacute Atilde -74\r\nKPX Yacute O -25\r\nKPX Yacute Oacute -25\r\nKPX Yacute Ocircumflex -25\r\nKPX Yacute Odieresis -25\r\nKPX Yacute Ograve -25\r\nKPX Yacute Ohungarumlaut -25\r\nKPX Yacute Omacron -25\r\nKPX Yacute Oslash -25\r\nKPX Yacute Otilde -25\r\nKPX Yacute a -92\r\nKPX Yacute aacute -92\r\nKPX Yacute abreve -92\r\nKPX Yacute acircumflex -92\r\nKPX Yacute adieresis -92\r\nKPX Yacute agrave -92\r\nKPX Yacute amacron -92\r\nKPX Yacute aogonek -92\r\nKPX Yacute aring -92\r\nKPX Yacute atilde -92\r\nKPX Yacute colon -92\r\nKPX Yacute comma -92\r\nKPX Yacute e -111\r\nKPX Yacute eacute -111\r\nKPX Yacute ecaron -111\r\nKPX Yacute ecircumflex -71\r\nKPX Yacute edieresis -71\r\nKPX Yacute edotaccent -111\r\nKPX Yacute egrave -71\r\nKPX Yacute emacron -71\r\nKPX Yacute eogonek -111\r\nKPX Yacute hyphen -92\r\nKPX Yacute i -55\r\nKPX Yacute iacute -55\r\nKPX Yacute iogonek -55\r\nKPX Yacute o -111\r\nKPX Yacute oacute -111\r\nKPX Yacute ocircumflex -111\r\nKPX Yacute odieresis -111\r\nKPX Yacute ograve -111\r\nKPX Yacute ohungarumlaut -111\r\nKPX Yacute omacron -111\r\nKPX Yacute oslash -111\r\nKPX Yacute otilde -111\r\nKPX Yacute period -74\r\nKPX Yacute semicolon -92\r\nKPX Yacute u -92\r\nKPX Yacute uacute -92\r\nKPX Yacute ucircumflex -92\r\nKPX Yacute udieresis -92\r\nKPX Yacute ugrave -92\r\nKPX Yacute uhungarumlaut -92\r\nKPX Yacute umacron -92\r\nKPX Yacute uogonek -92\r\nKPX Yacute uring -92\r\nKPX Ydieresis A -74\r\nKPX Ydieresis Aacute -74\r\nKPX Ydieresis Abreve -74\r\nKPX Ydieresis Acircumflex -74\r\nKPX Ydieresis Adieresis -74\r\nKPX Ydieresis Agrave -74\r\nKPX Ydieresis Amacron -74\r\nKPX Ydieresis Aogonek -74\r\nKPX Ydieresis Aring -74\r\nKPX Ydieresis Atilde -74\r\nKPX Ydieresis O -25\r\nKPX Ydieresis Oacute -25\r\nKPX Ydieresis Ocircumflex -25\r\nKPX Ydieresis Odieresis -25\r\nKPX Ydieresis Ograve -25\r\nKPX Ydieresis Ohungarumlaut -25\r\nKPX Ydieresis Omacron -25\r\nKPX Ydieresis Oslash -25\r\nKPX Ydieresis Otilde -25\r\nKPX Ydieresis a -92\r\nKPX Ydieresis aacute -92\r\nKPX Ydieresis abreve -92\r\nKPX Ydieresis acircumflex -92\r\nKPX Ydieresis adieresis -92\r\nKPX Ydieresis agrave -92\r\nKPX Ydieresis amacron -92\r\nKPX Ydieresis aogonek -92\r\nKPX Ydieresis aring -92\r\nKPX Ydieresis atilde -92\r\nKPX Ydieresis colon -92\r\nKPX Ydieresis comma -92\r\nKPX Ydieresis e -111\r\nKPX Ydieresis eacute -111\r\nKPX Ydieresis ecaron -111\r\nKPX Ydieresis ecircumflex -71\r\nKPX Ydieresis edieresis -71\r\nKPX Ydieresis edotaccent -111\r\nKPX Ydieresis egrave -71\r\nKPX Ydieresis emacron -71\r\nKPX Ydieresis eogonek -111\r\nKPX Ydieresis hyphen -92\r\nKPX Ydieresis i -55\r\nKPX Ydieresis iacute -55\r\nKPX Ydieresis iogonek -55\r\nKPX Ydieresis o -111\r\nKPX Ydieresis oacute -111\r\nKPX Ydieresis ocircumflex -111\r\nKPX Ydieresis odieresis -111\r\nKPX Ydieresis ograve -111\r\nKPX Ydieresis ohungarumlaut -111\r\nKPX Ydieresis omacron -111\r\nKPX Ydieresis oslash -111\r\nKPX Ydieresis otilde -111\r\nKPX Ydieresis period -74\r\nKPX Ydieresis semicolon -92\r\nKPX Ydieresis u -92\r\nKPX Ydieresis uacute -92\r\nKPX Ydieresis ucircumflex -92\r\nKPX Ydieresis udieresis -92\r\nKPX Ydieresis ugrave -92\r\nKPX Ydieresis uhungarumlaut -92\r\nKPX Ydieresis umacron -92\r\nKPX Ydieresis uogonek -92\r\nKPX Ydieresis uring -92\r\nKPX b b -10\r\nKPX b period -40\r\nKPX b u -20\r\nKPX b uacute -20\r\nKPX b ucircumflex -20\r\nKPX b udieresis -20\r\nKPX b ugrave -20\r\nKPX b uhungarumlaut -20\r\nKPX b umacron -20\r\nKPX b uogonek -20\r\nKPX b uring -20\r\nKPX c h -10\r\nKPX c k -10\r\nKPX c kcommaaccent -10\r\nKPX cacute h -10\r\nKPX cacute k -10\r\nKPX cacute kcommaaccent -10\r\nKPX ccaron h -10\r\nKPX ccaron k -10\r\nKPX ccaron kcommaaccent -10\r\nKPX ccedilla h -10\r\nKPX ccedilla k -10\r\nKPX ccedilla kcommaaccent -10\r\nKPX comma quotedblright -95\r\nKPX comma quoteright -95\r\nKPX e b -10\r\nKPX eacute b -10\r\nKPX ecaron b -10\r\nKPX ecircumflex b -10\r\nKPX edieresis b -10\r\nKPX edotaccent b -10\r\nKPX egrave b -10\r\nKPX emacron b -10\r\nKPX eogonek b -10\r\nKPX f comma -10\r\nKPX f dotlessi -30\r\nKPX f e -10\r\nKPX f eacute -10\r\nKPX f edotaccent -10\r\nKPX f eogonek -10\r\nKPX f f -18\r\nKPX f o -10\r\nKPX f oacute -10\r\nKPX f ocircumflex -10\r\nKPX f ograve -10\r\nKPX f ohungarumlaut -10\r\nKPX f oslash -10\r\nKPX f otilde -10\r\nKPX f period -10\r\nKPX f quoteright 55\r\nKPX k e -30\r\nKPX k eacute -30\r\nKPX k ecaron -30\r\nKPX k ecircumflex -30\r\nKPX k edieresis -30\r\nKPX k edotaccent -30\r\nKPX k egrave -30\r\nKPX k emacron -30\r\nKPX k eogonek -30\r\nKPX k o -10\r\nKPX k oacute -10\r\nKPX k ocircumflex -10\r\nKPX k odieresis -10\r\nKPX k ograve -10\r\nKPX k ohungarumlaut -10\r\nKPX k omacron -10\r\nKPX k oslash -10\r\nKPX k otilde -10\r\nKPX kcommaaccent e -30\r\nKPX kcommaaccent eacute -30\r\nKPX kcommaaccent ecaron -30\r\nKPX kcommaaccent ecircumflex -30\r\nKPX kcommaaccent edieresis -30\r\nKPX kcommaaccent edotaccent -30\r\nKPX kcommaaccent egrave -30\r\nKPX kcommaaccent emacron -30\r\nKPX kcommaaccent eogonek -30\r\nKPX kcommaaccent o -10\r\nKPX kcommaaccent oacute -10\r\nKPX kcommaaccent ocircumflex -10\r\nKPX kcommaaccent odieresis -10\r\nKPX kcommaaccent ograve -10\r\nKPX kcommaaccent ohungarumlaut -10\r\nKPX kcommaaccent omacron -10\r\nKPX kcommaaccent oslash -10\r\nKPX kcommaaccent otilde -10\r\nKPX n v -40\r\nKPX nacute v -40\r\nKPX ncaron v -40\r\nKPX ncommaaccent v -40\r\nKPX ntilde v -40\r\nKPX o v -15\r\nKPX o w -25\r\nKPX o x -10\r\nKPX o y -10\r\nKPX o yacute -10\r\nKPX o ydieresis -10\r\nKPX oacute v -15\r\nKPX oacute w -25\r\nKPX oacute x -10\r\nKPX oacute y -10\r\nKPX oacute yacute -10\r\nKPX oacute ydieresis -10\r\nKPX ocircumflex v -15\r\nKPX ocircumflex w -25\r\nKPX ocircumflex x -10\r\nKPX ocircumflex y -10\r\nKPX ocircumflex yacute -10\r\nKPX ocircumflex ydieresis -10\r\nKPX odieresis v -15\r\nKPX odieresis w -25\r\nKPX odieresis x -10\r\nKPX odieresis y -10\r\nKPX odieresis yacute -10\r\nKPX odieresis ydieresis -10\r\nKPX ograve v -15\r\nKPX ograve w -25\r\nKPX ograve x -10\r\nKPX ograve y -10\r\nKPX ograve yacute -10\r\nKPX ograve ydieresis -10\r\nKPX ohungarumlaut v -15\r\nKPX ohungarumlaut w -25\r\nKPX ohungarumlaut x -10\r\nKPX ohungarumlaut y -10\r\nKPX ohungarumlaut yacute -10\r\nKPX ohungarumlaut ydieresis -10\r\nKPX omacron v -15\r\nKPX omacron w -25\r\nKPX omacron x -10\r\nKPX omacron y -10\r\nKPX omacron yacute -10\r\nKPX omacron ydieresis -10\r\nKPX oslash v -15\r\nKPX oslash w -25\r\nKPX oslash x -10\r\nKPX oslash y -10\r\nKPX oslash yacute -10\r\nKPX oslash ydieresis -10\r\nKPX otilde v -15\r\nKPX otilde w -25\r\nKPX otilde x -10\r\nKPX otilde y -10\r\nKPX otilde yacute -10\r\nKPX otilde ydieresis -10\r\nKPX period quotedblright -95\r\nKPX period quoteright -95\r\nKPX quoteleft quoteleft -74\r\nKPX quoteright d -15\r\nKPX quoteright dcroat -15\r\nKPX quoteright quoteright -74\r\nKPX quoteright r -15\r\nKPX quoteright racute -15\r\nKPX quoteright rcaron -15\r\nKPX quoteright rcommaaccent -15\r\nKPX quoteright s -74\r\nKPX quoteright sacute -74\r\nKPX quoteright scaron -74\r\nKPX quoteright scedilla -74\r\nKPX quoteright scommaaccent -74\r\nKPX quoteright space -74\r\nKPX quoteright t -37\r\nKPX quoteright tcommaaccent -37\r\nKPX quoteright v -15\r\nKPX r comma -65\r\nKPX r period -65\r\nKPX racute comma -65\r\nKPX racute period -65\r\nKPX rcaron comma -65\r\nKPX rcaron period -65\r\nKPX rcommaaccent comma -65\r\nKPX rcommaaccent period -65\r\nKPX space A -37\r\nKPX space Aacute -37\r\nKPX space Abreve -37\r\nKPX space Acircumflex -37\r\nKPX space Adieresis -37\r\nKPX space Agrave -37\r\nKPX space Amacron -37\r\nKPX space Aogonek -37\r\nKPX space Aring -37\r\nKPX space Atilde -37\r\nKPX space V -70\r\nKPX space W -70\r\nKPX space Y -70\r\nKPX space Yacute -70\r\nKPX space Ydieresis -70\r\nKPX v comma -37\r\nKPX v e -15\r\nKPX v eacute -15\r\nKPX v ecaron -15\r\nKPX v ecircumflex -15\r\nKPX v edieresis -15\r\nKPX v edotaccent -15\r\nKPX v egrave -15\r\nKPX v emacron -15\r\nKPX v eogonek -15\r\nKPX v o -15\r\nKPX v oacute -15\r\nKPX v ocircumflex -15\r\nKPX v odieresis -15\r\nKPX v ograve -15\r\nKPX v ohungarumlaut -15\r\nKPX v omacron -15\r\nKPX v oslash -15\r\nKPX v otilde -15\r\nKPX v period -37\r\nKPX w a -10\r\nKPX w aacute -10\r\nKPX w abreve -10\r\nKPX w acircumflex -10\r\nKPX w adieresis -10\r\nKPX w agrave -10\r\nKPX w amacron -10\r\nKPX w aogonek -10\r\nKPX w aring -10\r\nKPX w atilde -10\r\nKPX w comma -37\r\nKPX w e -10\r\nKPX w eacute -10\r\nKPX w ecaron -10\r\nKPX w ecircumflex -10\r\nKPX w edieresis -10\r\nKPX w edotaccent -10\r\nKPX w egrave -10\r\nKPX w emacron -10\r\nKPX w eogonek -10\r\nKPX w o -15\r\nKPX w oacute -15\r\nKPX w ocircumflex -15\r\nKPX w odieresis -15\r\nKPX w ograve -15\r\nKPX w ohungarumlaut -15\r\nKPX w omacron -15\r\nKPX w oslash -15\r\nKPX w otilde -15\r\nKPX w period -37\r\nKPX x e -10\r\nKPX x eacute -10\r\nKPX x ecaron -10\r\nKPX x ecircumflex -10\r\nKPX x edieresis -10\r\nKPX x edotaccent -10\r\nKPX x egrave -10\r\nKPX x emacron -10\r\nKPX x eogonek -10\r\nKPX y comma -37\r\nKPX y period -37\r\nKPX yacute comma -37\r\nKPX yacute period -37\r\nKPX ydieresis comma -37\r\nKPX ydieresis period -37\r\nEndKernPairs\r\nEndKernData\r\nEndFontMetrics\r\n"; - }, - Symbol() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.\r\nComment Creation Date: Thu May 1 15:12:25 1997\r\nComment UniqueID 43064\r\nComment VMusage 30820 39997\r\nFontName Symbol\r\nFullName Symbol\r\nFamilyName Symbol\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet Special\r\nFontBBox -180 -293 1090 1010 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 001.008\r\nNotice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.\r\nEncodingScheme FontSpecific\r\nStdHW 92\r\nStdVW 85\r\nStartCharMetrics 190\r\nC 32 ; WX 250 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ;\r\nC 34 ; WX 713 ; N universal ; B 31 0 681 705 ;\r\nC 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ;\r\nC 36 ; WX 549 ; N existential ; B 25 0 478 707 ;\r\nC 37 ; WX 833 ; N percent ; B 63 -36 771 655 ;\r\nC 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ;\r\nC 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ;\r\nC 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ;\r\nC 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ;\r\nC 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ;\r\nC 43 ; WX 549 ; N plus ; B 10 0 539 533 ;\r\nC 44 ; WX 250 ; N comma ; B 56 -152 194 104 ;\r\nC 45 ; WX 549 ; N minus ; B 11 233 535 288 ;\r\nC 46 ; WX 250 ; N period ; B 69 -17 181 95 ;\r\nC 47 ; WX 278 ; N slash ; B 0 -18 254 646 ;\r\nC 48 ; WX 500 ; N zero ; B 24 -14 476 685 ;\r\nC 49 ; WX 500 ; N one ; B 117 0 390 673 ;\r\nC 50 ; WX 500 ; N two ; B 25 0 475 685 ;\r\nC 51 ; WX 500 ; N three ; B 43 -14 435 685 ;\r\nC 52 ; WX 500 ; N four ; B 15 0 469 685 ;\r\nC 53 ; WX 500 ; N five ; B 32 -14 445 690 ;\r\nC 54 ; WX 500 ; N six ; B 34 -14 468 685 ;\r\nC 55 ; WX 500 ; N seven ; B 24 -16 448 673 ;\r\nC 56 ; WX 500 ; N eight ; B 56 -14 445 685 ;\r\nC 57 ; WX 500 ; N nine ; B 30 -18 459 685 ;\r\nC 58 ; WX 278 ; N colon ; B 81 -17 193 460 ;\r\nC 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ;\r\nC 60 ; WX 549 ; N less ; B 26 0 523 522 ;\r\nC 61 ; WX 549 ; N equal ; B 11 141 537 390 ;\r\nC 62 ; WX 549 ; N greater ; B 26 0 523 522 ;\r\nC 63 ; WX 444 ; N question ; B 70 -17 412 686 ;\r\nC 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;\r\nC 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;\r\nC 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;\r\nC 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;\r\nC 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;\r\nC 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;\r\nC 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;\r\nC 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;\r\nC 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;\r\nC 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;\r\nC 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ;\r\nC 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;\r\nC 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;\r\nC 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;\r\nC 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ;\r\nC 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ;\r\nC 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;\r\nC 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ;\r\nC 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;\r\nC 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;\r\nC 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;\r\nC 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;\r\nC 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ;\r\nC 87 ; WX 768 ; N Omega ; B 34 0 736 688 ;\r\nC 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;\r\nC 89 ; WX 795 ; N Psi ; B 15 0 781 684 ;\r\nC 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;\r\nC 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ;\r\nC 92 ; WX 863 ; N therefore ; B 163 0 701 487 ;\r\nC 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ;\r\nC 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ;\r\nC 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ;\r\nC 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ;\r\nC 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ;\r\nC 98 ; WX 549 ; N beta ; B 61 -223 515 741 ;\r\nC 99 ; WX 549 ; N chi ; B 12 -231 522 499 ;\r\nC 100 ; WX 494 ; N delta ; B 40 -19 481 740 ;\r\nC 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ;\r\nC 102 ; WX 521 ; N phi ; B 28 -224 492 673 ;\r\nC 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ;\r\nC 104 ; WX 603 ; N eta ; B 0 -202 527 514 ;\r\nC 105 ; WX 329 ; N iota ; B 0 -17 301 503 ;\r\nC 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ;\r\nC 107 ; WX 549 ; N kappa ; B 33 0 558 501 ;\r\nC 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ;\r\nC 109 ; WX 576 ; N mu ; B 33 -223 567 500 ;\r\nC 110 ; WX 521 ; N nu ; B -9 -16 475 507 ;\r\nC 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ;\r\nC 112 ; WX 549 ; N pi ; B 10 -19 530 487 ;\r\nC 113 ; WX 521 ; N theta ; B 43 -17 485 690 ;\r\nC 114 ; WX 549 ; N rho ; B 50 -230 490 499 ;\r\nC 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ;\r\nC 116 ; WX 439 ; N tau ; B 10 -19 418 500 ;\r\nC 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ;\r\nC 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ;\r\nC 119 ; WX 686 ; N omega ; B 42 -17 684 500 ;\r\nC 120 ; WX 493 ; N xi ; B 27 -224 469 766 ;\r\nC 121 ; WX 686 ; N psi ; B 12 -228 701 500 ;\r\nC 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ;\r\nC 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ;\r\nC 124 ; WX 200 ; N bar ; B 65 -293 135 707 ;\r\nC 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ;\r\nC 126 ; WX 549 ; N similar ; B 17 203 529 307 ;\r\nC 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ;\r\nC 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ;\r\nC 162 ; WX 247 ; N minute ; B 27 459 228 735 ;\r\nC 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;\r\nC 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ;\r\nC 165 ; WX 713 ; N infinity ; B 26 124 688 404 ;\r\nC 166 ; WX 500 ; N florin ; B 2 -193 494 686 ;\r\nC 167 ; WX 753 ; N club ; B 86 -26 660 533 ;\r\nC 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;\r\nC 169 ; WX 753 ; N heart ; B 117 -33 631 532 ;\r\nC 170 ; WX 753 ; N spade ; B 113 -36 629 548 ;\r\nC 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ;\r\nC 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;\r\nC 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;\r\nC 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;\r\nC 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;\r\nC 176 ; WX 400 ; N degree ; B 50 385 350 685 ;\r\nC 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ;\r\nC 178 ; WX 411 ; N second ; B 20 459 413 737 ;\r\nC 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;\r\nC 180 ; WX 549 ; N multiply ; B 17 8 533 524 ;\r\nC 181 ; WX 713 ; N proportional ; B 27 123 639 404 ;\r\nC 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ;\r\nC 183 ; WX 460 ; N bullet ; B 50 113 410 473 ;\r\nC 184 ; WX 549 ; N divide ; B 10 71 536 456 ;\r\nC 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;\r\nC 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ;\r\nC 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ;\r\nC 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ;\r\nC 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;\r\nC 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;\r\nC 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;\r\nC 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ;\r\nC 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ;\r\nC 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ;\r\nC 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ;\r\nC 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ;\r\nC 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ;\r\nC 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ;\r\nC 199 ; WX 768 ; N intersection ; B 40 0 732 509 ;\r\nC 200 ; WX 768 ; N union ; B 40 -17 732 492 ;\r\nC 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;\r\nC 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;\r\nC 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;\r\nC 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;\r\nC 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;\r\nC 206 ; WX 713 ; N element ; B 45 0 505 468 ;\r\nC 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;\r\nC 208 ; WX 768 ; N angle ; B 26 0 738 673 ;\r\nC 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ;\r\nC 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ;\r\nC 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ;\r\nC 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ;\r\nC 213 ; WX 823 ; N product ; B 25 -101 803 751 ;\r\nC 214 ; WX 549 ; N radical ; B 10 -38 515 917 ;\r\nC 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ;\r\nC 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ;\r\nC 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ;\r\nC 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ;\r\nC 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ;\r\nC 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ;\r\nC 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ;\r\nC 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ;\r\nC 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ;\r\nC 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ;\r\nC 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ;\r\nC 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ;\r\nC 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ;\r\nC 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ;\r\nC 229 ; WX 713 ; N summation ; B 14 -108 695 752 ;\r\nC 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ;\r\nC 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ;\r\nC 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ;\r\nC 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ;\r\nC 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ;\r\nC 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ;\r\nC 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ;\r\nC 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ;\r\nC 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ;\r\nC 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ;\r\nC 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ;\r\nC 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;\r\nC 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ;\r\nC 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ;\r\nC 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ;\r\nC 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ;\r\nC 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ;\r\nC 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ;\r\nC 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ;\r\nC 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ;\r\nC 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ;\r\nC 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ;\r\nC 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ;\r\nC 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ;\r\nC -1 ; WX 790 ; N apple ; B 56 -3 733 808 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - }, - ZapfDingbats() { - return "StartFontMetrics 4.1\r\nComment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.\r\nComment Creation Date: Thu May 1 15:14:13 1997\r\nComment UniqueID 43082\r\nComment VMusage 45775 55535\r\nFontName ZapfDingbats\r\nFullName ITC Zapf Dingbats\r\nFamilyName ZapfDingbats\r\nWeight Medium\r\nItalicAngle 0\r\nIsFixedPitch false\r\nCharacterSet Special\r\nFontBBox -1 -143 981 820 \r\nUnderlinePosition -100\r\nUnderlineThickness 50\r\nVersion 002.000\r\nNotice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.\r\nEncodingScheme FontSpecific\r\nStdHW 28\r\nStdVW 90\r\nStartCharMetrics 202\r\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\r\nC 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;\r\nC 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;\r\nC 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;\r\nC 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;\r\nC 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;\r\nC 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;\r\nC 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;\r\nC 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;\r\nC 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;\r\nC 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;\r\nC 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;\r\nC 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;\r\nC 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;\r\nC 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;\r\nC 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;\r\nC 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;\r\nC 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;\r\nC 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;\r\nC 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;\r\nC 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;\r\nC 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;\r\nC 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;\r\nC 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;\r\nC 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;\r\nC 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;\r\nC 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;\r\nC 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;\r\nC 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;\r\nC 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;\r\nC 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;\r\nC 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;\r\nC 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;\r\nC 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;\r\nC 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;\r\nC 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;\r\nC 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;\r\nC 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;\r\nC 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;\r\nC 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;\r\nC 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;\r\nC 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;\r\nC 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;\r\nC 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;\r\nC 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;\r\nC 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;\r\nC 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;\r\nC 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;\r\nC 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;\r\nC 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;\r\nC 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;\r\nC 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;\r\nC 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;\r\nC 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;\r\nC 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;\r\nC 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;\r\nC 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;\r\nC 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;\r\nC 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;\r\nC 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;\r\nC 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;\r\nC 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;\r\nC 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;\r\nC 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;\r\nC 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;\r\nC 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;\r\nC 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;\r\nC 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;\r\nC 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;\r\nC 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;\r\nC 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;\r\nC 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;\r\nC 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;\r\nC 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;\r\nC 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;\r\nC 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;\r\nC 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;\r\nC 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;\r\nC 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;\r\nC 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;\r\nC 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;\r\nC 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;\r\nC 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;\r\nC 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;\r\nC 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;\r\nC 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;\r\nC 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;\r\nC 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;\r\nC 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;\r\nC 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;\r\nC 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;\r\nC 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;\r\nC 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;\r\nC 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;\r\nC 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;\r\nC 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;\r\nC 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;\r\nC 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;\r\nC 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;\r\nC 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;\r\nC 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;\r\nC 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;\r\nC 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;\r\nC 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;\r\nC 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;\r\nC 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;\r\nC 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;\r\nC 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;\r\nC 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;\r\nC 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;\r\nC 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;\r\nC 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;\r\nC 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;\r\nC 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;\r\nC 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;\r\nC 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;\r\nC 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;\r\nC 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;\r\nC 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;\r\nC 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;\r\nC 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;\r\nC 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;\r\nC 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;\r\nC 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;\r\nC 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;\r\nC 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;\r\nC 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;\r\nC 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;\r\nC 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;\r\nC 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;\r\nC 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;\r\nC 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;\r\nC 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;\r\nC 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;\r\nC 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;\r\nC 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;\r\nC 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;\r\nC 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;\r\nC 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;\r\nC 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;\r\nC 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;\r\nC 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;\r\nC 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;\r\nC 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;\r\nC 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;\r\nC 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;\r\nC 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;\r\nC 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;\r\nC 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;\r\nC 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;\r\nC 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;\r\nC 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;\r\nC 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;\r\nC 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;\r\nC 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;\r\nC 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;\r\nC 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;\r\nC 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;\r\nC 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;\r\nC 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;\r\nC 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;\r\nC 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;\r\nC 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;\r\nC 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;\r\nC 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;\r\nC 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;\r\nC 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;\r\nC 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;\r\nC 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;\r\nC 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;\r\nC 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;\r\nC 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;\r\nC 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;\r\nC 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;\r\nC 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;\r\nC 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;\r\nC 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;\r\nC 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;\r\nC 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;\r\nC 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;\r\nC 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;\r\nC 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;\r\nC 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;\r\nC 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;\r\nC 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;\r\nC 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;\r\nC 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;\r\nC 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;\r\nC 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;\r\nC 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;\r\nC 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;\r\nC 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;\r\nC 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;\r\nC 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;\r\nC 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;\r\nC 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;\r\nC 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;\r\nC 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;\r\nC 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;\r\nC 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;\r\nC 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;\r\nC 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;\r\nEndCharMetrics\r\nEndFontMetrics\r\n"; - } -}; -class StandardFont extends PDFFont { - constructor(document, name, id) { - super(); - this.document = document; - this.name = name; - this.id = id; - this.font = new AFMFont(STANDARD_FONTS[this.name]()); - ({ - ascender: this.ascender, - descender: this.descender, - bbox: this.bbox, - lineGap: this.lineGap, - xHeight: this.xHeight, - capHeight: this.capHeight - } = this.font); - } - embed() { - this.dictionary.data = { - Type: 'Font', - BaseFont: this.name, - Subtype: 'Type1', - Encoding: 'WinAnsiEncoding' - }; - return this.dictionary.end(); - } - encode(text) { - const encoded = this.font.encodeText(text); - const glyphs = this.font.glyphsForString(`${text}`); - const advances = this.font.advancesForGlyphs(glyphs); - const positions = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - positions.push({ - xAdvance: advances[i], - yAdvance: 0, - xOffset: 0, - yOffset: 0, - advanceWidth: this.font.widthOfGlyph(glyph) - }); - } - return [encoded, positions]; - } - widthOfString(string, size) { - const glyphs = this.font.glyphsForString(`${string}`); - const advances = this.font.advancesForGlyphs(glyphs); - let width = 0; - for (let advance of advances) { - width += advance; - } - const scale = size / 1000; - return width * scale; - } - static isStandardFont(name) { - return name in STANDARD_FONTS; - } -} - -const toHex = function (num) { - return `0000${num.toString(16)}`.slice(-4); -}; -class EmbeddedFont extends PDFFont { - constructor(document, font, id) { - super(); - this.document = document; - this.font = font; - this.id = id; - this.subset = this.font.createSubset(); - this.unicode = [[0]]; - this.widths = [this.font.getGlyph(0).advanceWidth]; - this.name = this.font.postscriptName; - this.scale = 1000 / this.font.unitsPerEm; - this.ascender = this.font.ascent * this.scale; - this.descender = this.font.descent * this.scale; - this.xHeight = this.font.xHeight * this.scale; - this.capHeight = this.font.capHeight * this.scale; - this.lineGap = this.font.lineGap * this.scale; - this.bbox = this.font.bbox; - if (document.options.fontLayoutCache !== false) { - this.layoutCache = Object.create(null); - } - } - layoutRun(text, features) { - const run = this.font.layout(text, features); - for (let i = 0; i < run.positions.length; i++) { - const position = run.positions[i]; - for (let key in position) { - position[key] *= this.scale; - } - position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; - } - return run; - } - layoutCached(text) { - if (!this.layoutCache) { - return this.layoutRun(text); - } - let cached; - if (cached = this.layoutCache[text]) { - return cached; - } - const run = this.layoutRun(text); - this.layoutCache[text] = run; - return run; - } - layout(text, features, onlyWidth) { - if (features) { - return this.layoutRun(text, features); - } - let glyphs = onlyWidth ? null : []; - let positions = onlyWidth ? null : []; - let advanceWidth = 0; - let last = 0; - let index = 0; - while (index <= text.length) { - var needle; - if (index === text.length && last < index || (needle = text.charAt(index), [' ', '\t'].includes(needle))) { - const run = this.layoutCached(text.slice(last, ++index)); - if (!onlyWidth) { - glyphs = glyphs.concat(run.glyphs); - positions = positions.concat(run.positions); - } - advanceWidth += run.advanceWidth; - last = index; - } else { - index++; - } - } - return { - glyphs, - positions, - advanceWidth - }; - } - encode(text, features) { - const { - glyphs, - positions - } = this.layout(text, features); - const res = []; - for (let i = 0; i < glyphs.length; i++) { - const glyph = glyphs[i]; - const gid = this.subset.includeGlyph(glyph.id); - res.push(`0000${gid.toString(16)}`.slice(-4)); - if (this.widths[gid] == null) { - this.widths[gid] = glyph.advanceWidth * this.scale; - } - if (this.unicode[gid] == null) { - this.unicode[gid] = glyph.codePoints; - } - } - return [res, positions]; - } - widthOfString(string, size, features) { - const width = this.layout(string, features, true).advanceWidth; - const scale = size / 1000; - return width * scale; - } - embed() { - const isCFF = this.subset.cff != null; - const fontFile = this.document.ref(); - if (isCFF) { - fontFile.data.Subtype = 'CIDFontType0C'; - } - fontFile.end(this.subset.encode()); - const familyClass = ((this.font['OS/2'] != null ? this.font['OS/2'].sFamilyClass : undefined) || 0) >> 8; - let flags = 0; - if (this.font.post.isFixedPitch) { - flags |= 1 << 0; - } - if (1 <= familyClass && familyClass <= 7) { - flags |= 1 << 1; - } - flags |= 1 << 2; - if (familyClass === 10) { - flags |= 1 << 3; - } - if (this.font.head.macStyle.italic) { - flags |= 1 << 6; - } - const tag = [1, 2, 3, 4, 5, 6].map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17)).join(''); - const name = tag + '+' + this.font.postscriptName?.replaceAll(' ', '_'); - const { - bbox - } = this.font; - const descriptor = this.document.ref({ - Type: 'FontDescriptor', - FontName: name, - Flags: flags, - FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], - ItalicAngle: this.font.italicAngle, - Ascent: this.ascender, - Descent: this.descender, - CapHeight: (this.font.capHeight || this.font.ascent) * this.scale, - XHeight: (this.font.xHeight || 0) * this.scale, - StemV: 0 - }); - if (isCFF) { - descriptor.data.FontFile3 = fontFile; - } else { - descriptor.data.FontFile2 = fontFile; - } - if (this.document.subset && this.document.subset === 1) { - const CIDSet = Buffer.from('FFFFFFFFC0', 'hex'); - const CIDSetRef = this.document.ref(); - CIDSetRef.write(CIDSet); - CIDSetRef.end(); - descriptor.data.CIDSet = CIDSetRef; - } - descriptor.end(); - const descendantFontData = { - Type: 'Font', - Subtype: 'CIDFontType0', - BaseFont: name, - CIDSystemInfo: { - Registry: new String('Adobe'), - Ordering: new String('Identity'), - Supplement: 0 - }, - FontDescriptor: descriptor, - W: [0, this.widths] - }; - if (!isCFF) { - descendantFontData.Subtype = 'CIDFontType2'; - descendantFontData.CIDToGIDMap = 'Identity'; - } - const descendantFont = this.document.ref(descendantFontData); - descendantFont.end(); - this.dictionary.data = { - Type: 'Font', - Subtype: 'Type0', - BaseFont: name, - Encoding: 'Identity-H', - DescendantFonts: [descendantFont], - ToUnicode: this.toUnicodeCmap() - }; - return this.dictionary.end(); - } - toUnicodeCmap() { - const cmap = this.document.ref(); - const entries = []; - for (let codePoints of this.unicode) { - const encoded = []; - for (let value of codePoints) { - if (value > 0xffff) { - value -= 0x10000; - encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); - value = 0xdc00 | value & 0x3ff; - } - encoded.push(toHex(value)); - } - entries.push(`<${encoded.join(' ')}>`); - } - const chunkSize = 256; - const chunks = Math.ceil(entries.length / chunkSize); - const ranges = []; - for (let i = 0; i < chunks; i++) { - const start = i * chunkSize; - const end = Math.min((i + 1) * chunkSize, entries.length); - ranges.push(`<${toHex(start)}> <${toHex(end - 1)}> [${entries.slice(start, end).join(' ')}]`); - } - cmap.end(`\ -/CIDInit /ProcSet findresource begin -12 dict begin -begincmap -/CIDSystemInfo << - /Registry (Adobe) - /Ordering (UCS) - /Supplement 0 ->> def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<0000> -endcodespacerange -1 beginbfrange -${ranges.join('\n')} -endbfrange -endcmap -CMapName currentdict /CMap defineresource pop -end -end\ -`); - return cmap; - } -} - -class PDFFontFactory { - static open(document, src, family, id) { - let font; - if (typeof src === 'string') { - if (StandardFont.isStandardFont(src)) { - return new StandardFont(document, src, id); - } - src = fs.readFileSync(src); - } - if (src instanceof Uint8Array) { - font = fontkit.create(src, family); - } else if (src instanceof ArrayBuffer) { - font = fontkit.create(new Uint8Array(src), family); - } - if (font == null) { - throw new Error('Not a supported font format or standard PDF font.'); - } - return new EmbeddedFont(document, font, id); - } -} - -const isEqualFont = (font1, font2) => { - if (font1.font._tables?.head?.checkSumAdjustment !== font2.font._tables?.head?.checkSumAdjustment) { - return false; - } - if (JSON.stringify(font1.font._tables?.name?.records) !== JSON.stringify(font2.font._tables?.name?.records)) { - return false; - } - return true; -}; -var FontsMixin = { - initFonts(defaultFont = 'Helvetica', defaultFontFamily = null, defaultFontSize = 12) { - this._fontFamilies = {}; - this._fontCount = 0; - this._fontSource = defaultFont; - this._fontFamily = defaultFontFamily; - this._fontSize = defaultFontSize; - this._font = null; - this._remSize = defaultFontSize; - this._registeredFonts = {}; - if (defaultFont) { - this.font(defaultFont, defaultFontFamily); - } - }, - font(src, family, size) { - let cacheKey, font; - if (typeof family === 'number') { - size = family; - family = null; - } - if (typeof src === 'string' && this._registeredFonts[src]) { - cacheKey = src; - ({ - src, - family - } = this._registeredFonts[src]); - } else { - cacheKey = family || src; - if (typeof cacheKey !== 'string') { - cacheKey = null; - } - } - this._fontSource = src; - this._fontFamily = family; - if (size != null) { - this.fontSize(size); - } - if (font = this._fontFamilies[cacheKey]) { - this._font = font; - return this; - } - const id = `F${++this._fontCount}`; - this._font = PDFFontFactory.open(this, src, family, id); - if ((font = this._fontFamilies[this._font.name]) && isEqualFont(this._font, font)) { - this._font = font; - return this; - } - if (cacheKey) { - this._fontFamilies[cacheKey] = this._font; - } - if (this._font.name) { - this._fontFamilies[this._font.name] = this._font; - } - return this; - }, - fontSize(_fontSize) { - this._fontSize = this.sizeToPoint(_fontSize); - return this; - }, - currentLineHeight(includeGap) { - return this._font.lineHeight(this._fontSize, includeGap); - }, - registerFont(name, src, family) { - this._registeredFonts[name] = { - src, - family - }; - return this; - }, - sizeToPoint(size, defaultValue = 0, page = this.page, percentageWidth = undefined) { - if (!percentageWidth) percentageWidth = this._fontSize; - if (typeof defaultValue !== 'number') defaultValue = this.sizeToPoint(defaultValue); - if (size === undefined) return defaultValue; - if (typeof size === 'number') return size; - if (typeof size === 'boolean') return Number(size); - const match = String(size).match(/((\d+)?(\.\d+)?)(em|in|px|cm|mm|pc|ex|ch|rem|vw|vh|vmin|vmax|%|pt)?/); - if (!match) throw new Error(`Unsupported size '${size}'`); - let multiplier; - switch (match[4]) { - case 'em': - multiplier = this._fontSize; - break; - case 'in': - multiplier = IN_TO_PT; - break; - case 'px': - multiplier = PX_TO_IN * IN_TO_PT; - break; - case 'cm': - multiplier = CM_TO_IN * IN_TO_PT; - break; - case 'mm': - multiplier = MM_TO_CM * CM_TO_IN * IN_TO_PT; - break; - case 'pc': - multiplier = PC_TO_PT; - break; - case 'ex': - multiplier = this.currentLineHeight(); - break; - case 'ch': - multiplier = this.widthOfString('0'); - break; - case 'rem': - multiplier = this._remSize; - break; - case 'vw': - multiplier = page.width / 100; - break; - case 'vh': - multiplier = page.height / 100; - break; - case 'vmin': - multiplier = Math.min(page.width, page.height) / 100; - break; - case 'vmax': - multiplier = Math.max(page.width, page.height) / 100; - break; - case '%': - multiplier = percentageWidth / 100; - break; - case 'pt': - default: - multiplier = 1; - } - return multiplier * Number(match[1]); - } -}; - -const SOFT_HYPHEN = '\u00AD'; -const HYPHEN = '-'; -class LineWrapper extends events.EventEmitter { - constructor(document, options) { - super(); - this.document = document; - this.horizontalScaling = options.horizontalScaling || 100; - this.indent = (options.indent || 0) * this.horizontalScaling / 100; - this.characterSpacing = (options.characterSpacing || 0) * this.horizontalScaling / 100; - this.wordSpacing = (options.wordSpacing === 0) * this.horizontalScaling / 100; - this.columns = options.columns || 1; - this.columnGap = (options.columnGap != null ? options.columnGap : 18) * this.horizontalScaling / 100; - this.lineWidth = (options.width * this.horizontalScaling / 100 - this.columnGap * (this.columns - 1)) / this.columns; - this.spaceLeft = this.lineWidth; - this.startX = this.document.x; - this.startY = this.document.y; - this.column = 1; - this.ellipsis = options.ellipsis; - this.continuedX = 0; - this.features = options.features; - if (options.height != null) { - this.height = options.height; - this.maxY = PDFNumber(this.startY + options.height); - } else { - this.maxY = PDFNumber(this.document.page.maxY()); - } - this.on('firstLine', options => { - const indent = this.continuedX || this.indent; - this.document.x += indent; - this.lineWidth -= indent; - if (options.indentAllLines) { - return; - } - this.once('line', () => { - this.document.x -= indent; - this.lineWidth += indent; - if (options.continued && !this.continuedX) { - this.continuedX = this.indent; - } - if (!options.continued) { - this.continuedX = 0; - } - }); - }); - this.on('lastLine', options => { - const { - align - } = options; - if (align === 'justify') { - options.align = 'left'; - } - this.lastLine = true; - this.once('line', () => { - this.document.y += options.paragraphGap || 0; - options.align = align; - return this.lastLine = false; - }); - }); - } - wordWidth(word) { - return PDFNumber(this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing); - } - canFit(word, w) { - if (word[word.length - 1] != SOFT_HYPHEN) { - return w <= this.spaceLeft; - } - return w + this.wordWidth(HYPHEN) <= this.spaceLeft; - } - eachWord(text, fn) { - let bk; - const breaker = new LineBreaker(text); - let last = null; - const wordWidths = Object.create(null); - while (bk = breaker.nextBreak()) { - var shouldContinue; - let word = text.slice((last != null ? last.position : undefined) || 0, bk.position); - let w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); - if (w > this.lineWidth + this.continuedX) { - let lbk = last; - const fbk = {}; - while (word.length) { - var l, mightGrow; - if (w > this.spaceLeft) { - l = Math.ceil(this.spaceLeft / (w / word.length)); - w = this.wordWidth(word.slice(0, l)); - mightGrow = w <= this.spaceLeft && l < word.length; - } else { - l = word.length; - } - let mustShrink = w > this.spaceLeft && l > 0; - while (mustShrink || mightGrow) { - if (mustShrink) { - w = this.wordWidth(word.slice(0, --l)); - mustShrink = w > this.spaceLeft && l > 0; - } else { - w = this.wordWidth(word.slice(0, ++l)); - mustShrink = w > this.spaceLeft && l > 0; - mightGrow = w <= this.spaceLeft && l < word.length; - } - } - if (l === 0 && this.spaceLeft === this.lineWidth) { - l = 1; - } - fbk.required = bk.required || l < word.length; - shouldContinue = fn(word.slice(0, l), w, fbk, lbk); - lbk = { - required: false - }; - word = word.slice(l); - w = this.wordWidth(word); - if (shouldContinue === false) { - break; - } - } - } else { - shouldContinue = fn(word, w, bk, last); - } - if (shouldContinue === false) { - break; - } - last = bk; - } - } - wrap(text, options) { - this.horizontalScaling = options.horizontalScaling || 100; - if (options.indent != null) { - this.indent = options.indent * this.horizontalScaling / 100; - } - if (options.characterSpacing != null) { - this.characterSpacing = options.characterSpacing * this.horizontalScaling / 100; - } - if (options.wordSpacing != null) { - this.wordSpacing = options.wordSpacing * this.horizontalScaling / 100; - } - if (options.ellipsis != null) { - this.ellipsis = options.ellipsis; - } - const nextY = this.document.y + this.document.currentLineHeight(true); - if (this.document.y > this.maxY || nextY > this.maxY) { - this.nextSection(); - } - let buffer = ''; - let textWidth = 0; - let wc = 0; - let lc = 0; - let { - y - } = this.document; - const emitLine = () => { - options.textWidth = textWidth + this.wordSpacing * (wc - 1); - options.wordCount = wc; - options.lineWidth = this.lineWidth; - ({ - y - } = this.document); - this.emit('line', buffer, options, this); - return lc++; - }; - this.emit('sectionStart', options, this); - this.eachWord(text, (word, w, bk, last) => { - if (last == null || last.required) { - this.emit('firstLine', options, this); - this.spaceLeft = this.lineWidth; - } - if (this.canFit(word, w)) { - buffer += word; - textWidth += w; - wc++; - } - if (bk.required || !this.canFit(word, w)) { - const lh = this.document.currentLineHeight(true); - if (this.height != null && this.ellipsis && PDFNumber(this.document.y + lh * 2) > this.maxY && this.column >= this.columns) { - if (this.ellipsis === true) { - this.ellipsis = '…'; - } - buffer = buffer.replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - while (buffer && textWidth > this.lineWidth) { - buffer = buffer.slice(0, -1).replace(/\s+$/, ''); - textWidth = this.wordWidth(buffer + this.ellipsis); - } - if (textWidth <= this.lineWidth) { - buffer = buffer + this.ellipsis; - } - textWidth = this.wordWidth(buffer); - } - if (bk.required) { - if (w > this.spaceLeft) { - emitLine(); - buffer = word; - textWidth = w; - wc = 1; - } - this.emit('lastLine', options, this); - } - if (buffer[buffer.length - 1] == SOFT_HYPHEN) { - buffer = buffer.slice(0, -1) + HYPHEN; - this.spaceLeft -= this.wordWidth(HYPHEN); - } - emitLine(); - if (PDFNumber(this.document.y + lh) > this.maxY) { - this.emit('sectionEnd', options, this); - const shouldContinue = this.nextSection(); - if (!shouldContinue) { - wc = 0; - buffer = ''; - return false; - } - this.emit('sectionStart', options, this); - } - if (bk.required) { - this.spaceLeft = this.lineWidth; - buffer = ''; - textWidth = 0; - return wc = 0; - } else { - this.spaceLeft = this.lineWidth - w; - buffer = word; - textWidth = w; - return wc = 1; - } - } else { - return this.spaceLeft -= w; - } - }); - if (wc > 0) { - this.emit('lastLine', options, this); - emitLine(); - } - this.emit('sectionEnd', options, this); - if (options.continued === true) { - if (lc > 1) { - this.continuedX = 0; - } - this.continuedX += options.textWidth || 0; - this.document.y = y; - } else { - this.document.x = this.startX; - } - } - nextSection(options) { - if (++this.column > this.columns) { - if (this.height != null) { - return false; - } - this.document.continueOnNewPage(); - this.column = 1; - this.startY = this.document.page.margins.top; - this.maxY = this.document.page.maxY(); - this.document.x = this.startX; - if (this.document._fillColor) { - this.document.fillColor(...this.document._fillColor); - } - this.emit('pageBreak', options, this); - } else { - this.document.x += this.lineWidth + this.columnGap; - this.document.y = this.startY; - this.emit('columnBreak', options, this); - } - return true; - } -} - -const { - number -} = PDFObject; -function formatListLabel(n, listType) { - if (listType === 'numbered') { - return `${n}.`; - } - var letter = String.fromCharCode((n - 1) % 26 + 65); - var times = Math.floor((n - 1) / 26 + 1); - var text = Array(times + 1).join(letter); - return `${text}.`; -} -var TextMixin = { - initText() { - this._line = this._line.bind(this); - this.x = 0; - this.y = 0; - this._lineGap = 0; - }, - lineGap(_lineGap) { - this._lineGap = _lineGap; - return this; - }, - moveDown(lines) { - if (lines == null) { - lines = 1; - } - this.y += this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - moveUp(lines) { - if (lines == null) { - lines = 1; - } - this.y -= this.currentLineHeight(true) * lines + this._lineGap; - return this; - }, - _text(text, x, y, options, lineCallback) { - options = this._initOptions(x, y, options); - text = text == null ? '' : `${text}`; - if (options.wordSpacing) { - text = text.replace(/\s{2,}/g, ' '); - } - const addStructure = () => { - if (options.structParent) { - options.structParent.add(this.struct(options.structType || 'P', [this.markStructureContent(options.structType || 'P')])); - } - }; - if (options.rotation !== 0) { - this.save(); - this.rotate(-options.rotation, { - origin: [this.x, this.y] - }); - } - if (options.width) { - let wrapper = this._wrapper; - if (!wrapper) { - wrapper = new LineWrapper(this, options); - wrapper.on('line', lineCallback); - wrapper.on('firstLine', addStructure); - } - this._wrapper = options.continued ? wrapper : null; - this._textOptions = options.continued ? options : null; - wrapper.wrap(text, options); - } else { - for (let line of text.split('\n')) { - addStructure(); - lineCallback(line, options); - } - } - if (options.rotation !== 0) this.restore(); - return this; - }, - text(text, x, y, options) { - return this._text(text, x, y, options, this._line); - }, - widthOfString(string, options = {}) { - const horizontalScaling = options.horizontalScaling || 100; - return (this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1)) * horizontalScaling / 100; - }, - boundsOfString(string, x, y, options) { - options = this._initOptions(x, y, options); - ({ - x, - y - } = this); - const lineGap = options.lineGap ?? this._lineGap ?? 0; - const lineHeight = this.currentLineHeight(true) + lineGap; - let contentWidth = 0; - string = String(string ?? ''); - if (options.wordSpacing) { - string = string.replace(/\s{2,}/g, ' '); - } - if (options.width) { - let wrapper = new LineWrapper(this, options); - wrapper.on('line', (text, options) => { - this.y += lineHeight; - text = text.replace(/\n/g, ''); - if (text.length) { - let wordSpacing = options.wordSpacing ?? 0; - const characterSpacing = options.characterSpacing ?? 0; - if (options.width && options.align === 'justify') { - const words = text.trim().split(/\s+/); - const textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - const spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - } - contentWidth = Math.max(contentWidth, options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1)); - } - }); - wrapper.wrap(string, options); - } else { - for (let line of string.split('\n')) { - const lineWidth = this.widthOfString(line, options); - this.y += lineHeight; - contentWidth = Math.max(contentWidth, lineWidth); - } - } - let contentHeight = this.y - y; - if (options.height) contentHeight = Math.min(contentHeight, options.height); - this.x = x; - this.y = y; - if (options.rotation === 0) { - return { - x, - y, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 90) { - return { - x: x, - y: y - contentWidth, - width: contentHeight, - height: contentWidth - }; - } else if (options.rotation === 180) { - return { - x: x - contentWidth, - y: y - contentHeight, - width: contentWidth, - height: contentHeight - }; - } else if (options.rotation === 270) { - return { - x: x - contentHeight, - y: y, - width: contentHeight, - height: contentWidth - }; - } - const cos = cosine(options.rotation); - const sin = sine(options.rotation); - const x1 = x; - const y1 = y; - const x2 = x + contentWidth * cos; - const y2 = y - contentWidth * sin; - const x3 = x + contentWidth * cos + contentHeight * sin; - const y3 = y - contentWidth * sin + contentHeight * cos; - const x4 = x + contentHeight * sin; - const y4 = y + contentHeight * cos; - const xMin = Math.min(x1, x2, x3, x4); - const xMax = Math.max(x1, x2, x3, x4); - const yMin = Math.min(y1, y2, y3, y4); - const yMax = Math.max(y1, y2, y3, y4); - return { - x: xMin, - y: yMin, - width: xMax - xMin, - height: yMax - yMin - }; - }, - heightOfString(text, options) { - const { - x, - y - } = this; - options = this._initOptions(options); - options.height = Infinity; - const lineGap = options.lineGap || this._lineGap || 0; - this._text(text, this.x, this.y, options, () => { - this.y += this.currentLineHeight(true) + lineGap; - }); - const height = this.y - y; - this.x = x; - this.y = y; - return height; - }, - list(list, x, y, options) { - options = this._initOptions(x, y, options); - const listType = options.listType || 'bullet'; - const unit = Math.round(this._font.ascender / 1000 * this._fontSize); - const midLine = unit / 2; - const r = options.bulletRadius || unit / 3; - const indent = options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2); - const itemIndent = options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2); - let level = 1; - const items = []; - const levels = []; - const numbers = []; - var flatten = function (list) { - let n = 1; - for (let i = 0; i < list.length; i++) { - const item = list[i]; - if (Array.isArray(item)) { - level++; - flatten(item); - level--; - } else { - items.push(item); - levels.push(level); - if (listType !== 'bullet') { - numbers.push(n++); - } - } - } - }; - flatten(list); - const drawListItem = function (listItem, i) { - const wrapper = new LineWrapper(this, options); - wrapper.on('line', this._line); - level = 1; - wrapper.once('firstLine', () => { - let item, itemType, labelType, bodyType; - if (options.structParent) { - if (options.structTypes) { - [itemType, labelType, bodyType] = options.structTypes; - } else { - [itemType, labelType, bodyType] = ['LI', 'Lbl', 'LBody']; - } - } - if (itemType) { - item = this.struct(itemType); - options.structParent.add(item); - } else if (options.structParent) { - item = options.structParent; - } - let l; - if ((l = levels[i++]) !== level) { - const diff = itemIndent * (l - level); - this.x += diff; - wrapper.lineWidth -= diff; - level = l; - } - if (item && (labelType || bodyType)) { - item.add(this.struct(labelType || bodyType, [this.markStructureContent(labelType || bodyType)])); - } - switch (listType) { - case 'bullet': - this.circle(this.x - indent + r, this.y + midLine, r); - this.fill(); - break; - case 'numbered': - case 'lettered': - var text = formatListLabel(numbers[i - 1], listType); - this._fragment(text, this.x - indent, this.y, options); - break; - } - if (item && labelType && bodyType) { - item.add(this.struct(bodyType, [this.markStructureContent(bodyType)])); - } - if (item && item !== options.structParent) { - item.end(); - } - }); - wrapper.on('sectionStart', () => { - const pos = indent + itemIndent * (level - 1); - this.x += pos; - wrapper.lineWidth -= pos; - }); - wrapper.on('sectionEnd', () => { - const pos = indent + itemIndent * (level - 1); - this.x -= pos; - wrapper.lineWidth += pos; - }); - wrapper.wrap(listItem, options); - }; - for (let i = 0; i < items.length; i++) { - drawListItem.call(this, items[i], i); - } - return this; - }, - _initOptions(x = {}, y, options = {}) { - if (typeof x === 'object') { - options = x; - x = null; - } - const result = Object.assign({}, options); - if (this._textOptions) { - for (let key in this._textOptions) { - const val = this._textOptions[key]; - if (key !== 'continued') { - if (result[key] === undefined) { - result[key] = val; - } - } - } - } - if (x != null) { - this.x = x; - } - if (y != null) { - this.y = y; - } - if (result.lineBreak !== false) { - if (result.width == null) { - result.width = this.page.width - this.x - this.page.margins.right; - } - result.width = Math.max(result.width, 0); - } - if (!result.columns) { - result.columns = 0; - } - if (result.columnGap == null) { - result.columnGap = 18; - } - result.rotation = Number(options.rotation ?? 0) % 360; - if (result.rotation < 0) result.rotation += 360; - return result; - }, - _line(text, options = {}, wrapper) { - this._fragment(text, this.x, this.y, options); - if (wrapper) { - const lineGap = options.lineGap || this._lineGap || 0; - this.y += this.currentLineHeight(true) + lineGap; - } else { - this.x += this.widthOfString(text, options); - } - }, - _fragment(text, x, y, options) { - let dy, encoded, i, positions, textWidth, words; - text = `${text}`.replace(/\n/g, ''); - if (text.length === 0) { - return; - } - const align = options.align || 'left'; - let wordSpacing = options.wordSpacing || 0; - const characterSpacing = options.characterSpacing || 0; - const horizontalScaling = options.horizontalScaling || 100; - if (options.width) { - switch (align) { - case 'right': - textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); - x += options.lineWidth - textWidth; - break; - case 'center': - x += options.lineWidth / 2 - options.textWidth / 2; - break; - case 'justify': - words = text.trim().split(/\s+/); - textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); - var spaceWidth = this.widthOfString(' ') + characterSpacing; - wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth); - break; - } - } - if (typeof options.baseline === 'number') { - dy = -options.baseline; - } else { - switch (options.baseline) { - case 'svg-middle': - dy = 0.5 * this._font.xHeight; - break; - case 'middle': - case 'svg-central': - dy = 0.5 * (this._font.descender + this._font.ascender); - break; - case 'bottom': - case 'ideographic': - dy = this._font.descender; - break; - case 'alphabetic': - dy = 0; - break; - case 'mathematical': - dy = 0.5 * this._font.ascender; - break; - case 'hanging': - dy = 0.8 * this._font.ascender; - break; - case 'top': - dy = this._font.ascender; - break; - default: - dy = this._font.ascender; - } - dy = dy / 1000 * this._fontSize; - } - const renderedWidth = options.textWidth + wordSpacing * (options.wordCount - 1) + characterSpacing * (text.length - 1); - if (options.link != null) { - this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); - } - if (options.goTo != null) { - this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (options.underline) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() - lineWidth; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - if (options.strike) { - this.save(); - if (!options.stroke) { - this.strokeColor(...(this._fillColor || [])); - } - const lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); - this.lineWidth(lineWidth); - let lineY = y + this.currentLineHeight() / 2; - this.moveTo(x, lineY); - this.lineTo(x + renderedWidth, lineY); - this.stroke(); - this.restore(); - } - this.save(); - if (options.oblique) { - let skew; - if (typeof options.oblique === 'number') { - skew = -Math.tan(options.oblique * Math.PI / 180); - } else { - skew = -0.25; - } - this.transform(1, 0, 0, 1, x, y); - this.transform(1, 0, skew, 1, -skew * dy, 0); - this.transform(1, 0, 0, 1, -x, -y); - } - this.transform(1, 0, 0, -1, 0, this.page.height); - y = this.page.height - y - dy; - if (this.page.fonts[this._font.id] == null) { - this.page.fonts[this._font.id] = this._font.ref(); - } - this.addContent('BT'); - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`); - const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; - if (mode) { - this.addContent(`${mode} Tr`); - } - if (characterSpacing) { - this.addContent(`${number(characterSpacing)} Tc`); - } - if (horizontalScaling !== 100) { - this.addContent(`${horizontalScaling} Tz`); - } - if (wordSpacing) { - words = text.trim().split(/\s+/); - wordSpacing += this.widthOfString(' ') + characterSpacing; - wordSpacing *= 1000 / this._fontSize; - encoded = []; - positions = []; - for (let word of words) { - const [encodedWord, positionsWord] = this._font.encode(word, options.features); - encoded = encoded.concat(encodedWord); - positions = positions.concat(positionsWord); - const space = {}; - const object = positions[positions.length - 1]; - for (let key in object) { - const val = object[key]; - space[key] = val; - } - space.xAdvance += wordSpacing; - positions[positions.length - 1] = space; - } - } else { - [encoded, positions] = this._font.encode(text, options.features); - } - const scale = this._fontSize / 1000; - const commands = []; - let last = 0; - let hadOffset = false; - const addSegment = cur => { - if (last < cur) { - const hex = encoded.slice(last, cur).join(''); - const advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; - commands.push(`<${hex}> ${number(-advance)}`); - } - last = cur; - }; - const flush = i => { - addSegment(i); - if (commands.length > 0) { - this.addContent(`[${commands.join(' ')}] TJ`); - commands.length = 0; - } - }; - for (i = 0; i < positions.length; i++) { - const pos = positions[i]; - if (pos.xOffset || pos.yOffset) { - flush(i); - this.addContent(`1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(y + pos.yOffset * scale)} Tm`); - flush(i + 1); - hadOffset = true; - } else { - if (hadOffset) { - this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`); - hadOffset = false; - } - if (pos.xAdvance - pos.advanceWidth !== 0) { - addSegment(i + 1); - } - } - x += pos.xAdvance * scale; - } - flush(i); - this.addContent('ET'); - this.restore(); - } -}; - -const MARKERS = [0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf]; -const COLOR_SPACE_MAP = { - 1: 'DeviceGray', - 3: 'DeviceRGB', - 4: 'DeviceCMYK' -}; -class JPEG { - constructor(data, label) { - let marker; - this.data = data; - this.label = label; - if (this.data.readUInt16BE(0) !== 0xffd8) { - throw 'SOI not found in JPEG'; - } - this.orientation = exif.fromBuffer(this.data).Orientation || 1; - let pos = 2; - while (pos < this.data.length) { - marker = this.data.readUInt16BE(pos); - pos += 2; - if (MARKERS.includes(marker)) { - break; - } - pos += this.data.readUInt16BE(pos); - } - if (!MARKERS.includes(marker)) { - throw 'Invalid JPEG.'; - } - pos += 2; - this.bits = this.data[pos++]; - this.height = this.data.readUInt16BE(pos); - pos += 2; - this.width = this.data.readUInt16BE(pos); - pos += 2; - const channels = this.data[pos++]; - this.colorSpace = COLOR_SPACE_MAP[channels]; - this.obj = null; - } - embed(document) { - if (this.obj) { - return; - } - this.obj = document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: this.bits, - Width: this.width, - Height: this.height, - ColorSpace: this.colorSpace, - Filter: 'DCTDecode' - }); - if (this.colorSpace === 'DeviceCMYK') { - this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; - } - this.obj.end(this.data); - return this.data = null; - } -} - -class PNGImage { - constructor(data, label) { - this.label = label; - this.image = new PNG(data); - this.width = this.image.width; - this.height = this.image.height; - this.imgData = this.image.imgData; - this.obj = null; - } - embed(document) { - let dataDecoded = false; - this.document = document; - if (this.obj) { - return; - } - const hasAlphaChannel = this.image.hasAlphaChannel; - const isInterlaced = this.image.interlaceMethod === 1; - this.obj = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits, - Width: this.width, - Height: this.height, - Filter: 'FlateDecode' - }); - if (!hasAlphaChannel) { - const params = this.document.ref({ - Predictor: isInterlaced ? 1 : 15, - Colors: this.image.colors, - BitsPerComponent: this.image.bits, - Columns: this.width - }); - this.obj.data['DecodeParms'] = params; - params.end(); - } - if (this.image.palette.length === 0) { - this.obj.data['ColorSpace'] = this.image.colorSpace; - } else { - const palette = this.document.ref(); - palette.end(Buffer.from(this.image.palette)); - this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', this.image.palette.length / 3 - 1, palette]; - } - if (this.image.transparency.grayscale != null) { - const val = this.image.transparency.grayscale; - this.obj.data['Mask'] = [val, val]; - } else if (this.image.transparency.rgb) { - const { - rgb - } = this.image.transparency; - const mask = []; - for (let x of rgb) { - mask.push(x, x); - } - this.obj.data['Mask'] = mask; - } else if (this.image.transparency.indexed) { - dataDecoded = true; - return this.loadIndexedAlphaChannel(); - } else if (hasAlphaChannel) { - dataDecoded = true; - return this.splitAlphaChannel(); - } - if (isInterlaced && !dataDecoded) { - return this.decodeData(); - } - this.finalize(); - } - finalize() { - if (this.alphaChannel) { - const sMask = this.document.ref({ - Type: 'XObject', - Subtype: 'Image', - Height: this.height, - Width: this.width, - BitsPerComponent: 8, - Filter: 'FlateDecode', - ColorSpace: 'DeviceGray', - Decode: [0, 1] - }); - sMask.end(this.alphaChannel); - this.obj.data['SMask'] = sMask; - } - this.obj.end(this.imgData); - this.image = null; - return this.imgData = null; - } - splitAlphaChannel() { - return this.image.decodePixels(pixels => { - let a, p; - const colorCount = this.image.colors; - const pixelCount = this.width * this.height; - const imgData = Buffer.alloc(pixelCount * colorCount); - const alphaChannel = Buffer.alloc(pixelCount); - let i = p = a = 0; - const len = pixels.length; - const skipByteCount = this.image.bits === 16 ? 1 : 0; - while (i < len) { - for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) { - imgData[p++] = pixels[i++]; - i += skipByteCount; - } - alphaChannel[a++] = pixels[i++]; - i += skipByteCount; - } - this.imgData = zlib.deflateSync(imgData); - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - loadIndexedAlphaChannel() { - const transparency = this.image.transparency.indexed; - return this.image.decodePixels(pixels => { - const alphaChannel = Buffer.alloc(this.width * this.height); - let i = 0; - for (let j = 0, end = pixels.length; j < end; j++) { - alphaChannel[i++] = transparency[pixels[j]]; - } - this.alphaChannel = zlib.deflateSync(alphaChannel); - return this.finalize(); - }); - } - decodeData() { - this.image.decodePixels(pixels => { - this.imgData = zlib.deflateSync(pixels); - this.finalize(); - }); - } -} - -class PDFImage { - static open(src, label) { - let data; - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:.+?;base64,(.*)$/.exec(src); - if (match) { - data = Buffer.from(match[1], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - return; - } - } - } - if (data[0] === 0xff && data[1] === 0xd8) { - return new JPEG(data, label); - } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { - return new PNGImage(data, label); - } else { - throw new Error('Unknown image format.'); - } - } -} - -var ImagesMixin = { - initImages() { - this._imageRegistry = {}; - this._imageCount = 0; - }, - image(src, x, y, options = {}) { - let bh, bp, bw, image, ip, left, left1, originX, originY; - if (typeof x === 'object') { - options = x; - x = null; - } - const ignoreOrientation = options.ignoreOrientation || options.ignoreOrientation !== false && this.options.ignoreOrientation; - const inDocumentFlow = typeof y !== 'number'; - x = (left = x != null ? x : options.x) != null ? left : this.x; - y = (left1 = y != null ? y : options.y) != null ? left1 : this.y; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - if (src.width && src.height) { - image = src; - } else { - image = this.openImage(src); - } - } - if (!image.obj) { - image.embed(this); - } - if (this.page.xobjects[image.label] == null) { - this.page.xobjects[image.label] = image.obj; - } - let { - width, - height - } = image; - if (!ignoreOrientation && image.orientation > 4) { - [width, height] = [height, width]; - } - let w = options.width || width; - let h = options.height || height; - if (options.width && !options.height) { - const wp = w / width; - w = width * wp; - h = height * wp; - } else if (options.height && !options.width) { - const hp = h / height; - w = width * hp; - h = height * hp; - } else if (options.scale) { - w = width * options.scale; - h = height * options.scale; - } else if (options.fit) { - [bw, bh] = options.fit; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - w = bw; - h = bw / ip; - } else { - h = bh; - w = bh * ip; - } - } else if (options.cover) { - [bw, bh] = options.cover; - bp = bw / bh; - ip = width / height; - if (ip > bp) { - h = bh; - w = bh * ip; - } else { - w = bw; - h = bw / ip; - } - } - if (options.fit || options.cover) { - if (options.align === 'center') { - x = x + bw / 2 - w / 2; - } else if (options.align === 'right') { - x = x + bw - w; - } - if (options.valign === 'center') { - y = y + bh / 2 - h / 2; - } else if (options.valign === 'bottom') { - y = y + bh - h; - } - } - let rotateAngle = 0; - let xTransform = x; - let yTransform = y; - let hTransform = h; - let wTransform = w; - if (!ignoreOrientation) { - switch (image.orientation) { - default: - case 1: - hTransform = -h; - yTransform += h; - break; - case 2: - wTransform = -w; - hTransform = -h; - xTransform += w; - yTransform += h; - break; - case 3: - originX = x; - originY = y; - hTransform = -h; - xTransform -= w; - rotateAngle = 180; - break; - case 4: - break; - case 5: - originX = x; - originY = y; - wTransform = h; - hTransform = w; - yTransform -= hTransform; - rotateAngle = 90; - break; - case 6: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - rotateAngle = 90; - break; - case 7: - originX = x; - originY = y; - hTransform = -w; - wTransform = -h; - xTransform += h; - rotateAngle = 90; - break; - case 8: - originX = x; - originY = y; - wTransform = h; - hTransform = -w; - xTransform -= h; - yTransform += w; - rotateAngle = -90; - break; - } - } else { - hTransform = -h; - yTransform += h; - } - if (options.link != null) { - this.link(x, y, w, h, options.link); - } - if (options.goTo != null) { - this.goTo(x, y, w, h, options.goTo); - } - if (options.destination != null) { - this.addNamedDestination(options.destination, 'XYZ', x, y, null); - } - if (inDocumentFlow) { - this.y += h; - } - this.save(); - if (rotateAngle) { - this.rotate(rotateAngle, { - origin: [originX, originY] - }); - } - this.transform(wTransform, 0, 0, hTransform, xTransform, yTransform); - this.addContent(`/${image.label} Do`); - this.restore(); - return this; - }, - openImage(src) { - let image; - if (typeof src === 'string') { - image = this._imageRegistry[src]; - } - if (!image) { - image = PDFImage.open(src, `I${++this._imageCount}`); - if (typeof src === 'string') { - this._imageRegistry[src] = image; - } - } - return image; - } -}; - -var AnnotationsMixin = { - annotate(x, y, w, h, options) { - options.Type = 'Annot'; - options.Rect = this._convertRect(x, y, w, h); - options.Border = [0, 0, 0]; - if (options.Subtype === 'Link' && typeof options.F === 'undefined') { - options.F = 1 << 2; - } - if (options.Subtype !== 'Link') { - if (options.C == null) { - options.C = this._normalizeColor(options.color || [0, 0, 0]); - } - } - delete options.color; - if (typeof options.Dest === 'string') { - options.Dest = new String(options.Dest); - } - for (let key in options) { - const val = options[key]; - options[key[0].toUpperCase() + key.slice(1)] = val; - } - const ref = this.ref(options); - this.page.annotations.push(ref); - ref.end(); - return this; - }, - note(x, y, w, h, contents, options = {}) { - options.Subtype = 'Text'; - options.Contents = new String(contents); - if (options.Name == null) { - options.Name = 'Comment'; - } - if (options.color == null) { - options.color = [243, 223, 92]; - } - return this.annotate(x, y, w, h, options); - }, - goTo(x, y, w, h, name, options = {}) { - options.Subtype = 'Link'; - options.A = this.ref({ - S: 'GoTo', - D: new String(name) - }); - options.A.end(); - return this.annotate(x, y, w, h, options); - }, - link(x, y, w, h, url, options = {}) { - options.Subtype = 'Link'; - if (typeof url === 'number') { - const pages = this._root.data.Pages.data; - if (url >= 0 && url < pages.Kids.length) { - options.A = this.ref({ - S: 'GoTo', - D: [pages.Kids[url], 'XYZ', null, null, null] - }); - options.A.end(); - } else { - throw new Error(`The document has no page ${url}`); - } - } else { - options.A = this.ref({ - S: 'URI', - URI: new String(url) - }); - options.A.end(); - } - return this.annotate(x, y, w, h, options); - }, - _markup(x, y, w, h, options = {}) { - const [x1, y1, x2, y2] = this._convertRect(x, y, w, h); - options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - highlight(x, y, w, h, options = {}) { - options.Subtype = 'Highlight'; - if (options.color == null) { - options.color = [241, 238, 148]; - } - return this._markup(x, y, w, h, options); - }, - underline(x, y, w, h, options = {}) { - options.Subtype = 'Underline'; - return this._markup(x, y, w, h, options); - }, - strike(x, y, w, h, options = {}) { - options.Subtype = 'StrikeOut'; - return this._markup(x, y, w, h, options); - }, - lineAnnotation(x1, y1, x2, y2, options = {}) { - options.Subtype = 'Line'; - options.Contents = new String(); - options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; - return this.annotate(x1, y1, x2, y2, options); - }, - rectAnnotation(x, y, w, h, options = {}) { - options.Subtype = 'Square'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - ellipseAnnotation(x, y, w, h, options = {}) { - options.Subtype = 'Circle'; - options.Contents = new String(); - return this.annotate(x, y, w, h, options); - }, - textAnnotation(x, y, w, h, text, options = {}) { - options.Subtype = 'FreeText'; - options.Contents = new String(text); - options.DA = new String(); - return this.annotate(x, y, w, h, options); - }, - fileAnnotation(x, y, w, h, file = {}, options = {}) { - const filespec = this.file(file.src, Object.assign({ - hidden: true - }, file)); - options.Subtype = 'FileAttachment'; - options.FS = filespec; - if (options.Contents) { - options.Contents = new String(options.Contents); - } else if (filespec.data.Desc) { - options.Contents = filespec.data.Desc; - } - return this.annotate(x, y, w, h, options); - }, - _convertRect(x1, y1, w, h) { - let y2 = y1; - y1 += h; - let x2 = x1 + w; - const [m0, m1, m2, m3, m4, m5] = this._ctm; - x1 = m0 * x1 + m2 * y1 + m4; - y1 = m1 * x1 + m3 * y1 + m5; - x2 = m0 * x2 + m2 * y2 + m4; - y2 = m1 * x2 + m3 * y2 + m5; - return [x1, y1, x2, y2]; - } -}; - -class PDFOutline { - constructor(document, parent, title, dest, options = { - expanded: false - }) { - this.document = document; - this.options = options; - this.outlineData = {}; - if (dest !== null) { - this.outlineData['Dest'] = [dest.dictionary, 'Fit']; - } - if (parent !== null) { - this.outlineData['Parent'] = parent; - } - if (title !== null) { - this.outlineData['Title'] = new String(title); - } - this.dictionary = this.document.ref(this.outlineData); - this.children = []; - } - addItem(title, options = { - expanded: false - }) { - const result = new PDFOutline(this.document, this.dictionary, title, this.document.page, options); - this.children.push(result); - return result; - } - endOutline() { - if (this.children.length > 0) { - if (this.options.expanded) { - this.outlineData.Count = this.children.length; - } - const first = this.children[0], - last = this.children[this.children.length - 1]; - this.outlineData.First = first.dictionary; - this.outlineData.Last = last.dictionary; - for (let i = 0, len = this.children.length; i < len; i++) { - const child = this.children[i]; - if (i > 0) { - child.outlineData.Prev = this.children[i - 1].dictionary; - } - if (i < this.children.length - 1) { - child.outlineData.Next = this.children[i + 1].dictionary; - } - child.endOutline(); - } - } - return this.dictionary.end(); - } -} - -var OutlineMixin = { - initOutline() { - this.outline = new PDFOutline(this, null, null, null); - }, - endOutline() { - this.outline.endOutline(); - if (this.outline.children.length > 0) { - this._root.data.Outlines = this.outline.dictionary; - return this._root.data.PageMode = 'UseOutlines'; - } - } -}; - -class PDFStructureContent { - constructor(pageRef, mcid) { - this.refs = [{ - pageRef, - mcid - }]; - } - push(structContent) { - structContent.refs.forEach(ref => this.refs.push(ref)); - } -} - -class PDFStructureElement { - constructor(document, type, options = {}, children = null) { - this.document = document; - this._attached = false; - this._ended = false; - this._flushed = false; - this.dictionary = document.ref({ - S: type - }); - const data = this.dictionary.data; - if (Array.isArray(options) || this._isValidChild(options)) { - children = options; - options = {}; - } - if (typeof options.title !== 'undefined') { - data.T = new String(options.title); - } - if (typeof options.lang !== 'undefined') { - data.Lang = new String(options.lang); - } - if (typeof options.alt !== 'undefined') { - data.Alt = new String(options.alt); - } - if (typeof options.expanded !== 'undefined') { - data.E = new String(options.expanded); - } - if (typeof options.actual !== 'undefined') { - data.ActualText = new String(options.actual); - } - this._children = []; - if (children) { - if (!Array.isArray(children)) { - children = [children]; - } - children.forEach(child => this.add(child)); - this.end(); - } - } - add(child) { - if (this._ended) { - throw new Error(`Cannot add child to already-ended structure element`); - } - if (!this._isValidChild(child)) { - throw new Error(`Invalid structure element child`); - } - if (child instanceof PDFStructureElement) { - child.setParent(this.dictionary); - if (this._attached) { - child.setAttached(); - } - } - if (child instanceof PDFStructureContent) { - this._addContentToParentTree(child); - } - if (typeof child === 'function' && this._attached) { - child = this._contentForClosure(child); - } - this._children.push(child); - return this; - } - _addContentToParentTree(content) { - content.refs.forEach(({ - pageRef, - mcid - }) => { - const pageStructParents = this.document.getStructParentTree().get(pageRef.data.StructParents); - pageStructParents[mcid] = this.dictionary; - }); - } - setParent(parentRef) { - if (this.dictionary.data.P) { - throw new Error(`Structure element added to more than one parent`); - } - this.dictionary.data.P = parentRef; - this._flush(); - } - setAttached() { - if (this._attached) { - return; - } - this._children.forEach((child, index) => { - if (child instanceof PDFStructureElement) { - child.setAttached(); - } - if (typeof child === 'function') { - this._children[index] = this._contentForClosure(child); - } - }); - this._attached = true; - this._flush(); - } - end() { - if (this._ended) { - return; - } - this._children.filter(child => child instanceof PDFStructureElement).forEach(child => child.end()); - this._ended = true; - this._flush(); - } - _isValidChild(child) { - return child instanceof PDFStructureElement || child instanceof PDFStructureContent || typeof child === 'function'; - } - _contentForClosure(closure) { - const content = this.document.markStructureContent(this.dictionary.data.S); - closure(); - this.document.endMarkedContent(); - this._addContentToParentTree(content); - return content; - } - _isFlushable() { - if (!this.dictionary.data.P || !this._ended) { - return false; - } - return this._children.every(child => { - if (typeof child === 'function') { - return false; - } - if (child instanceof PDFStructureElement) { - return child._isFlushable(); - } - return true; - }); - } - _flush() { - if (this._flushed || !this._isFlushable()) { - return; - } - this.dictionary.data.K = []; - this._children.forEach(child => this._flushChild(child)); - this.dictionary.end(); - this._children = []; - this.dictionary.data.K = null; - this._flushed = true; - } - _flushChild(child) { - if (child instanceof PDFStructureElement) { - this.dictionary.data.K.push(child.dictionary); - } - if (child instanceof PDFStructureContent) { - child.refs.forEach(({ - pageRef, - mcid - }) => { - if (!this.dictionary.data.Pg) { - this.dictionary.data.Pg = pageRef; - } - if (this.dictionary.data.Pg === pageRef) { - this.dictionary.data.K.push(mcid); - } else { - this.dictionary.data.K.push({ - Type: 'MCR', - Pg: pageRef, - MCID: mcid - }); - } - }); - } - } -} - -class PDFNumberTree extends PDFTree { - _compareKeys(a, b) { - return parseInt(a) - parseInt(b); - } - _keysName() { - return 'Nums'; - } - _dataForKey(k) { - return parseInt(k); - } -} - -var MarkingsMixin = { - initMarkings(options) { - this.structChildren = []; - if (options.tagged) { - this.getMarkInfoDictionary().data.Marked = true; - this.getStructTreeRoot(); - } - }, - markContent(tag, options = null) { - if (tag === 'Artifact' || options && options.mcid) { - let toClose = 0; - this.page.markings.forEach(marking => { - if (toClose || marking.structContent || marking.tag === 'Artifact') { - toClose++; - } - }); - while (toClose--) { - this.endMarkedContent(); - } - } - if (!options) { - this.page.markings.push({ - tag - }); - this.addContent(`/${tag} BMC`); - return this; - } - this.page.markings.push({ - tag, - options - }); - const dictionary = {}; - if (typeof options.mcid !== 'undefined') { - dictionary.MCID = options.mcid; - } - if (tag === 'Artifact') { - if (typeof options.type === 'string') { - dictionary.Type = options.type; - } - if (Array.isArray(options.bbox)) { - dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3], options.bbox[2], this.page.height - options.bbox[1]]; - } - if (Array.isArray(options.attached) && options.attached.every(val => typeof val === 'string')) { - dictionary.Attached = options.attached; - } - } - if (tag === 'Span') { - if (options.lang) { - dictionary.Lang = new String(options.lang); - } - if (options.alt) { - dictionary.Alt = new String(options.alt); - } - if (options.expanded) { - dictionary.E = new String(options.expanded); - } - if (options.actual) { - dictionary.ActualText = new String(options.actual); - } - } - this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`); - return this; - }, - markStructureContent(tag, options = {}) { - const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey); - const mcid = pageStructParents.length; - pageStructParents.push(null); - this.markContent(tag, { - ...options, - mcid - }); - const structContent = new PDFStructureContent(this.page.dictionary, mcid); - this.page.markings.slice(-1)[0].structContent = structContent; - return structContent; - }, - endMarkedContent() { - this.page.markings.pop(); - this.addContent('EMC'); - return this; - }, - struct(type, options = {}, children = null) { - return new PDFStructureElement(this, type, options, children); - }, - addStructure(structElem) { - const structTreeRoot = this.getStructTreeRoot(); - structElem.setParent(structTreeRoot); - structElem.setAttached(); - this.structChildren.push(structElem); - if (!structTreeRoot.data.K) { - structTreeRoot.data.K = []; - } - structTreeRoot.data.K.push(structElem.dictionary); - return this; - }, - initPageMarkings(pageMarkings) { - pageMarkings.forEach(marking => { - if (marking.structContent) { - const structContent = marking.structContent; - const newStructContent = this.markStructureContent(marking.tag, marking.options); - structContent.push(newStructContent); - this.page.markings.slice(-1)[0].structContent = structContent; - } else { - this.markContent(marking.tag, marking.options); - } - }); - }, - endPageMarkings(page) { - const pageMarkings = page.markings; - pageMarkings.forEach(() => page.write('EMC')); - page.markings = []; - return pageMarkings; - }, - getMarkInfoDictionary() { - if (!this._root.data.MarkInfo) { - this._root.data.MarkInfo = this.ref({}); - } - return this._root.data.MarkInfo; - }, - hasMarkInfoDictionary() { - return !!this._root.data.MarkInfo; - }, - getStructTreeRoot() { - if (!this._root.data.StructTreeRoot) { - this._root.data.StructTreeRoot = this.ref({ - Type: 'StructTreeRoot', - ParentTree: new PDFNumberTree(), - ParentTreeNextKey: 0 - }); - } - return this._root.data.StructTreeRoot; - }, - getStructParentTree() { - return this.getStructTreeRoot().data.ParentTree; - }, - createStructParentTreeNextKey() { - this.getMarkInfoDictionary(); - const structTreeRoot = this.getStructTreeRoot(); - const key = structTreeRoot.data.ParentTreeNextKey++; - structTreeRoot.data.ParentTree.add(key, []); - return key; - }, - endMarkings() { - const structTreeRoot = this._root.data.StructTreeRoot; - if (structTreeRoot) { - structTreeRoot.end(); - this.structChildren.forEach(structElem => structElem.end()); - } - if (this._root.data.MarkInfo) { - this._root.data.MarkInfo.end(); - } - } -}; - -const FIELD_FLAGS = { - readOnly: 1, - required: 2, - noExport: 4, - multiline: 0x1000, - password: 0x2000, - toggleToOffButton: 0x4000, - radioButton: 0x8000, - pushButton: 0x10000, - combo: 0x20000, - edit: 0x40000, - sort: 0x80000, - multiSelect: 0x200000, - noSpell: 0x400000 -}; -const FIELD_JUSTIFY = { - left: 0, - center: 1, - right: 2 -}; -const VALUE_MAP = { - value: 'V', - defaultValue: 'DV' -}; -const FORMAT_SPECIAL = { - zip: '0', - zipPlus4: '1', - zip4: '1', - phone: '2', - ssn: '3' -}; -const FORMAT_DEFAULT = { - number: { - nDec: 0, - sepComma: false, - negStyle: 'MinusBlack', - currency: '', - currencyPrepend: true - }, - percent: { - nDec: 0, - sepComma: false - } -}; -var AcroFormMixin = { - initForm() { - if (!this._font) { - throw new Error('Must set a font before calling initForm method'); - } - this._acroform = { - fonts: {}, - defaultFont: this._font.name - }; - this._acroform.fonts[this._font.id] = this._font.ref(); - let data = { - Fields: [], - NeedAppearances: true, - DA: new String(`/${this._font.id} 0 Tf 0 g`), - DR: { - Font: {} - } - }; - data.DR.Font[this._font.id] = this._font.ref(); - const AcroForm = this.ref(data); - this._root.data.AcroForm = AcroForm; - return this; - }, - endAcroForm() { - if (this._root.data.AcroForm) { - if (!Object.keys(this._acroform.fonts).length && !this._acroform.defaultFont) { - throw new Error('No fonts specified for PDF form'); - } - let fontDict = this._root.data.AcroForm.data.DR.Font; - Object.keys(this._acroform.fonts).forEach(name => { - fontDict[name] = this._acroform.fonts[name]; - }); - this._root.data.AcroForm.data.Fields.forEach(fieldRef => { - this._endChild(fieldRef); - }); - this._root.data.AcroForm.end(); - } - return this; - }, - _endChild(ref) { - if (Array.isArray(ref.data.Kids)) { - ref.data.Kids.forEach(childRef => { - this._endChild(childRef); - }); - ref.end(); - } - return this; - }, - formField(name, options = {}) { - let fieldDict = this._fieldDict(name, null, options); - let fieldRef = this.ref(fieldDict); - this._addToParent(fieldRef); - return fieldRef; - }, - formAnnotation(name, type, x, y, w, h, options = {}) { - let fieldDict = this._fieldDict(name, type, options); - fieldDict.Subtype = 'Widget'; - if (fieldDict.F === undefined) { - fieldDict.F = 4; - } - this.annotate(x, y, w, h, fieldDict); - let annotRef = this.page.annotations[this.page.annotations.length - 1]; - return this._addToParent(annotRef); - }, - formText(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'text', x, y, w, h, options); - }, - formPushButton(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'pushButton', x, y, w, h, options); - }, - formCombo(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'combo', x, y, w, h, options); - }, - formList(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'list', x, y, w, h, options); - }, - formRadioButton(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'radioButton', x, y, w, h, options); - }, - formCheckbox(name, x, y, w, h, options = {}) { - return this.formAnnotation(name, 'checkbox', x, y, w, h, options); - }, - _addToParent(fieldRef) { - let parent = fieldRef.data.Parent; - if (parent) { - if (!parent.data.Kids) { - parent.data.Kids = []; - } - parent.data.Kids.push(fieldRef); - } else { - this._root.data.AcroForm.data.Fields.push(fieldRef); - } - return this; - }, - _fieldDict(name, type, options = {}) { - if (!this._acroform) { - throw new Error('Call document.initForm() method before adding form elements to document'); - } - let opts = Object.assign({}, options); - if (type !== null) { - opts = this._resolveType(type, options); - } - opts = this._resolveFlags(opts); - opts = this._resolveJustify(opts); - opts = this._resolveFont(opts); - opts = this._resolveStrings(opts); - opts = this._resolveColors(opts); - opts = this._resolveFormat(opts); - opts.T = new String(name); - if (opts.parent) { - opts.Parent = opts.parent; - delete opts.parent; - } - return opts; - }, - _resolveType(type, opts) { - if (type === 'text') { - opts.FT = 'Tx'; - } else if (type === 'pushButton') { - opts.FT = 'Btn'; - opts.pushButton = true; - } else if (type === 'radioButton') { - opts.FT = 'Btn'; - opts.radioButton = true; - } else if (type === 'checkbox') { - opts.FT = 'Btn'; - } else if (type === 'combo') { - opts.FT = 'Ch'; - opts.combo = true; - } else if (type === 'list') { - opts.FT = 'Ch'; - } else { - throw new Error(`Invalid form annotation type '${type}'`); - } - return opts; - }, - _resolveFormat(opts) { - const f = opts.format; - if (f && f.type) { - let fnKeystroke; - let fnFormat; - let params = ''; - if (FORMAT_SPECIAL[f.type] !== undefined) { - fnKeystroke = `AFSpecial_Keystroke`; - fnFormat = `AFSpecial_Format`; - params = FORMAT_SPECIAL[f.type]; - } else { - let format = f.type.charAt(0).toUpperCase() + f.type.slice(1); - fnKeystroke = `AF${format}_Keystroke`; - fnFormat = `AF${format}_Format`; - if (f.type === 'date') { - fnKeystroke += 'Ex'; - params = String(f.param); - } else if (f.type === 'time') { - params = String(f.param); - } else if (f.type === 'number') { - let p = Object.assign({}, FORMAT_DEFAULT.number, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1', '"' + p.negStyle + '"', 'null', '"' + p.currency + '"', String(p.currencyPrepend)].join(',')); - } else if (f.type === 'percent') { - let p = Object.assign({}, FORMAT_DEFAULT.percent, f); - params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(',')); - } - } - opts.AA = opts.AA ? opts.AA : {}; - opts.AA.K = { - S: 'JavaScript', - JS: new String(`${fnKeystroke}(${params});`) - }; - opts.AA.F = { - S: 'JavaScript', - JS: new String(`${fnFormat}(${params});`) - }; - } - delete opts.format; - return opts; - }, - _resolveColors(opts) { - let color = this._normalizeColor(opts.backgroundColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BG = color; - } - color = this._normalizeColor(opts.borderColor); - if (color) { - if (!opts.MK) { - opts.MK = {}; - } - opts.MK.BC = color; - } - delete opts.backgroundColor; - delete opts.borderColor; - return opts; - }, - _resolveFlags(options) { - let result = 0; - Object.keys(options).forEach(key => { - if (FIELD_FLAGS[key]) { - if (options[key]) { - result |= FIELD_FLAGS[key]; - } - delete options[key]; - } - }); - if (result !== 0) { - options.Ff = options.Ff ? options.Ff : 0; - options.Ff |= result; - } - return options; - }, - _resolveJustify(options) { - let result = 0; - if (options.align !== undefined) { - if (typeof FIELD_JUSTIFY[options.align] === 'number') { - result = FIELD_JUSTIFY[options.align]; - } - delete options.align; - } - if (result !== 0) { - options.Q = result; - } - return options; - }, - _resolveFont(options) { - if (this._acroform.fonts[this._font.id] == null) { - this._acroform.fonts[this._font.id] = this._font.ref(); - } - if (this._acroform.defaultFont !== this._font.name) { - options.DR = { - Font: {} - }; - const fontSize = options.fontSize || 0; - options.DR.Font[this._font.id] = this._font.ref(); - options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`); - } - return options; - }, - _resolveStrings(options) { - let select = []; - function appendChoices(a) { - if (Array.isArray(a)) { - for (let idx = 0; idx < a.length; idx++) { - if (typeof a[idx] === 'string') { - select.push(new String(a[idx])); - } else { - select.push(a[idx]); - } - } - } - } - appendChoices(options.Opt); - if (options.select) { - appendChoices(options.select); - delete options.select; - } - if (select.length) { - options.Opt = select; - } - Object.keys(VALUE_MAP).forEach(key => { - if (options[key] !== undefined) { - options[VALUE_MAP[key]] = options[key]; - delete options[key]; - } - }); - ['V', 'DV'].forEach(key => { - if (typeof options[key] === 'string') { - options[key] = new String(options[key]); - } - }); - if (options.MK && options.MK.CA) { - options.MK.CA = new String(options.MK.CA); - } - if (options.label) { - options.MK = options.MK ? options.MK : {}; - options.MK.CA = new String(options.label); - delete options.label; - } - return options; - } -}; - -var AttachmentsMixin = { - file(src, options = {}) { - options.name = options.name || src; - options.relationship = options.relationship || 'Unspecified'; - const refBody = { - Type: 'EmbeddedFile', - Params: {} - }; - let data; - if (!src) { - throw new Error('No src specified'); - } - if (Buffer.isBuffer(src)) { - data = src; - } else if (src instanceof ArrayBuffer) { - data = Buffer.from(new Uint8Array(src)); - } else { - const match = /^data:(.*?);base64,(.*)$/.exec(src); - if (match) { - if (match[1]) { - refBody.Subtype = match[1].replace('/', '#2F'); - } - data = Buffer.from(match[2], 'base64'); - } else { - data = fs.readFileSync(src); - if (!data) { - throw new Error(`Could not read contents of file at filepath ${src}`); - } - const { - birthtime, - ctime - } = fs.statSync(src); - refBody.Params.CreationDate = birthtime; - refBody.Params.ModDate = ctime; - } - } - if (options.creationDate instanceof Date) { - refBody.Params.CreationDate = options.creationDate; - } - if (options.modifiedDate instanceof Date) { - refBody.Params.ModDate = options.modifiedDate; - } - if (options.type) { - refBody.Subtype = options.type.replace('/', '#2F'); - } - const checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(new Uint8Array(data))); - refBody.Params.CheckSum = new String(checksum); - refBody.Params.Size = data.byteLength; - let ref; - if (!this._fileRegistry) this._fileRegistry = {}; - let file = this._fileRegistry[options.name]; - if (file && isEqual(refBody, file)) { - ref = file.ref; - } else { - ref = this.ref(refBody); - ref.end(data); - this._fileRegistry[options.name] = { - ...refBody, - ref - }; - } - const fileSpecBody = { - Type: 'Filespec', - AFRelationship: options.relationship, - F: new String(options.name), - EF: { - F: ref - }, - UF: new String(options.name) - }; - if (options.description) { - fileSpecBody.Desc = new String(options.description); - } - const filespec = this.ref(fileSpecBody); - filespec.end(); - if (!options.hidden) { - this.addNamedEmbeddedFile(options.name, filespec); - } - if (this._root.data.AF) { - this._root.data.AF.push(filespec); - } else { - this._root.data.AF = [filespec]; - } - return filespec; - } -}; -function isEqual(a, b) { - return a.Subtype === b.Subtype && a.Params.CheckSum.toString() === b.Params.CheckSum.toString() && a.Params.Size === b.Params.Size && a.Params.CreationDate.getTime() === b.Params.CreationDate.getTime() && (a.Params.ModDate === undefined && b.Params.ModDate === undefined || a.Params.ModDate.getTime() === b.Params.ModDate.getTime()); -} - -var PDFA = { - initPDFA(pSubset) { - if (pSubset.charAt(pSubset.length - 3) === '-') { - this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase(); - this.subset = parseInt(pSubset.charAt(pSubset.length - 2)); - } else { - this.subset_conformance = 'B'; - this.subset = parseInt(pSubset.charAt(pSubset.length - 1)); - } - }, - endSubset() { - this._addPdfaMetadata(); - this._addColorOutputIntent(); - }, - _addColorOutputIntent() { - const iccProfile = Buffer("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","base64"); - const colorProfileRef = this.ref({ - Length: iccProfile.length, - N: 3 - }); - colorProfileRef.write(iccProfile); - colorProfileRef.end(); - const intentRef = this.ref({ - Type: 'OutputIntent', - S: 'GTS_PDFA1', - Info: new String('sRGB IEC61966-2.1'), - OutputConditionIdentifier: new String('sRGB IEC61966-2.1'), - DestOutputProfile: colorProfileRef - }); - intentRef.end(); - this._root.data.OutputIntents = [intentRef]; - }, - _getPdfaid() { - return ` - - ${this.subset} - ${this.subset_conformance} - - `; - }, - _addPdfaMetadata() { - this.appendXML(this._getPdfaid()); - } -}; - -var PDFUA = { - initPDFUA() { - this.subset = 1; - }, - endSubset() { - this._addPdfuaMetadata(); - }, - _addPdfuaMetadata() { - this.appendXML(this._getPdfuaid()); - }, - _getPdfuaid() { - return ` - - ${this.subset} - - `; - } -}; - -var SubsetMixin = { - _importSubset(subset) { - Object.assign(this, subset); - }, - initSubset(options) { - switch (options.subset) { - case 'PDF/A-1': - case 'PDF/A-1a': - case 'PDF/A-1b': - case 'PDF/A-2': - case 'PDF/A-2a': - case 'PDF/A-2b': - case 'PDF/A-3': - case 'PDF/A-3a': - case 'PDF/A-3b': - this._importSubset(PDFA); - this.initPDFA(options.subset); - break; - case 'PDF/UA': - this._importSubset(PDFUA); - this.initPDFUA(); - break; - } - } -}; - -const ROW_FIELDS = ['height', 'minHeight', 'maxHeight']; -const COLUMN_FIELDS = ['width', 'minWidth', 'maxWidth']; -function memoize(fn, maxSize) { - const cache = new Map(); - return function (...args) { - const key = args[0]; - if (!cache.has(key)) { - cache.set(key, fn(...args)); - if (cache.size > maxSize) cache.delete(cache.keys().next()); - } - return cache.get(key); - }; -} -function isObject(item) { - return item && typeof item === 'object' && !Array.isArray(item); -} -function deepMerge(target, ...sources) { - if (!isObject(target)) return target; - target = deepClone(target); - for (const source of sources) { - if (isObject(source)) { - for (const key in source) { - if (isObject(source[key])) { - if (!(key in target)) target[key] = {}; - target[key] = deepMerge(target[key], source[key]); - } else if (source[key] !== undefined) { - target[key] = deepClone(source[key]); - } - } - } - } - return target; -} -function deepClone(obj) { - let result = obj; - if (obj && typeof obj == 'object') { - result = Array.isArray(obj) ? [] : {}; - for (const key in obj) result[key] = deepClone(obj[key]); - } - return result; -} - -function normalizedDefaultStyle(defaultStyleInternal) { - let defaultStyle = defaultStyleInternal; - if (typeof defaultStyle !== 'object') defaultStyle = { - text: defaultStyle - }; - const defaultRowStyle = Object.fromEntries(Object.entries(defaultStyle).filter(([k]) => ROW_FIELDS.includes(k))); - const defaultColStyle = Object.fromEntries(Object.entries(defaultStyle).filter(([k]) => COLUMN_FIELDS.includes(k))); - defaultStyle.padding = normalizeSides(defaultStyle.padding); - defaultStyle.border = normalizeSides(defaultStyle.border); - defaultStyle.borderColor = normalizeSides(defaultStyle.borderColor); - defaultStyle.align = normalizeAlignment(defaultStyle.align); - return { - defaultStyle, - defaultRowStyle, - defaultColStyle - }; -} -function normalizedRowStyle(defaultRowStyle, rowStyleInternal, i) { - let rowStyle = rowStyleInternal(i); - if (rowStyle == null || typeof rowStyle !== 'object') { - rowStyle = { - height: rowStyle - }; - } - rowStyle.padding = normalizeSides(rowStyle.padding); - rowStyle.border = normalizeSides(rowStyle.border); - rowStyle.borderColor = normalizeSides(rowStyle.borderColor); - rowStyle.align = normalizeAlignment(rowStyle.align); - rowStyle = deepMerge(defaultRowStyle, rowStyle); - const document = this.document; - const page = document.page; - const contentHeight = page.contentHeight; - if (rowStyle.height == null || rowStyle.height === 'auto') { - rowStyle.height = 'auto'; - } else { - rowStyle.height = document.sizeToPoint(rowStyle.height, 0, page, contentHeight); - } - rowStyle.minHeight = document.sizeToPoint(rowStyle.minHeight, 0, page, contentHeight); - rowStyle.maxHeight = document.sizeToPoint(rowStyle.maxHeight, 0, page, contentHeight); - return rowStyle; -} -function normalizedColumnStyle(defaultColStyle, colStyleInternal, i) { - let colStyle = colStyleInternal(i); - if (colStyle == null || typeof colStyle !== 'object') { - colStyle = { - width: colStyle - }; - } - colStyle.padding = normalizeSides(colStyle.padding); - colStyle.border = normalizeSides(colStyle.border); - colStyle.borderColor = normalizeSides(colStyle.borderColor); - colStyle.align = normalizeAlignment(colStyle.align); - colStyle = deepMerge(defaultColStyle, colStyle); - if (colStyle.width == null || colStyle.width === '*') { - colStyle.width = '*'; - } else { - colStyle.width = this.document.sizeToPoint(colStyle.width, 0, this.document.page, this._maxWidth); - } - colStyle.minWidth = this.document.sizeToPoint(colStyle.minWidth, 0, this.document.page, this._maxWidth); - colStyle.maxWidth = this.document.sizeToPoint(colStyle.maxWidth, 0, this.document.page, this._maxWidth); - return colStyle; -} -function normalizeAlignment(align) { - return align == null || typeof align === 'string' ? { - x: align, - y: align - } : align; -} - -function normalizeTable() { - const doc = this.document; - const opts = this.opts; - let index = doc._tableIndex++; - this._id = new String(opts.id ?? `table-${index}`); - this._position = { - x: doc.sizeToPoint(opts.position?.x, doc.x), - y: doc.sizeToPoint(opts.position?.y, doc.y) - }; - this._maxWidth = doc.sizeToPoint(opts.maxWidth, doc.page.width - doc.page.margins.right - this._position.x); - const { - defaultStyle, - defaultColStyle, - defaultRowStyle - } = normalizedDefaultStyle(opts.defaultStyle); - this._defaultStyle = defaultStyle; - let colStyle; - if (opts.columnStyles) { - if (Array.isArray(opts.columnStyles)) { - colStyle = i => opts.columnStyles[i]; - } else if (typeof opts.columnStyles === 'function') { - colStyle = memoize(i => opts.columnStyles(i), Infinity); - } else if (typeof opts.columnStyles === 'object') { - colStyle = () => opts.columnStyles; - } - } - if (!colStyle) colStyle = () => ({}); - this._colStyle = normalizedColumnStyle.bind(this, defaultColStyle, colStyle); - let rowStyle; - if (opts.rowStyles) { - if (Array.isArray(opts.rowStyles)) { - rowStyle = i => opts.rowStyles[i]; - } else if (typeof opts.rowStyles === 'function') { - rowStyle = memoize(i => opts.rowStyles(i), 10); - } else if (typeof opts.rowStyles === 'object') { - rowStyle = () => opts.rowStyles; - } - } - if (!rowStyle) rowStyle = () => ({}); - this._rowStyle = normalizedRowStyle.bind(this, defaultRowStyle, rowStyle); -} -function normalizeText(text) { - if (text != null) text = `${text}`; - return text; -} -function normalizeCell(cell, rowIndex, colIndex) { - const colStyle = this._colStyle(colIndex); - let rowStyle = this._rowStyle(rowIndex); - const font = deepMerge({}, colStyle.font, rowStyle.font, cell.font); - const customFont = Object.values(font).filter(v => v != null).length > 0; - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (customFont) { - if (font.src) doc.font(font.src, font.family); - if (font.size) doc.fontSize(font.size); - rowStyle = this._rowStyle(rowIndex); - } - cell.padding = normalizeSides(cell.padding); - cell.border = normalizeSides(cell.border); - cell.borderColor = normalizeSides(cell.borderColor); - const config = deepMerge(this._defaultStyle, colStyle, rowStyle, cell); - config.rowIndex = rowIndex; - config.colIndex = colIndex; - config.font = font ?? {}; - config.customFont = customFont; - config.text = normalizeText(config.text); - config.rowSpan = config.rowSpan ?? 1; - config.colSpan = config.colSpan ?? 1; - config.padding = normalizeSides(config.padding, '0.25em', x => doc.sizeToPoint(x, '0.25em')); - config.border = normalizeSides(config.border, 1, x => doc.sizeToPoint(x, 1)); - config.borderColor = normalizeSides(config.borderColor, 'black', x => x ?? 'black'); - config.align = normalizeAlignment(config.align); - config.align.x = config.align.x ?? 'left'; - config.align.y = config.align.y ?? 'top'; - config.textStroke = doc.sizeToPoint(config.textStroke, 0); - config.textStrokeColor = config.textStrokeColor ?? 'black'; - config.textColor = config.textColor ?? 'black'; - config.textOptions = config.textOptions ?? {}; - config.id = new String(config.id ?? `${this._id}-${rowIndex}-${colIndex}`); - config.type = config.type?.toUpperCase() === 'TH' ? 'TH' : 'TD'; - if (config.scope) { - config.scope = config.scope.toLowerCase(); - if (config.scope === 'row') config.scope = 'Row';else if (config.scope === 'both') config.scope = 'Both';else if (config.scope === 'column') config.scope = 'Column'; - } - if (typeof this.opts.debug === 'boolean') config.debug = this.opts.debug; - if (customFont) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - return config; -} -function normalizeRow(row, rowIndex) { - if (!this._cellClaim) this._cellClaim = new Set(); - let colIndex = 0; - return row.map(cell => { - if (cell == null || typeof cell !== 'object') cell = { - text: cell - }; - while (this._cellClaim.has(`${rowIndex},${colIndex}`)) { - colIndex++; - } - cell = normalizeCell.call(this, cell, rowIndex, colIndex); - for (let i = 0; i < cell.rowSpan; i++) { - for (let j = 0; j < cell.colSpan; j++) { - this._cellClaim.add(`${rowIndex + i},${colIndex + j}`); - } - } - colIndex += cell.colSpan; - return cell; - }); -} - -function ensure(row) { - this._columnWidths = []; - ensureColumnWidths.call(this, row.reduce((a, cell) => a + cell.colSpan, 0)); - this._rowHeights = []; - this._rowYPos = [this._position.y]; - this._rowBuffer = new Set(); -} -function ensureColumnWidths(numCols) { - let starColumnIndexes = []; - let starMinAcc = 0; - let unclaimedWidth = this._maxWidth; - for (let i = 0; i < numCols; i++) { - let col = this._colStyle(i); - if (col.width === '*') { - starColumnIndexes[i] = col; - starMinAcc += col.minWidth; - } else { - unclaimedWidth -= col.width; - this._columnWidths[i] = col.width; - } - } - let starColCount = starColumnIndexes.reduce(x => x + 1, 0); - if (starMinAcc >= unclaimedWidth) { - starColumnIndexes.forEach((cell, i) => { - this._columnWidths[i] = cell.minWidth; - }); - } else if (starColCount > 0) { - starColumnIndexes.forEach((col, i) => { - let starSize = unclaimedWidth / starColCount; - this._columnWidths[i] = Math.max(starSize, col.minWidth); - if (col.maxWidth > 0) { - this._columnWidths[i] = Math.min(this._columnWidths[i], col.maxWidth); - } - unclaimedWidth -= this._columnWidths[i]; - starColCount--; - }); - } - let tempX = this._position.x; - this._columnXPos = Array.from(this._columnWidths, v => { - const t = tempX; - tempX += v; - return t; - }); -} -function measure(row, rowIndex) { - row.forEach(cell => this._rowBuffer.add(cell)); - if (rowIndex > 0) { - this._rowYPos[rowIndex] = this._rowYPos[rowIndex - 1] + this._rowHeights[rowIndex - 1]; - } - const rowStyle = this._rowStyle(rowIndex); - let toRender = []; - this._rowBuffer.forEach(cell => { - if (cell.rowIndex + cell.rowSpan - 1 === rowIndex) { - toRender.push(measureCell.call(this, cell, rowStyle.height)); - this._rowBuffer.delete(cell); - } - }); - let rowHeight = rowStyle.height; - if (rowHeight === 'auto') { - rowHeight = toRender.reduce((acc, cell) => { - let minHeight = cell.textBounds.height + cell.padding.top + cell.padding.bottom; - for (let i = 0; i < cell.rowSpan - 1; i++) { - minHeight -= this._rowHeights[cell.rowIndex + i]; - } - return Math.max(acc, minHeight); - }, 0); - } - rowHeight = Math.max(rowHeight, rowStyle.minHeight); - if (rowStyle.maxHeight > 0) { - rowHeight = Math.min(rowHeight, rowStyle.maxHeight); - } - this._rowHeights[rowIndex] = rowHeight; - let newPage = false; - if (rowHeight > this.document.page.contentHeight) { - console.warn(new Error(`Row ${rowIndex} requested more than the safe page height, row has been clamped`).stack.slice(7)); - this._rowHeights[rowIndex] = this.document.page.maxY() - this._rowYPos[rowIndex]; - } else if (this._rowYPos[rowIndex] + rowHeight >= this.document.page.maxY()) { - this._rowYPos[rowIndex] = this.document.page.margins.top; - newPage = true; - } - return { - newPage, - toRender: toRender.map(cell => measureCell.call(this, cell, rowHeight)) - }; -} -function measureCell(cell, rowHeight) { - let cellWidth = 0; - for (let i = 0; i < cell.colSpan; i++) { - cellWidth += this._columnWidths[cell.colIndex + i]; - } - let cellHeight = rowHeight; - if (cellHeight === 'auto') { - cellHeight = this.document.page.contentHeight; - } else { - for (let i = 0; i < cell.rowSpan - 1; i++) { - cellHeight += this._rowHeights[cell.rowIndex + i]; - } - } - const textAllocatedWidth = cellWidth - cell.padding.left - cell.padding.right; - const textAllocatedHeight = cellHeight - cell.padding.top - cell.padding.bottom; - const rotation = cell.textOptions.rotation ?? 0; - const { - width: textMaxWidth, - height: textMaxHeight - } = computeBounds(rotation, textAllocatedWidth, textAllocatedHeight); - const textOptions = { - align: cell.align.x, - ellipsis: true, - stroke: cell.textStroke > 0, - fill: true, - width: textMaxWidth, - height: textMaxHeight, - rotation, - ...cell.textOptions - }; - let textBounds = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - if (cell.text) { - const rollbackFont = this.document._fontSource; - const rollbackFontSize = this.document._fontSize; - const rollbackFontFamily = this.document._fontFamily; - if (cell.font?.src) this.document.font(cell.font.src, cell.font?.family); - if (cell.font?.size) this.document.fontSize(cell.font.size); - const unRotatedTextBounds = this.document.boundsOfString(cell.text, 0, 0, { - ...textOptions, - rotation: 0 - }); - textOptions.width = unRotatedTextBounds.width; - textOptions.height = unRotatedTextBounds.height; - textBounds = this.document.boundsOfString(cell.text, 0, 0, textOptions); - this.document.font(rollbackFont, rollbackFontFamily, rollbackFontSize); - } - return { - ...cell, - textOptions, - x: this._columnXPos[cell.colIndex], - y: this._rowYPos[cell.rowIndex], - textX: this._columnXPos[cell.colIndex] + cell.padding.left, - textY: this._rowYPos[cell.rowIndex] + cell.padding.top, - width: cellWidth, - height: cellHeight, - textAllocatedHeight, - textAllocatedWidth, - textBounds - }; -} -function computeBounds(rotation, allocWidth, allocHeight) { - let textMaxWidth, textMaxHeight; - const cos = cosine(rotation); - const sin = sine(rotation); - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = allocWidth / (2 * cos); - textMaxHeight = allocWidth / (2 * sin); - } else { - textMaxHeight = allocWidth / (2 * cos); - textMaxWidth = allocWidth / (2 * sin); - } - const EF = sin * textMaxWidth; - const FG = cos * textMaxHeight; - if (EF + FG > allocHeight) { - const denominator = cos * cos - sin * sin; - if (rotation === 0 || rotation === 180) { - textMaxWidth = allocWidth; - textMaxHeight = allocHeight; - } else if (rotation === 90 || rotation === 270) { - textMaxWidth = allocHeight; - textMaxHeight = allocWidth; - } else if (rotation < 90 || rotation > 180 && rotation < 270) { - textMaxWidth = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxHeight = (allocHeight * cos - allocWidth * sin) / denominator; - } else { - textMaxHeight = (allocWidth * cos - allocHeight * sin) / denominator; - textMaxWidth = (allocHeight * cos - allocWidth * sin) / denominator; - } - } - return { - width: Math.abs(textMaxWidth), - height: Math.abs(textMaxHeight) - }; -} - -function accommodateTable() { - const structParent = this.opts.structParent; - if (structParent) { - this._tableStruct = this.document.struct('Table'); - this._tableStruct.dictionary.data.ID = this._id; - if (structParent instanceof PDFStructureElement) { - structParent.add(this._tableStruct); - } else if (structParent instanceof PDFDocument) { - structParent.addStructure(this._tableStruct); - } - this._headerRowLookup = {}; - this._headerColumnLookup = {}; - } -} -function accommodateCleanup() { - if (this._tableStruct) this._tableStruct.end(); -} -function accessibleRow(row, rowIndex, renderCell) { - const rowStruct = this.document.struct('TR'); - rowStruct.dictionary.data.ID = new String(`${this._id}-${rowIndex}`); - this._tableStruct.add(rowStruct); - row.forEach(cell => renderCell(cell, rowStruct)); - rowStruct.end(); -} -function accessibleCell(cell, rowStruct, callback) { - const doc = this.document; - const cellStruct = doc.struct(cell.type, { - title: cell.title - }); - cellStruct.dictionary.data.ID = cell.id; - rowStruct.add(cellStruct); - const padding = cell.padding; - const border = cell.border; - const attributes = { - O: 'Table', - Width: cell.width, - Height: cell.height, - Padding: [padding.top, padding.bottom, padding.left, padding.right], - RowSpan: cell.rowSpan > 1 ? cell.rowSpan : undefined, - ColSpan: cell.colSpan > 1 ? cell.colSpan : undefined, - BorderThickness: [border.top, border.bottom, border.left, border.right] - }; - if (cell.type === 'TH') { - if (cell.scope === 'Row' || cell.scope === 'Both') { - for (let i = 0; i < cell.rowSpan; i++) { - if (!this._headerRowLookup[cell.rowIndex + i]) { - this._headerRowLookup[cell.rowIndex + i] = []; - } - this._headerRowLookup[cell.rowIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - if (cell.scope === 'Column' || cell.scope === 'Both') { - for (let i = 0; i < cell.colSpan; i++) { - if (!this._headerColumnLookup[cell.colIndex + i]) { - this._headerColumnLookup[cell.colIndex + i] = []; - } - this._headerColumnLookup[cell.colIndex + i].push(cell.id); - } - attributes.Scope = cell.scope; - } - } - const Headers = new Set([...Array.from({ - length: cell.colSpan - }, (_, i) => this._headerColumnLookup[cell.colIndex + i]).flat(), ...Array.from({ - length: cell.rowSpan - }, (_, i) => this._headerRowLookup[cell.rowIndex + i]).flat()].filter(Boolean)); - if (Headers.size) attributes.Headers = Array.from(Headers); - const normalizeColor = doc._normalizeColor; - if (cell.backgroundColor != null) { - attributes.BackgroundColor = normalizeColor(cell.backgroundColor); - } - const hasBorder = [border.top, border.bottom, border.left, border.right]; - if (hasBorder.some(x => x)) { - const borderColor = cell.borderColor; - attributes.BorderColor = [hasBorder[0] ? normalizeColor(borderColor.top) : null, hasBorder[1] ? normalizeColor(borderColor.bottom) : null, hasBorder[2] ? normalizeColor(borderColor.left) : null, hasBorder[3] ? normalizeColor(borderColor.right) : null]; - } - Object.keys(attributes).forEach(key => attributes[key] === undefined && delete attributes[key]); - cellStruct.dictionary.data.A = doc.ref(attributes); - cellStruct.add(callback); - cellStruct.end(); - cellStruct.dictionary.data.A.end(); -} - -function renderRow(row, rowIndex) { - if (this._tableStruct) { - accessibleRow.call(this, row, rowIndex, renderCell.bind(this)); - } else { - row.forEach(cell => renderCell.call(this, cell)); - } - return this._rowYPos[rowIndex] + this._rowHeights[rowIndex]; -} -function renderCell(cell, rowStruct) { - const cellRenderer = () => { - if (cell.backgroundColor != null) { - this.document.save().rect(cell.x, cell.y, cell.width, cell.height).fill(cell.backgroundColor).restore(); - } - renderBorder.call(this, cell.border, cell.borderColor, cell.x, cell.y, cell.width, cell.height); - if (cell.debug) { - this.document.save(); - this.document.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - this.document.rect(cell.x, cell.y, cell.width, cell.height).stroke('green'); - this.document.restore(); - } - if (cell.text) renderCellText.call(this, cell); - }; - if (rowStruct) accessibleCell.call(this, cell, rowStruct, cellRenderer);else cellRenderer(); -} -function renderCellText(cell) { - const doc = this.document; - const rollbackFont = doc._fontSource; - const rollbackFontSize = doc._fontSize; - const rollbackFontFamily = doc._fontFamily; - if (cell.customFont) { - if (cell.font.src) doc.font(cell.font.src, cell.font.family); - if (cell.font.size) doc.fontSize(cell.font.size); - } - const x = cell.textX; - const y = cell.textY; - const Ah = cell.textAllocatedHeight; - const Aw = cell.textAllocatedWidth; - const Cw = cell.textBounds.width; - const Ch = cell.textBounds.height; - const Ox = -cell.textBounds.x; - const Oy = -cell.textBounds.y; - const PxScale = cell.align.x === 'right' ? 1 : cell.align.x === 'center' ? 0.5 : 0; - const Px = (Aw - Cw) * PxScale; - const PyScale = cell.align.y === 'bottom' ? 1 : cell.align.y === 'center' ? 0.5 : 0; - const Py = (Ah - Ch) * PyScale; - const dx = Px + Ox; - const dy = Py + Oy; - if (cell.debug) { - doc.save(); - doc.dash(1, { - space: 1 - }).lineWidth(1).strokeOpacity(0.3); - if (cell.text) { - doc.moveTo(x + Px, y).lineTo(x + Px, y + Ah).moveTo(x + Px + Cw, y).lineTo(x + Px + Cw, y + Ah).stroke('blue').moveTo(x, y + Py).lineTo(x + Aw, y + Py).moveTo(x, y + Py + Ch).lineTo(x + Aw, y + Py + Ch).stroke('green'); - } - doc.rect(x, y, Aw, Ah).stroke('orange'); - doc.restore(); - } - doc.save().rect(x, y, Aw, Ah).clip(); - doc.fillColor(cell.textColor).strokeColor(cell.textStrokeColor); - if (cell.textStroke > 0) doc.lineWidth(cell.textStroke); - doc.text(cell.text, x + dx, y + dy, cell.textOptions); - doc.restore(); - if (cell.font) doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); -} -function renderBorder(border, borderColor, x, y, width, height, mask) { - border = Object.fromEntries(Object.entries(border).map(([k, v]) => [k, mask && !mask[k] ? 0 : v])); - const doc = this.document; - if ([border.right, border.bottom, border.left].every(val => val === border.top)) { - if (border.top > 0) { - doc.save().lineWidth(border.top).rect(x, y, width, height).stroke(borderColor.top).restore(); - } - } else { - if (border.top > 0) { - doc.save().lineWidth(border.top).moveTo(x, y).lineTo(x + width, y).stroke(borderColor.top).restore(); - } - if (border.right > 0) { - doc.save().lineWidth(border.right).moveTo(x + width, y).lineTo(x + width, y + height).stroke(borderColor.right).restore(); - } - if (border.bottom > 0) { - doc.save().lineWidth(border.bottom).moveTo(x + width, y + height).lineTo(x, y + height).stroke(borderColor.bottom).restore(); - } - if (border.left > 0) { - doc.save().lineWidth(border.left).moveTo(x, y + height).lineTo(x, y).stroke(borderColor.left).restore(); - } - } -} - -class PDFTable { - constructor(document, opts = {}) { - this.document = document; - this.opts = Object.freeze(opts); - normalizeTable.call(this); - accommodateTable.call(this); - this._currRowIndex = 0; - this._ended = false; - if (opts.data) { - for (const row of opts.data) this.row(row); - return this.end(); - } - } - row(row, lastRow = false) { - if (this._ended) { - throw new Error(`Table was marked as ended on row ${this._currRowIndex}`); - } - row = Array.from(row); - row = normalizeRow.call(this, row, this._currRowIndex); - if (this._currRowIndex === 0) ensure.call(this, row); - const { - newPage, - toRender - } = measure.call(this, row, this._currRowIndex); - if (newPage) this.document.continueOnNewPage(); - const yPos = renderRow.call(this, toRender, this._currRowIndex); - this.document.x = this._position.x; - this.document.y = yPos; - if (lastRow) return this.end(); - this._currRowIndex++; - return this; - } - end() { - while (this._rowBuffer?.size) this.row([]); - this._ended = true; - accommodateCleanup.call(this); - return this.document; - } -} - -var TableMixin = { - initTables() { - this._tableIndex = 0; - }, - table(opts) { - return new PDFTable(this, opts); - } -}; - -class PDFMetadata { - constructor() { - this._metadata = ` - - - - `; - } - _closeTags() { - this._metadata = this._metadata.concat(` - - - - `); - } - append(xml, newline = true) { - this._metadata = this._metadata.concat(xml); - if (newline) this._metadata = this._metadata.concat('\n'); - } - getXML() { - return this._metadata; - } - getLength() { - return this._metadata.length; - } - end() { - this._closeTags(); - this._metadata = this._metadata.trim(); - } -} - -var MetadataMixin = { - initMetadata() { - this.metadata = new PDFMetadata(); - }, - appendXML(xml, newline = true) { - this.metadata.append(xml, newline); - }, - _addInfo() { - this.appendXML(` - - ${this.info.CreationDate.toISOString().split('.')[0] + 'Z'} - ${this.info.Creator} - - `); - if (this.info.Title || this.info.Author || this.info.Subject) { - this.appendXML(` - - `); - if (this.info.Title) { - this.appendXML(` - - - ${this.info.Title} - - - `); - } - if (this.info.Author) { - this.appendXML(` - - - ${this.info.Author} - - - `); - } - if (this.info.Subject) { - this.appendXML(` - - - ${this.info.Subject} - - - `); - } - this.appendXML(` - - `); - } - this.appendXML(` - - ${this.info.Creator}`, false); - if (this.info.Keywords) { - this.appendXML(` - ${this.info.Keywords}`, false); - } - this.appendXML(` - - `); - }, - endMetadata() { - this._addInfo(); - this.metadata.end(); - if (this.version != 1.3) { - this.metadataRef = this.ref({ - length: this.metadata.getLength(), - Type: 'Metadata', - Subtype: 'XML' - }); - this.metadataRef.compress = false; - this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8')); - this.metadataRef.end(); - this._root.data.Metadata = this.metadataRef; - } - } -}; - -class PDFDocument extends stream.Readable { - constructor(options = {}) { - super(options); - this.options = options; - switch (options.pdfVersion) { - case '1.4': - this.version = 1.4; - break; - case '1.5': - this.version = 1.5; - break; - case '1.6': - this.version = 1.6; - break; - case '1.7': - case '1.7ext3': - this.version = 1.7; - break; - default: - this.version = 1.3; - break; - } - this.compress = this.options.compress != null ? this.options.compress : true; - this._pageBuffer = []; - this._pageBufferStart = 0; - this._offsets = []; - this._waiting = 0; - this._ended = false; - this._offset = 0; - const Pages = this.ref({ - Type: 'Pages', - Count: 0, - Kids: [] - }); - const Names = this.ref({ - Dests: new PDFNameTree() - }); - this._root = this.ref({ - Type: 'Catalog', - Pages, - Names - }); - if (this.options.lang) { - this._root.data.Lang = new String(this.options.lang); - } - this.page = null; - this.initMetadata(); - this.initColor(); - this.initVector(); - this.initFonts(options.font); - this.initText(); - this.initImages(); - this.initOutline(); - this.initMarkings(options); - this.initTables(); - this.initSubset(options); - this.info = { - Producer: 'PDFKit', - Creator: 'PDFKit', - CreationDate: new Date() - }; - if (this.options.info) { - for (let key in this.options.info) { - const val = this.options.info[key]; - this.info[key] = val; - } - } - if (this.options.displayTitle) { - this._root.data.ViewerPreferences = this.ref({ - DisplayDocTitle: true - }); - } - this._id = PDFSecurity.generateFileID(this.info); - this._security = PDFSecurity.create(this, options); - this._write(`%PDF-${this.version}`); - this._write('%\xFF\xFF\xFF\xFF'); - if (this.options.autoFirstPage !== false) { - this.addPage(); - } - } - addPage(options) { - if (options == null) { - ({ - options - } = this); - } - if (!this.options.bufferPages) { - this.flushPages(); - } - this.page = new PDFPage(this, options); - this._pageBuffer.push(this.page); - const pages = this._root.data.Pages.data; - pages.Kids.push(this.page.dictionary); - pages.Count++; - this.x = this.page.margins.left; - this.y = this.page.margins.top; - this._ctm = [1, 0, 0, 1, 0, 0]; - this.transform(1, 0, 0, -1, 0, this.page.height); - this.emit('pageAdded'); - return this; - } - continueOnNewPage(options) { - const pageMarkings = this.endPageMarkings(this.page); - this.addPage(options ?? this.page._options); - this.initPageMarkings(pageMarkings); - return this; - } - bufferedPageRange() { - return { - start: this._pageBufferStart, - count: this._pageBuffer.length - }; - } - switchToPage(n) { - let page; - if (!(page = this._pageBuffer[n - this._pageBufferStart])) { - throw new Error(`switchToPage(${n}) out of bounds, current buffer covers pages ${this._pageBufferStart} to ${this._pageBufferStart + this._pageBuffer.length - 1}`); - } - return this.page = page; - } - flushPages() { - const pages = this._pageBuffer; - this._pageBuffer = []; - this._pageBufferStart += pages.length; - for (let page of pages) { - this.endPageMarkings(page); - page.end(); - } - } - addNamedDestination(name, ...args) { - if (args.length === 0) { - args = ['XYZ', null, null, null]; - } - if (args[0] === 'XYZ' && args[2] !== null) { - args[2] = this.page.height - args[2]; - } - args.unshift(this.page.dictionary); - this._root.data.Names.data.Dests.add(name, args); - } - addNamedEmbeddedFile(name, ref) { - if (!this._root.data.Names.data.EmbeddedFiles) { - this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ - limits: false - }); - } - this._root.data.Names.data.EmbeddedFiles.add(name, ref); - } - addNamedJavaScript(name, js) { - if (!this._root.data.Names.data.JavaScript) { - this._root.data.Names.data.JavaScript = new PDFNameTree(); - } - let data = { - JS: new String(js), - S: 'JavaScript' - }; - this._root.data.Names.data.JavaScript.add(name, data); - } - ref(data) { - const ref = new PDFReference(this, this._offsets.length + 1, data); - this._offsets.push(null); - this._waiting++; - return ref; - } - _read() {} - _write(data) { - if (!Buffer.isBuffer(data)) { - data = Buffer.from(data + '\n', 'binary'); - } - this.push(data); - this._offset += data.length; - } - addContent(data) { - this.page.write(data); - return this; - } - _refEnd(ref) { - this._offsets[ref.id - 1] = ref.offset; - if (--this._waiting === 0 && this._ended) { - this._finalize(); - this._ended = false; - } - } - end() { - this.flushPages(); - this._info = this.ref(); - for (let key in this.info) { - let val = this.info[key]; - if (typeof val === 'string') { - val = new String(val); - } - let entry = this.ref(val); - entry.end(); - this._info.data[key] = entry; - } - this._info.end(); - for (let name in this._fontFamilies) { - const font = this._fontFamilies[name]; - font.finalize(); - } - this.endOutline(); - this.endMarkings(); - if (this.subset) { - this.endSubset(); - } - this.endMetadata(); - this._root.end(); - this._root.data.Pages.end(); - this._root.data.Names.end(); - this.endAcroForm(); - if (this._root.data.ViewerPreferences) { - this._root.data.ViewerPreferences.end(); - } - if (this._security) { - this._security.end(); - } - if (this._waiting === 0) { - this._finalize(); - } else { - this._ended = true; - } - } - _finalize() { - const xRefOffset = this._offset; - this._write('xref'); - this._write(`0 ${this._offsets.length + 1}`); - this._write('0000000000 65535 f '); - for (let offset of this._offsets) { - offset = `0000000000${offset}`.slice(-10); - this._write(offset + ' 00000 n '); - } - const trailer = { - Size: this._offsets.length + 1, - Root: this._root, - Info: this._info, - ID: [this._id, this._id] - }; - if (this._security) { - trailer.Encrypt = this._security.dictionary; - } - this._write('trailer'); - this._write(PDFObject.convert(trailer)); - this._write('startxref'); - this._write(`${xRefOffset}`); - this._write('%%EOF'); - this.push(null); - } - toString() { - return '[object PDFDocument]'; - } -} -const mixin = methods => { - Object.assign(PDFDocument.prototype, methods); -}; -mixin(MetadataMixin); -mixin(ColorMixin); -mixin(VectorMixin); -mixin(FontsMixin); -mixin(TextMixin); -mixin(ImagesMixin); -mixin(AnnotationsMixin); -mixin(OutlineMixin); -mixin(MarkingsMixin); -mixin(AcroFormMixin); -mixin(AttachmentsMixin); -mixin(SubsetMixin); -mixin(TableMixin); -PDFDocument.LineWrapper = LineWrapper; - -module.exports = PDFDocument; - - -}).call(this)}).call(this,require("buffer").Buffer) -},{"buffer":36,"crypto-js":56,"events":94,"fontkit":96,"fs":35,"jpeg-exif":118,"linebreak":120,"png-js":135,"stream":142,"zlib":23}],2:[function(require,module,exports){ -"use strict"; - -function _define_property(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); - } else obj[key] = value; - - return obj; -} -exports._ = _define_property; - -},{}],3:[function(require,module,exports){ -"use strict"; - -exports._ = require("tslib").__decorate; - -},{"tslib":159}],4:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -var objectAssign = require('object.assign/polyfill')(); - -// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js -// original notice: - -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -function compare(a, b) { - if (a === b) { - return 0; - } - - var x = a.length; - var y = b.length; - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i]; - y = b[i]; - break; - } - } - - if (x < y) { - return -1; - } - if (y < x) { - return 1; - } - return 0; -} -function isBuffer(b) { - if (global.Buffer && typeof global.Buffer.isBuffer === 'function') { - return global.Buffer.isBuffer(b); - } - return !!(b != null && b._isBuffer); -} - -// based on node assert, original notice: -// NB: The URL to the CommonJS spec is kept just for tradition. -// node-assert has evolved a lot since then, both in API and behavior. - -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -var util = require('util/'); -var hasOwn = Object.prototype.hasOwnProperty; -var pSlice = Array.prototype.slice; -var functionsHaveNames = (function () { - return function foo() {}.name === 'foo'; -}()); -function pToString (obj) { - return Object.prototype.toString.call(obj); -} -function isView(arrbuf) { - if (isBuffer(arrbuf)) { - return false; - } - if (typeof global.ArrayBuffer !== 'function') { - return false; - } - if (typeof ArrayBuffer.isView === 'function') { - return ArrayBuffer.isView(arrbuf); - } - if (!arrbuf) { - return false; - } - if (arrbuf instanceof DataView) { - return true; - } - if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) { - return true; - } - return false; -} -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = module.exports = ok; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) - -var regex = /\s*function\s+([^\(\s]*)\s*/; -// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js -function getName(func) { - if (!util.isFunction(func)) { - return; - } - if (functionsHaveNames) { - return func.name; - } - var str = func.toString(); - var match = str.match(regex); - return match && match[1]; -} -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; - - // try to strip useless frames - var fn_name = getName(stackStartFunction); - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } - - this.stack = out; - } - } -}; - -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); - -function truncate(s, n) { - if (typeof s === 'string') { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} -function inspect(something) { - if (functionsHaveNames || !util.isFunction(something)) { - return util.inspect(something); - } - var rawname = getName(something); - var name = rawname ? ': ' + rawname : ''; - return '[Function' + name + ']'; -} -function getMessage(self) { - return truncate(inspect(self.actual), 128) + ' ' + - self.operator + ' ' + - truncate(inspect(self.expected), 128); -} - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected, false)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } -}; - -assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { - if (!_deepEqual(actual, expected, true)) { - fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); - } -}; - -function _deepEqual(actual, expected, strict, memos) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - } else if (isBuffer(actual) && isBuffer(expected)) { - return compare(actual, expected) === 0; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); - - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if ((actual === null || typeof actual !== 'object') && - (expected === null || typeof expected !== 'object')) { - return strict ? actual === expected : actual == expected; - - // If both values are instances of typed arrays, wrap their underlying - // ArrayBuffers in a Buffer each to increase performance - // This optimization requires the arrays to have the same type as checked by - // Object.prototype.toString (aka pToString). Never perform binary - // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their - // bit patterns are not identical. - } else if (isView(actual) && isView(expected) && - pToString(actual) === pToString(expected) && - !(actual instanceof Float32Array || - actual instanceof Float64Array)) { - return compare(new Uint8Array(actual.buffer), - new Uint8Array(expected.buffer)) === 0; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else if (isBuffer(actual) !== isBuffer(expected)) { - return false; - } else { - memos = memos || {actual: [], expected: []}; - - var actualIndex = memos.actual.indexOf(actual); - if (actualIndex !== -1) { - if (actualIndex === memos.expected.indexOf(expected)) { - return true; - } - } - - memos.actual.push(actual); - memos.expected.push(expected); - - return objEquiv(actual, expected, strict, memos); - } -} - -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv(a, b, strict, actualVisitedObjects) { - if (a === null || a === undefined || b === null || b === undefined) - return false; - // if one is a primitive, the other must be same - if (util.isPrimitive(a) || util.isPrimitive(b)) - return a === b; - if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) - return false; - var aIsArgs = isArguments(a); - var bIsArgs = isArguments(b); - if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) - return false; - if (aIsArgs) { - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b, strict); - } - var ka = objectKeys(a); - var kb = objectKeys(b); - var key, i; - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length !== kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] !== kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects)) - return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected, false)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); - } -}; - -assert.notDeepStrictEqual = notDeepStrictEqual; -function notDeepStrictEqual(actual, expected, message) { - if (_deepEqual(actual, expected, true)) { - fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); - } -} - - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; - -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } - - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } - - try { - if (actual instanceof expected) { - return true; - } - } catch (e) { - // Ignore. The instanceof check doesn't work for arrow functions. - } - - if (Error.isPrototypeOf(expected)) { - return false; - } - - return expected.call({}, actual) === true; -} - -function _tryBlock(block) { - var error; - try { - block(); - } catch (e) { - error = e; - } - return error; -} - -function _throws(shouldThrow, block, expected, message) { - var actual; - - if (typeof block !== 'function') { - throw new TypeError('"block" argument must be a function'); - } - - if (typeof expected === 'string') { - message = expected; - expected = null; - } - - actual = _tryBlock(block); - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); - } - - var userProvidedMessage = typeof message === 'string'; - var isUnwantedException = !shouldThrow && util.isError(actual); - var isUnexpectedException = !shouldThrow && actual && !expected; - - if ((isUnwantedException && - userProvidedMessage && - expectedException(actual, expected)) || - isUnexpectedException) { - fail(actual, expected, 'Got unwanted exception' + message); - } - - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws(true, block, error, message); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { - _throws(false, block, error, message); -}; - -assert.ifError = function(err) { if (err) throw err; }; - -// Expose a strict only variant of assert -function strict(value, message) { - if (!value) fail(value, true, message, '==', strict); -} -assert.strict = objectAssign(strict, assert, { - equal: assert.strictEqual, - deepEqual: assert.deepStrictEqual, - notEqual: assert.notStrictEqual, - notDeepEqual: assert.notDeepStrictEqual -}); -assert.strict.strict = assert.strict; - -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; -}; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"object.assign/polyfill":134,"util/":7}],5:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],6:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],7:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":6,"_process":137,"inherits":5}],8:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -var possibleNames = require('possible-typed-array-names'); - -var g = typeof globalThis === 'undefined' ? global : globalThis; - -/** @type {import('.')} */ -module.exports = function availableTypedArrays() { - var /** @type {ReturnType} */ out = []; - for (var i = 0; i < possibleNames.length; i++) { - if (typeof g[possibleNames[i]] === 'function') { - // @ts-expect-error - out[out.length] = possibleNames[i]; - } - } - return out; -}; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"possible-typed-array-names":136}],9:[function(require,module,exports){ -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function getLens (b64) { - var len = b64.length - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} - -},{}],10:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Bit reading helpers -*/ - -var BROTLI_READ_SIZE = 4096; -var BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32); -var BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1); - -var kBitMask = new Uint32Array([ - 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, - 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215 -]); - -/* Input byte buffer, consist of a ringbuffer and a "slack" region where */ -/* bytes from the start of the ringbuffer are copied. */ -function BrotliBitReader(input) { - this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); - this.input_ = input; /* input callback */ - - this.reset(); -} - -BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; -BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; - -BrotliBitReader.prototype.reset = function() { - this.buf_ptr_ = 0; /* next input will write here */ - this.val_ = 0; /* pre-fetched bits */ - this.pos_ = 0; /* byte position in stream */ - this.bit_pos_ = 0; /* current bit-reading position in val_ */ - this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */ - this.eos_ = 0; /* input stream is finished */ - - this.readMoreInput(); - for (var i = 0; i < 4; i++) { - this.val_ |= this.buf_[this.pos_] << (8 * i); - ++this.pos_; - } - - return this.bit_end_pos_ > 0; -}; - -/* Fills up the input ringbuffer by calling the input callback. - - Does nothing if there are at least 32 bytes present after current position. - - Returns 0 if either: - - the input callback returned an error, or - - there is no more input and the position is past the end of the stream. - - After encountering the end of the input stream, 32 additional zero bytes are - copied to the ringbuffer, therefore it is safe to call this function after - every 32 bytes of input is read. -*/ -BrotliBitReader.prototype.readMoreInput = function() { - if (this.bit_end_pos_ > 256) { - return; - } else if (this.eos_) { - if (this.bit_pos_ > this.bit_end_pos_) - throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_); - } else { - var dst = this.buf_ptr_; - var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE); - if (bytes_read < 0) { - throw new Error('Unexpected end of input'); - } - - if (bytes_read < BROTLI_READ_SIZE) { - this.eos_ = 1; - /* Store 32 bytes of zero after the stream end. */ - for (var p = 0; p < 32; p++) - this.buf_[dst + bytes_read + p] = 0; - } - - if (dst === 0) { - /* Copy the head of the ringbuffer to the slack region. */ - for (var p = 0; p < 32; p++) - this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p]; - - this.buf_ptr_ = BROTLI_READ_SIZE; - } else { - this.buf_ptr_ = 0; - } - - this.bit_end_pos_ += bytes_read << 3; - } -}; - -/* Guarantees that there are at least 24 bits in the buffer. */ -BrotliBitReader.prototype.fillBitWindow = function() { - while (this.bit_pos_ >= 8) { - this.val_ >>>= 8; - this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; - ++this.pos_; - this.bit_pos_ = this.bit_pos_ - 8 >>> 0; - this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; - } -}; - -/* Reads the specified number of bits from Read Buffer. */ -BrotliBitReader.prototype.readBits = function(n_bits) { - if (32 - this.bit_pos_ < n_bits) { - this.fillBitWindow(); - } - - var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]); - this.bit_pos_ += n_bits; - return val; -}; - -module.exports = BrotliBitReader; - -},{}],11:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Lookup table to map the previous two bytes to a context id. - - There are four different context modeling modes defined here: - CONTEXT_LSB6: context id is the least significant 6 bits of the last byte, - CONTEXT_MSB6: context id is the most significant 6 bits of the last byte, - CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, - CONTEXT_SIGNED: second-order context model tuned for signed integers. - - The context id for the UTF8 context model is calculated as follows. If p1 - and p2 are the previous two bytes, we calcualte the context as - - context = kContextLookup[p1] | kContextLookup[p2 + 256]. - - If the previous two bytes are ASCII characters (i.e. < 128), this will be - equivalent to - - context = 4 * context1(p1) + context2(p2), - - where context1 is based on the previous byte in the following way: - - 0 : non-ASCII control - 1 : \t, \n, \r - 2 : space - 3 : other punctuation - 4 : " ' - 5 : % - 6 : ( < [ { - 7 : ) > ] } - 8 : , ; : - 9 : . - 10 : = - 11 : number - 12 : upper-case vowel - 13 : upper-case consonant - 14 : lower-case vowel - 15 : lower-case consonant - - and context2 is based on the second last byte: - - 0 : control, space - 1 : punctuation - 2 : upper-case letter, number - 3 : lower-case letter - - If the last byte is ASCII, and the second last byte is not (in a valid UTF8 - stream it will be a continuation byte, value between 128 and 191), the - context is the same as if the second last byte was an ASCII control or space. - - If the last byte is a UTF8 lead byte (value >= 192), then the next byte will - be a continuation byte and the context id is 2 or 3 depending on the LSB of - the last byte and to a lesser extent on the second last byte if it is ASCII. - - If the last byte is a UTF8 continuation byte, the second last byte can be: - - continuation byte: the next byte is probably ASCII or lead byte (assuming - 4-byte UTF8 characters are rare) and the context id is 0 or 1. - - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 - - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 - - The possible value combinations of the previous two bytes, the range of - context ids and the type of the next byte is summarized in the table below: - - |--------\-----------------------------------------------------------------| - | \ Last byte | - | Second \---------------------------------------------------------------| - | last byte \ ASCII | cont. byte | lead byte | - | \ (0-127) | (128-191) | (192-) | - |=============|===================|=====================|==================| - | ASCII | next: ASCII/lead | not valid | next: cont. | - | (0-127) | context: 4 - 63 | | context: 2 - 3 | - |-------------|-------------------|---------------------|------------------| - | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | - | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | - |-------------|-------------------|---------------------|------------------| - | lead byte | not valid | next: ASCII/lead | not valid | - | (192-207) | | context: 0 - 1 | | - |-------------|-------------------|---------------------|------------------| - | lead byte | not valid | next: cont. | not valid | - | (208-) | | context: 2 - 3 | | - |-------------|-------------------|---------------------|------------------| - - The context id for the signed context mode is calculated as: - - context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2]. - - For any context modeling modes, the context ids can be calculated by |-ing - together two lookups from one table using context model dependent offsets: - - context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2]. - - where offset1 and offset2 are dependent on the context mode. -*/ - -var CONTEXT_LSB6 = 0; -var CONTEXT_MSB6 = 1; -var CONTEXT_UTF8 = 2; -var CONTEXT_SIGNED = 3; - -/* Common context lookup table for all context modes. */ -exports.lookup = new Uint8Array([ - /* CONTEXT_UTF8, last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, - 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, - 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, - 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, - 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - /* UTF8 continuation byte range. */ - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - /* UTF8 lead byte range. */ - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - /* CONTEXT_UTF8 second last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - /* UTF8 continuation byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* UTF8 lead byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* CONTEXT_SIGNED, second last byte. */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, - /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, - /* CONTEXT_LSB6, last byte. */ - 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, - 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, - 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, - 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, - /* CONTEXT_MSB6, last byte. */ - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, - 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, - 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, - 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, - 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, - 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, - 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, - 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, - 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, - 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, - 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, - 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, - /* CONTEXT_{M,L}SB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -]); - -exports.lookupOffsets = new Uint16Array([ - /* CONTEXT_LSB6 */ - 1024, 1536, - /* CONTEXT_MSB6 */ - 1280, 1536, - /* CONTEXT_UTF8 */ - 0, 256, - /* CONTEXT_SIGNED */ - 768, 512, -]); - -},{}],12:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -var BrotliInput = require('./streams').BrotliInput; -var BrotliOutput = require('./streams').BrotliOutput; -var BrotliBitReader = require('./bit_reader'); -var BrotliDictionary = require('./dictionary'); -var HuffmanCode = require('./huffman').HuffmanCode; -var BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable; -var Context = require('./context'); -var Prefix = require('./prefix'); -var Transform = require('./transform'); - -var kDefaultCodeLength = 8; -var kCodeLengthRepeatCode = 16; -var kNumLiteralCodes = 256; -var kNumInsertAndCopyCodes = 704; -var kNumBlockLengthCodes = 26; -var kLiteralContextBits = 6; -var kDistanceContextBits = 2; - -var HUFFMAN_TABLE_BITS = 8; -var HUFFMAN_TABLE_MASK = 0xff; -/* Maximum possible Huffman table size for an alphabet size of 704, max code - * length 15 and root table bits 8. */ -var HUFFMAN_MAX_TABLE_SIZE = 1080; - -var CODE_LENGTH_CODES = 18; -var kCodeLengthCodeOrder = new Uint8Array([ - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, -]); - -var NUM_DISTANCE_SHORT_CODES = 16; -var kDistanceShortCodeIndexOffset = new Uint8Array([ - 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 -]); - -var kDistanceShortCodeValueOffset = new Int8Array([ - 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 -]); - -var kMaxHuffmanTableSize = new Uint16Array([ - 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, - 854, 886, 920, 952, 984, 1016, 1048, 1080 -]); - -function DecodeWindowBits(br) { - var n; - if (br.readBits(1) === 0) { - return 16; - } - - n = br.readBits(3); - if (n > 0) { - return 17 + n; - } - - n = br.readBits(3); - if (n > 0) { - return 8 + n; - } - - return 17; -} - -/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ -function DecodeVarLenUint8(br) { - if (br.readBits(1)) { - var nbits = br.readBits(3); - if (nbits === 0) { - return 1; - } else { - return br.readBits(nbits) + (1 << nbits); - } - } - return 0; -} - -function MetaBlockLength() { - this.meta_block_length = 0; - this.input_end = 0; - this.is_uncompressed = 0; - this.is_metadata = false; -} - -function DecodeMetaBlockLength(br) { - var out = new MetaBlockLength; - var size_nibbles; - var size_bytes; - var i; - - out.input_end = br.readBits(1); - if (out.input_end && br.readBits(1)) { - return out; - } - - size_nibbles = br.readBits(2) + 4; - if (size_nibbles === 7) { - out.is_metadata = true; - - if (br.readBits(1) !== 0) - throw new Error('Invalid reserved bit'); - - size_bytes = br.readBits(2); - if (size_bytes === 0) - return out; - - for (i = 0; i < size_bytes; i++) { - var next_byte = br.readBits(8); - if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0) - throw new Error('Invalid size byte'); - - out.meta_block_length |= next_byte << (i * 8); - } - } else { - for (i = 0; i < size_nibbles; ++i) { - var next_nibble = br.readBits(4); - if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) - throw new Error('Invalid size nibble'); - - out.meta_block_length |= next_nibble << (i * 4); - } - } - - ++out.meta_block_length; - - if (!out.input_end && !out.is_metadata) { - out.is_uncompressed = br.readBits(1); - } - - return out; -} - -/* Decodes the next Huffman code from bit-stream. */ -function ReadSymbol(table, index, br) { - var start_index = index; - - var nbits; - br.fillBitWindow(); - index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK; - nbits = table[index].bits - HUFFMAN_TABLE_BITS; - if (nbits > 0) { - br.bit_pos_ += HUFFMAN_TABLE_BITS; - index += table[index].value; - index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1); - } - br.bit_pos_ += table[index].bits; - return table[index].value; -} - -function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { - var symbol = 0; - var prev_code_len = kDefaultCodeLength; - var repeat = 0; - var repeat_code_len = 0; - var space = 32768; - - var table = []; - for (var i = 0; i < 32; i++) - table.push(new HuffmanCode(0, 0)); - - BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES); - - while (symbol < num_symbols && space > 0) { - var p = 0; - var code_len; - - br.readMoreInput(); - br.fillBitWindow(); - p += (br.val_ >>> br.bit_pos_) & 31; - br.bit_pos_ += table[p].bits; - code_len = table[p].value & 0xff; - if (code_len < kCodeLengthRepeatCode) { - repeat = 0; - code_lengths[symbol++] = code_len; - if (code_len !== 0) { - prev_code_len = code_len; - space -= 32768 >> code_len; - } - } else { - var extra_bits = code_len - 14; - var old_repeat; - var repeat_delta; - var new_len = 0; - if (code_len === kCodeLengthRepeatCode) { - new_len = prev_code_len; - } - if (repeat_code_len !== new_len) { - repeat = 0; - repeat_code_len = new_len; - } - old_repeat = repeat; - if (repeat > 0) { - repeat -= 2; - repeat <<= extra_bits; - } - repeat += br.readBits(extra_bits) + 3; - repeat_delta = repeat - old_repeat; - if (symbol + repeat_delta > num_symbols) { - throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols'); - } - - for (var x = 0; x < repeat_delta; x++) - code_lengths[symbol + x] = repeat_code_len; - - symbol += repeat_delta; - - if (repeat_code_len !== 0) { - space -= repeat_delta << (15 - repeat_code_len); - } - } - } - if (space !== 0) { - throw new Error("[ReadHuffmanCodeLengths] space = " + space); - } - - for (; symbol < num_symbols; symbol++) - code_lengths[symbol] = 0; -} - -function ReadHuffmanCode(alphabet_size, tables, table, br) { - var table_size = 0; - var simple_code_or_skip; - var code_lengths = new Uint8Array(alphabet_size); - - br.readMoreInput(); - - /* simple_code_or_skip is used as follows: - 1 for simple code; - 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ - simple_code_or_skip = br.readBits(2); - if (simple_code_or_skip === 1) { - /* Read symbols, codes & code lengths directly. */ - var i; - var max_bits_counter = alphabet_size - 1; - var max_bits = 0; - var symbols = new Int32Array(4); - var num_symbols = br.readBits(2) + 1; - while (max_bits_counter) { - max_bits_counter >>= 1; - ++max_bits; - } - - for (i = 0; i < num_symbols; ++i) { - symbols[i] = br.readBits(max_bits) % alphabet_size; - code_lengths[symbols[i]] = 2; - } - code_lengths[symbols[0]] = 1; - switch (num_symbols) { - case 1: - break; - case 3: - if ((symbols[0] === symbols[1]) || - (symbols[0] === symbols[2]) || - (symbols[1] === symbols[2])) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - break; - case 2: - if (symbols[0] === symbols[1]) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - - code_lengths[symbols[1]] = 1; - break; - case 4: - if ((symbols[0] === symbols[1]) || - (symbols[0] === symbols[2]) || - (symbols[0] === symbols[3]) || - (symbols[1] === symbols[2]) || - (symbols[1] === symbols[3]) || - (symbols[2] === symbols[3])) { - throw new Error('[ReadHuffmanCode] invalid symbols'); - } - - if (br.readBits(1)) { - code_lengths[symbols[2]] = 3; - code_lengths[symbols[3]] = 3; - } else { - code_lengths[symbols[0]] = 2; - } - break; - } - } else { /* Decode Huffman-coded code lengths. */ - var i; - var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES); - var space = 32; - var num_codes = 0; - /* Static Huffman code for the code length code lengths */ - var huff = [ - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), - new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5) - ]; - for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) { - var code_len_idx = kCodeLengthCodeOrder[i]; - var p = 0; - var v; - br.fillBitWindow(); - p += (br.val_ >>> br.bit_pos_) & 15; - br.bit_pos_ += huff[p].bits; - v = huff[p].value; - code_length_code_lengths[code_len_idx] = v; - if (v !== 0) { - space -= (32 >> v); - ++num_codes; - } - } - - if (!(num_codes === 1 || space === 0)) - throw new Error('[ReadHuffmanCode] invalid num_codes or space'); - - ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br); - } - - table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size); - - if (table_size === 0) { - throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: "); - } - - return table_size; -} - -function ReadBlockLength(table, index, br) { - var code; - var nbits; - code = ReadSymbol(table, index, br); - nbits = Prefix.kBlockLengthPrefixCode[code].nbits; - return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); -} - -function TranslateShortCodes(code, ringbuffer, index) { - var val; - if (code < NUM_DISTANCE_SHORT_CODES) { - index += kDistanceShortCodeIndexOffset[code]; - index &= 3; - val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; - } else { - val = code - NUM_DISTANCE_SHORT_CODES + 1; - } - return val; -} - -function MoveToFront(v, index) { - var value = v[index]; - var i = index; - for (; i; --i) v[i] = v[i - 1]; - v[0] = value; -} - -function InverseMoveToFrontTransform(v, v_len) { - var mtf = new Uint8Array(256); - var i; - for (i = 0; i < 256; ++i) { - mtf[i] = i; - } - for (i = 0; i < v_len; ++i) { - var index = v[i]; - v[i] = mtf[index]; - if (index) MoveToFront(mtf, index); - } -} - -/* Contains a collection of huffman trees with the same alphabet size. */ -function HuffmanTreeGroup(alphabet_size, num_htrees) { - this.alphabet_size = alphabet_size; - this.num_htrees = num_htrees; - this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); - this.htrees = new Uint32Array(num_htrees); -} - -HuffmanTreeGroup.prototype.decode = function(br) { - var i; - var table_size; - var next = 0; - for (i = 0; i < this.num_htrees; ++i) { - this.htrees[i] = next; - table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br); - next += table_size; - } -}; - -function DecodeContextMap(context_map_size, br) { - var out = { num_htrees: null, context_map: null }; - var use_rle_for_zeros; - var max_run_length_prefix = 0; - var table; - var i; - - br.readMoreInput(); - var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; - - var context_map = out.context_map = new Uint8Array(context_map_size); - if (num_htrees <= 1) { - return out; - } - - use_rle_for_zeros = br.readBits(1); - if (use_rle_for_zeros) { - max_run_length_prefix = br.readBits(4) + 1; - } - - table = []; - for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) { - table[i] = new HuffmanCode(0, 0); - } - - ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br); - - for (i = 0; i < context_map_size;) { - var code; - - br.readMoreInput(); - code = ReadSymbol(table, 0, br); - if (code === 0) { - context_map[i] = 0; - ++i; - } else if (code <= max_run_length_prefix) { - var reps = 1 + (1 << code) + br.readBits(code); - while (--reps) { - if (i >= context_map_size) { - throw new Error("[DecodeContextMap] i >= context_map_size"); - } - context_map[i] = 0; - ++i; - } - } else { - context_map[i] = code - max_run_length_prefix; - ++i; - } - } - if (br.readBits(1)) { - InverseMoveToFrontTransform(context_map, context_map_size); - } - - return out; -} - -function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { - var ringbuffer = tree_type * 2; - var index = tree_type; - var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br); - var block_type; - if (type_code === 0) { - block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; - } else if (type_code === 1) { - block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1; - } else { - block_type = type_code - 2; - } - if (block_type >= max_block_type) { - block_type -= max_block_type; - } - block_types[tree_type] = block_type; - ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; - ++indexes[index]; -} - -function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { - var rb_size = ringbuffer_mask + 1; - var rb_pos = pos & ringbuffer_mask; - var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; - var nbytes; - - /* For short lengths copy byte-by-byte */ - if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { - while (len-- > 0) { - br.readMoreInput(); - ringbuffer[rb_pos++] = br.readBits(8); - if (rb_pos === rb_size) { - output.write(ringbuffer, rb_size); - rb_pos = 0; - } - } - return; - } - - if (br.bit_end_pos_ < 32) { - throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32'); - } - - /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */ - while (br.bit_pos_ < 32) { - ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_); - br.bit_pos_ += 8; - ++rb_pos; - --len; - } - - /* Copy remaining bytes from br.buf_ to ringbuffer. */ - nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3; - if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { - var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; - for (var x = 0; x < tail; x++) - ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; - - nbytes -= tail; - rb_pos += tail; - len -= tail; - br_pos = 0; - } - - for (var x = 0; x < nbytes; x++) - ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; - - rb_pos += nbytes; - len -= nbytes; - - /* If we wrote past the logical end of the ringbuffer, copy the tail of the - ringbuffer to its beginning and flush the ringbuffer to the output. */ - if (rb_pos >= rb_size) { - output.write(ringbuffer, rb_size); - rb_pos -= rb_size; - for (var x = 0; x < rb_pos; x++) - ringbuffer[x] = ringbuffer[rb_size + x]; - } - - /* If we have more to copy than the remaining size of the ringbuffer, then we - first fill the ringbuffer from the input and then flush the ringbuffer to - the output */ - while (rb_pos + len >= rb_size) { - nbytes = rb_size - rb_pos; - if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { - throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); - } - output.write(ringbuffer, rb_size); - len -= nbytes; - rb_pos = 0; - } - - /* Copy straight from the input onto the ringbuffer. The ringbuffer will be - flushed to the output at a later time. */ - if (br.input_.read(ringbuffer, rb_pos, len) < len) { - throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); - } - - /* Restore the state of the bit reader. */ - br.reset(); -} - -/* Advances the bit reader position to the next byte boundary and verifies - that any skipped bits are set to zero. */ -function JumpToByteBoundary(br) { - var new_bit_pos = (br.bit_pos_ + 7) & ~7; - var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); - return pad_bits == 0; -} - -function BrotliDecompressedSize(buffer) { - var input = new BrotliInput(buffer); - var br = new BrotliBitReader(input); - DecodeWindowBits(br); - var out = DecodeMetaBlockLength(br); - return out.meta_block_length; -} - -exports.BrotliDecompressedSize = BrotliDecompressedSize; - -function BrotliDecompressBuffer(buffer, output_size) { - var input = new BrotliInput(buffer); - - if (output_size == null) { - output_size = BrotliDecompressedSize(buffer); - } - - var output_buffer = new Uint8Array(output_size); - var output = new BrotliOutput(output_buffer); - - BrotliDecompress(input, output); - - if (output.pos < output.buffer.length) { - output.buffer = output.buffer.subarray(0, output.pos); - } - - return output.buffer; -} - -exports.BrotliDecompressBuffer = BrotliDecompressBuffer; - -function BrotliDecompress(input, output) { - var i; - var pos = 0; - var input_end = 0; - var window_bits = 0; - var max_backward_distance; - var max_distance = 0; - var ringbuffer_size; - var ringbuffer_mask; - var ringbuffer; - var ringbuffer_end; - /* This ring buffer holds a few past copy distances that will be used by */ - /* some special distance codes. */ - var dist_rb = [ 16, 15, 11, 4 ]; - var dist_rb_idx = 0; - /* The previous 2 bytes used for context. */ - var prev_byte1 = 0; - var prev_byte2 = 0; - var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)]; - var block_type_trees; - var block_len_trees; - var br; - - /* We need the slack region for the following reasons: - - always doing two 8-byte copies for fast backward copying - - transforms - - flushing the input ringbuffer when decoding uncompressed blocks */ - var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; - - br = new BrotliBitReader(input); - - /* Decode window size. */ - window_bits = DecodeWindowBits(br); - max_backward_distance = (1 << window_bits) - 16; - - ringbuffer_size = 1 << window_bits; - ringbuffer_mask = ringbuffer_size - 1; - ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength); - ringbuffer_end = ringbuffer_size; - - block_type_trees = []; - block_len_trees = []; - for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) { - block_type_trees[x] = new HuffmanCode(0, 0); - block_len_trees[x] = new HuffmanCode(0, 0); - } - - while (!input_end) { - var meta_block_remaining_len = 0; - var is_uncompressed; - var block_length = [ 1 << 28, 1 << 28, 1 << 28 ]; - var block_type = [ 0 ]; - var num_block_types = [ 1, 1, 1 ]; - var block_type_rb = [ 0, 1, 0, 1, 0, 1 ]; - var block_type_rb_index = [ 0 ]; - var distance_postfix_bits; - var num_direct_distance_codes; - var distance_postfix_mask; - var num_distance_codes; - var context_map = null; - var context_modes = null; - var num_literal_htrees; - var dist_context_map = null; - var num_dist_htrees; - var context_offset = 0; - var context_map_slice = null; - var literal_htree_index = 0; - var dist_context_offset = 0; - var dist_context_map_slice = null; - var dist_htree_index = 0; - var context_lookup_offset1 = 0; - var context_lookup_offset2 = 0; - var context_mode; - var htree_command; - - for (i = 0; i < 3; ++i) { - hgroup[i].codes = null; - hgroup[i].htrees = null; - } - - br.readMoreInput(); - - var _out = DecodeMetaBlockLength(br); - meta_block_remaining_len = _out.meta_block_length; - if (pos + meta_block_remaining_len > output.buffer.length) { - /* We need to grow the output buffer to fit the additional data. */ - var tmp = new Uint8Array( pos + meta_block_remaining_len ); - tmp.set( output.buffer ); - output.buffer = tmp; - } - input_end = _out.input_end; - is_uncompressed = _out.is_uncompressed; - - if (_out.is_metadata) { - JumpToByteBoundary(br); - - for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { - br.readMoreInput(); - /* Read one byte and ignore it. */ - br.readBits(8); - } - - continue; - } - - if (meta_block_remaining_len === 0) { - continue; - } - - if (is_uncompressed) { - br.bit_pos_ = (br.bit_pos_ + 7) & ~7; - CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos, - ringbuffer, ringbuffer_mask, br); - pos += meta_block_remaining_len; - continue; - } - - for (i = 0; i < 3; ++i) { - num_block_types[i] = DecodeVarLenUint8(br) + 1; - if (num_block_types[i] >= 2) { - ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); - block_type_rb_index[i] = 1; - } - } - - br.readMoreInput(); - - distance_postfix_bits = br.readBits(2); - num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); - distance_postfix_mask = (1 << distance_postfix_bits) - 1; - num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits)); - context_modes = new Uint8Array(num_block_types[0]); - - for (i = 0; i < num_block_types[0]; ++i) { - br.readMoreInput(); - context_modes[i] = (br.readBits(2) << 1); - } - - var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br); - num_literal_htrees = _o1.num_htrees; - context_map = _o1.context_map; - - var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br); - num_dist_htrees = _o2.num_htrees; - dist_context_map = _o2.context_map; - - hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees); - hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]); - hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees); - - for (i = 0; i < 3; ++i) { - hgroup[i].decode(br); - } - - context_map_slice = 0; - dist_context_map_slice = 0; - context_mode = context_modes[block_type[0]]; - context_lookup_offset1 = Context.lookupOffsets[context_mode]; - context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; - htree_command = hgroup[1].htrees[0]; - - while (meta_block_remaining_len > 0) { - var cmd_code; - var range_idx; - var insert_code; - var copy_code; - var insert_length; - var copy_length; - var distance_code; - var distance; - var context; - var j; - var copy_dst; - - br.readMoreInput(); - - if (block_length[1] === 0) { - DecodeBlockType(num_block_types[1], - block_type_trees, 1, block_type, block_type_rb, - block_type_rb_index, br); - block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br); - htree_command = hgroup[1].htrees[block_type[1]]; - } - --block_length[1]; - cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br); - range_idx = cmd_code >> 6; - if (range_idx >= 2) { - range_idx -= 2; - distance_code = -1; - } else { - distance_code = 0; - } - insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7); - copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); - insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + - br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits); - copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + - br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits); - prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask]; - prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask]; - for (j = 0; j < insert_length; ++j) { - br.readMoreInput(); - - if (block_length[0] === 0) { - DecodeBlockType(num_block_types[0], - block_type_trees, 0, block_type, block_type_rb, - block_type_rb_index, br); - block_length[0] = ReadBlockLength(block_len_trees, 0, br); - context_offset = block_type[0] << kLiteralContextBits; - context_map_slice = context_offset; - context_mode = context_modes[block_type[0]]; - context_lookup_offset1 = Context.lookupOffsets[context_mode]; - context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; - } - context = (Context.lookup[context_lookup_offset1 + prev_byte1] | - Context.lookup[context_lookup_offset2 + prev_byte2]); - literal_htree_index = context_map[context_map_slice + context]; - --block_length[0]; - prev_byte2 = prev_byte1; - prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br); - ringbuffer[pos & ringbuffer_mask] = prev_byte1; - if ((pos & ringbuffer_mask) === ringbuffer_mask) { - output.write(ringbuffer, ringbuffer_size); - } - ++pos; - } - meta_block_remaining_len -= insert_length; - if (meta_block_remaining_len <= 0) break; - - if (distance_code < 0) { - var context; - - br.readMoreInput(); - if (block_length[2] === 0) { - DecodeBlockType(num_block_types[2], - block_type_trees, 2, block_type, block_type_rb, - block_type_rb_index, br); - block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br); - dist_context_offset = block_type[2] << kDistanceContextBits; - dist_context_map_slice = dist_context_offset; - } - --block_length[2]; - context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff; - dist_htree_index = dist_context_map[dist_context_map_slice + context]; - distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br); - if (distance_code >= num_direct_distance_codes) { - var nbits; - var postfix; - var offset; - distance_code -= num_direct_distance_codes; - postfix = distance_code & distance_postfix_mask; - distance_code >>= distance_postfix_bits; - nbits = (distance_code >> 1) + 1; - offset = ((2 + (distance_code & 1)) << nbits) - 4; - distance_code = num_direct_distance_codes + - ((offset + br.readBits(nbits)) << - distance_postfix_bits) + postfix; - } - } - - /* Convert the distance code to the actual distance by possibly looking */ - /* up past distnaces from the ringbuffer. */ - distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx); - if (distance < 0) { - throw new Error('[BrotliDecompress] invalid distance'); - } - - if (pos < max_backward_distance && - max_distance !== max_backward_distance) { - max_distance = pos; - } else { - max_distance = max_backward_distance; - } - - copy_dst = pos & ringbuffer_mask; - - if (distance > max_distance) { - if (copy_length >= BrotliDictionary.minDictionaryWordLength && - copy_length <= BrotliDictionary.maxDictionaryWordLength) { - var offset = BrotliDictionary.offsetsByLength[copy_length]; - var word_id = distance - max_distance - 1; - var shift = BrotliDictionary.sizeBitsByLength[copy_length]; - var mask = (1 << shift) - 1; - var word_idx = word_id & mask; - var transform_idx = word_id >> shift; - offset += word_idx * copy_length; - if (transform_idx < Transform.kNumTransforms) { - var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx); - copy_dst += len; - pos += len; - meta_block_remaining_len -= len; - if (copy_dst >= ringbuffer_end) { - output.write(ringbuffer, ringbuffer_size); - - for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++) - ringbuffer[_x] = ringbuffer[ringbuffer_end + _x]; - } - } else { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - } else { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - } else { - if (distance_code > 0) { - dist_rb[dist_rb_idx & 3] = distance; - ++dist_rb_idx; - } - - if (copy_length > meta_block_remaining_len) { - throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + - " len: " + copy_length + " bytes left: " + meta_block_remaining_len); - } - - for (j = 0; j < copy_length; ++j) { - ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask]; - if ((pos & ringbuffer_mask) === ringbuffer_mask) { - output.write(ringbuffer, ringbuffer_size); - } - ++pos; - --meta_block_remaining_len; - } - } - - /* When we get here, we must have inserted at least one literal and */ - /* made a copy of at least length two, therefore accessing the last 2 */ - /* bytes is valid. */ - prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask]; - prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask]; - } - - /* Protect pos from overflow, wrap it around at every GB of input data */ - pos &= 0x3fffffff; - } - - output.write(ringbuffer, pos & ringbuffer_mask); -} - -exports.BrotliDecompress = BrotliDecompress; - -BrotliDictionary.init(); - -},{"./bit_reader":10,"./context":11,"./dictionary":15,"./huffman":16,"./prefix":17,"./streams":18,"./transform":19}],13:[function(require,module,exports){ -var base64 = require('base64-js'); - -/** - * The normal dictionary-data.js is quite large, which makes it - * unsuitable for browser usage. In order to make it smaller, - * we read dictionary.bin, which is a compressed version of - * the dictionary, and on initial load, Brotli decompresses - * it's own dictionary. 😜 - */ -exports.init = function() { - var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer; - var compressed = base64.toByteArray(require('./dictionary.bin.js')); - return BrotliDecompressBuffer(compressed); -}; - -},{"./decode":12,"./dictionary.bin.js":14,"base64-js":9}],14:[function(require,module,exports){ -module.exports="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"; - -},{}],15:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Collection of static dictionary words. -*/ - -var data = require('./dictionary-data'); -exports.init = function() { - exports.dictionary = data.init(); -}; - -exports.offsetsByLength = new Uint32Array([ - 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, - 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, - 115968, 118528, 119872, 121280, 122016, -]); - -exports.sizeBitsByLength = new Uint8Array([ - 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, - 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, - 7, 6, 6, 5, 5, -]); - -exports.minDictionaryWordLength = 4; -exports.maxDictionaryWordLength = 24; - -},{"./dictionary-data":13}],16:[function(require,module,exports){ -function HuffmanCode(bits, value) { - this.bits = bits; /* number of bits used for this symbol */ - this.value = value; /* symbol value or table offset */ -} - -exports.HuffmanCode = HuffmanCode; - -var MAX_LENGTH = 15; - -/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the - bit-wise reversal of the len least significant bits of key. */ -function GetNextKey(key, len) { - var step = 1 << (len - 1); - while (key & step) { - step >>= 1; - } - return (key & (step - 1)) + step; -} - -/* Stores code in table[0], table[step], table[2*step], ..., table[end] */ -/* Assumes that end is an integer multiple of step */ -function ReplicateValue(table, i, step, end, code) { - do { - end -= step; - table[i + end] = new HuffmanCode(code.bits, code.value); - } while (end > 0); -} - -/* Returns the table width of the next 2nd level table. count is the histogram - of bit lengths for the remaining symbols, len is the code length of the next - processed symbol */ -function NextTableBitSize(count, len, root_bits) { - var left = 1 << (len - root_bits); - while (len < MAX_LENGTH) { - left -= count[len]; - if (left <= 0) break; - ++len; - left <<= 1; - } - return len - root_bits; -} - -exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { - var start_table = table; - var code; /* current table entry */ - var len; /* current code length */ - var symbol; /* symbol index in original or sorted table */ - var key; /* reversed prefix code */ - var step; /* step size to replicate values in current table */ - var low; /* low bits for current root entry */ - var mask; /* mask for low bits */ - var table_bits; /* key length of current table */ - var table_size; /* size of current table */ - var total_size; /* sum of root table size and 2nd level table sizes */ - var sorted; /* symbols sorted by code length */ - var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */ - var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */ - - sorted = new Int32Array(code_lengths_size); - - /* build histogram of code lengths */ - for (symbol = 0; symbol < code_lengths_size; symbol++) { - count[code_lengths[symbol]]++; - } - - /* generate offsets into sorted symbol table by code length */ - offset[1] = 0; - for (len = 1; len < MAX_LENGTH; len++) { - offset[len + 1] = offset[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (symbol = 0; symbol < code_lengths_size; symbol++) { - if (code_lengths[symbol] !== 0) { - sorted[offset[code_lengths[symbol]]++] = symbol; - } - } - - table_bits = root_bits; - table_size = 1 << table_bits; - total_size = table_size; - - /* special case code with only one value */ - if (offset[MAX_LENGTH] === 1) { - for (key = 0; key < total_size; ++key) { - root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff); - } - - return total_size; - } - - /* fill in root table */ - key = 0; - symbol = 0; - for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { - for (; count[len] > 0; --count[len]) { - code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff); - ReplicateValue(root_table, table + key, step, table_size, code); - key = GetNextKey(key, len); - } - } - - /* fill in 2nd level tables and add pointers to root table */ - mask = total_size - 1; - low = -1; - for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { - for (; count[len] > 0; --count[len]) { - if ((key & mask) !== low) { - table += table_size; - table_bits = NextTableBitSize(count, len, root_bits); - table_size = 1 << table_bits; - total_size += table_size; - low = key & mask; - root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff); - } - code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff); - ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code); - key = GetNextKey(key, len); - } - } - - return total_size; -} - -},{}],17:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Lookup tables to map prefix codes to value ranges. This is used during - decoding of the block lengths, literal insertion lengths and copy lengths. -*/ - -/* Represents the range of values belonging to a prefix code: */ -/* [offset, offset + 2^nbits) */ -function PrefixCodeRange(offset, nbits) { - this.offset = offset; - this.nbits = nbits; -} - -exports.kBlockLengthPrefixCode = [ - new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2), - new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3), - new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4), - new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5), - new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8), - new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12), - new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24) -]; - -exports.kInsertLengthPrefixCode = [ - new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), - new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1), - new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3), - new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5), - new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9), - new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24), -]; - -exports.kCopyLengthPrefixCode = [ - new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), - new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0), - new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2), - new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4), - new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7), - new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24), -]; - -exports.kInsertRangeLut = [ - 0, 0, 8, 8, 0, 16, 8, 16, 16, -]; - -exports.kCopyRangeLut = [ - 0, 8, 0, 8, 16, 0, 16, 8, 16, -]; - -},{}],18:[function(require,module,exports){ -function BrotliInput(buffer) { - this.buffer = buffer; - this.pos = 0; -} - -BrotliInput.prototype.read = function(buf, i, count) { - if (this.pos + count > this.buffer.length) { - count = this.buffer.length - this.pos; - } - - for (var p = 0; p < count; p++) - buf[i + p] = this.buffer[this.pos + p]; - - this.pos += count; - return count; -} - -exports.BrotliInput = BrotliInput; - -function BrotliOutput(buf) { - this.buffer = buf; - this.pos = 0; -} - -BrotliOutput.prototype.write = function(buf, count) { - if (this.pos + count > this.buffer.length) - throw new Error('Output buffer is not large enough'); - - this.buffer.set(buf.subarray(0, count), this.pos); - this.pos += count; - return count; -}; - -exports.BrotliOutput = BrotliOutput; - -},{}],19:[function(require,module,exports){ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Transformations on dictionary words. -*/ - -var BrotliDictionary = require('./dictionary'); - -var kIdentity = 0; -var kOmitLast1 = 1; -var kOmitLast2 = 2; -var kOmitLast3 = 3; -var kOmitLast4 = 4; -var kOmitLast5 = 5; -var kOmitLast6 = 6; -var kOmitLast7 = 7; -var kOmitLast8 = 8; -var kOmitLast9 = 9; -var kUppercaseFirst = 10; -var kUppercaseAll = 11; -var kOmitFirst1 = 12; -var kOmitFirst2 = 13; -var kOmitFirst3 = 14; -var kOmitFirst4 = 15; -var kOmitFirst5 = 16; -var kOmitFirst6 = 17; -var kOmitFirst7 = 18; -var kOmitFirst8 = 19; -var kOmitFirst9 = 20; - -function Transform(prefix, transform, suffix) { - this.prefix = new Uint8Array(prefix.length); - this.transform = transform; - this.suffix = new Uint8Array(suffix.length); - - for (var i = 0; i < prefix.length; i++) - this.prefix[i] = prefix.charCodeAt(i); - - for (var i = 0; i < suffix.length; i++) - this.suffix[i] = suffix.charCodeAt(i); -} - -var kTransforms = [ - new Transform( "", kIdentity, "" ), - new Transform( "", kIdentity, " " ), - new Transform( " ", kIdentity, " " ), - new Transform( "", kOmitFirst1, "" ), - new Transform( "", kUppercaseFirst, " " ), - new Transform( "", kIdentity, " the " ), - new Transform( " ", kIdentity, "" ), - new Transform( "s ", kIdentity, " " ), - new Transform( "", kIdentity, " of " ), - new Transform( "", kUppercaseFirst, "" ), - new Transform( "", kIdentity, " and " ), - new Transform( "", kOmitFirst2, "" ), - new Transform( "", kOmitLast1, "" ), - new Transform( ", ", kIdentity, " " ), - new Transform( "", kIdentity, ", " ), - new Transform( " ", kUppercaseFirst, " " ), - new Transform( "", kIdentity, " in " ), - new Transform( "", kIdentity, " to " ), - new Transform( "e ", kIdentity, " " ), - new Transform( "", kIdentity, "\"" ), - new Transform( "", kIdentity, "." ), - new Transform( "", kIdentity, "\">" ), - new Transform( "", kIdentity, "\n" ), - new Transform( "", kOmitLast3, "" ), - new Transform( "", kIdentity, "]" ), - new Transform( "", kIdentity, " for " ), - new Transform( "", kOmitFirst3, "" ), - new Transform( "", kOmitLast2, "" ), - new Transform( "", kIdentity, " a " ), - new Transform( "", kIdentity, " that " ), - new Transform( " ", kUppercaseFirst, "" ), - new Transform( "", kIdentity, ". " ), - new Transform( ".", kIdentity, "" ), - new Transform( " ", kIdentity, ", " ), - new Transform( "", kOmitFirst4, "" ), - new Transform( "", kIdentity, " with " ), - new Transform( "", kIdentity, "'" ), - new Transform( "", kIdentity, " from " ), - new Transform( "", kIdentity, " by " ), - new Transform( "", kOmitFirst5, "" ), - new Transform( "", kOmitFirst6, "" ), - new Transform( " the ", kIdentity, "" ), - new Transform( "", kOmitLast4, "" ), - new Transform( "", kIdentity, ". The " ), - new Transform( "", kUppercaseAll, "" ), - new Transform( "", kIdentity, " on " ), - new Transform( "", kIdentity, " as " ), - new Transform( "", kIdentity, " is " ), - new Transform( "", kOmitLast7, "" ), - new Transform( "", kOmitLast1, "ing " ), - new Transform( "", kIdentity, "\n\t" ), - new Transform( "", kIdentity, ":" ), - new Transform( " ", kIdentity, ". " ), - new Transform( "", kIdentity, "ed " ), - new Transform( "", kOmitFirst9, "" ), - new Transform( "", kOmitFirst7, "" ), - new Transform( "", kOmitLast6, "" ), - new Transform( "", kIdentity, "(" ), - new Transform( "", kUppercaseFirst, ", " ), - new Transform( "", kOmitLast8, "" ), - new Transform( "", kIdentity, " at " ), - new Transform( "", kIdentity, "ly " ), - new Transform( " the ", kIdentity, " of " ), - new Transform( "", kOmitLast5, "" ), - new Transform( "", kOmitLast9, "" ), - new Transform( " ", kUppercaseFirst, ", " ), - new Transform( "", kUppercaseFirst, "\"" ), - new Transform( ".", kIdentity, "(" ), - new Transform( "", kUppercaseAll, " " ), - new Transform( "", kUppercaseFirst, "\">" ), - new Transform( "", kIdentity, "=\"" ), - new Transform( " ", kIdentity, "." ), - new Transform( ".com/", kIdentity, "" ), - new Transform( " the ", kIdentity, " of the " ), - new Transform( "", kUppercaseFirst, "'" ), - new Transform( "", kIdentity, ". This " ), - new Transform( "", kIdentity, "," ), - new Transform( ".", kIdentity, " " ), - new Transform( "", kUppercaseFirst, "(" ), - new Transform( "", kUppercaseFirst, "." ), - new Transform( "", kIdentity, " not " ), - new Transform( " ", kIdentity, "=\"" ), - new Transform( "", kIdentity, "er " ), - new Transform( " ", kUppercaseAll, " " ), - new Transform( "", kIdentity, "al " ), - new Transform( " ", kUppercaseAll, "" ), - new Transform( "", kIdentity, "='" ), - new Transform( "", kUppercaseAll, "\"" ), - new Transform( "", kUppercaseFirst, ". " ), - new Transform( " ", kIdentity, "(" ), - new Transform( "", kIdentity, "ful " ), - new Transform( " ", kUppercaseFirst, ". " ), - new Transform( "", kIdentity, "ive " ), - new Transform( "", kIdentity, "less " ), - new Transform( "", kUppercaseAll, "'" ), - new Transform( "", kIdentity, "est " ), - new Transform( " ", kUppercaseFirst, "." ), - new Transform( "", kUppercaseAll, "\">" ), - new Transform( " ", kIdentity, "='" ), - new Transform( "", kUppercaseFirst, "," ), - new Transform( "", kIdentity, "ize " ), - new Transform( "", kUppercaseAll, "." ), - new Transform( "\xc2\xa0", kIdentity, "" ), - new Transform( " ", kIdentity, "," ), - new Transform( "", kUppercaseFirst, "=\"" ), - new Transform( "", kUppercaseAll, "=\"" ), - new Transform( "", kIdentity, "ous " ), - new Transform( "", kUppercaseAll, ", " ), - new Transform( "", kUppercaseFirst, "='" ), - new Transform( " ", kUppercaseFirst, "," ), - new Transform( " ", kUppercaseAll, "=\"" ), - new Transform( " ", kUppercaseAll, ", " ), - new Transform( "", kUppercaseAll, "," ), - new Transform( "", kUppercaseAll, "(" ), - new Transform( "", kUppercaseAll, ". " ), - new Transform( " ", kUppercaseAll, "." ), - new Transform( "", kUppercaseAll, "='" ), - new Transform( " ", kUppercaseAll, ". " ), - new Transform( " ", kUppercaseFirst, "=\"" ), - new Transform( " ", kUppercaseAll, "='" ), - new Transform( " ", kUppercaseFirst, "='" ) -]; - -exports.kTransforms = kTransforms; -exports.kNumTransforms = kTransforms.length; - -function ToUpperCase(p, i) { - if (p[i] < 0xc0) { - if (p[i] >= 97 && p[i] <= 122) { - p[i] ^= 32; - } - return 1; - } - - /* An overly simplified uppercasing model for utf-8. */ - if (p[i] < 0xe0) { - p[i + 1] ^= 32; - return 2; - } - - /* An arbitrary transform for three byte characters. */ - p[i + 2] ^= 5; - return 3; -} - -exports.transformDictionaryWord = function(dst, idx, word, len, transform) { - var prefix = kTransforms[transform].prefix; - var suffix = kTransforms[transform].suffix; - var t = kTransforms[transform].transform; - var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1); - var i = 0; - var start_idx = idx; - var uppercase; - - if (skip > len) { - skip = len; - } - - var prefix_pos = 0; - while (prefix_pos < prefix.length) { - dst[idx++] = prefix[prefix_pos++]; - } - - word += skip; - len -= skip; - - if (t <= kOmitLast9) { - len -= t; - } - - for (i = 0; i < len; i++) { - dst[idx++] = BrotliDictionary.dictionary[word + i]; - } - - uppercase = idx - len; - - if (t === kUppercaseFirst) { - ToUpperCase(dst, uppercase); - } else if (t === kUppercaseAll) { - while (len > 0) { - var step = ToUpperCase(dst, uppercase); - uppercase += step; - len -= step; - } - } - - var suffix_pos = 0; - while (suffix_pos < suffix.length) { - dst[idx++] = suffix[suffix_pos++]; - } - - return idx - start_idx; -} - -},{"./dictionary":15}],20:[function(require,module,exports){ -module.exports = require('./dec/decode').BrotliDecompressBuffer; - -},{"./dec/decode":12}],21:[function(require,module,exports){ - -},{}],22:[function(require,module,exports){ -(function (process,Buffer){(function (){ -'use strict'; -/* eslint camelcase: "off" */ - -var assert = require('assert'); - -var Zstream = require('pako/lib/zlib/zstream'); -var zlib_deflate = require('pako/lib/zlib/deflate.js'); -var zlib_inflate = require('pako/lib/zlib/inflate.js'); -var constants = require('pako/lib/zlib/constants'); - -for (var key in constants) { - exports[key] = constants[key]; -} - -// zlib modes -exports.NONE = 0; -exports.DEFLATE = 1; -exports.INFLATE = 2; -exports.GZIP = 3; -exports.GUNZIP = 4; -exports.DEFLATERAW = 5; -exports.INFLATERAW = 6; -exports.UNZIP = 7; - -var GZIP_HEADER_ID1 = 0x1f; -var GZIP_HEADER_ID2 = 0x8b; - -/** - * Emulate Node's zlib C++ layer for use by the JS layer in index.js - */ -function Zlib(mode) { - if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) { - throw new TypeError('Bad argument'); - } - - this.dictionary = null; - this.err = 0; - this.flush = 0; - this.init_done = false; - this.level = 0; - this.memLevel = 0; - this.mode = mode; - this.strategy = 0; - this.windowBits = 0; - this.write_in_progress = false; - this.pending_close = false; - this.gzip_id_bytes_read = 0; -} - -Zlib.prototype.close = function () { - if (this.write_in_progress) { - this.pending_close = true; - return; - } - - this.pending_close = false; - - assert(this.init_done, 'close before init'); - assert(this.mode <= exports.UNZIP); - - if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) { - zlib_deflate.deflateEnd(this.strm); - } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) { - zlib_inflate.inflateEnd(this.strm); - } - - this.mode = exports.NONE; - - this.dictionary = null; -}; - -Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) { - return this._write(true, flush, input, in_off, in_len, out, out_off, out_len); -}; - -Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) { - return this._write(false, flush, input, in_off, in_len, out, out_off, out_len); -}; - -Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) { - assert.equal(arguments.length, 8); - - assert(this.init_done, 'write before init'); - assert(this.mode !== exports.NONE, 'already finalized'); - assert.equal(false, this.write_in_progress, 'write already in progress'); - assert.equal(false, this.pending_close, 'close is pending'); - - this.write_in_progress = true; - - assert.equal(false, flush === undefined, 'must provide flush value'); - - this.write_in_progress = true; - - if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) { - throw new Error('Invalid flush value'); - } - - if (input == null) { - input = Buffer.alloc(0); - in_len = 0; - in_off = 0; - } - - this.strm.avail_in = in_len; - this.strm.input = input; - this.strm.next_in = in_off; - this.strm.avail_out = out_len; - this.strm.output = out; - this.strm.next_out = out_off; - this.flush = flush; - - if (!async) { - // sync version - this._process(); - - if (this._checkError()) { - return this._afterSync(); - } - return; - } - - // async version - var self = this; - process.nextTick(function () { - self._process(); - self._after(); - }); - - return this; -}; - -Zlib.prototype._afterSync = function () { - var avail_out = this.strm.avail_out; - var avail_in = this.strm.avail_in; - - this.write_in_progress = false; - - return [avail_in, avail_out]; -}; - -Zlib.prototype._process = function () { - var next_expected_header_byte = null; - - // If the avail_out is left at 0, then it means that it ran out - // of room. If there was avail_out left over, then it means - // that all of the input was consumed. - switch (this.mode) { - case exports.DEFLATE: - case exports.GZIP: - case exports.DEFLATERAW: - this.err = zlib_deflate.deflate(this.strm, this.flush); - break; - case exports.UNZIP: - if (this.strm.avail_in > 0) { - next_expected_header_byte = this.strm.next_in; - } - - switch (this.gzip_id_bytes_read) { - case 0: - if (next_expected_header_byte === null) { - break; - } - - if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) { - this.gzip_id_bytes_read = 1; - next_expected_header_byte++; - - if (this.strm.avail_in === 1) { - // The only available byte was already read. - break; - } - } else { - this.mode = exports.INFLATE; - break; - } - - // fallthrough - case 1: - if (next_expected_header_byte === null) { - break; - } - - if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) { - this.gzip_id_bytes_read = 2; - this.mode = exports.GUNZIP; - } else { - // There is no actual difference between INFLATE and INFLATERAW - // (after initialization). - this.mode = exports.INFLATE; - } - - break; - default: - throw new Error('invalid number of gzip magic number bytes read'); - } - - // fallthrough - case exports.INFLATE: - case exports.GUNZIP: - case exports.INFLATERAW: - this.err = zlib_inflate.inflate(this.strm, this.flush - - // If data was encoded with dictionary - );if (this.err === exports.Z_NEED_DICT && this.dictionary) { - // Load it - this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary); - if (this.err === exports.Z_OK) { - // And try to decode again - this.err = zlib_inflate.inflate(this.strm, this.flush); - } else if (this.err === exports.Z_DATA_ERROR) { - // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR. - // Make it possible for After() to tell a bad dictionary from bad - // input. - this.err = exports.Z_NEED_DICT; - } - } - while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) { - // Bytes remain in input buffer. Perhaps this is another compressed - // member in the same archive, or just trailing garbage. - // Trailing zero bytes are okay, though, since they are frequently - // used for padding. - - this.reset(); - this.err = zlib_inflate.inflate(this.strm, this.flush); - } - break; - default: - throw new Error('Unknown mode ' + this.mode); - } -}; - -Zlib.prototype._checkError = function () { - // Acceptable error states depend on the type of zlib stream. - switch (this.err) { - case exports.Z_OK: - case exports.Z_BUF_ERROR: - if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) { - this._error('unexpected end of file'); - return false; - } - break; - case exports.Z_STREAM_END: - // normal statuses, not fatal - break; - case exports.Z_NEED_DICT: - if (this.dictionary == null) { - this._error('Missing dictionary'); - } else { - this._error('Bad dictionary'); - } - return false; - default: - // something else. - this._error('Zlib error'); - return false; - } - - return true; -}; - -Zlib.prototype._after = function () { - if (!this._checkError()) { - return; - } - - var avail_out = this.strm.avail_out; - var avail_in = this.strm.avail_in; - - this.write_in_progress = false; - - // call the write() cb - this.callback(avail_in, avail_out); - - if (this.pending_close) { - this.close(); - } -}; - -Zlib.prototype._error = function (message) { - if (this.strm.msg) { - message = this.strm.msg; - } - this.onerror(message, this.err - - // no hope of rescue. - );this.write_in_progress = false; - if (this.pending_close) { - this.close(); - } -}; - -Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) { - assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])'); - - assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits'); - assert(level >= -1 && level <= 9, 'invalid compression level'); - - assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel'); - - assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy'); - - this._init(level, windowBits, memLevel, strategy, dictionary); - this._setDictionary(); -}; - -Zlib.prototype.params = function () { - throw new Error('deflateParams Not supported'); -}; - -Zlib.prototype.reset = function () { - this._reset(); - this._setDictionary(); -}; - -Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) { - this.level = level; - this.windowBits = windowBits; - this.memLevel = memLevel; - this.strategy = strategy; - - this.flush = exports.Z_NO_FLUSH; - - this.err = exports.Z_OK; - - if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) { - this.windowBits += 16; - } - - if (this.mode === exports.UNZIP) { - this.windowBits += 32; - } - - if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) { - this.windowBits = -1 * this.windowBits; - } - - this.strm = new Zstream(); - - switch (this.mode) { - case exports.DEFLATE: - case exports.GZIP: - case exports.DEFLATERAW: - this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy); - break; - case exports.INFLATE: - case exports.GUNZIP: - case exports.INFLATERAW: - case exports.UNZIP: - this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits); - break; - default: - throw new Error('Unknown mode ' + this.mode); - } - - if (this.err !== exports.Z_OK) { - this._error('Init error'); - } - - this.dictionary = dictionary; - - this.write_in_progress = false; - this.init_done = true; -}; - -Zlib.prototype._setDictionary = function () { - if (this.dictionary == null) { - return; - } - - this.err = exports.Z_OK; - - switch (this.mode) { - case exports.DEFLATE: - case exports.DEFLATERAW: - this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary); - break; - default: - break; - } - - if (this.err !== exports.Z_OK) { - this._error('Failed to set dictionary'); - } -}; - -Zlib.prototype._reset = function () { - this.err = exports.Z_OK; - - switch (this.mode) { - case exports.DEFLATE: - case exports.DEFLATERAW: - case exports.GZIP: - this.err = zlib_deflate.deflateReset(this.strm); - break; - case exports.INFLATE: - case exports.INFLATERAW: - case exports.GUNZIP: - this.err = zlib_inflate.inflateReset(this.strm); - break; - default: - break; - } - - if (this.err !== exports.Z_OK) { - this._error('Failed to reset stream'); - } -}; - -exports.Zlib = Zlib; -}).call(this)}).call(this,require('_process'),require("buffer").Buffer) -},{"_process":137,"assert":4,"buffer":36,"pako/lib/zlib/constants":26,"pako/lib/zlib/deflate.js":28,"pako/lib/zlib/inflate.js":30,"pako/lib/zlib/zstream":34}],23:[function(require,module,exports){ -(function (process){(function (){ -'use strict'; - -var Buffer = require('buffer').Buffer; -var Transform = require('stream').Transform; -var binding = require('./binding'); -var util = require('util'); -var assert = require('assert').ok; -var kMaxLength = require('buffer').kMaxLength; -var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes'; - -// zlib doesn't provide these, so kludge them in following the same -// const naming scheme zlib uses. -binding.Z_MIN_WINDOWBITS = 8; -binding.Z_MAX_WINDOWBITS = 15; -binding.Z_DEFAULT_WINDOWBITS = 15; - -// fewer than 64 bytes per chunk is stupid. -// technically it could work with as few as 8, but even 64 bytes -// is absurdly low. Usually a MB or more is best. -binding.Z_MIN_CHUNK = 64; -binding.Z_MAX_CHUNK = Infinity; -binding.Z_DEFAULT_CHUNK = 16 * 1024; - -binding.Z_MIN_MEMLEVEL = 1; -binding.Z_MAX_MEMLEVEL = 9; -binding.Z_DEFAULT_MEMLEVEL = 8; - -binding.Z_MIN_LEVEL = -1; -binding.Z_MAX_LEVEL = 9; -binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION; - -// expose all the zlib constants -var bkeys = Object.keys(binding); -for (var bk = 0; bk < bkeys.length; bk++) { - var bkey = bkeys[bk]; - if (bkey.match(/^Z/)) { - Object.defineProperty(exports, bkey, { - enumerable: true, value: binding[bkey], writable: false - }); - } -} - -// translation table for return codes. -var codes = { - Z_OK: binding.Z_OK, - Z_STREAM_END: binding.Z_STREAM_END, - Z_NEED_DICT: binding.Z_NEED_DICT, - Z_ERRNO: binding.Z_ERRNO, - Z_STREAM_ERROR: binding.Z_STREAM_ERROR, - Z_DATA_ERROR: binding.Z_DATA_ERROR, - Z_MEM_ERROR: binding.Z_MEM_ERROR, - Z_BUF_ERROR: binding.Z_BUF_ERROR, - Z_VERSION_ERROR: binding.Z_VERSION_ERROR -}; - -var ckeys = Object.keys(codes); -for (var ck = 0; ck < ckeys.length; ck++) { - var ckey = ckeys[ck]; - codes[codes[ckey]] = ckey; -} - -Object.defineProperty(exports, 'codes', { - enumerable: true, value: Object.freeze(codes), writable: false -}); - -exports.Deflate = Deflate; -exports.Inflate = Inflate; -exports.Gzip = Gzip; -exports.Gunzip = Gunzip; -exports.DeflateRaw = DeflateRaw; -exports.InflateRaw = InflateRaw; -exports.Unzip = Unzip; - -exports.createDeflate = function (o) { - return new Deflate(o); -}; - -exports.createInflate = function (o) { - return new Inflate(o); -}; - -exports.createDeflateRaw = function (o) { - return new DeflateRaw(o); -}; - -exports.createInflateRaw = function (o) { - return new InflateRaw(o); -}; - -exports.createGzip = function (o) { - return new Gzip(o); -}; - -exports.createGunzip = function (o) { - return new Gunzip(o); -}; - -exports.createUnzip = function (o) { - return new Unzip(o); -}; - -// Convenience methods. -// compress/decompress a string or buffer in one step. -exports.deflate = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new Deflate(opts), buffer, callback); -}; - -exports.deflateSync = function (buffer, opts) { - return zlibBufferSync(new Deflate(opts), buffer); -}; - -exports.gzip = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new Gzip(opts), buffer, callback); -}; - -exports.gzipSync = function (buffer, opts) { - return zlibBufferSync(new Gzip(opts), buffer); -}; - -exports.deflateRaw = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new DeflateRaw(opts), buffer, callback); -}; - -exports.deflateRawSync = function (buffer, opts) { - return zlibBufferSync(new DeflateRaw(opts), buffer); -}; - -exports.unzip = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new Unzip(opts), buffer, callback); -}; - -exports.unzipSync = function (buffer, opts) { - return zlibBufferSync(new Unzip(opts), buffer); -}; - -exports.inflate = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new Inflate(opts), buffer, callback); -}; - -exports.inflateSync = function (buffer, opts) { - return zlibBufferSync(new Inflate(opts), buffer); -}; - -exports.gunzip = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new Gunzip(opts), buffer, callback); -}; - -exports.gunzipSync = function (buffer, opts) { - return zlibBufferSync(new Gunzip(opts), buffer); -}; - -exports.inflateRaw = function (buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new InflateRaw(opts), buffer, callback); -}; - -exports.inflateRawSync = function (buffer, opts) { - return zlibBufferSync(new InflateRaw(opts), buffer); -}; - -function zlibBuffer(engine, buffer, callback) { - var buffers = []; - var nread = 0; - - engine.on('error', onError); - engine.on('end', onEnd); - - engine.end(buffer); - flow(); - - function flow() { - var chunk; - while (null !== (chunk = engine.read())) { - buffers.push(chunk); - nread += chunk.length; - } - engine.once('readable', flow); - } - - function onError(err) { - engine.removeListener('end', onEnd); - engine.removeListener('readable', flow); - callback(err); - } - - function onEnd() { - var buf; - var err = null; - - if (nread >= kMaxLength) { - err = new RangeError(kRangeErrorMessage); - } else { - buf = Buffer.concat(buffers, nread); - } - - buffers = []; - engine.close(); - callback(err, buf); - } -} - -function zlibBufferSync(engine, buffer) { - if (typeof buffer === 'string') buffer = Buffer.from(buffer); - - if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer'); - - var flushFlag = engine._finishFlushFlag; - - return engine._processChunk(buffer, flushFlag); -} - -// generic zlib -// minimal 2-byte header -function Deflate(opts) { - if (!(this instanceof Deflate)) return new Deflate(opts); - Zlib.call(this, opts, binding.DEFLATE); -} - -function Inflate(opts) { - if (!(this instanceof Inflate)) return new Inflate(opts); - Zlib.call(this, opts, binding.INFLATE); -} - -// gzip - bigger header, same deflate compression -function Gzip(opts) { - if (!(this instanceof Gzip)) return new Gzip(opts); - Zlib.call(this, opts, binding.GZIP); -} - -function Gunzip(opts) { - if (!(this instanceof Gunzip)) return new Gunzip(opts); - Zlib.call(this, opts, binding.GUNZIP); -} - -// raw - no header -function DeflateRaw(opts) { - if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts); - Zlib.call(this, opts, binding.DEFLATERAW); -} - -function InflateRaw(opts) { - if (!(this instanceof InflateRaw)) return new InflateRaw(opts); - Zlib.call(this, opts, binding.INFLATERAW); -} - -// auto-detect header. -function Unzip(opts) { - if (!(this instanceof Unzip)) return new Unzip(opts); - Zlib.call(this, opts, binding.UNZIP); -} - -function isValidFlushFlag(flag) { - return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK; -} - -// the Zlib class they all inherit from -// This thing manages the queue of requests, and returns -// true or false if there is anything in the queue when -// you call the .write() method. - -function Zlib(opts, mode) { - var _this = this; - - this._opts = opts = opts || {}; - this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK; - - Transform.call(this, opts); - - if (opts.flush && !isValidFlushFlag(opts.flush)) { - throw new Error('Invalid flush flag: ' + opts.flush); - } - if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) { - throw new Error('Invalid flush flag: ' + opts.finishFlush); - } - - this._flushFlag = opts.flush || binding.Z_NO_FLUSH; - this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH; - - if (opts.chunkSize) { - if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) { - throw new Error('Invalid chunk size: ' + opts.chunkSize); - } - } - - if (opts.windowBits) { - if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) { - throw new Error('Invalid windowBits: ' + opts.windowBits); - } - } - - if (opts.level) { - if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) { - throw new Error('Invalid compression level: ' + opts.level); - } - } - - if (opts.memLevel) { - if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) { - throw new Error('Invalid memLevel: ' + opts.memLevel); - } - } - - if (opts.strategy) { - if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) { - throw new Error('Invalid strategy: ' + opts.strategy); - } - } - - if (opts.dictionary) { - if (!Buffer.isBuffer(opts.dictionary)) { - throw new Error('Invalid dictionary: it should be a Buffer instance'); - } - } - - this._handle = new binding.Zlib(mode); - - var self = this; - this._hadError = false; - this._handle.onerror = function (message, errno) { - // there is no way to cleanly recover. - // continuing only obscures problems. - _close(self); - self._hadError = true; - - var error = new Error(message); - error.errno = errno; - error.code = exports.codes[errno]; - self.emit('error', error); - }; - - var level = exports.Z_DEFAULT_COMPRESSION; - if (typeof opts.level === 'number') level = opts.level; - - var strategy = exports.Z_DEFAULT_STRATEGY; - if (typeof opts.strategy === 'number') strategy = opts.strategy; - - this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary); - - this._buffer = Buffer.allocUnsafe(this._chunkSize); - this._offset = 0; - this._level = level; - this._strategy = strategy; - - this.once('end', this.close); - - Object.defineProperty(this, '_closed', { - get: function () { - return !_this._handle; - }, - configurable: true, - enumerable: true - }); -} - -util.inherits(Zlib, Transform); - -Zlib.prototype.params = function (level, strategy, callback) { - if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) { - throw new RangeError('Invalid compression level: ' + level); - } - if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) { - throw new TypeError('Invalid strategy: ' + strategy); - } - - if (this._level !== level || this._strategy !== strategy) { - var self = this; - this.flush(binding.Z_SYNC_FLUSH, function () { - assert(self._handle, 'zlib binding closed'); - self._handle.params(level, strategy); - if (!self._hadError) { - self._level = level; - self._strategy = strategy; - if (callback) callback(); - } - }); - } else { - process.nextTick(callback); - } -}; - -Zlib.prototype.reset = function () { - assert(this._handle, 'zlib binding closed'); - return this._handle.reset(); -}; - -// This is the _flush function called by the transform class, -// internally, when the last chunk has been written. -Zlib.prototype._flush = function (callback) { - this._transform(Buffer.alloc(0), '', callback); -}; - -Zlib.prototype.flush = function (kind, callback) { - var _this2 = this; - - var ws = this._writableState; - - if (typeof kind === 'function' || kind === undefined && !callback) { - callback = kind; - kind = binding.Z_FULL_FLUSH; - } - - if (ws.ended) { - if (callback) process.nextTick(callback); - } else if (ws.ending) { - if (callback) this.once('end', callback); - } else if (ws.needDrain) { - if (callback) { - this.once('drain', function () { - return _this2.flush(kind, callback); - }); - } - } else { - this._flushFlag = kind; - this.write(Buffer.alloc(0), '', callback); - } -}; - -Zlib.prototype.close = function (callback) { - _close(this, callback); - process.nextTick(emitCloseNT, this); -}; - -function _close(engine, callback) { - if (callback) process.nextTick(callback); - - // Caller may invoke .close after a zlib error (which will null _handle). - if (!engine._handle) return; - - engine._handle.close(); - engine._handle = null; -} - -function emitCloseNT(self) { - self.emit('close'); -} - -Zlib.prototype._transform = function (chunk, encoding, cb) { - var flushFlag; - var ws = this._writableState; - var ending = ws.ending || ws.ended; - var last = ending && (!chunk || ws.length === chunk.length); - - if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input')); - - if (!this._handle) return cb(new Error('zlib binding closed')); - - // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag - // (or whatever flag was provided using opts.finishFlush). - // If it's explicitly flushing at some other time, then we use - // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression - // goodness. - if (last) flushFlag = this._finishFlushFlag;else { - flushFlag = this._flushFlag; - // once we've flushed the last of the queue, stop flushing and - // go back to the normal behavior. - if (chunk.length >= ws.length) { - this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH; - } - } - - this._processChunk(chunk, flushFlag, cb); -}; - -Zlib.prototype._processChunk = function (chunk, flushFlag, cb) { - var availInBefore = chunk && chunk.length; - var availOutBefore = this._chunkSize - this._offset; - var inOff = 0; - - var self = this; - - var async = typeof cb === 'function'; - - if (!async) { - var buffers = []; - var nread = 0; - - var error; - this.on('error', function (er) { - error = er; - }); - - assert(this._handle, 'zlib binding closed'); - do { - var res = this._handle.writeSync(flushFlag, chunk, // in - inOff, // in_off - availInBefore, // in_len - this._buffer, // out - this._offset, //out_off - availOutBefore); // out_len - } while (!this._hadError && callback(res[0], res[1])); - - if (this._hadError) { - throw error; - } - - if (nread >= kMaxLength) { - _close(this); - throw new RangeError(kRangeErrorMessage); - } - - var buf = Buffer.concat(buffers, nread); - _close(this); - - return buf; - } - - assert(this._handle, 'zlib binding closed'); - var req = this._handle.write(flushFlag, chunk, // in - inOff, // in_off - availInBefore, // in_len - this._buffer, // out - this._offset, //out_off - availOutBefore); // out_len - - req.buffer = chunk; - req.callback = callback; - - function callback(availInAfter, availOutAfter) { - // When the callback is used in an async write, the callback's - // context is the `req` object that was created. The req object - // is === this._handle, and that's why it's important to null - // out the values after they are done being used. `this._handle` - // can stay in memory longer than the callback and buffer are needed. - if (this) { - this.buffer = null; - this.callback = null; - } - - if (self._hadError) return; - - var have = availOutBefore - availOutAfter; - assert(have >= 0, 'have should not go down'); - - if (have > 0) { - var out = self._buffer.slice(self._offset, self._offset + have); - self._offset += have; - // serve some output to the consumer. - if (async) { - self.push(out); - } else { - buffers.push(out); - nread += out.length; - } - } - - // exhausted the output buffer, or used all the input create a new one. - if (availOutAfter === 0 || self._offset >= self._chunkSize) { - availOutBefore = self._chunkSize; - self._offset = 0; - self._buffer = Buffer.allocUnsafe(self._chunkSize); - } - - if (availOutAfter === 0) { - // Not actually done. Need to reprocess. - // Also, update the availInBefore to the availInAfter value, - // so that if we have to hit it a third (fourth, etc.) time, - // it'll have the correct byte counts. - inOff += availInBefore - availInAfter; - availInBefore = availInAfter; - - if (!async) return true; - - var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize); - newReq.callback = callback; // this same function - newReq.buffer = chunk; - return; - } - - if (!async) return false; - - // finished with the chunk. - cb(); - } -}; - -util.inherits(Deflate, Zlib); -util.inherits(Inflate, Zlib); -util.inherits(Gzip, Zlib); -util.inherits(Gunzip, Zlib); -util.inherits(DeflateRaw, Zlib); -util.inherits(InflateRaw, Zlib); -util.inherits(Unzip, Zlib); -}).call(this)}).call(this,require('_process')) -},{"./binding":22,"_process":137,"assert":4,"buffer":36,"stream":142,"util":166}],24:[function(require,module,exports){ -'use strict'; - - -var TYPED_OK = (typeof Uint8Array !== 'undefined') && - (typeof Uint16Array !== 'undefined') && - (typeof Int32Array !== 'undefined'); - -function _has(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -exports.assign = function (obj /*from1, from2, from3, ...*/) { - var sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - var source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (var p in source) { - if (_has(source, p)) { - obj[p] = source[p]; - } - } - } - - return obj; -}; - - -// reduce buffer size, avoiding mem copy -exports.shrinkBuf = function (buf, size) { - if (buf.length === size) { return buf; } - if (buf.subarray) { return buf.subarray(0, size); } - buf.length = size; - return buf; -}; - - -var fnTyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - if (src.subarray && dest.subarray) { - dest.set(src.subarray(src_offs, src_offs + len), dest_offs); - return; - } - // Fallback to ordinary array - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - var i, l, len, pos, chunk, result; - - // calculate data length - len = 0; - for (i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - result = new Uint8Array(len); - pos = 0; - for (i = 0, l = chunks.length; i < l; i++) { - chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - } -}; - -var fnUntyped = { - arraySet: function (dest, src, src_offs, len, dest_offs) { - for (var i = 0; i < len; i++) { - dest[dest_offs + i] = src[src_offs + i]; - } - }, - // Join array of chunks to single array. - flattenChunks: function (chunks) { - return [].concat.apply([], chunks); - } -}; - - -// Enable/Disable typed arrays use, for testing -// -exports.setTyped = function (on) { - if (on) { - exports.Buf8 = Uint8Array; - exports.Buf16 = Uint16Array; - exports.Buf32 = Int32Array; - exports.assign(exports, fnTyped); - } else { - exports.Buf8 = Array; - exports.Buf16 = Array; - exports.Buf32 = Array; - exports.assign(exports, fnUntyped); - } -}; - -exports.setTyped(TYPED_OK); - -},{}],25:[function(require,module,exports){ -'use strict'; - -// Note: adler32 takes 12% for level 0 and 2% for level 6. -// It isn't worth it to make additional optimizations as in original. -// Small size is preferable. - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -function adler32(adler, buf, len, pos) { - var s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; -} - - -module.exports = adler32; - -},{}],26:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -module.exports = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - //Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type -}; - -},{}],27:[function(require,module,exports){ -'use strict'; - -// Note: we can't get significant speed boost here. -// So write code to minimize size - no pregenerated tables -// and array tools dependencies. - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -// Use ordinary array, since untyped makes no boost here -function makeTable() { - var c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; -} - -// Create table on load. Just 255 signed longs. Not a problem. -var crcTable = makeTable(); - - -function crc32(crc, buf, len, pos) { - var t = crcTable, - end = pos + len; - - crc ^= -1; - - for (var i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; -} - - -module.exports = crc32; - -},{}],28:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -var utils = require('../utils/common'); -var trees = require('./trees'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var msg = require('./messages'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -var Z_NO_FLUSH = 0; -var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -//var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -//var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -//var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - - -/* compression levels */ -//var Z_NO_COMPRESSION = 0; -//var Z_BEST_SPEED = 1; -//var Z_BEST_COMPRESSION = 9; -var Z_DEFAULT_COMPRESSION = -1; - - -var Z_FILTERED = 1; -var Z_HUFFMAN_ONLY = 2; -var Z_RLE = 3; -var Z_FIXED = 4; -var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -//var Z_BINARY = 0; -//var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - - -/* The deflate compression method */ -var Z_DEFLATED = 8; - -/*============================================================================*/ - - -var MAX_MEM_LEVEL = 9; -/* Maximum value for memLevel in deflateInit2 */ -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_MEM_LEVEL = 8; - - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ -var LITERALS = 256; -/* number of literal bytes 0..255 */ -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ -var D_CODES = 30; -/* number of distance codes */ -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - -var PRESET_DICT = 0x20; - -var INIT_STATE = 42; -var EXTRA_STATE = 69; -var NAME_STATE = 73; -var COMMENT_STATE = 91; -var HCRC_STATE = 103; -var BUSY_STATE = 113; -var FINISH_STATE = 666; - -var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ -var BS_BLOCK_DONE = 2; /* block flush performed */ -var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ -var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ - -var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. - -function err(strm, errorCode) { - strm.msg = msg[errorCode]; - return errorCode; -} - -function rank(f) { - return ((f) << 1) - ((f) > 4 ? 9 : 0); -} - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - - -/* ========================================================================= - * Flush as much pending output as possible. All deflate() output goes - * through this function so some applications may wish to modify it - * to avoid allocating a large strm->output buffer and copying into it. - * (See also read_buf()). - */ -function flush_pending(strm) { - var s = strm.state; - - //_tr_flush_bits(s); - var len = s.pending; - if (len > strm.avail_out) { - len = strm.avail_out; - } - if (len === 0) { return; } - - utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); - strm.next_out += len; - s.pending_out += len; - strm.total_out += len; - strm.avail_out -= len; - s.pending -= len; - if (s.pending === 0) { - s.pending_out = 0; - } -} - - -function flush_block_only(s, last) { - trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); - s.block_start = s.strstart; - flush_pending(s.strm); -} - - -function put_byte(s, b) { - s.pending_buf[s.pending++] = b; -} - - -/* ========================================================================= - * Put a short in the pending buffer. The 16-bit value is put in MSB order. - * IN assertion: the stream state is correct and there is enough room in - * pending_buf. - */ -function putShortMSB(s, b) { -// put_byte(s, (Byte)(b >> 8)); -// put_byte(s, (Byte)(b & 0xff)); - s.pending_buf[s.pending++] = (b >>> 8) & 0xff; - s.pending_buf[s.pending++] = b & 0xff; -} - - -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->input buffer and copying from it. - * (See also flush_pending()). - */ -function read_buf(strm, buf, start, size) { - var len = strm.avail_in; - - if (len > size) { len = size; } - if (len === 0) { return 0; } - - strm.avail_in -= len; - - // zmemcpy(buf, strm->next_in, len); - utils.arraySet(buf, strm.input, strm.next_in, len, start); - if (strm.state.wrap === 1) { - strm.adler = adler32(strm.adler, buf, len, start); - } - - else if (strm.state.wrap === 2) { - strm.adler = crc32(strm.adler, buf, len, start); - } - - strm.next_in += len; - strm.total_in += len; - - return len; -} - - -/* =========================================================================== - * Set match_start to the longest match starting at the given string and - * return its length. Matches shorter or equal to prev_length are discarded, - * in which case the result is equal to prev_length and match_start is - * garbage. - * IN assertions: cur_match is the head of the hash chain for the current - * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 - * OUT assertion: the match length is not greater than s->lookahead. - */ -function longest_match(s, cur_match) { - var chain_length = s.max_chain_length; /* max hash chain length */ - var scan = s.strstart; /* current string */ - var match; /* matched string */ - var len; /* length of current match */ - var best_len = s.prev_length; /* best match length so far */ - var nice_match = s.nice_match; /* stop if match long enough */ - var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? - s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; - - var _win = s.window; // shortcut - - var wmask = s.w_mask; - var prev = s.prev; - - /* Stop when cur_match becomes <= limit. To simplify the code, - * we prevent matches with the string of window index 0. - */ - - var strend = s.strstart + MAX_MATCH; - var scan_end1 = _win[scan + best_len - 1]; - var scan_end = _win[scan + best_len]; - - /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - * It is easy to get rid of this optimization if necessary. - */ - // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - - /* Do not waste too much time if we already have a good match: */ - if (s.prev_length >= s.good_match) { - chain_length >>= 2; - } - /* Do not look for matches beyond the end of the input. This is necessary - * to make deflate deterministic. - */ - if (nice_match > s.lookahead) { nice_match = s.lookahead; } - - // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); - - do { - // Assert(cur_match < s->strstart, "no future"); - match = cur_match; - - /* Skip to next match if the match length cannot increase - * or if the match length is less than 2. Note that the checks below - * for insufficient lookahead only occur occasionally for performance - * reasons. Therefore uninitialized memory will be accessed, and - * conditional jumps will be made that depend on those values. - * However the length of the match is limited to the lookahead, so - * the output of deflate is not affected by the uninitialized values. - */ - - if (_win[match + best_len] !== scan_end || - _win[match + best_len - 1] !== scan_end1 || - _win[match] !== _win[scan] || - _win[++match] !== _win[scan + 1]) { - continue; - } - - /* The check at best_len-1 can be removed because it will be made - * again later. (This heuristic is not always a win.) - * It is not necessary to compare scan[2] and match[2] since they - * are always equal when the other bytes match, given that - * the hash keys are equal and that HASH_BITS >= 8. - */ - scan += 2; - match++; - // Assert(*scan == *match, "match[2]?"); - - /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. - */ - do { - /*jshint noempty:false*/ - } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && - scan < strend); - - // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - s.match_start = cur_match; - best_len = len; - if (len >= nice_match) { - break; - } - scan_end1 = _win[scan + best_len - 1]; - scan_end = _win[scan + best_len]; - } - } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); - - if (best_len <= s.lookahead) { - return best_len; - } - return s.lookahead; -} - - -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -function fill_window(s) { - var _w_size = s.w_size; - var p, n, m, more, str; - - //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = s.window_size - s.lookahead - s.strstart; - - // JS ints have 32 bit, block below not needed - /* Deal with !@#$% 64K limit: */ - //if (sizeof(int) <= 2) { - // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - // more = wsize; - // - // } else if (more == (unsigned)(-1)) { - // /* Very unlikely, but possible on 16 bit machine if - // * strstart == 0 && lookahead == 1 (input done a byte at time) - // */ - // more--; - // } - //} - - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { - - utils.arraySet(s.window, s.window, _w_size, _w_size, 0); - s.match_start -= _w_size; - s.strstart -= _w_size; - /* we now have strstart >= MAX_DIST */ - s.block_start -= _w_size; - - /* Slide the hash table (could be avoided with 32 bit values - at the expense of memory usage). We slide even when level == 0 - to keep the hash table consistent if we switch back to level > 0 - later. (Using level 0 permanently is not an optimal usage of - zlib, so we don't care about this pathological case.) - */ - - n = s.hash_size; - p = n; - do { - m = s.head[--p]; - s.head[p] = (m >= _w_size ? m - _w_size : 0); - } while (--n); - - n = _w_size; - p = n; - do { - m = s.prev[--p]; - s.prev[p] = (m >= _w_size ? m - _w_size : 0); - /* If n is not on any hash chain, prev[n] is garbage but - * its value will never be used. - */ - } while (--n); - - more += _w_size; - } - if (s.strm.avail_in === 0) { - break; - } - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - //Assert(more >= 2, "more < 2"); - n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); - s.lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s.lookahead + s.insert >= MIN_MATCH) { - str = s.strstart - s.insert; - s.ins_h = s.window[str]; - - /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; -//#if MIN_MATCH != 3 -// Call update_hash() MIN_MATCH-3 more times -//#endif - while (s.insert) { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = str; - str++; - s.insert--; - if (s.lookahead + s.insert < MIN_MATCH) { - break; - } - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ -// if (s.high_water < s.window_size) { -// var curr = s.strstart + s.lookahead; -// var init = 0; -// -// if (s.high_water < curr) { -// /* Previous high water mark below current data -- zero WIN_INIT -// * bytes or up to end of window, whichever is less. -// */ -// init = s.window_size - curr; -// if (init > WIN_INIT) -// init = WIN_INIT; -// zmemzero(s->window + curr, (unsigned)init); -// s->high_water = curr + init; -// } -// else if (s->high_water < (ulg)curr + WIN_INIT) { -// /* High water mark at or above current data, but below current data -// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up -// * to end of window, whichever is less. -// */ -// init = (ulg)curr + WIN_INIT - s->high_water; -// if (init > s->window_size - s->high_water) -// init = s->window_size - s->high_water; -// zmemzero(s->window + s->high_water, (unsigned)init); -// s->high_water += init; -// } -// } -// -// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, -// "not enough room for search"); -} - -/* =========================================================================== - * Copy without compression as much as possible from the input stream, return - * the current block state. - * This function does not insert new strings in the dictionary since - * uncompressible data is probably not useful. This function is used - * only for the level=0 compression option. - * NOTE: this function should be optimized to avoid extra copying from - * window to pending_buf. - */ -function deflate_stored(s, flush) { - /* Stored blocks are limited to 0xffff bytes, pending_buf is limited - * to pending_buf_size, and each stored block has a 5 byte header: - */ - var max_block_size = 0xffff; - - if (max_block_size > s.pending_buf_size - 5) { - max_block_size = s.pending_buf_size - 5; - } - - /* Copy as much as possible from input to output: */ - for (;;) { - /* Fill the window as much as possible: */ - if (s.lookahead <= 1) { - - //Assert(s->strstart < s->w_size+MAX_DIST(s) || - // s->block_start >= (long)s->w_size, "slide too late"); -// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || -// s.block_start >= s.w_size)) { -// throw new Error("slide too late"); -// } - - fill_window(s); - if (s.lookahead === 0 && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - - if (s.lookahead === 0) { - break; - } - /* flush the current block */ - } - //Assert(s->block_start >= 0L, "block gone"); -// if (s.block_start < 0) throw new Error("block gone"); - - s.strstart += s.lookahead; - s.lookahead = 0; - - /* Emit a stored block if pending_buf will be full: */ - var max_start = s.block_start + max_block_size; - - if (s.strstart === 0 || s.strstart >= max_start) { - /* strstart == 0 is possible when wraparound on 16-bit machine */ - s.lookahead = s.strstart - max_start; - s.strstart = max_start; - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - - - } - /* Flush if we may have to slide, otherwise block_start may become - * negative and the data will be gone: - */ - if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - - s.insert = 0; - - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - - if (s.strstart > s.block_start) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_NEED_MORE; -} - -/* =========================================================================== - * Compress as much as possible from the input stream, return the current - * block state. - * This function does not perform lazy evaluation of matches and inserts - * new strings in the dictionary only for unmatched strings or for short - * matches. It is used only for the fast compression options. - */ -function deflate_fast(s, flush) { - var hash_head; /* head of the hash chain */ - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { - break; /* flush the current block */ - } - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - * At this point we have always match_length < MIN_MATCH - */ - if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - } - if (s.match_length >= MIN_MATCH) { - // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only - - /*** _tr_tally_dist(s, s.strstart - s.match_start, - s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - - /* Insert new strings in the hash table only if the match length - * is not too large. This saves time but degrades compression. - */ - if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { - s.match_length--; /* string at strstart already in table */ - do { - s.strstart++; - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ - } while (--s.match_length !== 0); - s.strstart++; - } else - { - s.strstart += s.match_length; - s.match_length = 0; - s.ins_h = s.window[s.strstart]; - /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; - -//#if MIN_MATCH != 3 -// Call UPDATE_HASH() MIN_MATCH-3 more times -//#endif - /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not - * matter since it will be recomputed at next deflate call. - */ - } - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s.window[s.strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * Same as above, but achieves better compression. We use a lazy - * evaluation for matches: a match is finally adopted only if there is - * no better match at the next window position. - */ -function deflate_slow(s, flush) { - var hash_head; /* head of hash chain */ - var bflush; /* set if current block must be flushed */ - - var max_insert; - - /* Process the input block. */ - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the next match, plus MIN_MATCH bytes to insert the - * string following the next match. - */ - if (s.lookahead < MIN_LOOKAHEAD) { - fill_window(s); - if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* Insert the string window[strstart .. strstart+2] in the - * dictionary, and set hash_head to the head of the hash chain: - */ - hash_head = 0/*NIL*/; - if (s.lookahead >= MIN_MATCH) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - - /* Find the longest match, discarding those <= prev_length. - */ - s.prev_length = s.match_length; - s.prev_match = s.match_start; - s.match_length = MIN_MATCH - 1; - - if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && - s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { - /* To simplify the code, we prevent matches with the string - * of window index 0 (in particular we have to avoid a match - * of the string with itself at the start of the input file). - */ - s.match_length = longest_match(s, hash_head); - /* longest_match() sets match_start */ - - if (s.match_length <= 5 && - (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { - - /* If prev_match is also MIN_MATCH, match_start is garbage - * but we will ignore the current match anyway. - */ - s.match_length = MIN_MATCH - 1; - } - } - /* If there was a match at the previous step and the current - * match is not better, output the previous match: - */ - if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { - max_insert = s.strstart + s.lookahead - MIN_MATCH; - /* Do not insert strings in hash table beyond this. */ - - //check_match(s, s.strstart-1, s.prev_match, s.prev_length); - - /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, - s.prev_length - MIN_MATCH, bflush);***/ - bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); - /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not - * enough lookahead, the last two strings are not inserted in - * the hash table. - */ - s.lookahead -= s.prev_length - 1; - s.prev_length -= 2; - do { - if (++s.strstart <= max_insert) { - /*** INSERT_STRING(s, s.strstart, hash_head); ***/ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; - hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; - s.head[s.ins_h] = s.strstart; - /***/ - } - } while (--s.prev_length !== 0); - s.match_available = 0; - s.match_length = MIN_MATCH - 1; - s.strstart++; - - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - } else if (s.match_available) { - /* If there was no match at the previous position, output a - * single literal. If there was a match but the current match - * is longer, truncate the previous match to a single literal. - */ - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - if (bflush) { - /*** FLUSH_BLOCK_ONLY(s, 0) ***/ - flush_block_only(s, false); - /***/ - } - s.strstart++; - s.lookahead--; - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - } else { - /* There is no previous match to compare with, wait for - * the next step to decide. - */ - s.match_available = 1; - s.strstart++; - s.lookahead--; - } - } - //Assert (flush != Z_NO_FLUSH, "no flush?"); - if (s.match_available) { - //Tracevv((stderr,"%c", s->window[s->strstart-1])); - /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); - - s.match_available = 0; - } - s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - - return BS_BLOCK_DONE; -} - - -/* =========================================================================== - * For Z_RLE, simply look for runs of bytes, generate matches only of distance - * one. Do not maintain a hash table. (It will be regenerated if this run of - * deflate switches away from Z_RLE.) - */ -function deflate_rle(s, flush) { - var bflush; /* set if current block must be flushed */ - var prev; /* byte at distance one to match */ - var scan, strend; /* scan goes up to strend for length of run */ - - var _win = s.window; - - for (;;) { - /* Make sure that we always have enough lookahead, except - * at the end of the input file. We need MAX_MATCH bytes - * for the longest run, plus one for the unrolled loop. - */ - if (s.lookahead <= MAX_MATCH) { - fill_window(s); - if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - if (s.lookahead === 0) { break; } /* flush the current block */ - } - - /* See how many times the previous byte repeats */ - s.match_length = 0; - if (s.lookahead >= MIN_MATCH && s.strstart > 0) { - scan = s.strstart - 1; - prev = _win[scan]; - if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { - strend = s.strstart + MAX_MATCH; - do { - /*jshint noempty:false*/ - } while (prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - prev === _win[++scan] && prev === _win[++scan] && - scan < strend); - s.match_length = MAX_MATCH - (strend - scan); - if (s.match_length > s.lookahead) { - s.match_length = s.lookahead; - } - } - //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); - } - - /* Emit match if have run of MIN_MATCH or longer, else emit literal */ - if (s.match_length >= MIN_MATCH) { - //check_match(s, s.strstart, s.strstart - 1, s.match_length); - - /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ - bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); - - s.lookahead -= s.match_length; - s.strstart += s.match_length; - s.match_length = 0; - } else { - /* No match, output a literal byte */ - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - - s.lookahead--; - s.strstart++; - } - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* =========================================================================== - * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. - * (It will be regenerated if this run of deflate switches away from Huffman.) - */ -function deflate_huff(s, flush) { - var bflush; /* set if current block must be flushed */ - - for (;;) { - /* Make sure that we have a literal to write. */ - if (s.lookahead === 0) { - fill_window(s); - if (s.lookahead === 0) { - if (flush === Z_NO_FLUSH) { - return BS_NEED_MORE; - } - break; /* flush the current block */ - } - } - - /* Output a literal byte */ - s.match_length = 0; - //Tracevv((stderr,"%c", s->window[s->strstart])); - /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ - bflush = trees._tr_tally(s, 0, s.window[s.strstart]); - s.lookahead--; - s.strstart++; - if (bflush) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - } - s.insert = 0; - if (flush === Z_FINISH) { - /*** FLUSH_BLOCK(s, 1); ***/ - flush_block_only(s, true); - if (s.strm.avail_out === 0) { - return BS_FINISH_STARTED; - } - /***/ - return BS_FINISH_DONE; - } - if (s.last_lit) { - /*** FLUSH_BLOCK(s, 0); ***/ - flush_block_only(s, false); - if (s.strm.avail_out === 0) { - return BS_NEED_MORE; - } - /***/ - } - return BS_BLOCK_DONE; -} - -/* Values for max_lazy_match, good_match and max_chain_length, depending on - * the desired pack level (0..9). The values given below have been tuned to - * exclude worst case performance for pathological files. Better values may be - * found for specific files. - */ -function Config(good_length, max_lazy, nice_length, max_chain, func) { - this.good_length = good_length; - this.max_lazy = max_lazy; - this.nice_length = nice_length; - this.max_chain = max_chain; - this.func = func; -} - -var configuration_table; - -configuration_table = [ - /* good lazy nice chain */ - new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ - new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ - new Config(4, 5, 16, 8, deflate_fast), /* 2 */ - new Config(4, 6, 32, 32, deflate_fast), /* 3 */ - - new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ - new Config(8, 16, 32, 32, deflate_slow), /* 5 */ - new Config(8, 16, 128, 128, deflate_slow), /* 6 */ - new Config(8, 32, 128, 256, deflate_slow), /* 7 */ - new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ - new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ -]; - - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -function lm_init(s) { - s.window_size = 2 * s.w_size; - - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - - /* Set the default configuration parameters: - */ - s.max_lazy_match = configuration_table[s.level].max_lazy; - s.good_match = configuration_table[s.level].good_length; - s.nice_match = configuration_table[s.level].nice_length; - s.max_chain_length = configuration_table[s.level].max_chain; - - s.strstart = 0; - s.block_start = 0; - s.lookahead = 0; - s.insert = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - s.ins_h = 0; -} - - -function DeflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.status = 0; /* as the name implies */ - this.pending_buf = null; /* output still pending */ - this.pending_buf_size = 0; /* size of pending_buf */ - this.pending_out = 0; /* next pending byte to output to the stream */ - this.pending = 0; /* nb of bytes in the pending buffer */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.gzhead = null; /* gzip header information to write */ - this.gzindex = 0; /* where in extra, name, or comment */ - this.method = Z_DEFLATED; /* can only be DEFLATED */ - this.last_flush = -1; /* value of flush param for previous deflate call */ - - this.w_size = 0; /* LZ77 window size (32K by default) */ - this.w_bits = 0; /* log2(w_size) (8..16) */ - this.w_mask = 0; /* w_size - 1 */ - - this.window = null; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. - */ - - this.window_size = 0; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - this.prev = null; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - this.head = null; /* Heads of the hash chains or NIL. */ - - this.ins_h = 0; /* hash index of string to be inserted */ - this.hash_size = 0; /* number of elements in hash table */ - this.hash_bits = 0; /* log2(hash_size) */ - this.hash_mask = 0; /* hash_size-1 */ - - this.hash_shift = 0; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - this.block_start = 0; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - this.match_length = 0; /* length of best match */ - this.prev_match = 0; /* previous match */ - this.match_available = 0; /* set if previous match exists */ - this.strstart = 0; /* start of string to insert */ - this.match_start = 0; /* start of matching string */ - this.lookahead = 0; /* number of valid bytes ahead in window */ - - this.prev_length = 0; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - this.max_chain_length = 0; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - this.max_lazy_match = 0; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ - // That's alias to max_lazy_match, don't use directly - //this.max_insert_length = 0; - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - this.level = 0; /* compression level (1..9) */ - this.strategy = 0; /* favor or force Huffman coding*/ - - this.good_match = 0; - /* Use a faster search when the previous match is longer than this */ - - this.nice_match = 0; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - - /* Didn't use ct_data typedef below to suppress compiler warning */ - - // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - // Use flat array of DOUBLE size, with interleaved fata, - // because JS does not support effective - this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); - this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); - this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); - zero(this.dyn_ltree); - zero(this.dyn_dtree); - zero(this.bl_tree); - - this.l_desc = null; /* desc. for literal tree */ - this.d_desc = null; /* desc. for distance tree */ - this.bl_desc = null; /* desc. for bit length tree */ - - //ush bl_count[MAX_BITS+1]; - this.bl_count = new utils.Buf16(MAX_BITS + 1); - /* number of codes at each bit length for an optimal tree */ - - //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ - zero(this.heap); - - this.heap_len = 0; /* number of elements in the heap */ - this.heap_max = 0; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; - zero(this.depth); - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ - - this.l_buf = 0; /* buffer index for literals or lengths */ - - this.lit_bufsize = 0; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - this.last_lit = 0; /* running index in l_buf */ - - this.d_buf = 0; - /* Buffer index for distances. To simplify the code, d_buf and l_buf have - * the same number of elements. To use different lengths, an extra flag - * array would be necessary. - */ - - this.opt_len = 0; /* bit length of current block with optimal trees */ - this.static_len = 0; /* bit length of current block with static trees */ - this.matches = 0; /* number of string matches in current block */ - this.insert = 0; /* bytes at end of window left to insert */ - - - this.bi_buf = 0; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - this.bi_valid = 0; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - // Used for window memory init. We safely ignore it for JS. That makes - // sense only for pointers and memory check tools. - //this.high_water = 0; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ -} - - -function deflateResetKeep(strm) { - var s; - - if (!strm || !strm.state) { - return err(strm, Z_STREAM_ERROR); - } - - strm.total_in = strm.total_out = 0; - strm.data_type = Z_UNKNOWN; - - s = strm.state; - s.pending = 0; - s.pending_out = 0; - - if (s.wrap < 0) { - s.wrap = -s.wrap; - /* was made negative by deflate(..., Z_FINISH); */ - } - s.status = (s.wrap ? INIT_STATE : BUSY_STATE); - strm.adler = (s.wrap === 2) ? - 0 // crc32(0, Z_NULL, 0) - : - 1; // adler32(0, Z_NULL, 0) - s.last_flush = Z_NO_FLUSH; - trees._tr_init(s); - return Z_OK; -} - - -function deflateReset(strm) { - var ret = deflateResetKeep(strm); - if (ret === Z_OK) { - lm_init(strm.state); - } - return ret; -} - - -function deflateSetHeader(strm, head) { - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } - strm.state.gzhead = head; - return Z_OK; -} - - -function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { - if (!strm) { // === Z_NULL - return Z_STREAM_ERROR; - } - var wrap = 1; - - if (level === Z_DEFAULT_COMPRESSION) { - level = 6; - } - - if (windowBits < 0) { /* suppress zlib wrapper */ - wrap = 0; - windowBits = -windowBits; - } - - else if (windowBits > 15) { - wrap = 2; /* write gzip wrapper instead */ - windowBits -= 16; - } - - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || - windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || - strategy < 0 || strategy > Z_FIXED) { - return err(strm, Z_STREAM_ERROR); - } - - - if (windowBits === 8) { - windowBits = 9; - } - /* until 256-byte window bug fixed */ - - var s = new DeflateState(); - - strm.state = s; - s.strm = strm; - - s.wrap = wrap; - s.gzhead = null; - s.w_bits = windowBits; - s.w_size = 1 << s.w_bits; - s.w_mask = s.w_size - 1; - - s.hash_bits = memLevel + 7; - s.hash_size = 1 << s.hash_bits; - s.hash_mask = s.hash_size - 1; - s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - s.window = new utils.Buf8(s.w_size * 2); - s.head = new utils.Buf16(s.hash_size); - s.prev = new utils.Buf16(s.w_size); - - // Don't need mem init magic for JS. - //s.high_water = 0; /* nothing written to s->window yet */ - - s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ - - s.pending_buf_size = s.lit_bufsize * 4; - - //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); - //s->pending_buf = (uchf *) overlay; - s.pending_buf = new utils.Buf8(s.pending_buf_size); - - // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) - //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); - s.d_buf = 1 * s.lit_bufsize; - - //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; - s.l_buf = (1 + 2) * s.lit_bufsize; - - s.level = level; - s.strategy = strategy; - s.method = method; - - return deflateReset(strm); -} - -function deflateInit(strm, level) { - return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -} - - -function deflate(strm, flush) { - var old_flush, s; - var beg, val; // for gzip header write only - - if (!strm || !strm.state || - flush > Z_BLOCK || flush < 0) { - return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; - } - - s = strm.state; - - if (!strm.output || - (!strm.input && strm.avail_in !== 0) || - (s.status === FINISH_STATE && flush !== Z_FINISH)) { - return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); - } - - s.strm = strm; /* just in case */ - old_flush = s.last_flush; - s.last_flush = flush; - - /* Write the header */ - if (s.status === INIT_STATE) { - - if (s.wrap === 2) { // GZIP header - strm.adler = 0; //crc32(0L, Z_NULL, 0); - put_byte(s, 31); - put_byte(s, 139); - put_byte(s, 8); - if (!s.gzhead) { // s->gzhead == Z_NULL - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, 0); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, OS_CODE); - s.status = BUSY_STATE; - } - else { - put_byte(s, (s.gzhead.text ? 1 : 0) + - (s.gzhead.hcrc ? 2 : 0) + - (!s.gzhead.extra ? 0 : 4) + - (!s.gzhead.name ? 0 : 8) + - (!s.gzhead.comment ? 0 : 16) - ); - put_byte(s, s.gzhead.time & 0xff); - put_byte(s, (s.gzhead.time >> 8) & 0xff); - put_byte(s, (s.gzhead.time >> 16) & 0xff); - put_byte(s, (s.gzhead.time >> 24) & 0xff); - put_byte(s, s.level === 9 ? 2 : - (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? - 4 : 0)); - put_byte(s, s.gzhead.os & 0xff); - if (s.gzhead.extra && s.gzhead.extra.length) { - put_byte(s, s.gzhead.extra.length & 0xff); - put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); - } - if (s.gzhead.hcrc) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); - } - s.gzindex = 0; - s.status = EXTRA_STATE; - } - } - else // DEFLATE header - { - var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; - var level_flags = -1; - - if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { - level_flags = 0; - } else if (s.level < 6) { - level_flags = 1; - } else if (s.level === 6) { - level_flags = 2; - } else { - level_flags = 3; - } - header |= (level_flags << 6); - if (s.strstart !== 0) { header |= PRESET_DICT; } - header += 31 - (header % 31); - - s.status = BUSY_STATE; - putShortMSB(s, header); - - /* Save the adler32 of the preset dictionary: */ - if (s.strstart !== 0) { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - strm.adler = 1; // adler32(0L, Z_NULL, 0); - } - } - -//#ifdef GZIP - if (s.status === EXTRA_STATE) { - if (s.gzhead.extra/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - - while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - break; - } - } - put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); - s.gzindex++; - } - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (s.gzindex === s.gzhead.extra.length) { - s.gzindex = 0; - s.status = NAME_STATE; - } - } - else { - s.status = NAME_STATE; - } - } - if (s.status === NAME_STATE) { - if (s.gzhead.name/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.name.length) { - val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.gzindex = 0; - s.status = COMMENT_STATE; - } - } - else { - s.status = COMMENT_STATE; - } - } - if (s.status === COMMENT_STATE) { - if (s.gzhead.comment/* != Z_NULL*/) { - beg = s.pending; /* start of bytes to update crc */ - //int val; - - do { - if (s.pending === s.pending_buf_size) { - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - flush_pending(strm); - beg = s.pending; - if (s.pending === s.pending_buf_size) { - val = 1; - break; - } - } - // JS specific: little magic to add zero terminator to end of string - if (s.gzindex < s.gzhead.comment.length) { - val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; - } else { - val = 0; - } - put_byte(s, val); - } while (val !== 0); - - if (s.gzhead.hcrc && s.pending > beg) { - strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); - } - if (val === 0) { - s.status = HCRC_STATE; - } - } - else { - s.status = HCRC_STATE; - } - } - if (s.status === HCRC_STATE) { - if (s.gzhead.hcrc) { - if (s.pending + 2 > s.pending_buf_size) { - flush_pending(strm); - } - if (s.pending + 2 <= s.pending_buf_size) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - strm.adler = 0; //crc32(0L, Z_NULL, 0); - s.status = BUSY_STATE; - } - } - else { - s.status = BUSY_STATE; - } - } -//#endif - - /* Flush as much pending output as possible */ - if (s.pending !== 0) { - flush_pending(strm); - if (strm.avail_out === 0) { - /* Since avail_out is 0, deflate will be called again with - * more output space, but possibly with both pending and - * avail_in equal to zero. There won't be anything to do, - * but this is not an error situation so make sure we - * return OK instead of BUF_ERROR at next call of deflate: - */ - s.last_flush = -1; - return Z_OK; - } - - /* Make sure there is something to do and avoid duplicate consecutive - * flushes. For repeated and useless calls with Z_FINISH, we keep - * returning Z_STREAM_END instead of Z_BUF_ERROR. - */ - } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && - flush !== Z_FINISH) { - return err(strm, Z_BUF_ERROR); - } - - /* User must not provide more input after the first FINISH: */ - if (s.status === FINISH_STATE && strm.avail_in !== 0) { - return err(strm, Z_BUF_ERROR); - } - - /* Start a new block or continue the current one. - */ - if (strm.avail_in !== 0 || s.lookahead !== 0 || - (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { - var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : - (s.strategy === Z_RLE ? deflate_rle(s, flush) : - configuration_table[s.level].func(s, flush)); - - if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { - s.status = FINISH_STATE; - } - if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { - if (strm.avail_out === 0) { - s.last_flush = -1; - /* avoid BUF_ERROR next call, see above */ - } - return Z_OK; - /* If flush != Z_NO_FLUSH && avail_out == 0, the next call - * of deflate should use the same flush parameter to make sure - * that the flush is complete. So we don't have to output an - * empty block here, this will be done at next call. This also - * ensures that for a very small output buffer, we emit at most - * one empty block. - */ - } - if (bstate === BS_BLOCK_DONE) { - if (flush === Z_PARTIAL_FLUSH) { - trees._tr_align(s); - } - else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ - - trees._tr_stored_block(s, 0, 0, false); - /* For a full flush, this empty block will be recognized - * as a special marker by inflate_sync(). - */ - if (flush === Z_FULL_FLUSH) { - /*** CLEAR_HASH(s); ***/ /* forget history */ - zero(s.head); // Fill with NIL (= 0); - - if (s.lookahead === 0) { - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - } - } - flush_pending(strm); - if (strm.avail_out === 0) { - s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ - return Z_OK; - } - } - } - //Assert(strm->avail_out > 0, "bug2"); - //if (strm.avail_out <= 0) { throw new Error("bug2");} - - if (flush !== Z_FINISH) { return Z_OK; } - if (s.wrap <= 0) { return Z_STREAM_END; } - - /* Write the trailer */ - if (s.wrap === 2) { - put_byte(s, strm.adler & 0xff); - put_byte(s, (strm.adler >> 8) & 0xff); - put_byte(s, (strm.adler >> 16) & 0xff); - put_byte(s, (strm.adler >> 24) & 0xff); - put_byte(s, strm.total_in & 0xff); - put_byte(s, (strm.total_in >> 8) & 0xff); - put_byte(s, (strm.total_in >> 16) & 0xff); - put_byte(s, (strm.total_in >> 24) & 0xff); - } - else - { - putShortMSB(s, strm.adler >>> 16); - putShortMSB(s, strm.adler & 0xffff); - } - - flush_pending(strm); - /* If avail_out is zero, the application will call deflate again - * to flush the rest. - */ - if (s.wrap > 0) { s.wrap = -s.wrap; } - /* write the trailer only once! */ - return s.pending !== 0 ? Z_OK : Z_STREAM_END; -} - -function deflateEnd(strm) { - var status; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - status = strm.state.status; - if (status !== INIT_STATE && - status !== EXTRA_STATE && - status !== NAME_STATE && - status !== COMMENT_STATE && - status !== HCRC_STATE && - status !== BUSY_STATE && - status !== FINISH_STATE - ) { - return err(strm, Z_STREAM_ERROR); - } - - strm.state = null; - - return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; -} - - -/* ========================================================================= - * Initializes the compression dictionary from the given byte - * sequence without producing any compressed output. - */ -function deflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var s; - var str, n; - var wrap; - var avail; - var next; - var input; - var tmpDict; - - if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { - return Z_STREAM_ERROR; - } - - s = strm.state; - wrap = s.wrap; - - if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { - return Z_STREAM_ERROR; - } - - /* when using zlib wrappers, compute Adler-32 for provided dictionary */ - if (wrap === 1) { - /* adler32(strm->adler, dictionary, dictLength); */ - strm.adler = adler32(strm.adler, dictionary, dictLength, 0); - } - - s.wrap = 0; /* avoid computing Adler-32 in read_buf */ - - /* if dictionary would fill window, just replace the history */ - if (dictLength >= s.w_size) { - if (wrap === 0) { /* already empty otherwise */ - /*** CLEAR_HASH(s); ***/ - zero(s.head); // Fill with NIL (= 0); - s.strstart = 0; - s.block_start = 0; - s.insert = 0; - } - /* use the tail */ - // dictionary = dictionary.slice(dictLength - s.w_size); - tmpDict = new utils.Buf8(s.w_size); - utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); - dictionary = tmpDict; - dictLength = s.w_size; - } - /* insert dictionary into window and hash */ - avail = strm.avail_in; - next = strm.next_in; - input = strm.input; - strm.avail_in = dictLength; - strm.next_in = 0; - strm.input = dictionary; - fill_window(s); - while (s.lookahead >= MIN_MATCH) { - str = s.strstart; - n = s.lookahead - (MIN_MATCH - 1); - do { - /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ - s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; - - s.prev[str & s.w_mask] = s.head[s.ins_h]; - - s.head[s.ins_h] = str; - str++; - } while (--n); - s.strstart = str; - s.lookahead = MIN_MATCH - 1; - fill_window(s); - } - s.strstart += s.lookahead; - s.block_start = s.strstart; - s.insert = s.lookahead; - s.lookahead = 0; - s.match_length = s.prev_length = MIN_MATCH - 1; - s.match_available = 0; - strm.next_in = next; - strm.input = input; - strm.avail_in = avail; - s.wrap = wrap; - return Z_OK; -} - - -exports.deflateInit = deflateInit; -exports.deflateInit2 = deflateInit2; -exports.deflateReset = deflateReset; -exports.deflateResetKeep = deflateResetKeep; -exports.deflateSetHeader = deflateSetHeader; -exports.deflate = deflate; -exports.deflateEnd = deflateEnd; -exports.deflateSetDictionary = deflateSetDictionary; -exports.deflateInfo = 'pako deflate (from Nodeca project)'; - -/* Not implemented -exports.deflateBound = deflateBound; -exports.deflateCopy = deflateCopy; -exports.deflateParams = deflateParams; -exports.deflatePending = deflatePending; -exports.deflatePrime = deflatePrime; -exports.deflateTune = deflateTune; -*/ - -},{"../utils/common":24,"./adler32":25,"./crc32":27,"./messages":32,"./trees":33}],29:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -// See state defs from inflate.js -var BAD = 30; /* got a data error -- remain here until reset */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ - -/* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ -module.exports = function inflate_fast(strm, start) { - var state; - var _in; /* local strm.input */ - var last; /* have enough input while in < last */ - var _out; /* local strm.output */ - var beg; /* inflate()'s initial strm.output */ - var end; /* while out < end, enough space available */ -//#ifdef INFLATE_STRICT - var dmax; /* maximum distance from zlib header */ -//#endif - var wsize; /* window size or zero if not using window */ - var whave; /* valid bytes in the window */ - var wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - var s_window; /* allocated sliding window, if wsize != 0 */ - var hold; /* local strm.hold */ - var bits; /* local strm.bits */ - var lcode; /* local strm.lencode */ - var dcode; /* local strm.distcode */ - var lmask; /* mask for first level of length codes */ - var dmask; /* mask for first level of distance codes */ - var here; /* retrieved table entry */ - var op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - var len; /* match length, unused bytes */ - var dist; /* match distance */ - var from; /* where to copy match from */ - var from_source; - - - var input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); -//#ifdef INFLATE_STRICT - dmax = state.dmax; -//#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); -//#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } -//#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break top; - } - -// (!) This block is disabled in zlib defaults, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// if (len <= op - whave) { -// do { -// output[_out++] = 0; -// } while (--len); -// continue top; -// } -// len -= op - whave; -// do { -// output[_out++] = 0; -// } while (--op > whave); -// if (op === 0) { -// from = _out - dist; -// do { -// output[_out++] = output[from++]; -// } while (--len); -// continue top; -// } -//#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; -}; - -},{}],30:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -var utils = require('../utils/common'); -var adler32 = require('./adler32'); -var crc32 = require('./crc32'); -var inflate_fast = require('./inffast'); -var inflate_table = require('./inftrees'); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -/* Allowed flush values; see deflate() and inflate() below for details */ -//var Z_NO_FLUSH = 0; -//var Z_PARTIAL_FLUSH = 1; -//var Z_SYNC_FLUSH = 2; -//var Z_FULL_FLUSH = 3; -var Z_FINISH = 4; -var Z_BLOCK = 5; -var Z_TREES = 6; - - -/* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ -var Z_OK = 0; -var Z_STREAM_END = 1; -var Z_NEED_DICT = 2; -//var Z_ERRNO = -1; -var Z_STREAM_ERROR = -2; -var Z_DATA_ERROR = -3; -var Z_MEM_ERROR = -4; -var Z_BUF_ERROR = -5; -//var Z_VERSION_ERROR = -6; - -/* The deflate compression method */ -var Z_DEFLATED = 8; - - -/* STATES ====================================================================*/ -/* ===========================================================================*/ - - -var HEAD = 1; /* i: waiting for magic header */ -var FLAGS = 2; /* i: waiting for method and flags (gzip) */ -var TIME = 3; /* i: waiting for modification time (gzip) */ -var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ -var EXLEN = 5; /* i: waiting for extra length (gzip) */ -var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ -var NAME = 7; /* i: waiting for end of file name (gzip) */ -var COMMENT = 8; /* i: waiting for end of comment (gzip) */ -var HCRC = 9; /* i: waiting for header crc (gzip) */ -var DICTID = 10; /* i: waiting for dictionary check value */ -var DICT = 11; /* waiting for inflateSetDictionary() call */ -var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ -var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ -var STORED = 14; /* i: waiting for stored size (length and complement) */ -var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ -var COPY = 16; /* i/o: waiting for input or output to copy stored block */ -var TABLE = 17; /* i: waiting for dynamic block table lengths */ -var LENLENS = 18; /* i: waiting for code length code lengths */ -var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ -var LEN_ = 20; /* i: same as LEN below, but only first time in */ -var LEN = 21; /* i: waiting for length/lit/eob code */ -var LENEXT = 22; /* i: waiting for length extra bits */ -var DIST = 23; /* i: waiting for distance code */ -var DISTEXT = 24; /* i: waiting for distance extra bits */ -var MATCH = 25; /* o: waiting for output space to copy string */ -var LIT = 26; /* o: waiting for output space to write literal */ -var CHECK = 27; /* i: waiting for 32-bit check value */ -var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ -var DONE = 29; /* finished check, done -- remain here until reset */ -var BAD = 30; /* got a data error -- remain here until reset */ -var MEM = 31; /* got an inflate() memory error -- remain here until reset */ -var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ - -/* ===========================================================================*/ - - - -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var MAX_WBITS = 15; -/* 32K LZ77 window */ -var DEF_WBITS = MAX_WBITS; - - -function zswap32(q) { - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); -} - - -function InflateState() { - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib) */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ - this.work = new utils.Buf16(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ -} - -function inflateResetKeep(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); - state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - -function inflateReset(strm) { - var state; - - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - -} - -function inflateReset2(strm, windowBits) { - var wrap; - var state; - - /* get the state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 1; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); -} - -function inflateInit2(strm, windowBits) { - var ret; - var state; - - if (!strm) { return Z_STREAM_ERROR; } - //strm.msg = Z_NULL; /* in case we return an error */ - - state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.window = null/*Z_NULL*/; - ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK) { - strm.state = null/*Z_NULL*/; - } - return ret; -} - -function inflateInit(strm) { - return inflateInit2(strm, DEF_WBITS); -} - - -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -var virgin = true; - -var lenfix, distfix; // We have no pointers in JS, so keep tables separate - -function fixedtables(state) { - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - var sym; - - lenfix = new utils.Buf32(512); - distfix = new utils.Buf32(32); - - /* literal/length table */ - sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; -} - - -/* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ -function updatewindow(strm, src, end, copy) { - var dist; - var state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new utils.Buf8(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - utils.arraySet(state.window, src, end - copy, dist, state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - utils.arraySet(state.window, src, end - copy, copy, 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; -} - -function inflate(strm, flush) { - var state; - var input, output; // input/output buffers - var next; /* next input INDEX */ - var put; /* next output INDEX */ - var have, left; /* available input and output */ - var hold; /* bit buffer */ - var bits; /* bits in bit buffer */ - var _in, _out; /* save starting available input and output */ - var copy; /* number of stored or match bytes to copy */ - var from; /* where to copy match bytes from */ - var from_source; - var here = 0; /* current decoding table entry */ - var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //var last; /* parent table entry */ - var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - var len; /* length to copy for repeats, bits to drop */ - var ret; /* return code */ - var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ - var opts; - - var n; // temporary var for NEED_BITS - - var order = /* permutation of code lengths */ - [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - - if (!strm || !strm.state || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR; - } - - state = strm.state; - if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - state.flags = 0; /* expect zlib header */ - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - else if (len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD; - break; - } - state.dmax = 1 << len; - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if (state.flags & 0x0200) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if (state.flags & 0x0200) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more convenient processing later - state.head.extra = new Array(state.head.extra_len); - } - utils.arraySet( - state.head.extra, - input, - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - copy, - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if (state.flags & 0x0200) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - utils.arraySet(output, input, next, copy, put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// -//#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD; - break; - } -//#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } -//#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -//#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } -// (!) This block is disabled in zlib defaults, -// don't enable it for binary compatibility -//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -// Trace((stderr, "inflate.c too far\n")); -// copy -= state.whave; -// if (copy > state.length) { copy = state.length; } -// if (copy > left) { copy = left; } -// left -= copy; -// state.length -= copy; -// do { -// output[put++] = 0; -// } while (--copy); -// if (state.length === 0) { state.mode = LEN; } -// break; -//#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' instead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if (_out) { - strm.adler = state.check = - /*UPDATE(state.check, put - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR; - break inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { - state.mode = MEM; - return Z_MEM_ERROR; - } - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if (state.wrap && _out) { - strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { - ret = Z_BUF_ERROR; - } - return ret; -} - -function inflateEnd(strm) { - - if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { - return Z_STREAM_ERROR; - } - - var state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK; -} - -function inflateGetHeader(strm, head) { - var state; - - /* check state */ - if (!strm || !strm.state) { return Z_STREAM_ERROR; } - state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK; -} - -function inflateSetDictionary(strm, dictionary) { - var dictLength = dictionary.length; - - var state; - var dictid; - var ret; - - /* check state */ - if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; -} - -exports.inflateReset = inflateReset; -exports.inflateReset2 = inflateReset2; -exports.inflateResetKeep = inflateResetKeep; -exports.inflateInit = inflateInit; -exports.inflateInit2 = inflateInit2; -exports.inflate = inflate; -exports.inflateEnd = inflateEnd; -exports.inflateGetHeader = inflateGetHeader; -exports.inflateSetDictionary = inflateSetDictionary; -exports.inflateInfo = 'pako inflate (from Nodeca project)'; - -/* Not implemented -exports.inflateCopy = inflateCopy; -exports.inflateGetDictionary = inflateGetDictionary; -exports.inflateMark = inflateMark; -exports.inflatePrime = inflatePrime; -exports.inflateSync = inflateSync; -exports.inflateSyncPoint = inflateSyncPoint; -exports.inflateUndermine = inflateUndermine; -*/ - -},{"../utils/common":24,"./adler32":25,"./crc32":27,"./inffast":29,"./inftrees":31}],31:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -var utils = require('../utils/common'); - -var MAXBITS = 15; -var ENOUGH_LENS = 852; -var ENOUGH_DISTS = 592; -//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - -var CODES = 0; -var LENS = 1; -var DISTS = 2; - -var lbase = [ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 -]; - -var lext = [ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 -]; - -var dbase = [ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 -]; - -var dext = [ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 -]; - -module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) -{ - var bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - var len = 0; /* a code's length in bits */ - var sym = 0; /* index of code symbols */ - var min = 0, max = 0; /* minimum and maximum code lengths */ - var root = 0; /* number of index bits for root table */ - var curr = 0; /* number of index bits for current table */ - var drop = 0; /* code bits to drop for sub-table */ - var left = 0; /* number of prefix codes available */ - var used = 0; /* code entries in table used */ - var huff = 0; /* Huffman code */ - var incr; /* for incrementing code, index */ - var fill; /* index for replicating entries */ - var low; /* low bits for current root entry */ - var mask; /* mask for low root bits */ - var next; /* next available space in table */ - var base = null; /* base value table to use */ - var base_index = 0; -// var shoextra; /* extra bits table to use */ - var end; /* use base and extra for symbol > end */ - var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - var extra = null; - var extra_index = 0; - - var here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES) { - base = extra = work; /* dummy value--not used */ - end = 19; - - } else if (type === LENS) { - base = lbase; - base_index -= 257; - extra = lext; - extra_index -= 257; - end = 256; - - } else { /* DISTS */ - base = dbase; - extra = dext; - end = -1; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* process all codes and make table entries */ - for (;;) { - /* create table entry */ - here_bits = len - drop; - if (work[sym] < end) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] > end) { - here_op = extra[extra_index + work[sym]]; - here_val = base[base_index + work[sym]]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS && used > ENOUGH_LENS) || - (type === DISTS && used > ENOUGH_DISTS)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; -}; - -},{"../utils/common":24}],32:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -module.exports = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ -}; - -},{}],33:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -/* eslint-disable space-unary-ops */ - -var utils = require('../utils/common'); - -/* Public constants ==========================================================*/ -/* ===========================================================================*/ - - -//var Z_FILTERED = 1; -//var Z_HUFFMAN_ONLY = 2; -//var Z_RLE = 3; -var Z_FIXED = 4; -//var Z_DEFAULT_STRATEGY = 0; - -/* Possible values of the data_type field (though see inflate()) */ -var Z_BINARY = 0; -var Z_TEXT = 1; -//var Z_ASCII = 1; // = Z_TEXT -var Z_UNKNOWN = 2; - -/*============================================================================*/ - - -function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } - -// From zutil.h - -var STORED_BLOCK = 0; -var STATIC_TREES = 1; -var DYN_TREES = 2; -/* The three kinds of block type */ - -var MIN_MATCH = 3; -var MAX_MATCH = 258; -/* The minimum and maximum match lengths */ - -// From deflate.h -/* =========================================================================== - * Internal compression state. - */ - -var LENGTH_CODES = 29; -/* number of length codes, not counting the special END_BLOCK code */ - -var LITERALS = 256; -/* number of literal bytes 0..255 */ - -var L_CODES = LITERALS + 1 + LENGTH_CODES; -/* number of Literal or Length codes, including the END_BLOCK code */ - -var D_CODES = 30; -/* number of distance codes */ - -var BL_CODES = 19; -/* number of codes used to transfer the bit lengths */ - -var HEAP_SIZE = 2 * L_CODES + 1; -/* maximum heap size */ - -var MAX_BITS = 15; -/* All codes must not exceed MAX_BITS bits */ - -var Buf_size = 16; -/* size of bit buffer in bi_buf */ - - -/* =========================================================================== - * Constants - */ - -var MAX_BL_BITS = 7; -/* Bit length codes must not exceed MAX_BL_BITS bits */ - -var END_BLOCK = 256; -/* end of block literal code */ - -var REP_3_6 = 16; -/* repeat previous bit length 3-6 times (2 bits of repeat count) */ - -var REPZ_3_10 = 17; -/* repeat a zero length 3-10 times (3 bits of repeat count) */ - -var REPZ_11_138 = 18; -/* repeat a zero length 11-138 times (7 bits of repeat count) */ - -/* eslint-disable comma-spacing,array-bracket-spacing */ -var extra_lbits = /* extra bits for each length code */ - [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; - -var extra_dbits = /* extra bits for each distance code */ - [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; - -var extra_blbits = /* extra bits for each bit length code */ - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; - -var bl_order = - [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; -/* eslint-enable comma-spacing,array-bracket-spacing */ - -/* The lengths of the bit length codes are sent in order of decreasing - * probability, to avoid transmitting the lengths for unused bit length codes. - */ - -/* =========================================================================== - * Local data. These are initialized only once. - */ - -// We pre-fill arrays with 0 to avoid uninitialized gaps - -var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ - -// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 -var static_ltree = new Array((L_CODES + 2) * 2); -zero(static_ltree); -/* The static literal tree. Since the bit lengths are imposed, there is no - * need for the L_CODES extra codes used during heap construction. However - * The codes 286 and 287 are needed to build a canonical tree (see _tr_init - * below). - */ - -var static_dtree = new Array(D_CODES * 2); -zero(static_dtree); -/* The static distance tree. (Actually a trivial tree since all codes use - * 5 bits.) - */ - -var _dist_code = new Array(DIST_CODE_LEN); -zero(_dist_code); -/* Distance codes. The first 256 values correspond to the distances - * 3 .. 258, the last 256 values correspond to the top 8 bits of - * the 15 bit distances. - */ - -var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); -zero(_length_code); -/* length code for each normalized match length (0 == MIN_MATCH) */ - -var base_length = new Array(LENGTH_CODES); -zero(base_length); -/* First normalized length for each code (0 = MIN_MATCH) */ - -var base_dist = new Array(D_CODES); -zero(base_dist); -/* First normalized distance for each code (0 = distance of 1) */ - - -function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { - - this.static_tree = static_tree; /* static tree or NULL */ - this.extra_bits = extra_bits; /* extra bits for each code or NULL */ - this.extra_base = extra_base; /* base index for extra_bits */ - this.elems = elems; /* max number of elements in the tree */ - this.max_length = max_length; /* max bit length for the codes */ - - // show if `static_tree` has data or dummy - needed for monomorphic objects - this.has_stree = static_tree && static_tree.length; -} - - -var static_l_desc; -var static_d_desc; -var static_bl_desc; - - -function TreeDesc(dyn_tree, stat_desc) { - this.dyn_tree = dyn_tree; /* the dynamic tree */ - this.max_code = 0; /* largest code with non zero frequency */ - this.stat_desc = stat_desc; /* the corresponding static tree */ -} - - - -function d_code(dist) { - return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; -} - - -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -function put_short(s, w) { -// put_byte(s, (uch)((w) & 0xff)); -// put_byte(s, (uch)((ush)(w) >> 8)); - s.pending_buf[s.pending++] = (w) & 0xff; - s.pending_buf[s.pending++] = (w >>> 8) & 0xff; -} - - -/* =========================================================================== - * Send a value on a given number of bits. - * IN assertion: length <= 16 and value fits in length bits. - */ -function send_bits(s, value, length) { - if (s.bi_valid > (Buf_size - length)) { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - put_short(s, s.bi_buf); - s.bi_buf = value >> (Buf_size - s.bi_valid); - s.bi_valid += length - Buf_size; - } else { - s.bi_buf |= (value << s.bi_valid) & 0xffff; - s.bi_valid += length; - } -} - - -function send_code(s, c, tree) { - send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); -} - - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -function bi_reverse(code, len) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; -} - - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -function bi_flush(s) { - if (s.bi_valid === 16) { - put_short(s, s.bi_buf); - s.bi_buf = 0; - s.bi_valid = 0; - - } else if (s.bi_valid >= 8) { - s.pending_buf[s.pending++] = s.bi_buf & 0xff; - s.bi_buf >>= 8; - s.bi_valid -= 8; - } -} - - -/* =========================================================================== - * Compute the optimal bit lengths for a tree and update the total bit length - * for the current block. - * IN assertion: the fields freq and dad are set, heap[heap_max] and - * above are the tree nodes sorted by increasing frequency. - * OUT assertions: the field len is set to the optimal bit length, the - * array bl_count contains the frequencies for each bit length. - * The length opt_len is updated; static_len is also updated if stree is - * not null. - */ -function gen_bitlen(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var max_code = desc.max_code; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var extra = desc.stat_desc.extra_bits; - var base = desc.stat_desc.extra_base; - var max_length = desc.stat_desc.max_length; - var h; /* heap index */ - var n, m; /* iterate over the tree elements */ - var bits; /* bit length */ - var xbits; /* extra bits */ - var f; /* frequency */ - var overflow = 0; /* number of elements with bit length too large */ - - for (bits = 0; bits <= MAX_BITS; bits++) { - s.bl_count[bits] = 0; - } - - /* In a first pass, compute the optimal bit lengths (which may - * overflow in the case of the bit length tree). - */ - tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1]/*.Len*/ = bits; - /* We overwrite tree[n].Dad which is no longer needed */ - - if (n > max_code) { continue; } /* not a leaf node */ - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) { - xbits = extra[n - base]; - } - f = tree[n * 2]/*.Freq*/; - s.opt_len += f * (bits + xbits); - if (has_stree) { - s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); - } - } - if (overflow === 0) { return; } - - // Trace((stderr,"\nbit length overflow\n")); - /* This happens for example on obj2 and pic of the Calgary corpus */ - - /* Find the first bit length which could increase: */ - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) { bits--; } - s.bl_count[bits]--; /* move one leaf down the tree */ - s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ - s.bl_count[max_length]--; - /* The brother of the overflow item also moves one step up, - * but this does not affect bl_count[max_length] - */ - overflow -= 2; - } while (overflow > 0); - - /* Now recompute all bit lengths, scanning in increasing frequency. - * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all - * lengths instead of fixing only the wrong ones. This idea is taken - * from 'ar' written by Haruhiko Okumura.) - */ - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > max_code) { continue; } - if (tree[m * 2 + 1]/*.Len*/ !== bits) { - // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); - s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; - tree[m * 2 + 1]/*.Len*/ = bits; - } - n--; - } - } -} - - -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -function gen_codes(tree, max_code, bl_count) -// ct_data *tree; /* the tree to decorate */ -// int max_code; /* largest code with non zero frequency */ -// ushf *bl_count; /* number of codes at each bit length */ -{ - var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ - var code = 0; /* running code value */ - var bits; /* bit index */ - var n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = (code + bl_count[bits - 1]) << 1; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ - length = 0; - for (code = 0; code < LENGTH_CODES - 1; code++) { - base_length[code] = length; - for (n = 0; n < (1 << extra_lbits[code]); n++) { - _length_code[length++] = code; - } - } - //Assert (length == 256, "tr_static_init: length != 256"); - /* Note that the length 255 (match length 258) can be represented - * in two different ways: code 284 + 5 bits or code 285, so we - * overwrite length_code[255] to use the best encoding: - */ - _length_code[length - 1] = code; - - /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ - dist = 0; - for (code = 0; code < 16; code++) { - base_dist[code] = dist; - for (n = 0; n < (1 << extra_dbits[code]); n++) { - _dist_code[dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: dist != 256"); - dist >>= 7; /* from now on, all distances are divided by 128 */ - for (; code < D_CODES; code++) { - base_dist[code] = dist << 7; - for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { - _dist_code[256 + dist++] = code; - } - } - //Assert (dist == 256, "tr_static_init: 256+dist != 512"); - - /* Construct the codes of the static literal tree */ - for (bits = 0; bits <= MAX_BITS; bits++) { - bl_count[bits] = 0; - } - - n = 0; - while (n <= 143) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - while (n <= 255) { - static_ltree[n * 2 + 1]/*.Len*/ = 9; - n++; - bl_count[9]++; - } - while (n <= 279) { - static_ltree[n * 2 + 1]/*.Len*/ = 7; - n++; - bl_count[7]++; - } - while (n <= 287) { - static_ltree[n * 2 + 1]/*.Len*/ = 8; - n++; - bl_count[8]++; - } - /* Codes 286 and 287 do not exist, but we must include them in the - * tree construction to get a canonical Huffman tree (longest code - * all ones) - */ - gen_codes(static_ltree, L_CODES + 1, bl_count); - - /* The static distance tree is trivial: */ - for (n = 0; n < D_CODES; n++) { - static_dtree[n * 2 + 1]/*.Len*/ = 5; - static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); - } - - // Now data ready and we can init static trees - static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); - static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - //static_init_done = true; -} - - -/* =========================================================================== - * Initialize a new block. - */ -function init_block(s) { - var n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } - for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } - - s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; - s.opt_len = s.static_len = 0; - s.last_lit = s.matches = 0; -} - - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -function bi_windup(s) -{ - if (s.bi_valid > 8) { - put_short(s, s.bi_buf); - } else if (s.bi_valid > 0) { - //put_byte(s, (Byte)s->bi_buf); - s.pending_buf[s.pending++] = s.bi_buf; - } - s.bi_buf = 0; - s.bi_valid = 0; -} - -/* =========================================================================== - * Copy a stored block, storing first the length and its - * one's complement if requested. - */ -function copy_block(s, buf, len, header) -//DeflateState *s; -//charf *buf; /* the input data */ -//unsigned len; /* its length */ -//int header; /* true if block header must be written */ -{ - bi_windup(s); /* align on byte boundary */ - - if (header) { - put_short(s, len); - put_short(s, ~len); - } -// while (len--) { -// put_byte(s, *buf++); -// } - utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); - s.pending += len; -} - -/* =========================================================================== - * Compares to subtrees, using the tree depth as tie breaker when - * the subtrees have equal frequency. This minimizes the worst case length. - */ -function smaller(tree, n, m, depth) { - var _n2 = n * 2; - var _m2 = m * 2; - return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || - (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); -} - -/* =========================================================================== - * Restore the heap property by moving down the tree starting at node k, - * exchanging a node with the smallest of its two sons if necessary, stopping - * when the heap property is re-established (each father smaller than its - * two sons). - */ -function pqdownheap(s, tree, k) -// deflate_state *s; -// ct_data *tree; /* the tree to restore */ -// int k; /* node to move down */ -{ - var v = s.heap[k]; - var j = k << 1; /* left son of k */ - while (j <= s.heap_len) { - /* Set j to the smallest of the two sons: */ - if (j < s.heap_len && - smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { - j++; - } - /* Exit if v is smaller than both sons */ - if (smaller(tree, v, s.heap[j], s.depth)) { break; } - - /* Exchange v with the smallest son */ - s.heap[k] = s.heap[j]; - k = j; - - /* And continue down the tree, setting j to the left son of k */ - j <<= 1; - } - s.heap[k] = v; -} - - -// inlined manually -// var SMALLEST = 1; - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -function compress_block(s, ltree, dtree) -// deflate_state *s; -// const ct_data *ltree; /* literal tree */ -// const ct_data *dtree; /* distance tree */ -{ - var dist; /* distance of matched string */ - var lc; /* match length or unmatched char (if dist == 0) */ - var lx = 0; /* running index in l_buf */ - var code; /* the code to send */ - var extra; /* number of extra bits to send */ - - if (s.last_lit !== 0) { - do { - dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); - lc = s.pending_buf[s.l_buf + lx]; - lx++; - - if (dist === 0) { - send_code(s, lc, ltree); /* send a literal byte */ - //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send the length code */ - extra = extra_lbits[code]; - if (extra !== 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - //Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra !== 0) { - dist -= base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ - //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, - // "pendingBuf overflow"); - - } while (lx < s.last_lit); - } - - send_code(s, END_BLOCK, ltree); -} - - -/* =========================================================================== - * Construct one Huffman tree and assigns the code bit strings and lengths. - * Update the total bit length for the current block. - * IN assertion: the field freq is set for all tree elements. - * OUT assertions: the fields len and code are set to the optimal bit length - * and corresponding code. The length opt_len is updated; static_len is - * also updated if stree is not null. The field max_code is set. - */ -function build_tree(s, desc) -// deflate_state *s; -// tree_desc *desc; /* the tree descriptor */ -{ - var tree = desc.dyn_tree; - var stree = desc.stat_desc.static_tree; - var has_stree = desc.stat_desc.has_stree; - var elems = desc.stat_desc.elems; - var n, m; /* iterate over heap elements */ - var max_code = -1; /* largest code with non zero frequency */ - var node; /* new node being created */ - - /* Construct the initial heap, with least frequent element in - * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - * heap[0] is not used. - */ - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) { - if (tree[n * 2]/*.Freq*/ !== 0) { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - - } else { - tree[n * 2 + 1]/*.Len*/ = 0; - } - } - - /* The pkzip format requires that at least one distance code exists, - * and that at least one bit should be sent even if there is only one - * possible code. So to avoid special checks later on we force at least - * two codes of non zero frequency. - */ - while (s.heap_len < 2) { - node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); - tree[node * 2]/*.Freq*/ = 1; - s.depth[node] = 0; - s.opt_len--; - - if (has_stree) { - s.static_len -= stree[node * 2 + 1]/*.Len*/; - } - /* node is 0 or 1 so it does not have extra bits */ - } - desc.max_code = max_code; - - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - * establish sub-heaps of increasing lengths: - */ - for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } - - /* Construct the Huffman tree by repeatedly combining the least two - * frequent nodes. - */ - node = elems; /* next internal node of the tree */ - do { - //pqremove(s, tree, n); /* n = node of least frequency */ - /*** pqremove ***/ - n = s.heap[1/*SMALLEST*/]; - s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; - pqdownheap(s, tree, 1/*SMALLEST*/); - /***/ - - m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ - - s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ - s.heap[--s.heap_max] = m; - - /* Create a new node father of n and m */ - tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; - s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; - tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; - - /* and insert the new node in the heap */ - s.heap[1/*SMALLEST*/] = node++; - pqdownheap(s, tree, 1/*SMALLEST*/); - - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; - - /* At this point, the fields freq and dad are set. We can now - * generate the bit lengths. - */ - gen_bitlen(s, desc); - - /* The field len is now set, we can generate the bit codes */ - gen_codes(tree, max_code, s.bl_count); -} - - -/* =========================================================================== - * Scan a literal or distance tree to determine the frequencies of the codes - * in the bit length tree. - */ -function scan_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - s.bl_tree[curlen * 2]/*.Freq*/ += count; - - } else if (curlen !== 0) { - - if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } - s.bl_tree[REP_3_6 * 2]/*.Freq*/++; - - } else if (count <= 10) { - s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; - - } else { - s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; - } - - count = 0; - prevlen = curlen; - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Send a literal or distance tree in compressed form, using the codes in - * bl_tree. - */ -function send_tree(s, tree, max_code) -// deflate_state *s; -// ct_data *tree; /* the tree to be scanned */ -// int max_code; /* and its largest code of non zero frequency */ -{ - var n; /* iterates over all tree elements */ - var prevlen = -1; /* last emitted length */ - var curlen; /* length of current code */ - - var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ - - var count = 0; /* repeat count of the current code */ - var max_count = 7; /* max repeat count */ - var min_count = 4; /* min repeat count */ - - /* tree[max_code+1].Len = -1; */ /* guard already set */ - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; - - if (++count < max_count && curlen === nextlen) { - continue; - - } else if (count < min_count) { - do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); - - } else if (curlen !== 0) { - if (curlen !== prevlen) { - send_code(s, curlen, s.bl_tree); - count--; - } - //Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s.bl_tree); - send_bits(s, count - 3, 2); - - } else if (count <= 10) { - send_code(s, REPZ_3_10, s.bl_tree); - send_bits(s, count - 3, 3); - - } else { - send_code(s, REPZ_11_138, s.bl_tree); - send_bits(s, count - 11, 7); - } - - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - - } else if (curlen === nextlen) { - max_count = 6; - min_count = 3; - - } else { - max_count = 7; - min_count = 4; - } - } -} - - -/* =========================================================================== - * Construct the Huffman tree for the bit lengths and return the index in - * bl_order of the last bit length code to send. - */ -function build_bl_tree(s) { - var max_blindex; /* index of last bit length code of non zero freq */ - - /* Determine the bit length frequencies for literal and distance trees */ - scan_tree(s, s.dyn_ltree, s.l_desc.max_code); - scan_tree(s, s.dyn_dtree, s.d_desc.max_code); - - /* Build the bit length tree: */ - build_tree(s, s.bl_desc); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - */ - - /* Determine the number of bit length codes to send. The pkzip format - * requires that at least 4 bit length codes be sent. (appnote.txt says - * 3 but the actual value used is 4.) - */ - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { - break; - } - } - /* Update opt_len to include the bit length tree and counts */ - s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", - // s->opt_len, s->static_len)); - - return max_blindex; -} - - -/* =========================================================================== - * Send the header for a block using dynamic Huffman trees: the counts, the - * lengths of the bit length codes, the literal tree and the distance tree. - * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - */ -function send_all_trees(s, lcodes, dcodes, blcodes) -// deflate_state *s; -// int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ - var rank; /* index in bl_order */ - - //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); - //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, - // "too many codes"); - //Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes - 1, 5); - send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ - for (rank = 0; rank < blcodes; rank++) { - //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); - send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); - } - //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ - //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - - send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ - //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); -} - - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -function detect_data_type(s) { - /* black_mask is the bit mask of black-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - var black_mask = 0xf3ffc07f; - var n; - - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>>= 1) { - if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { - return Z_BINARY; - } - } - - /* Check for textual ("white-listed") bytes. */ - if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || - s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - for (n = 32; n < LITERALS; n++) { - if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { - return Z_TEXT; - } - } - - /* There are no "black-listed" or "white-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - - -var static_init_done = false; - -/* =========================================================================== - * Initialize the tree data structures for a new zlib stream. - */ -function _tr_init(s) -{ - - if (!static_init_done) { - tr_static_init(); - static_init_done = true; - } - - s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); - s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); - s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); - - s.bi_buf = 0; - s.bi_valid = 0; - - /* Initialize the first block of the first file: */ - init_block(s); -} - - -/* =========================================================================== - * Send a stored block - */ -function _tr_stored_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ - copy_block(s, buf, stored_len, true); /* with header */ -} - - -/* =========================================================================== - * Send one empty static block to give enough lookahead for inflate. - * This takes 10 bits, of which 7 may remain in the bit buffer. - */ -function _tr_align(s) { - send_bits(s, STATIC_TREES << 1, 3); - send_code(s, END_BLOCK, static_ltree); - bi_flush(s); -} - - -/* =========================================================================== - * Determine the best encoding for the current block: dynamic trees, static - * trees or store, and output the encoded block to the zip file. - */ -function _tr_flush_block(s, buf, stored_len, last) -//DeflateState *s; -//charf *buf; /* input block, or NULL if too old */ -//ulg stored_len; /* length of input block */ -//int last; /* one if this is the last block for a file */ -{ - var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ - var max_blindex = 0; /* index of last bit length code of non zero freq */ - - /* Build the Huffman trees unless a stored block is forced */ - if (s.level > 0) { - - /* Check if the file is binary or text */ - if (s.strm.data_type === Z_UNKNOWN) { - s.strm.data_type = detect_data_type(s); - } - - /* Construct the literal and distance trees */ - build_tree(s, s.l_desc); - // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - - build_tree(s, s.d_desc); - // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, - // s->static_len)); - /* At this point, opt_len and static_len are the total bit lengths of - * the compressed block data, excluding the tree representations. - */ - - /* Build the bit length tree for the above two trees, and get the index - * in bl_order of the last bit length code to send. - */ - max_blindex = build_bl_tree(s); - - /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s.opt_len + 3 + 7) >>> 3; - static_lenb = (s.static_len + 3 + 7) >>> 3; - - // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", - // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, - // s->last_lit)); - - if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } - - } else { - // Assert(buf != (char*)0, "lost buf"); - opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ - } - - if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { - /* 4: two words for the lengths */ - - /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - * Otherwise we can't have processed more than WSIZE input bytes since - * the last block flush, because compression would have been - * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - * transform a block into a stored block. - */ - _tr_stored_block(s, buf, stored_len, last); - - } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { - - send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); - compress_block(s, static_ltree, static_dtree); - - } else { - send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); - send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); - compress_block(s, s.dyn_ltree, s.dyn_dtree); - } - // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); - /* The above check is made mod 2^32, for files larger than 512 MB - * and uLong implemented on 32 bits. - */ - init_block(s); - - if (last) { - bi_windup(s); - } - // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - // s->compressed_len-7*last)); -} - -/* =========================================================================== - * Save the match info and tally the frequency counts. Return true if - * the current block must be flushed. - */ -function _tr_tally(s, dist, lc) -// deflate_state *s; -// unsigned dist; /* distance of matched string */ -// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ -{ - //var out_length, in_length, dcode; - - s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; - s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; - - s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; - s.last_lit++; - - if (dist === 0) { - /* lc is the unmatched char */ - s.dyn_ltree[lc * 2]/*.Freq*/++; - } else { - s.matches++; - /* Here, lc is the match length - MIN_MATCH */ - dist--; /* dist = match distance - 1 */ - //Assert((ush)dist < (ush)MAX_DIST(s) && - // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && - // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - - s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; - s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; - } - -// (!) This block is disabled in zlib defaults, -// don't enable it for binary compatibility - -//#ifdef TRUNCATE_BLOCK -// /* Try to guess if it is profitable to stop the current block here */ -// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { -// /* Compute an upper bound for the compressed length */ -// out_length = s.last_lit*8; -// in_length = s.strstart - s.block_start; -// -// for (dcode = 0; dcode < D_CODES; dcode++) { -// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); -// } -// out_length >>>= 3; -// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", -// // s->last_lit, in_length, out_length, -// // 100L - out_length*100L/in_length)); -// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { -// return true; -// } -// } -//#endif - - return (s.last_lit === s.lit_bufsize - 1); - /* We avoid equality with lit_bufsize because of wraparound at 64K - * on 16 bit machines and because stored blocks are restricted to - * 64K-1 bytes. - */ -} - -exports._tr_init = _tr_init; -exports._tr_stored_block = _tr_stored_block; -exports._tr_flush_block = _tr_flush_block; -exports._tr_tally = _tr_tally; -exports._tr_align = _tr_align; - -},{"../utils/common":24}],34:[function(require,module,exports){ -'use strict'; - -// (C) 1995-2013 Jean-loup Gailly and Mark Adler -// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. - -function ZStream() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; -} - -module.exports = ZStream; - -},{}],35:[function(require,module,exports){ -arguments[4][21][0].apply(exports,arguments) -},{"dup":21}],36:[function(require,module,exports){ -(function (Buffer){(function (){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -var K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1) - arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } - return arr.foo() === 42 - } catch (e) { - return false - } -} - -Object.defineProperty(Buffer.prototype, 'parent', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.buffer - } -}) - -Object.defineProperty(Buffer.prototype, 'offset', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.byteOffset - } -}) - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('The value "' + length + '" is invalid for option "size"') - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length) - buf.__proto__ = Buffer.prototype - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new TypeError( - 'The "string" argument must be of type string. Received type number' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species != null && - Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - if (ArrayBuffer.isView(value)) { - return fromArrayLike(value) - } - - if (value == null) { - throw TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) - } - - if (isInstance(value, ArrayBuffer) || - (value && isInstance(value.buffer, ArrayBuffer))) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'number') { - throw new TypeError( - 'The "value" argument must not be of type number. Received type number' - ) - } - - var valueOf = value.valueOf && value.valueOf() - if (valueOf != null && valueOf !== value) { - return Buffer.from(valueOf, encodingOrOffset, length) - } - - var b = fromObject(value) - if (b) return b - - if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && - typeof value[Symbol.toPrimitive] === 'function') { - return Buffer.from( - value[Symbol.toPrimitive]('string'), encodingOrOffset, length - ) - } - - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Buffer.prototype.__proto__ = Uint8Array.prototype -Buffer.__proto__ = Uint8Array - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be of type number') - } else if (size < 0) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - - var length = byteLength(string, encoding) | 0 - var buf = createBuffer(length) - - var actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - var buf = createBuffer(length) - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('"offset" is outside of buffer bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('"length" is outside of buffer bounds') - } - - var buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - var buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj.length !== undefined) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true && - b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false -} - -Buffer.compare = function compare (a, b) { - if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) - if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError( - 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' - ) - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (isInstance(buf, Uint8Array)) { - buf = Buffer.from(buf) - } - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - throw new TypeError( - 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + - 'Received type ' + typeof string - ) - } - - var len = string.length - var mustMatch = (arguments.length > 2 && arguments[2] === true) - if (!mustMatch && len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) { - return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 - } - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.toLocaleString = Buffer.prototype.toString - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() - if (this.length > max) str += ' ... ' - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (isInstance(target, Uint8Array)) { - target = Buffer.from(target, target.offset, target.byteLength) - } - if (!Buffer.isBuffer(target)) { - throw new TypeError( - 'The "target" argument must be one of type Buffer or Uint8Array. ' + - 'Received type ' + (typeof target) - ) - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - var strLen = string.length - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('Index out of range') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - - if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { - // Use built-in when available, missing from IE11 - this.copyWithin(targetStart, start, end) - } else if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (var i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, end), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if ((encoding === 'utf8' && code < 128) || - encoding === 'latin1') { - // Fast path: If `val` fits into a single byte, use that numeric value. - val = code - } - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : Buffer.from(val, encoding) - var len = bytes.length - if (len === 0) { - throw new TypeError('The value "' + val + - '" is invalid for argument "value"') - } - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node takes equal signs as end of the Base64 encoding - str = str.split('=')[0] - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass -// the `instanceof` check but they should be treated as of that type. -// See: https://github.com/feross/buffer/issues/166 -function isInstance (obj, type) { - return obj instanceof type || - (obj != null && obj.constructor != null && obj.constructor.name != null && - obj.constructor.name === type.name) -} -function numberIsNaN (obj) { - // For IE11 support - return obj !== obj // eslint-disable-line no-self-compare -} - -}).call(this)}).call(this,require("buffer").Buffer) -},{"base64-js":9,"buffer":36,"ieee754":111}],37:[function(require,module,exports){ -'use strict'; - -var bind = require('function-bind'); - -var $apply = require('./functionApply'); -var $call = require('./functionCall'); -var $reflectApply = require('./reflectApply'); - -/** @type {import('./actualApply')} */ -module.exports = $reflectApply || bind.call($call, $apply); - -},{"./functionApply":39,"./functionCall":40,"./reflectApply":42,"function-bind":99}],38:[function(require,module,exports){ -'use strict'; - -var bind = require('function-bind'); -var $apply = require('./functionApply'); -var actualApply = require('./actualApply'); - -/** @type {import('./applyBind')} */ -module.exports = function applyBind() { - return actualApply(bind, $apply, arguments); -}; - -},{"./actualApply":37,"./functionApply":39,"function-bind":99}],39:[function(require,module,exports){ -'use strict'; - -/** @type {import('./functionApply')} */ -module.exports = Function.prototype.apply; - -},{}],40:[function(require,module,exports){ -'use strict'; - -/** @type {import('./functionCall')} */ -module.exports = Function.prototype.call; - -},{}],41:[function(require,module,exports){ -'use strict'; - -var bind = require('function-bind'); -var $TypeError = require('es-errors/type'); - -var $call = require('./functionCall'); -var $actualApply = require('./actualApply'); - -/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ -module.exports = function callBindBasic(args) { - if (args.length < 1 || typeof args[0] !== 'function') { - throw new $TypeError('a function is required'); - } - return $actualApply(bind, $call, args); -}; - -},{"./actualApply":37,"./functionCall":40,"es-errors/type":91,"function-bind":99}],42:[function(require,module,exports){ -'use strict'; - -/** @type {import('./reflectApply')} */ -module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; - -},{}],43:[function(require,module,exports){ -'use strict'; - -var setFunctionLength = require('set-function-length'); - -var $defineProperty = require('es-define-property'); - -var callBindBasic = require('call-bind-apply-helpers'); -var applyBind = require('call-bind-apply-helpers/applyBind'); - -module.exports = function callBind(originalFunction) { - var func = callBindBasic(arguments); - var adjustedLength = originalFunction.length - (arguments.length - 1); - return setFunctionLength( - func, - 1 + (adjustedLength > 0 ? adjustedLength : 0), - true - ); -}; - -if ($defineProperty) { - $defineProperty(module.exports, 'apply', { value: applyBind }); -} else { - module.exports.apply = applyBind; -} - -},{"call-bind-apply-helpers":41,"call-bind-apply-helpers/applyBind":38,"es-define-property":85,"set-function-length":141}],44:[function(require,module,exports){ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); - -var callBindBasic = require('call-bind-apply-helpers'); - -/** @type {(thisArg: string, searchString: string, position?: number) => number} */ -var $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]); - -/** @type {import('.')} */ -module.exports = function callBoundIntrinsic(name, allowMissing) { - /* eslint no-extra-parens: 0 */ - - var intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing)); - if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { - return callBindBasic(/** @type {const} */ ([intrinsic])); - } - return intrinsic; -}; - -},{"call-bind-apply-helpers":41,"get-intrinsic":100}],45:[function(require,module,exports){ -(function (Buffer){(function (){ -var clone = (function() { -'use strict'; - -function _instanceof(obj, type) { - return type != null && obj instanceof type; -} - -var nativeMap; -try { - nativeMap = Map; -} catch(_) { - // maybe a reference error because no `Map`. Give it a dummy value that no - // value will ever be an instanceof. - nativeMap = function() {}; -} - -var nativeSet; -try { - nativeSet = Set; -} catch(_) { - nativeSet = function() {}; -} - -var nativePromise; -try { - nativePromise = Promise; -} catch(_) { - nativePromise = function() {}; -} - -/** - * Clones (copies) an Object using deep copying. - * - * This function supports circular references by default, but if you are certain - * there are no circular references in your object, you can save some CPU time - * by calling clone(obj, false). - * - * Caution: if `circular` is false and `parent` contains circular references, - * your program may enter an infinite loop and crash. - * - * @param `parent` - the object to be cloned - * @param `circular` - set to true if the object to be cloned may contain - * circular references. (optional - true by default) - * @param `depth` - set to a number if the object is only to be cloned to - * a particular depth. (optional - defaults to Infinity) - * @param `prototype` - sets the prototype to be used when cloning an object. - * (optional - defaults to parent prototype). - * @param `includeNonEnumerable` - set to true if the non-enumerable properties - * should be cloned as well. Non-enumerable properties on the prototype - * chain will be ignored. (optional - false by default) -*/ -function clone(parent, circular, depth, prototype, includeNonEnumerable) { - if (typeof circular === 'object') { - depth = circular.depth; - prototype = circular.prototype; - includeNonEnumerable = circular.includeNonEnumerable; - circular = circular.circular; - } - // maintain two arrays for circular references, where corresponding parents - // and children have the same index - var allParents = []; - var allChildren = []; - - var useBuffer = typeof Buffer != 'undefined'; - - if (typeof circular == 'undefined') - circular = true; - - if (typeof depth == 'undefined') - depth = Infinity; - - // recurse this function so we don't reset allParents and allChildren - function _clone(parent, depth) { - // cloning null always returns null - if (parent === null) - return null; - - if (depth === 0) - return parent; - - var child; - var proto; - if (typeof parent != 'object') { - return parent; - } - - if (_instanceof(parent, nativeMap)) { - child = new nativeMap(); - } else if (_instanceof(parent, nativeSet)) { - child = new nativeSet(); - } else if (_instanceof(parent, nativePromise)) { - child = new nativePromise(function (resolve, reject) { - parent.then(function(value) { - resolve(_clone(value, depth - 1)); - }, function(err) { - reject(_clone(err, depth - 1)); - }); - }); - } else if (clone.__isArray(parent)) { - child = []; - } else if (clone.__isRegExp(parent)) { - child = new RegExp(parent.source, __getRegExpFlags(parent)); - if (parent.lastIndex) child.lastIndex = parent.lastIndex; - } else if (clone.__isDate(parent)) { - child = new Date(parent.getTime()); - } else if (useBuffer && Buffer.isBuffer(parent)) { - if (Buffer.allocUnsafe) { - // Node.js >= 4.5.0 - child = Buffer.allocUnsafe(parent.length); - } else { - // Older Node.js versions - child = new Buffer(parent.length); - } - parent.copy(child); - return child; - } else if (_instanceof(parent, Error)) { - child = Object.create(parent); - } else { - if (typeof prototype == 'undefined') { - proto = Object.getPrototypeOf(parent); - child = Object.create(proto); - } - else { - child = Object.create(prototype); - proto = prototype; - } - } - - if (circular) { - var index = allParents.indexOf(parent); - - if (index != -1) { - return allChildren[index]; - } - allParents.push(parent); - allChildren.push(child); - } - - if (_instanceof(parent, nativeMap)) { - parent.forEach(function(value, key) { - var keyChild = _clone(key, depth - 1); - var valueChild = _clone(value, depth - 1); - child.set(keyChild, valueChild); - }); - } - if (_instanceof(parent, nativeSet)) { - parent.forEach(function(value) { - var entryChild = _clone(value, depth - 1); - child.add(entryChild); - }); - } - - for (var i in parent) { - var attrs; - if (proto) { - attrs = Object.getOwnPropertyDescriptor(proto, i); - } - - if (attrs && attrs.set == null) { - continue; - } - child[i] = _clone(parent[i], depth - 1); - } - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(parent); - for (var i = 0; i < symbols.length; i++) { - // Don't need to worry about cloning a symbol because it is a primitive, - // like a number or string. - var symbol = symbols[i]; - var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); - if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { - continue; - } - child[symbol] = _clone(parent[symbol], depth - 1); - if (!descriptor.enumerable) { - Object.defineProperty(child, symbol, { - enumerable: false - }); - } - } - } - - if (includeNonEnumerable) { - var allPropertyNames = Object.getOwnPropertyNames(parent); - for (var i = 0; i < allPropertyNames.length; i++) { - var propertyName = allPropertyNames[i]; - var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); - if (descriptor && descriptor.enumerable) { - continue; - } - child[propertyName] = _clone(parent[propertyName], depth - 1); - Object.defineProperty(child, propertyName, { - enumerable: false - }); - } - } - - return child; - } - - return _clone(parent, depth); -} - -/** - * Simple flat clone using prototype, accepts only objects, usefull for property - * override on FLAT configuration object (no nested props). - * - * USE WITH CAUTION! This may not behave as you wish if you do not know how this - * works. - */ -clone.clonePrototype = function clonePrototype(parent) { - if (parent === null) - return null; - - var c = function () {}; - c.prototype = parent; - return new c(); -}; - -// private utility functions - -function __objToStr(o) { - return Object.prototype.toString.call(o); -} -clone.__objToStr = __objToStr; - -function __isDate(o) { - return typeof o === 'object' && __objToStr(o) === '[object Date]'; -} -clone.__isDate = __isDate; - -function __isArray(o) { - return typeof o === 'object' && __objToStr(o) === '[object Array]'; -} -clone.__isArray = __isArray; - -function __isRegExp(o) { - return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; -} -clone.__isRegExp = __isRegExp; - -function __getRegExpFlags(re) { - var flags = ''; - if (re.global) flags += 'g'; - if (re.ignoreCase) flags += 'i'; - if (re.multiline) flags += 'm'; - return flags; -} -clone.__getRegExpFlags = __getRegExpFlags; - -return clone; -})(); - -if (typeof module === 'object' && module.exports) { - module.exports = clone; -} - -}).call(this)}).call(this,require("buffer").Buffer) -},{"buffer":36}],46:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; - - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } - - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; - - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; - - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; - - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); - - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; - - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - var t; - - // Skip reset of nRounds has been set before and key did not change - if (this._nRounds && this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6; - - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; - - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - t = keySchedule[ksRow - 1]; - - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); - - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } - - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } - - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; - - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } - - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, - - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, - - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; - - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; - - // Key schedule row counter - var ksRow = 4; - - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; - - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } - - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, - - keySize: 256/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); - - - return CryptoJS.AES; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],47:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - const N = 16; - - //Origin pbox and sbox, derived from PI - const ORIG_P = [ - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, - 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, - 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, - 0x9216D5D9, 0x8979FB1B - ]; - - const ORIG_S = [ - [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ], - [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ], - [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ], - [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ] - ]; - - var BLOWFISH_CTX = { - pbox: [], - sbox: [] - } - - function F(ctx, x){ - let a = (x >> 24) & 0xFF; - let b = (x >> 16) & 0xFF; - let c = (x >> 8) & 0xFF; - let d = x & 0xFF; - - let y = ctx.sbox[0][a] + ctx.sbox[1][b]; - y = y ^ ctx.sbox[2][c]; - y = y + ctx.sbox[3][d]; - - return y; - } - - function BlowFish_Encrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = 0; i < N; ++i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[N]; - Xl = Xl ^ ctx.pbox[N + 1]; - - return {left: Xl, right: Xr}; - } - - function BlowFish_Decrypt(ctx, left, right){ - let Xl = left; - let Xr = right; - let temp; - - for(let i = N + 1; i > 1; --i){ - Xl = Xl ^ ctx.pbox[i]; - Xr = F(ctx, Xl) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx.pbox[1]; - Xl = Xl ^ ctx.pbox[0]; - - return {left: Xl, right: Xr}; - } - - /** - * Initialization ctx's pbox and sbox. - * - * @param {Object} ctx The object has pbox and sbox. - * @param {Array} key An array of 32-bit words. - * @param {int} keysize The length of the key. - * - * @example - * - * BlowFishInit(BLOWFISH_CTX, key, 128/32); - */ - function BlowFishInit(ctx, key, keysize) - { - for(let Row = 0; Row < 4; Row++) - { - ctx.sbox[Row] = []; - for(let Col = 0; Col < 256; Col++) - { - ctx.sbox[Row][Col] = ORIG_S[Row][Col]; - } - } - - let keyIndex = 0; - for(let index = 0; index < N + 2; index++) - { - ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex]; - keyIndex++; - if(keyIndex >= keysize) - { - keyIndex = 0; - } - } - - let Data1 = 0; - let Data2 = 0; - let res = 0; - for(let i = 0; i < N + 2; i += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.pbox[i] = Data1; - ctx.pbox[i + 1] = Data2; - } - - for(let i = 0; i < 4; i++) - { - for(let j = 0; j < 256; j += 2) - { - res = BlowFish_Encrypt(ctx, Data1, Data2); - Data1 = res.left; - Data2 = res.right; - ctx.sbox[i][j] = Data1; - ctx.sbox[i][j + 1] = Data2; - } - } - - return true; - } - - /** - * Blowfish block cipher algorithm. - */ - var Blowfish = C_algo.Blowfish = BlockCipher.extend({ - _doReset: function () { - // Skip reset of nRounds has been set before and key did not change - if (this._keyPriorReset === this._key) { - return; - } - - // Shortcuts - var key = this._keyPriorReset = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; - - //Initialization pbox and sbox - BlowFishInit(BLOWFISH_CTX, keyWords, keySize); - }, - - encryptBlock: function (M, offset) { - var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - decryptBlock: function (M, offset) { - var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]); - M[offset] = res.left; - M[offset + 1] = res.right; - }, - - blockSize: 64/32, - - keySize: 128/32, - - ivSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg); - */ - C.Blowfish = BlockCipher._createHelper(Blowfish); - }()); - - - return CryptoJS.Blowfish; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],48:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./evpkdf")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./evpkdf"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; - - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), - - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, - - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, - - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; - - // Set initial values - this.reset(); - }, - - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-cipher logic - this._doReset(); - }, - - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); - - // Process available blocks - return this._process(); - }, - - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } - - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); - - return finalProcessedData; - }, - - keySize: 128/32, - - ivSize: 128/32, - - _ENC_XFORM_MODE: 1, - - _DEC_XFORM_MODE: 2, - - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } - - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, - - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); - - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); - - return finalProcessedBlocks; - }, - - blockSize: 1 - }); - - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; - - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, - - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, - - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); - - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); - - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function xorBlock(words, offset, blockSize) { - var block; - - // Shortcut - var iv = this._iv; - - // Choose mixing block - if (iv) { - block = iv; - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - block = this._prevBlock; - } - - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } - - return CBC; - }()); - - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; - - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); - - // Add padding - data.concat(padding); - }, - - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), - - reset: function () { - var modeCreator; - - // Reset cipher - Cipher.reset.call(this); - - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; - - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - modeCreator = mode.createDecryptor; - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - - if (this._mode && this._mode.__creator == modeCreator) { - this._mode.init(this, iv && iv.words); - } else { - this._mode = modeCreator.call(mode, this, iv && iv.words); - this._mode.__creator = modeCreator; - } - }, - - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, - - _doFinalize: function () { - var finalProcessedBlocks; - - // Shortcut - var padding = this.cfg.padding; - - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); - - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - finalProcessedBlocks = this._process(!!'flush'); - - // Unpad data - padding.unpad(finalProcessedBlocks); - } - - return finalProcessedBlocks; - }, - - blockSize: 128/32 - }); - - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, - - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); - - /** - * Format namespace. - */ - var C_format = C.format = {}; - - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - var wordArray; - - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; - - // Format - if (salt) { - wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - wordArray = ciphertext; - } - - return wordArray.toString(Base64); - }, - - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - var salt; - - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); - - // Shortcut - var ciphertextWords = ciphertext.words; - - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - salt = WordArray.create(ciphertextWords.slice(2, 4)); - - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } - - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; - - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), - - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); - - // Shortcut - var cipherCfg = encryptor.cfg; - - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, - - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); - - return plaintext; - }, - - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); - - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; - - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt, hasher) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } - - // Derive key and IV - if (!hasher) { - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); - } else { - var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt); - } - - - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; - - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; - - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), - - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); - - // Mix in derived params - ciphertext.mixIn(derivedParams); - - return ciphertext; - }, - - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); - - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); - - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher); - - // Add IV to config - cfg.iv = derivedParams.iv; - - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); - - return plaintext; - } - }); - }()); - - -})); -},{"./core":49,"./evpkdf":53}],49:[function(require,module,exports){ -(function (global){(function (){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { - - /*globals window, global, require*/ - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - - var crypto; - - // Native crypto from window (Browser) - if (typeof window !== 'undefined' && window.crypto) { - crypto = window.crypto; - } - - // Native crypto in web worker (Browser) - if (typeof self !== 'undefined' && self.crypto) { - crypto = self.crypto; - } - - // Native crypto from worker - if (typeof globalThis !== 'undefined' && globalThis.crypto) { - crypto = globalThis.crypto; - } - - // Native (experimental IE 11) crypto from window (Browser) - if (!crypto && typeof window !== 'undefined' && window.msCrypto) { - crypto = window.msCrypto; - } - - // Native crypto from global (NodeJS) - if (!crypto && typeof global !== 'undefined' && global.crypto) { - crypto = global.crypto; - } - - // Native crypto import via require (NodeJS) - if (!crypto && typeof require === 'function') { - try { - crypto = require('crypto'); - } catch (err) {} - } - - /* - * Cryptographically secure pseudorandom number generator - * - * As Math.random() is cryptographically not safe to use - */ - var cryptoSecureRandomInt = function () { - if (crypto) { - // Use getRandomValues method (Browser) - if (typeof crypto.getRandomValues === 'function') { - try { - return crypto.getRandomValues(new Uint32Array(1))[0]; - } catch (err) {} - } - - // Use randomBytes method (NodeJS) - if (typeof crypto.randomBytes === 'function') { - try { - return crypto.randomBytes(4).readInt32LE(); - } catch (err) {} - } - } - - throw new Error('Native crypto module could not be used to get secure random number.'); - }; - - /* - * Local polyfill of Object.create - - */ - var create = Object.create || (function () { - function F() {} - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); - - F.prototype = null; - - return subtype; - }; - }()); - - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } - - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, - - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; - - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; - - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } - - // Count words ready - var nWordsReady = nBlocksReady * blockSize; - - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } - - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } - - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); - - return clone; - }, - - _minBufferSize: 0 - }); - - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), - - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); - - // Set initial values - this.reset(); - }, - - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); - - // Perform concrete-hasher logic - this._doReset(); - }, - - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); - - // Update the hash - this._process(); - - // Chainable - return this; - }, - - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } - - // Perform concrete-hasher logic - var hash = this._doFinalize(); - - return hash; - }, - - blockSize: 512/32, - - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, - - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); - - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; - - return C; - }(Math)); - - - return CryptoJS; - -})); -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"crypto":35}],50:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64; - -})); -},{"./core":49}],51:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * Base64url encoding strategy. - */ - var Base64url = C_enc.Base64url = { - /** - * Converts a word array to a Base64url string. - * - * @param {WordArray} wordArray The word array. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {string} The Base64url string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); - */ - stringify: function (wordArray, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = urlSafe ? this._safe_map : this._map; - - // Clamp excess bits - wordArray.clamp(); - - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; - - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } - - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } - - return base64Chars.join(''); - }, - - /** - * Converts a Base64url string to a word array. - * - * @param {string} base64Str The Base64url string. - * - * @param {boolean} urlSafe Whether to use url safe - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64url.parse(base64String); - */ - parse: function (base64Str, urlSafe) { - if (urlSafe === undefined) { - urlSafe = true - } - - // Shortcuts - var base64StrLength = base64Str.length; - var map = urlSafe ? this._safe_map : this._map; - var reverseMap = this._reverseMap; - - if (!reverseMap) { - reverseMap = this._reverseMap = []; - for (var j = 0; j < map.length; j++) { - reverseMap[map.charCodeAt(j)] = j; - } - } - - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex !== -1) { - base64StrLength = paddingIndex; - } - } - - // Convert - return parseLoop(base64Str, base64StrLength, reverseMap); - - }, - - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - }; - - function parseLoop(base64Str, base64StrLength, reverseMap) { - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); - var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); - nBytes++; - } - } - return WordArray.create(words, nBytes); - } - }()); - - - return CryptoJS.enc.Base64url; - -})); -},{"./core":49}],52:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; - - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } - - return utf16Chars.join(''); - }, - - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; - - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } - - return WordArray.create(words, utf16StrLength * 2); - } - }; - - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); - - - return CryptoJS.enc.Utf16; - -})); -},{"./core":49}],53:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; - - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - var block; - - // Shortcut - var cfg = this.cfg; - - // Init hasher - var hasher = cfg.hasher.create(); - - // Initial values - var derivedKey = WordArray.create(); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - block = hasher.update(password).finalize(salt); - hasher.reset(); - - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } - - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.EvpKDF; - -})); -},{"./core":49,"./hmac":55,"./sha1":74}],54:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; - - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, - - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); - - - return CryptoJS.format.Hex; - -})); -},{"./cipher-core":48,"./core":49}],55:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; - - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); - - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } - - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; - - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } - - // Clamp excess bits - key.clamp(); - - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); - - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; - - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - - // Set initial values - this.reset(); - }, - - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; - - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, - - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); - - // Chainable - return this; - }, - - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; - - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); - - return hmac; - } - }); - }()); - - -})); -},{"./core":49}],56:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy"), require("./blowfish")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy", "./blowfish"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - return CryptoJS; - -})); -},{"./aes":46,"./blowfish":47,"./cipher-core":48,"./core":49,"./enc-base64":50,"./enc-base64url":51,"./enc-utf16":52,"./evpkdf":53,"./format-hex":54,"./hmac":55,"./lib-typedarrays":57,"./md5":58,"./mode-cfb":59,"./mode-ctr":61,"./mode-ctr-gladman":60,"./mode-ecb":62,"./mode-ofb":63,"./pad-ansix923":64,"./pad-iso10126":65,"./pad-iso97971":66,"./pad-nopadding":67,"./pad-zeropadding":68,"./pbkdf2":69,"./rabbit":71,"./rabbit-legacy":70,"./rc4":72,"./ripemd160":73,"./sha1":74,"./sha224":75,"./sha256":76,"./sha3":77,"./sha384":78,"./sha512":79,"./tripledes":80,"./x64-core":81}],57:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } - - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - - // Reference original init - var superInit = WordArray.init; - - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } - - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } - - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; - - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } - - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; - - subInit.prototype = WordArray; - }()); - - - return CryptoJS.lib.WordArray; - -})); -},{"./core":49}],58:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var T = []; - - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); - - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - - // Shortcuts - var H = this._hash.words; - - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); - - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); - - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); - - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); - - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; - - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); - - - return CryptoJS.MD5; - -})); -},{"./core":49}],59:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); - - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); - - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; - - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); - - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); - - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); - - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - var keystream; - - // Shortcut - var iv = this._iv; - - // Generate keystream - if (iv) { - keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - - return CFB; - }()); - - - return CryptoJS.mode.CFB; - -})); -},{"./cipher-core":48,"./core":49}],60:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } - - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } - - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } - - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - - incCounter(counter); - - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTRGladman.Decryptor = Encryptor; - - return CTRGladman; - }()); - - - - - return CryptoJS.mode.CTRGladman; - -})); -},{"./cipher-core":48,"./core":49}],61:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; - - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); - - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - CTR.Decryptor = Encryptor; - - return CTR; - }()); - - - return CryptoJS.mode.CTR; - -})); -},{"./cipher-core":48,"./core":49}],62:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); - - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); - - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); - - return ECB; - }()); - - - return CryptoJS.mode.ECB; - -})); -},{"./cipher-core":48,"./core":49}],63:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); - - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; - - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); - - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); - - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); - - OFB.Decryptor = Encryptor; - - return OFB; - }()); - - - return CryptoJS.mode.OFB; - -})); -},{"./cipher-core":48,"./core":49}],64:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Ansix923; - -})); -},{"./cipher-core":48,"./core":49}],65:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; - - - return CryptoJS.pad.Iso10126; - -})); -},{"./cipher-core":48,"./core":49}],66:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); - - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, - - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); - - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; - - - return CryptoJS.pad.Iso97971; - -})); -},{"./cipher-core":48,"./core":49}],67:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, - - unpad: function () { - } - }; - - - return CryptoJS.pad.NoPadding; - -})); -},{"./cipher-core":48,"./core":49}],68:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - for (var i = data.sigBytes - 1; i >= 0; i--) { - if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - data.sigBytes = i + 1; - break; - } - } - } - }; - - - return CryptoJS.pad.ZeroPadding; - -})); -},{"./cipher-core":48,"./core":49}],69:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - var HMAC = C_algo.HMAC; - - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA256 - * @property {number} iterations The number of iterations to perform. Default: 250000 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA256, - iterations: 250000 - }), - - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; - - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); - - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); - - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; - - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); - - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; - - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); - - // Shortcut - var intermediateWords = intermediate.words; - - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } - - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; - - return derivedKey; - } - }); - - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); - - - return CryptoJS.PBKDF2; - -})); -},{"./core":49,"./hmac":55,"./sha256":76}],70:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); - - - return CryptoJS.RabbitLegacy; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],71:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - // Reusable objects - var S = []; - var C_ = []; - var G = []; - - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } - - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; - - // Iterate the system - nextState.call(this); - - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); - - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); - - // Encrypt - M[offset + i] ^= S[i]; - } - }, - - blockSize: 128/32, - - ivSize: 64/32 - }); - - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; - - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } - - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } - - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); - - - return CryptoJS.Rabbit; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],72:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; - - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; - - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } - - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; - - j = (j + S[i] + keyByte) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } - - // Counters - this._i = this._j = 0; - }, - - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, - - keySize: 256/32, - - ivSize: 0 - }); - - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; - - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; - - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } - - // Update counters - this._i = i; - this._j = j; - - return keystreamWord; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); - - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), - - _doReset: function () { - RC4._doReset.call(this); - - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); - - - return CryptoJS.RC4; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],73:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); - - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, - - _doProcessBlock: function (M, offset) { - - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; - - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var hash = this._hash; - var H = hash.words; - - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; - - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); - - } - - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } - - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } - - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } - - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); - - } - - function rotl(x,n) { - return (x<>>(32-n)); - } - - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); - - - return CryptoJS.RIPEMD160; - -})); -},{"./core":49}],74:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Reusable object - var W = []; - - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } - - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } - - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); - - - return CryptoJS.SHA1; - -})); -},{"./core":49}],75:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; - - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, - - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); - - hash.sigBytes -= 4; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); - - - return CryptoJS.SHA224; - -})); -},{"./core":49,"./sha256":76}],76:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; - - // Initialization and round constants tables - var H = []; - var K = []; - - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } - - return true; - } - - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } - - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); - - nPrime++; - } - - n++; - } - }()); - - // Reusable object - var W = []; - - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, - - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; - - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; - - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); - - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); - - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } - - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); - - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); - - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Return final computed hash - return this._hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); - - - return CryptoJS.SHA256; - -})); -},{"./core":49}],77:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; - - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; - - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } - - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } - - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; - - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } - - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } - - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); - - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); - - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), - - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } - - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; - - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; - - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); - - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } - - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } - - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; - - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } - - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - var tMsw; - var tLsw; - - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; - - // Rotate lanes - if (rhoOffset < 32) { - tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } - - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } - - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; - - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; - - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } - - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low; - } - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; - - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; - - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); - - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } - - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, - - clone: function () { - var clone = Hasher.clone.call(this); - - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } - - return clone; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); - - - return CryptoJS.SHA3; - -})); -},{"./core":49,"./x64-core":81}],78:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; - - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, - - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); - - hash.sigBytes -= 16; - - return hash; - } - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); - - - return CryptoJS.SHA384; - -})); -},{"./core":49,"./sha512":79,"./x64-core":81}],79:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } - - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); - - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, - - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; - - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; - - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; - - // Rounds - for (var i = 0; i < 80; i++) { - var Wil; - var Wih; - - // Shortcut - var Wi = W[i]; - - // Extend message - if (i < 16) { - Wih = Wi.high = M[offset + i * 2] | 0; - Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - Wil = gamma0l + Wi7l; - Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - Wil = Wil + gamma1l; - Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - Wil = Wil + Wi16l; - Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } - - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } - - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, - - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; - - // Hash final blocks - this._process(); - - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); - - // Return final computed hash - return hash; - }, - - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); - - return clone; - }, - - blockSize: 1024/32 - }); - - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); - - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); - - - return CryptoJS.SHA512; - -})); -},{"./core":49,"./x64-core":81}],80:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; - - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; - - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; - - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } - - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; - - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; - - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); - - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } - - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } - - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, - - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, - - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, - - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; - - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); - - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } - - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; - - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); - - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, - - keySize: 64/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } - - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); - - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - // Make sure the key length is valid (64, 128 or >= 192 bit) - if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { - throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); - } - - // Extend the key according to the keying options defined in 3DES standard - var key1 = keyWords.slice(0, 2); - var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4); - var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6); - - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(key1)); - this._des2 = DES.createEncryptor(WordArray.create(key2)); - this._des3 = DES.createEncryptor(WordArray.create(key3)); - }, - - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, - - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, - - keySize: 192/32, - - ivSize: 64/32, - - blockSize: 64/32 - }); - - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); - - - return CryptoJS.TripleDES; - -})); -},{"./cipher-core":48,"./core":49,"./enc-base64":50,"./evpkdf":53,"./md5":58}],81:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { - - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; - - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; - - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } - - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } - - // return X64Word.create(high, low); - // }, - - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, - - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, - - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; - - // return X64Word.create(high, low); - // } - }); - - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, - - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; - - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } - - return X32WordArray.create(x32Words, this.sigBytes); - }, - - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - - // Clone "words" array - var words = clone.words = this.words.slice(0); - - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } - - return clone; - } - }); - }()); - - - return CryptoJS; - -})); -},{"./core":49}],82:[function(require,module,exports){ -'use strict'; - -var $defineProperty = require('es-define-property'); - -var $SyntaxError = require('es-errors/syntax'); -var $TypeError = require('es-errors/type'); - -var gopd = require('gopd'); - -/** @type {import('.')} */ -module.exports = function defineDataProperty( - obj, - property, - value -) { - if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { - throw new $TypeError('`obj` must be an object or a function`'); - } - if (typeof property !== 'string' && typeof property !== 'symbol') { - throw new $TypeError('`property` must be a string or a symbol`'); - } - if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { - throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); - } - if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { - throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); - } - if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { - throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); - } - if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { - throw new $TypeError('`loose`, if provided, must be a boolean'); - } - - var nonEnumerable = arguments.length > 3 ? arguments[3] : null; - var nonWritable = arguments.length > 4 ? arguments[4] : null; - var nonConfigurable = arguments.length > 5 ? arguments[5] : null; - var loose = arguments.length > 6 ? arguments[6] : false; - - /* @type {false | TypedPropertyDescriptor} */ - var desc = !!gopd && gopd(obj, property); - - if ($defineProperty) { - $defineProperty(obj, property, { - configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, - enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, - value: value, - writable: nonWritable === null && desc ? desc.writable : !nonWritable - }); - } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { - // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable - obj[property] = value; // eslint-disable-line no-param-reassign - } else { - throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); - } -}; - -},{"es-define-property":85,"es-errors/syntax":90,"es-errors/type":91,"gopd":105}],83:[function(require,module,exports){ -'use strict'; - -var INITIAL_STATE = 1; -var FAIL_STATE = 0; -/** - * A StateMachine represents a deterministic finite automaton. - * It can perform matches over a sequence of values, similar to a regular expression. - */ - -class StateMachine { - constructor(dfa) { - this.stateTable = dfa.stateTable; - this.accepting = dfa.accepting; - this.tags = dfa.tags; - } - /** - * Returns an iterable object that yields pattern matches over the input sequence. - * Matches are of the form [startIndex, endIndex, tags]. - */ - - - match(str) { - var self = this; - return { - *[Symbol.iterator]() { - var state = INITIAL_STATE; - var startRun = null; - var lastAccepting = null; - var lastState = null; - - for (var p = 0; p < str.length; p++) { - var c = str[p]; - lastState = state; - state = self.stateTable[state][c]; - - if (state === FAIL_STATE) { - // yield the last match if any - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[lastState]]; - } // reset the state as if we started over from the initial state - - - state = self.stateTable[INITIAL_STATE][c]; - startRun = null; - } // start a run if not in the failure state - - - if (state !== FAIL_STATE && startRun == null) { - startRun = p; - } // if accepting, mark the potential match end - - - if (self.accepting[state]) { - lastAccepting = p; - } // reset the state to the initial state if we get into the failure state - - - if (state === FAIL_STATE) { - state = INITIAL_STATE; - } - } // yield the last match if any - - - if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { - yield [startRun, lastAccepting, self.tags[state]]; - } - } - - }; - } - /** - * For each match over the input sequence, action functions matching - * the tag definitions in the input pattern are called with the startIndex, - * endIndex, and sub-match sequence. - */ - - - apply(str, actions) { - for (var [start, end, tags] of this.match(str)) { - for (var tag of tags) { - if (typeof actions[tag] === 'function') { - actions[tag](start, end, str.slice(start, end + 1)); - } - } - } - } - -} - -module.exports = StateMachine; - - -},{}],84:[function(require,module,exports){ -'use strict'; - -var callBind = require('call-bind-apply-helpers'); -var gOPD = require('gopd'); - -var hasProtoAccessor; -try { - // eslint-disable-next-line no-extra-parens, no-proto - hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype; -} catch (e) { - if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') { - throw e; - } -} - -// eslint-disable-next-line no-extra-parens -var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__')); - -var $Object = Object; -var $getPrototypeOf = $Object.getPrototypeOf; - -/** @type {import('./get')} */ -module.exports = desc && typeof desc.get === 'function' - ? callBind([desc.get]) - : typeof $getPrototypeOf === 'function' - ? /** @type {import('./get')} */ function getDunder(value) { - // eslint-disable-next-line eqeqeq - return $getPrototypeOf(value == null ? value : $Object(value)); - } - : false; - -},{"call-bind-apply-helpers":41,"gopd":105}],85:[function(require,module,exports){ -'use strict'; - -/** @type {import('.')} */ -var $defineProperty = Object.defineProperty || false; -if ($defineProperty) { - try { - $defineProperty({}, 'a', { value: 1 }); - } catch (e) { - // IE 8 has a broken defineProperty - $defineProperty = false; - } -} - -module.exports = $defineProperty; - -},{}],86:[function(require,module,exports){ -'use strict'; - -/** @type {import('./eval')} */ -module.exports = EvalError; - -},{}],87:[function(require,module,exports){ -'use strict'; - -/** @type {import('.')} */ -module.exports = Error; - -},{}],88:[function(require,module,exports){ -'use strict'; - -/** @type {import('./range')} */ -module.exports = RangeError; - -},{}],89:[function(require,module,exports){ -'use strict'; - -/** @type {import('./ref')} */ -module.exports = ReferenceError; - -},{}],90:[function(require,module,exports){ -'use strict'; - -/** @type {import('./syntax')} */ -module.exports = SyntaxError; - -},{}],91:[function(require,module,exports){ -'use strict'; - -/** @type {import('./type')} */ -module.exports = TypeError; - -},{}],92:[function(require,module,exports){ -'use strict'; - -/** @type {import('./uri')} */ -module.exports = URIError; - -},{}],93:[function(require,module,exports){ -'use strict'; - -/** @type {import('.')} */ -module.exports = Object; - -},{}],94:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - -},{}],95:[function(require,module,exports){ -'use strict'; - -// do not edit .js files directly - edit src/index.jst - - - -module.exports = function equal(a, b) { - if (a === b) return true; - - if (a && b && typeof a == 'object' && typeof b == 'object') { - if (a.constructor !== b.constructor) return false; - - var length, i, keys; - if (Array.isArray(a)) { - length = a.length; - if (length != b.length) return false; - for (i = length; i-- !== 0;) - if (!equal(a[i], b[i])) return false; - return true; - } - - - - if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; - if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); - if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); - - keys = Object.keys(a); - length = keys.length; - if (length !== Object.keys(b).length) return false; - - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - - for (i = length; i-- !== 0;) { - var key = keys[i]; - - if (!equal(a[key], b[key])) return false; - } - - return true; - } - - // true if both NaN, false otherwise - return a!==a && b!==b; -}; - -},{}],96:[function(require,module,exports){ -(function (global){(function (){ -var $gfJaN$restructure = require("restructure"); -var $gfJaN$swchelperscjs_define_propertycjs = require("@swc/helpers/cjs/_define_property.cjs"); -var $gfJaN$swchelperscjs_ts_decoratecjs = require("@swc/helpers/cjs/_ts_decorate.cjs"); -var $gfJaN$fastdeepequal = require("fast-deep-equal"); -var $gfJaN$unicodeproperties = require("unicode-properties"); -var $gfJaN$unicodetrie = require("unicode-trie"); -var $gfJaN$dfa = require("dfa"); -var $gfJaN$clone = require("clone"); -var $gfJaN$tinyinflate = require("tiny-inflate"); -var $gfJaN$brotlidecompressjs = require("brotli/decompress.js"); - - -function $parcel$exportWildcard(dest, source) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { - return; - } - - Object.defineProperty(dest, key, { - enumerable: true, - get: function get() { - return source[key]; - } - }); - }); - - return dest; -} - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -var $59aa4ed98453e1d4$exports = {}; - -$parcel$export($59aa4ed98453e1d4$exports, "logErrors", () => $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78); -$parcel$export($59aa4ed98453e1d4$exports, "registerFormat", () => $59aa4ed98453e1d4$export$36b2f24e97d43be); -$parcel$export($59aa4ed98453e1d4$exports, "create", () => $59aa4ed98453e1d4$export$185802fd694ee1f5); -$parcel$export($59aa4ed98453e1d4$exports, "defaultLanguage", () => $59aa4ed98453e1d4$export$42940898df819940); -$parcel$export($59aa4ed98453e1d4$exports, "setDefaultLanguage", () => $59aa4ed98453e1d4$export$5157e7780d44cc36); - -let $59aa4ed98453e1d4$export$bd5c5d8b8dcafd78 = false; -let $59aa4ed98453e1d4$var$formats = []; -function $59aa4ed98453e1d4$export$36b2f24e97d43be(format) { - $59aa4ed98453e1d4$var$formats.push(format); -} -function $59aa4ed98453e1d4$export$185802fd694ee1f5(buffer, postscriptName) { - for(let i = 0; i < $59aa4ed98453e1d4$var$formats.length; i++){ - let format = $59aa4ed98453e1d4$var$formats[i]; - if (format.probe(buffer)) { - let font = new format(new (0, $gfJaN$restructure.DecodeStream)(buffer)); - if (postscriptName) return font.getFont(postscriptName); - return font; - } - } - throw new Error('Unknown font format'); -} -let $59aa4ed98453e1d4$export$42940898df819940 = 'en'; -function $59aa4ed98453e1d4$export$5157e7780d44cc36(lang = 'en') { - $59aa4ed98453e1d4$export$42940898df819940 = lang; -} - - - - - -/** - * This decorator caches the results of a getter or method such that - * the results are lazily computed once, and then cached. - * @private - */ function $3bda6911913b43f0$export$69a3209f1a06c04d(target, key, descriptor) { - if (descriptor.get) { - let get = descriptor.get; - descriptor.get = function() { - let value = get.call(this); - Object.defineProperty(this, key, { - value: value - }); - return value; - }; - } else if (typeof descriptor.value === 'function') { - let fn = descriptor.value; - return { - get () { - let cache = new Map; - function memoized(...args) { - let key = args.length > 0 ? args[0] : 'value'; - if (cache.has(key)) return cache.get(key); - let result = fn.apply(this, args); - cache.set(key, result); - return result; - } - Object.defineProperty(this, key, { - value: memoized - }); - return memoized; - } - }; - } -} - - - - - -let $e4ae0436c91af89f$var$SubHeader = new $gfJaN$restructure.Struct({ - firstCode: $gfJaN$restructure.uint16, - entryCount: $gfJaN$restructure.uint16, - idDelta: $gfJaN$restructure.int16, - idRangeOffset: $gfJaN$restructure.uint16 -}); -let $e4ae0436c91af89f$var$CmapGroup = new $gfJaN$restructure.Struct({ - startCharCode: $gfJaN$restructure.uint32, - endCharCode: $gfJaN$restructure.uint32, - glyphID: $gfJaN$restructure.uint32 -}); -let $e4ae0436c91af89f$var$UnicodeValueRange = new $gfJaN$restructure.Struct({ - startUnicodeValue: $gfJaN$restructure.uint24, - additionalCount: $gfJaN$restructure.uint8 -}); -let $e4ae0436c91af89f$var$UVSMapping = new $gfJaN$restructure.Struct({ - unicodeValue: $gfJaN$restructure.uint24, - glyphID: $gfJaN$restructure.uint16 -}); -let $e4ae0436c91af89f$var$DefaultUVS = new $gfJaN$restructure.Array($e4ae0436c91af89f$var$UnicodeValueRange, $gfJaN$restructure.uint32); -let $e4ae0436c91af89f$var$NonDefaultUVS = new $gfJaN$restructure.Array($e4ae0436c91af89f$var$UVSMapping, $gfJaN$restructure.uint32); -let $e4ae0436c91af89f$var$VarSelectorRecord = new $gfJaN$restructure.Struct({ - varSelector: $gfJaN$restructure.uint24, - defaultUVS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$DefaultUVS, { - type: 'parent' - }), - nonDefaultUVS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$NonDefaultUVS, { - type: 'parent' - }) -}); -let $e4ae0436c91af89f$var$CmapSubtable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - codeMap: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint8, 256) - }, - 2: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - subHeaderKeys: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 256), - subHeaderCount: (t)=>Math.max.apply(Math, t.subHeaderKeys), - subHeaders: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$SubHeader, 'subHeaderCount'), - glyphIndexArray: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'subHeaderCount') - }, - 4: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - segCountX2: $gfJaN$restructure.uint16, - segCount: (t)=>t.segCountX2 >> 1, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - endCode: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - reservedPad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - startCode: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - idDelta: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, 'segCount'), - idRangeOffset: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'segCount'), - glyphIndexArray: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, (t)=>(t.length - t._currentOffset) / 2) - }, - 6: { - length: $gfJaN$restructure.uint16, - language: $gfJaN$restructure.uint16, - firstCode: $gfJaN$restructure.uint16, - entryCount: $gfJaN$restructure.uint16, - glyphIndices: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'entryCount') - }, - 8: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint16, - is32: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint8, 8192), - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 10: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - firstCode: $gfJaN$restructure.uint32, - entryCount: $gfJaN$restructure.uint32, - glyphIndices: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'numChars') - }, - 12: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 13: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - length: $gfJaN$restructure.uint32, - language: $gfJaN$restructure.uint32, - nGroups: $gfJaN$restructure.uint32, - groups: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$CmapGroup, 'nGroups') - }, - 14: { - length: $gfJaN$restructure.uint32, - numRecords: $gfJaN$restructure.uint32, - varSelectors: new $gfJaN$restructure.LazyArray($e4ae0436c91af89f$var$VarSelectorRecord, 'numRecords') - } -}); -let $e4ae0436c91af89f$var$CmapEntry = new $gfJaN$restructure.Struct({ - platformID: $gfJaN$restructure.uint16, - encodingID: $gfJaN$restructure.uint16, - table: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $e4ae0436c91af89f$var$CmapSubtable, { - type: 'parent', - lazy: true - }) -}); -var // character to glyph mapping -$e4ae0436c91af89f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numSubtables: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($e4ae0436c91af89f$var$CmapEntry, 'numSubtables') -}); - - - -var // font header -$55a60976afb7c261$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - revision: $gfJaN$restructure.int32, - checkSumAdjustment: $gfJaN$restructure.uint32, - magicNumber: $gfJaN$restructure.uint32, - flags: $gfJaN$restructure.uint16, - unitsPerEm: $gfJaN$restructure.uint16, - created: new $gfJaN$restructure.Array($gfJaN$restructure.int32, 2), - modified: new $gfJaN$restructure.Array($gfJaN$restructure.int32, 2), - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16, - macStyle: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'bold', - 'italic', - 'underline', - 'outline', - 'shadow', - 'condensed', - 'extended' - ]), - lowestRecPPEM: $gfJaN$restructure.uint16, - fontDirectionHint: $gfJaN$restructure.int16, - indexToLocFormat: $gfJaN$restructure.int16, - glyphDataFormat: $gfJaN$restructure.int16 // 0 for current format -}); - - - -var // horizontal header -$dde72b7b5b650596$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - ascent: $gfJaN$restructure.int16, - descent: $gfJaN$restructure.int16, - lineGap: $gfJaN$restructure.int16, - advanceWidthMax: $gfJaN$restructure.uint16, - minLeftSideBearing: $gfJaN$restructure.int16, - minRightSideBearing: $gfJaN$restructure.int16, - xMaxExtent: $gfJaN$restructure.int16, - caretSlopeRise: $gfJaN$restructure.int16, - caretSlopeRun: $gfJaN$restructure.int16, - caretOffset: $gfJaN$restructure.int16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.int16, 4), - metricDataFormat: $gfJaN$restructure.int16, - numberOfMetrics: $gfJaN$restructure.uint16 // Number of advance widths in 'hmtx' table -}); - - - -let $a7c40184072c9a5b$var$HmtxEntry = new $gfJaN$restructure.Struct({ - advance: $gfJaN$restructure.uint16, - bearing: $gfJaN$restructure.int16 -}); -var $a7c40184072c9a5b$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - metrics: new $gfJaN$restructure.LazyArray($a7c40184072c9a5b$var$HmtxEntry, (t)=>t.parent.hhea.numberOfMetrics), - bearings: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics) -}); - - - -var // maxiumum profile -$521197722369f691$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.int32, - numGlyphs: $gfJaN$restructure.uint16, - maxPoints: $gfJaN$restructure.uint16, - maxContours: $gfJaN$restructure.uint16, - maxComponentPoints: $gfJaN$restructure.uint16, - maxComponentContours: $gfJaN$restructure.uint16, - maxZones: $gfJaN$restructure.uint16, - maxTwilightPoints: $gfJaN$restructure.uint16, - maxStorage: $gfJaN$restructure.uint16, - maxFunctionDefs: $gfJaN$restructure.uint16, - maxInstructionDefs: $gfJaN$restructure.uint16, - maxStackElements: $gfJaN$restructure.uint16, - maxSizeOfInstructions: $gfJaN$restructure.uint16, - maxComponentElements: $gfJaN$restructure.uint16, - maxComponentDepth: $gfJaN$restructure.uint16 // Maximum levels of recursion; 1 for simple components -}); - - - -/** - * Gets an encoding name from platform, encoding, and language ids. - * Returned encoding names can be used in iconv-lite to decode text. - */ function $e2613b812f052cbe$export$badc544e0651b6b1(platformID, encodingID, languageID = 0) { - if (platformID === 1 && $e2613b812f052cbe$export$479e671907f486d1[languageID]) return $e2613b812f052cbe$export$479e671907f486d1[languageID]; - return $e2613b812f052cbe$export$6fef87b7618bdf0b[platformID][encodingID]; -} -const $e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS = new Set([ - 'x-mac-roman', - 'x-mac-cyrillic', - 'iso-8859-6', - 'iso-8859-8' -]); -const $e2613b812f052cbe$var$MAC_ENCODINGS = { - 'x-mac-croatian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\u0160\u2122\xb4\xa8\u2260\u017D\xd8\u221E\xb1\u2264\u2265\u2206\xb5\u2202\u2211\u220F\u0161\u222B\xaa\xba\u03A9\u017E\xf8\xbf\xa1\xac\u221A\u0192\u2248\u0106\xab\u010C\u2026 \xc0\xc3\xd5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\uF8FF\xa9\u2044\u20AC\u2039\u203A\xc6\xbb\u2013\xb7\u201A\u201E\u2030\xc2\u0107\xc1\u010D\xc8\xcd\xce\xcf\xcc\xd3\xd4\u0111\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u03C0\xcb\u02DA\xb8\xca\xe6\u02C7", - 'x-mac-gaelic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u1E02\xb1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xe6\xf8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xff\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xb7\u1EF2\u1EF3\u204A\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\u2663\xd2\xda\xdb\xd9\u0131\xdd\xfd\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83", - 'x-mac-greek': "\xc4\xb9\xb2\xc9\xb3\xd6\xdc\u0385\xe0\xe2\xe4\u0384\xa8\xe7\xe9\xe8\xea\xeb\xa3\u2122\xee\xef\u2022\xbd\u2030\xf4\xf6\xa6\u20AC\xf9\xfb\xfc\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xdf\xae\xa9\u03A3\u03AA\xa7\u2260\xb0\xb7\u0391\xb1\u2264\u2265\xa5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xac\u039F\u03A1\u2248\u03A4\xab\xbb\u2026 \u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xf7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xad", - 'x-mac-icelandic': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xdd\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\xd0\xf0\xde\xfe\xfd\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-inuit': "\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xb0\u14A1\u14A5\u14A6\u2022\xb6\u14A7\xae\xa9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026 \u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142", - 'x-mac-ce': "\xc4\u0100\u0101\xc9\u0104\xd6\xdc\xe1\u0105\u010C\xe4\u010D\u0106\u0107\xe9\u0179\u017A\u010E\xed\u010F\u0112\u0113\u0116\xf3\u0117\xf4\xf6\xf5\xfa\u011A\u011B\xfc\u2020\xb0\u0118\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\u0119\xa8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xac\u221A\u0144\u0147\u2206\xab\xbb\u2026 \u0148\u0150\xd5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xc1\u0164\u0165\xcd\u017D\u017E\u016A\xd3\xd4\u016B\u016E\xda\u016F\u0170\u0171\u0172\u0173\xdd\xfd\u0137\u017B\u0141\u017C\u0122\u02C7", - 'x-mac-romanian': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\u0102\u0218\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\u0103\u0219\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\u0131\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7", - 'x-mac-turkish': "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\u2020\xb0\xa2\xa3\xa7\u2022\xb6\xdf\xae\xa9\u2122\xb4\xa8\u2260\xc6\xd8\u221E\xb1\u2264\u2265\xa5\xb5\u2202\u2211\u220F\u03C0\u222B\xaa\xba\u03A9\xe6\xf8\xbf\xa1\xac\u221A\u0192\u2248\u2206\xab\xbb\u2026 \xc0\xc3\xd5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xf7\u25CA\xff\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xb7\u201A\u201E\u2030\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\uF8FF\xd2\xda\xdb\xd9\uF8A0\u02C6\u02DC\xaf\u02D8\u02D9\u02DA\xb8\u02DD\u02DB\u02C7" -}; -const $e2613b812f052cbe$var$encodingCache = new Map(); -function $e2613b812f052cbe$export$1dceb3c14ed68bee(encoding) { - let cached = $e2613b812f052cbe$var$encodingCache.get(encoding); - if (cached) return cached; - // These encodings aren't supported by TextDecoder. - let mapping = $e2613b812f052cbe$var$MAC_ENCODINGS[encoding]; - if (mapping) { - let res = new Map(); - for(let i = 0; i < mapping.length; i++)res.set(mapping.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } - // Only single byte encodings can be mapped 1:1. - if ($e2613b812f052cbe$var$SINGLE_BYTE_ENCODINGS.has(encoding)) { - // TextEncoder only supports utf8, whereas TextDecoder supports legacy encodings. - // Use this to create a mapping of code points. - let decoder = new TextDecoder(encoding); - let mapping = new Uint8Array(0x80); - for(let i = 0; i < 0x80; i++)mapping[i] = 0x80 + i; - let res = new Map(); - let s = decoder.decode(mapping); - for(let i = 0; i < 0x80; i++)res.set(s.charCodeAt(i), 0x80 + i); - $e2613b812f052cbe$var$encodingCache.set(encoding, res); - return res; - } -} -const $e2613b812f052cbe$export$6fef87b7618bdf0b = [ - // unicode - [ - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be', - 'utf-16be' - ], - // macintosh - // Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ - // 0 Roman 17 Malayalam - // 1 Japanese 18 Sinhalese - // 2 Traditional Chinese 19 Burmese - // 3 Korean 20 Khmer - // 4 Arabic 21 Thai - // 5 Hebrew 22 Laotian - // 6 Greek 23 Georgian - // 7 Russian 24 Armenian - // 8 RSymbol 25 Simplified Chinese - // 9 Devanagari 26 Tibetan - // 10 Gurmukhi 27 Mongolian - // 11 Gujarati 28 Geez - // 12 Oriya 29 Slavic - // 13 Bengali 30 Vietnamese - // 14 Tamil 31 Sindhi - // 15 Telugu 32 (Uninterpreted) - // 16 Kannada - [ - 'x-mac-roman', - 'shift-jis', - 'big5', - 'euc-kr', - 'iso-8859-6', - 'iso-8859-8', - 'x-mac-greek', - 'x-mac-cyrillic', - 'x-mac-symbol', - 'x-mac-devanagari', - 'x-mac-gurmukhi', - 'x-mac-gujarati', - 'Oriya', - 'Bengali', - 'Tamil', - 'Telugu', - 'Kannada', - 'Malayalam', - 'Sinhalese', - 'Burmese', - 'Khmer', - 'iso-8859-11', - 'Laotian', - 'Georgian', - 'Armenian', - 'gbk', - 'Tibetan', - 'Mongolian', - 'Geez', - 'x-mac-ce', - 'Vietnamese', - 'Sindhi' - ], - // ISO (deprecated) - [ - 'ascii', - null, - 'iso-8859-1' - ], - // windows - // Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx - [ - 'symbol', - 'utf-16be', - 'shift-jis', - 'gb18030', - 'big5', - 'euc-kr', - 'johab', - null, - null, - null, - 'utf-16be' - ] -]; -const $e2613b812f052cbe$export$479e671907f486d1 = { - 15: 'x-mac-icelandic', - 17: 'x-mac-turkish', - 18: 'x-mac-croatian', - 24: 'x-mac-ce', - 25: 'x-mac-ce', - 26: 'x-mac-ce', - 27: 'x-mac-ce', - 28: 'x-mac-ce', - 30: 'x-mac-icelandic', - 37: 'x-mac-romanian', - 38: 'x-mac-ce', - 39: 'x-mac-ce', - 40: 'x-mac-ce', - 143: 'x-mac-inuit', - 146: 'x-mac-gaelic' -}; -const $e2613b812f052cbe$export$2092376fd002e13 = [ - // unicode - [], - { - 0: 'en', - 30: 'fo', - 60: 'ks', - 90: 'rw', - 1: 'fr', - 31: 'fa', - 61: 'ku', - 91: 'rn', - 2: 'de', - 32: 'ru', - 62: 'sd', - 92: 'ny', - 3: 'it', - 33: 'zh', - 63: 'bo', - 93: 'mg', - 4: 'nl', - 34: 'nl-BE', - 64: 'ne', - 94: 'eo', - 5: 'sv', - 35: 'ga', - 65: 'sa', - 128: 'cy', - 6: 'es', - 36: 'sq', - 66: 'mr', - 129: 'eu', - 7: 'da', - 37: 'ro', - 67: 'bn', - 130: 'ca', - 8: 'pt', - 38: 'cz', - 68: 'as', - 131: 'la', - 9: 'no', - 39: 'sk', - 69: 'gu', - 132: 'qu', - 10: 'he', - 40: 'si', - 70: 'pa', - 133: 'gn', - 11: 'ja', - 41: 'yi', - 71: 'or', - 134: 'ay', - 12: 'ar', - 42: 'sr', - 72: 'ml', - 135: 'tt', - 13: 'fi', - 43: 'mk', - 73: 'kn', - 136: 'ug', - 14: 'el', - 44: 'bg', - 74: 'ta', - 137: 'dz', - 15: 'is', - 45: 'uk', - 75: 'te', - 138: 'jv', - 16: 'mt', - 46: 'be', - 76: 'si', - 139: 'su', - 17: 'tr', - 47: 'uz', - 77: 'my', - 140: 'gl', - 18: 'hr', - 48: 'kk', - 78: 'km', - 141: 'af', - 19: 'zh-Hant', - 49: 'az-Cyrl', - 79: 'lo', - 142: 'br', - 20: 'ur', - 50: 'az-Arab', - 80: 'vi', - 143: 'iu', - 21: 'hi', - 51: 'hy', - 81: 'id', - 144: 'gd', - 22: 'th', - 52: 'ka', - 82: 'tl', - 145: 'gv', - 23: 'ko', - 53: 'mo', - 83: 'ms', - 146: 'ga', - 24: 'lt', - 54: 'ky', - 84: 'ms-Arab', - 147: 'to', - 25: 'pl', - 55: 'tg', - 85: 'am', - 148: 'el-polyton', - 26: 'hu', - 56: 'tk', - 86: 'ti', - 149: 'kl', - 27: 'es', - 57: 'mn-CN', - 87: 'om', - 150: 'az', - 28: 'lv', - 58: 'mn', - 88: 'so', - 151: 'nn', - 29: 'se', - 59: 'ps', - 89: 'sw' - }, - // ISO (deprecated) - [], - { - 0x0436: 'af', - 0x4009: 'en-IN', - 0x0487: 'rw', - 0x0432: 'tn', - 0x041C: 'sq', - 0x1809: 'en-IE', - 0x0441: 'sw', - 0x045B: 'si', - 0x0484: 'gsw', - 0x2009: 'en-JM', - 0x0457: 'kok', - 0x041B: 'sk', - 0x045E: 'am', - 0x4409: 'en-MY', - 0x0412: 'ko', - 0x0424: 'sl', - 0x1401: 'ar-DZ', - 0x1409: 'en-NZ', - 0x0440: 'ky', - 0x2C0A: 'es-AR', - 0x3C01: 'ar-BH', - 0x3409: 'en-PH', - 0x0454: 'lo', - 0x400A: 'es-BO', - 0x0C01: 'ar', - 0x4809: 'en-SG', - 0x0426: 'lv', - 0x340A: 'es-CL', - 0x0801: 'ar-IQ', - 0x1C09: 'en-ZA', - 0x0427: 'lt', - 0x240A: 'es-CO', - 0x2C01: 'ar-JO', - 0x2C09: 'en-TT', - 0x082E: 'dsb', - 0x140A: 'es-CR', - 0x3401: 'ar-KW', - 0x0809: 'en-GB', - 0x046E: 'lb', - 0x1C0A: 'es-DO', - 0x3001: 'ar-LB', - 0x0409: 'en', - 0x042F: 'mk', - 0x300A: 'es-EC', - 0x1001: 'ar-LY', - 0x3009: 'en-ZW', - 0x083E: 'ms-BN', - 0x440A: 'es-SV', - 0x1801: 'ary', - 0x0425: 'et', - 0x043E: 'ms', - 0x100A: 'es-GT', - 0x2001: 'ar-OM', - 0x0438: 'fo', - 0x044C: 'ml', - 0x480A: 'es-HN', - 0x4001: 'ar-QA', - 0x0464: 'fil', - 0x043A: 'mt', - 0x080A: 'es-MX', - 0x0401: 'ar-SA', - 0x040B: 'fi', - 0x0481: 'mi', - 0x4C0A: 'es-NI', - 0x2801: 'ar-SY', - 0x080C: 'fr-BE', - 0x047A: 'arn', - 0x180A: 'es-PA', - 0x1C01: 'aeb', - 0x0C0C: 'fr-CA', - 0x044E: 'mr', - 0x3C0A: 'es-PY', - 0x3801: 'ar-AE', - 0x040C: 'fr', - 0x047C: 'moh', - 0x280A: 'es-PE', - 0x2401: 'ar-YE', - 0x140C: 'fr-LU', - 0x0450: 'mn', - 0x500A: 'es-PR', - 0x042B: 'hy', - 0x180C: 'fr-MC', - 0x0850: 'mn-CN', - 0x0C0A: 'es', - 0x044D: 'as', - 0x100C: 'fr-CH', - 0x0461: 'ne', - 0x040A: 'es', - 0x082C: 'az-Cyrl', - 0x0462: 'fy', - 0x0414: 'nb', - 0x540A: 'es-US', - 0x042C: 'az', - 0x0456: 'gl', - 0x0814: 'nn', - 0x380A: 'es-UY', - 0x046D: 'ba', - 0x0437: 'ka', - 0x0482: 'oc', - 0x200A: 'es-VE', - 0x042D: 'eu', - 0x0C07: 'de-AT', - 0x0448: 'or', - 0x081D: 'sv-FI', - 0x0423: 'be', - 0x0407: 'de', - 0x0463: 'ps', - 0x041D: 'sv', - 0x0845: 'bn', - 0x1407: 'de-LI', - 0x0415: 'pl', - 0x045A: 'syr', - 0x0445: 'bn-IN', - 0x1007: 'de-LU', - 0x0416: 'pt', - 0x0428: 'tg', - 0x201A: 'bs-Cyrl', - 0x0807: 'de-CH', - 0x0816: 'pt-PT', - 0x085F: 'tzm', - 0x141A: 'bs', - 0x0408: 'el', - 0x0446: 'pa', - 0x0449: 'ta', - 0x047E: 'br', - 0x046F: 'kl', - 0x046B: 'qu-BO', - 0x0444: 'tt', - 0x0402: 'bg', - 0x0447: 'gu', - 0x086B: 'qu-EC', - 0x044A: 'te', - 0x0403: 'ca', - 0x0468: 'ha', - 0x0C6B: 'qu', - 0x041E: 'th', - 0x0C04: 'zh-HK', - 0x040D: 'he', - 0x0418: 'ro', - 0x0451: 'bo', - 0x1404: 'zh-MO', - 0x0439: 'hi', - 0x0417: 'rm', - 0x041F: 'tr', - 0x0804: 'zh', - 0x040E: 'hu', - 0x0419: 'ru', - 0x0442: 'tk', - 0x1004: 'zh-SG', - 0x040F: 'is', - 0x243B: 'smn', - 0x0480: 'ug', - 0x0404: 'zh-TW', - 0x0470: 'ig', - 0x103B: 'smj-NO', - 0x0422: 'uk', - 0x0483: 'co', - 0x0421: 'id', - 0x143B: 'smj', - 0x042E: 'hsb', - 0x041A: 'hr', - 0x045D: 'iu', - 0x0C3B: 'se-FI', - 0x0420: 'ur', - 0x101A: 'hr-BA', - 0x085D: 'iu-Latn', - 0x043B: 'se', - 0x0843: 'uz-Cyrl', - 0x0405: 'cs', - 0x083C: 'ga', - 0x083B: 'se-SE', - 0x0443: 'uz', - 0x0406: 'da', - 0x0434: 'xh', - 0x203B: 'sms', - 0x042A: 'vi', - 0x048C: 'prs', - 0x0435: 'zu', - 0x183B: 'sma-NO', - 0x0452: 'cy', - 0x0465: 'dv', - 0x0410: 'it', - 0x1C3B: 'sms', - 0x0488: 'wo', - 0x0813: 'nl-BE', - 0x0810: 'it-CH', - 0x044F: 'sa', - 0x0485: 'sah', - 0x0413: 'nl', - 0x0411: 'ja', - 0x1C1A: 'sr-Cyrl-BA', - 0x0478: 'ii', - 0x0C09: 'en-AU', - 0x044B: 'kn', - 0x0C1A: 'sr', - 0x046A: 'yo', - 0x2809: 'en-BZ', - 0x043F: 'kk', - 0x181A: 'sr-Latn-BA', - 0x1009: 'en-CA', - 0x0453: 'km', - 0x081A: 'sr-Latn', - 0x2409: 'en-029', - 0x0486: 'quc', - 0x046C: 'nso' - } -]; - - -let $51a9f4feb3a3b2b1$var$NameRecord = new $gfJaN$restructure.Struct({ - platformID: $gfJaN$restructure.uint16, - encodingID: $gfJaN$restructure.uint16, - languageID: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16, - length: $gfJaN$restructure.uint16, - string: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.String('length', (t)=>(0, $e2613b812f052cbe$export$badc544e0651b6b1)(t.platformID, t.encodingID, t.languageID)), { - type: 'parent', - relativeTo: (ctx)=>ctx.parent.stringOffset, - allowNull: false - }) -}); -let $51a9f4feb3a3b2b1$var$LangTagRecord = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - tag: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.String('length', 'utf16be'), { - type: 'parent', - relativeTo: (ctx)=>ctx.stringOffset - }) -}); -var $51a9f4feb3a3b2b1$var$NameTable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - count: $gfJaN$restructure.uint16, - stringOffset: $gfJaN$restructure.uint16, - records: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count') - }, - 1: { - count: $gfJaN$restructure.uint16, - stringOffset: $gfJaN$restructure.uint16, - records: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$NameRecord, 'count'), - langTagCount: $gfJaN$restructure.uint16, - langTags: new $gfJaN$restructure.Array($51a9f4feb3a3b2b1$var$LangTagRecord, 'langTagCount') - } -}); -var $51a9f4feb3a3b2b1$export$2e2bcd8739ae039 = $51a9f4feb3a3b2b1$var$NameTable; -const $51a9f4feb3a3b2b1$var$NAMES = [ - 'copyright', - 'fontFamily', - 'fontSubfamily', - 'uniqueSubfamily', - 'fullName', - 'version', - 'postscriptName', - 'trademark', - 'manufacturer', - 'designer', - 'description', - 'vendorURL', - 'designerURL', - 'license', - 'licenseURL', - null, - 'preferredFamily', - 'preferredSubfamily', - 'compatibleFull', - 'sampleText', - 'postscriptCIDFontName', - 'wwsFamilyName', - 'wwsSubfamilyName' -]; -$51a9f4feb3a3b2b1$var$NameTable.process = function(stream) { - var records = {}; - for (let record of this.records){ - // find out what language this is for - let language = (0, $e2613b812f052cbe$export$2092376fd002e13)[record.platformID][record.languageID]; - if (language == null && this.langTags != null && record.languageID >= 0x8000) language = this.langTags[record.languageID - 0x8000].tag; - if (language == null) language = record.platformID + '-' + record.languageID; - // if the nameID is >= 256, it is a font feature record (AAT) - let key = record.nameID >= 256 ? 'fontFeatures' : $51a9f4feb3a3b2b1$var$NAMES[record.nameID] || record.nameID; - if (records[key] == null) records[key] = {}; - let obj = records[key]; - if (record.nameID >= 256) obj = obj[record.nameID] || (obj[record.nameID] = {}); - if (typeof record.string === 'string' || typeof obj[language] !== 'string') obj[language] = record.string; - } - this.records = records; -}; -$51a9f4feb3a3b2b1$var$NameTable.preEncode = function() { - if (Array.isArray(this.records)) return; - this.version = 0; - let records = []; - for(let key in this.records){ - let val = this.records[key]; - if (key === 'fontFeatures') continue; - records.push({ - platformID: 3, - encodingID: 1, - languageID: 0x409, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length * 2, - string: val.en - }); - if (key === 'postscriptName') records.push({ - platformID: 1, - encodingID: 0, - languageID: 0, - nameID: $51a9f4feb3a3b2b1$var$NAMES.indexOf(key), - length: val.en.length, - string: val.en - }); - } - this.records = records; - this.count = records.length; - this.stringOffset = $51a9f4feb3a3b2b1$var$NameTable.size(this, null, false); -}; - - - -var $114ea85db469b435$var$OS2 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - xAvgCharWidth: $gfJaN$restructure.int16, - usWeightClass: $gfJaN$restructure.uint16, - usWidthClass: $gfJaN$restructure.uint16, - fsType: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - null, - 'noEmbedding', - 'viewOnly', - 'editable', - null, - null, - null, - null, - 'noSubsetting', - 'bitmapOnly' - ]), - ySubscriptXSize: $gfJaN$restructure.int16, - ySubscriptYSize: $gfJaN$restructure.int16, - ySubscriptXOffset: $gfJaN$restructure.int16, - ySubscriptYOffset: $gfJaN$restructure.int16, - ySuperscriptXSize: $gfJaN$restructure.int16, - ySuperscriptYSize: $gfJaN$restructure.int16, - ySuperscriptXOffset: $gfJaN$restructure.int16, - ySuperscriptYOffset: $gfJaN$restructure.int16, - yStrikeoutSize: $gfJaN$restructure.int16, - yStrikeoutPosition: $gfJaN$restructure.int16, - sFamilyClass: $gfJaN$restructure.int16, - panose: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 10), - ulCharRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 4), - vendorID: new $gfJaN$restructure.String(4), - fsSelection: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'italic', - 'underscore', - 'negative', - 'outlined', - 'strikeout', - 'bold', - 'regular', - 'useTypoMetrics', - 'wws', - 'oblique' - ]), - usFirstCharIndex: $gfJaN$restructure.uint16, - usLastCharIndex: $gfJaN$restructure.uint16 // The maximum Unicode index in this font - }, - // The Apple version of this table ends here, but the Microsoft one continues on... - 0: {}, - 1: { - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2) - }, - 2: { - // these should be common with version 1 somehow - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2), - xHeight: $gfJaN$restructure.int16, - capHeight: $gfJaN$restructure.int16, - defaultChar: $gfJaN$restructure.uint16, - breakChar: $gfJaN$restructure.uint16, - maxContent: $gfJaN$restructure.uint16 - }, - 5: { - typoAscender: $gfJaN$restructure.int16, - typoDescender: $gfJaN$restructure.int16, - typoLineGap: $gfJaN$restructure.int16, - winAscent: $gfJaN$restructure.uint16, - winDescent: $gfJaN$restructure.uint16, - codePageRange: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 2), - xHeight: $gfJaN$restructure.int16, - capHeight: $gfJaN$restructure.int16, - defaultChar: $gfJaN$restructure.uint16, - breakChar: $gfJaN$restructure.uint16, - maxContent: $gfJaN$restructure.uint16, - usLowerOpticalPointSize: $gfJaN$restructure.uint16, - usUpperOpticalPointSize: $gfJaN$restructure.uint16 - } -}); -let $114ea85db469b435$var$versions = $114ea85db469b435$var$OS2.versions; -$114ea85db469b435$var$versions[3] = $114ea85db469b435$var$versions[4] = $114ea85db469b435$var$versions[2]; -var $114ea85db469b435$export$2e2bcd8739ae039 = $114ea85db469b435$var$OS2; - - - -var // PostScript information -$f93b30299e1ea0f5$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.fixed32, { - header: { - italicAngle: $gfJaN$restructure.fixed32, - underlinePosition: $gfJaN$restructure.int16, - underlineThickness: $gfJaN$restructure.int16, - isFixedPitch: $gfJaN$restructure.uint32, - minMemType42: $gfJaN$restructure.uint32, - maxMemType42: $gfJaN$restructure.uint32, - minMemType1: $gfJaN$restructure.uint32, - maxMemType1: $gfJaN$restructure.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font - }, - 1: {}, - 2: { - numberOfGlyphs: $gfJaN$restructure.uint16, - glyphNameIndex: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numberOfGlyphs'), - names: new $gfJaN$restructure.Array(new $gfJaN$restructure.String($gfJaN$restructure.uint8)) - }, - 2.5: { - numberOfGlyphs: $gfJaN$restructure.uint16, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'numberOfGlyphs') - }, - 3: {}, - 4: { - map: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, (t)=>t.parent.maxp.numGlyphs) - } -}); - - - -var // An array of predefined values accessible by instructions -$8fb09b0f473d61a0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - controlValues: new $gfJaN$restructure.Array($gfJaN$restructure.int16) -}); - - - -var // A list of instructions that are executed once when a font is first used. -// These instructions are known as the font program. The main use of this table -// is for the definition of functions that are used in many different glyph programs. -$873d79fea57d3161$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - instructions: new $gfJaN$restructure.Array($gfJaN$restructure.uint8) -}); - - - -let $83c4155666d50c37$var$loca = new $gfJaN$restructure.VersionedStruct('head.indexToLocFormat', { - 0: { - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16) - }, - 1: { - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32) - } -}); -$83c4155666d50c37$var$loca.process = function() { - if (this.version === 0 && !this._processed) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] <<= 1; - this._processed = true; - } -}; -$83c4155666d50c37$var$loca.preEncode = function() { - if (this.version === 0 && this._processed !== false) { - for(let i = 0; i < this.offsets.length; i++)this.offsets[i] >>>= 1; - this._processed = false; - } -}; -var $83c4155666d50c37$export$2e2bcd8739ae039 = $83c4155666d50c37$var$loca; - - - -var // Set of instructions executed whenever the point size or font transformation change -$b12598db7cdf7042$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - controlValueProgram: new $gfJaN$restructure.Array($gfJaN$restructure.uint8) -}); - - - -var // only used for encoding -$7707bdf21a3d89cc$export$2e2bcd8739ae039 = new $gfJaN$restructure.Array(new $gfJaN$restructure.Buffer); - - - - -class $9eaea3754914a290$export$2e2bcd8739ae039 { - getCFFVersion(ctx) { - while(ctx && !ctx.hdrSize)ctx = ctx.parent; - return ctx ? ctx.version : -1; - } - decode(stream, parent) { - let version = this.getCFFVersion(parent); - let count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); - if (count === 0) return []; - let offSize = stream.readUInt8(); - let offsetType; - if (offSize === 1) offsetType = $gfJaN$restructure.uint8; - else if (offSize === 2) offsetType = $gfJaN$restructure.uint16; - else if (offSize === 3) offsetType = $gfJaN$restructure.uint24; - else if (offSize === 4) offsetType = $gfJaN$restructure.uint32; - else throw new Error(`Bad offset size in CFFIndex: ${offSize} ${stream.pos}`); - let ret = []; - let startPos = stream.pos + (count + 1) * offSize - 1; - let start = offsetType.decode(stream); - for(let i = 0; i < count; i++){ - let end = offsetType.decode(stream); - if (this.type != null) { - let pos = stream.pos; - stream.pos = startPos + start; - parent.length = end - start; - ret.push(this.type.decode(stream, parent)); - stream.pos = pos; - } else ret.push({ - offset: startPos + start, - length: end - start - }); - start = end; - } - stream.pos = startPos + start; - return ret; - } - size(arr, parent) { - let size = 2; - if (arr.length === 0) return size; - let type = this.type || new $gfJaN$restructure.Buffer; - // find maximum offset to detminine offset type - let offset = 1; - for(let i = 0; i < arr.length; i++){ - let item = arr[i]; - offset += type.size(item, parent); - } - let offsetType; - if (offset <= 0xff) offsetType = $gfJaN$restructure.uint8; - else if (offset <= 0xffff) offsetType = $gfJaN$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $gfJaN$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $gfJaN$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - size += 1 + offsetType.size() * (arr.length + 1); - size += offset - 1; - return size; - } - encode(stream, arr, parent) { - stream.writeUInt16BE(arr.length); - if (arr.length === 0) return; - let type = this.type || new $gfJaN$restructure.Buffer; - // find maximum offset to detminine offset type - let sizes = []; - let offset = 1; - for (let item of arr){ - let s = type.size(item, parent); - sizes.push(s); - offset += s; - } - let offsetType; - if (offset <= 0xff) offsetType = $gfJaN$restructure.uint8; - else if (offset <= 0xffff) offsetType = $gfJaN$restructure.uint16; - else if (offset <= 0xffffff) offsetType = $gfJaN$restructure.uint24; - else if (offset <= 0xffffffff) offsetType = $gfJaN$restructure.uint32; - else throw new Error("Bad offset in CFFIndex"); - // write offset size - stream.writeUInt8(offsetType.size()); - // write elements - offset = 1; - offsetType.encode(stream, offset); - for (let size of sizes){ - offset += size; - offsetType.encode(stream, offset); - } - for (let item of arr)type.encode(stream, item, parent); - return; - } - constructor(type){ - this.type = type; - } -} - - - - - -const $f77b592c17132d70$var$FLOAT_EOF = 0xf; -const $f77b592c17132d70$var$FLOAT_LOOKUP = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '.', - 'E', - 'E-', - null, - '-' -]; -const $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP = { - '.': 10, - 'E': 11, - 'E-': 12, - '-': 14 -}; -class $f77b592c17132d70$export$2e2bcd8739ae039 { - static decode(stream, value) { - if (32 <= value && value <= 246) return value - 139; - if (247 <= value && value <= 250) return (value - 247) * 256 + stream.readUInt8() + 108; - if (251 <= value && value <= 254) return -(value - 251) * 256 - stream.readUInt8() - 108; - if (value === 28) return stream.readInt16BE(); - if (value === 29) return stream.readInt32BE(); - if (value === 30) { - let str = ''; - while(true){ - let b = stream.readUInt8(); - let n1 = b >> 4; - if (n1 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n1]; - let n2 = b & 15; - if (n2 === $f77b592c17132d70$var$FLOAT_EOF) break; - str += $f77b592c17132d70$var$FLOAT_LOOKUP[n2]; - } - return parseFloat(str); - } - return null; - } - static size(value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, set to 32768 - if (value.forceLarge) value = 32768; - if ((value | 0) !== value) { - let str = '' + value; - return 1 + Math.ceil((str.length + 1) / 2); - } else if (-107 <= value && value <= 107) return 1; - else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) return 2; - else if (-32768 <= value && value <= 32767) return 3; - else return 5; - } - static encode(stream, value) { - // if the value needs to be forced to the largest size (32 bit) - // e.g. for unknown pointers, save the old value and set to 32768 - let val = Number(value); - if (value.forceLarge) { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } else if ((val | 0) !== val) { - stream.writeUInt8(30); - let str = '' + val; - for(let i = 0; i < str.length; i += 2){ - let c1 = str[i]; - let n1 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c1] || +c1; - if (i === str.length - 1) var n2 = $f77b592c17132d70$var$FLOAT_EOF; - else { - let c2 = str[i + 1]; - var n2 = $f77b592c17132d70$var$FLOAT_ENCODE_LOOKUP[c2] || +c2; - } - stream.writeUInt8(n1 << 4 | n2 & 15); - } - if (n2 !== $f77b592c17132d70$var$FLOAT_EOF) return stream.writeUInt8($f77b592c17132d70$var$FLOAT_EOF << 4); - } else if (-107 <= val && val <= 107) return stream.writeUInt8(val + 139); - else if (108 <= val && val <= 1131) { - val -= 108; - stream.writeUInt8((val >> 8) + 247); - return stream.writeUInt8(val & 0xff); - } else if (-1131 <= val && val <= -108) { - val = -val - 108; - stream.writeUInt8((val >> 8) + 251); - return stream.writeUInt8(val & 0xff); - } else if (-32768 <= val && val <= 32767) { - stream.writeUInt8(28); - return stream.writeInt16BE(val); - } else { - stream.writeUInt8(29); - return stream.writeInt32BE(val); - } - } -} - - -class $efe622f40a9c35bd$export$2e2bcd8739ae039 { - decodeOperands(type, stream, ret, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.decodeOperands(type[i], stream, ret, [ - op - ])); - else if (type.decode != null) return type.decode(stream, ret, operands); - else switch(type){ - case 'number': - case 'offset': - case 'sid': - return operands[0]; - case 'boolean': - return !!operands[0]; - default: - return operands; - } - } - encodeOperands(type, stream, ctx, operands) { - if (Array.isArray(type)) return operands.map((op, i)=>this.encodeOperands(type[i], stream, ctx, op)[0]); - else if (type.encode != null) return type.encode(stream, operands, ctx); - else if (typeof operands === 'number') return [ - operands - ]; - else if (typeof operands === 'boolean') return [ - +operands - ]; - else if (Array.isArray(operands)) return operands; - else return [ - operands - ]; - } - decode(stream, parent) { - let end = stream.pos + parent.length; - let ret = {}; - let operands = []; - // define hidden properties - Object.defineProperties(ret, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - } - }); - // fill in defaults - for(let key in this.fields){ - let field = this.fields[key]; - ret[field[1]] = field[3]; - } - while(stream.pos < end){ - let b = stream.readUInt8(); - if (b < 28) { - if (b === 12) b = b << 8 | stream.readUInt8(); - let field = this.fields[b]; - if (!field) throw new Error(`Unknown operator ${b}`); - let val = this.decodeOperands(field[2], stream, ret, operands); - if (val != null) { - if (val instanceof (0, $gfJaN$restructure.PropertyDescriptor)) Object.defineProperty(ret, field[1], val); - else ret[field[1]] = val; - } - operands = []; - } else operands.push((0, $f77b592c17132d70$export$2e2bcd8739ae039).decode(stream, b)); - } - return ret; - } - size(dict, parent, includePointers = true) { - let ctx = { - parent: parent, - val: dict, - pointerSize: 0, - startOffset: parent.startOffset || 0 - }; - let len = 0; - for(let k in this.fields){ - let field = this.fields[k]; - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($gfJaN$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], null, ctx, val); - for (let op of operands)len += (0, $f77b592c17132d70$export$2e2bcd8739ae039).size(op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - len += key.length; - } - if (includePointers) len += ctx.pointerSize; - return len; - } - encode(stream, dict, parent) { - let ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: dict, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); - for (let field of this.ops){ - let val = dict[field[1]]; - if (val == null || (0, ($parcel$interopDefault($gfJaN$fastdeepequal)))(val, field[3])) continue; - let operands = this.encodeOperands(field[2], stream, ctx, val); - for (let op of operands)(0, $f77b592c17132d70$export$2e2bcd8739ae039).encode(stream, op); - let key = Array.isArray(field[0]) ? field[0] : [ - field[0] - ]; - for (let op of key)stream.writeUInt8(op); - } - let i = 0; - while(i < ctx.pointers.length){ - let ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - return; - } - constructor(ops = []){ - this.ops = ops; - this.fields = {}; - for (let field of ops){ - let key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; - this.fields[key] = field; - } - } -} - - - - -class $4aa1b0749c2770f8$export$2e2bcd8739ae039 extends $gfJaN$restructure.Pointer { - decode(stream, parent, operands) { - this.offsetType = { - decode: ()=>operands[0] - }; - return super.decode(stream, parent, operands); - } - encode(stream, value, ctx) { - if (!stream) { - // compute the size (so ctx.pointerSize is correct) - this.offsetType = { - size: ()=>0 - }; - this.size(value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(0) - ]; - } - let ptr = null; - this.offsetType = { - encode: (stream, val)=>ptr = val - }; - super.encode(stream, value, ctx); - return [ - new $4aa1b0749c2770f8$var$Ptr(ptr) - ]; - } - constructor(type, options = {}){ - if (options.type == null) options.type = 'global'; - super(null, type, options); - } -} -class $4aa1b0749c2770f8$var$Ptr { - valueOf() { - return this.val; - } - constructor(val){ - this.val = val; - this.forceLarge = true; - } -} - - - - - -class $15a0cbb3d09cf7ee$var$CFFBlendOp { - static decode(stream, parent, operands) { - let numBlends = operands.pop(); - // TODO: actually blend. For now just consume the deltas - // since we don't use any of the values anyway. - while(operands.length > numBlends)operands.pop(); - } -} -var $15a0cbb3d09cf7ee$export$2e2bcd8739ae039 = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type default - [ - 6, - 'BlueValues', - 'delta', - null - ], - [ - 7, - 'OtherBlues', - 'delta', - null - ], - [ - 8, - 'FamilyBlues', - 'delta', - null - ], - [ - 9, - 'FamilyOtherBlues', - 'delta', - null - ], - [ - [ - 12, - 9 - ], - 'BlueScale', - 'number', - 0.039625 - ], - [ - [ - 12, - 10 - ], - 'BlueShift', - 'number', - 7 - ], - [ - [ - 12, - 11 - ], - 'BlueFuzz', - 'number', - 1 - ], - [ - 10, - 'StdHW', - 'number', - null - ], - [ - 11, - 'StdVW', - 'number', - null - ], - [ - [ - 12, - 12 - ], - 'StemSnapH', - 'delta', - null - ], - [ - [ - 12, - 13 - ], - 'StemSnapV', - 'delta', - null - ], - [ - [ - 12, - 14 - ], - 'ForceBold', - 'boolean', - false - ], - [ - [ - 12, - 17 - ], - 'LanguageGroup', - 'number', - 0 - ], - [ - [ - 12, - 18 - ], - 'ExpansionFactor', - 'number', - 0.06 - ], - [ - [ - 12, - 19 - ], - 'initialRandomSeed', - 'number', - 0 - ], - [ - 20, - 'defaultWidthX', - 'number', - 0 - ], - [ - 21, - 'nominalWidthX', - 'number', - 0 - ], - [ - 22, - 'vsindex', - 'number', - 0 - ], - [ - 23, - 'blend', - $15a0cbb3d09cf7ee$var$CFFBlendOp, - null - ], - [ - 19, - 'Subrs', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039), { - type: 'local' - }), - null - ] -]); - - -// Automatically generated from Appendix A of the CFF specification; do -// not edit. Length should be 391. -var $860d3574d7fa3a51$export$2e2bcd8739ae039 = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" -]; - - -let $c4ffe47cba1d7f36$export$dee0027060fa13bd = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - '', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - '', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - '', - 'questiondown', - '', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - '', - 'ring', - 'cedilla', - '', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'AE', - '', - 'ordfeminine', - '', - '', - '', - '', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - '', - '', - '', - '', - '', - 'ae', - '', - '', - '', - 'dotlessi', - '', - '', - 'lslash', - 'oslash', - 'oe', - 'germandbls' -]; -let $c4ffe47cba1d7f36$export$4f58f497e14a53c3 = [ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - '', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - '', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - '', - '', - 'isuperior', - '', - '', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - '', - '', - 'rsuperior', - 'ssuperior', - 'tsuperior', - '', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - '', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - '', - '', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - '', - 'Dotaccentsmall', - '', - '', - 'Macronsmall', - '', - '', - 'figuredash', - 'hypheninferior', - '', - '', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - '', - '', - '', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - '', - '', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; - - -let $1e7c7c16984e4427$export$c33b50336c234f16 = [ - '.notdef', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quoteright', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'quoteleft', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'exclamdown', - 'cent', - 'sterling', - 'fraction', - 'yen', - 'florin', - 'section', - 'currency', - 'quotesingle', - 'quotedblleft', - 'guillemotleft', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'endash', - 'dagger', - 'daggerdbl', - 'periodcentered', - 'paragraph', - 'bullet', - 'quotesinglbase', - 'quotedblbase', - 'quotedblright', - 'guillemotright', - 'ellipsis', - 'perthousand', - 'questiondown', - 'grave', - 'acute', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'dieresis', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'emdash', - 'AE', - 'ordfeminine', - 'Lslash', - 'Oslash', - 'OE', - 'ordmasculine', - 'ae', - 'dotlessi', - 'lslash', - 'oslash', - 'oe', - 'germandbls', - 'onesuperior', - 'logicalnot', - 'mu', - 'trademark', - 'Eth', - 'onehalf', - 'plusminus', - 'Thorn', - 'onequarter', - 'divide', - 'brokenbar', - 'degree', - 'thorn', - 'threequarters', - 'twosuperior', - 'registered', - 'minus', - 'eth', - 'multiply', - 'threesuperior', - 'copyright', - 'Aacute', - 'Acircumflex', - 'Adieresis', - 'Agrave', - 'Aring', - 'Atilde', - 'Ccedilla', - 'Eacute', - 'Ecircumflex', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Ntilde', - 'Oacute', - 'Ocircumflex', - 'Odieresis', - 'Ograve', - 'Otilde', - 'Scaron', - 'Uacute', - 'Ucircumflex', - 'Udieresis', - 'Ugrave', - 'Yacute', - 'Ydieresis', - 'Zcaron', - 'aacute', - 'acircumflex', - 'adieresis', - 'agrave', - 'aring', - 'atilde', - 'ccedilla', - 'eacute', - 'ecircumflex', - 'edieresis', - 'egrave', - 'iacute', - 'icircumflex', - 'idieresis', - 'igrave', - 'ntilde', - 'oacute', - 'ocircumflex', - 'odieresis', - 'ograve', - 'otilde', - 'scaron', - 'uacute', - 'ucircumflex', - 'udieresis', - 'ugrave', - 'yacute', - 'ydieresis', - 'zcaron' -]; -let $1e7c7c16984e4427$export$3ed0f9e1fee8d489 = [ - '.notdef', - 'space', - 'exclamsmall', - 'Hungarumlautsmall', - 'dollaroldstyle', - 'dollarsuperior', - 'ampersandsmall', - 'Acutesmall', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'questionsmall', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'Circumflexsmall', - 'hyphensuperior', - 'Gravesmall', - 'Asmall', - 'Bsmall', - 'Csmall', - 'Dsmall', - 'Esmall', - 'Fsmall', - 'Gsmall', - 'Hsmall', - 'Ismall', - 'Jsmall', - 'Ksmall', - 'Lsmall', - 'Msmall', - 'Nsmall', - 'Osmall', - 'Psmall', - 'Qsmall', - 'Rsmall', - 'Ssmall', - 'Tsmall', - 'Usmall', - 'Vsmall', - 'Wsmall', - 'Xsmall', - 'Ysmall', - 'Zsmall', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'Tildesmall', - 'exclamdownsmall', - 'centoldstyle', - 'Lslashsmall', - 'Scaronsmall', - 'Zcaronsmall', - 'Dieresissmall', - 'Brevesmall', - 'Caronsmall', - 'Dotaccentsmall', - 'Macronsmall', - 'figuredash', - 'hypheninferior', - 'Ogoneksmall', - 'Ringsmall', - 'Cedillasmall', - 'onequarter', - 'onehalf', - 'threequarters', - 'questiondownsmall', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior', - 'Agravesmall', - 'Aacutesmall', - 'Acircumflexsmall', - 'Atildesmall', - 'Adieresissmall', - 'Aringsmall', - 'AEsmall', - 'Ccedillasmall', - 'Egravesmall', - 'Eacutesmall', - 'Ecircumflexsmall', - 'Edieresissmall', - 'Igravesmall', - 'Iacutesmall', - 'Icircumflexsmall', - 'Idieresissmall', - 'Ethsmall', - 'Ntildesmall', - 'Ogravesmall', - 'Oacutesmall', - 'Ocircumflexsmall', - 'Otildesmall', - 'Odieresissmall', - 'OEsmall', - 'Oslashsmall', - 'Ugravesmall', - 'Uacutesmall', - 'Ucircumflexsmall', - 'Udieresissmall', - 'Yacutesmall', - 'Thornsmall', - 'Ydieresissmall' -]; -let $1e7c7c16984e4427$export$dc28be11139d4120 = [ - '.notdef', - 'space', - 'dollaroldstyle', - 'dollarsuperior', - 'parenleftsuperior', - 'parenrightsuperior', - 'twodotenleader', - 'onedotenleader', - 'comma', - 'hyphen', - 'period', - 'fraction', - 'zerooldstyle', - 'oneoldstyle', - 'twooldstyle', - 'threeoldstyle', - 'fouroldstyle', - 'fiveoldstyle', - 'sixoldstyle', - 'sevenoldstyle', - 'eightoldstyle', - 'nineoldstyle', - 'colon', - 'semicolon', - 'commasuperior', - 'threequartersemdash', - 'periodsuperior', - 'asuperior', - 'bsuperior', - 'centsuperior', - 'dsuperior', - 'esuperior', - 'isuperior', - 'lsuperior', - 'msuperior', - 'nsuperior', - 'osuperior', - 'rsuperior', - 'ssuperior', - 'tsuperior', - 'ff', - 'fi', - 'fl', - 'ffi', - 'ffl', - 'parenleftinferior', - 'parenrightinferior', - 'hyphensuperior', - 'colonmonetary', - 'onefitted', - 'rupiah', - 'centoldstyle', - 'figuredash', - 'hypheninferior', - 'onequarter', - 'onehalf', - 'threequarters', - 'oneeighth', - 'threeeighths', - 'fiveeighths', - 'seveneighths', - 'onethird', - 'twothirds', - 'zerosuperior', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'foursuperior', - 'fivesuperior', - 'sixsuperior', - 'sevensuperior', - 'eightsuperior', - 'ninesuperior', - 'zeroinferior', - 'oneinferior', - 'twoinferior', - 'threeinferior', - 'fourinferior', - 'fiveinferior', - 'sixinferior', - 'seveninferior', - 'eightinferior', - 'nineinferior', - 'centinferior', - 'dollarinferior', - 'periodinferior', - 'commainferior' -]; - - - -//######################## -// Scripts and Languages # -//######################## -let $b6dd765146ad212a$var$LangSysTable = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - reqFeatureIndex: $gfJaN$restructure.uint16, - featureCount: $gfJaN$restructure.uint16, - featureIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'featureCount') -}); -let $b6dd765146ad212a$var$LangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - langSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$LangSysTable, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$var$Script = new $gfJaN$restructure.Struct({ - defaultLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$LangSysTable), - count: $gfJaN$restructure.uint16, - langSysRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LangSysRecord, 'count') -}); -let $b6dd765146ad212a$var$ScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$Script, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$3e15fc05ce864229 = new $gfJaN$restructure.Array($b6dd765146ad212a$var$ScriptRecord, $gfJaN$restructure.uint16); -//####################### -// Features and Lookups # -//####################### -let $b6dd765146ad212a$var$FeatureParams = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$6e91cf7616333d5 = new $gfJaN$restructure.Struct({ - featureParams: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$FeatureParams), - lookupCount: $gfJaN$restructure.uint16, - lookupListIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'lookupCount') -}); -let $b6dd765146ad212a$var$FeatureRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - feature: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$6e91cf7616333d5, { - type: 'parent' - }) -}); -let $b6dd765146ad212a$export$aa18130def4b6cb4 = new $gfJaN$restructure.Array($b6dd765146ad212a$var$FeatureRecord, $gfJaN$restructure.uint16); -let $b6dd765146ad212a$var$LookupFlags = new $gfJaN$restructure.Struct({ - markAttachmentType: $gfJaN$restructure.uint8, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'rightToLeft', - 'ignoreBaseGlyphs', - 'ignoreLigatures', - 'ignoreMarks', - 'useMarkFilteringSet' - ]) -}); -function $b6dd765146ad212a$export$df0008c6ff2da22a(SubTable) { - let Lookup = new $gfJaN$restructure.Struct({ - lookupType: $gfJaN$restructure.uint16, - flags: $b6dd765146ad212a$var$LookupFlags, - subTableCount: $gfJaN$restructure.uint16, - subTables: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, SubTable), 'subTableCount'), - markFilteringSet: new $gfJaN$restructure.Optional($gfJaN$restructure.uint16, (t)=>t.flags.flags.useMarkFilteringSet) - }); - return new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, Lookup), $gfJaN$restructure.uint16); -} -//################# -// Coverage Table # -//################# -let $b6dd765146ad212a$var$RangeRecord = new $gfJaN$restructure.Struct({ - start: $gfJaN$restructure.uint16, - end: $gfJaN$restructure.uint16, - startCoverageIndex: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$17608c3f81a6111 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - glyphCount: $gfJaN$restructure.uint16, - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - }, - 2: { - rangeCount: $gfJaN$restructure.uint16, - rangeRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$RangeRecord, 'rangeCount') - } -}); -//######################### -// Class Definition Table # -//######################### -let $b6dd765146ad212a$var$ClassRangeRecord = new $gfJaN$restructure.Struct({ - start: $gfJaN$restructure.uint16, - end: $gfJaN$restructure.uint16, - class: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$export$843d551fbbafef71 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - startGlyph: $gfJaN$restructure.uint16, - glyphCount: $gfJaN$restructure.uint16, - classValueArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - }, - 2: { - classRangeCount: $gfJaN$restructure.uint16, - classRangeRecord: new $gfJaN$restructure.Array($b6dd765146ad212a$var$ClassRangeRecord, 'classRangeCount') - } -}); -let $b6dd765146ad212a$export$8215d14a63d9fb10 = new $gfJaN$restructure.Struct({ - a: $gfJaN$restructure.uint16, - b: $gfJaN$restructure.uint16, - deltaFormat: $gfJaN$restructure.uint16 -}); -//############################################# -// Contextual Substitution/Positioning Tables # -//############################################# -let $b6dd765146ad212a$var$LookupRecord = new $gfJaN$restructure.Struct({ - sequenceIndex: $gfJaN$restructure.uint16, - lookupListIndex: $gfJaN$restructure.uint16 -}); -let $b6dd765146ad212a$var$Rule = new $gfJaN$restructure.Struct({ - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - input: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$RuleSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$Rule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$var$ClassRule = new $gfJaN$restructure.Struct({ - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - classes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.glyphCount - 1), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ClassSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ClassRule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$export$841858b892ce1f4c = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - ruleSetCount: $gfJaN$restructure.uint16, - ruleSets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$RuleSet), 'ruleSetCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - classDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - classSetCnt: $gfJaN$restructure.uint16, - classSet: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ClassSet), 'classSetCnt') - }, - 3: { - glyphCount: $gfJaN$restructure.uint16, - lookupCount: $gfJaN$restructure.uint16, - coverages: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'glyphCount'), - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); -//###################################################### -// Chaining Contextual Substitution/Positioning Tables # -//###################################################### -let $b6dd765146ad212a$var$ChainRule = new $gfJaN$restructure.Struct({ - backtrackGlyphCount: $gfJaN$restructure.uint16, - backtrack: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'backtrackGlyphCount'), - inputGlyphCount: $gfJaN$restructure.uint16, - input: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.inputGlyphCount - 1), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookahead: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'lookaheadGlyphCount'), - lookupCount: $gfJaN$restructure.uint16, - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') -}); -let $b6dd765146ad212a$var$ChainRuleSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRule), $gfJaN$restructure.uint16); -let $b6dd765146ad212a$export$5e6d09e6861162f6 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - chainCount: $gfJaN$restructure.uint16, - chainRuleSets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), - backtrackClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - inputClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - lookaheadClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$843d551fbbafef71), - chainCount: $gfJaN$restructure.uint16, - chainClassSet: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$var$ChainRuleSet), 'chainCount') - }, - 3: { - backtrackGlyphCount: $gfJaN$restructure.uint16, - backtrackCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'backtrackGlyphCount'), - inputGlyphCount: $gfJaN$restructure.uint16, - inputCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'inputGlyphCount'), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookaheadCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b6dd765146ad212a$export$17608c3f81a6111), 'lookaheadGlyphCount'), - lookupCount: $gfJaN$restructure.uint16, - lookupRecords: new $gfJaN$restructure.Array($b6dd765146ad212a$var$LookupRecord, 'lookupCount') - } -}); - - - -/******************* - * Variation Store * - *******************/ let $2e4adcda047b3383$var$F2DOT14 = new $gfJaN$restructure.Fixed(16, 'BE', 14); -let $2e4adcda047b3383$var$RegionAxisCoordinates = new $gfJaN$restructure.Struct({ - startCoord: $2e4adcda047b3383$var$F2DOT14, - peakCoord: $2e4adcda047b3383$var$F2DOT14, - endCoord: $2e4adcda047b3383$var$F2DOT14 -}); -let $2e4adcda047b3383$var$VariationRegionList = new $gfJaN$restructure.Struct({ - axisCount: $gfJaN$restructure.uint16, - regionCount: $gfJaN$restructure.uint16, - variationRegions: new $gfJaN$restructure.Array(new $gfJaN$restructure.Array($2e4adcda047b3383$var$RegionAxisCoordinates, 'axisCount'), 'regionCount') -}); -let $2e4adcda047b3383$var$DeltaSet = new $gfJaN$restructure.Struct({ - shortDeltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, (t)=>t.parent.shortDeltaCount), - regionDeltas: new $gfJaN$restructure.Array($gfJaN$restructure.int8, (t)=>t.parent.regionIndexCount - t.parent.shortDeltaCount), - deltas: (t)=>t.shortDeltas.concat(t.regionDeltas) -}); -let $2e4adcda047b3383$var$ItemVariationData = new $gfJaN$restructure.Struct({ - itemCount: $gfJaN$restructure.uint16, - shortDeltaCount: $gfJaN$restructure.uint16, - regionIndexCount: $gfJaN$restructure.uint16, - regionIndexes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'regionIndexCount'), - deltaSets: new $gfJaN$restructure.Array($2e4adcda047b3383$var$DeltaSet, 'itemCount') -}); -let $2e4adcda047b3383$export$fe1b122a2710f241 = new $gfJaN$restructure.Struct({ - format: $gfJaN$restructure.uint16, - variationRegionList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$VariationRegionList), - variationDataCount: $gfJaN$restructure.uint16, - itemVariationData: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ItemVariationData), 'variationDataCount') -}); -/********************** - * Feature Variations * - **********************/ let $2e4adcda047b3383$var$ConditionTable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - axisIndex: $gfJaN$restructure.uint16, - axisIndex: $gfJaN$restructure.uint16, - filterRangeMinValue: $2e4adcda047b3383$var$F2DOT14, - filterRangeMaxValue: $2e4adcda047b3383$var$F2DOT14 - } -}); -let $2e4adcda047b3383$var$ConditionSet = new $gfJaN$restructure.Struct({ - conditionCount: $gfJaN$restructure.uint16, - conditionTable: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ConditionTable), 'conditionCount') -}); -let $2e4adcda047b3383$var$FeatureTableSubstitutionRecord = new $gfJaN$restructure.Struct({ - featureIndex: $gfJaN$restructure.uint16, - alternateFeatureTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $b6dd765146ad212a$export$6e91cf7616333d5), { - type: 'parent' - }) -}); -let $2e4adcda047b3383$var$FeatureTableSubstitution = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - substitutionCount: $gfJaN$restructure.uint16, - substitutions: new $gfJaN$restructure.Array($2e4adcda047b3383$var$FeatureTableSubstitutionRecord, 'substitutionCount') -}); -let $2e4adcda047b3383$var$FeatureVariationRecord = new $gfJaN$restructure.Struct({ - conditionSet: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$ConditionSet, { - type: 'parent' - }), - featureTableSubstitution: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $2e4adcda047b3383$var$FeatureTableSubstitution, { - type: 'parent' - }) -}); -let $2e4adcda047b3383$export$441b70b7971dd419 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - featureVariationRecordCount: $gfJaN$restructure.uint32, - featureVariationRecords: new $gfJaN$restructure.Array($2e4adcda047b3383$var$FeatureVariationRecord, 'featureVariationRecordCount') -}); - - -// Checks if an operand is an index of a predefined value, -// otherwise delegates to the provided type. -class $5b547cf9e5da519b$var$PredefinedOp { - decode(stream, parent, operands) { - if (this.predefinedOps[operands[0]]) return this.predefinedOps[operands[0]]; - return this.type.decode(stream, parent, operands); - } - size(value, ctx) { - return this.type.size(value, ctx); - } - encode(stream, value, ctx) { - let index = this.predefinedOps.indexOf(value); - if (index !== -1) return index; - return this.type.encode(stream, value, ctx); - } - constructor(predefinedOps, type){ - this.predefinedOps = predefinedOps; - this.type = type; - } -} -class $5b547cf9e5da519b$var$CFFEncodingVersion extends $gfJaN$restructure.Number { - decode(stream) { - return $gfJaN$restructure.uint8.decode(stream) & 0x7f; - } - constructor(){ - super('UInt8'); - } -} -let $5b547cf9e5da519b$var$Range1 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - nLeft: $gfJaN$restructure.uint8 -}); -let $5b547cf9e5da519b$var$Range2 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - nLeft: $gfJaN$restructure.uint16 -}); -let $5b547cf9e5da519b$var$CFFCustomEncoding = new $gfJaN$restructure.VersionedStruct(new $5b547cf9e5da519b$var$CFFEncodingVersion(), { - 0: { - nCodes: $gfJaN$restructure.uint8, - codes: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'nCodes') - }, - 1: { - nRanges: $gfJaN$restructure.uint8, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$Range1, 'nRanges') - } -}); -let $5b547cf9e5da519b$var$CFFEncoding = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd), - (0, $c4ffe47cba1d7f36$export$4f58f497e14a53c3) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomEncoding, { - lazy: true -})); -// Decodes an array of ranges until the total -// length is equal to the provided length. -class $5b547cf9e5da519b$var$RangeArray extends $gfJaN$restructure.Array { - decode(stream, parent) { - let length = (0, $gfJaN$restructure.resolveLength)(this.length, stream, parent); - let count = 0; - let res = []; - while(count < length){ - let range = this.type.decode(stream, parent); - range.offset = count; - count += range.nLeft + 1; - res.push(range); - } - return res; - } -} -let $5b547cf9e5da519b$var$CFFCustomCharset = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint8, { - 0: { - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.parent.CharStrings.length - 1) - }, - 1: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range1, (t)=>t.parent.CharStrings.length - 1) - }, - 2: { - ranges: new $5b547cf9e5da519b$var$RangeArray($5b547cf9e5da519b$var$Range2, (t)=>t.parent.CharStrings.length - 1) - } -}); -let $5b547cf9e5da519b$var$CFFCharset = new $5b547cf9e5da519b$var$PredefinedOp([ - (0, $1e7c7c16984e4427$export$c33b50336c234f16), - (0, $1e7c7c16984e4427$export$3ed0f9e1fee8d489), - (0, $1e7c7c16984e4427$export$dc28be11139d4120) -], new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFCustomCharset, { - lazy: true -})); -let $5b547cf9e5da519b$var$FDRange3 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint16, - fd: $gfJaN$restructure.uint8 -}); -let $5b547cf9e5da519b$var$FDRange4 = new $gfJaN$restructure.Struct({ - first: $gfJaN$restructure.uint32, - fd: $gfJaN$restructure.uint16 -}); -let $5b547cf9e5da519b$var$FDSelect = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint8, { - 0: { - fds: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.parent.CharStrings.length) - }, - 3: { - nRanges: $gfJaN$restructure.uint16, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$FDRange3, 'nRanges'), - sentinel: $gfJaN$restructure.uint16 - }, - 4: { - nRanges: $gfJaN$restructure.uint32, - ranges: new $gfJaN$restructure.Array($5b547cf9e5da519b$var$FDRange4, 'nRanges'), - sentinel: $gfJaN$restructure.uint32 - } -}); -let $5b547cf9e5da519b$var$ptr = new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)((0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039)); -class $5b547cf9e5da519b$var$CFFPrivateOp { - decode(stream, parent, operands) { - parent.length = operands[0]; - return $5b547cf9e5da519b$var$ptr.decode(stream, parent, [ - operands[1] - ]); - } - size(dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.size(dict, ctx)[0] - ]; - } - encode(stream, dict, ctx) { - return [ - (0, $15a0cbb3d09cf7ee$export$2e2bcd8739ae039).size(dict, ctx, false), - $5b547cf9e5da519b$var$ptr.encode(stream, dict, ctx)[0] - ]; - } -} -let $5b547cf9e5da519b$var$FontDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ] -]); -let $5b547cf9e5da519b$var$CFFTopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - // key name type(s) default - [ - [ - 12, - 30 - ], - 'ROS', - [ - 'sid', - 'sid', - 'number' - ], - null - ], - [ - 0, - 'version', - 'sid', - null - ], - [ - 1, - 'Notice', - 'sid', - null - ], - [ - [ - 12, - 0 - ], - 'Copyright', - 'sid', - null - ], - [ - 2, - 'FullName', - 'sid', - null - ], - [ - 3, - 'FamilyName', - 'sid', - null - ], - [ - 4, - 'Weight', - 'sid', - null - ], - [ - [ - 12, - 1 - ], - 'isFixedPitch', - 'boolean', - false - ], - [ - [ - 12, - 2 - ], - 'ItalicAngle', - 'number', - 0 - ], - [ - [ - 12, - 3 - ], - 'UnderlinePosition', - 'number', - -100 - ], - [ - [ - 12, - 4 - ], - 'UnderlineThickness', - 'number', - 50 - ], - [ - [ - 12, - 5 - ], - 'PaintType', - 'number', - 0 - ], - [ - [ - 12, - 6 - ], - 'CharstringType', - 'number', - 2 - ], - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 13, - 'UniqueID', - 'number', - null - ], - [ - 5, - 'FontBBox', - 'array', - [ - 0, - 0, - 0, - 0 - ] - ], - [ - [ - 12, - 8 - ], - 'StrokeWidth', - 'number', - 0 - ], - [ - 14, - 'XUID', - 'array', - null - ], - [ - 15, - 'charset', - $5b547cf9e5da519b$var$CFFCharset, - (0, $1e7c7c16984e4427$export$c33b50336c234f16) - ], - [ - 16, - 'Encoding', - $5b547cf9e5da519b$var$CFFEncoding, - (0, $c4ffe47cba1d7f36$export$dee0027060fa13bd) - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - 18, - 'Private', - new $5b547cf9e5da519b$var$CFFPrivateOp, - null - ], - [ - [ - 12, - 20 - ], - 'SyntheticBase', - 'number', - null - ], - [ - [ - 12, - 21 - ], - 'PostScript', - 'sid', - null - ], - [ - [ - 12, - 22 - ], - 'BaseFontName', - 'sid', - null - ], - [ - [ - 12, - 23 - ], - 'BaseFontBlend', - 'delta', - null - ], - // CID font specific - [ - [ - 12, - 31 - ], - 'CIDFontVersion', - 'number', - 0 - ], - [ - [ - 12, - 32 - ], - 'CIDFontRevision', - 'number', - 0 - ], - [ - [ - 12, - 33 - ], - 'CIDFontType', - 'number', - 0 - ], - [ - [ - 12, - 34 - ], - 'CIDCount', - 'number', - 8720 - ], - [ - [ - 12, - 35 - ], - 'UIDBase', - 'number', - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - [ - 12, - 38 - ], - 'FontName', - 'sid', - null - ] -]); -let $5b547cf9e5da519b$var$VariationStore = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - itemVariationStore: (0, $2e4adcda047b3383$export$fe1b122a2710f241) -}); -let $5b547cf9e5da519b$var$CFF2TopDict = new (0, $efe622f40a9c35bd$export$2e2bcd8739ae039)([ - [ - [ - 12, - 7 - ], - 'FontMatrix', - 'array', - [ - 0.001, - 0, - 0, - 0.001, - 0, - 0 - ] - ], - [ - 17, - 'CharStrings', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)), - null - ], - [ - [ - 12, - 37 - ], - 'FDSelect', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FDSelect), - null - ], - [ - [ - 12, - 36 - ], - 'FDArray', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)(new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$FontDict)), - null - ], - [ - 24, - 'vstore', - new (0, $4aa1b0749c2770f8$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$VariationStore), - null - ], - [ - 25, - 'maxstack', - 'number', - 193 - ] -]); -let $5b547cf9e5da519b$var$CFFTop = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.fixed16, { - 1: { - hdrSize: $gfJaN$restructure.uint8, - offSize: $gfJaN$restructure.uint8, - nameIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $gfJaN$restructure.String('length')), - topDictIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)($5b547cf9e5da519b$var$CFFTopDict), - stringIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039)(new $gfJaN$restructure.String('length')), - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - }, - 2: { - hdrSize: $gfJaN$restructure.uint8, - length: $gfJaN$restructure.uint16, - topDict: $5b547cf9e5da519b$var$CFF2TopDict, - globalSubrIndex: new (0, $9eaea3754914a290$export$2e2bcd8739ae039) - } -}); -var $5b547cf9e5da519b$export$2e2bcd8739ae039 = $5b547cf9e5da519b$var$CFFTop; - - - - -class $f717432b360040c7$var$CFFFont { - static decode(stream) { - return new $f717432b360040c7$var$CFFFont(stream); - } - decode() { - let start = this.stream.pos; - let top = (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).decode(this.stream); - for(let key in top){ - let val = top[key]; - this[key] = val; - } - if (this.version < 2) { - if (this.topDictIndex.length !== 1) throw new Error("Only a single font is allowed in CFF"); - this.topDict = this.topDictIndex[0]; - } - this.isCIDFont = this.topDict.ROS != null; - return this; - } - string(sid) { - if (this.version >= 2) return null; - if (sid < (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length) return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039)[sid]; - return this.stringIndex[sid - (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length]; - } - get postscriptName() { - if (this.version < 2) return this.nameIndex[0]; - return null; - } - get fullName() { - return this.string(this.topDict.FullName); - } - get familyName() { - return this.string(this.topDict.FamilyName); - } - getCharString(glyph) { - this.stream.pos = this.topDict.CharStrings[glyph].offset; - return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); - } - getGlyphName(gid) { - // CFF2 glyph names are in the post table. - if (this.version >= 2) return null; - // CID-keyed fonts don't have glyph names - if (this.isCIDFont) return null; - let { charset: charset } = this.topDict; - if (Array.isArray(charset)) return charset[gid]; - if (gid === 0) return '.notdef'; - gid -= 1; - switch(charset.version){ - case 0: - return this.string(charset.glyphs[gid]); - case 1: - case 2: - for(let i = 0; i < charset.ranges.length; i++){ - let range = charset.ranges[i]; - if (range.offset <= gid && gid <= range.offset + range.nLeft) return this.string(range.first + (gid - range.offset)); - } - break; - } - return null; - } - fdForGlyph(gid) { - if (!this.topDict.FDSelect) return null; - switch(this.topDict.FDSelect.version){ - case 0: - return this.topDict.FDSelect.fds[gid]; - case 3: - case 4: - let { ranges: ranges } = this.topDict.FDSelect; - let low = 0; - let high = ranges.length - 1; - while(low <= high){ - let mid = low + high >> 1; - if (gid < ranges[mid].first) high = mid - 1; - else if (mid < high && gid >= ranges[mid + 1].first) low = mid + 1; - else return ranges[mid].fd; - } - default: - throw new Error(`Unknown FDSelect version: ${this.topDict.FDSelect.version}`); - } - } - privateDictForGlyph(gid) { - if (this.topDict.FDSelect) { - let fd = this.fdForGlyph(gid); - if (this.topDict.FDArray[fd]) return this.topDict.FDArray[fd].Private; - return null; - } - if (this.version < 2) return this.topDict.Private; - return this.topDict.FDArray[0].Private; - } - constructor(stream){ - this.stream = stream; - this.decode(); - } -} -var $f717432b360040c7$export$2e2bcd8739ae039 = $f717432b360040c7$var$CFFFont; - - - -let $8cb7ae73ed7aa7d8$var$VerticalOrigin = new $gfJaN$restructure.Struct({ - glyphIndex: $gfJaN$restructure.uint16, - vertOriginY: $gfJaN$restructure.int16 -}); -var $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - defaultVertOriginY: $gfJaN$restructure.int16, - numVertOriginYMetrics: $gfJaN$restructure.uint16, - metrics: new $gfJaN$restructure.Array($8cb7ae73ed7aa7d8$var$VerticalOrigin, 'numVertOriginYMetrics') -}); - - - - -let $20e0c7bbecb76d75$export$16b227cb15d716a0 = new $gfJaN$restructure.Struct({ - height: $gfJaN$restructure.uint8, - width: $gfJaN$restructure.uint8, - horiBearingX: $gfJaN$restructure.int8, - horiBearingY: $gfJaN$restructure.int8, - horiAdvance: $gfJaN$restructure.uint8, - vertBearingX: $gfJaN$restructure.int8, - vertBearingY: $gfJaN$restructure.int8, - vertAdvance: $gfJaN$restructure.uint8 -}); -let $20e0c7bbecb76d75$export$62c53e75f69bfe12 = new $gfJaN$restructure.Struct({ - height: $gfJaN$restructure.uint8, - width: $gfJaN$restructure.uint8, - bearingX: $gfJaN$restructure.int8, - bearingY: $gfJaN$restructure.int8, - advance: $gfJaN$restructure.uint8 -}); -let $20e0c7bbecb76d75$var$EBDTComponent = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - xOffset: $gfJaN$restructure.int8, - yOffset: $gfJaN$restructure.int8 -}); -class $20e0c7bbecb76d75$var$ByteAligned { -} -class $20e0c7bbecb76d75$var$BitAligned { -} -let $20e0c7bbecb76d75$export$f1f5ddeb20d14f = new $gfJaN$restructure.VersionedStruct('version', { - 1: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 2: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - data: $20e0c7bbecb76d75$var$BitAligned - }, - // format 3 is deprecated - // format 4 is not supported by Microsoft - 5: { - data: $20e0c7bbecb76d75$var$BitAligned - }, - 6: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$ByteAligned - }, - 7: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - data: $20e0c7bbecb76d75$var$BitAligned - }, - 8: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8), - numComponents: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 9: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8), - numComponents: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($20e0c7bbecb76d75$var$EBDTComponent, 'numComponents') - }, - 17: { - metrics: $20e0c7bbecb76d75$export$62c53e75f69bfe12, - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - }, - 18: { - metrics: $20e0c7bbecb76d75$export$16b227cb15d716a0, - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - }, - 19: { - dataLen: $gfJaN$restructure.uint32, - data: new $gfJaN$restructure.Buffer('dataLen') - } -}); - - -let $035bb95c0cdb1f6d$var$SBitLineMetrics = new $gfJaN$restructure.Struct({ - ascender: $gfJaN$restructure.int8, - descender: $gfJaN$restructure.int8, - widthMax: $gfJaN$restructure.uint8, - caretSlopeNumerator: $gfJaN$restructure.int8, - caretSlopeDenominator: $gfJaN$restructure.int8, - caretOffset: $gfJaN$restructure.int8, - minOriginSB: $gfJaN$restructure.int8, - minAdvanceSB: $gfJaN$restructure.int8, - maxBeforeBL: $gfJaN$restructure.int8, - minAfterBL: $gfJaN$restructure.int8, - pad: new $gfJaN$restructure.Reserved($gfJaN$restructure.int8, 2) -}); -let $035bb95c0cdb1f6d$var$CodeOffsetPair = new $gfJaN$restructure.Struct({ - glyphCode: $gfJaN$restructure.uint16, - offset: $gfJaN$restructure.uint16 -}); -let $035bb95c0cdb1f6d$var$IndexSubtable = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - imageFormat: $gfJaN$restructure.uint16, - imageDataOffset: $gfJaN$restructure.uint32 - }, - 1: { - offsetArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 2: { - imageSize: $gfJaN$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0) - }, - 3: { - offsetArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1) - }, - 4: { - numGlyphs: $gfJaN$restructure.uint32, - glyphArray: new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$CodeOffsetPair, (t)=>t.numGlyphs + 1) - }, - 5: { - imageSize: $gfJaN$restructure.uint32, - bigMetrics: (0, $20e0c7bbecb76d75$export$16b227cb15d716a0), - numGlyphs: $gfJaN$restructure.uint32, - glyphCodeArray: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numGlyphs') - } -}); -let $035bb95c0cdb1f6d$var$IndexSubtableArray = new $gfJaN$restructure.Struct({ - firstGlyphIndex: $gfJaN$restructure.uint16, - lastGlyphIndex: $gfJaN$restructure.uint16, - subtable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $035bb95c0cdb1f6d$var$IndexSubtable) -}); -let $035bb95c0cdb1f6d$var$BitmapSizeTable = new $gfJaN$restructure.Struct({ - indexSubTableArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$IndexSubtableArray, 1), { - type: 'parent' - }), - indexTablesSize: $gfJaN$restructure.uint32, - numberOfIndexSubTables: $gfJaN$restructure.uint32, - colorRef: $gfJaN$restructure.uint32, - hori: $035bb95c0cdb1f6d$var$SBitLineMetrics, - vert: $035bb95c0cdb1f6d$var$SBitLineMetrics, - startGlyphIndex: $gfJaN$restructure.uint16, - endGlyphIndex: $gfJaN$restructure.uint16, - ppemX: $gfJaN$restructure.uint8, - ppemY: $gfJaN$restructure.uint8, - bitDepth: $gfJaN$restructure.uint8, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'horizontal', - 'vertical' - ]) -}); -var $035bb95c0cdb1f6d$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - numSizes: $gfJaN$restructure.uint32, - sizes: new $gfJaN$restructure.Array($035bb95c0cdb1f6d$var$BitmapSizeTable, 'numSizes') -}); - - - -let $73d13900b55a3c0c$var$ImageTable = new $gfJaN$restructure.Struct({ - ppem: $gfJaN$restructure.uint16, - resolution: $gfJaN$restructure.uint16, - imageOffsets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void'), (t)=>t.parent.parent.maxp.numGlyphs + 1) -}); -var // This is the Apple sbix table, used by the "Apple Color Emoji" font. -// It includes several image tables with images for each bitmap glyph -// of several different sizes. -$73d13900b55a3c0c$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - flags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'renderOutlines' - ]), - numImgTables: $gfJaN$restructure.uint32, - imageTables: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $73d13900b55a3c0c$var$ImageTable), 'numImgTables') -}); - - - -let $97f6b8be3a347a8f$var$LayerRecord = new $gfJaN$restructure.Struct({ - gid: $gfJaN$restructure.uint16, - paletteIndex: $gfJaN$restructure.uint16 // Index value to use in the appropriate palette. This value must -}); // be less than numPaletteEntries in the CPAL table, except for -// the special case noted below. Each palette entry is 16 bits. -// A palette index of 0xFFFF is a special case indicating that -// the text foreground color should be used. -let $97f6b8be3a347a8f$var$BaseGlyphRecord = new $gfJaN$restructure.Struct({ - gid: $gfJaN$restructure.uint16, - // and is not rendered for color. - firstLayerIndex: $gfJaN$restructure.uint16, - // There will be numLayers consecutive entries for this base glyph. - numLayers: $gfJaN$restructure.uint16 -}); -var $97f6b8be3a347a8f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numBaseGlyphRecords: $gfJaN$restructure.uint16, - baseGlyphRecord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($97f6b8be3a347a8f$var$BaseGlyphRecord, 'numBaseGlyphRecords')), - layerRecords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($97f6b8be3a347a8f$var$LayerRecord, 'numLayerRecords'), { - lazy: true - }), - numLayerRecords: $gfJaN$restructure.uint16 -}); - - - -let $16ca60ecbdee30ea$var$ColorRecord = new $gfJaN$restructure.Struct({ - blue: $gfJaN$restructure.uint8, - green: $gfJaN$restructure.uint8, - red: $gfJaN$restructure.uint8, - alpha: $gfJaN$restructure.uint8 -}); -var $16ca60ecbdee30ea$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - header: { - numPaletteEntries: $gfJaN$restructure.uint16, - numPalettes: $gfJaN$restructure.uint16, - numColorRecords: $gfJaN$restructure.uint16, - colorRecords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($16ca60ecbdee30ea$var$ColorRecord, 'numColorRecords')), - colorRecordIndices: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPalettes') - }, - 0: {}, - 1: { - offsetPaletteTypeArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numPalettes')), - offsetPaletteLabelArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPalettes')), - offsetPaletteEntryLabelArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numPaletteEntries')) - } -}); - - - - - -let $7327e41706f9d5c7$var$BaseCoord = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coordinate: $gfJaN$restructure.int16 // X or Y value, in design units - }, - 2: { - coordinate: $gfJaN$restructure.int16, - referenceGlyph: $gfJaN$restructure.uint16, - baseCoordPoint: $gfJaN$restructure.uint16 // Index of contour point on the referenceGlyph - }, - 3: { - coordinate: $gfJaN$restructure.int16, - deviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) // Device table for X or Y value - } -}); -let $7327e41706f9d5c7$var$BaseValues = new $gfJaN$restructure.Struct({ - defaultIndex: $gfJaN$restructure.uint16, - baseCoordCount: $gfJaN$restructure.uint16, - baseCoords: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), 'baseCoordCount') -}); -let $7327e41706f9d5c7$var$FeatMinMaxRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - minCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }), - maxCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord, { - type: 'parent' - }) // May be NULL -}); -let $7327e41706f9d5c7$var$MinMax = new $gfJaN$restructure.Struct({ - minCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - maxCoord: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseCoord), - featMinMaxCount: $gfJaN$restructure.uint16, - featMinMaxRecords: new $gfJaN$restructure.Array($7327e41706f9d5c7$var$FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order -}); -let $7327e41706f9d5c7$var$BaseLangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - minMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$MinMax, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScript = new $gfJaN$restructure.Struct({ - baseValues: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseValues), - defaultMinMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$MinMax), - baseLangSysCount: $gfJaN$restructure.uint16, - baseLangSysRecords: new $gfJaN$restructure.Array($7327e41706f9d5c7$var$BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag -}); -let $7327e41706f9d5c7$var$BaseScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseScript, { - type: 'parent' - }) -}); -let $7327e41706f9d5c7$var$BaseScriptList = new $gfJaN$restructure.Array($7327e41706f9d5c7$var$BaseScriptRecord, $gfJaN$restructure.uint16); -// Array of 4-byte baseline identification tags-must be in alphabetical order -let $7327e41706f9d5c7$var$BaseTagList = new $gfJaN$restructure.Array(new $gfJaN$restructure.String(4), $gfJaN$restructure.uint16); -let $7327e41706f9d5c7$var$Axis = new $gfJaN$restructure.Struct({ - baseTagList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseTagList), - baseScriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$BaseScriptList) -}); -var $7327e41706f9d5c7$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - horizAxis: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$Axis), - vertAxis: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7327e41706f9d5c7$var$Axis) // May be NULL - }, - 0x00010000: {}, - 0x00010001: { - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $7e48bbe9e5345664$var$AttachPoint = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $7e48bbe9e5345664$var$AttachList = new $gfJaN$restructure.Struct({ - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $gfJaN$restructure.uint16, - attachPoints: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$AttachPoint), 'glyphCount') -}); -let $7e48bbe9e5345664$var$CaretValue = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coordinate: $gfJaN$restructure.int16 - }, - 2: { - caretValuePoint: $gfJaN$restructure.uint16 - }, - 3: { - coordinate: $gfJaN$restructure.int16, - deviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $7e48bbe9e5345664$var$LigGlyph = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$CaretValue), $gfJaN$restructure.uint16); -let $7e48bbe9e5345664$var$LigCaretList = new $gfJaN$restructure.Struct({ - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligGlyphCount: $gfJaN$restructure.uint16, - ligGlyphs: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$LigGlyph), 'ligGlyphCount') -}); -let $7e48bbe9e5345664$var$MarkGlyphSetsDef = new $gfJaN$restructure.Struct({ - markSetTableFormat: $gfJaN$restructure.uint16, - markSetCount: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'markSetCount') -}); -var $7e48bbe9e5345664$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - glyphClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - attachList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$AttachList), - ligCaretList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$LigCaretList), - markAttachClassDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)) - }, - 0x00010000: {}, - 0x00010002: { - markGlyphSetsDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef) - }, - 0x00010003: { - markGlyphSetsDef: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $7e48bbe9e5345664$var$MarkGlyphSetsDef), - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)) - } -}); - - - - - -let $b687332511a4da75$var$ValueFormat = new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'xPlacement', - 'yPlacement', - 'xAdvance', - 'yAdvance', - 'xPlaDevice', - 'yPlaDevice', - 'xAdvDevice', - 'yAdvDevice' -]); -let $b687332511a4da75$var$types = { - xPlacement: $gfJaN$restructure.int16, - yPlacement: $gfJaN$restructure.int16, - xAdvance: $gfJaN$restructure.int16, - yAdvance: $gfJaN$restructure.int16, - xPlaDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yPlaDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - xAdvDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }), - yAdvDevice: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10), { - type: 'global', - relativeTo: (ctx)=>ctx.rel - }) -}; -class $b687332511a4da75$var$ValueRecord { - buildStruct(parent) { - let struct = parent; - while(!struct[this.key] && struct.parent)struct = struct.parent; - if (!struct[this.key]) return; - let fields = {}; - fields.rel = ()=>struct._startOffset; - let format = struct[this.key]; - for(let key in format)if (format[key]) fields[key] = $b687332511a4da75$var$types[key]; - return new $gfJaN$restructure.Struct(fields); - } - size(val, ctx) { - return this.buildStruct(ctx).size(val, ctx); - } - decode(stream, parent) { - let res = this.buildStruct(parent).decode(stream, parent); - delete res.rel; - return res; - } - constructor(key = 'valueFormat'){ - this.key = key; - } -} -let $b687332511a4da75$var$PairValueRecord = new $gfJaN$restructure.Struct({ - secondGlyph: $gfJaN$restructure.uint16, - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$PairSet = new $gfJaN$restructure.Array($b687332511a4da75$var$PairValueRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$Class2Record = new $gfJaN$restructure.Struct({ - value1: new $b687332511a4da75$var$ValueRecord('valueFormat1'), - value2: new $b687332511a4da75$var$ValueRecord('valueFormat2') -}); -let $b687332511a4da75$var$Anchor = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16 - }, - 2: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16, - anchorPoint: $gfJaN$restructure.uint16 - }, - 3: { - xCoordinate: $gfJaN$restructure.int16, - yCoordinate: $gfJaN$restructure.int16, - xDeviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)), - yDeviceTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$8215d14a63d9fb10)) - } -}); -let $b687332511a4da75$var$EntryExitRecord = new $gfJaN$restructure.Struct({ - entryAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }), - exitAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkRecord = new $gfJaN$restructure.Struct({ - class: $gfJaN$restructure.uint16, - markAnchor: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor, { - type: 'parent' - }) -}); -let $b687332511a4da75$var$MarkArray = new $gfJaN$restructure.Array($b687332511a4da75$var$MarkRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$BaseRecord = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.classCount); -let $b687332511a4da75$var$BaseArray = new $gfJaN$restructure.Array($b687332511a4da75$var$BaseRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$ComponentRecord = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$Anchor), (t)=>t.parent.parent.classCount); -let $b687332511a4da75$var$LigatureAttach = new $gfJaN$restructure.Array($b687332511a4da75$var$ComponentRecord, $gfJaN$restructure.uint16); -let $b687332511a4da75$var$LigatureArray = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$LigatureAttach), $gfJaN$restructure.uint16); -let $b687332511a4da75$export$73a8cfb19cd43a0f = new $gfJaN$restructure.VersionedStruct('lookupType', { - 1: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - value: new $b687332511a4da75$var$ValueRecord() - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat: $b687332511a4da75$var$ValueFormat, - valueCount: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.LazyArray(new $b687332511a4da75$var$ValueRecord(), 'valueCount') - } - }), - 2: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - pairSetCount: $gfJaN$restructure.uint16, - pairSets: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$PairSet), 'pairSetCount') - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - valueFormat1: $b687332511a4da75$var$ValueFormat, - valueFormat2: $b687332511a4da75$var$ValueFormat, - classDef1: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - classDef2: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$843d551fbbafef71)), - class1Count: $gfJaN$restructure.uint16, - class2Count: $gfJaN$restructure.uint16, - classRecords: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.LazyArray($b687332511a4da75$var$Class2Record, 'class2Count'), 'class1Count') - } - }), - 3: { - format: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - entryExitCount: $gfJaN$restructure.uint16, - entryExitRecords: new $gfJaN$restructure.Array($b687332511a4da75$var$EntryExitRecord, 'entryExitCount') - }, - 4: { - format: $gfJaN$restructure.uint16, - markCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - baseCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - markArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - baseArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 5: { - format: $gfJaN$restructure.uint16, - markCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - ligatureCoverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - markArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - ligatureArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$LigatureArray) - }, - 6: { - format: $gfJaN$restructure.uint16, - mark1Coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - mark2Coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - classCount: $gfJaN$restructure.uint16, - mark1Array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$MarkArray), - mark2Array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $b687332511a4da75$var$BaseArray) - }, - 7: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 8: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 9: { - posFormat: $gfJaN$restructure.uint16, - lookupType: $gfJaN$restructure.uint16, - extension: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, null) - } -}); -// Fix circular reference -$b687332511a4da75$export$73a8cfb19cd43a0f.versions[9].extension.type = $b687332511a4da75$export$73a8cfb19cd43a0f; -var $b687332511a4da75$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - scriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($b687332511a4da75$export$73a8cfb19cd43a0f)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $99ccad60b96f92fb$var$Sequence = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $99ccad60b96f92fb$var$AlternateSet = $99ccad60b96f92fb$var$Sequence; -let $99ccad60b96f92fb$var$Ligature = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - compCount: $gfJaN$restructure.uint16, - components: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.compCount - 1) -}); -let $99ccad60b96f92fb$var$LigatureSet = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$Ligature), $gfJaN$restructure.uint16); -let $99ccad60b96f92fb$var$GSUBLookup = new $gfJaN$restructure.VersionedStruct('lookupType', { - 1: new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 1: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - deltaGlyphID: $gfJaN$restructure.int16 - }, - 2: { - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - glyphCount: $gfJaN$restructure.uint16, - substitute: new $gfJaN$restructure.LazyArray($gfJaN$restructure.uint16, 'glyphCount') - } - }), - 2: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - sequences: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$Sequence), 'count') - }, - 3: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - alternateSet: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$AlternateSet), 'count') - }, - 4: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - count: $gfJaN$restructure.uint16, - ligatureSets: new $gfJaN$restructure.LazyArray(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $99ccad60b96f92fb$var$LigatureSet), 'count') - }, - 5: (0, $b6dd765146ad212a$export$841858b892ce1f4c), - 6: (0, $b6dd765146ad212a$export$5e6d09e6861162f6), - 7: { - substFormat: $gfJaN$restructure.uint16, - lookupType: $gfJaN$restructure.uint16, - extension: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, null) - }, - 8: { - substFormat: $gfJaN$restructure.uint16, - coverage: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), - backtrackCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'backtrackGlyphCount'), - lookaheadGlyphCount: $gfJaN$restructure.uint16, - lookaheadCoverage: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$17608c3f81a6111)), 'lookaheadGlyphCount'), - glyphCount: $gfJaN$restructure.uint16, - substitutes: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'glyphCount') - } -}); -// Fix circular reference -$99ccad60b96f92fb$var$GSUBLookup.versions[7].extension.type = $99ccad60b96f92fb$var$GSUBLookup; -var $99ccad60b96f92fb$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - header: { - scriptList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$3e15fc05ce864229)), - featureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, (0, $b6dd765146ad212a$export$aa18130def4b6cb4)), - lookupList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)($99ccad60b96f92fb$var$GSUBLookup)) - }, - 0x00010000: {}, - 0x00010001: { - featureVariations: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$441b70b7971dd419)) - } -}); - - - - - -let $573d5042c76c4940$var$JstfGSUBModList = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16); -let $573d5042c76c4940$var$JstfPriority = new $gfJaN$restructure.Struct({ - shrinkageEnableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageEnableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageDisableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - shrinkageJstfMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))), - extensionEnableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGSUB: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionEnableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionDisableGPOS: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfGSUBModList), - extensionJstfMax: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new (0, $b6dd765146ad212a$export$df0008c6ff2da22a)((0, $b687332511a4da75$export$73a8cfb19cd43a0f))) -}); -let $573d5042c76c4940$var$JstfLangSys = new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfPriority), $gfJaN$restructure.uint16); -let $573d5042c76c4940$var$JstfLangSysRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - jstfLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfLangSys) -}); -let $573d5042c76c4940$var$JstfScript = new $gfJaN$restructure.Struct({ - extenderGlyphs: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16)), - defaultLangSys: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfLangSys), - langSysCount: $gfJaN$restructure.uint16, - langSysRecords: new $gfJaN$restructure.Array($573d5042c76c4940$var$JstfLangSysRecord, 'langSysCount') -}); -let $573d5042c76c4940$var$JstfScriptRecord = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - script: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $573d5042c76c4940$var$JstfScript, { - type: 'parent' - }) -}); -var $573d5042c76c4940$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - scriptCount: $gfJaN$restructure.uint16, - scriptList: new $gfJaN$restructure.Array($573d5042c76c4940$var$JstfScriptRecord, 'scriptCount') -}); - - - - -// TODO: add this to restructure -class $a5875b80d6087f61$var$VariableSizeNumber { - decode(stream, parent) { - switch(this.size(0, parent)){ - case 1: - return stream.readUInt8(); - case 2: - return stream.readUInt16BE(); - case 3: - return stream.readUInt24BE(); - case 4: - return stream.readUInt32BE(); - } - } - size(val, parent) { - return (0, $gfJaN$restructure.resolveLength)(this._size, null, parent); - } - constructor(size){ - this._size = size; - } -} -let $a5875b80d6087f61$var$MapDataEntry = new $gfJaN$restructure.Struct({ - entry: new $a5875b80d6087f61$var$VariableSizeNumber((t)=>((t.parent.entryFormat & 0x0030) >> 4) + 1), - outerIndex: (t)=>t.entry >> (t.parent.entryFormat & 0x000F) + 1, - innerIndex: (t)=>t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1 -}); -let $a5875b80d6087f61$var$DeltaSetIndexMap = new $gfJaN$restructure.Struct({ - entryFormat: $gfJaN$restructure.uint16, - mapCount: $gfJaN$restructure.uint16, - mapData: new $gfJaN$restructure.Array($a5875b80d6087f61$var$MapDataEntry, 'mapCount') -}); -var $a5875b80d6087f61$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - itemVariationStore: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, (0, $2e4adcda047b3383$export$fe1b122a2710f241)), - advanceWidthMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - LSBMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap), - RSBMapping: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $a5875b80d6087f61$var$DeltaSetIndexMap) -}); - - - -let $4423bc1ac09bbbd1$var$Signature = new $gfJaN$restructure.Struct({ - format: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - offset: $gfJaN$restructure.uint32 -}); -let $4423bc1ac09bbbd1$var$SignatureBlock = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16, 2), - cbSignature: $gfJaN$restructure.uint32, - signature: new $gfJaN$restructure.Buffer('cbSignature') -}); -var $4423bc1ac09bbbd1$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - ulVersion: $gfJaN$restructure.uint32, - usNumSigs: $gfJaN$restructure.uint16, - usFlag: $gfJaN$restructure.uint16, - signatures: new $gfJaN$restructure.Array($4423bc1ac09bbbd1$var$Signature, 'usNumSigs'), - signatureBlocks: new $gfJaN$restructure.Array($4423bc1ac09bbbd1$var$SignatureBlock, 'usNumSigs') -}); - - - -let $7b50e3f8d83263de$var$GaspRange = new $gfJaN$restructure.Struct({ - rangeMaxPPEM: $gfJaN$restructure.uint16, - rangeGaspBehavior: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint16, [ - 'grayscale', - 'gridfit', - 'symmetricSmoothing', - 'symmetricGridfit' // only in version 1, for ClearType - ]) -}); -var $7b50e3f8d83263de$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRanges: $gfJaN$restructure.uint16, - gaspRanges: new $gfJaN$restructure.Array($7b50e3f8d83263de$var$GaspRange, 'numRanges') // Sorted by ppem -}); - - - -let $7bf92ec372cd2307$var$DeviceRecord = new $gfJaN$restructure.Struct({ - pixelSize: $gfJaN$restructure.uint8, - maximumWidth: $gfJaN$restructure.uint8, - widths: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.parent.parent.maxp.numGlyphs) -}); -var // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes -$7bf92ec372cd2307$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRecords: $gfJaN$restructure.int16, - sizeDeviceRecord: $gfJaN$restructure.int32, - records: new $gfJaN$restructure.Array($7bf92ec372cd2307$var$DeviceRecord, 'numRecords') -}); - - - -let $a3f544bcf76542d1$var$KernPair = new $gfJaN$restructure.Struct({ - left: $gfJaN$restructure.uint16, - right: $gfJaN$restructure.uint16, - value: $gfJaN$restructure.int16 -}); -let $a3f544bcf76542d1$var$ClassTable = new $gfJaN$restructure.Struct({ - firstGlyph: $gfJaN$restructure.uint16, - nGlyphs: $gfJaN$restructure.uint16, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'nGlyphs'), - max: (t)=>t.offsets.length && Math.max.apply(Math, t.offsets) -}); -let $a3f544bcf76542d1$var$Kern2Array = new $gfJaN$restructure.Struct({ - off: (t)=>t._startOffset - t.parent.parent._startOffset, - len: (t)=>((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2), - values: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, 'len') -}); -let $a3f544bcf76542d1$var$KernSubtable = new $gfJaN$restructure.VersionedStruct('format', { - 0: { - nPairs: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - pairs: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernPair, 'nPairs') - }, - 2: { - rowWidth: $gfJaN$restructure.uint16, - leftTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - rightTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$ClassTable, { - type: 'parent' - }), - array: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $a3f544bcf76542d1$var$Kern2Array, { - type: 'parent' - }) - }, - 3: { - glyphCount: $gfJaN$restructure.uint16, - kernValueCount: $gfJaN$restructure.uint8, - leftClassCount: $gfJaN$restructure.uint8, - rightClassCount: $gfJaN$restructure.uint8, - flags: $gfJaN$restructure.uint8, - kernValue: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 'kernValueCount'), - leftClass: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'glyphCount'), - rightClass: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'glyphCount'), - kernIndex: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.leftClassCount * t.rightClassCount) - } -}); -let $a3f544bcf76542d1$var$KernTable = new $gfJaN$restructure.VersionedStruct('version', { - 0: { - subVersion: $gfJaN$restructure.uint16, - length: $gfJaN$restructure.uint16, - format: $gfJaN$restructure.uint8, - coverage: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - 'horizontal', - 'minimum', - 'crossStream', - 'override' // If set to 1 the value in this table replaces the accumulated value - ]), - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) - }, - 1: { - length: $gfJaN$restructure.uint32, - coverage: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - null, - null, - null, - null, - null, - 'variation', - 'crossStream', - 'vertical' // Set if table has vertical kerning values - ]), - format: $gfJaN$restructure.uint8, - tupleIndex: $gfJaN$restructure.uint16, - subtable: $a3f544bcf76542d1$var$KernSubtable, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) - } -}); -var $a3f544bcf76542d1$export$2e2bcd8739ae039 = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - nTables: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - }, - 1: { - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - nTables: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($a3f544bcf76542d1$var$KernTable, 'nTables') - } -}); - - - -var // Linear Threshold table -// Records the ppem for each glyph at which the scaling becomes linear again, -// despite instructions effecting the advance width -$86687befb45925d0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numGlyphs: $gfJaN$restructure.uint16, - yPels: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 'numGlyphs') -}); - - - -var // PCL 5 Table -// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines -$91429006e51e0fe8$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - fontNumber: $gfJaN$restructure.uint32, - pitch: $gfJaN$restructure.uint16, - xHeight: $gfJaN$restructure.uint16, - style: $gfJaN$restructure.uint16, - typeFamily: $gfJaN$restructure.uint16, - capHeight: $gfJaN$restructure.uint16, - symbolSet: $gfJaN$restructure.uint16, - typeface: new $gfJaN$restructure.String(16), - characterComplement: new $gfJaN$restructure.String(8), - fileName: new $gfJaN$restructure.String(6), - strokeWeight: new $gfJaN$restructure.String(1), - widthType: new $gfJaN$restructure.String(1), - serifStyle: $gfJaN$restructure.uint8, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8) -}); - - - -// VDMX tables contain ascender/descender overrides for certain (usually small) -// sizes. This is needed in order to match font metrics on Windows. -let $627850fc9deed59a$var$Ratio = new $gfJaN$restructure.Struct({ - bCharSet: $gfJaN$restructure.uint8, - xRatio: $gfJaN$restructure.uint8, - yStartRatio: $gfJaN$restructure.uint8, - yEndRatio: $gfJaN$restructure.uint8 // Ending y-Ratio value -}); -let $627850fc9deed59a$var$vTable = new $gfJaN$restructure.Struct({ - yPelHeight: $gfJaN$restructure.uint16, - yMax: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16 // Minimum value (in pels) for this yPelHeight -}); -let $627850fc9deed59a$var$VdmxGroup = new $gfJaN$restructure.Struct({ - recs: $gfJaN$restructure.uint16, - startsz: $gfJaN$restructure.uint8, - endsz: $gfJaN$restructure.uint8, - entries: new $gfJaN$restructure.Array($627850fc9deed59a$var$vTable, 'recs') // The VDMX records -}); -var $627850fc9deed59a$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - numRecs: $gfJaN$restructure.uint16, - numRatios: $gfJaN$restructure.uint16, - ratioRanges: new $gfJaN$restructure.Array($627850fc9deed59a$var$Ratio, 'numRatios'), - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numRatios'), - groups: new $gfJaN$restructure.Array($627850fc9deed59a$var$VdmxGroup, 'numRecs') // The actual VDMX groupings -}); - - - -var // Vertical Header Table -$65c33f5f068fc77f$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - ascent: $gfJaN$restructure.int16, - descent: $gfJaN$restructure.int16, - lineGap: $gfJaN$restructure.int16, - advanceHeightMax: $gfJaN$restructure.int16, - minTopSideBearing: $gfJaN$restructure.int16, - minBottomSideBearing: $gfJaN$restructure.int16, - yMaxExtent: $gfJaN$restructure.int16, - caretSlopeRise: $gfJaN$restructure.int16, - caretSlopeRun: $gfJaN$restructure.int16, - caretOffset: $gfJaN$restructure.int16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.int16, 4), - metricDataFormat: $gfJaN$restructure.int16, - numberOfMetrics: $gfJaN$restructure.uint16 // Number of advance heights in the Vertical Metrics table -}); - - - -let $597d739523b65bb3$var$VmtxEntry = new $gfJaN$restructure.Struct({ - advance: $gfJaN$restructure.uint16, - bearing: $gfJaN$restructure.int16 // The top sidebearing of the glyph -}); -var // Vertical Metrics Table -$597d739523b65bb3$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - metrics: new $gfJaN$restructure.LazyArray($597d739523b65bb3$var$VmtxEntry, (t)=>t.parent.vhea.numberOfMetrics), - bearings: new $gfJaN$restructure.LazyArray($gfJaN$restructure.int16, (t)=>t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics) -}); - - - -let $35aa0c87d9c3d3a0$var$shortFrac = new $gfJaN$restructure.Fixed(16, 'BE', 14); -let $35aa0c87d9c3d3a0$var$Correspondence = new $gfJaN$restructure.Struct({ - fromCoord: $35aa0c87d9c3d3a0$var$shortFrac, - toCoord: $35aa0c87d9c3d3a0$var$shortFrac -}); -let $35aa0c87d9c3d3a0$var$Segment = new $gfJaN$restructure.Struct({ - pairCount: $gfJaN$restructure.uint16, - correspondence: new $gfJaN$restructure.Array($35aa0c87d9c3d3a0$var$Correspondence, 'pairCount') -}); -var $35aa0c87d9c3d3a0$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - axisCount: $gfJaN$restructure.uint32, - segment: new $gfJaN$restructure.Array($35aa0c87d9c3d3a0$var$Segment, 'axisCount') -}); - - - - -class $22801616bd931ca3$var$UnboundedArrayAccessor { - getItem(index) { - if (this._items[index] == null) { - let pos = this.stream.pos; - this.stream.pos = this.base + this.type.size(null, this.parent) * index; - this._items[index] = this.type.decode(this.stream, this.parent); - this.stream.pos = pos; - } - return this._items[index]; - } - inspect() { - return `[UnboundedArray ${this.type.constructor.name}]`; - } - constructor(type, stream, parent){ - this.type = type; - this.stream = stream; - this.parent = parent; - this.base = this.stream.pos; - this._items = []; - } -} -class $22801616bd931ca3$export$c5af1eebc882e39a extends $gfJaN$restructure.Array { - decode(stream, parent) { - return new $22801616bd931ca3$var$UnboundedArrayAccessor(this.type, stream, parent); - } - constructor(type){ - super(type, 0); - } -} -let $22801616bd931ca3$export$8351f8c2ae2f103c = function(ValueType = $gfJaN$restructure.uint16) { - // Helper class that makes internal structures invisible to pointers - class Shadow { - decode(stream, ctx) { - ctx = ctx.parent.parent; - return this.type.decode(stream, ctx); - } - size(val, ctx) { - ctx = ctx.parent.parent; - return this.type.size(val, ctx); - } - encode(stream, val, ctx) { - ctx = ctx.parent.parent; - return this.type.encode(stream, val, ctx); - } - constructor(type){ - this.type = type; - } - } - ValueType = new Shadow(ValueType); - let BinarySearchHeader = new $gfJaN$restructure.Struct({ - unitSize: $gfJaN$restructure.uint16, - nUnits: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16 - }); - let LookupSegmentSingle = new $gfJaN$restructure.Struct({ - lastGlyph: $gfJaN$restructure.uint16, - firstGlyph: $gfJaN$restructure.uint16, - value: ValueType - }); - let LookupSegmentArray = new $gfJaN$restructure.Struct({ - lastGlyph: $gfJaN$restructure.uint16, - firstGlyph: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array(ValueType, (t)=>t.lastGlyph - t.firstGlyph + 1), { - type: 'parent' - }) - }); - let LookupSingle = new $gfJaN$restructure.Struct({ - glyph: $gfJaN$restructure.uint16, - value: ValueType - }); - return new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint16, { - 0: { - values: new $22801616bd931ca3$export$c5af1eebc882e39a(ValueType) // length == number of glyphs maybe? - }, - 2: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSegmentSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 4: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSegmentArray, (t)=>t.binarySearchHeader.nUnits) - }, - 6: { - binarySearchHeader: BinarySearchHeader, - segments: new $gfJaN$restructure.Array(LookupSingle, (t)=>t.binarySearchHeader.nUnits) - }, - 8: { - firstGlyph: $gfJaN$restructure.uint16, - count: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Array(ValueType, 'count') - } - }); -}; -function $22801616bd931ca3$export$79f7d93d790934ba(entryData = {}, lookupType = $gfJaN$restructure.uint16) { - let entry = Object.assign({ - newState: $gfJaN$restructure.uint16, - flags: $gfJaN$restructure.uint16 - }, entryData); - let Entry = new $gfJaN$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $gfJaN$restructure.Array($gfJaN$restructure.uint16, (t)=>t.nClasses)); - let StateHeader = new $gfJaN$restructure.Struct({ - nClasses: $gfJaN$restructure.uint32, - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $22801616bd931ca3$export$8351f8c2ae2f103c(lookupType)), - stateArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, StateArray), - entryTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader; -} -function $22801616bd931ca3$export$105027425199cc51(entryData = {}, lookupType = $gfJaN$restructure.uint16) { - let ClassLookupTable = new $gfJaN$restructure.Struct({ - version () { - return 8; - }, - firstGlyph: $gfJaN$restructure.uint16, - values: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16) - }); - let entry = Object.assign({ - newStateOffset: $gfJaN$restructure.uint16, - // convert offset to stateArray index - newState: (t)=>(t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses, - flags: $gfJaN$restructure.uint16 - }, entryData); - let Entry = new $gfJaN$restructure.Struct(entry); - let StateArray = new $22801616bd931ca3$export$c5af1eebc882e39a(new $gfJaN$restructure.Array($gfJaN$restructure.uint8, (t)=>t.nClasses)); - let StateHeader1 = new $gfJaN$restructure.Struct({ - nClasses: $gfJaN$restructure.uint16, - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, ClassLookupTable), - stateArray: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, StateArray), - entryTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $22801616bd931ca3$export$c5af1eebc882e39a(Entry)) - }); - return StateHeader1; -} - - -let $3a5ca96d3e3aaf20$var$BslnSubtable = new $gfJaN$restructure.VersionedStruct('format', { - 0: { - deltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 32) - }, - 1: { - deltas: new $gfJaN$restructure.Array($gfJaN$restructure.int16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($gfJaN$restructure.uint16) - }, - 2: { - standardGlyph: $gfJaN$restructure.uint16, - controlPoints: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 32) - }, - 3: { - standardGlyph: $gfJaN$restructure.uint16, - controlPoints: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 32), - mappingData: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($gfJaN$restructure.uint16) - } -}); -var $3a5ca96d3e3aaf20$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - format: $gfJaN$restructure.uint16, - defaultBaseline: $gfJaN$restructure.uint16, - subtable: $3a5ca96d3e3aaf20$var$BslnSubtable -}); - - - -let $8d4241d96b2b0589$var$Setting = new $gfJaN$restructure.Struct({ - setting: $gfJaN$restructure.uint16, - nameIndex: $gfJaN$restructure.int16, - name: (t)=>t.parent.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -let $8d4241d96b2b0589$var$FeatureName = new $gfJaN$restructure.Struct({ - feature: $gfJaN$restructure.uint16, - nSettings: $gfJaN$restructure.uint16, - settingTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array($8d4241d96b2b0589$var$Setting, 'nSettings'), { - type: 'parent' - }), - featureFlags: new $gfJaN$restructure.Bitfield($gfJaN$restructure.uint8, [ - null, - null, - null, - null, - null, - null, - 'hasDefault', - 'exclusive' - ]), - defaultSetting: $gfJaN$restructure.uint8, - nameIndex: $gfJaN$restructure.int16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameIndex] -}); -var $8d4241d96b2b0589$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - featureNameCount: $gfJaN$restructure.uint16, - reserved1: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - reserved2: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint32), - featureNames: new $gfJaN$restructure.Array($8d4241d96b2b0589$var$FeatureName, 'featureNameCount') -}); - - - -let $a79cd5132b1cf476$var$Axis = new $gfJaN$restructure.Struct({ - axisTag: new $gfJaN$restructure.String(4), - minValue: $gfJaN$restructure.fixed32, - defaultValue: $gfJaN$restructure.fixed32, - maxValue: $gfJaN$restructure.fixed32, - flags: $gfJaN$restructure.uint16, - nameID: $gfJaN$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID] -}); -let $a79cd5132b1cf476$var$Instance = new $gfJaN$restructure.Struct({ - nameID: $gfJaN$restructure.uint16, - name: (t)=>t.parent.parent.name.records.fontFeatures[t.nameID], - flags: $gfJaN$restructure.uint16, - coord: new $gfJaN$restructure.Array($gfJaN$restructure.fixed32, (t)=>t.parent.axisCount), - postscriptNameID: new $gfJaN$restructure.Optional($gfJaN$restructure.uint16, (t)=>t.parent.instanceSize - t._currentOffset > 0) -}); -var $a79cd5132b1cf476$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - offsetToData: $gfJaN$restructure.uint16, - countSizePairs: $gfJaN$restructure.uint16, - axisCount: $gfJaN$restructure.uint16, - axisSize: $gfJaN$restructure.uint16, - instanceCount: $gfJaN$restructure.uint16, - instanceSize: $gfJaN$restructure.uint16, - axis: new $gfJaN$restructure.Array($a79cd5132b1cf476$var$Axis, 'axisCount'), - instance: new $gfJaN$restructure.Array($a79cd5132b1cf476$var$Instance, 'instanceCount') -}); - - - -let $3f36f1a5e6989457$var$shortFrac = new $gfJaN$restructure.Fixed(16, 'BE', 14); -class $3f36f1a5e6989457$var$Offset { - static decode(stream, parent) { - // In short format, offsets are multiplied by 2. - // This doesn't seem to be documented by Apple, but it - // is implemented this way in Freetype. - return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; - } -} -let $3f36f1a5e6989457$var$gvar = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - axisCount: $gfJaN$restructure.uint16, - globalCoordCount: $gfJaN$restructure.uint16, - globalCoords: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new $gfJaN$restructure.Array(new $gfJaN$restructure.Array($3f36f1a5e6989457$var$shortFrac, 'axisCount'), 'globalCoordCount')), - glyphCount: $gfJaN$restructure.uint16, - flags: $gfJaN$restructure.uint16, - offsetToData: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array(new $gfJaN$restructure.Pointer($3f36f1a5e6989457$var$Offset, 'void', { - relativeTo: (ctx)=>ctx.offsetToData, - allowNull: false - }), (t)=>t.glyphCount + 1) -}); -var $3f36f1a5e6989457$export$2e2bcd8739ae039 = $3f36f1a5e6989457$var$gvar; - - - - -let $0bd8fe7a6d1d9fb4$var$ClassTable = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - coverage: $gfJaN$restructure.uint16, - subFeatureFlags: $gfJaN$restructure.uint32, - stateTable: new (0, $22801616bd931ca3$export$105027425199cc51) -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaRecord = new $gfJaN$restructure.Struct({ - justClass: $gfJaN$restructure.uint32, - beforeGrowLimit: $gfJaN$restructure.fixed32, - beforeShrinkLimit: $gfJaN$restructure.fixed32, - afterGrowLimit: $gfJaN$restructure.fixed32, - afterShrinkLimit: $gfJaN$restructure.fixed32, - growFlags: $gfJaN$restructure.uint16, - shrinkFlags: $gfJaN$restructure.uint16 -}); -let $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster = new $gfJaN$restructure.Array($0bd8fe7a6d1d9fb4$var$WidthDeltaRecord, $gfJaN$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$ActionData = new $gfJaN$restructure.VersionedStruct('actionType', { - 0: { - lowerLimit: $gfJaN$restructure.fixed32, - upperLimit: $gfJaN$restructure.fixed32, - order: $gfJaN$restructure.uint16, - glyphs: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, $gfJaN$restructure.uint16) - }, - 1: { - addGlyph: $gfJaN$restructure.uint16 - }, - 2: { - substThreshold: $gfJaN$restructure.fixed32, - addGlyph: $gfJaN$restructure.uint16, - substGlyph: $gfJaN$restructure.uint16 - }, - 3: {}, - 4: { - variationAxis: $gfJaN$restructure.uint32, - minimumLimit: $gfJaN$restructure.fixed32, - noStretchValue: $gfJaN$restructure.fixed32, - maximumLimit: $gfJaN$restructure.fixed32 - }, - 5: { - flags: $gfJaN$restructure.uint16, - glyph: $gfJaN$restructure.uint16 - } -}); -let $0bd8fe7a6d1d9fb4$var$Action = new $gfJaN$restructure.Struct({ - actionClass: $gfJaN$restructure.uint16, - actionType: $gfJaN$restructure.uint16, - actionLength: $gfJaN$restructure.uint32, - actionData: $0bd8fe7a6d1d9fb4$var$ActionData, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.actionLength - t._currentOffset) -}); -let $0bd8fe7a6d1d9fb4$var$PostcompensationAction = new $gfJaN$restructure.Array($0bd8fe7a6d1d9fb4$var$Action, $gfJaN$restructure.uint32); -let $0bd8fe7a6d1d9fb4$var$PostCompensationTable = new $gfJaN$restructure.Struct({ - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostcompensationAction)) -}); -let $0bd8fe7a6d1d9fb4$var$JustificationTable = new $gfJaN$restructure.Struct({ - classTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$ClassTable, { - type: 'parent' - }), - wdcOffset: $gfJaN$restructure.uint16, - postCompensationTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$PostCompensationTable, { - type: 'parent' - }), - widthDeltaClusters: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$WidthDeltaCluster, { - type: 'parent', - relativeTo: (ctx)=>ctx.wdcOffset - })) -}); -var $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - format: $gfJaN$restructure.uint16, - horizontal: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable), - vertical: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $0bd8fe7a6d1d9fb4$var$JustificationTable) -}); - - - - -let $ef40c6dc80fd50a2$var$LigatureData = { - action: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$ContextualData = { - markIndex: $gfJaN$restructure.uint16, - currentIndex: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$InsertionData = { - currentInsertIndex: $gfJaN$restructure.uint16, - markedInsertIndex: $gfJaN$restructure.uint16 -}; -let $ef40c6dc80fd50a2$var$SubstitutionTable = new $gfJaN$restructure.Struct({ - items: new (0, $22801616bd931ca3$export$c5af1eebc882e39a)(new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$8351f8c2ae2f103c))) -}); -let $ef40c6dc80fd50a2$var$SubtableData = new $gfJaN$restructure.VersionedStruct('type', { - 0: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba) - }, - 1: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$ContextualData), - substitutionTable: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $ef40c6dc80fd50a2$var$SubstitutionTable) - }, - 2: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$LigatureData), - ligatureActions: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint32)), - components: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)), - ligatureList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)) - }, - 4: { - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c) - }, - 5: { - stateTable: new (0, $22801616bd931ca3$export$79f7d93d790934ba)($ef40c6dc80fd50a2$var$InsertionData), - insertionActions: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, new (0, $22801616bd931ca3$export$c5af1eebc882e39a)($gfJaN$restructure.uint16)) - } -}); -let $ef40c6dc80fd50a2$var$Subtable = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint32, - coverage: $gfJaN$restructure.uint24, - type: $gfJaN$restructure.uint8, - subFeatureFlags: $gfJaN$restructure.uint32, - table: $ef40c6dc80fd50a2$var$SubtableData, - padding: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, (t)=>t.length - t._currentOffset) -}); -let $ef40c6dc80fd50a2$var$FeatureEntry = new $gfJaN$restructure.Struct({ - featureType: $gfJaN$restructure.uint16, - featureSetting: $gfJaN$restructure.uint16, - enableFlags: $gfJaN$restructure.uint32, - disableFlags: $gfJaN$restructure.uint32 -}); -let $ef40c6dc80fd50a2$var$MorxChain = new $gfJaN$restructure.Struct({ - defaultFlags: $gfJaN$restructure.uint32, - chainLength: $gfJaN$restructure.uint32, - nFeatureEntries: $gfJaN$restructure.uint32, - nSubtables: $gfJaN$restructure.uint32, - features: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$FeatureEntry, 'nFeatureEntries'), - subtables: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$Subtable, 'nSubtables') -}); -var $ef40c6dc80fd50a2$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint16, - unused: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - nChains: $gfJaN$restructure.uint32, - chains: new $gfJaN$restructure.Array($ef40c6dc80fd50a2$var$MorxChain, 'nChains') -}); - - - - -let $ab24dea08b58a7cc$var$OpticalBounds = new $gfJaN$restructure.Struct({ - left: $gfJaN$restructure.int16, - top: $gfJaN$restructure.int16, - right: $gfJaN$restructure.int16, - bottom: $gfJaN$restructure.int16 -}); -var $ab24dea08b58a7cc$export$2e2bcd8739ae039 = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.fixed32, - format: $gfJaN$restructure.uint16, - lookupTable: new (0, $22801616bd931ca3$export$8351f8c2ae2f103c)($ab24dea08b58a7cc$var$OpticalBounds) -}); - - -let $5825c04ce8f7102d$var$tables = {}; -var $5825c04ce8f7102d$export$2e2bcd8739ae039 = $5825c04ce8f7102d$var$tables; -$5825c04ce8f7102d$var$tables.cmap = (0, $e4ae0436c91af89f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.head = (0, $55a60976afb7c261$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hhea = (0, $dde72b7b5b650596$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hmtx = (0, $a7c40184072c9a5b$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.maxp = (0, $521197722369f691$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.name = (0, $51a9f4feb3a3b2b1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['OS/2'] = (0, $114ea85db469b435$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.post = (0, $f93b30299e1ea0f5$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fpgm = (0, $873d79fea57d3161$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.loca = (0, $83c4155666d50c37$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.prep = (0, $b12598db7cdf7042$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['cvt '] = (0, $8fb09b0f473d61a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.glyf = (0, $7707bdf21a3d89cc$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF '] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables['CFF2'] = (0, $f717432b360040c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VORG = (0, $8cb7ae73ed7aa7d8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.EBLC = (0, $035bb95c0cdb1f6d$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CBLC = $5825c04ce8f7102d$var$tables.EBLC; -$5825c04ce8f7102d$var$tables.sbix = (0, $73d13900b55a3c0c$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.COLR = (0, $97f6b8be3a347a8f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.CPAL = (0, $16ca60ecbdee30ea$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.BASE = (0, $7327e41706f9d5c7$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GDEF = (0, $7e48bbe9e5345664$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GPOS = (0, $b687332511a4da75$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.GSUB = (0, $99ccad60b96f92fb$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.JSTF = (0, $573d5042c76c4940$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.HVAR = (0, $a5875b80d6087f61$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.DSIG = (0, $4423bc1ac09bbbd1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gasp = (0, $7b50e3f8d83263de$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.hdmx = (0, $7bf92ec372cd2307$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.kern = (0, $a3f544bcf76542d1$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.LTSH = (0, $86687befb45925d0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.PCLT = (0, $91429006e51e0fe8$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.VDMX = (0, $627850fc9deed59a$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vhea = (0, $65c33f5f068fc77f$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.vmtx = (0, $597d739523b65bb3$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.avar = (0, $35aa0c87d9c3d3a0$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.bsln = (0, $3a5ca96d3e3aaf20$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.feat = (0, $8d4241d96b2b0589$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.fvar = (0, $a79cd5132b1cf476$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.gvar = (0, $3f36f1a5e6989457$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.just = (0, $0bd8fe7a6d1d9fb4$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.morx = (0, $ef40c6dc80fd50a2$export$2e2bcd8739ae039); -$5825c04ce8f7102d$var$tables.opbd = (0, $ab24dea08b58a7cc$export$2e2bcd8739ae039); - - -let $df50e1efe10a1247$var$TableEntry = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - checkSum: $gfJaN$restructure.uint32, - offset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void', { - type: 'global' - }), - length: $gfJaN$restructure.uint32 -}); -let $df50e1efe10a1247$var$Directory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - numTables: $gfJaN$restructure.uint16, - searchRange: $gfJaN$restructure.uint16, - entrySelector: $gfJaN$restructure.uint16, - rangeShift: $gfJaN$restructure.uint16, - tables: new $gfJaN$restructure.Array($df50e1efe10a1247$var$TableEntry, 'numTables') -}); -$df50e1efe10a1247$var$Directory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -$df50e1efe10a1247$var$Directory.preEncode = function() { - if (!Array.isArray(this.tables)) { - let tables = []; - for(let tag in this.tables){ - let table = this.tables[tag]; - if (table) tables.push({ - tag: tag, - checkSum: 0, - offset: new $gfJaN$restructure.VoidPointer((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag], table), - length: (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag].size(table) - }); - } - this.tables = tables; - } - this.tag = 'true'; - this.numTables = this.tables.length; - let maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2); - let maxPowerOf2 = Math.pow(2, maxExponentFor2); - this.searchRange = maxPowerOf2 * 16; - this.entrySelector = Math.log(maxPowerOf2) / Math.LN2; - this.rangeShift = this.numTables * 16 - this.searchRange; -}; -var $df50e1efe10a1247$export$2e2bcd8739ae039 = $df50e1efe10a1247$var$Directory; - - - - -function $66a5b9fb5318558a$export$2e0ae67339d5f1ac(arr, cmp) { - let min = 0; - let max = arr.length - 1; - while(min <= max){ - let mid = min + max >> 1; - let res = cmp(arr[mid]); - if (res < 0) max = mid - 1; - else if (res > 0) min = mid + 1; - else return mid; - } - return -1; -} -function $66a5b9fb5318558a$export$d02631cccf789723(index, end) { - let range = []; - while(index < end)range.push(index++); - return range; -} -const $66a5b9fb5318558a$export$3d28c1996ced1f14 = new TextDecoder('ascii'); -// Based on https://github.com/niklasvh/base64-arraybuffer. MIT license. -const $66a5b9fb5318558a$var$CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -const $66a5b9fb5318558a$var$LOOKUP = new Uint8Array(256); -for(let i = 0; i < $66a5b9fb5318558a$var$CHARS.length; i++)$66a5b9fb5318558a$var$LOOKUP[$66a5b9fb5318558a$var$CHARS.charCodeAt(i)] = i; -function $66a5b9fb5318558a$export$94fdf11bafc8de6b(base64) { - let bufferLength = base64.length * 0.75; - if (base64[base64.length - 1] === '=') { - bufferLength--; - if (base64[base64.length - 2] === '=') bufferLength--; - } - let bytes = new Uint8Array(bufferLength); - let p = 0; - for(let i = 0, len = base64.length; i < len; i += 4){ - let encoded1 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i)]; - let encoded2 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 1)]; - let encoded3 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 2)]; - let encoded4 = $66a5b9fb5318558a$var$LOOKUP[base64.charCodeAt(i + 3)]; - bytes[p++] = encoded1 << 2 | encoded2 >> 4; - bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; - bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; - } - return bytes; -} - - - - -class $0d6e160064c86e50$export$2e2bcd8739ae039 { - findSubtable(cmapTable, pairs) { - for (let [platformID, encodingID] of pairs)for (let cmap of cmapTable.tables){ - if (cmap.platformID === platformID && cmap.encodingID === encodingID) return cmap.table; - } - return null; - } - lookup(codepoint, variationSelector) { - // If there is no Unicode cmap in this font, we need to re-encode - // the codepoint in the encoding that the cmap supports. - if (this.encoding) codepoint = this.encoding.get(codepoint) || codepoint; - else if (variationSelector) { - let gid = this.getVariationSelector(codepoint, variationSelector); - if (gid) return gid; - } - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return cmap.codeMap.get(codepoint) || 0; - case 4: - { - let min = 0; - let max = cmap.segCount - 1; - while(min <= max){ - let mid = min + max >> 1; - if (codepoint < cmap.startCode.get(mid)) max = mid - 1; - else if (codepoint > cmap.endCode.get(mid)) min = mid + 1; - else { - let rangeOffset = cmap.idRangeOffset.get(mid); - let gid; - if (rangeOffset === 0) gid = codepoint + cmap.idDelta.get(mid); - else { - let index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); - gid = cmap.glyphIndexArray.get(index) || 0; - if (gid !== 0) gid += cmap.idDelta.get(mid); - } - return gid & 0xffff; - } - } - return 0; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; - case 12: - case 13: - { - let min = 0; - let max = cmap.nGroups - 1; - while(min <= max){ - let mid = min + max >> 1; - let group = cmap.groups.get(mid); - if (codepoint < group.startCharCode) max = mid - 1; - else if (codepoint > group.endCharCode) min = mid + 1; - else { - if (cmap.version === 12) return group.glyphID + (codepoint - group.startCharCode); - else return group.glyphID; - } - } - return 0; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - getVariationSelector(codepoint, variationSelector) { - if (!this.uvs) return 0; - let selectors = this.uvs.varSelectors.toArray(); - let i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(selectors, (x)=>variationSelector - x.varSelector); - let sel = selectors[i]; - if (i !== -1 && sel.defaultUVS) i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.defaultUVS, (x)=>codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? 1 : 0); - if (i !== -1 && sel.nonDefaultUVS) { - i = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(sel.nonDefaultUVS, (x)=>codepoint - x.unicodeValue); - if (i !== -1) return sel.nonDefaultUVS[i].glyphID; - } - return 0; - } - getCharacterSet() { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(0, cmap.codeMap.length); - case 4: - { - let res = []; - let endCodes = cmap.endCode.toArray(); - for(let i = 0; i < endCodes.length; i++){ - let tail = endCodes[i] + 1; - let start = cmap.startCode.get(i); - res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(start, tail)); - } - return res; - } - case 8: - throw new Error('TODO: cmap format 8'); - case 6: - case 10: - return (0, $66a5b9fb5318558a$export$d02631cccf789723)(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); - case 12: - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - case 14: - throw new Error('TODO: cmap format 14'); - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - codePointsForGlyph(gid) { - let cmap = this.cmap; - switch(cmap.version){ - case 0: - { - let res = []; - for(let i = 0; i < 256; i++)if (cmap.codeMap.get(i) === gid) res.push(i); - return res; - } - case 4: - { - let res = []; - for(let i = 0; i < cmap.segCount; i++){ - let end = cmap.endCode.get(i); - let start = cmap.startCode.get(i); - let rangeOffset = cmap.idRangeOffset.get(i); - let delta = cmap.idDelta.get(i); - for(var c = start; c <= end; c++){ - let g = 0; - if (rangeOffset === 0) g = c + delta; - else { - let index = rangeOffset / 2 + (c - start) - (cmap.segCount - i); - g = cmap.glyphIndexArray.get(index) || 0; - if (g !== 0) g += delta; - } - if (g === gid) res.push(c); - } - } - return res; - } - case 12: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) res.push(group.startCharCode + (gid - group.glyphID)); - return res; - } - case 13: - { - let res = []; - for (let group of cmap.groups.toArray())if (gid === group.glyphID) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(group.startCharCode, group.endCharCode + 1)); - return res; - } - default: - throw new Error(`Unknown cmap format ${cmap.version}`); - } - } - constructor(cmapTable){ - // Attempt to find a Unicode cmap first - this.encoding = null; - this.cmap = this.findSubtable(cmapTable, [ - // 32-bit subtables - [ - 3, - 10 - ], - [ - 0, - 6 - ], - [ - 0, - 4 - ], - // 16-bit subtables - [ - 3, - 1 - ], - [ - 0, - 3 - ], - [ - 0, - 2 - ], - [ - 0, - 1 - ], - [ - 0, - 0 - ] - ]); - // If not unicode cmap was found, take the first table with a supported encoding. - if (!this.cmap) for (let cmap of cmapTable.tables){ - let encoding = (0, $e2613b812f052cbe$export$badc544e0651b6b1)(cmap.platformID, cmap.encodingID, cmap.table.language - 1); - let mapping = (0, $e2613b812f052cbe$export$1dceb3c14ed68bee)(encoding); - if (mapping) { - this.cmap = cmap.table; - this.encoding = mapping; - } - } - if (!this.cmap) throw new Error("Could not find a supported cmap table"); - this.uvs = this.findSubtable(cmapTable, [ - [ - 0, - 5 - ] - ]); - if (this.uvs && this.uvs.version !== 14) this.uvs = null; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "getCharacterSet", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0d6e160064c86e50$export$2e2bcd8739ae039.prototype, "codePointsForGlyph", null); - - - -class $4646d52c2a559cdb$export$2e2bcd8739ae039 { - process(glyphs, positions) { - for(let glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++){ - let left = glyphs[glyphIndex].id; - let right = glyphs[glyphIndex + 1].id; - positions[glyphIndex].xAdvance += this.getKerning(left, right); - } - } - getKerning(left, right) { - let res = 0; - for (let table of this.kern.tables){ - if (table.coverage.crossStream) continue; - switch(table.version){ - case 0: - if (!table.coverage.horizontal) continue; - break; - case 1: - if (table.coverage.vertical || table.coverage.variation) continue; - break; - default: - throw new Error(`Unsupported kerning table version ${table.version}`); - } - let val = 0; - let s = table.subtable; - switch(table.format){ - case 0: - let pairIdx = (0, $66a5b9fb5318558a$export$2e0ae67339d5f1ac)(s.pairs, function(pair) { - return left - pair.left || right - pair.right; - }); - if (pairIdx >= 0) val = s.pairs[pairIdx].value; - break; - case 2: - let leftOffset = 0, rightOffset = 0; - if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; - else leftOffset = s.array.off; - if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; - let index = (leftOffset + rightOffset - s.array.off) / 2; - val = s.array.values.get(index); - break; - case 3: - if (left >= s.glyphCount || right >= s.glyphCount) return 0; - val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; - break; - default: - throw new Error(`Unsupported kerning sub-table format ${table.format}`); - } - // Microsoft supports the override flag, which resets the result - // Otherwise, the sum of the results from all subtables is returned - if (table.coverage.override) res = val; - else res += val; - } - return res; - } - constructor(font){ - this.kern = font.kern; - } -} - - - -class $a57a26817cd35108$export$2e2bcd8739ae039 { - positionGlyphs(glyphs, positions) { - // find each base + mark cluster, and position the marks relative to the base - let clusterStart = 0; - let clusterEnd = 0; - for(let index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.isMark) clusterEnd = index; - else { - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - clusterStart = clusterEnd = index; - } - } - if (clusterStart !== clusterEnd) this.positionCluster(glyphs, positions, clusterStart, clusterEnd); - return positions; - } - positionCluster(glyphs, positions, clusterStart, clusterEnd) { - let base = glyphs[clusterStart]; - let baseBox = base.cbox.copy(); - // adjust bounding box for ligature glyphs - if (base.codePoints.length > 1) // LTR. TODO: RTL support. - baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; - let xOffset = -positions[clusterStart].xAdvance; - let yOffset = 0; - let yGap = this.font.unitsPerEm / 16; - // position each of the mark glyphs relative to the base glyph - for(let index = clusterStart + 1; index <= clusterEnd; index++){ - let mark = glyphs[index]; - let markBox = mark.cbox; - let position = positions[index]; - let combiningClass = this.getCombiningClass(mark.codePoints[0]); - if (combiningClass !== 'Not_Reordered') { - position.xOffset = position.yOffset = 0; - // x positioning - switch(combiningClass){ - case 'Double_Above': - case 'Double_Below': - // LTR. TODO: RTL support. - position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; - break; - case 'Attached_Below_Left': - case 'Below_Left': - case 'Above_Left': - // left align - position.xOffset += baseBox.minX - markBox.minX; - break; - case 'Attached_Above_Right': - case 'Below_Right': - case 'Above_Right': - // right align - position.xOffset += baseBox.maxX - markBox.width - markBox.minX; - break; - default: - // center align - position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; - } - // y positioning - switch(combiningClass){ - case 'Double_Below': - case 'Below_Left': - case 'Below': - case 'Below_Right': - case 'Attached_Below_Left': - case 'Attached_Below': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') baseBox.minY += yGap; - position.yOffset = -baseBox.minY - markBox.maxY; - baseBox.minY += markBox.height; - break; - case 'Double_Above': - case 'Above_Left': - case 'Above': - case 'Above_Right': - case 'Attached_Above': - case 'Attached_Above_Right': - // add a small gap between the glyphs if they are not attached - if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') baseBox.maxY += yGap; - position.yOffset = baseBox.maxY - markBox.minY; - baseBox.maxY += markBox.height; - break; - } - position.xAdvance = position.yAdvance = 0; - position.xOffset += xOffset; - position.yOffset += yOffset; - } else { - xOffset -= position.xAdvance; - yOffset -= position.yAdvance; - } - } - return; - } - getCombiningClass(codePoint) { - let combiningClass = (0, $gfJaN$unicodeproperties.getCombiningClass)(codePoint); - // Thai / Lao need some per-character work - if ((codePoint & -256) === 0x0e00) { - if (combiningClass === 'Not_Reordered') switch(codePoint){ - case 0x0e31: - case 0x0e34: - case 0x0e35: - case 0x0e36: - case 0x0e37: - case 0x0e47: - case 0x0e4c: - case 0x0e3d: - case 0x0e4e: - return 'Above_Right'; - case 0x0eb1: - case 0x0eb4: - case 0x0eb5: - case 0x0eb6: - case 0x0eb7: - case 0x0ebb: - case 0x0ecc: - case 0x0ecd: - return 'Above'; - case 0x0ebc: - return 'Below'; - } - else if (codePoint === 0x0e3a) return 'Below_Right'; - } - switch(combiningClass){ - // Hebrew - case 'CCC10': - case 'CCC11': - case 'CCC12': - case 'CCC13': - case 'CCC14': - case 'CCC15': - case 'CCC16': - case 'CCC17': - case 'CCC18': - case 'CCC20': - case 'CCC22': - return 'Below'; - case 'CCC23': - return 'Attached_Above'; - case 'CCC24': - return 'Above_Right'; - case 'CCC25': - case 'CCC19': - return 'Above_Left'; - case 'CCC26': - return 'Above'; - case 'CCC21': - break; - // Arabic and Syriac - case 'CCC27': - case 'CCC28': - case 'CCC30': - case 'CCC31': - case 'CCC33': - case 'CCC34': - case 'CCC35': - case 'CCC36': - return 'Above'; - case 'CCC29': - case 'CCC32': - return 'Below'; - // Thai - case 'CCC103': - return 'Below_Right'; - case 'CCC107': - return 'Above_Right'; - // Lao - case 'CCC118': - return 'Below'; - case 'CCC122': - return 'Above'; - // Tibetan - case 'CCC129': - case 'CCC132': - return 'Below'; - case 'CCC130': - return 'Above'; - } - return combiningClass; - } - constructor(font){ - this.font = font; - } -} - - -/** - * Represents a glyph bounding box - */ class $0e2da1c4ce69e8ad$export$2e2bcd8739ae039 { - /** - * The width of the bounding box - * @type {number} - */ get width() { - return this.maxX - this.minX; - } - /** - * The height of the bounding box - * @type {number} - */ get height() { - return this.maxY - this.minY; - } - addPoint(x, y) { - if (Math.abs(x) !== Infinity) { - if (x < this.minX) this.minX = x; - if (x > this.maxX) this.maxX = x; - } - if (Math.abs(y) !== Infinity) { - if (y < this.minY) this.minY = y; - if (y > this.maxY) this.maxY = y; - } - } - copy() { - return new $0e2da1c4ce69e8ad$export$2e2bcd8739ae039(this.minX, this.minY, this.maxX, this.maxY); - } - constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity){ - /** - * The minimum X position in the bounding box - * @type {number} - */ this.minX = minX; - /** - * The minimum Y position in the bounding box - * @type {number} - */ this.minY = minY; - /** - * The maxmimum X position in the bounding box - * @type {number} - */ this.maxX = maxX; - /** - * The maxmimum Y position in the bounding box - * @type {number} - */ this.maxY = maxY; - } -} - - - -// This maps the Unicode Script property to an OpenType script tag -// Data from http://www.microsoft.com/typography/otspec/scripttags.htm -// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. -const $e38a1a895f6aeb54$var$UNICODE_SCRIPTS = { - Caucasian_Albanian: 'aghb', - Arabic: 'arab', - Imperial_Aramaic: 'armi', - Armenian: 'armn', - Avestan: 'avst', - Balinese: 'bali', - Bamum: 'bamu', - Bassa_Vah: 'bass', - Batak: 'batk', - Bengali: [ - 'bng2', - 'beng' - ], - Bopomofo: 'bopo', - Brahmi: 'brah', - Braille: 'brai', - Buginese: 'bugi', - Buhid: 'buhd', - Chakma: 'cakm', - Canadian_Aboriginal: 'cans', - Carian: 'cari', - Cham: 'cham', - Cherokee: 'cher', - Coptic: 'copt', - Cypriot: 'cprt', - Cyrillic: 'cyrl', - Devanagari: [ - 'dev2', - 'deva' - ], - Deseret: 'dsrt', - Duployan: 'dupl', - Egyptian_Hieroglyphs: 'egyp', - Elbasan: 'elba', - Ethiopic: 'ethi', - Georgian: 'geor', - Glagolitic: 'glag', - Gothic: 'goth', - Grantha: 'gran', - Greek: 'grek', - Gujarati: [ - 'gjr2', - 'gujr' - ], - Gurmukhi: [ - 'gur2', - 'guru' - ], - Hangul: 'hang', - Han: 'hani', - Hanunoo: 'hano', - Hebrew: 'hebr', - Hiragana: 'hira', - Pahawh_Hmong: 'hmng', - Katakana_Or_Hiragana: 'hrkt', - Old_Italic: 'ital', - Javanese: 'java', - Kayah_Li: 'kali', - Katakana: 'kana', - Kharoshthi: 'khar', - Khmer: 'khmr', - Khojki: 'khoj', - Kannada: [ - 'knd2', - 'knda' - ], - Kaithi: 'kthi', - Tai_Tham: 'lana', - Lao: 'lao ', - Latin: 'latn', - Lepcha: 'lepc', - Limbu: 'limb', - Linear_A: 'lina', - Linear_B: 'linb', - Lisu: 'lisu', - Lycian: 'lyci', - Lydian: 'lydi', - Mahajani: 'mahj', - Mandaic: 'mand', - Manichaean: 'mani', - Mende_Kikakui: 'mend', - Meroitic_Cursive: 'merc', - Meroitic_Hieroglyphs: 'mero', - Malayalam: [ - 'mlm2', - 'mlym' - ], - Modi: 'modi', - Mongolian: 'mong', - Mro: 'mroo', - Meetei_Mayek: 'mtei', - Myanmar: [ - 'mym2', - 'mymr' - ], - Old_North_Arabian: 'narb', - Nabataean: 'nbat', - Nko: 'nko ', - Ogham: 'ogam', - Ol_Chiki: 'olck', - Old_Turkic: 'orkh', - Oriya: [ - 'ory2', - 'orya' - ], - Osmanya: 'osma', - Palmyrene: 'palm', - Pau_Cin_Hau: 'pauc', - Old_Permic: 'perm', - Phags_Pa: 'phag', - Inscriptional_Pahlavi: 'phli', - Psalter_Pahlavi: 'phlp', - Phoenician: 'phnx', - Miao: 'plrd', - Inscriptional_Parthian: 'prti', - Rejang: 'rjng', - Runic: 'runr', - Samaritan: 'samr', - Old_South_Arabian: 'sarb', - Saurashtra: 'saur', - Shavian: 'shaw', - Sharada: 'shrd', - Siddham: 'sidd', - Khudawadi: 'sind', - Sinhala: 'sinh', - Sora_Sompeng: 'sora', - Sundanese: 'sund', - Syloti_Nagri: 'sylo', - Syriac: 'syrc', - Tagbanwa: 'tagb', - Takri: 'takr', - Tai_Le: 'tale', - New_Tai_Lue: 'talu', - Tamil: [ - 'tml2', - 'taml' - ], - Tai_Viet: 'tavt', - Telugu: [ - 'tel2', - 'telu' - ], - Tifinagh: 'tfng', - Tagalog: 'tglg', - Thaana: 'thaa', - Thai: 'thai', - Tibetan: 'tibt', - Tirhuta: 'tirh', - Ugaritic: 'ugar', - Vai: 'vai ', - Warang_Citi: 'wara', - Old_Persian: 'xpeo', - Cuneiform: 'xsux', - Yi: 'yi ', - Inherited: 'zinh', - Common: 'zyyy', - Unknown: 'zzzz' -}; -const $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS = {}; -for(let script in $e38a1a895f6aeb54$var$UNICODE_SCRIPTS){ - let tag = $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - if (Array.isArray(tag)) for (let t of tag)$e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[t] = script; - else $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag] = script; -} -function $e38a1a895f6aeb54$export$b32f0b5f69d65e51(script) { - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; -} -function $e38a1a895f6aeb54$export$ce50e82f12a827a4(tag) { - return $e38a1a895f6aeb54$var$OPENTYPE_SCRIPTS[tag]; -} -function $e38a1a895f6aeb54$export$e5cb25e204fb8450(string) { - let len = string.length; - let idx = 0; - while(idx < len){ - let code = string.charCodeAt(idx++); - // Check if this is a high surrogate - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - // Check if this is a low surrogate - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; - } - } - let script = (0, $gfJaN$unicodeproperties.getScript)(code); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -function $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints) { - for(let i = 0; i < codePoints.length; i++){ - let codePoint = codePoints[i]; - let script = (0, $gfJaN$unicodeproperties.getScript)(codePoint); - if (script !== 'Common' && script !== 'Inherited' && script !== 'Unknown') return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS[script]; - } - return $e38a1a895f6aeb54$var$UNICODE_SCRIPTS.Unknown; -} -// The scripts in this map are written from right to left -const $e38a1a895f6aeb54$var$RTL = { - arab: true, - hebr: true, - syrc: true, - thaa: true, - cprt: true, - khar: true, - phnx: true, - 'nko ': true, - lydi: true, - avst: true, - armi: true, - phli: true, - prti: true, - sarb: true, - orkh: true, - samr: true, - mand: true, - merc: true, - mero: true, - // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) - mani: true, - mend: true, - nbat: true, - narb: true, - palm: true, - phlp: true // Psalter Pahlavi -}; -function $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script) { - if ($e38a1a895f6aeb54$var$RTL[script]) return 'rtl'; - return 'ltr'; -} - - -class $b19c79ec7a94fa39$export$2e2bcd8739ae039 { - /** - * The total advance width of the run. - * @type {number} - */ get advanceWidth() { - let width = 0; - for (let position of this.positions)width += position.xAdvance; - return width; - } - /** - * The total advance height of the run. - * @type {number} - */ get advanceHeight() { - let height = 0; - for (let position of this.positions)height += position.yAdvance; - return height; - } - /** - * The bounding box containing all glyphs in the run. - * @type {BBox} - */ get bbox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let x = 0; - let y = 0; - for(let index = 0; index < this.glyphs.length; index++){ - let glyph = this.glyphs[index]; - let p = this.positions[index]; - let b = glyph.bbox; - bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); - bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); - x += p.xAdvance; - y += p.yAdvance; - } - return bbox; - } - constructor(glyphs, features, script, language, direction){ - /** - * An array of Glyph objects in the run - * @type {Glyph[]} - */ this.glyphs = glyphs; - /** - * An array of GlyphPosition objects for each glyph in the run - * @type {GlyphPosition[]} - */ this.positions = null; - /** - * The script that was requested for shaping. This was either passed in or detected automatically. - * @type {string} - */ this.script = script; - /** - * The language requested for shaping, as passed in. If `null`, the default language for the - * script was used. - * @type {string} - */ this.language = language || null; - /** - * The direction requested for shaping, as passed in (either ltr or rtl). - * If `null`, the default direction of the script is used. - * @type {string} - */ this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - /** - * The features requested during shaping. This is a combination of user - * specified features and features chosen by the shaper. - * @type {object} - */ this.features = {}; - // Convert features to an object - if (Array.isArray(features)) for (let tag of features)this.features[tag] = true; - else if (typeof features === 'object') this.features = features; - } -} - - -/** - * Represents positioning information for a glyph in a GlyphRun. - */ class $9195cf1266c12ea5$export$2e2bcd8739ae039 { - constructor(xAdvance = 0, yAdvance = 0, xOffset = 0, yOffset = 0){ - /** - * The amount to move the virtual pen in the X direction after rendering this glyph. - * @type {number} - */ this.xAdvance = xAdvance; - /** - * The amount to move the virtual pen in the Y direction after rendering this glyph. - * @type {number} - */ this.yAdvance = yAdvance; - /** - * The offset from the pen position in the X direction at which to render this glyph. - * @type {number} - */ this.xOffset = xOffset; - /** - * The offset from the pen position in the Y direction at which to render this glyph. - * @type {number} - */ this.yOffset = yOffset; - } -} - - - -// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html -// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac -const $2b7f887ebcb5888a$var$features = { - allTypographicFeatures: { - code: 0, - exclusive: false, - allTypeFeatures: 0 - }, - ligatures: { - code: 1, - exclusive: false, - requiredLigatures: 0, - commonLigatures: 2, - rareLigatures: 4, - // logos: 6 - rebusPictures: 8, - diphthongLigatures: 10, - squaredLigatures: 12, - abbrevSquaredLigatures: 14, - symbolLigatures: 16, - contextualLigatures: 18, - historicalLigatures: 20 - }, - cursiveConnection: { - code: 2, - exclusive: true, - unconnected: 0, - partiallyConnected: 1, - cursive: 2 - }, - letterCase: { - code: 3, - exclusive: true - }, - // upperAndLowerCase: 0 # deprecated - // allCaps: 1 # deprecated - // allLowerCase: 2 # deprecated - // smallCaps: 3 # deprecated - // initialCaps: 4 # deprecated - // initialCapsAndSmallCaps: 5 # deprecated - verticalSubstitution: { - code: 4, - exclusive: false, - substituteVerticalForms: 0 - }, - linguisticRearrangement: { - code: 5, - exclusive: false, - linguisticRearrangement: 0 - }, - numberSpacing: { - code: 6, - exclusive: true, - monospacedNumbers: 0, - proportionalNumbers: 1, - thirdWidthNumbers: 2, - quarterWidthNumbers: 3 - }, - smartSwash: { - code: 8, - exclusive: false, - wordInitialSwashes: 0, - wordFinalSwashes: 2, - // lineInitialSwashes: 4 - // lineFinalSwashes: 6 - nonFinalSwashes: 8 - }, - diacritics: { - code: 9, - exclusive: true, - showDiacritics: 0, - hideDiacritics: 1, - decomposeDiacritics: 2 - }, - verticalPosition: { - code: 10, - exclusive: true, - normalPosition: 0, - superiors: 1, - inferiors: 2, - ordinals: 3, - scientificInferiors: 4 - }, - fractions: { - code: 11, - exclusive: true, - noFractions: 0, - verticalFractions: 1, - diagonalFractions: 2 - }, - overlappingCharacters: { - code: 13, - exclusive: false, - preventOverlap: 0 - }, - typographicExtras: { - code: 14, - exclusive: false, - // hyphensToEmDash: 0 - // hyphenToEnDash: 2 - slashedZero: 4 - }, - // formInterrobang: 6 - // smartQuotes: 8 - // periodsToEllipsis: 10 - mathematicalExtras: { - code: 15, - exclusive: false, - // hyphenToMinus: 0 - // asteristoMultiply: 2 - // slashToDivide: 4 - // inequalityLigatures: 6 - // exponents: 8 - mathematicalGreek: 10 - }, - ornamentSets: { - code: 16, - exclusive: true, - noOrnaments: 0, - dingbats: 1, - piCharacters: 2, - fleurons: 3, - decorativeBorders: 4, - internationalSymbols: 5, - mathSymbols: 6 - }, - characterAlternatives: { - code: 17, - exclusive: true, - noAlternates: 0 - }, - // user defined options - designComplexity: { - code: 18, - exclusive: true, - designLevel1: 0, - designLevel2: 1, - designLevel3: 2, - designLevel4: 3, - designLevel5: 4 - }, - styleOptions: { - code: 19, - exclusive: true, - noStyleOptions: 0, - displayText: 1, - engravedText: 2, - illuminatedCaps: 3, - titlingCaps: 4, - tallCaps: 5 - }, - characterShape: { - code: 20, - exclusive: true, - traditionalCharacters: 0, - simplifiedCharacters: 1, - JIS1978Characters: 2, - JIS1983Characters: 3, - JIS1990Characters: 4, - traditionalAltOne: 5, - traditionalAltTwo: 6, - traditionalAltThree: 7, - traditionalAltFour: 8, - traditionalAltFive: 9, - expertCharacters: 10, - JIS2004Characters: 11, - hojoCharacters: 12, - NLCCharacters: 13, - traditionalNamesCharacters: 14 - }, - numberCase: { - code: 21, - exclusive: true, - lowerCaseNumbers: 0, - upperCaseNumbers: 1 - }, - textSpacing: { - code: 22, - exclusive: true, - proportionalText: 0, - monospacedText: 1, - halfWidthText: 2, - thirdWidthText: 3, - quarterWidthText: 4, - altProportionalText: 5, - altHalfWidthText: 6 - }, - transliteration: { - code: 23, - exclusive: true, - noTransliteration: 0 - }, - // hanjaToHangul: 1 - // hiraganaToKatakana: 2 - // katakanaToHiragana: 3 - // kanaToRomanization: 4 - // romanizationToHiragana: 5 - // romanizationToKatakana: 6 - // hanjaToHangulAltOne: 7 - // hanjaToHangulAltTwo: 8 - // hanjaToHangulAltThree: 9 - annotation: { - code: 24, - exclusive: true, - noAnnotation: 0, - boxAnnotation: 1, - roundedBoxAnnotation: 2, - circleAnnotation: 3, - invertedCircleAnnotation: 4, - parenthesisAnnotation: 5, - periodAnnotation: 6, - romanNumeralAnnotation: 7, - diamondAnnotation: 8, - invertedBoxAnnotation: 9, - invertedRoundedBoxAnnotation: 10 - }, - kanaSpacing: { - code: 25, - exclusive: true, - fullWidthKana: 0, - proportionalKana: 1 - }, - ideographicSpacing: { - code: 26, - exclusive: true, - fullWidthIdeographs: 0, - proportionalIdeographs: 1, - halfWidthIdeographs: 2 - }, - unicodeDecomposition: { - code: 27, - exclusive: false, - canonicalComposition: 0, - compatibilityComposition: 2, - transcodingComposition: 4 - }, - rubyKana: { - code: 28, - exclusive: false, - // noRubyKana: 0 # deprecated - use rubyKanaOff instead - // rubyKana: 1 # deprecated - use rubyKanaOn instead - rubyKana: 2 - }, - CJKSymbolAlternatives: { - code: 29, - exclusive: true, - noCJKSymbolAlternatives: 0, - CJKSymbolAltOne: 1, - CJKSymbolAltTwo: 2, - CJKSymbolAltThree: 3, - CJKSymbolAltFour: 4, - CJKSymbolAltFive: 5 - }, - ideographicAlternatives: { - code: 30, - exclusive: true, - noIdeographicAlternatives: 0, - ideographicAltOne: 1, - ideographicAltTwo: 2, - ideographicAltThree: 3, - ideographicAltFour: 4, - ideographicAltFive: 5 - }, - CJKVerticalRomanPlacement: { - code: 31, - exclusive: true, - CJKVerticalRomanCentered: 0, - CJKVerticalRomanHBaseline: 1 - }, - italicCJKRoman: { - code: 32, - exclusive: false, - // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead - // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead - CJKItalicRoman: 2 - }, - caseSensitiveLayout: { - code: 33, - exclusive: false, - caseSensitiveLayout: 0, - caseSensitiveSpacing: 2 - }, - alternateKana: { - code: 34, - exclusive: false, - alternateHorizKana: 0, - alternateVertKana: 2 - }, - stylisticAlternatives: { - code: 35, - exclusive: false, - noStylisticAlternates: 0, - stylisticAltOne: 2, - stylisticAltTwo: 4, - stylisticAltThree: 6, - stylisticAltFour: 8, - stylisticAltFive: 10, - stylisticAltSix: 12, - stylisticAltSeven: 14, - stylisticAltEight: 16, - stylisticAltNine: 18, - stylisticAltTen: 20, - stylisticAltEleven: 22, - stylisticAltTwelve: 24, - stylisticAltThirteen: 26, - stylisticAltFourteen: 28, - stylisticAltFifteen: 30, - stylisticAltSixteen: 32, - stylisticAltSeventeen: 34, - stylisticAltEighteen: 36, - stylisticAltNineteen: 38, - stylisticAltTwenty: 40 - }, - contextualAlternates: { - code: 36, - exclusive: false, - contextualAlternates: 0, - swashAlternates: 2, - contextualSwashAlternates: 4 - }, - lowerCase: { - code: 37, - exclusive: true, - defaultLowerCase: 0, - lowerCaseSmallCaps: 1, - lowerCasePetiteCaps: 2 - }, - upperCase: { - code: 38, - exclusive: true, - defaultUpperCase: 0, - upperCaseSmallCaps: 1, - upperCasePetiteCaps: 2 - }, - languageTag: { - code: 39, - exclusive: true - }, - CJKRomanSpacing: { - code: 103, - exclusive: true, - halfWidthCJKRoman: 0, - proportionalCJKRoman: 1, - defaultCJKRoman: 2, - fullWidthCJKRoman: 3 - } -}; -const $2b7f887ebcb5888a$var$feature = (name, selector)=>[ - $2b7f887ebcb5888a$var$features[name].code, - $2b7f887ebcb5888a$var$features[name][selector] - ]; -const $2b7f887ebcb5888a$var$OTMapping = { - rlig: $2b7f887ebcb5888a$var$feature('ligatures', 'requiredLigatures'), - clig: $2b7f887ebcb5888a$var$feature('ligatures', 'contextualLigatures'), - dlig: $2b7f887ebcb5888a$var$feature('ligatures', 'rareLigatures'), - hlig: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - liga: $2b7f887ebcb5888a$var$feature('ligatures', 'commonLigatures'), - hist: $2b7f887ebcb5888a$var$feature('ligatures', 'historicalLigatures'), - smcp: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCaseSmallCaps'), - pcap: $2b7f887ebcb5888a$var$feature('lowerCase', 'lowerCasePetiteCaps'), - frac: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - dnom: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - numr: $2b7f887ebcb5888a$var$feature('fractions', 'diagonalFractions'), - afrc: $2b7f887ebcb5888a$var$feature('fractions', 'verticalFractions'), - // aalt - // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? - // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? - // unic, vatu, vhal, vjmo, vpal, vrt2 - // dist -> trak table? - // kern, vkrn -> kern table - // lfbd + opbd + rtbd -> opbd table? - // mark, mkmk -> acnt table? - // locl -> languageTag + ltag table - case: $2b7f887ebcb5888a$var$feature('caseSensitiveLayout', 'caseSensitiveLayout'), - ccmp: $2b7f887ebcb5888a$var$feature('unicodeDecomposition', 'canonicalComposition'), - cpct: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - valt: $2b7f887ebcb5888a$var$feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), - swsh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'swashAlternates'), - cswh: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualSwashAlternates'), - curs: $2b7f887ebcb5888a$var$feature('cursiveConnection', 'cursive'), - c2pc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCasePetiteCaps'), - c2sc: $2b7f887ebcb5888a$var$feature('upperCase', 'upperCaseSmallCaps'), - init: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordInitialSwashes'), - fin2: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - medi: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - med2: $2b7f887ebcb5888a$var$feature('smartSwash', 'nonFinalSwashes'), - fin3: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - fina: $2b7f887ebcb5888a$var$feature('smartSwash', 'wordFinalSwashes'), - pkna: $2b7f887ebcb5888a$var$feature('kanaSpacing', 'proportionalKana'), - half: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - halt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altHalfWidthText'), - hkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateHorizKana'), - vkna: $2b7f887ebcb5888a$var$feature('alternateKana', 'alternateVertKana'), - // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated - ital: $2b7f887ebcb5888a$var$feature('italicCJKRoman', 'CJKItalicRoman'), - lnum: $2b7f887ebcb5888a$var$feature('numberCase', 'upperCaseNumbers'), - onum: $2b7f887ebcb5888a$var$feature('numberCase', 'lowerCaseNumbers'), - mgrk: $2b7f887ebcb5888a$var$feature('mathematicalExtras', 'mathematicalGreek'), - // nalt: not enough info. what type of annotation? - // ornm: ditto, which ornament style? - calt: $2b7f887ebcb5888a$var$feature('contextualAlternates', 'contextualAlternates'), - vrt2: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - vert: $2b7f887ebcb5888a$var$feature('verticalSubstitution', 'substituteVerticalForms'), - tnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'monospacedNumbers'), - pnum: $2b7f887ebcb5888a$var$feature('numberSpacing', 'proportionalNumbers'), - sups: $2b7f887ebcb5888a$var$feature('verticalPosition', 'superiors'), - subs: $2b7f887ebcb5888a$var$feature('verticalPosition', 'inferiors'), - ordn: $2b7f887ebcb5888a$var$feature('verticalPosition', 'ordinals'), - pwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - hwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'halfWidthText'), - qwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'quarterWidthText'), - twid: $2b7f887ebcb5888a$var$feature('textSpacing', 'thirdWidthText'), - fwid: $2b7f887ebcb5888a$var$feature('textSpacing', 'proportionalText'), - palt: $2b7f887ebcb5888a$var$feature('textSpacing', 'altProportionalText'), - trad: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalCharacters'), - smpl: $2b7f887ebcb5888a$var$feature('characterShape', 'simplifiedCharacters'), - jp78: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1978Characters'), - jp83: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1983Characters'), - jp90: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS1990Characters'), - jp04: $2b7f887ebcb5888a$var$feature('characterShape', 'JIS2004Characters'), - expt: $2b7f887ebcb5888a$var$feature('characterShape', 'expertCharacters'), - hojo: $2b7f887ebcb5888a$var$feature('characterShape', 'hojoCharacters'), - nlck: $2b7f887ebcb5888a$var$feature('characterShape', 'NLCCharacters'), - tnam: $2b7f887ebcb5888a$var$feature('characterShape', 'traditionalNamesCharacters'), - ruby: $2b7f887ebcb5888a$var$feature('rubyKana', 'rubyKana'), - titl: $2b7f887ebcb5888a$var$feature('styleOptions', 'titlingCaps'), - zero: $2b7f887ebcb5888a$var$feature('typographicExtras', 'slashedZero'), - ss01: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltOne'), - ss02: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwo'), - ss03: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThree'), - ss04: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFour'), - ss05: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFive'), - ss06: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSix'), - ss07: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeven'), - ss08: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEight'), - ss09: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNine'), - ss10: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTen'), - ss11: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEleven'), - ss12: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwelve'), - ss13: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltThirteen'), - ss14: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFourteen'), - ss15: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltFifteen'), - ss16: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSixteen'), - ss17: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltSeventeen'), - ss18: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltEighteen'), - ss19: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltNineteen'), - ss20: $2b7f887ebcb5888a$var$feature('stylisticAlternatives', 'stylisticAltTwenty') -}; -// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose -// Add cv01-cv99 features -for(let i = 1; i <= 99; i++)$2b7f887ebcb5888a$var$OTMapping[`cv${`00${i}`.slice(-2)}`] = [ - $2b7f887ebcb5888a$var$features.characterAlternatives.code, - i -]; -// create inverse mapping -let $2b7f887ebcb5888a$var$AATMapping = {}; -for(let ot in $2b7f887ebcb5888a$var$OTMapping){ - let aat = $2b7f887ebcb5888a$var$OTMapping[ot]; - if ($2b7f887ebcb5888a$var$AATMapping[aat[0]] == null) $2b7f887ebcb5888a$var$AATMapping[aat[0]] = {}; - $2b7f887ebcb5888a$var$AATMapping[aat[0]][aat[1]] = ot; -} -function $2b7f887ebcb5888a$export$b813f7d2a1677c16(features) { - let res = {}; - for(let k in features){ - let r; - if (r = $2b7f887ebcb5888a$var$OTMapping[k]) { - if (res[r[0]] == null) res[r[0]] = {}; - res[r[0]][r[1]] = features[k]; - } - } - return res; -} -// Maps strings in a [featureType, featureSetting] -// to their equivalent number codes -function $2b7f887ebcb5888a$var$mapFeatureStrings(f) { - let [type, setting] = f; - if (isNaN(type)) var typeCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type].code; - else var typeCode = type; - if (isNaN(setting)) var settingCode = $2b7f887ebcb5888a$var$features[type] && $2b7f887ebcb5888a$var$features[type][setting]; - else var settingCode = setting; - return [ - typeCode, - settingCode - ]; -} -function $2b7f887ebcb5888a$export$bd6df347a4f391c4(features) { - let res = {}; - if (Array.isArray(features)) for(let k = 0; k < features.length; k++){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings(features[k]); - if (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]]) res[r] = true; - } - else if (typeof features === 'object') for(let type in features){ - let feature = features[type]; - for(let setting in feature){ - let r; - let f = $2b7f887ebcb5888a$var$mapFeatureStrings([ - type, - setting - ]); - if (feature[setting] && (r = $2b7f887ebcb5888a$var$AATMapping[f[0]] && $2b7f887ebcb5888a$var$AATMapping[f[0]][f[1]])) res[r] = true; - } - } - return Object.keys(res); -} - - - - - - - -class $f3d63ae925545400$export$2e2bcd8739ae039 { - lookup(glyph) { - switch(this.table.version){ - case 0: - return this.table.values.getItem(glyph); - case 2: - case 4: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.firstGlyph === 0xffff) return null; - if (glyph < seg.firstGlyph) max = mid - 1; - else if (glyph > seg.lastGlyph) min = mid + 1; - else { - if (this.table.version === 2) return seg.value; - else return seg.values[glyph - seg.firstGlyph]; - } - } - return null; - } - case 6: - { - let min = 0; - let max = this.table.binarySearchHeader.nUnits - 1; - while(min <= max){ - var mid = min + max >> 1; - var seg = this.table.segments[mid]; - // special end of search value - if (seg.glyph === 0xffff) return null; - if (glyph < seg.glyph) max = mid - 1; - else if (glyph > seg.glyph) min = mid + 1; - else return seg.value; - } - return null; - } - case 8: - return this.table.values[glyph - this.table.firstGlyph]; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - } - glyphsForValue(classValue) { - let res = []; - switch(this.table.version){ - case 2: - case 4: - for (let segment of this.table.segments)if (this.table.version === 2 && segment.value === classValue) res.push(...(0, $66a5b9fb5318558a$export$d02631cccf789723)(segment.firstGlyph, segment.lastGlyph + 1)); - else { - for(let index = 0; index < segment.values.length; index++)if (segment.values[index] === classValue) res.push(segment.firstGlyph + index); - } - break; - case 6: - for (let segment of this.table.segments)if (segment.value === classValue) res.push(segment.glyph); - break; - case 8: - for(let i = 0; i < this.table.values.length; i++)if (this.table.values[i] === classValue) res.push(this.table.firstGlyph + i); - break; - default: - throw new Error(`Unknown lookup table format: ${this.table.version}`); - } - return res; - } - constructor(table){ - this.table = table; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $f3d63ae925545400$export$2e2bcd8739ae039.prototype, "glyphsForValue", null); - - -const $860c6347bb941b91$var$START_OF_TEXT_STATE = 0; -const $860c6347bb941b91$var$START_OF_LINE_STATE = 1; -const $860c6347bb941b91$var$END_OF_TEXT_CLASS = 0; -const $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS = 1; -const $860c6347bb941b91$var$DELETED_GLYPH_CLASS = 2; -const $860c6347bb941b91$var$END_OF_LINE_CLASS = 3; -const $860c6347bb941b91$var$DONT_ADVANCE = 0x4000; -class $860c6347bb941b91$export$2e2bcd8739ae039 { - process(glyphs, reverse, processEntry) { - let currentState = $860c6347bb941b91$var$START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? - let index = reverse ? glyphs.length - 1 : 0; - let dir = reverse ? -1 : 1; - while(dir === 1 && index <= glyphs.length || dir === -1 && index >= -1){ - let glyph = null; - let classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - let shouldAdvance = true; - if (index === glyphs.length || index === -1) classCode = $860c6347bb941b91$var$END_OF_TEXT_CLASS; - else { - glyph = glyphs[index]; - if (glyph.id === 0xffff) classCode = $860c6347bb941b91$var$DELETED_GLYPH_CLASS; - else { - classCode = this.lookupTable.lookup(glyph.id); - if (classCode == null) classCode = $860c6347bb941b91$var$OUT_OF_BOUNDS_CLASS; - } - } - let row = this.stateTable.stateArray.getItem(currentState); - let entryIndex = row[classCode]; - let entry = this.stateTable.entryTable.getItem(entryIndex); - if (classCode !== $860c6347bb941b91$var$END_OF_TEXT_CLASS && classCode !== $860c6347bb941b91$var$DELETED_GLYPH_CLASS) { - processEntry(glyph, entry, index); - shouldAdvance = !(entry.flags & $860c6347bb941b91$var$DONT_ADVANCE); - } - currentState = entry.newState; - if (shouldAdvance) index += dir; - } - return glyphs; - } - /** - * Performs a depth-first traversal of the glyph strings - * represented by the state machine. - */ traverse(opts, state = 0, visited = new Set) { - if (visited.has(state)) return; - visited.add(state); - let { nClasses: nClasses, stateArray: stateArray, entryTable: entryTable } = this.stateTable; - let row = stateArray.getItem(state); - // Skip predefined classes - for(let classCode = 4; classCode < nClasses; classCode++){ - let entryIndex = row[classCode]; - let entry = entryTable.getItem(entryIndex); - // Try all glyphs in the class - for (let glyph of this.lookupTable.glyphsForValue(classCode)){ - if (opts.enter) opts.enter(glyph, entry); - if (entry.newState !== 0) this.traverse(opts, entry.newState, visited); - if (opts.exit) opts.exit(glyph, entry); - } - } - } - constructor(stateTable){ - this.stateTable = stateTable; - this.lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(stateTable.classTable); - } -} - - - - -// indic replacement flags -const $99be642f82069918$var$MARK_FIRST = 0x8000; -const $99be642f82069918$var$MARK_LAST = 0x2000; -const $99be642f82069918$var$VERB = 0x000F; -// contextual substitution and glyph insertion flag -const $99be642f82069918$var$SET_MARK = 0x8000; -// ligature entry flags -const $99be642f82069918$var$SET_COMPONENT = 0x8000; -const $99be642f82069918$var$PERFORM_ACTION = 0x2000; -// ligature action masks -const $99be642f82069918$var$LAST_MASK = 0x80000000; -const $99be642f82069918$var$STORE_MASK = 0x40000000; -const $99be642f82069918$var$OFFSET_MASK = 0x3FFFFFFF; -const $99be642f82069918$var$VERTICAL_ONLY = 0x800000; -const $99be642f82069918$var$REVERSE_DIRECTION = 0x400000; -const $99be642f82069918$var$HORIZONTAL_AND_VERTICAL = 0x200000; -// glyph insertion flags -const $99be642f82069918$var$CURRENT_IS_KASHIDA_LIKE = 0x2000; -const $99be642f82069918$var$MARKED_IS_KASHIDA_LIKE = 0x1000; -const $99be642f82069918$var$CURRENT_INSERT_BEFORE = 0x0800; -const $99be642f82069918$var$MARKED_INSERT_BEFORE = 0x0400; -const $99be642f82069918$var$CURRENT_INSERT_COUNT = 0x03E0; -const $99be642f82069918$var$MARKED_INSERT_COUNT = 0x001F; -class $99be642f82069918$export$2e2bcd8739ae039 { - // Processes an array of glyphs and applies the specified features - // Features should be in the form of {featureType:{featureSetting:boolean}} - process(glyphs, features = {}) { - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - // enable/disable the requested features - for (let feature of chain.features){ - let f; - if (f = features[feature.featureType]) { - if (f[feature.featureSetting]) { - flags &= feature.disableFlags; - flags |= feature.enableFlags; - } else if (f[feature.featureSetting] === false) { - flags |= ~feature.disableFlags; - flags &= ~feature.enableFlags; - } - } - } - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.processSubtable(subtable, glyphs); - } - // remove deleted glyphs - let index = glyphs.length - 1; - while(index >= 0){ - if (glyphs[index].id === 0xffff) glyphs.splice(index, 1); - index--; - } - return glyphs; - } - processSubtable(subtable, glyphs) { - this.subtable = subtable; - this.glyphs = glyphs; - if (this.subtable.type === 4) { - this.processNoncontextualSubstitutions(this.subtable, this.glyphs); - return; - } - this.ligatureStack = []; - this.markedGlyph = null; - this.firstGlyph = null; - this.lastGlyph = null; - this.markedIndex = null; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let reverse = !!(this.subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - return stateMachine.process(this.glyphs, reverse, process); - } - getStateMachine(subtable) { - return new (0, $860c6347bb941b91$export$2e2bcd8739ae039)(subtable.table.stateTable); - } - getProcessor() { - switch(this.subtable.type){ - case 0: - return this.processIndicRearragement; - case 1: - return this.processContextualSubstitution; - case 2: - return this.processLigature; - case 4: - return this.processNoncontextualSubstitutions; - case 5: - return this.processGlyphInsertion; - default: - throw new Error(`Invalid morx subtable type: ${this.subtable.type}`); - } - } - processIndicRearragement(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$MARK_FIRST) this.firstGlyph = index; - if (entry.flags & $99be642f82069918$var$MARK_LAST) this.lastGlyph = index; - $99be642f82069918$var$reorderGlyphs(this.glyphs, entry.flags & $99be642f82069918$var$VERB, this.firstGlyph, this.lastGlyph); - } - processContextualSubstitution(glyph, entry, index) { - let subsitutions = this.subtable.table.substitutionTable.items; - if (entry.markIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.markIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[this.markedGlyph]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.currentIndex !== 0xffff) { - let lookup = subsitutions.getItem(entry.currentIndex); - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(lookup); - glyph = this.glyphs[index]; - var gid = lookupTable.lookup(glyph.id); - if (gid) this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedGlyph = index; - } - processLigature(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_COMPONENT) this.ligatureStack.push(index); - if (entry.flags & $99be642f82069918$var$PERFORM_ACTION) { - let actions = this.subtable.table.ligatureActions; - let components = this.subtable.table.components; - let ligatureList = this.subtable.table.ligatureList; - let actionIndex = entry.action; - let last = false; - let ligatureIndex = 0; - let codePoints = []; - let ligatureGlyphs = []; - while(!last){ - let componentGlyph = this.ligatureStack.pop(); - codePoints.unshift(...this.glyphs[componentGlyph].codePoints); - let action = actions.getItem(actionIndex++); - last = !!(action & $99be642f82069918$var$LAST_MASK); - let store = !!(action & $99be642f82069918$var$STORE_MASK); - let offset = (action & $99be642f82069918$var$OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits - offset += this.glyphs[componentGlyph].id; - let component = components.getItem(offset); - ligatureIndex += component; - if (last || store) { - let ligatureEntry = ligatureList.getItem(ligatureIndex); - this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); - ligatureGlyphs.push(componentGlyph); - ligatureIndex = 0; - codePoints = []; - } else this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); - } - // Put ligature glyph indexes back on the stack - this.ligatureStack.push(...ligatureGlyphs); - } - } - processNoncontextualSubstitutions(subtable, glyphs, index) { - let lookupTable = new (0, $f3d63ae925545400$export$2e2bcd8739ae039)(subtable.table.lookupTable); - for(index = 0; index < glyphs.length; index++){ - let glyph = glyphs[index]; - if (glyph.id !== 0xffff) { - let gid = lookupTable.lookup(glyph.id); - if (gid) glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); - } - } - } - _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { - let insertions = []; - while(count--){ - let gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); - insertions.push(this.font.getGlyph(gid)); - } - if (!isBefore) glyphIndex++; - this.glyphs.splice(glyphIndex, 0, ...insertions); - } - processGlyphInsertion(glyph, entry, index) { - if (entry.flags & $99be642f82069918$var$SET_MARK) this.markedIndex = index; - if (entry.markedInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$MARKED_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$MARKED_INSERT_BEFORE); - this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); - } - if (entry.currentInsertIndex !== 0xffff) { - let count = (entry.flags & $99be642f82069918$var$CURRENT_INSERT_COUNT) >>> 5; - let isBefore = !!(entry.flags & $99be642f82069918$var$CURRENT_INSERT_BEFORE); - this._insertGlyphs(index, entry.currentInsertIndex, count, isBefore); - } - } - getSupportedFeatures() { - let features = []; - for (let chain of this.morx.chains)for (let feature of chain.features)features.push([ - feature.featureType, - feature.featureSetting - ]); - return features; - } - generateInputs(gid) { - if (!this.inputCache) this.generateInputCache(); - return this.inputCache[gid] || []; - } - generateInputCache() { - this.inputCache = {}; - for (let chain of this.morx.chains){ - let flags = chain.defaultFlags; - for (let subtable of chain.subtables)if (subtable.subFeatureFlags & flags) this.generateInputsForSubtable(subtable); - } - } - generateInputsForSubtable(subtable) { - // Currently, only supporting ligature subtables. - if (subtable.type !== 2) return; - let reverse = !!(subtable.coverage & $99be642f82069918$var$REVERSE_DIRECTION); - if (reverse) throw new Error('Reverse subtable, not supported.'); - this.subtable = subtable; - this.ligatureStack = []; - let stateMachine = this.getStateMachine(subtable); - let process = this.getProcessor(); - let input = []; - let stack = []; - this.glyphs = []; - stateMachine.traverse({ - enter: (glyph, entry)=>{ - let glyphs = this.glyphs; - stack.push({ - glyphs: glyphs.slice(), - ligatureStack: this.ligatureStack.slice() - }); - // Add glyph to input and glyphs to process. - let g = this.font.getGlyph(glyph); - input.push(g); - glyphs.push(input[input.length - 1]); - // Process ligature substitution - process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); - // Add input to result if only one matching (non-deleted) glyph remains. - let count = 0; - let found = 0; - for(let i = 0; i < glyphs.length && count <= 1; i++)if (glyphs[i].id !== 0xffff) { - count++; - found = glyphs[i].id; - } - if (count === 1) { - let result = input.map((g)=>g.id); - let cache = this.inputCache[found]; - if (cache) cache.push(result); - else this.inputCache[found] = [ - result - ]; - } - }, - exit: ()=>{ - ({ glyphs: this.glyphs, ligatureStack: this.ligatureStack } = stack.pop()); - input.pop(); - } - }); - } - constructor(font){ - this.processIndicRearragement = this.processIndicRearragement.bind(this); - this.processContextualSubstitution = this.processContextualSubstitution.bind(this); - this.processLigature = this.processLigature.bind(this); - this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); - this.processGlyphInsertion = this.processGlyphInsertion.bind(this); - this.font = font; - this.morx = font.morx; - this.inputCache = null; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $99be642f82069918$export$2e2bcd8739ae039.prototype, "getStateMachine", null); -// swaps the glyphs in rangeA with those in rangeB -// reverse the glyphs inside those ranges if specified -// ranges are in [offset, length] format -function $99be642f82069918$var$swap(glyphs, rangeA, rangeB, reverseA = false, reverseB = false) { - let end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); - if (reverseB) end.reverse(); - let start = glyphs.splice(rangeA[0], rangeA[1], ...end); - if (reverseA) start.reverse(); - glyphs.splice(rangeB[0] - (rangeA[1] - 1), 0, ...start); - return glyphs; -} -function $99be642f82069918$var$reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { - let length = lastGlyph - firstGlyph + 1; - switch(verb){ - case 0: - return glyphs; - case 1: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 0 - ]); - case 2: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 1 - ]); - case 3: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 1 - ]); - case 4: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ]); - case 5: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 0 - ], true, false); - case 6: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ]); - case 7: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 0 - ], [ - lastGlyph, - 2 - ], false, true); - case 8: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ]); - case 9: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 1 - ], [ - lastGlyph, - 2 - ], false, true); - case 10: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ]); - case 11: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 1 - ], true, false); - case 12: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ]); - case 13: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, false); - case 14: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], false, true); - case 15: - return $99be642f82069918$var$swap(glyphs, [ - firstGlyph, - 2 - ], [ - lastGlyph, - 2 - ], true, true); - default: - throw new Error(`Unknown verb: ${verb}`); - } -} - - -class $860fcbd64bc12fbc$export$2e2bcd8739ae039 { - substitute(glyphRun) { - // AAT expects the glyphs to be in visual order prior to morx processing, - // so reverse the glyphs if the script is right-to-left. - if (glyphRun.direction === 'rtl') glyphRun.glyphs.reverse(); - this.morxProcessor.process(glyphRun.glyphs, $2b7f887ebcb5888a$export$b813f7d2a1677c16(glyphRun.features)); - } - getAvailableFeatures(script, language) { - return $2b7f887ebcb5888a$export$bd6df347a4f391c4(this.morxProcessor.getSupportedFeatures()); - } - stringsForGlyph(gid) { - let glyphStrings = this.morxProcessor.generateInputs(gid); - let result = new Set; - for (let glyphs of glyphStrings)this._addStrings(glyphs, 0, result, ''); - return result; - } - _addStrings(glyphs, index, strings, string) { - let codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); - for (let codePoint of codePoints){ - let s = string + String.fromCodePoint(codePoint); - if (index < glyphs.length - 1) this._addStrings(glyphs, index + 1, strings, s); - else strings.add(s); - } - } - constructor(font){ - this.font = font; - this.morxProcessor = new (0, $99be642f82069918$export$2e2bcd8739ae039)(font); - this.fallbackPosition = false; - } -} - - - -class $d7e93cca3cf8ce8a$export$2e2bcd8739ae039 { - /** - * Adds the given features to the last stage. - * Ignores features that have already been applied. - */ _addFeatures(features, global) { - let stageIndex = this.stages.length - 1; - let stage = this.stages[stageIndex]; - for (let feature of features)if (this.allFeatures[feature] == null) { - stage.push(feature); - this.allFeatures[feature] = stageIndex; - if (global) this.globalFeatures[feature] = true; - } - } - /** - * Add features to the last stage - */ add(arg, global = true) { - if (this.stages.length === 0) this.stages.push([]); - if (typeof arg === 'string') arg = [ - arg - ]; - if (Array.isArray(arg)) this._addFeatures(arg, global); - else if (typeof arg === 'object') { - this._addFeatures(arg.global || [], true); - this._addFeatures(arg.local || [], false); - } else throw new Error("Unsupported argument to ShapingPlan#add"); - } - /** - * Add a new stage - */ addStage(arg, global) { - if (typeof arg === 'function') this.stages.push(arg, []); - else { - this.stages.push([]); - this.add(arg, global); - } - } - setFeatureOverrides(features) { - if (Array.isArray(features)) this.add(features); - else if (typeof features === 'object') for(let tag in features){ - if (features[tag]) this.add(tag); - else if (this.allFeatures[tag] != null) { - let stage = this.stages[this.allFeatures[tag]]; - stage.splice(stage.indexOf(tag), 1); - delete this.allFeatures[tag]; - delete this.globalFeatures[tag]; - } - } - } - /** - * Assigns the global features to the given glyphs - */ assignGlobalFeatures(glyphs) { - for (let glyph of glyphs)for(let feature in this.globalFeatures)glyph.features[feature] = true; - } - /** - * Executes the planned stages using the given OTProcessor - */ process(processor, glyphs, positions) { - for (let stage of this.stages){ - if (typeof stage === 'function') { - if (!positions) stage(this.font, glyphs, this); - } else if (stage.length > 0) processor.applyFeatures(stage, glyphs, positions); - } - } - constructor(font, script, direction){ - this.font = font; - this.script = script; - this.direction = direction; - this.stages = []; - this.globalFeatures = {}; - this.allFeatures = {}; - } -} - - - - -const $d28fb665ee343afc$var$VARIATION_FEATURES = [ - 'rvrn' -]; -const $d28fb665ee343afc$var$COMMON_FEATURES = [ - 'ccmp', - 'locl', - 'rlig', - 'mark', - 'mkmk' -]; -const $d28fb665ee343afc$var$FRACTIONAL_FEATURES = [ - 'frac', - 'numr', - 'dnom' -]; -const $d28fb665ee343afc$var$HORIZONTAL_FEATURES = [ - 'calt', - 'clig', - 'liga', - 'rclt', - 'curs', - 'kern' -]; -const $d28fb665ee343afc$var$VERTICAL_FEATURES = [ - 'vert' -]; -const $d28fb665ee343afc$var$DIRECTIONAL_FEATURES = { - ltr: [ - 'ltra', - 'ltrm' - ], - rtl: [ - 'rtla', - 'rtlm' - ] -}; -class $d28fb665ee343afc$export$2e2bcd8739ae039 { - static plan(plan, glyphs, features) { - // Plan the features we want to apply - this.planPreprocessing(plan); - this.planFeatures(plan); - this.planPostprocessing(plan, features); - // Assign the global features to all the glyphs - plan.assignGlobalFeatures(glyphs); - // Assign local features to glyphs - this.assignFeatures(plan, glyphs); - } - static planPreprocessing(plan) { - plan.add({ - global: [ - ...$d28fb665ee343afc$var$VARIATION_FEATURES, - ...$d28fb665ee343afc$var$DIRECTIONAL_FEATURES[plan.direction] - ], - local: $d28fb665ee343afc$var$FRACTIONAL_FEATURES - }); - } - static planFeatures(plan) { - // Do nothing by default. Let subclasses override this. - } - static planPostprocessing(plan, userFeatures) { - plan.add([ - ...$d28fb665ee343afc$var$COMMON_FEATURES, - ...$d28fb665ee343afc$var$HORIZONTAL_FEATURES - ]); - plan.setFeatureOverrides(userFeatures); - } - static assignFeatures(plan, glyphs) { - // Enable contextual fractions - for(let i = 0; i < glyphs.length; i++){ - let glyph = glyphs[i]; - if (glyph.codePoints[0] === 0x2044) { - let start = i; - let end = i + 1; - // Apply numerator - while(start > 0 && (0, $gfJaN$unicodeproperties.isDigit)(glyphs[start - 1].codePoints[0])){ - glyphs[start - 1].features.numr = true; - glyphs[start - 1].features.frac = true; - start--; - } - // Apply denominator - while(end < glyphs.length && (0, $gfJaN$unicodeproperties.isDigit)(glyphs[end].codePoints[0])){ - glyphs[end].features.dnom = true; - glyphs[end].features.frac = true; - end++; - } - // Apply fraction slash - glyph.features.frac = true; - i = end - 1; - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($d28fb665ee343afc$export$2e2bcd8739ae039, "zeroMarkWidths", 'AFTER_GPOS'); - - - - - - -const $17ba6019f27bfcf9$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==")); -const $17ba6019f27bfcf9$var$FEATURES = [ - 'isol', - 'fina', - 'fin2', - 'fin3', - 'medi', - 'med2', - 'init' -]; -const $17ba6019f27bfcf9$var$ShapingClasses = { - Non_Joining: 0, - Left_Joining: 1, - Right_Joining: 2, - Dual_Joining: 3, - Join_Causing: 3, - ALAPH: 4, - 'DALATH RISH': 5, - Transparent: 6 -}; -const $17ba6019f27bfcf9$var$ISOL = 'isol'; -const $17ba6019f27bfcf9$var$FINA = 'fina'; -const $17ba6019f27bfcf9$var$FIN2 = 'fin2'; -const $17ba6019f27bfcf9$var$FIN3 = 'fin3'; -const $17ba6019f27bfcf9$var$MEDI = 'medi'; -const $17ba6019f27bfcf9$var$MED2 = 'med2'; -const $17ba6019f27bfcf9$var$INIT = 'init'; -const $17ba6019f27bfcf9$var$NONE = null; -// Each entry is [prevAction, curAction, nextState] -const $17ba6019f27bfcf9$var$STATE_TABLE = [ - // Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH - // State 0: prev was U, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 1: prev was R or ISOL/ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 2: prev was D/L in ISOL form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$INIT, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 3: prev was D in FINA form, willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 1 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 3 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 4 - ], - [ - $17ba6019f27bfcf9$var$MEDI, - $17ba6019f27bfcf9$var$FINA, - 6 - ] - ], - // State 4: prev was FINA ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$MED2, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 5: prev was FIN2/FIN3 ALAPH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$FIN2, - 5 - ], - [ - $17ba6019f27bfcf9$var$ISOL, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ], - // State 6: prev was DALATH/RISH, not willing to join. - [ - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$NONE, - 0 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 1 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 2 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$FIN3, - 5 - ], - [ - $17ba6019f27bfcf9$var$NONE, - $17ba6019f27bfcf9$var$ISOL, - 6 - ] - ] -]; -class $17ba6019f27bfcf9$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ccmp', - 'locl' - ]); - for(let i = 0; i < $17ba6019f27bfcf9$var$FEATURES.length; i++){ - let feature = $17ba6019f27bfcf9$var$FEATURES[i]; - plan.addStage(feature, false); - } - plan.addStage('mset'); - } - static assignFeatures(plan, glyphs) { - super.assignFeatures(plan, glyphs); - let prev = -1; - let state = 0; - let actions = []; - // Apply the state machine to map glyphs to features - for(let i = 0; i < glyphs.length; i++){ - let curAction, prevAction; - var glyph = glyphs[i]; - let type = $17ba6019f27bfcf9$var$getShapingClass(glyph.codePoints[0]); - if (type === $17ba6019f27bfcf9$var$ShapingClasses.Transparent) { - actions[i] = $17ba6019f27bfcf9$var$NONE; - continue; - } - [prevAction, curAction, state] = $17ba6019f27bfcf9$var$STATE_TABLE[state][type]; - if (prevAction !== $17ba6019f27bfcf9$var$NONE && prev !== -1) actions[prev] = prevAction; - actions[i] = curAction; - prev = i; - } - // Apply the chosen features to their respective glyphs - for(let index = 0; index < glyphs.length; index++){ - let feature; - var glyph = glyphs[index]; - if (feature = actions[index]) glyph.features[feature] = true; - } - } -} -function $17ba6019f27bfcf9$var$getShapingClass(codePoint) { - let res = $17ba6019f27bfcf9$var$trie.get(codePoint); - if (res) return res - 1; - let category = (0, $gfJaN$unicodeproperties.getCategory)(codePoint); - if (category === 'Mn' || category === 'Me' || category === 'Cf') return $17ba6019f27bfcf9$var$ShapingClasses.Transparent; - return $17ba6019f27bfcf9$var$ShapingClasses.Non_Joining; -} - - - - - -class $d6368085223f631e$export$2e2bcd8739ae039 { - reset(options = {}, index = 0) { - this.options = options; - this.flags = options.flags || {}; - this.markAttachmentType = options.markAttachmentType || 0; - this.index = index; - } - get cur() { - return this.glyphs[this.index] || null; - } - shouldIgnore(glyph) { - return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; - } - move(dir) { - this.index += dir; - while(0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index]))this.index += dir; - if (0 > this.index || this.index >= this.glyphs.length) return null; - return this.glyphs[this.index]; - } - next() { - return this.move(1); - } - prev() { - return this.move(-1); - } - peek(count = 1) { - let idx = this.index; - let res = this.increment(count); - this.index = idx; - return res; - } - peekIndex(count = 1) { - let idx = this.index; - this.increment(count); - let res = this.index; - this.index = idx; - return res; - } - increment(count = 1) { - let dir = count < 0 ? -1 : 1; - count = Math.abs(count); - while(count--)this.move(dir); - return this.glyphs[this.index]; - } - constructor(glyphs, options){ - this.glyphs = glyphs; - this.reset(options); - } -} - - - -const $7b226e6bbeadedeb$var$DEFAULT_SCRIPTS = [ - 'DFLT', - 'dflt', - 'latn' -]; -class $7b226e6bbeadedeb$export$2e2bcd8739ae039 { - findScript(script) { - if (this.table.scriptList == null) return null; - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script)for (let entry of this.table.scriptList){ - if (entry.tag === s) return entry; - } - return null; - } - selectScript(script, language, direction) { - let changed = false; - let entry; - if (!this.script || script !== this.scriptTag) { - entry = this.findScript(script); - if (!entry) entry = this.findScript($7b226e6bbeadedeb$var$DEFAULT_SCRIPTS); - if (!entry) return this.scriptTag; - this.scriptTag = entry.tag; - this.script = entry.script; - this.language = null; - this.languageTag = null; - changed = true; - } - if (!direction || direction !== this.direction) this.direction = direction || $e38a1a895f6aeb54$export$9fddb9d0dd7d8a54(script); - if (language && language.length < 4) language += ' '.repeat(4 - language.length); - if (!language || language !== this.languageTag) { - this.language = null; - for (let lang of this.script.langSysRecords)if (lang.tag === language) { - this.language = lang.langSys; - this.languageTag = lang.tag; - break; - } - if (!this.language) { - this.language = this.script.defaultLangSys; - this.languageTag = null; - } - changed = true; - } - // Build a feature lookup table - if (changed) { - this.features = {}; - if (this.language) for (let featureIndex of this.language.featureIndexes){ - let record = this.table.featureList[featureIndex]; - let substituteFeature = this.substituteFeatureForVariations(featureIndex); - this.features[record.tag] = substituteFeature || record.feature; - } - } - return this.scriptTag; - } - lookupsForFeatures(userFeatures = [], exclude) { - let lookups = []; - for (let tag of userFeatures){ - let feature = this.features[tag]; - if (!feature) continue; - for (let lookupIndex of feature.lookupListIndexes){ - if (exclude && exclude.indexOf(lookupIndex) !== -1) continue; - lookups.push({ - feature: tag, - index: lookupIndex, - lookup: this.table.lookupList.get(lookupIndex) - }); - } - } - lookups.sort((a, b)=>a.index - b.index); - return lookups; - } - substituteFeatureForVariations(featureIndex) { - if (this.variationsIndex === -1) return null; - let record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; - let substitutions = record.featureTableSubstitution.substitutions; - for (let substitution of substitutions){ - if (substitution.featureIndex === featureIndex) return substitution.alternateFeatureTable; - } - return null; - } - findVariationsIndex(coords) { - let variations = this.table.featureVariations; - if (!variations) return -1; - let records = variations.featureVariationRecords; - for(let i = 0; i < records.length; i++){ - let conditions = records[i].conditionSet.conditionTable; - if (this.variationConditionsMatch(conditions, coords)) return i; - } - return -1; - } - variationConditionsMatch(conditions, coords) { - return conditions.every((condition)=>{ - let coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; - return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; - }); - } - applyFeatures(userFeatures, glyphs, advances) { - let lookups = this.lookupsForFeatures(userFeatures); - this.applyLookups(lookups, glyphs, advances); - } - applyLookups(lookups, glyphs, positions) { - this.glyphs = glyphs; - this.positions = positions; - this.glyphIterator = new (0, $d6368085223f631e$export$2e2bcd8739ae039)(glyphs); - for (let { feature: feature, lookup: lookup } of lookups){ - this.currentFeature = feature; - this.glyphIterator.reset(lookup.flags); - while(this.glyphIterator.index < glyphs.length){ - if (!(feature in this.glyphIterator.cur.features)) { - this.glyphIterator.next(); - continue; - } - for (let table of lookup.subTables){ - let res = this.applyLookup(lookup.lookupType, table); - if (res) break; - } - this.glyphIterator.next(); - } - } - } - applyLookup(lookup, table) { - throw new Error("applyLookup must be implemented by subclasses"); - } - applyLookupList(lookupRecords) { - let options = this.glyphIterator.options; - let glyphIndex = this.glyphIterator.index; - for (let lookupRecord of lookupRecords){ - // Reset flags and find glyph index for this lookup record - this.glyphIterator.reset(options, glyphIndex); - this.glyphIterator.increment(lookupRecord.sequenceIndex); - // Get the lookup and setup flags for subtables - let lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); - this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); - // Apply lookup subtables until one matches - for (let table of lookup.subTables){ - if (this.applyLookup(lookup.lookupType, table)) break; - } - } - this.glyphIterator.reset(options, glyphIndex); - return true; - } - coverageIndex(coverage, glyph) { - if (glyph == null) glyph = this.glyphIterator.cur.id; - switch(coverage.version){ - case 1: - return coverage.glyphs.indexOf(glyph); - case 2: - for (let range of coverage.rangeRecords){ - if (range.start <= glyph && glyph <= range.end) return range.startCoverageIndex + glyph - range.start; - } - break; - } - return -1; - } - match(sequenceIndex, sequence, fn, matched) { - let pos = this.glyphIterator.index; - let glyph = this.glyphIterator.increment(sequenceIndex); - let idx = 0; - while(idx < sequence.length && glyph && fn(sequence[idx], glyph)){ - if (matched) matched.push(this.glyphIterator.index); - idx++; - glyph = this.glyphIterator.next(); - } - this.glyphIterator.index = pos; - if (idx < sequence.length) return false; - return matched || true; - } - sequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>component === glyph.id); - } - sequenceMatchIndices(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (component, glyph)=>{ - // If the current feature doesn't apply to this glyph, - if (!(this.currentFeature in glyph.features)) return false; - return component === glyph.id; - }, []); - } - coverageSequenceMatches(sequenceIndex, sequence) { - return this.match(sequenceIndex, sequence, (coverage, glyph)=>this.coverageIndex(coverage, glyph.id) >= 0); - } - getClassID(glyph, classDef) { - switch(classDef.version){ - case 1: - let i = glyph - classDef.startGlyph; - if (i >= 0 && i < classDef.classValueArray.length) return classDef.classValueArray[i]; - break; - case 2: - for (let range of classDef.classRangeRecord){ - if (range.start <= glyph && glyph <= range.end) return range.class; - } - break; - } - return 0; - } - classSequenceMatches(sequenceIndex, sequence, classDef) { - return this.match(sequenceIndex, sequence, (classID, glyph)=>classID === this.getClassID(glyph.id, classDef)); - } - applyContext(table) { - let index, set; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - set = table.ruleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(1, rule.input)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.classDef); - if (index === -1) return false; - set = table.classSet[index]; - for (let rule of set){ - if (this.classSequenceMatches(1, rule.classes, table.classDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(0, table.coverages)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - applyChainingContext(table) { - let index; - switch(table.version){ - case 1: - index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let set = table.chainRuleSets[index]; - for (let rule of set){ - if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 2: - if (this.coverageIndex(table.coverage) === -1) return false; - index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); - let rules = table.chainClassSet[index]; - if (!rules) return false; - for (let rule of rules){ - if (this.classSequenceMatches(-rule.backtrack.length, rule.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, rule.input, table.inputClassDef) && this.classSequenceMatches(1 + rule.input.length, rule.lookahead, table.lookaheadClassDef)) return this.applyLookupList(rule.lookupRecords); - } - break; - case 3: - if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) return this.applyLookupList(table.lookupRecords); - break; - } - return false; - } - constructor(font, table){ - this.font = font; - this.table = table; - this.script = null; - this.scriptTag = null; - this.language = null; - this.languageTag = null; - this.features = {}; - this.lookups = {}; - // Setup variation substitutions - this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; - // initialize to default script + language - this.selectScript(); - // current context (set by applyFeatures) - this.glyphs = []; - this.positions = []; // only used by GPOS - this.ligatureID = 1; - this.currentFeature = null; - } -} - - -class $f22bb23c9fd478d8$export$2e2bcd8739ae039 { - get id() { - return this._id; - } - set id(id) { - this._id = id; - this.substituted = true; - let GDEF = this._font.GDEF; - if (GDEF && GDEF.glyphClassDef) { - // TODO: clean this up - let classID = (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.glyphClassDef); - this.isBase = classID === 1; - this.isLigature = classID === 2; - this.isMark = classID === 3; - this.markAttachmentType = GDEF.markAttachClassDef ? (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039).prototype.getClassID(id, GDEF.markAttachClassDef) : 0; - } else { - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $gfJaN$unicodeproperties.isMark)); - this.isBase = !this.isMark; - this.isLigature = this.codePoints.length > 1; - this.markAttachmentType = 0; - } - } - copy() { - return new $f22bb23c9fd478d8$export$2e2bcd8739ae039(this._font, this.id, this.codePoints, this.features); - } - constructor(font, id, codePoints = [], features){ - this._font = font; - this.codePoints = codePoints; - this.id = id; - this.features = {}; - if (Array.isArray(features)) for(let i = 0; i < features.length; i++){ - let feature = features[i]; - this.features[feature] = true; - } - else if (typeof features === 'object') Object.assign(this.features, features); - this.ligatureID = null; - this.ligatureComponent = null; - this.isLigated = false; - this.cursiveAttachment = null; - this.markAttachment = null; - this.shaperInfo = null; - this.substituted = false; - this.isMultiplied = false; - } -} - - -class $fa1d9fd80dd7279e$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.add([ - 'ljmo', - 'vjmo', - 'tjmo' - ], false); - } - static assignFeatures(plan, glyphs) { - let state = 0; - let i = 0; - while(i < glyphs.length){ - let action; - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - [action, state] = $fa1d9fd80dd7279e$var$STATE_TABLE[state][type]; - switch(action){ - case $fa1d9fd80dd7279e$var$DECOMPOSE: - // Decompose the composed syllable if it is not supported by the font. - if (!plan.font.hasGlyphForCodePoint(code)) i = $fa1d9fd80dd7279e$var$decompose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$COMPOSE: - // Found a decomposed syllable. Try to compose if supported by the font. - i = $fa1d9fd80dd7279e$var$compose(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$TONE_MARK: - // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. - $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, plan.font); - break; - case $fa1d9fd80dd7279e$var$INVALID: - // Tone mark has no valid syllable to attach to, so insert a dotted circle - i = $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, plan.font); - break; - } - i++; - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($fa1d9fd80dd7279e$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -const $fa1d9fd80dd7279e$var$HANGUL_BASE = 0xac00; -const $fa1d9fd80dd7279e$var$HANGUL_END = 0xd7a4; -const $fa1d9fd80dd7279e$var$HANGUL_COUNT = $fa1d9fd80dd7279e$var$HANGUL_END - $fa1d9fd80dd7279e$var$HANGUL_BASE + 1; -const $fa1d9fd80dd7279e$var$L_BASE = 0x1100; // lead -const $fa1d9fd80dd7279e$var$V_BASE = 0x1161; // vowel -const $fa1d9fd80dd7279e$var$T_BASE = 0x11a7; // trail -const $fa1d9fd80dd7279e$var$L_COUNT = 19; -const $fa1d9fd80dd7279e$var$V_COUNT = 21; -const $fa1d9fd80dd7279e$var$T_COUNT = 28; -const $fa1d9fd80dd7279e$var$L_END = $fa1d9fd80dd7279e$var$L_BASE + $fa1d9fd80dd7279e$var$L_COUNT - 1; -const $fa1d9fd80dd7279e$var$V_END = $fa1d9fd80dd7279e$var$V_BASE + $fa1d9fd80dd7279e$var$V_COUNT - 1; -const $fa1d9fd80dd7279e$var$T_END = $fa1d9fd80dd7279e$var$T_BASE + $fa1d9fd80dd7279e$var$T_COUNT - 1; -const $fa1d9fd80dd7279e$var$DOTTED_CIRCLE = 0x25cc; -const $fa1d9fd80dd7279e$var$isL = (code)=>0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; -const $fa1d9fd80dd7279e$var$isV = (code)=>0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; -const $fa1d9fd80dd7279e$var$isT = (code)=>0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; -const $fa1d9fd80dd7279e$var$isTone = (code)=>0x302e <= code && code <= 0x302f; -const $fa1d9fd80dd7279e$var$isLVT = (code)=>$fa1d9fd80dd7279e$var$HANGUL_BASE <= code && code <= $fa1d9fd80dd7279e$var$HANGUL_END; -const $fa1d9fd80dd7279e$var$isLV = (code)=>code - $fa1d9fd80dd7279e$var$HANGUL_BASE < $fa1d9fd80dd7279e$var$HANGUL_COUNT && (code - $fa1d9fd80dd7279e$var$HANGUL_BASE) % $fa1d9fd80dd7279e$var$T_COUNT === 0; -const $fa1d9fd80dd7279e$var$isCombiningL = (code)=>$fa1d9fd80dd7279e$var$L_BASE <= code && code <= $fa1d9fd80dd7279e$var$L_END; -const $fa1d9fd80dd7279e$var$isCombiningV = (code)=>$fa1d9fd80dd7279e$var$V_BASE <= code && code <= $fa1d9fd80dd7279e$var$V_END; -const $fa1d9fd80dd7279e$var$isCombiningT = (code)=>$fa1d9fd80dd7279e$var$T_BASE + 1 && 1 <= code && code <= $fa1d9fd80dd7279e$var$T_END; -// Character categories -const $fa1d9fd80dd7279e$var$X = 0; // Other character -const $fa1d9fd80dd7279e$var$L = 1; // Leading consonant -const $fa1d9fd80dd7279e$var$V = 2; // Medial vowel -const $fa1d9fd80dd7279e$var$T = 3; // Trailing consonant -const $fa1d9fd80dd7279e$var$LV = 4; // Composed syllable -const $fa1d9fd80dd7279e$var$LVT = 5; // Composed syllable -const $fa1d9fd80dd7279e$var$M = 6; // Tone mark -// This function classifies a character using the above categories. -function $fa1d9fd80dd7279e$var$getType(code) { - if ($fa1d9fd80dd7279e$var$isL(code)) return $fa1d9fd80dd7279e$var$L; - if ($fa1d9fd80dd7279e$var$isV(code)) return $fa1d9fd80dd7279e$var$V; - if ($fa1d9fd80dd7279e$var$isT(code)) return $fa1d9fd80dd7279e$var$T; - if ($fa1d9fd80dd7279e$var$isLV(code)) return $fa1d9fd80dd7279e$var$LV; - if ($fa1d9fd80dd7279e$var$isLVT(code)) return $fa1d9fd80dd7279e$var$LVT; - if ($fa1d9fd80dd7279e$var$isTone(code)) return $fa1d9fd80dd7279e$var$M; - return $fa1d9fd80dd7279e$var$X; -} -// State machine actions -const $fa1d9fd80dd7279e$var$NO_ACTION = 0; -const $fa1d9fd80dd7279e$var$DECOMPOSE = 1; -const $fa1d9fd80dd7279e$var$COMPOSE = 2; -const $fa1d9fd80dd7279e$var$TONE_MARK = 4; -const $fa1d9fd80dd7279e$var$INVALID = 5; -// Build a state machine that accepts valid syllables, and applies actions along the way. -// The logic this is implementing is documented at the top of the file. -const $fa1d9fd80dd7279e$var$STATE_TABLE = [ - // X L V T LV LVT M - // State 0: start state - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 1: - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$INVALID, - 0 - ] - ], - // State 2: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$COMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ], - // State 3: or - [ - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 1 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$NO_ACTION, - 0 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 2 - ], - [ - $fa1d9fd80dd7279e$var$DECOMPOSE, - 3 - ], - [ - $fa1d9fd80dd7279e$var$TONE_MARK, - 0 - ] - ] -]; -function $fa1d9fd80dd7279e$var$getGlyph(font, code, features) { - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, font.glyphForCodePoint(code).id, [ - code - ], features); -} -function $fa1d9fd80dd7279e$var$decompose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyph.codePoints[0]; - let s = code - $fa1d9fd80dd7279e$var$HANGUL_BASE; - let t = $fa1d9fd80dd7279e$var$T_BASE + s % $fa1d9fd80dd7279e$var$T_COUNT; - s = s / $fa1d9fd80dd7279e$var$T_COUNT | 0; - let l = $fa1d9fd80dd7279e$var$L_BASE + s / $fa1d9fd80dd7279e$var$V_COUNT | 0; - let v = $fa1d9fd80dd7279e$var$V_BASE + s % $fa1d9fd80dd7279e$var$V_COUNT; - // Don't decompose if all of the components are not available - if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== $fa1d9fd80dd7279e$var$T_BASE && !font.hasGlyphForCodePoint(t)) return i; - // Replace the current glyph with decomposed L, V, and T glyphs, - // and apply the proper OpenType features to each component. - let ljmo = $fa1d9fd80dd7279e$var$getGlyph(font, l, glyph.features); - ljmo.features.ljmo = true; - let vjmo = $fa1d9fd80dd7279e$var$getGlyph(font, v, glyph.features); - vjmo.features.vjmo = true; - let insert = [ - ljmo, - vjmo - ]; - if (t > $fa1d9fd80dd7279e$var$T_BASE) { - let tjmo = $fa1d9fd80dd7279e$var$getGlyph(font, t, glyph.features); - tjmo.features.tjmo = true; - insert.push(tjmo); - } - glyphs.splice(i, 1, ...insert); - return i + insert.length - 1; -} -function $fa1d9fd80dd7279e$var$compose(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - let type = $fa1d9fd80dd7279e$var$getType(code); - let prev = glyphs[i - 1].codePoints[0]; - let prevType = $fa1d9fd80dd7279e$var$getType(prev); - // Figure out what type of syllable we're dealing with - let lv, ljmo, vjmo, tjmo; - if (prevType === $fa1d9fd80dd7279e$var$LV && type === $fa1d9fd80dd7279e$var$T) { - // - lv = prev; - tjmo = glyph; - } else { - if (type === $fa1d9fd80dd7279e$var$V) { - // - ljmo = glyphs[i - 1]; - vjmo = glyph; - } else { - // - ljmo = glyphs[i - 2]; - vjmo = glyphs[i - 1]; - tjmo = glyph; - } - let l = ljmo.codePoints[0]; - let v = vjmo.codePoints[0]; - // Make sure L and V are combining characters - if ($fa1d9fd80dd7279e$var$isCombiningL(l) && $fa1d9fd80dd7279e$var$isCombiningV(v)) lv = $fa1d9fd80dd7279e$var$HANGUL_BASE + ((l - $fa1d9fd80dd7279e$var$L_BASE) * $fa1d9fd80dd7279e$var$V_COUNT + (v - $fa1d9fd80dd7279e$var$V_BASE)) * $fa1d9fd80dd7279e$var$T_COUNT; - } - let t = tjmo && tjmo.codePoints[0] || $fa1d9fd80dd7279e$var$T_BASE; - if (lv != null && (t === $fa1d9fd80dd7279e$var$T_BASE || $fa1d9fd80dd7279e$var$isCombiningT(t))) { - let s = lv + (t - $fa1d9fd80dd7279e$var$T_BASE); - // Replace with a composed glyph if supported by the font, - // otherwise apply the proper OpenType features to each component. - if (font.hasGlyphForCodePoint(s)) { - let del = prevType === $fa1d9fd80dd7279e$var$V ? 3 : 2; - glyphs.splice(i - del + 1, del, $fa1d9fd80dd7279e$var$getGlyph(font, s, glyph.features)); - return i - del + 1; - } - } - // Didn't compose (either a non-combining component or unsupported by font). - if (ljmo) ljmo.features.ljmo = true; - if (vjmo) vjmo.features.vjmo = true; - if (tjmo) tjmo.features.tjmo = true; - if (prevType === $fa1d9fd80dd7279e$var$LV) { - // Sequence was originally , which got combined earlier. - // Either the T was non-combining, or the LVT glyph wasn't supported. - // Decompose the glyph again and apply OT features. - $fa1d9fd80dd7279e$var$decompose(glyphs, i - 1, font); - return i + 1; - } - return i; -} -function $fa1d9fd80dd7279e$var$getLength(code) { - switch($fa1d9fd80dd7279e$var$getType(code)){ - case $fa1d9fd80dd7279e$var$LV: - case $fa1d9fd80dd7279e$var$LVT: - return 1; - case $fa1d9fd80dd7279e$var$V: - return 2; - case $fa1d9fd80dd7279e$var$T: - return 3; - } -} -function $fa1d9fd80dd7279e$var$reorderToneMark(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - // Move tone mark to the beginning of the previous syllable, unless it is zero width - if (font.glyphForCodePoint(code).advanceWidth === 0) return; - let prev = glyphs[i - 1].codePoints[0]; - let len = $fa1d9fd80dd7279e$var$getLength(prev); - glyphs.splice(i, 1); - return glyphs.splice(i - len, 0, glyph); -} -function $fa1d9fd80dd7279e$var$insertDottedCircle(glyphs, i, font) { - let glyph = glyphs[i]; - let code = glyphs[i].codePoints[0]; - if (font.hasGlyphForCodePoint($fa1d9fd80dd7279e$var$DOTTED_CIRCLE)) { - let dottedCircle = $fa1d9fd80dd7279e$var$getGlyph(font, $fa1d9fd80dd7279e$var$DOTTED_CIRCLE, glyph.features); - // If the tone mark is zero width, insert the dotted circle before, otherwise after - let idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; - glyphs.splice(idx, 0, dottedCircle); - i++; - } - return i; -} - - - - - - - - - -var $d22b56f2cf15e5ba$exports = {}; -$d22b56f2cf15e5ba$exports = JSON.parse("{\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],\"accepting\":[false,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,false,false,true,true,true,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,true,true,true,false,true,false,true,true,false,false,true,true,true,true,true,true,true,false,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,false,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,true,false,true,true,false,false,false,false,true,true,false,false,true,true,true,false,true,true,false,false,true,false,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,true,false,true,false,true,true,false,false,true,true,false,false,true,true,true,false,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,false,false,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,false,false,false,false,false,false,false,true,true,false,false,true,true,false,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,true,true,false,true,true,true,true,true,true,false,true,true,false,true,false,true,true,true,true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,false,false,false,true,true,false,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,false,false,false,true,false,true,true,true,true,true,false,true,true,true,false,true,true,true,true,true,false,true,true,true,true,false,true,true,true,true,true,false,true,true,false,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"symbol_cluster\"],[],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"broken_cluster\"],[\"symbol_cluster\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[\"standalone_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[],[],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[],[],[\"consonant_syllable\",\"broken_cluster\"],[\"consonant_syllable\",\"broken_cluster\"],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[],[],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"consonant_syllable\"],[],[\"consonant_syllable\"],[\"consonant_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"vowel_syllable\"],[],[\"vowel_syllable\"],[\"vowel_syllable\"],[\"broken_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"standalone_cluster\"],[\"standalone_cluster\"],[],[\"consonant_syllable\"],[\"vowel_syllable\"],[\"standalone_cluster\"]]}"); - - -var $79781f8c452881c2$exports = {}; -$79781f8c452881c2$exports = JSON.parse("{\"categories\":[\"O\",\"IND\",\"S\",\"GB\",\"B\",\"FM\",\"CGJ\",\"VMAbv\",\"VMPst\",\"VAbv\",\"VPst\",\"CMBlw\",\"VPre\",\"VBlw\",\"H\",\"VMBlw\",\"CMAbv\",\"MBlw\",\"CS\",\"R\",\"SUB\",\"MPst\",\"MPre\",\"FAbv\",\"FPst\",\"FBlw\",\"null\",\"SMAbv\",\"SMBlw\",\"VMPre\",\"ZWNJ\",\"ZWJ\",\"WJ\",\"M\",\"VS\",\"N\",\"HN\",\"MAbv\"],\"decompositions\":{\"2507\":[2503,2494],\"2508\":[2503,2519],\"2888\":[2887,2902],\"2891\":[2887,2878],\"2892\":[2887,2903],\"3018\":[3014,3006],\"3019\":[3015,3006],\"3020\":[3014,3031],\"3144\":[3142,3158],\"3264\":[3263,3285],\"3271\":[3270,3285],\"3272\":[3270,3286],\"3274\":[3270,3266],\"3275\":[3270,3266,3285],\"3402\":[3398,3390],\"3403\":[3399,3390],\"3404\":[3398,3415],\"3546\":[3545,3530],\"3548\":[3545,3535],\"3549\":[3545,3535,3530],\"3550\":[3545,3551],\"3635\":[3661,3634],\"3763\":[3789,3762],\"3955\":[3953,3954],\"3957\":[3953,3956],\"3958\":[4018,3968],\"3959\":[4018,3953,3968],\"3960\":[4019,3968],\"3961\":[4019,3953,3968],\"3969\":[3953,3968],\"6971\":[6970,6965],\"6973\":[6972,6965],\"6976\":[6974,6965],\"6977\":[6975,6965],\"6979\":[6978,6965],\"69934\":[69937,69927],\"69935\":[69938,69927],\"70475\":[70471,70462],\"70476\":[70471,70487],\"70843\":[70841,70842],\"70844\":[70841,70832],\"70846\":[70841,70845],\"71098\":[71096,71087],\"71099\":[71097,71087]},\"stateTable\":[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],\"accepting\":[false,true,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],\"tags\":[[],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"broken_cluster\"],[\"independent_cluster\"],[\"symbol_cluster\"],[\"symbol_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"virama_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"broken_cluster\"],[\"broken_cluster\"],[\"numeral_cluster\"],[\"number_joiner_terminated_cluster\"],[\"standard_cluster\"],[\"standard_cluster\"],[\"numeral_cluster\"]]}"); - - -// Cateories used in the OpenType spec: -// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx -const $79e3b6f2c331d0bf$export$a513ea61a7bee91c = { - X: 1, - C: 2, - V: 4, - N: 8, - H: 16, - ZWNJ: 32, - ZWJ: 64, - M: 128, - SM: 256, - VD: 512, - A: 1024, - Placeholder: 2048, - Dotted_Circle: 4096, - RS: 8192, - Coeng: 16384, - Repha: 32768, - Ra: 65536, - CM: 131072, - Symbol: 262144 // Avagraha, etc that take marks (SM,A,VD). -}; -const $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0 = { - Start: 1, - Ra_To_Become_Reph: 2, - Pre_M: 4, - Pre_C: 8, - Base_C: 16, - After_Main: 32, - Above_C: 64, - Before_Sub: 128, - Below_C: 256, - After_Sub: 512, - Before_Post: 1024, - Post_C: 2048, - After_Post: 4096, - Final_C: 8192, - SMVD: 16384, - End: 32768 -}; -const $79e3b6f2c331d0bf$export$8519deaa7de2b07 = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.C | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Ra | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.CM | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.V | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Placeholder | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Dotted_Circle; -const $79e3b6f2c331d0bf$export$bbcd928767338e0d = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWJ | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.ZWNJ; -const $79e3b6f2c331d0bf$export$ca9599b2a300afc = $79e3b6f2c331d0bf$export$a513ea61a7bee91c.H | $79e3b6f2c331d0bf$export$a513ea61a7bee91c.Coeng; -const $79e3b6f2c331d0bf$export$e99d119da76a0fc5 = { - Default: { - hasOldSpec: false, - virama: 0, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Devanagari: { - hasOldSpec: true, - virama: 0x094D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Bengali: { - hasOldSpec: true, - virama: 0x09CD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gurmukhi: { - hasOldSpec: true, - virama: 0x0A4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Sub, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Gujarati: { - hasOldSpec: true, - virama: 0x0ACD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Before_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Oriya: { - hasOldSpec: true, - virama: 0x0B4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Tamil: { - hasOldSpec: true, - virama: 0x0BCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Pre_And_Post' - }, - Telugu: { - hasOldSpec: true, - virama: 0x0C4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Explicit', - blwfMode: 'Post_Only' - }, - Kannada: { - hasOldSpec: true, - virama: 0x0CCD, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Post, - rephMode: 'Implicit', - blwfMode: 'Post_Only' - }, - Malayalam: { - hasOldSpec: true, - virama: 0x0D4D, - basePos: 'Last', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.After_Main, - rephMode: 'Log_Repha', - blwfMode: 'Pre_And_Post' - }, - // Handled by UniversalShaper - // Sinhala: { - // hasOldSpec: false, - // virama: 0x0DCA, - // basePos: 'Last_Sinhala', - // rephPos: POSITIONS.After_Main, - // rephMode: 'Explicit', - // blwfMode: 'Pre_And_Post' - // }, - Khmer: { - hasOldSpec: false, - virama: 0x17D2, - basePos: 'First', - rephPos: $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0.Ra_To_Become_Reph, - rephMode: 'Vis_Repha', - blwfMode: 'Pre_And_Post' - } -}; -const $79e3b6f2c331d0bf$export$f647c9cfdd77d95a = { - // Khmer - 0x17BE: [ - 0x17C1, - 0x17BE - ], - 0x17BF: [ - 0x17C1, - 0x17BF - ], - 0x17C0: [ - 0x17C1, - 0x17C0 - ], - 0x17C4: [ - 0x17C1, - 0x17C4 - ], - 0x17C5: [ - 0x17C1, - 0x17C5 - ] -}; - - - -const { decompositions: $d203e6b9523d0071$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $d203e6b9523d0071$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $d203e6b9523d0071$var$stateMachine = new (0, ($parcel$interopDefault($gfJaN$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($d22b56f2cf15e5ba$exports)))); -class $d203e6b9523d0071$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($d203e6b9523d0071$var$setupSyllables); - plan.addStage([ - 'locl', - 'ccmp' - ]); - plan.addStage($d203e6b9523d0071$var$initialReordering); - plan.addStage('nukt'); - plan.addStage('akhn'); - plan.addStage('rphf', false); - plan.addStage('rkrf'); - plan.addStage('pref', false); - plan.addStage('blwf', false); - plan.addStage('abvf', false); - plan.addStage('half', false); - plan.addStage('pstf', false); - plan.addStage('vatu'); - plan.addStage('cjct'); - plan.addStage('cfar', false); - plan.addStage($d203e6b9523d0071$var$finalReordering); - plan.addStage({ - local: [ - 'init' - ], - global: [ - 'pres', - 'abvs', - 'blws', - 'psts', - 'haln', - 'dist', - 'abvm', - 'blwm', - 'calt', - 'clig' - ] - }); - // Setup the indic config for the selected script - plan.unicodeScript = $e38a1a895f6aeb54$export$ce50e82f12a827a4(plan.script); - plan.indicConfig = (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5)[plan.unicodeScript] || (0, $79e3b6f2c331d0bf$export$e99d119da76a0fc5).Default; - plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; - // TODO: turn off kern (Khmer) and liga features. - } - static assignFeatures(plan, glyphs) { - // Decompose split matras - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - let d = (0, $79e3b6f2c331d0bf$export$f647c9cfdd77d95a)[codepoint] || $d203e6b9523d0071$var$decompositions[codepoint]; - if (d) { - let decomposed = d.map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($d203e6b9523d0071$export$2e2bcd8739ae039, "zeroMarkWidths", 'NONE'); -function $d203e6b9523d0071$var$indicCategory(glyph) { - return $d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) >> 8; -} -function $d203e6b9523d0071$var$indicPosition(glyph) { - return 1 << ($d203e6b9523d0071$var$trie.get(glyph.codePoints[0]) & 0xff); -} -class $d203e6b9523d0071$var$IndicInfo { - constructor(category, position, syllableType, syllable){ - this.category = category; - this.position = position; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $d203e6b9523d0071$var$setupSyllables(font, glyphs) { - let syllable = 0; - let last = 0; - for (let [start, end, tags] of $d203e6b9523d0071$var$stateMachine.match(glyphs.map($d203e6b9523d0071$var$indicCategory))){ - if (start > last) { - ++syllable; - for(let i = last; i < start; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(glyphs[i]), $d203e6b9523d0071$var$indicPosition(glyphs[i]), tags[0], syllable); - last = end + 1; - } - if (last < glyphs.length) { - ++syllable; - for(let i = last; i < glyphs.length; i++)glyphs[i].shaperInfo = new $d203e6b9523d0071$var$IndicInfo((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).X, (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).End, 'non_indic_cluster', syllable); - } -} -function $d203e6b9523d0071$var$isConsonant(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$8519deaa7de2b07); -} -function $d203e6b9523d0071$var$isJoiner(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$bbcd928767338e0d); -} -function $d203e6b9523d0071$var$isHalantOrCoeng(glyph) { - return glyph.shaperInfo.category & (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc); -} -function $d203e6b9523d0071$var$wouldSubstitute(glyphs, feature) { - for (let glyph of glyphs)glyph.features = { - [feature]: true - }; - let GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; - GSUB.applyFeatures([ - feature - ], glyphs); - return glyphs.length === 1; -} -function $d203e6b9523d0071$var$consonantPosition(font, consonant, virama) { - let glyphs = [ - virama, - consonant, - virama - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'blwf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'blwf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pstf') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pstf')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - else if ($d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(0, 2), 'pref') || $d203e6b9523d0071$var$wouldSubstitute(glyphs.slice(1, 3), 'pref')) return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C; - return (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; -} -function $d203e6b9523d0071$var$initialReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - let virama = font.glyphForCodePoint(indicConfig.virama).id; - if (virama) { - let info = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, virama, [ - indicConfig.virama - ]); - for(let i = 0; i < glyphs.length; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) glyphs[i].shaperInfo.position = $d203e6b9523d0071$var$consonantPosition(font, glyphs[i].copy(), info); - } - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - let { category: category, syllableType: syllableType } = glyphs[start].shaperInfo; - if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') continue; - if (syllableType === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = new $d203e6b9523d0071$var$IndicInfo(1 << $d203e6b9523d0071$var$indicCategory(g), $d203e6b9523d0071$var$indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); - // Insert after possible Repha. - let i = start; - while(i < end && glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha)i++; - glyphs.splice(i++, 0, g); - end++; - } - // 1. Find base consonant: - // - // The shaping engine finds the base consonant of the syllable, using the - // following algorithm: starting from the end of the syllable, move backwards - // until a consonant is found that does not have a below-base or post-base - // form (post-base forms have to follow below-base forms), or that is not a - // pre-base reordering Ra, or arrive at the first consonant. The consonant - // stopped at will be the base. - let base = end; - let limit = start; - let hasReph = false; - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - if (indicConfig.rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !$d203e6b9523d0071$var$isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - // See if it matches the 'rphf' feature. - let g = [ - glyphs[start].copy(), - glyphs[start + 1].copy(), - glyphs[start + 2].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && $d203e6b9523d0071$var$wouldSubstitute(g, 'rphf')) { - limit += 2; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha) { - limit++; - while(limit < end && $d203e6b9523d0071$var$isJoiner(glyphs[limit]))limit++; - base = start; - hasReph = true; - } - switch(indicConfig.basePos){ - case 'Last': - { - // starting from the end of the syllable, move backwards - let i = end; - let seenBelow = false; - do { - let info = glyphs[--i].shaperInfo; - // until a consonant is found - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - // that does not have a below-base or post-base form - // (post-base forms have to follow below-base forms), - if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C && (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C || seenBelow)) { - base = i; - break; - } - // or that is not a pre-base reordering Ra, - // - // IMPLEMENTATION NOTES: - // - // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped - // by the logic above already. - // - // or arrive at the first consonant. The consonant stopped at will - // be the base. - if (info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) seenBelow = true; - base = i; - } else if (start < i && info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ && glyphs[i - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - }while (i > limit); - break; - } - case 'First': - // The first consonant is always the base. - base = start; - // Mark all subsequent consonants as below. - for(let i = base + 1; i < end; i++)if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) glyphs[i].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C; - } - // If the syllable starts with Ra + Halant (in a script that has Reph) - // and has more than one consonant, Ra is excluded from candidates for - // base consonants. - // - // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) - if (hasReph && base === start && limit - base <= 2) hasReph = false; - // 2. Decompose and reorder Matras: - // - // Each matra and any syllable modifier sign in the cluster are moved to the - // appropriate position relative to the consonant(s) in the cluster. The - // shaping engine decomposes two- or three-part matras into their constituent - // parts before any repositioning. Matra characters are classified by which - // consonant in a conjunct they have affinity for and are reordered to the - // following positions: - // - // o Before first half form in the syllable - // o After subjoined consonants - // o After post-form consonant - // o After main consonant (for above marks) - // - // IMPLEMENTATION NOTES: - // - // The normalize() routine has already decomposed matras for us, so we don't - // need to worry about that. - // 3. Reorder marks to canonical order: - // - // Adjacent nukta and halant or nukta and vedic sign are always repositioned - // if necessary, so that the nukta is first. - // - // IMPLEMENTATION NOTES: - // - // We don't need to do this: the normalize() routine already did this for us. - // Reorder characters - for(let i = start; i < base; i++){ - let info = glyphs[i].shaperInfo; - info.position = Math.min((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_C, info.position); - } - if (base < end) glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - // Mark final consonants. A final consonant is one appearing after a matra, - // like in Khmer. - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - for(let j = i + 1; j < end; j++)if ($d203e6b9523d0071$var$isConsonant(glyphs[j])) { - glyphs[j].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Final_C; - break; - } - break; - } - // Handle beginning Ra - if (hasReph) glyphs[start].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; - // For old-style Indic script tags, move the first post-base Halant after - // last consonant. - // - // Reports suggest that in some scripts Uniscribe does this only if there - // is *not* a Halant after last consonant already (eg. Kannada), while it - // does it unconditionally in other scripts (eg. Malayalam). We don't - // currently know about other scripts, so we single out Malayalam for now. - // - // Kannada test case: - // U+0C9A,U+0CCD,U+0C9A,U+0CCD - // With some versions of Lohit Kannada. - // https://bugs.freedesktop.org/show_bug.cgi?id=59118 - // - // Malayalam test case: - // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D - // With lohit-ttf-20121122/Lohit-Malayalam.ttf - if (plan.isOldSpec) { - let disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; - for(let i = base + 1; i < end; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) { - let j; - for(j = end - 1; j > i; j--){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[j]) || disallowDoubleHalants && glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H) break; - } - if (glyphs[j].shaperInfo.category !== (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && j > i) { - // Move Halant to after last consonant. - let t = glyphs[i]; - glyphs.splice(i, 0, ...glyphs.splice(i + 1, j - i)); - glyphs[j] = t; - } - break; - } - } - // Attach misc marks to previous char to move with them. - let lastPos = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Start; - for(let i = start; i < end; i++){ - let info = glyphs[i].shaperInfo; - if (info.category & ((0, $79e3b6f2c331d0bf$export$bbcd928767338e0d) | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).RS | (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).CM | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc) & info.category)) { - info.position = lastPos; - if (info.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && info.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Uniscribe doesn't move the Halant with Left Matra. - // TEST: U+092B,U+093F,U+094DE - // We follow. This is important for the Sinhala - // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA - // where U+0DD9 is a left matra and U+0DCA is the virama. - // We don't want to move the virama with the left matra. - // TEST: U+0D9A,U+0DDA - for(let j = i; j > start; j--)if (glyphs[j - 1].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - info.position = glyphs[j - 1].shaperInfo.position; - break; - } - } - } else if (info.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) lastPos = info.position; - } - // For post-base consonants let them own anything before them - // since the last consonant or matra. - let last = base; - for(let i = base + 1; i < end; i++){ - if ($d203e6b9523d0071$var$isConsonant(glyphs[i])) { - for(let j = last + 1; j < i; j++)if (glyphs[j].shaperInfo.position < (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD) glyphs[j].shaperInfo.position = glyphs[i].shaperInfo.position; - last = i; - } else if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) last = i; - } - let arr = glyphs.slice(start, end); - arr.sort((a, b)=>a.shaperInfo.position - b.shaperInfo.position); - glyphs.splice(start, arr.length, ...arr); - // Find base again - for(let i = start; i < end; i++)if (glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - base = i; - break; - } - // Setup features now - // Reph - for(let i = start; i < end && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph; i++)glyphs[i].features.rphf = true; - // Pre-base - let blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; - for(let i = start; i < base; i++){ - glyphs[i].features.half = true; - if (blwf) glyphs[i].features.blwf = true; - } - // Post-base - for(let i = base + 1; i < end; i++){ - glyphs[i].features.abvf = true; - glyphs[i].features.pstf = true; - glyphs[i].features.blwf = true; - } - if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { - // Old-spec eye-lash Ra needs special handling. From the - // spec: - // - // "The feature 'below-base form' is applied to consonants - // having below-base forms and following the base consonant. - // The exception is vattu, which may appear below half forms - // as well as below the base glyph. The feature 'below-base - // form' will be applied to all such occurrences of Ra as well." - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 - // with Sanskrit 2003 font. - // - // However, note that Ra,Halant,ZWJ is the correct way to - // request eyelash form of Ra, so we wouldbn't inhibit it - // in that sequence. - // - // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 - for(let i = start; i + 1 < base; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Ra && glyphs[i + 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).H && (i + 1 === base || glyphs[i + 2].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ)) { - glyphs[i].features.blwf = true; - glyphs[i + 1].features.blwf = true; - } - } - let prefLen = 2; - if (features.pref && base + prefLen < end) // Find a Halant,Ra sequence and mark it for pre-base reordering processing. - for(let i = base + 1; i + prefLen - 1 < end; i++){ - let g = [ - glyphs[i].copy(), - glyphs[i + 1].copy() - ]; - if ($d203e6b9523d0071$var$wouldSubstitute(g, 'pref')) { - for(let j = 0; j < prefLen; j++)glyphs[i++].features.pref = true; - // Mark the subsequent stuff with 'cfar'. Used in Khmer. - // Read the feature spec. - // This allows distinguishing the following cases with MS Khmer fonts: - // U+1784,U+17D2,U+179A,U+17D2,U+1782 - // U+1784,U+17D2,U+1782,U+17D2,U+179A - if (features.cfar) for(; i < end; i++)glyphs[i].features.cfar = true; - break; - } - } - // Apply ZWJ/ZWNJ effects - for(let i = start + 1; i < end; i++)if ($d203e6b9523d0071$var$isJoiner(glyphs[i])) { - let nonJoiner = glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWNJ; - let j = i; - do { - j--; - // ZWJ/ZWNJ should disable CJCT. They do that by simply - // being there, since we don't skip them for the CJCT - // feature (ie. F_MANUAL_ZWJ) - // A ZWNJ disables HALF. - if (nonJoiner) delete glyphs[j].features.half; - }while (j > start && !$d203e6b9523d0071$var$isConsonant(glyphs[j])); - } - } -} -function $d203e6b9523d0071$var$finalReordering(font, glyphs, plan) { - let indicConfig = plan.indicConfig; - let features = font._layoutEngine.engine.GSUBProcessor.features; - for(let start = 0, end = $d203e6b9523d0071$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $d203e6b9523d0071$var$nextSyllable(glyphs, start)){ - // 4. Final reordering: - // - // After the localized forms and basic shaping forms GSUB features have been - // applied (see below), the shaping engine performs some final glyph - // reordering before applying all the remaining font features to the entire - // cluster. - let tryPref = !!features.pref; - // Find base again - let base = start; - for(; base < end; base++)if (glyphs[base].shaperInfo.position >= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) { - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { - // Ok, this was a 'pref' candidate but didn't form any. - // Base is around here... - base = i; - while(base < end && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[base]))base++; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).BASE_C; - tryPref = false; - } - break; - } - } - // For Malayalam, skip over unformed below- (but NOT post-) forms. - if (plan.unicodeScript === 'Malayalam') for(let i = base + 1; i < end; i++){ - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i === end || !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[i])) break; - i++; // Skip halant. - while(i < end && $d203e6b9523d0071$var$isJoiner(glyphs[i]))i++; - if (i < end && $d203e6b9523d0071$var$isConsonant(glyphs[i]) && glyphs[i].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Below_C) { - base = i; - glyphs[base].shaperInfo.position = (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C; - } - } - if (start < base && glyphs[base].shaperInfo.position > (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Base_C) base--; - break; - } - if (base === end && start < base && glyphs[base - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).ZWJ) base--; - if (base < end) while(start < base && glyphs[base].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).N | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc)))base--; - // o Reorder matras: - // - // If a pre-base matra character had been reordered before applying basic - // features, the glyph can be moved closer to the main consonant based on - // whether half-forms had been formed. Actual position for the matra is - // defined as “after last standalone halant glyph, after initial matra - // position and before the main consonant”. If ZWJ or ZWNJ follow this - // halant, position is moved after it. - // - if (start + 1 < end && start < base) { - // If we lost track of base, alas, position before last thingy. - let newPos = base === end ? base - 2 : base - 1; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // If we found no Halant we are done. - // Otherwise only proceed if the Halant does - // not belong to the Matra itself! - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) // If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos + 1 < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos + 1])) newPos++; - } else newPos = start; // No move. - } - if (start < newPos && glyphs[newPos].shaperInfo.position !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - // Now go see if there's actually any matras... - for(let i = newPos; i > start; i--)if (glyphs[i - 1].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M) { - let oldPos = i - 1; - if (oldPos < base && base <= newPos) base--; - let tmp = glyphs[oldPos]; - glyphs.splice(oldPos, 0, ...glyphs.splice(oldPos + 1, newPos - oldPos)); - glyphs[newPos] = tmp; - newPos--; - } - } - } - // o Reorder reph: - // - // Reph’s original position is always at the beginning of the syllable, - // (i.e. it is not reordered at the character reordering stage). However, - // it will be reordered according to the basic-forms shaping results. - // Possible positions for reph, depending on the script, are; after main, - // before post-base consonant forms, and after post-base consonant forms. - // Two cases: - // - // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then - // we should only move it if the sequence ligated to the repha form. - // - // - If repha is encoded separately and in the logical position, we should only - // move it if it did NOT ligate. If it ligated, it's probably the font trying - // to make it work without the reordering. - if (start + 1 < end && glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Ra_To_Become_Reph && glyphs[start].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { - let newRephPos; - let rephPos = indicConfig.rephPos; - let found = false; - // 1. If reph should be positioned after post-base consonant forms, - // proceed to step 5. - if (rephPos !== (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post) { - // 2. If the reph repositioning class is not after post-base: target - // position is after the first explicit halant glyph between the - // first post-reph consonant and last main consonant. If ZWJ or ZWNJ - // are following this halant, position is moved after it. If such - // position is found, this is the target position. Otherwise, - // proceed to the next step. - // - // Note: in old-implementation fonts, where classifications were - // fixed in shaping engine, there was no case where reph position - // will be found on this step. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - // 3. If reph should be repositioned after the main consonant: find the - // first consonant not ligated with main, or find the first - // consonant that is not a potential pre-base reordering Ra. - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main) { - newRephPos = base; - while(newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Main)newRephPos++; - found = newRephPos < end; - } - // 4. If reph should be positioned before post-base consonant, find - // first post-base classified consonant not ligated with main. If no - // consonant is found, the target position should be before the - // first matra, syllable modifier sign or vedic sign. - // - // This is our take on what step 4 is trying to say (and failing, BADLY). - if (!found && rephPos === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Sub) { - newRephPos = base; - while(newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & ((0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Post_C | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).After_Post | (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)))newRephPos++; - found = newRephPos < end; - } - } - // 5. If no consonant is found in steps 3 or 4, move reph to a position - // immediately before the first post-base matra, syllable modifier - // sign or vedic sign that has a reordering class after the intended - // reph position. For example, if the reordering position for reph - // is post-main, it will skip above-base matras that also have a - // post-main position. - if (!found) { - // Copied from step 2. - newRephPos = start + 1; - while(newRephPos < base && !$d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos]))newRephPos++; - if (newRephPos < base && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - // ->If ZWJ or ZWNJ are following this halant, position is moved after it. - if (newRephPos + 1 < base && $d203e6b9523d0071$var$isJoiner(glyphs[newRephPos + 1])) newRephPos++; - found = true; - } - } - // 6. Otherwise, reorder reph to the end of the syllable. - if (!found) { - newRephPos = end - 1; - while(newRephPos > start && glyphs[newRephPos].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).SMVD)newRephPos--; - // If the Reph is to be ending up after a Matra,Halant sequence, - // position it before that Halant so it can interact with the Matra. - // However, if it's a plain Consonant,Halant we shouldn't do that. - // Uniscribe doesn't do this. - // TEST: U+0930,U+094D,U+0915,U+094B,U+094D - if ($d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newRephPos])) { - for(let i = base + 1; i < newRephPos; i++)if (glyphs[i].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) newRephPos--; - } - } - let reph = glyphs[start]; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, newRephPos - start)); - glyphs[newRephPos] = reph; - if (start < base && base <= newRephPos) base--; - } - // o Reorder pre-base reordering consonants: - // - // If a pre-base reordering consonant is found, reorder it according to - // the following rules: - if (tryPref && base + 1 < end) { - for(let i = base + 1; i < end; i++)if (glyphs[i].features.pref) { - // 1. Only reorder a glyph produced by substitution during application - // of the feature. (Note that a font may shape a Ra consonant with - // the feature generally but block it in certain contexts.) - // Note: We just check that something got substituted. We don't check that - // the feature actually did it... - // - // Reorder pref only if it ligated. - if (glyphs[i].isLigated && !glyphs[i].isMultiplied) { - // 2. Try to find a target position the same way as for pre-base matra. - // If it is found, reorder pre-base consonant glyph. - // - // 3. If position is not found, reorder immediately before main - // consonant. - let newPos = base; - // Malayalam / Tamil do not have "half" forms or explicit virama forms. - // The glyphs formed by 'half' are Chillus or ligated explicit viramas. - // We want to position matra after them. - if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { - while(newPos > start && !(glyphs[newPos - 1].shaperInfo.category & ((0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M | (0, $79e3b6f2c331d0bf$export$ca9599b2a300afc))))newPos--; - // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a - // split matra, it should be reordered to *before* the left part of such matra. - if (newPos > start && glyphs[newPos - 1].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - let oldPos = i; - for(let j = base + 1; j < oldPos; j++)if (glyphs[j].shaperInfo.category === (0, $79e3b6f2c331d0bf$export$a513ea61a7bee91c).M) { - newPos--; - break; - } - } - } - if (newPos > start && $d203e6b9523d0071$var$isHalantOrCoeng(glyphs[newPos - 1])) // -> If ZWJ or ZWNJ follow this halant, position is moved after it. - { - if (newPos < end && $d203e6b9523d0071$var$isJoiner(glyphs[newPos])) newPos++; - } - let oldPos = i; - let tmp = glyphs[oldPos]; - glyphs.splice(newPos + 1, 0, ...glyphs.splice(newPos, oldPos - newPos)); - glyphs[newPos] = tmp; - if (newPos <= base && base < oldPos) base++; - } - break; - } - } - // Apply 'init' to the Left Matra if it's a word start. - if (glyphs[start].shaperInfo.position === (0, $79e3b6f2c331d0bf$export$1a1f61c9c4dd9df0).Pre_M && (!start || !/Cf|Mn/.test((0, $gfJaN$unicodeproperties.getCategory)(glyphs[start - 1].codePoints[0])))) glyphs[start].features.init = true; - } -} -function $d203e6b9523d0071$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} - - - - - - - - - -const { categories: $9b772791ccede8a5$var$categories, decompositions: $9b772791ccede8a5$var$decompositions } = (0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports))); -const $9b772791ccede8a5$var$trie = new (0, ($parcel$interopDefault($gfJaN$unicodetrie)))((0, $66a5b9fb5318558a$export$94fdf11bafc8de6b)("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")); -const $9b772791ccede8a5$var$stateMachine = new (0, ($parcel$interopDefault($gfJaN$dfa)))((0, (/*@__PURE__*/$parcel$interopDefault($79781f8c452881c2$exports)))); -class $9b772791ccede8a5$export$2e2bcd8739ae039 extends (0, $d28fb665ee343afc$export$2e2bcd8739ae039) { - static planFeatures(plan) { - plan.addStage($9b772791ccede8a5$var$setupSyllables); - // Default glyph pre-processing group - plan.addStage([ - 'locl', - 'ccmp', - 'nukt', - 'akhn' - ]); - // Reordering group - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'rphf' - ], false); - plan.addStage($9b772791ccede8a5$var$recordRphf); - plan.addStage($9b772791ccede8a5$var$clearSubstitutionFlags); - plan.addStage([ - 'pref' - ]); - plan.addStage($9b772791ccede8a5$var$recordPref); - // Orthographic unit shaping group - plan.addStage([ - 'rkrf', - 'abvf', - 'blwf', - 'half', - 'pstf', - 'vatu', - 'cjct' - ]); - plan.addStage($9b772791ccede8a5$var$reorder); - // Topographical features - // Scripts that need this are handled by the Arabic shaper, not implemented here for now. - // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); - // Standard topographic presentation and positional feature application - plan.addStage([ - 'abvs', - 'blws', - 'pres', - 'psts', - 'dist', - 'abvm', - 'blwm' - ]); - } - static assignFeatures(plan, glyphs) { - // Decompose split vowels - // TODO: do this in a more general unicode normalizer - for(let i = glyphs.length - 1; i >= 0; i--){ - let codepoint = glyphs[i].codePoints[0]; - if ($9b772791ccede8a5$var$decompositions[codepoint]) { - let decomposed = $9b772791ccede8a5$var$decompositions[codepoint].map((c)=>{ - let g = plan.font.glyphForCodePoint(c); - return new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(plan.font, g.id, [ - c - ], glyphs[i].features); - }); - glyphs.splice(i, 1, ...decomposed); - } - } - } -} -(0, $gfJaN$swchelperscjs_define_propertycjs._)($9b772791ccede8a5$export$2e2bcd8739ae039, "zeroMarkWidths", 'BEFORE_GPOS'); -function $9b772791ccede8a5$var$useCategory(glyph) { - return $9b772791ccede8a5$var$trie.get(glyph.codePoints[0]); -} -class $9b772791ccede8a5$var$USEInfo { - constructor(category, syllableType, syllable){ - this.category = category; - this.syllableType = syllableType; - this.syllable = syllable; - } -} -function $9b772791ccede8a5$var$setupSyllables(font, glyphs) { - let syllable = 0; - for (let [start, end, tags] of $9b772791ccede8a5$var$stateMachine.match(glyphs.map($9b772791ccede8a5$var$useCategory))){ - ++syllable; - // Create shaper info - for(let i = start; i <= end; i++)glyphs[i].shaperInfo = new $9b772791ccede8a5$var$USEInfo($9b772791ccede8a5$var$categories[$9b772791ccede8a5$var$useCategory(glyphs[i])], tags[0], syllable); - // Assign rphf feature - let limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); - for(let i = start; i < start + limit; i++)glyphs[i].features.rphf = true; - } -} -function $9b772791ccede8a5$var$clearSubstitutionFlags(font, glyphs) { - for (let glyph of glyphs)glyph.substituted = false; -} -function $9b772791ccede8a5$var$recordRphf(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted && glyph.features.rphf) // Mark a substituted repha. - glyph.shaperInfo.category = 'R'; -} -function $9b772791ccede8a5$var$recordPref(font, glyphs) { - for (let glyph of glyphs)if (glyph.substituted) // Mark a substituted pref as VPre, as they behave the same way. - glyph.shaperInfo.category = 'VPre'; -} -function $9b772791ccede8a5$var$reorder(font, glyphs) { - let dottedCircle = font.glyphForCodePoint(0x25cc).id; - for(let start = 0, end = $9b772791ccede8a5$var$nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = $9b772791ccede8a5$var$nextSyllable(glyphs, start)){ - let i, j; - let info = glyphs[start].shaperInfo; - let type = info.syllableType; - // Only a few syllable types need reordering. - if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') continue; - // Insert a dotted circle glyph in broken clusters. - if (type === 'broken_cluster' && dottedCircle) { - let g = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(font, dottedCircle, [ - 0x25cc - ]); - g.shaperInfo = info; - // Insert after possible Repha. - for(i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++); - glyphs.splice(++i, 0, g); - end++; - } - // Move things forward. - if (info.category === 'R' && end - start > 1) // Got a repha. Reorder it to after first base, before first halant. - for(i = start + 1; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) { - // If we hit a halant, move before it; otherwise it's a base: move to it's - // place, and shift things in between backward. - if ($9b772791ccede8a5$var$isHalant(glyphs[i])) i--; - glyphs.splice(start, 0, ...glyphs.splice(start + 1, i - start), glyphs[i]); - break; - } - } - // Move things back. - for(i = start, j = end; i < end; i++){ - info = glyphs[i].shaperInfo; - if ($9b772791ccede8a5$var$isBase(info) || $9b772791ccede8a5$var$isHalant(glyphs[i])) // If we hit a halant, move after it; otherwise it's a base: move to it's - // place, and shift things in between backward. - j = $9b772791ccede8a5$var$isHalant(glyphs[i]) ? i + 1 : i; - else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) glyphs.splice(j, 1, glyphs[i], ...glyphs.splice(j, i - j)); - } - } -} -function $9b772791ccede8a5$var$nextSyllable(glyphs, start) { - if (start >= glyphs.length) return start; - let syllable = glyphs[start].shaperInfo.syllable; - while(++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable); - return start; -} -function $9b772791ccede8a5$var$isHalant(glyph) { - return glyph.shaperInfo.category === 'H' && !glyph.isLigated; -} -function $9b772791ccede8a5$var$isBase(info) { - return info.category === 'B' || info.category === 'GB'; -} - - -const $fdb4471fc82bc2c2$var$SHAPERS = { - arab: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mong: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - syrc: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - 'nko ': (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phag: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mand: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - mani: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - phlp: (0, $17ba6019f27bfcf9$export$2e2bcd8739ae039), - hang: (0, $fa1d9fd80dd7279e$export$2e2bcd8739ae039), - bng2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - beng: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - dev2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - deva: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gjr2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gujr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - guru: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - gur2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knda: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - knd2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlm2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - mlym: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - ory2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - orya: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - taml: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tml2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - telu: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - tel2: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - khmr: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - bali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - batk: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - brah: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - bugi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - buhd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cakm: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - cham: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - dupl: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - egyp: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - gran: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - hano: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - java: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kthi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - kali: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khar: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - khoj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sind: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lepc: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - limb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - mahj: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mand: UniversalShaper, // Mandaic - // mani: UniversalShaper, // Manichaean - mtei: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - modi: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // mong: UniversalShaper, // Mongolian - // 'nko ': UniversalShaper, // N’Ko - hmng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - // phag: UniversalShaper, // Phags-pa - // phlp: UniversalShaper, // Psalter Pahlavi - rjng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - saur: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - shrd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sidd: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sinh: (0, $d203e6b9523d0071$export$2e2bcd8739ae039), - sund: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - sylo: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tglg: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tagb: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tale: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - lana: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tavt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - takr: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tibt: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tfng: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - tirh: (0, $9b772791ccede8a5$export$2e2bcd8739ae039), - latn: (0, $d28fb665ee343afc$export$2e2bcd8739ae039), - DFLT: (0, $d28fb665ee343afc$export$2e2bcd8739ae039 // Default - ) -}; -function $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script) { - if (!Array.isArray(script)) script = [ - script - ]; - for (let s of script){ - let shaper = $fdb4471fc82bc2c2$var$SHAPERS[s]; - if (shaper) return shaper; - } - return 0, $d28fb665ee343afc$export$2e2bcd8739ae039; -} - - - - - -class $86bc1883359e094a$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - let glyph = this.glyphIterator.cur; - switch(table.version){ - case 1: - glyph.id = glyph.id + table.deltaGlyphID & 0xffff; - break; - case 2: - glyph.id = table.substitute.get(index); - break; - } - return true; - } - case 2: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let sequence = table.sequences.get(index); - if (sequence.length === 0) { - // If the sequence length is zero, delete the glyph. - // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it. - this.glyphs.splice(this.glyphIterator.index, 1); - return true; - } - this.glyphIterator.cur.id = sequence[0]; - this.glyphIterator.cur.ligatureComponent = 0; - let features = this.glyphIterator.cur.features; - let curGlyph = this.glyphIterator.cur; - let replacement = sequence.slice(1).map((gid, i)=>{ - let glyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, gid, undefined, features); - glyph.shaperInfo = curGlyph.shaperInfo; - glyph.isLigated = curGlyph.isLigated; - glyph.ligatureComponent = i + 1; - glyph.substituted = true; - glyph.isMultiplied = true; - return glyph; - }); - this.glyphs.splice(this.glyphIterator.index + 1, 0, ...replacement); - return true; - } - return false; - } - case 3: - { - let index = this.coverageIndex(table.coverage); - if (index !== -1) { - let USER_INDEX = 0; // TODO - this.glyphIterator.cur.id = table.alternateSet.get(index)[USER_INDEX]; - return true; - } - return false; - } - case 4: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - for (let ligature of table.ligatureSets.get(index)){ - let matched = this.sequenceMatchIndices(1, ligature.components); - if (!matched) continue; - let curGlyph = this.glyphIterator.cur; - // Concatenate all of the characters the new ligature will represent - let characters = curGlyph.codePoints.slice(); - for (let index of matched)characters.push(...this.glyphs[index].codePoints); - // Create the replacement ligature glyph - let ligatureGlyph = new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, ligature.glyph, characters, curGlyph.features); - ligatureGlyph.shaperInfo = curGlyph.shaperInfo; - ligatureGlyph.isLigated = true; - ligatureGlyph.substituted = true; - // From Harfbuzz: - // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave - // the ligature to keep its old ligature id. This will allow it to attach to - // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, - // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a - // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature - // later, we don't want them to lose their ligature id/component, otherwise - // GPOS will fail to correctly position the mark ligature on top of the - // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 - // - // - If a ligature is formed of components that some of which are also ligatures - // themselves, and those ligature components had marks attached to *their* - // components, we have to attach the marks to the new ligature component - // positions! Now *that*'s tricky! And these marks may be following the - // last component of the whole sequence, so we should loop forward looking - // for them and update them. - // - // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a - // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature - // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature - // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to - // the new ligature with a component value of 2. - // - // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 - let isMarkLigature = curGlyph.isMark; - for(let i = 0; i < matched.length && isMarkLigature; i++)isMarkLigature = this.glyphs[matched[i]].isMark; - ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; - let lastLigID = curGlyph.ligatureID; - let lastNumComps = curGlyph.codePoints.length; - let curComps = lastNumComps; - let idx = this.glyphIterator.index + 1; - // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. - // This allows GPOS to attach marks to the correct ligature components. - for (let matchIndex of matched){ - // Don't assign new ligature components for mark ligatures (see above) - if (isMarkLigature) idx = matchIndex; - else while(idx < matchIndex){ - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); - this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; - this.glyphs[idx].ligatureComponent = ligatureComponent; - idx++; - } - lastLigID = this.glyphs[idx].ligatureID; - lastNumComps = this.glyphs[idx].codePoints.length; - curComps += lastNumComps; - idx++; // skip base glyph - } - // Adjust ligature components for any marks following - if (lastLigID && !isMarkLigature) for(let i = idx; i < this.glyphs.length; i++){ - if (this.glyphs[i].ligatureID === lastLigID) { - var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[i].ligatureComponent || 1, lastNumComps); - this.glyphs[i].ligatureComponent = ligatureComponent; - } else break; - } - // Delete the matched glyphs, and replace the current glyph with the ligature glyph - for(let i = matched.length - 1; i >= 0; i--)this.glyphs.splice(matched[i], 1); - this.glyphs[this.glyphIterator.index] = ligatureGlyph; - return true; - } - return false; - } - case 5: - return this.applyContext(table); - case 6: - return this.applyChainingContext(table); - case 7: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`GSUB lookupType ${lookupType} is not supported`); - } - } -} - - - -class $79ea6270f0a90256$export$2e2bcd8739ae039 extends (0, $7b226e6bbeadedeb$export$2e2bcd8739ae039) { - applyPositionValue(sequenceIndex, value) { - let position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; - if (value.xAdvance != null) position.xAdvance += value.xAdvance; - if (value.yAdvance != null) position.yAdvance += value.yAdvance; - if (value.xPlacement != null) position.xOffset += value.xPlacement; - if (value.yPlacement != null) position.yOffset += value.yPlacement; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (value.xPlaDevice) position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); - if (value.yPlaDevice) position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); - if (value.xAdvDevice) position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); - if (value.yAdvDevice) position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); - } - // TODO: device tables - } - applyLookup(lookupType, table) { - switch(lookupType){ - case 1: - { - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - this.applyPositionValue(0, table.value); - break; - case 2: - this.applyPositionValue(0, table.values.get(index)); - break; - } - return true; - } - case 2: - { - let nextGlyph = this.glyphIterator.peek(); - if (!nextGlyph) return false; - let index = this.coverageIndex(table.coverage); - if (index === -1) return false; - switch(table.version){ - case 1: - let set = table.pairSets.get(index); - for (let pair of set)if (pair.secondGlyph === nextGlyph.id) { - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - return false; - case 2: - let class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); - let class2 = this.getClassID(nextGlyph.id, table.classDef2); - if (class1 === -1 || class2 === -1) return false; - var pair = table.classRecords.get(class1).get(class2); - this.applyPositionValue(0, pair.value1); - this.applyPositionValue(1, pair.value2); - return true; - } - } - case 3: - { - let nextIndex = this.glyphIterator.peekIndex(); - let nextGlyph = this.glyphs[nextIndex]; - if (!nextGlyph) return false; - let curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; - if (!curRecord || !curRecord.exitAnchor) return false; - let nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, nextGlyph.id)]; - if (!nextRecord || !nextRecord.entryAnchor) return false; - let entry = this.getAnchor(nextRecord.entryAnchor); - let exit = this.getAnchor(curRecord.exitAnchor); - let cur = this.positions[this.glyphIterator.index]; - let next = this.positions[nextIndex]; - let d; - switch(this.direction){ - case 'ltr': - cur.xAdvance = exit.x + cur.xOffset; - d = entry.x + next.xOffset; - next.xAdvance -= d; - next.xOffset -= d; - break; - case 'rtl': - d = exit.x + cur.xOffset; - cur.xAdvance -= d; - cur.xOffset -= d; - next.xAdvance = entry.x + next.xOffset; - break; - } - if (this.glyphIterator.flags.rightToLeft) { - this.glyphIterator.cur.cursiveAttachment = nextIndex; - cur.yOffset = entry.y - exit.y; - } else { - nextGlyph.cursiveAttachment = this.glyphIterator.index; - cur.yOffset = exit.y - entry.y; - } - return true; - } - case 4: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)); - if (baseGlyphIndex < 0) return false; - let baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); - if (baseIndex === -1) return false; - let markRecord = table.markArray[markIndex]; - let baseAnchor = table.baseArray[baseIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 5: - { - let markIndex = this.coverageIndex(table.markCoverage); - if (markIndex === -1) return false; - // search backward for a base glyph - let baseGlyphIndex = this.glyphIterator.index; - while(--baseGlyphIndex >= 0 && this.glyphs[baseGlyphIndex].isMark); - if (baseGlyphIndex < 0) return false; - let ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[baseGlyphIndex].id); - if (ligIndex === -1) return false; - let ligAttach = table.ligatureArray[ligIndex]; - let markGlyph = this.glyphIterator.cur; - let ligGlyph = this.glyphs[baseGlyphIndex]; - let compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; - let markRecord = table.markArray[markIndex]; - let baseAnchor = ligAttach[compIndex][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); - return true; - } - case 6: - { - let mark1Index = this.coverageIndex(table.mark1Coverage); - if (mark1Index === -1) return false; - // get the previous mark to attach to - let prevIndex = this.glyphIterator.peekIndex(-1); - let prev = this.glyphs[prevIndex]; - if (!prev || !prev.isMark) return false; - let cur = this.glyphIterator.cur; - // The following logic was borrowed from Harfbuzz - let good = false; - if (cur.ligatureID === prev.ligatureID) { - if (!cur.ligatureID) good = true; - else if (cur.ligatureComponent === prev.ligatureComponent) good = true; - } else // If ligature ids don't match, it may be the case that one of the marks - // itself is a ligature, in which case match. - if (cur.ligatureID && !cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) good = true; - if (!good) return false; - let mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); - if (mark2Index === -1) return false; - let markRecord = table.mark1Array[mark1Index]; - let baseAnchor = table.mark2Array[mark2Index][markRecord.class]; - this.applyAnchor(markRecord, baseAnchor, prevIndex); - return true; - } - case 7: - return this.applyContext(table); - case 8: - return this.applyChainingContext(table); - case 9: - return this.applyLookup(table.lookupType, table.extension); - default: - throw new Error(`Unsupported GPOS table: ${lookupType}`); - } - } - applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { - let baseCoords = this.getAnchor(baseAnchor); - let markCoords = this.getAnchor(markRecord.markAnchor); - let basePos = this.positions[baseGlyphIndex]; - let markPos = this.positions[this.glyphIterator.index]; - markPos.xOffset = baseCoords.x - markCoords.x; - markPos.yOffset = baseCoords.y - markCoords.y; - this.glyphIterator.cur.markAttachment = baseGlyphIndex; - } - getAnchor(anchor) { - // TODO: contour point, device tables - let x = anchor.xCoordinate; - let y = anchor.yCoordinate; - // Adjustments for font variations - let variationProcessor = this.font._variationProcessor; - let variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; - if (variationProcessor && variationStore) { - if (anchor.xDeviceTable) x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); - if (anchor.yDeviceTable) y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); - } - return { - x: x, - y: y - }; - } - applyFeatures(userFeatures, glyphs, advances) { - super.applyFeatures(userFeatures, glyphs, advances); - for(var i = 0; i < this.glyphs.length; i++)this.fixCursiveAttachment(i); - this.fixMarkAttachment(); - } - fixCursiveAttachment(i) { - let glyph = this.glyphs[i]; - if (glyph.cursiveAttachment != null) { - let j = glyph.cursiveAttachment; - glyph.cursiveAttachment = null; - this.fixCursiveAttachment(j); - this.positions[i].yOffset += this.positions[j].yOffset; - } - } - fixMarkAttachment() { - for(let i = 0; i < this.glyphs.length; i++){ - let glyph = this.glyphs[i]; - if (glyph.markAttachment != null) { - let j = glyph.markAttachment; - this.positions[i].xOffset += this.positions[j].xOffset; - this.positions[i].yOffset += this.positions[j].yOffset; - if (this.direction === 'ltr') for(let k = j; k < i; k++){ - this.positions[i].xOffset -= this.positions[k].xAdvance; - this.positions[i].yOffset -= this.positions[k].yAdvance; - } - else for(let k = j + 1; k < i + 1; k++){ - this.positions[i].xOffset += this.positions[k].xAdvance; - this.positions[i].yOffset += this.positions[k].yAdvance; - } - } - } - } -} - - -class $b2f26a32cb9ab2fa$export$2e2bcd8739ae039 { - setup(glyphRun) { - // Map glyphs to GlyphInfo objects so data can be passed between - // GSUB and GPOS without mutating the real (shared) Glyph objects. - this.glyphInfos = glyphRun.glyphs.map((glyph)=>new (0, $f22bb23c9fd478d8$export$2e2bcd8739ae039)(this.font, glyph.id, [ - ...glyph.codePoints - ])); - // Select a script based on what is available in GSUB/GPOS. - let script = null; - if (this.GPOSProcessor) script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - if (this.GSUBProcessor) script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); - // Choose a shaper based on the script, and setup a shaping plan. - // This determines which features to apply to which glyphs. - this.shaper = $fdb4471fc82bc2c2$export$7877a478dd30fd3d(script); - this.plan = new (0, $d7e93cca3cf8ce8a$export$2e2bcd8739ae039)(this.font, script, glyphRun.direction); - this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); - // Assign chosen features to output glyph run - for(let key in this.plan.allFeatures)glyphRun.features[key] = true; - } - substitute(glyphRun) { - if (this.GSUBProcessor) { - this.plan.process(this.GSUBProcessor, this.glyphInfos); - // Map glyph infos back to normal Glyph objects - glyphRun.glyphs = this.glyphInfos.map((glyphInfo)=>this.font.getGlyph(glyphInfo.id, glyphInfo.codePoints)); - } - } - position(glyphRun) { - if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') this.zeroMarkAdvances(glyphRun.positions); - if (this.GPOSProcessor) this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); - if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') this.zeroMarkAdvances(glyphRun.positions); - // Reverse the glyphs and positions if the script is right-to-left - if (glyphRun.direction === 'rtl') { - glyphRun.glyphs.reverse(); - glyphRun.positions.reverse(); - } - return this.GPOSProcessor && this.GPOSProcessor.features; - } - zeroMarkAdvances(positions) { - for(let i = 0; i < this.glyphInfos.length; i++)if (this.glyphInfos[i].isMark) { - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - cleanup() { - this.glyphInfos = null; - this.plan = null; - this.shaper = null; - } - getAvailableFeatures(script, language) { - let features = []; - if (this.GSUBProcessor) { - this.GSUBProcessor.selectScript(script, language); - features.push(...Object.keys(this.GSUBProcessor.features)); - } - if (this.GPOSProcessor) { - this.GPOSProcessor.selectScript(script, language); - features.push(...Object.keys(this.GPOSProcessor.features)); - } - return features; - } - constructor(font){ - this.font = font; - this.glyphInfos = null; - this.plan = null; - this.GSUBProcessor = null; - this.GPOSProcessor = null; - this.fallbackPosition = true; - if (font.GSUB) this.GSUBProcessor = new (0, $86bc1883359e094a$export$2e2bcd8739ae039)(font, font.GSUB); - if (font.GPOS) this.GPOSProcessor = new (0, $79ea6270f0a90256$export$2e2bcd8739ae039)(font, font.GPOS); - } -} - - -class $9d641258c9d7180d$export$2e2bcd8739ae039 { - layout(string, features, script, language, direction) { - // Make the features parameter optional - if (typeof features === 'string') { - direction = language; - language = script; - script = features; - features = []; - } - // Map string to glyphs if needed - if (typeof string === 'string') { - // Attempt to detect the script from the string if not provided. - if (script == null) script = $e38a1a895f6aeb54$export$e5cb25e204fb8450(string); - var glyphs = this.font.glyphsForString(string); - } else { - // Attempt to detect the script from the glyph code points if not provided. - if (script == null) { - let codePoints = []; - for (let glyph of string)codePoints.push(...glyph.codePoints); - script = $e38a1a895f6aeb54$export$16fab0757cfc223d(codePoints); - } - var glyphs = string; - } - let glyphRun = new (0, $b19c79ec7a94fa39$export$2e2bcd8739ae039)(glyphs, features, script, language, direction); - // Return early if there are no glyphs - if (glyphs.length === 0) { - glyphRun.positions = []; - return glyphRun; - } - // Setup the advanced layout engine - if (this.engine && this.engine.setup) this.engine.setup(glyphRun); - // Substitute and position the glyphs - this.substitute(glyphRun); - this.position(glyphRun); - this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); - // Let the layout engine clean up any state it might have - if (this.engine && this.engine.cleanup) this.engine.cleanup(); - return glyphRun; - } - substitute(glyphRun) { - // Call the advanced layout engine to make substitutions - if (this.engine && this.engine.substitute) this.engine.substitute(glyphRun); - } - position(glyphRun) { - // Get initial glyph positions - glyphRun.positions = glyphRun.glyphs.map((glyph)=>new (0, $9195cf1266c12ea5$export$2e2bcd8739ae039)(glyph.advanceWidth)); - let positioned = null; - // Call the advanced layout engine. Returns the features applied. - if (this.engine && this.engine.position) positioned = this.engine.position(glyphRun); - // if there is no GPOS table, use unicode properties to position marks. - if (!positioned && (!this.engine || this.engine.fallbackPosition)) { - if (!this.unicodeLayoutEngine) this.unicodeLayoutEngine = new (0, $a57a26817cd35108$export$2e2bcd8739ae039)(this.font); - this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); - } - // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table - if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { - if (!this.kernProcessor) this.kernProcessor = new (0, $4646d52c2a559cdb$export$2e2bcd8739ae039)(this.font); - this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); - glyphRun.features.kern = true; - } - } - hideDefaultIgnorables(glyphs, positions) { - let space = this.font.glyphForCodePoint(0x20); - for(let i = 0; i < glyphs.length; i++)if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { - glyphs[i] = space; - positions[i].xAdvance = 0; - positions[i].yAdvance = 0; - } - } - isDefaultIgnorable(ch) { - // From DerivedCoreProperties.txt in the Unicode database, - // minus U+115F, U+1160, U+3164 and U+FFA0, which is what - // Harfbuzz and Uniscribe do. - let plane = ch >> 16; - if (plane === 0) // BMP - switch(ch >> 8){ - case 0x00: - return ch === 0x00AD; - case 0x03: - return ch === 0x034F; - case 0x06: - return ch === 0x061C; - case 0x17: - return 0x17B4 <= ch && ch <= 0x17B5; - case 0x18: - return 0x180B <= ch && ch <= 0x180E; - case 0x20: - return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; - case 0xFE: - return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; - case 0xFF: - return 0xFFF0 <= ch && ch <= 0xFFF8; - default: - return false; - } - else // Other planes - switch(plane){ - case 0x01: - return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; - case 0x0E: - return 0xE0000 <= ch && ch <= 0xE0FFF; - default: - return false; - } - } - getAvailableFeatures(script, language) { - let features = []; - if (this.engine) features.push(...this.engine.getAvailableFeatures(script, language)); - if (this.font.kern && features.indexOf('kern') === -1) features.push('kern'); - return features; - } - stringsForGlyph(gid) { - let result = new Set; - let codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); - for (let codePoint of codePoints)result.add(String.fromCodePoint(codePoint)); - if (this.engine && this.engine.stringsForGlyph) for (let string of this.engine.stringsForGlyph(gid))result.add(string); - return Array.from(result); - } - constructor(font){ - this.font = font; - this.unicodeLayoutEngine = null; - this.kernProcessor = null; - // Choose an advanced layout engine. We try the AAT morx table first since more - // scripts are currently supported because the shaping logic is built into the font. - if (this.font.morx) this.engine = new (0, $860fcbd64bc12fbc$export$2e2bcd8739ae039)(this.font); - else if (this.font.GSUB || this.font.GPOS) this.engine = new (0, $b2f26a32cb9ab2fa$export$2e2bcd8739ae039)(this.font); - } -} - - - - - - -const $67ee4828d81adb28$var$SVG_COMMANDS = { - moveTo: 'M', - lineTo: 'L', - quadraticCurveTo: 'Q', - bezierCurveTo: 'C', - closePath: 'Z' -}; -class $67ee4828d81adb28$export$2e2bcd8739ae039 { - /** - * Compiles the path to a JavaScript function that can be applied with - * a graphics context in order to render the path. - * @return {string} - */ toFunction() { - return (ctx)=>{ - this.commands.forEach((c)=>{ - return ctx[c.command].apply(ctx, c.args); - }); - }; - } - /** - * Converts the path to an SVG path data string - * @return {string} - */ toSVG() { - let cmds = this.commands.map((c)=>{ - let args = c.args.map((arg)=>Math.round(arg * 100) / 100); - return `${$67ee4828d81adb28$var$SVG_COMMANDS[c.command]}${args.join(' ')}`; - }); - return cmds.join(''); - } - /** - * Gets the "control box" of a path. - * This is like the bounding box, but it includes all points including - * control points of bezier segments and is much faster to compute than - * the real bounding box. - * @type {BBox} - */ get cbox() { - if (!this._cbox) { - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for (let command of this.commands)for(let i = 0; i < command.args.length; i += 2)cbox.addPoint(command.args[i], command.args[i + 1]); - this._cbox = Object.freeze(cbox); - } - return this._cbox; - } - /** - * Gets the exact bounding box of the path by evaluating curve segments. - * Slower to compute than the control box, but more accurate. - * @type {BBox} - */ get bbox() { - if (this._bbox) return this._bbox; - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - let cx = 0, cy = 0; - let f = (t)=>Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; - for (let c of this.commands)switch(c.command){ - case 'moveTo': - case 'lineTo': - let [x, y] = c.args; - bbox.addPoint(x, y); - cx = x; - cy = y; - break; - case 'quadraticCurveTo': - case 'bezierCurveTo': - if (c.command === 'quadraticCurveTo') { - // http://fontforge.org/bezier.html - var [qp1x, qp1y, p3x, p3y] = c.args; - var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) - var cp1y = cy + 2 / 3 * (qp1y - cy); - var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) - var cp2y = p3y + 2 / 3 * (qp1y - p3y); - } else var [cp1x, cp1y, cp2x, cp2y, p3x, p3y] = c.args; - // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - bbox.addPoint(p3x, p3y); - var p0 = [ - cx, - cy - ]; - var p1 = [ - cp1x, - cp1y - ]; - var p2 = [ - cp2x, - cp2y - ]; - var p3 = [ - p3x, - p3y - ]; - for(var i = 0; i <= 1; i++){ - let b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - let a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - let t = -c / b; - if (0 < t && t < 1) { - if (i === 0) bbox.addPoint(f(t), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t)); - } - continue; - } - let b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - let t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) bbox.addPoint(f(t1), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t1)); - } - let t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) bbox.addPoint(f(t2), bbox.maxY); - else if (i === 1) bbox.addPoint(bbox.maxX, f(t2)); - } - } - cx = p3x; - cy = p3y; - break; - } - return this._bbox = Object.freeze(bbox); - } - /** - * Applies a mapping function to each point in the path. - * @param {function} fn - * @return {Path} - */ mapPoints(fn) { - let path = new $67ee4828d81adb28$export$2e2bcd8739ae039; - for (let c of this.commands){ - let args = []; - for(let i = 0; i < c.args.length; i += 2){ - let [x, y] = fn(c.args[i], c.args[i + 1]); - args.push(x, y); - } - path[c.command](...args); - } - return path; - } - /** - * Transforms the path by the given matrix. - */ transform(m0, m1, m2, m3, m4, m5) { - return this.mapPoints((x, y)=>{ - const tx = m0 * x + m2 * y + m4; - const ty = m1 * x + m3 * y + m5; - return [ - tx, - ty - ]; - }); - } - /** - * Translates the path by the given offset. - */ translate(x, y) { - return this.transform(1, 0, 0, 1, x, y); - } - /** - * Rotates the path by the given angle (in radians). - */ rotate(angle) { - let cos = Math.cos(angle); - let sin = Math.sin(angle); - return this.transform(cos, sin, -sin, cos, 0, 0); - } - /** - * Scales the path. - */ scale(scaleX, scaleY = scaleX) { - return this.transform(scaleX, 0, 0, scaleY, 0, 0); - } - constructor(){ - this.commands = []; - this._bbox = null; - this._cbox = null; - } -} -for (let command of [ - 'moveTo', - 'lineTo', - 'quadraticCurveTo', - 'bezierCurveTo', - 'closePath' -])$67ee4828d81adb28$export$2e2bcd8739ae039.prototype[command] = function(...args) { - this._bbox = this._cbox = null; - this.commands.push({ - command: command, - args: args - }); - return this; -}; - - - -var $85e16e40023cfb0f$export$2e2bcd8739ae039 = [ - '.notdef', - '.null', - 'nonmarkingreturn', - 'space', - 'exclam', - 'quotedbl', - 'numbersign', - 'dollar', - 'percent', - 'ampersand', - 'quotesingle', - 'parenleft', - 'parenright', - 'asterisk', - 'plus', - 'comma', - 'hyphen', - 'period', - 'slash', - 'zero', - 'one', - 'two', - 'three', - 'four', - 'five', - 'six', - 'seven', - 'eight', - 'nine', - 'colon', - 'semicolon', - 'less', - 'equal', - 'greater', - 'question', - 'at', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - 'G', - 'H', - 'I', - 'J', - 'K', - 'L', - 'M', - 'N', - 'O', - 'P', - 'Q', - 'R', - 'S', - 'T', - 'U', - 'V', - 'W', - 'X', - 'Y', - 'Z', - 'bracketleft', - 'backslash', - 'bracketright', - 'asciicircum', - 'underscore', - 'grave', - 'a', - 'b', - 'c', - 'd', - 'e', - 'f', - 'g', - 'h', - 'i', - 'j', - 'k', - 'l', - 'm', - 'n', - 'o', - 'p', - 'q', - 'r', - 's', - 't', - 'u', - 'v', - 'w', - 'x', - 'y', - 'z', - 'braceleft', - 'bar', - 'braceright', - 'asciitilde', - 'Adieresis', - 'Aring', - 'Ccedilla', - 'Eacute', - 'Ntilde', - 'Odieresis', - 'Udieresis', - 'aacute', - 'agrave', - 'acircumflex', - 'adieresis', - 'atilde', - 'aring', - 'ccedilla', - 'eacute', - 'egrave', - 'ecircumflex', - 'edieresis', - 'iacute', - 'igrave', - 'icircumflex', - 'idieresis', - 'ntilde', - 'oacute', - 'ograve', - 'ocircumflex', - 'odieresis', - 'otilde', - 'uacute', - 'ugrave', - 'ucircumflex', - 'udieresis', - 'dagger', - 'degree', - 'cent', - 'sterling', - 'section', - 'bullet', - 'paragraph', - 'germandbls', - 'registered', - 'copyright', - 'trademark', - 'acute', - 'dieresis', - 'notequal', - 'AE', - 'Oslash', - 'infinity', - 'plusminus', - 'lessequal', - 'greaterequal', - 'yen', - 'mu', - 'partialdiff', - 'summation', - 'product', - 'pi', - 'integral', - 'ordfeminine', - 'ordmasculine', - 'Omega', - 'ae', - 'oslash', - 'questiondown', - 'exclamdown', - 'logicalnot', - 'radical', - 'florin', - 'approxequal', - 'Delta', - 'guillemotleft', - 'guillemotright', - 'ellipsis', - 'nonbreakingspace', - 'Agrave', - 'Atilde', - 'Otilde', - 'OE', - 'oe', - 'endash', - 'emdash', - 'quotedblleft', - 'quotedblright', - 'quoteleft', - 'quoteright', - 'divide', - 'lozenge', - 'ydieresis', - 'Ydieresis', - 'fraction', - 'currency', - 'guilsinglleft', - 'guilsinglright', - 'fi', - 'fl', - 'daggerdbl', - 'periodcentered', - 'quotesinglbase', - 'quotedblbase', - 'perthousand', - 'Acircumflex', - 'Ecircumflex', - 'Aacute', - 'Edieresis', - 'Egrave', - 'Iacute', - 'Icircumflex', - 'Idieresis', - 'Igrave', - 'Oacute', - 'Ocircumflex', - 'apple', - 'Ograve', - 'Uacute', - 'Ucircumflex', - 'Ugrave', - 'dotlessi', - 'circumflex', - 'tilde', - 'macron', - 'breve', - 'dotaccent', - 'ring', - 'cedilla', - 'hungarumlaut', - 'ogonek', - 'caron', - 'Lslash', - 'lslash', - 'Scaron', - 'scaron', - 'Zcaron', - 'zcaron', - 'brokenbar', - 'Eth', - 'eth', - 'Yacute', - 'yacute', - 'Thorn', - 'thorn', - 'minus', - 'multiply', - 'onesuperior', - 'twosuperior', - 'threesuperior', - 'onehalf', - 'onequarter', - 'threequarters', - 'franc', - 'Gbreve', - 'gbreve', - 'Idotaccent', - 'Scedilla', - 'scedilla', - 'Cacute', - 'cacute', - 'Ccaron', - 'ccaron', - 'dcroat' -]; - - -class $0e4f52d7996e478b$export$2e2bcd8739ae039 { - _getPath() { - return new (0, $67ee4828d81adb28$export$2e2bcd8739ae039)(); - } - _getCBox() { - return this.path.cbox; - } - _getBBox() { - return this.path.bbox; - } - _getTableMetrics(table) { - if (this.id < table.metrics.length) return table.metrics.get(this.id); - let metric = table.metrics.get(table.metrics.length - 1); - let res = { - advance: metric ? metric.advance : 0, - bearing: table.bearings.get(this.id - table.metrics.length) || 0 - }; - return res; - } - _getMetrics(cbox) { - if (this._metrics) return this._metrics; - let { advance: advanceWidth, bearing: leftBearing } = this._getTableMetrics(this._font.hmtx); - // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea - if (this._font.vmtx) var { advance: advanceHeight, bearing: topBearing } = this._getTableMetrics(this._font.vmtx); - else { - let os2; - if (typeof cbox === 'undefined' || cbox === null) ({ cbox: cbox } = this); - if ((os2 = this._font['OS/2']) && os2.version > 0) { - var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); - var topBearing = os2.typoAscender - cbox.maxY; - } else { - let { hhea: hhea } = this._font; - var advanceHeight = Math.abs(hhea.ascent - hhea.descent); - var topBearing = hhea.ascent - cbox.maxY; - } - } - if (this._font._variationProcessor && this._font.HVAR) advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); - return this._metrics = { - advanceWidth: advanceWidth, - advanceHeight: advanceHeight, - leftBearing: leftBearing, - topBearing: topBearing - }; - } - /** - * The glyph’s control box. - * This is often the same as the bounding box, but is faster to compute. - * Because of the way bezier curves are defined, some of the control points - * can be outside of the bounding box. Where `bbox` takes this into account, - * `cbox` does not. Thus, cbox is less accurate, but faster to compute. - * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) - * for a more detailed description. - * - * @type {BBox} - */ get cbox() { - return this._getCBox(); - } - /** - * The glyph’s bounding box, i.e. the rectangle that encloses the - * glyph outline as tightly as possible. - * @type {BBox} - */ get bbox() { - return this._getBBox(); - } - /** - * A vector Path object representing the glyph outline. - * @type {Path} - */ get path() { - // Cache the path so we only decode it once - // Decoding is actually performed by subclasses - return this._getPath(); - } - /** - * Returns a path scaled to the given font size. - * @param {number} size - * @return {Path} - */ getScaledPath(size) { - let scale = 1 / this._font.unitsPerEm * size; - return this.path.scale(scale); - } - /** - * The glyph's advance width. - * @type {number} - */ get advanceWidth() { - return this._getMetrics().advanceWidth; - } - /** - * The glyph's advance height. - * @type {number} - */ get advanceHeight() { - return this._getMetrics().advanceHeight; - } - get ligatureCaretPositions() {} - _getName() { - let { post: post } = this._font; - if (!post) return null; - switch(post.version){ - case 1: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id]; - case 2: - let id = post.glyphNameIndex[this.id]; - if (id < (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length) return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[id]; - return post.names[id - (0, $85e16e40023cfb0f$export$2e2bcd8739ae039).length]; - case 2.5: - return (0, $85e16e40023cfb0f$export$2e2bcd8739ae039)[this.id + post.offsets[this.id]]; - case 4: - return String.fromCharCode(post.map[this.id]); - } - } - /** - * The glyph's name - * @type {string} - */ get name() { - return this._getName(); - } - /** - * Renders the glyph to the given graphics context, at the specified font size. - * @param {CanvasRenderingContext2d} ctx - * @param {number} size - */ render(ctx, size) { - ctx.save(); - let scale = 1 / this._font.head.unitsPerEm * size; - ctx.scale(scale, scale); - let fn = this.path.toFunction(); - fn(ctx); - ctx.fill(); - ctx.restore(); - } - constructor(id, codePoints, font){ - /** - * The glyph id in the font - * @type {number} - */ this.id = id; - /** - * An array of unicode code points that are represented by this glyph. - * There can be multiple code points in the case of ligatures and other glyphs - * that represent multiple visual characters. - * @type {number[]} - */ this.codePoints = codePoints; - this._font = font; - // TODO: get this info from GDEF if available - this.isMark = this.codePoints.length > 0 && this.codePoints.every((0, $gfJaN$unicodeproperties.isMark)); - this.isLigature = this.codePoints.length > 1; - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "cbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "path", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceWidth", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "advanceHeight", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0e4f52d7996e478b$export$2e2bcd8739ae039.prototype, "name", null); - - - - - -// The header for both simple and composite glyphs -let $f680320fa07ef53d$var$GlyfHeader = new $gfJaN$restructure.Struct({ - numberOfContours: $gfJaN$restructure.int16, - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16 -}); -// Flags for simple glyphs -const $f680320fa07ef53d$var$ON_CURVE = 1; -const $f680320fa07ef53d$var$X_SHORT_VECTOR = 2; -const $f680320fa07ef53d$var$Y_SHORT_VECTOR = 4; -const $f680320fa07ef53d$var$REPEAT = 8; -const $f680320fa07ef53d$var$SAME_X = 16; -const $f680320fa07ef53d$var$SAME_Y = 32; -// Flags for composite glyphs -const $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS = 1; -const $f680320fa07ef53d$var$ARGS_ARE_XY_VALUES = 2; -const $f680320fa07ef53d$var$ROUND_XY_TO_GRID = 4; -const $f680320fa07ef53d$var$WE_HAVE_A_SCALE = 8; -const $f680320fa07ef53d$var$MORE_COMPONENTS = 32; -const $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE = 64; -const $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO = 128; -const $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS = 256; -const $f680320fa07ef53d$var$USE_MY_METRICS = 512; -const $f680320fa07ef53d$var$OVERLAP_COMPOUND = 1024; -const $f680320fa07ef53d$var$SCALED_COMPONENT_OFFSET = 2048; -const $f680320fa07ef53d$var$UNSCALED_COMPONENT_OFFSET = 4096; -class $f680320fa07ef53d$export$baf26146a414f24a { - copy() { - return new $f680320fa07ef53d$export$baf26146a414f24a(this.onCurve, this.endContour, this.x, this.y); - } - constructor(onCurve, endContour, x = 0, y = 0){ - this.onCurve = onCurve; - this.endContour = endContour; - this.x = x; - this.y = y; - } -} -// Represents a component in a composite glyph -class $f680320fa07ef53d$var$Component { - constructor(glyphID, dx, dy){ - this.glyphID = glyphID; - this.dx = dx; - this.dy = dy; - this.pos = 0; - this.scaleX = this.scaleY = 1; - this.scale01 = this.scale10 = 0; - } -} -class $f680320fa07ef53d$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - // Parses just the glyph header and returns the bounding box - _getCBox(internal) { - // We need to decode the glyph if variation processing is requested, - // so it's easier just to recompute the path's cbox after decoding. - if (this._font._variationProcessor && !internal) return this.path.cbox; - let stream = this._font._getTableStream('glyf'); - stream.pos += this._font.loca.offsets[this.id]; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - let cbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); - return Object.freeze(cbox); - } - // Parses a single glyph coordinate - _parseGlyphCoord(stream, prev, short, same) { - if (short) { - var val = stream.readUInt8(); - if (!same) val = -val; - val += prev; - } else if (same) var val = prev; - else var val = prev + stream.readInt16BE(); - return val; - } - // Decodes the glyph data into points for simple glyphs, - // or components for composite glyphs - _decode() { - let glyfPos = this._font.loca.offsets[this.id]; - let nextPos = this._font.loca.offsets[this.id + 1]; - // Nothing to do if there is no data for this glyph - if (glyfPos === nextPos) return null; - let stream = this._font._getTableStream('glyf'); - stream.pos += glyfPos; - let startPos = stream.pos; - let glyph = $f680320fa07ef53d$var$GlyfHeader.decode(stream); - if (glyph.numberOfContours > 0) this._decodeSimple(glyph, stream); - else if (glyph.numberOfContours < 0) this._decodeComposite(glyph, stream, startPos); - return glyph; - } - _decodeSimple(glyph, stream) { - // this is a simple glyph - glyph.points = []; - let endPtsOfContours = new $gfJaN$restructure.Array($gfJaN$restructure.uint16, glyph.numberOfContours).decode(stream); - glyph.instructions = new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16).decode(stream); - let flags = []; - let numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; - while(flags.length < numCoords){ - var flag = stream.readUInt8(); - flags.push(flag); - // check for repeat flag - if (flag & $f680320fa07ef53d$var$REPEAT) { - let count = stream.readUInt8(); - for(let j = 0; j < count; j++)flags.push(flag); - } - } - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - let point = new $f680320fa07ef53d$export$baf26146a414f24a(!!(flag & $f680320fa07ef53d$var$ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); - glyph.points.push(point); - } - let px = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & $f680320fa07ef53d$var$X_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_X); - } - let py = 0; - for(var i = 0; i < flags.length; i++){ - var flag = flags[i]; - glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & $f680320fa07ef53d$var$Y_SHORT_VECTOR, flag & $f680320fa07ef53d$var$SAME_Y); - } - if (this._font._variationProcessor) { - let points = glyph.points.slice(); - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.slice(-4); - } - return; - } - _decodeComposite(glyph, stream, offset = 0) { - // this is a composite glyph - glyph.components = []; - let haveInstructions = false; - let flags = $f680320fa07ef53d$var$MORE_COMPONENTS; - while(flags & $f680320fa07ef53d$var$MORE_COMPONENTS){ - flags = stream.readUInt16BE(); - let gPos = stream.pos - offset; - let glyphID = stream.readUInt16BE(); - if (!haveInstructions) haveInstructions = (flags & $f680320fa07ef53d$var$WE_HAVE_INSTRUCTIONS) !== 0; - if (flags & $f680320fa07ef53d$var$ARG_1_AND_2_ARE_WORDS) { - var dx = stream.readInt16BE(); - var dy = stream.readInt16BE(); - } else { - var dx = stream.readInt8(); - var dy = stream.readInt8(); - } - var component = new $f680320fa07ef53d$var$Component(glyphID, dx, dy); - component.pos = gPos; - if (flags & $f680320fa07ef53d$var$WE_HAVE_A_SCALE) // fixed number with 14 bits of fraction - component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - else if (flags & $f680320fa07ef53d$var$WE_HAVE_AN_X_AND_Y_SCALE) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } else if (flags & $f680320fa07ef53d$var$WE_HAVE_A_TWO_BY_TWO) { - component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; - } - glyph.components.push(component); - } - if (this._font._variationProcessor) { - let points = []; - for(let j = 0; j < glyph.components.length; j++){ - var component = glyph.components[j]; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(true, true, component.dx, component.dy)); - } - points.push(...this._getPhantomPoints(glyph)); - this._font._variationProcessor.transformPoints(this.id, points); - glyph.phantomPoints = points.splice(-4, 4); - for(let i = 0; i < points.length; i++){ - let point = points[i]; - glyph.components[i].dx = point.x; - glyph.components[i].dy = point.y; - } - } - return haveInstructions; - } - _getPhantomPoints(glyph) { - let cbox = this._getCBox(true); - if (this._metrics == null) this._metrics = (0, $0e4f52d7996e478b$export$2e2bcd8739ae039).prototype._getMetrics.call(this, cbox); - let { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing } = this._metrics; - return [ - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, glyph.xMin - leftBearing + advanceWidth, 0), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing), - new $f680320fa07ef53d$export$baf26146a414f24a(false, true, 0, glyph.yMax + topBearing + advanceHeight) - ]; - } - // Decodes font data, resolves composite glyphs, and returns an array of contours - _getContours() { - let glyph = this._decode(); - if (!glyph) return []; - let points = []; - if (glyph.numberOfContours < 0) // resolve composite glyphs - for (let component of glyph.components){ - let contours = this._font.getGlyph(component.glyphID)._getContours(); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - for(let j = 0; j < contour.length; j++){ - let point = contour[j]; - let x = point.x * component.scaleX + point.y * component.scale01 + component.dx; - let y = point.y * component.scaleY + point.x * component.scale10 + component.dy; - points.push(new $f680320fa07ef53d$export$baf26146a414f24a(point.onCurve, point.endContour, x, y)); - } - } - } - else points = glyph.points || []; - // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table - if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { - this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; - this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; - this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; - this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; - } - let contours = []; - let cur = []; - for(let k = 0; k < points.length; k++){ - var point = points[k]; - cur.push(point); - if (point.endContour) { - contours.push(cur); - cur = []; - } - } - return contours; - } - _getMetrics() { - if (this._metrics) return this._metrics; - let cbox = this._getCBox(true); - super._getMetrics(cbox); - if (this._font._variationProcessor && !this._font.HVAR) // No HVAR table, decode the glyph. This triggers recomputation of metrics. - this.path; - return this._metrics; - } - // Converts contours to a Path object that can be rendered - _getPath() { - let contours = this._getContours(); - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - for(let i = 0; i < contours.length; i++){ - let contour = contours[i]; - let firstPt = contour[0]; - let lastPt = contour[contour.length - 1]; - let start = 0; - if (firstPt.onCurve) { - // The first point will be consumed by the moveTo command, so skip in the loop - var curvePt = null; - start = 1; - } else { - if (lastPt.onCurve) // Start at the last point if the first point is off curve and the last point is on curve - firstPt = lastPt; - else // Start at the middle if both the first and last points are off curve - firstPt = new $f680320fa07ef53d$export$baf26146a414f24a(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); - var curvePt = firstPt; - } - path.moveTo(firstPt.x, firstPt.y); - for(let j = start; j < contour.length; j++){ - let pt = contour[j]; - let prevPt = j === 0 ? firstPt : contour[j - 1]; - if (prevPt.onCurve && pt.onCurve) path.lineTo(pt.x, pt.y); - else if (prevPt.onCurve && !pt.onCurve) var curvePt = pt; - else if (!prevPt.onCurve && !pt.onCurve) { - let midX = (prevPt.x + pt.x) / 2; - let midY = (prevPt.y + pt.y) / 2; - path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); - var curvePt = pt; - } else if (!prevPt.onCurve && pt.onCurve) { - path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); - var curvePt = null; - } else throw new Error("Unknown TTF path state"); - } - // Connect the first and last points - if (curvePt) path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); - path.closePath(); - } - return path; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - } -} - - - - - -class $7ee0705195f3b047$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getName() { - if (this._font.CFF2) return super._getName(); - return this._font['CFF '].getGlyphName(this.id); - } - bias(s) { - if (s.length < 1240) return 107; - else if (s.length < 33900) return 1131; - else return 32768; - } - _getPath() { - let cff = this._font.CFF2 || this._font['CFF ']; - let { stream: stream } = cff; - let str = cff.topDict.CharStrings[this.id]; - let end = str.offset + str.length; - stream.pos = str.offset; - let path = new (0, $67ee4828d81adb28$export$2e2bcd8739ae039); - let stack = []; - let trans = []; - let width = null; - let nStems = 0; - let x = 0, y = 0; - let usedGsubrs; - let usedSubrs; - let open = false; - this._usedGsubrs = usedGsubrs = {}; - this._usedSubrs = usedSubrs = {}; - let gsubrs = cff.globalSubrIndex || []; - let gsubrsBias = this.bias(gsubrs); - let privateDict = cff.privateDictForGlyph(this.id) || {}; - let subrs = privateDict.Subrs || []; - let subrsBias = this.bias(subrs); - let vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; - let vsindex = privateDict.vsindex; - let variationProcessor = this._font._variationProcessor; - function checkWidth() { - if (width == null) width = stack.shift() + privateDict.nominalWidthX; - } - function parseStems() { - if (stack.length % 2 !== 0) checkWidth(); - nStems += stack.length >> 1; - return stack.length = 0; - } - function moveTo(x, y) { - if (open) path.closePath(); - path.moveTo(x, y); - open = true; - } - let parse = function() { - while(stream.pos < end){ - let op = stream.readUInt8(); - if (op < 32) { - let index, subr, phase; - let c1x, c1y, c2x, c2y, c3x, c3y; - let c4x, c4y, c5x, c5y, c6x, c6y; - let pts; - switch(op){ - case 1: - case 3: - case 18: - case 23: - parseStems(); - break; - case 4: - if (stack.length > 1) checkWidth(); - y += stack.shift(); - moveTo(x, y); - break; - case 5: - while(stack.length >= 2){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - break; - case 6: - case 7: - phase = op === 6; - while(stack.length >= 1){ - if (phase) x += stack.shift(); - else y += stack.shift(); - path.lineTo(x, y); - phase = !phase; - } - break; - case 8: - while(stack.length > 0){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - index = stack.pop() + subrsBias; - subr = subrs[index]; - if (subr) { - usedSubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 11: - if (cff.version >= 2) break; - return; - case 14: - if (cff.version >= 2) break; - if (stack.length > 0) checkWidth(); - if (open) { - path.closePath(); - open = false; - } - break; - case 15: - if (cff.version < 2) throw new Error('vsindex operator not supported in CFF v1'); - vsindex = stack.pop(); - break; - case 16: - { - if (cff.version < 2) throw new Error('blend operator not supported in CFF v1'); - if (!variationProcessor) throw new Error('blend operator in non-variation font'); - let blendVector = variationProcessor.getBlendVector(vstore, vsindex); - let numBlends = stack.pop(); - let numOperands = numBlends * blendVector.length; - let delta = stack.length - numOperands; - let base = delta - numBlends; - for(let i = 0; i < numBlends; i++){ - let sum = stack[base + i]; - for(let j = 0; j < blendVector.length; j++)sum += blendVector[j] * stack[delta++]; - stack[base + i] = sum; - } - while(numOperands--)stack.pop(); - break; - } - case 19: - case 20: - parseStems(); - stream.pos += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2) checkWidth(); - x += stack.shift(); - y += stack.shift(); - moveTo(x, y); - break; - case 22: - if (stack.length > 1) checkWidth(); - x += stack.shift(); - moveTo(x, y); - break; - case 24: - while(stack.length >= 8){ - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - break; - case 25: - while(stack.length >= 8){ - x += stack.shift(); - y += stack.shift(); - path.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while(stack.length >= 4){ - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while(stack.length >= 4){ - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - stack.push(stream.readInt16BE()); - break; - case 29: - index = stack.pop() + gsubrsBias; - subr = gsubrs[index]; - if (subr) { - usedGsubrs[index] = true; - let p = stream.pos; - let e = end; - stream.pos = subr.offset; - end = subr.offset + subr.length; - parse(); - stream.pos = p; - end = e; - } - break; - case 30: - case 31: - phase = op === 31; - while(stack.length >= 4){ - if (phase) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - } else { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - } - path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); - phase = !phase; - } - break; - case 12: - op = stream.readUInt8(); - switch(op){ - case 3: - let a = stack.pop(); - let b = stack.pop(); - stack.push(a && b ? 1 : 0); - break; - case 4: - a = stack.pop(); - b = stack.pop(); - stack.push(a || b ? 1 : 0); - break; - case 5: - a = stack.pop(); - stack.push(a ? 0 : 1); - break; - case 9: - a = stack.pop(); - stack.push(Math.abs(a)); - break; - case 10: - a = stack.pop(); - b = stack.pop(); - stack.push(a + b); - break; - case 11: - a = stack.pop(); - b = stack.pop(); - stack.push(a - b); - break; - case 12: - a = stack.pop(); - b = stack.pop(); - stack.push(a / b); - break; - case 14: - a = stack.pop(); - stack.push(-a); - break; - case 15: - a = stack.pop(); - b = stack.pop(); - stack.push(a === b ? 1 : 0); - break; - case 18: - stack.pop(); - break; - case 20: - let val = stack.pop(); - let idx = stack.pop(); - trans[idx] = val; - break; - case 21: - idx = stack.pop(); - stack.push(trans[idx] || 0); - break; - case 22: - let s1 = stack.pop(); - let s2 = stack.pop(); - let v1 = stack.pop(); - let v2 = stack.pop(); - stack.push(v1 <= v2 ? s1 : s2); - break; - case 23: - stack.push(Math.random()); - break; - case 24: - a = stack.pop(); - b = stack.pop(); - stack.push(a * b); - break; - case 26: - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - case 27: - a = stack.pop(); - stack.push(a, a); - break; - case 28: - a = stack.pop(); - b = stack.pop(); - stack.push(b, a); - break; - case 29: - idx = stack.pop(); - if (idx < 0) idx = 0; - else if (idx > stack.length - 1) idx = stack.length - 1; - stack.push(stack[idx]); - break; - case 30: - let n = stack.pop(); - let j = stack.pop(); - if (j >= 0) while(j > 0){ - var t = stack[n - 1]; - for(let i = n - 2; i >= 0; i--)stack[i + 1] = stack[i]; - stack[0] = t; - j--; - } - else while(j < 0){ - var t = stack[0]; - for(let i = 0; i <= n; i++)stack[i] = stack[i + 1]; - stack[n - 1] = t; - j++; - } - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y; - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 35: - pts = []; - for(let i = 0; i <= 5; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - stack.shift(); // fd - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - c3x = c2x + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y; - c5x = c4x + stack.shift(); - c5y = c4y + stack.shift(); - c6x = c5x + stack.shift(); - c6y = c5y; - x = c6x; - y = c6y; - path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); - path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); - break; - case 37: - let startx = x; - let starty = y; - pts = []; - for(let i = 0; i <= 4; i++){ - x += stack.shift(); - y += stack.shift(); - pts.push(x, y); - } - if (Math.abs(x - startx) > Math.abs(y - starty)) { - x += stack.shift(); - y = starty; - } else { - x = startx; - y += stack.shift(); - } - pts.push(x, y); - path.bezierCurveTo(...pts.slice(0, 6)); - path.bezierCurveTo(...pts.slice(6)); - break; - default: - throw new Error(`Unknown op: 12 ${op}`); - } - break; - default: - throw new Error(`Unknown op: ${op}`); - } - } else if (op < 247) stack.push(op - 139); - else if (op < 251) { - var b1 = stream.readUInt8(); - stack.push((op - 247) * 256 + b1 + 108); - } else if (op < 255) { - var b1 = stream.readUInt8(); - stack.push(-(op - 251) * 256 - b1 - 108); - } else stack.push(stream.readInt32BE() / 65536); - } - }; - parse(); - if (open) path.closePath(); - return path; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'CFF'); - } -} - - - - - -let $55855d6d316b015e$var$SBIXImage = new $gfJaN$restructure.Struct({ - originX: $gfJaN$restructure.uint16, - originY: $gfJaN$restructure.uint16, - type: new $gfJaN$restructure.String(4), - data: new $gfJaN$restructure.Buffer((t)=>t.parent.buflen - t._currentOffset) -}); -class $55855d6d316b015e$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - /** - * Returns an object representing a glyph image at the given point size. - * The object has a data property with a Buffer containing the actual image data, - * along with the image type, and origin. - * - * @param {number} size - * @return {object} - */ getImageForSize(size) { - for(let i = 0; i < this._font.sbix.imageTables.length; i++){ - var table = this._font.sbix.imageTables[i]; - if (table.ppem >= size) break; - } - let offsets = table.imageOffsets; - let start = offsets[this.id]; - let end = offsets[this.id + 1]; - if (start === end) return null; - this._font.stream.pos = start; - return $55855d6d316b015e$var$SBIXImage.decode(this._font.stream, { - buflen: end - start - }); - } - render(ctx, size) { - let img = this.getImageForSize(size); - if (img != null) { - let scale = size / this._font.unitsPerEm; - ctx.image(img.data, { - height: size, - x: img.originX, - y: (this.bbox.minY - img.originY) * scale - }); - } - if (this._font.sbix.flags.renderOutlines) super.render(ctx, size); - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'SBIX'); - } -} - - - - - -class $42d9dbd2de9ee2d8$var$COLRLayer { - constructor(glyph, color){ - this.glyph = glyph; - this.color = color; - } -} -class $42d9dbd2de9ee2d8$export$2e2bcd8739ae039 extends (0, $0e4f52d7996e478b$export$2e2bcd8739ae039) { - _getBBox() { - let bbox = new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039); - for(let i = 0; i < this.layers.length; i++){ - let layer = this.layers[i]; - let b = layer.glyph.bbox; - bbox.addPoint(b.minX, b.minY); - bbox.addPoint(b.maxX, b.maxY); - } - return bbox; - } - /** - * Returns an array of objects containing the glyph and color for - * each layer in the composite color glyph. - * @type {object[]} - */ get layers() { - let cpal = this._font.CPAL; - let colr = this._font.COLR; - let low = 0; - let high = colr.baseGlyphRecord.length - 1; - while(low <= high){ - let mid = low + high >> 1; - var rec = colr.baseGlyphRecord[mid]; - if (this.id < rec.gid) high = mid - 1; - else if (this.id > rec.gid) low = mid + 1; - else { - var baseLayer = rec; - break; - } - } - // if base glyph not found in COLR table, - // default to normal glyph from glyf or CFF - if (baseLayer == null) { - var g = this._font._getBaseGlyph(this.id); - var color = { - red: 0, - green: 0, - blue: 0, - alpha: 255 - }; - return [ - new $42d9dbd2de9ee2d8$var$COLRLayer(g, color) - ]; - } - // otherwise, return an array of all the layers - let layers = []; - for(let i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++){ - var rec = colr.layerRecords[i]; - var color = cpal.colorRecords[rec.paletteIndex]; - var g = this._font._getBaseGlyph(rec.gid); - layers.push(new $42d9dbd2de9ee2d8$var$COLRLayer(g, color)); - } - return layers; - } - render(ctx, size) { - for (let { glyph: glyph, color: color } of this.layers){ - ctx.fillColor([ - color.red, - color.green, - color.blue - ], color.alpha / 255 * 100); - glyph.render(ctx, size); - } - return; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'COLR'); - } -} - - -const $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS = 0x8000; -const $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD = 0x8000; -const $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE = 0x4000; -const $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS = 0x2000; -const $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK = 0x0fff; -const $7586bb9ea67c41d8$var$POINTS_ARE_WORDS = 0x80; -const $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK = 0x7f; -const $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO = 0x80; -const $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS = 0x40; -const $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK = 0x3f; -class $7586bb9ea67c41d8$export$2e2bcd8739ae039 { - normalizeCoords(coords) { - // the default mapping is linear along each axis, in two segments: - // from the minValue to defaultValue, and from defaultValue to maxValue. - let normalized = []; - for(var i = 0; i < this.font.fvar.axis.length; i++){ - let axis = this.font.fvar.axis[i]; - if (coords[i] < axis.defaultValue) normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON)); - else normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON)); - } - // if there is an avar table, the normalized value is calculated - // by interpolating between the two nearest mapped values. - if (this.font.avar) for(var i = 0; i < this.font.avar.segment.length; i++){ - let segment = this.font.avar.segment[i]; - for(let j = 0; j < segment.correspondence.length; j++){ - let pair = segment.correspondence[j]; - if (j >= 1 && normalized[i] < pair.fromCoord) { - let prev = segment.correspondence[j - 1]; - normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord; - break; - } - } - } - return normalized; - } - transformPoints(gid, glyphPoints) { - if (!this.font.fvar || !this.font.gvar) return; - let { gvar: gvar } = this.font; - if (gid >= gvar.glyphCount) return; - let offset = gvar.offsets[gid]; - if (offset === gvar.offsets[gid + 1]) return; - // Read the gvar data for this glyph - let { stream: stream } = this.font; - stream.pos = offset; - if (stream.pos >= stream.length) return; - let tupleCount = stream.readUInt16BE(); - let offsetToData = offset + stream.readUInt16BE(); - if (tupleCount & $7586bb9ea67c41d8$var$TUPLES_SHARE_POINT_NUMBERS) { - var here = stream.pos; - stream.pos = offsetToData; - var sharedPoints = this.decodePoints(); - offsetToData = stream.pos; - stream.pos = here; - } - let origPoints = glyphPoints.map((pt)=>pt.copy()); - tupleCount &= $7586bb9ea67c41d8$var$TUPLE_COUNT_MASK; - for(let i = 0; i < tupleCount; i++){ - let tupleDataSize = stream.readUInt16BE(); - let tupleIndex = stream.readUInt16BE(); - if (tupleIndex & $7586bb9ea67c41d8$var$EMBEDDED_TUPLE_COORD) { - var tupleCoords = []; - for(let a = 0; a < gvar.axisCount; a++)tupleCoords.push(stream.readInt16BE() / 16384); - } else { - if ((tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK) >= gvar.globalCoordCount) throw new Error('Invalid gvar table'); - var tupleCoords = gvar.globalCoords[tupleIndex & $7586bb9ea67c41d8$var$TUPLE_INDEX_MASK]; - } - if (tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) { - var startCoords = []; - for(let a = 0; a < gvar.axisCount; a++)startCoords.push(stream.readInt16BE() / 16384); - var endCoords = []; - for(let a = 0; a < gvar.axisCount; a++)endCoords.push(stream.readInt16BE() / 16384); - } - // Get the factor at which to apply this tuple - let factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); - if (factor === 0) { - offsetToData += tupleDataSize; - continue; - } - var here = stream.pos; - stream.pos = offsetToData; - if (tupleIndex & $7586bb9ea67c41d8$var$PRIVATE_POINT_NUMBERS) var points = this.decodePoints(); - else var points = sharedPoints; - // points.length = 0 means there are deltas for all points - let nPoints = points.length === 0 ? glyphPoints.length : points.length; - let xDeltas = this.decodeDeltas(nPoints); - let yDeltas = this.decodeDeltas(nPoints); - if (points.length === 0) for(let i = 0; i < glyphPoints.length; i++){ - var point = glyphPoints[i]; - point.x += Math.round(xDeltas[i] * factor); - point.y += Math.round(yDeltas[i] * factor); - } - else { - let outPoints = origPoints.map((pt)=>pt.copy()); - let hasDelta = glyphPoints.map(()=>false); - for(let i = 0; i < points.length; i++){ - let idx = points[i]; - if (idx < glyphPoints.length) { - let point = outPoints[idx]; - hasDelta[idx] = true; - point.x += xDeltas[i] * factor; - point.y += yDeltas[i] * factor; - } - } - this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); - for(let i = 0; i < glyphPoints.length; i++){ - let deltaX = outPoints[i].x - origPoints[i].x; - let deltaY = outPoints[i].y - origPoints[i].y; - glyphPoints[i].x = Math.round(glyphPoints[i].x + deltaX); - glyphPoints[i].y = Math.round(glyphPoints[i].y + deltaY); - } - } - offsetToData += tupleDataSize; - stream.pos = here; - } - } - decodePoints() { - let stream = this.font.stream; - let count = stream.readUInt8(); - if (count & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS) count = (count & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); - let points = new Uint16Array(count); - let i = 0; - let point = 0; - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$POINT_RUN_COUNT_MASK) + 1; - let fn = run & $7586bb9ea67c41d8$var$POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; - for(let j = 0; j < runCount && i < count; j++){ - point += fn.call(stream); - points[i++] = point; - } - } - return points; - } - decodeDeltas(count) { - let stream = this.font.stream; - let i = 0; - let deltas = new Int16Array(count); - while(i < count){ - let run = stream.readUInt8(); - let runCount = (run & $7586bb9ea67c41d8$var$DELTA_RUN_COUNT_MASK) + 1; - if (run & $7586bb9ea67c41d8$var$DELTAS_ARE_ZERO) i += runCount; - else { - let fn = run & $7586bb9ea67c41d8$var$DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; - for(let j = 0; j < runCount && i < count; j++)deltas[i++] = fn.call(stream); - } - } - return deltas; - } - tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { - let normalized = this.normalizedCoords; - let { gvar: gvar } = this.font; - let factor = 1; - for(let i = 0; i < gvar.axisCount; i++){ - if (tupleCoords[i] === 0) continue; - if (normalized[i] === 0) return 0; - if ((tupleIndex & $7586bb9ea67c41d8$var$INTERMEDIATE_TUPLE) === 0) { - if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) return 0; - factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON); - } else { - if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) return 0; - else if (normalized[i] < tupleCoords[i]) factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON); - else factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON); - } - } - return factor; - } - // Interpolates points without delta values. - // Needed for the Ø and Q glyphs in Skia. - // Algorithm from Freetype. - interpolateMissingDeltas(points, inPoints, hasDelta) { - if (points.length === 0) return; - let point = 0; - while(point < points.length){ - let firstPoint = point; - // find the end point of the contour - let endPoint = point; - let pt = points[endPoint]; - while(!pt.endContour)pt = points[++endPoint]; - // find the first point that has a delta - while(point <= endPoint && !hasDelta[point])point++; - if (point > endPoint) continue; - let firstDelta = point; - let curDelta = point; - point++; - while(point <= endPoint){ - // find the next point with a delta, and interpolate intermediate points - if (hasDelta[point]) { - this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); - curDelta = point; - } - point++; - } - // shift contour if we only have a single delta - if (curDelta === firstDelta) this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); - else { - // otherwise, handle the remaining points at the end and beginning of the contour - this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); - if (firstDelta > 0) this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); - } - point = endPoint + 1; - } - } - deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { - if (p1 > p2) return; - let iterable = [ - 'x', - 'y' - ]; - for(let i = 0; i < iterable.length; i++){ - let k = iterable[i]; - if (inPoints[ref1][k] > inPoints[ref2][k]) { - var p = ref1; - ref1 = ref2; - ref2 = p; - } - let in1 = inPoints[ref1][k]; - let in2 = inPoints[ref2][k]; - let out1 = outPoints[ref1][k]; - let out2 = outPoints[ref2][k]; - // If the reference points have the same coordinate but different - // delta, inferred delta is zero. Otherwise interpolate. - if (in1 !== in2 || out1 === out2) { - let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); - for(let p = p1; p <= p2; p++){ - let out = inPoints[p][k]; - if (out <= in1) out += out1 - in1; - else if (out >= in2) out += out2 - in2; - else out = out1 + (out - in1) * scale; - outPoints[p][k] = out; - } - } - } - } - deltaShift(p1, p2, ref, inPoints, outPoints) { - let deltaX = outPoints[ref].x - inPoints[ref].x; - let deltaY = outPoints[ref].y - inPoints[ref].y; - if (deltaX === 0 && deltaY === 0) return; - for(let p = p1; p <= p2; p++)if (p !== ref) { - outPoints[p].x += deltaX; - outPoints[p].y += deltaY; - } - } - getAdvanceAdjustment(gid, table) { - let outerIndex, innerIndex; - if (table.advanceWidthMapping) { - let idx = gid; - if (idx >= table.advanceWidthMapping.mapCount) idx = table.advanceWidthMapping.mapCount - 1; - let entryFormat = table.advanceWidthMapping.entryFormat; - ({ outerIndex: outerIndex, innerIndex: innerIndex } = table.advanceWidthMapping.mapData[idx]); - } else { - outerIndex = 0; - innerIndex = gid; - } - return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); - } - // See pseudo code from `Font Variations Overview' - // in the OpenType specification. - getDelta(itemStore, outerIndex, innerIndex) { - if (outerIndex >= itemStore.itemVariationData.length) return 0; - let varData = itemStore.itemVariationData[outerIndex]; - if (innerIndex >= varData.deltaSets.length) return 0; - let deltaSet = varData.deltaSets[innerIndex]; - let blendVector = this.getBlendVector(itemStore, outerIndex); - let netAdjustment = 0; - for(let master = 0; master < varData.regionIndexCount; master++)netAdjustment += deltaSet.deltas[master] * blendVector[master]; - return netAdjustment; - } - getBlendVector(itemStore, outerIndex) { - let varData = itemStore.itemVariationData[outerIndex]; - if (this.blendVectors.has(varData)) return this.blendVectors.get(varData); - let normalizedCoords = this.normalizedCoords; - let blendVector = []; - // outer loop steps through master designs to be blended - for(let master = 0; master < varData.regionIndexCount; master++){ - let scalar = 1; - let regionIndex = varData.regionIndexes[master]; - let axes = itemStore.variationRegionList.variationRegions[regionIndex]; - // inner loop steps through axes in this region - for(let j = 0; j < axes.length; j++){ - let axis = axes[j]; - let axisScalar; - // compute the scalar contribution of this axis - // ignore invalid ranges - if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) axisScalar = 1; - else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) axisScalar = 1; - else if (axis.peakCoord === 0) axisScalar = 1; - else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) axisScalar = 0; - else { - if (normalizedCoords[j] === axis.peakCoord) axisScalar = 1; - else if (normalizedCoords[j] < axis.peakCoord) axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON); - else axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON); - } - // take product of all the axis scalars - scalar *= axisScalar; - } - blendVector[master] = scalar; - } - this.blendVectors.set(varData, blendVector); - return blendVector; - } - constructor(font, coords){ - this.font = font; - this.normalizedCoords = this.normalizeCoords(coords); - this.blendVectors = new Map; - } -} - - - - -const $a8ac370803cb82cf$var$resolved = Promise.resolve(); -class $a8ac370803cb82cf$export$2e2bcd8739ae039 { - includeGlyph(glyph) { - if (typeof glyph === 'object') glyph = glyph.id; - if (this.mapping[glyph] == null) { - this.glyphs.push(glyph); - this.mapping[glyph] = this.glyphs.length - 1; - } - return this.mapping[glyph]; - } - constructor(font){ - this.font = font; - this.glyphs = []; - this.mapping = {}; - // always include the missing glyph - this.includeGlyph(0); - } -} - - - - - -// Flags for simple glyphs -const $2784eedf0b35a048$var$ON_CURVE = 1; -const $2784eedf0b35a048$var$X_SHORT_VECTOR = 2; -const $2784eedf0b35a048$var$Y_SHORT_VECTOR = 4; -const $2784eedf0b35a048$var$REPEAT = 8; -const $2784eedf0b35a048$var$SAME_X = 16; -const $2784eedf0b35a048$var$SAME_Y = 32; -class $2784eedf0b35a048$var$Point { - static size(val) { - return val >= 0 && val <= 255 ? 1 : 2; - } - static encode(stream, value) { - if (value >= 0 && value <= 255) stream.writeUInt8(value); - else stream.writeInt16BE(value); - } -} -let $2784eedf0b35a048$var$Glyf = new $gfJaN$restructure.Struct({ - numberOfContours: $gfJaN$restructure.int16, - xMin: $gfJaN$restructure.int16, - yMin: $gfJaN$restructure.int16, - xMax: $gfJaN$restructure.int16, - yMax: $gfJaN$restructure.int16, - endPtsOfContours: new $gfJaN$restructure.Array($gfJaN$restructure.uint16, 'numberOfContours'), - instructions: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, $gfJaN$restructure.uint16), - flags: new $gfJaN$restructure.Array($gfJaN$restructure.uint8, 0), - xPoints: new $gfJaN$restructure.Array($2784eedf0b35a048$var$Point, 0), - yPoints: new $gfJaN$restructure.Array($2784eedf0b35a048$var$Point, 0) -}); -class $2784eedf0b35a048$export$2e2bcd8739ae039 { - encodeSimple(path, instructions = []) { - let endPtsOfContours = []; - let xPoints = []; - let yPoints = []; - let flags = []; - let same = 0; - let lastX = 0, lastY = 0, lastFlag = 0; - let pointCount = 0; - for(let i = 0; i < path.commands.length; i++){ - let c = path.commands[i]; - for(let j = 0; j < c.args.length; j += 2){ - let x = c.args[j]; - let y = c.args[j + 1]; - let flag = 0; - // If the ending point of a quadratic curve is the midpoint - // between the control point and the control point of the next - // quadratic curve, we can omit the ending point. - if (c.command === 'quadraticCurveTo' && j === 2) { - let next = path.commands[i + 1]; - if (next && next.command === 'quadraticCurveTo') { - let midX = (lastX + next.args[0]) / 2; - let midY = (lastY + next.args[1]) / 2; - if (x === midX && y === midY) continue; - } - } - // All points except control points are on curve. - if (!(c.command === 'quadraticCurveTo' && j === 0)) flag |= $2784eedf0b35a048$var$ON_CURVE; - flag = this._encodePoint(x, lastX, xPoints, flag, $2784eedf0b35a048$var$X_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_X); - flag = this._encodePoint(y, lastY, yPoints, flag, $2784eedf0b35a048$var$Y_SHORT_VECTOR, $2784eedf0b35a048$var$SAME_Y); - if (flag === lastFlag && same < 255) { - flags[flags.length - 1] |= $2784eedf0b35a048$var$REPEAT; - same++; - } else { - if (same > 0) { - flags.push(same); - same = 0; - } - flags.push(flag); - lastFlag = flag; - } - lastX = x; - lastY = y; - pointCount++; - } - if (c.command === 'closePath') endPtsOfContours.push(pointCount - 1); - } - // Close the path if the last command didn't already - if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') endPtsOfContours.push(pointCount - 1); - let bbox = path.bbox; - let glyf = { - numberOfContours: endPtsOfContours.length, - xMin: bbox.minX, - yMin: bbox.minY, - xMax: bbox.maxX, - yMax: bbox.maxY, - endPtsOfContours: endPtsOfContours, - instructions: instructions, - flags: flags, - xPoints: xPoints, - yPoints: yPoints - }; - let size = $2784eedf0b35a048$var$Glyf.size(glyf); - let tail = 4 - size % 4; - let stream = new $gfJaN$restructure.EncodeStream(size + tail); - $2784eedf0b35a048$var$Glyf.encode(stream, glyf); - // Align to 4-byte length - if (tail !== 0) stream.fill(0, tail); - return stream.buffer; - } - _encodePoint(value, last, points, flag, shortFlag, sameFlag) { - let diff = value - last; - if (value === last) flag |= sameFlag; - else { - if (-255 <= diff && diff <= 255) { - flag |= shortFlag; - if (diff < 0) diff = -diff; - else flag |= sameFlag; - } - points.push(diff); - } - return flag; - } -} - - -class $fe042f4b88f46896$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - _addGlyph(gid) { - let glyph = this.font.getGlyph(gid); - let glyf = glyph._decode(); - // get the offset to the glyph from the loca table - let curOffset = this.font.loca.offsets[gid]; - let nextOffset = this.font.loca.offsets[gid + 1]; - let stream = this.font._getTableStream('glyf'); - stream.pos += curOffset; - let buffer = stream.readBuffer(nextOffset - curOffset); - // if it is a compound glyph, include its components - if (glyf && glyf.numberOfContours < 0) { - buffer = new Uint8Array(buffer); - let view = new DataView(buffer.buffer); - for (let component of glyf.components){ - gid = this.includeGlyph(component.glyphID); - view.setUint16(component.pos, gid); - } - } else if (glyf && this.font._variationProcessor) // If this is a TrueType variation glyph, re-encode the path - buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); - this.glyf.push(buffer); - this.loca.offsets.push(this.offset); - this.hmtx.metrics.push({ - advance: glyph.advanceWidth, - bearing: glyph._getMetrics().leftBearing - }); - this.offset += buffer.length; - return this.glyf.length - 1; - } - encode() { - // tables required by PDF spec: - // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm - // - // additional tables required for standalone fonts: - // name, cmap, OS/2, post - this.glyf = []; - this.offset = 0; - this.loca = { - offsets: [], - version: this.font.loca.version - }; - this.hmtx = { - metrics: [], - bearings: [] - }; - // include all the glyphs - // not using a for loop because we need to support adding more - // glyphs to the array as we go, and CoffeeScript caches the length. - let i = 0; - while(i < this.glyphs.length)this._addGlyph(this.glyphs[i++]); - let maxp = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.maxp); - maxp.numGlyphs = this.glyf.length; - this.loca.offsets.push(this.offset); - let head = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.head); - head.indexToLocFormat = this.loca.version; - let hhea = (0, ($parcel$interopDefault($gfJaN$clone)))(this.font.hhea); - hhea.numberOfMetrics = this.hmtx.metrics.length; - // map = [] - // for index in [0...256] - // if index < @numGlyphs - // map[index] = index - // else - // map[index] = 0 - // - // cmapTable = - // version: 0 - // length: 262 - // language: 0 - // codeMap: map - // - // cmap = - // version: 0 - // numSubtables: 1 - // tables: [ - // platformID: 1 - // encodingID: 0 - // table: cmapTable - // ] - // TODO: subset prep, cvt, fpgm? - return (0, $df50e1efe10a1247$export$2e2bcd8739ae039).toBuffer({ - tables: { - head: head, - hhea: hhea, - loca: this.loca, - maxp: maxp, - 'cvt ': this.font['cvt '], - prep: this.font.prep, - glyf: this.glyf, - hmtx: this.hmtx, - fpgm: this.font.fpgm - } - }); - } - constructor(font){ - super(font); - this.glyphEncoder = new (0, $2784eedf0b35a048$export$2e2bcd8739ae039); - } -} - - - - - - -class $ec40f80c07a4e08a$export$2e2bcd8739ae039 extends (0, $a8ac370803cb82cf$export$2e2bcd8739ae039) { - subsetCharstrings() { - this.charstrings = []; - let gsubrs = {}; - for (let gid of this.glyphs){ - this.charstrings.push(this.cff.getCharString(gid)); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedGsubrs)gsubrs[subr] = true; - } - this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); - } - subsetSubrs(subrs, used) { - let res = []; - for(let i = 0; i < subrs.length; i++){ - let subr = subrs[i]; - if (used[i]) { - this.cff.stream.pos = subr.offset; - res.push(this.cff.stream.readBuffer(subr.length)); - } else res.push(new Uint8Array([ - 11 - ])); // return - } - return res; - } - subsetFontdict(topDict) { - topDict.FDArray = []; - topDict.FDSelect = { - version: 0, - fds: [] - }; - let used_fds = {}; - let used_subrs = []; - let fd_select = {}; - for (let gid of this.glyphs){ - let fd = this.cff.fdForGlyph(gid); - if (fd == null) continue; - if (!used_fds[fd]) { - topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd])); - used_subrs.push({}); - fd_select[fd] = topDict.FDArray.length - 1; - } - used_fds[fd] = true; - topDict.FDSelect.fds.push(fd_select[fd]); - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[fd_select[fd]][subr] = true; - } - for(let i = 0; i < topDict.FDArray.length; i++){ - let dict = topDict.FDArray[i]; - delete dict.FontName; - if (dict.Private && dict.Private.Subrs) { - dict.Private = Object.assign({}, dict.Private); - dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); - } - } - return; - } - createCIDFontdict(topDict) { - let used_subrs = {}; - for (let gid of this.glyphs){ - let glyph = this.font.getGlyph(gid); - let path = glyph.path; // this causes the glyph to be parsed - for(let subr in glyph._usedSubrs)used_subrs[subr] = true; - } - let privateDict = Object.assign({}, this.cff.topDict.Private); - if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); - topDict.FDArray = [ - { - Private: privateDict - } - ]; - return topDict.FDSelect = { - version: 3, - nRanges: 1, - ranges: [ - { - first: 0, - fd: 0 - } - ], - sentinel: this.charstrings.length - }; - } - addString(string) { - if (!string) return null; - if (!this.strings) this.strings = []; - this.strings.push(string); - return (0, $860d3574d7fa3a51$export$2e2bcd8739ae039).length + this.strings.length - 1; - } - encode() { - this.subsetCharstrings(); - let charset = { - version: this.charstrings.length > 255 ? 2 : 1, - ranges: [ - { - first: 1, - nLeft: this.charstrings.length - 2 - } - ] - }; - let topDict = Object.assign({}, this.cff.topDict); - topDict.Private = null; - topDict.charset = charset; - topDict.Encoding = null; - topDict.CharStrings = this.charstrings; - for (let key of [ - 'version', - 'Notice', - 'Copyright', - 'FullName', - 'FamilyName', - 'Weight', - 'PostScript', - 'BaseFontName', - 'FontName' - ])topDict[key] = this.addString(this.cff.string(topDict[key])); - topDict.ROS = [ - this.addString('Adobe'), - this.addString('Identity'), - 0 - ]; - topDict.CIDCount = this.charstrings.length; - if (this.cff.isCIDFont) this.subsetFontdict(topDict); - else this.createCIDFontdict(topDict); - let top = { - version: 1, - hdrSize: this.cff.hdrSize, - offSize: 4, - header: this.cff.header, - nameIndex: [ - this.cff.postscriptName - ], - topDictIndex: [ - topDict - ], - stringIndex: this.strings, - globalSubrIndex: this.gsubrs - }; - return (0, $5b547cf9e5da519b$export$2e2bcd8739ae039).toBuffer(top); - } - constructor(font){ - super(font); - this.cff = this.font['CFF ']; - if (!this.cff) throw new Error('Not a CFF Font'); - } -} - - - - -class $0a8ef2660a6ce4b6$export$2e2bcd8739ae039 { - static probe(buffer) { - let format = (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)); - return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); - } - setDefaultLanguage(lang = null) { - this.defaultLanguage = lang; - } - _getTable(table) { - if (!(table.tag in this._tables)) try { - this._tables[table.tag] = this._decodeTable(table); - } catch (e) { - if ($59aa4ed98453e1d4$export$bd5c5d8b8dcafd78) { - console.error(`Error decoding table ${table.tag}`); - console.error(e.stack); - } - } - return this._tables[table.tag]; - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - return this.stream; - } - return null; - } - _decodeDirectory() { - return this.directory = (0, $df50e1efe10a1247$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _decodeTable(table) { - let pos = this.stream.pos; - let stream = this._getTableStream(table.tag); - let result = (0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[table.tag].decode(stream, this, table.length); - this.stream.pos = pos; - return result; - } - /** - * Gets a string from the font's `name` table - * `lang` is a BCP-47 language code. - * @return {string} - */ getName(key, lang = this.defaultLanguage || $59aa4ed98453e1d4$export$42940898df819940) { - let record = this.name && this.name.records[key]; - if (record) // Attempt to retrieve the entry, depending on which translation is available: - return record[lang] || record[this.defaultLanguage] || record[$59aa4ed98453e1d4$export$42940898df819940] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine - || null; - return null; - } - /** - * The unique PostScript name for this font, e.g. "Helvetica-Bold" - * @type {string} - */ get postscriptName() { - return this.getName('postscriptName'); - } - /** - * The font's full name, e.g. "Helvetica Bold" - * @type {string} - */ get fullName() { - return this.getName('fullName'); - } - /** - * The font's family name, e.g. "Helvetica" - * @type {string} - */ get familyName() { - return this.getName('fontFamily'); - } - /** - * The font's sub-family, e.g. "Bold". - * @type {string} - */ get subfamilyName() { - return this.getName('fontSubfamily'); - } - /** - * The font's copyright information - * @type {string} - */ get copyright() { - return this.getName('copyright'); - } - /** - * The font's version number - * @type {string} - */ get version() { - return this.getName('version'); - } - /** - * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) - * @type {number} - */ get ascent() { - return this.hhea.ascent; - } - /** - * The font’s [descender](https://en.wikipedia.org/wiki/Descender) - * @type {number} - */ get descent() { - return this.hhea.descent; - } - /** - * The amount of space that should be included between lines - * @type {number} - */ get lineGap() { - return this.hhea.lineGap; - } - /** - * The offset from the normal underline position that should be used - * @type {number} - */ get underlinePosition() { - return this.post.underlinePosition; - } - /** - * The weight of the underline that should be used - * @type {number} - */ get underlineThickness() { - return this.post.underlineThickness; - } - /** - * If this is an italic font, the angle the cursor should be drawn at to match the font design - * @type {number} - */ get italicAngle() { - return this.post.italicAngle; - } - /** - * The height of capital letters above the baseline. - * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. - * @type {number} - */ get capHeight() { - let os2 = this['OS/2']; - return os2 ? os2.capHeight : this.ascent; - } - /** - * The height of lower case letters in the font. - * See [here](https://en.wikipedia.org/wiki/X-height) for more details. - * @type {number} - */ get xHeight() { - let os2 = this['OS/2']; - return os2 ? os2.xHeight : 0; - } - /** - * The number of glyphs in the font. - * @type {number} - */ get numGlyphs() { - return this.maxp.numGlyphs; - } - /** - * The size of the font’s internal coordinate grid - * @type {number} - */ get unitsPerEm() { - return this.head.unitsPerEm; - } - /** - * The font’s bounding box, i.e. the box that encloses all glyphs in the font. - * @type {BBox} - */ get bbox() { - return Object.freeze(new (0, $0e2da1c4ce69e8ad$export$2e2bcd8739ae039)(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); - } - get _cmapProcessor() { - return new (0, $0d6e160064c86e50$export$2e2bcd8739ae039)(this.cmap); - } - /** - * An array of all of the unicode code points supported by the font. - * @type {number[]} - */ get characterSet() { - return this._cmapProcessor.getCharacterSet(); - } - /** - * Returns whether there is glyph in the font for the given unicode code point. - * - * @param {number} codePoint - * @return {boolean} - */ hasGlyphForCodePoint(codePoint) { - return !!this._cmapProcessor.lookup(codePoint); - } - /** - * Maps a single unicode code point to a Glyph object. - * Does not perform any advanced substitutions (there is no context to do so). - * - * @param {number} codePoint - * @return {Glyph} - */ glyphForCodePoint(codePoint) { - return this.getGlyph(this._cmapProcessor.lookup(codePoint), [ - codePoint - ]); - } - /** - * Returns an array of Glyph objects for the given string. - * This is only a one-to-one mapping from characters to glyphs. - * For most uses, you should use font.layout (described below), which - * provides a much more advanced mapping supporting AAT and OpenType shaping. - * - * @param {string} string - * @return {Glyph[]} - */ glyphsForString(string) { - let glyphs = []; - let len = string.length; - let idx = 0; - let last = -1; - let state = -1; - while(idx <= len){ - let code = 0; - let nextState = 0; - if (idx < len) { - // Decode the next codepoint from UTF 16 - code = string.charCodeAt(idx++); - if (0xd800 <= code && code <= 0xdbff && idx < len) { - let next = string.charCodeAt(idx); - if (0xdc00 <= next && next <= 0xdfff) { - idx++; - code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; - } - } - // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. - nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; - } else idx++; - if (state === 0 && nextState === 1) // Variation selector following normal codepoint. - glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [ - last, - code - ])); - else if (state === 0 && nextState === 0) // Normal codepoint following normal codepoint. - glyphs.push(this.glyphForCodePoint(last)); - last = code; - state = nextState; - } - return glyphs; - } - get _layoutEngine() { - return new (0, $9d641258c9d7180d$export$2e2bcd8739ae039)(this); - } - /** - * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. - * - * @param {string} string - * @param {string[]} [userFeatures] - * @param {string} [script] - * @param {string} [language] - * @param {string} [direction] - * @return {GlyphRun} - */ layout(string, userFeatures, script, language, direction) { - return this._layoutEngine.layout(string, userFeatures, script, language, direction); - } - /** - * Returns an array of strings that map to the given glyph id. - * @param {number} gid - glyph id - */ stringsForGlyph(gid) { - return this._layoutEngine.stringsForGlyph(gid); - } - /** - * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) - * (or mapped AAT tags) supported by the font. - * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. - * If this is an AAT font, the OpenType feature tags are mapped to AAT features. - * - * @type {string[]} - */ get availableFeatures() { - return this._layoutEngine.getAvailableFeatures(); - } - getAvailableFeatures(script, language) { - return this._layoutEngine.getAvailableFeatures(script, language); - } - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf) this._glyphs[glyph] = new (0, $f680320fa07ef53d$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) this._glyphs[glyph] = new (0, $7ee0705195f3b047$export$2e2bcd8739ae039)(glyph, characters, this); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a glyph object for the given glyph id. - * You can pass the array of code points this glyph represents for - * your use later, and it will be stored in the glyph object. - * - * @param {number} glyph - * @param {number[]} characters - * @return {Glyph} - */ getGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.sbix) this._glyphs[glyph] = new (0, $55855d6d316b015e$export$2e2bcd8739ae039)(glyph, characters, this); - else if (this.directory.tables.COLR && this.directory.tables.CPAL) this._glyphs[glyph] = new (0, $42d9dbd2de9ee2d8$export$2e2bcd8739ae039)(glyph, characters, this); - else this._getBaseGlyph(glyph, characters); - } - return this._glyphs[glyph] || null; - } - /** - * Returns a Subset for this font. - * @return {Subset} - */ createSubset() { - if (this.directory.tables['CFF ']) return new (0, $ec40f80c07a4e08a$export$2e2bcd8739ae039)(this); - return new (0, $fe042f4b88f46896$export$2e2bcd8739ae039)(this); - } - /** - * Returns an object describing the available variation axes - * that this font supports. Keys are setting tags, and values - * contain the axis name, range, and default value. - * - * @type {object} - */ get variationAxes() { - let res = {}; - if (!this.fvar) return res; - for (let axis of this.fvar.axis)res[axis.axisTag.trim()] = { - name: axis.name.en, - min: axis.minValue, - default: axis.defaultValue, - max: axis.maxValue - }; - return res; - } - /** - * Returns an object describing the named variation instances - * that the font designer has specified. Keys are variation names - * and values are the variation settings for this instance. - * - * @type {object} - */ get namedVariations() { - let res = {}; - if (!this.fvar) return res; - for (let instance of this.fvar.instance){ - let settings = {}; - for(let i = 0; i < this.fvar.axis.length; i++){ - let axis = this.fvar.axis[i]; - settings[axis.axisTag.trim()] = instance.coord[i]; - } - res[instance.name.en] = settings; - } - return res; - } - /** - * Returns a new font with the given variation settings applied. - * Settings can either be an instance name, or an object containing - * variation tags as specified by the `variationAxes` property. - * - * @param {object} settings - * @return {TTFFont} - */ getVariation(settings) { - if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); - if (typeof settings === 'string') settings = this.namedVariations[settings]; - if (typeof settings !== 'object') throw new Error('Variation settings must be either a variation name or settings object.'); - // normalize the coordinates - let coords = this.fvar.axis.map((axis, i)=>{ - let axisTag = axis.axisTag.trim(); - if (axisTag in settings) return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); - else return axis.defaultValue; - }); - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = this._directoryPos; - let font = new $0a8ef2660a6ce4b6$export$2e2bcd8739ae039(stream, coords); - font._tables = this._tables; - return font; - } - get _variationProcessor() { - if (!this.fvar) return null; - let variationCoords = this.variationCoords; - // Ignore if no variation coords and not CFF2 - if (!variationCoords && !this.CFF2) return null; - if (!variationCoords) variationCoords = this.fvar.axis.map((axis)=>axis.defaultValue); - return new (0, $7586bb9ea67c41d8$export$2e2bcd8739ae039)(this, variationCoords); - } - // Standardized format plugin API - getFont(name) { - return this.getVariation(name); - } - constructor(stream, variationCoords = null){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTF'); - this.defaultLanguage = null; - this.stream = stream; - this.variationCoords = variationCoords; - this._directoryPos = this.stream.pos; - this._tables = {}; - this._glyphs = {}; - this._decodeDirectory(); - // define properties for each table to lazily parse - for(let tag in this.directory.tables){ - let table = this.directory.tables[tag]; - if ((0, $5825c04ce8f7102d$export$2e2bcd8739ae039)[tag] && table.length > 0) Object.defineProperty(this, tag, { - get: this._getTable.bind(this, table) - }); - } - } -} -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "bbox", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_cmapProcessor", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "characterSet", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_layoutEngine", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "variationAxes", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "namedVariations", null); -(0, $gfJaN$swchelperscjs_ts_decoratecjs._)([ - (0, $3bda6911913b43f0$export$69a3209f1a06c04d) -], $0a8ef2660a6ce4b6$export$2e2bcd8739ae039.prototype, "_variationProcessor", null); - - - - - - -let $89f72d2d7c9afc0d$var$WOFFDirectoryEntry = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - offset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, 'void', { - type: 'global' - }), - compLength: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - origChecksum: $gfJaN$restructure.uint32 -}); -let $89f72d2d7c9afc0d$var$WOFFDirectory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - flavor: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - numTables: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - totalSfntSize: $gfJaN$restructure.uint32, - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - metaOffset: $gfJaN$restructure.uint32, - metaLength: $gfJaN$restructure.uint32, - metaOrigLength: $gfJaN$restructure.uint32, - privOffset: $gfJaN$restructure.uint32, - privLength: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($89f72d2d7c9afc0d$var$WOFFDirectoryEntry, 'numTables') -}); -$89f72d2d7c9afc0d$var$WOFFDirectory.process = function() { - let tables = {}; - for (let table of this.tables)tables[table.tag] = table; - this.tables = tables; -}; -var $89f72d2d7c9afc0d$export$2e2bcd8739ae039 = $89f72d2d7c9afc0d$var$WOFFDirectory; - - - - - - -class $8a0a49baaf5d834d$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOFF'; - } - _decodeDirectory() { - this.directory = (0, $89f72d2d7c9afc0d$export$2e2bcd8739ae039).decode(this.stream, { - _startOffset: 0 - }); - } - _getTableStream(tag) { - let table = this.directory.tables[tag]; - if (table) { - this.stream.pos = table.offset; - if (table.compLength < table.length) { - this.stream.pos += 2; // skip deflate header - let outBuffer = new Uint8Array(table.length); - let buf = (0, ($parcel$interopDefault($gfJaN$tinyinflate)))(this.stream.readBuffer(table.compLength - 2), outBuffer); - return new $gfJaN$restructure.DecodeStream(buf); - } else return this.stream; - } - return null; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF'); - } -} - - - - - - - - - -class $44b9edca0e403d6d$export$2e2bcd8739ae039 extends (0, $f680320fa07ef53d$export$2e2bcd8739ae039) { - _decode() { - // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. - return this._font._transformedGlyphs[this.id]; - } - _getCBox() { - return this.path.bbox; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} - - - -const $2f0bfd9a5c1d7b58$var$Base128 = { - decode (stream) { - let result = 0; - let iterable = [ - 0, - 1, - 2, - 3, - 4 - ]; - for(let j = 0; j < iterable.length; j++){ - let i = iterable[j]; - let code = stream.readUInt8(); - // If any of the top seven bits are set then we're about to overflow. - if (result & 0xe0000000) throw new Error('Overflow'); - result = result << 7 | code & 0x7f; - if ((code & 0x80) === 0) return result; - } - throw new Error('Bad base 128 number'); - } -}; -let $2f0bfd9a5c1d7b58$var$knownTags = [ - 'cmap', - 'head', - 'hhea', - 'hmtx', - 'maxp', - 'name', - 'OS/2', - 'post', - 'cvt ', - 'fpgm', - 'glyf', - 'loca', - 'prep', - 'CFF ', - 'VORG', - 'EBDT', - 'EBLC', - 'gasp', - 'hdmx', - 'kern', - 'LTSH', - 'PCLT', - 'VDMX', - 'vhea', - 'vmtx', - 'BASE', - 'GDEF', - 'GPOS', - 'GSUB', - 'EBSC', - 'JSTF', - 'MATH', - 'CBDT', - 'CBLC', - 'COLR', - 'CPAL', - 'SVG ', - 'sbix', - 'acnt', - 'avar', - 'bdat', - 'bloc', - 'bsln', - 'cvar', - 'fdsc', - 'feat', - 'fmtx', - 'fvar', - 'gvar', - 'hsty', - 'just', - 'lcar', - 'mort', - 'morx', - 'opbd', - 'prop', - 'trak', - 'Zapf', - 'Silf', - 'Glat', - 'Gloc', - 'Feat', - 'Sill' -]; -let $2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry = new $gfJaN$restructure.Struct({ - flags: $gfJaN$restructure.uint8, - customTag: new $gfJaN$restructure.Optional(new $gfJaN$restructure.String(4), (t)=>(t.flags & 0x3f) === 0x3f), - tag: (t)=>t.customTag || $2f0bfd9a5c1d7b58$var$knownTags[t.flags & 0x3f], - length: $2f0bfd9a5c1d7b58$var$Base128, - transformVersion: (t)=>t.flags >>> 6 & 0x03, - transformed: (t)=>t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0, - transformLength: new $gfJaN$restructure.Optional($2f0bfd9a5c1d7b58$var$Base128, (t)=>t.transformed) -}); -let $2f0bfd9a5c1d7b58$var$WOFF2Directory = new $gfJaN$restructure.Struct({ - tag: new $gfJaN$restructure.String(4), - flavor: $gfJaN$restructure.uint32, - length: $gfJaN$restructure.uint32, - numTables: $gfJaN$restructure.uint16, - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint16), - totalSfntSize: $gfJaN$restructure.uint32, - totalCompressedSize: $gfJaN$restructure.uint32, - majorVersion: $gfJaN$restructure.uint16, - minorVersion: $gfJaN$restructure.uint16, - metaOffset: $gfJaN$restructure.uint32, - metaLength: $gfJaN$restructure.uint32, - metaOrigLength: $gfJaN$restructure.uint32, - privOffset: $gfJaN$restructure.uint32, - privLength: $gfJaN$restructure.uint32, - tables: new $gfJaN$restructure.Array($2f0bfd9a5c1d7b58$var$WOFF2DirectoryEntry, 'numTables') -}); -$2f0bfd9a5c1d7b58$var$WOFF2Directory.process = function() { - let tables = {}; - for(let i = 0; i < this.tables.length; i++){ - let table = this.tables[i]; - tables[table.tag] = table; - } - return this.tables = tables; -}; -var $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039 = $2f0bfd9a5c1d7b58$var$WOFF2Directory; - - - -class $333fb94547d9fb5c$export$2e2bcd8739ae039 extends (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039) { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'wOF2'; - } - _decodeDirectory() { - this.directory = (0, $2f0bfd9a5c1d7b58$export$2e2bcd8739ae039).decode(this.stream); - this._dataPos = this.stream.pos; - } - _decompress() { - // decompress data and setup table offsets if we haven't already - if (!this._decompressed) { - this.stream.pos = this._dataPos; - let buffer = this.stream.readBuffer(this.directory.totalCompressedSize); - let decompressedSize = 0; - for(let tag in this.directory.tables){ - let entry = this.directory.tables[tag]; - entry.offset = decompressedSize; - decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; - } - let decompressed = (0, ($parcel$interopDefault($gfJaN$brotlidecompressjs)))(buffer, decompressedSize); - if (!decompressed) throw new Error('Error decoding compressed data in WOFF2'); - this.stream = new $gfJaN$restructure.DecodeStream(decompressed); - this._decompressed = true; - } - } - _decodeTable(table) { - this._decompress(); - return super._decodeTable(table); - } - // Override this method to get a glyph and return our - // custom subclass if there is a glyf table. - _getBaseGlyph(glyph, characters = []) { - if (!this._glyphs[glyph]) { - if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { - if (!this._transformedGlyphs) this._transformGlyfTable(); - return this._glyphs[glyph] = new (0, $44b9edca0e403d6d$export$2e2bcd8739ae039)(glyph, characters, this); - } else return super._getBaseGlyph(glyph, characters); - } - } - _transformGlyfTable() { - this._decompress(); - this.stream.pos = this.directory.tables.glyf.offset; - let table = $333fb94547d9fb5c$var$GlyfTable.decode(this.stream); - let glyphs = []; - for(let index = 0; index < table.numGlyphs; index++){ - let glyph = {}; - let nContours = table.nContours.readInt16BE(); - glyph.numberOfContours = nContours; - if (nContours > 0) { - let nPoints = []; - let totalPoints = 0; - for(let i = 0; i < nContours; i++){ - let r = $333fb94547d9fb5c$var$read255UInt16(table.nPoints); - totalPoints += r; - nPoints.push(totalPoints); - } - glyph.points = $333fb94547d9fb5c$var$decodeTriplet(table.flags, table.glyphs, totalPoints); - for(let i = 0; i < nContours; i++)glyph.points[nPoints[i] - 1].endContour = true; - var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } else if (nContours < 0) { - let haveInstructions = (0, $f680320fa07ef53d$export$2e2bcd8739ae039).prototype._decodeComposite.call({ - _font: this - }, glyph, table.composites); - if (haveInstructions) var instructionSize = $333fb94547d9fb5c$var$read255UInt16(table.glyphs); - } - glyphs.push(glyph); - } - this._transformedGlyphs = glyphs; - } - constructor(...args){ - super(...args); - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'WOFF2'); - } -} -// Special class that accepts a length and returns a sub-stream for that data -class $333fb94547d9fb5c$var$Substream { - decode(stream, parent) { - return new $gfJaN$restructure.DecodeStream(this._buf.decode(stream, parent)); - } - constructor(length){ - this.length = length; - this._buf = new $gfJaN$restructure.Buffer(length); - } -} -// This struct represents the entire glyf table -let $333fb94547d9fb5c$var$GlyfTable = new $gfJaN$restructure.Struct({ - version: $gfJaN$restructure.uint32, - numGlyphs: $gfJaN$restructure.uint16, - indexFormat: $gfJaN$restructure.uint16, - nContourStreamSize: $gfJaN$restructure.uint32, - nPointsStreamSize: $gfJaN$restructure.uint32, - flagStreamSize: $gfJaN$restructure.uint32, - glyphStreamSize: $gfJaN$restructure.uint32, - compositeStreamSize: $gfJaN$restructure.uint32, - bboxStreamSize: $gfJaN$restructure.uint32, - instructionStreamSize: $gfJaN$restructure.uint32, - nContours: new $333fb94547d9fb5c$var$Substream('nContourStreamSize'), - nPoints: new $333fb94547d9fb5c$var$Substream('nPointsStreamSize'), - flags: new $333fb94547d9fb5c$var$Substream('flagStreamSize'), - glyphs: new $333fb94547d9fb5c$var$Substream('glyphStreamSize'), - composites: new $333fb94547d9fb5c$var$Substream('compositeStreamSize'), - bboxes: new $333fb94547d9fb5c$var$Substream('bboxStreamSize'), - instructions: new $333fb94547d9fb5c$var$Substream('instructionStreamSize') -}); -const $333fb94547d9fb5c$var$WORD_CODE = 253; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2 = 254; -const $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1 = 255; -const $333fb94547d9fb5c$var$LOWEST_U_CODE = 253; -function $333fb94547d9fb5c$var$read255UInt16(stream) { - let code = stream.readUInt8(); - if (code === $333fb94547d9fb5c$var$WORD_CODE) return stream.readUInt16BE(); - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE1) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE; - if (code === $333fb94547d9fb5c$var$ONE_MORE_BYTE_CODE2) return stream.readUInt8() + $333fb94547d9fb5c$var$LOWEST_U_CODE * 2; - return code; -} -function $333fb94547d9fb5c$var$withSign(flag, baseval) { - return flag & 1 ? baseval : -baseval; -} -function $333fb94547d9fb5c$var$decodeTriplet(flags, glyphs, nPoints) { - let y; - let x = y = 0; - let res = []; - for(let i = 0; i < nPoints; i++){ - let dx = 0, dy = 0; - let flag = flags.readUInt8(); - let onCurve = !(flag >> 7); - flag &= 0x7f; - if (flag < 10) { - dx = 0; - dy = $333fb94547d9fb5c$var$withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); - } else if (flag < 20) { - dx = $333fb94547d9fb5c$var$withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); - dy = 0; - } else if (flag < 84) { - var b0 = flag - 20; - var b1 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); - } else if (flag < 120) { - var b0 = flag - 84; - dx = $333fb94547d9fb5c$var$withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); - } else if (flag < 124) { - var b1 = glyphs.readUInt8(); - let b2 = glyphs.readUInt8(); - dx = $333fb94547d9fb5c$var$withSign(flag, (b1 << 4) + (b2 >> 4)); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); - } else { - dx = $333fb94547d9fb5c$var$withSign(flag, glyphs.readUInt16BE()); - dy = $333fb94547d9fb5c$var$withSign(flag >> 1, glyphs.readUInt16BE()); - } - x += dx; - y += dy; - res.push(new (0, $f680320fa07ef53d$export$baf26146a414f24a)(onCurve, false, x, y)); - } - return res; -} - - - - - - - - -let $e0b2de9958441c02$var$TTCHeader = new $gfJaN$restructure.VersionedStruct($gfJaN$restructure.uint32, { - 0x00010000: { - numFonts: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numFonts') - }, - 0x00020000: { - numFonts: $gfJaN$restructure.uint32, - offsets: new $gfJaN$restructure.Array($gfJaN$restructure.uint32, 'numFonts'), - dsigTag: $gfJaN$restructure.uint32, - dsigLength: $gfJaN$restructure.uint32, - dsigOffset: $gfJaN$restructure.uint32 - } -}); -class $e0b2de9958441c02$export$2e2bcd8739ae039 { - static probe(buffer) { - return (0, $66a5b9fb5318558a$export$3d28c1996ced1f14).decode(buffer.slice(0, 4)) === 'ttcf'; - } - getFont(name) { - for (let offset of this.header.offsets){ - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let offset of this.header.offsets){ - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer); - stream.pos = offset; - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'TTC'); - this.stream = stream; - if (stream.readString(4) !== 'ttcf') throw new Error('Not a TrueType collection'); - this.header = $e0b2de9958441c02$var$TTCHeader.decode(stream); - } -} - - - - - -let $d0fe640dc6c78783$var$DFontName = new $gfJaN$restructure.String($gfJaN$restructure.uint8); -let $d0fe640dc6c78783$var$DFontData = new $gfJaN$restructure.Struct({ - len: $gfJaN$restructure.uint32, - buf: new $gfJaN$restructure.Buffer('len') -}); -let $d0fe640dc6c78783$var$Ref = new $gfJaN$restructure.Struct({ - id: $gfJaN$restructure.uint16, - nameOffset: $gfJaN$restructure.int16, - attr: $gfJaN$restructure.uint8, - dataOffset: $gfJaN$restructure.uint24, - handle: $gfJaN$restructure.uint32 -}); -let $d0fe640dc6c78783$var$Type = new $gfJaN$restructure.Struct({ - name: new $gfJaN$restructure.String(4), - maxTypeIndex: $gfJaN$restructure.uint16, - refList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, new $gfJaN$restructure.Array($d0fe640dc6c78783$var$Ref, (t)=>t.maxTypeIndex + 1), { - type: 'parent' - }) -}); -let $d0fe640dc6c78783$var$TypeList = new $gfJaN$restructure.Struct({ - length: $gfJaN$restructure.uint16, - types: new $gfJaN$restructure.Array($d0fe640dc6c78783$var$Type, (t)=>t.length + 1) -}); -let $d0fe640dc6c78783$var$DFontMap = new $gfJaN$restructure.Struct({ - reserved: new $gfJaN$restructure.Reserved($gfJaN$restructure.uint8, 24), - typeList: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, $d0fe640dc6c78783$var$TypeList), - nameListOffset: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint16, 'void') -}); -let $d0fe640dc6c78783$var$DFontHeader = new $gfJaN$restructure.Struct({ - dataOffset: $gfJaN$restructure.uint32, - map: new $gfJaN$restructure.Pointer($gfJaN$restructure.uint32, $d0fe640dc6c78783$var$DFontMap), - dataLength: $gfJaN$restructure.uint32, - mapLength: $gfJaN$restructure.uint32 -}); -class $d0fe640dc6c78783$export$2e2bcd8739ae039 { - static probe(buffer) { - let stream = new $gfJaN$restructure.DecodeStream(buffer); - try { - var header = $d0fe640dc6c78783$var$DFontHeader.decode(stream); - } catch (e) { - return false; - } - for (let type of header.map.typeList.types){ - if (type.name === 'sfnt') return true; - } - return false; - } - getFont(name) { - if (!this.sfnt) return null; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer.slice(pos)); - let font = new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream); - if (font.postscriptName === name || font.postscriptName instanceof Uint8Array && name instanceof Uint8Array && font.postscriptName.every((v, i)=>name[i] === v)) return font; - } - return null; - } - get fonts() { - let fonts = []; - for (let ref of this.sfnt.refList){ - let pos = this.header.dataOffset + ref.dataOffset + 4; - let stream = new $gfJaN$restructure.DecodeStream(this.stream.buffer.slice(pos)); - fonts.push(new (0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)(stream)); - } - return fonts; - } - constructor(stream){ - (0, $gfJaN$swchelperscjs_define_propertycjs._)(this, "type", 'DFont'); - this.stream = stream; - this.header = $d0fe640dc6c78783$var$DFontHeader.decode(this.stream); - for (let type of this.header.map.typeList.types){ - for (let ref of type.refList)if (ref.nameOffset >= 0) { - this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; - ref.name = $d0fe640dc6c78783$var$DFontName.decode(this.stream); - } else ref.name = null; - if (type.name === 'sfnt') this.sfnt = type; - } - } -} - - -// Register font formats -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $0a8ef2660a6ce4b6$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $8a0a49baaf5d834d$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $333fb94547d9fb5c$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $e0b2de9958441c02$export$2e2bcd8739ae039)); -(0, $59aa4ed98453e1d4$export$36b2f24e97d43be)((0, $d0fe640dc6c78783$export$2e2bcd8739ae039)); -$parcel$exportWildcard(module.exports, $59aa4ed98453e1d4$exports); - - - - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"@swc/helpers/cjs/_define_property.cjs":2,"@swc/helpers/cjs/_ts_decorate.cjs":3,"brotli/decompress.js":20,"clone":45,"dfa":83,"fast-deep-equal":95,"restructure":138,"tiny-inflate":158,"unicode-properties":160,"unicode-trie":161}],97:[function(require,module,exports){ -'use strict'; - -var isCallable = require('is-callable'); - -var toStr = Object.prototype.toString; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** @type {(arr: A, iterator: (this: This | void, value: A[number], index: number, arr: A) => void, receiver: This | undefined) => void} */ -var forEachArray = function forEachArray(array, iterator, receiver) { - for (var i = 0, len = array.length; i < len; i++) { - if (hasOwnProperty.call(array, i)) { - if (receiver == null) { - iterator(array[i], i, array); - } else { - iterator.call(receiver, array[i], i, array); - } - } - } -}; - -/** @type {(string: S, iterator: (this: This | void, value: S[number], index: number, string: S) => void, receiver: This | undefined) => void} */ -var forEachString = function forEachString(string, iterator, receiver) { - for (var i = 0, len = string.length; i < len; i++) { - // no such thing as a sparse string. - if (receiver == null) { - iterator(string.charAt(i), i, string); - } else { - iterator.call(receiver, string.charAt(i), i, string); - } - } -}; - -/** @type {(obj: O, iterator: (this: This | void, value: O[keyof O], index: keyof O, obj: O) => void, receiver: This | undefined) => void} */ -var forEachObject = function forEachObject(object, iterator, receiver) { - for (var k in object) { - if (hasOwnProperty.call(object, k)) { - if (receiver == null) { - iterator(object[k], k, object); - } else { - iterator.call(receiver, object[k], k, object); - } - } - } -}; - -/** @type {(x: unknown) => x is readonly unknown[]} */ -function isArray(x) { - return toStr.call(x) === '[object Array]'; -} - -/** @type {import('.')._internal} */ -module.exports = function forEach(list, iterator, thisArg) { - if (!isCallable(iterator)) { - throw new TypeError('iterator must be a function'); - } - - var receiver; - if (arguments.length >= 3) { - receiver = thisArg; - } - - if (isArray(list)) { - forEachArray(list, iterator, receiver); - } else if (typeof list === 'string') { - forEachString(list, iterator, receiver); - } else { - forEachObject(list, iterator, receiver); - } -}; - -},{"is-callable":114}],98:[function(require,module,exports){ -'use strict'; - -/* eslint no-invalid-this: 1 */ - -var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; -var toStr = Object.prototype.toString; -var max = Math.max; -var funcType = '[object Function]'; - -var concatty = function concatty(a, b) { - var arr = []; - - for (var i = 0; i < a.length; i += 1) { - arr[i] = a[i]; - } - for (var j = 0; j < b.length; j += 1) { - arr[j + a.length] = b[j]; - } - - return arr; -}; - -var slicy = function slicy(arrLike, offset) { - var arr = []; - for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { - arr[j] = arrLike[i]; - } - return arr; -}; - -var joiny = function (arr, joiner) { - var str = ''; - for (var i = 0; i < arr.length; i += 1) { - str += arr[i]; - if (i + 1 < arr.length) { - str += joiner; - } - } - return str; -}; - -module.exports = function bind(that) { - var target = this; - if (typeof target !== 'function' || toStr.apply(target) !== funcType) { - throw new TypeError(ERROR_MESSAGE + target); - } - var args = slicy(arguments, 1); - - var bound; - var binder = function () { - if (this instanceof bound) { - var result = target.apply( - this, - concatty(args, arguments) - ); - if (Object(result) === result) { - return result; - } - return this; - } - return target.apply( - that, - concatty(args, arguments) - ); - - }; - - var boundLength = max(0, target.length - args.length); - var boundArgs = []; - for (var i = 0; i < boundLength; i++) { - boundArgs[i] = '$' + i; - } - - bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); - - if (target.prototype) { - var Empty = function Empty() {}; - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - - return bound; -}; - -},{}],99:[function(require,module,exports){ -'use strict'; - -var implementation = require('./implementation'); - -module.exports = Function.prototype.bind || implementation; - -},{"./implementation":98}],100:[function(require,module,exports){ -'use strict'; - -var undefined; - -var $Object = require('es-object-atoms'); - -var $Error = require('es-errors'); -var $EvalError = require('es-errors/eval'); -var $RangeError = require('es-errors/range'); -var $ReferenceError = require('es-errors/ref'); -var $SyntaxError = require('es-errors/syntax'); -var $TypeError = require('es-errors/type'); -var $URIError = require('es-errors/uri'); - -var abs = require('math-intrinsics/abs'); -var floor = require('math-intrinsics/floor'); -var max = require('math-intrinsics/max'); -var min = require('math-intrinsics/min'); -var pow = require('math-intrinsics/pow'); -var round = require('math-intrinsics/round'); -var sign = require('math-intrinsics/sign'); - -var $Function = Function; - -// eslint-disable-next-line consistent-return -var getEvalledConstructor = function (expressionSyntax) { - try { - return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); - } catch (e) {} -}; - -var $gOPD = require('gopd'); -var $defineProperty = require('es-define-property'); - -var throwTypeError = function () { - throw new $TypeError(); -}; -var ThrowTypeError = $gOPD - ? (function () { - try { - // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties - arguments.callee; // IE 8 does not throw here - return throwTypeError; - } catch (calleeThrows) { - try { - // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') - return $gOPD(arguments, 'callee').get; - } catch (gOPDthrows) { - return throwTypeError; - } - } - }()) - : throwTypeError; - -var hasSymbols = require('has-symbols')(); - -var getProto = require('get-proto'); -var $ObjectGPO = require('get-proto/Object.getPrototypeOf'); -var $ReflectGPO = require('get-proto/Reflect.getPrototypeOf'); - -var $apply = require('call-bind-apply-helpers/functionApply'); -var $call = require('call-bind-apply-helpers/functionCall'); - -var needsEval = {}; - -var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); - -var INTRINSICS = { - __proto__: null, - '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, - '%Array%': Array, - '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, - '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, - '%AsyncFromSyncIteratorPrototype%': undefined, - '%AsyncFunction%': needsEval, - '%AsyncGenerator%': needsEval, - '%AsyncGeneratorFunction%': needsEval, - '%AsyncIteratorPrototype%': needsEval, - '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, - '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, - '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, - '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, - '%Boolean%': Boolean, - '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, - '%Date%': Date, - '%decodeURI%': decodeURI, - '%decodeURIComponent%': decodeURIComponent, - '%encodeURI%': encodeURI, - '%encodeURIComponent%': encodeURIComponent, - '%Error%': $Error, - '%eval%': eval, // eslint-disable-line no-eval - '%EvalError%': $EvalError, - '%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array, - '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, - '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, - '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, - '%Function%': $Function, - '%GeneratorFunction%': needsEval, - '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, - '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, - '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, - '%isFinite%': isFinite, - '%isNaN%': isNaN, - '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, - '%JSON%': typeof JSON === 'object' ? JSON : undefined, - '%Map%': typeof Map === 'undefined' ? undefined : Map, - '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), - '%Math%': Math, - '%Number%': Number, - '%Object%': $Object, - '%Object.getOwnPropertyDescriptor%': $gOPD, - '%parseFloat%': parseFloat, - '%parseInt%': parseInt, - '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, - '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, - '%RangeError%': $RangeError, - '%ReferenceError%': $ReferenceError, - '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, - '%RegExp%': RegExp, - '%Set%': typeof Set === 'undefined' ? undefined : Set, - '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), - '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, - '%String%': String, - '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, - '%Symbol%': hasSymbols ? Symbol : undefined, - '%SyntaxError%': $SyntaxError, - '%ThrowTypeError%': ThrowTypeError, - '%TypedArray%': TypedArray, - '%TypeError%': $TypeError, - '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, - '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, - '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, - '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, - '%URIError%': $URIError, - '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, - '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, - '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, - - '%Function.prototype.call%': $call, - '%Function.prototype.apply%': $apply, - '%Object.defineProperty%': $defineProperty, - '%Object.getPrototypeOf%': $ObjectGPO, - '%Math.abs%': abs, - '%Math.floor%': floor, - '%Math.max%': max, - '%Math.min%': min, - '%Math.pow%': pow, - '%Math.round%': round, - '%Math.sign%': sign, - '%Reflect.getPrototypeOf%': $ReflectGPO -}; - -if (getProto) { - try { - null.error; // eslint-disable-line no-unused-expressions - } catch (e) { - // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 - var errorProto = getProto(getProto(e)); - INTRINSICS['%Error.prototype%'] = errorProto; - } -} - -var doEval = function doEval(name) { - var value; - if (name === '%AsyncFunction%') { - value = getEvalledConstructor('async function () {}'); - } else if (name === '%GeneratorFunction%') { - value = getEvalledConstructor('function* () {}'); - } else if (name === '%AsyncGeneratorFunction%') { - value = getEvalledConstructor('async function* () {}'); - } else if (name === '%AsyncGenerator%') { - var fn = doEval('%AsyncGeneratorFunction%'); - if (fn) { - value = fn.prototype; - } - } else if (name === '%AsyncIteratorPrototype%') { - var gen = doEval('%AsyncGenerator%'); - if (gen && getProto) { - value = getProto(gen.prototype); - } - } - - INTRINSICS[name] = value; - - return value; -}; - -var LEGACY_ALIASES = { - __proto__: null, - '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], - '%ArrayPrototype%': ['Array', 'prototype'], - '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], - '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], - '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], - '%ArrayProto_values%': ['Array', 'prototype', 'values'], - '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], - '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], - '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], - '%BooleanPrototype%': ['Boolean', 'prototype'], - '%DataViewPrototype%': ['DataView', 'prototype'], - '%DatePrototype%': ['Date', 'prototype'], - '%ErrorPrototype%': ['Error', 'prototype'], - '%EvalErrorPrototype%': ['EvalError', 'prototype'], - '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], - '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], - '%FunctionPrototype%': ['Function', 'prototype'], - '%Generator%': ['GeneratorFunction', 'prototype'], - '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], - '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], - '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], - '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], - '%JSONParse%': ['JSON', 'parse'], - '%JSONStringify%': ['JSON', 'stringify'], - '%MapPrototype%': ['Map', 'prototype'], - '%NumberPrototype%': ['Number', 'prototype'], - '%ObjectPrototype%': ['Object', 'prototype'], - '%ObjProto_toString%': ['Object', 'prototype', 'toString'], - '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], - '%PromisePrototype%': ['Promise', 'prototype'], - '%PromiseProto_then%': ['Promise', 'prototype', 'then'], - '%Promise_all%': ['Promise', 'all'], - '%Promise_reject%': ['Promise', 'reject'], - '%Promise_resolve%': ['Promise', 'resolve'], - '%RangeErrorPrototype%': ['RangeError', 'prototype'], - '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], - '%RegExpPrototype%': ['RegExp', 'prototype'], - '%SetPrototype%': ['Set', 'prototype'], - '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], - '%StringPrototype%': ['String', 'prototype'], - '%SymbolPrototype%': ['Symbol', 'prototype'], - '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], - '%TypedArrayPrototype%': ['TypedArray', 'prototype'], - '%TypeErrorPrototype%': ['TypeError', 'prototype'], - '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], - '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], - '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], - '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], - '%URIErrorPrototype%': ['URIError', 'prototype'], - '%WeakMapPrototype%': ['WeakMap', 'prototype'], - '%WeakSetPrototype%': ['WeakSet', 'prototype'] -}; - -var bind = require('function-bind'); -var hasOwn = require('hasown'); -var $concat = bind.call($call, Array.prototype.concat); -var $spliceApply = bind.call($apply, Array.prototype.splice); -var $replace = bind.call($call, String.prototype.replace); -var $strSlice = bind.call($call, String.prototype.slice); -var $exec = bind.call($call, RegExp.prototype.exec); - -/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ -var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; -var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ -var stringToPath = function stringToPath(string) { - var first = $strSlice(string, 0, 1); - var last = $strSlice(string, -1); - if (first === '%' && last !== '%') { - throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); - } else if (last === '%' && first !== '%') { - throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); - } - var result = []; - $replace(string, rePropName, function (match, number, quote, subString) { - result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; - }); - return result; -}; -/* end adaptation */ - -var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { - var intrinsicName = name; - var alias; - if (hasOwn(LEGACY_ALIASES, intrinsicName)) { - alias = LEGACY_ALIASES[intrinsicName]; - intrinsicName = '%' + alias[0] + '%'; - } - - if (hasOwn(INTRINSICS, intrinsicName)) { - var value = INTRINSICS[intrinsicName]; - if (value === needsEval) { - value = doEval(intrinsicName); - } - if (typeof value === 'undefined' && !allowMissing) { - throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); - } - - return { - alias: alias, - name: intrinsicName, - value: value - }; - } - - throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); -}; - -module.exports = function GetIntrinsic(name, allowMissing) { - if (typeof name !== 'string' || name.length === 0) { - throw new $TypeError('intrinsic name must be a non-empty string'); - } - if (arguments.length > 1 && typeof allowMissing !== 'boolean') { - throw new $TypeError('"allowMissing" argument must be a boolean'); - } - - if ($exec(/^%?[^%]*%?$/, name) === null) { - throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); - } - var parts = stringToPath(name); - var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; - - var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); - var intrinsicRealName = intrinsic.name; - var value = intrinsic.value; - var skipFurtherCaching = false; - - var alias = intrinsic.alias; - if (alias) { - intrinsicBaseName = alias[0]; - $spliceApply(parts, $concat([0, 1], alias)); - } - - for (var i = 1, isOwn = true; i < parts.length; i += 1) { - var part = parts[i]; - var first = $strSlice(part, 0, 1); - var last = $strSlice(part, -1); - if ( - ( - (first === '"' || first === "'" || first === '`') - || (last === '"' || last === "'" || last === '`') - ) - && first !== last - ) { - throw new $SyntaxError('property names with quotes must have matching quotes'); - } - if (part === 'constructor' || !isOwn) { - skipFurtherCaching = true; - } - - intrinsicBaseName += '.' + part; - intrinsicRealName = '%' + intrinsicBaseName + '%'; - - if (hasOwn(INTRINSICS, intrinsicRealName)) { - value = INTRINSICS[intrinsicRealName]; - } else if (value != null) { - if (!(part in value)) { - if (!allowMissing) { - throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); - } - return void undefined; - } - if ($gOPD && (i + 1) >= parts.length) { - var desc = $gOPD(value, part); - isOwn = !!desc; - - // By convention, when a data property is converted to an accessor - // property to emulate a data property that does not suffer from - // the override mistake, that accessor's getter is marked with - // an `originalValue` property. Here, when we detect this, we - // uphold the illusion by pretending to see that original data - // property, i.e., returning the value rather than the getter - // itself. - if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { - value = desc.get; - } else { - value = value[part]; - } - } else { - isOwn = hasOwn(value, part); - value = value[part]; - } - - if (isOwn && !skipFurtherCaching) { - INTRINSICS[intrinsicRealName] = value; - } - } - } - return value; -}; - -},{"call-bind-apply-helpers/functionApply":39,"call-bind-apply-helpers/functionCall":40,"es-define-property":85,"es-errors":87,"es-errors/eval":86,"es-errors/range":88,"es-errors/ref":89,"es-errors/syntax":90,"es-errors/type":91,"es-errors/uri":92,"es-object-atoms":93,"function-bind":99,"get-proto":103,"get-proto/Object.getPrototypeOf":101,"get-proto/Reflect.getPrototypeOf":102,"gopd":105,"has-symbols":107,"hasown":110,"math-intrinsics/abs":122,"math-intrinsics/floor":123,"math-intrinsics/max":125,"math-intrinsics/min":126,"math-intrinsics/pow":127,"math-intrinsics/round":128,"math-intrinsics/sign":129}],101:[function(require,module,exports){ -'use strict'; - -var $Object = require('es-object-atoms'); - -/** @type {import('./Object.getPrototypeOf')} */ -module.exports = $Object.getPrototypeOf || null; - -},{"es-object-atoms":93}],102:[function(require,module,exports){ -'use strict'; - -/** @type {import('./Reflect.getPrototypeOf')} */ -module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null; - -},{}],103:[function(require,module,exports){ -'use strict'; - -var reflectGetProto = require('./Reflect.getPrototypeOf'); -var originalGetProto = require('./Object.getPrototypeOf'); - -var getDunderProto = require('dunder-proto/get'); - -/** @type {import('.')} */ -module.exports = reflectGetProto - ? function getProto(O) { - // @ts-expect-error TS can't narrow inside a closure, for some reason - return reflectGetProto(O); - } - : originalGetProto - ? function getProto(O) { - if (!O || (typeof O !== 'object' && typeof O !== 'function')) { - throw new TypeError('getProto: not an object'); - } - // @ts-expect-error TS can't narrow inside a closure, for some reason - return originalGetProto(O); - } - : getDunderProto - ? function getProto(O) { - // @ts-expect-error TS can't narrow inside a closure, for some reason - return getDunderProto(O); - } - : null; - -},{"./Object.getPrototypeOf":101,"./Reflect.getPrototypeOf":102,"dunder-proto/get":84}],104:[function(require,module,exports){ -'use strict'; - -/** @type {import('./gOPD')} */ -module.exports = Object.getOwnPropertyDescriptor; - -},{}],105:[function(require,module,exports){ -'use strict'; - -/** @type {import('.')} */ -var $gOPD = require('./gOPD'); - -if ($gOPD) { - try { - $gOPD([], 'length'); - } catch (e) { - // IE 8 has a broken gOPD - $gOPD = null; - } -} - -module.exports = $gOPD; - -},{"./gOPD":104}],106:[function(require,module,exports){ -'use strict'; - -var $defineProperty = require('es-define-property'); - -var hasPropertyDescriptors = function hasPropertyDescriptors() { - return !!$defineProperty; -}; - -hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { - // node v0.6 has a bug where array lengths can be Set but not Defined - if (!$defineProperty) { - return null; - } - try { - return $defineProperty([], 'length', { value: 1 }).length !== 1; - } catch (e) { - // In Firefox 4-22, defining length on an array throws an exception. - return true; - } -}; - -module.exports = hasPropertyDescriptors; - -},{"es-define-property":85}],107:[function(require,module,exports){ -'use strict'; - -var origSymbol = typeof Symbol !== 'undefined' && Symbol; -var hasSymbolSham = require('./shams'); - -/** @type {import('.')} */ -module.exports = function hasNativeSymbols() { - if (typeof origSymbol !== 'function') { return false; } - if (typeof Symbol !== 'function') { return false; } - if (typeof origSymbol('foo') !== 'symbol') { return false; } - if (typeof Symbol('bar') !== 'symbol') { return false; } - - return hasSymbolSham(); -}; - -},{"./shams":108}],108:[function(require,module,exports){ -'use strict'; - -/** @type {import('./shams')} */ -/* eslint complexity: [2, 18], max-statements: [2, 33] */ -module.exports = function hasSymbols() { - if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } - if (typeof Symbol.iterator === 'symbol') { return true; } - - /** @type {{ [k in symbol]?: unknown }} */ - var obj = {}; - var sym = Symbol('test'); - var symObj = Object(sym); - if (typeof sym === 'string') { return false; } - - if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } - if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } - - // temp disabled per https://github.com/ljharb/object.assign/issues/17 - // if (sym instanceof Symbol) { return false; } - // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 - // if (!(symObj instanceof Symbol)) { return false; } - - // if (typeof Symbol.prototype.toString !== 'function') { return false; } - // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } - - var symVal = 42; - obj[sym] = symVal; - for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop - if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } - - if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } - - var syms = Object.getOwnPropertySymbols(obj); - if (syms.length !== 1 || syms[0] !== sym) { return false; } - - if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } - - if (typeof Object.getOwnPropertyDescriptor === 'function') { - // eslint-disable-next-line no-extra-parens - var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym)); - if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } - } - - return true; -}; - -},{}],109:[function(require,module,exports){ -'use strict'; - -var hasSymbols = require('has-symbols/shams'); - -/** @type {import('.')} */ -module.exports = function hasToStringTagShams() { - return hasSymbols() && !!Symbol.toStringTag; -}; - -},{"has-symbols/shams":108}],110:[function(require,module,exports){ -'use strict'; - -var call = Function.prototype.call; -var $hasOwn = Object.prototype.hasOwnProperty; -var bind = require('function-bind'); - -/** @type {import('.')} */ -module.exports = bind.call(call, $hasOwn); - -},{"function-bind":99}],111:[function(require,module,exports){ -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],112:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} - -},{}],113:[function(require,module,exports){ -'use strict'; - -var hasToStringTag = require('has-tostringtag/shams')(); -var callBound = require('call-bound'); - -var $toString = callBound('Object.prototype.toString'); - -/** @type {import('.')} */ -var isStandardArguments = function isArguments(value) { - if ( - hasToStringTag - && value - && typeof value === 'object' - && Symbol.toStringTag in value - ) { - return false; - } - return $toString(value) === '[object Arguments]'; -}; - -/** @type {import('.')} */ -var isLegacyArguments = function isArguments(value) { - if (isStandardArguments(value)) { - return true; - } - return value !== null - && typeof value === 'object' - && 'length' in value - && typeof value.length === 'number' - && value.length >= 0 - && $toString(value) !== '[object Array]' - && 'callee' in value - && $toString(value.callee) === '[object Function]'; -}; - -var supportsStandardArguments = (function () { - return isStandardArguments(arguments); -}()); - -// @ts-expect-error TODO make this not error -isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests - -/** @type {import('.')} */ -module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; - -},{"call-bound":44,"has-tostringtag/shams":109}],114:[function(require,module,exports){ -'use strict'; - -var fnToStr = Function.prototype.toString; -var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; -var badArrayLike; -var isCallableMarker; -if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { - try { - badArrayLike = Object.defineProperty({}, 'length', { - get: function () { - throw isCallableMarker; - } - }); - isCallableMarker = {}; - // eslint-disable-next-line no-throw-literal - reflectApply(function () { throw 42; }, null, badArrayLike); - } catch (_) { - if (_ !== isCallableMarker) { - reflectApply = null; - } - } -} else { - reflectApply = null; -} - -var constructorRegex = /^\s*class\b/; -var isES6ClassFn = function isES6ClassFunction(value) { - try { - var fnStr = fnToStr.call(value); - return constructorRegex.test(fnStr); - } catch (e) { - return false; // not a function - } -}; - -var tryFunctionObject = function tryFunctionToStr(value) { - try { - if (isES6ClassFn(value)) { return false; } - fnToStr.call(value); - return true; - } catch (e) { - return false; - } -}; -var toStr = Object.prototype.toString; -var objectClass = '[object Object]'; -var fnClass = '[object Function]'; -var genClass = '[object GeneratorFunction]'; -var ddaClass = '[object HTMLAllCollection]'; // IE 11 -var ddaClass2 = '[object HTML document.all class]'; -var ddaClass3 = '[object HTMLCollection]'; // IE 9-10 -var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag` - -var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing - -var isDDA = function isDocumentDotAll() { return false; }; -if (typeof document === 'object') { - // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly - var all = document.all; - if (toStr.call(all) === toStr.call(document.all)) { - isDDA = function isDocumentDotAll(value) { - /* globals document: false */ - // in IE 6-8, typeof document.all is "object" and it's truthy - if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) { - try { - var str = toStr.call(value); - return ( - str === ddaClass - || str === ddaClass2 - || str === ddaClass3 // opera 12.16 - || str === objectClass // IE 6-8 - ) && value('') == null; // eslint-disable-line eqeqeq - } catch (e) { /**/ } - } - return false; - }; - } -} - -module.exports = reflectApply - ? function isCallable(value) { - if (isDDA(value)) { return true; } - if (!value) { return false; } - if (typeof value !== 'function' && typeof value !== 'object') { return false; } - try { - reflectApply(value, null, badArrayLike); - } catch (e) { - if (e !== isCallableMarker) { return false; } - } - return !isES6ClassFn(value) && tryFunctionObject(value); - } - : function isCallable(value) { - if (isDDA(value)) { return true; } - if (!value) { return false; } - if (typeof value !== 'function' && typeof value !== 'object') { return false; } - if (hasToStringTag) { return tryFunctionObject(value); } - if (isES6ClassFn(value)) { return false; } - var strClass = toStr.call(value); - if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; } - return tryFunctionObject(value); - }; - -},{}],115:[function(require,module,exports){ -'use strict'; - -var callBound = require('call-bound'); -var safeRegexTest = require('safe-regex-test'); -var isFnRegex = safeRegexTest(/^\s*(?:function)?\*/); -var hasToStringTag = require('has-tostringtag/shams')(); -var getProto = require('get-proto'); - -var toStr = callBound('Object.prototype.toString'); -var fnToStr = callBound('Function.prototype.toString'); - -var getGeneratorFunc = function () { // eslint-disable-line consistent-return - if (!hasToStringTag) { - return false; - } - try { - return Function('return function*() {}')(); - } catch (e) { - } -}; -/** @type {undefined | false | null | GeneratorFunctionConstructor} */ -var GeneratorFunction; - -/** @type {import('.')} */ -module.exports = function isGeneratorFunction(fn) { - if (typeof fn !== 'function') { - return false; - } - if (isFnRegex(fnToStr(fn))) { - return true; - } - if (!hasToStringTag) { - var str = toStr(fn); - return str === '[object GeneratorFunction]'; - } - if (!getProto) { - return false; - } - if (typeof GeneratorFunction === 'undefined') { - var generatorFunc = getGeneratorFunc(); - GeneratorFunction = generatorFunc - // eslint-disable-next-line no-extra-parens - ? /** @type {GeneratorFunctionConstructor} */ (getProto(generatorFunc)) - : false; - } - return getProto(fn) === GeneratorFunction; -}; - -},{"call-bound":44,"get-proto":103,"has-tostringtag/shams":109,"safe-regex-test":140}],116:[function(require,module,exports){ -'use strict'; - -var callBound = require('call-bound'); -var hasToStringTag = require('has-tostringtag/shams')(); -var hasOwn = require('hasown'); -var gOPD = require('gopd'); - -/** @type {import('.')} */ -var fn; - -if (hasToStringTag) { - /** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */ - var $exec = callBound('RegExp.prototype.exec'); - /** @type {object} */ - var isRegexMarker = {}; - - var throwRegexMarker = function () { - throw isRegexMarker; - }; - /** @type {{ toString(): never, valueOf(): never, [Symbol.toPrimitive]?(): never }} */ - var badStringifier = { - toString: throwRegexMarker, - valueOf: throwRegexMarker - }; - - if (typeof Symbol.toPrimitive === 'symbol') { - badStringifier[Symbol.toPrimitive] = throwRegexMarker; - } - - /** @type {import('.')} */ - // @ts-expect-error TS can't figure out that the $exec call always throws - // eslint-disable-next-line consistent-return - fn = function isRegex(value) { - if (!value || typeof value !== 'object') { - return false; - } - - // eslint-disable-next-line no-extra-parens - var descriptor = /** @type {NonNullable} */ (gOPD)(/** @type {{ lastIndex?: unknown }} */ (value), 'lastIndex'); - var hasLastIndexDataProperty = descriptor && hasOwn(descriptor, 'value'); - if (!hasLastIndexDataProperty) { - return false; - } - - try { - // eslint-disable-next-line no-extra-parens - $exec(value, /** @type {string} */ (/** @type {unknown} */ (badStringifier))); - } catch (e) { - return e === isRegexMarker; - } - }; -} else { - /** @type {(receiver: ThisParameterType, ...args: Parameters) => ReturnType} */ - var $toString = callBound('Object.prototype.toString'); - /** @const @type {'[object RegExp]'} */ - var regexClass = '[object RegExp]'; - - /** @type {import('.')} */ - fn = function isRegex(value) { - // In older browsers, typeof regex incorrectly returns 'function' - if (!value || (typeof value !== 'object' && typeof value !== 'function')) { - return false; - } - - return $toString(value) === regexClass; - }; -} - -module.exports = fn; - -},{"call-bound":44,"gopd":105,"has-tostringtag/shams":109,"hasown":110}],117:[function(require,module,exports){ -'use strict'; - -var whichTypedArray = require('which-typed-array'); - -/** @type {import('.')} */ -module.exports = function isTypedArray(value) { - return !!whichTypedArray(value); -}; - -},{"which-typed-array":167}],118:[function(require,module,exports){ -'use strict'; - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var tags = require('./tags.json'); - -/* - unsignedByte, - asciiStrings, - unsignedShort, - unsignedLong, - unsignedRational, - signedByte, - undefined, - signedShort, - signedLong, - signedRational, - singleFloat, - doubleFloat - */ -var bytes = [0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8]; -var SOIMarkerLength = 2; -var JPEGSOIMarker = 0xffd8; -var TIFFINTEL = 0x4949; -var TIFFMOTOROLA = 0x4d4d; -var APPMarkerLength = 2; -var APPMarkerBegin = 0xffe0; -var APPMarkerEnd = 0xffef; -var data = void 0; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var isImage = isValid(content); - * console.log(isImage); - */ -var isValid = function isValid(buffer) { - try { - var SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === JPEGSOIMarker; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Boolean} - * @example - */ -var isTiff = function isTiff(buffer) { - try { - var SOIMarker = buffer.readUInt16BE(0); - return SOIMarker === TIFFINTEL || SOIMarker === TIFFMOTOROLA; - } catch (e) { - throw new Error('Unsupport file format.'); - } -}; -/** - * @param buffer {Buffer} - * @returns {Number} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var APPNumber = checkAPPn(content); - * console.log(APPNumber); - */ -var checkAPPn = function checkAPPn(buffer) { - try { - var APPMarkerTag = buffer.readUInt16BE(0); - var isInRange = APPMarkerTag >= APPMarkerBegin && APPMarkerTag <= APPMarkerEnd; - return isInRange ? APPMarkerTag - APPMarkerBegin : false; - } catch (e) { - throw new Error('Invalid APP Tag.'); - } -}; -/** - * @param buffer {Buffer} - * @param tagCollection {Object} - * @param order {Boolean} - * @param offset {Number} - * @returns {Object} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = IFDHandler(content, 0, true, 8); - * console.log(exifFragments.value); - */ -var IFDHandler = function IFDHandler(buffer, tagCollection, order, offset) { - var entriesNumber = order ? buffer.readUInt16BE(0) : buffer.readUInt16LE(0); - - if (entriesNumber === 0) { - return {}; - } - - var entriesNumberLength = 2; - var entries = buffer.slice(entriesNumberLength); - var entryLength = 12; - // let nextIFDPointerBegin = entriesNumberLength + entryLength * entriesNumber; - // let bigNextIFDPointer= buffer.readUInt32BE(nextIFDPointerBegin) ; - // let littleNextIFDPointer= buffer.readUInt32LE(nextIFDPointerBegin); - // let nextIFDPointer = order ?bigNextIFDPointer:littleNextIFDPointer; - var exif = {}; - var entryCount = 0; - - for (entryCount; entryCount < entriesNumber; entryCount += 1) { - var entryBegin = entryCount * entryLength; - var entry = entries.slice(entryBegin, entryBegin + entryLength); - var tagBegin = 0; - var tagLength = 2; - var dataFormatBegin = tagBegin + tagLength; - var dataFormatLength = 2; - var componentsBegin = dataFormatBegin + dataFormatLength; - var componentsNumberLength = 4; - var dataValueBegin = componentsBegin + componentsNumberLength; - var dataValueLength = 4; - var tagAddress = entry.slice(tagBegin, dataFormatBegin); - var tagNumber = order ? tagAddress.toString('hex') : tagAddress.reverse().toString('hex'); - var tagName = tagCollection[tagNumber]; - var bigDataFormat = entry.readUInt16BE(dataFormatBegin); - var littleDataFormat = entry.readUInt16LE(dataFormatBegin); - var dataFormat = order ? bigDataFormat : littleDataFormat; - var componentsByte = bytes[dataFormat]; - var bigComponentsNumber = entry.readUInt32BE(componentsBegin); - var littleComponentNumber = entry.readUInt32LE(componentsBegin); - var componentsNumber = order ? bigComponentsNumber : littleComponentNumber; - var dataLength = componentsNumber * componentsByte; - var dataValue = entry.slice(dataValueBegin, dataValueBegin + dataValueLength); - - if (dataLength > 4) { - var dataOffset = (order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0)) - offset; - dataValue = buffer.slice(dataOffset, dataOffset + dataLength); - } - - var tagValue = void 0; - - if (tagName) { - switch (dataFormat) { - case 1: - tagValue = dataValue.readUInt8(0); - break; - case 2: - tagValue = dataValue.toString('ascii').replace(/\0+$/, ''); - break; - case 3: - tagValue = order ? dataValue.readUInt16BE(0) : dataValue.readUInt16LE(0); - break; - case 4: - tagValue = order ? dataValue.readUInt32BE(0) : dataValue.readUInt32LE(0); - break; - case 5: - tagValue = []; - - for (var i = 0; i < dataValue.length; i += 8) { - var bigTagValue = dataValue.readUInt32BE(i) / dataValue.readUInt32BE(i + 4); - var littleTagValue = dataValue.readUInt32LE(i) / dataValue.readUInt32LE(i + 4); - tagValue.push(order ? bigTagValue : littleTagValue); - } - - break; - case 7: - switch (tagName) { - case 'ExifVersion': - tagValue = dataValue.toString(); - break; - case 'FlashPixVersion': - tagValue = dataValue.toString(); - break; - case 'SceneType': - tagValue = dataValue.readUInt8(0); - break; - default: - tagValue = '0x' + dataValue.toString('hex', 0, 15); - break; - } - break; - case 10: - { - var bigOrder = dataValue.readInt32BE(0) / dataValue.readInt32BE(4); - var littleOrder = dataValue.readInt32LE(0) / dataValue.readInt32LE(4); - tagValue = order ? bigOrder : littleOrder; - break; - } - default: - tagValue = '0x' + dataValue.toString('hex'); - break; - } - exif[tagName] = tagValue; - } - /* - else { - console.log(`Unkown Tag [0x${tagNumber}].`); - } - */ - } - return exif; -}; - -/** - * @param buf {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = EXIFHandler(content); - */ -var EXIFHandler = function EXIFHandler(buf) { - var pad = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - var buffer = buf; - - if (pad) { - buffer = buf.slice(APPMarkerLength); - var length = buffer.readUInt16BE(0); - buffer = buffer.slice(0, length); - var lengthLength = 2; - buffer = buffer.slice(lengthLength); - var identifierLength = 5; - buffer = buffer.slice(identifierLength); - var padLength = 1; - buffer = buffer.slice(padLength); - } - - var byteOrderLength = 2; - var byteOrder = buffer.toString('ascii', 0, byteOrderLength) === 'MM'; - var fortyTwoLength = 2; - var fortyTwoEnd = byteOrderLength + fortyTwoLength; - var big42 = buffer.readUInt32BE(fortyTwoEnd); - var little42 = buffer.readUInt32LE(fortyTwoEnd); - var offsetOfIFD = byteOrder ? big42 : little42; - - buffer = buffer.slice(offsetOfIFD); - - if (buffer.length > 0) { - data = IFDHandler(buffer, tags.ifd, byteOrder, offsetOfIFD); - - if (data.ExifIFDPointer) { - buffer = buffer.slice(data.ExifIFDPointer - offsetOfIFD); - data.SubExif = IFDHandler(buffer, tags.ifd, byteOrder, data.ExifIFDPointer); - } - - if (data.GPSInfoIFDPointer) { - var gps = data.GPSInfoIFDPointer; - buffer = buffer.slice(data.ExifIFDPointer ? gps - data.ExifIFDPointer : gps - offsetOfIFD); - data.GPSInfo = IFDHandler(buffer, tags.gps, byteOrder, gps); - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Undefined} - * @example - * var content = fs.readFileSync("~/Picture/IMG_0911.JPG"); - * var exifFragments = APPnHandler(content); - */ -var APPnHandler = function APPnHandler(buffer) { - var APPMarkerTag = checkAPPn(buffer); - - if (APPMarkerTag !== false) { - // APP0 is 0, and 0==false - var length = buffer.readUInt16BE(APPMarkerLength); - - switch (APPMarkerTag) { - case 1: - // EXIF - EXIFHandler(buffer); - break; - default: - APPnHandler(buffer.slice(APPMarkerLength + length)); - break; - } - } -}; - -/** - * @param buffer {Buffer} - * @returns {Object} - * @example - */ -var fromBuffer = function fromBuffer(buffer) { - if (!buffer) { - throw new Error('buffer not found'); - } - - data = undefined; - - if (isValid(buffer)) { - buffer = buffer.slice(SOIMarkerLength); - data = {}; - APPnHandler(buffer); - } else if (isTiff(buffer)) { - data = {}; - EXIFHandler(buffer, false); - } - - return data; -}; - -/** - * @param file {String} - * @returns {Object} - * @example - * var exif = sync("~/Picture/IMG_1981.JPG"); - * console.log(exif.createTime); - */ -var sync = function sync(file) { - if (!file) { - throw new Error('File not found'); - } - - var buffer = _fs2.default.readFileSync(file); - - return fromBuffer(buffer); -}; - -/** - * @param file {String} - * @param callback {Function} - * @example - * async("~/Picture/IMG_0707.JPG", (err, data) => { - * if(err) { - * console.log(err); - * } - * if(data) { - * console.log(data.ExifOffset.createTime); - * } - * } - */ -var async = function async(file, callback) { - data = undefined; - - new Promise(function (resolve, reject) { - if (!file) { - reject(new Error('❓File not found.')); - } - - _fs2.default.readFile(file, function (err, buffer) { - if (err) { - reject(err); - } else { - try { - if (isValid(buffer)) { - var buf = buffer.slice(SOIMarkerLength); - - data = {}; - - APPnHandler(buf); - resolve(data); - } else if (isTiff(buffer)) { - data = {}; - - EXIFHandler(buffer, false); - resolve(data); - } else { - reject(new Error('😱Unsupport file type.')); - } - } catch (e) { - reject(e); - } - } - }); - }, function (error) { - callback(error, undefined); - }).then(function (d) { - callback(undefined, d); - }).catch(function (error) { - callback(error, undefined); - }); -}; - -exports.fromBuffer = fromBuffer; -exports.parse = async; -exports.parseSync = sync; - -},{"./tags.json":119,"fs":35}],119:[function(require,module,exports){ -module.exports={ - "ifd": { - "010e": "ImageDescription", - "010f": "Make", - "011a": "XResolution", - "011b": "YResolution", - "011c": "PlanarConfiguration", - "012d": "TransferFunction", - "013b": "Artist", - "013e": "WhitePoint", - "013f": "PrimaryChromaticities", - "0100": "ImageWidth", - "0101": "ImageHeight", - "0102": "BitsPerSample", - "0103": "Compression", - "0106": "PhotometricInterpretation", - "0110": "Model", - "0111": "StripOffsets", - "0112": "Orientation", - "0115": "SamplesPerPixel", - "0116": "RowsPerStrip", - "0117": "StripByteCounts", - "0128": "ResolutionUnit", - "0131": "Software", - "0132": "DateTime", - "0201": "JPEGInterchangeFormat", - "0202": "JPEGInterchangeFormatLength", - "0211": "YCbCrCoefficients", - "0212": "YCbCrSubSampling", - "0213": "YCbCrPositioning", - "0214": "ReferenceBlackWhite", - "829a": "ExposureTime", - "829d": "FNumber", - "920a": "FocalLength", - "927c": "MakerNote", - "8298": "Copyright", - "8769": "ExifIFDPointer", - "8822": "ExposureProgram", - "8824": "SpectralSensitivity", - "8825": "GPSInfoIFDPointer", - "8827": "PhotographicSensitivity", - "8828": "OECF", - "8830": "SensitivityType", - "8831": "StandardOutputSensitivity", - "8832": "RecommendedExposureIndex", - "8833": "ISOSpeed", - "8834": "ISOSpeedLatitudeyyy", - "8835": "ISOSpeedLatitudezzz", - "9000": "ExifVersion", - "9003": "DateTimeOriginal", - "9004": "DateTimeDigitized", - "9101": "ComponentsConfiguration", - "9102": "CompressedBitsPerPixel", - "9201": "ShutterSpeedValue", - "9202": "ApertureValue", - "9203": "BrightnessValue", - "9204": "ExposureBiasValue", - "9205": "MaxApertureValue", - "9206": "SubjectDistance", - "9207": "MeteringMode", - "9208": "LightSource", - "9209": "Flash", - "9214": "SubjectArea", - "9286": "UserComment", - "9290": "SubSecTime", - "9291": "SubSecTimeOriginal", - "9292": "SubSecTimeDigitized", - "a000": "FlashpixVersion", - "a001": "ColorSpace", - "a002": "PixelXDimension", - "a003": "PixelYDimension", - "a004": "RelatedSoundFile", - "a005": "InteroperabilityIFDPointer", - "a20b": "FlashEnergy", - "a20c": "SpatialFrequencyResponse", - "a20e": "FocalPlaneXResolution", - "a20f": "FocalPlaneYResolution", - "a40a": "Sharpness", - "a40b": "DeviceSettingDescription", - "a40c": "SubjectDistanceRange", - "a210": "FocalPlaneResolutionUnit", - "a214": "SubjectLocation", - "a215": "ExposureIndex", - "a217": "SensingMethod", - "a300": "FileSource", - "a301": "SceneType", - "a302": "CFAPattern", - "a401": "CustomRendered", - "a402": "ExposureMode", - "a403": "WhiteBalance", - "a404": "DigitalZoomRatio", - "a405": "FocalLengthIn35mmFilm", - "a406": "SceneCaptureType", - "a407": "GainControl", - "a408": "Contrast", - "a409": "Saturation", - "a420": "ImageUniqueID", - "a430": "CameraOwnerName", - "a431": "BodySerialNumber", - "a432": "LensSpecification", - "a433": "LensMake", - "a434": "LensModel", - "a435": "LensSerialNumber", - "a500": "Gamma" - }, - "gps": { - "0000": "GPSVersionID", - "0001": "GPSLatitudeRef", - "0002": "GPSLatitude", - "0003": "GPSLongitudeRef", - "0004": "GPSLongitude", - "0005": "GPSAltitudeRef", - "0006": "GPSAltitude", - "0007": "GPSTimeStamp", - "0008": "GPSSatellites", - "0009": "GPSStatus", - "000a": "GPSMeasureMode", - "000b": "GPSDOP", - "000c": "GPSSpeedRef", - "000d": "GPSSpeed", - "000e": "GPSTrackRef", - "000f": "GPSTrack", - "0010": "GPSImgDirectionRef", - "0011": "GPSImgDirection", - "0012": "GPSMapDatum", - "0013": "GPSDestLatitudeRef", - "0014": "GPSDestLatitude", - "0015": "GPSDestLongitudeRef", - "0016": "GPSDestLongitude", - "0017": "GPSDestBearingRef", - "0018": "GPSDestBearing", - "0019": "GPSDestDistanceRef", - "001a": "GPSDestDistance", - "001b": "GPSProcessingMethod", - "001c": "GPSAreaInformation", - "001d": "GPSDateStamp", - "001e": "GPSDifferential", - "001f": "GPSHPositioningError" - } -} -},{}],120:[function(require,module,exports){ -var $kQ2hT$unicodetrie = require("unicode-trie"); -var $kQ2hT$base64js = require("base64-js"); - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} - -"use strict"; - - - -const $60ff486a304db230$export$af862512e23cb54 = 0; // Opening punctuation -const $60ff486a304db230$export$9bf3043cb7503aa1 = 1; // Closing punctuation -const $60ff486a304db230$export$6d0b2a5dd774590a = 2; // Closing parenthesis -const $60ff486a304db230$export$bf0b2277bd569ea1 = 3; // Ambiguous quotation -const $60ff486a304db230$export$bad2a840ccda93b6 = 4; // Glue -const $60ff486a304db230$export$fb4028874a74450 = 5; // Non-starters -const $60ff486a304db230$export$463bd1ce0149c55e = 6; // Exclamation/Interrogation -const $60ff486a304db230$export$2e8caadc521d7cbb = 7; // Symbols allowing break after -const $60ff486a304db230$export$bfe27467c1de9413 = 8; // Infix separator -const $60ff486a304db230$export$af5f8d68aad3cd3a = 9; // Prefix -const $60ff486a304db230$export$6b7e017d6825d38f = 10; // Postfix -const $60ff486a304db230$export$8227ca023eb0daaa = 11; // Numeric -const $60ff486a304db230$export$1bb1140fe1358b00 = 12; // Alphabetic -const $60ff486a304db230$export$f3e416a182673355 = 13; // Hebrew Letter -const $60ff486a304db230$export$8be180ec26319f9f = 14; // Ideographic -const $60ff486a304db230$export$70824c8942178d60 = 15; // Inseparable characters -const $60ff486a304db230$export$24aa617c849a894a = 16; // Hyphen -const $60ff486a304db230$export$a73c4d14459b698d = 17; // Break after -const $60ff486a304db230$export$921068d8846a1559 = 18; // Break before -const $60ff486a304db230$export$8b85a4f193482778 = 19; // Break on either side (but not pair) -const $60ff486a304db230$export$b2fd9c01d360241f = 20; // Zero-width space -const $60ff486a304db230$export$dcd191669c0a595f = 21; // Combining marks -const $60ff486a304db230$export$9e5d732f3676a9ba = 22; // Word joiner -const $60ff486a304db230$export$cb94397127ac9363 = 23; // Hangul LV -const $60ff486a304db230$export$746be9e3a3dfff1f = 24; // Hangul LVT -const $60ff486a304db230$export$96e3e682276c47cf = 25; // Hangul L Jamo -const $60ff486a304db230$export$fc2ff69ee2cb01bf = 26; // Hangul V Jamo -const $60ff486a304db230$export$8999624a7bae9d04 = 27; // Hangul T Jamo -const $60ff486a304db230$export$1dff41d5c0caca01 = 28; // Regional Indicator -const $60ff486a304db230$export$ddb7a6c76d9d93eb = 29; // Emoji Base -const $60ff486a304db230$export$7e93eb3105e4786d = 30; // Emoji Modifier -const $60ff486a304db230$export$30a74a373318dec6 = 31; // Zero Width Joiner -const $60ff486a304db230$export$54caeea5e6dab1f = 32; // Contingent break -const $60ff486a304db230$export$d710c5f50fc7496a = 33; // Ambiguous (Alphabetic or Ideograph) -const $60ff486a304db230$export$66498d28055820a9 = 34; // Break (mandatory) -const $60ff486a304db230$export$eb6c6d0b7c8826f2 = 35; // Conditional Japanese Starter -const $60ff486a304db230$export$de92be486109a1df = 36; // Carriage return -const $60ff486a304db230$export$606cfc2a8896c91f = 37; // Line feed -const $60ff486a304db230$export$e51d3c675bb0140d = 38; // Next line -const $60ff486a304db230$export$da51c6332ad11d7b = 39; // South-East Asian -const $60ff486a304db230$export$bea437c40441867d = 40; // Surrogates -const $60ff486a304db230$export$c4c7eecbfed13dc9 = 41; // Space -const $60ff486a304db230$export$98e1f8a379849661 = 42; // Unknown - - -const $1b6fba3281342923$export$98f50d781a474745 = 0; // Direct break opportunity -const $1b6fba3281342923$export$12ee1f8f5315ca7e = 1; // Indirect break opportunity -const $1b6fba3281342923$export$e4965ce242860454 = 2; // Indirect break opportunity for combining marks -const $1b6fba3281342923$export$8f14048969dcd45e = 3; // Prohibited break for combining marks -const $1b6fba3281342923$export$133eb141bf58aff4 = 4; // Prohibited break -const $1b6fba3281342923$export$5bdb8ccbf5c57afc = [ - //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB - [ - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$8f14048969dcd45e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ], - [ - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$e4965ce242860454, - $1b6fba3281342923$export$133eb141bf58aff4, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$98f50d781a474745, - $1b6fba3281342923$export$12ee1f8f5315ca7e, - $1b6fba3281342923$export$98f50d781a474745 - ] // CB -]; - - -const $f898ea50f3b38ab8$var$data = ($parcel$interopDefault($kQ2hT$base64js)).toByteArray("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"); -const $f898ea50f3b38ab8$var$classTrie = new ($parcel$interopDefault($kQ2hT$unicodetrie))($f898ea50f3b38ab8$var$data); -const $f898ea50f3b38ab8$var$mapClass = function(c) { - switch(c){ - case $60ff486a304db230$export$d710c5f50fc7496a: - return $60ff486a304db230$export$1bb1140fe1358b00; - case $60ff486a304db230$export$da51c6332ad11d7b: - case $60ff486a304db230$export$bea437c40441867d: - case $60ff486a304db230$export$98e1f8a379849661: - return $60ff486a304db230$export$1bb1140fe1358b00; - case $60ff486a304db230$export$eb6c6d0b7c8826f2: - return $60ff486a304db230$export$fb4028874a74450; - default: - return c; - } -}; -const $f898ea50f3b38ab8$var$mapFirst = function(c) { - switch(c){ - case $60ff486a304db230$export$606cfc2a8896c91f: - case $60ff486a304db230$export$e51d3c675bb0140d: - return $60ff486a304db230$export$66498d28055820a9; - case $60ff486a304db230$export$c4c7eecbfed13dc9: - return $60ff486a304db230$export$9e5d732f3676a9ba; - default: - return c; - } -}; -class $f898ea50f3b38ab8$var$Break { - constructor(position, required = false){ - this.position = position; - this.required = required; - } -} -class $f898ea50f3b38ab8$var$LineBreaker { - nextCodePoint() { - const code = this.string.charCodeAt(this.pos++); - const next = this.string.charCodeAt(this.pos); - // If a surrogate pair - if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) { - this.pos++; - return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000; - } - return code; - } - nextCharClass() { - return $f898ea50f3b38ab8$var$mapClass($f898ea50f3b38ab8$var$classTrie.get(this.nextCodePoint())); - } - getSimpleBreak() { - // handle classes not handled by the pair table - switch(this.nextClass){ - case $60ff486a304db230$export$c4c7eecbfed13dc9: - return false; - case $60ff486a304db230$export$66498d28055820a9: - case $60ff486a304db230$export$606cfc2a8896c91f: - case $60ff486a304db230$export$e51d3c675bb0140d: - this.curClass = $60ff486a304db230$export$66498d28055820a9; - return false; - case $60ff486a304db230$export$de92be486109a1df: - this.curClass = $60ff486a304db230$export$de92be486109a1df; - return false; - } - return null; - } - getPairTableBreak(lastClass) { - // if not handled already, use the pair table - let shouldBreak = false; - switch($1b6fba3281342923$export$5bdb8ccbf5c57afc[this.curClass][this.nextClass]){ - case $1b6fba3281342923$export$98f50d781a474745: - shouldBreak = true; - break; - case $1b6fba3281342923$export$12ee1f8f5315ca7e: - shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9; - break; - case $1b6fba3281342923$export$e4965ce242860454: - shouldBreak = lastClass === $60ff486a304db230$export$c4c7eecbfed13dc9; - if (!shouldBreak) { - shouldBreak = false; - return shouldBreak; - } - break; - case $1b6fba3281342923$export$8f14048969dcd45e: - if (lastClass !== $60ff486a304db230$export$c4c7eecbfed13dc9) return shouldBreak; - break; - case $1b6fba3281342923$export$133eb141bf58aff4: - break; - } - if (this.LB8a) shouldBreak = false; - // Rule LB21a - if (this.LB21a && (this.curClass === $60ff486a304db230$export$24aa617c849a894a || this.curClass === $60ff486a304db230$export$a73c4d14459b698d)) { - shouldBreak = false; - this.LB21a = false; - } else this.LB21a = this.curClass === $60ff486a304db230$export$f3e416a182673355; - // Rule LB30a - if (this.curClass === $60ff486a304db230$export$1dff41d5c0caca01) { - this.LB30a++; - if (this.LB30a == 2 && this.nextClass === $60ff486a304db230$export$1dff41d5c0caca01) { - shouldBreak = true; - this.LB30a = 0; - } - } else this.LB30a = 0; - this.curClass = this.nextClass; - return shouldBreak; - } - nextBreak() { - // get the first char if we're at the beginning of the string - if (this.curClass == null) { - let firstClass = this.nextCharClass(); - this.curClass = $f898ea50f3b38ab8$var$mapFirst(firstClass); - this.nextClass = firstClass; - this.LB8a = firstClass === $60ff486a304db230$export$30a74a373318dec6; - this.LB30a = 0; - } - while(this.pos < this.string.length){ - this.lastPos = this.pos; - const lastClass = this.nextClass; - this.nextClass = this.nextCharClass(); - // explicit newline - if (this.curClass === $60ff486a304db230$export$66498d28055820a9 || this.curClass === $60ff486a304db230$export$de92be486109a1df && this.nextClass !== $60ff486a304db230$export$606cfc2a8896c91f) { - this.curClass = $f898ea50f3b38ab8$var$mapFirst($f898ea50f3b38ab8$var$mapClass(this.nextClass)); - return new $f898ea50f3b38ab8$var$Break(this.lastPos, true); - } - let shouldBreak = this.getSimpleBreak(); - if (shouldBreak === null) shouldBreak = this.getPairTableBreak(lastClass); - // Rule LB8a - this.LB8a = this.nextClass === $60ff486a304db230$export$30a74a373318dec6; - if (shouldBreak) return new $f898ea50f3b38ab8$var$Break(this.lastPos); - } - if (this.lastPos < this.string.length) { - this.lastPos = this.string.length; - return new $f898ea50f3b38ab8$var$Break(this.string.length); - } - return null; - } - constructor(string){ - this.string = string; - this.pos = 0; - this.lastPos = 0; - this.curClass = null; - this.nextClass = null; - this.LB8a = false; - this.LB21a = false; - this.LB30a = 0; - } -} -module.exports = $f898ea50f3b38ab8$var$LineBreaker; - - - - -},{"base64-js":121,"unicode-trie":161}],121:[function(require,module,exports){ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - -;(function (exports) { - 'use strict'; - - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array - - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - var PLUS_URL_SAFE = '-'.charCodeAt(0) - var SLASH_URL_SAFE = '_'.charCodeAt(0) - - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS || - code === PLUS_URL_SAFE) - return 62 // '+' - if (code === SLASH || - code === SLASH_URL_SAFE) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } - - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr - - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 - - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length - - var L = 0 - - function push (v) { - arr[L++] = v - } - - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } - - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } - - return arr - } - - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length - - function encode (num) { - return lookup.charAt(num) - } - - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } - - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } - - return output - } - - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) - -},{}],122:[function(require,module,exports){ -'use strict'; - -/** @type {import('./abs')} */ -module.exports = Math.abs; - -},{}],123:[function(require,module,exports){ -'use strict'; - -/** @type {import('./floor')} */ -module.exports = Math.floor; - -},{}],124:[function(require,module,exports){ -'use strict'; - -/** @type {import('./isNaN')} */ -module.exports = Number.isNaN || function isNaN(a) { - return a !== a; -}; - -},{}],125:[function(require,module,exports){ -'use strict'; - -/** @type {import('./max')} */ -module.exports = Math.max; - -},{}],126:[function(require,module,exports){ -'use strict'; - -/** @type {import('./min')} */ -module.exports = Math.min; - -},{}],127:[function(require,module,exports){ -'use strict'; - -/** @type {import('./pow')} */ -module.exports = Math.pow; - -},{}],128:[function(require,module,exports){ -'use strict'; - -/** @type {import('./round')} */ -module.exports = Math.round; - -},{}],129:[function(require,module,exports){ -'use strict'; - -var $isNaN = require('./isNaN'); - -/** @type {import('./sign')} */ -module.exports = function sign(number) { - if ($isNaN(number) || number === 0) { - return number; - } - return number < 0 ? -1 : +1; -}; - -},{"./isNaN":124}],130:[function(require,module,exports){ -'use strict'; - -var keysShim; -if (!Object.keys) { - // modified from https://github.com/es-shims/es5-shim - var has = Object.prototype.hasOwnProperty; - var toStr = Object.prototype.toString; - var isArgs = require('./isArguments'); // eslint-disable-line global-require - var isEnumerable = Object.prototype.propertyIsEnumerable; - var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); - var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); - var dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ]; - var equalsConstructorPrototype = function (o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; - }; - var excludedKeys = { - $applicationCache: true, - $console: true, - $external: true, - $frame: true, - $frameElement: true, - $frames: true, - $innerHeight: true, - $innerWidth: true, - $onmozfullscreenchange: true, - $onmozfullscreenerror: true, - $outerHeight: true, - $outerWidth: true, - $pageXOffset: true, - $pageYOffset: true, - $parent: true, - $scrollLeft: true, - $scrollTop: true, - $scrollX: true, - $scrollY: true, - $self: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true, - $window: true - }; - var hasAutomationEqualityBug = (function () { - /* global window */ - if (typeof window === 'undefined') { return false; } - for (var k in window) { - try { - if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { - try { - equalsConstructorPrototype(window[k]); - } catch (e) { - return true; - } - } - } catch (e) { - return true; - } - } - return false; - }()); - var equalsConstructorPrototypeIfNotBuggy = function (o) { - /* global window */ - if (typeof window === 'undefined' || !hasAutomationEqualityBug) { - return equalsConstructorPrototype(o); - } - try { - return equalsConstructorPrototype(o); - } catch (e) { - return false; - } - }; - - keysShim = function keys(object) { - var isObject = object !== null && typeof object === 'object'; - var isFunction = toStr.call(object) === '[object Function]'; - var isArguments = isArgs(object); - var isString = isObject && toStr.call(object) === '[object String]'; - var theKeys = []; - - if (!isObject && !isFunction && !isArguments) { - throw new TypeError('Object.keys called on a non-object'); - } - - var skipProto = hasProtoEnumBug && isFunction; - if (isString && object.length > 0 && !has.call(object, 0)) { - for (var i = 0; i < object.length; ++i) { - theKeys.push(String(i)); - } - } - - if (isArguments && object.length > 0) { - for (var j = 0; j < object.length; ++j) { - theKeys.push(String(j)); - } - } else { - for (var name in object) { - if (!(skipProto && name === 'prototype') && has.call(object, name)) { - theKeys.push(String(name)); - } - } - } - - if (hasDontEnumBug) { - var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); - - for (var k = 0; k < dontEnums.length; ++k) { - if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { - theKeys.push(dontEnums[k]); - } - } - } - return theKeys; - }; -} -module.exports = keysShim; - -},{"./isArguments":132}],131:[function(require,module,exports){ -'use strict'; - -var slice = Array.prototype.slice; -var isArgs = require('./isArguments'); - -var origKeys = Object.keys; -var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); - -var originalKeys = Object.keys; - -keysShim.shim = function shimObjectKeys() { - if (Object.keys) { - var keysWorksWithArguments = (function () { - // Safari 5.0 bug - var args = Object.keys(arguments); - return args && args.length === arguments.length; - }(1, 2)); - if (!keysWorksWithArguments) { - Object.keys = function keys(object) { // eslint-disable-line func-name-matching - if (isArgs(object)) { - return originalKeys(slice.call(object)); - } - return originalKeys(object); - }; - } - } else { - Object.keys = keysShim; - } - return Object.keys || keysShim; -}; - -module.exports = keysShim; - -},{"./implementation":130,"./isArguments":132}],132:[function(require,module,exports){ -'use strict'; - -var toStr = Object.prototype.toString; - -module.exports = function isArguments(value) { - var str = toStr.call(value); - var isArgs = str === '[object Arguments]'; - if (!isArgs) { - isArgs = str !== '[object Array]' && - value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - toStr.call(value.callee) === '[object Function]'; - } - return isArgs; -}; - -},{}],133:[function(require,module,exports){ -'use strict'; - -// modified from https://github.com/es-shims/es6-shim -var objectKeys = require('object-keys'); -var hasSymbols = require('has-symbols/shams')(); -var callBound = require('call-bound'); -var $Object = require('es-object-atoms'); -var $push = callBound('Array.prototype.push'); -var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable'); -var originalGetSymbols = hasSymbols ? $Object.getOwnPropertySymbols : null; - -// eslint-disable-next-line no-unused-vars -module.exports = function assign(target, source1) { - if (target == null) { throw new TypeError('target must be an object'); } - var to = $Object(target); // step 1 - if (arguments.length === 1) { - return to; // step 2 - } - for (var s = 1; s < arguments.length; ++s) { - var from = $Object(arguments[s]); // step 3.a.i - - // step 3.a.ii: - var keys = objectKeys(from); - var getSymbols = hasSymbols && ($Object.getOwnPropertySymbols || originalGetSymbols); - if (getSymbols) { - var syms = getSymbols(from); - for (var j = 0; j < syms.length; ++j) { - var key = syms[j]; - if ($propIsEnumerable(from, key)) { - $push(keys, key); - } - } - } - - // step 3.a.iii: - for (var i = 0; i < keys.length; ++i) { - var nextKey = keys[i]; - if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2 - var propValue = from[nextKey]; // step 3.a.iii.2.a - to[nextKey] = propValue; // step 3.a.iii.2.b - } - } - } - - return to; // step 4 -}; - -},{"call-bound":44,"es-object-atoms":93,"has-symbols/shams":108,"object-keys":131}],134:[function(require,module,exports){ -'use strict'; - -var implementation = require('./implementation'); - -var lacksProperEnumerationOrder = function () { - if (!Object.assign) { - return false; - } - /* - * v8, specifically in node 4.x, has a bug with incorrect property enumeration order - * note: this does not detect the bug unless there's 20 characters - */ - var str = 'abcdefghijklmnopqrst'; - var letters = str.split(''); - var map = {}; - for (var i = 0; i < letters.length; ++i) { - map[letters[i]] = letters[i]; - } - var obj = Object.assign({}, map); - var actual = ''; - for (var k in obj) { - actual += k; - } - return str !== actual; -}; - -var assignHasPendingExceptions = function () { - if (!Object.assign || !Object.preventExtensions) { - return false; - } - /* - * Firefox 37 still has "pending exception" logic in its Object.assign implementation, - * which is 72% slower than our shim, and Firefox 40's native implementation. - */ - var thrower = Object.preventExtensions({ 1: 2 }); - try { - Object.assign(thrower, 'xy'); - } catch (e) { - return thrower[1] === 'y'; - } - return false; -}; - -module.exports = function getPolyfill() { - if (!Object.assign) { - return implementation; - } - if (lacksProperEnumerationOrder()) { - return implementation; - } - if (assignHasPendingExceptions()) { - return implementation; - } - return Object.assign; -}; - -},{"./implementation":133}],135:[function(require,module,exports){ -(function (Buffer){(function (){ -/* - * MIT LICENSE - * Copyright (c) 2011 Devon Govett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software - * without restriction, including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -const fs = require('fs'); -const zlib = require('zlib'); - -module.exports = class PNG { - static decode(path, fn) { - return fs.readFile(path, function(err, file) { - const png = new PNG(file); - return png.decode(pixels => fn(pixels)); - }); - } - - static load(path) { - const file = fs.readFileSync(path); - return new PNG(file); - } - - constructor(data) { - let i; - this.data = data; - this.pos = 8; // Skip the default header - - this.palette = []; - this.imgData = []; - this.transparency = {}; - this.text = {}; - - while (true) { - const chunkSize = this.readUInt32(); - let section = ''; - for (i = 0; i < 4; i++) { - section += String.fromCharCode(this.data[this.pos++]); - } - - switch (section) { - case 'IHDR': - // we can grab interesting values from here (like width, height, etc) - this.width = this.readUInt32(); - this.height = this.readUInt32(); - this.bits = this.data[this.pos++]; - this.colorType = this.data[this.pos++]; - this.compressionMethod = this.data[this.pos++]; - this.filterMethod = this.data[this.pos++]; - this.interlaceMethod = this.data[this.pos++]; - break; - - case 'PLTE': - this.palette = this.read(chunkSize); - break; - - case 'IDAT': - for (i = 0; i < chunkSize; i++) { - this.imgData.push(this.data[this.pos++]); - } - break; - - case 'tRNS': - // This chunk can only occur once and it must occur after the - // PLTE chunk and before the IDAT chunk. - this.transparency = {}; - switch (this.colorType) { - case 3: - // Indexed color, RGB. Each byte in this chunk is an alpha for - // the palette index in the PLTE ("palette") chunk up until the - // last non-opaque entry. Set up an array, stretching over all - // palette entries which will be 0 (opaque) or 1 (transparent). - this.transparency.indexed = this.read(chunkSize); - var short = 255 - this.transparency.indexed.length; - if (short > 0) { - for (i = 0; i < short; i++) { - this.transparency.indexed.push(255); - } - } - break; - case 0: - // Greyscale. Corresponding to entries in the PLTE chunk. - // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1 - this.transparency.grayscale = this.read(chunkSize)[0]; - break; - case 2: - // True color with proper alpha channel. - this.transparency.rgb = this.read(chunkSize); - break; - } - break; - - case 'tEXt': - var text = this.read(chunkSize); - var index = text.indexOf(0); - var key = String.fromCharCode.apply(String, text.slice(0, index)); - this.text[key] = String.fromCharCode.apply( - String, - text.slice(index + 1) - ); - break; - - case 'IEND': - // we've got everything we need! - switch (this.colorType) { - case 0: - case 3: - case 4: - this.colors = 1; - break; - case 2: - case 6: - this.colors = 3; - break; - } - - this.hasAlphaChannel = [4, 6].includes(this.colorType); - var colors = this.colors + (this.hasAlphaChannel ? 1 : 0); - this.pixelBitlength = this.bits * colors; - - switch (this.colors) { - case 1: - this.colorSpace = 'DeviceGray'; - break; - case 3: - this.colorSpace = 'DeviceRGB'; - break; - } - - this.imgData = new Buffer(this.imgData); - return; - break; - - default: - // unknown (or unimportant) section, skip it - this.pos += chunkSize; - } - - this.pos += 4; // Skip the CRC - - if (this.pos > this.data.length) { - throw new Error('Incomplete or corrupt PNG file'); - } - } - } - - read(bytes) { - const result = new Array(bytes); - for (let i = 0; i < bytes; i++) { - result[i] = this.data[this.pos++]; - } - return result; - } - - readUInt32() { - const b1 = this.data[this.pos++] << 24; - const b2 = this.data[this.pos++] << 16; - const b3 = this.data[this.pos++] << 8; - const b4 = this.data[this.pos++]; - return b1 | b2 | b3 | b4; - } - - readUInt16() { - const b1 = this.data[this.pos++] << 8; - const b2 = this.data[this.pos++]; - return b1 | b2; - } - - decodePixels(fn) { - return zlib.inflate(this.imgData, (err, data) => { - if (err) { - throw err; - } - - const { width, height } = this; - const pixelBytes = this.pixelBitlength / 8; - - const pixels = new Buffer(width * height * pixelBytes); - const { length } = data; - let pos = 0; - - function pass(x0, y0, dx, dy, singlePass = false) { - const w = Math.ceil((width - x0) / dx); - const h = Math.ceil((height - y0) / dy); - const scanlineLength = pixelBytes * w; - const buffer = singlePass ? pixels : new Buffer(scanlineLength * h); - let row = 0; - let c = 0; - while (row < h && pos < length) { - var byte, col, i, left, upper; - switch (data[pos++]) { - case 0: // None - for (i = 0; i < scanlineLength; i++) { - buffer[c++] = data[pos++]; - } - break; - - case 1: // Sub - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - buffer[c++] = (byte + left) % 256; - } - break; - - case 2: // Up - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (upper + byte) % 256; - } - break; - - case 3: // Average - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256; - } - break; - - case 4: // Paeth - for (i = 0; i < scanlineLength; i++) { - var paeth, upperLeft; - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - - if (row === 0) { - upper = upperLeft = 0; - } else { - upper = - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - upperLeft = - col && - buffer[ - (row - 1) * scanlineLength + - (col - 1) * pixelBytes + - (i % pixelBytes) - ]; - } - - const p = left + upper - upperLeft; - const pa = Math.abs(p - left); - const pb = Math.abs(p - upper); - const pc = Math.abs(p - upperLeft); - - if (pa <= pb && pa <= pc) { - paeth = left; - } else if (pb <= pc) { - paeth = upper; - } else { - paeth = upperLeft; - } - - buffer[c++] = (byte + paeth) % 256; - } - break; - - default: - throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`); - } - - if (!singlePass) { - let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes; - let bufferPos = row * scanlineLength; - for (i = 0; i < w; i++) { - for (let j = 0; j < pixelBytes; j++) - pixels[pixelsPos++] = buffer[bufferPos++]; - pixelsPos += (dx - 1) * pixelBytes; - } - } - - row++; - } - } - - if (this.interlaceMethod === 1) { - /* - 1 6 4 6 2 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - 3 6 4 6 3 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - */ - pass(0, 0, 8, 8); // 1 - pass(4, 0, 8, 8); // 2 - pass(0, 4, 4, 8); // 3 - pass(2, 0, 4, 4); // 4 - pass(0, 2, 2, 4); // 5 - pass(1, 0, 2, 2); // 6 - pass(0, 1, 1, 2); // 7 - } else { - pass(0, 0, 1, 1, true); - } - - return fn(pixels); - }); - } - - decodePalette() { - const { palette } = this; - const { length } = palette; - const transparency = this.transparency.indexed || []; - const ret = new Buffer(transparency.length + length); - let pos = 0; - let c = 0; - - for (let i = 0; i < length; i += 3) { - var left; - ret[pos++] = palette[i]; - ret[pos++] = palette[i + 1]; - ret[pos++] = palette[i + 2]; - ret[pos++] = (left = transparency[c++]) != null ? left : 255; - } - - return ret; - } - - copyToImageData(imageData, pixels) { - let j, k; - let { colors } = this; - let palette = null; - let alpha = this.hasAlphaChannel; - - if (this.palette.length) { - palette = - this._decodedPalette || (this._decodedPalette = this.decodePalette()); - colors = 4; - alpha = true; - } - - const data = imageData.data || imageData; - const { length } = data; - const input = palette || pixels; - let i = (j = 0); - - if (colors === 1) { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - const v = input[k++]; - data[i++] = v; - data[i++] = v; - data[i++] = v; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } else { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } - } - - decode(fn) { - const ret = new Buffer(this.width * this.height * 4); - return this.decodePixels(pixels => { - this.copyToImageData(ret, pixels); - return fn(ret); - }); - } -}; - -}).call(this)}).call(this,require("buffer").Buffer) -},{"buffer":36,"fs":35,"zlib":23}],136:[function(require,module,exports){ -'use strict'; - -/** @type {import('.')} */ -module.exports = [ - 'Float16Array', - 'Float32Array', - 'Float64Array', - 'Int8Array', - 'Int16Array', - 'Int32Array', - 'Uint8Array', - 'Uint8ClampedArray', - 'Uint16Array', - 'Uint32Array', - 'BigInt64Array', - 'BigUint64Array' -]; - -},{}],137:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],138:[function(require,module,exports){ - -function $parcel$exportWildcard(dest, source) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { - return; - } - - Object.defineProperty(dest, key, { - enumerable: true, - get: function get() { - return source[key]; - } - }); - }); - - return dest; -} - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -$parcel$export(module.exports, "EncodeStream", () => $1ed46182c1410e1d$export$9b4f661deaa36c3e); -$parcel$export(module.exports, "DecodeStream", () => $8ae20583b93e4933$export$c18b354bac7948e9); -$parcel$export(module.exports, "Array", () => $8ea28a08eae2a116$export$c4be6576ca6fe4aa); -$parcel$export(module.exports, "LazyArray", () => $444f112d3cbc7e9f$export$5576c026028d4983); -$parcel$export(module.exports, "Bitfield", () => $3def237a34a226b5$export$96b43b8a49f688ea); -$parcel$export(module.exports, "Boolean", () => $8415e91bb83faf74$export$ff887cefee4d61ec); -$parcel$export(module.exports, "Buffer", () => $08d28604119af47e$export$7d22a0eea6656474); -$parcel$export(module.exports, "Enum", () => $070ce31ea947467f$export$deb82508dd66d288); -$parcel$export(module.exports, "Optional", () => $80703542fcfb6ff0$export$7acb7b24c478f9c6); -$parcel$export(module.exports, "Reserved", () => $f4fd49878232508a$export$da9b5fe187a9aa1); -$parcel$export(module.exports, "String", () => $d8705cd4022e7dcf$export$89b8e0fa65f6a914); -$parcel$export(module.exports, "Struct", () => $aa8b66bae6abe658$export$eabc71f011df675a); -$parcel$export(module.exports, "VersionedStruct", () => $fcb208a95f6d048b$export$95a8b60f4da7dec8); -// Node back-compat. -const $8ae20583b93e4933$var$ENCODING_MAPPING = { - utf16le: "utf-16le", - ucs2: "utf-16le", - utf16be: "utf-16be" -}; -class $8ae20583b93e4933$export$c18b354bac7948e9 { - constructor(buffer){ - this.buffer = buffer; - this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - this.pos = 0; - this.length = this.buffer.length; - } - readString(length, encoding = "ascii") { - encoding = $8ae20583b93e4933$var$ENCODING_MAPPING[encoding] || encoding; - let buf = this.readBuffer(length); - try { - let decoder = new TextDecoder(encoding); - return decoder.decode(buf); - } catch (err) { - return buf; - } - } - readBuffer(length) { - return this.buffer.slice(this.pos, this.pos += length); - } - readUInt24BE() { - return (this.readUInt16BE() << 8) + this.readUInt8(); - } - readUInt24LE() { - return this.readUInt16LE() + (this.readUInt8() << 16); - } - readInt24BE() { - return (this.readInt16BE() << 8) + this.readUInt8(); - } - readInt24LE() { - return this.readUInt16LE() + (this.readInt8() << 16); - } -} -$8ae20583b93e4933$export$c18b354bac7948e9.TYPES = { - UInt8: 1, - UInt16: 2, - UInt24: 3, - UInt32: 4, - Int8: 1, - Int16: 2, - Int24: 3, - Int32: 4, - Float: 4, - Double: 8 -}; -for (let key of Object.getOwnPropertyNames(DataView.prototype))if (key.slice(0, 3) === "get") { - let type = key.slice(3).replace("Ui", "UI"); - if (type === "Float32") type = "Float"; - else if (type === "Float64") type = "Double"; - let bytes = $8ae20583b93e4933$export$c18b354bac7948e9.TYPES[type]; - $8ae20583b93e4933$export$c18b354bac7948e9.prototype["read" + type + (bytes === 1 ? "" : "BE")] = function() { - const ret = this.view[key](this.pos, false); - this.pos += bytes; - return ret; - }; - if (bytes !== 1) $8ae20583b93e4933$export$c18b354bac7948e9.prototype["read" + type + "LE"] = function() { - const ret = this.view[key](this.pos, true); - this.pos += bytes; - return ret; - }; -} - - -const $1ed46182c1410e1d$var$textEncoder = new TextEncoder(); -const $1ed46182c1410e1d$var$isBigEndian = new Uint8Array(new Uint16Array([ - 0x1234 -]).buffer)[0] == 0x12; -class $1ed46182c1410e1d$export$9b4f661deaa36c3e { - constructor(buffer){ - this.buffer = buffer; - this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength); - this.pos = 0; - } - writeBuffer(buffer) { - this.buffer.set(buffer, this.pos); - this.pos += buffer.length; - } - writeString(string, encoding = "ascii") { - let buf; - switch(encoding){ - case "utf16le": - case "utf16-le": - case "ucs2": - buf = $1ed46182c1410e1d$var$stringToUtf16(string, $1ed46182c1410e1d$var$isBigEndian); - break; - case "utf16be": - case "utf16-be": - buf = $1ed46182c1410e1d$var$stringToUtf16(string, !$1ed46182c1410e1d$var$isBigEndian); - break; - case "utf8": - buf = $1ed46182c1410e1d$var$textEncoder.encode(string); - break; - case "ascii": - buf = $1ed46182c1410e1d$var$stringToAscii(string); - break; - default: - throw new Error(`Unsupported encoding: ${encoding}`); - } - this.writeBuffer(buf); - } - writeUInt24BE(val) { - this.buffer[this.pos++] = val >>> 16 & 0xff; - this.buffer[this.pos++] = val >>> 8 & 0xff; - this.buffer[this.pos++] = val & 0xff; - } - writeUInt24LE(val) { - this.buffer[this.pos++] = val & 0xff; - this.buffer[this.pos++] = val >>> 8 & 0xff; - this.buffer[this.pos++] = val >>> 16 & 0xff; - } - writeInt24BE(val) { - if (val >= 0) this.writeUInt24BE(val); - else this.writeUInt24BE(val + 0xffffff + 1); - } - writeInt24LE(val) { - if (val >= 0) this.writeUInt24LE(val); - else this.writeUInt24LE(val + 0xffffff + 1); - } - fill(val, length) { - if (length < this.buffer.length) { - this.buffer.fill(val, this.pos, this.pos + length); - this.pos += length; - } else { - const buf = new Uint8Array(length); - buf.fill(val); - this.writeBuffer(buf); - } - } -} -function $1ed46182c1410e1d$var$stringToUtf16(string, swap) { - let buf = new Uint16Array(string.length); - for(let i = 0; i < string.length; i++){ - let code = string.charCodeAt(i); - if (swap) code = code >> 8 | (code & 0xff) << 8; - buf[i] = code; - } - return new Uint8Array(buf.buffer); -} -function $1ed46182c1410e1d$var$stringToAscii(string) { - let buf = new Uint8Array(string.length); - for(let i = 0; i < string.length; i++)// Match node.js behavior - encoding allows 8-bit rather than 7-bit. - buf[i] = string.charCodeAt(i); - return buf; -} -for (let key of Object.getOwnPropertyNames(DataView.prototype))if (key.slice(0, 3) === "set") { - let type = key.slice(3).replace("Ui", "UI"); - if (type === "Float32") type = "Float"; - else if (type === "Float64") type = "Double"; - let bytes = (0, $8ae20583b93e4933$export$c18b354bac7948e9).TYPES[type]; - $1ed46182c1410e1d$export$9b4f661deaa36c3e.prototype["write" + type + (bytes === 1 ? "" : "BE")] = function(value) { - this.view[key](this.pos, value, false); - this.pos += bytes; - }; - if (bytes !== 1) $1ed46182c1410e1d$export$9b4f661deaa36c3e.prototype["write" + type + "LE"] = function(value) { - this.view[key](this.pos, value, true); - this.pos += bytes; - }; -} - - - - - -class $8d21f7fa58802901$export$ef88aa0d34c34520 { - fromBuffer(buffer) { - let stream = new (0, $8ae20583b93e4933$export$c18b354bac7948e9)(buffer); - return this.decode(stream); - } - toBuffer(value) { - let size = this.size(value); - let buffer = new Uint8Array(size); - let stream = new (0, $1ed46182c1410e1d$export$9b4f661deaa36c3e)(buffer); - this.encode(stream, value); - return buffer; - } -} - - -var $af65abf7bf65ac42$exports = {}; - -$parcel$export($af65abf7bf65ac42$exports, "Number", () => $af65abf7bf65ac42$export$fffa67e515d04022); -$parcel$export($af65abf7bf65ac42$exports, "uint8", () => $af65abf7bf65ac42$export$52e103c63c4e68cf); -$parcel$export($af65abf7bf65ac42$exports, "uint16be", () => $af65abf7bf65ac42$export$60dfe43c8297a8f8); -$parcel$export($af65abf7bf65ac42$exports, "uint16", () => $af65abf7bf65ac42$export$56bd24b5a3ee8456); -$parcel$export($af65abf7bf65ac42$exports, "uint16le", () => $af65abf7bf65ac42$export$b92d76f0ca6d1789); -$parcel$export($af65abf7bf65ac42$exports, "uint24be", () => $af65abf7bf65ac42$export$255f45171f96b50c); -$parcel$export($af65abf7bf65ac42$exports, "uint24", () => $af65abf7bf65ac42$export$1925298fbd719b21); -$parcel$export($af65abf7bf65ac42$exports, "uint24le", () => $af65abf7bf65ac42$export$758e1dafc8dc7271); -$parcel$export($af65abf7bf65ac42$exports, "uint32be", () => $af65abf7bf65ac42$export$74c16dba6c885532); -$parcel$export($af65abf7bf65ac42$exports, "uint32", () => $af65abf7bf65ac42$export$de9ffb9418dd7d0d); -$parcel$export($af65abf7bf65ac42$exports, "uint32le", () => $af65abf7bf65ac42$export$5f744bb30a534bc9); -$parcel$export($af65abf7bf65ac42$exports, "int8", () => $af65abf7bf65ac42$export$5984f25eab09961f); -$parcel$export($af65abf7bf65ac42$exports, "int16be", () => $af65abf7bf65ac42$export$198ae7d10d26a900); -$parcel$export($af65abf7bf65ac42$exports, "int16", () => $af65abf7bf65ac42$export$c35c15c7caeff2b6); -$parcel$export($af65abf7bf65ac42$exports, "int16le", () => $af65abf7bf65ac42$export$399cc4b7169e5aed); -$parcel$export($af65abf7bf65ac42$exports, "int24be", () => $af65abf7bf65ac42$export$3676d1f71eca2ec0); -$parcel$export($af65abf7bf65ac42$exports, "int24", () => $af65abf7bf65ac42$export$73f695d681ac61f9); -$parcel$export($af65abf7bf65ac42$exports, "int24le", () => $af65abf7bf65ac42$export$671f8672dbd40a4); -$parcel$export($af65abf7bf65ac42$exports, "int32be", () => $af65abf7bf65ac42$export$78a2ac3d09dd42d5); -$parcel$export($af65abf7bf65ac42$exports, "int32", () => $af65abf7bf65ac42$export$1d95835383bb05a); -$parcel$export($af65abf7bf65ac42$exports, "int32le", () => $af65abf7bf65ac42$export$5ec1f146e759329a); -$parcel$export($af65abf7bf65ac42$exports, "floatbe", () => $af65abf7bf65ac42$export$92b5c14c6abb5c97); -$parcel$export($af65abf7bf65ac42$exports, "float", () => $af65abf7bf65ac42$export$6b5cd3983e3ee5ab); -$parcel$export($af65abf7bf65ac42$exports, "floatle", () => $af65abf7bf65ac42$export$6d20592bc4cb19d9); -$parcel$export($af65abf7bf65ac42$exports, "doublebe", () => $af65abf7bf65ac42$export$e50b9e97e4d43631); -$parcel$export($af65abf7bf65ac42$exports, "double", () => $af65abf7bf65ac42$export$7b3cbda67be88f5f); -$parcel$export($af65abf7bf65ac42$exports, "doublele", () => $af65abf7bf65ac42$export$6f53315aa512b751); -$parcel$export($af65abf7bf65ac42$exports, "Fixed", () => $af65abf7bf65ac42$export$13475bbd2a37a9b4); -$parcel$export($af65abf7bf65ac42$exports, "fixed16be", () => $af65abf7bf65ac42$export$f87b441e6bd90278); -$parcel$export($af65abf7bf65ac42$exports, "fixed16", () => $af65abf7bf65ac42$export$a3abada75ef55921); -$parcel$export($af65abf7bf65ac42$exports, "fixed16le", () => $af65abf7bf65ac42$export$3752a2886837dc22); -$parcel$export($af65abf7bf65ac42$exports, "fixed32be", () => $af65abf7bf65ac42$export$dd71d8d9bc792632); -$parcel$export($af65abf7bf65ac42$exports, "fixed32", () => $af65abf7bf65ac42$export$e913265d48471f2d); -$parcel$export($af65abf7bf65ac42$exports, "fixed32le", () => $af65abf7bf65ac42$export$7fc47db6a5fc8223); - - -class $af65abf7bf65ac42$export$fffa67e515d04022 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, endian = "BE"){ - super(); - this.type = type; - this.endian = endian; - this.fn = this.type; - if (this.type[this.type.length - 1] !== "8") this.fn += this.endian; - } - size() { - return (0, $8ae20583b93e4933$export$c18b354bac7948e9).TYPES[this.type]; - } - decode(stream) { - return stream[`read${this.fn}`](); - } - encode(stream, val) { - return stream[`write${this.fn}`](val); - } -} -const $af65abf7bf65ac42$export$52e103c63c4e68cf = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt8"); -const $af65abf7bf65ac42$export$60dfe43c8297a8f8 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt16", "BE"); -const $af65abf7bf65ac42$export$56bd24b5a3ee8456 = $af65abf7bf65ac42$export$60dfe43c8297a8f8; -const $af65abf7bf65ac42$export$b92d76f0ca6d1789 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt16", "LE"); -const $af65abf7bf65ac42$export$255f45171f96b50c = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt24", "BE"); -const $af65abf7bf65ac42$export$1925298fbd719b21 = $af65abf7bf65ac42$export$255f45171f96b50c; -const $af65abf7bf65ac42$export$758e1dafc8dc7271 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt24", "LE"); -const $af65abf7bf65ac42$export$74c16dba6c885532 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt32", "BE"); -const $af65abf7bf65ac42$export$de9ffb9418dd7d0d = $af65abf7bf65ac42$export$74c16dba6c885532; -const $af65abf7bf65ac42$export$5f744bb30a534bc9 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt32", "LE"); -const $af65abf7bf65ac42$export$5984f25eab09961f = new $af65abf7bf65ac42$export$fffa67e515d04022("Int8"); -const $af65abf7bf65ac42$export$198ae7d10d26a900 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int16", "BE"); -const $af65abf7bf65ac42$export$c35c15c7caeff2b6 = $af65abf7bf65ac42$export$198ae7d10d26a900; -const $af65abf7bf65ac42$export$399cc4b7169e5aed = new $af65abf7bf65ac42$export$fffa67e515d04022("Int16", "LE"); -const $af65abf7bf65ac42$export$3676d1f71eca2ec0 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int24", "BE"); -const $af65abf7bf65ac42$export$73f695d681ac61f9 = $af65abf7bf65ac42$export$3676d1f71eca2ec0; -const $af65abf7bf65ac42$export$671f8672dbd40a4 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int24", "LE"); -const $af65abf7bf65ac42$export$78a2ac3d09dd42d5 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int32", "BE"); -const $af65abf7bf65ac42$export$1d95835383bb05a = $af65abf7bf65ac42$export$78a2ac3d09dd42d5; -const $af65abf7bf65ac42$export$5ec1f146e759329a = new $af65abf7bf65ac42$export$fffa67e515d04022("Int32", "LE"); -const $af65abf7bf65ac42$export$92b5c14c6abb5c97 = new $af65abf7bf65ac42$export$fffa67e515d04022("Float", "BE"); -const $af65abf7bf65ac42$export$6b5cd3983e3ee5ab = $af65abf7bf65ac42$export$92b5c14c6abb5c97; -const $af65abf7bf65ac42$export$6d20592bc4cb19d9 = new $af65abf7bf65ac42$export$fffa67e515d04022("Float", "LE"); -const $af65abf7bf65ac42$export$e50b9e97e4d43631 = new $af65abf7bf65ac42$export$fffa67e515d04022("Double", "BE"); -const $af65abf7bf65ac42$export$7b3cbda67be88f5f = $af65abf7bf65ac42$export$e50b9e97e4d43631; -const $af65abf7bf65ac42$export$6f53315aa512b751 = new $af65abf7bf65ac42$export$fffa67e515d04022("Double", "LE"); -class $af65abf7bf65ac42$export$13475bbd2a37a9b4 extends $af65abf7bf65ac42$export$fffa67e515d04022 { - constructor(size, endian, fracBits = size >> 1){ - super(`Int${size}`, endian); - this._point = 1 << fracBits; - } - decode(stream) { - return super.decode(stream) / this._point; - } - encode(stream, val) { - return super.encode(stream, val * this._point | 0); - } -} -const $af65abf7bf65ac42$export$f87b441e6bd90278 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(16, "BE"); -const $af65abf7bf65ac42$export$a3abada75ef55921 = $af65abf7bf65ac42$export$f87b441e6bd90278; -const $af65abf7bf65ac42$export$3752a2886837dc22 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(16, "LE"); -const $af65abf7bf65ac42$export$dd71d8d9bc792632 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(32, "BE"); -const $af65abf7bf65ac42$export$e913265d48471f2d = $af65abf7bf65ac42$export$dd71d8d9bc792632; -const $af65abf7bf65ac42$export$7fc47db6a5fc8223 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(32, "LE"); - - -var $4559ecf940edc78d$exports = {}; - -$parcel$export($4559ecf940edc78d$exports, "resolveLength", () => $4559ecf940edc78d$export$83b6dc3503c1fda6); -$parcel$export($4559ecf940edc78d$exports, "PropertyDescriptor", () => $4559ecf940edc78d$export$41705b1d644e0f14); - -function $4559ecf940edc78d$export$83b6dc3503c1fda6(length, stream, parent) { - let res; - if (typeof length === "number") res = length; - else if (typeof length === "function") res = length.call(parent, parent); - else if (parent && typeof length === "string") res = parent[length]; - else if (stream && length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) res = length.decode(stream); - if (isNaN(res)) throw new Error("Not a fixed size"); - return res; -} -class $4559ecf940edc78d$export$41705b1d644e0f14 { - constructor(opts = {}){ - this.enumerable = true; - this.configurable = true; - for(let key in opts){ - const val = opts[key]; - this[key] = val; - } - } -} - - -class $8ea28a08eae2a116$export$c4be6576ca6fe4aa extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, length, lengthType = "count"){ - super(); - this.type = type; - this.length = length; - this.lengthType = lengthType; - } - decode(stream, parent) { - let length; - const { pos: pos } = stream; - const res = []; - let ctx = parent; - if (this.length != null) length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - // define hidden properties - Object.defineProperties(res, { - parent: { - value: parent - }, - _startOffset: { - value: pos - }, - _currentOffset: { - value: 0, - writable: true - }, - _length: { - value: length - } - }); - ctx = res; - } - if (length == null || this.lengthType === "bytes") { - const target = length != null ? stream.pos + length : (parent != null ? parent._length : undefined) ? parent._startOffset + parent._length : stream.length; - while(stream.pos < target)res.push(this.type.decode(stream, ctx)); - } else for(let i = 0, end = length; i < end; i++)res.push(this.type.decode(stream, ctx)); - return res; - } - size(array, ctx, includePointers = true) { - if (!array) return this.type.size(null, ctx) * $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, ctx); - let size = 0; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - size += this.length.size(); - ctx = { - parent: ctx, - pointerSize: 0 - }; - } - for (let item of array)size += this.type.size(item, ctx); - if (ctx && includePointers && this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) size += ctx.pointerSize; - return size; - } - encode(stream, array, parent) { - let ctx = parent; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent - }; - ctx.pointerOffset = stream.pos + this.size(array, ctx, false); - this.length.encode(stream, array.length); - } - for (let item of array)this.type.encode(stream, item, ctx); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } - } -} - - - - - -class $444f112d3cbc7e9f$export$5576c026028d4983 extends (0, $8ea28a08eae2a116$export$c4be6576ca6fe4aa) { - decode(stream, parent) { - const { pos: pos } = stream; - const length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) parent = { - parent: parent, - _startOffset: pos, - _currentOffset: 0, - _length: length - }; - const res = new $444f112d3cbc7e9f$var$LazyArrayValue(this.type, length, stream, parent); - stream.pos += length * this.type.size(null, parent); - return res; - } - size(val, ctx) { - if (val instanceof $444f112d3cbc7e9f$var$LazyArrayValue) val = val.toArray(); - return super.size(val, ctx); - } - encode(stream, val, ctx) { - if (val instanceof $444f112d3cbc7e9f$var$LazyArrayValue) val = val.toArray(); - return super.encode(stream, val, ctx); - } -} -class $444f112d3cbc7e9f$var$LazyArrayValue { - constructor(type, length, stream, ctx){ - this.type = type; - this.length = length; - this.stream = stream; - this.ctx = ctx; - this.base = this.stream.pos; - this.items = []; - } - get(index) { - if (index < 0 || index >= this.length) return undefined; - if (this.items[index] == null) { - const { pos: pos } = this.stream; - this.stream.pos = this.base + this.type.size(null, this.ctx) * index; - this.items[index] = this.type.decode(this.stream, this.ctx); - this.stream.pos = pos; - } - return this.items[index]; - } - toArray() { - const result = []; - for(let i = 0, end = this.length; i < end; i++)result.push(this.get(i)); - return result; - } -} - - - -class $3def237a34a226b5$export$96b43b8a49f688ea extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, flags = []){ - super(); - this.type = type; - this.flags = flags; - } - decode(stream) { - const val = this.type.decode(stream); - const res = {}; - for(let i = 0; i < this.flags.length; i++){ - const flag = this.flags[i]; - if (flag != null) res[flag] = !!(val & 1 << i); - } - return res; - } - size() { - return this.type.size(); - } - encode(stream, keys) { - let val = 0; - for(let i = 0; i < this.flags.length; i++){ - const flag = this.flags[i]; - if (flag != null) { - if (keys[flag]) val |= 1 << i; - } - } - return this.type.encode(stream, val); - } -} - - - -class $8415e91bb83faf74$export$ff887cefee4d61ec extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type){ - super(); - this.type = type; - } - decode(stream, parent) { - return !!this.type.decode(stream, parent); - } - size(val, parent) { - return this.type.size(val, parent); - } - encode(stream, val, parent) { - return this.type.encode(stream, +val, parent); - } -} - - - - - -class $08d28604119af47e$export$7d22a0eea6656474 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(length){ - super(); - this.length = length; - } - decode(stream, parent) { - const length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - return stream.readBuffer(length); - } - size(val, parent) { - if (!val) return $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, parent); - let len = val.length; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) len += this.length.size(); - return len; - } - encode(stream, buf, parent) { - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) this.length.encode(stream, buf.length); - return stream.writeBuffer(buf); - } -} - - - -class $070ce31ea947467f$export$deb82508dd66d288 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, options = []){ - super(); - this.type = type; - this.options = options; - } - decode(stream) { - const index = this.type.decode(stream); - return this.options[index] || index; - } - size() { - return this.type.size(); - } - encode(stream, val) { - const index = this.options.indexOf(val); - if (index === -1) throw new Error(`Unknown option in enum: ${val}`); - return this.type.encode(stream, index); - } -} - - - -class $80703542fcfb6ff0$export$7acb7b24c478f9c6 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, condition = true){ - super(); - this.type = type; - this.condition = condition; - } - decode(stream, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.decode(stream, parent); - } - size(val, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.size(val, parent); - else return 0; - } - encode(stream, val, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.encode(stream, val, parent); - } -} - - - - -class $f4fd49878232508a$export$da9b5fe187a9aa1 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, count = 1){ - super(); - this.type = type; - this.count = count; - } - decode(stream, parent) { - stream.pos += this.size(null, parent); - return undefined; - } - size(data, parent) { - const count = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.count, null, parent); - return this.type.size() * count; - } - encode(stream, val, parent) { - return stream.fill(0, this.size(val, parent)); - } -} - - - - - -class $d8705cd4022e7dcf$export$89b8e0fa65f6a914 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(length, encoding = "ascii"){ - super(); - this.length = length; - this.encoding = encoding; - } - decode(stream, parent) { - let length, pos; - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent, parent) || "ascii"; - let width = $d8705cd4022e7dcf$var$encodingWidth(encoding); - if (this.length != null) length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - else { - let buffer; - ({ buffer: buffer, length: length, pos: pos } = stream); - while(pos < length - width + 1 && (buffer[pos] !== 0x00 || width === 2 && buffer[pos + 1] !== 0x00))pos += width; - length = pos - stream.pos; - } - const string = stream.readString(length, encoding); - if (this.length == null && stream.pos < stream.length) stream.pos += width; - return string; - } - size(val, parent) { - // Use the defined value if no value was given - if (val === undefined || val === null) return $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, parent); - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || "ascii"; - if (encoding === "utf16be") encoding = "utf16le"; - let size = $d8705cd4022e7dcf$var$byteLength(val, encoding); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) size += this.length.size(); - if (this.length == null) size += $d8705cd4022e7dcf$var$encodingWidth(encoding); - return size; - } - encode(stream, val, parent) { - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || "ascii"; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) this.length.encode(stream, $d8705cd4022e7dcf$var$byteLength(val, encoding)); - stream.writeString(val, encoding); - if (this.length == null) return $d8705cd4022e7dcf$var$encodingWidth(encoding) == 2 ? stream.writeUInt16LE(0x0000) : stream.writeUInt8(0x00); - } -} -function $d8705cd4022e7dcf$var$encodingWidth(encoding) { - switch(encoding){ - case "ascii": - case "utf8": - return 1; - case "utf16le": - case "utf16-le": - case "utf-16be": - case "utf-16le": - case "utf16be": - case "utf16-be": - case "ucs2": - return 2; - default: - //TODO: assume all other encodings are 1-byters - //throw new Error('Unknown encoding ' + encoding); - return 1; - } -} -function $d8705cd4022e7dcf$var$byteLength(string, encoding) { - switch(encoding){ - case "ascii": - return string.length; - case "utf8": - let len = 0; - for(let i = 0; i < string.length; i++){ - let c = string.charCodeAt(i); - if (c >= 0xd800 && c <= 0xdbff && i < string.length - 1) { - let c2 = string.charCodeAt(++i); - if ((c2 & 0xfc00) === 0xdc00) c = ((c & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000; - else // unmatched surrogate. - i--; - } - if ((c & 0xffffff80) === 0) len++; - else if ((c & 0xfffff800) === 0) len += 2; - else if ((c & 0xffff0000) === 0) len += 3; - else if ((c & 0xffe00000) === 0) len += 4; - } - return len; - case "utf16le": - case "utf16-le": - case "utf16be": - case "utf16-be": - case "ucs2": - return string.length * 2; - default: - throw new Error("Unknown encoding " + encoding); - } -} - - - - -class $aa8b66bae6abe658$export$eabc71f011df675a extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(fields = {}){ - super(); - this.fields = fields; - } - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - this._parseFields(stream, res, this.fields); - if (this.process != null) this.process.call(res, stream); - return res; - } - _setup(stream, parent, length) { - const res = {}; - // define hidden properties - Object.defineProperties(res, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - }, - _currentOffset: { - value: 0, - writable: true - }, - _length: { - value: length - } - }); - return res; - } - _parseFields(stream, res, fields) { - for(let key in fields){ - var val; - const type = fields[key]; - if (typeof type === "function") val = type.call(res, res); - else val = type.decode(stream, res); - if (val !== undefined) { - if (val instanceof $4559ecf940edc78d$export$41705b1d644e0f14) Object.defineProperty(res, key, val); - else res[key] = val; - } - res._currentOffset = stream.pos - res._startOffset; - } - } - size(val, parent, includePointers = true) { - if (val == null) val = {}; - const ctx = { - parent: parent, - val: val, - pointerSize: 0 - }; - if (this.preEncode != null) this.preEncode.call(val); - let size = 0; - for(let key in this.fields){ - const type = this.fields[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - if (includePointers) size += ctx.pointerSize; - return size; - } - encode(stream, val, parent) { - let type; - if (this.preEncode != null) this.preEncode.call(val, stream); - const ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: val, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - for(let key in this.fields){ - type = this.fields[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} - - - -const $fcb208a95f6d048b$var$getPath = (object, pathArray)=>{ - return pathArray.reduce((prevObj, key)=>prevObj && prevObj[key], object); -}; -class $fcb208a95f6d048b$export$95a8b60f4da7dec8 extends (0, $aa8b66bae6abe658$export$eabc71f011df675a) { - constructor(type, versions = {}){ - super(); - this.type = type; - this.versions = versions; - if (typeof type === "string") this.versionPath = type.split("."); - } - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - if (typeof this.type === "string") res.version = $fcb208a95f6d048b$var$getPath(parent, this.versionPath); - else res.version = this.type.decode(stream); - if (this.versions.header) this._parseFields(stream, res, this.versions.header); - const fields = this.versions[res.version]; - if (fields == null) throw new Error(`Unknown version ${res.version}`); - if (fields instanceof $fcb208a95f6d048b$export$95a8b60f4da7dec8) return fields.decode(stream, parent); - this._parseFields(stream, res, fields); - if (this.process != null) this.process.call(res, stream); - return res; - } - size(val, parent, includePointers = true) { - let key, type; - if (!val) throw new Error("Not a fixed size"); - if (this.preEncode != null) this.preEncode.call(val); - const ctx = { - parent: parent, - val: val, - pointerSize: 0 - }; - let size = 0; - if (typeof this.type !== "string") size += this.type.size(val.version, ctx); - if (this.versions.header) for(key in this.versions.header){ - type = this.versions.header[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - const fields = this.versions[val.version]; - if (fields == null) throw new Error(`Unknown version ${val.version}`); - for(key in fields){ - type = fields[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - if (includePointers) size += ctx.pointerSize; - return size; - } - encode(stream, val, parent) { - let key, type; - if (this.preEncode != null) this.preEncode.call(val, stream); - const ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: val, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - if (typeof this.type !== "string") this.type.encode(stream, val.version); - if (this.versions.header) for(key in this.versions.header){ - type = this.versions.header[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - const fields = this.versions[val.version]; - for(key in fields){ - type = fields[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} - - - - -var $92184962f8f0d5e2$exports = {}; - -$parcel$export($92184962f8f0d5e2$exports, "Pointer", () => $92184962f8f0d5e2$export$b56007f12edf0c17); -$parcel$export($92184962f8f0d5e2$exports, "VoidPointer", () => $92184962f8f0d5e2$export$df5cb1f3d04f5a0f); - - -class $92184962f8f0d5e2$export$b56007f12edf0c17 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(offsetType, type, options = {}){ - super(); - this.offsetType = offsetType; - this.type = type; - this.options = options; - if (this.type === "void") this.type = null; - if (this.options.type == null) this.options.type = "local"; - if (this.options.allowNull == null) this.options.allowNull = true; - if (this.options.nullValue == null) this.options.nullValue = 0; - if (this.options.lazy == null) this.options.lazy = false; - if (this.options.relativeTo) { - if (typeof this.options.relativeTo !== "function") throw new Error("relativeTo option must be a function"); - this.relativeToGetter = options.relativeTo; - } - } - decode(stream, ctx) { - const offset = this.offsetType.decode(stream, ctx); - // handle NULL pointers - if (offset === this.options.nullValue && this.options.allowNull) return null; - let relative; - switch(this.options.type){ - case "local": - relative = ctx._startOffset; - break; - case "immediate": - relative = stream.pos - this.offsetType.size(); - break; - case "parent": - relative = ctx.parent._startOffset; - break; - default: - var c = ctx; - while(c.parent)c = c.parent; - relative = c._startOffset || 0; - } - if (this.options.relativeTo) relative += this.relativeToGetter(ctx); - const ptr = offset + relative; - if (this.type != null) { - let val = null; - const decodeValue = ()=>{ - if (val != null) return val; - const { pos: pos } = stream; - stream.pos = ptr; - val = this.type.decode(stream, ctx); - stream.pos = pos; - return val; - }; - // If this is a lazy pointer, define a getter to decode only when needed. - // This obviously only works when the pointer is contained by a Struct. - if (this.options.lazy) return new $4559ecf940edc78d$export$41705b1d644e0f14({ - get: decodeValue - }); - return decodeValue(); - } else return ptr; - } - size(val, ctx) { - const parent = ctx; - switch(this.options.type){ - case "local": - case "immediate": - break; - case "parent": - ctx = ctx.parent; - break; - default: - while(ctx.parent)ctx = ctx.parent; - } - let { type: type } = this; - if (type == null) { - if (!(val instanceof $92184962f8f0d5e2$export$df5cb1f3d04f5a0f)) throw new Error("Must be a VoidPointer"); - ({ type: type } = val); - val = val.value; - } - if (val && ctx) { - // Must be written as two separate lines rather than += in case `type.size` mutates ctx.pointerSize. - let size = type.size(val, parent); - ctx.pointerSize += size; - } - return this.offsetType.size(); - } - encode(stream, val, ctx) { - let relative; - const parent = ctx; - if (val == null) { - this.offsetType.encode(stream, this.options.nullValue); - return; - } - switch(this.options.type){ - case "local": - relative = ctx.startOffset; - break; - case "immediate": - relative = stream.pos + this.offsetType.size(val, parent); - break; - case "parent": - ctx = ctx.parent; - relative = ctx.startOffset; - break; - default: - relative = 0; - while(ctx.parent)ctx = ctx.parent; - } - if (this.options.relativeTo) relative += this.relativeToGetter(parent.val); - this.offsetType.encode(stream, ctx.pointerOffset - relative); - let { type: type } = this; - if (type == null) { - if (!(val instanceof $92184962f8f0d5e2$export$df5cb1f3d04f5a0f)) throw new Error("Must be a VoidPointer"); - ({ type: type } = val); - val = val.value; - } - ctx.pointers.push({ - type: type, - val: val, - parent: parent - }); - return ctx.pointerOffset += type.size(val, parent); - } -} -class $92184962f8f0d5e2$export$df5cb1f3d04f5a0f { - constructor(type, value){ - this.type = type; - this.value = value; - } -} - - -$parcel$exportWildcard(module.exports, $4559ecf940edc78d$exports); -$parcel$exportWildcard(module.exports, $af65abf7bf65ac42$exports); -$parcel$exportWildcard(module.exports, $92184962f8f0d5e2$exports); - - - - -},{}],139:[function(require,module,exports){ -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.prototype = Object.create(Buffer.prototype) - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} - -},{"buffer":36}],140:[function(require,module,exports){ -'use strict'; - -var callBound = require('call-bound'); -var isRegex = require('is-regex'); - -var $exec = callBound('RegExp.prototype.exec'); -var $TypeError = require('es-errors/type'); - -/** @type {import('.')} */ -module.exports = function regexTester(regex) { - if (!isRegex(regex)) { - throw new $TypeError('`regex` must be a RegExp'); - } - return function test(s) { - return $exec(regex, s) !== null; - }; -}; - -},{"call-bound":44,"es-errors/type":91,"is-regex":116}],141:[function(require,module,exports){ -'use strict'; - -var GetIntrinsic = require('get-intrinsic'); -var define = require('define-data-property'); -var hasDescriptors = require('has-property-descriptors')(); -var gOPD = require('gopd'); - -var $TypeError = require('es-errors/type'); -var $floor = GetIntrinsic('%Math.floor%'); - -/** @type {import('.')} */ -module.exports = function setFunctionLength(fn, length) { - if (typeof fn !== 'function') { - throw new $TypeError('`fn` is not a function'); - } - if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { - throw new $TypeError('`length` must be a positive 32-bit integer'); - } - - var loose = arguments.length > 2 && !!arguments[2]; - - var functionLengthIsConfigurable = true; - var functionLengthIsWritable = true; - if ('length' in fn && gOPD) { - var desc = gOPD(fn, 'length'); - if (desc && !desc.configurable) { - functionLengthIsConfigurable = false; - } - if (desc && !desc.writable) { - functionLengthIsWritable = false; - } - } - - if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { - if (hasDescriptors) { - define(/** @type {Parameters[0]} */ (fn), 'length', length, true, true); - } else { - define(/** @type {Parameters[0]} */ (fn), 'length', length); - } - } - return fn; -}; - -},{"define-data-property":82,"es-errors/type":91,"get-intrinsic":100,"gopd":105,"has-property-descriptors":106}],142:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Stream; - -var EE = require('events').EventEmitter; -var inherits = require('inherits'); - -inherits(Stream, EE); -Stream.Readable = require('readable-stream/lib/_stream_readable.js'); -Stream.Writable = require('readable-stream/lib/_stream_writable.js'); -Stream.Duplex = require('readable-stream/lib/_stream_duplex.js'); -Stream.Transform = require('readable-stream/lib/_stream_transform.js'); -Stream.PassThrough = require('readable-stream/lib/_stream_passthrough.js'); -Stream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js') -Stream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js') - -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; - - - -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. - -function Stream() { - EE.call(this); -} - -Stream.prototype.pipe = function(dest, options) { - var source = this; - - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); - } - } - } - - source.on('data', ondata); - - function ondrain() { - if (source.readable && source.resume) { - source.resume(); - } - } - - dest.on('drain', ondrain); - - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); - } - - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; - - dest.end(); - } - - - function onclose() { - if (didOnEnd) return; - didOnEnd = true; - - if (typeof dest.destroy === 'function') dest.destroy(); - } - - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. - } - } - - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); - - source.removeListener('error', onerror); - dest.removeListener('error', onerror); - - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); - - dest.removeListener('close', cleanup); - } - - source.on('end', cleanup); - source.on('close', cleanup); - - dest.on('close', cleanup); - - dest.emit('pipe', source); - - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; - -},{"events":94,"inherits":112,"readable-stream/lib/_stream_duplex.js":144,"readable-stream/lib/_stream_passthrough.js":145,"readable-stream/lib/_stream_readable.js":146,"readable-stream/lib/_stream_transform.js":147,"readable-stream/lib/_stream_writable.js":148,"readable-stream/lib/internal/streams/end-of-stream.js":152,"readable-stream/lib/internal/streams/pipeline.js":154}],143:[function(require,module,exports){ -'use strict'; - -function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } - -var codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error; - } - - function getMessage(arg1, arg2, arg3) { - if (typeof message === 'string') { - return message; - } else { - return message(arg1, arg2, arg3); - } - } - - var NodeError = - /*#__PURE__*/ - function (_Base) { - _inheritsLoose(NodeError, _Base); - - function NodeError(arg1, arg2, arg3) { - return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; - } - - return NodeError; - }(Base); - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - codes[code] = NodeError; -} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js - - -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - var len = expected.length; - expected = expected.map(function (i) { - return String(i); - }); - - if (len > 2) { - return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; - } else if (len === 2) { - return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); - } else { - return "of ".concat(thing, " ").concat(expected[0]); - } - } else { - return "of ".concat(thing, " ").concat(String(expected)); - } -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith - - -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith - - -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - - return str.substring(this_len - search.length, this_len) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes - - -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"'; -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - var determiner; - - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - var msg; - - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } else { - var type = includes(name, '.') ? 'property' : 'argument'; - msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } - - msg += ". Received type ".concat(typeof actual); - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented'; -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg; -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); -module.exports.codes = codes; - -},{}],144:[function(require,module,exports){ -(function (process){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -}; -/**/ - -module.exports = Duplex; -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); -require('inherits')(Duplex, Readable); -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); - -// the no-half-open enforcer -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(onEndNT, this); -} -function onEndNT(self) { - self.end(); -} -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); -}).call(this)}).call(this,require('_process')) -},{"./_stream_readable":146,"./_stream_writable":148,"_process":137,"inherits":112}],145:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; -var Transform = require('./_stream_transform'); -require('inherits')(PassThrough, Transform); -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); -} -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; -},{"./_stream_transform":147,"inherits":112}],146:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -module.exports = Readable; - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = require('events').EventEmitter; -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -var Buffer = require('buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ -var debugUtil = require('util'); -var debug; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; -} -/**/ - -var BufferList = require('./internal/streams/buffer_list'); -var destroyImpl = require('./internal/streams/destroy'); -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; - -// Lazy loaded to improve the startup performance. -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; -require('inherits')(Readable, Stream); -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; - - // Should close be emitted on destroy. Defaults to true. - this.emitClose = options.emitClose !== false; - - // Should .destroy() be called after 'end' (and potentially 'finish') - this.autoDestroy = !!options.autoDestroy; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - if (!(this instanceof Readable)) return new Readable(options); - - // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); - - // legacy - this.readable = true; - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - Stream.call(this); -} -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } - - // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } - return er; -} -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; - // If setEncoding(null), decoder.encoding equals utf8 - this._readableState.encoding = this._readableState.decoder.encoding; - - // Iterate over current buffer to convert already stored Buffers: - var p = this._readableState.buffer.head; - var content = ''; - while (p !== null) { - content += decoder.write(p.data); - p = p.next; - } - this._readableState.buffer.clear(); - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; - -// Don't raise the hwm > 1GB -var MAX_HWM = 0x40000000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - if (ret !== null) this.emit('data', ret); - return ret; -}; -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } -} -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } - - // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } -} -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - return dest; -}; -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; - - // Try start flowing on next tick if stream isn't explicitly paused - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } - } - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - return res; -}; -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - return res; -}; -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; - - // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - // we flow only if there is no one listening - // for readable, but we still have to call - // resume() - state.flowing = !state.readableListening; - resume(this, state); - } - state.paused = false; - return this; -}; -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} -function resume_(stream, state) { - debug('resume', state.reading); - if (!state.reading) { - stream.read(0); - } - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - this._readableState.paused = true; - return this; -}; -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null); -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - return this; -}; -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); - } - return createReadableStreamAsyncIterator(this); - }; -} -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; - } -}); - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); - } - return ret; -} -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); - } -} -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); - - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } - } - } -} -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = require('./internal/streams/from'); - } - return from(Readable, iterable, opts); - }; -} -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/async_iterator":149,"./internal/streams/buffer_list":150,"./internal/streams/destroy":151,"./internal/streams/from":153,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":137,"buffer":36,"events":94,"inherits":112,"string_decoder/":157,"util":21}],147:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; -var _require$codes = require('../errors').codes, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, - ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; -var Duplex = require('./_stream_duplex'); -require('inherits')(Transform, Duplex); -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - if (cb === null) { - return this.emit('error', new ERR_MULTIPLE_CALLBACK()); - } - ts.writechunk = null; - ts.writecb = null; - if (data != null) - // single equals check for both `null` and `undefined` - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} -function prefinish() { - var _this = this; - if (typeof this._flush === 'function' && !this._readableState.destroyed) { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); -}; -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - if (ts.writechunk !== null && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; -Transform.prototype._destroy = function (err, cb) { - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - }); -}; -function done(stream, er, data) { - if (er) return stream.emit('error', er); - if (data != null) - // single equals check for both `null` and `undefined` - stream.push(data); - - // TODO(BridgeAR): Write a test for these two error cases - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); - if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); - return stream.push(null); -} -},{"../errors":143,"./_stream_duplex":144,"inherits":112}],148:[function(require,module,exports){ -(function (process,global){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -var Buffer = require('buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -var destroyImpl = require('./internal/streams/destroy'); -var _require = require('./internal/streams/state'), - getHighWaterMark = _require.getHighWaterMark; -var _require$codes = require('../errors').codes, - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; -var errorOrDestroy = destroyImpl.errorOrDestroy; -require('inherits')(Writable, Stream); -function nop() {} -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || require('./_stream_duplex'); - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // Should close be emitted on destroy. Defaults to true. - this.emitClose = options.emitClose !== false; - - // Should .destroy() be called after 'finish' (and potentially 'end') - this.autoDestroy = !!options.autoDestroy; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); - - // legacy. - this.writable = true; - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; - } - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); - // TODO: defer error events consistently everywhere, not just the cb - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var er; - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); - } - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; - } - return true; -} -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; -}; -Writable.prototype.cork = function () { - this._writableState.corked++; -}; -Writable.prototype.uncork = function () { - var state = this._writableState; - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - return ret; -} -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } -} -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - if (entry === null) state.lastBufferedRequest = null; - } - state.bufferedRequest = entry; - state.bufferProcessing = false; -} -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; -Writable.prototype._writev = null; -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending) endWritable(this, state, cb); - return this; -}; -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - errorOrDestroy(stream, err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); - } - } - } - } - return need; -} -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - - // reuse the free corkReq. - state.corkedRequestsFree.next = corkReq; -} -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - cb(err); -}; -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/destroy":151,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":137,"buffer":36,"inherits":112,"util-deprecate":163}],149:[function(require,module,exports){ -(function (process){(function (){ -'use strict'; - -var _Object$setPrototypeO; -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -var finished = require('./end-of-stream'); -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); -function createIterResult(value, done) { - return { - value: value, - done: done - }; -} -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - if (resolve !== null) { - var data = iter[kStream].read(); - // we defer if data is null - // we can be expecting either 'end' or - // 'error' - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } - } -} -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, - next: function next() { - var _this = this; - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; - if (error !== null) { - return Promise.reject(error); - } - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); - } - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } - - // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - var lastPromise = this[kLastPromise]; - var promise; - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - promise = new Promise(this[kHandlePromise]); - } - this[kLastPromise] = promise; - return promise; - } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; - // reject if we are waiting for data in the Promise - // returned by next() and store the error - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } - iterator[kError] = err; - return; - } - var resolve = iterator[kLastResolve]; - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); - } - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; -}; -module.exports = createReadableStreamAsyncIterator; -}).call(this)}).call(this,require('_process')) -},{"./end-of-stream":152,"_process":137}],150:[function(require,module,exports){ -'use strict'; - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -var _require = require('buffer'), - Buffer = _require.Buffer; -var _require2 = require('util'), - inspect = _require2.inspect; -var custom = inspect && inspect.custom || 'inspect'; -function copyBuffer(src, target, offset) { - Buffer.prototype.copy.call(src, target, offset); -} -module.exports = /*#__PURE__*/function () { - function BufferList() { - _classCallCheck(this, BufferList); - this.head = null; - this.tail = null; - this.length = 0; - } - _createClass(BufferList, [{ - key: "push", - value: function push(v) { - var entry = { - data: v, - next: null - }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - } - }, { - key: "unshift", - value: function unshift(v) { - var entry = { - data: v, - next: this.head - }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - } - }, { - key: "shift", - value: function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - } - }, { - key: "clear", - value: function clear() { - this.head = this.tail = null; - this.length = 0; - } - }, { - key: "join", - value: function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) ret += s + p.data; - return ret; - } - }, { - key: "concat", - value: function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - } - - // Consumes a specified amount of bytes or characters from the buffered data. - }, { - key: "consume", - value: function consume(n, hasStrings) { - var ret; - if (n < this.head.data.length) { - // `slice` is the same for buffers and strings. - ret = this.head.data.slice(0, n); - this.head.data = this.head.data.slice(n); - } else if (n === this.head.data.length) { - // First chunk is a perfect match. - ret = this.shift(); - } else { - // Result spans more than one buffer. - ret = hasStrings ? this._getString(n) : this._getBuffer(n); - } - return ret; - } - }, { - key: "first", - value: function first() { - return this.head.data; - } - - // Consumes a specified amount of characters from the buffered data. - }, { - key: "_getString", - value: function _getString(n) { - var p = this.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - this.length -= c; - return ret; - } - - // Consumes a specified amount of bytes from the buffered data. - }, { - key: "_getBuffer", - value: function _getBuffer(n) { - var ret = Buffer.allocUnsafe(n); - var p = this.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - this.length -= c; - return ret; - } - - // Make sure the linked list only shows the minimal necessary information. - }, { - key: custom, - value: function value(_, options) { - return inspect(this, _objectSpread(_objectSpread({}, options), {}, { - // Only inspect one level. - depth: 0, - // It should not recurse. - customInspect: false - })); - } - }]); - return BufferList; -}(); -},{"buffer":36,"util":21}],151:[function(require,module,exports){ -(function (process){(function (){ -'use strict'; - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); - } - }); - return this; -} -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} -function emitErrorNT(self, err) { - self.emit('error', err); -} -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy -}; -}).call(this)}).call(this,require('_process')) -},{"_process":137}],152:[function(require,module,exports){ -// Ported from https://github.com/mafintosh/end-of-stream with -// permission from the author, Mathias Buus (@mafintosh). - -'use strict'; - -var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE; -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - callback.apply(this, args); - }; -} -function noop() {} -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} -function eos(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once(callback || noop); - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - var onlegacyfinish = function onlegacyfinish() { - if (!stream.writable) onfinish(); - }; - var writableEnded = stream._writableState && stream._writableState.finished; - var onfinish = function onfinish() { - writable = false; - writableEnded = true; - if (!readable) callback.call(stream); - }; - var readableEnded = stream._readableState && stream._readableState.endEmitted; - var onend = function onend() { - readable = false; - readableEnded = true; - if (!writable) callback.call(stream); - }; - var onerror = function onerror(err) { - callback.call(stream, err); - }; - var onclose = function onclose() { - var err; - if (readable && !readableEnded) { - if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - if (writable && !writableEnded) { - if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - }; - var onrequest = function onrequest() { - stream.req.on('finish', onfinish); - }; - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !stream._writableState) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -} -module.exports = eos; -},{"../../../errors":143}],153:[function(require,module,exports){ -module.exports = function () { - throw new Error('Readable.from is not available in the browser') -}; - -},{}],154:[function(require,module,exports){ -// Ported from https://github.com/mafintosh/pump with -// permission from the author, Mathias Buus (@mafintosh). - -'use strict'; - -var eos; -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - callback.apply(void 0, arguments); - }; -} -var _require$codes = require('../../../errors').codes, - ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; -function noop(err) { - // Rethrow the error if it exists to avoid swallowing it - if (err) throw err; -} -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} -function destroyer(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - if (eos === undefined) eos = require('./end-of-stream'); - eos(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; - - // request.destroy just do .end - .abort is what we want - if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') return stream.destroy(); - callback(err || new ERR_STREAM_DESTROYED('pipe')); - }; -} -function call(fn) { - fn(); -} -function pipe(from, to) { - return from.pipe(to); -} -function popCallback(streams) { - if (!streams.length) return noop; - if (typeof streams[streams.length - 1] !== 'function') return noop; - return streams.pop(); -} -function pipeline() { - for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { - streams[_key] = arguments[_key]; - } - var callback = popCallback(streams); - if (Array.isArray(streams[0])) streams = streams[0]; - if (streams.length < 2) { - throw new ERR_MISSING_ARGS('streams'); - } - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -} -module.exports = pipeline; -},{"../../../errors":143,"./end-of-stream":152}],155:[function(require,module,exports){ -'use strict'; - -var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE; -function highWaterMarkFrom(options, isDuplex, duplexKey) { - return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; -} -function getHighWaterMark(state, options, duplexKey, isDuplex) { - var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); - if (hwm != null) { - if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { - var name = isDuplex ? duplexKey : 'highWaterMark'; - throw new ERR_INVALID_OPT_VALUE(name, hwm); - } - return Math.floor(hwm); - } - - // Default value - return state.objectMode ? 16 : 16 * 1024; -} -module.exports = { - getHighWaterMark: getHighWaterMark -}; -},{"../../../errors":143}],156:[function(require,module,exports){ -module.exports = require('events').EventEmitter; - -},{"events":94}],157:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -'use strict'; - -/**/ - -var Buffer = require('safe-buffer').Buffer; -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} -},{"safe-buffer":139}],158:[function(require,module,exports){ -var TINF_OK = 0; -var TINF_DATA_ERROR = -3; - -function Tree() { - this.table = new Uint16Array(16); /* table of code length counts */ - this.trans = new Uint16Array(288); /* code -> symbol translation table */ -} - -function Data(source, dest) { - this.source = source; - this.sourceIndex = 0; - this.tag = 0; - this.bitcount = 0; - - this.dest = dest; - this.destLen = 0; - - this.ltree = new Tree(); /* dynamic length/symbol tree */ - this.dtree = new Tree(); /* dynamic distance tree */ -} - -/* --------------------------------------------------- * - * -- uninitialized global data (static structures) -- * - * --------------------------------------------------- */ - -var sltree = new Tree(); -var sdtree = new Tree(); - -/* extra bits and base tables for length codes */ -var length_bits = new Uint8Array(30); -var length_base = new Uint16Array(30); - -/* extra bits and base tables for distance codes */ -var dist_bits = new Uint8Array(30); -var dist_base = new Uint16Array(30); - -/* special ordering of code length codes */ -var clcidx = new Uint8Array([ - 16, 17, 18, 0, 8, 7, 9, 6, - 10, 5, 11, 4, 12, 3, 13, 2, - 14, 1, 15 -]); - -/* used by tinf_decode_trees, avoids allocations every call */ -var code_tree = new Tree(); -var lengths = new Uint8Array(288 + 32); - -/* ----------------------- * - * -- utility functions -- * - * ----------------------- */ - -/* build extra bits and base tables */ -function tinf_build_bits_base(bits, base, delta, first) { - var i, sum; - - /* build bits table */ - for (i = 0; i < delta; ++i) bits[i] = 0; - for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0; - - /* build base table */ - for (sum = first, i = 0; i < 30; ++i) { - base[i] = sum; - sum += 1 << bits[i]; - } -} - -/* build the fixed huffman trees */ -function tinf_build_fixed_trees(lt, dt) { - var i; - - /* build fixed length tree */ - for (i = 0; i < 7; ++i) lt.table[i] = 0; - - lt.table[7] = 24; - lt.table[8] = 152; - lt.table[9] = 112; - - for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i; - for (i = 0; i < 144; ++i) lt.trans[24 + i] = i; - for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i; - for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i; - - /* build fixed distance tree */ - for (i = 0; i < 5; ++i) dt.table[i] = 0; - - dt.table[5] = 32; - - for (i = 0; i < 32; ++i) dt.trans[i] = i; -} - -/* given an array of code lengths, build a tree */ -var offs = new Uint16Array(16); - -function tinf_build_tree(t, lengths, off, num) { - var i, sum; - - /* clear code length count table */ - for (i = 0; i < 16; ++i) t.table[i] = 0; - - /* scan symbol lengths, and sum code length counts */ - for (i = 0; i < num; ++i) t.table[lengths[off + i]]++; - - t.table[0] = 0; - - /* compute offset table for distribution sort */ - for (sum = 0, i = 0; i < 16; ++i) { - offs[i] = sum; - sum += t.table[i]; - } - - /* create code->symbol translation table (symbols sorted by code) */ - for (i = 0; i < num; ++i) { - if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i; - } -} - -/* ---------------------- * - * -- decode functions -- * - * ---------------------- */ - -/* get one bit from source stream */ -function tinf_getbit(d) { - /* check if tag is empty */ - if (!d.bitcount--) { - /* load next tag */ - d.tag = d.source[d.sourceIndex++]; - d.bitcount = 7; - } - - /* shift bit out of tag */ - var bit = d.tag & 1; - d.tag >>>= 1; - - return bit; -} - -/* read a num bit value from a stream and add base */ -function tinf_read_bits(d, num, base) { - if (!num) - return base; - - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - - var val = d.tag & (0xffff >>> (16 - num)); - d.tag >>>= num; - d.bitcount -= num; - return val + base; -} - -/* given a data stream and a tree, decode a symbol */ -function tinf_decode_symbol(d, t) { - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - - var sum = 0, cur = 0, len = 0; - var tag = d.tag; - - /* get more bits while code value is above sum */ - do { - cur = 2 * cur + (tag & 1); - tag >>>= 1; - ++len; - - sum += t.table[len]; - cur -= t.table[len]; - } while (cur >= 0); - - d.tag = tag; - d.bitcount -= len; - - return t.trans[sum + cur]; -} - -/* given a data stream, decode dynamic trees from it */ -function tinf_decode_trees(d, lt, dt) { - var hlit, hdist, hclen; - var i, num, length; - - /* get 5 bits HLIT (257-286) */ - hlit = tinf_read_bits(d, 5, 257); - - /* get 5 bits HDIST (1-32) */ - hdist = tinf_read_bits(d, 5, 1); - - /* get 4 bits HCLEN (4-19) */ - hclen = tinf_read_bits(d, 4, 4); - - for (i = 0; i < 19; ++i) lengths[i] = 0; - - /* read code lengths for code length alphabet */ - for (i = 0; i < hclen; ++i) { - /* get 3 bits code length (0-7) */ - var clen = tinf_read_bits(d, 3, 0); - lengths[clcidx[i]] = clen; - } - - /* build code length tree */ - tinf_build_tree(code_tree, lengths, 0, 19); - - /* decode code lengths for the dynamic trees */ - for (num = 0; num < hlit + hdist;) { - var sym = tinf_decode_symbol(d, code_tree); - - switch (sym) { - case 16: - /* copy previous code length 3-6 times (read 2 bits) */ - var prev = lengths[num - 1]; - for (length = tinf_read_bits(d, 2, 3); length; --length) { - lengths[num++] = prev; - } - break; - case 17: - /* repeat code length 0 for 3-10 times (read 3 bits) */ - for (length = tinf_read_bits(d, 3, 3); length; --length) { - lengths[num++] = 0; - } - break; - case 18: - /* repeat code length 0 for 11-138 times (read 7 bits) */ - for (length = tinf_read_bits(d, 7, 11); length; --length) { - lengths[num++] = 0; - } - break; - default: - /* values 0-15 represent the actual code lengths */ - lengths[num++] = sym; - break; - } - } - - /* build dynamic trees */ - tinf_build_tree(lt, lengths, 0, hlit); - tinf_build_tree(dt, lengths, hlit, hdist); -} - -/* ----------------------------- * - * -- block inflate functions -- * - * ----------------------------- */ - -/* given a stream and two trees, inflate a block of data */ -function tinf_inflate_block_data(d, lt, dt) { - while (1) { - var sym = tinf_decode_symbol(d, lt); - - /* check for end of block */ - if (sym === 256) { - return TINF_OK; - } - - if (sym < 256) { - d.dest[d.destLen++] = sym; - } else { - var length, dist, offs; - var i; - - sym -= 257; - - /* possibly get more bits from length code */ - length = tinf_read_bits(d, length_bits[sym], length_base[sym]); - - dist = tinf_decode_symbol(d, dt); - - /* possibly get more bits from distance code */ - offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); - - /* copy match */ - for (i = offs; i < offs + length; ++i) { - d.dest[d.destLen++] = d.dest[i]; - } - } - } -} - -/* inflate an uncompressed block of data */ -function tinf_inflate_uncompressed_block(d) { - var length, invlength; - var i; - - /* unread from bitbuffer */ - while (d.bitcount > 8) { - d.sourceIndex--; - d.bitcount -= 8; - } - - /* get length */ - length = d.source[d.sourceIndex + 1]; - length = 256 * length + d.source[d.sourceIndex]; - - /* get one's complement of length */ - invlength = d.source[d.sourceIndex + 3]; - invlength = 256 * invlength + d.source[d.sourceIndex + 2]; - - /* check length */ - if (length !== (~invlength & 0x0000ffff)) - return TINF_DATA_ERROR; - - d.sourceIndex += 4; - - /* copy block */ - for (i = length; i; --i) - d.dest[d.destLen++] = d.source[d.sourceIndex++]; - - /* make sure we start next block on a byte boundary */ - d.bitcount = 0; - - return TINF_OK; -} - -/* inflate stream from source to dest */ -function tinf_uncompress(source, dest) { - var d = new Data(source, dest); - var bfinal, btype, res; - - do { - /* read final block flag */ - bfinal = tinf_getbit(d); - - /* read block type (2 bits) */ - btype = tinf_read_bits(d, 2, 0); - - /* decompress block */ - switch (btype) { - case 0: - /* decompress uncompressed block */ - res = tinf_inflate_uncompressed_block(d); - break; - case 1: - /* decompress block with fixed huffman trees */ - res = tinf_inflate_block_data(d, sltree, sdtree); - break; - case 2: - /* decompress block with dynamic huffman trees */ - tinf_decode_trees(d, d.ltree, d.dtree); - res = tinf_inflate_block_data(d, d.ltree, d.dtree); - break; - default: - res = TINF_DATA_ERROR; - } - - if (res !== TINF_OK) - throw new Error('Data error'); - - } while (!bfinal); - - if (d.destLen < d.dest.length) { - if (typeof d.dest.slice === 'function') - return d.dest.slice(0, d.destLen); - else - return d.dest.subarray(0, d.destLen); - } - - return d.dest; -} - -/* -------------------- * - * -- initialization -- * - * -------------------- */ - -/* build fixed huffman trees */ -tinf_build_fixed_trees(sltree, sdtree); - -/* build extra bits and base tables */ -tinf_build_bits_base(length_bits, length_base, 4, 3); -tinf_build_bits_base(dist_bits, dist_base, 2, 1); - -/* fix a special case */ -length_bits[28] = 0; -length_base[28] = 258; - -module.exports = tinf_uncompress; - -},{}],159:[function(require,module,exports){ -(function (global){(function (){ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global global, define, Symbol, Reflect, Promise, SuppressedError, Iterator */ -var __extends; -var __assign; -var __rest; -var __decorate; -var __param; -var __esDecorate; -var __runInitializers; -var __propKey; -var __setFunctionName; -var __metadata; -var __awaiter; -var __generator; -var __exportStar; -var __values; -var __read; -var __spread; -var __spreadArrays; -var __spreadArray; -var __await; -var __asyncGenerator; -var __asyncDelegator; -var __asyncValues; -var __makeTemplateObject; -var __importStar; -var __importDefault; -var __classPrivateFieldGet; -var __classPrivateFieldSet; -var __classPrivateFieldIn; -var __createBinding; -var __addDisposableResource; -var __disposeResources; -var __rewriteRelativeImportExtension; -(function (factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); - } - else if (typeof module === "object" && typeof module.exports === "object") { - factory(createExporter(root, createExporter(module.exports))); - } - else { - factory(createExporter(root)); - } - function createExporter(exports, previous) { - if (exports !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports, "__esModule", { value: true }); - } - else { - exports.__esModule = true; - } - } - return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; - } -}) -(function (exporter) { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - - __extends = function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - - __assign = Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - - __rest = function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; - }; - - __decorate = function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - }; - - __param = function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } - }; - - __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } - else if (_ = accept(result)) { - if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; - }; - - __runInitializers = function (thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : void 0; - }; - - __propKey = function (x) { - return typeof x === "symbol" ? x : "".concat(x); - }; - - __setFunctionName = function (f, name, prefix) { - if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); - }; - - __metadata = function (metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); - }; - - __awaiter = function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - - __generator = function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - - __exportStar = function(m, o) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); - }; - - __createBinding = Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - }); - - __values = function (o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - - __read = function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - - /** @deprecated */ - __spread = function () { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - }; - - /** @deprecated */ - __spreadArrays = function () { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - }; - - __spreadArray = function (to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - }; - - __await = function (v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - }; - - __asyncGenerator = function (thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; - function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } - function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } - }; - - __asyncDelegator = function (o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } - }; - - __asyncValues = function (o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } - }; - - __makeTemplateObject = function (cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; - }; - - var __setModuleDefault = Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - }) : function(o, v) { - o["default"] = v; - }; - - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - - __importStar = function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; - - __importDefault = function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - - __classPrivateFieldGet = function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - - __classPrivateFieldSet = function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; - }; - - __classPrivateFieldIn = function (state, receiver) { - if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); - }; - - __addDisposableResource = function (env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; - }; - - var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; - }; - - __disposeResources = function (env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); - }; - - __rewriteRelativeImportExtension = function (path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); - }); - } - return path; - }; - - exporter("__extends", __extends); - exporter("__assign", __assign); - exporter("__rest", __rest); - exporter("__decorate", __decorate); - exporter("__param", __param); - exporter("__esDecorate", __esDecorate); - exporter("__runInitializers", __runInitializers); - exporter("__propKey", __propKey); - exporter("__setFunctionName", __setFunctionName); - exporter("__metadata", __metadata); - exporter("__awaiter", __awaiter); - exporter("__generator", __generator); - exporter("__exportStar", __exportStar); - exporter("__createBinding", __createBinding); - exporter("__values", __values); - exporter("__read", __read); - exporter("__spread", __spread); - exporter("__spreadArrays", __spreadArrays); - exporter("__spreadArray", __spreadArray); - exporter("__await", __await); - exporter("__asyncGenerator", __asyncGenerator); - exporter("__asyncDelegator", __asyncDelegator); - exporter("__asyncValues", __asyncValues); - exporter("__makeTemplateObject", __makeTemplateObject); - exporter("__importStar", __importStar); - exporter("__importDefault", __importDefault); - exporter("__classPrivateFieldGet", __classPrivateFieldGet); - exporter("__classPrivateFieldSet", __classPrivateFieldSet); - exporter("__classPrivateFieldIn", __classPrivateFieldIn); - exporter("__addDisposableResource", __addDisposableResource); - exporter("__disposeResources", __disposeResources); - exporter("__rewriteRelativeImportExtension", __rewriteRelativeImportExtension); -}); - -0 && (module.exports = { - __extends: __extends, - __assign: __assign, - __rest: __rest, - __decorate: __decorate, - __param: __param, - __esDecorate: __esDecorate, - __runInitializers: __runInitializers, - __propKey: __propKey, - __setFunctionName: __setFunctionName, - __metadata: __metadata, - __awaiter: __awaiter, - __generator: __generator, - __exportStar: __exportStar, - __createBinding: __createBinding, - __values: __values, - __read: __read, - __spread: __spread, - __spreadArrays: __spreadArrays, - __spreadArray: __spreadArray, - __await: __await, - __asyncGenerator: __asyncGenerator, - __asyncDelegator: __asyncDelegator, - __asyncValues: __asyncValues, - __makeTemplateObject: __makeTemplateObject, - __importStar: __importStar, - __importDefault: __importDefault, - __classPrivateFieldGet: __classPrivateFieldGet, - __classPrivateFieldSet: __classPrivateFieldSet, - __classPrivateFieldIn: __classPrivateFieldIn, - __addDisposableResource: __addDisposableResource, - __disposeResources: __disposeResources, - __rewriteRelativeImportExtension: __rewriteRelativeImportExtension, -}); - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],160:[function(require,module,exports){ -var $c5L0i$base64js = require("base64-js"); -var $c5L0i$unicodetrie = require("unicode-trie"); - -function $parcel$interopDefault(a) { - return a && a.__esModule ? a.default : a; -} -function $parcel$defineInteropFlag(a) { - Object.defineProperty(a, '__esModule', {value: true, configurable: true}); -} -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -$parcel$defineInteropFlag(module.exports); - -$parcel$export(module.exports, "getCategory", () => $43d7963e56408b24$export$410364bbb673ddbc); -$parcel$export(module.exports, "getCombiningClass", () => $43d7963e56408b24$export$c03b919c6651ed55); -$parcel$export(module.exports, "getScript", () => $43d7963e56408b24$export$941569448d136665); -$parcel$export(module.exports, "getEastAsianWidth", () => $43d7963e56408b24$export$92f6187db8ca6d26); -$parcel$export(module.exports, "getNumericValue", () => $43d7963e56408b24$export$7d1258ebb7625a0d); -$parcel$export(module.exports, "isAlphabetic", () => $43d7963e56408b24$export$52c8ea63abd07594); -$parcel$export(module.exports, "isDigit", () => $43d7963e56408b24$export$727d9dbc4fbb948f); -$parcel$export(module.exports, "isPunctuation", () => $43d7963e56408b24$export$a5b49f4dc6a07d2c); -$parcel$export(module.exports, "isLowerCase", () => $43d7963e56408b24$export$7b6804e8df61fcf5); -$parcel$export(module.exports, "isUpperCase", () => $43d7963e56408b24$export$aebd617640818cda); -$parcel$export(module.exports, "isTitleCase", () => $43d7963e56408b24$export$de8b4ee23b2cf823); -$parcel$export(module.exports, "isWhiteSpace", () => $43d7963e56408b24$export$3c52dd84024ae72c); -$parcel$export(module.exports, "isBaseForm", () => $43d7963e56408b24$export$a11bdcffe109e74b); -$parcel$export(module.exports, "isMark", () => $43d7963e56408b24$export$e33ad6871e762338); -$parcel$export(module.exports, "default", () => $43d7963e56408b24$export$2e2bcd8739ae039); - - -var $29668e65f2091c2c$exports = {}; -$29668e65f2091c2c$exports = JSON.parse('{"categories":["Cc","Zs","Po","Sc","Ps","Pe","Sm","Pd","Nd","Lu","Sk","Pc","Ll","So","Lo","Pi","Cf","No","Pf","Lt","Lm","Mn","Me","Mc","Nl","Zl","Zp","Cs","Co"],"combiningClasses":["Not_Reordered","Above","Above_Right","Below","Attached_Above_Right","Attached_Below","Overlay","Iota_Subscript","Double_Below","Double_Above","Below_Right","Above_Left","CCC10","CCC11","CCC12","CCC13","CCC14","CCC15","CCC16","CCC17","CCC18","CCC19","CCC20","CCC21","CCC22","CCC23","CCC24","CCC25","CCC30","CCC31","CCC32","CCC27","CCC28","CCC29","CCC33","CCC34","CCC35","CCC36","Nukta","Virama","CCC84","CCC91","CCC103","CCC107","CCC118","CCC122","CCC129","CCC130","CCC132","Attached_Above","Below_Left","Left","Kana_Voicing","CCC26","Right"],"scripts":["Common","Latin","Bopomofo","Inherited","Greek","Coptic","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Nko","Samaritan","Mandaic","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul","Ethiopic","Cherokee","Canadian_Aboriginal","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer","Mongolian","Limbu","Tai_Le","New_Tai_Lue","Buginese","Tai_Tham","Balinese","Sundanese","Batak","Lepcha","Ol_Chiki","Braille","Glagolitic","Tifinagh","Han","Hiragana","Katakana","Yi","Lisu","Vai","Bamum","Syloti_Nagri","Phags_Pa","Saurashtra","Kayah_Li","Rejang","Javanese","Cham","Tai_Viet","Meetei_Mayek","null","Linear_B","Lycian","Carian","Old_Italic","Gothic","Old_Permic","Ugaritic","Old_Persian","Deseret","Shavian","Osmanya","Osage","Elbasan","Caucasian_Albanian","Linear_A","Cypriot","Imperial_Aramaic","Palmyrene","Nabataean","Hatran","Phoenician","Lydian","Meroitic_Hieroglyphs","Meroitic_Cursive","Kharoshthi","Old_South_Arabian","Old_North_Arabian","Manichaean","Avestan","Inscriptional_Parthian","Inscriptional_Pahlavi","Psalter_Pahlavi","Old_Turkic","Old_Hungarian","Hanifi_Rohingya","Old_Sogdian","Sogdian","Elymaic","Brahmi","Kaithi","Sora_Sompeng","Chakma","Mahajani","Sharada","Khojki","Multani","Khudawadi","Grantha","Newa","Tirhuta","Siddham","Modi","Takri","Ahom","Dogra","Warang_Citi","Nandinagari","Zanabazar_Square","Soyombo","Pau_Cin_Hau","Bhaiksuki","Marchen","Masaram_Gondi","Gunjala_Gondi","Makasar","Cuneiform","Egyptian_Hieroglyphs","Anatolian_Hieroglyphs","Mro","Bassa_Vah","Pahawh_Hmong","Medefaidrin","Miao","Tangut","Nushu","Duployan","SignWriting","Nyiakeng_Puachue_Hmong","Wancho","Mende_Kikakui","Adlam"],"eaw":["N","Na","A","W","H","F"]}'); - - -const $43d7963e56408b24$var$trie = new (0, ($parcel$interopDefault($c5L0i$unicodetrie)))((0, ($parcel$interopDefault($c5L0i$base64js))).toByteArray("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")); -const $43d7963e56408b24$var$log2 = Math.log2 || ((n)=>Math.log(n) / Math.LN2); -const $43d7963e56408b24$var$bits = (n)=>$43d7963e56408b24$var$log2(n) + 1 | 0; -// compute the number of bits stored for each field -const $43d7963e56408b24$var$CATEGORY_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories.length - 1); -const $43d7963e56408b24$var$COMBINING_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses.length - 1); -const $43d7963e56408b24$var$SCRIPT_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts.length - 1); -const $43d7963e56408b24$var$EAW_BITS = $43d7963e56408b24$var$bits((0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw.length - 1); -const $43d7963e56408b24$var$NUMBER_BITS = 10; -// compute shift and mask values for each field -const $43d7963e56408b24$var$CATEGORY_SHIFT = $43d7963e56408b24$var$COMBINING_BITS + $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS; -const $43d7963e56408b24$var$COMBINING_SHIFT = $43d7963e56408b24$var$SCRIPT_BITS + $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS; -const $43d7963e56408b24$var$SCRIPT_SHIFT = $43d7963e56408b24$var$EAW_BITS + $43d7963e56408b24$var$NUMBER_BITS; -const $43d7963e56408b24$var$EAW_SHIFT = $43d7963e56408b24$var$NUMBER_BITS; -const $43d7963e56408b24$var$CATEGORY_MASK = (1 << $43d7963e56408b24$var$CATEGORY_BITS) - 1; -const $43d7963e56408b24$var$COMBINING_MASK = (1 << $43d7963e56408b24$var$COMBINING_BITS) - 1; -const $43d7963e56408b24$var$SCRIPT_MASK = (1 << $43d7963e56408b24$var$SCRIPT_BITS) - 1; -const $43d7963e56408b24$var$EAW_MASK = (1 << $43d7963e56408b24$var$EAW_BITS) - 1; -const $43d7963e56408b24$var$NUMBER_MASK = (1 << $43d7963e56408b24$var$NUMBER_BITS) - 1; -function $43d7963e56408b24$export$410364bbb673ddbc(codePoint) { - const val = $43d7963e56408b24$var$trie.get(codePoint); - return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).categories[val >> $43d7963e56408b24$var$CATEGORY_SHIFT & $43d7963e56408b24$var$CATEGORY_MASK]; -} -function $43d7963e56408b24$export$c03b919c6651ed55(codePoint) { - const val = $43d7963e56408b24$var$trie.get(codePoint); - return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).combiningClasses[val >> $43d7963e56408b24$var$COMBINING_SHIFT & $43d7963e56408b24$var$COMBINING_MASK]; -} -function $43d7963e56408b24$export$941569448d136665(codePoint) { - const val = $43d7963e56408b24$var$trie.get(codePoint); - return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).scripts[val >> $43d7963e56408b24$var$SCRIPT_SHIFT & $43d7963e56408b24$var$SCRIPT_MASK]; -} -function $43d7963e56408b24$export$92f6187db8ca6d26(codePoint) { - const val = $43d7963e56408b24$var$trie.get(codePoint); - return (0, (/*@__PURE__*/$parcel$interopDefault($29668e65f2091c2c$exports))).eaw[val >> $43d7963e56408b24$var$EAW_SHIFT & $43d7963e56408b24$var$EAW_MASK]; -} -function $43d7963e56408b24$export$7d1258ebb7625a0d(codePoint) { - let val = $43d7963e56408b24$var$trie.get(codePoint); - let num = val & $43d7963e56408b24$var$NUMBER_MASK; - if (num === 0) return null; - else if (num <= 50) return num - 1; - else if (num < 0x1e0) { - const numerator = (num >> 4) - 12; - const denominator = (num & 0xf) + 1; - return numerator / denominator; - } else if (num < 0x300) { - val = (num >> 5) - 14; - let exp = (num & 0x1f) + 2; - while(exp > 0){ - val *= 10; - exp--; - } - return val; - } else { - val = (num >> 2) - 0xbf; - let exp = (num & 3) + 1; - while(exp > 0){ - val *= 60; - exp--; - } - return val; - } -} -function $43d7963e56408b24$export$52c8ea63abd07594(codePoint) { - const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint); - return category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Nl"; -} -function $43d7963e56408b24$export$727d9dbc4fbb948f(codePoint) { - return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Nd"; -} -function $43d7963e56408b24$export$a5b49f4dc6a07d2c(codePoint) { - const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint); - return category === "Pc" || category === "Pd" || category === "Pe" || category === "Pf" || category === "Pi" || category === "Po" || category === "Ps"; -} -function $43d7963e56408b24$export$7b6804e8df61fcf5(codePoint) { - return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Ll"; -} -function $43d7963e56408b24$export$aebd617640818cda(codePoint) { - return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Lu"; -} -function $43d7963e56408b24$export$de8b4ee23b2cf823(codePoint) { - return $43d7963e56408b24$export$410364bbb673ddbc(codePoint) === "Lt"; -} -function $43d7963e56408b24$export$3c52dd84024ae72c(codePoint) { - const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint); - return category === "Zs" || category === "Zl" || category === "Zp"; -} -function $43d7963e56408b24$export$a11bdcffe109e74b(codePoint) { - const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint); - return category === "Nd" || category === "No" || category === "Nl" || category === "Lu" || category === "Ll" || category === "Lt" || category === "Lm" || category === "Lo" || category === "Me" || category === "Mc"; -} -function $43d7963e56408b24$export$e33ad6871e762338(codePoint) { - const category = $43d7963e56408b24$export$410364bbb673ddbc(codePoint); - return category === "Mn" || category === "Me" || category === "Mc"; -} -var // Backwards compatibility. -$43d7963e56408b24$export$2e2bcd8739ae039 = { - getCategory: $43d7963e56408b24$export$410364bbb673ddbc, - getCombiningClass: $43d7963e56408b24$export$c03b919c6651ed55, - getScript: $43d7963e56408b24$export$941569448d136665, - getEastAsianWidth: $43d7963e56408b24$export$92f6187db8ca6d26, - getNumericValue: $43d7963e56408b24$export$7d1258ebb7625a0d, - isAlphabetic: $43d7963e56408b24$export$52c8ea63abd07594, - isDigit: $43d7963e56408b24$export$727d9dbc4fbb948f, - isPunctuation: $43d7963e56408b24$export$a5b49f4dc6a07d2c, - isLowerCase: $43d7963e56408b24$export$7b6804e8df61fcf5, - isUpperCase: $43d7963e56408b24$export$aebd617640818cda, - isTitleCase: $43d7963e56408b24$export$de8b4ee23b2cf823, - isWhiteSpace: $43d7963e56408b24$export$3c52dd84024ae72c, - isBaseForm: $43d7963e56408b24$export$a11bdcffe109e74b, - isMark: $43d7963e56408b24$export$e33ad6871e762338 -}; - - - - -},{"base64-js":9,"unicode-trie":161}],161:[function(require,module,exports){ -const inflate = require('tiny-inflate'); -const { swap32LE } = require('./swap'); - -// Shift size for getting the index-1 table offset. -const SHIFT_1 = 6 + 5; - -// Shift size for getting the index-2 table offset. -const SHIFT_2 = 5; - -// Difference between the two shift sizes, -// for getting an index-1 offset from an index-2 offset. 6=11-5 -const SHIFT_1_2 = SHIFT_1 - SHIFT_2; - -// Number of index-1 entries for the BMP. 32=0x20 -// This part of the index-1 table is omitted from the serialized form. -const OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1; - -// Number of entries in an index-2 block. 64=0x40 -const INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2; - -// Mask for getting the lower bits for the in-index-2-block offset. */ -const INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1; - -// Shift size for shifting left the index array values. -// Increases possible data size with 16-bit index values at the cost -// of compactability. -// This requires data blocks to be aligned by DATA_GRANULARITY. -const INDEX_SHIFT = 2; - -// Number of entries in a data block. 32=0x20 -const DATA_BLOCK_LENGTH = 1 << SHIFT_2; - -// Mask for getting the lower bits for the in-data-block offset. -const DATA_MASK = DATA_BLOCK_LENGTH - 1; - -// The part of the index-2 table for U+D800..U+DBFF stores values for -// lead surrogate code _units_ not code _points_. -// Values for lead surrogate code _points_ are indexed with this portion of the table. -// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.) -const LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2; -const LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2; - -// Count the lengths of both BMP pieces. 2080=0x820 -const INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH; - -// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820. -// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2. -const UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH; -const UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8 - -// The index-1 table, only used for supplementary code points, at offset 2112=0x840. -// Variable length, for code points up to highStart, where the last single-value range starts. -// Maximum length 512=0x200=0x100000>>SHIFT_1. -// (For 0x100000 supplementary code points U+10000..U+10ffff.) -// -// The part of the index-2 table for supplementary code points starts -// after this index-1 table. -// -// Both the index-1 table and the following part of the index-2 table -// are omitted completely if there is only BMP data. -const INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH; - -// The alignment size of a data block. Also the granularity for compaction. -const DATA_GRANULARITY = 1 << INDEX_SHIFT; - -class UnicodeTrie { - constructor(data) { - const isBuffer = (typeof data.readUInt32BE === 'function') && (typeof data.slice === 'function'); - - if (isBuffer || data instanceof Uint8Array) { - // read binary format - let uncompressedLength; - if (isBuffer) { - this.highStart = data.readUInt32LE(0); - this.errorValue = data.readUInt32LE(4); - uncompressedLength = data.readUInt32LE(8); - data = data.slice(12); - } else { - const view = new DataView(data.buffer); - this.highStart = view.getUint32(0, true); - this.errorValue = view.getUint32(4, true); - uncompressedLength = view.getUint32(8, true); - data = data.subarray(12); - } - - // double inflate the actual trie data - data = inflate(data, new Uint8Array(uncompressedLength)); - data = inflate(data, new Uint8Array(uncompressedLength)); - - // swap bytes from little-endian - swap32LE(data); - - this.data = new Uint32Array(data.buffer); - - } else { - // pre-parsed data - ({ data: this.data, highStart: this.highStart, errorValue: this.errorValue } = data); - } - } - - get(codePoint) { - let index; - if ((codePoint < 0) || (codePoint > 0x10ffff)) { - return this.errorValue; - } - - if ((codePoint < 0xd800) || ((codePoint > 0xdbff) && (codePoint <= 0xffff))) { - // Ordinary BMP code point, excluding leading surrogates. - // BMP uses a single level lookup. BMP index starts at offset 0 in the index. - // data is stored in the index array itself. - index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK); - return this.data[index]; - } - - if (codePoint <= 0xffff) { - // Lead Surrogate Code Point. A Separate index section is stored for - // lead surrogate code units and code points. - // The main index has the code unit data. - // For this function, we need the code point data. - index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK); - return this.data[index]; - } - - if (codePoint < this.highStart) { - // Supplemental code point, use two-level lookup. - index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)]; - index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)]; - index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK); - return this.data[index]; - } - - return this.data[this.data.length - DATA_GRANULARITY]; - } -} - -module.exports = UnicodeTrie; -},{"./swap":162,"tiny-inflate":158}],162:[function(require,module,exports){ -const isBigEndian = (new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12); - -const swap = (b, n, m) => { - let i = b[n]; - b[n] = b[m]; - b[m] = i; -}; - -const swap32 = array => { - const len = array.length; - for (let i = 0; i < len; i += 4) { - swap(array, i, i + 3); - swap(array, i + 1, i + 2); - } -}; - -const swap32LE = array => { - if (isBigEndian) { - swap32(array); - } -}; - -module.exports = { - swap32LE: swap32LE -}; - -},{}],163:[function(require,module,exports){ -(function (global){(function (){ - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; - } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],164:[function(require,module,exports){ -arguments[4][6][0].apply(exports,arguments) -},{"dup":6}],165:[function(require,module,exports){ -// Currently in sync with Node.js lib/internal/util/types.js -// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9 - -'use strict'; - -var isArgumentsObject = require('is-arguments'); -var isGeneratorFunction = require('is-generator-function'); -var whichTypedArray = require('which-typed-array'); -var isTypedArray = require('is-typed-array'); - -function uncurryThis(f) { - return f.call.bind(f); -} - -var BigIntSupported = typeof BigInt !== 'undefined'; -var SymbolSupported = typeof Symbol !== 'undefined'; - -var ObjectToString = uncurryThis(Object.prototype.toString); - -var numberValue = uncurryThis(Number.prototype.valueOf); -var stringValue = uncurryThis(String.prototype.valueOf); -var booleanValue = uncurryThis(Boolean.prototype.valueOf); - -if (BigIntSupported) { - var bigIntValue = uncurryThis(BigInt.prototype.valueOf); -} - -if (SymbolSupported) { - var symbolValue = uncurryThis(Symbol.prototype.valueOf); -} - -function checkBoxedPrimitive(value, prototypeValueOf) { - if (typeof value !== 'object') { - return false; - } - try { - prototypeValueOf(value); - return true; - } catch(e) { - return false; - } -} - -exports.isArgumentsObject = isArgumentsObject; -exports.isGeneratorFunction = isGeneratorFunction; -exports.isTypedArray = isTypedArray; - -// Taken from here and modified for better browser support -// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js -function isPromise(input) { - return ( - ( - typeof Promise !== 'undefined' && - input instanceof Promise - ) || - ( - input !== null && - typeof input === 'object' && - typeof input.then === 'function' && - typeof input.catch === 'function' - ) - ); -} -exports.isPromise = isPromise; - -function isArrayBufferView(value) { - if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { - return ArrayBuffer.isView(value); - } - - return ( - isTypedArray(value) || - isDataView(value) - ); -} -exports.isArrayBufferView = isArrayBufferView; - - -function isUint8Array(value) { - return whichTypedArray(value) === 'Uint8Array'; -} -exports.isUint8Array = isUint8Array; - -function isUint8ClampedArray(value) { - return whichTypedArray(value) === 'Uint8ClampedArray'; -} -exports.isUint8ClampedArray = isUint8ClampedArray; - -function isUint16Array(value) { - return whichTypedArray(value) === 'Uint16Array'; -} -exports.isUint16Array = isUint16Array; - -function isUint32Array(value) { - return whichTypedArray(value) === 'Uint32Array'; -} -exports.isUint32Array = isUint32Array; - -function isInt8Array(value) { - return whichTypedArray(value) === 'Int8Array'; -} -exports.isInt8Array = isInt8Array; - -function isInt16Array(value) { - return whichTypedArray(value) === 'Int16Array'; -} -exports.isInt16Array = isInt16Array; - -function isInt32Array(value) { - return whichTypedArray(value) === 'Int32Array'; -} -exports.isInt32Array = isInt32Array; - -function isFloat32Array(value) { - return whichTypedArray(value) === 'Float32Array'; -} -exports.isFloat32Array = isFloat32Array; - -function isFloat64Array(value) { - return whichTypedArray(value) === 'Float64Array'; -} -exports.isFloat64Array = isFloat64Array; - -function isBigInt64Array(value) { - return whichTypedArray(value) === 'BigInt64Array'; -} -exports.isBigInt64Array = isBigInt64Array; - -function isBigUint64Array(value) { - return whichTypedArray(value) === 'BigUint64Array'; -} -exports.isBigUint64Array = isBigUint64Array; - -function isMapToString(value) { - return ObjectToString(value) === '[object Map]'; -} -isMapToString.working = ( - typeof Map !== 'undefined' && - isMapToString(new Map()) -); - -function isMap(value) { - if (typeof Map === 'undefined') { - return false; - } - - return isMapToString.working - ? isMapToString(value) - : value instanceof Map; -} -exports.isMap = isMap; - -function isSetToString(value) { - return ObjectToString(value) === '[object Set]'; -} -isSetToString.working = ( - typeof Set !== 'undefined' && - isSetToString(new Set()) -); -function isSet(value) { - if (typeof Set === 'undefined') { - return false; - } - - return isSetToString.working - ? isSetToString(value) - : value instanceof Set; -} -exports.isSet = isSet; - -function isWeakMapToString(value) { - return ObjectToString(value) === '[object WeakMap]'; -} -isWeakMapToString.working = ( - typeof WeakMap !== 'undefined' && - isWeakMapToString(new WeakMap()) -); -function isWeakMap(value) { - if (typeof WeakMap === 'undefined') { - return false; - } - - return isWeakMapToString.working - ? isWeakMapToString(value) - : value instanceof WeakMap; -} -exports.isWeakMap = isWeakMap; - -function isWeakSetToString(value) { - return ObjectToString(value) === '[object WeakSet]'; -} -isWeakSetToString.working = ( - typeof WeakSet !== 'undefined' && - isWeakSetToString(new WeakSet()) -); -function isWeakSet(value) { - return isWeakSetToString(value); -} -exports.isWeakSet = isWeakSet; - -function isArrayBufferToString(value) { - return ObjectToString(value) === '[object ArrayBuffer]'; -} -isArrayBufferToString.working = ( - typeof ArrayBuffer !== 'undefined' && - isArrayBufferToString(new ArrayBuffer()) -); -function isArrayBuffer(value) { - if (typeof ArrayBuffer === 'undefined') { - return false; - } - - return isArrayBufferToString.working - ? isArrayBufferToString(value) - : value instanceof ArrayBuffer; -} -exports.isArrayBuffer = isArrayBuffer; - -function isDataViewToString(value) { - return ObjectToString(value) === '[object DataView]'; -} -isDataViewToString.working = ( - typeof ArrayBuffer !== 'undefined' && - typeof DataView !== 'undefined' && - isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1)) -); -function isDataView(value) { - if (typeof DataView === 'undefined') { - return false; - } - - return isDataViewToString.working - ? isDataViewToString(value) - : value instanceof DataView; -} -exports.isDataView = isDataView; - -// Store a copy of SharedArrayBuffer in case it's deleted elsewhere -var SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined; -function isSharedArrayBufferToString(value) { - return ObjectToString(value) === '[object SharedArrayBuffer]'; -} -function isSharedArrayBuffer(value) { - if (typeof SharedArrayBufferCopy === 'undefined') { - return false; - } - - if (typeof isSharedArrayBufferToString.working === 'undefined') { - isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy()); - } - - return isSharedArrayBufferToString.working - ? isSharedArrayBufferToString(value) - : value instanceof SharedArrayBufferCopy; -} -exports.isSharedArrayBuffer = isSharedArrayBuffer; - -function isAsyncFunction(value) { - return ObjectToString(value) === '[object AsyncFunction]'; -} -exports.isAsyncFunction = isAsyncFunction; - -function isMapIterator(value) { - return ObjectToString(value) === '[object Map Iterator]'; -} -exports.isMapIterator = isMapIterator; - -function isSetIterator(value) { - return ObjectToString(value) === '[object Set Iterator]'; -} -exports.isSetIterator = isSetIterator; - -function isGeneratorObject(value) { - return ObjectToString(value) === '[object Generator]'; -} -exports.isGeneratorObject = isGeneratorObject; - -function isWebAssemblyCompiledModule(value) { - return ObjectToString(value) === '[object WebAssembly.Module]'; -} -exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule; - -function isNumberObject(value) { - return checkBoxedPrimitive(value, numberValue); -} -exports.isNumberObject = isNumberObject; - -function isStringObject(value) { - return checkBoxedPrimitive(value, stringValue); -} -exports.isStringObject = isStringObject; - -function isBooleanObject(value) { - return checkBoxedPrimitive(value, booleanValue); -} -exports.isBooleanObject = isBooleanObject; - -function isBigIntObject(value) { - return BigIntSupported && checkBoxedPrimitive(value, bigIntValue); -} -exports.isBigIntObject = isBigIntObject; - -function isSymbolObject(value) { - return SymbolSupported && checkBoxedPrimitive(value, symbolValue); -} -exports.isSymbolObject = isSymbolObject; - -function isBoxedPrimitive(value) { - return ( - isNumberObject(value) || - isStringObject(value) || - isBooleanObject(value) || - isBigIntObject(value) || - isSymbolObject(value) - ); -} -exports.isBoxedPrimitive = isBoxedPrimitive; - -function isAnyArrayBuffer(value) { - return typeof Uint8Array !== 'undefined' && ( - isArrayBuffer(value) || - isSharedArrayBuffer(value) - ); -} -exports.isAnyArrayBuffer = isAnyArrayBuffer; - -['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) { - Object.defineProperty(exports, method, { - enumerable: false, - value: function() { - throw new Error(method + ' is not supported in userland'); - } - }); -}); - -},{"is-arguments":113,"is-generator-function":115,"is-typed-array":117,"which-typed-array":167}],166:[function(require,module,exports){ -(function (process){(function (){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || - function getOwnPropertyDescriptors(obj) { - var keys = Object.keys(obj); - var descriptors = {}; - for (var i = 0; i < keys.length; i++) { - descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]); - } - return descriptors; - }; - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - if (typeof process !== 'undefined' && process.noDeprecation === true) { - return fn; - } - - // Allow for deprecating things in the process of starting up. - if (typeof process === 'undefined') { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnvRegex = /^$/; - -if (process.env.NODE_DEBUG) { - var debugEnv = process.env.NODE_DEBUG; - debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&') - .replace(/\*/g, '.*') - .replace(/,/g, '$|^') - .toUpperCase(); - debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i'); -} -exports.debuglog = function(set) { - set = set.toUpperCase(); - if (!debugs[set]) { - if (debugEnvRegex.test(set)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').slice(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.slice(1, -1); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -exports.types = require('./support/types'); - -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; -exports.types.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; -exports.types.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; -exports.types.isNativeError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = require('./support/isBuffer'); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - -var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined; - -exports.promisify = function promisify(original) { - if (typeof original !== 'function') - throw new TypeError('The "original" argument must be of type Function'); - - if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) { - var fn = original[kCustomPromisifiedSymbol]; - if (typeof fn !== 'function') { - throw new TypeError('The "util.promisify.custom" argument must be of type Function'); - } - Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return fn; - } - - function fn() { - var promiseResolve, promiseReject; - var promise = new Promise(function (resolve, reject) { - promiseResolve = resolve; - promiseReject = reject; - }); - - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - args.push(function (err, value) { - if (err) { - promiseReject(err); - } else { - promiseResolve(value); - } - }); - - try { - original.apply(this, args); - } catch (err) { - promiseReject(err); - } - - return promise; - } - - Object.setPrototypeOf(fn, Object.getPrototypeOf(original)); - - if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, { - value: fn, enumerable: false, writable: false, configurable: true - }); - return Object.defineProperties( - fn, - getOwnPropertyDescriptors(original) - ); -} - -exports.promisify.custom = kCustomPromisifiedSymbol - -function callbackifyOnRejected(reason, cb) { - // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M). - // Because `null` is a special error value in callbacks which means "no error - // occurred", we error-wrap so the callback consumer can distinguish between - // "the promise rejected with null" or "the promise fulfilled with undefined". - if (!reason) { - var newReason = new Error('Promise was rejected with a falsy value'); - newReason.reason = reason; - reason = newReason; - } - return cb(reason); -} - -function callbackify(original) { - if (typeof original !== 'function') { - throw new TypeError('The "original" argument must be of type Function'); - } - - // We DO NOT return the promise as it gives the user a false sense that - // the promise is actually somehow related to the callback's execution - // and that the callback throwing will reject the promise. - function callbackified() { - var args = []; - for (var i = 0; i < arguments.length; i++) { - args.push(arguments[i]); - } - - var maybeCb = args.pop(); - if (typeof maybeCb !== 'function') { - throw new TypeError('The last argument must be of type Function'); - } - var self = this; - var cb = function() { - return maybeCb.apply(self, arguments); - }; - // In true node style we process the callback on `nextTick` with all the - // implications (stack, `uncaughtException`, `async_hooks`) - original.apply(this, args) - .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) }, - function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) }); - } - - Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original)); - Object.defineProperties(callbackified, - getOwnPropertyDescriptors(original)); - return callbackified; -} -exports.callbackify = callbackify; - -}).call(this)}).call(this,require('_process')) -},{"./support/isBuffer":164,"./support/types":165,"_process":137,"inherits":112}],167:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; - -var forEach = require('for-each'); -var availableTypedArrays = require('available-typed-arrays'); -var callBind = require('call-bind'); -var callBound = require('call-bound'); -var gOPD = require('gopd'); -var getProto = require('get-proto'); - -var $toString = callBound('Object.prototype.toString'); -var hasToStringTag = require('has-tostringtag/shams')(); - -var g = typeof globalThis === 'undefined' ? global : globalThis; -var typedArrays = availableTypedArrays(); - -var $slice = callBound('String.prototype.slice'); - -/** @type {(array: readonly T[], value: unknown) => number} */ -var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { - for (var i = 0; i < array.length; i += 1) { - if (array[i] === value) { - return i; - } - } - return -1; -}; - -/** @typedef {import('./types').Getter} Getter */ -/** @type {import('./types').Cache} */ -var cache = { __proto__: null }; -if (hasToStringTag && gOPD && getProto) { - forEach(typedArrays, function (typedArray) { - var arr = new g[typedArray](); - if (Symbol.toStringTag in arr && getProto) { - var proto = getProto(arr); - // @ts-expect-error TS won't narrow inside a closure - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor && proto) { - var superProto = getProto(proto); - // @ts-expect-error TS won't narrow inside a closure - descriptor = gOPD(superProto, Symbol.toStringTag); - } - // @ts-expect-error TODO: fix - cache['$' + typedArray] = callBind(descriptor.get); - } - }); -} else { - forEach(typedArrays, function (typedArray) { - var arr = new g[typedArray](); - var fn = arr.slice || arr.set; - if (fn) { - cache[ - /** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray) - ] = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ ( - // @ts-expect-error TODO FIXME - callBind(fn) - ); - } - }); -} - -/** @type {(value: object) => false | import('.').TypedArrayName} */ -var tryTypedArrays = function tryAllTypedArrays(value) { - /** @type {ReturnType} */ var found = false; - forEach( - /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */ (cache), - /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ - function (getter, typedArray) { - if (!found) { - try { - // @ts-expect-error a throw is fine here - if ('$' + getter(value) === typedArray) { - found = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1)); - } - } catch (e) { /**/ } - } - } - ); - return found; -}; - -/** @type {(value: object) => false | import('.').TypedArrayName} */ -var trySlices = function tryAllSlices(value) { - /** @type {ReturnType} */ var found = false; - forEach( - /** @type {Record<`\$${import('.').TypedArrayName}`, Getter>} */(cache), - /** @type {(getter: Getter, name: `\$${import('.').TypedArrayName}`) => void} */ function (getter, name) { - if (!found) { - try { - // @ts-expect-error a throw is fine here - getter(value); - found = /** @type {import('.').TypedArrayName} */ ($slice(name, 1)); - } catch (e) { /**/ } - } - } - ); - return found; -}; - -/** @type {import('.')} */ -module.exports = function whichTypedArray(value) { - if (!value || typeof value !== 'object') { return false; } - if (!hasToStringTag) { - /** @type {string} */ - var tag = $slice($toString(value), 8, -1); - if ($indexOf(typedArrays, tag) > -1) { - return tag; - } - if (tag !== 'Object') { - return false; - } - // node < 0.6 hits here on real Typed Arrays - return trySlices(value); - } - if (!gOPD) { return null; } // unknown engine - return tryTypedArrays(value); -}; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"available-typed-arrays":8,"call-bind":43,"call-bound":44,"for-each":97,"get-proto":103,"gopd":105,"has-tostringtag/shams":109}]},{},[1])(1) -}); diff --git a/skills/flight-finder/node_modules/pdfkit/js/virtual-fs.js b/skills/flight-finder/node_modules/pdfkit/js/virtual-fs.js deleted file mode 100644 index 39c533a..0000000 --- a/skills/flight-finder/node_modules/pdfkit/js/virtual-fs.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -class VirtualFileSystem { - constructor() { - this.fileData = {}; - } - readFileSync(fileName, options) { - if (options === void 0) { - options = {}; - } - const encoding = typeof options === 'string' ? options : options.encoding; - const virtualFileName = normalizeFilename(fileName); - const data = this.fileData[virtualFileName]; - if (data == null) { - throw new Error(`File '${virtualFileName}' not found in virtual file system`); - } - if (encoding) { - // return a string - return typeof data === 'string' ? data : data.toString(encoding); - } - return Buffer.from(data, typeof data === 'string' ? 'base64' : undefined); - } - writeFileSync(fileName, content) { - this.fileData[normalizeFilename(fileName)] = content; - } - bindFileData(data, options) { - if (data === void 0) { - data = {}; - } - if (options === void 0) { - options = {}; - } - if (options.reset) { - this.fileData = data; - } else { - Object.assign(this.fileData, data); - } - } -} -function normalizeFilename(fileName) { - if (fileName.indexOf(__dirname) === 0) { - fileName = fileName.substring(__dirname.length); - } - if (fileName.indexOf('/') === 0) { - fileName = fileName.substring(1); - } - return fileName; -} -var virtualFs = new VirtualFileSystem(); - -module.exports = virtualFs; diff --git a/skills/flight-finder/node_modules/pdfkit/jsconfig.json b/skills/flight-finder/node_modules/pdfkit/jsconfig.json deleted file mode 100644 index 335ec4d..0000000 --- a/skills/flight-finder/node_modules/pdfkit/jsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "CommonJS", - "allowJs": true, - // Don't force external @types; our ambient file is included below - "baseUrl": "." - }, - "include": [ - "tests/**/*.js", - "types/**/*.d.ts" - ] -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/package.json b/skills/flight-finder/node_modules/pdfkit/package.json deleted file mode 100644 index a5119ba..0000000 --- a/skills/flight-finder/node_modules/pdfkit/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "name": "pdfkit", - "description": "A PDF generation library for Node.js", - "keywords": [ - "pdf", - "pdf writer", - "pdf generator", - "graphics", - "document", - "vector" - ], - "version": "0.17.2", - "homepage": "http://pdfkit.org/", - "author": { - "name": "Devon Govett", - "email": "devongovett@gmail.com", - "url": "http://badassjs.com/" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/foliojs/pdfkit.git" - }, - "bugs": "https://github.com/foliojs/pdfkit/issues", - "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-external-helpers": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@eslint/js": "^9.17.0", - "@rollup/plugin-babel": "^6.0.4", - "babel-jest": "^29.7.0", - "blob-stream": "^0.1.3", - "brace": "^0.11.1", - "brfs": "~2.0.2", - "browserify": "^17.0.1", - "canvas": "^3.1.0", - "codemirror": "~5.65.18", - "eslint": "^9.17.0", - "gh-pages": "^6.2.0", - "globals": "^15.14.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-image-snapshot": "^6.4.0", - "markdown": "~0.5.0", - "pdfjs-dist": "^2.14.305", - "prettier": "3.4.2", - "pug": "^3.0.3", - "rollup": "^2.79.2", - "rollup-plugin-copy": "^3.5.0" - }, - "dependencies": { - "crypto-js": "^4.2.0", - "fontkit": "^2.0.4", - "jpeg-exif": "^1.1.4", - "linebreak": "^1.1.0", - "png-js": "^1.0.0" - }, - "scripts": { - "prepublishOnly": "npm run build", - "build": "rollup -c && npm run build-standalone", - "build-standalone": "browserify --standalone PDFDocument --ignore crypto js/pdfkit.js > js/pdfkit.standalone.js", - "browserify-example": "browserify examples/browserify/browser.js > examples/browserify/bundle.js", - "pdf-guide": "node docs/generate.js", - "website": "node docs/generate_website.js", - "publish-website": "node docs/publish_website.js", - "docs": "npm run pdf-guide && npm run website && npm run browserify-example", - "lint": "eslint {lib,tests}/**/*.js", - "prettier": "prettier lib tests docs", - "test": "jest -i --env=node", - "test:visual": "jest visual/ -i --env=node", - "test:unit": "jest unit/ --env=node" - }, - "main": "js/pdfkit.js", - "module": "js/pdfkit.es.js", - "browserify": { - "transform": [ - "brfs" - ] - }, - "engine": [ - "node >= v18.0.0" - ], - "jest": { - "testEnvironment": "jest-environment-jsdom", - "testPathIgnorePatterns": [ - "/node_modules/", - "/examples/" - ], - "setupFilesAfterEnv": [ - "/tests/unit/setupTests.js" - ] - } -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/pdfkit/types/jest.custom-matchers.d.ts b/skills/flight-finder/node_modules/pdfkit/types/jest.custom-matchers.d.ts deleted file mode 100644 index 77859ed..0000000 --- a/skills/flight-finder/node_modules/pdfkit/types/jest.custom-matchers.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Ambient typings to make custom Jest matchers available to the TS language server in tests. -// No external @types packages required. - -type PartialExceptTheseRequired = Partial & - Pick, K>; - -declare global { - // Minimal shape of a TextStream used by tests' helpers - interface TextStream { - text: string; - font: string; - fontSize: number; - } - - type TextStreamMatcher = PartialExceptTheseRequired; - - namespace jest { - interface Matchers { - // Expect the PDF data array to contain a specific chunk sequence - toContainChunk(chunk: Array): R; - - // Expect the PDF data array to contain a text stream matching the TextStream - toContainText(textStream: TextStreamMatcher): R; - } - } -} - -export {}; diff --git a/skills/flight-finder/node_modules/png-js/.prettierrc b/skills/flight-finder/node_modules/png-js/.prettierrc deleted file mode 100644 index 0aa186e..0000000 --- a/skills/flight-finder/node_modules/png-js/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/png-js/LICENSE b/skills/flight-finder/node_modules/png-js/LICENSE deleted file mode 100644 index f39665a..0000000 --- a/skills/flight-finder/node_modules/png-js/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/png-js/README.md b/skills/flight-finder/node_modules/png-js/README.md deleted file mode 100644 index 12d72d8..0000000 --- a/skills/flight-finder/node_modules/png-js/README.md +++ /dev/null @@ -1,33 +0,0 @@ -png.js -====== -A PNG decoder in JS for the canvas element or Node.js. - -## Browser Usage -Simply include png.js and zlib.js on your HTML page, create a canvas element, and call PNG.load to load an image. - - - - - - -The source code for the browser version resides in `png.js` and also supports loading and displaying animated PNGs. - -## Node.js Usage -Install the module using npm - - sudo npm install png-js - -Require the module and decode a PNG - - var PNG = require('png-js'); - PNG.decode('some.png', function(pixels) { - // pixels is a 1d array (in rgba order) of decoded pixel data - }); - -You can also call `PNG.load` if you want to load the PNG (but not decode the pixels) synchronously. If you already -have the PNG data in a buffer, simply use `new PNG(buffer)`. In both of these cases, you need to call `png.decode` -yourself which passes your callback the decoded pixels as a buffer. If you already have a buffer you want the pixels -copied to, call `copyToImageData` with your buffer and the decoded pixels as returned from `decodePixels`. diff --git a/skills/flight-finder/node_modules/png-js/examples/browser.html b/skills/flight-finder/node_modules/png-js/examples/browser.html deleted file mode 100644 index 1c21ffc..0000000 --- a/skills/flight-finder/node_modules/png-js/examples/browser.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - PNG.js example - - - - - - -

PNG.js browser demo

-
- - - - - - \ No newline at end of file diff --git a/skills/flight-finder/node_modules/png-js/images/ball.png b/skills/flight-finder/node_modules/png-js/images/ball.png deleted file mode 100644 index c2f45d9..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/ball.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/broken.png b/skills/flight-finder/node_modules/png-js/images/broken.png deleted file mode 100644 index 5ca146e..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/broken.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/chompy.png b/skills/flight-finder/node_modules/png-js/images/chompy.png deleted file mode 100644 index b3d0735..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/chompy.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/djay-indexed.png b/skills/flight-finder/node_modules/png-js/images/djay-indexed.png deleted file mode 100644 index 3d3f811..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/djay-indexed.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/djay.png b/skills/flight-finder/node_modules/png-js/images/djay.png deleted file mode 100644 index 9d97b43..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/djay.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/laptop.png b/skills/flight-finder/node_modules/png-js/images/laptop.png deleted file mode 100644 index 86b0f94..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/laptop.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/loading.png b/skills/flight-finder/node_modules/png-js/images/loading.png deleted file mode 100644 index 27c48d4..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/loading.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/spinfox.png b/skills/flight-finder/node_modules/png-js/images/spinfox.png deleted file mode 100644 index def6b8c..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/spinfox.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/images/trees.png b/skills/flight-finder/node_modules/png-js/images/trees.png deleted file mode 100644 index e746615..0000000 Binary files a/skills/flight-finder/node_modules/png-js/images/trees.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/index.html b/skills/flight-finder/node_modules/png-js/index.html deleted file mode 100644 index 2f3e6fa..0000000 --- a/skills/flight-finder/node_modules/png-js/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - -
Fork me on GitHub -

- - - - - - - \ No newline at end of file diff --git a/skills/flight-finder/node_modules/png-js/package.json b/skills/flight-finder/node_modules/png-js/package.json deleted file mode 100644 index da991b5..0000000 --- a/skills/flight-finder/node_modules/png-js/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "png-js", - "description": "A PNG decoder in JavaScript", - "version": "1.0.0", - "author": { - "name": "Devon Govett", - "email": "devongovett@gmail.com", - "url": "http://badassjs.com/" - }, - "repository": { - "type": "git", - "url": "https://github.com/devongovett/png.js.git" - }, - "bugs": "http://github.com/devongovett/png.js/issues", - "devDependencies": { - "jest": "^24.1.0", - "prettier": "^1.16.4" - }, - "scripts": { - "test": "jest", - "prettier": "prettier test/**/*.js png-node.js png.js --write" - }, - "main": "png-node.js", - "engine": [ - "node >= v0.6.0" - ], - "jest": { - "setupFiles": [ - "/test/patch-canvas.js", - "/zlib.js", - "/png.js" - ] - } -} diff --git a/skills/flight-finder/node_modules/png-js/png-node.js b/skills/flight-finder/node_modules/png-js/png-node.js deleted file mode 100644 index 3300218..0000000 --- a/skills/flight-finder/node_modules/png-js/png-node.js +++ /dev/null @@ -1,402 +0,0 @@ -/* - * MIT LICENSE - * Copyright (c) 2011 Devon Govett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software - * without restriction, including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -const fs = require('fs'); -const zlib = require('zlib'); - -module.exports = class PNG { - static decode(path, fn) { - return fs.readFile(path, function(err, file) { - const png = new PNG(file); - return png.decode(pixels => fn(pixels)); - }); - } - - static load(path) { - const file = fs.readFileSync(path); - return new PNG(file); - } - - constructor(data) { - let i; - this.data = data; - this.pos = 8; // Skip the default header - - this.palette = []; - this.imgData = []; - this.transparency = {}; - this.text = {}; - - while (true) { - const chunkSize = this.readUInt32(); - let section = ''; - for (i = 0; i < 4; i++) { - section += String.fromCharCode(this.data[this.pos++]); - } - - switch (section) { - case 'IHDR': - // we can grab interesting values from here (like width, height, etc) - this.width = this.readUInt32(); - this.height = this.readUInt32(); - this.bits = this.data[this.pos++]; - this.colorType = this.data[this.pos++]; - this.compressionMethod = this.data[this.pos++]; - this.filterMethod = this.data[this.pos++]; - this.interlaceMethod = this.data[this.pos++]; - break; - - case 'PLTE': - this.palette = this.read(chunkSize); - break; - - case 'IDAT': - for (i = 0; i < chunkSize; i++) { - this.imgData.push(this.data[this.pos++]); - } - break; - - case 'tRNS': - // This chunk can only occur once and it must occur after the - // PLTE chunk and before the IDAT chunk. - this.transparency = {}; - switch (this.colorType) { - case 3: - // Indexed color, RGB. Each byte in this chunk is an alpha for - // the palette index in the PLTE ("palette") chunk up until the - // last non-opaque entry. Set up an array, stretching over all - // palette entries which will be 0 (opaque) or 1 (transparent). - this.transparency.indexed = this.read(chunkSize); - var short = 255 - this.transparency.indexed.length; - if (short > 0) { - for (i = 0; i < short; i++) { - this.transparency.indexed.push(255); - } - } - break; - case 0: - // Greyscale. Corresponding to entries in the PLTE chunk. - // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1 - this.transparency.grayscale = this.read(chunkSize)[0]; - break; - case 2: - // True color with proper alpha channel. - this.transparency.rgb = this.read(chunkSize); - break; - } - break; - - case 'tEXt': - var text = this.read(chunkSize); - var index = text.indexOf(0); - var key = String.fromCharCode.apply(String, text.slice(0, index)); - this.text[key] = String.fromCharCode.apply( - String, - text.slice(index + 1) - ); - break; - - case 'IEND': - // we've got everything we need! - switch (this.colorType) { - case 0: - case 3: - case 4: - this.colors = 1; - break; - case 2: - case 6: - this.colors = 3; - break; - } - - this.hasAlphaChannel = [4, 6].includes(this.colorType); - var colors = this.colors + (this.hasAlphaChannel ? 1 : 0); - this.pixelBitlength = this.bits * colors; - - switch (this.colors) { - case 1: - this.colorSpace = 'DeviceGray'; - break; - case 3: - this.colorSpace = 'DeviceRGB'; - break; - } - - this.imgData = new Buffer(this.imgData); - return; - break; - - default: - // unknown (or unimportant) section, skip it - this.pos += chunkSize; - } - - this.pos += 4; // Skip the CRC - - if (this.pos > this.data.length) { - throw new Error('Incomplete or corrupt PNG file'); - } - } - } - - read(bytes) { - const result = new Array(bytes); - for (let i = 0; i < bytes; i++) { - result[i] = this.data[this.pos++]; - } - return result; - } - - readUInt32() { - const b1 = this.data[this.pos++] << 24; - const b2 = this.data[this.pos++] << 16; - const b3 = this.data[this.pos++] << 8; - const b4 = this.data[this.pos++]; - return b1 | b2 | b3 | b4; - } - - readUInt16() { - const b1 = this.data[this.pos++] << 8; - const b2 = this.data[this.pos++]; - return b1 | b2; - } - - decodePixels(fn) { - return zlib.inflate(this.imgData, (err, data) => { - if (err) { - throw err; - } - - const { width, height } = this; - const pixelBytes = this.pixelBitlength / 8; - - const pixels = new Buffer(width * height * pixelBytes); - const { length } = data; - let pos = 0; - - function pass(x0, y0, dx, dy, singlePass = false) { - const w = Math.ceil((width - x0) / dx); - const h = Math.ceil((height - y0) / dy); - const scanlineLength = pixelBytes * w; - const buffer = singlePass ? pixels : new Buffer(scanlineLength * h); - let row = 0; - let c = 0; - while (row < h && pos < length) { - var byte, col, i, left, upper; - switch (data[pos++]) { - case 0: // None - for (i = 0; i < scanlineLength; i++) { - buffer[c++] = data[pos++]; - } - break; - - case 1: // Sub - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - buffer[c++] = (byte + left) % 256; - } - break; - - case 2: // Up - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (upper + byte) % 256; - } - break; - - case 3: // Average - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256; - } - break; - - case 4: // Paeth - for (i = 0; i < scanlineLength; i++) { - var paeth, upperLeft; - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - - if (row === 0) { - upper = upperLeft = 0; - } else { - upper = - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - upperLeft = - col && - buffer[ - (row - 1) * scanlineLength + - (col - 1) * pixelBytes + - (i % pixelBytes) - ]; - } - - const p = left + upper - upperLeft; - const pa = Math.abs(p - left); - const pb = Math.abs(p - upper); - const pc = Math.abs(p - upperLeft); - - if (pa <= pb && pa <= pc) { - paeth = left; - } else if (pb <= pc) { - paeth = upper; - } else { - paeth = upperLeft; - } - - buffer[c++] = (byte + paeth) % 256; - } - break; - - default: - throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`); - } - - if (!singlePass) { - let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes; - let bufferPos = row * scanlineLength; - for (i = 0; i < w; i++) { - for (let j = 0; j < pixelBytes; j++) - pixels[pixelsPos++] = buffer[bufferPos++]; - pixelsPos += (dx - 1) * pixelBytes; - } - } - - row++; - } - } - - if (this.interlaceMethod === 1) { - /* - 1 6 4 6 2 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - 3 6 4 6 3 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - */ - pass(0, 0, 8, 8); // 1 - pass(4, 0, 8, 8); // 2 - pass(0, 4, 4, 8); // 3 - pass(2, 0, 4, 4); // 4 - pass(0, 2, 2, 4); // 5 - pass(1, 0, 2, 2); // 6 - pass(0, 1, 1, 2); // 7 - } else { - pass(0, 0, 1, 1, true); - } - - return fn(pixels); - }); - } - - decodePalette() { - const { palette } = this; - const { length } = palette; - const transparency = this.transparency.indexed || []; - const ret = new Buffer(transparency.length + length); - let pos = 0; - let c = 0; - - for (let i = 0; i < length; i += 3) { - var left; - ret[pos++] = palette[i]; - ret[pos++] = palette[i + 1]; - ret[pos++] = palette[i + 2]; - ret[pos++] = (left = transparency[c++]) != null ? left : 255; - } - - return ret; - } - - copyToImageData(imageData, pixels) { - let j, k; - let { colors } = this; - let palette = null; - let alpha = this.hasAlphaChannel; - - if (this.palette.length) { - palette = - this._decodedPalette || (this._decodedPalette = this.decodePalette()); - colors = 4; - alpha = true; - } - - const data = imageData.data || imageData; - const { length } = data; - const input = palette || pixels; - let i = (j = 0); - - if (colors === 1) { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - const v = input[k++]; - data[i++] = v; - data[i++] = v; - data[i++] = v; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } else { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } - } - - decode(fn) { - const ret = new Buffer(this.width * this.height * 4); - return this.decodePixels(pixels => { - this.copyToImageData(ret, pixels); - return fn(ret); - }); - } -}; diff --git a/skills/flight-finder/node_modules/png-js/png.js b/skills/flight-finder/node_modules/png-js/png.js deleted file mode 100644 index 3f381bd..0000000 --- a/skills/flight-finder/node_modules/png-js/png.js +++ /dev/null @@ -1,560 +0,0 @@ -/* - * MIT LICENSE - * Copyright (c) 2011 Devon Govett - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software - * without restriction, including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -window.PNG = (function() { - let APNG_DISPOSE_OP_NONE = 0; - let APNG_DISPOSE_OP_BACKGROUND = 1; - let APNG_DISPOSE_OP_PREVIOUS = 2; - let APNG_BLEND_OP_SOURCE = 0; - let APNG_BLEND_OP_OVER = 1; - let scratchCanvas = document.createElement('canvas'); - let scratchCtx = scratchCanvas.getContext('2d'); - let makeImage = function(imageData) { - scratchCtx.width = imageData.width; - scratchCtx.height = imageData.height; - scratchCtx.clearRect(0, 0, imageData.width, imageData.height); - scratchCtx.putImageData(imageData, 0, 0); - - const img = new Image(); - img.src = scratchCanvas.toDataURL(); - return img; - }; - - class PNG { - static load(url, canvas, callback) { - if (typeof canvas === 'function') { - callback = canvas; - } - - const xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = () => { - const data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer); - const png = new PNG(data); - if (typeof (canvas && canvas.getContext) === 'function') { - png.render(canvas); - } - return typeof callback === 'function' ? callback(png) : undefined; - }; - - return xhr.send(null); - } - - constructor(data1) { - let i; - this.data = data1; - this.pos = 8; // Skip the default header - - this.palette = []; - this.imgData = []; - this.transparency = {}; - this.animation = null; - this.text = {}; - let frame = null; - - while (true) { - var data; - let chunkSize = this.readUInt32(); - let section = ''; - for (i = 0; i < 4; i++) { - section += String.fromCharCode(this.data[this.pos++]); - } - - switch (section) { - case 'IHDR': - // we can grab interesting values from here (like width, height, etc) - this.width = this.readUInt32(); - this.height = this.readUInt32(); - this.bits = this.data[this.pos++]; - this.colorType = this.data[this.pos++]; - this.compressionMethod = this.data[this.pos++]; - this.filterMethod = this.data[this.pos++]; - this.interlaceMethod = this.data[this.pos++]; - break; - - case 'acTL': - // we have an animated PNG - this.animation = { - numFrames: this.readUInt32(), - numPlays: this.readUInt32() || Infinity, - frames: [] - }; - break; - - case 'PLTE': - this.palette = this.read(chunkSize); - break; - - case 'fcTL': - if (frame) { - this.animation.frames.push(frame); - } - - this.pos += 4; // skip sequence number - frame = { - width: this.readUInt32(), - height: this.readUInt32(), - xOffset: this.readUInt32(), - yOffset: this.readUInt32() - }; - - var delayNum = this.readUInt16(); - var delayDen = this.readUInt16() || 100; - frame.delay = (1000 * delayNum) / delayDen; - - frame.disposeOp = this.data[this.pos++]; - frame.blendOp = this.data[this.pos++]; - frame.data = []; - break; - - case 'IDAT': - case 'fdAT': - if (section === 'fdAT') { - this.pos += 4; // skip sequence number - chunkSize -= 4; - } - - data = (frame && frame.data) || this.imgData; - for (i = 0; i < chunkSize; i++) { - data.push(this.data[this.pos++]); - } - break; - - case 'tRNS': - // This chunk can only occur once and it must occur after the - // PLTE chunk and before the IDAT chunk. - this.transparency = {}; - switch (this.colorType) { - case 3: - // Indexed color, RGB. Each byte in this chunk is an alpha for - // the palette index in the PLTE ("palette") chunk up until the - // last non-opaque entry. Set up an array, stretching over all - // palette entries which will be 0 (opaque) or 1 (transparent). - this.transparency.indexed = this.read(chunkSize); - var short = 255 - this.transparency.indexed.length; - if (short > 0) { - for (i = 0; i < short; i++) { - this.transparency.indexed.push(255); - } - } - break; - case 0: - // Greyscale. Corresponding to entries in the PLTE chunk. - // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1 - this.transparency.grayscale = this.read(chunkSize)[0]; - break; - case 2: - // True color with proper alpha channel. - this.transparency.rgb = this.read(chunkSize); - break; - } - break; - - case 'tEXt': - var text = this.read(chunkSize); - var index = text.indexOf(0); - var key = String.fromCharCode.apply(String, text.slice(0, index)); - this.text[key] = String.fromCharCode.apply( - String, - text.slice(index + 1) - ); - break; - - case 'IEND': - if (frame) { - this.animation.frames.push(frame); - } - - // we've got everything we need! - switch (this.colorType) { - case 0: - case 3: - case 4: - this.colors = 1; - break; - case 2: - case 6: - this.colors = 3; - break; - } - - this.hasAlphaChannel = [4, 6].includes(this.colorType); - var colors = this.colors + (this.hasAlphaChannel ? 1 : 0); - this.pixelBitlength = this.bits * colors; - - switch (this.colors) { - case 1: - this.colorSpace = 'DeviceGray'; - break; - case 3: - this.colorSpace = 'DeviceRGB'; - break; - } - - this.imgData = new Uint8Array(this.imgData); - return; - break; - - default: - // unknown (or unimportant) section, skip it - this.pos += chunkSize; - } - - this.pos += 4; // Skip the CRC - - if (this.pos > this.data.length) { - throw new Error('Incomplete or corrupt PNG file'); - } - } - } - - read(bytes) { - const result = new Array(bytes); - for (let i = 0; i < bytes; i++) { - result[i] = this.data[this.pos++]; - } - return result; - } - - readUInt32() { - const b1 = this.data[this.pos++] << 24; - const b2 = this.data[this.pos++] << 16; - const b3 = this.data[this.pos++] << 8; - const b4 = this.data[this.pos++]; - return b1 | b2 | b3 | b4; - } - - readUInt16() { - const b1 = this.data[this.pos++] << 8; - const b2 = this.data[this.pos++]; - return b1 | b2; - } - - decodePixels(data) { - if (data == null) { - data = this.imgData; - } - if (data.length === 0) { - return new Uint8Array(0); - } - - data = new FlateStream(data); - data = data.getBytes(); - - const { width, height } = this; - const pixelBytes = this.pixelBitlength / 8; - - const pixels = new Uint8Array(width * height * pixelBytes); - const { length } = data; - let pos = 0; - - function pass(x0, y0, dx, dy, singlePass = false) { - const w = Math.ceil((width - x0) / dx); - const h = Math.ceil((height - y0) / dy); - const scanlineLength = pixelBytes * w; - const buffer = singlePass ? pixels : new Uint8Array(scanlineLength * h); - let row = 0; - let c = 0; - while (row < h && pos < length) { - var byte, col, i, left, upper; - switch (data[pos++]) { - case 0: // None - for (i = 0; i < scanlineLength; i++) { - buffer[c++] = data[pos++]; - } - break; - - case 1: // Sub - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - buffer[c++] = (byte + left) % 256; - } - break; - - case 2: // Up - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (upper + byte) % 256; - } - break; - - case 3: // Average - for (i = 0; i < scanlineLength; i++) { - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - upper = - row && - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256; - } - break; - - case 4: // Paeth - for (i = 0; i < scanlineLength; i++) { - var paeth, upperLeft; - byte = data[pos++]; - col = (i - (i % pixelBytes)) / pixelBytes; - left = i < pixelBytes ? 0 : buffer[c - pixelBytes]; - - if (row === 0) { - upper = upperLeft = 0; - } else { - upper = - buffer[ - (row - 1) * scanlineLength + - col * pixelBytes + - (i % pixelBytes) - ]; - upperLeft = - col && - buffer[ - (row - 1) * scanlineLength + - (col - 1) * pixelBytes + - (i % pixelBytes) - ]; - } - - const p = left + upper - upperLeft; - const pa = Math.abs(p - left); - const pb = Math.abs(p - upper); - const pc = Math.abs(p - upperLeft); - - if (pa <= pb && pa <= pc) { - paeth = left; - } else if (pb <= pc) { - paeth = upper; - } else { - paeth = upperLeft; - } - - buffer[c++] = (byte + paeth) % 256; - } - break; - - default: - throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`); - } - - if (!singlePass) { - let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes; - let bufferPos = row * scanlineLength; - for (i = 0; i < w; i++) { - for (let j = 0; j < pixelBytes; j++) - pixels[pixelsPos++] = buffer[bufferPos++]; - pixelsPos += (dx - 1) * pixelBytes; - } - } - - row++; - } - } - - if (this.interlaceMethod === 1) { - /* - 1 6 4 6 2 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - 3 6 4 6 3 6 4 6 - 7 7 7 7 7 7 7 7 - 5 6 5 6 5 6 5 6 - 7 7 7 7 7 7 7 7 - */ - pass(0, 0, 8, 8); // 1 - pass(4, 0, 8, 8); // 2 - pass(0, 4, 4, 8); // 3 - pass(2, 0, 4, 4); // 4 - pass(0, 2, 2, 4); // 5 - pass(1, 0, 2, 2); // 6 - pass(0, 1, 1, 2); // 7 - } else { - pass(0, 0, 1, 1, true); - } - - return pixels; - } - - decodePalette() { - const { palette } = this; - const { length } = palette; - const transparency = this.transparency.indexed || []; - const ret = new Uint8Array((transparency.length || 0) + length); - let pos = 0; - let c = 0; - - for (let i = 0; i < length; i += 3) { - var left; - ret[pos++] = palette[i]; - ret[pos++] = palette[i + 1]; - ret[pos++] = palette[i + 2]; - ret[pos++] = (left = transparency[c++]) != null ? left : 255; - } - - return ret; - } - - copyToImageData(imageData, pixels) { - let j, k; - let { colors } = this; - let palette = null; - let alpha = this.hasAlphaChannel; - - if (this.palette.length) { - palette = - this._decodedPalette || (this._decodedPalette = this.decodePalette()); - colors = 4; - alpha = true; - } - - const data = imageData.data || imageData; - const { length } = data; - const input = palette || pixels; - let i = (j = 0); - - if (colors === 1) { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - const v = input[k++]; - data[i++] = v; - data[i++] = v; - data[i++] = v; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } else { - while (i < length) { - k = palette ? pixels[i / 4] * 4 : j; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = input[k++]; - data[i++] = alpha ? input[k++] : 255; - j = k; - } - } - } - - decode() { - const ret = new Uint8Array(this.width * this.height * 4); - this.copyToImageData(ret, this.decodePixels()); - return ret; - } - - decodeFrames(ctx) { - if (!this.animation) { - return; - } - - for (let i = 0; i < this.animation.frames.length; i++) { - const frame = this.animation.frames[i]; - const imageData = ctx.createImageData(frame.width, frame.height); - const pixels = this.decodePixels(new Uint8Array(frame.data)); - - this.copyToImageData(imageData, pixels); - frame.imageData = imageData; - frame.image = makeImage(imageData); - } - } - - renderFrame(ctx, number) { - const { frames } = this.animation; - const frame = frames[number]; - const prev = frames[number - 1]; - - // if we're on the first frame, clear the canvas - if (number === 0) { - ctx.clearRect(0, 0, this.width, this.height); - } - - // check the previous frame's dispose operation - if ((prev && prev.disposeOp) === APNG_DISPOSE_OP_BACKGROUND) { - ctx.clearRect(prev.xOffset, prev.yOffset, prev.width, prev.height); - } else if ((prev && prev.disposeOp) === APNG_DISPOSE_OP_PREVIOUS) { - ctx.putImageData(prev.imageData, prev.xOffset, prev.yOffset); - } - - // APNG_BLEND_OP_SOURCE overwrites the previous data - if (frame.blendOp === APNG_BLEND_OP_SOURCE) { - ctx.clearRect(frame.xOffset, frame.yOffset, frame.width, frame.height); - } - - // draw the current frame - return ctx.drawImage(frame.image, frame.xOffset, frame.yOffset); - } - - animate(ctx) { - let frameNumber = 0; - const { numFrames, frames, numPlays } = this.animation; - - const doFrame = () => { - const f = frameNumber++ % numFrames; - const frame = frames[f]; - this.renderFrame(ctx, f); - - if (numFrames > 1 && frameNumber / numFrames < numPlays) { - this.animation._timeout = setTimeout(doFrame, frame.delay); - } - }; - - doFrame(); - } - - stopAnimation() { - return clearTimeout(this.animation && this.animation._timeout); - } - - render(canvas) { - // if this canvas was displaying another image before, - // stop the animation on it - if (canvas._png) { - canvas._png.stopAnimation(); - } - - canvas._png = this; - canvas.width = this.width; - canvas.height = this.height; - const ctx = canvas.getContext('2d'); - - if (this.animation) { - this.decodeFrames(ctx); - return this.animate(ctx); - } else { - const data = ctx.createImageData(this.width, this.height); - this.copyToImageData(data, this.decodePixels()); - return ctx.putImageData(data, 0, 0); - } - } - } - return PNG; -})(); diff --git a/skills/flight-finder/node_modules/png-js/test/__snapshots__/imgdata.spec.js.snap b/skills/flight-finder/node_modules/png-js/test/__snapshots__/imgdata.spec.js.snap deleted file mode 100644 index ee58d17..0000000 --- a/skills/flight-finder/node_modules/png-js/test/__snapshots__/imgdata.spec.js.snap +++ /dev/null @@ -1,25082 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`imgData browser animated.png 1`] = `Uint8Array []`; - -exports[`imgData browser black-white.png 1`] = ` -Uint8Array [ - 120, - 156, - 45, - 204, - 177, - 9, - 3, - 48, - 12, - 5, - 209, - 235, - 210, - 4, - 178, - 74, - 32, - 11, - 122, - 52, - 111, - 144, - 21, - 60, - 130, - 193, - 141, - 10, - 97, - 69, - 7, - 81, - 241, - 224, - 138, - 47, - 170, - 234, - 210, - 164, - 132, - 108, - 206, - 169, - 37, - 83, - 6, - 231, - 83, - 52, - 87, - 18, - 226, - 17, - 178, - 33, - 191, - 75, - 38, - 61, - 27, - 66, - 115, - 37, - 37, - 94, - 139, - 218, - 178, - 158, - 111, - 106, - 202, - 48, - 105, - 46, - 157, - 41, - 97, - 110, - 233, - 111, - 48, - 101, - 240, - 191, - 31, - 16, - 135, - 73, - 47, -] -`; - -exports[`imgData browser grayscale-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 99, - 100, - 96, - 36, - 0, - 20, - 8, - 200, - 179, - 12, - 5, - 5, - 140, - 15, - 8, - 41, - 248, - 247, - 31, - 63, - 96, - 121, - 48, - 28, - 20, - 48, - 202, - 17, - 144, - 103, - 100, - 162, - 121, - 92, - 12, - 6, - 5, - 140, - 143, - 240, - 202, - 254, - 255, - 207, - 248, - 135, - 230, - 113, - 49, - 24, - 20, - 48, - 202, - 224, - 149, - 101, - 100, - 4, - 0, - 80, - 229, - 254, - 113, -] -`; - -exports[`imgData browser grayscale-16bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 213, - 210, - 49, - 10, - 192, - 48, - 12, - 67, - 81, - 57, - 91, - 239, - 127, - 198, - 220, - 160, - 147, - 192, - 40, - 123, - 50, - 213, - 42, - 4, - 163, - 217, - 143, - 63, - 56, - 128, - 167, - 184, - 87, - 19, - 19, - 99, - 160, - 58, - 130, - 96, - 29, - 8, - 153, - 0, - 221, - 130, - 246, - 64, - 202, - 4, - 232, - 22, - 220, - 6, - 66, - 38, - 64, - 183, - 160, - 61, - 144, - 50, - 1, - 186, - 5, - 183, - 129, - 144, - 9, - 208, - 45, - 104, - 15, - 164, - 76, - 96, - 63, - 111, - 7, - 236, - 79, - 244, - 25, - 56, - 207, - 127, - 0, - 22, - 216, - 75, - 216, - 95, -] -`; - -exports[`imgData browser grayscale-alpha-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 99, - 252, - 207, - 192, - 192, - 1, - 133, - 156, - 104, - 52, - 49, - 34, - 156, - 44, - 223, - 25, - 40, - 3, - 44, - 63, - 134, - 190, - 1, - 163, - 97, - 48, - 26, - 6, - 84, - 49, - 96, - 52, - 16, - 71, - 195, - 128, - 42, - 6, - 140, - 6, - 226, - 104, - 24, - 80, - 195, - 0, - 0, - 223, - 42, - 32, - 125, -] -`; - -exports[`imgData browser grayscale-alpha-16bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 197, - 151, - 95, - 104, - 91, - 231, - 25, - 198, - 127, - 150, - 143, - 164, - 163, - 99, - 235, - 248, - 72, - 117, - 82, - 71, - 84, - 174, - 157, - 40, - 56, - 133, - 18, - 26, - 186, - 66, - 186, - 45, - 23, - 177, - 189, - 142, - 80, - 210, - 46, - 37, - 52, - 18, - 187, - 200, - 228, - 208, - 66, - 105, - 75, - 97, - 137, - 119, - 17, - 157, - 139, - 93, - 72, - 190, - 152, - 147, - 139, - 208, - 244, - 162, - 201, - 144, - 22, - 88, - 176, - 26, - 2, - 131, - 102, - 37, - 133, - 36, - 166, - 140, - 210, - 122, - 132, - 210, - 226, - 149, - 109, - 161, - 105, - 234, - 74, - 173, - 226, - 25, - 87, - 71, - 145, - 237, - 99, - 253, - 57, - 150, - 119, - 241, - 126, - 25, - 161, - 116, - 215, - 53, - 24, - 153, - 79, - 199, - 210, - 251, - 62, - 239, - 243, - 62, - 207, - 243, - 1, - 96, - 101, - 97, - 88, - 135, - 61, - 167, - 96, - 212, - 130, - 23, - 206, - 194, - 177, - 1, - 56, - 254, - 71, - 200, - 14, - 193, - 217, - 63, - 195, - 197, - 93, - 240, - 222, - 101, - 248, - 232, - 9, - 248, - 231, - 95, - 225, - 238, - 94, - 88, - 191, - 46, - 191, - 119, - 247, - 202, - 217, - 71, - 79, - 200, - 51, - 23, - 119, - 201, - 255, - 100, - 135, - 228, - 51, - 142, - 13, - 200, - 103, - 142, - 90, - 242, - 29, - 195, - 186, - 124, - 39, - 128, - 102, - 101, - 161, - 102, - 91, - 185, - 174, - 25, - 240, - 21, - 161, - 187, - 2, - 90, - 17, - 2, - 187, - 33, - 112, - 8, - 244, - 38, - 132, - 222, - 134, - 230, - 117, - 104, - 23, - 193, - 211, - 96, - 99, - 4, - 58, - 207, - 2, - 111, - 200, - 135, - 116, - 146, - 114, - 230, - 105, - 208, - 94, - 144, - 103, - 155, - 41, - 88, - 159, - 4, - 247, - 16, - 172, - 93, - 130, - 85, - 3, - 234, - 21, - 168, - 167, - 160, - 86, - 128, - 90, - 10, - 172, - 108, - 45, - 211, - 53, - 172, - 67, - 173, - 96, - 229, - 156, - 84, - 36, - 27, - 117, - 225, - 33, - 23, - 30, - 90, - 255, - 63, - 175, - 63, - 112, - 6, - 240, - 157, - 1, - 223, - 133, - 190, - 247, - 250, - 67, - 103, - 234, - 181, - 106, - 64, - 100, - 198, - 177, - 173, - 116, - 45, - 163, - 89, - 89, - 233, - 188, - 203, - 133, - 170, - 97, - 101, - 125, - 39, - 161, - 59, - 3, - 254, - 211, - 16, - 200, - 128, - 126, - 18, - 66, - 25, - 232, - 201, - 64, - 51, - 3, - 237, - 12, - 120, - 39, - 161, - 147, - 129, - 205, - 140, - 66, - 32, - 7, - 94, - 14, - 218, - 83, - 208, - 204, - 65, - 35, - 7, - 110, - 14, - 214, - 114, - 176, - 50, - 5, - 245, - 28, - 212, - 114, - 224, - 228, - 160, - 58, - 5, - 81, - 183, - 102, - 71, - 82, - 96, - 102, - 65, - 139, - 100, - 5, - 118, - 159, - 11, - 190, - 147, - 176, - 60, - 21, - 201, - 250, - 230, - 64, - 27, - 3, - 255, - 151, - 160, - 95, - 132, - 208, - 34, - 244, - 140, - 65, - 195, - 131, - 214, - 135, - 224, - 157, - 134, - 141, - 195, - 176, - 249, - 136, - 20, - 176, - 113, - 88, - 206, - 90, - 31, - 202, - 51, - 238, - 83, - 176, - 246, - 58, - 172, - 220, - 128, - 123, - 199, - 192, - 217, - 2, - 213, - 131, - 176, - 60, - 11, - 253, - 39, - 29, - 59, - 226, - 66, - 223, - 12, - 152, - 49, - 197, - 1, - 173, - 8, - 218, - 47, - 164, - 115, - 223, - 28, - 44, - 205, - 90, - 89, - 223, - 163, - 160, - 237, - 131, - 96, - 12, - 244, - 189, - 96, - 28, - 129, - 112, - 26, - 26, - 103, - 161, - 61, - 1, - 27, - 253, - 176, - 249, - 19, - 85, - 192, - 60, - 180, - 175, - 64, - 35, - 15, - 235, - 191, - 131, - 213, - 2, - 212, - 215, - 160, - 246, - 47, - 168, - 182, - 96, - 249, - 54, - 44, - 205, - 194, - 214, - 209, - 154, - 29, - 205, - 128, - 85, - 5, - 243, - 93, - 232, - 189, - 143, - 64, - 96, - 55, - 248, - 127, - 38, - 176, - 107, - 99, - 224, - 123, - 20, - 22, - 11, - 145, - 172, - 239, - 12, - 248, - 63, - 128, - 224, - 10, - 24, - 37, - 8, - 159, - 128, - 245, - 58, - 52, - 223, - 2, - 111, - 5, - 54, - 175, - 74, - 1, - 222, - 136, - 156, - 173, - 251, - 97, - 245, - 4, - 212, - 75, - 224, - 188, - 0, - 203, - 71, - 97, - 201, - 132, - 197, - 2, - 12, - 164, - 29, - 187, - 63, - 1, - 145, - 12, - 152, - 175, - 64, - 184, - 8, - 61, - 243, - 10, - 129, - 192, - 33, - 8, - 148, - 101, - 230, - 254, - 47, - 165, - 115, - 223, - 25, - 168, - 152, - 86, - 86, - 139, - 67, - 112, - 16, - 140, - 65, - 8, - 15, - 130, - 53, - 8, - 141, - 65, - 104, - 239, - 129, - 206, - 160, - 20, - 208, - 46, - 65, - 163, - 4, - 107, - 37, - 168, - 255, - 29, - 156, - 18, - 44, - 151, - 224, - 63, - 37, - 168, - 148, - 33, - 86, - 175, - 217, - 91, - 63, - 131, - 104, - 0, - 250, - 118, - 64, - 248, - 91, - 232, - 153, - 1, - 227, - 47, - 10, - 1, - 189, - 9, - 250, - 30, - 33, - 156, - 126, - 81, - 96, - 247, - 127, - 0, - 90, - 28, - 74, - 229, - 72, - 86, - 211, - 64, - 215, - 161, - 183, - 23, - 44, - 11, - 92, - 23, - 90, - 45, - 232, - 116, - 164, - 128, - 86, - 75, - 206, - 234, - 117, - 168, - 86, - 97, - 105, - 9, - 42, - 21, - 40, - 149, - 97, - 48, - 238, - 216, - 15, - 215, - 161, - 127, - 2, - 172, - 10, - 132, - 127, - 13, - 61, - 105, - 48, - 138, - 16, - 154, - 86, - 8, - 132, - 222, - 134, - 208, - 46, - 97, - 123, - 104, - 81, - 102, - 30, - 92, - 145, - 206, - 53, - 13, - 238, - 124, - 101, - 101, - 253, - 251, - 193, - 56, - 10, - 214, - 4, - 108, - 57, - 6, - 141, - 81, - 232, - 252, - 70, - 10, - 104, - 228, - 97, - 101, - 22, - 170, - 5, - 88, - 204, - 67, - 57, - 15, - 119, - 110, - 192, - 246, - 225, - 154, - 29, - 139, - 65, - 255, - 10, - 68, - 210, - 96, - 206, - 201, - 54, - 25, - 95, - 66, - 168, - 8, - 193, - 251, - 28, - 104, - 94, - 7, - 227, - 83, - 121, - 179, - 103, - 76, - 8, - 103, - 148, - 4, - 118, - 93, - 7, - 255, - 126, - 184, - 149, - 143, - 100, - 131, - 143, - 65, - 95, - 13, - 182, - 108, - 3, - 119, - 20, - 188, - 83, - 82, - 128, - 59, - 10, - 213, - 73, - 184, - 91, - 131, - 133, - 143, - 225, - 86, - 30, - 70, - 38, - 28, - 59, - 254, - 53, - 108, - 221, - 10, - 145, - 58, - 152, - 19, - 208, - 219, - 3, - 70, - 6, - 244, - 36, - 4, - 103, - 32, - 56, - 174, - 16, - 104, - 23, - 161, - 21, - 151, - 61, - 111, - 120, - 194, - 246, - 240, - 9, - 153, - 121, - 111, - 175, - 116, - 30, - 124, - 12, - 230, - 39, - 173, - 172, - 81, - 134, - 254, - 50, - 60, - 106, - 67, - 251, - 115, - 41, - 160, - 102, - 67, - 37, - 14, - 95, - 124, - 2, - 243, - 113, - 216, - 61, - 93, - 179, - 135, - 158, - 134, - 129, - 11, - 16, - 141, - 130, - 185, - 2, - 189, - 105, - 8, - 253, - 1, - 244, - 103, - 32, - 248, - 15, - 8, - 20, - 193, - 127, - 31, - 1, - 79, - 131, - 246, - 107, - 34, - 50, - 173, - 15, - 101, - 213, - 214, - 235, - 66, - 56, - 203, - 18, - 216, - 251, - 106, - 96, - 148, - 97, - 46, - 30, - 201, - 70, - 18, - 48, - 156, - 128, - 70, - 66, - 10, - 88, - 188, - 6, - 255, - 190, - 13, - 115, - 183, - 97, - 111, - 217, - 177, - 119, - 62, - 9, - 219, - 44, - 136, - 166, - 193, - 52, - 161, - 167, - 14, - 161, - 52, - 232, - 99, - 16, - 248, - 57, - 248, - 159, - 7, - 127, - 17, - 52, - 79, - 33, - 176, - 49, - 2, - 27, - 215, - 68, - 225, - 188, - 211, - 178, - 231, - 205, - 183, - 132, - 237, - 174, - 43, - 51, - 223, - 178, - 77, - 58, - 143, - 36, - 224, - 234, - 109, - 43, - 27, - 223, - 15, - 63, - 61, - 42, - 5, - 124, - 126, - 14, - 174, - 190, - 15, - 7, - 18, - 53, - 123, - 87, - 25, - 98, - 167, - 32, - 122, - 23, - 194, - 67, - 96, - 24, - 160, - 127, - 7, - 193, - 87, - 193, - 127, - 16, - 180, - 227, - 160, - 221, - 132, - 238, - 25, - 232, - 190, - 165, - 16, - 232, - 60, - 11, - 29, - 67, - 228, - 117, - 227, - 176, - 136, - 140, - 183, - 34, - 171, - 214, - 106, - 9, - 225, - 220, - 81, - 129, - 125, - 56, - 1, - 241, - 253, - 112, - 238, - 124, - 36, - 59, - 62, - 46, - 5, - 156, - 59, - 15, - 47, - 191, - 228, - 216, - 143, - 151, - 97, - 160, - 12, - 214, - 52, - 24, - 179, - 160, - 47, - 64, - 32, - 0, - 254, - 5, - 208, - 210, - 208, - 189, - 91, - 137, - 221, - 47, - 69, - 254, - 125, - 239, - 41, - 4, - 120, - 3, - 54, - 147, - 162, - 237, - 155, - 143, - 136, - 194, - 109, - 94, - 149, - 61, - 239, - 116, - 132, - 237, - 222, - 41, - 153, - 121, - 35, - 33, - 157, - 143, - 143, - 195, - 139, - 71, - 196, - 84, - 47, - 189, - 83, - 179, - 183, - 111, - 135, - 190, - 11, - 160, - 127, - 3, - 254, - 83, - 160, - 77, - 128, - 239, - 79, - 224, - 243, - 129, - 175, - 14, - 93, - 19, - 208, - 213, - 7, - 93, - 35, - 208, - 245, - 55, - 232, - 42, - 2, - 103, - 192, - 199, - 143, - 252, - 163, - 213, - 108, - 241, - 243, - 142, - 33, - 174, - 182, - 113, - 88, - 180, - 221, - 27, - 17, - 133, - 107, - 181, - 100, - 207, - 221, - 81, - 97, - 251, - 226, - 53, - 153, - 249, - 185, - 243, - 210, - 57, - 192, - 139, - 71, - 224, - 229, - 151, - 224, - 241, - 50, - 12, - 236, - 3, - 235, - 132, - 26, - 193, - 29, - 53, - 2, - 19, - 180, - 188, - 26, - 193, - 101, - 53, - 130, - 36, - 248, - 108, - 208, - 28, - 251, - 1, - 18, - 230, - 20, - 9, - 175, - 40, - 18, - 150, - 132, - 132, - 43, - 179, - 178, - 231, - 149, - 184, - 176, - 253, - 234, - 251, - 50, - 243, - 237, - 219, - 165, - 139, - 151, - 95, - 146, - 130, - 14, - 36, - 96, - 87, - 28, - 98, - 147, - 16, - 205, - 63, - 64, - 194, - 48, - 4, - 11, - 138, - 132, - 57, - 69, - 194, - 231, - 160, - 123, - 143, - 66, - 224, - 127, - 107, - 56, - 165, - 214, - 48, - 47, - 198, - 178, - 86, - 82, - 242, - 90, - 16, - 145, - 249, - 226, - 19, - 89, - 181, - 3, - 137, - 154, - 253, - 120, - 89, - 102, - 14, - 210, - 249, - 129, - 4, - 92, - 189, - 13, - 78, - 28, - 118, - 254, - 234, - 123, - 107, - 184, - 13, - 66, - 121, - 208, - 95, - 131, - 64, - 83, - 173, - 97, - 74, - 173, - 161, - 99, - 75, - 140, - 106, - 133, - 84, - 152, - 240, - 148, - 165, - 158, - 16, - 99, - 169, - 86, - 69, - 94, - 23, - 62, - 22, - 145, - 217, - 91, - 118, - 236, - 93, - 138, - 237, - 250, - 55, - 82, - 192, - 192, - 62, - 233, - 220, - 137, - 195, - 92, - 28, - 220, - 105, - 184, - 247, - 160, - 16, - 141, - 64, - 239, - 41, - 8, - 221, - 0, - 93, - 83, - 66, - 148, - 4, - 255, - 144, - 66, - 160, - 121, - 29, - 154, - 159, - 170, - 36, - 243, - 148, - 242, - 243, - 146, - 184, - 218, - 210, - 146, - 104, - 251, - 173, - 188, - 40, - 220, - 206, - 39, - 101, - 207, - 173, - 105, - 97, - 59, - 200, - 204, - 99, - 147, - 210, - 185, - 59, - 13, - 243, - 147, - 208, - 156, - 0, - 247, - 107, - 88, - 93, - 133, - 72, - 24, - 204, - 2, - 244, - 190, - 3, - 198, - 77, - 37, - 197, - 73, - 37, - 197, - 142, - 173, - 2, - 228, - 239, - 85, - 140, - 122, - 93, - 194, - 132, - 243, - 130, - 88, - 106, - 165, - 34, - 198, - 50, - 50, - 225, - 216, - 67, - 79, - 43, - 104, - 239, - 10, - 201, - 180, - 9, - 41, - 192, - 152, - 149, - 153, - 111, - 179, - 164, - 243, - 230, - 132, - 20, - 220, - 30, - 134, - 70, - 3, - 92, - 19, - 220, - 188, - 50, - 163, - 55, - 149, - 25, - 165, - 32, - 104, - 43, - 4, - 214, - 39, - 193, - 13, - 169, - 12, - 119, - 67, - 146, - 204, - 242, - 81, - 241, - 243, - 82, - 89, - 92, - 45, - 254, - 181, - 130, - 52, - 45, - 228, - 210, - 23, - 100, - 207, - 65, - 216, - 30, - 30, - 146, - 247, - 6, - 46, - 72, - 231, - 237, - 97, - 184, - 243, - 21, - 120, - 30, - 52, - 195, - 208, - 44, - 64, - 163, - 2, - 225, - 156, - 178, - 227, - 36, - 132, - 238, - 111, - 129, - 123, - 8, - 214, - 202, - 18, - 32, - 239, - 29, - 147, - 24, - 181, - 100, - 74, - 152, - 24, - 140, - 59, - 118, - 44, - 38, - 174, - 22, - 141, - 10, - 169, - 12, - 67, - 214, - 203, - 167, - 84, - 36, - 16, - 144, - 51, - 211, - 148, - 103, - 86, - 87, - 165, - 115, - 207, - 147, - 6, - 60, - 19, - 218, - 121, - 104, - 6, - 160, - 177, - 3, - 26, - 223, - 66, - 35, - 9, - 70, - 80, - 33, - 176, - 118, - 9, - 86, - 222, - 148, - 244, - 234, - 108, - 145, - 12, - 183, - 88, - 144, - 36, - 243, - 112, - 93, - 249, - 121, - 93, - 92, - 173, - 167, - 46, - 218, - 238, - 95, - 16, - 133, - 3, - 217, - 115, - 61, - 44, - 108, - 55, - 71, - 100, - 230, - 174, - 41, - 157, - 123, - 38, - 84, - 76, - 232, - 164, - 193, - 75, - 40, - 231, - 125, - 5, - 90, - 41, - 104, - 205, - 43, - 4, - 86, - 13, - 168, - 27, - 18, - 157, - 171, - 7, - 37, - 64, - 14, - 164, - 29, - 123, - 235, - 103, - 146, - 100, - 34, - 105, - 229, - 231, - 105, - 113, - 181, - 224, - 171, - 162, - 237, - 93, - 138, - 3, - 90, - 94, - 246, - 60, - 148, - 23, - 182, - 155, - 5, - 153, - 121, - 179, - 32, - 157, - 119, - 210, - 210, - 80, - 103, - 20, - 188, - 43, - 208, - 174, - 66, - 59, - 9, - 173, - 231, - 20, - 2, - 245, - 10, - 220, - 115, - 37, - 183, - 47, - 171, - 244, - 218, - 159, - 144, - 12, - 103, - 85, - 132, - 60, - 189, - 61, - 202, - 207, - 199, - 68, - 80, - 186, - 119, - 139, - 182, - 131, - 252, - 237, - 63, - 40, - 123, - 30, - 186, - 33, - 108, - 55, - 231, - 100, - 230, - 205, - 128, - 116, - 222, - 25, - 149, - 198, - 58, - 57, - 216, - 248, - 45, - 120, - 73, - 240, - 98, - 10, - 129, - 122, - 10, - 156, - 25, - 185, - 52, - 244, - 159, - 116, - 236, - 104, - 70, - 210, - 107, - 223, - 14, - 149, - 225, - 50, - 42, - 201, - 60, - 35, - 126, - 174, - 29, - 23, - 87, - 235, - 26, - 81, - 5, - 92, - 22, - 133, - 11, - 52, - 101, - 207, - 141, - 155, - 194, - 246, - 112, - 78, - 102, - 222, - 46, - 74, - 231, - 157, - 28, - 44, - 79, - 65, - 199, - 134, - 78, - 10, - 54, - 108, - 248, - 241, - 175, - 102, - 142, - 45, - 23, - 197, - 200, - 140, - 99, - 71, - 82, - 234, - 198, - 242, - 174, - 202, - 237, - 51, - 42, - 189, - 22, - 37, - 195, - 5, - 138, - 146, - 100, - 186, - 213, - 69, - 182, - 171, - 40, - 5, - 248, - 146, - 162, - 237, - 254, - 148, - 40, - 92, - 48, - 41, - 123, - 110, - 36, - 133, - 237, - 173, - 148, - 204, - 220, - 75, - 74, - 231, - 155, - 51, - 224, - 164, - 96, - 51, - 171, - 56, - 96, - 101, - 107, - 25, - 43, - 45, - 119, - 53, - 51, - 38, - 55, - 150, - 158, - 121, - 201, - 237, - 161, - 105, - 73, - 175, - 193, - 113, - 149, - 225, - 60, - 73, - 50, - 190, - 247, - 128, - 51, - 170, - 0, - 91, - 25, - 139, - 39, - 242, - 26, - 28, - 23, - 145, - 9, - 217, - 178, - 106, - 173, - 121, - 33, - 156, - 23, - 19, - 216, - 59, - 105, - 249, - 242, - 154, - 13, - 255, - 5, - 32, - 2, - 199, - 15, -] -`; - -exports[`imgData browser interlaced-grayscale-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 181, - 144, - 93, - 10, - 194, - 48, - 16, - 132, - 157, - 186, - 200, - 28, - 66, - 196, - 123, - 248, - 67, - 207, - 37, - 62, - 136, - 120, - 176, - 170, - 23, - 17, - 15, - 33, - 75, - 220, - 166, - 190, - 36, - 15, - 93, - 33, - 165, - 148, - 206, - 211, - 228, - 155, - 205, - 50, - 44, - 22, - 36, - 17, - 85, - 21, - 21, - 73, - 152, - 170, - 66, - 72, - 34, - 168, - 42, - 86, - 36, - 161, - 170, - 138, - 139, - 36, - 197, - 143, - 153, - 153, - 153, - 8, - 19, - 9, - 137, - 160, - 74, - 0, - 215, - 108, - 44, - 9, - 231, - 108, - 242, - 26, - 220, - 178, - 9, - 57, - 58, - 101, - 83, - 87, - 125, - 161, - 113, - 64, - 162, - 197, - 158, - 112, - 236, - 191, - 163, - 136, - 223, - 241, - 240, - 59, - 130, - 251, - 130, - 189, - 7, - 240, - 95, - 124, - 177, - 63, - 128, - 187, - 7, - 173, - 47, - 214, - 12, - 1, - 28, - 60, - 88, - 142, - 239, - 241, - 244, - 224, - 59, - 190, - 199, - 206, - 131, - 45, - 202, - 146, - 122, - 234, - 0, - 94, - 67, - 27, - 98, - 87, - 150, - 52, - 83, - 7, - 176, - 25, - 200, - 69, - 230, - 191, - 195, - 187, - 152, - 118, - 157, - 132, - 249, - 239, - 176, - 46, - 166, - 192, - 15, - 155, - 185, - 255, - 69, -] -`; - -exports[`imgData browser interlaced-pallete-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 101, - 208, - 105, - 92, - 11, - 0, - 24, - 6, - 240, - 55, - 17, - 169, - 144, - 74, - 148, - 210, - 77, - 172, - 99, - 41, - 41, - 73, - 229, - 168, - 16, - 210, - 68, - 88, - 138, - 20, - 202, - 81, - 97, - 209, - 161, - 50, - 57, - 115, - 37, - 34, - 66, - 214, - 33, - 87, - 209, - 42, - 228, - 152, - 200, - 18, - 77, - 37, - 202, - 58, - 17, - 57, - 138, - 22, - 229, - 90, - 60, - 223, - 250, - 176, - 255, - 231, - 247, - 125, - 127, - 207, - 243, - 82, - 134, - 69, - 52, - 155, - 88, - 76, - 49, - 135, - 130, - 77, - 157, - 25, - 212, - 236, - 46, - 53, - 35, - 158, - 176, - 174, - 151, - 92, - 248, - 222, - 2, - 242, - 72, - 109, - 80, - 33, - 145, - 132, - 27, - 66, - 150, - 122, - 26, - 212, - 158, - 93, - 220, - 66, - 101, - 246, - 154, - 137, - 158, - 38, - 181, - 233, - 228, - 104, - 24, - 27, - 170, - 227, - 167, - 26, - 65, - 185, - 86, - 105, - 218, - 141, - 242, - 234, - 53, - 148, - 193, - 179, - 16, - 70, - 215, - 177, - 123, - 251, - 134, - 89, - 46, - 76, - 190, - 216, - 155, - 35, - 232, - 219, - 10, - 246, - 48, - 77, - 117, - 110, - 96, - 168, - 244, - 173, - 55, - 139, - 220, - 37, - 82, - 174, - 89, - 72, - 223, - 29, - 53, - 181, - 33, - 67, - 20, - 21, - 51, - 51, - 187, - 187, - 171, - 171, - 235, - 235, - 59, - 59, - 201, - 201, - 201, - 198, - 198, - 192, - 192, - 215, - 183, - 181, - 53, - 50, - 50, - 37, - 165, - 170, - 138, - 2, - 2, - 74, - 75, - 237, - 236, - 10, - 10, - 42, - 43, - 205, - 205, - 125, - 124, - 242, - 243, - 169, - 169, - 201, - 205, - 205, - 216, - 184, - 173, - 205, - 213, - 181, - 171, - 171, - 168, - 40, - 41, - 137, - 130, - 130, - 74, - 74, - 178, - 178, - 18, - 18, - 172, - 173, - 189, - 188, - 20, - 20, - 226, - 226, - 72, - 89, - 185, - 167, - 39, - 48, - 48, - 47, - 79, - 73, - 41, - 44, - 76, - 87, - 55, - 60, - 156, - 10, - 11, - 115, - 114, - 140, - 140, - 28, - 28, - 58, - 58, - 146, - 147, - 109, - 109, - 253, - 253, - 41, - 62, - 62, - 38, - 38, - 42, - 74, - 78, - 174, - 162, - 66, - 75, - 75, - 95, - 191, - 188, - 156, - 50, - 50, - 120, - 60, - 11, - 11, - 161, - 48, - 58, - 186, - 174, - 142, - 205, - 238, - 237, - 149, - 13, - 102, - 105, - 169, - 167, - 167, - 161, - 65, - 212, - 222, - 158, - 157, - 93, - 92, - 220, - 210, - 34, - 155, - 148, - 197, - 114, - 113, - 97, - 50, - 249, - 124, - 177, - 216, - 219, - 155, - 195, - 17, - 8, - 100, - 163, - 151, - 149, - 217, - 219, - 107, - 106, - 38, - 38, - 122, - 122, - 154, - 152, - 212, - 214, - 166, - 167, - 203, - 118, - 9, - 14, - 246, - 240, - 48, - 53, - 77, - 77, - 117, - 118, - 110, - 104, - 96, - 48, - 84, - 84, - 100, - 203, - 57, - 58, - 26, - 26, - 198, - 198, - 134, - 134, - 234, - 232, - 248, - 249, - 169, - 170, - 70, - 68, - 200, - 182, - 109, - 110, - 22, - 137, - 220, - 221, - 37, - 18, - 169, - 148, - 203, - 53, - 51, - 11, - 9, - 145, - 173, - 159, - 155, - 107, - 101, - 149, - 150, - 166, - 173, - 221, - 216, - 40, - 47, - 175, - 174, - 94, - 83, - 35, - 251, - 143, - 65, - 208, - 31, - 118, - 194, - 47, - 216, - 6, - 27, - 224, - 27, - 252, - 4, - 26, - 3, - 35, - 225, - 0, - 44, - 129, - 205, - 48, - 11, - 158, - 192, - 39, - 160, - 201, - 48, - 1, - 78, - 192, - 53, - 88, - 15, - 195, - 225, - 18, - 188, - 6, - 154, - 11, - 83, - 225, - 28, - 12, - 128, - 149, - 240, - 1, - 118, - 193, - 99, - 160, - 229, - 48, - 27, - 174, - 192, - 106, - 88, - 6, - 119, - 96, - 13, - 220, - 5, - 186, - 15, - 19, - 225, - 32, - 188, - 129, - 167, - 112, - 19, - 62, - 195, - 85, - 160, - 23, - 48, - 13, - 78, - 194, - 12, - 120, - 0, - 187, - 225, - 33, - 156, - 2, - 250, - 8, - 243, - 225, - 60, - 28, - 133, - 219, - 176, - 10, - 46, - 192, - 94, - 160, - 223, - 240, - 10, - 110, - 193, - 90, - 152, - 2, - 115, - 96, - 7, - 12, - 4, - 122, - 6, - 215, - 225, - 8, - 92, - 132, - 241, - 176, - 20, - 246, - 192, - 63, - 160, - 179, - 48, - 24, - 182, - 192, - 33, - 24, - 1, - 235, - 224, - 24, - 252, - 0, - 218, - 10, - 111, - 97, - 17, - 60, - 135, - 126, - 176, - 29, - 78, - 195, - 23, - 160, - 133, - 112, - 15, - 38, - 193, - 48, - 248, - 14, - 251, - 225, - 50, - 188, - 3, - 154, - 7, - 51, - 225, - 6, - 252, - 129, - 247, - 240, - 23, - 246, - 193, - 10, - 160, - 209, - 48, - 10, - 14, - 195, - 116, - 120, - 9, - 67, - 225, - 56, - 44, - 6, - 250, - 10, - 155, - 96, - 35, - 140, - 131, - 71, - 48, - 22, - 206, - 192, - 2, - 248, - 15, - 115, - 254, - 254, - 16, -] -`; - -exports[`imgData browser interlaced-rgb-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 213, - 147, - 65, - 170, - 4, - 33, - 12, - 68, - 171, - 192, - 123, - 120, - 19, - 61, - 89, - 211, - 115, - 51, - 189, - 137, - 215, - 104, - 104, - 181, - 102, - 209, - 12, - 244, - 103, - 90, - 248, - 89, - 100, - 49, - 161, - 22, - 98, - 124, - 86, - 136, - 145, - 146, - 128, - 227, - 18, - 37, - 125, - 214, - 160, - 164, - 207, - 26, - 1, - 0, - 142, - 227, - 18, - 165, - 243, - 198, - 156, - 55, - 230, - 252, - 195, - 244, - 126, - 103, - 118, - 160, - 127, - 139, - 218, - 245, - 180, - 15, - 238, - 210, - 211, - 62, - 2, - 94, - 47, - 244, - 254, - 45, - 74, - 99, - 225, - 161, - 109, - 145, - 24, - 11, - 115, - 109, - 139, - 196, - 88, - 84, - 197, - 109, - 149, - 24, - 99, - 244, - 167, - 224, - 182, - 109, - 207, - 9, - 169, - 0, - 243, - 255, - 162, - 148, - 141, - 64, - 145, - 229, - 60, - 168, - 108, - 4, - 138, - 100, - 57, - 15, - 102, - 43, - 80, - 74, - 153, - 150, - 96, - 206, - 217, - 6, - 24, - 43, - 154, - 1, - 168, - 190, - 0, - 165, - 100, - 4, - 166, - 237, - 225, - 130, - 177, - 34, - 59, - 64, - 37, - 227, - 44, - 77, - 227, - 67, - 4, - 99, - 69, - 118, - 128, - 201, - 58, - 173, - 166, - 201, - 155, - 115, - 134, - 90, - 171, - 47, - 192, - 148, - 146, - 13, - 144, - 26, - 32, - 63, - 93, - 223, - 225, - 151, - 13, - 40, - 69, - 103, - 131, - 38, - 207, - 251, - 175, - 239, - 252, - 211, - 6, - 84, - 244, - 109, - 17, - 155, - 228, - 121, - 63, - 130, - 115, - 135, - 252, - 13, - 24, - 157, - 91, - 196, - 214, - 154, - 60, - 35, - 212, - 90, - 127, - 219, - 128, - 49, - 70, - 87, - 131, - 55, - 223, - 77, - 10, - 49, -] -`; - -exports[`imgData browser interlaced-rgb-16bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 213, - 150, - 33, - 115, - 227, - 48, - 16, - 133, - 63, - 207, - 24, - 56, - 204, - 97, - 161, - 129, - 129, - 133, - 165, - 62, - 86, - 120, - 127, - 161, - 63, - 161, - 48, - 133, - 46, - 59, - 88, - 120, - 180, - 176, - 176, - 48, - 129, - 185, - 127, - 112, - 48, - 7, - 11, - 83, - 230, - 176, - 87, - 160, - 168, - 145, - 43, - 187, - 145, - 99, - 185, - 241, - 9, - 236, - 236, - 188, - 89, - 189, - 125, - 207, - 43, - 69, - 73, - 36, - 9, - 214, - 111, - 0, - 235, - 29, - 216, - 60, - 181, - 73, - 125, - 101, - 69, - 106, - 235, - 142, - 16, - 64, - 145, - 59, - 59, - 44, - 4, - 80, - 76, - 147, - 109, - 213, - 169, - 199, - 226, - 198, - 235, - 177, - 184, - 241, - 122, - 88, - 232, - 208, - 67, - 218, - 86, - 240, - 111, - 15, - 159, - 98, - 229, - 33, - 123, - 107, - 163, - 161, - 183, - 111, - 108, - 158, - 153, - 232, - 105, - 106, - 42, - 114, - 226, - 196, - 251, - 30, - 77, - 69, - 46, - 146, - 236, - 150, - 82, - 184, - 7, - 72, - 109, - 18, - 182, - 102, - 155, - 224, - 13, - 179, - 141, - 145, - 20, - 176, - 193, - 150, - 30, - 55, - 84, - 97, - 165, - 95, - 118, - 104, - 42, - 133, - 195, - 103, - 173, - 111, - 104, - 47, - 245, - 58, - 156, - 42, - 53, - 49, - 145, - 118, - 75, - 120, - 187, - 7, - 216, - 221, - 195, - 201, - 124, - 25, - 80, - 243, - 145, - 103, - 69, - 199, - 185, - 133, - 44, - 115, - 194, - 242, - 18, - 96, - 90, - 70, - 106, - 80, - 39, - 5, - 200, - 51, - 128, - 105, - 200, - 185, - 232, - 78, - 250, - 185, - 65, - 235, - 57, - 58, - 151, - 212, - 201, - 253, - 99, - 20, - 131, - 20, - 32, - 159, - 28, - 29, - 52, - 52, - 232, - 71, - 234, - 214, - 56, - 13, - 226, - 145, - 214, - 242, - 106, - 37, - 193, - 235, - 181, - 4, - 127, - 95, - 36, - 216, - 92, - 73, - 240, - 242, - 44, - 193, - 211, - 66, - 130, - 199, - 39, - 9, - 202, - 185, - 4, - 119, - 191, - 37, - 184, - 157, - 73, - 240, - 243, - 81, - 130, - 34, - 151, - 224, - 234, - 151, - 4, - 243, - 76, - 130, - 188, - 148, - 0, - 36, - 72, - 237, - 229, - 24, - 102, - 229, - 101, - 106, - 239, - 93, - 124, - 106, - 56, - 92, - 180, - 216, - 14, - 106, - 83, - 140, - 235, - 160, - 78, - 109, - 242, - 72, - 14, - 154, - 168, - 77, - 222, - 219, - 65, - 59, - 181, - 201, - 123, - 56, - 56, - 69, - 109, - 242, - 212, - 254, - 194, - 199, - 167, - 6, - 152, - 62, - 116, - 116, - 208, - 133, - 250, - 232, - 32, - 168, - 65, - 119, - 106, - 131, - 7, - 56, - 56, - 151, - 58, - 192, - 65, - 63, - 234, - 47, - 29, - 196, - 160, - 110, - 113, - 16, - 143, - 218, - 115, - 16, - 155, - 218, - 228, - 137, - 84, - 173, - 96, - 191, - 134, - 122, - 172, - 60, - 228, - 76, - 124, - 21, - 137, - 167, - 17, - 207, - 138, - 129, - 223, - 155, - 33, - 150, - 121, - 217, - 109, - 28, - 236, - 61, - 139, - 187, - 234, - 162, - 1, - 38, - 38, - 223, - 140, - 120, - 2, - 237, - 162, - 1, - 178, - 210, - 224, - 35, - 155, - 64, - 152, - 104, - 23, - 31, - 193, - 4, - 186, - 139, - 118, - 241, - 11, - 77, - 160, - 159, - 104, - 23, - 255, - 198, - 9, - 196, - 19, - 237, - 226, - 103, - 253, - 31, - 186, - 180, - 104, - 128, - 201, - 15, - 128, - 236, - 207, - 0, - 19, - 24, - 94, - 180, - 139, - 71, - 186, - 3, - 223, - 43, - 218, - 173, - 239, - 49, - 129, - 203, - 137, - 118, - 241, - 142, - 19, - 24, - 135, - 104, - 23, - 15, - 152, - 192, - 248, - 68, - 187, - 120, - 203, - 4, - 198, - 45, - 218, - 197, - 157, - 9, - 252, - 63, - 162, - 93, - 252, - 29, - 164, - 20, - 222, - 179, -] -`; - -exports[`imgData browser interlaced-rgb-alpha-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 197, - 149, - 65, - 78, - 195, - 48, - 16, - 69, - 159, - 165, - 65, - 184, - 187, - 178, - 102, - 65, - 184, - 6, - 155, - 134, - 30, - 139, - 77, - 18, - 193, - 193, - 18, - 193, - 69, - 42, - 113, - 10, - 42, - 101, - 216, - 64, - 213, - 148, - 144, - 65, - 252, - 72, - 30, - 201, - 138, - 226, - 124, - 127, - 63, - 141, - 39, - 227, - 228, - 100, - 128, - 71, - 96, - 15, - 236, - 13, - 31, - 57, - 15, - 187, - 226, - 99, - 58, - 49, - 226, - 147, - 137, - 228, - 228, - 234, - 123, - 253, - 191, - 61, - 154, - 107, - 128, - 10, - 184, - 159, - 27, - 214, - 181, - 83, - 207, - 203, - 176, - 103, - 158, - 150, - 5, - 99, - 215, - 46, - 10, - 146, - 147, - 183, - 51, - 123, - 159, - 152, - 140, - 198, - 127, - 95, - 14, - 24, - 109, - 32, - 232, - 8, - 4, - 47, - 28, - 151, - 5, - 78, - 19, - 9, - 218, - 64, - 208, - 45, - 126, - 39, - 249, - 46, - 3, - 108, - 191, - 198, - 77, - 240, - 252, - 49, - 23, - 166, - 33, - 10, - 27, - 106, - 209, - 160, - 13, - 242, - 28, - 26, - 188, - 242, - 160, - 25, - 68, - 199, - 16, - 27, - 12, - 181, - 104, - 160, - 1, - 144, - 156, - 156, - 249, - 227, - 153, - 207, - 61, - 141, - 157, - 70, - 96, - 168, - 117, - 64, - 93, - 154, - 96, - 208, - 0, - 176, - 94, - 45, - 229, - 94, - 37, - 120, - 11, - 122, - 82, - 104, - 224, - 98, - 33, - 24, - 226, - 57, - 154, - 171, - 6, - 58, - 129, - 88, - 8, - 70, - 47, - 26, - 184, - 104, - 144, - 252, - 46, - 3, - 228, - 139, - 177, - 9, - 222, - 215, - 210, - 108, - 228, - 191, - 89, - 13, - 185, - 27, - 172, - 0, - 80, - 116, - 127, - 236, - 80, - 21, - 206, - 128, - 218, - 14, - 87, - 0, - 40, - 27, - 229, - 51, - 240, - 206, - 109, - 89, - 0, - 181, - 155, - 203, - 0, - 234, - 109, - 32, - 3, - 20, - 207, - 128, - 31, - 170, - 178, - 0, - 234, - 117, - 40, - 3, - 168, - 215, - 169, - 12, - 80, - 58, - 3, - 159, - 130, - 74, - 83, - 244, -] -`; - -exports[`imgData browser rgb-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 237, - 213, - 193, - 9, - 0, - 48, - 12, - 2, - 64, - 133, - 236, - 145, - 253, - 183, - 114, - 19, - 59, - 68, - 43, - 244, - 161, - 248, - 206, - 225, - 43, - 180, - 13, - 4, - 59, - 128, - 10, - 20, - 248, - 28, - 160, - 237, - 228, - 125, - 76, - 120, - 64, - 129, - 2, - 15, - 74, - 135, - 31, - 194, - 132, - 7, - 20, - 40, - 240, - 160, - 116, - 56, - 35, - 169, - 64, - 129, - 187, - 112, - 119, - 163, - 192, - 1, - 130, - 177, - 249, - 94, -] -`; - -exports[`imgData browser rgb-16bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 213, - 150, - 193, - 10, - 131, - 48, - 16, - 68, - 167, - 224, - 65, - 127, - 203, - 126, - 183, - 253, - 173, - 246, - 150, - 30, - 6, - 3, - 146, - 134, - 38, - 102, - 147, - 204, - 122, - 24, - 134, - 69, - 228, - 61, - 214, - 160, - 143, - 16, - 66, - 0, - 62, - 47, - 224, - 154, - 239, - 100, - 114, - 115, - 126, - 24, - 61, - 39, - 51, - 95, - 206, - 226, - 243, - 90, - 119, - 183, - 2, - 235, - 206, - 116, - 40, - 112, - 162, - 51, - 151, - 243, - 237, - 242, - 112, - 93, - 209, - 1, - 96, - 243, - 178, - 129, - 95, - 232, - 236, - 242, - 2, - 121, - 116, - 166, - 176, - 192, - 63, - 116, - 166, - 228, - 25, - 40, - 67, - 231, - 92, - 108, - 3, - 53, - 232, - 236, - 50, - 2, - 245, - 232, - 76, - 1, - 129, - 187, - 232, - 204, - 169, - 103, - 160, - 13, - 157, - 243, - 73, - 27, - 176, - 64, - 103, - 31, - 46, - 96, - 135, - 206, - 28, - 40, - 96, - 141, - 30, - 5, - 248, - 199, - 238, - 15, - 29, - 0, - 182, - 103, - 231, - 13, - 244, - 68, - 103, - 239, - 38, - 208, - 31, - 189, - 155, - 192, - 40, - 244, - 40, - 96, - 247, - 29, - 24, - 139, - 206, - 251, - 141, - 54, - 48, - 3, - 157, - 189, - 89, - 96, - 30, - 122, - 179, - 192, - 108, - 244, - 40, - 80, - 127, - 6, - 52, - 208, - 57, - 175, - 220, - 128, - 18, - 58, - 123, - 177, - 128, - 30, - 122, - 177, - 128, - 42, - 122, - 20, - 200, - 159, - 1, - 109, - 116, - 206, - 51, - 27, - 240, - 128, - 206, - 158, - 8, - 248, - 65, - 79, - 4, - 188, - 161, - 51, - 191, - 230, - 66, - 254, - 94, -] -`; - -exports[`imgData browser rgb-alpha-8bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 237, - 214, - 49, - 10, - 128, - 48, - 12, - 70, - 225, - 39, - 100, - 104, - 79, - 161, - 247, - 63, - 85, - 4, - 143, - 33, - 196, - 221, - 197, - 69, - 120, - 29, - 82, - 232, - 80, - 40, - 252, - 31, - 77, - 40, - 217, - 138, - 1, - 48, - 94, - 123, - 126, - 156, - 255, - 186, - 51, - 131, - 29, - 117, - 5, - 71, - 3, - 202, - 6, - 168, - 249, - 13, - 88, - 160, - 7, - 78, - 53, - 30, - 34, - 125, - 128, - 92, - 130, - 84, - 227, - 27, - 176, - 66, - 15, - 92, - 220, - 46, - 0, - 121, - 32, - 136, - 146, - 255, - 226, - 160, - 1, - 54, - 160, - 123, - 64, - 7, - 148, - 60, - 16, - 4, - 217, - 0, - 25, - 80, - 54, - 64, - 127, - 1, - 27, - 240, - 0, - 82, - 32, - 26, - 156, -] -`; - -exports[`imgData browser rgb-alpha-16bit.png 1`] = ` -Uint8Array [ - 120, - 156, - 221, - 153, - 95, - 108, - 28, - 215, - 117, - 198, - 127, - 243, - 143, - 179, - 75, - 114, - 77, - 46, - 229, - 90, - 142, - 75, - 4, - 160, - 172, - 135, - 4, - 145, - 0, - 202, - 180, - 219, - 216, - 198, - 82, - 137, - 2, - 203, - 77, - 16, - 136, - 22, - 32, - 89, - 46, - 82, - 212, - 50, - 90, - 192, - 144, - 91, - 201, - 138, - 148, - 2, - 94, - 113, - 253, - 98, - 44, - 181, - 6, - 90, - 201, - 138, - 12, - 40, - 48, - 80, - 192, - 114, - 138, - 0, - 182, - 229, - 66, - 161, - 209, - 38, - 136, - 92, - 211, - 41, - 137, - 40, - 137, - 29, - 154, - 4, - 68, - 3, - 126, - 144, - 68, - 52, - 149, - 29, - 75, - 144, - 184, - 75, - 47, - 201, - 221, - 225, - 252, - 235, - 195, - 57, - 119, - 169, - 85, - 85, - 52, - 143, - 65, - 30, - 22, - 223, - 206, - 157, - 59, - 119, - 238, - 119, - 238, - 189, - 231, - 124, - 231, - 140, - 149, - 166, - 105, - 10, - 208, - 124, - 23, - 0, - 154, - 19, - 237, - 216, - 152, - 184, - 125, - 251, - 31, - 203, - 125, - 43, - 77, - 27, - 255, - 33, - 127, - 51, - 223, - 128, - 222, - 177, - 230, - 38, - 125, - 240, - 255, - 193, - 230, - 230, - 223, - 175, - 223, - 31, - 90, - 127, - 211, - 15, - 154, - 239, - 102, - 182, - 213, - 70, - 221, - 53, - 91, - 240, - 44, - 64, - 102, - 46, - 51, - 7, - 249, - 114, - 90, - 150, - 198, - 116, - 76, - 48, - 49, - 248, - 55, - 130, - 241, - 113, - 193, - 72, - 219, - 195, - 191, - 23, - 116, - 245, - 218, - 209, - 231, - 157, - 111, - 9, - 90, - 63, - 84, - 212, - 251, - 236, - 82, - 52, - 239, - 217, - 162, - 248, - 215, - 58, - 254, - 79, - 20, - 245, - 126, - 244, - 244, - 45, - 239, - 123, - 68, - 241, - 144, - 96, - 240, - 107, - 69, - 189, - 223, - 28, - 85, - 52, - 215, - 127, - 217, - 34, - 190, - 41, - 115, - 161, - 90, - 130, - 230, - 72, - 102, - 28, - 110, - 50, - 64, - 170, - 54, - 18, - 234, - 217, - 82, - 182, - 4, - 189, - 229, - 116, - 88, - 137, - 79, - 41, - 222, - 175, - 19, - 59, - 172, - 19, - 210, - 118, - 111, - 82, - 39, - 164, - 163, - 184, - 207, - 8, - 218, - 122, - 223, - 214, - 251, - 214, - 189, - 138, - 79, - 233, - 219, - 180, - 61, - 53, - 227, - 223, - 163, - 248, - 68, - 251, - 248, - 145, - 25, - 191, - 79, - 113, - 68, - 9, - 79, - 181, - 99, - 51, - 171, - 248, - 168, - 96, - 99, - 202, - 16, - 111, - 148, - 179, - 163, - 181, - 18, - 52, - 55, - 101, - 230, - 0, - 130, - 9, - 127, - 27, - 184, - 107, - 167, - 36, - 57, - 166, - 83, - 81, - 155, - 9, - 245, - 206, - 225, - 206, - 97, - 200, - 151, - 211, - 126, - 237, - 245, - 85, - 53, - 128, - 174, - 96, - 244, - 175, - 138, - 243, - 58, - 177, - 79, - 212, - 0, - 182, - 160, - 243, - 69, - 53, - 192, - 67, - 74, - 252, - 11, - 58, - 159, - 7, - 20, - 117, - 39, - 165, - 250, - 124, - 162, - 24, - 255, - 86, - 199, - 77, - 116, - 220, - 63, - 21, - 92, - 253, - 51, - 37, - 252, - 39, - 138, - 207, - 42, - 225, - 203, - 74, - 83, - 159, - 95, - 153, - 55, - 196, - 87, - 38, - 59, - 11, - 213, - 18, - 52, - 199, - 50, - 163, - 0, - 205, - 209, - 204, - 24, - 64, - 240, - 170, - 255, - 84, - 219, - 14, - 72, - 116, - 237, - 90, - 155, - 93, - 109, - 39, - 212, - 187, - 54, - 116, - 109, - 128, - 222, - 114, - 186, - 168, - 119, - 255, - 75, - 39, - 90, - 215, - 137, - 94, - 209, - 137, - 126, - 164, - 19, - 155, - 81, - 67, - 252, - 187, - 26, - 98, - 86, - 13, - 161, - 237, - 150, - 98, - 170, - 237, - 137, - 94, - 199, - 138, - 145, - 193, - 135, - 149, - 184, - 94, - 7, - 171, - 74, - 248, - 186, - 18, - 142, - 149, - 230, - 130, - 224, - 114, - 139, - 248, - 242, - 229, - 174, - 129, - 90, - 9, - 26, - 83, - 217, - 2, - 172, - 25, - 32, - 216, - 224, - 95, - 6, - 88, - 157, - 232, - 216, - 214, - 102, - 128, - 120, - 159, - 78, - 69, - 79, - 185, - 217, - 236, - 102, - 205, - 133, - 122, - 247, - 150, - 238, - 45, - 144, - 47, - 167, - 63, - 213, - 187, - 167, - 117, - 162, - 21, - 53, - 128, - 174, - 68, - 112, - 94, - 208, - 211, - 118, - 71, - 209, - 86, - 151, - 203, - 143, - 20, - 191, - 163, - 227, - 232, - 253, - 248, - 3, - 29, - 71, - 175, - 87, - 21, - 3, - 53, - 124, - 243, - 13, - 37, - 172, - 237, - 203, - 191, - 19, - 92, - 154, - 53, - 196, - 151, - 102, - 186, - 7, - 171, - 37, - 88, - 89, - 232, - 236, - 3, - 104, - 78, - 102, - 134, - 1, - 130, - 223, - 248, - 247, - 3, - 4, - 191, - 246, - 255, - 28, - 32, - 252, - 129, - 183, - 175, - 221, - 0, - 167, - 20, - 117, - 83, - 154, - 83, - 110, - 54, - 187, - 89, - 115, - 161, - 158, - 59, - 146, - 59, - 2, - 189, - 229, - 228, - 239, - 212, - 0, - 58, - 193, - 112, - 235, - 45, - 19, - 254, - 39, - 65, - 87, - 175, - 237, - 189, - 130, - 214, - 251, - 58, - 154, - 30, - 133, - 228, - 85, - 29, - 71, - 207, - 112, - 120, - 248, - 150, - 113, - 254, - 66, - 137, - 235, - 245, - 242, - 191, - 8, - 214, - 63, - 55, - 196, - 235, - 71, - 115, - 197, - 90, - 9, - 150, - 239, - 238, - 250, - 12, - 160, - 17, - 103, - 29, - 128, - 96, - 202, - 47, - 0, - 4, - 199, - 252, - 195, - 0, - 225, - 102, - 239, - 2, - 64, - 248, - 37, - 239, - 227, - 54, - 31, - 16, - 109, - 87, - 212, - 35, - 208, - 114, - 63, - 122, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 123, - 122, - 122, - 122, - 32, - 95, - 78, - 244, - 172, - 70, - 145, - 224, - 170, - 217, - 170, - 13, - 65, - 207, - 19, - 116, - 28, - 53, - 128, - 165, - 6, - 72, - 117, - 116, - 221, - 202, - 97, - 168, - 196, - 3, - 193, - 134, - 62, - 191, - 188, - 172, - 52, - 117, - 22, - 139, - 45, - 226, - 139, - 139, - 61, - 119, - 84, - 75, - 176, - 92, - 233, - 42, - 2, - 172, - 236, - 237, - 60, - 13, - 208, - 204, - 101, - 234, - 55, - 27, - 32, - 28, - 241, - 198, - 1, - 194, - 77, - 222, - 28, - 64, - 120, - 206, - 219, - 222, - 182, - 3, - 34, - 245, - 1, - 38, - 160, - 25, - 191, - 110, - 220, - 155, - 57, - 229, - 102, - 179, - 155, - 53, - 23, - 234, - 249, - 124, - 62, - 15, - 189, - 229, - 228, - 73, - 29, - 69, - 189, - 116, - 83, - 113, - 69, - 209, - 85, - 180, - 118, - 170, - 1, - 118, - 232, - 104, - 198, - 171, - 235, - 243, - 13, - 189, - 94, - 82, - 92, - 84, - 172, - 142, - 24, - 226, - 213, - 106, - 190, - 183, - 86, - 130, - 122, - 61, - 151, - 3, - 88, - 169, - 116, - 22, - 1, - 154, - 111, - 100, - 246, - 0, - 4, - 253, - 254, - 21, - 128, - 213, - 201, - 142, - 97, - 128, - 112, - 204, - 27, - 5, - 136, - 126, - 238, - 126, - 13, - 32, - 154, - 112, - 219, - 125, - 128, - 99, - 2, - 152, - 137, - 180, - 198, - 32, - 234, - 215, - 141, - 123, - 51, - 167, - 220, - 108, - 118, - 179, - 230, - 66, - 125, - 221, - 219, - 235, - 222, - 134, - 124, - 57, - 58, - 167, - 132, - 94, - 84, - 3, - 232, - 202, - 121, - 74, - 208, - 214, - 251, - 137, - 122, - 245, - 240, - 53, - 37, - 254, - 87, - 130, - 245, - 231, - 4, - 107, - 218, - 239, - 70, - 139, - 248, - 141, - 29, - 235, - 198, - 171, - 37, - 88, - 60, - 209, - 115, - 16, - 96, - 121, - 185, - 171, - 11, - 160, - 89, - 201, - 20, - 1, - 130, - 69, - 191, - 7, - 96, - 117, - 181, - 163, - 3, - 32, - 12, - 60, - 31, - 32, - 154, - 115, - 55, - 1, - 68, - 79, - 187, - 175, - 0, - 196, - 19, - 78, - 187, - 1, - 108, - 93, - 11, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 117, - 227, - 222, - 204, - 233, - 52, - 155, - 221, - 172, - 185, - 80, - 95, - 191, - 125, - 253, - 118, - 232, - 45, - 135, - 115, - 106, - 0, - 245, - 210, - 181, - 255, - 212, - 183, - 220, - 226, - 113, - 154, - 77, - 37, - 174, - 113, - 126, - 225, - 83, - 193, - 171, - 239, - 24, - 226, - 87, - 207, - 173, - 127, - 164, - 86, - 130, - 218, - 72, - 239, - 56, - 192, - 82, - 181, - 59, - 15, - 208, - 104, - 100, - 179, - 0, - 193, - 81, - 255, - 8, - 192, - 234, - 67, - 29, - 231, - 1, - 162, - 135, - 221, - 95, - 0, - 68, - 151, - 220, - 123, - 1, - 162, - 83, - 238, - 62, - 128, - 184, - 199, - 249, - 28, - 32, - 249, - 103, - 251, - 111, - 219, - 124, - 128, - 173, - 167, - 216, - 104, - 55, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 117, - 227, - 222, - 204, - 41, - 55, - 155, - 221, - 172, - 185, - 80, - 239, - 63, - 212, - 127, - 8, - 242, - 229, - 166, - 30, - 164, - 170, - 42, - 62, - 183, - 87, - 205, - 85, - 19, - 52, - 94, - 252, - 250, - 89, - 193, - 43, - 47, - 25, - 226, - 87, - 142, - 247, - 127, - 183, - 90, - 130, - 133, - 79, - 251, - 238, - 1, - 168, - 63, - 151, - 123, - 17, - 160, - 49, - 147, - 29, - 4, - 8, - 2, - 223, - 7, - 8, - 43, - 94, - 17, - 32, - 124, - 193, - 123, - 30, - 32, - 154, - 119, - 7, - 0, - 226, - 223, - 10, - 131, - 228, - 9, - 251, - 117, - 128, - 248, - 39, - 194, - 48, - 153, - 176, - 111, - 217, - 1, - 251, - 5, - 141, - 104, - 53, - 218, - 205, - 72, - 24, - 19, - 201, - 77, - 64, - 51, - 126, - 221, - 184, - 55, - 115, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 55, - 190, - 188, - 241, - 101, - 232, - 45, - 47, - 78, - 75, - 235, - 127, - 63, - 166, - 230, - 82, - 194, - 215, - 238, - 16, - 188, - 120, - 192, - 16, - 191, - 184, - 127, - 227, - 201, - 90, - 9, - 174, - 159, - 189, - 115, - 39, - 64, - 189, - 47, - 183, - 0, - 208, - 248, - 101, - 246, - 65, - 128, - 224, - 89, - 255, - 4, - 64, - 24, - 202, - 12, - 162, - 138, - 91, - 4, - 136, - 63, - 112, - 30, - 0, - 136, - 191, - 236, - 124, - 12, - 144, - 156, - 183, - 31, - 4, - 72, - 198, - 236, - 81, - 128, - 116, - 179, - 117, - 1, - 32, - 121, - 217, - 222, - 223, - 102, - 0, - 75, - 207, - 188, - 81, - 235, - 45, - 209, - 170, - 218, - 205, - 72, - 24, - 19, - 201, - 77, - 64, - 51, - 126, - 221, - 184, - 55, - 115, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 135, - 134, - 134, - 134, - 32, - 95, - 190, - 124, - 73, - 239, - 86, - 5, - 167, - 63, - 52, - 196, - 167, - 167, - 135, - 238, - 171, - 150, - 224, - 218, - 129, - 187, - 78, - 2, - 44, - 21, - 186, - 39, - 1, - 154, - 91, - 51, - 147, - 0, - 225, - 107, - 242, - 134, - 168, - 234, - 230, - 1, - 226, - 88, - 102, - 144, - 124, - 223, - 62, - 8, - 144, - 172, - 179, - 111, - 0, - 36, - 95, - 181, - 127, - 5, - 144, - 78, - 89, - 195, - 0, - 233, - 37, - 97, - 148, - 110, - 178, - 230, - 0, - 210, - 9, - 171, - 125, - 7, - 240, - 77, - 69, - 141, - 251, - 70, - 173, - 27, - 209, - 106, - 180, - 155, - 145, - 48, - 38, - 146, - 155, - 128, - 102, - 252, - 186, - 113, - 111, - 230, - 148, - 155, - 205, - 110, - 214, - 92, - 168, - 239, - 126, - 124, - 247, - 227, - 208, - 91, - 126, - 124, - 143, - 33, - 126, - 230, - 205, - 221, - 187, - 106, - 37, - 168, - 86, - 243, - 121, - 128, - 224, - 199, - 254, - 78, - 128, - 168, - 38, - 35, - 196, - 129, - 147, - 1, - 72, - 70, - 236, - 113, - 128, - 244, - 172, - 245, - 24, - 64, - 154, - 202, - 12, - 210, - 138, - 85, - 4, - 224, - 59, - 50, - 195, - 116, - 222, - 26, - 0, - 96, - 138, - 2, - 64, - 250, - 170, - 50, - 122, - 75, - 25, - 254, - 148, - 111, - 182, - 249, - 0, - 84, - 219, - 181, - 242, - 51, - 61, - 2, - 45, - 181, - 110, - 180, - 150, - 106, - 55, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 245, - 86, - 190, - 168, - 167, - 220, - 108, - 118, - 179, - 230, - 107, - 212, - 101, - 132, - 221, - 187, - 206, - 188, - 9, - 144, - 207, - 75, - 15, - 255, - 64, - 112, - 82, - 12, - 40, - 35, - 56, - 167, - 226, - 103, - 0, - 236, - 114, - 82, - 2, - 176, - 30, - 75, - 207, - 2, - 88, - 150, - 60, - 111, - 29, - 77, - 143, - 0, - 48, - 203, - 32, - 128, - 85, - 73, - 197, - 32, - 147, - 12, - 3, - 88, - 79, - 165, - 34, - 182, - 118, - 241, - 22, - 0, - 255, - 192, - 63, - 222, - 62, - 27, - 52, - 137, - 169, - 201, - 5, - 76, - 154, - 162, - 59, - 192, - 136, - 86, - 163, - 221, - 140, - 132, - 49, - 145, - 220, - 4, - 52, - 227, - 215, - 141, - 123, - 51, - 167, - 92, - 54, - 251, - 153, - 55, - 97, - 247, - 174, - 90, - 105, - 247, - 46, - 249, - 127, - 230, - 173, - 51, - 111, - 237, - 126, - 28, - 96, - 232, - 190, - 233, - 105, - 128, - 187, - 222, - 187, - 182, - 13, - 160, - 123, - 112, - 105, - 6, - 32, - 51, - 217, - 220, - 10, - 224, - 61, - 41, - 111, - 112, - 171, - 81, - 30, - 192, - 113, - 100, - 6, - 118, - 37, - 41, - 2, - 216, - 51, - 201, - 22, - 0, - 123, - 62, - 25, - 0, - 176, - 166, - 210, - 2, - 128, - 53, - 150, - 142, - 2, - 88, - 97, - 234, - 1, - 88, - 19, - 105, - 251, - 17, - 72, - 140, - 52, - 209, - 140, - 188, - 149, - 152, - 154, - 252, - 204, - 164, - 43, - 170, - 214, - 91, - 162, - 213, - 104, - 55, - 35, - 97, - 76, - 36, - 215, - 128, - 102, - 252, - 186, - 184, - 183, - 233, - 105, - 24, - 186, - 175, - 90, - 170, - 86, - 33, - 159, - 151, - 95, - 181, - 10, - 67, - 247, - 201, - 189, - 233, - 15, - 167, - 63, - 28, - 26, - 2, - 216, - 120, - 242, - 226, - 126, - 128, - 59, - 119, - 202, - 8, - 185, - 5, - 25, - 49, - 91, - 111, - 228, - 0, - 252, - 19, - 146, - 9, - 122, - 158, - 204, - 192, - 173, - 68, - 69, - 0, - 231, - 1, - 153, - 161, - 51, - 31, - 15, - 0, - 216, - 147, - 73, - 1, - 192, - 126, - 93, - 82, - 108, - 235, - 135, - 194, - 208, - 126, - 37, - 121, - 186, - 221, - 0, - 90, - 43, - 49, - 165, - 8, - 147, - 145, - 183, - 18, - 83, - 53, - 128, - 73, - 83, - 90, - 106, - 221, - 136, - 86, - 221, - 1, - 70, - 194, - 152, - 72, - 46, - 1, - 237, - 226, - 126, - 216, - 120, - 178, - 86, - 186, - 118, - 0, - 238, - 58, - 9, - 193, - 143, - 193, - 223, - 9, - 254, - 1, - 8, - 78, - 194, - 93, - 239, - 193, - 181, - 109, - 176, - 241, - 164, - 244, - 189, - 120, - 224, - 226, - 129, - 141, - 47, - 3, - 52, - 231, - 51, - 3, - 0, - 125, - 247, - 200, - 136, - 185, - 23, - 229, - 13, - 217, - 193, - 198, - 12, - 128, - 239, - 203, - 12, - 188, - 99, - 225, - 247, - 0, - 188, - 231, - 195, - 23, - 0, - 220, - 203, - 209, - 6, - 0, - 39, - 138, - 221, - 155, - 13, - 224, - 108, - 142, - 47, - 0, - 216, - 73, - 98, - 183, - 215, - 3, - 14, - 42, - 97, - 83, - 131, - 49, - 185, - 128, - 81, - 249, - 38, - 49, - 189, - 37, - 63, - 51, - 106, - 221, - 136, - 86, - 163, - 221, - 68, - 194, - 92, - 57, - 14, - 253, - 223, - 173, - 150, - 174, - 159, - 133, - 59, - 119, - 194, - 82, - 1, - 186, - 39, - 197, - 51, - 184, - 189, - 242, - 139, - 106, - 208, - 61, - 8, - 75, - 51, - 210, - 231, - 250, - 89, - 9, - 158, - 153, - 1, - 184, - 242, - 210, - 149, - 151, - 250, - 15, - 1, - 132, - 143, - 120, - 231, - 0, - 130, - 17, - 127, - 28, - 160, - 123, - 118, - 105, - 16, - 32, - 155, - 149, - 25, - 248, - 149, - 160, - 8, - 208, - 49, - 187, - 186, - 5, - 192, - 157, - 143, - 6, - 0, - 92, - 91, - 24, - 184, - 251, - 162, - 83, - 0, - 206, - 166, - 120, - 14, - 192, - 62, - 145, - 28, - 108, - 207, - 6, - 213, - 7, - 180, - 138, - 79, - 166, - 6, - 99, - 74, - 17, - 70, - 9, - 222, - 146, - 159, - 153, - 52, - 197, - 168, - 117, - 17, - 173, - 87, - 207, - 193, - 250, - 71, - 106, - 165, - 133, - 79, - 161, - 239, - 30, - 57, - 16, - 185, - 5, - 104, - 110, - 133, - 204, - 36, - 196, - 1, - 56, - 25, - 137, - 21, - 241, - 51, - 210, - 214, - 220, - 42, - 125, - 234, - 125, - 242, - 204, - 194, - 167, - 82, - 250, - 242, - 206, - 193, - 213, - 119, - 174, - 190, - 179, - 126, - 59, - 64, - 52, - 238, - 238, - 0, - 8, - 223, - 243, - 190, - 14, - 107, - 146, - 55, - 115, - 180, - 121, - 4, - 192, - 239, - 145, - 25, - 118, - 124, - 180, - 250, - 21, - 0, - 239, - 19, - 97, - 224, - 142, - 69, - 37, - 0, - 247, - 21, - 97, - 232, - 76, - 196, - 237, - 62, - 32, - 250, - 182, - 162, - 201, - 5, - 244, - 12, - 183, - 106, - 48, - 38, - 191, - 51, - 25, - 185, - 26, - 194, - 228, - 103, - 146, - 166, - 220, - 216, - 1, - 235, - 198, - 171, - 165, - 218, - 8, - 244, - 142, - 203, - 129, - 200, - 189, - 8, - 141, - 95, - 66, - 246, - 65, - 113, - 145, - 222, - 147, - 144, - 140, - 128, - 61, - 14, - 118, - 25, - 146, - 146, - 180, - 133, - 175, - 65, - 182, - 14, - 141, - 156, - 60, - 83, - 127, - 14, - 130, - 17, - 240, - 199, - 33, - 26, - 7, - 119, - 7, - 220, - 24, - 185, - 49, - 178, - 238, - 109, - 128, - 164, - 215, - 174, - 2, - 68, - 145, - 235, - 194, - 77, - 74, - 112, - 143, - 247, - 6, - 128, - 127, - 37, - 232, - 7, - 232, - 120, - 95, - 24, - 120, - 227, - 34, - 214, - 221, - 175, - 69, - 63, - 7, - 112, - 255, - 45, - 250, - 118, - 155, - 1, - 66, - 61, - 187, - 173, - 114, - 163, - 145, - 182, - 90, - 124, - 50, - 53, - 152, - 86, - 41, - 66, - 51, - 114, - 73, - 76, - 171, - 85, - 200, - 247, - 214, - 74, - 139, - 39, - 160, - 231, - 32, - 44, - 85, - 161, - 59, - 15, - 141, - 25, - 200, - 14, - 74, - 233, - 202, - 63, - 1, - 81, - 21, - 220, - 60, - 164, - 103, - 193, - 122, - 76, - 126, - 233, - 89, - 112, - 171, - 16, - 229, - 165, - 79, - 240, - 172, - 60, - 211, - 152, - 129, - 238, - 89, - 88, - 26, - 132, - 240, - 61, - 240, - 190, - 14, - 73, - 47, - 216, - 85, - 168, - 214, - 170, - 53, - 209, - 11, - 73, - 98, - 219, - 176, - 166, - 4, - 163, - 211, - 238, - 94, - 128, - 168, - 238, - 230, - 0, - 162, - 73, - 119, - 248, - 102, - 3, - 120, - 191, - 11, - 191, - 0, - 224, - 29, - 10, - 143, - 183, - 249, - 128, - 240, - 75, - 138, - 166, - 206, - 106, - 202, - 141, - 90, - 117, - 51, - 197, - 39, - 83, - 131, - 145, - 82, - 196, - 226, - 34, - 244, - 220, - 81, - 45, - 213, - 235, - 144, - 203, - 201, - 129, - 232, - 234, - 18, - 207, - 144, - 205, - 138, - 139, - 244, - 125, - 137, - 21, - 158, - 39, - 65, - 211, - 113, - 36, - 246, - 91, - 150, - 252, - 210, - 84, - 218, - 226, - 88, - 250, - 132, - 161, - 60, - 19, - 4, - 50, - 70, - 163, - 33, - 41, - 87, - 71, - 135, - 228, - 158, - 174, - 43, - 73, - 184, - 109, - 195, - 226, - 231, - 139, - 159, - 247, - 244, - 0, - 36, - 21, - 187, - 8, - 144, - 124, - 102, - 223, - 13, - 16, - 59, - 78, - 12, - 16, - 77, - 185, - 5, - 0, - 255, - 112, - 112, - 12, - 32, - 58, - 238, - 30, - 130, - 219, - 164, - 195, - 225, - 110, - 37, - 108, - 10, - 204, - 166, - 206, - 170, - 233, - 175, - 209, - 246, - 18, - 215, - 235, - 71, - 33, - 87, - 172, - 149, - 150, - 43, - 208, - 85, - 148, - 125, - 209, - 89, - 132, - 102, - 5, - 50, - 69, - 8, - 142, - 130, - 127, - 68, - 98, - 134, - 87, - 148, - 42, - 130, - 91, - 132, - 228, - 251, - 96, - 31, - 132, - 180, - 2, - 86, - 17, - 172, - 163, - 144, - 30, - 1, - 187, - 2, - 73, - 17, - 220, - 10, - 68, - 69, - 240, - 142, - 65, - 248, - 61, - 240, - 43, - 16, - 20, - 33, - 115, - 20, - 154, - 183, - 27, - 175, - 2, - 118, - 17, - 234, - 149, - 122, - 37, - 119, - 4, - 32, - 29, - 20, - 205, - 154, - 244, - 217, - 11, - 0, - 241, - 148, - 83, - 0, - 136, - 203, - 78, - 9, - 192, - 223, - 28, - 92, - 0, - 136, - 247, - 57, - 63, - 104, - 51, - 192, - 170, - 58, - 193, - 86, - 101, - 93, - 227, - 188, - 169, - 179, - 74, - 185, - 113, - 105, - 6, - 186, - 7, - 171, - 165, - 229, - 187, - 161, - 235, - 51, - 88, - 217, - 11, - 157, - 167, - 197, - 51, - 100, - 246, - 136, - 139, - 244, - 123, - 96, - 245, - 33, - 232, - 56, - 15, - 225, - 11, - 224, - 61, - 47, - 234, - 193, - 121, - 0, - 146, - 117, - 96, - 223, - 64, - 244, - 228, - 143, - 128, - 89, - 96, - 80, - 50, - 141, - 100, - 139, - 244, - 137, - 63, - 144, - 103, - 194, - 23, - 160, - 99, - 22, - 86, - 183, - 200, - 152, - 193, - 34, - 132, - 123, - 192, - 123, - 3, - 162, - 211, - 224, - 238, - 133, - 228, - 51, - 176, - 239, - 134, - 116, - 80, - 196, - 250, - 210, - 236, - 210, - 108, - 247, - 22, - 128, - 116, - 192, - 186, - 12, - 144, - 76, - 218, - 195, - 0, - 201, - 207, - 236, - 71, - 1, - 146, - 77, - 246, - 28, - 220, - 166, - 30, - 16, - 104, - 92, - 111, - 125, - 82, - 208, - 202, - 186, - 20, - 152, - 151, - 47, - 67, - 215, - 64, - 173, - 180, - 178, - 0, - 157, - 125, - 114, - 32, - 178, - 14, - 52, - 115, - 144, - 169, - 67, - 208, - 15, - 254, - 149, - 155, - 182, - 234, - 195, - 224, - 254, - 66, - 234, - 73, - 238, - 0, - 196, - 95, - 6, - 231, - 99, - 41, - 177, - 218, - 191, - 18, - 125, - 105, - 13, - 128, - 85, - 129, - 180, - 8, - 246, - 60, - 36, - 3, - 224, - 204, - 67, - 60, - 0, - 238, - 101, - 136, - 54, - 128, - 59, - 15, - 209, - 0, - 116, - 124, - 4, - 171, - 95, - 145, - 119, - 4, - 253, - 16, - 213, - 193, - 205, - 65, - 236, - 128, - 19, - 67, - 210, - 7, - 246, - 2, - 164, - 3, - 96, - 93, - 134, - 229, - 249, - 229, - 249, - 174, - 13, - 0, - 233, - 148, - 85, - 104, - 51, - 128, - 102, - 133, - 201, - 49, - 251, - 112, - 155, - 15, - 8, - 180, - 232, - 105, - 190, - 165, - 200, - 39, - 133, - 149, - 73, - 232, - 44, - 84, - 75, - 141, - 41, - 200, - 22, - 160, - 57, - 9, - 153, - 97, - 57, - 32, - 126, - 97, - 13, - 87, - 39, - 161, - 99, - 24, - 194, - 0, - 60, - 31, - 162, - 75, - 224, - 222, - 43, - 50, - 202, - 249, - 34, - 36, - 231, - 193, - 126, - 80, - 4, - 182, - 53, - 12, - 76, - 1, - 5, - 96, - 18, - 24, - 6, - 107, - 10, - 210, - 130, - 36, - 225, - 73, - 1, - 156, - 8, - 98, - 87, - 202, - 49, - 81, - 2, - 222, - 39, - 18, - 144, - 59, - 222, - 151, - 184, - 20, - 77, - 130, - 59, - 44, - 106, - 197, - 45, - 64, - 60, - 5, - 78, - 1, - 146, - 73, - 176, - 135, - 245, - 61, - 5, - 88, - 153, - 90, - 153, - 234, - 148, - 108, - 112, - 204, - 146, - 116, - 88, - 179, - 193, - 255, - 85, - 15, - 48, - 5, - 13, - 249, - 136, - 212, - 40, - 67, - 118, - 180, - 86, - 106, - 142, - 65, - 102, - 84, - 204, - 146, - 25, - 133, - 224, - 55, - 224, - 223, - 15, - 193, - 49, - 240, - 15, - 75, - 172, - 240, - 198, - 33, - 28, - 3, - 111, - 20, - 162, - 57, - 112, - 55, - 65, - 116, - 10, - 220, - 125, - 162, - 39, - 237, - 215, - 229, - 107, - 131, - 61, - 10, - 233, - 37, - 73, - 180, - 211, - 87, - 37, - 223, - 180, - 158, - 210, - 255, - 99, - 144, - 142, - 106, - 223, - 39, - 214, - 208, - 221, - 167, - 99, - 141, - 65, - 84, - 210, - 119, - 141, - 172, - 161, - 127, - 88, - 230, - 18, - 151, - 193, - 41, - 65, - 242, - 51, - 176, - 31, - 93, - 195, - 116, - 12, - 172, - 81, - 104, - 140, - 53, - 198, - 178, - 37, - 128, - 244, - 130, - 36, - 254, - 233, - 184, - 53, - 2, - 86, - 154, - 102, - 182, - 41, - 241, - 9, - 243, - 113, - 52, - 115, - 65, - 62, - 38, - 102, - 231, - 254, - 111, - 108, - 110, - 254, - 253, - 250, - 253, - 161, - 245, - 111, - 110, - 6, - 249, - 52, - 150, - 217, - 214, - 124, - 183, - 54, - 106, - 153, - 100, - 182, - 249, - 46, - 100, - 182, - 137, - 25, - 110, - 198, - 198, - 4, - 100, - 111, - 211, - 254, - 71, - 113, - 255, - 27, - 240, - 63, - 101, - 216, - 236, - 195, -] -`; - -exports[`imgData browser transparent-black-grayscale-4bit.png 1`] = ` -Uint8Array [ - 40, - 145, - 117, - 209, - 49, - 79, - 194, - 64, - 20, - 192, - 113, - 62, - 130, - 71, - 89, - 76, - 92, - 174, - 36, - 46, - 38, - 38, - 133, - 170, - 147, - 75, - 91, - 25, - 29, - 44, - 229, - 66, - 28, - 152, - 238, - 157, - 38, - 174, - 244, - 96, - 114, - 162, - 28, - 19, - 147, - 194, - 37, - 250, - 25, - 28, - 29, - 221, - 36, - 46, - 178, - 50, - 152, - 176, - 154, - 56, - 176, - 106, - 209, - 234, - 93, - 109, - 20, - 72, - 120, - 219, - 253, - 166, - 119, - 239, - 159, - 251, - 94, - 153, - 220, - 58, - 120, - 153, - 45, - 65, - 114, - 79, - 43, - 183, - 11, - 240, - 22, - 209, - 146, - 89, - 172, - 143, - 51, - 72, - 158, - 194, - 106, - 185, - 100, - 99, - 115, - 255, - 38, - 133, - 207, - 65, - 232, - 150, - 109, - 215, - 118, - 139, - 123, - 172, - 253, - 172, - 96, - 196, - 155, - 101, - 187, - 86, - 245, - 60, - 119, - 155, - 243, - 115, - 5, - 19, - 17, - 122, - 140, - 115, - 26, - 28, - 49, - 222, - 60, - 85, - 240, - 42, - 4, - 207, - 38, - 12, - 142, - 21, - 188, - 67, - 107, - 216, - 205, - 222, - 94, - 67, - 3, - 19, - 82, - 166, - 226, - 35, - 187, - 175, - 224, - 67, - 131, - 22, - 138, - 145, - 113, - 167, - 1, - 68, - 111, - 208, - 150, - 93, - 234, - 227, - 141, - 252, - 84, - 65, - 12, - 173, - 94, - 4, - 114, - 16, - 56, - 8, - 23, - 244, - 98, - 115, - 56, - 19, - 188, - 166, - 192, - 52, - 156, - 131, - 116, - 83, - 32, - 93, - 78, - 228, - 181, - 143, - 109, - 188, - 169, - 225, - 11, - 42, - 29, - 13, - 39, - 216, - 66, - 91, - 26, - 18, - 8, - 34, - 166, - 192, - 201, - 99, - 180, - 155, - 254, - 22, - 2, - 78, - 136, - 188, - 42, - 25, - 24, - 53, - 126, - 129, - 50, - 13, - 86, - 193, - 66, - 253, - 20, - 34, - 202, - 106, - 68, - 118, - 176, - 130, - 113, - 10, - 49, - 0, - 104, - 48, - 208, - 78, - 118, - 194, - 71, - 5, - 189, - 14, - 70, - 249, - 113, - 6, - 73, - 4, - 68, - 52, - 45, - 116, - 248, - 119, - 228, - 88, - 131, - 83, - 152, - 253, - 103, - 24, - 17, - 65, - 253, - 203, - 197, - 46, - 67, - 65, - 235, - 75, - 229, - 230, - 130, - 62, - 44, - 167, - 156, - 92, - 172, - 180, - 77, - 166, - 235, - 234, - 255, - 0, - 227, - 146, - 86, - 207, -] -`; - -exports[`imgData browser transparent-white-grayscale-16bit.png 1`] = ` -Uint8Array [ - 72, - 137, - 99, - 248, - 79, - 33, - 96, - 160, - 169, - 1, - 143, - 31, - 159, - 60, - 249, - 241, - 35, - 89, - 6, - 188, - 120, - 177, - 117, - 107, - 93, - 93, - 106, - 106, - 212, - 78, - 55, - 253, - 132, - 31, - 11, - 5, - 31, - 9, - 16, - 109, - 192, - 187, - 119, - 251, - 247, - 119, - 118, - 166, - 167, - 39, - 78, - 240, - 217, - 101, - 38, - 162, - 21, - 160, - 254, - 82, - 121, - 171, - 250, - 28, - 189, - 87, - 1, - 158, - 19, - 189, - 175, - 108, - 255, - 243, - 7, - 143, - 1, - 159, - 62, - 29, - 57, - 50, - 117, - 106, - 81, - 81, - 206, - 188, - 224, - 73, - 182, - 11, - 116, - 179, - 244, - 183, - 107, - 55, - 171, - 101, - 106, - 45, - 183, - 57, - 174, - 116, - 72, - 130, - 81, - 106, - 171, - 250, - 75, - 3, - 142, - 156, - 180, - 5, - 11, - 206, - 159, - 255, - 241, - 3, - 205, - 128, - 239, - 223, - 79, - 157, - 154, - 53, - 171, - 172, - 172, - 184, - 56, - 109, - 149, - 199, - 99, - 67, - 78, - 253, - 44, - 163, - 109, - 38, - 23, - 108, - 2, - 236, - 100, - 205, - 91, - 12, - 3, - 173, - 103, - 187, - 86, - 24, - 87, - 171, - 109, - 211, - 101, - 214, - 122, - 25, - 213, - 158, - 151, - 87, - 92, - 92, - 86, - 54, - 123, - 246, - 145, - 35, - 239, - 222, - 193, - 13, - 56, - 115, - 166, - 190, - 190, - 172, - 172, - 20, - 8, - 252, - 196, - 205, - 205, - 205, - 152, - 205, - 230, - 218, - 196, - 132, - 218, - 164, - 200, - 5, - 168, - 57, - 206, - 119, - 190, - 232, - 190, - 221, - 53, - 208, - 49, - 203, - 78, - 206, - 252, - 130, - 154, - 89, - 206, - 188, - 82, - 40, - 200, - 202, - 154, - 53, - 11, - 110, - 192, - 157, - 59, - 173, - 173, - 29, - 29, - 45, - 45, - 213, - 213, - 201, - 28, - 46, - 158, - 238, - 242, - 137, - 175, - 202, - 162, - 203, - 193, - 160, - 136, - 53, - 225, - 112, - 216, - 222, - 32, - 17, - 191, - 88, - 111, - 81, - 223, - 85, - 73, - 55, - 33, - 162, - 5, - 5, - 49, - 49, - 65, - 65, - 123, - 247, - 194, - 13, - 120, - 245, - 170, - 165, - 165, - 177, - 177, - 221, - 179, - 175, - 175, - 179, - 179, - 190, - 190, - 18, - 47, - 40, - 43, - 75, - 78, - 14, - 9, - 9, - 8, - 240, - 241, - 121, - 246, - 12, - 110, - 192, - 143, - 31, - 77, - 133, - 25, - 238, - 73, - 87, - 42, - 108, - 38, - 220, - 152, - 60, - 185, - 191, - 191, - 185, - 185, - 26, - 3, - 84, - 1, - 65, - 101, - 101, - 86, - 86, - 120, - 56, - 72, - 179, - 167, - 103, - 100, - 36, - 74, - 44, - 116, - 117, - 101, - 94, - 41, - 153, - 213, - 215, - 60, - 65, - 118, - 210, - 164, - 169, - 83, - 167, - 79, - 159, - 50, - 165, - 189, - 189, - 6, - 13, - 20, - 22, - 70, - 115, - 27, - 221, - 20, - 41, - 145, - 40, - 211, - 93, - 227, - 182, - 167, - 169, - 9, - 197, - 128, - 73, - 147, - 50, - 215, - 229, - 251, - 246, - 111, - 236, - 207, - 157, - 56, - 113, - 202, - 148, - 233, - 211, - 103, - 206, - 156, - 61, - 123, - 230, - 204, - 238, - 238, - 250, - 250, - 58, - 32, - 168, - 173, - 45, - 47, - 79, - 74, - 10, - 185, - 164, - 122, - 93, - 188, - 88, - 224, - 4, - 143, - 16, - 247, - 117, - 125, - 233, - 53, - 107, - 80, - 12, - 152, - 50, - 37, - 253, - 99, - 22, - 67, - 171, - 120, - 255, - 198, - 9, - 241, - 147, - 39, - 79, - 46, - 172, - 146, - 172, - 79, - 157, - 254, - 107, - 222, - 188, - 57, - 115, - 250, - 250, - 234, - 234, - 178, - 178, - 162, - 162, - 194, - 215, - 235, - 60, - 147, - 158, - 46, - 148, - 194, - 115, - 129, - 253, - 57, - 183, - 186, - 10, - 243, - 181, - 107, - 40, - 6, - 44, - 89, - 146, - 110, - 154, - 34, - 91, - 122, - 28, - 232, - 134, - 194, - 73, - 147, - 90, - 24, - 242, - 182, - 37, - 183, - 229, - 25, - 205, - 157, - 59, - 127, - 254, - 130, - 5, - 85, - 85, - 81, - 81, - 145, - 145, - 118, - 130, - 178, - 1, - 98, - 135, - 120, - 21, - 165, - 98, - 121, - 69, - 69, - 10, - 108, - 255, - 254, - 254, - 141, - 98, - 192, - 182, - 109, - 105, - 252, - 241, - 233, - 169, - 15, - 187, - 82, - 250, - 42, - 39, - 204, - 170, - 83, - 47, - 139, - 139, - 146, - 202, - 251, - 51, - 103, - 206, - 188, - 121, - 243, - 231, - 151, - 148, - 68, - 70, - 6, - 125, - 85, - 152, - 45, - 61, - 157, - 191, - 203, - 242, - 138, - 135, - 135, - 148, - 140, - 254, - 255, - 162, - 34, - 180, - 164, - 124, - 252, - 120, - 74, - 93, - 134, - 77, - 48, - 103, - 245, - 234, - 126, - 169, - 170, - 75, - 165, - 29, - 165, - 134, - 145, - 205, - 5, - 149, - 179, - 103, - 207, - 157, - 59, - 111, - 94, - 94, - 94, - 100, - 164, - 149, - 140, - 108, - 128, - 176, - 168, - 182, - 188, - 203, - 18, - 37, - 46, - 33, - 119, - 65, - 179, - 185, - 250, - 104, - 6, - 220, - 184, - 145, - 28, - 145, - 97, - 227, - 145, - 159, - 19, - 221, - 251, - 38, - 58, - 189, - 36, - 170, - 100, - 86, - 196, - 155, - 252, - 71, - 179, - 102, - 129, - 140, - 72, - 79, - 15, - 159, - 164, - 28, - 3, - 180, - 255, - 182, - 249, - 122, - 177, - 99, - 66, - 154, - 124, - 142, - 98, - 246, - 199, - 143, - 163, - 25, - 240, - 234, - 85, - 226, - 241, - 212, - 135, - 126, - 193, - 177, - 246, - 141, - 125, - 73, - 17, - 25, - 156, - 69, - 215, - 34, - 66, - 11, - 20, - 102, - 204, - 152, - 53, - 107, - 206, - 156, - 196, - 68, - 79, - 87, - 217, - 0, - 81, - 23, - 197, - 115, - 210, - 159, - 249, - 148, - 121, - 124, - 121, - 124, - 149, - 142, - 127, - 249, - 130, - 102, - 192, - 159, - 63, - 9, - 103, - 147, - 219, - 194, - 247, - 71, - 28, - 44, - 92, - 81, - 194, - 28, - 246, - 187, - 112, - 69, - 200, - 217, - 146, - 22, - 80, - 116, - 206, - 154, - 21, - 21, - 101, - 41, - 34, - 227, - 206, - 159, - 97, - 28, - 36, - 189, - 143, - 87, - 131, - 215, - 66, - 240, - 82, - 96, - 48, - 150, - 236, - 156, - 247, - 40, - 97, - 74, - 194, - 148, - 80, - 211, - 204, - 138, - 154, - 27, - 129, - 183, - 11, - 170, - 130, - 231, - 23, - 55, - 131, - 146, - 212, - 180, - 105, - 225, - 225, - 218, - 175, - 37, - 91, - 185, - 191, - 58, - 44, - 208, - 214, - 22, - 55, - 18, - 153, - 204, - 227, - 219, - 254, - 28, - 139, - 1, - 61, - 61, - 241, - 242, - 233, - 75, - 3, - 151, - 101, - 60, - 42, - 251, - 26, - 241, - 38, - 111, - 91, - 80, - 81, - 225, - 235, - 201, - 147, - 167, - 78, - 237, - 239, - 15, - 11, - 83, - 138, - 23, - 117, - 225, - 75, - 113, - 119, - 55, - 117, - 23, - 154, - 47, - 196, - 35, - 36, - 119, - 244, - 40, - 22, - 3, - 126, - 253, - 90, - 156, - 145, - 252, - 60, - 89, - 53, - 189, - 41, - 179, - 39, - 173, - 34, - 231, - 83, - 224, - 237, - 210, - 234, - 137, - 19, - 39, - 79, - 238, - 236, - 12, - 13, - 149, - 49, - 22, - 226, - 17, - 156, - 101, - 113, - 86, - 52, - 94, - 36, - 82, - 254, - 251, - 182, - 180, - 255, - 255, - 177, - 24, - 0, - 2, - 23, - 46, - 228, - 230, - 166, - 166, - 166, - 61, - 206, - 184, - 156, - 173, - 23, - 176, - 174, - 84, - 169, - 191, - 127, - 226, - 196, - 198, - 198, - 208, - 80, - 69, - 117, - 126, - 93, - 158, - 6, - 1, - 1, - 129, - 213, - 170, - 157, - 231, - 57, - 255, - 255, - 199, - 105, - 192, - 255, - 255, - 111, - 222, - 180, - 181, - 165, - 85, - 165, - 243, - 101, - 102, - 6, - 136, - 23, - 43, - 244, - 246, - 246, - 247, - 87, - 85, - 133, - 132, - 232, - 55, - 242, - 137, - 112, - 215, - 115, - 39, - 26, - 158, - 120, - 48, - 225, - 255, - 127, - 188, - 6, - 128, - 226, - 99, - 213, - 170, - 116, - 211, - 244, - 165, - 126, - 47, - 139, - 103, - 119, - 119, - 247, - 246, - 150, - 148, - 4, - 7, - 219, - 218, - 74, - 43, - 11, - 59, - 249, - 88, - 188, - 211, - 64, - 87, - 141, - 163, - 88, - 191, - 114, - 184, - 168, - 53, - 226, - 96, - 253, - 141, - 142, - 142, - 238, - 238, - 220, - 220, - 160, - 32, - 127, - 127, - 115, - 243, - 242, - 242, - 95, - 191, - 176, - 169, - 197, - 81, - 47, - 188, - 127, - 191, - 96, - 65, - 115, - 115, - 91, - 91, - 71, - 71, - 122, - 122, - 96, - 96, - 64, - 192, - 130, - 5, - 127, - 255, - 98, - 87, - 137, - 179, - 102, - 250, - 247, - 239, - 192, - 129, - 214, - 214, - 182, - 182, - 196, - 196, - 160, - 160, - 237, - 219, - 113, - 169, - 34, - 80, - 181, - 221, - 187, - 55, - 97, - 66, - 106, - 234, - 153, - 51, - 248, - 212, - 16, - 168, - 92, - 191, - 126, - 125, - 252, - 24, - 191, - 10, - 138, - 107, - 103, - 0, - 224, - 204, - 150, - 213, -] -`; - -exports[`imgData browser transparent-white-palette-8bit.png 1`] = ` -Uint8Array [ - 56, - 141, - 99, - 96, - 160, - 50, - 120, - 240, - 42, - 13, - 143, - 236, - 61, - 166, - 197, - 102, - 79, - 44, - 153, - 191, - 124, - 192, - 42, - 155, - 249, - 94, - 202, - 180, - 173, - 129, - 77, - 111, - 131, - 248, - 134, - 213, - 85, - 95, - 34, - 3, - 80, - 101, - 211, - 106, - 248, - 86, - 158, - 105, - 176, - 172, - 156, - 92, - 41, - 190, - 192, - 170, - 189, - 189, - 125, - 195, - 163, - 117, - 93, - 207, - 99, - 96, - 178, - 49, - 175, - 250, - 150, - 235, - 180, - 89, - 62, - 154, - 172, - 208, - 95, - 91, - 43, - 169, - 192, - 102, - 185, - 64, - 124, - 181, - 222, - 147, - 53, - 58, - 203, - 57, - 107, - 50, - 193, - 10, - 42, - 148, - 151, - 107, - 107, - 223, - 146, - 236, - 191, - 234, - 123, - 235, - 38, - 171, - 162, - 226, - 196, - 137, - 138, - 181, - 146, - 226, - 103, - 180, - 129, - 96, - 125, - 31, - 88, - 193, - 11, - 249, - 217, - 243, - 213, - 25, - 125, - 89, - 111, - 202, - 104, - 105, - 105, - 213, - 51, - 215, - 157, - 61, - 91, - 87, - 197, - 8, - 100, - 174, - 218, - 126, - 232, - 61, - 88, - 65, - 206, - 124, - 165, - 185, - 51, - 164, - 148, - 53, - 80, - 193, - 242, - 45, - 174, - 135, - 79, - 220, - 131, - 184, - 97, - 145, - 231, - 53, - 91, - 17, - 126, - 225, - 249, - 234, - 48, - 176, - 116, - 169, - 198, - 122, - 151, - 195, - 39, - 206, - 57, - 67, - 93, - 57, - 43, - 233, - 148, - 227, - 178, - 105, - 124, - 188, - 83, - 100, - 151, - 64, - 193, - 202, - 237, - 70, - 65, - 81, - 2, - 45, - 11, - 161, - 10, - 166, - 69, - 71, - 108, - 181, - 16, - 156, - 194, - 203, - 205, - 201, - 45, - 161, - 188, - 120, - 177, - 170, - 214, - 150, - 75, - 62, - 106, - 51, - 195, - 195, - 5, - 58, - 160, - 10, - 166, - 36, - 38, - 237, - 220, - 58, - 135, - 95, - 100, - 163, - 46, - 79, - 119, - 207, - 140, - 197, - 235, - 119, - 188, - 149, - 222, - 219, - 180, - 171, - 196, - 128, - 163, - 28, - 170, - 160, - 227, - 104, - 234, - 241, - 173, - 203, - 166, - 233, - 158, - 79, - 223, - 199, - 206, - 210, - 181, - 116, - 135, - 179, - 232, - 103, - 181, - 93, - 197, - 83, - 155, - 53, - 97, - 193, - 201, - 180, - 239, - 198, - 149, - 157, - 78, - 34, - 27, - 143, - 223, - 222, - 214, - 211, - 205, - 178, - 194, - 249, - 217, - 197, - 189, - 141, - 222, - 231, - 94, - 11, - 172, - 132, - 5, - 101, - 181, - 123, - 114, - 222, - 17, - 199, - 77, - 182, - 126, - 183, - 237, - 57, - 217, - 187, - 215, - 0, - 13, - 112, - 120, - 211, - 26, - 213, - 52, - 51, - 30, - 166, - 32, - 114, - 119, - 242, - 195, - 88, - 167, - 20, - 219, - 83, - 217, - 246, - 125, - 156, - 236, - 166, - 111, - 203, - 246, - 54, - 30, - 8, - 82, - 121, - 249, - 169, - 26, - 166, - 32, - 103, - 247, - 149, - 194, - 196, - 131, - 25, - 158, - 129, - 119, - 236, - 39, - 244, - 245, - 216, - 188, - 251, - 220, - 203, - 241, - 250, - 101, - 110, - 46, - 71, - 2, - 76, - 65, - 192, - 254, - 244, - 59, - 33, - 193, - 254, - 119, - 131, - 239, - 110, - 226, - 229, - 238, - 219, - 33, - 122, - 145, - 235, - 99, - 177, - 254, - 99, - 161, - 103, - 136, - 216, - 94, - 123, - 237, - 218, - 254, - 196, - 131, - 249, - 97, - 121, - 155, - 248, - 120, - 39, - 185, - 148, - 238, - 13, - 111, - 45, - 58, - 38, - 151, - 107, - 130, - 80, - 32, - 118, - 227, - 242, - 5, - 187, - 227, - 217, - 231, - 239, - 91, - 243, - 243, - 9, - 239, - 241, - 233, - 213, - 111, - 57, - 224, - 112, - 186, - 185, - 26, - 161, - 32, - 148, - 199, - 125, - 179, - 89, - 244, - 149, - 216, - 124, - 99, - 65, - 126, - 41, - 215, - 210, - 211, - 159, - 14, - 4, - 201, - 113, - 48, - 161, - 36, - 169, - 231, - 107, - 204, - 246, - 37, - 197, - 21, - 24, - 10, - 11, - 42, - 185, - 70, - 113, - 233, - 115, - 205, - 60, - 246, - 28, - 45, - 73, - 102, - 205, - 51, - 191, - 156, - 84, - 96, - 44, - 38, - 188, - 212, - 245, - 99, - 227, - 83, - 3, - 163, - 23, - 12, - 232, - 32, - 160, - 227, - 232, - 229, - 66, - 67, - 9, - 177, - 21, - 110, - 222, - 197, - 37, - 239, - 58, - 49, - 228, - 129, - 160, - 124, - 91, - 200, - 162, - 217, - 18, - 107, - 14, - 121, - 21, - 105, - 133, - 98, - 147, - 103, - 96, - 184, - 222, - 53, - 127, - 222, - 108, - 83, - 143, - 195, - 93, - 39, - 177, - 203, - 3, - 193, - 123, - 249, - 121, - 54, - 135, - 152, - 112, - 74, - 3, - 193, - 139, - 233, - 102, - 21, - 248, - 228, - 25, - 24, - 18, - 30, - 224, - 151, - 199, - 4, - 0, - 13, - 174, - 255, - 145, -] -`; - -exports[`imgData browser transparent-white-rgb-16bit.png 1`] = ` -Uint8Array [ - 88, - 133, - 213, - 216, - 11, - 76, - 27, - 101, - 28, - 0, - 240, - 239, - 148, - 71, - 48, - 248, - 136, - 110, - 76, - 141, - 26, - 22, - 36, - 81, - 17, - 209, - 216, - 196, - 98, - 83, - 152, - 98, - 192, - 22, - 150, - 161, - 181, - 163, - 101, - 35, - 161, - 118, - 60, - 92, - 29, - 34, - 32, - 76, - 160, - 84, - 148, - 194, - 186, - 210, - 82, - 90, - 10, - 29, - 29, - 101, - 16, - 24, - 14, - 55, - 183, - 57, - 7, - 162, - 78, - 52, - 58, - 113, - 100, - 58, - 102, - 12, - 49, - 102, - 204, - 68, - 227, - 115, - 15, - 182, - 185, - 169, - 241, - 253, - 127, - 160, - 54, - 89, - 80, - 186, - 65, - 140, - 191, - 132, - 203, - 229, - 142, - 222, - 247, - 255, - 127, - 239, - 59, - 241, - 251, - 255, - 156, - 248, - 175, - 3, - 184, - 88, - 11, - 146, - 192, - 231, - 228, - 0, - 57, - 77, - 22, - 162, - 20, - 54, - 15, - 9, - 124, - 77, - 246, - 146, - 58, - 82, - 64, - 74, - 74, - 30, - 6, - 117, - 117, - 119, - 128, - 173, - 91, - 211, - 192, - 216, - 152, - 11, - 28, - 59, - 54, - 5, - 46, - 190, - 92, - 22, - 114, - 2, - 39, - 201, - 40, - 177, - 145, - 34, - 98, - 50, - 229, - 129, - 234, - 234, - 100, - 176, - 113, - 227, - 213, - 192, - 225, - 16, - 146, - 16, - 86, - 171, - 0, - 85, - 85, - 120, - 108, - 104, - 192, - 99, - 103, - 167, - 4, - 122, - 123, - 19, - 193, - 232, - 168, - 25, - 76, - 77, - 77, - 128, - 95, - 200, - 60, - 39, - 112, - 134, - 188, - 67, - 188, - 164, - 140, - 60, - 241, - 132, - 9, - 84, - 85, - 61, - 0, - 154, - 154, - 110, - 2, - 94, - 47, - 134, - 213, - 221, - 141, - 65, - 183, - 182, - 98, - 160, - 207, - 60, - 131, - 231, - 101, - 101, - 209, - 192, - 96, - 192, - 112, - 53, - 154, - 43, - 64, - 118, - 54, - 222, - 213, - 235, - 255, - 78, - 207, - 237, - 142, - 0, - 213, - 213, - 133, - 96, - 11, - 57, - 68, - 126, - 36, - 33, - 36, - 240, - 3, - 25, - 39, - 157, - 164, - 146, - 148, - 147, - 218, - 90, - 172, - 227, - 166, - 38, - 236, - 18, - 30, - 79, - 36, - 8, - 4, - 48, - 136, - 109, - 219, - 48, - 136, - 93, - 187, - 240, - 120, - 224, - 0, - 30, - 15, - 29, - 194, - 227, - 200, - 8, - 222, - 237, - 237, - 197, - 196, - 154, - 155, - 175, - 3, - 86, - 235, - 109, - 192, - 98, - 185, - 6, - 212, - 215, - 227, - 221, - 246, - 118, - 252, - 207, - 150, - 22, - 60, - 154, - 76, - 26, - 80, - 66, - 184, - 68, - 46, - 221, - 79, - 184, - 18, - 185, - 253, - 103, - 77, - 224, - 32, - 177, - 16, - 254, - 241, - 83, - 65, - 218, - 219, - 147, - 192, - 43, - 175, - 96, - 193, - 47, - 191, - 140, - 69, - 14, - 13, - 225, - 249, - 142, - 29, - 88, - 199, - 109, - 109, - 247, - 2, - 183, - 59, - 27, - 140, - 140, - 196, - 129, - 201, - 201, - 75, - 192, - 103, - 159, - 225, - 255, - 76, - 79, - 227, - 255, - 127, - 245, - 21, - 30, - 63, - 249, - 100, - 38, - 73, - 184, - 254, - 234, - 171, - 120, - 110, - 54, - 99, - 146, - 220, - 170, - 79, - 205, - 98, - 45, - 225, - 106, - 157, - 53, - 129, - 35, - 196, - 74, - 54, - 144, - 6, - 82, - 67, - 172, - 214, - 71, - 192, - 240, - 48, - 214, - 223, - 182, - 109, - 55, - 2, - 135, - 99, - 5, - 88, - 191, - 30, - 11, - 168, - 58, - 79, - 125, - 61, - 6, - 52, - 56, - 120, - 31, - 152, - 156, - 140, - 5, - 199, - 143, - 95, - 5, - 190, - 249, - 6, - 19, - 158, - 152, - 192, - 113, - 210, - 223, - 127, - 11, - 168, - 169, - 209, - 129, - 243, - 159, - 80, - 74, - 86, - 147, - 135, - 201, - 62, - 50, - 107, - 2, - 223, - 18, - 14, - 186, - 158, - 96, - 34, - 86, - 171, - 147, - 240, - 144, - 229, - 246, - 121, - 122, - 193, - 112, - 203, - 27, - 201, - 35, - 36, - 155, - 100, - 145, - 47, - 201, - 172, - 9, - 240, - 160, - 177, - 88, - 26, - 26, - 44, - 150, - 248, - 248, - 142, - 142, - 248, - 248, - 176, - 176, - 254, - 254, - 176, - 176, - 228, - 228, - 190, - 190, - 228, - 100, - 187, - 189, - 173, - 205, - 110, - 247, - 144, - 22, - 242, - 28, - 169, - 185, - 32, - 213, - 65, - 56, - 116, - 238, - 36, - 57, - 36, - 56, - 104, - 21, - 209, - 147, - 127, - 25, - 196, - 108, - 35, - 145, - 164, - 61, - 123, - 36, - 232, - 165, - 239, - 190, - 139, - 125, - 245, - 204, - 25, - 156, - 55, - 134, - 134, - 244, - 122, - 55, - 225, - 25, - 169, - 131, - 180, - 145, - 38, - 82, - 27, - 162, - 39, - 73, - 46, - 200, - 207, - 199, - 206, - 100, - 181, - 134, - 1, - 143, - 7, - 59, - 217, - 250, - 245, - 120, - 69, - 167, - 75, - 7, - 106, - 245, - 179, - 100, - 78, - 9, - 112, - 136, - 209, - 209, - 47, - 188, - 16, - 29, - 45, - 196, - 190, - 125, - 152, - 192, - 217, - 179, - 66, - 196, - 198, - 78, - 77, - 197, - 198, - 182, - 18, - 14, - 154, - 19, - 216, - 68, - 120, - 174, - 224, - 115, - 59, - 225, - 206, - 86, - 23, - 196, - 76, - 184, - 127, - 63, - 74, - 112, - 222, - 201, - 207, - 199, - 209, - 240, - 198, - 27, - 88, - 206, - 193, - 131, - 60, - 173, - 194, - 65, - 122, - 236, - 49, - 60, - 47, - 42, - 194, - 153, - 75, - 171, - 221, - 78, - 230, - 148, - 0, - 7, - 23, - 19, - 211, - 211, - 19, - 19, - 67, - 243, - 13, - 60, - 24, - 230, - 18, - 193, - 105, - 84, - 86, - 246, - 246, - 86, - 86, - 114, - 71, - 114, - 56, - 58, - 58, - 28, - 142, - 244, - 244, - 64, - 0, - 107, - 105, - 96, - 32, - 61, - 221, - 233, - 12, - 4, - 240, - 15, - 109, - 38, - 60, - 126, - 56, - 1, - 238, - 36, - 185, - 4, - 59, - 74, - 110, - 238, - 181, - 224, - 253, - 247, - 177, - 132, - 83, - 167, - 176, - 132, - 45, - 91, - 112, - 230, - 202, - 207, - 199, - 89, - 73, - 169, - 196, - 235, - 6, - 3, - 78, - 23, - 122, - 253, - 36, - 153, - 83, - 2, - 125, - 100, - 233, - 82, - 159, - 111, - 233, - 82, - 33, - 6, - 7, - 241, - 49, - 239, - 189, - 247, - 103, - 2, - 10, - 197, - 248, - 184, - 66, - 193, - 173, - 164, - 86, - 111, - 223, - 174, - 86, - 11, - 233, - 245, - 215, - 241, - 46, - 174, - 7, - 73, - 73, - 157, - 157, - 73, - 73, - 93, - 164, - 155, - 240, - 194, - 196, - 125, - 157, - 67, - 231, - 222, - 124, - 23, - 232, - 233, - 193, - 103, - 67, - 16, - 2, - 187, - 234, - 165, - 96, - 213, - 42, - 92, - 47, - 110, - 190, - 25, - 187, - 208, - 226, - 197, - 120, - 212, - 106, - 21, - 64, - 163, - 249, - 153, - 204, - 41, - 129, - 33, - 146, - 144, - 208, - 210, - 146, - 144, - 128, - 11, - 17, - 207, - 245, - 88, - 200, - 177, - 99, - 66, - 68, - 70, - 158, - 56, - 17, - 25, - 105, - 179, - 121, - 189, - 54, - 91, - 90, - 218, - 192, - 64, - 90, - 154, - 144, - 120, - 249, - 218, - 180, - 73, - 8, - 185, - 220, - 235, - 149, - 203, - 185, - 238, - 185, - 29, - 56, - 141, - 10, - 194, - 161, - 227, - 240, - 44, - 42, - 10, - 7, - 231, - 206, - 113, - 221, - 99, - 232, - 165, - 165, - 114, - 144, - 158, - 254, - 32, - 137, - 1, - 201, - 201, - 9, - 64, - 171, - 229, - 181, - 255, - 252, - 56, - 103, - 77, - 96, - 140, - 200, - 100, - 141, - 141, - 50, - 153, - 16, - 187, - 119, - 99, - 33, - 176, - 175, - 1, - 31, - 126, - 136, - 199, - 239, - 190, - 19, - 34, - 43, - 203, - 239, - 207, - 202, - 82, - 40, - 2, - 1, - 133, - 66, - 72, - 99, - 99, - 120, - 221, - 231, - 19, - 66, - 169, - 108, - 107, - 83, - 42, - 121, - 60, - 112, - 59, - 112, - 26, - 188, - 190, - 114, - 2, - 24, - 22, - 85, - 136, - 196, - 117, - 191, - 117, - 107, - 60, - 208, - 235, - 113, - 187, - 183, - 98, - 5, - 134, - 94, - 87, - 135, - 119, - 187, - 187, - 177, - 35, - 57, - 157, - 88, - 25, - 61, - 61, - 33, - 36, - 240, - 49, - 73, - 73, - 49, - 155, - 83, - 82, - 254, - 76, - 160, - 166, - 6, - 139, - 130, - 85, - 24, - 156, - 62, - 45, - 196, - 146, - 37, - 118, - 251, - 146, - 37, - 10, - 197, - 230, - 205, - 152, - 0, - 204, - 84, - 160, - 163, - 3, - 19, - 240, - 120, - 148, - 74, - 94, - 47, - 131, - 211, - 224, - 13, - 31, - 246, - 123, - 189, - 62, - 10, - 156, - 60, - 137, - 33, - 158, - 58, - 133, - 115, - 142, - 201, - 116, - 55, - 200, - 205, - 197, - 205, - 137, - 203, - 133, - 79, - 130, - 45, - 10, - 220, - 173, - 173, - 189, - 28, - 228, - 229, - 113, - 133, - 134, - 144, - 0, - 47, - 103, - 25, - 25, - 21, - 21, - 25, - 25, - 212, - 121, - 102, - 54, - 93, - 81, - 81, - 62, - 95, - 84, - 148, - 16, - 71, - 142, - 96, - 33, - 3, - 3, - 66, - 196, - 197, - 249, - 124, - 113, - 113, - 66, - 122, - 251, - 109, - 188, - 130, - 251, - 154, - 212, - 84, - 183, - 59, - 53, - 213, - 71, - 56, - 13, - 238, - 78, - 6, - 114, - 63, - 176, - 88, - 254, - 234, - 247, - 210, - 200, - 200, - 245, - 32, - 47, - 15, - 107, - 93, - 165, - 194, - 103, - 112, - 69, - 153, - 76, - 120, - 215, - 100, - 186, - 1, - 172, - 92, - 121, - 150, - 132, - 144, - 0, - 111, - 107, - 179, - 179, - 31, - 127, - 28, - 247, - 141, - 48, - 52, - 161, - 64, - 175, - 87, - 136, - 196, - 196, - 170, - 170, - 196, - 68, - 33, - 222, - 122, - 11, - 11, - 217, - 191, - 31, - 202, - 144, - 60, - 30, - 88, - 43, - 36, - 190, - 130, - 181, - 151, - 153, - 217, - 218, - 154, - 153, - 25, - 60, - 189, - 114, - 26, - 60, - 124, - 177, - 243, - 244, - 245, - 225, - 243, - 190, - 255, - 30, - 67, - 108, - 108, - 196, - 221, - 149, - 70, - 131, - 3, - 247, - 206, - 59, - 113, - 254, - 49, - 26, - 241, - 73, - 229, - 229, - 120, - 215, - 239, - 95, - 14, - 74, - 75, - 103, - 11, - 125, - 214, - 4, - 88, - 113, - 113, - 121, - 121, - 113, - 177, - 16, - 92, - 32, - 28, - 69, - 74, - 74, - 65, - 65, - 74, - 202, - 162, - 69, - 253, - 253, - 139, - 22, - 9, - 241, - 209, - 71, - 88, - 148, - 221, - 142, - 119, - 71, - 71, - 241, - 220, - 233, - 20, - 66, - 173, - 118, - 185, - 212, - 234, - 224, - 101, - 174, - 157, - 240, - 250, - 138, - 245, - 189, - 119, - 47, - 254, - 226, - 232, - 81, - 12, - 177, - 184, - 56, - 21, - 100, - 102, - 38, - 16, - 156, - 115, - 214, - 173, - 195, - 39, - 237, - 217, - 195, - 45, - 208, - 8, - 220, - 238, - 11, - 76, - 160, - 153, - 132, - 135, - 7, - 2, - 225, - 225, - 66, - 194, - 205, - 178, - 76, - 86, - 88, - 40, - 147, - 45, - 91, - 102, - 181, - 46, - 91, - 38, - 196, - 248, - 248, - 76, - 191, - 135, - 112, - 120, - 26, - 109, - 110, - 22, - 66, - 165, - 114, - 58, - 85, - 42, - 94, - 37, - 56, - 13, - 222, - 116, - 172, - 36, - 87, - 130, - 225, - 97, - 252, - 197, - 200, - 8, - 206, - 60, - 133, - 133, - 25, - 4, - 219, - 97, - 205, - 26, - 222, - 124, - 227, - 147, - 186, - 186, - 112, - 156, - 232, - 116, - 251, - 201, - 5, - 38, - 240, - 19, - 113, - 185, - 118, - 237, - 114, - 185, - 100, - 50, - 171, - 85, - 38, - 51, - 24, - 214, - 172, - 49, - 24, - 140, - 198, - 181, - 107, - 141, - 198, - 136, - 136, - 157, - 59, - 35, - 34, - 132, - 120, - 241, - 69, - 14, - 103, - 166, - 53, - 132, - 70, - 227, - 112, - 104, - 52, - 188, - 90, - 115, - 26, - 188, - 5, - 212, - 146, - 203, - 192, - 243, - 207, - 227, - 47, - 186, - 186, - 112, - 200, - 26, - 141, - 50, - 176, - 122, - 53, - 14, - 101, - 191, - 31, - 175, - 239, - 222, - 141, - 173, - 180, - 124, - 57, - 190, - 158, - 190, - 246, - 218, - 63, - 135, - 254, - 47, - 9, - 4, - 155, - 32, - 235, - 8, - 191, - 239, - 38, - 38, - 182, - 180, - 224, - 120, - 120, - 233, - 37, - 44, - 22, - 222, - 11, - 128, - 205, - 38, - 132, - 86, - 107, - 183, - 107, - 181, - 92, - 235, - 156, - 6, - 239, - 106, - 57, - 129, - 197, - 0, - 166, - 72, - 9, - 95, - 46, - 113, - 138, - 44, - 40, - 192, - 35, - 188, - 104, - 210, - 91, - 28, - 14, - 217, - 146, - 146, - 15, - 192, - 196, - 196, - 92, - 162, - 10, - 33, - 1, - 118, - 156, - 52, - 18, - 157, - 174, - 180, - 84, - 167, - 19, - 98, - 231, - 78, - 44, - 156, - 250, - 172, - 216, - 176, - 1, - 91, - 192, - 102, - 195, - 86, - 64, - 156, - 6, - 175, - 193, - 188, - 49, - 190, - 29, - 168, - 84, - 56, - 88, - 121, - 158, - 129, - 110, - 3, - 140, - 198, - 91, - 65, - 69, - 197, - 167, - 224, - 139, - 47, - 230, - 30, - 79, - 200, - 9, - 48, - 158, - 163, - 6, - 201, - 204, - 118, - 67, - 226, - 215, - 201, - 198, - 70, - 33, - 114, - 114, - 154, - 154, - 114, - 114, - 120, - 51, - 199, - 105, - 240, - 26, - 172, - 33, - 74, - 130, - 157, - 36, - 46, - 14, - 231, - 248, - 180, - 52, - 28, - 1, - 101, - 101, - 39, - 192, - 244, - 116, - 168, - 145, - 92, - 96, - 2, - 193, - 14, - 31, - 158, - 156, - 60, - 124, - 88, - 46, - 247, - 251, - 229, - 114, - 158, - 100, - 205, - 230, - 250, - 122, - 179, - 153, - 223, - 230, - 56, - 13, - 238, - 120, - 252, - 62, - 181, - 130, - 220, - 67, - 120, - 79, - 202, - 35, - 237, - 98, - 98, - 152, - 135, - 239, - 66, - 211, - 132, - 55, - 109, - 252, - 138, - 195, - 221, - 140, - 211, - 224, - 53, - 248, - 33, - 194, - 175, - 41, - 252, - 159, - 191, - 146, - 139, - 47, - 125, - 222, - 190, - 204, - 253, - 70, - 222, - 36, - 252, - 86, - 205, - 105, - 240, - 26, - 204, - 45, - 48, - 76, - 230, - 171, - 68, - 182, - 32, - 159, - 22, - 143, - 18, - 23, - 225, - 89, - 139, - 191, - 119, - 44, - 68, - 89, - 11, - 248, - 113, - 247, - 28, - 225, - 239, - 164, - 11, - 87, - 202, - 255, - 254, - 235, - 244, - 31, - 155, - 12, - 249, - 30, -] -`; - -exports[`imgData node animated.png 1`] = ` -Object { - "data": Array [ - 56, - 141, - 125, - 210, - 203, - 106, - 84, - 65, - 24, - 4, - 224, - 239, - 204, - 104, - 28, - 21, - 98, - 2, - 154, - 11, - 222, - 2, - 26, - 66, - 12, - 10, - 9, - 134, - 16, - 209, - 149, - 193, - 119, - 80, - 119, - 190, - 129, - 11, - 31, - 192, - 55, - 240, - 61, - 124, - 5, - 151, - 130, - 217, - 153, - 224, - 194, - 24, - 7, - 23, - 138, - 10, - 34, - 94, - 32, - 142, - 56, - 224, - 101, - 209, - 117, - 146, - 113, - 102, - 146, - 130, - 3, - 221, - 244, - 223, - 85, - 117, - 170, - 154, - 65, - 52, - 122, - 214, - 183, - 240, - 24, - 205, - 33, - 115, - 3, - 195, - 48, - 141, - 71, - 88, - 200, - 254, - 60, - 110, - 100, - 125, - 56, - 132, - 23, - 15, - 34, - 248, - 131, - 107, - 120, - 144, - 125, - 11, - 93, - 252, - 14, - 233, - 4, - 118, - 122, - 47, - 212, - 214, - 166, - 113, - 12, - 159, - 240, - 30, - 247, - 240, - 18, - 231, - 176, - 136, - 167, - 184, - 132, - 87, - 216, - 142, - 155, - 147, - 232, - 52, - 227, - 226, - 62, - 238, - 226, - 91, - 134, - 151, - 226, - 230, - 73, - 246, - 103, - 241, - 3, - 235, - 56, - 133, - 235, - 152, - 67, - 187, - 138, - 131, - 25, - 220, - 198, - 114, - 20, - 30, - 134, - 224, - 87, - 143, - 211, - 70, - 136, - 103, - 241, - 5, - 155, - 113, - 251, - 31, - 174, - 226, - 206, - 144, - 108, - 106, - 44, - 68, - 121, - 23, - 21, - 214, - 48, - 137, - 191, - 9, - 235, - 25, - 222, - 238, - 67, - 112, - 28, - 151, - 49, - 146, - 187, - 157, - 67, - 9, - 99, - 34, - 4, - 93, - 7, - 116, - 30, - 103, - 163, - 56, - 18, - 130, - 1, - 167, - 167, - 113, - 37, - 135, - 195, - 48, - 147, - 153, - 93, - 212, - 106, - 45, - 172, - 96, - 85, - 169, - 115, - 91, - 9, - 177, - 31, - 75, - 17, - 24, - 197, - 87, - 116, - 155, - 81, - 187, - 25, - 230, - 23, - 74, - 85, - 139, - 56, - 129, - 14, - 142, - 98, - 74, - 9, - 120, - 93, - 121, - 72, - 115, - 184, - 128, - 118, - 237, - 160, - 178, - 247, - 72, - 198, - 149, - 58, - 223, - 225, - 12, - 230, - 241, - 33, - 202, - 29, - 108, - 229, - 108, - 7, - 159, - 235, - 16, - 218, - 248, - 168, - 164, - 187, - 18, - 123, - 175, - 19, - 86, - 43, - 4, - 111, - 226, - 108, - 28, - 223, - 235, - 223, - 236, - 79, - 113, - 44, - 151, - 158, - 43, - 173, - 52, - 242, - 85, - 216, - 192, - 79, - 165, - 242, - 125, - 81, - 69, - 177, - 55, - 180, - 53, - 123, - 173, - 140, - 232, - 171, - 249, - 31, - 210, - 209, - 71, - 210, - ], - "type": "Buffer", -} -`; - -exports[`imgData node black-white.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 45, - 204, - 177, - 9, - 3, - 48, - 12, - 5, - 209, - 235, - 210, - 4, - 178, - 74, - 32, - 11, - 122, - 52, - 111, - 144, - 21, - 60, - 130, - 193, - 141, - 10, - 97, - 69, - 7, - 81, - 241, - 224, - 138, - 47, - 170, - 234, - 210, - 164, - 132, - 108, - 206, - 169, - 37, - 83, - 6, - 231, - 83, - 52, - 87, - 18, - 226, - 17, - 178, - 33, - 191, - 75, - 38, - 61, - 27, - 66, - 115, - 37, - 37, - 94, - 139, - 218, - 178, - 158, - 111, - 106, - 202, - 48, - 105, - 46, - 157, - 41, - 97, - 110, - 233, - 111, - 48, - 101, - 240, - 191, - 31, - 16, - 135, - 73, - 47, - ], - "type": "Buffer", -} -`; - -exports[`imgData node grayscale-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 99, - 100, - 96, - 36, - 0, - 20, - 8, - 200, - 179, - 12, - 5, - 5, - 140, - 15, - 8, - 41, - 248, - 247, - 31, - 63, - 96, - 121, - 48, - 28, - 20, - 48, - 202, - 17, - 144, - 103, - 100, - 162, - 121, - 92, - 12, - 6, - 5, - 140, - 143, - 240, - 202, - 254, - 255, - 207, - 248, - 135, - 230, - 113, - 49, - 24, - 20, - 48, - 202, - 224, - 149, - 101, - 100, - 4, - 0, - 80, - 229, - 254, - 113, - ], - "type": "Buffer", -} -`; - -exports[`imgData node grayscale-16bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 213, - 210, - 49, - 10, - 192, - 48, - 12, - 67, - 81, - 57, - 91, - 239, - 127, - 198, - 220, - 160, - 147, - 192, - 40, - 123, - 50, - 213, - 42, - 4, - 163, - 217, - 143, - 63, - 56, - 128, - 167, - 184, - 87, - 19, - 19, - 99, - 160, - 58, - 130, - 96, - 29, - 8, - 153, - 0, - 221, - 130, - 246, - 64, - 202, - 4, - 232, - 22, - 220, - 6, - 66, - 38, - 64, - 183, - 160, - 61, - 144, - 50, - 1, - 186, - 5, - 183, - 129, - 144, - 9, - 208, - 45, - 104, - 15, - 164, - 76, - 96, - 63, - 111, - 7, - 236, - 79, - 244, - 25, - 56, - 207, - 127, - 0, - 22, - 216, - 75, - 216, - 95, - ], - "type": "Buffer", -} -`; - -exports[`imgData node grayscale-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 99, - 252, - 207, - 192, - 192, - 1, - 133, - 156, - 104, - 52, - 49, - 34, - 156, - 44, - 223, - 25, - 40, - 3, - 44, - 63, - 134, - 190, - 1, - 163, - 97, - 48, - 26, - 6, - 84, - 49, - 96, - 52, - 16, - 71, - 195, - 128, - 42, - 6, - 140, - 6, - 226, - 104, - 24, - 80, - 195, - 0, - 0, - 223, - 42, - 32, - 125, - ], - "type": "Buffer", -} -`; - -exports[`imgData node grayscale-alpha-16bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 197, - 151, - 95, - 104, - 91, - 231, - 25, - 198, - 127, - 150, - 143, - 164, - 163, - 99, - 235, - 248, - 72, - 117, - 82, - 71, - 84, - 174, - 157, - 40, - 56, - 133, - 18, - 26, - 186, - 66, - 186, - 45, - 23, - 177, - 189, - 142, - 80, - 210, - 46, - 37, - 52, - 18, - 187, - 200, - 228, - 208, - 66, - 105, - 75, - 97, - 137, - 119, - 17, - 157, - 139, - 93, - 72, - 190, - 152, - 147, - 139, - 208, - 244, - 162, - 201, - 144, - 22, - 88, - 176, - 26, - 2, - 131, - 102, - 37, - 133, - 36, - 166, - 140, - 210, - 122, - 132, - 210, - 226, - 149, - 109, - 161, - 105, - 234, - 74, - 173, - 226, - 25, - 87, - 71, - 145, - 237, - 99, - 253, - 57, - 150, - 119, - 241, - 126, - 25, - 161, - 116, - 215, - 53, - 24, - 153, - 79, - 199, - 210, - 251, - 62, - 239, - 243, - 62, - 207, - 243, - 1, - 96, - 101, - 97, - 88, - 135, - 61, - 167, - 96, - 212, - 130, - 23, - 206, - 194, - 177, - 1, - 56, - 254, - 71, - 200, - 14, - 193, - 217, - 63, - 195, - 197, - 93, - 240, - 222, - 101, - 248, - 232, - 9, - 248, - 231, - 95, - 225, - 238, - 94, - 88, - 191, - 46, - 191, - 119, - 247, - 202, - 217, - 71, - 79, - 200, - 51, - 23, - 119, - 201, - 255, - 100, - 135, - 228, - 51, - 142, - 13, - 200, - 103, - 142, - 90, - 242, - 29, - 195, - 186, - 124, - 39, - 128, - 102, - 101, - 161, - 102, - 91, - 185, - 174, - 25, - 240, - 21, - 161, - 187, - 2, - 90, - 17, - 2, - 187, - 33, - 112, - 8, - 244, - 38, - 132, - 222, - 134, - 230, - 117, - 104, - 23, - 193, - 211, - 96, - 99, - 4, - 58, - 207, - 2, - 111, - 200, - 135, - 116, - 146, - 114, - 230, - 105, - 208, - 94, - 144, - 103, - 155, - 41, - 88, - 159, - 4, - 247, - 16, - 172, - 93, - 130, - 85, - 3, - 234, - 21, - 168, - 167, - 160, - 86, - 128, - 90, - 10, - 172, - 108, - 45, - 211, - 53, - 172, - 67, - 173, - 96, - 229, - 156, - 84, - 36, - 27, - 117, - 225, - 33, - 23, - 30, - 90, - 255, - 63, - 175, - 63, - 112, - 6, - 240, - 157, - 1, - 223, - 133, - 190, - 247, - 250, - 67, - 103, - 234, - 181, - 106, - 64, - 100, - 198, - 177, - 173, - 116, - 45, - 163, - 89, - 89, - 233, - 188, - 203, - 133, - 170, - 97, - 101, - 125, - 39, - 161, - 59, - 3, - 254, - 211, - 16, - 200, - 128, - 126, - 18, - 66, - 25, - 232, - 201, - 64, - 51, - 3, - 237, - 12, - 120, - 39, - 161, - 147, - 129, - 205, - 140, - 66, - 32, - 7, - 94, - 14, - 218, - 83, - 208, - 204, - 65, - 35, - 7, - 110, - 14, - 214, - 114, - 176, - 50, - 5, - 245, - 28, - 212, - 114, - 224, - 228, - 160, - 58, - 5, - 81, - 183, - 102, - 71, - 82, - 96, - 102, - 65, - 139, - 100, - 5, - 118, - 159, - 11, - 190, - 147, - 176, - 60, - 21, - 201, - 250, - 230, - 64, - 27, - 3, - 255, - 151, - 160, - 95, - 132, - 208, - 34, - 244, - 140, - 65, - 195, - 131, - 214, - 135, - 224, - 157, - 134, - 141, - 195, - 176, - 249, - 136, - 20, - 176, - 113, - 88, - 206, - 90, - 31, - 202, - 51, - 238, - 83, - 176, - 246, - 58, - 172, - 220, - 128, - 123, - 199, - 192, - 217, - 2, - 213, - 131, - 176, - 60, - 11, - 253, - 39, - 29, - 59, - 226, - 66, - 223, - 12, - 152, - 49, - 197, - 1, - 173, - 8, - 218, - 47, - 164, - 115, - 223, - 28, - 44, - 205, - 90, - 89, - 223, - 163, - 160, - 237, - 131, - 96, - 12, - 244, - 189, - 96, - 28, - 129, - 112, - 26, - 26, - 103, - 161, - 61, - 1, - 27, - 253, - 176, - 249, - 19, - 85, - 192, - 60, - 180, - 175, - 64, - 35, - 15, - 235, - 191, - 131, - 213, - 2, - 212, - 215, - 160, - 246, - 47, - 168, - 182, - 96, - 249, - 54, - 44, - 205, - 194, - 214, - 209, - 154, - 29, - 205, - 128, - 85, - 5, - 243, - 93, - 232, - 189, - 143, - 64, - 96, - 55, - 248, - 127, - 38, - 176, - 107, - 99, - 224, - 123, - 20, - 22, - 11, - 145, - 172, - 239, - 12, - 248, - 63, - 128, - 224, - 10, - 24, - 37, - 8, - 159, - 128, - 245, - 58, - 52, - 223, - 2, - 111, - 5, - 54, - 175, - 74, - 1, - 222, - 136, - 156, - 173, - 251, - 97, - 245, - 4, - 212, - 75, - 224, - 188, - 0, - 203, - 71, - 97, - 201, - 132, - 197, - 2, - 12, - 164, - 29, - 187, - 63, - 1, - 145, - 12, - 152, - 175, - 64, - 184, - 8, - 61, - 243, - 10, - 129, - 192, - 33, - 8, - 148, - 101, - 230, - 254, - 47, - 165, - 115, - 223, - 25, - 168, - 152, - 86, - 86, - 139, - 67, - 112, - 16, - 140, - 65, - 8, - 15, - 130, - 53, - 8, - 141, - 65, - 104, - 239, - 129, - 206, - 160, - 20, - 208, - 46, - 65, - 163, - 4, - 107, - 37, - 168, - 255, - 29, - 156, - 18, - 44, - 151, - 224, - 63, - 37, - 168, - 148, - 33, - 86, - 175, - 217, - 91, - 63, - 131, - 104, - 0, - 250, - 118, - 64, - 248, - 91, - 232, - 153, - 1, - 227, - 47, - 10, - 1, - 189, - 9, - 250, - 30, - 33, - 156, - 126, - 81, - 96, - 247, - 127, - 0, - 90, - 28, - 74, - 229, - 72, - 86, - 211, - 64, - 215, - 161, - 183, - 23, - 44, - 11, - 92, - 23, - 90, - 45, - 232, - 116, - 164, - 128, - 86, - 75, - 206, - 234, - 117, - 168, - 86, - 97, - 105, - 9, - 42, - 21, - 40, - 149, - 97, - 48, - 238, - 216, - 15, - 215, - 161, - 127, - 2, - 172, - 10, - 132, - 127, - 13, - 61, - 105, - 48, - 138, - 16, - 154, - 86, - 8, - 132, - 222, - 134, - 208, - 46, - 97, - 123, - 104, - 81, - 102, - 30, - 92, - 145, - 206, - 53, - 13, - 238, - 124, - 101, - 101, - 253, - 251, - 193, - 56, - 10, - 214, - 4, - 108, - 57, - 6, - 141, - 81, - 232, - 252, - 70, - 10, - 104, - 228, - 97, - 101, - 22, - 170, - 5, - 88, - 204, - 67, - 57, - 15, - 119, - 110, - 192, - 246, - 225, - 154, - 29, - 139, - 65, - 255, - 10, - 68, - 210, - 96, - 206, - 201, - 54, - 25, - 95, - 66, - 168, - 8, - 193, - 251, - 28, - 104, - 94, - 7, - 227, - 83, - 121, - 179, - 103, - 76, - 8, - 103, - 148, - 4, - 118, - 93, - 7, - 255, - 126, - 184, - 149, - 143, - 100, - 131, - 143, - 65, - 95, - 13, - 182, - 108, - 3, - 119, - 20, - 188, - 83, - 82, - 128, - 59, - 10, - 213, - 73, - 184, - 91, - 131, - 133, - 143, - 225, - 86, - 30, - 70, - 38, - 28, - 59, - 254, - 53, - 108, - 221, - 10, - 145, - 58, - 152, - 19, - 208, - 219, - 3, - 70, - 6, - 244, - 36, - 4, - 103, - 32, - 56, - 174, - 16, - 104, - 23, - 161, - 21, - 151, - 61, - 111, - 120, - 194, - 246, - 240, - 9, - 153, - 121, - 111, - 175, - 116, - 30, - 124, - 12, - 230, - 39, - 173, - 172, - 81, - 134, - 254, - 50, - 60, - 106, - 67, - 251, - 115, - 41, - 160, - 102, - 67, - 37, - 14, - 95, - 124, - 2, - 243, - 113, - 216, - 61, - 93, - 179, - 135, - 158, - 134, - 129, - 11, - 16, - 141, - 130, - 185, - 2, - 189, - 105, - 8, - 253, - 1, - 244, - 103, - 32, - 248, - 15, - 8, - 20, - 193, - 127, - 31, - 1, - 79, - 131, - 246, - 107, - 34, - 50, - 173, - 15, - 101, - 213, - 214, - 235, - 66, - 56, - 203, - 18, - 216, - 251, - 106, - 96, - 148, - 97, - 46, - 30, - 201, - 70, - 18, - 48, - 156, - 128, - 70, - 66, - 10, - 88, - 188, - 6, - 255, - 190, - 13, - 115, - 183, - 97, - 111, - 217, - 177, - 119, - 62, - 9, - 219, - 44, - 136, - 166, - 193, - 52, - 161, - 167, - 14, - 161, - 52, - 232, - 99, - 16, - 248, - 57, - 248, - 159, - 7, - 127, - 17, - 52, - 79, - 33, - 176, - 49, - 2, - 27, - 215, - 68, - 225, - 188, - 211, - 178, - 231, - 205, - 183, - 132, - 237, - 174, - 43, - 51, - 223, - 178, - 77, - 58, - 143, - 36, - 224, - 234, - 109, - 43, - 27, - 223, - 15, - 63, - 61, - 42, - 5, - 124, - 126, - 14, - 174, - 190, - 15, - 7, - 18, - 53, - 123, - 87, - 25, - 98, - 167, - 32, - 122, - 23, - 194, - 67, - 96, - 24, - 160, - 127, - 7, - 193, - 87, - 193, - 127, - 16, - 180, - 227, - 160, - 221, - 132, - 238, - 25, - 232, - 190, - 165, - 16, - 232, - 60, - 11, - 29, - 67, - 228, - 117, - 227, - 176, - 136, - 140, - 183, - 34, - 171, - 214, - 106, - 9, - 225, - 220, - 81, - 129, - 125, - 56, - 1, - 241, - 253, - 112, - 238, - 124, - 36, - 59, - 62, - 46, - 5, - 156, - 59, - 15, - 47, - 191, - 228, - 216, - 143, - 151, - 97, - 160, - 12, - 214, - 52, - 24, - 179, - 160, - 47, - 64, - 32, - 0, - 254, - 5, - 208, - 210, - 208, - 189, - 91, - 137, - 221, - 47, - 69, - 254, - 125, - 239, - 41, - 4, - 120, - 3, - 54, - 147, - 162, - 237, - 155, - 143, - 136, - 194, - 109, - 94, - 149, - 61, - 239, - 116, - 132, - 237, - 222, - 41, - 153, - 121, - 35, - 33, - 157, - 143, - 143, - 195, - 139, - 71, - 196, - 84, - 47, - 189, - 83, - 179, - 183, - 111, - 135, - 190, - 11, - 160, - 127, - 3, - 254, - 83, - 160, - 77, - 128, - 239, - 79, - 224, - 243, - 129, - 175, - 14, - 93, - 19, - 208, - 213, - 7, - 93, - 35, - 208, - 245, - 55, - 232, - 42, - 2, - 103, - 192, - 199, - 143, - 252, - 163, - 213, - 108, - 241, - 243, - 142, - 33, - 174, - 182, - 113, - 88, - 180, - 221, - 27, - 17, - 133, - 107, - 181, - 100, - 207, - 221, - 81, - 97, - 251, - 226, - 53, - 153, - 249, - 185, - 243, - 210, - 57, - 192, - 139, - 71, - 224, - 229, - 151, - 224, - 241, - 50, - 12, - 236, - 3, - 235, - 132, - 26, - 193, - 29, - 53, - 2, - 19, - 180, - 188, - 26, - 193, - 101, - 53, - 130, - 36, - 248, - 108, - 208, - 28, - 251, - 1, - 18, - 230, - 20, - 9, - 175, - 40, - 18, - 150, - 132, - 132, - 43, - 179, - 178, - 231, - 149, - 184, - 176, - 253, - 234, - 251, - 50, - 243, - 237, - 219, - 165, - 139, - 151, - 95, - 146, - 130, - 14, - 36, - 96, - 87, - 28, - 98, - 147, - 16, - 205, - 63, - 64, - 194, - 48, - 4, - 11, - 138, - 132, - 57, - 69, - 194, - 231, - 160, - 123, - 143, - 66, - 224, - 127, - 107, - 56, - 165, - 214, - 48, - 47, - 198, - 178, - 86, - 82, - 242, - 90, - 16, - 145, - 249, - 226, - 19, - 89, - 181, - 3, - 137, - 154, - 253, - 120, - 89, - 102, - 14, - 210, - 249, - 129, - 4, - 92, - 189, - 13, - 78, - 28, - 118, - 254, - 234, - 123, - 107, - 184, - 13, - 66, - 121, - 208, - 95, - 131, - 64, - 83, - 173, - 97, - 74, - 173, - 161, - 99, - 75, - 140, - 106, - 133, - 84, - 152, - 240, - 148, - 165, - 158, - 16, - 99, - 169, - 86, - 69, - 94, - 23, - 62, - 22, - 145, - 217, - 91, - 118, - 236, - 93, - 138, - 237, - 250, - 55, - 82, - 192, - 192, - 62, - 233, - 220, - 137, - 195, - 92, - 28, - 220, - 105, - 184, - 247, - 160, - 16, - 141, - 64, - 239, - 41, - 8, - 221, - 0, - 93, - 83, - 66, - 148, - 4, - 255, - 144, - 66, - 160, - 121, - 29, - 154, - 159, - 170, - 36, - 243, - 148, - 242, - 243, - 146, - 184, - 218, - 210, - 146, - 104, - 251, - 173, - 188, - 40, - 220, - 206, - 39, - 101, - 207, - 173, - 105, - 97, - 59, - 200, - 204, - 99, - 147, - 210, - 185, - 59, - 13, - 243, - 147, - 208, - 156, - 0, - 247, - 107, - 88, - 93, - 133, - 72, - 24, - 204, - 2, - 244, - 190, - 3, - 198, - 77, - 37, - 197, - 73, - 37, - 197, - 142, - 173, - 2, - 228, - 239, - 85, - 140, - 122, - 93, - 194, - 132, - 243, - 130, - 88, - 106, - 165, - 34, - 198, - 50, - 50, - 225, - 216, - 67, - 79, - 43, - 104, - 239, - 10, - 201, - 180, - 9, - 41, - 192, - 152, - 149, - 153, - 111, - 179, - 164, - 243, - 230, - 132, - 20, - 220, - 30, - 134, - 70, - 3, - 92, - 19, - 220, - 188, - 50, - 163, - 55, - 149, - 25, - 165, - 32, - 104, - 43, - 4, - 214, - 39, - 193, - 13, - 169, - 12, - 119, - 67, - 146, - 204, - 242, - 81, - 241, - 243, - 82, - 89, - 92, - 45, - 254, - 181, - 130, - 52, - 45, - 228, - 210, - 23, - 100, - 207, - 65, - 216, - 30, - 30, - 146, - 247, - 6, - 46, - 72, - 231, - 237, - 97, - 184, - 243, - 21, - 120, - 30, - 52, - 195, - 208, - 44, - 64, - 163, - 2, - 225, - 156, - 178, - 227, - 36, - 132, - 238, - 111, - 129, - 123, - 8, - 214, - 202, - 18, - 32, - 239, - 29, - 147, - 24, - 181, - 100, - 74, - 152, - 24, - 140, - 59, - 118, - 44, - 38, - 174, - 22, - 141, - 10, - 169, - 12, - 67, - 214, - 203, - 167, - 84, - 36, - 16, - 144, - 51, - 211, - 148, - 103, - 86, - 87, - 165, - 115, - 207, - 147, - 6, - 60, - 19, - 218, - 121, - 104, - 6, - 160, - 177, - 3, - 26, - 223, - 66, - 35, - 9, - 70, - 80, - 33, - 176, - 118, - 9, - 86, - 222, - 148, - 244, - 234, - 108, - 145, - 12, - 183, - 88, - 144, - 36, - 243, - 112, - 93, - 249, - 121, - 93, - 92, - 173, - 167, - 46, - 218, - 238, - 95, - 16, - 133, - 3, - 217, - 115, - 61, - 44, - 108, - 55, - 71, - 100, - 230, - 174, - 41, - 157, - 123, - 38, - 84, - 76, - 232, - 164, - 193, - 75, - 40, - 231, - 125, - 5, - 90, - 41, - 104, - 205, - 43, - 4, - 86, - 13, - 168, - 27, - 18, - 157, - 171, - 7, - 37, - 64, - 14, - 164, - 29, - 123, - 235, - 103, - 146, - 100, - 34, - 105, - 229, - 231, - 105, - 113, - 181, - 224, - 171, - 162, - 237, - 93, - 138, - 3, - 90, - 94, - 246, - 60, - 148, - 23, - 182, - 155, - 5, - 153, - 121, - 179, - 32, - 157, - 119, - 210, - 210, - 80, - 103, - 20, - 188, - 43, - 208, - 174, - 66, - 59, - 9, - 173, - 231, - 20, - 2, - 245, - 10, - 220, - 115, - 37, - 183, - 47, - 171, - 244, - 218, - 159, - 144, - 12, - 103, - 85, - 132, - 60, - 189, - 61, - 202, - 207, - 199, - 68, - 80, - 186, - 119, - 139, - 182, - 131, - 252, - 237, - 63, - 40, - 123, - 30, - 186, - 33, - 108, - 55, - 231, - 100, - 230, - 205, - 128, - 116, - 222, - 25, - 149, - 198, - 58, - 57, - 216, - 248, - 45, - 120, - 73, - 240, - 98, - 10, - 129, - 122, - 10, - 156, - 25, - 185, - 52, - 244, - 159, - 116, - 236, - 104, - 70, - 210, - 107, - 223, - 14, - 149, - 225, - 50, - 42, - 201, - 60, - 35, - 126, - 174, - 29, - 23, - 87, - 235, - 26, - 81, - 5, - 92, - 22, - 133, - 11, - 52, - 101, - 207, - 141, - 155, - 194, - 246, - 112, - 78, - 102, - 222, - 46, - 74, - 231, - 157, - 28, - 44, - 79, - 65, - 199, - 134, - 78, - 10, - 54, - 108, - 248, - 241, - 175, - 102, - 142, - 45, - 23, - 197, - 200, - 140, - 99, - 71, - 82, - 234, - 198, - 242, - 174, - 202, - 237, - 51, - 42, - 189, - 22, - 37, - 195, - 5, - 138, - 146, - 100, - 186, - 213, - 69, - 182, - 171, - 40, - 5, - 248, - 146, - 162, - 237, - 254, - 148, - 40, - 92, - 48, - 41, - 123, - 110, - 36, - 133, - 237, - 173, - 148, - 204, - 220, - 75, - 74, - 231, - 155, - 51, - 224, - 164, - 96, - 51, - 171, - 56, - 96, - 101, - 107, - 25, - 43, - 45, - 119, - 53, - 51, - 38, - 55, - 150, - 158, - 121, - 201, - 237, - 161, - 105, - 73, - 175, - 193, - 113, - 149, - 225, - 60, - 73, - 50, - 190, - 247, - 128, - 51, - 170, - 0, - 91, - 25, - 139, - 39, - 242, - 26, - 28, - 23, - 145, - 9, - 217, - 178, - 106, - 173, - 121, - 33, - 156, - 23, - 19, - 216, - 59, - 105, - 249, - 242, - 154, - 13, - 255, - 5, - 32, - 2, - 199, - 15, - ], - "type": "Buffer", -} -`; - -exports[`imgData node interlaced-grayscale-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 181, - 144, - 93, - 10, - 194, - 48, - 16, - 132, - 157, - 186, - 200, - 28, - 66, - 196, - 123, - 248, - 67, - 207, - 37, - 62, - 136, - 120, - 176, - 170, - 23, - 17, - 15, - 33, - 75, - 220, - 166, - 190, - 36, - 15, - 93, - 33, - 165, - 148, - 206, - 211, - 228, - 155, - 205, - 50, - 44, - 22, - 36, - 17, - 85, - 21, - 21, - 73, - 152, - 170, - 66, - 72, - 34, - 168, - 42, - 86, - 36, - 161, - 170, - 138, - 139, - 36, - 197, - 143, - 153, - 153, - 153, - 8, - 19, - 9, - 137, - 160, - 74, - 0, - 215, - 108, - 44, - 9, - 231, - 108, - 242, - 26, - 220, - 178, - 9, - 57, - 58, - 101, - 83, - 87, - 125, - 161, - 113, - 64, - 162, - 197, - 158, - 112, - 236, - 191, - 163, - 136, - 223, - 241, - 240, - 59, - 130, - 251, - 130, - 189, - 7, - 240, - 95, - 124, - 177, - 63, - 128, - 187, - 7, - 173, - 47, - 214, - 12, - 1, - 28, - 60, - 88, - 142, - 239, - 241, - 244, - 224, - 59, - 190, - 199, - 206, - 131, - 45, - 202, - 146, - 122, - 234, - 0, - 94, - 67, - 27, - 98, - 87, - 150, - 52, - 83, - 7, - 176, - 25, - 200, - 69, - 230, - 191, - 195, - 187, - 152, - 118, - 157, - 132, - 249, - 239, - 176, - 46, - 166, - 192, - 15, - 155, - 185, - 255, - 69, - ], - "type": "Buffer", -} -`; - -exports[`imgData node interlaced-pallete-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 101, - 208, - 105, - 92, - 11, - 0, - 24, - 6, - 240, - 55, - 17, - 169, - 144, - 74, - 148, - 210, - 77, - 172, - 99, - 41, - 41, - 73, - 229, - 168, - 16, - 210, - 68, - 88, - 138, - 20, - 202, - 81, - 97, - 209, - 161, - 50, - 57, - 115, - 37, - 34, - 66, - 214, - 33, - 87, - 209, - 42, - 228, - 152, - 200, - 18, - 77, - 37, - 202, - 58, - 17, - 57, - 138, - 22, - 229, - 90, - 60, - 223, - 250, - 176, - 255, - 231, - 247, - 125, - 127, - 207, - 243, - 82, - 134, - 69, - 52, - 155, - 88, - 76, - 49, - 135, - 130, - 77, - 157, - 25, - 212, - 236, - 46, - 53, - 35, - 158, - 176, - 174, - 151, - 92, - 248, - 222, - 2, - 242, - 72, - 109, - 80, - 33, - 145, - 132, - 27, - 66, - 150, - 122, - 26, - 212, - 158, - 93, - 220, - 66, - 101, - 246, - 154, - 137, - 158, - 38, - 181, - 233, - 228, - 104, - 24, - 27, - 170, - 227, - 167, - 26, - 65, - 185, - 86, - 105, - 218, - 141, - 242, - 234, - 53, - 148, - 193, - 179, - 16, - 70, - 215, - 177, - 123, - 251, - 134, - 89, - 46, - 76, - 190, - 216, - 155, - 35, - 232, - 219, - 10, - 246, - 48, - 77, - 117, - 110, - 96, - 168, - 244, - 173, - 55, - 139, - 220, - 37, - 82, - 174, - 89, - 72, - 223, - 29, - 53, - 181, - 33, - 67, - 20, - 21, - 51, - 51, - 187, - 187, - 171, - 171, - 235, - 235, - 59, - 59, - 201, - 201, - 201, - 198, - 198, - 192, - 192, - 215, - 183, - 181, - 53, - 50, - 50, - 37, - 165, - 170, - 138, - 2, - 2, - 74, - 75, - 237, - 236, - 10, - 10, - 42, - 43, - 205, - 205, - 125, - 124, - 242, - 243, - 169, - 169, - 201, - 205, - 205, - 216, - 184, - 173, - 205, - 213, - 181, - 171, - 171, - 168, - 40, - 41, - 137, - 130, - 130, - 74, - 74, - 178, - 178, - 18, - 18, - 172, - 173, - 189, - 188, - 20, - 20, - 226, - 226, - 72, - 89, - 185, - 167, - 39, - 48, - 48, - 47, - 79, - 73, - 41, - 44, - 76, - 87, - 55, - 60, - 156, - 10, - 11, - 115, - 114, - 140, - 140, - 28, - 28, - 58, - 58, - 146, - 147, - 109, - 109, - 253, - 253, - 41, - 62, - 62, - 38, - 38, - 42, - 74, - 78, - 174, - 162, - 66, - 75, - 75, - 95, - 191, - 188, - 156, - 50, - 50, - 120, - 60, - 11, - 11, - 161, - 48, - 58, - 186, - 174, - 142, - 205, - 238, - 237, - 149, - 13, - 102, - 105, - 169, - 167, - 167, - 161, - 65, - 212, - 222, - 158, - 157, - 93, - 92, - 220, - 210, - 34, - 155, - 148, - 197, - 114, - 113, - 97, - 50, - 249, - 124, - 177, - 216, - 219, - 155, - 195, - 17, - 8, - 100, - 163, - 151, - 149, - 217, - 219, - 107, - 106, - 38, - 38, - 122, - 122, - 154, - 152, - 212, - 214, - 166, - 167, - 203, - 118, - 9, - 14, - 246, - 240, - 48, - 53, - 77, - 77, - 117, - 118, - 110, - 104, - 96, - 48, - 84, - 84, - 100, - 203, - 57, - 58, - 26, - 26, - 198, - 198, - 134, - 134, - 234, - 232, - 248, - 249, - 169, - 170, - 70, - 68, - 200, - 182, - 109, - 110, - 22, - 137, - 220, - 221, - 37, - 18, - 169, - 148, - 203, - 53, - 51, - 11, - 9, - 145, - 173, - 159, - 155, - 107, - 101, - 149, - 150, - 166, - 173, - 221, - 216, - 40, - 47, - 175, - 174, - 94, - 83, - 35, - 251, - 143, - 65, - 208, - 31, - 118, - 194, - 47, - 216, - 6, - 27, - 224, - 27, - 252, - 4, - 26, - 3, - 35, - 225, - 0, - 44, - 129, - 205, - 48, - 11, - 158, - 192, - 39, - 160, - 201, - 48, - 1, - 78, - 192, - 53, - 88, - 15, - 195, - 225, - 18, - 188, - 6, - 154, - 11, - 83, - 225, - 28, - 12, - 128, - 149, - 240, - 1, - 118, - 193, - 99, - 160, - 229, - 48, - 27, - 174, - 192, - 106, - 88, - 6, - 119, - 96, - 13, - 220, - 5, - 186, - 15, - 19, - 225, - 32, - 188, - 129, - 167, - 112, - 19, - 62, - 195, - 85, - 160, - 23, - 48, - 13, - 78, - 194, - 12, - 120, - 0, - 187, - 225, - 33, - 156, - 2, - 250, - 8, - 243, - 225, - 60, - 28, - 133, - 219, - 176, - 10, - 46, - 192, - 94, - 160, - 223, - 240, - 10, - 110, - 193, - 90, - 152, - 2, - 115, - 96, - 7, - 12, - 4, - 122, - 6, - 215, - 225, - 8, - 92, - 132, - 241, - 176, - 20, - 246, - 192, - 63, - 160, - 179, - 48, - 24, - 182, - 192, - 33, - 24, - 1, - 235, - 224, - 24, - 252, - 0, - 218, - 10, - 111, - 97, - 17, - 60, - 135, - 126, - 176, - 29, - 78, - 195, - 23, - 160, - 133, - 112, - 15, - 38, - 193, - 48, - 248, - 14, - 251, - 225, - 50, - 188, - 3, - 154, - 7, - 51, - 225, - 6, - 252, - 129, - 247, - 240, - 23, - 246, - 193, - 10, - 160, - 209, - 48, - 10, - 14, - 195, - 116, - 120, - 9, - 67, - 225, - 56, - 44, - 6, - 250, - 10, - 155, - 96, - 35, - 140, - 131, - 71, - 48, - 22, - 206, - 192, - 2, - 248, - 15, - 115, - 254, - 254, - 16, - ], - "type": "Buffer", -} -`; - -exports[`imgData node interlaced-rgb-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 213, - 147, - 65, - 170, - 4, - 33, - 12, - 68, - 171, - 192, - 123, - 120, - 19, - 61, - 89, - 211, - 115, - 51, - 189, - 137, - 215, - 104, - 104, - 181, - 102, - 209, - 12, - 244, - 103, - 90, - 248, - 89, - 100, - 49, - 161, - 22, - 98, - 124, - 86, - 136, - 145, - 146, - 128, - 227, - 18, - 37, - 125, - 214, - 160, - 164, - 207, - 26, - 1, - 0, - 142, - 227, - 18, - 165, - 243, - 198, - 156, - 55, - 230, - 252, - 195, - 244, - 126, - 103, - 118, - 160, - 127, - 139, - 218, - 245, - 180, - 15, - 238, - 210, - 211, - 62, - 2, - 94, - 47, - 244, - 254, - 45, - 74, - 99, - 225, - 161, - 109, - 145, - 24, - 11, - 115, - 109, - 139, - 196, - 88, - 84, - 197, - 109, - 149, - 24, - 99, - 244, - 167, - 224, - 182, - 109, - 207, - 9, - 169, - 0, - 243, - 255, - 162, - 148, - 141, - 64, - 145, - 229, - 60, - 168, - 108, - 4, - 138, - 100, - 57, - 15, - 102, - 43, - 80, - 74, - 153, - 150, - 96, - 206, - 217, - 6, - 24, - 43, - 154, - 1, - 168, - 190, - 0, - 165, - 100, - 4, - 166, - 237, - 225, - 130, - 177, - 34, - 59, - 64, - 37, - 227, - 44, - 77, - 227, - 67, - 4, - 99, - 69, - 118, - 128, - 201, - 58, - 173, - 166, - 201, - 155, - 115, - 134, - 90, - 171, - 47, - 192, - 148, - 146, - 13, - 144, - 26, - 32, - 63, - 93, - 223, - 225, - 151, - 13, - 40, - 69, - 103, - 131, - 38, - 207, - 251, - 175, - 239, - 252, - 211, - 6, - 84, - 244, - 109, - 17, - 155, - 228, - 121, - 63, - 130, - 115, - 135, - 252, - 13, - 24, - 157, - 91, - 196, - 214, - 154, - 60, - 35, - 212, - 90, - 127, - 219, - 128, - 49, - 70, - 87, - 131, - 55, - 223, - 77, - 10, - 49, - ], - "type": "Buffer", -} -`; - -exports[`imgData node interlaced-rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 213, - 150, - 33, - 115, - 227, - 48, - 16, - 133, - 63, - 207, - 24, - 56, - 204, - 97, - 161, - 129, - 129, - 133, - 165, - 62, - 86, - 120, - 127, - 161, - 63, - 161, - 48, - 133, - 46, - 59, - 88, - 120, - 180, - 176, - 176, - 48, - 129, - 185, - 127, - 112, - 48, - 7, - 11, - 83, - 230, - 176, - 87, - 160, - 168, - 145, - 43, - 187, - 145, - 99, - 185, - 241, - 9, - 236, - 236, - 188, - 89, - 189, - 125, - 207, - 43, - 69, - 73, - 36, - 9, - 214, - 111, - 0, - 235, - 29, - 216, - 60, - 181, - 73, - 125, - 101, - 69, - 106, - 235, - 142, - 16, - 64, - 145, - 59, - 59, - 44, - 4, - 80, - 76, - 147, - 109, - 213, - 169, - 199, - 226, - 198, - 235, - 177, - 184, - 241, - 122, - 88, - 232, - 208, - 67, - 218, - 86, - 240, - 111, - 15, - 159, - 98, - 229, - 33, - 123, - 107, - 163, - 161, - 183, - 111, - 108, - 158, - 153, - 232, - 105, - 106, - 42, - 114, - 226, - 196, - 251, - 30, - 77, - 69, - 46, - 146, - 236, - 150, - 82, - 184, - 7, - 72, - 109, - 18, - 182, - 102, - 155, - 224, - 13, - 179, - 141, - 145, - 20, - 176, - 193, - 150, - 30, - 55, - 84, - 97, - 165, - 95, - 118, - 104, - 42, - 133, - 195, - 103, - 173, - 111, - 104, - 47, - 245, - 58, - 156, - 42, - 53, - 49, - 145, - 118, - 75, - 120, - 187, - 7, - 216, - 221, - 195, - 201, - 124, - 25, - 80, - 243, - 145, - 103, - 69, - 199, - 185, - 133, - 44, - 115, - 194, - 242, - 18, - 96, - 90, - 70, - 106, - 80, - 39, - 5, - 200, - 51, - 128, - 105, - 200, - 185, - 232, - 78, - 250, - 185, - 65, - 235, - 57, - 58, - 151, - 212, - 201, - 253, - 99, - 20, - 131, - 20, - 32, - 159, - 28, - 29, - 52, - 52, - 232, - 71, - 234, - 214, - 56, - 13, - 226, - 145, - 214, - 242, - 106, - 37, - 193, - 235, - 181, - 4, - 127, - 95, - 36, - 216, - 92, - 73, - 240, - 242, - 44, - 193, - 211, - 66, - 130, - 199, - 39, - 9, - 202, - 185, - 4, - 119, - 191, - 37, - 184, - 157, - 73, - 240, - 243, - 81, - 130, - 34, - 151, - 224, - 234, - 151, - 4, - 243, - 76, - 130, - 188, - 148, - 0, - 36, - 72, - 237, - 229, - 24, - 102, - 229, - 101, - 106, - 239, - 93, - 124, - 106, - 56, - 92, - 180, - 216, - 14, - 106, - 83, - 140, - 235, - 160, - 78, - 109, - 242, - 72, - 14, - 154, - 168, - 77, - 222, - 219, - 65, - 59, - 181, - 201, - 123, - 56, - 56, - 69, - 109, - 242, - 212, - 254, - 194, - 199, - 167, - 6, - 152, - 62, - 116, - 116, - 208, - 133, - 250, - 232, - 32, - 168, - 65, - 119, - 106, - 131, - 7, - 56, - 56, - 151, - 58, - 192, - 65, - 63, - 234, - 47, - 29, - 196, - 160, - 110, - 113, - 16, - 143, - 218, - 115, - 16, - 155, - 218, - 228, - 137, - 84, - 173, - 96, - 191, - 134, - 122, - 172, - 60, - 228, - 76, - 124, - 21, - 137, - 167, - 17, - 207, - 138, - 129, - 223, - 155, - 33, - 150, - 121, - 217, - 109, - 28, - 236, - 61, - 139, - 187, - 234, - 162, - 1, - 38, - 38, - 223, - 140, - 120, - 2, - 237, - 162, - 1, - 178, - 210, - 224, - 35, - 155, - 64, - 152, - 104, - 23, - 31, - 193, - 4, - 186, - 139, - 118, - 241, - 11, - 77, - 160, - 159, - 104, - 23, - 255, - 198, - 9, - 196, - 19, - 237, - 226, - 103, - 253, - 31, - 186, - 180, - 104, - 128, - 201, - 15, - 128, - 236, - 207, - 0, - 19, - 24, - 94, - 180, - 139, - 71, - 186, - 3, - 223, - 43, - 218, - 173, - 239, - 49, - 129, - 203, - 137, - 118, - 241, - 142, - 19, - 24, - 135, - 104, - 23, - 15, - 152, - 192, - 248, - 68, - 187, - 120, - 203, - 4, - 198, - 45, - 218, - 197, - 157, - 9, - 252, - 63, - 162, - 93, - 252, - 29, - 164, - 20, - 222, - 179, - ], - "type": "Buffer", -} -`; - -exports[`imgData node interlaced-rgb-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 197, - 149, - 65, - 78, - 195, - 48, - 16, - 69, - 159, - 165, - 65, - 184, - 187, - 178, - 102, - 65, - 184, - 6, - 155, - 134, - 30, - 139, - 77, - 18, - 193, - 193, - 18, - 193, - 69, - 42, - 113, - 10, - 42, - 101, - 216, - 64, - 213, - 148, - 144, - 65, - 252, - 72, - 30, - 201, - 138, - 226, - 124, - 127, - 63, - 141, - 39, - 227, - 228, - 100, - 128, - 71, - 96, - 15, - 236, - 13, - 31, - 57, - 15, - 187, - 226, - 99, - 58, - 49, - 226, - 147, - 137, - 228, - 228, - 234, - 123, - 253, - 191, - 61, - 154, - 107, - 128, - 10, - 184, - 159, - 27, - 214, - 181, - 83, - 207, - 203, - 176, - 103, - 158, - 150, - 5, - 99, - 215, - 46, - 10, - 146, - 147, - 183, - 51, - 123, - 159, - 152, - 140, - 198, - 127, - 95, - 14, - 24, - 109, - 32, - 232, - 8, - 4, - 47, - 28, - 151, - 5, - 78, - 19, - 9, - 218, - 64, - 208, - 45, - 126, - 39, - 249, - 46, - 3, - 108, - 191, - 198, - 77, - 240, - 252, - 49, - 23, - 166, - 33, - 10, - 27, - 106, - 209, - 160, - 13, - 242, - 28, - 26, - 188, - 242, - 160, - 25, - 68, - 199, - 16, - 27, - 12, - 181, - 104, - 160, - 1, - 144, - 156, - 156, - 249, - 227, - 153, - 207, - 61, - 141, - 157, - 70, - 96, - 168, - 117, - 64, - 93, - 154, - 96, - 208, - 0, - 176, - 94, - 45, - 229, - 94, - 37, - 120, - 11, - 122, - 82, - 104, - 224, - 98, - 33, - 24, - 226, - 57, - 154, - 171, - 6, - 58, - 129, - 88, - 8, - 70, - 47, - 26, - 184, - 104, - 144, - 252, - 46, - 3, - 228, - 139, - 177, - 9, - 222, - 215, - 210, - 108, - 228, - 191, - 89, - 13, - 185, - 27, - 172, - 0, - 80, - 116, - 127, - 236, - 80, - 21, - 206, - 128, - 218, - 14, - 87, - 0, - 40, - 27, - 229, - 51, - 240, - 206, - 109, - 89, - 0, - 181, - 155, - 203, - 0, - 234, - 109, - 32, - 3, - 20, - 207, - 128, - 31, - 170, - 178, - 0, - 234, - 117, - 40, - 3, - 168, - 215, - 169, - 12, - 80, - 58, - 3, - 159, - 130, - 74, - 83, - 244, - ], - "type": "Buffer", -} -`; - -exports[`imgData node rgb-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 237, - 213, - 193, - 9, - 0, - 48, - 12, - 2, - 64, - 133, - 236, - 145, - 253, - 183, - 114, - 19, - 59, - 68, - 43, - 244, - 161, - 248, - 206, - 225, - 43, - 180, - 13, - 4, - 59, - 128, - 10, - 20, - 248, - 28, - 160, - 237, - 228, - 125, - 76, - 120, - 64, - 129, - 2, - 15, - 74, - 135, - 31, - 194, - 132, - 7, - 20, - 40, - 240, - 160, - 116, - 56, - 35, - 169, - 64, - 129, - 187, - 112, - 119, - 163, - 192, - 1, - 130, - 177, - 249, - 94, - ], - "type": "Buffer", -} -`; - -exports[`imgData node rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 213, - 150, - 193, - 10, - 131, - 48, - 16, - 68, - 167, - 224, - 65, - 127, - 203, - 126, - 183, - 253, - 173, - 246, - 150, - 30, - 6, - 3, - 146, - 134, - 38, - 102, - 147, - 204, - 122, - 24, - 134, - 69, - 228, - 61, - 214, - 160, - 143, - 16, - 66, - 0, - 62, - 47, - 224, - 154, - 239, - 100, - 114, - 115, - 126, - 24, - 61, - 39, - 51, - 95, - 206, - 226, - 243, - 90, - 119, - 183, - 2, - 235, - 206, - 116, - 40, - 112, - 162, - 51, - 151, - 243, - 237, - 242, - 112, - 93, - 209, - 1, - 96, - 243, - 178, - 129, - 95, - 232, - 236, - 242, - 2, - 121, - 116, - 166, - 176, - 192, - 63, - 116, - 166, - 228, - 25, - 40, - 67, - 231, - 92, - 108, - 3, - 53, - 232, - 236, - 50, - 2, - 245, - 232, - 76, - 1, - 129, - 187, - 232, - 204, - 169, - 103, - 160, - 13, - 157, - 243, - 73, - 27, - 176, - 64, - 103, - 31, - 46, - 96, - 135, - 206, - 28, - 40, - 96, - 141, - 30, - 5, - 248, - 199, - 238, - 15, - 29, - 0, - 182, - 103, - 231, - 13, - 244, - 68, - 103, - 239, - 38, - 208, - 31, - 189, - 155, - 192, - 40, - 244, - 40, - 96, - 247, - 29, - 24, - 139, - 206, - 251, - 141, - 54, - 48, - 3, - 157, - 189, - 89, - 96, - 30, - 122, - 179, - 192, - 108, - 244, - 40, - 80, - 127, - 6, - 52, - 208, - 57, - 175, - 220, - 128, - 18, - 58, - 123, - 177, - 128, - 30, - 122, - 177, - 128, - 42, - 122, - 20, - 200, - 159, - 1, - 109, - 116, - 206, - 51, - 27, - 240, - 128, - 206, - 158, - 8, - 248, - 65, - 79, - 4, - 188, - 161, - 51, - 191, - 230, - 66, - 254, - 94, - ], - "type": "Buffer", -} -`; - -exports[`imgData node rgb-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 237, - 214, - 49, - 10, - 128, - 48, - 12, - 70, - 225, - 39, - 100, - 104, - 79, - 161, - 247, - 63, - 85, - 4, - 143, - 33, - 196, - 221, - 197, - 69, - 120, - 29, - 82, - 232, - 80, - 40, - 252, - 31, - 77, - 40, - 217, - 138, - 1, - 48, - 94, - 123, - 126, - 156, - 255, - 186, - 51, - 131, - 29, - 117, - 5, - 71, - 3, - 202, - 6, - 168, - 249, - 13, - 88, - 160, - 7, - 78, - 53, - 30, - 34, - 125, - 128, - 92, - 130, - 84, - 227, - 27, - 176, - 66, - 15, - 92, - 220, - 46, - 0, - 121, - 32, - 136, - 146, - 255, - 226, - 160, - 1, - 54, - 160, - 123, - 64, - 7, - 148, - 60, - 16, - 4, - 217, - 0, - 25, - 80, - 54, - 64, - 127, - 1, - 27, - 240, - 0, - 82, - 32, - 26, - 156, - ], - "type": "Buffer", -} -`; - -exports[`imgData node rgb-alpha-16bit.png 1`] = ` -Object { - "data": Array [ - 120, - 156, - 221, - 153, - 95, - 108, - 28, - 215, - 117, - 198, - 127, - 243, - 143, - 179, - 75, - 114, - 77, - 46, - 229, - 90, - 142, - 75, - 4, - 160, - 172, - 135, - 4, - 145, - 0, - 202, - 180, - 219, - 216, - 198, - 82, - 137, - 2, - 203, - 77, - 16, - 136, - 22, - 32, - 89, - 46, - 82, - 212, - 50, - 90, - 192, - 144, - 91, - 201, - 138, - 148, - 2, - 94, - 113, - 253, - 98, - 44, - 181, - 6, - 90, - 201, - 138, - 12, - 40, - 48, - 80, - 192, - 114, - 138, - 0, - 182, - 229, - 66, - 161, - 209, - 38, - 136, - 92, - 211, - 41, - 137, - 40, - 137, - 29, - 154, - 4, - 68, - 3, - 126, - 144, - 68, - 52, - 149, - 29, - 75, - 144, - 184, - 75, - 47, - 201, - 221, - 225, - 252, - 235, - 195, - 57, - 119, - 169, - 85, - 85, - 52, - 143, - 65, - 30, - 22, - 223, - 206, - 157, - 59, - 119, - 238, - 119, - 238, - 189, - 231, - 124, - 231, - 140, - 149, - 166, - 105, - 10, - 208, - 124, - 23, - 0, - 154, - 19, - 237, - 216, - 152, - 184, - 125, - 251, - 31, - 203, - 125, - 43, - 77, - 27, - 255, - 33, - 127, - 51, - 223, - 128, - 222, - 177, - 230, - 38, - 125, - 240, - 255, - 193, - 230, - 230, - 223, - 175, - 223, - 31, - 90, - 127, - 211, - 15, - 154, - 239, - 102, - 182, - 213, - 70, - 221, - 53, - 91, - 240, - 44, - 64, - 102, - 46, - 51, - 7, - 249, - 114, - 90, - 150, - 198, - 116, - 76, - 48, - 49, - 248, - 55, - 130, - 241, - 113, - 193, - 72, - 219, - 195, - 191, - 23, - 116, - 245, - 218, - 209, - 231, - 157, - 111, - 9, - 90, - 63, - 84, - 212, - 251, - 236, - 82, - 52, - 239, - 217, - 162, - 248, - 215, - 58, - 254, - 79, - 20, - 245, - 126, - 244, - 244, - 45, - 239, - 123, - 68, - 241, - 144, - 96, - 240, - 107, - 69, - 189, - 223, - 28, - 85, - 52, - 215, - 127, - 217, - 34, - 190, - 41, - 115, - 161, - 90, - 130, - 230, - 72, - 102, - 28, - 110, - 50, - 64, - 170, - 54, - 18, - 234, - 217, - 82, - 182, - 4, - 189, - 229, - 116, - 88, - 137, - 79, - 41, - 222, - 175, - 19, - 59, - 172, - 19, - 210, - 118, - 111, - 82, - 39, - 164, - 163, - 184, - 207, - 8, - 218, - 122, - 223, - 214, - 251, - 214, - 189, - 138, - 79, - 233, - 219, - 180, - 61, - 53, - 227, - 223, - 163, - 248, - 68, - 251, - 248, - 145, - 25, - 191, - 79, - 113, - 68, - 9, - 79, - 181, - 99, - 51, - 171, - 248, - 168, - 96, - 99, - 202, - 16, - 111, - 148, - 179, - 163, - 181, - 18, - 52, - 55, - 101, - 230, - 0, - 130, - 9, - 127, - 27, - 184, - 107, - 167, - 36, - 57, - 166, - 83, - 81, - 155, - 9, - 245, - 206, - 225, - 206, - 97, - 200, - 151, - 211, - 126, - 237, - 245, - 85, - 53, - 128, - 174, - 96, - 244, - 175, - 138, - 243, - 58, - 177, - 79, - 212, - 0, - 182, - 160, - 243, - 69, - 53, - 192, - 67, - 74, - 252, - 11, - 58, - 159, - 7, - 20, - 117, - 39, - 165, - 250, - 124, - 162, - 24, - 255, - 86, - 199, - 77, - 116, - 220, - 63, - 21, - 92, - 253, - 51, - 37, - 252, - 39, - 138, - 207, - 42, - 225, - 203, - 74, - 83, - 159, - 95, - 153, - 55, - 196, - 87, - 38, - 59, - 11, - 213, - 18, - 52, - 199, - 50, - 163, - 0, - 205, - 209, - 204, - 24, - 64, - 240, - 170, - 255, - 84, - 219, - 14, - 72, - 116, - 237, - 90, - 155, - 93, - 109, - 39, - 212, - 187, - 54, - 116, - 109, - 128, - 222, - 114, - 186, - 168, - 119, - 255, - 75, - 39, - 90, - 215, - 137, - 94, - 209, - 137, - 126, - 164, - 19, - 155, - 81, - 67, - 252, - 187, - 26, - 98, - 86, - 13, - 161, - 237, - 150, - 98, - 170, - 237, - 137, - 94, - 199, - 138, - 145, - 193, - 135, - 149, - 184, - 94, - 7, - 171, - 74, - 248, - 186, - 18, - 142, - 149, - 230, - 130, - 224, - 114, - 139, - 248, - 242, - 229, - 174, - 129, - 90, - 9, - 26, - 83, - 217, - 2, - 172, - 25, - 32, - 216, - 224, - 95, - 6, - 88, - 157, - 232, - 216, - 214, - 102, - 128, - 120, - 159, - 78, - 69, - 79, - 185, - 217, - 236, - 102, - 205, - 133, - 122, - 247, - 150, - 238, - 45, - 144, - 47, - 167, - 63, - 213, - 187, - 167, - 117, - 162, - 21, - 53, - 128, - 174, - 68, - 112, - 94, - 208, - 211, - 118, - 71, - 209, - 86, - 151, - 203, - 143, - 20, - 191, - 163, - 227, - 232, - 253, - 248, - 3, - 29, - 71, - 175, - 87, - 21, - 3, - 53, - 124, - 243, - 13, - 37, - 172, - 237, - 203, - 191, - 19, - 92, - 154, - 53, - 196, - 151, - 102, - 186, - 7, - 171, - 37, - 88, - 89, - 232, - 236, - 3, - 104, - 78, - 102, - 134, - 1, - 130, - 223, - 248, - 247, - 3, - 4, - 191, - 246, - 255, - 28, - 32, - 252, - 129, - 183, - 175, - 221, - 0, - 167, - 20, - 117, - 83, - 154, - 83, - 110, - 54, - 187, - 89, - 115, - 161, - 158, - 59, - 146, - 59, - 2, - 189, - 229, - 228, - 239, - 212, - 0, - 58, - 193, - 112, - 235, - 45, - 19, - 254, - 39, - 65, - 87, - 175, - 237, - 189, - 130, - 214, - 251, - 58, - 154, - 30, - 133, - 228, - 85, - 29, - 71, - 207, - 112, - 120, - 248, - 150, - 113, - 254, - 66, - 137, - 235, - 245, - 242, - 191, - 8, - 214, - 63, - 55, - 196, - 235, - 71, - 115, - 197, - 90, - 9, - 150, - 239, - 238, - 250, - 12, - 160, - 17, - 103, - 29, - 128, - 96, - 202, - 47, - 0, - 4, - 199, - 252, - 195, - 0, - 225, - 102, - 239, - 2, - 64, - 248, - 37, - 239, - 227, - 54, - 31, - 16, - 109, - 87, - 212, - 35, - 208, - 114, - 63, - 122, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 123, - 122, - 122, - 122, - 32, - 95, - 78, - 244, - 172, - 70, - 145, - 224, - 170, - 217, - 170, - 13, - 65, - 207, - 19, - 116, - 28, - 53, - 128, - 165, - 6, - 72, - 117, - 116, - 221, - 202, - 97, - 168, - 196, - 3, - 193, - 134, - 62, - 191, - 188, - 172, - 52, - 117, - 22, - 139, - 45, - 226, - 139, - 139, - 61, - 119, - 84, - 75, - 176, - 92, - 233, - 42, - 2, - 172, - 236, - 237, - 60, - 13, - 208, - 204, - 101, - 234, - 55, - 27, - 32, - 28, - 241, - 198, - 1, - 194, - 77, - 222, - 28, - 64, - 120, - 206, - 219, - 222, - 182, - 3, - 34, - 245, - 1, - 38, - 160, - 25, - 191, - 110, - 220, - 155, - 57, - 229, - 102, - 179, - 155, - 53, - 23, - 234, - 249, - 124, - 62, - 15, - 189, - 229, - 228, - 73, - 29, - 69, - 189, - 116, - 83, - 113, - 69, - 209, - 85, - 180, - 118, - 170, - 1, - 118, - 232, - 104, - 198, - 171, - 235, - 243, - 13, - 189, - 94, - 82, - 92, - 84, - 172, - 142, - 24, - 226, - 213, - 106, - 190, - 183, - 86, - 130, - 122, - 61, - 151, - 3, - 88, - 169, - 116, - 22, - 1, - 154, - 111, - 100, - 246, - 0, - 4, - 253, - 254, - 21, - 128, - 213, - 201, - 142, - 97, - 128, - 112, - 204, - 27, - 5, - 136, - 126, - 238, - 126, - 13, - 32, - 154, - 112, - 219, - 125, - 128, - 99, - 2, - 152, - 137, - 180, - 198, - 32, - 234, - 215, - 141, - 123, - 51, - 167, - 220, - 108, - 118, - 179, - 230, - 66, - 125, - 221, - 219, - 235, - 222, - 134, - 124, - 57, - 58, - 167, - 132, - 94, - 84, - 3, - 232, - 202, - 121, - 74, - 208, - 214, - 251, - 137, - 122, - 245, - 240, - 53, - 37, - 254, - 87, - 130, - 245, - 231, - 4, - 107, - 218, - 239, - 70, - 139, - 248, - 141, - 29, - 235, - 198, - 171, - 37, - 88, - 60, - 209, - 115, - 16, - 96, - 121, - 185, - 171, - 11, - 160, - 89, - 201, - 20, - 1, - 130, - 69, - 191, - 7, - 96, - 117, - 181, - 163, - 3, - 32, - 12, - 60, - 31, - 32, - 154, - 115, - 55, - 1, - 68, - 79, - 187, - 175, - 0, - 196, - 19, - 78, - 187, - 1, - 108, - 93, - 11, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 117, - 227, - 222, - 204, - 233, - 52, - 155, - 221, - 172, - 185, - 80, - 95, - 191, - 125, - 253, - 118, - 232, - 45, - 135, - 115, - 106, - 0, - 245, - 210, - 181, - 255, - 212, - 183, - 220, - 226, - 113, - 154, - 77, - 37, - 174, - 113, - 126, - 225, - 83, - 193, - 171, - 239, - 24, - 226, - 87, - 207, - 173, - 127, - 164, - 86, - 130, - 218, - 72, - 239, - 56, - 192, - 82, - 181, - 59, - 15, - 208, - 104, - 100, - 179, - 0, - 193, - 81, - 255, - 8, - 192, - 234, - 67, - 29, - 231, - 1, - 162, - 135, - 221, - 95, - 0, - 68, - 151, - 220, - 123, - 1, - 162, - 83, - 238, - 62, - 128, - 184, - 199, - 249, - 28, - 32, - 249, - 103, - 251, - 111, - 219, - 124, - 128, - 173, - 167, - 216, - 104, - 55, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 117, - 227, - 222, - 204, - 41, - 55, - 155, - 221, - 172, - 185, - 80, - 239, - 63, - 212, - 127, - 8, - 242, - 229, - 166, - 30, - 164, - 170, - 42, - 62, - 183, - 87, - 205, - 85, - 19, - 52, - 94, - 252, - 250, - 89, - 193, - 43, - 47, - 25, - 226, - 87, - 142, - 247, - 127, - 183, - 90, - 130, - 133, - 79, - 251, - 238, - 1, - 168, - 63, - 151, - 123, - 17, - 160, - 49, - 147, - 29, - 4, - 8, - 2, - 223, - 7, - 8, - 43, - 94, - 17, - 32, - 124, - 193, - 123, - 30, - 32, - 154, - 119, - 7, - 0, - 226, - 223, - 10, - 131, - 228, - 9, - 251, - 117, - 128, - 248, - 39, - 194, - 48, - 153, - 176, - 111, - 217, - 1, - 251, - 5, - 141, - 104, - 53, - 218, - 205, - 72, - 24, - 19, - 201, - 77, - 64, - 51, - 126, - 221, - 184, - 55, - 115, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 55, - 190, - 188, - 241, - 101, - 232, - 45, - 47, - 78, - 75, - 235, - 127, - 63, - 166, - 230, - 82, - 194, - 215, - 238, - 16, - 188, - 120, - 192, - 16, - 191, - 184, - 127, - 227, - 201, - 90, - 9, - 174, - 159, - 189, - 115, - 39, - 64, - 189, - 47, - 183, - 0, - 208, - 248, - 101, - 246, - 65, - 128, - 224, - 89, - 255, - 4, - 64, - 24, - 202, - 12, - 162, - 138, - 91, - 4, - 136, - 63, - 112, - 30, - 0, - 136, - 191, - 236, - 124, - 12, - 144, - 156, - 183, - 31, - 4, - 72, - 198, - 236, - 81, - 128, - 116, - 179, - 117, - 1, - 32, - 121, - 217, - 222, - 223, - 102, - 0, - 75, - 207, - 188, - 81, - 235, - 45, - 209, - 170, - 218, - 205, - 72, - 24, - 19, - 201, - 77, - 64, - 51, - 126, - 221, - 184, - 55, - 115, - 202, - 205, - 102, - 55, - 107, - 46, - 212, - 135, - 134, - 134, - 134, - 32, - 95, - 190, - 124, - 73, - 239, - 86, - 5, - 167, - 63, - 52, - 196, - 167, - 167, - 135, - 238, - 171, - 150, - 224, - 218, - 129, - 187, - 78, - 2, - 44, - 21, - 186, - 39, - 1, - 154, - 91, - 51, - 147, - 0, - 225, - 107, - 242, - 134, - 168, - 234, - 230, - 1, - 226, - 88, - 102, - 144, - 124, - 223, - 62, - 8, - 144, - 172, - 179, - 111, - 0, - 36, - 95, - 181, - 127, - 5, - 144, - 78, - 89, - 195, - 0, - 233, - 37, - 97, - 148, - 110, - 178, - 230, - 0, - 210, - 9, - 171, - 125, - 7, - 240, - 77, - 69, - 141, - 251, - 70, - 173, - 27, - 209, - 106, - 180, - 155, - 145, - 48, - 38, - 146, - 155, - 128, - 102, - 252, - 186, - 113, - 111, - 230, - 148, - 155, - 205, - 110, - 214, - 92, - 168, - 239, - 126, - 124, - 247, - 227, - 208, - 91, - 126, - 124, - 143, - 33, - 126, - 230, - 205, - 221, - 187, - 106, - 37, - 168, - 86, - 243, - 121, - 128, - 224, - 199, - 254, - 78, - 128, - 168, - 38, - 35, - 196, - 129, - 147, - 1, - 72, - 70, - 236, - 113, - 128, - 244, - 172, - 245, - 24, - 64, - 154, - 202, - 12, - 210, - 138, - 85, - 4, - 224, - 59, - 50, - 195, - 116, - 222, - 26, - 0, - 96, - 138, - 2, - 64, - 250, - 170, - 50, - 122, - 75, - 25, - 254, - 148, - 111, - 182, - 249, - 0, - 84, - 219, - 181, - 242, - 51, - 61, - 2, - 45, - 181, - 110, - 180, - 150, - 106, - 55, - 35, - 97, - 76, - 36, - 55, - 1, - 205, - 248, - 245, - 86, - 190, - 168, - 167, - 220, - 108, - 118, - 179, - 230, - 107, - 212, - 101, - 132, - 221, - 187, - 206, - 188, - 9, - 144, - 207, - 75, - 15, - 255, - 64, - 112, - 82, - 12, - 40, - 35, - 56, - 167, - 226, - 103, - 0, - 236, - 114, - 82, - 2, - 176, - 30, - 75, - 207, - 2, - 88, - 150, - 60, - 111, - 29, - 77, - 143, - 0, - 48, - 203, - 32, - 128, - 85, - 73, - 197, - 32, - 147, - 12, - 3, - 88, - 79, - 165, - 34, - 182, - 118, - 241, - 22, - 0, - 255, - 192, - 63, - 222, - 62, - 27, - 52, - 137, - 169, - 201, - 5, - 76, - 154, - 162, - 59, - 192, - 136, - 86, - 163, - 221, - 140, - 132, - 49, - 145, - 220, - 4, - 52, - 227, - 215, - 141, - 123, - 51, - 167, - 92, - 54, - 251, - 153, - 55, - 97, - 247, - 174, - 90, - 105, - 247, - 46, - 249, - 127, - 230, - 173, - 51, - 111, - 237, - 126, - 28, - 96, - 232, - 190, - 233, - 105, - 128, - 187, - 222, - 187, - 182, - 13, - 160, - 123, - 112, - 105, - 6, - 32, - 51, - 217, - 220, - 10, - 224, - 61, - 41, - 111, - 112, - 171, - 81, - 30, - 192, - 113, - 100, - 6, - 118, - 37, - 41, - 2, - 216, - 51, - 201, - 22, - 0, - 123, - 62, - 25, - 0, - 176, - 166, - 210, - 2, - 128, - 53, - 150, - 142, - 2, - 88, - 97, - 234, - 1, - 88, - 19, - 105, - 251, - 17, - 72, - 140, - 52, - 209, - 140, - 188, - 149, - 152, - 154, - 252, - 204, - 164, - 43, - 170, - 214, - 91, - 162, - 213, - 104, - 55, - 35, - 97, - 76, - 36, - 215, - 128, - 102, - 252, - 186, - 184, - 183, - 233, - 105, - 24, - 186, - 175, - 90, - 170, - 86, - 33, - 159, - 151, - 95, - 181, - 10, - 67, - 247, - 201, - 189, - 233, - 15, - 167, - 63, - 28, - 26, - 2, - 216, - 120, - 242, - 226, - 126, - 128, - 59, - 119, - 202, - 8, - 185, - 5, - 25, - 49, - 91, - 111, - 228, - 0, - 252, - 19, - 146, - 9, - 122, - 158, - 204, - 192, - 173, - 68, - 69, - 0, - 231, - 1, - 153, - 161, - 51, - 31, - 15, - 0, - 216, - 147, - 73, - 1, - 192, - 126, - 93, - 82, - 108, - 235, - 135, - 194, - 208, - 126, - 37, - 121, - 186, - 221, - 0, - 90, - 43, - 49, - 165, - 8, - 147, - 145, - 183, - 18, - 83, - 53, - 128, - 73, - 83, - 90, - 106, - 221, - 136, - 86, - 221, - 1, - 70, - 194, - 152, - 72, - 46, - 1, - 237, - 226, - 126, - 216, - 120, - 178, - 86, - 186, - 118, - 0, - 238, - 58, - 9, - 193, - 143, - 193, - 223, - 9, - 254, - 1, - 8, - 78, - 194, - 93, - 239, - 193, - 181, - 109, - 176, - 241, - 164, - 244, - 189, - 120, - 224, - 226, - 129, - 141, - 47, - 3, - 52, - 231, - 51, - 3, - 0, - 125, - 247, - 200, - 136, - 185, - 23, - 229, - 13, - 217, - 193, - 198, - 12, - 128, - 239, - 203, - 12, - 188, - 99, - 225, - 247, - 0, - 188, - 231, - 195, - 23, - 0, - 220, - 203, - 209, - 6, - 0, - 39, - 138, - 221, - 155, - 13, - 224, - 108, - 142, - 47, - 0, - 216, - 73, - 98, - 183, - 215, - 3, - 14, - 42, - 97, - 83, - 131, - 49, - 185, - 128, - 81, - 249, - 38, - 49, - 189, - 37, - 63, - 51, - 106, - 221, - 136, - 86, - 163, - 221, - 68, - 194, - 92, - 57, - 14, - 253, - 223, - 173, - 150, - 174, - 159, - 133, - 59, - 119, - 194, - 82, - 1, - 186, - 39, - 197, - 51, - 184, - 189, - 242, - 139, - 106, - 208, - 61, - 8, - 75, - 51, - 210, - 231, - 250, - 89, - 9, - 158, - 153, - 1, - 184, - 242, - 210, - 149, - 151, - 250, - 15, - 1, - 132, - 143, - 120, - 231, - 0, - 130, - 17, - 127, - 28, - 160, - 123, - 118, - 105, - 16, - 32, - 155, - 149, - 25, - 248, - 149, - 160, - 8, - 208, - 49, - 187, - 186, - 5, - 192, - 157, - 143, - 6, - 0, - 92, - 91, - 24, - 184, - 251, - 162, - 83, - 0, - 206, - 166, - 120, - 14, - 192, - 62, - 145, - 28, - 108, - 207, - 6, - 213, - 7, - 180, - 138, - 79, - 166, - 6, - 99, - 74, - 17, - 70, - 9, - 222, - 146, - 159, - 153, - 52, - 197, - 168, - 117, - 17, - 173, - 87, - 207, - 193, - 250, - 71, - 106, - 165, - 133, - 79, - 161, - 239, - 30, - 57, - 16, - 185, - 5, - 104, - 110, - 133, - 204, - 36, - 196, - 1, - 56, - 25, - 137, - 21, - 241, - 51, - 210, - 214, - 220, - 42, - 125, - 234, - 125, - 242, - 204, - 194, - 167, - 82, - 250, - 242, - 206, - 193, - 213, - 119, - 174, - 190, - 179, - 126, - 59, - 64, - 52, - 238, - 238, - 0, - 8, - 223, - 243, - 190, - 14, - 107, - 146, - 55, - 115, - 180, - 121, - 4, - 192, - 239, - 145, - 25, - 118, - 124, - 180, - 250, - 21, - 0, - 239, - 19, - 97, - 224, - 142, - 69, - 37, - 0, - 247, - 21, - 97, - 232, - 76, - 196, - 237, - 62, - 32, - 250, - 182, - 162, - 201, - 5, - 244, - 12, - 183, - 106, - 48, - 38, - 191, - 51, - 25, - 185, - 26, - 194, - 228, - 103, - 146, - 166, - 220, - 216, - 1, - 235, - 198, - 171, - 165, - 218, - 8, - 244, - 142, - 203, - 129, - 200, - 189, - 8, - 141, - 95, - 66, - 246, - 65, - 113, - 145, - 222, - 147, - 144, - 140, - 128, - 61, - 14, - 118, - 25, - 146, - 146, - 180, - 133, - 175, - 65, - 182, - 14, - 141, - 156, - 60, - 83, - 127, - 14, - 130, - 17, - 240, - 199, - 33, - 26, - 7, - 119, - 7, - 220, - 24, - 185, - 49, - 178, - 238, - 109, - 128, - 164, - 215, - 174, - 2, - 68, - 145, - 235, - 194, - 77, - 74, - 112, - 143, - 247, - 6, - 128, - 127, - 37, - 232, - 7, - 232, - 120, - 95, - 24, - 120, - 227, - 34, - 214, - 221, - 175, - 69, - 63, - 7, - 112, - 255, - 45, - 250, - 118, - 155, - 1, - 66, - 61, - 187, - 173, - 114, - 163, - 145, - 182, - 90, - 124, - 50, - 53, - 152, - 86, - 41, - 66, - 51, - 114, - 73, - 76, - 171, - 85, - 200, - 247, - 214, - 74, - 139, - 39, - 160, - 231, - 32, - 44, - 85, - 161, - 59, - 15, - 141, - 25, - 200, - 14, - 74, - 233, - 202, - 63, - 1, - 81, - 21, - 220, - 60, - 164, - 103, - 193, - 122, - 76, - 126, - 233, - 89, - 112, - 171, - 16, - 229, - 165, - 79, - 240, - 172, - 60, - 211, - 152, - 129, - 238, - 89, - 88, - 26, - 132, - 240, - 61, - 240, - 190, - 14, - 73, - 47, - 216, - 85, - 168, - 214, - 170, - 53, - 209, - 11, - 73, - 98, - 219, - 176, - 166, - 4, - 163, - 211, - 238, - 94, - 128, - 168, - 238, - 230, - 0, - 162, - 73, - 119, - 248, - 102, - 3, - 120, - 191, - 11, - 191, - 0, - 224, - 29, - 10, - 143, - 183, - 249, - 128, - 240, - 75, - 138, - 166, - 206, - 106, - 202, - 141, - 90, - 117, - 51, - 197, - 39, - 83, - 131, - 145, - 82, - 196, - 226, - 34, - 244, - 220, - 81, - 45, - 213, - 235, - 144, - 203, - 201, - 129, - 232, - 234, - 18, - 207, - 144, - 205, - 138, - 139, - 244, - 125, - 137, - 21, - 158, - 39, - 65, - 211, - 113, - 36, - 246, - 91, - 150, - 252, - 210, - 84, - 218, - 226, - 88, - 250, - 132, - 161, - 60, - 19, - 4, - 50, - 70, - 163, - 33, - 41, - 87, - 71, - 135, - 228, - 158, - 174, - 43, - 73, - 184, - 109, - 195, - 226, - 231, - 139, - 159, - 247, - 244, - 0, - 36, - 21, - 187, - 8, - 144, - 124, - 102, - 223, - 13, - 16, - 59, - 78, - 12, - 16, - 77, - 185, - 5, - 0, - 255, - 112, - 112, - 12, - 32, - 58, - 238, - 30, - 130, - 219, - 164, - 195, - 225, - 110, - 37, - 108, - 10, - 204, - 166, - 206, - 170, - 233, - 175, - 209, - 246, - 18, - 215, - 235, - 71, - 33, - 87, - 172, - 149, - 150, - 43, - 208, - 85, - 148, - 125, - 209, - 89, - 132, - 102, - 5, - 50, - 69, - 8, - 142, - 130, - 127, - 68, - 98, - 134, - 87, - 148, - 42, - 130, - 91, - 132, - 228, - 251, - 96, - 31, - 132, - 180, - 2, - 86, - 17, - 172, - 163, - 144, - 30, - 1, - 187, - 2, - 73, - 17, - 220, - 10, - 68, - 69, - 240, - 142, - 65, - 248, - 61, - 240, - 43, - 16, - 20, - 33, - 115, - 20, - 154, - 183, - 27, - 175, - 2, - 118, - 17, - 234, - 149, - 122, - 37, - 119, - 4, - 32, - 29, - 20, - 205, - 154, - 244, - 217, - 11, - 0, - 241, - 148, - 83, - 0, - 136, - 203, - 78, - 9, - 192, - 223, - 28, - 92, - 0, - 136, - 247, - 57, - 63, - 104, - 51, - 192, - 170, - 58, - 193, - 86, - 101, - 93, - 227, - 188, - 169, - 179, - 74, - 185, - 113, - 105, - 6, - 186, - 7, - 171, - 165, - 229, - 187, - 161, - 235, - 51, - 88, - 217, - 11, - 157, - 167, - 197, - 51, - 100, - 246, - 136, - 139, - 244, - 123, - 96, - 245, - 33, - 232, - 56, - 15, - 225, - 11, - 224, - 61, - 47, - 234, - 193, - 121, - 0, - 146, - 117, - 96, - 223, - 64, - 244, - 228, - 143, - 128, - 89, - 96, - 80, - 50, - 141, - 100, - 139, - 244, - 137, - 63, - 144, - 103, - 194, - 23, - 160, - 99, - 22, - 86, - 183, - 200, - 152, - 193, - 34, - 132, - 123, - 192, - 123, - 3, - 162, - 211, - 224, - 238, - 133, - 228, - 51, - 176, - 239, - 134, - 116, - 80, - 196, - 250, - 210, - 236, - 210, - 108, - 247, - 22, - 128, - 116, - 192, - 186, - 12, - 144, - 76, - 218, - 195, - 0, - 201, - 207, - 236, - 71, - 1, - 146, - 77, - 246, - 28, - 220, - 166, - 30, - 16, - 104, - 92, - 111, - 125, - 82, - 208, - 202, - 186, - 20, - 152, - 151, - 47, - 67, - 215, - 64, - 173, - 180, - 178, - 0, - 157, - 125, - 114, - 32, - 178, - 14, - 52, - 115, - 144, - 169, - 67, - 208, - 15, - 254, - 149, - 155, - 182, - 234, - 195, - 224, - 254, - 66, - 234, - 73, - 238, - 0, - 196, - 95, - 6, - 231, - 99, - 41, - 177, - 218, - 191, - 18, - 125, - 105, - 13, - 128, - 85, - 129, - 180, - 8, - 246, - 60, - 36, - 3, - 224, - 204, - 67, - 60, - 0, - 238, - 101, - 136, - 54, - 128, - 59, - 15, - 209, - 0, - 116, - 124, - 4, - 171, - 95, - 145, - 119, - 4, - 253, - 16, - 213, - 193, - 205, - 65, - 236, - 128, - 19, - 67, - 210, - 7, - 246, - 2, - 164, - 3, - 96, - 93, - 134, - 229, - 249, - 229, - 249, - 174, - 13, - 0, - 233, - 148, - 85, - 104, - 51, - 128, - 102, - 133, - 201, - 49, - 251, - 112, - 155, - 15, - 8, - 180, - 232, - 105, - 190, - 165, - 200, - 39, - 133, - 149, - 73, - 232, - 44, - 84, - 75, - 141, - 41, - 200, - 22, - 160, - 57, - 9, - 153, - 97, - 57, - 32, - 126, - 97, - 13, - 87, - 39, - 161, - 99, - 24, - 194, - 0, - 60, - 31, - 162, - 75, - 224, - 222, - 43, - 50, - 202, - 249, - 34, - 36, - 231, - 193, - 126, - 80, - 4, - 182, - 53, - 12, - 76, - 1, - 5, - 96, - 18, - 24, - 6, - 107, - 10, - 210, - 130, - 36, - 225, - 73, - 1, - 156, - 8, - 98, - 87, - 202, - 49, - 81, - 2, - 222, - 39, - 18, - 144, - 59, - 222, - 151, - 184, - 20, - 77, - 130, - 59, - 44, - 106, - 197, - 45, - 64, - 60, - 5, - 78, - 1, - 146, - 73, - 176, - 135, - 245, - 61, - 5, - 88, - 153, - 90, - 153, - 234, - 148, - 108, - 112, - 204, - 146, - 116, - 88, - 179, - 193, - 255, - 85, - 15, - 48, - 5, - 13, - 249, - 136, - 212, - 40, - 67, - 118, - 180, - 86, - 106, - 142, - 65, - 102, - 84, - 204, - 146, - 25, - 133, - 224, - 55, - 224, - 223, - 15, - 193, - 49, - 240, - 15, - 75, - 172, - 240, - 198, - 33, - 28, - 3, - 111, - 20, - 162, - 57, - 112, - 55, - 65, - 116, - 10, - 220, - 125, - 162, - 39, - 237, - 215, - 229, - 107, - 131, - 61, - 10, - 233, - 37, - 73, - 180, - 211, - 87, - 37, - 223, - 180, - 158, - 210, - 255, - 99, - 144, - 142, - 106, - 223, - 39, - 214, - 208, - 221, - 167, - 99, - 141, - 65, - 84, - 210, - 119, - 141, - 172, - 161, - 127, - 88, - 230, - 18, - 151, - 193, - 41, - 65, - 242, - 51, - 176, - 31, - 93, - 195, - 116, - 12, - 172, - 81, - 104, - 140, - 53, - 198, - 178, - 37, - 128, - 244, - 130, - 36, - 254, - 233, - 184, - 53, - 2, - 86, - 154, - 102, - 182, - 41, - 241, - 9, - 243, - 113, - 52, - 115, - 65, - 62, - 38, - 102, - 231, - 254, - 111, - 108, - 110, - 254, - 253, - 250, - 253, - 161, - 245, - 111, - 110, - 6, - 249, - 52, - 150, - 217, - 214, - 124, - 183, - 54, - 106, - 153, - 100, - 182, - 249, - 46, - 100, - 182, - 137, - 25, - 110, - 198, - 198, - 4, - 100, - 111, - 211, - 254, - 71, - 113, - 255, - 27, - 240, - 63, - 101, - 216, - 236, - 195, - ], - "type": "Buffer", -} -`; - -exports[`imgData node transparent-black-grayscale-4bit.png 1`] = ` -Object { - "data": Array [ - 40, - 145, - 117, - 209, - 49, - 79, - 194, - 64, - 20, - 192, - 113, - 62, - 130, - 71, - 89, - 76, - 92, - 174, - 36, - 46, - 38, - 38, - 133, - 170, - 147, - 75, - 91, - 25, - 29, - 44, - 229, - 66, - 28, - 152, - 238, - 157, - 38, - 174, - 244, - 96, - 114, - 162, - 28, - 19, - 147, - 194, - 37, - 250, - 25, - 28, - 29, - 221, - 36, - 46, - 178, - 50, - 152, - 176, - 154, - 56, - 176, - 106, - 209, - 234, - 93, - 109, - 20, - 72, - 120, - 219, - 253, - 166, - 119, - 239, - 159, - 251, - 94, - 153, - 220, - 58, - 120, - 153, - 45, - 65, - 114, - 79, - 43, - 183, - 11, - 240, - 22, - 209, - 146, - 89, - 172, - 143, - 51, - 72, - 158, - 194, - 106, - 185, - 100, - 99, - 115, - 255, - 38, - 133, - 207, - 65, - 232, - 150, - 109, - 215, - 118, - 139, - 123, - 172, - 253, - 172, - 96, - 196, - 155, - 101, - 187, - 86, - 245, - 60, - 119, - 155, - 243, - 115, - 5, - 19, - 17, - 122, - 140, - 115, - 26, - 28, - 49, - 222, - 60, - 85, - 240, - 42, - 4, - 207, - 38, - 12, - 142, - 21, - 188, - 67, - 107, - 216, - 205, - 222, - 94, - 67, - 3, - 19, - 82, - 166, - 226, - 35, - 187, - 175, - 224, - 67, - 131, - 22, - 138, - 145, - 113, - 167, - 1, - 68, - 111, - 208, - 150, - 93, - 234, - 227, - 141, - 252, - 84, - 65, - 12, - 173, - 94, - 4, - 114, - 16, - 56, - 8, - 23, - 244, - 98, - 115, - 56, - 19, - 188, - 166, - 192, - 52, - 156, - 131, - 116, - 83, - 32, - 93, - 78, - 228, - 181, - 143, - 109, - 188, - 169, - 225, - 11, - 42, - 29, - 13, - 39, - 216, - 66, - 91, - 26, - 18, - 8, - 34, - 166, - 192, - 201, - 99, - 180, - 155, - 254, - 22, - 2, - 78, - 136, - 188, - 42, - 25, - 24, - 53, - 126, - 129, - 50, - 13, - 86, - 193, - 66, - 253, - 20, - 34, - 202, - 106, - 68, - 118, - 176, - 130, - 113, - 10, - 49, - 0, - 104, - 48, - 208, - 78, - 118, - 194, - 71, - 5, - 189, - 14, - 70, - 249, - 113, - 6, - 73, - 4, - 68, - 52, - 45, - 116, - 248, - 119, - 228, - 88, - 131, - 83, - 152, - 253, - 103, - 24, - 17, - 65, - 253, - 203, - 197, - 46, - 67, - 65, - 235, - 75, - 229, - 230, - 130, - 62, - 44, - 167, - 156, - 92, - 172, - 180, - 77, - 166, - 235, - 234, - 255, - 0, - 227, - 146, - 86, - 207, - ], - "type": "Buffer", -} -`; - -exports[`imgData node transparent-white-grayscale-16bit.png 1`] = ` -Object { - "data": Array [ - 72, - 137, - 99, - 248, - 79, - 33, - 96, - 160, - 169, - 1, - 143, - 31, - 159, - 60, - 249, - 241, - 35, - 89, - 6, - 188, - 120, - 177, - 117, - 107, - 93, - 93, - 106, - 106, - 212, - 78, - 55, - 253, - 132, - 31, - 11, - 5, - 31, - 9, - 16, - 109, - 192, - 187, - 119, - 251, - 247, - 119, - 118, - 166, - 167, - 39, - 78, - 240, - 217, - 101, - 38, - 162, - 21, - 160, - 254, - 82, - 121, - 171, - 250, - 28, - 189, - 87, - 1, - 158, - 19, - 189, - 175, - 108, - 255, - 243, - 7, - 143, - 1, - 159, - 62, - 29, - 57, - 50, - 117, - 106, - 81, - 81, - 206, - 188, - 224, - 73, - 182, - 11, - 116, - 179, - 244, - 183, - 107, - 55, - 171, - 101, - 106, - 45, - 183, - 57, - 174, - 116, - 72, - 130, - 81, - 106, - 171, - 250, - 75, - 3, - 142, - 156, - 180, - 5, - 11, - 206, - 159, - 255, - 241, - 3, - 205, - 128, - 239, - 223, - 79, - 157, - 154, - 53, - 171, - 172, - 172, - 184, - 56, - 109, - 149, - 199, - 99, - 67, - 78, - 253, - 44, - 163, - 109, - 38, - 23, - 108, - 2, - 236, - 100, - 205, - 91, - 12, - 3, - 173, - 103, - 187, - 86, - 24, - 87, - 171, - 109, - 211, - 101, - 214, - 122, - 25, - 213, - 158, - 151, - 87, - 92, - 92, - 86, - 54, - 123, - 246, - 145, - 35, - 239, - 222, - 193, - 13, - 56, - 115, - 166, - 190, - 190, - 172, - 172, - 20, - 8, - 252, - 196, - 205, - 205, - 205, - 152, - 205, - 230, - 218, - 196, - 132, - 218, - 164, - 200, - 5, - 168, - 57, - 206, - 119, - 190, - 232, - 190, - 221, - 53, - 208, - 49, - 203, - 78, - 206, - 252, - 130, - 154, - 89, - 206, - 188, - 82, - 40, - 200, - 202, - 154, - 53, - 11, - 110, - 192, - 157, - 59, - 173, - 173, - 29, - 29, - 45, - 45, - 213, - 213, - 201, - 28, - 46, - 158, - 238, - 242, - 137, - 175, - 202, - 162, - 203, - 193, - 160, - 136, - 53, - 225, - 112, - 216, - 222, - 32, - 17, - 191, - 88, - 111, - 81, - 223, - 85, - 73, - 55, - 33, - 162, - 5, - 5, - 49, - 49, - 65, - 65, - 123, - 247, - 194, - 13, - 120, - 245, - 170, - 165, - 165, - 177, - 177, - 221, - 179, - 175, - 175, - 179, - 179, - 190, - 190, - 18, - 47, - 40, - 43, - 75, - 78, - 14, - 9, - 9, - 8, - 240, - 241, - 121, - 246, - 12, - 110, - 192, - 143, - 31, - 77, - 133, - 25, - 238, - 73, - 87, - 42, - 108, - 38, - 220, - 152, - 60, - 185, - 191, - 191, - 185, - 185, - 26, - 3, - 84, - 1, - 65, - 101, - 101, - 86, - 86, - 120, - 56, - 72, - 179, - 167, - 103, - 100, - 36, - 74, - 44, - 116, - 117, - 101, - 94, - 41, - 153, - 213, - 215, - 60, - 65, - 118, - 210, - 164, - 169, - 83, - 167, - 79, - 159, - 50, - 165, - 189, - 189, - 6, - 13, - 20, - 22, - 70, - 115, - 27, - 221, - 20, - 41, - 145, - 40, - 211, - 93, - 227, - 182, - 167, - 169, - 9, - 197, - 128, - 73, - 147, - 50, - 215, - 229, - 251, - 246, - 111, - 236, - 207, - 157, - 56, - 113, - 202, - 148, - 233, - 211, - 103, - 206, - 156, - 61, - 123, - 230, - 204, - 238, - 238, - 250, - 250, - 58, - 32, - 168, - 173, - 45, - 47, - 79, - 74, - 10, - 185, - 164, - 122, - 93, - 188, - 88, - 224, - 4, - 143, - 16, - 247, - 117, - 125, - 233, - 53, - 107, - 80, - 12, - 152, - 50, - 37, - 253, - 99, - 22, - 67, - 171, - 120, - 255, - 198, - 9, - 241, - 147, - 39, - 79, - 46, - 172, - 146, - 172, - 79, - 157, - 254, - 107, - 222, - 188, - 57, - 115, - 250, - 250, - 234, - 234, - 178, - 178, - 162, - 162, - 194, - 215, - 235, - 60, - 147, - 158, - 46, - 148, - 194, - 115, - 129, - 253, - 57, - 183, - 186, - 10, - 243, - 181, - 107, - 40, - 6, - 44, - 89, - 146, - 110, - 154, - 34, - 91, - 122, - 28, - 232, - 134, - 194, - 73, - 147, - 90, - 24, - 242, - 182, - 37, - 183, - 229, - 25, - 205, - 157, - 59, - 127, - 254, - 130, - 5, - 85, - 85, - 81, - 81, - 145, - 145, - 118, - 130, - 178, - 1, - 98, - 135, - 120, - 21, - 165, - 98, - 121, - 69, - 69, - 10, - 108, - 255, - 254, - 254, - 141, - 98, - 192, - 182, - 109, - 105, - 252, - 241, - 233, - 169, - 15, - 187, - 82, - 250, - 42, - 39, - 204, - 170, - 83, - 47, - 139, - 139, - 146, - 202, - 251, - 51, - 103, - 206, - 188, - 121, - 243, - 231, - 151, - 148, - 68, - 70, - 6, - 125, - 85, - 152, - 45, - 61, - 157, - 191, - 203, - 242, - 138, - 135, - 135, - 148, - 140, - 254, - 255, - 162, - 34, - 180, - 164, - 124, - 252, - 120, - 74, - 93, - 134, - 77, - 48, - 103, - 245, - 234, - 126, - 169, - 170, - 75, - 165, - 29, - 165, - 134, - 145, - 205, - 5, - 149, - 179, - 103, - 207, - 157, - 59, - 111, - 94, - 94, - 94, - 100, - 164, - 149, - 140, - 108, - 128, - 176, - 168, - 182, - 188, - 203, - 18, - 37, - 46, - 33, - 119, - 65, - 179, - 185, - 250, - 104, - 6, - 220, - 184, - 145, - 28, - 145, - 97, - 227, - 145, - 159, - 19, - 221, - 251, - 38, - 58, - 189, - 36, - 170, - 100, - 86, - 196, - 155, - 252, - 71, - 179, - 102, - 129, - 140, - 72, - 79, - 15, - 159, - 164, - 28, - 3, - 180, - 255, - 182, - 249, - 122, - 177, - 99, - 66, - 154, - 124, - 142, - 98, - 246, - 199, - 143, - 163, - 25, - 240, - 234, - 85, - 226, - 241, - 212, - 135, - 126, - 193, - 177, - 246, - 141, - 125, - 73, - 17, - 25, - 156, - 69, - 215, - 34, - 66, - 11, - 20, - 102, - 204, - 152, - 53, - 107, - 206, - 156, - 196, - 68, - 79, - 87, - 217, - 0, - 81, - 23, - 197, - 115, - 210, - 159, - 249, - 148, - 121, - 124, - 121, - 124, - 149, - 142, - 127, - 249, - 130, - 102, - 192, - 159, - 63, - 9, - 103, - 147, - 219, - 194, - 247, - 71, - 28, - 44, - 92, - 81, - 194, - 28, - 246, - 187, - 112, - 69, - 200, - 217, - 146, - 22, - 80, - 116, - 206, - 154, - 21, - 21, - 101, - 41, - 34, - 227, - 206, - 159, - 97, - 28, - 36, - 189, - 143, - 87, - 131, - 215, - 66, - 240, - 82, - 96, - 48, - 150, - 236, - 156, - 247, - 40, - 97, - 74, - 194, - 148, - 80, - 211, - 204, - 138, - 154, - 27, - 129, - 183, - 11, - 170, - 130, - 231, - 23, - 55, - 131, - 146, - 212, - 180, - 105, - 225, - 225, - 218, - 175, - 37, - 91, - 185, - 191, - 58, - 44, - 208, - 214, - 22, - 55, - 18, - 153, - 204, - 227, - 219, - 254, - 28, - 139, - 1, - 61, - 61, - 241, - 242, - 233, - 75, - 3, - 151, - 101, - 60, - 42, - 251, - 26, - 241, - 38, - 111, - 91, - 80, - 81, - 225, - 235, - 201, - 147, - 167, - 78, - 237, - 239, - 15, - 11, - 83, - 138, - 23, - 117, - 225, - 75, - 113, - 119, - 55, - 117, - 23, - 154, - 47, - 196, - 35, - 36, - 119, - 244, - 40, - 22, - 3, - 126, - 253, - 90, - 156, - 145, - 252, - 60, - 89, - 53, - 189, - 41, - 179, - 39, - 173, - 34, - 231, - 83, - 224, - 237, - 210, - 234, - 137, - 19, - 39, - 79, - 238, - 236, - 12, - 13, - 149, - 49, - 22, - 226, - 17, - 156, - 101, - 113, - 86, - 52, - 94, - 36, - 82, - 254, - 251, - 182, - 180, - 255, - 255, - 177, - 24, - 0, - 2, - 23, - 46, - 228, - 230, - 166, - 166, - 166, - 61, - 206, - 184, - 156, - 173, - 23, - 176, - 174, - 84, - 169, - 191, - 127, - 226, - 196, - 198, - 198, - 208, - 80, - 69, - 117, - 126, - 93, - 158, - 6, - 1, - 1, - 129, - 213, - 170, - 157, - 231, - 57, - 255, - 255, - 199, - 105, - 192, - 255, - 255, - 111, - 222, - 180, - 181, - 165, - 85, - 165, - 243, - 101, - 102, - 6, - 136, - 23, - 43, - 244, - 246, - 246, - 247, - 87, - 85, - 133, - 132, - 232, - 55, - 242, - 137, - 112, - 215, - 115, - 39, - 26, - 158, - 120, - 48, - 225, - 255, - 127, - 188, - 6, - 128, - 226, - 99, - 213, - 170, - 116, - 211, - 244, - 165, - 126, - 47, - 139, - 103, - 119, - 119, - 247, - 246, - 150, - 148, - 4, - 7, - 219, - 218, - 74, - 43, - 11, - 59, - 249, - 88, - 188, - 211, - 64, - 87, - 141, - 163, - 88, - 191, - 114, - 184, - 168, - 53, - 226, - 96, - 253, - 141, - 142, - 142, - 238, - 238, - 220, - 220, - 160, - 32, - 127, - 127, - 115, - 243, - 242, - 242, - 95, - 191, - 176, - 169, - 197, - 81, - 47, - 188, - 127, - 191, - 96, - 65, - 115, - 115, - 91, - 91, - 71, - 71, - 122, - 122, - 96, - 96, - 64, - 192, - 130, - 5, - 127, - 255, - 98, - 87, - 137, - 179, - 102, - 250, - 247, - 239, - 192, - 129, - 214, - 214, - 182, - 182, - 196, - 196, - 160, - 160, - 237, - 219, - 113, - 169, - 34, - 80, - 181, - 221, - 187, - 55, - 97, - 66, - 106, - 234, - 153, - 51, - 248, - 212, - 16, - 168, - 92, - 191, - 126, - 125, - 252, - 24, - 191, - 10, - 138, - 107, - 103, - 0, - 224, - 204, - 150, - 213, - ], - "type": "Buffer", -} -`; - -exports[`imgData node transparent-white-palette-8bit.png 1`] = ` -Object { - "data": Array [ - 56, - 141, - 99, - 96, - 160, - 50, - 120, - 240, - 42, - 13, - 143, - 236, - 61, - 166, - 197, - 102, - 79, - 44, - 153, - 191, - 124, - 192, - 42, - 155, - 249, - 94, - 202, - 180, - 173, - 129, - 77, - 111, - 131, - 248, - 134, - 213, - 85, - 95, - 34, - 3, - 80, - 101, - 211, - 106, - 248, - 86, - 158, - 105, - 176, - 172, - 156, - 92, - 41, - 190, - 192, - 170, - 189, - 189, - 125, - 195, - 163, - 117, - 93, - 207, - 99, - 96, - 178, - 49, - 175, - 250, - 150, - 235, - 180, - 89, - 62, - 154, - 172, - 208, - 95, - 91, - 43, - 169, - 192, - 102, - 185, - 64, - 124, - 181, - 222, - 147, - 53, - 58, - 203, - 57, - 107, - 50, - 193, - 10, - 42, - 148, - 151, - 107, - 107, - 223, - 146, - 236, - 191, - 234, - 123, - 235, - 38, - 171, - 162, - 226, - 196, - 137, - 138, - 181, - 146, - 226, - 103, - 180, - 129, - 96, - 125, - 31, - 88, - 193, - 11, - 249, - 217, - 243, - 213, - 25, - 125, - 89, - 111, - 202, - 104, - 105, - 105, - 213, - 51, - 215, - 157, - 61, - 91, - 87, - 197, - 8, - 100, - 174, - 218, - 126, - 232, - 61, - 88, - 65, - 206, - 124, - 165, - 185, - 51, - 164, - 148, - 53, - 80, - 193, - 242, - 45, - 174, - 135, - 79, - 220, - 131, - 184, - 97, - 145, - 231, - 53, - 91, - 17, - 126, - 225, - 249, - 234, - 48, - 176, - 116, - 169, - 198, - 122, - 151, - 195, - 39, - 206, - 57, - 67, - 93, - 57, - 43, - 233, - 148, - 227, - 178, - 105, - 124, - 188, - 83, - 100, - 151, - 64, - 193, - 202, - 237, - 70, - 65, - 81, - 2, - 45, - 11, - 161, - 10, - 166, - 69, - 71, - 108, - 181, - 16, - 156, - 194, - 203, - 205, - 201, - 45, - 161, - 188, - 120, - 177, - 170, - 214, - 150, - 75, - 62, - 106, - 51, - 195, - 195, - 5, - 58, - 160, - 10, - 166, - 36, - 38, - 237, - 220, - 58, - 135, - 95, - 100, - 163, - 46, - 79, - 119, - 207, - 140, - 197, - 235, - 119, - 188, - 149, - 222, - 219, - 180, - 171, - 196, - 128, - 163, - 28, - 170, - 160, - 227, - 104, - 234, - 241, - 173, - 203, - 166, - 233, - 158, - 79, - 223, - 199, - 206, - 210, - 181, - 116, - 135, - 179, - 232, - 103, - 181, - 93, - 197, - 83, - 155, - 53, - 97, - 193, - 201, - 180, - 239, - 198, - 149, - 157, - 78, - 34, - 27, - 143, - 223, - 222, - 214, - 211, - 205, - 178, - 194, - 249, - 217, - 197, - 189, - 141, - 222, - 231, - 94, - 11, - 172, - 132, - 5, - 101, - 181, - 123, - 114, - 222, - 17, - 199, - 77, - 182, - 126, - 183, - 237, - 57, - 217, - 187, - 215, - 0, - 13, - 112, - 120, - 211, - 26, - 213, - 52, - 51, - 30, - 166, - 32, - 114, - 119, - 242, - 195, - 88, - 167, - 20, - 219, - 83, - 217, - 246, - 125, - 156, - 236, - 166, - 111, - 203, - 246, - 54, - 30, - 8, - 82, - 121, - 249, - 169, - 26, - 166, - 32, - 103, - 247, - 149, - 194, - 196, - 131, - 25, - 158, - 129, - 119, - 236, - 39, - 244, - 245, - 216, - 188, - 251, - 220, - 203, - 241, - 250, - 101, - 110, - 46, - 71, - 2, - 76, - 65, - 192, - 254, - 244, - 59, - 33, - 193, - 254, - 119, - 131, - 239, - 110, - 226, - 229, - 238, - 219, - 33, - 122, - 145, - 235, - 99, - 177, - 254, - 99, - 161, - 103, - 136, - 216, - 94, - 123, - 237, - 218, - 254, - 196, - 131, - 249, - 97, - 121, - 155, - 248, - 120, - 39, - 185, - 148, - 238, - 13, - 111, - 45, - 58, - 38, - 151, - 107, - 130, - 80, - 32, - 118, - 227, - 242, - 5, - 187, - 227, - 217, - 231, - 239, - 91, - 243, - 243, - 9, - 239, - 241, - 233, - 213, - 111, - 57, - 224, - 112, - 186, - 185, - 26, - 161, - 32, - 148, - 199, - 125, - 179, - 89, - 244, - 149, - 216, - 124, - 99, - 65, - 126, - 41, - 215, - 210, - 211, - 159, - 14, - 4, - 201, - 113, - 48, - 161, - 36, - 169, - 231, - 107, - 204, - 246, - 37, - 197, - 21, - 24, - 10, - 11, - 42, - 185, - 70, - 113, - 233, - 115, - 205, - 60, - 246, - 28, - 45, - 73, - 102, - 205, - 51, - 191, - 156, - 84, - 96, - 44, - 38, - 188, - 212, - 245, - 99, - 227, - 83, - 3, - 163, - 23, - 12, - 232, - 32, - 160, - 227, - 232, - 229, - 66, - 67, - 9, - 177, - 21, - 110, - 222, - 197, - 37, - 239, - 58, - 49, - 228, - 129, - 160, - 124, - 91, - 200, - 162, - 217, - 18, - 107, - 14, - 121, - 21, - 105, - 133, - 98, - 147, - 103, - 96, - 184, - 222, - 53, - 127, - 222, - 108, - 83, - 143, - 195, - 93, - 39, - 177, - 203, - 3, - 193, - 123, - 249, - 121, - 54, - 135, - 152, - 112, - 74, - 3, - 193, - 139, - 233, - 102, - 21, - 248, - 228, - 25, - 24, - 18, - 30, - 224, - 151, - 199, - 4, - 0, - 13, - 174, - 255, - 145, - ], - "type": "Buffer", -} -`; - -exports[`imgData node transparent-white-rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 88, - 133, - 213, - 216, - 11, - 76, - 27, - 101, - 28, - 0, - 240, - 239, - 148, - 71, - 48, - 248, - 136, - 110, - 76, - 141, - 26, - 22, - 36, - 81, - 17, - 209, - 216, - 196, - 98, - 83, - 152, - 98, - 192, - 22, - 150, - 161, - 181, - 163, - 101, - 35, - 161, - 118, - 60, - 92, - 29, - 34, - 32, - 76, - 160, - 84, - 148, - 194, - 186, - 210, - 82, - 90, - 10, - 29, - 29, - 101, - 16, - 24, - 14, - 55, - 183, - 57, - 7, - 162, - 78, - 52, - 58, - 113, - 100, - 58, - 102, - 12, - 49, - 102, - 204, - 68, - 227, - 115, - 15, - 182, - 185, - 169, - 241, - 253, - 127, - 160, - 54, - 89, - 80, - 186, - 65, - 140, - 191, - 132, - 203, - 229, - 142, - 222, - 247, - 255, - 127, - 239, - 59, - 241, - 251, - 255, - 156, - 248, - 175, - 3, - 184, - 88, - 11, - 146, - 192, - 231, - 228, - 0, - 57, - 77, - 22, - 162, - 20, - 54, - 15, - 9, - 124, - 77, - 246, - 146, - 58, - 82, - 64, - 74, - 74, - 30, - 6, - 117, - 117, - 119, - 128, - 173, - 91, - 211, - 192, - 216, - 152, - 11, - 28, - 59, - 54, - 5, - 46, - 190, - 92, - 22, - 114, - 2, - 39, - 201, - 40, - 177, - 145, - 34, - 98, - 50, - 229, - 129, - 234, - 234, - 100, - 176, - 113, - 227, - 213, - 192, - 225, - 16, - 146, - 16, - 86, - 171, - 0, - 85, - 85, - 120, - 108, - 104, - 192, - 99, - 103, - 167, - 4, - 122, - 123, - 19, - 193, - 232, - 168, - 25, - 76, - 77, - 77, - 128, - 95, - 200, - 60, - 39, - 112, - 134, - 188, - 67, - 188, - 164, - 140, - 60, - 241, - 132, - 9, - 84, - 85, - 61, - 0, - 154, - 154, - 110, - 2, - 94, - 47, - 134, - 213, - 221, - 141, - 65, - 183, - 182, - 98, - 160, - 207, - 60, - 131, - 231, - 101, - 101, - 209, - 192, - 96, - 192, - 112, - 53, - 154, - 43, - 64, - 118, - 54, - 222, - 213, - 235, - 255, - 78, - 207, - 237, - 142, - 0, - 213, - 213, - 133, - 96, - 11, - 57, - 68, - 126, - 36, - 33, - 36, - 240, - 3, - 25, - 39, - 157, - 164, - 146, - 148, - 147, - 218, - 90, - 172, - 227, - 166, - 38, - 236, - 18, - 30, - 79, - 36, - 8, - 4, - 48, - 136, - 109, - 219, - 48, - 136, - 93, - 187, - 240, - 120, - 224, - 0, - 30, - 15, - 29, - 194, - 227, - 200, - 8, - 222, - 237, - 237, - 197, - 196, - 154, - 155, - 175, - 3, - 86, - 235, - 109, - 192, - 98, - 185, - 6, - 212, - 215, - 227, - 221, - 246, - 118, - 252, - 207, - 150, - 22, - 60, - 154, - 76, - 26, - 80, - 66, - 184, - 68, - 46, - 221, - 79, - 184, - 18, - 185, - 253, - 103, - 77, - 224, - 32, - 177, - 16, - 254, - 241, - 83, - 65, - 218, - 219, - 147, - 192, - 43, - 175, - 96, - 193, - 47, - 191, - 140, - 69, - 14, - 13, - 225, - 249, - 142, - 29, - 88, - 199, - 109, - 109, - 247, - 2, - 183, - 59, - 27, - 140, - 140, - 196, - 129, - 201, - 201, - 75, - 192, - 103, - 159, - 225, - 255, - 76, - 79, - 227, - 255, - 127, - 245, - 21, - 30, - 63, - 249, - 100, - 38, - 73, - 184, - 254, - 234, - 171, - 120, - 110, - 54, - 99, - 146, - 220, - 170, - 79, - 205, - 98, - 45, - 225, - 106, - 157, - 53, - 129, - 35, - 196, - 74, - 54, - 144, - 6, - 82, - 67, - 172, - 214, - 71, - 192, - 240, - 48, - 214, - 223, - 182, - 109, - 55, - 2, - 135, - 99, - 5, - 88, - 191, - 30, - 11, - 168, - 58, - 79, - 125, - 61, - 6, - 52, - 56, - 120, - 31, - 152, - 156, - 140, - 5, - 199, - 143, - 95, - 5, - 190, - 249, - 6, - 19, - 158, - 152, - 192, - 113, - 210, - 223, - 127, - 11, - 168, - 169, - 209, - 129, - 243, - 159, - 80, - 74, - 86, - 147, - 135, - 201, - 62, - 50, - 107, - 2, - 223, - 18, - 14, - 186, - 158, - 96, - 34, - 86, - 171, - 147, - 240, - 144, - 229, - 246, - 121, - 122, - 193, - 112, - 203, - 27, - 201, - 35, - 36, - 155, - 100, - 145, - 47, - 201, - 172, - 9, - 240, - 160, - 177, - 88, - 26, - 26, - 44, - 150, - 248, - 248, - 142, - 142, - 248, - 248, - 176, - 176, - 254, - 254, - 176, - 176, - 228, - 228, - 190, - 190, - 228, - 100, - 187, - 189, - 173, - 205, - 110, - 247, - 144, - 22, - 242, - 28, - 169, - 185, - 32, - 213, - 65, - 56, - 116, - 238, - 36, - 57, - 36, - 56, - 104, - 21, - 209, - 147, - 127, - 25, - 196, - 108, - 35, - 145, - 164, - 61, - 123, - 36, - 232, - 165, - 239, - 190, - 139, - 125, - 245, - 204, - 25, - 156, - 55, - 134, - 134, - 244, - 122, - 55, - 225, - 25, - 169, - 131, - 180, - 145, - 38, - 82, - 27, - 162, - 39, - 73, - 46, - 200, - 207, - 199, - 206, - 100, - 181, - 134, - 1, - 143, - 7, - 59, - 217, - 250, - 245, - 120, - 69, - 167, - 75, - 7, - 106, - 245, - 179, - 100, - 78, - 9, - 112, - 136, - 209, - 209, - 47, - 188, - 16, - 29, - 45, - 196, - 190, - 125, - 152, - 192, - 217, - 179, - 66, - 196, - 198, - 78, - 77, - 197, - 198, - 182, - 18, - 14, - 154, - 19, - 216, - 68, - 120, - 174, - 224, - 115, - 59, - 225, - 206, - 86, - 23, - 196, - 76, - 184, - 127, - 63, - 74, - 112, - 222, - 201, - 207, - 199, - 209, - 240, - 198, - 27, - 88, - 206, - 193, - 131, - 60, - 173, - 194, - 65, - 122, - 236, - 49, - 60, - 47, - 42, - 194, - 153, - 75, - 171, - 221, - 78, - 230, - 148, - 0, - 7, - 23, - 19, - 211, - 211, - 19, - 19, - 67, - 243, - 13, - 60, - 24, - 230, - 18, - 193, - 105, - 84, - 86, - 246, - 246, - 86, - 86, - 114, - 71, - 114, - 56, - 58, - 58, - 28, - 142, - 244, - 244, - 64, - 0, - 107, - 105, - 96, - 32, - 61, - 221, - 233, - 12, - 4, - 240, - 15, - 109, - 38, - 60, - 126, - 56, - 1, - 238, - 36, - 185, - 4, - 59, - 74, - 110, - 238, - 181, - 224, - 253, - 247, - 177, - 132, - 83, - 167, - 176, - 132, - 45, - 91, - 112, - 230, - 202, - 207, - 199, - 89, - 73, - 169, - 196, - 235, - 6, - 3, - 78, - 23, - 122, - 253, - 36, - 153, - 83, - 2, - 125, - 100, - 233, - 82, - 159, - 111, - 233, - 82, - 33, - 6, - 7, - 241, - 49, - 239, - 189, - 247, - 103, - 2, - 10, - 197, - 248, - 184, - 66, - 193, - 173, - 164, - 86, - 111, - 223, - 174, - 86, - 11, - 233, - 245, - 215, - 241, - 46, - 174, - 7, - 73, - 73, - 157, - 157, - 73, - 73, - 93, - 164, - 155, - 240, - 194, - 196, - 125, - 157, - 67, - 231, - 222, - 124, - 23, - 232, - 233, - 193, - 103, - 67, - 16, - 2, - 187, - 234, - 165, - 96, - 213, - 42, - 92, - 47, - 110, - 190, - 25, - 187, - 208, - 226, - 197, - 120, - 212, - 106, - 21, - 64, - 163, - 249, - 153, - 204, - 41, - 129, - 33, - 146, - 144, - 208, - 210, - 146, - 144, - 128, - 11, - 17, - 207, - 245, - 88, - 200, - 177, - 99, - 66, - 68, - 70, - 158, - 56, - 17, - 25, - 105, - 179, - 121, - 189, - 54, - 91, - 90, - 218, - 192, - 64, - 90, - 154, - 144, - 120, - 249, - 218, - 180, - 73, - 8, - 185, - 220, - 235, - 149, - 203, - 185, - 238, - 185, - 29, - 56, - 141, - 10, - 194, - 161, - 227, - 240, - 44, - 42, - 10, - 7, - 231, - 206, - 113, - 221, - 99, - 232, - 165, - 165, - 114, - 144, - 158, - 254, - 32, - 137, - 1, - 201, - 201, - 9, - 64, - 171, - 229, - 181, - 255, - 252, - 56, - 103, - 77, - 96, - 140, - 200, - 100, - 141, - 141, - 50, - 153, - 16, - 187, - 119, - 99, - 33, - 176, - 175, - 1, - 31, - 126, - 136, - 199, - 239, - 190, - 19, - 34, - 43, - 203, - 239, - 207, - 202, - 82, - 40, - 2, - 1, - 133, - 66, - 72, - 99, - 99, - 120, - 221, - 231, - 19, - 66, - 169, - 108, - 107, - 83, - 42, - 121, - 60, - 112, - 59, - 112, - 26, - 188, - 190, - 114, - 2, - 24, - 22, - 85, - 136, - 196, - 117, - 191, - 117, - 107, - 60, - 208, - 235, - 113, - 187, - 183, - 98, - 5, - 134, - 94, - 87, - 135, - 119, - 187, - 187, - 177, - 35, - 57, - 157, - 88, - 25, - 61, - 61, - 33, - 36, - 240, - 49, - 73, - 73, - 49, - 155, - 83, - 82, - 254, - 76, - 160, - 166, - 6, - 139, - 130, - 85, - 24, - 156, - 62, - 45, - 196, - 146, - 37, - 118, - 251, - 146, - 37, - 10, - 197, - 230, - 205, - 152, - 0, - 204, - 84, - 160, - 163, - 3, - 19, - 240, - 120, - 148, - 74, - 94, - 47, - 131, - 211, - 224, - 13, - 31, - 246, - 123, - 189, - 62, - 10, - 156, - 60, - 137, - 33, - 158, - 58, - 133, - 115, - 142, - 201, - 116, - 55, - 200, - 205, - 197, - 205, - 137, - 203, - 133, - 79, - 130, - 45, - 10, - 220, - 173, - 173, - 189, - 28, - 228, - 229, - 113, - 133, - 134, - 144, - 0, - 47, - 103, - 25, - 25, - 21, - 21, - 25, - 25, - 212, - 121, - 102, - 54, - 93, - 81, - 81, - 62, - 95, - 84, - 148, - 16, - 71, - 142, - 96, - 33, - 3, - 3, - 66, - 196, - 197, - 249, - 124, - 113, - 113, - 66, - 122, - 251, - 109, - 188, - 130, - 251, - 154, - 212, - 84, - 183, - 59, - 53, - 213, - 71, - 56, - 13, - 238, - 78, - 6, - 114, - 63, - 176, - 88, - 254, - 234, - 247, - 210, - 200, - 200, - 245, - 32, - 47, - 15, - 107, - 93, - 165, - 194, - 103, - 112, - 69, - 153, - 76, - 120, - 215, - 100, - 186, - 1, - 172, - 92, - 121, - 150, - 132, - 144, - 0, - 111, - 107, - 179, - 179, - 31, - 127, - 28, - 247, - 141, - 48, - 52, - 161, - 64, - 175, - 87, - 136, - 196, - 196, - 170, - 170, - 196, - 68, - 33, - 222, - 122, - 11, - 11, - 217, - 191, - 31, - 202, - 144, - 60, - 30, - 88, - 43, - 36, - 190, - 130, - 181, - 151, - 153, - 217, - 218, - 154, - 153, - 25, - 60, - 189, - 114, - 26, - 60, - 124, - 177, - 243, - 244, - 245, - 225, - 243, - 190, - 255, - 30, - 67, - 108, - 108, - 196, - 221, - 149, - 70, - 131, - 3, - 247, - 206, - 59, - 113, - 254, - 49, - 26, - 241, - 73, - 229, - 229, - 120, - 215, - 239, - 95, - 14, - 74, - 75, - 103, - 11, - 125, - 214, - 4, - 88, - 113, - 113, - 121, - 121, - 113, - 177, - 16, - 92, - 32, - 28, - 69, - 74, - 74, - 65, - 65, - 74, - 202, - 162, - 69, - 253, - 253, - 139, - 22, - 9, - 241, - 209, - 71, - 88, - 148, - 221, - 142, - 119, - 71, - 71, - 241, - 220, - 233, - 20, - 66, - 173, - 118, - 185, - 212, - 234, - 224, - 101, - 174, - 157, - 240, - 250, - 138, - 245, - 189, - 119, - 47, - 254, - 226, - 232, - 81, - 12, - 177, - 184, - 56, - 21, - 100, - 102, - 38, - 16, - 156, - 115, - 214, - 173, - 195, - 39, - 237, - 217, - 195, - 45, - 208, - 8, - 220, - 238, - 11, - 76, - 160, - 153, - 132, - 135, - 7, - 2, - 225, - 225, - 66, - 194, - 205, - 178, - 76, - 86, - 88, - 40, - 147, - 45, - 91, - 102, - 181, - 46, - 91, - 38, - 196, - 248, - 248, - 76, - 191, - 135, - 112, - 120, - 26, - 109, - 110, - 22, - 66, - 165, - 114, - 58, - 85, - 42, - 94, - 37, - 56, - 13, - 222, - 116, - 172, - 36, - 87, - 130, - 225, - 97, - 252, - 197, - 200, - 8, - 206, - 60, - 133, - 133, - 25, - 4, - 219, - 97, - 205, - 26, - 222, - 124, - 227, - 147, - 186, - 186, - 112, - 156, - 232, - 116, - 251, - 201, - 5, - 38, - 240, - 19, - 113, - 185, - 118, - 237, - 114, - 185, - 100, - 50, - 171, - 85, - 38, - 51, - 24, - 214, - 172, - 49, - 24, - 140, - 198, - 181, - 107, - 141, - 198, - 136, - 136, - 157, - 59, - 35, - 34, - 132, - 120, - 241, - 69, - 14, - 103, - 166, - 53, - 132, - 70, - 227, - 112, - 104, - 52, - 188, - 90, - 115, - 26, - 188, - 5, - 212, - 146, - 203, - 192, - 243, - 207, - 227, - 47, - 186, - 186, - 112, - 200, - 26, - 141, - 50, - 176, - 122, - 53, - 14, - 101, - 191, - 31, - 175, - 239, - 222, - 141, - 173, - 180, - 124, - 57, - 190, - 158, - 190, - 246, - 218, - 63, - 135, - 254, - 47, - 9, - 4, - 155, - 32, - 235, - 8, - 191, - 239, - 38, - 38, - 182, - 180, - 224, - 120, - 120, - 233, - 37, - 44, - 22, - 222, - 11, - 128, - 205, - 38, - 132, - 86, - 107, - 183, - 107, - 181, - 92, - 235, - 156, - 6, - 239, - 106, - 57, - 129, - 197, - 0, - 166, - 72, - 9, - 95, - 46, - 113, - 138, - 44, - 40, - 192, - 35, - 188, - 104, - 210, - 91, - 28, - 14, - 217, - 146, - 146, - 15, - 192, - 196, - 196, - 92, - 162, - 10, - 33, - 1, - 118, - 156, - 52, - 18, - 157, - 174, - 180, - 84, - 167, - 19, - 98, - 231, - 78, - 44, - 156, - 250, - 172, - 216, - 176, - 1, - 91, - 192, - 102, - 195, - 86, - 64, - 156, - 6, - 175, - 193, - 188, - 49, - 190, - 29, - 168, - 84, - 56, - 88, - 121, - 158, - 129, - 110, - 3, - 140, - 198, - 91, - 65, - 69, - 197, - 167, - 224, - 139, - 47, - 230, - 30, - 79, - 200, - 9, - 48, - 158, - 163, - 6, - 201, - 204, - 118, - 67, - 226, - 215, - 201, - 198, - 70, - 33, - 114, - 114, - 154, - 154, - 114, - 114, - 120, - 51, - 199, - 105, - 240, - 26, - 172, - 33, - 74, - 130, - 157, - 36, - 46, - 14, - 231, - 248, - 180, - 52, - 28, - 1, - 101, - 101, - 39, - 192, - 244, - 116, - 168, - 145, - 92, - 96, - 2, - 193, - 14, - 31, - 158, - 156, - 60, - 124, - 88, - 46, - 247, - 251, - 229, - 114, - 158, - 100, - 205, - 230, - 250, - 122, - 179, - 153, - 223, - 230, - 56, - 13, - 238, - 120, - 252, - 62, - 181, - 130, - 220, - 67, - 120, - 79, - 202, - 35, - 237, - 98, - 98, - 152, - 135, - 239, - 66, - 211, - 132, - 55, - 109, - 252, - 138, - 195, - 221, - 140, - 211, - 224, - 53, - 248, - 33, - 194, - 175, - 41, - 252, - 159, - 191, - 146, - 139, - 47, - 125, - 222, - 190, - 204, - 253, - 70, - 222, - 36, - 252, - 86, - 205, - 105, - 240, - 26, - 204, - 45, - 48, - 76, - 230, - 171, - 68, - 182, - 32, - 159, - 22, - 143, - 18, - 23, - 225, - 89, - 139, - 191, - 119, - 44, - 68, - 89, - 11, - 248, - 113, - 247, - 28, - 225, - 239, - 164, - 11, - 87, - 202, - 255, - 254, - 235, - 244, - 31, - 155, - 12, - 249, - 30, - ], - "type": "Buffer", -} -`; diff --git a/skills/flight-finder/node_modules/png-js/test/__snapshots__/metadata.spec.js.snap b/skills/flight-finder/node_modules/png-js/test/__snapshots__/metadata.spec.js.snap deleted file mode 100644 index a36f876..0000000 --- a/skills/flight-finder/node_modules/png-js/test/__snapshots__/metadata.spec.js.snap +++ /dev/null @@ -1,9019 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`metadata browser animated.png 1`] = ` -Object { - "animation": Object { - "frames": Array [ - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 210, - 203, - 106, - 84, - 65, - 24, - 4, - 224, - 239, - 204, - 104, - 28, - 21, - 98, - 2, - 154, - 11, - 222, - 2, - 26, - 66, - 12, - 10, - 9, - 134, - 16, - 209, - 149, - 193, - 119, - 80, - 119, - 190, - 129, - 11, - 31, - 192, - 55, - 240, - 61, - 124, - 5, - 151, - 130, - 217, - 153, - 224, - 194, - 24, - 7, - 23, - 138, - 10, - 34, - 94, - 32, - 142, - 56, - 224, - 101, - 209, - 117, - 146, - 113, - 102, - 146, - 130, - 3, - 221, - 244, - 223, - 85, - 117, - 170, - 154, - 65, - 52, - 122, - 214, - 183, - 240, - 24, - 205, - 33, - 115, - 3, - 195, - 48, - 141, - 71, - 88, - 200, - 254, - 60, - 110, - 100, - 125, - 56, - 132, - 23, - 15, - 34, - 248, - 131, - 107, - 120, - 144, - 125, - 11, - 93, - 252, - 14, - 233, - 4, - 118, - 122, - 47, - 212, - 214, - 166, - 113, - 12, - 159, - 240, - 30, - 247, - 240, - 18, - 231, - 176, - 136, - 167, - 184, - 132, - 87, - 216, - 142, - 155, - 147, - 232, - 52, - 227, - 226, - 62, - 238, - 226, - 91, - 134, - 151, - 226, - 230, - 73, - 246, - 103, - 241, - 3, - 235, - 56, - 133, - 235, - 152, - 67, - 187, - 138, - 131, - 25, - 220, - 198, - 114, - 20, - 30, - 134, - 224, - 87, - 143, - 211, - 70, - 136, - 103, - 241, - 5, - 155, - 113, - 251, - 31, - 174, - 226, - 206, - 144, - 108, - 106, - 44, - 68, - 121, - 23, - 21, - 214, - 48, - 137, - 191, - 9, - 235, - 25, - 222, - 238, - 67, - 112, - 28, - 151, - 49, - 146, - 187, - 157, - 67, - 9, - 99, - 34, - 4, - 93, - 7, - 116, - 30, - 103, - 163, - 56, - 18, - 130, - 1, - 167, - 167, - 113, - 37, - 135, - 195, - 48, - 147, - 153, - 93, - 212, - 106, - 45, - 172, - 96, - 85, - 169, - 115, - 91, - 9, - 177, - 31, - 75, - 17, - 24, - 197, - 87, - 116, - 155, - 81, - 187, - 25, - 230, - 23, - 74, - 85, - 139, - 56, - 129, - 14, - 142, - 98, - 74, - 9, - 120, - 93, - 121, - 72, - 115, - 184, - 128, - 118, - 237, - 160, - 178, - 247, - 72, - 198, - 149, - 58, - 223, - 225, - 12, - 230, - 241, - 33, - 202, - 29, - 108, - 229, - 108, - 7, - 159, - 235, - 16, - 218, - 248, - 168, - 164, - 187, - 18, - 123, - 175, - 19, - 86, - 43, - 4, - 111, - 226, - 108, - 28, - 223, - 235, - 223, - 236, - 79, - 113, - 44, - 151, - 158, - 43, - 173, - 52, - 242, - 85, - 216, - 192, - 79, - 165, - 242, - 125, - 81, - 69, - 177, - 55, - 180, - 53, - 123, - 173, - 140, - 232, - 171, - 249, - 31, - 210, - 209, - 71, - 210, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 210, - 77, - 111, - 204, - 81, - 24, - 5, - 240, - 223, - 204, - 127, - 90, - 45, - 29, - 98, - 188, - 52, - 88, - 144, - 145, - 136, - 168, - 4, - 155, - 46, - 42, - 33, - 209, - 136, - 21, - 9, - 43, - 95, - 192, - 74, - 72, - 108, - 248, - 42, - 62, - 128, - 79, - 99, - 33, - 145, - 144, - 104, - 53, - 105, - 66, - 27, - 137, - 137, - 182, - 40, - 245, - 210, - 81, - 139, - 123, - 254, - 50, - 198, - 196, - 217, - 220, - 231, - 62, - 247, - 220, - 243, - 188, - 242, - 55, - 118, - 161, - 133, - 102, - 238, - 215, - 241, - 0, - 85, - 238, - 7, - 134, - 248, - 127, - 136, - 53, - 58, - 120, - 132, - 83, - 249, - 116, - 19, - 243, - 177, - 59, - 184, - 131, - 123, - 163, - 4, - 234, - 115, - 11, - 39, - 112, - 27, - 125, - 188, - 194, - 120, - 236, - 171, - 184, - 143, - 181, - 65, - 129, - 10, - 13, - 116, - 177, - 31, - 239, - 34, - 114, - 3, - 75, - 184, - 140, - 79, - 241, - 221, - 69, - 15, - 15, - 243, - 231, - 56, - 62, - 86, - 17, - 185, - 133, - 179, - 216, - 139, - 69, - 180, - 49, - 137, - 39, - 248, - 146, - 168, - 215, - 240, - 24, - 31, - 112, - 9, - 135, - 176, - 222, - 72, - 38, - 39, - 83, - 235, - 65, - 188, - 198, - 115, - 188, - 193, - 183, - 188, - 183, - 113, - 30, - 71, - 149, - 38, - 175, - 224, - 45, - 86, - 37, - 157, - 26, - 243, - 184, - 24, - 210, - 48, - 154, - 17, - 233, - 98, - 95, - 237, - 108, - 225, - 2, - 38, - 146, - 210, - 106, - 82, - 238, - 143, - 16, - 248, - 133, - 23, - 9, - 48, - 165, - 140, - 116, - 173, - 153, - 135, - 233, - 212, - 217, - 77, - 35, - 119, - 70, - 8, - 72, - 144, - 207, - 225, - 193, - 177, - 186, - 190, - 74, - 105, - 90, - 7, - 51, - 254, - 221, - 143, - 26, - 135, - 49, - 27, - 254, - 148, - 24, - 63, - 176, - 59, - 170, - 179, - 248, - 138, - 159, - 41, - 101, - 16, - 109, - 156, - 78, - 182, - 211, - 216, - 196, - 102, - 11, - 99, - 152, - 11, - 97, - 25, - 239, - 147, - 218, - 68, - 68, - 154, - 137, - 118, - 4, - 11, - 216, - 86, - 118, - 96, - 12, - 235, - 85, - 234, - 253, - 174, - 140, - 102, - 89, - 217, - 133, - 51, - 241, - 79, - 38, - 234, - 82, - 178, - 219, - 194, - 51, - 101, - 161, - 182, - 209, - 107, - 134, - 184, - 162, - 76, - 160, - 254, - 176, - 131, - 167, - 137, - 220, - 79, - 227, - 22, - 112, - 46, - 190, - 158, - 178, - 230, - 253, - 225, - 102, - 85, - 202, - 104, - 95, - 42, - 211, - 105, - 97, - 79, - 222, - 22, - 177, - 145, - 70, - 254, - 23, - 237, - 1, - 123, - 6, - 87, - 34, - 212, - 80, - 102, - 63, - 62, - 72, - 254, - 13, - 202, - 226, - 83, - 36, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 117, - 211, - 75, - 111, - 204, - 97, - 20, - 6, - 240, - 223, - 127, - 102, - 234, - 58, - 116, - 220, - 162, - 117, - 173, - 186, - 196, - 53, - 70, - 162, - 98, - 97, - 65, - 34, - 54, - 68, - 108, - 44, - 172, - 248, - 0, - 62, - 130, - 175, - 97, - 225, - 123, - 116, - 97, - 193, - 154, - 173, - 72, - 234, - 146, - 150, - 16, - 65, - 245, - 66, - 90, - 18, - 109, - 98, - 88, - 188, - 207, - 36, - 147, - 49, - 61, - 155, - 247, - 118, - 206, - 115, - 206, - 121, - 206, - 243, - 242, - 191, - 141, - 160, - 202, - 254, - 54, - 238, - 100, - 95, - 161, - 129, - 225, - 94, - 231, - 90, - 95, - 240, - 73, - 220, - 192, - 241, - 156, - 143, - 225, - 50, - 214, - 227, - 8, - 30, - 102, - 29, - 8, - 80, - 97, - 17, - 59, - 48, - 145, - 108, - 29, - 124, - 194, - 10, - 238, - 226, - 18, - 190, - 247, - 198, - 214, - 115, - 56, - 24, - 231, - 133, - 100, - 59, - 129, - 117, - 216, - 136, - 189, - 152, - 195, - 3, - 60, - 194, - 99, - 28, - 192, - 40, - 86, - 27, - 216, - 138, - 163, - 216, - 142, - 105, - 188, - 193, - 30, - 124, - 192, - 79, - 76, - 226, - 34, - 158, - 226, - 9, - 174, - 227, - 22, - 218, - 184, - 41, - 165, - 142, - 196, - 233, - 30, - 174, - 4, - 96, - 168, - 143, - 159, - 54, - 238, - 99, - 6, - 175, - 3, - 162, - 158, - 94, - 150, - 211, - 255, - 231, - 56, - 207, - 224, - 79, - 31, - 192, - 55, - 156, - 193, - 95, - 92, - 11, - 72, - 85, - 225, - 116, - 122, - 250, - 138, - 93, - 120, - 134, - 37, - 131, - 237, - 42, - 126, - 167, - 237, - 69, - 12, - 213, - 176, - 45, - 21, - 236, - 195, - 172, - 50, - 133, - 181, - 236, - 121, - 130, - 103, - 147, - 108, - 185, - 251, - 176, - 33, - 235, - 89, - 236, - 95, - 35, - 184, - 194, - 97, - 133, - 159, - 102, - 238, - 54, - 117, - 199, - 184, - 19, - 231, - 148, - 209, - 12, - 99, - 94, - 225, - 160, - 147, - 247, - 110, - 165, - 163, - 184, - 16, - 176, - 85, - 44, - 117, - 73, - 108, - 43, - 243, - 254, - 130, - 151, - 138, - 34, - 91, - 1, - 105, - 97, - 75, - 178, - 207, - 199, - 231, - 16, - 198, - 240, - 174, - 222, - 147, - 97, - 26, - 175, - 2, - 212, - 198, - 11, - 156, - 10, - 64, - 7, - 227, - 248, - 133, - 183, - 10, - 225, - 11, - 248, - 81, - 83, - 198, - 242, - 62, - 151, - 13, - 156, - 87, - 68, - 52, - 167, - 72, - 184, - 137, - 41, - 69, - 194, - 99, - 216, - 157, - 253, - 71, - 116, - 250, - 63, - 83, - 75, - 81, - 223, - 84, - 178, - 110, - 86, - 36, - 45, - 173, - 173, - 244, - 240, - 50, - 208, - 26, - 138, - 164, - 107, - 33, - 106, - 66, - 81, - 104, - 247, - 123, - 55, - 251, - 3, - 254, - 1, - 211, - 69, - 82, - 64, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 117, - 211, - 95, - 75, - 21, - 81, - 20, - 5, - 240, - 223, - 157, - 185, - 94, - 181, - 130, - 76, - 80, - 83, - 3, - 35, - 162, - 50, - 81, - 72, - 11, - 122, - 233, - 193, - 192, - 36, - 250, - 2, - 37, - 190, - 251, - 234, - 7, - 232, - 155, - 68, - 16, - 65, - 31, - 194, - 103, - 161, - 71, - 73, - 72, - 252, - 67, - 150, - 22, - 145, - 136, - 152, - 47, - 55, - 45, - 252, - 211, - 195, - 217, - 19, - 211, - 245, - 222, - 13, - 3, - 103, - 207, - 156, - 181, - 246, - 58, - 235, - 172, - 201, - 157, - 175, - 74, - 105, - 253, - 28, - 87, - 241, - 57, - 250, - 12, - 103, - 229, - 205, - 89, - 3, - 248, - 38, - 158, - 160, - 35, - 250, - 126, - 244, - 197, - 250, - 58, - 94, - 198, - 187, - 150, - 4, - 117, - 244, - 96, - 34, - 250, - 179, - 210, - 196, - 23, - 184, - 141, - 147, - 70, - 130, - 10, - 122, - 81, - 195, - 15, - 172, - 98, - 24, - 131, - 248, - 19, - 128, - 251, - 120, - 128, - 215, - 216, - 13, - 85, - 253, - 144, - 135, - 220, - 169, - 144, - 120, - 16, - 36, - 215, - 112, - 136, - 21, - 124, - 197, - 61, - 84, - 241, - 46, - 142, - 248, - 42, - 246, - 47, - 20, - 74, - 6, - 240, - 12, - 179, - 120, - 24, - 155, - 203, - 102, - 102, - 232, - 196, - 219, - 80, - 248, - 6, - 35, - 13, - 199, - 87, - 193, - 173, - 102, - 31, - 162, - 218, - 49, - 143, - 199, - 141, - 160, - 113, - 92, - 196, - 41, - 126, - 199, - 132, - 122, - 11, - 146, - 49, - 76, - 227, - 40, - 158, - 237, - 42, - 186, - 209, - 21, - 4, - 71, - 216, - 104, - 1, - 38, - 25, - 59, - 39, - 25, - 94, - 195, - 98, - 161, - 162, - 56, - 239, - 0, - 134, - 90, - 128, - 115, - 204, - 132, - 226, - 162, - 207, - 243, - 104, - 46, - 72, - 215, - 52, - 30, - 204, - 95, - 154, - 16, - 84, - 37, - 231, - 7, - 3, - 188, - 135, - 227, - 60, - 0, - 79, - 165, - 0, - 45, - 225, - 35, - 30, - 73, - 1, - 58, - 65, - 155, - 100, - 238, - 16, - 222, - 75, - 55, - 114, - 87, - 202, - 206, - 102, - 161, - 224, - 20, - 31, - 240, - 13, - 55, - 112, - 7, - 155, - 161, - 168, - 11, - 191, - 48, - 42, - 101, - 100, - 67, - 10, - 83, - 29, - 251, - 89, - 76, - 89, - 195, - 79, - 92, - 150, - 66, - 179, - 133, - 239, - 210, - 213, - 213, - 176, - 142, - 253, - 32, - 108, - 195, - 14, - 62, - 113, - 254, - 95, - 232, - 11, - 194, - 229, - 232, - 203, - 6, - 47, - 227, - 18, - 174, - 52, - 241, - 231, - 95, - 101, - 49, - 177, - 168, - 73, - 201, - 220, - 162, - 58, - 252, - 159, - 80, - 127, - 1, - 189, - 154, - 70, - 180, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 117, - 211, - 207, - 110, - 77, - 81, - 20, - 6, - 240, - 159, - 158, - 171, - 66, - 35, - 218, - 170, - 170, - 106, - 36, - 68, - 252, - 109, - 210, - 208, - 164, - 12, - 68, - 27, - 17, - 34, - 6, - 30, - 128, - 169, - 129, - 87, - 48, - 240, - 0, - 30, - 195, - 131, - 212, - 180, - 41, - 98, - 130, - 104, - 110, - 194, - 136, - 84, - 132, - 212, - 173, - 91, - 138, - 150, - 193, - 254, - 174, - 156, - 123, - 115, - 187, - 146, - 147, - 181, - 87, - 246, - 58, - 107, - 125, - 235, - 251, - 214, - 166, - 219, - 246, - 96, - 95, - 206, - 187, - 113, - 25, - 179, - 181, - 251, - 163, - 61, - 249, - 6, - 122, - 226, - 17, - 44, - 96, - 63, - 254, - 98, - 28, - 99, - 185, - 59, - 141, - 59, - 56, - 213, - 175, - 192, - 174, - 248, - 31, - 56, - 152, - 228, - 63, - 137, - 171, - 124, - 243, - 104, - 224, - 123, - 45, - 95, - 149, - 224, - 8, - 246, - 226, - 107, - 226, - 115, - 88, - 197, - 9, - 180, - 113, - 44, - 157, - 159, - 161, - 153, - 38, - 231, - 241, - 177, - 10, - 138, - 121, - 76, - 133, - 131, - 85, - 12, - 6, - 193, - 107, - 252, - 196, - 239, - 228, - 189, - 199, - 21, - 60, - 200, - 152, - 203, - 85, - 102, - 109, - 99, - 34, - 72, - 182, - 240, - 22, - 159, - 50, - 194, - 26, - 214, - 3, - 253, - 54, - 110, - 98, - 17, - 79, - 211, - 172, - 139, - 200, - 217, - 192, - 222, - 201, - 174, - 43, - 202, - 12, - 231, - 191, - 70, - 21, - 72, - 83, - 152, - 169, - 117, - 91, - 223, - 161, - 64, - 27, - 143, - 113, - 8, - 143, - 176, - 86, - 41, - 50, - 77, - 224, - 3, - 38, - 241, - 38, - 243, - 247, - 179, - 133, - 52, - 185, - 134, - 21, - 217, - 153, - 206, - 226, - 28, - 192, - 97, - 76, - 171, - 201, - 84, - 179, - 33, - 220, - 194, - 221, - 196, - 227, - 20, - 25, - 41, - 178, - 156, - 193, - 69, - 124, - 193, - 47, - 133, - 192, - 142, - 85, - 152, - 195, - 67, - 92, - 82, - 84, - 122, - 135, - 86, - 149, - 202, - 87, - 227, - 95, - 165, - 192, - 180, - 34, - 223, - 152, - 66, - 214, - 73, - 92, - 192, - 19, - 156, - 197, - 253, - 240, - 241, - 178, - 161, - 16, - 246, - 34, - 190, - 149, - 196, - 225, - 160, - 26, - 201, - 56, - 77, - 108, - 224, - 27, - 238, - 225, - 134, - 178, - 108, - 155, - 157, - 17, - 90, - 216, - 84, - 200, - 156, - 193, - 103, - 60, - 175, - 33, - 89, - 73, - 193, - 227, - 41, - 214, - 196, - 18, - 182, - 123, - 31, - 211, - 64, - 186, - 52, - 19, - 15, - 42, - 219, - 185, - 173, - 168, - 179, - 129, - 209, - 62, - 4, - 119, - 217, - 80, - 237, - 60, - 151, - 145, - 58, - 197, - 71, - 149, - 7, - 245, - 223, - 254, - 1, - 206, - 6, - 82, - 113, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 117, - 211, - 77, - 75, - 21, - 113, - 20, - 6, - 240, - 159, - 119, - 174, - 22, - 146, - 152, - 90, - 208, - 139, - 73, - 132, - 25, - 25, - 21, - 145, - 133, - 68, - 180, - 210, - 93, - 109, - 219, - 183, - 109, - 221, - 7, - 232, - 115, - 180, - 110, - 211, - 23, - 104, - 81, - 8, - 70, - 80, - 20, - 45, - 162, - 160, - 133, - 98, - 81, - 139, - 44, - 130, - 74, - 172, - 172, - 174, - 93, - 93, - 252, - 159, - 11, - 211, - 85, - 15, - 204, - 204, - 153, - 249, - 159, - 231, - 57, - 207, - 121, - 25, - 182, - 218, - 48, - 122, - 226, - 95, - 198, - 133, - 248, - 77, - 28, - 192, - 238, - 122, - 112, - 163, - 11, - 124, - 12, - 211, - 56, - 84, - 35, - 27, - 140, - 127, - 56, - 103, - 131, - 117, - 64, - 157, - 160, - 7, - 43, - 24, - 192, - 120, - 50, - 174, - 227, - 7, - 42, - 156, - 196, - 46, - 124, - 77, - 124, - 213, - 185, - 53, - 48, - 129, - 54, - 190, - 5, - 56, - 138, - 141, - 124, - 171, - 66, - 62, - 133, - 39, - 248, - 130, - 179, - 56, - 142, - 229, - 42, - 146, - 206, - 96, - 18, - 189, - 248, - 156, - 76, - 111, - 241, - 19, - 239, - 177, - 31, - 191, - 146, - 224, - 42, - 46, - 134, - 124, - 161, - 66, - 43, - 160, - 127, - 56, - 145, - 231, - 107, - 172, - 230, - 106, - 37, - 235, - 26, - 174, - 96, - 31, - 22, - 48, - 143, - 149, - 10, - 123, - 82, - 231, - 26, - 62, - 68, - 250, - 39, - 91, - 237, - 119, - 200, - 214, - 241, - 48, - 184, - 191, - 77, - 156, - 194, - 17, - 124, - 140, - 212, - 7, - 219, - 128, - 69, - 217, - 8, - 142, - 226, - 14, - 222, - 97, - 181, - 145, - 38, - 46, - 41, - 243, - 125, - 163, - 140, - 110, - 39, - 123, - 161, - 76, - 232, - 158, - 210, - 236, - 167, - 245, - 195, - 6, - 46, - 41, - 187, - 176, - 157, - 245, - 227, - 38, - 174, - 69, - 9, - 244, - 86, - 113, - 198, - 149, - 173, - 27, - 168, - 213, - 217, - 138, - 108, - 56, - 168, - 140, - 122, - 18, - 183, - 48, - 134, - 63, - 88, - 234, - 236, - 193, - 84, - 130, - 23, - 177, - 140, - 115, - 202, - 236, - 43, - 204, - 134, - 124, - 58, - 210, - 95, - 97, - 6, - 67, - 152, - 107, - 42, - 93, - 127, - 25, - 198, - 239, - 202, - 238, - 143, - 224, - 89, - 74, - 106, - 43, - 205, - 189, - 142, - 199, - 184, - 143, - 71, - 249, - 214, - 238, - 174, - 115, - 24, - 55, - 112, - 58, - 239, - 51, - 202, - 236, - 225, - 57, - 238, - 42, - 255, - 196, - 127, - 141, - 171, - 91, - 159, - 178, - 121, - 139, - 202, - 86, - 246, - 215, - 98, - 110, - 99, - 111, - 20, - 239, - 104, - 205, - 144, - 8, - 193, - 121, - 165, - 113, - 29, - 27, - 235, - 6, - 108, - 2, - 239, - 163, - 84, - 143, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 210, - 79, - 75, - 85, - 81, - 20, - 5, - 240, - 223, - 125, - 215, - 63, - 89, - 10, - 134, - 102, - 214, - 115, - 16, - 161, - 53, - 8, - 250, - 71, - 56, - 139, - 40, - 36, - 4, - 3, - 27, - 41, - 84, - 227, - 102, - 13, - 251, - 20, - 126, - 9, - 231, - 126, - 135, - 6, - 6, - 53, - 169, - 97, - 4, - 17, - 65, - 18, - 61, - 20, - 139, - 87, - 190, - 192, - 74, - 125, - 14, - 246, - 214, - 244, - 234, - 107, - 193, - 225, - 238, - 115, - 247, - 57, - 123, - 175, - 179, - 246, - 42, - 29, - 70, - 137, - 110, - 108, - 163, - 192, - 20, - 6, - 209, - 200, - 252, - 137, - 204, - 237, - 163, - 86, - 41, - 48, - 129, - 25, - 156, - 204, - 253, - 32, - 78, - 101, - 124, - 30, - 15, - 112, - 230, - 127, - 5, - 86, - 209, - 135, - 235, - 104, - 99, - 39, - 87, - 129, - 27, - 248, - 141, - 102, - 149, - 114, - 45, - 59, - 111, - 101, - 114, - 11, - 87, - 176, - 142, - 97, - 252, - 68, - 63, - 198, - 177, - 156, - 251, - 115, - 24, - 197, - 247, - 189, - 55, - 223, - 193, - 37, - 252, - 197, - 74, - 82, - 255, - 129, - 15, - 88, - 195, - 16, - 126, - 225, - 11, - 174, - 98, - 18, - 189, - 248, - 84, - 36, - 147, - 1, - 92, - 195, - 5, - 124, - 197, - 11, - 71, - 209, - 133, - 89, - 156, - 198, - 123, - 188, - 197, - 102, - 245, - 80, - 61, - 139, - 28, - 135, - 34, - 187, - 215, - 171, - 85, - 239, - 38, - 131, - 118, - 138, - 244, - 186, - 67, - 129, - 54, - 54, - 146, - 69, - 79, - 22, - 108, - 116, - 161, - 37, - 148, - 110, - 227, - 79, - 198, - 157, - 176, - 141, - 111, - 66, - 252, - 66, - 8, - 125, - 8, - 151, - 197, - 4, - 142, - 67, - 13, - 143, - 112, - 235, - 224, - 207, - 50, - 191, - 117, - 220, - 22, - 163, - 106, - 9, - 229, - 139, - 100, - 69, - 40, - 222, - 141, - 121, - 60, - 196, - 69, - 49, - 145, - 102, - 41, - 236, - 121, - 95, - 140, - 240, - 21, - 62, - 99, - 90, - 24, - 103, - 76, - 184, - 114, - 14, - 79, - 241, - 92, - 76, - 105, - 58, - 115, - 47, - 101, - 167, - 145, - 236, - 32, - 41, - 62, - 198, - 77, - 124, - 204, - 75, - 247, - 196, - 232, - 102, - 242, - 204, - 136, - 48, - 211, - 17, - 140, - 226, - 137, - 176, - 50, - 97, - 170, - 103, - 25, - 47, - 226, - 13, - 206, - 86, - 133, - 57, - 136, - 254, - 124, - 255, - 187, - 212, - 167, - 199, - 63, - 179, - 44, - 228, - 19, - 171, - 119, - 58, - 162, - 196, - 146, - 208, - 167, - 83, - 67, - 187, - 125, - 78, - 72, - 159, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 210, - 187, - 107, - 84, - 97, - 16, - 5, - 240, - 95, - 118, - 215, - 168, - 108, - 204, - 70, - 178, - 26, - 140, - 137, - 160, - 162, - 24, - 140, - 18, - 98, - 169, - 32, - 233, - 212, - 54, - 104, - 45, - 22, - 254, - 33, - 118, - 150, - 86, - 150, - 118, - 86, - 98, - 37, - 130, - 189, - 157, - 133, - 96, - 19, - 66, - 108, - 140, - 224, - 11, - 223, - 175, - 136, - 36, - 196, - 226, - 59, - 87, - 238, - 94, - 92, - 7, - 46, - 51, - 115, - 191, - 153, - 51, - 103, - 30, - 12, - 202, - 78, - 236, - 71, - 27, - 45, - 156, - 197, - 57, - 140, - 228, - 125, - 95, - 35, - 94, - 171, - 225, - 143, - 227, - 60, - 166, - 176, - 141, - 49, - 236, - 137, - 125, - 40, - 96, - 51, - 255, - 2, - 168, - 244, - 231, - 232, - 147, - 169, - 250, - 189, - 246, - 126, - 26, - 155, - 216, - 168, - 49, - 210, - 142, - 115, - 52, - 213, - 63, - 38, - 233, - 84, - 236, - 126, - 252, - 126, - 232, - 175, - 226, - 13, - 38, - 195, - 232, - 83, - 213, - 235, - 60, - 142, - 39, - 232, - 45, - 126, - 229, - 255, - 10, - 190, - 6, - 100, - 11, - 223, - 146, - 184, - 136, - 46, - 214, - 43, - 42, - 19, - 53, - 128, - 31, - 120, - 130, - 159, - 233, - 189, - 106, - 161, - 139, - 57, - 28, - 193, - 211, - 48, - 249, - 2, - 59, - 208, - 75, - 224, - 2, - 166, - 13, - 151, - 89, - 28, - 80, - 134, - 59, - 138, - 94, - 7, - 75, - 161, - 55, - 137, - 23, - 216, - 245, - 31, - 128, - 119, - 88, - 198, - 235, - 176, - 93, - 175, - 134, - 56, - 134, - 231, - 216, - 155, - 65, - 109, - 14, - 1, - 56, - 140, - 247, - 202, - 80, - 95, - 42, - 75, - 248, - 187, - 194, - 94, - 232, - 45, - 97, - 247, - 16, - 128, - 51, - 184, - 172, - 28, - 28, - 65, - 24, - 197, - 65, - 101, - 117, - 243, - 248, - 141, - 19, - 161, - 187, - 145, - 184, - 150, - 114, - 27, - 51, - 121, - 91, - 12, - 203, - 87, - 237, - 84, - 91, - 8, - 208, - 227, - 208, - 187, - 137, - 103, - 169, - 216, - 141, - 190, - 128, - 135, - 248, - 160, - 204, - 107, - 26, - 107, - 21, - 147, - 126, - 0, - 224, - 110, - 128, - 46, - 226, - 6, - 238, - 135, - 225, - 61, - 92, - 75, - 204, - 20, - 142, - 41, - 27, - 28, - 144, - 75, - 161, - 126, - 61, - 254, - 29, - 220, - 78, - 11, - 87, - 3, - 54, - 91, - 79, - 232, - 52, - 0, - 182, - 113, - 11, - 15, - 226, - 111, - 41, - 147, - 239, - 224, - 145, - 114, - 238, - 227, - 205, - 170, - 77, - 153, - 168, - 217, - 203, - 184, - 18, - 123, - 36, - 223, - 192, - 157, - 252, - 1, - 59, - 247, - 67, - 135, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 211, - 73, - 106, - 21, - 97, - 20, - 5, - 224, - 175, - 94, - 85, - 212, - 16, - 53, - 54, - 121, - 96, - 140, - 10, - 118, - 4, - 17, - 17, - 21, - 130, - 130, - 3, - 39, - 110, - 64, - 112, - 226, - 10, - 4, - 39, - 138, - 59, - 112, - 15, - 110, - 192, - 129, - 35, - 65, - 208, - 236, - 33, - 32, - 111, - 164, - 32, - 40, - 34, - 68, - 8, - 9, - 233, - 144, - 104, - 98, - 196, - 68, - 29, - 252, - 231, - 65, - 249, - 162, - 94, - 40, - 254, - 230, - 54, - 255, - 61, - 231, - 220, - 98, - 167, - 117, - 81, - 101, - 63, - 133, - 155, - 232, - 228, - 59, - 134, - 145, - 118, - 112, - 103, - 32, - 249, - 8, - 174, - 97, - 50, - 231, - 17, - 236, - 77, - 220, - 88, - 124, - 99, - 255, - 42, - 80, - 225, - 11, - 54, - 82, - 96, - 23, - 126, - 224, - 107, - 124, - 231, - 80, - 99, - 161, - 157, - 91, - 103, - 51, - 137, - 209, - 86, - 129, - 113, - 236, - 207, - 121, - 95, - 214, - 203, - 232, - 97, - 17, - 103, - 112, - 2, - 203, - 53, - 26, - 156, - 199, - 233, - 4, - 111, - 96, - 19, - 179, - 248, - 140, - 79, - 185, - 95, - 195, - 42, - 174, - 226, - 44, - 182, - 48, - 215, - 39, - 171, - 9, - 65, - 151, - 210, - 226, - 187, - 4, - 183, - 109, - 56, - 254, - 81, - 44, - 225, - 61, - 214, - 106, - 28, - 196, - 47, - 252, - 196, - 71, - 108, - 99, - 222, - 78, - 219, - 194, - 122, - 96, - 191, - 14, - 193, - 219, - 13, - 78, - 133, - 131, - 5, - 69, - 194, - 153, - 191, - 36, - 183, - 187, - 24, - 194, - 109, - 172, - 96, - 79, - 141, - 195, - 152, - 83, - 152, - 94, - 84, - 180, - 127, - 155, - 142, - 6, - 237, - 27, - 78, - 226, - 141, - 162, - 210, - 108, - 219, - 121, - 8, - 211, - 120, - 164, - 104, - 95, - 13, - 36, - 55, - 184, - 136, - 11, - 129, - 13, - 85, - 95, - 198, - 123, - 120, - 22, - 156, - 61, - 133, - 147, - 205, - 96, - 238, - 183, - 62, - 161, - 168, - 113, - 69, - 33, - 114, - 55, - 214, - 235, - 96, - 122, - 136, - 151, - 120, - 140, - 87, - 120, - 128, - 227, - 88, - 86, - 100, - 171, - 112, - 3, - 31, - 210, - 126, - 183, - 15, - 189, - 74, - 7, - 7, - 18, - 180, - 130, - 251, - 184, - 27, - 162, - 110, - 229, - 126, - 26, - 215, - 149, - 185, - 120, - 18, - 126, - 186, - 88, - 234, - 228, - 176, - 154, - 228, - 113, - 220, - 193, - 139, - 188, - 52, - 31, - 110, - 122, - 202, - 108, - 76, - 40, - 179, - 64, - 153, - 5, - 205, - 0, - 81, - 53, - 158, - 227, - 105, - 94, - 62, - 170, - 252, - 15, - 117, - 138, - 12, - 227, - 187, - 255, - 216, - 80, - 159, - 221, - 172, - 83, - 45, - 24, - 20, - 117, - 254, - 176, - 223, - 49, - 211, - 84, - 232, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 133, - 211, - 207, - 139, - 79, - 81, - 24, - 6, - 240, - 207, - 157, - 251, - 157, - 175, - 201, - 152, - 98, - 97, - 52, - 148, - 168, - 47, - 165, - 111, - 72, - 136, - 5, - 11, - 63, - 118, - 146, - 5, - 69, - 182, - 172, - 148, - 178, - 241, - 63, - 88, - 219, - 250, - 3, - 88, - 89, - 90, - 248, - 23, - 204, - 196, - 66, - 68, - 216, - 136, - 137, - 205, - 72, - 136, - 49, - 227, - 107, - 113, - 158, - 91, - 103, - 198, - 224, - 169, - 211, - 189, - 239, - 185, - 239, - 251, - 156, - 247, - 121, - 207, - 115, - 89, - 137, - 6, - 19, - 85, - 124, - 24, - 39, - 170, - 184, - 143, - 177, - 186, - 96, - 69, - 128, - 205, - 56, - 135, - 109, - 137, - 215, - 99, - 42, - 239, - 83, - 249, - 54, - 248, - 23, - 193, - 2, - 190, - 96, - 127, - 226, - 81, - 150, - 236, - 181, - 248, - 80, - 23, - 180, - 121, - 14, - 210, - 222, - 231, - 16, - 12, - 241, - 35, - 123, - 61, - 124, - 199, - 1, - 204, - 225, - 29, - 54, - 97, - 7, - 22, - 58, - 130, - 67, - 216, - 155, - 130, - 183, - 24, - 199, - 18, - 94, - 166, - 96, - 67, - 136, - 158, - 229, - 176, - 227, - 216, - 136, - 87, - 77, - 8, - 198, - 115, - 234, - 48, - 29, - 60, - 192, - 79, - 127, - 226, - 20, - 102, - 240, - 6, - 79, - 240, - 173, - 141, - 140, - 17, - 230, - 67, - 180, - 21, - 79, - 43, - 237, - 53, - 126, - 225, - 117, - 58, - 89, - 66, - 211, - 195, - 189, - 180, - 180, - 152, - 117, - 29, - 203, - 107, - 20, - 83, - 134, - 124, - 12, - 71, - 149, - 11, - 248, - 212, - 195, - 29, - 60, - 84, - 238, - 127, - 34, - 154, - 255, - 134, - 101, - 124, - 196, - 186, - 16, - 124, - 93, - 157, - 112, - 18, - 55, - 146, - 176, - 22, - 134, - 216, - 173, - 24, - 14, - 101, - 178, - 221, - 135, - 155, - 56, - 130, - 71, - 97, - 31, - 139, - 102, - 41, - 104, - 21, - 51, - 13, - 176, - 11, - 143, - 241, - 94, - 18, - 111, - 99, - 22, - 103, - 20, - 247, - 221, - 194, - 101, - 108, - 199, - 78, - 236, - 195, - 121, - 76, - 98, - 26, - 103, - 113, - 65, - 101, - 251, - 25, - 108, - 169, - 100, - 220, - 87, - 188, - 113, - 17, - 215, - 20, - 107, - 95, - 197, - 193, - 228, - 244, - 67, - 212, - 116, - 86, - 158, - 87, - 44, - 58, - 141, - 43, - 145, - 49, - 155, - 182, - 251, - 202, - 96, - 159, - 99, - 79, - 14, - 91, - 84, - 134, - 57, - 234, - 102, - 208, - 161, - 197, - 11, - 220, - 173, - 180, - 119, - 3, - 155, - 83, - 28, - 57, - 233, - 63, - 168, - 127, - 176, - 211, - 184, - 84, - 197, - 205, - 170, - 92, - 191, - 1, - 251, - 74, - 70, - 68, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 125, - 211, - 79, - 111, - 140, - 81, - 20, - 6, - 240, - 223, - 204, - 59, - 211, - 50, - 45, - 161, - 218, - 40, - 147, - 148, - 160, - 81, - 105, - 68, - 19, - 33, - 44, - 176, - 147, - 176, - 99, - 199, - 198, - 66, - 124, - 12, - 223, - 199, - 206, - 198, - 194, - 198, - 66, - 196, - 66, - 68, - 74, - 194, - 170, - 73, - 165, - 138, - 134, - 180, - 197, - 162, - 227, - 79, - 70, - 89, - 188, - 207, - 212, - 219, - 50, - 78, - 114, - 115, - 115, - 238, - 185, - 231, - 185, - 207, - 121, - 206, - 185, - 108, - 182, - 6, - 70, - 209, - 140, - 63, - 133, - 139, - 40, - 226, - 239, - 218, - 114, - 95, - 125, - 139, - 63, - 136, - 179, - 56, - 16, - 127, - 103, - 146, - 234, - 24, - 193, - 41, - 28, - 253, - 23, - 64, - 35, - 251, - 26, - 126, - 96, - 58, - 103, - 29, - 252, - 68, - 23, - 147, - 1, - 235, - 84, - 1, - 10, - 212, - 112, - 3, - 167, - 241, - 12, - 43, - 56, - 142, - 175, - 216, - 158, - 248, - 54, - 76, - 224, - 35, - 94, - 229, - 124, - 18, - 171, - 69, - 88, - 204, - 224, - 54, - 174, - 224, - 13, - 118, - 132, - 205, - 203, - 0, - 125, - 194, - 80, - 98, - 227, - 41, - 115, - 44, - 128, - 96, - 119, - 146, - 239, - 98, - 22, - 231, - 49, - 92, - 97, - 90, - 67, - 43, - 15, - 93, - 143, - 22, - 227, - 104, - 214, - 48, - 16, - 129, - 62, - 224, - 50, - 214, - 241, - 20, - 203, - 254, - 182, - 118, - 180, - 249, - 146, - 53, - 212, - 192, - 173, - 212, - 124, - 12, - 15, - 176, - 208, - 39, - 25, - 150, - 112, - 41, - 241, - 54, - 150, - 234, - 17, - 110, - 12, - 119, - 2, - 244, - 184, - 79, - 50, - 236, - 193, - 92, - 74, - 94, - 80, - 138, - 187, - 49, - 52, - 35, - 56, - 20, - 70, - 3, - 125, - 0, - 246, - 227, - 130, - 63, - 109, - 87, - 164, - 230, - 131, - 184, - 138, - 155, - 120, - 143, - 239, - 74, - 229, - 187, - 149, - 228, - 209, - 48, - 152, - 72, - 185, - 235, - 88, - 233, - 181, - 241, - 26, - 78, - 224, - 30, - 30, - 41, - 7, - 105, - 48, - 20, - 91, - 161, - 60, - 29, - 218, - 189, - 150, - 238, - 197, - 187, - 2, - 191, - 34, - 202, - 67, - 101, - 11, - 219, - 202, - 54, - 173, - 229, - 149, - 147, - 120, - 17, - 128, - 86, - 238, - 44, - 99, - 21, - 159, - 123, - 163, - 252, - 90, - 57, - 36, - 195, - 56, - 163, - 28, - 158, - 251, - 97, - 209, - 193, - 55, - 60, - 199, - 17, - 236, - 83, - 182, - 240, - 45, - 186, - 27, - 98, - 196, - 26, - 202, - 191, - 240, - 164, - 82, - 127, - 51, - 107, - 17, - 243, - 161, - 255, - 95, - 171, - 126, - 217, - 195, - 56, - 23, - 45, - 100, - 223, - 212, - 161, - 223, - 134, - 255, - 81, - 171, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - Object { - "blendOp": 0, - "data": Array [ - 56, - 141, - 117, - 211, - 59, - 107, - 212, - 81, - 16, - 5, - 240, - 223, - 62, - 18, - 87, - 227, - 154, - 224, - 35, - 46, - 62, - 130, - 248, - 64, - 45, - 4, - 193, - 248, - 192, - 66, - 65, - 11, - 11, - 177, - 176, - 176, - 23, - 191, - 135, - 168, - 223, - 73, - 172, - 82, - 41, - 136, - 32, - 106, - 97, - 177, - 106, - 34, - 178, - 194, - 90, - 68, - 137, - 154, - 213, - 197, - 7, - 97, - 45, - 238, - 89, - 19, - 86, - 119, - 224, - 15, - 119, - 184, - 51, - 231, - 127, - 206, - 153, - 185, - 252, - 27, - 243, - 152, - 200, - 249, - 24, - 46, - 163, - 145, - 124, - 107, - 190, - 191, - 81, - 29, - 105, - 110, - 225, - 54, - 238, - 38, - 159, - 194, - 46, - 212, - 2, - 114, - 1, - 123, - 199, - 1, - 84, - 177, - 130, - 39, - 184, - 137, - 57, - 172, - 225, - 27, - 126, - 226, - 8, - 102, - 241, - 101, - 99, - 111, - 45, - 201, - 57, - 236, - 78, - 97, - 7, - 23, - 67, - 253, - 53, - 54, - 225, - 3, - 206, - 98, - 17, - 111, - 194, - 180, - 133, - 94, - 13, - 21, - 220, - 192, - 29, - 236, - 72, - 81, - 15, - 47, - 240, - 21, - 143, - 176, - 37, - 190, - 188, - 199, - 33, - 28, - 15, - 155, - 119, - 67, - 6, - 29, - 172, - 226, - 90, - 52, - 62, - 192, - 67, - 180, - 195, - 170, - 23, - 176, - 86, - 0, - 250, - 120, - 62, - 148, - 211, - 8, - 250, - 118, - 28, - 197, - 45, - 76, - 250, - 127, - 204, - 226, - 84, - 244, - 79, - 162, - 86, - 199, - 153, - 152, - 246, - 76, - 25, - 225, - 61, - 252, - 26, - 3, - 48, - 192, - 111, - 92, - 199, - 39, - 52, - 171, - 49, - 239, - 49, - 246, - 224, - 126, - 244, - 85, - 198, - 0, - 124, - 76, - 125, - 91, - 49, - 183, - 59, - 44, - 108, - 224, - 7, - 174, - 68, - 215, - 203, - 232, - 220, - 24, - 21, - 28, - 204, - 121, - 5, - 159, - 49, - 57, - 52, - 113, - 63, - 174, - 42, - 6, - 205, - 160, - 171, - 152, - 183, - 150, - 251, - 42, - 166, - 21, - 159, - 78, - 43, - 11, - 86, - 67, - 191, - 150, - 203, - 75, - 56, - 128, - 87, - 88, - 192, - 137, - 80, - 93, - 85, - 166, - 82, - 199, - 73, - 44, - 99, - 41, - 114, - 231, - 208, - 29, - 50, - 24, - 40, - 99, - 121, - 154, - 203, - 121, - 101, - 15, - 246, - 5, - 224, - 187, - 50, - 194, - 153, - 200, - 91, - 82, - 198, - 186, - 92, - 77, - 115, - 91, - 89, - 146, - 106, - 254, - 212, - 73, - 222, - 199, - 54, - 188, - 141, - 172, - 157, - 202, - 74, - 15, - 146, - 15, - 234, - 35, - 70, - 77, - 197, - 196, - 197, - 232, - 111, - 134, - 254, - 68, - 64, - 154, - 198, - 143, - 152, - 24, - 51, - 109, - 253, - 141, - 28, - 198, - 121, - 235, - 143, - 110, - 243, - 104, - 195, - 31, - 240, - 69, - 87, - 166, - ], - "delay": 70, - "disposeOp": 1, - "height": 16, - "width": 16, - "xOffset": 0, - "yOffset": 0, - }, - ], - "numFrames": 12, - "numPlays": Infinity, - }, - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 16, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 5255, - "text": Object {}, - "transparency": Object {}, - "width": 16, -} -`; - -exports[`metadata browser black-white.png 1`] = ` -Object { - "animation": null, - "bits": 1, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 1, - "pos": 160, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser grayscale-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 8, - "pos": 134, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser grayscale-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 163, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser grayscale-alpha-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 4, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 122, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser grayscale-alpha-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 4, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 2202, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser interlaced-grayscale-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 8, - "pos": 250, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser interlaced-pallete-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 3, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [ - 34, - 68, - 0, - 245, - 255, - 237, - 119, - 255, - 119, - 203, - 255, - 255, - 17, - 10, - 0, - 58, - 119, - 0, - 34, - 34, - 255, - 255, - 17, - 255, - 17, - 0, - 0, - 34, - 34, - 0, - 255, - 172, - 85, - 102, - 255, - 102, - 255, - 102, - 102, - 255, - 1, - 255, - 34, - 18, - 0, - 220, - 255, - 255, - 204, - 255, - 153, - 68, - 68, - 255, - 0, - 85, - 85, - 34, - 0, - 0, - 203, - 203, - 255, - 68, - 68, - 0, - 85, - 255, - 85, - 203, - 203, - 0, - 51, - 26, - 0, - 255, - 236, - 220, - 237, - 255, - 255, - 228, - 255, - 203, - 255, - 220, - 220, - 68, - 255, - 68, - 102, - 102, - 255, - 51, - 0, - 0, - 68, - 34, - 0, - 237, - 237, - 255, - 102, - 102, - 0, - 255, - 164, - 68, - 255, - 255, - 170, - 237, - 237, - 0, - 0, - 203, - 203, - 254, - 255, - 255, - 253, - 255, - 254, - 255, - 255, - 1, - 51, - 255, - 51, - 85, - 42, - 0, - 1, - 1, - 255, - 136, - 136, - 255, - 0, - 170, - 170, - 1, - 1, - 0, - 68, - 0, - 0, - 136, - 136, - 0, - 255, - 228, - 203, - 186, - 91, - 0, - 34, - 255, - 34, - 102, - 50, - 0, - 255, - 255, - 153, - 170, - 170, - 255, - 85, - 0, - 0, - 170, - 170, - 0, - 203, - 99, - 0, - 17, - 255, - 17, - 212, - 255, - 170, - 119, - 58, - 0, - 255, - 68, - 68, - 220, - 107, - 0, - 102, - 0, - 0, - 1, - 255, - 1, - 136, - 66, - 0, - 236, - 255, - 220, - 107, - 220, - 0, - 255, - 220, - 186, - 0, - 51, - 51, - 0, - 237, - 0, - 237, - 115, - 0, - 255, - 255, - 136, - 153, - 74, - 0, - 17, - 255, - 255, - 119, - 0, - 0, - 255, - 131, - 1, - 255, - 186, - 186, - 254, - 123, - 0, - 255, - 254, - 255, - 0, - 203, - 0, - 255, - 153, - 153, - 34, - 255, - 255, - 136, - 0, - 0, - 255, - 255, - 119, - 0, - 136, - 136, - 255, - 220, - 255, - 26, - 51, - 0, - 0, - 0, - 170, - 51, - 255, - 255, - 0, - 153, - 0, - 153, - 0, - 0, - 0, - 0, - 1, - 50, - 102, - 0, - 255, - 186, - 255, - 68, - 255, - 255, - 255, - 170, - 255, - 0, - 119, - 0, - 0, - 254, - 254, - 170, - 0, - 0, - 74, - 153, - 0, - 255, - 255, - 102, - 255, - 34, - 34, - 0, - 0, - 153, - 139, - 255, - 17, - 85, - 255, - 255, - 255, - 1, - 1, - 255, - 136, - 255, - 0, - 85, - 0, - 0, - 17, - 17, - 255, - 255, - 254, - 255, - 253, - 254, - 164, - 255, - 68, - 102, - 255, - 255, - 255, - 102, - 255, - 0, - 51, - 0, - 255, - 255, - 85, - 255, - 119, - 119, - 0, - 0, - 136, - 255, - 68, - 255, - 0, - 17, - 0, - 119, - 255, - 255, - 0, - 102, - 102, - 255, - 255, - 237, - 0, - 1, - 0, - 255, - 245, - 237, - 17, - 17, - 255, - 255, - 255, - 68, - 255, - 34, - 255, - 255, - 237, - 237, - 17, - 17, - 0, - 136, - 255, - 255, - 0, - 0, - 119, - 147, - 255, - 34, - 0, - 220, - 220, - 51, - 51, - 255, - 254, - 0, - 254, - 186, - 186, - 255, - 153, - 255, - 255, - 51, - 51, - 0, - 99, - 203, - 0, - 186, - 186, - 0, - 172, - 255, - 85, - 255, - 255, - 220, - 255, - 255, - 51, - 123, - 254, - 0, - 237, - 0, - 237, - 85, - 85, - 255, - 170, - 255, - 255, - 220, - 220, - 255, - 85, - 85, - 0, - 0, - 0, - 102, - 220, - 220, - 0, - 220, - 0, - 220, - 131, - 255, - 1, - 119, - 119, - 255, - 254, - 254, - 255, - 255, - 255, - 203, - 255, - 85, - 85, - 119, - 119, - 0, - 254, - 254, - 0, - 203, - 0, - 203, - 0, - 0, - 254, - 1, - 2, - 0, - 1, - 0, - 0, - 18, - 34, - 0, - 255, - 255, - 34, - 0, - 68, - 68, - 155, - 255, - 51, - 255, - 212, - 170, - 0, - 0, - 85, - 153, - 153, - 255, - 153, - 153, - 0, - 186, - 0, - 186, - 42, - 85, - 0, - 255, - 203, - 203, - 180, - 255, - 102, - 255, - 155, - 51, - 255, - 255, - 186, - 170, - 0, - 170, - 66, - 136, - 0, - 83, - 170, - 0, - 255, - 170, - 170, - 0, - 0, - 237, - 0, - 186, - 186, - 255, - 255, - 17, - 0, - 254, - 0, - 0, - 0, - 68, - 0, - 153, - 153, - 153, - 0, - 153, - 255, - 204, - 153, - 186, - 0, - 0, - 136, - 0, - 136, - 0, - 220, - 0, - 255, - 147, - 34, - 0, - 0, - 220, - 254, - 255, - 254, - 170, - 83, - 0, - 119, - 0, - 119, - 2, - 1, - 0, - 203, - 0, - 0, - 0, - 0, - 51, - 255, - 237, - 255, - 0, - 186, - 0, - 255, - 51, - 51, - 237, - 255, - 237, - 255, - 196, - 136, - 188, - 255, - 119, - 0, - 170, - 0, - 102, - 0, - 102, - 0, - 34, - 34, - 220, - 0, - 0, - 255, - 203, - 255, - 220, - 255, - 220, - 255, - 139, - 17, - 0, - 0, - 203, - 0, - 1, - 1, - 85, - 0, - 85, - 0, - 136, - 0, - 0, - 0, - 34, - 1, - 255, - 255, - 203, - 255, - 203, - 237, - 0, - 0, - 255, - 136, - 136, - 68, - 0, - 68, - 91, - 186, - 0, - 255, - 188, - 119, - 255, - 153, - 255, - 0, - 102, - 0, - 186, - 255, - 186, - 0, - 119, - 119, - 115, - 237, - 0, - 254, - 0, - 0, - 51, - 0, - 51, - 0, - 0, - 186, - 255, - 119, - 255, - 0, - 68, - 0, - 170, - 255, - 170, - 255, - 254, - 254, - 0, - 0, - 17, - 34, - 0, - 34, - 196, - 255, - 136, - 0, - 237, - 237, - 153, - 255, - 153, - 255, - 85, - 255, - 0, - 34, - 0, - 255, - 180, - 102, - 17, - 0, - 17, - 10, - 17, - 0, - 255, - 17, - 17, - 220, - 255, - 186, - 186, - 255, - 255, - 136, - 255, - 136, - 1, - 0, - 1, - 255, - 51, - 255, - ], - "pixelBitlength": 8, - "pos": 1523, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser interlaced-rgb-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 24, - "pos": 311, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser interlaced-rgb-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 48, - "pos": 591, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser interlaced-rgb-alpha-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 32, - "pos": 357, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser rgb-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 24, - "pos": 141, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser rgb-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 48, - "pos": 298, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser rgb-alpha-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 180, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser rgb-alpha-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 64, - "pos": 3431, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata browser transparent-black-grayscale-4bit.png 1`] = ` -Object { - "animation": null, - "bits": 4, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 4, - "pos": 425, - "text": Object {}, - "transparency": Object { - "grayscale": 0, - }, - "width": 32, -} -`; - -exports[`metadata browser transparent-white-grayscale-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 1309, - "text": Object {}, - "transparency": Object { - "grayscale": 255, - }, - "width": 32, -} -`; - -exports[`metadata browser transparent-white-palette-8bit.png 1`] = ` -Object { - "animation": null, - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 3, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [ - 255, - 255, - 255, - 128, - 86, - 86, - 181, - 181, - 184, - 168, - 66, - 66, - 159, - 159, - 159, - 177, - 32, - 32, - 139, - 21, - 21, - 157, - 157, - 157, - 27, - 27, - 89, - 155, - 155, - 155, - 0, - 0, - 132, - 153, - 153, - 153, - 143, - 167, - 143, - 151, - 151, - 151, - 149, - 149, - 149, - 147, - 147, - 147, - 41, - 41, - 86, - 145, - 145, - 145, - 0, - 0, - 155, - 143, - 143, - 143, - 139, - 149, - 139, - 46, - 46, - 167, - 141, - 141, - 141, - 128, - 0, - 0, - 139, - 139, - 139, - 185, - 0, - 0, - 137, - 137, - 137, - 12, - 12, - 213, - 120, - 117, - 117, - 135, - 135, - 135, - 0, - 0, - 178, - 133, - 133, - 133, - 165, - 0, - 0, - 222, - 0, - 0, - 129, - 129, - 129, - 127, - 127, - 127, - 0, - 0, - 158, - 125, - 125, - 125, - 0, - 0, - 201, - 123, - 123, - 123, - 121, - 121, - 121, - 55, - 55, - 86, - 119, - 119, - 119, - 117, - 117, - 117, - 115, - 115, - 115, - 72, - 169, - 72, - 142, - 0, - 0, - 2, - 2, - 100, - 0, - 0, - 98, - 86, - 137, - 86, - 40, - 40, - 124, - 83, - 139, - 83, - 137, - 137, - 143, - 103, - 103, - 103, - 101, - 101, - 101, - 93, - 109, - 93, - 19, - 229, - 19, - 134, - 38, - 38, - 111, - 45, - 45, - 68, - 145, - 68, - 97, - 97, - 97, - 59, - 157, - 59, - 68, - 137, - 68, - 61, - 147, - 61, - 0, - 0, - 164, - 0, - 243, - 0, - 0, - 241, - 0, - 89, - 89, - 89, - 87, - 87, - 87, - 85, - 85, - 85, - 83, - 83, - 83, - 52, - 133, - 52, - 81, - 81, - 81, - 36, - 151, - 36, - 79, - 79, - 79, - 58, - 58, - 65, - 16, - 16, - 186, - 178, - 15, - 15, - 0, - 199, - 0, - 0, - 197, - 0, - 252, - 252, - 252, - 0, - 195, - 0, - 4, - 4, - 151, - 0, - 193, - 0, - 45, - 119, - 45, - 250, - 250, - 250, - 0, - 191, - 0, - 0, - 0, - 104, - 0, - 189, - 0, - 218, - 212, - 212, - 16, - 16, - 123, - 9, - 173, - 9, - 248, - 248, - 248, - 0, - 185, - 0, - 0, - 183, - 0, - 156, - 156, - 161, - 246, - 246, - 246, - 12, - 161, - 12, - 0, - 179, - 0, - 0, - 177, - 0, - 16, - 145, - 16, - 0, - 171, - 0, - 242, - 242, - 242, - 0, - 169, - 0, - 0, - 167, - 0, - 238, - 238, - 238, - 236, - 236, - 236, - 0, - 151, - 0, - 234, - 234, - 234, - 0, - 0, - 107, - 0, - 141, - 0, - 0, - 139, - 0, - 0, - 137, - 0, - 0, - 135, - 0, - 49, - 49, - 49, - 25, - 25, - 42, - 7, - 7, - 64, - 18, - 18, - 174, - 9, - 9, - 238, - 211, - 214, - 211, - 204, - 204, - 204, - 147, - 0, - 0, - 163, - 42, - 42, - 198, - 198, - 198, - 196, - 196, - 196, - 204, - 0, - 0, - 211, - 10, - 10, - 129, - 107, - 107, - 120, - 62, - 62, - 3, - 3, - 109, - 0, - 0, - 159, - 10, - 10, - 86, - 70, - 70, - 72, - 65, - 65, - 77, - 115, - 93, - 93, - 81, - 7, - 7, - 168, - 168, - 168, - 237, - 237, - 239, - 160, - 160, - 160, - 158, - 158, - 158, - 156, - 156, - 156, - 0, - 0, - 185, - 154, - 154, - 154, - 178, - 0, - 0, - 152, - 152, - 152, - 235, - 0, - 0, - 150, - 150, - 150, - 158, - 0, - 0, - 148, - 148, - 148, - 19, - 19, - 28, - 146, - 146, - 146, - 144, - 144, - 144, - 142, - 142, - 142, - 0, - 0, - 145, - 138, - 138, - 138, - 136, - 136, - 136, - 118, - 162, - 118, - 133, - 136, - 133, - 134, - 134, - 134, - 132, - 132, - 132, - 120, - 15, - 15, - 130, - 130, - 130, - 126, - 130, - 126, - 126, - 126, - 126, - 124, - 124, - 124, - 122, - 122, - 122, - 74, - 192, - 74, - 118, - 118, - 118, - 116, - 116, - 116, - 114, - 114, - 114, - 112, - 112, - 112, - 152, - 0, - 0, - 110, - 110, - 110, - 106, - 112, - 106, - 122, - 102, - 102, - 106, - 106, - 106, - 132, - 0, - 0, - 68, - 162, - 68, - 75, - 150, - 75, - 97, - 100, - 97, - 98, - 98, - 98, - 0, - 244, - 0, - 56, - 152, - 56, - 92, - 92, - 92, - 90, - 90, - 90, - 0, - 230, - 0, - 2, - 2, - 93, - 66, - 120, - 66, - 86, - 86, - 86, - 0, - 0, - 240, - 46, - 148, - 46, - 71, - 104, - 71, - 49, - 49, - 96, - 0, - 216, - 0, - 82, - 82, - 82, - 80, - 80, - 80, - 0, - 206, - 0, - 33, - 152, - 33, - 20, - 20, - 109, - 0, - 200, - 0, - 76, - 76, - 76, - 253, - 253, - 253, - 0, - 198, - 0, - 0, - 0, - 157, - 111, - 107, - 107, - 234, - 14, - 14, - 72, - 72, - 72, - 0, - 188, - 0, - 52, - 102, - 52, - 2, - 2, - 245, - 83, - 83, - 96, - 0, - 176, - 0, - 0, - 174, - 0, - 183, - 0, - 0, - 0, - 164, - 0, - 239, - 239, - 239, - 0, - 162, - 0, - 143, - 79, - 79, - 149, - 52, - 52, - 0, - 152, - 0, - 0, - 150, - 0, - 0, - 146, - 0, - 231, - 231, - 231, - 0, - 140, - 0, - 227, - 227, - 227, - 0, - 128, - 0, - 146, - 6, - 6, - 1, - 1, - 111, - 100, - 86, - 89, - 0, - 0, - 100, - 78, - 78, - 107, - 207, - 207, - 207, - 221, - 221, - 224, - 0, - 0, - 123, - 201, - 201, - 201, - 22, - 22, - 65, - 33, - 33, - 89, - 87, - 87, - 89, - 68, - 68, - 120, - 191, - 191, - 191, - 235, - 221, - 221, - 45, - 45, - 84, - 10, - 10, - 96, - 0, - 0, - 255, - 191, - 125, - 125, - ], - "pixelBitlength": 8, - "pos": 1492, - "text": Object {}, - "transparency": Object { - "indexed": Array [ - 0, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - ], - }, - "width": 32, -} -`; - -exports[`metadata browser transparent-white-rgb-16bit.png 1`] = ` -Object { - "animation": null, - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 48, - "pos": 2037, - "text": Object {}, - "transparency": Object { - "rgb": Array [ - 255, - 255, - 255, - 255, - 255, - 255, - ], - }, - "width": 32, -} -`; - -exports[`metadata node animated.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 16, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 5255, - "text": Object {}, - "transparency": Object {}, - "width": 16, -} -`; - -exports[`metadata node black-white.png 1`] = ` -Object { - "bits": 1, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 1, - "pos": 160, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node grayscale-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 8, - "pos": 134, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node grayscale-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 163, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node grayscale-alpha-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 4, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 122, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node grayscale-alpha-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 4, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 2202, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node interlaced-grayscale-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 8, - "pos": 250, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node interlaced-pallete-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 3, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [ - 34, - 68, - 0, - 245, - 255, - 237, - 119, - 255, - 119, - 203, - 255, - 255, - 17, - 10, - 0, - 58, - 119, - 0, - 34, - 34, - 255, - 255, - 17, - 255, - 17, - 0, - 0, - 34, - 34, - 0, - 255, - 172, - 85, - 102, - 255, - 102, - 255, - 102, - 102, - 255, - 1, - 255, - 34, - 18, - 0, - 220, - 255, - 255, - 204, - 255, - 153, - 68, - 68, - 255, - 0, - 85, - 85, - 34, - 0, - 0, - 203, - 203, - 255, - 68, - 68, - 0, - 85, - 255, - 85, - 203, - 203, - 0, - 51, - 26, - 0, - 255, - 236, - 220, - 237, - 255, - 255, - 228, - 255, - 203, - 255, - 220, - 220, - 68, - 255, - 68, - 102, - 102, - 255, - 51, - 0, - 0, - 68, - 34, - 0, - 237, - 237, - 255, - 102, - 102, - 0, - 255, - 164, - 68, - 255, - 255, - 170, - 237, - 237, - 0, - 0, - 203, - 203, - 254, - 255, - 255, - 253, - 255, - 254, - 255, - 255, - 1, - 51, - 255, - 51, - 85, - 42, - 0, - 1, - 1, - 255, - 136, - 136, - 255, - 0, - 170, - 170, - 1, - 1, - 0, - 68, - 0, - 0, - 136, - 136, - 0, - 255, - 228, - 203, - 186, - 91, - 0, - 34, - 255, - 34, - 102, - 50, - 0, - 255, - 255, - 153, - 170, - 170, - 255, - 85, - 0, - 0, - 170, - 170, - 0, - 203, - 99, - 0, - 17, - 255, - 17, - 212, - 255, - 170, - 119, - 58, - 0, - 255, - 68, - 68, - 220, - 107, - 0, - 102, - 0, - 0, - 1, - 255, - 1, - 136, - 66, - 0, - 236, - 255, - 220, - 107, - 220, - 0, - 255, - 220, - 186, - 0, - 51, - 51, - 0, - 237, - 0, - 237, - 115, - 0, - 255, - 255, - 136, - 153, - 74, - 0, - 17, - 255, - 255, - 119, - 0, - 0, - 255, - 131, - 1, - 255, - 186, - 186, - 254, - 123, - 0, - 255, - 254, - 255, - 0, - 203, - 0, - 255, - 153, - 153, - 34, - 255, - 255, - 136, - 0, - 0, - 255, - 255, - 119, - 0, - 136, - 136, - 255, - 220, - 255, - 26, - 51, - 0, - 0, - 0, - 170, - 51, - 255, - 255, - 0, - 153, - 0, - 153, - 0, - 0, - 0, - 0, - 1, - 50, - 102, - 0, - 255, - 186, - 255, - 68, - 255, - 255, - 255, - 170, - 255, - 0, - 119, - 0, - 0, - 254, - 254, - 170, - 0, - 0, - 74, - 153, - 0, - 255, - 255, - 102, - 255, - 34, - 34, - 0, - 0, - 153, - 139, - 255, - 17, - 85, - 255, - 255, - 255, - 1, - 1, - 255, - 136, - 255, - 0, - 85, - 0, - 0, - 17, - 17, - 255, - 255, - 254, - 255, - 253, - 254, - 164, - 255, - 68, - 102, - 255, - 255, - 255, - 102, - 255, - 0, - 51, - 0, - 255, - 255, - 85, - 255, - 119, - 119, - 0, - 0, - 136, - 255, - 68, - 255, - 0, - 17, - 0, - 119, - 255, - 255, - 0, - 102, - 102, - 255, - 255, - 237, - 0, - 1, - 0, - 255, - 245, - 237, - 17, - 17, - 255, - 255, - 255, - 68, - 255, - 34, - 255, - 255, - 237, - 237, - 17, - 17, - 0, - 136, - 255, - 255, - 0, - 0, - 119, - 147, - 255, - 34, - 0, - 220, - 220, - 51, - 51, - 255, - 254, - 0, - 254, - 186, - 186, - 255, - 153, - 255, - 255, - 51, - 51, - 0, - 99, - 203, - 0, - 186, - 186, - 0, - 172, - 255, - 85, - 255, - 255, - 220, - 255, - 255, - 51, - 123, - 254, - 0, - 237, - 0, - 237, - 85, - 85, - 255, - 170, - 255, - 255, - 220, - 220, - 255, - 85, - 85, - 0, - 0, - 0, - 102, - 220, - 220, - 0, - 220, - 0, - 220, - 131, - 255, - 1, - 119, - 119, - 255, - 254, - 254, - 255, - 255, - 255, - 203, - 255, - 85, - 85, - 119, - 119, - 0, - 254, - 254, - 0, - 203, - 0, - 203, - 0, - 0, - 254, - 1, - 2, - 0, - 1, - 0, - 0, - 18, - 34, - 0, - 255, - 255, - 34, - 0, - 68, - 68, - 155, - 255, - 51, - 255, - 212, - 170, - 0, - 0, - 85, - 153, - 153, - 255, - 153, - 153, - 0, - 186, - 0, - 186, - 42, - 85, - 0, - 255, - 203, - 203, - 180, - 255, - 102, - 255, - 155, - 51, - 255, - 255, - 186, - 170, - 0, - 170, - 66, - 136, - 0, - 83, - 170, - 0, - 255, - 170, - 170, - 0, - 0, - 237, - 0, - 186, - 186, - 255, - 255, - 17, - 0, - 254, - 0, - 0, - 0, - 68, - 0, - 153, - 153, - 153, - 0, - 153, - 255, - 204, - 153, - 186, - 0, - 0, - 136, - 0, - 136, - 0, - 220, - 0, - 255, - 147, - 34, - 0, - 0, - 220, - 254, - 255, - 254, - 170, - 83, - 0, - 119, - 0, - 119, - 2, - 1, - 0, - 203, - 0, - 0, - 0, - 0, - 51, - 255, - 237, - 255, - 0, - 186, - 0, - 255, - 51, - 51, - 237, - 255, - 237, - 255, - 196, - 136, - 188, - 255, - 119, - 0, - 170, - 0, - 102, - 0, - 102, - 0, - 34, - 34, - 220, - 0, - 0, - 255, - 203, - 255, - 220, - 255, - 220, - 255, - 139, - 17, - 0, - 0, - 203, - 0, - 1, - 1, - 85, - 0, - 85, - 0, - 136, - 0, - 0, - 0, - 34, - 1, - 255, - 255, - 203, - 255, - 203, - 237, - 0, - 0, - 255, - 136, - 136, - 68, - 0, - 68, - 91, - 186, - 0, - 255, - 188, - 119, - 255, - 153, - 255, - 0, - 102, - 0, - 186, - 255, - 186, - 0, - 119, - 119, - 115, - 237, - 0, - 254, - 0, - 0, - 51, - 0, - 51, - 0, - 0, - 186, - 255, - 119, - 255, - 0, - 68, - 0, - 170, - 255, - 170, - 255, - 254, - 254, - 0, - 0, - 17, - 34, - 0, - 34, - 196, - 255, - 136, - 0, - 237, - 237, - 153, - 255, - 153, - 255, - 85, - 255, - 0, - 34, - 0, - 255, - 180, - 102, - 17, - 0, - 17, - 10, - 17, - 0, - 255, - 17, - 17, - 220, - 255, - 186, - 186, - 255, - 255, - 136, - 255, - 136, - 1, - 0, - 1, - 255, - 51, - 255, - ], - "pixelBitlength": 8, - "pos": 1523, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node interlaced-rgb-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 24, - "pos": 311, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node interlaced-rgb-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 48, - "pos": 591, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node interlaced-rgb-alpha-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 1, - "palette": Array [], - "pixelBitlength": 32, - "pos": 357, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node rgb-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 24, - "pos": 141, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node rgb-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 48, - "pos": 298, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node rgb-alpha-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 32, - "pos": 180, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node rgb-alpha-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 6, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": true, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 64, - "pos": 3431, - "text": Object {}, - "transparency": Object {}, - "width": 32, -} -`; - -exports[`metadata node transparent-black-grayscale-4bit.png 1`] = ` -Object { - "bits": 4, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 4, - "pos": 425, - "text": Object {}, - "transparency": Object { - "grayscale": 0, - }, - "width": 32, -} -`; - -exports[`metadata node transparent-white-grayscale-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceGray", - "colorType": 0, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 16, - "pos": 1309, - "text": Object {}, - "transparency": Object { - "grayscale": 255, - }, - "width": 32, -} -`; - -exports[`metadata node transparent-white-palette-8bit.png 1`] = ` -Object { - "bits": 8, - "colorSpace": "DeviceGray", - "colorType": 3, - "colors": 1, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [ - 255, - 255, - 255, - 128, - 86, - 86, - 181, - 181, - 184, - 168, - 66, - 66, - 159, - 159, - 159, - 177, - 32, - 32, - 139, - 21, - 21, - 157, - 157, - 157, - 27, - 27, - 89, - 155, - 155, - 155, - 0, - 0, - 132, - 153, - 153, - 153, - 143, - 167, - 143, - 151, - 151, - 151, - 149, - 149, - 149, - 147, - 147, - 147, - 41, - 41, - 86, - 145, - 145, - 145, - 0, - 0, - 155, - 143, - 143, - 143, - 139, - 149, - 139, - 46, - 46, - 167, - 141, - 141, - 141, - 128, - 0, - 0, - 139, - 139, - 139, - 185, - 0, - 0, - 137, - 137, - 137, - 12, - 12, - 213, - 120, - 117, - 117, - 135, - 135, - 135, - 0, - 0, - 178, - 133, - 133, - 133, - 165, - 0, - 0, - 222, - 0, - 0, - 129, - 129, - 129, - 127, - 127, - 127, - 0, - 0, - 158, - 125, - 125, - 125, - 0, - 0, - 201, - 123, - 123, - 123, - 121, - 121, - 121, - 55, - 55, - 86, - 119, - 119, - 119, - 117, - 117, - 117, - 115, - 115, - 115, - 72, - 169, - 72, - 142, - 0, - 0, - 2, - 2, - 100, - 0, - 0, - 98, - 86, - 137, - 86, - 40, - 40, - 124, - 83, - 139, - 83, - 137, - 137, - 143, - 103, - 103, - 103, - 101, - 101, - 101, - 93, - 109, - 93, - 19, - 229, - 19, - 134, - 38, - 38, - 111, - 45, - 45, - 68, - 145, - 68, - 97, - 97, - 97, - 59, - 157, - 59, - 68, - 137, - 68, - 61, - 147, - 61, - 0, - 0, - 164, - 0, - 243, - 0, - 0, - 241, - 0, - 89, - 89, - 89, - 87, - 87, - 87, - 85, - 85, - 85, - 83, - 83, - 83, - 52, - 133, - 52, - 81, - 81, - 81, - 36, - 151, - 36, - 79, - 79, - 79, - 58, - 58, - 65, - 16, - 16, - 186, - 178, - 15, - 15, - 0, - 199, - 0, - 0, - 197, - 0, - 252, - 252, - 252, - 0, - 195, - 0, - 4, - 4, - 151, - 0, - 193, - 0, - 45, - 119, - 45, - 250, - 250, - 250, - 0, - 191, - 0, - 0, - 0, - 104, - 0, - 189, - 0, - 218, - 212, - 212, - 16, - 16, - 123, - 9, - 173, - 9, - 248, - 248, - 248, - 0, - 185, - 0, - 0, - 183, - 0, - 156, - 156, - 161, - 246, - 246, - 246, - 12, - 161, - 12, - 0, - 179, - 0, - 0, - 177, - 0, - 16, - 145, - 16, - 0, - 171, - 0, - 242, - 242, - 242, - 0, - 169, - 0, - 0, - 167, - 0, - 238, - 238, - 238, - 236, - 236, - 236, - 0, - 151, - 0, - 234, - 234, - 234, - 0, - 0, - 107, - 0, - 141, - 0, - 0, - 139, - 0, - 0, - 137, - 0, - 0, - 135, - 0, - 49, - 49, - 49, - 25, - 25, - 42, - 7, - 7, - 64, - 18, - 18, - 174, - 9, - 9, - 238, - 211, - 214, - 211, - 204, - 204, - 204, - 147, - 0, - 0, - 163, - 42, - 42, - 198, - 198, - 198, - 196, - 196, - 196, - 204, - 0, - 0, - 211, - 10, - 10, - 129, - 107, - 107, - 120, - 62, - 62, - 3, - 3, - 109, - 0, - 0, - 159, - 10, - 10, - 86, - 70, - 70, - 72, - 65, - 65, - 77, - 115, - 93, - 93, - 81, - 7, - 7, - 168, - 168, - 168, - 237, - 237, - 239, - 160, - 160, - 160, - 158, - 158, - 158, - 156, - 156, - 156, - 0, - 0, - 185, - 154, - 154, - 154, - 178, - 0, - 0, - 152, - 152, - 152, - 235, - 0, - 0, - 150, - 150, - 150, - 158, - 0, - 0, - 148, - 148, - 148, - 19, - 19, - 28, - 146, - 146, - 146, - 144, - 144, - 144, - 142, - 142, - 142, - 0, - 0, - 145, - 138, - 138, - 138, - 136, - 136, - 136, - 118, - 162, - 118, - 133, - 136, - 133, - 134, - 134, - 134, - 132, - 132, - 132, - 120, - 15, - 15, - 130, - 130, - 130, - 126, - 130, - 126, - 126, - 126, - 126, - 124, - 124, - 124, - 122, - 122, - 122, - 74, - 192, - 74, - 118, - 118, - 118, - 116, - 116, - 116, - 114, - 114, - 114, - 112, - 112, - 112, - 152, - 0, - 0, - 110, - 110, - 110, - 106, - 112, - 106, - 122, - 102, - 102, - 106, - 106, - 106, - 132, - 0, - 0, - 68, - 162, - 68, - 75, - 150, - 75, - 97, - 100, - 97, - 98, - 98, - 98, - 0, - 244, - 0, - 56, - 152, - 56, - 92, - 92, - 92, - 90, - 90, - 90, - 0, - 230, - 0, - 2, - 2, - 93, - 66, - 120, - 66, - 86, - 86, - 86, - 0, - 0, - 240, - 46, - 148, - 46, - 71, - 104, - 71, - 49, - 49, - 96, - 0, - 216, - 0, - 82, - 82, - 82, - 80, - 80, - 80, - 0, - 206, - 0, - 33, - 152, - 33, - 20, - 20, - 109, - 0, - 200, - 0, - 76, - 76, - 76, - 253, - 253, - 253, - 0, - 198, - 0, - 0, - 0, - 157, - 111, - 107, - 107, - 234, - 14, - 14, - 72, - 72, - 72, - 0, - 188, - 0, - 52, - 102, - 52, - 2, - 2, - 245, - 83, - 83, - 96, - 0, - 176, - 0, - 0, - 174, - 0, - 183, - 0, - 0, - 0, - 164, - 0, - 239, - 239, - 239, - 0, - 162, - 0, - 143, - 79, - 79, - 149, - 52, - 52, - 0, - 152, - 0, - 0, - 150, - 0, - 0, - 146, - 0, - 231, - 231, - 231, - 0, - 140, - 0, - 227, - 227, - 227, - 0, - 128, - 0, - 146, - 6, - 6, - 1, - 1, - 111, - 100, - 86, - 89, - 0, - 0, - 100, - 78, - 78, - 107, - 207, - 207, - 207, - 221, - 221, - 224, - 0, - 0, - 123, - 201, - 201, - 201, - 22, - 22, - 65, - 33, - 33, - 89, - 87, - 87, - 89, - 68, - 68, - 120, - 191, - 191, - 191, - 235, - 221, - 221, - 45, - 45, - 84, - 10, - 10, - 96, - 0, - 0, - 255, - 191, - 125, - 125, - ], - "pixelBitlength": 8, - "pos": 1492, - "text": Object {}, - "transparency": Object { - "indexed": Array [ - 0, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - ], - }, - "width": 32, -} -`; - -exports[`metadata node transparent-white-rgb-16bit.png 1`] = ` -Object { - "bits": 16, - "colorSpace": "DeviceRGB", - "colorType": 2, - "colors": 3, - "compressionMethod": 0, - "filterMethod": 0, - "hasAlphaChannel": false, - "height": 32, - "interlaceMethod": 0, - "palette": Array [], - "pixelBitlength": 48, - "pos": 2037, - "text": Object {}, - "transparency": Object { - "rgb": Array [ - 255, - 255, - 255, - 255, - 255, - 255, - ], - }, - "width": 32, -} -`; diff --git a/skills/flight-finder/node_modules/png-js/test/__snapshots__/pixels.spec.js.snap b/skills/flight-finder/node_modules/png-js/test/__snapshots__/pixels.spec.js.snap deleted file mode 100644 index da5e9fd..0000000 --- a/skills/flight-finder/node_modules/png-js/test/__snapshots__/pixels.spec.js.snap +++ /dev/null @@ -1,113141 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`pixels browser animated.png 1`] = `Uint8Array []`; - -exports[`pixels browser black-white.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 254, - 255, - 255, - 255, - 252, - 255, - 255, - 255, - 248, - 255, - 255, - 255, - 240, - 243, - 243, - 255, - 224, - 243, - 243, - 255, - 192, - 243, - 243, - 255, - 128, - 243, - 51, - 255, - 0, - 243, - 51, - 254, - 0, - 243, - 51, - 252, - 0, - 248, - 7, - 248, - 0, - 248, - 7, - 240, - 0, - 252, - 207, - 224, - 0, - 252, - 207, - 192, - 0, - 255, - 255, - 128, - 0, - 255, - 255, - 0, - 0, - 255, - 254, - 0, - 0, - 255, - 252, - 0, - 0, - 255, - 248, - 15, - 224, - 255, - 240, - 15, - 224, - 255, - 224, - 12, - 48, - 255, - 192, - 12, - 48, - 255, - 128, - 15, - 224, - 255, - 0, - 15, - 224, - 254, - 0, - 12, - 48, - 252, - 0, - 12, - 48, - 248, - 0, - 15, - 224, - 240, - 0, - 15, - 224, - 224, - 0, - 0, - 0, - 192, - 0, - 0, - 0, - 128, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -] -`; - -exports[`pixels browser grayscale-8bit.png 1`] = ` -Uint8Array [ - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 0, - 1, - 2, - 3, -] -`; - -exports[`pixels browser grayscale-16bit.png 1`] = ` -Uint8Array [ - 0, - 0, - 9, - 0, - 18, - 0, - 27, - 0, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 2, - 0, - 11, - 0, - 20, - 0, - 29, - 0, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 4, - 0, - 13, - 0, - 22, - 0, - 31, - 0, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 6, - 0, - 15, - 0, - 24, - 0, - 33, - 0, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 8, - 0, - 17, - 0, - 26, - 0, - 35, - 0, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 10, - 0, - 19, - 0, - 28, - 0, - 37, - 0, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 12, - 0, - 21, - 0, - 30, - 0, - 39, - 0, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 14, - 0, - 23, - 0, - 32, - 0, - 41, - 0, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 16, - 0, - 25, - 0, - 34, - 0, - 43, - 0, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 18, - 0, - 27, - 0, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 20, - 0, - 29, - 0, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 22, - 0, - 31, - 0, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 24, - 0, - 33, - 0, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 26, - 0, - 35, - 0, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 28, - 0, - 37, - 0, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 129, - 255, - 102, - 255, - 30, - 0, - 39, - 0, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 123, - 255, - 96, - 255, - 32, - 0, - 41, - 0, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 117, - 255, - 90, - 255, - 34, - 0, - 43, - 0, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 111, - 255, - 84, - 255, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 105, - 255, - 78, - 255, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 99, - 255, - 72, - 255, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 93, - 255, - 66, - 255, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 87, - 255, - 60, - 255, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 81, - 255, - 54, - 255, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 129, - 255, - 102, - 255, - 75, - 255, - 48, - 255, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 123, - 255, - 96, - 255, - 69, - 255, - 42, - 255, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 117, - 255, - 90, - 255, - 63, - 255, - 36, - 255, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 111, - 255, - 84, - 255, - 57, - 255, - 30, - 255, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 105, - 255, - 78, - 255, - 51, - 255, - 24, - 255, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 99, - 255, - 72, - 255, - 45, - 255, - 18, - 255, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 93, - 255, - 66, - 255, - 39, - 255, - 12, - 255, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 87, - 255, - 60, - 255, - 33, - 255, - 6, - 255, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 81, - 255, - 54, - 255, - 27, - 255, - 0, - 255, -] -`; - -exports[`pixels browser grayscale-alpha-8bit.png 1`] = ` -Uint8Array [ - 255, - 0, - 255, - 8, - 255, - 16, - 255, - 24, - 255, - 32, - 255, - 41, - 255, - 49, - 255, - 57, - 255, - 65, - 255, - 74, - 255, - 82, - 255, - 90, - 255, - 98, - 255, - 106, - 255, - 115, - 255, - 123, - 255, - 131, - 255, - 139, - 255, - 148, - 255, - 156, - 255, - 164, - 255, - 172, - 255, - 180, - 255, - 189, - 255, - 197, - 255, - 205, - 255, - 213, - 255, - 222, - 255, - 230, - 255, - 238, - 255, - 246, - 255, - 255, - 246, - 0, - 246, - 8, - 246, - 16, - 246, - 24, - 246, - 32, - 246, - 41, - 246, - 49, - 246, - 57, - 246, - 65, - 246, - 74, - 246, - 82, - 246, - 90, - 246, - 98, - 246, - 106, - 246, - 115, - 246, - 123, - 246, - 131, - 246, - 139, - 246, - 148, - 246, - 156, - 246, - 164, - 246, - 172, - 246, - 180, - 246, - 189, - 246, - 197, - 246, - 205, - 246, - 213, - 246, - 222, - 246, - 230, - 246, - 238, - 246, - 246, - 246, - 255, - 238, - 0, - 238, - 8, - 238, - 16, - 238, - 24, - 238, - 32, - 238, - 41, - 238, - 49, - 238, - 57, - 238, - 65, - 238, - 74, - 238, - 82, - 238, - 90, - 238, - 98, - 238, - 106, - 238, - 115, - 238, - 123, - 238, - 131, - 238, - 139, - 238, - 148, - 238, - 156, - 238, - 164, - 238, - 172, - 238, - 180, - 238, - 189, - 238, - 197, - 238, - 205, - 238, - 213, - 238, - 222, - 238, - 230, - 238, - 238, - 238, - 246, - 238, - 255, - 230, - 0, - 230, - 8, - 230, - 16, - 230, - 24, - 230, - 32, - 230, - 41, - 230, - 49, - 230, - 57, - 230, - 65, - 230, - 74, - 230, - 82, - 230, - 90, - 230, - 98, - 230, - 106, - 230, - 115, - 230, - 123, - 230, - 131, - 230, - 139, - 230, - 148, - 230, - 156, - 230, - 164, - 230, - 172, - 230, - 180, - 230, - 189, - 230, - 197, - 230, - 205, - 230, - 213, - 230, - 222, - 230, - 230, - 230, - 238, - 230, - 246, - 230, - 255, - 222, - 0, - 222, - 8, - 222, - 16, - 222, - 24, - 222, - 32, - 222, - 41, - 222, - 49, - 222, - 57, - 222, - 65, - 222, - 74, - 222, - 82, - 222, - 90, - 222, - 98, - 222, - 106, - 222, - 115, - 222, - 123, - 222, - 131, - 222, - 139, - 222, - 148, - 222, - 156, - 222, - 164, - 222, - 172, - 222, - 180, - 222, - 189, - 222, - 197, - 222, - 205, - 222, - 213, - 222, - 222, - 222, - 230, - 222, - 238, - 222, - 246, - 222, - 255, - 213, - 0, - 213, - 8, - 213, - 16, - 213, - 24, - 213, - 32, - 213, - 41, - 213, - 49, - 213, - 57, - 213, - 65, - 213, - 74, - 213, - 82, - 213, - 90, - 213, - 98, - 213, - 106, - 213, - 115, - 213, - 123, - 213, - 131, - 213, - 139, - 213, - 148, - 213, - 156, - 213, - 164, - 213, - 172, - 213, - 180, - 213, - 189, - 213, - 197, - 213, - 205, - 213, - 213, - 213, - 222, - 213, - 230, - 213, - 238, - 213, - 246, - 213, - 255, - 205, - 0, - 205, - 8, - 205, - 16, - 205, - 24, - 205, - 32, - 205, - 41, - 205, - 49, - 205, - 57, - 205, - 65, - 205, - 74, - 205, - 82, - 205, - 90, - 205, - 98, - 205, - 106, - 205, - 115, - 205, - 123, - 205, - 131, - 205, - 139, - 205, - 148, - 205, - 156, - 205, - 164, - 205, - 172, - 205, - 180, - 205, - 189, - 205, - 197, - 205, - 205, - 205, - 213, - 205, - 222, - 205, - 230, - 205, - 238, - 205, - 246, - 205, - 255, - 197, - 0, - 197, - 8, - 197, - 16, - 197, - 24, - 197, - 32, - 197, - 41, - 197, - 49, - 197, - 57, - 197, - 65, - 197, - 74, - 197, - 82, - 197, - 90, - 197, - 98, - 197, - 106, - 197, - 115, - 197, - 123, - 197, - 131, - 197, - 139, - 197, - 148, - 197, - 156, - 197, - 164, - 197, - 172, - 197, - 180, - 197, - 189, - 197, - 197, - 197, - 205, - 197, - 213, - 197, - 222, - 197, - 230, - 197, - 238, - 197, - 246, - 197, - 255, - 189, - 0, - 189, - 8, - 189, - 16, - 189, - 24, - 189, - 32, - 189, - 41, - 189, - 49, - 189, - 57, - 189, - 65, - 189, - 74, - 189, - 82, - 189, - 90, - 189, - 98, - 189, - 106, - 189, - 115, - 189, - 123, - 189, - 131, - 189, - 139, - 189, - 148, - 189, - 156, - 189, - 164, - 189, - 172, - 189, - 180, - 189, - 189, - 189, - 197, - 189, - 205, - 189, - 213, - 189, - 222, - 189, - 230, - 189, - 238, - 189, - 246, - 189, - 255, - 180, - 0, - 180, - 8, - 180, - 16, - 180, - 24, - 180, - 32, - 180, - 41, - 180, - 49, - 180, - 57, - 180, - 65, - 180, - 74, - 180, - 82, - 180, - 90, - 180, - 98, - 180, - 106, - 180, - 115, - 180, - 123, - 180, - 131, - 180, - 139, - 180, - 148, - 180, - 156, - 180, - 164, - 180, - 172, - 180, - 180, - 180, - 189, - 180, - 197, - 180, - 205, - 180, - 213, - 180, - 222, - 180, - 230, - 180, - 238, - 180, - 246, - 180, - 255, - 172, - 0, - 172, - 8, - 172, - 16, - 172, - 24, - 172, - 32, - 172, - 41, - 172, - 49, - 172, - 57, - 172, - 65, - 172, - 74, - 172, - 82, - 172, - 90, - 172, - 98, - 172, - 106, - 172, - 115, - 172, - 123, - 172, - 131, - 172, - 139, - 172, - 148, - 172, - 156, - 172, - 164, - 172, - 172, - 172, - 180, - 172, - 189, - 172, - 197, - 172, - 205, - 172, - 213, - 172, - 222, - 172, - 230, - 172, - 238, - 172, - 246, - 172, - 255, - 164, - 0, - 164, - 8, - 164, - 16, - 164, - 24, - 164, - 32, - 164, - 41, - 164, - 49, - 164, - 57, - 164, - 65, - 164, - 74, - 164, - 82, - 164, - 90, - 164, - 98, - 164, - 106, - 164, - 115, - 164, - 123, - 164, - 131, - 164, - 139, - 164, - 148, - 164, - 156, - 164, - 164, - 164, - 172, - 164, - 180, - 164, - 189, - 164, - 197, - 164, - 205, - 164, - 213, - 164, - 222, - 164, - 230, - 164, - 238, - 164, - 246, - 164, - 255, - 156, - 0, - 156, - 8, - 156, - 16, - 156, - 24, - 156, - 32, - 156, - 41, - 156, - 49, - 156, - 57, - 156, - 65, - 156, - 74, - 156, - 82, - 156, - 90, - 156, - 98, - 156, - 106, - 156, - 115, - 156, - 123, - 156, - 131, - 156, - 139, - 156, - 148, - 156, - 156, - 156, - 164, - 156, - 172, - 156, - 180, - 156, - 189, - 156, - 197, - 156, - 205, - 156, - 213, - 156, - 222, - 156, - 230, - 156, - 238, - 156, - 246, - 156, - 255, - 148, - 0, - 148, - 8, - 148, - 16, - 148, - 24, - 148, - 32, - 148, - 41, - 148, - 49, - 148, - 57, - 148, - 65, - 148, - 74, - 148, - 82, - 148, - 90, - 148, - 98, - 148, - 106, - 148, - 115, - 148, - 123, - 148, - 131, - 148, - 139, - 148, - 148, - 148, - 156, - 148, - 164, - 148, - 172, - 148, - 180, - 148, - 189, - 148, - 197, - 148, - 205, - 148, - 213, - 148, - 222, - 148, - 230, - 148, - 238, - 148, - 246, - 148, - 255, - 139, - 0, - 139, - 8, - 139, - 16, - 139, - 24, - 139, - 32, - 139, - 41, - 139, - 49, - 139, - 57, - 139, - 65, - 139, - 74, - 139, - 82, - 139, - 90, - 139, - 98, - 139, - 106, - 139, - 115, - 139, - 123, - 139, - 131, - 139, - 139, - 139, - 148, - 139, - 156, - 139, - 164, - 139, - 172, - 139, - 180, - 139, - 189, - 139, - 197, - 139, - 205, - 139, - 213, - 139, - 222, - 139, - 230, - 139, - 238, - 139, - 246, - 139, - 255, - 131, - 0, - 131, - 8, - 131, - 16, - 131, - 24, - 131, - 32, - 131, - 41, - 131, - 49, - 131, - 57, - 131, - 65, - 131, - 74, - 131, - 82, - 131, - 90, - 131, - 98, - 131, - 106, - 131, - 115, - 131, - 123, - 131, - 131, - 131, - 139, - 131, - 148, - 131, - 156, - 131, - 164, - 131, - 172, - 131, - 180, - 131, - 189, - 131, - 197, - 131, - 205, - 131, - 213, - 131, - 222, - 131, - 230, - 131, - 238, - 131, - 246, - 131, - 255, - 123, - 0, - 123, - 8, - 123, - 16, - 123, - 24, - 123, - 32, - 123, - 41, - 123, - 49, - 123, - 57, - 123, - 65, - 123, - 74, - 123, - 82, - 123, - 90, - 123, - 98, - 123, - 106, - 123, - 115, - 123, - 123, - 123, - 131, - 123, - 139, - 123, - 148, - 123, - 156, - 123, - 164, - 123, - 172, - 123, - 180, - 123, - 189, - 123, - 197, - 123, - 205, - 123, - 213, - 123, - 222, - 123, - 230, - 123, - 238, - 123, - 246, - 123, - 255, - 115, - 0, - 115, - 8, - 115, - 16, - 115, - 24, - 115, - 32, - 115, - 41, - 115, - 49, - 115, - 57, - 115, - 65, - 115, - 74, - 115, - 82, - 115, - 90, - 115, - 98, - 115, - 106, - 115, - 115, - 115, - 123, - 115, - 131, - 115, - 139, - 115, - 148, - 115, - 156, - 115, - 164, - 115, - 172, - 115, - 180, - 115, - 189, - 115, - 197, - 115, - 205, - 115, - 213, - 115, - 222, - 115, - 230, - 115, - 238, - 115, - 246, - 115, - 255, - 106, - 0, - 106, - 8, - 106, - 16, - 106, - 24, - 106, - 32, - 106, - 41, - 106, - 49, - 106, - 57, - 106, - 65, - 106, - 74, - 106, - 82, - 106, - 90, - 106, - 98, - 106, - 106, - 106, - 115, - 106, - 123, - 106, - 131, - 106, - 139, - 106, - 148, - 106, - 156, - 106, - 164, - 106, - 172, - 106, - 180, - 106, - 189, - 106, - 197, - 106, - 205, - 106, - 213, - 106, - 222, - 106, - 230, - 106, - 238, - 106, - 246, - 106, - 255, - 98, - 0, - 98, - 8, - 98, - 16, - 98, - 24, - 98, - 32, - 98, - 41, - 98, - 49, - 98, - 57, - 98, - 65, - 98, - 74, - 98, - 82, - 98, - 90, - 98, - 98, - 98, - 106, - 98, - 115, - 98, - 123, - 98, - 131, - 98, - 139, - 98, - 148, - 98, - 156, - 98, - 164, - 98, - 172, - 98, - 180, - 98, - 189, - 98, - 197, - 98, - 205, - 98, - 213, - 98, - 222, - 98, - 230, - 98, - 238, - 98, - 246, - 98, - 255, - 90, - 0, - 90, - 8, - 90, - 16, - 90, - 24, - 90, - 32, - 90, - 41, - 90, - 49, - 90, - 57, - 90, - 65, - 90, - 74, - 90, - 82, - 90, - 90, - 90, - 98, - 90, - 106, - 90, - 115, - 90, - 123, - 90, - 131, - 90, - 139, - 90, - 148, - 90, - 156, - 90, - 164, - 90, - 172, - 90, - 180, - 90, - 189, - 90, - 197, - 90, - 205, - 90, - 213, - 90, - 222, - 90, - 230, - 90, - 238, - 90, - 246, - 90, - 255, - 82, - 0, - 82, - 8, - 82, - 16, - 82, - 24, - 82, - 32, - 82, - 41, - 82, - 49, - 82, - 57, - 82, - 65, - 82, - 74, - 82, - 82, - 82, - 90, - 82, - 98, - 82, - 106, - 82, - 115, - 82, - 123, - 82, - 131, - 82, - 139, - 82, - 148, - 82, - 156, - 82, - 164, - 82, - 172, - 82, - 180, - 82, - 189, - 82, - 197, - 82, - 205, - 82, - 213, - 82, - 222, - 82, - 230, - 82, - 238, - 82, - 246, - 82, - 255, - 74, - 0, - 74, - 8, - 74, - 16, - 74, - 24, - 74, - 32, - 74, - 41, - 74, - 49, - 74, - 57, - 74, - 65, - 74, - 74, - 74, - 82, - 74, - 90, - 74, - 98, - 74, - 106, - 74, - 115, - 74, - 123, - 74, - 131, - 74, - 139, - 74, - 148, - 74, - 156, - 74, - 164, - 74, - 172, - 74, - 180, - 74, - 189, - 74, - 197, - 74, - 205, - 74, - 213, - 74, - 222, - 74, - 230, - 74, - 238, - 74, - 246, - 74, - 255, - 65, - 0, - 65, - 8, - 65, - 16, - 65, - 24, - 65, - 32, - 65, - 41, - 65, - 49, - 65, - 57, - 65, - 65, - 65, - 74, - 65, - 82, - 65, - 90, - 65, - 98, - 65, - 106, - 65, - 115, - 65, - 123, - 65, - 131, - 65, - 139, - 65, - 148, - 65, - 156, - 65, - 164, - 65, - 172, - 65, - 180, - 65, - 189, - 65, - 197, - 65, - 205, - 65, - 213, - 65, - 222, - 65, - 230, - 65, - 238, - 65, - 246, - 65, - 255, - 57, - 0, - 57, - 8, - 57, - 16, - 57, - 24, - 57, - 32, - 57, - 41, - 57, - 49, - 57, - 57, - 57, - 65, - 57, - 74, - 57, - 82, - 57, - 90, - 57, - 98, - 57, - 106, - 57, - 115, - 57, - 123, - 57, - 131, - 57, - 139, - 57, - 148, - 57, - 156, - 57, - 164, - 57, - 172, - 57, - 180, - 57, - 189, - 57, - 197, - 57, - 205, - 57, - 213, - 57, - 222, - 57, - 230, - 57, - 238, - 57, - 246, - 57, - 255, - 49, - 0, - 49, - 8, - 49, - 16, - 49, - 24, - 49, - 32, - 49, - 41, - 49, - 49, - 49, - 57, - 49, - 65, - 49, - 74, - 49, - 82, - 49, - 90, - 49, - 98, - 49, - 106, - 49, - 115, - 49, - 123, - 49, - 131, - 49, - 139, - 49, - 148, - 49, - 156, - 49, - 164, - 49, - 172, - 49, - 180, - 49, - 189, - 49, - 197, - 49, - 205, - 49, - 213, - 49, - 222, - 49, - 230, - 49, - 238, - 49, - 246, - 49, - 255, - 41, - 0, - 41, - 8, - 41, - 16, - 41, - 24, - 41, - 32, - 41, - 41, - 41, - 49, - 41, - 57, - 41, - 65, - 41, - 74, - 41, - 82, - 41, - 90, - 41, - 98, - 41, - 106, - 41, - 115, - 41, - 123, - 41, - 131, - 41, - 139, - 41, - 148, - 41, - 156, - 41, - 164, - 41, - 172, - 41, - 180, - 41, - 189, - 41, - 197, - 41, - 205, - 41, - 213, - 41, - 222, - 41, - 230, - 41, - 238, - 41, - 246, - 41, - 255, - 32, - 0, - 32, - 8, - 32, - 16, - 32, - 24, - 32, - 32, - 32, - 41, - 32, - 49, - 32, - 57, - 32, - 65, - 32, - 74, - 32, - 82, - 32, - 90, - 32, - 98, - 32, - 106, - 32, - 115, - 32, - 123, - 32, - 131, - 32, - 139, - 32, - 148, - 32, - 156, - 32, - 164, - 32, - 172, - 32, - 180, - 32, - 189, - 32, - 197, - 32, - 205, - 32, - 213, - 32, - 222, - 32, - 230, - 32, - 238, - 32, - 246, - 32, - 255, - 24, - 0, - 24, - 8, - 24, - 16, - 24, - 24, - 24, - 32, - 24, - 41, - 24, - 49, - 24, - 57, - 24, - 65, - 24, - 74, - 24, - 82, - 24, - 90, - 24, - 98, - 24, - 106, - 24, - 115, - 24, - 123, - 24, - 131, - 24, - 139, - 24, - 148, - 24, - 156, - 24, - 164, - 24, - 172, - 24, - 180, - 24, - 189, - 24, - 197, - 24, - 205, - 24, - 213, - 24, - 222, - 24, - 230, - 24, - 238, - 24, - 246, - 24, - 255, - 16, - 0, - 16, - 8, - 16, - 16, - 16, - 24, - 16, - 32, - 16, - 41, - 16, - 49, - 16, - 57, - 16, - 65, - 16, - 74, - 16, - 82, - 16, - 90, - 16, - 98, - 16, - 106, - 16, - 115, - 16, - 123, - 16, - 131, - 16, - 139, - 16, - 148, - 16, - 156, - 16, - 164, - 16, - 172, - 16, - 180, - 16, - 189, - 16, - 197, - 16, - 205, - 16, - 213, - 16, - 222, - 16, - 230, - 16, - 238, - 16, - 246, - 16, - 255, - 8, - 0, - 8, - 8, - 8, - 16, - 8, - 24, - 8, - 32, - 8, - 41, - 8, - 49, - 8, - 57, - 8, - 65, - 8, - 74, - 8, - 82, - 8, - 90, - 8, - 98, - 8, - 106, - 8, - 115, - 8, - 123, - 8, - 131, - 8, - 139, - 8, - 148, - 8, - 156, - 8, - 164, - 8, - 172, - 8, - 180, - 8, - 189, - 8, - 197, - 8, - 205, - 8, - 213, - 8, - 222, - 8, - 230, - 8, - 238, - 8, - 246, - 8, - 255, - 0, - 0, - 0, - 8, - 0, - 16, - 0, - 24, - 0, - 32, - 0, - 41, - 0, - 49, - 0, - 57, - 0, - 65, - 0, - 74, - 0, - 82, - 0, - 90, - 0, - 98, - 0, - 106, - 0, - 115, - 0, - 123, - 0, - 131, - 0, - 139, - 0, - 148, - 0, - 156, - 0, - 164, - 0, - 172, - 0, - 180, - 0, - 189, - 0, - 197, - 0, - 205, - 0, - 213, - 0, - 222, - 0, - 230, - 0, - 238, - 0, - 246, - 0, - 255, -] -`; - -exports[`pixels browser grayscale-alpha-16bit.png 1`] = ` -Uint8Array [ - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 16, - 133, - 17, - 167, - 16, - 133, - 35, - 79, - 16, - 133, - 52, - 246, - 16, - 133, - 70, - 158, - 16, - 133, - 88, - 70, - 16, - 133, - 105, - 237, - 16, - 133, - 123, - 149, - 16, - 133, - 141, - 61, - 16, - 133, - 158, - 228, - 16, - 133, - 176, - 140, - 16, - 133, - 194, - 52, - 16, - 133, - 211, - 219, - 16, - 133, - 229, - 131, - 16, - 133, - 247, - 43, - 16, - 133, - 247, - 43, - 16, - 133, - 229, - 131, - 16, - 133, - 211, - 219, - 16, - 133, - 194, - 52, - 16, - 133, - 176, - 140, - 16, - 133, - 158, - 228, - 16, - 133, - 141, - 61, - 16, - 133, - 123, - 149, - 16, - 133, - 105, - 237, - 16, - 133, - 88, - 70, - 16, - 133, - 70, - 158, - 16, - 133, - 52, - 246, - 16, - 133, - 35, - 79, - 16, - 133, - 17, - 167, - 16, - 133, - 0, - 0, - 16, - 133, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 17, - 167, - 16, - 133, - 0, - 0, - 33, - 9, - 18, - 246, - 33, - 9, - 37, - 236, - 33, - 9, - 56, - 227, - 33, - 9, - 75, - 217, - 33, - 9, - 94, - 208, - 33, - 9, - 113, - 198, - 33, - 9, - 132, - 189, - 33, - 9, - 151, - 179, - 33, - 9, - 170, - 169, - 33, - 9, - 189, - 160, - 33, - 9, - 208, - 150, - 33, - 9, - 227, - 141, - 33, - 9, - 246, - 131, - 33, - 9, - 246, - 131, - 33, - 9, - 227, - 141, - 33, - 9, - 208, - 150, - 33, - 9, - 189, - 160, - 33, - 9, - 170, - 169, - 33, - 9, - 151, - 179, - 33, - 9, - 132, - 189, - 33, - 9, - 113, - 198, - 33, - 9, - 94, - 208, - 33, - 9, - 75, - 217, - 33, - 9, - 56, - 227, - 33, - 9, - 37, - 236, - 33, - 9, - 18, - 246, - 33, - 9, - 0, - 0, - 33, - 9, - 17, - 167, - 16, - 133, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 35, - 79, - 16, - 133, - 18, - 246, - 33, - 9, - 0, - 0, - 49, - 141, - 20, - 122, - 49, - 141, - 40, - 245, - 49, - 141, - 61, - 112, - 49, - 141, - 81, - 235, - 49, - 141, - 102, - 101, - 49, - 141, - 122, - 224, - 49, - 141, - 143, - 91, - 49, - 141, - 163, - 214, - 49, - 141, - 184, - 81, - 49, - 141, - 204, - 203, - 49, - 141, - 225, - 70, - 49, - 141, - 245, - 193, - 49, - 141, - 245, - 193, - 49, - 141, - 225, - 70, - 49, - 141, - 204, - 203, - 49, - 141, - 184, - 81, - 49, - 141, - 163, - 214, - 49, - 141, - 143, - 91, - 49, - 141, - 122, - 224, - 49, - 141, - 102, - 101, - 49, - 141, - 81, - 235, - 49, - 141, - 61, - 112, - 49, - 141, - 40, - 245, - 49, - 141, - 20, - 122, - 49, - 141, - 0, - 0, - 49, - 141, - 18, - 246, - 33, - 9, - 35, - 79, - 16, - 133, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 52, - 246, - 16, - 133, - 37, - 236, - 33, - 9, - 20, - 122, - 49, - 141, - 0, - 0, - 66, - 17, - 22, - 66, - 66, - 17, - 44, - 133, - 66, - 17, - 66, - 200, - 66, - 17, - 89, - 10, - 66, - 17, - 111, - 77, - 66, - 17, - 133, - 144, - 66, - 17, - 155, - 210, - 66, - 17, - 178, - 21, - 66, - 17, - 200, - 88, - 66, - 17, - 222, - 154, - 66, - 17, - 244, - 221, - 66, - 17, - 244, - 221, - 66, - 17, - 222, - 154, - 66, - 17, - 200, - 88, - 66, - 17, - 178, - 21, - 66, - 17, - 155, - 210, - 66, - 17, - 133, - 144, - 66, - 17, - 111, - 77, - 66, - 17, - 89, - 10, - 66, - 17, - 66, - 200, - 66, - 17, - 44, - 133, - 66, - 17, - 22, - 66, - 66, - 17, - 0, - 0, - 66, - 17, - 20, - 122, - 49, - 141, - 37, - 236, - 33, - 9, - 52, - 246, - 16, - 133, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 70, - 158, - 16, - 133, - 56, - 227, - 33, - 9, - 40, - 245, - 49, - 141, - 22, - 66, - 66, - 17, - 0, - 0, - 82, - 149, - 24, - 97, - 82, - 149, - 48, - 194, - 82, - 149, - 73, - 36, - 82, - 149, - 97, - 133, - 82, - 149, - 121, - 231, - 82, - 149, - 146, - 72, - 82, - 149, - 170, - 169, - 82, - 149, - 195, - 11, - 82, - 149, - 219, - 108, - 82, - 149, - 243, - 206, - 82, - 149, - 243, - 206, - 82, - 149, - 219, - 108, - 82, - 149, - 195, - 11, - 82, - 149, - 170, - 169, - 82, - 149, - 146, - 72, - 82, - 149, - 121, - 231, - 82, - 149, - 97, - 133, - 82, - 149, - 73, - 36, - 82, - 149, - 48, - 194, - 82, - 149, - 24, - 97, - 82, - 149, - 0, - 0, - 82, - 149, - 22, - 66, - 66, - 17, - 40, - 245, - 49, - 141, - 56, - 227, - 33, - 9, - 70, - 158, - 16, - 133, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 88, - 70, - 16, - 133, - 75, - 217, - 33, - 9, - 61, - 112, - 49, - 141, - 44, - 133, - 66, - 17, - 24, - 97, - 82, - 149, - 0, - 0, - 99, - 25, - 26, - 242, - 99, - 25, - 53, - 228, - 99, - 25, - 80, - 215, - 99, - 25, - 107, - 201, - 99, - 25, - 134, - 188, - 99, - 25, - 161, - 174, - 99, - 25, - 188, - 160, - 99, - 25, - 215, - 147, - 99, - 25, - 242, - 133, - 99, - 25, - 242, - 133, - 99, - 25, - 215, - 147, - 99, - 25, - 188, - 160, - 99, - 25, - 161, - 174, - 99, - 25, - 134, - 188, - 99, - 25, - 107, - 201, - 99, - 25, - 80, - 215, - 99, - 25, - 53, - 228, - 99, - 25, - 26, - 242, - 99, - 25, - 0, - 0, - 99, - 25, - 24, - 97, - 82, - 149, - 44, - 133, - 66, - 17, - 61, - 112, - 49, - 141, - 75, - 217, - 33, - 9, - 88, - 70, - 16, - 133, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 105, - 237, - 16, - 133, - 94, - 208, - 33, - 9, - 81, - 235, - 49, - 141, - 66, - 200, - 66, - 17, - 48, - 194, - 82, - 149, - 26, - 242, - 99, - 25, - 0, - 0, - 115, - 157, - 30, - 29, - 115, - 157, - 60, - 59, - 115, - 157, - 90, - 89, - 115, - 157, - 120, - 119, - 115, - 157, - 150, - 149, - 115, - 157, - 180, - 179, - 115, - 157, - 210, - 209, - 115, - 157, - 240, - 239, - 115, - 157, - 240, - 239, - 115, - 157, - 210, - 209, - 115, - 157, - 180, - 179, - 115, - 157, - 150, - 149, - 115, - 157, - 120, - 119, - 115, - 157, - 90, - 89, - 115, - 157, - 60, - 59, - 115, - 157, - 30, - 29, - 115, - 157, - 0, - 0, - 115, - 157, - 26, - 242, - 99, - 25, - 48, - 194, - 82, - 149, - 66, - 200, - 66, - 17, - 81, - 235, - 49, - 141, - 94, - 208, - 33, - 9, - 105, - 237, - 16, - 133, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 149, - 16, - 133, - 113, - 198, - 33, - 9, - 102, - 101, - 49, - 141, - 89, - 10, - 66, - 17, - 73, - 36, - 82, - 149, - 53, - 228, - 99, - 25, - 30, - 29, - 115, - 157, - 0, - 0, - 132, - 33, - 34, - 33, - 132, - 33, - 68, - 67, - 132, - 33, - 102, - 101, - 132, - 33, - 136, - 135, - 132, - 33, - 170, - 169, - 132, - 33, - 204, - 203, - 132, - 33, - 238, - 237, - 132, - 33, - 238, - 237, - 132, - 33, - 204, - 203, - 132, - 33, - 170, - 169, - 132, - 33, - 136, - 135, - 132, - 33, - 102, - 101, - 132, - 33, - 68, - 67, - 132, - 33, - 34, - 33, - 132, - 33, - 0, - 0, - 132, - 33, - 30, - 29, - 115, - 157, - 53, - 228, - 99, - 25, - 73, - 36, - 82, - 149, - 89, - 10, - 66, - 17, - 102, - 101, - 49, - 141, - 113, - 198, - 33, - 9, - 123, - 149, - 16, - 133, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 141, - 61, - 16, - 133, - 132, - 189, - 33, - 9, - 122, - 224, - 49, - 141, - 111, - 77, - 66, - 17, - 97, - 133, - 82, - 149, - 80, - 215, - 99, - 25, - 60, - 59, - 115, - 157, - 34, - 33, - 132, - 33, - 0, - 0, - 148, - 165, - 39, - 98, - 148, - 165, - 78, - 196, - 148, - 165, - 118, - 38, - 148, - 165, - 157, - 137, - 148, - 165, - 196, - 235, - 148, - 165, - 236, - 77, - 148, - 165, - 236, - 77, - 148, - 165, - 196, - 235, - 148, - 165, - 157, - 137, - 148, - 165, - 118, - 38, - 148, - 165, - 78, - 196, - 148, - 165, - 39, - 98, - 148, - 165, - 0, - 0, - 148, - 165, - 34, - 33, - 132, - 33, - 60, - 59, - 115, - 157, - 80, - 215, - 99, - 25, - 97, - 133, - 82, - 149, - 111, - 77, - 66, - 17, - 122, - 224, - 49, - 141, - 132, - 189, - 33, - 9, - 141, - 61, - 16, - 133, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 158, - 228, - 16, - 133, - 151, - 179, - 33, - 9, - 143, - 91, - 49, - 141, - 133, - 144, - 66, - 17, - 121, - 231, - 82, - 149, - 107, - 201, - 99, - 25, - 90, - 89, - 115, - 157, - 68, - 67, - 132, - 33, - 39, - 98, - 148, - 165, - 0, - 0, - 165, - 41, - 46, - 139, - 165, - 41, - 93, - 22, - 165, - 41, - 139, - 162, - 165, - 41, - 186, - 45, - 165, - 41, - 232, - 185, - 165, - 41, - 232, - 185, - 165, - 41, - 186, - 45, - 165, - 41, - 139, - 162, - 165, - 41, - 93, - 22, - 165, - 41, - 46, - 139, - 165, - 41, - 0, - 0, - 165, - 41, - 39, - 98, - 148, - 165, - 68, - 67, - 132, - 33, - 90, - 89, - 115, - 157, - 107, - 201, - 99, - 25, - 121, - 231, - 82, - 149, - 133, - 144, - 66, - 17, - 143, - 91, - 49, - 141, - 151, - 179, - 33, - 9, - 158, - 228, - 16, - 133, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 176, - 140, - 16, - 133, - 170, - 169, - 33, - 9, - 163, - 214, - 49, - 141, - 155, - 210, - 66, - 17, - 146, - 72, - 82, - 149, - 134, - 188, - 99, - 25, - 120, - 119, - 115, - 157, - 102, - 101, - 132, - 33, - 78, - 196, - 148, - 165, - 46, - 139, - 165, - 41, - 0, - 0, - 181, - 173, - 56, - 227, - 181, - 173, - 113, - 198, - 181, - 173, - 170, - 169, - 181, - 173, - 227, - 141, - 181, - 173, - 227, - 141, - 181, - 173, - 170, - 169, - 181, - 173, - 113, - 198, - 181, - 173, - 56, - 227, - 181, - 173, - 0, - 0, - 181, - 173, - 46, - 139, - 165, - 41, - 78, - 196, - 148, - 165, - 102, - 101, - 132, - 33, - 120, - 119, - 115, - 157, - 134, - 188, - 99, - 25, - 146, - 72, - 82, - 149, - 155, - 210, - 66, - 17, - 163, - 214, - 49, - 141, - 170, - 169, - 33, - 9, - 176, - 140, - 16, - 133, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 194, - 52, - 16, - 133, - 189, - 160, - 33, - 9, - 184, - 81, - 49, - 141, - 178, - 21, - 66, - 17, - 170, - 169, - 82, - 149, - 161, - 174, - 99, - 25, - 150, - 149, - 115, - 157, - 136, - 135, - 132, - 33, - 118, - 38, - 148, - 165, - 93, - 22, - 165, - 41, - 56, - 227, - 181, - 173, - 0, - 0, - 198, - 49, - 73, - 36, - 198, - 49, - 146, - 72, - 198, - 49, - 219, - 108, - 198, - 49, - 219, - 108, - 198, - 49, - 146, - 72, - 198, - 49, - 73, - 36, - 198, - 49, - 0, - 0, - 198, - 49, - 56, - 227, - 181, - 173, - 93, - 22, - 165, - 41, - 118, - 38, - 148, - 165, - 136, - 135, - 132, - 33, - 150, - 149, - 115, - 157, - 161, - 174, - 99, - 25, - 170, - 169, - 82, - 149, - 178, - 21, - 66, - 17, - 184, - 81, - 49, - 141, - 189, - 160, - 33, - 9, - 194, - 52, - 16, - 133, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 211, - 219, - 16, - 133, - 208, - 150, - 33, - 9, - 204, - 203, - 49, - 141, - 200, - 88, - 66, - 17, - 195, - 11, - 82, - 149, - 188, - 160, - 99, - 25, - 180, - 179, - 115, - 157, - 170, - 169, - 132, - 33, - 157, - 137, - 148, - 165, - 139, - 162, - 165, - 41, - 113, - 198, - 181, - 173, - 73, - 36, - 198, - 49, - 0, - 0, - 214, - 181, - 102, - 101, - 214, - 181, - 204, - 203, - 214, - 181, - 204, - 203, - 214, - 181, - 102, - 101, - 214, - 181, - 0, - 0, - 214, - 181, - 73, - 36, - 198, - 49, - 113, - 198, - 181, - 173, - 139, - 162, - 165, - 41, - 157, - 137, - 148, - 165, - 170, - 169, - 132, - 33, - 180, - 179, - 115, - 157, - 188, - 160, - 99, - 25, - 195, - 11, - 82, - 149, - 200, - 88, - 66, - 17, - 204, - 203, - 49, - 141, - 208, - 150, - 33, - 9, - 211, - 219, - 16, - 133, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 229, - 131, - 16, - 133, - 227, - 141, - 33, - 9, - 225, - 70, - 49, - 141, - 222, - 154, - 66, - 17, - 219, - 108, - 82, - 149, - 215, - 147, - 99, - 25, - 210, - 209, - 115, - 157, - 204, - 203, - 132, - 33, - 196, - 235, - 148, - 165, - 186, - 45, - 165, - 41, - 170, - 169, - 181, - 173, - 146, - 72, - 198, - 49, - 102, - 101, - 214, - 181, - 0, - 0, - 231, - 57, - 170, - 169, - 231, - 57, - 170, - 169, - 231, - 57, - 0, - 0, - 231, - 57, - 102, - 101, - 214, - 181, - 146, - 72, - 198, - 49, - 170, - 169, - 181, - 173, - 186, - 45, - 165, - 41, - 196, - 235, - 148, - 165, - 204, - 203, - 132, - 33, - 210, - 209, - 115, - 157, - 215, - 147, - 99, - 25, - 219, - 108, - 82, - 149, - 222, - 154, - 66, - 17, - 225, - 70, - 49, - 141, - 227, - 141, - 33, - 9, - 229, - 131, - 16, - 133, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 43, - 16, - 133, - 246, - 131, - 33, - 9, - 245, - 193, - 49, - 141, - 244, - 221, - 66, - 17, - 243, - 206, - 82, - 149, - 242, - 133, - 99, - 25, - 240, - 239, - 115, - 157, - 238, - 237, - 132, - 33, - 236, - 77, - 148, - 165, - 232, - 185, - 165, - 41, - 227, - 141, - 181, - 173, - 219, - 108, - 198, - 49, - 204, - 203, - 214, - 181, - 170, - 169, - 231, - 57, - 0, - 0, - 247, - 189, - 0, - 0, - 247, - 189, - 170, - 169, - 231, - 57, - 204, - 203, - 214, - 181, - 219, - 108, - 198, - 49, - 227, - 141, - 181, - 173, - 232, - 185, - 165, - 41, - 236, - 77, - 148, - 165, - 238, - 237, - 132, - 33, - 240, - 239, - 115, - 157, - 242, - 133, - 99, - 25, - 243, - 206, - 82, - 149, - 244, - 221, - 66, - 17, - 245, - 193, - 49, - 141, - 246, - 131, - 33, - 9, - 247, - 43, - 16, - 133, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 43, - 16, - 133, - 246, - 131, - 33, - 9, - 245, - 193, - 49, - 141, - 244, - 221, - 66, - 17, - 243, - 206, - 82, - 149, - 242, - 133, - 99, - 25, - 240, - 239, - 115, - 157, - 238, - 237, - 132, - 33, - 236, - 77, - 148, - 165, - 232, - 185, - 165, - 41, - 227, - 141, - 181, - 173, - 219, - 108, - 198, - 49, - 204, - 203, - 214, - 181, - 170, - 169, - 231, - 57, - 0, - 0, - 247, - 189, - 0, - 0, - 247, - 189, - 170, - 169, - 231, - 57, - 204, - 203, - 214, - 181, - 219, - 108, - 198, - 49, - 227, - 141, - 181, - 173, - 232, - 185, - 165, - 41, - 236, - 77, - 148, - 165, - 238, - 237, - 132, - 33, - 240, - 239, - 115, - 157, - 242, - 133, - 99, - 25, - 243, - 206, - 82, - 149, - 244, - 221, - 66, - 17, - 245, - 193, - 49, - 141, - 246, - 131, - 33, - 9, - 247, - 43, - 16, - 133, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 229, - 131, - 16, - 133, - 227, - 141, - 33, - 9, - 225, - 70, - 49, - 141, - 222, - 154, - 66, - 17, - 219, - 108, - 82, - 149, - 215, - 147, - 99, - 25, - 210, - 209, - 115, - 157, - 204, - 203, - 132, - 33, - 196, - 235, - 148, - 165, - 186, - 45, - 165, - 41, - 170, - 169, - 181, - 173, - 146, - 72, - 198, - 49, - 102, - 101, - 214, - 181, - 0, - 0, - 231, - 57, - 170, - 169, - 231, - 57, - 170, - 169, - 231, - 57, - 0, - 0, - 231, - 57, - 102, - 101, - 214, - 181, - 146, - 72, - 198, - 49, - 170, - 169, - 181, - 173, - 186, - 45, - 165, - 41, - 196, - 235, - 148, - 165, - 204, - 203, - 132, - 33, - 210, - 209, - 115, - 157, - 215, - 147, - 99, - 25, - 219, - 108, - 82, - 149, - 222, - 154, - 66, - 17, - 225, - 70, - 49, - 141, - 227, - 141, - 33, - 9, - 229, - 131, - 16, - 133, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 211, - 219, - 16, - 133, - 208, - 150, - 33, - 9, - 204, - 203, - 49, - 141, - 200, - 88, - 66, - 17, - 195, - 11, - 82, - 149, - 188, - 160, - 99, - 25, - 180, - 179, - 115, - 157, - 170, - 169, - 132, - 33, - 157, - 137, - 148, - 165, - 139, - 162, - 165, - 41, - 113, - 198, - 181, - 173, - 73, - 36, - 198, - 49, - 0, - 0, - 214, - 181, - 102, - 101, - 214, - 181, - 204, - 203, - 214, - 181, - 204, - 203, - 214, - 181, - 102, - 101, - 214, - 181, - 0, - 0, - 214, - 181, - 73, - 36, - 198, - 49, - 113, - 198, - 181, - 173, - 139, - 162, - 165, - 41, - 157, - 137, - 148, - 165, - 170, - 169, - 132, - 33, - 180, - 179, - 115, - 157, - 188, - 160, - 99, - 25, - 195, - 11, - 82, - 149, - 200, - 88, - 66, - 17, - 204, - 203, - 49, - 141, - 208, - 150, - 33, - 9, - 211, - 219, - 16, - 133, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 194, - 52, - 16, - 133, - 189, - 160, - 33, - 9, - 184, - 81, - 49, - 141, - 178, - 21, - 66, - 17, - 170, - 169, - 82, - 149, - 161, - 174, - 99, - 25, - 150, - 149, - 115, - 157, - 136, - 135, - 132, - 33, - 118, - 38, - 148, - 165, - 93, - 22, - 165, - 41, - 56, - 227, - 181, - 173, - 0, - 0, - 198, - 49, - 73, - 36, - 198, - 49, - 146, - 72, - 198, - 49, - 219, - 108, - 198, - 49, - 219, - 108, - 198, - 49, - 146, - 72, - 198, - 49, - 73, - 36, - 198, - 49, - 0, - 0, - 198, - 49, - 56, - 227, - 181, - 173, - 93, - 22, - 165, - 41, - 118, - 38, - 148, - 165, - 136, - 135, - 132, - 33, - 150, - 149, - 115, - 157, - 161, - 174, - 99, - 25, - 170, - 169, - 82, - 149, - 178, - 21, - 66, - 17, - 184, - 81, - 49, - 141, - 189, - 160, - 33, - 9, - 194, - 52, - 16, - 133, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 176, - 140, - 16, - 133, - 170, - 169, - 33, - 9, - 163, - 214, - 49, - 141, - 155, - 210, - 66, - 17, - 146, - 72, - 82, - 149, - 134, - 188, - 99, - 25, - 120, - 119, - 115, - 157, - 102, - 101, - 132, - 33, - 78, - 196, - 148, - 165, - 46, - 139, - 165, - 41, - 0, - 0, - 181, - 173, - 56, - 227, - 181, - 173, - 113, - 198, - 181, - 173, - 170, - 169, - 181, - 173, - 227, - 141, - 181, - 173, - 227, - 141, - 181, - 173, - 170, - 169, - 181, - 173, - 113, - 198, - 181, - 173, - 56, - 227, - 181, - 173, - 0, - 0, - 181, - 173, - 46, - 139, - 165, - 41, - 78, - 196, - 148, - 165, - 102, - 101, - 132, - 33, - 120, - 119, - 115, - 157, - 134, - 188, - 99, - 25, - 146, - 72, - 82, - 149, - 155, - 210, - 66, - 17, - 163, - 214, - 49, - 141, - 170, - 169, - 33, - 9, - 176, - 140, - 16, - 133, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 158, - 228, - 16, - 133, - 151, - 179, - 33, - 9, - 143, - 91, - 49, - 141, - 133, - 144, - 66, - 17, - 121, - 231, - 82, - 149, - 107, - 201, - 99, - 25, - 90, - 89, - 115, - 157, - 68, - 67, - 132, - 33, - 39, - 98, - 148, - 165, - 0, - 0, - 165, - 41, - 46, - 139, - 165, - 41, - 93, - 22, - 165, - 41, - 139, - 162, - 165, - 41, - 186, - 45, - 165, - 41, - 232, - 185, - 165, - 41, - 232, - 185, - 165, - 41, - 186, - 45, - 165, - 41, - 139, - 162, - 165, - 41, - 93, - 22, - 165, - 41, - 46, - 139, - 165, - 41, - 0, - 0, - 165, - 41, - 39, - 98, - 148, - 165, - 68, - 67, - 132, - 33, - 90, - 89, - 115, - 157, - 107, - 201, - 99, - 25, - 121, - 231, - 82, - 149, - 133, - 144, - 66, - 17, - 143, - 91, - 49, - 141, - 151, - 179, - 33, - 9, - 158, - 228, - 16, - 133, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 141, - 61, - 16, - 133, - 132, - 189, - 33, - 9, - 122, - 224, - 49, - 141, - 111, - 77, - 66, - 17, - 97, - 133, - 82, - 149, - 80, - 215, - 99, - 25, - 60, - 59, - 115, - 157, - 34, - 33, - 132, - 33, - 0, - 0, - 148, - 165, - 39, - 98, - 148, - 165, - 78, - 196, - 148, - 165, - 118, - 38, - 148, - 165, - 157, - 137, - 148, - 165, - 196, - 235, - 148, - 165, - 236, - 77, - 148, - 165, - 236, - 77, - 148, - 165, - 196, - 235, - 148, - 165, - 157, - 137, - 148, - 165, - 118, - 38, - 148, - 165, - 78, - 196, - 148, - 165, - 39, - 98, - 148, - 165, - 0, - 0, - 148, - 165, - 34, - 33, - 132, - 33, - 60, - 59, - 115, - 157, - 80, - 215, - 99, - 25, - 97, - 133, - 82, - 149, - 111, - 77, - 66, - 17, - 122, - 224, - 49, - 141, - 132, - 189, - 33, - 9, - 141, - 61, - 16, - 133, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 149, - 16, - 133, - 113, - 198, - 33, - 9, - 102, - 101, - 49, - 141, - 89, - 10, - 66, - 17, - 73, - 36, - 82, - 149, - 53, - 228, - 99, - 25, - 30, - 29, - 115, - 157, - 0, - 0, - 132, - 33, - 34, - 33, - 132, - 33, - 68, - 67, - 132, - 33, - 102, - 101, - 132, - 33, - 136, - 135, - 132, - 33, - 170, - 169, - 132, - 33, - 204, - 203, - 132, - 33, - 238, - 237, - 132, - 33, - 238, - 237, - 132, - 33, - 204, - 203, - 132, - 33, - 170, - 169, - 132, - 33, - 136, - 135, - 132, - 33, - 102, - 101, - 132, - 33, - 68, - 67, - 132, - 33, - 34, - 33, - 132, - 33, - 0, - 0, - 132, - 33, - 30, - 29, - 115, - 157, - 53, - 228, - 99, - 25, - 73, - 36, - 82, - 149, - 89, - 10, - 66, - 17, - 102, - 101, - 49, - 141, - 113, - 198, - 33, - 9, - 123, - 149, - 16, - 133, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 105, - 237, - 16, - 133, - 94, - 208, - 33, - 9, - 81, - 235, - 49, - 141, - 66, - 200, - 66, - 17, - 48, - 194, - 82, - 149, - 26, - 242, - 99, - 25, - 0, - 0, - 115, - 157, - 30, - 29, - 115, - 157, - 60, - 59, - 115, - 157, - 90, - 89, - 115, - 157, - 120, - 119, - 115, - 157, - 150, - 149, - 115, - 157, - 180, - 179, - 115, - 157, - 210, - 209, - 115, - 157, - 240, - 239, - 115, - 157, - 240, - 239, - 115, - 157, - 210, - 209, - 115, - 157, - 180, - 179, - 115, - 157, - 150, - 149, - 115, - 157, - 120, - 119, - 115, - 157, - 90, - 89, - 115, - 157, - 60, - 59, - 115, - 157, - 30, - 29, - 115, - 157, - 0, - 0, - 115, - 157, - 26, - 242, - 99, - 25, - 48, - 194, - 82, - 149, - 66, - 200, - 66, - 17, - 81, - 235, - 49, - 141, - 94, - 208, - 33, - 9, - 105, - 237, - 16, - 133, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 88, - 70, - 16, - 133, - 75, - 217, - 33, - 9, - 61, - 112, - 49, - 141, - 44, - 133, - 66, - 17, - 24, - 97, - 82, - 149, - 0, - 0, - 99, - 25, - 26, - 242, - 99, - 25, - 53, - 228, - 99, - 25, - 80, - 215, - 99, - 25, - 107, - 201, - 99, - 25, - 134, - 188, - 99, - 25, - 161, - 174, - 99, - 25, - 188, - 160, - 99, - 25, - 215, - 147, - 99, - 25, - 242, - 133, - 99, - 25, - 242, - 133, - 99, - 25, - 215, - 147, - 99, - 25, - 188, - 160, - 99, - 25, - 161, - 174, - 99, - 25, - 134, - 188, - 99, - 25, - 107, - 201, - 99, - 25, - 80, - 215, - 99, - 25, - 53, - 228, - 99, - 25, - 26, - 242, - 99, - 25, - 0, - 0, - 99, - 25, - 24, - 97, - 82, - 149, - 44, - 133, - 66, - 17, - 61, - 112, - 49, - 141, - 75, - 217, - 33, - 9, - 88, - 70, - 16, - 133, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 70, - 158, - 16, - 133, - 56, - 227, - 33, - 9, - 40, - 245, - 49, - 141, - 22, - 66, - 66, - 17, - 0, - 0, - 82, - 149, - 24, - 97, - 82, - 149, - 48, - 194, - 82, - 149, - 73, - 36, - 82, - 149, - 97, - 133, - 82, - 149, - 121, - 231, - 82, - 149, - 146, - 72, - 82, - 149, - 170, - 169, - 82, - 149, - 195, - 11, - 82, - 149, - 219, - 108, - 82, - 149, - 243, - 206, - 82, - 149, - 243, - 206, - 82, - 149, - 219, - 108, - 82, - 149, - 195, - 11, - 82, - 149, - 170, - 169, - 82, - 149, - 146, - 72, - 82, - 149, - 121, - 231, - 82, - 149, - 97, - 133, - 82, - 149, - 73, - 36, - 82, - 149, - 48, - 194, - 82, - 149, - 24, - 97, - 82, - 149, - 0, - 0, - 82, - 149, - 22, - 66, - 66, - 17, - 40, - 245, - 49, - 141, - 56, - 227, - 33, - 9, - 70, - 158, - 16, - 133, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 52, - 246, - 16, - 133, - 37, - 236, - 33, - 9, - 20, - 122, - 49, - 141, - 0, - 0, - 66, - 17, - 22, - 66, - 66, - 17, - 44, - 133, - 66, - 17, - 66, - 200, - 66, - 17, - 89, - 10, - 66, - 17, - 111, - 77, - 66, - 17, - 133, - 144, - 66, - 17, - 155, - 210, - 66, - 17, - 178, - 21, - 66, - 17, - 200, - 88, - 66, - 17, - 222, - 154, - 66, - 17, - 244, - 221, - 66, - 17, - 244, - 221, - 66, - 17, - 222, - 154, - 66, - 17, - 200, - 88, - 66, - 17, - 178, - 21, - 66, - 17, - 155, - 210, - 66, - 17, - 133, - 144, - 66, - 17, - 111, - 77, - 66, - 17, - 89, - 10, - 66, - 17, - 66, - 200, - 66, - 17, - 44, - 133, - 66, - 17, - 22, - 66, - 66, - 17, - 0, - 0, - 66, - 17, - 20, - 122, - 49, - 141, - 37, - 236, - 33, - 9, - 52, - 246, - 16, - 133, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 35, - 79, - 16, - 133, - 18, - 246, - 33, - 9, - 0, - 0, - 49, - 141, - 20, - 122, - 49, - 141, - 40, - 245, - 49, - 141, - 61, - 112, - 49, - 141, - 81, - 235, - 49, - 141, - 102, - 101, - 49, - 141, - 122, - 224, - 49, - 141, - 143, - 91, - 49, - 141, - 163, - 214, - 49, - 141, - 184, - 81, - 49, - 141, - 204, - 203, - 49, - 141, - 225, - 70, - 49, - 141, - 245, - 193, - 49, - 141, - 245, - 193, - 49, - 141, - 225, - 70, - 49, - 141, - 204, - 203, - 49, - 141, - 184, - 81, - 49, - 141, - 163, - 214, - 49, - 141, - 143, - 91, - 49, - 141, - 122, - 224, - 49, - 141, - 102, - 101, - 49, - 141, - 81, - 235, - 49, - 141, - 61, - 112, - 49, - 141, - 40, - 245, - 49, - 141, - 20, - 122, - 49, - 141, - 0, - 0, - 49, - 141, - 18, - 246, - 33, - 9, - 35, - 79, - 16, - 133, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 17, - 167, - 16, - 133, - 0, - 0, - 33, - 9, - 18, - 246, - 33, - 9, - 37, - 236, - 33, - 9, - 56, - 227, - 33, - 9, - 75, - 217, - 33, - 9, - 94, - 208, - 33, - 9, - 113, - 198, - 33, - 9, - 132, - 189, - 33, - 9, - 151, - 179, - 33, - 9, - 170, - 169, - 33, - 9, - 189, - 160, - 33, - 9, - 208, - 150, - 33, - 9, - 227, - 141, - 33, - 9, - 246, - 131, - 33, - 9, - 246, - 131, - 33, - 9, - 227, - 141, - 33, - 9, - 208, - 150, - 33, - 9, - 189, - 160, - 33, - 9, - 170, - 169, - 33, - 9, - 151, - 179, - 33, - 9, - 132, - 189, - 33, - 9, - 113, - 198, - 33, - 9, - 94, - 208, - 33, - 9, - 75, - 217, - 33, - 9, - 56, - 227, - 33, - 9, - 37, - 236, - 33, - 9, - 18, - 246, - 33, - 9, - 0, - 0, - 33, - 9, - 17, - 167, - 16, - 133, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 16, - 133, - 17, - 167, - 16, - 133, - 35, - 79, - 16, - 133, - 52, - 246, - 16, - 133, - 70, - 158, - 16, - 133, - 88, - 70, - 16, - 133, - 105, - 237, - 16, - 133, - 123, - 149, - 16, - 133, - 141, - 61, - 16, - 133, - 158, - 228, - 16, - 133, - 176, - 140, - 16, - 133, - 194, - 52, - 16, - 133, - 211, - 219, - 16, - 133, - 229, - 131, - 16, - 133, - 247, - 43, - 16, - 133, - 247, - 43, - 16, - 133, - 229, - 131, - 16, - 133, - 211, - 219, - 16, - 133, - 194, - 52, - 16, - 133, - 176, - 140, - 16, - 133, - 158, - 228, - 16, - 133, - 141, - 61, - 16, - 133, - 123, - 149, - 16, - 133, - 105, - 237, - 16, - 133, - 88, - 70, - 16, - 133, - 70, - 158, - 16, - 133, - 52, - 246, - 16, - 133, - 35, - 79, - 16, - 133, - 17, - 167, - 16, - 133, - 0, - 0, - 16, - 133, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, -] -`; - -exports[`pixels browser interlaced-grayscale-8bit.png 1`] = ` -Uint8Array [ - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 0, - 1, - 2, - 3, -] -`; - -exports[`pixels browser interlaced-pallete-8bit.png 1`] = ` -Uint8Array [ - 165, - 165, - 165, - 165, - 164, - 164, - 164, - 164, - 47, - 47, - 47, - 47, - 200, - 200, - 200, - 200, - 125, - 125, - 125, - 125, - 217, - 217, - 217, - 217, - 93, - 93, - 93, - 93, - 254, - 254, - 254, - 254, - 8, - 8, - 8, - 8, - 4, - 4, - 4, - 4, - 131, - 131, - 131, - 131, - 249, - 249, - 249, - 249, - 121, - 121, - 121, - 121, - 110, - 110, - 110, - 110, - 240, - 240, - 240, - 240, - 248, - 248, - 248, - 248, - 19, - 19, - 19, - 19, - 14, - 14, - 14, - 14, - 9, - 9, - 9, - 9, - 166, - 166, - 166, - 166, - 246, - 246, - 246, - 246, - 211, - 211, - 211, - 211, - 220, - 220, - 220, - 220, - 241, - 241, - 241, - 241, - 31, - 31, - 31, - 31, - 24, - 24, - 24, - 24, - 140, - 140, - 140, - 140, - 88, - 88, - 88, - 88, - 116, - 116, - 116, - 116, - 70, - 70, - 70, - 70, - 202, - 202, - 202, - 202, - 234, - 234, - 234, - 234, - 48, - 48, - 48, - 48, - 32, - 32, - 32, - 32, - 21, - 21, - 21, - 21, - 0, - 0, - 0, - 0, - 237, - 237, - 237, - 237, - 168, - 168, - 168, - 168, - 188, - 188, - 188, - 188, - 225, - 225, - 225, - 225, - 56, - 56, - 56, - 56, - 43, - 43, - 43, - 43, - 151, - 151, - 151, - 151, - 175, - 175, - 175, - 175, - 109, - 109, - 109, - 109, - 18, - 18, - 18, - 18, - 171, - 171, - 171, - 171, - 218, - 218, - 218, - 218, - 64, - 64, - 64, - 64, - 53, - 53, - 53, - 53, - 34, - 34, - 34, - 34, - 94, - 94, - 94, - 94, - 229, - 229, - 229, - 229, - 123, - 123, - 123, - 123, - 152, - 152, - 152, - 152, - 210, - 210, - 210, - 210, - 76, - 76, - 76, - 76, - 61, - 61, - 61, - 61, - 160, - 160, - 160, - 160, - 5, - 5, - 5, - 5, - 98, - 98, - 98, - 98, - 231, - 231, - 231, - 231, - 133, - 133, - 133, - 133, - 199, - 199, - 199, - 199, - 84, - 84, - 84, - 84, - 66, - 66, - 66, - 66, - 49, - 49, - 49, - 49, - 181, - 181, - 181, - 181, - 219, - 219, - 219, - 219, - 86, - 86, - 86, - 86, - 119, - 119, - 119, - 119, - 193, - 193, - 193, - 193, - 92, - 92, - 92, - 92, - 74, - 74, - 74, - 74, - 173, - 173, - 173, - 173, - 101, - 101, - 101, - 101, - 91, - 91, - 91, - 91, - 189, - 189, - 189, - 189, - 104, - 104, - 104, - 104, - 190, - 190, - 190, - 190, - 100, - 100, - 100, - 100, - 198, - 198, - 198, - 198, - 57, - 57, - 57, - 57, - 182, - 182, - 182, - 182, - 209, - 209, - 209, - 209, - 46, - 46, - 46, - 46, - 89, - 89, - 89, - 89, - 180, - 180, - 180, - 180, - 192, - 192, - 192, - 192, - 51, - 51, - 51, - 51, - 142, - 142, - 142, - 142, - 226, - 226, - 226, - 226, - 204, - 204, - 204, - 204, - 185, - 185, - 185, - 185, - 235, - 235, - 235, - 235, - 174, - 174, - 174, - 174, - 201, - 201, - 201, - 201, - 58, - 58, - 58, - 58, - 23, - 23, - 23, - 23, - 141, - 141, - 141, - 141, - 81, - 81, - 81, - 81, - 38, - 38, - 38, - 38, - 216, - 216, - 216, - 216, - 162, - 162, - 162, - 162, - 212, - 212, - 212, - 212, - 63, - 63, - 63, - 63, - 153, - 153, - 153, - 153, - 68, - 68, - 68, - 68, - 194, - 194, - 194, - 194, - 135, - 135, - 135, - 135, - 196, - 196, - 196, - 196, - 154, - 154, - 154, - 154, - 223, - 223, - 223, - 223, - 72, - 72, - 72, - 72, - 37, - 37, - 37, - 37, - 232, - 232, - 232, - 232, - 71, - 71, - 71, - 71, - 243, - 243, - 243, - 243, - 184, - 184, - 184, - 184, - 147, - 147, - 147, - 147, - 233, - 233, - 233, - 233, - 79, - 79, - 79, - 79, - 161, - 161, - 161, - 161, - 146, - 146, - 146, - 146, - 187, - 187, - 187, - 187, - 99, - 99, - 99, - 99, - 163, - 163, - 163, - 163, - 137, - 137, - 137, - 137, - 107, - 107, - 107, - 107, - 77, - 77, - 77, - 77, - 41, - 41, - 41, - 41, - 155, - 155, - 155, - 155, - 65, - 65, - 65, - 65, - 221, - 221, - 221, - 221, - 44, - 44, - 44, - 44, - 13, - 13, - 13, - 13, - 250, - 250, - 250, - 250, - 215, - 215, - 215, - 215, - 186, - 186, - 186, - 186, - 105, - 105, - 105, - 105, - 59, - 59, - 59, - 59, - 75, - 75, - 75, - 75, - 127, - 127, - 127, - 127, - 7, - 7, - 7, - 7, - 103, - 103, - 103, - 103, - 195, - 195, - 195, - 195, - 167, - 167, - 167, - 167, - 134, - 134, - 134, - 134, - 52, - 52, - 52, - 52, - 83, - 83, - 83, - 83, - 6, - 6, - 6, - 6, - 129, - 129, - 129, - 129, - 205, - 205, - 205, - 205, - 178, - 178, - 178, - 178, - 145, - 145, - 145, - 145, - 169, - 169, - 169, - 169, - 42, - 42, - 42, - 42, - 90, - 90, - 90, - 90, - 136, - 136, - 136, - 136, - 255, - 255, - 255, - 255, - 62, - 62, - 62, - 62, - 35, - 35, - 35, - 35, - 128, - 128, - 128, - 128, - 113, - 113, - 113, - 113, - 29, - 29, - 29, - 29, - 96, - 96, - 96, - 96, - 17, - 17, - 17, - 17, - 120, - 120, - 120, - 120, - 159, - 159, - 159, - 159, - 10, - 10, - 10, - 10, - 117, - 117, - 117, - 117, - 143, - 143, - 143, - 143, - 22, - 22, - 22, - 22, - 106, - 106, - 106, - 106, - 148, - 148, - 148, - 148, - 245, - 245, - 245, - 245, - 12, - 12, - 12, - 12, - 247, - 247, - 247, - 247, - 102, - 102, - 102, - 102, - 177, - 177, - 177, - 177, - 11, - 11, - 11, - 11, - 114, - 114, - 114, - 114, - 30, - 30, - 30, - 30, - 115, - 115, - 115, - 115, - 118, - 118, - 118, - 118, - 227, - 227, - 227, - 227, - 85, - 85, - 85, - 85, - 208, - 208, - 208, - 208, - 2, - 2, - 2, - 2, - 122, - 122, - 122, - 122, - 156, - 156, - 156, - 156, - 236, - 236, - 236, - 236, - 224, - 224, - 224, - 224, - 207, - 207, - 207, - 207, - 73, - 73, - 73, - 73, - 242, - 242, - 242, - 242, - 253, - 253, - 253, - 253, - 132, - 132, - 132, - 132, - 45, - 45, - 45, - 45, - 108, - 108, - 108, - 108, - 82, - 82, - 82, - 82, - 191, - 191, - 191, - 191, - 54, - 54, - 54, - 54, - 16, - 16, - 16, - 16, - 244, - 244, - 244, - 244, - 139, - 139, - 139, - 139, - 172, - 172, - 172, - 172, - 228, - 228, - 228, - 228, - 183, - 183, - 183, - 183, - 170, - 170, - 170, - 170, - 36, - 36, - 36, - 36, - 60, - 60, - 60, - 60, - 238, - 238, - 238, - 238, - 149, - 149, - 149, - 149, - 55, - 55, - 55, - 55, - 97, - 97, - 97, - 97, - 78, - 78, - 78, - 78, - 69, - 69, - 69, - 69, - 179, - 179, - 179, - 179, - 251, - 251, - 251, - 251, - 230, - 230, - 230, - 230, - 252, - 252, - 252, - 252, - 138, - 138, - 138, - 138, - 95, - 95, - 95, - 95, - 176, - 176, - 176, - 176, - 50, - 50, - 50, - 50, - 158, - 158, - 158, - 158, - 27, - 27, - 27, - 27, - 222, - 222, - 222, - 222, - 3, - 3, - 3, - 3, - 20, - 20, - 20, - 20, - 213, - 213, - 213, - 213, - 28, - 28, - 28, - 28, - 25, - 25, - 25, - 25, - 144, - 144, - 144, - 144, - 67, - 67, - 67, - 67, - 214, - 214, - 214, - 214, - 15, - 15, - 15, - 15, - 150, - 150, - 150, - 150, - 87, - 87, - 87, - 87, - 130, - 130, - 130, - 130, - 126, - 126, - 126, - 126, - 124, - 124, - 124, - 124, - 1, - 1, - 1, - 1, - 206, - 206, - 206, - 206, - 26, - 26, - 26, - 26, - 33, - 33, - 33, - 33, - 203, - 203, - 203, - 203, - 239, - 239, - 239, - 239, - 112, - 112, - 112, - 112, - 111, - 111, - 111, - 111, - 40, - 40, - 40, - 40, - 197, - 197, - 197, - 197, - 39, - 39, - 39, - 39, - 157, - 157, - 157, - 157, - 80, - 80, - 80, - 80, -] -`; - -exports[`pixels browser interlaced-rgb-8bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 253, - 253, - 253, - 252, - 252, - 252, - 251, - 251, - 251, - 250, - 250, - 250, - 249, - 249, - 249, - 248, - 248, - 248, - 247, - 247, - 247, - 246, - 246, - 246, - 245, - 245, - 245, - 244, - 244, - 244, - 243, - 243, - 243, - 242, - 242, - 242, - 241, - 241, - 241, - 240, - 240, - 240, - 239, - 239, - 239, - 238, - 238, - 238, - 237, - 237, - 237, - 236, - 236, - 236, - 235, - 235, - 235, - 234, - 234, - 234, - 233, - 233, - 233, - 232, - 232, - 232, - 231, - 231, - 231, - 230, - 230, - 230, - 229, - 229, - 229, - 228, - 228, - 228, - 227, - 227, - 227, - 226, - 226, - 226, - 225, - 225, - 225, - 224, - 224, - 224, - 223, - 223, - 223, - 222, - 222, - 222, - 221, - 221, - 221, - 220, - 220, - 220, - 219, - 219, - 219, - 218, - 218, - 218, - 217, - 217, - 217, - 216, - 216, - 216, - 215, - 215, - 215, - 214, - 214, - 214, - 213, - 213, - 213, - 212, - 212, - 212, - 211, - 211, - 211, - 210, - 210, - 210, - 209, - 209, - 209, - 208, - 208, - 208, - 207, - 207, - 207, - 206, - 206, - 206, - 205, - 205, - 205, - 204, - 204, - 204, - 203, - 203, - 203, - 202, - 202, - 202, - 201, - 201, - 201, - 200, - 200, - 200, - 199, - 199, - 199, - 198, - 198, - 198, - 197, - 197, - 197, - 196, - 196, - 196, - 195, - 195, - 195, - 194, - 194, - 194, - 193, - 193, - 193, - 192, - 192, - 192, - 191, - 191, - 191, - 190, - 190, - 190, - 189, - 189, - 189, - 188, - 188, - 188, - 187, - 187, - 187, - 186, - 186, - 186, - 185, - 185, - 185, - 184, - 184, - 184, - 183, - 183, - 183, - 182, - 182, - 182, - 181, - 181, - 181, - 180, - 180, - 180, - 179, - 179, - 179, - 178, - 178, - 178, - 177, - 177, - 177, - 176, - 176, - 176, - 175, - 175, - 175, - 174, - 174, - 174, - 173, - 173, - 173, - 172, - 172, - 172, - 171, - 171, - 171, - 170, - 170, - 170, - 169, - 169, - 169, - 168, - 168, - 168, - 167, - 167, - 167, - 166, - 166, - 166, - 165, - 165, - 165, - 164, - 164, - 164, - 163, - 163, - 163, - 162, - 162, - 162, - 161, - 161, - 161, - 160, - 160, - 160, - 159, - 159, - 159, - 158, - 158, - 158, - 157, - 157, - 157, - 156, - 156, - 156, - 155, - 155, - 155, - 154, - 154, - 154, - 153, - 153, - 153, - 152, - 152, - 152, - 151, - 151, - 151, - 150, - 150, - 150, - 149, - 149, - 149, - 148, - 148, - 148, - 147, - 147, - 147, - 146, - 146, - 146, - 145, - 145, - 145, - 144, - 144, - 144, - 143, - 143, - 143, - 142, - 142, - 142, - 141, - 141, - 141, - 140, - 140, - 140, - 139, - 139, - 139, - 138, - 138, - 138, - 137, - 137, - 137, - 136, - 136, - 136, - 135, - 135, - 135, - 134, - 134, - 134, - 133, - 133, - 133, - 132, - 132, - 132, - 131, - 131, - 131, - 130, - 130, - 130, - 129, - 129, - 129, - 128, - 128, - 128, - 127, - 127, - 127, - 126, - 126, - 126, - 125, - 125, - 125, - 124, - 124, - 124, - 123, - 123, - 123, - 122, - 122, - 122, - 121, - 121, - 121, - 120, - 120, - 120, - 119, - 119, - 119, - 118, - 118, - 118, - 117, - 117, - 117, - 116, - 116, - 116, - 115, - 115, - 115, - 114, - 114, - 114, - 113, - 113, - 113, - 112, - 112, - 112, - 111, - 111, - 111, - 110, - 110, - 110, - 109, - 109, - 109, - 108, - 108, - 108, - 107, - 107, - 107, - 106, - 106, - 106, - 105, - 105, - 105, - 104, - 104, - 104, - 103, - 103, - 103, - 102, - 102, - 102, - 101, - 101, - 101, - 100, - 100, - 100, - 99, - 99, - 99, - 98, - 98, - 98, - 97, - 97, - 97, - 96, - 96, - 96, - 95, - 95, - 95, - 94, - 94, - 94, - 93, - 93, - 93, - 92, - 92, - 92, - 91, - 91, - 91, - 90, - 90, - 90, - 89, - 89, - 89, - 88, - 88, - 88, - 87, - 87, - 87, - 86, - 86, - 86, - 85, - 85, - 85, - 84, - 84, - 84, - 83, - 83, - 83, - 82, - 82, - 82, - 81, - 81, - 81, - 80, - 80, - 80, - 79, - 79, - 79, - 78, - 78, - 78, - 77, - 77, - 77, - 76, - 76, - 76, - 75, - 75, - 75, - 74, - 74, - 74, - 73, - 73, - 73, - 72, - 72, - 72, - 71, - 71, - 71, - 70, - 70, - 70, - 69, - 69, - 69, - 68, - 68, - 68, - 67, - 67, - 67, - 66, - 66, - 66, - 65, - 65, - 65, - 64, - 64, - 64, - 63, - 63, - 63, - 62, - 62, - 62, - 61, - 61, - 61, - 60, - 60, - 60, - 59, - 59, - 59, - 58, - 58, - 58, - 57, - 57, - 57, - 56, - 56, - 56, - 55, - 55, - 55, - 54, - 54, - 54, - 53, - 53, - 53, - 52, - 52, - 52, - 51, - 51, - 51, - 50, - 50, - 50, - 49, - 49, - 49, - 48, - 48, - 48, - 47, - 47, - 47, - 46, - 46, - 46, - 45, - 45, - 45, - 44, - 44, - 44, - 43, - 43, - 43, - 42, - 42, - 42, - 41, - 41, - 41, - 40, - 40, - 40, - 39, - 39, - 39, - 38, - 38, - 38, - 37, - 37, - 37, - 36, - 36, - 36, - 35, - 35, - 35, - 34, - 34, - 34, - 33, - 33, - 33, - 32, - 32, - 32, - 31, - 31, - 31, - 30, - 30, - 30, - 29, - 29, - 29, - 28, - 28, - 28, - 27, - 27, - 27, - 26, - 26, - 26, - 25, - 25, - 25, - 24, - 24, - 24, - 23, - 23, - 23, - 22, - 22, - 22, - 21, - 21, - 21, - 20, - 20, - 20, - 19, - 19, - 19, - 18, - 18, - 18, - 17, - 17, - 17, - 16, - 16, - 16, - 15, - 15, - 15, - 14, - 14, - 14, - 13, - 13, - 13, - 12, - 12, - 12, - 11, - 11, - 11, - 10, - 10, - 10, - 9, - 9, - 9, - 8, - 8, - 8, - 7, - 7, - 7, - 6, - 6, - 6, - 5, - 5, - 5, - 4, - 4, - 4, - 3, - 3, - 3, - 2, - 2, - 2, - 1, - 1, - 1, - 0, - 0, - 0, -] -`; - -exports[`pixels browser interlaced-rgb-16bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 255, - 255, - 0, - 0, - 239, - 123, - 255, - 255, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 222, - 247, - 255, - 255, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 206, - 115, - 255, - 255, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 189, - 239, - 255, - 255, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 173, - 107, - 255, - 255, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 156, - 231, - 255, - 255, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 140, - 99, - 255, - 255, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 247, - 189, - 247, - 189, - 0, - 0, - 239, - 123, - 247, - 189, - 0, - 0, - 231, - 57, - 247, - 189, - 0, - 0, - 222, - 247, - 247, - 189, - 0, - 0, - 214, - 181, - 247, - 189, - 0, - 0, - 206, - 115, - 247, - 189, - 0, - 0, - 198, - 49, - 247, - 189, - 0, - 0, - 189, - 239, - 247, - 189, - 0, - 0, - 181, - 173, - 247, - 189, - 0, - 0, - 173, - 107, - 247, - 189, - 0, - 0, - 165, - 41, - 247, - 189, - 0, - 0, - 156, - 231, - 247, - 189, - 0, - 0, - 148, - 165, - 247, - 189, - 0, - 0, - 140, - 99, - 247, - 189, - 0, - 0, - 132, - 33, - 247, - 189, - 0, - 0, - 123, - 222, - 247, - 189, - 0, - 0, - 115, - 156, - 247, - 189, - 0, - 0, - 107, - 90, - 247, - 189, - 0, - 0, - 99, - 24, - 247, - 189, - 0, - 0, - 90, - 214, - 247, - 189, - 0, - 0, - 82, - 148, - 247, - 189, - 0, - 0, - 74, - 82, - 247, - 189, - 0, - 0, - 66, - 16, - 247, - 189, - 0, - 0, - 57, - 206, - 247, - 189, - 0, - 0, - 49, - 140, - 247, - 189, - 0, - 0, - 41, - 74, - 247, - 189, - 0, - 0, - 33, - 8, - 247, - 189, - 0, - 0, - 24, - 198, - 247, - 189, - 0, - 0, - 16, - 132, - 247, - 189, - 0, - 0, - 8, - 66, - 247, - 189, - 0, - 0, - 0, - 0, - 247, - 189, - 8, - 66, - 255, - 255, - 239, - 123, - 0, - 0, - 247, - 189, - 239, - 123, - 0, - 0, - 239, - 123, - 239, - 123, - 0, - 0, - 231, - 57, - 239, - 123, - 0, - 0, - 222, - 247, - 239, - 123, - 0, - 0, - 214, - 181, - 239, - 123, - 0, - 0, - 206, - 115, - 239, - 123, - 0, - 0, - 198, - 49, - 239, - 123, - 0, - 0, - 189, - 239, - 239, - 123, - 0, - 0, - 181, - 173, - 239, - 123, - 0, - 0, - 173, - 107, - 239, - 123, - 0, - 0, - 165, - 41, - 239, - 123, - 0, - 0, - 156, - 231, - 239, - 123, - 0, - 0, - 148, - 165, - 239, - 123, - 0, - 0, - 140, - 99, - 239, - 123, - 0, - 0, - 132, - 33, - 239, - 123, - 0, - 0, - 123, - 222, - 239, - 123, - 0, - 0, - 115, - 156, - 239, - 123, - 0, - 0, - 107, - 90, - 239, - 123, - 0, - 0, - 99, - 24, - 239, - 123, - 0, - 0, - 90, - 214, - 239, - 123, - 0, - 0, - 82, - 148, - 239, - 123, - 0, - 0, - 74, - 82, - 239, - 123, - 0, - 0, - 66, - 16, - 239, - 123, - 0, - 0, - 57, - 206, - 239, - 123, - 0, - 0, - 49, - 140, - 239, - 123, - 0, - 0, - 41, - 74, - 239, - 123, - 0, - 0, - 33, - 8, - 239, - 123, - 0, - 0, - 24, - 198, - 239, - 123, - 0, - 0, - 16, - 132, - 239, - 123, - 0, - 0, - 8, - 66, - 239, - 123, - 8, - 66, - 0, - 0, - 239, - 123, - 16, - 132, - 255, - 255, - 231, - 57, - 0, - 0, - 247, - 189, - 231, - 57, - 0, - 0, - 239, - 123, - 231, - 57, - 0, - 0, - 231, - 57, - 231, - 57, - 0, - 0, - 222, - 247, - 231, - 57, - 0, - 0, - 214, - 181, - 231, - 57, - 0, - 0, - 206, - 115, - 231, - 57, - 0, - 0, - 198, - 49, - 231, - 57, - 0, - 0, - 189, - 239, - 231, - 57, - 0, - 0, - 181, - 173, - 231, - 57, - 0, - 0, - 173, - 107, - 231, - 57, - 0, - 0, - 165, - 41, - 231, - 57, - 0, - 0, - 156, - 231, - 231, - 57, - 0, - 0, - 148, - 165, - 231, - 57, - 0, - 0, - 140, - 99, - 231, - 57, - 0, - 0, - 132, - 33, - 231, - 57, - 0, - 0, - 123, - 222, - 231, - 57, - 0, - 0, - 115, - 156, - 231, - 57, - 0, - 0, - 107, - 90, - 231, - 57, - 0, - 0, - 99, - 24, - 231, - 57, - 0, - 0, - 90, - 214, - 231, - 57, - 0, - 0, - 82, - 148, - 231, - 57, - 0, - 0, - 74, - 82, - 231, - 57, - 0, - 0, - 66, - 16, - 231, - 57, - 0, - 0, - 57, - 206, - 231, - 57, - 0, - 0, - 49, - 140, - 231, - 57, - 0, - 0, - 41, - 74, - 231, - 57, - 0, - 0, - 33, - 8, - 231, - 57, - 0, - 0, - 24, - 198, - 231, - 57, - 0, - 0, - 16, - 132, - 231, - 57, - 8, - 66, - 8, - 66, - 231, - 57, - 16, - 132, - 0, - 0, - 231, - 57, - 24, - 198, - 255, - 255, - 222, - 247, - 0, - 0, - 247, - 189, - 222, - 247, - 0, - 0, - 239, - 123, - 222, - 247, - 0, - 0, - 231, - 57, - 222, - 247, - 0, - 0, - 222, - 247, - 222, - 247, - 0, - 0, - 214, - 181, - 222, - 247, - 0, - 0, - 206, - 115, - 222, - 247, - 0, - 0, - 198, - 49, - 222, - 247, - 0, - 0, - 189, - 239, - 222, - 247, - 0, - 0, - 181, - 173, - 222, - 247, - 0, - 0, - 173, - 107, - 222, - 247, - 0, - 0, - 165, - 41, - 222, - 247, - 0, - 0, - 156, - 231, - 222, - 247, - 0, - 0, - 148, - 165, - 222, - 247, - 0, - 0, - 140, - 99, - 222, - 247, - 0, - 0, - 132, - 33, - 222, - 247, - 0, - 0, - 123, - 222, - 222, - 247, - 0, - 0, - 115, - 156, - 222, - 247, - 0, - 0, - 107, - 90, - 222, - 247, - 0, - 0, - 99, - 24, - 222, - 247, - 0, - 0, - 90, - 214, - 222, - 247, - 0, - 0, - 82, - 148, - 222, - 247, - 0, - 0, - 74, - 82, - 222, - 247, - 0, - 0, - 66, - 16, - 222, - 247, - 0, - 0, - 57, - 206, - 222, - 247, - 0, - 0, - 49, - 140, - 222, - 247, - 0, - 0, - 41, - 74, - 222, - 247, - 0, - 0, - 33, - 8, - 222, - 247, - 0, - 0, - 24, - 198, - 222, - 247, - 8, - 66, - 16, - 132, - 222, - 247, - 16, - 132, - 8, - 66, - 222, - 247, - 24, - 198, - 0, - 0, - 222, - 247, - 33, - 8, - 255, - 255, - 214, - 181, - 0, - 0, - 247, - 189, - 214, - 181, - 0, - 0, - 239, - 123, - 214, - 181, - 0, - 0, - 231, - 57, - 214, - 181, - 0, - 0, - 222, - 247, - 214, - 181, - 0, - 0, - 214, - 181, - 214, - 181, - 0, - 0, - 206, - 115, - 214, - 181, - 0, - 0, - 198, - 49, - 214, - 181, - 0, - 0, - 189, - 239, - 214, - 181, - 0, - 0, - 181, - 173, - 214, - 181, - 0, - 0, - 173, - 107, - 214, - 181, - 0, - 0, - 165, - 41, - 214, - 181, - 0, - 0, - 156, - 231, - 214, - 181, - 0, - 0, - 148, - 165, - 214, - 181, - 0, - 0, - 140, - 99, - 214, - 181, - 0, - 0, - 132, - 33, - 214, - 181, - 0, - 0, - 123, - 222, - 214, - 181, - 0, - 0, - 115, - 156, - 214, - 181, - 0, - 0, - 107, - 90, - 214, - 181, - 0, - 0, - 99, - 24, - 214, - 181, - 0, - 0, - 90, - 214, - 214, - 181, - 0, - 0, - 82, - 148, - 214, - 181, - 0, - 0, - 74, - 82, - 214, - 181, - 0, - 0, - 66, - 16, - 214, - 181, - 0, - 0, - 57, - 206, - 214, - 181, - 0, - 0, - 49, - 140, - 214, - 181, - 0, - 0, - 41, - 74, - 214, - 181, - 0, - 0, - 33, - 8, - 214, - 181, - 8, - 66, - 24, - 198, - 214, - 181, - 16, - 132, - 16, - 132, - 214, - 181, - 24, - 198, - 8, - 66, - 214, - 181, - 33, - 8, - 0, - 0, - 214, - 181, - 41, - 74, - 255, - 255, - 206, - 115, - 0, - 0, - 247, - 189, - 206, - 115, - 0, - 0, - 239, - 123, - 206, - 115, - 0, - 0, - 231, - 57, - 206, - 115, - 0, - 0, - 222, - 247, - 206, - 115, - 0, - 0, - 214, - 181, - 206, - 115, - 0, - 0, - 206, - 115, - 206, - 115, - 0, - 0, - 198, - 49, - 206, - 115, - 0, - 0, - 189, - 239, - 206, - 115, - 0, - 0, - 181, - 173, - 206, - 115, - 0, - 0, - 173, - 107, - 206, - 115, - 0, - 0, - 165, - 41, - 206, - 115, - 0, - 0, - 156, - 231, - 206, - 115, - 0, - 0, - 148, - 165, - 206, - 115, - 0, - 0, - 140, - 99, - 206, - 115, - 0, - 0, - 132, - 33, - 206, - 115, - 0, - 0, - 123, - 222, - 206, - 115, - 0, - 0, - 115, - 156, - 206, - 115, - 0, - 0, - 107, - 90, - 206, - 115, - 0, - 0, - 99, - 24, - 206, - 115, - 0, - 0, - 90, - 214, - 206, - 115, - 0, - 0, - 82, - 148, - 206, - 115, - 0, - 0, - 74, - 82, - 206, - 115, - 0, - 0, - 66, - 16, - 206, - 115, - 0, - 0, - 57, - 206, - 206, - 115, - 0, - 0, - 49, - 140, - 206, - 115, - 0, - 0, - 41, - 74, - 206, - 115, - 8, - 66, - 33, - 8, - 206, - 115, - 16, - 132, - 24, - 198, - 206, - 115, - 24, - 198, - 16, - 132, - 206, - 115, - 33, - 8, - 8, - 66, - 206, - 115, - 41, - 74, - 0, - 0, - 206, - 115, - 49, - 140, - 255, - 255, - 198, - 49, - 0, - 0, - 247, - 189, - 198, - 49, - 0, - 0, - 239, - 123, - 198, - 49, - 0, - 0, - 231, - 57, - 198, - 49, - 0, - 0, - 222, - 247, - 198, - 49, - 0, - 0, - 214, - 181, - 198, - 49, - 0, - 0, - 206, - 115, - 198, - 49, - 0, - 0, - 198, - 49, - 198, - 49, - 0, - 0, - 189, - 239, - 198, - 49, - 0, - 0, - 181, - 173, - 198, - 49, - 0, - 0, - 173, - 107, - 198, - 49, - 0, - 0, - 165, - 41, - 198, - 49, - 0, - 0, - 156, - 231, - 198, - 49, - 0, - 0, - 148, - 165, - 198, - 49, - 0, - 0, - 140, - 99, - 198, - 49, - 0, - 0, - 132, - 33, - 198, - 49, - 0, - 0, - 123, - 222, - 198, - 49, - 0, - 0, - 115, - 156, - 198, - 49, - 0, - 0, - 107, - 90, - 198, - 49, - 0, - 0, - 99, - 24, - 198, - 49, - 0, - 0, - 90, - 214, - 198, - 49, - 0, - 0, - 82, - 148, - 198, - 49, - 0, - 0, - 74, - 82, - 198, - 49, - 0, - 0, - 66, - 16, - 198, - 49, - 0, - 0, - 57, - 206, - 198, - 49, - 0, - 0, - 49, - 140, - 198, - 49, - 8, - 66, - 41, - 74, - 198, - 49, - 16, - 132, - 33, - 8, - 198, - 49, - 24, - 198, - 24, - 198, - 198, - 49, - 33, - 8, - 16, - 132, - 198, - 49, - 41, - 74, - 8, - 66, - 198, - 49, - 49, - 140, - 0, - 0, - 198, - 49, - 57, - 206, - 255, - 255, - 189, - 239, - 0, - 0, - 247, - 189, - 189, - 239, - 0, - 0, - 239, - 123, - 189, - 239, - 0, - 0, - 231, - 57, - 189, - 239, - 0, - 0, - 222, - 247, - 189, - 239, - 0, - 0, - 214, - 181, - 189, - 239, - 0, - 0, - 206, - 115, - 189, - 239, - 0, - 0, - 198, - 49, - 189, - 239, - 0, - 0, - 189, - 239, - 189, - 239, - 0, - 0, - 181, - 173, - 189, - 239, - 0, - 0, - 173, - 107, - 189, - 239, - 0, - 0, - 165, - 41, - 189, - 239, - 0, - 0, - 156, - 231, - 189, - 239, - 0, - 0, - 148, - 165, - 189, - 239, - 0, - 0, - 140, - 99, - 189, - 239, - 0, - 0, - 132, - 33, - 189, - 239, - 0, - 0, - 123, - 222, - 189, - 239, - 0, - 0, - 115, - 156, - 189, - 239, - 0, - 0, - 107, - 90, - 189, - 239, - 0, - 0, - 99, - 24, - 189, - 239, - 0, - 0, - 90, - 214, - 189, - 239, - 0, - 0, - 82, - 148, - 189, - 239, - 0, - 0, - 74, - 82, - 189, - 239, - 0, - 0, - 66, - 16, - 189, - 239, - 0, - 0, - 57, - 206, - 189, - 239, - 8, - 66, - 49, - 140, - 189, - 239, - 16, - 132, - 41, - 74, - 189, - 239, - 24, - 198, - 33, - 8, - 189, - 239, - 33, - 8, - 24, - 198, - 189, - 239, - 41, - 74, - 16, - 132, - 189, - 239, - 49, - 140, - 8, - 66, - 189, - 239, - 57, - 206, - 0, - 0, - 189, - 239, - 66, - 16, - 255, - 255, - 181, - 173, - 0, - 0, - 247, - 189, - 181, - 173, - 0, - 0, - 239, - 123, - 181, - 173, - 0, - 0, - 231, - 57, - 181, - 173, - 0, - 0, - 222, - 247, - 181, - 173, - 0, - 0, - 214, - 181, - 181, - 173, - 0, - 0, - 206, - 115, - 181, - 173, - 0, - 0, - 198, - 49, - 181, - 173, - 0, - 0, - 189, - 239, - 181, - 173, - 0, - 0, - 181, - 173, - 181, - 173, - 0, - 0, - 173, - 107, - 181, - 173, - 0, - 0, - 165, - 41, - 181, - 173, - 0, - 0, - 156, - 231, - 181, - 173, - 0, - 0, - 148, - 165, - 181, - 173, - 0, - 0, - 140, - 99, - 181, - 173, - 0, - 0, - 132, - 33, - 181, - 173, - 0, - 0, - 123, - 222, - 181, - 173, - 0, - 0, - 115, - 156, - 181, - 173, - 0, - 0, - 107, - 90, - 181, - 173, - 0, - 0, - 99, - 24, - 181, - 173, - 0, - 0, - 90, - 214, - 181, - 173, - 0, - 0, - 82, - 148, - 181, - 173, - 0, - 0, - 74, - 82, - 181, - 173, - 0, - 0, - 66, - 16, - 181, - 173, - 8, - 66, - 57, - 206, - 181, - 173, - 16, - 132, - 49, - 140, - 181, - 173, - 24, - 198, - 41, - 74, - 181, - 173, - 33, - 8, - 33, - 8, - 181, - 173, - 41, - 74, - 24, - 198, - 181, - 173, - 49, - 140, - 16, - 132, - 181, - 173, - 57, - 206, - 8, - 66, - 181, - 173, - 66, - 16, - 0, - 0, - 181, - 173, - 74, - 82, - 255, - 255, - 173, - 107, - 0, - 0, - 247, - 189, - 173, - 107, - 0, - 0, - 239, - 123, - 173, - 107, - 0, - 0, - 231, - 57, - 173, - 107, - 0, - 0, - 222, - 247, - 173, - 107, - 0, - 0, - 214, - 181, - 173, - 107, - 0, - 0, - 206, - 115, - 173, - 107, - 0, - 0, - 198, - 49, - 173, - 107, - 0, - 0, - 189, - 239, - 173, - 107, - 0, - 0, - 181, - 173, - 173, - 107, - 0, - 0, - 173, - 107, - 173, - 107, - 0, - 0, - 165, - 41, - 173, - 107, - 0, - 0, - 156, - 231, - 173, - 107, - 0, - 0, - 148, - 165, - 173, - 107, - 0, - 0, - 140, - 99, - 173, - 107, - 0, - 0, - 132, - 33, - 173, - 107, - 0, - 0, - 123, - 222, - 173, - 107, - 0, - 0, - 115, - 156, - 173, - 107, - 0, - 0, - 107, - 90, - 173, - 107, - 0, - 0, - 99, - 24, - 173, - 107, - 0, - 0, - 90, - 214, - 173, - 107, - 0, - 0, - 82, - 148, - 173, - 107, - 0, - 0, - 74, - 82, - 173, - 107, - 8, - 66, - 66, - 16, - 173, - 107, - 16, - 132, - 57, - 206, - 173, - 107, - 24, - 198, - 49, - 140, - 173, - 107, - 33, - 8, - 41, - 74, - 173, - 107, - 41, - 74, - 33, - 8, - 173, - 107, - 49, - 140, - 24, - 198, - 173, - 107, - 57, - 206, - 16, - 132, - 173, - 107, - 66, - 16, - 8, - 66, - 173, - 107, - 74, - 82, - 0, - 0, - 173, - 107, - 82, - 148, - 255, - 255, - 165, - 41, - 0, - 0, - 247, - 189, - 165, - 41, - 0, - 0, - 239, - 123, - 165, - 41, - 0, - 0, - 231, - 57, - 165, - 41, - 0, - 0, - 222, - 247, - 165, - 41, - 0, - 0, - 214, - 181, - 165, - 41, - 0, - 0, - 206, - 115, - 165, - 41, - 0, - 0, - 198, - 49, - 165, - 41, - 0, - 0, - 189, - 239, - 165, - 41, - 0, - 0, - 181, - 173, - 165, - 41, - 0, - 0, - 173, - 107, - 165, - 41, - 0, - 0, - 165, - 41, - 165, - 41, - 0, - 0, - 156, - 231, - 165, - 41, - 0, - 0, - 148, - 165, - 165, - 41, - 0, - 0, - 140, - 99, - 165, - 41, - 0, - 0, - 132, - 33, - 165, - 41, - 0, - 0, - 123, - 222, - 165, - 41, - 0, - 0, - 115, - 156, - 165, - 41, - 0, - 0, - 107, - 90, - 165, - 41, - 0, - 0, - 99, - 24, - 165, - 41, - 0, - 0, - 90, - 214, - 165, - 41, - 0, - 0, - 82, - 148, - 165, - 41, - 8, - 66, - 74, - 82, - 165, - 41, - 16, - 132, - 66, - 16, - 165, - 41, - 24, - 198, - 57, - 206, - 165, - 41, - 33, - 8, - 49, - 140, - 165, - 41, - 41, - 74, - 41, - 74, - 165, - 41, - 49, - 140, - 33, - 8, - 165, - 41, - 57, - 206, - 24, - 198, - 165, - 41, - 66, - 16, - 16, - 132, - 165, - 41, - 74, - 82, - 8, - 66, - 165, - 41, - 82, - 148, - 0, - 0, - 165, - 41, - 90, - 214, - 255, - 255, - 156, - 231, - 0, - 0, - 247, - 189, - 156, - 231, - 0, - 0, - 239, - 123, - 156, - 231, - 0, - 0, - 231, - 57, - 156, - 231, - 0, - 0, - 222, - 247, - 156, - 231, - 0, - 0, - 214, - 181, - 156, - 231, - 0, - 0, - 206, - 115, - 156, - 231, - 0, - 0, - 198, - 49, - 156, - 231, - 0, - 0, - 189, - 239, - 156, - 231, - 0, - 0, - 181, - 173, - 156, - 231, - 0, - 0, - 173, - 107, - 156, - 231, - 0, - 0, - 165, - 41, - 156, - 231, - 0, - 0, - 156, - 231, - 156, - 231, - 0, - 0, - 148, - 165, - 156, - 231, - 0, - 0, - 140, - 99, - 156, - 231, - 0, - 0, - 132, - 33, - 156, - 231, - 0, - 0, - 123, - 222, - 156, - 231, - 0, - 0, - 115, - 156, - 156, - 231, - 0, - 0, - 107, - 90, - 156, - 231, - 0, - 0, - 99, - 24, - 156, - 231, - 0, - 0, - 90, - 214, - 156, - 231, - 8, - 66, - 82, - 148, - 156, - 231, - 16, - 132, - 74, - 82, - 156, - 231, - 24, - 198, - 66, - 16, - 156, - 231, - 33, - 8, - 57, - 206, - 156, - 231, - 41, - 74, - 49, - 140, - 156, - 231, - 49, - 140, - 41, - 74, - 156, - 231, - 57, - 206, - 33, - 8, - 156, - 231, - 66, - 16, - 24, - 198, - 156, - 231, - 74, - 82, - 16, - 132, - 156, - 231, - 82, - 148, - 8, - 66, - 156, - 231, - 90, - 214, - 0, - 0, - 156, - 231, - 99, - 24, - 255, - 255, - 148, - 165, - 0, - 0, - 247, - 189, - 148, - 165, - 0, - 0, - 239, - 123, - 148, - 165, - 0, - 0, - 231, - 57, - 148, - 165, - 0, - 0, - 222, - 247, - 148, - 165, - 0, - 0, - 214, - 181, - 148, - 165, - 0, - 0, - 206, - 115, - 148, - 165, - 0, - 0, - 198, - 49, - 148, - 165, - 0, - 0, - 189, - 239, - 148, - 165, - 0, - 0, - 181, - 173, - 148, - 165, - 0, - 0, - 173, - 107, - 148, - 165, - 0, - 0, - 165, - 41, - 148, - 165, - 0, - 0, - 156, - 231, - 148, - 165, - 0, - 0, - 148, - 165, - 148, - 165, - 0, - 0, - 140, - 99, - 148, - 165, - 0, - 0, - 132, - 33, - 148, - 165, - 0, - 0, - 123, - 222, - 148, - 165, - 0, - 0, - 115, - 156, - 148, - 165, - 0, - 0, - 107, - 90, - 148, - 165, - 0, - 0, - 99, - 24, - 148, - 165, - 8, - 66, - 90, - 214, - 148, - 165, - 16, - 132, - 82, - 148, - 148, - 165, - 24, - 198, - 74, - 82, - 148, - 165, - 33, - 8, - 66, - 16, - 148, - 165, - 41, - 74, - 57, - 206, - 148, - 165, - 49, - 140, - 49, - 140, - 148, - 165, - 57, - 206, - 41, - 74, - 148, - 165, - 66, - 16, - 33, - 8, - 148, - 165, - 74, - 82, - 24, - 198, - 148, - 165, - 82, - 148, - 16, - 132, - 148, - 165, - 90, - 214, - 8, - 66, - 148, - 165, - 99, - 24, - 0, - 0, - 148, - 165, - 107, - 90, - 255, - 255, - 140, - 99, - 0, - 0, - 247, - 189, - 140, - 99, - 0, - 0, - 239, - 123, - 140, - 99, - 0, - 0, - 231, - 57, - 140, - 99, - 0, - 0, - 222, - 247, - 140, - 99, - 0, - 0, - 214, - 181, - 140, - 99, - 0, - 0, - 206, - 115, - 140, - 99, - 0, - 0, - 198, - 49, - 140, - 99, - 0, - 0, - 189, - 239, - 140, - 99, - 0, - 0, - 181, - 173, - 140, - 99, - 0, - 0, - 173, - 107, - 140, - 99, - 0, - 0, - 165, - 41, - 140, - 99, - 0, - 0, - 156, - 231, - 140, - 99, - 0, - 0, - 148, - 165, - 140, - 99, - 0, - 0, - 140, - 99, - 140, - 99, - 0, - 0, - 132, - 33, - 140, - 99, - 0, - 0, - 123, - 222, - 140, - 99, - 0, - 0, - 115, - 156, - 140, - 99, - 0, - 0, - 107, - 90, - 140, - 99, - 8, - 66, - 99, - 24, - 140, - 99, - 16, - 132, - 90, - 214, - 140, - 99, - 24, - 198, - 82, - 148, - 140, - 99, - 33, - 8, - 74, - 82, - 140, - 99, - 41, - 74, - 66, - 16, - 140, - 99, - 49, - 140, - 57, - 206, - 140, - 99, - 57, - 206, - 49, - 140, - 140, - 99, - 66, - 16, - 41, - 74, - 140, - 99, - 74, - 82, - 33, - 8, - 140, - 99, - 82, - 148, - 24, - 198, - 140, - 99, - 90, - 214, - 16, - 132, - 140, - 99, - 99, - 24, - 8, - 66, - 140, - 99, - 107, - 90, - 0, - 0, - 140, - 99, - 115, - 156, - 255, - 255, - 132, - 33, - 0, - 0, - 247, - 189, - 132, - 33, - 0, - 0, - 239, - 123, - 132, - 33, - 0, - 0, - 231, - 57, - 132, - 33, - 0, - 0, - 222, - 247, - 132, - 33, - 0, - 0, - 214, - 181, - 132, - 33, - 0, - 0, - 206, - 115, - 132, - 33, - 0, - 0, - 198, - 49, - 132, - 33, - 0, - 0, - 189, - 239, - 132, - 33, - 0, - 0, - 181, - 173, - 132, - 33, - 0, - 0, - 173, - 107, - 132, - 33, - 0, - 0, - 165, - 41, - 132, - 33, - 0, - 0, - 156, - 231, - 132, - 33, - 0, - 0, - 148, - 165, - 132, - 33, - 0, - 0, - 140, - 99, - 132, - 33, - 0, - 0, - 132, - 33, - 132, - 33, - 0, - 0, - 123, - 222, - 132, - 33, - 0, - 0, - 115, - 156, - 132, - 33, - 8, - 66, - 107, - 90, - 132, - 33, - 16, - 132, - 99, - 24, - 132, - 33, - 24, - 198, - 90, - 214, - 132, - 33, - 33, - 8, - 82, - 148, - 132, - 33, - 41, - 74, - 74, - 82, - 132, - 33, - 49, - 140, - 66, - 16, - 132, - 33, - 57, - 206, - 57, - 206, - 132, - 33, - 66, - 16, - 49, - 140, - 132, - 33, - 74, - 82, - 41, - 74, - 132, - 33, - 82, - 148, - 33, - 8, - 132, - 33, - 90, - 214, - 24, - 198, - 132, - 33, - 99, - 24, - 16, - 132, - 132, - 33, - 107, - 90, - 8, - 66, - 132, - 33, - 115, - 156, - 0, - 0, - 132, - 33, - 123, - 222, - 255, - 255, - 123, - 222, - 0, - 0, - 247, - 189, - 123, - 222, - 0, - 0, - 239, - 123, - 123, - 222, - 0, - 0, - 231, - 57, - 123, - 222, - 0, - 0, - 222, - 247, - 123, - 222, - 0, - 0, - 214, - 181, - 123, - 222, - 0, - 0, - 206, - 115, - 123, - 222, - 0, - 0, - 198, - 49, - 123, - 222, - 0, - 0, - 189, - 239, - 123, - 222, - 0, - 0, - 181, - 173, - 123, - 222, - 0, - 0, - 173, - 107, - 123, - 222, - 0, - 0, - 165, - 41, - 123, - 222, - 0, - 0, - 156, - 231, - 123, - 222, - 0, - 0, - 148, - 165, - 123, - 222, - 0, - 0, - 140, - 99, - 123, - 222, - 0, - 0, - 132, - 33, - 123, - 222, - 0, - 0, - 123, - 222, - 123, - 222, - 8, - 66, - 115, - 156, - 123, - 222, - 16, - 132, - 107, - 90, - 123, - 222, - 24, - 198, - 99, - 24, - 123, - 222, - 33, - 8, - 90, - 214, - 123, - 222, - 41, - 74, - 82, - 148, - 123, - 222, - 49, - 140, - 74, - 82, - 123, - 222, - 57, - 206, - 66, - 16, - 123, - 222, - 66, - 16, - 57, - 206, - 123, - 222, - 74, - 82, - 49, - 140, - 123, - 222, - 82, - 148, - 41, - 74, - 123, - 222, - 90, - 214, - 33, - 8, - 123, - 222, - 99, - 24, - 24, - 198, - 123, - 222, - 107, - 90, - 16, - 132, - 123, - 222, - 115, - 156, - 8, - 66, - 123, - 222, - 123, - 222, - 0, - 0, - 123, - 222, - 132, - 33, - 255, - 255, - 115, - 156, - 0, - 0, - 247, - 189, - 115, - 156, - 0, - 0, - 239, - 123, - 115, - 156, - 0, - 0, - 231, - 57, - 115, - 156, - 0, - 0, - 222, - 247, - 115, - 156, - 0, - 0, - 214, - 181, - 115, - 156, - 0, - 0, - 206, - 115, - 115, - 156, - 0, - 0, - 198, - 49, - 115, - 156, - 0, - 0, - 189, - 239, - 115, - 156, - 0, - 0, - 181, - 173, - 115, - 156, - 0, - 0, - 173, - 107, - 115, - 156, - 0, - 0, - 165, - 41, - 115, - 156, - 0, - 0, - 156, - 231, - 115, - 156, - 0, - 0, - 148, - 165, - 115, - 156, - 0, - 0, - 140, - 99, - 115, - 156, - 0, - 0, - 132, - 33, - 115, - 156, - 8, - 66, - 123, - 222, - 115, - 156, - 16, - 132, - 115, - 156, - 115, - 156, - 24, - 198, - 107, - 90, - 115, - 156, - 33, - 8, - 99, - 24, - 115, - 156, - 41, - 74, - 90, - 214, - 115, - 156, - 49, - 140, - 82, - 148, - 115, - 156, - 57, - 206, - 74, - 82, - 115, - 156, - 66, - 16, - 66, - 16, - 115, - 156, - 74, - 82, - 57, - 206, - 115, - 156, - 82, - 148, - 49, - 140, - 115, - 156, - 90, - 214, - 41, - 74, - 115, - 156, - 99, - 24, - 33, - 8, - 115, - 156, - 107, - 90, - 24, - 198, - 115, - 156, - 115, - 156, - 16, - 132, - 115, - 156, - 123, - 222, - 8, - 66, - 115, - 156, - 132, - 33, - 0, - 0, - 115, - 156, - 140, - 99, - 255, - 255, - 107, - 90, - 0, - 0, - 247, - 189, - 107, - 90, - 0, - 0, - 239, - 123, - 107, - 90, - 0, - 0, - 231, - 57, - 107, - 90, - 0, - 0, - 222, - 247, - 107, - 90, - 0, - 0, - 214, - 181, - 107, - 90, - 0, - 0, - 206, - 115, - 107, - 90, - 0, - 0, - 198, - 49, - 107, - 90, - 0, - 0, - 189, - 239, - 107, - 90, - 0, - 0, - 181, - 173, - 107, - 90, - 0, - 0, - 173, - 107, - 107, - 90, - 0, - 0, - 165, - 41, - 107, - 90, - 0, - 0, - 156, - 231, - 107, - 90, - 0, - 0, - 148, - 165, - 107, - 90, - 0, - 0, - 140, - 99, - 107, - 90, - 8, - 66, - 132, - 33, - 107, - 90, - 16, - 132, - 123, - 222, - 107, - 90, - 24, - 198, - 115, - 156, - 107, - 90, - 33, - 8, - 107, - 90, - 107, - 90, - 41, - 74, - 99, - 24, - 107, - 90, - 49, - 140, - 90, - 214, - 107, - 90, - 57, - 206, - 82, - 148, - 107, - 90, - 66, - 16, - 74, - 82, - 107, - 90, - 74, - 82, - 66, - 16, - 107, - 90, - 82, - 148, - 57, - 206, - 107, - 90, - 90, - 214, - 49, - 140, - 107, - 90, - 99, - 24, - 41, - 74, - 107, - 90, - 107, - 90, - 33, - 8, - 107, - 90, - 115, - 156, - 24, - 198, - 107, - 90, - 123, - 222, - 16, - 132, - 107, - 90, - 132, - 33, - 8, - 66, - 107, - 90, - 140, - 99, - 0, - 0, - 107, - 90, - 148, - 165, - 255, - 255, - 99, - 24, - 0, - 0, - 247, - 189, - 99, - 24, - 0, - 0, - 239, - 123, - 99, - 24, - 0, - 0, - 231, - 57, - 99, - 24, - 0, - 0, - 222, - 247, - 99, - 24, - 0, - 0, - 214, - 181, - 99, - 24, - 0, - 0, - 206, - 115, - 99, - 24, - 0, - 0, - 198, - 49, - 99, - 24, - 0, - 0, - 189, - 239, - 99, - 24, - 0, - 0, - 181, - 173, - 99, - 24, - 0, - 0, - 173, - 107, - 99, - 24, - 0, - 0, - 165, - 41, - 99, - 24, - 0, - 0, - 156, - 231, - 99, - 24, - 0, - 0, - 148, - 165, - 99, - 24, - 8, - 66, - 140, - 99, - 99, - 24, - 16, - 132, - 132, - 33, - 99, - 24, - 24, - 198, - 123, - 222, - 99, - 24, - 33, - 8, - 115, - 156, - 99, - 24, - 41, - 74, - 107, - 90, - 99, - 24, - 49, - 140, - 99, - 24, - 99, - 24, - 57, - 206, - 90, - 214, - 99, - 24, - 66, - 16, - 82, - 148, - 99, - 24, - 74, - 82, - 74, - 82, - 99, - 24, - 82, - 148, - 66, - 16, - 99, - 24, - 90, - 214, - 57, - 206, - 99, - 24, - 99, - 24, - 49, - 140, - 99, - 24, - 107, - 90, - 41, - 74, - 99, - 24, - 115, - 156, - 33, - 8, - 99, - 24, - 123, - 222, - 24, - 198, - 99, - 24, - 132, - 33, - 16, - 132, - 99, - 24, - 140, - 99, - 8, - 66, - 99, - 24, - 148, - 165, - 0, - 0, - 99, - 24, - 156, - 231, - 255, - 255, - 90, - 214, - 0, - 0, - 247, - 189, - 90, - 214, - 0, - 0, - 239, - 123, - 90, - 214, - 0, - 0, - 231, - 57, - 90, - 214, - 0, - 0, - 222, - 247, - 90, - 214, - 0, - 0, - 214, - 181, - 90, - 214, - 0, - 0, - 206, - 115, - 90, - 214, - 0, - 0, - 198, - 49, - 90, - 214, - 0, - 0, - 189, - 239, - 90, - 214, - 0, - 0, - 181, - 173, - 90, - 214, - 0, - 0, - 173, - 107, - 90, - 214, - 0, - 0, - 165, - 41, - 90, - 214, - 0, - 0, - 156, - 231, - 90, - 214, - 8, - 66, - 148, - 165, - 90, - 214, - 16, - 132, - 140, - 99, - 90, - 214, - 24, - 198, - 132, - 33, - 90, - 214, - 33, - 8, - 123, - 222, - 90, - 214, - 41, - 74, - 115, - 156, - 90, - 214, - 49, - 140, - 107, - 90, - 90, - 214, - 57, - 206, - 99, - 24, - 90, - 214, - 66, - 16, - 90, - 214, - 90, - 214, - 74, - 82, - 82, - 148, - 90, - 214, - 82, - 148, - 74, - 82, - 90, - 214, - 90, - 214, - 66, - 16, - 90, - 214, - 99, - 24, - 57, - 206, - 90, - 214, - 107, - 90, - 49, - 140, - 90, - 214, - 115, - 156, - 41, - 74, - 90, - 214, - 123, - 222, - 33, - 8, - 90, - 214, - 132, - 33, - 24, - 198, - 90, - 214, - 140, - 99, - 16, - 132, - 90, - 214, - 148, - 165, - 8, - 66, - 90, - 214, - 156, - 231, - 0, - 0, - 90, - 214, - 165, - 41, - 255, - 255, - 82, - 148, - 0, - 0, - 247, - 189, - 82, - 148, - 0, - 0, - 239, - 123, - 82, - 148, - 0, - 0, - 231, - 57, - 82, - 148, - 0, - 0, - 222, - 247, - 82, - 148, - 0, - 0, - 214, - 181, - 82, - 148, - 0, - 0, - 206, - 115, - 82, - 148, - 0, - 0, - 198, - 49, - 82, - 148, - 0, - 0, - 189, - 239, - 82, - 148, - 0, - 0, - 181, - 173, - 82, - 148, - 0, - 0, - 173, - 107, - 82, - 148, - 0, - 0, - 165, - 41, - 82, - 148, - 8, - 66, - 156, - 231, - 82, - 148, - 16, - 132, - 148, - 165, - 82, - 148, - 24, - 198, - 140, - 99, - 82, - 148, - 33, - 8, - 132, - 33, - 82, - 148, - 41, - 74, - 123, - 222, - 82, - 148, - 49, - 140, - 115, - 156, - 82, - 148, - 57, - 206, - 107, - 90, - 82, - 148, - 66, - 16, - 99, - 24, - 82, - 148, - 74, - 82, - 90, - 214, - 82, - 148, - 82, - 148, - 82, - 148, - 82, - 148, - 90, - 214, - 74, - 82, - 82, - 148, - 99, - 24, - 66, - 16, - 82, - 148, - 107, - 90, - 57, - 206, - 82, - 148, - 115, - 156, - 49, - 140, - 82, - 148, - 123, - 222, - 41, - 74, - 82, - 148, - 132, - 33, - 33, - 8, - 82, - 148, - 140, - 99, - 24, - 198, - 82, - 148, - 148, - 165, - 16, - 132, - 82, - 148, - 156, - 231, - 8, - 66, - 82, - 148, - 165, - 41, - 0, - 0, - 82, - 148, - 173, - 107, - 255, - 255, - 74, - 82, - 0, - 0, - 247, - 189, - 74, - 82, - 0, - 0, - 239, - 123, - 74, - 82, - 0, - 0, - 231, - 57, - 74, - 82, - 0, - 0, - 222, - 247, - 74, - 82, - 0, - 0, - 214, - 181, - 74, - 82, - 0, - 0, - 206, - 115, - 74, - 82, - 0, - 0, - 198, - 49, - 74, - 82, - 0, - 0, - 189, - 239, - 74, - 82, - 0, - 0, - 181, - 173, - 74, - 82, - 0, - 0, - 173, - 107, - 74, - 82, - 8, - 66, - 165, - 41, - 74, - 82, - 16, - 132, - 156, - 231, - 74, - 82, - 24, - 198, - 148, - 165, - 74, - 82, - 33, - 8, - 140, - 99, - 74, - 82, - 41, - 74, - 132, - 33, - 74, - 82, - 49, - 140, - 123, - 222, - 74, - 82, - 57, - 206, - 115, - 156, - 74, - 82, - 66, - 16, - 107, - 90, - 74, - 82, - 74, - 82, - 99, - 24, - 74, - 82, - 82, - 148, - 90, - 214, - 74, - 82, - 90, - 214, - 82, - 148, - 74, - 82, - 99, - 24, - 74, - 82, - 74, - 82, - 107, - 90, - 66, - 16, - 74, - 82, - 115, - 156, - 57, - 206, - 74, - 82, - 123, - 222, - 49, - 140, - 74, - 82, - 132, - 33, - 41, - 74, - 74, - 82, - 140, - 99, - 33, - 8, - 74, - 82, - 148, - 165, - 24, - 198, - 74, - 82, - 156, - 231, - 16, - 132, - 74, - 82, - 165, - 41, - 8, - 66, - 74, - 82, - 173, - 107, - 0, - 0, - 74, - 82, - 181, - 173, - 255, - 255, - 66, - 16, - 0, - 0, - 247, - 189, - 66, - 16, - 0, - 0, - 239, - 123, - 66, - 16, - 0, - 0, - 231, - 57, - 66, - 16, - 0, - 0, - 222, - 247, - 66, - 16, - 0, - 0, - 214, - 181, - 66, - 16, - 0, - 0, - 206, - 115, - 66, - 16, - 0, - 0, - 198, - 49, - 66, - 16, - 0, - 0, - 189, - 239, - 66, - 16, - 0, - 0, - 181, - 173, - 66, - 16, - 8, - 66, - 173, - 107, - 66, - 16, - 16, - 132, - 165, - 41, - 66, - 16, - 24, - 198, - 156, - 231, - 66, - 16, - 33, - 8, - 148, - 165, - 66, - 16, - 41, - 74, - 140, - 99, - 66, - 16, - 49, - 140, - 132, - 33, - 66, - 16, - 57, - 206, - 123, - 222, - 66, - 16, - 66, - 16, - 115, - 156, - 66, - 16, - 74, - 82, - 107, - 90, - 66, - 16, - 82, - 148, - 99, - 24, - 66, - 16, - 90, - 214, - 90, - 214, - 66, - 16, - 99, - 24, - 82, - 148, - 66, - 16, - 107, - 90, - 74, - 82, - 66, - 16, - 115, - 156, - 66, - 16, - 66, - 16, - 123, - 222, - 57, - 206, - 66, - 16, - 132, - 33, - 49, - 140, - 66, - 16, - 140, - 99, - 41, - 74, - 66, - 16, - 148, - 165, - 33, - 8, - 66, - 16, - 156, - 231, - 24, - 198, - 66, - 16, - 165, - 41, - 16, - 132, - 66, - 16, - 173, - 107, - 8, - 66, - 66, - 16, - 181, - 173, - 0, - 0, - 66, - 16, - 189, - 239, - 255, - 255, - 57, - 206, - 0, - 0, - 247, - 189, - 57, - 206, - 0, - 0, - 239, - 123, - 57, - 206, - 0, - 0, - 231, - 57, - 57, - 206, - 0, - 0, - 222, - 247, - 57, - 206, - 0, - 0, - 214, - 181, - 57, - 206, - 0, - 0, - 206, - 115, - 57, - 206, - 0, - 0, - 198, - 49, - 57, - 206, - 0, - 0, - 189, - 239, - 57, - 206, - 8, - 66, - 181, - 173, - 57, - 206, - 16, - 132, - 173, - 107, - 57, - 206, - 24, - 198, - 165, - 41, - 57, - 206, - 33, - 8, - 156, - 231, - 57, - 206, - 41, - 74, - 148, - 165, - 57, - 206, - 49, - 140, - 140, - 99, - 57, - 206, - 57, - 206, - 132, - 33, - 57, - 206, - 66, - 16, - 123, - 222, - 57, - 206, - 74, - 82, - 115, - 156, - 57, - 206, - 82, - 148, - 107, - 90, - 57, - 206, - 90, - 214, - 99, - 24, - 57, - 206, - 99, - 24, - 90, - 214, - 57, - 206, - 107, - 90, - 82, - 148, - 57, - 206, - 115, - 156, - 74, - 82, - 57, - 206, - 123, - 222, - 66, - 16, - 57, - 206, - 132, - 33, - 57, - 206, - 57, - 206, - 140, - 99, - 49, - 140, - 57, - 206, - 148, - 165, - 41, - 74, - 57, - 206, - 156, - 231, - 33, - 8, - 57, - 206, - 165, - 41, - 24, - 198, - 57, - 206, - 173, - 107, - 16, - 132, - 57, - 206, - 181, - 173, - 8, - 66, - 57, - 206, - 189, - 239, - 0, - 0, - 57, - 206, - 198, - 49, - 255, - 255, - 49, - 140, - 0, - 0, - 247, - 189, - 49, - 140, - 0, - 0, - 239, - 123, - 49, - 140, - 0, - 0, - 231, - 57, - 49, - 140, - 0, - 0, - 222, - 247, - 49, - 140, - 0, - 0, - 214, - 181, - 49, - 140, - 0, - 0, - 206, - 115, - 49, - 140, - 0, - 0, - 198, - 49, - 49, - 140, - 8, - 66, - 189, - 239, - 49, - 140, - 16, - 132, - 181, - 173, - 49, - 140, - 24, - 198, - 173, - 107, - 49, - 140, - 33, - 8, - 165, - 41, - 49, - 140, - 41, - 74, - 156, - 231, - 49, - 140, - 49, - 140, - 148, - 165, - 49, - 140, - 57, - 206, - 140, - 99, - 49, - 140, - 66, - 16, - 132, - 33, - 49, - 140, - 74, - 82, - 123, - 222, - 49, - 140, - 82, - 148, - 115, - 156, - 49, - 140, - 90, - 214, - 107, - 90, - 49, - 140, - 99, - 24, - 99, - 24, - 49, - 140, - 107, - 90, - 90, - 214, - 49, - 140, - 115, - 156, - 82, - 148, - 49, - 140, - 123, - 222, - 74, - 82, - 49, - 140, - 132, - 33, - 66, - 16, - 49, - 140, - 140, - 99, - 57, - 206, - 49, - 140, - 148, - 165, - 49, - 140, - 49, - 140, - 156, - 231, - 41, - 74, - 49, - 140, - 165, - 41, - 33, - 8, - 49, - 140, - 173, - 107, - 24, - 198, - 49, - 140, - 181, - 173, - 16, - 132, - 49, - 140, - 189, - 239, - 8, - 66, - 49, - 140, - 198, - 49, - 0, - 0, - 49, - 140, - 206, - 115, - 255, - 255, - 41, - 74, - 0, - 0, - 247, - 189, - 41, - 74, - 0, - 0, - 239, - 123, - 41, - 74, - 0, - 0, - 231, - 57, - 41, - 74, - 0, - 0, - 222, - 247, - 41, - 74, - 0, - 0, - 214, - 181, - 41, - 74, - 0, - 0, - 206, - 115, - 41, - 74, - 8, - 66, - 198, - 49, - 41, - 74, - 16, - 132, - 189, - 239, - 41, - 74, - 24, - 198, - 181, - 173, - 41, - 74, - 33, - 8, - 173, - 107, - 41, - 74, - 41, - 74, - 165, - 41, - 41, - 74, - 49, - 140, - 156, - 231, - 41, - 74, - 57, - 206, - 148, - 165, - 41, - 74, - 66, - 16, - 140, - 99, - 41, - 74, - 74, - 82, - 132, - 33, - 41, - 74, - 82, - 148, - 123, - 222, - 41, - 74, - 90, - 214, - 115, - 156, - 41, - 74, - 99, - 24, - 107, - 90, - 41, - 74, - 107, - 90, - 99, - 24, - 41, - 74, - 115, - 156, - 90, - 214, - 41, - 74, - 123, - 222, - 82, - 148, - 41, - 74, - 132, - 33, - 74, - 82, - 41, - 74, - 140, - 99, - 66, - 16, - 41, - 74, - 148, - 165, - 57, - 206, - 41, - 74, - 156, - 231, - 49, - 140, - 41, - 74, - 165, - 41, - 41, - 74, - 41, - 74, - 173, - 107, - 33, - 8, - 41, - 74, - 181, - 173, - 24, - 198, - 41, - 74, - 189, - 239, - 16, - 132, - 41, - 74, - 198, - 49, - 8, - 66, - 41, - 74, - 206, - 115, - 0, - 0, - 41, - 74, - 214, - 181, - 255, - 255, - 33, - 8, - 0, - 0, - 247, - 189, - 33, - 8, - 0, - 0, - 239, - 123, - 33, - 8, - 0, - 0, - 231, - 57, - 33, - 8, - 0, - 0, - 222, - 247, - 33, - 8, - 0, - 0, - 214, - 181, - 33, - 8, - 8, - 66, - 206, - 115, - 33, - 8, - 16, - 132, - 198, - 49, - 33, - 8, - 24, - 198, - 189, - 239, - 33, - 8, - 33, - 8, - 181, - 173, - 33, - 8, - 41, - 74, - 173, - 107, - 33, - 8, - 49, - 140, - 165, - 41, - 33, - 8, - 57, - 206, - 156, - 231, - 33, - 8, - 66, - 16, - 148, - 165, - 33, - 8, - 74, - 82, - 140, - 99, - 33, - 8, - 82, - 148, - 132, - 33, - 33, - 8, - 90, - 214, - 123, - 222, - 33, - 8, - 99, - 24, - 115, - 156, - 33, - 8, - 107, - 90, - 107, - 90, - 33, - 8, - 115, - 156, - 99, - 24, - 33, - 8, - 123, - 222, - 90, - 214, - 33, - 8, - 132, - 33, - 82, - 148, - 33, - 8, - 140, - 99, - 74, - 82, - 33, - 8, - 148, - 165, - 66, - 16, - 33, - 8, - 156, - 231, - 57, - 206, - 33, - 8, - 165, - 41, - 49, - 140, - 33, - 8, - 173, - 107, - 41, - 74, - 33, - 8, - 181, - 173, - 33, - 8, - 33, - 8, - 189, - 239, - 24, - 198, - 33, - 8, - 198, - 49, - 16, - 132, - 33, - 8, - 206, - 115, - 8, - 66, - 33, - 8, - 214, - 181, - 0, - 0, - 33, - 8, - 222, - 247, - 255, - 255, - 24, - 198, - 0, - 0, - 247, - 189, - 24, - 198, - 0, - 0, - 239, - 123, - 24, - 198, - 0, - 0, - 231, - 57, - 24, - 198, - 0, - 0, - 222, - 247, - 24, - 198, - 8, - 66, - 214, - 181, - 24, - 198, - 16, - 132, - 206, - 115, - 24, - 198, - 24, - 198, - 198, - 49, - 24, - 198, - 33, - 8, - 189, - 239, - 24, - 198, - 41, - 74, - 181, - 173, - 24, - 198, - 49, - 140, - 173, - 107, - 24, - 198, - 57, - 206, - 165, - 41, - 24, - 198, - 66, - 16, - 156, - 231, - 24, - 198, - 74, - 82, - 148, - 165, - 24, - 198, - 82, - 148, - 140, - 99, - 24, - 198, - 90, - 214, - 132, - 33, - 24, - 198, - 99, - 24, - 123, - 222, - 24, - 198, - 107, - 90, - 115, - 156, - 24, - 198, - 115, - 156, - 107, - 90, - 24, - 198, - 123, - 222, - 99, - 24, - 24, - 198, - 132, - 33, - 90, - 214, - 24, - 198, - 140, - 99, - 82, - 148, - 24, - 198, - 148, - 165, - 74, - 82, - 24, - 198, - 156, - 231, - 66, - 16, - 24, - 198, - 165, - 41, - 57, - 206, - 24, - 198, - 173, - 107, - 49, - 140, - 24, - 198, - 181, - 173, - 41, - 74, - 24, - 198, - 189, - 239, - 33, - 8, - 24, - 198, - 198, - 49, - 24, - 198, - 24, - 198, - 206, - 115, - 16, - 132, - 24, - 198, - 214, - 181, - 8, - 66, - 24, - 198, - 222, - 247, - 0, - 0, - 24, - 198, - 231, - 57, - 255, - 255, - 16, - 132, - 0, - 0, - 247, - 189, - 16, - 132, - 0, - 0, - 239, - 123, - 16, - 132, - 0, - 0, - 231, - 57, - 16, - 132, - 8, - 66, - 222, - 247, - 16, - 132, - 16, - 132, - 214, - 181, - 16, - 132, - 24, - 198, - 206, - 115, - 16, - 132, - 33, - 8, - 198, - 49, - 16, - 132, - 41, - 74, - 189, - 239, - 16, - 132, - 49, - 140, - 181, - 173, - 16, - 132, - 57, - 206, - 173, - 107, - 16, - 132, - 66, - 16, - 165, - 41, - 16, - 132, - 74, - 82, - 156, - 231, - 16, - 132, - 82, - 148, - 148, - 165, - 16, - 132, - 90, - 214, - 140, - 99, - 16, - 132, - 99, - 24, - 132, - 33, - 16, - 132, - 107, - 90, - 123, - 222, - 16, - 132, - 115, - 156, - 115, - 156, - 16, - 132, - 123, - 222, - 107, - 90, - 16, - 132, - 132, - 33, - 99, - 24, - 16, - 132, - 140, - 99, - 90, - 214, - 16, - 132, - 148, - 165, - 82, - 148, - 16, - 132, - 156, - 231, - 74, - 82, - 16, - 132, - 165, - 41, - 66, - 16, - 16, - 132, - 173, - 107, - 57, - 206, - 16, - 132, - 181, - 173, - 49, - 140, - 16, - 132, - 189, - 239, - 41, - 74, - 16, - 132, - 198, - 49, - 33, - 8, - 16, - 132, - 206, - 115, - 24, - 198, - 16, - 132, - 214, - 181, - 16, - 132, - 16, - 132, - 222, - 247, - 8, - 66, - 16, - 132, - 231, - 57, - 0, - 0, - 16, - 132, - 239, - 123, - 255, - 255, - 8, - 66, - 0, - 0, - 247, - 189, - 8, - 66, - 0, - 0, - 239, - 123, - 8, - 66, - 8, - 66, - 231, - 57, - 8, - 66, - 16, - 132, - 222, - 247, - 8, - 66, - 24, - 198, - 214, - 181, - 8, - 66, - 33, - 8, - 206, - 115, - 8, - 66, - 41, - 74, - 198, - 49, - 8, - 66, - 49, - 140, - 189, - 239, - 8, - 66, - 57, - 206, - 181, - 173, - 8, - 66, - 66, - 16, - 173, - 107, - 8, - 66, - 74, - 82, - 165, - 41, - 8, - 66, - 82, - 148, - 156, - 231, - 8, - 66, - 90, - 214, - 148, - 165, - 8, - 66, - 99, - 24, - 140, - 99, - 8, - 66, - 107, - 90, - 132, - 33, - 8, - 66, - 115, - 156, - 123, - 222, - 8, - 66, - 123, - 222, - 115, - 156, - 8, - 66, - 132, - 33, - 107, - 90, - 8, - 66, - 140, - 99, - 99, - 24, - 8, - 66, - 148, - 165, - 90, - 214, - 8, - 66, - 156, - 231, - 82, - 148, - 8, - 66, - 165, - 41, - 74, - 82, - 8, - 66, - 173, - 107, - 66, - 16, - 8, - 66, - 181, - 173, - 57, - 206, - 8, - 66, - 189, - 239, - 49, - 140, - 8, - 66, - 198, - 49, - 41, - 74, - 8, - 66, - 206, - 115, - 33, - 8, - 8, - 66, - 214, - 181, - 24, - 198, - 8, - 66, - 222, - 247, - 16, - 132, - 8, - 66, - 231, - 57, - 8, - 66, - 8, - 66, - 239, - 123, - 0, - 0, - 8, - 66, - 247, - 189, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 8, - 66, - 239, - 123, - 0, - 0, - 16, - 132, - 231, - 57, - 0, - 0, - 24, - 198, - 222, - 247, - 0, - 0, - 33, - 8, - 214, - 181, - 0, - 0, - 41, - 74, - 206, - 115, - 0, - 0, - 49, - 140, - 198, - 49, - 0, - 0, - 57, - 206, - 189, - 239, - 0, - 0, - 66, - 16, - 181, - 173, - 0, - 0, - 74, - 82, - 173, - 107, - 0, - 0, - 82, - 148, - 165, - 41, - 0, - 0, - 90, - 214, - 156, - 231, - 0, - 0, - 99, - 24, - 148, - 165, - 0, - 0, - 107, - 90, - 140, - 99, - 0, - 0, - 115, - 156, - 132, - 33, - 0, - 0, - 123, - 222, - 123, - 222, - 0, - 0, - 132, - 33, - 115, - 156, - 0, - 0, - 140, - 99, - 107, - 90, - 0, - 0, - 148, - 165, - 99, - 24, - 0, - 0, - 156, - 231, - 90, - 214, - 0, - 0, - 165, - 41, - 82, - 148, - 0, - 0, - 173, - 107, - 74, - 82, - 0, - 0, - 181, - 173, - 66, - 16, - 0, - 0, - 189, - 239, - 57, - 206, - 0, - 0, - 198, - 49, - 49, - 140, - 0, - 0, - 206, - 115, - 41, - 74, - 0, - 0, - 214, - 181, - 33, - 8, - 0, - 0, - 222, - 247, - 24, - 198, - 0, - 0, - 231, - 57, - 16, - 132, - 0, - 0, - 239, - 123, - 8, - 66, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, -] -`; - -exports[`pixels browser interlaced-rgb-alpha-8bit.png 1`] = ` -Uint8Array [ - 255, - 0, - 8, - 0, - 255, - 0, - 8, - 8, - 255, - 0, - 8, - 16, - 255, - 0, - 8, - 24, - 255, - 0, - 8, - 32, - 255, - 0, - 8, - 41, - 255, - 0, - 8, - 49, - 255, - 0, - 8, - 57, - 255, - 0, - 8, - 65, - 255, - 0, - 8, - 74, - 255, - 0, - 8, - 82, - 255, - 0, - 8, - 90, - 255, - 0, - 8, - 98, - 255, - 0, - 8, - 106, - 255, - 0, - 8, - 115, - 255, - 0, - 8, - 123, - 255, - 0, - 8, - 131, - 255, - 0, - 8, - 139, - 255, - 0, - 8, - 148, - 255, - 0, - 8, - 156, - 255, - 0, - 8, - 164, - 255, - 0, - 8, - 172, - 255, - 0, - 8, - 180, - 255, - 0, - 8, - 189, - 255, - 0, - 8, - 197, - 255, - 0, - 8, - 205, - 255, - 0, - 8, - 213, - 255, - 0, - 8, - 222, - 255, - 0, - 8, - 230, - 255, - 0, - 8, - 238, - 255, - 0, - 8, - 246, - 255, - 0, - 8, - 255, - 255, - 31, - 8, - 0, - 255, - 31, - 8, - 8, - 255, - 31, - 8, - 16, - 255, - 31, - 8, - 24, - 255, - 31, - 8, - 32, - 255, - 31, - 8, - 41, - 255, - 31, - 8, - 49, - 255, - 31, - 8, - 57, - 255, - 31, - 8, - 65, - 255, - 31, - 8, - 74, - 255, - 31, - 8, - 82, - 255, - 31, - 8, - 90, - 255, - 31, - 8, - 98, - 255, - 31, - 8, - 106, - 255, - 31, - 8, - 115, - 255, - 31, - 8, - 123, - 255, - 31, - 8, - 131, - 255, - 31, - 8, - 139, - 255, - 31, - 8, - 148, - 255, - 31, - 8, - 156, - 255, - 31, - 8, - 164, - 255, - 31, - 8, - 172, - 255, - 31, - 8, - 180, - 255, - 31, - 8, - 189, - 255, - 31, - 8, - 197, - 255, - 31, - 8, - 205, - 255, - 31, - 8, - 213, - 255, - 31, - 8, - 222, - 255, - 31, - 8, - 230, - 255, - 31, - 8, - 238, - 255, - 31, - 8, - 246, - 255, - 31, - 8, - 255, - 255, - 63, - 8, - 0, - 255, - 63, - 8, - 8, - 255, - 63, - 8, - 16, - 255, - 63, - 8, - 24, - 255, - 63, - 8, - 32, - 255, - 63, - 8, - 41, - 255, - 63, - 8, - 49, - 255, - 63, - 8, - 57, - 255, - 63, - 8, - 65, - 255, - 63, - 8, - 74, - 255, - 63, - 8, - 82, - 255, - 63, - 8, - 90, - 255, - 63, - 8, - 98, - 255, - 63, - 8, - 106, - 255, - 63, - 8, - 115, - 255, - 63, - 8, - 123, - 255, - 63, - 8, - 131, - 255, - 63, - 8, - 139, - 255, - 63, - 8, - 148, - 255, - 63, - 8, - 156, - 255, - 63, - 8, - 164, - 255, - 63, - 8, - 172, - 255, - 63, - 8, - 180, - 255, - 63, - 8, - 189, - 255, - 63, - 8, - 197, - 255, - 63, - 8, - 205, - 255, - 63, - 8, - 213, - 255, - 63, - 8, - 222, - 255, - 63, - 8, - 230, - 255, - 63, - 8, - 238, - 255, - 63, - 8, - 246, - 255, - 63, - 8, - 255, - 255, - 95, - 8, - 0, - 255, - 95, - 8, - 8, - 255, - 95, - 8, - 16, - 255, - 95, - 8, - 24, - 255, - 95, - 8, - 32, - 255, - 95, - 8, - 41, - 255, - 95, - 8, - 49, - 255, - 95, - 8, - 57, - 255, - 95, - 8, - 65, - 255, - 95, - 8, - 74, - 255, - 95, - 8, - 82, - 255, - 95, - 8, - 90, - 255, - 95, - 8, - 98, - 255, - 95, - 8, - 106, - 255, - 95, - 8, - 115, - 255, - 95, - 8, - 123, - 255, - 95, - 8, - 131, - 255, - 95, - 8, - 139, - 255, - 95, - 8, - 148, - 255, - 95, - 8, - 156, - 255, - 95, - 8, - 164, - 255, - 95, - 8, - 172, - 255, - 95, - 8, - 180, - 255, - 95, - 8, - 189, - 255, - 95, - 8, - 197, - 255, - 95, - 8, - 205, - 255, - 95, - 8, - 213, - 255, - 95, - 8, - 222, - 255, - 95, - 8, - 230, - 255, - 95, - 8, - 238, - 255, - 95, - 8, - 246, - 255, - 95, - 8, - 255, - 255, - 127, - 7, - 0, - 255, - 127, - 7, - 8, - 255, - 127, - 7, - 16, - 255, - 127, - 7, - 24, - 255, - 127, - 7, - 32, - 255, - 127, - 7, - 41, - 255, - 127, - 7, - 49, - 255, - 127, - 7, - 57, - 255, - 127, - 7, - 65, - 255, - 127, - 7, - 74, - 255, - 127, - 7, - 82, - 255, - 127, - 7, - 90, - 255, - 127, - 7, - 98, - 255, - 127, - 7, - 106, - 255, - 127, - 7, - 115, - 255, - 127, - 7, - 123, - 255, - 127, - 7, - 131, - 255, - 127, - 7, - 139, - 255, - 127, - 7, - 148, - 255, - 127, - 7, - 156, - 255, - 127, - 7, - 164, - 255, - 127, - 7, - 172, - 255, - 127, - 7, - 180, - 255, - 127, - 7, - 189, - 255, - 127, - 7, - 197, - 255, - 127, - 7, - 205, - 255, - 127, - 7, - 213, - 255, - 127, - 7, - 222, - 255, - 127, - 7, - 230, - 255, - 127, - 7, - 238, - 255, - 127, - 7, - 246, - 255, - 127, - 7, - 255, - 255, - 159, - 7, - 0, - 255, - 159, - 7, - 8, - 255, - 159, - 7, - 16, - 255, - 159, - 7, - 24, - 255, - 159, - 7, - 32, - 255, - 159, - 7, - 41, - 255, - 159, - 7, - 49, - 255, - 159, - 7, - 57, - 255, - 159, - 7, - 65, - 255, - 159, - 7, - 74, - 255, - 159, - 7, - 82, - 255, - 159, - 7, - 90, - 255, - 159, - 7, - 98, - 255, - 159, - 7, - 106, - 255, - 159, - 7, - 115, - 255, - 159, - 7, - 123, - 255, - 159, - 7, - 131, - 255, - 159, - 7, - 139, - 255, - 159, - 7, - 148, - 255, - 159, - 7, - 156, - 255, - 159, - 7, - 164, - 255, - 159, - 7, - 172, - 255, - 159, - 7, - 180, - 255, - 159, - 7, - 189, - 255, - 159, - 7, - 197, - 255, - 159, - 7, - 205, - 255, - 159, - 7, - 213, - 255, - 159, - 7, - 222, - 255, - 159, - 7, - 230, - 255, - 159, - 7, - 238, - 255, - 159, - 7, - 246, - 255, - 159, - 7, - 255, - 255, - 191, - 7, - 0, - 255, - 191, - 7, - 8, - 255, - 191, - 7, - 16, - 255, - 191, - 7, - 24, - 255, - 191, - 7, - 32, - 255, - 191, - 7, - 41, - 255, - 191, - 7, - 49, - 255, - 191, - 7, - 57, - 255, - 191, - 7, - 65, - 255, - 191, - 7, - 74, - 255, - 191, - 7, - 82, - 255, - 191, - 7, - 90, - 255, - 191, - 7, - 98, - 255, - 191, - 7, - 106, - 255, - 191, - 7, - 115, - 255, - 191, - 7, - 123, - 255, - 191, - 7, - 131, - 255, - 191, - 7, - 139, - 255, - 191, - 7, - 148, - 255, - 191, - 7, - 156, - 255, - 191, - 7, - 164, - 255, - 191, - 7, - 172, - 255, - 191, - 7, - 180, - 255, - 191, - 7, - 189, - 255, - 191, - 7, - 197, - 255, - 191, - 7, - 205, - 255, - 191, - 7, - 213, - 255, - 191, - 7, - 222, - 255, - 191, - 7, - 230, - 255, - 191, - 7, - 238, - 255, - 191, - 7, - 246, - 255, - 191, - 7, - 255, - 255, - 223, - 7, - 0, - 255, - 223, - 7, - 8, - 255, - 223, - 7, - 16, - 255, - 223, - 7, - 24, - 255, - 223, - 7, - 32, - 255, - 223, - 7, - 41, - 255, - 223, - 7, - 49, - 255, - 223, - 7, - 57, - 255, - 223, - 7, - 65, - 255, - 223, - 7, - 74, - 255, - 223, - 7, - 82, - 255, - 223, - 7, - 90, - 255, - 223, - 7, - 98, - 255, - 223, - 7, - 106, - 255, - 223, - 7, - 115, - 255, - 223, - 7, - 123, - 255, - 223, - 7, - 131, - 255, - 223, - 7, - 139, - 255, - 223, - 7, - 148, - 255, - 223, - 7, - 156, - 255, - 223, - 7, - 164, - 255, - 223, - 7, - 172, - 255, - 223, - 7, - 180, - 255, - 223, - 7, - 189, - 255, - 223, - 7, - 197, - 255, - 223, - 7, - 205, - 255, - 223, - 7, - 213, - 255, - 223, - 7, - 222, - 255, - 223, - 7, - 230, - 255, - 223, - 7, - 238, - 255, - 223, - 7, - 246, - 255, - 223, - 7, - 255, - 255, - 255, - 6, - 0, - 255, - 255, - 6, - 8, - 255, - 255, - 6, - 16, - 255, - 255, - 6, - 24, - 255, - 255, - 6, - 32, - 255, - 255, - 6, - 41, - 255, - 255, - 6, - 49, - 255, - 255, - 6, - 57, - 255, - 255, - 6, - 65, - 255, - 255, - 6, - 74, - 255, - 255, - 6, - 82, - 255, - 255, - 6, - 90, - 255, - 255, - 6, - 98, - 255, - 255, - 6, - 106, - 255, - 255, - 6, - 115, - 255, - 255, - 6, - 123, - 255, - 255, - 6, - 131, - 255, - 255, - 6, - 139, - 255, - 255, - 6, - 148, - 255, - 255, - 6, - 156, - 255, - 255, - 6, - 164, - 255, - 255, - 6, - 172, - 255, - 255, - 6, - 180, - 255, - 255, - 6, - 189, - 255, - 255, - 6, - 197, - 255, - 255, - 6, - 205, - 255, - 255, - 6, - 213, - 255, - 255, - 6, - 222, - 255, - 255, - 6, - 230, - 255, - 255, - 6, - 238, - 255, - 255, - 6, - 246, - 255, - 255, - 6, - 255, - 224, - 255, - 6, - 0, - 224, - 255, - 6, - 8, - 224, - 255, - 6, - 16, - 224, - 255, - 6, - 24, - 224, - 255, - 6, - 32, - 224, - 255, - 6, - 41, - 224, - 255, - 6, - 49, - 224, - 255, - 6, - 57, - 224, - 255, - 6, - 65, - 224, - 255, - 6, - 74, - 224, - 255, - 6, - 82, - 224, - 255, - 6, - 90, - 224, - 255, - 6, - 98, - 224, - 255, - 6, - 106, - 224, - 255, - 6, - 115, - 224, - 255, - 6, - 123, - 224, - 255, - 6, - 131, - 224, - 255, - 6, - 139, - 224, - 255, - 6, - 148, - 224, - 255, - 6, - 156, - 224, - 255, - 6, - 164, - 224, - 255, - 6, - 172, - 224, - 255, - 6, - 180, - 224, - 255, - 6, - 189, - 224, - 255, - 6, - 197, - 224, - 255, - 6, - 205, - 224, - 255, - 6, - 213, - 224, - 255, - 6, - 222, - 224, - 255, - 6, - 230, - 224, - 255, - 6, - 238, - 224, - 255, - 6, - 246, - 224, - 255, - 6, - 255, - 192, - 255, - 6, - 0, - 192, - 255, - 6, - 8, - 192, - 255, - 6, - 16, - 192, - 255, - 6, - 24, - 192, - 255, - 6, - 32, - 192, - 255, - 6, - 41, - 192, - 255, - 6, - 49, - 192, - 255, - 6, - 57, - 192, - 255, - 6, - 65, - 192, - 255, - 6, - 74, - 192, - 255, - 6, - 82, - 192, - 255, - 6, - 90, - 192, - 255, - 6, - 98, - 192, - 255, - 6, - 106, - 192, - 255, - 6, - 115, - 192, - 255, - 6, - 123, - 192, - 255, - 6, - 131, - 192, - 255, - 6, - 139, - 192, - 255, - 6, - 148, - 192, - 255, - 6, - 156, - 192, - 255, - 6, - 164, - 192, - 255, - 6, - 172, - 192, - 255, - 6, - 180, - 192, - 255, - 6, - 189, - 192, - 255, - 6, - 197, - 192, - 255, - 6, - 205, - 192, - 255, - 6, - 213, - 192, - 255, - 6, - 222, - 192, - 255, - 6, - 230, - 192, - 255, - 6, - 238, - 192, - 255, - 6, - 246, - 192, - 255, - 6, - 255, - 160, - 255, - 5, - 0, - 160, - 255, - 5, - 8, - 160, - 255, - 5, - 16, - 160, - 255, - 5, - 24, - 160, - 255, - 5, - 32, - 160, - 255, - 5, - 41, - 160, - 255, - 5, - 49, - 160, - 255, - 5, - 57, - 160, - 255, - 5, - 65, - 160, - 255, - 5, - 74, - 160, - 255, - 5, - 82, - 160, - 255, - 5, - 90, - 160, - 255, - 5, - 98, - 160, - 255, - 5, - 106, - 160, - 255, - 5, - 115, - 160, - 255, - 5, - 123, - 160, - 255, - 5, - 131, - 160, - 255, - 5, - 139, - 160, - 255, - 5, - 148, - 160, - 255, - 5, - 156, - 160, - 255, - 5, - 164, - 160, - 255, - 5, - 172, - 160, - 255, - 5, - 180, - 160, - 255, - 5, - 189, - 160, - 255, - 5, - 197, - 160, - 255, - 5, - 205, - 160, - 255, - 5, - 213, - 160, - 255, - 5, - 222, - 160, - 255, - 5, - 230, - 160, - 255, - 5, - 238, - 160, - 255, - 5, - 246, - 160, - 255, - 5, - 255, - 128, - 255, - 5, - 0, - 128, - 255, - 5, - 8, - 128, - 255, - 5, - 16, - 128, - 255, - 5, - 24, - 128, - 255, - 5, - 32, - 128, - 255, - 5, - 41, - 128, - 255, - 5, - 49, - 128, - 255, - 5, - 57, - 128, - 255, - 5, - 65, - 128, - 255, - 5, - 74, - 128, - 255, - 5, - 82, - 128, - 255, - 5, - 90, - 128, - 255, - 5, - 98, - 128, - 255, - 5, - 106, - 128, - 255, - 5, - 115, - 128, - 255, - 5, - 123, - 128, - 255, - 5, - 131, - 128, - 255, - 5, - 139, - 128, - 255, - 5, - 148, - 128, - 255, - 5, - 156, - 128, - 255, - 5, - 164, - 128, - 255, - 5, - 172, - 128, - 255, - 5, - 180, - 128, - 255, - 5, - 189, - 128, - 255, - 5, - 197, - 128, - 255, - 5, - 205, - 128, - 255, - 5, - 213, - 128, - 255, - 5, - 222, - 128, - 255, - 5, - 230, - 128, - 255, - 5, - 238, - 128, - 255, - 5, - 246, - 128, - 255, - 5, - 255, - 96, - 255, - 5, - 0, - 96, - 255, - 5, - 8, - 96, - 255, - 5, - 16, - 96, - 255, - 5, - 24, - 96, - 255, - 5, - 32, - 96, - 255, - 5, - 41, - 96, - 255, - 5, - 49, - 96, - 255, - 5, - 57, - 96, - 255, - 5, - 65, - 96, - 255, - 5, - 74, - 96, - 255, - 5, - 82, - 96, - 255, - 5, - 90, - 96, - 255, - 5, - 98, - 96, - 255, - 5, - 106, - 96, - 255, - 5, - 115, - 96, - 255, - 5, - 123, - 96, - 255, - 5, - 131, - 96, - 255, - 5, - 139, - 96, - 255, - 5, - 148, - 96, - 255, - 5, - 156, - 96, - 255, - 5, - 164, - 96, - 255, - 5, - 172, - 96, - 255, - 5, - 180, - 96, - 255, - 5, - 189, - 96, - 255, - 5, - 197, - 96, - 255, - 5, - 205, - 96, - 255, - 5, - 213, - 96, - 255, - 5, - 222, - 96, - 255, - 5, - 230, - 96, - 255, - 5, - 238, - 96, - 255, - 5, - 246, - 96, - 255, - 5, - 255, - 64, - 255, - 5, - 0, - 64, - 255, - 5, - 8, - 64, - 255, - 5, - 16, - 64, - 255, - 5, - 24, - 64, - 255, - 5, - 32, - 64, - 255, - 5, - 41, - 64, - 255, - 5, - 49, - 64, - 255, - 5, - 57, - 64, - 255, - 5, - 65, - 64, - 255, - 5, - 74, - 64, - 255, - 5, - 82, - 64, - 255, - 5, - 90, - 64, - 255, - 5, - 98, - 64, - 255, - 5, - 106, - 64, - 255, - 5, - 115, - 64, - 255, - 5, - 123, - 64, - 255, - 5, - 131, - 64, - 255, - 5, - 139, - 64, - 255, - 5, - 148, - 64, - 255, - 5, - 156, - 64, - 255, - 5, - 164, - 64, - 255, - 5, - 172, - 64, - 255, - 5, - 180, - 64, - 255, - 5, - 189, - 64, - 255, - 5, - 197, - 64, - 255, - 5, - 205, - 64, - 255, - 5, - 213, - 64, - 255, - 5, - 222, - 64, - 255, - 5, - 230, - 64, - 255, - 5, - 238, - 64, - 255, - 5, - 246, - 64, - 255, - 5, - 255, - 32, - 255, - 4, - 0, - 32, - 255, - 4, - 8, - 32, - 255, - 4, - 16, - 32, - 255, - 4, - 24, - 32, - 255, - 4, - 32, - 32, - 255, - 4, - 41, - 32, - 255, - 4, - 49, - 32, - 255, - 4, - 57, - 32, - 255, - 4, - 65, - 32, - 255, - 4, - 74, - 32, - 255, - 4, - 82, - 32, - 255, - 4, - 90, - 32, - 255, - 4, - 98, - 32, - 255, - 4, - 106, - 32, - 255, - 4, - 115, - 32, - 255, - 4, - 123, - 32, - 255, - 4, - 131, - 32, - 255, - 4, - 139, - 32, - 255, - 4, - 148, - 32, - 255, - 4, - 156, - 32, - 255, - 4, - 164, - 32, - 255, - 4, - 172, - 32, - 255, - 4, - 180, - 32, - 255, - 4, - 189, - 32, - 255, - 4, - 197, - 32, - 255, - 4, - 205, - 32, - 255, - 4, - 213, - 32, - 255, - 4, - 222, - 32, - 255, - 4, - 230, - 32, - 255, - 4, - 238, - 32, - 255, - 4, - 246, - 32, - 255, - 4, - 255, - 4, - 255, - 0, - 0, - 4, - 255, - 0, - 8, - 4, - 255, - 0, - 16, - 4, - 255, - 0, - 24, - 4, - 255, - 0, - 32, - 4, - 255, - 0, - 41, - 4, - 255, - 0, - 49, - 4, - 255, - 0, - 57, - 4, - 255, - 0, - 65, - 4, - 255, - 0, - 74, - 4, - 255, - 0, - 82, - 4, - 255, - 0, - 90, - 4, - 255, - 0, - 98, - 4, - 255, - 0, - 106, - 4, - 255, - 0, - 115, - 4, - 255, - 0, - 123, - 4, - 255, - 0, - 131, - 4, - 255, - 0, - 139, - 4, - 255, - 0, - 148, - 4, - 255, - 0, - 156, - 4, - 255, - 0, - 164, - 4, - 255, - 0, - 172, - 4, - 255, - 0, - 180, - 4, - 255, - 0, - 189, - 4, - 255, - 0, - 197, - 4, - 255, - 0, - 205, - 4, - 255, - 0, - 213, - 4, - 255, - 0, - 222, - 4, - 255, - 0, - 230, - 4, - 255, - 0, - 238, - 4, - 255, - 0, - 246, - 4, - 255, - 0, - 255, - 4, - 255, - 31, - 0, - 4, - 255, - 31, - 8, - 4, - 255, - 31, - 16, - 4, - 255, - 31, - 24, - 4, - 255, - 31, - 32, - 4, - 255, - 31, - 41, - 4, - 255, - 31, - 49, - 4, - 255, - 31, - 57, - 4, - 255, - 31, - 65, - 4, - 255, - 31, - 74, - 4, - 255, - 31, - 82, - 4, - 255, - 31, - 90, - 4, - 255, - 31, - 98, - 4, - 255, - 31, - 106, - 4, - 255, - 31, - 115, - 4, - 255, - 31, - 123, - 4, - 255, - 31, - 131, - 4, - 255, - 31, - 139, - 4, - 255, - 31, - 148, - 4, - 255, - 31, - 156, - 4, - 255, - 31, - 164, - 4, - 255, - 31, - 172, - 4, - 255, - 31, - 180, - 4, - 255, - 31, - 189, - 4, - 255, - 31, - 197, - 4, - 255, - 31, - 205, - 4, - 255, - 31, - 213, - 4, - 255, - 31, - 222, - 4, - 255, - 31, - 230, - 4, - 255, - 31, - 238, - 4, - 255, - 31, - 246, - 4, - 255, - 31, - 255, - 3, - 255, - 63, - 0, - 3, - 255, - 63, - 8, - 3, - 255, - 63, - 16, - 3, - 255, - 63, - 24, - 3, - 255, - 63, - 32, - 3, - 255, - 63, - 41, - 3, - 255, - 63, - 49, - 3, - 255, - 63, - 57, - 3, - 255, - 63, - 65, - 3, - 255, - 63, - 74, - 3, - 255, - 63, - 82, - 3, - 255, - 63, - 90, - 3, - 255, - 63, - 98, - 3, - 255, - 63, - 106, - 3, - 255, - 63, - 115, - 3, - 255, - 63, - 123, - 3, - 255, - 63, - 131, - 3, - 255, - 63, - 139, - 3, - 255, - 63, - 148, - 3, - 255, - 63, - 156, - 3, - 255, - 63, - 164, - 3, - 255, - 63, - 172, - 3, - 255, - 63, - 180, - 3, - 255, - 63, - 189, - 3, - 255, - 63, - 197, - 3, - 255, - 63, - 205, - 3, - 255, - 63, - 213, - 3, - 255, - 63, - 222, - 3, - 255, - 63, - 230, - 3, - 255, - 63, - 238, - 3, - 255, - 63, - 246, - 3, - 255, - 63, - 255, - 3, - 255, - 95, - 0, - 3, - 255, - 95, - 8, - 3, - 255, - 95, - 16, - 3, - 255, - 95, - 24, - 3, - 255, - 95, - 32, - 3, - 255, - 95, - 41, - 3, - 255, - 95, - 49, - 3, - 255, - 95, - 57, - 3, - 255, - 95, - 65, - 3, - 255, - 95, - 74, - 3, - 255, - 95, - 82, - 3, - 255, - 95, - 90, - 3, - 255, - 95, - 98, - 3, - 255, - 95, - 106, - 3, - 255, - 95, - 115, - 3, - 255, - 95, - 123, - 3, - 255, - 95, - 131, - 3, - 255, - 95, - 139, - 3, - 255, - 95, - 148, - 3, - 255, - 95, - 156, - 3, - 255, - 95, - 164, - 3, - 255, - 95, - 172, - 3, - 255, - 95, - 180, - 3, - 255, - 95, - 189, - 3, - 255, - 95, - 197, - 3, - 255, - 95, - 205, - 3, - 255, - 95, - 213, - 3, - 255, - 95, - 222, - 3, - 255, - 95, - 230, - 3, - 255, - 95, - 238, - 3, - 255, - 95, - 246, - 3, - 255, - 95, - 255, - 3, - 255, - 127, - 0, - 3, - 255, - 127, - 8, - 3, - 255, - 127, - 16, - 3, - 255, - 127, - 24, - 3, - 255, - 127, - 32, - 3, - 255, - 127, - 41, - 3, - 255, - 127, - 49, - 3, - 255, - 127, - 57, - 3, - 255, - 127, - 65, - 3, - 255, - 127, - 74, - 3, - 255, - 127, - 82, - 3, - 255, - 127, - 90, - 3, - 255, - 127, - 98, - 3, - 255, - 127, - 106, - 3, - 255, - 127, - 115, - 3, - 255, - 127, - 123, - 3, - 255, - 127, - 131, - 3, - 255, - 127, - 139, - 3, - 255, - 127, - 148, - 3, - 255, - 127, - 156, - 3, - 255, - 127, - 164, - 3, - 255, - 127, - 172, - 3, - 255, - 127, - 180, - 3, - 255, - 127, - 189, - 3, - 255, - 127, - 197, - 3, - 255, - 127, - 205, - 3, - 255, - 127, - 213, - 3, - 255, - 127, - 222, - 3, - 255, - 127, - 230, - 3, - 255, - 127, - 238, - 3, - 255, - 127, - 246, - 3, - 255, - 127, - 255, - 3, - 255, - 159, - 0, - 3, - 255, - 159, - 8, - 3, - 255, - 159, - 16, - 3, - 255, - 159, - 24, - 3, - 255, - 159, - 32, - 3, - 255, - 159, - 41, - 3, - 255, - 159, - 49, - 3, - 255, - 159, - 57, - 3, - 255, - 159, - 65, - 3, - 255, - 159, - 74, - 3, - 255, - 159, - 82, - 3, - 255, - 159, - 90, - 3, - 255, - 159, - 98, - 3, - 255, - 159, - 106, - 3, - 255, - 159, - 115, - 3, - 255, - 159, - 123, - 3, - 255, - 159, - 131, - 3, - 255, - 159, - 139, - 3, - 255, - 159, - 148, - 3, - 255, - 159, - 156, - 3, - 255, - 159, - 164, - 3, - 255, - 159, - 172, - 3, - 255, - 159, - 180, - 3, - 255, - 159, - 189, - 3, - 255, - 159, - 197, - 3, - 255, - 159, - 205, - 3, - 255, - 159, - 213, - 3, - 255, - 159, - 222, - 3, - 255, - 159, - 230, - 3, - 255, - 159, - 238, - 3, - 255, - 159, - 246, - 3, - 255, - 159, - 255, - 2, - 255, - 191, - 0, - 2, - 255, - 191, - 8, - 2, - 255, - 191, - 16, - 2, - 255, - 191, - 24, - 2, - 255, - 191, - 32, - 2, - 255, - 191, - 41, - 2, - 255, - 191, - 49, - 2, - 255, - 191, - 57, - 2, - 255, - 191, - 65, - 2, - 255, - 191, - 74, - 2, - 255, - 191, - 82, - 2, - 255, - 191, - 90, - 2, - 255, - 191, - 98, - 2, - 255, - 191, - 106, - 2, - 255, - 191, - 115, - 2, - 255, - 191, - 123, - 2, - 255, - 191, - 131, - 2, - 255, - 191, - 139, - 2, - 255, - 191, - 148, - 2, - 255, - 191, - 156, - 2, - 255, - 191, - 164, - 2, - 255, - 191, - 172, - 2, - 255, - 191, - 180, - 2, - 255, - 191, - 189, - 2, - 255, - 191, - 197, - 2, - 255, - 191, - 205, - 2, - 255, - 191, - 213, - 2, - 255, - 191, - 222, - 2, - 255, - 191, - 230, - 2, - 255, - 191, - 238, - 2, - 255, - 191, - 246, - 2, - 255, - 191, - 255, - 2, - 255, - 223, - 0, - 2, - 255, - 223, - 8, - 2, - 255, - 223, - 16, - 2, - 255, - 223, - 24, - 2, - 255, - 223, - 32, - 2, - 255, - 223, - 41, - 2, - 255, - 223, - 49, - 2, - 255, - 223, - 57, - 2, - 255, - 223, - 65, - 2, - 255, - 223, - 74, - 2, - 255, - 223, - 82, - 2, - 255, - 223, - 90, - 2, - 255, - 223, - 98, - 2, - 255, - 223, - 106, - 2, - 255, - 223, - 115, - 2, - 255, - 223, - 123, - 2, - 255, - 223, - 131, - 2, - 255, - 223, - 139, - 2, - 255, - 223, - 148, - 2, - 255, - 223, - 156, - 2, - 255, - 223, - 164, - 2, - 255, - 223, - 172, - 2, - 255, - 223, - 180, - 2, - 255, - 223, - 189, - 2, - 255, - 223, - 197, - 2, - 255, - 223, - 205, - 2, - 255, - 223, - 213, - 2, - 255, - 223, - 222, - 2, - 255, - 223, - 230, - 2, - 255, - 223, - 238, - 2, - 255, - 223, - 246, - 2, - 255, - 223, - 255, - 2, - 255, - 255, - 0, - 2, - 255, - 255, - 8, - 2, - 255, - 255, - 16, - 2, - 255, - 255, - 24, - 2, - 255, - 255, - 32, - 2, - 255, - 255, - 41, - 2, - 255, - 255, - 49, - 2, - 255, - 255, - 57, - 2, - 255, - 255, - 65, - 2, - 255, - 255, - 74, - 2, - 255, - 255, - 82, - 2, - 255, - 255, - 90, - 2, - 255, - 255, - 98, - 2, - 255, - 255, - 106, - 2, - 255, - 255, - 115, - 2, - 255, - 255, - 123, - 2, - 255, - 255, - 131, - 2, - 255, - 255, - 139, - 2, - 255, - 255, - 148, - 2, - 255, - 255, - 156, - 2, - 255, - 255, - 164, - 2, - 255, - 255, - 172, - 2, - 255, - 255, - 180, - 2, - 255, - 255, - 189, - 2, - 255, - 255, - 197, - 2, - 255, - 255, - 205, - 2, - 255, - 255, - 213, - 2, - 255, - 255, - 222, - 2, - 255, - 255, - 230, - 2, - 255, - 255, - 238, - 2, - 255, - 255, - 246, - 2, - 255, - 255, - 255, - 1, - 224, - 255, - 0, - 1, - 224, - 255, - 8, - 1, - 224, - 255, - 16, - 1, - 224, - 255, - 24, - 1, - 224, - 255, - 32, - 1, - 224, - 255, - 41, - 1, - 224, - 255, - 49, - 1, - 224, - 255, - 57, - 1, - 224, - 255, - 65, - 1, - 224, - 255, - 74, - 1, - 224, - 255, - 82, - 1, - 224, - 255, - 90, - 1, - 224, - 255, - 98, - 1, - 224, - 255, - 106, - 1, - 224, - 255, - 115, - 1, - 224, - 255, - 123, - 1, - 224, - 255, - 131, - 1, - 224, - 255, - 139, - 1, - 224, - 255, - 148, - 1, - 224, - 255, - 156, - 1, - 224, - 255, - 164, - 1, - 224, - 255, - 172, - 1, - 224, - 255, - 180, - 1, - 224, - 255, - 189, - 1, - 224, - 255, - 197, - 1, - 224, - 255, - 205, - 1, - 224, - 255, - 213, - 1, - 224, - 255, - 222, - 1, - 224, - 255, - 230, - 1, - 224, - 255, - 238, - 1, - 224, - 255, - 246, - 1, - 224, - 255, - 255, - 1, - 192, - 255, - 0, - 1, - 192, - 255, - 8, - 1, - 192, - 255, - 16, - 1, - 192, - 255, - 24, - 1, - 192, - 255, - 32, - 1, - 192, - 255, - 41, - 1, - 192, - 255, - 49, - 1, - 192, - 255, - 57, - 1, - 192, - 255, - 65, - 1, - 192, - 255, - 74, - 1, - 192, - 255, - 82, - 1, - 192, - 255, - 90, - 1, - 192, - 255, - 98, - 1, - 192, - 255, - 106, - 1, - 192, - 255, - 115, - 1, - 192, - 255, - 123, - 1, - 192, - 255, - 131, - 1, - 192, - 255, - 139, - 1, - 192, - 255, - 148, - 1, - 192, - 255, - 156, - 1, - 192, - 255, - 164, - 1, - 192, - 255, - 172, - 1, - 192, - 255, - 180, - 1, - 192, - 255, - 189, - 1, - 192, - 255, - 197, - 1, - 192, - 255, - 205, - 1, - 192, - 255, - 213, - 1, - 192, - 255, - 222, - 1, - 192, - 255, - 230, - 1, - 192, - 255, - 238, - 1, - 192, - 255, - 246, - 1, - 192, - 255, - 255, - 1, - 160, - 255, - 0, - 1, - 160, - 255, - 8, - 1, - 160, - 255, - 16, - 1, - 160, - 255, - 24, - 1, - 160, - 255, - 32, - 1, - 160, - 255, - 41, - 1, - 160, - 255, - 49, - 1, - 160, - 255, - 57, - 1, - 160, - 255, - 65, - 1, - 160, - 255, - 74, - 1, - 160, - 255, - 82, - 1, - 160, - 255, - 90, - 1, - 160, - 255, - 98, - 1, - 160, - 255, - 106, - 1, - 160, - 255, - 115, - 1, - 160, - 255, - 123, - 1, - 160, - 255, - 131, - 1, - 160, - 255, - 139, - 1, - 160, - 255, - 148, - 1, - 160, - 255, - 156, - 1, - 160, - 255, - 164, - 1, - 160, - 255, - 172, - 1, - 160, - 255, - 180, - 1, - 160, - 255, - 189, - 1, - 160, - 255, - 197, - 1, - 160, - 255, - 205, - 1, - 160, - 255, - 213, - 1, - 160, - 255, - 222, - 1, - 160, - 255, - 230, - 1, - 160, - 255, - 238, - 1, - 160, - 255, - 246, - 1, - 160, - 255, - 255, - 1, - 128, - 255, - 0, - 1, - 128, - 255, - 8, - 1, - 128, - 255, - 16, - 1, - 128, - 255, - 24, - 1, - 128, - 255, - 32, - 1, - 128, - 255, - 41, - 1, - 128, - 255, - 49, - 1, - 128, - 255, - 57, - 1, - 128, - 255, - 65, - 1, - 128, - 255, - 74, - 1, - 128, - 255, - 82, - 1, - 128, - 255, - 90, - 1, - 128, - 255, - 98, - 1, - 128, - 255, - 106, - 1, - 128, - 255, - 115, - 1, - 128, - 255, - 123, - 1, - 128, - 255, - 131, - 1, - 128, - 255, - 139, - 1, - 128, - 255, - 148, - 1, - 128, - 255, - 156, - 1, - 128, - 255, - 164, - 1, - 128, - 255, - 172, - 1, - 128, - 255, - 180, - 1, - 128, - 255, - 189, - 1, - 128, - 255, - 197, - 1, - 128, - 255, - 205, - 1, - 128, - 255, - 213, - 1, - 128, - 255, - 222, - 1, - 128, - 255, - 230, - 1, - 128, - 255, - 238, - 1, - 128, - 255, - 246, - 1, - 128, - 255, - 255, - 0, - 96, - 255, - 0, - 0, - 96, - 255, - 8, - 0, - 96, - 255, - 16, - 0, - 96, - 255, - 24, - 0, - 96, - 255, - 32, - 0, - 96, - 255, - 41, - 0, - 96, - 255, - 49, - 0, - 96, - 255, - 57, - 0, - 96, - 255, - 65, - 0, - 96, - 255, - 74, - 0, - 96, - 255, - 82, - 0, - 96, - 255, - 90, - 0, - 96, - 255, - 98, - 0, - 96, - 255, - 106, - 0, - 96, - 255, - 115, - 0, - 96, - 255, - 123, - 0, - 96, - 255, - 131, - 0, - 96, - 255, - 139, - 0, - 96, - 255, - 148, - 0, - 96, - 255, - 156, - 0, - 96, - 255, - 164, - 0, - 96, - 255, - 172, - 0, - 96, - 255, - 180, - 0, - 96, - 255, - 189, - 0, - 96, - 255, - 197, - 0, - 96, - 255, - 205, - 0, - 96, - 255, - 213, - 0, - 96, - 255, - 222, - 0, - 96, - 255, - 230, - 0, - 96, - 255, - 238, - 0, - 96, - 255, - 246, - 0, - 96, - 255, - 255, - 0, - 64, - 255, - 0, - 0, - 64, - 255, - 8, - 0, - 64, - 255, - 16, - 0, - 64, - 255, - 24, - 0, - 64, - 255, - 32, - 0, - 64, - 255, - 41, - 0, - 64, - 255, - 49, - 0, - 64, - 255, - 57, - 0, - 64, - 255, - 65, - 0, - 64, - 255, - 74, - 0, - 64, - 255, - 82, - 0, - 64, - 255, - 90, - 0, - 64, - 255, - 98, - 0, - 64, - 255, - 106, - 0, - 64, - 255, - 115, - 0, - 64, - 255, - 123, - 0, - 64, - 255, - 131, - 0, - 64, - 255, - 139, - 0, - 64, - 255, - 148, - 0, - 64, - 255, - 156, - 0, - 64, - 255, - 164, - 0, - 64, - 255, - 172, - 0, - 64, - 255, - 180, - 0, - 64, - 255, - 189, - 0, - 64, - 255, - 197, - 0, - 64, - 255, - 205, - 0, - 64, - 255, - 213, - 0, - 64, - 255, - 222, - 0, - 64, - 255, - 230, - 0, - 64, - 255, - 238, - 0, - 64, - 255, - 246, - 0, - 64, - 255, - 255, - 0, - 32, - 255, - 0, - 0, - 32, - 255, - 8, - 0, - 32, - 255, - 16, - 0, - 32, - 255, - 24, - 0, - 32, - 255, - 32, - 0, - 32, - 255, - 41, - 0, - 32, - 255, - 49, - 0, - 32, - 255, - 57, - 0, - 32, - 255, - 65, - 0, - 32, - 255, - 74, - 0, - 32, - 255, - 82, - 0, - 32, - 255, - 90, - 0, - 32, - 255, - 98, - 0, - 32, - 255, - 106, - 0, - 32, - 255, - 115, - 0, - 32, - 255, - 123, - 0, - 32, - 255, - 131, - 0, - 32, - 255, - 139, - 0, - 32, - 255, - 148, - 0, - 32, - 255, - 156, - 0, - 32, - 255, - 164, - 0, - 32, - 255, - 172, - 0, - 32, - 255, - 180, - 0, - 32, - 255, - 189, - 0, - 32, - 255, - 197, - 0, - 32, - 255, - 205, - 0, - 32, - 255, - 213, - 0, - 32, - 255, - 222, - 0, - 32, - 255, - 230, - 0, - 32, - 255, - 238, - 0, - 32, - 255, - 246, - 0, - 32, - 255, - 255, -] -`; - -exports[`pixels browser rgb-8bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 253, - 253, - 253, - 252, - 252, - 252, - 251, - 251, - 251, - 250, - 250, - 250, - 249, - 249, - 249, - 248, - 248, - 248, - 247, - 247, - 247, - 246, - 246, - 246, - 245, - 245, - 245, - 244, - 244, - 244, - 243, - 243, - 243, - 242, - 242, - 242, - 241, - 241, - 241, - 240, - 240, - 240, - 239, - 239, - 239, - 238, - 238, - 238, - 237, - 237, - 237, - 236, - 236, - 236, - 235, - 235, - 235, - 234, - 234, - 234, - 233, - 233, - 233, - 232, - 232, - 232, - 231, - 231, - 231, - 230, - 230, - 230, - 229, - 229, - 229, - 228, - 228, - 228, - 227, - 227, - 227, - 226, - 226, - 226, - 225, - 225, - 225, - 224, - 224, - 224, - 223, - 223, - 223, - 222, - 222, - 222, - 221, - 221, - 221, - 220, - 220, - 220, - 219, - 219, - 219, - 218, - 218, - 218, - 217, - 217, - 217, - 216, - 216, - 216, - 215, - 215, - 215, - 214, - 214, - 214, - 213, - 213, - 213, - 212, - 212, - 212, - 211, - 211, - 211, - 210, - 210, - 210, - 209, - 209, - 209, - 208, - 208, - 208, - 207, - 207, - 207, - 206, - 206, - 206, - 205, - 205, - 205, - 204, - 204, - 204, - 203, - 203, - 203, - 202, - 202, - 202, - 201, - 201, - 201, - 200, - 200, - 200, - 199, - 199, - 199, - 198, - 198, - 198, - 197, - 197, - 197, - 196, - 196, - 196, - 195, - 195, - 195, - 194, - 194, - 194, - 193, - 193, - 193, - 192, - 192, - 192, - 191, - 191, - 191, - 190, - 190, - 190, - 189, - 189, - 189, - 188, - 188, - 188, - 187, - 187, - 187, - 186, - 186, - 186, - 185, - 185, - 185, - 184, - 184, - 184, - 183, - 183, - 183, - 182, - 182, - 182, - 181, - 181, - 181, - 180, - 180, - 180, - 179, - 179, - 179, - 178, - 178, - 178, - 177, - 177, - 177, - 176, - 176, - 176, - 175, - 175, - 175, - 174, - 174, - 174, - 173, - 173, - 173, - 172, - 172, - 172, - 171, - 171, - 171, - 170, - 170, - 170, - 169, - 169, - 169, - 168, - 168, - 168, - 167, - 167, - 167, - 166, - 166, - 166, - 165, - 165, - 165, - 164, - 164, - 164, - 163, - 163, - 163, - 162, - 162, - 162, - 161, - 161, - 161, - 160, - 160, - 160, - 159, - 159, - 159, - 158, - 158, - 158, - 157, - 157, - 157, - 156, - 156, - 156, - 155, - 155, - 155, - 154, - 154, - 154, - 153, - 153, - 153, - 152, - 152, - 152, - 151, - 151, - 151, - 150, - 150, - 150, - 149, - 149, - 149, - 148, - 148, - 148, - 147, - 147, - 147, - 146, - 146, - 146, - 145, - 145, - 145, - 144, - 144, - 144, - 143, - 143, - 143, - 142, - 142, - 142, - 141, - 141, - 141, - 140, - 140, - 140, - 139, - 139, - 139, - 138, - 138, - 138, - 137, - 137, - 137, - 136, - 136, - 136, - 135, - 135, - 135, - 134, - 134, - 134, - 133, - 133, - 133, - 132, - 132, - 132, - 131, - 131, - 131, - 130, - 130, - 130, - 129, - 129, - 129, - 128, - 128, - 128, - 127, - 127, - 127, - 126, - 126, - 126, - 125, - 125, - 125, - 124, - 124, - 124, - 123, - 123, - 123, - 122, - 122, - 122, - 121, - 121, - 121, - 120, - 120, - 120, - 119, - 119, - 119, - 118, - 118, - 118, - 117, - 117, - 117, - 116, - 116, - 116, - 115, - 115, - 115, - 114, - 114, - 114, - 113, - 113, - 113, - 112, - 112, - 112, - 111, - 111, - 111, - 110, - 110, - 110, - 109, - 109, - 109, - 108, - 108, - 108, - 107, - 107, - 107, - 106, - 106, - 106, - 105, - 105, - 105, - 104, - 104, - 104, - 103, - 103, - 103, - 102, - 102, - 102, - 101, - 101, - 101, - 100, - 100, - 100, - 99, - 99, - 99, - 98, - 98, - 98, - 97, - 97, - 97, - 96, - 96, - 96, - 95, - 95, - 95, - 94, - 94, - 94, - 93, - 93, - 93, - 92, - 92, - 92, - 91, - 91, - 91, - 90, - 90, - 90, - 89, - 89, - 89, - 88, - 88, - 88, - 87, - 87, - 87, - 86, - 86, - 86, - 85, - 85, - 85, - 84, - 84, - 84, - 83, - 83, - 83, - 82, - 82, - 82, - 81, - 81, - 81, - 80, - 80, - 80, - 79, - 79, - 79, - 78, - 78, - 78, - 77, - 77, - 77, - 76, - 76, - 76, - 75, - 75, - 75, - 74, - 74, - 74, - 73, - 73, - 73, - 72, - 72, - 72, - 71, - 71, - 71, - 70, - 70, - 70, - 69, - 69, - 69, - 68, - 68, - 68, - 67, - 67, - 67, - 66, - 66, - 66, - 65, - 65, - 65, - 64, - 64, - 64, - 63, - 63, - 63, - 62, - 62, - 62, - 61, - 61, - 61, - 60, - 60, - 60, - 59, - 59, - 59, - 58, - 58, - 58, - 57, - 57, - 57, - 56, - 56, - 56, - 55, - 55, - 55, - 54, - 54, - 54, - 53, - 53, - 53, - 52, - 52, - 52, - 51, - 51, - 51, - 50, - 50, - 50, - 49, - 49, - 49, - 48, - 48, - 48, - 47, - 47, - 47, - 46, - 46, - 46, - 45, - 45, - 45, - 44, - 44, - 44, - 43, - 43, - 43, - 42, - 42, - 42, - 41, - 41, - 41, - 40, - 40, - 40, - 39, - 39, - 39, - 38, - 38, - 38, - 37, - 37, - 37, - 36, - 36, - 36, - 35, - 35, - 35, - 34, - 34, - 34, - 33, - 33, - 33, - 32, - 32, - 32, - 31, - 31, - 31, - 30, - 30, - 30, - 29, - 29, - 29, - 28, - 28, - 28, - 27, - 27, - 27, - 26, - 26, - 26, - 25, - 25, - 25, - 24, - 24, - 24, - 23, - 23, - 23, - 22, - 22, - 22, - 21, - 21, - 21, - 20, - 20, - 20, - 19, - 19, - 19, - 18, - 18, - 18, - 17, - 17, - 17, - 16, - 16, - 16, - 15, - 15, - 15, - 14, - 14, - 14, - 13, - 13, - 13, - 12, - 12, - 12, - 11, - 11, - 11, - 10, - 10, - 10, - 9, - 9, - 9, - 8, - 8, - 8, - 7, - 7, - 7, - 6, - 6, - 6, - 5, - 5, - 5, - 4, - 4, - 4, - 3, - 3, - 3, - 2, - 2, - 2, - 1, - 1, - 1, - 0, - 0, - 0, -] -`; - -exports[`pixels browser rgb-16bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 255, - 255, - 0, - 0, - 239, - 123, - 255, - 255, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 222, - 247, - 255, - 255, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 206, - 115, - 255, - 255, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 189, - 239, - 255, - 255, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 173, - 107, - 255, - 255, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 156, - 231, - 255, - 255, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 140, - 99, - 255, - 255, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 247, - 189, - 247, - 189, - 0, - 0, - 239, - 123, - 247, - 189, - 0, - 0, - 231, - 57, - 247, - 189, - 0, - 0, - 222, - 247, - 247, - 189, - 0, - 0, - 214, - 181, - 247, - 189, - 0, - 0, - 206, - 115, - 247, - 189, - 0, - 0, - 198, - 49, - 247, - 189, - 0, - 0, - 189, - 239, - 247, - 189, - 0, - 0, - 181, - 173, - 247, - 189, - 0, - 0, - 173, - 107, - 247, - 189, - 0, - 0, - 165, - 41, - 247, - 189, - 0, - 0, - 156, - 231, - 247, - 189, - 0, - 0, - 148, - 165, - 247, - 189, - 0, - 0, - 140, - 99, - 247, - 189, - 0, - 0, - 132, - 33, - 247, - 189, - 0, - 0, - 123, - 222, - 247, - 189, - 0, - 0, - 115, - 156, - 247, - 189, - 0, - 0, - 107, - 90, - 247, - 189, - 0, - 0, - 99, - 24, - 247, - 189, - 0, - 0, - 90, - 214, - 247, - 189, - 0, - 0, - 82, - 148, - 247, - 189, - 0, - 0, - 74, - 82, - 247, - 189, - 0, - 0, - 66, - 16, - 247, - 189, - 0, - 0, - 57, - 206, - 247, - 189, - 0, - 0, - 49, - 140, - 247, - 189, - 0, - 0, - 41, - 74, - 247, - 189, - 0, - 0, - 33, - 8, - 247, - 189, - 0, - 0, - 24, - 198, - 247, - 189, - 0, - 0, - 16, - 132, - 247, - 189, - 0, - 0, - 8, - 66, - 247, - 189, - 0, - 0, - 0, - 0, - 247, - 189, - 8, - 66, - 255, - 255, - 239, - 123, - 0, - 0, - 247, - 189, - 239, - 123, - 0, - 0, - 239, - 123, - 239, - 123, - 0, - 0, - 231, - 57, - 239, - 123, - 0, - 0, - 222, - 247, - 239, - 123, - 0, - 0, - 214, - 181, - 239, - 123, - 0, - 0, - 206, - 115, - 239, - 123, - 0, - 0, - 198, - 49, - 239, - 123, - 0, - 0, - 189, - 239, - 239, - 123, - 0, - 0, - 181, - 173, - 239, - 123, - 0, - 0, - 173, - 107, - 239, - 123, - 0, - 0, - 165, - 41, - 239, - 123, - 0, - 0, - 156, - 231, - 239, - 123, - 0, - 0, - 148, - 165, - 239, - 123, - 0, - 0, - 140, - 99, - 239, - 123, - 0, - 0, - 132, - 33, - 239, - 123, - 0, - 0, - 123, - 222, - 239, - 123, - 0, - 0, - 115, - 156, - 239, - 123, - 0, - 0, - 107, - 90, - 239, - 123, - 0, - 0, - 99, - 24, - 239, - 123, - 0, - 0, - 90, - 214, - 239, - 123, - 0, - 0, - 82, - 148, - 239, - 123, - 0, - 0, - 74, - 82, - 239, - 123, - 0, - 0, - 66, - 16, - 239, - 123, - 0, - 0, - 57, - 206, - 239, - 123, - 0, - 0, - 49, - 140, - 239, - 123, - 0, - 0, - 41, - 74, - 239, - 123, - 0, - 0, - 33, - 8, - 239, - 123, - 0, - 0, - 24, - 198, - 239, - 123, - 0, - 0, - 16, - 132, - 239, - 123, - 0, - 0, - 8, - 66, - 239, - 123, - 8, - 66, - 0, - 0, - 239, - 123, - 16, - 132, - 255, - 255, - 231, - 57, - 0, - 0, - 247, - 189, - 231, - 57, - 0, - 0, - 239, - 123, - 231, - 57, - 0, - 0, - 231, - 57, - 231, - 57, - 0, - 0, - 222, - 247, - 231, - 57, - 0, - 0, - 214, - 181, - 231, - 57, - 0, - 0, - 206, - 115, - 231, - 57, - 0, - 0, - 198, - 49, - 231, - 57, - 0, - 0, - 189, - 239, - 231, - 57, - 0, - 0, - 181, - 173, - 231, - 57, - 0, - 0, - 173, - 107, - 231, - 57, - 0, - 0, - 165, - 41, - 231, - 57, - 0, - 0, - 156, - 231, - 231, - 57, - 0, - 0, - 148, - 165, - 231, - 57, - 0, - 0, - 140, - 99, - 231, - 57, - 0, - 0, - 132, - 33, - 231, - 57, - 0, - 0, - 123, - 222, - 231, - 57, - 0, - 0, - 115, - 156, - 231, - 57, - 0, - 0, - 107, - 90, - 231, - 57, - 0, - 0, - 99, - 24, - 231, - 57, - 0, - 0, - 90, - 214, - 231, - 57, - 0, - 0, - 82, - 148, - 231, - 57, - 0, - 0, - 74, - 82, - 231, - 57, - 0, - 0, - 66, - 16, - 231, - 57, - 0, - 0, - 57, - 206, - 231, - 57, - 0, - 0, - 49, - 140, - 231, - 57, - 0, - 0, - 41, - 74, - 231, - 57, - 0, - 0, - 33, - 8, - 231, - 57, - 0, - 0, - 24, - 198, - 231, - 57, - 0, - 0, - 16, - 132, - 231, - 57, - 8, - 66, - 8, - 66, - 231, - 57, - 16, - 132, - 0, - 0, - 231, - 57, - 24, - 198, - 255, - 255, - 222, - 247, - 0, - 0, - 247, - 189, - 222, - 247, - 0, - 0, - 239, - 123, - 222, - 247, - 0, - 0, - 231, - 57, - 222, - 247, - 0, - 0, - 222, - 247, - 222, - 247, - 0, - 0, - 214, - 181, - 222, - 247, - 0, - 0, - 206, - 115, - 222, - 247, - 0, - 0, - 198, - 49, - 222, - 247, - 0, - 0, - 189, - 239, - 222, - 247, - 0, - 0, - 181, - 173, - 222, - 247, - 0, - 0, - 173, - 107, - 222, - 247, - 0, - 0, - 165, - 41, - 222, - 247, - 0, - 0, - 156, - 231, - 222, - 247, - 0, - 0, - 148, - 165, - 222, - 247, - 0, - 0, - 140, - 99, - 222, - 247, - 0, - 0, - 132, - 33, - 222, - 247, - 0, - 0, - 123, - 222, - 222, - 247, - 0, - 0, - 115, - 156, - 222, - 247, - 0, - 0, - 107, - 90, - 222, - 247, - 0, - 0, - 99, - 24, - 222, - 247, - 0, - 0, - 90, - 214, - 222, - 247, - 0, - 0, - 82, - 148, - 222, - 247, - 0, - 0, - 74, - 82, - 222, - 247, - 0, - 0, - 66, - 16, - 222, - 247, - 0, - 0, - 57, - 206, - 222, - 247, - 0, - 0, - 49, - 140, - 222, - 247, - 0, - 0, - 41, - 74, - 222, - 247, - 0, - 0, - 33, - 8, - 222, - 247, - 0, - 0, - 24, - 198, - 222, - 247, - 8, - 66, - 16, - 132, - 222, - 247, - 16, - 132, - 8, - 66, - 222, - 247, - 24, - 198, - 0, - 0, - 222, - 247, - 33, - 8, - 255, - 255, - 214, - 181, - 0, - 0, - 247, - 189, - 214, - 181, - 0, - 0, - 239, - 123, - 214, - 181, - 0, - 0, - 231, - 57, - 214, - 181, - 0, - 0, - 222, - 247, - 214, - 181, - 0, - 0, - 214, - 181, - 214, - 181, - 0, - 0, - 206, - 115, - 214, - 181, - 0, - 0, - 198, - 49, - 214, - 181, - 0, - 0, - 189, - 239, - 214, - 181, - 0, - 0, - 181, - 173, - 214, - 181, - 0, - 0, - 173, - 107, - 214, - 181, - 0, - 0, - 165, - 41, - 214, - 181, - 0, - 0, - 156, - 231, - 214, - 181, - 0, - 0, - 148, - 165, - 214, - 181, - 0, - 0, - 140, - 99, - 214, - 181, - 0, - 0, - 132, - 33, - 214, - 181, - 0, - 0, - 123, - 222, - 214, - 181, - 0, - 0, - 115, - 156, - 214, - 181, - 0, - 0, - 107, - 90, - 214, - 181, - 0, - 0, - 99, - 24, - 214, - 181, - 0, - 0, - 90, - 214, - 214, - 181, - 0, - 0, - 82, - 148, - 214, - 181, - 0, - 0, - 74, - 82, - 214, - 181, - 0, - 0, - 66, - 16, - 214, - 181, - 0, - 0, - 57, - 206, - 214, - 181, - 0, - 0, - 49, - 140, - 214, - 181, - 0, - 0, - 41, - 74, - 214, - 181, - 0, - 0, - 33, - 8, - 214, - 181, - 8, - 66, - 24, - 198, - 214, - 181, - 16, - 132, - 16, - 132, - 214, - 181, - 24, - 198, - 8, - 66, - 214, - 181, - 33, - 8, - 0, - 0, - 214, - 181, - 41, - 74, - 255, - 255, - 206, - 115, - 0, - 0, - 247, - 189, - 206, - 115, - 0, - 0, - 239, - 123, - 206, - 115, - 0, - 0, - 231, - 57, - 206, - 115, - 0, - 0, - 222, - 247, - 206, - 115, - 0, - 0, - 214, - 181, - 206, - 115, - 0, - 0, - 206, - 115, - 206, - 115, - 0, - 0, - 198, - 49, - 206, - 115, - 0, - 0, - 189, - 239, - 206, - 115, - 0, - 0, - 181, - 173, - 206, - 115, - 0, - 0, - 173, - 107, - 206, - 115, - 0, - 0, - 165, - 41, - 206, - 115, - 0, - 0, - 156, - 231, - 206, - 115, - 0, - 0, - 148, - 165, - 206, - 115, - 0, - 0, - 140, - 99, - 206, - 115, - 0, - 0, - 132, - 33, - 206, - 115, - 0, - 0, - 123, - 222, - 206, - 115, - 0, - 0, - 115, - 156, - 206, - 115, - 0, - 0, - 107, - 90, - 206, - 115, - 0, - 0, - 99, - 24, - 206, - 115, - 0, - 0, - 90, - 214, - 206, - 115, - 0, - 0, - 82, - 148, - 206, - 115, - 0, - 0, - 74, - 82, - 206, - 115, - 0, - 0, - 66, - 16, - 206, - 115, - 0, - 0, - 57, - 206, - 206, - 115, - 0, - 0, - 49, - 140, - 206, - 115, - 0, - 0, - 41, - 74, - 206, - 115, - 8, - 66, - 33, - 8, - 206, - 115, - 16, - 132, - 24, - 198, - 206, - 115, - 24, - 198, - 16, - 132, - 206, - 115, - 33, - 8, - 8, - 66, - 206, - 115, - 41, - 74, - 0, - 0, - 206, - 115, - 49, - 140, - 255, - 255, - 198, - 49, - 0, - 0, - 247, - 189, - 198, - 49, - 0, - 0, - 239, - 123, - 198, - 49, - 0, - 0, - 231, - 57, - 198, - 49, - 0, - 0, - 222, - 247, - 198, - 49, - 0, - 0, - 214, - 181, - 198, - 49, - 0, - 0, - 206, - 115, - 198, - 49, - 0, - 0, - 198, - 49, - 198, - 49, - 0, - 0, - 189, - 239, - 198, - 49, - 0, - 0, - 181, - 173, - 198, - 49, - 0, - 0, - 173, - 107, - 198, - 49, - 0, - 0, - 165, - 41, - 198, - 49, - 0, - 0, - 156, - 231, - 198, - 49, - 0, - 0, - 148, - 165, - 198, - 49, - 0, - 0, - 140, - 99, - 198, - 49, - 0, - 0, - 132, - 33, - 198, - 49, - 0, - 0, - 123, - 222, - 198, - 49, - 0, - 0, - 115, - 156, - 198, - 49, - 0, - 0, - 107, - 90, - 198, - 49, - 0, - 0, - 99, - 24, - 198, - 49, - 0, - 0, - 90, - 214, - 198, - 49, - 0, - 0, - 82, - 148, - 198, - 49, - 0, - 0, - 74, - 82, - 198, - 49, - 0, - 0, - 66, - 16, - 198, - 49, - 0, - 0, - 57, - 206, - 198, - 49, - 0, - 0, - 49, - 140, - 198, - 49, - 8, - 66, - 41, - 74, - 198, - 49, - 16, - 132, - 33, - 8, - 198, - 49, - 24, - 198, - 24, - 198, - 198, - 49, - 33, - 8, - 16, - 132, - 198, - 49, - 41, - 74, - 8, - 66, - 198, - 49, - 49, - 140, - 0, - 0, - 198, - 49, - 57, - 206, - 255, - 255, - 189, - 239, - 0, - 0, - 247, - 189, - 189, - 239, - 0, - 0, - 239, - 123, - 189, - 239, - 0, - 0, - 231, - 57, - 189, - 239, - 0, - 0, - 222, - 247, - 189, - 239, - 0, - 0, - 214, - 181, - 189, - 239, - 0, - 0, - 206, - 115, - 189, - 239, - 0, - 0, - 198, - 49, - 189, - 239, - 0, - 0, - 189, - 239, - 189, - 239, - 0, - 0, - 181, - 173, - 189, - 239, - 0, - 0, - 173, - 107, - 189, - 239, - 0, - 0, - 165, - 41, - 189, - 239, - 0, - 0, - 156, - 231, - 189, - 239, - 0, - 0, - 148, - 165, - 189, - 239, - 0, - 0, - 140, - 99, - 189, - 239, - 0, - 0, - 132, - 33, - 189, - 239, - 0, - 0, - 123, - 222, - 189, - 239, - 0, - 0, - 115, - 156, - 189, - 239, - 0, - 0, - 107, - 90, - 189, - 239, - 0, - 0, - 99, - 24, - 189, - 239, - 0, - 0, - 90, - 214, - 189, - 239, - 0, - 0, - 82, - 148, - 189, - 239, - 0, - 0, - 74, - 82, - 189, - 239, - 0, - 0, - 66, - 16, - 189, - 239, - 0, - 0, - 57, - 206, - 189, - 239, - 8, - 66, - 49, - 140, - 189, - 239, - 16, - 132, - 41, - 74, - 189, - 239, - 24, - 198, - 33, - 8, - 189, - 239, - 33, - 8, - 24, - 198, - 189, - 239, - 41, - 74, - 16, - 132, - 189, - 239, - 49, - 140, - 8, - 66, - 189, - 239, - 57, - 206, - 0, - 0, - 189, - 239, - 66, - 16, - 255, - 255, - 181, - 173, - 0, - 0, - 247, - 189, - 181, - 173, - 0, - 0, - 239, - 123, - 181, - 173, - 0, - 0, - 231, - 57, - 181, - 173, - 0, - 0, - 222, - 247, - 181, - 173, - 0, - 0, - 214, - 181, - 181, - 173, - 0, - 0, - 206, - 115, - 181, - 173, - 0, - 0, - 198, - 49, - 181, - 173, - 0, - 0, - 189, - 239, - 181, - 173, - 0, - 0, - 181, - 173, - 181, - 173, - 0, - 0, - 173, - 107, - 181, - 173, - 0, - 0, - 165, - 41, - 181, - 173, - 0, - 0, - 156, - 231, - 181, - 173, - 0, - 0, - 148, - 165, - 181, - 173, - 0, - 0, - 140, - 99, - 181, - 173, - 0, - 0, - 132, - 33, - 181, - 173, - 0, - 0, - 123, - 222, - 181, - 173, - 0, - 0, - 115, - 156, - 181, - 173, - 0, - 0, - 107, - 90, - 181, - 173, - 0, - 0, - 99, - 24, - 181, - 173, - 0, - 0, - 90, - 214, - 181, - 173, - 0, - 0, - 82, - 148, - 181, - 173, - 0, - 0, - 74, - 82, - 181, - 173, - 0, - 0, - 66, - 16, - 181, - 173, - 8, - 66, - 57, - 206, - 181, - 173, - 16, - 132, - 49, - 140, - 181, - 173, - 24, - 198, - 41, - 74, - 181, - 173, - 33, - 8, - 33, - 8, - 181, - 173, - 41, - 74, - 24, - 198, - 181, - 173, - 49, - 140, - 16, - 132, - 181, - 173, - 57, - 206, - 8, - 66, - 181, - 173, - 66, - 16, - 0, - 0, - 181, - 173, - 74, - 82, - 255, - 255, - 173, - 107, - 0, - 0, - 247, - 189, - 173, - 107, - 0, - 0, - 239, - 123, - 173, - 107, - 0, - 0, - 231, - 57, - 173, - 107, - 0, - 0, - 222, - 247, - 173, - 107, - 0, - 0, - 214, - 181, - 173, - 107, - 0, - 0, - 206, - 115, - 173, - 107, - 0, - 0, - 198, - 49, - 173, - 107, - 0, - 0, - 189, - 239, - 173, - 107, - 0, - 0, - 181, - 173, - 173, - 107, - 0, - 0, - 173, - 107, - 173, - 107, - 0, - 0, - 165, - 41, - 173, - 107, - 0, - 0, - 156, - 231, - 173, - 107, - 0, - 0, - 148, - 165, - 173, - 107, - 0, - 0, - 140, - 99, - 173, - 107, - 0, - 0, - 132, - 33, - 173, - 107, - 0, - 0, - 123, - 222, - 173, - 107, - 0, - 0, - 115, - 156, - 173, - 107, - 0, - 0, - 107, - 90, - 173, - 107, - 0, - 0, - 99, - 24, - 173, - 107, - 0, - 0, - 90, - 214, - 173, - 107, - 0, - 0, - 82, - 148, - 173, - 107, - 0, - 0, - 74, - 82, - 173, - 107, - 8, - 66, - 66, - 16, - 173, - 107, - 16, - 132, - 57, - 206, - 173, - 107, - 24, - 198, - 49, - 140, - 173, - 107, - 33, - 8, - 41, - 74, - 173, - 107, - 41, - 74, - 33, - 8, - 173, - 107, - 49, - 140, - 24, - 198, - 173, - 107, - 57, - 206, - 16, - 132, - 173, - 107, - 66, - 16, - 8, - 66, - 173, - 107, - 74, - 82, - 0, - 0, - 173, - 107, - 82, - 148, - 255, - 255, - 165, - 41, - 0, - 0, - 247, - 189, - 165, - 41, - 0, - 0, - 239, - 123, - 165, - 41, - 0, - 0, - 231, - 57, - 165, - 41, - 0, - 0, - 222, - 247, - 165, - 41, - 0, - 0, - 214, - 181, - 165, - 41, - 0, - 0, - 206, - 115, - 165, - 41, - 0, - 0, - 198, - 49, - 165, - 41, - 0, - 0, - 189, - 239, - 165, - 41, - 0, - 0, - 181, - 173, - 165, - 41, - 0, - 0, - 173, - 107, - 165, - 41, - 0, - 0, - 165, - 41, - 165, - 41, - 0, - 0, - 156, - 231, - 165, - 41, - 0, - 0, - 148, - 165, - 165, - 41, - 0, - 0, - 140, - 99, - 165, - 41, - 0, - 0, - 132, - 33, - 165, - 41, - 0, - 0, - 123, - 222, - 165, - 41, - 0, - 0, - 115, - 156, - 165, - 41, - 0, - 0, - 107, - 90, - 165, - 41, - 0, - 0, - 99, - 24, - 165, - 41, - 0, - 0, - 90, - 214, - 165, - 41, - 0, - 0, - 82, - 148, - 165, - 41, - 8, - 66, - 74, - 82, - 165, - 41, - 16, - 132, - 66, - 16, - 165, - 41, - 24, - 198, - 57, - 206, - 165, - 41, - 33, - 8, - 49, - 140, - 165, - 41, - 41, - 74, - 41, - 74, - 165, - 41, - 49, - 140, - 33, - 8, - 165, - 41, - 57, - 206, - 24, - 198, - 165, - 41, - 66, - 16, - 16, - 132, - 165, - 41, - 74, - 82, - 8, - 66, - 165, - 41, - 82, - 148, - 0, - 0, - 165, - 41, - 90, - 214, - 255, - 255, - 156, - 231, - 0, - 0, - 247, - 189, - 156, - 231, - 0, - 0, - 239, - 123, - 156, - 231, - 0, - 0, - 231, - 57, - 156, - 231, - 0, - 0, - 222, - 247, - 156, - 231, - 0, - 0, - 214, - 181, - 156, - 231, - 0, - 0, - 206, - 115, - 156, - 231, - 0, - 0, - 198, - 49, - 156, - 231, - 0, - 0, - 189, - 239, - 156, - 231, - 0, - 0, - 181, - 173, - 156, - 231, - 0, - 0, - 173, - 107, - 156, - 231, - 0, - 0, - 165, - 41, - 156, - 231, - 0, - 0, - 156, - 231, - 156, - 231, - 0, - 0, - 148, - 165, - 156, - 231, - 0, - 0, - 140, - 99, - 156, - 231, - 0, - 0, - 132, - 33, - 156, - 231, - 0, - 0, - 123, - 222, - 156, - 231, - 0, - 0, - 115, - 156, - 156, - 231, - 0, - 0, - 107, - 90, - 156, - 231, - 0, - 0, - 99, - 24, - 156, - 231, - 0, - 0, - 90, - 214, - 156, - 231, - 8, - 66, - 82, - 148, - 156, - 231, - 16, - 132, - 74, - 82, - 156, - 231, - 24, - 198, - 66, - 16, - 156, - 231, - 33, - 8, - 57, - 206, - 156, - 231, - 41, - 74, - 49, - 140, - 156, - 231, - 49, - 140, - 41, - 74, - 156, - 231, - 57, - 206, - 33, - 8, - 156, - 231, - 66, - 16, - 24, - 198, - 156, - 231, - 74, - 82, - 16, - 132, - 156, - 231, - 82, - 148, - 8, - 66, - 156, - 231, - 90, - 214, - 0, - 0, - 156, - 231, - 99, - 24, - 255, - 255, - 148, - 165, - 0, - 0, - 247, - 189, - 148, - 165, - 0, - 0, - 239, - 123, - 148, - 165, - 0, - 0, - 231, - 57, - 148, - 165, - 0, - 0, - 222, - 247, - 148, - 165, - 0, - 0, - 214, - 181, - 148, - 165, - 0, - 0, - 206, - 115, - 148, - 165, - 0, - 0, - 198, - 49, - 148, - 165, - 0, - 0, - 189, - 239, - 148, - 165, - 0, - 0, - 181, - 173, - 148, - 165, - 0, - 0, - 173, - 107, - 148, - 165, - 0, - 0, - 165, - 41, - 148, - 165, - 0, - 0, - 156, - 231, - 148, - 165, - 0, - 0, - 148, - 165, - 148, - 165, - 0, - 0, - 140, - 99, - 148, - 165, - 0, - 0, - 132, - 33, - 148, - 165, - 0, - 0, - 123, - 222, - 148, - 165, - 0, - 0, - 115, - 156, - 148, - 165, - 0, - 0, - 107, - 90, - 148, - 165, - 0, - 0, - 99, - 24, - 148, - 165, - 8, - 66, - 90, - 214, - 148, - 165, - 16, - 132, - 82, - 148, - 148, - 165, - 24, - 198, - 74, - 82, - 148, - 165, - 33, - 8, - 66, - 16, - 148, - 165, - 41, - 74, - 57, - 206, - 148, - 165, - 49, - 140, - 49, - 140, - 148, - 165, - 57, - 206, - 41, - 74, - 148, - 165, - 66, - 16, - 33, - 8, - 148, - 165, - 74, - 82, - 24, - 198, - 148, - 165, - 82, - 148, - 16, - 132, - 148, - 165, - 90, - 214, - 8, - 66, - 148, - 165, - 99, - 24, - 0, - 0, - 148, - 165, - 107, - 90, - 255, - 255, - 140, - 99, - 0, - 0, - 247, - 189, - 140, - 99, - 0, - 0, - 239, - 123, - 140, - 99, - 0, - 0, - 231, - 57, - 140, - 99, - 0, - 0, - 222, - 247, - 140, - 99, - 0, - 0, - 214, - 181, - 140, - 99, - 0, - 0, - 206, - 115, - 140, - 99, - 0, - 0, - 198, - 49, - 140, - 99, - 0, - 0, - 189, - 239, - 140, - 99, - 0, - 0, - 181, - 173, - 140, - 99, - 0, - 0, - 173, - 107, - 140, - 99, - 0, - 0, - 165, - 41, - 140, - 99, - 0, - 0, - 156, - 231, - 140, - 99, - 0, - 0, - 148, - 165, - 140, - 99, - 0, - 0, - 140, - 99, - 140, - 99, - 0, - 0, - 132, - 33, - 140, - 99, - 0, - 0, - 123, - 222, - 140, - 99, - 0, - 0, - 115, - 156, - 140, - 99, - 0, - 0, - 107, - 90, - 140, - 99, - 8, - 66, - 99, - 24, - 140, - 99, - 16, - 132, - 90, - 214, - 140, - 99, - 24, - 198, - 82, - 148, - 140, - 99, - 33, - 8, - 74, - 82, - 140, - 99, - 41, - 74, - 66, - 16, - 140, - 99, - 49, - 140, - 57, - 206, - 140, - 99, - 57, - 206, - 49, - 140, - 140, - 99, - 66, - 16, - 41, - 74, - 140, - 99, - 74, - 82, - 33, - 8, - 140, - 99, - 82, - 148, - 24, - 198, - 140, - 99, - 90, - 214, - 16, - 132, - 140, - 99, - 99, - 24, - 8, - 66, - 140, - 99, - 107, - 90, - 0, - 0, - 140, - 99, - 115, - 156, - 255, - 255, - 132, - 33, - 0, - 0, - 247, - 189, - 132, - 33, - 0, - 0, - 239, - 123, - 132, - 33, - 0, - 0, - 231, - 57, - 132, - 33, - 0, - 0, - 222, - 247, - 132, - 33, - 0, - 0, - 214, - 181, - 132, - 33, - 0, - 0, - 206, - 115, - 132, - 33, - 0, - 0, - 198, - 49, - 132, - 33, - 0, - 0, - 189, - 239, - 132, - 33, - 0, - 0, - 181, - 173, - 132, - 33, - 0, - 0, - 173, - 107, - 132, - 33, - 0, - 0, - 165, - 41, - 132, - 33, - 0, - 0, - 156, - 231, - 132, - 33, - 0, - 0, - 148, - 165, - 132, - 33, - 0, - 0, - 140, - 99, - 132, - 33, - 0, - 0, - 132, - 33, - 132, - 33, - 0, - 0, - 123, - 222, - 132, - 33, - 0, - 0, - 115, - 156, - 132, - 33, - 8, - 66, - 107, - 90, - 132, - 33, - 16, - 132, - 99, - 24, - 132, - 33, - 24, - 198, - 90, - 214, - 132, - 33, - 33, - 8, - 82, - 148, - 132, - 33, - 41, - 74, - 74, - 82, - 132, - 33, - 49, - 140, - 66, - 16, - 132, - 33, - 57, - 206, - 57, - 206, - 132, - 33, - 66, - 16, - 49, - 140, - 132, - 33, - 74, - 82, - 41, - 74, - 132, - 33, - 82, - 148, - 33, - 8, - 132, - 33, - 90, - 214, - 24, - 198, - 132, - 33, - 99, - 24, - 16, - 132, - 132, - 33, - 107, - 90, - 8, - 66, - 132, - 33, - 115, - 156, - 0, - 0, - 132, - 33, - 123, - 222, - 255, - 255, - 123, - 222, - 0, - 0, - 247, - 189, - 123, - 222, - 0, - 0, - 239, - 123, - 123, - 222, - 0, - 0, - 231, - 57, - 123, - 222, - 0, - 0, - 222, - 247, - 123, - 222, - 0, - 0, - 214, - 181, - 123, - 222, - 0, - 0, - 206, - 115, - 123, - 222, - 0, - 0, - 198, - 49, - 123, - 222, - 0, - 0, - 189, - 239, - 123, - 222, - 0, - 0, - 181, - 173, - 123, - 222, - 0, - 0, - 173, - 107, - 123, - 222, - 0, - 0, - 165, - 41, - 123, - 222, - 0, - 0, - 156, - 231, - 123, - 222, - 0, - 0, - 148, - 165, - 123, - 222, - 0, - 0, - 140, - 99, - 123, - 222, - 0, - 0, - 132, - 33, - 123, - 222, - 0, - 0, - 123, - 222, - 123, - 222, - 8, - 66, - 115, - 156, - 123, - 222, - 16, - 132, - 107, - 90, - 123, - 222, - 24, - 198, - 99, - 24, - 123, - 222, - 33, - 8, - 90, - 214, - 123, - 222, - 41, - 74, - 82, - 148, - 123, - 222, - 49, - 140, - 74, - 82, - 123, - 222, - 57, - 206, - 66, - 16, - 123, - 222, - 66, - 16, - 57, - 206, - 123, - 222, - 74, - 82, - 49, - 140, - 123, - 222, - 82, - 148, - 41, - 74, - 123, - 222, - 90, - 214, - 33, - 8, - 123, - 222, - 99, - 24, - 24, - 198, - 123, - 222, - 107, - 90, - 16, - 132, - 123, - 222, - 115, - 156, - 8, - 66, - 123, - 222, - 123, - 222, - 0, - 0, - 123, - 222, - 132, - 33, - 255, - 255, - 115, - 156, - 0, - 0, - 247, - 189, - 115, - 156, - 0, - 0, - 239, - 123, - 115, - 156, - 0, - 0, - 231, - 57, - 115, - 156, - 0, - 0, - 222, - 247, - 115, - 156, - 0, - 0, - 214, - 181, - 115, - 156, - 0, - 0, - 206, - 115, - 115, - 156, - 0, - 0, - 198, - 49, - 115, - 156, - 0, - 0, - 189, - 239, - 115, - 156, - 0, - 0, - 181, - 173, - 115, - 156, - 0, - 0, - 173, - 107, - 115, - 156, - 0, - 0, - 165, - 41, - 115, - 156, - 0, - 0, - 156, - 231, - 115, - 156, - 0, - 0, - 148, - 165, - 115, - 156, - 0, - 0, - 140, - 99, - 115, - 156, - 0, - 0, - 132, - 33, - 115, - 156, - 8, - 66, - 123, - 222, - 115, - 156, - 16, - 132, - 115, - 156, - 115, - 156, - 24, - 198, - 107, - 90, - 115, - 156, - 33, - 8, - 99, - 24, - 115, - 156, - 41, - 74, - 90, - 214, - 115, - 156, - 49, - 140, - 82, - 148, - 115, - 156, - 57, - 206, - 74, - 82, - 115, - 156, - 66, - 16, - 66, - 16, - 115, - 156, - 74, - 82, - 57, - 206, - 115, - 156, - 82, - 148, - 49, - 140, - 115, - 156, - 90, - 214, - 41, - 74, - 115, - 156, - 99, - 24, - 33, - 8, - 115, - 156, - 107, - 90, - 24, - 198, - 115, - 156, - 115, - 156, - 16, - 132, - 115, - 156, - 123, - 222, - 8, - 66, - 115, - 156, - 132, - 33, - 0, - 0, - 115, - 156, - 140, - 99, - 255, - 255, - 107, - 90, - 0, - 0, - 247, - 189, - 107, - 90, - 0, - 0, - 239, - 123, - 107, - 90, - 0, - 0, - 231, - 57, - 107, - 90, - 0, - 0, - 222, - 247, - 107, - 90, - 0, - 0, - 214, - 181, - 107, - 90, - 0, - 0, - 206, - 115, - 107, - 90, - 0, - 0, - 198, - 49, - 107, - 90, - 0, - 0, - 189, - 239, - 107, - 90, - 0, - 0, - 181, - 173, - 107, - 90, - 0, - 0, - 173, - 107, - 107, - 90, - 0, - 0, - 165, - 41, - 107, - 90, - 0, - 0, - 156, - 231, - 107, - 90, - 0, - 0, - 148, - 165, - 107, - 90, - 0, - 0, - 140, - 99, - 107, - 90, - 8, - 66, - 132, - 33, - 107, - 90, - 16, - 132, - 123, - 222, - 107, - 90, - 24, - 198, - 115, - 156, - 107, - 90, - 33, - 8, - 107, - 90, - 107, - 90, - 41, - 74, - 99, - 24, - 107, - 90, - 49, - 140, - 90, - 214, - 107, - 90, - 57, - 206, - 82, - 148, - 107, - 90, - 66, - 16, - 74, - 82, - 107, - 90, - 74, - 82, - 66, - 16, - 107, - 90, - 82, - 148, - 57, - 206, - 107, - 90, - 90, - 214, - 49, - 140, - 107, - 90, - 99, - 24, - 41, - 74, - 107, - 90, - 107, - 90, - 33, - 8, - 107, - 90, - 115, - 156, - 24, - 198, - 107, - 90, - 123, - 222, - 16, - 132, - 107, - 90, - 132, - 33, - 8, - 66, - 107, - 90, - 140, - 99, - 0, - 0, - 107, - 90, - 148, - 165, - 255, - 255, - 99, - 24, - 0, - 0, - 247, - 189, - 99, - 24, - 0, - 0, - 239, - 123, - 99, - 24, - 0, - 0, - 231, - 57, - 99, - 24, - 0, - 0, - 222, - 247, - 99, - 24, - 0, - 0, - 214, - 181, - 99, - 24, - 0, - 0, - 206, - 115, - 99, - 24, - 0, - 0, - 198, - 49, - 99, - 24, - 0, - 0, - 189, - 239, - 99, - 24, - 0, - 0, - 181, - 173, - 99, - 24, - 0, - 0, - 173, - 107, - 99, - 24, - 0, - 0, - 165, - 41, - 99, - 24, - 0, - 0, - 156, - 231, - 99, - 24, - 0, - 0, - 148, - 165, - 99, - 24, - 8, - 66, - 140, - 99, - 99, - 24, - 16, - 132, - 132, - 33, - 99, - 24, - 24, - 198, - 123, - 222, - 99, - 24, - 33, - 8, - 115, - 156, - 99, - 24, - 41, - 74, - 107, - 90, - 99, - 24, - 49, - 140, - 99, - 24, - 99, - 24, - 57, - 206, - 90, - 214, - 99, - 24, - 66, - 16, - 82, - 148, - 99, - 24, - 74, - 82, - 74, - 82, - 99, - 24, - 82, - 148, - 66, - 16, - 99, - 24, - 90, - 214, - 57, - 206, - 99, - 24, - 99, - 24, - 49, - 140, - 99, - 24, - 107, - 90, - 41, - 74, - 99, - 24, - 115, - 156, - 33, - 8, - 99, - 24, - 123, - 222, - 24, - 198, - 99, - 24, - 132, - 33, - 16, - 132, - 99, - 24, - 140, - 99, - 8, - 66, - 99, - 24, - 148, - 165, - 0, - 0, - 99, - 24, - 156, - 231, - 255, - 255, - 90, - 214, - 0, - 0, - 247, - 189, - 90, - 214, - 0, - 0, - 239, - 123, - 90, - 214, - 0, - 0, - 231, - 57, - 90, - 214, - 0, - 0, - 222, - 247, - 90, - 214, - 0, - 0, - 214, - 181, - 90, - 214, - 0, - 0, - 206, - 115, - 90, - 214, - 0, - 0, - 198, - 49, - 90, - 214, - 0, - 0, - 189, - 239, - 90, - 214, - 0, - 0, - 181, - 173, - 90, - 214, - 0, - 0, - 173, - 107, - 90, - 214, - 0, - 0, - 165, - 41, - 90, - 214, - 0, - 0, - 156, - 231, - 90, - 214, - 8, - 66, - 148, - 165, - 90, - 214, - 16, - 132, - 140, - 99, - 90, - 214, - 24, - 198, - 132, - 33, - 90, - 214, - 33, - 8, - 123, - 222, - 90, - 214, - 41, - 74, - 115, - 156, - 90, - 214, - 49, - 140, - 107, - 90, - 90, - 214, - 57, - 206, - 99, - 24, - 90, - 214, - 66, - 16, - 90, - 214, - 90, - 214, - 74, - 82, - 82, - 148, - 90, - 214, - 82, - 148, - 74, - 82, - 90, - 214, - 90, - 214, - 66, - 16, - 90, - 214, - 99, - 24, - 57, - 206, - 90, - 214, - 107, - 90, - 49, - 140, - 90, - 214, - 115, - 156, - 41, - 74, - 90, - 214, - 123, - 222, - 33, - 8, - 90, - 214, - 132, - 33, - 24, - 198, - 90, - 214, - 140, - 99, - 16, - 132, - 90, - 214, - 148, - 165, - 8, - 66, - 90, - 214, - 156, - 231, - 0, - 0, - 90, - 214, - 165, - 41, - 255, - 255, - 82, - 148, - 0, - 0, - 247, - 189, - 82, - 148, - 0, - 0, - 239, - 123, - 82, - 148, - 0, - 0, - 231, - 57, - 82, - 148, - 0, - 0, - 222, - 247, - 82, - 148, - 0, - 0, - 214, - 181, - 82, - 148, - 0, - 0, - 206, - 115, - 82, - 148, - 0, - 0, - 198, - 49, - 82, - 148, - 0, - 0, - 189, - 239, - 82, - 148, - 0, - 0, - 181, - 173, - 82, - 148, - 0, - 0, - 173, - 107, - 82, - 148, - 0, - 0, - 165, - 41, - 82, - 148, - 8, - 66, - 156, - 231, - 82, - 148, - 16, - 132, - 148, - 165, - 82, - 148, - 24, - 198, - 140, - 99, - 82, - 148, - 33, - 8, - 132, - 33, - 82, - 148, - 41, - 74, - 123, - 222, - 82, - 148, - 49, - 140, - 115, - 156, - 82, - 148, - 57, - 206, - 107, - 90, - 82, - 148, - 66, - 16, - 99, - 24, - 82, - 148, - 74, - 82, - 90, - 214, - 82, - 148, - 82, - 148, - 82, - 148, - 82, - 148, - 90, - 214, - 74, - 82, - 82, - 148, - 99, - 24, - 66, - 16, - 82, - 148, - 107, - 90, - 57, - 206, - 82, - 148, - 115, - 156, - 49, - 140, - 82, - 148, - 123, - 222, - 41, - 74, - 82, - 148, - 132, - 33, - 33, - 8, - 82, - 148, - 140, - 99, - 24, - 198, - 82, - 148, - 148, - 165, - 16, - 132, - 82, - 148, - 156, - 231, - 8, - 66, - 82, - 148, - 165, - 41, - 0, - 0, - 82, - 148, - 173, - 107, - 255, - 255, - 74, - 82, - 0, - 0, - 247, - 189, - 74, - 82, - 0, - 0, - 239, - 123, - 74, - 82, - 0, - 0, - 231, - 57, - 74, - 82, - 0, - 0, - 222, - 247, - 74, - 82, - 0, - 0, - 214, - 181, - 74, - 82, - 0, - 0, - 206, - 115, - 74, - 82, - 0, - 0, - 198, - 49, - 74, - 82, - 0, - 0, - 189, - 239, - 74, - 82, - 0, - 0, - 181, - 173, - 74, - 82, - 0, - 0, - 173, - 107, - 74, - 82, - 8, - 66, - 165, - 41, - 74, - 82, - 16, - 132, - 156, - 231, - 74, - 82, - 24, - 198, - 148, - 165, - 74, - 82, - 33, - 8, - 140, - 99, - 74, - 82, - 41, - 74, - 132, - 33, - 74, - 82, - 49, - 140, - 123, - 222, - 74, - 82, - 57, - 206, - 115, - 156, - 74, - 82, - 66, - 16, - 107, - 90, - 74, - 82, - 74, - 82, - 99, - 24, - 74, - 82, - 82, - 148, - 90, - 214, - 74, - 82, - 90, - 214, - 82, - 148, - 74, - 82, - 99, - 24, - 74, - 82, - 74, - 82, - 107, - 90, - 66, - 16, - 74, - 82, - 115, - 156, - 57, - 206, - 74, - 82, - 123, - 222, - 49, - 140, - 74, - 82, - 132, - 33, - 41, - 74, - 74, - 82, - 140, - 99, - 33, - 8, - 74, - 82, - 148, - 165, - 24, - 198, - 74, - 82, - 156, - 231, - 16, - 132, - 74, - 82, - 165, - 41, - 8, - 66, - 74, - 82, - 173, - 107, - 0, - 0, - 74, - 82, - 181, - 173, - 255, - 255, - 66, - 16, - 0, - 0, - 247, - 189, - 66, - 16, - 0, - 0, - 239, - 123, - 66, - 16, - 0, - 0, - 231, - 57, - 66, - 16, - 0, - 0, - 222, - 247, - 66, - 16, - 0, - 0, - 214, - 181, - 66, - 16, - 0, - 0, - 206, - 115, - 66, - 16, - 0, - 0, - 198, - 49, - 66, - 16, - 0, - 0, - 189, - 239, - 66, - 16, - 0, - 0, - 181, - 173, - 66, - 16, - 8, - 66, - 173, - 107, - 66, - 16, - 16, - 132, - 165, - 41, - 66, - 16, - 24, - 198, - 156, - 231, - 66, - 16, - 33, - 8, - 148, - 165, - 66, - 16, - 41, - 74, - 140, - 99, - 66, - 16, - 49, - 140, - 132, - 33, - 66, - 16, - 57, - 206, - 123, - 222, - 66, - 16, - 66, - 16, - 115, - 156, - 66, - 16, - 74, - 82, - 107, - 90, - 66, - 16, - 82, - 148, - 99, - 24, - 66, - 16, - 90, - 214, - 90, - 214, - 66, - 16, - 99, - 24, - 82, - 148, - 66, - 16, - 107, - 90, - 74, - 82, - 66, - 16, - 115, - 156, - 66, - 16, - 66, - 16, - 123, - 222, - 57, - 206, - 66, - 16, - 132, - 33, - 49, - 140, - 66, - 16, - 140, - 99, - 41, - 74, - 66, - 16, - 148, - 165, - 33, - 8, - 66, - 16, - 156, - 231, - 24, - 198, - 66, - 16, - 165, - 41, - 16, - 132, - 66, - 16, - 173, - 107, - 8, - 66, - 66, - 16, - 181, - 173, - 0, - 0, - 66, - 16, - 189, - 239, - 255, - 255, - 57, - 206, - 0, - 0, - 247, - 189, - 57, - 206, - 0, - 0, - 239, - 123, - 57, - 206, - 0, - 0, - 231, - 57, - 57, - 206, - 0, - 0, - 222, - 247, - 57, - 206, - 0, - 0, - 214, - 181, - 57, - 206, - 0, - 0, - 206, - 115, - 57, - 206, - 0, - 0, - 198, - 49, - 57, - 206, - 0, - 0, - 189, - 239, - 57, - 206, - 8, - 66, - 181, - 173, - 57, - 206, - 16, - 132, - 173, - 107, - 57, - 206, - 24, - 198, - 165, - 41, - 57, - 206, - 33, - 8, - 156, - 231, - 57, - 206, - 41, - 74, - 148, - 165, - 57, - 206, - 49, - 140, - 140, - 99, - 57, - 206, - 57, - 206, - 132, - 33, - 57, - 206, - 66, - 16, - 123, - 222, - 57, - 206, - 74, - 82, - 115, - 156, - 57, - 206, - 82, - 148, - 107, - 90, - 57, - 206, - 90, - 214, - 99, - 24, - 57, - 206, - 99, - 24, - 90, - 214, - 57, - 206, - 107, - 90, - 82, - 148, - 57, - 206, - 115, - 156, - 74, - 82, - 57, - 206, - 123, - 222, - 66, - 16, - 57, - 206, - 132, - 33, - 57, - 206, - 57, - 206, - 140, - 99, - 49, - 140, - 57, - 206, - 148, - 165, - 41, - 74, - 57, - 206, - 156, - 231, - 33, - 8, - 57, - 206, - 165, - 41, - 24, - 198, - 57, - 206, - 173, - 107, - 16, - 132, - 57, - 206, - 181, - 173, - 8, - 66, - 57, - 206, - 189, - 239, - 0, - 0, - 57, - 206, - 198, - 49, - 255, - 255, - 49, - 140, - 0, - 0, - 247, - 189, - 49, - 140, - 0, - 0, - 239, - 123, - 49, - 140, - 0, - 0, - 231, - 57, - 49, - 140, - 0, - 0, - 222, - 247, - 49, - 140, - 0, - 0, - 214, - 181, - 49, - 140, - 0, - 0, - 206, - 115, - 49, - 140, - 0, - 0, - 198, - 49, - 49, - 140, - 8, - 66, - 189, - 239, - 49, - 140, - 16, - 132, - 181, - 173, - 49, - 140, - 24, - 198, - 173, - 107, - 49, - 140, - 33, - 8, - 165, - 41, - 49, - 140, - 41, - 74, - 156, - 231, - 49, - 140, - 49, - 140, - 148, - 165, - 49, - 140, - 57, - 206, - 140, - 99, - 49, - 140, - 66, - 16, - 132, - 33, - 49, - 140, - 74, - 82, - 123, - 222, - 49, - 140, - 82, - 148, - 115, - 156, - 49, - 140, - 90, - 214, - 107, - 90, - 49, - 140, - 99, - 24, - 99, - 24, - 49, - 140, - 107, - 90, - 90, - 214, - 49, - 140, - 115, - 156, - 82, - 148, - 49, - 140, - 123, - 222, - 74, - 82, - 49, - 140, - 132, - 33, - 66, - 16, - 49, - 140, - 140, - 99, - 57, - 206, - 49, - 140, - 148, - 165, - 49, - 140, - 49, - 140, - 156, - 231, - 41, - 74, - 49, - 140, - 165, - 41, - 33, - 8, - 49, - 140, - 173, - 107, - 24, - 198, - 49, - 140, - 181, - 173, - 16, - 132, - 49, - 140, - 189, - 239, - 8, - 66, - 49, - 140, - 198, - 49, - 0, - 0, - 49, - 140, - 206, - 115, - 255, - 255, - 41, - 74, - 0, - 0, - 247, - 189, - 41, - 74, - 0, - 0, - 239, - 123, - 41, - 74, - 0, - 0, - 231, - 57, - 41, - 74, - 0, - 0, - 222, - 247, - 41, - 74, - 0, - 0, - 214, - 181, - 41, - 74, - 0, - 0, - 206, - 115, - 41, - 74, - 8, - 66, - 198, - 49, - 41, - 74, - 16, - 132, - 189, - 239, - 41, - 74, - 24, - 198, - 181, - 173, - 41, - 74, - 33, - 8, - 173, - 107, - 41, - 74, - 41, - 74, - 165, - 41, - 41, - 74, - 49, - 140, - 156, - 231, - 41, - 74, - 57, - 206, - 148, - 165, - 41, - 74, - 66, - 16, - 140, - 99, - 41, - 74, - 74, - 82, - 132, - 33, - 41, - 74, - 82, - 148, - 123, - 222, - 41, - 74, - 90, - 214, - 115, - 156, - 41, - 74, - 99, - 24, - 107, - 90, - 41, - 74, - 107, - 90, - 99, - 24, - 41, - 74, - 115, - 156, - 90, - 214, - 41, - 74, - 123, - 222, - 82, - 148, - 41, - 74, - 132, - 33, - 74, - 82, - 41, - 74, - 140, - 99, - 66, - 16, - 41, - 74, - 148, - 165, - 57, - 206, - 41, - 74, - 156, - 231, - 49, - 140, - 41, - 74, - 165, - 41, - 41, - 74, - 41, - 74, - 173, - 107, - 33, - 8, - 41, - 74, - 181, - 173, - 24, - 198, - 41, - 74, - 189, - 239, - 16, - 132, - 41, - 74, - 198, - 49, - 8, - 66, - 41, - 74, - 206, - 115, - 0, - 0, - 41, - 74, - 214, - 181, - 255, - 255, - 33, - 8, - 0, - 0, - 247, - 189, - 33, - 8, - 0, - 0, - 239, - 123, - 33, - 8, - 0, - 0, - 231, - 57, - 33, - 8, - 0, - 0, - 222, - 247, - 33, - 8, - 0, - 0, - 214, - 181, - 33, - 8, - 8, - 66, - 206, - 115, - 33, - 8, - 16, - 132, - 198, - 49, - 33, - 8, - 24, - 198, - 189, - 239, - 33, - 8, - 33, - 8, - 181, - 173, - 33, - 8, - 41, - 74, - 173, - 107, - 33, - 8, - 49, - 140, - 165, - 41, - 33, - 8, - 57, - 206, - 156, - 231, - 33, - 8, - 66, - 16, - 148, - 165, - 33, - 8, - 74, - 82, - 140, - 99, - 33, - 8, - 82, - 148, - 132, - 33, - 33, - 8, - 90, - 214, - 123, - 222, - 33, - 8, - 99, - 24, - 115, - 156, - 33, - 8, - 107, - 90, - 107, - 90, - 33, - 8, - 115, - 156, - 99, - 24, - 33, - 8, - 123, - 222, - 90, - 214, - 33, - 8, - 132, - 33, - 82, - 148, - 33, - 8, - 140, - 99, - 74, - 82, - 33, - 8, - 148, - 165, - 66, - 16, - 33, - 8, - 156, - 231, - 57, - 206, - 33, - 8, - 165, - 41, - 49, - 140, - 33, - 8, - 173, - 107, - 41, - 74, - 33, - 8, - 181, - 173, - 33, - 8, - 33, - 8, - 189, - 239, - 24, - 198, - 33, - 8, - 198, - 49, - 16, - 132, - 33, - 8, - 206, - 115, - 8, - 66, - 33, - 8, - 214, - 181, - 0, - 0, - 33, - 8, - 222, - 247, - 255, - 255, - 24, - 198, - 0, - 0, - 247, - 189, - 24, - 198, - 0, - 0, - 239, - 123, - 24, - 198, - 0, - 0, - 231, - 57, - 24, - 198, - 0, - 0, - 222, - 247, - 24, - 198, - 8, - 66, - 214, - 181, - 24, - 198, - 16, - 132, - 206, - 115, - 24, - 198, - 24, - 198, - 198, - 49, - 24, - 198, - 33, - 8, - 189, - 239, - 24, - 198, - 41, - 74, - 181, - 173, - 24, - 198, - 49, - 140, - 173, - 107, - 24, - 198, - 57, - 206, - 165, - 41, - 24, - 198, - 66, - 16, - 156, - 231, - 24, - 198, - 74, - 82, - 148, - 165, - 24, - 198, - 82, - 148, - 140, - 99, - 24, - 198, - 90, - 214, - 132, - 33, - 24, - 198, - 99, - 24, - 123, - 222, - 24, - 198, - 107, - 90, - 115, - 156, - 24, - 198, - 115, - 156, - 107, - 90, - 24, - 198, - 123, - 222, - 99, - 24, - 24, - 198, - 132, - 33, - 90, - 214, - 24, - 198, - 140, - 99, - 82, - 148, - 24, - 198, - 148, - 165, - 74, - 82, - 24, - 198, - 156, - 231, - 66, - 16, - 24, - 198, - 165, - 41, - 57, - 206, - 24, - 198, - 173, - 107, - 49, - 140, - 24, - 198, - 181, - 173, - 41, - 74, - 24, - 198, - 189, - 239, - 33, - 8, - 24, - 198, - 198, - 49, - 24, - 198, - 24, - 198, - 206, - 115, - 16, - 132, - 24, - 198, - 214, - 181, - 8, - 66, - 24, - 198, - 222, - 247, - 0, - 0, - 24, - 198, - 231, - 57, - 255, - 255, - 16, - 132, - 0, - 0, - 247, - 189, - 16, - 132, - 0, - 0, - 239, - 123, - 16, - 132, - 0, - 0, - 231, - 57, - 16, - 132, - 8, - 66, - 222, - 247, - 16, - 132, - 16, - 132, - 214, - 181, - 16, - 132, - 24, - 198, - 206, - 115, - 16, - 132, - 33, - 8, - 198, - 49, - 16, - 132, - 41, - 74, - 189, - 239, - 16, - 132, - 49, - 140, - 181, - 173, - 16, - 132, - 57, - 206, - 173, - 107, - 16, - 132, - 66, - 16, - 165, - 41, - 16, - 132, - 74, - 82, - 156, - 231, - 16, - 132, - 82, - 148, - 148, - 165, - 16, - 132, - 90, - 214, - 140, - 99, - 16, - 132, - 99, - 24, - 132, - 33, - 16, - 132, - 107, - 90, - 123, - 222, - 16, - 132, - 115, - 156, - 115, - 156, - 16, - 132, - 123, - 222, - 107, - 90, - 16, - 132, - 132, - 33, - 99, - 24, - 16, - 132, - 140, - 99, - 90, - 214, - 16, - 132, - 148, - 165, - 82, - 148, - 16, - 132, - 156, - 231, - 74, - 82, - 16, - 132, - 165, - 41, - 66, - 16, - 16, - 132, - 173, - 107, - 57, - 206, - 16, - 132, - 181, - 173, - 49, - 140, - 16, - 132, - 189, - 239, - 41, - 74, - 16, - 132, - 198, - 49, - 33, - 8, - 16, - 132, - 206, - 115, - 24, - 198, - 16, - 132, - 214, - 181, - 16, - 132, - 16, - 132, - 222, - 247, - 8, - 66, - 16, - 132, - 231, - 57, - 0, - 0, - 16, - 132, - 239, - 123, - 255, - 255, - 8, - 66, - 0, - 0, - 247, - 189, - 8, - 66, - 0, - 0, - 239, - 123, - 8, - 66, - 8, - 66, - 231, - 57, - 8, - 66, - 16, - 132, - 222, - 247, - 8, - 66, - 24, - 198, - 214, - 181, - 8, - 66, - 33, - 8, - 206, - 115, - 8, - 66, - 41, - 74, - 198, - 49, - 8, - 66, - 49, - 140, - 189, - 239, - 8, - 66, - 57, - 206, - 181, - 173, - 8, - 66, - 66, - 16, - 173, - 107, - 8, - 66, - 74, - 82, - 165, - 41, - 8, - 66, - 82, - 148, - 156, - 231, - 8, - 66, - 90, - 214, - 148, - 165, - 8, - 66, - 99, - 24, - 140, - 99, - 8, - 66, - 107, - 90, - 132, - 33, - 8, - 66, - 115, - 156, - 123, - 222, - 8, - 66, - 123, - 222, - 115, - 156, - 8, - 66, - 132, - 33, - 107, - 90, - 8, - 66, - 140, - 99, - 99, - 24, - 8, - 66, - 148, - 165, - 90, - 214, - 8, - 66, - 156, - 231, - 82, - 148, - 8, - 66, - 165, - 41, - 74, - 82, - 8, - 66, - 173, - 107, - 66, - 16, - 8, - 66, - 181, - 173, - 57, - 206, - 8, - 66, - 189, - 239, - 49, - 140, - 8, - 66, - 198, - 49, - 41, - 74, - 8, - 66, - 206, - 115, - 33, - 8, - 8, - 66, - 214, - 181, - 24, - 198, - 8, - 66, - 222, - 247, - 16, - 132, - 8, - 66, - 231, - 57, - 8, - 66, - 8, - 66, - 239, - 123, - 0, - 0, - 8, - 66, - 247, - 189, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 8, - 66, - 239, - 123, - 0, - 0, - 16, - 132, - 231, - 57, - 0, - 0, - 24, - 198, - 222, - 247, - 0, - 0, - 33, - 8, - 214, - 181, - 0, - 0, - 41, - 74, - 206, - 115, - 0, - 0, - 49, - 140, - 198, - 49, - 0, - 0, - 57, - 206, - 189, - 239, - 0, - 0, - 66, - 16, - 181, - 173, - 0, - 0, - 74, - 82, - 173, - 107, - 0, - 0, - 82, - 148, - 165, - 41, - 0, - 0, - 90, - 214, - 156, - 231, - 0, - 0, - 99, - 24, - 148, - 165, - 0, - 0, - 107, - 90, - 140, - 99, - 0, - 0, - 115, - 156, - 132, - 33, - 0, - 0, - 123, - 222, - 123, - 222, - 0, - 0, - 132, - 33, - 115, - 156, - 0, - 0, - 140, - 99, - 107, - 90, - 0, - 0, - 148, - 165, - 99, - 24, - 0, - 0, - 156, - 231, - 90, - 214, - 0, - 0, - 165, - 41, - 82, - 148, - 0, - 0, - 173, - 107, - 74, - 82, - 0, - 0, - 181, - 173, - 66, - 16, - 0, - 0, - 189, - 239, - 57, - 206, - 0, - 0, - 198, - 49, - 49, - 140, - 0, - 0, - 206, - 115, - 41, - 74, - 0, - 0, - 214, - 181, - 33, - 8, - 0, - 0, - 222, - 247, - 24, - 198, - 0, - 0, - 231, - 57, - 16, - 132, - 0, - 0, - 239, - 123, - 8, - 66, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, -] -`; - -exports[`pixels browser rgb-alpha-8bit.png 1`] = ` -Uint8Array [ - 255, - 0, - 8, - 0, - 255, - 0, - 8, - 8, - 255, - 0, - 8, - 16, - 255, - 0, - 8, - 24, - 255, - 0, - 8, - 32, - 255, - 0, - 8, - 41, - 255, - 0, - 8, - 49, - 255, - 0, - 8, - 57, - 255, - 0, - 8, - 65, - 255, - 0, - 8, - 74, - 255, - 0, - 8, - 82, - 255, - 0, - 8, - 90, - 255, - 0, - 8, - 98, - 255, - 0, - 8, - 106, - 255, - 0, - 8, - 115, - 255, - 0, - 8, - 123, - 255, - 0, - 8, - 131, - 255, - 0, - 8, - 139, - 255, - 0, - 8, - 148, - 255, - 0, - 8, - 156, - 255, - 0, - 8, - 164, - 255, - 0, - 8, - 172, - 255, - 0, - 8, - 180, - 255, - 0, - 8, - 189, - 255, - 0, - 8, - 197, - 255, - 0, - 8, - 205, - 255, - 0, - 8, - 213, - 255, - 0, - 8, - 222, - 255, - 0, - 8, - 230, - 255, - 0, - 8, - 238, - 255, - 0, - 8, - 246, - 255, - 0, - 8, - 255, - 255, - 31, - 8, - 0, - 255, - 31, - 8, - 8, - 255, - 31, - 8, - 16, - 255, - 31, - 8, - 24, - 255, - 31, - 8, - 32, - 255, - 31, - 8, - 41, - 255, - 31, - 8, - 49, - 255, - 31, - 8, - 57, - 255, - 31, - 8, - 65, - 255, - 31, - 8, - 74, - 255, - 31, - 8, - 82, - 255, - 31, - 8, - 90, - 255, - 31, - 8, - 98, - 255, - 31, - 8, - 106, - 255, - 31, - 8, - 115, - 255, - 31, - 8, - 123, - 255, - 31, - 8, - 131, - 255, - 31, - 8, - 139, - 255, - 31, - 8, - 148, - 255, - 31, - 8, - 156, - 255, - 31, - 8, - 164, - 255, - 31, - 8, - 172, - 255, - 31, - 8, - 180, - 255, - 31, - 8, - 189, - 255, - 31, - 8, - 197, - 255, - 31, - 8, - 205, - 255, - 31, - 8, - 213, - 255, - 31, - 8, - 222, - 255, - 31, - 8, - 230, - 255, - 31, - 8, - 238, - 255, - 31, - 8, - 246, - 255, - 31, - 8, - 255, - 255, - 63, - 8, - 0, - 255, - 63, - 8, - 8, - 255, - 63, - 8, - 16, - 255, - 63, - 8, - 24, - 255, - 63, - 8, - 32, - 255, - 63, - 8, - 41, - 255, - 63, - 8, - 49, - 255, - 63, - 8, - 57, - 255, - 63, - 8, - 65, - 255, - 63, - 8, - 74, - 255, - 63, - 8, - 82, - 255, - 63, - 8, - 90, - 255, - 63, - 8, - 98, - 255, - 63, - 8, - 106, - 255, - 63, - 8, - 115, - 255, - 63, - 8, - 123, - 255, - 63, - 8, - 131, - 255, - 63, - 8, - 139, - 255, - 63, - 8, - 148, - 255, - 63, - 8, - 156, - 255, - 63, - 8, - 164, - 255, - 63, - 8, - 172, - 255, - 63, - 8, - 180, - 255, - 63, - 8, - 189, - 255, - 63, - 8, - 197, - 255, - 63, - 8, - 205, - 255, - 63, - 8, - 213, - 255, - 63, - 8, - 222, - 255, - 63, - 8, - 230, - 255, - 63, - 8, - 238, - 255, - 63, - 8, - 246, - 255, - 63, - 8, - 255, - 255, - 95, - 8, - 0, - 255, - 95, - 8, - 8, - 255, - 95, - 8, - 16, - 255, - 95, - 8, - 24, - 255, - 95, - 8, - 32, - 255, - 95, - 8, - 41, - 255, - 95, - 8, - 49, - 255, - 95, - 8, - 57, - 255, - 95, - 8, - 65, - 255, - 95, - 8, - 74, - 255, - 95, - 8, - 82, - 255, - 95, - 8, - 90, - 255, - 95, - 8, - 98, - 255, - 95, - 8, - 106, - 255, - 95, - 8, - 115, - 255, - 95, - 8, - 123, - 255, - 95, - 8, - 131, - 255, - 95, - 8, - 139, - 255, - 95, - 8, - 148, - 255, - 95, - 8, - 156, - 255, - 95, - 8, - 164, - 255, - 95, - 8, - 172, - 255, - 95, - 8, - 180, - 255, - 95, - 8, - 189, - 255, - 95, - 8, - 197, - 255, - 95, - 8, - 205, - 255, - 95, - 8, - 213, - 255, - 95, - 8, - 222, - 255, - 95, - 8, - 230, - 255, - 95, - 8, - 238, - 255, - 95, - 8, - 246, - 255, - 95, - 8, - 255, - 255, - 127, - 7, - 0, - 255, - 127, - 7, - 8, - 255, - 127, - 7, - 16, - 255, - 127, - 7, - 24, - 255, - 127, - 7, - 32, - 255, - 127, - 7, - 41, - 255, - 127, - 7, - 49, - 255, - 127, - 7, - 57, - 255, - 127, - 7, - 65, - 255, - 127, - 7, - 74, - 255, - 127, - 7, - 82, - 255, - 127, - 7, - 90, - 255, - 127, - 7, - 98, - 255, - 127, - 7, - 106, - 255, - 127, - 7, - 115, - 255, - 127, - 7, - 123, - 255, - 127, - 7, - 131, - 255, - 127, - 7, - 139, - 255, - 127, - 7, - 148, - 255, - 127, - 7, - 156, - 255, - 127, - 7, - 164, - 255, - 127, - 7, - 172, - 255, - 127, - 7, - 180, - 255, - 127, - 7, - 189, - 255, - 127, - 7, - 197, - 255, - 127, - 7, - 205, - 255, - 127, - 7, - 213, - 255, - 127, - 7, - 222, - 255, - 127, - 7, - 230, - 255, - 127, - 7, - 238, - 255, - 127, - 7, - 246, - 255, - 127, - 7, - 255, - 255, - 159, - 7, - 0, - 255, - 159, - 7, - 8, - 255, - 159, - 7, - 16, - 255, - 159, - 7, - 24, - 255, - 159, - 7, - 32, - 255, - 159, - 7, - 41, - 255, - 159, - 7, - 49, - 255, - 159, - 7, - 57, - 255, - 159, - 7, - 65, - 255, - 159, - 7, - 74, - 255, - 159, - 7, - 82, - 255, - 159, - 7, - 90, - 255, - 159, - 7, - 98, - 255, - 159, - 7, - 106, - 255, - 159, - 7, - 115, - 255, - 159, - 7, - 123, - 255, - 159, - 7, - 131, - 255, - 159, - 7, - 139, - 255, - 159, - 7, - 148, - 255, - 159, - 7, - 156, - 255, - 159, - 7, - 164, - 255, - 159, - 7, - 172, - 255, - 159, - 7, - 180, - 255, - 159, - 7, - 189, - 255, - 159, - 7, - 197, - 255, - 159, - 7, - 205, - 255, - 159, - 7, - 213, - 255, - 159, - 7, - 222, - 255, - 159, - 7, - 230, - 255, - 159, - 7, - 238, - 255, - 159, - 7, - 246, - 255, - 159, - 7, - 255, - 255, - 191, - 7, - 0, - 255, - 191, - 7, - 8, - 255, - 191, - 7, - 16, - 255, - 191, - 7, - 24, - 255, - 191, - 7, - 32, - 255, - 191, - 7, - 41, - 255, - 191, - 7, - 49, - 255, - 191, - 7, - 57, - 255, - 191, - 7, - 65, - 255, - 191, - 7, - 74, - 255, - 191, - 7, - 82, - 255, - 191, - 7, - 90, - 255, - 191, - 7, - 98, - 255, - 191, - 7, - 106, - 255, - 191, - 7, - 115, - 255, - 191, - 7, - 123, - 255, - 191, - 7, - 131, - 255, - 191, - 7, - 139, - 255, - 191, - 7, - 148, - 255, - 191, - 7, - 156, - 255, - 191, - 7, - 164, - 255, - 191, - 7, - 172, - 255, - 191, - 7, - 180, - 255, - 191, - 7, - 189, - 255, - 191, - 7, - 197, - 255, - 191, - 7, - 205, - 255, - 191, - 7, - 213, - 255, - 191, - 7, - 222, - 255, - 191, - 7, - 230, - 255, - 191, - 7, - 238, - 255, - 191, - 7, - 246, - 255, - 191, - 7, - 255, - 255, - 223, - 7, - 0, - 255, - 223, - 7, - 8, - 255, - 223, - 7, - 16, - 255, - 223, - 7, - 24, - 255, - 223, - 7, - 32, - 255, - 223, - 7, - 41, - 255, - 223, - 7, - 49, - 255, - 223, - 7, - 57, - 255, - 223, - 7, - 65, - 255, - 223, - 7, - 74, - 255, - 223, - 7, - 82, - 255, - 223, - 7, - 90, - 255, - 223, - 7, - 98, - 255, - 223, - 7, - 106, - 255, - 223, - 7, - 115, - 255, - 223, - 7, - 123, - 255, - 223, - 7, - 131, - 255, - 223, - 7, - 139, - 255, - 223, - 7, - 148, - 255, - 223, - 7, - 156, - 255, - 223, - 7, - 164, - 255, - 223, - 7, - 172, - 255, - 223, - 7, - 180, - 255, - 223, - 7, - 189, - 255, - 223, - 7, - 197, - 255, - 223, - 7, - 205, - 255, - 223, - 7, - 213, - 255, - 223, - 7, - 222, - 255, - 223, - 7, - 230, - 255, - 223, - 7, - 238, - 255, - 223, - 7, - 246, - 255, - 223, - 7, - 255, - 255, - 255, - 6, - 0, - 255, - 255, - 6, - 8, - 255, - 255, - 6, - 16, - 255, - 255, - 6, - 24, - 255, - 255, - 6, - 32, - 255, - 255, - 6, - 41, - 255, - 255, - 6, - 49, - 255, - 255, - 6, - 57, - 255, - 255, - 6, - 65, - 255, - 255, - 6, - 74, - 255, - 255, - 6, - 82, - 255, - 255, - 6, - 90, - 255, - 255, - 6, - 98, - 255, - 255, - 6, - 106, - 255, - 255, - 6, - 115, - 255, - 255, - 6, - 123, - 255, - 255, - 6, - 131, - 255, - 255, - 6, - 139, - 255, - 255, - 6, - 148, - 255, - 255, - 6, - 156, - 255, - 255, - 6, - 164, - 255, - 255, - 6, - 172, - 255, - 255, - 6, - 180, - 255, - 255, - 6, - 189, - 255, - 255, - 6, - 197, - 255, - 255, - 6, - 205, - 255, - 255, - 6, - 213, - 255, - 255, - 6, - 222, - 255, - 255, - 6, - 230, - 255, - 255, - 6, - 238, - 255, - 255, - 6, - 246, - 255, - 255, - 6, - 255, - 224, - 255, - 6, - 0, - 224, - 255, - 6, - 8, - 224, - 255, - 6, - 16, - 224, - 255, - 6, - 24, - 224, - 255, - 6, - 32, - 224, - 255, - 6, - 41, - 224, - 255, - 6, - 49, - 224, - 255, - 6, - 57, - 224, - 255, - 6, - 65, - 224, - 255, - 6, - 74, - 224, - 255, - 6, - 82, - 224, - 255, - 6, - 90, - 224, - 255, - 6, - 98, - 224, - 255, - 6, - 106, - 224, - 255, - 6, - 115, - 224, - 255, - 6, - 123, - 224, - 255, - 6, - 131, - 224, - 255, - 6, - 139, - 224, - 255, - 6, - 148, - 224, - 255, - 6, - 156, - 224, - 255, - 6, - 164, - 224, - 255, - 6, - 172, - 224, - 255, - 6, - 180, - 224, - 255, - 6, - 189, - 224, - 255, - 6, - 197, - 224, - 255, - 6, - 205, - 224, - 255, - 6, - 213, - 224, - 255, - 6, - 222, - 224, - 255, - 6, - 230, - 224, - 255, - 6, - 238, - 224, - 255, - 6, - 246, - 224, - 255, - 6, - 255, - 192, - 255, - 6, - 0, - 192, - 255, - 6, - 8, - 192, - 255, - 6, - 16, - 192, - 255, - 6, - 24, - 192, - 255, - 6, - 32, - 192, - 255, - 6, - 41, - 192, - 255, - 6, - 49, - 192, - 255, - 6, - 57, - 192, - 255, - 6, - 65, - 192, - 255, - 6, - 74, - 192, - 255, - 6, - 82, - 192, - 255, - 6, - 90, - 192, - 255, - 6, - 98, - 192, - 255, - 6, - 106, - 192, - 255, - 6, - 115, - 192, - 255, - 6, - 123, - 192, - 255, - 6, - 131, - 192, - 255, - 6, - 139, - 192, - 255, - 6, - 148, - 192, - 255, - 6, - 156, - 192, - 255, - 6, - 164, - 192, - 255, - 6, - 172, - 192, - 255, - 6, - 180, - 192, - 255, - 6, - 189, - 192, - 255, - 6, - 197, - 192, - 255, - 6, - 205, - 192, - 255, - 6, - 213, - 192, - 255, - 6, - 222, - 192, - 255, - 6, - 230, - 192, - 255, - 6, - 238, - 192, - 255, - 6, - 246, - 192, - 255, - 6, - 255, - 160, - 255, - 5, - 0, - 160, - 255, - 5, - 8, - 160, - 255, - 5, - 16, - 160, - 255, - 5, - 24, - 160, - 255, - 5, - 32, - 160, - 255, - 5, - 41, - 160, - 255, - 5, - 49, - 160, - 255, - 5, - 57, - 160, - 255, - 5, - 65, - 160, - 255, - 5, - 74, - 160, - 255, - 5, - 82, - 160, - 255, - 5, - 90, - 160, - 255, - 5, - 98, - 160, - 255, - 5, - 106, - 160, - 255, - 5, - 115, - 160, - 255, - 5, - 123, - 160, - 255, - 5, - 131, - 160, - 255, - 5, - 139, - 160, - 255, - 5, - 148, - 160, - 255, - 5, - 156, - 160, - 255, - 5, - 164, - 160, - 255, - 5, - 172, - 160, - 255, - 5, - 180, - 160, - 255, - 5, - 189, - 160, - 255, - 5, - 197, - 160, - 255, - 5, - 205, - 160, - 255, - 5, - 213, - 160, - 255, - 5, - 222, - 160, - 255, - 5, - 230, - 160, - 255, - 5, - 238, - 160, - 255, - 5, - 246, - 160, - 255, - 5, - 255, - 128, - 255, - 5, - 0, - 128, - 255, - 5, - 8, - 128, - 255, - 5, - 16, - 128, - 255, - 5, - 24, - 128, - 255, - 5, - 32, - 128, - 255, - 5, - 41, - 128, - 255, - 5, - 49, - 128, - 255, - 5, - 57, - 128, - 255, - 5, - 65, - 128, - 255, - 5, - 74, - 128, - 255, - 5, - 82, - 128, - 255, - 5, - 90, - 128, - 255, - 5, - 98, - 128, - 255, - 5, - 106, - 128, - 255, - 5, - 115, - 128, - 255, - 5, - 123, - 128, - 255, - 5, - 131, - 128, - 255, - 5, - 139, - 128, - 255, - 5, - 148, - 128, - 255, - 5, - 156, - 128, - 255, - 5, - 164, - 128, - 255, - 5, - 172, - 128, - 255, - 5, - 180, - 128, - 255, - 5, - 189, - 128, - 255, - 5, - 197, - 128, - 255, - 5, - 205, - 128, - 255, - 5, - 213, - 128, - 255, - 5, - 222, - 128, - 255, - 5, - 230, - 128, - 255, - 5, - 238, - 128, - 255, - 5, - 246, - 128, - 255, - 5, - 255, - 96, - 255, - 5, - 0, - 96, - 255, - 5, - 8, - 96, - 255, - 5, - 16, - 96, - 255, - 5, - 24, - 96, - 255, - 5, - 32, - 96, - 255, - 5, - 41, - 96, - 255, - 5, - 49, - 96, - 255, - 5, - 57, - 96, - 255, - 5, - 65, - 96, - 255, - 5, - 74, - 96, - 255, - 5, - 82, - 96, - 255, - 5, - 90, - 96, - 255, - 5, - 98, - 96, - 255, - 5, - 106, - 96, - 255, - 5, - 115, - 96, - 255, - 5, - 123, - 96, - 255, - 5, - 131, - 96, - 255, - 5, - 139, - 96, - 255, - 5, - 148, - 96, - 255, - 5, - 156, - 96, - 255, - 5, - 164, - 96, - 255, - 5, - 172, - 96, - 255, - 5, - 180, - 96, - 255, - 5, - 189, - 96, - 255, - 5, - 197, - 96, - 255, - 5, - 205, - 96, - 255, - 5, - 213, - 96, - 255, - 5, - 222, - 96, - 255, - 5, - 230, - 96, - 255, - 5, - 238, - 96, - 255, - 5, - 246, - 96, - 255, - 5, - 255, - 64, - 255, - 5, - 0, - 64, - 255, - 5, - 8, - 64, - 255, - 5, - 16, - 64, - 255, - 5, - 24, - 64, - 255, - 5, - 32, - 64, - 255, - 5, - 41, - 64, - 255, - 5, - 49, - 64, - 255, - 5, - 57, - 64, - 255, - 5, - 65, - 64, - 255, - 5, - 74, - 64, - 255, - 5, - 82, - 64, - 255, - 5, - 90, - 64, - 255, - 5, - 98, - 64, - 255, - 5, - 106, - 64, - 255, - 5, - 115, - 64, - 255, - 5, - 123, - 64, - 255, - 5, - 131, - 64, - 255, - 5, - 139, - 64, - 255, - 5, - 148, - 64, - 255, - 5, - 156, - 64, - 255, - 5, - 164, - 64, - 255, - 5, - 172, - 64, - 255, - 5, - 180, - 64, - 255, - 5, - 189, - 64, - 255, - 5, - 197, - 64, - 255, - 5, - 205, - 64, - 255, - 5, - 213, - 64, - 255, - 5, - 222, - 64, - 255, - 5, - 230, - 64, - 255, - 5, - 238, - 64, - 255, - 5, - 246, - 64, - 255, - 5, - 255, - 32, - 255, - 4, - 0, - 32, - 255, - 4, - 8, - 32, - 255, - 4, - 16, - 32, - 255, - 4, - 24, - 32, - 255, - 4, - 32, - 32, - 255, - 4, - 41, - 32, - 255, - 4, - 49, - 32, - 255, - 4, - 57, - 32, - 255, - 4, - 65, - 32, - 255, - 4, - 74, - 32, - 255, - 4, - 82, - 32, - 255, - 4, - 90, - 32, - 255, - 4, - 98, - 32, - 255, - 4, - 106, - 32, - 255, - 4, - 115, - 32, - 255, - 4, - 123, - 32, - 255, - 4, - 131, - 32, - 255, - 4, - 139, - 32, - 255, - 4, - 148, - 32, - 255, - 4, - 156, - 32, - 255, - 4, - 164, - 32, - 255, - 4, - 172, - 32, - 255, - 4, - 180, - 32, - 255, - 4, - 189, - 32, - 255, - 4, - 197, - 32, - 255, - 4, - 205, - 32, - 255, - 4, - 213, - 32, - 255, - 4, - 222, - 32, - 255, - 4, - 230, - 32, - 255, - 4, - 238, - 32, - 255, - 4, - 246, - 32, - 255, - 4, - 255, - 4, - 255, - 0, - 0, - 4, - 255, - 0, - 8, - 4, - 255, - 0, - 16, - 4, - 255, - 0, - 24, - 4, - 255, - 0, - 32, - 4, - 255, - 0, - 41, - 4, - 255, - 0, - 49, - 4, - 255, - 0, - 57, - 4, - 255, - 0, - 65, - 4, - 255, - 0, - 74, - 4, - 255, - 0, - 82, - 4, - 255, - 0, - 90, - 4, - 255, - 0, - 98, - 4, - 255, - 0, - 106, - 4, - 255, - 0, - 115, - 4, - 255, - 0, - 123, - 4, - 255, - 0, - 131, - 4, - 255, - 0, - 139, - 4, - 255, - 0, - 148, - 4, - 255, - 0, - 156, - 4, - 255, - 0, - 164, - 4, - 255, - 0, - 172, - 4, - 255, - 0, - 180, - 4, - 255, - 0, - 189, - 4, - 255, - 0, - 197, - 4, - 255, - 0, - 205, - 4, - 255, - 0, - 213, - 4, - 255, - 0, - 222, - 4, - 255, - 0, - 230, - 4, - 255, - 0, - 238, - 4, - 255, - 0, - 246, - 4, - 255, - 0, - 255, - 4, - 255, - 31, - 0, - 4, - 255, - 31, - 8, - 4, - 255, - 31, - 16, - 4, - 255, - 31, - 24, - 4, - 255, - 31, - 32, - 4, - 255, - 31, - 41, - 4, - 255, - 31, - 49, - 4, - 255, - 31, - 57, - 4, - 255, - 31, - 65, - 4, - 255, - 31, - 74, - 4, - 255, - 31, - 82, - 4, - 255, - 31, - 90, - 4, - 255, - 31, - 98, - 4, - 255, - 31, - 106, - 4, - 255, - 31, - 115, - 4, - 255, - 31, - 123, - 4, - 255, - 31, - 131, - 4, - 255, - 31, - 139, - 4, - 255, - 31, - 148, - 4, - 255, - 31, - 156, - 4, - 255, - 31, - 164, - 4, - 255, - 31, - 172, - 4, - 255, - 31, - 180, - 4, - 255, - 31, - 189, - 4, - 255, - 31, - 197, - 4, - 255, - 31, - 205, - 4, - 255, - 31, - 213, - 4, - 255, - 31, - 222, - 4, - 255, - 31, - 230, - 4, - 255, - 31, - 238, - 4, - 255, - 31, - 246, - 4, - 255, - 31, - 255, - 3, - 255, - 63, - 0, - 3, - 255, - 63, - 8, - 3, - 255, - 63, - 16, - 3, - 255, - 63, - 24, - 3, - 255, - 63, - 32, - 3, - 255, - 63, - 41, - 3, - 255, - 63, - 49, - 3, - 255, - 63, - 57, - 3, - 255, - 63, - 65, - 3, - 255, - 63, - 74, - 3, - 255, - 63, - 82, - 3, - 255, - 63, - 90, - 3, - 255, - 63, - 98, - 3, - 255, - 63, - 106, - 3, - 255, - 63, - 115, - 3, - 255, - 63, - 123, - 3, - 255, - 63, - 131, - 3, - 255, - 63, - 139, - 3, - 255, - 63, - 148, - 3, - 255, - 63, - 156, - 3, - 255, - 63, - 164, - 3, - 255, - 63, - 172, - 3, - 255, - 63, - 180, - 3, - 255, - 63, - 189, - 3, - 255, - 63, - 197, - 3, - 255, - 63, - 205, - 3, - 255, - 63, - 213, - 3, - 255, - 63, - 222, - 3, - 255, - 63, - 230, - 3, - 255, - 63, - 238, - 3, - 255, - 63, - 246, - 3, - 255, - 63, - 255, - 3, - 255, - 95, - 0, - 3, - 255, - 95, - 8, - 3, - 255, - 95, - 16, - 3, - 255, - 95, - 24, - 3, - 255, - 95, - 32, - 3, - 255, - 95, - 41, - 3, - 255, - 95, - 49, - 3, - 255, - 95, - 57, - 3, - 255, - 95, - 65, - 3, - 255, - 95, - 74, - 3, - 255, - 95, - 82, - 3, - 255, - 95, - 90, - 3, - 255, - 95, - 98, - 3, - 255, - 95, - 106, - 3, - 255, - 95, - 115, - 3, - 255, - 95, - 123, - 3, - 255, - 95, - 131, - 3, - 255, - 95, - 139, - 3, - 255, - 95, - 148, - 3, - 255, - 95, - 156, - 3, - 255, - 95, - 164, - 3, - 255, - 95, - 172, - 3, - 255, - 95, - 180, - 3, - 255, - 95, - 189, - 3, - 255, - 95, - 197, - 3, - 255, - 95, - 205, - 3, - 255, - 95, - 213, - 3, - 255, - 95, - 222, - 3, - 255, - 95, - 230, - 3, - 255, - 95, - 238, - 3, - 255, - 95, - 246, - 3, - 255, - 95, - 255, - 3, - 255, - 127, - 0, - 3, - 255, - 127, - 8, - 3, - 255, - 127, - 16, - 3, - 255, - 127, - 24, - 3, - 255, - 127, - 32, - 3, - 255, - 127, - 41, - 3, - 255, - 127, - 49, - 3, - 255, - 127, - 57, - 3, - 255, - 127, - 65, - 3, - 255, - 127, - 74, - 3, - 255, - 127, - 82, - 3, - 255, - 127, - 90, - 3, - 255, - 127, - 98, - 3, - 255, - 127, - 106, - 3, - 255, - 127, - 115, - 3, - 255, - 127, - 123, - 3, - 255, - 127, - 131, - 3, - 255, - 127, - 139, - 3, - 255, - 127, - 148, - 3, - 255, - 127, - 156, - 3, - 255, - 127, - 164, - 3, - 255, - 127, - 172, - 3, - 255, - 127, - 180, - 3, - 255, - 127, - 189, - 3, - 255, - 127, - 197, - 3, - 255, - 127, - 205, - 3, - 255, - 127, - 213, - 3, - 255, - 127, - 222, - 3, - 255, - 127, - 230, - 3, - 255, - 127, - 238, - 3, - 255, - 127, - 246, - 3, - 255, - 127, - 255, - 3, - 255, - 159, - 0, - 3, - 255, - 159, - 8, - 3, - 255, - 159, - 16, - 3, - 255, - 159, - 24, - 3, - 255, - 159, - 32, - 3, - 255, - 159, - 41, - 3, - 255, - 159, - 49, - 3, - 255, - 159, - 57, - 3, - 255, - 159, - 65, - 3, - 255, - 159, - 74, - 3, - 255, - 159, - 82, - 3, - 255, - 159, - 90, - 3, - 255, - 159, - 98, - 3, - 255, - 159, - 106, - 3, - 255, - 159, - 115, - 3, - 255, - 159, - 123, - 3, - 255, - 159, - 131, - 3, - 255, - 159, - 139, - 3, - 255, - 159, - 148, - 3, - 255, - 159, - 156, - 3, - 255, - 159, - 164, - 3, - 255, - 159, - 172, - 3, - 255, - 159, - 180, - 3, - 255, - 159, - 189, - 3, - 255, - 159, - 197, - 3, - 255, - 159, - 205, - 3, - 255, - 159, - 213, - 3, - 255, - 159, - 222, - 3, - 255, - 159, - 230, - 3, - 255, - 159, - 238, - 3, - 255, - 159, - 246, - 3, - 255, - 159, - 255, - 2, - 255, - 191, - 0, - 2, - 255, - 191, - 8, - 2, - 255, - 191, - 16, - 2, - 255, - 191, - 24, - 2, - 255, - 191, - 32, - 2, - 255, - 191, - 41, - 2, - 255, - 191, - 49, - 2, - 255, - 191, - 57, - 2, - 255, - 191, - 65, - 2, - 255, - 191, - 74, - 2, - 255, - 191, - 82, - 2, - 255, - 191, - 90, - 2, - 255, - 191, - 98, - 2, - 255, - 191, - 106, - 2, - 255, - 191, - 115, - 2, - 255, - 191, - 123, - 2, - 255, - 191, - 131, - 2, - 255, - 191, - 139, - 2, - 255, - 191, - 148, - 2, - 255, - 191, - 156, - 2, - 255, - 191, - 164, - 2, - 255, - 191, - 172, - 2, - 255, - 191, - 180, - 2, - 255, - 191, - 189, - 2, - 255, - 191, - 197, - 2, - 255, - 191, - 205, - 2, - 255, - 191, - 213, - 2, - 255, - 191, - 222, - 2, - 255, - 191, - 230, - 2, - 255, - 191, - 238, - 2, - 255, - 191, - 246, - 2, - 255, - 191, - 255, - 2, - 255, - 223, - 0, - 2, - 255, - 223, - 8, - 2, - 255, - 223, - 16, - 2, - 255, - 223, - 24, - 2, - 255, - 223, - 32, - 2, - 255, - 223, - 41, - 2, - 255, - 223, - 49, - 2, - 255, - 223, - 57, - 2, - 255, - 223, - 65, - 2, - 255, - 223, - 74, - 2, - 255, - 223, - 82, - 2, - 255, - 223, - 90, - 2, - 255, - 223, - 98, - 2, - 255, - 223, - 106, - 2, - 255, - 223, - 115, - 2, - 255, - 223, - 123, - 2, - 255, - 223, - 131, - 2, - 255, - 223, - 139, - 2, - 255, - 223, - 148, - 2, - 255, - 223, - 156, - 2, - 255, - 223, - 164, - 2, - 255, - 223, - 172, - 2, - 255, - 223, - 180, - 2, - 255, - 223, - 189, - 2, - 255, - 223, - 197, - 2, - 255, - 223, - 205, - 2, - 255, - 223, - 213, - 2, - 255, - 223, - 222, - 2, - 255, - 223, - 230, - 2, - 255, - 223, - 238, - 2, - 255, - 223, - 246, - 2, - 255, - 223, - 255, - 2, - 255, - 255, - 0, - 2, - 255, - 255, - 8, - 2, - 255, - 255, - 16, - 2, - 255, - 255, - 24, - 2, - 255, - 255, - 32, - 2, - 255, - 255, - 41, - 2, - 255, - 255, - 49, - 2, - 255, - 255, - 57, - 2, - 255, - 255, - 65, - 2, - 255, - 255, - 74, - 2, - 255, - 255, - 82, - 2, - 255, - 255, - 90, - 2, - 255, - 255, - 98, - 2, - 255, - 255, - 106, - 2, - 255, - 255, - 115, - 2, - 255, - 255, - 123, - 2, - 255, - 255, - 131, - 2, - 255, - 255, - 139, - 2, - 255, - 255, - 148, - 2, - 255, - 255, - 156, - 2, - 255, - 255, - 164, - 2, - 255, - 255, - 172, - 2, - 255, - 255, - 180, - 2, - 255, - 255, - 189, - 2, - 255, - 255, - 197, - 2, - 255, - 255, - 205, - 2, - 255, - 255, - 213, - 2, - 255, - 255, - 222, - 2, - 255, - 255, - 230, - 2, - 255, - 255, - 238, - 2, - 255, - 255, - 246, - 2, - 255, - 255, - 255, - 1, - 224, - 255, - 0, - 1, - 224, - 255, - 8, - 1, - 224, - 255, - 16, - 1, - 224, - 255, - 24, - 1, - 224, - 255, - 32, - 1, - 224, - 255, - 41, - 1, - 224, - 255, - 49, - 1, - 224, - 255, - 57, - 1, - 224, - 255, - 65, - 1, - 224, - 255, - 74, - 1, - 224, - 255, - 82, - 1, - 224, - 255, - 90, - 1, - 224, - 255, - 98, - 1, - 224, - 255, - 106, - 1, - 224, - 255, - 115, - 1, - 224, - 255, - 123, - 1, - 224, - 255, - 131, - 1, - 224, - 255, - 139, - 1, - 224, - 255, - 148, - 1, - 224, - 255, - 156, - 1, - 224, - 255, - 164, - 1, - 224, - 255, - 172, - 1, - 224, - 255, - 180, - 1, - 224, - 255, - 189, - 1, - 224, - 255, - 197, - 1, - 224, - 255, - 205, - 1, - 224, - 255, - 213, - 1, - 224, - 255, - 222, - 1, - 224, - 255, - 230, - 1, - 224, - 255, - 238, - 1, - 224, - 255, - 246, - 1, - 224, - 255, - 255, - 1, - 192, - 255, - 0, - 1, - 192, - 255, - 8, - 1, - 192, - 255, - 16, - 1, - 192, - 255, - 24, - 1, - 192, - 255, - 32, - 1, - 192, - 255, - 41, - 1, - 192, - 255, - 49, - 1, - 192, - 255, - 57, - 1, - 192, - 255, - 65, - 1, - 192, - 255, - 74, - 1, - 192, - 255, - 82, - 1, - 192, - 255, - 90, - 1, - 192, - 255, - 98, - 1, - 192, - 255, - 106, - 1, - 192, - 255, - 115, - 1, - 192, - 255, - 123, - 1, - 192, - 255, - 131, - 1, - 192, - 255, - 139, - 1, - 192, - 255, - 148, - 1, - 192, - 255, - 156, - 1, - 192, - 255, - 164, - 1, - 192, - 255, - 172, - 1, - 192, - 255, - 180, - 1, - 192, - 255, - 189, - 1, - 192, - 255, - 197, - 1, - 192, - 255, - 205, - 1, - 192, - 255, - 213, - 1, - 192, - 255, - 222, - 1, - 192, - 255, - 230, - 1, - 192, - 255, - 238, - 1, - 192, - 255, - 246, - 1, - 192, - 255, - 255, - 1, - 160, - 255, - 0, - 1, - 160, - 255, - 8, - 1, - 160, - 255, - 16, - 1, - 160, - 255, - 24, - 1, - 160, - 255, - 32, - 1, - 160, - 255, - 41, - 1, - 160, - 255, - 49, - 1, - 160, - 255, - 57, - 1, - 160, - 255, - 65, - 1, - 160, - 255, - 74, - 1, - 160, - 255, - 82, - 1, - 160, - 255, - 90, - 1, - 160, - 255, - 98, - 1, - 160, - 255, - 106, - 1, - 160, - 255, - 115, - 1, - 160, - 255, - 123, - 1, - 160, - 255, - 131, - 1, - 160, - 255, - 139, - 1, - 160, - 255, - 148, - 1, - 160, - 255, - 156, - 1, - 160, - 255, - 164, - 1, - 160, - 255, - 172, - 1, - 160, - 255, - 180, - 1, - 160, - 255, - 189, - 1, - 160, - 255, - 197, - 1, - 160, - 255, - 205, - 1, - 160, - 255, - 213, - 1, - 160, - 255, - 222, - 1, - 160, - 255, - 230, - 1, - 160, - 255, - 238, - 1, - 160, - 255, - 246, - 1, - 160, - 255, - 255, - 1, - 128, - 255, - 0, - 1, - 128, - 255, - 8, - 1, - 128, - 255, - 16, - 1, - 128, - 255, - 24, - 1, - 128, - 255, - 32, - 1, - 128, - 255, - 41, - 1, - 128, - 255, - 49, - 1, - 128, - 255, - 57, - 1, - 128, - 255, - 65, - 1, - 128, - 255, - 74, - 1, - 128, - 255, - 82, - 1, - 128, - 255, - 90, - 1, - 128, - 255, - 98, - 1, - 128, - 255, - 106, - 1, - 128, - 255, - 115, - 1, - 128, - 255, - 123, - 1, - 128, - 255, - 131, - 1, - 128, - 255, - 139, - 1, - 128, - 255, - 148, - 1, - 128, - 255, - 156, - 1, - 128, - 255, - 164, - 1, - 128, - 255, - 172, - 1, - 128, - 255, - 180, - 1, - 128, - 255, - 189, - 1, - 128, - 255, - 197, - 1, - 128, - 255, - 205, - 1, - 128, - 255, - 213, - 1, - 128, - 255, - 222, - 1, - 128, - 255, - 230, - 1, - 128, - 255, - 238, - 1, - 128, - 255, - 246, - 1, - 128, - 255, - 255, - 0, - 96, - 255, - 0, - 0, - 96, - 255, - 8, - 0, - 96, - 255, - 16, - 0, - 96, - 255, - 24, - 0, - 96, - 255, - 32, - 0, - 96, - 255, - 41, - 0, - 96, - 255, - 49, - 0, - 96, - 255, - 57, - 0, - 96, - 255, - 65, - 0, - 96, - 255, - 74, - 0, - 96, - 255, - 82, - 0, - 96, - 255, - 90, - 0, - 96, - 255, - 98, - 0, - 96, - 255, - 106, - 0, - 96, - 255, - 115, - 0, - 96, - 255, - 123, - 0, - 96, - 255, - 131, - 0, - 96, - 255, - 139, - 0, - 96, - 255, - 148, - 0, - 96, - 255, - 156, - 0, - 96, - 255, - 164, - 0, - 96, - 255, - 172, - 0, - 96, - 255, - 180, - 0, - 96, - 255, - 189, - 0, - 96, - 255, - 197, - 0, - 96, - 255, - 205, - 0, - 96, - 255, - 213, - 0, - 96, - 255, - 222, - 0, - 96, - 255, - 230, - 0, - 96, - 255, - 238, - 0, - 96, - 255, - 246, - 0, - 96, - 255, - 255, - 0, - 64, - 255, - 0, - 0, - 64, - 255, - 8, - 0, - 64, - 255, - 16, - 0, - 64, - 255, - 24, - 0, - 64, - 255, - 32, - 0, - 64, - 255, - 41, - 0, - 64, - 255, - 49, - 0, - 64, - 255, - 57, - 0, - 64, - 255, - 65, - 0, - 64, - 255, - 74, - 0, - 64, - 255, - 82, - 0, - 64, - 255, - 90, - 0, - 64, - 255, - 98, - 0, - 64, - 255, - 106, - 0, - 64, - 255, - 115, - 0, - 64, - 255, - 123, - 0, - 64, - 255, - 131, - 0, - 64, - 255, - 139, - 0, - 64, - 255, - 148, - 0, - 64, - 255, - 156, - 0, - 64, - 255, - 164, - 0, - 64, - 255, - 172, - 0, - 64, - 255, - 180, - 0, - 64, - 255, - 189, - 0, - 64, - 255, - 197, - 0, - 64, - 255, - 205, - 0, - 64, - 255, - 213, - 0, - 64, - 255, - 222, - 0, - 64, - 255, - 230, - 0, - 64, - 255, - 238, - 0, - 64, - 255, - 246, - 0, - 64, - 255, - 255, - 0, - 32, - 255, - 0, - 0, - 32, - 255, - 8, - 0, - 32, - 255, - 16, - 0, - 32, - 255, - 24, - 0, - 32, - 255, - 32, - 0, - 32, - 255, - 41, - 0, - 32, - 255, - 49, - 0, - 32, - 255, - 57, - 0, - 32, - 255, - 65, - 0, - 32, - 255, - 74, - 0, - 32, - 255, - 82, - 0, - 32, - 255, - 90, - 0, - 32, - 255, - 98, - 0, - 32, - 255, - 106, - 0, - 32, - 255, - 115, - 0, - 32, - 255, - 123, - 0, - 32, - 255, - 131, - 0, - 32, - 255, - 139, - 0, - 32, - 255, - 148, - 0, - 32, - 255, - 156, - 0, - 32, - 255, - 164, - 0, - 32, - 255, - 172, - 0, - 32, - 255, - 180, - 0, - 32, - 255, - 189, - 0, - 32, - 255, - 197, - 0, - 32, - 255, - 205, - 0, - 32, - 255, - 213, - 0, - 32, - 255, - 222, - 0, - 32, - 255, - 230, - 0, - 32, - 255, - 238, - 0, - 32, - 255, - 246, - 0, - 32, - 255, - 255, -] -`; - -exports[`pixels browser rgb-alpha-16bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 188, - 255, - 255, - 0, - 0, - 0, - 0, - 239, - 122, - 255, - 255, - 0, - 0, - 0, - 0, - 231, - 56, - 255, - 255, - 0, - 0, - 0, - 0, - 222, - 246, - 255, - 255, - 0, - 0, - 0, - 0, - 214, - 180, - 255, - 255, - 0, - 0, - 0, - 0, - 206, - 114, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 48, - 255, - 255, - 0, - 0, - 0, - 0, - 189, - 238, - 255, - 255, - 0, - 0, - 0, - 0, - 181, - 172, - 255, - 255, - 0, - 0, - 0, - 0, - 173, - 106, - 255, - 255, - 0, - 0, - 0, - 0, - 165, - 40, - 255, - 255, - 0, - 0, - 0, - 0, - 156, - 230, - 255, - 255, - 0, - 0, - 0, - 0, - 148, - 164, - 255, - 255, - 0, - 0, - 0, - 0, - 140, - 98, - 255, - 255, - 0, - 0, - 0, - 0, - 132, - 32, - 255, - 255, - 0, - 0, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 188, - 0, - 0, - 0, - 0, - 255, - 255, - 255, - 255, - 0, - 0, - 16, - 133, - 247, - 43, - 255, - 255, - 0, - 0, - 16, - 133, - 238, - 87, - 255, - 255, - 0, - 0, - 16, - 133, - 229, - 131, - 255, - 255, - 0, - 0, - 16, - 133, - 220, - 175, - 255, - 255, - 0, - 0, - 16, - 133, - 211, - 219, - 255, - 255, - 0, - 0, - 16, - 133, - 203, - 8, - 255, - 255, - 0, - 0, - 16, - 133, - 194, - 52, - 255, - 255, - 0, - 0, - 16, - 133, - 185, - 96, - 255, - 255, - 0, - 0, - 16, - 133, - 176, - 140, - 255, - 255, - 0, - 0, - 16, - 133, - 167, - 184, - 255, - 255, - 0, - 0, - 16, - 133, - 158, - 228, - 255, - 255, - 0, - 0, - 16, - 133, - 150, - 17, - 255, - 255, - 0, - 0, - 16, - 133, - 141, - 61, - 255, - 255, - 0, - 0, - 16, - 133, - 132, - 105, - 255, - 255, - 0, - 0, - 16, - 133, - 123, - 149, - 255, - 255, - 0, - 0, - 16, - 133, - 114, - 193, - 255, - 255, - 0, - 0, - 16, - 133, - 105, - 237, - 255, - 255, - 0, - 0, - 16, - 133, - 97, - 26, - 255, - 255, - 0, - 0, - 16, - 133, - 88, - 70, - 255, - 255, - 0, - 0, - 16, - 133, - 79, - 114, - 255, - 255, - 0, - 0, - 16, - 133, - 70, - 158, - 255, - 255, - 0, - 0, - 16, - 133, - 61, - 202, - 255, - 255, - 0, - 0, - 16, - 133, - 52, - 246, - 255, - 255, - 0, - 0, - 16, - 133, - 44, - 35, - 255, - 255, - 0, - 0, - 16, - 133, - 35, - 79, - 255, - 255, - 0, - 0, - 16, - 133, - 26, - 123, - 255, - 255, - 0, - 0, - 16, - 133, - 17, - 167, - 255, - 255, - 0, - 0, - 16, - 133, - 8, - 211, - 255, - 255, - 0, - 0, - 16, - 133, - 0, - 0, - 255, - 255, - 0, - 0, - 16, - 133, - 0, - 0, - 247, - 188, - 8, - 66, - 0, - 0, - 255, - 255, - 239, - 122, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 43, - 0, - 0, - 16, - 133, - 255, - 255, - 255, - 255, - 0, - 0, - 33, - 9, - 246, - 131, - 255, - 255, - 0, - 0, - 33, - 9, - 237, - 8, - 255, - 255, - 0, - 0, - 33, - 9, - 227, - 141, - 255, - 255, - 0, - 0, - 33, - 9, - 218, - 18, - 255, - 255, - 0, - 0, - 33, - 9, - 208, - 150, - 255, - 255, - 0, - 0, - 33, - 9, - 199, - 27, - 255, - 255, - 0, - 0, - 33, - 9, - 189, - 160, - 255, - 255, - 0, - 0, - 33, - 9, - 180, - 37, - 255, - 255, - 0, - 0, - 33, - 9, - 170, - 169, - 255, - 255, - 0, - 0, - 33, - 9, - 161, - 46, - 255, - 255, - 0, - 0, - 33, - 9, - 151, - 179, - 255, - 255, - 0, - 0, - 33, - 9, - 142, - 56, - 255, - 255, - 0, - 0, - 33, - 9, - 132, - 189, - 255, - 255, - 0, - 0, - 33, - 9, - 123, - 65, - 255, - 255, - 0, - 0, - 33, - 9, - 113, - 198, - 255, - 255, - 0, - 0, - 33, - 9, - 104, - 75, - 255, - 255, - 0, - 0, - 33, - 9, - 94, - 208, - 255, - 255, - 0, - 0, - 33, - 9, - 85, - 84, - 255, - 255, - 0, - 0, - 33, - 9, - 75, - 217, - 255, - 255, - 0, - 0, - 33, - 9, - 66, - 94, - 255, - 255, - 0, - 0, - 33, - 9, - 56, - 227, - 255, - 255, - 0, - 0, - 33, - 9, - 47, - 104, - 255, - 255, - 0, - 0, - 33, - 9, - 37, - 236, - 255, - 255, - 0, - 0, - 33, - 9, - 28, - 113, - 255, - 255, - 0, - 0, - 33, - 9, - 18, - 246, - 255, - 255, - 0, - 0, - 33, - 9, - 9, - 123, - 255, - 255, - 0, - 0, - 33, - 9, - 0, - 0, - 255, - 255, - 0, - 0, - 33, - 9, - 0, - 0, - 247, - 43, - 8, - 211, - 16, - 133, - 0, - 0, - 239, - 122, - 16, - 132, - 0, - 0, - 255, - 255, - 231, - 56, - 0, - 0, - 0, - 0, - 255, - 255, - 238, - 87, - 0, - 0, - 16, - 133, - 255, - 255, - 246, - 131, - 0, - 0, - 33, - 9, - 255, - 255, - 255, - 255, - 0, - 0, - 49, - 141, - 245, - 193, - 255, - 255, - 0, - 0, - 49, - 141, - 235, - 132, - 255, - 255, - 0, - 0, - 49, - 141, - 225, - 70, - 255, - 255, - 0, - 0, - 49, - 141, - 215, - 9, - 255, - 255, - 0, - 0, - 49, - 141, - 204, - 204, - 255, - 255, - 0, - 0, - 49, - 141, - 194, - 142, - 255, - 255, - 0, - 0, - 49, - 141, - 184, - 81, - 255, - 255, - 0, - 0, - 49, - 141, - 174, - 19, - 255, - 255, - 0, - 0, - 49, - 141, - 163, - 214, - 255, - 255, - 0, - 0, - 49, - 141, - 153, - 152, - 255, - 255, - 0, - 0, - 49, - 141, - 143, - 91, - 255, - 255, - 0, - 0, - 49, - 141, - 133, - 30, - 255, - 255, - 0, - 0, - 49, - 141, - 122, - 224, - 255, - 255, - 0, - 0, - 49, - 141, - 112, - 163, - 255, - 255, - 0, - 0, - 49, - 141, - 102, - 101, - 255, - 255, - 0, - 0, - 49, - 141, - 92, - 40, - 255, - 255, - 0, - 0, - 49, - 141, - 81, - 235, - 255, - 255, - 0, - 0, - 49, - 141, - 71, - 173, - 255, - 255, - 0, - 0, - 49, - 141, - 61, - 112, - 255, - 255, - 0, - 0, - 49, - 141, - 51, - 50, - 255, - 255, - 0, - 0, - 49, - 141, - 40, - 245, - 255, - 255, - 0, - 0, - 49, - 141, - 30, - 184, - 255, - 255, - 0, - 0, - 49, - 141, - 20, - 122, - 255, - 255, - 0, - 0, - 49, - 141, - 10, - 61, - 255, - 255, - 0, - 0, - 49, - 141, - 0, - 0, - 255, - 255, - 0, - 0, - 49, - 141, - 0, - 0, - 246, - 131, - 9, - 123, - 33, - 9, - 0, - 0, - 238, - 87, - 17, - 167, - 16, - 133, - 0, - 0, - 231, - 56, - 24, - 198, - 0, - 0, - 255, - 255, - 222, - 246, - 0, - 0, - 0, - 0, - 255, - 255, - 229, - 131, - 0, - 0, - 16, - 133, - 255, - 255, - 237, - 8, - 0, - 0, - 33, - 9, - 255, - 255, - 245, - 193, - 0, - 0, - 49, - 141, - 255, - 255, - 255, - 255, - 0, - 0, - 66, - 17, - 244, - 221, - 255, - 255, - 0, - 0, - 66, - 17, - 233, - 188, - 255, - 255, - 0, - 0, - 66, - 17, - 222, - 154, - 255, - 255, - 0, - 0, - 66, - 17, - 211, - 121, - 255, - 255, - 0, - 0, - 66, - 17, - 200, - 88, - 255, - 255, - 0, - 0, - 66, - 17, - 189, - 54, - 255, - 255, - 0, - 0, - 66, - 17, - 178, - 21, - 255, - 255, - 0, - 0, - 66, - 17, - 166, - 244, - 255, - 255, - 0, - 0, - 66, - 17, - 155, - 210, - 255, - 255, - 0, - 0, - 66, - 17, - 144, - 177, - 255, - 255, - 0, - 0, - 66, - 17, - 133, - 144, - 255, - 255, - 0, - 0, - 66, - 17, - 122, - 110, - 255, - 255, - 0, - 0, - 66, - 17, - 111, - 77, - 255, - 255, - 0, - 0, - 66, - 17, - 100, - 44, - 255, - 255, - 0, - 0, - 66, - 17, - 89, - 10, - 255, - 255, - 0, - 0, - 66, - 17, - 77, - 233, - 255, - 255, - 0, - 0, - 66, - 17, - 66, - 200, - 255, - 255, - 0, - 0, - 66, - 17, - 55, - 166, - 255, - 255, - 0, - 0, - 66, - 17, - 44, - 133, - 255, - 255, - 0, - 0, - 66, - 17, - 33, - 100, - 255, - 255, - 0, - 0, - 66, - 17, - 22, - 66, - 255, - 255, - 0, - 0, - 66, - 17, - 11, - 33, - 255, - 255, - 0, - 0, - 66, - 17, - 0, - 0, - 255, - 255, - 0, - 0, - 66, - 17, - 0, - 0, - 245, - 193, - 10, - 61, - 49, - 141, - 0, - 0, - 237, - 8, - 18, - 246, - 33, - 9, - 0, - 0, - 229, - 131, - 26, - 123, - 16, - 133, - 0, - 0, - 222, - 246, - 33, - 8, - 0, - 0, - 255, - 255, - 214, - 180, - 0, - 0, - 0, - 0, - 255, - 255, - 220, - 175, - 0, - 0, - 16, - 133, - 255, - 255, - 227, - 141, - 0, - 0, - 33, - 9, - 255, - 255, - 235, - 132, - 0, - 0, - 49, - 141, - 255, - 255, - 244, - 221, - 0, - 0, - 66, - 17, - 255, - 255, - 255, - 255, - 0, - 0, - 82, - 149, - 243, - 206, - 255, - 255, - 0, - 0, - 82, - 149, - 231, - 157, - 255, - 255, - 0, - 0, - 82, - 149, - 219, - 108, - 255, - 255, - 0, - 0, - 82, - 149, - 207, - 60, - 255, - 255, - 0, - 0, - 82, - 149, - 195, - 11, - 255, - 255, - 0, - 0, - 82, - 149, - 182, - 218, - 255, - 255, - 0, - 0, - 82, - 149, - 170, - 169, - 255, - 255, - 0, - 0, - 82, - 149, - 158, - 121, - 255, - 255, - 0, - 0, - 82, - 149, - 146, - 72, - 255, - 255, - 0, - 0, - 82, - 149, - 134, - 23, - 255, - 255, - 0, - 0, - 82, - 149, - 121, - 231, - 255, - 255, - 0, - 0, - 82, - 149, - 109, - 182, - 255, - 255, - 0, - 0, - 82, - 149, - 97, - 133, - 255, - 255, - 0, - 0, - 82, - 149, - 85, - 84, - 255, - 255, - 0, - 0, - 82, - 149, - 73, - 36, - 255, - 255, - 0, - 0, - 82, - 149, - 60, - 243, - 255, - 255, - 0, - 0, - 82, - 149, - 48, - 194, - 255, - 255, - 0, - 0, - 82, - 149, - 36, - 146, - 255, - 255, - 0, - 0, - 82, - 149, - 24, - 97, - 255, - 255, - 0, - 0, - 82, - 149, - 12, - 48, - 255, - 255, - 0, - 0, - 82, - 149, - 0, - 0, - 255, - 255, - 0, - 0, - 82, - 149, - 0, - 0, - 244, - 221, - 11, - 33, - 66, - 17, - 0, - 0, - 235, - 132, - 20, - 122, - 49, - 141, - 0, - 0, - 227, - 141, - 28, - 113, - 33, - 9, - 0, - 0, - 220, - 175, - 35, - 79, - 16, - 133, - 0, - 0, - 214, - 180, - 41, - 74, - 0, - 0, - 255, - 255, - 206, - 114, - 0, - 0, - 0, - 0, - 255, - 255, - 211, - 219, - 0, - 0, - 16, - 133, - 255, - 255, - 218, - 18, - 0, - 0, - 33, - 9, - 255, - 255, - 225, - 70, - 0, - 0, - 49, - 141, - 255, - 255, - 233, - 188, - 0, - 0, - 66, - 17, - 255, - 255, - 243, - 206, - 0, - 0, - 82, - 149, - 255, - 255, - 255, - 255, - 0, - 0, - 99, - 25, - 242, - 133, - 255, - 255, - 0, - 0, - 99, - 25, - 229, - 12, - 255, - 255, - 0, - 0, - 99, - 25, - 215, - 147, - 255, - 255, - 0, - 0, - 99, - 25, - 202, - 26, - 255, - 255, - 0, - 0, - 99, - 25, - 188, - 160, - 255, - 255, - 0, - 0, - 99, - 25, - 175, - 39, - 255, - 255, - 0, - 0, - 99, - 25, - 161, - 174, - 255, - 255, - 0, - 0, - 99, - 25, - 148, - 53, - 255, - 255, - 0, - 0, - 99, - 25, - 134, - 188, - 255, - 255, - 0, - 0, - 99, - 25, - 121, - 66, - 255, - 255, - 0, - 0, - 99, - 25, - 107, - 201, - 255, - 255, - 0, - 0, - 99, - 25, - 94, - 80, - 255, - 255, - 0, - 0, - 99, - 25, - 80, - 215, - 255, - 255, - 0, - 0, - 99, - 25, - 67, - 94, - 255, - 255, - 0, - 0, - 99, - 25, - 53, - 228, - 255, - 255, - 0, - 0, - 99, - 25, - 40, - 107, - 255, - 255, - 0, - 0, - 99, - 25, - 26, - 242, - 255, - 255, - 0, - 0, - 99, - 25, - 13, - 121, - 255, - 255, - 0, - 0, - 99, - 25, - 0, - 0, - 255, - 255, - 0, - 0, - 99, - 25, - 0, - 0, - 243, - 206, - 12, - 48, - 82, - 149, - 0, - 0, - 233, - 188, - 22, - 66, - 66, - 17, - 0, - 0, - 225, - 70, - 30, - 184, - 49, - 141, - 0, - 0, - 218, - 18, - 37, - 236, - 33, - 9, - 0, - 0, - 211, - 219, - 44, - 35, - 16, - 133, - 0, - 0, - 206, - 114, - 49, - 140, - 0, - 0, - 255, - 255, - 198, - 48, - 0, - 0, - 0, - 0, - 255, - 255, - 203, - 8, - 0, - 0, - 16, - 133, - 255, - 255, - 208, - 150, - 0, - 0, - 33, - 9, - 255, - 255, - 215, - 9, - 0, - 0, - 49, - 141, - 255, - 255, - 222, - 154, - 0, - 0, - 66, - 17, - 255, - 255, - 231, - 157, - 0, - 0, - 82, - 149, - 255, - 255, - 242, - 133, - 0, - 0, - 99, - 25, - 255, - 255, - 255, - 255, - 0, - 0, - 115, - 157, - 240, - 240, - 255, - 255, - 0, - 0, - 115, - 157, - 225, - 225, - 255, - 255, - 0, - 0, - 115, - 157, - 210, - 210, - 255, - 255, - 0, - 0, - 115, - 157, - 195, - 195, - 255, - 255, - 0, - 0, - 115, - 157, - 180, - 179, - 255, - 255, - 0, - 0, - 115, - 157, - 165, - 164, - 255, - 255, - 0, - 0, - 115, - 157, - 150, - 149, - 255, - 255, - 0, - 0, - 115, - 157, - 135, - 134, - 255, - 255, - 0, - 0, - 115, - 157, - 120, - 119, - 255, - 255, - 0, - 0, - 115, - 157, - 105, - 104, - 255, - 255, - 0, - 0, - 115, - 157, - 90, - 89, - 255, - 255, - 0, - 0, - 115, - 157, - 75, - 74, - 255, - 255, - 0, - 0, - 115, - 157, - 60, - 59, - 255, - 255, - 0, - 0, - 115, - 157, - 45, - 44, - 255, - 255, - 0, - 0, - 115, - 157, - 30, - 29, - 255, - 255, - 0, - 0, - 115, - 157, - 15, - 14, - 255, - 255, - 0, - 0, - 115, - 157, - 0, - 0, - 255, - 255, - 0, - 0, - 115, - 157, - 0, - 0, - 242, - 133, - 13, - 121, - 99, - 25, - 0, - 0, - 231, - 157, - 24, - 97, - 82, - 149, - 0, - 0, - 222, - 154, - 33, - 100, - 66, - 17, - 0, - 0, - 215, - 9, - 40, - 245, - 49, - 141, - 0, - 0, - 208, - 150, - 47, - 104, - 33, - 9, - 0, - 0, - 203, - 8, - 52, - 246, - 16, - 133, - 0, - 0, - 198, - 48, - 57, - 206, - 0, - 0, - 255, - 255, - 189, - 238, - 0, - 0, - 0, - 0, - 255, - 255, - 194, - 52, - 0, - 0, - 16, - 133, - 255, - 255, - 199, - 27, - 0, - 0, - 33, - 9, - 255, - 255, - 204, - 204, - 0, - 0, - 49, - 141, - 255, - 255, - 211, - 121, - 0, - 0, - 66, - 17, - 255, - 255, - 219, - 108, - 0, - 0, - 82, - 149, - 255, - 255, - 229, - 12, - 0, - 0, - 99, - 25, - 255, - 255, - 240, - 240, - 0, - 0, - 115, - 157, - 255, - 255, - 255, - 255, - 0, - 0, - 132, - 33, - 238, - 238, - 255, - 255, - 0, - 0, - 132, - 33, - 221, - 221, - 255, - 255, - 0, - 0, - 132, - 33, - 204, - 204, - 255, - 255, - 0, - 0, - 132, - 33, - 187, - 186, - 255, - 255, - 0, - 0, - 132, - 33, - 170, - 169, - 255, - 255, - 0, - 0, - 132, - 33, - 153, - 152, - 255, - 255, - 0, - 0, - 132, - 33, - 136, - 135, - 255, - 255, - 0, - 0, - 132, - 33, - 119, - 118, - 255, - 255, - 0, - 0, - 132, - 33, - 102, - 101, - 255, - 255, - 0, - 0, - 132, - 33, - 85, - 84, - 255, - 255, - 0, - 0, - 132, - 33, - 68, - 67, - 255, - 255, - 0, - 0, - 132, - 33, - 51, - 50, - 255, - 255, - 0, - 0, - 132, - 33, - 34, - 33, - 255, - 255, - 0, - 0, - 132, - 33, - 17, - 16, - 255, - 255, - 0, - 0, - 132, - 33, - 0, - 0, - 255, - 255, - 0, - 0, - 132, - 33, - 0, - 0, - 240, - 240, - 15, - 14, - 115, - 157, - 0, - 0, - 229, - 12, - 26, - 242, - 99, - 25, - 0, - 0, - 219, - 108, - 36, - 146, - 82, - 149, - 0, - 0, - 211, - 121, - 44, - 133, - 66, - 17, - 0, - 0, - 204, - 204, - 51, - 50, - 49, - 141, - 0, - 0, - 199, - 27, - 56, - 227, - 33, - 9, - 0, - 0, - 194, - 52, - 61, - 202, - 16, - 133, - 0, - 0, - 189, - 238, - 66, - 16, - 0, - 0, - 255, - 255, - 181, - 172, - 0, - 0, - 0, - 0, - 255, - 255, - 185, - 96, - 0, - 0, - 16, - 133, - 255, - 255, - 189, - 160, - 0, - 0, - 33, - 9, - 255, - 255, - 194, - 142, - 0, - 0, - 49, - 141, - 255, - 255, - 200, - 88, - 0, - 0, - 66, - 17, - 255, - 255, - 207, - 60, - 0, - 0, - 82, - 149, - 255, - 255, - 215, - 147, - 0, - 0, - 99, - 25, - 255, - 255, - 225, - 225, - 0, - 0, - 115, - 157, - 255, - 255, - 238, - 238, - 0, - 0, - 132, - 33, - 255, - 255, - 255, - 255, - 0, - 0, - 148, - 165, - 236, - 77, - 255, - 255, - 0, - 0, - 148, - 165, - 216, - 156, - 255, - 255, - 0, - 0, - 148, - 165, - 196, - 235, - 255, - 255, - 0, - 0, - 148, - 165, - 177, - 58, - 255, - 255, - 0, - 0, - 148, - 165, - 157, - 137, - 255, - 255, - 0, - 0, - 148, - 165, - 137, - 216, - 255, - 255, - 0, - 0, - 148, - 165, - 118, - 38, - 255, - 255, - 0, - 0, - 148, - 165, - 98, - 117, - 255, - 255, - 0, - 0, - 148, - 165, - 78, - 196, - 255, - 255, - 0, - 0, - 148, - 165, - 59, - 19, - 255, - 255, - 0, - 0, - 148, - 165, - 39, - 98, - 255, - 255, - 0, - 0, - 148, - 165, - 19, - 177, - 255, - 255, - 0, - 0, - 148, - 165, - 0, - 0, - 255, - 255, - 0, - 0, - 148, - 165, - 0, - 0, - 238, - 238, - 17, - 16, - 132, - 33, - 0, - 0, - 225, - 225, - 30, - 29, - 115, - 157, - 0, - 0, - 215, - 147, - 40, - 107, - 99, - 25, - 0, - 0, - 207, - 60, - 48, - 194, - 82, - 149, - 0, - 0, - 200, - 88, - 55, - 166, - 66, - 17, - 0, - 0, - 194, - 142, - 61, - 112, - 49, - 141, - 0, - 0, - 189, - 160, - 66, - 94, - 33, - 9, - 0, - 0, - 185, - 96, - 70, - 158, - 16, - 133, - 0, - 0, - 181, - 172, - 74, - 82, - 0, - 0, - 255, - 255, - 173, - 106, - 0, - 0, - 0, - 0, - 255, - 255, - 176, - 140, - 0, - 0, - 16, - 133, - 255, - 255, - 180, - 37, - 0, - 0, - 33, - 9, - 255, - 255, - 184, - 81, - 0, - 0, - 49, - 141, - 255, - 255, - 189, - 54, - 0, - 0, - 66, - 17, - 255, - 255, - 195, - 11, - 0, - 0, - 82, - 149, - 255, - 255, - 202, - 26, - 0, - 0, - 99, - 25, - 255, - 255, - 210, - 210, - 0, - 0, - 115, - 157, - 255, - 255, - 221, - 221, - 0, - 0, - 132, - 33, - 255, - 255, - 236, - 77, - 0, - 0, - 148, - 165, - 255, - 255, - 255, - 255, - 0, - 0, - 165, - 41, - 232, - 185, - 255, - 255, - 0, - 0, - 165, - 41, - 209, - 115, - 255, - 255, - 0, - 0, - 165, - 41, - 186, - 45, - 255, - 255, - 0, - 0, - 165, - 41, - 162, - 232, - 255, - 255, - 0, - 0, - 165, - 41, - 139, - 162, - 255, - 255, - 0, - 0, - 165, - 41, - 116, - 92, - 255, - 255, - 0, - 0, - 165, - 41, - 93, - 22, - 255, - 255, - 0, - 0, - 165, - 41, - 69, - 209, - 255, - 255, - 0, - 0, - 165, - 41, - 46, - 139, - 255, - 255, - 0, - 0, - 165, - 41, - 23, - 69, - 255, - 255, - 0, - 0, - 165, - 41, - 0, - 0, - 255, - 255, - 0, - 0, - 165, - 41, - 0, - 0, - 236, - 77, - 19, - 177, - 148, - 165, - 0, - 0, - 221, - 221, - 34, - 33, - 132, - 33, - 0, - 0, - 210, - 210, - 45, - 44, - 115, - 157, - 0, - 0, - 202, - 26, - 53, - 228, - 99, - 25, - 0, - 0, - 195, - 11, - 60, - 243, - 82, - 149, - 0, - 0, - 189, - 54, - 66, - 200, - 66, - 17, - 0, - 0, - 184, - 81, - 71, - 173, - 49, - 141, - 0, - 0, - 180, - 37, - 75, - 217, - 33, - 9, - 0, - 0, - 176, - 140, - 79, - 114, - 16, - 133, - 0, - 0, - 173, - 106, - 82, - 148, - 0, - 0, - 255, - 255, - 165, - 40, - 0, - 0, - 0, - 0, - 255, - 255, - 167, - 184, - 0, - 0, - 16, - 133, - 255, - 255, - 170, - 169, - 0, - 0, - 33, - 9, - 255, - 255, - 174, - 19, - 0, - 0, - 49, - 141, - 255, - 255, - 178, - 21, - 0, - 0, - 66, - 17, - 255, - 255, - 182, - 218, - 0, - 0, - 82, - 149, - 255, - 255, - 188, - 160, - 0, - 0, - 99, - 25, - 255, - 255, - 195, - 195, - 0, - 0, - 115, - 157, - 255, - 255, - 204, - 204, - 0, - 0, - 132, - 33, - 255, - 255, - 216, - 156, - 0, - 0, - 148, - 165, - 255, - 255, - 232, - 185, - 0, - 0, - 165, - 41, - 255, - 255, - 255, - 255, - 0, - 0, - 181, - 173, - 227, - 141, - 255, - 255, - 0, - 0, - 181, - 173, - 199, - 27, - 255, - 255, - 0, - 0, - 181, - 173, - 170, - 169, - 255, - 255, - 0, - 0, - 181, - 173, - 142, - 56, - 255, - 255, - 0, - 0, - 181, - 173, - 113, - 198, - 255, - 255, - 0, - 0, - 181, - 173, - 85, - 84, - 255, - 255, - 0, - 0, - 181, - 173, - 56, - 227, - 255, - 255, - 0, - 0, - 181, - 173, - 28, - 113, - 255, - 255, - 0, - 0, - 181, - 173, - 0, - 0, - 255, - 255, - 0, - 0, - 181, - 173, - 0, - 0, - 232, - 185, - 23, - 69, - 165, - 41, - 0, - 0, - 216, - 156, - 39, - 98, - 148, - 165, - 0, - 0, - 204, - 204, - 51, - 50, - 132, - 33, - 0, - 0, - 195, - 195, - 60, - 59, - 115, - 157, - 0, - 0, - 188, - 160, - 67, - 94, - 99, - 25, - 0, - 0, - 182, - 218, - 73, - 36, - 82, - 149, - 0, - 0, - 178, - 21, - 77, - 233, - 66, - 17, - 0, - 0, - 174, - 19, - 81, - 235, - 49, - 141, - 0, - 0, - 170, - 169, - 85, - 84, - 33, - 9, - 0, - 0, - 167, - 184, - 88, - 70, - 16, - 133, - 0, - 0, - 165, - 40, - 90, - 214, - 0, - 0, - 255, - 255, - 156, - 230, - 0, - 0, - 0, - 0, - 255, - 255, - 158, - 228, - 0, - 0, - 16, - 133, - 255, - 255, - 161, - 46, - 0, - 0, - 33, - 9, - 255, - 255, - 163, - 214, - 0, - 0, - 49, - 141, - 255, - 255, - 166, - 244, - 0, - 0, - 66, - 17, - 255, - 255, - 170, - 169, - 0, - 0, - 82, - 149, - 255, - 255, - 175, - 39, - 0, - 0, - 99, - 25, - 255, - 255, - 180, - 179, - 0, - 0, - 115, - 157, - 255, - 255, - 187, - 186, - 0, - 0, - 132, - 33, - 255, - 255, - 196, - 235, - 0, - 0, - 148, - 165, - 255, - 255, - 209, - 115, - 0, - 0, - 165, - 41, - 255, - 255, - 227, - 141, - 0, - 0, - 181, - 173, - 255, - 255, - 255, - 255, - 0, - 0, - 198, - 49, - 219, - 108, - 255, - 255, - 0, - 0, - 198, - 49, - 182, - 218, - 255, - 255, - 0, - 0, - 198, - 49, - 146, - 72, - 255, - 255, - 0, - 0, - 198, - 49, - 109, - 182, - 255, - 255, - 0, - 0, - 198, - 49, - 73, - 36, - 255, - 255, - 0, - 0, - 198, - 49, - 36, - 146, - 255, - 255, - 0, - 0, - 198, - 49, - 0, - 0, - 255, - 255, - 0, - 0, - 198, - 49, - 0, - 0, - 227, - 141, - 28, - 113, - 181, - 173, - 0, - 0, - 209, - 115, - 46, - 139, - 165, - 41, - 0, - 0, - 196, - 235, - 59, - 19, - 148, - 165, - 0, - 0, - 187, - 186, - 68, - 67, - 132, - 33, - 0, - 0, - 180, - 179, - 75, - 74, - 115, - 157, - 0, - 0, - 175, - 39, - 80, - 215, - 99, - 25, - 0, - 0, - 170, - 169, - 85, - 84, - 82, - 149, - 0, - 0, - 166, - 244, - 89, - 10, - 66, - 17, - 0, - 0, - 163, - 214, - 92, - 40, - 49, - 141, - 0, - 0, - 161, - 46, - 94, - 208, - 33, - 9, - 0, - 0, - 158, - 228, - 97, - 26, - 16, - 133, - 0, - 0, - 156, - 230, - 99, - 24, - 0, - 0, - 255, - 255, - 148, - 164, - 0, - 0, - 0, - 0, - 255, - 255, - 150, - 17, - 0, - 0, - 16, - 133, - 255, - 255, - 151, - 179, - 0, - 0, - 33, - 9, - 255, - 255, - 153, - 152, - 0, - 0, - 49, - 141, - 255, - 255, - 155, - 210, - 0, - 0, - 66, - 17, - 255, - 255, - 158, - 121, - 0, - 0, - 82, - 149, - 255, - 255, - 161, - 174, - 0, - 0, - 99, - 25, - 255, - 255, - 165, - 164, - 0, - 0, - 115, - 157, - 255, - 255, - 170, - 169, - 0, - 0, - 132, - 33, - 255, - 255, - 177, - 58, - 0, - 0, - 148, - 165, - 255, - 255, - 186, - 45, - 0, - 0, - 165, - 41, - 255, - 255, - 199, - 27, - 0, - 0, - 181, - 173, - 255, - 255, - 219, - 108, - 0, - 0, - 198, - 49, - 255, - 255, - 255, - 255, - 0, - 0, - 214, - 181, - 204, - 204, - 255, - 255, - 0, - 0, - 214, - 181, - 153, - 152, - 255, - 255, - 0, - 0, - 214, - 181, - 102, - 101, - 255, - 255, - 0, - 0, - 214, - 181, - 51, - 50, - 255, - 255, - 0, - 0, - 214, - 181, - 0, - 0, - 255, - 255, - 0, - 0, - 214, - 181, - 0, - 0, - 219, - 108, - 36, - 146, - 198, - 49, - 0, - 0, - 199, - 27, - 56, - 227, - 181, - 173, - 0, - 0, - 186, - 45, - 69, - 209, - 165, - 41, - 0, - 0, - 177, - 58, - 78, - 196, - 148, - 165, - 0, - 0, - 170, - 169, - 85, - 84, - 132, - 33, - 0, - 0, - 165, - 164, - 90, - 89, - 115, - 157, - 0, - 0, - 161, - 174, - 94, - 80, - 99, - 25, - 0, - 0, - 158, - 121, - 97, - 133, - 82, - 149, - 0, - 0, - 155, - 210, - 100, - 44, - 66, - 17, - 0, - 0, - 153, - 152, - 102, - 101, - 49, - 141, - 0, - 0, - 151, - 179, - 104, - 75, - 33, - 9, - 0, - 0, - 150, - 17, - 105, - 237, - 16, - 133, - 0, - 0, - 148, - 164, - 107, - 90, - 0, - 0, - 255, - 255, - 140, - 98, - 0, - 0, - 0, - 0, - 255, - 255, - 141, - 61, - 0, - 0, - 16, - 133, - 255, - 255, - 142, - 56, - 0, - 0, - 33, - 9, - 255, - 255, - 143, - 91, - 0, - 0, - 49, - 141, - 255, - 255, - 144, - 177, - 0, - 0, - 66, - 17, - 255, - 255, - 146, - 72, - 0, - 0, - 82, - 149, - 255, - 255, - 148, - 53, - 0, - 0, - 99, - 25, - 255, - 255, - 150, - 149, - 0, - 0, - 115, - 157, - 255, - 255, - 153, - 152, - 0, - 0, - 132, - 33, - 255, - 255, - 157, - 137, - 0, - 0, - 148, - 165, - 255, - 255, - 162, - 232, - 0, - 0, - 165, - 41, - 255, - 255, - 170, - 169, - 0, - 0, - 181, - 173, - 255, - 255, - 182, - 218, - 0, - 0, - 198, - 49, - 255, - 255, - 204, - 204, - 0, - 0, - 214, - 181, - 255, - 255, - 255, - 255, - 0, - 0, - 231, - 57, - 170, - 169, - 255, - 255, - 0, - 0, - 231, - 57, - 85, - 84, - 255, - 255, - 0, - 0, - 231, - 57, - 0, - 0, - 255, - 255, - 0, - 0, - 231, - 57, - 0, - 0, - 204, - 204, - 51, - 50, - 214, - 181, - 0, - 0, - 182, - 218, - 73, - 36, - 198, - 49, - 0, - 0, - 170, - 169, - 85, - 84, - 181, - 173, - 0, - 0, - 162, - 232, - 93, - 22, - 165, - 41, - 0, - 0, - 157, - 137, - 98, - 117, - 148, - 165, - 0, - 0, - 153, - 152, - 102, - 101, - 132, - 33, - 0, - 0, - 150, - 149, - 105, - 104, - 115, - 157, - 0, - 0, - 148, - 53, - 107, - 201, - 99, - 25, - 0, - 0, - 146, - 72, - 109, - 182, - 82, - 149, - 0, - 0, - 144, - 177, - 111, - 77, - 66, - 17, - 0, - 0, - 143, - 91, - 112, - 163, - 49, - 141, - 0, - 0, - 142, - 56, - 113, - 198, - 33, - 9, - 0, - 0, - 141, - 61, - 114, - 193, - 16, - 133, - 0, - 0, - 140, - 98, - 115, - 156, - 0, - 0, - 255, - 255, - 132, - 32, - 0, - 0, - 0, - 0, - 255, - 255, - 132, - 105, - 0, - 0, - 16, - 133, - 255, - 255, - 132, - 189, - 0, - 0, - 33, - 9, - 255, - 255, - 133, - 30, - 0, - 0, - 49, - 141, - 255, - 255, - 133, - 144, - 0, - 0, - 66, - 17, - 255, - 255, - 134, - 23, - 0, - 0, - 82, - 149, - 255, - 255, - 134, - 188, - 0, - 0, - 99, - 25, - 255, - 255, - 135, - 134, - 0, - 0, - 115, - 157, - 255, - 255, - 136, - 135, - 0, - 0, - 132, - 33, - 255, - 255, - 137, - 216, - 0, - 0, - 148, - 165, - 255, - 255, - 139, - 162, - 0, - 0, - 165, - 41, - 255, - 255, - 142, - 56, - 0, - 0, - 181, - 173, - 255, - 255, - 146, - 72, - 0, - 0, - 198, - 49, - 255, - 255, - 153, - 152, - 0, - 0, - 214, - 181, - 255, - 255, - 170, - 169, - 0, - 0, - 231, - 57, - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 0, - 0, - 255, - 255, - 0, - 0, - 247, - 189, - 0, - 0, - 170, - 169, - 85, - 84, - 231, - 57, - 0, - 0, - 153, - 152, - 102, - 101, - 214, - 181, - 0, - 0, - 146, - 72, - 109, - 182, - 198, - 49, - 0, - 0, - 142, - 56, - 113, - 198, - 181, - 173, - 0, - 0, - 139, - 162, - 116, - 92, - 165, - 41, - 0, - 0, - 137, - 216, - 118, - 38, - 148, - 165, - 0, - 0, - 136, - 135, - 119, - 118, - 132, - 33, - 0, - 0, - 135, - 134, - 120, - 119, - 115, - 157, - 0, - 0, - 134, - 188, - 121, - 66, - 99, - 25, - 0, - 0, - 134, - 23, - 121, - 231, - 82, - 149, - 0, - 0, - 133, - 144, - 122, - 110, - 66, - 17, - 0, - 0, - 133, - 30, - 122, - 224, - 49, - 141, - 0, - 0, - 132, - 189, - 123, - 65, - 33, - 9, - 0, - 0, - 132, - 105, - 123, - 149, - 16, - 133, - 0, - 0, - 132, - 32, - 123, - 222, - 0, - 0, - 255, - 255, - 123, - 222, - 0, - 0, - 0, - 0, - 255, - 255, - 123, - 149, - 0, - 0, - 16, - 133, - 255, - 255, - 123, - 65, - 0, - 0, - 33, - 9, - 255, - 255, - 122, - 224, - 0, - 0, - 49, - 141, - 255, - 255, - 122, - 110, - 0, - 0, - 66, - 17, - 255, - 255, - 121, - 231, - 0, - 0, - 82, - 149, - 255, - 255, - 121, - 66, - 0, - 0, - 99, - 25, - 255, - 255, - 120, - 119, - 0, - 0, - 115, - 157, - 255, - 255, - 119, - 118, - 0, - 0, - 132, - 33, - 255, - 255, - 118, - 38, - 0, - 0, - 148, - 165, - 255, - 255, - 116, - 92, - 0, - 0, - 165, - 41, - 255, - 255, - 113, - 198, - 0, - 0, - 181, - 173, - 255, - 255, - 109, - 182, - 0, - 0, - 198, - 49, - 255, - 255, - 102, - 101, - 0, - 0, - 214, - 181, - 255, - 255, - 85, - 84, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 85, - 84, - 170, - 169, - 231, - 57, - 0, - 0, - 102, - 101, - 153, - 152, - 214, - 181, - 0, - 0, - 109, - 182, - 146, - 72, - 198, - 49, - 0, - 0, - 113, - 198, - 142, - 56, - 181, - 173, - 0, - 0, - 116, - 92, - 139, - 162, - 165, - 41, - 0, - 0, - 118, - 38, - 137, - 216, - 148, - 165, - 0, - 0, - 119, - 118, - 136, - 135, - 132, - 33, - 0, - 0, - 120, - 119, - 135, - 134, - 115, - 157, - 0, - 0, - 121, - 66, - 134, - 188, - 99, - 25, - 0, - 0, - 121, - 231, - 134, - 23, - 82, - 149, - 0, - 0, - 122, - 110, - 133, - 144, - 66, - 17, - 0, - 0, - 122, - 224, - 133, - 30, - 49, - 141, - 0, - 0, - 123, - 65, - 132, - 189, - 33, - 9, - 0, - 0, - 123, - 149, - 132, - 105, - 16, - 133, - 0, - 0, - 123, - 222, - 132, - 32, - 0, - 0, - 255, - 255, - 115, - 156, - 0, - 0, - 0, - 0, - 255, - 255, - 114, - 193, - 0, - 0, - 16, - 133, - 255, - 255, - 113, - 198, - 0, - 0, - 33, - 9, - 255, - 255, - 112, - 163, - 0, - 0, - 49, - 141, - 255, - 255, - 111, - 77, - 0, - 0, - 66, - 17, - 255, - 255, - 109, - 182, - 0, - 0, - 82, - 149, - 255, - 255, - 107, - 201, - 0, - 0, - 99, - 25, - 255, - 255, - 105, - 104, - 0, - 0, - 115, - 157, - 255, - 255, - 102, - 101, - 0, - 0, - 132, - 33, - 255, - 255, - 98, - 117, - 0, - 0, - 148, - 165, - 255, - 255, - 93, - 22, - 0, - 0, - 165, - 41, - 255, - 255, - 85, - 84, - 0, - 0, - 181, - 173, - 255, - 255, - 73, - 36, - 0, - 0, - 198, - 49, - 255, - 255, - 51, - 50, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 0, - 0, - 231, - 57, - 170, - 169, - 0, - 0, - 85, - 84, - 231, - 57, - 85, - 84, - 0, - 0, - 170, - 169, - 231, - 57, - 0, - 0, - 0, - 0, - 255, - 255, - 231, - 57, - 0, - 0, - 51, - 50, - 204, - 204, - 214, - 181, - 0, - 0, - 73, - 36, - 182, - 218, - 198, - 49, - 0, - 0, - 85, - 84, - 170, - 169, - 181, - 173, - 0, - 0, - 93, - 22, - 162, - 232, - 165, - 41, - 0, - 0, - 98, - 117, - 157, - 137, - 148, - 165, - 0, - 0, - 102, - 101, - 153, - 152, - 132, - 33, - 0, - 0, - 105, - 104, - 150, - 149, - 115, - 157, - 0, - 0, - 107, - 201, - 148, - 53, - 99, - 25, - 0, - 0, - 109, - 182, - 146, - 72, - 82, - 149, - 0, - 0, - 111, - 77, - 144, - 177, - 66, - 17, - 0, - 0, - 112, - 163, - 143, - 91, - 49, - 141, - 0, - 0, - 113, - 198, - 142, - 56, - 33, - 9, - 0, - 0, - 114, - 193, - 141, - 61, - 16, - 133, - 0, - 0, - 115, - 156, - 140, - 98, - 0, - 0, - 255, - 255, - 107, - 90, - 0, - 0, - 0, - 0, - 255, - 255, - 105, - 237, - 0, - 0, - 16, - 133, - 255, - 255, - 104, - 75, - 0, - 0, - 33, - 9, - 255, - 255, - 102, - 101, - 0, - 0, - 49, - 141, - 255, - 255, - 100, - 44, - 0, - 0, - 66, - 17, - 255, - 255, - 97, - 133, - 0, - 0, - 82, - 149, - 255, - 255, - 94, - 80, - 0, - 0, - 99, - 25, - 255, - 255, - 90, - 89, - 0, - 0, - 115, - 157, - 255, - 255, - 85, - 84, - 0, - 0, - 132, - 33, - 255, - 255, - 78, - 196, - 0, - 0, - 148, - 165, - 255, - 255, - 69, - 209, - 0, - 0, - 165, - 41, - 255, - 255, - 56, - 227, - 0, - 0, - 181, - 173, - 255, - 255, - 36, - 146, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 0, - 0, - 214, - 181, - 204, - 204, - 0, - 0, - 51, - 50, - 214, - 181, - 153, - 152, - 0, - 0, - 102, - 101, - 214, - 181, - 102, - 101, - 0, - 0, - 153, - 152, - 214, - 181, - 51, - 50, - 0, - 0, - 204, - 204, - 214, - 181, - 0, - 0, - 0, - 0, - 255, - 255, - 214, - 181, - 0, - 0, - 36, - 146, - 219, - 108, - 198, - 49, - 0, - 0, - 56, - 227, - 199, - 27, - 181, - 173, - 0, - 0, - 69, - 209, - 186, - 45, - 165, - 41, - 0, - 0, - 78, - 196, - 177, - 58, - 148, - 165, - 0, - 0, - 85, - 84, - 170, - 169, - 132, - 33, - 0, - 0, - 90, - 89, - 165, - 164, - 115, - 157, - 0, - 0, - 94, - 80, - 161, - 174, - 99, - 25, - 0, - 0, - 97, - 133, - 158, - 121, - 82, - 149, - 0, - 0, - 100, - 44, - 155, - 210, - 66, - 17, - 0, - 0, - 102, - 101, - 153, - 152, - 49, - 141, - 0, - 0, - 104, - 75, - 151, - 179, - 33, - 9, - 0, - 0, - 105, - 237, - 150, - 17, - 16, - 133, - 0, - 0, - 107, - 90, - 148, - 164, - 0, - 0, - 255, - 255, - 99, - 24, - 0, - 0, - 0, - 0, - 255, - 255, - 97, - 26, - 0, - 0, - 16, - 133, - 255, - 255, - 94, - 208, - 0, - 0, - 33, - 9, - 255, - 255, - 92, - 40, - 0, - 0, - 49, - 141, - 255, - 255, - 89, - 10, - 0, - 0, - 66, - 17, - 255, - 255, - 85, - 84, - 0, - 0, - 82, - 149, - 255, - 255, - 80, - 215, - 0, - 0, - 99, - 25, - 255, - 255, - 75, - 74, - 0, - 0, - 115, - 157, - 255, - 255, - 68, - 67, - 0, - 0, - 132, - 33, - 255, - 255, - 59, - 19, - 0, - 0, - 148, - 165, - 255, - 255, - 46, - 139, - 0, - 0, - 165, - 41, - 255, - 255, - 28, - 113, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 49, - 219, - 108, - 0, - 0, - 36, - 146, - 198, - 49, - 182, - 218, - 0, - 0, - 73, - 36, - 198, - 49, - 146, - 72, - 0, - 0, - 109, - 182, - 198, - 49, - 109, - 182, - 0, - 0, - 146, - 72, - 198, - 49, - 73, - 36, - 0, - 0, - 182, - 218, - 198, - 49, - 36, - 146, - 0, - 0, - 219, - 108, - 198, - 49, - 0, - 0, - 0, - 0, - 255, - 255, - 198, - 49, - 0, - 0, - 28, - 113, - 227, - 141, - 181, - 173, - 0, - 0, - 46, - 139, - 209, - 115, - 165, - 41, - 0, - 0, - 59, - 19, - 196, - 235, - 148, - 165, - 0, - 0, - 68, - 67, - 187, - 186, - 132, - 33, - 0, - 0, - 75, - 74, - 180, - 179, - 115, - 157, - 0, - 0, - 80, - 215, - 175, - 39, - 99, - 25, - 0, - 0, - 85, - 84, - 170, - 169, - 82, - 149, - 0, - 0, - 89, - 10, - 166, - 244, - 66, - 17, - 0, - 0, - 92, - 40, - 163, - 214, - 49, - 141, - 0, - 0, - 94, - 208, - 161, - 46, - 33, - 9, - 0, - 0, - 97, - 26, - 158, - 228, - 16, - 133, - 0, - 0, - 99, - 24, - 156, - 230, - 0, - 0, - 255, - 255, - 90, - 214, - 0, - 0, - 0, - 0, - 255, - 255, - 88, - 70, - 0, - 0, - 16, - 133, - 255, - 255, - 85, - 84, - 0, - 0, - 33, - 9, - 255, - 255, - 81, - 235, - 0, - 0, - 49, - 141, - 255, - 255, - 77, - 233, - 0, - 0, - 66, - 17, - 255, - 255, - 73, - 36, - 0, - 0, - 82, - 149, - 255, - 255, - 67, - 94, - 0, - 0, - 99, - 25, - 255, - 255, - 60, - 59, - 0, - 0, - 115, - 157, - 255, - 255, - 51, - 50, - 0, - 0, - 132, - 33, - 255, - 255, - 39, - 98, - 0, - 0, - 148, - 165, - 255, - 255, - 23, - 69, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 0, - 0, - 181, - 173, - 227, - 141, - 0, - 0, - 28, - 113, - 181, - 173, - 199, - 27, - 0, - 0, - 56, - 227, - 181, - 173, - 170, - 169, - 0, - 0, - 85, - 84, - 181, - 173, - 142, - 56, - 0, - 0, - 113, - 198, - 181, - 173, - 113, - 198, - 0, - 0, - 142, - 56, - 181, - 173, - 85, - 84, - 0, - 0, - 170, - 169, - 181, - 173, - 56, - 227, - 0, - 0, - 199, - 27, - 181, - 173, - 28, - 113, - 0, - 0, - 227, - 141, - 181, - 173, - 0, - 0, - 0, - 0, - 255, - 255, - 181, - 173, - 0, - 0, - 23, - 69, - 232, - 185, - 165, - 41, - 0, - 0, - 39, - 98, - 216, - 156, - 148, - 165, - 0, - 0, - 51, - 50, - 204, - 204, - 132, - 33, - 0, - 0, - 60, - 59, - 195, - 195, - 115, - 157, - 0, - 0, - 67, - 94, - 188, - 160, - 99, - 25, - 0, - 0, - 73, - 36, - 182, - 218, - 82, - 149, - 0, - 0, - 77, - 233, - 178, - 21, - 66, - 17, - 0, - 0, - 81, - 235, - 174, - 19, - 49, - 141, - 0, - 0, - 85, - 84, - 170, - 169, - 33, - 9, - 0, - 0, - 88, - 70, - 167, - 184, - 16, - 133, - 0, - 0, - 90, - 214, - 165, - 40, - 0, - 0, - 255, - 255, - 82, - 148, - 0, - 0, - 0, - 0, - 255, - 255, - 79, - 114, - 0, - 0, - 16, - 133, - 255, - 255, - 75, - 217, - 0, - 0, - 33, - 9, - 255, - 255, - 71, - 173, - 0, - 0, - 49, - 141, - 255, - 255, - 66, - 200, - 0, - 0, - 66, - 17, - 255, - 255, - 60, - 243, - 0, - 0, - 82, - 149, - 255, - 255, - 53, - 228, - 0, - 0, - 99, - 25, - 255, - 255, - 45, - 44, - 0, - 0, - 115, - 157, - 255, - 255, - 34, - 33, - 0, - 0, - 132, - 33, - 255, - 255, - 19, - 177, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 0, - 0, - 165, - 41, - 232, - 185, - 0, - 0, - 23, - 69, - 165, - 41, - 209, - 115, - 0, - 0, - 46, - 139, - 165, - 41, - 186, - 45, - 0, - 0, - 69, - 209, - 165, - 41, - 162, - 232, - 0, - 0, - 93, - 22, - 165, - 41, - 139, - 162, - 0, - 0, - 116, - 92, - 165, - 41, - 116, - 92, - 0, - 0, - 139, - 162, - 165, - 41, - 93, - 22, - 0, - 0, - 162, - 232, - 165, - 41, - 69, - 209, - 0, - 0, - 186, - 45, - 165, - 41, - 46, - 139, - 0, - 0, - 209, - 115, - 165, - 41, - 23, - 69, - 0, - 0, - 232, - 185, - 165, - 41, - 0, - 0, - 0, - 0, - 255, - 255, - 165, - 41, - 0, - 0, - 19, - 177, - 236, - 77, - 148, - 165, - 0, - 0, - 34, - 33, - 221, - 221, - 132, - 33, - 0, - 0, - 45, - 44, - 210, - 210, - 115, - 157, - 0, - 0, - 53, - 228, - 202, - 26, - 99, - 25, - 0, - 0, - 60, - 243, - 195, - 11, - 82, - 149, - 0, - 0, - 66, - 200, - 189, - 54, - 66, - 17, - 0, - 0, - 71, - 173, - 184, - 81, - 49, - 141, - 0, - 0, - 75, - 217, - 180, - 37, - 33, - 9, - 0, - 0, - 79, - 114, - 176, - 140, - 16, - 133, - 0, - 0, - 82, - 148, - 173, - 106, - 0, - 0, - 255, - 255, - 74, - 82, - 0, - 0, - 0, - 0, - 255, - 255, - 70, - 158, - 0, - 0, - 16, - 133, - 255, - 255, - 66, - 94, - 0, - 0, - 33, - 9, - 255, - 255, - 61, - 112, - 0, - 0, - 49, - 141, - 255, - 255, - 55, - 166, - 0, - 0, - 66, - 17, - 255, - 255, - 48, - 194, - 0, - 0, - 82, - 149, - 255, - 255, - 40, - 107, - 0, - 0, - 99, - 25, - 255, - 255, - 30, - 29, - 0, - 0, - 115, - 157, - 255, - 255, - 17, - 16, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 0, - 0, - 148, - 165, - 236, - 77, - 0, - 0, - 19, - 177, - 148, - 165, - 216, - 156, - 0, - 0, - 39, - 98, - 148, - 165, - 196, - 235, - 0, - 0, - 59, - 19, - 148, - 165, - 177, - 58, - 0, - 0, - 78, - 196, - 148, - 165, - 157, - 137, - 0, - 0, - 98, - 117, - 148, - 165, - 137, - 216, - 0, - 0, - 118, - 38, - 148, - 165, - 118, - 38, - 0, - 0, - 137, - 216, - 148, - 165, - 98, - 117, - 0, - 0, - 157, - 137, - 148, - 165, - 78, - 196, - 0, - 0, - 177, - 58, - 148, - 165, - 59, - 19, - 0, - 0, - 196, - 235, - 148, - 165, - 39, - 98, - 0, - 0, - 216, - 156, - 148, - 165, - 19, - 177, - 0, - 0, - 236, - 77, - 148, - 165, - 0, - 0, - 0, - 0, - 255, - 255, - 148, - 165, - 0, - 0, - 17, - 16, - 238, - 238, - 132, - 33, - 0, - 0, - 30, - 29, - 225, - 225, - 115, - 157, - 0, - 0, - 40, - 107, - 215, - 147, - 99, - 25, - 0, - 0, - 48, - 194, - 207, - 60, - 82, - 149, - 0, - 0, - 55, - 166, - 200, - 88, - 66, - 17, - 0, - 0, - 61, - 112, - 194, - 142, - 49, - 141, - 0, - 0, - 66, - 94, - 189, - 160, - 33, - 9, - 0, - 0, - 70, - 158, - 185, - 96, - 16, - 133, - 0, - 0, - 74, - 82, - 181, - 172, - 0, - 0, - 255, - 255, - 66, - 16, - 0, - 0, - 0, - 0, - 255, - 255, - 61, - 202, - 0, - 0, - 16, - 133, - 255, - 255, - 56, - 227, - 0, - 0, - 33, - 9, - 255, - 255, - 51, - 50, - 0, - 0, - 49, - 141, - 255, - 255, - 44, - 133, - 0, - 0, - 66, - 17, - 255, - 255, - 36, - 146, - 0, - 0, - 82, - 149, - 255, - 255, - 26, - 242, - 0, - 0, - 99, - 25, - 255, - 255, - 15, - 14, - 0, - 0, - 115, - 157, - 255, - 255, - 0, - 0, - 0, - 0, - 132, - 33, - 238, - 238, - 0, - 0, - 17, - 16, - 132, - 33, - 221, - 221, - 0, - 0, - 34, - 33, - 132, - 33, - 204, - 204, - 0, - 0, - 51, - 50, - 132, - 33, - 187, - 186, - 0, - 0, - 68, - 67, - 132, - 33, - 170, - 169, - 0, - 0, - 85, - 84, - 132, - 33, - 153, - 152, - 0, - 0, - 102, - 101, - 132, - 33, - 136, - 135, - 0, - 0, - 119, - 118, - 132, - 33, - 119, - 118, - 0, - 0, - 136, - 135, - 132, - 33, - 102, - 101, - 0, - 0, - 153, - 152, - 132, - 33, - 85, - 84, - 0, - 0, - 170, - 169, - 132, - 33, - 68, - 67, - 0, - 0, - 187, - 186, - 132, - 33, - 51, - 50, - 0, - 0, - 204, - 204, - 132, - 33, - 34, - 33, - 0, - 0, - 221, - 221, - 132, - 33, - 17, - 16, - 0, - 0, - 238, - 238, - 132, - 33, - 0, - 0, - 0, - 0, - 255, - 255, - 132, - 33, - 0, - 0, - 15, - 14, - 240, - 240, - 115, - 157, - 0, - 0, - 26, - 242, - 229, - 12, - 99, - 25, - 0, - 0, - 36, - 146, - 219, - 108, - 82, - 149, - 0, - 0, - 44, - 133, - 211, - 121, - 66, - 17, - 0, - 0, - 51, - 50, - 204, - 204, - 49, - 141, - 0, - 0, - 56, - 227, - 199, - 27, - 33, - 9, - 0, - 0, - 61, - 202, - 194, - 52, - 16, - 133, - 0, - 0, - 66, - 16, - 189, - 238, - 0, - 0, - 255, - 255, - 57, - 206, - 0, - 0, - 0, - 0, - 255, - 255, - 52, - 246, - 0, - 0, - 16, - 133, - 255, - 255, - 47, - 104, - 0, - 0, - 33, - 9, - 255, - 255, - 40, - 245, - 0, - 0, - 49, - 141, - 255, - 255, - 33, - 100, - 0, - 0, - 66, - 17, - 255, - 255, - 24, - 97, - 0, - 0, - 82, - 149, - 255, - 255, - 13, - 121, - 0, - 0, - 99, - 25, - 255, - 255, - 0, - 0, - 0, - 0, - 115, - 157, - 240, - 240, - 0, - 0, - 15, - 14, - 115, - 157, - 225, - 225, - 0, - 0, - 30, - 29, - 115, - 157, - 210, - 210, - 0, - 0, - 45, - 44, - 115, - 157, - 195, - 195, - 0, - 0, - 60, - 59, - 115, - 157, - 180, - 179, - 0, - 0, - 75, - 74, - 115, - 157, - 165, - 164, - 0, - 0, - 90, - 89, - 115, - 157, - 150, - 149, - 0, - 0, - 105, - 104, - 115, - 157, - 135, - 134, - 0, - 0, - 120, - 119, - 115, - 157, - 120, - 119, - 0, - 0, - 135, - 134, - 115, - 157, - 105, - 104, - 0, - 0, - 150, - 149, - 115, - 157, - 90, - 89, - 0, - 0, - 165, - 164, - 115, - 157, - 75, - 74, - 0, - 0, - 180, - 179, - 115, - 157, - 60, - 59, - 0, - 0, - 195, - 195, - 115, - 157, - 45, - 44, - 0, - 0, - 210, - 210, - 115, - 157, - 30, - 29, - 0, - 0, - 225, - 225, - 115, - 157, - 15, - 14, - 0, - 0, - 240, - 240, - 115, - 157, - 0, - 0, - 0, - 0, - 255, - 255, - 115, - 157, - 0, - 0, - 13, - 121, - 242, - 133, - 99, - 25, - 0, - 0, - 24, - 97, - 231, - 157, - 82, - 149, - 0, - 0, - 33, - 100, - 222, - 154, - 66, - 17, - 0, - 0, - 40, - 245, - 215, - 9, - 49, - 141, - 0, - 0, - 47, - 104, - 208, - 150, - 33, - 9, - 0, - 0, - 52, - 246, - 203, - 8, - 16, - 133, - 0, - 0, - 57, - 206, - 198, - 48, - 0, - 0, - 255, - 255, - 49, - 140, - 0, - 0, - 0, - 0, - 255, - 255, - 44, - 35, - 0, - 0, - 16, - 133, - 255, - 255, - 37, - 236, - 0, - 0, - 33, - 9, - 255, - 255, - 30, - 184, - 0, - 0, - 49, - 141, - 255, - 255, - 22, - 66, - 0, - 0, - 66, - 17, - 255, - 255, - 12, - 48, - 0, - 0, - 82, - 149, - 255, - 255, - 0, - 0, - 0, - 0, - 99, - 25, - 242, - 133, - 0, - 0, - 13, - 121, - 99, - 25, - 229, - 12, - 0, - 0, - 26, - 242, - 99, - 25, - 215, - 147, - 0, - 0, - 40, - 107, - 99, - 25, - 202, - 26, - 0, - 0, - 53, - 228, - 99, - 25, - 188, - 160, - 0, - 0, - 67, - 94, - 99, - 25, - 175, - 39, - 0, - 0, - 80, - 215, - 99, - 25, - 161, - 174, - 0, - 0, - 94, - 80, - 99, - 25, - 148, - 53, - 0, - 0, - 107, - 201, - 99, - 25, - 134, - 188, - 0, - 0, - 121, - 66, - 99, - 25, - 121, - 66, - 0, - 0, - 134, - 188, - 99, - 25, - 107, - 201, - 0, - 0, - 148, - 53, - 99, - 25, - 94, - 80, - 0, - 0, - 161, - 174, - 99, - 25, - 80, - 215, - 0, - 0, - 175, - 39, - 99, - 25, - 67, - 94, - 0, - 0, - 188, - 160, - 99, - 25, - 53, - 228, - 0, - 0, - 202, - 26, - 99, - 25, - 40, - 107, - 0, - 0, - 215, - 147, - 99, - 25, - 26, - 242, - 0, - 0, - 229, - 12, - 99, - 25, - 13, - 121, - 0, - 0, - 242, - 133, - 99, - 25, - 0, - 0, - 0, - 0, - 255, - 255, - 99, - 25, - 0, - 0, - 12, - 48, - 243, - 206, - 82, - 149, - 0, - 0, - 22, - 66, - 233, - 188, - 66, - 17, - 0, - 0, - 30, - 184, - 225, - 70, - 49, - 141, - 0, - 0, - 37, - 236, - 218, - 18, - 33, - 9, - 0, - 0, - 44, - 35, - 211, - 219, - 16, - 133, - 0, - 0, - 49, - 140, - 206, - 114, - 0, - 0, - 255, - 255, - 41, - 74, - 0, - 0, - 0, - 0, - 255, - 255, - 35, - 79, - 0, - 0, - 16, - 133, - 255, - 255, - 28, - 113, - 0, - 0, - 33, - 9, - 255, - 255, - 20, - 122, - 0, - 0, - 49, - 141, - 255, - 255, - 11, - 33, - 0, - 0, - 66, - 17, - 255, - 255, - 0, - 0, - 0, - 0, - 82, - 149, - 243, - 206, - 0, - 0, - 12, - 48, - 82, - 149, - 231, - 157, - 0, - 0, - 24, - 97, - 82, - 149, - 219, - 108, - 0, - 0, - 36, - 146, - 82, - 149, - 207, - 60, - 0, - 0, - 48, - 194, - 82, - 149, - 195, - 11, - 0, - 0, - 60, - 243, - 82, - 149, - 182, - 218, - 0, - 0, - 73, - 36, - 82, - 149, - 170, - 169, - 0, - 0, - 85, - 84, - 82, - 149, - 158, - 121, - 0, - 0, - 97, - 133, - 82, - 149, - 146, - 72, - 0, - 0, - 109, - 182, - 82, - 149, - 134, - 23, - 0, - 0, - 121, - 231, - 82, - 149, - 121, - 231, - 0, - 0, - 134, - 23, - 82, - 149, - 109, - 182, - 0, - 0, - 146, - 72, - 82, - 149, - 97, - 133, - 0, - 0, - 158, - 121, - 82, - 149, - 85, - 84, - 0, - 0, - 170, - 169, - 82, - 149, - 73, - 36, - 0, - 0, - 182, - 218, - 82, - 149, - 60, - 243, - 0, - 0, - 195, - 11, - 82, - 149, - 48, - 194, - 0, - 0, - 207, - 60, - 82, - 149, - 36, - 146, - 0, - 0, - 219, - 108, - 82, - 149, - 24, - 97, - 0, - 0, - 231, - 157, - 82, - 149, - 12, - 48, - 0, - 0, - 243, - 206, - 82, - 149, - 0, - 0, - 0, - 0, - 255, - 255, - 82, - 149, - 0, - 0, - 11, - 33, - 244, - 221, - 66, - 17, - 0, - 0, - 20, - 122, - 235, - 132, - 49, - 141, - 0, - 0, - 28, - 113, - 227, - 141, - 33, - 9, - 0, - 0, - 35, - 79, - 220, - 175, - 16, - 133, - 0, - 0, - 41, - 74, - 214, - 180, - 0, - 0, - 255, - 255, - 33, - 8, - 0, - 0, - 0, - 0, - 255, - 255, - 26, - 123, - 0, - 0, - 16, - 133, - 255, - 255, - 18, - 246, - 0, - 0, - 33, - 9, - 255, - 255, - 10, - 61, - 0, - 0, - 49, - 141, - 255, - 255, - 0, - 0, - 0, - 0, - 66, - 17, - 244, - 221, - 0, - 0, - 11, - 33, - 66, - 17, - 233, - 188, - 0, - 0, - 22, - 66, - 66, - 17, - 222, - 154, - 0, - 0, - 33, - 100, - 66, - 17, - 211, - 121, - 0, - 0, - 44, - 133, - 66, - 17, - 200, - 88, - 0, - 0, - 55, - 166, - 66, - 17, - 189, - 54, - 0, - 0, - 66, - 200, - 66, - 17, - 178, - 21, - 0, - 0, - 77, - 233, - 66, - 17, - 166, - 244, - 0, - 0, - 89, - 10, - 66, - 17, - 155, - 210, - 0, - 0, - 100, - 44, - 66, - 17, - 144, - 177, - 0, - 0, - 111, - 77, - 66, - 17, - 133, - 144, - 0, - 0, - 122, - 110, - 66, - 17, - 122, - 110, - 0, - 0, - 133, - 144, - 66, - 17, - 111, - 77, - 0, - 0, - 144, - 177, - 66, - 17, - 100, - 44, - 0, - 0, - 155, - 210, - 66, - 17, - 89, - 10, - 0, - 0, - 166, - 244, - 66, - 17, - 77, - 233, - 0, - 0, - 178, - 21, - 66, - 17, - 66, - 200, - 0, - 0, - 189, - 54, - 66, - 17, - 55, - 166, - 0, - 0, - 200, - 88, - 66, - 17, - 44, - 133, - 0, - 0, - 211, - 121, - 66, - 17, - 33, - 100, - 0, - 0, - 222, - 154, - 66, - 17, - 22, - 66, - 0, - 0, - 233, - 188, - 66, - 17, - 11, - 33, - 0, - 0, - 244, - 221, - 66, - 17, - 0, - 0, - 0, - 0, - 255, - 255, - 66, - 17, - 0, - 0, - 10, - 61, - 245, - 193, - 49, - 141, - 0, - 0, - 18, - 246, - 237, - 8, - 33, - 9, - 0, - 0, - 26, - 123, - 229, - 131, - 16, - 133, - 0, - 0, - 33, - 8, - 222, - 246, - 0, - 0, - 255, - 255, - 24, - 198, - 0, - 0, - 0, - 0, - 255, - 255, - 17, - 167, - 0, - 0, - 16, - 133, - 255, - 255, - 9, - 123, - 0, - 0, - 33, - 9, - 255, - 255, - 0, - 0, - 0, - 0, - 49, - 141, - 245, - 193, - 0, - 0, - 10, - 61, - 49, - 141, - 235, - 132, - 0, - 0, - 20, - 122, - 49, - 141, - 225, - 70, - 0, - 0, - 30, - 184, - 49, - 141, - 215, - 9, - 0, - 0, - 40, - 245, - 49, - 141, - 204, - 204, - 0, - 0, - 51, - 50, - 49, - 141, - 194, - 142, - 0, - 0, - 61, - 112, - 49, - 141, - 184, - 81, - 0, - 0, - 71, - 173, - 49, - 141, - 174, - 19, - 0, - 0, - 81, - 235, - 49, - 141, - 163, - 214, - 0, - 0, - 92, - 40, - 49, - 141, - 153, - 152, - 0, - 0, - 102, - 101, - 49, - 141, - 143, - 91, - 0, - 0, - 112, - 163, - 49, - 141, - 133, - 30, - 0, - 0, - 122, - 224, - 49, - 141, - 122, - 224, - 0, - 0, - 133, - 30, - 49, - 141, - 112, - 163, - 0, - 0, - 143, - 91, - 49, - 141, - 102, - 101, - 0, - 0, - 153, - 152, - 49, - 141, - 92, - 40, - 0, - 0, - 163, - 214, - 49, - 141, - 81, - 235, - 0, - 0, - 174, - 19, - 49, - 141, - 71, - 173, - 0, - 0, - 184, - 81, - 49, - 141, - 61, - 112, - 0, - 0, - 194, - 142, - 49, - 141, - 51, - 50, - 0, - 0, - 204, - 204, - 49, - 141, - 40, - 245, - 0, - 0, - 215, - 9, - 49, - 141, - 30, - 184, - 0, - 0, - 225, - 70, - 49, - 141, - 20, - 122, - 0, - 0, - 235, - 132, - 49, - 141, - 10, - 61, - 0, - 0, - 245, - 193, - 49, - 141, - 0, - 0, - 0, - 0, - 255, - 255, - 49, - 141, - 0, - 0, - 9, - 123, - 246, - 131, - 33, - 9, - 0, - 0, - 17, - 167, - 238, - 87, - 16, - 133, - 0, - 0, - 24, - 198, - 231, - 56, - 0, - 0, - 255, - 255, - 16, - 132, - 0, - 0, - 0, - 0, - 255, - 255, - 8, - 211, - 0, - 0, - 16, - 133, - 255, - 255, - 0, - 0, - 0, - 0, - 33, - 9, - 246, - 131, - 0, - 0, - 9, - 123, - 33, - 9, - 237, - 8, - 0, - 0, - 18, - 246, - 33, - 9, - 227, - 141, - 0, - 0, - 28, - 113, - 33, - 9, - 218, - 18, - 0, - 0, - 37, - 236, - 33, - 9, - 208, - 150, - 0, - 0, - 47, - 104, - 33, - 9, - 199, - 27, - 0, - 0, - 56, - 227, - 33, - 9, - 189, - 160, - 0, - 0, - 66, - 94, - 33, - 9, - 180, - 37, - 0, - 0, - 75, - 217, - 33, - 9, - 170, - 169, - 0, - 0, - 85, - 84, - 33, - 9, - 161, - 46, - 0, - 0, - 94, - 208, - 33, - 9, - 151, - 179, - 0, - 0, - 104, - 75, - 33, - 9, - 142, - 56, - 0, - 0, - 113, - 198, - 33, - 9, - 132, - 189, - 0, - 0, - 123, - 65, - 33, - 9, - 123, - 65, - 0, - 0, - 132, - 189, - 33, - 9, - 113, - 198, - 0, - 0, - 142, - 56, - 33, - 9, - 104, - 75, - 0, - 0, - 151, - 179, - 33, - 9, - 94, - 208, - 0, - 0, - 161, - 46, - 33, - 9, - 85, - 84, - 0, - 0, - 170, - 169, - 33, - 9, - 75, - 217, - 0, - 0, - 180, - 37, - 33, - 9, - 66, - 94, - 0, - 0, - 189, - 160, - 33, - 9, - 56, - 227, - 0, - 0, - 199, - 27, - 33, - 9, - 47, - 104, - 0, - 0, - 208, - 150, - 33, - 9, - 37, - 236, - 0, - 0, - 218, - 18, - 33, - 9, - 28, - 113, - 0, - 0, - 227, - 141, - 33, - 9, - 18, - 246, - 0, - 0, - 237, - 8, - 33, - 9, - 9, - 123, - 0, - 0, - 246, - 131, - 33, - 9, - 0, - 0, - 0, - 0, - 255, - 255, - 33, - 9, - 0, - 0, - 8, - 211, - 247, - 43, - 16, - 133, - 0, - 0, - 16, - 132, - 239, - 122, - 0, - 0, - 255, - 255, - 8, - 66, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 16, - 133, - 247, - 43, - 0, - 0, - 8, - 211, - 16, - 133, - 238, - 87, - 0, - 0, - 17, - 167, - 16, - 133, - 229, - 131, - 0, - 0, - 26, - 123, - 16, - 133, - 220, - 175, - 0, - 0, - 35, - 79, - 16, - 133, - 211, - 219, - 0, - 0, - 44, - 35, - 16, - 133, - 203, - 8, - 0, - 0, - 52, - 246, - 16, - 133, - 194, - 52, - 0, - 0, - 61, - 202, - 16, - 133, - 185, - 96, - 0, - 0, - 70, - 158, - 16, - 133, - 176, - 140, - 0, - 0, - 79, - 114, - 16, - 133, - 167, - 184, - 0, - 0, - 88, - 70, - 16, - 133, - 158, - 228, - 0, - 0, - 97, - 26, - 16, - 133, - 150, - 17, - 0, - 0, - 105, - 237, - 16, - 133, - 141, - 61, - 0, - 0, - 114, - 193, - 16, - 133, - 132, - 105, - 0, - 0, - 123, - 149, - 16, - 133, - 123, - 149, - 0, - 0, - 132, - 105, - 16, - 133, - 114, - 193, - 0, - 0, - 141, - 61, - 16, - 133, - 105, - 237, - 0, - 0, - 150, - 17, - 16, - 133, - 97, - 26, - 0, - 0, - 158, - 228, - 16, - 133, - 88, - 70, - 0, - 0, - 167, - 184, - 16, - 133, - 79, - 114, - 0, - 0, - 176, - 140, - 16, - 133, - 70, - 158, - 0, - 0, - 185, - 96, - 16, - 133, - 61, - 202, - 0, - 0, - 194, - 52, - 16, - 133, - 52, - 246, - 0, - 0, - 203, - 8, - 16, - 133, - 44, - 35, - 0, - 0, - 211, - 219, - 16, - 133, - 35, - 79, - 0, - 0, - 220, - 175, - 16, - 133, - 26, - 123, - 0, - 0, - 229, - 131, - 16, - 133, - 17, - 167, - 0, - 0, - 238, - 87, - 16, - 133, - 8, - 211, - 0, - 0, - 247, - 43, - 16, - 133, - 0, - 0, - 0, - 0, - 255, - 255, - 16, - 133, - 0, - 0, - 8, - 66, - 247, - 188, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 0, - 0, - 247, - 188, - 0, - 0, - 8, - 66, - 0, - 0, - 239, - 122, - 0, - 0, - 16, - 132, - 0, - 0, - 231, - 56, - 0, - 0, - 24, - 198, - 0, - 0, - 222, - 246, - 0, - 0, - 33, - 8, - 0, - 0, - 214, - 180, - 0, - 0, - 41, - 74, - 0, - 0, - 206, - 114, - 0, - 0, - 49, - 140, - 0, - 0, - 198, - 48, - 0, - 0, - 57, - 206, - 0, - 0, - 189, - 238, - 0, - 0, - 66, - 16, - 0, - 0, - 181, - 172, - 0, - 0, - 74, - 82, - 0, - 0, - 173, - 106, - 0, - 0, - 82, - 148, - 0, - 0, - 165, - 40, - 0, - 0, - 90, - 214, - 0, - 0, - 156, - 230, - 0, - 0, - 99, - 24, - 0, - 0, - 148, - 164, - 0, - 0, - 107, - 90, - 0, - 0, - 140, - 98, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 222, - 0, - 0, - 123, - 222, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 140, - 98, - 0, - 0, - 107, - 90, - 0, - 0, - 148, - 164, - 0, - 0, - 99, - 24, - 0, - 0, - 156, - 230, - 0, - 0, - 90, - 214, - 0, - 0, - 165, - 40, - 0, - 0, - 82, - 148, - 0, - 0, - 173, - 106, - 0, - 0, - 74, - 82, - 0, - 0, - 181, - 172, - 0, - 0, - 66, - 16, - 0, - 0, - 189, - 238, - 0, - 0, - 57, - 206, - 0, - 0, - 198, - 48, - 0, - 0, - 49, - 140, - 0, - 0, - 206, - 114, - 0, - 0, - 41, - 74, - 0, - 0, - 214, - 180, - 0, - 0, - 33, - 8, - 0, - 0, - 222, - 246, - 0, - 0, - 24, - 198, - 0, - 0, - 231, - 56, - 0, - 0, - 16, - 132, - 0, - 0, - 239, - 122, - 0, - 0, - 8, - 66, - 0, - 0, - 247, - 188, - 0, - 0, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, -] -`; - -exports[`pixels browser transparent-black-grayscale-4bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 183, - 101, - 70, - 157, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 235, - 134, - 101, - 50, - 34, - 35, - 89, - 207, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 201, - 118, - 84, - 51, - 50, - 52, - 33, - 34, - 54, - 156, - 255, - 255, - 255, - 255, - 252, - 151, - 118, - 67, - 51, - 52, - 67, - 52, - 67, - 35, - 53, - 103, - 121, - 206, - 255, - 255, - 199, - 119, - 117, - 51, - 52, - 86, - 84, - 68, - 68, - 67, - 38, - 119, - 119, - 105, - 255, - 255, - 216, - 136, - 118, - 68, - 103, - 119, - 119, - 101, - 85, - 69, - 103, - 119, - 117, - 91, - 255, - 255, - 232, - 136, - 136, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 118, - 85, - 78, - 255, - 255, - 248, - 102, - 120, - 152, - 135, - 119, - 119, - 119, - 119, - 119, - 118, - 85, - 68, - 95, - 255, - 255, - 248, - 103, - 136, - 153, - 153, - 135, - 119, - 119, - 119, - 119, - 83, - 17, - 52, - 143, - 255, - 255, - 249, - 103, - 136, - 153, - 153, - 153, - 135, - 119, - 119, - 101, - 33, - 17, - 19, - 175, - 255, - 255, - 249, - 102, - 136, - 137, - 151, - 121, - 153, - 135, - 101, - 83, - 33, - 16, - 18, - 223, - 255, - 255, - 250, - 102, - 120, - 137, - 134, - 102, - 153, - 151, - 85, - 66, - 17, - 33, - 20, - 255, - 255, - 255, - 251, - 102, - 104, - 136, - 119, - 86, - 153, - 151, - 85, - 34, - 19, - 66, - 55, - 255, - 255, - 255, - 252, - 102, - 87, - 135, - 119, - 87, - 153, - 150, - 83, - 33, - 52, - 33, - 25, - 255, - 255, - 255, - 253, - 102, - 70, - 133, - 119, - 87, - 153, - 150, - 82, - 33, - 49, - 17, - 28, - 255, - 255, - 255, - 254, - 102, - 85, - 134, - 103, - 87, - 153, - 150, - 66, - 18, - 33, - 17, - 46, - 255, - 255, - 255, - 255, - 102, - 85, - 119, - 87, - 87, - 153, - 149, - 50, - 19, - 33, - 17, - 95, - 255, - 255, - 255, - 255, - 102, - 101, - 103, - 87, - 87, - 153, - 149, - 49, - 20, - 49, - 17, - 143, - 255, - 255, - 255, - 255, - 134, - 101, - 103, - 86, - 87, - 153, - 133, - 33, - 20, - 49, - 17, - 207, - 255, - 255, - 255, - 255, - 250, - 102, - 102, - 102, - 87, - 153, - 133, - 33, - 19, - 17, - 43, - 255, - 255, - 255, - 255, - 255, - 255, - 198, - 102, - 102, - 87, - 137, - 133, - 33, - 17, - 18, - 207, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 134, - 102, - 87, - 136, - 117, - 49, - 17, - 61, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 102, - 87, - 136, - 117, - 66, - 20, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 87, - 136, - 101, - 83, - 127, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 152, - 136, - 101, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 251, - 136, - 101, - 191, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 108, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 223, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, -] -`; - -exports[`pixels browser transparent-white-grayscale-16bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 227, - 227, - 201, - 201, - 241, - 241, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 232, - 232, - 181, - 181, - 126, - 126, - 101, - 101, - 90, - 185, - 70, - 47, - 96, - 248, - 161, - 17, - 226, - 16, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 238, - 238, - 191, - 191, - 137, - 137, - 103, - 103, - 97, - 144, - 76, - 186, - 54, - 20, - 42, - 80, - 39, - 233, - 35, - 181, - 39, - 156, - 46, - 234, - 80, - 73, - 145, - 75, - 212, - 183, - 252, - 252, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 242, - 242, - 196, - 196, - 149, - 149, - 114, - 114, - 108, - 158, - 83, - 146, - 61, - 160, - 45, - 106, - 47, - 183, - 43, - 131, - 38, - 105, - 42, - 167, - 60, - 199, - 34, - 194, - 24, - 1, - 26, - 181, - 39, - 233, - 48, - 8, - 108, - 102, - 160, - 160, - 207, - 207, - 248, - 248, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 247, - 247, - 202, - 202, - 154, - 154, - 118, - 118, - 115, - 115, - 102, - 170, - 72, - 227, - 49, - 9, - 47, - 106, - 50, - 182, - 52, - 208, - 60, - 80, - 62, - 29, - 55, - 132, - 49, - 81, - 59, - 155, - 69, - 120, - 51, - 123, - 38, - 182, - 45, - 3, - 42, - 233, - 90, - 135, - 110, - 110, - 115, - 115, - 118, - 118, - 155, - 155, - 196, - 196, - 238, - 238, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 204, - 204, - 127, - 127, - 118, - 118, - 117, - 117, - 117, - 117, - 78, - 23, - 55, - 55, - 54, - 3, - 54, - 157, - 60, - 92, - 85, - 60, - 100, - 30, - 80, - 38, - 65, - 159, - 67, - 209, - 71, - 183, - 69, - 81, - 65, - 106, - 62, - 30, - 55, - 208, - 38, - 54, - 108, - 158, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 106, - 106, - 154, - 154, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 220, - 133, - 133, - 136, - 136, - 132, - 132, - 123, - 123, - 99, - 8, - 68, - 73, - 71, - 31, - 97, - 234, - 118, - 91, - 119, - 119, - 119, - 119, - 119, - 119, - 114, - 5, - 96, - 195, - 86, - 189, - 82, - 20, - 78, - 93, - 75, - 21, - 77, - 170, - 98, - 217, - 119, - 119, - 119, - 119, - 119, - 119, - 112, - 112, - 92, - 92, - 82, - 82, - 189, - 189, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 132, - 132, - 129, - 129, - 135, - 73, - 142, - 142, - 137, - 137, - 127, - 127, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 118, - 118, - 99, - 99, - 84, - 84, - 80, - 80, - 76, - 76, - 230, - 230, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 248, - 248, - 130, - 113, - 104, - 71, - 98, - 212, - 120, - 60, - 144, - 216, - 147, - 147, - 143, - 143, - 131, - 131, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 122, - 122, - 122, - 122, - 121, - 121, - 106, - 106, - 87, - 87, - 80, - 80, - 76, - 76, - 73, - 73, - 89, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 138, - 138, - 105, - 212, - 116, - 154, - 142, - 131, - 144, - 29, - 146, - 146, - 149, - 149, - 151, - 151, - 148, - 148, - 135, - 135, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 113, - 113, - 91, - 11, - 50, - 217, - 20, - 116, - 24, - 118, - 45, - 172, - 70, - 188, - 130, - 130, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 146, - 146, - 105, - 174, - 111, - 77, - 143, - 177, - 143, - 109, - 145, - 145, - 148, - 148, - 151, - 151, - 153, - 153, - 155, - 155, - 153, - 153, - 139, - 139, - 127, - 127, - 126, - 126, - 126, - 126, - 125, - 125, - 119, - 119, - 98, - 98, - 84, - 210, - 37, - 215, - 23, - 115, - 16, - 200, - 12, - 18, - 11, - 215, - 47, - 27, - 172, - 172, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 148, - 148, - 103, - 241, - 106, - 0, - 133, - 23, - 143, - 177, - 144, - 95, - 147, - 147, - 147, - 113, - 122, - 25, - 127, - 101, - 151, - 250, - 158, - 158, - 156, - 156, - 142, - 142, - 126, - 126, - 106, - 106, - 90, - 90, - 87, - 175, - 44, - 230, - 27, - 151, - 18, - 100, - 12, - 208, - 7, - 231, - 11, - 39, - 36, - 3, - 214, - 214, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 164, - 164, - 103, - 53, - 100, - 29, - 117, - 199, - 143, - 177, - 143, - 113, - 146, - 146, - 132, - 0, - 110, - 182, - 99, - 134, - 110, - 50, - 157, - 157, - 159, - 159, - 160, - 160, - 122, - 122, - 90, - 90, - 89, - 89, - 62, - 17, - 29, - 80, - 22, - 194, - 13, - 33, - 26, - 93, - 13, - 21, - 20, - 112, - 61, - 253, - 251, - 251, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 182, - 182, - 102, - 15, - 95, - 103, - 101, - 225, - 138, - 100, - 142, - 121, - 144, - 154, - 126, - 39, - 118, - 94, - 90, - 26, - 110, - 252, - 156, - 156, - 158, - 158, - 159, - 159, - 116, - 116, - 89, - 89, - 82, - 245, - 32, - 155, - 27, - 151, - 15, - 138, - 57, - 212, - 72, - 72, - 26, - 28, - 47, - 255, - 114, - 114, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 199, - 100, - 126, - 104, - 60, - 83, - 9, - 123, - 171, - 143, - 26, - 122, - 210, - 117, - 136, - 117, - 49, - 89, - 131, - 112, - 121, - 155, - 155, - 157, - 157, - 158, - 158, - 110, - 110, - 89, - 89, - 58, - 28, - 29, - 80, - 19, - 21, - 43, - 31, - 68, - 164, - 34, - 10, - 18, - 71, - 17, - 54, - 157, - 47, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 216, - 99, - 88, - 104, - 60, - 72, - 111, - 108, - 91, - 141, - 236, - 91, - 103, - 116, - 90, - 116, - 154, - 88, - 236, - 111, - 226, - 154, - 154, - 155, - 155, - 157, - 157, - 103, - 103, - 87, - 146, - 35, - 92, - 27, - 151, - 15, - 219, - 55, - 175, - 22, - 198, - 18, - 41, - 14, - 65, - 22, - 63, - 199, - 199, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 97, - 199, - 101, - 225, - 78, - 83, - 93, - 63, - 129, - 142, - 98, - 88, - 104, - 9, - 114, - 214, - 88, - 85, - 112, - 32, - 152, - 152, - 154, - 154, - 156, - 156, - 97, - 97, - 73, - 69, - 29, - 80, - 21, - 68, - 33, - 206, - 27, - 243, - 14, - 35, - 12, - 77, - 12, - 77, - 34, - 199, - 244, - 244, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 96, - 205, - 99, - 134, - 87, - 191, - 88, - 193, - 113, - 168, - 116, - 3, - 86, - 251, - 113, - 168, - 84, - 205, - 116, - 132, - 151, - 151, - 153, - 153, - 154, - 154, - 90, - 90, - 57, - 20, - 28, - 71, - 15, - 104, - 51, - 82, - 27, - 190, - 13, - 40, - 13, - 56, - 17, - 210, - 81, - 83, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 110, - 226, - 96, - 148, - 96, - 148, - 85, - 53, - 105, - 120, - 124, - 216, - 81, - 219, - 112, - 122, - 83, - 159, - 115, - 131, - 149, - 149, - 151, - 151, - 150, - 150, - 87, - 87, - 43, - 235, - 25, - 133, - 11, - 245, - 64, - 160, - 43, - 43, - 23, - 50, - 20, - 147, - 12, - 77, - 135, - 231, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 140, - 140, - 95, - 31, - 103, - 165, - 81, - 166, - 104, - 226, - 118, - 245, - 88, - 236, - 110, - 182, - 82, - 114, - 113, - 235, - 147, - 147, - 149, - 149, - 143, - 143, - 86, - 86, - 34, - 95, - 21, - 68, - 14, - 100, - 71, - 71, - 53, - 71, - 18, - 159, - 18, - 12, - 18, - 30, - 197, - 197, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 250, - 163, - 104, - 99, - 231, - 99, - 37, - 103, - 130, - 105, - 140, - 102, - 120, - 108, - 242, - 81, - 219, - 117, - 123, - 145, - 145, - 147, - 147, - 137, - 137, - 85, - 85, - 28, - 51, - 18, - 12, - 17, - 154, - 56, - 205, - 21, - 95, - 20, - 89, - 31, - 247, - 182, - 102, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 208, - 208, - 109, - 109, - 101, - 101, - 102, - 227, - 104, - 211, - 107, - 46, - 80, - 174, - 117, - 34, - 143, - 143, - 145, - 145, - 129, - 129, - 85, - 85, - 33, - 39, - 15, - 45, - 12, - 128, - 16, - 16, - 16, - 171, - 37, - 137, - 207, - 9, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 236, - 236, - 134, - 134, - 102, - 122, - 103, - 14, - 105, - 105, - 80, - 23, - 115, - 32, - 141, - 141, - 143, - 143, - 122, - 122, - 84, - 84, - 47, - 129, - 14, - 20, - 11, - 127, - 11, - 97, - 49, - 200, - 224, - 144, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 170, - 170, - 103, - 53, - 103, - 165, - 78, - 233, - 115, - 155, - 139, - 139, - 141, - 141, - 116, - 116, - 83, - 83, - 61, - 61, - 27, - 35, - 19, - 66, - 76, - 56, - 238, - 40, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 212, - 195, - 114, - 133, - 88, - 193, - 127, - 216, - 136, - 136, - 139, - 139, - 109, - 109, - 82, - 82, - 79, - 79, - 55, - 55, - 119, - 119, - 250, - 250, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 239, - 239, - 160, - 160, - 131, - 131, - 134, - 134, - 136, - 136, - 103, - 103, - 81, - 81, - 80, - 80, - 160, - 160, - 253, - 253, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 192, - 192, - 133, - 133, - 134, - 134, - 97, - 97, - 82, - 82, - 183, - 183, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 222, - 222, - 144, - 144, - 101, - 101, - 204, - 204, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 245, - 245, - 227, - 227, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, -] -`; - -exports[`pixels browser transparent-white-palette-8bit.png 1`] = ` -Uint8Array [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 224, - 234, - 102, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 222, - 2, - 163, - 54, - 228, - 57, - 3, - 244, - 240, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 105, - 239, - 26, - 53, - 134, - 128, - 6, - 46, - 176, - 23, - 176, - 171, - 122, - 244, - 89, - 80, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 102, - 124, - 14, - 169, - 204, - 128, - 57, - 121, - 147, - 121, - 23, - 160, - 58, - 135, - 135, - 135, - 176, - 226, - 174, - 138, - 231, - 92, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 92, - 234, - 142, - 167, - 44, - 134, - 57, - 226, - 147, - 32, - 143, - 125, - 125, - 25, - 32, - 6, - 57, - 160, - 23, - 171, - 46, - 228, - 172, - 44, - 167, - 9, - 124, - 105, - 0, - 0, - 0, - 0, - 120, - 35, - 167, - 43, - 43, - 218, - 25, - 143, - 213, - 77, - 218, - 217, - 5, - 33, - 33, - 145, - 145, - 33, - 125, - 25, - 23, - 204, - 43, - 43, - 43, - 43, - 175, - 142, - 0, - 0, - 0, - 0, - 232, - 31, - 155, - 159, - 39, - 1, - 77, - 5, - 217, - 28, - 42, - 42, - 42, - 127, - 3, - 126, - 205, - 205, - 126, - 122, - 1, - 42, - 42, - 42, - 170, - 183, - 194, - 239, - 0, - 0, - 0, - 0, - 108, - 159, - 34, - 157, - 152, - 26, - 35, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 167, - 180, - 69, - 195, - 200, - 222, - 0, - 0, - 0, - 0, - 92, - 162, - 73, - 214, - 61, - 20, - 15, - 19, - 159, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 165, - 165, - 40, - 175, - 68, - 195, - 200, - 206, - 67, - 0, - 0, - 0, - 0, - 0, - 0, - 154, - 98, - 202, - 65, - 166, - 150, - 14, - 13, - 148, - 29, - 164, - 164, - 164, - 164, - 164, - 164, - 164, - 164, - 169, - 183, - 50, - 82, - 90, - 16, - 132, - 161, - 0, - 0, - 0, - 0, - 0, - 0, - 150, - 91, - 88, - 181, - 56, - 17, - 148, - 13, - 11, - 9, - 11, - 24, - 35, - 163, - 163, - 37, - 42, - 180, - 210, - 76, - 38, - 153, - 87, - 87, - 16, - 136, - 0, - 0, - 0, - 0, - 0, - 0, - 148, - 97, - 98, - 185, - 181, - 156, - 15, - 20, - 177, - 45, - 12, - 139, - 140, - 152, - 163, - 175, - 184, - 237, - 27, - 189, - 130, - 186, - 116, - 48, - 8, - 119, - 0, - 0, - 0, - 0, - 0, - 0, - 136, - 197, - 101, - 199, - 181, - 166, - 150, - 45, - 207, - 103, - 190, - 7, - 4, - 138, - 165, - 184, - 67, - 21, - 243, - 38, - 186, - 115, - 149, - 131, - 41, - 80, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 190, - 216, - 212, - 185, - 66, - 20, - 177, - 199, - 219, - 182, - 140, - 139, - 4, - 168, - 67, - 230, - 209, - 189, - 129, - 75, - 206, - 235, - 16, - 169, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 123, - 71, - 99, - 110, - 196, - 65, - 178, - 61, - 78, - 219, - 63, - 9, - 7, - 139, - 172, - 67, - 21, - 243, - 64, - 236, - 133, - 90, - 130, - 153, - 95, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 89, - 187, - 99, - 225, - 93, - 66, - 100, - 61, - 202, - 107, - 63, - 142, - 9, - 7, - 53, - 237, - 118, - 189, - 129, - 192, - 82, - 36, - 233, - 242, - 123, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 108, - 187, - 212, - 113, - 97, - 193, - 104, - 73, - 81, - 220, - 63, - 144, - 142, - 140, - 60, - 238, - 243, - 141, - 8, - 235, - 233, - 109, - 109, - 8, - 96, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 80, - 191, - 103, - 220, - 84, - 83, - 79, - 221, - 83, - 221, - 178, - 13, - 11, - 142, - 184, - 21, - 209, - 10, - 241, - 115, - 47, - 227, - 18, - 230, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 173, - 214, - 214, - 191, - 97, - 193, - 111, - 86, - 110, - 178, - 14, - 13, - 146, - 68, - 117, - 189, - 87, - 133, - 114, - 198, - 30, - 109, - 52, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 216, - 211, - 208, - 62, - 199, - 107, - 207, - 223, - 59, - 15, - 14, - 19, - 188, - 76, - 141, - 47, - 132, - 192, - 64, - 203, - 131, - 123, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 85, - 12, - 71, - 179, - 54, - 91, - 212, - 93, - 111, - 51, - 17, - 15, - 26, - 69, - 117, - 203, - 242, - 192, - 82, - 30, - 8, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 231, - 172, - 54, - 190, - 98, - 94, - 112, - 49, - 19, - 17, - 34, - 69, - 90, - 10, - 47, - 10, - 153, - 198, - 231, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 106, - 158, - 55, - 211, - 98, - 112, - 51, - 22, - 19, - 165, - 69, - 241, - 129, - 229, - 48, - 50, - 232, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 80, - 136, - 197, - 211, - 113, - 49, - 24, - 22, - 168, - 70, - 75, - 115, - 116, - 238, - 137, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 119, - 182, - 84, - 162, - 155, - 24, - 172, - 194, - 74, - 114, - 42, - 85, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 215, - 138, - 159, - 158, - 155, - 53, - 72, - 195, - 138, - 201, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 239, - 31, - 158, - 60, - 194, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 232, - 151, - 54, - 120, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 224, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -] -`; - -exports[`pixels browser transparent-white-rgb-16bit.png 1`] = ` -Uint8Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 227, - 227, - 227, - 227, - 227, - 227, - 201, - 201, - 201, - 201, - 201, - 201, - 241, - 241, - 241, - 241, - 241, - 241, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 232, - 232, - 232, - 232, - 232, - 232, - 181, - 181, - 181, - 181, - 181, - 181, - 126, - 126, - 126, - 126, - 126, - 126, - 101, - 101, - 101, - 101, - 101, - 101, - 110, - 110, - 82, - 82, - 82, - 82, - 126, - 126, - 46, - 46, - 46, - 46, - 166, - 166, - 67, - 67, - 67, - 67, - 199, - 199, - 144, - 144, - 144, - 144, - 235, - 235, - 221, - 221, - 221, - 221, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 238, - 238, - 238, - 238, - 238, - 238, - 191, - 191, - 191, - 191, - 191, - 191, - 137, - 137, - 137, - 137, - 137, - 137, - 103, - 103, - 103, - 103, - 103, - 103, - 107, - 107, - 93, - 93, - 93, - 93, - 122, - 122, - 57, - 57, - 57, - 57, - 138, - 138, - 18, - 18, - 18, - 18, - 141, - 141, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 0, - 0, - 119, - 119, - 0, - 0, - 0, - 0, - 132, - 132, - 0, - 0, - 0, - 0, - 154, - 154, - 1, - 1, - 1, - 1, - 162, - 162, - 45, - 45, - 45, - 45, - 191, - 191, - 125, - 125, - 125, - 125, - 221, - 221, - 208, - 208, - 208, - 208, - 252, - 252, - 252, - 252, - 252, - 252, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 242, - 242, - 242, - 242, - 242, - 242, - 196, - 196, - 196, - 196, - 196, - 196, - 149, - 149, - 149, - 149, - 149, - 149, - 114, - 114, - 114, - 114, - 114, - 114, - 111, - 111, - 107, - 107, - 107, - 107, - 119, - 119, - 68, - 68, - 68, - 68, - 135, - 135, - 30, - 30, - 30, - 30, - 149, - 149, - 1, - 1, - 1, - 1, - 159, - 159, - 0, - 1, - 0, - 0, - 145, - 145, - 0, - 0, - 0, - 0, - 128, - 128, - 0, - 1, - 0, - 0, - 114, - 114, - 12, - 12, - 12, - 12, - 97, - 97, - 45, - 45, - 45, - 45, - 83, - 83, - 14, - 14, - 14, - 14, - 80, - 80, - 0, - 0, - 0, - 0, - 89, - 89, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 0, - 0, - 146, - 146, - 6, - 6, - 6, - 6, - 122, - 122, - 102, - 102, - 102, - 102, - 160, - 160, - 160, - 160, - 160, - 160, - 207, - 207, - 207, - 207, - 207, - 207, - 248, - 248, - 248, - 248, - 248, - 248, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 247, - 247, - 247, - 247, - 247, - 247, - 202, - 202, - 202, - 202, - 202, - 202, - 154, - 154, - 154, - 154, - 154, - 154, - 118, - 118, - 118, - 118, - 118, - 118, - 115, - 115, - 115, - 115, - 115, - 115, - 124, - 124, - 93, - 93, - 93, - 93, - 135, - 135, - 46, - 46, - 46, - 46, - 147, - 147, - 7, - 7, - 7, - 7, - 158, - 158, - 0, - 1, - 0, - 0, - 169, - 169, - 0, - 0, - 0, - 0, - 176, - 176, - 0, - 0, - 0, - 0, - 201, - 201, - 0, - 0, - 0, - 0, - 207, - 207, - 0, - 0, - 0, - 0, - 185, - 185, - 0, - 1, - 0, - 0, - 162, - 162, - 1, - 1, - 1, - 1, - 140, - 140, - 25, - 25, - 25, - 25, - 133, - 133, - 42, - 42, - 42, - 42, - 127, - 127, - 19, - 19, - 19, - 19, - 129, - 129, - 0, - 1, - 0, - 0, - 150, - 150, - 0, - 0, - 0, - 0, - 143, - 143, - 0, - 0, - 0, - 0, - 107, - 107, - 83, - 83, - 83, - 83, - 110, - 110, - 110, - 110, - 110, - 110, - 115, - 115, - 115, - 115, - 115, - 115, - 118, - 118, - 118, - 118, - 118, - 118, - 155, - 155, - 155, - 155, - 155, - 155, - 196, - 196, - 196, - 196, - 196, - 196, - 238, - 238, - 238, - 238, - 238, - 238, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 204, - 204, - 204, - 204, - 204, - 204, - 127, - 127, - 127, - 127, - 127, - 127, - 118, - 118, - 118, - 118, - 118, - 118, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 150, - 150, - 47, - 47, - 47, - 47, - 184, - 184, - 0, - 1, - 0, - 0, - 180, - 180, - 0, - 0, - 0, - 0, - 182, - 182, - 0, - 1, - 0, - 0, - 173, - 173, - 12, - 12, - 12, - 12, - 148, - 148, - 58, - 58, - 58, - 58, - 146, - 146, - 80, - 80, - 80, - 80, - 185, - 185, - 35, - 35, - 35, - 35, - 214, - 214, - 2, - 2, - 2, - 2, - 226, - 226, - 0, - 1, - 0, - 0, - 239, - 239, - 0, - 0, - 0, - 0, - 231, - 231, - 0, - 0, - 0, - 0, - 218, - 218, - 0, - 0, - 0, - 0, - 207, - 207, - 0, - 1, - 0, - 0, - 186, - 186, - 0, - 0, - 0, - 0, - 125, - 125, - 1, - 1, - 1, - 1, - 111, - 111, - 107, - 107, - 107, - 107, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 106, - 106, - 106, - 106, - 106, - 106, - 154, - 154, - 154, - 154, - 154, - 154, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 220, - 220, - 220, - 220, - 220, - 133, - 133, - 133, - 133, - 133, - 133, - 136, - 136, - 136, - 136, - 136, - 136, - 132, - 132, - 132, - 132, - 132, - 132, - 123, - 123, - 123, - 123, - 123, - 123, - 133, - 133, - 84, - 84, - 84, - 84, - 183, - 183, - 19, - 19, - 19, - 19, - 169, - 169, - 29, - 29, - 29, - 29, - 141, - 141, - 79, - 79, - 79, - 79, - 120, - 120, - 117, - 117, - 117, - 117, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 129, - 129, - 107, - 107, - 107, - 107, - 170, - 170, - 65, - 65, - 65, - 65, - 214, - 214, - 32, - 32, - 32, - 32, - 236, - 236, - 16, - 16, - 16, - 16, - 233, - 233, - 12, - 12, - 12, - 12, - 208, - 208, - 18, - 18, - 18, - 18, - 165, - 165, - 40, - 40, - 40, - 40, - 123, - 123, - 88, - 88, - 88, - 88, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 112, - 112, - 112, - 112, - 112, - 112, - 92, - 92, - 92, - 92, - 92, - 92, - 82, - 82, - 82, - 82, - 82, - 82, - 189, - 189, - 189, - 189, - 189, - 189, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 234, - 234, - 234, - 234, - 132, - 132, - 132, - 132, - 132, - 132, - 129, - 129, - 129, - 129, - 129, - 129, - 133, - 133, - 136, - 136, - 133, - 133, - 142, - 142, - 142, - 142, - 142, - 142, - 137, - 137, - 137, - 137, - 137, - 137, - 127, - 127, - 127, - 127, - 127, - 127, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 118, - 118, - 118, - 118, - 118, - 118, - 99, - 99, - 99, - 99, - 99, - 99, - 84, - 84, - 84, - 84, - 84, - 84, - 80, - 80, - 80, - 80, - 80, - 80, - 76, - 76, - 76, - 76, - 76, - 76, - 230, - 230, - 230, - 230, - 230, - 230, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 248, - 248, - 248, - 248, - 248, - 248, - 127, - 127, - 132, - 132, - 127, - 127, - 37, - 37, - 151, - 151, - 37, - 37, - 4, - 4, - 165, - 165, - 4, - 4, - 57, - 57, - 164, - 164, - 57, - 57, - 139, - 139, - 148, - 148, - 139, - 139, - 147, - 147, - 147, - 147, - 147, - 147, - 143, - 143, - 143, - 143, - 143, - 143, - 131, - 131, - 131, - 131, - 131, - 131, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 121, - 121, - 121, - 121, - 121, - 121, - 106, - 106, - 106, - 106, - 106, - 106, - 87, - 87, - 87, - 87, - 87, - 87, - 80, - 80, - 80, - 80, - 80, - 80, - 76, - 76, - 76, - 76, - 76, - 76, - 73, - 73, - 73, - 73, - 73, - 73, - 89, - 89, - 89, - 89, - 89, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 138, - 138, - 138, - 138, - 138, - 138, - 1, - 1, - 179, - 179, - 1, - 1, - 0, - 0, - 198, - 198, - 0, - 1, - 0, - 0, - 242, - 242, - 0, - 0, - 89, - 89, - 182, - 182, - 89, - 89, - 146, - 146, - 146, - 146, - 146, - 146, - 149, - 149, - 149, - 149, - 149, - 149, - 151, - 151, - 151, - 151, - 151, - 151, - 148, - 148, - 148, - 148, - 148, - 148, - 135, - 135, - 135, - 135, - 135, - 135, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 113, - 113, - 113, - 113, - 113, - 113, - 90, - 90, - 90, - 90, - 96, - 96, - 40, - 40, - 40, - 40, - 133, - 133, - 4, - 4, - 4, - 4, - 147, - 147, - 12, - 12, - 12, - 12, - 120, - 120, - 40, - 40, - 40, - 40, - 88, - 88, - 70, - 70, - 70, - 70, - 74, - 74, - 130, - 130, - 130, - 130, - 130, - 130, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 146, - 146, - 146, - 146, - 146, - 146, - 12, - 12, - 171, - 171, - 12, - 12, - 0, - 0, - 189, - 189, - 0, - 1, - 0, - 0, - 244, - 244, - 0, - 0, - 32, - 32, - 221, - 221, - 32, - 32, - 145, - 145, - 145, - 145, - 145, - 145, - 148, - 148, - 148, - 148, - 148, - 148, - 151, - 151, - 151, - 151, - 151, - 151, - 153, - 153, - 153, - 153, - 153, - 153, - 155, - 155, - 155, - 155, - 155, - 155, - 153, - 153, - 153, - 153, - 153, - 153, - 139, - 139, - 139, - 139, - 139, - 139, - 127, - 127, - 127, - 127, - 127, - 127, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 125, - 125, - 125, - 125, - 125, - 125, - 119, - 119, - 119, - 119, - 119, - 119, - 98, - 98, - 98, - 98, - 98, - 98, - 83, - 83, - 83, - 83, - 96, - 96, - 18, - 18, - 18, - 18, - 190, - 190, - 0, - 1, - 0, - 0, - 204, - 204, - 0, - 0, - 0, - 0, - 146, - 146, - 0, - 0, - 0, - 1, - 105, - 105, - 0, - 0, - 0, - 0, - 103, - 103, - 42, - 42, - 42, - 42, - 85, - 85, - 172, - 172, - 172, - 172, - 172, - 172, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 148, - 148, - 148, - 148, - 148, - 148, - 22, - 22, - 161, - 161, - 22, - 22, - 0, - 0, - 180, - 180, - 0, - 1, - 0, - 0, - 226, - 226, - 0, - 0, - 0, - 0, - 244, - 244, - 0, - 0, - 118, - 118, - 162, - 162, - 118, - 118, - 147, - 147, - 147, - 147, - 147, - 147, - 141, - 141, - 151, - 151, - 141, - 141, - 70, - 70, - 158, - 158, - 70, - 70, - 70, - 70, - 167, - 167, - 70, - 70, - 142, - 142, - 158, - 158, - 142, - 142, - 158, - 158, - 158, - 158, - 158, - 158, - 156, - 156, - 156, - 156, - 156, - 156, - 142, - 142, - 142, - 142, - 142, - 142, - 126, - 126, - 126, - 126, - 126, - 126, - 106, - 106, - 106, - 106, - 106, - 106, - 90, - 90, - 90, - 90, - 90, - 90, - 87, - 87, - 87, - 87, - 90, - 90, - 24, - 24, - 24, - 24, - 205, - 205, - 0, - 1, - 0, - 0, - 240, - 240, - 0, - 0, - 0, - 0, - 160, - 160, - 2, - 2, - 2, - 2, - 96, - 96, - 1, - 1, - 1, - 1, - 61, - 61, - 0, - 1, - 0, - 0, - 97, - 97, - 29, - 29, - 29, - 29, - 89, - 89, - 214, - 214, - 214, - 214, - 214, - 214, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 164, - 164, - 164, - 164, - 164, - 164, - 33, - 33, - 152, - 152, - 33, - 33, - 0, - 0, - 170, - 170, - 0, - 1, - 0, - 0, - 200, - 200, - 0, - 0, - 0, - 0, - 244, - 244, - 0, - 0, - 59, - 59, - 202, - 202, - 59, - 59, - 146, - 146, - 146, - 146, - 146, - 146, - 74, - 74, - 172, - 172, - 74, - 74, - 0, - 1, - 188, - 188, - 0, - 0, - 0, - 0, - 169, - 169, - 0, - 0, - 47, - 47, - 154, - 154, - 47, - 47, - 157, - 157, - 157, - 157, - 157, - 157, - 159, - 159, - 159, - 159, - 159, - 159, - 160, - 160, - 160, - 160, - 160, - 160, - 122, - 122, - 122, - 122, - 122, - 122, - 90, - 90, - 90, - 90, - 90, - 90, - 89, - 89, - 89, - 89, - 89, - 89, - 49, - 49, - 49, - 49, - 161, - 161, - 0, - 1, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 198, - 3, - 3, - 3, - 3, - 91, - 91, - 25, - 25, - 25, - 25, - 36, - 36, - 12, - 12, - 12, - 12, - 21, - 21, - 12, - 12, - 12, - 12, - 85, - 85, - 59, - 59, - 59, - 59, - 83, - 83, - 251, - 251, - 251, - 251, - 251, - 251, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 182, - 182, - 182, - 182, - 182, - 182, - 43, - 43, - 143, - 143, - 43, - 43, - 0, - 0, - 162, - 162, - 0, - 1, - 0, - 0, - 173, - 173, - 0, - 0, - 0, - 0, - 235, - 235, - 0, - 0, - 7, - 7, - 237, - 237, - 7, - 7, - 137, - 137, - 149, - 149, - 137, - 137, - 67, - 67, - 167, - 167, - 67, - 67, - 0, - 1, - 201, - 201, - 0, - 0, - 0, - 0, - 153, - 153, - 0, - 0, - 56, - 56, - 149, - 149, - 56, - 56, - 156, - 156, - 156, - 156, - 156, - 156, - 158, - 158, - 158, - 158, - 158, - 158, - 159, - 159, - 159, - 159, - 159, - 159, - 116, - 116, - 116, - 116, - 116, - 116, - 89, - 89, - 89, - 89, - 89, - 89, - 80, - 80, - 80, - 80, - 103, - 103, - 5, - 5, - 5, - 5, - 245, - 245, - 0, - 1, - 0, - 0, - 240, - 240, - 3, - 3, - 3, - 3, - 112, - 112, - 56, - 56, - 56, - 56, - 70, - 70, - 72, - 72, - 72, - 72, - 72, - 72, - 22, - 22, - 22, - 22, - 57, - 57, - 43, - 43, - 43, - 43, - 85, - 85, - 114, - 114, - 114, - 114, - 114, - 114, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 199, - 199, - 199, - 199, - 199, - 52, - 52, - 134, - 134, - 52, - 52, - 0, - 0, - 177, - 177, - 0, - 1, - 0, - 0, - 141, - 141, - 0, - 0, - 0, - 0, - 210, - 210, - 0, - 0, - 0, - 0, - 243, - 243, - 0, - 0, - 76, - 76, - 155, - 155, - 76, - 76, - 59, - 59, - 158, - 158, - 59, - 59, - 0, - 1, - 199, - 199, - 0, - 0, - 0, - 0, - 152, - 152, - 0, - 0, - 61, - 61, - 148, - 148, - 61, - 61, - 155, - 155, - 155, - 155, - 155, - 155, - 157, - 157, - 157, - 157, - 157, - 157, - 158, - 158, - 158, - 158, - 158, - 158, - 110, - 110, - 110, - 110, - 110, - 110, - 89, - 89, - 89, - 89, - 89, - 89, - 43, - 43, - 43, - 43, - 173, - 173, - 0, - 0, - 0, - 1, - 255, - 255, - 0, - 0, - 0, - 0, - 166, - 166, - 37, - 37, - 37, - 37, - 89, - 89, - 67, - 67, - 67, - 67, - 79, - 79, - 22, - 22, - 22, - 22, - 126, - 126, - 0, - 0, - 0, - 1, - 159, - 159, - 1, - 1, - 1, - 1, - 142, - 142, - 156, - 156, - 156, - 156, - 161, - 161, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 216, - 216, - 216, - 216, - 216, - 62, - 62, - 125, - 125, - 62, - 62, - 0, - 0, - 177, - 177, - 0, - 1, - 0, - 0, - 123, - 123, - 0, - 0, - 0, - 0, - 184, - 184, - 0, - 0, - 0, - 0, - 241, - 241, - 0, - 0, - 23, - 23, - 139, - 139, - 23, - 23, - 59, - 59, - 156, - 156, - 59, - 59, - 0, - 1, - 198, - 198, - 0, - 0, - 0, - 0, - 151, - 151, - 0, - 0, - 61, - 61, - 147, - 147, - 61, - 61, - 154, - 154, - 154, - 154, - 154, - 154, - 155, - 155, - 155, - 155, - 155, - 155, - 157, - 157, - 157, - 157, - 157, - 157, - 103, - 103, - 103, - 103, - 103, - 103, - 87, - 87, - 87, - 87, - 89, - 89, - 9, - 9, - 9, - 9, - 238, - 238, - 0, - 0, - 0, - 1, - 240, - 240, - 4, - 4, - 4, - 4, - 107, - 107, - 51, - 51, - 51, - 51, - 90, - 90, - 7, - 7, - 7, - 7, - 144, - 144, - 0, - 0, - 0, - 0, - 158, - 158, - 0, - 0, - 0, - 1, - 124, - 124, - 13, - 13, - 13, - 13, - 93, - 93, - 199, - 199, - 199, - 199, - 199, - 199, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 234, - 234, - 234, - 234, - 71, - 71, - 116, - 116, - 71, - 71, - 0, - 0, - 173, - 173, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 9, - 9, - 152, - 152, - 9, - 9, - 0, - 0, - 220, - 220, - 0, - 0, - 0, - 0, - 167, - 167, - 0, - 0, - 35, - 35, - 152, - 152, - 35, - 35, - 0, - 1, - 195, - 195, - 0, - 0, - 0, - 0, - 150, - 150, - 0, - 0, - 63, - 63, - 146, - 146, - 63, - 63, - 152, - 152, - 152, - 152, - 152, - 152, - 154, - 154, - 154, - 154, - 154, - 154, - 156, - 156, - 156, - 156, - 156, - 156, - 97, - 97, - 97, - 97, - 97, - 97, - 66, - 66, - 66, - 66, - 127, - 127, - 0, - 1, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 1, - 185, - 185, - 26, - 26, - 26, - 26, - 93, - 93, - 22, - 22, - 22, - 22, - 73, - 73, - 0, - 0, - 0, - 0, - 123, - 123, - 0, - 0, - 0, - 0, - 107, - 107, - 0, - 0, - 0, - 1, - 107, - 107, - 28, - 28, - 28, - 28, - 86, - 86, - 244, - 244, - 244, - 244, - 244, - 244, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 252, - 252, - 252, - 252, - 80, - 80, - 108, - 108, - 80, - 80, - 0, - 0, - 169, - 169, - 0, - 1, - 0, - 0, - 149, - 149, - 0, - 0, - 45, - 45, - 119, - 119, - 45, - 45, - 0, - 0, - 193, - 193, - 0, - 0, - 0, - 0, - 197, - 197, - 0, - 0, - 1, - 1, - 147, - 147, - 1, - 1, - 0, - 1, - 193, - 193, - 0, - 0, - 0, - 0, - 144, - 144, - 0, - 0, - 75, - 75, - 145, - 145, - 75, - 75, - 151, - 151, - 151, - 151, - 151, - 151, - 153, - 153, - 153, - 153, - 153, - 153, - 154, - 154, - 154, - 154, - 154, - 154, - 90, - 90, - 90, - 90, - 90, - 90, - 43, - 43, - 43, - 43, - 164, - 164, - 0, - 1, - 0, - 0, - 246, - 246, - 0, - 0, - 0, - 1, - 134, - 134, - 47, - 47, - 47, - 47, - 83, - 83, - 25, - 25, - 25, - 25, - 48, - 48, - 2, - 2, - 2, - 2, - 99, - 99, - 0, - 0, - 0, - 0, - 115, - 115, - 0, - 0, - 0, - 1, - 155, - 155, - 77, - 77, - 77, - 77, - 112, - 112, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 104, - 104, - 115, - 115, - 104, - 104, - 0, - 0, - 164, - 164, - 0, - 1, - 0, - 0, - 164, - 164, - 0, - 0, - 62, - 62, - 101, - 101, - 62, - 62, - 20, - 20, - 165, - 165, - 20, - 20, - 0, - 0, - 212, - 212, - 0, - 0, - 0, - 0, - 139, - 139, - 0, - 1, - 0, - 0, - 191, - 191, - 0, - 0, - 0, - 0, - 142, - 142, - 0, - 0, - 74, - 74, - 144, - 144, - 74, - 74, - 149, - 149, - 149, - 149, - 149, - 149, - 151, - 151, - 151, - 151, - 151, - 151, - 150, - 150, - 150, - 150, - 150, - 150, - 87, - 87, - 87, - 87, - 87, - 87, - 26, - 26, - 26, - 26, - 181, - 181, - 0, - 1, - 0, - 0, - 222, - 222, - 0, - 0, - 0, - 1, - 104, - 104, - 63, - 63, - 63, - 63, - 75, - 75, - 43, - 43, - 43, - 43, - 43, - 43, - 12, - 12, - 12, - 12, - 109, - 109, - 0, - 0, - 0, - 0, - 179, - 179, - 0, - 0, - 0, - 1, - 107, - 107, - 134, - 134, - 134, - 134, - 146, - 146, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 140, - 140, - 140, - 140, - 140, - 140, - 5, - 5, - 158, - 158, - 5, - 5, - 0, - 1, - 176, - 176, - 0, - 0, - 52, - 52, - 102, - 102, - 52, - 52, - 64, - 64, - 133, - 133, - 64, - 64, - 0, - 0, - 202, - 202, - 0, - 0, - 0, - 0, - 151, - 151, - 0, - 1, - 0, - 0, - 188, - 188, - 0, - 0, - 0, - 0, - 140, - 140, - 0, - 0, - 73, - 73, - 142, - 142, - 73, - 73, - 147, - 147, - 147, - 147, - 147, - 147, - 149, - 149, - 149, - 149, - 149, - 149, - 143, - 143, - 143, - 143, - 143, - 143, - 86, - 86, - 86, - 86, - 86, - 86, - 15, - 15, - 15, - 15, - 183, - 183, - 0, - 1, - 0, - 0, - 185, - 185, - 3, - 3, - 3, - 3, - 102, - 102, - 71, - 71, - 71, - 71, - 71, - 71, - 47, - 47, - 47, - 47, - 100, - 100, - 0, - 1, - 0, - 0, - 162, - 162, - 0, - 0, - 0, - 0, - 157, - 157, - 9, - 9, - 9, - 9, - 88, - 88, - 197, - 197, - 197, - 197, - 197, - 197, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 250, - 250, - 250, - 250, - 250, - 144, - 144, - 176, - 176, - 144, - 144, - 52, - 52, - 133, - 133, - 52, - 52, - 97, - 97, - 100, - 100, - 97, - 97, - 99, - 99, - 106, - 106, - 99, - 99, - 6, - 6, - 175, - 175, - 6, - 6, - 0, - 0, - 174, - 174, - 0, - 1, - 0, - 0, - 185, - 185, - 0, - 0, - 0, - 0, - 139, - 139, - 0, - 0, - 83, - 83, - 141, - 141, - 83, - 83, - 145, - 145, - 145, - 145, - 145, - 145, - 147, - 147, - 147, - 147, - 147, - 147, - 137, - 137, - 137, - 137, - 137, - 137, - 85, - 85, - 85, - 85, - 85, - 85, - 10, - 10, - 10, - 10, - 168, - 168, - 0, - 1, - 0, - 0, - 157, - 157, - 7, - 7, - 7, - 7, - 99, - 99, - 52, - 52, - 52, - 52, - 92, - 92, - 4, - 4, - 4, - 4, - 155, - 155, - 0, - 1, - 0, - 0, - 177, - 177, - 26, - 26, - 26, - 26, - 77, - 77, - 181, - 181, - 181, - 181, - 187, - 187, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 208, - 208, - 208, - 208, - 208, - 208, - 109, - 109, - 109, - 109, - 109, - 109, - 101, - 101, - 101, - 101, - 101, - 101, - 45, - 45, - 143, - 143, - 45, - 45, - 0, - 0, - 178, - 178, - 0, - 1, - 0, - 0, - 182, - 182, - 0, - 0, - 0, - 0, - 137, - 137, - 0, - 0, - 85, - 85, - 139, - 139, - 85, - 85, - 143, - 143, - 143, - 143, - 143, - 143, - 145, - 145, - 145, - 145, - 145, - 145, - 129, - 129, - 129, - 129, - 129, - 129, - 85, - 85, - 85, - 85, - 85, - 85, - 21, - 21, - 21, - 21, - 126, - 126, - 0, - 1, - 0, - 0, - 132, - 132, - 1, - 1, - 1, - 1, - 101, - 101, - 1, - 1, - 1, - 1, - 132, - 132, - 0, - 1, - 0, - 0, - 145, - 145, - 28, - 28, - 28, - 28, - 110, - 110, - 206, - 206, - 206, - 206, - 208, - 208, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 236, - 236, - 236, - 236, - 236, - 236, - 134, - 134, - 134, - 134, - 134, - 134, - 88, - 88, - 112, - 112, - 88, - 88, - 0, - 0, - 175, - 175, - 0, - 1, - 0, - 0, - 179, - 179, - 0, - 0, - 0, - 0, - 136, - 136, - 0, - 0, - 83, - 83, - 137, - 137, - 83, - 83, - 141, - 141, - 141, - 141, - 141, - 141, - 143, - 143, - 143, - 143, - 143, - 143, - 122, - 122, - 122, - 122, - 122, - 122, - 84, - 84, - 84, - 84, - 84, - 84, - 44, - 44, - 44, - 44, - 73, - 73, - 2, - 2, - 2, - 2, - 107, - 107, - 0, - 0, - 0, - 1, - 100, - 100, - 0, - 0, - 0, - 0, - 99, - 99, - 41, - 41, - 41, - 41, - 116, - 116, - 223, - 223, - 223, - 223, - 229, - 229, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 252, - 252, - 252, - 252, - 170, - 170, - 170, - 170, - 170, - 170, - 33, - 33, - 152, - 152, - 33, - 33, - 0, - 1, - 176, - 176, - 0, - 0, - 0, - 0, - 134, - 134, - 0, - 0, - 87, - 87, - 135, - 135, - 87, - 87, - 139, - 139, - 139, - 139, - 139, - 139, - 141, - 141, - 141, - 141, - 141, - 141, - 116, - 116, - 116, - 116, - 116, - 116, - 83, - 83, - 83, - 83, - 83, - 83, - 61, - 61, - 61, - 61, - 61, - 61, - 26, - 26, - 26, - 26, - 35, - 35, - 13, - 13, - 13, - 13, - 67, - 67, - 71, - 71, - 71, - 71, - 114, - 114, - 237, - 237, - 237, - 237, - 239, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 209, - 209, - 214, - 214, - 209, - 209, - 56, - 56, - 155, - 155, - 56, - 56, - 45, - 45, - 119, - 119, - 45, - 45, - 125, - 125, - 129, - 129, - 125, - 125, - 136, - 136, - 136, - 136, - 136, - 136, - 139, - 139, - 139, - 139, - 139, - 139, - 109, - 109, - 109, - 109, - 109, - 109, - 82, - 82, - 82, - 82, - 82, - 82, - 79, - 79, - 79, - 79, - 79, - 79, - 55, - 55, - 55, - 55, - 55, - 55, - 119, - 119, - 119, - 119, - 119, - 119, - 250, - 250, - 250, - 250, - 250, - 250, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 239, - 239, - 239, - 239, - 239, - 239, - 160, - 160, - 160, - 160, - 160, - 160, - 131, - 131, - 131, - 131, - 131, - 131, - 134, - 134, - 134, - 134, - 134, - 134, - 136, - 136, - 136, - 136, - 136, - 136, - 103, - 103, - 103, - 103, - 103, - 103, - 81, - 81, - 81, - 81, - 81, - 81, - 80, - 80, - 80, - 80, - 80, - 80, - 160, - 160, - 160, - 160, - 160, - 160, - 253, - 253, - 253, - 253, - 253, - 253, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 254, - 254, - 254, - 192, - 192, - 192, - 192, - 192, - 192, - 133, - 133, - 133, - 133, - 133, - 133, - 134, - 134, - 134, - 134, - 134, - 134, - 97, - 97, - 97, - 97, - 97, - 97, - 82, - 82, - 82, - 82, - 82, - 82, - 183, - 183, - 183, - 183, - 183, - 183, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 222, - 222, - 222, - 222, - 222, - 222, - 144, - 144, - 144, - 144, - 144, - 144, - 101, - 101, - 101, - 101, - 101, - 101, - 204, - 204, - 204, - 204, - 204, - 204, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 245, - 245, - 245, - 245, - 245, - 245, - 227, - 227, - 227, - 227, - 227, - 227, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, -] -`; - -exports[`pixels node animated.png 1`] = ` -Object { - "data": Array [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 171, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 25, - 0, - 0, - 0, - 146, - 0, - 0, - 0, - 43, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 101, - 0, - 0, - 0, - 232, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 0, - 0, - 0, - 204, - 0, - 0, - 0, - 160, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 109, - 0, - 0, - 0, - 226, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 48, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 25, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 75, - 0, - 0, - 0, - 215, - 0, - 0, - 0, - 66, - 0, - 0, - 0, - 117, - 0, - 0, - 0, - 220, - 0, - 0, - 0, - 50, - 0, - 0, - 0, - 91, - 0, - 0, - 0, - 52, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 126, - 0, - 0, - 0, - 165, - 0, - 0, - 0, - 66, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 162, - 0, - 0, - 0, - 112, - 0, - 0, - 0, - 46, - 0, - 0, - 0, - 73, - 0, - 0, - 0, - 90, - 0, - 0, - 0, - 79, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 25, - 0, - 0, - 0, - 75, - 0, - 0, - 0, - 87, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 0, - 0, - 0, - 121, - 0, - 0, - 0, - 174, - 0, - 0, - 0, - 136, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 55, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 74, - 0, - 0, - 0, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 52, - 0, - 0, - 0, - 90, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 43, - 0, - 0, - 0, - 39, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 68, - 0, - 0, - 0, - 91, - 0, - 0, - 0, - 90, - 0, - 0, - 0, - 87, - 0, - 0, - 0, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 56, - 0, - 0, - 0, - 62, - 0, - 0, - 0, - 63, - 0, - 0, - 0, - 53, - 0, - 0, - 0, - 88, - 0, - 0, - 0, - 113, - 0, - 0, - 0, - 112, - 0, - 0, - 0, - 106, - 0, - 0, - 0, - 33, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 77, - 0, - 0, - 0, - 78, - 0, - 0, - 0, - 65, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 0, - 0, - 0, - 46, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 0, - 0, - 0, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 59, - 0, - 0, - 0, - 100, - 0, - 0, - 0, - 83, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 66, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 60, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 51, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 56, - 0, - 0, - 0, - 43, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 31, - 0, - 0, - 0, - 67, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 39, - 0, - 0, - 0, - 88, - 0, - 0, - 0, - 85, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 0, - 0, - 0, - 25, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 38, - 0, - 0, - 0, - 52, - 0, - 0, - 0, - 74, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 92, - 0, - 0, - 0, - 41, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 38, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 77, - 0, - 0, - 0, - 75, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 59, - 0, - 0, - 0, - 82, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 58, - 0, - 0, - 0, - 90, - 0, - 0, - 0, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 0, - 0, - 0, - 84, - 0, - 0, - 0, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 61, - 0, - 0, - 0, - 84, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 81, - 0, - 0, - 0, - 40, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 50, - 0, - 0, - 0, - 68, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node black-white.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 254, - 255, - 255, - 255, - 252, - 255, - 255, - 255, - 248, - 255, - 255, - 255, - 240, - 243, - 243, - 255, - 224, - 243, - 243, - 255, - 192, - 243, - 243, - 255, - 128, - 243, - 51, - 255, - 0, - 243, - 51, - 254, - 0, - 243, - 51, - 252, - 0, - 248, - 7, - 248, - 0, - 248, - 7, - 240, - 0, - 252, - 207, - 224, - 0, - 252, - 207, - 192, - 0, - 255, - 255, - 128, - 0, - 255, - 255, - 0, - 0, - 255, - 254, - 0, - 0, - 255, - 252, - 0, - 0, - 255, - 248, - 15, - 224, - 255, - 240, - 15, - 224, - 255, - 224, - 12, - 48, - 255, - 192, - 12, - 48, - 255, - 128, - 15, - 224, - 255, - 0, - 15, - 224, - 254, - 0, - 12, - 48, - 252, - 0, - 12, - 48, - 248, - 0, - 15, - 224, - 240, - 0, - 15, - 224, - 224, - 0, - 0, - 0, - 192, - 0, - 0, - 0, - 128, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node grayscale-8bit.png 1`] = ` -Object { - "data": Array [ - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 0, - 1, - 2, - 3, - ], - "type": "Buffer", -} -`; - -exports[`pixels node grayscale-16bit.png 1`] = ` -Object { - "data": Array [ - 0, - 0, - 9, - 0, - 18, - 0, - 27, - 0, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 2, - 0, - 11, - 0, - 20, - 0, - 29, - 0, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 4, - 0, - 13, - 0, - 22, - 0, - 31, - 0, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 6, - 0, - 15, - 0, - 24, - 0, - 33, - 0, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 8, - 0, - 17, - 0, - 26, - 0, - 35, - 0, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 10, - 0, - 19, - 0, - 28, - 0, - 37, - 0, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 12, - 0, - 21, - 0, - 30, - 0, - 39, - 0, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 14, - 0, - 23, - 0, - 32, - 0, - 41, - 0, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 16, - 0, - 25, - 0, - 34, - 0, - 43, - 0, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 18, - 0, - 27, - 0, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 20, - 0, - 29, - 0, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 22, - 0, - 31, - 0, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 24, - 0, - 33, - 0, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 26, - 0, - 35, - 0, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 28, - 0, - 37, - 0, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 129, - 255, - 102, - 255, - 30, - 0, - 39, - 0, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 123, - 255, - 96, - 255, - 32, - 0, - 41, - 0, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 117, - 255, - 90, - 255, - 34, - 0, - 43, - 0, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 111, - 255, - 84, - 255, - 36, - 0, - 45, - 0, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 105, - 255, - 78, - 255, - 38, - 0, - 47, - 0, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 99, - 255, - 72, - 255, - 40, - 0, - 49, - 0, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 93, - 255, - 66, - 255, - 42, - 0, - 51, - 0, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 87, - 255, - 60, - 255, - 44, - 0, - 53, - 0, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 81, - 255, - 54, - 255, - 46, - 0, - 55, - 0, - 64, - 0, - 73, - 0, - 82, - 0, - 91, - 0, - 100, - 0, - 109, - 0, - 118, - 0, - 127, - 0, - 136, - 0, - 145, - 0, - 154, - 0, - 163, - 0, - 172, - 0, - 181, - 0, - 190, - 0, - 199, - 0, - 208, - 0, - 217, - 0, - 226, - 0, - 235, - 0, - 244, - 0, - 253, - 0, - 237, - 255, - 210, - 255, - 183, - 255, - 156, - 255, - 129, - 255, - 102, - 255, - 75, - 255, - 48, - 255, - 48, - 0, - 57, - 0, - 66, - 0, - 75, - 0, - 84, - 0, - 93, - 0, - 102, - 0, - 111, - 0, - 120, - 0, - 129, - 0, - 138, - 0, - 147, - 0, - 156, - 0, - 165, - 0, - 174, - 0, - 183, - 0, - 192, - 0, - 201, - 0, - 210, - 0, - 219, - 0, - 228, - 0, - 237, - 0, - 246, - 0, - 255, - 0, - 231, - 255, - 204, - 255, - 177, - 255, - 150, - 255, - 123, - 255, - 96, - 255, - 69, - 255, - 42, - 255, - 50, - 0, - 59, - 0, - 68, - 0, - 77, - 0, - 86, - 0, - 95, - 0, - 104, - 0, - 113, - 0, - 122, - 0, - 131, - 0, - 140, - 0, - 149, - 0, - 158, - 0, - 167, - 0, - 176, - 0, - 185, - 0, - 194, - 0, - 203, - 0, - 212, - 0, - 221, - 0, - 230, - 0, - 239, - 0, - 248, - 0, - 252, - 255, - 225, - 255, - 198, - 255, - 171, - 255, - 144, - 255, - 117, - 255, - 90, - 255, - 63, - 255, - 36, - 255, - 52, - 0, - 61, - 0, - 70, - 0, - 79, - 0, - 88, - 0, - 97, - 0, - 106, - 0, - 115, - 0, - 124, - 0, - 133, - 0, - 142, - 0, - 151, - 0, - 160, - 0, - 169, - 0, - 178, - 0, - 187, - 0, - 196, - 0, - 205, - 0, - 214, - 0, - 223, - 0, - 232, - 0, - 241, - 0, - 250, - 0, - 246, - 255, - 219, - 255, - 192, - 255, - 165, - 255, - 138, - 255, - 111, - 255, - 84, - 255, - 57, - 255, - 30, - 255, - 54, - 0, - 63, - 0, - 72, - 0, - 81, - 0, - 90, - 0, - 99, - 0, - 108, - 0, - 117, - 0, - 126, - 0, - 135, - 0, - 144, - 0, - 153, - 0, - 162, - 0, - 171, - 0, - 180, - 0, - 189, - 0, - 198, - 0, - 207, - 0, - 216, - 0, - 225, - 0, - 234, - 0, - 243, - 0, - 252, - 0, - 240, - 255, - 213, - 255, - 186, - 255, - 159, - 255, - 132, - 255, - 105, - 255, - 78, - 255, - 51, - 255, - 24, - 255, - 56, - 0, - 65, - 0, - 74, - 0, - 83, - 0, - 92, - 0, - 101, - 0, - 110, - 0, - 119, - 0, - 128, - 0, - 137, - 0, - 146, - 0, - 155, - 0, - 164, - 0, - 173, - 0, - 182, - 0, - 191, - 0, - 200, - 0, - 209, - 0, - 218, - 0, - 227, - 0, - 236, - 0, - 245, - 0, - 254, - 0, - 234, - 255, - 207, - 255, - 180, - 255, - 153, - 255, - 126, - 255, - 99, - 255, - 72, - 255, - 45, - 255, - 18, - 255, - 58, - 0, - 67, - 0, - 76, - 0, - 85, - 0, - 94, - 0, - 103, - 0, - 112, - 0, - 121, - 0, - 130, - 0, - 139, - 0, - 148, - 0, - 157, - 0, - 166, - 0, - 175, - 0, - 184, - 0, - 193, - 0, - 202, - 0, - 211, - 0, - 220, - 0, - 229, - 0, - 238, - 0, - 247, - 0, - 255, - 255, - 228, - 255, - 201, - 255, - 174, - 255, - 147, - 255, - 120, - 255, - 93, - 255, - 66, - 255, - 39, - 255, - 12, - 255, - 60, - 0, - 69, - 0, - 78, - 0, - 87, - 0, - 96, - 0, - 105, - 0, - 114, - 0, - 123, - 0, - 132, - 0, - 141, - 0, - 150, - 0, - 159, - 0, - 168, - 0, - 177, - 0, - 186, - 0, - 195, - 0, - 204, - 0, - 213, - 0, - 222, - 0, - 231, - 0, - 240, - 0, - 249, - 0, - 249, - 255, - 222, - 255, - 195, - 255, - 168, - 255, - 141, - 255, - 114, - 255, - 87, - 255, - 60, - 255, - 33, - 255, - 6, - 255, - 62, - 0, - 71, - 0, - 80, - 0, - 89, - 0, - 98, - 0, - 107, - 0, - 116, - 0, - 125, - 0, - 134, - 0, - 143, - 0, - 152, - 0, - 161, - 0, - 170, - 0, - 179, - 0, - 188, - 0, - 197, - 0, - 206, - 0, - 215, - 0, - 224, - 0, - 233, - 0, - 242, - 0, - 251, - 0, - 243, - 255, - 216, - 255, - 189, - 255, - 162, - 255, - 135, - 255, - 108, - 255, - 81, - 255, - 54, - 255, - 27, - 255, - 0, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node grayscale-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 255, - 0, - 255, - 8, - 255, - 16, - 255, - 24, - 255, - 32, - 255, - 41, - 255, - 49, - 255, - 57, - 255, - 65, - 255, - 74, - 255, - 82, - 255, - 90, - 255, - 98, - 255, - 106, - 255, - 115, - 255, - 123, - 255, - 131, - 255, - 139, - 255, - 148, - 255, - 156, - 255, - 164, - 255, - 172, - 255, - 180, - 255, - 189, - 255, - 197, - 255, - 205, - 255, - 213, - 255, - 222, - 255, - 230, - 255, - 238, - 255, - 246, - 255, - 255, - 246, - 0, - 246, - 8, - 246, - 16, - 246, - 24, - 246, - 32, - 246, - 41, - 246, - 49, - 246, - 57, - 246, - 65, - 246, - 74, - 246, - 82, - 246, - 90, - 246, - 98, - 246, - 106, - 246, - 115, - 246, - 123, - 246, - 131, - 246, - 139, - 246, - 148, - 246, - 156, - 246, - 164, - 246, - 172, - 246, - 180, - 246, - 189, - 246, - 197, - 246, - 205, - 246, - 213, - 246, - 222, - 246, - 230, - 246, - 238, - 246, - 246, - 246, - 255, - 238, - 0, - 238, - 8, - 238, - 16, - 238, - 24, - 238, - 32, - 238, - 41, - 238, - 49, - 238, - 57, - 238, - 65, - 238, - 74, - 238, - 82, - 238, - 90, - 238, - 98, - 238, - 106, - 238, - 115, - 238, - 123, - 238, - 131, - 238, - 139, - 238, - 148, - 238, - 156, - 238, - 164, - 238, - 172, - 238, - 180, - 238, - 189, - 238, - 197, - 238, - 205, - 238, - 213, - 238, - 222, - 238, - 230, - 238, - 238, - 238, - 246, - 238, - 255, - 230, - 0, - 230, - 8, - 230, - 16, - 230, - 24, - 230, - 32, - 230, - 41, - 230, - 49, - 230, - 57, - 230, - 65, - 230, - 74, - 230, - 82, - 230, - 90, - 230, - 98, - 230, - 106, - 230, - 115, - 230, - 123, - 230, - 131, - 230, - 139, - 230, - 148, - 230, - 156, - 230, - 164, - 230, - 172, - 230, - 180, - 230, - 189, - 230, - 197, - 230, - 205, - 230, - 213, - 230, - 222, - 230, - 230, - 230, - 238, - 230, - 246, - 230, - 255, - 222, - 0, - 222, - 8, - 222, - 16, - 222, - 24, - 222, - 32, - 222, - 41, - 222, - 49, - 222, - 57, - 222, - 65, - 222, - 74, - 222, - 82, - 222, - 90, - 222, - 98, - 222, - 106, - 222, - 115, - 222, - 123, - 222, - 131, - 222, - 139, - 222, - 148, - 222, - 156, - 222, - 164, - 222, - 172, - 222, - 180, - 222, - 189, - 222, - 197, - 222, - 205, - 222, - 213, - 222, - 222, - 222, - 230, - 222, - 238, - 222, - 246, - 222, - 255, - 213, - 0, - 213, - 8, - 213, - 16, - 213, - 24, - 213, - 32, - 213, - 41, - 213, - 49, - 213, - 57, - 213, - 65, - 213, - 74, - 213, - 82, - 213, - 90, - 213, - 98, - 213, - 106, - 213, - 115, - 213, - 123, - 213, - 131, - 213, - 139, - 213, - 148, - 213, - 156, - 213, - 164, - 213, - 172, - 213, - 180, - 213, - 189, - 213, - 197, - 213, - 205, - 213, - 213, - 213, - 222, - 213, - 230, - 213, - 238, - 213, - 246, - 213, - 255, - 205, - 0, - 205, - 8, - 205, - 16, - 205, - 24, - 205, - 32, - 205, - 41, - 205, - 49, - 205, - 57, - 205, - 65, - 205, - 74, - 205, - 82, - 205, - 90, - 205, - 98, - 205, - 106, - 205, - 115, - 205, - 123, - 205, - 131, - 205, - 139, - 205, - 148, - 205, - 156, - 205, - 164, - 205, - 172, - 205, - 180, - 205, - 189, - 205, - 197, - 205, - 205, - 205, - 213, - 205, - 222, - 205, - 230, - 205, - 238, - 205, - 246, - 205, - 255, - 197, - 0, - 197, - 8, - 197, - 16, - 197, - 24, - 197, - 32, - 197, - 41, - 197, - 49, - 197, - 57, - 197, - 65, - 197, - 74, - 197, - 82, - 197, - 90, - 197, - 98, - 197, - 106, - 197, - 115, - 197, - 123, - 197, - 131, - 197, - 139, - 197, - 148, - 197, - 156, - 197, - 164, - 197, - 172, - 197, - 180, - 197, - 189, - 197, - 197, - 197, - 205, - 197, - 213, - 197, - 222, - 197, - 230, - 197, - 238, - 197, - 246, - 197, - 255, - 189, - 0, - 189, - 8, - 189, - 16, - 189, - 24, - 189, - 32, - 189, - 41, - 189, - 49, - 189, - 57, - 189, - 65, - 189, - 74, - 189, - 82, - 189, - 90, - 189, - 98, - 189, - 106, - 189, - 115, - 189, - 123, - 189, - 131, - 189, - 139, - 189, - 148, - 189, - 156, - 189, - 164, - 189, - 172, - 189, - 180, - 189, - 189, - 189, - 197, - 189, - 205, - 189, - 213, - 189, - 222, - 189, - 230, - 189, - 238, - 189, - 246, - 189, - 255, - 180, - 0, - 180, - 8, - 180, - 16, - 180, - 24, - 180, - 32, - 180, - 41, - 180, - 49, - 180, - 57, - 180, - 65, - 180, - 74, - 180, - 82, - 180, - 90, - 180, - 98, - 180, - 106, - 180, - 115, - 180, - 123, - 180, - 131, - 180, - 139, - 180, - 148, - 180, - 156, - 180, - 164, - 180, - 172, - 180, - 180, - 180, - 189, - 180, - 197, - 180, - 205, - 180, - 213, - 180, - 222, - 180, - 230, - 180, - 238, - 180, - 246, - 180, - 255, - 172, - 0, - 172, - 8, - 172, - 16, - 172, - 24, - 172, - 32, - 172, - 41, - 172, - 49, - 172, - 57, - 172, - 65, - 172, - 74, - 172, - 82, - 172, - 90, - 172, - 98, - 172, - 106, - 172, - 115, - 172, - 123, - 172, - 131, - 172, - 139, - 172, - 148, - 172, - 156, - 172, - 164, - 172, - 172, - 172, - 180, - 172, - 189, - 172, - 197, - 172, - 205, - 172, - 213, - 172, - 222, - 172, - 230, - 172, - 238, - 172, - 246, - 172, - 255, - 164, - 0, - 164, - 8, - 164, - 16, - 164, - 24, - 164, - 32, - 164, - 41, - 164, - 49, - 164, - 57, - 164, - 65, - 164, - 74, - 164, - 82, - 164, - 90, - 164, - 98, - 164, - 106, - 164, - 115, - 164, - 123, - 164, - 131, - 164, - 139, - 164, - 148, - 164, - 156, - 164, - 164, - 164, - 172, - 164, - 180, - 164, - 189, - 164, - 197, - 164, - 205, - 164, - 213, - 164, - 222, - 164, - 230, - 164, - 238, - 164, - 246, - 164, - 255, - 156, - 0, - 156, - 8, - 156, - 16, - 156, - 24, - 156, - 32, - 156, - 41, - 156, - 49, - 156, - 57, - 156, - 65, - 156, - 74, - 156, - 82, - 156, - 90, - 156, - 98, - 156, - 106, - 156, - 115, - 156, - 123, - 156, - 131, - 156, - 139, - 156, - 148, - 156, - 156, - 156, - 164, - 156, - 172, - 156, - 180, - 156, - 189, - 156, - 197, - 156, - 205, - 156, - 213, - 156, - 222, - 156, - 230, - 156, - 238, - 156, - 246, - 156, - 255, - 148, - 0, - 148, - 8, - 148, - 16, - 148, - 24, - 148, - 32, - 148, - 41, - 148, - 49, - 148, - 57, - 148, - 65, - 148, - 74, - 148, - 82, - 148, - 90, - 148, - 98, - 148, - 106, - 148, - 115, - 148, - 123, - 148, - 131, - 148, - 139, - 148, - 148, - 148, - 156, - 148, - 164, - 148, - 172, - 148, - 180, - 148, - 189, - 148, - 197, - 148, - 205, - 148, - 213, - 148, - 222, - 148, - 230, - 148, - 238, - 148, - 246, - 148, - 255, - 139, - 0, - 139, - 8, - 139, - 16, - 139, - 24, - 139, - 32, - 139, - 41, - 139, - 49, - 139, - 57, - 139, - 65, - 139, - 74, - 139, - 82, - 139, - 90, - 139, - 98, - 139, - 106, - 139, - 115, - 139, - 123, - 139, - 131, - 139, - 139, - 139, - 148, - 139, - 156, - 139, - 164, - 139, - 172, - 139, - 180, - 139, - 189, - 139, - 197, - 139, - 205, - 139, - 213, - 139, - 222, - 139, - 230, - 139, - 238, - 139, - 246, - 139, - 255, - 131, - 0, - 131, - 8, - 131, - 16, - 131, - 24, - 131, - 32, - 131, - 41, - 131, - 49, - 131, - 57, - 131, - 65, - 131, - 74, - 131, - 82, - 131, - 90, - 131, - 98, - 131, - 106, - 131, - 115, - 131, - 123, - 131, - 131, - 131, - 139, - 131, - 148, - 131, - 156, - 131, - 164, - 131, - 172, - 131, - 180, - 131, - 189, - 131, - 197, - 131, - 205, - 131, - 213, - 131, - 222, - 131, - 230, - 131, - 238, - 131, - 246, - 131, - 255, - 123, - 0, - 123, - 8, - 123, - 16, - 123, - 24, - 123, - 32, - 123, - 41, - 123, - 49, - 123, - 57, - 123, - 65, - 123, - 74, - 123, - 82, - 123, - 90, - 123, - 98, - 123, - 106, - 123, - 115, - 123, - 123, - 123, - 131, - 123, - 139, - 123, - 148, - 123, - 156, - 123, - 164, - 123, - 172, - 123, - 180, - 123, - 189, - 123, - 197, - 123, - 205, - 123, - 213, - 123, - 222, - 123, - 230, - 123, - 238, - 123, - 246, - 123, - 255, - 115, - 0, - 115, - 8, - 115, - 16, - 115, - 24, - 115, - 32, - 115, - 41, - 115, - 49, - 115, - 57, - 115, - 65, - 115, - 74, - 115, - 82, - 115, - 90, - 115, - 98, - 115, - 106, - 115, - 115, - 115, - 123, - 115, - 131, - 115, - 139, - 115, - 148, - 115, - 156, - 115, - 164, - 115, - 172, - 115, - 180, - 115, - 189, - 115, - 197, - 115, - 205, - 115, - 213, - 115, - 222, - 115, - 230, - 115, - 238, - 115, - 246, - 115, - 255, - 106, - 0, - 106, - 8, - 106, - 16, - 106, - 24, - 106, - 32, - 106, - 41, - 106, - 49, - 106, - 57, - 106, - 65, - 106, - 74, - 106, - 82, - 106, - 90, - 106, - 98, - 106, - 106, - 106, - 115, - 106, - 123, - 106, - 131, - 106, - 139, - 106, - 148, - 106, - 156, - 106, - 164, - 106, - 172, - 106, - 180, - 106, - 189, - 106, - 197, - 106, - 205, - 106, - 213, - 106, - 222, - 106, - 230, - 106, - 238, - 106, - 246, - 106, - 255, - 98, - 0, - 98, - 8, - 98, - 16, - 98, - 24, - 98, - 32, - 98, - 41, - 98, - 49, - 98, - 57, - 98, - 65, - 98, - 74, - 98, - 82, - 98, - 90, - 98, - 98, - 98, - 106, - 98, - 115, - 98, - 123, - 98, - 131, - 98, - 139, - 98, - 148, - 98, - 156, - 98, - 164, - 98, - 172, - 98, - 180, - 98, - 189, - 98, - 197, - 98, - 205, - 98, - 213, - 98, - 222, - 98, - 230, - 98, - 238, - 98, - 246, - 98, - 255, - 90, - 0, - 90, - 8, - 90, - 16, - 90, - 24, - 90, - 32, - 90, - 41, - 90, - 49, - 90, - 57, - 90, - 65, - 90, - 74, - 90, - 82, - 90, - 90, - 90, - 98, - 90, - 106, - 90, - 115, - 90, - 123, - 90, - 131, - 90, - 139, - 90, - 148, - 90, - 156, - 90, - 164, - 90, - 172, - 90, - 180, - 90, - 189, - 90, - 197, - 90, - 205, - 90, - 213, - 90, - 222, - 90, - 230, - 90, - 238, - 90, - 246, - 90, - 255, - 82, - 0, - 82, - 8, - 82, - 16, - 82, - 24, - 82, - 32, - 82, - 41, - 82, - 49, - 82, - 57, - 82, - 65, - 82, - 74, - 82, - 82, - 82, - 90, - 82, - 98, - 82, - 106, - 82, - 115, - 82, - 123, - 82, - 131, - 82, - 139, - 82, - 148, - 82, - 156, - 82, - 164, - 82, - 172, - 82, - 180, - 82, - 189, - 82, - 197, - 82, - 205, - 82, - 213, - 82, - 222, - 82, - 230, - 82, - 238, - 82, - 246, - 82, - 255, - 74, - 0, - 74, - 8, - 74, - 16, - 74, - 24, - 74, - 32, - 74, - 41, - 74, - 49, - 74, - 57, - 74, - 65, - 74, - 74, - 74, - 82, - 74, - 90, - 74, - 98, - 74, - 106, - 74, - 115, - 74, - 123, - 74, - 131, - 74, - 139, - 74, - 148, - 74, - 156, - 74, - 164, - 74, - 172, - 74, - 180, - 74, - 189, - 74, - 197, - 74, - 205, - 74, - 213, - 74, - 222, - 74, - 230, - 74, - 238, - 74, - 246, - 74, - 255, - 65, - 0, - 65, - 8, - 65, - 16, - 65, - 24, - 65, - 32, - 65, - 41, - 65, - 49, - 65, - 57, - 65, - 65, - 65, - 74, - 65, - 82, - 65, - 90, - 65, - 98, - 65, - 106, - 65, - 115, - 65, - 123, - 65, - 131, - 65, - 139, - 65, - 148, - 65, - 156, - 65, - 164, - 65, - 172, - 65, - 180, - 65, - 189, - 65, - 197, - 65, - 205, - 65, - 213, - 65, - 222, - 65, - 230, - 65, - 238, - 65, - 246, - 65, - 255, - 57, - 0, - 57, - 8, - 57, - 16, - 57, - 24, - 57, - 32, - 57, - 41, - 57, - 49, - 57, - 57, - 57, - 65, - 57, - 74, - 57, - 82, - 57, - 90, - 57, - 98, - 57, - 106, - 57, - 115, - 57, - 123, - 57, - 131, - 57, - 139, - 57, - 148, - 57, - 156, - 57, - 164, - 57, - 172, - 57, - 180, - 57, - 189, - 57, - 197, - 57, - 205, - 57, - 213, - 57, - 222, - 57, - 230, - 57, - 238, - 57, - 246, - 57, - 255, - 49, - 0, - 49, - 8, - 49, - 16, - 49, - 24, - 49, - 32, - 49, - 41, - 49, - 49, - 49, - 57, - 49, - 65, - 49, - 74, - 49, - 82, - 49, - 90, - 49, - 98, - 49, - 106, - 49, - 115, - 49, - 123, - 49, - 131, - 49, - 139, - 49, - 148, - 49, - 156, - 49, - 164, - 49, - 172, - 49, - 180, - 49, - 189, - 49, - 197, - 49, - 205, - 49, - 213, - 49, - 222, - 49, - 230, - 49, - 238, - 49, - 246, - 49, - 255, - 41, - 0, - 41, - 8, - 41, - 16, - 41, - 24, - 41, - 32, - 41, - 41, - 41, - 49, - 41, - 57, - 41, - 65, - 41, - 74, - 41, - 82, - 41, - 90, - 41, - 98, - 41, - 106, - 41, - 115, - 41, - 123, - 41, - 131, - 41, - 139, - 41, - 148, - 41, - 156, - 41, - 164, - 41, - 172, - 41, - 180, - 41, - 189, - 41, - 197, - 41, - 205, - 41, - 213, - 41, - 222, - 41, - 230, - 41, - 238, - 41, - 246, - 41, - 255, - 32, - 0, - 32, - 8, - 32, - 16, - 32, - 24, - 32, - 32, - 32, - 41, - 32, - 49, - 32, - 57, - 32, - 65, - 32, - 74, - 32, - 82, - 32, - 90, - 32, - 98, - 32, - 106, - 32, - 115, - 32, - 123, - 32, - 131, - 32, - 139, - 32, - 148, - 32, - 156, - 32, - 164, - 32, - 172, - 32, - 180, - 32, - 189, - 32, - 197, - 32, - 205, - 32, - 213, - 32, - 222, - 32, - 230, - 32, - 238, - 32, - 246, - 32, - 255, - 24, - 0, - 24, - 8, - 24, - 16, - 24, - 24, - 24, - 32, - 24, - 41, - 24, - 49, - 24, - 57, - 24, - 65, - 24, - 74, - 24, - 82, - 24, - 90, - 24, - 98, - 24, - 106, - 24, - 115, - 24, - 123, - 24, - 131, - 24, - 139, - 24, - 148, - 24, - 156, - 24, - 164, - 24, - 172, - 24, - 180, - 24, - 189, - 24, - 197, - 24, - 205, - 24, - 213, - 24, - 222, - 24, - 230, - 24, - 238, - 24, - 246, - 24, - 255, - 16, - 0, - 16, - 8, - 16, - 16, - 16, - 24, - 16, - 32, - 16, - 41, - 16, - 49, - 16, - 57, - 16, - 65, - 16, - 74, - 16, - 82, - 16, - 90, - 16, - 98, - 16, - 106, - 16, - 115, - 16, - 123, - 16, - 131, - 16, - 139, - 16, - 148, - 16, - 156, - 16, - 164, - 16, - 172, - 16, - 180, - 16, - 189, - 16, - 197, - 16, - 205, - 16, - 213, - 16, - 222, - 16, - 230, - 16, - 238, - 16, - 246, - 16, - 255, - 8, - 0, - 8, - 8, - 8, - 16, - 8, - 24, - 8, - 32, - 8, - 41, - 8, - 49, - 8, - 57, - 8, - 65, - 8, - 74, - 8, - 82, - 8, - 90, - 8, - 98, - 8, - 106, - 8, - 115, - 8, - 123, - 8, - 131, - 8, - 139, - 8, - 148, - 8, - 156, - 8, - 164, - 8, - 172, - 8, - 180, - 8, - 189, - 8, - 197, - 8, - 205, - 8, - 213, - 8, - 222, - 8, - 230, - 8, - 238, - 8, - 246, - 8, - 255, - 0, - 0, - 0, - 8, - 0, - 16, - 0, - 24, - 0, - 32, - 0, - 41, - 0, - 49, - 0, - 57, - 0, - 65, - 0, - 74, - 0, - 82, - 0, - 90, - 0, - 98, - 0, - 106, - 0, - 115, - 0, - 123, - 0, - 131, - 0, - 139, - 0, - 148, - 0, - 156, - 0, - 164, - 0, - 172, - 0, - 180, - 0, - 189, - 0, - 197, - 0, - 205, - 0, - 213, - 0, - 222, - 0, - 230, - 0, - 238, - 0, - 246, - 0, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node grayscale-alpha-16bit.png 1`] = ` -Object { - "data": Array [ - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 16, - 133, - 17, - 167, - 16, - 133, - 35, - 79, - 16, - 133, - 52, - 246, - 16, - 133, - 70, - 158, - 16, - 133, - 88, - 70, - 16, - 133, - 105, - 237, - 16, - 133, - 123, - 149, - 16, - 133, - 141, - 61, - 16, - 133, - 158, - 228, - 16, - 133, - 176, - 140, - 16, - 133, - 194, - 52, - 16, - 133, - 211, - 219, - 16, - 133, - 229, - 131, - 16, - 133, - 247, - 43, - 16, - 133, - 247, - 43, - 16, - 133, - 229, - 131, - 16, - 133, - 211, - 219, - 16, - 133, - 194, - 52, - 16, - 133, - 176, - 140, - 16, - 133, - 158, - 228, - 16, - 133, - 141, - 61, - 16, - 133, - 123, - 149, - 16, - 133, - 105, - 237, - 16, - 133, - 88, - 70, - 16, - 133, - 70, - 158, - 16, - 133, - 52, - 246, - 16, - 133, - 35, - 79, - 16, - 133, - 17, - 167, - 16, - 133, - 0, - 0, - 16, - 133, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 17, - 167, - 16, - 133, - 0, - 0, - 33, - 9, - 18, - 246, - 33, - 9, - 37, - 236, - 33, - 9, - 56, - 227, - 33, - 9, - 75, - 217, - 33, - 9, - 94, - 208, - 33, - 9, - 113, - 198, - 33, - 9, - 132, - 189, - 33, - 9, - 151, - 179, - 33, - 9, - 170, - 169, - 33, - 9, - 189, - 160, - 33, - 9, - 208, - 150, - 33, - 9, - 227, - 141, - 33, - 9, - 246, - 131, - 33, - 9, - 246, - 131, - 33, - 9, - 227, - 141, - 33, - 9, - 208, - 150, - 33, - 9, - 189, - 160, - 33, - 9, - 170, - 169, - 33, - 9, - 151, - 179, - 33, - 9, - 132, - 189, - 33, - 9, - 113, - 198, - 33, - 9, - 94, - 208, - 33, - 9, - 75, - 217, - 33, - 9, - 56, - 227, - 33, - 9, - 37, - 236, - 33, - 9, - 18, - 246, - 33, - 9, - 0, - 0, - 33, - 9, - 17, - 167, - 16, - 133, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 35, - 79, - 16, - 133, - 18, - 246, - 33, - 9, - 0, - 0, - 49, - 141, - 20, - 122, - 49, - 141, - 40, - 245, - 49, - 141, - 61, - 112, - 49, - 141, - 81, - 235, - 49, - 141, - 102, - 101, - 49, - 141, - 122, - 224, - 49, - 141, - 143, - 91, - 49, - 141, - 163, - 214, - 49, - 141, - 184, - 81, - 49, - 141, - 204, - 203, - 49, - 141, - 225, - 70, - 49, - 141, - 245, - 193, - 49, - 141, - 245, - 193, - 49, - 141, - 225, - 70, - 49, - 141, - 204, - 203, - 49, - 141, - 184, - 81, - 49, - 141, - 163, - 214, - 49, - 141, - 143, - 91, - 49, - 141, - 122, - 224, - 49, - 141, - 102, - 101, - 49, - 141, - 81, - 235, - 49, - 141, - 61, - 112, - 49, - 141, - 40, - 245, - 49, - 141, - 20, - 122, - 49, - 141, - 0, - 0, - 49, - 141, - 18, - 246, - 33, - 9, - 35, - 79, - 16, - 133, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 52, - 246, - 16, - 133, - 37, - 236, - 33, - 9, - 20, - 122, - 49, - 141, - 0, - 0, - 66, - 17, - 22, - 66, - 66, - 17, - 44, - 133, - 66, - 17, - 66, - 200, - 66, - 17, - 89, - 10, - 66, - 17, - 111, - 77, - 66, - 17, - 133, - 144, - 66, - 17, - 155, - 210, - 66, - 17, - 178, - 21, - 66, - 17, - 200, - 88, - 66, - 17, - 222, - 154, - 66, - 17, - 244, - 221, - 66, - 17, - 244, - 221, - 66, - 17, - 222, - 154, - 66, - 17, - 200, - 88, - 66, - 17, - 178, - 21, - 66, - 17, - 155, - 210, - 66, - 17, - 133, - 144, - 66, - 17, - 111, - 77, - 66, - 17, - 89, - 10, - 66, - 17, - 66, - 200, - 66, - 17, - 44, - 133, - 66, - 17, - 22, - 66, - 66, - 17, - 0, - 0, - 66, - 17, - 20, - 122, - 49, - 141, - 37, - 236, - 33, - 9, - 52, - 246, - 16, - 133, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 70, - 158, - 16, - 133, - 56, - 227, - 33, - 9, - 40, - 245, - 49, - 141, - 22, - 66, - 66, - 17, - 0, - 0, - 82, - 149, - 24, - 97, - 82, - 149, - 48, - 194, - 82, - 149, - 73, - 36, - 82, - 149, - 97, - 133, - 82, - 149, - 121, - 231, - 82, - 149, - 146, - 72, - 82, - 149, - 170, - 169, - 82, - 149, - 195, - 11, - 82, - 149, - 219, - 108, - 82, - 149, - 243, - 206, - 82, - 149, - 243, - 206, - 82, - 149, - 219, - 108, - 82, - 149, - 195, - 11, - 82, - 149, - 170, - 169, - 82, - 149, - 146, - 72, - 82, - 149, - 121, - 231, - 82, - 149, - 97, - 133, - 82, - 149, - 73, - 36, - 82, - 149, - 48, - 194, - 82, - 149, - 24, - 97, - 82, - 149, - 0, - 0, - 82, - 149, - 22, - 66, - 66, - 17, - 40, - 245, - 49, - 141, - 56, - 227, - 33, - 9, - 70, - 158, - 16, - 133, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 88, - 70, - 16, - 133, - 75, - 217, - 33, - 9, - 61, - 112, - 49, - 141, - 44, - 133, - 66, - 17, - 24, - 97, - 82, - 149, - 0, - 0, - 99, - 25, - 26, - 242, - 99, - 25, - 53, - 228, - 99, - 25, - 80, - 215, - 99, - 25, - 107, - 201, - 99, - 25, - 134, - 188, - 99, - 25, - 161, - 174, - 99, - 25, - 188, - 160, - 99, - 25, - 215, - 147, - 99, - 25, - 242, - 133, - 99, - 25, - 242, - 133, - 99, - 25, - 215, - 147, - 99, - 25, - 188, - 160, - 99, - 25, - 161, - 174, - 99, - 25, - 134, - 188, - 99, - 25, - 107, - 201, - 99, - 25, - 80, - 215, - 99, - 25, - 53, - 228, - 99, - 25, - 26, - 242, - 99, - 25, - 0, - 0, - 99, - 25, - 24, - 97, - 82, - 149, - 44, - 133, - 66, - 17, - 61, - 112, - 49, - 141, - 75, - 217, - 33, - 9, - 88, - 70, - 16, - 133, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 105, - 237, - 16, - 133, - 94, - 208, - 33, - 9, - 81, - 235, - 49, - 141, - 66, - 200, - 66, - 17, - 48, - 194, - 82, - 149, - 26, - 242, - 99, - 25, - 0, - 0, - 115, - 157, - 30, - 29, - 115, - 157, - 60, - 59, - 115, - 157, - 90, - 89, - 115, - 157, - 120, - 119, - 115, - 157, - 150, - 149, - 115, - 157, - 180, - 179, - 115, - 157, - 210, - 209, - 115, - 157, - 240, - 239, - 115, - 157, - 240, - 239, - 115, - 157, - 210, - 209, - 115, - 157, - 180, - 179, - 115, - 157, - 150, - 149, - 115, - 157, - 120, - 119, - 115, - 157, - 90, - 89, - 115, - 157, - 60, - 59, - 115, - 157, - 30, - 29, - 115, - 157, - 0, - 0, - 115, - 157, - 26, - 242, - 99, - 25, - 48, - 194, - 82, - 149, - 66, - 200, - 66, - 17, - 81, - 235, - 49, - 141, - 94, - 208, - 33, - 9, - 105, - 237, - 16, - 133, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 149, - 16, - 133, - 113, - 198, - 33, - 9, - 102, - 101, - 49, - 141, - 89, - 10, - 66, - 17, - 73, - 36, - 82, - 149, - 53, - 228, - 99, - 25, - 30, - 29, - 115, - 157, - 0, - 0, - 132, - 33, - 34, - 33, - 132, - 33, - 68, - 67, - 132, - 33, - 102, - 101, - 132, - 33, - 136, - 135, - 132, - 33, - 170, - 169, - 132, - 33, - 204, - 203, - 132, - 33, - 238, - 237, - 132, - 33, - 238, - 237, - 132, - 33, - 204, - 203, - 132, - 33, - 170, - 169, - 132, - 33, - 136, - 135, - 132, - 33, - 102, - 101, - 132, - 33, - 68, - 67, - 132, - 33, - 34, - 33, - 132, - 33, - 0, - 0, - 132, - 33, - 30, - 29, - 115, - 157, - 53, - 228, - 99, - 25, - 73, - 36, - 82, - 149, - 89, - 10, - 66, - 17, - 102, - 101, - 49, - 141, - 113, - 198, - 33, - 9, - 123, - 149, - 16, - 133, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 141, - 61, - 16, - 133, - 132, - 189, - 33, - 9, - 122, - 224, - 49, - 141, - 111, - 77, - 66, - 17, - 97, - 133, - 82, - 149, - 80, - 215, - 99, - 25, - 60, - 59, - 115, - 157, - 34, - 33, - 132, - 33, - 0, - 0, - 148, - 165, - 39, - 98, - 148, - 165, - 78, - 196, - 148, - 165, - 118, - 38, - 148, - 165, - 157, - 137, - 148, - 165, - 196, - 235, - 148, - 165, - 236, - 77, - 148, - 165, - 236, - 77, - 148, - 165, - 196, - 235, - 148, - 165, - 157, - 137, - 148, - 165, - 118, - 38, - 148, - 165, - 78, - 196, - 148, - 165, - 39, - 98, - 148, - 165, - 0, - 0, - 148, - 165, - 34, - 33, - 132, - 33, - 60, - 59, - 115, - 157, - 80, - 215, - 99, - 25, - 97, - 133, - 82, - 149, - 111, - 77, - 66, - 17, - 122, - 224, - 49, - 141, - 132, - 189, - 33, - 9, - 141, - 61, - 16, - 133, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 158, - 228, - 16, - 133, - 151, - 179, - 33, - 9, - 143, - 91, - 49, - 141, - 133, - 144, - 66, - 17, - 121, - 231, - 82, - 149, - 107, - 201, - 99, - 25, - 90, - 89, - 115, - 157, - 68, - 67, - 132, - 33, - 39, - 98, - 148, - 165, - 0, - 0, - 165, - 41, - 46, - 139, - 165, - 41, - 93, - 22, - 165, - 41, - 139, - 162, - 165, - 41, - 186, - 45, - 165, - 41, - 232, - 185, - 165, - 41, - 232, - 185, - 165, - 41, - 186, - 45, - 165, - 41, - 139, - 162, - 165, - 41, - 93, - 22, - 165, - 41, - 46, - 139, - 165, - 41, - 0, - 0, - 165, - 41, - 39, - 98, - 148, - 165, - 68, - 67, - 132, - 33, - 90, - 89, - 115, - 157, - 107, - 201, - 99, - 25, - 121, - 231, - 82, - 149, - 133, - 144, - 66, - 17, - 143, - 91, - 49, - 141, - 151, - 179, - 33, - 9, - 158, - 228, - 16, - 133, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 176, - 140, - 16, - 133, - 170, - 169, - 33, - 9, - 163, - 214, - 49, - 141, - 155, - 210, - 66, - 17, - 146, - 72, - 82, - 149, - 134, - 188, - 99, - 25, - 120, - 119, - 115, - 157, - 102, - 101, - 132, - 33, - 78, - 196, - 148, - 165, - 46, - 139, - 165, - 41, - 0, - 0, - 181, - 173, - 56, - 227, - 181, - 173, - 113, - 198, - 181, - 173, - 170, - 169, - 181, - 173, - 227, - 141, - 181, - 173, - 227, - 141, - 181, - 173, - 170, - 169, - 181, - 173, - 113, - 198, - 181, - 173, - 56, - 227, - 181, - 173, - 0, - 0, - 181, - 173, - 46, - 139, - 165, - 41, - 78, - 196, - 148, - 165, - 102, - 101, - 132, - 33, - 120, - 119, - 115, - 157, - 134, - 188, - 99, - 25, - 146, - 72, - 82, - 149, - 155, - 210, - 66, - 17, - 163, - 214, - 49, - 141, - 170, - 169, - 33, - 9, - 176, - 140, - 16, - 133, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 194, - 52, - 16, - 133, - 189, - 160, - 33, - 9, - 184, - 81, - 49, - 141, - 178, - 21, - 66, - 17, - 170, - 169, - 82, - 149, - 161, - 174, - 99, - 25, - 150, - 149, - 115, - 157, - 136, - 135, - 132, - 33, - 118, - 38, - 148, - 165, - 93, - 22, - 165, - 41, - 56, - 227, - 181, - 173, - 0, - 0, - 198, - 49, - 73, - 36, - 198, - 49, - 146, - 72, - 198, - 49, - 219, - 108, - 198, - 49, - 219, - 108, - 198, - 49, - 146, - 72, - 198, - 49, - 73, - 36, - 198, - 49, - 0, - 0, - 198, - 49, - 56, - 227, - 181, - 173, - 93, - 22, - 165, - 41, - 118, - 38, - 148, - 165, - 136, - 135, - 132, - 33, - 150, - 149, - 115, - 157, - 161, - 174, - 99, - 25, - 170, - 169, - 82, - 149, - 178, - 21, - 66, - 17, - 184, - 81, - 49, - 141, - 189, - 160, - 33, - 9, - 194, - 52, - 16, - 133, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 211, - 219, - 16, - 133, - 208, - 150, - 33, - 9, - 204, - 203, - 49, - 141, - 200, - 88, - 66, - 17, - 195, - 11, - 82, - 149, - 188, - 160, - 99, - 25, - 180, - 179, - 115, - 157, - 170, - 169, - 132, - 33, - 157, - 137, - 148, - 165, - 139, - 162, - 165, - 41, - 113, - 198, - 181, - 173, - 73, - 36, - 198, - 49, - 0, - 0, - 214, - 181, - 102, - 101, - 214, - 181, - 204, - 203, - 214, - 181, - 204, - 203, - 214, - 181, - 102, - 101, - 214, - 181, - 0, - 0, - 214, - 181, - 73, - 36, - 198, - 49, - 113, - 198, - 181, - 173, - 139, - 162, - 165, - 41, - 157, - 137, - 148, - 165, - 170, - 169, - 132, - 33, - 180, - 179, - 115, - 157, - 188, - 160, - 99, - 25, - 195, - 11, - 82, - 149, - 200, - 88, - 66, - 17, - 204, - 203, - 49, - 141, - 208, - 150, - 33, - 9, - 211, - 219, - 16, - 133, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 229, - 131, - 16, - 133, - 227, - 141, - 33, - 9, - 225, - 70, - 49, - 141, - 222, - 154, - 66, - 17, - 219, - 108, - 82, - 149, - 215, - 147, - 99, - 25, - 210, - 209, - 115, - 157, - 204, - 203, - 132, - 33, - 196, - 235, - 148, - 165, - 186, - 45, - 165, - 41, - 170, - 169, - 181, - 173, - 146, - 72, - 198, - 49, - 102, - 101, - 214, - 181, - 0, - 0, - 231, - 57, - 170, - 169, - 231, - 57, - 170, - 169, - 231, - 57, - 0, - 0, - 231, - 57, - 102, - 101, - 214, - 181, - 146, - 72, - 198, - 49, - 170, - 169, - 181, - 173, - 186, - 45, - 165, - 41, - 196, - 235, - 148, - 165, - 204, - 203, - 132, - 33, - 210, - 209, - 115, - 157, - 215, - 147, - 99, - 25, - 219, - 108, - 82, - 149, - 222, - 154, - 66, - 17, - 225, - 70, - 49, - 141, - 227, - 141, - 33, - 9, - 229, - 131, - 16, - 133, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 43, - 16, - 133, - 246, - 131, - 33, - 9, - 245, - 193, - 49, - 141, - 244, - 221, - 66, - 17, - 243, - 206, - 82, - 149, - 242, - 133, - 99, - 25, - 240, - 239, - 115, - 157, - 238, - 237, - 132, - 33, - 236, - 77, - 148, - 165, - 232, - 185, - 165, - 41, - 227, - 141, - 181, - 173, - 219, - 108, - 198, - 49, - 204, - 203, - 214, - 181, - 170, - 169, - 231, - 57, - 0, - 0, - 247, - 189, - 0, - 0, - 247, - 189, - 170, - 169, - 231, - 57, - 204, - 203, - 214, - 181, - 219, - 108, - 198, - 49, - 227, - 141, - 181, - 173, - 232, - 185, - 165, - 41, - 236, - 77, - 148, - 165, - 238, - 237, - 132, - 33, - 240, - 239, - 115, - 157, - 242, - 133, - 99, - 25, - 243, - 206, - 82, - 149, - 244, - 221, - 66, - 17, - 245, - 193, - 49, - 141, - 246, - 131, - 33, - 9, - 247, - 43, - 16, - 133, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 43, - 16, - 133, - 246, - 131, - 33, - 9, - 245, - 193, - 49, - 141, - 244, - 221, - 66, - 17, - 243, - 206, - 82, - 149, - 242, - 133, - 99, - 25, - 240, - 239, - 115, - 157, - 238, - 237, - 132, - 33, - 236, - 77, - 148, - 165, - 232, - 185, - 165, - 41, - 227, - 141, - 181, - 173, - 219, - 108, - 198, - 49, - 204, - 203, - 214, - 181, - 170, - 169, - 231, - 57, - 0, - 0, - 247, - 189, - 0, - 0, - 247, - 189, - 170, - 169, - 231, - 57, - 204, - 203, - 214, - 181, - 219, - 108, - 198, - 49, - 227, - 141, - 181, - 173, - 232, - 185, - 165, - 41, - 236, - 77, - 148, - 165, - 238, - 237, - 132, - 33, - 240, - 239, - 115, - 157, - 242, - 133, - 99, - 25, - 243, - 206, - 82, - 149, - 244, - 221, - 66, - 17, - 245, - 193, - 49, - 141, - 246, - 131, - 33, - 9, - 247, - 43, - 16, - 133, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 229, - 131, - 16, - 133, - 227, - 141, - 33, - 9, - 225, - 70, - 49, - 141, - 222, - 154, - 66, - 17, - 219, - 108, - 82, - 149, - 215, - 147, - 99, - 25, - 210, - 209, - 115, - 157, - 204, - 203, - 132, - 33, - 196, - 235, - 148, - 165, - 186, - 45, - 165, - 41, - 170, - 169, - 181, - 173, - 146, - 72, - 198, - 49, - 102, - 101, - 214, - 181, - 0, - 0, - 231, - 57, - 170, - 169, - 231, - 57, - 170, - 169, - 231, - 57, - 0, - 0, - 231, - 57, - 102, - 101, - 214, - 181, - 146, - 72, - 198, - 49, - 170, - 169, - 181, - 173, - 186, - 45, - 165, - 41, - 196, - 235, - 148, - 165, - 204, - 203, - 132, - 33, - 210, - 209, - 115, - 157, - 215, - 147, - 99, - 25, - 219, - 108, - 82, - 149, - 222, - 154, - 66, - 17, - 225, - 70, - 49, - 141, - 227, - 141, - 33, - 9, - 229, - 131, - 16, - 133, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 211, - 219, - 16, - 133, - 208, - 150, - 33, - 9, - 204, - 203, - 49, - 141, - 200, - 88, - 66, - 17, - 195, - 11, - 82, - 149, - 188, - 160, - 99, - 25, - 180, - 179, - 115, - 157, - 170, - 169, - 132, - 33, - 157, - 137, - 148, - 165, - 139, - 162, - 165, - 41, - 113, - 198, - 181, - 173, - 73, - 36, - 198, - 49, - 0, - 0, - 214, - 181, - 102, - 101, - 214, - 181, - 204, - 203, - 214, - 181, - 204, - 203, - 214, - 181, - 102, - 101, - 214, - 181, - 0, - 0, - 214, - 181, - 73, - 36, - 198, - 49, - 113, - 198, - 181, - 173, - 139, - 162, - 165, - 41, - 157, - 137, - 148, - 165, - 170, - 169, - 132, - 33, - 180, - 179, - 115, - 157, - 188, - 160, - 99, - 25, - 195, - 11, - 82, - 149, - 200, - 88, - 66, - 17, - 204, - 203, - 49, - 141, - 208, - 150, - 33, - 9, - 211, - 219, - 16, - 133, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 194, - 52, - 16, - 133, - 189, - 160, - 33, - 9, - 184, - 81, - 49, - 141, - 178, - 21, - 66, - 17, - 170, - 169, - 82, - 149, - 161, - 174, - 99, - 25, - 150, - 149, - 115, - 157, - 136, - 135, - 132, - 33, - 118, - 38, - 148, - 165, - 93, - 22, - 165, - 41, - 56, - 227, - 181, - 173, - 0, - 0, - 198, - 49, - 73, - 36, - 198, - 49, - 146, - 72, - 198, - 49, - 219, - 108, - 198, - 49, - 219, - 108, - 198, - 49, - 146, - 72, - 198, - 49, - 73, - 36, - 198, - 49, - 0, - 0, - 198, - 49, - 56, - 227, - 181, - 173, - 93, - 22, - 165, - 41, - 118, - 38, - 148, - 165, - 136, - 135, - 132, - 33, - 150, - 149, - 115, - 157, - 161, - 174, - 99, - 25, - 170, - 169, - 82, - 149, - 178, - 21, - 66, - 17, - 184, - 81, - 49, - 141, - 189, - 160, - 33, - 9, - 194, - 52, - 16, - 133, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 176, - 140, - 16, - 133, - 170, - 169, - 33, - 9, - 163, - 214, - 49, - 141, - 155, - 210, - 66, - 17, - 146, - 72, - 82, - 149, - 134, - 188, - 99, - 25, - 120, - 119, - 115, - 157, - 102, - 101, - 132, - 33, - 78, - 196, - 148, - 165, - 46, - 139, - 165, - 41, - 0, - 0, - 181, - 173, - 56, - 227, - 181, - 173, - 113, - 198, - 181, - 173, - 170, - 169, - 181, - 173, - 227, - 141, - 181, - 173, - 227, - 141, - 181, - 173, - 170, - 169, - 181, - 173, - 113, - 198, - 181, - 173, - 56, - 227, - 181, - 173, - 0, - 0, - 181, - 173, - 46, - 139, - 165, - 41, - 78, - 196, - 148, - 165, - 102, - 101, - 132, - 33, - 120, - 119, - 115, - 157, - 134, - 188, - 99, - 25, - 146, - 72, - 82, - 149, - 155, - 210, - 66, - 17, - 163, - 214, - 49, - 141, - 170, - 169, - 33, - 9, - 176, - 140, - 16, - 133, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 158, - 228, - 16, - 133, - 151, - 179, - 33, - 9, - 143, - 91, - 49, - 141, - 133, - 144, - 66, - 17, - 121, - 231, - 82, - 149, - 107, - 201, - 99, - 25, - 90, - 89, - 115, - 157, - 68, - 67, - 132, - 33, - 39, - 98, - 148, - 165, - 0, - 0, - 165, - 41, - 46, - 139, - 165, - 41, - 93, - 22, - 165, - 41, - 139, - 162, - 165, - 41, - 186, - 45, - 165, - 41, - 232, - 185, - 165, - 41, - 232, - 185, - 165, - 41, - 186, - 45, - 165, - 41, - 139, - 162, - 165, - 41, - 93, - 22, - 165, - 41, - 46, - 139, - 165, - 41, - 0, - 0, - 165, - 41, - 39, - 98, - 148, - 165, - 68, - 67, - 132, - 33, - 90, - 89, - 115, - 157, - 107, - 201, - 99, - 25, - 121, - 231, - 82, - 149, - 133, - 144, - 66, - 17, - 143, - 91, - 49, - 141, - 151, - 179, - 33, - 9, - 158, - 228, - 16, - 133, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 141, - 61, - 16, - 133, - 132, - 189, - 33, - 9, - 122, - 224, - 49, - 141, - 111, - 77, - 66, - 17, - 97, - 133, - 82, - 149, - 80, - 215, - 99, - 25, - 60, - 59, - 115, - 157, - 34, - 33, - 132, - 33, - 0, - 0, - 148, - 165, - 39, - 98, - 148, - 165, - 78, - 196, - 148, - 165, - 118, - 38, - 148, - 165, - 157, - 137, - 148, - 165, - 196, - 235, - 148, - 165, - 236, - 77, - 148, - 165, - 236, - 77, - 148, - 165, - 196, - 235, - 148, - 165, - 157, - 137, - 148, - 165, - 118, - 38, - 148, - 165, - 78, - 196, - 148, - 165, - 39, - 98, - 148, - 165, - 0, - 0, - 148, - 165, - 34, - 33, - 132, - 33, - 60, - 59, - 115, - 157, - 80, - 215, - 99, - 25, - 97, - 133, - 82, - 149, - 111, - 77, - 66, - 17, - 122, - 224, - 49, - 141, - 132, - 189, - 33, - 9, - 141, - 61, - 16, - 133, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 149, - 16, - 133, - 113, - 198, - 33, - 9, - 102, - 101, - 49, - 141, - 89, - 10, - 66, - 17, - 73, - 36, - 82, - 149, - 53, - 228, - 99, - 25, - 30, - 29, - 115, - 157, - 0, - 0, - 132, - 33, - 34, - 33, - 132, - 33, - 68, - 67, - 132, - 33, - 102, - 101, - 132, - 33, - 136, - 135, - 132, - 33, - 170, - 169, - 132, - 33, - 204, - 203, - 132, - 33, - 238, - 237, - 132, - 33, - 238, - 237, - 132, - 33, - 204, - 203, - 132, - 33, - 170, - 169, - 132, - 33, - 136, - 135, - 132, - 33, - 102, - 101, - 132, - 33, - 68, - 67, - 132, - 33, - 34, - 33, - 132, - 33, - 0, - 0, - 132, - 33, - 30, - 29, - 115, - 157, - 53, - 228, - 99, - 25, - 73, - 36, - 82, - 149, - 89, - 10, - 66, - 17, - 102, - 101, - 49, - 141, - 113, - 198, - 33, - 9, - 123, - 149, - 16, - 133, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 105, - 237, - 16, - 133, - 94, - 208, - 33, - 9, - 81, - 235, - 49, - 141, - 66, - 200, - 66, - 17, - 48, - 194, - 82, - 149, - 26, - 242, - 99, - 25, - 0, - 0, - 115, - 157, - 30, - 29, - 115, - 157, - 60, - 59, - 115, - 157, - 90, - 89, - 115, - 157, - 120, - 119, - 115, - 157, - 150, - 149, - 115, - 157, - 180, - 179, - 115, - 157, - 210, - 209, - 115, - 157, - 240, - 239, - 115, - 157, - 240, - 239, - 115, - 157, - 210, - 209, - 115, - 157, - 180, - 179, - 115, - 157, - 150, - 149, - 115, - 157, - 120, - 119, - 115, - 157, - 90, - 89, - 115, - 157, - 60, - 59, - 115, - 157, - 30, - 29, - 115, - 157, - 0, - 0, - 115, - 157, - 26, - 242, - 99, - 25, - 48, - 194, - 82, - 149, - 66, - 200, - 66, - 17, - 81, - 235, - 49, - 141, - 94, - 208, - 33, - 9, - 105, - 237, - 16, - 133, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 88, - 70, - 16, - 133, - 75, - 217, - 33, - 9, - 61, - 112, - 49, - 141, - 44, - 133, - 66, - 17, - 24, - 97, - 82, - 149, - 0, - 0, - 99, - 25, - 26, - 242, - 99, - 25, - 53, - 228, - 99, - 25, - 80, - 215, - 99, - 25, - 107, - 201, - 99, - 25, - 134, - 188, - 99, - 25, - 161, - 174, - 99, - 25, - 188, - 160, - 99, - 25, - 215, - 147, - 99, - 25, - 242, - 133, - 99, - 25, - 242, - 133, - 99, - 25, - 215, - 147, - 99, - 25, - 188, - 160, - 99, - 25, - 161, - 174, - 99, - 25, - 134, - 188, - 99, - 25, - 107, - 201, - 99, - 25, - 80, - 215, - 99, - 25, - 53, - 228, - 99, - 25, - 26, - 242, - 99, - 25, - 0, - 0, - 99, - 25, - 24, - 97, - 82, - 149, - 44, - 133, - 66, - 17, - 61, - 112, - 49, - 141, - 75, - 217, - 33, - 9, - 88, - 70, - 16, - 133, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 70, - 158, - 16, - 133, - 56, - 227, - 33, - 9, - 40, - 245, - 49, - 141, - 22, - 66, - 66, - 17, - 0, - 0, - 82, - 149, - 24, - 97, - 82, - 149, - 48, - 194, - 82, - 149, - 73, - 36, - 82, - 149, - 97, - 133, - 82, - 149, - 121, - 231, - 82, - 149, - 146, - 72, - 82, - 149, - 170, - 169, - 82, - 149, - 195, - 11, - 82, - 149, - 219, - 108, - 82, - 149, - 243, - 206, - 82, - 149, - 243, - 206, - 82, - 149, - 219, - 108, - 82, - 149, - 195, - 11, - 82, - 149, - 170, - 169, - 82, - 149, - 146, - 72, - 82, - 149, - 121, - 231, - 82, - 149, - 97, - 133, - 82, - 149, - 73, - 36, - 82, - 149, - 48, - 194, - 82, - 149, - 24, - 97, - 82, - 149, - 0, - 0, - 82, - 149, - 22, - 66, - 66, - 17, - 40, - 245, - 49, - 141, - 56, - 227, - 33, - 9, - 70, - 158, - 16, - 133, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 52, - 246, - 16, - 133, - 37, - 236, - 33, - 9, - 20, - 122, - 49, - 141, - 0, - 0, - 66, - 17, - 22, - 66, - 66, - 17, - 44, - 133, - 66, - 17, - 66, - 200, - 66, - 17, - 89, - 10, - 66, - 17, - 111, - 77, - 66, - 17, - 133, - 144, - 66, - 17, - 155, - 210, - 66, - 17, - 178, - 21, - 66, - 17, - 200, - 88, - 66, - 17, - 222, - 154, - 66, - 17, - 244, - 221, - 66, - 17, - 244, - 221, - 66, - 17, - 222, - 154, - 66, - 17, - 200, - 88, - 66, - 17, - 178, - 21, - 66, - 17, - 155, - 210, - 66, - 17, - 133, - 144, - 66, - 17, - 111, - 77, - 66, - 17, - 89, - 10, - 66, - 17, - 66, - 200, - 66, - 17, - 44, - 133, - 66, - 17, - 22, - 66, - 66, - 17, - 0, - 0, - 66, - 17, - 20, - 122, - 49, - 141, - 37, - 236, - 33, - 9, - 52, - 246, - 16, - 133, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 35, - 79, - 16, - 133, - 18, - 246, - 33, - 9, - 0, - 0, - 49, - 141, - 20, - 122, - 49, - 141, - 40, - 245, - 49, - 141, - 61, - 112, - 49, - 141, - 81, - 235, - 49, - 141, - 102, - 101, - 49, - 141, - 122, - 224, - 49, - 141, - 143, - 91, - 49, - 141, - 163, - 214, - 49, - 141, - 184, - 81, - 49, - 141, - 204, - 203, - 49, - 141, - 225, - 70, - 49, - 141, - 245, - 193, - 49, - 141, - 245, - 193, - 49, - 141, - 225, - 70, - 49, - 141, - 204, - 203, - 49, - 141, - 184, - 81, - 49, - 141, - 163, - 214, - 49, - 141, - 143, - 91, - 49, - 141, - 122, - 224, - 49, - 141, - 102, - 101, - 49, - 141, - 81, - 235, - 49, - 141, - 61, - 112, - 49, - 141, - 40, - 245, - 49, - 141, - 20, - 122, - 49, - 141, - 0, - 0, - 49, - 141, - 18, - 246, - 33, - 9, - 35, - 79, - 16, - 133, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 17, - 167, - 16, - 133, - 0, - 0, - 33, - 9, - 18, - 246, - 33, - 9, - 37, - 236, - 33, - 9, - 56, - 227, - 33, - 9, - 75, - 217, - 33, - 9, - 94, - 208, - 33, - 9, - 113, - 198, - 33, - 9, - 132, - 189, - 33, - 9, - 151, - 179, - 33, - 9, - 170, - 169, - 33, - 9, - 189, - 160, - 33, - 9, - 208, - 150, - 33, - 9, - 227, - 141, - 33, - 9, - 246, - 131, - 33, - 9, - 246, - 131, - 33, - 9, - 227, - 141, - 33, - 9, - 208, - 150, - 33, - 9, - 189, - 160, - 33, - 9, - 170, - 169, - 33, - 9, - 151, - 179, - 33, - 9, - 132, - 189, - 33, - 9, - 113, - 198, - 33, - 9, - 94, - 208, - 33, - 9, - 75, - 217, - 33, - 9, - 56, - 227, - 33, - 9, - 37, - 236, - 33, - 9, - 18, - 246, - 33, - 9, - 0, - 0, - 33, - 9, - 17, - 167, - 16, - 133, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 16, - 133, - 17, - 167, - 16, - 133, - 35, - 79, - 16, - 133, - 52, - 246, - 16, - 133, - 70, - 158, - 16, - 133, - 88, - 70, - 16, - 133, - 105, - 237, - 16, - 133, - 123, - 149, - 16, - 133, - 141, - 61, - 16, - 133, - 158, - 228, - 16, - 133, - 176, - 140, - 16, - 133, - 194, - 52, - 16, - 133, - 211, - 219, - 16, - 133, - 229, - 131, - 16, - 133, - 247, - 43, - 16, - 133, - 247, - 43, - 16, - 133, - 229, - 131, - 16, - 133, - 211, - 219, - 16, - 133, - 194, - 52, - 16, - 133, - 176, - 140, - 16, - 133, - 158, - 228, - 16, - 133, - 141, - 61, - 16, - 133, - 123, - 149, - 16, - 133, - 105, - 237, - 16, - 133, - 88, - 70, - 16, - 133, - 70, - 158, - 16, - 133, - 52, - 246, - 16, - 133, - 35, - 79, - 16, - 133, - 17, - 167, - 16, - 133, - 0, - 0, - 16, - 133, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 132, - 0, - 0, - 33, - 8, - 0, - 0, - 49, - 140, - 0, - 0, - 66, - 16, - 0, - 0, - 82, - 148, - 0, - 0, - 99, - 24, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 148, - 164, - 0, - 0, - 165, - 40, - 0, - 0, - 181, - 172, - 0, - 0, - 198, - 48, - 0, - 0, - 214, - 180, - 0, - 0, - 231, - 56, - 0, - 0, - 247, - 188, - 0, - 0, - 247, - 188, - 0, - 0, - 231, - 56, - 0, - 0, - 214, - 180, - 0, - 0, - 198, - 48, - 0, - 0, - 181, - 172, - 0, - 0, - 165, - 40, - 0, - 0, - 148, - 164, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 99, - 24, - 0, - 0, - 82, - 148, - 0, - 0, - 66, - 16, - 0, - 0, - 49, - 140, - 0, - 0, - 33, - 8, - 0, - 0, - 16, - 132, - 0, - 0, - 0, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node interlaced-grayscale-8bit.png 1`] = ` -Object { - "data": Array [ - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 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, - 254, - 253, - 252, - 251, - 250, - 249, - 248, - 247, - 246, - 245, - 244, - 243, - 242, - 241, - 240, - 239, - 238, - 237, - 236, - 235, - 234, - 233, - 232, - 231, - 230, - 229, - 228, - 227, - 226, - 225, - 224, - 223, - 222, - 221, - 220, - 219, - 218, - 217, - 216, - 215, - 214, - 213, - 212, - 211, - 210, - 209, - 208, - 207, - 206, - 205, - 204, - 203, - 202, - 201, - 200, - 199, - 198, - 197, - 196, - 195, - 194, - 193, - 192, - 191, - 190, - 189, - 188, - 187, - 186, - 185, - 184, - 183, - 182, - 181, - 180, - 179, - 178, - 177, - 176, - 175, - 174, - 173, - 172, - 171, - 170, - 169, - 168, - 167, - 166, - 165, - 164, - 163, - 162, - 161, - 160, - 159, - 158, - 157, - 156, - 155, - 154, - 153, - 152, - 151, - 150, - 149, - 148, - 147, - 146, - 145, - 144, - 143, - 142, - 141, - 140, - 139, - 138, - 137, - 136, - 135, - 134, - 133, - 132, - 131, - 130, - 129, - 128, - 127, - 126, - 125, - 124, - 123, - 122, - 121, - 120, - 119, - 118, - 117, - 116, - 115, - 114, - 113, - 112, - 111, - 110, - 109, - 108, - 107, - 106, - 105, - 104, - 103, - 102, - 101, - 100, - 99, - 98, - 97, - 96, - 95, - 94, - 93, - 92, - 91, - 90, - 89, - 88, - 87, - 86, - 85, - 84, - 83, - 82, - 81, - 80, - 79, - 78, - 77, - 76, - 75, - 74, - 73, - 72, - 71, - 70, - 69, - 68, - 67, - 66, - 65, - 64, - 63, - 62, - 61, - 60, - 59, - 58, - 57, - 56, - 55, - 54, - 53, - 52, - 51, - 50, - 49, - 48, - 47, - 46, - 45, - 44, - 43, - 42, - 41, - 40, - 39, - 38, - 37, - 36, - 35, - 34, - 33, - 32, - 31, - 30, - 29, - 28, - 27, - 26, - 25, - 24, - 23, - 22, - 21, - 20, - 19, - 18, - 17, - 16, - 15, - 14, - 13, - 12, - 11, - 10, - 9, - 8, - 7, - 6, - 5, - 4, - 3, - 2, - 1, - 0, - 1, - 2, - 3, - ], - "type": "Buffer", -} -`; - -exports[`pixels node interlaced-pallete-8bit.png 1`] = ` -Object { - "data": Array [ - 165, - 165, - 165, - 165, - 164, - 164, - 164, - 164, - 47, - 47, - 47, - 47, - 200, - 200, - 200, - 200, - 125, - 125, - 125, - 125, - 217, - 217, - 217, - 217, - 93, - 93, - 93, - 93, - 254, - 254, - 254, - 254, - 8, - 8, - 8, - 8, - 4, - 4, - 4, - 4, - 131, - 131, - 131, - 131, - 249, - 249, - 249, - 249, - 121, - 121, - 121, - 121, - 110, - 110, - 110, - 110, - 240, - 240, - 240, - 240, - 248, - 248, - 248, - 248, - 19, - 19, - 19, - 19, - 14, - 14, - 14, - 14, - 9, - 9, - 9, - 9, - 166, - 166, - 166, - 166, - 246, - 246, - 246, - 246, - 211, - 211, - 211, - 211, - 220, - 220, - 220, - 220, - 241, - 241, - 241, - 241, - 31, - 31, - 31, - 31, - 24, - 24, - 24, - 24, - 140, - 140, - 140, - 140, - 88, - 88, - 88, - 88, - 116, - 116, - 116, - 116, - 70, - 70, - 70, - 70, - 202, - 202, - 202, - 202, - 234, - 234, - 234, - 234, - 48, - 48, - 48, - 48, - 32, - 32, - 32, - 32, - 21, - 21, - 21, - 21, - 0, - 0, - 0, - 0, - 237, - 237, - 237, - 237, - 168, - 168, - 168, - 168, - 188, - 188, - 188, - 188, - 225, - 225, - 225, - 225, - 56, - 56, - 56, - 56, - 43, - 43, - 43, - 43, - 151, - 151, - 151, - 151, - 175, - 175, - 175, - 175, - 109, - 109, - 109, - 109, - 18, - 18, - 18, - 18, - 171, - 171, - 171, - 171, - 218, - 218, - 218, - 218, - 64, - 64, - 64, - 64, - 53, - 53, - 53, - 53, - 34, - 34, - 34, - 34, - 94, - 94, - 94, - 94, - 229, - 229, - 229, - 229, - 123, - 123, - 123, - 123, - 152, - 152, - 152, - 152, - 210, - 210, - 210, - 210, - 76, - 76, - 76, - 76, - 61, - 61, - 61, - 61, - 160, - 160, - 160, - 160, - 5, - 5, - 5, - 5, - 98, - 98, - 98, - 98, - 231, - 231, - 231, - 231, - 133, - 133, - 133, - 133, - 199, - 199, - 199, - 199, - 84, - 84, - 84, - 84, - 66, - 66, - 66, - 66, - 49, - 49, - 49, - 49, - 181, - 181, - 181, - 181, - 219, - 219, - 219, - 219, - 86, - 86, - 86, - 86, - 119, - 119, - 119, - 119, - 193, - 193, - 193, - 193, - 92, - 92, - 92, - 92, - 74, - 74, - 74, - 74, - 173, - 173, - 173, - 173, - 101, - 101, - 101, - 101, - 91, - 91, - 91, - 91, - 189, - 189, - 189, - 189, - 104, - 104, - 104, - 104, - 190, - 190, - 190, - 190, - 100, - 100, - 100, - 100, - 198, - 198, - 198, - 198, - 57, - 57, - 57, - 57, - 182, - 182, - 182, - 182, - 209, - 209, - 209, - 209, - 46, - 46, - 46, - 46, - 89, - 89, - 89, - 89, - 180, - 180, - 180, - 180, - 192, - 192, - 192, - 192, - 51, - 51, - 51, - 51, - 142, - 142, - 142, - 142, - 226, - 226, - 226, - 226, - 204, - 204, - 204, - 204, - 185, - 185, - 185, - 185, - 235, - 235, - 235, - 235, - 174, - 174, - 174, - 174, - 201, - 201, - 201, - 201, - 58, - 58, - 58, - 58, - 23, - 23, - 23, - 23, - 141, - 141, - 141, - 141, - 81, - 81, - 81, - 81, - 38, - 38, - 38, - 38, - 216, - 216, - 216, - 216, - 162, - 162, - 162, - 162, - 212, - 212, - 212, - 212, - 63, - 63, - 63, - 63, - 153, - 153, - 153, - 153, - 68, - 68, - 68, - 68, - 194, - 194, - 194, - 194, - 135, - 135, - 135, - 135, - 196, - 196, - 196, - 196, - 154, - 154, - 154, - 154, - 223, - 223, - 223, - 223, - 72, - 72, - 72, - 72, - 37, - 37, - 37, - 37, - 232, - 232, - 232, - 232, - 71, - 71, - 71, - 71, - 243, - 243, - 243, - 243, - 184, - 184, - 184, - 184, - 147, - 147, - 147, - 147, - 233, - 233, - 233, - 233, - 79, - 79, - 79, - 79, - 161, - 161, - 161, - 161, - 146, - 146, - 146, - 146, - 187, - 187, - 187, - 187, - 99, - 99, - 99, - 99, - 163, - 163, - 163, - 163, - 137, - 137, - 137, - 137, - 107, - 107, - 107, - 107, - 77, - 77, - 77, - 77, - 41, - 41, - 41, - 41, - 155, - 155, - 155, - 155, - 65, - 65, - 65, - 65, - 221, - 221, - 221, - 221, - 44, - 44, - 44, - 44, - 13, - 13, - 13, - 13, - 250, - 250, - 250, - 250, - 215, - 215, - 215, - 215, - 186, - 186, - 186, - 186, - 105, - 105, - 105, - 105, - 59, - 59, - 59, - 59, - 75, - 75, - 75, - 75, - 127, - 127, - 127, - 127, - 7, - 7, - 7, - 7, - 103, - 103, - 103, - 103, - 195, - 195, - 195, - 195, - 167, - 167, - 167, - 167, - 134, - 134, - 134, - 134, - 52, - 52, - 52, - 52, - 83, - 83, - 83, - 83, - 6, - 6, - 6, - 6, - 129, - 129, - 129, - 129, - 205, - 205, - 205, - 205, - 178, - 178, - 178, - 178, - 145, - 145, - 145, - 145, - 169, - 169, - 169, - 169, - 42, - 42, - 42, - 42, - 90, - 90, - 90, - 90, - 136, - 136, - 136, - 136, - 255, - 255, - 255, - 255, - 62, - 62, - 62, - 62, - 35, - 35, - 35, - 35, - 128, - 128, - 128, - 128, - 113, - 113, - 113, - 113, - 29, - 29, - 29, - 29, - 96, - 96, - 96, - 96, - 17, - 17, - 17, - 17, - 120, - 120, - 120, - 120, - 159, - 159, - 159, - 159, - 10, - 10, - 10, - 10, - 117, - 117, - 117, - 117, - 143, - 143, - 143, - 143, - 22, - 22, - 22, - 22, - 106, - 106, - 106, - 106, - 148, - 148, - 148, - 148, - 245, - 245, - 245, - 245, - 12, - 12, - 12, - 12, - 247, - 247, - 247, - 247, - 102, - 102, - 102, - 102, - 177, - 177, - 177, - 177, - 11, - 11, - 11, - 11, - 114, - 114, - 114, - 114, - 30, - 30, - 30, - 30, - 115, - 115, - 115, - 115, - 118, - 118, - 118, - 118, - 227, - 227, - 227, - 227, - 85, - 85, - 85, - 85, - 208, - 208, - 208, - 208, - 2, - 2, - 2, - 2, - 122, - 122, - 122, - 122, - 156, - 156, - 156, - 156, - 236, - 236, - 236, - 236, - 224, - 224, - 224, - 224, - 207, - 207, - 207, - 207, - 73, - 73, - 73, - 73, - 242, - 242, - 242, - 242, - 253, - 253, - 253, - 253, - 132, - 132, - 132, - 132, - 45, - 45, - 45, - 45, - 108, - 108, - 108, - 108, - 82, - 82, - 82, - 82, - 191, - 191, - 191, - 191, - 54, - 54, - 54, - 54, - 16, - 16, - 16, - 16, - 244, - 244, - 244, - 244, - 139, - 139, - 139, - 139, - 172, - 172, - 172, - 172, - 228, - 228, - 228, - 228, - 183, - 183, - 183, - 183, - 170, - 170, - 170, - 170, - 36, - 36, - 36, - 36, - 60, - 60, - 60, - 60, - 238, - 238, - 238, - 238, - 149, - 149, - 149, - 149, - 55, - 55, - 55, - 55, - 97, - 97, - 97, - 97, - 78, - 78, - 78, - 78, - 69, - 69, - 69, - 69, - 179, - 179, - 179, - 179, - 251, - 251, - 251, - 251, - 230, - 230, - 230, - 230, - 252, - 252, - 252, - 252, - 138, - 138, - 138, - 138, - 95, - 95, - 95, - 95, - 176, - 176, - 176, - 176, - 50, - 50, - 50, - 50, - 158, - 158, - 158, - 158, - 27, - 27, - 27, - 27, - 222, - 222, - 222, - 222, - 3, - 3, - 3, - 3, - 20, - 20, - 20, - 20, - 213, - 213, - 213, - 213, - 28, - 28, - 28, - 28, - 25, - 25, - 25, - 25, - 144, - 144, - 144, - 144, - 67, - 67, - 67, - 67, - 214, - 214, - 214, - 214, - 15, - 15, - 15, - 15, - 150, - 150, - 150, - 150, - 87, - 87, - 87, - 87, - 130, - 130, - 130, - 130, - 126, - 126, - 126, - 126, - 124, - 124, - 124, - 124, - 1, - 1, - 1, - 1, - 206, - 206, - 206, - 206, - 26, - 26, - 26, - 26, - 33, - 33, - 33, - 33, - 203, - 203, - 203, - 203, - 239, - 239, - 239, - 239, - 112, - 112, - 112, - 112, - 111, - 111, - 111, - 111, - 40, - 40, - 40, - 40, - 197, - 197, - 197, - 197, - 39, - 39, - 39, - 39, - 157, - 157, - 157, - 157, - 80, - 80, - 80, - 80, - ], - "type": "Buffer", -} -`; - -exports[`pixels node interlaced-rgb-8bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 253, - 253, - 253, - 252, - 252, - 252, - 251, - 251, - 251, - 250, - 250, - 250, - 249, - 249, - 249, - 248, - 248, - 248, - 247, - 247, - 247, - 246, - 246, - 246, - 245, - 245, - 245, - 244, - 244, - 244, - 243, - 243, - 243, - 242, - 242, - 242, - 241, - 241, - 241, - 240, - 240, - 240, - 239, - 239, - 239, - 238, - 238, - 238, - 237, - 237, - 237, - 236, - 236, - 236, - 235, - 235, - 235, - 234, - 234, - 234, - 233, - 233, - 233, - 232, - 232, - 232, - 231, - 231, - 231, - 230, - 230, - 230, - 229, - 229, - 229, - 228, - 228, - 228, - 227, - 227, - 227, - 226, - 226, - 226, - 225, - 225, - 225, - 224, - 224, - 224, - 223, - 223, - 223, - 222, - 222, - 222, - 221, - 221, - 221, - 220, - 220, - 220, - 219, - 219, - 219, - 218, - 218, - 218, - 217, - 217, - 217, - 216, - 216, - 216, - 215, - 215, - 215, - 214, - 214, - 214, - 213, - 213, - 213, - 212, - 212, - 212, - 211, - 211, - 211, - 210, - 210, - 210, - 209, - 209, - 209, - 208, - 208, - 208, - 207, - 207, - 207, - 206, - 206, - 206, - 205, - 205, - 205, - 204, - 204, - 204, - 203, - 203, - 203, - 202, - 202, - 202, - 201, - 201, - 201, - 200, - 200, - 200, - 199, - 199, - 199, - 198, - 198, - 198, - 197, - 197, - 197, - 196, - 196, - 196, - 195, - 195, - 195, - 194, - 194, - 194, - 193, - 193, - 193, - 192, - 192, - 192, - 191, - 191, - 191, - 190, - 190, - 190, - 189, - 189, - 189, - 188, - 188, - 188, - 187, - 187, - 187, - 186, - 186, - 186, - 185, - 185, - 185, - 184, - 184, - 184, - 183, - 183, - 183, - 182, - 182, - 182, - 181, - 181, - 181, - 180, - 180, - 180, - 179, - 179, - 179, - 178, - 178, - 178, - 177, - 177, - 177, - 176, - 176, - 176, - 175, - 175, - 175, - 174, - 174, - 174, - 173, - 173, - 173, - 172, - 172, - 172, - 171, - 171, - 171, - 170, - 170, - 170, - 169, - 169, - 169, - 168, - 168, - 168, - 167, - 167, - 167, - 166, - 166, - 166, - 165, - 165, - 165, - 164, - 164, - 164, - 163, - 163, - 163, - 162, - 162, - 162, - 161, - 161, - 161, - 160, - 160, - 160, - 159, - 159, - 159, - 158, - 158, - 158, - 157, - 157, - 157, - 156, - 156, - 156, - 155, - 155, - 155, - 154, - 154, - 154, - 153, - 153, - 153, - 152, - 152, - 152, - 151, - 151, - 151, - 150, - 150, - 150, - 149, - 149, - 149, - 148, - 148, - 148, - 147, - 147, - 147, - 146, - 146, - 146, - 145, - 145, - 145, - 144, - 144, - 144, - 143, - 143, - 143, - 142, - 142, - 142, - 141, - 141, - 141, - 140, - 140, - 140, - 139, - 139, - 139, - 138, - 138, - 138, - 137, - 137, - 137, - 136, - 136, - 136, - 135, - 135, - 135, - 134, - 134, - 134, - 133, - 133, - 133, - 132, - 132, - 132, - 131, - 131, - 131, - 130, - 130, - 130, - 129, - 129, - 129, - 128, - 128, - 128, - 127, - 127, - 127, - 126, - 126, - 126, - 125, - 125, - 125, - 124, - 124, - 124, - 123, - 123, - 123, - 122, - 122, - 122, - 121, - 121, - 121, - 120, - 120, - 120, - 119, - 119, - 119, - 118, - 118, - 118, - 117, - 117, - 117, - 116, - 116, - 116, - 115, - 115, - 115, - 114, - 114, - 114, - 113, - 113, - 113, - 112, - 112, - 112, - 111, - 111, - 111, - 110, - 110, - 110, - 109, - 109, - 109, - 108, - 108, - 108, - 107, - 107, - 107, - 106, - 106, - 106, - 105, - 105, - 105, - 104, - 104, - 104, - 103, - 103, - 103, - 102, - 102, - 102, - 101, - 101, - 101, - 100, - 100, - 100, - 99, - 99, - 99, - 98, - 98, - 98, - 97, - 97, - 97, - 96, - 96, - 96, - 95, - 95, - 95, - 94, - 94, - 94, - 93, - 93, - 93, - 92, - 92, - 92, - 91, - 91, - 91, - 90, - 90, - 90, - 89, - 89, - 89, - 88, - 88, - 88, - 87, - 87, - 87, - 86, - 86, - 86, - 85, - 85, - 85, - 84, - 84, - 84, - 83, - 83, - 83, - 82, - 82, - 82, - 81, - 81, - 81, - 80, - 80, - 80, - 79, - 79, - 79, - 78, - 78, - 78, - 77, - 77, - 77, - 76, - 76, - 76, - 75, - 75, - 75, - 74, - 74, - 74, - 73, - 73, - 73, - 72, - 72, - 72, - 71, - 71, - 71, - 70, - 70, - 70, - 69, - 69, - 69, - 68, - 68, - 68, - 67, - 67, - 67, - 66, - 66, - 66, - 65, - 65, - 65, - 64, - 64, - 64, - 63, - 63, - 63, - 62, - 62, - 62, - 61, - 61, - 61, - 60, - 60, - 60, - 59, - 59, - 59, - 58, - 58, - 58, - 57, - 57, - 57, - 56, - 56, - 56, - 55, - 55, - 55, - 54, - 54, - 54, - 53, - 53, - 53, - 52, - 52, - 52, - 51, - 51, - 51, - 50, - 50, - 50, - 49, - 49, - 49, - 48, - 48, - 48, - 47, - 47, - 47, - 46, - 46, - 46, - 45, - 45, - 45, - 44, - 44, - 44, - 43, - 43, - 43, - 42, - 42, - 42, - 41, - 41, - 41, - 40, - 40, - 40, - 39, - 39, - 39, - 38, - 38, - 38, - 37, - 37, - 37, - 36, - 36, - 36, - 35, - 35, - 35, - 34, - 34, - 34, - 33, - 33, - 33, - 32, - 32, - 32, - 31, - 31, - 31, - 30, - 30, - 30, - 29, - 29, - 29, - 28, - 28, - 28, - 27, - 27, - 27, - 26, - 26, - 26, - 25, - 25, - 25, - 24, - 24, - 24, - 23, - 23, - 23, - 22, - 22, - 22, - 21, - 21, - 21, - 20, - 20, - 20, - 19, - 19, - 19, - 18, - 18, - 18, - 17, - 17, - 17, - 16, - 16, - 16, - 15, - 15, - 15, - 14, - 14, - 14, - 13, - 13, - 13, - 12, - 12, - 12, - 11, - 11, - 11, - 10, - 10, - 10, - 9, - 9, - 9, - 8, - 8, - 8, - 7, - 7, - 7, - 6, - 6, - 6, - 5, - 5, - 5, - 4, - 4, - 4, - 3, - 3, - 3, - 2, - 2, - 2, - 1, - 1, - 1, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node interlaced-rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 255, - 255, - 0, - 0, - 239, - 123, - 255, - 255, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 222, - 247, - 255, - 255, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 206, - 115, - 255, - 255, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 189, - 239, - 255, - 255, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 173, - 107, - 255, - 255, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 156, - 231, - 255, - 255, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 140, - 99, - 255, - 255, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 247, - 189, - 247, - 189, - 0, - 0, - 239, - 123, - 247, - 189, - 0, - 0, - 231, - 57, - 247, - 189, - 0, - 0, - 222, - 247, - 247, - 189, - 0, - 0, - 214, - 181, - 247, - 189, - 0, - 0, - 206, - 115, - 247, - 189, - 0, - 0, - 198, - 49, - 247, - 189, - 0, - 0, - 189, - 239, - 247, - 189, - 0, - 0, - 181, - 173, - 247, - 189, - 0, - 0, - 173, - 107, - 247, - 189, - 0, - 0, - 165, - 41, - 247, - 189, - 0, - 0, - 156, - 231, - 247, - 189, - 0, - 0, - 148, - 165, - 247, - 189, - 0, - 0, - 140, - 99, - 247, - 189, - 0, - 0, - 132, - 33, - 247, - 189, - 0, - 0, - 123, - 222, - 247, - 189, - 0, - 0, - 115, - 156, - 247, - 189, - 0, - 0, - 107, - 90, - 247, - 189, - 0, - 0, - 99, - 24, - 247, - 189, - 0, - 0, - 90, - 214, - 247, - 189, - 0, - 0, - 82, - 148, - 247, - 189, - 0, - 0, - 74, - 82, - 247, - 189, - 0, - 0, - 66, - 16, - 247, - 189, - 0, - 0, - 57, - 206, - 247, - 189, - 0, - 0, - 49, - 140, - 247, - 189, - 0, - 0, - 41, - 74, - 247, - 189, - 0, - 0, - 33, - 8, - 247, - 189, - 0, - 0, - 24, - 198, - 247, - 189, - 0, - 0, - 16, - 132, - 247, - 189, - 0, - 0, - 8, - 66, - 247, - 189, - 0, - 0, - 0, - 0, - 247, - 189, - 8, - 66, - 255, - 255, - 239, - 123, - 0, - 0, - 247, - 189, - 239, - 123, - 0, - 0, - 239, - 123, - 239, - 123, - 0, - 0, - 231, - 57, - 239, - 123, - 0, - 0, - 222, - 247, - 239, - 123, - 0, - 0, - 214, - 181, - 239, - 123, - 0, - 0, - 206, - 115, - 239, - 123, - 0, - 0, - 198, - 49, - 239, - 123, - 0, - 0, - 189, - 239, - 239, - 123, - 0, - 0, - 181, - 173, - 239, - 123, - 0, - 0, - 173, - 107, - 239, - 123, - 0, - 0, - 165, - 41, - 239, - 123, - 0, - 0, - 156, - 231, - 239, - 123, - 0, - 0, - 148, - 165, - 239, - 123, - 0, - 0, - 140, - 99, - 239, - 123, - 0, - 0, - 132, - 33, - 239, - 123, - 0, - 0, - 123, - 222, - 239, - 123, - 0, - 0, - 115, - 156, - 239, - 123, - 0, - 0, - 107, - 90, - 239, - 123, - 0, - 0, - 99, - 24, - 239, - 123, - 0, - 0, - 90, - 214, - 239, - 123, - 0, - 0, - 82, - 148, - 239, - 123, - 0, - 0, - 74, - 82, - 239, - 123, - 0, - 0, - 66, - 16, - 239, - 123, - 0, - 0, - 57, - 206, - 239, - 123, - 0, - 0, - 49, - 140, - 239, - 123, - 0, - 0, - 41, - 74, - 239, - 123, - 0, - 0, - 33, - 8, - 239, - 123, - 0, - 0, - 24, - 198, - 239, - 123, - 0, - 0, - 16, - 132, - 239, - 123, - 0, - 0, - 8, - 66, - 239, - 123, - 8, - 66, - 0, - 0, - 239, - 123, - 16, - 132, - 255, - 255, - 231, - 57, - 0, - 0, - 247, - 189, - 231, - 57, - 0, - 0, - 239, - 123, - 231, - 57, - 0, - 0, - 231, - 57, - 231, - 57, - 0, - 0, - 222, - 247, - 231, - 57, - 0, - 0, - 214, - 181, - 231, - 57, - 0, - 0, - 206, - 115, - 231, - 57, - 0, - 0, - 198, - 49, - 231, - 57, - 0, - 0, - 189, - 239, - 231, - 57, - 0, - 0, - 181, - 173, - 231, - 57, - 0, - 0, - 173, - 107, - 231, - 57, - 0, - 0, - 165, - 41, - 231, - 57, - 0, - 0, - 156, - 231, - 231, - 57, - 0, - 0, - 148, - 165, - 231, - 57, - 0, - 0, - 140, - 99, - 231, - 57, - 0, - 0, - 132, - 33, - 231, - 57, - 0, - 0, - 123, - 222, - 231, - 57, - 0, - 0, - 115, - 156, - 231, - 57, - 0, - 0, - 107, - 90, - 231, - 57, - 0, - 0, - 99, - 24, - 231, - 57, - 0, - 0, - 90, - 214, - 231, - 57, - 0, - 0, - 82, - 148, - 231, - 57, - 0, - 0, - 74, - 82, - 231, - 57, - 0, - 0, - 66, - 16, - 231, - 57, - 0, - 0, - 57, - 206, - 231, - 57, - 0, - 0, - 49, - 140, - 231, - 57, - 0, - 0, - 41, - 74, - 231, - 57, - 0, - 0, - 33, - 8, - 231, - 57, - 0, - 0, - 24, - 198, - 231, - 57, - 0, - 0, - 16, - 132, - 231, - 57, - 8, - 66, - 8, - 66, - 231, - 57, - 16, - 132, - 0, - 0, - 231, - 57, - 24, - 198, - 255, - 255, - 222, - 247, - 0, - 0, - 247, - 189, - 222, - 247, - 0, - 0, - 239, - 123, - 222, - 247, - 0, - 0, - 231, - 57, - 222, - 247, - 0, - 0, - 222, - 247, - 222, - 247, - 0, - 0, - 214, - 181, - 222, - 247, - 0, - 0, - 206, - 115, - 222, - 247, - 0, - 0, - 198, - 49, - 222, - 247, - 0, - 0, - 189, - 239, - 222, - 247, - 0, - 0, - 181, - 173, - 222, - 247, - 0, - 0, - 173, - 107, - 222, - 247, - 0, - 0, - 165, - 41, - 222, - 247, - 0, - 0, - 156, - 231, - 222, - 247, - 0, - 0, - 148, - 165, - 222, - 247, - 0, - 0, - 140, - 99, - 222, - 247, - 0, - 0, - 132, - 33, - 222, - 247, - 0, - 0, - 123, - 222, - 222, - 247, - 0, - 0, - 115, - 156, - 222, - 247, - 0, - 0, - 107, - 90, - 222, - 247, - 0, - 0, - 99, - 24, - 222, - 247, - 0, - 0, - 90, - 214, - 222, - 247, - 0, - 0, - 82, - 148, - 222, - 247, - 0, - 0, - 74, - 82, - 222, - 247, - 0, - 0, - 66, - 16, - 222, - 247, - 0, - 0, - 57, - 206, - 222, - 247, - 0, - 0, - 49, - 140, - 222, - 247, - 0, - 0, - 41, - 74, - 222, - 247, - 0, - 0, - 33, - 8, - 222, - 247, - 0, - 0, - 24, - 198, - 222, - 247, - 8, - 66, - 16, - 132, - 222, - 247, - 16, - 132, - 8, - 66, - 222, - 247, - 24, - 198, - 0, - 0, - 222, - 247, - 33, - 8, - 255, - 255, - 214, - 181, - 0, - 0, - 247, - 189, - 214, - 181, - 0, - 0, - 239, - 123, - 214, - 181, - 0, - 0, - 231, - 57, - 214, - 181, - 0, - 0, - 222, - 247, - 214, - 181, - 0, - 0, - 214, - 181, - 214, - 181, - 0, - 0, - 206, - 115, - 214, - 181, - 0, - 0, - 198, - 49, - 214, - 181, - 0, - 0, - 189, - 239, - 214, - 181, - 0, - 0, - 181, - 173, - 214, - 181, - 0, - 0, - 173, - 107, - 214, - 181, - 0, - 0, - 165, - 41, - 214, - 181, - 0, - 0, - 156, - 231, - 214, - 181, - 0, - 0, - 148, - 165, - 214, - 181, - 0, - 0, - 140, - 99, - 214, - 181, - 0, - 0, - 132, - 33, - 214, - 181, - 0, - 0, - 123, - 222, - 214, - 181, - 0, - 0, - 115, - 156, - 214, - 181, - 0, - 0, - 107, - 90, - 214, - 181, - 0, - 0, - 99, - 24, - 214, - 181, - 0, - 0, - 90, - 214, - 214, - 181, - 0, - 0, - 82, - 148, - 214, - 181, - 0, - 0, - 74, - 82, - 214, - 181, - 0, - 0, - 66, - 16, - 214, - 181, - 0, - 0, - 57, - 206, - 214, - 181, - 0, - 0, - 49, - 140, - 214, - 181, - 0, - 0, - 41, - 74, - 214, - 181, - 0, - 0, - 33, - 8, - 214, - 181, - 8, - 66, - 24, - 198, - 214, - 181, - 16, - 132, - 16, - 132, - 214, - 181, - 24, - 198, - 8, - 66, - 214, - 181, - 33, - 8, - 0, - 0, - 214, - 181, - 41, - 74, - 255, - 255, - 206, - 115, - 0, - 0, - 247, - 189, - 206, - 115, - 0, - 0, - 239, - 123, - 206, - 115, - 0, - 0, - 231, - 57, - 206, - 115, - 0, - 0, - 222, - 247, - 206, - 115, - 0, - 0, - 214, - 181, - 206, - 115, - 0, - 0, - 206, - 115, - 206, - 115, - 0, - 0, - 198, - 49, - 206, - 115, - 0, - 0, - 189, - 239, - 206, - 115, - 0, - 0, - 181, - 173, - 206, - 115, - 0, - 0, - 173, - 107, - 206, - 115, - 0, - 0, - 165, - 41, - 206, - 115, - 0, - 0, - 156, - 231, - 206, - 115, - 0, - 0, - 148, - 165, - 206, - 115, - 0, - 0, - 140, - 99, - 206, - 115, - 0, - 0, - 132, - 33, - 206, - 115, - 0, - 0, - 123, - 222, - 206, - 115, - 0, - 0, - 115, - 156, - 206, - 115, - 0, - 0, - 107, - 90, - 206, - 115, - 0, - 0, - 99, - 24, - 206, - 115, - 0, - 0, - 90, - 214, - 206, - 115, - 0, - 0, - 82, - 148, - 206, - 115, - 0, - 0, - 74, - 82, - 206, - 115, - 0, - 0, - 66, - 16, - 206, - 115, - 0, - 0, - 57, - 206, - 206, - 115, - 0, - 0, - 49, - 140, - 206, - 115, - 0, - 0, - 41, - 74, - 206, - 115, - 8, - 66, - 33, - 8, - 206, - 115, - 16, - 132, - 24, - 198, - 206, - 115, - 24, - 198, - 16, - 132, - 206, - 115, - 33, - 8, - 8, - 66, - 206, - 115, - 41, - 74, - 0, - 0, - 206, - 115, - 49, - 140, - 255, - 255, - 198, - 49, - 0, - 0, - 247, - 189, - 198, - 49, - 0, - 0, - 239, - 123, - 198, - 49, - 0, - 0, - 231, - 57, - 198, - 49, - 0, - 0, - 222, - 247, - 198, - 49, - 0, - 0, - 214, - 181, - 198, - 49, - 0, - 0, - 206, - 115, - 198, - 49, - 0, - 0, - 198, - 49, - 198, - 49, - 0, - 0, - 189, - 239, - 198, - 49, - 0, - 0, - 181, - 173, - 198, - 49, - 0, - 0, - 173, - 107, - 198, - 49, - 0, - 0, - 165, - 41, - 198, - 49, - 0, - 0, - 156, - 231, - 198, - 49, - 0, - 0, - 148, - 165, - 198, - 49, - 0, - 0, - 140, - 99, - 198, - 49, - 0, - 0, - 132, - 33, - 198, - 49, - 0, - 0, - 123, - 222, - 198, - 49, - 0, - 0, - 115, - 156, - 198, - 49, - 0, - 0, - 107, - 90, - 198, - 49, - 0, - 0, - 99, - 24, - 198, - 49, - 0, - 0, - 90, - 214, - 198, - 49, - 0, - 0, - 82, - 148, - 198, - 49, - 0, - 0, - 74, - 82, - 198, - 49, - 0, - 0, - 66, - 16, - 198, - 49, - 0, - 0, - 57, - 206, - 198, - 49, - 0, - 0, - 49, - 140, - 198, - 49, - 8, - 66, - 41, - 74, - 198, - 49, - 16, - 132, - 33, - 8, - 198, - 49, - 24, - 198, - 24, - 198, - 198, - 49, - 33, - 8, - 16, - 132, - 198, - 49, - 41, - 74, - 8, - 66, - 198, - 49, - 49, - 140, - 0, - 0, - 198, - 49, - 57, - 206, - 255, - 255, - 189, - 239, - 0, - 0, - 247, - 189, - 189, - 239, - 0, - 0, - 239, - 123, - 189, - 239, - 0, - 0, - 231, - 57, - 189, - 239, - 0, - 0, - 222, - 247, - 189, - 239, - 0, - 0, - 214, - 181, - 189, - 239, - 0, - 0, - 206, - 115, - 189, - 239, - 0, - 0, - 198, - 49, - 189, - 239, - 0, - 0, - 189, - 239, - 189, - 239, - 0, - 0, - 181, - 173, - 189, - 239, - 0, - 0, - 173, - 107, - 189, - 239, - 0, - 0, - 165, - 41, - 189, - 239, - 0, - 0, - 156, - 231, - 189, - 239, - 0, - 0, - 148, - 165, - 189, - 239, - 0, - 0, - 140, - 99, - 189, - 239, - 0, - 0, - 132, - 33, - 189, - 239, - 0, - 0, - 123, - 222, - 189, - 239, - 0, - 0, - 115, - 156, - 189, - 239, - 0, - 0, - 107, - 90, - 189, - 239, - 0, - 0, - 99, - 24, - 189, - 239, - 0, - 0, - 90, - 214, - 189, - 239, - 0, - 0, - 82, - 148, - 189, - 239, - 0, - 0, - 74, - 82, - 189, - 239, - 0, - 0, - 66, - 16, - 189, - 239, - 0, - 0, - 57, - 206, - 189, - 239, - 8, - 66, - 49, - 140, - 189, - 239, - 16, - 132, - 41, - 74, - 189, - 239, - 24, - 198, - 33, - 8, - 189, - 239, - 33, - 8, - 24, - 198, - 189, - 239, - 41, - 74, - 16, - 132, - 189, - 239, - 49, - 140, - 8, - 66, - 189, - 239, - 57, - 206, - 0, - 0, - 189, - 239, - 66, - 16, - 255, - 255, - 181, - 173, - 0, - 0, - 247, - 189, - 181, - 173, - 0, - 0, - 239, - 123, - 181, - 173, - 0, - 0, - 231, - 57, - 181, - 173, - 0, - 0, - 222, - 247, - 181, - 173, - 0, - 0, - 214, - 181, - 181, - 173, - 0, - 0, - 206, - 115, - 181, - 173, - 0, - 0, - 198, - 49, - 181, - 173, - 0, - 0, - 189, - 239, - 181, - 173, - 0, - 0, - 181, - 173, - 181, - 173, - 0, - 0, - 173, - 107, - 181, - 173, - 0, - 0, - 165, - 41, - 181, - 173, - 0, - 0, - 156, - 231, - 181, - 173, - 0, - 0, - 148, - 165, - 181, - 173, - 0, - 0, - 140, - 99, - 181, - 173, - 0, - 0, - 132, - 33, - 181, - 173, - 0, - 0, - 123, - 222, - 181, - 173, - 0, - 0, - 115, - 156, - 181, - 173, - 0, - 0, - 107, - 90, - 181, - 173, - 0, - 0, - 99, - 24, - 181, - 173, - 0, - 0, - 90, - 214, - 181, - 173, - 0, - 0, - 82, - 148, - 181, - 173, - 0, - 0, - 74, - 82, - 181, - 173, - 0, - 0, - 66, - 16, - 181, - 173, - 8, - 66, - 57, - 206, - 181, - 173, - 16, - 132, - 49, - 140, - 181, - 173, - 24, - 198, - 41, - 74, - 181, - 173, - 33, - 8, - 33, - 8, - 181, - 173, - 41, - 74, - 24, - 198, - 181, - 173, - 49, - 140, - 16, - 132, - 181, - 173, - 57, - 206, - 8, - 66, - 181, - 173, - 66, - 16, - 0, - 0, - 181, - 173, - 74, - 82, - 255, - 255, - 173, - 107, - 0, - 0, - 247, - 189, - 173, - 107, - 0, - 0, - 239, - 123, - 173, - 107, - 0, - 0, - 231, - 57, - 173, - 107, - 0, - 0, - 222, - 247, - 173, - 107, - 0, - 0, - 214, - 181, - 173, - 107, - 0, - 0, - 206, - 115, - 173, - 107, - 0, - 0, - 198, - 49, - 173, - 107, - 0, - 0, - 189, - 239, - 173, - 107, - 0, - 0, - 181, - 173, - 173, - 107, - 0, - 0, - 173, - 107, - 173, - 107, - 0, - 0, - 165, - 41, - 173, - 107, - 0, - 0, - 156, - 231, - 173, - 107, - 0, - 0, - 148, - 165, - 173, - 107, - 0, - 0, - 140, - 99, - 173, - 107, - 0, - 0, - 132, - 33, - 173, - 107, - 0, - 0, - 123, - 222, - 173, - 107, - 0, - 0, - 115, - 156, - 173, - 107, - 0, - 0, - 107, - 90, - 173, - 107, - 0, - 0, - 99, - 24, - 173, - 107, - 0, - 0, - 90, - 214, - 173, - 107, - 0, - 0, - 82, - 148, - 173, - 107, - 0, - 0, - 74, - 82, - 173, - 107, - 8, - 66, - 66, - 16, - 173, - 107, - 16, - 132, - 57, - 206, - 173, - 107, - 24, - 198, - 49, - 140, - 173, - 107, - 33, - 8, - 41, - 74, - 173, - 107, - 41, - 74, - 33, - 8, - 173, - 107, - 49, - 140, - 24, - 198, - 173, - 107, - 57, - 206, - 16, - 132, - 173, - 107, - 66, - 16, - 8, - 66, - 173, - 107, - 74, - 82, - 0, - 0, - 173, - 107, - 82, - 148, - 255, - 255, - 165, - 41, - 0, - 0, - 247, - 189, - 165, - 41, - 0, - 0, - 239, - 123, - 165, - 41, - 0, - 0, - 231, - 57, - 165, - 41, - 0, - 0, - 222, - 247, - 165, - 41, - 0, - 0, - 214, - 181, - 165, - 41, - 0, - 0, - 206, - 115, - 165, - 41, - 0, - 0, - 198, - 49, - 165, - 41, - 0, - 0, - 189, - 239, - 165, - 41, - 0, - 0, - 181, - 173, - 165, - 41, - 0, - 0, - 173, - 107, - 165, - 41, - 0, - 0, - 165, - 41, - 165, - 41, - 0, - 0, - 156, - 231, - 165, - 41, - 0, - 0, - 148, - 165, - 165, - 41, - 0, - 0, - 140, - 99, - 165, - 41, - 0, - 0, - 132, - 33, - 165, - 41, - 0, - 0, - 123, - 222, - 165, - 41, - 0, - 0, - 115, - 156, - 165, - 41, - 0, - 0, - 107, - 90, - 165, - 41, - 0, - 0, - 99, - 24, - 165, - 41, - 0, - 0, - 90, - 214, - 165, - 41, - 0, - 0, - 82, - 148, - 165, - 41, - 8, - 66, - 74, - 82, - 165, - 41, - 16, - 132, - 66, - 16, - 165, - 41, - 24, - 198, - 57, - 206, - 165, - 41, - 33, - 8, - 49, - 140, - 165, - 41, - 41, - 74, - 41, - 74, - 165, - 41, - 49, - 140, - 33, - 8, - 165, - 41, - 57, - 206, - 24, - 198, - 165, - 41, - 66, - 16, - 16, - 132, - 165, - 41, - 74, - 82, - 8, - 66, - 165, - 41, - 82, - 148, - 0, - 0, - 165, - 41, - 90, - 214, - 255, - 255, - 156, - 231, - 0, - 0, - 247, - 189, - 156, - 231, - 0, - 0, - 239, - 123, - 156, - 231, - 0, - 0, - 231, - 57, - 156, - 231, - 0, - 0, - 222, - 247, - 156, - 231, - 0, - 0, - 214, - 181, - 156, - 231, - 0, - 0, - 206, - 115, - 156, - 231, - 0, - 0, - 198, - 49, - 156, - 231, - 0, - 0, - 189, - 239, - 156, - 231, - 0, - 0, - 181, - 173, - 156, - 231, - 0, - 0, - 173, - 107, - 156, - 231, - 0, - 0, - 165, - 41, - 156, - 231, - 0, - 0, - 156, - 231, - 156, - 231, - 0, - 0, - 148, - 165, - 156, - 231, - 0, - 0, - 140, - 99, - 156, - 231, - 0, - 0, - 132, - 33, - 156, - 231, - 0, - 0, - 123, - 222, - 156, - 231, - 0, - 0, - 115, - 156, - 156, - 231, - 0, - 0, - 107, - 90, - 156, - 231, - 0, - 0, - 99, - 24, - 156, - 231, - 0, - 0, - 90, - 214, - 156, - 231, - 8, - 66, - 82, - 148, - 156, - 231, - 16, - 132, - 74, - 82, - 156, - 231, - 24, - 198, - 66, - 16, - 156, - 231, - 33, - 8, - 57, - 206, - 156, - 231, - 41, - 74, - 49, - 140, - 156, - 231, - 49, - 140, - 41, - 74, - 156, - 231, - 57, - 206, - 33, - 8, - 156, - 231, - 66, - 16, - 24, - 198, - 156, - 231, - 74, - 82, - 16, - 132, - 156, - 231, - 82, - 148, - 8, - 66, - 156, - 231, - 90, - 214, - 0, - 0, - 156, - 231, - 99, - 24, - 255, - 255, - 148, - 165, - 0, - 0, - 247, - 189, - 148, - 165, - 0, - 0, - 239, - 123, - 148, - 165, - 0, - 0, - 231, - 57, - 148, - 165, - 0, - 0, - 222, - 247, - 148, - 165, - 0, - 0, - 214, - 181, - 148, - 165, - 0, - 0, - 206, - 115, - 148, - 165, - 0, - 0, - 198, - 49, - 148, - 165, - 0, - 0, - 189, - 239, - 148, - 165, - 0, - 0, - 181, - 173, - 148, - 165, - 0, - 0, - 173, - 107, - 148, - 165, - 0, - 0, - 165, - 41, - 148, - 165, - 0, - 0, - 156, - 231, - 148, - 165, - 0, - 0, - 148, - 165, - 148, - 165, - 0, - 0, - 140, - 99, - 148, - 165, - 0, - 0, - 132, - 33, - 148, - 165, - 0, - 0, - 123, - 222, - 148, - 165, - 0, - 0, - 115, - 156, - 148, - 165, - 0, - 0, - 107, - 90, - 148, - 165, - 0, - 0, - 99, - 24, - 148, - 165, - 8, - 66, - 90, - 214, - 148, - 165, - 16, - 132, - 82, - 148, - 148, - 165, - 24, - 198, - 74, - 82, - 148, - 165, - 33, - 8, - 66, - 16, - 148, - 165, - 41, - 74, - 57, - 206, - 148, - 165, - 49, - 140, - 49, - 140, - 148, - 165, - 57, - 206, - 41, - 74, - 148, - 165, - 66, - 16, - 33, - 8, - 148, - 165, - 74, - 82, - 24, - 198, - 148, - 165, - 82, - 148, - 16, - 132, - 148, - 165, - 90, - 214, - 8, - 66, - 148, - 165, - 99, - 24, - 0, - 0, - 148, - 165, - 107, - 90, - 255, - 255, - 140, - 99, - 0, - 0, - 247, - 189, - 140, - 99, - 0, - 0, - 239, - 123, - 140, - 99, - 0, - 0, - 231, - 57, - 140, - 99, - 0, - 0, - 222, - 247, - 140, - 99, - 0, - 0, - 214, - 181, - 140, - 99, - 0, - 0, - 206, - 115, - 140, - 99, - 0, - 0, - 198, - 49, - 140, - 99, - 0, - 0, - 189, - 239, - 140, - 99, - 0, - 0, - 181, - 173, - 140, - 99, - 0, - 0, - 173, - 107, - 140, - 99, - 0, - 0, - 165, - 41, - 140, - 99, - 0, - 0, - 156, - 231, - 140, - 99, - 0, - 0, - 148, - 165, - 140, - 99, - 0, - 0, - 140, - 99, - 140, - 99, - 0, - 0, - 132, - 33, - 140, - 99, - 0, - 0, - 123, - 222, - 140, - 99, - 0, - 0, - 115, - 156, - 140, - 99, - 0, - 0, - 107, - 90, - 140, - 99, - 8, - 66, - 99, - 24, - 140, - 99, - 16, - 132, - 90, - 214, - 140, - 99, - 24, - 198, - 82, - 148, - 140, - 99, - 33, - 8, - 74, - 82, - 140, - 99, - 41, - 74, - 66, - 16, - 140, - 99, - 49, - 140, - 57, - 206, - 140, - 99, - 57, - 206, - 49, - 140, - 140, - 99, - 66, - 16, - 41, - 74, - 140, - 99, - 74, - 82, - 33, - 8, - 140, - 99, - 82, - 148, - 24, - 198, - 140, - 99, - 90, - 214, - 16, - 132, - 140, - 99, - 99, - 24, - 8, - 66, - 140, - 99, - 107, - 90, - 0, - 0, - 140, - 99, - 115, - 156, - 255, - 255, - 132, - 33, - 0, - 0, - 247, - 189, - 132, - 33, - 0, - 0, - 239, - 123, - 132, - 33, - 0, - 0, - 231, - 57, - 132, - 33, - 0, - 0, - 222, - 247, - 132, - 33, - 0, - 0, - 214, - 181, - 132, - 33, - 0, - 0, - 206, - 115, - 132, - 33, - 0, - 0, - 198, - 49, - 132, - 33, - 0, - 0, - 189, - 239, - 132, - 33, - 0, - 0, - 181, - 173, - 132, - 33, - 0, - 0, - 173, - 107, - 132, - 33, - 0, - 0, - 165, - 41, - 132, - 33, - 0, - 0, - 156, - 231, - 132, - 33, - 0, - 0, - 148, - 165, - 132, - 33, - 0, - 0, - 140, - 99, - 132, - 33, - 0, - 0, - 132, - 33, - 132, - 33, - 0, - 0, - 123, - 222, - 132, - 33, - 0, - 0, - 115, - 156, - 132, - 33, - 8, - 66, - 107, - 90, - 132, - 33, - 16, - 132, - 99, - 24, - 132, - 33, - 24, - 198, - 90, - 214, - 132, - 33, - 33, - 8, - 82, - 148, - 132, - 33, - 41, - 74, - 74, - 82, - 132, - 33, - 49, - 140, - 66, - 16, - 132, - 33, - 57, - 206, - 57, - 206, - 132, - 33, - 66, - 16, - 49, - 140, - 132, - 33, - 74, - 82, - 41, - 74, - 132, - 33, - 82, - 148, - 33, - 8, - 132, - 33, - 90, - 214, - 24, - 198, - 132, - 33, - 99, - 24, - 16, - 132, - 132, - 33, - 107, - 90, - 8, - 66, - 132, - 33, - 115, - 156, - 0, - 0, - 132, - 33, - 123, - 222, - 255, - 255, - 123, - 222, - 0, - 0, - 247, - 189, - 123, - 222, - 0, - 0, - 239, - 123, - 123, - 222, - 0, - 0, - 231, - 57, - 123, - 222, - 0, - 0, - 222, - 247, - 123, - 222, - 0, - 0, - 214, - 181, - 123, - 222, - 0, - 0, - 206, - 115, - 123, - 222, - 0, - 0, - 198, - 49, - 123, - 222, - 0, - 0, - 189, - 239, - 123, - 222, - 0, - 0, - 181, - 173, - 123, - 222, - 0, - 0, - 173, - 107, - 123, - 222, - 0, - 0, - 165, - 41, - 123, - 222, - 0, - 0, - 156, - 231, - 123, - 222, - 0, - 0, - 148, - 165, - 123, - 222, - 0, - 0, - 140, - 99, - 123, - 222, - 0, - 0, - 132, - 33, - 123, - 222, - 0, - 0, - 123, - 222, - 123, - 222, - 8, - 66, - 115, - 156, - 123, - 222, - 16, - 132, - 107, - 90, - 123, - 222, - 24, - 198, - 99, - 24, - 123, - 222, - 33, - 8, - 90, - 214, - 123, - 222, - 41, - 74, - 82, - 148, - 123, - 222, - 49, - 140, - 74, - 82, - 123, - 222, - 57, - 206, - 66, - 16, - 123, - 222, - 66, - 16, - 57, - 206, - 123, - 222, - 74, - 82, - 49, - 140, - 123, - 222, - 82, - 148, - 41, - 74, - 123, - 222, - 90, - 214, - 33, - 8, - 123, - 222, - 99, - 24, - 24, - 198, - 123, - 222, - 107, - 90, - 16, - 132, - 123, - 222, - 115, - 156, - 8, - 66, - 123, - 222, - 123, - 222, - 0, - 0, - 123, - 222, - 132, - 33, - 255, - 255, - 115, - 156, - 0, - 0, - 247, - 189, - 115, - 156, - 0, - 0, - 239, - 123, - 115, - 156, - 0, - 0, - 231, - 57, - 115, - 156, - 0, - 0, - 222, - 247, - 115, - 156, - 0, - 0, - 214, - 181, - 115, - 156, - 0, - 0, - 206, - 115, - 115, - 156, - 0, - 0, - 198, - 49, - 115, - 156, - 0, - 0, - 189, - 239, - 115, - 156, - 0, - 0, - 181, - 173, - 115, - 156, - 0, - 0, - 173, - 107, - 115, - 156, - 0, - 0, - 165, - 41, - 115, - 156, - 0, - 0, - 156, - 231, - 115, - 156, - 0, - 0, - 148, - 165, - 115, - 156, - 0, - 0, - 140, - 99, - 115, - 156, - 0, - 0, - 132, - 33, - 115, - 156, - 8, - 66, - 123, - 222, - 115, - 156, - 16, - 132, - 115, - 156, - 115, - 156, - 24, - 198, - 107, - 90, - 115, - 156, - 33, - 8, - 99, - 24, - 115, - 156, - 41, - 74, - 90, - 214, - 115, - 156, - 49, - 140, - 82, - 148, - 115, - 156, - 57, - 206, - 74, - 82, - 115, - 156, - 66, - 16, - 66, - 16, - 115, - 156, - 74, - 82, - 57, - 206, - 115, - 156, - 82, - 148, - 49, - 140, - 115, - 156, - 90, - 214, - 41, - 74, - 115, - 156, - 99, - 24, - 33, - 8, - 115, - 156, - 107, - 90, - 24, - 198, - 115, - 156, - 115, - 156, - 16, - 132, - 115, - 156, - 123, - 222, - 8, - 66, - 115, - 156, - 132, - 33, - 0, - 0, - 115, - 156, - 140, - 99, - 255, - 255, - 107, - 90, - 0, - 0, - 247, - 189, - 107, - 90, - 0, - 0, - 239, - 123, - 107, - 90, - 0, - 0, - 231, - 57, - 107, - 90, - 0, - 0, - 222, - 247, - 107, - 90, - 0, - 0, - 214, - 181, - 107, - 90, - 0, - 0, - 206, - 115, - 107, - 90, - 0, - 0, - 198, - 49, - 107, - 90, - 0, - 0, - 189, - 239, - 107, - 90, - 0, - 0, - 181, - 173, - 107, - 90, - 0, - 0, - 173, - 107, - 107, - 90, - 0, - 0, - 165, - 41, - 107, - 90, - 0, - 0, - 156, - 231, - 107, - 90, - 0, - 0, - 148, - 165, - 107, - 90, - 0, - 0, - 140, - 99, - 107, - 90, - 8, - 66, - 132, - 33, - 107, - 90, - 16, - 132, - 123, - 222, - 107, - 90, - 24, - 198, - 115, - 156, - 107, - 90, - 33, - 8, - 107, - 90, - 107, - 90, - 41, - 74, - 99, - 24, - 107, - 90, - 49, - 140, - 90, - 214, - 107, - 90, - 57, - 206, - 82, - 148, - 107, - 90, - 66, - 16, - 74, - 82, - 107, - 90, - 74, - 82, - 66, - 16, - 107, - 90, - 82, - 148, - 57, - 206, - 107, - 90, - 90, - 214, - 49, - 140, - 107, - 90, - 99, - 24, - 41, - 74, - 107, - 90, - 107, - 90, - 33, - 8, - 107, - 90, - 115, - 156, - 24, - 198, - 107, - 90, - 123, - 222, - 16, - 132, - 107, - 90, - 132, - 33, - 8, - 66, - 107, - 90, - 140, - 99, - 0, - 0, - 107, - 90, - 148, - 165, - 255, - 255, - 99, - 24, - 0, - 0, - 247, - 189, - 99, - 24, - 0, - 0, - 239, - 123, - 99, - 24, - 0, - 0, - 231, - 57, - 99, - 24, - 0, - 0, - 222, - 247, - 99, - 24, - 0, - 0, - 214, - 181, - 99, - 24, - 0, - 0, - 206, - 115, - 99, - 24, - 0, - 0, - 198, - 49, - 99, - 24, - 0, - 0, - 189, - 239, - 99, - 24, - 0, - 0, - 181, - 173, - 99, - 24, - 0, - 0, - 173, - 107, - 99, - 24, - 0, - 0, - 165, - 41, - 99, - 24, - 0, - 0, - 156, - 231, - 99, - 24, - 0, - 0, - 148, - 165, - 99, - 24, - 8, - 66, - 140, - 99, - 99, - 24, - 16, - 132, - 132, - 33, - 99, - 24, - 24, - 198, - 123, - 222, - 99, - 24, - 33, - 8, - 115, - 156, - 99, - 24, - 41, - 74, - 107, - 90, - 99, - 24, - 49, - 140, - 99, - 24, - 99, - 24, - 57, - 206, - 90, - 214, - 99, - 24, - 66, - 16, - 82, - 148, - 99, - 24, - 74, - 82, - 74, - 82, - 99, - 24, - 82, - 148, - 66, - 16, - 99, - 24, - 90, - 214, - 57, - 206, - 99, - 24, - 99, - 24, - 49, - 140, - 99, - 24, - 107, - 90, - 41, - 74, - 99, - 24, - 115, - 156, - 33, - 8, - 99, - 24, - 123, - 222, - 24, - 198, - 99, - 24, - 132, - 33, - 16, - 132, - 99, - 24, - 140, - 99, - 8, - 66, - 99, - 24, - 148, - 165, - 0, - 0, - 99, - 24, - 156, - 231, - 255, - 255, - 90, - 214, - 0, - 0, - 247, - 189, - 90, - 214, - 0, - 0, - 239, - 123, - 90, - 214, - 0, - 0, - 231, - 57, - 90, - 214, - 0, - 0, - 222, - 247, - 90, - 214, - 0, - 0, - 214, - 181, - 90, - 214, - 0, - 0, - 206, - 115, - 90, - 214, - 0, - 0, - 198, - 49, - 90, - 214, - 0, - 0, - 189, - 239, - 90, - 214, - 0, - 0, - 181, - 173, - 90, - 214, - 0, - 0, - 173, - 107, - 90, - 214, - 0, - 0, - 165, - 41, - 90, - 214, - 0, - 0, - 156, - 231, - 90, - 214, - 8, - 66, - 148, - 165, - 90, - 214, - 16, - 132, - 140, - 99, - 90, - 214, - 24, - 198, - 132, - 33, - 90, - 214, - 33, - 8, - 123, - 222, - 90, - 214, - 41, - 74, - 115, - 156, - 90, - 214, - 49, - 140, - 107, - 90, - 90, - 214, - 57, - 206, - 99, - 24, - 90, - 214, - 66, - 16, - 90, - 214, - 90, - 214, - 74, - 82, - 82, - 148, - 90, - 214, - 82, - 148, - 74, - 82, - 90, - 214, - 90, - 214, - 66, - 16, - 90, - 214, - 99, - 24, - 57, - 206, - 90, - 214, - 107, - 90, - 49, - 140, - 90, - 214, - 115, - 156, - 41, - 74, - 90, - 214, - 123, - 222, - 33, - 8, - 90, - 214, - 132, - 33, - 24, - 198, - 90, - 214, - 140, - 99, - 16, - 132, - 90, - 214, - 148, - 165, - 8, - 66, - 90, - 214, - 156, - 231, - 0, - 0, - 90, - 214, - 165, - 41, - 255, - 255, - 82, - 148, - 0, - 0, - 247, - 189, - 82, - 148, - 0, - 0, - 239, - 123, - 82, - 148, - 0, - 0, - 231, - 57, - 82, - 148, - 0, - 0, - 222, - 247, - 82, - 148, - 0, - 0, - 214, - 181, - 82, - 148, - 0, - 0, - 206, - 115, - 82, - 148, - 0, - 0, - 198, - 49, - 82, - 148, - 0, - 0, - 189, - 239, - 82, - 148, - 0, - 0, - 181, - 173, - 82, - 148, - 0, - 0, - 173, - 107, - 82, - 148, - 0, - 0, - 165, - 41, - 82, - 148, - 8, - 66, - 156, - 231, - 82, - 148, - 16, - 132, - 148, - 165, - 82, - 148, - 24, - 198, - 140, - 99, - 82, - 148, - 33, - 8, - 132, - 33, - 82, - 148, - 41, - 74, - 123, - 222, - 82, - 148, - 49, - 140, - 115, - 156, - 82, - 148, - 57, - 206, - 107, - 90, - 82, - 148, - 66, - 16, - 99, - 24, - 82, - 148, - 74, - 82, - 90, - 214, - 82, - 148, - 82, - 148, - 82, - 148, - 82, - 148, - 90, - 214, - 74, - 82, - 82, - 148, - 99, - 24, - 66, - 16, - 82, - 148, - 107, - 90, - 57, - 206, - 82, - 148, - 115, - 156, - 49, - 140, - 82, - 148, - 123, - 222, - 41, - 74, - 82, - 148, - 132, - 33, - 33, - 8, - 82, - 148, - 140, - 99, - 24, - 198, - 82, - 148, - 148, - 165, - 16, - 132, - 82, - 148, - 156, - 231, - 8, - 66, - 82, - 148, - 165, - 41, - 0, - 0, - 82, - 148, - 173, - 107, - 255, - 255, - 74, - 82, - 0, - 0, - 247, - 189, - 74, - 82, - 0, - 0, - 239, - 123, - 74, - 82, - 0, - 0, - 231, - 57, - 74, - 82, - 0, - 0, - 222, - 247, - 74, - 82, - 0, - 0, - 214, - 181, - 74, - 82, - 0, - 0, - 206, - 115, - 74, - 82, - 0, - 0, - 198, - 49, - 74, - 82, - 0, - 0, - 189, - 239, - 74, - 82, - 0, - 0, - 181, - 173, - 74, - 82, - 0, - 0, - 173, - 107, - 74, - 82, - 8, - 66, - 165, - 41, - 74, - 82, - 16, - 132, - 156, - 231, - 74, - 82, - 24, - 198, - 148, - 165, - 74, - 82, - 33, - 8, - 140, - 99, - 74, - 82, - 41, - 74, - 132, - 33, - 74, - 82, - 49, - 140, - 123, - 222, - 74, - 82, - 57, - 206, - 115, - 156, - 74, - 82, - 66, - 16, - 107, - 90, - 74, - 82, - 74, - 82, - 99, - 24, - 74, - 82, - 82, - 148, - 90, - 214, - 74, - 82, - 90, - 214, - 82, - 148, - 74, - 82, - 99, - 24, - 74, - 82, - 74, - 82, - 107, - 90, - 66, - 16, - 74, - 82, - 115, - 156, - 57, - 206, - 74, - 82, - 123, - 222, - 49, - 140, - 74, - 82, - 132, - 33, - 41, - 74, - 74, - 82, - 140, - 99, - 33, - 8, - 74, - 82, - 148, - 165, - 24, - 198, - 74, - 82, - 156, - 231, - 16, - 132, - 74, - 82, - 165, - 41, - 8, - 66, - 74, - 82, - 173, - 107, - 0, - 0, - 74, - 82, - 181, - 173, - 255, - 255, - 66, - 16, - 0, - 0, - 247, - 189, - 66, - 16, - 0, - 0, - 239, - 123, - 66, - 16, - 0, - 0, - 231, - 57, - 66, - 16, - 0, - 0, - 222, - 247, - 66, - 16, - 0, - 0, - 214, - 181, - 66, - 16, - 0, - 0, - 206, - 115, - 66, - 16, - 0, - 0, - 198, - 49, - 66, - 16, - 0, - 0, - 189, - 239, - 66, - 16, - 0, - 0, - 181, - 173, - 66, - 16, - 8, - 66, - 173, - 107, - 66, - 16, - 16, - 132, - 165, - 41, - 66, - 16, - 24, - 198, - 156, - 231, - 66, - 16, - 33, - 8, - 148, - 165, - 66, - 16, - 41, - 74, - 140, - 99, - 66, - 16, - 49, - 140, - 132, - 33, - 66, - 16, - 57, - 206, - 123, - 222, - 66, - 16, - 66, - 16, - 115, - 156, - 66, - 16, - 74, - 82, - 107, - 90, - 66, - 16, - 82, - 148, - 99, - 24, - 66, - 16, - 90, - 214, - 90, - 214, - 66, - 16, - 99, - 24, - 82, - 148, - 66, - 16, - 107, - 90, - 74, - 82, - 66, - 16, - 115, - 156, - 66, - 16, - 66, - 16, - 123, - 222, - 57, - 206, - 66, - 16, - 132, - 33, - 49, - 140, - 66, - 16, - 140, - 99, - 41, - 74, - 66, - 16, - 148, - 165, - 33, - 8, - 66, - 16, - 156, - 231, - 24, - 198, - 66, - 16, - 165, - 41, - 16, - 132, - 66, - 16, - 173, - 107, - 8, - 66, - 66, - 16, - 181, - 173, - 0, - 0, - 66, - 16, - 189, - 239, - 255, - 255, - 57, - 206, - 0, - 0, - 247, - 189, - 57, - 206, - 0, - 0, - 239, - 123, - 57, - 206, - 0, - 0, - 231, - 57, - 57, - 206, - 0, - 0, - 222, - 247, - 57, - 206, - 0, - 0, - 214, - 181, - 57, - 206, - 0, - 0, - 206, - 115, - 57, - 206, - 0, - 0, - 198, - 49, - 57, - 206, - 0, - 0, - 189, - 239, - 57, - 206, - 8, - 66, - 181, - 173, - 57, - 206, - 16, - 132, - 173, - 107, - 57, - 206, - 24, - 198, - 165, - 41, - 57, - 206, - 33, - 8, - 156, - 231, - 57, - 206, - 41, - 74, - 148, - 165, - 57, - 206, - 49, - 140, - 140, - 99, - 57, - 206, - 57, - 206, - 132, - 33, - 57, - 206, - 66, - 16, - 123, - 222, - 57, - 206, - 74, - 82, - 115, - 156, - 57, - 206, - 82, - 148, - 107, - 90, - 57, - 206, - 90, - 214, - 99, - 24, - 57, - 206, - 99, - 24, - 90, - 214, - 57, - 206, - 107, - 90, - 82, - 148, - 57, - 206, - 115, - 156, - 74, - 82, - 57, - 206, - 123, - 222, - 66, - 16, - 57, - 206, - 132, - 33, - 57, - 206, - 57, - 206, - 140, - 99, - 49, - 140, - 57, - 206, - 148, - 165, - 41, - 74, - 57, - 206, - 156, - 231, - 33, - 8, - 57, - 206, - 165, - 41, - 24, - 198, - 57, - 206, - 173, - 107, - 16, - 132, - 57, - 206, - 181, - 173, - 8, - 66, - 57, - 206, - 189, - 239, - 0, - 0, - 57, - 206, - 198, - 49, - 255, - 255, - 49, - 140, - 0, - 0, - 247, - 189, - 49, - 140, - 0, - 0, - 239, - 123, - 49, - 140, - 0, - 0, - 231, - 57, - 49, - 140, - 0, - 0, - 222, - 247, - 49, - 140, - 0, - 0, - 214, - 181, - 49, - 140, - 0, - 0, - 206, - 115, - 49, - 140, - 0, - 0, - 198, - 49, - 49, - 140, - 8, - 66, - 189, - 239, - 49, - 140, - 16, - 132, - 181, - 173, - 49, - 140, - 24, - 198, - 173, - 107, - 49, - 140, - 33, - 8, - 165, - 41, - 49, - 140, - 41, - 74, - 156, - 231, - 49, - 140, - 49, - 140, - 148, - 165, - 49, - 140, - 57, - 206, - 140, - 99, - 49, - 140, - 66, - 16, - 132, - 33, - 49, - 140, - 74, - 82, - 123, - 222, - 49, - 140, - 82, - 148, - 115, - 156, - 49, - 140, - 90, - 214, - 107, - 90, - 49, - 140, - 99, - 24, - 99, - 24, - 49, - 140, - 107, - 90, - 90, - 214, - 49, - 140, - 115, - 156, - 82, - 148, - 49, - 140, - 123, - 222, - 74, - 82, - 49, - 140, - 132, - 33, - 66, - 16, - 49, - 140, - 140, - 99, - 57, - 206, - 49, - 140, - 148, - 165, - 49, - 140, - 49, - 140, - 156, - 231, - 41, - 74, - 49, - 140, - 165, - 41, - 33, - 8, - 49, - 140, - 173, - 107, - 24, - 198, - 49, - 140, - 181, - 173, - 16, - 132, - 49, - 140, - 189, - 239, - 8, - 66, - 49, - 140, - 198, - 49, - 0, - 0, - 49, - 140, - 206, - 115, - 255, - 255, - 41, - 74, - 0, - 0, - 247, - 189, - 41, - 74, - 0, - 0, - 239, - 123, - 41, - 74, - 0, - 0, - 231, - 57, - 41, - 74, - 0, - 0, - 222, - 247, - 41, - 74, - 0, - 0, - 214, - 181, - 41, - 74, - 0, - 0, - 206, - 115, - 41, - 74, - 8, - 66, - 198, - 49, - 41, - 74, - 16, - 132, - 189, - 239, - 41, - 74, - 24, - 198, - 181, - 173, - 41, - 74, - 33, - 8, - 173, - 107, - 41, - 74, - 41, - 74, - 165, - 41, - 41, - 74, - 49, - 140, - 156, - 231, - 41, - 74, - 57, - 206, - 148, - 165, - 41, - 74, - 66, - 16, - 140, - 99, - 41, - 74, - 74, - 82, - 132, - 33, - 41, - 74, - 82, - 148, - 123, - 222, - 41, - 74, - 90, - 214, - 115, - 156, - 41, - 74, - 99, - 24, - 107, - 90, - 41, - 74, - 107, - 90, - 99, - 24, - 41, - 74, - 115, - 156, - 90, - 214, - 41, - 74, - 123, - 222, - 82, - 148, - 41, - 74, - 132, - 33, - 74, - 82, - 41, - 74, - 140, - 99, - 66, - 16, - 41, - 74, - 148, - 165, - 57, - 206, - 41, - 74, - 156, - 231, - 49, - 140, - 41, - 74, - 165, - 41, - 41, - 74, - 41, - 74, - 173, - 107, - 33, - 8, - 41, - 74, - 181, - 173, - 24, - 198, - 41, - 74, - 189, - 239, - 16, - 132, - 41, - 74, - 198, - 49, - 8, - 66, - 41, - 74, - 206, - 115, - 0, - 0, - 41, - 74, - 214, - 181, - 255, - 255, - 33, - 8, - 0, - 0, - 247, - 189, - 33, - 8, - 0, - 0, - 239, - 123, - 33, - 8, - 0, - 0, - 231, - 57, - 33, - 8, - 0, - 0, - 222, - 247, - 33, - 8, - 0, - 0, - 214, - 181, - 33, - 8, - 8, - 66, - 206, - 115, - 33, - 8, - 16, - 132, - 198, - 49, - 33, - 8, - 24, - 198, - 189, - 239, - 33, - 8, - 33, - 8, - 181, - 173, - 33, - 8, - 41, - 74, - 173, - 107, - 33, - 8, - 49, - 140, - 165, - 41, - 33, - 8, - 57, - 206, - 156, - 231, - 33, - 8, - 66, - 16, - 148, - 165, - 33, - 8, - 74, - 82, - 140, - 99, - 33, - 8, - 82, - 148, - 132, - 33, - 33, - 8, - 90, - 214, - 123, - 222, - 33, - 8, - 99, - 24, - 115, - 156, - 33, - 8, - 107, - 90, - 107, - 90, - 33, - 8, - 115, - 156, - 99, - 24, - 33, - 8, - 123, - 222, - 90, - 214, - 33, - 8, - 132, - 33, - 82, - 148, - 33, - 8, - 140, - 99, - 74, - 82, - 33, - 8, - 148, - 165, - 66, - 16, - 33, - 8, - 156, - 231, - 57, - 206, - 33, - 8, - 165, - 41, - 49, - 140, - 33, - 8, - 173, - 107, - 41, - 74, - 33, - 8, - 181, - 173, - 33, - 8, - 33, - 8, - 189, - 239, - 24, - 198, - 33, - 8, - 198, - 49, - 16, - 132, - 33, - 8, - 206, - 115, - 8, - 66, - 33, - 8, - 214, - 181, - 0, - 0, - 33, - 8, - 222, - 247, - 255, - 255, - 24, - 198, - 0, - 0, - 247, - 189, - 24, - 198, - 0, - 0, - 239, - 123, - 24, - 198, - 0, - 0, - 231, - 57, - 24, - 198, - 0, - 0, - 222, - 247, - 24, - 198, - 8, - 66, - 214, - 181, - 24, - 198, - 16, - 132, - 206, - 115, - 24, - 198, - 24, - 198, - 198, - 49, - 24, - 198, - 33, - 8, - 189, - 239, - 24, - 198, - 41, - 74, - 181, - 173, - 24, - 198, - 49, - 140, - 173, - 107, - 24, - 198, - 57, - 206, - 165, - 41, - 24, - 198, - 66, - 16, - 156, - 231, - 24, - 198, - 74, - 82, - 148, - 165, - 24, - 198, - 82, - 148, - 140, - 99, - 24, - 198, - 90, - 214, - 132, - 33, - 24, - 198, - 99, - 24, - 123, - 222, - 24, - 198, - 107, - 90, - 115, - 156, - 24, - 198, - 115, - 156, - 107, - 90, - 24, - 198, - 123, - 222, - 99, - 24, - 24, - 198, - 132, - 33, - 90, - 214, - 24, - 198, - 140, - 99, - 82, - 148, - 24, - 198, - 148, - 165, - 74, - 82, - 24, - 198, - 156, - 231, - 66, - 16, - 24, - 198, - 165, - 41, - 57, - 206, - 24, - 198, - 173, - 107, - 49, - 140, - 24, - 198, - 181, - 173, - 41, - 74, - 24, - 198, - 189, - 239, - 33, - 8, - 24, - 198, - 198, - 49, - 24, - 198, - 24, - 198, - 206, - 115, - 16, - 132, - 24, - 198, - 214, - 181, - 8, - 66, - 24, - 198, - 222, - 247, - 0, - 0, - 24, - 198, - 231, - 57, - 255, - 255, - 16, - 132, - 0, - 0, - 247, - 189, - 16, - 132, - 0, - 0, - 239, - 123, - 16, - 132, - 0, - 0, - 231, - 57, - 16, - 132, - 8, - 66, - 222, - 247, - 16, - 132, - 16, - 132, - 214, - 181, - 16, - 132, - 24, - 198, - 206, - 115, - 16, - 132, - 33, - 8, - 198, - 49, - 16, - 132, - 41, - 74, - 189, - 239, - 16, - 132, - 49, - 140, - 181, - 173, - 16, - 132, - 57, - 206, - 173, - 107, - 16, - 132, - 66, - 16, - 165, - 41, - 16, - 132, - 74, - 82, - 156, - 231, - 16, - 132, - 82, - 148, - 148, - 165, - 16, - 132, - 90, - 214, - 140, - 99, - 16, - 132, - 99, - 24, - 132, - 33, - 16, - 132, - 107, - 90, - 123, - 222, - 16, - 132, - 115, - 156, - 115, - 156, - 16, - 132, - 123, - 222, - 107, - 90, - 16, - 132, - 132, - 33, - 99, - 24, - 16, - 132, - 140, - 99, - 90, - 214, - 16, - 132, - 148, - 165, - 82, - 148, - 16, - 132, - 156, - 231, - 74, - 82, - 16, - 132, - 165, - 41, - 66, - 16, - 16, - 132, - 173, - 107, - 57, - 206, - 16, - 132, - 181, - 173, - 49, - 140, - 16, - 132, - 189, - 239, - 41, - 74, - 16, - 132, - 198, - 49, - 33, - 8, - 16, - 132, - 206, - 115, - 24, - 198, - 16, - 132, - 214, - 181, - 16, - 132, - 16, - 132, - 222, - 247, - 8, - 66, - 16, - 132, - 231, - 57, - 0, - 0, - 16, - 132, - 239, - 123, - 255, - 255, - 8, - 66, - 0, - 0, - 247, - 189, - 8, - 66, - 0, - 0, - 239, - 123, - 8, - 66, - 8, - 66, - 231, - 57, - 8, - 66, - 16, - 132, - 222, - 247, - 8, - 66, - 24, - 198, - 214, - 181, - 8, - 66, - 33, - 8, - 206, - 115, - 8, - 66, - 41, - 74, - 198, - 49, - 8, - 66, - 49, - 140, - 189, - 239, - 8, - 66, - 57, - 206, - 181, - 173, - 8, - 66, - 66, - 16, - 173, - 107, - 8, - 66, - 74, - 82, - 165, - 41, - 8, - 66, - 82, - 148, - 156, - 231, - 8, - 66, - 90, - 214, - 148, - 165, - 8, - 66, - 99, - 24, - 140, - 99, - 8, - 66, - 107, - 90, - 132, - 33, - 8, - 66, - 115, - 156, - 123, - 222, - 8, - 66, - 123, - 222, - 115, - 156, - 8, - 66, - 132, - 33, - 107, - 90, - 8, - 66, - 140, - 99, - 99, - 24, - 8, - 66, - 148, - 165, - 90, - 214, - 8, - 66, - 156, - 231, - 82, - 148, - 8, - 66, - 165, - 41, - 74, - 82, - 8, - 66, - 173, - 107, - 66, - 16, - 8, - 66, - 181, - 173, - 57, - 206, - 8, - 66, - 189, - 239, - 49, - 140, - 8, - 66, - 198, - 49, - 41, - 74, - 8, - 66, - 206, - 115, - 33, - 8, - 8, - 66, - 214, - 181, - 24, - 198, - 8, - 66, - 222, - 247, - 16, - 132, - 8, - 66, - 231, - 57, - 8, - 66, - 8, - 66, - 239, - 123, - 0, - 0, - 8, - 66, - 247, - 189, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 8, - 66, - 239, - 123, - 0, - 0, - 16, - 132, - 231, - 57, - 0, - 0, - 24, - 198, - 222, - 247, - 0, - 0, - 33, - 8, - 214, - 181, - 0, - 0, - 41, - 74, - 206, - 115, - 0, - 0, - 49, - 140, - 198, - 49, - 0, - 0, - 57, - 206, - 189, - 239, - 0, - 0, - 66, - 16, - 181, - 173, - 0, - 0, - 74, - 82, - 173, - 107, - 0, - 0, - 82, - 148, - 165, - 41, - 0, - 0, - 90, - 214, - 156, - 231, - 0, - 0, - 99, - 24, - 148, - 165, - 0, - 0, - 107, - 90, - 140, - 99, - 0, - 0, - 115, - 156, - 132, - 33, - 0, - 0, - 123, - 222, - 123, - 222, - 0, - 0, - 132, - 33, - 115, - 156, - 0, - 0, - 140, - 99, - 107, - 90, - 0, - 0, - 148, - 165, - 99, - 24, - 0, - 0, - 156, - 231, - 90, - 214, - 0, - 0, - 165, - 41, - 82, - 148, - 0, - 0, - 173, - 107, - 74, - 82, - 0, - 0, - 181, - 173, - 66, - 16, - 0, - 0, - 189, - 239, - 57, - 206, - 0, - 0, - 198, - 49, - 49, - 140, - 0, - 0, - 206, - 115, - 41, - 74, - 0, - 0, - 214, - 181, - 33, - 8, - 0, - 0, - 222, - 247, - 24, - 198, - 0, - 0, - 231, - 57, - 16, - 132, - 0, - 0, - 239, - 123, - 8, - 66, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node interlaced-rgb-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 255, - 0, - 8, - 0, - 255, - 0, - 8, - 8, - 255, - 0, - 8, - 16, - 255, - 0, - 8, - 24, - 255, - 0, - 8, - 32, - 255, - 0, - 8, - 41, - 255, - 0, - 8, - 49, - 255, - 0, - 8, - 57, - 255, - 0, - 8, - 65, - 255, - 0, - 8, - 74, - 255, - 0, - 8, - 82, - 255, - 0, - 8, - 90, - 255, - 0, - 8, - 98, - 255, - 0, - 8, - 106, - 255, - 0, - 8, - 115, - 255, - 0, - 8, - 123, - 255, - 0, - 8, - 131, - 255, - 0, - 8, - 139, - 255, - 0, - 8, - 148, - 255, - 0, - 8, - 156, - 255, - 0, - 8, - 164, - 255, - 0, - 8, - 172, - 255, - 0, - 8, - 180, - 255, - 0, - 8, - 189, - 255, - 0, - 8, - 197, - 255, - 0, - 8, - 205, - 255, - 0, - 8, - 213, - 255, - 0, - 8, - 222, - 255, - 0, - 8, - 230, - 255, - 0, - 8, - 238, - 255, - 0, - 8, - 246, - 255, - 0, - 8, - 255, - 255, - 31, - 8, - 0, - 255, - 31, - 8, - 8, - 255, - 31, - 8, - 16, - 255, - 31, - 8, - 24, - 255, - 31, - 8, - 32, - 255, - 31, - 8, - 41, - 255, - 31, - 8, - 49, - 255, - 31, - 8, - 57, - 255, - 31, - 8, - 65, - 255, - 31, - 8, - 74, - 255, - 31, - 8, - 82, - 255, - 31, - 8, - 90, - 255, - 31, - 8, - 98, - 255, - 31, - 8, - 106, - 255, - 31, - 8, - 115, - 255, - 31, - 8, - 123, - 255, - 31, - 8, - 131, - 255, - 31, - 8, - 139, - 255, - 31, - 8, - 148, - 255, - 31, - 8, - 156, - 255, - 31, - 8, - 164, - 255, - 31, - 8, - 172, - 255, - 31, - 8, - 180, - 255, - 31, - 8, - 189, - 255, - 31, - 8, - 197, - 255, - 31, - 8, - 205, - 255, - 31, - 8, - 213, - 255, - 31, - 8, - 222, - 255, - 31, - 8, - 230, - 255, - 31, - 8, - 238, - 255, - 31, - 8, - 246, - 255, - 31, - 8, - 255, - 255, - 63, - 8, - 0, - 255, - 63, - 8, - 8, - 255, - 63, - 8, - 16, - 255, - 63, - 8, - 24, - 255, - 63, - 8, - 32, - 255, - 63, - 8, - 41, - 255, - 63, - 8, - 49, - 255, - 63, - 8, - 57, - 255, - 63, - 8, - 65, - 255, - 63, - 8, - 74, - 255, - 63, - 8, - 82, - 255, - 63, - 8, - 90, - 255, - 63, - 8, - 98, - 255, - 63, - 8, - 106, - 255, - 63, - 8, - 115, - 255, - 63, - 8, - 123, - 255, - 63, - 8, - 131, - 255, - 63, - 8, - 139, - 255, - 63, - 8, - 148, - 255, - 63, - 8, - 156, - 255, - 63, - 8, - 164, - 255, - 63, - 8, - 172, - 255, - 63, - 8, - 180, - 255, - 63, - 8, - 189, - 255, - 63, - 8, - 197, - 255, - 63, - 8, - 205, - 255, - 63, - 8, - 213, - 255, - 63, - 8, - 222, - 255, - 63, - 8, - 230, - 255, - 63, - 8, - 238, - 255, - 63, - 8, - 246, - 255, - 63, - 8, - 255, - 255, - 95, - 8, - 0, - 255, - 95, - 8, - 8, - 255, - 95, - 8, - 16, - 255, - 95, - 8, - 24, - 255, - 95, - 8, - 32, - 255, - 95, - 8, - 41, - 255, - 95, - 8, - 49, - 255, - 95, - 8, - 57, - 255, - 95, - 8, - 65, - 255, - 95, - 8, - 74, - 255, - 95, - 8, - 82, - 255, - 95, - 8, - 90, - 255, - 95, - 8, - 98, - 255, - 95, - 8, - 106, - 255, - 95, - 8, - 115, - 255, - 95, - 8, - 123, - 255, - 95, - 8, - 131, - 255, - 95, - 8, - 139, - 255, - 95, - 8, - 148, - 255, - 95, - 8, - 156, - 255, - 95, - 8, - 164, - 255, - 95, - 8, - 172, - 255, - 95, - 8, - 180, - 255, - 95, - 8, - 189, - 255, - 95, - 8, - 197, - 255, - 95, - 8, - 205, - 255, - 95, - 8, - 213, - 255, - 95, - 8, - 222, - 255, - 95, - 8, - 230, - 255, - 95, - 8, - 238, - 255, - 95, - 8, - 246, - 255, - 95, - 8, - 255, - 255, - 127, - 7, - 0, - 255, - 127, - 7, - 8, - 255, - 127, - 7, - 16, - 255, - 127, - 7, - 24, - 255, - 127, - 7, - 32, - 255, - 127, - 7, - 41, - 255, - 127, - 7, - 49, - 255, - 127, - 7, - 57, - 255, - 127, - 7, - 65, - 255, - 127, - 7, - 74, - 255, - 127, - 7, - 82, - 255, - 127, - 7, - 90, - 255, - 127, - 7, - 98, - 255, - 127, - 7, - 106, - 255, - 127, - 7, - 115, - 255, - 127, - 7, - 123, - 255, - 127, - 7, - 131, - 255, - 127, - 7, - 139, - 255, - 127, - 7, - 148, - 255, - 127, - 7, - 156, - 255, - 127, - 7, - 164, - 255, - 127, - 7, - 172, - 255, - 127, - 7, - 180, - 255, - 127, - 7, - 189, - 255, - 127, - 7, - 197, - 255, - 127, - 7, - 205, - 255, - 127, - 7, - 213, - 255, - 127, - 7, - 222, - 255, - 127, - 7, - 230, - 255, - 127, - 7, - 238, - 255, - 127, - 7, - 246, - 255, - 127, - 7, - 255, - 255, - 159, - 7, - 0, - 255, - 159, - 7, - 8, - 255, - 159, - 7, - 16, - 255, - 159, - 7, - 24, - 255, - 159, - 7, - 32, - 255, - 159, - 7, - 41, - 255, - 159, - 7, - 49, - 255, - 159, - 7, - 57, - 255, - 159, - 7, - 65, - 255, - 159, - 7, - 74, - 255, - 159, - 7, - 82, - 255, - 159, - 7, - 90, - 255, - 159, - 7, - 98, - 255, - 159, - 7, - 106, - 255, - 159, - 7, - 115, - 255, - 159, - 7, - 123, - 255, - 159, - 7, - 131, - 255, - 159, - 7, - 139, - 255, - 159, - 7, - 148, - 255, - 159, - 7, - 156, - 255, - 159, - 7, - 164, - 255, - 159, - 7, - 172, - 255, - 159, - 7, - 180, - 255, - 159, - 7, - 189, - 255, - 159, - 7, - 197, - 255, - 159, - 7, - 205, - 255, - 159, - 7, - 213, - 255, - 159, - 7, - 222, - 255, - 159, - 7, - 230, - 255, - 159, - 7, - 238, - 255, - 159, - 7, - 246, - 255, - 159, - 7, - 255, - 255, - 191, - 7, - 0, - 255, - 191, - 7, - 8, - 255, - 191, - 7, - 16, - 255, - 191, - 7, - 24, - 255, - 191, - 7, - 32, - 255, - 191, - 7, - 41, - 255, - 191, - 7, - 49, - 255, - 191, - 7, - 57, - 255, - 191, - 7, - 65, - 255, - 191, - 7, - 74, - 255, - 191, - 7, - 82, - 255, - 191, - 7, - 90, - 255, - 191, - 7, - 98, - 255, - 191, - 7, - 106, - 255, - 191, - 7, - 115, - 255, - 191, - 7, - 123, - 255, - 191, - 7, - 131, - 255, - 191, - 7, - 139, - 255, - 191, - 7, - 148, - 255, - 191, - 7, - 156, - 255, - 191, - 7, - 164, - 255, - 191, - 7, - 172, - 255, - 191, - 7, - 180, - 255, - 191, - 7, - 189, - 255, - 191, - 7, - 197, - 255, - 191, - 7, - 205, - 255, - 191, - 7, - 213, - 255, - 191, - 7, - 222, - 255, - 191, - 7, - 230, - 255, - 191, - 7, - 238, - 255, - 191, - 7, - 246, - 255, - 191, - 7, - 255, - 255, - 223, - 7, - 0, - 255, - 223, - 7, - 8, - 255, - 223, - 7, - 16, - 255, - 223, - 7, - 24, - 255, - 223, - 7, - 32, - 255, - 223, - 7, - 41, - 255, - 223, - 7, - 49, - 255, - 223, - 7, - 57, - 255, - 223, - 7, - 65, - 255, - 223, - 7, - 74, - 255, - 223, - 7, - 82, - 255, - 223, - 7, - 90, - 255, - 223, - 7, - 98, - 255, - 223, - 7, - 106, - 255, - 223, - 7, - 115, - 255, - 223, - 7, - 123, - 255, - 223, - 7, - 131, - 255, - 223, - 7, - 139, - 255, - 223, - 7, - 148, - 255, - 223, - 7, - 156, - 255, - 223, - 7, - 164, - 255, - 223, - 7, - 172, - 255, - 223, - 7, - 180, - 255, - 223, - 7, - 189, - 255, - 223, - 7, - 197, - 255, - 223, - 7, - 205, - 255, - 223, - 7, - 213, - 255, - 223, - 7, - 222, - 255, - 223, - 7, - 230, - 255, - 223, - 7, - 238, - 255, - 223, - 7, - 246, - 255, - 223, - 7, - 255, - 255, - 255, - 6, - 0, - 255, - 255, - 6, - 8, - 255, - 255, - 6, - 16, - 255, - 255, - 6, - 24, - 255, - 255, - 6, - 32, - 255, - 255, - 6, - 41, - 255, - 255, - 6, - 49, - 255, - 255, - 6, - 57, - 255, - 255, - 6, - 65, - 255, - 255, - 6, - 74, - 255, - 255, - 6, - 82, - 255, - 255, - 6, - 90, - 255, - 255, - 6, - 98, - 255, - 255, - 6, - 106, - 255, - 255, - 6, - 115, - 255, - 255, - 6, - 123, - 255, - 255, - 6, - 131, - 255, - 255, - 6, - 139, - 255, - 255, - 6, - 148, - 255, - 255, - 6, - 156, - 255, - 255, - 6, - 164, - 255, - 255, - 6, - 172, - 255, - 255, - 6, - 180, - 255, - 255, - 6, - 189, - 255, - 255, - 6, - 197, - 255, - 255, - 6, - 205, - 255, - 255, - 6, - 213, - 255, - 255, - 6, - 222, - 255, - 255, - 6, - 230, - 255, - 255, - 6, - 238, - 255, - 255, - 6, - 246, - 255, - 255, - 6, - 255, - 224, - 255, - 6, - 0, - 224, - 255, - 6, - 8, - 224, - 255, - 6, - 16, - 224, - 255, - 6, - 24, - 224, - 255, - 6, - 32, - 224, - 255, - 6, - 41, - 224, - 255, - 6, - 49, - 224, - 255, - 6, - 57, - 224, - 255, - 6, - 65, - 224, - 255, - 6, - 74, - 224, - 255, - 6, - 82, - 224, - 255, - 6, - 90, - 224, - 255, - 6, - 98, - 224, - 255, - 6, - 106, - 224, - 255, - 6, - 115, - 224, - 255, - 6, - 123, - 224, - 255, - 6, - 131, - 224, - 255, - 6, - 139, - 224, - 255, - 6, - 148, - 224, - 255, - 6, - 156, - 224, - 255, - 6, - 164, - 224, - 255, - 6, - 172, - 224, - 255, - 6, - 180, - 224, - 255, - 6, - 189, - 224, - 255, - 6, - 197, - 224, - 255, - 6, - 205, - 224, - 255, - 6, - 213, - 224, - 255, - 6, - 222, - 224, - 255, - 6, - 230, - 224, - 255, - 6, - 238, - 224, - 255, - 6, - 246, - 224, - 255, - 6, - 255, - 192, - 255, - 6, - 0, - 192, - 255, - 6, - 8, - 192, - 255, - 6, - 16, - 192, - 255, - 6, - 24, - 192, - 255, - 6, - 32, - 192, - 255, - 6, - 41, - 192, - 255, - 6, - 49, - 192, - 255, - 6, - 57, - 192, - 255, - 6, - 65, - 192, - 255, - 6, - 74, - 192, - 255, - 6, - 82, - 192, - 255, - 6, - 90, - 192, - 255, - 6, - 98, - 192, - 255, - 6, - 106, - 192, - 255, - 6, - 115, - 192, - 255, - 6, - 123, - 192, - 255, - 6, - 131, - 192, - 255, - 6, - 139, - 192, - 255, - 6, - 148, - 192, - 255, - 6, - 156, - 192, - 255, - 6, - 164, - 192, - 255, - 6, - 172, - 192, - 255, - 6, - 180, - 192, - 255, - 6, - 189, - 192, - 255, - 6, - 197, - 192, - 255, - 6, - 205, - 192, - 255, - 6, - 213, - 192, - 255, - 6, - 222, - 192, - 255, - 6, - 230, - 192, - 255, - 6, - 238, - 192, - 255, - 6, - 246, - 192, - 255, - 6, - 255, - 160, - 255, - 5, - 0, - 160, - 255, - 5, - 8, - 160, - 255, - 5, - 16, - 160, - 255, - 5, - 24, - 160, - 255, - 5, - 32, - 160, - 255, - 5, - 41, - 160, - 255, - 5, - 49, - 160, - 255, - 5, - 57, - 160, - 255, - 5, - 65, - 160, - 255, - 5, - 74, - 160, - 255, - 5, - 82, - 160, - 255, - 5, - 90, - 160, - 255, - 5, - 98, - 160, - 255, - 5, - 106, - 160, - 255, - 5, - 115, - 160, - 255, - 5, - 123, - 160, - 255, - 5, - 131, - 160, - 255, - 5, - 139, - 160, - 255, - 5, - 148, - 160, - 255, - 5, - 156, - 160, - 255, - 5, - 164, - 160, - 255, - 5, - 172, - 160, - 255, - 5, - 180, - 160, - 255, - 5, - 189, - 160, - 255, - 5, - 197, - 160, - 255, - 5, - 205, - 160, - 255, - 5, - 213, - 160, - 255, - 5, - 222, - 160, - 255, - 5, - 230, - 160, - 255, - 5, - 238, - 160, - 255, - 5, - 246, - 160, - 255, - 5, - 255, - 128, - 255, - 5, - 0, - 128, - 255, - 5, - 8, - 128, - 255, - 5, - 16, - 128, - 255, - 5, - 24, - 128, - 255, - 5, - 32, - 128, - 255, - 5, - 41, - 128, - 255, - 5, - 49, - 128, - 255, - 5, - 57, - 128, - 255, - 5, - 65, - 128, - 255, - 5, - 74, - 128, - 255, - 5, - 82, - 128, - 255, - 5, - 90, - 128, - 255, - 5, - 98, - 128, - 255, - 5, - 106, - 128, - 255, - 5, - 115, - 128, - 255, - 5, - 123, - 128, - 255, - 5, - 131, - 128, - 255, - 5, - 139, - 128, - 255, - 5, - 148, - 128, - 255, - 5, - 156, - 128, - 255, - 5, - 164, - 128, - 255, - 5, - 172, - 128, - 255, - 5, - 180, - 128, - 255, - 5, - 189, - 128, - 255, - 5, - 197, - 128, - 255, - 5, - 205, - 128, - 255, - 5, - 213, - 128, - 255, - 5, - 222, - 128, - 255, - 5, - 230, - 128, - 255, - 5, - 238, - 128, - 255, - 5, - 246, - 128, - 255, - 5, - 255, - 96, - 255, - 5, - 0, - 96, - 255, - 5, - 8, - 96, - 255, - 5, - 16, - 96, - 255, - 5, - 24, - 96, - 255, - 5, - 32, - 96, - 255, - 5, - 41, - 96, - 255, - 5, - 49, - 96, - 255, - 5, - 57, - 96, - 255, - 5, - 65, - 96, - 255, - 5, - 74, - 96, - 255, - 5, - 82, - 96, - 255, - 5, - 90, - 96, - 255, - 5, - 98, - 96, - 255, - 5, - 106, - 96, - 255, - 5, - 115, - 96, - 255, - 5, - 123, - 96, - 255, - 5, - 131, - 96, - 255, - 5, - 139, - 96, - 255, - 5, - 148, - 96, - 255, - 5, - 156, - 96, - 255, - 5, - 164, - 96, - 255, - 5, - 172, - 96, - 255, - 5, - 180, - 96, - 255, - 5, - 189, - 96, - 255, - 5, - 197, - 96, - 255, - 5, - 205, - 96, - 255, - 5, - 213, - 96, - 255, - 5, - 222, - 96, - 255, - 5, - 230, - 96, - 255, - 5, - 238, - 96, - 255, - 5, - 246, - 96, - 255, - 5, - 255, - 64, - 255, - 5, - 0, - 64, - 255, - 5, - 8, - 64, - 255, - 5, - 16, - 64, - 255, - 5, - 24, - 64, - 255, - 5, - 32, - 64, - 255, - 5, - 41, - 64, - 255, - 5, - 49, - 64, - 255, - 5, - 57, - 64, - 255, - 5, - 65, - 64, - 255, - 5, - 74, - 64, - 255, - 5, - 82, - 64, - 255, - 5, - 90, - 64, - 255, - 5, - 98, - 64, - 255, - 5, - 106, - 64, - 255, - 5, - 115, - 64, - 255, - 5, - 123, - 64, - 255, - 5, - 131, - 64, - 255, - 5, - 139, - 64, - 255, - 5, - 148, - 64, - 255, - 5, - 156, - 64, - 255, - 5, - 164, - 64, - 255, - 5, - 172, - 64, - 255, - 5, - 180, - 64, - 255, - 5, - 189, - 64, - 255, - 5, - 197, - 64, - 255, - 5, - 205, - 64, - 255, - 5, - 213, - 64, - 255, - 5, - 222, - 64, - 255, - 5, - 230, - 64, - 255, - 5, - 238, - 64, - 255, - 5, - 246, - 64, - 255, - 5, - 255, - 32, - 255, - 4, - 0, - 32, - 255, - 4, - 8, - 32, - 255, - 4, - 16, - 32, - 255, - 4, - 24, - 32, - 255, - 4, - 32, - 32, - 255, - 4, - 41, - 32, - 255, - 4, - 49, - 32, - 255, - 4, - 57, - 32, - 255, - 4, - 65, - 32, - 255, - 4, - 74, - 32, - 255, - 4, - 82, - 32, - 255, - 4, - 90, - 32, - 255, - 4, - 98, - 32, - 255, - 4, - 106, - 32, - 255, - 4, - 115, - 32, - 255, - 4, - 123, - 32, - 255, - 4, - 131, - 32, - 255, - 4, - 139, - 32, - 255, - 4, - 148, - 32, - 255, - 4, - 156, - 32, - 255, - 4, - 164, - 32, - 255, - 4, - 172, - 32, - 255, - 4, - 180, - 32, - 255, - 4, - 189, - 32, - 255, - 4, - 197, - 32, - 255, - 4, - 205, - 32, - 255, - 4, - 213, - 32, - 255, - 4, - 222, - 32, - 255, - 4, - 230, - 32, - 255, - 4, - 238, - 32, - 255, - 4, - 246, - 32, - 255, - 4, - 255, - 4, - 255, - 0, - 0, - 4, - 255, - 0, - 8, - 4, - 255, - 0, - 16, - 4, - 255, - 0, - 24, - 4, - 255, - 0, - 32, - 4, - 255, - 0, - 41, - 4, - 255, - 0, - 49, - 4, - 255, - 0, - 57, - 4, - 255, - 0, - 65, - 4, - 255, - 0, - 74, - 4, - 255, - 0, - 82, - 4, - 255, - 0, - 90, - 4, - 255, - 0, - 98, - 4, - 255, - 0, - 106, - 4, - 255, - 0, - 115, - 4, - 255, - 0, - 123, - 4, - 255, - 0, - 131, - 4, - 255, - 0, - 139, - 4, - 255, - 0, - 148, - 4, - 255, - 0, - 156, - 4, - 255, - 0, - 164, - 4, - 255, - 0, - 172, - 4, - 255, - 0, - 180, - 4, - 255, - 0, - 189, - 4, - 255, - 0, - 197, - 4, - 255, - 0, - 205, - 4, - 255, - 0, - 213, - 4, - 255, - 0, - 222, - 4, - 255, - 0, - 230, - 4, - 255, - 0, - 238, - 4, - 255, - 0, - 246, - 4, - 255, - 0, - 255, - 4, - 255, - 31, - 0, - 4, - 255, - 31, - 8, - 4, - 255, - 31, - 16, - 4, - 255, - 31, - 24, - 4, - 255, - 31, - 32, - 4, - 255, - 31, - 41, - 4, - 255, - 31, - 49, - 4, - 255, - 31, - 57, - 4, - 255, - 31, - 65, - 4, - 255, - 31, - 74, - 4, - 255, - 31, - 82, - 4, - 255, - 31, - 90, - 4, - 255, - 31, - 98, - 4, - 255, - 31, - 106, - 4, - 255, - 31, - 115, - 4, - 255, - 31, - 123, - 4, - 255, - 31, - 131, - 4, - 255, - 31, - 139, - 4, - 255, - 31, - 148, - 4, - 255, - 31, - 156, - 4, - 255, - 31, - 164, - 4, - 255, - 31, - 172, - 4, - 255, - 31, - 180, - 4, - 255, - 31, - 189, - 4, - 255, - 31, - 197, - 4, - 255, - 31, - 205, - 4, - 255, - 31, - 213, - 4, - 255, - 31, - 222, - 4, - 255, - 31, - 230, - 4, - 255, - 31, - 238, - 4, - 255, - 31, - 246, - 4, - 255, - 31, - 255, - 3, - 255, - 63, - 0, - 3, - 255, - 63, - 8, - 3, - 255, - 63, - 16, - 3, - 255, - 63, - 24, - 3, - 255, - 63, - 32, - 3, - 255, - 63, - 41, - 3, - 255, - 63, - 49, - 3, - 255, - 63, - 57, - 3, - 255, - 63, - 65, - 3, - 255, - 63, - 74, - 3, - 255, - 63, - 82, - 3, - 255, - 63, - 90, - 3, - 255, - 63, - 98, - 3, - 255, - 63, - 106, - 3, - 255, - 63, - 115, - 3, - 255, - 63, - 123, - 3, - 255, - 63, - 131, - 3, - 255, - 63, - 139, - 3, - 255, - 63, - 148, - 3, - 255, - 63, - 156, - 3, - 255, - 63, - 164, - 3, - 255, - 63, - 172, - 3, - 255, - 63, - 180, - 3, - 255, - 63, - 189, - 3, - 255, - 63, - 197, - 3, - 255, - 63, - 205, - 3, - 255, - 63, - 213, - 3, - 255, - 63, - 222, - 3, - 255, - 63, - 230, - 3, - 255, - 63, - 238, - 3, - 255, - 63, - 246, - 3, - 255, - 63, - 255, - 3, - 255, - 95, - 0, - 3, - 255, - 95, - 8, - 3, - 255, - 95, - 16, - 3, - 255, - 95, - 24, - 3, - 255, - 95, - 32, - 3, - 255, - 95, - 41, - 3, - 255, - 95, - 49, - 3, - 255, - 95, - 57, - 3, - 255, - 95, - 65, - 3, - 255, - 95, - 74, - 3, - 255, - 95, - 82, - 3, - 255, - 95, - 90, - 3, - 255, - 95, - 98, - 3, - 255, - 95, - 106, - 3, - 255, - 95, - 115, - 3, - 255, - 95, - 123, - 3, - 255, - 95, - 131, - 3, - 255, - 95, - 139, - 3, - 255, - 95, - 148, - 3, - 255, - 95, - 156, - 3, - 255, - 95, - 164, - 3, - 255, - 95, - 172, - 3, - 255, - 95, - 180, - 3, - 255, - 95, - 189, - 3, - 255, - 95, - 197, - 3, - 255, - 95, - 205, - 3, - 255, - 95, - 213, - 3, - 255, - 95, - 222, - 3, - 255, - 95, - 230, - 3, - 255, - 95, - 238, - 3, - 255, - 95, - 246, - 3, - 255, - 95, - 255, - 3, - 255, - 127, - 0, - 3, - 255, - 127, - 8, - 3, - 255, - 127, - 16, - 3, - 255, - 127, - 24, - 3, - 255, - 127, - 32, - 3, - 255, - 127, - 41, - 3, - 255, - 127, - 49, - 3, - 255, - 127, - 57, - 3, - 255, - 127, - 65, - 3, - 255, - 127, - 74, - 3, - 255, - 127, - 82, - 3, - 255, - 127, - 90, - 3, - 255, - 127, - 98, - 3, - 255, - 127, - 106, - 3, - 255, - 127, - 115, - 3, - 255, - 127, - 123, - 3, - 255, - 127, - 131, - 3, - 255, - 127, - 139, - 3, - 255, - 127, - 148, - 3, - 255, - 127, - 156, - 3, - 255, - 127, - 164, - 3, - 255, - 127, - 172, - 3, - 255, - 127, - 180, - 3, - 255, - 127, - 189, - 3, - 255, - 127, - 197, - 3, - 255, - 127, - 205, - 3, - 255, - 127, - 213, - 3, - 255, - 127, - 222, - 3, - 255, - 127, - 230, - 3, - 255, - 127, - 238, - 3, - 255, - 127, - 246, - 3, - 255, - 127, - 255, - 3, - 255, - 159, - 0, - 3, - 255, - 159, - 8, - 3, - 255, - 159, - 16, - 3, - 255, - 159, - 24, - 3, - 255, - 159, - 32, - 3, - 255, - 159, - 41, - 3, - 255, - 159, - 49, - 3, - 255, - 159, - 57, - 3, - 255, - 159, - 65, - 3, - 255, - 159, - 74, - 3, - 255, - 159, - 82, - 3, - 255, - 159, - 90, - 3, - 255, - 159, - 98, - 3, - 255, - 159, - 106, - 3, - 255, - 159, - 115, - 3, - 255, - 159, - 123, - 3, - 255, - 159, - 131, - 3, - 255, - 159, - 139, - 3, - 255, - 159, - 148, - 3, - 255, - 159, - 156, - 3, - 255, - 159, - 164, - 3, - 255, - 159, - 172, - 3, - 255, - 159, - 180, - 3, - 255, - 159, - 189, - 3, - 255, - 159, - 197, - 3, - 255, - 159, - 205, - 3, - 255, - 159, - 213, - 3, - 255, - 159, - 222, - 3, - 255, - 159, - 230, - 3, - 255, - 159, - 238, - 3, - 255, - 159, - 246, - 3, - 255, - 159, - 255, - 2, - 255, - 191, - 0, - 2, - 255, - 191, - 8, - 2, - 255, - 191, - 16, - 2, - 255, - 191, - 24, - 2, - 255, - 191, - 32, - 2, - 255, - 191, - 41, - 2, - 255, - 191, - 49, - 2, - 255, - 191, - 57, - 2, - 255, - 191, - 65, - 2, - 255, - 191, - 74, - 2, - 255, - 191, - 82, - 2, - 255, - 191, - 90, - 2, - 255, - 191, - 98, - 2, - 255, - 191, - 106, - 2, - 255, - 191, - 115, - 2, - 255, - 191, - 123, - 2, - 255, - 191, - 131, - 2, - 255, - 191, - 139, - 2, - 255, - 191, - 148, - 2, - 255, - 191, - 156, - 2, - 255, - 191, - 164, - 2, - 255, - 191, - 172, - 2, - 255, - 191, - 180, - 2, - 255, - 191, - 189, - 2, - 255, - 191, - 197, - 2, - 255, - 191, - 205, - 2, - 255, - 191, - 213, - 2, - 255, - 191, - 222, - 2, - 255, - 191, - 230, - 2, - 255, - 191, - 238, - 2, - 255, - 191, - 246, - 2, - 255, - 191, - 255, - 2, - 255, - 223, - 0, - 2, - 255, - 223, - 8, - 2, - 255, - 223, - 16, - 2, - 255, - 223, - 24, - 2, - 255, - 223, - 32, - 2, - 255, - 223, - 41, - 2, - 255, - 223, - 49, - 2, - 255, - 223, - 57, - 2, - 255, - 223, - 65, - 2, - 255, - 223, - 74, - 2, - 255, - 223, - 82, - 2, - 255, - 223, - 90, - 2, - 255, - 223, - 98, - 2, - 255, - 223, - 106, - 2, - 255, - 223, - 115, - 2, - 255, - 223, - 123, - 2, - 255, - 223, - 131, - 2, - 255, - 223, - 139, - 2, - 255, - 223, - 148, - 2, - 255, - 223, - 156, - 2, - 255, - 223, - 164, - 2, - 255, - 223, - 172, - 2, - 255, - 223, - 180, - 2, - 255, - 223, - 189, - 2, - 255, - 223, - 197, - 2, - 255, - 223, - 205, - 2, - 255, - 223, - 213, - 2, - 255, - 223, - 222, - 2, - 255, - 223, - 230, - 2, - 255, - 223, - 238, - 2, - 255, - 223, - 246, - 2, - 255, - 223, - 255, - 2, - 255, - 255, - 0, - 2, - 255, - 255, - 8, - 2, - 255, - 255, - 16, - 2, - 255, - 255, - 24, - 2, - 255, - 255, - 32, - 2, - 255, - 255, - 41, - 2, - 255, - 255, - 49, - 2, - 255, - 255, - 57, - 2, - 255, - 255, - 65, - 2, - 255, - 255, - 74, - 2, - 255, - 255, - 82, - 2, - 255, - 255, - 90, - 2, - 255, - 255, - 98, - 2, - 255, - 255, - 106, - 2, - 255, - 255, - 115, - 2, - 255, - 255, - 123, - 2, - 255, - 255, - 131, - 2, - 255, - 255, - 139, - 2, - 255, - 255, - 148, - 2, - 255, - 255, - 156, - 2, - 255, - 255, - 164, - 2, - 255, - 255, - 172, - 2, - 255, - 255, - 180, - 2, - 255, - 255, - 189, - 2, - 255, - 255, - 197, - 2, - 255, - 255, - 205, - 2, - 255, - 255, - 213, - 2, - 255, - 255, - 222, - 2, - 255, - 255, - 230, - 2, - 255, - 255, - 238, - 2, - 255, - 255, - 246, - 2, - 255, - 255, - 255, - 1, - 224, - 255, - 0, - 1, - 224, - 255, - 8, - 1, - 224, - 255, - 16, - 1, - 224, - 255, - 24, - 1, - 224, - 255, - 32, - 1, - 224, - 255, - 41, - 1, - 224, - 255, - 49, - 1, - 224, - 255, - 57, - 1, - 224, - 255, - 65, - 1, - 224, - 255, - 74, - 1, - 224, - 255, - 82, - 1, - 224, - 255, - 90, - 1, - 224, - 255, - 98, - 1, - 224, - 255, - 106, - 1, - 224, - 255, - 115, - 1, - 224, - 255, - 123, - 1, - 224, - 255, - 131, - 1, - 224, - 255, - 139, - 1, - 224, - 255, - 148, - 1, - 224, - 255, - 156, - 1, - 224, - 255, - 164, - 1, - 224, - 255, - 172, - 1, - 224, - 255, - 180, - 1, - 224, - 255, - 189, - 1, - 224, - 255, - 197, - 1, - 224, - 255, - 205, - 1, - 224, - 255, - 213, - 1, - 224, - 255, - 222, - 1, - 224, - 255, - 230, - 1, - 224, - 255, - 238, - 1, - 224, - 255, - 246, - 1, - 224, - 255, - 255, - 1, - 192, - 255, - 0, - 1, - 192, - 255, - 8, - 1, - 192, - 255, - 16, - 1, - 192, - 255, - 24, - 1, - 192, - 255, - 32, - 1, - 192, - 255, - 41, - 1, - 192, - 255, - 49, - 1, - 192, - 255, - 57, - 1, - 192, - 255, - 65, - 1, - 192, - 255, - 74, - 1, - 192, - 255, - 82, - 1, - 192, - 255, - 90, - 1, - 192, - 255, - 98, - 1, - 192, - 255, - 106, - 1, - 192, - 255, - 115, - 1, - 192, - 255, - 123, - 1, - 192, - 255, - 131, - 1, - 192, - 255, - 139, - 1, - 192, - 255, - 148, - 1, - 192, - 255, - 156, - 1, - 192, - 255, - 164, - 1, - 192, - 255, - 172, - 1, - 192, - 255, - 180, - 1, - 192, - 255, - 189, - 1, - 192, - 255, - 197, - 1, - 192, - 255, - 205, - 1, - 192, - 255, - 213, - 1, - 192, - 255, - 222, - 1, - 192, - 255, - 230, - 1, - 192, - 255, - 238, - 1, - 192, - 255, - 246, - 1, - 192, - 255, - 255, - 1, - 160, - 255, - 0, - 1, - 160, - 255, - 8, - 1, - 160, - 255, - 16, - 1, - 160, - 255, - 24, - 1, - 160, - 255, - 32, - 1, - 160, - 255, - 41, - 1, - 160, - 255, - 49, - 1, - 160, - 255, - 57, - 1, - 160, - 255, - 65, - 1, - 160, - 255, - 74, - 1, - 160, - 255, - 82, - 1, - 160, - 255, - 90, - 1, - 160, - 255, - 98, - 1, - 160, - 255, - 106, - 1, - 160, - 255, - 115, - 1, - 160, - 255, - 123, - 1, - 160, - 255, - 131, - 1, - 160, - 255, - 139, - 1, - 160, - 255, - 148, - 1, - 160, - 255, - 156, - 1, - 160, - 255, - 164, - 1, - 160, - 255, - 172, - 1, - 160, - 255, - 180, - 1, - 160, - 255, - 189, - 1, - 160, - 255, - 197, - 1, - 160, - 255, - 205, - 1, - 160, - 255, - 213, - 1, - 160, - 255, - 222, - 1, - 160, - 255, - 230, - 1, - 160, - 255, - 238, - 1, - 160, - 255, - 246, - 1, - 160, - 255, - 255, - 1, - 128, - 255, - 0, - 1, - 128, - 255, - 8, - 1, - 128, - 255, - 16, - 1, - 128, - 255, - 24, - 1, - 128, - 255, - 32, - 1, - 128, - 255, - 41, - 1, - 128, - 255, - 49, - 1, - 128, - 255, - 57, - 1, - 128, - 255, - 65, - 1, - 128, - 255, - 74, - 1, - 128, - 255, - 82, - 1, - 128, - 255, - 90, - 1, - 128, - 255, - 98, - 1, - 128, - 255, - 106, - 1, - 128, - 255, - 115, - 1, - 128, - 255, - 123, - 1, - 128, - 255, - 131, - 1, - 128, - 255, - 139, - 1, - 128, - 255, - 148, - 1, - 128, - 255, - 156, - 1, - 128, - 255, - 164, - 1, - 128, - 255, - 172, - 1, - 128, - 255, - 180, - 1, - 128, - 255, - 189, - 1, - 128, - 255, - 197, - 1, - 128, - 255, - 205, - 1, - 128, - 255, - 213, - 1, - 128, - 255, - 222, - 1, - 128, - 255, - 230, - 1, - 128, - 255, - 238, - 1, - 128, - 255, - 246, - 1, - 128, - 255, - 255, - 0, - 96, - 255, - 0, - 0, - 96, - 255, - 8, - 0, - 96, - 255, - 16, - 0, - 96, - 255, - 24, - 0, - 96, - 255, - 32, - 0, - 96, - 255, - 41, - 0, - 96, - 255, - 49, - 0, - 96, - 255, - 57, - 0, - 96, - 255, - 65, - 0, - 96, - 255, - 74, - 0, - 96, - 255, - 82, - 0, - 96, - 255, - 90, - 0, - 96, - 255, - 98, - 0, - 96, - 255, - 106, - 0, - 96, - 255, - 115, - 0, - 96, - 255, - 123, - 0, - 96, - 255, - 131, - 0, - 96, - 255, - 139, - 0, - 96, - 255, - 148, - 0, - 96, - 255, - 156, - 0, - 96, - 255, - 164, - 0, - 96, - 255, - 172, - 0, - 96, - 255, - 180, - 0, - 96, - 255, - 189, - 0, - 96, - 255, - 197, - 0, - 96, - 255, - 205, - 0, - 96, - 255, - 213, - 0, - 96, - 255, - 222, - 0, - 96, - 255, - 230, - 0, - 96, - 255, - 238, - 0, - 96, - 255, - 246, - 0, - 96, - 255, - 255, - 0, - 64, - 255, - 0, - 0, - 64, - 255, - 8, - 0, - 64, - 255, - 16, - 0, - 64, - 255, - 24, - 0, - 64, - 255, - 32, - 0, - 64, - 255, - 41, - 0, - 64, - 255, - 49, - 0, - 64, - 255, - 57, - 0, - 64, - 255, - 65, - 0, - 64, - 255, - 74, - 0, - 64, - 255, - 82, - 0, - 64, - 255, - 90, - 0, - 64, - 255, - 98, - 0, - 64, - 255, - 106, - 0, - 64, - 255, - 115, - 0, - 64, - 255, - 123, - 0, - 64, - 255, - 131, - 0, - 64, - 255, - 139, - 0, - 64, - 255, - 148, - 0, - 64, - 255, - 156, - 0, - 64, - 255, - 164, - 0, - 64, - 255, - 172, - 0, - 64, - 255, - 180, - 0, - 64, - 255, - 189, - 0, - 64, - 255, - 197, - 0, - 64, - 255, - 205, - 0, - 64, - 255, - 213, - 0, - 64, - 255, - 222, - 0, - 64, - 255, - 230, - 0, - 64, - 255, - 238, - 0, - 64, - 255, - 246, - 0, - 64, - 255, - 255, - 0, - 32, - 255, - 0, - 0, - 32, - 255, - 8, - 0, - 32, - 255, - 16, - 0, - 32, - 255, - 24, - 0, - 32, - 255, - 32, - 0, - 32, - 255, - 41, - 0, - 32, - 255, - 49, - 0, - 32, - 255, - 57, - 0, - 32, - 255, - 65, - 0, - 32, - 255, - 74, - 0, - 32, - 255, - 82, - 0, - 32, - 255, - 90, - 0, - 32, - 255, - 98, - 0, - 32, - 255, - 106, - 0, - 32, - 255, - 115, - 0, - 32, - 255, - 123, - 0, - 32, - 255, - 131, - 0, - 32, - 255, - 139, - 0, - 32, - 255, - 148, - 0, - 32, - 255, - 156, - 0, - 32, - 255, - 164, - 0, - 32, - 255, - 172, - 0, - 32, - 255, - 180, - 0, - 32, - 255, - 189, - 0, - 32, - 255, - 197, - 0, - 32, - 255, - 205, - 0, - 32, - 255, - 213, - 0, - 32, - 255, - 222, - 0, - 32, - 255, - 230, - 0, - 32, - 255, - 238, - 0, - 32, - 255, - 246, - 0, - 32, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node rgb-8bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 254, - 255, - 255, - 253, - 255, - 255, - 252, - 255, - 255, - 251, - 255, - 255, - 250, - 255, - 255, - 249, - 255, - 255, - 248, - 255, - 255, - 247, - 255, - 255, - 246, - 255, - 255, - 245, - 255, - 255, - 244, - 255, - 255, - 243, - 255, - 255, - 242, - 255, - 255, - 241, - 255, - 255, - 240, - 255, - 255, - 239, - 255, - 255, - 238, - 255, - 255, - 237, - 255, - 255, - 236, - 255, - 255, - 235, - 255, - 255, - 234, - 255, - 255, - 233, - 255, - 255, - 232, - 255, - 255, - 231, - 255, - 255, - 230, - 255, - 255, - 229, - 255, - 255, - 228, - 255, - 255, - 227, - 255, - 255, - 226, - 255, - 255, - 225, - 255, - 255, - 224, - 255, - 255, - 223, - 255, - 255, - 222, - 255, - 255, - 221, - 255, - 255, - 220, - 255, - 255, - 219, - 255, - 255, - 218, - 255, - 255, - 217, - 255, - 255, - 216, - 255, - 255, - 215, - 255, - 255, - 214, - 255, - 255, - 213, - 255, - 255, - 212, - 255, - 255, - 211, - 255, - 255, - 210, - 255, - 255, - 209, - 255, - 255, - 208, - 255, - 255, - 207, - 255, - 255, - 206, - 255, - 255, - 205, - 255, - 255, - 204, - 255, - 255, - 203, - 255, - 255, - 202, - 255, - 255, - 201, - 255, - 255, - 200, - 255, - 255, - 199, - 255, - 255, - 198, - 255, - 255, - 197, - 255, - 255, - 196, - 255, - 255, - 195, - 255, - 255, - 194, - 255, - 255, - 193, - 255, - 255, - 192, - 255, - 255, - 191, - 255, - 255, - 190, - 255, - 255, - 189, - 255, - 255, - 188, - 255, - 255, - 187, - 255, - 255, - 186, - 255, - 255, - 185, - 255, - 255, - 184, - 255, - 255, - 183, - 255, - 255, - 182, - 255, - 255, - 181, - 255, - 255, - 180, - 255, - 255, - 179, - 255, - 255, - 178, - 255, - 255, - 177, - 255, - 255, - 176, - 255, - 255, - 175, - 255, - 255, - 174, - 255, - 255, - 173, - 255, - 255, - 172, - 255, - 255, - 171, - 255, - 255, - 170, - 255, - 255, - 169, - 255, - 255, - 168, - 255, - 255, - 167, - 255, - 255, - 166, - 255, - 255, - 165, - 255, - 255, - 164, - 255, - 255, - 163, - 255, - 255, - 162, - 255, - 255, - 161, - 255, - 255, - 160, - 255, - 255, - 159, - 255, - 255, - 158, - 255, - 255, - 157, - 255, - 255, - 156, - 255, - 255, - 155, - 255, - 255, - 154, - 255, - 255, - 153, - 255, - 255, - 152, - 255, - 255, - 151, - 255, - 255, - 150, - 255, - 255, - 149, - 255, - 255, - 148, - 255, - 255, - 147, - 255, - 255, - 146, - 255, - 255, - 145, - 255, - 255, - 144, - 255, - 255, - 143, - 255, - 255, - 142, - 255, - 255, - 141, - 255, - 255, - 140, - 255, - 255, - 139, - 255, - 255, - 138, - 255, - 255, - 137, - 255, - 255, - 136, - 255, - 255, - 135, - 255, - 255, - 134, - 255, - 255, - 133, - 255, - 255, - 132, - 255, - 255, - 131, - 255, - 255, - 130, - 255, - 255, - 129, - 255, - 255, - 128, - 255, - 255, - 127, - 255, - 255, - 126, - 255, - 255, - 125, - 255, - 255, - 124, - 255, - 255, - 123, - 255, - 255, - 122, - 255, - 255, - 121, - 255, - 255, - 120, - 255, - 255, - 119, - 255, - 255, - 118, - 255, - 255, - 117, - 255, - 255, - 116, - 255, - 255, - 115, - 255, - 255, - 114, - 255, - 255, - 113, - 255, - 255, - 112, - 255, - 255, - 111, - 255, - 255, - 110, - 255, - 255, - 109, - 255, - 255, - 108, - 255, - 255, - 107, - 255, - 255, - 106, - 255, - 255, - 105, - 255, - 255, - 104, - 255, - 255, - 103, - 255, - 255, - 102, - 255, - 255, - 101, - 255, - 255, - 100, - 255, - 255, - 99, - 255, - 255, - 98, - 255, - 255, - 97, - 255, - 255, - 96, - 255, - 255, - 95, - 255, - 255, - 94, - 255, - 255, - 93, - 255, - 255, - 92, - 255, - 255, - 91, - 255, - 255, - 90, - 255, - 255, - 89, - 255, - 255, - 88, - 255, - 255, - 87, - 255, - 255, - 86, - 255, - 255, - 85, - 255, - 255, - 84, - 255, - 255, - 83, - 255, - 255, - 82, - 255, - 255, - 81, - 255, - 255, - 80, - 255, - 255, - 79, - 255, - 255, - 78, - 255, - 255, - 77, - 255, - 255, - 76, - 255, - 255, - 75, - 255, - 255, - 74, - 255, - 255, - 73, - 255, - 255, - 72, - 255, - 255, - 71, - 255, - 255, - 70, - 255, - 255, - 69, - 255, - 255, - 68, - 255, - 255, - 67, - 255, - 255, - 66, - 255, - 255, - 65, - 255, - 255, - 64, - 255, - 255, - 63, - 255, - 255, - 62, - 255, - 255, - 61, - 255, - 255, - 60, - 255, - 255, - 59, - 255, - 255, - 58, - 255, - 255, - 57, - 255, - 255, - 56, - 255, - 255, - 55, - 255, - 255, - 54, - 255, - 255, - 53, - 255, - 255, - 52, - 255, - 255, - 51, - 255, - 255, - 50, - 255, - 255, - 49, - 255, - 255, - 48, - 255, - 255, - 47, - 255, - 255, - 46, - 255, - 255, - 45, - 255, - 255, - 44, - 255, - 255, - 43, - 255, - 255, - 42, - 255, - 255, - 41, - 255, - 255, - 40, - 255, - 255, - 39, - 255, - 255, - 38, - 255, - 255, - 37, - 255, - 255, - 36, - 255, - 255, - 35, - 255, - 255, - 34, - 255, - 255, - 33, - 255, - 255, - 32, - 255, - 255, - 31, - 255, - 255, - 30, - 255, - 255, - 29, - 255, - 255, - 28, - 255, - 255, - 27, - 255, - 255, - 26, - 255, - 255, - 25, - 255, - 255, - 24, - 255, - 255, - 23, - 255, - 255, - 22, - 255, - 255, - 21, - 255, - 255, - 20, - 255, - 255, - 19, - 255, - 255, - 18, - 255, - 255, - 17, - 255, - 255, - 16, - 255, - 255, - 15, - 255, - 255, - 14, - 255, - 255, - 13, - 255, - 255, - 12, - 255, - 255, - 11, - 255, - 255, - 10, - 255, - 255, - 9, - 255, - 255, - 8, - 255, - 255, - 7, - 255, - 255, - 6, - 255, - 255, - 5, - 255, - 255, - 4, - 255, - 255, - 3, - 255, - 255, - 2, - 255, - 255, - 1, - 255, - 255, - 0, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 253, - 253, - 253, - 252, - 252, - 252, - 251, - 251, - 251, - 250, - 250, - 250, - 249, - 249, - 249, - 248, - 248, - 248, - 247, - 247, - 247, - 246, - 246, - 246, - 245, - 245, - 245, - 244, - 244, - 244, - 243, - 243, - 243, - 242, - 242, - 242, - 241, - 241, - 241, - 240, - 240, - 240, - 239, - 239, - 239, - 238, - 238, - 238, - 237, - 237, - 237, - 236, - 236, - 236, - 235, - 235, - 235, - 234, - 234, - 234, - 233, - 233, - 233, - 232, - 232, - 232, - 231, - 231, - 231, - 230, - 230, - 230, - 229, - 229, - 229, - 228, - 228, - 228, - 227, - 227, - 227, - 226, - 226, - 226, - 225, - 225, - 225, - 224, - 224, - 224, - 223, - 223, - 223, - 222, - 222, - 222, - 221, - 221, - 221, - 220, - 220, - 220, - 219, - 219, - 219, - 218, - 218, - 218, - 217, - 217, - 217, - 216, - 216, - 216, - 215, - 215, - 215, - 214, - 214, - 214, - 213, - 213, - 213, - 212, - 212, - 212, - 211, - 211, - 211, - 210, - 210, - 210, - 209, - 209, - 209, - 208, - 208, - 208, - 207, - 207, - 207, - 206, - 206, - 206, - 205, - 205, - 205, - 204, - 204, - 204, - 203, - 203, - 203, - 202, - 202, - 202, - 201, - 201, - 201, - 200, - 200, - 200, - 199, - 199, - 199, - 198, - 198, - 198, - 197, - 197, - 197, - 196, - 196, - 196, - 195, - 195, - 195, - 194, - 194, - 194, - 193, - 193, - 193, - 192, - 192, - 192, - 191, - 191, - 191, - 190, - 190, - 190, - 189, - 189, - 189, - 188, - 188, - 188, - 187, - 187, - 187, - 186, - 186, - 186, - 185, - 185, - 185, - 184, - 184, - 184, - 183, - 183, - 183, - 182, - 182, - 182, - 181, - 181, - 181, - 180, - 180, - 180, - 179, - 179, - 179, - 178, - 178, - 178, - 177, - 177, - 177, - 176, - 176, - 176, - 175, - 175, - 175, - 174, - 174, - 174, - 173, - 173, - 173, - 172, - 172, - 172, - 171, - 171, - 171, - 170, - 170, - 170, - 169, - 169, - 169, - 168, - 168, - 168, - 167, - 167, - 167, - 166, - 166, - 166, - 165, - 165, - 165, - 164, - 164, - 164, - 163, - 163, - 163, - 162, - 162, - 162, - 161, - 161, - 161, - 160, - 160, - 160, - 159, - 159, - 159, - 158, - 158, - 158, - 157, - 157, - 157, - 156, - 156, - 156, - 155, - 155, - 155, - 154, - 154, - 154, - 153, - 153, - 153, - 152, - 152, - 152, - 151, - 151, - 151, - 150, - 150, - 150, - 149, - 149, - 149, - 148, - 148, - 148, - 147, - 147, - 147, - 146, - 146, - 146, - 145, - 145, - 145, - 144, - 144, - 144, - 143, - 143, - 143, - 142, - 142, - 142, - 141, - 141, - 141, - 140, - 140, - 140, - 139, - 139, - 139, - 138, - 138, - 138, - 137, - 137, - 137, - 136, - 136, - 136, - 135, - 135, - 135, - 134, - 134, - 134, - 133, - 133, - 133, - 132, - 132, - 132, - 131, - 131, - 131, - 130, - 130, - 130, - 129, - 129, - 129, - 128, - 128, - 128, - 127, - 127, - 127, - 126, - 126, - 126, - 125, - 125, - 125, - 124, - 124, - 124, - 123, - 123, - 123, - 122, - 122, - 122, - 121, - 121, - 121, - 120, - 120, - 120, - 119, - 119, - 119, - 118, - 118, - 118, - 117, - 117, - 117, - 116, - 116, - 116, - 115, - 115, - 115, - 114, - 114, - 114, - 113, - 113, - 113, - 112, - 112, - 112, - 111, - 111, - 111, - 110, - 110, - 110, - 109, - 109, - 109, - 108, - 108, - 108, - 107, - 107, - 107, - 106, - 106, - 106, - 105, - 105, - 105, - 104, - 104, - 104, - 103, - 103, - 103, - 102, - 102, - 102, - 101, - 101, - 101, - 100, - 100, - 100, - 99, - 99, - 99, - 98, - 98, - 98, - 97, - 97, - 97, - 96, - 96, - 96, - 95, - 95, - 95, - 94, - 94, - 94, - 93, - 93, - 93, - 92, - 92, - 92, - 91, - 91, - 91, - 90, - 90, - 90, - 89, - 89, - 89, - 88, - 88, - 88, - 87, - 87, - 87, - 86, - 86, - 86, - 85, - 85, - 85, - 84, - 84, - 84, - 83, - 83, - 83, - 82, - 82, - 82, - 81, - 81, - 81, - 80, - 80, - 80, - 79, - 79, - 79, - 78, - 78, - 78, - 77, - 77, - 77, - 76, - 76, - 76, - 75, - 75, - 75, - 74, - 74, - 74, - 73, - 73, - 73, - 72, - 72, - 72, - 71, - 71, - 71, - 70, - 70, - 70, - 69, - 69, - 69, - 68, - 68, - 68, - 67, - 67, - 67, - 66, - 66, - 66, - 65, - 65, - 65, - 64, - 64, - 64, - 63, - 63, - 63, - 62, - 62, - 62, - 61, - 61, - 61, - 60, - 60, - 60, - 59, - 59, - 59, - 58, - 58, - 58, - 57, - 57, - 57, - 56, - 56, - 56, - 55, - 55, - 55, - 54, - 54, - 54, - 53, - 53, - 53, - 52, - 52, - 52, - 51, - 51, - 51, - 50, - 50, - 50, - 49, - 49, - 49, - 48, - 48, - 48, - 47, - 47, - 47, - 46, - 46, - 46, - 45, - 45, - 45, - 44, - 44, - 44, - 43, - 43, - 43, - 42, - 42, - 42, - 41, - 41, - 41, - 40, - 40, - 40, - 39, - 39, - 39, - 38, - 38, - 38, - 37, - 37, - 37, - 36, - 36, - 36, - 35, - 35, - 35, - 34, - 34, - 34, - 33, - 33, - 33, - 32, - 32, - 32, - 31, - 31, - 31, - 30, - 30, - 30, - 29, - 29, - 29, - 28, - 28, - 28, - 27, - 27, - 27, - 26, - 26, - 26, - 25, - 25, - 25, - 24, - 24, - 24, - 23, - 23, - 23, - 22, - 22, - 22, - 21, - 21, - 21, - 20, - 20, - 20, - 19, - 19, - 19, - 18, - 18, - 18, - 17, - 17, - 17, - 16, - 16, - 16, - 15, - 15, - 15, - 14, - 14, - 14, - 13, - 13, - 13, - 12, - 12, - 12, - 11, - 11, - 11, - 10, - 10, - 10, - 9, - 9, - 9, - 8, - 8, - 8, - 7, - 7, - 7, - 6, - 6, - 6, - 5, - 5, - 5, - 4, - 4, - 4, - 3, - 3, - 3, - 2, - 2, - 2, - 1, - 1, - 1, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 255, - 255, - 0, - 0, - 239, - 123, - 255, - 255, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 222, - 247, - 255, - 255, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 206, - 115, - 255, - 255, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 189, - 239, - 255, - 255, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 173, - 107, - 255, - 255, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 156, - 231, - 255, - 255, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 140, - 99, - 255, - 255, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 247, - 189, - 247, - 189, - 0, - 0, - 239, - 123, - 247, - 189, - 0, - 0, - 231, - 57, - 247, - 189, - 0, - 0, - 222, - 247, - 247, - 189, - 0, - 0, - 214, - 181, - 247, - 189, - 0, - 0, - 206, - 115, - 247, - 189, - 0, - 0, - 198, - 49, - 247, - 189, - 0, - 0, - 189, - 239, - 247, - 189, - 0, - 0, - 181, - 173, - 247, - 189, - 0, - 0, - 173, - 107, - 247, - 189, - 0, - 0, - 165, - 41, - 247, - 189, - 0, - 0, - 156, - 231, - 247, - 189, - 0, - 0, - 148, - 165, - 247, - 189, - 0, - 0, - 140, - 99, - 247, - 189, - 0, - 0, - 132, - 33, - 247, - 189, - 0, - 0, - 123, - 222, - 247, - 189, - 0, - 0, - 115, - 156, - 247, - 189, - 0, - 0, - 107, - 90, - 247, - 189, - 0, - 0, - 99, - 24, - 247, - 189, - 0, - 0, - 90, - 214, - 247, - 189, - 0, - 0, - 82, - 148, - 247, - 189, - 0, - 0, - 74, - 82, - 247, - 189, - 0, - 0, - 66, - 16, - 247, - 189, - 0, - 0, - 57, - 206, - 247, - 189, - 0, - 0, - 49, - 140, - 247, - 189, - 0, - 0, - 41, - 74, - 247, - 189, - 0, - 0, - 33, - 8, - 247, - 189, - 0, - 0, - 24, - 198, - 247, - 189, - 0, - 0, - 16, - 132, - 247, - 189, - 0, - 0, - 8, - 66, - 247, - 189, - 0, - 0, - 0, - 0, - 247, - 189, - 8, - 66, - 255, - 255, - 239, - 123, - 0, - 0, - 247, - 189, - 239, - 123, - 0, - 0, - 239, - 123, - 239, - 123, - 0, - 0, - 231, - 57, - 239, - 123, - 0, - 0, - 222, - 247, - 239, - 123, - 0, - 0, - 214, - 181, - 239, - 123, - 0, - 0, - 206, - 115, - 239, - 123, - 0, - 0, - 198, - 49, - 239, - 123, - 0, - 0, - 189, - 239, - 239, - 123, - 0, - 0, - 181, - 173, - 239, - 123, - 0, - 0, - 173, - 107, - 239, - 123, - 0, - 0, - 165, - 41, - 239, - 123, - 0, - 0, - 156, - 231, - 239, - 123, - 0, - 0, - 148, - 165, - 239, - 123, - 0, - 0, - 140, - 99, - 239, - 123, - 0, - 0, - 132, - 33, - 239, - 123, - 0, - 0, - 123, - 222, - 239, - 123, - 0, - 0, - 115, - 156, - 239, - 123, - 0, - 0, - 107, - 90, - 239, - 123, - 0, - 0, - 99, - 24, - 239, - 123, - 0, - 0, - 90, - 214, - 239, - 123, - 0, - 0, - 82, - 148, - 239, - 123, - 0, - 0, - 74, - 82, - 239, - 123, - 0, - 0, - 66, - 16, - 239, - 123, - 0, - 0, - 57, - 206, - 239, - 123, - 0, - 0, - 49, - 140, - 239, - 123, - 0, - 0, - 41, - 74, - 239, - 123, - 0, - 0, - 33, - 8, - 239, - 123, - 0, - 0, - 24, - 198, - 239, - 123, - 0, - 0, - 16, - 132, - 239, - 123, - 0, - 0, - 8, - 66, - 239, - 123, - 8, - 66, - 0, - 0, - 239, - 123, - 16, - 132, - 255, - 255, - 231, - 57, - 0, - 0, - 247, - 189, - 231, - 57, - 0, - 0, - 239, - 123, - 231, - 57, - 0, - 0, - 231, - 57, - 231, - 57, - 0, - 0, - 222, - 247, - 231, - 57, - 0, - 0, - 214, - 181, - 231, - 57, - 0, - 0, - 206, - 115, - 231, - 57, - 0, - 0, - 198, - 49, - 231, - 57, - 0, - 0, - 189, - 239, - 231, - 57, - 0, - 0, - 181, - 173, - 231, - 57, - 0, - 0, - 173, - 107, - 231, - 57, - 0, - 0, - 165, - 41, - 231, - 57, - 0, - 0, - 156, - 231, - 231, - 57, - 0, - 0, - 148, - 165, - 231, - 57, - 0, - 0, - 140, - 99, - 231, - 57, - 0, - 0, - 132, - 33, - 231, - 57, - 0, - 0, - 123, - 222, - 231, - 57, - 0, - 0, - 115, - 156, - 231, - 57, - 0, - 0, - 107, - 90, - 231, - 57, - 0, - 0, - 99, - 24, - 231, - 57, - 0, - 0, - 90, - 214, - 231, - 57, - 0, - 0, - 82, - 148, - 231, - 57, - 0, - 0, - 74, - 82, - 231, - 57, - 0, - 0, - 66, - 16, - 231, - 57, - 0, - 0, - 57, - 206, - 231, - 57, - 0, - 0, - 49, - 140, - 231, - 57, - 0, - 0, - 41, - 74, - 231, - 57, - 0, - 0, - 33, - 8, - 231, - 57, - 0, - 0, - 24, - 198, - 231, - 57, - 0, - 0, - 16, - 132, - 231, - 57, - 8, - 66, - 8, - 66, - 231, - 57, - 16, - 132, - 0, - 0, - 231, - 57, - 24, - 198, - 255, - 255, - 222, - 247, - 0, - 0, - 247, - 189, - 222, - 247, - 0, - 0, - 239, - 123, - 222, - 247, - 0, - 0, - 231, - 57, - 222, - 247, - 0, - 0, - 222, - 247, - 222, - 247, - 0, - 0, - 214, - 181, - 222, - 247, - 0, - 0, - 206, - 115, - 222, - 247, - 0, - 0, - 198, - 49, - 222, - 247, - 0, - 0, - 189, - 239, - 222, - 247, - 0, - 0, - 181, - 173, - 222, - 247, - 0, - 0, - 173, - 107, - 222, - 247, - 0, - 0, - 165, - 41, - 222, - 247, - 0, - 0, - 156, - 231, - 222, - 247, - 0, - 0, - 148, - 165, - 222, - 247, - 0, - 0, - 140, - 99, - 222, - 247, - 0, - 0, - 132, - 33, - 222, - 247, - 0, - 0, - 123, - 222, - 222, - 247, - 0, - 0, - 115, - 156, - 222, - 247, - 0, - 0, - 107, - 90, - 222, - 247, - 0, - 0, - 99, - 24, - 222, - 247, - 0, - 0, - 90, - 214, - 222, - 247, - 0, - 0, - 82, - 148, - 222, - 247, - 0, - 0, - 74, - 82, - 222, - 247, - 0, - 0, - 66, - 16, - 222, - 247, - 0, - 0, - 57, - 206, - 222, - 247, - 0, - 0, - 49, - 140, - 222, - 247, - 0, - 0, - 41, - 74, - 222, - 247, - 0, - 0, - 33, - 8, - 222, - 247, - 0, - 0, - 24, - 198, - 222, - 247, - 8, - 66, - 16, - 132, - 222, - 247, - 16, - 132, - 8, - 66, - 222, - 247, - 24, - 198, - 0, - 0, - 222, - 247, - 33, - 8, - 255, - 255, - 214, - 181, - 0, - 0, - 247, - 189, - 214, - 181, - 0, - 0, - 239, - 123, - 214, - 181, - 0, - 0, - 231, - 57, - 214, - 181, - 0, - 0, - 222, - 247, - 214, - 181, - 0, - 0, - 214, - 181, - 214, - 181, - 0, - 0, - 206, - 115, - 214, - 181, - 0, - 0, - 198, - 49, - 214, - 181, - 0, - 0, - 189, - 239, - 214, - 181, - 0, - 0, - 181, - 173, - 214, - 181, - 0, - 0, - 173, - 107, - 214, - 181, - 0, - 0, - 165, - 41, - 214, - 181, - 0, - 0, - 156, - 231, - 214, - 181, - 0, - 0, - 148, - 165, - 214, - 181, - 0, - 0, - 140, - 99, - 214, - 181, - 0, - 0, - 132, - 33, - 214, - 181, - 0, - 0, - 123, - 222, - 214, - 181, - 0, - 0, - 115, - 156, - 214, - 181, - 0, - 0, - 107, - 90, - 214, - 181, - 0, - 0, - 99, - 24, - 214, - 181, - 0, - 0, - 90, - 214, - 214, - 181, - 0, - 0, - 82, - 148, - 214, - 181, - 0, - 0, - 74, - 82, - 214, - 181, - 0, - 0, - 66, - 16, - 214, - 181, - 0, - 0, - 57, - 206, - 214, - 181, - 0, - 0, - 49, - 140, - 214, - 181, - 0, - 0, - 41, - 74, - 214, - 181, - 0, - 0, - 33, - 8, - 214, - 181, - 8, - 66, - 24, - 198, - 214, - 181, - 16, - 132, - 16, - 132, - 214, - 181, - 24, - 198, - 8, - 66, - 214, - 181, - 33, - 8, - 0, - 0, - 214, - 181, - 41, - 74, - 255, - 255, - 206, - 115, - 0, - 0, - 247, - 189, - 206, - 115, - 0, - 0, - 239, - 123, - 206, - 115, - 0, - 0, - 231, - 57, - 206, - 115, - 0, - 0, - 222, - 247, - 206, - 115, - 0, - 0, - 214, - 181, - 206, - 115, - 0, - 0, - 206, - 115, - 206, - 115, - 0, - 0, - 198, - 49, - 206, - 115, - 0, - 0, - 189, - 239, - 206, - 115, - 0, - 0, - 181, - 173, - 206, - 115, - 0, - 0, - 173, - 107, - 206, - 115, - 0, - 0, - 165, - 41, - 206, - 115, - 0, - 0, - 156, - 231, - 206, - 115, - 0, - 0, - 148, - 165, - 206, - 115, - 0, - 0, - 140, - 99, - 206, - 115, - 0, - 0, - 132, - 33, - 206, - 115, - 0, - 0, - 123, - 222, - 206, - 115, - 0, - 0, - 115, - 156, - 206, - 115, - 0, - 0, - 107, - 90, - 206, - 115, - 0, - 0, - 99, - 24, - 206, - 115, - 0, - 0, - 90, - 214, - 206, - 115, - 0, - 0, - 82, - 148, - 206, - 115, - 0, - 0, - 74, - 82, - 206, - 115, - 0, - 0, - 66, - 16, - 206, - 115, - 0, - 0, - 57, - 206, - 206, - 115, - 0, - 0, - 49, - 140, - 206, - 115, - 0, - 0, - 41, - 74, - 206, - 115, - 8, - 66, - 33, - 8, - 206, - 115, - 16, - 132, - 24, - 198, - 206, - 115, - 24, - 198, - 16, - 132, - 206, - 115, - 33, - 8, - 8, - 66, - 206, - 115, - 41, - 74, - 0, - 0, - 206, - 115, - 49, - 140, - 255, - 255, - 198, - 49, - 0, - 0, - 247, - 189, - 198, - 49, - 0, - 0, - 239, - 123, - 198, - 49, - 0, - 0, - 231, - 57, - 198, - 49, - 0, - 0, - 222, - 247, - 198, - 49, - 0, - 0, - 214, - 181, - 198, - 49, - 0, - 0, - 206, - 115, - 198, - 49, - 0, - 0, - 198, - 49, - 198, - 49, - 0, - 0, - 189, - 239, - 198, - 49, - 0, - 0, - 181, - 173, - 198, - 49, - 0, - 0, - 173, - 107, - 198, - 49, - 0, - 0, - 165, - 41, - 198, - 49, - 0, - 0, - 156, - 231, - 198, - 49, - 0, - 0, - 148, - 165, - 198, - 49, - 0, - 0, - 140, - 99, - 198, - 49, - 0, - 0, - 132, - 33, - 198, - 49, - 0, - 0, - 123, - 222, - 198, - 49, - 0, - 0, - 115, - 156, - 198, - 49, - 0, - 0, - 107, - 90, - 198, - 49, - 0, - 0, - 99, - 24, - 198, - 49, - 0, - 0, - 90, - 214, - 198, - 49, - 0, - 0, - 82, - 148, - 198, - 49, - 0, - 0, - 74, - 82, - 198, - 49, - 0, - 0, - 66, - 16, - 198, - 49, - 0, - 0, - 57, - 206, - 198, - 49, - 0, - 0, - 49, - 140, - 198, - 49, - 8, - 66, - 41, - 74, - 198, - 49, - 16, - 132, - 33, - 8, - 198, - 49, - 24, - 198, - 24, - 198, - 198, - 49, - 33, - 8, - 16, - 132, - 198, - 49, - 41, - 74, - 8, - 66, - 198, - 49, - 49, - 140, - 0, - 0, - 198, - 49, - 57, - 206, - 255, - 255, - 189, - 239, - 0, - 0, - 247, - 189, - 189, - 239, - 0, - 0, - 239, - 123, - 189, - 239, - 0, - 0, - 231, - 57, - 189, - 239, - 0, - 0, - 222, - 247, - 189, - 239, - 0, - 0, - 214, - 181, - 189, - 239, - 0, - 0, - 206, - 115, - 189, - 239, - 0, - 0, - 198, - 49, - 189, - 239, - 0, - 0, - 189, - 239, - 189, - 239, - 0, - 0, - 181, - 173, - 189, - 239, - 0, - 0, - 173, - 107, - 189, - 239, - 0, - 0, - 165, - 41, - 189, - 239, - 0, - 0, - 156, - 231, - 189, - 239, - 0, - 0, - 148, - 165, - 189, - 239, - 0, - 0, - 140, - 99, - 189, - 239, - 0, - 0, - 132, - 33, - 189, - 239, - 0, - 0, - 123, - 222, - 189, - 239, - 0, - 0, - 115, - 156, - 189, - 239, - 0, - 0, - 107, - 90, - 189, - 239, - 0, - 0, - 99, - 24, - 189, - 239, - 0, - 0, - 90, - 214, - 189, - 239, - 0, - 0, - 82, - 148, - 189, - 239, - 0, - 0, - 74, - 82, - 189, - 239, - 0, - 0, - 66, - 16, - 189, - 239, - 0, - 0, - 57, - 206, - 189, - 239, - 8, - 66, - 49, - 140, - 189, - 239, - 16, - 132, - 41, - 74, - 189, - 239, - 24, - 198, - 33, - 8, - 189, - 239, - 33, - 8, - 24, - 198, - 189, - 239, - 41, - 74, - 16, - 132, - 189, - 239, - 49, - 140, - 8, - 66, - 189, - 239, - 57, - 206, - 0, - 0, - 189, - 239, - 66, - 16, - 255, - 255, - 181, - 173, - 0, - 0, - 247, - 189, - 181, - 173, - 0, - 0, - 239, - 123, - 181, - 173, - 0, - 0, - 231, - 57, - 181, - 173, - 0, - 0, - 222, - 247, - 181, - 173, - 0, - 0, - 214, - 181, - 181, - 173, - 0, - 0, - 206, - 115, - 181, - 173, - 0, - 0, - 198, - 49, - 181, - 173, - 0, - 0, - 189, - 239, - 181, - 173, - 0, - 0, - 181, - 173, - 181, - 173, - 0, - 0, - 173, - 107, - 181, - 173, - 0, - 0, - 165, - 41, - 181, - 173, - 0, - 0, - 156, - 231, - 181, - 173, - 0, - 0, - 148, - 165, - 181, - 173, - 0, - 0, - 140, - 99, - 181, - 173, - 0, - 0, - 132, - 33, - 181, - 173, - 0, - 0, - 123, - 222, - 181, - 173, - 0, - 0, - 115, - 156, - 181, - 173, - 0, - 0, - 107, - 90, - 181, - 173, - 0, - 0, - 99, - 24, - 181, - 173, - 0, - 0, - 90, - 214, - 181, - 173, - 0, - 0, - 82, - 148, - 181, - 173, - 0, - 0, - 74, - 82, - 181, - 173, - 0, - 0, - 66, - 16, - 181, - 173, - 8, - 66, - 57, - 206, - 181, - 173, - 16, - 132, - 49, - 140, - 181, - 173, - 24, - 198, - 41, - 74, - 181, - 173, - 33, - 8, - 33, - 8, - 181, - 173, - 41, - 74, - 24, - 198, - 181, - 173, - 49, - 140, - 16, - 132, - 181, - 173, - 57, - 206, - 8, - 66, - 181, - 173, - 66, - 16, - 0, - 0, - 181, - 173, - 74, - 82, - 255, - 255, - 173, - 107, - 0, - 0, - 247, - 189, - 173, - 107, - 0, - 0, - 239, - 123, - 173, - 107, - 0, - 0, - 231, - 57, - 173, - 107, - 0, - 0, - 222, - 247, - 173, - 107, - 0, - 0, - 214, - 181, - 173, - 107, - 0, - 0, - 206, - 115, - 173, - 107, - 0, - 0, - 198, - 49, - 173, - 107, - 0, - 0, - 189, - 239, - 173, - 107, - 0, - 0, - 181, - 173, - 173, - 107, - 0, - 0, - 173, - 107, - 173, - 107, - 0, - 0, - 165, - 41, - 173, - 107, - 0, - 0, - 156, - 231, - 173, - 107, - 0, - 0, - 148, - 165, - 173, - 107, - 0, - 0, - 140, - 99, - 173, - 107, - 0, - 0, - 132, - 33, - 173, - 107, - 0, - 0, - 123, - 222, - 173, - 107, - 0, - 0, - 115, - 156, - 173, - 107, - 0, - 0, - 107, - 90, - 173, - 107, - 0, - 0, - 99, - 24, - 173, - 107, - 0, - 0, - 90, - 214, - 173, - 107, - 0, - 0, - 82, - 148, - 173, - 107, - 0, - 0, - 74, - 82, - 173, - 107, - 8, - 66, - 66, - 16, - 173, - 107, - 16, - 132, - 57, - 206, - 173, - 107, - 24, - 198, - 49, - 140, - 173, - 107, - 33, - 8, - 41, - 74, - 173, - 107, - 41, - 74, - 33, - 8, - 173, - 107, - 49, - 140, - 24, - 198, - 173, - 107, - 57, - 206, - 16, - 132, - 173, - 107, - 66, - 16, - 8, - 66, - 173, - 107, - 74, - 82, - 0, - 0, - 173, - 107, - 82, - 148, - 255, - 255, - 165, - 41, - 0, - 0, - 247, - 189, - 165, - 41, - 0, - 0, - 239, - 123, - 165, - 41, - 0, - 0, - 231, - 57, - 165, - 41, - 0, - 0, - 222, - 247, - 165, - 41, - 0, - 0, - 214, - 181, - 165, - 41, - 0, - 0, - 206, - 115, - 165, - 41, - 0, - 0, - 198, - 49, - 165, - 41, - 0, - 0, - 189, - 239, - 165, - 41, - 0, - 0, - 181, - 173, - 165, - 41, - 0, - 0, - 173, - 107, - 165, - 41, - 0, - 0, - 165, - 41, - 165, - 41, - 0, - 0, - 156, - 231, - 165, - 41, - 0, - 0, - 148, - 165, - 165, - 41, - 0, - 0, - 140, - 99, - 165, - 41, - 0, - 0, - 132, - 33, - 165, - 41, - 0, - 0, - 123, - 222, - 165, - 41, - 0, - 0, - 115, - 156, - 165, - 41, - 0, - 0, - 107, - 90, - 165, - 41, - 0, - 0, - 99, - 24, - 165, - 41, - 0, - 0, - 90, - 214, - 165, - 41, - 0, - 0, - 82, - 148, - 165, - 41, - 8, - 66, - 74, - 82, - 165, - 41, - 16, - 132, - 66, - 16, - 165, - 41, - 24, - 198, - 57, - 206, - 165, - 41, - 33, - 8, - 49, - 140, - 165, - 41, - 41, - 74, - 41, - 74, - 165, - 41, - 49, - 140, - 33, - 8, - 165, - 41, - 57, - 206, - 24, - 198, - 165, - 41, - 66, - 16, - 16, - 132, - 165, - 41, - 74, - 82, - 8, - 66, - 165, - 41, - 82, - 148, - 0, - 0, - 165, - 41, - 90, - 214, - 255, - 255, - 156, - 231, - 0, - 0, - 247, - 189, - 156, - 231, - 0, - 0, - 239, - 123, - 156, - 231, - 0, - 0, - 231, - 57, - 156, - 231, - 0, - 0, - 222, - 247, - 156, - 231, - 0, - 0, - 214, - 181, - 156, - 231, - 0, - 0, - 206, - 115, - 156, - 231, - 0, - 0, - 198, - 49, - 156, - 231, - 0, - 0, - 189, - 239, - 156, - 231, - 0, - 0, - 181, - 173, - 156, - 231, - 0, - 0, - 173, - 107, - 156, - 231, - 0, - 0, - 165, - 41, - 156, - 231, - 0, - 0, - 156, - 231, - 156, - 231, - 0, - 0, - 148, - 165, - 156, - 231, - 0, - 0, - 140, - 99, - 156, - 231, - 0, - 0, - 132, - 33, - 156, - 231, - 0, - 0, - 123, - 222, - 156, - 231, - 0, - 0, - 115, - 156, - 156, - 231, - 0, - 0, - 107, - 90, - 156, - 231, - 0, - 0, - 99, - 24, - 156, - 231, - 0, - 0, - 90, - 214, - 156, - 231, - 8, - 66, - 82, - 148, - 156, - 231, - 16, - 132, - 74, - 82, - 156, - 231, - 24, - 198, - 66, - 16, - 156, - 231, - 33, - 8, - 57, - 206, - 156, - 231, - 41, - 74, - 49, - 140, - 156, - 231, - 49, - 140, - 41, - 74, - 156, - 231, - 57, - 206, - 33, - 8, - 156, - 231, - 66, - 16, - 24, - 198, - 156, - 231, - 74, - 82, - 16, - 132, - 156, - 231, - 82, - 148, - 8, - 66, - 156, - 231, - 90, - 214, - 0, - 0, - 156, - 231, - 99, - 24, - 255, - 255, - 148, - 165, - 0, - 0, - 247, - 189, - 148, - 165, - 0, - 0, - 239, - 123, - 148, - 165, - 0, - 0, - 231, - 57, - 148, - 165, - 0, - 0, - 222, - 247, - 148, - 165, - 0, - 0, - 214, - 181, - 148, - 165, - 0, - 0, - 206, - 115, - 148, - 165, - 0, - 0, - 198, - 49, - 148, - 165, - 0, - 0, - 189, - 239, - 148, - 165, - 0, - 0, - 181, - 173, - 148, - 165, - 0, - 0, - 173, - 107, - 148, - 165, - 0, - 0, - 165, - 41, - 148, - 165, - 0, - 0, - 156, - 231, - 148, - 165, - 0, - 0, - 148, - 165, - 148, - 165, - 0, - 0, - 140, - 99, - 148, - 165, - 0, - 0, - 132, - 33, - 148, - 165, - 0, - 0, - 123, - 222, - 148, - 165, - 0, - 0, - 115, - 156, - 148, - 165, - 0, - 0, - 107, - 90, - 148, - 165, - 0, - 0, - 99, - 24, - 148, - 165, - 8, - 66, - 90, - 214, - 148, - 165, - 16, - 132, - 82, - 148, - 148, - 165, - 24, - 198, - 74, - 82, - 148, - 165, - 33, - 8, - 66, - 16, - 148, - 165, - 41, - 74, - 57, - 206, - 148, - 165, - 49, - 140, - 49, - 140, - 148, - 165, - 57, - 206, - 41, - 74, - 148, - 165, - 66, - 16, - 33, - 8, - 148, - 165, - 74, - 82, - 24, - 198, - 148, - 165, - 82, - 148, - 16, - 132, - 148, - 165, - 90, - 214, - 8, - 66, - 148, - 165, - 99, - 24, - 0, - 0, - 148, - 165, - 107, - 90, - 255, - 255, - 140, - 99, - 0, - 0, - 247, - 189, - 140, - 99, - 0, - 0, - 239, - 123, - 140, - 99, - 0, - 0, - 231, - 57, - 140, - 99, - 0, - 0, - 222, - 247, - 140, - 99, - 0, - 0, - 214, - 181, - 140, - 99, - 0, - 0, - 206, - 115, - 140, - 99, - 0, - 0, - 198, - 49, - 140, - 99, - 0, - 0, - 189, - 239, - 140, - 99, - 0, - 0, - 181, - 173, - 140, - 99, - 0, - 0, - 173, - 107, - 140, - 99, - 0, - 0, - 165, - 41, - 140, - 99, - 0, - 0, - 156, - 231, - 140, - 99, - 0, - 0, - 148, - 165, - 140, - 99, - 0, - 0, - 140, - 99, - 140, - 99, - 0, - 0, - 132, - 33, - 140, - 99, - 0, - 0, - 123, - 222, - 140, - 99, - 0, - 0, - 115, - 156, - 140, - 99, - 0, - 0, - 107, - 90, - 140, - 99, - 8, - 66, - 99, - 24, - 140, - 99, - 16, - 132, - 90, - 214, - 140, - 99, - 24, - 198, - 82, - 148, - 140, - 99, - 33, - 8, - 74, - 82, - 140, - 99, - 41, - 74, - 66, - 16, - 140, - 99, - 49, - 140, - 57, - 206, - 140, - 99, - 57, - 206, - 49, - 140, - 140, - 99, - 66, - 16, - 41, - 74, - 140, - 99, - 74, - 82, - 33, - 8, - 140, - 99, - 82, - 148, - 24, - 198, - 140, - 99, - 90, - 214, - 16, - 132, - 140, - 99, - 99, - 24, - 8, - 66, - 140, - 99, - 107, - 90, - 0, - 0, - 140, - 99, - 115, - 156, - 255, - 255, - 132, - 33, - 0, - 0, - 247, - 189, - 132, - 33, - 0, - 0, - 239, - 123, - 132, - 33, - 0, - 0, - 231, - 57, - 132, - 33, - 0, - 0, - 222, - 247, - 132, - 33, - 0, - 0, - 214, - 181, - 132, - 33, - 0, - 0, - 206, - 115, - 132, - 33, - 0, - 0, - 198, - 49, - 132, - 33, - 0, - 0, - 189, - 239, - 132, - 33, - 0, - 0, - 181, - 173, - 132, - 33, - 0, - 0, - 173, - 107, - 132, - 33, - 0, - 0, - 165, - 41, - 132, - 33, - 0, - 0, - 156, - 231, - 132, - 33, - 0, - 0, - 148, - 165, - 132, - 33, - 0, - 0, - 140, - 99, - 132, - 33, - 0, - 0, - 132, - 33, - 132, - 33, - 0, - 0, - 123, - 222, - 132, - 33, - 0, - 0, - 115, - 156, - 132, - 33, - 8, - 66, - 107, - 90, - 132, - 33, - 16, - 132, - 99, - 24, - 132, - 33, - 24, - 198, - 90, - 214, - 132, - 33, - 33, - 8, - 82, - 148, - 132, - 33, - 41, - 74, - 74, - 82, - 132, - 33, - 49, - 140, - 66, - 16, - 132, - 33, - 57, - 206, - 57, - 206, - 132, - 33, - 66, - 16, - 49, - 140, - 132, - 33, - 74, - 82, - 41, - 74, - 132, - 33, - 82, - 148, - 33, - 8, - 132, - 33, - 90, - 214, - 24, - 198, - 132, - 33, - 99, - 24, - 16, - 132, - 132, - 33, - 107, - 90, - 8, - 66, - 132, - 33, - 115, - 156, - 0, - 0, - 132, - 33, - 123, - 222, - 255, - 255, - 123, - 222, - 0, - 0, - 247, - 189, - 123, - 222, - 0, - 0, - 239, - 123, - 123, - 222, - 0, - 0, - 231, - 57, - 123, - 222, - 0, - 0, - 222, - 247, - 123, - 222, - 0, - 0, - 214, - 181, - 123, - 222, - 0, - 0, - 206, - 115, - 123, - 222, - 0, - 0, - 198, - 49, - 123, - 222, - 0, - 0, - 189, - 239, - 123, - 222, - 0, - 0, - 181, - 173, - 123, - 222, - 0, - 0, - 173, - 107, - 123, - 222, - 0, - 0, - 165, - 41, - 123, - 222, - 0, - 0, - 156, - 231, - 123, - 222, - 0, - 0, - 148, - 165, - 123, - 222, - 0, - 0, - 140, - 99, - 123, - 222, - 0, - 0, - 132, - 33, - 123, - 222, - 0, - 0, - 123, - 222, - 123, - 222, - 8, - 66, - 115, - 156, - 123, - 222, - 16, - 132, - 107, - 90, - 123, - 222, - 24, - 198, - 99, - 24, - 123, - 222, - 33, - 8, - 90, - 214, - 123, - 222, - 41, - 74, - 82, - 148, - 123, - 222, - 49, - 140, - 74, - 82, - 123, - 222, - 57, - 206, - 66, - 16, - 123, - 222, - 66, - 16, - 57, - 206, - 123, - 222, - 74, - 82, - 49, - 140, - 123, - 222, - 82, - 148, - 41, - 74, - 123, - 222, - 90, - 214, - 33, - 8, - 123, - 222, - 99, - 24, - 24, - 198, - 123, - 222, - 107, - 90, - 16, - 132, - 123, - 222, - 115, - 156, - 8, - 66, - 123, - 222, - 123, - 222, - 0, - 0, - 123, - 222, - 132, - 33, - 255, - 255, - 115, - 156, - 0, - 0, - 247, - 189, - 115, - 156, - 0, - 0, - 239, - 123, - 115, - 156, - 0, - 0, - 231, - 57, - 115, - 156, - 0, - 0, - 222, - 247, - 115, - 156, - 0, - 0, - 214, - 181, - 115, - 156, - 0, - 0, - 206, - 115, - 115, - 156, - 0, - 0, - 198, - 49, - 115, - 156, - 0, - 0, - 189, - 239, - 115, - 156, - 0, - 0, - 181, - 173, - 115, - 156, - 0, - 0, - 173, - 107, - 115, - 156, - 0, - 0, - 165, - 41, - 115, - 156, - 0, - 0, - 156, - 231, - 115, - 156, - 0, - 0, - 148, - 165, - 115, - 156, - 0, - 0, - 140, - 99, - 115, - 156, - 0, - 0, - 132, - 33, - 115, - 156, - 8, - 66, - 123, - 222, - 115, - 156, - 16, - 132, - 115, - 156, - 115, - 156, - 24, - 198, - 107, - 90, - 115, - 156, - 33, - 8, - 99, - 24, - 115, - 156, - 41, - 74, - 90, - 214, - 115, - 156, - 49, - 140, - 82, - 148, - 115, - 156, - 57, - 206, - 74, - 82, - 115, - 156, - 66, - 16, - 66, - 16, - 115, - 156, - 74, - 82, - 57, - 206, - 115, - 156, - 82, - 148, - 49, - 140, - 115, - 156, - 90, - 214, - 41, - 74, - 115, - 156, - 99, - 24, - 33, - 8, - 115, - 156, - 107, - 90, - 24, - 198, - 115, - 156, - 115, - 156, - 16, - 132, - 115, - 156, - 123, - 222, - 8, - 66, - 115, - 156, - 132, - 33, - 0, - 0, - 115, - 156, - 140, - 99, - 255, - 255, - 107, - 90, - 0, - 0, - 247, - 189, - 107, - 90, - 0, - 0, - 239, - 123, - 107, - 90, - 0, - 0, - 231, - 57, - 107, - 90, - 0, - 0, - 222, - 247, - 107, - 90, - 0, - 0, - 214, - 181, - 107, - 90, - 0, - 0, - 206, - 115, - 107, - 90, - 0, - 0, - 198, - 49, - 107, - 90, - 0, - 0, - 189, - 239, - 107, - 90, - 0, - 0, - 181, - 173, - 107, - 90, - 0, - 0, - 173, - 107, - 107, - 90, - 0, - 0, - 165, - 41, - 107, - 90, - 0, - 0, - 156, - 231, - 107, - 90, - 0, - 0, - 148, - 165, - 107, - 90, - 0, - 0, - 140, - 99, - 107, - 90, - 8, - 66, - 132, - 33, - 107, - 90, - 16, - 132, - 123, - 222, - 107, - 90, - 24, - 198, - 115, - 156, - 107, - 90, - 33, - 8, - 107, - 90, - 107, - 90, - 41, - 74, - 99, - 24, - 107, - 90, - 49, - 140, - 90, - 214, - 107, - 90, - 57, - 206, - 82, - 148, - 107, - 90, - 66, - 16, - 74, - 82, - 107, - 90, - 74, - 82, - 66, - 16, - 107, - 90, - 82, - 148, - 57, - 206, - 107, - 90, - 90, - 214, - 49, - 140, - 107, - 90, - 99, - 24, - 41, - 74, - 107, - 90, - 107, - 90, - 33, - 8, - 107, - 90, - 115, - 156, - 24, - 198, - 107, - 90, - 123, - 222, - 16, - 132, - 107, - 90, - 132, - 33, - 8, - 66, - 107, - 90, - 140, - 99, - 0, - 0, - 107, - 90, - 148, - 165, - 255, - 255, - 99, - 24, - 0, - 0, - 247, - 189, - 99, - 24, - 0, - 0, - 239, - 123, - 99, - 24, - 0, - 0, - 231, - 57, - 99, - 24, - 0, - 0, - 222, - 247, - 99, - 24, - 0, - 0, - 214, - 181, - 99, - 24, - 0, - 0, - 206, - 115, - 99, - 24, - 0, - 0, - 198, - 49, - 99, - 24, - 0, - 0, - 189, - 239, - 99, - 24, - 0, - 0, - 181, - 173, - 99, - 24, - 0, - 0, - 173, - 107, - 99, - 24, - 0, - 0, - 165, - 41, - 99, - 24, - 0, - 0, - 156, - 231, - 99, - 24, - 0, - 0, - 148, - 165, - 99, - 24, - 8, - 66, - 140, - 99, - 99, - 24, - 16, - 132, - 132, - 33, - 99, - 24, - 24, - 198, - 123, - 222, - 99, - 24, - 33, - 8, - 115, - 156, - 99, - 24, - 41, - 74, - 107, - 90, - 99, - 24, - 49, - 140, - 99, - 24, - 99, - 24, - 57, - 206, - 90, - 214, - 99, - 24, - 66, - 16, - 82, - 148, - 99, - 24, - 74, - 82, - 74, - 82, - 99, - 24, - 82, - 148, - 66, - 16, - 99, - 24, - 90, - 214, - 57, - 206, - 99, - 24, - 99, - 24, - 49, - 140, - 99, - 24, - 107, - 90, - 41, - 74, - 99, - 24, - 115, - 156, - 33, - 8, - 99, - 24, - 123, - 222, - 24, - 198, - 99, - 24, - 132, - 33, - 16, - 132, - 99, - 24, - 140, - 99, - 8, - 66, - 99, - 24, - 148, - 165, - 0, - 0, - 99, - 24, - 156, - 231, - 255, - 255, - 90, - 214, - 0, - 0, - 247, - 189, - 90, - 214, - 0, - 0, - 239, - 123, - 90, - 214, - 0, - 0, - 231, - 57, - 90, - 214, - 0, - 0, - 222, - 247, - 90, - 214, - 0, - 0, - 214, - 181, - 90, - 214, - 0, - 0, - 206, - 115, - 90, - 214, - 0, - 0, - 198, - 49, - 90, - 214, - 0, - 0, - 189, - 239, - 90, - 214, - 0, - 0, - 181, - 173, - 90, - 214, - 0, - 0, - 173, - 107, - 90, - 214, - 0, - 0, - 165, - 41, - 90, - 214, - 0, - 0, - 156, - 231, - 90, - 214, - 8, - 66, - 148, - 165, - 90, - 214, - 16, - 132, - 140, - 99, - 90, - 214, - 24, - 198, - 132, - 33, - 90, - 214, - 33, - 8, - 123, - 222, - 90, - 214, - 41, - 74, - 115, - 156, - 90, - 214, - 49, - 140, - 107, - 90, - 90, - 214, - 57, - 206, - 99, - 24, - 90, - 214, - 66, - 16, - 90, - 214, - 90, - 214, - 74, - 82, - 82, - 148, - 90, - 214, - 82, - 148, - 74, - 82, - 90, - 214, - 90, - 214, - 66, - 16, - 90, - 214, - 99, - 24, - 57, - 206, - 90, - 214, - 107, - 90, - 49, - 140, - 90, - 214, - 115, - 156, - 41, - 74, - 90, - 214, - 123, - 222, - 33, - 8, - 90, - 214, - 132, - 33, - 24, - 198, - 90, - 214, - 140, - 99, - 16, - 132, - 90, - 214, - 148, - 165, - 8, - 66, - 90, - 214, - 156, - 231, - 0, - 0, - 90, - 214, - 165, - 41, - 255, - 255, - 82, - 148, - 0, - 0, - 247, - 189, - 82, - 148, - 0, - 0, - 239, - 123, - 82, - 148, - 0, - 0, - 231, - 57, - 82, - 148, - 0, - 0, - 222, - 247, - 82, - 148, - 0, - 0, - 214, - 181, - 82, - 148, - 0, - 0, - 206, - 115, - 82, - 148, - 0, - 0, - 198, - 49, - 82, - 148, - 0, - 0, - 189, - 239, - 82, - 148, - 0, - 0, - 181, - 173, - 82, - 148, - 0, - 0, - 173, - 107, - 82, - 148, - 0, - 0, - 165, - 41, - 82, - 148, - 8, - 66, - 156, - 231, - 82, - 148, - 16, - 132, - 148, - 165, - 82, - 148, - 24, - 198, - 140, - 99, - 82, - 148, - 33, - 8, - 132, - 33, - 82, - 148, - 41, - 74, - 123, - 222, - 82, - 148, - 49, - 140, - 115, - 156, - 82, - 148, - 57, - 206, - 107, - 90, - 82, - 148, - 66, - 16, - 99, - 24, - 82, - 148, - 74, - 82, - 90, - 214, - 82, - 148, - 82, - 148, - 82, - 148, - 82, - 148, - 90, - 214, - 74, - 82, - 82, - 148, - 99, - 24, - 66, - 16, - 82, - 148, - 107, - 90, - 57, - 206, - 82, - 148, - 115, - 156, - 49, - 140, - 82, - 148, - 123, - 222, - 41, - 74, - 82, - 148, - 132, - 33, - 33, - 8, - 82, - 148, - 140, - 99, - 24, - 198, - 82, - 148, - 148, - 165, - 16, - 132, - 82, - 148, - 156, - 231, - 8, - 66, - 82, - 148, - 165, - 41, - 0, - 0, - 82, - 148, - 173, - 107, - 255, - 255, - 74, - 82, - 0, - 0, - 247, - 189, - 74, - 82, - 0, - 0, - 239, - 123, - 74, - 82, - 0, - 0, - 231, - 57, - 74, - 82, - 0, - 0, - 222, - 247, - 74, - 82, - 0, - 0, - 214, - 181, - 74, - 82, - 0, - 0, - 206, - 115, - 74, - 82, - 0, - 0, - 198, - 49, - 74, - 82, - 0, - 0, - 189, - 239, - 74, - 82, - 0, - 0, - 181, - 173, - 74, - 82, - 0, - 0, - 173, - 107, - 74, - 82, - 8, - 66, - 165, - 41, - 74, - 82, - 16, - 132, - 156, - 231, - 74, - 82, - 24, - 198, - 148, - 165, - 74, - 82, - 33, - 8, - 140, - 99, - 74, - 82, - 41, - 74, - 132, - 33, - 74, - 82, - 49, - 140, - 123, - 222, - 74, - 82, - 57, - 206, - 115, - 156, - 74, - 82, - 66, - 16, - 107, - 90, - 74, - 82, - 74, - 82, - 99, - 24, - 74, - 82, - 82, - 148, - 90, - 214, - 74, - 82, - 90, - 214, - 82, - 148, - 74, - 82, - 99, - 24, - 74, - 82, - 74, - 82, - 107, - 90, - 66, - 16, - 74, - 82, - 115, - 156, - 57, - 206, - 74, - 82, - 123, - 222, - 49, - 140, - 74, - 82, - 132, - 33, - 41, - 74, - 74, - 82, - 140, - 99, - 33, - 8, - 74, - 82, - 148, - 165, - 24, - 198, - 74, - 82, - 156, - 231, - 16, - 132, - 74, - 82, - 165, - 41, - 8, - 66, - 74, - 82, - 173, - 107, - 0, - 0, - 74, - 82, - 181, - 173, - 255, - 255, - 66, - 16, - 0, - 0, - 247, - 189, - 66, - 16, - 0, - 0, - 239, - 123, - 66, - 16, - 0, - 0, - 231, - 57, - 66, - 16, - 0, - 0, - 222, - 247, - 66, - 16, - 0, - 0, - 214, - 181, - 66, - 16, - 0, - 0, - 206, - 115, - 66, - 16, - 0, - 0, - 198, - 49, - 66, - 16, - 0, - 0, - 189, - 239, - 66, - 16, - 0, - 0, - 181, - 173, - 66, - 16, - 8, - 66, - 173, - 107, - 66, - 16, - 16, - 132, - 165, - 41, - 66, - 16, - 24, - 198, - 156, - 231, - 66, - 16, - 33, - 8, - 148, - 165, - 66, - 16, - 41, - 74, - 140, - 99, - 66, - 16, - 49, - 140, - 132, - 33, - 66, - 16, - 57, - 206, - 123, - 222, - 66, - 16, - 66, - 16, - 115, - 156, - 66, - 16, - 74, - 82, - 107, - 90, - 66, - 16, - 82, - 148, - 99, - 24, - 66, - 16, - 90, - 214, - 90, - 214, - 66, - 16, - 99, - 24, - 82, - 148, - 66, - 16, - 107, - 90, - 74, - 82, - 66, - 16, - 115, - 156, - 66, - 16, - 66, - 16, - 123, - 222, - 57, - 206, - 66, - 16, - 132, - 33, - 49, - 140, - 66, - 16, - 140, - 99, - 41, - 74, - 66, - 16, - 148, - 165, - 33, - 8, - 66, - 16, - 156, - 231, - 24, - 198, - 66, - 16, - 165, - 41, - 16, - 132, - 66, - 16, - 173, - 107, - 8, - 66, - 66, - 16, - 181, - 173, - 0, - 0, - 66, - 16, - 189, - 239, - 255, - 255, - 57, - 206, - 0, - 0, - 247, - 189, - 57, - 206, - 0, - 0, - 239, - 123, - 57, - 206, - 0, - 0, - 231, - 57, - 57, - 206, - 0, - 0, - 222, - 247, - 57, - 206, - 0, - 0, - 214, - 181, - 57, - 206, - 0, - 0, - 206, - 115, - 57, - 206, - 0, - 0, - 198, - 49, - 57, - 206, - 0, - 0, - 189, - 239, - 57, - 206, - 8, - 66, - 181, - 173, - 57, - 206, - 16, - 132, - 173, - 107, - 57, - 206, - 24, - 198, - 165, - 41, - 57, - 206, - 33, - 8, - 156, - 231, - 57, - 206, - 41, - 74, - 148, - 165, - 57, - 206, - 49, - 140, - 140, - 99, - 57, - 206, - 57, - 206, - 132, - 33, - 57, - 206, - 66, - 16, - 123, - 222, - 57, - 206, - 74, - 82, - 115, - 156, - 57, - 206, - 82, - 148, - 107, - 90, - 57, - 206, - 90, - 214, - 99, - 24, - 57, - 206, - 99, - 24, - 90, - 214, - 57, - 206, - 107, - 90, - 82, - 148, - 57, - 206, - 115, - 156, - 74, - 82, - 57, - 206, - 123, - 222, - 66, - 16, - 57, - 206, - 132, - 33, - 57, - 206, - 57, - 206, - 140, - 99, - 49, - 140, - 57, - 206, - 148, - 165, - 41, - 74, - 57, - 206, - 156, - 231, - 33, - 8, - 57, - 206, - 165, - 41, - 24, - 198, - 57, - 206, - 173, - 107, - 16, - 132, - 57, - 206, - 181, - 173, - 8, - 66, - 57, - 206, - 189, - 239, - 0, - 0, - 57, - 206, - 198, - 49, - 255, - 255, - 49, - 140, - 0, - 0, - 247, - 189, - 49, - 140, - 0, - 0, - 239, - 123, - 49, - 140, - 0, - 0, - 231, - 57, - 49, - 140, - 0, - 0, - 222, - 247, - 49, - 140, - 0, - 0, - 214, - 181, - 49, - 140, - 0, - 0, - 206, - 115, - 49, - 140, - 0, - 0, - 198, - 49, - 49, - 140, - 8, - 66, - 189, - 239, - 49, - 140, - 16, - 132, - 181, - 173, - 49, - 140, - 24, - 198, - 173, - 107, - 49, - 140, - 33, - 8, - 165, - 41, - 49, - 140, - 41, - 74, - 156, - 231, - 49, - 140, - 49, - 140, - 148, - 165, - 49, - 140, - 57, - 206, - 140, - 99, - 49, - 140, - 66, - 16, - 132, - 33, - 49, - 140, - 74, - 82, - 123, - 222, - 49, - 140, - 82, - 148, - 115, - 156, - 49, - 140, - 90, - 214, - 107, - 90, - 49, - 140, - 99, - 24, - 99, - 24, - 49, - 140, - 107, - 90, - 90, - 214, - 49, - 140, - 115, - 156, - 82, - 148, - 49, - 140, - 123, - 222, - 74, - 82, - 49, - 140, - 132, - 33, - 66, - 16, - 49, - 140, - 140, - 99, - 57, - 206, - 49, - 140, - 148, - 165, - 49, - 140, - 49, - 140, - 156, - 231, - 41, - 74, - 49, - 140, - 165, - 41, - 33, - 8, - 49, - 140, - 173, - 107, - 24, - 198, - 49, - 140, - 181, - 173, - 16, - 132, - 49, - 140, - 189, - 239, - 8, - 66, - 49, - 140, - 198, - 49, - 0, - 0, - 49, - 140, - 206, - 115, - 255, - 255, - 41, - 74, - 0, - 0, - 247, - 189, - 41, - 74, - 0, - 0, - 239, - 123, - 41, - 74, - 0, - 0, - 231, - 57, - 41, - 74, - 0, - 0, - 222, - 247, - 41, - 74, - 0, - 0, - 214, - 181, - 41, - 74, - 0, - 0, - 206, - 115, - 41, - 74, - 8, - 66, - 198, - 49, - 41, - 74, - 16, - 132, - 189, - 239, - 41, - 74, - 24, - 198, - 181, - 173, - 41, - 74, - 33, - 8, - 173, - 107, - 41, - 74, - 41, - 74, - 165, - 41, - 41, - 74, - 49, - 140, - 156, - 231, - 41, - 74, - 57, - 206, - 148, - 165, - 41, - 74, - 66, - 16, - 140, - 99, - 41, - 74, - 74, - 82, - 132, - 33, - 41, - 74, - 82, - 148, - 123, - 222, - 41, - 74, - 90, - 214, - 115, - 156, - 41, - 74, - 99, - 24, - 107, - 90, - 41, - 74, - 107, - 90, - 99, - 24, - 41, - 74, - 115, - 156, - 90, - 214, - 41, - 74, - 123, - 222, - 82, - 148, - 41, - 74, - 132, - 33, - 74, - 82, - 41, - 74, - 140, - 99, - 66, - 16, - 41, - 74, - 148, - 165, - 57, - 206, - 41, - 74, - 156, - 231, - 49, - 140, - 41, - 74, - 165, - 41, - 41, - 74, - 41, - 74, - 173, - 107, - 33, - 8, - 41, - 74, - 181, - 173, - 24, - 198, - 41, - 74, - 189, - 239, - 16, - 132, - 41, - 74, - 198, - 49, - 8, - 66, - 41, - 74, - 206, - 115, - 0, - 0, - 41, - 74, - 214, - 181, - 255, - 255, - 33, - 8, - 0, - 0, - 247, - 189, - 33, - 8, - 0, - 0, - 239, - 123, - 33, - 8, - 0, - 0, - 231, - 57, - 33, - 8, - 0, - 0, - 222, - 247, - 33, - 8, - 0, - 0, - 214, - 181, - 33, - 8, - 8, - 66, - 206, - 115, - 33, - 8, - 16, - 132, - 198, - 49, - 33, - 8, - 24, - 198, - 189, - 239, - 33, - 8, - 33, - 8, - 181, - 173, - 33, - 8, - 41, - 74, - 173, - 107, - 33, - 8, - 49, - 140, - 165, - 41, - 33, - 8, - 57, - 206, - 156, - 231, - 33, - 8, - 66, - 16, - 148, - 165, - 33, - 8, - 74, - 82, - 140, - 99, - 33, - 8, - 82, - 148, - 132, - 33, - 33, - 8, - 90, - 214, - 123, - 222, - 33, - 8, - 99, - 24, - 115, - 156, - 33, - 8, - 107, - 90, - 107, - 90, - 33, - 8, - 115, - 156, - 99, - 24, - 33, - 8, - 123, - 222, - 90, - 214, - 33, - 8, - 132, - 33, - 82, - 148, - 33, - 8, - 140, - 99, - 74, - 82, - 33, - 8, - 148, - 165, - 66, - 16, - 33, - 8, - 156, - 231, - 57, - 206, - 33, - 8, - 165, - 41, - 49, - 140, - 33, - 8, - 173, - 107, - 41, - 74, - 33, - 8, - 181, - 173, - 33, - 8, - 33, - 8, - 189, - 239, - 24, - 198, - 33, - 8, - 198, - 49, - 16, - 132, - 33, - 8, - 206, - 115, - 8, - 66, - 33, - 8, - 214, - 181, - 0, - 0, - 33, - 8, - 222, - 247, - 255, - 255, - 24, - 198, - 0, - 0, - 247, - 189, - 24, - 198, - 0, - 0, - 239, - 123, - 24, - 198, - 0, - 0, - 231, - 57, - 24, - 198, - 0, - 0, - 222, - 247, - 24, - 198, - 8, - 66, - 214, - 181, - 24, - 198, - 16, - 132, - 206, - 115, - 24, - 198, - 24, - 198, - 198, - 49, - 24, - 198, - 33, - 8, - 189, - 239, - 24, - 198, - 41, - 74, - 181, - 173, - 24, - 198, - 49, - 140, - 173, - 107, - 24, - 198, - 57, - 206, - 165, - 41, - 24, - 198, - 66, - 16, - 156, - 231, - 24, - 198, - 74, - 82, - 148, - 165, - 24, - 198, - 82, - 148, - 140, - 99, - 24, - 198, - 90, - 214, - 132, - 33, - 24, - 198, - 99, - 24, - 123, - 222, - 24, - 198, - 107, - 90, - 115, - 156, - 24, - 198, - 115, - 156, - 107, - 90, - 24, - 198, - 123, - 222, - 99, - 24, - 24, - 198, - 132, - 33, - 90, - 214, - 24, - 198, - 140, - 99, - 82, - 148, - 24, - 198, - 148, - 165, - 74, - 82, - 24, - 198, - 156, - 231, - 66, - 16, - 24, - 198, - 165, - 41, - 57, - 206, - 24, - 198, - 173, - 107, - 49, - 140, - 24, - 198, - 181, - 173, - 41, - 74, - 24, - 198, - 189, - 239, - 33, - 8, - 24, - 198, - 198, - 49, - 24, - 198, - 24, - 198, - 206, - 115, - 16, - 132, - 24, - 198, - 214, - 181, - 8, - 66, - 24, - 198, - 222, - 247, - 0, - 0, - 24, - 198, - 231, - 57, - 255, - 255, - 16, - 132, - 0, - 0, - 247, - 189, - 16, - 132, - 0, - 0, - 239, - 123, - 16, - 132, - 0, - 0, - 231, - 57, - 16, - 132, - 8, - 66, - 222, - 247, - 16, - 132, - 16, - 132, - 214, - 181, - 16, - 132, - 24, - 198, - 206, - 115, - 16, - 132, - 33, - 8, - 198, - 49, - 16, - 132, - 41, - 74, - 189, - 239, - 16, - 132, - 49, - 140, - 181, - 173, - 16, - 132, - 57, - 206, - 173, - 107, - 16, - 132, - 66, - 16, - 165, - 41, - 16, - 132, - 74, - 82, - 156, - 231, - 16, - 132, - 82, - 148, - 148, - 165, - 16, - 132, - 90, - 214, - 140, - 99, - 16, - 132, - 99, - 24, - 132, - 33, - 16, - 132, - 107, - 90, - 123, - 222, - 16, - 132, - 115, - 156, - 115, - 156, - 16, - 132, - 123, - 222, - 107, - 90, - 16, - 132, - 132, - 33, - 99, - 24, - 16, - 132, - 140, - 99, - 90, - 214, - 16, - 132, - 148, - 165, - 82, - 148, - 16, - 132, - 156, - 231, - 74, - 82, - 16, - 132, - 165, - 41, - 66, - 16, - 16, - 132, - 173, - 107, - 57, - 206, - 16, - 132, - 181, - 173, - 49, - 140, - 16, - 132, - 189, - 239, - 41, - 74, - 16, - 132, - 198, - 49, - 33, - 8, - 16, - 132, - 206, - 115, - 24, - 198, - 16, - 132, - 214, - 181, - 16, - 132, - 16, - 132, - 222, - 247, - 8, - 66, - 16, - 132, - 231, - 57, - 0, - 0, - 16, - 132, - 239, - 123, - 255, - 255, - 8, - 66, - 0, - 0, - 247, - 189, - 8, - 66, - 0, - 0, - 239, - 123, - 8, - 66, - 8, - 66, - 231, - 57, - 8, - 66, - 16, - 132, - 222, - 247, - 8, - 66, - 24, - 198, - 214, - 181, - 8, - 66, - 33, - 8, - 206, - 115, - 8, - 66, - 41, - 74, - 198, - 49, - 8, - 66, - 49, - 140, - 189, - 239, - 8, - 66, - 57, - 206, - 181, - 173, - 8, - 66, - 66, - 16, - 173, - 107, - 8, - 66, - 74, - 82, - 165, - 41, - 8, - 66, - 82, - 148, - 156, - 231, - 8, - 66, - 90, - 214, - 148, - 165, - 8, - 66, - 99, - 24, - 140, - 99, - 8, - 66, - 107, - 90, - 132, - 33, - 8, - 66, - 115, - 156, - 123, - 222, - 8, - 66, - 123, - 222, - 115, - 156, - 8, - 66, - 132, - 33, - 107, - 90, - 8, - 66, - 140, - 99, - 99, - 24, - 8, - 66, - 148, - 165, - 90, - 214, - 8, - 66, - 156, - 231, - 82, - 148, - 8, - 66, - 165, - 41, - 74, - 82, - 8, - 66, - 173, - 107, - 66, - 16, - 8, - 66, - 181, - 173, - 57, - 206, - 8, - 66, - 189, - 239, - 49, - 140, - 8, - 66, - 198, - 49, - 41, - 74, - 8, - 66, - 206, - 115, - 33, - 8, - 8, - 66, - 214, - 181, - 24, - 198, - 8, - 66, - 222, - 247, - 16, - 132, - 8, - 66, - 231, - 57, - 8, - 66, - 8, - 66, - 239, - 123, - 0, - 0, - 8, - 66, - 247, - 189, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 8, - 66, - 239, - 123, - 0, - 0, - 16, - 132, - 231, - 57, - 0, - 0, - 24, - 198, - 222, - 247, - 0, - 0, - 33, - 8, - 214, - 181, - 0, - 0, - 41, - 74, - 206, - 115, - 0, - 0, - 49, - 140, - 198, - 49, - 0, - 0, - 57, - 206, - 189, - 239, - 0, - 0, - 66, - 16, - 181, - 173, - 0, - 0, - 74, - 82, - 173, - 107, - 0, - 0, - 82, - 148, - 165, - 41, - 0, - 0, - 90, - 214, - 156, - 231, - 0, - 0, - 99, - 24, - 148, - 165, - 0, - 0, - 107, - 90, - 140, - 99, - 0, - 0, - 115, - 156, - 132, - 33, - 0, - 0, - 123, - 222, - 123, - 222, - 0, - 0, - 132, - 33, - 115, - 156, - 0, - 0, - 140, - 99, - 107, - 90, - 0, - 0, - 148, - 165, - 99, - 24, - 0, - 0, - 156, - 231, - 90, - 214, - 0, - 0, - 165, - 41, - 82, - 148, - 0, - 0, - 173, - 107, - 74, - 82, - 0, - 0, - 181, - 173, - 66, - 16, - 0, - 0, - 189, - 239, - 57, - 206, - 0, - 0, - 198, - 49, - 49, - 140, - 0, - 0, - 206, - 115, - 41, - 74, - 0, - 0, - 214, - 181, - 33, - 8, - 0, - 0, - 222, - 247, - 24, - 198, - 0, - 0, - 231, - 57, - 16, - 132, - 0, - 0, - 239, - 123, - 8, - 66, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node rgb-alpha-8bit.png 1`] = ` -Object { - "data": Array [ - 255, - 0, - 8, - 0, - 255, - 0, - 8, - 8, - 255, - 0, - 8, - 16, - 255, - 0, - 8, - 24, - 255, - 0, - 8, - 32, - 255, - 0, - 8, - 41, - 255, - 0, - 8, - 49, - 255, - 0, - 8, - 57, - 255, - 0, - 8, - 65, - 255, - 0, - 8, - 74, - 255, - 0, - 8, - 82, - 255, - 0, - 8, - 90, - 255, - 0, - 8, - 98, - 255, - 0, - 8, - 106, - 255, - 0, - 8, - 115, - 255, - 0, - 8, - 123, - 255, - 0, - 8, - 131, - 255, - 0, - 8, - 139, - 255, - 0, - 8, - 148, - 255, - 0, - 8, - 156, - 255, - 0, - 8, - 164, - 255, - 0, - 8, - 172, - 255, - 0, - 8, - 180, - 255, - 0, - 8, - 189, - 255, - 0, - 8, - 197, - 255, - 0, - 8, - 205, - 255, - 0, - 8, - 213, - 255, - 0, - 8, - 222, - 255, - 0, - 8, - 230, - 255, - 0, - 8, - 238, - 255, - 0, - 8, - 246, - 255, - 0, - 8, - 255, - 255, - 31, - 8, - 0, - 255, - 31, - 8, - 8, - 255, - 31, - 8, - 16, - 255, - 31, - 8, - 24, - 255, - 31, - 8, - 32, - 255, - 31, - 8, - 41, - 255, - 31, - 8, - 49, - 255, - 31, - 8, - 57, - 255, - 31, - 8, - 65, - 255, - 31, - 8, - 74, - 255, - 31, - 8, - 82, - 255, - 31, - 8, - 90, - 255, - 31, - 8, - 98, - 255, - 31, - 8, - 106, - 255, - 31, - 8, - 115, - 255, - 31, - 8, - 123, - 255, - 31, - 8, - 131, - 255, - 31, - 8, - 139, - 255, - 31, - 8, - 148, - 255, - 31, - 8, - 156, - 255, - 31, - 8, - 164, - 255, - 31, - 8, - 172, - 255, - 31, - 8, - 180, - 255, - 31, - 8, - 189, - 255, - 31, - 8, - 197, - 255, - 31, - 8, - 205, - 255, - 31, - 8, - 213, - 255, - 31, - 8, - 222, - 255, - 31, - 8, - 230, - 255, - 31, - 8, - 238, - 255, - 31, - 8, - 246, - 255, - 31, - 8, - 255, - 255, - 63, - 8, - 0, - 255, - 63, - 8, - 8, - 255, - 63, - 8, - 16, - 255, - 63, - 8, - 24, - 255, - 63, - 8, - 32, - 255, - 63, - 8, - 41, - 255, - 63, - 8, - 49, - 255, - 63, - 8, - 57, - 255, - 63, - 8, - 65, - 255, - 63, - 8, - 74, - 255, - 63, - 8, - 82, - 255, - 63, - 8, - 90, - 255, - 63, - 8, - 98, - 255, - 63, - 8, - 106, - 255, - 63, - 8, - 115, - 255, - 63, - 8, - 123, - 255, - 63, - 8, - 131, - 255, - 63, - 8, - 139, - 255, - 63, - 8, - 148, - 255, - 63, - 8, - 156, - 255, - 63, - 8, - 164, - 255, - 63, - 8, - 172, - 255, - 63, - 8, - 180, - 255, - 63, - 8, - 189, - 255, - 63, - 8, - 197, - 255, - 63, - 8, - 205, - 255, - 63, - 8, - 213, - 255, - 63, - 8, - 222, - 255, - 63, - 8, - 230, - 255, - 63, - 8, - 238, - 255, - 63, - 8, - 246, - 255, - 63, - 8, - 255, - 255, - 95, - 8, - 0, - 255, - 95, - 8, - 8, - 255, - 95, - 8, - 16, - 255, - 95, - 8, - 24, - 255, - 95, - 8, - 32, - 255, - 95, - 8, - 41, - 255, - 95, - 8, - 49, - 255, - 95, - 8, - 57, - 255, - 95, - 8, - 65, - 255, - 95, - 8, - 74, - 255, - 95, - 8, - 82, - 255, - 95, - 8, - 90, - 255, - 95, - 8, - 98, - 255, - 95, - 8, - 106, - 255, - 95, - 8, - 115, - 255, - 95, - 8, - 123, - 255, - 95, - 8, - 131, - 255, - 95, - 8, - 139, - 255, - 95, - 8, - 148, - 255, - 95, - 8, - 156, - 255, - 95, - 8, - 164, - 255, - 95, - 8, - 172, - 255, - 95, - 8, - 180, - 255, - 95, - 8, - 189, - 255, - 95, - 8, - 197, - 255, - 95, - 8, - 205, - 255, - 95, - 8, - 213, - 255, - 95, - 8, - 222, - 255, - 95, - 8, - 230, - 255, - 95, - 8, - 238, - 255, - 95, - 8, - 246, - 255, - 95, - 8, - 255, - 255, - 127, - 7, - 0, - 255, - 127, - 7, - 8, - 255, - 127, - 7, - 16, - 255, - 127, - 7, - 24, - 255, - 127, - 7, - 32, - 255, - 127, - 7, - 41, - 255, - 127, - 7, - 49, - 255, - 127, - 7, - 57, - 255, - 127, - 7, - 65, - 255, - 127, - 7, - 74, - 255, - 127, - 7, - 82, - 255, - 127, - 7, - 90, - 255, - 127, - 7, - 98, - 255, - 127, - 7, - 106, - 255, - 127, - 7, - 115, - 255, - 127, - 7, - 123, - 255, - 127, - 7, - 131, - 255, - 127, - 7, - 139, - 255, - 127, - 7, - 148, - 255, - 127, - 7, - 156, - 255, - 127, - 7, - 164, - 255, - 127, - 7, - 172, - 255, - 127, - 7, - 180, - 255, - 127, - 7, - 189, - 255, - 127, - 7, - 197, - 255, - 127, - 7, - 205, - 255, - 127, - 7, - 213, - 255, - 127, - 7, - 222, - 255, - 127, - 7, - 230, - 255, - 127, - 7, - 238, - 255, - 127, - 7, - 246, - 255, - 127, - 7, - 255, - 255, - 159, - 7, - 0, - 255, - 159, - 7, - 8, - 255, - 159, - 7, - 16, - 255, - 159, - 7, - 24, - 255, - 159, - 7, - 32, - 255, - 159, - 7, - 41, - 255, - 159, - 7, - 49, - 255, - 159, - 7, - 57, - 255, - 159, - 7, - 65, - 255, - 159, - 7, - 74, - 255, - 159, - 7, - 82, - 255, - 159, - 7, - 90, - 255, - 159, - 7, - 98, - 255, - 159, - 7, - 106, - 255, - 159, - 7, - 115, - 255, - 159, - 7, - 123, - 255, - 159, - 7, - 131, - 255, - 159, - 7, - 139, - 255, - 159, - 7, - 148, - 255, - 159, - 7, - 156, - 255, - 159, - 7, - 164, - 255, - 159, - 7, - 172, - 255, - 159, - 7, - 180, - 255, - 159, - 7, - 189, - 255, - 159, - 7, - 197, - 255, - 159, - 7, - 205, - 255, - 159, - 7, - 213, - 255, - 159, - 7, - 222, - 255, - 159, - 7, - 230, - 255, - 159, - 7, - 238, - 255, - 159, - 7, - 246, - 255, - 159, - 7, - 255, - 255, - 191, - 7, - 0, - 255, - 191, - 7, - 8, - 255, - 191, - 7, - 16, - 255, - 191, - 7, - 24, - 255, - 191, - 7, - 32, - 255, - 191, - 7, - 41, - 255, - 191, - 7, - 49, - 255, - 191, - 7, - 57, - 255, - 191, - 7, - 65, - 255, - 191, - 7, - 74, - 255, - 191, - 7, - 82, - 255, - 191, - 7, - 90, - 255, - 191, - 7, - 98, - 255, - 191, - 7, - 106, - 255, - 191, - 7, - 115, - 255, - 191, - 7, - 123, - 255, - 191, - 7, - 131, - 255, - 191, - 7, - 139, - 255, - 191, - 7, - 148, - 255, - 191, - 7, - 156, - 255, - 191, - 7, - 164, - 255, - 191, - 7, - 172, - 255, - 191, - 7, - 180, - 255, - 191, - 7, - 189, - 255, - 191, - 7, - 197, - 255, - 191, - 7, - 205, - 255, - 191, - 7, - 213, - 255, - 191, - 7, - 222, - 255, - 191, - 7, - 230, - 255, - 191, - 7, - 238, - 255, - 191, - 7, - 246, - 255, - 191, - 7, - 255, - 255, - 223, - 7, - 0, - 255, - 223, - 7, - 8, - 255, - 223, - 7, - 16, - 255, - 223, - 7, - 24, - 255, - 223, - 7, - 32, - 255, - 223, - 7, - 41, - 255, - 223, - 7, - 49, - 255, - 223, - 7, - 57, - 255, - 223, - 7, - 65, - 255, - 223, - 7, - 74, - 255, - 223, - 7, - 82, - 255, - 223, - 7, - 90, - 255, - 223, - 7, - 98, - 255, - 223, - 7, - 106, - 255, - 223, - 7, - 115, - 255, - 223, - 7, - 123, - 255, - 223, - 7, - 131, - 255, - 223, - 7, - 139, - 255, - 223, - 7, - 148, - 255, - 223, - 7, - 156, - 255, - 223, - 7, - 164, - 255, - 223, - 7, - 172, - 255, - 223, - 7, - 180, - 255, - 223, - 7, - 189, - 255, - 223, - 7, - 197, - 255, - 223, - 7, - 205, - 255, - 223, - 7, - 213, - 255, - 223, - 7, - 222, - 255, - 223, - 7, - 230, - 255, - 223, - 7, - 238, - 255, - 223, - 7, - 246, - 255, - 223, - 7, - 255, - 255, - 255, - 6, - 0, - 255, - 255, - 6, - 8, - 255, - 255, - 6, - 16, - 255, - 255, - 6, - 24, - 255, - 255, - 6, - 32, - 255, - 255, - 6, - 41, - 255, - 255, - 6, - 49, - 255, - 255, - 6, - 57, - 255, - 255, - 6, - 65, - 255, - 255, - 6, - 74, - 255, - 255, - 6, - 82, - 255, - 255, - 6, - 90, - 255, - 255, - 6, - 98, - 255, - 255, - 6, - 106, - 255, - 255, - 6, - 115, - 255, - 255, - 6, - 123, - 255, - 255, - 6, - 131, - 255, - 255, - 6, - 139, - 255, - 255, - 6, - 148, - 255, - 255, - 6, - 156, - 255, - 255, - 6, - 164, - 255, - 255, - 6, - 172, - 255, - 255, - 6, - 180, - 255, - 255, - 6, - 189, - 255, - 255, - 6, - 197, - 255, - 255, - 6, - 205, - 255, - 255, - 6, - 213, - 255, - 255, - 6, - 222, - 255, - 255, - 6, - 230, - 255, - 255, - 6, - 238, - 255, - 255, - 6, - 246, - 255, - 255, - 6, - 255, - 224, - 255, - 6, - 0, - 224, - 255, - 6, - 8, - 224, - 255, - 6, - 16, - 224, - 255, - 6, - 24, - 224, - 255, - 6, - 32, - 224, - 255, - 6, - 41, - 224, - 255, - 6, - 49, - 224, - 255, - 6, - 57, - 224, - 255, - 6, - 65, - 224, - 255, - 6, - 74, - 224, - 255, - 6, - 82, - 224, - 255, - 6, - 90, - 224, - 255, - 6, - 98, - 224, - 255, - 6, - 106, - 224, - 255, - 6, - 115, - 224, - 255, - 6, - 123, - 224, - 255, - 6, - 131, - 224, - 255, - 6, - 139, - 224, - 255, - 6, - 148, - 224, - 255, - 6, - 156, - 224, - 255, - 6, - 164, - 224, - 255, - 6, - 172, - 224, - 255, - 6, - 180, - 224, - 255, - 6, - 189, - 224, - 255, - 6, - 197, - 224, - 255, - 6, - 205, - 224, - 255, - 6, - 213, - 224, - 255, - 6, - 222, - 224, - 255, - 6, - 230, - 224, - 255, - 6, - 238, - 224, - 255, - 6, - 246, - 224, - 255, - 6, - 255, - 192, - 255, - 6, - 0, - 192, - 255, - 6, - 8, - 192, - 255, - 6, - 16, - 192, - 255, - 6, - 24, - 192, - 255, - 6, - 32, - 192, - 255, - 6, - 41, - 192, - 255, - 6, - 49, - 192, - 255, - 6, - 57, - 192, - 255, - 6, - 65, - 192, - 255, - 6, - 74, - 192, - 255, - 6, - 82, - 192, - 255, - 6, - 90, - 192, - 255, - 6, - 98, - 192, - 255, - 6, - 106, - 192, - 255, - 6, - 115, - 192, - 255, - 6, - 123, - 192, - 255, - 6, - 131, - 192, - 255, - 6, - 139, - 192, - 255, - 6, - 148, - 192, - 255, - 6, - 156, - 192, - 255, - 6, - 164, - 192, - 255, - 6, - 172, - 192, - 255, - 6, - 180, - 192, - 255, - 6, - 189, - 192, - 255, - 6, - 197, - 192, - 255, - 6, - 205, - 192, - 255, - 6, - 213, - 192, - 255, - 6, - 222, - 192, - 255, - 6, - 230, - 192, - 255, - 6, - 238, - 192, - 255, - 6, - 246, - 192, - 255, - 6, - 255, - 160, - 255, - 5, - 0, - 160, - 255, - 5, - 8, - 160, - 255, - 5, - 16, - 160, - 255, - 5, - 24, - 160, - 255, - 5, - 32, - 160, - 255, - 5, - 41, - 160, - 255, - 5, - 49, - 160, - 255, - 5, - 57, - 160, - 255, - 5, - 65, - 160, - 255, - 5, - 74, - 160, - 255, - 5, - 82, - 160, - 255, - 5, - 90, - 160, - 255, - 5, - 98, - 160, - 255, - 5, - 106, - 160, - 255, - 5, - 115, - 160, - 255, - 5, - 123, - 160, - 255, - 5, - 131, - 160, - 255, - 5, - 139, - 160, - 255, - 5, - 148, - 160, - 255, - 5, - 156, - 160, - 255, - 5, - 164, - 160, - 255, - 5, - 172, - 160, - 255, - 5, - 180, - 160, - 255, - 5, - 189, - 160, - 255, - 5, - 197, - 160, - 255, - 5, - 205, - 160, - 255, - 5, - 213, - 160, - 255, - 5, - 222, - 160, - 255, - 5, - 230, - 160, - 255, - 5, - 238, - 160, - 255, - 5, - 246, - 160, - 255, - 5, - 255, - 128, - 255, - 5, - 0, - 128, - 255, - 5, - 8, - 128, - 255, - 5, - 16, - 128, - 255, - 5, - 24, - 128, - 255, - 5, - 32, - 128, - 255, - 5, - 41, - 128, - 255, - 5, - 49, - 128, - 255, - 5, - 57, - 128, - 255, - 5, - 65, - 128, - 255, - 5, - 74, - 128, - 255, - 5, - 82, - 128, - 255, - 5, - 90, - 128, - 255, - 5, - 98, - 128, - 255, - 5, - 106, - 128, - 255, - 5, - 115, - 128, - 255, - 5, - 123, - 128, - 255, - 5, - 131, - 128, - 255, - 5, - 139, - 128, - 255, - 5, - 148, - 128, - 255, - 5, - 156, - 128, - 255, - 5, - 164, - 128, - 255, - 5, - 172, - 128, - 255, - 5, - 180, - 128, - 255, - 5, - 189, - 128, - 255, - 5, - 197, - 128, - 255, - 5, - 205, - 128, - 255, - 5, - 213, - 128, - 255, - 5, - 222, - 128, - 255, - 5, - 230, - 128, - 255, - 5, - 238, - 128, - 255, - 5, - 246, - 128, - 255, - 5, - 255, - 96, - 255, - 5, - 0, - 96, - 255, - 5, - 8, - 96, - 255, - 5, - 16, - 96, - 255, - 5, - 24, - 96, - 255, - 5, - 32, - 96, - 255, - 5, - 41, - 96, - 255, - 5, - 49, - 96, - 255, - 5, - 57, - 96, - 255, - 5, - 65, - 96, - 255, - 5, - 74, - 96, - 255, - 5, - 82, - 96, - 255, - 5, - 90, - 96, - 255, - 5, - 98, - 96, - 255, - 5, - 106, - 96, - 255, - 5, - 115, - 96, - 255, - 5, - 123, - 96, - 255, - 5, - 131, - 96, - 255, - 5, - 139, - 96, - 255, - 5, - 148, - 96, - 255, - 5, - 156, - 96, - 255, - 5, - 164, - 96, - 255, - 5, - 172, - 96, - 255, - 5, - 180, - 96, - 255, - 5, - 189, - 96, - 255, - 5, - 197, - 96, - 255, - 5, - 205, - 96, - 255, - 5, - 213, - 96, - 255, - 5, - 222, - 96, - 255, - 5, - 230, - 96, - 255, - 5, - 238, - 96, - 255, - 5, - 246, - 96, - 255, - 5, - 255, - 64, - 255, - 5, - 0, - 64, - 255, - 5, - 8, - 64, - 255, - 5, - 16, - 64, - 255, - 5, - 24, - 64, - 255, - 5, - 32, - 64, - 255, - 5, - 41, - 64, - 255, - 5, - 49, - 64, - 255, - 5, - 57, - 64, - 255, - 5, - 65, - 64, - 255, - 5, - 74, - 64, - 255, - 5, - 82, - 64, - 255, - 5, - 90, - 64, - 255, - 5, - 98, - 64, - 255, - 5, - 106, - 64, - 255, - 5, - 115, - 64, - 255, - 5, - 123, - 64, - 255, - 5, - 131, - 64, - 255, - 5, - 139, - 64, - 255, - 5, - 148, - 64, - 255, - 5, - 156, - 64, - 255, - 5, - 164, - 64, - 255, - 5, - 172, - 64, - 255, - 5, - 180, - 64, - 255, - 5, - 189, - 64, - 255, - 5, - 197, - 64, - 255, - 5, - 205, - 64, - 255, - 5, - 213, - 64, - 255, - 5, - 222, - 64, - 255, - 5, - 230, - 64, - 255, - 5, - 238, - 64, - 255, - 5, - 246, - 64, - 255, - 5, - 255, - 32, - 255, - 4, - 0, - 32, - 255, - 4, - 8, - 32, - 255, - 4, - 16, - 32, - 255, - 4, - 24, - 32, - 255, - 4, - 32, - 32, - 255, - 4, - 41, - 32, - 255, - 4, - 49, - 32, - 255, - 4, - 57, - 32, - 255, - 4, - 65, - 32, - 255, - 4, - 74, - 32, - 255, - 4, - 82, - 32, - 255, - 4, - 90, - 32, - 255, - 4, - 98, - 32, - 255, - 4, - 106, - 32, - 255, - 4, - 115, - 32, - 255, - 4, - 123, - 32, - 255, - 4, - 131, - 32, - 255, - 4, - 139, - 32, - 255, - 4, - 148, - 32, - 255, - 4, - 156, - 32, - 255, - 4, - 164, - 32, - 255, - 4, - 172, - 32, - 255, - 4, - 180, - 32, - 255, - 4, - 189, - 32, - 255, - 4, - 197, - 32, - 255, - 4, - 205, - 32, - 255, - 4, - 213, - 32, - 255, - 4, - 222, - 32, - 255, - 4, - 230, - 32, - 255, - 4, - 238, - 32, - 255, - 4, - 246, - 32, - 255, - 4, - 255, - 4, - 255, - 0, - 0, - 4, - 255, - 0, - 8, - 4, - 255, - 0, - 16, - 4, - 255, - 0, - 24, - 4, - 255, - 0, - 32, - 4, - 255, - 0, - 41, - 4, - 255, - 0, - 49, - 4, - 255, - 0, - 57, - 4, - 255, - 0, - 65, - 4, - 255, - 0, - 74, - 4, - 255, - 0, - 82, - 4, - 255, - 0, - 90, - 4, - 255, - 0, - 98, - 4, - 255, - 0, - 106, - 4, - 255, - 0, - 115, - 4, - 255, - 0, - 123, - 4, - 255, - 0, - 131, - 4, - 255, - 0, - 139, - 4, - 255, - 0, - 148, - 4, - 255, - 0, - 156, - 4, - 255, - 0, - 164, - 4, - 255, - 0, - 172, - 4, - 255, - 0, - 180, - 4, - 255, - 0, - 189, - 4, - 255, - 0, - 197, - 4, - 255, - 0, - 205, - 4, - 255, - 0, - 213, - 4, - 255, - 0, - 222, - 4, - 255, - 0, - 230, - 4, - 255, - 0, - 238, - 4, - 255, - 0, - 246, - 4, - 255, - 0, - 255, - 4, - 255, - 31, - 0, - 4, - 255, - 31, - 8, - 4, - 255, - 31, - 16, - 4, - 255, - 31, - 24, - 4, - 255, - 31, - 32, - 4, - 255, - 31, - 41, - 4, - 255, - 31, - 49, - 4, - 255, - 31, - 57, - 4, - 255, - 31, - 65, - 4, - 255, - 31, - 74, - 4, - 255, - 31, - 82, - 4, - 255, - 31, - 90, - 4, - 255, - 31, - 98, - 4, - 255, - 31, - 106, - 4, - 255, - 31, - 115, - 4, - 255, - 31, - 123, - 4, - 255, - 31, - 131, - 4, - 255, - 31, - 139, - 4, - 255, - 31, - 148, - 4, - 255, - 31, - 156, - 4, - 255, - 31, - 164, - 4, - 255, - 31, - 172, - 4, - 255, - 31, - 180, - 4, - 255, - 31, - 189, - 4, - 255, - 31, - 197, - 4, - 255, - 31, - 205, - 4, - 255, - 31, - 213, - 4, - 255, - 31, - 222, - 4, - 255, - 31, - 230, - 4, - 255, - 31, - 238, - 4, - 255, - 31, - 246, - 4, - 255, - 31, - 255, - 3, - 255, - 63, - 0, - 3, - 255, - 63, - 8, - 3, - 255, - 63, - 16, - 3, - 255, - 63, - 24, - 3, - 255, - 63, - 32, - 3, - 255, - 63, - 41, - 3, - 255, - 63, - 49, - 3, - 255, - 63, - 57, - 3, - 255, - 63, - 65, - 3, - 255, - 63, - 74, - 3, - 255, - 63, - 82, - 3, - 255, - 63, - 90, - 3, - 255, - 63, - 98, - 3, - 255, - 63, - 106, - 3, - 255, - 63, - 115, - 3, - 255, - 63, - 123, - 3, - 255, - 63, - 131, - 3, - 255, - 63, - 139, - 3, - 255, - 63, - 148, - 3, - 255, - 63, - 156, - 3, - 255, - 63, - 164, - 3, - 255, - 63, - 172, - 3, - 255, - 63, - 180, - 3, - 255, - 63, - 189, - 3, - 255, - 63, - 197, - 3, - 255, - 63, - 205, - 3, - 255, - 63, - 213, - 3, - 255, - 63, - 222, - 3, - 255, - 63, - 230, - 3, - 255, - 63, - 238, - 3, - 255, - 63, - 246, - 3, - 255, - 63, - 255, - 3, - 255, - 95, - 0, - 3, - 255, - 95, - 8, - 3, - 255, - 95, - 16, - 3, - 255, - 95, - 24, - 3, - 255, - 95, - 32, - 3, - 255, - 95, - 41, - 3, - 255, - 95, - 49, - 3, - 255, - 95, - 57, - 3, - 255, - 95, - 65, - 3, - 255, - 95, - 74, - 3, - 255, - 95, - 82, - 3, - 255, - 95, - 90, - 3, - 255, - 95, - 98, - 3, - 255, - 95, - 106, - 3, - 255, - 95, - 115, - 3, - 255, - 95, - 123, - 3, - 255, - 95, - 131, - 3, - 255, - 95, - 139, - 3, - 255, - 95, - 148, - 3, - 255, - 95, - 156, - 3, - 255, - 95, - 164, - 3, - 255, - 95, - 172, - 3, - 255, - 95, - 180, - 3, - 255, - 95, - 189, - 3, - 255, - 95, - 197, - 3, - 255, - 95, - 205, - 3, - 255, - 95, - 213, - 3, - 255, - 95, - 222, - 3, - 255, - 95, - 230, - 3, - 255, - 95, - 238, - 3, - 255, - 95, - 246, - 3, - 255, - 95, - 255, - 3, - 255, - 127, - 0, - 3, - 255, - 127, - 8, - 3, - 255, - 127, - 16, - 3, - 255, - 127, - 24, - 3, - 255, - 127, - 32, - 3, - 255, - 127, - 41, - 3, - 255, - 127, - 49, - 3, - 255, - 127, - 57, - 3, - 255, - 127, - 65, - 3, - 255, - 127, - 74, - 3, - 255, - 127, - 82, - 3, - 255, - 127, - 90, - 3, - 255, - 127, - 98, - 3, - 255, - 127, - 106, - 3, - 255, - 127, - 115, - 3, - 255, - 127, - 123, - 3, - 255, - 127, - 131, - 3, - 255, - 127, - 139, - 3, - 255, - 127, - 148, - 3, - 255, - 127, - 156, - 3, - 255, - 127, - 164, - 3, - 255, - 127, - 172, - 3, - 255, - 127, - 180, - 3, - 255, - 127, - 189, - 3, - 255, - 127, - 197, - 3, - 255, - 127, - 205, - 3, - 255, - 127, - 213, - 3, - 255, - 127, - 222, - 3, - 255, - 127, - 230, - 3, - 255, - 127, - 238, - 3, - 255, - 127, - 246, - 3, - 255, - 127, - 255, - 3, - 255, - 159, - 0, - 3, - 255, - 159, - 8, - 3, - 255, - 159, - 16, - 3, - 255, - 159, - 24, - 3, - 255, - 159, - 32, - 3, - 255, - 159, - 41, - 3, - 255, - 159, - 49, - 3, - 255, - 159, - 57, - 3, - 255, - 159, - 65, - 3, - 255, - 159, - 74, - 3, - 255, - 159, - 82, - 3, - 255, - 159, - 90, - 3, - 255, - 159, - 98, - 3, - 255, - 159, - 106, - 3, - 255, - 159, - 115, - 3, - 255, - 159, - 123, - 3, - 255, - 159, - 131, - 3, - 255, - 159, - 139, - 3, - 255, - 159, - 148, - 3, - 255, - 159, - 156, - 3, - 255, - 159, - 164, - 3, - 255, - 159, - 172, - 3, - 255, - 159, - 180, - 3, - 255, - 159, - 189, - 3, - 255, - 159, - 197, - 3, - 255, - 159, - 205, - 3, - 255, - 159, - 213, - 3, - 255, - 159, - 222, - 3, - 255, - 159, - 230, - 3, - 255, - 159, - 238, - 3, - 255, - 159, - 246, - 3, - 255, - 159, - 255, - 2, - 255, - 191, - 0, - 2, - 255, - 191, - 8, - 2, - 255, - 191, - 16, - 2, - 255, - 191, - 24, - 2, - 255, - 191, - 32, - 2, - 255, - 191, - 41, - 2, - 255, - 191, - 49, - 2, - 255, - 191, - 57, - 2, - 255, - 191, - 65, - 2, - 255, - 191, - 74, - 2, - 255, - 191, - 82, - 2, - 255, - 191, - 90, - 2, - 255, - 191, - 98, - 2, - 255, - 191, - 106, - 2, - 255, - 191, - 115, - 2, - 255, - 191, - 123, - 2, - 255, - 191, - 131, - 2, - 255, - 191, - 139, - 2, - 255, - 191, - 148, - 2, - 255, - 191, - 156, - 2, - 255, - 191, - 164, - 2, - 255, - 191, - 172, - 2, - 255, - 191, - 180, - 2, - 255, - 191, - 189, - 2, - 255, - 191, - 197, - 2, - 255, - 191, - 205, - 2, - 255, - 191, - 213, - 2, - 255, - 191, - 222, - 2, - 255, - 191, - 230, - 2, - 255, - 191, - 238, - 2, - 255, - 191, - 246, - 2, - 255, - 191, - 255, - 2, - 255, - 223, - 0, - 2, - 255, - 223, - 8, - 2, - 255, - 223, - 16, - 2, - 255, - 223, - 24, - 2, - 255, - 223, - 32, - 2, - 255, - 223, - 41, - 2, - 255, - 223, - 49, - 2, - 255, - 223, - 57, - 2, - 255, - 223, - 65, - 2, - 255, - 223, - 74, - 2, - 255, - 223, - 82, - 2, - 255, - 223, - 90, - 2, - 255, - 223, - 98, - 2, - 255, - 223, - 106, - 2, - 255, - 223, - 115, - 2, - 255, - 223, - 123, - 2, - 255, - 223, - 131, - 2, - 255, - 223, - 139, - 2, - 255, - 223, - 148, - 2, - 255, - 223, - 156, - 2, - 255, - 223, - 164, - 2, - 255, - 223, - 172, - 2, - 255, - 223, - 180, - 2, - 255, - 223, - 189, - 2, - 255, - 223, - 197, - 2, - 255, - 223, - 205, - 2, - 255, - 223, - 213, - 2, - 255, - 223, - 222, - 2, - 255, - 223, - 230, - 2, - 255, - 223, - 238, - 2, - 255, - 223, - 246, - 2, - 255, - 223, - 255, - 2, - 255, - 255, - 0, - 2, - 255, - 255, - 8, - 2, - 255, - 255, - 16, - 2, - 255, - 255, - 24, - 2, - 255, - 255, - 32, - 2, - 255, - 255, - 41, - 2, - 255, - 255, - 49, - 2, - 255, - 255, - 57, - 2, - 255, - 255, - 65, - 2, - 255, - 255, - 74, - 2, - 255, - 255, - 82, - 2, - 255, - 255, - 90, - 2, - 255, - 255, - 98, - 2, - 255, - 255, - 106, - 2, - 255, - 255, - 115, - 2, - 255, - 255, - 123, - 2, - 255, - 255, - 131, - 2, - 255, - 255, - 139, - 2, - 255, - 255, - 148, - 2, - 255, - 255, - 156, - 2, - 255, - 255, - 164, - 2, - 255, - 255, - 172, - 2, - 255, - 255, - 180, - 2, - 255, - 255, - 189, - 2, - 255, - 255, - 197, - 2, - 255, - 255, - 205, - 2, - 255, - 255, - 213, - 2, - 255, - 255, - 222, - 2, - 255, - 255, - 230, - 2, - 255, - 255, - 238, - 2, - 255, - 255, - 246, - 2, - 255, - 255, - 255, - 1, - 224, - 255, - 0, - 1, - 224, - 255, - 8, - 1, - 224, - 255, - 16, - 1, - 224, - 255, - 24, - 1, - 224, - 255, - 32, - 1, - 224, - 255, - 41, - 1, - 224, - 255, - 49, - 1, - 224, - 255, - 57, - 1, - 224, - 255, - 65, - 1, - 224, - 255, - 74, - 1, - 224, - 255, - 82, - 1, - 224, - 255, - 90, - 1, - 224, - 255, - 98, - 1, - 224, - 255, - 106, - 1, - 224, - 255, - 115, - 1, - 224, - 255, - 123, - 1, - 224, - 255, - 131, - 1, - 224, - 255, - 139, - 1, - 224, - 255, - 148, - 1, - 224, - 255, - 156, - 1, - 224, - 255, - 164, - 1, - 224, - 255, - 172, - 1, - 224, - 255, - 180, - 1, - 224, - 255, - 189, - 1, - 224, - 255, - 197, - 1, - 224, - 255, - 205, - 1, - 224, - 255, - 213, - 1, - 224, - 255, - 222, - 1, - 224, - 255, - 230, - 1, - 224, - 255, - 238, - 1, - 224, - 255, - 246, - 1, - 224, - 255, - 255, - 1, - 192, - 255, - 0, - 1, - 192, - 255, - 8, - 1, - 192, - 255, - 16, - 1, - 192, - 255, - 24, - 1, - 192, - 255, - 32, - 1, - 192, - 255, - 41, - 1, - 192, - 255, - 49, - 1, - 192, - 255, - 57, - 1, - 192, - 255, - 65, - 1, - 192, - 255, - 74, - 1, - 192, - 255, - 82, - 1, - 192, - 255, - 90, - 1, - 192, - 255, - 98, - 1, - 192, - 255, - 106, - 1, - 192, - 255, - 115, - 1, - 192, - 255, - 123, - 1, - 192, - 255, - 131, - 1, - 192, - 255, - 139, - 1, - 192, - 255, - 148, - 1, - 192, - 255, - 156, - 1, - 192, - 255, - 164, - 1, - 192, - 255, - 172, - 1, - 192, - 255, - 180, - 1, - 192, - 255, - 189, - 1, - 192, - 255, - 197, - 1, - 192, - 255, - 205, - 1, - 192, - 255, - 213, - 1, - 192, - 255, - 222, - 1, - 192, - 255, - 230, - 1, - 192, - 255, - 238, - 1, - 192, - 255, - 246, - 1, - 192, - 255, - 255, - 1, - 160, - 255, - 0, - 1, - 160, - 255, - 8, - 1, - 160, - 255, - 16, - 1, - 160, - 255, - 24, - 1, - 160, - 255, - 32, - 1, - 160, - 255, - 41, - 1, - 160, - 255, - 49, - 1, - 160, - 255, - 57, - 1, - 160, - 255, - 65, - 1, - 160, - 255, - 74, - 1, - 160, - 255, - 82, - 1, - 160, - 255, - 90, - 1, - 160, - 255, - 98, - 1, - 160, - 255, - 106, - 1, - 160, - 255, - 115, - 1, - 160, - 255, - 123, - 1, - 160, - 255, - 131, - 1, - 160, - 255, - 139, - 1, - 160, - 255, - 148, - 1, - 160, - 255, - 156, - 1, - 160, - 255, - 164, - 1, - 160, - 255, - 172, - 1, - 160, - 255, - 180, - 1, - 160, - 255, - 189, - 1, - 160, - 255, - 197, - 1, - 160, - 255, - 205, - 1, - 160, - 255, - 213, - 1, - 160, - 255, - 222, - 1, - 160, - 255, - 230, - 1, - 160, - 255, - 238, - 1, - 160, - 255, - 246, - 1, - 160, - 255, - 255, - 1, - 128, - 255, - 0, - 1, - 128, - 255, - 8, - 1, - 128, - 255, - 16, - 1, - 128, - 255, - 24, - 1, - 128, - 255, - 32, - 1, - 128, - 255, - 41, - 1, - 128, - 255, - 49, - 1, - 128, - 255, - 57, - 1, - 128, - 255, - 65, - 1, - 128, - 255, - 74, - 1, - 128, - 255, - 82, - 1, - 128, - 255, - 90, - 1, - 128, - 255, - 98, - 1, - 128, - 255, - 106, - 1, - 128, - 255, - 115, - 1, - 128, - 255, - 123, - 1, - 128, - 255, - 131, - 1, - 128, - 255, - 139, - 1, - 128, - 255, - 148, - 1, - 128, - 255, - 156, - 1, - 128, - 255, - 164, - 1, - 128, - 255, - 172, - 1, - 128, - 255, - 180, - 1, - 128, - 255, - 189, - 1, - 128, - 255, - 197, - 1, - 128, - 255, - 205, - 1, - 128, - 255, - 213, - 1, - 128, - 255, - 222, - 1, - 128, - 255, - 230, - 1, - 128, - 255, - 238, - 1, - 128, - 255, - 246, - 1, - 128, - 255, - 255, - 0, - 96, - 255, - 0, - 0, - 96, - 255, - 8, - 0, - 96, - 255, - 16, - 0, - 96, - 255, - 24, - 0, - 96, - 255, - 32, - 0, - 96, - 255, - 41, - 0, - 96, - 255, - 49, - 0, - 96, - 255, - 57, - 0, - 96, - 255, - 65, - 0, - 96, - 255, - 74, - 0, - 96, - 255, - 82, - 0, - 96, - 255, - 90, - 0, - 96, - 255, - 98, - 0, - 96, - 255, - 106, - 0, - 96, - 255, - 115, - 0, - 96, - 255, - 123, - 0, - 96, - 255, - 131, - 0, - 96, - 255, - 139, - 0, - 96, - 255, - 148, - 0, - 96, - 255, - 156, - 0, - 96, - 255, - 164, - 0, - 96, - 255, - 172, - 0, - 96, - 255, - 180, - 0, - 96, - 255, - 189, - 0, - 96, - 255, - 197, - 0, - 96, - 255, - 205, - 0, - 96, - 255, - 213, - 0, - 96, - 255, - 222, - 0, - 96, - 255, - 230, - 0, - 96, - 255, - 238, - 0, - 96, - 255, - 246, - 0, - 96, - 255, - 255, - 0, - 64, - 255, - 0, - 0, - 64, - 255, - 8, - 0, - 64, - 255, - 16, - 0, - 64, - 255, - 24, - 0, - 64, - 255, - 32, - 0, - 64, - 255, - 41, - 0, - 64, - 255, - 49, - 0, - 64, - 255, - 57, - 0, - 64, - 255, - 65, - 0, - 64, - 255, - 74, - 0, - 64, - 255, - 82, - 0, - 64, - 255, - 90, - 0, - 64, - 255, - 98, - 0, - 64, - 255, - 106, - 0, - 64, - 255, - 115, - 0, - 64, - 255, - 123, - 0, - 64, - 255, - 131, - 0, - 64, - 255, - 139, - 0, - 64, - 255, - 148, - 0, - 64, - 255, - 156, - 0, - 64, - 255, - 164, - 0, - 64, - 255, - 172, - 0, - 64, - 255, - 180, - 0, - 64, - 255, - 189, - 0, - 64, - 255, - 197, - 0, - 64, - 255, - 205, - 0, - 64, - 255, - 213, - 0, - 64, - 255, - 222, - 0, - 64, - 255, - 230, - 0, - 64, - 255, - 238, - 0, - 64, - 255, - 246, - 0, - 64, - 255, - 255, - 0, - 32, - 255, - 0, - 0, - 32, - 255, - 8, - 0, - 32, - 255, - 16, - 0, - 32, - 255, - 24, - 0, - 32, - 255, - 32, - 0, - 32, - 255, - 41, - 0, - 32, - 255, - 49, - 0, - 32, - 255, - 57, - 0, - 32, - 255, - 65, - 0, - 32, - 255, - 74, - 0, - 32, - 255, - 82, - 0, - 32, - 255, - 90, - 0, - 32, - 255, - 98, - 0, - 32, - 255, - 106, - 0, - 32, - 255, - 115, - 0, - 32, - 255, - 123, - 0, - 32, - 255, - 131, - 0, - 32, - 255, - 139, - 0, - 32, - 255, - 148, - 0, - 32, - 255, - 156, - 0, - 32, - 255, - 164, - 0, - 32, - 255, - 172, - 0, - 32, - 255, - 180, - 0, - 32, - 255, - 189, - 0, - 32, - 255, - 197, - 0, - 32, - 255, - 205, - 0, - 32, - 255, - 213, - 0, - 32, - 255, - 222, - 0, - 32, - 255, - 230, - 0, - 32, - 255, - 238, - 0, - 32, - 255, - 246, - 0, - 32, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node rgb-alpha-16bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 188, - 255, - 255, - 0, - 0, - 0, - 0, - 239, - 122, - 255, - 255, - 0, - 0, - 0, - 0, - 231, - 56, - 255, - 255, - 0, - 0, - 0, - 0, - 222, - 246, - 255, - 255, - 0, - 0, - 0, - 0, - 214, - 180, - 255, - 255, - 0, - 0, - 0, - 0, - 206, - 114, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 48, - 255, - 255, - 0, - 0, - 0, - 0, - 189, - 238, - 255, - 255, - 0, - 0, - 0, - 0, - 181, - 172, - 255, - 255, - 0, - 0, - 0, - 0, - 173, - 106, - 255, - 255, - 0, - 0, - 0, - 0, - 165, - 40, - 255, - 255, - 0, - 0, - 0, - 0, - 156, - 230, - 255, - 255, - 0, - 0, - 0, - 0, - 148, - 164, - 255, - 255, - 0, - 0, - 0, - 0, - 140, - 98, - 255, - 255, - 0, - 0, - 0, - 0, - 132, - 32, - 255, - 255, - 0, - 0, - 0, - 0, - 123, - 222, - 255, - 255, - 0, - 0, - 0, - 0, - 115, - 156, - 255, - 255, - 0, - 0, - 0, - 0, - 107, - 90, - 255, - 255, - 0, - 0, - 0, - 0, - 99, - 24, - 255, - 255, - 0, - 0, - 0, - 0, - 90, - 214, - 255, - 255, - 0, - 0, - 0, - 0, - 82, - 148, - 255, - 255, - 0, - 0, - 0, - 0, - 74, - 82, - 255, - 255, - 0, - 0, - 0, - 0, - 66, - 16, - 255, - 255, - 0, - 0, - 0, - 0, - 57, - 206, - 255, - 255, - 0, - 0, - 0, - 0, - 49, - 140, - 255, - 255, - 0, - 0, - 0, - 0, - 41, - 74, - 255, - 255, - 0, - 0, - 0, - 0, - 33, - 8, - 255, - 255, - 0, - 0, - 0, - 0, - 24, - 198, - 255, - 255, - 0, - 0, - 0, - 0, - 16, - 132, - 255, - 255, - 0, - 0, - 0, - 0, - 8, - 66, - 255, - 255, - 0, - 0, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 188, - 0, - 0, - 0, - 0, - 255, - 255, - 255, - 255, - 0, - 0, - 16, - 133, - 247, - 43, - 255, - 255, - 0, - 0, - 16, - 133, - 238, - 87, - 255, - 255, - 0, - 0, - 16, - 133, - 229, - 131, - 255, - 255, - 0, - 0, - 16, - 133, - 220, - 175, - 255, - 255, - 0, - 0, - 16, - 133, - 211, - 219, - 255, - 255, - 0, - 0, - 16, - 133, - 203, - 8, - 255, - 255, - 0, - 0, - 16, - 133, - 194, - 52, - 255, - 255, - 0, - 0, - 16, - 133, - 185, - 96, - 255, - 255, - 0, - 0, - 16, - 133, - 176, - 140, - 255, - 255, - 0, - 0, - 16, - 133, - 167, - 184, - 255, - 255, - 0, - 0, - 16, - 133, - 158, - 228, - 255, - 255, - 0, - 0, - 16, - 133, - 150, - 17, - 255, - 255, - 0, - 0, - 16, - 133, - 141, - 61, - 255, - 255, - 0, - 0, - 16, - 133, - 132, - 105, - 255, - 255, - 0, - 0, - 16, - 133, - 123, - 149, - 255, - 255, - 0, - 0, - 16, - 133, - 114, - 193, - 255, - 255, - 0, - 0, - 16, - 133, - 105, - 237, - 255, - 255, - 0, - 0, - 16, - 133, - 97, - 26, - 255, - 255, - 0, - 0, - 16, - 133, - 88, - 70, - 255, - 255, - 0, - 0, - 16, - 133, - 79, - 114, - 255, - 255, - 0, - 0, - 16, - 133, - 70, - 158, - 255, - 255, - 0, - 0, - 16, - 133, - 61, - 202, - 255, - 255, - 0, - 0, - 16, - 133, - 52, - 246, - 255, - 255, - 0, - 0, - 16, - 133, - 44, - 35, - 255, - 255, - 0, - 0, - 16, - 133, - 35, - 79, - 255, - 255, - 0, - 0, - 16, - 133, - 26, - 123, - 255, - 255, - 0, - 0, - 16, - 133, - 17, - 167, - 255, - 255, - 0, - 0, - 16, - 133, - 8, - 211, - 255, - 255, - 0, - 0, - 16, - 133, - 0, - 0, - 255, - 255, - 0, - 0, - 16, - 133, - 0, - 0, - 247, - 188, - 8, - 66, - 0, - 0, - 255, - 255, - 239, - 122, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 43, - 0, - 0, - 16, - 133, - 255, - 255, - 255, - 255, - 0, - 0, - 33, - 9, - 246, - 131, - 255, - 255, - 0, - 0, - 33, - 9, - 237, - 8, - 255, - 255, - 0, - 0, - 33, - 9, - 227, - 141, - 255, - 255, - 0, - 0, - 33, - 9, - 218, - 18, - 255, - 255, - 0, - 0, - 33, - 9, - 208, - 150, - 255, - 255, - 0, - 0, - 33, - 9, - 199, - 27, - 255, - 255, - 0, - 0, - 33, - 9, - 189, - 160, - 255, - 255, - 0, - 0, - 33, - 9, - 180, - 37, - 255, - 255, - 0, - 0, - 33, - 9, - 170, - 169, - 255, - 255, - 0, - 0, - 33, - 9, - 161, - 46, - 255, - 255, - 0, - 0, - 33, - 9, - 151, - 179, - 255, - 255, - 0, - 0, - 33, - 9, - 142, - 56, - 255, - 255, - 0, - 0, - 33, - 9, - 132, - 189, - 255, - 255, - 0, - 0, - 33, - 9, - 123, - 65, - 255, - 255, - 0, - 0, - 33, - 9, - 113, - 198, - 255, - 255, - 0, - 0, - 33, - 9, - 104, - 75, - 255, - 255, - 0, - 0, - 33, - 9, - 94, - 208, - 255, - 255, - 0, - 0, - 33, - 9, - 85, - 84, - 255, - 255, - 0, - 0, - 33, - 9, - 75, - 217, - 255, - 255, - 0, - 0, - 33, - 9, - 66, - 94, - 255, - 255, - 0, - 0, - 33, - 9, - 56, - 227, - 255, - 255, - 0, - 0, - 33, - 9, - 47, - 104, - 255, - 255, - 0, - 0, - 33, - 9, - 37, - 236, - 255, - 255, - 0, - 0, - 33, - 9, - 28, - 113, - 255, - 255, - 0, - 0, - 33, - 9, - 18, - 246, - 255, - 255, - 0, - 0, - 33, - 9, - 9, - 123, - 255, - 255, - 0, - 0, - 33, - 9, - 0, - 0, - 255, - 255, - 0, - 0, - 33, - 9, - 0, - 0, - 247, - 43, - 8, - 211, - 16, - 133, - 0, - 0, - 239, - 122, - 16, - 132, - 0, - 0, - 255, - 255, - 231, - 56, - 0, - 0, - 0, - 0, - 255, - 255, - 238, - 87, - 0, - 0, - 16, - 133, - 255, - 255, - 246, - 131, - 0, - 0, - 33, - 9, - 255, - 255, - 255, - 255, - 0, - 0, - 49, - 141, - 245, - 193, - 255, - 255, - 0, - 0, - 49, - 141, - 235, - 132, - 255, - 255, - 0, - 0, - 49, - 141, - 225, - 70, - 255, - 255, - 0, - 0, - 49, - 141, - 215, - 9, - 255, - 255, - 0, - 0, - 49, - 141, - 204, - 204, - 255, - 255, - 0, - 0, - 49, - 141, - 194, - 142, - 255, - 255, - 0, - 0, - 49, - 141, - 184, - 81, - 255, - 255, - 0, - 0, - 49, - 141, - 174, - 19, - 255, - 255, - 0, - 0, - 49, - 141, - 163, - 214, - 255, - 255, - 0, - 0, - 49, - 141, - 153, - 152, - 255, - 255, - 0, - 0, - 49, - 141, - 143, - 91, - 255, - 255, - 0, - 0, - 49, - 141, - 133, - 30, - 255, - 255, - 0, - 0, - 49, - 141, - 122, - 224, - 255, - 255, - 0, - 0, - 49, - 141, - 112, - 163, - 255, - 255, - 0, - 0, - 49, - 141, - 102, - 101, - 255, - 255, - 0, - 0, - 49, - 141, - 92, - 40, - 255, - 255, - 0, - 0, - 49, - 141, - 81, - 235, - 255, - 255, - 0, - 0, - 49, - 141, - 71, - 173, - 255, - 255, - 0, - 0, - 49, - 141, - 61, - 112, - 255, - 255, - 0, - 0, - 49, - 141, - 51, - 50, - 255, - 255, - 0, - 0, - 49, - 141, - 40, - 245, - 255, - 255, - 0, - 0, - 49, - 141, - 30, - 184, - 255, - 255, - 0, - 0, - 49, - 141, - 20, - 122, - 255, - 255, - 0, - 0, - 49, - 141, - 10, - 61, - 255, - 255, - 0, - 0, - 49, - 141, - 0, - 0, - 255, - 255, - 0, - 0, - 49, - 141, - 0, - 0, - 246, - 131, - 9, - 123, - 33, - 9, - 0, - 0, - 238, - 87, - 17, - 167, - 16, - 133, - 0, - 0, - 231, - 56, - 24, - 198, - 0, - 0, - 255, - 255, - 222, - 246, - 0, - 0, - 0, - 0, - 255, - 255, - 229, - 131, - 0, - 0, - 16, - 133, - 255, - 255, - 237, - 8, - 0, - 0, - 33, - 9, - 255, - 255, - 245, - 193, - 0, - 0, - 49, - 141, - 255, - 255, - 255, - 255, - 0, - 0, - 66, - 17, - 244, - 221, - 255, - 255, - 0, - 0, - 66, - 17, - 233, - 188, - 255, - 255, - 0, - 0, - 66, - 17, - 222, - 154, - 255, - 255, - 0, - 0, - 66, - 17, - 211, - 121, - 255, - 255, - 0, - 0, - 66, - 17, - 200, - 88, - 255, - 255, - 0, - 0, - 66, - 17, - 189, - 54, - 255, - 255, - 0, - 0, - 66, - 17, - 178, - 21, - 255, - 255, - 0, - 0, - 66, - 17, - 166, - 244, - 255, - 255, - 0, - 0, - 66, - 17, - 155, - 210, - 255, - 255, - 0, - 0, - 66, - 17, - 144, - 177, - 255, - 255, - 0, - 0, - 66, - 17, - 133, - 144, - 255, - 255, - 0, - 0, - 66, - 17, - 122, - 110, - 255, - 255, - 0, - 0, - 66, - 17, - 111, - 77, - 255, - 255, - 0, - 0, - 66, - 17, - 100, - 44, - 255, - 255, - 0, - 0, - 66, - 17, - 89, - 10, - 255, - 255, - 0, - 0, - 66, - 17, - 77, - 233, - 255, - 255, - 0, - 0, - 66, - 17, - 66, - 200, - 255, - 255, - 0, - 0, - 66, - 17, - 55, - 166, - 255, - 255, - 0, - 0, - 66, - 17, - 44, - 133, - 255, - 255, - 0, - 0, - 66, - 17, - 33, - 100, - 255, - 255, - 0, - 0, - 66, - 17, - 22, - 66, - 255, - 255, - 0, - 0, - 66, - 17, - 11, - 33, - 255, - 255, - 0, - 0, - 66, - 17, - 0, - 0, - 255, - 255, - 0, - 0, - 66, - 17, - 0, - 0, - 245, - 193, - 10, - 61, - 49, - 141, - 0, - 0, - 237, - 8, - 18, - 246, - 33, - 9, - 0, - 0, - 229, - 131, - 26, - 123, - 16, - 133, - 0, - 0, - 222, - 246, - 33, - 8, - 0, - 0, - 255, - 255, - 214, - 180, - 0, - 0, - 0, - 0, - 255, - 255, - 220, - 175, - 0, - 0, - 16, - 133, - 255, - 255, - 227, - 141, - 0, - 0, - 33, - 9, - 255, - 255, - 235, - 132, - 0, - 0, - 49, - 141, - 255, - 255, - 244, - 221, - 0, - 0, - 66, - 17, - 255, - 255, - 255, - 255, - 0, - 0, - 82, - 149, - 243, - 206, - 255, - 255, - 0, - 0, - 82, - 149, - 231, - 157, - 255, - 255, - 0, - 0, - 82, - 149, - 219, - 108, - 255, - 255, - 0, - 0, - 82, - 149, - 207, - 60, - 255, - 255, - 0, - 0, - 82, - 149, - 195, - 11, - 255, - 255, - 0, - 0, - 82, - 149, - 182, - 218, - 255, - 255, - 0, - 0, - 82, - 149, - 170, - 169, - 255, - 255, - 0, - 0, - 82, - 149, - 158, - 121, - 255, - 255, - 0, - 0, - 82, - 149, - 146, - 72, - 255, - 255, - 0, - 0, - 82, - 149, - 134, - 23, - 255, - 255, - 0, - 0, - 82, - 149, - 121, - 231, - 255, - 255, - 0, - 0, - 82, - 149, - 109, - 182, - 255, - 255, - 0, - 0, - 82, - 149, - 97, - 133, - 255, - 255, - 0, - 0, - 82, - 149, - 85, - 84, - 255, - 255, - 0, - 0, - 82, - 149, - 73, - 36, - 255, - 255, - 0, - 0, - 82, - 149, - 60, - 243, - 255, - 255, - 0, - 0, - 82, - 149, - 48, - 194, - 255, - 255, - 0, - 0, - 82, - 149, - 36, - 146, - 255, - 255, - 0, - 0, - 82, - 149, - 24, - 97, - 255, - 255, - 0, - 0, - 82, - 149, - 12, - 48, - 255, - 255, - 0, - 0, - 82, - 149, - 0, - 0, - 255, - 255, - 0, - 0, - 82, - 149, - 0, - 0, - 244, - 221, - 11, - 33, - 66, - 17, - 0, - 0, - 235, - 132, - 20, - 122, - 49, - 141, - 0, - 0, - 227, - 141, - 28, - 113, - 33, - 9, - 0, - 0, - 220, - 175, - 35, - 79, - 16, - 133, - 0, - 0, - 214, - 180, - 41, - 74, - 0, - 0, - 255, - 255, - 206, - 114, - 0, - 0, - 0, - 0, - 255, - 255, - 211, - 219, - 0, - 0, - 16, - 133, - 255, - 255, - 218, - 18, - 0, - 0, - 33, - 9, - 255, - 255, - 225, - 70, - 0, - 0, - 49, - 141, - 255, - 255, - 233, - 188, - 0, - 0, - 66, - 17, - 255, - 255, - 243, - 206, - 0, - 0, - 82, - 149, - 255, - 255, - 255, - 255, - 0, - 0, - 99, - 25, - 242, - 133, - 255, - 255, - 0, - 0, - 99, - 25, - 229, - 12, - 255, - 255, - 0, - 0, - 99, - 25, - 215, - 147, - 255, - 255, - 0, - 0, - 99, - 25, - 202, - 26, - 255, - 255, - 0, - 0, - 99, - 25, - 188, - 160, - 255, - 255, - 0, - 0, - 99, - 25, - 175, - 39, - 255, - 255, - 0, - 0, - 99, - 25, - 161, - 174, - 255, - 255, - 0, - 0, - 99, - 25, - 148, - 53, - 255, - 255, - 0, - 0, - 99, - 25, - 134, - 188, - 255, - 255, - 0, - 0, - 99, - 25, - 121, - 66, - 255, - 255, - 0, - 0, - 99, - 25, - 107, - 201, - 255, - 255, - 0, - 0, - 99, - 25, - 94, - 80, - 255, - 255, - 0, - 0, - 99, - 25, - 80, - 215, - 255, - 255, - 0, - 0, - 99, - 25, - 67, - 94, - 255, - 255, - 0, - 0, - 99, - 25, - 53, - 228, - 255, - 255, - 0, - 0, - 99, - 25, - 40, - 107, - 255, - 255, - 0, - 0, - 99, - 25, - 26, - 242, - 255, - 255, - 0, - 0, - 99, - 25, - 13, - 121, - 255, - 255, - 0, - 0, - 99, - 25, - 0, - 0, - 255, - 255, - 0, - 0, - 99, - 25, - 0, - 0, - 243, - 206, - 12, - 48, - 82, - 149, - 0, - 0, - 233, - 188, - 22, - 66, - 66, - 17, - 0, - 0, - 225, - 70, - 30, - 184, - 49, - 141, - 0, - 0, - 218, - 18, - 37, - 236, - 33, - 9, - 0, - 0, - 211, - 219, - 44, - 35, - 16, - 133, - 0, - 0, - 206, - 114, - 49, - 140, - 0, - 0, - 255, - 255, - 198, - 48, - 0, - 0, - 0, - 0, - 255, - 255, - 203, - 8, - 0, - 0, - 16, - 133, - 255, - 255, - 208, - 150, - 0, - 0, - 33, - 9, - 255, - 255, - 215, - 9, - 0, - 0, - 49, - 141, - 255, - 255, - 222, - 154, - 0, - 0, - 66, - 17, - 255, - 255, - 231, - 157, - 0, - 0, - 82, - 149, - 255, - 255, - 242, - 133, - 0, - 0, - 99, - 25, - 255, - 255, - 255, - 255, - 0, - 0, - 115, - 157, - 240, - 240, - 255, - 255, - 0, - 0, - 115, - 157, - 225, - 225, - 255, - 255, - 0, - 0, - 115, - 157, - 210, - 210, - 255, - 255, - 0, - 0, - 115, - 157, - 195, - 195, - 255, - 255, - 0, - 0, - 115, - 157, - 180, - 179, - 255, - 255, - 0, - 0, - 115, - 157, - 165, - 164, - 255, - 255, - 0, - 0, - 115, - 157, - 150, - 149, - 255, - 255, - 0, - 0, - 115, - 157, - 135, - 134, - 255, - 255, - 0, - 0, - 115, - 157, - 120, - 119, - 255, - 255, - 0, - 0, - 115, - 157, - 105, - 104, - 255, - 255, - 0, - 0, - 115, - 157, - 90, - 89, - 255, - 255, - 0, - 0, - 115, - 157, - 75, - 74, - 255, - 255, - 0, - 0, - 115, - 157, - 60, - 59, - 255, - 255, - 0, - 0, - 115, - 157, - 45, - 44, - 255, - 255, - 0, - 0, - 115, - 157, - 30, - 29, - 255, - 255, - 0, - 0, - 115, - 157, - 15, - 14, - 255, - 255, - 0, - 0, - 115, - 157, - 0, - 0, - 255, - 255, - 0, - 0, - 115, - 157, - 0, - 0, - 242, - 133, - 13, - 121, - 99, - 25, - 0, - 0, - 231, - 157, - 24, - 97, - 82, - 149, - 0, - 0, - 222, - 154, - 33, - 100, - 66, - 17, - 0, - 0, - 215, - 9, - 40, - 245, - 49, - 141, - 0, - 0, - 208, - 150, - 47, - 104, - 33, - 9, - 0, - 0, - 203, - 8, - 52, - 246, - 16, - 133, - 0, - 0, - 198, - 48, - 57, - 206, - 0, - 0, - 255, - 255, - 189, - 238, - 0, - 0, - 0, - 0, - 255, - 255, - 194, - 52, - 0, - 0, - 16, - 133, - 255, - 255, - 199, - 27, - 0, - 0, - 33, - 9, - 255, - 255, - 204, - 204, - 0, - 0, - 49, - 141, - 255, - 255, - 211, - 121, - 0, - 0, - 66, - 17, - 255, - 255, - 219, - 108, - 0, - 0, - 82, - 149, - 255, - 255, - 229, - 12, - 0, - 0, - 99, - 25, - 255, - 255, - 240, - 240, - 0, - 0, - 115, - 157, - 255, - 255, - 255, - 255, - 0, - 0, - 132, - 33, - 238, - 238, - 255, - 255, - 0, - 0, - 132, - 33, - 221, - 221, - 255, - 255, - 0, - 0, - 132, - 33, - 204, - 204, - 255, - 255, - 0, - 0, - 132, - 33, - 187, - 186, - 255, - 255, - 0, - 0, - 132, - 33, - 170, - 169, - 255, - 255, - 0, - 0, - 132, - 33, - 153, - 152, - 255, - 255, - 0, - 0, - 132, - 33, - 136, - 135, - 255, - 255, - 0, - 0, - 132, - 33, - 119, - 118, - 255, - 255, - 0, - 0, - 132, - 33, - 102, - 101, - 255, - 255, - 0, - 0, - 132, - 33, - 85, - 84, - 255, - 255, - 0, - 0, - 132, - 33, - 68, - 67, - 255, - 255, - 0, - 0, - 132, - 33, - 51, - 50, - 255, - 255, - 0, - 0, - 132, - 33, - 34, - 33, - 255, - 255, - 0, - 0, - 132, - 33, - 17, - 16, - 255, - 255, - 0, - 0, - 132, - 33, - 0, - 0, - 255, - 255, - 0, - 0, - 132, - 33, - 0, - 0, - 240, - 240, - 15, - 14, - 115, - 157, - 0, - 0, - 229, - 12, - 26, - 242, - 99, - 25, - 0, - 0, - 219, - 108, - 36, - 146, - 82, - 149, - 0, - 0, - 211, - 121, - 44, - 133, - 66, - 17, - 0, - 0, - 204, - 204, - 51, - 50, - 49, - 141, - 0, - 0, - 199, - 27, - 56, - 227, - 33, - 9, - 0, - 0, - 194, - 52, - 61, - 202, - 16, - 133, - 0, - 0, - 189, - 238, - 66, - 16, - 0, - 0, - 255, - 255, - 181, - 172, - 0, - 0, - 0, - 0, - 255, - 255, - 185, - 96, - 0, - 0, - 16, - 133, - 255, - 255, - 189, - 160, - 0, - 0, - 33, - 9, - 255, - 255, - 194, - 142, - 0, - 0, - 49, - 141, - 255, - 255, - 200, - 88, - 0, - 0, - 66, - 17, - 255, - 255, - 207, - 60, - 0, - 0, - 82, - 149, - 255, - 255, - 215, - 147, - 0, - 0, - 99, - 25, - 255, - 255, - 225, - 225, - 0, - 0, - 115, - 157, - 255, - 255, - 238, - 238, - 0, - 0, - 132, - 33, - 255, - 255, - 255, - 255, - 0, - 0, - 148, - 165, - 236, - 77, - 255, - 255, - 0, - 0, - 148, - 165, - 216, - 156, - 255, - 255, - 0, - 0, - 148, - 165, - 196, - 235, - 255, - 255, - 0, - 0, - 148, - 165, - 177, - 58, - 255, - 255, - 0, - 0, - 148, - 165, - 157, - 137, - 255, - 255, - 0, - 0, - 148, - 165, - 137, - 216, - 255, - 255, - 0, - 0, - 148, - 165, - 118, - 38, - 255, - 255, - 0, - 0, - 148, - 165, - 98, - 117, - 255, - 255, - 0, - 0, - 148, - 165, - 78, - 196, - 255, - 255, - 0, - 0, - 148, - 165, - 59, - 19, - 255, - 255, - 0, - 0, - 148, - 165, - 39, - 98, - 255, - 255, - 0, - 0, - 148, - 165, - 19, - 177, - 255, - 255, - 0, - 0, - 148, - 165, - 0, - 0, - 255, - 255, - 0, - 0, - 148, - 165, - 0, - 0, - 238, - 238, - 17, - 16, - 132, - 33, - 0, - 0, - 225, - 225, - 30, - 29, - 115, - 157, - 0, - 0, - 215, - 147, - 40, - 107, - 99, - 25, - 0, - 0, - 207, - 60, - 48, - 194, - 82, - 149, - 0, - 0, - 200, - 88, - 55, - 166, - 66, - 17, - 0, - 0, - 194, - 142, - 61, - 112, - 49, - 141, - 0, - 0, - 189, - 160, - 66, - 94, - 33, - 9, - 0, - 0, - 185, - 96, - 70, - 158, - 16, - 133, - 0, - 0, - 181, - 172, - 74, - 82, - 0, - 0, - 255, - 255, - 173, - 106, - 0, - 0, - 0, - 0, - 255, - 255, - 176, - 140, - 0, - 0, - 16, - 133, - 255, - 255, - 180, - 37, - 0, - 0, - 33, - 9, - 255, - 255, - 184, - 81, - 0, - 0, - 49, - 141, - 255, - 255, - 189, - 54, - 0, - 0, - 66, - 17, - 255, - 255, - 195, - 11, - 0, - 0, - 82, - 149, - 255, - 255, - 202, - 26, - 0, - 0, - 99, - 25, - 255, - 255, - 210, - 210, - 0, - 0, - 115, - 157, - 255, - 255, - 221, - 221, - 0, - 0, - 132, - 33, - 255, - 255, - 236, - 77, - 0, - 0, - 148, - 165, - 255, - 255, - 255, - 255, - 0, - 0, - 165, - 41, - 232, - 185, - 255, - 255, - 0, - 0, - 165, - 41, - 209, - 115, - 255, - 255, - 0, - 0, - 165, - 41, - 186, - 45, - 255, - 255, - 0, - 0, - 165, - 41, - 162, - 232, - 255, - 255, - 0, - 0, - 165, - 41, - 139, - 162, - 255, - 255, - 0, - 0, - 165, - 41, - 116, - 92, - 255, - 255, - 0, - 0, - 165, - 41, - 93, - 22, - 255, - 255, - 0, - 0, - 165, - 41, - 69, - 209, - 255, - 255, - 0, - 0, - 165, - 41, - 46, - 139, - 255, - 255, - 0, - 0, - 165, - 41, - 23, - 69, - 255, - 255, - 0, - 0, - 165, - 41, - 0, - 0, - 255, - 255, - 0, - 0, - 165, - 41, - 0, - 0, - 236, - 77, - 19, - 177, - 148, - 165, - 0, - 0, - 221, - 221, - 34, - 33, - 132, - 33, - 0, - 0, - 210, - 210, - 45, - 44, - 115, - 157, - 0, - 0, - 202, - 26, - 53, - 228, - 99, - 25, - 0, - 0, - 195, - 11, - 60, - 243, - 82, - 149, - 0, - 0, - 189, - 54, - 66, - 200, - 66, - 17, - 0, - 0, - 184, - 81, - 71, - 173, - 49, - 141, - 0, - 0, - 180, - 37, - 75, - 217, - 33, - 9, - 0, - 0, - 176, - 140, - 79, - 114, - 16, - 133, - 0, - 0, - 173, - 106, - 82, - 148, - 0, - 0, - 255, - 255, - 165, - 40, - 0, - 0, - 0, - 0, - 255, - 255, - 167, - 184, - 0, - 0, - 16, - 133, - 255, - 255, - 170, - 169, - 0, - 0, - 33, - 9, - 255, - 255, - 174, - 19, - 0, - 0, - 49, - 141, - 255, - 255, - 178, - 21, - 0, - 0, - 66, - 17, - 255, - 255, - 182, - 218, - 0, - 0, - 82, - 149, - 255, - 255, - 188, - 160, - 0, - 0, - 99, - 25, - 255, - 255, - 195, - 195, - 0, - 0, - 115, - 157, - 255, - 255, - 204, - 204, - 0, - 0, - 132, - 33, - 255, - 255, - 216, - 156, - 0, - 0, - 148, - 165, - 255, - 255, - 232, - 185, - 0, - 0, - 165, - 41, - 255, - 255, - 255, - 255, - 0, - 0, - 181, - 173, - 227, - 141, - 255, - 255, - 0, - 0, - 181, - 173, - 199, - 27, - 255, - 255, - 0, - 0, - 181, - 173, - 170, - 169, - 255, - 255, - 0, - 0, - 181, - 173, - 142, - 56, - 255, - 255, - 0, - 0, - 181, - 173, - 113, - 198, - 255, - 255, - 0, - 0, - 181, - 173, - 85, - 84, - 255, - 255, - 0, - 0, - 181, - 173, - 56, - 227, - 255, - 255, - 0, - 0, - 181, - 173, - 28, - 113, - 255, - 255, - 0, - 0, - 181, - 173, - 0, - 0, - 255, - 255, - 0, - 0, - 181, - 173, - 0, - 0, - 232, - 185, - 23, - 69, - 165, - 41, - 0, - 0, - 216, - 156, - 39, - 98, - 148, - 165, - 0, - 0, - 204, - 204, - 51, - 50, - 132, - 33, - 0, - 0, - 195, - 195, - 60, - 59, - 115, - 157, - 0, - 0, - 188, - 160, - 67, - 94, - 99, - 25, - 0, - 0, - 182, - 218, - 73, - 36, - 82, - 149, - 0, - 0, - 178, - 21, - 77, - 233, - 66, - 17, - 0, - 0, - 174, - 19, - 81, - 235, - 49, - 141, - 0, - 0, - 170, - 169, - 85, - 84, - 33, - 9, - 0, - 0, - 167, - 184, - 88, - 70, - 16, - 133, - 0, - 0, - 165, - 40, - 90, - 214, - 0, - 0, - 255, - 255, - 156, - 230, - 0, - 0, - 0, - 0, - 255, - 255, - 158, - 228, - 0, - 0, - 16, - 133, - 255, - 255, - 161, - 46, - 0, - 0, - 33, - 9, - 255, - 255, - 163, - 214, - 0, - 0, - 49, - 141, - 255, - 255, - 166, - 244, - 0, - 0, - 66, - 17, - 255, - 255, - 170, - 169, - 0, - 0, - 82, - 149, - 255, - 255, - 175, - 39, - 0, - 0, - 99, - 25, - 255, - 255, - 180, - 179, - 0, - 0, - 115, - 157, - 255, - 255, - 187, - 186, - 0, - 0, - 132, - 33, - 255, - 255, - 196, - 235, - 0, - 0, - 148, - 165, - 255, - 255, - 209, - 115, - 0, - 0, - 165, - 41, - 255, - 255, - 227, - 141, - 0, - 0, - 181, - 173, - 255, - 255, - 255, - 255, - 0, - 0, - 198, - 49, - 219, - 108, - 255, - 255, - 0, - 0, - 198, - 49, - 182, - 218, - 255, - 255, - 0, - 0, - 198, - 49, - 146, - 72, - 255, - 255, - 0, - 0, - 198, - 49, - 109, - 182, - 255, - 255, - 0, - 0, - 198, - 49, - 73, - 36, - 255, - 255, - 0, - 0, - 198, - 49, - 36, - 146, - 255, - 255, - 0, - 0, - 198, - 49, - 0, - 0, - 255, - 255, - 0, - 0, - 198, - 49, - 0, - 0, - 227, - 141, - 28, - 113, - 181, - 173, - 0, - 0, - 209, - 115, - 46, - 139, - 165, - 41, - 0, - 0, - 196, - 235, - 59, - 19, - 148, - 165, - 0, - 0, - 187, - 186, - 68, - 67, - 132, - 33, - 0, - 0, - 180, - 179, - 75, - 74, - 115, - 157, - 0, - 0, - 175, - 39, - 80, - 215, - 99, - 25, - 0, - 0, - 170, - 169, - 85, - 84, - 82, - 149, - 0, - 0, - 166, - 244, - 89, - 10, - 66, - 17, - 0, - 0, - 163, - 214, - 92, - 40, - 49, - 141, - 0, - 0, - 161, - 46, - 94, - 208, - 33, - 9, - 0, - 0, - 158, - 228, - 97, - 26, - 16, - 133, - 0, - 0, - 156, - 230, - 99, - 24, - 0, - 0, - 255, - 255, - 148, - 164, - 0, - 0, - 0, - 0, - 255, - 255, - 150, - 17, - 0, - 0, - 16, - 133, - 255, - 255, - 151, - 179, - 0, - 0, - 33, - 9, - 255, - 255, - 153, - 152, - 0, - 0, - 49, - 141, - 255, - 255, - 155, - 210, - 0, - 0, - 66, - 17, - 255, - 255, - 158, - 121, - 0, - 0, - 82, - 149, - 255, - 255, - 161, - 174, - 0, - 0, - 99, - 25, - 255, - 255, - 165, - 164, - 0, - 0, - 115, - 157, - 255, - 255, - 170, - 169, - 0, - 0, - 132, - 33, - 255, - 255, - 177, - 58, - 0, - 0, - 148, - 165, - 255, - 255, - 186, - 45, - 0, - 0, - 165, - 41, - 255, - 255, - 199, - 27, - 0, - 0, - 181, - 173, - 255, - 255, - 219, - 108, - 0, - 0, - 198, - 49, - 255, - 255, - 255, - 255, - 0, - 0, - 214, - 181, - 204, - 204, - 255, - 255, - 0, - 0, - 214, - 181, - 153, - 152, - 255, - 255, - 0, - 0, - 214, - 181, - 102, - 101, - 255, - 255, - 0, - 0, - 214, - 181, - 51, - 50, - 255, - 255, - 0, - 0, - 214, - 181, - 0, - 0, - 255, - 255, - 0, - 0, - 214, - 181, - 0, - 0, - 219, - 108, - 36, - 146, - 198, - 49, - 0, - 0, - 199, - 27, - 56, - 227, - 181, - 173, - 0, - 0, - 186, - 45, - 69, - 209, - 165, - 41, - 0, - 0, - 177, - 58, - 78, - 196, - 148, - 165, - 0, - 0, - 170, - 169, - 85, - 84, - 132, - 33, - 0, - 0, - 165, - 164, - 90, - 89, - 115, - 157, - 0, - 0, - 161, - 174, - 94, - 80, - 99, - 25, - 0, - 0, - 158, - 121, - 97, - 133, - 82, - 149, - 0, - 0, - 155, - 210, - 100, - 44, - 66, - 17, - 0, - 0, - 153, - 152, - 102, - 101, - 49, - 141, - 0, - 0, - 151, - 179, - 104, - 75, - 33, - 9, - 0, - 0, - 150, - 17, - 105, - 237, - 16, - 133, - 0, - 0, - 148, - 164, - 107, - 90, - 0, - 0, - 255, - 255, - 140, - 98, - 0, - 0, - 0, - 0, - 255, - 255, - 141, - 61, - 0, - 0, - 16, - 133, - 255, - 255, - 142, - 56, - 0, - 0, - 33, - 9, - 255, - 255, - 143, - 91, - 0, - 0, - 49, - 141, - 255, - 255, - 144, - 177, - 0, - 0, - 66, - 17, - 255, - 255, - 146, - 72, - 0, - 0, - 82, - 149, - 255, - 255, - 148, - 53, - 0, - 0, - 99, - 25, - 255, - 255, - 150, - 149, - 0, - 0, - 115, - 157, - 255, - 255, - 153, - 152, - 0, - 0, - 132, - 33, - 255, - 255, - 157, - 137, - 0, - 0, - 148, - 165, - 255, - 255, - 162, - 232, - 0, - 0, - 165, - 41, - 255, - 255, - 170, - 169, - 0, - 0, - 181, - 173, - 255, - 255, - 182, - 218, - 0, - 0, - 198, - 49, - 255, - 255, - 204, - 204, - 0, - 0, - 214, - 181, - 255, - 255, - 255, - 255, - 0, - 0, - 231, - 57, - 170, - 169, - 255, - 255, - 0, - 0, - 231, - 57, - 85, - 84, - 255, - 255, - 0, - 0, - 231, - 57, - 0, - 0, - 255, - 255, - 0, - 0, - 231, - 57, - 0, - 0, - 204, - 204, - 51, - 50, - 214, - 181, - 0, - 0, - 182, - 218, - 73, - 36, - 198, - 49, - 0, - 0, - 170, - 169, - 85, - 84, - 181, - 173, - 0, - 0, - 162, - 232, - 93, - 22, - 165, - 41, - 0, - 0, - 157, - 137, - 98, - 117, - 148, - 165, - 0, - 0, - 153, - 152, - 102, - 101, - 132, - 33, - 0, - 0, - 150, - 149, - 105, - 104, - 115, - 157, - 0, - 0, - 148, - 53, - 107, - 201, - 99, - 25, - 0, - 0, - 146, - 72, - 109, - 182, - 82, - 149, - 0, - 0, - 144, - 177, - 111, - 77, - 66, - 17, - 0, - 0, - 143, - 91, - 112, - 163, - 49, - 141, - 0, - 0, - 142, - 56, - 113, - 198, - 33, - 9, - 0, - 0, - 141, - 61, - 114, - 193, - 16, - 133, - 0, - 0, - 140, - 98, - 115, - 156, - 0, - 0, - 255, - 255, - 132, - 32, - 0, - 0, - 0, - 0, - 255, - 255, - 132, - 105, - 0, - 0, - 16, - 133, - 255, - 255, - 132, - 189, - 0, - 0, - 33, - 9, - 255, - 255, - 133, - 30, - 0, - 0, - 49, - 141, - 255, - 255, - 133, - 144, - 0, - 0, - 66, - 17, - 255, - 255, - 134, - 23, - 0, - 0, - 82, - 149, - 255, - 255, - 134, - 188, - 0, - 0, - 99, - 25, - 255, - 255, - 135, - 134, - 0, - 0, - 115, - 157, - 255, - 255, - 136, - 135, - 0, - 0, - 132, - 33, - 255, - 255, - 137, - 216, - 0, - 0, - 148, - 165, - 255, - 255, - 139, - 162, - 0, - 0, - 165, - 41, - 255, - 255, - 142, - 56, - 0, - 0, - 181, - 173, - 255, - 255, - 146, - 72, - 0, - 0, - 198, - 49, - 255, - 255, - 153, - 152, - 0, - 0, - 214, - 181, - 255, - 255, - 170, - 169, - 0, - 0, - 231, - 57, - 255, - 255, - 255, - 255, - 0, - 0, - 247, - 189, - 0, - 0, - 255, - 255, - 0, - 0, - 247, - 189, - 0, - 0, - 170, - 169, - 85, - 84, - 231, - 57, - 0, - 0, - 153, - 152, - 102, - 101, - 214, - 181, - 0, - 0, - 146, - 72, - 109, - 182, - 198, - 49, - 0, - 0, - 142, - 56, - 113, - 198, - 181, - 173, - 0, - 0, - 139, - 162, - 116, - 92, - 165, - 41, - 0, - 0, - 137, - 216, - 118, - 38, - 148, - 165, - 0, - 0, - 136, - 135, - 119, - 118, - 132, - 33, - 0, - 0, - 135, - 134, - 120, - 119, - 115, - 157, - 0, - 0, - 134, - 188, - 121, - 66, - 99, - 25, - 0, - 0, - 134, - 23, - 121, - 231, - 82, - 149, - 0, - 0, - 133, - 144, - 122, - 110, - 66, - 17, - 0, - 0, - 133, - 30, - 122, - 224, - 49, - 141, - 0, - 0, - 132, - 189, - 123, - 65, - 33, - 9, - 0, - 0, - 132, - 105, - 123, - 149, - 16, - 133, - 0, - 0, - 132, - 32, - 123, - 222, - 0, - 0, - 255, - 255, - 123, - 222, - 0, - 0, - 0, - 0, - 255, - 255, - 123, - 149, - 0, - 0, - 16, - 133, - 255, - 255, - 123, - 65, - 0, - 0, - 33, - 9, - 255, - 255, - 122, - 224, - 0, - 0, - 49, - 141, - 255, - 255, - 122, - 110, - 0, - 0, - 66, - 17, - 255, - 255, - 121, - 231, - 0, - 0, - 82, - 149, - 255, - 255, - 121, - 66, - 0, - 0, - 99, - 25, - 255, - 255, - 120, - 119, - 0, - 0, - 115, - 157, - 255, - 255, - 119, - 118, - 0, - 0, - 132, - 33, - 255, - 255, - 118, - 38, - 0, - 0, - 148, - 165, - 255, - 255, - 116, - 92, - 0, - 0, - 165, - 41, - 255, - 255, - 113, - 198, - 0, - 0, - 181, - 173, - 255, - 255, - 109, - 182, - 0, - 0, - 198, - 49, - 255, - 255, - 102, - 101, - 0, - 0, - 214, - 181, - 255, - 255, - 85, - 84, - 0, - 0, - 231, - 57, - 255, - 255, - 0, - 0, - 0, - 0, - 247, - 189, - 0, - 0, - 0, - 0, - 255, - 255, - 247, - 189, - 0, - 0, - 85, - 84, - 170, - 169, - 231, - 57, - 0, - 0, - 102, - 101, - 153, - 152, - 214, - 181, - 0, - 0, - 109, - 182, - 146, - 72, - 198, - 49, - 0, - 0, - 113, - 198, - 142, - 56, - 181, - 173, - 0, - 0, - 116, - 92, - 139, - 162, - 165, - 41, - 0, - 0, - 118, - 38, - 137, - 216, - 148, - 165, - 0, - 0, - 119, - 118, - 136, - 135, - 132, - 33, - 0, - 0, - 120, - 119, - 135, - 134, - 115, - 157, - 0, - 0, - 121, - 66, - 134, - 188, - 99, - 25, - 0, - 0, - 121, - 231, - 134, - 23, - 82, - 149, - 0, - 0, - 122, - 110, - 133, - 144, - 66, - 17, - 0, - 0, - 122, - 224, - 133, - 30, - 49, - 141, - 0, - 0, - 123, - 65, - 132, - 189, - 33, - 9, - 0, - 0, - 123, - 149, - 132, - 105, - 16, - 133, - 0, - 0, - 123, - 222, - 132, - 32, - 0, - 0, - 255, - 255, - 115, - 156, - 0, - 0, - 0, - 0, - 255, - 255, - 114, - 193, - 0, - 0, - 16, - 133, - 255, - 255, - 113, - 198, - 0, - 0, - 33, - 9, - 255, - 255, - 112, - 163, - 0, - 0, - 49, - 141, - 255, - 255, - 111, - 77, - 0, - 0, - 66, - 17, - 255, - 255, - 109, - 182, - 0, - 0, - 82, - 149, - 255, - 255, - 107, - 201, - 0, - 0, - 99, - 25, - 255, - 255, - 105, - 104, - 0, - 0, - 115, - 157, - 255, - 255, - 102, - 101, - 0, - 0, - 132, - 33, - 255, - 255, - 98, - 117, - 0, - 0, - 148, - 165, - 255, - 255, - 93, - 22, - 0, - 0, - 165, - 41, - 255, - 255, - 85, - 84, - 0, - 0, - 181, - 173, - 255, - 255, - 73, - 36, - 0, - 0, - 198, - 49, - 255, - 255, - 51, - 50, - 0, - 0, - 214, - 181, - 255, - 255, - 0, - 0, - 0, - 0, - 231, - 57, - 170, - 169, - 0, - 0, - 85, - 84, - 231, - 57, - 85, - 84, - 0, - 0, - 170, - 169, - 231, - 57, - 0, - 0, - 0, - 0, - 255, - 255, - 231, - 57, - 0, - 0, - 51, - 50, - 204, - 204, - 214, - 181, - 0, - 0, - 73, - 36, - 182, - 218, - 198, - 49, - 0, - 0, - 85, - 84, - 170, - 169, - 181, - 173, - 0, - 0, - 93, - 22, - 162, - 232, - 165, - 41, - 0, - 0, - 98, - 117, - 157, - 137, - 148, - 165, - 0, - 0, - 102, - 101, - 153, - 152, - 132, - 33, - 0, - 0, - 105, - 104, - 150, - 149, - 115, - 157, - 0, - 0, - 107, - 201, - 148, - 53, - 99, - 25, - 0, - 0, - 109, - 182, - 146, - 72, - 82, - 149, - 0, - 0, - 111, - 77, - 144, - 177, - 66, - 17, - 0, - 0, - 112, - 163, - 143, - 91, - 49, - 141, - 0, - 0, - 113, - 198, - 142, - 56, - 33, - 9, - 0, - 0, - 114, - 193, - 141, - 61, - 16, - 133, - 0, - 0, - 115, - 156, - 140, - 98, - 0, - 0, - 255, - 255, - 107, - 90, - 0, - 0, - 0, - 0, - 255, - 255, - 105, - 237, - 0, - 0, - 16, - 133, - 255, - 255, - 104, - 75, - 0, - 0, - 33, - 9, - 255, - 255, - 102, - 101, - 0, - 0, - 49, - 141, - 255, - 255, - 100, - 44, - 0, - 0, - 66, - 17, - 255, - 255, - 97, - 133, - 0, - 0, - 82, - 149, - 255, - 255, - 94, - 80, - 0, - 0, - 99, - 25, - 255, - 255, - 90, - 89, - 0, - 0, - 115, - 157, - 255, - 255, - 85, - 84, - 0, - 0, - 132, - 33, - 255, - 255, - 78, - 196, - 0, - 0, - 148, - 165, - 255, - 255, - 69, - 209, - 0, - 0, - 165, - 41, - 255, - 255, - 56, - 227, - 0, - 0, - 181, - 173, - 255, - 255, - 36, - 146, - 0, - 0, - 198, - 49, - 255, - 255, - 0, - 0, - 0, - 0, - 214, - 181, - 204, - 204, - 0, - 0, - 51, - 50, - 214, - 181, - 153, - 152, - 0, - 0, - 102, - 101, - 214, - 181, - 102, - 101, - 0, - 0, - 153, - 152, - 214, - 181, - 51, - 50, - 0, - 0, - 204, - 204, - 214, - 181, - 0, - 0, - 0, - 0, - 255, - 255, - 214, - 181, - 0, - 0, - 36, - 146, - 219, - 108, - 198, - 49, - 0, - 0, - 56, - 227, - 199, - 27, - 181, - 173, - 0, - 0, - 69, - 209, - 186, - 45, - 165, - 41, - 0, - 0, - 78, - 196, - 177, - 58, - 148, - 165, - 0, - 0, - 85, - 84, - 170, - 169, - 132, - 33, - 0, - 0, - 90, - 89, - 165, - 164, - 115, - 157, - 0, - 0, - 94, - 80, - 161, - 174, - 99, - 25, - 0, - 0, - 97, - 133, - 158, - 121, - 82, - 149, - 0, - 0, - 100, - 44, - 155, - 210, - 66, - 17, - 0, - 0, - 102, - 101, - 153, - 152, - 49, - 141, - 0, - 0, - 104, - 75, - 151, - 179, - 33, - 9, - 0, - 0, - 105, - 237, - 150, - 17, - 16, - 133, - 0, - 0, - 107, - 90, - 148, - 164, - 0, - 0, - 255, - 255, - 99, - 24, - 0, - 0, - 0, - 0, - 255, - 255, - 97, - 26, - 0, - 0, - 16, - 133, - 255, - 255, - 94, - 208, - 0, - 0, - 33, - 9, - 255, - 255, - 92, - 40, - 0, - 0, - 49, - 141, - 255, - 255, - 89, - 10, - 0, - 0, - 66, - 17, - 255, - 255, - 85, - 84, - 0, - 0, - 82, - 149, - 255, - 255, - 80, - 215, - 0, - 0, - 99, - 25, - 255, - 255, - 75, - 74, - 0, - 0, - 115, - 157, - 255, - 255, - 68, - 67, - 0, - 0, - 132, - 33, - 255, - 255, - 59, - 19, - 0, - 0, - 148, - 165, - 255, - 255, - 46, - 139, - 0, - 0, - 165, - 41, - 255, - 255, - 28, - 113, - 0, - 0, - 181, - 173, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 49, - 219, - 108, - 0, - 0, - 36, - 146, - 198, - 49, - 182, - 218, - 0, - 0, - 73, - 36, - 198, - 49, - 146, - 72, - 0, - 0, - 109, - 182, - 198, - 49, - 109, - 182, - 0, - 0, - 146, - 72, - 198, - 49, - 73, - 36, - 0, - 0, - 182, - 218, - 198, - 49, - 36, - 146, - 0, - 0, - 219, - 108, - 198, - 49, - 0, - 0, - 0, - 0, - 255, - 255, - 198, - 49, - 0, - 0, - 28, - 113, - 227, - 141, - 181, - 173, - 0, - 0, - 46, - 139, - 209, - 115, - 165, - 41, - 0, - 0, - 59, - 19, - 196, - 235, - 148, - 165, - 0, - 0, - 68, - 67, - 187, - 186, - 132, - 33, - 0, - 0, - 75, - 74, - 180, - 179, - 115, - 157, - 0, - 0, - 80, - 215, - 175, - 39, - 99, - 25, - 0, - 0, - 85, - 84, - 170, - 169, - 82, - 149, - 0, - 0, - 89, - 10, - 166, - 244, - 66, - 17, - 0, - 0, - 92, - 40, - 163, - 214, - 49, - 141, - 0, - 0, - 94, - 208, - 161, - 46, - 33, - 9, - 0, - 0, - 97, - 26, - 158, - 228, - 16, - 133, - 0, - 0, - 99, - 24, - 156, - 230, - 0, - 0, - 255, - 255, - 90, - 214, - 0, - 0, - 0, - 0, - 255, - 255, - 88, - 70, - 0, - 0, - 16, - 133, - 255, - 255, - 85, - 84, - 0, - 0, - 33, - 9, - 255, - 255, - 81, - 235, - 0, - 0, - 49, - 141, - 255, - 255, - 77, - 233, - 0, - 0, - 66, - 17, - 255, - 255, - 73, - 36, - 0, - 0, - 82, - 149, - 255, - 255, - 67, - 94, - 0, - 0, - 99, - 25, - 255, - 255, - 60, - 59, - 0, - 0, - 115, - 157, - 255, - 255, - 51, - 50, - 0, - 0, - 132, - 33, - 255, - 255, - 39, - 98, - 0, - 0, - 148, - 165, - 255, - 255, - 23, - 69, - 0, - 0, - 165, - 41, - 255, - 255, - 0, - 0, - 0, - 0, - 181, - 173, - 227, - 141, - 0, - 0, - 28, - 113, - 181, - 173, - 199, - 27, - 0, - 0, - 56, - 227, - 181, - 173, - 170, - 169, - 0, - 0, - 85, - 84, - 181, - 173, - 142, - 56, - 0, - 0, - 113, - 198, - 181, - 173, - 113, - 198, - 0, - 0, - 142, - 56, - 181, - 173, - 85, - 84, - 0, - 0, - 170, - 169, - 181, - 173, - 56, - 227, - 0, - 0, - 199, - 27, - 181, - 173, - 28, - 113, - 0, - 0, - 227, - 141, - 181, - 173, - 0, - 0, - 0, - 0, - 255, - 255, - 181, - 173, - 0, - 0, - 23, - 69, - 232, - 185, - 165, - 41, - 0, - 0, - 39, - 98, - 216, - 156, - 148, - 165, - 0, - 0, - 51, - 50, - 204, - 204, - 132, - 33, - 0, - 0, - 60, - 59, - 195, - 195, - 115, - 157, - 0, - 0, - 67, - 94, - 188, - 160, - 99, - 25, - 0, - 0, - 73, - 36, - 182, - 218, - 82, - 149, - 0, - 0, - 77, - 233, - 178, - 21, - 66, - 17, - 0, - 0, - 81, - 235, - 174, - 19, - 49, - 141, - 0, - 0, - 85, - 84, - 170, - 169, - 33, - 9, - 0, - 0, - 88, - 70, - 167, - 184, - 16, - 133, - 0, - 0, - 90, - 214, - 165, - 40, - 0, - 0, - 255, - 255, - 82, - 148, - 0, - 0, - 0, - 0, - 255, - 255, - 79, - 114, - 0, - 0, - 16, - 133, - 255, - 255, - 75, - 217, - 0, - 0, - 33, - 9, - 255, - 255, - 71, - 173, - 0, - 0, - 49, - 141, - 255, - 255, - 66, - 200, - 0, - 0, - 66, - 17, - 255, - 255, - 60, - 243, - 0, - 0, - 82, - 149, - 255, - 255, - 53, - 228, - 0, - 0, - 99, - 25, - 255, - 255, - 45, - 44, - 0, - 0, - 115, - 157, - 255, - 255, - 34, - 33, - 0, - 0, - 132, - 33, - 255, - 255, - 19, - 177, - 0, - 0, - 148, - 165, - 255, - 255, - 0, - 0, - 0, - 0, - 165, - 41, - 232, - 185, - 0, - 0, - 23, - 69, - 165, - 41, - 209, - 115, - 0, - 0, - 46, - 139, - 165, - 41, - 186, - 45, - 0, - 0, - 69, - 209, - 165, - 41, - 162, - 232, - 0, - 0, - 93, - 22, - 165, - 41, - 139, - 162, - 0, - 0, - 116, - 92, - 165, - 41, - 116, - 92, - 0, - 0, - 139, - 162, - 165, - 41, - 93, - 22, - 0, - 0, - 162, - 232, - 165, - 41, - 69, - 209, - 0, - 0, - 186, - 45, - 165, - 41, - 46, - 139, - 0, - 0, - 209, - 115, - 165, - 41, - 23, - 69, - 0, - 0, - 232, - 185, - 165, - 41, - 0, - 0, - 0, - 0, - 255, - 255, - 165, - 41, - 0, - 0, - 19, - 177, - 236, - 77, - 148, - 165, - 0, - 0, - 34, - 33, - 221, - 221, - 132, - 33, - 0, - 0, - 45, - 44, - 210, - 210, - 115, - 157, - 0, - 0, - 53, - 228, - 202, - 26, - 99, - 25, - 0, - 0, - 60, - 243, - 195, - 11, - 82, - 149, - 0, - 0, - 66, - 200, - 189, - 54, - 66, - 17, - 0, - 0, - 71, - 173, - 184, - 81, - 49, - 141, - 0, - 0, - 75, - 217, - 180, - 37, - 33, - 9, - 0, - 0, - 79, - 114, - 176, - 140, - 16, - 133, - 0, - 0, - 82, - 148, - 173, - 106, - 0, - 0, - 255, - 255, - 74, - 82, - 0, - 0, - 0, - 0, - 255, - 255, - 70, - 158, - 0, - 0, - 16, - 133, - 255, - 255, - 66, - 94, - 0, - 0, - 33, - 9, - 255, - 255, - 61, - 112, - 0, - 0, - 49, - 141, - 255, - 255, - 55, - 166, - 0, - 0, - 66, - 17, - 255, - 255, - 48, - 194, - 0, - 0, - 82, - 149, - 255, - 255, - 40, - 107, - 0, - 0, - 99, - 25, - 255, - 255, - 30, - 29, - 0, - 0, - 115, - 157, - 255, - 255, - 17, - 16, - 0, - 0, - 132, - 33, - 255, - 255, - 0, - 0, - 0, - 0, - 148, - 165, - 236, - 77, - 0, - 0, - 19, - 177, - 148, - 165, - 216, - 156, - 0, - 0, - 39, - 98, - 148, - 165, - 196, - 235, - 0, - 0, - 59, - 19, - 148, - 165, - 177, - 58, - 0, - 0, - 78, - 196, - 148, - 165, - 157, - 137, - 0, - 0, - 98, - 117, - 148, - 165, - 137, - 216, - 0, - 0, - 118, - 38, - 148, - 165, - 118, - 38, - 0, - 0, - 137, - 216, - 148, - 165, - 98, - 117, - 0, - 0, - 157, - 137, - 148, - 165, - 78, - 196, - 0, - 0, - 177, - 58, - 148, - 165, - 59, - 19, - 0, - 0, - 196, - 235, - 148, - 165, - 39, - 98, - 0, - 0, - 216, - 156, - 148, - 165, - 19, - 177, - 0, - 0, - 236, - 77, - 148, - 165, - 0, - 0, - 0, - 0, - 255, - 255, - 148, - 165, - 0, - 0, - 17, - 16, - 238, - 238, - 132, - 33, - 0, - 0, - 30, - 29, - 225, - 225, - 115, - 157, - 0, - 0, - 40, - 107, - 215, - 147, - 99, - 25, - 0, - 0, - 48, - 194, - 207, - 60, - 82, - 149, - 0, - 0, - 55, - 166, - 200, - 88, - 66, - 17, - 0, - 0, - 61, - 112, - 194, - 142, - 49, - 141, - 0, - 0, - 66, - 94, - 189, - 160, - 33, - 9, - 0, - 0, - 70, - 158, - 185, - 96, - 16, - 133, - 0, - 0, - 74, - 82, - 181, - 172, - 0, - 0, - 255, - 255, - 66, - 16, - 0, - 0, - 0, - 0, - 255, - 255, - 61, - 202, - 0, - 0, - 16, - 133, - 255, - 255, - 56, - 227, - 0, - 0, - 33, - 9, - 255, - 255, - 51, - 50, - 0, - 0, - 49, - 141, - 255, - 255, - 44, - 133, - 0, - 0, - 66, - 17, - 255, - 255, - 36, - 146, - 0, - 0, - 82, - 149, - 255, - 255, - 26, - 242, - 0, - 0, - 99, - 25, - 255, - 255, - 15, - 14, - 0, - 0, - 115, - 157, - 255, - 255, - 0, - 0, - 0, - 0, - 132, - 33, - 238, - 238, - 0, - 0, - 17, - 16, - 132, - 33, - 221, - 221, - 0, - 0, - 34, - 33, - 132, - 33, - 204, - 204, - 0, - 0, - 51, - 50, - 132, - 33, - 187, - 186, - 0, - 0, - 68, - 67, - 132, - 33, - 170, - 169, - 0, - 0, - 85, - 84, - 132, - 33, - 153, - 152, - 0, - 0, - 102, - 101, - 132, - 33, - 136, - 135, - 0, - 0, - 119, - 118, - 132, - 33, - 119, - 118, - 0, - 0, - 136, - 135, - 132, - 33, - 102, - 101, - 0, - 0, - 153, - 152, - 132, - 33, - 85, - 84, - 0, - 0, - 170, - 169, - 132, - 33, - 68, - 67, - 0, - 0, - 187, - 186, - 132, - 33, - 51, - 50, - 0, - 0, - 204, - 204, - 132, - 33, - 34, - 33, - 0, - 0, - 221, - 221, - 132, - 33, - 17, - 16, - 0, - 0, - 238, - 238, - 132, - 33, - 0, - 0, - 0, - 0, - 255, - 255, - 132, - 33, - 0, - 0, - 15, - 14, - 240, - 240, - 115, - 157, - 0, - 0, - 26, - 242, - 229, - 12, - 99, - 25, - 0, - 0, - 36, - 146, - 219, - 108, - 82, - 149, - 0, - 0, - 44, - 133, - 211, - 121, - 66, - 17, - 0, - 0, - 51, - 50, - 204, - 204, - 49, - 141, - 0, - 0, - 56, - 227, - 199, - 27, - 33, - 9, - 0, - 0, - 61, - 202, - 194, - 52, - 16, - 133, - 0, - 0, - 66, - 16, - 189, - 238, - 0, - 0, - 255, - 255, - 57, - 206, - 0, - 0, - 0, - 0, - 255, - 255, - 52, - 246, - 0, - 0, - 16, - 133, - 255, - 255, - 47, - 104, - 0, - 0, - 33, - 9, - 255, - 255, - 40, - 245, - 0, - 0, - 49, - 141, - 255, - 255, - 33, - 100, - 0, - 0, - 66, - 17, - 255, - 255, - 24, - 97, - 0, - 0, - 82, - 149, - 255, - 255, - 13, - 121, - 0, - 0, - 99, - 25, - 255, - 255, - 0, - 0, - 0, - 0, - 115, - 157, - 240, - 240, - 0, - 0, - 15, - 14, - 115, - 157, - 225, - 225, - 0, - 0, - 30, - 29, - 115, - 157, - 210, - 210, - 0, - 0, - 45, - 44, - 115, - 157, - 195, - 195, - 0, - 0, - 60, - 59, - 115, - 157, - 180, - 179, - 0, - 0, - 75, - 74, - 115, - 157, - 165, - 164, - 0, - 0, - 90, - 89, - 115, - 157, - 150, - 149, - 0, - 0, - 105, - 104, - 115, - 157, - 135, - 134, - 0, - 0, - 120, - 119, - 115, - 157, - 120, - 119, - 0, - 0, - 135, - 134, - 115, - 157, - 105, - 104, - 0, - 0, - 150, - 149, - 115, - 157, - 90, - 89, - 0, - 0, - 165, - 164, - 115, - 157, - 75, - 74, - 0, - 0, - 180, - 179, - 115, - 157, - 60, - 59, - 0, - 0, - 195, - 195, - 115, - 157, - 45, - 44, - 0, - 0, - 210, - 210, - 115, - 157, - 30, - 29, - 0, - 0, - 225, - 225, - 115, - 157, - 15, - 14, - 0, - 0, - 240, - 240, - 115, - 157, - 0, - 0, - 0, - 0, - 255, - 255, - 115, - 157, - 0, - 0, - 13, - 121, - 242, - 133, - 99, - 25, - 0, - 0, - 24, - 97, - 231, - 157, - 82, - 149, - 0, - 0, - 33, - 100, - 222, - 154, - 66, - 17, - 0, - 0, - 40, - 245, - 215, - 9, - 49, - 141, - 0, - 0, - 47, - 104, - 208, - 150, - 33, - 9, - 0, - 0, - 52, - 246, - 203, - 8, - 16, - 133, - 0, - 0, - 57, - 206, - 198, - 48, - 0, - 0, - 255, - 255, - 49, - 140, - 0, - 0, - 0, - 0, - 255, - 255, - 44, - 35, - 0, - 0, - 16, - 133, - 255, - 255, - 37, - 236, - 0, - 0, - 33, - 9, - 255, - 255, - 30, - 184, - 0, - 0, - 49, - 141, - 255, - 255, - 22, - 66, - 0, - 0, - 66, - 17, - 255, - 255, - 12, - 48, - 0, - 0, - 82, - 149, - 255, - 255, - 0, - 0, - 0, - 0, - 99, - 25, - 242, - 133, - 0, - 0, - 13, - 121, - 99, - 25, - 229, - 12, - 0, - 0, - 26, - 242, - 99, - 25, - 215, - 147, - 0, - 0, - 40, - 107, - 99, - 25, - 202, - 26, - 0, - 0, - 53, - 228, - 99, - 25, - 188, - 160, - 0, - 0, - 67, - 94, - 99, - 25, - 175, - 39, - 0, - 0, - 80, - 215, - 99, - 25, - 161, - 174, - 0, - 0, - 94, - 80, - 99, - 25, - 148, - 53, - 0, - 0, - 107, - 201, - 99, - 25, - 134, - 188, - 0, - 0, - 121, - 66, - 99, - 25, - 121, - 66, - 0, - 0, - 134, - 188, - 99, - 25, - 107, - 201, - 0, - 0, - 148, - 53, - 99, - 25, - 94, - 80, - 0, - 0, - 161, - 174, - 99, - 25, - 80, - 215, - 0, - 0, - 175, - 39, - 99, - 25, - 67, - 94, - 0, - 0, - 188, - 160, - 99, - 25, - 53, - 228, - 0, - 0, - 202, - 26, - 99, - 25, - 40, - 107, - 0, - 0, - 215, - 147, - 99, - 25, - 26, - 242, - 0, - 0, - 229, - 12, - 99, - 25, - 13, - 121, - 0, - 0, - 242, - 133, - 99, - 25, - 0, - 0, - 0, - 0, - 255, - 255, - 99, - 25, - 0, - 0, - 12, - 48, - 243, - 206, - 82, - 149, - 0, - 0, - 22, - 66, - 233, - 188, - 66, - 17, - 0, - 0, - 30, - 184, - 225, - 70, - 49, - 141, - 0, - 0, - 37, - 236, - 218, - 18, - 33, - 9, - 0, - 0, - 44, - 35, - 211, - 219, - 16, - 133, - 0, - 0, - 49, - 140, - 206, - 114, - 0, - 0, - 255, - 255, - 41, - 74, - 0, - 0, - 0, - 0, - 255, - 255, - 35, - 79, - 0, - 0, - 16, - 133, - 255, - 255, - 28, - 113, - 0, - 0, - 33, - 9, - 255, - 255, - 20, - 122, - 0, - 0, - 49, - 141, - 255, - 255, - 11, - 33, - 0, - 0, - 66, - 17, - 255, - 255, - 0, - 0, - 0, - 0, - 82, - 149, - 243, - 206, - 0, - 0, - 12, - 48, - 82, - 149, - 231, - 157, - 0, - 0, - 24, - 97, - 82, - 149, - 219, - 108, - 0, - 0, - 36, - 146, - 82, - 149, - 207, - 60, - 0, - 0, - 48, - 194, - 82, - 149, - 195, - 11, - 0, - 0, - 60, - 243, - 82, - 149, - 182, - 218, - 0, - 0, - 73, - 36, - 82, - 149, - 170, - 169, - 0, - 0, - 85, - 84, - 82, - 149, - 158, - 121, - 0, - 0, - 97, - 133, - 82, - 149, - 146, - 72, - 0, - 0, - 109, - 182, - 82, - 149, - 134, - 23, - 0, - 0, - 121, - 231, - 82, - 149, - 121, - 231, - 0, - 0, - 134, - 23, - 82, - 149, - 109, - 182, - 0, - 0, - 146, - 72, - 82, - 149, - 97, - 133, - 0, - 0, - 158, - 121, - 82, - 149, - 85, - 84, - 0, - 0, - 170, - 169, - 82, - 149, - 73, - 36, - 0, - 0, - 182, - 218, - 82, - 149, - 60, - 243, - 0, - 0, - 195, - 11, - 82, - 149, - 48, - 194, - 0, - 0, - 207, - 60, - 82, - 149, - 36, - 146, - 0, - 0, - 219, - 108, - 82, - 149, - 24, - 97, - 0, - 0, - 231, - 157, - 82, - 149, - 12, - 48, - 0, - 0, - 243, - 206, - 82, - 149, - 0, - 0, - 0, - 0, - 255, - 255, - 82, - 149, - 0, - 0, - 11, - 33, - 244, - 221, - 66, - 17, - 0, - 0, - 20, - 122, - 235, - 132, - 49, - 141, - 0, - 0, - 28, - 113, - 227, - 141, - 33, - 9, - 0, - 0, - 35, - 79, - 220, - 175, - 16, - 133, - 0, - 0, - 41, - 74, - 214, - 180, - 0, - 0, - 255, - 255, - 33, - 8, - 0, - 0, - 0, - 0, - 255, - 255, - 26, - 123, - 0, - 0, - 16, - 133, - 255, - 255, - 18, - 246, - 0, - 0, - 33, - 9, - 255, - 255, - 10, - 61, - 0, - 0, - 49, - 141, - 255, - 255, - 0, - 0, - 0, - 0, - 66, - 17, - 244, - 221, - 0, - 0, - 11, - 33, - 66, - 17, - 233, - 188, - 0, - 0, - 22, - 66, - 66, - 17, - 222, - 154, - 0, - 0, - 33, - 100, - 66, - 17, - 211, - 121, - 0, - 0, - 44, - 133, - 66, - 17, - 200, - 88, - 0, - 0, - 55, - 166, - 66, - 17, - 189, - 54, - 0, - 0, - 66, - 200, - 66, - 17, - 178, - 21, - 0, - 0, - 77, - 233, - 66, - 17, - 166, - 244, - 0, - 0, - 89, - 10, - 66, - 17, - 155, - 210, - 0, - 0, - 100, - 44, - 66, - 17, - 144, - 177, - 0, - 0, - 111, - 77, - 66, - 17, - 133, - 144, - 0, - 0, - 122, - 110, - 66, - 17, - 122, - 110, - 0, - 0, - 133, - 144, - 66, - 17, - 111, - 77, - 0, - 0, - 144, - 177, - 66, - 17, - 100, - 44, - 0, - 0, - 155, - 210, - 66, - 17, - 89, - 10, - 0, - 0, - 166, - 244, - 66, - 17, - 77, - 233, - 0, - 0, - 178, - 21, - 66, - 17, - 66, - 200, - 0, - 0, - 189, - 54, - 66, - 17, - 55, - 166, - 0, - 0, - 200, - 88, - 66, - 17, - 44, - 133, - 0, - 0, - 211, - 121, - 66, - 17, - 33, - 100, - 0, - 0, - 222, - 154, - 66, - 17, - 22, - 66, - 0, - 0, - 233, - 188, - 66, - 17, - 11, - 33, - 0, - 0, - 244, - 221, - 66, - 17, - 0, - 0, - 0, - 0, - 255, - 255, - 66, - 17, - 0, - 0, - 10, - 61, - 245, - 193, - 49, - 141, - 0, - 0, - 18, - 246, - 237, - 8, - 33, - 9, - 0, - 0, - 26, - 123, - 229, - 131, - 16, - 133, - 0, - 0, - 33, - 8, - 222, - 246, - 0, - 0, - 255, - 255, - 24, - 198, - 0, - 0, - 0, - 0, - 255, - 255, - 17, - 167, - 0, - 0, - 16, - 133, - 255, - 255, - 9, - 123, - 0, - 0, - 33, - 9, - 255, - 255, - 0, - 0, - 0, - 0, - 49, - 141, - 245, - 193, - 0, - 0, - 10, - 61, - 49, - 141, - 235, - 132, - 0, - 0, - 20, - 122, - 49, - 141, - 225, - 70, - 0, - 0, - 30, - 184, - 49, - 141, - 215, - 9, - 0, - 0, - 40, - 245, - 49, - 141, - 204, - 204, - 0, - 0, - 51, - 50, - 49, - 141, - 194, - 142, - 0, - 0, - 61, - 112, - 49, - 141, - 184, - 81, - 0, - 0, - 71, - 173, - 49, - 141, - 174, - 19, - 0, - 0, - 81, - 235, - 49, - 141, - 163, - 214, - 0, - 0, - 92, - 40, - 49, - 141, - 153, - 152, - 0, - 0, - 102, - 101, - 49, - 141, - 143, - 91, - 0, - 0, - 112, - 163, - 49, - 141, - 133, - 30, - 0, - 0, - 122, - 224, - 49, - 141, - 122, - 224, - 0, - 0, - 133, - 30, - 49, - 141, - 112, - 163, - 0, - 0, - 143, - 91, - 49, - 141, - 102, - 101, - 0, - 0, - 153, - 152, - 49, - 141, - 92, - 40, - 0, - 0, - 163, - 214, - 49, - 141, - 81, - 235, - 0, - 0, - 174, - 19, - 49, - 141, - 71, - 173, - 0, - 0, - 184, - 81, - 49, - 141, - 61, - 112, - 0, - 0, - 194, - 142, - 49, - 141, - 51, - 50, - 0, - 0, - 204, - 204, - 49, - 141, - 40, - 245, - 0, - 0, - 215, - 9, - 49, - 141, - 30, - 184, - 0, - 0, - 225, - 70, - 49, - 141, - 20, - 122, - 0, - 0, - 235, - 132, - 49, - 141, - 10, - 61, - 0, - 0, - 245, - 193, - 49, - 141, - 0, - 0, - 0, - 0, - 255, - 255, - 49, - 141, - 0, - 0, - 9, - 123, - 246, - 131, - 33, - 9, - 0, - 0, - 17, - 167, - 238, - 87, - 16, - 133, - 0, - 0, - 24, - 198, - 231, - 56, - 0, - 0, - 255, - 255, - 16, - 132, - 0, - 0, - 0, - 0, - 255, - 255, - 8, - 211, - 0, - 0, - 16, - 133, - 255, - 255, - 0, - 0, - 0, - 0, - 33, - 9, - 246, - 131, - 0, - 0, - 9, - 123, - 33, - 9, - 237, - 8, - 0, - 0, - 18, - 246, - 33, - 9, - 227, - 141, - 0, - 0, - 28, - 113, - 33, - 9, - 218, - 18, - 0, - 0, - 37, - 236, - 33, - 9, - 208, - 150, - 0, - 0, - 47, - 104, - 33, - 9, - 199, - 27, - 0, - 0, - 56, - 227, - 33, - 9, - 189, - 160, - 0, - 0, - 66, - 94, - 33, - 9, - 180, - 37, - 0, - 0, - 75, - 217, - 33, - 9, - 170, - 169, - 0, - 0, - 85, - 84, - 33, - 9, - 161, - 46, - 0, - 0, - 94, - 208, - 33, - 9, - 151, - 179, - 0, - 0, - 104, - 75, - 33, - 9, - 142, - 56, - 0, - 0, - 113, - 198, - 33, - 9, - 132, - 189, - 0, - 0, - 123, - 65, - 33, - 9, - 123, - 65, - 0, - 0, - 132, - 189, - 33, - 9, - 113, - 198, - 0, - 0, - 142, - 56, - 33, - 9, - 104, - 75, - 0, - 0, - 151, - 179, - 33, - 9, - 94, - 208, - 0, - 0, - 161, - 46, - 33, - 9, - 85, - 84, - 0, - 0, - 170, - 169, - 33, - 9, - 75, - 217, - 0, - 0, - 180, - 37, - 33, - 9, - 66, - 94, - 0, - 0, - 189, - 160, - 33, - 9, - 56, - 227, - 0, - 0, - 199, - 27, - 33, - 9, - 47, - 104, - 0, - 0, - 208, - 150, - 33, - 9, - 37, - 236, - 0, - 0, - 218, - 18, - 33, - 9, - 28, - 113, - 0, - 0, - 227, - 141, - 33, - 9, - 18, - 246, - 0, - 0, - 237, - 8, - 33, - 9, - 9, - 123, - 0, - 0, - 246, - 131, - 33, - 9, - 0, - 0, - 0, - 0, - 255, - 255, - 33, - 9, - 0, - 0, - 8, - 211, - 247, - 43, - 16, - 133, - 0, - 0, - 16, - 132, - 239, - 122, - 0, - 0, - 255, - 255, - 8, - 66, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 16, - 133, - 247, - 43, - 0, - 0, - 8, - 211, - 16, - 133, - 238, - 87, - 0, - 0, - 17, - 167, - 16, - 133, - 229, - 131, - 0, - 0, - 26, - 123, - 16, - 133, - 220, - 175, - 0, - 0, - 35, - 79, - 16, - 133, - 211, - 219, - 0, - 0, - 44, - 35, - 16, - 133, - 203, - 8, - 0, - 0, - 52, - 246, - 16, - 133, - 194, - 52, - 0, - 0, - 61, - 202, - 16, - 133, - 185, - 96, - 0, - 0, - 70, - 158, - 16, - 133, - 176, - 140, - 0, - 0, - 79, - 114, - 16, - 133, - 167, - 184, - 0, - 0, - 88, - 70, - 16, - 133, - 158, - 228, - 0, - 0, - 97, - 26, - 16, - 133, - 150, - 17, - 0, - 0, - 105, - 237, - 16, - 133, - 141, - 61, - 0, - 0, - 114, - 193, - 16, - 133, - 132, - 105, - 0, - 0, - 123, - 149, - 16, - 133, - 123, - 149, - 0, - 0, - 132, - 105, - 16, - 133, - 114, - 193, - 0, - 0, - 141, - 61, - 16, - 133, - 105, - 237, - 0, - 0, - 150, - 17, - 16, - 133, - 97, - 26, - 0, - 0, - 158, - 228, - 16, - 133, - 88, - 70, - 0, - 0, - 167, - 184, - 16, - 133, - 79, - 114, - 0, - 0, - 176, - 140, - 16, - 133, - 70, - 158, - 0, - 0, - 185, - 96, - 16, - 133, - 61, - 202, - 0, - 0, - 194, - 52, - 16, - 133, - 52, - 246, - 0, - 0, - 203, - 8, - 16, - 133, - 44, - 35, - 0, - 0, - 211, - 219, - 16, - 133, - 35, - 79, - 0, - 0, - 220, - 175, - 16, - 133, - 26, - 123, - 0, - 0, - 229, - 131, - 16, - 133, - 17, - 167, - 0, - 0, - 238, - 87, - 16, - 133, - 8, - 211, - 0, - 0, - 247, - 43, - 16, - 133, - 0, - 0, - 0, - 0, - 255, - 255, - 16, - 133, - 0, - 0, - 8, - 66, - 247, - 188, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 0, - 0, - 247, - 188, - 0, - 0, - 8, - 66, - 0, - 0, - 239, - 122, - 0, - 0, - 16, - 132, - 0, - 0, - 231, - 56, - 0, - 0, - 24, - 198, - 0, - 0, - 222, - 246, - 0, - 0, - 33, - 8, - 0, - 0, - 214, - 180, - 0, - 0, - 41, - 74, - 0, - 0, - 206, - 114, - 0, - 0, - 49, - 140, - 0, - 0, - 198, - 48, - 0, - 0, - 57, - 206, - 0, - 0, - 189, - 238, - 0, - 0, - 66, - 16, - 0, - 0, - 181, - 172, - 0, - 0, - 74, - 82, - 0, - 0, - 173, - 106, - 0, - 0, - 82, - 148, - 0, - 0, - 165, - 40, - 0, - 0, - 90, - 214, - 0, - 0, - 156, - 230, - 0, - 0, - 99, - 24, - 0, - 0, - 148, - 164, - 0, - 0, - 107, - 90, - 0, - 0, - 140, - 98, - 0, - 0, - 115, - 156, - 0, - 0, - 132, - 32, - 0, - 0, - 123, - 222, - 0, - 0, - 123, - 222, - 0, - 0, - 132, - 32, - 0, - 0, - 115, - 156, - 0, - 0, - 140, - 98, - 0, - 0, - 107, - 90, - 0, - 0, - 148, - 164, - 0, - 0, - 99, - 24, - 0, - 0, - 156, - 230, - 0, - 0, - 90, - 214, - 0, - 0, - 165, - 40, - 0, - 0, - 82, - 148, - 0, - 0, - 173, - 106, - 0, - 0, - 74, - 82, - 0, - 0, - 181, - 172, - 0, - 0, - 66, - 16, - 0, - 0, - 189, - 238, - 0, - 0, - 57, - 206, - 0, - 0, - 198, - 48, - 0, - 0, - 49, - 140, - 0, - 0, - 206, - 114, - 0, - 0, - 41, - 74, - 0, - 0, - 214, - 180, - 0, - 0, - 33, - 8, - 0, - 0, - 222, - 246, - 0, - 0, - 24, - 198, - 0, - 0, - 231, - 56, - 0, - 0, - 16, - 132, - 0, - 0, - 239, - 122, - 0, - 0, - 8, - 66, - 0, - 0, - 247, - 188, - 0, - 0, - 0, - 0, - 0, - 0, - 255, - 255, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node transparent-black-grayscale-4bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 183, - 101, - 70, - 157, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 235, - 134, - 101, - 50, - 34, - 35, - 89, - 207, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 201, - 118, - 84, - 51, - 50, - 52, - 33, - 34, - 54, - 156, - 255, - 255, - 255, - 255, - 252, - 151, - 118, - 67, - 51, - 52, - 67, - 52, - 67, - 35, - 53, - 103, - 121, - 206, - 255, - 255, - 199, - 119, - 117, - 51, - 52, - 86, - 84, - 68, - 68, - 67, - 38, - 119, - 119, - 105, - 255, - 255, - 216, - 136, - 118, - 68, - 103, - 119, - 119, - 101, - 85, - 69, - 103, - 119, - 117, - 91, - 255, - 255, - 232, - 136, - 136, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 118, - 85, - 78, - 255, - 255, - 248, - 102, - 120, - 152, - 135, - 119, - 119, - 119, - 119, - 119, - 118, - 85, - 68, - 95, - 255, - 255, - 248, - 103, - 136, - 153, - 153, - 135, - 119, - 119, - 119, - 119, - 83, - 17, - 52, - 143, - 255, - 255, - 249, - 103, - 136, - 153, - 153, - 153, - 135, - 119, - 119, - 101, - 33, - 17, - 19, - 175, - 255, - 255, - 249, - 102, - 136, - 137, - 151, - 121, - 153, - 135, - 101, - 83, - 33, - 16, - 18, - 223, - 255, - 255, - 250, - 102, - 120, - 137, - 134, - 102, - 153, - 151, - 85, - 66, - 17, - 33, - 20, - 255, - 255, - 255, - 251, - 102, - 104, - 136, - 119, - 86, - 153, - 151, - 85, - 34, - 19, - 66, - 55, - 255, - 255, - 255, - 252, - 102, - 87, - 135, - 119, - 87, - 153, - 150, - 83, - 33, - 52, - 33, - 25, - 255, - 255, - 255, - 253, - 102, - 70, - 133, - 119, - 87, - 153, - 150, - 82, - 33, - 49, - 17, - 28, - 255, - 255, - 255, - 254, - 102, - 85, - 134, - 103, - 87, - 153, - 150, - 66, - 18, - 33, - 17, - 46, - 255, - 255, - 255, - 255, - 102, - 85, - 119, - 87, - 87, - 153, - 149, - 50, - 19, - 33, - 17, - 95, - 255, - 255, - 255, - 255, - 102, - 101, - 103, - 87, - 87, - 153, - 149, - 49, - 20, - 49, - 17, - 143, - 255, - 255, - 255, - 255, - 134, - 101, - 103, - 86, - 87, - 153, - 133, - 33, - 20, - 49, - 17, - 207, - 255, - 255, - 255, - 255, - 250, - 102, - 102, - 102, - 87, - 153, - 133, - 33, - 19, - 17, - 43, - 255, - 255, - 255, - 255, - 255, - 255, - 198, - 102, - 102, - 87, - 137, - 133, - 33, - 17, - 18, - 207, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 134, - 102, - 87, - 136, - 117, - 49, - 17, - 61, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 102, - 87, - 136, - 117, - 66, - 20, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 87, - 136, - 101, - 83, - 127, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 152, - 136, - 101, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 251, - 136, - 101, - 191, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 108, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 223, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node transparent-white-grayscale-16bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 227, - 227, - 201, - 201, - 241, - 241, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 232, - 232, - 181, - 181, - 126, - 126, - 101, - 101, - 90, - 185, - 70, - 47, - 96, - 248, - 161, - 17, - 226, - 16, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 238, - 238, - 191, - 191, - 137, - 137, - 103, - 103, - 97, - 144, - 76, - 186, - 54, - 20, - 42, - 80, - 39, - 233, - 35, - 181, - 39, - 156, - 46, - 234, - 80, - 73, - 145, - 75, - 212, - 183, - 252, - 252, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 242, - 242, - 196, - 196, - 149, - 149, - 114, - 114, - 108, - 158, - 83, - 146, - 61, - 160, - 45, - 106, - 47, - 183, - 43, - 131, - 38, - 105, - 42, - 167, - 60, - 199, - 34, - 194, - 24, - 1, - 26, - 181, - 39, - 233, - 48, - 8, - 108, - 102, - 160, - 160, - 207, - 207, - 248, - 248, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 247, - 247, - 202, - 202, - 154, - 154, - 118, - 118, - 115, - 115, - 102, - 170, - 72, - 227, - 49, - 9, - 47, - 106, - 50, - 182, - 52, - 208, - 60, - 80, - 62, - 29, - 55, - 132, - 49, - 81, - 59, - 155, - 69, - 120, - 51, - 123, - 38, - 182, - 45, - 3, - 42, - 233, - 90, - 135, - 110, - 110, - 115, - 115, - 118, - 118, - 155, - 155, - 196, - 196, - 238, - 238, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 204, - 204, - 127, - 127, - 118, - 118, - 117, - 117, - 117, - 117, - 78, - 23, - 55, - 55, - 54, - 3, - 54, - 157, - 60, - 92, - 85, - 60, - 100, - 30, - 80, - 38, - 65, - 159, - 67, - 209, - 71, - 183, - 69, - 81, - 65, - 106, - 62, - 30, - 55, - 208, - 38, - 54, - 108, - 158, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 106, - 106, - 154, - 154, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 220, - 133, - 133, - 136, - 136, - 132, - 132, - 123, - 123, - 99, - 8, - 68, - 73, - 71, - 31, - 97, - 234, - 118, - 91, - 119, - 119, - 119, - 119, - 119, - 119, - 114, - 5, - 96, - 195, - 86, - 189, - 82, - 20, - 78, - 93, - 75, - 21, - 77, - 170, - 98, - 217, - 119, - 119, - 119, - 119, - 119, - 119, - 112, - 112, - 92, - 92, - 82, - 82, - 189, - 189, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 132, - 132, - 129, - 129, - 135, - 73, - 142, - 142, - 137, - 137, - 127, - 127, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 118, - 118, - 99, - 99, - 84, - 84, - 80, - 80, - 76, - 76, - 230, - 230, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 248, - 248, - 130, - 113, - 104, - 71, - 98, - 212, - 120, - 60, - 144, - 216, - 147, - 147, - 143, - 143, - 131, - 131, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 122, - 122, - 122, - 122, - 121, - 121, - 106, - 106, - 87, - 87, - 80, - 80, - 76, - 76, - 73, - 73, - 89, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 138, - 138, - 105, - 212, - 116, - 154, - 142, - 131, - 144, - 29, - 146, - 146, - 149, - 149, - 151, - 151, - 148, - 148, - 135, - 135, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 113, - 113, - 91, - 11, - 50, - 217, - 20, - 116, - 24, - 118, - 45, - 172, - 70, - 188, - 130, - 130, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 146, - 146, - 105, - 174, - 111, - 77, - 143, - 177, - 143, - 109, - 145, - 145, - 148, - 148, - 151, - 151, - 153, - 153, - 155, - 155, - 153, - 153, - 139, - 139, - 127, - 127, - 126, - 126, - 126, - 126, - 125, - 125, - 119, - 119, - 98, - 98, - 84, - 210, - 37, - 215, - 23, - 115, - 16, - 200, - 12, - 18, - 11, - 215, - 47, - 27, - 172, - 172, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 148, - 148, - 103, - 241, - 106, - 0, - 133, - 23, - 143, - 177, - 144, - 95, - 147, - 147, - 147, - 113, - 122, - 25, - 127, - 101, - 151, - 250, - 158, - 158, - 156, - 156, - 142, - 142, - 126, - 126, - 106, - 106, - 90, - 90, - 87, - 175, - 44, - 230, - 27, - 151, - 18, - 100, - 12, - 208, - 7, - 231, - 11, - 39, - 36, - 3, - 214, - 214, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 164, - 164, - 103, - 53, - 100, - 29, - 117, - 199, - 143, - 177, - 143, - 113, - 146, - 146, - 132, - 0, - 110, - 182, - 99, - 134, - 110, - 50, - 157, - 157, - 159, - 159, - 160, - 160, - 122, - 122, - 90, - 90, - 89, - 89, - 62, - 17, - 29, - 80, - 22, - 194, - 13, - 33, - 26, - 93, - 13, - 21, - 20, - 112, - 61, - 253, - 251, - 251, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 182, - 182, - 102, - 15, - 95, - 103, - 101, - 225, - 138, - 100, - 142, - 121, - 144, - 154, - 126, - 39, - 118, - 94, - 90, - 26, - 110, - 252, - 156, - 156, - 158, - 158, - 159, - 159, - 116, - 116, - 89, - 89, - 82, - 245, - 32, - 155, - 27, - 151, - 15, - 138, - 57, - 212, - 72, - 72, - 26, - 28, - 47, - 255, - 114, - 114, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 199, - 100, - 126, - 104, - 60, - 83, - 9, - 123, - 171, - 143, - 26, - 122, - 210, - 117, - 136, - 117, - 49, - 89, - 131, - 112, - 121, - 155, - 155, - 157, - 157, - 158, - 158, - 110, - 110, - 89, - 89, - 58, - 28, - 29, - 80, - 19, - 21, - 43, - 31, - 68, - 164, - 34, - 10, - 18, - 71, - 17, - 54, - 157, - 47, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 216, - 99, - 88, - 104, - 60, - 72, - 111, - 108, - 91, - 141, - 236, - 91, - 103, - 116, - 90, - 116, - 154, - 88, - 236, - 111, - 226, - 154, - 154, - 155, - 155, - 157, - 157, - 103, - 103, - 87, - 146, - 35, - 92, - 27, - 151, - 15, - 219, - 55, - 175, - 22, - 198, - 18, - 41, - 14, - 65, - 22, - 63, - 199, - 199, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 97, - 199, - 101, - 225, - 78, - 83, - 93, - 63, - 129, - 142, - 98, - 88, - 104, - 9, - 114, - 214, - 88, - 85, - 112, - 32, - 152, - 152, - 154, - 154, - 156, - 156, - 97, - 97, - 73, - 69, - 29, - 80, - 21, - 68, - 33, - 206, - 27, - 243, - 14, - 35, - 12, - 77, - 12, - 77, - 34, - 199, - 244, - 244, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 96, - 205, - 99, - 134, - 87, - 191, - 88, - 193, - 113, - 168, - 116, - 3, - 86, - 251, - 113, - 168, - 84, - 205, - 116, - 132, - 151, - 151, - 153, - 153, - 154, - 154, - 90, - 90, - 57, - 20, - 28, - 71, - 15, - 104, - 51, - 82, - 27, - 190, - 13, - 40, - 13, - 56, - 17, - 210, - 81, - 83, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 110, - 226, - 96, - 148, - 96, - 148, - 85, - 53, - 105, - 120, - 124, - 216, - 81, - 219, - 112, - 122, - 83, - 159, - 115, - 131, - 149, - 149, - 151, - 151, - 150, - 150, - 87, - 87, - 43, - 235, - 25, - 133, - 11, - 245, - 64, - 160, - 43, - 43, - 23, - 50, - 20, - 147, - 12, - 77, - 135, - 231, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 140, - 140, - 95, - 31, - 103, - 165, - 81, - 166, - 104, - 226, - 118, - 245, - 88, - 236, - 110, - 182, - 82, - 114, - 113, - 235, - 147, - 147, - 149, - 149, - 143, - 143, - 86, - 86, - 34, - 95, - 21, - 68, - 14, - 100, - 71, - 71, - 53, - 71, - 18, - 159, - 18, - 12, - 18, - 30, - 197, - 197, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 250, - 163, - 104, - 99, - 231, - 99, - 37, - 103, - 130, - 105, - 140, - 102, - 120, - 108, - 242, - 81, - 219, - 117, - 123, - 145, - 145, - 147, - 147, - 137, - 137, - 85, - 85, - 28, - 51, - 18, - 12, - 17, - 154, - 56, - 205, - 21, - 95, - 20, - 89, - 31, - 247, - 182, - 102, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 208, - 208, - 109, - 109, - 101, - 101, - 102, - 227, - 104, - 211, - 107, - 46, - 80, - 174, - 117, - 34, - 143, - 143, - 145, - 145, - 129, - 129, - 85, - 85, - 33, - 39, - 15, - 45, - 12, - 128, - 16, - 16, - 16, - 171, - 37, - 137, - 207, - 9, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 236, - 236, - 134, - 134, - 102, - 122, - 103, - 14, - 105, - 105, - 80, - 23, - 115, - 32, - 141, - 141, - 143, - 143, - 122, - 122, - 84, - 84, - 47, - 129, - 14, - 20, - 11, - 127, - 11, - 97, - 49, - 200, - 224, - 144, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 170, - 170, - 103, - 53, - 103, - 165, - 78, - 233, - 115, - 155, - 139, - 139, - 141, - 141, - 116, - 116, - 83, - 83, - 61, - 61, - 27, - 35, - 19, - 66, - 76, - 56, - 238, - 40, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 212, - 195, - 114, - 133, - 88, - 193, - 127, - 216, - 136, - 136, - 139, - 139, - 109, - 109, - 82, - 82, - 79, - 79, - 55, - 55, - 119, - 119, - 250, - 250, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 239, - 239, - 160, - 160, - 131, - 131, - 134, - 134, - 136, - 136, - 103, - 103, - 81, - 81, - 80, - 80, - 160, - 160, - 253, - 253, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 192, - 192, - 133, - 133, - 134, - 134, - 97, - 97, - 82, - 82, - 183, - 183, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 222, - 222, - 144, - 144, - 101, - 101, - 204, - 204, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 245, - 245, - 227, - 227, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - ], - "type": "Buffer", -} -`; - -exports[`pixels node transparent-white-palette-8bit.png 1`] = ` -Object { - "data": Array [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 224, - 234, - 102, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 222, - 2, - 163, - 54, - 228, - 57, - 3, - 244, - 240, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 105, - 239, - 26, - 53, - 134, - 128, - 6, - 46, - 176, - 23, - 176, - 171, - 122, - 244, - 89, - 80, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 102, - 124, - 14, - 169, - 204, - 128, - 57, - 121, - 147, - 121, - 23, - 160, - 58, - 135, - 135, - 135, - 176, - 226, - 174, - 138, - 231, - 92, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 92, - 234, - 142, - 167, - 44, - 134, - 57, - 226, - 147, - 32, - 143, - 125, - 125, - 25, - 32, - 6, - 57, - 160, - 23, - 171, - 46, - 228, - 172, - 44, - 167, - 9, - 124, - 105, - 0, - 0, - 0, - 0, - 120, - 35, - 167, - 43, - 43, - 218, - 25, - 143, - 213, - 77, - 218, - 217, - 5, - 33, - 33, - 145, - 145, - 33, - 125, - 25, - 23, - 204, - 43, - 43, - 43, - 43, - 175, - 142, - 0, - 0, - 0, - 0, - 232, - 31, - 155, - 159, - 39, - 1, - 77, - 5, - 217, - 28, - 42, - 42, - 42, - 127, - 3, - 126, - 205, - 205, - 126, - 122, - 1, - 42, - 42, - 42, - 170, - 183, - 194, - 239, - 0, - 0, - 0, - 0, - 108, - 159, - 34, - 157, - 152, - 26, - 35, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 40, - 167, - 180, - 69, - 195, - 200, - 222, - 0, - 0, - 0, - 0, - 92, - 162, - 73, - 214, - 61, - 20, - 15, - 19, - 159, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 39, - 165, - 165, - 40, - 175, - 68, - 195, - 200, - 206, - 67, - 0, - 0, - 0, - 0, - 0, - 0, - 154, - 98, - 202, - 65, - 166, - 150, - 14, - 13, - 148, - 29, - 164, - 164, - 164, - 164, - 164, - 164, - 164, - 164, - 169, - 183, - 50, - 82, - 90, - 16, - 132, - 161, - 0, - 0, - 0, - 0, - 0, - 0, - 150, - 91, - 88, - 181, - 56, - 17, - 148, - 13, - 11, - 9, - 11, - 24, - 35, - 163, - 163, - 37, - 42, - 180, - 210, - 76, - 38, - 153, - 87, - 87, - 16, - 136, - 0, - 0, - 0, - 0, - 0, - 0, - 148, - 97, - 98, - 185, - 181, - 156, - 15, - 20, - 177, - 45, - 12, - 139, - 140, - 152, - 163, - 175, - 184, - 237, - 27, - 189, - 130, - 186, - 116, - 48, - 8, - 119, - 0, - 0, - 0, - 0, - 0, - 0, - 136, - 197, - 101, - 199, - 181, - 166, - 150, - 45, - 207, - 103, - 190, - 7, - 4, - 138, - 165, - 184, - 67, - 21, - 243, - 38, - 186, - 115, - 149, - 131, - 41, - 80, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 190, - 216, - 212, - 185, - 66, - 20, - 177, - 199, - 219, - 182, - 140, - 139, - 4, - 168, - 67, - 230, - 209, - 189, - 129, - 75, - 206, - 235, - 16, - 169, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 123, - 71, - 99, - 110, - 196, - 65, - 178, - 61, - 78, - 219, - 63, - 9, - 7, - 139, - 172, - 67, - 21, - 243, - 64, - 236, - 133, - 90, - 130, - 153, - 95, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 89, - 187, - 99, - 225, - 93, - 66, - 100, - 61, - 202, - 107, - 63, - 142, - 9, - 7, - 53, - 237, - 118, - 189, - 129, - 192, - 82, - 36, - 233, - 242, - 123, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 108, - 187, - 212, - 113, - 97, - 193, - 104, - 73, - 81, - 220, - 63, - 144, - 142, - 140, - 60, - 238, - 243, - 141, - 8, - 235, - 233, - 109, - 109, - 8, - 96, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 80, - 191, - 103, - 220, - 84, - 83, - 79, - 221, - 83, - 221, - 178, - 13, - 11, - 142, - 184, - 21, - 209, - 10, - 241, - 115, - 47, - 227, - 18, - 230, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 173, - 214, - 214, - 191, - 97, - 193, - 111, - 86, - 110, - 178, - 14, - 13, - 146, - 68, - 117, - 189, - 87, - 133, - 114, - 198, - 30, - 109, - 52, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 216, - 211, - 208, - 62, - 199, - 107, - 207, - 223, - 59, - 15, - 14, - 19, - 188, - 76, - 141, - 47, - 132, - 192, - 64, - 203, - 131, - 123, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 85, - 12, - 71, - 179, - 54, - 91, - 212, - 93, - 111, - 51, - 17, - 15, - 26, - 69, - 117, - 203, - 242, - 192, - 82, - 30, - 8, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 231, - 172, - 54, - 190, - 98, - 94, - 112, - 49, - 19, - 17, - 34, - 69, - 90, - 10, - 47, - 10, - 153, - 198, - 231, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 106, - 158, - 55, - 211, - 98, - 112, - 51, - 22, - 19, - 165, - 69, - 241, - 129, - 229, - 48, - 50, - 232, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 80, - 136, - 197, - 211, - 113, - 49, - 24, - 22, - 168, - 70, - 75, - 115, - 116, - 238, - 137, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 119, - 182, - 84, - 162, - 155, - 24, - 172, - 194, - 74, - 114, - 42, - 85, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 215, - 138, - 159, - 158, - 155, - 53, - 72, - 195, - 138, - 201, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 239, - 31, - 158, - 60, - 194, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 232, - 151, - 54, - 120, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 224, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ], - "type": "Buffer", -} -`; - -exports[`pixels node transparent-white-rgb-16bit.png 1`] = ` -Object { - "data": Array [ - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 227, - 227, - 227, - 227, - 227, - 227, - 201, - 201, - 201, - 201, - 201, - 201, - 241, - 241, - 241, - 241, - 241, - 241, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 232, - 232, - 232, - 232, - 232, - 232, - 181, - 181, - 181, - 181, - 181, - 181, - 126, - 126, - 126, - 126, - 126, - 126, - 101, - 101, - 101, - 101, - 101, - 101, - 110, - 110, - 82, - 82, - 82, - 82, - 126, - 126, - 46, - 46, - 46, - 46, - 166, - 166, - 67, - 67, - 67, - 67, - 199, - 199, - 144, - 144, - 144, - 144, - 235, - 235, - 221, - 221, - 221, - 221, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 238, - 238, - 238, - 238, - 238, - 238, - 191, - 191, - 191, - 191, - 191, - 191, - 137, - 137, - 137, - 137, - 137, - 137, - 103, - 103, - 103, - 103, - 103, - 103, - 107, - 107, - 93, - 93, - 93, - 93, - 122, - 122, - 57, - 57, - 57, - 57, - 138, - 138, - 18, - 18, - 18, - 18, - 141, - 141, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 0, - 0, - 119, - 119, - 0, - 0, - 0, - 0, - 132, - 132, - 0, - 0, - 0, - 0, - 154, - 154, - 1, - 1, - 1, - 1, - 162, - 162, - 45, - 45, - 45, - 45, - 191, - 191, - 125, - 125, - 125, - 125, - 221, - 221, - 208, - 208, - 208, - 208, - 252, - 252, - 252, - 252, - 252, - 252, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 242, - 242, - 242, - 242, - 242, - 242, - 196, - 196, - 196, - 196, - 196, - 196, - 149, - 149, - 149, - 149, - 149, - 149, - 114, - 114, - 114, - 114, - 114, - 114, - 111, - 111, - 107, - 107, - 107, - 107, - 119, - 119, - 68, - 68, - 68, - 68, - 135, - 135, - 30, - 30, - 30, - 30, - 149, - 149, - 1, - 1, - 1, - 1, - 159, - 159, - 0, - 1, - 0, - 0, - 145, - 145, - 0, - 0, - 0, - 0, - 128, - 128, - 0, - 1, - 0, - 0, - 114, - 114, - 12, - 12, - 12, - 12, - 97, - 97, - 45, - 45, - 45, - 45, - 83, - 83, - 14, - 14, - 14, - 14, - 80, - 80, - 0, - 0, - 0, - 0, - 89, - 89, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 0, - 0, - 146, - 146, - 6, - 6, - 6, - 6, - 122, - 122, - 102, - 102, - 102, - 102, - 160, - 160, - 160, - 160, - 160, - 160, - 207, - 207, - 207, - 207, - 207, - 207, - 248, - 248, - 248, - 248, - 248, - 248, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 247, - 247, - 247, - 247, - 247, - 247, - 202, - 202, - 202, - 202, - 202, - 202, - 154, - 154, - 154, - 154, - 154, - 154, - 118, - 118, - 118, - 118, - 118, - 118, - 115, - 115, - 115, - 115, - 115, - 115, - 124, - 124, - 93, - 93, - 93, - 93, - 135, - 135, - 46, - 46, - 46, - 46, - 147, - 147, - 7, - 7, - 7, - 7, - 158, - 158, - 0, - 1, - 0, - 0, - 169, - 169, - 0, - 0, - 0, - 0, - 176, - 176, - 0, - 0, - 0, - 0, - 201, - 201, - 0, - 0, - 0, - 0, - 207, - 207, - 0, - 0, - 0, - 0, - 185, - 185, - 0, - 1, - 0, - 0, - 162, - 162, - 1, - 1, - 1, - 1, - 140, - 140, - 25, - 25, - 25, - 25, - 133, - 133, - 42, - 42, - 42, - 42, - 127, - 127, - 19, - 19, - 19, - 19, - 129, - 129, - 0, - 1, - 0, - 0, - 150, - 150, - 0, - 0, - 0, - 0, - 143, - 143, - 0, - 0, - 0, - 0, - 107, - 107, - 83, - 83, - 83, - 83, - 110, - 110, - 110, - 110, - 110, - 110, - 115, - 115, - 115, - 115, - 115, - 115, - 118, - 118, - 118, - 118, - 118, - 118, - 155, - 155, - 155, - 155, - 155, - 155, - 196, - 196, - 196, - 196, - 196, - 196, - 238, - 238, - 238, - 238, - 238, - 238, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 204, - 204, - 204, - 204, - 204, - 204, - 127, - 127, - 127, - 127, - 127, - 127, - 118, - 118, - 118, - 118, - 118, - 118, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 150, - 150, - 47, - 47, - 47, - 47, - 184, - 184, - 0, - 1, - 0, - 0, - 180, - 180, - 0, - 0, - 0, - 0, - 182, - 182, - 0, - 1, - 0, - 0, - 173, - 173, - 12, - 12, - 12, - 12, - 148, - 148, - 58, - 58, - 58, - 58, - 146, - 146, - 80, - 80, - 80, - 80, - 185, - 185, - 35, - 35, - 35, - 35, - 214, - 214, - 2, - 2, - 2, - 2, - 226, - 226, - 0, - 1, - 0, - 0, - 239, - 239, - 0, - 0, - 0, - 0, - 231, - 231, - 0, - 0, - 0, - 0, - 218, - 218, - 0, - 0, - 0, - 0, - 207, - 207, - 0, - 1, - 0, - 0, - 186, - 186, - 0, - 0, - 0, - 0, - 125, - 125, - 1, - 1, - 1, - 1, - 111, - 111, - 107, - 107, - 107, - 107, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 106, - 106, - 106, - 106, - 106, - 106, - 154, - 154, - 154, - 154, - 154, - 154, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 220, - 220, - 220, - 220, - 220, - 220, - 133, - 133, - 133, - 133, - 133, - 133, - 136, - 136, - 136, - 136, - 136, - 136, - 132, - 132, - 132, - 132, - 132, - 132, - 123, - 123, - 123, - 123, - 123, - 123, - 133, - 133, - 84, - 84, - 84, - 84, - 183, - 183, - 19, - 19, - 19, - 19, - 169, - 169, - 29, - 29, - 29, - 29, - 141, - 141, - 79, - 79, - 79, - 79, - 120, - 120, - 117, - 117, - 117, - 117, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 129, - 129, - 107, - 107, - 107, - 107, - 170, - 170, - 65, - 65, - 65, - 65, - 214, - 214, - 32, - 32, - 32, - 32, - 236, - 236, - 16, - 16, - 16, - 16, - 233, - 233, - 12, - 12, - 12, - 12, - 208, - 208, - 18, - 18, - 18, - 18, - 165, - 165, - 40, - 40, - 40, - 40, - 123, - 123, - 88, - 88, - 88, - 88, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 119, - 112, - 112, - 112, - 112, - 112, - 112, - 92, - 92, - 92, - 92, - 92, - 92, - 82, - 82, - 82, - 82, - 82, - 82, - 189, - 189, - 189, - 189, - 189, - 189, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 234, - 234, - 234, - 234, - 132, - 132, - 132, - 132, - 132, - 132, - 129, - 129, - 129, - 129, - 129, - 129, - 133, - 133, - 136, - 136, - 133, - 133, - 142, - 142, - 142, - 142, - 142, - 142, - 137, - 137, - 137, - 137, - 137, - 137, - 127, - 127, - 127, - 127, - 127, - 127, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 121, - 118, - 118, - 118, - 118, - 118, - 118, - 99, - 99, - 99, - 99, - 99, - 99, - 84, - 84, - 84, - 84, - 84, - 84, - 80, - 80, - 80, - 80, - 80, - 80, - 76, - 76, - 76, - 76, - 76, - 76, - 230, - 230, - 230, - 230, - 230, - 230, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 248, - 248, - 248, - 248, - 248, - 248, - 127, - 127, - 132, - 132, - 127, - 127, - 37, - 37, - 151, - 151, - 37, - 37, - 4, - 4, - 165, - 165, - 4, - 4, - 57, - 57, - 164, - 164, - 57, - 57, - 139, - 139, - 148, - 148, - 139, - 139, - 147, - 147, - 147, - 147, - 147, - 147, - 143, - 143, - 143, - 143, - 143, - 143, - 131, - 131, - 131, - 131, - 131, - 131, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 123, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 122, - 121, - 121, - 121, - 121, - 121, - 121, - 106, - 106, - 106, - 106, - 106, - 106, - 87, - 87, - 87, - 87, - 87, - 87, - 80, - 80, - 80, - 80, - 80, - 80, - 76, - 76, - 76, - 76, - 76, - 76, - 73, - 73, - 73, - 73, - 73, - 73, - 89, - 89, - 89, - 89, - 89, - 89, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 138, - 138, - 138, - 138, - 138, - 138, - 1, - 1, - 179, - 179, - 1, - 1, - 0, - 0, - 198, - 198, - 0, - 1, - 0, - 0, - 242, - 242, - 0, - 0, - 89, - 89, - 182, - 182, - 89, - 89, - 146, - 146, - 146, - 146, - 146, - 146, - 149, - 149, - 149, - 149, - 149, - 149, - 151, - 151, - 151, - 151, - 151, - 151, - 148, - 148, - 148, - 148, - 148, - 148, - 135, - 135, - 135, - 135, - 135, - 135, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 124, - 113, - 113, - 113, - 113, - 113, - 113, - 90, - 90, - 90, - 90, - 96, - 96, - 40, - 40, - 40, - 40, - 133, - 133, - 4, - 4, - 4, - 4, - 147, - 147, - 12, - 12, - 12, - 12, - 120, - 120, - 40, - 40, - 40, - 40, - 88, - 88, - 70, - 70, - 70, - 70, - 74, - 74, - 130, - 130, - 130, - 130, - 130, - 130, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 146, - 146, - 146, - 146, - 146, - 146, - 12, - 12, - 171, - 171, - 12, - 12, - 0, - 0, - 189, - 189, - 0, - 1, - 0, - 0, - 244, - 244, - 0, - 0, - 32, - 32, - 221, - 221, - 32, - 32, - 145, - 145, - 145, - 145, - 145, - 145, - 148, - 148, - 148, - 148, - 148, - 148, - 151, - 151, - 151, - 151, - 151, - 151, - 153, - 153, - 153, - 153, - 153, - 153, - 155, - 155, - 155, - 155, - 155, - 155, - 153, - 153, - 153, - 153, - 153, - 153, - 139, - 139, - 139, - 139, - 139, - 139, - 127, - 127, - 127, - 127, - 127, - 127, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 126, - 125, - 125, - 125, - 125, - 125, - 125, - 119, - 119, - 119, - 119, - 119, - 119, - 98, - 98, - 98, - 98, - 98, - 98, - 83, - 83, - 83, - 83, - 96, - 96, - 18, - 18, - 18, - 18, - 190, - 190, - 0, - 1, - 0, - 0, - 204, - 204, - 0, - 0, - 0, - 0, - 146, - 146, - 0, - 0, - 0, - 1, - 105, - 105, - 0, - 0, - 0, - 0, - 103, - 103, - 42, - 42, - 42, - 42, - 85, - 85, - 172, - 172, - 172, - 172, - 172, - 172, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 148, - 148, - 148, - 148, - 148, - 148, - 22, - 22, - 161, - 161, - 22, - 22, - 0, - 0, - 180, - 180, - 0, - 1, - 0, - 0, - 226, - 226, - 0, - 0, - 0, - 0, - 244, - 244, - 0, - 0, - 118, - 118, - 162, - 162, - 118, - 118, - 147, - 147, - 147, - 147, - 147, - 147, - 141, - 141, - 151, - 151, - 141, - 141, - 70, - 70, - 158, - 158, - 70, - 70, - 70, - 70, - 167, - 167, - 70, - 70, - 142, - 142, - 158, - 158, - 142, - 142, - 158, - 158, - 158, - 158, - 158, - 158, - 156, - 156, - 156, - 156, - 156, - 156, - 142, - 142, - 142, - 142, - 142, - 142, - 126, - 126, - 126, - 126, - 126, - 126, - 106, - 106, - 106, - 106, - 106, - 106, - 90, - 90, - 90, - 90, - 90, - 90, - 87, - 87, - 87, - 87, - 90, - 90, - 24, - 24, - 24, - 24, - 205, - 205, - 0, - 1, - 0, - 0, - 240, - 240, - 0, - 0, - 0, - 0, - 160, - 160, - 2, - 2, - 2, - 2, - 96, - 96, - 1, - 1, - 1, - 1, - 61, - 61, - 0, - 1, - 0, - 0, - 97, - 97, - 29, - 29, - 29, - 29, - 89, - 89, - 214, - 214, - 214, - 214, - 214, - 214, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 164, - 164, - 164, - 164, - 164, - 164, - 33, - 33, - 152, - 152, - 33, - 33, - 0, - 0, - 170, - 170, - 0, - 1, - 0, - 0, - 200, - 200, - 0, - 0, - 0, - 0, - 244, - 244, - 0, - 0, - 59, - 59, - 202, - 202, - 59, - 59, - 146, - 146, - 146, - 146, - 146, - 146, - 74, - 74, - 172, - 172, - 74, - 74, - 0, - 1, - 188, - 188, - 0, - 0, - 0, - 0, - 169, - 169, - 0, - 0, - 47, - 47, - 154, - 154, - 47, - 47, - 157, - 157, - 157, - 157, - 157, - 157, - 159, - 159, - 159, - 159, - 159, - 159, - 160, - 160, - 160, - 160, - 160, - 160, - 122, - 122, - 122, - 122, - 122, - 122, - 90, - 90, - 90, - 90, - 90, - 90, - 89, - 89, - 89, - 89, - 89, - 89, - 49, - 49, - 49, - 49, - 161, - 161, - 0, - 1, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 0, - 198, - 198, - 3, - 3, - 3, - 3, - 91, - 91, - 25, - 25, - 25, - 25, - 36, - 36, - 12, - 12, - 12, - 12, - 21, - 21, - 12, - 12, - 12, - 12, - 85, - 85, - 59, - 59, - 59, - 59, - 83, - 83, - 251, - 251, - 251, - 251, - 251, - 251, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 182, - 182, - 182, - 182, - 182, - 182, - 43, - 43, - 143, - 143, - 43, - 43, - 0, - 0, - 162, - 162, - 0, - 1, - 0, - 0, - 173, - 173, - 0, - 0, - 0, - 0, - 235, - 235, - 0, - 0, - 7, - 7, - 237, - 237, - 7, - 7, - 137, - 137, - 149, - 149, - 137, - 137, - 67, - 67, - 167, - 167, - 67, - 67, - 0, - 1, - 201, - 201, - 0, - 0, - 0, - 0, - 153, - 153, - 0, - 0, - 56, - 56, - 149, - 149, - 56, - 56, - 156, - 156, - 156, - 156, - 156, - 156, - 158, - 158, - 158, - 158, - 158, - 158, - 159, - 159, - 159, - 159, - 159, - 159, - 116, - 116, - 116, - 116, - 116, - 116, - 89, - 89, - 89, - 89, - 89, - 89, - 80, - 80, - 80, - 80, - 103, - 103, - 5, - 5, - 5, - 5, - 245, - 245, - 0, - 1, - 0, - 0, - 240, - 240, - 3, - 3, - 3, - 3, - 112, - 112, - 56, - 56, - 56, - 56, - 70, - 70, - 72, - 72, - 72, - 72, - 72, - 72, - 22, - 22, - 22, - 22, - 57, - 57, - 43, - 43, - 43, - 43, - 85, - 85, - 114, - 114, - 114, - 114, - 114, - 114, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 199, - 199, - 199, - 199, - 199, - 199, - 52, - 52, - 134, - 134, - 52, - 52, - 0, - 0, - 177, - 177, - 0, - 1, - 0, - 0, - 141, - 141, - 0, - 0, - 0, - 0, - 210, - 210, - 0, - 0, - 0, - 0, - 243, - 243, - 0, - 0, - 76, - 76, - 155, - 155, - 76, - 76, - 59, - 59, - 158, - 158, - 59, - 59, - 0, - 1, - 199, - 199, - 0, - 0, - 0, - 0, - 152, - 152, - 0, - 0, - 61, - 61, - 148, - 148, - 61, - 61, - 155, - 155, - 155, - 155, - 155, - 155, - 157, - 157, - 157, - 157, - 157, - 157, - 158, - 158, - 158, - 158, - 158, - 158, - 110, - 110, - 110, - 110, - 110, - 110, - 89, - 89, - 89, - 89, - 89, - 89, - 43, - 43, - 43, - 43, - 173, - 173, - 0, - 0, - 0, - 1, - 255, - 255, - 0, - 0, - 0, - 0, - 166, - 166, - 37, - 37, - 37, - 37, - 89, - 89, - 67, - 67, - 67, - 67, - 79, - 79, - 22, - 22, - 22, - 22, - 126, - 126, - 0, - 0, - 0, - 1, - 159, - 159, - 1, - 1, - 1, - 1, - 142, - 142, - 156, - 156, - 156, - 156, - 161, - 161, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 216, - 216, - 216, - 216, - 216, - 216, - 62, - 62, - 125, - 125, - 62, - 62, - 0, - 0, - 177, - 177, - 0, - 1, - 0, - 0, - 123, - 123, - 0, - 0, - 0, - 0, - 184, - 184, - 0, - 0, - 0, - 0, - 241, - 241, - 0, - 0, - 23, - 23, - 139, - 139, - 23, - 23, - 59, - 59, - 156, - 156, - 59, - 59, - 0, - 1, - 198, - 198, - 0, - 0, - 0, - 0, - 151, - 151, - 0, - 0, - 61, - 61, - 147, - 147, - 61, - 61, - 154, - 154, - 154, - 154, - 154, - 154, - 155, - 155, - 155, - 155, - 155, - 155, - 157, - 157, - 157, - 157, - 157, - 157, - 103, - 103, - 103, - 103, - 103, - 103, - 87, - 87, - 87, - 87, - 89, - 89, - 9, - 9, - 9, - 9, - 238, - 238, - 0, - 0, - 0, - 1, - 240, - 240, - 4, - 4, - 4, - 4, - 107, - 107, - 51, - 51, - 51, - 51, - 90, - 90, - 7, - 7, - 7, - 7, - 144, - 144, - 0, - 0, - 0, - 0, - 158, - 158, - 0, - 0, - 0, - 1, - 124, - 124, - 13, - 13, - 13, - 13, - 93, - 93, - 199, - 199, - 199, - 199, - 199, - 199, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 234, - 234, - 234, - 234, - 234, - 234, - 71, - 71, - 116, - 116, - 71, - 71, - 0, - 0, - 173, - 173, - 0, - 1, - 0, - 0, - 133, - 133, - 0, - 0, - 9, - 9, - 152, - 152, - 9, - 9, - 0, - 0, - 220, - 220, - 0, - 0, - 0, - 0, - 167, - 167, - 0, - 0, - 35, - 35, - 152, - 152, - 35, - 35, - 0, - 1, - 195, - 195, - 0, - 0, - 0, - 0, - 150, - 150, - 0, - 0, - 63, - 63, - 146, - 146, - 63, - 63, - 152, - 152, - 152, - 152, - 152, - 152, - 154, - 154, - 154, - 154, - 154, - 154, - 156, - 156, - 156, - 156, - 156, - 156, - 97, - 97, - 97, - 97, - 97, - 97, - 66, - 66, - 66, - 66, - 127, - 127, - 0, - 1, - 0, - 0, - 255, - 255, - 0, - 0, - 0, - 1, - 185, - 185, - 26, - 26, - 26, - 26, - 93, - 93, - 22, - 22, - 22, - 22, - 73, - 73, - 0, - 0, - 0, - 0, - 123, - 123, - 0, - 0, - 0, - 0, - 107, - 107, - 0, - 0, - 0, - 1, - 107, - 107, - 28, - 28, - 28, - 28, - 86, - 86, - 244, - 244, - 244, - 244, - 244, - 244, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 252, - 252, - 252, - 252, - 80, - 80, - 108, - 108, - 80, - 80, - 0, - 0, - 169, - 169, - 0, - 1, - 0, - 0, - 149, - 149, - 0, - 0, - 45, - 45, - 119, - 119, - 45, - 45, - 0, - 0, - 193, - 193, - 0, - 0, - 0, - 0, - 197, - 197, - 0, - 0, - 1, - 1, - 147, - 147, - 1, - 1, - 0, - 1, - 193, - 193, - 0, - 0, - 0, - 0, - 144, - 144, - 0, - 0, - 75, - 75, - 145, - 145, - 75, - 75, - 151, - 151, - 151, - 151, - 151, - 151, - 153, - 153, - 153, - 153, - 153, - 153, - 154, - 154, - 154, - 154, - 154, - 154, - 90, - 90, - 90, - 90, - 90, - 90, - 43, - 43, - 43, - 43, - 164, - 164, - 0, - 1, - 0, - 0, - 246, - 246, - 0, - 0, - 0, - 1, - 134, - 134, - 47, - 47, - 47, - 47, - 83, - 83, - 25, - 25, - 25, - 25, - 48, - 48, - 2, - 2, - 2, - 2, - 99, - 99, - 0, - 0, - 0, - 0, - 115, - 115, - 0, - 0, - 0, - 1, - 155, - 155, - 77, - 77, - 77, - 77, - 112, - 112, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 104, - 104, - 115, - 115, - 104, - 104, - 0, - 0, - 164, - 164, - 0, - 1, - 0, - 0, - 164, - 164, - 0, - 0, - 62, - 62, - 101, - 101, - 62, - 62, - 20, - 20, - 165, - 165, - 20, - 20, - 0, - 0, - 212, - 212, - 0, - 0, - 0, - 0, - 139, - 139, - 0, - 1, - 0, - 0, - 191, - 191, - 0, - 0, - 0, - 0, - 142, - 142, - 0, - 0, - 74, - 74, - 144, - 144, - 74, - 74, - 149, - 149, - 149, - 149, - 149, - 149, - 151, - 151, - 151, - 151, - 151, - 151, - 150, - 150, - 150, - 150, - 150, - 150, - 87, - 87, - 87, - 87, - 87, - 87, - 26, - 26, - 26, - 26, - 181, - 181, - 0, - 1, - 0, - 0, - 222, - 222, - 0, - 0, - 0, - 1, - 104, - 104, - 63, - 63, - 63, - 63, - 75, - 75, - 43, - 43, - 43, - 43, - 43, - 43, - 12, - 12, - 12, - 12, - 109, - 109, - 0, - 0, - 0, - 0, - 179, - 179, - 0, - 0, - 0, - 1, - 107, - 107, - 134, - 134, - 134, - 134, - 146, - 146, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 140, - 140, - 140, - 140, - 140, - 140, - 5, - 5, - 158, - 158, - 5, - 5, - 0, - 1, - 176, - 176, - 0, - 0, - 52, - 52, - 102, - 102, - 52, - 52, - 64, - 64, - 133, - 133, - 64, - 64, - 0, - 0, - 202, - 202, - 0, - 0, - 0, - 0, - 151, - 151, - 0, - 1, - 0, - 0, - 188, - 188, - 0, - 0, - 0, - 0, - 140, - 140, - 0, - 0, - 73, - 73, - 142, - 142, - 73, - 73, - 147, - 147, - 147, - 147, - 147, - 147, - 149, - 149, - 149, - 149, - 149, - 149, - 143, - 143, - 143, - 143, - 143, - 143, - 86, - 86, - 86, - 86, - 86, - 86, - 15, - 15, - 15, - 15, - 183, - 183, - 0, - 1, - 0, - 0, - 185, - 185, - 3, - 3, - 3, - 3, - 102, - 102, - 71, - 71, - 71, - 71, - 71, - 71, - 47, - 47, - 47, - 47, - 100, - 100, - 0, - 1, - 0, - 0, - 162, - 162, - 0, - 0, - 0, - 0, - 157, - 157, - 9, - 9, - 9, - 9, - 88, - 88, - 197, - 197, - 197, - 197, - 197, - 197, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 250, - 250, - 250, - 250, - 250, - 250, - 144, - 144, - 176, - 176, - 144, - 144, - 52, - 52, - 133, - 133, - 52, - 52, - 97, - 97, - 100, - 100, - 97, - 97, - 99, - 99, - 106, - 106, - 99, - 99, - 6, - 6, - 175, - 175, - 6, - 6, - 0, - 0, - 174, - 174, - 0, - 1, - 0, - 0, - 185, - 185, - 0, - 0, - 0, - 0, - 139, - 139, - 0, - 0, - 83, - 83, - 141, - 141, - 83, - 83, - 145, - 145, - 145, - 145, - 145, - 145, - 147, - 147, - 147, - 147, - 147, - 147, - 137, - 137, - 137, - 137, - 137, - 137, - 85, - 85, - 85, - 85, - 85, - 85, - 10, - 10, - 10, - 10, - 168, - 168, - 0, - 1, - 0, - 0, - 157, - 157, - 7, - 7, - 7, - 7, - 99, - 99, - 52, - 52, - 52, - 52, - 92, - 92, - 4, - 4, - 4, - 4, - 155, - 155, - 0, - 1, - 0, - 0, - 177, - 177, - 26, - 26, - 26, - 26, - 77, - 77, - 181, - 181, - 181, - 181, - 187, - 187, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 208, - 208, - 208, - 208, - 208, - 208, - 109, - 109, - 109, - 109, - 109, - 109, - 101, - 101, - 101, - 101, - 101, - 101, - 45, - 45, - 143, - 143, - 45, - 45, - 0, - 0, - 178, - 178, - 0, - 1, - 0, - 0, - 182, - 182, - 0, - 0, - 0, - 0, - 137, - 137, - 0, - 0, - 85, - 85, - 139, - 139, - 85, - 85, - 143, - 143, - 143, - 143, - 143, - 143, - 145, - 145, - 145, - 145, - 145, - 145, - 129, - 129, - 129, - 129, - 129, - 129, - 85, - 85, - 85, - 85, - 85, - 85, - 21, - 21, - 21, - 21, - 126, - 126, - 0, - 1, - 0, - 0, - 132, - 132, - 1, - 1, - 1, - 1, - 101, - 101, - 1, - 1, - 1, - 1, - 132, - 132, - 0, - 1, - 0, - 0, - 145, - 145, - 28, - 28, - 28, - 28, - 110, - 110, - 206, - 206, - 206, - 206, - 208, - 208, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 236, - 236, - 236, - 236, - 236, - 236, - 134, - 134, - 134, - 134, - 134, - 134, - 88, - 88, - 112, - 112, - 88, - 88, - 0, - 0, - 175, - 175, - 0, - 1, - 0, - 0, - 179, - 179, - 0, - 0, - 0, - 0, - 136, - 136, - 0, - 0, - 83, - 83, - 137, - 137, - 83, - 83, - 141, - 141, - 141, - 141, - 141, - 141, - 143, - 143, - 143, - 143, - 143, - 143, - 122, - 122, - 122, - 122, - 122, - 122, - 84, - 84, - 84, - 84, - 84, - 84, - 44, - 44, - 44, - 44, - 73, - 73, - 2, - 2, - 2, - 2, - 107, - 107, - 0, - 0, - 0, - 1, - 100, - 100, - 0, - 0, - 0, - 0, - 99, - 99, - 41, - 41, - 41, - 41, - 116, - 116, - 223, - 223, - 223, - 223, - 229, - 229, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 252, - 252, - 252, - 252, - 252, - 252, - 170, - 170, - 170, - 170, - 170, - 170, - 33, - 33, - 152, - 152, - 33, - 33, - 0, - 1, - 176, - 176, - 0, - 0, - 0, - 0, - 134, - 134, - 0, - 0, - 87, - 87, - 135, - 135, - 87, - 87, - 139, - 139, - 139, - 139, - 139, - 139, - 141, - 141, - 141, - 141, - 141, - 141, - 116, - 116, - 116, - 116, - 116, - 116, - 83, - 83, - 83, - 83, - 83, - 83, - 61, - 61, - 61, - 61, - 61, - 61, - 26, - 26, - 26, - 26, - 35, - 35, - 13, - 13, - 13, - 13, - 67, - 67, - 71, - 71, - 71, - 71, - 114, - 114, - 237, - 237, - 237, - 237, - 239, - 239, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 209, - 209, - 214, - 214, - 209, - 209, - 56, - 56, - 155, - 155, - 56, - 56, - 45, - 45, - 119, - 119, - 45, - 45, - 125, - 125, - 129, - 129, - 125, - 125, - 136, - 136, - 136, - 136, - 136, - 136, - 139, - 139, - 139, - 139, - 139, - 139, - 109, - 109, - 109, - 109, - 109, - 109, - 82, - 82, - 82, - 82, - 82, - 82, - 79, - 79, - 79, - 79, - 79, - 79, - 55, - 55, - 55, - 55, - 55, - 55, - 119, - 119, - 119, - 119, - 119, - 119, - 250, - 250, - 250, - 250, - 250, - 250, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 239, - 239, - 239, - 239, - 239, - 239, - 160, - 160, - 160, - 160, - 160, - 160, - 131, - 131, - 131, - 131, - 131, - 131, - 134, - 134, - 134, - 134, - 134, - 134, - 136, - 136, - 136, - 136, - 136, - 136, - 103, - 103, - 103, - 103, - 103, - 103, - 81, - 81, - 81, - 81, - 81, - 81, - 80, - 80, - 80, - 80, - 80, - 80, - 160, - 160, - 160, - 160, - 160, - 160, - 253, - 253, - 253, - 253, - 253, - 253, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 254, - 254, - 254, - 254, - 254, - 254, - 192, - 192, - 192, - 192, - 192, - 192, - 133, - 133, - 133, - 133, - 133, - 133, - 134, - 134, - 134, - 134, - 134, - 134, - 97, - 97, - 97, - 97, - 97, - 97, - 82, - 82, - 82, - 82, - 82, - 82, - 183, - 183, - 183, - 183, - 183, - 183, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 222, - 222, - 222, - 222, - 222, - 222, - 144, - 144, - 144, - 144, - 144, - 144, - 101, - 101, - 101, - 101, - 101, - 101, - 204, - 204, - 204, - 204, - 204, - 204, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 245, - 245, - 245, - 245, - 245, - 245, - 227, - 227, - 227, - 227, - 227, - 227, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - ], - "type": "Buffer", -} -`; diff --git a/skills/flight-finder/node_modules/png-js/test/images/animated.png b/skills/flight-finder/node_modules/png-js/test/images/animated.png deleted file mode 100644 index 27c48d4..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/animated.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/black-white.png b/skills/flight-finder/node_modules/png-js/test/images/black-white.png deleted file mode 100644 index 1d72242..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/black-white.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/grayscale-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/grayscale-16bit.png deleted file mode 100644 index e7c82f7..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/grayscale-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/grayscale-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/grayscale-8bit.png deleted file mode 100644 index 23c8237..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/grayscale-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-16bit.png deleted file mode 100644 index 8243644..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-8bit.png deleted file mode 100644 index 3e13052..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/grayscale-alpha-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/interlaced-grayscale-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/interlaced-grayscale-8bit.png deleted file mode 100644 index faed8be..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/interlaced-grayscale-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/interlaced-pallete-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/interlaced-pallete-8bit.png deleted file mode 100644 index 50a6d1c..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/interlaced-pallete-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-16bit.png deleted file mode 100644 index cd7e50f..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-8bit.png deleted file mode 100644 index 2aab44d..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-alpha-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-alpha-8bit.png deleted file mode 100644 index aecb32e..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/interlaced-rgb-alpha-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/rgb-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/rgb-16bit.png deleted file mode 100644 index 50c1cb9..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/rgb-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/rgb-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/rgb-8bit.png deleted file mode 100644 index db5ad15..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/rgb-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-16bit.png deleted file mode 100644 index 984a995..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-8bit.png deleted file mode 100644 index e608738..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/rgb-alpha-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/transparent-black-grayscale-4bit.png b/skills/flight-finder/node_modules/png-js/test/images/transparent-black-grayscale-4bit.png deleted file mode 100644 index 39a7050..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/transparent-black-grayscale-4bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-grayscale-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/transparent-white-grayscale-16bit.png deleted file mode 100644 index 99bdeed..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-grayscale-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-palette-8bit.png b/skills/flight-finder/node_modules/png-js/test/images/transparent-white-palette-8bit.png deleted file mode 100644 index eacab7a..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-palette-8bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-rgb-16bit.png b/skills/flight-finder/node_modules/png-js/test/images/transparent-white-rgb-16bit.png deleted file mode 100644 index dd3168e..0000000 Binary files a/skills/flight-finder/node_modules/png-js/test/images/transparent-white-rgb-16bit.png and /dev/null differ diff --git a/skills/flight-finder/node_modules/png-js/test/imgdata.spec.js b/skills/flight-finder/node_modules/png-js/test/imgdata.spec.js deleted file mode 100644 index 09d55a2..0000000 --- a/skills/flight-finder/node_modules/png-js/test/imgdata.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -const PNGNode = require('../png-node'); -const fs = require('fs'); - -const files = fs.readdirSync('test/images'); - -function getImgData(Ctor, fileName) { - const image = new Ctor(fs.readFileSync(`test/images/${fileName}`)); - return image.imgData; -} - -describe('imgData', () => { - describe('node', () => { - test.each(files)('%s', fileName => { - expect(getImgData(PNGNode, fileName)).toMatchSnapshot(); - }); - }); - - describe('browser', () => { - test.each(files)('%s', fileName => { - expect(getImgData(PNG, fileName)).toMatchSnapshot(); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/png-js/test/metadata.spec.js b/skills/flight-finder/node_modules/png-js/test/metadata.spec.js deleted file mode 100644 index 48e84ec..0000000 --- a/skills/flight-finder/node_modules/png-js/test/metadata.spec.js +++ /dev/null @@ -1,24 +0,0 @@ -const PNGNode = require('../png-node'); -const fs = require('fs'); - -const files = fs.readdirSync('test/images'); - -function getMetaData(Ctor, fileName) { - const image = new Ctor(fs.readFileSync(`test/images/${fileName}`)); - const { imgData, data, ...metadata } = image; - return metadata; -} - -describe('metadata', () => { - describe('node', () => { - test.each(files)('%s', fileName => { - expect(getMetaData(PNGNode, fileName)).toMatchSnapshot(); - }); - }); - - describe('browser', () => { - test.each(files)('%s', fileName => { - expect(getMetaData(PNG, fileName)).toMatchSnapshot(); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/png-js/test/patch-canvas.js b/skills/flight-finder/node_modules/png-js/test/patch-canvas.js deleted file mode 100644 index 68b8c55..0000000 --- a/skills/flight-finder/node_modules/png-js/test/patch-canvas.js +++ /dev/null @@ -1 +0,0 @@ -HTMLCanvasElement.prototype.getContext = function() {}; diff --git a/skills/flight-finder/node_modules/png-js/test/pixels.spec.js b/skills/flight-finder/node_modules/png-js/test/pixels.spec.js deleted file mode 100644 index 7b034c5..0000000 --- a/skills/flight-finder/node_modules/png-js/test/pixels.spec.js +++ /dev/null @@ -1,29 +0,0 @@ -const PNGNode = require('../png-node'); -const fs = require('fs'); - -const files = fs.readdirSync('test/images'); - -async function getPixels(Ctor, fileName) { - const image = new Ctor(fs.readFileSync(`test/images/${fileName}`)); - return new Promise(resolve => { - Ctor === PNGNode - ? image.decodePixels(resolve) - : resolve(image.decodePixels()); - }); -} - -describe('pixels', () => { - describe('node', () => { - test.each(files)('%s', async fileName => { - const pixels = await getPixels(PNGNode, fileName); - expect(pixels).toMatchSnapshot(); - }); - }); - - describe('browser', () => { - test.each(files)('%s', async fileName => { - const pixels = await getPixels(PNG, fileName); - expect(pixels).toMatchSnapshot(); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/png-js/zlib.js b/skills/flight-finder/node_modules/png-js/zlib.js deleted file mode 100644 index 08aeea5..0000000 --- a/skills/flight-finder/node_modules/png-js/zlib.js +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Extracted from pdf.js - * https://github.com/andreasgal/pdf.js - * - * Copyright (c) 2011 Mozilla Foundation - * - * Contributors: Andreas Gal - * Chris G Jones - * Shaon Barman - * Vivien Nicolas <21@vingtetun.org> - * Justin D'Arcangelo - * Yury Delendik - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -window.DecodeStream = (function() { - function constructor() { - this.pos = 0; - this.bufferLength = 0; - this.eof = false; - this.buffer = null; - } - - constructor.prototype = { - ensureBuffer: function decodestream_ensureBuffer(requested) { - var buffer = this.buffer; - var current = buffer ? buffer.byteLength : 0; - if (requested < current) - return buffer; - var size = 512; - while (size < requested) - size <<= 1; - var buffer2 = new Uint8Array(size); - for (var i = 0; i < current; ++i) - buffer2[i] = buffer[i]; - return this.buffer = buffer2; - }, - getByte: function decodestream_getByte() { - var pos = this.pos; - while (this.bufferLength <= pos) { - if (this.eof) - return null; - this.readBlock(); - } - return this.buffer[this.pos++]; - }, - getBytes: function decodestream_getBytes(length) { - var pos = this.pos; - - if (length) { - this.ensureBuffer(pos + length); - var end = pos + length; - - while (!this.eof && this.bufferLength < end) - this.readBlock(); - - var bufEnd = this.bufferLength; - if (end > bufEnd) - end = bufEnd; - } else { - while (!this.eof) - this.readBlock(); - - var end = this.bufferLength; - } - - this.pos = end; - return this.buffer.subarray(pos, end); - }, - lookChar: function decodestream_lookChar() { - var pos = this.pos; - while (this.bufferLength <= pos) { - if (this.eof) - return null; - this.readBlock(); - } - return String.fromCharCode(this.buffer[this.pos]); - }, - getChar: function decodestream_getChar() { - var pos = this.pos; - while (this.bufferLength <= pos) { - if (this.eof) - return null; - this.readBlock(); - } - return String.fromCharCode(this.buffer[this.pos++]); - }, - makeSubStream: function decodestream_makeSubstream(start, length, dict) { - var end = start + length; - while (this.bufferLength <= end && !this.eof) - this.readBlock(); - return new Stream(this.buffer, start, length, dict); - }, - skip: function decodestream_skip(n) { - if (!n) - n = 1; - this.pos += n; - }, - reset: function decodestream_reset() { - this.pos = 0; - } - }; - - return constructor; -})(); - -window.FlateStream = (function() { - var codeLenCodeMap = new Uint32Array([ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 - ]); - - var lengthDecode = new Uint32Array([ - 0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, - 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, - 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, - 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102 - ]); - - var distDecode = new Uint32Array([ - 0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, - 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, - 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, - 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001 - ]); - - var fixedLitCodeTab = [new Uint32Array([ - 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, - 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, - 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, - 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, - 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, - 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, - 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, - 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, - 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, - 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, - 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, - 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, - 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, - 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, - 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, - 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, - 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, - 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, - 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, - 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, - 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, - 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, - 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, - 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, - 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, - 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, - 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, - 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, - 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, - 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, - 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, - 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, - 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, - 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, - 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, - 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, - 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, - 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, - 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, - 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, - 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, - 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, - 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, - 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, - 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, - 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, - 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, - 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, - 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, - 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, - 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, - 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, - 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, - 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, - 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, - 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, - 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, - 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, - 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, - 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, - 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, - 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, - 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, - 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff - ]), 9]; - - var fixedDistCodeTab = [new Uint32Array([ - 0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, - 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, - 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, - 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000 - ]), 5]; - - function error(e) { - throw new Error(e) - } - - function constructor(bytes) { - //var bytes = stream.getBytes(); - var bytesPos = 0; - - var cmf = bytes[bytesPos++]; - var flg = bytes[bytesPos++]; - if (cmf == -1 || flg == -1) - error('Invalid header in flate stream'); - if ((cmf & 0x0f) != 0x08) - error('Unknown compression method in flate stream'); - if ((((cmf << 8) + flg) % 31) != 0) - error('Bad FCHECK in flate stream'); - if (flg & 0x20) - error('FDICT bit set in flate stream'); - - this.bytes = bytes; - this.bytesPos = bytesPos; - - this.codeSize = 0; - this.codeBuf = 0; - - DecodeStream.call(this); - } - - constructor.prototype = Object.create(DecodeStream.prototype); - - constructor.prototype.getBits = function(bits) { - var codeSize = this.codeSize; - var codeBuf = this.codeBuf; - var bytes = this.bytes; - var bytesPos = this.bytesPos; - - var b; - while (codeSize < bits) { - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad encoding in flate stream'); - codeBuf |= b << codeSize; - codeSize += 8; - } - b = codeBuf & ((1 << bits) - 1); - this.codeBuf = codeBuf >> bits; - this.codeSize = codeSize -= bits; - this.bytesPos = bytesPos; - return b; - }; - - constructor.prototype.getCode = function(table) { - var codes = table[0]; - var maxLen = table[1]; - var codeSize = this.codeSize; - var codeBuf = this.codeBuf; - var bytes = this.bytes; - var bytesPos = this.bytesPos; - - while (codeSize < maxLen) { - var b; - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad encoding in flate stream'); - codeBuf |= (b << codeSize); - codeSize += 8; - } - var code = codes[codeBuf & ((1 << maxLen) - 1)]; - var codeLen = code >> 16; - var codeVal = code & 0xffff; - if (codeSize == 0 || codeSize < codeLen || codeLen == 0) - error('Bad encoding in flate stream'); - this.codeBuf = (codeBuf >> codeLen); - this.codeSize = (codeSize - codeLen); - this.bytesPos = bytesPos; - return codeVal; - }; - - constructor.prototype.generateHuffmanTable = function(lengths) { - var n = lengths.length; - - // find max code length - var maxLen = 0; - for (var i = 0; i < n; ++i) { - if (lengths[i] > maxLen) - maxLen = lengths[i]; - } - - // build the table - var size = 1 << maxLen; - var codes = new Uint32Array(size); - for (var len = 1, code = 0, skip = 2; - len <= maxLen; - ++len, code <<= 1, skip <<= 1) { - for (var val = 0; val < n; ++val) { - if (lengths[val] == len) { - // bit-reverse the code - var code2 = 0; - var t = code; - for (var i = 0; i < len; ++i) { - code2 = (code2 << 1) | (t & 1); - t >>= 1; - } - - // fill the table entries - for (var i = code2; i < size; i += skip) - codes[i] = (len << 16) | val; - - ++code; - } - } - } - - return [codes, maxLen]; - }; - - constructor.prototype.readBlock = function() { - function repeat(stream, array, len, offset, what) { - var repeat = stream.getBits(len) + offset; - while (repeat-- > 0) - array[i++] = what; - } - - // read block header - var hdr = this.getBits(3); - if (hdr & 1) - this.eof = true; - hdr >>= 1; - - if (hdr == 0) { // uncompressed block - var bytes = this.bytes; - var bytesPos = this.bytesPos; - var b; - - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad block header in flate stream'); - var blockLen = b; - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad block header in flate stream'); - blockLen |= (b << 8); - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad block header in flate stream'); - var check = b; - if (typeof (b = bytes[bytesPos++]) == 'undefined') - error('Bad block header in flate stream'); - check |= (b << 8); - if (check != (~blockLen & 0xffff)) - error('Bad uncompressed block length in flate stream'); - - this.codeBuf = 0; - this.codeSize = 0; - - var bufferLength = this.bufferLength; - var buffer = this.ensureBuffer(bufferLength + blockLen); - var end = bufferLength + blockLen; - this.bufferLength = end; - for (var n = bufferLength; n < end; ++n) { - if (typeof (b = bytes[bytesPos++]) == 'undefined') { - this.eof = true; - break; - } - buffer[n] = b; - } - this.bytesPos = bytesPos; - return; - } - - var litCodeTable; - var distCodeTable; - if (hdr == 1) { // compressed block, fixed codes - litCodeTable = fixedLitCodeTab; - distCodeTable = fixedDistCodeTab; - } else if (hdr == 2) { // compressed block, dynamic codes - var numLitCodes = this.getBits(5) + 257; - var numDistCodes = this.getBits(5) + 1; - var numCodeLenCodes = this.getBits(4) + 4; - - // build the code lengths code table - var codeLenCodeLengths = Array(codeLenCodeMap.length); - var i = 0; - while (i < numCodeLenCodes) - codeLenCodeLengths[codeLenCodeMap[i++]] = this.getBits(3); - var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); - - // build the literal and distance code tables - var len = 0; - var i = 0; - var codes = numLitCodes + numDistCodes; - var codeLengths = new Array(codes); - while (i < codes) { - var code = this.getCode(codeLenCodeTab); - if (code == 16) { - repeat(this, codeLengths, 2, 3, len); - } else if (code == 17) { - repeat(this, codeLengths, 3, 3, len = 0); - } else if (code == 18) { - repeat(this, codeLengths, 7, 11, len = 0); - } else { - codeLengths[i++] = len = code; - } - } - - litCodeTable = - this.generateHuffmanTable(codeLengths.slice(0, numLitCodes)); - distCodeTable = - this.generateHuffmanTable(codeLengths.slice(numLitCodes, codes)); - } else { - error('Unknown block type in flate stream'); - } - - var buffer = this.buffer; - var limit = buffer ? buffer.length : 0; - var pos = this.bufferLength; - while (true) { - var code1 = this.getCode(litCodeTable); - if (code1 < 256) { - if (pos + 1 >= limit) { - buffer = this.ensureBuffer(pos + 1); - limit = buffer.length; - } - buffer[pos++] = code1; - continue; - } - if (code1 == 256) { - this.bufferLength = pos; - return; - } - code1 -= 257; - code1 = lengthDecode[code1]; - var code2 = code1 >> 16; - if (code2 > 0) - code2 = this.getBits(code2); - var len = (code1 & 0xffff) + code2; - code1 = this.getCode(distCodeTable); - code1 = distDecode[code1]; - code2 = code1 >> 16; - if (code2 > 0) - code2 = this.getBits(code2); - var dist = (code1 & 0xffff) + code2; - if (pos + len >= limit) { - buffer = this.ensureBuffer(pos + len); - limit = buffer.length; - } - for (var k = 0; k < len; ++k, ++pos) - buffer[pos] = buffer[pos - dist]; - } - }; - - return constructor; -})(); \ No newline at end of file diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/LICENSE b/skills/flight-finder/node_modules/resolve-pkg-maps/LICENSE deleted file mode 100644 index 51e4fd8..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Hiroki Osame - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/README.md b/skills/flight-finder/node_modules/resolve-pkg-maps/README.md deleted file mode 100644 index 2469b1b..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/README.md +++ /dev/null @@ -1,216 +0,0 @@ -# resolve-pkg-maps - -Utils to resolve `package.json` subpath & conditional [`exports`](https://nodejs.org/api/packages.html#exports)/[`imports`](https://nodejs.org/api/packages.html#imports) in resolvers. - -Implements the [ESM resolution algorithm](https://nodejs.org/api/esm.html#resolver-algorithm-specification). Tested [against Node.js](/tests/) for accuracy. - -Support this project by ⭐️ starring and sharing it. [Follow me](https://github.com/privatenumber) to see what other cool projects I'm working on! ❤️ - -## Usage - -### Resolving `exports` - -_utils/package.json_ -```json5 -{ - // ... - "exports": { - "./reverse": { - "require": "./file.cjs", - "default": "./file.mjs" - } - }, - // ... -} -``` - -```ts -import { resolveExports } from 'resolve-pkg-maps' - -const [packageName, packageSubpath] = parseRequest('utils/reverse') - -const resolvedPaths: string[] = resolveExports( - getPackageJson(packageName).exports, - packageSubpath, - ['import', ...otherConditions] -) -// => ['./file.mjs'] -``` - -### Resolving `imports` - -_package.json_ -```json5 -{ - // ... - "imports": { - "#supports-color": { - "node": "./index.js", - "default": "./browser.js" - } - }, - // ... -} -``` - -```ts -import { resolveImports } from 'resolve-pkg-maps' - -const resolvedPaths: string[] = resolveImports( - getPackageJson('.').imports, - '#supports-color', - ['node', ...otherConditions] -) -// => ['./index.js'] -``` - -## API - -### resolveExports(exports, request, conditions) - -Returns: `string[]` - -Resolves the `request` based on `exports` and `conditions`. Returns an array of paths (e.g. in case a fallback array is matched). - -#### exports - -Type: -```ts -type Exports = PathOrMap | readonly PathOrMap[] - -type PathOrMap = string | PathConditionsMap - -type PathConditionsMap = { - [condition: string]: PathConditions | null -} -``` - -The [`exports` property](https://nodejs.org/api/packages.html#exports) value in `package.json`. - -#### request - -Type: `string` - -The package subpath to resolve. Assumes a normalized path is passed in (eg. [repeating slashes `//`](https://github.com/nodejs/node/issues/44316)). - -It _should not_ start with `/` or `./`. - -Example: if the full import path is `some-package/subpath/file`, the request is `subpath/file`. - - -#### conditions - -Type: `readonly string[]` - -An array of conditions to use when resolving the request. For reference, Node.js's default conditions are [`['node', 'import']`](https://nodejs.org/api/esm.html#:~:text=defaultConditions%20is%20the%20conditional%20environment%20name%20array%2C%20%5B%22node%22%2C%20%22import%22%5D.). - -The order of this array does not matter; the order of condition keys in the export map is what matters instead. - -Not all conditions in the array need to be met to resolve the request. It just needs enough to resolve to a path. - ---- - -### resolveImports(imports, request, conditions) - -Returns: `string[]` - -Resolves the `request` based on `imports` and `conditions`. Returns an array of paths (e.g. in case a fallback array is matched). - -#### imports - -Type: -```ts -type Imports = { - [condition: string]: PathOrMap | readonly PathOrMap[] | null -} - -type PathOrMap = string | Imports -``` - -The [`imports` property](https://nodejs.org/api/packages.html#imports) value in `package.json`. - - -#### request - -Type: `string` - -The request resolve. Assumes a normalized path is passed in (eg. [repeating slashes `//`](https://github.com/nodejs/node/issues/44316)). - -> **Note:** In Node.js, imports resolutions are limited to requests prefixed with `#`. However, this package does not enforce that requirement in case you want to add custom support for non-prefixed entries. - -#### conditions - -Type: `readonly string[]` - -An array of conditions to use when resolving the request. For reference, Node.js's default conditions are [`['node', 'import']`](https://nodejs.org/api/esm.html#:~:text=defaultConditions%20is%20the%20conditional%20environment%20name%20array%2C%20%5B%22node%22%2C%20%22import%22%5D.). - -The order of this array does not matter; the order of condition keys in the import map is what matters instead. - -Not all conditions in the array need to be met to resolve the request. It just needs enough to resolve to a path. - ---- - -### Errors - -#### `ERR_PACKAGE_PATH_NOT_EXPORTED` - - If the request is not exported by the export map - -#### `ERR_PACKAGE_IMPORT_NOT_DEFINED` - - If the request is not defined by the import map - -#### `ERR_INVALID_PACKAGE_CONFIG` - - - If an object contains properties that are both paths and conditions (e.g. start with and without `.`) - - If an object contains numeric properties - -#### `ERR_INVALID_PACKAGE_TARGET` - - If a resolved exports path is not a valid path (e.g. not relative or has protocol) - - If a resolved path includes `..` or `node_modules` - - If a resolved path is a type that cannot be parsed - -## FAQ - -### Why do the APIs return an array of paths? - -`exports`/`imports` supports passing in a [fallback array](https://github.com/jkrems/proposal-pkg-exports/#:~:text=Whenever%20there%20is,to%20new%20cases.) to provide fallback paths if the previous one is invalid: - -```json5 -{ - "exports": { - "./feature": [ - "./file.js", - "./fallback.js" - ] - } -} -``` - -Node.js's implementation [picks the first valid path (without attempting to resolve it)](https://github.com/nodejs/node/issues/44282#issuecomment-1220151715) and throws an error if it can't be resolved. Node.js's fallback array is designed for [forward compatibility with features](https://github.com/jkrems/proposal-pkg-exports/#:~:text=providing%20forwards%20compatiblitiy%20for%20new%20features) (e.g. protocols) that can be immediately/inexpensively validated: - -```json5 -{ - "exports": { - "./core-polyfill": ["std:core-module", "./core-polyfill.js"] - } -} -``` - -However, [Webpack](https://webpack.js.org/guides/package-exports/#alternatives) and [TypeScript](https://github.com/microsoft/TypeScript/blob/71e852922888337ef51a0e48416034a94a6c34d9/src/compiler/moduleSpecifiers.ts#L695) have deviated from this behavior and attempts to resolve the next path if a path cannot be resolved. - -By returning an array of matched paths instead of just the first one, the user can decide which behavior to adopt. - -### How is it different from [`resolve.exports`](https://github.com/lukeed/resolve.exports)? - -`resolve.exports` only resolves `exports`, whereas this package resolves both `exports` & `imports`. This comparison will only cover resolving `exports`. - -- Despite it's name, `resolve.exports` handles more than just `exports`. It takes in the entire `package.json` object to handle resolving `.` and [self-references](https://nodejs.org/api/packages.html#self-referencing-a-package-using-its-name). This package only accepts `exports`/`imports` maps from `package.json` and is scoped to only resolving what's defined in the maps. - -- `resolve.exports` accepts the full request (e.g. `foo/bar`), whereas this package only accepts the requested subpath (e.g. `bar`). - -- `resolve.exports` only returns the first result in a fallback array. This package returns an array of results for the user to decide how to handle it. - -- `resolve.exports` supports [subpath folder mapping](https://nodejs.org/docs/latest-v16.x/api/packages.html#subpath-folder-mappings) (deprecated in Node.js v16 & removed in v17) but seems to [have a bug](https://github.com/lukeed/resolve.exports/issues/7). This package does not support subpath folder mapping because Node.js has removed it in favor of using subpath patterns. - -- Neither resolvers rely on a file-system - -This package also addresses many of the bugs in `resolve.exports`, demonstrated in [this test](/tests/exports/compare-resolve.exports.ts). diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.cjs b/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.cjs deleted file mode 100755 index 6fe6ba8..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.cjs +++ /dev/null @@ -1 +0,0 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const d=r=>r!==null&&typeof r=="object",s=(r,t)=>Object.assign(new Error(`[${r}]: ${t}`),{code:r}),g="ERR_INVALID_PACKAGE_CONFIG",E="ERR_INVALID_PACKAGE_TARGET",I="ERR_PACKAGE_PATH_NOT_EXPORTED",P="ERR_PACKAGE_IMPORT_NOT_DEFINED",R=/^\d+$/,O=/^(\.{1,2}|node_modules)$/i,u=/\/|\\/;var h=(r=>(r.Export="exports",r.Import="imports",r))(h||{});const f=(r,t,n,o,c)=>{if(t==null)return[];if(typeof t=="string"){const[e,...i]=t.split(u);if(e===".."||i.some(l=>O.test(l)))throw s(E,`Invalid "${r}" target "${t}" defined in the package config`);return[c?t.replace(/\*/g,c):t]}if(Array.isArray(t))return t.flatMap(e=>f(r,e,n,o,c));if(d(t)){for(const e of Object.keys(t)){if(R.test(e))throw s(g,"Cannot contain numeric property keys");if(e==="default"||o.includes(e))return f(r,t[e],n,o,c)}return[]}throw s(E,`Invalid "${r}" target "${t}"`)},a="*",v=(r,t)=>{const n=r.indexOf(a),o=t.indexOf(a);return n===o?t.length>r.length:o>n};function A(r,t){if(!t.includes(a)&&r.hasOwnProperty(t))return[t];let n,o;for(const c of Object.keys(r))if(c.includes(a)){const[e,i,l]=c.split(a);if(l===void 0&&t.startsWith(e)&&t.endsWith(i)){const _=t.slice(e.length,-i.length||void 0);_&&(!n||v(n,c))&&(n=c,o=_)}}return[n,o]}const p=r=>Object.keys(r).reduce((t,n)=>{const o=n===""||n[0]!==".";if(t===void 0||t===o)return o;throw s(g,'"exports" cannot contain some keys starting with "." and some not')},void 0),w=/^\w+:/,m=(r,t,n)=>{if(!r)throw new Error('"exports" is required');t=t===""?".":`./${t}`,(typeof r=="string"||Array.isArray(r)||d(r)&&p(r))&&(r={".":r});const[o,c]=A(r,t),e=f(h.Export,r[o],t,n,c);if(e.length===0)throw s(I,t==="."?'No "exports" main defined':`Package subpath '${t}' is not defined by "exports"`);for(const i of e)if(!i.startsWith("./")&&!w.test(i))throw s(E,`Invalid "exports" target "${i}" defined in the package config`);return e},T=(r,t,n)=>{if(!r)throw new Error('"imports" is required');const[o,c]=A(r,t),e=f(h.Import,r[o],t,n,c);if(e.length===0)throw s(P,`Package import specifier "${t}" is not defined in package`);return e};exports.resolveExports=m,exports.resolveImports=T; diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.cts b/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.cts deleted file mode 100644 index fc84489..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.cts +++ /dev/null @@ -1,11 +0,0 @@ -type PathConditionsMap = { - [condition: string]: PathConditions | null; -}; -type PathOrMap = string | PathConditionsMap; -type PathConditions = PathOrMap | readonly PathOrMap[]; - -declare const resolveExports: (exports: PathConditions, request: string, conditions: readonly string[]) => string[]; - -declare const resolveImports: (imports: PathConditionsMap, request: string, conditions: readonly string[]) => string[]; - -export { PathConditions, PathConditionsMap, resolveExports, resolveImports }; diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.mts b/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.mts deleted file mode 100644 index fc84489..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.d.mts +++ /dev/null @@ -1,11 +0,0 @@ -type PathConditionsMap = { - [condition: string]: PathConditions | null; -}; -type PathOrMap = string | PathConditionsMap; -type PathConditions = PathOrMap | readonly PathOrMap[]; - -declare const resolveExports: (exports: PathConditions, request: string, conditions: readonly string[]) => string[]; - -declare const resolveImports: (imports: PathConditionsMap, request: string, conditions: readonly string[]) => string[]; - -export { PathConditions, PathConditionsMap, resolveExports, resolveImports }; diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.mjs b/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.mjs deleted file mode 100755 index d2a3be5..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/dist/index.mjs +++ /dev/null @@ -1 +0,0 @@ -const A=r=>r!==null&&typeof r=="object",a=(r,t)=>Object.assign(new Error(`[${r}]: ${t}`),{code:r}),_="ERR_INVALID_PACKAGE_CONFIG",E="ERR_INVALID_PACKAGE_TARGET",I="ERR_PACKAGE_PATH_NOT_EXPORTED",P="ERR_PACKAGE_IMPORT_NOT_DEFINED",R=/^\d+$/,O=/^(\.{1,2}|node_modules)$/i,w=/\/|\\/;var h=(r=>(r.Export="exports",r.Import="imports",r))(h||{});const f=(r,t,e,o,c)=>{if(t==null)return[];if(typeof t=="string"){const[n,...i]=t.split(w);if(n===".."||i.some(l=>O.test(l)))throw a(E,`Invalid "${r}" target "${t}" defined in the package config`);return[c?t.replace(/\*/g,c):t]}if(Array.isArray(t))return t.flatMap(n=>f(r,n,e,o,c));if(A(t)){for(const n of Object.keys(t)){if(R.test(n))throw a(_,"Cannot contain numeric property keys");if(n==="default"||o.includes(n))return f(r,t[n],e,o,c)}return[]}throw a(E,`Invalid "${r}" target "${t}"`)},s="*",m=(r,t)=>{const e=r.indexOf(s),o=t.indexOf(s);return e===o?t.length>r.length:o>e};function d(r,t){if(!t.includes(s)&&r.hasOwnProperty(t))return[t];let e,o;for(const c of Object.keys(r))if(c.includes(s)){const[n,i,l]=c.split(s);if(l===void 0&&t.startsWith(n)&&t.endsWith(i)){const g=t.slice(n.length,-i.length||void 0);g&&(!e||m(e,c))&&(e=c,o=g)}}return[e,o]}const p=r=>Object.keys(r).reduce((t,e)=>{const o=e===""||e[0]!==".";if(t===void 0||t===o)return o;throw a(_,'"exports" cannot contain some keys starting with "." and some not')},void 0),u=/^\w+:/,v=(r,t,e)=>{if(!r)throw new Error('"exports" is required');t=t===""?".":`./${t}`,(typeof r=="string"||Array.isArray(r)||A(r)&&p(r))&&(r={".":r});const[o,c]=d(r,t),n=f(h.Export,r[o],t,e,c);if(n.length===0)throw a(I,t==="."?'No "exports" main defined':`Package subpath '${t}' is not defined by "exports"`);for(const i of n)if(!i.startsWith("./")&&!u.test(i))throw a(E,`Invalid "exports" target "${i}" defined in the package config`);return n},T=(r,t,e)=>{if(!r)throw new Error('"imports" is required');const[o,c]=d(r,t),n=f(h.Import,r[o],t,e,c);if(n.length===0)throw a(P,`Package import specifier "${t}" is not defined in package`);return n};export{v as resolveExports,T as resolveImports}; diff --git a/skills/flight-finder/node_modules/resolve-pkg-maps/package.json b/skills/flight-finder/node_modules/resolve-pkg-maps/package.json deleted file mode 100644 index 720d984..0000000 --- a/skills/flight-finder/node_modules/resolve-pkg-maps/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "resolve-pkg-maps", - "version": "1.0.0", - "description": "Resolve package.json exports & imports maps", - "keywords": [ - "node.js", - "package.json", - "exports", - "imports" - ], - "license": "MIT", - "repository": "privatenumber/resolve-pkg-maps", - "funding": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1", - "author": { - "name": "Hiroki Osame", - "email": "hiroki.osame@gmail.com" - }, - "type": "module", - "files": [ - "dist" - ], - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.cts", - "exports": { - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - }, - "import": { - "types": "./dist/index.d.mts", - "default": "./dist/index.mjs" - } - }, - "imports": { - "#resolve-pkg-maps": { - "types": "./src/index.ts", - "development": "./src/index.ts", - "default": "./dist/index.mjs" - } - } -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/restructure/LICENSE b/skills/flight-finder/node_modules/restructure/LICENSE deleted file mode 100644 index 6291454..0000000 --- a/skills/flight-finder/node_modules/restructure/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2015-present Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/restructure/README.md b/skills/flight-finder/node_modules/restructure/README.md deleted file mode 100644 index 2203745..0000000 --- a/skills/flight-finder/node_modules/restructure/README.md +++ /dev/null @@ -1,300 +0,0 @@ -# Restructure - -[![Build Status](https://travis-ci.org/devongovett/restructure.svg?branch=master)](https://travis-ci.org/devongovett/restructure) -[![Coverage Status](https://coveralls.io/repos/devongovett/restructure/badge.png?branch=master)](https://coveralls.io/r/devongovett/restructure?branch=master) - -Restructure allows you to declaratively encode and decode binary data. -It supports a wide variety of types to enable you to express a multitude -of binary formats without writing any parsing code. - -Some of the supported features are C-like structures, versioned structures, -pointers, arrays of any type, strings of a large number of encodings, enums, -bitfields, and more. See the documentation below for more details. - -## Example - -This is just a small example of what Restructure can do. Check out the API documentation -below for more information. - -```javascript -import * as r from 'restructure'; - -let Person = new r.Struct({ - name: new r.String(r.uint8, 'utf8'), - age: r.uint8 -}); - -// decode a person from a buffer -let value = Person.fromBuffer(new Uint8Array([/* ... */])); // returns an object with the fields defined above - -// encode a person from an object -let buffer = Person.toBuffer({ - name: 'Devon', - age: 21 -}); -``` - -## API - -All of the following types support three standard methods: - -* `fromBuffer(buffer)` - decodes an instance of the type from the given Uint8Array -* `size(value)` - returns the amount of space the value would take if encoded -* `toBuffer(value)` - encodes the given value into a Uint8Array - -Restructure supports a wide variety of types, but if you need to write your own for -some custom use that cannot be represented by them, you can do so by just implementing -the above methods. Then you can use your type just as you would any other type, in structures -and whatnot. - -### Number Types - -The following built-in number types are available: - -```javascript -uint8, uint16, uint24, uint32, int8, int16, int24, int32, float, double, fixed16, fixed32 -``` - -Numbers are big-endian (network order) by default, but little-endian is supported, too: - -```javascript -uint16le, uint24le, uint32le, int16le, int24le, int32le, floatle, doublele, fixed16le, fixed32le -``` - -To avoid ambiguity, big-endian may be used explicitly: - -```javascript -uint16be, uint24be, uint32be, int16be, int24be, int32be, floatbe, doublebe, fixed16be, fixed32be -``` - -### Boolean - -Booleans are encoded as `0` or `1` using one of the above number types. - -```javascript -var bool = new r.Boolean(r.uint32); -``` - -### Reserved - -The `Reserved` type simply skips data in a structure, where there are reserved fields. -Encoding produces zeros. - -```javascript -// 10 reserved uint8s (default is 1) -var reserved = new r.Reserved(r.uint8, 10); -``` - -### Optional - -The `Optional` type only encodes or decodes when given condition is truthy. - -```javascript -// includes field -var optional = new r.Optional(r.uint8, true); - -// excludes field -var optional = new r.Optional(r.uint8, false); - -// determine whether field is to be included at runtime with a function -var optional = new r.Optional(r.uint8, function() { - return this.flags & 0x50; -}); -``` - -### Enum - -The `Enum` type maps a number to the value at that index in an array. - -```javascript -var color = new r.Enum(r.uint8, ['red', 'orange', 'yellow', 'green', 'blue', 'purple']); -``` - -### Bitfield - -The `Bitfield` type maps a number to an object with boolean keys mapping to each bit in that number, -as defined in an array. - -```javascript -var bitfield = new r.Bitfield(r.uint8, ['Jack', 'Kack', 'Lack', 'Mack', 'Nack', 'Oack', 'Pack', 'Quack']); -bitfield.decode(stream); - -var result = { - Jack: true, - Kack: false, - Lack: false, - Mack: true, - Nack: true, - Oack: false, - Pack: true, - Quack: true -}; - -bitfield.encode(stream, result); -``` - -### Buffer - -Extracts a slice of the buffer to a `Uint8Array`. The length can be a constant, or taken from -a previous field in the parent structure. - -```javascript -// fixed length -var buf = new r.Buffer(2); - -// length from parent structure -var struct = new r.Struct({ - bufLen: r.uint8, - buf: new r.Buffer('bufLen') -}); -``` - -### String - -A `String` maps a JavaScript string to and from binary encodings. The length, in bytes, can be a constant, -taken from a previous field in the parent structure, encoded using a number type immediately before the -string. - -Fully supported encodings include `'ascii'`, `'utf8'`, `'ucs2'`, `'utf16le'`, `'utf16be'`. Decoding is also possible -with any encoding supported by [TextDecoder](https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API/Encodings), -however encoding these is not supported. - -```javascript -// fixed length, ascii encoding by default -var str = new r.String(2); - -// length encoded as number before the string, utf8 encoding -var str = new r.String(r.uint8, 'utf8'); - -// length from parent structure -var struct = new r.Struct({ - len: r.uint8, - str: new r.String('len', 'utf16be') -}); - -// null-terminated string (also known as C string) -var str = new r.String(null, 'utf8'); -``` - -### Array - -An `Array` maps to and from a JavaScript array containing instances of a sub-type. The length can be a constant, -taken from a previous field in the parent structure, encoded using a number type immediately -before the string, or computed by a function. - -```javascript -// fixed length, containing numbers -var arr = new r.Array(r.uint16, 2); - -// length encoded as number before the array containing strings -var arr = new r.Array(new r.String(10), r.uint8); - -// length computed by a function -var arr = new r.Array(r.uint8, function() { return 5 }); - -// length from parent structure -var struct = new r.Struct({ - len: r.uint8, - arr: new r.Array(r.uint8, 'len') -}); - -// treat as amount of bytes instead (may be used in all the above scenarios) -var arr = new r.Array(r.uint16, 6, 'bytes'); -``` - -### LazyArray - -The `LazyArray` type extends from the `Array` type, and is useful for large arrays that you do not need to access sequentially. -It avoids decoding the entire array upfront, and instead only decodes and caches individual items as needed. It only works when -the elements inside the array have a fixed size. - -Instead of returning a JavaScript array, the `LazyArray` type returns a custom object that can be used to access the elements. - -```javascript -var arr = new r.LazyArray(r.uint16, 2048); -var res = arr.decode(stream); - -// get a single element -var el = res.get(2); - -// convert to a normal array (decode all elements) -var array = res.toArray(); -``` - -### Struct - -A `Struct` maps to and from JavaScript objects, containing keys of various previously discussed types. Sub structures, -arrays of structures, and pointers to other types (discussed below) are supported. - -```javascript -var Person = new r.Struct({ - name: new r.String(r.uint8, 'utf8'), - age: r.uint8 -}); -``` - -### VersionedStruct - -A `VersionedStruct` is a `Struct` that has multiple versions. The version is typically encoded at -the beginning of the structure, or as a field in a parent structure. There is an optional `header` -common to all versions, and separate fields listed for each version number. - -```javascript -// the version is read as a uint8 in this example -// you could also get the version from a key on the parent struct -var Person = new r.VersionedStruct(r.uint8, { - // optional header common to all versions - header: { - name: new r.String(r.uint8, 'utf8') - }, - 0: { - age: r.uint8 - }, - 1: { - hairColor: r.Enum(r.uint8, ['black', 'brown', 'blonde']) - } -}); -``` - -### Pointer - -Pointers map an address or offset encoded as a number, to a value encoded elsewhere in the buffer. -There are a few options you can use: `type`, `relativeTo`, `allowNull`, and `nullValue`. -The `type` option has these possible values: - -* `local` (default) - the encoded offset is relative to the start of the containing structure -* `immediate` - the encoded offset is relative to the position of the pointer itself -* `parent` - the encoded offset is relative to the parent structure of the immediate container -* `global` - the encoded offset is global to the start of the file - -The `relativeTo` option accepts a function callback that should return the field on the containing structure which the encoded offset is relative to. The callback is called with the context as parameter. -By default, pointers are relative to the start of the containing structure (`local`). - -The `allowNull` option lets you specify whether zero offsets are allowed or should produce `null`. This is -set to `true` by default. The `nullValue` option is related, and lets you override the encoded value that -represents `null`. By default, the `nullValue` is zero. - -The `lazy` option allows lazy decoding of the pointer's value by defining a getter on the parent object. -This only works when the pointer is contained within a Struct, but can be used to speed up decoding -quite a bit when not all of the data is needed right away. - -```javascript -var Address = new r.Struct({ - street: new r.String(r.uint8), - zip: new r.String(5) -}); - -var Person = new r.Struct({ - name: new r.String(r.uint8, 'utf8'), - age: r.uint8, - ptrStart: r.uint8, - address: new r.Pointer(r.uint8, Address) -}); -``` - -If the type of a pointer is set to 'void', it is not decoded and the computed address in the buffer -is simply returned. To encode a void pointer, create a `new r.VoidPointer(type, value)`. - -## License - -MIT diff --git a/skills/flight-finder/node_modules/restructure/dist/main.cjs b/skills/flight-finder/node_modules/restructure/dist/main.cjs deleted file mode 100644 index 50f9bd0..0000000 --- a/skills/flight-finder/node_modules/restructure/dist/main.cjs +++ /dev/null @@ -1,1019 +0,0 @@ - -function $parcel$exportWildcard(dest, source) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) { - return; - } - - Object.defineProperty(dest, key, { - enumerable: true, - get: function get() { - return source[key]; - } - }); - }); - - return dest; -} - -function $parcel$export(e, n, v, s) { - Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); -} - -$parcel$export(module.exports, "EncodeStream", () => $1ed46182c1410e1d$export$9b4f661deaa36c3e); -$parcel$export(module.exports, "DecodeStream", () => $8ae20583b93e4933$export$c18b354bac7948e9); -$parcel$export(module.exports, "Array", () => $8ea28a08eae2a116$export$c4be6576ca6fe4aa); -$parcel$export(module.exports, "LazyArray", () => $444f112d3cbc7e9f$export$5576c026028d4983); -$parcel$export(module.exports, "Bitfield", () => $3def237a34a226b5$export$96b43b8a49f688ea); -$parcel$export(module.exports, "Boolean", () => $8415e91bb83faf74$export$ff887cefee4d61ec); -$parcel$export(module.exports, "Buffer", () => $08d28604119af47e$export$7d22a0eea6656474); -$parcel$export(module.exports, "Enum", () => $070ce31ea947467f$export$deb82508dd66d288); -$parcel$export(module.exports, "Optional", () => $80703542fcfb6ff0$export$7acb7b24c478f9c6); -$parcel$export(module.exports, "Reserved", () => $f4fd49878232508a$export$da9b5fe187a9aa1); -$parcel$export(module.exports, "String", () => $d8705cd4022e7dcf$export$89b8e0fa65f6a914); -$parcel$export(module.exports, "Struct", () => $aa8b66bae6abe658$export$eabc71f011df675a); -$parcel$export(module.exports, "VersionedStruct", () => $fcb208a95f6d048b$export$95a8b60f4da7dec8); -// Node back-compat. -const $8ae20583b93e4933$var$ENCODING_MAPPING = { - utf16le: "utf-16le", - ucs2: "utf-16le", - utf16be: "utf-16be" -}; -class $8ae20583b93e4933$export$c18b354bac7948e9 { - constructor(buffer){ - this.buffer = buffer; - this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - this.pos = 0; - this.length = this.buffer.length; - } - readString(length, encoding = "ascii") { - encoding = $8ae20583b93e4933$var$ENCODING_MAPPING[encoding] || encoding; - let buf = this.readBuffer(length); - try { - let decoder = new TextDecoder(encoding); - return decoder.decode(buf); - } catch (err) { - return buf; - } - } - readBuffer(length) { - return this.buffer.slice(this.pos, this.pos += length); - } - readUInt24BE() { - return (this.readUInt16BE() << 8) + this.readUInt8(); - } - readUInt24LE() { - return this.readUInt16LE() + (this.readUInt8() << 16); - } - readInt24BE() { - return (this.readInt16BE() << 8) + this.readUInt8(); - } - readInt24LE() { - return this.readUInt16LE() + (this.readInt8() << 16); - } -} -$8ae20583b93e4933$export$c18b354bac7948e9.TYPES = { - UInt8: 1, - UInt16: 2, - UInt24: 3, - UInt32: 4, - Int8: 1, - Int16: 2, - Int24: 3, - Int32: 4, - Float: 4, - Double: 8 -}; -for (let key of Object.getOwnPropertyNames(DataView.prototype))if (key.slice(0, 3) === "get") { - let type = key.slice(3).replace("Ui", "UI"); - if (type === "Float32") type = "Float"; - else if (type === "Float64") type = "Double"; - let bytes = $8ae20583b93e4933$export$c18b354bac7948e9.TYPES[type]; - $8ae20583b93e4933$export$c18b354bac7948e9.prototype["read" + type + (bytes === 1 ? "" : "BE")] = function() { - const ret = this.view[key](this.pos, false); - this.pos += bytes; - return ret; - }; - if (bytes !== 1) $8ae20583b93e4933$export$c18b354bac7948e9.prototype["read" + type + "LE"] = function() { - const ret = this.view[key](this.pos, true); - this.pos += bytes; - return ret; - }; -} - - -const $1ed46182c1410e1d$var$textEncoder = new TextEncoder(); -const $1ed46182c1410e1d$var$isBigEndian = new Uint8Array(new Uint16Array([ - 0x1234 -]).buffer)[0] == 0x12; -class $1ed46182c1410e1d$export$9b4f661deaa36c3e { - constructor(buffer){ - this.buffer = buffer; - this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength); - this.pos = 0; - } - writeBuffer(buffer) { - this.buffer.set(buffer, this.pos); - this.pos += buffer.length; - } - writeString(string, encoding = "ascii") { - let buf; - switch(encoding){ - case "utf16le": - case "utf16-le": - case "ucs2": - buf = $1ed46182c1410e1d$var$stringToUtf16(string, $1ed46182c1410e1d$var$isBigEndian); - break; - case "utf16be": - case "utf16-be": - buf = $1ed46182c1410e1d$var$stringToUtf16(string, !$1ed46182c1410e1d$var$isBigEndian); - break; - case "utf8": - buf = $1ed46182c1410e1d$var$textEncoder.encode(string); - break; - case "ascii": - buf = $1ed46182c1410e1d$var$stringToAscii(string); - break; - default: - throw new Error(`Unsupported encoding: ${encoding}`); - } - this.writeBuffer(buf); - } - writeUInt24BE(val) { - this.buffer[this.pos++] = val >>> 16 & 0xff; - this.buffer[this.pos++] = val >>> 8 & 0xff; - this.buffer[this.pos++] = val & 0xff; - } - writeUInt24LE(val) { - this.buffer[this.pos++] = val & 0xff; - this.buffer[this.pos++] = val >>> 8 & 0xff; - this.buffer[this.pos++] = val >>> 16 & 0xff; - } - writeInt24BE(val) { - if (val >= 0) this.writeUInt24BE(val); - else this.writeUInt24BE(val + 0xffffff + 1); - } - writeInt24LE(val) { - if (val >= 0) this.writeUInt24LE(val); - else this.writeUInt24LE(val + 0xffffff + 1); - } - fill(val, length) { - if (length < this.buffer.length) { - this.buffer.fill(val, this.pos, this.pos + length); - this.pos += length; - } else { - const buf = new Uint8Array(length); - buf.fill(val); - this.writeBuffer(buf); - } - } -} -function $1ed46182c1410e1d$var$stringToUtf16(string, swap) { - let buf = new Uint16Array(string.length); - for(let i = 0; i < string.length; i++){ - let code = string.charCodeAt(i); - if (swap) code = code >> 8 | (code & 0xff) << 8; - buf[i] = code; - } - return new Uint8Array(buf.buffer); -} -function $1ed46182c1410e1d$var$stringToAscii(string) { - let buf = new Uint8Array(string.length); - for(let i = 0; i < string.length; i++)// Match node.js behavior - encoding allows 8-bit rather than 7-bit. - buf[i] = string.charCodeAt(i); - return buf; -} -for (let key of Object.getOwnPropertyNames(DataView.prototype))if (key.slice(0, 3) === "set") { - let type = key.slice(3).replace("Ui", "UI"); - if (type === "Float32") type = "Float"; - else if (type === "Float64") type = "Double"; - let bytes = (0, $8ae20583b93e4933$export$c18b354bac7948e9).TYPES[type]; - $1ed46182c1410e1d$export$9b4f661deaa36c3e.prototype["write" + type + (bytes === 1 ? "" : "BE")] = function(value) { - this.view[key](this.pos, value, false); - this.pos += bytes; - }; - if (bytes !== 1) $1ed46182c1410e1d$export$9b4f661deaa36c3e.prototype["write" + type + "LE"] = function(value) { - this.view[key](this.pos, value, true); - this.pos += bytes; - }; -} - - - - - -class $8d21f7fa58802901$export$ef88aa0d34c34520 { - fromBuffer(buffer) { - let stream = new (0, $8ae20583b93e4933$export$c18b354bac7948e9)(buffer); - return this.decode(stream); - } - toBuffer(value) { - let size = this.size(value); - let buffer = new Uint8Array(size); - let stream = new (0, $1ed46182c1410e1d$export$9b4f661deaa36c3e)(buffer); - this.encode(stream, value); - return buffer; - } -} - - -var $af65abf7bf65ac42$exports = {}; - -$parcel$export($af65abf7bf65ac42$exports, "Number", () => $af65abf7bf65ac42$export$fffa67e515d04022); -$parcel$export($af65abf7bf65ac42$exports, "uint8", () => $af65abf7bf65ac42$export$52e103c63c4e68cf); -$parcel$export($af65abf7bf65ac42$exports, "uint16be", () => $af65abf7bf65ac42$export$60dfe43c8297a8f8); -$parcel$export($af65abf7bf65ac42$exports, "uint16", () => $af65abf7bf65ac42$export$56bd24b5a3ee8456); -$parcel$export($af65abf7bf65ac42$exports, "uint16le", () => $af65abf7bf65ac42$export$b92d76f0ca6d1789); -$parcel$export($af65abf7bf65ac42$exports, "uint24be", () => $af65abf7bf65ac42$export$255f45171f96b50c); -$parcel$export($af65abf7bf65ac42$exports, "uint24", () => $af65abf7bf65ac42$export$1925298fbd719b21); -$parcel$export($af65abf7bf65ac42$exports, "uint24le", () => $af65abf7bf65ac42$export$758e1dafc8dc7271); -$parcel$export($af65abf7bf65ac42$exports, "uint32be", () => $af65abf7bf65ac42$export$74c16dba6c885532); -$parcel$export($af65abf7bf65ac42$exports, "uint32", () => $af65abf7bf65ac42$export$de9ffb9418dd7d0d); -$parcel$export($af65abf7bf65ac42$exports, "uint32le", () => $af65abf7bf65ac42$export$5f744bb30a534bc9); -$parcel$export($af65abf7bf65ac42$exports, "int8", () => $af65abf7bf65ac42$export$5984f25eab09961f); -$parcel$export($af65abf7bf65ac42$exports, "int16be", () => $af65abf7bf65ac42$export$198ae7d10d26a900); -$parcel$export($af65abf7bf65ac42$exports, "int16", () => $af65abf7bf65ac42$export$c35c15c7caeff2b6); -$parcel$export($af65abf7bf65ac42$exports, "int16le", () => $af65abf7bf65ac42$export$399cc4b7169e5aed); -$parcel$export($af65abf7bf65ac42$exports, "int24be", () => $af65abf7bf65ac42$export$3676d1f71eca2ec0); -$parcel$export($af65abf7bf65ac42$exports, "int24", () => $af65abf7bf65ac42$export$73f695d681ac61f9); -$parcel$export($af65abf7bf65ac42$exports, "int24le", () => $af65abf7bf65ac42$export$671f8672dbd40a4); -$parcel$export($af65abf7bf65ac42$exports, "int32be", () => $af65abf7bf65ac42$export$78a2ac3d09dd42d5); -$parcel$export($af65abf7bf65ac42$exports, "int32", () => $af65abf7bf65ac42$export$1d95835383bb05a); -$parcel$export($af65abf7bf65ac42$exports, "int32le", () => $af65abf7bf65ac42$export$5ec1f146e759329a); -$parcel$export($af65abf7bf65ac42$exports, "floatbe", () => $af65abf7bf65ac42$export$92b5c14c6abb5c97); -$parcel$export($af65abf7bf65ac42$exports, "float", () => $af65abf7bf65ac42$export$6b5cd3983e3ee5ab); -$parcel$export($af65abf7bf65ac42$exports, "floatle", () => $af65abf7bf65ac42$export$6d20592bc4cb19d9); -$parcel$export($af65abf7bf65ac42$exports, "doublebe", () => $af65abf7bf65ac42$export$e50b9e97e4d43631); -$parcel$export($af65abf7bf65ac42$exports, "double", () => $af65abf7bf65ac42$export$7b3cbda67be88f5f); -$parcel$export($af65abf7bf65ac42$exports, "doublele", () => $af65abf7bf65ac42$export$6f53315aa512b751); -$parcel$export($af65abf7bf65ac42$exports, "Fixed", () => $af65abf7bf65ac42$export$13475bbd2a37a9b4); -$parcel$export($af65abf7bf65ac42$exports, "fixed16be", () => $af65abf7bf65ac42$export$f87b441e6bd90278); -$parcel$export($af65abf7bf65ac42$exports, "fixed16", () => $af65abf7bf65ac42$export$a3abada75ef55921); -$parcel$export($af65abf7bf65ac42$exports, "fixed16le", () => $af65abf7bf65ac42$export$3752a2886837dc22); -$parcel$export($af65abf7bf65ac42$exports, "fixed32be", () => $af65abf7bf65ac42$export$dd71d8d9bc792632); -$parcel$export($af65abf7bf65ac42$exports, "fixed32", () => $af65abf7bf65ac42$export$e913265d48471f2d); -$parcel$export($af65abf7bf65ac42$exports, "fixed32le", () => $af65abf7bf65ac42$export$7fc47db6a5fc8223); - - -class $af65abf7bf65ac42$export$fffa67e515d04022 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, endian = "BE"){ - super(); - this.type = type; - this.endian = endian; - this.fn = this.type; - if (this.type[this.type.length - 1] !== "8") this.fn += this.endian; - } - size() { - return (0, $8ae20583b93e4933$export$c18b354bac7948e9).TYPES[this.type]; - } - decode(stream) { - return stream[`read${this.fn}`](); - } - encode(stream, val) { - return stream[`write${this.fn}`](val); - } -} -const $af65abf7bf65ac42$export$52e103c63c4e68cf = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt8"); -const $af65abf7bf65ac42$export$60dfe43c8297a8f8 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt16", "BE"); -const $af65abf7bf65ac42$export$56bd24b5a3ee8456 = $af65abf7bf65ac42$export$60dfe43c8297a8f8; -const $af65abf7bf65ac42$export$b92d76f0ca6d1789 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt16", "LE"); -const $af65abf7bf65ac42$export$255f45171f96b50c = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt24", "BE"); -const $af65abf7bf65ac42$export$1925298fbd719b21 = $af65abf7bf65ac42$export$255f45171f96b50c; -const $af65abf7bf65ac42$export$758e1dafc8dc7271 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt24", "LE"); -const $af65abf7bf65ac42$export$74c16dba6c885532 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt32", "BE"); -const $af65abf7bf65ac42$export$de9ffb9418dd7d0d = $af65abf7bf65ac42$export$74c16dba6c885532; -const $af65abf7bf65ac42$export$5f744bb30a534bc9 = new $af65abf7bf65ac42$export$fffa67e515d04022("UInt32", "LE"); -const $af65abf7bf65ac42$export$5984f25eab09961f = new $af65abf7bf65ac42$export$fffa67e515d04022("Int8"); -const $af65abf7bf65ac42$export$198ae7d10d26a900 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int16", "BE"); -const $af65abf7bf65ac42$export$c35c15c7caeff2b6 = $af65abf7bf65ac42$export$198ae7d10d26a900; -const $af65abf7bf65ac42$export$399cc4b7169e5aed = new $af65abf7bf65ac42$export$fffa67e515d04022("Int16", "LE"); -const $af65abf7bf65ac42$export$3676d1f71eca2ec0 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int24", "BE"); -const $af65abf7bf65ac42$export$73f695d681ac61f9 = $af65abf7bf65ac42$export$3676d1f71eca2ec0; -const $af65abf7bf65ac42$export$671f8672dbd40a4 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int24", "LE"); -const $af65abf7bf65ac42$export$78a2ac3d09dd42d5 = new $af65abf7bf65ac42$export$fffa67e515d04022("Int32", "BE"); -const $af65abf7bf65ac42$export$1d95835383bb05a = $af65abf7bf65ac42$export$78a2ac3d09dd42d5; -const $af65abf7bf65ac42$export$5ec1f146e759329a = new $af65abf7bf65ac42$export$fffa67e515d04022("Int32", "LE"); -const $af65abf7bf65ac42$export$92b5c14c6abb5c97 = new $af65abf7bf65ac42$export$fffa67e515d04022("Float", "BE"); -const $af65abf7bf65ac42$export$6b5cd3983e3ee5ab = $af65abf7bf65ac42$export$92b5c14c6abb5c97; -const $af65abf7bf65ac42$export$6d20592bc4cb19d9 = new $af65abf7bf65ac42$export$fffa67e515d04022("Float", "LE"); -const $af65abf7bf65ac42$export$e50b9e97e4d43631 = new $af65abf7bf65ac42$export$fffa67e515d04022("Double", "BE"); -const $af65abf7bf65ac42$export$7b3cbda67be88f5f = $af65abf7bf65ac42$export$e50b9e97e4d43631; -const $af65abf7bf65ac42$export$6f53315aa512b751 = new $af65abf7bf65ac42$export$fffa67e515d04022("Double", "LE"); -class $af65abf7bf65ac42$export$13475bbd2a37a9b4 extends $af65abf7bf65ac42$export$fffa67e515d04022 { - constructor(size, endian, fracBits = size >> 1){ - super(`Int${size}`, endian); - this._point = 1 << fracBits; - } - decode(stream) { - return super.decode(stream) / this._point; - } - encode(stream, val) { - return super.encode(stream, val * this._point | 0); - } -} -const $af65abf7bf65ac42$export$f87b441e6bd90278 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(16, "BE"); -const $af65abf7bf65ac42$export$a3abada75ef55921 = $af65abf7bf65ac42$export$f87b441e6bd90278; -const $af65abf7bf65ac42$export$3752a2886837dc22 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(16, "LE"); -const $af65abf7bf65ac42$export$dd71d8d9bc792632 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(32, "BE"); -const $af65abf7bf65ac42$export$e913265d48471f2d = $af65abf7bf65ac42$export$dd71d8d9bc792632; -const $af65abf7bf65ac42$export$7fc47db6a5fc8223 = new $af65abf7bf65ac42$export$13475bbd2a37a9b4(32, "LE"); - - -var $4559ecf940edc78d$exports = {}; - -$parcel$export($4559ecf940edc78d$exports, "resolveLength", () => $4559ecf940edc78d$export$83b6dc3503c1fda6); -$parcel$export($4559ecf940edc78d$exports, "PropertyDescriptor", () => $4559ecf940edc78d$export$41705b1d644e0f14); - -function $4559ecf940edc78d$export$83b6dc3503c1fda6(length, stream, parent) { - let res; - if (typeof length === "number") res = length; - else if (typeof length === "function") res = length.call(parent, parent); - else if (parent && typeof length === "string") res = parent[length]; - else if (stream && length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) res = length.decode(stream); - if (isNaN(res)) throw new Error("Not a fixed size"); - return res; -} -class $4559ecf940edc78d$export$41705b1d644e0f14 { - constructor(opts = {}){ - this.enumerable = true; - this.configurable = true; - for(let key in opts){ - const val = opts[key]; - this[key] = val; - } - } -} - - -class $8ea28a08eae2a116$export$c4be6576ca6fe4aa extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, length, lengthType = "count"){ - super(); - this.type = type; - this.length = length; - this.lengthType = lengthType; - } - decode(stream, parent) { - let length; - const { pos: pos } = stream; - const res = []; - let ctx = parent; - if (this.length != null) length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - // define hidden properties - Object.defineProperties(res, { - parent: { - value: parent - }, - _startOffset: { - value: pos - }, - _currentOffset: { - value: 0, - writable: true - }, - _length: { - value: length - } - }); - ctx = res; - } - if (length == null || this.lengthType === "bytes") { - const target = length != null ? stream.pos + length : (parent != null ? parent._length : undefined) ? parent._startOffset + parent._length : stream.length; - while(stream.pos < target)res.push(this.type.decode(stream, ctx)); - } else for(let i = 0, end = length; i < end; i++)res.push(this.type.decode(stream, ctx)); - return res; - } - size(array, ctx, includePointers = true) { - if (!array) return this.type.size(null, ctx) * $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, ctx); - let size = 0; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - size += this.length.size(); - ctx = { - parent: ctx, - pointerSize: 0 - }; - } - for (let item of array)size += this.type.size(item, ctx); - if (ctx && includePointers && this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) size += ctx.pointerSize; - return size; - } - encode(stream, array, parent) { - let ctx = parent; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent - }; - ctx.pointerOffset = stream.pos + this.size(array, ctx, false); - this.length.encode(stream, array.length); - } - for (let item of array)this.type.encode(stream, item, ctx); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) { - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } - } -} - - - - - -class $444f112d3cbc7e9f$export$5576c026028d4983 extends (0, $8ea28a08eae2a116$export$c4be6576ca6fe4aa) { - decode(stream, parent) { - const { pos: pos } = stream; - const length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) parent = { - parent: parent, - _startOffset: pos, - _currentOffset: 0, - _length: length - }; - const res = new $444f112d3cbc7e9f$var$LazyArrayValue(this.type, length, stream, parent); - stream.pos += length * this.type.size(null, parent); - return res; - } - size(val, ctx) { - if (val instanceof $444f112d3cbc7e9f$var$LazyArrayValue) val = val.toArray(); - return super.size(val, ctx); - } - encode(stream, val, ctx) { - if (val instanceof $444f112d3cbc7e9f$var$LazyArrayValue) val = val.toArray(); - return super.encode(stream, val, ctx); - } -} -class $444f112d3cbc7e9f$var$LazyArrayValue { - constructor(type, length, stream, ctx){ - this.type = type; - this.length = length; - this.stream = stream; - this.ctx = ctx; - this.base = this.stream.pos; - this.items = []; - } - get(index) { - if (index < 0 || index >= this.length) return undefined; - if (this.items[index] == null) { - const { pos: pos } = this.stream; - this.stream.pos = this.base + this.type.size(null, this.ctx) * index; - this.items[index] = this.type.decode(this.stream, this.ctx); - this.stream.pos = pos; - } - return this.items[index]; - } - toArray() { - const result = []; - for(let i = 0, end = this.length; i < end; i++)result.push(this.get(i)); - return result; - } -} - - - -class $3def237a34a226b5$export$96b43b8a49f688ea extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, flags = []){ - super(); - this.type = type; - this.flags = flags; - } - decode(stream) { - const val = this.type.decode(stream); - const res = {}; - for(let i = 0; i < this.flags.length; i++){ - const flag = this.flags[i]; - if (flag != null) res[flag] = !!(val & 1 << i); - } - return res; - } - size() { - return this.type.size(); - } - encode(stream, keys) { - let val = 0; - for(let i = 0; i < this.flags.length; i++){ - const flag = this.flags[i]; - if (flag != null) { - if (keys[flag]) val |= 1 << i; - } - } - return this.type.encode(stream, val); - } -} - - - -class $8415e91bb83faf74$export$ff887cefee4d61ec extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type){ - super(); - this.type = type; - } - decode(stream, parent) { - return !!this.type.decode(stream, parent); - } - size(val, parent) { - return this.type.size(val, parent); - } - encode(stream, val, parent) { - return this.type.encode(stream, +val, parent); - } -} - - - - - -class $08d28604119af47e$export$7d22a0eea6656474 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(length){ - super(); - this.length = length; - } - decode(stream, parent) { - const length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - return stream.readBuffer(length); - } - size(val, parent) { - if (!val) return $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, parent); - let len = val.length; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) len += this.length.size(); - return len; - } - encode(stream, buf, parent) { - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) this.length.encode(stream, buf.length); - return stream.writeBuffer(buf); - } -} - - - -class $070ce31ea947467f$export$deb82508dd66d288 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, options = []){ - super(); - this.type = type; - this.options = options; - } - decode(stream) { - const index = this.type.decode(stream); - return this.options[index] || index; - } - size() { - return this.type.size(); - } - encode(stream, val) { - const index = this.options.indexOf(val); - if (index === -1) throw new Error(`Unknown option in enum: ${val}`); - return this.type.encode(stream, index); - } -} - - - -class $80703542fcfb6ff0$export$7acb7b24c478f9c6 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, condition = true){ - super(); - this.type = type; - this.condition = condition; - } - decode(stream, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.decode(stream, parent); - } - size(val, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.size(val, parent); - else return 0; - } - encode(stream, val, parent) { - let { condition: condition } = this; - if (typeof condition === "function") condition = condition.call(parent, parent); - if (condition) return this.type.encode(stream, val, parent); - } -} - - - - -class $f4fd49878232508a$export$da9b5fe187a9aa1 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(type, count = 1){ - super(); - this.type = type; - this.count = count; - } - decode(stream, parent) { - stream.pos += this.size(null, parent); - return undefined; - } - size(data, parent) { - const count = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.count, null, parent); - return this.type.size() * count; - } - encode(stream, val, parent) { - return stream.fill(0, this.size(val, parent)); - } -} - - - - - -class $d8705cd4022e7dcf$export$89b8e0fa65f6a914 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(length, encoding = "ascii"){ - super(); - this.length = length; - this.encoding = encoding; - } - decode(stream, parent) { - let length, pos; - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent, parent) || "ascii"; - let width = $d8705cd4022e7dcf$var$encodingWidth(encoding); - if (this.length != null) length = $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, stream, parent); - else { - let buffer; - ({ buffer: buffer, length: length, pos: pos } = stream); - while(pos < length - width + 1 && (buffer[pos] !== 0x00 || width === 2 && buffer[pos + 1] !== 0x00))pos += width; - length = pos - stream.pos; - } - const string = stream.readString(length, encoding); - if (this.length == null && stream.pos < stream.length) stream.pos += width; - return string; - } - size(val, parent) { - // Use the defined value if no value was given - if (val === undefined || val === null) return $4559ecf940edc78d$export$83b6dc3503c1fda6(this.length, null, parent); - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || "ascii"; - if (encoding === "utf16be") encoding = "utf16le"; - let size = $d8705cd4022e7dcf$var$byteLength(val, encoding); - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) size += this.length.size(); - if (this.length == null) size += $d8705cd4022e7dcf$var$encodingWidth(encoding); - return size; - } - encode(stream, val, parent) { - let { encoding: encoding } = this; - if (typeof encoding === "function") encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || "ascii"; - if (this.length instanceof (0, $af65abf7bf65ac42$export$fffa67e515d04022)) this.length.encode(stream, $d8705cd4022e7dcf$var$byteLength(val, encoding)); - stream.writeString(val, encoding); - if (this.length == null) return $d8705cd4022e7dcf$var$encodingWidth(encoding) == 2 ? stream.writeUInt16LE(0x0000) : stream.writeUInt8(0x00); - } -} -function $d8705cd4022e7dcf$var$encodingWidth(encoding) { - switch(encoding){ - case "ascii": - case "utf8": - return 1; - case "utf16le": - case "utf16-le": - case "utf-16be": - case "utf-16le": - case "utf16be": - case "utf16-be": - case "ucs2": - return 2; - default: - //TODO: assume all other encodings are 1-byters - //throw new Error('Unknown encoding ' + encoding); - return 1; - } -} -function $d8705cd4022e7dcf$var$byteLength(string, encoding) { - switch(encoding){ - case "ascii": - return string.length; - case "utf8": - let len = 0; - for(let i = 0; i < string.length; i++){ - let c = string.charCodeAt(i); - if (c >= 0xd800 && c <= 0xdbff && i < string.length - 1) { - let c2 = string.charCodeAt(++i); - if ((c2 & 0xfc00) === 0xdc00) c = ((c & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000; - else // unmatched surrogate. - i--; - } - if ((c & 0xffffff80) === 0) len++; - else if ((c & 0xfffff800) === 0) len += 2; - else if ((c & 0xffff0000) === 0) len += 3; - else if ((c & 0xffe00000) === 0) len += 4; - } - return len; - case "utf16le": - case "utf16-le": - case "utf16be": - case "utf16-be": - case "ucs2": - return string.length * 2; - default: - throw new Error("Unknown encoding " + encoding); - } -} - - - - -class $aa8b66bae6abe658$export$eabc71f011df675a extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(fields = {}){ - super(); - this.fields = fields; - } - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - this._parseFields(stream, res, this.fields); - if (this.process != null) this.process.call(res, stream); - return res; - } - _setup(stream, parent, length) { - const res = {}; - // define hidden properties - Object.defineProperties(res, { - parent: { - value: parent - }, - _startOffset: { - value: stream.pos - }, - _currentOffset: { - value: 0, - writable: true - }, - _length: { - value: length - } - }); - return res; - } - _parseFields(stream, res, fields) { - for(let key in fields){ - var val; - const type = fields[key]; - if (typeof type === "function") val = type.call(res, res); - else val = type.decode(stream, res); - if (val !== undefined) { - if (val instanceof $4559ecf940edc78d$export$41705b1d644e0f14) Object.defineProperty(res, key, val); - else res[key] = val; - } - res._currentOffset = stream.pos - res._startOffset; - } - } - size(val, parent, includePointers = true) { - if (val == null) val = {}; - const ctx = { - parent: parent, - val: val, - pointerSize: 0 - }; - if (this.preEncode != null) this.preEncode.call(val); - let size = 0; - for(let key in this.fields){ - const type = this.fields[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - if (includePointers) size += ctx.pointerSize; - return size; - } - encode(stream, val, parent) { - let type; - if (this.preEncode != null) this.preEncode.call(val, stream); - const ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: val, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - for(let key in this.fields){ - type = this.fields[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} - - - -const $fcb208a95f6d048b$var$getPath = (object, pathArray)=>{ - return pathArray.reduce((prevObj, key)=>prevObj && prevObj[key], object); -}; -class $fcb208a95f6d048b$export$95a8b60f4da7dec8 extends (0, $aa8b66bae6abe658$export$eabc71f011df675a) { - constructor(type, versions = {}){ - super(); - this.type = type; - this.versions = versions; - if (typeof type === "string") this.versionPath = type.split("."); - } - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - if (typeof this.type === "string") res.version = $fcb208a95f6d048b$var$getPath(parent, this.versionPath); - else res.version = this.type.decode(stream); - if (this.versions.header) this._parseFields(stream, res, this.versions.header); - const fields = this.versions[res.version]; - if (fields == null) throw new Error(`Unknown version ${res.version}`); - if (fields instanceof $fcb208a95f6d048b$export$95a8b60f4da7dec8) return fields.decode(stream, parent); - this._parseFields(stream, res, fields); - if (this.process != null) this.process.call(res, stream); - return res; - } - size(val, parent, includePointers = true) { - let key, type; - if (!val) throw new Error("Not a fixed size"); - if (this.preEncode != null) this.preEncode.call(val); - const ctx = { - parent: parent, - val: val, - pointerSize: 0 - }; - let size = 0; - if (typeof this.type !== "string") size += this.type.size(val.version, ctx); - if (this.versions.header) for(key in this.versions.header){ - type = this.versions.header[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - const fields = this.versions[val.version]; - if (fields == null) throw new Error(`Unknown version ${val.version}`); - for(key in fields){ - type = fields[key]; - if (type.size != null) size += type.size(val[key], ctx); - } - if (includePointers) size += ctx.pointerSize; - return size; - } - encode(stream, val, parent) { - let key, type; - if (this.preEncode != null) this.preEncode.call(val, stream); - const ctx = { - pointers: [], - startOffset: stream.pos, - parent: parent, - val: val, - pointerSize: 0 - }; - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - if (typeof this.type !== "string") this.type.encode(stream, val.version); - if (this.versions.header) for(key in this.versions.header){ - type = this.versions.header[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - const fields = this.versions[val.version]; - for(key in fields){ - type = fields[key]; - if (type.encode != null) type.encode(stream, val[key], ctx); - } - let i = 0; - while(i < ctx.pointers.length){ - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} - - - - -var $92184962f8f0d5e2$exports = {}; - -$parcel$export($92184962f8f0d5e2$exports, "Pointer", () => $92184962f8f0d5e2$export$b56007f12edf0c17); -$parcel$export($92184962f8f0d5e2$exports, "VoidPointer", () => $92184962f8f0d5e2$export$df5cb1f3d04f5a0f); - - -class $92184962f8f0d5e2$export$b56007f12edf0c17 extends (0, $8d21f7fa58802901$export$ef88aa0d34c34520) { - constructor(offsetType, type, options = {}){ - super(); - this.offsetType = offsetType; - this.type = type; - this.options = options; - if (this.type === "void") this.type = null; - if (this.options.type == null) this.options.type = "local"; - if (this.options.allowNull == null) this.options.allowNull = true; - if (this.options.nullValue == null) this.options.nullValue = 0; - if (this.options.lazy == null) this.options.lazy = false; - if (this.options.relativeTo) { - if (typeof this.options.relativeTo !== "function") throw new Error("relativeTo option must be a function"); - this.relativeToGetter = options.relativeTo; - } - } - decode(stream, ctx) { - const offset = this.offsetType.decode(stream, ctx); - // handle NULL pointers - if (offset === this.options.nullValue && this.options.allowNull) return null; - let relative; - switch(this.options.type){ - case "local": - relative = ctx._startOffset; - break; - case "immediate": - relative = stream.pos - this.offsetType.size(); - break; - case "parent": - relative = ctx.parent._startOffset; - break; - default: - var c = ctx; - while(c.parent)c = c.parent; - relative = c._startOffset || 0; - } - if (this.options.relativeTo) relative += this.relativeToGetter(ctx); - const ptr = offset + relative; - if (this.type != null) { - let val = null; - const decodeValue = ()=>{ - if (val != null) return val; - const { pos: pos } = stream; - stream.pos = ptr; - val = this.type.decode(stream, ctx); - stream.pos = pos; - return val; - }; - // If this is a lazy pointer, define a getter to decode only when needed. - // This obviously only works when the pointer is contained by a Struct. - if (this.options.lazy) return new $4559ecf940edc78d$export$41705b1d644e0f14({ - get: decodeValue - }); - return decodeValue(); - } else return ptr; - } - size(val, ctx) { - const parent = ctx; - switch(this.options.type){ - case "local": - case "immediate": - break; - case "parent": - ctx = ctx.parent; - break; - default: - while(ctx.parent)ctx = ctx.parent; - } - let { type: type } = this; - if (type == null) { - if (!(val instanceof $92184962f8f0d5e2$export$df5cb1f3d04f5a0f)) throw new Error("Must be a VoidPointer"); - ({ type: type } = val); - val = val.value; - } - if (val && ctx) { - // Must be written as two separate lines rather than += in case `type.size` mutates ctx.pointerSize. - let size = type.size(val, parent); - ctx.pointerSize += size; - } - return this.offsetType.size(); - } - encode(stream, val, ctx) { - let relative; - const parent = ctx; - if (val == null) { - this.offsetType.encode(stream, this.options.nullValue); - return; - } - switch(this.options.type){ - case "local": - relative = ctx.startOffset; - break; - case "immediate": - relative = stream.pos + this.offsetType.size(val, parent); - break; - case "parent": - ctx = ctx.parent; - relative = ctx.startOffset; - break; - default: - relative = 0; - while(ctx.parent)ctx = ctx.parent; - } - if (this.options.relativeTo) relative += this.relativeToGetter(parent.val); - this.offsetType.encode(stream, ctx.pointerOffset - relative); - let { type: type } = this; - if (type == null) { - if (!(val instanceof $92184962f8f0d5e2$export$df5cb1f3d04f5a0f)) throw new Error("Must be a VoidPointer"); - ({ type: type } = val); - val = val.value; - } - ctx.pointers.push({ - type: type, - val: val, - parent: parent - }); - return ctx.pointerOffset += type.size(val, parent); - } -} -class $92184962f8f0d5e2$export$df5cb1f3d04f5a0f { - constructor(type, value){ - this.type = type; - this.value = value; - } -} - - -$parcel$exportWildcard(module.exports, $4559ecf940edc78d$exports); -$parcel$exportWildcard(module.exports, $af65abf7bf65ac42$exports); -$parcel$exportWildcard(module.exports, $92184962f8f0d5e2$exports); - - -//# sourceMappingURL=main.cjs.map diff --git a/skills/flight-finder/node_modules/restructure/dist/main.cjs.map b/skills/flight-finder/node_modules/restructure/dist/main.cjs.map deleted file mode 100644 index 38079ce..0000000 --- a/skills/flight-finder/node_modules/restructure/dist/main.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"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","sources":["index.js","src/EncodeStream.js","src/DecodeStream.js","src/Array.js","src/Base.js","src/Number.js","src/utils.js","src/LazyArray.js","src/Bitfield.js","src/Boolean.js","src/Buffer.js","src/Enum.js","src/Optional.js","src/Reserved.js","src/String.js","src/Struct.js","src/VersionedStruct.js","src/Pointer.js"],"sourcesContent":["export {EncodeStream} from './src/EncodeStream.js';\nexport {DecodeStream} from './src/DecodeStream.js';\nexport {Array} from './src/Array.js';\nexport {LazyArray} from './src/LazyArray.js';\nexport {Bitfield} from './src/Bitfield.js';\nexport {Boolean} from './src/Boolean.js';\nexport {Buffer} from './src/Buffer.js';\nexport {Enum} from './src/Enum.js';\nexport {Optional} from './src/Optional.js';\nexport {Reserved} from './src/Reserved.js';\nexport {String} from './src/String.js';\nexport {Struct} from './src/Struct.js';\nexport {VersionedStruct} from './src/VersionedStruct.js';\n\nexport * from './src/utils.js';\nexport * from './src/Number.js';\nexport * from './src/Pointer.js';\n","import {DecodeStream} from './DecodeStream.js';\n\nconst textEncoder = new TextEncoder();\nconst isBigEndian = new Uint8Array(new Uint16Array([0x1234]).buffer)[0] == 0x12;\n\nexport class EncodeStream {\n constructor(buffer) {\n this.buffer = buffer;\n this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n this.pos = 0;\n }\n\n writeBuffer(buffer) {\n this.buffer.set(buffer, this.pos);\n this.pos += buffer.length;\n }\n\n writeString(string, encoding = 'ascii') {\n let buf;\n switch (encoding) {\n case 'utf16le':\n case 'utf16-le':\n case 'ucs2': // node treats this the same as utf16.\n buf = stringToUtf16(string, isBigEndian);\n break;\n\n case 'utf16be':\n case 'utf16-be':\n buf = stringToUtf16(string, !isBigEndian);\n break;\n\n case 'utf8':\n buf = textEncoder.encode(string);\n break;\n\n case 'ascii':\n buf = stringToAscii(string);\n break;\n\n default:\n throw new Error(`Unsupported encoding: ${encoding}`);\n }\n\n this.writeBuffer(buf);\n }\n\n writeUInt24BE(val) {\n this.buffer[this.pos++] = (val >>> 16) & 0xff;\n this.buffer[this.pos++] = (val >>> 8) & 0xff;\n this.buffer[this.pos++] = val & 0xff;\n }\n\n writeUInt24LE(val) {\n this.buffer[this.pos++] = val & 0xff;\n this.buffer[this.pos++] = (val >>> 8) & 0xff;\n this.buffer[this.pos++] = (val >>> 16) & 0xff;\n }\n\n writeInt24BE(val) {\n if (val >= 0) {\n this.writeUInt24BE(val);\n } else {\n this.writeUInt24BE(val + 0xffffff + 1);\n }\n }\n\n writeInt24LE(val) {\n if (val >= 0) {\n this.writeUInt24LE(val);\n } else {\n this.writeUInt24LE(val + 0xffffff + 1);\n }\n }\n\n fill(val, length) {\n if (length < this.buffer.length) {\n this.buffer.fill(val, this.pos, this.pos + length);\n this.pos += length;\n } else {\n const buf = new Uint8Array(length);\n buf.fill(val);\n this.writeBuffer(buf);\n }\n }\n}\n\nfunction stringToUtf16(string, swap) {\n let buf = new Uint16Array(string.length);\n for (let i = 0; i < string.length; i++) {\n let code = string.charCodeAt(i);\n if (swap) {\n code = (code >> 8) | ((code & 0xff) << 8);\n }\n buf[i] = code;\n }\n return new Uint8Array(buf.buffer);\n}\n\nfunction stringToAscii(string) {\n let buf = new Uint8Array(string.length);\n for (let i = 0; i < string.length; i++) {\n // Match node.js behavior - encoding allows 8-bit rather than 7-bit.\n buf[i] = string.charCodeAt(i);\n }\n return buf;\n}\n\nfor (let key of Object.getOwnPropertyNames(DataView.prototype)) {\n if (key.slice(0, 3) === 'set') {\n let type = key.slice(3).replace('Ui', 'UI');\n if (type === 'Float32') {\n type = 'Float';\n } else if (type === 'Float64') {\n type = 'Double';\n }\n let bytes = DecodeStream.TYPES[type];\n EncodeStream.prototype['write' + type + (bytes === 1 ? '' : 'BE')] = function (value) {\n this.view[key](this.pos, value, false);\n this.pos += bytes;\n };\n\n if (bytes !== 1) {\n EncodeStream.prototype['write' + type + 'LE'] = function (value) {\n this.view[key](this.pos, value, true);\n this.pos += bytes;\n };\n }\n }\n}\n","// Node back-compat.\nconst ENCODING_MAPPING = {\n utf16le: 'utf-16le',\n ucs2: 'utf-16le',\n utf16be: 'utf-16be'\n}\n\nexport class DecodeStream {\n constructor(buffer) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n this.pos = 0;\n this.length = this.buffer.length;\n }\n\n readString(length, encoding = 'ascii') {\n encoding = ENCODING_MAPPING[encoding] || encoding;\n\n let buf = this.readBuffer(length);\n try {\n let decoder = new TextDecoder(encoding);\n return decoder.decode(buf);\n } catch (err) {\n return buf;\n }\n }\n\n readBuffer(length) {\n return this.buffer.slice(this.pos, (this.pos += length));\n }\n\n readUInt24BE() {\n return (this.readUInt16BE() << 8) + this.readUInt8();\n }\n\n readUInt24LE() {\n return this.readUInt16LE() + (this.readUInt8() << 16);\n }\n\n readInt24BE() {\n return (this.readInt16BE() << 8) + this.readUInt8();\n }\n\n readInt24LE() {\n return this.readUInt16LE() + (this.readInt8() << 16);\n }\n}\n\nDecodeStream.TYPES = {\n UInt8: 1,\n UInt16: 2,\n UInt24: 3,\n UInt32: 4,\n Int8: 1,\n Int16: 2,\n Int24: 3,\n Int32: 4,\n Float: 4,\n Double: 8\n};\n\nfor (let key of Object.getOwnPropertyNames(DataView.prototype)) {\n if (key.slice(0, 3) === 'get') {\n let type = key.slice(3).replace('Ui', 'UI');\n if (type === 'Float32') {\n type = 'Float';\n } else if (type === 'Float64') {\n type = 'Double';\n }\n let bytes = DecodeStream.TYPES[type];\n DecodeStream.prototype['read' + type + (bytes === 1 ? '' : 'BE')] = function () {\n const ret = this.view[key](this.pos, false);\n this.pos += bytes;\n return ret;\n };\n\n if (bytes !== 1) {\n DecodeStream.prototype['read' + type + 'LE'] = function () {\n const ret = this.view[key](this.pos, true);\n this.pos += bytes;\n return ret;\n };\n }\n }\n}\n","import {Base} from './Base.js';\nimport {Number as NumberT} from './Number.js';\nimport * as utils from './utils.js';\n\nclass ArrayT extends Base {\n constructor(type, length, lengthType = 'count') {\n super();\n this.type = type;\n this.length = length;\n this.lengthType = lengthType;\n }\n\n decode(stream, parent) {\n let length;\n const { pos } = stream;\n\n const res = [];\n let ctx = parent;\n\n if (this.length != null) {\n length = utils.resolveLength(this.length, stream, parent);\n }\n\n if (this.length instanceof NumberT) {\n // define hidden properties\n Object.defineProperties(res, {\n parent: { value: parent },\n _startOffset: { value: pos },\n _currentOffset: { value: 0, writable: true },\n _length: { value: length }\n });\n\n ctx = res;\n }\n\n if ((length == null) || (this.lengthType === 'bytes')) {\n const target = (length != null) ?\n stream.pos + length\n : (parent != null ? parent._length : undefined) ?\n parent._startOffset + parent._length\n :\n stream.length;\n\n while (stream.pos < target) {\n res.push(this.type.decode(stream, ctx));\n }\n\n } else {\n for (let i = 0, end = length; i < end; i++) {\n res.push(this.type.decode(stream, ctx));\n }\n }\n\n return res;\n }\n\n size(array, ctx, includePointers = true) {\n if (!array) {\n return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\n }\n\n let size = 0;\n if (this.length instanceof NumberT) {\n size += this.length.size();\n ctx = {parent: ctx, pointerSize: 0};\n }\n\n for (let item of array) {\n size += this.type.size(item, ctx);\n }\n\n if (ctx && includePointers && this.length instanceof NumberT) {\n size += ctx.pointerSize;\n }\n \n return size;\n }\n\n encode(stream, array, parent) {\n let ctx = parent;\n if (this.length instanceof NumberT) {\n ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent\n };\n\n ctx.pointerOffset = stream.pos + this.size(array, ctx, false);\n this.length.encode(stream, array.length);\n }\n\n for (let item of array) {\n this.type.encode(stream, item, ctx);\n }\n\n if (this.length instanceof NumberT) {\n let i = 0;\n while (i < ctx.pointers.length) {\n const ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n }\n }\n}\n\nexport {ArrayT as Array};\n","import {DecodeStream} from './DecodeStream.js';\nimport {EncodeStream} from './EncodeStream.js';\n\nexport class Base {\n fromBuffer(buffer) {\n let stream = new DecodeStream(buffer);\n return this.decode(stream);\n }\n\n toBuffer(value) {\n let size = this.size(value);\n let buffer = new Uint8Array(size);\n let stream = new EncodeStream(buffer);\n this.encode(stream, value);\n return buffer;\n }\n}\n","import {DecodeStream} from './DecodeStream.js';\nimport {Base} from './Base.js';\n\nclass NumberT extends Base {\n constructor(type, endian = 'BE') {\n super();\n this.type = type;\n this.endian = endian;\n this.fn = this.type;\n if (this.type[this.type.length - 1] !== '8') {\n this.fn += this.endian;\n }\n }\n\n size() {\n return DecodeStream.TYPES[this.type];\n }\n\n decode(stream) {\n return stream[`read${this.fn}`]();\n }\n\n encode(stream, val) {\n return stream[`write${this.fn}`](val);\n }\n}\n\nexport {NumberT as Number};\n\nexport const uint8 = new NumberT('UInt8');\nexport const uint16be = new NumberT('UInt16', 'BE');\nexport const uint16 = uint16be;\nexport const uint16le = new NumberT('UInt16', 'LE');\nexport const uint24be = new NumberT('UInt24', 'BE');\nexport const uint24 = uint24be;\nexport const uint24le = new NumberT('UInt24', 'LE');\nexport const uint32be = new NumberT('UInt32', 'BE');\nexport const uint32 = uint32be;\nexport const uint32le = new NumberT('UInt32', 'LE');\nexport const int8 = new NumberT('Int8');\nexport const int16be = new NumberT('Int16', 'BE');\nexport const int16 = int16be;\nexport const int16le = new NumberT('Int16', 'LE');\nexport const int24be = new NumberT('Int24', 'BE');\nexport const int24 = int24be;\nexport const int24le = new NumberT('Int24', 'LE');\nexport const int32be = new NumberT('Int32', 'BE');\nexport const int32 = int32be;\nexport const int32le = new NumberT('Int32', 'LE');\nexport const floatbe = new NumberT('Float', 'BE');\nexport const float = floatbe;\nexport const floatle = new NumberT('Float', 'LE');\nexport const doublebe = new NumberT('Double', 'BE');\nexport const double = doublebe;\nexport const doublele = new NumberT('Double', 'LE');\n\nexport class Fixed extends NumberT {\n constructor(size, endian, fracBits = size >> 1) {\n super(`Int${size}`, endian);\n this._point = 1 << fracBits;\n }\n\n decode(stream) {\n return super.decode(stream) / this._point;\n }\n\n encode(stream, val) {\n return super.encode(stream, (val * this._point) | 0);\n }\n}\n\nexport const fixed16be = new Fixed(16, 'BE');\nexport const fixed16 = fixed16be;\nexport const fixed16le = new Fixed(16, 'LE');\nexport const fixed32be = new Fixed(32, 'BE');\nexport const fixed32 = fixed32be;\nexport const fixed32le = new Fixed(32, 'LE');\n","import {Number as NumberT} from './Number.js';\n\nexport function resolveLength(length, stream, parent) {\n let res;\n if (typeof length === 'number') {\n res = length;\n\n } else if (typeof length === 'function') {\n res = length.call(parent, parent);\n\n } else if (parent && (typeof length === 'string')) {\n res = parent[length];\n\n } else if (stream && length instanceof NumberT) {\n res = length.decode(stream);\n }\n\n if (isNaN(res)) {\n throw new Error('Not a fixed size');\n }\n\n return res;\n};\n\nexport class PropertyDescriptor {\n constructor(opts = {}) {\n this.enumerable = true;\n this.configurable = true;\n\n for (let key in opts) {\n const val = opts[key];\n this[key] = val;\n }\n }\n}\n","import {Array as ArrayT} from './Array.js';\nimport {Number as NumberT} from './Number.js';\nimport * as utils from './utils.js';\n\nexport class LazyArray extends ArrayT {\n decode(stream, parent) {\n const { pos } = stream;\n const length = utils.resolveLength(this.length, stream, parent);\n\n if (this.length instanceof NumberT) {\n parent = {\n parent,\n _startOffset: pos,\n _currentOffset: 0,\n _length: length\n };\n }\n\n const res = new LazyArrayValue(this.type, length, stream, parent);\n\n stream.pos += length * this.type.size(null, parent);\n return res;\n }\n\n size(val, ctx) {\n if (val instanceof LazyArrayValue) {\n val = val.toArray();\n }\n\n return super.size(val, ctx);\n }\n\n encode(stream, val, ctx) {\n if (val instanceof LazyArrayValue) {\n val = val.toArray();\n }\n\n return super.encode(stream, val, ctx);\n }\n}\n\nclass LazyArrayValue {\n constructor(type, length, stream, ctx) {\n this.type = type;\n this.length = length;\n this.stream = stream;\n this.ctx = ctx;\n this.base = this.stream.pos;\n this.items = [];\n }\n\n get(index) {\n if ((index < 0) || (index >= this.length)) {\n return undefined;\n }\n\n if (this.items[index] == null) {\n const { pos } = this.stream;\n this.stream.pos = this.base + (this.type.size(null, this.ctx) * index);\n this.items[index] = this.type.decode(this.stream, this.ctx);\n this.stream.pos = pos;\n }\n\n return this.items[index];\n }\n\n toArray() {\n const result = [];\n for (let i = 0, end = this.length; i < end; i++) {\n result.push(this.get(i));\n }\n return result;\n }\n}\n","import {Base} from './Base.js';\n\nexport class Bitfield extends Base {\n constructor(type, flags = []) {\n super();\n this.type = type;\n this.flags = flags;\n }\n\n decode(stream) {\n const val = this.type.decode(stream);\n\n const res = {};\n for (let i = 0; i < this.flags.length; i++) {\n const flag = this.flags[i];\n if (flag != null) {\n res[flag] = !!(val & (1 << i));\n }\n }\n\n return res;\n }\n\n size() {\n return this.type.size();\n }\n\n encode(stream, keys) {\n let val = 0;\n for (let i = 0; i < this.flags.length; i++) {\n const flag = this.flags[i];\n if (flag != null) {\n if (keys[flag]) { val |= (1 << i); }\n }\n }\n\n return this.type.encode(stream, val);\n }\n}\n","import {Base} from './Base.js';\n\nexport class BooleanT extends Base {\n constructor(type) {\n super();\n this.type = type;\n }\n\n decode(stream, parent) {\n return !!this.type.decode(stream, parent);\n }\n\n size(val, parent) {\n return this.type.size(val, parent);\n }\n\n encode(stream, val, parent) {\n return this.type.encode(stream, +val, parent);\n }\n}\n\nexport {BooleanT as Boolean};\n","import {Base} from './Base.js';\nimport {Number as NumberT} from './Number.js';\nimport * as utils from './utils.js';\n\nexport class BufferT extends Base {\n constructor(length) {\n super();\n this.length = length;\n }\n \n decode(stream, parent) {\n const length = utils.resolveLength(this.length, stream, parent);\n return stream.readBuffer(length);\n }\n\n size(val, parent) {\n if (!val) {\n return utils.resolveLength(this.length, null, parent);\n }\n\n let len = val.length;\n if (this.length instanceof NumberT) {\n len += this.length.size();\n }\n\n return len;\n }\n\n encode(stream, buf, parent) {\n if (this.length instanceof NumberT) {\n this.length.encode(stream, buf.length);\n }\n\n return stream.writeBuffer(buf);\n }\n}\n\nexport {BufferT as Buffer};\n","import {Base} from './Base.js';\n\nexport class Enum extends Base {\n constructor(type, options = []) {\n super();\n this.type = type;\n this.options = options;\n }\n \n decode(stream) {\n const index = this.type.decode(stream);\n return this.options[index] || index;\n }\n\n size() {\n return this.type.size();\n }\n\n encode(stream, val) {\n const index = this.options.indexOf(val);\n if (index === -1) {\n throw new Error(`Unknown option in enum: ${val}`);\n }\n\n return this.type.encode(stream, index);\n }\n}\n","import {Base} from './Base.js';\n\nexport class Optional extends Base {\n constructor(type, condition = true) {\n super();\n this.type = type;\n this.condition = condition;\n }\n\n decode(stream, parent) {\n let { condition } = this;\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.decode(stream, parent);\n }\n }\n\n size(val, parent) {\n let { condition } = this;\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.size(val, parent);\n } else {\n return 0;\n }\n }\n\n encode(stream, val, parent) {\n let { condition } = this;\n if (typeof condition === 'function') {\n condition = condition.call(parent, parent);\n }\n\n if (condition) {\n return this.type.encode(stream, val, parent);\n }\n }\n}\n","import {Base} from './Base.js';\nimport * as utils from './utils.js';\n\nexport class Reserved extends Base {\n constructor(type, count = 1) {\n super();\n this.type = type;\n this.count = count;\n }\n decode(stream, parent) {\n stream.pos += this.size(null, parent);\n return undefined;\n }\n\n size(data, parent) {\n const count = utils.resolveLength(this.count, null, parent);\n return this.type.size() * count;\n }\n\n encode(stream, val, parent) {\n return stream.fill(0, this.size(val, parent));\n }\n}\n","import {Base} from './Base.js';\nimport {Number as NumberT} from './Number.js';\nimport * as utils from './utils.js';\n\nclass StringT extends Base {\n constructor(length, encoding = 'ascii') {\n super();\n this.length = length;\n this.encoding = encoding;\n }\n\n decode(stream, parent) {\n let length, pos;\n\n let { encoding } = this;\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent, parent) || 'ascii';\n }\n let width = encodingWidth(encoding);\n\n if (this.length != null) {\n length = utils.resolveLength(this.length, stream, parent);\n } else {\n let buffer;\n ({buffer, length, pos} = stream);\n\n while ((pos < length - width + 1) &&\n (buffer[pos] !== 0x00 ||\n (width === 2 && buffer[pos+1] !== 0x00)\n )) {\n pos += width;\n }\n\n length = pos - stream.pos;\n }\n\n\n const string = stream.readString(length, encoding);\n\n if ((this.length == null) && (stream.pos < stream.length)) {\n stream.pos+=width;\n }\n\n return string;\n }\n\n size(val, parent) {\n // Use the defined value if no value was given\n if (val === undefined || val === null) {\n return utils.resolveLength(this.length, null, parent);\n }\n\n let { encoding } = this;\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n }\n\n if (encoding === 'utf16be') {\n encoding = 'utf16le';\n }\n\n let size = byteLength(val, encoding);\n if (this.length instanceof NumberT) {\n size += this.length.size();\n }\n\n if ((this.length == null)) {\n size += encodingWidth(encoding);\n }\n\n return size;\n }\n\n encode(stream, val, parent) {\n let { encoding } = this;\n if (typeof encoding === 'function') {\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\n }\n\n if (this.length instanceof NumberT) {\n this.length.encode(stream, byteLength(val, encoding));\n }\n\n stream.writeString(val, encoding);\n\n if ((this.length == null)) {\n return encodingWidth(encoding) == 2 ?\n stream.writeUInt16LE(0x0000) :\n stream.writeUInt8(0x00);\n }\n }\n}\n\nfunction encodingWidth(encoding) {\n switch(encoding) {\n case 'ascii':\n case 'utf8': // utf8 is a byte-based encoding for zero-term string\n return 1;\n case 'utf16le':\n case 'utf16-le':\n case 'utf-16be':\n case 'utf-16le':\n case 'utf16be':\n case 'utf16-be':\n case 'ucs2':\n return 2;\n default:\n //TODO: assume all other encodings are 1-byters\n //throw new Error('Unknown encoding ' + encoding);\n return 1;\n }\n}\n\nfunction byteLength(string, encoding) {\n switch (encoding) {\n case 'ascii':\n return string.length;\n case 'utf8':\n let len = 0;\n for (let i = 0; i < string.length; i++) {\n let c = string.charCodeAt(i);\n\n if (c >= 0xd800 && c <= 0xdbff && i < string.length - 1) {\n let c2 = string.charCodeAt(++i);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = ((c & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000;\n } else {\n // unmatched surrogate.\n i--;\n }\n }\n\n if ((c & 0xffffff80) === 0) {\n len++;\n } else if ((c & 0xfffff800) === 0) {\n len += 2;\n } else if ((c & 0xffff0000) === 0) {\n len += 3;\n } else if ((c & 0xffe00000) === 0) {\n len += 4;\n }\n }\n return len;\n case 'utf16le':\n case 'utf16-le':\n case 'utf16be':\n case 'utf16-be':\n case 'ucs2':\n return string.length * 2;\n default:\n throw new Error('Unknown encoding ' + encoding);\n }\n}\n\nexport {StringT as String};\n","import {Base} from './Base.js';\nimport * as utils from './utils.js';\n\nexport class Struct extends Base {\n constructor(fields = {}) {\n super();\n this.fields = fields;\n }\n\n decode(stream, parent, length = 0) {\n const res = this._setup(stream, parent, length);\n this._parseFields(stream, res, this.fields);\n\n if (this.process != null) {\n this.process.call(res, stream);\n }\n return res;\n }\n\n _setup(stream, parent, length) {\n const res = {};\n\n // define hidden properties\n Object.defineProperties(res, {\n parent: { value: parent },\n _startOffset: { value: stream.pos },\n _currentOffset: { value: 0, writable: true },\n _length: { value: length }\n });\n\n return res;\n }\n\n _parseFields(stream, res, fields) {\n for (let key in fields) {\n var val;\n const type = fields[key];\n if (typeof type === 'function') {\n val = type.call(res, res);\n } else {\n val = type.decode(stream, res);\n }\n\n if (val !== undefined) {\n if (val instanceof utils.PropertyDescriptor) {\n Object.defineProperty(res, key, val);\n } else {\n res[key] = val;\n }\n }\n\n res._currentOffset = stream.pos - res._startOffset;\n }\n\n }\n\n size(val, parent, includePointers = true) {\n if (val == null) { val = {}; }\n const ctx = {\n parent,\n val,\n pointerSize: 0\n };\n\n if (this.preEncode != null) {\n this.preEncode.call(val);\n }\n\n let size = 0;\n for (let key in this.fields) {\n const type = this.fields[key];\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n\n if (includePointers) {\n size += ctx.pointerSize;\n }\n\n return size;\n }\n\n encode(stream, val, parent) {\n let type;\n if (this.preEncode != null) {\n this.preEncode.call(val, stream);\n }\n\n const ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n\n for (let key in this.fields) {\n type = this.fields[key];\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n const ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n }\n}\n","import {Struct} from './Struct.js';\n\nconst getPath = (object, pathArray) => {\n return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object);\n};\n\nexport class VersionedStruct extends Struct {\n constructor(type, versions = {}) {\n super();\n this.type = type;\n this.versions = versions;\n if (typeof type === 'string') {\n this.versionPath = type.split('.');\n }\n }\n\n decode(stream, parent, length = 0) {\n const res = this._setup(stream, parent, length);\n\n if (typeof this.type === 'string') {\n res.version = getPath(parent, this.versionPath);\n } else {\n res.version = this.type.decode(stream);\n }\n\n if (this.versions.header) {\n this._parseFields(stream, res, this.versions.header);\n }\n\n const fields = this.versions[res.version];\n if ((fields == null)) {\n throw new Error(`Unknown version ${res.version}`);\n }\n\n if (fields instanceof VersionedStruct) {\n return fields.decode(stream, parent);\n }\n\n this._parseFields(stream, res, fields);\n\n if (this.process != null) {\n this.process.call(res, stream);\n }\n return res;\n }\n\n size(val, parent, includePointers = true) {\n let key, type;\n if (!val) {\n throw new Error('Not a fixed size');\n }\n\n if (this.preEncode != null) {\n this.preEncode.call(val);\n }\n\n const ctx = {\n parent,\n val,\n pointerSize: 0\n };\n\n let size = 0;\n if (typeof this.type !== 'string') {\n size += this.type.size(val.version, ctx);\n }\n\n if (this.versions.header) {\n for (key in this.versions.header) {\n type = this.versions.header[key];\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n }\n\n const fields = this.versions[val.version];\n if ((fields == null)) {\n throw new Error(`Unknown version ${val.version}`);\n }\n\n for (key in fields) {\n type = fields[key];\n if (type.size != null) {\n size += type.size(val[key], ctx);\n }\n }\n\n if (includePointers) {\n size += ctx.pointerSize;\n }\n\n return size;\n }\n\n encode(stream, val, parent) {\n let key, type;\n if (this.preEncode != null) {\n this.preEncode.call(val, stream);\n }\n\n const ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent,\n val,\n pointerSize: 0\n };\n\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\n\n if (typeof this.type !== 'string') {\n this.type.encode(stream, val.version);\n }\n\n if (this.versions.header) {\n for (key in this.versions.header) {\n type = this.versions.header[key];\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n }\n\n const fields = this.versions[val.version];\n for (key in fields) {\n type = fields[key];\n if (type.encode != null) {\n type.encode(stream, val[key], ctx);\n }\n }\n\n let i = 0;\n while (i < ctx.pointers.length) {\n const ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n }\n}\n","import * as utils from './utils.js';\nimport {Base} from './Base.js';\n\nexport class Pointer extends Base {\n constructor(offsetType, type, options = {}) {\n super();\n this.offsetType = offsetType;\n this.type = type;\n this.options = options;\n if (this.type === 'void') { this.type = null; }\n if (this.options.type == null) { this.options.type = 'local'; }\n if (this.options.allowNull == null) { this.options.allowNull = true; }\n if (this.options.nullValue == null) { this.options.nullValue = 0; }\n if (this.options.lazy == null) { this.options.lazy = false; }\n if (this.options.relativeTo) {\n if (typeof this.options.relativeTo !== 'function') {\n throw new Error('relativeTo option must be a function');\n }\n this.relativeToGetter = options.relativeTo;\n }\n }\n\n decode(stream, ctx) {\n const offset = this.offsetType.decode(stream, ctx);\n\n // handle NULL pointers\n if ((offset === this.options.nullValue) && this.options.allowNull) {\n return null;\n }\n\n let relative;\n switch (this.options.type) {\n case 'local': relative = ctx._startOffset; break;\n case 'immediate': relative = stream.pos - this.offsetType.size(); break;\n case 'parent': relative = ctx.parent._startOffset; break;\n default:\n var c = ctx;\n while (c.parent) {\n c = c.parent;\n }\n\n relative = c._startOffset || 0;\n }\n\n if (this.options.relativeTo) {\n relative += this.relativeToGetter(ctx);\n }\n\n const ptr = offset + relative;\n\n if (this.type != null) {\n let val = null;\n const decodeValue = () => {\n if (val != null) { return val; }\n\n const { pos } = stream;\n stream.pos = ptr;\n val = this.type.decode(stream, ctx);\n stream.pos = pos;\n return val;\n };\n\n // If this is a lazy pointer, define a getter to decode only when needed.\n // This obviously only works when the pointer is contained by a Struct.\n if (this.options.lazy) {\n return new utils.PropertyDescriptor({\n get: decodeValue});\n }\n\n return decodeValue();\n } else {\n return ptr;\n }\n }\n\n size(val, ctx) {\n const parent = ctx;\n switch (this.options.type) {\n case 'local': case 'immediate':\n break;\n case 'parent':\n ctx = ctx.parent;\n break;\n default: // global\n while (ctx.parent) {\n ctx = ctx.parent;\n }\n }\n\n let { type } = this;\n if (type == null) {\n if (!(val instanceof VoidPointer)) {\n throw new Error(\"Must be a VoidPointer\");\n }\n\n ({ type } = val);\n val = val.value;\n }\n\n if (val && ctx) {\n // Must be written as two separate lines rather than += in case `type.size` mutates ctx.pointerSize.\n let size = type.size(val, parent);\n ctx.pointerSize += size;\n }\n\n return this.offsetType.size();\n }\n\n encode(stream, val, ctx) {\n let relative;\n const parent = ctx;\n if ((val == null)) {\n this.offsetType.encode(stream, this.options.nullValue);\n return;\n }\n\n switch (this.options.type) {\n case 'local':\n relative = ctx.startOffset;\n break;\n case 'immediate':\n relative = stream.pos + this.offsetType.size(val, parent);\n break;\n case 'parent':\n ctx = ctx.parent;\n relative = ctx.startOffset;\n break;\n default: // global\n relative = 0;\n while (ctx.parent) {\n ctx = ctx.parent;\n }\n }\n\n if (this.options.relativeTo) {\n relative += this.relativeToGetter(parent.val);\n }\n\n this.offsetType.encode(stream, ctx.pointerOffset - relative);\n\n let { type } = this;\n if (type == null) {\n if (!(val instanceof VoidPointer)) {\n throw new Error(\"Must be a VoidPointer\");\n }\n\n ({ type } = val);\n val = val.value;\n }\n\n ctx.pointers.push({\n type,\n val,\n parent\n });\n\n return ctx.pointerOffset += type.size(val, parent);\n }\n}\n\n// A pointer whose type is determined at decode time\nexport class VoidPointer {\n constructor(type, value) {\n this.type = type;\n this.value = value;\n }\n}\n"],"names":[],"version":3,"file":"main.cjs.map"} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/restructure/index.js b/skills/flight-finder/node_modules/restructure/index.js deleted file mode 100644 index 3dd1085..0000000 --- a/skills/flight-finder/node_modules/restructure/index.js +++ /dev/null @@ -1,17 +0,0 @@ -export {EncodeStream} from './src/EncodeStream.js'; -export {DecodeStream} from './src/DecodeStream.js'; -export {Array} from './src/Array.js'; -export {LazyArray} from './src/LazyArray.js'; -export {Bitfield} from './src/Bitfield.js'; -export {Boolean} from './src/Boolean.js'; -export {Buffer} from './src/Buffer.js'; -export {Enum} from './src/Enum.js'; -export {Optional} from './src/Optional.js'; -export {Reserved} from './src/Reserved.js'; -export {String} from './src/String.js'; -export {Struct} from './src/Struct.js'; -export {VersionedStruct} from './src/VersionedStruct.js'; - -export * from './src/utils.js'; -export * from './src/Number.js'; -export * from './src/Pointer.js'; diff --git a/skills/flight-finder/node_modules/restructure/package.json b/skills/flight-finder/node_modules/restructure/package.json deleted file mode 100644 index 0c24756..0000000 --- a/skills/flight-finder/node_modules/restructure/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "restructure", - "version": "3.0.2", - "description": "Declaratively encode and decode binary data", - "type": "module", - "main": "./dist/main.cjs", - "module": "./index.js", - "source": "./index.js", - "exports": { - "import": "./index.js", - "require": "./dist/main.cjs" - }, - "targets": { - "module": false - }, - "devDependencies": { - "mocha": "^10.0.0", - "parcel": "^2.6.1" - }, - "scripts": { - "test": "mocha", - "build": "parcel build", - "prepublishOnly": "parcel build" - }, - "repository": { - "type": "git", - "url": "git://github.com/devongovett/restructure.git" - }, - "keywords": [ - "binary", - "struct", - "encode", - "decode" - ], - "author": "Devon Govett ", - "license": "MIT", - "bugs": { - "url": "https://github.com/devongovett/restructure/issues" - }, - "homepage": "https://github.com/devongovett/restructure" -} diff --git a/skills/flight-finder/node_modules/restructure/src/Array.js b/skills/flight-finder/node_modules/restructure/src/Array.js deleted file mode 100644 index 150c991..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Array.js +++ /dev/null @@ -1,106 +0,0 @@ -import {Base} from './Base.js'; -import {Number as NumberT} from './Number.js'; -import * as utils from './utils.js'; - -class ArrayT extends Base { - constructor(type, length, lengthType = 'count') { - super(); - this.type = type; - this.length = length; - this.lengthType = lengthType; - } - - decode(stream, parent) { - let length; - const { pos } = stream; - - const res = []; - let ctx = parent; - - if (this.length != null) { - length = utils.resolveLength(this.length, stream, parent); - } - - if (this.length instanceof NumberT) { - // define hidden properties - Object.defineProperties(res, { - parent: { value: parent }, - _startOffset: { value: pos }, - _currentOffset: { value: 0, writable: true }, - _length: { value: length } - }); - - ctx = res; - } - - if ((length == null) || (this.lengthType === 'bytes')) { - const target = (length != null) ? - stream.pos + length - : (parent != null ? parent._length : undefined) ? - parent._startOffset + parent._length - : - stream.length; - - while (stream.pos < target) { - res.push(this.type.decode(stream, ctx)); - } - - } else { - for (let i = 0, end = length; i < end; i++) { - res.push(this.type.decode(stream, ctx)); - } - } - - return res; - } - - size(array, ctx, includePointers = true) { - if (!array) { - return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx); - } - - let size = 0; - if (this.length instanceof NumberT) { - size += this.length.size(); - ctx = {parent: ctx, pointerSize: 0}; - } - - for (let item of array) { - size += this.type.size(item, ctx); - } - - if (ctx && includePointers && this.length instanceof NumberT) { - size += ctx.pointerSize; - } - - return size; - } - - encode(stream, array, parent) { - let ctx = parent; - if (this.length instanceof NumberT) { - ctx = { - pointers: [], - startOffset: stream.pos, - parent - }; - - ctx.pointerOffset = stream.pos + this.size(array, ctx, false); - this.length.encode(stream, array.length); - } - - for (let item of array) { - this.type.encode(stream, item, ctx); - } - - if (this.length instanceof NumberT) { - let i = 0; - while (i < ctx.pointers.length) { - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } - } -} - -export {ArrayT as Array}; diff --git a/skills/flight-finder/node_modules/restructure/src/Base.js b/skills/flight-finder/node_modules/restructure/src/Base.js deleted file mode 100644 index c76a39b..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Base.js +++ /dev/null @@ -1,17 +0,0 @@ -import {DecodeStream} from './DecodeStream.js'; -import {EncodeStream} from './EncodeStream.js'; - -export class Base { - fromBuffer(buffer) { - let stream = new DecodeStream(buffer); - return this.decode(stream); - } - - toBuffer(value) { - let size = this.size(value); - let buffer = new Uint8Array(size); - let stream = new EncodeStream(buffer); - this.encode(stream, value); - return buffer; - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Bitfield.js b/skills/flight-finder/node_modules/restructure/src/Bitfield.js deleted file mode 100644 index 1ae529a..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Bitfield.js +++ /dev/null @@ -1,39 +0,0 @@ -import {Base} from './Base.js'; - -export class Bitfield extends Base { - constructor(type, flags = []) { - super(); - this.type = type; - this.flags = flags; - } - - decode(stream) { - const val = this.type.decode(stream); - - const res = {}; - for (let i = 0; i < this.flags.length; i++) { - const flag = this.flags[i]; - if (flag != null) { - res[flag] = !!(val & (1 << i)); - } - } - - return res; - } - - size() { - return this.type.size(); - } - - encode(stream, keys) { - let val = 0; - for (let i = 0; i < this.flags.length; i++) { - const flag = this.flags[i]; - if (flag != null) { - if (keys[flag]) { val |= (1 << i); } - } - } - - return this.type.encode(stream, val); - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Boolean.js b/skills/flight-finder/node_modules/restructure/src/Boolean.js deleted file mode 100644 index e7ad576..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Boolean.js +++ /dev/null @@ -1,22 +0,0 @@ -import {Base} from './Base.js'; - -export class BooleanT extends Base { - constructor(type) { - super(); - this.type = type; - } - - decode(stream, parent) { - return !!this.type.decode(stream, parent); - } - - size(val, parent) { - return this.type.size(val, parent); - } - - encode(stream, val, parent) { - return this.type.encode(stream, +val, parent); - } -} - -export {BooleanT as Boolean}; diff --git a/skills/flight-finder/node_modules/restructure/src/Buffer.js b/skills/flight-finder/node_modules/restructure/src/Buffer.js deleted file mode 100644 index 8fc69f9..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Buffer.js +++ /dev/null @@ -1,38 +0,0 @@ -import {Base} from './Base.js'; -import {Number as NumberT} from './Number.js'; -import * as utils from './utils.js'; - -export class BufferT extends Base { - constructor(length) { - super(); - this.length = length; - } - - decode(stream, parent) { - const length = utils.resolveLength(this.length, stream, parent); - return stream.readBuffer(length); - } - - size(val, parent) { - if (!val) { - return utils.resolveLength(this.length, null, parent); - } - - let len = val.length; - if (this.length instanceof NumberT) { - len += this.length.size(); - } - - return len; - } - - encode(stream, buf, parent) { - if (this.length instanceof NumberT) { - this.length.encode(stream, buf.length); - } - - return stream.writeBuffer(buf); - } -} - -export {BufferT as Buffer}; diff --git a/skills/flight-finder/node_modules/restructure/src/DecodeStream.js b/skills/flight-finder/node_modules/restructure/src/DecodeStream.js deleted file mode 100644 index 226ffa1..0000000 --- a/skills/flight-finder/node_modules/restructure/src/DecodeStream.js +++ /dev/null @@ -1,85 +0,0 @@ -// Node back-compat. -const ENCODING_MAPPING = { - utf16le: 'utf-16le', - ucs2: 'utf-16le', - utf16be: 'utf-16be' -} - -export class DecodeStream { - constructor(buffer) { - this.buffer = buffer; - this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - this.pos = 0; - this.length = this.buffer.length; - } - - readString(length, encoding = 'ascii') { - encoding = ENCODING_MAPPING[encoding] || encoding; - - let buf = this.readBuffer(length); - try { - let decoder = new TextDecoder(encoding); - return decoder.decode(buf); - } catch (err) { - return buf; - } - } - - readBuffer(length) { - return this.buffer.slice(this.pos, (this.pos += length)); - } - - readUInt24BE() { - return (this.readUInt16BE() << 8) + this.readUInt8(); - } - - readUInt24LE() { - return this.readUInt16LE() + (this.readUInt8() << 16); - } - - readInt24BE() { - return (this.readInt16BE() << 8) + this.readUInt8(); - } - - readInt24LE() { - return this.readUInt16LE() + (this.readInt8() << 16); - } -} - -DecodeStream.TYPES = { - UInt8: 1, - UInt16: 2, - UInt24: 3, - UInt32: 4, - Int8: 1, - Int16: 2, - Int24: 3, - Int32: 4, - Float: 4, - Double: 8 -}; - -for (let key of Object.getOwnPropertyNames(DataView.prototype)) { - if (key.slice(0, 3) === 'get') { - let type = key.slice(3).replace('Ui', 'UI'); - if (type === 'Float32') { - type = 'Float'; - } else if (type === 'Float64') { - type = 'Double'; - } - let bytes = DecodeStream.TYPES[type]; - DecodeStream.prototype['read' + type + (bytes === 1 ? '' : 'BE')] = function () { - const ret = this.view[key](this.pos, false); - this.pos += bytes; - return ret; - }; - - if (bytes !== 1) { - DecodeStream.prototype['read' + type + 'LE'] = function () { - const ret = this.view[key](this.pos, true); - this.pos += bytes; - return ret; - }; - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/EncodeStream.js b/skills/flight-finder/node_modules/restructure/src/EncodeStream.js deleted file mode 100644 index 64fb4cb..0000000 --- a/skills/flight-finder/node_modules/restructure/src/EncodeStream.js +++ /dev/null @@ -1,129 +0,0 @@ -import {DecodeStream} from './DecodeStream.js'; - -const textEncoder = new TextEncoder(); -const isBigEndian = new Uint8Array(new Uint16Array([0x1234]).buffer)[0] == 0x12; - -export class EncodeStream { - constructor(buffer) { - this.buffer = buffer; - this.view = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength); - this.pos = 0; - } - - writeBuffer(buffer) { - this.buffer.set(buffer, this.pos); - this.pos += buffer.length; - } - - writeString(string, encoding = 'ascii') { - let buf; - switch (encoding) { - case 'utf16le': - case 'utf16-le': - case 'ucs2': // node treats this the same as utf16. - buf = stringToUtf16(string, isBigEndian); - break; - - case 'utf16be': - case 'utf16-be': - buf = stringToUtf16(string, !isBigEndian); - break; - - case 'utf8': - buf = textEncoder.encode(string); - break; - - case 'ascii': - buf = stringToAscii(string); - break; - - default: - throw new Error(`Unsupported encoding: ${encoding}`); - } - - this.writeBuffer(buf); - } - - writeUInt24BE(val) { - this.buffer[this.pos++] = (val >>> 16) & 0xff; - this.buffer[this.pos++] = (val >>> 8) & 0xff; - this.buffer[this.pos++] = val & 0xff; - } - - writeUInt24LE(val) { - this.buffer[this.pos++] = val & 0xff; - this.buffer[this.pos++] = (val >>> 8) & 0xff; - this.buffer[this.pos++] = (val >>> 16) & 0xff; - } - - writeInt24BE(val) { - if (val >= 0) { - this.writeUInt24BE(val); - } else { - this.writeUInt24BE(val + 0xffffff + 1); - } - } - - writeInt24LE(val) { - if (val >= 0) { - this.writeUInt24LE(val); - } else { - this.writeUInt24LE(val + 0xffffff + 1); - } - } - - fill(val, length) { - if (length < this.buffer.length) { - this.buffer.fill(val, this.pos, this.pos + length); - this.pos += length; - } else { - const buf = new Uint8Array(length); - buf.fill(val); - this.writeBuffer(buf); - } - } -} - -function stringToUtf16(string, swap) { - let buf = new Uint16Array(string.length); - for (let i = 0; i < string.length; i++) { - let code = string.charCodeAt(i); - if (swap) { - code = (code >> 8) | ((code & 0xff) << 8); - } - buf[i] = code; - } - return new Uint8Array(buf.buffer); -} - -function stringToAscii(string) { - let buf = new Uint8Array(string.length); - for (let i = 0; i < string.length; i++) { - // Match node.js behavior - encoding allows 8-bit rather than 7-bit. - buf[i] = string.charCodeAt(i); - } - return buf; -} - -for (let key of Object.getOwnPropertyNames(DataView.prototype)) { - if (key.slice(0, 3) === 'set') { - let type = key.slice(3).replace('Ui', 'UI'); - if (type === 'Float32') { - type = 'Float'; - } else if (type === 'Float64') { - type = 'Double'; - } - let bytes = DecodeStream.TYPES[type]; - EncodeStream.prototype['write' + type + (bytes === 1 ? '' : 'BE')] = function (value) { - this.view[key](this.pos, value, false); - this.pos += bytes; - }; - - if (bytes !== 1) { - EncodeStream.prototype['write' + type + 'LE'] = function (value) { - this.view[key](this.pos, value, true); - this.pos += bytes; - }; - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Enum.js b/skills/flight-finder/node_modules/restructure/src/Enum.js deleted file mode 100644 index b61d074..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Enum.js +++ /dev/null @@ -1,27 +0,0 @@ -import {Base} from './Base.js'; - -export class Enum extends Base { - constructor(type, options = []) { - super(); - this.type = type; - this.options = options; - } - - decode(stream) { - const index = this.type.decode(stream); - return this.options[index] || index; - } - - size() { - return this.type.size(); - } - - encode(stream, val) { - const index = this.options.indexOf(val); - if (index === -1) { - throw new Error(`Unknown option in enum: ${val}`); - } - - return this.type.encode(stream, index); - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/LazyArray.js b/skills/flight-finder/node_modules/restructure/src/LazyArray.js deleted file mode 100644 index d378fff..0000000 --- a/skills/flight-finder/node_modules/restructure/src/LazyArray.js +++ /dev/null @@ -1,74 +0,0 @@ -import {Array as ArrayT} from './Array.js'; -import {Number as NumberT} from './Number.js'; -import * as utils from './utils.js'; - -export class LazyArray extends ArrayT { - decode(stream, parent) { - const { pos } = stream; - const length = utils.resolveLength(this.length, stream, parent); - - if (this.length instanceof NumberT) { - parent = { - parent, - _startOffset: pos, - _currentOffset: 0, - _length: length - }; - } - - const res = new LazyArrayValue(this.type, length, stream, parent); - - stream.pos += length * this.type.size(null, parent); - return res; - } - - size(val, ctx) { - if (val instanceof LazyArrayValue) { - val = val.toArray(); - } - - return super.size(val, ctx); - } - - encode(stream, val, ctx) { - if (val instanceof LazyArrayValue) { - val = val.toArray(); - } - - return super.encode(stream, val, ctx); - } -} - -class LazyArrayValue { - constructor(type, length, stream, ctx) { - this.type = type; - this.length = length; - this.stream = stream; - this.ctx = ctx; - this.base = this.stream.pos; - this.items = []; - } - - get(index) { - if ((index < 0) || (index >= this.length)) { - return undefined; - } - - if (this.items[index] == null) { - const { pos } = this.stream; - this.stream.pos = this.base + (this.type.size(null, this.ctx) * index); - this.items[index] = this.type.decode(this.stream, this.ctx); - this.stream.pos = pos; - } - - return this.items[index]; - } - - toArray() { - const result = []; - for (let i = 0, end = this.length; i < end; i++) { - result.push(this.get(i)); - } - return result; - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Number.js b/skills/flight-finder/node_modules/restructure/src/Number.js deleted file mode 100644 index da7e875..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Number.js +++ /dev/null @@ -1,77 +0,0 @@ -import {DecodeStream} from './DecodeStream.js'; -import {Base} from './Base.js'; - -class NumberT extends Base { - constructor(type, endian = 'BE') { - super(); - this.type = type; - this.endian = endian; - this.fn = this.type; - if (this.type[this.type.length - 1] !== '8') { - this.fn += this.endian; - } - } - - size() { - return DecodeStream.TYPES[this.type]; - } - - decode(stream) { - return stream[`read${this.fn}`](); - } - - encode(stream, val) { - return stream[`write${this.fn}`](val); - } -} - -export {NumberT as Number}; - -export const uint8 = new NumberT('UInt8'); -export const uint16be = new NumberT('UInt16', 'BE'); -export const uint16 = uint16be; -export const uint16le = new NumberT('UInt16', 'LE'); -export const uint24be = new NumberT('UInt24', 'BE'); -export const uint24 = uint24be; -export const uint24le = new NumberT('UInt24', 'LE'); -export const uint32be = new NumberT('UInt32', 'BE'); -export const uint32 = uint32be; -export const uint32le = new NumberT('UInt32', 'LE'); -export const int8 = new NumberT('Int8'); -export const int16be = new NumberT('Int16', 'BE'); -export const int16 = int16be; -export const int16le = new NumberT('Int16', 'LE'); -export const int24be = new NumberT('Int24', 'BE'); -export const int24 = int24be; -export const int24le = new NumberT('Int24', 'LE'); -export const int32be = new NumberT('Int32', 'BE'); -export const int32 = int32be; -export const int32le = new NumberT('Int32', 'LE'); -export const floatbe = new NumberT('Float', 'BE'); -export const float = floatbe; -export const floatle = new NumberT('Float', 'LE'); -export const doublebe = new NumberT('Double', 'BE'); -export const double = doublebe; -export const doublele = new NumberT('Double', 'LE'); - -export class Fixed extends NumberT { - constructor(size, endian, fracBits = size >> 1) { - super(`Int${size}`, endian); - this._point = 1 << fracBits; - } - - decode(stream) { - return super.decode(stream) / this._point; - } - - encode(stream, val) { - return super.encode(stream, (val * this._point) | 0); - } -} - -export const fixed16be = new Fixed(16, 'BE'); -export const fixed16 = fixed16be; -export const fixed16le = new Fixed(16, 'LE'); -export const fixed32be = new Fixed(32, 'BE'); -export const fixed32 = fixed32be; -export const fixed32le = new Fixed(32, 'LE'); diff --git a/skills/flight-finder/node_modules/restructure/src/Optional.js b/skills/flight-finder/node_modules/restructure/src/Optional.js deleted file mode 100644 index 3aa6928..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Optional.js +++ /dev/null @@ -1,44 +0,0 @@ -import {Base} from './Base.js'; - -export class Optional extends Base { - constructor(type, condition = true) { - super(); - this.type = type; - this.condition = condition; - } - - decode(stream, parent) { - let { condition } = this; - if (typeof condition === 'function') { - condition = condition.call(parent, parent); - } - - if (condition) { - return this.type.decode(stream, parent); - } - } - - size(val, parent) { - let { condition } = this; - if (typeof condition === 'function') { - condition = condition.call(parent, parent); - } - - if (condition) { - return this.type.size(val, parent); - } else { - return 0; - } - } - - encode(stream, val, parent) { - let { condition } = this; - if (typeof condition === 'function') { - condition = condition.call(parent, parent); - } - - if (condition) { - return this.type.encode(stream, val, parent); - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Pointer.js b/skills/flight-finder/node_modules/restructure/src/Pointer.js deleted file mode 100644 index 31b1ed2..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Pointer.js +++ /dev/null @@ -1,167 +0,0 @@ -import * as utils from './utils.js'; -import {Base} from './Base.js'; - -export class Pointer extends Base { - constructor(offsetType, type, options = {}) { - super(); - this.offsetType = offsetType; - this.type = type; - this.options = options; - if (this.type === 'void') { this.type = null; } - if (this.options.type == null) { this.options.type = 'local'; } - if (this.options.allowNull == null) { this.options.allowNull = true; } - if (this.options.nullValue == null) { this.options.nullValue = 0; } - if (this.options.lazy == null) { this.options.lazy = false; } - if (this.options.relativeTo) { - if (typeof this.options.relativeTo !== 'function') { - throw new Error('relativeTo option must be a function'); - } - this.relativeToGetter = options.relativeTo; - } - } - - decode(stream, ctx) { - const offset = this.offsetType.decode(stream, ctx); - - // handle NULL pointers - if ((offset === this.options.nullValue) && this.options.allowNull) { - return null; - } - - let relative; - switch (this.options.type) { - case 'local': relative = ctx._startOffset; break; - case 'immediate': relative = stream.pos - this.offsetType.size(); break; - case 'parent': relative = ctx.parent._startOffset; break; - default: - var c = ctx; - while (c.parent) { - c = c.parent; - } - - relative = c._startOffset || 0; - } - - if (this.options.relativeTo) { - relative += this.relativeToGetter(ctx); - } - - const ptr = offset + relative; - - if (this.type != null) { - let val = null; - const decodeValue = () => { - if (val != null) { return val; } - - const { pos } = stream; - stream.pos = ptr; - val = this.type.decode(stream, ctx); - stream.pos = pos; - return val; - }; - - // If this is a lazy pointer, define a getter to decode only when needed. - // This obviously only works when the pointer is contained by a Struct. - if (this.options.lazy) { - return new utils.PropertyDescriptor({ - get: decodeValue}); - } - - return decodeValue(); - } else { - return ptr; - } - } - - size(val, ctx) { - const parent = ctx; - switch (this.options.type) { - case 'local': case 'immediate': - break; - case 'parent': - ctx = ctx.parent; - break; - default: // global - while (ctx.parent) { - ctx = ctx.parent; - } - } - - let { type } = this; - if (type == null) { - if (!(val instanceof VoidPointer)) { - throw new Error("Must be a VoidPointer"); - } - - ({ type } = val); - val = val.value; - } - - if (val && ctx) { - // Must be written as two separate lines rather than += in case `type.size` mutates ctx.pointerSize. - let size = type.size(val, parent); - ctx.pointerSize += size; - } - - return this.offsetType.size(); - } - - encode(stream, val, ctx) { - let relative; - const parent = ctx; - if ((val == null)) { - this.offsetType.encode(stream, this.options.nullValue); - return; - } - - switch (this.options.type) { - case 'local': - relative = ctx.startOffset; - break; - case 'immediate': - relative = stream.pos + this.offsetType.size(val, parent); - break; - case 'parent': - ctx = ctx.parent; - relative = ctx.startOffset; - break; - default: // global - relative = 0; - while (ctx.parent) { - ctx = ctx.parent; - } - } - - if (this.options.relativeTo) { - relative += this.relativeToGetter(parent.val); - } - - this.offsetType.encode(stream, ctx.pointerOffset - relative); - - let { type } = this; - if (type == null) { - if (!(val instanceof VoidPointer)) { - throw new Error("Must be a VoidPointer"); - } - - ({ type } = val); - val = val.value; - } - - ctx.pointers.push({ - type, - val, - parent - }); - - return ctx.pointerOffset += type.size(val, parent); - } -} - -// A pointer whose type is determined at decode time -export class VoidPointer { - constructor(type, value) { - this.type = type; - this.value = value; - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/Reserved.js b/skills/flight-finder/node_modules/restructure/src/Reserved.js deleted file mode 100644 index c198cd9..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Reserved.js +++ /dev/null @@ -1,23 +0,0 @@ -import {Base} from './Base.js'; -import * as utils from './utils.js'; - -export class Reserved extends Base { - constructor(type, count = 1) { - super(); - this.type = type; - this.count = count; - } - decode(stream, parent) { - stream.pos += this.size(null, parent); - return undefined; - } - - size(data, parent) { - const count = utils.resolveLength(this.count, null, parent); - return this.type.size() * count; - } - - encode(stream, val, parent) { - return stream.fill(0, this.size(val, parent)); - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/String.js b/skills/flight-finder/node_modules/restructure/src/String.js deleted file mode 100644 index a066b12..0000000 --- a/skills/flight-finder/node_modules/restructure/src/String.js +++ /dev/null @@ -1,155 +0,0 @@ -import {Base} from './Base.js'; -import {Number as NumberT} from './Number.js'; -import * as utils from './utils.js'; - -class StringT extends Base { - constructor(length, encoding = 'ascii') { - super(); - this.length = length; - this.encoding = encoding; - } - - decode(stream, parent) { - let length, pos; - - let { encoding } = this; - if (typeof encoding === 'function') { - encoding = encoding.call(parent, parent) || 'ascii'; - } - let width = encodingWidth(encoding); - - if (this.length != null) { - length = utils.resolveLength(this.length, stream, parent); - } else { - let buffer; - ({buffer, length, pos} = stream); - - while ((pos < length - width + 1) && - (buffer[pos] !== 0x00 || - (width === 2 && buffer[pos+1] !== 0x00) - )) { - pos += width; - } - - length = pos - stream.pos; - } - - - const string = stream.readString(length, encoding); - - if ((this.length == null) && (stream.pos < stream.length)) { - stream.pos+=width; - } - - return string; - } - - size(val, parent) { - // Use the defined value if no value was given - if (val === undefined || val === null) { - return utils.resolveLength(this.length, null, parent); - } - - let { encoding } = this; - if (typeof encoding === 'function') { - encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii'; - } - - if (encoding === 'utf16be') { - encoding = 'utf16le'; - } - - let size = byteLength(val, encoding); - if (this.length instanceof NumberT) { - size += this.length.size(); - } - - if ((this.length == null)) { - size += encodingWidth(encoding); - } - - return size; - } - - encode(stream, val, parent) { - let { encoding } = this; - if (typeof encoding === 'function') { - encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii'; - } - - if (this.length instanceof NumberT) { - this.length.encode(stream, byteLength(val, encoding)); - } - - stream.writeString(val, encoding); - - if ((this.length == null)) { - return encodingWidth(encoding) == 2 ? - stream.writeUInt16LE(0x0000) : - stream.writeUInt8(0x00); - } - } -} - -function encodingWidth(encoding) { - switch(encoding) { - case 'ascii': - case 'utf8': // utf8 is a byte-based encoding for zero-term string - return 1; - case 'utf16le': - case 'utf16-le': - case 'utf-16be': - case 'utf-16le': - case 'utf16be': - case 'utf16-be': - case 'ucs2': - return 2; - default: - //TODO: assume all other encodings are 1-byters - //throw new Error('Unknown encoding ' + encoding); - return 1; - } -} - -function byteLength(string, encoding) { - switch (encoding) { - case 'ascii': - return string.length; - case 'utf8': - let len = 0; - for (let i = 0; i < string.length; i++) { - let c = string.charCodeAt(i); - - if (c >= 0xd800 && c <= 0xdbff && i < string.length - 1) { - let c2 = string.charCodeAt(++i); - if ((c2 & 0xfc00) === 0xdc00) { - c = ((c & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000; - } else { - // unmatched surrogate. - i--; - } - } - - if ((c & 0xffffff80) === 0) { - len++; - } else if ((c & 0xfffff800) === 0) { - len += 2; - } else if ((c & 0xffff0000) === 0) { - len += 3; - } else if ((c & 0xffe00000) === 0) { - len += 4; - } - } - return len; - case 'utf16le': - case 'utf16-le': - case 'utf16be': - case 'utf16-be': - case 'ucs2': - return string.length * 2; - default: - throw new Error('Unknown encoding ' + encoding); - } -} - -export {StringT as String}; diff --git a/skills/flight-finder/node_modules/restructure/src/Struct.js b/skills/flight-finder/node_modules/restructure/src/Struct.js deleted file mode 100644 index 335eaf1..0000000 --- a/skills/flight-finder/node_modules/restructure/src/Struct.js +++ /dev/null @@ -1,113 +0,0 @@ -import {Base} from './Base.js'; -import * as utils from './utils.js'; - -export class Struct extends Base { - constructor(fields = {}) { - super(); - this.fields = fields; - } - - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - this._parseFields(stream, res, this.fields); - - if (this.process != null) { - this.process.call(res, stream); - } - return res; - } - - _setup(stream, parent, length) { - const res = {}; - - // define hidden properties - Object.defineProperties(res, { - parent: { value: parent }, - _startOffset: { value: stream.pos }, - _currentOffset: { value: 0, writable: true }, - _length: { value: length } - }); - - return res; - } - - _parseFields(stream, res, fields) { - for (let key in fields) { - var val; - const type = fields[key]; - if (typeof type === 'function') { - val = type.call(res, res); - } else { - val = type.decode(stream, res); - } - - if (val !== undefined) { - if (val instanceof utils.PropertyDescriptor) { - Object.defineProperty(res, key, val); - } else { - res[key] = val; - } - } - - res._currentOffset = stream.pos - res._startOffset; - } - - } - - size(val, parent, includePointers = true) { - if (val == null) { val = {}; } - const ctx = { - parent, - val, - pointerSize: 0 - }; - - if (this.preEncode != null) { - this.preEncode.call(val); - } - - let size = 0; - for (let key in this.fields) { - const type = this.fields[key]; - if (type.size != null) { - size += type.size(val[key], ctx); - } - } - - if (includePointers) { - size += ctx.pointerSize; - } - - return size; - } - - encode(stream, val, parent) { - let type; - if (this.preEncode != null) { - this.preEncode.call(val, stream); - } - - const ctx = { - pointers: [], - startOffset: stream.pos, - parent, - val, - pointerSize: 0 - }; - - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - - for (let key in this.fields) { - type = this.fields[key]; - if (type.encode != null) { - type.encode(stream, val[key], ctx); - } - } - - let i = 0; - while (i < ctx.pointers.length) { - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/VersionedStruct.js b/skills/flight-finder/node_modules/restructure/src/VersionedStruct.js deleted file mode 100644 index 36730fe..0000000 --- a/skills/flight-finder/node_modules/restructure/src/VersionedStruct.js +++ /dev/null @@ -1,139 +0,0 @@ -import {Struct} from './Struct.js'; - -const getPath = (object, pathArray) => { - return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object); -}; - -export class VersionedStruct extends Struct { - constructor(type, versions = {}) { - super(); - this.type = type; - this.versions = versions; - if (typeof type === 'string') { - this.versionPath = type.split('.'); - } - } - - decode(stream, parent, length = 0) { - const res = this._setup(stream, parent, length); - - if (typeof this.type === 'string') { - res.version = getPath(parent, this.versionPath); - } else { - res.version = this.type.decode(stream); - } - - if (this.versions.header) { - this._parseFields(stream, res, this.versions.header); - } - - const fields = this.versions[res.version]; - if ((fields == null)) { - throw new Error(`Unknown version ${res.version}`); - } - - if (fields instanceof VersionedStruct) { - return fields.decode(stream, parent); - } - - this._parseFields(stream, res, fields); - - if (this.process != null) { - this.process.call(res, stream); - } - return res; - } - - size(val, parent, includePointers = true) { - let key, type; - if (!val) { - throw new Error('Not a fixed size'); - } - - if (this.preEncode != null) { - this.preEncode.call(val); - } - - const ctx = { - parent, - val, - pointerSize: 0 - }; - - let size = 0; - if (typeof this.type !== 'string') { - size += this.type.size(val.version, ctx); - } - - if (this.versions.header) { - for (key in this.versions.header) { - type = this.versions.header[key]; - if (type.size != null) { - size += type.size(val[key], ctx); - } - } - } - - const fields = this.versions[val.version]; - if ((fields == null)) { - throw new Error(`Unknown version ${val.version}`); - } - - for (key in fields) { - type = fields[key]; - if (type.size != null) { - size += type.size(val[key], ctx); - } - } - - if (includePointers) { - size += ctx.pointerSize; - } - - return size; - } - - encode(stream, val, parent) { - let key, type; - if (this.preEncode != null) { - this.preEncode.call(val, stream); - } - - const ctx = { - pointers: [], - startOffset: stream.pos, - parent, - val, - pointerSize: 0 - }; - - ctx.pointerOffset = stream.pos + this.size(val, ctx, false); - - if (typeof this.type !== 'string') { - this.type.encode(stream, val.version); - } - - if (this.versions.header) { - for (key in this.versions.header) { - type = this.versions.header[key]; - if (type.encode != null) { - type.encode(stream, val[key], ctx); - } - } - } - - const fields = this.versions[val.version]; - for (key in fields) { - type = fields[key]; - if (type.encode != null) { - type.encode(stream, val[key], ctx); - } - } - - let i = 0; - while (i < ctx.pointers.length) { - const ptr = ctx.pointers[i++]; - ptr.type.encode(stream, ptr.val, ptr.parent); - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/src/utils.js b/skills/flight-finder/node_modules/restructure/src/utils.js deleted file mode 100644 index 08744ec..0000000 --- a/skills/flight-finder/node_modules/restructure/src/utils.js +++ /dev/null @@ -1,35 +0,0 @@ -import {Number as NumberT} from './Number.js'; - -export function resolveLength(length, stream, parent) { - let res; - if (typeof length === 'number') { - res = length; - - } else if (typeof length === 'function') { - res = length.call(parent, parent); - - } else if (parent && (typeof length === 'string')) { - res = parent[length]; - - } else if (stream && length instanceof NumberT) { - res = length.decode(stream); - } - - if (isNaN(res)) { - throw new Error('Not a fixed size'); - } - - return res; -}; - -export class PropertyDescriptor { - constructor(opts = {}) { - this.enumerable = true; - this.configurable = true; - - for (let key in opts) { - const val = opts[key]; - this[key] = val; - } - } -} diff --git a/skills/flight-finder/node_modules/restructure/test/Array.js b/skills/flight-finder/node_modules/restructure/test/Array.js deleted file mode 100644 index bdf5fac..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Array.js +++ /dev/null @@ -1,103 +0,0 @@ -import assert from 'assert'; -import {Array as ArrayT, Pointer, uint8, uint16, DecodeStream, EncodeStream} from 'restructure'; - -describe('Array', function() { - describe('decode', function() { - it('should decode fixed length', function() { - const buffer = new Uint8Array([1, 2, 3, 4, 5]); - const array = new ArrayT(uint8, 4); - assert.deepEqual(array.fromBuffer(buffer), [1, 2, 3, 4]); - }); - - it('should decode fixed amount of bytes', function() { - const buffer = new Uint8Array([1, 2, 3, 4, 5]); - const array = new ArrayT(uint16, 4, 'bytes'); - assert.deepEqual(array.fromBuffer(buffer), [258, 772]); - }); - - it('should decode length from parent key', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new ArrayT(uint8, 'len'); - assert.deepEqual(array.decode(stream, {len: 4}), [1, 2, 3, 4]); - }); - - it('should decode amount of bytes from parent key', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new ArrayT(uint16, 'len', 'bytes'); - assert.deepEqual(array.decode(stream, {len: 4}), [258, 772]); - }); - - it('should decode length as number before array', function() { - const buffer = new Uint8Array([4, 1, 2, 3, 4, 5]); - const array = new ArrayT(uint8, uint8); - assert.deepEqual(array.fromBuffer(buffer), [1, 2, 3, 4]); - }); - - it('should decode amount of bytes as number before array', function() { - const buffer = new Uint8Array([4, 1, 2, 3, 4, 5]); - const array = new ArrayT(uint16, uint8, 'bytes'); - assert.deepEqual(array.fromBuffer(buffer), [258, 772]); - }); - - it('should decode length from function', function() { - const buffer = new Uint8Array([1, 2, 3, 4, 5]); - const array = new ArrayT(uint8, function() { return 4; }); - assert.deepEqual(array.fromBuffer(buffer), [1, 2, 3, 4]); - }); - - it('should decode amount of bytes from function', function() { - const buffer = new Uint8Array([1, 2, 3, 4, 5]); - const array = new ArrayT(uint16, (function() { return 4; }), 'bytes'); - assert.deepEqual(array.fromBuffer(buffer), [258, 772]); - }); - - it('should decode to the end of the parent if no length is given', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new ArrayT(uint8); - assert.deepEqual(array.decode(stream, {_length: 4, _startOffset: 0}), [1, 2, 3, 4]); - }); - - it('should decode to the end of the stream if no parent and length is given', function() { - const buffer = new Uint8Array([1, 2, 3, 4]); - const array = new ArrayT(uint8); - assert.deepEqual(array.fromBuffer(buffer), [1, 2, 3, 4]); - }); - }); - - describe('size', function() { - it('should use array length', function() { - const array = new ArrayT(uint8, 10); - assert.equal(array.size([1, 2, 3, 4]), 4); - }); - - it('should add size of length field before string', function() { - const array = new ArrayT(uint8, uint8); - assert.equal(array.size([1, 2, 3, 4]), 5); - }); - - it('should use defined length if no value given', function() { - const array = new ArrayT(uint8, 10); - assert.equal(array.size(), 10); - }); - }); - - describe('encode', function() { - it('should encode using array length', function() { - const array = new ArrayT(uint8, 10); - const buffer = array.toBuffer([1, 2, 3, 4]); - assert.deepEqual(buffer, new Uint8Array([1, 2, 3, 4])); - }); - - it('should encode length as number before array', function() { - const array = new ArrayT(uint8, uint8); - const buffer = array.toBuffer([1, 2, 3, 4]); - assert.deepEqual(buffer, new Uint8Array([4, 1, 2, 3, 4])); - }); - - it('should add pointers after array if length is encoded at start', function() { - const array = new ArrayT(new Pointer(uint8, uint8), uint8); - const buffer = array.toBuffer([1, 2, 3, 4]); - assert.deepEqual(buffer, new Uint8Array([4, 5, 6, 7, 8, 1, 2, 3, 4])); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Bitfield.js b/skills/flight-finder/node_modules/restructure/test/Bitfield.js deleted file mode 100644 index 6cef0f8..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Bitfield.js +++ /dev/null @@ -1,29 +0,0 @@ -import assert from 'assert'; -import {Bitfield, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Bitfield', function() { - const bitfield = new Bitfield(uint8, ['Jack', 'Kack', 'Lack', 'Mack', 'Nack', 'Oack', 'Pack', 'Quack']); - const JACK = 1 << 0; - const KACK = 1 << 1; - const LACK = 1 << 2; - const MACK = 1 << 3; - const NACK = 1 << 4; - const OACK = 1 << 5; - const PACK = 1 << 6; - const QUACK = 1 << 7; - - it('should have the right size', () => assert.equal(bitfield.size(), 1)); - - it('should decode', function() { - const buffer = new Uint8Array([JACK | MACK | PACK | NACK | QUACK]); - assert.deepEqual( - bitfield.fromBuffer(buffer), - {Jack: true, Kack: false, Lack: false, Mack: true, Nack: true, Oack: false, Pack: true, Quack: true} - ); - }); - - it('should encode', function() { - let buffer = bitfield.toBuffer({Jack: true, Kack: false, Lack: false, Mack: true, Nack: true, Oack: false, Pack: true, Quack: true}); - assert.deepEqual(buffer, Buffer.from([JACK | MACK | PACK | NACK | QUACK])); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Boolean.js b/skills/flight-finder/node_modules/restructure/test/Boolean.js deleted file mode 100644 index 7a9096f..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Boolean.js +++ /dev/null @@ -1,39 +0,0 @@ -import assert from 'assert'; -import {Boolean, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Boolean', function() { - describe('decode', function() { - it('should decode 0 as false', function() { - const buffer = new Uint8Array([0]); - const boolean = new Boolean(uint8); - assert.deepEqual(boolean.fromBuffer(buffer), false); - }); - - it('should decode 1 as true', function() { - const buffer = new Uint8Array([1]); - const boolean = new Boolean(uint8); - assert.deepEqual(boolean.fromBuffer(buffer), true); - }); - }); - - describe('size', () => - it('should return given type size', function() { - const boolean = new Boolean(uint8); - assert.deepEqual(boolean.size(), 1); - }) - ); - - describe('encode', function() { - it('should encode false as 0', function() { - const boolean = new Boolean(uint8); - const buffer = boolean.toBuffer(false); - assert.deepEqual(buffer, Buffer.from([0])); - }); - - it('should encode true as 1', function() { - const boolean = new Boolean(uint8); - const buffer = boolean.toBuffer(true); - assert.deepEqual(buffer, Buffer.from([1])); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Buffer.js b/skills/flight-finder/node_modules/restructure/test/Buffer.js deleted file mode 100644 index 70f4536..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Buffer.js +++ /dev/null @@ -1,45 +0,0 @@ -import assert from 'assert'; -import {Buffer as BufferT, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Buffer', function() { - describe('decode', function() { - it('should decode', function() { - const buffer = new Uint8Array([0xab, 0xff]); - const buf = new BufferT(2); - assert.deepEqual(buf.fromBuffer(buffer), new Uint8Array([0xab, 0xff])); - }); - - it('should decode with parent key length', function() { - const stream = new DecodeStream(new Uint8Array([0xab, 0xff, 0x1f, 0xb6])); - const buf = new BufferT('len'); - assert.deepEqual(buf.decode(stream, {len: 3}), new Uint8Array([0xab, 0xff, 0x1f])); - assert.deepEqual(buf.decode(stream, {len: 1}), new Uint8Array([0xb6])); - }); -}); - - describe('size', function() { - it('should return size', function() { - const buf = new BufferT(2); - assert.equal(buf.size(new Uint8Array([0xab, 0xff])), 2); - }); - - it('should use defined length if no value given', function() { - const array = new BufferT(10); - assert.equal(array.size(), 10); - }); - }); - - describe('encode', function() { - it('should encode', function() { - const buf = new BufferT(2); - const buffer = buf.toBuffer(new Uint8Array([0xab, 0xff])); - assert.deepEqual(buffer, new Uint8Array([0xab, 0xff])); - }); - - it('should encode length before buffer', function() { - const buf = new BufferT(uint8); - const buffer = buf.toBuffer(new Uint8Array([0xab, 0xff])); - assert.deepEqual(buffer, new Uint8Array([2, 0xab, 0xff])); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/DecodeStream.js b/skills/flight-finder/node_modules/restructure/test/DecodeStream.js deleted file mode 100644 index 52f0b63..0000000 --- a/skills/flight-finder/node_modules/restructure/test/DecodeStream.js +++ /dev/null @@ -1,101 +0,0 @@ -import {DecodeStream} from 'restructure'; -import assert from 'assert'; - -describe('DecodeStream', function() { - it('should read a buffer', function() { - const buf = new Uint8Array([1,2,3]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readBuffer(buf.length), new Uint8Array([1,2,3])); - }); - - it('should readUInt16BE', function() { - const buf = new Uint8Array([0xab, 0xcd]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readUInt16BE(), 0xabcd); - }); - - it('should readUInt16LE', function() { - const buf = new Uint8Array([0xab, 0xcd]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readUInt16LE(), 0xcdab); - }); - - it('should readUInt24BE', function() { - const buf = new Uint8Array([0xab, 0xcd, 0xef]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readUInt24BE(), 0xabcdef); - }); - - it('should readUInt24LE', function() { - const buf = new Uint8Array([0xab, 0xcd, 0xef]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readUInt24LE(), 0xefcdab); - }); - - it('should readInt24BE', function() { - const buf = new Uint8Array([0xff, 0xab, 0x24]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readInt24BE(), -21724); - }); - - it('should readInt24LE', function() { - const buf = new Uint8Array([0x24, 0xab, 0xff]); - const stream = new DecodeStream(buf); - assert.deepEqual(stream.readInt24LE(), -21724); - }); - - describe('readString', function() { - it('should decode ascii by default', function() { - const buf = Buffer.from('some text', 'ascii'); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length), 'some text'); - }); - - it('should decode ascii', function() { - const buf = Buffer.from('some text', 'ascii'); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'ascii'), 'some text'); - }); - - it('should decode utf8', function() { - const buf = Buffer.from('unicode! 👍', 'utf8'); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'utf8'), 'unicode! 👍'); - }); - - it('should decode utf16le', function() { - const buf = Buffer.from('unicode! 👍', 'utf16le'); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'utf16le'), 'unicode! 👍'); - }); - - it('should decode ucs2', function() { - const buf = Buffer.from('unicode! 👍', 'ucs2'); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'ucs2'), 'unicode! 👍'); - }); - - it('should decode utf16be', function() { - const buf = Buffer.from('unicode! 👍', 'utf16le'); - for (let i = 0, end = buf.length - 1; i < end; i += 2) { - const byte = buf[i]; - buf[i] = buf[i + 1]; - buf[i + 1] = byte; - } - - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'utf16be'), 'unicode! 👍'); - }); - - it('should decode macroman', function() { - const buf = new Uint8Array([0x8a, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x63, 0x68, 0x87, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73]); - const stream = new DecodeStream(buf); - assert.equal(stream.readString(buf.length, 'mac'), 'äccented cháracters'); - }); - - it('should return a buffer for unsupported encodings', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3])); - assert.deepEqual(stream.readString(3, 'unsupported'), new Uint8Array([1, 2, 3])); - }); -}); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/EncodeStream.js b/skills/flight-finder/node_modules/restructure/test/EncodeStream.js deleted file mode 100644 index ecdd6c7..0000000 --- a/skills/flight-finder/node_modules/restructure/test/EncodeStream.js +++ /dev/null @@ -1,104 +0,0 @@ -import {EncodeStream} from 'restructure'; -import assert from 'assert'; - -describe('EncodeStream', function() { - it('should write a buffer', function() { - const stream = new EncodeStream(new Uint8Array(3)); - stream.writeBuffer(new Uint8Array([1,2,3])); - assert.deepEqual(stream.buffer, new Uint8Array([1,2,3])); - }); - - it('should writeUInt16BE', function() { - const stream = new EncodeStream(new Uint8Array(2)); - stream.writeUInt16BE(0xabcd); - assert.deepEqual(stream.buffer, new Uint8Array([0xab, 0xcd])); - }); - - it('should writeUInt16LE', function() { - const stream = new EncodeStream(new Uint8Array(2)); - stream.writeUInt16LE(0xcdab); - assert.deepEqual(stream.buffer, new Uint8Array([0xab, 0xcd])); - }); - - it('should writeUInt24BE', function() { - const stream = new EncodeStream(new Uint8Array(3)); - stream.writeUInt24BE(0xabcdef); - assert.deepEqual(stream.buffer, new Uint8Array([0xab, 0xcd, 0xef])); - }); - - it('should writeUInt24LE', function() { - const stream = new EncodeStream(new Uint8Array(3)); - stream.writeUInt24LE(0xabcdef); - assert.deepEqual(stream.buffer, new Uint8Array([0xef, 0xcd, 0xab])); - }); - - it('should writeInt24BE', function() { - const stream = new EncodeStream(new Uint8Array(6)); - stream.writeInt24BE(-21724); - stream.writeInt24BE(0xabcdef); - assert.deepEqual(stream.buffer, new Uint8Array([0xff, 0xab, 0x24, 0xab, 0xcd, 0xef])); - }); - - it('should writeInt24LE', function() { - const stream = new EncodeStream(new Uint8Array(6)); - stream.writeInt24LE(-21724); - stream.writeInt24LE(0xabcdef); - assert.deepEqual(stream.buffer, new Uint8Array([0x24, 0xab, 0xff, 0xef, 0xcd, 0xab])); - }); - - it('should fill', function() { - const stream = new EncodeStream(new Uint8Array(5)); - stream.fill(10, 5); - assert.deepEqual(stream.buffer, new Uint8Array([10, 10, 10, 10, 10])); - }); - - describe('writeString', function() { - it('should encode ascii by default', function() { - const expected = Buffer.from('some text', 'ascii'); - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('some text'); - assert.deepEqual(stream.buffer, expected); - }); - - it('should encode ascii', function() { - const expected = Buffer.from('some text', 'ascii'); - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('some text', 'ascii'); - assert.deepEqual(stream.buffer, expected); - }); - - it('should encode utf8', function() { - const expected = Buffer.from('unicode! 👍', 'utf8'); - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('unicode! 👍', 'utf8'); - assert.deepEqual(stream.buffer, expected); - }); - - it('should encode utf16le', function() { - const expected = Buffer.from('unicode! 👍', 'utf16le'); - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('unicode! 👍', 'utf16le'); - assert.deepEqual(stream.buffer, expected); - }); - - it('should encode ucs2', function() { - const expected = Buffer.from('unicode! 👍', 'ucs2'); - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('unicode! 👍', 'ucs2'); - assert.deepEqual(stream.buffer, expected); - }); - - it('should encode utf16be', function() { - const expected = Buffer.from('unicode! 👍', 'utf16le'); - for (let i = 0, end = expected.length - 1; i < end; i += 2) { - const byte = expected[i]; - expected[i] = expected[i + 1]; - expected[i + 1] = byte; - } - - const stream = new EncodeStream(new Uint8Array(expected.length)); - stream.writeString('unicode! 👍', 'utf16be'); - assert.deepEqual(stream.buffer, expected); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Enum.js b/skills/flight-finder/node_modules/restructure/test/Enum.js deleted file mode 100644 index 2febf13..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Enum.js +++ /dev/null @@ -1,24 +0,0 @@ -import assert from 'assert'; -import {Enum, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Enum', function() { - const e = new Enum(uint8, ['foo', 'bar', 'baz']); - it('should have the right size', () => assert.equal(e.size(), 1)); - - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 0])); - assert.equal(e.decode(stream), 'bar'); - assert.equal(e.decode(stream), 'baz'); - assert.equal(e.decode(stream), 'foo'); - }); - - it('should encode', function() { - assert.deepEqual(e.toBuffer('bar'), new Uint8Array([1])); - assert.deepEqual(e.toBuffer('baz'), new Uint8Array([2])); - assert.deepEqual(e.toBuffer('foo'), new Uint8Array([0])); - }); - - it('should throw on unknown option', function() { - return assert.throws(() => e.toBuffer('unknown')); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/LazyArray.js b/skills/flight-finder/node_modules/restructure/test/LazyArray.js deleted file mode 100644 index 73f1e22..0000000 --- a/skills/flight-finder/node_modules/restructure/test/LazyArray.js +++ /dev/null @@ -1,59 +0,0 @@ -import assert from 'assert'; -import {LazyArray, Pointer, uint8, uint16, DecodeStream, EncodeStream} from 'restructure'; - -describe('LazyArray', function() { - describe('decode', function() { - it('should decode items lazily', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new LazyArray(uint8, 4); - - const arr = array.decode(stream); - assert(!(arr instanceof Array)); - assert.equal(arr.length, 4); - assert.equal(stream.pos, 4); - - assert.equal(arr.get(0), 1); - assert.equal(arr.get(1), 2); - assert.equal(arr.get(2), 3); - assert.equal(arr.get(3), 4); - - assert.equal(arr.get(-1), null); - assert.equal(arr.get(5), null); - }); - - it('should be able to convert to an array', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new LazyArray(uint8, 4); - - const arr = array.decode(stream); - assert.deepEqual(arr.toArray(), [1, 2, 3, 4]); - }); - - it('should decode length as number before array', function() { - const stream = new DecodeStream(new Uint8Array([4, 1, 2, 3, 4, 5])); - const array = new LazyArray(uint8, uint8); - const arr = array.decode(stream); - - assert.deepEqual(arr.toArray(), [1, 2, 3, 4]); - }); - }); - - describe('size', () => - it('should work with LazyArrays', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5])); - const array = new LazyArray(uint8, 4); - const arr = array.decode(stream); - - assert.equal(array.size(arr), 4); - }) - ); - - describe('encode', () => - it('should work with LazyArrays', function() { - const array = new LazyArray(uint8, 4); - const arr = array.fromBuffer(new Uint8Array([1, 2, 3, 4, 5])); - const buffer = array.toBuffer(arr); - assert.deepEqual(buffer, new Uint8Array([1, 2, 3, 4])); - }) - ); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Number.js b/skills/flight-finder/node_modules/restructure/test/Number.js deleted file mode 100644 index 6c74fa9..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Number.js +++ /dev/null @@ -1,356 +0,0 @@ -import { - uint8, - uint16, uint16be, uint16le, - uint24, uint24be, uint24le, - uint32, uint32be, uint32le, - int8, - int16, int16be, int16le, - int24, int24be, int24le, - int32, int32be, int32le, - float, floatbe, floatle, - double, doublebe, doublele, - fixed16, fixed16be, fixed16le, - fixed32, fixed32be, fixed32le, - DecodeStream, EncodeStream -} from 'restructure'; -import assert from 'assert'; - -describe('Number', function() { - describe('uint8', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xab, 0xff])); - assert.equal(uint8.decode(stream), 0xab); - assert.equal(uint8.decode(stream), 0xff); - }); - - it('should have a size', () => assert.equal(uint8.size(), 1)); - - it('should encode', function() { - assert.deepEqual(uint8.toBuffer(0xab), new Uint8Array([0xab])); - assert.deepEqual(uint8.toBuffer(0xff), new Uint8Array([0xff])); - }); - }); - - describe('uint16', () => - it('is an alias for uint16be', () => assert.deepEqual(uint16, uint16be)) - ); - - describe('uint16be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xab, 0xff])); - assert.equal(uint16be.decode(stream), 0xabff); - }); - - it('should have a size', () => assert.equal(uint16be.size(), 2)); - - it('should encode', function() { - assert.deepEqual(uint16be.toBuffer(0xabff), new Uint8Array([0xab, 0xff])); - }); - }); - - describe('uint16le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab])); - assert.equal(uint16le.decode(stream), 0xabff); - }); - - it('should have a size', () => assert.equal(uint16le.size(), 2)); - - it('should encode', function() { - assert.deepEqual(uint16le.toBuffer(0xabff), new Uint8Array([0xff, 0xab])); - }); - }); - - describe('uint24', () => - it('is an alias for uint24be', () => assert.deepEqual(uint24, uint24be)) - ); - - describe('uint24be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab, 0x24])); - assert.equal(uint24be.decode(stream), 0xffab24); - }); - - it('should have a size', () => assert.equal(uint24be.size(), 3)); - - it('should encode', function() { - assert.deepEqual(uint24be.toBuffer(0xffab24), new Uint8Array([0xff, 0xab, 0x24])); - }); - }); - - describe('uint24le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0x24, 0xab, 0xff])); - assert.equal(uint24le.decode(stream), 0xffab24); - }); - - it('should have a size', () => assert.equal(uint24le.size(), 3)); - - it('should encode', function() { - assert.deepEqual(uint24le.toBuffer(0xffab24), new Uint8Array([0x24, 0xab, 0xff])); - }); - }); - - describe('uint32', () => - it('is an alias for uint32be', () => assert.deepEqual(uint32, uint32be)) - ); - - describe('uint32be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab, 0x24, 0xbf])); - assert.equal(uint32be.decode(stream), 0xffab24bf); - }); - - it('should have a size', () => assert.equal(uint32be.size(), 4)); - - it('should encode', function() { - assert.deepEqual(uint32be.toBuffer(0xffab24bf), new Uint8Array([0xff, 0xab, 0x24, 0xbf])); - }); - }); - - describe('uint32le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xbf, 0x24, 0xab, 0xff])); - assert.equal(uint32le.decode(stream), 0xffab24bf); - }); - - it('should have a size', () => assert.equal(uint32le.size(), 4)); - - it('should encode', function() { - assert.deepEqual(uint32le.toBuffer(0xffab24bf), new Uint8Array([0xbf, 0x24, 0xab, 0xff])); - }); - }); - - describe('int8', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0x7f, 0xff])); - assert.equal(int8.decode(stream), 127); - assert.equal(int8.decode(stream), -1); - }); - - it('should have a size', () => assert.equal(int8.size(), 1)); - - it('should encode', function() { - assert.deepEqual(uint8.toBuffer(127), new Uint8Array([0x7f])); - assert.deepEqual(uint8.toBuffer(-1), new Uint8Array([0xff])); - }); - }); - - describe('int16', () => - it('is an alias for int16be', () => assert.deepEqual(int16, int16be)) - ); - - describe('int16be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab])); - assert.equal(int16be.decode(stream), -85); - }); - - it('should have a size', () => assert.equal(int16be.size(), 2)); - - it('should encode', function() { - assert.deepEqual(int16be.toBuffer(-85), new Uint8Array([0xff, 0xab])); - }); - }); - - describe('int16le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xab, 0xff])); - assert.equal(int16le.decode(stream), -85); - }); - - it('should have a size', () => assert.equal(int16le.size(), 2)); - - it('should encode', function() { - assert.deepEqual(int16le.toBuffer(-85), new Uint8Array([0xab, 0xff])); - }); - }); - - describe('int24', () => - it('is an alias for int24be', () => assert.deepEqual(int24, int24be)) - ); - - describe('int24be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab, 0x24])); - assert.equal(int24be.decode(stream), -21724); - }); - - it('should have a size', () => assert.equal(int24be.size(), 3)); - - it('should encode', function() { - assert.deepEqual(int24be.toBuffer(-21724), new Uint8Array([0xff, 0xab, 0x24])); - }); - }); - - describe('int24le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0x24, 0xab, 0xff])); - assert.equal(int24le.decode(stream), -21724); - }); - - it('should have a size', () => assert.equal(int24le.size(), 3)); - - it('should encode', function() { - assert.deepEqual(int24le.toBuffer(-21724), new Uint8Array([0x24, 0xab, 0xff])); - }); - }); - - describe('int32', () => - it('is an alias for int32be', () => assert.deepEqual(int32, int32be)) - ); - - describe('int32be', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xff, 0xab, 0x24, 0xbf])); - assert.equal(int32be.decode(stream), -5561153); - }); - - it('should have a size', () => assert.equal(int32be.size(), 4)); - - it('should encode', function() { - assert.deepEqual(int32be.toBuffer(-5561153), new Uint8Array([0xff, 0xab, 0x24, 0xbf])); - }); - }); - - describe('int32le', function() { - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0xbf, 0x24, 0xab, 0xff])); - assert.equal(int32le.decode(stream), -5561153); - }); - - it('should have a size', () => assert.equal(int32le.size(), 4)); - - it('should encode', function() { - assert.deepEqual(int32le.toBuffer(-5561153), new Uint8Array([0xbf, 0x24, 0xab, 0xff])); - }); - }); - - describe('float', () => - it('is an alias for floatbe', () => assert.deepEqual(float, floatbe)) - ); - - describe('floatbe', function() { - it('should decode', function() { - const value = floatbe.fromBuffer(new Uint8Array([0x43, 0x7a, 0x8c, 0xcd])); - assert(value >= 250.55 - 0.005); - assert(value <= 250.55 + 0.005); - }); - - it('should have a size', () => assert.equal(floatbe.size(), 4)); - - it('should encode', function() { - assert.deepEqual(floatbe.toBuffer(250.55), new Uint8Array([0x43, 0x7a, 0x8c, 0xcd])); - }); - }); - - describe('floatle', function() { - it('should decode', function() { - const value = floatle.fromBuffer(new Uint8Array([0xcd, 0x8c, 0x7a, 0x43])); - assert(value >= 250.55 - 0.005); - assert(value <= 250.55 + 0.005); - }); - - it('should have a size', () => assert.equal(floatle.size(), 4)); - - it('should encode', function() { - assert.deepEqual(floatle.toBuffer(250.55), new Uint8Array([0xcd, 0x8c, 0x7a, 0x43])); - }); - }); - - describe('double', () => - it('is an alias for doublebe', () => assert.deepEqual(double, doublebe)) - ); - - describe('doublebe', function() { - it('should decode', function() { - const value = doublebe.fromBuffer(new Uint8Array([0x40, 0x93, 0x4a, 0x3d, 0x70, 0xa3, 0xd7, 0x0a])); - assert(value >= 1234.56 - 0.005); - assert(value <= 1234.56 + 0.005); - }); - - it('should have a size', () => assert.equal(doublebe.size(), 8)); - - it('should encode', function() { - assert.deepEqual(doublebe.toBuffer(1234.56), new Uint8Array([0x40, 0x93, 0x4a, 0x3d, 0x70, 0xa3, 0xd7, 0x0a])); - }); - }); - - describe('doublele', function() { - it('should decode', function() { - const value = doublele.fromBuffer(new Uint8Array([0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x4a, 0x93, 0x40])); - assert(value >= 1234.56 - 0.005); - assert(value <= 1234.56 + 0.005); - }); - - it('should have a size', () => assert.equal(doublele.size(), 8)); - - it('should encode', function() { - assert.deepEqual(doublele.toBuffer(1234.56), new Uint8Array([0x0a, 0xd7, 0xa3, 0x70, 0x3d, 0x4a, 0x93, 0x40])); - }); - }); - - describe('fixed16', () => - it('is an alias for fixed16be', () => assert.deepEqual(fixed16, fixed16be)) - ); - - describe('fixed16be', function() { - it('should decode', function() { - const value = fixed16be.fromBuffer(new Uint8Array([0x19, 0x57])); - assert(value >= 25.34 - 0.005); - assert(value <= 25.34 + 0.005); - }); - - it('should have a size', () => assert.equal(fixed16be.size(), 2)); - - it('should encode', function() { - assert.deepEqual(fixed16be.toBuffer(25.34), new Uint8Array([0x19, 0x57])); - }); - }); - - describe('fixed16le', function() { - it('should decode', function() { - const value = fixed16le.fromBuffer(new Uint8Array([0x57, 0x19])); - assert(value >= 25.34 - 0.005); - assert(value <= 25.34 + 0.005); - }); - - it('should have a size', () => assert.equal(fixed16le.size(), 2)); - - it('should encode', function() { - assert.deepEqual(fixed16le.toBuffer(25.34), new Uint8Array([0x57, 0x19])); - }); - }); - - describe('fixed32', () => - it('is an alias for fixed32be', () => assert.deepEqual(fixed32, fixed32be)) - ); - - describe('fixed32be', function() { - it('should decode', function() { - const value = fixed32be.fromBuffer(new Uint8Array([0x00, 0xfa, 0x8c, 0xcc])); - assert(value >= 250.55 - 0.005); - assert(value <= 250.55 + 0.005); - }); - - it('should have a size', () => assert.equal(fixed32be.size(), 4)); - - it('should encode', function() { - assert.deepEqual(fixed32be.toBuffer(250.55), new Uint8Array([0x00, 0xfa, 0x8c, 0xcc])); - }); - }); - - describe('fixed32le', function() { - it('should decode', function() { - const value = fixed32le.fromBuffer(new Uint8Array([0xcc, 0x8c, 0xfa, 0x00])); - assert(value >= 250.55 - 0.005); - assert(value <= 250.55 + 0.005); - }); - - it('should have a size', () => assert.equal(fixed32le.size(), 4)); - - it('should encode', function() { - assert.deepEqual(fixed32le.toBuffer(250.55), new Uint8Array([0xcc, 0x8c, 0xfa, 0x00])); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Optional.js b/skills/flight-finder/node_modules/restructure/test/Optional.js deleted file mode 100644 index 78b5a76..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Optional.js +++ /dev/null @@ -1,100 +0,0 @@ -import assert from 'assert'; -import {Optional, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Optional', function() { - describe('decode', function() { - it('should not decode when condition is falsy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, false); - assert.equal(optional.decode(stream), null); - assert.equal(stream.pos, 0); - }); - - it('should not decode when condition is a function and falsy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, function() { return false; }); - assert.equal(optional.decode(stream), null); - assert.equal(stream.pos, 0); - }); - - it('should decode when condition is omitted', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8); - assert(optional.decode(stream) != null); - assert.equal(stream.pos, 1); - }); - - it('should decode when condition is truthy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, true); - assert(optional.decode(stream) != null); - assert.equal(stream.pos, 1); - }); - - it('should decode when condition is a function and truthy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, function() { return true; }); - assert(optional.decode(stream) != null); - assert.equal(stream.pos, 1); - }); - }); - - describe('size', function() { - it('should return 0 when condition is falsy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, false); - assert.equal(optional.size(), 0); - }); - - it('should return 0 when condition is a function and falsy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, function() { return false; }); - assert.equal(optional.size(), 0); - }); - - it('should return given type size when condition is omitted', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8); - assert.equal(optional.size(), 1); - }); - - it('should return given type size when condition is truthy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, true); - assert.equal(optional.size(), 1); - }); - - it('should return given type size when condition is a function and truthy', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const optional = new Optional(uint8, function() { return true; }); - assert.equal(optional.size(), 1); - }); - }); - - describe('encode', function() { - it('should not encode when condition is falsy', function() { - const optional = new Optional(uint8, false); - assert.deepEqual(optional.toBuffer(128), new Uint8Array(0)); - }); - - it('should not encode when condition is a function and falsy', function() { - const optional = new Optional(uint8, function() { return false; }); - assert.deepEqual(optional.toBuffer(128), new Uint8Array(0)); - }); - - it('should encode when condition is omitted', function() { - const optional = new Optional(uint8); - assert.deepEqual(optional.toBuffer(128), new Uint8Array([128])); - }); - - it('should encode when condition is truthy', function() { - const optional = new Optional(uint8, true); - assert.deepEqual(optional.toBuffer(128), new Uint8Array([128])); - }); - - it('should encode when condition is a function and truthy', function() { - const optional = new Optional(uint8, function() { return true; }); - assert.deepEqual(optional.toBuffer(128), new Uint8Array([128])); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Pointer.js b/skills/flight-finder/node_modules/restructure/test/Pointer.js deleted file mode 100644 index 7716a80..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Pointer.js +++ /dev/null @@ -1,289 +0,0 @@ -import assert from 'assert'; -import {Pointer, VoidPointer, uint8, DecodeStream, EncodeStream, Struct} from 'restructure'; - -describe('Pointer', function() { - describe('decode', function() { - it('should handle null pointers', function() { - const stream = new DecodeStream(new Uint8Array([0])); - const pointer = new Pointer(uint8, uint8); - return assert.equal(pointer.decode(stream, {_startOffset: 50}), null); - }); - - it('should use local offsets from start of parent by default', function() { - const stream = new DecodeStream(new Uint8Array([1, 53])); - const pointer = new Pointer(uint8, uint8); - assert.equal(pointer.decode(stream, {_startOffset: 0}), 53); - }); - - it('should support immediate offsets', function() { - const stream = new DecodeStream(new Uint8Array([1, 53])); - const pointer = new Pointer(uint8, uint8, {type: 'immediate'}); - assert.equal(pointer.decode(stream), 53); - }); - - it('should support offsets relative to the parent', function() { - const stream = new DecodeStream(new Uint8Array([0, 0, 1, 53])); - stream.pos = 2; - const pointer = new Pointer(uint8, uint8, {type: 'parent'}); - assert.equal(pointer.decode(stream, {parent: {_startOffset: 2}}), 53); - }); - - it('should support global offsets', function() { - const stream = new DecodeStream(new Uint8Array([1, 2, 4, 0, 0, 0, 53])); - const pointer = new Pointer(uint8, uint8, {type: 'global'}); - stream.pos = 2; - assert.equal(pointer.decode(stream, {parent: {parent: {_startOffset: 2}}}), 53); - }); - - it('should support offsets relative to a property on the parent', function() { - const stream = new DecodeStream(new Uint8Array([1, 0, 0, 0, 0, 53])); - const pointer = new Pointer(uint8, uint8, {relativeTo: ctx => ctx.parent.ptr}); - assert.equal(pointer.decode(stream, {_startOffset: 0, parent: {ptr: 4}}), 53); - }); - - it('should throw when passing a non function relativeTo option', function() { - return assert.throws(() => new Pointer(uint8, uint8, {relativeTo: 'parent.ptr'})); - }); - - it('should support returning pointer if there is no decode type', function() { - const stream = new DecodeStream(new Uint8Array([4])); - const pointer = new Pointer(uint8, 'void'); - assert.equal(pointer.decode(stream, {_startOffset: 0}), 4); - }); - - it('should support decoding pointers lazily', function() { - const stream = new DecodeStream(new Uint8Array([1, 53])); - const struct = new Struct({ - ptr: new Pointer(uint8, uint8, {lazy: true})}); - - const res = struct.decode(stream); - assert.equal(typeof Object.getOwnPropertyDescriptor(res, 'ptr').get, 'function'); - assert.equal(Object.getOwnPropertyDescriptor(res, 'ptr').enumerable, true); - assert.equal(res.ptr, 53); - }); - }); - - describe('size', function() { - it('should add to local pointerSize', function() { - const pointer = new Pointer(uint8, uint8); - const ctx = {pointerSize: 0}; - assert.equal(pointer.size(10, ctx), 1); - assert.equal(ctx.pointerSize, 1); - }); - - it('should add to immediate pointerSize', function() { - const pointer = new Pointer(uint8, uint8, {type: 'immediate'}); - const ctx = {pointerSize: 0}; - assert.equal(pointer.size(10, ctx), 1); - assert.equal(ctx.pointerSize, 1); - }); - - it('should add to parent pointerSize', function() { - const pointer = new Pointer(uint8, uint8, {type: 'parent'}); - const ctx = {parent: {pointerSize: 0}}; - assert.equal(pointer.size(10, ctx), 1); - assert.equal(ctx.parent.pointerSize, 1); - }); - - it('should add to global pointerSize', function() { - const pointer = new Pointer(uint8, uint8, {type: 'global'}); - const ctx = {parent: {parent: {parent: {pointerSize: 0}}}}; - assert.equal(pointer.size(10, ctx), 1); - assert.equal(ctx.parent.parent.parent.pointerSize, 1); - }); - - it('should handle void pointers', function() { - const pointer = new Pointer(uint8, 'void'); - const ctx = {pointerSize: 0}; - assert.equal(pointer.size(new VoidPointer(uint8, 50), ctx), 1); - assert.equal(ctx.pointerSize, 1); - }); - - it('should throw if no type and not a void pointer', function() { - const pointer = new Pointer(uint8, 'void'); - const ctx = {pointerSize: 0}; - assert.throws(() => pointer.size(30, ctx)); - }); - - it('should return a fixed size without a value', function() { - const pointer = new Pointer(uint8, uint8); - assert.equal(pointer.size(), 1); - }); - }); - - describe('encode', function() { - it('should handle null pointers', function() { - const ptr = new Pointer(uint8, uint8); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 0, - pointers: [] - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(null))); - ptr.encode(stream, null, ctx); - assert.equal(ctx.pointerSize, 0); - - assert.deepEqual(stream.buffer, new Uint8Array([0])); - }); - - it('should handle local offsets', function() { - const ptr = new Pointer(uint8, uint8); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 1, - pointers: [] - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.pointerOffset, 2); - assert.deepEqual(ctx.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([1])); - }); - - it('should handle immediate offsets', function() { - const ptr = new Pointer(uint8, uint8, {type: 'immediate'}); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 1, - pointers: [] - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.pointerOffset, 2); - assert.deepEqual(ctx.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([0])); - }); - - it('should handle immediate offsets', function() { - const ptr = new Pointer(uint8, uint8, {type: 'immediate'}); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 1, - pointers: [] - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.pointerOffset, 2); - assert.deepEqual(ctx.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([0])); - }); - - it('should handle offsets relative to parent', function() { - const ptr = new Pointer(uint8, uint8, {type: 'parent'}); - const ctx = { - parent: { - pointerSize: 0, - startOffset: 3, - pointerOffset: 5, - pointers: [] - } - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10, {parent: {...ctx.parent}}))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.parent.pointerOffset, 6); - assert.deepEqual(ctx.parent.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([2])); - }); - - it('should handle global offsets', function() { - const ptr = new Pointer(uint8, uint8, {type: 'global'}); - const ctx = { - parent: { - parent: { - parent: { - pointerSize: 0, - startOffset: 3, - pointerOffset: 5, - pointers: [] - } - } - } - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10, JSON.parse(JSON.stringify(ctx))))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.parent.parent.parent.pointerOffset, 6); - assert.deepEqual(ctx.parent.parent.parent.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([5])); - }); - - it('should support offsets relative to a property on the parent', function() { - const ptr = new Pointer(uint8, uint8, {relativeTo: ctx => ctx.ptr}); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 10, - pointers: [], - val: { - ptr: 4 - } - }; - - const stream = new EncodeStream(new Uint8Array(ptr.size(10, {...ctx}))); - ptr.encode(stream, 10, ctx); - assert.equal(ctx.pointerOffset, 11); - assert.deepEqual(ctx.pointers, [ - { type: uint8, val: 10, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([6])); - }); - - it('should support void pointers', function() { - const ptr = new Pointer(uint8, 'void'); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 1, - pointers: [] - }; - - const val = new VoidPointer(uint8, 55); - const stream = new EncodeStream(new Uint8Array(ptr.size(val, {...ctx}))); - ptr.encode(stream, val, ctx); - assert.equal(ctx.pointerOffset, 2); - assert.deepEqual(ctx.pointers, [ - { type: uint8, val: 55, parent: ctx } - ]); - - assert.deepEqual(stream.buffer, new Uint8Array([1])); - }); - - it('should throw if not a void pointer instance', function() { - const ptr = new Pointer(uint8, 'void'); - const ctx = { - pointerSize: 0, - startOffset: 0, - pointerOffset: 1, - pointers: [] - }; - - const stream = new EncodeStream(new Uint8Array(0)); - assert.throws(() => ptr.encode(stream, 44, ctx)); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Reserved.js b/skills/flight-finder/node_modules/restructure/test/Reserved.js deleted file mode 100644 index 3c7847f..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Reserved.js +++ /dev/null @@ -1,26 +0,0 @@ -import assert from 'assert'; -import {Reserved, uint8, uint16, DecodeStream, EncodeStream} from 'restructure'; - -describe('Reserved', function() { - it('should have a default count of 1', function() { - const reserved = new Reserved(uint8); - assert.equal(reserved.size(), 1); - }); - - it('should allow custom counts and types', function() { - const reserved = new Reserved(uint16, 10); - assert.equal(reserved.size(), 20); - }); - - it('should decode', function() { - const stream = new DecodeStream(new Uint8Array([0, 0])); - const reserved = new Reserved(uint16); - assert.equal(reserved.decode(stream), null); - assert.equal(stream.pos, 2); - }); - - it('should encode', function() { - const reserved = new Reserved(uint16); - assert.deepEqual(reserved.toBuffer(), new Uint8Array([0, 0])); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/String.js b/skills/flight-finder/node_modules/restructure/test/String.js deleted file mode 100644 index a5bbe14..0000000 --- a/skills/flight-finder/node_modules/restructure/test/String.js +++ /dev/null @@ -1,151 +0,0 @@ -import assert from 'assert'; -import {String as StringT, uint16le, uint8, DecodeStream, Struct} from 'restructure'; - -describe('String', function() { - describe('decode', function() { - it('should decode fixed length', function() { - const string = new StringT(7); - assert.equal(string.fromBuffer(Buffer.from('testing')), 'testing'); - }); - - it('should decode length from parent key', function() { - const stream = new DecodeStream(Buffer.from('testing')); - const string = new StringT('len'); - assert.equal(string.decode(stream, {len: 7}), 'testing'); - }); - - it('should decode length as number before string', function() { - const string = new StringT(uint8); - assert.equal(string.fromBuffer(Buffer.from('\x07testing')), 'testing'); - }); - - it('should decode utf8', function() { - const string = new StringT(4, 'utf8'); - assert.equal(string.fromBuffer(Buffer.from('🍻')), '🍻'); - }); - - it('should decode encoding computed from function', function() { - const string = new StringT(4, function() { return 'utf8'; }); - assert.equal(string.fromBuffer(Buffer.from('🍻')), '🍻'); - }); - - it('should decode null-terminated string and read past terminator', function() { - const stream = new DecodeStream(Buffer.from('🍻\x00')); - const string = new StringT(null, 'utf8'); - assert.equal(string.decode(stream), '🍻'); - assert.equal(stream.pos, 5); - }); - - it('should decode remainder of buffer when null-byte missing', function() { - const string = new StringT(null, 'utf8'); - assert.equal(string.fromBuffer(Buffer.from('🍻')), '🍻'); - }); - - it('should decode two-byte null-terminated string for utf16le', function() { - const stream = new DecodeStream(Buffer.from('🍻\x00', 'utf16le')); - const string = new StringT(null, 'utf16le'); - assert.equal(string.decode(stream), '🍻'); - assert.equal(stream.pos, 6); - }); - - it('should decode remainder of buffer when null-byte missing, utf16le', function() { - const string = new StringT(null, 'utf16le'); - assert.equal(string.fromBuffer(Buffer.from('🍻', 'utf16le')), '🍻'); - }); - - it('should decode x-mac-roman', function() { - const string = new StringT(null, 'x-mac-roman'); - const buf = new Uint8Array([0x8a, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x63, 0x68, 0x87, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73]); - assert.equal(string.fromBuffer(buf), 'äccented cháracters'); - }) - }); - - describe('size', function() { - it('should use string length', function() { - const string = new StringT(7); - assert.equal(string.size('testing'), 7); - }); - - it('should use correct encoding', function() { - const string = new StringT(10, 'utf8'); - assert.equal(string.size('🍻'), 4); - }); - - it('should use encoding from function', function() { - const string = new StringT(10, function() { return 'utf8'; }); - assert.equal(string.size('🍻'), 4); - }); - - it('should add size of length field before string', function() { - const string = new StringT(uint8, 'utf8'); - assert.equal(string.size('🍻'), 5); - }); - - it('should work with utf16be encoding', function() { - const string = new StringT(10, 'utf16be'); - assert.equal(string.size('🍻'), 4); - }); - - it('should take null-byte into account', function() { - const string = new StringT(null, 'utf8'); - assert.equal(string.size('🍻'), 5); - }); - - it('should take null-byte into account, utf16le', function() { - const string = new StringT(null, 'utf16le'); - assert.equal(string.size('🍻'), 6); - }); - - it('should use defined length if no value given', function() { - const array = new StringT(10); - assert.equal(array.size(), 10); - }); - }); - - describe('encode', function() { - it('should encode using string length', function() { - const string = new StringT(7); - assert.deepEqual(string.toBuffer('testing'), Buffer.from('testing')); - }); - - it('should encode length as number before string', function() { - const string = new StringT(uint8); - assert.deepEqual(string.toBuffer('testing'), Buffer.from('\x07testing')); - }); - - it('should encode length as number before string utf8', function() { - const string = new StringT(uint8, 'utf8'); - assert.deepEqual(string.toBuffer('testing 😜'), Buffer.from('\x0ctesting 😜', 'utf8')); - }); - - it('should encode utf8', function() { - const string = new StringT(4, 'utf8'); - assert.deepEqual(string.toBuffer('🍻'), Buffer.from('🍻')); - }); - - it('should encode encoding computed from function', function() { - const string = new StringT(4, function() { return 'utf8'; }); - assert.deepEqual(string.toBuffer('🍻'), Buffer.from('🍻')); - }); - - it('should encode null-terminated string', function() { - const string = new StringT(null, 'utf8'); - assert.deepEqual(string.toBuffer('🍻'), Buffer.from('🍻\x00')); - }); - - it('should encode using string length, utf16le', function() { - const string = new StringT(16, 'utf16le'); - assert.deepEqual(string.toBuffer('testing'), Buffer.from('testing', 'utf16le')); - }); - - it('should encode length as number before string utf16le', function() { - const string = new StringT(uint16le, 'utf16le'); - assert.deepEqual(string.toBuffer('testing 😜'), Buffer.from('\u0014testing 😜', 'utf16le')); - }); - - it('should encode two-byte null-terminated string for UTF-16', function() { - const string = new StringT(null, 'utf16le'); - assert.deepEqual(string.toBuffer('🍻'), Buffer.from('🍻\x00', 'utf16le')); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/restructure/test/Struct.js b/skills/flight-finder/node_modules/restructure/test/Struct.js deleted file mode 100644 index 60fde09..0000000 --- a/skills/flight-finder/node_modules/restructure/test/Struct.js +++ /dev/null @@ -1,146 +0,0 @@ -import assert from 'assert'; -import {Struct, String as StringT, Pointer, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('Struct', function() { - describe('decode', function() { - it('should decode into an object', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8 - }); - - assert.deepEqual(struct.fromBuffer(Buffer.from('\x05devon\x15')), { - name: 'devon', - age: 21 - }); - }); - - it('should support process hook', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8 - }); - - struct.process = function() { - return this.canDrink = this.age >= 21; - }; - - assert.deepEqual(struct.fromBuffer(Buffer.from('\x05devon\x20')), { - name: 'devon', - age: 32, - canDrink: true - }); - }); - - it('should support function keys', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8, - canDrink() { return this.age >= 21; } - }); - - assert.deepEqual(struct.fromBuffer(Buffer.from('\x05devon\x20')), { - name: 'devon', - age: 32, - canDrink: true - }); - }); - }); - - describe('size', function() { - it('should compute the correct size', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8 - }); - - assert.equal(struct.size({name: 'devon', age: 21}), 7); - }); - - it('should compute the correct size with pointers', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8, - ptr: new Pointer(uint8, new StringT(uint8)) - }); - - const size = struct.size({ - name: 'devon', - age: 21, - ptr: 'hello' - }); - - assert.equal(size, 14); - }); - - it('should get the correct size when no value is given', function() { - const struct = new Struct({ - name: new StringT(4), - age: uint8 - }); - - assert.equal(struct.size(), 5); - }); - - it('should throw when getting non-fixed length size and no value is given', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8 - }); - - assert.throws(() => struct.size(), /not a fixed size/i); - }); - }); - - describe('encode', function() { - it('should encode objects to buffers', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8 - }); - - const buf = struct.toBuffer({ - name: 'devon', - age: 21 - }); - - assert.deepEqual(buf, Buffer.from('\x05devon\x15')); - }); - - it('should support preEncode hook', function() { - const struct = new Struct({ - nameLength: uint8, - name: new StringT('nameLength'), - age: uint8 - }); - - struct.preEncode = function() { - return this.nameLength = this.name.length; - }; - - const buf = struct.toBuffer({ - name: 'devon', - age: 21 - }); - - assert.deepEqual(buf, Buffer.from('\x05devon\x15')); - }); - - it('should encode pointer data after structure', function() { - const struct = new Struct({ - name: new StringT(uint8), - age: uint8, - ptr: new Pointer(uint8, new StringT(uint8)) - }); - - const buf = struct.toBuffer({ - name: 'devon', - age: 21, - ptr: 'hello' - }); - - assert.deepEqual(buf, Buffer.from('\x05devon\x15\x08\x05hello')); - }); - }); -}); - diff --git a/skills/flight-finder/node_modules/restructure/test/VersionedStruct.js b/skills/flight-finder/node_modules/restructure/test/VersionedStruct.js deleted file mode 100644 index 86e0a7c..0000000 --- a/skills/flight-finder/node_modules/restructure/test/VersionedStruct.js +++ /dev/null @@ -1,495 +0,0 @@ -import assert from 'assert'; -import {VersionedStruct, String as StringT, Pointer, uint8, DecodeStream, EncodeStream} from 'restructure'; - -describe('VersionedStruct', function() { - describe('decode', function() { - it('should get version from number type', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - let stream = new DecodeStream(Buffer.from('\x00\x05devon\x15')); - assert.deepEqual(struct.decode(stream), { - version: 0, - name: 'devon', - age: 21 - }); - - stream = new DecodeStream(Buffer.from('\x01\x0adevon 👍\x15\x00', 'utf8')); - assert.deepEqual(struct.decode(stream), { - version: 1, - name: 'devon 👍', - age: 21, - gender: 0 - }); - }); - - it('should throw for unknown version', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - const stream = new DecodeStream(Buffer.from('\x05\x05devon\x15')); - return assert.throws(() => struct.decode(stream)); - }); - - it('should support common header block', function() { - const struct = new VersionedStruct(uint8, { - header: { - age: uint8, - alive: uint8 - }, - 0: { - name: new StringT(uint8, 'ascii') - }, - 1: { - name: new StringT(uint8, 'utf8'), - gender: uint8 - } - } - ); - - let stream = new DecodeStream(Buffer.from('\x00\x15\x01\x05devon')); - assert.deepEqual(struct.decode(stream), { - version: 0, - age: 21, - alive: 1, - name: 'devon' - }); - - stream = new DecodeStream(Buffer.from('\x01\x15\x01\x0adevon 👍\x00', 'utf8')); - assert.deepEqual(struct.decode(stream), { - version: 1, - age: 21, - alive: 1, - name: 'devon 👍', - gender: 0 - }); - }); - - it('should support parent version key', function() { - const struct = new VersionedStruct('version', { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - let stream = new DecodeStream(Buffer.from('\x05devon\x15')); - assert.deepEqual(struct.decode(stream, {version: 0}), { - version: 0, - name: 'devon', - age: 21 - }); - - stream = new DecodeStream(Buffer.from('\x0adevon 👍\x15\x00', 'utf8')); - assert.deepEqual(struct.decode(stream, {version: 1}), { - version: 1, - name: 'devon 👍', - age: 21, - gender: 0 - }); - }); - - it('should support parent version nested key', function() { - const struct = new VersionedStruct('obj.version', { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - let stream = new DecodeStream(Buffer.from('\x05devon\x15')); - assert.deepEqual(struct.decode(stream, {obj: {version: 0}}), { - version: 0, - name: 'devon', - age: 21 - }); - - stream = new DecodeStream(Buffer.from('\x0adevon 👍\x15\x00', 'utf8')); - assert.deepEqual(struct.decode(stream, {obj: {version: 1}}), { - version: 1, - name: 'devon 👍', - age: 21, - gender: 0 - }); - }); - - it('should support sub versioned structs', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8) - }, - 1: { - name: new StringT(uint8), - isDesert: uint8 - } - } - ) - } - ); - - let stream = new DecodeStream(Buffer.from('\x00\x05devon\x15')); - assert.deepEqual(struct.decode(stream, {version: 0}), { - version: 0, - name: 'devon', - age: 21 - }); - - stream = new DecodeStream(Buffer.from('\x01\x00\x05pasta')); - assert.deepEqual(struct.decode(stream, {version: 0}), { - version: 0, - name: 'pasta' - }); - - stream = new DecodeStream(Buffer.from('\x01\x01\x09ice cream\x01')); - assert.deepEqual(struct.decode(stream, {version: 0}), { - version: 1, - name: 'ice cream', - isDesert: 1 - }); - }); - - it('should support process hook', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - struct.process = function() { - return this.processed = true; - }; - - const stream = new DecodeStream(Buffer.from('\x00\x05devon\x15')); - assert.deepEqual(struct.decode(stream), { - version: 0, - name: 'devon', - age: 21, - processed: true - }); - }); - }); - - describe('size', function() { - it('should compute the correct size', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - let size = struct.size({ - version: 0, - name: 'devon', - age: 21 - }); - - assert.equal(size, 8); - - size = struct.size({ - version: 1, - name: 'devon 👍', - age: 21, - gender: 0 - }); - - assert.equal(size, 14); - }); - - it('should throw for unknown version', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - assert.throws(() => - struct.size({ - version: 5, - name: 'devon', - age: 21 - }) - ); - }); - - it('should support common header block', function() { - const struct = new VersionedStruct(uint8, { - header: { - age: uint8, - alive: uint8 - }, - 0: { - name: new StringT(uint8, 'ascii') - }, - 1: { - name: new StringT(uint8, 'utf8'), - gender: uint8 - } - } - ); - - let size = struct.size({ - version: 0, - age: 21, - alive: 1, - name: 'devon' - }); - - assert.equal(size, 9); - - size = struct.size({ - version: 1, - age: 21, - alive: 1, - name: 'devon 👍', - gender: 0 - }); - - assert.equal(size, 15); - }); - - it('should compute the correct size with pointers', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - ptr: new Pointer(uint8, new StringT(uint8)) - } - } - ); - - const size = struct.size({ - version: 1, - name: 'devon', - age: 21, - ptr: 'hello' - }); - - assert.equal(size, 15); - }); - - it('should throw if no value is given', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(4, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(4, 'utf8'), - age: uint8, - gender: uint8 - } - } - ); - - assert.throws(() => struct.size(), /not a fixed size/i); - }); - }); - - describe('encode', function() { - it('should encode objects to buffers', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - }); - - const buf1 = struct.toBuffer({ - version: 0, - name: 'devon', - age: 21 - }); - - assert.deepEqual(buf1, Buffer.from('\x00\x05devon\x15', 'utf8')); - - const buf2 = struct.toBuffer({ - version: 1, - name: 'devon 👍', - age: 21, - gender: 0 - }); - - assert.deepEqual(buf2, Buffer.from('\x01\x0adevon 👍\x15\x00', 'utf8')); - }); - - it('should throw for unknown version', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - }); - - assert.throws(() => - struct.toBuffer({ - version: 5, - name: 'devon', - age: 21 - }) - ); - }); - - it('should support common header block', function() { - const struct = new VersionedStruct(uint8, { - header: { - age: uint8, - alive: uint8 - }, - 0: { - name: new StringT(uint8, 'ascii') - }, - 1: { - name: new StringT(uint8, 'utf8'), - gender: uint8 - } - }); - - const buf1 = struct.toBuffer({ - version: 0, - age: 21, - alive: 1, - name: 'devon' - }); - - assert.deepEqual(buf1, Buffer.from('\x00\x15\x01\x05devon', 'utf8')); - - const buf2 = struct.toBuffer({ - version: 1, - age: 21, - alive: 1, - name: 'devon 👍', - gender: 0 - }); - - assert.deepEqual(buf2, Buffer.from('\x01\x15\x01\x0adevon 👍\x00', 'utf8')); - }); - - it('should encode pointer data after structure', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - ptr: new Pointer(uint8, new StringT(uint8)) - } - }); - - const buf = struct.toBuffer({ - version: 1, - name: 'devon', - age: 21, - ptr: 'hello' - }); - - assert.deepEqual(buf, Buffer.from('\x01\x05devon\x15\x09\x05hello', 'utf8')); - }); - - it('should support preEncode hook', function() { - const struct = new VersionedStruct(uint8, { - 0: { - name: new StringT(uint8, 'ascii'), - age: uint8 - }, - 1: { - name: new StringT(uint8, 'utf8'), - age: uint8, - gender: uint8 - } - }); - - struct.preEncode = function() { - return this.version = (this.gender != null) ? 1 : 0; - }; - - const buf1 = struct.toBuffer({ - name: 'devon', - age: 21 - }); - - assert.deepEqual(buf1, Buffer.from('\x00\x05devon\x15', 'utf8')); - - const buf2 = struct.toBuffer({ - name: 'devon 👍', - age: 21, - gender: 0 - }); - - assert.deepEqual(buf2, Buffer.from('\x01\x0adevon 👍\x15\x00', 'utf8')); - }); - }); -}); diff --git a/skills/flight-finder/node_modules/tiny-inflate/LICENSE b/skills/flight-finder/node_modules/tiny-inflate/LICENSE deleted file mode 100644 index 6291454..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2015-present Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/skills/flight-finder/node_modules/tiny-inflate/index.js b/skills/flight-finder/node_modules/tiny-inflate/index.js deleted file mode 100644 index 44d1151..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/index.js +++ /dev/null @@ -1,375 +0,0 @@ -var TINF_OK = 0; -var TINF_DATA_ERROR = -3; - -function Tree() { - this.table = new Uint16Array(16); /* table of code length counts */ - this.trans = new Uint16Array(288); /* code -> symbol translation table */ -} - -function Data(source, dest) { - this.source = source; - this.sourceIndex = 0; - this.tag = 0; - this.bitcount = 0; - - this.dest = dest; - this.destLen = 0; - - this.ltree = new Tree(); /* dynamic length/symbol tree */ - this.dtree = new Tree(); /* dynamic distance tree */ -} - -/* --------------------------------------------------- * - * -- uninitialized global data (static structures) -- * - * --------------------------------------------------- */ - -var sltree = new Tree(); -var sdtree = new Tree(); - -/* extra bits and base tables for length codes */ -var length_bits = new Uint8Array(30); -var length_base = new Uint16Array(30); - -/* extra bits and base tables for distance codes */ -var dist_bits = new Uint8Array(30); -var dist_base = new Uint16Array(30); - -/* special ordering of code length codes */ -var clcidx = new Uint8Array([ - 16, 17, 18, 0, 8, 7, 9, 6, - 10, 5, 11, 4, 12, 3, 13, 2, - 14, 1, 15 -]); - -/* used by tinf_decode_trees, avoids allocations every call */ -var code_tree = new Tree(); -var lengths = new Uint8Array(288 + 32); - -/* ----------------------- * - * -- utility functions -- * - * ----------------------- */ - -/* build extra bits and base tables */ -function tinf_build_bits_base(bits, base, delta, first) { - var i, sum; - - /* build bits table */ - for (i = 0; i < delta; ++i) bits[i] = 0; - for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0; - - /* build base table */ - for (sum = first, i = 0; i < 30; ++i) { - base[i] = sum; - sum += 1 << bits[i]; - } -} - -/* build the fixed huffman trees */ -function tinf_build_fixed_trees(lt, dt) { - var i; - - /* build fixed length tree */ - for (i = 0; i < 7; ++i) lt.table[i] = 0; - - lt.table[7] = 24; - lt.table[8] = 152; - lt.table[9] = 112; - - for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i; - for (i = 0; i < 144; ++i) lt.trans[24 + i] = i; - for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i; - for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i; - - /* build fixed distance tree */ - for (i = 0; i < 5; ++i) dt.table[i] = 0; - - dt.table[5] = 32; - - for (i = 0; i < 32; ++i) dt.trans[i] = i; -} - -/* given an array of code lengths, build a tree */ -var offs = new Uint16Array(16); - -function tinf_build_tree(t, lengths, off, num) { - var i, sum; - - /* clear code length count table */ - for (i = 0; i < 16; ++i) t.table[i] = 0; - - /* scan symbol lengths, and sum code length counts */ - for (i = 0; i < num; ++i) t.table[lengths[off + i]]++; - - t.table[0] = 0; - - /* compute offset table for distribution sort */ - for (sum = 0, i = 0; i < 16; ++i) { - offs[i] = sum; - sum += t.table[i]; - } - - /* create code->symbol translation table (symbols sorted by code) */ - for (i = 0; i < num; ++i) { - if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i; - } -} - -/* ---------------------- * - * -- decode functions -- * - * ---------------------- */ - -/* get one bit from source stream */ -function tinf_getbit(d) { - /* check if tag is empty */ - if (!d.bitcount--) { - /* load next tag */ - d.tag = d.source[d.sourceIndex++]; - d.bitcount = 7; - } - - /* shift bit out of tag */ - var bit = d.tag & 1; - d.tag >>>= 1; - - return bit; -} - -/* read a num bit value from a stream and add base */ -function tinf_read_bits(d, num, base) { - if (!num) - return base; - - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - - var val = d.tag & (0xffff >>> (16 - num)); - d.tag >>>= num; - d.bitcount -= num; - return val + base; -} - -/* given a data stream and a tree, decode a symbol */ -function tinf_decode_symbol(d, t) { - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - - var sum = 0, cur = 0, len = 0; - var tag = d.tag; - - /* get more bits while code value is above sum */ - do { - cur = 2 * cur + (tag & 1); - tag >>>= 1; - ++len; - - sum += t.table[len]; - cur -= t.table[len]; - } while (cur >= 0); - - d.tag = tag; - d.bitcount -= len; - - return t.trans[sum + cur]; -} - -/* given a data stream, decode dynamic trees from it */ -function tinf_decode_trees(d, lt, dt) { - var hlit, hdist, hclen; - var i, num, length; - - /* get 5 bits HLIT (257-286) */ - hlit = tinf_read_bits(d, 5, 257); - - /* get 5 bits HDIST (1-32) */ - hdist = tinf_read_bits(d, 5, 1); - - /* get 4 bits HCLEN (4-19) */ - hclen = tinf_read_bits(d, 4, 4); - - for (i = 0; i < 19; ++i) lengths[i] = 0; - - /* read code lengths for code length alphabet */ - for (i = 0; i < hclen; ++i) { - /* get 3 bits code length (0-7) */ - var clen = tinf_read_bits(d, 3, 0); - lengths[clcidx[i]] = clen; - } - - /* build code length tree */ - tinf_build_tree(code_tree, lengths, 0, 19); - - /* decode code lengths for the dynamic trees */ - for (num = 0; num < hlit + hdist;) { - var sym = tinf_decode_symbol(d, code_tree); - - switch (sym) { - case 16: - /* copy previous code length 3-6 times (read 2 bits) */ - var prev = lengths[num - 1]; - for (length = tinf_read_bits(d, 2, 3); length; --length) { - lengths[num++] = prev; - } - break; - case 17: - /* repeat code length 0 for 3-10 times (read 3 bits) */ - for (length = tinf_read_bits(d, 3, 3); length; --length) { - lengths[num++] = 0; - } - break; - case 18: - /* repeat code length 0 for 11-138 times (read 7 bits) */ - for (length = tinf_read_bits(d, 7, 11); length; --length) { - lengths[num++] = 0; - } - break; - default: - /* values 0-15 represent the actual code lengths */ - lengths[num++] = sym; - break; - } - } - - /* build dynamic trees */ - tinf_build_tree(lt, lengths, 0, hlit); - tinf_build_tree(dt, lengths, hlit, hdist); -} - -/* ----------------------------- * - * -- block inflate functions -- * - * ----------------------------- */ - -/* given a stream and two trees, inflate a block of data */ -function tinf_inflate_block_data(d, lt, dt) { - while (1) { - var sym = tinf_decode_symbol(d, lt); - - /* check for end of block */ - if (sym === 256) { - return TINF_OK; - } - - if (sym < 256) { - d.dest[d.destLen++] = sym; - } else { - var length, dist, offs; - var i; - - sym -= 257; - - /* possibly get more bits from length code */ - length = tinf_read_bits(d, length_bits[sym], length_base[sym]); - - dist = tinf_decode_symbol(d, dt); - - /* possibly get more bits from distance code */ - offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); - - /* copy match */ - for (i = offs; i < offs + length; ++i) { - d.dest[d.destLen++] = d.dest[i]; - } - } - } -} - -/* inflate an uncompressed block of data */ -function tinf_inflate_uncompressed_block(d) { - var length, invlength; - var i; - - /* unread from bitbuffer */ - while (d.bitcount > 8) { - d.sourceIndex--; - d.bitcount -= 8; - } - - /* get length */ - length = d.source[d.sourceIndex + 1]; - length = 256 * length + d.source[d.sourceIndex]; - - /* get one's complement of length */ - invlength = d.source[d.sourceIndex + 3]; - invlength = 256 * invlength + d.source[d.sourceIndex + 2]; - - /* check length */ - if (length !== (~invlength & 0x0000ffff)) - return TINF_DATA_ERROR; - - d.sourceIndex += 4; - - /* copy block */ - for (i = length; i; --i) - d.dest[d.destLen++] = d.source[d.sourceIndex++]; - - /* make sure we start next block on a byte boundary */ - d.bitcount = 0; - - return TINF_OK; -} - -/* inflate stream from source to dest */ -function tinf_uncompress(source, dest) { - var d = new Data(source, dest); - var bfinal, btype, res; - - do { - /* read final block flag */ - bfinal = tinf_getbit(d); - - /* read block type (2 bits) */ - btype = tinf_read_bits(d, 2, 0); - - /* decompress block */ - switch (btype) { - case 0: - /* decompress uncompressed block */ - res = tinf_inflate_uncompressed_block(d); - break; - case 1: - /* decompress block with fixed huffman trees */ - res = tinf_inflate_block_data(d, sltree, sdtree); - break; - case 2: - /* decompress block with dynamic huffman trees */ - tinf_decode_trees(d, d.ltree, d.dtree); - res = tinf_inflate_block_data(d, d.ltree, d.dtree); - break; - default: - res = TINF_DATA_ERROR; - } - - if (res !== TINF_OK) - throw new Error('Data error'); - - } while (!bfinal); - - if (d.destLen < d.dest.length) { - if (typeof d.dest.slice === 'function') - return d.dest.slice(0, d.destLen); - else - return d.dest.subarray(0, d.destLen); - } - - return d.dest; -} - -/* -------------------- * - * -- initialization -- * - * -------------------- */ - -/* build fixed huffman trees */ -tinf_build_fixed_trees(sltree, sdtree); - -/* build extra bits and base tables */ -tinf_build_bits_base(length_bits, length_base, 4, 3); -tinf_build_bits_base(dist_bits, dist_base, 2, 1); - -/* fix a special case */ -length_bits[28] = 0; -length_base[28] = 258; - -module.exports = tinf_uncompress; diff --git a/skills/flight-finder/node_modules/tiny-inflate/package.json b/skills/flight-finder/node_modules/tiny-inflate/package.json deleted file mode 100644 index 340fb3f..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "tiny-inflate", - "version": "1.0.3", - "description": "A tiny inflate implementation", - "main": "index.js", - "scripts": { - "test": "mocha" - }, - "repository": { - "type": "git", - "url": "git://github.com/devongovett/tiny-inflate.git" - }, - "keywords": [ - "inflate", - "zlib", - "gzip", - "zip" - ], - "author": "Devon Govett ", - "license": "MIT", - "bugs": { - "url": "https://github.com/devongovett/tiny-inflate/issues" - }, - "homepage": "https://github.com/devongovett/tiny-inflate", - "devDependencies": { - "mocha": "^2.1.0" - } -} diff --git a/skills/flight-finder/node_modules/tiny-inflate/readme.md b/skills/flight-finder/node_modules/tiny-inflate/readme.md deleted file mode 100644 index dd8c408..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# tiny-inflate - -This is a port of Joergen Ibsen's [tiny inflate](https://bitbucket.org/jibsen/tinf) to JavaScript. -Minified it is about 3KB, or 1.3KB gzipped. While being very small, it is also reasonably fast -(about 30% - 50% slower than [pako](https://github.com/nodeca/pako) on average), and should be -good enough for many applications. If you need the absolute best performance, however, you'll -need to use a larger library such as pako that contains additional optimizations. - -## Installation - - npm install tiny-inflate - -## Example - -To use tiny-inflate, you need two things: a buffer of data compressed with deflate, -and the decompressed size (often stored in a file header) to allocate your output buffer. -Input and output buffers can be either node `Buffer`s, or `Uint8Array`s. - -```javascript -var inflate = require('tiny-inflate'); - -var compressedBuffer = new Bufer([ ... ]); -var decompressedSize = ...; -var outputBuffer = new Buffer(decompressedSize); - -inflate(compressedBuffer, outputBuffer); -``` - -## License - -MIT diff --git a/skills/flight-finder/node_modules/tiny-inflate/test/index.js b/skills/flight-finder/node_modules/tiny-inflate/test/index.js deleted file mode 100644 index f4e8c88..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/test/index.js +++ /dev/null @@ -1,75 +0,0 @@ -var inflate = require('../'); -var zlib = require('zlib'); -var fs = require('fs'); -var assert = require('assert'); -var uncompressed = fs.readFileSync(__dirname + '/lorem.txt'); - -describe('tiny-inflate', function() { - var compressed, noCompression, fixed; - - function deflate(buf, options, fn) { - var chunks = []; - zlib.createDeflateRaw(options) - .on('data', function(chunk) { - chunks.push(chunk); - }) - .on('error', fn) - .on('end', function() { - fn(null, Buffer.concat(chunks)); - }) - .end(buf); - } - - before(function(done) { - zlib.deflateRaw(uncompressed, function(err, data) { - compressed = data; - done(); - }); - }); - - before(function(done) { - deflate(uncompressed, { level: zlib.Z_NO_COMPRESSION }, function(err, data) { - noCompression = data; - done(); - }); - }); - - before(function(done) { - deflate(uncompressed, { strategy: zlib.Z_FIXED }, function(err, data) { - fixed = data; - done(); - }); - }); - - it('should inflate some data', function() { - var out = Buffer.alloc(uncompressed.length); - inflate(compressed, out); - assert.deepEqual(out, uncompressed); - }); - - it('should slice output buffer', function() { - var out = Buffer.alloc(uncompressed.length + 1024); - var res = inflate(compressed, out); - assert.deepEqual(res, uncompressed); - assert.equal(res.length, uncompressed.length); - }); - - it('should handle uncompressed blocks', function() { - var out = Buffer.alloc(uncompressed.length); - inflate(noCompression, out); - assert.deepEqual(out, uncompressed); - }); - - it('should handle fixed huffman blocks', function() { - var out = Buffer.alloc(uncompressed.length); - inflate(fixed, out); - assert.deepEqual(out, uncompressed); - }); - - it('should handle typed arrays', function() { - var input = new Uint8Array(compressed); - var out = new Uint8Array(uncompressed.length); - inflate(input, out); - assert.deepEqual(out, new Uint8Array(uncompressed)); - }); -}); diff --git a/skills/flight-finder/node_modules/tiny-inflate/test/lorem.txt b/skills/flight-finder/node_modules/tiny-inflate/test/lorem.txt deleted file mode 100644 index c37b0a5..0000000 --- a/skills/flight-finder/node_modules/tiny-inflate/test/lorem.txt +++ /dev/null @@ -1,199 +0,0 @@ -Lorem ipsum dolor sit amet, sea pertinax pertinacia appellantur in, est ad esse assentior mediocritatem, magna populo menandri cum te. Vel augue menandri eu, at integre appareat splendide duo. Est ne tollit ullamcorper, eu pro falli diceret perpetua, sea ferri numquam legendos ut. Diceret suscipiantur at nec, his ei nulla mentitum efficiantur. Errem saepe ei vis. - - Per melius aperiri eu. Et interesset philosophia vim, graece denique intellegam duo at, te vix quot apeirian dignissim. Ei essent percipitur nam, natum possit interpretaris sea ea. Cum assum adipisci cotidieque ut, ut veri tollit duo. Erat idque volutpat mea ut, mel nominati splendide vulputate ea. - - No ferri partem ceteros pro. Everti volumus menandri at pro. Cum illud euripidis cu, mazim deterruisset ei eum. Ex alia dolorem insolens per, malis clita laboramus duo ut, ridens appareat philosophia ea quo. - - Vix elit tantas phaedrum et, ea quo vide facete scriptorem. Ut facer laboramus definitiones has, viris dictas regione at eos. Noluisse constituto vix at, nec malorum rationibus te. Nec numquam definiebas id, vim id liber munere. Simul discere reprimique qui eu. Et aeterno aperiri disputando vix. - - Usu ne denique albucius gloriatur. Pri in novum electram, ei amet electram quo. Vix summo recusabo dissentiunt no. Natum mediocrem maiestatis ut eum, vocibus nominavi has in, affert civibus te nam. Cibo minim ex nec. - - Ipsum tibique deseruisse vel ut. Ad laudem iracundia eam. Eum id legere scripta nominavi, vim melius ceteros et, ea tale enim nec. Aeque facete signiferumque ne est, vis ei sint persequeris. Ei magna veritus nec, enim aliquando ex pro. - - Verear noluisse qui eu, id mutat possit nec. Ad est melius placerat, soluta facilisi et vel. Id his simul consul praesent, no nam nihil perfecto, quo in mucius corrumpit. Assum ceteros cotidieque et nam, illum quaeque cum et. Numquam laoreet his at, in vis suas quando suscipit. - - Ne graece efficiendi interpretaris cum. In vide dictas cotidieque sed. Ea est augue vidisse. Eu epicurei salutandi est, etiam oratio imperdiet ex his. Te pri novum meliore sensibus. An nec eius dicant, iracundia consectetuer per ex. An iuvaret meliore constituto eam, latine detraxit mea eu, mel eu aperiri moderatius. - - Per commodo virtute eu. Eius euripidis nam eu, cum ne praesent vituperata, vix at integre verterem posidonium. Eu adhuc labores eam, temporibus reformidans eos id. Feugiat labores nam ne, eu sed nostro veritus, mea in consul evertitur repudiandae. Cu eos detracto voluptaria consetetur. - - Sit vidit mundi offendit ad. Usu semper vivendo eloquentiam eu. Nonumes deleniti ex vim, fabulas forensibus ad eam. Mazim admodum petentium sed et, has eu eirmod eruditi laoreet. An eam hinc erant. Et semper accumsan similique cum. Sea at inani error. - - Te commodo delicata abhorreant cum, iusto lucilius ut sed, ea his evertitur scripserit. Te eligendi scriptorem sit. Mel quodsi meliore dissentias ei, cum deserunt moderatius ex, error sanctus adversarium eam et. Eam et appareat placerat tincidunt, ius an quidam putant delenit, utinam partem quo ea. Mei legendos constituto scribentur eu, usu ea consul facilisis. Purto veritus lobortis te sea. - - Ne sea ludus solet decore, in cum erat dicta labitur. Doctus maluisset scripserit qui in. Qui at postea audiam, has ut aperiam dissentiet, vix ut harum nemore integre. Sit ad lucilius deseruisse, iuvaret percipit in pro. Sed referrentur voluptatibus ne, his ei nullam omnesque aliquando. - - Ius te purto augue fierent, mea et decore feugiat definiebas. Dolor abhorreant deseruisse at sit, corpora tacimates duo ut. Dicta equidem ne has. At pri elit magna vocibus, ipsum vidisse definiebas id cum. Ex pri laudem assentior. - - Aliquip referrentur id vim, sea labores nominati recteque id. Torquatos adversarium no mel, pri eu impedit fastidii, in usu tollit electram. Ad esse facer nec, mel id laudem adipisci, pri eu vocent efficiantur. Cu est posse possit. Vis definiebas neglegentur ad, pro facer sanctus propriae id. Sit epicurei comprehensam signiferumque ea, ad eam vero admodum scaevola. - - Nec an vivendo ocurreret, qui id nihil fastidii ocurreret. Vis ei mazim zril, dictas aperiri aliquando per ad, sit ne harum postea appellantur. No munere periculis reprimique duo, ut nam unum animal repudiandae. Cibo vocent dissentias te mea. Sea te elit denique volutpat, nec ne epicuri mentitum delicata. - - Ius eros aeterno torquatos ex, et per nisl accusata. Ne nam nonumy discere, in vim nemore commune. Cu pri nibh pertinacia assueverit, duo percipit definitionem ne, delectus voluptaria et vix. Mutat appellantur mea ad, ad pericula suavitate nam. Primis rationibus mei eu. Ad dolorem verterem deserunt eam, in decore probatus consulatu sed. Quo ut ullum epicuri. - - Quod contentiones ea quo. Et nihil conclusionemque mel, offendit perfecto eam eu. Suas case nam et. Ex elit doctus civibus mei, eam facilis scaevola ne. His elit scripta constituto eu, mea tantas petentium ut. - - Eos dicam intellegam id. Cum omnes concludaturque ea. Qui in semper legendos intellegebat. Option mediocrem eam id. Doctus principes deterruisset pro ad, qui ea fugit populo repudiare. - - Sed ne summo percipitur. Eu porro persius vix, an vix esse fastidii delicatissimi, elit rationibus dissentias cu eam. Te dolorem scriptorem mei, no mei aeque tibique. Iisque molestie ei ius. - - Ius eu vide salutatus. Ut modus errem nam, latine vocibus referrentur an has, his laudem docendi at. Mei in enim aeterno, sea id dolores placerat signiferumque. Mea modo semper maluisset at, vel te magna eruditi. Eam in verear tacimates concludaturque. Nam cu porro mediocritatem, platonem splendide in has, dicit dolor populo mei et. Melius saperet tacimates nam an, mentitum fabellas assueverit duo id, sea an nihil tritani inciderint. - - At vim option nominati quaerendum. Dolor vituperata dissentiunt eu nec, an modo appareat suscipiantur sea. In vim suas eligendi sadipscing. Ne nihil molestie ius, sumo aperiri argumentum sit ea, eius principes te sit. Eam no fugit mazim alterum. Sed ignota sententiae in. At pro illud reprimique. - - At nec vivendo luptatum, vel congue oratio cu. Audire sententiae ius an. Antiopam scripserit et duo, illud commune te his. Posse disputationi vix in, quod oporteat id eam. Legimus admodum docendi cum at, cu postea deserunt periculis per. - - Sonet clita ponderum sea ei, est ex semper fabellas. Te vix elitr congue phaedrum, ea eum argumentum eloquentiam. Te elitr suavitate definitionem eum. Est inciderint comprehensam cu, ei ius dolor dignissim assueverit. - - Eos ut dolorum albucius placerat, mel erat mentitum cu. Nec copiosae periculis in, ex vix everti consectetuer. Pro at dicat utroque, iracundia sententiae in usu, sit no cibo natum alienum. Duo audiam placerat ei. Cu mel philosophia disputationi. - - Eam fierent maiestatis instructior no, cu sea iusto iriure voluptatum. Vide numquam vivendo ex est, an vel nulla similique posidonium. No mea tritani molestiae, pro te placerat sensibus. Mel ad posse mucius vocent, te populo timeam democritum mel. - - Pri suscipit luptatum eu, et persius accumsan argumentum sea. In paulo tempor possit sea. Vidisse viderer ut vix, vix ex hinc solet. Altera principes qui in, est utroque scaevola eu. - - Lobortis gubergren mediocritatem ne has, te eum adhuc pericula vulputate, cu antiopam posidonium percipitur mei. Mandamus sapientem et sed. Ea dicta quodsi aperiri sea, ad putent posidonium sea. Duo et molestie erroribus, facete gloriatur eam te, ne eam accusam interesset instructior. Eam posidonium reformidans at. Duo menandri pericula te, qui accumsan facilisi expetendis ut. Et eum dicunt persius pertinacia, vis recteque eloquentiam te. - - Habemus blandit at pri, ad quando consequat per. Mea id adhuc dolores definitionem, in platonem mediocrem abhorreant per, vis cu hinc harum qualisque. Et purto lorem intellegam vel, summo apeirian cum no. At vel nonumy volutpat quaerendum. Ludus fastidii fabellas ut eum, no nec assum homero sanctus. - - His at doming forensibus honestatis, et nostrum praesent eum. At dolores patrioque sententiae eos, quaeque corpora qui no. Nec postea senserit persecuti ei, ad sea invenire voluptatibus, ne veniam lobortis repudiandae mea. Et nam integre democritum. Ex populo menandri qui. Ei duo aeterno accommodare, nibh ponderum iudicabit id vel, cu eos platonem postulant omittantur. - - Mollis molestie nam an, duo an option patrioque posidonium. Putant luptatum aliquando mea ei. Ut quas semper perfecto mei, ei ius justo possit epicurei. Cum odio omnium eu, gubergren definitionem eum ex. Tempor definitionem pri at, ad sit nihil postea moderatius. - - An cum verear scribentur, duo et purto tempor euripidis. Aeterno postulant ut eam, no diam inermis argumentum eos, posse blandit incorrupte ne pri. Est commodo laoreet conclusionemque ei. Graeci tacimates ei eum. Ad nec forensibus voluptaria, mea in alii putent, sed facer ceteros ad. - - Vidisse vivendo placerat duo ex, pri malorum definitionem ex. Decore virtute accumsan cum ad, ex eum postea putant euismod. Mei id alia populo democritum, mei ea adhuc posse. Et primis hendrerit signiferumque nam, ei vis modo lobortis recteque. Saepe persius aliquid et sit, vel everti feugait ne. - - Qui ex laoreet argumentum temporibus, agam tacimates intellegam ad qui. At wisi perfecto has, an sit viris definitionem. No quo sint tincidunt, vim adhuc expetenda ut, nam ad everti expetendis. Adhuc soleat doming nec eu, dicta summo sapientem mei te, nostro mediocrem dignissim ex eos. Id alienum mediocritatem mea, te error iriure placerat pri, feugiat platonem vituperatoribus mea te. - - Quo elit legere consequuntur in, in fabulas ancillae mea, sed scripta mentitum tacimates ei. Mazim phaedrum interpretaris et per, te patrioque assueverit vim. Populo commodo imperdiet vix ut. Mea modo bonorum ut, cu pri enim posse efficiantur. - - Sea veri ancillae adipisci te, quot tota modus ad sea. Suas malorum per ex, mazim rationibus ad vix. Ius ullum deserunt id. Quas corrumpit constituam no mei. Ut quo deleniti atomorum omittantur. Clita feugait docendi ei cum, no mea modo menandri, nam mundi doming an. No altera commodo pri. - - Vel fastidii convenire ex. Vim soleat maluisset te, et expetendis sadipscing liberavisse has. Per sale facilisis accommodare in. Cu option incorrupte nec. - - An eam vocibus intellegat, possit aliquid ex eum, tale mentitum oportere at duo. Ad eam audiam consectetuer, eu meliore verterem mediocritatem has, nam etiam reprimique ut. Nullam adipisci mei in, ad duo quem simul veniam. Vis at tempor sententiae. Te essent iisque aperiam vis. - - Te vix etiam quando ullamcorper, mel ei offendit iudicabit necessitatibus, usu assum facilisi sensibus ex. Alterum adversarium vis ad. Odio fierent deleniti ex cum. Quo an bonorum inciderint, harum simul maiorum in mel, ex legimus alienum corrumpit has. Pri soluta lobortis adipiscing te, eos clita ponderum mandamus at, elit meis assum mea in. Tale intellegebat cu vim, facilis expetenda democritum duo te, cu his causae dissentiet liberavisse. - - Primis latine epicurei no mea. Nam ad quis putant everti, no fugit minimum disputando vix. Laudem neglegentur te qui. Vel splendide efficiendi at, sed liber urbanitas no. Id his atqui inermis scriptorem, vituperata adversarium eos cu, pro in movet accommodare. - - Munere indoctum eu duo. Id eam duis voluptua expetenda, et prodesset inciderint ius. An nibh elitr deseruisse usu. Idque copiosae nam ea, ne tempor omittantur definitionem vis, et cum sumo principes. Quo rebum viderer minimum ex, est at melius blandit. - - Ut adolescens definitiones sed. Est ut erant legendos, in quo facilis salutatus. Agam expetenda salutatus ut sit, quo ex fuisset repudiandae, tale probo aliquip mea id. No vix diceret scaevola. Posidonium conclusionemque ut est. Quo porro menandri assentior ei. - - Vocent neglegentur intellegebat sit id. Et ullum accusam sea, ex nam aeque ubique ocurreret, ea cum quidam euismod. Eam ne zril alienum. Mea id veritus alienum. Mei simul appareat nominati no. Cum option accumsan ea, ne eos legimus dissentiunt. - - Everti prodesset scripserit ea cum, eam nostrud adolescens deterruisset an. Deseruisse definiebas eos ne, mel ex nisl meliore consulatu, per te scripta gubergren. Vix cu novum admodum recusabo, te omnes similique efficiantur nec. Suas novum semper duo ex. Vocibus cotidieque cu qui, at sale malorum intellegam mel. Quo errem accumsan ullamcorper cu, eu quo liber quidam conceptam. - - Scripta habemus quaestio id usu. Id vis utroque forensibus, cu simul fabulas efficiantur vis, ad mel cibo quas feugait. Eros expetendis in cum. No cum aeterno menandri consetetur, quo ex alterum probatus. Eu audire tritani ius, ei labore commune detraxit est. Unum sapientem cotidieque ei vel, ullum prompta per ex. Recteque persequeris quo ei, volutpat quaerendum ex sea. - - Qui phaedrum dissentiunt ne, sea debet fuisset ut. Ridens virtute pro an. Eos at stet modus iisque. Usu ea esse sententiae, deleniti salutandi ne sit, semper graecis sensibus vis ne. Ea corrumpit assueverit mel, in ignota quodsi nominati vix. - - Sea equidem vivendo ut, sed cibo nusquam id, nostro integre te mei. Etiam tractatos et duo, ut ludus dolore pri. Eius hendrerit cu vel, quo ei quodsi causae ullamcorper, per cibo nihil at. Ea voluptatum incorrupte duo, dolore debitis no usu. Ei clita concludaturque cum. Quo quas quando persecuti cu, eruditi scripserit cum eu. - - Ex eleifend philosophia has. Sint repudiandae in sea, et prima latine persecuti eum, pro ea everti expetendis. At his stet facete minimum, sed in delenit maiestatis. Cum ei omittam contentiones, suas sale melius ei cum, mel id vocent propriae necessitatibus. Vix amet nibh ea, autem movet ne vel. - - Accusata percipitur ut vim. Decore tritani scriptorem vis eu, vis volutpat reprehendunt ea. Postea inciderint vix an, no dicunt tamquam mel, usu id illud sensibus expetendis. Ex his aliquip blandit appellantur. - - Officiis evertitur ut mea, cu illud omnesque scripserit eam. Simul vituperatoribus an eum, mel quidam disputando cu, nibh probatus consequat ei mei. Eam populo appareat inimicus ei. Ne officiis definitiones his, vis vero simul similique ei. Iudico oratio elaboraret vim et, id posse nemore eirmod has. - - Pro in veniam consul expetenda, an est movet consequuntur, ex ius admodum recusabo ullamcorper. Mei an utroque ceteros singulis, id eum iudico latine. At est reque lorem intellegat. Quando corpora qui ea. Quo vocent salutatus id. - - Wisi ignota concludaturque est ex. Mea ad inermis vituperatoribus. Dolor persius inimicus ad nec, etiam dignissim qui ex. Ridens quodsi sed ex. Pro in etiam antiopam, eos graece eripuit ad. Affert soluta mei te, pri illud graecis id, vel sint vivendo at. Mea eu veri dicta offendit, cu has sint copiosae. - - Duo libris salutatus ad, porro principes mel ex. Nec iudico consectetuer no. Ut pri causae qualisque democritum. Habeo homero iuvaret at mei. Atqui aliquam eu mea. Gubergren delicatissimi vim ad, amet quodsi efficiendi te ius. Everti latine vulputate pro te, in nam falli definiebas, duo harum graeco nusquam no. - - Per ne aeterno appareat, melius verear tamquam eam id, mei ei invidunt atomorum. Eu doctus viderer eam, sea eu possit dolorem appetere, efficiantur necessitatibus mel cu. Ad est suas officiis, assum erant eum cu, eum erat vitae te. Habemus scaevola no per, nominati adipiscing et eam. - - Ei stet quidam scaevola quo, ius cu noster officiis. Has dolorum vulputate voluptaria ea, ei ius audiam liberavisse. Duo in accumsan constituam, sea esse deseruisse ad. Ne eam eligendi sensibus. Ea rebum porro interesset sed, te alii tritani singulis vis, vel enim liber ne. Movet numquam salutatus eu vim. Nam ad deleniti interpretaris conclusionemque. - - Ea offendit apeirian reprimique ius, accusam incorrupte voluptatibus ei duo. Hinc ponderum detraxit vel te, has no labore regione. Sint impetus duo ex, cu has liber soluta fierent. Vix ut cibo mollis deseruisse. - - Cum id tale disputationi, usu adhuc tritani ea. Id vim volumus quaerendum delicatissimi, no vix dolorum legimus corpora, justo dicit id duo. Ancillae concludaturque at usu. Vim diceret singulis incorrupte eu, oratio nullam quo et. Et sea mediocrem vituperatoribus, fugit tacimates deterruisset cum et. Mel ne sale soleat, vim ad labitur equidem, eos ea justo noluisse. - - An nam consectetuer necessitatibus, eos ei mazim persecuti. Libris explicari dissentiunt te vis, te per veniam sadipscing. Ut diceret euismod vix, duo discere inermis ea. No sit veri sensibus cotidieque, inermis sadipscing reprehendunt qui ad, elitr referrentur repudiandae eu est. Vis quem probo postulant no. Ad viris tollit ullamcorper pri, congue discere ad usu. - - Eam te cetero reprehendunt. His ad ferri feugiat invenire, oratio indoctum id pro. Errem omittam sed et, est no quando omnesque platonem, sed quis philosophia ei. Vix ut porro aeque habemus, eu eam consul nominati omittantur. - - At pri everti indoctum, ullum adipiscing instructior qui ad. Usu ignota omittam ex. At audire vocibus pericula vix, usu ex reque feugait. Ne sea electram salutandi moderatius, te qui verterem scripserit adversarium, an sed tantas lobortis intellegat. - - Ad quas suscipit atomorum duo, quo saepe maiestatis eu. Nostro expetenda ea usu, in atqui doming eam. Vis utroque consulatu ne. Zril noster scripta in eum, vim ad dicam facete legendos, et sit civibus consequat. Eum autem periculis ex. Sed ne nemore eligendi, his legimus verterem ad. - - Est ad amet possit latine. Sed ne legere populo, has pericula scribentur voluptatibus eu. Usu in nonumy vituperata. Aeque oratio gubergren mea ad, quo eu debet dolorum contentiones. Veri expetenda ex mel, eu veniam apeirian vis, aeterno debitis id his. - - Ei ius consul nonumes. Id qui porro periculis, quando dolore iisque qui id. Quo ex simul convenire, vix ei erat petentium, mea cu clita causae. Tale facilisis ex pri, vim ne vide laudem mnesarchum. Duo option blandit ex. Eu est modus vitae, nam in latine maiorum. - - Est an quis quaeque disputando, sit an postulant expetenda, dolor erroribus consequuntur ad vel. Ius phaedrum cotidieque ei, omnis persius copiosae eu vim. Pri facer consequat eu, esse copiosae facilisis mei ne. Ubique convenire no sit. - - Nec regione prompta no. Et quo recteque concludaturque, et ius nostro mollis regione. Ad aliquid lucilius scriptorem eam. Sit at summo eligendi omittantur, ius ea paulo option referrentur. Rationibus inciderint mediocritatem sea id, in dicant assentior sea, quidam copiosae reprehendunt in usu. Cu appetere scripserit vix. Mea mollis audiam aliquam ea, te qui adhuc nonumes deserunt. - - Duo ad facilis consequuntur, vis vide mutat in. At inani ludus eam, an sit quod primis, ea est integre consetetur. Has dolorem salutandi te, tota doctus sit ne, cum ex minimum convenire. Ne legere deterruisset vel, partem phaedrum ne pro, vim modo facete fabellas ex. Cu vix possim eleifend posidonium. Ne est sumo impetus. No quo ubique neglegentur, in usu aliquando scripserit reformidans. - - Vix et numquam expetendis. Ei quas senserit vel, ne has placerat conclusionemque. Noster perpetua euripidis ex sit. Ex mel vidit nonumy vituperata, duo ad nostrum liberavisse. Primis signiferumque duo te, ius te hinc aeque laoreet, ne eius voluptua pri. Dico eros copiosae sed ei, duo cu laudem propriae gubergren. - - Unum erant oratio duo cu, qui no audiam fabulas ornatus. Nihil omnium offendit ad cum, ea ius inermis appetere nominati. Ei nam vero oratio corrumpit. Atqui voluptatibus mei id, at duo assum nostrud aliquando. At nec laudem ridens phaedrum. Dicunt qualisque eum an, ex natum persecuti adipiscing vix, tritani consulatu persecuti nam id. - - In pro mundi percipit, eum tibique eloquentiam in, mea illud ullum altera ex. Veniam epicuri ex mea, quot eruditi definiebas eu duo. Vel augue regione consectetuer ei, appetere moderatius eos in. Laoreet lucilius vim eu. At oratio eirmod qui. - - Altera labitur qui ei, in eam libris primis. Eirmod audiam te vel, eu mei case vide ponderum, an principes persecuti neglegentur mei. Ferri vulputate instructior no vix, in est vidisse detraxit molestiae. Te sit quot choro adipisci, no labore indoctum deterruisset cum. Elit ancillae appetere usu at, mundi dissentias te quo. Mentitum erroribus ad pri. - - Usu ei vero possit appetere. Id erroribus constituam quo. Sit id quidam pertinacia, epicuri delicata eu has, debet melius evertitur ut sed. Id est alienum voluptua. Sit eu dico discere accusata, cu mazim viderer numquam usu, has an solum pertinax. Vel natum summo te, mel integre perfecto consetetur et. - - Postea luptatum menandri cu has, no nam neglegentur necessitatibus. Deseruisse reprehendunt ne mea, lorem tollit nonumes ne vim. Eu pro amet populo, omnesque ponderum sadipscing et ius, ad debet consequat dissentiet vix. Ius nulla aliquip complectitur et, id sed repudiare necessitatibus, et erant legimus invidunt vel. Magna labore democritum vis ei. - - Ne has consulatu reprehendunt, ad nam nulla integre admodum, no has everti impedit perpetua. Tempor antiopam dissentias pro et, ex per legere electram. Ut ius brute omnesque consequat, an his dissentias persequeris. Dicta ludus tritani eam ei. - - Minim rationibus et usu, eam in elit senserit. Stet harum qualisque eu has. Cu decore nostrud sit, mea magna iracundia te, vix tritani convenire imperdiet at. Te pri dictas appetere, brute velit ius ad. Veri dicit legere pri at, sea tation fierent molestie eu. Eum et paulo consul. - - Veri iusto mei id, reque invidunt ne his, te agam dolore electram nam. Est ullum oporteat facilisi eu, dicunt officiis ad eos. Vis ut populo similique. Et minim platonem percipitur usu. Et usu saperet alienum consequuntur, per ad luptatum concludaturque, cibo duis definitionem vix an. - - Ancillae iracundia eu vix, mazim conceptam no qui. Sit nihil epicuri voluptatibus in, an sale debet vis. Porro congue senserit quo an. Facer constituam vel no, facete pertinacia adolescens pro ut, errem nullam menandri ius an. Ex tractatos periculis interpretaris eum, vim ornatus patrioque an. Ius magna iudicabit reprehendunt at, ea viris ornatus sit, eum in vidisse percipitur. - - Vel agam interpretaris ex, zril deserunt electram in duo. Eu eam vero atqui maiorum. Ne pri alia meis decore, vis ea expetenda dissentiet. Cu quis evertitur intellegat cum, ea sed posse expetendis liberavisse, sed ne quis deseruisse. Solum ignota causae ad quo, ferri erant est id, vim ut choro liberavisse. Ne nam causae reformidans, possit percipitur id has. Case tota id has, pri tation ancillae sensibus te. - - Posse aperiam sit id, est in dicam iracundia. Eum mollis dolores te, at vis laoreet habemus fuisset. Vim nibh civibus signiferumque eu. Fierent reformidans an quo. Exerci dissentiunt ex pri, per illum debitis et. - - Vel tota exerci facilis eu. Est primis atomorum id. Hinc insolens dissentiet duo et, iusto inermis salutatus vel ne. Corpora propriae vituperata ex est, sit quod ignota deterruisset no, elitr tempor suscipit ex nam. Eripuit repudiandae his cu, fabulas inermis accumsan ei eum. Nisl molestie ex pri, sea veniam graecis expetenda eu. - - Vel possim moderatius cu, sea no dicit aliquip erroribus, eam te debet partem. Sea no graeco vocent probatus, qui ut fugit delectus definiebas. Id soluta viderer per, tritani disputando necessitatibus ad vix. Eleifend facilisis percipitur at pri. Sit dicat adipisci ex, mundi solet doming nec te, ne maiorum tractatos evertitur sit. At velit propriae eos, mel alii invenire id. - - Ei per minim voluptaria, ea mel scaevola mediocrem euripidis. Et quo wisi sonet eirmod, consul tritani delenit vis id, per id mutat facer. Accusam patrioque eu cum, te cum quot saepe scribentur. Eros summo mnesarchum sed ut, ad possit nostrum comprehensam ius. - - In elitr nullam eam, cu mea mentitum omnesque. Ex has wisi consequat. Sed simul offendit argumentum no, solet corpora lucilius cu vis. Nec ut legimus suscipit, ne usu mucius latine, nusquam mentitum perpetua ad vel. Vidisse feugait facilisis an sea. - - Mel ne oblique menandri, nam graecis antiopam id. Id sanctus referrentur contentiones eam, et eam purto consequat, te vix quod tantas bonorum. Fabellas sapientem consulatu eu per. Iudico possim per ei, eu vide adversarium per. Usu vero essent albucius et, nec veritus ancillae prodesset eu, ipsum probatus cu sea. In quod tantas iudicabit eam, his et odio augue iuvaret. - - Eum an iisque oportere dignissim, est convenire molestiae interesset at, eam id dico audiam quaerendum. Est prompta ocurreret adversarium id, sumo legendos iracundia pri ea, quo ei agam aeque. Ei vix omnes conclusionemque, nec ut novum urbanitas honestatis. Sumo moderatius eos no, ea saperet impedit petentium vel. Vim in harum blandit, posse gubergren deterruisset ex ius. Ei error menandri platonem duo, partiendo qualisque nam te. - - Erat nobis maluisset at sed. Ius no dolor soluta. Has ne sumo brute suavitate, his ne viris aeterno omittantur. Te usu delenit philosophia. Mei wisi libris deseruisse eu. - - Tantas constituam per ei, doctus timeam ea vim. Quo ei putent delicata, eu quo aeterno labores. Qui liber eripuit singulis te, qui diam appareat similique ex, aliquip feugait noluisse cu vis. Dicant recteque definitiones ex mea. Cu exerci dictas eleifend duo, id nonumes denique vix, pri magna facer saperet ei. - - Aeque quodsi partiendo in est, partem malorum intellegebat et per, mea no porro ipsum oratio. Mel sale meliore fuisset ad, per aeque aperiam nominavi ex. Ad tantas meliore placerat mel, mel in prompta torquatos, nulla mollis tamquam pri cu. An quo noster intellegat. Utroque antiopam similique ius eu, at duo ullum apeirian reprimique, vide quaeque assueverit eam ea. - - Mel no quod viris latine, no platonem dissentiunt ius, quis amet gloriatur no eos. Ei mea ancillae probatus. Ad molestiae moderatius vim. Ex soluta meliore molestiae has, ne sea quas natum. Movet verterem vis no, vis amet homero an. Ius dicta tantas id. - - Pri ut modus disputationi, iudico ignota commune eam ut. Vim integre eripuit appareat in, malorum inermis perpetua his cu. Altera alienum mediocrem eu vis. Omnis honestatis repudiandae in qui, his quis duis te, novum rationibus cu est. Eos ut dicant molestie, pri argumentum quaerendum adversarium te. Ea cetero deserunt conceptam pri. - - Augue utroque iudicabit ei vim, ea per dico debet. Cu per regione feugait, sensibus necessitatibus cu cum, at mundi aliquando per. In cum latine evertitur definitionem. Sit movet aperiri liberavisse ad, pro paulo veniam eu. Vel ut cotidieque definitionem, adhuc movet intellegebat quo ne. - - Eum deleniti gubergren an, dolor utamur omittam ea ius. Eam movet possim accommodare et. Ius cu malorum tibique, ludus eligendi id pro. Solum vulputate efficiendi ex quo. - - Regione fierent eu per. No amet iuvaret efficiantur usu. Sit minim sensibus no, his principes gloriatur adversarium no. Ubique definitionem ne vis, vis propriae intellegebat te. Tibique suscipiantur his no. - - Eu quo elit cetero scripserit, maiestatis scripserit pri in, vim cu tibique eligendi. Ne tritani gubergren vituperatoribus quo, melius facilisi ne has. Id pro vivendo fuisset, ex causae utroque deleniti mea. Ad eam percipit perfecto, mutat justo essent at vim. Eros novum duo et, in pri melius blandit. Affert albucius eos ad. Singulis mnesarchum ea mel, eos dictas nominavi reprimique no. - - Ei qui congue voluptatibus. Nam no tritani elaboraret. Conceptam rationibus expetendis duo no. Vivendo reprimique cum te, qui timeam copiosae id, modo delicata ius ad. Nam cu dico aliquip, eu pro legimus officiis delicata, fugit quando ea per. - - In eos equidem accommodare. Electram principes ad usu. Nec adversarium disputationi in, sed feugait lucilius ut. Ludus hendrerit cu ius. - - Cum suscipit gloriatur ea. Id aeterno principes euripidis nam, mea id probo graeco verterem, vulputate ullamcorper definitionem in pri. Mel cu detraxit assueverit. Quo et posse fastidii, ei ponderum delicata sed, has brute forensibus ut. Quo option pericula ea, nam gubergren assueverit te. - - Graece doming intellegebat duo in, ullum clita expetenda nam at. Diam alienum menandri sit id. Unum clita consulatu duo id. Per in mucius legendos scribentur, sea quod phaedrum ut, facete animal dissentias no usu. Quo te dico suavitate. Est te erant congue vivendum, oporteat forensibus in his. - - Pro no eleifend reprehendunt, ut meis consetetur argumentum mei. Id vis harum ornatus cotidieque. Inani libris volumus ea qui. Ius at suas percipit voluptatum, pro solet invidunt honestatis ei, et nam delectus reprimique instructior. Nam id tacimates argumentum dissentiet, mei an sint adipiscing. - - Quando cotidieque sit at, ei sed tantas ancillae verterem, cum nibh omittam ut. Erant laboramus moderatius te eum. Civibus adipiscing sed ne, vix eu erant euripidis. Illud qualisque at nec, id tale sint facete per. Vero autem democritum eam an. - - Mel mazim prodesset ad. An vis alii suas congue, vim veri illum iisque et, in modus perfecto deseruisse vel. Sed summo fuisset fierent an. Vel eu bonorum ornatus, alii decore nec ad. Eu dicta constituto mea. - - Id sint stet graece usu. Cu sit essent reformidans, eos eius ridens et. Usu voluptaria posidonium cu. \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/CopyrightNotice.txt b/skills/flight-finder/node_modules/tslib/CopyrightNotice.txt deleted file mode 100644 index 0e42542..0000000 --- a/skills/flight-finder/node_modules/tslib/CopyrightNotice.txt +++ /dev/null @@ -1,15 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - diff --git a/skills/flight-finder/node_modules/tslib/LICENSE.txt b/skills/flight-finder/node_modules/tslib/LICENSE.txt deleted file mode 100644 index bfe6430..0000000 --- a/skills/flight-finder/node_modules/tslib/LICENSE.txt +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/README.md b/skills/flight-finder/node_modules/tslib/README.md deleted file mode 100644 index 290cc61..0000000 --- a/skills/flight-finder/node_modules/tslib/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# tslib - -This is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions. - -This library is primarily used by the `--importHelpers` flag in TypeScript. -When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file: - -```ts -var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; -}; -exports.x = {}; -exports.y = __assign({}, exports.x); - -``` - -will instead be emitted as something like the following: - -```ts -var tslib_1 = require("tslib"); -exports.x = {}; -exports.y = tslib_1.__assign({}, exports.x); -``` - -Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead. -For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`. - -# Installing - -For the latest stable version, run: - -## npm - -```sh -# TypeScript 3.9.2 or later -npm install tslib - -# TypeScript 3.8.4 or earlier -npm install tslib@^1 - -# TypeScript 2.3.2 or earlier -npm install tslib@1.6.1 -``` - -## yarn - -```sh -# TypeScript 3.9.2 or later -yarn add tslib - -# TypeScript 3.8.4 or earlier -yarn add tslib@^1 - -# TypeScript 2.3.2 or earlier -yarn add tslib@1.6.1 -``` - -## bower - -```sh -# TypeScript 3.9.2 or later -bower install tslib - -# TypeScript 3.8.4 or earlier -bower install tslib@^1 - -# TypeScript 2.3.2 or earlier -bower install tslib@1.6.1 -``` - -## JSPM - -```sh -# TypeScript 3.9.2 or later -jspm install tslib - -# TypeScript 3.8.4 or earlier -jspm install tslib@^1 - -# TypeScript 2.3.2 or earlier -jspm install tslib@1.6.1 -``` - -# Usage - -Set the `importHelpers` compiler option on the command line: - -``` -tsc --importHelpers file.ts -``` - -or in your tsconfig.json: - -```json -{ - "compilerOptions": { - "importHelpers": true - } -} -``` - -#### For bower and JSPM users - -You will need to add a `paths` mapping for `tslib`, e.g. For Bower users: - -```json -{ - "compilerOptions": { - "module": "amd", - "importHelpers": true, - "baseUrl": "./", - "paths": { - "tslib" : ["bower_components/tslib/tslib.d.ts"] - } - } -} -``` - -For JSPM users: - -```json -{ - "compilerOptions": { - "module": "system", - "importHelpers": true, - "baseUrl": "./", - "paths": { - "tslib" : ["jspm_packages/npm/tslib@2.x.y/tslib.d.ts"] - } - } -} -``` - -## Deployment - -- Choose your new version number -- Set it in `package.json` and `bower.json` -- Create a tag: `git tag [version]` -- Push the tag: `git push --tags` -- Create a [release in GitHub](https://github.com/microsoft/tslib/releases) -- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow - -Done. - -# Contribute - -There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript. - -* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in. -* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls). -* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript). -* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter. -* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md). - -# Documentation - -* [Quick tutorial](http://www.typescriptlang.org/Tutorial) -* [Programming handbook](http://www.typescriptlang.org/Handbook) -* [Homepage](http://www.typescriptlang.org/) diff --git a/skills/flight-finder/node_modules/tslib/SECURITY.md b/skills/flight-finder/node_modules/tslib/SECURITY.md deleted file mode 100644 index 869fdfe..0000000 --- a/skills/flight-finder/node_modules/tslib/SECURITY.md +++ /dev/null @@ -1,41 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). - -If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). - - diff --git a/skills/flight-finder/node_modules/tslib/modules/index.d.ts b/skills/flight-finder/node_modules/tslib/modules/index.d.ts deleted file mode 100644 index 3244fab..0000000 --- a/skills/flight-finder/node_modules/tslib/modules/index.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Note: named reexports are used instead of `export *` because -// TypeScript itself doesn't resolve the `export *` when checking -// if a particular helper exists. -export { - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __exportStar, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __createBinding, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension, -} from '../tslib.js'; -export * as default from '../tslib.js'; diff --git a/skills/flight-finder/node_modules/tslib/modules/index.js b/skills/flight-finder/node_modules/tslib/modules/index.js deleted file mode 100644 index c91f618..0000000 --- a/skills/flight-finder/node_modules/tslib/modules/index.js +++ /dev/null @@ -1,70 +0,0 @@ -import tslib from '../tslib.js'; -const { - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __exportStar, - __createBinding, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension, -} = tslib; -export { - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __exportStar, - __createBinding, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension, -}; -export default tslib; diff --git a/skills/flight-finder/node_modules/tslib/modules/package.json b/skills/flight-finder/node_modules/tslib/modules/package.json deleted file mode 100644 index aafa0e4..0000000 --- a/skills/flight-finder/node_modules/tslib/modules/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/package.json b/skills/flight-finder/node_modules/tslib/package.json deleted file mode 100644 index 57d0578..0000000 --- a/skills/flight-finder/node_modules/tslib/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "tslib", - "author": "Microsoft Corp.", - "homepage": "https://www.typescriptlang.org/", - "version": "2.8.1", - "license": "0BSD", - "description": "Runtime library for TypeScript helper functions", - "keywords": [ - "TypeScript", - "Microsoft", - "compiler", - "language", - "javascript", - "tslib", - "runtime" - ], - "bugs": { - "url": "https://github.com/Microsoft/TypeScript/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/tslib.git" - }, - "main": "tslib.js", - "module": "tslib.es6.js", - "jsnext:main": "tslib.es6.js", - "typings": "tslib.d.ts", - "sideEffects": false, - "exports": { - ".": { - "module": { - "types": "./modules/index.d.ts", - "default": "./tslib.es6.mjs" - }, - "import": { - "node": "./modules/index.js", - "default": { - "types": "./modules/index.d.ts", - "default": "./tslib.es6.mjs" - } - }, - "default": "./tslib.js" - }, - "./*": "./*", - "./": "./" - } -} diff --git a/skills/flight-finder/node_modules/tslib/tslib.d.ts b/skills/flight-finder/node_modules/tslib/tslib.d.ts deleted file mode 100644 index f23df55..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.d.ts +++ /dev/null @@ -1,460 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -/** - * Used to shim class extends. - * - * @param d The derived class. - * @param b The base class. - */ -export declare function __extends(d: Function, b: Function): void; - -/** - * Copy the values of all of the enumerable own properties from one or more source objects to a - * target object. Returns the target object. - * - * @param t The target object to copy to. - * @param sources One or more source objects from which to copy properties - */ -export declare function __assign(t: any, ...sources: any[]): any; - -/** - * Performs a rest spread on an object. - * - * @param t The source value. - * @param propertyNames The property names excluded from the rest spread. - */ -export declare function __rest(t: any, propertyNames: (string | symbol)[]): any; - -/** - * Applies decorators to a target object - * - * @param decorators The set of decorators to apply. - * @param target The target object. - * @param key If specified, the own property to apply the decorators to. - * @param desc The property descriptor, defaults to fetching the descriptor from the target object. - * @experimental - */ -export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any; - -/** - * Creates an observing function decorator from a parameter decorator. - * - * @param paramIndex The parameter index to apply the decorator to. - * @param decorator The parameter decorator to apply. Note that the return value is ignored. - * @experimental - */ -export declare function __param(paramIndex: number, decorator: Function): Function; - -/** - * Applies decorators to a class or class member, following the native ECMAScript decorator specification. - * @param ctor For non-field class members, the class constructor. Otherwise, `null`. - * @param descriptorIn The `PropertyDescriptor` to use when unable to look up the property from `ctor`. - * @param decorators The decorators to apply - * @param contextIn The `DecoratorContext` to clone for each decorator application. - * @param initializers An array of field initializer mutation functions into which new initializers are written. - * @param extraInitializers An array of extra initializer functions into which new initializers are written. - */ -export declare function __esDecorate(ctor: Function | null, descriptorIn: object | null, decorators: Function[], contextIn: object, initializers: Function[] | null, extraInitializers: Function[]): void; - -/** - * Runs field initializers or extra initializers generated by `__esDecorate`. - * @param thisArg The `this` argument to use. - * @param initializers The array of initializers to evaluate. - * @param value The initial value to pass to the initializers. - */ -export declare function __runInitializers(thisArg: unknown, initializers: Function[], value?: any): any; - -/** - * Converts a computed property name into a `string` or `symbol` value. - */ -export declare function __propKey(x: any): string | symbol; - -/** - * Assigns the name of a function derived from the left-hand side of an assignment. - * @param f The function to rename. - * @param name The new name for the function. - * @param prefix A prefix (such as `"get"` or `"set"`) to insert before the name. - */ -export declare function __setFunctionName(f: Function, name: string | symbol, prefix?: string): Function; - -/** - * Creates a decorator that sets metadata. - * - * @param metadataKey The metadata key - * @param metadataValue The metadata value - * @experimental - */ -export declare function __metadata(metadataKey: any, metadataValue: any): Function; - -/** - * Converts a generator function into a pseudo-async function, by treating each `yield` as an `await`. - * - * @param thisArg The reference to use as the `this` value in the generator function - * @param _arguments The optional arguments array - * @param P The optional promise constructor argument, defaults to the `Promise` property of the global object. - * @param generator The generator function - */ -export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any; - -/** - * Creates an Iterator object using the body as the implementation. - * - * @param thisArg The reference to use as the `this` value in the function - * @param body The generator state-machine based implementation. - * - * @see [./docs/generator.md] - */ -export declare function __generator(thisArg: any, body: Function): any; - -/** - * Creates bindings for all enumerable properties of `m` on `exports` - * - * @param m The source object - * @param o The `exports` object. - */ -export declare function __exportStar(m: any, o: any): void; - -/** - * Creates a value iterator from an `Iterable` or `ArrayLike` object. - * - * @param o The object. - * @throws {TypeError} If `o` is neither `Iterable`, nor an `ArrayLike`. - */ -export declare function __values(o: any): any; - -/** - * Reads values from an `Iterable` or `ArrayLike` object and returns the resulting array. - * - * @param o The object to read from. - * @param n The maximum number of arguments to read, defaults to `Infinity`. - */ -export declare function __read(o: any, n?: number): any[]; - -/** - * Creates an array from iterable spread. - * - * @param args The Iterable objects to spread. - * @deprecated since TypeScript 4.2 - Use `__spreadArray` - */ -export declare function __spread(...args: any[][]): any[]; - -/** - * Creates an array from array spread. - * - * @param args The ArrayLikes to spread into the resulting array. - * @deprecated since TypeScript 4.2 - Use `__spreadArray` - */ -export declare function __spreadArrays(...args: any[][]): any[]; - -/** - * Spreads the `from` array into the `to` array. - * - * @param pack Replace empty elements with `undefined`. - */ -export declare function __spreadArray(to: any[], from: any[], pack?: boolean): any[]; - -/** - * Creates an object that signals to `__asyncGenerator` that it shouldn't be yielded, - * and instead should be awaited and the resulting value passed back to the generator. - * - * @param v The value to await. - */ -export declare function __await(v: any): any; - -/** - * Converts a generator function into an async generator function, by using `yield __await` - * in place of normal `await`. - * - * @param thisArg The reference to use as the `this` value in the generator function - * @param _arguments The optional arguments array - * @param generator The generator function - */ -export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any; - -/** - * Used to wrap a potentially async iterator in such a way so that it wraps the result - * of calling iterator methods of `o` in `__await` instances, and then yields the awaited values. - * - * @param o The potentially async iterator. - * @returns A synchronous iterator yielding `__await` instances on every odd invocation - * and returning the awaited `IteratorResult` passed to `next` every even invocation. - */ -export declare function __asyncDelegator(o: any): any; - -/** - * Creates a value async iterator from an `AsyncIterable`, `Iterable` or `ArrayLike` object. - * - * @param o The object. - * @throws {TypeError} If `o` is neither `AsyncIterable`, `Iterable`, nor an `ArrayLike`. - */ -export declare function __asyncValues(o: any): any; - -/** - * Creates a `TemplateStringsArray` frozen object from the `cooked` and `raw` arrays. - * - * @param cooked The cooked possibly-sparse array. - * @param raw The raw string content. - */ -export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray; - -/** - * Used to shim default and named imports in ECMAScript Modules transpiled to CommonJS. - * - * ```js - * import Default, { Named, Other } from "mod"; - * // or - * import { default as Default, Named, Other } from "mod"; - * ``` - * - * @param mod The CommonJS module exports object. - */ -export declare function __importStar(mod: T): T; - -/** - * Used to shim default imports in ECMAScript Modules transpiled to CommonJS. - * - * ```js - * import Default from "mod"; - * ``` - * - * @param mod The CommonJS module exports object. - */ -export declare function __importDefault(mod: T): T | { default: T }; - -/** - * Emulates reading a private instance field. - * - * @param receiver The instance from which to read the private field. - * @param state A WeakMap containing the private field value for an instance. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * - * @throws {TypeError} If `state` doesn't have an entry for `receiver`. - */ -export declare function __classPrivateFieldGet( - receiver: T, - state: { has(o: T): boolean, get(o: T): V | undefined }, - kind?: "f" -): V; - -/** - * Emulates reading a private static field. - * - * @param receiver The object from which to read the private static field. - * @param state The class constructor containing the definition of the static field. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The descriptor that holds the static field value. - * - * @throws {TypeError} If `receiver` is not `state`. - */ -export declare function __classPrivateFieldGet unknown, V>( - receiver: T, - state: T, - kind: "f", - f: { value: V } -): V; - -/** - * Emulates evaluating a private instance "get" accessor. - * - * @param receiver The instance on which to evaluate the private "get" accessor. - * @param state A WeakSet used to verify an instance supports the private "get" accessor. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The "get" accessor function to evaluate. - * - * @throws {TypeError} If `state` doesn't have an entry for `receiver`. - */ -export declare function __classPrivateFieldGet( - receiver: T, - state: { has(o: T): boolean }, - kind: "a", - f: () => V -): V; - -/** - * Emulates evaluating a private static "get" accessor. - * - * @param receiver The object on which to evaluate the private static "get" accessor. - * @param state The class constructor containing the definition of the static "get" accessor. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The "get" accessor function to evaluate. - * - * @throws {TypeError} If `receiver` is not `state`. - */ -export declare function __classPrivateFieldGet unknown, V>( - receiver: T, - state: T, - kind: "a", - f: () => V -): V; - -/** - * Emulates reading a private instance method. - * - * @param receiver The instance from which to read a private method. - * @param state A WeakSet used to verify an instance supports the private method. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The function to return as the private instance method. - * - * @throws {TypeError} If `state` doesn't have an entry for `receiver`. - */ -export declare function __classPrivateFieldGet unknown>( - receiver: T, - state: { has(o: T): boolean }, - kind: "m", - f: V -): V; - -/** - * Emulates reading a private static method. - * - * @param receiver The object from which to read the private static method. - * @param state The class constructor containing the definition of the static method. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The function to return as the private static method. - * - * @throws {TypeError} If `receiver` is not `state`. - */ -export declare function __classPrivateFieldGet unknown, V extends (...args: any[]) => unknown>( - receiver: T, - state: T, - kind: "m", - f: V -): V; - -/** - * Emulates writing to a private instance field. - * - * @param receiver The instance on which to set a private field value. - * @param state A WeakMap used to store the private field value for an instance. - * @param value The value to store in the private field. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * - * @throws {TypeError} If `state` doesn't have an entry for `receiver`. - */ -export declare function __classPrivateFieldSet( - receiver: T, - state: { has(o: T): boolean, set(o: T, value: V): unknown }, - value: V, - kind?: "f" -): V; - -/** - * Emulates writing to a private static field. - * - * @param receiver The object on which to set the private static field. - * @param state The class constructor containing the definition of the private static field. - * @param value The value to store in the private field. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The descriptor that holds the static field value. - * - * @throws {TypeError} If `receiver` is not `state`. - */ -export declare function __classPrivateFieldSet unknown, V>( - receiver: T, - state: T, - value: V, - kind: "f", - f: { value: V } -): V; - -/** - * Emulates writing to a private instance "set" accessor. - * - * @param receiver The instance on which to evaluate the private instance "set" accessor. - * @param state A WeakSet used to verify an instance supports the private "set" accessor. - * @param value The value to store in the private accessor. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The "set" accessor function to evaluate. - * - * @throws {TypeError} If `state` doesn't have an entry for `receiver`. - */ -export declare function __classPrivateFieldSet( - receiver: T, - state: { has(o: T): boolean }, - value: V, - kind: "a", - f: (v: V) => void -): V; - -/** - * Emulates writing to a private static "set" accessor. - * - * @param receiver The object on which to evaluate the private static "set" accessor. - * @param state The class constructor containing the definition of the static "set" accessor. - * @param value The value to store in the private field. - * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method. - * @param f The "set" accessor function to evaluate. - * - * @throws {TypeError} If `receiver` is not `state`. - */ -export declare function __classPrivateFieldSet unknown, V>( - receiver: T, - state: T, - value: V, - kind: "a", - f: (v: V) => void -): V; - -/** - * Checks for the existence of a private field/method/accessor. - * - * @param state The class constructor containing the static member, or the WeakMap or WeakSet associated with a private instance member. - * @param receiver The object for which to test the presence of the private member. - */ -export declare function __classPrivateFieldIn( - state: (new (...args: any[]) => unknown) | { has(o: any): boolean }, - receiver: unknown, -): boolean; - -/** - * Creates a re-export binding on `object` with key `objectKey` that references `target[key]`. - * - * @param object The local `exports` object. - * @param target The object to re-export from. - * @param key The property key of `target` to re-export. - * @param objectKey The property key to re-export as. Defaults to `key`. - */ -export declare function __createBinding(object: object, target: object, key: PropertyKey, objectKey?: PropertyKey): void; - -/** - * Adds a disposable resource to a resource-tracking environment object. - * @param env A resource-tracking environment object. - * @param value Either a Disposable or AsyncDisposable object, `null`, or `undefined`. - * @param async When `true`, `AsyncDisposable` resources can be added. When `false`, `AsyncDisposable` resources cannot be added. - * @returns The {@link value} argument. - * - * @throws {TypeError} If {@link value} is not an object, or if either `Symbol.dispose` or `Symbol.asyncDispose` are not - * defined, or if {@link value} does not have an appropriate `Symbol.dispose` or `Symbol.asyncDispose` method. - */ -export declare function __addDisposableResource(env: { stack: { value?: unknown, dispose?: Function, async: boolean }[]; error: unknown; hasError: boolean; }, value: T, async: boolean): T; - -/** - * Disposes all resources in a resource-tracking environment object. - * @param env A resource-tracking environment object. - * @returns A {@link Promise} if any resources in the environment were marked as `async` when added; otherwise, `void`. - * - * @throws {SuppressedError} if an error thrown during disposal would have suppressed a prior error from disposal or the - * error recorded in the resource-tracking environment object. - * @seealso {@link __addDisposableResource} - */ -export declare function __disposeResources(env: { stack: { value?: unknown, dispose?: Function, async: boolean }[]; error: unknown; hasError: boolean; }): any; - -/** - * Transforms a relative import specifier ending in a non-declaration TypeScript file extension to its JavaScript file extension counterpart. - * @param path The import specifier. - * @param preserveJsx Causes '*.tsx' to transform to '*.jsx' instead of '*.js'. Should be true when `--jsx` is set to `preserve`. - */ -export declare function __rewriteRelativeImportExtension(path: string, preserveJsx?: boolean): string; \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/tslib.es6.html b/skills/flight-finder/node_modules/tslib/tslib.es6.html deleted file mode 100644 index b122e41..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.es6.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/tslib.es6.js b/skills/flight-finder/node_modules/tslib/tslib.es6.js deleted file mode 100644 index 6c1739b..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.es6.js +++ /dev/null @@ -1,402 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -export function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -export var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - } - return __assign.apply(this, arguments); -} - -export function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -export function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -export function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -} - -export function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } - else if (_ = accept(result)) { - if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; -}; - -export function __runInitializers(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : void 0; -}; - -export function __propKey(x) { - return typeof x === "symbol" ? x : "".concat(x); -}; - -export function __setFunctionName(f, name, prefix) { - if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); -}; - -export function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); -} - -export function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -export function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -export var __createBinding = Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -}); - -export function __exportStar(m, o) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); -} - -export function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -export function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -/** @deprecated */ -export function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; -} - -/** @deprecated */ -export function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -} - -export function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -export function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -} - -export function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; - function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } - function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -} - -export function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } -} - -export function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -} - -export function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -}; - -var __setModuleDefault = Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}; - -var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); -}; - -export function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; -} - -export function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; -} - -export function __classPrivateFieldGet(receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -} - -export function __classPrivateFieldSet(receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -} - -export function __classPrivateFieldIn(state, receiver) { - if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); -} - -export function __addDisposableResource(env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; - -} - -var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -export function __disposeResources(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); -} - -export function __rewriteRelativeImportExtension(path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); - }); - } - return path; -} - -export default { - __extends: __extends, - __assign: __assign, - __rest: __rest, - __decorate: __decorate, - __param: __param, - __esDecorate: __esDecorate, - __runInitializers: __runInitializers, - __propKey: __propKey, - __setFunctionName: __setFunctionName, - __metadata: __metadata, - __awaiter: __awaiter, - __generator: __generator, - __createBinding: __createBinding, - __exportStar: __exportStar, - __values: __values, - __read: __read, - __spread: __spread, - __spreadArrays: __spreadArrays, - __spreadArray: __spreadArray, - __await: __await, - __asyncGenerator: __asyncGenerator, - __asyncDelegator: __asyncDelegator, - __asyncValues: __asyncValues, - __makeTemplateObject: __makeTemplateObject, - __importStar: __importStar, - __importDefault: __importDefault, - __classPrivateFieldGet: __classPrivateFieldGet, - __classPrivateFieldSet: __classPrivateFieldSet, - __classPrivateFieldIn: __classPrivateFieldIn, - __addDisposableResource: __addDisposableResource, - __disposeResources: __disposeResources, - __rewriteRelativeImportExtension: __rewriteRelativeImportExtension, -}; diff --git a/skills/flight-finder/node_modules/tslib/tslib.es6.mjs b/skills/flight-finder/node_modules/tslib/tslib.es6.mjs deleted file mode 100644 index c17990a..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.es6.mjs +++ /dev/null @@ -1,401 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise, SuppressedError, Symbol, Iterator */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -export function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -export var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - } - return __assign.apply(this, arguments); -} - -export function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -export function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -export function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -} - -export function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } - else if (_ = accept(result)) { - if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; -}; - -export function __runInitializers(thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : void 0; -}; - -export function __propKey(x) { - return typeof x === "symbol" ? x : "".concat(x); -}; - -export function __setFunctionName(f, name, prefix) { - if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); -}; - -export function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); -} - -export function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -export function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -export var __createBinding = Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -}); - -export function __exportStar(m, o) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); -} - -export function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -export function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -/** @deprecated */ -export function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; -} - -/** @deprecated */ -export function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -} - -export function __spreadArray(to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -} - -export function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -} - -export function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; - function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } - function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -} - -export function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } -} - -export function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -} - -export function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -}; - -var __setModuleDefault = Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}; - -var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); -}; - -export function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; -} - -export function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; -} - -export function __classPrivateFieldGet(receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); -} - -export function __classPrivateFieldSet(receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; -} - -export function __classPrivateFieldIn(state, receiver) { - if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); -} - -export function __addDisposableResource(env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; -} - -var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; -}; - -export function __disposeResources(env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); -} - -export function __rewriteRelativeImportExtension(path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); - }); - } - return path; -} - -export default { - __extends, - __assign, - __rest, - __decorate, - __param, - __esDecorate, - __runInitializers, - __propKey, - __setFunctionName, - __metadata, - __awaiter, - __generator, - __createBinding, - __exportStar, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet, - __classPrivateFieldIn, - __addDisposableResource, - __disposeResources, - __rewriteRelativeImportExtension, -}; diff --git a/skills/flight-finder/node_modules/tslib/tslib.html b/skills/flight-finder/node_modules/tslib/tslib.html deleted file mode 100644 index 44c9ba5..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tslib/tslib.js b/skills/flight-finder/node_modules/tslib/tslib.js deleted file mode 100644 index 5e12ace..0000000 --- a/skills/flight-finder/node_modules/tslib/tslib.js +++ /dev/null @@ -1,484 +0,0 @@ -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global global, define, Symbol, Reflect, Promise, SuppressedError, Iterator */ -var __extends; -var __assign; -var __rest; -var __decorate; -var __param; -var __esDecorate; -var __runInitializers; -var __propKey; -var __setFunctionName; -var __metadata; -var __awaiter; -var __generator; -var __exportStar; -var __values; -var __read; -var __spread; -var __spreadArrays; -var __spreadArray; -var __await; -var __asyncGenerator; -var __asyncDelegator; -var __asyncValues; -var __makeTemplateObject; -var __importStar; -var __importDefault; -var __classPrivateFieldGet; -var __classPrivateFieldSet; -var __classPrivateFieldIn; -var __createBinding; -var __addDisposableResource; -var __disposeResources; -var __rewriteRelativeImportExtension; -(function (factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); }); - } - else if (typeof module === "object" && typeof module.exports === "object") { - factory(createExporter(root, createExporter(module.exports))); - } - else { - factory(createExporter(root)); - } - function createExporter(exports, previous) { - if (exports !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports, "__esModule", { value: true }); - } - else { - exports.__esModule = true; - } - } - return function (id, v) { return exports[id] = previous ? previous(id, v) : v; }; - } -}) -(function (exporter) { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - - __extends = function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - - __assign = Object.assign || function (t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - - __rest = function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; - }; - - __decorate = function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - }; - - __param = function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } - }; - - __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { - function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } - var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; - var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; - var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); - var _, done = false; - for (var i = decorators.length - 1; i >= 0; i--) { - var context = {}; - for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; - for (var p in contextIn.access) context.access[p] = contextIn.access[p]; - context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; - var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); - if (kind === "accessor") { - if (result === void 0) continue; - if (result === null || typeof result !== "object") throw new TypeError("Object expected"); - if (_ = accept(result.get)) descriptor.get = _; - if (_ = accept(result.set)) descriptor.set = _; - if (_ = accept(result.init)) initializers.unshift(_); - } - else if (_ = accept(result)) { - if (kind === "field") initializers.unshift(_); - else descriptor[key] = _; - } - } - if (target) Object.defineProperty(target, contextIn.name, descriptor); - done = true; - }; - - __runInitializers = function (thisArg, initializers, value) { - var useValue = arguments.length > 2; - for (var i = 0; i < initializers.length; i++) { - value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); - } - return useValue ? value : void 0; - }; - - __propKey = function (x) { - return typeof x === "symbol" ? x : "".concat(x); - }; - - __setFunctionName = function (f, name, prefix) { - if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; - return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); - }; - - __metadata = function (metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); - }; - - __awaiter = function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - - __generator = function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); - return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - - __exportStar = function(m, o) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); - }; - - __createBinding = Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; - }); - - __values = function (o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - - __read = function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - }; - - /** @deprecated */ - __spread = function () { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - }; - - /** @deprecated */ - __spreadArrays = function () { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - }; - - __spreadArray = function (to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - }; - - __await = function (v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - }; - - __asyncGenerator = function (thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; - function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } - function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } - }; - - __asyncDelegator = function (o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } - }; - - __asyncValues = function (o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } - }; - - __makeTemplateObject = function (cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; - }; - - var __setModuleDefault = Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - }) : function(o, v) { - o["default"] = v; - }; - - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - - __importStar = function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; - - __importDefault = function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; - }; - - __classPrivateFieldGet = function (receiver, state, kind, f) { - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); - }; - - __classPrivateFieldSet = function (receiver, state, value, kind, f) { - if (kind === "m") throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); - if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; - }; - - __classPrivateFieldIn = function (state, receiver) { - if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); - return typeof state === "function" ? receiver === state : state.has(receiver); - }; - - __addDisposableResource = function (env, value, async) { - if (value !== null && value !== void 0) { - if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); - var dispose, inner; - if (async) { - if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); - dispose = value[Symbol.asyncDispose]; - } - if (dispose === void 0) { - if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); - dispose = value[Symbol.dispose]; - if (async) inner = dispose; - } - if (typeof dispose !== "function") throw new TypeError("Object not disposable."); - if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; - env.stack.push({ value: value, dispose: dispose, async: async }); - } - else if (async) { - env.stack.push({ async: true }); - } - return value; - }; - - var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { - var e = new Error(message); - return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; - }; - - __disposeResources = function (env) { - function fail(e) { - env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; - env.hasError = true; - } - var r, s = 0; - function next() { - while (r = env.stack.pop()) { - try { - if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); - if (r.dispose) { - var result = r.dispose.call(r.value); - if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); - } - else s |= 1; - } - catch (e) { - fail(e); - } - } - if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); - if (env.hasError) throw env.error; - } - return next(); - }; - - __rewriteRelativeImportExtension = function (path, preserveJsx) { - if (typeof path === "string" && /^\.\.?\//.test(path)) { - return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); - }); - } - return path; - }; - - exporter("__extends", __extends); - exporter("__assign", __assign); - exporter("__rest", __rest); - exporter("__decorate", __decorate); - exporter("__param", __param); - exporter("__esDecorate", __esDecorate); - exporter("__runInitializers", __runInitializers); - exporter("__propKey", __propKey); - exporter("__setFunctionName", __setFunctionName); - exporter("__metadata", __metadata); - exporter("__awaiter", __awaiter); - exporter("__generator", __generator); - exporter("__exportStar", __exportStar); - exporter("__createBinding", __createBinding); - exporter("__values", __values); - exporter("__read", __read); - exporter("__spread", __spread); - exporter("__spreadArrays", __spreadArrays); - exporter("__spreadArray", __spreadArray); - exporter("__await", __await); - exporter("__asyncGenerator", __asyncGenerator); - exporter("__asyncDelegator", __asyncDelegator); - exporter("__asyncValues", __asyncValues); - exporter("__makeTemplateObject", __makeTemplateObject); - exporter("__importStar", __importStar); - exporter("__importDefault", __importDefault); - exporter("__classPrivateFieldGet", __classPrivateFieldGet); - exporter("__classPrivateFieldSet", __classPrivateFieldSet); - exporter("__classPrivateFieldIn", __classPrivateFieldIn); - exporter("__addDisposableResource", __addDisposableResource); - exporter("__disposeResources", __disposeResources); - exporter("__rewriteRelativeImportExtension", __rewriteRelativeImportExtension); -}); - -0 && (module.exports = { - __extends: __extends, - __assign: __assign, - __rest: __rest, - __decorate: __decorate, - __param: __param, - __esDecorate: __esDecorate, - __runInitializers: __runInitializers, - __propKey: __propKey, - __setFunctionName: __setFunctionName, - __metadata: __metadata, - __awaiter: __awaiter, - __generator: __generator, - __exportStar: __exportStar, - __createBinding: __createBinding, - __values: __values, - __read: __read, - __spread: __spread, - __spreadArrays: __spreadArrays, - __spreadArray: __spreadArray, - __await: __await, - __asyncGenerator: __asyncGenerator, - __asyncDelegator: __asyncDelegator, - __asyncValues: __asyncValues, - __makeTemplateObject: __makeTemplateObject, - __importStar: __importStar, - __importDefault: __importDefault, - __classPrivateFieldGet: __classPrivateFieldGet, - __classPrivateFieldSet: __classPrivateFieldSet, - __classPrivateFieldIn: __classPrivateFieldIn, - __addDisposableResource: __addDisposableResource, - __disposeResources: __disposeResources, - __rewriteRelativeImportExtension: __rewriteRelativeImportExtension, -}); diff --git a/skills/flight-finder/node_modules/tsx/LICENSE b/skills/flight-finder/node_modules/tsx/LICENSE deleted file mode 100644 index bf183d2..0000000 --- a/skills/flight-finder/node_modules/tsx/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Hiroki Osame - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/skills/flight-finder/node_modules/tsx/README.md b/skills/flight-finder/node_modules/tsx/README.md deleted file mode 100644 index b269d1c..0000000 --- a/skills/flight-finder/node_modules/tsx/README.md +++ /dev/null @@ -1,32 +0,0 @@ -

-
- - - tsx - -

- -

- -

-TypeScript Execute (tsx): The easiest way to run TypeScript in Node.js -

-Documentation    |    Getting started → -

- -
- -

- - -

-

Already a sponsor? Join the discussion in the Development repo!

- -## Sponsors - -

- - - -

- diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.cjs b/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.cjs deleted file mode 100755 index 7c0f094..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.cjs +++ /dev/null @@ -1 +0,0 @@ -"use strict";require("../../get-pipe-path-BoR10qr8.cjs");var r=require("../../register-D46fvsV_.cjs"),e=require("../../require-D4F1Lv60.cjs");require("module"),require("node:path"),require("../../temporary-directory-B83uKxJF.cjs"),require("node:os"),require("node:module"),require("node:url"),require("get-tsconfig"),require("node:fs"),require("../../index-gckBtVBf.cjs"),require("esbuild"),require("node:crypto"),require("../../client-D6NvIMSC.cjs"),require("node:net"),require("node:util"),require("../../index-BWFBUo6r.cjs"),exports.register=r.register,exports.require=e.tsxRequire; diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.cts b/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.cts deleted file mode 100644 index 2ef7ba3..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.cts +++ /dev/null @@ -1,35 +0,0 @@ -import { R as RequiredProperty } from '../../types-Cxp8y2TL.js'; - -type RegisterOptions = { - namespace?: string; -}; -type Unregister = () => void; -type ScopedRequire = (id: string, fromFile: string | URL) => any; -type ScopedResolve = (id: string, fromFile: string | URL, resolveOptions?: { - paths?: string[] | undefined; -}) => string; -type NamespacedUnregister = Unregister & { - require: ScopedRequire; - resolve: ScopedResolve; - unregister: Unregister; -}; -type Register = { - (options: RequiredProperty): NamespacedUnregister; - (options?: RegisterOptions): Unregister; -}; -declare const register: Register; - -declare const tsxRequire: { - (id: string, fromFile: string | URL): any; - resolve: { - (id: string, fromFile: string | URL, options?: { - paths?: string[] | undefined; - }): string; - paths: (request: string) => string[] | null; - }; - main: NodeJS.Module | undefined; - extensions: NodeJS.RequireExtensions; - cache: NodeJS.Dict; -}; - -export { register, tsxRequire as require }; diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.mts b/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.mts deleted file mode 100644 index 2ef7ba3..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.d.mts +++ /dev/null @@ -1,35 +0,0 @@ -import { R as RequiredProperty } from '../../types-Cxp8y2TL.js'; - -type RegisterOptions = { - namespace?: string; -}; -type Unregister = () => void; -type ScopedRequire = (id: string, fromFile: string | URL) => any; -type ScopedResolve = (id: string, fromFile: string | URL, resolveOptions?: { - paths?: string[] | undefined; -}) => string; -type NamespacedUnregister = Unregister & { - require: ScopedRequire; - resolve: ScopedResolve; - unregister: Unregister; -}; -type Register = { - (options: RequiredProperty): NamespacedUnregister; - (options?: RegisterOptions): Unregister; -}; -declare const register: Register; - -declare const tsxRequire: { - (id: string, fromFile: string | URL): any; - resolve: { - (id: string, fromFile: string | URL, options?: { - paths?: string[] | undefined; - }): string; - paths: (request: string) => string[] | null; - }; - main: NodeJS.Module | undefined; - extensions: NodeJS.RequireExtensions; - cache: NodeJS.Dict; -}; - -export { register, tsxRequire as require }; diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.mjs b/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.mjs deleted file mode 100755 index 7eca845..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/api/index.mjs +++ /dev/null @@ -1 +0,0 @@ -import"../../get-pipe-path-BHW2eJdv.mjs";import{r as j}from"../../register-CFH5oNdT.mjs";import{t as l}from"../../require-DQxpCAr4.mjs";import"module";import"node:path";import"../../temporary-directory-CwHp0_NW.mjs";import"node:os";import"node:module";import"node:url";import"get-tsconfig";import"node:fs";import"../../index-7AaEi15b.mjs";import"esbuild";import"node:crypto";import"../../client-BQVF1NaW.mjs";import"node:net";import"node:util";import"../../index-gbaejti9.mjs";export{j as register,l as require}; diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/index.cjs b/skills/flight-finder/node_modules/tsx/dist/cjs/index.cjs deleted file mode 100755 index 346c5da..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/index.cjs +++ /dev/null @@ -1 +0,0 @@ -"use strict";var r=require("../register-D46fvsV_.cjs");require("../get-pipe-path-BoR10qr8.cjs"),require("module"),require("node:path"),require("../temporary-directory-B83uKxJF.cjs"),require("node:os"),require("node:module"),require("node:url"),require("get-tsconfig"),require("node:fs"),require("../index-gckBtVBf.cjs"),require("esbuild"),require("node:crypto"),require("../client-D6NvIMSC.cjs"),require("node:net"),require("node:util"),require("../index-BWFBUo6r.cjs"),r.register(); diff --git a/skills/flight-finder/node_modules/tsx/dist/cjs/index.mjs b/skills/flight-finder/node_modules/tsx/dist/cjs/index.mjs deleted file mode 100755 index 473f99d..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cjs/index.mjs +++ /dev/null @@ -1 +0,0 @@ -import{r}from"../register-CFH5oNdT.mjs";import"../get-pipe-path-BHW2eJdv.mjs";import"module";import"node:path";import"../temporary-directory-CwHp0_NW.mjs";import"node:os";import"node:module";import"node:url";import"get-tsconfig";import"node:fs";import"../index-7AaEi15b.mjs";import"esbuild";import"node:crypto";import"../client-BQVF1NaW.mjs";import"node:net";import"node:util";import"../index-gbaejti9.mjs";r(); diff --git a/skills/flight-finder/node_modules/tsx/dist/cli.cjs b/skills/flight-finder/node_modules/tsx/dist/cli.cjs deleted file mode 100755 index 18f0299..0000000 --- a/skills/flight-finder/node_modules/tsx/dist/cli.cjs +++ /dev/null @@ -1,54 +0,0 @@ -"use strict";var bn=Object.defineProperty;var a=(t,e)=>bn(t,"name",{value:e,configurable:!0});var ct=require("node:os"),vn=require("tty"),Sn=require("esbuild"),Bn=require("./package-Dxt5kIHw.cjs"),he=require("./get-pipe-path-BoR10qr8.cjs"),_u=require("node:url"),$n=require("child_process"),z=require("path"),oe=require("fs"),ke=require("./node-features-roYmp9jK.cjs"),Tn=require("node:path"),xn=require("events"),_e=require("util"),On=require("stream"),Au=require("os"),ue=require("./index-BWFBUo6r.cjs"),Nn=require("node:net"),ft=require("node:fs"),Hn=require("./temporary-directory-B83uKxJF.cjs");require("module");const Pn="known-flag",Ln="unknown-flag",In="argument",{stringify:Ae}=JSON,kn=/\B([A-Z])/g,Mn=a(t=>t.replace(kn,"-$1").toLowerCase(),"v$1"),{hasOwnProperty:Gn}=Object.prototype,ye=a((t,e)=>Gn.call(t,e),"w$2"),Wn=a(t=>Array.isArray(t),"L$2"),yu=a(t=>typeof t=="function"?[t,!1]:Wn(t)?[t[0],!0]:yu(t.type),"b$2"),jn=a((t,e)=>t===Boolean?e!=="false":e,"d$2"),Un=a((t,e)=>typeof e=="boolean"?e:t===Number&&e===""?Number.NaN:t(e),"m$1"),Kn=/[\s.:=]/,Vn=a(t=>{const e=`Flag name ${Ae(t)}`;if(t.length===0)throw new Error(`${e} cannot be empty`);if(t.length===1)throw new Error(`${e} must be longer than a character`);const u=t.match(Kn);if(u)throw new Error(`${e} cannot contain ${Ae(u?.[0])}`)},"B"),zn=a(t=>{const e={},u=a((r,n)=>{if(ye(e,r))throw new Error(`Duplicate flags named ${Ae(r)}`);e[r]=n},"r");for(const r in t){if(!ye(t,r))continue;Vn(r);const n=t[r],s=[[],...yu(n),n];u(r,s);const i=Mn(r);if(r!==i&&u(i,s),"alias"in n&&typeof n.alias=="string"){const{alias:D}=n,o=`Flag alias ${Ae(D)} for flag ${Ae(r)}`;if(D.length===0)throw new Error(`${o} cannot be empty`);if(D.length>1)throw new Error(`${o} must be a single character`);u(D,s)}}return e},"K$1"),Yn=a((t,e)=>{const u={};for(const r in t){if(!ye(t,r))continue;const[n,,s,i]=e[r];if(n.length===0&&"default"in i){let{default:D}=i;typeof D=="function"&&(D=D()),u[r]=D}else u[r]=s?n:n.pop()}return u},"_$2"),Me="--",qn=/[.:=]/,Xn=/^-{1,2}\w/,Qn=a(t=>{if(!Xn.test(t))return;const e=!t.startsWith(Me);let u=t.slice(e?1:2),r;const n=u.match(qn);if(n){const{index:s}=n;r=u.slice(s+1),u=u.slice(0,s)}return[u,r,e]},"N"),Zn=a((t,{onFlag:e,onArgument:u})=>{let r;const n=a((s,i)=>{if(typeof r!="function")return!0;r(s,i),r=void 0},"o");for(let s=0;s{for(const[u,r,n]of e.reverse()){if(r){const s=t[u];let i=s.slice(0,r);if(n||(i+=s.slice(r+1)),i!=="-"){t[u]=i;continue}}t.splice(u,1)}},"E"),wu=a((t,e=process.argv.slice(2),{ignore:u}={})=>{const r=[],n=zn(t),s={},i=[];return i[Me]=[],Zn(e,{onFlag(D,o,c){const f=ye(n,D);if(!u?.(f?Pn:Ln,D,o)){if(f){const[h,l]=n[D],p=jn(l,o),C=a((g,y)=>{r.push(c),y&&r.push(y),h.push(Un(l,g||""))},"p");return p===void 0?C:C(p)}ye(s,D)||(s[D]=[]),s[D].push(o===void 0?!0:o),r.push(c)}},onArgument(D,o,c){u?.(In,e[o[0]])||(i.push(...D),c?(i[Me]=D,e.splice(o[0])):r.push(o))}}),Jn(e,r),{flags:Yn(t,n),unknownFlags:s,_:i}},"U$2");var es=Object.create,Ge=Object.defineProperty,ts=Object.defineProperties,us=Object.getOwnPropertyDescriptor,rs=Object.getOwnPropertyDescriptors,ns=Object.getOwnPropertyNames,Ru=Object.getOwnPropertySymbols,ss=Object.getPrototypeOf,bu=Object.prototype.hasOwnProperty,is=Object.prototype.propertyIsEnumerable,vu=a((t,e,u)=>e in t?Ge(t,e,{enumerable:!0,configurable:!0,writable:!0,value:u}):t[e]=u,"W$1"),We=a((t,e)=>{for(var u in e||(e={}))bu.call(e,u)&&vu(t,u,e[u]);if(Ru)for(var u of Ru(e))is.call(e,u)&&vu(t,u,e[u]);return t},"p"),ht=a((t,e)=>ts(t,rs(e)),"c"),Ds=a(t=>Ge(t,"__esModule",{value:!0}),"nD"),os=a((t,e)=>()=>(t&&(e=t(t=0)),e),"rD"),as=a((t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),"iD"),ls=a((t,e,u,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ns(e))!bu.call(t,n)&&n!=="default"&&Ge(t,n,{get:a(()=>e[n],"get"),enumerable:!(r=us(e,n))||r.enumerable});return t},"oD"),cs=a((t,e)=>ls(Ds(Ge(t!=null?es(ss(t)):{},"default",{value:t,enumerable:!0})),t),"BD"),K=os(()=>{}),fs=as((t,e)=>{K(),e.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});K(),K(),K();var hs=a(t=>{var e,u,r;let n=(e=process.stdout.columns)!=null?e:Number.POSITIVE_INFINITY;return typeof t=="function"&&(t=t(n)),t||(t={}),Array.isArray(t)?{columns:t,stdoutColumns:n}:{columns:(u=t.columns)!=null?u:[],stdoutColumns:(r=t.stdoutColumns)!=null?r:n}},"v");K(),K(),K(),K(),K();function ds({onlyFirst:t=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}a(ds,"w$1");function Su(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(ds(),"")}a(Su,"d$1"),K();function Es(t){return Number.isInteger(t)?t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141):!1}a(Es,"y$1");var ps=cs(fs());function ae(t){if(typeof t!="string"||t.length===0||(t=Su(t),t.length===0))return 0;t=t.replace((0,ps.default)()," ");let e=0;for(let u=0;u=127&&r<=159||r>=768&&r<=879||(r>65535&&u++,e+=Es(r)?2:1)}return e}a(ae,"g");var Bu=a(t=>Math.max(...t.split(` -`).map(ae)),"b$1"),Cs=a(t=>{let e=[];for(let u of t){let{length:r}=u,n=r-e.length;for(let s=0;se[s]&&(e[s]=i)}}return e},"k$1");K();var $u=/^\d+%$/,Tu={width:"auto",align:"left",contentWidth:0,paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0,horizontalPadding:0,paddingLeftString:"",paddingRightString:""},Fs=a((t,e)=>{var u;let r=[];for(let n=0;n=e){let o=i-e,c=Math.ceil(u.paddingLeft/n*o),f=o-c;u.paddingLeft-=c,u.paddingRight-=f,u.horizontalPadding=u.paddingLeft+u.paddingRight}u.paddingLeftString=u.paddingLeft?" ".repeat(u.paddingLeft):"",u.paddingRightString=u.paddingRight?" ".repeat(u.paddingRight):"";let D=e-u.horizontalPadding;u.width=Math.max(Math.min(u.width,D),s)}}a(gs,"aD");var xu=a(()=>Object.assign([],{columns:0}),"G$1");function ms(t,e){let u=[xu()],[r]=u;for(let n of t){let s=n.width+n.horizontalPadding;r.columns+s>e&&(r=xu(),u.push(r)),r.push(n),r.columns+=s}for(let n of u){let s=n.reduce((l,p)=>l+p.width+p.horizontalPadding,0),i=e-s;if(i===0)continue;let D=n.filter(l=>"autoOverflow"in l),o=D.filter(l=>l.autoOverflow>0),c=o.reduce((l,p)=>l+p.autoOverflow,0),f=Math.min(c,i);for(let l of o){let p=Math.floor(l.autoOverflow/c*f);l.width+=p,i-=p}let h=Math.floor(i/D.length);for(let l=0;le=>`\x1B[${e+t}m`,"U$1"),Nu=a((t=0)=>e=>`\x1B[${38+t};5;${e}m`,"V$1"),Hu=a((t=0)=>(e,u,r)=>`\x1B[${38+t};2;${e};${u};${r}m`,"Y");function As(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[u,r]of Object.entries(e)){for(let[n,s]of Object.entries(r))e[n]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},r[n]=e[n],t.set(s[0],s[1]);Object.defineProperty(e,u,{value:r,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",e.color.ansi=Ou(),e.color.ansi256=Nu(),e.color.ansi16m=Hu(),e.bgColor.ansi=Ou(dt),e.bgColor.ansi256=Nu(dt),e.bgColor.ansi16m=Hu(dt),Object.defineProperties(e,{rgbToAnsi256:{value:a((u,r,n)=>u===r&&r===n?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5),"value"),enumerable:!1},hexToRgb:{value:a(u=>{let r=/(?[a-f\d]{6}|[a-f\d]{3})/i.exec(u.toString(16));if(!r)return[0,0,0];let{colorString:n}=r.groups;n.length===3&&(n=n.split("").map(i=>i+i).join(""));let s=Number.parseInt(n,16);return[s>>16&255,s>>8&255,s&255]},"value"),enumerable:!1},hexToAnsi256:{value:a(u=>e.rgbToAnsi256(...e.hexToRgb(u)),"value"),enumerable:!1},ansi256ToAnsi:{value:a(u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let r,n,s;if(u>=232)r=((u-232)*10+8)/255,n=r,s=r;else{u-=16;let o=u%36;r=Math.floor(u/36)/5,n=Math.floor(o/6)/5,s=o%6/5}let i=Math.max(r,n,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(n)<<1|Math.round(r));return i===2&&(D+=60),D},"value"),enumerable:!1},rgbToAnsi:{value:a((u,r,n)=>e.ansi256ToAnsi(e.rgbToAnsi256(u,r,n)),"value"),enumerable:!1},hexToAnsi:{value:a(u=>e.ansi256ToAnsi(e.hexToAnsi256(u)),"value"),enumerable:!1}}),e}a(As,"AD");var ys=As(),ws=ys,je=new Set(["\x1B","\x9B"]),Rs=39,Et="\x07",Pu="[",bs="]",Lu="m",pt=`${bs}8;;`,Iu=a(t=>`${je.values().next().value}${Pu}${t}${Lu}`,"J$1"),ku=a(t=>`${je.values().next().value}${pt}${t}${Et}`,"Q"),vs=a(t=>t.split(" ").map(e=>ae(e)),"hD"),Ct=a((t,e,u)=>{let r=[...e],n=!1,s=!1,i=ae(Su(t[t.length-1]));for(let[D,o]of r.entries()){let c=ae(o);if(i+c<=u?t[t.length-1]+=o:(t.push(o),i=0),je.has(o)&&(n=!0,s=r.slice(D+1).join("").startsWith(pt)),n){s?o===Et&&(n=!1,s=!1):o===Lu&&(n=!1);continue}i+=c,i===u&&D0&&t.length>1&&(t[t.length-2]+=t.pop())},"S$1"),Ss=a(t=>{let e=t.split(" "),u=e.length;for(;u>0&&!(ae(e[u-1])>0);)u--;return u===e.length?t:e.slice(0,u).join(" ")+e.slice(u).join("")},"cD"),Bs=a((t,e,u={})=>{if(u.trim!==!1&&t.trim()==="")return"";let r="",n,s,i=vs(t),D=[""];for(let[c,f]of t.split(" ").entries()){u.trim!==!1&&(D[D.length-1]=D[D.length-1].trimStart());let h=ae(D[D.length-1]);if(c!==0&&(h>=e&&(u.wordWrap===!1||u.trim===!1)&&(D.push(""),h=0),(h>0||u.trim===!1)&&(D[D.length-1]+=" ",h++)),u.hard&&i[c]>e){let l=e-h,p=1+Math.floor((i[c]-l-1)/e);Math.floor((i[c]-1)/e)e&&h>0&&i[c]>0){if(u.wordWrap===!1&&he&&u.wordWrap===!1){Ct(D,f,e);continue}D[D.length-1]+=f}u.trim!==!1&&(D=D.map(c=>Ss(c)));let o=[...D.join(` -`)];for(let[c,f]of o.entries()){if(r+=f,je.has(f)){let{groups:l}=new RegExp(`(?:\\${Pu}(?\\d+)m|\\${pt}(?.*)${Et})`).exec(o.slice(c).join(""))||{groups:{}};if(l.code!==void 0){let p=Number.parseFloat(l.code);n=p===Rs?void 0:p}else l.uri!==void 0&&(s=l.uri.length===0?void 0:l.uri)}let h=ws.codes.get(Number(n));o[c+1]===` -`?(s&&(r+=ku("")),n&&h&&(r+=Iu(h))):f===` -`&&(n&&h&&(r+=Iu(n)),s&&(r+=ku(s)))}return r},"dD");function $s(t,e,u){return String(t).normalize().replace(/\r\n/g,` -`).split(` -`).map(r=>Bs(r,e,u)).join(` -`)}a($s,"T$1");var Mu=a(t=>Array.from({length:t}).fill(""),"X");function Ts(t,e){let u=[],r=0;for(let n of t){let s=0,i=n.map(o=>{var c;let f=(c=e[r])!=null?c:"";r+=1,o.preprocess&&(f=o.preprocess(f)),Bu(f)>o.width&&(f=$s(f,o.width,{hard:!0}));let h=f.split(` -`);if(o.postprocess){let{postprocess:l}=o;h=h.map((p,C)=>l.call(o,p,C))}return o.paddingTop&&h.unshift(...Mu(o.paddingTop)),o.paddingBottom&&h.push(...Mu(o.paddingBottom)),h.length>s&&(s=h.length),ht(We({},o),{lines:h})}),D=[];for(let o=0;o{var h;let l=(h=f.lines[o])!=null?h:"",p=Number.isFinite(f.width)?" ".repeat(f.width-ae(l)):"",C=f.paddingLeftString;return f.align==="right"&&(C+=p),C+=l,f.align==="left"&&(C+=p),C+f.paddingRightString}).join("");D.push(c)}u.push(D.join(` -`))}return u.join(` -`)}a(Ts,"P");function xs(t,e){if(!t||t.length===0)return"";let u=Cs(t),r=u.length;if(r===0)return"";let{stdoutColumns:n,columns:s}=hs(e);if(s.length>r)throw new Error(`${s.length} columns defined, but only ${r} columns found`);let i=_s(n,s,u);return t.map(D=>Ts(i,D)).join(` -`)}a(xs,"mD"),K();var Os=["<",">","=",">=","<="];function Ns(t){if(!Os.includes(t))throw new TypeError(`Invalid breakpoint operator: ${t}`)}a(Ns,"xD");function Hs(t){let e=Object.keys(t).map(u=>{let[r,n]=u.split(" ");Ns(r);let s=Number.parseInt(n,10);if(Number.isNaN(s))throw new TypeError(`Invalid breakpoint value: ${n}`);let i=t[u];return{operator:r,breakpoint:s,value:i}}).sort((u,r)=>r.breakpoint-u.breakpoint);return u=>{var r;return(r=e.find(({operator:n,breakpoint:s})=>n==="="&&u===s||n===">"&&u>s||n==="<"&&u="&&u>=s||n==="<="&&u<=s))==null?void 0:r.value}}a(Hs,"wD");const Ps=a(t=>t.replace(/[\W_]([a-z\d])?/gi,(e,u)=>u?u.toUpperCase():""),"S"),Ls=a(t=>t.replace(/\B([A-Z])/g,"-$1").toLowerCase(),"q"),Is={"> 80":[{width:"content-width",paddingLeft:2,paddingRight:8},{width:"auto"}],"> 40":[{width:"auto",paddingLeft:2,paddingRight:8,preprocess:a(t=>t.trim(),"preprocess")},{width:"100%",paddingLeft:2,paddingBottom:1}],"> 0":{stdoutColumns:1e3,columns:[{width:"content-width",paddingLeft:2,paddingRight:8},{width:"content-width"}]}};function ks(t){let e=!1;return{type:"table",data:{tableData:Object.keys(t).sort((u,r)=>u.localeCompare(r)).map(u=>{const r=t[u],n="alias"in r;return n&&(e=!0),{name:u,flag:r,flagFormatted:`--${Ls(u)}`,aliasesEnabled:e,aliasFormatted:n?`-${r.alias}`:void 0}}).map(u=>(u.aliasesEnabled=e,[{type:"flagName",data:u},{type:"flagDescription",data:u}])),tableBreakpoints:Is}}}a(ks,"D");const Gu=a(t=>!t||(t.version??(t.help?t.help.version:void 0)),"A"),Wu=a(t=>{const e="parent"in t&&t.parent?.name;return(e?`${e} `:"")+t.name},"C");function Ms(t){const e=[];t.name&&e.push(Wu(t));const u=Gu(t)??("parent"in t&&Gu(t.parent));if(u&&e.push(`v${u}`),e.length!==0)return{id:"name",type:"text",data:`${e.join(" ")} -`}}a(Ms,"R");function Gs(t){const{help:e}=t;if(!(!e||!e.description))return{id:"description",type:"text",data:`${e.description} -`}}a(Gs,"L");function Ws(t){const e=t.help||{};if("usage"in e)return e.usage?{id:"usage",type:"section",data:{title:"Usage:",body:Array.isArray(e.usage)?e.usage.join(` -`):e.usage}}:void 0;if(t.name){const u=[],r=[Wu(t)];if(t.flags&&Object.keys(t.flags).length>0&&r.push("[flags...]"),t.parameters&&t.parameters.length>0){const{parameters:n}=t,s=n.indexOf("--"),i=s>-1&&n.slice(s+1).some(D=>D.startsWith("<"));r.push(n.map(D=>D!=="--"?D:i?"--":"[--]").join(" "))}if(r.length>1&&u.push(r.join(" ")),"commands"in t&&t.commands?.length&&u.push(`${t.name} `),u.length>0)return{id:"usage",type:"section",data:{title:"Usage:",body:u.join(` -`)}}}}a(Ws,"T");function js(t){return!("commands"in t)||!t.commands?.length?void 0:{id:"commands",type:"section",data:{title:"Commands:",body:{type:"table",data:{tableData:t.commands.map(e=>[e.options.name,e.options.help?e.options.help.description:""]),tableOptions:[{width:"content-width",paddingLeft:2,paddingRight:8}]}},indentBody:0}}}a(js,"_");function Us(t){if(!(!t.flags||Object.keys(t.flags).length===0))return{id:"flags",type:"section",data:{title:"Flags:",body:ks(t.flags),indentBody:0}}}a(Us,"k");function Ks(t){const{help:e}=t;if(!e||!e.examples||e.examples.length===0)return;let{examples:u}=e;if(Array.isArray(u)&&(u=u.join(` -`)),u)return{id:"examples",type:"section",data:{title:"Examples:",body:u}}}a(Ks,"F");function Vs(t){if(!("alias"in t)||!t.alias)return;const{alias:e}=t;return{id:"aliases",type:"section",data:{title:"Aliases:",body:Array.isArray(e)?e.join(", "):e}}}a(Vs,"H");const zs=a(t=>[Ms,Gs,Ws,js,Us,Ks,Vs].map(e=>e(t)).filter(Boolean),"U"),Ys=vn.WriteStream.prototype.hasColors();class qs{static{a(this,"M")}text(e){return e}bold(e){return Ys?`\x1B[1m${e}\x1B[22m`:e.toLocaleUpperCase()}indentText({text:e,spaces:u}){return e.replace(/^/gm," ".repeat(u))}heading(e){return this.bold(e)}section({title:e,body:u,indentBody:r=2}){return`${(e?`${this.heading(e)} -`:"")+(u?this.indentText({text:this.render(u),spaces:r}):"")} -`}table({tableData:e,tableOptions:u,tableBreakpoints:r}){return xs(e.map(n=>n.map(s=>this.render(s))),r?Hs(r):u)}flagParameter(e){return e===Boolean?"":e===String?"":e===Number?"":Array.isArray(e)?this.flagParameter(e[0]):""}flagOperator(e){return" "}flagName(e){const{flag:u,flagFormatted:r,aliasesEnabled:n,aliasFormatted:s}=e;let i="";if(s?i+=`${s}, `:n&&(i+=" "),i+=r,"placeholder"in u&&typeof u.placeholder=="string")i+=`${this.flagOperator(e)}${u.placeholder}`;else{const D=this.flagParameter("type"in u?u.type:u);D&&(i+=`${this.flagOperator(e)}${D}`)}return i}flagDefault(e){return JSON.stringify(e)}flagDescription({flag:e}){let u="description"in e?e.description??"":"";if("default"in e){let{default:r}=e;typeof r=="function"&&(r=r()),r&&(u+=` (default: ${this.flagDefault(r)})`)}return u}render(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(u=>this.render(u)).join(` -`);if("type"in e&&this[e.type]){const u=this[e.type];if(typeof u=="function")return u.call(this,e.data)}throw new Error(`Invalid node type: ${JSON.stringify(e)}`)}}const Ft=/^[\w.-]+$/,{stringify:ee}=JSON,Xs=/[|\\{}()[\]^$+*?.]/;function gt(t){const e=[];let u,r;for(const n of t){if(r)throw new Error(`Invalid parameter: Spread parameter ${ee(r)} must be last`);const s=n[0],i=n[n.length-1];let D;if(s==="<"&&i===">"&&(D=!0,u))throw new Error(`Invalid parameter: Required parameter ${ee(n)} cannot come after optional parameter ${ee(u)}`);if(s==="["&&i==="]"&&(D=!1,u=n),D===void 0)throw new Error(`Invalid parameter: ${ee(n)}. Must be wrapped in <> (required parameter) or [] (optional parameter)`);let o=n.slice(1,-1);const c=o.slice(-3)==="...";c&&(r=n,o=o.slice(0,-3));const f=o.match(Xs);if(f)throw new Error(`Invalid parameter: ${ee(n)}. Invalid character found ${ee(f[0])}`);e.push({name:o,required:D,spread:c})}return e}a(gt,"w");function mt(t,e,u,r){for(let n=0;n{console.log(e.version)},"f");if(s&&o.flags.version===!0)return c(),process.exit(0);const f=new qs,h=D&&i?.render?i.render:C=>f.render(C),l=a(C=>{const g=zs({...e,...C?{help:C}:{},flags:n});console.log(h(g,f))},"u");if(D&&o.flags.help===!0)return l(),process.exit(0);if(e.parameters){let{parameters:C}=e,g=o._;const y=C.indexOf("--"),B=C.slice(y+1),H=Object.create(null);if(y>-1&&B.length>0){C=C.slice(0,y);const $=o._["--"];g=g.slice(0,-$.length||void 0),mt(H,gt(C),g,l),mt(H,gt(B),$,l)}else mt(H,gt(C),g,l);Object.assign(o._,H)}const p={...o,showVersion:c,showHelp:l};return typeof u=="function"&&u(p),{command:t,...p}}a(ju,"x");function Zs(t,e){const u=new Map;for(const r of e){const n=[r.options.name],{alias:s}=r.options;s&&(Array.isArray(s)?n.push(...s):n.push(s));for(const i of n){if(u.has(i))throw new Error(`Duplicate command name found: ${ee(i)}`);u.set(i,r)}}return u.get(t)}a(Zs,"z");function Uu(t,e,u=process.argv.slice(2)){if(!t)throw new Error("Options is required");if("name"in t&&(!t.name||!Ft.test(t.name)))throw new Error(`Invalid script name: ${ee(t.name)}`);const r=u[0];if(t.commands&&Ft.test(r)){const n=Zs(r,t.commands);if(n)return ju(n.options.name,{...n.options,parent:t},n.callback,u.slice(1))}return ju(void 0,t,e,u)}a(Uu,"Z");function Js(t,e){if(!t)throw new Error("Command options are required");const{name:u}=t;if(t.name===void 0)throw new Error("Command name is required");if(!Ft.test(u))throw new Error(`Invalid command name ${JSON.stringify(u)}. Command names must be one word.`);return{options:t,callback:e}}a(Js,"G");var ei=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ti(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}a(ti,"getDefaultExportFromCjs");var de={exports:{}},_t,Ku;function ui(){if(Ku)return _t;Ku=1,_t=r,r.sync=n;var t=oe;function e(s,i){var D=i.pathExt!==void 0?i.pathExt:process.env.PATHEXT;if(!D||(D=D.split(";"),D.indexOf("")!==-1))return!0;for(var o=0;oObject.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),"getNotFoundError"),Xu=a((t,e)=>{const u=e.colon||ii,r=t.match(/\//)||Ee&&t.match(/\\/)?[""]:[...Ee?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(u)],n=Ee?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ee?n.split(u):[""];return Ee&&t.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:r,pathExt:s,pathExtExe:n}},"getPathInfo"),Qu=a((t,e,u)=>{typeof e=="function"&&(u=e,e={}),e||(e={});const{pathEnv:r,pathExt:n,pathExtExe:s}=Xu(t,e),i=[],D=a(c=>new Promise((f,h)=>{if(c===r.length)return e.all&&i.length?f(i):h(qu(t));const l=r[c],p=/^".*"$/.test(l)?l.slice(1,-1):l,C=zu.join(p,t),g=!p&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;f(o(g,c,0))}),"step"),o=a((c,f,h)=>new Promise((l,p)=>{if(h===n.length)return l(D(f+1));const C=n[h];Yu(c+C,{pathExt:s},(g,y)=>{if(!g&&y)if(e.all)i.push(c+C);else return l(c+C);return l(o(c,f,h+1))})}),"subStep");return u?D(0).then(c=>u(null,c),u):D(0)},"which$1"),Di=a((t,e)=>{e=e||{};const{pathEnv:u,pathExt:r,pathExtExe:n}=Xu(t,e),s=[];for(let i=0;i{const e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(r=>r.toUpperCase()==="PATH")||"Path"},"pathKey");wt.exports=Zu,wt.exports.default=Zu;var ai=wt.exports;const Ju=z,li=oi,ci=ai;function er(t,e){const u=t.options.env||process.env,r=process.cwd(),n=t.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(t.options.cwd)}catch{}let i;try{i=li.sync(t.command,{path:u[ci({env:u})],pathExt:e?Ju.delimiter:void 0})}catch{}finally{s&&process.chdir(r)}return i&&(i=Ju.resolve(n?t.options.cwd:"",i)),i}a(er,"resolveCommandAttempt");function fi(t){return er(t)||er(t,!0)}a(fi,"resolveCommand$1");var hi=fi,Rt={};const bt=/([()\][%!^"`<>&|;, *?])/g;function di(t){return t=t.replace(bt,"^$1"),t}a(di,"escapeCommand");function Ei(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(bt,"^$1"),e&&(t=t.replace(bt,"^$1")),t}a(Ei,"escapeArgument"),Rt.command=di,Rt.argument=Ei;var pi=/^#!(.*)/;const Ci=pi;var Fi=a((t="")=>{const e=t.match(Ci);if(!e)return null;const[u,r]=e[0].replace(/#! ?/,"").split(" "),n=u.split("/").pop();return n==="env"?r:r?`${n} ${r}`:n},"shebangCommand$1");const vt=oe,gi=Fi;function mi(t){const u=Buffer.alloc(150);let r;try{r=vt.openSync(t,"r"),vt.readSync(r,u,0,150,0),vt.closeSync(r)}catch{}return gi(u.toString())}a(mi,"readShebang$1");var _i=mi;const Ai=z,tr=hi,ur=Rt,yi=_i,wi=process.platform==="win32",Ri=/\.(?:com|exe)$/i,bi=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function vi(t){t.file=tr(t);const e=t.file&&yi(t.file);return e?(t.args.unshift(t.file),t.command=e,tr(t)):t.file}a(vi,"detectShebang");function Si(t){if(!wi)return t;const e=vi(t),u=!Ri.test(e);if(t.options.forceShell||u){const r=bi.test(e);t.command=Ai.normalize(t.command),t.command=ur.command(t.command),t.args=t.args.map(s=>ur.argument(s,r));const n=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${n}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}a(Si,"parseNonShell");function Bi(t,e,u){e&&!Array.isArray(e)&&(u=e,e=null),e=e?e.slice(0):[],u=Object.assign({},u);const r={command:t,args:e,options:u,file:void 0,original:{command:t,args:e}};return u.shell?r:Si(r)}a(Bi,"parse$5");var $i=Bi;const St=process.platform==="win32";function Bt(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}a(Bt,"notFoundError");function Ti(t,e){if(!St)return;const u=t.emit;t.emit=function(r,n){if(r==="exit"){const s=rr(n,e);if(s)return u.call(t,"error",s)}return u.apply(t,arguments)}}a(Ti,"hookChildProcess");function rr(t,e){return St&&t===1&&!e.file?Bt(e.original,"spawn"):null}a(rr,"verifyENOENT");function xi(t,e){return St&&t===1&&!e.file?Bt(e.original,"spawnSync"):null}a(xi,"verifyENOENTSync");var Oi={hookChildProcess:Ti,verifyENOENT:rr,verifyENOENTSync:xi,notFoundError:Bt};const nr=$n,$t=$i,Tt=Oi;function sr(t,e,u){const r=$t(t,e,u),n=nr.spawn(r.command,r.args,r.options);return Tt.hookChildProcess(n,r),n}a(sr,"spawn");function Ni(t,e,u){const r=$t(t,e,u),n=nr.spawnSync(r.command,r.args,r.options);return n.error=n.error||Tt.verifyENOENTSync(n.status,r),n}a(Ni,"spawnSync"),de.exports=sr,de.exports.spawn=sr,de.exports.sync=Ni,de.exports._parse=$t,de.exports._enoent=Tt;var Hi=de.exports,Pi=ti(Hi);const ir=a((t,e)=>{const u={...process.env},r=["inherit","inherit","inherit"];process.send&&r.push("ipc"),e&&(e.noCache&&(u.TSX_DISABLE_CACHE="1"),e.tsconfigPath&&(u.TSX_TSCONFIG_PATH=e.tsconfigPath));const n=t.filter(s=>s!=="-i"&&s!=="--interactive").length===0;return Pi(process.execPath,["--require",he.require.resolve("./preflight.cjs"),...n?["--require",he.require.resolve("./patch-repl.cjs")]:[],ke.isFeatureSupported(ke.moduleRegister)?"--import":"--loader",_u.pathToFileURL(he.require.resolve("./loader.mjs")).toString(),...t],{stdio:r,env:u})},"run");var Ke={};const Li=z,te="\\\\/",Dr=`[^${te}]`,re="\\.",Ii="\\+",ki="\\?",Ve="\\/",Mi="(?=.)",or="[^/]",xt=`(?:${Ve}|$)`,ar=`(?:^|${Ve})`,Ot=`${re}{1,2}${xt}`,Gi=`(?!${re})`,Wi=`(?!${ar}${Ot})`,ji=`(?!${re}{0,1}${xt})`,Ui=`(?!${Ot})`,Ki=`[^.${Ve}]`,Vi=`${or}*?`,lr={DOT_LITERAL:re,PLUS_LITERAL:Ii,QMARK_LITERAL:ki,SLASH_LITERAL:Ve,ONE_CHAR:Mi,QMARK:or,END_ANCHOR:xt,DOTS_SLASH:Ot,NO_DOT:Gi,NO_DOTS:Wi,NO_DOT_SLASH:ji,NO_DOTS_SLASH:Ui,QMARK_NO_DOT:Ki,STAR:Vi,START_ANCHOR:ar},zi={...lr,SLASH_LITERAL:`[${te}]`,QMARK:Dr,STAR:`${Dr}*?`,DOTS_SLASH:`${re}{1,2}(?:[${te}]|$)`,NO_DOT:`(?!${re})`,NO_DOTS:`(?!(?:^|[${te}])${re}{1,2}(?:[${te}]|$))`,NO_DOT_SLASH:`(?!${re}{0,1}(?:[${te}]|$))`,NO_DOTS_SLASH:`(?!${re}{1,2}(?:[${te}]|$))`,QMARK_NO_DOT:`[^.${te}]`,START_ANCHOR:`(?:^|[${te}])`,END_ANCHOR:`(?:[${te}]|$)`},Yi={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};var ze={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:Yi,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:Li.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?zi:lr}};(function(t){const e=z,u=process.platform==="win32",{REGEX_BACKSLASH:r,REGEX_REMOVE_BACKSLASH:n,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:i}=ze;t.isObject=D=>D!==null&&typeof D=="object"&&!Array.isArray(D),t.hasRegexChars=D=>s.test(D),t.isRegexChar=D=>D.length===1&&t.hasRegexChars(D),t.escapeRegex=D=>D.replace(i,"\\$1"),t.toPosixSlashes=D=>D.replace(r,"/"),t.removeBackslashes=D=>D.replace(n,o=>o==="\\"?"":o),t.supportsLookbehinds=()=>{const D=process.version.slice(1).split(".").map(Number);return D.length===3&&D[0]>=9||D[0]===8&&D[1]>=10},t.isWindows=D=>D&&typeof D.windows=="boolean"?D.windows:u===!0||e.sep==="\\",t.escapeLast=(D,o,c)=>{const f=D.lastIndexOf(o,c);return f===-1?D:D[f-1]==="\\"?t.escapeLast(D,o,f-1):`${D.slice(0,f)}\\${D.slice(f)}`},t.removePrefix=(D,o={})=>{let c=D;return c.startsWith("./")&&(c=c.slice(2),o.prefix="./"),c},t.wrapOutput=(D,o={},c={})=>{const f=c.contains?"":"^",h=c.contains?"":"$";let l=`${f}(?:${D})${h}`;return o.negated===!0&&(l=`(?:^(?!${l}).*$)`),l}})(Ke);const cr=Ke,{CHAR_ASTERISK:Nt,CHAR_AT:qi,CHAR_BACKWARD_SLASH:we,CHAR_COMMA:Xi,CHAR_DOT:Ht,CHAR_EXCLAMATION_MARK:Pt,CHAR_FORWARD_SLASH:fr,CHAR_LEFT_CURLY_BRACE:Lt,CHAR_LEFT_PARENTHESES:It,CHAR_LEFT_SQUARE_BRACKET:Qi,CHAR_PLUS:Zi,CHAR_QUESTION_MARK:hr,CHAR_RIGHT_CURLY_BRACE:Ji,CHAR_RIGHT_PARENTHESES:dr,CHAR_RIGHT_SQUARE_BRACKET:eD}=ze,Er=a(t=>t===fr||t===we,"isPathSeparator"),pr=a(t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},"depth"),tD=a((t,e)=>{const u=e||{},r=t.length-1,n=u.parts===!0||u.scanToEnd===!0,s=[],i=[],D=[];let o=t,c=-1,f=0,h=0,l=!1,p=!1,C=!1,g=!1,y=!1,B=!1,H=!1,$=!1,Q=!1,G=!1,se=0,W,A,v={value:"",depth:0,isGlob:!1};const M=a(()=>c>=r,"eos"),F=a(()=>o.charCodeAt(c+1),"peek"),O=a(()=>(W=A,o.charCodeAt(++c)),"advance");for(;c0&&(ie=o.slice(0,f),o=o.slice(f),h-=f),T&&C===!0&&h>0?(T=o.slice(0,h),d=o.slice(h)):C===!0?(T="",d=o):T=o,T&&T!==""&&T!=="/"&&T!==o&&Er(T.charCodeAt(T.length-1))&&(T=T.slice(0,-1)),u.unescape===!0&&(d&&(d=cr.removeBackslashes(d)),T&&H===!0&&(T=cr.removeBackslashes(T)));const E={prefix:ie,input:t,start:f,base:T,glob:d,isBrace:l,isBracket:p,isGlob:C,isExtglob:g,isGlobstar:y,negated:$,negatedExtglob:Q};if(u.tokens===!0&&(E.maxDepth=0,Er(A)||i.push(v),E.tokens=i),u.parts===!0||u.tokens===!0){let j;for(let b=0;b{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();const u=`[${t.join("-")}]`;try{new RegExp(u)}catch{return t.map(n=>Y.escapeRegex(n)).join("..")}return u},"expandRange"),pe=a((t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,"syntaxError"),kt=a((t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=Cr[t]||t;const u={...e},r=typeof u.maxLength=="number"?Math.min(qe,u.maxLength):qe;let n=t.length;if(n>r)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${r}`);const s={type:"bos",value:"",output:u.prepend||""},i=[s],D=u.capture?"":"?:",o=Y.isWindows(e),c=Ye.globChars(o),f=Ye.extglobChars(c),{DOT_LITERAL:h,PLUS_LITERAL:l,SLASH_LITERAL:p,ONE_CHAR:C,DOTS_SLASH:g,NO_DOT:y,NO_DOT_SLASH:B,NO_DOTS_SLASH:H,QMARK:$,QMARK_NO_DOT:Q,STAR:G,START_ANCHOR:se}=c,W=a(_=>`(${D}(?:(?!${se}${_.dot?g:h}).)*?)`,"globstar"),A=u.dot?"":y,v=u.dot?$:Q;let M=u.bash===!0?W(u):G;u.capture&&(M=`(${M})`),typeof u.noext=="boolean"&&(u.noextglob=u.noext);const F={input:t,index:-1,start:0,dot:u.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:i};t=Y.removePrefix(t,F),n=t.length;const O=[],T=[],ie=[];let d=s,E;const j=a(()=>F.index===n-1,"eos"),b=F.peek=(_=1)=>t[F.index+_],Z=F.advance=()=>t[++F.index]||"",J=a(()=>t.slice(F.index+1),"remaining"),V=a((_="",x=0)=>{F.consumed+=_,F.index+=x},"consume"),He=a(_=>{F.output+=_.output!=null?_.output:_.value,V(_.value)},"append"),wn=a(()=>{let _=1;for(;b()==="!"&&(b(2)!=="("||b(3)==="?");)Z(),F.start++,_++;return _%2===0?!1:(F.negated=!0,F.start++,!0)},"negate"),Pe=a(_=>{F[_]++,ie.push(_)},"increment"),De=a(_=>{F[_]--,ie.pop()},"decrement"),R=a(_=>{if(d.type==="globstar"){const x=F.braces>0&&(_.type==="comma"||_.type==="brace"),m=_.extglob===!0||O.length&&(_.type==="pipe"||_.type==="paren");_.type!=="slash"&&_.type!=="paren"&&!x&&!m&&(F.output=F.output.slice(0,-d.output.length),d.type="star",d.value="*",d.output=M,F.output+=d.output)}if(O.length&&_.type!=="paren"&&(O[O.length-1].inner+=_.value),(_.value||_.output)&&He(_),d&&d.type==="text"&&_.type==="text"){d.value+=_.value,d.output=(d.output||"")+_.value;return}_.prev=d,i.push(_),d=_},"push"),Le=a((_,x)=>{const m={...f[x],conditions:1,inner:""};m.prev=d,m.parens=F.parens,m.output=F.output;const w=(u.capture?"(":"")+m.open;Pe("parens"),R({type:_,value:x,output:F.output?"":C}),R({type:"paren",extglob:!0,value:Z(),output:w}),O.push(m)},"extglobOpen"),Rn=a(_=>{let x=_.close+(u.capture?")":""),m;if(_.type==="negate"){let w=M;if(_.inner&&_.inner.length>1&&_.inner.includes("/")&&(w=W(u)),(w!==M||j()||/^\)+$/.test(J()))&&(x=_.close=`)$))${w}`),_.inner.includes("*")&&(m=J())&&/^\.[^\\/.]+$/.test(m)){const N=kt(m,{...e,fastpaths:!1}).output;x=_.close=`)${N})${w})`}_.prev.type==="bos"&&(F.negatedExtglob=!0)}R({type:"paren",extglob:!0,value:E,output:x}),De("parens")},"extglobClose");if(u.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let _=!1,x=t.replace(sD,(m,w,N,U,L,lt)=>U==="\\"?(_=!0,m):U==="?"?w?w+U+(L?$.repeat(L.length):""):lt===0?v+(L?$.repeat(L.length):""):$.repeat(N.length):U==="."?h.repeat(N.length):U==="*"?w?w+U+(L?M:""):M:w?m:`\\${m}`);return _===!0&&(u.unescape===!0?x=x.replace(/\\/g,""):x=x.replace(/\\+/g,m=>m.length%2===0?"\\\\":m?"\\":"")),x===t&&u.contains===!0?(F.output=t,F):(F.output=Y.wrapOutput(x,F,e),F)}for(;!j();){if(E=Z(),E==="\0")continue;if(E==="\\"){const m=b();if(m==="/"&&u.bash!==!0||m==="."||m===";")continue;if(!m){E+="\\",R({type:"text",value:E});continue}const w=/^\\+/.exec(J());let N=0;if(w&&w[0].length>2&&(N=w[0].length,F.index+=N,N%2!==0&&(E+="\\")),u.unescape===!0?E=Z():E+=Z(),F.brackets===0){R({type:"text",value:E});continue}}if(F.brackets>0&&(E!=="]"||d.value==="["||d.value==="[^")){if(u.posix!==!1&&E===":"){const m=d.value.slice(1);if(m.includes("[")&&(d.posix=!0,m.includes(":"))){const w=d.value.lastIndexOf("["),N=d.value.slice(0,w),U=d.value.slice(w+2),L=rD[U];if(L){d.value=N+L,F.backtrack=!0,Z(),!s.output&&i.indexOf(d)===1&&(s.output=C);continue}}}(E==="["&&b()!==":"||E==="-"&&b()==="]")&&(E=`\\${E}`),E==="]"&&(d.value==="["||d.value==="[^")&&(E=`\\${E}`),u.posix===!0&&E==="!"&&d.value==="["&&(E="^"),d.value+=E,He({value:E});continue}if(F.quotes===1&&E!=='"'){E=Y.escapeRegex(E),d.value+=E,He({value:E});continue}if(E==='"'){F.quotes=F.quotes===1?0:1,u.keepQuotes===!0&&R({type:"text",value:E});continue}if(E==="("){Pe("parens"),R({type:"paren",value:E});continue}if(E===")"){if(F.parens===0&&u.strictBrackets===!0)throw new SyntaxError(pe("opening","("));const m=O[O.length-1];if(m&&F.parens===m.parens+1){Rn(O.pop());continue}R({type:"paren",value:E,output:F.parens?")":"\\)"}),De("parens");continue}if(E==="["){if(u.nobracket===!0||!J().includes("]")){if(u.nobracket!==!0&&u.strictBrackets===!0)throw new SyntaxError(pe("closing","]"));E=`\\${E}`}else Pe("brackets");R({type:"bracket",value:E});continue}if(E==="]"){if(u.nobracket===!0||d&&d.type==="bracket"&&d.value.length===1){R({type:"text",value:E,output:`\\${E}`});continue}if(F.brackets===0){if(u.strictBrackets===!0)throw new SyntaxError(pe("opening","["));R({type:"text",value:E,output:`\\${E}`});continue}De("brackets");const m=d.value.slice(1);if(d.posix!==!0&&m[0]==="^"&&!m.includes("/")&&(E=`/${E}`),d.value+=E,He({value:E}),u.literalBrackets===!1||Y.hasRegexChars(m))continue;const w=Y.escapeRegex(d.value);if(F.output=F.output.slice(0,-d.value.length),u.literalBrackets===!0){F.output+=w,d.value=w;continue}d.value=`(${D}${w}|${d.value})`,F.output+=d.value;continue}if(E==="{"&&u.nobrace!==!0){Pe("braces");const m={type:"brace",value:E,output:"(",outputIndex:F.output.length,tokensIndex:F.tokens.length};T.push(m),R(m);continue}if(E==="}"){const m=T[T.length-1];if(u.nobrace===!0||!m){R({type:"text",value:E,output:E});continue}let w=")";if(m.dots===!0){const N=i.slice(),U=[];for(let L=N.length-1;L>=0&&(i.pop(),N[L].type!=="brace");L--)N[L].type!=="dots"&&U.unshift(N[L].value);w=iD(U,u),F.backtrack=!0}if(m.comma!==!0&&m.dots!==!0){const N=F.output.slice(0,m.outputIndex),U=F.tokens.slice(m.tokensIndex);m.value=m.output="\\{",E=w="\\}",F.output=N;for(const L of U)F.output+=L.output||L.value}R({type:"brace",value:E,output:w}),De("braces"),T.pop();continue}if(E==="|"){O.length>0&&O[O.length-1].conditions++,R({type:"text",value:E});continue}if(E===","){let m=E;const w=T[T.length-1];w&&ie[ie.length-1]==="braces"&&(w.comma=!0,m="|"),R({type:"comma",value:E,output:m});continue}if(E==="/"){if(d.type==="dot"&&F.index===F.start+1){F.start=F.index+1,F.consumed="",F.output="",i.pop(),d=s;continue}R({type:"slash",value:E,output:p});continue}if(E==="."){if(F.braces>0&&d.type==="dot"){d.value==="."&&(d.output=h);const m=T[T.length-1];d.type="dots",d.output+=E,d.value+=E,m.dots=!0;continue}if(F.braces+F.parens===0&&d.type!=="bos"&&d.type!=="slash"){R({type:"text",value:E,output:h});continue}R({type:"dot",value:E,output:h});continue}if(E==="?"){if(!(d&&d.value==="(")&&u.noextglob!==!0&&b()==="("&&b(2)!=="?"){Le("qmark",E);continue}if(d&&d.type==="paren"){const w=b();let N=E;if(w==="<"&&!Y.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(d.value==="("&&!/[!=<:]/.test(w)||w==="<"&&!/<([!=]|\w+>)/.test(J()))&&(N=`\\${E}`),R({type:"text",value:E,output:N});continue}if(u.dot!==!0&&(d.type==="slash"||d.type==="bos")){R({type:"qmark",value:E,output:Q});continue}R({type:"qmark",value:E,output:$});continue}if(E==="!"){if(u.noextglob!==!0&&b()==="("&&(b(2)!=="?"||!/[!=<:]/.test(b(3)))){Le("negate",E);continue}if(u.nonegate!==!0&&F.index===0){wn();continue}}if(E==="+"){if(u.noextglob!==!0&&b()==="("&&b(2)!=="?"){Le("plus",E);continue}if(d&&d.value==="("||u.regex===!1){R({type:"plus",value:E,output:l});continue}if(d&&(d.type==="bracket"||d.type==="paren"||d.type==="brace")||F.parens>0){R({type:"plus",value:E});continue}R({type:"plus",value:l});continue}if(E==="@"){if(u.noextglob!==!0&&b()==="("&&b(2)!=="?"){R({type:"at",extglob:!0,value:E,output:""});continue}R({type:"text",value:E});continue}if(E!=="*"){(E==="$"||E==="^")&&(E=`\\${E}`);const m=nD.exec(J());m&&(E+=m[0],F.index+=m[0].length),R({type:"text",value:E});continue}if(d&&(d.type==="globstar"||d.star===!0)){d.type="star",d.star=!0,d.value+=E,d.output=M,F.backtrack=!0,F.globstar=!0,V(E);continue}let _=J();if(u.noextglob!==!0&&/^\([^?]/.test(_)){Le("star",E);continue}if(d.type==="star"){if(u.noglobstar===!0){V(E);continue}const m=d.prev,w=m.prev,N=m.type==="slash"||m.type==="bos",U=w&&(w.type==="star"||w.type==="globstar");if(u.bash===!0&&(!N||_[0]&&_[0]!=="/")){R({type:"star",value:E,output:""});continue}const L=F.braces>0&&(m.type==="comma"||m.type==="brace"),lt=O.length&&(m.type==="pipe"||m.type==="paren");if(!N&&m.type!=="paren"&&!L&&!lt){R({type:"star",value:E,output:""});continue}for(;_.slice(0,3)==="/**";){const Ie=t[F.index+4];if(Ie&&Ie!=="/")break;_=_.slice(3),V("/**",3)}if(m.type==="bos"&&j()){d.type="globstar",d.value+=E,d.output=W(u),F.output=d.output,F.globstar=!0,V(E);continue}if(m.type==="slash"&&m.prev.type!=="bos"&&!U&&j()){F.output=F.output.slice(0,-(m.output+d.output).length),m.output=`(?:${m.output}`,d.type="globstar",d.output=W(u)+(u.strictSlashes?")":"|$)"),d.value+=E,F.globstar=!0,F.output+=m.output+d.output,V(E);continue}if(m.type==="slash"&&m.prev.type!=="bos"&&_[0]==="/"){const Ie=_[1]!==void 0?"|$":"";F.output=F.output.slice(0,-(m.output+d.output).length),m.output=`(?:${m.output}`,d.type="globstar",d.output=`${W(u)}${p}|${p}${Ie})`,d.value+=E,F.output+=m.output+d.output,F.globstar=!0,V(E+Z()),R({type:"slash",value:"/",output:""});continue}if(m.type==="bos"&&_[0]==="/"){d.type="globstar",d.value+=E,d.output=`(?:^|${p}|${W(u)}${p})`,F.output=d.output,F.globstar=!0,V(E+Z()),R({type:"slash",value:"/",output:""});continue}F.output=F.output.slice(0,-d.output.length),d.type="globstar",d.output=W(u),d.value+=E,F.output+=d.output,F.globstar=!0,V(E);continue}const x={type:"star",value:E,output:M};if(u.bash===!0){x.output=".*?",(d.type==="bos"||d.type==="slash")&&(x.output=A+x.output),R(x);continue}if(d&&(d.type==="bracket"||d.type==="paren")&&u.regex===!0){x.output=E,R(x);continue}(F.index===F.start||d.type==="slash"||d.type==="dot")&&(d.type==="dot"?(F.output+=B,d.output+=B):u.dot===!0?(F.output+=H,d.output+=H):(F.output+=A,d.output+=A),b()!=="*"&&(F.output+=C,d.output+=C)),R(x)}for(;F.brackets>0;){if(u.strictBrackets===!0)throw new SyntaxError(pe("closing","]"));F.output=Y.escapeLast(F.output,"["),De("brackets")}for(;F.parens>0;){if(u.strictBrackets===!0)throw new SyntaxError(pe("closing",")"));F.output=Y.escapeLast(F.output,"("),De("parens")}for(;F.braces>0;){if(u.strictBrackets===!0)throw new SyntaxError(pe("closing","}"));F.output=Y.escapeLast(F.output,"{"),De("braces")}if(u.strictSlashes!==!0&&(d.type==="star"||d.type==="bracket")&&R({type:"maybe_slash",value:"",output:`${p}?`}),F.backtrack===!0){F.output="";for(const _ of F.tokens)F.output+=_.output!=null?_.output:_.value,_.suffix&&(F.output+=_.suffix)}return F},"parse$3");kt.fastpaths=(t,e)=>{const u={...e},r=typeof u.maxLength=="number"?Math.min(qe,u.maxLength):qe,n=t.length;if(n>r)throw new SyntaxError(`Input length: ${n}, exceeds maximum allowed length: ${r}`);t=Cr[t]||t;const s=Y.isWindows(e),{DOT_LITERAL:i,SLASH_LITERAL:D,ONE_CHAR:o,DOTS_SLASH:c,NO_DOT:f,NO_DOTS:h,NO_DOTS_SLASH:l,STAR:p,START_ANCHOR:C}=Ye.globChars(s),g=u.dot?h:f,y=u.dot?l:f,B=u.capture?"":"?:",H={negated:!1,prefix:""};let $=u.bash===!0?".*?":p;u.capture&&($=`(${$})`);const Q=a(A=>A.noglobstar===!0?$:`(${B}(?:(?!${C}${A.dot?c:i}).)*?)`,"globstar"),G=a(A=>{switch(A){case"*":return`${g}${o}${$}`;case".*":return`${i}${o}${$}`;case"*.*":return`${g}${$}${i}${o}${$}`;case"*/*":return`${g}${$}${D}${o}${y}${$}`;case"**":return g+Q(u);case"**/*":return`(?:${g}${Q(u)}${D})?${y}${o}${$}`;case"**/*.*":return`(?:${g}${Q(u)}${D})?${y}${$}${i}${o}${$}`;case"**/.*":return`(?:${g}${Q(u)}${D})?${i}${o}${$}`;default:{const v=/^(.*?)\.(\w+)$/.exec(A);if(!v)return;const M=G(v[1]);return M?M+i+v[2]:void 0}}},"create"),se=Y.removePrefix(t,H);let W=G(se);return W&&u.strictSlashes!==!0&&(W+=`${D}?`),W};var DD=kt;const oD=z,aD=uD,Mt=DD,Gt=Ke,lD=ze,cD=a(t=>t&&typeof t=="object"&&!Array.isArray(t),"isObject$1"),P=a((t,e,u=!1)=>{if(Array.isArray(t)){const f=t.map(l=>P(l,e,u));return a(l=>{for(const p of f){const C=p(l);if(C)return C}return!1},"arrayMatcher")}const r=cD(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!r)throw new TypeError("Expected pattern to be a non-empty string");const n=e||{},s=Gt.isWindows(e),i=r?P.compileRe(t,e):P.makeRe(t,e,!1,!0),D=i.state;delete i.state;let o=a(()=>!1,"isIgnored");if(n.ignore){const f={...e,ignore:null,onMatch:null,onResult:null};o=P(n.ignore,f,u)}const c=a((f,h=!1)=>{const{isMatch:l,match:p,output:C}=P.test(f,i,e,{glob:t,posix:s}),g={glob:t,state:D,regex:i,posix:s,input:f,output:C,match:p,isMatch:l};return typeof n.onResult=="function"&&n.onResult(g),l===!1?(g.isMatch=!1,h?g:!1):o(f)?(typeof n.onIgnore=="function"&&n.onIgnore(g),g.isMatch=!1,h?g:!1):(typeof n.onMatch=="function"&&n.onMatch(g),h?g:!0)},"matcher");return u&&(c.state=D),c},"picomatch$3");P.test=(t,e,u,{glob:r,posix:n}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};const s=u||{},i=s.format||(n?Gt.toPosixSlashes:null);let D=t===r,o=D&&i?i(t):t;return D===!1&&(o=i?i(t):t,D=o===r),(D===!1||s.capture===!0)&&(s.matchBase===!0||s.basename===!0?D=P.matchBase(t,e,u,n):D=e.exec(o)),{isMatch:!!D,match:D,output:o}},P.matchBase=(t,e,u,r=Gt.isWindows(u))=>(e instanceof RegExp?e:P.makeRe(e,u)).test(oD.basename(t)),P.isMatch=(t,e,u)=>P(e,u)(t),P.parse=(t,e)=>Array.isArray(t)?t.map(u=>P.parse(u,e)):Mt(t,{...e,fastpaths:!1}),P.scan=(t,e)=>aD(t,e),P.compileRe=(t,e,u=!1,r=!1)=>{if(u===!0)return t.output;const n=e||{},s=n.contains?"":"^",i=n.contains?"":"$";let D=`${s}(?:${t.output})${i}`;t&&t.negated===!0&&(D=`^(?!${D}).*$`);const o=P.toRegex(D,e);return r===!0&&(o.state=t),o},P.makeRe=(t,e={},u=!1,r=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let n={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(n.output=Mt.fastpaths(t,e)),n.output||(n=Mt(t,e)),P.compileRe(n,e,u,r)},P.toRegex=(t,e)=>{try{const u=e||{};return new RegExp(t,u.flags||(u.nocase?"i":""))}catch(u){if(e&&e.debug===!0)throw u;return/$^/}},P.constants=lD;var fD=P,Fr=fD;const Re=oe,{Readable:hD}=On,be=z,{promisify:Xe}=_e,Wt=Fr,dD=Xe(Re.readdir),ED=Xe(Re.stat),gr=Xe(Re.lstat),pD=Xe(Re.realpath),CD="!",mr="READDIRP_RECURSIVE_ERROR",FD=new Set(["ENOENT","EPERM","EACCES","ELOOP",mr]),jt="files",_r="directories",Qe="files_directories",Ze="all",Ar=[jt,_r,Qe,Ze],gD=a(t=>FD.has(t.code),"isNormalFlowError"),[yr,mD]=process.versions.node.split(".").slice(0,2).map(t=>Number.parseInt(t,10)),_D=process.platform==="win32"&&(yr>10||yr===10&&mD>=5),wr=a(t=>{if(t!==void 0){if(typeof t=="function")return t;if(typeof t=="string"){const e=Wt(t.trim());return u=>e(u.basename)}if(Array.isArray(t)){const e=[],u=[];for(const r of t){const n=r.trim();n.charAt(0)===CD?u.push(Wt(n.slice(1))):e.push(Wt(n))}return u.length>0?e.length>0?r=>e.some(n=>n(r.basename))&&!u.some(n=>n(r.basename)):r=>!u.some(n=>n(r.basename)):r=>e.some(n=>n(r.basename))}}},"normalizeFilter");class at extends hD{static{a(this,"ReaddirpStream")}static get defaultOptions(){return{root:".",fileFilter:a(e=>!0,"fileFilter"),directoryFilter:a(e=>!0,"directoryFilter"),type:jt,lstat:!1,depth:2147483648,alwaysStat:!1}}constructor(e={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:e.highWaterMark||4096});const u={...at.defaultOptions,...e},{root:r,type:n}=u;this._fileFilter=wr(u.fileFilter),this._directoryFilter=wr(u.directoryFilter);const s=u.lstat?gr:ED;_D?this._stat=i=>s(i,{bigint:!0}):this._stat=s,this._maxDepth=u.depth,this._wantsDir=[_r,Qe,Ze].includes(n),this._wantsFile=[jt,Qe,Ze].includes(n),this._wantsEverything=n===Ze,this._root=be.resolve(r),this._isDirent="Dirent"in Re&&!u.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(r,1)],this.reading=!1,this.parent=void 0}async _read(e){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&e>0;){const{path:u,depth:r,files:n=[]}=this.parent||{};if(n.length>0){const s=n.splice(0,e).map(i=>this._formatEntry(i,u));for(const i of await Promise.all(s)){if(this.destroyed)return;const D=await this._getEntryType(i);D==="directory"&&this._directoryFilter(i)?(r<=this._maxDepth&&this.parents.push(this._exploreDir(i.fullPath,r+1)),this._wantsDir&&(this.push(i),e--)):(D==="file"||this._includeAsFile(i))&&this._fileFilter(i)&&this._wantsFile&&(this.push(i),e--)}}else{const s=this.parents.pop();if(!s){this.push(null);break}if(this.parent=await s,this.destroyed)return}}}catch(u){this.destroy(u)}finally{this.reading=!1}}}async _exploreDir(e,u){let r;try{r=await dD(e,this._rdOptions)}catch(n){this._onError(n)}return{files:r,depth:u,path:e}}async _formatEntry(e,u){let r;try{const n=this._isDirent?e.name:e,s=be.resolve(be.join(u,n));r={path:be.relative(this._root,s),fullPath:s,basename:n},r[this._statsProp]=this._isDirent?e:await this._stat(s)}catch(n){this._onError(n)}return r}_onError(e){gD(e)&&!this.destroyed?this.emit("warn",e):this.destroy(e)}async _getEntryType(e){const u=e&&e[this._statsProp];if(u){if(u.isFile())return"file";if(u.isDirectory())return"directory";if(u&&u.isSymbolicLink()){const r=e.fullPath;try{const n=await pD(r),s=await gr(n);if(s.isFile())return"file";if(s.isDirectory()){const i=n.length;if(r.startsWith(n)&&r.substr(i,1)===be.sep){const D=new Error(`Circular symlink detected: "${r}" points to "${n}"`);return D.code=mr,this._onError(D)}return"directory"}}catch(n){this._onError(n)}}}}_includeAsFile(e){const u=e&&e[this._statsProp];return u&&this._wantsEverything&&!u.isDirectory()}}const Ce=a((t,e={})=>{let u=e.entryType||e.type;if(u==="both"&&(u=Qe),u&&(e.type=u),t){if(typeof t!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(u&&!Ar.includes(u))throw new Error(`readdirp: Invalid type passed. Use one of ${Ar.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return e.root=t,new at(e)},"readdirp$1"),AD=a((t,e={})=>new Promise((u,r)=>{const n=[];Ce(t,e).on("data",s=>n.push(s)).on("end",()=>u(n)).on("error",s=>r(s))}),"readdirpPromise");Ce.promise=AD,Ce.ReaddirpStream=at,Ce.default=Ce;var yD=Ce,Ut={exports:{}};/*! - * normalize-path - * - * Copyright (c) 2014-2018, Jon Schlinkert. - * Released under the MIT License. - */var Rr=a(function(t,e){if(typeof t!="string")throw new TypeError("expected path to be a string");if(t==="\\"||t==="/")return"/";var u=t.length;if(u<=1)return t;var r="";if(u>4&&t[3]==="\\"){var n=t[2];(n==="?"||n===".")&&t.slice(0,2)==="\\\\"&&(t=t.slice(2),r="//")}var s=t.split(/[/\\]+/);return e!==!1&&s[s.length-1]===""&&s.pop(),r+s.join("/")},"normalizePath$2"),wD=Ut.exports;Object.defineProperty(wD,"__esModule",{value:!0});const br=Fr,RD=Rr,vr="!",bD={returnIndex:!1},vD=a(t=>Array.isArray(t)?t:[t],"arrify$1"),SD=a((t,e)=>{if(typeof t=="function")return t;if(typeof t=="string"){const u=br(t,e);return r=>t===r||u(r)}return t instanceof RegExp?u=>t.test(u):u=>!1},"createPattern"),Sr=a((t,e,u,r)=>{const n=Array.isArray(u),s=n?u[0]:u;if(!n&&typeof s!="string")throw new TypeError("anymatch: second argument must be a string: got "+Object.prototype.toString.call(s));const i=RD(s,!1);for(let o=0;o{if(t==null)throw new TypeError("anymatch: specify first argument");const r=typeof u=="boolean"?{returnIndex:u}:u,n=r.returnIndex||!1,s=vD(t),i=s.filter(o=>typeof o=="string"&&o.charAt(0)===vr).map(o=>o.slice(1)).map(o=>br(o,r)),D=s.filter(o=>typeof o!="string"||typeof o=="string"&&o.charAt(0)!==vr).map(o=>SD(o,r));return e==null?(o,c=!1)=>Sr(D,i,o,typeof c=="boolean"?c:!1):Sr(D,i,e,n)},"anymatch$1");Kt.default=Kt,Ut.exports=Kt;var BD=Ut.exports;/*! - * is-extglob - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */var $D=a(function(e){if(typeof e!="string"||e==="")return!1;for(var u;u=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(u[2])return!0;e=e.slice(u.index+u[0].length)}return!1},"isExtglob");/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */var TD=$D,Br={"{":"}","(":")","[":"]"},xD=a(function(t){if(t[0]==="!")return!0;for(var e=0,u=-2,r=-2,n=-2,s=-2,i=-2;ee&&(i===-1||i>r||(i=t.indexOf("\\",e),i===-1||i>r)))||n!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(n=t.indexOf("}",e),n>e&&(i=t.indexOf("\\",e),i===-1||i>n))||s!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(s=t.indexOf(")",e),s>e&&(i=t.indexOf("\\",e),i===-1||i>s))||u!==-1&&t[e]==="("&&t[e+1]!=="|"&&(uu&&(i=t.indexOf("\\",u),i===-1||i>s))))return!0;if(t[e]==="\\"){var D=t[e+1];e+=2;var o=Br[D];if(o){var c=t.indexOf(o,e);c!==-1&&(e=c+1)}if(t[e]==="!")return!0}else e++}return!1},"strictCheck"),OD=a(function(t){if(t[0]==="!")return!0;for(var e=0;etypeof e=="number"?Number.isInteger(e):typeof e=="string"&&e.trim()!==""?Number.isInteger(Number(e)):!1,t.find=(e,u)=>e.nodes.find(r=>r.type===u),t.exceedsLimit=(e,u,r=1,n)=>n===!1||!t.isInteger(e)||!t.isInteger(u)?!1:(Number(u)-Number(e))/Number(r)>=n,t.escapeNode=(e,u=0,r)=>{let n=e.nodes[u];n&&(r&&n.type===r||n.type==="open"||n.type==="close")&&n.escaped!==!0&&(n.value="\\"+n.value,n.escaped=!0)},t.encloseBrace=e=>e.type!=="brace"||e.commas>>0+e.ranges>>0?!1:(e.invalid=!0,!0),t.isInvalidBrace=e=>e.type!=="brace"?!1:e.invalid===!0||e.dollar?!0:!(e.commas>>0+e.ranges>>0)||e.open!==!0||e.close!==!0?(e.invalid=!0,!0):!1,t.isOpenOrClose=e=>e.type==="open"||e.type==="close"?!0:e.open===!0||e.close===!0,t.reduce=e=>e.reduce((u,r)=>(r.type==="text"&&u.push(r.value),r.type==="range"&&(r.type="text"),u),[]),t.flatten=(...e)=>{const u=[],r=a(n=>{for(let s=0;s{let u=a((r,n={})=>{let s=e.escapeInvalid&&Tr.isInvalidBrace(n),i=r.invalid===!0&&e.escapeInvalid===!0,D="";if(r.value)return(s||i)&&Tr.isOpenOrClose(r)?"\\"+r.value:r.value;if(r.value)return r.value;if(r.nodes)for(let o of r.nodes)D+=u(o);return D},"stringify");return u(t)},"stringify$4");/*! - * is-number - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Released under the MIT License. - */var WD=a(function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1},"isNumber$2");/*! - * to-regex-range - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Released under the MIT License. - */const xr=WD,le=a((t,e,u)=>{if(xr(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(xr(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let r={relaxZeros:!0,...u};typeof r.strictZeros=="boolean"&&(r.relaxZeros=r.strictZeros===!1);let n=String(r.relaxZeros),s=String(r.shorthand),i=String(r.capture),D=String(r.wrap),o=t+":"+e+"="+n+s+i+D;if(le.cache.hasOwnProperty(o))return le.cache[o].result;let c=Math.min(t,e),f=Math.max(t,e);if(Math.abs(c-f)===1){let g=t+"|"+e;return r.capture?`(${g})`:r.wrap===!1?g:`(?:${g})`}let h=Ir(t)||Ir(e),l={min:t,max:e,a:c,b:f},p=[],C=[];if(h&&(l.isPadded=h,l.maxLen=String(l.max).length),c<0){let g=f<0?Math.abs(f):1;C=Or(g,Math.abs(c),l,r),c=l.a=0}return f>=0&&(p=Or(c,f,l,r)),l.negatives=C,l.positives=p,l.result=jD(C,p),r.capture===!0?l.result=`(${l.result})`:r.wrap!==!1&&p.length+C.length>1&&(l.result=`(?:${l.result})`),le.cache[o]=l,l.result},"toRegexRange$1");function jD(t,e,u){let r=Yt(t,e,"-",!1)||[],n=Yt(e,t,"",!1)||[],s=Yt(t,e,"-?",!0)||[];return r.concat(s).concat(n).join("|")}a(jD,"collatePatterns");function UD(t,e){let u=1,r=1,n=Hr(t,u),s=new Set([e]);for(;t<=n&&n<=e;)s.add(n),u+=1,n=Hr(t,u);for(n=Pr(e+1,r)-1;t1&&D.count.pop(),D.count.push(f.count[0]),D.string=D.pattern+Lr(D.count),i=c+1;continue}u.isPadded&&(h=qD(c,u,r)),f.string=h+f.pattern+Lr(f.count),s.push(f),i=c+1,D=f}return s}a(Or,"splitToPatterns");function Yt(t,e,u,r,n){let s=[];for(let i of t){let{string:D}=i;!r&&!Nr(e,"string",D)&&s.push(u+D),r&&Nr(e,"string",D)&&s.push(u+D)}return s}a(Yt,"filterPatterns");function VD(t,e){let u=[];for(let r=0;re?1:e>t?-1:0}a(zD,"compare");function Nr(t,e,u){return t.some(r=>r[e]===u)}a(Nr,"contains");function Hr(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}a(Hr,"countNines");function Pr(t,e){return t-t%Math.pow(10,e)}a(Pr,"countZeros");function Lr(t){let[e=0,u=""]=t;return u||e>1?`{${e+(u?","+u:"")}}`:""}a(Lr,"toQuantifier");function YD(t,e,u){return`[${t}${e-t===1?"":"-"}${e}]`}a(YD,"toCharacterClass");function Ir(t){return/^-?(0+)\d/.test(t)}a(Ir,"hasPadding");function qD(t,e,u){if(!e.isPadded)return t;let r=Math.abs(e.maxLen-String(t).length),n=u.relaxZeros!==!1;switch(r){case 0:return"";case 1:return n?"0?":"0";case 2:return n?"0{0,2}":"00";default:return n?`0{0,${r}}`:`0{${r}}`}}a(qD,"padZeros"),le.cache={},le.clearCache=()=>le.cache={};var XD=le;/*! - * fill-range - * - * Copyright (c) 2014-present, Jon Schlinkert. - * Licensed under the MIT License. - */const QD=_e,kr=XD,Mr=a(t=>t!==null&&typeof t=="object"&&!Array.isArray(t),"isObject"),ZD=a(t=>e=>t===!0?Number(e):String(e),"transform"),qt=a(t=>typeof t=="number"||typeof t=="string"&&t!=="","isValidValue"),ve=a(t=>Number.isInteger(+t),"isNumber"),Xt=a(t=>{let e=`${t}`,u=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++u]==="0";);return u>0},"zeros"),JD=a((t,e,u)=>typeof t=="string"||typeof e=="string"?!0:u.stringify===!0,"stringify$3"),eo=a((t,e,u)=>{if(e>0){let r=t[0]==="-"?"-":"";r&&(t=t.slice(1)),t=r+t.padStart(r?e-1:e,"0")}return u===!1?String(t):t},"pad"),Gr=a((t,e)=>{let u=t[0]==="-"?"-":"";for(u&&(t=t.slice(1),e--);t.length{t.negatives.sort((i,D)=>iD?1:0),t.positives.sort((i,D)=>iD?1:0);let u=e.capture?"":"?:",r="",n="",s;return t.positives.length&&(r=t.positives.join("|")),t.negatives.length&&(n=`-(${u}${t.negatives.join("|")})`),r&&n?s=`${r}|${n}`:s=r||n,e.wrap?`(${u}${s})`:s},"toSequence"),Wr=a((t,e,u,r)=>{if(u)return kr(t,e,{wrap:!1,...r});let n=String.fromCharCode(t);if(t===e)return n;let s=String.fromCharCode(e);return`[${n}-${s}]`},"toRange"),jr=a((t,e,u)=>{if(Array.isArray(t)){let r=u.wrap===!0,n=u.capture?"":"?:";return r?`(${n}${t.join("|")})`:t.join("|")}return kr(t,e,u)},"toRegex"),Ur=a((...t)=>new RangeError("Invalid range arguments: "+QD.inspect(...t)),"rangeError"),Kr=a((t,e,u)=>{if(u.strictRanges===!0)throw Ur([t,e]);return[]},"invalidRange"),uo=a((t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},"invalidStep"),ro=a((t,e,u=1,r={})=>{let n=Number(t),s=Number(e);if(!Number.isInteger(n)||!Number.isInteger(s)){if(r.strictRanges===!0)throw Ur([t,e]);return[]}n===0&&(n=0),s===0&&(s=0);let i=n>s,D=String(t),o=String(e),c=String(u);u=Math.max(Math.abs(u),1);let f=Xt(D)||Xt(o)||Xt(c),h=f?Math.max(D.length,o.length,c.length):0,l=f===!1&&JD(t,e,r)===!1,p=r.transform||ZD(l);if(r.toRegex&&u===1)return Wr(Gr(t,h),Gr(e,h),!0,r);let C={negatives:[],positives:[]},g=a(H=>C[H<0?"negatives":"positives"].push(Math.abs(H)),"push"),y=[],B=0;for(;i?n>=s:n<=s;)r.toRegex===!0&&u>1?g(n):y.push(eo(p(n,B),h,l)),n=i?n-u:n+u,B++;return r.toRegex===!0?u>1?to(C,r):jr(y,null,{wrap:!1,...r}):y},"fillNumbers"),no=a((t,e,u=1,r={})=>{if(!ve(t)&&t.length>1||!ve(e)&&e.length>1)return Kr(t,e,r);let n=r.transform||(l=>String.fromCharCode(l)),s=`${t}`.charCodeAt(0),i=`${e}`.charCodeAt(0),D=s>i,o=Math.min(s,i),c=Math.max(s,i);if(r.toRegex&&u===1)return Wr(o,c,!1,r);let f=[],h=0;for(;D?s>=i:s<=i;)f.push(n(s,h)),s=D?s-u:s+u,h++;return r.toRegex===!0?jr(f,null,{wrap:!1,options:r}):f},"fillLetters"),et=a((t,e,u,r={})=>{if(e==null&&qt(t))return[t];if(!qt(t)||!qt(e))return Kr(t,e,r);if(typeof u=="function")return et(t,e,1,{transform:u});if(Mr(u))return et(t,e,0,u);let n={...r};return n.capture===!0&&(n.wrap=!0),u=u||n.step||1,ve(u)?ve(t)&&ve(e)?ro(t,e,u,n):no(t,e,Math.max(Math.abs(u),1),n):u!=null&&!Mr(u)?uo(u,n):et(t,e,1,u)},"fill$2");var Vr=et;const so=Vr,zr=Je,io=a((t,e={})=>{let u=a((r,n={})=>{let s=zr.isInvalidBrace(n),i=r.invalid===!0&&e.escapeInvalid===!0,D=s===!0||i===!0,o=e.escapeInvalid===!0?"\\":"",c="";if(r.isOpen===!0||r.isClose===!0)return o+r.value;if(r.type==="open")return D?o+r.value:"(";if(r.type==="close")return D?o+r.value:")";if(r.type==="comma")return r.prev.type==="comma"?"":D?r.value:"|";if(r.value)return r.value;if(r.nodes&&r.ranges>0){let f=zr.reduce(r.nodes),h=so(...f,{...e,wrap:!1,toRegex:!0});if(h.length!==0)return f.length>1&&h.length>1?`(${h})`:h}if(r.nodes)for(let f of r.nodes)c+=u(f,r);return c},"walk");return u(t)},"compile$1");var Do=io;const oo=Vr,Yr=zt,Fe=Je,ce=a((t="",e="",u=!1)=>{let r=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return u?Fe.flatten(e).map(n=>`{${n}}`):e;for(let n of t)if(Array.isArray(n))for(let s of n)r.push(ce(s,e,u));else for(let s of e)u===!0&&typeof s=="string"&&(s=`{${s}}`),r.push(Array.isArray(s)?ce(n,s,u):n+s);return Fe.flatten(r)},"append"),ao=a((t,e={})=>{let u=e.rangeLimit===void 0?1e3:e.rangeLimit,r=a((n,s={})=>{n.queue=[];let i=s,D=s.queue;for(;i.type!=="brace"&&i.type!=="root"&&i.parent;)i=i.parent,D=i.queue;if(n.invalid||n.dollar){D.push(ce(D.pop(),Yr(n,e)));return}if(n.type==="brace"&&n.invalid!==!0&&n.nodes.length===2){D.push(ce(D.pop(),["{}"]));return}if(n.nodes&&n.ranges>0){let h=Fe.reduce(n.nodes);if(Fe.exceedsLimit(...h,e.step,u))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let l=oo(...h,e);l.length===0&&(l=Yr(n,e)),D.push(ce(D.pop(),l)),n.nodes=[];return}let o=Fe.encloseBrace(n),c=n.queue,f=n;for(;f.type!=="brace"&&f.type!=="root"&&f.parent;)f=f.parent,c=f.queue;for(let h=0;h",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"};const fo=zt,{MAX_LENGTH:qr,CHAR_BACKSLASH:Qt,CHAR_BACKTICK:ho,CHAR_COMMA:Eo,CHAR_DOT:po,CHAR_LEFT_PARENTHESES:Co,CHAR_RIGHT_PARENTHESES:Fo,CHAR_LEFT_CURLY_BRACE:go,CHAR_RIGHT_CURLY_BRACE:mo,CHAR_LEFT_SQUARE_BRACKET:Xr,CHAR_RIGHT_SQUARE_BRACKET:Qr,CHAR_DOUBLE_QUOTE:_o,CHAR_SINGLE_QUOTE:Ao,CHAR_NO_BREAK_SPACE:yo,CHAR_ZERO_WIDTH_NOBREAK_SPACE:wo}=co,Ro=a((t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let u=e||{},r=typeof u.maxLength=="number"?Math.min(qr,u.maxLength):qr;if(t.length>r)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${r})`);let n={type:"root",input:t,nodes:[]},s=[n],i=n,D=n,o=0,c=t.length,f=0,h=0,l;const p=a(()=>t[f++],"advance"),C=a(g=>{if(g.type==="text"&&D.type==="dot"&&(D.type="text"),D&&D.type==="text"&&g.type==="text"){D.value+=g.value;return}return i.nodes.push(g),g.parent=i,g.prev=D,D=g,g},"push");for(C({type:"bos"});f0){if(i.ranges>0){i.ranges=0;let g=i.nodes.shift();i.nodes=[g,{type:"text",value:fo(i)}]}C({type:"comma",value:l}),i.commas++;continue}if(l===po&&h>0&&i.commas===0){let g=i.nodes;if(h===0||g.length===0){C({type:"text",value:l});continue}if(D.type==="dot"){if(i.range=[],D.value+=l,D.type="range",i.nodes.length!==3&&i.nodes.length!==5){i.invalid=!0,i.ranges=0,D.type="text";continue}i.ranges++,i.args=[];continue}if(D.type==="range"){g.pop();let y=g[g.length-1];y.value+=D.value+l,D=y,i.ranges--;continue}C({type:"dot",value:l});continue}C({type:"text",value:l})}do if(i=s.pop(),i.type!=="root"){i.nodes.forEach(B=>{B.nodes||(B.type==="open"&&(B.isOpen=!0),B.type==="close"&&(B.isClose=!0),B.nodes||(B.type="text"),B.invalid=!0)});let g=s[s.length-1],y=g.nodes.indexOf(i);g.nodes.splice(y,1,...i.nodes)}while(s.length>0);return C({type:"eos"}),n},"parse$1");var bo=Ro;const Zr=zt,vo=Do,So=lo,Bo=bo,q=a((t,e={})=>{let u=[];if(Array.isArray(t))for(let r of t){let n=q.create(r,e);Array.isArray(n)?u.push(...n):u.push(n)}else u=[].concat(q.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(u=[...new Set(u)]),u},"braces$1");q.parse=(t,e={})=>Bo(t,e),q.stringify=(t,e={})=>Zr(typeof t=="string"?q.parse(t,e):t,e),q.compile=(t,e={})=>(typeof t=="string"&&(t=q.parse(t,e)),vo(t,e)),q.expand=(t,e={})=>{typeof t=="string"&&(t=q.parse(t,e));let u=So(t,e);return e.noempty===!0&&(u=u.filter(Boolean)),e.nodupes===!0&&(u=[...new Set(u)]),u},q.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?q.compile(t,e):q.expand(t,e);var $o=q,To=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"],xo=To;const Oo=z,No=xo,Ho=new Set(No);var Po=a(t=>Ho.has(Oo.extname(t).slice(1).toLowerCase()),"isBinaryPath$1"),tt={};(function(t){const{sep:e}=z,{platform:u}=process,r=Au;t.EV_ALL="all",t.EV_READY="ready",t.EV_ADD="add",t.EV_CHANGE="change",t.EV_ADD_DIR="addDir",t.EV_UNLINK="unlink",t.EV_UNLINK_DIR="unlinkDir",t.EV_RAW="raw",t.EV_ERROR="error",t.STR_DATA="data",t.STR_END="end",t.STR_CLOSE="close",t.FSEVENT_CREATED="created",t.FSEVENT_MODIFIED="modified",t.FSEVENT_DELETED="deleted",t.FSEVENT_MOVED="moved",t.FSEVENT_CLONED="cloned",t.FSEVENT_UNKNOWN="unknown",t.FSEVENT_FLAG_MUST_SCAN_SUBDIRS=1,t.FSEVENT_TYPE_FILE="file",t.FSEVENT_TYPE_DIRECTORY="directory",t.FSEVENT_TYPE_SYMLINK="symlink",t.KEY_LISTENERS="listeners",t.KEY_ERR="errHandlers",t.KEY_RAW="rawEmitters",t.HANDLER_KEYS=[t.KEY_LISTENERS,t.KEY_ERR,t.KEY_RAW],t.DOT_SLASH=`.${e}`,t.BACK_SLASH_RE=/\\/g,t.DOUBLE_SLASH_RE=/\/\//,t.SLASH_OR_BACK_SLASH_RE=/[/\\]/,t.DOT_RE=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,t.REPLACER_RE=/^\.[/\\]/,t.SLASH="/",t.SLASH_SLASH="//",t.BRACE_START="{",t.BANG="!",t.ONE_DOT=".",t.TWO_DOTS="..",t.STAR="*",t.GLOBSTAR="**",t.ROOT_GLOBSTAR="/**/*",t.SLASH_GLOBSTAR="/**",t.DIR_SUFFIX="Dir",t.ANYMATCH_OPTS={dot:!0},t.STRING_TYPE="string",t.FUNCTION_TYPE="function",t.EMPTY_STR="",t.EMPTY_FN=()=>{},t.IDENTITY_FN=n=>n,t.isWindows=u==="win32",t.isMacos=u==="darwin",t.isLinux=u==="linux",t.isIBMi=r.type()==="OS400"})(tt);const ne=oe,I=z,{promisify:Se}=_e,Lo=Po,{isWindows:Io,isLinux:ko,EMPTY_FN:Mo,EMPTY_STR:Go,KEY_LISTENERS:ge,KEY_ERR:Zt,KEY_RAW:Be,HANDLER_KEYS:Wo,EV_CHANGE:ut,EV_ADD:rt,EV_ADD_DIR:jo,EV_ERROR:Jr,STR_DATA:Uo,STR_END:Ko,BRACE_START:Vo,STAR:zo}=tt,Yo="watch",qo=Se(ne.open),en=Se(ne.stat),Xo=Se(ne.lstat),Qo=Se(ne.close),Jt=Se(ne.realpath),Zo={lstat:Xo,stat:en},eu=a((t,e)=>{t instanceof Set?t.forEach(e):e(t)},"foreach"),$e=a((t,e,u)=>{let r=t[e];r instanceof Set||(t[e]=r=new Set([r])),r.add(u)},"addAndConvert"),Jo=a(t=>e=>{const u=t[e];u instanceof Set?u.clear():delete t[e]},"clearItem"),Te=a((t,e,u)=>{const r=t[e];r instanceof Set?r.delete(u):r===u&&delete t[e]},"delFromSet"),tn=a(t=>t instanceof Set?t.size===0:!t,"isEmptySet"),nt=new Map;function un(t,e,u,r,n){const s=a((i,D)=>{u(t),n(i,D,{watchedPath:t}),D&&t!==D&&st(I.resolve(t,D),ge,I.join(t,D))},"handleEvent");try{return ne.watch(t,e,s)}catch(i){r(i)}}a(un,"createFsWatchInstance");const st=a((t,e,u,r,n)=>{const s=nt.get(t);s&&eu(s[e],i=>{i(u,r,n)})},"fsWatchBroadcast"),ea=a((t,e,u,r)=>{const{listener:n,errHandler:s,rawEmitter:i}=r;let D=nt.get(e),o;if(!u.persistent)return o=un(t,u,n,s,i),o.close.bind(o);if(D)$e(D,ge,n),$e(D,Zt,s),$e(D,Be,i);else{if(o=un(t,u,st.bind(null,e,ge),s,st.bind(null,e,Be)),!o)return;o.on(Jr,async c=>{const f=st.bind(null,e,Zt);if(D.watcherUnusable=!0,Io&&c.code==="EPERM")try{const h=await qo(t,"r");await Qo(h),f(c)}catch{}else f(c)}),D={listeners:n,errHandlers:s,rawEmitters:i,watcher:o},nt.set(e,D)}return()=>{Te(D,ge,n),Te(D,Zt,s),Te(D,Be,i),tn(D.listeners)&&(D.watcher.close(),nt.delete(e),Wo.forEach(Jo(D)),D.watcher=void 0,Object.freeze(D))}},"setFsWatchListener"),tu=new Map,ta=a((t,e,u,r)=>{const{listener:n,rawEmitter:s}=r;let i=tu.get(e);const D=i&&i.options;return D&&(D.persistentu.interval)&&(i.listeners,i.rawEmitters,ne.unwatchFile(e),i=void 0),i?($e(i,ge,n),$e(i,Be,s)):(i={listeners:n,rawEmitters:s,options:u,watcher:ne.watchFile(e,u,(o,c)=>{eu(i.rawEmitters,h=>{h(ut,e,{curr:o,prev:c})});const f=o.mtimeMs;(o.size!==c.size||f>c.mtimeMs||f===0)&&eu(i.listeners,h=>h(t,o))})},tu.set(e,i)),()=>{Te(i,ge,n),Te(i,Be,s),tn(i.listeners)&&(tu.delete(e),ne.unwatchFile(e),i.options=i.watcher=void 0,Object.freeze(i))}},"setFsWatchFileListener");let ua=class{static{a(this,"NodeFsHandler")}constructor(e){this.fsw=e,this._boundHandleError=u=>e._handleError(u)}_watchWithNodeFs(e,u){const r=this.fsw.options,n=I.dirname(e),s=I.basename(e);this.fsw._getWatchedDir(n).add(s);const D=I.resolve(e),o={persistent:r.persistent};u||(u=Mo);let c;return r.usePolling?(o.interval=r.enableBinaryInterval&&Lo(s)?r.binaryInterval:r.interval,c=ta(e,D,o,{listener:u,rawEmitter:this.fsw._emitRaw})):c=ea(e,D,o,{listener:u,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw}),c}_handleFile(e,u,r){if(this.fsw.closed)return;const n=I.dirname(e),s=I.basename(e),i=this.fsw._getWatchedDir(n);let D=u;if(i.has(s))return;const o=a(async(f,h)=>{if(this.fsw._throttle(Yo,e,5)){if(!h||h.mtimeMs===0)try{const l=await en(e);if(this.fsw.closed)return;const p=l.atimeMs,C=l.mtimeMs;(!p||p<=C||C!==D.mtimeMs)&&this.fsw._emit(ut,e,l),ko&&D.ino!==l.ino?(this.fsw._closeFile(f),D=l,this.fsw._addPathCloser(f,this._watchWithNodeFs(e,o))):D=l}catch{this.fsw._remove(n,s)}else if(i.has(s)){const l=h.atimeMs,p=h.mtimeMs;(!l||l<=p||p!==D.mtimeMs)&&this.fsw._emit(ut,e,h),D=h}}},"listener"),c=this._watchWithNodeFs(e,o);if(!(r&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(e)){if(!this.fsw._throttle(rt,e,0))return;this.fsw._emit(rt,e,u)}return c}async _handleSymlink(e,u,r,n){if(this.fsw.closed)return;const s=e.fullPath,i=this.fsw._getWatchedDir(u);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let D;try{D=await Jt(r)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(i.has(n)?this.fsw._symlinkPaths.get(s)!==D&&(this.fsw._symlinkPaths.set(s,D),this.fsw._emit(ut,r,e.stats)):(i.add(n),this.fsw._symlinkPaths.set(s,D),this.fsw._emit(rt,r,e.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(s))return!0;this.fsw._symlinkPaths.set(s,!0)}_handleRead(e,u,r,n,s,i,D){if(e=I.join(e,Go),!r.hasGlob&&(D=this.fsw._throttle("readdir",e,1e3),!D))return;const o=this.fsw._getWatchedDir(r.path),c=new Set;let f=this.fsw._readdirp(e,{fileFilter:a(h=>r.filterPath(h),"fileFilter"),directoryFilter:a(h=>r.filterDir(h),"directoryFilter"),depth:0}).on(Uo,async h=>{if(this.fsw.closed){f=void 0;return}const l=h.path;let p=I.join(e,l);if(c.add(l),!(h.stats.isSymbolicLink()&&await this._handleSymlink(h,e,p,l))){if(this.fsw.closed){f=void 0;return}(l===n||!n&&!o.has(l))&&(this.fsw._incrReadyCount(),p=I.join(s,I.relative(s,p)),this._addToNodeFs(p,u,r,i+1))}}).on(Jr,this._boundHandleError);return new Promise(h=>f.once(Ko,()=>{if(this.fsw.closed){f=void 0;return}const l=D?D.clear():!1;h(),o.getChildren().filter(p=>p!==e&&!c.has(p)&&(!r.hasGlob||r.filterPath({fullPath:I.resolve(e,p)}))).forEach(p=>{this.fsw._remove(e,p)}),f=void 0,l&&this._handleRead(e,!1,r,n,s,i,D)}))}async _handleDir(e,u,r,n,s,i,D){const o=this.fsw._getWatchedDir(I.dirname(e)),c=o.has(I.basename(e));!(r&&this.fsw.options.ignoreInitial)&&!s&&!c&&(!i.hasGlob||i.globFilter(e))&&this.fsw._emit(jo,e,u),o.add(I.basename(e)),this.fsw._getWatchedDir(e);let f,h;const l=this.fsw.options.depth;if((l==null||n<=l)&&!this.fsw._symlinkPaths.has(D)){if(!s&&(await this._handleRead(e,r,i,s,e,n,f),this.fsw.closed))return;h=this._watchWithNodeFs(e,(p,C)=>{C&&C.mtimeMs===0||this._handleRead(p,!1,i,s,e,n,f)})}return h}async _addToNodeFs(e,u,r,n,s){const i=this.fsw._emitReady;if(this.fsw._isIgnored(e)||this.fsw.closed)return i(),!1;const D=this.fsw._getWatchHelpers(e,n);!D.hasGlob&&r&&(D.hasGlob=r.hasGlob,D.globFilter=r.globFilter,D.filterPath=o=>r.filterPath(o),D.filterDir=o=>r.filterDir(o));try{const o=await Zo[D.statMethod](D.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(D.watchPath,o))return i(),!1;const c=this.fsw.options.followSymlinks&&!e.includes(zo)&&!e.includes(Vo);let f;if(o.isDirectory()){const h=I.resolve(e),l=c?await Jt(e):e;if(this.fsw.closed||(f=await this._handleDir(D.watchPath,o,u,n,s,D,l),this.fsw.closed))return;h!==l&&l!==void 0&&this.fsw._symlinkPaths.set(h,l)}else if(o.isSymbolicLink()){const h=c?await Jt(e):e;if(this.fsw.closed)return;const l=I.dirname(D.watchPath);if(this.fsw._getWatchedDir(l).add(D.watchPath),this.fsw._emit(rt,D.watchPath,o),f=await this._handleDir(l,o,u,n,e,D,h),this.fsw.closed)return;h!==void 0&&this.fsw._symlinkPaths.set(I.resolve(e),h)}else f=this._handleFile(D.watchPath,o,u);return i(),this.fsw._addPathCloser(e,f),!1}catch(o){if(this.fsw._handleError(o))return i(),e}}};var ra=ua,uu={exports:{}};const ru=oe,k=z,{promisify:nu}=_e;let me;try{me=he.require("fsevents")}catch(t){process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR&&console.error(t)}if(me){const t=process.version.match(/v(\d+)\.(\d+)/);if(t&&t[1]&&t[2]){const e=Number.parseInt(t[1],10),u=Number.parseInt(t[2],10);e===8&&u<16&&(me=void 0)}}const{EV_ADD:su,EV_CHANGE:na,EV_ADD_DIR:rn,EV_UNLINK:it,EV_ERROR:sa,STR_DATA:ia,STR_END:Da,FSEVENT_CREATED:oa,FSEVENT_MODIFIED:aa,FSEVENT_DELETED:la,FSEVENT_MOVED:ca,FSEVENT_UNKNOWN:fa,FSEVENT_FLAG_MUST_SCAN_SUBDIRS:ha,FSEVENT_TYPE_FILE:da,FSEVENT_TYPE_DIRECTORY:xe,FSEVENT_TYPE_SYMLINK:nn,ROOT_GLOBSTAR:sn,DIR_SUFFIX:Ea,DOT_SLASH:Dn,FUNCTION_TYPE:iu,EMPTY_FN:pa,IDENTITY_FN:Ca}=tt,Fa=a(t=>isNaN(t)?{}:{depth:t},"Depth"),Du=nu(ru.stat),ga=nu(ru.lstat),on=nu(ru.realpath),ma={stat:Du,lstat:ga},fe=new Map,_a=10,Aa=new Set([69888,70400,71424,72704,73472,131328,131840,262912]),ya=a((t,e)=>({stop:me.watch(t,e)}),"createFSEventsInstance");function wa(t,e,u,r){let n=k.extname(e)?k.dirname(e):e;const s=k.dirname(n);let i=fe.get(n);Ra(s)&&(n=s);const D=k.resolve(t),o=D!==e,c=a((h,l,p)=>{o&&(h=h.replace(e,D)),(h===D||!h.indexOf(D+k.sep))&&u(h,l,p)},"filteredListener");let f=!1;for(const h of fe.keys())if(e.indexOf(k.resolve(h)+k.sep)===0){n=h,i=fe.get(n),f=!0;break}return i||f?i.listeners.add(c):(i={listeners:new Set([c]),rawEmitter:r,watcher:ya(n,(h,l)=>{if(!i.listeners.size||l&ha)return;const p=me.getInfo(h,l);i.listeners.forEach(C=>{C(h,l,p)}),i.rawEmitter(p.event,h,p)})},fe.set(n,i)),()=>{const h=i.listeners;if(h.delete(c),!h.size&&(fe.delete(n),i.watcher))return i.watcher.stop().then(()=>{i.rawEmitter=i.watcher=void 0,Object.freeze(i)})}}a(wa,"setFSEventsListener");const Ra=a(t=>{let e=0;for(const u of fe.keys())if(u.indexOf(t)===0&&(e++,e>=_a))return!0;return!1},"couldConsolidate"),ba=a(()=>me&&fe.size<128,"canUse"),ou=a((t,e)=>{let u=0;for(;!t.indexOf(e)&&(t=k.dirname(t))!==e;)u++;return u},"calcDepth"),an=a((t,e)=>t.type===xe&&e.isDirectory()||t.type===nn&&e.isSymbolicLink()||t.type===da&&e.isFile(),"sameTypes");let va=class{static{a(this,"FsEventsHandler")}constructor(e){this.fsw=e}checkIgnored(e,u){const r=this.fsw._ignoredPaths;if(this.fsw._isIgnored(e,u))return r.add(e),u&&u.isDirectory()&&r.add(e+sn),!0;r.delete(e),r.delete(e+sn)}addOrChange(e,u,r,n,s,i,D,o){const c=s.has(i)?na:su;this.handleEvent(c,e,u,r,n,s,i,D,o)}async checkExists(e,u,r,n,s,i,D,o){try{const c=await Du(e);if(this.fsw.closed)return;an(D,c)?this.addOrChange(e,u,r,n,s,i,D,o):this.handleEvent(it,e,u,r,n,s,i,D,o)}catch(c){c.code==="EACCES"?this.addOrChange(e,u,r,n,s,i,D,o):this.handleEvent(it,e,u,r,n,s,i,D,o)}}handleEvent(e,u,r,n,s,i,D,o,c){if(!(this.fsw.closed||this.checkIgnored(u)))if(e===it){const f=o.type===xe;(f||i.has(D))&&this.fsw._remove(s,D,f)}else{if(e===su){if(o.type===xe&&this.fsw._getWatchedDir(u),o.type===nn&&c.followSymlinks){const h=c.depth===void 0?void 0:ou(r,n)+1;return this._addToFsEvents(u,!1,!0,h)}this.fsw._getWatchedDir(s).add(D)}const f=o.type===xe?e+Ea:e;this.fsw._emit(f,u),f===rn&&this._addToFsEvents(u,!1,!0)}}_watchWithFsEvents(e,u,r,n){if(this.fsw.closed||this.fsw._isIgnored(e))return;const s=this.fsw.options,D=wa(e,u,a(async(o,c,f)=>{if(this.fsw.closed||s.depth!==void 0&&ou(o,u)>s.depth)return;const h=r(k.join(e,k.relative(e,o)));if(n&&!n(h))return;const l=k.dirname(h),p=k.basename(h),C=this.fsw._getWatchedDir(f.type===xe?h:l);if(Aa.has(c)||f.event===fa)if(typeof s.ignored===iu){let g;try{g=await Du(h)}catch{}if(this.fsw.closed||this.checkIgnored(h,g))return;an(f,g)?this.addOrChange(h,o,u,l,C,p,f,s):this.handleEvent(it,h,o,u,l,C,p,f,s)}else this.checkExists(h,o,u,l,C,p,f,s);else switch(f.event){case oa:case aa:return this.addOrChange(h,o,u,l,C,p,f,s);case la:case ca:return this.checkExists(h,o,u,l,C,p,f,s)}},"watchCallback"),this.fsw._emitRaw);return this.fsw._emitReady(),D}async _handleFsEventsSymlink(e,u,r,n){if(!(this.fsw.closed||this.fsw._symlinkPaths.has(u))){this.fsw._symlinkPaths.set(u,!0),this.fsw._incrReadyCount();try{const s=await on(e);if(this.fsw.closed)return;if(this.fsw._isIgnored(s))return this.fsw._emitReady();this.fsw._incrReadyCount(),this._addToFsEvents(s||e,i=>{let D=e;return s&&s!==Dn?D=i.replace(s,e):i!==Dn&&(D=k.join(e,i)),r(D)},!1,n)}catch(s){if(this.fsw._handleError(s))return this.fsw._emitReady()}}}emitAdd(e,u,r,n,s){const i=r(e),D=u.isDirectory(),o=this.fsw._getWatchedDir(k.dirname(i)),c=k.basename(i);D&&this.fsw._getWatchedDir(i),!o.has(c)&&(o.add(c),(!n.ignoreInitial||s===!0)&&this.fsw._emit(D?rn:su,i,u))}initWatch(e,u,r,n){if(this.fsw.closed)return;const s=this._watchWithFsEvents(r.watchPath,k.resolve(e||r.watchPath),n,r.globFilter);this.fsw._addPathCloser(u,s)}async _addToFsEvents(e,u,r,n){if(this.fsw.closed)return;const s=this.fsw.options,i=typeof u===iu?u:Ca,D=this.fsw._getWatchHelpers(e);try{const o=await ma[D.statMethod](D.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(D.watchPath,o))throw null;if(o.isDirectory()){if(D.globFilter||this.emitAdd(i(e),o,i,s,r),n&&n>s.depth)return;this.fsw._readdirp(D.watchPath,{fileFilter:a(c=>D.filterPath(c),"fileFilter"),directoryFilter:a(c=>D.filterDir(c),"directoryFilter"),...Fa(s.depth-(n||0))}).on(ia,c=>{if(this.fsw.closed||c.stats.isDirectory()&&!D.filterPath(c))return;const f=k.join(D.watchPath,c.path),{fullPath:h}=c;if(D.followSymlinks&&c.stats.isSymbolicLink()){const l=s.depth===void 0?void 0:ou(f,k.resolve(D.watchPath))+1;this._handleFsEventsSymlink(f,h,i,l)}else this.emitAdd(f,c.stats,i,s,r)}).on(sa,pa).on(Da,()=>{this.fsw._emitReady()})}else this.emitAdd(D.watchPath,o,i,s,r),this.fsw._emitReady()}catch(o){(!o||this.fsw._handleError(o))&&(this.fsw._emitReady(),this.fsw._emitReady())}if(s.persistent&&r!==!0)if(typeof u===iu)this.initWatch(void 0,e,D,i);else{let o;try{o=await on(D.watchPath)}catch{}this.initWatch(o,e,D,i)}}};uu.exports=va,uu.exports.canUse=ba;var Sa=uu.exports;const{EventEmitter:Ba}=xn,au=oe,S=z,{promisify:ln}=_e,$a=yD,lu=BD.default,Ta=GD,cu=$r,xa=$o,Oa=Rr,Na=ra,cn=Sa,{EV_ALL:fu,EV_READY:Ha,EV_ADD:Dt,EV_CHANGE:Oe,EV_UNLINK:fn,EV_ADD_DIR:Pa,EV_UNLINK_DIR:La,EV_RAW:Ia,EV_ERROR:hu,STR_CLOSE:ka,STR_END:Ma,BACK_SLASH_RE:Ga,DOUBLE_SLASH_RE:hn,SLASH_OR_BACK_SLASH_RE:Wa,DOT_RE:ja,REPLACER_RE:Ua,SLASH:du,SLASH_SLASH:Ka,BRACE_START:Va,BANG:Eu,ONE_DOT:dn,TWO_DOTS:za,GLOBSTAR:Ya,SLASH_GLOBSTAR:pu,ANYMATCH_OPTS:Cu,STRING_TYPE:Fu,FUNCTION_TYPE:qa,EMPTY_STR:gu,EMPTY_FN:Xa,isWindows:Qa,isMacos:Za,isIBMi:Ja}=tt,el=ln(au.stat),tl=ln(au.readdir),mu=a((t=[])=>Array.isArray(t)?t:[t],"arrify"),En=a((t,e=[])=>(t.forEach(u=>{Array.isArray(u)?En(u,e):e.push(u)}),e),"flatten"),pn=a(t=>{const e=En(mu(t));if(!e.every(u=>typeof u===Fu))throw new TypeError(`Non-string provided as watch path: ${e}`);return e.map(Fn)},"unifyPaths"),Cn=a(t=>{let e=t.replace(Ga,du),u=!1;for(e.startsWith(Ka)&&(u=!0);e.match(hn);)e=e.replace(hn,du);return u&&(e=du+e),e},"toUnix"),Fn=a(t=>Cn(S.normalize(Cn(t))),"normalizePathToUnix"),gn=a((t=gu)=>e=>typeof e!==Fu?e:Fn(S.isAbsolute(e)?e:S.join(t,e)),"normalizeIgnored"),ul=a((t,e)=>S.isAbsolute(t)?t:t.startsWith(Eu)?Eu+S.join(e,t.slice(1)):S.join(e,t),"getAbsolutePath"),X=a((t,e)=>t[e]===void 0,"undef");class rl{static{a(this,"DirEntry")}constructor(e,u){this.path=e,this._removeWatcher=u,this.items=new Set}add(e){const{items:u}=this;u&&e!==dn&&e!==za&&u.add(e)}async remove(e){const{items:u}=this;if(!u||(u.delete(e),u.size>0))return;const r=this.path;try{await tl(r)}catch{this._removeWatcher&&this._removeWatcher(S.dirname(r),S.basename(r))}}has(e){const{items:u}=this;if(u)return u.has(e)}getChildren(){const{items:e}=this;if(e)return[...e.values()]}dispose(){this.items.clear(),delete this.path,delete this._removeWatcher,delete this.items,Object.freeze(this)}}const nl="stat",sl="lstat";class il{static{a(this,"WatchHelper")}constructor(e,u,r,n){this.fsw=n,this.path=e=e.replace(Ua,gu),this.watchPath=u,this.fullWatchPath=S.resolve(u),this.hasGlob=u!==e,e===gu&&(this.hasGlob=!1),this.globSymlink=this.hasGlob&&r?void 0:!1,this.globFilter=this.hasGlob?lu(e,void 0,Cu):!1,this.dirParts=this.getDirParts(e),this.dirParts.forEach(s=>{s.length>1&&s.pop()}),this.followSymlinks=r,this.statMethod=r?nl:sl}checkGlobSymlink(e){return this.globSymlink===void 0&&(this.globSymlink=e.fullParentDir===this.fullWatchPath?!1:{realPath:e.fullParentDir,linkPath:this.fullWatchPath}),this.globSymlink?e.fullPath.replace(this.globSymlink.realPath,this.globSymlink.linkPath):e.fullPath}entryPath(e){return S.join(this.watchPath,S.relative(this.watchPath,this.checkGlobSymlink(e)))}filterPath(e){const{stats:u}=e;if(u&&u.isSymbolicLink())return this.filterDir(e);const r=this.entryPath(e);return(this.hasGlob&&typeof this.globFilter===qa?this.globFilter(r):!0)&&this.fsw._isntIgnored(r,u)&&this.fsw._hasReadPermissions(u)}getDirParts(e){if(!this.hasGlob)return[];const u=[];return(e.includes(Va)?xa.expand(e):[e]).forEach(n=>{u.push(S.relative(this.watchPath,n).split(Wa))}),u}filterDir(e){if(this.hasGlob){const u=this.getDirParts(this.checkGlobSymlink(e));let r=!1;this.unmatchedGlob=!this.dirParts.some(n=>n.every((s,i)=>(s===Ya&&(r=!0),r||!u[0][i]||lu(s,u[0][i],Cu))))}return!this.unmatchedGlob&&this.fsw._isntIgnored(this.entryPath(e),e.stats)}}class Dl extends Ba{static{a(this,"FSWatcher")}constructor(e){super();const u={};e&&Object.assign(u,e),this._watched=new Map,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._symlinkPaths=new Map,this._streams=new Set,this.closed=!1,X(u,"persistent")&&(u.persistent=!0),X(u,"ignoreInitial")&&(u.ignoreInitial=!1),X(u,"ignorePermissionErrors")&&(u.ignorePermissionErrors=!1),X(u,"interval")&&(u.interval=100),X(u,"binaryInterval")&&(u.binaryInterval=300),X(u,"disableGlobbing")&&(u.disableGlobbing=!1),u.enableBinaryInterval=u.binaryInterval!==u.interval,X(u,"useFsEvents")&&(u.useFsEvents=!u.usePolling),cn.canUse()||(u.useFsEvents=!1),X(u,"usePolling")&&!u.useFsEvents&&(u.usePolling=Za),Ja&&(u.usePolling=!0);const n=process.env.CHOKIDAR_USEPOLLING;if(n!==void 0){const o=n.toLowerCase();o==="false"||o==="0"?u.usePolling=!1:o==="true"||o==="1"?u.usePolling=!0:u.usePolling=!!o}const s=process.env.CHOKIDAR_INTERVAL;s&&(u.interval=Number.parseInt(s,10)),X(u,"atomic")&&(u.atomic=!u.usePolling&&!u.useFsEvents),u.atomic&&(this._pendingUnlinks=new Map),X(u,"followSymlinks")&&(u.followSymlinks=!0),X(u,"awaitWriteFinish")&&(u.awaitWriteFinish=!1),u.awaitWriteFinish===!0&&(u.awaitWriteFinish={});const i=u.awaitWriteFinish;i&&(i.stabilityThreshold||(i.stabilityThreshold=2e3),i.pollInterval||(i.pollInterval=100),this._pendingWrites=new Map),u.ignored&&(u.ignored=mu(u.ignored));let D=0;this._emitReady=()=>{D++,D>=this._readyCount&&(this._emitReady=Xa,this._readyEmitted=!0,process.nextTick(()=>this.emit(Ha)))},this._emitRaw=(...o)=>this.emit(Ia,...o),this._readyEmitted=!1,this.options=u,u.useFsEvents?this._fsEventsHandler=new cn(this):this._nodeFsHandler=new Na(this),Object.freeze(u)}add(e,u,r){const{cwd:n,disableGlobbing:s}=this.options;this.closed=!1;let i=pn(e);return n&&(i=i.map(D=>{const o=ul(D,n);return s||!cu(D)?o:Oa(o)})),i=i.filter(D=>D.startsWith(Eu)?(this._ignoredPaths.add(D.slice(1)),!1):(this._ignoredPaths.delete(D),this._ignoredPaths.delete(D+pu),this._userIgnored=void 0,!0)),this.options.useFsEvents&&this._fsEventsHandler?(this._readyCount||(this._readyCount=i.length),this.options.persistent&&(this._readyCount+=i.length),i.forEach(D=>this._fsEventsHandler._addToFsEvents(D))):(this._readyCount||(this._readyCount=0),this._readyCount+=i.length,Promise.all(i.map(async D=>{const o=await this._nodeFsHandler._addToNodeFs(D,!r,0,0,u);return o&&this._emitReady(),o})).then(D=>{this.closed||D.filter(o=>o).forEach(o=>{this.add(S.dirname(o),S.basename(u||o))})})),this}unwatch(e){if(this.closed)return this;const u=pn(e),{cwd:r}=this.options;return u.forEach(n=>{!S.isAbsolute(n)&&!this._closers.has(n)&&(r&&(n=S.join(r,n)),n=S.resolve(n)),this._closePath(n),this._ignoredPaths.add(n),this._watched.has(n)&&this._ignoredPaths.add(n+pu),this._userIgnored=void 0}),this}close(){if(this.closed)return this._closePromise;this.closed=!0,this.removeAllListeners();const e=[];return this._closers.forEach(u=>u.forEach(r=>{const n=r();n instanceof Promise&&e.push(n)})),this._streams.forEach(u=>u.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(u=>u.dispose()),["closers","watched","streams","symlinkPaths","throttled"].forEach(u=>{this[`_${u}`].clear()}),this._closePromise=e.length?Promise.all(e).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){const e={};return this._watched.forEach((u,r)=>{const n=this.options.cwd?S.relative(this.options.cwd,r):r;e[n||dn]=u.getChildren().sort()}),e}emitWithAll(e,u){this.emit(...u),e!==hu&&this.emit(fu,...u)}async _emit(e,u,r,n,s){if(this.closed)return;const i=this.options;Qa&&(u=S.normalize(u)),i.cwd&&(u=S.relative(i.cwd,u));const D=[e,u];s!==void 0?D.push(r,n,s):n!==void 0?D.push(r,n):r!==void 0&&D.push(r);const o=i.awaitWriteFinish;let c;if(o&&(c=this._pendingWrites.get(u)))return c.lastChange=new Date,this;if(i.atomic){if(e===fn)return this._pendingUnlinks.set(u,D),setTimeout(()=>{this._pendingUnlinks.forEach((f,h)=>{this.emit(...f),this.emit(fu,...f),this._pendingUnlinks.delete(h)})},typeof i.atomic=="number"?i.atomic:100),this;e===Dt&&this._pendingUnlinks.has(u)&&(e=D[0]=Oe,this._pendingUnlinks.delete(u))}if(o&&(e===Dt||e===Oe)&&this._readyEmitted){const f=a((h,l)=>{h?(e=D[0]=hu,D[1]=h,this.emitWithAll(e,D)):l&&(D.length>2?D[2]=l:D.push(l),this.emitWithAll(e,D))},"awfEmit");return this._awaitWriteFinish(u,o.stabilityThreshold,e,f),this}if(e===Oe&&!this._throttle(Oe,u,50))return this;if(i.alwaysStat&&r===void 0&&(e===Dt||e===Pa||e===Oe)){const f=i.cwd?S.join(i.cwd,u):u;let h;try{h=await el(f)}catch{}if(!h||this.closed)return;D.push(h)}return this.emitWithAll(e,D),this}_handleError(e){const u=e&&e.code;return e&&u!=="ENOENT"&&u!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||u!=="EPERM"&&u!=="EACCES")&&this.emit(hu,e),e||this.closed}_throttle(e,u,r){this._throttled.has(e)||this._throttled.set(e,new Map);const n=this._throttled.get(e),s=n.get(u);if(s)return s.count++,!1;let i;const D=a(()=>{const c=n.get(u),f=c?c.count:0;return n.delete(u),clearTimeout(i),c&&clearTimeout(c.timeoutObject),f},"clear");i=setTimeout(D,r);const o={timeoutObject:i,clear:D,count:0};return n.set(u,o),o}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(e,u,r,n){let s,i=e;this.options.cwd&&!S.isAbsolute(e)&&(i=S.join(this.options.cwd,e));const D=new Date,o=a(c=>{au.stat(i,(f,h)=>{if(f||!this._pendingWrites.has(e)){f&&f.code!=="ENOENT"&&n(f);return}const l=Number(new Date);c&&h.size!==c.size&&(this._pendingWrites.get(e).lastChange=l);const p=this._pendingWrites.get(e);l-p.lastChange>=u?(this._pendingWrites.delete(e),n(void 0,h)):s=setTimeout(o,this.options.awaitWriteFinish.pollInterval,h)})},"awaitWriteFinish");this._pendingWrites.has(e)||(this._pendingWrites.set(e,{lastChange:D,cancelWait:a(()=>(this._pendingWrites.delete(e),clearTimeout(s),r),"cancelWait")}),s=setTimeout(o,this.options.awaitWriteFinish.pollInterval))}_getGlobIgnored(){return[...this._ignoredPaths.values()]}_isIgnored(e,u){if(this.options.atomic&&ja.test(e))return!0;if(!this._userIgnored){const{cwd:r}=this.options,n=this.options.ignored,s=n&&n.map(gn(r)),i=mu(s).filter(o=>typeof o===Fu&&!cu(o)).map(o=>o+pu),D=this._getGlobIgnored().map(gn(r)).concat(s,i);this._userIgnored=lu(D,void 0,Cu)}return this._userIgnored([e,u])}_isntIgnored(e,u){return!this._isIgnored(e,u)}_getWatchHelpers(e,u){const r=u||this.options.disableGlobbing||!cu(e)?e:Ta(e),n=this.options.followSymlinks;return new il(e,r,n,this)}_getWatchedDir(e){this._boundRemove||(this._boundRemove=this._remove.bind(this));const u=S.resolve(e);return this._watched.has(u)||this._watched.set(u,new rl(u,this._boundRemove)),this._watched.get(u)}_hasReadPermissions(e){if(this.options.ignorePermissionErrors)return!0;const r=(e&&Number.parseInt(e.mode,10))&511;return!!(4&Number.parseInt(r.toString(8)[0],10))}_remove(e,u,r){const n=S.join(e,u),s=S.resolve(n);if(r=r??(this._watched.has(n)||this._watched.has(s)),!this._throttle("remove",n,100))return;!r&&!this.options.useFsEvents&&this._watched.size===1&&this.add(e,u,!0),this._getWatchedDir(n).getChildren().forEach(l=>this._remove(n,l));const o=this._getWatchedDir(e),c=o.has(u);o.remove(u),this._symlinkPaths.has(s)&&this._symlinkPaths.delete(s);let f=n;if(this.options.cwd&&(f=S.relative(this.options.cwd,n)),this.options.awaitWriteFinish&&this._pendingWrites.has(f)&&this._pendingWrites.get(f).cancelWait()===Dt)return;this._watched.delete(n),this._watched.delete(s);const h=r?La:fn;c&&!this._isIgnored(n)&&this._emit(h,n),this.options.useFsEvents||this._closePath(n)}_closePath(e){this._closeFile(e);const u=S.dirname(e);this._getWatchedDir(u).remove(S.basename(e))}_closeFile(e){const u=this._closers.get(e);u&&(u.forEach(r=>r()),this._closers.delete(e))}_addPathCloser(e,u){if(!u)return;let r=this._closers.get(e);r||(r=[],this._closers.set(e,r)),r.push(u)}_readdirp(e,u){if(this.closed)return;const r={type:fu,alwaysStat:!0,lstat:!0,...u};let n=$a(e,r);return this._streams.add(n),n.once(ka,()=>{n=void 0}),n.once(Ma,()=>{n&&(this._streams.delete(n),n=void 0)}),n}}const ol=a((t,e)=>{const u=new Dl(e);return u.add(t),u},"watch");var al=ol;const ot=a((t=!0)=>{let e=!1;return u=>{if(e||u==="unknown-flag")return!0;if(u==="argument")return e=!0,t}},"ignoreAfterArgument"),mn=a((t,e=process.argv.slice(2))=>(wu(t,e,{ignore:ot()}),e),"removeArgvFlags"),ll=a(t=>{let e=Buffer.alloc(0);return u=>{for(e=Buffer.concat([e,u]);e.length>4;){const r=e.readInt32BE(0);if(e.length>=4+r){const n=e.slice(4,4+r);t(n),e=e.slice(4+r)}else break}}},"bufferData"),_n=a(async()=>{const t=Nn.createServer(u=>{u.on("data",ll(r=>{const n=JSON.parse(r.toString());t.emit("data",n)}))}),e=he.getPipePath(process.pid);return await ft.promises.mkdir(Hn.tmpdir,{recursive:!0}),await ft.promises.rm(e,{force:!0}),await new Promise((u,r)=>{t.listen(e,u),t.on("error",r)}),t.unref(),process.on("exit",()=>{if(t.close(),!he.isWindows)try{ft.rmSync(e)}catch{}}),t},"createIpcServer"),cl=a(()=>new Date().toLocaleTimeString(),"currentTime"),Ne=a((...t)=>console.log(ue.gray(cl()),ue.lightCyan("[tsx]"),...t),"log"),fl="\x1Bc",hl=a((t,e)=>{let u;return function(){u&&clearTimeout(u),u=setTimeout(()=>Reflect.apply(t,this,arguments),e)}},"debounce"),An={noCache:{type:Boolean,description:"Disable caching",default:!1},tsconfig:{type:String,description:"Custom tsconfig.json path"},clearScreen:{type:Boolean,description:"Clearing the screen on rerun",default:!0},ignore:{type:[String],description:"Paths & globs to exclude from being watched (Deprecated: use --exclude)"},include:{type:[String],description:"Additional paths & globs to watch"},exclude:{type:[String],description:"Paths & globs to exclude from being watched"}},dl=Js({name:"watch",parameters:["